dotnetreport-ng 5.2.1 → 5.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/dotnetreport-ng.umd.js +9 -7
- package/bundles/dotnetreport-ng.umd.js.map +1 -1
- package/dotnetreport-ng-5.3.2.tgz +0 -0
- package/esm2015/lib/dotnetdashboard/dotnetdashboard.component.js +505 -340
- package/esm2015/lib/dotnetreport/dotnetreport.component.js +505 -339
- package/esm2015/lib/dotnetsetup/dotnetsetup.component.js +1531 -1352
- package/fesm2015/dotnetreport-ng.js +2556 -2046
- package/fesm2015/dotnetreport-ng.js.map +1 -1
- package/package.json +2 -2
- package/dotnetreport-ng-5.2.1.tgz +0 -0
|
@@ -18,7 +18,8 @@ export class DotnetsetupComponent {
|
|
|
18
18
|
let loadSetupSchemaUrl = this.baseServiceUrl + "/DotNetReportApi/LoadSetupSchema";
|
|
19
19
|
this.queryParams = this.route.snapshot.queryParams;
|
|
20
20
|
var databaseApiKey = this.queryParams['databaseApiKey'] || '';
|
|
21
|
-
|
|
21
|
+
var onlyApi = this.queryParams['onlyApi'] === 'false';
|
|
22
|
+
this.http.get(loadSetupSchemaUrl + "?databaseApiKey=" + databaseApiKey + '&onlyApi=' + onlyApi).subscribe((model) => {
|
|
22
23
|
var options = {
|
|
23
24
|
model: model,
|
|
24
25
|
saveTableUrl: model.ApiUrl + 'ReportApi/SaveTable',
|
|
@@ -34,6 +35,7 @@ export class DotnetsetupComponent {
|
|
|
34
35
|
searchProcUrl: this.baseServiceUrl + '/DotNetReportApi/SearchProcedure',
|
|
35
36
|
getSchemaFromSql: this.baseServiceUrl + '/DotNetReportApi/GetSchemaFromSql',
|
|
36
37
|
apiUrl: this.baseServiceUrl + '/DotNetReportApi/CallReportApi',
|
|
38
|
+
onlyApi: onlyApi
|
|
37
39
|
};
|
|
38
40
|
this.renderKOTemplates();
|
|
39
41
|
var vm = new manageViewModel(options);
|
|
@@ -53,1375 +55,1552 @@ export class DotnetsetupComponent {
|
|
|
53
55
|
renderKOTemplates() {
|
|
54
56
|
this.reportTemplates = this.sanitizer.bypassSecurityTrustHtml(`
|
|
55
57
|
<!-- Dotnet Report HTML Templates -->
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
58
|
+
<script type="text/html" id="report-filter">
|
|
59
|
+
<div class="form-group">
|
|
60
|
+
<!-- ko if: !hasForeignKey-->
|
|
61
|
+
<!-- ko if: fieldType=='DateTime'-->
|
|
62
|
+
<!-- ko if: ['=','>','<','>=','<=', 'not equal'].indexOf($parent.Operator()) != -1 -->
|
|
63
|
+
<input class="form-control" data-bind="datepicker: $parent.Value" required />
|
|
64
|
+
<!-- /ko -->
|
|
65
|
+
<!-- ko if: ['between'].indexOf($parent.Operator()) != -1 -->
|
|
66
|
+
From
|
|
67
|
+
<input required class="form-control" data-bind="datepicker: $parent.Value" />
|
|
68
|
+
to
|
|
69
|
+
<input data-bind="datepicker: $parent.Value2" class="form-control" required />
|
|
70
|
+
<!-- /ko -->
|
|
71
|
+
<!-- ko if: ['range'].indexOf($parent.Operator()) != -1 -->
|
|
72
|
+
<select data-bind="value: $parent.Value" class="form-control" required>
|
|
73
|
+
<option value=""></option>
|
|
74
|
+
<option>Today</option>
|
|
75
|
+
<option>Today +</option>
|
|
76
|
+
<option>Today -</option>
|
|
77
|
+
<option>Yesterday</option>
|
|
78
|
+
<option>This Week</option>
|
|
79
|
+
<option>Last Week</option>
|
|
80
|
+
<option>This Month</option>
|
|
81
|
+
<option>Last Month</option>
|
|
82
|
+
<option>This Year</option>
|
|
83
|
+
<option>Last Year</option>
|
|
84
|
+
<option>This Week To Date</option>
|
|
85
|
+
<option>This Month To Date</option>
|
|
86
|
+
<option>This Year To Date</option>
|
|
87
|
+
<option>Last 30 Days</option>
|
|
88
|
+
<optgroup label="Comparison Options">
|
|
89
|
+
<option>>= Today</option>
|
|
90
|
+
<option><= Today</option>
|
|
91
|
+
<option>>= Today +</option>
|
|
92
|
+
<option><= Today +</option>
|
|
93
|
+
<option>>= Today -</option>
|
|
94
|
+
<option><= Today -</option>
|
|
95
|
+
</optgroup>
|
|
96
|
+
</select>
|
|
97
|
+
<div data-bind="if: $parent.Value().indexOf('Today +') >= 0 || $parent.Value().indexOf('Today -') >= 0" class="form-group pull-left" style="padding-top: 5px;">
|
|
98
|
+
<input type="number" class="form-control input-sm pull-left" style="width: 80px;" data-bind="value: $parent.Value2" required /><span style="padding: 5px 5px;" class="pull-left"> days</span>
|
|
99
|
+
</div>
|
|
100
|
+
<!-- /ko -->
|
|
101
|
+
<!-- /ko -->
|
|
102
|
+
<!-- ko if: ['Int','Money','Float','Double'].indexOf(fieldType) != -1 -->
|
|
103
|
+
<!-- ko if: ['=','>','<','>=','<=', 'not equal'].indexOf($parent.Operator()) != -1 && ['is blank', 'is not blank', 'is null', 'is not null'].indexOf($parent.Operator()) == -1 -->
|
|
104
|
+
<input class="form-control" type="number" data-bind="value: $parent.Value, disable: $parent.Operator() == 'is default'" required />
|
|
105
|
+
<!-- /ko -->
|
|
106
|
+
<!-- ko if: ['between'].indexOf($parent.Operator()) != -1 -->
|
|
107
|
+
From
|
|
108
|
+
<input class="form-control" type="number" data-bind="value: $parent.Value" required />
|
|
109
|
+
to
|
|
110
|
+
<input class="form-control" type="number" data-bind="value: $parent.Value2" required />
|
|
111
|
+
<!-- /ko -->
|
|
112
|
+
<!-- /ko -->
|
|
113
|
+
<!-- ko if: fieldType=='Boolean' && ['is blank', 'is not blank', 'is null', 'is not null'].indexOf($parent.Operator()) == -1 -->
|
|
114
|
+
<select required class="form-control" data-bind="value: $parent.Value, disable: $parent.Operator() == 'is default'">
|
|
115
|
+
<option value="1">Yes</option>
|
|
116
|
+
<option value="0">No</option>
|
|
117
|
+
</select>
|
|
118
|
+
<!-- /ko -->
|
|
119
|
+
<!-- ko if: ['Int','Money','Float','Double','Date','DateTime','Boolean'].indexOf(fieldType) == -1 && ['is blank', 'is not blank', 'is null', 'is not null'].indexOf($parent.Operator()) == -1 -->
|
|
120
|
+
<input class="form-control" type="text" data-bind="value: $parent.Value, disable: $parent.Operator() == 'is default'" required />
|
|
121
|
+
<!-- /ko -->
|
|
122
|
+
<!-- /ko -->
|
|
123
|
+
<!-- ko if: hasForeignKey && $parent.Operator() != 'all' -->
|
|
124
|
+
<!-- ko if: hasForeignParentKey && $parent.showParentFilter() -->
|
|
125
|
+
<select multiple class="form-control" data-bind="select2: { placeholder: 'Please Choose', allowClear: true }, options: $parent.ParentList, optionsText: 'text', optionsValue: 'id', selectedOptions: $parent.ParentIn"></select>
|
|
126
|
+
<!-- /ko -->
|
|
127
|
+
<!-- ko if: $parent.Operator()=='='-->
|
|
128
|
+
<select required class="form-control" data-bind="options: $parent.LookupList, optionsText: 'text', optionsValue: 'id', value: $parent.Value, optionsCaption: 'Please Choose'"></select>
|
|
129
|
+
<!-- /ko -->
|
|
130
|
+
<!-- ko if: $parent.Operator()=='in' || $parent.Operator()=='not in'-->
|
|
131
|
+
<select required multiple class="form-control" data-bind="select2: { placeholder: 'Please Choose', allowClear: true }, options: $parent.LookupList, optionsText: 'text', optionsValue: 'id', selectedOptions: $parent.ValueIn"></select>
|
|
132
|
+
<!-- /ko -->
|
|
133
|
+
<!-- /ko -->
|
|
134
|
+
</div>
|
|
135
|
+
</script>
|
|
136
|
+
<script type="text/html" id="pager-template">
|
|
137
|
+
<div class="pager-container">
|
|
138
|
+
<a href="" title="first" data-bind="click: first, enable: !isFirstPage()"><i class="fa fa-backward report-pager-btn" style="font-size: 18px;"></i></a>
|
|
139
|
+
<a href="" title="previous" data-bind="click: previous, enable: !isFirstPage()"><i class="fa fa-caret-left fa-2x report-pager-btn"></i></a>
|
|
140
|
+
<select class="form-control form-control-sm" data-bind="options: [10,30,50,100,150,200,500], value: pageSize"></select>
|
|
141
|
+
<span class="pager-pageinfo">
|
|
142
|
+
<span>Page</span>
|
|
143
|
+
<input type="number" min="1" pattern="[0-9]*" class="form-control form-control-sm text-center" data-bind="
|
|
144
|
+
value: currentPage,
|
|
145
|
+
attr: { max: pages() }" />
|
|
146
|
+
<span>of</span>
|
|
147
|
+
<span data-bind="text: pages"></span>
|
|
148
|
+
</span>
|
|
149
|
+
|
|
150
|
+
<a href="" title="next" data-bind="click: next, enable: !isLastPage()"><i class="fa fa-caret-right fa-2x report-pager-btn"></i></a>
|
|
151
|
+
<a href="" title="last" data-bind="click: last, enable: !isLastPage()"><i class="fa fa-forward report-pager-btn" style="font-size: 18px;"></i></a>
|
|
152
|
+
</div>
|
|
153
|
+
</script>
|
|
154
|
+
|
|
155
|
+
<script type="text/html" id="report-column-header">
|
|
156
|
+
<!-- ko foreach: Columns -->
|
|
157
|
+
<th data-bind="attr: { id: fieldId }, css: {'right-align': IsNumeric}, style: {'width': fieldWidth, 'background-color': headerBackColor }, hidden: outerGroup" style="border-right: 1px solid;">
|
|
158
|
+
<!-- ko if: $parents[3].useStoredProc ? $parents[3].useStoredProc() : ($parents[5].useStoredProc ? $parents[5].useStoredProc() : false) -->
|
|
159
|
+
<span data-bind="text: fieldLabel() ? fieldLabel() : fieldName, style: {'color': headerFontColor, 'font-weight': headerFontBold() ? 'bold' : 'normal'}"></span>
|
|
160
|
+
<!-- /ko -->
|
|
161
|
+
<!-- ko ifnot: $parents[3].useStoredProc ? $parents[3].useStoredProc() : ($parents[5].useStoredProc ? $parents[5].useStoredProc() : false) -->
|
|
162
|
+
<a href="" data-bind="click: function(){ $parents[pagerIndex($parents)].changeSort(SqlField) }, style: {'color': headerFontColor, 'font-weight': headerFontBold() ? 'bold' : 'normal'}">
|
|
163
|
+
<span data-bind="text: fieldLabel() ? fieldLabel() : ColumnName"></span>
|
|
164
|
+
<span data-bind="text: $parents[pagerIndex($parents)].pager.sortColumn() === SqlField ? ($parents[pagerIndex($parents)].pager.sortDescending() ? '▼' : '▲') : ''"></span>
|
|
165
|
+
</a>
|
|
166
|
+
<!-- /ko -->
|
|
167
|
+
|
|
168
|
+
<div class="pull-right" data-bind="if: !$parent.IsDrillDown() && !IsNumeric">
|
|
169
|
+
<div class="dropup">
|
|
170
|
+
<a href="#" data-toggle="dropdown" aria-haspopup="false" aria-expanded="false">
|
|
171
|
+
<span class="fa fa-ellipsis-v"></span>
|
|
172
|
+
</a>
|
|
173
|
+
<ul class="dropdown-menu" style="z-index: 1001;">
|
|
174
|
+
<li class="dropdown-item small">
|
|
175
|
+
<a href="#" data-bind="click: toggleOuterGroup">
|
|
176
|
+
<span class="fa fa-clone"></span> Outer Group
|
|
177
|
+
</a>
|
|
178
|
+
</li>
|
|
179
|
+
<li class="dropdown-item small">
|
|
180
|
+
<a href="#" data-bind="click: setupFieldOptions">
|
|
181
|
+
<span class="fa fa-gear"></span> Field Settings
|
|
182
|
+
</a>
|
|
183
|
+
</li>
|
|
184
|
+
</ul>
|
|
185
|
+
</div>
|
|
186
|
+
</div>
|
|
187
|
+
|
|
188
|
+
</th>
|
|
189
|
+
<!-- /ko -->
|
|
190
|
+
</script>
|
|
191
|
+
|
|
192
|
+
<script type="text/html" id="report-column">
|
|
193
|
+
<!-- ko foreach: Items -->
|
|
194
|
+
<td data-bind="hidden: outerGroup, style: {'background-color': backColor, 'color': fontColor, 'font-weight': fontBold() ? 'bold' : 'normal', 'text-align': $parents[4].pager && $parents[4].ReportType()=='Single' ? 'center' : (fieldAlign ? fieldAlign : (Column.IsNumeric ? 'right' : 'left')), 'font-size':$parents[4].pager && $parents[4].ReportType()=='Single' ? '48px' : ''}">
|
|
195
|
+
<div data-bind="style: {'width': fieldWidth }">
|
|
196
|
+
<!-- ko if: LinkTo-->
|
|
197
|
+
<a data-bind="attr: {href: LinkTo}" target="_blank"><span data-bind="html: formattedVal"></span></a>
|
|
198
|
+
<!-- /ko-->
|
|
199
|
+
<!-- ko ifnot: LinkTo-->
|
|
200
|
+
<span data-bind="html: formattedVal"></span>
|
|
201
|
+
<!-- /ko-->
|
|
202
|
+
</div>
|
|
203
|
+
</td>
|
|
204
|
+
</script>
|
|
205
|
+
|
|
206
|
+
<script type="text/html" id="report-pivot">
|
|
207
|
+
<div class="table-responsive" data-bind="with: ReportData">
|
|
208
|
+
<table class="table table-striped table-hover table-condensed">
|
|
209
|
+
<thead>
|
|
210
|
+
<tr>
|
|
211
|
+
<th></th>
|
|
212
|
+
<!-- ko foreach: Rows -->
|
|
213
|
+
<th>
|
|
214
|
+
<span data-bind="text: Items[0].FormattedValue"></span>
|
|
215
|
+
</th>
|
|
216
|
+
<!-- /ko -->
|
|
217
|
+
</tr>
|
|
218
|
+
</thead>
|
|
219
|
+
<tbody data-bind="foreach: Columns">
|
|
220
|
+
<tr>
|
|
221
|
+
<!-- ko if: $index() > 0 -->
|
|
222
|
+
<td>
|
|
223
|
+
<span data-bind="text: fieldLabel || ColumnName"></span>
|
|
224
|
+
</td>
|
|
225
|
+
<!-- ko foreach: $parent.Rows -->
|
|
226
|
+
<td data-bind="style: {'background-color': $parent.backColor, 'color': $parent.fontColor, 'font-weight': $parent.fontBold() ? 'bold' : 'normal', 'text-align': $parent.fieldAlign ? $parent.fieldAlign : ($parent.IsNumeric ? 'right' : 'left') }">
|
|
227
|
+
<span data-bind="text: Items[$parentContext.$index()].FormattedValue"></span>
|
|
228
|
+
</td>
|
|
229
|
+
<!-- /ko -->
|
|
230
|
+
<!-- /ko -->
|
|
231
|
+
</tr>
|
|
232
|
+
</tbody>
|
|
233
|
+
</table>
|
|
234
|
+
|
|
235
|
+
</div>
|
|
236
|
+
|
|
237
|
+
</script>
|
|
238
|
+
|
|
239
|
+
<script type="text/html" id="report-table">
|
|
240
|
+
<div class="table-responsive" >
|
|
241
|
+
<table class="table table-hover table-condensed" data-bind="attr: {class: 'table table-striped table-hover table-condensed ' + $parents[2].selectedStyle()}">
|
|
242
|
+
<thead data-bind="if: $parents[2].ReportType() != 'Single'">
|
|
243
|
+
<tr class="no-highlight">
|
|
244
|
+
<!-- ko if: $parentContext.$parentContext.$parent.canDrilldown() && !IsDrillDown() && !CanExpandOption() -->
|
|
245
|
+
<th style="width: 30px; border-left: 1px solid;"></th>
|
|
246
|
+
<!-- /ko -->
|
|
247
|
+
<!-- ko template: 'report-column-header', data: $data -->
|
|
248
|
+
<!-- /ko-->
|
|
249
|
+
</tr>
|
|
250
|
+
</thead>
|
|
251
|
+
<tbody>
|
|
252
|
+
<tr style="display: none;" data-bind="visible: Rows.length < 1">
|
|
253
|
+
<td class="text-info" data-bind="attr:{colspan: Columns.length}">
|
|
254
|
+
<!-- ko if: $parents[2].ReportType()=='Single' -->
|
|
255
|
+
<div style="text-align: center; width: 100%">
|
|
256
|
+
<span style="font-size: 48px" title="No data found">/</span>
|
|
257
|
+
</div>
|
|
258
|
+
<!-- /ko -->
|
|
259
|
+
<!-- ko if: $parents[2].ReportType()!='Single' -->
|
|
260
|
+
No records found
|
|
261
|
+
<!-- /ko -->
|
|
262
|
+
</td>
|
|
263
|
+
</tr>
|
|
264
|
+
<!-- ko foreach: $parent.rows -->
|
|
265
|
+
<tr>
|
|
266
|
+
<!-- ko if: $parentContext.$parentContext.$parentContext.$parent.canDrilldown() && !$parent.IsDrillDown() && !$parent.CanExpandOption() && $parentContext.$parentContext.$parentContext.$parent.ReportType() != 'Single' -->
|
|
267
|
+
<td style="width: 30px; vertical-align: middle;"><a href="#" data-bind="click: function(){ toggle(); }"><span class="fa" data-bind="css: {'fa-plus': !isExpanded(), 'fa-minus': isExpanded()}"></span></a></td>
|
|
268
|
+
<!-- /ko -->
|
|
269
|
+
<!-- ko template: 'report-column', data: $data -->
|
|
270
|
+
<!-- /ko-->
|
|
271
|
+
</tr>
|
|
272
|
+
<!-- ko if: isExpanded -->
|
|
273
|
+
<tr>
|
|
274
|
+
<td style="width: 30px;"></td>
|
|
275
|
+
<td data-bind="attr:{colspan: $parent.Columns.length }" style="padding-left: 0px;">
|
|
276
|
+
<!-- ko if: DrillDownData -->
|
|
277
|
+
<table class="table table-striped table-hover table-condensed" data-bind="with: DrillDownData">
|
|
278
|
+
<thead>
|
|
279
|
+
<tr class="no-highlight">
|
|
280
|
+
<!-- ko template: 'report-column-header', data: $data -->
|
|
281
|
+
<!-- /ko-->
|
|
282
|
+
</tr>
|
|
283
|
+
</thead>
|
|
284
|
+
<tbody>
|
|
285
|
+
<tr style="display: none;" data-bind="visible: Rows && Rows.length < 1">
|
|
286
|
+
<td class="text-info" data-bind="attr:{colspan: Columns.length}">
|
|
287
|
+
No records found
|
|
288
|
+
</td>
|
|
289
|
+
</tr>
|
|
290
|
+
<!-- ko foreach: Rows -->
|
|
291
|
+
<tr>
|
|
292
|
+
<!-- ko template: 'report-column', data: $data -->
|
|
293
|
+
<!-- /ko-->
|
|
294
|
+
</tr>
|
|
295
|
+
<!-- /ko -->
|
|
296
|
+
</tbody>
|
|
297
|
+
</table>
|
|
298
|
+
<div class="col-xs-12 col-centered" data-bind="with: pager">
|
|
299
|
+
<div class="form-inline small text-muted">
|
|
300
|
+
<div class="pull-left total-records" data-bind="visible: pages()">
|
|
301
|
+
<span data-bind="text: 'Total Records: ' + totalRecords()"></span>
|
|
302
|
+
</div>
|
|
303
|
+
<div class="pull-left">
|
|
304
|
+
<button class="btn btn-xs" title="Download Excel" data-bind="click: $parent.exportExcel"><span class="fa fa-file-excel-o"></span></button>
|
|
305
|
+
</div>
|
|
306
|
+
<div class="form-group pull-right" data-bind="visible: pages()">
|
|
307
|
+
<div data-bind="template: 'pager-template', data: $data"></div>
|
|
308
|
+
</div>
|
|
309
|
+
</div>
|
|
310
|
+
</div>
|
|
311
|
+
<!-- /ko -->
|
|
312
|
+
</td>
|
|
313
|
+
</tr>
|
|
314
|
+
<!-- /ko -->
|
|
315
|
+
<!-- /ko -->
|
|
316
|
+
</tbody>
|
|
317
|
+
<!-- ko if: $parentContext.$parent.SubTotals().length == 1 && $parentContext.$parentContext.$parent.OuterGroupColumns().length == 0 -->
|
|
318
|
+
<tfoot data-bind="foreach: $parentContext.$parent.SubTotals">
|
|
319
|
+
<tr>
|
|
320
|
+
<!-- ko if: $parentContext.$parentContext.$parentContext.$parent.canDrilldown() && !$parent.IsDrillDown() -->
|
|
321
|
+
<td></td>
|
|
322
|
+
<!-- /ko -->
|
|
323
|
+
<!-- ko foreach: Items -->
|
|
324
|
+
<!-- ko if: Value != 'NA' && Value != 'NaN' && !outerGroup() -->
|
|
325
|
+
<td data-bind="style: {'background-color': backColor, 'color': fontColor, 'font-weight': fontBold() ? 'bold' : 'normal', 'text-align': $parents[4].pager && $parents[4].ReportType()=='Single' ? 'center' : (fieldAlign ? fieldAlign : (Column.IsNumeric ? 'right' : 'left')), 'font-size':$parents[4].pager && $parents[4].ReportType()=='Single' ? '48px' : ''}">
|
|
326
|
+
<span data-bind="html: formattedVal, css: {'right-align': true}"></span>
|
|
327
|
+
</td>
|
|
328
|
+
<!-- /ko -->
|
|
329
|
+
<!-- /ko -->
|
|
330
|
+
</tr>
|
|
331
|
+
</tfoot>
|
|
332
|
+
<!-- /ko -->
|
|
333
|
+
</table>
|
|
334
|
+
</div>
|
|
335
|
+
</script>
|
|
336
|
+
|
|
337
|
+
<script type="text/html" id="report-template">
|
|
338
|
+
<div class="report-chart" data-bind="attr: {id: 'chart_div_' + $parent.ReportID()}, visible: $parent.isChart"></div>
|
|
339
|
+
<!-- ko if: $parent.ReportType() == 'Pivot' -->
|
|
340
|
+
<div data-bind="template: {name: 'report-pivot', data: $data }"></div>
|
|
341
|
+
<!-- /ko -->
|
|
342
|
+
|
|
343
|
+
<!-- ko if: $parent.ReportType() != 'Pivot' && (!$parent.isChart() || $parent.ShowDataWithGraph()) -->
|
|
344
|
+
<div class="pull-right" data-bind="if: $parent.OuterGroupColumns().length > 0">
|
|
345
|
+
<a href="#" data-toggle="dropdown" aria-haspopup="false" aria-expanded="false">
|
|
346
|
+
Manage Groups <span class="fa fa-ellipsis-v"></span>
|
|
347
|
+
</a>
|
|
348
|
+
<ul class="dropdown-menu" style="z-index: 1001;" data-bind="foreach: $parent.OuterGroupColumns">
|
|
349
|
+
<li class="dropdown-item small">
|
|
350
|
+
<a href="#" data-bind="click: remove" title="Remove from Group">
|
|
351
|
+
<span class="fa fa-close"></span> <span data-bind="text: fieldName"></span>
|
|
352
|
+
</a>
|
|
353
|
+
</li>
|
|
354
|
+
</ul>
|
|
355
|
+
</div>
|
|
356
|
+
<div class="clear-fix"></div>
|
|
357
|
+
|
|
358
|
+
<div data-bind="foreach: outerGroupData">
|
|
359
|
+
<!-- ko if: rows.length > 0 || ($parent.outerGroupData && $parent.outerGroupData().length == 1) -->
|
|
360
|
+
<h6 data-bind="html: display"></h6>
|
|
361
|
+
<div class="" style="padding-top: 5px;"></div>
|
|
362
|
+
<div data-bind="template: {name: 'report-table', data: $parent.ReportData }"></div>
|
|
363
|
+
<!-- /ko -->
|
|
364
|
+
</div>
|
|
365
|
+
<!-- /ko -->
|
|
366
|
+
</script>
|
|
367
|
+
<script type="text/html" id="admin-mode-template">
|
|
368
|
+
<div class="row" style="padding: 10px 10px">
|
|
369
|
+
<div class="material-switch pull-right">
|
|
370
|
+
<input id="admin-mode" type="checkbox" data-bind="checked: adminMode" />
|
|
371
|
+
<label for="admin-mode" class="label-primary"></label>
|
|
372
|
+
</div>
|
|
373
|
+
<div class="pull-right">Admin Mode</div>
|
|
374
|
+
</div>
|
|
375
|
+
|
|
376
|
+
<div class="alert alert-info" data-bind="visible: adminMode">
|
|
377
|
+
<i class="fa fa-user-circle"></i>Admin Mode is turned on now, it allows you to setup and view Reports or Dashboards for all roles and users. You should remove the Admin mode toggle for non-admin users.<br />
|
|
378
|
+
</div>
|
|
379
|
+
</script>
|
|
380
|
+
<script type="text/html" id="manage-access-template">
|
|
381
|
+
<h5><span class="fa fa-key"></span>Manage Access</h5>
|
|
382
|
+
<div class="panel panel-default panel-body" style="margin-left: 20px;">
|
|
383
|
+
|
|
384
|
+
<div class="form-group row">
|
|
385
|
+
<label class="col-md-3 col-sm-3 control-label">Client Id to Restrict Access</label>
|
|
386
|
+
<div class="col-md-3 col-sm-3">
|
|
387
|
+
<input class="form-control text-box single-line" type="text" data-bind="value: manageAccess.clientId">
|
|
388
|
+
</div>
|
|
389
|
+
<div class="col-md-1 col-sm-1">
|
|
390
|
+
<span data-toggle="tooltip" data-placement="right" class="fa fa-question-circle helptip" title="Leave blank to give all clients access (Global Reports)"></span>
|
|
391
|
+
</div>
|
|
392
|
+
</div>
|
|
393
|
+
<div class="alert alert-info">
|
|
394
|
+
<span class="fa fa-lightbulb-o fa-2x"></span> User level rights over rule Role level rights. No selection for a rule implies report is available to all.
|
|
395
|
+
</div>
|
|
396
|
+
|
|
397
|
+
<div class="row small">
|
|
398
|
+
<div class="col-md-6">
|
|
399
|
+
<b>Manage by User</b> (allow edit)
|
|
400
|
+
<div class="row container-fluid">
|
|
401
|
+
<!-- ko foreach: manageAccess.users -->
|
|
402
|
+
<div class="pull-left">
|
|
403
|
+
<div class="checkbox">
|
|
404
|
+
<label class="label label-info">
|
|
405
|
+
<input type="checkbox" data-bind="checked: selected"> <span data-bind="text: text"></span>
|
|
406
|
+
</label>
|
|
407
|
+
</div>
|
|
408
|
+
</div>
|
|
409
|
+
<!-- /ko -->
|
|
410
|
+
<div data-bind="if: manageAccess.users.length == 0">
|
|
411
|
+
Users list not populated or not applicable
|
|
412
|
+
</div>
|
|
413
|
+
</div>
|
|
414
|
+
<br />
|
|
415
|
+
<b>View only by User</b> (no edit/delete)
|
|
416
|
+
<div class="row container-fluid">
|
|
417
|
+
<!-- ko foreach: manageAccess.viewOnlyUsers -->
|
|
418
|
+
<div class="pull-left">
|
|
419
|
+
<div class="checkbox">
|
|
420
|
+
<label class="label label-info">
|
|
421
|
+
<input type="checkbox" data-bind="checked: selected"> <span data-bind="text: text"></span>
|
|
422
|
+
</label>
|
|
423
|
+
</div>
|
|
424
|
+
</div>
|
|
425
|
+
<!-- /ko -->
|
|
426
|
+
<div data-bind="if: manageAccess.users.length == 0">
|
|
427
|
+
Users list not populated or not applicable
|
|
428
|
+
</div>
|
|
429
|
+
</div>
|
|
430
|
+
<br />
|
|
431
|
+
<div data-bind="ifnot: manageAccess.isDashboard">
|
|
432
|
+
<b>Delete by User</b> (allow delete)
|
|
433
|
+
<div class="row container-fluid">
|
|
434
|
+
<!-- ko foreach: manageAccess.deleteOnlyUsers -->
|
|
435
|
+
<div class="pull-left">
|
|
436
|
+
<div class="checkbox">
|
|
437
|
+
<label class="label label-info">
|
|
438
|
+
<input type="checkbox" data-bind="checked: selected"> <span data-bind="text: text"></span>
|
|
439
|
+
</label>
|
|
440
|
+
</div>
|
|
441
|
+
</div>
|
|
442
|
+
<!-- /ko -->
|
|
443
|
+
<div data-bind="if: manageAccess.users.length == 0">
|
|
444
|
+
Users list not populated or not applicable
|
|
445
|
+
</div>
|
|
446
|
+
</div>
|
|
447
|
+
<br />
|
|
448
|
+
</div>
|
|
449
|
+
</div>
|
|
450
|
+
<div class="col-md-6">
|
|
451
|
+
<b>Manage by User Role</b> (allow edit)
|
|
452
|
+
<div class="row container-fluid">
|
|
453
|
+
<!-- ko foreach: manageAccess.userRoles -->
|
|
454
|
+
<div class="pull-left">
|
|
455
|
+
<div class="checkbox">
|
|
456
|
+
<label class="label label-info">
|
|
457
|
+
<input type="checkbox" data-bind="checked: selected"> <span data-bind="text: text"></span>
|
|
458
|
+
</label>
|
|
459
|
+
</div>
|
|
460
|
+
</div>
|
|
461
|
+
<!-- /ko -->
|
|
462
|
+
<div data-bind="if: manageAccess.userRoles.length == 0">
|
|
463
|
+
User Roles list not populated or not applicable
|
|
464
|
+
</div>
|
|
465
|
+
</div>
|
|
466
|
+
<br />
|
|
467
|
+
<b>View only by User Role</b> (no edit/delete)
|
|
468
|
+
<div class="row container-fluid">
|
|
469
|
+
<!-- ko foreach: manageAccess.viewOnlyUserRoles -->
|
|
470
|
+
<div class="pull-left">
|
|
471
|
+
<div class="checkbox">
|
|
472
|
+
<label class="label label-info">
|
|
473
|
+
<input type="checkbox" data-bind="checked: selected"> <span data-bind="text: text"></span>
|
|
474
|
+
</label>
|
|
475
|
+
</div>
|
|
476
|
+
</div>
|
|
477
|
+
<!-- /ko -->
|
|
478
|
+
<div data-bind="if: manageAccess.userRoles.length == 0">
|
|
479
|
+
User Roles list not populated or not applicable
|
|
480
|
+
</div>
|
|
481
|
+
</div>
|
|
482
|
+
<div data-bind="ifnot: manageAccess.isDashboard">
|
|
483
|
+
<br />
|
|
484
|
+
<b>Delete by User Role</b> (allow delete)
|
|
485
|
+
<div class="row container-fluid">
|
|
486
|
+
<!-- ko foreach: manageAccess.deleteOnlyUserRoles -->
|
|
487
|
+
<div class="pull-left">
|
|
488
|
+
<div class="checkbox">
|
|
489
|
+
<label class="label label-info">
|
|
490
|
+
<input type="checkbox" data-bind="checked: selected"> <span data-bind="text: text"></span>
|
|
491
|
+
</label>
|
|
492
|
+
</div>
|
|
493
|
+
</div>
|
|
494
|
+
<!-- /ko -->
|
|
495
|
+
<div data-bind="if: manageAccess.userRoles.length == 0">
|
|
496
|
+
User Roles list not populated or not applicable
|
|
497
|
+
</div>
|
|
498
|
+
</div>
|
|
499
|
+
</div>
|
|
500
|
+
</div>
|
|
501
|
+
</div>
|
|
502
|
+
</div>
|
|
503
|
+
</script>
|
|
504
|
+
<script type="text/html" id="filter-group">
|
|
505
|
+
<div class="query-builder form-inline" data-bind="foreach: FilterGroups">
|
|
506
|
+
<div class="rules-group-container">
|
|
507
|
+
<div class="rules-group-header">
|
|
508
|
+
<div data-bind="visible: !isRoot">
|
|
509
|
+
<div class="pull-left">
|
|
510
|
+
<div class="btn-group btn-group-toggle btn-group-sm" data-toggle="buttons" role="group">
|
|
511
|
+
<label class="btn btn-primary active" style="margin-right: 0px;" >
|
|
512
|
+
<input type="radio" name="andoroption" data-bind="checked: AndOr, checkedValue: 'And'"> And
|
|
513
|
+
</label>
|
|
514
|
+
<label class="btn btn-primary">
|
|
515
|
+
<input type="radio" name="andoroption" data-bind="checked: AndOr, checkedValue: 'Or'"> Or
|
|
516
|
+
</label>
|
|
517
|
+
</div>
|
|
518
|
+
</div>
|
|
519
|
+
<div class="pull-right">
|
|
520
|
+
<button class="btn btn-sm btn-secondary" data-bind="click: $parent.RemoveFilterGroup, visible: !isRoot">Remove Group</button>
|
|
521
|
+
</div>
|
|
522
|
+
</div>
|
|
523
|
+
<div data-bind="visible: isRoot">
|
|
524
|
+
<div class="pull-left padded-div">
|
|
525
|
+
<label> Filter Conditions</label>
|
|
526
|
+
</div>
|
|
527
|
+
</div>
|
|
528
|
+
<div class="clearfix"></div>
|
|
529
|
+
</div>
|
|
530
|
+
|
|
531
|
+
<div class="rules-group-body" data-bind="template: {name: 'filter-inner'}"></div>
|
|
532
|
+
</div>
|
|
533
|
+
</div>
|
|
534
|
+
</script>
|
|
535
|
+
<script type="text/html" id="fly-filter-template">
|
|
536
|
+
<div class="card" data-bind="visible: FlyFilters().length>0">
|
|
537
|
+
<div class="card-header">
|
|
538
|
+
<a data-toggle="collapse" data-bind="attr: {'data-target': '#filter-panel-' + ReportID() }" href="#">
|
|
539
|
+
<i class="fa fa-filter"></i> Choose Filters
|
|
540
|
+
</a>
|
|
541
|
+
</div>
|
|
542
|
+
<div data-bind="attr: {id: 'filter-panel-' + ReportID() }, css: {collpased: !DontExecuteOnRun(), collapse: !DontExecuteOnRun()}" class="card-body">
|
|
543
|
+
<div>
|
|
544
|
+
<!-- ko foreach: FlyFilters -->
|
|
545
|
+
<div class="row">
|
|
546
|
+
<div class="col-sm-5 col-xs-4">
|
|
547
|
+
<div data-bind="with: Field" class="checkbox">
|
|
548
|
+
<div class="checkbox">
|
|
549
|
+
<label>
|
|
550
|
+
<input type="checkbox" title="Apply this filter" data-bind="checked: $parent.Apply" /> <span data-bind="text: selectedFilterName"></span>
|
|
551
|
+
</label>
|
|
552
|
+
</div>
|
|
553
|
+
</div>
|
|
554
|
+
</div>
|
|
555
|
+
<div data-bind="with: Field" class="col-sm-2 col-xs-3">
|
|
556
|
+
<div class="form-group" data-bind="if: $parent.Apply">
|
|
557
|
+
<select class="form-control" data-bind="options: fieldFilter, value: $parent.Operator" required></select>
|
|
558
|
+
</div>
|
|
559
|
+
</div>
|
|
560
|
+
<div data-bind="with: Field" class="col-sm-5 col-xs-5">
|
|
561
|
+
<div data-bind="if: $parent.Apply">
|
|
562
|
+
<div data-bind="template: 'report-filter', data: $data"></div>
|
|
563
|
+
</div>
|
|
564
|
+
</div>
|
|
565
|
+
</div>
|
|
566
|
+
<!-- /ko -->
|
|
567
|
+
<button class="btn btn-primary" data-bind="click: ExecuteReport">Run</button>
|
|
568
|
+
</div>
|
|
569
|
+
</div>
|
|
570
|
+
</div>
|
|
571
|
+
</script>
|
|
572
|
+
|
|
573
|
+
<script type="text/html" id="filter-inner">
|
|
574
|
+
<div class="rules-list" >
|
|
575
|
+
<div class="rule-container" data-bind="visible: Filters().length>0">
|
|
576
|
+
<table class="table table-striped table-hover table-borderless">
|
|
577
|
+
<thead>
|
|
578
|
+
<tr>
|
|
579
|
+
<th class="row">
|
|
580
|
+
<div class="col-md-1"></div>
|
|
581
|
+
<div class="col-md-4">Field</div>
|
|
582
|
+
<div class="col-md-2"></div>
|
|
583
|
+
<div class="col-md-4">Filter</div>
|
|
584
|
+
<div class="col-md-1"></div>
|
|
585
|
+
</th>
|
|
586
|
+
</tr>
|
|
587
|
+
</thead>
|
|
588
|
+
<tbody data-bind="foreach: Filters">
|
|
589
|
+
<tr class="rule-container">
|
|
590
|
+
<td class="row">
|
|
591
|
+
<div class="col-md-1">
|
|
592
|
+
<select data-bind="value: AndOr, visible: $index()>0" class="form-control">
|
|
593
|
+
<option>And</option>
|
|
594
|
+
<option>Or</option>
|
|
595
|
+
</select>
|
|
596
|
+
</div>
|
|
597
|
+
<div class="col-md-3">
|
|
598
|
+
<div class="form-group">
|
|
599
|
+
<select class="form-control" style="width: 100%;" data-bind="
|
|
600
|
+
options: $parents[$parents.length-2].selectedFieldsCanFilter != undefined
|
|
601
|
+
? $parents[$parents.length-2].selectedFieldsCanFilter
|
|
602
|
+
: $parents[$parents.length-1].selectedFieldsCanFilter,
|
|
603
|
+
optionsText: 'selectedFieldName',
|
|
604
|
+
optionsCaption: 'Please Choose',
|
|
605
|
+
value: Field,
|
|
606
|
+
attr: {required: Field()==null?'required':false},
|
|
607
|
+
disable: Field() && Field().forced"></select>
|
|
608
|
+
</div>
|
|
609
|
+
</div>
|
|
610
|
+
<div class="col-md-2">
|
|
611
|
+
<div data-bind="with: Field">
|
|
612
|
+
<div class="form-group">
|
|
613
|
+
<select class="form-control" style="width: 100%;" data-bind="options: fieldFilter, value: $parent.Operator" required></select>
|
|
614
|
+
</div>
|
|
615
|
+
</div>
|
|
616
|
+
</div>
|
|
617
|
+
<div class="col-md-5">
|
|
618
|
+
<div data-bind="with: Field">
|
|
619
|
+
<div data-bind="template: 'report-filter', data: $data"></div>
|
|
620
|
+
</div>
|
|
621
|
+
<!-- ko if: Field() && Field().fieldType == 'DateTime' && Operator() == 'range' && $index()==0 -->
|
|
622
|
+
<!-- ko if: $parents[$parents.length-2].canAddSeries != undefined && $parents[$parents.length-2].canAddSeries() -->
|
|
623
|
+
<button class="btn btn-sm btn-secondary" data-bind="click: $parents[$parents.length-2].AddSeries.bind($data)">Add Comparison</button>
|
|
624
|
+
<!--/ko -->
|
|
625
|
+
<!-- ko if: $parents[$parents.length-2].canAddSeries == undefined && $parentContext.$parent.canAddSeries != undefined && $parentContext.$parent.canAddSeries()-->
|
|
626
|
+
<button class="btn btn-sm btn-secondary" data-bind="click: $parentContext.$parent.AddSeries.bind($data)">Add Comparison</button>
|
|
627
|
+
<!--/ko -->
|
|
628
|
+
<!--/ko -->
|
|
629
|
+
<span data-bind="visible: Field() && Field().forced" class="badge badge-info">Required Filter</span>
|
|
630
|
+
</div>
|
|
631
|
+
<div class="col-md-1">
|
|
632
|
+
<button class="btn btn-sm btn-secondary" data-bind="click: $parent.RemoveFilter, hidden: Field() && Field().forced">Remove</button>
|
|
633
|
+
</div>
|
|
634
|
+
</td>
|
|
635
|
+
</tr>
|
|
636
|
+
<!-- ko foreach: compareTo -->
|
|
637
|
+
<tr>
|
|
638
|
+
<td class="row">
|
|
639
|
+
<div class="col-md-6"> </div>
|
|
640
|
+
<div class="col-md-2">
|
|
641
|
+
<span style="text-align: right"><button class="btn btn-xs" data-bind="click: $parents[2].RemoveSeries"><span class="fa fa-trash-o"></span></button></span>
|
|
642
|
+
<span>Compare To</span>
|
|
643
|
+
</div>
|
|
644
|
+
<div class="col-md-4">
|
|
645
|
+
<select class="form-control" data-bind="options: Range, value: Value" required></select>
|
|
646
|
+
</div>
|
|
647
|
+
</td>
|
|
648
|
+
</tr>
|
|
649
|
+
<!-- /ko -->
|
|
650
|
+
</tbody>
|
|
651
|
+
</table>
|
|
652
|
+
</div>
|
|
653
|
+
|
|
654
|
+
<div class="rule-container" >
|
|
655
|
+
<div data-bind="template: {name: 'filter-group'}"></div>
|
|
656
|
+
<div>
|
|
657
|
+
<button class="btn btn-sm btn-primary" data-bind="click: AddFilterGroup">Add Group</button>
|
|
658
|
+
<button class="btn btn-sm btn-primary" data-bind="click: AddFilter">Add Filter</button>
|
|
659
|
+
</div>
|
|
660
|
+
</div>
|
|
661
|
+
</div>
|
|
662
|
+
|
|
663
|
+
</script>
|
|
664
|
+
|
|
665
|
+
<script type="text/html" id="filter-parameters">
|
|
666
|
+
<div class="table-responsive card">
|
|
667
|
+
<div class="card-body">
|
|
668
|
+
<span data-bind="hidden: showParameters">No filters available to choose</span>
|
|
669
|
+
<table class="table table-striped table-hover table-borderless" data-bind="visible: showParameters">
|
|
670
|
+
<thead>
|
|
671
|
+
<tr>
|
|
672
|
+
<th style="width: 30%">Filter</th>
|
|
673
|
+
<th style="width: 20%"></th>
|
|
674
|
+
<th style="width: 30%">Value</th>
|
|
675
|
+
<th></th>
|
|
676
|
+
</tr>
|
|
677
|
+
</thead>
|
|
678
|
+
<tbody data-bind="foreach: Parameters">
|
|
679
|
+
<tr data-bind="ifnot: Hidden">
|
|
680
|
+
<td data-bind="text: DisplayName">
|
|
681
|
+
</td>
|
|
682
|
+
<td>
|
|
683
|
+
<div class="form-group">
|
|
684
|
+
<select class="form-control" style="width: 100%;" data-bind="options: operators, value: Operator" required></select>
|
|
685
|
+
</div>
|
|
686
|
+
</td>
|
|
687
|
+
<td data-bind="with: Field">
|
|
688
|
+
<div data-bind="template: 'report-filter', data: $data"></div>
|
|
689
|
+
</td>
|
|
690
|
+
<td></td>
|
|
691
|
+
</tr>
|
|
692
|
+
|
|
693
|
+
</tbody>
|
|
694
|
+
</table>
|
|
695
|
+
</div>
|
|
696
|
+
</div>
|
|
697
|
+
</script>
|
|
698
|
+
|
|
699
|
+
<script type="text/html" id="report-schedule">
|
|
700
|
+
<div data-bind="with: scheduleBuilder">
|
|
701
|
+
<div class="checkbox">
|
|
702
|
+
<label>
|
|
703
|
+
<input type="checkbox" data-bind="checked: hasSchedule" />
|
|
704
|
+
Schedule Report
|
|
705
|
+
</label>
|
|
706
|
+
</div>
|
|
707
|
+
<div data-bind="if: hasSchedule">
|
|
708
|
+
<div class="form-inline form-group">
|
|
709
|
+
<div class="row col-sm-12">
|
|
710
|
+
<span data-bind="text: selectedOption() != 'once' ? 'Every ' : ''"></span>
|
|
682
711
|
<select class="form-control" required data-bind="options: options, value: selectedOption"></select>
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
712
|
+
<div data-bind="if: selectedOption() == 'once'">
|
|
713
|
+
on <input data-bind="datepicker: selectedDate" class="form-control" required />
|
|
714
|
+
</div>
|
|
715
|
+
<div data-bind="if: showDays">
|
|
716
|
+
on <select multiple class="form-control" required data-bind="select2: { placeholder: 'Choose Days', allowClear: true }, options: days, selectedOptions: selectedDays"></select>
|
|
717
|
+
</div>
|
|
689
718
|
<div data-bind="if: showDates">
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
719
|
+
on <select multiple class="form-control" required data-bind="select2: { placeholder: 'Choose Dates', allowClear: true }, options: dates, selectedOptions: selectedDates"></select>
|
|
720
|
+
</div>
|
|
721
|
+
<div data-bind="if: showMonths">
|
|
693
722
|
of <select multiple class="form-control" required data-bind="select2: { placeholder: 'Choose Months', allowClear: true }, options: months, selectedOptions: selectedMonths"></select>
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
723
|
+
</div>
|
|
724
|
+
<div data-bind="if: showAtTime">
|
|
725
|
+
at <select class="form-control" data-bind="options: hours, value: selectedHour"></select>
|
|
726
|
+
<select class="form-control" data-bind="options: minutes, value: selectedMinute"></select>
|
|
698
727
|
<select class="form-control" data-bind="value: selectedAmPm">
|
|
699
728
|
<option>AM</option>
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
</div>
|
|
703
|
-
</div>
|
|
704
|
-
</div>
|
|
705
|
-
<div class="alert alert-info">
|
|
706
|
-
Report will be run and emailed <span data-bind="text: selectedOption() != 'once' ? 'every' : ''"></span> <span data-bind="text: selectedOption"></span>
|
|
707
|
-
<span data-bind="if: selectedOption() == 'once'">
|
|
708
|
-
on <span class="error" data-bind="visible: !selectedDate()">Please pick a Date</span> <span data-bind="text: selectedDate"></span>
|
|
709
|
-
</span>
|
|
710
|
-
<span data-bind="if: showDays">
|
|
711
|
-
on <span class="error" data-bind="visible: selectedDays().length == 0">Please pick Day(s)</span> <span data-bind="text: selectedDays"></span>
|
|
712
|
-
</span>
|
|
713
|
-
<span data-bind="if: showDates">
|
|
714
|
-
on <span class="error" data-bind="visible: selectedDates().length == 0">Please pick Date(s)</span>
|
|
715
|
-
<span data-bind="foreach: selectedDates"><span data-bind="visible: $index()>0">, </span><span data-bind="text: $data == 1 ? '1st': ($data == 2 ? '2nd' : ($data == 3 ? '3rd' : $data+'th'))"></span></span>
|
|
716
|
-
</span>
|
|
717
|
-
<span data-bind="if: showMonths">
|
|
718
|
-
of <span class="error" data-bind="visible: selectedMonths().length == 0">Please pick Month(s)</span> <span data-bind="text: selectedMonths"></span>
|
|
719
|
-
</span>
|
|
720
|
-
<span data-bind="if: showAtTime">
|
|
721
|
-
at <span data-bind="text: selectedHour"></span>:<span data-bind="text: selectedMinute"></span> <span data-bind="text: selectedAmPm"></span>
|
|
722
|
-
</span>
|
|
723
|
-
</div>
|
|
724
|
-
<div class="form-horizontal form-group">
|
|
725
|
-
<div class="form-group row">
|
|
726
|
-
<label class="col-sm-2 control-label">Email to</label>
|
|
727
|
-
<div class="col-sm-6">
|
|
728
|
-
<input type="text" class="form-control" style="width: 100%;" data-bind="value: emailTo" placeholder="Enter Email Addresses separated by comma to send the Report to" required />
|
|
729
|
-
</div>
|
|
730
|
-
<label class="col-sm-2 control-label">Report Format</label>
|
|
731
|
-
<div class="col-sm-2">
|
|
732
|
-
<select class="form-control" data-bind="value: format">
|
|
733
|
-
<option value="EXCEL">Excel</option>
|
|
734
|
-
<option value="CSV">CSV</option>
|
|
735
|
-
<option value="PDF">PDF</option>
|
|
736
|
-
</select>
|
|
737
|
-
</div>
|
|
738
|
-
</div>
|
|
739
|
-
</div>
|
|
740
|
-
<div class="form-horizontal form-group">
|
|
741
|
-
<div class="form-group row">
|
|
742
|
-
<div class="col-sm-2 control-label">
|
|
743
|
-
<div class="checkbox">
|
|
744
|
-
<label title="Set a date to start sending scheduled report">
|
|
745
|
-
<input type="checkbox" data-bind="checked: hasScheduleStart" />
|
|
746
|
-
Set Schedule Start Date
|
|
747
|
-
</label>
|
|
748
|
-
</div>
|
|
749
|
-
</div>
|
|
750
|
-
<div class="col-sm-4" data-bind="if: hasScheduleStart">
|
|
751
|
-
<input type="text" class="form-control" data-bind="datepicker: scheduleStart" title="Scheduled Report will not be sent before this date" required />
|
|
729
|
+
<option>PM</option>
|
|
730
|
+
</select>
|
|
752
731
|
</div>
|
|
753
732
|
</div>
|
|
754
733
|
</div>
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
</
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
<h5 class="modal-title"><span data-bind="text: fieldName"></span> - Setup Additional Field Options</h5>
|
|
780
|
-
</div>
|
|
781
|
-
<div class="modal-body needs-validation">
|
|
782
|
-
<div class="form-group row">
|
|
783
|
-
<label class="col-sm-5 col-md-5 control-label">Pick Data Format</label>
|
|
784
|
-
<div class="col-sm-7 col-md-7">
|
|
785
|
-
<select class="form-control" required data-bind="options: $parent.fieldFormatTypes, value: fieldFormat"></select>
|
|
786
|
-
</div>
|
|
787
|
-
</div>
|
|
788
|
-
<div class="form-group row" data-bind="visible: $parent.decimalFormatTypes.indexOf($data.fieldFormat())>=0">
|
|
789
|
-
<label class="col-sm-5 col-md-5 control-label">Pick Decimal Places</label>
|
|
790
|
-
<div class="col-sm-7 col-md-7">
|
|
791
|
-
<input type="number" class="form-control" data-bind="value: decimalPlaces" placeholder="" />
|
|
792
|
-
</div>
|
|
793
|
-
</div>
|
|
794
|
-
<div class="form-group row">
|
|
795
|
-
<label class="col-sm-5 col-md-5 control-label">Choose Column Label</label>
|
|
796
|
-
<div class="col-sm-7 col-md-7">
|
|
797
|
-
<input type="text" class="form-control" required data-bind="value: fieldLabel" />
|
|
798
|
-
</div>
|
|
799
|
-
</div>
|
|
800
|
-
<div class="form-group row">
|
|
801
|
-
<label class="col-sm-5 col-md-5 control-label">Choose Text Alignment</label>
|
|
802
|
-
<div class="col-sm-7 col-md-7">
|
|
803
|
-
<select class="form-control" required data-bind="options: $parent.fieldAlignments, value: fieldAlign"></select>
|
|
804
|
-
</div>
|
|
805
|
-
</div>
|
|
806
|
-
<div class="form-group row">
|
|
807
|
-
<label class="col-sm-5 col-md-5 control-label">Pick Header Text Color</label>
|
|
808
|
-
<div class="col-sm-7 col-md-7">
|
|
809
|
-
<input type="color" style="width: 50px" class="form-control pull-left" required data-bind="value: headerFontColor" />
|
|
810
|
-
<input type="text" style="width: 100px" class="form-control pull-left" required data-bind="value: headerFontColor" />
|
|
811
|
-
<button class="btn btn-sm pull-left" title="Apply to all columns" data-bind="click: function(){applyAllHeaderFontColor(!applyAllHeaderFontColor()); }">
|
|
812
|
-
<span class="fa" data-bind="css: applyAllHeaderFontColor() ? 'fa-check' : 'fa-paste'"></span>
|
|
813
|
-
</button>
|
|
814
|
-
</div>
|
|
815
|
-
</div>
|
|
816
|
-
<div class="form-group row">
|
|
817
|
-
<label class="col-sm-5 col-md-5 control-label">Pick Header Background Color</label>
|
|
818
|
-
<div class="col-sm-7 col-md-7">
|
|
819
|
-
<input type="color" style="width: 50px" class="form-control pull-left" required data-bind="value: headerBackColor" />
|
|
820
|
-
<input type="text" style="width: 100px" class="form-control pull-left" required data-bind="value: headerBackColor" />
|
|
821
|
-
<button class="btn btn-sm pull-left" title="Apply to all columns" data-bind="click: function(){applyAllHeaderBackColor(!applyAllHeaderBackColor()); }">
|
|
822
|
-
<span class="fa" data-bind="css: applyAllHeaderBackColor() ? 'fa-check' : 'fa-paste'"></span>
|
|
823
|
-
</button>
|
|
824
|
-
</div>
|
|
825
|
-
</div>
|
|
826
|
-
<div class="form-group row">
|
|
827
|
-
<label class="col-sm-5 col-md-5 control-label">Pick Text Color</label>
|
|
828
|
-
<div class="col-sm-7 col-md-7">
|
|
829
|
-
<input type="color" style="width: 50px" class="form-control pull-left" required data-bind="value: fontColor" />
|
|
830
|
-
<input type="text" style="width: 100px" class="form-control pull-left" data-bind="value: fontColor" />
|
|
831
|
-
<button class="btn btn-sm pull-left" title="Apply to all columns" data-bind="click: function(){applyAllFontColor(!applyAllFontColor()); }">
|
|
832
|
-
<span class="fa" data-bind="css: applyAllFontColor() ? 'fa-check' : 'fa-paste'"></span>
|
|
833
|
-
</button>
|
|
834
|
-
</div>
|
|
835
|
-
</div>
|
|
836
|
-
<div class="form-group row">
|
|
837
|
-
<label class="col-sm-5 col-md-5 control-label">Pick Background Color</label>
|
|
838
|
-
<div class="col-sm-7 col-md-7">
|
|
839
|
-
<input type="color" style="width: 50px" class="form-control pull-left" required data-bind="value: backColor" />
|
|
840
|
-
<input type="text" style="width: 100px" class="form-control pull-left" data-bind="value: backColor" />
|
|
841
|
-
<button class="btn btn-sm pull-left" title="Apply to all columns" data-bind="click: function(){applyAllBackColor(!applyAllBackColor()); }">
|
|
842
|
-
<span class="fa" data-bind="css: applyAllBackColor() ? 'fa-check' : 'fa-paste'"></span>
|
|
843
|
-
</button>
|
|
844
|
-
</div>
|
|
845
|
-
</div>
|
|
846
|
-
<div class="form-group row">
|
|
847
|
-
<label class="col-sm-5 col-md-5 control-label">Choose Width (leave blank for auto)</label>
|
|
848
|
-
<div class="col-sm-7 col-md-7">
|
|
849
|
-
<input type="text" class="form-control" required data-bind="value: fieldWidth" />
|
|
850
|
-
</div>
|
|
851
|
-
</div>
|
|
852
|
-
<div class="form-group row">
|
|
853
|
-
<div class="col-sm-12">
|
|
854
|
-
<div class="checkbox pull-left" style="padding-top: 5px;">
|
|
855
|
-
<label>
|
|
856
|
-
<input type="checkbox" data-bind="checked: headerFontBold" />
|
|
857
|
-
Make Header Text Bold
|
|
858
|
-
</label>
|
|
859
|
-
</div>
|
|
860
|
-
<button class="btn btn-sm pull-left" title="Apply to all columns" data-bind="click: function(){applyAllHeaderBold(!applyAllHeaderBold()); }">
|
|
861
|
-
<span class="fa" data-bind="css: applyAllHeaderBold() ? 'fa-check' : 'fa-paste'"></span>
|
|
862
|
-
</button>
|
|
863
|
-
</div>
|
|
864
|
-
</div>
|
|
865
|
-
<div class="form-group row">
|
|
866
|
-
<div class="col-sm-12">
|
|
867
|
-
<div class="checkbox pull-left" style="padding-top: 5px;">
|
|
868
|
-
<label>
|
|
869
|
-
<input type="checkbox" data-bind="checked: fontBold" />
|
|
870
|
-
Make Text Bold
|
|
871
|
-
</label>
|
|
872
|
-
</div>
|
|
873
|
-
<button class="btn btn-sm pull-left" title="Apply to all columns" data-bind="click: function(){applyAllBold(!applyAllBold()); }">
|
|
874
|
-
<span class="fa" data-bind="css: applyAllBold() ? 'fa-check' : 'fa-paste'"></span>
|
|
875
|
-
</button>
|
|
876
|
-
</div>
|
|
877
|
-
</div>
|
|
878
|
-
<div class="form-group row" data-bind="if: $parent.useStoredProc()">
|
|
879
|
-
<div class="col-sm-12">
|
|
880
|
-
<div class="checkbox pull-left" style="padding-top: 5px;">
|
|
881
|
-
<label>
|
|
882
|
-
<input type="checkbox" data-bind="checked: checkOuterGroup" />
|
|
883
|
-
Outer Group
|
|
884
|
-
</label>
|
|
885
|
-
</div>
|
|
886
|
-
</div>
|
|
887
|
-
</div>
|
|
888
|
-
</div>
|
|
889
|
-
<div class="modal-footer">
|
|
890
|
-
<button type="button" class="btn btn-danger" data-bind="click: cancelFieldOptions">Cancel</button>
|
|
891
|
-
<button type="button" class="btn btn-primary" data-bind="click: saveFieldOptions">Save Changes</button>
|
|
892
|
-
</div>
|
|
893
|
-
</div>
|
|
894
|
-
</div>
|
|
895
|
-
</script>
|
|
896
|
-
|
|
897
|
-
<script type="text/html" id="report-link-edit">
|
|
898
|
-
<div class="modal-dialog" style="max-width: 750px;">
|
|
899
|
-
<div class="modal-content" data-bind="with: editLinkField">
|
|
900
|
-
<div class="modal-header">
|
|
901
|
-
<h5 class="modal-title">Setup Link Field</h5>
|
|
902
|
-
</div>
|
|
903
|
-
<div class="modal-body needs-validation" data-bind="with: linkFieldItem">
|
|
904
|
-
<div class="form-group row">
|
|
905
|
-
<label class="col-sm-5 col-md-5 control-label">This field will link to</label>
|
|
906
|
-
<div class="col-sm-7 col-md-7">
|
|
907
|
-
<select class="form-control" required data-bind="options: linkTypes, value: selectedLinkType"></select>
|
|
908
|
-
</div>
|
|
909
|
-
</div>
|
|
910
|
-
<div data-bind="if: LinksToReport">
|
|
911
|
-
<div class="form-group row">
|
|
912
|
-
<label class="col-sm-5 col-md-5 control-label">Link to this Report</label>
|
|
913
|
-
<div class="col-sm-7 col-md-7">
|
|
914
|
-
<select class="form-control" required data-bind="options: $parentContext.$parent.SavedReports, optionsText: 'reportName', optionsValue: 'reportId', value: LinkedToReportId, optionsCaption: 'Choose the Report to link to'"></select>
|
|
915
|
-
</div>
|
|
916
|
-
</div>
|
|
917
|
-
<div class="checkbox" data-bind="if: LinkedToReportId">
|
|
918
|
-
<label>
|
|
919
|
-
<input type="checkbox" data-bind="checked: SendAsFilterParameter" />
|
|
920
|
-
Send field value as Report Filter Parameter
|
|
921
|
-
</label>
|
|
922
|
-
</div>
|
|
923
|
-
<div class="form-group row" data-bind="if: SendAsFilterParameter">
|
|
924
|
-
<label class="col-sm-5 col-md-5 control-label">Link to this Report Filter</label>
|
|
925
|
-
<div class="col-sm-7 col-md-7">
|
|
926
|
-
<select class="form-control" required data-bind="options: allFields, optionsText: 'fieldName', optionsValue: 'fieldId', value: SelectedFilterId, optionsCaption: 'Choose the Field to Filter by value'"></select>
|
|
927
|
-
</div>
|
|
928
|
-
</div>
|
|
929
|
-
</div>
|
|
930
|
-
<div data-bind="ifnot: LinksToReport">
|
|
931
|
-
<div class="form-group row">
|
|
932
|
-
<label class="col-sm-5 col-md-5 control-label">Link to this URL</label>
|
|
933
|
-
<div class="col-sm-7 col-md-7">
|
|
934
|
-
<input type="url" class="form-control" required placeholder="Enter a url to open" data-bind="value: LinkToUrl" title="Valid URL needs to start with http:// or https://">
|
|
935
|
-
</div>
|
|
936
|
-
</div>
|
|
937
|
-
<div class="checkbox">
|
|
938
|
-
<label>
|
|
939
|
-
<input type="checkbox" data-bind="checked: SendAsQueryParameter" />
|
|
940
|
-
Send field value as Query Parameter
|
|
941
|
-
</label>
|
|
942
|
-
</div>
|
|
943
|
-
<div class="form-group row" data-bind="if: SendAsQueryParameter">
|
|
944
|
-
<label class="col-sm-5 col-md-5 control-label">Parameter Name to use</label>
|
|
945
|
-
<div class="col-sm-7 col-md-7">
|
|
946
|
-
<input type="text" class="form-control" required placeholder="Enter parameter name to send value as" data-bind="value: QueryParameterName">
|
|
947
|
-
</div>
|
|
948
|
-
</div>
|
|
949
|
-
<br />
|
|
950
|
-
</div>
|
|
951
|
-
</div>
|
|
952
|
-
<div class="modal-footer">
|
|
953
|
-
<button type="button" class="btn btn-danger" data-bind="click: removeLinkField">Remove Link</button>
|
|
954
|
-
<button type="button" class="btn btn-primary" data-bind="click: saveLinkField">Save Changes</button>
|
|
955
|
-
</div>
|
|
956
|
-
</div>
|
|
957
|
-
</div>
|
|
958
|
-
</script>
|
|
959
|
-
|
|
960
|
-
<script type="text/html" id="report-designer">
|
|
961
|
-
<div class="modal-dialog">
|
|
962
|
-
<div class="modal-content">
|
|
963
|
-
<div class="modal-header">
|
|
964
|
-
<h5 class="modal-title" id="myModalLabel">
|
|
965
|
-
<a title="Need help setting up a report?" target="_blank" href="https://dotnetreport.com/docs/designing-reports/">
|
|
966
|
-
<span class="fa fa-question-circle"></span>
|
|
967
|
-
</a>Design your Report
|
|
968
|
-
</h5>
|
|
969
|
-
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
|
|
970
|
-
</div>
|
|
971
|
-
<div class="modal-body needs-validation">
|
|
972
|
-
<h5><span class="fa fa-file"></span> Choose Report Type</h5>
|
|
973
|
-
<div class="row">
|
|
974
|
-
<div class="col-md-3 col-sm-3 col-xs-6">
|
|
975
|
-
<div class="button-box" tabindex="0" data-bind="click: function(){ setReportType('List'); }, css: {active: ReportType()=='List'}">
|
|
976
|
-
<span class="fa fa-2x fa-list-alt"></span>
|
|
977
|
-
<p>List</p>
|
|
978
|
-
</div>
|
|
979
|
-
</div>
|
|
980
|
-
<div class="col-md-3 col-sm-3 col-xs-6">
|
|
981
|
-
<div class="button-box" tabindex="0" data-bind="click: function(){ setReportType('Summary'); }, css: {active: ReportType()=='Summary'}">
|
|
982
|
-
<span class="fa fa-2x fa-table"></span>
|
|
983
|
-
<p>Summary</p>
|
|
984
|
-
</div>
|
|
985
|
-
</div>
|
|
986
|
-
<div class="col-md-3 col-sm-3 col-xs-6">
|
|
987
|
-
<div class="button-box" tabindex="0" data-bind="click: function(){ setReportType('Bar'); }, css: {active: ReportType()=='Bar'}">
|
|
988
|
-
<span class="fa fa-2x fa-bar-chart"></span>
|
|
989
|
-
<p>Bar</p>
|
|
990
|
-
</div>
|
|
991
|
-
</div>
|
|
992
|
-
<div class="col-md-3 col-sm-3 col-xs-6">
|
|
993
|
-
<div class="button-box" tabindex="0" data-bind="click: function(){ setReportType('Pie'); }, css: {active: ReportType()=='Pie'}">
|
|
994
|
-
<span class="fa fa-2x fa-pie-chart"></span>
|
|
995
|
-
<p>Pie</p>
|
|
996
|
-
</div>
|
|
997
|
-
</div>
|
|
998
|
-
<div class="col-md-3 col-sm-3 col-xs-6">
|
|
999
|
-
<div class="button-box" tabindex="0" data-bind="click: function(){ setReportType('Line'); }, css: {active: ReportType()=='Line'}">
|
|
1000
|
-
<span class="fa fa-2x fa-line-chart"></span>
|
|
1001
|
-
<p>Line</p>
|
|
1002
|
-
</div>
|
|
1003
|
-
</div>
|
|
1004
|
-
<div class="col-md-3 col-sm-3 col-xs-6">
|
|
1005
|
-
<div class="button-box" tabindex="0" data-bind="click: function(){ setReportType('Map'); }, css: {active: ReportType()=='Map'}">
|
|
1006
|
-
<span class="fa fa-2x fa-globe"></span>
|
|
1007
|
-
<p>Map</p>
|
|
1008
|
-
</div>
|
|
1009
|
-
</div>
|
|
1010
|
-
<div class="col-md-3 col-sm-3 col-xs-6">
|
|
1011
|
-
<div class="button-box" tabindex="0" data-bind="click: function(){ setReportType('Single'); }, css: {active: ReportType()=='Single'}">
|
|
1012
|
-
<span class="fa fa-2x fa-window-maximize"></span>
|
|
1013
|
-
<p>Single Value</p>
|
|
1014
|
-
</div>
|
|
1015
|
-
</div>
|
|
1016
|
-
<div class="col-md-3 col-sm-3 col-xs-6">
|
|
1017
|
-
<div class="button-box" tabindex="0" data-bind="click: function(){ setReportType('Pivot'); }, css: {active: ReportType()=='Pivot'}">
|
|
1018
|
-
<span class="fa fa-2x fa-random"></span>
|
|
1019
|
-
<p>Pivot</p>
|
|
1020
|
-
</div>
|
|
1021
|
-
</div>
|
|
1022
|
-
</div>
|
|
1023
|
-
<hr />
|
|
1024
|
-
<h5 class="pull-left"><span class="fa fa-database"></span> Choose Data for Report</h5>
|
|
1025
|
-
<div class="pull-right btn-group btn-group-toggle btn-group-sm" data-toggle="buttons" role="group" data-bind="if: ReportID() <= 0">
|
|
1026
|
-
<label class="btn btn-primary active" style="margin-right: 0px;" title="You can change the Data source only when creating a new report, changing this will clear all selections">
|
|
1027
|
-
<input type="radio" name="dataoption" id="table" checked data-bind="checked: useStoredProc, checkedValue: false"> Dynamic
|
|
1028
|
-
</label>
|
|
1029
|
-
<label class="btn btn-primary">
|
|
1030
|
-
<input type="radio" name="dataoption" id="proc" value="1" data-bind="checked: useStoredProc, checkedValue: true"> Predefined
|
|
1031
|
-
</label>
|
|
1032
|
-
</div>
|
|
1033
|
-
<div class="clearfix"></div>
|
|
1034
|
-
<div class="row">
|
|
1035
|
-
<div class="col-md-6">
|
|
1036
|
-
<select class="form-control" data-bind="options: Procs, optionsCaption: 'Choose Section...', optionsText: 'DisplayName', value: SelectedProc, disable: isFormulaField, visible: useStoredProc"></select>
|
|
1037
|
-
<select class="form-control" data-bind="options: Tables, optionsCaption: 'Choose Section...', optionsText: 'tableName', value: SelectedTable, disable: isFormulaField, hidden: useStoredProc"></select>
|
|
1038
|
-
</div>
|
|
1039
|
-
|
|
1040
|
-
<div class="col-md-6" data-bind="disable: isFormulaField, hidden: useStoredProc">
|
|
1041
|
-
<div data-bind="with: textQuery.searchFields">
|
|
1042
|
-
<select id="search-field" class="form-control" data-bind="select2: {placeholder: 'Or Search for a Data Field...', ajax: { url: url, dataType: 'json', data: query, processResults: processResults }, minimumInputLength: 2, allowClear: true }, value: selectedOption"></select>
|
|
1043
|
-
</div>
|
|
1044
|
-
</div>
|
|
1045
|
-
|
|
1046
|
-
<div class="col-md-12 padded-div" data-bind="visible: ChooseFields().length>0">
|
|
1047
|
-
<div class="small pull-left">
|
|
1048
|
-
Check the fields you would like to use in the Report
|
|
1049
|
-
</div>
|
|
1050
|
-
<div class="pull-right btn-toolbar">
|
|
1051
|
-
<a href="#" class="btn btn-sm" title="Custom Field using Formula" data-bind="click: function(){isFormulaField(!isFormulaField())}, text: isFormulaField()? 'Cancel': 'Customize', css: {'btn-primary': !isFormulaField(), 'btn-danger': isFormulaField}"></a>
|
|
1052
|
-
|
|
1053
|
-
<a href="#" class="btn btn-secondary btn-sm" data-bind="click: MoveAllFields, visible: !isFormulaField()">Select all</a>
|
|
1054
|
-
<a href="#" class="btn btn-secondary btn-sm" data-bind="click: RemoveSelectedFields, visible: !isFormulaField()">Remove all</a>
|
|
1055
|
-
</div>
|
|
1056
|
-
</div>
|
|
1057
|
-
<div class="row container-fluid" data-bind="foreach: ChooseFields">
|
|
1058
|
-
<div class="col-md-3 col-sm-4 col-xs-6">
|
|
1059
|
-
<div class="list-group-item">
|
|
1060
|
-
<div class="checkbox">
|
|
1061
|
-
<label>
|
|
1062
|
-
<input type="checkbox" data-bind="checkedInArray: {array: $parent.isFormulaField() ? $parent.formulaFields : $parent.SelectedFields, value: $data}">
|
|
1063
|
-
<span data-bind="text: fieldName"></span>
|
|
1064
|
-
</label>
|
|
1065
|
-
</div>
|
|
1066
|
-
</div>
|
|
1067
|
-
</div>
|
|
1068
|
-
</div>
|
|
1069
|
-
</div>
|
|
1070
|
-
|
|
1071
|
-
<div data-bind="if: lastPickedField() && lastPickedField().fieldType == 'Json'">
|
|
1072
|
-
<br />
|
|
1073
|
-
<div class="card">
|
|
1074
|
-
<div class="card-header">
|
|
1075
|
-
<h6>Select Data Fields from <span data-bind="text: lastPickedField().fieldName"></span></h6>
|
|
1076
|
-
</div>
|
|
1077
|
-
<div class="card-body">
|
|
1078
|
-
<div class="row container-fluid" data-bind="foreach: jsonFields">
|
|
1079
|
-
<div class="col-md-3 col-sm-4 col-xs-6">
|
|
1080
|
-
<div class="list-group-item">
|
|
1081
|
-
<div class="checkbox">
|
|
1082
|
-
<label>
|
|
1083
|
-
<input type="checkbox" data-bind="checkedInArray: {array: $parent.SelectedFields, value: $data}">
|
|
1084
|
-
<span data-bind="text: jsonColumnName"></span>
|
|
1085
|
-
</label>
|
|
1086
|
-
</div>
|
|
1087
|
-
</div>
|
|
1088
|
-
</div>
|
|
1089
|
-
</div>
|
|
1090
|
-
</div>
|
|
1091
|
-
</div>
|
|
1092
|
-
</div>
|
|
1093
|
-
|
|
1094
|
-
<div data-bind="if: isFormulaField" id="custom-field-design">
|
|
1095
|
-
<br />
|
|
1096
|
-
<br />
|
|
1097
|
-
<div class="card">
|
|
1098
|
-
<div class="card-body">
|
|
1099
|
-
<div class="row">
|
|
1100
|
-
<div class="col-md-12 pull-right">
|
|
1101
|
-
<a href="#" class="btn btn-primary btn-sm" title="Save Custom Formula Field" data-bind="click: saveFormulaField, visible: isFormulaField">Save</a>
|
|
1102
|
-
<a href="#" class="btn btn-sm" title="Custom Field using Formula" data-bind="click: function(){isFormulaField(!isFormulaField())}, text: isFormulaField()? 'Cancel': 'Customize', css: {'btn-primary': !isFormulaField(), 'btn-danger': isFormulaField}"></a>
|
|
1103
|
-
|
|
1104
|
-
</div>
|
|
1105
|
-
<div class="col-md-12 padded-div" data-bind="visible: ChooseFields().length>0 && isFormulaField()">
|
|
1106
|
-
<div class="alert alert-info">
|
|
1107
|
-
You are now creating a Customized Field. Check Fields you want to use in the calculation, then choose the operations you want to perform, and click "Save" on the right above to add your Custom field.
|
|
1108
|
-
Please note that Custom Field must be chosen in within the same Section and their data types must match.
|
|
1109
|
-
</div>
|
|
1110
|
-
</div>
|
|
1111
|
-
</div>
|
|
1112
|
-
<div class="row">
|
|
1113
|
-
<div class="col-sm-6 small">
|
|
1114
|
-
Setup your Formula for calculating this Field
|
|
1115
|
-
</div>
|
|
1116
|
-
<div class="col-sm-6 right-align">
|
|
1117
|
-
<a href="#" class="btn btn-secondary btn-sm" data-bind="click: addFormulaParentheses">Add ( )</a>
|
|
1118
|
-
<a href="#" class="btn btn-secondary btn-sm" title="Add a Constant Value" data-bind="click: addFormulaConstantValue">Add Value</a>
|
|
1119
|
-
<a href="#" class="btn btn-secondary btn-sm" data-bind="click: clearFormulaField">Clear</a>
|
|
1120
|
-
</div>
|
|
1121
|
-
</div>
|
|
1122
|
-
<div class="form-group-row" data-bind="if: formulaOnlyHasDateFields">
|
|
1123
|
-
<div class="col-sm-12">
|
|
1124
|
-
<div class="alert alert-info">
|
|
1125
|
-
For Dates Field calculation, you can only substract date fields and display the result as days, hours, minutes or seconds.
|
|
1126
|
-
</div>
|
|
1127
|
-
</div>
|
|
1128
|
-
</div>
|
|
1129
|
-
<div class="form-group row">
|
|
1130
|
-
<label class="col-sm-2 control-label">Field Label</label>
|
|
1131
|
-
<div class="col-sm-10">
|
|
1132
|
-
<input type="text" class="form-control form-control-sm" data-bind="value: formulaFieldLabel" required placeholder="Custom Field Label" />
|
|
1133
|
-
</div>
|
|
1134
|
-
</div>
|
|
1135
|
-
<div class="form-group row">
|
|
1136
|
-
<label class="col-sm-2 control-label">Data Format</label>
|
|
1137
|
-
<div class="col-sm-10">
|
|
1138
|
-
<select class="form-control form-control-sm" data-bind="value: formulaDataFormat" required>
|
|
1139
|
-
<!-- ko ifnot: formulaOnlyHasDateFields -->
|
|
1140
|
-
<option>String</option>
|
|
1141
|
-
<option>Integer</option>
|
|
1142
|
-
<option>Decimal</option>
|
|
1143
|
-
<option>Currency</option>
|
|
1144
|
-
<!-- /ko -->
|
|
1145
|
-
<!-- ko if: formulaOnlyHasDateFields -->
|
|
1146
|
-
<option>Days</option>
|
|
1147
|
-
<option>Hours</option>
|
|
1148
|
-
<option>Minutes</option>
|
|
1149
|
-
<option>Seconds</option>
|
|
1150
|
-
<!-- /ko -->
|
|
1151
|
-
</select>
|
|
1152
|
-
</div>
|
|
1153
|
-
</div>
|
|
1154
|
-
<div class="form-group row" data-bind="visible: formulaDataFormat() == 'Decimal' || formulaDataFormat() == 'Currency'">
|
|
1155
|
-
<label class="col-sm-2 control-label">Round to Decimal Places</label>
|
|
1156
|
-
<div class="col-sm-10">
|
|
1157
|
-
<input type="number" class="form-control" data-bind="value: formulaDecimalPlaces" placeholder="Choose Decimal places (leave blank to not use rounding)" title="Choose Decimal places (leave blank to not use rounding)" />
|
|
1158
|
-
</div>
|
|
1159
|
-
</div>
|
|
1160
|
-
|
|
1161
|
-
<div class="form-group row">
|
|
1162
|
-
<label class="col-sm-2 control-label">Field Formula</label>
|
|
1163
|
-
<div class="col-sm-10">
|
|
1164
|
-
<div data-bind="foreach: formulaFields">
|
|
1165
|
-
<h3 class="pull-left" data-bind="visible: setupFormula.isParenthesesStart" style="margin-top: 0;">(</h3>
|
|
1166
|
-
<div data-bind="if: !setupFormula.isParenthesesStart() && !setupFormula.isParenthesesEnd()">
|
|
1167
|
-
<div class="list-group-item pull-left" style="margin-left: 15px; padding: 5px 15px">
|
|
1168
|
-
<span data-bind="text: fieldName, visible: !setupFormula.isConstantValue()"></span>
|
|
1169
|
-
<div data-bind="if: setupFormula.isConstantValue">
|
|
1170
|
-
<input data-bind="value: setupFormula.constantValue" class="form-control form-control-sm" required />
|
|
1171
|
-
</div>
|
|
1172
|
-
</div>
|
|
1173
|
-
</div>
|
|
1174
|
-
<h3 class="pull-left" data-bind="visible: setupFormula.isParenthesesEnd" style="margin-top: 0;">)</h3>
|
|
1175
|
-
<div class="pull-left" style="margin-left: 15px;" data-bind="visible: $parent.showFormulaOperation($index())">
|
|
1176
|
-
<select class="form-control form-control-sm" style="max-width: 50px;" data-bind="value: setupFormula.formulaOperation">
|
|
1177
|
-
<!-- ko if: !$parent.formulaOnlyHasDateFields() || ($parent.formulaOnlyHasDateFields() && $parent.isConstantOperation($index())) -->
|
|
1178
|
-
<option>+</option>
|
|
1179
|
-
<!-- /ko -->
|
|
1180
|
-
<option>-</option>
|
|
1181
|
-
<!-- ko if: ['Int','Money','Float','Double'].indexOf(fieldType) != -1 -->
|
|
1182
|
-
<option>*</option>
|
|
1183
|
-
<option>/</option>
|
|
1184
|
-
<!-- /ko -->
|
|
1185
|
-
</select>
|
|
1186
|
-
</div>
|
|
1187
|
-
</div>
|
|
1188
|
-
</div>
|
|
1189
|
-
</div>
|
|
1190
|
-
</div>
|
|
1191
|
-
</div>
|
|
1192
|
-
<div class="clearfix"></div>
|
|
1193
|
-
</div>
|
|
1194
|
-
<div data-bind="if: SelectedFields().length>0">
|
|
1195
|
-
<hr />
|
|
1196
|
-
<h5><span class="fa fa-table"></span> Selected data for the Report</h5>
|
|
1197
|
-
<div>
|
|
1198
|
-
<div class="alert alert-info" data-bind="visible: ReportType()=='Bar'">
|
|
1199
|
-
<span class="fa fa-lightbulb-o fa-2x"></span> For Bar Graph, the first field below will show on the x-axis. All other fields will show on y-axis, but they must be numeric.
|
|
1200
|
-
</div>
|
|
1201
|
-
<div class="alert alert-info" data-bind="visible: ReportType()=='Line'">
|
|
1202
|
-
<span class="fa fa-lightbulb-o fa-2x"></span> For Line Graph, the first field below will show on the x-axis and it needs to be numeric.
|
|
1203
|
-
</div>
|
|
1204
|
-
<div class="alert alert-info" data-bind="visible: ReportType()=='Pivot'">
|
|
1205
|
-
<span class="fa fa-lightbulb-o fa-2x"></span> For Pivot report, the first field below will be used to Pivot/Transpose the rows as columns, and it must be grouped.
|
|
1206
|
-
</div>
|
|
1207
|
-
<div data-bind="visible: ReportType()=='Map'">
|
|
1208
|
-
<div class="alert alert-info">
|
|
1209
|
-
<span class="fa fa-lightbulb-o fa-2x"></span> For Map Graph, the first field below has to be a Region, like a Country.
|
|
1210
|
-
</div>
|
|
1211
|
-
<div class="form-group row">
|
|
1212
|
-
<label class="col-sm-2 control-label">Map Display</label>
|
|
1213
|
-
<div class="col-sm-4">
|
|
1214
|
-
<select class="form-control form-control-sm" data-bind="options: $parent.mapRegions, value: mapRegion"></select>
|
|
1215
|
-
</div>
|
|
1216
|
-
</div>
|
|
1217
|
-
</div>
|
|
1218
|
-
<ul class="list-group" data-bind="sortable: { data: SelectedFields, options: { handle: '.sortable', cursor: 'move', placeholder: 'drop-highlight' }, strategyMove: true }">
|
|
1219
|
-
<li class="list-group-item">
|
|
1220
|
-
<div class="row">
|
|
1221
|
-
<div class="col">
|
|
1222
|
-
<span class="fa fa-columns"></span>
|
|
1223
|
-
<span data-bind="text: selectedFieldName"></span>
|
|
1224
|
-
<span data-bind="text: isFormulaField() ? '(' + fieldFormat() + ')' : ''"></span>
|
|
1225
|
-
<span data-bind="visible: !$parent.isFieldValidForYAxis($index(), fieldType, selectedAggregate())">
|
|
1226
|
-
<span class="badge badge-danger" data-bind="visible: !groupInGraph()">Will not show in <span data-bind="text: $parent.ReportType"></span>Chart</span>
|
|
1227
|
-
</span>
|
|
1228
|
-
</div>
|
|
1229
|
-
<div class="col">
|
|
1230
|
-
<div class="pull-right" style="margin-top: -5px;" data-bind="if: $parent.AggregateReport() && !$parent.useStoredProc()">
|
|
1231
|
-
<select class="form-control form-control-sm" data-bind="options: $parent.canDrilldown() && $index()>0 ? fieldAggregateWithDrilldown : fieldAggregate, value: selectedAggregate"></select>
|
|
1232
|
-
</div>
|
|
1233
|
-
<div class="sortable pull-right" style="padding-right: 15px;" data-bind="ifnot: $parent.useStoredProc">
|
|
1234
|
-
<span class="fa fa-arrows " aria-hidden="true" title="Drag to reorder"></span>
|
|
1235
|
-
</div>
|
|
1236
|
-
<div class="pull-right" style="padding-right: 15px;" data-bind="ifnot: $parent.useStoredProc">
|
|
1237
|
-
<span class="fa fa-trash-o" title="Cannot Delete Required Filter" data-bind="visible: forceFilterForTable"></span>
|
|
1238
|
-
<span class="fa fa-trash" style="cursor: pointer;" aria-hidden="true" title="Delete this Field" data-bind="click: $parent.RemoveField, hidden: forceFilterForTable"></span>
|
|
1239
|
-
</div>
|
|
1240
|
-
<div class="pull-right" style="padding-right: 15px;" data-bind="ifnot: $parent.useStoredProc">
|
|
1241
|
-
<span class="button-box no-padding" tabindex="0" data-bind="click: function(){ filterOnFly(!filterOnFly()); }, css: {active: filterOnFly()==true}">
|
|
1242
|
-
<span class="fa fa-filter" aria-hidden="true" title="Filter by this field on the Report"></span>
|
|
1243
|
-
</span>
|
|
1244
|
-
</div>
|
|
1245
|
-
<div class="pull-right" style="padding-right: 15px;" data-bind="visible: $parent.ReportType()!='Pivot'">
|
|
1246
|
-
<span class="button-box no-padding" tabindex="0" data-bind="click: toggleDisable, css: {active: disabled()==true}">
|
|
1247
|
-
<span class="fa fa-close" aria-hidden="true" title="Do not include in Report"></span>
|
|
1248
|
-
</span>
|
|
1249
|
-
</div>
|
|
1250
|
-
<div class="pull-right" style="padding-right: 15px;" data-bind="visible: $parent.ReportType()!='Pivot' && $parent.ReportType()!='List' && !$parent.useStoredProc()">
|
|
1251
|
-
<span class="button-box no-padding" tabindex="0" data-bind="click: function(){ hideInDetail(!hideInDetail()); }, css: {active: hideInDetail()==true}">
|
|
1252
|
-
<span class="fa fa-eye-slash" aria-hidden="true" title="Hide in Details"></span>
|
|
1253
|
-
</span>
|
|
1254
|
-
</div>
|
|
1255
|
-
<div class="pull-right" style="padding-right: 15px;" data-bind="visible: $parent.isFieldValidForYAxis($index(), fieldType, selectedAggregate()) && $parent.isChart() && $index()>0">
|
|
1256
|
-
<span class="button-box no-padding" tabindex="0" data-bind="click: function(){ groupInGraph(!groupInGraph()); }, css: {active: groupInGraph()==false}">
|
|
1257
|
-
<span class="fa fa-line-chart" aria-hidden="true" title="Include in series"></span>
|
|
1258
|
-
</span>
|
|
1259
|
-
</div>
|
|
1260
|
-
<div class="pull-right" style="padding-right: 15px;" data-bind="visible: $parent.IncludeSubTotal() && (['Int', 'Double', 'Money', 'Decimal', 'Currency'].indexOf(fieldType) >= 0 || ['Int', 'Double', 'Money', 'Decimal', 'Currency'].indexOf(fieldFormat()) >= 0)">
|
|
1261
|
-
<span class="button-box no-padding" tabindex="0" data-bind="click: function(){ dontSubTotal(!dontSubTotal()); }, css: {active: dontSubTotal()==true}">
|
|
1262
|
-
<span class="fa fa-plus-circle" aria-hidden="true" title="Don't add to Total row"></span>
|
|
1263
|
-
</span>
|
|
1264
|
-
</div>
|
|
1265
|
-
<div class="pull-right" style="padding-right: 15px;" data-bind="visible: $parent.ReportType()!='Pivot'">
|
|
1266
|
-
<span class="button-box no-padding" tabindex="0" data-bind="click: setupLinkField, css: {active: linkField()==true}">
|
|
1267
|
-
<span class="fa fa-link" aria-hidden="true" title="Link to another Report or Url"></span>
|
|
1268
|
-
</span>
|
|
1269
|
-
</div>
|
|
1270
|
-
<div class="pull-right" style="padding-right: 15px;">
|
|
1271
|
-
<span class="button-box no-padding" tabindex="0" data-bind="click: setupFieldOptions">
|
|
1272
|
-
<span class="fa fa-gear" aria-hidden="true" title="More Options"></span>
|
|
1273
|
-
</span>
|
|
1274
|
-
</div>
|
|
1275
|
-
<div class="pull-right" style="padding-right: 15px;" data-bind="if: isFormulaField">
|
|
1276
|
-
<span class="button-box no-padding" tabindex="0" data-bind="click: editFormulaField">
|
|
1277
|
-
<span class="fa fa-pencil" aria-hidden="true" title="Edit Formula Field"></span>
|
|
1278
|
-
</span>
|
|
1279
|
-
</div>
|
|
1280
|
-
</div>
|
|
1281
|
-
</div>
|
|
1282
|
-
</li>
|
|
1283
|
-
</ul>
|
|
1284
|
-
</div>
|
|
1285
|
-
<hr />
|
|
1286
|
-
<div data-bind="if: useStoredProc">
|
|
1287
|
-
<h5><span class="fa fa-filter"></span> Choose filters</h5>
|
|
1288
|
-
|
|
1289
|
-
<div class="row" style="padding: 10px 10px; overflow-x: auto;">
|
|
1290
|
-
<div data-bind="template: {name: 'filter-parameters'}" class="col"></div>
|
|
1291
|
-
<br />
|
|
1292
|
-
</div>
|
|
734
|
+
<div class="alert alert-info">
|
|
735
|
+
Report will be run and emailed <span data-bind="text: selectedOption() != 'once' ? 'every' : ''"></span> <span data-bind="text: selectedOption"></span>
|
|
736
|
+
<span data-bind="if: selectedOption() == 'once'">
|
|
737
|
+
on <span class="error" data-bind="visible: !selectedDate()">Please pick a Date</span> <span data-bind="text: selectedDate"></span>
|
|
738
|
+
</span>
|
|
739
|
+
<span data-bind="if: showDays">
|
|
740
|
+
on <span class="error" data-bind="visible: selectedDays().length == 0">Please pick Day(s)</span> <span data-bind="text: selectedDays"></span>
|
|
741
|
+
</span>
|
|
742
|
+
<span data-bind="if: showDates">
|
|
743
|
+
on <span class="error" data-bind="visible: selectedDates().length == 0">Please pick Date(s)</span>
|
|
744
|
+
<span data-bind="foreach: selectedDates"><span data-bind="visible: $index()>0">, </span><span data-bind="text: $data == 1 ? '1st': ($data == 2 ? '2nd' : ($data == 3 ? '3rd' : $data+'th'))"></span></span>
|
|
745
|
+
</span>
|
|
746
|
+
<span data-bind="if: showMonths">
|
|
747
|
+
of <span class="error" data-bind="visible: selectedMonths().length == 0">Please pick Month(s)</span> <span data-bind="text: selectedMonths"></span>
|
|
748
|
+
</span>
|
|
749
|
+
<span data-bind="if: showAtTime">
|
|
750
|
+
at <span data-bind="text: selectedHour"></span>:<span data-bind="text: selectedMinute"></span> <span data-bind="text: selectedAmPm"></span>
|
|
751
|
+
</span>
|
|
752
|
+
</div>
|
|
753
|
+
<div class="form-horizontal form-group">
|
|
754
|
+
<div class="form-group row">
|
|
755
|
+
<label class="col-sm-2 control-label">Email to</label>
|
|
756
|
+
<div class="col-sm-6">
|
|
757
|
+
<input type="text" class="form-control" style="width: 100%;" data-bind="value: emailTo" placeholder="Enter Email Addresses separated by comma to send the Report to" required />
|
|
1293
758
|
</div>
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
<div class="checkbox col-12">
|
|
1302
|
-
<label>
|
|
1303
|
-
<input type="checkbox" data-bind="checked: EditFiltersOnReport" />
|
|
1304
|
-
Allow setting up and saving filters on Report
|
|
1305
|
-
</label>
|
|
1306
|
-
</div>
|
|
1307
|
-
</div>
|
|
759
|
+
<label class="col-sm-2 control-label">Report Format</label>
|
|
760
|
+
<div class="col-sm-2">
|
|
761
|
+
<select class="form-control" data-bind="value: format">
|
|
762
|
+
<option value="EXCEL">Excel</option>
|
|
763
|
+
<option value="CSV">CSV</option>
|
|
764
|
+
<option value="PDF">PDF</option>
|
|
765
|
+
</select>
|
|
1308
766
|
</div>
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
<
|
|
1323
|
-
<input type="text" style="width: 100%;" class="form-control" required placeholder="Report Name" data-bind="value: ReportName">
|
|
1324
|
-
</div>
|
|
1325
|
-
</div>
|
|
1326
|
-
<div class="form-group row">
|
|
1327
|
-
<label class="col-sm-2 control-label">Report Description</label>
|
|
1328
|
-
<div class="col-sm-10">
|
|
1329
|
-
<textarea class="form-control" style="width: 100%;" rows="3" placeholder="Optional Report Description" data-bind="value: ReportDescription"></textarea>
|
|
1330
|
-
</div>
|
|
767
|
+
</div>
|
|
768
|
+
</div>
|
|
769
|
+
<div class="form-horizontal form-group">
|
|
770
|
+
<div class="form-group row">
|
|
771
|
+
<div class="col-sm-4 control-label">
|
|
772
|
+
<div class="checkbox">
|
|
773
|
+
<label title="Set a date to start sending scheduled report">
|
|
774
|
+
<input type="checkbox" data-bind="checked: hasScheduleStart" />
|
|
775
|
+
Set Schedule Start Date
|
|
776
|
+
</label>
|
|
777
|
+
</div>
|
|
778
|
+
</div>
|
|
779
|
+
<div class="col-sm-4" data-bind="if: hasScheduleStart">
|
|
780
|
+
<input type="text" class="form-control" data-bind="datepicker: scheduleStart" title="Scheduled Report will not be sent before this date" required />
|
|
1331
781
|
</div>
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
<button class="btn btn-sm btn-secondary" data-bind="text: !SortDesc() ? '▲ Sort Ascending' : 'Sort Descending ▼', click: function() { SortDesc(!SortDesc()); return false; }"></button>
|
|
1340
|
-
</div>
|
|
1341
|
-
<div class="col-sm-2">
|
|
1342
|
-
<button class="btn btn-sm btn-secondary" data-bind="click: addSortField">Add Sort Field</button>
|
|
1343
|
-
</div>
|
|
1344
|
-
</div>
|
|
1345
|
-
<div data-bind="foreach: SortFields">
|
|
1346
|
-
<div class="form-group row">
|
|
1347
|
-
<label class="col-sm-2 control-label"> Then Sort By</label>
|
|
1348
|
-
<div class="col-sm-4">
|
|
1349
|
-
<select class="form-control" required data-bind="options: $parent.SelectedFields, optionsText: 'selectedFieldName', optionsValue: 'fieldId', value: sortByFieldId"></select>
|
|
1350
|
-
</div>
|
|
1351
|
-
<div class="col-sm-2">
|
|
1352
|
-
<button class="btn btn-sm btn-secondary" data-bind="click: remove">Remove Sort Field</button>
|
|
1353
|
-
</div>
|
|
1354
|
-
<div class="col-sm-2">
|
|
1355
|
-
<button class="btn btn-sm btn-secondary" data-bind="text: !sortDesc() ? '▲ Sort Ascending' : 'Sort Descending ▼', click: function() { sortDesc(!sortDesc()); return false; }"></button>
|
|
1356
|
-
</div>
|
|
1357
|
-
<div class="col-sm-2">
|
|
1358
|
-
<button class="btn btn-sm btn-secondary" data-bind="click: $parent.addSortField">Add Sort Field</button>
|
|
1359
|
-
</div>
|
|
1360
|
-
</div>
|
|
1361
|
-
</div>
|
|
1362
|
-
<div class="checkbox" data-bind="visible: ReportType()!='Pivot'">
|
|
1363
|
-
<label>
|
|
1364
|
-
<input type="checkbox" data-bind="checked: IncludeSubTotal" />
|
|
1365
|
-
Include Total Row
|
|
1366
|
-
</label>
|
|
1367
|
-
</div>
|
|
1368
|
-
<div class="checkbox" data-bind="hidden: AggregateReport">
|
|
782
|
+
</div>
|
|
783
|
+
</div>
|
|
784
|
+
|
|
785
|
+
<div class="form-horizontal form-group">
|
|
786
|
+
<div class="form-group row">
|
|
787
|
+
<div class="col-sm-4 control-label">
|
|
788
|
+
<div class="checkbox" title="Set a date to stop sending scheduled report">
|
|
1369
789
|
<label>
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
<input type="checkbox" data-bind="checked: maxRecords" />
|
|
1378
|
-
Max Records
|
|
1379
|
-
</label>
|
|
1380
|
-
</div>
|
|
1381
|
-
<div class="col-sm-10" data-bind="if: maxRecords">
|
|
1382
|
-
<input type="number" style="width: 150px;" class="form-control" required placeholder="Only top n..." data-bind="value: OnlyTop, visible: maxRecords">
|
|
1383
|
-
</div>
|
|
1384
|
-
</div>
|
|
1385
|
-
</div>
|
|
1386
|
-
<div class="checkbox" data-bind="visible: isChart">
|
|
1387
|
-
<label>
|
|
1388
|
-
<input type="checkbox" data-bind="checked: ShowDataWithGraph" />
|
|
1389
|
-
Show Data along with Graph
|
|
1390
|
-
</label>
|
|
1391
|
-
</div>
|
|
1392
|
-
<div class="checkbox" data-bind="visible: CanSaveReports()">
|
|
1393
|
-
<label>
|
|
1394
|
-
<input type="checkbox" data-bind="checked: SaveReport">
|
|
1395
|
-
Save Report
|
|
1396
|
-
</label>
|
|
1397
|
-
</div>
|
|
1398
|
-
<div class="form-group row" data-bind="visible: SaveReport">
|
|
1399
|
-
<label class="col-sm-2 control-label">Choose Folder</label>
|
|
1400
|
-
<div class="col-sm-10">
|
|
1401
|
-
<select class="form-control" style="width: 100%;" data-bind="options: Folders, optionsText: 'FolderName', optionsValue: 'Id', value: FolderID"></select>
|
|
1402
|
-
</div>
|
|
1403
|
-
</div>
|
|
1404
|
-
|
|
1405
|
-
<div data-bind="if: adminMode">
|
|
1406
|
-
<hr />
|
|
1407
|
-
<div data-bind="template: {name: 'manage-access-template'}"></div>
|
|
790
|
+
<input type="checkbox" data-bind="checked: hasScheduleEnd" />
|
|
791
|
+
Set Schedule End Date
|
|
792
|
+
</label>
|
|
793
|
+
</div>
|
|
794
|
+
</div>
|
|
795
|
+
<div class="col-sm-4" data-bind="if: hasScheduleEnd">
|
|
796
|
+
<input type="text" class="form-control" data-bind="datepicker: scheduleEnd" title="Scheduled Report will not be sent after this date" required />
|
|
1408
797
|
</div>
|
|
1409
798
|
</div>
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
799
|
+
</div>
|
|
800
|
+
</div>
|
|
801
|
+
</div>
|
|
802
|
+
</script>
|
|
803
|
+
|
|
804
|
+
<script type="text/html" id="report-field-options">
|
|
805
|
+
<div class="modal-dialog" style="max-width: 750px;">
|
|
806
|
+
<div class="modal-content" data-bind="with: editFieldOptions">
|
|
807
|
+
<div class="modal-header">
|
|
808
|
+
<h5 class="modal-title"><span data-bind="text: fieldName"></span> - Setup Additional Field Options</h5>
|
|
809
|
+
</div>
|
|
810
|
+
<div class="modal-body needs-validation">
|
|
811
|
+
<div class="form-group row">
|
|
812
|
+
<label class="col-sm-5 col-md-5 control-label">Pick Data Format</label>
|
|
813
|
+
<div class="col-sm-7 col-md-7">
|
|
814
|
+
<select class="form-control" required data-bind="options: $parent.fieldFormatTypes, value: fieldFormat"></select>
|
|
815
|
+
</div>
|
|
816
|
+
</div>
|
|
817
|
+
<div class="form-group row" data-bind="visible: $parent.decimalFormatTypes.indexOf($data.fieldFormat())>=0">
|
|
818
|
+
<label class="col-sm-5 col-md-5 control-label">Pick Decimal Places</label>
|
|
819
|
+
<div class="col-sm-7 col-md-7">
|
|
820
|
+
<input type="number" class="form-control" data-bind="value: decimalPlaces" placeholder="" />
|
|
821
|
+
</div>
|
|
822
|
+
</div>
|
|
823
|
+
<div class="form-group row" data-bind="visible: $parent.dateFormatTypes.indexOf($data.fieldFormat())>=0">
|
|
824
|
+
<label class="col-sm-5 col-md-5 control-label">Pick Date Format</label>
|
|
825
|
+
<div class="col-sm-7 col-md-7">
|
|
826
|
+
<select class="form-control" required data-bind="options: $parent.dateFormats, value: dateFormat"></select>
|
|
827
|
+
</div>
|
|
828
|
+
</div>
|
|
829
|
+
<div class="form-group row" data-bind="visible: dateFormat()==='Custom'">
|
|
830
|
+
<label class="col-sm-5 col-md-5 control-label">Enter Custom Date Format</label>
|
|
831
|
+
<div class="col-sm-7 col-md-7">
|
|
832
|
+
<input type="text" class="form-control" data-bind="value: customDateFormat" placeholder="dd/mm/yyyy" />
|
|
833
|
+
</div>
|
|
834
|
+
</div>
|
|
835
|
+
<div class="form-group row">
|
|
836
|
+
<label class="col-sm-5 col-md-5 control-label">Choose Column Label</label>
|
|
837
|
+
<div class="col-sm-7 col-md-7">
|
|
838
|
+
<input type="text" class="form-control" required data-bind="value: fieldLabel" />
|
|
839
|
+
</div>
|
|
840
|
+
</div>
|
|
841
|
+
<div class="form-group row">
|
|
842
|
+
<label class="col-sm-5 col-md-5 control-label">Choose Text Alignment</label>
|
|
843
|
+
<div class="col-sm-7 col-md-7">
|
|
844
|
+
<select class="form-control" required data-bind="options: $parent.fieldAlignments, value: fieldAlign"></select>
|
|
845
|
+
</div>
|
|
846
|
+
</div>
|
|
847
|
+
<div class="form-group row">
|
|
848
|
+
<label class="col-sm-5 col-md-5 control-label">Pick Header Text Color</label>
|
|
849
|
+
<div class="col-sm-7 col-md-7">
|
|
850
|
+
<input type="color" style="width: 50px" class="form-control pull-left" required data-bind="value: headerFontColor" />
|
|
851
|
+
<input type="text" style="width: 100px" class="form-control pull-left" required data-bind="value: headerFontColor" />
|
|
852
|
+
<button class="btn btn-sm pull-left" title="Apply to all columns" data-bind="click: function(){applyAllHeaderFontColor(!applyAllHeaderFontColor()); }">
|
|
853
|
+
<span class="fa" data-bind="css: applyAllHeaderFontColor() ? 'fa-check' : 'fa-paste'"></span>
|
|
854
|
+
</button>
|
|
855
|
+
</div>
|
|
856
|
+
</div>
|
|
857
|
+
<div class="form-group row">
|
|
858
|
+
<label class="col-sm-5 col-md-5 control-label">Pick Header Background Color</label>
|
|
859
|
+
<div class="col-sm-7 col-md-7">
|
|
860
|
+
<input type="color" style="width: 50px" class="form-control pull-left" required data-bind="value: headerBackColor" />
|
|
861
|
+
<input type="text" style="width: 100px" class="form-control pull-left" required data-bind="value: headerBackColor" />
|
|
862
|
+
<button class="btn btn-sm pull-left" title="Apply to all columns" data-bind="click: function(){applyAllHeaderBackColor(!applyAllHeaderBackColor()); }">
|
|
863
|
+
<span class="fa" data-bind="css: applyAllHeaderBackColor() ? 'fa-check' : 'fa-paste'"></span>
|
|
864
|
+
</button>
|
|
865
|
+
</div>
|
|
866
|
+
</div>
|
|
867
|
+
<div class="form-group row">
|
|
868
|
+
<label class="col-sm-5 col-md-5 control-label">Pick Text Color</label>
|
|
869
|
+
<div class="col-sm-7 col-md-7">
|
|
870
|
+
<input type="color" style="width: 50px" class="form-control pull-left" required data-bind="value: fontColor" />
|
|
871
|
+
<input type="text" style="width: 100px" class="form-control pull-left" data-bind="value: fontColor" />
|
|
872
|
+
<button class="btn btn-sm pull-left" title="Apply to all columns" data-bind="click: function(){applyAllFontColor(!applyAllFontColor()); }">
|
|
873
|
+
<span class="fa" data-bind="css: applyAllFontColor() ? 'fa-check' : 'fa-paste'"></span>
|
|
874
|
+
</button>
|
|
875
|
+
</div>
|
|
876
|
+
</div>
|
|
877
|
+
<div class="form-group row">
|
|
878
|
+
<label class="col-sm-5 col-md-5 control-label">Pick Background Color</label>
|
|
879
|
+
<div class="col-sm-7 col-md-7">
|
|
880
|
+
<input type="color" style="width: 50px" class="form-control pull-left" required data-bind="value: backColor" />
|
|
881
|
+
<input type="text" style="width: 100px" class="form-control pull-left" data-bind="value: backColor" />
|
|
882
|
+
<button class="btn btn-sm pull-left" title="Apply to all columns" data-bind="click: function(){applyAllBackColor(!applyAllBackColor()); }">
|
|
883
|
+
<span class="fa" data-bind="css: applyAllBackColor() ? 'fa-check' : 'fa-paste'"></span>
|
|
884
|
+
</button>
|
|
885
|
+
</div>
|
|
886
|
+
</div>
|
|
887
|
+
<div class="form-group row">
|
|
888
|
+
<label class="col-sm-5 col-md-5 control-label">Choose Width (leave blank for auto)</label>
|
|
889
|
+
<div class="col-sm-7 col-md-7">
|
|
890
|
+
<input type="text" class="form-control" required data-bind="value: fieldWidth" />
|
|
891
|
+
</div>
|
|
892
|
+
</div>
|
|
893
|
+
<div class="form-group row">
|
|
894
|
+
<div class="col-sm-12">
|
|
895
|
+
<div class="checkbox pull-left" style="padding-top: 5px;">
|
|
896
|
+
<label>
|
|
897
|
+
<input type="checkbox" data-bind="checked: headerFontBold" />
|
|
898
|
+
Make Header Text Bold
|
|
899
|
+
</label>
|
|
900
|
+
</div>
|
|
901
|
+
<button class="btn btn-sm pull-left" title="Apply to all columns" data-bind="click: function(){applyAllHeaderBold(!applyAllHeaderBold()); }">
|
|
902
|
+
<span class="fa" data-bind="css: applyAllHeaderBold() ? 'fa-check' : 'fa-paste'"></span>
|
|
903
|
+
</button>
|
|
904
|
+
</div>
|
|
905
|
+
</div>
|
|
906
|
+
<div class="form-group row">
|
|
907
|
+
<div class="col-sm-12">
|
|
908
|
+
<div class="checkbox pull-left" style="padding-top: 5px;">
|
|
909
|
+
<label>
|
|
910
|
+
<input type="checkbox" data-bind="checked: fontBold" />
|
|
911
|
+
Make Text Bold
|
|
912
|
+
</label>
|
|
913
|
+
</div>
|
|
914
|
+
<button class="btn btn-sm pull-left" title="Apply to all columns" data-bind="click: function(){applyAllBold(!applyAllBold()); }">
|
|
915
|
+
<span class="fa" data-bind="css: applyAllBold() ? 'fa-check' : 'fa-paste'"></span>
|
|
916
|
+
</button>
|
|
917
|
+
</div>
|
|
918
|
+
</div>
|
|
919
|
+
<div class="form-group row" data-bind="if: $parent.useStoredProc() || $parent.ReportType() == 'List'">
|
|
920
|
+
<div class="col-sm-12">
|
|
921
|
+
<div class="checkbox pull-left" style="padding-top: 5px;">
|
|
922
|
+
<label>
|
|
923
|
+
<input type="checkbox" data-bind="checked: checkOuterGroup" />
|
|
924
|
+
Outer Group
|
|
925
|
+
</label>
|
|
926
|
+
</div>
|
|
927
|
+
</div>
|
|
928
|
+
</div>
|
|
929
|
+
</div>
|
|
930
|
+
<div class="modal-footer">
|
|
931
|
+
<button type="button" class="btn btn-danger" data-bind="click: cancelFieldOptions">Cancel</button>
|
|
932
|
+
<button type="button" class="btn btn-primary" data-bind="click: saveFieldOptions">Save Changes</button>
|
|
933
|
+
</div>
|
|
934
|
+
</div>
|
|
935
|
+
</div>
|
|
936
|
+
</script>
|
|
937
|
+
|
|
938
|
+
<script type="text/html" id="report-link-edit">
|
|
939
|
+
<div class="modal-dialog" style="max-width: 750px;">
|
|
940
|
+
<div class="modal-content" data-bind="with: editLinkField">
|
|
941
|
+
<div class="modal-header">
|
|
942
|
+
<h5 class="modal-title">Setup Link Field</h5>
|
|
943
|
+
</div>
|
|
944
|
+
<div class="modal-body needs-validation" data-bind="with: linkFieldItem">
|
|
945
|
+
<div class="form-group row">
|
|
946
|
+
<label class="col-sm-5 col-md-5 control-label">This field will link to</label>
|
|
947
|
+
<div class="col-sm-7 col-md-7">
|
|
948
|
+
<select class="form-control" required data-bind="options: linkTypes, value: selectedLinkType"></select>
|
|
949
|
+
</div>
|
|
950
|
+
</div>
|
|
951
|
+
<div data-bind="if: LinksToReport">
|
|
952
|
+
<div class="form-group row">
|
|
953
|
+
<label class="col-sm-5 col-md-5 control-label">Link to this Report</label>
|
|
954
|
+
<div class="col-sm-7 col-md-7">
|
|
955
|
+
<select class="form-control" required data-bind="options: $parentContext.$parent.SavedReports, optionsText: 'reportName', optionsValue: 'reportId', value: LinkedToReportId, optionsCaption: 'Choose the Report to link to'"></select>
|
|
956
|
+
</div>
|
|
957
|
+
</div>
|
|
958
|
+
<div class="checkbox" data-bind="if: LinkedToReportId">
|
|
959
|
+
<label>
|
|
960
|
+
<input type="checkbox" data-bind="checked: SendAsFilterParameter" />
|
|
961
|
+
Send field value as Report Filter Parameter
|
|
962
|
+
</label>
|
|
963
|
+
</div>
|
|
964
|
+
<div class="form-group row" data-bind="if: SendAsFilterParameter">
|
|
965
|
+
<label class="col-sm-5 col-md-5 control-label">Link to this Report Filter</label>
|
|
966
|
+
<div class="col-sm-7 col-md-7">
|
|
967
|
+
<select class="form-control" required data-bind="options: allFields, optionsText: 'fieldName', optionsValue: 'fieldId', value: SelectedFilterId, optionsCaption: 'Choose the Field to Filter by value'"></select>
|
|
968
|
+
</div>
|
|
969
|
+
</div>
|
|
970
|
+
</div>
|
|
971
|
+
<div data-bind="ifnot: LinksToReport">
|
|
972
|
+
<div class="form-group row">
|
|
973
|
+
<label class="col-sm-5 col-md-5 control-label">Link to this URL</label>
|
|
974
|
+
<div class="col-sm-7 col-md-7">
|
|
975
|
+
<input type="text" class="form-control" required placeholder="Enter a url to open" data-bind="value: LinkToUrl" title="Valid URL needs to start with http:// or https://">
|
|
976
|
+
</div>
|
|
977
|
+
</div>
|
|
978
|
+
<div class="checkbox">
|
|
979
|
+
<label>
|
|
980
|
+
<input type="checkbox" data-bind="checked: SendAsQueryParameter" />
|
|
981
|
+
Send field value as Query Parameter
|
|
982
|
+
</label>
|
|
983
|
+
</div>
|
|
984
|
+
<div class="form-group row" data-bind="if: SendAsQueryParameter">
|
|
985
|
+
<label class="col-sm-5 col-md-5 control-label">Parameter Name to use</label>
|
|
986
|
+
<div class="col-sm-7 col-md-7">
|
|
987
|
+
<input type="text" class="form-control" required placeholder="Enter parameter name to send value as" data-bind="value: QueryParameterName">
|
|
988
|
+
</div>
|
|
989
|
+
</div>
|
|
990
|
+
<br />
|
|
991
|
+
</div>
|
|
992
|
+
</div>
|
|
993
|
+
<div class="modal-footer">
|
|
994
|
+
<button type="button" class="btn btn-danger" data-bind="click: removeLinkField">Remove Link</button>
|
|
995
|
+
<button type="button" class="btn btn-primary" data-bind="click: saveLinkField">Save Changes</button>
|
|
996
|
+
</div>
|
|
997
|
+
</div>
|
|
998
|
+
</div>
|
|
999
|
+
</script>
|
|
1000
|
+
|
|
1001
|
+
<script type="text/html" id="report-designer">
|
|
1002
|
+
<div class="modal-dialog">
|
|
1003
|
+
<div class="modal-content">
|
|
1004
|
+
<div class="modal-header">
|
|
1005
|
+
<h5 class="modal-title" id="myModalLabel">
|
|
1006
|
+
<a title="Need help setting up a report?" target="_blank" href="https://dotnetreport.com/blogs/docs/designing-reports">
|
|
1007
|
+
<span class="fa fa-question-circle"></span>
|
|
1008
|
+
</a>Design your Report
|
|
1009
|
+
</h5>
|
|
1010
|
+
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
|
|
1011
|
+
</div>
|
|
1012
|
+
<div class="modal-body needs-validation">
|
|
1013
|
+
<div class="card card-body">
|
|
1014
|
+
<h5><span class="fa fa-file"></span> Choose Report Type</h5>
|
|
1015
|
+
<div class="row">
|
|
1016
|
+
<div class="col-md-2 col-sm-4 col-xs-6">
|
|
1017
|
+
<div class="button-box" tabindex="0" data-bind="click: function(){ setReportType('List'); }, css: {active: ReportType()=='List'}">
|
|
1018
|
+
<span class="fa fa-2x fa-list-alt"></span>
|
|
1019
|
+
<p>List</p>
|
|
1020
|
+
</div>
|
|
1021
|
+
</div>
|
|
1022
|
+
<div class="col-md-2 col-sm-4 col-xs-6">
|
|
1023
|
+
<div class="button-box" tabindex="0" data-bind="click: function(){ setReportType('Summary'); }, css: {active: ReportType()=='Summary'}">
|
|
1024
|
+
<span class="fa fa-2x fa-table"></span>
|
|
1025
|
+
<p>Summary</p>
|
|
1026
|
+
</div>
|
|
1027
|
+
</div>
|
|
1028
|
+
<div class="col-md-2 col-sm-4 col-xs-6">
|
|
1029
|
+
<div class="button-box" tabindex="0" data-bind="click: function(){ setReportType('Bar'); }, css: {active: ReportType()=='Bar'}">
|
|
1030
|
+
<span class="fa fa-2x fa-bar-chart"></span>
|
|
1031
|
+
<p>Bar</p>
|
|
1032
|
+
</div>
|
|
1033
|
+
</div>
|
|
1034
|
+
<div class="col-md-2 col-sm-4 col-xs-6">
|
|
1035
|
+
<div class="button-box" tabindex="0" data-bind="click: function(){ setReportType('Pie'); }, css: {active: ReportType()=='Pie'}">
|
|
1036
|
+
<span class="fa fa-2x fa-pie-chart"></span>
|
|
1037
|
+
<p>Pie</p>
|
|
1038
|
+
</div>
|
|
1039
|
+
</div>
|
|
1040
|
+
</div>
|
|
1041
|
+
<div class="row">
|
|
1042
|
+
<div class="col-md-2 col-sm-4 col-xs-6">
|
|
1043
|
+
<div class="button-box" tabindex="0" data-bind="click: function(){ setReportType('Line'); }, css: {active: ReportType()=='Line'}">
|
|
1044
|
+
<span class="fa fa-2x fa-line-chart"></span>
|
|
1045
|
+
<p>Line</p>
|
|
1046
|
+
</div>
|
|
1047
|
+
</div>
|
|
1048
|
+
<div class="col-md-2 col-sm-4 col-xs-6">
|
|
1049
|
+
<div class="button-box" tabindex="0" data-bind="click: function(){ setReportType('Map'); }, css: {active: ReportType().indexOf('Map')==0}">
|
|
1050
|
+
<span class="fa fa-2x fa-globe"></span>
|
|
1051
|
+
<p>Map</p>
|
|
1052
|
+
</div>
|
|
1053
|
+
</div>
|
|
1054
|
+
<div class="col-md-2 col-sm-4 col-xs-6">
|
|
1055
|
+
<div class="button-box" tabindex="0" data-bind="click: function(){ setReportType('Single'); }, css: {active: ReportType()=='Single'}">
|
|
1056
|
+
<span class="fa fa-2x fa-window-maximize"></span>
|
|
1057
|
+
<p>Widget</p>
|
|
1058
|
+
</div>
|
|
1059
|
+
</div>
|
|
1060
|
+
<div class="col-md-2 col-sm-4 col-xs-6">
|
|
1061
|
+
<div class="button-box" tabindex="0" data-bind="click: function(){ setReportType('Pivot'); }, css: {active: ReportType()=='Pivot'}">
|
|
1062
|
+
<span class="fa fa-2x fa-random"></span>
|
|
1063
|
+
<p>Transpose</p>
|
|
1064
|
+
</div>
|
|
1065
|
+
</div>
|
|
1066
|
+
</div>
|
|
1067
|
+
</div>
|
|
1068
|
+
<br />
|
|
1069
|
+
<div class="card card-body">
|
|
1070
|
+
<h5 class="pull-left"><span class="fa fa-database"></span> Choose Data for Report</h5>
|
|
1071
|
+
<div class="pull-right" role="group" data-bind="if: ReportID() <= 0">
|
|
1072
|
+
<label class="btn btn-sm btn-primary active" style="margin-right: 0px;" title="You can change the Data source only when creating a new report, changing this will clear all selections">
|
|
1073
|
+
<input type="radio" name="dataoption" id="table" checked data-bind="checked: useStoredProc, checkedValue: false"> Dynamic
|
|
1074
|
+
</label>
|
|
1075
|
+
<label class="btn btn-sm btn-primary">
|
|
1076
|
+
<input type="radio" name="dataoption" id="proc" value="1" data-bind="checked: useStoredProc, checkedValue: true"> Predefined
|
|
1077
|
+
</label>
|
|
1078
|
+
</div>
|
|
1079
|
+
<div class="clearfix"></div>
|
|
1080
|
+
<div class="row">
|
|
1081
|
+
<div class="col-md-6">
|
|
1082
|
+
<select class="form-control" data-bind="options: Procs, optionsCaption: 'Choose Section...', optionsText: 'DisplayName', value: SelectedProc, disable: isFormulaField, visible: useStoredProc"></select>
|
|
1083
|
+
<select class="form-control" data-bind="options: Tables, optionsCaption: 'Choose Section...', optionsText: 'tableName', value: SelectedTable, disable: isFormulaField, hidden: useStoredProc"></select>
|
|
1084
|
+
</div>
|
|
1085
|
+
|
|
1086
|
+
<div class="col-md-6" data-bind="disable: isFormulaField, hidden: useStoredProc">
|
|
1087
|
+
<div data-bind="with: textQuery.searchFields">
|
|
1088
|
+
<select id="search-field" class="form-control" data-bind="select2: {placeholder: 'Or Search for a Data Field...', ajax: { url: url, dataType: 'json', data: query, processResults: processResults, headers: headers }, minimumInputLength: 2, allowClear: true }, value: selectedOption"></select>
|
|
1089
|
+
</div>
|
|
1090
|
+
</div>
|
|
1091
|
+
|
|
1092
|
+
<div class="col-md-12 padded-div" data-bind="visible: ChooseFields().length>0">
|
|
1093
|
+
<div class="small pull-left">
|
|
1094
|
+
Check the fields you would like to use in the Report
|
|
1095
|
+
</div>
|
|
1096
|
+
<div class="pull-right btn-toolbar">
|
|
1097
|
+
<a href="#" class="btn btn-sm" title="Custom Field using Formula" data-bind="click: function(){isFormulaField(!isFormulaField())}, text: isFormulaField()? 'Cancel': 'Customize', css: {'btn-primary': !isFormulaField(), 'btn-danger': isFormulaField}"></a>
|
|
1098
|
+
|
|
1099
|
+
<a href="#" class="btn btn-secondary btn-sm" data-bind="click: MoveAllFields, visible: !isFormulaField()">Select all</a>
|
|
1100
|
+
<a href="#" class="btn btn-secondary btn-sm" data-bind="click: RemoveSelectedFields, visible: !isFormulaField()">Remove all</a>
|
|
1101
|
+
</div>
|
|
1102
|
+
</div>
|
|
1103
|
+
<div class="row container-fluid" data-bind="foreach: ChooseFields">
|
|
1104
|
+
<div class="col-md-3 col-sm-4 col-xs-6">
|
|
1105
|
+
<div class="list-group-item">
|
|
1106
|
+
<div class="checkbox">
|
|
1107
|
+
<label>
|
|
1108
|
+
<input type="checkbox" data-bind="checkedInArray: {array: $parent.isFormulaField() ? $parent.formulaFields : $parent.SelectedFields, value: $data}">
|
|
1109
|
+
<span data-bind="text: fieldName"></span>
|
|
1110
|
+
</label>
|
|
1111
|
+
</div>
|
|
1112
|
+
</div>
|
|
1113
|
+
</div>
|
|
1114
|
+
</div>
|
|
1115
|
+
</div>
|
|
1116
|
+
|
|
1117
|
+
<div data-bind="if: lastPickedField() && lastPickedField().fieldType == 'Json'">
|
|
1118
|
+
<br />
|
|
1119
|
+
<div class="card">
|
|
1120
|
+
<div class="card-header">
|
|
1121
|
+
<h6>Select Data Fields from <span data-bind="text: lastPickedField().fieldName"></span></h6>
|
|
1122
|
+
</div>
|
|
1123
|
+
<div class="card-body">
|
|
1124
|
+
<div class="row container-fluid" data-bind="foreach: jsonFields">
|
|
1125
|
+
<div class="col-md-3 col-sm-4 col-xs-6">
|
|
1126
|
+
<div class="list-group-item">
|
|
1127
|
+
<div class="checkbox">
|
|
1128
|
+
<label>
|
|
1129
|
+
<input type="checkbox" data-bind="checkedInArray: {array: $parent.SelectedFields, value: $data}">
|
|
1130
|
+
<span data-bind="text: jsonColumnName"></span>
|
|
1131
|
+
</label>
|
|
1132
|
+
</div>
|
|
1133
|
+
</div>
|
|
1134
|
+
</div>
|
|
1135
|
+
</div>
|
|
1136
|
+
</div>
|
|
1137
|
+
</div>
|
|
1138
|
+
</div>
|
|
1139
|
+
|
|
1140
|
+
<div data-bind="if: isFormulaField" id="custom-field-design">
|
|
1141
|
+
<br />
|
|
1142
|
+
<br />
|
|
1143
|
+
<div class="card">
|
|
1144
|
+
<div class="card-body">
|
|
1145
|
+
<div class="row">
|
|
1146
|
+
<div class="col-md-12 pull-right">
|
|
1147
|
+
<a href="#" class="btn btn-primary btn-sm" title="Save Custom Formula Field" data-bind="click: saveFormulaField, visible: isFormulaField">Save</a>
|
|
1148
|
+
<a href="#" class="btn btn-sm" title="Custom Field using Formula" data-bind="click: function(){isFormulaField(!isFormulaField())}, text: isFormulaField()? 'Cancel': 'Customize', css: {'btn-primary': !isFormulaField(), 'btn-danger': isFormulaField}"></a>
|
|
1149
|
+
|
|
1150
|
+
</div>
|
|
1151
|
+
<div class="col-md-12 padded-div" data-bind="visible: ChooseFields().length>0 && isFormulaField()">
|
|
1152
|
+
<div class="alert alert-info">
|
|
1153
|
+
You are now creating a Customized Field. Check Fields you want to use in the calculation, then choose the operations you want to perform, and click "Save" on the right above to add your Custom field.
|
|
1154
|
+
Please note that Custom Field must be chosen in within the same Section and their data types must match.
|
|
1155
|
+
</div>
|
|
1156
|
+
</div>
|
|
1157
|
+
</div>
|
|
1158
|
+
<div class="row">
|
|
1159
|
+
<div class="col-sm-6 small">
|
|
1160
|
+
Setup your Formula for calculating this Field
|
|
1161
|
+
</div>
|
|
1162
|
+
<div class="col-sm-6 right-align">
|
|
1163
|
+
<a href="#" class="btn btn-secondary btn-sm" data-bind="click: addFormulaParentheses">Add ( )</a>
|
|
1164
|
+
<a href="#" class="btn btn-secondary btn-sm" title="Add a Constant Value" data-bind="click: addFormulaConstantValue">Add Value</a>
|
|
1165
|
+
<a href="#" class="btn btn-secondary btn-sm" data-bind="click: clearFormulaField">Clear</a>
|
|
1166
|
+
</div>
|
|
1167
|
+
</div>
|
|
1168
|
+
<div class="form-group-row" data-bind="if: formulaOnlyHasDateFields">
|
|
1169
|
+
<div class="col-sm-12">
|
|
1170
|
+
<div class="alert alert-info">
|
|
1171
|
+
For Dates Field calculation, you can only substract date fields and display the result as days, hours, minutes or seconds.
|
|
1172
|
+
</div>
|
|
1173
|
+
</div>
|
|
1174
|
+
</div>
|
|
1175
|
+
<div class="form-group row">
|
|
1176
|
+
<label class="col-sm-2 control-label">Field Label</label>
|
|
1177
|
+
<div class="col-sm-10">
|
|
1178
|
+
<input type="text" class="form-control form-control-sm" data-bind="value: formulaFieldLabel" required placeholder="Custom Field Label" />
|
|
1179
|
+
</div>
|
|
1180
|
+
</div>
|
|
1181
|
+
<div class="form-group row">
|
|
1182
|
+
<label class="col-sm-2 control-label">Data Format</label>
|
|
1183
|
+
<div class="col-sm-10">
|
|
1184
|
+
<select class="form-control form-control-sm" data-bind="value: formulaDataFormat" required>
|
|
1185
|
+
<!-- ko ifnot: formulaOnlyHasDateFields -->
|
|
1186
|
+
<option>String</option>
|
|
1187
|
+
<option>Integer</option>
|
|
1188
|
+
<option>Decimal</option>
|
|
1189
|
+
<option>Currency</option>
|
|
1190
|
+
<!-- /ko -->
|
|
1191
|
+
<!-- ko if: formulaOnlyHasDateFields -->
|
|
1192
|
+
<option>Days</option>
|
|
1193
|
+
<option>Hours</option>
|
|
1194
|
+
<option>Minutes</option>
|
|
1195
|
+
<option>Seconds</option>
|
|
1196
|
+
<!-- /ko -->
|
|
1197
|
+
</select>
|
|
1198
|
+
</div>
|
|
1199
|
+
</div>
|
|
1200
|
+
<div class="form-group row" data-bind="visible: formulaDataFormat() == 'Decimal' || formulaDataFormat() == 'Currency'">
|
|
1201
|
+
<label class="col-sm-2 control-label">Round to Decimal Places</label>
|
|
1202
|
+
<div class="col-sm-10">
|
|
1203
|
+
<input type="number" class="form-control" data-bind="value: formulaDecimalPlaces" placeholder="Choose Decimal places (leave blank to not use rounding)" title="Choose Decimal places (leave blank to not use rounding)" />
|
|
1204
|
+
</div>
|
|
1205
|
+
</div>
|
|
1206
|
+
|
|
1207
|
+
<div class="form-group row">
|
|
1208
|
+
<label class="col-sm-2 control-label">Field Formula</label>
|
|
1209
|
+
<div class="col-sm-10">
|
|
1210
|
+
<div data-bind="foreach: formulaFields">
|
|
1211
|
+
<h3 class="pull-left" data-bind="visible: setupFormula.isParenthesesStart" style="margin-top: 0;">(</h3>
|
|
1212
|
+
<div data-bind="if: !setupFormula.isParenthesesStart() && !setupFormula.isParenthesesEnd()">
|
|
1213
|
+
<div class="list-group-item pull-left" style="margin-left: 15px; padding: 5px 15px">
|
|
1214
|
+
<span data-bind="text: fieldName, visible: !setupFormula.isConstantValue()"></span>
|
|
1215
|
+
<div data-bind="if: setupFormula.isConstantValue">
|
|
1216
|
+
<input data-bind="value: setupFormula.constantValue" class="form-control form-control-sm" required />
|
|
1217
|
+
</div>
|
|
1218
|
+
</div>
|
|
1219
|
+
</div>
|
|
1220
|
+
<h3 class="pull-left" data-bind="visible: setupFormula.isParenthesesEnd" style="margin-top: 0;">)</h3>
|
|
1221
|
+
<div class="pull-left" style="margin-left: 15px;" data-bind="visible: $parent.showFormulaOperation($index())">
|
|
1222
|
+
<select class="form-control form-control-sm" style="max-width: 50px;" data-bind="value: setupFormula.formulaOperation">
|
|
1223
|
+
<!-- ko if: !$parent.formulaOnlyHasDateFields() || ($parent.formulaOnlyHasDateFields() && $parent.isConstantOperation($index())) -->
|
|
1224
|
+
<option>+</option>
|
|
1225
|
+
<!-- /ko -->
|
|
1226
|
+
<option>-</option>
|
|
1227
|
+
<!-- ko if: ['Integer','Money','Float','Double','Decimal','Currency'].indexOf($parent.formulaDataFormat()) != -1 -->
|
|
1228
|
+
<option>*</option>
|
|
1229
|
+
<option>/</option>
|
|
1230
|
+
<!-- /ko -->
|
|
1231
|
+
</select>
|
|
1232
|
+
</div>
|
|
1233
|
+
</div>
|
|
1234
|
+
</div>
|
|
1235
|
+
</div>
|
|
1236
|
+
</div>
|
|
1237
|
+
</div>
|
|
1238
|
+
<div class="clearfix"></div>
|
|
1239
|
+
</div>
|
|
1240
|
+
<div data-bind="if: SelectedFields().length>0">
|
|
1241
|
+
<hr />
|
|
1242
|
+
<h5><span class="fa fa-table"></span> Selected data for the Report</h5>
|
|
1243
|
+
<div>
|
|
1244
|
+
<div data-bind="visible: ReportType()=='Bar'" class="card card-body" style="margin-bottom: 15px">
|
|
1245
|
+
<div class="alert alert-info">
|
|
1246
|
+
<span class="fa fa-lightbulb-o fa-2x"></span> For Bar Graph, the first field below will show on the x-axis. All other fields will show on y-axis, but they must be numeric.
|
|
1247
|
+
</div>
|
|
1248
|
+
<div class="form-group row">
|
|
1249
|
+
<div class="checkbox col-6">
|
|
1250
|
+
<label>
|
|
1251
|
+
<input type="checkbox" data-bind="checked: barChartHorizontal" />
|
|
1252
|
+
Horizontal Bar Chart
|
|
1253
|
+
</label>
|
|
1254
|
+
</div>
|
|
1255
|
+
<div class="checkbox col-6">
|
|
1256
|
+
<label>
|
|
1257
|
+
<input type="checkbox" data-bind="checked: barChartStacked" />
|
|
1258
|
+
Stacked Bar Chart
|
|
1259
|
+
</label>
|
|
1260
|
+
</div>
|
|
1261
|
+
</div>
|
|
1262
|
+
</div>
|
|
1263
|
+
<div class="alert alert-info" data-bind="visible: ReportType()=='Line'">
|
|
1264
|
+
<span class="fa fa-lightbulb-o fa-2x"></span> For Line Graph, the first field below will show on the x-axis and it needs to be numeric.
|
|
1265
|
+
</div>
|
|
1266
|
+
<div class="alert alert-info" data-bind="visible: ReportType()=='Pivot'">
|
|
1267
|
+
<span class="fa fa-lightbulb-o fa-2x"></span> For Transpose, the first field below will be used to Pivot/Transpose the rows as columns, and it must be grouped.
|
|
1268
|
+
</div>
|
|
1269
|
+
<div data-bind="visible: ReportType()=='Map'" class="card card-body" style="margin-bottom: 15px">
|
|
1270
|
+
<div class="alert alert-info">
|
|
1271
|
+
<span class="fa fa-lightbulb-o fa-2x"></span> For Map Graph, the first field below has to be a Region, like a Country.
|
|
1272
|
+
</div>
|
|
1273
|
+
<div class="form-group row">
|
|
1274
|
+
<label class="col-sm-2 control-label">Map Display</label>
|
|
1275
|
+
<div class="col-sm-4">
|
|
1276
|
+
<select class="form-control form-control-sm" data-bind="options: $parent.mapRegions, value: mapRegion"></select>
|
|
1277
|
+
</div>
|
|
1278
|
+
</div>
|
|
1279
|
+
</div>
|
|
1280
|
+
<ul class="list-group" data-bind="sortable: { data: SelectedFields, options: { handle: '.sortable', cursor: 'move', placeholder: 'drop-highlight' }, strategyMove: true }">
|
|
1281
|
+
<li class="list-group-item">
|
|
1282
|
+
<div class="row">
|
|
1283
|
+
<div class="col">
|
|
1284
|
+
<span class="fa fa-columns"></span>
|
|
1285
|
+
<span data-bind="text: selectedFieldName"></span>
|
|
1286
|
+
<span data-bind="text: isFormulaField() ? '(' + fieldFormat() + ')' : ''"></span>
|
|
1287
|
+
<span data-bind="visible: !$parent.isFieldValidForYAxis($index(), fieldType, selectedAggregate())">
|
|
1288
|
+
<span class="badge badge-danger" data-bind="visible: !groupInGraph()">Will not show in <span data-bind="text: $parent.ReportType"></span>Chart</span>
|
|
1289
|
+
</span>
|
|
1290
|
+
</div>
|
|
1291
|
+
<div class="col">
|
|
1292
|
+
<div class="pull-right" style="margin-top: -5px;" data-bind="if: $parent.AggregateReport() && !$parent.useStoredProc()">
|
|
1293
|
+
<select class="form-control form-control-sm" data-bind="options: $parent.canDrilldown() && $index()>0 ? fieldAggregateWithDrilldown : fieldAggregate, value: selectedAggregate"></select>
|
|
1294
|
+
</div>
|
|
1295
|
+
<div class="sortable pull-right" style="padding-right: 15px;" data-bind="ifnot: $parent.useStoredProc">
|
|
1296
|
+
<span class="fa fa-arrows " aria-hidden="true" title="Drag to reorder"></span>
|
|
1297
|
+
</div>
|
|
1298
|
+
<div class="pull-right" style="padding-right: 15px;" data-bind="ifnot: $parent.useStoredProc">
|
|
1299
|
+
<span class="fa fa-trash-o" title="Cannot Delete Required Filter" data-bind="visible: forceFilterForTable"></span>
|
|
1300
|
+
<span class="fa fa-trash" style="cursor: pointer;" aria-hidden="true" title="Delete this Field" data-bind="click: $parent.RemoveField, hidden: forceFilterForTable"></span>
|
|
1301
|
+
</div>
|
|
1302
|
+
<div class="pull-right" style="padding-right: 15px;" data-bind="ifnot: $parent.useStoredProc">
|
|
1303
|
+
<span class="button-box no-padding" tabindex="0" data-bind="click: function(){ filterOnFly(!filterOnFly()); }, css: {active: filterOnFly()==true}">
|
|
1304
|
+
<span class="fa fa-filter" aria-hidden="true" title="Filter by this field on the Report"></span>
|
|
1305
|
+
</span>
|
|
1306
|
+
</div>
|
|
1307
|
+
<div class="pull-right" style="padding-right: 15px;" data-bind="visible: $parent.ReportType()!='Pivot'">
|
|
1308
|
+
<span class="button-box no-padding" tabindex="0" data-bind="click: toggleDisable, css: {active: disabled()==true}">
|
|
1309
|
+
<span class="fa fa-close" aria-hidden="true" title="Do not include in Report"></span>
|
|
1310
|
+
</span>
|
|
1311
|
+
</div>
|
|
1312
|
+
<div class="pull-right" style="padding-right: 15px;" data-bind="visible: $parent.ReportType()!='Pivot' && $parent.ReportType()!='List' && !$parent.useStoredProc()">
|
|
1313
|
+
<span class="button-box no-padding" tabindex="0" data-bind="click: function(){ hideInDetail(!hideInDetail()); }, css: {active: hideInDetail()==true}">
|
|
1314
|
+
<span class="fa fa-eye-slash" aria-hidden="true" title="Hide in Details"></span>
|
|
1315
|
+
</span>
|
|
1316
|
+
</div>
|
|
1317
|
+
<div class="pull-right" style="padding-right: 15px;" data-bind="visible: $parent.isFieldValidForYAxis($index(), fieldType, selectedAggregate()) && $parent.isChart() && $index()>0">
|
|
1318
|
+
<span class="button-box no-padding" tabindex="0" data-bind="click: function(){ groupInGraph(!groupInGraph()); }, css: {active: groupInGraph()==false}">
|
|
1319
|
+
<span class="fa fa-line-chart" aria-hidden="true" title="Include in series"></span>
|
|
1320
|
+
</span>
|
|
1321
|
+
</div>
|
|
1322
|
+
<div class="pull-right" style="padding-right: 15px;" data-bind="visible: $parent.IncludeSubTotal() && (['Int', 'Double', 'Money', 'Decimal', 'Currency'].indexOf(fieldType) >= 0 || ['Int', 'Double', 'Money', 'Decimal', 'Currency'].indexOf(fieldFormat()) >= 0)">
|
|
1323
|
+
<span class="button-box no-padding" tabindex="0" data-bind="click: function(){ dontSubTotal(!dontSubTotal()); }, css: {active: dontSubTotal()==true}">
|
|
1324
|
+
<span class="fa fa-plus-circle" aria-hidden="true" title="Don't add to Total row"></span>
|
|
1325
|
+
</span>
|
|
1326
|
+
</div>
|
|
1327
|
+
<div class="pull-right" style="padding-right: 15px;" data-bind="visible: $parent.ReportType()!='Pivot'">
|
|
1328
|
+
<span class="button-box no-padding" tabindex="0" data-bind="click: setupLinkField, css: {active: linkField()==true}">
|
|
1329
|
+
<span class="fa fa-link" aria-hidden="true" title="Link to another Report or Url"></span>
|
|
1330
|
+
</span>
|
|
1331
|
+
</div>
|
|
1332
|
+
<div class="pull-right" style="padding-right: 15px;">
|
|
1333
|
+
<span class="button-box no-padding" tabindex="0" data-bind="click: setupFieldOptions">
|
|
1334
|
+
<span class="fa fa-gear" aria-hidden="true" title="More Options"></span>
|
|
1335
|
+
</span>
|
|
1336
|
+
</div>
|
|
1337
|
+
<div class="pull-right" style="padding-right: 15px;" data-bind="if: isFormulaField">
|
|
1338
|
+
<span class="button-box no-padding" tabindex="0" data-bind="click: editFormulaField">
|
|
1339
|
+
<span class="fa fa-pencil" aria-hidden="true" title="Edit Formula Field"></span>
|
|
1340
|
+
</span>
|
|
1341
|
+
</div>
|
|
1342
|
+
</div>
|
|
1343
|
+
</div>
|
|
1344
|
+
</li>
|
|
1345
|
+
</ul>
|
|
1346
|
+
</div>
|
|
1347
|
+
</div>
|
|
1348
|
+
</div>
|
|
1349
|
+
<br />
|
|
1350
|
+
<div class="card card-body">
|
|
1351
|
+
<h5><span class="fa fa-filter"></span> Choose filters</h5>
|
|
1352
|
+
|
|
1353
|
+
<div class="row" style="padding: 10px 10px; overflow-x: auto;">
|
|
1354
|
+
<div data-bind="if: useStoredProc" class="col-md-12">
|
|
1355
|
+
<div data-bind="template: {name: 'filter-parameters'}"></div>
|
|
1356
|
+
</div>
|
|
1357
|
+
<div data-bind="ifnot: useStoredProc" class="col-md-12">
|
|
1358
|
+
<div data-bind="template: {name: 'filter-group'}"></div>
|
|
1359
|
+
</div>
|
|
1360
|
+
|
|
1361
|
+
<div class="checkbox col-12">
|
|
1362
|
+
<label>
|
|
1363
|
+
<input type="checkbox" data-bind="checked: EditFiltersOnReport" />
|
|
1364
|
+
Allow setting up and saving filters on Report
|
|
1365
|
+
</label>
|
|
1366
|
+
</div>
|
|
1367
|
+
<br />
|
|
1368
|
+
</div>
|
|
1369
|
+
</div>
|
|
1370
|
+
<br />
|
|
1371
|
+
<div data-bind="visible: SaveReport" class="card card-body">
|
|
1372
|
+
<h5><span class="fa fa-hourglass"></span> Choose Schedule</h5>
|
|
1373
|
+
|
|
1374
|
+
<div style="padding: 10px 10px" data-bind="if: SaveReport">
|
|
1375
|
+
<div data-bind="template: {name: 'report-schedule'}"></div>
|
|
1376
|
+
</div>
|
|
1377
|
+
</div>
|
|
1378
|
+
<br />
|
|
1379
|
+
<div class="card card-body">
|
|
1380
|
+
<div class="form-group row" data-bind="if: SaveReport">
|
|
1381
|
+
<label class="col-sm-2 control-label">Report Name</label>
|
|
1382
|
+
<div class="col-sm-10">
|
|
1383
|
+
<input type="text" style="width: 100%;" class="form-control" required placeholder="Report Name" data-bind="value: ReportName">
|
|
1384
|
+
</div>
|
|
1385
|
+
</div>
|
|
1386
|
+
<div class="form-group row">
|
|
1387
|
+
<label class="col-sm-2 control-label">Report Description</label>
|
|
1388
|
+
<div class="col-sm-10">
|
|
1389
|
+
<textarea class="form-control" style="width: 100%;" rows="3" placeholder="Optional Report Description" data-bind="value: ReportDescription"></textarea>
|
|
1390
|
+
</div>
|
|
1391
|
+
</div>
|
|
1392
|
+
<div data-bind="ifnot: useStoredProc">
|
|
1393
|
+
<div class="form-group row">
|
|
1394
|
+
<label class="col-sm-2 control-label">Sort By</label>
|
|
1395
|
+
<div class="col-sm-6">
|
|
1396
|
+
<select class="form-control" required data-bind="options: SelectedFields, optionsText: 'selectedFieldName', optionsValue: 'fieldId', value: SortByField"></select>
|
|
1397
|
+
</div>
|
|
1398
|
+
<div class="col-sm-2">
|
|
1399
|
+
<button class="btn btn-sm btn-secondary" data-bind="text: !SortDesc() ? '▲ Sort Ascending' : 'Sort Descending ▼', click: function() { SortDesc(!SortDesc()); return false; }"></button>
|
|
1400
|
+
</div>
|
|
1401
|
+
<div class="col-sm-2">
|
|
1402
|
+
<button class="btn btn-sm btn-secondary" data-bind="click: addSortField">Add Sort Field</button>
|
|
1403
|
+
</div>
|
|
1404
|
+
</div>
|
|
1405
|
+
<div data-bind="foreach: SortFields">
|
|
1406
|
+
<div class="form-group row">
|
|
1407
|
+
<label class="col-sm-2 control-label"> Then Sort By</label>
|
|
1408
|
+
<div class="col-sm-4">
|
|
1409
|
+
<select class="form-control" required data-bind="options: $parent.SelectedFields, optionsText: 'selectedFieldName', optionsValue: 'fieldId', value: sortByFieldId"></select>
|
|
1410
|
+
</div>
|
|
1411
|
+
<div class="col-sm-2">
|
|
1412
|
+
<button class="btn btn-sm btn-secondary" data-bind="click: remove">Remove Sort Field</button>
|
|
1413
|
+
</div>
|
|
1414
|
+
<div class="col-sm-2">
|
|
1415
|
+
<button class="btn btn-sm btn-secondary" data-bind="text: !sortDesc() ? '▲ Sort Ascending' : 'Sort Descending ▼', click: function() { sortDesc(!sortDesc()); return false; }"></button>
|
|
1416
|
+
</div>
|
|
1417
|
+
<div class="col-sm-2">
|
|
1418
|
+
<button class="btn btn-sm btn-secondary" data-bind="click: $parent.addSortField">Add Sort Field</button>
|
|
1419
|
+
</div>
|
|
1420
|
+
</div>
|
|
1421
|
+
</div>
|
|
1422
|
+
</div>
|
|
1423
|
+
|
|
1424
|
+
<div class="checkbox" data-bind="visible: isChart">
|
|
1425
|
+
<label>
|
|
1426
|
+
<input type="checkbox" data-bind="checked: ShowDataWithGraph" />
|
|
1427
|
+
Show Data along with Graph
|
|
1428
|
+
</label>
|
|
1429
|
+
</div>
|
|
1430
|
+
<div class="checkbox" data-bind="visible: CanSaveReports()">
|
|
1431
|
+
<label>
|
|
1432
|
+
<input type="checkbox" data-bind="checked: SaveReport">
|
|
1433
|
+
Save Report
|
|
1434
|
+
</label>
|
|
1435
|
+
</div>
|
|
1436
|
+
<div class="form-group row" data-bind="visible: SaveReport">
|
|
1437
|
+
<label class="col-sm-2 control-label">Choose Folder</label>
|
|
1438
|
+
<div class="col-sm-10">
|
|
1439
|
+
<select class="form-control" style="width: 100%;" data-bind="options: Folders, optionsText: 'FolderName', optionsValue: 'Id', value: FolderID"></select>
|
|
1440
|
+
</div>
|
|
1441
|
+
</div>
|
|
1442
|
+
</div>
|
|
1443
|
+
<br />
|
|
1444
|
+
<div data-bind="ifnot: useStoredProc" class="card card-body">
|
|
1445
|
+
<div class="row">
|
|
1446
|
+
<div class="col-md-6">
|
|
1447
|
+
<h5><span class="fa fa-gear"></span> Other Settings</h5>
|
|
1448
|
+
<div class="checkbox" data-bind="visible: ReportType()!='Pivot'">
|
|
1449
|
+
<label>
|
|
1450
|
+
<input type="checkbox" data-bind="checked: IncludeSubTotal" />
|
|
1451
|
+
Include Total Row
|
|
1452
|
+
</label>
|
|
1453
|
+
</div>
|
|
1454
|
+
<div class="checkbox" data-bind="hidden: AggregateReport">
|
|
1455
|
+
<label>
|
|
1456
|
+
<input type="checkbox" data-bind="checked: ShowUniqueRecords" />
|
|
1457
|
+
Show only Unique Records
|
|
1458
|
+
</label>
|
|
1459
|
+
</div>
|
|
1460
|
+
<div class="checkbox" data-bind="visible: ReportType()!='List'">
|
|
1461
|
+
<label>
|
|
1462
|
+
<input type="checkbox" data-bind="checked: ShowExpandOption" />
|
|
1463
|
+
Don't Show Expand Option
|
|
1464
|
+
</label>
|
|
1465
|
+
</div>
|
|
1466
|
+
<div class="checkbox">
|
|
1467
|
+
<label>
|
|
1468
|
+
<input type="checkbox" data-bind="checked: DontExecuteOnRun" />
|
|
1469
|
+
Wait to Select Filters before Running Report
|
|
1470
|
+
</label>
|
|
1471
|
+
</div>
|
|
1472
|
+
<div class="form-group row">
|
|
1473
|
+
<div class="checkbox col-md-4">
|
|
1474
|
+
<label>
|
|
1475
|
+
<input type="checkbox" data-bind="checked: maxRecords" />
|
|
1476
|
+
Max Records
|
|
1477
|
+
</label>
|
|
1478
|
+
</div>
|
|
1479
|
+
<div class="col-md-6" data-bind="if: maxRecords">
|
|
1480
|
+
<input type="number" style="width: 150px;" class="form-control" required placeholder="Only top n..." data-bind="value: OnlyTop, visible: maxRecords">
|
|
1481
|
+
</div>
|
|
1482
|
+
</div>
|
|
1483
|
+
</div>
|
|
1484
|
+
<div class="col-md-6">
|
|
1485
|
+
<h5><span class="fa fa-paint-brush"></span> Pick Report Format</h5>
|
|
1486
|
+
<div>
|
|
1487
|
+
<!-- ko foreach: tableStyles -->
|
|
1488
|
+
<div class="dropdown-option" data-bind="title: $data.name, click: $parent.selectStyle, css: {'dropdown-option-selected': $parent.selectedStyle() == $data.colorscheme}">
|
|
1489
|
+
<div class="mini-table-preview" data-bind="foreach: new Array(5)">
|
|
1490
|
+
<div class="mini-table-row" data-bind="foreach: new Array(5)">
|
|
1491
|
+
<div class="mini-table-cell" data-bind="style: { backgroundColor: $parentContext.$index() === 0 ? $parents[1].headerBg : ($parentContext.$index() % 2 === 0 ? $parents[1].altRowBg : $parents[1].rowBg), color: $parents[1].textColor }"></div>
|
|
1492
|
+
|
|
1493
|
+
</div>
|
|
1494
|
+
</div>
|
|
1495
|
+
</div>
|
|
1496
|
+
<!-- /ko -->
|
|
1497
|
+
</div>
|
|
1498
|
+
</div>
|
|
1499
|
+
</div>
|
|
1500
|
+
</div>
|
|
1501
|
+
<br />
|
|
1502
|
+
<div data-bind="visible: adminMode" class="card card-body">
|
|
1503
|
+
<div data-bind="template: {name: 'manage-access-template'}"></div>
|
|
1504
|
+
</div>
|
|
1505
|
+
</div>
|
|
1506
|
+
<div class="modal-footer">
|
|
1507
|
+
<a href="#" class="btn btn-danger" data-bind="click: cancelCreateReport">Cancel editing Report</a>
|
|
1508
|
+
<button class="btn btn-primary" type="button" data-bind="visible: SaveReport() && CanSaveReports(), click: SaveWithoutRun" style="padding-right: 10px;">Save Report</button>
|
|
1509
|
+
<button class="btn btn-primary" type="button" data-bind="text: SaveReport() && CanSaveReports()? 'Save & Run Report': 'Run Report', click: RunReport">Run Report</button>
|
|
1510
|
+
</div>
|
|
1511
|
+
</div>
|
|
1512
|
+
</div>
|
|
1513
|
+
</script>
|
|
1514
|
+
|
|
1515
|
+
<div class="modal" id="drilldownModal" tabindex="-1" role="dialog" aria-hidden="true">
|
|
1516
|
+
<div class="modal-dialog modal-lg">
|
|
1517
|
+
<div class="modal-content" data-bind="with: ChartDrillDownData">
|
|
1518
|
+
<div class="modal-header">
|
|
1519
|
+
<h4 class="modal-title">Drilldown Data</h4>
|
|
1520
|
+
<button type="button" class="close pull-right" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
|
|
1521
|
+
</div>
|
|
1522
|
+
<!-- ko if: DrillDownData -->
|
|
1523
|
+
<div class="modal-body">
|
|
1524
|
+
<table class="table table-striped table-hover table-condensed" data-bind="with: DrillDownData, attr: {class: 'table table-striped table-hover table-condensed ' + $parent.selectedStyle()}">
|
|
1525
|
+
<thead>
|
|
1526
|
+
<tr class="no-highlight">
|
|
1527
|
+
<!-- ko foreach: Columns -->
|
|
1528
|
+
<th data-bind="attr: { id: fieldId }, css: {'right-align': IsNumeric}, style: {'width': fieldWidth, 'background-color': headerBackColor }, hidden: outerGroup" style="border-right: 1px solid;">
|
|
1529
|
+
<span data-bind="text: fieldLabel() ? fieldLabel() : fieldName, style: {'color': headerFontColor, 'font-weight': headerFontBold() ? 'bold' : 'normal'}"></span>
|
|
1530
|
+
|
|
1531
|
+
</th>
|
|
1532
|
+
<!-- /ko -->
|
|
1533
|
+
</tr>
|
|
1534
|
+
</thead>
|
|
1535
|
+
<tbody>
|
|
1536
|
+
<tr style="display: none;" data-bind="visible: Rows && Rows.length < 1">
|
|
1537
|
+
<td class="text-info" data-bind="attr:{colspan: Columns.length}">
|
|
1538
|
+
No records found
|
|
1539
|
+
</td>
|
|
1540
|
+
</tr>
|
|
1541
|
+
<!-- ko foreach: Rows -->
|
|
1542
|
+
<tr>
|
|
1543
|
+
<!-- ko foreach: Items -->
|
|
1544
|
+
<td data-bind="hidden: outerGroup, style: {'background-color': backColor, 'color': fontColor, 'font-weight': fontBold() ? 'bold' : 'normal' }">
|
|
1545
|
+
<div data-bind="style: {'width': fieldWidth }">
|
|
1546
|
+
<!-- ko if: LinkTo-->
|
|
1547
|
+
<a data-bind="attr: {href: LinkTo}" target="_blank"><span data-bind="html: formattedVal"></span></a>
|
|
1548
|
+
<!-- /ko-->
|
|
1549
|
+
<!-- ko ifnot: LinkTo-->
|
|
1550
|
+
<span data-bind="html: formattedVal"></span>
|
|
1551
|
+
<!-- /ko-->
|
|
1552
|
+
</div>
|
|
1553
|
+
</td>
|
|
1554
|
+
<!-- /ko-->
|
|
1555
|
+
</tr>
|
|
1556
|
+
<!-- /ko -->
|
|
1557
|
+
</tbody>
|
|
1558
|
+
</table>
|
|
1559
|
+
</div>
|
|
1560
|
+
<div class="modal-footer">
|
|
1561
|
+
<div class="col-xs-12 col-centered" data-bind="with: pager">
|
|
1562
|
+
<div class="form-inline small text-muted">
|
|
1563
|
+
<div class="pull-left total-records" data-bind="visible: pages()">
|
|
1564
|
+
<span data-bind="text: 'Total Records: ' + totalRecords()"></span>
|
|
1565
|
+
</div>
|
|
1566
|
+
<div class="pull-left">
|
|
1567
|
+
<button class="btn btn-xs" title="Download Excel" data-bind="click: $parent.exportExcel"><span class="fa fa-file-excel-o"></span></button>
|
|
1568
|
+
</div>
|
|
1569
|
+
<div class="form-group pull-right" data-bind="visible: pages()">
|
|
1570
|
+
<div data-bind="template: 'pager-template', data: $data"></div>
|
|
1571
|
+
</div>
|
|
1572
|
+
</div>
|
|
1573
|
+
</div>
|
|
1574
|
+
</div>
|
|
1575
|
+
<!-- /ko -->
|
|
1576
|
+
</div>
|
|
1577
|
+
</div>
|
|
1578
|
+
</div>
|
|
1579
|
+
|
|
1580
|
+
<div class="modal" id="noaccountModal" tabindex="-1" role="dialog" aria-hidden="true">
|
|
1581
|
+
<div class="modal-dialog">
|
|
1582
|
+
<div class="modal-content">
|
|
1583
|
+
<div class="modal-header">
|
|
1584
|
+
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
|
|
1585
|
+
<h4 class="modal-title">Account not Setup</h4>
|
|
1586
|
+
</div>
|
|
1587
|
+
<div class="modal-body">
|
|
1588
|
+
<p class="alert alert-danger">dotnet Report Account Configuration missing!</p>
|
|
1589
|
+
<p>You do not have the neccessary initial configuration completed to use dotnet Report.</p>
|
|
1590
|
+
<p>Please view the <a href="https://dotnetreport.com/blogs/getting-started-with-dotnet-report/" target="_blank">Getting Started Guide</a> to correctly configure dotnet Report.</p>
|
|
1591
|
+
</div>
|
|
1592
|
+
<div class="modal-footer">
|
|
1593
|
+
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
|
|
1594
|
+
</div>
|
|
1595
|
+
</div>
|
|
1596
|
+
</div>
|
|
1597
|
+
</div>
|
|
1419
1598
|
`);
|
|
1420
1599
|
this.cdref.detectChanges();
|
|
1421
1600
|
}
|
|
1422
1601
|
}
|
|
1423
1602
|
DotnetsetupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DotnetsetupComponent, deps: [{ token: i0.Injector }, { token: i1.DomSanitizer }, { token: i0.ChangeDetectorRef }, { token: BASE_URL_TOKEN }, { token: i2.HttpClient }, { token: i3.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
|
|
1424
|
-
DotnetsetupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: DotnetsetupComponent, selector: "app-dotnetsetup", ngImport: i0, template: "<div id=\"dot-net-report\" class=\"body-content\">\r\n <div>\r\n <h2>Manage Database</h2>\r\n <p>\r\n You can select and manage display names for the Tables and Columns you would like to allow in .Net Report Builder.\r\n </p>\r\n <div class=\"alert alert-danger\">\r\n Do not expose this Setup Tool to end users who should not have access to it. Ideally, only Developers should be given access to this utility.\r\n </div>\r\n <div data-bind=\"visible: false;\">\r\n Loading...\r\n </div>\r\n <div class=\"form-row\" style=\"display: none;\" data-bind=\"visible: true\">\r\n <div class=\"form-group\">\r\n <div class=\"control-group\">\r\n <select class=\"form-control\" data-bind=\"options: DataConnections, optionsText: 'DataConnectName', optionsValue: 'DataConnectGuid', value: currentConnectionKey\"></select>\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"click: switchConnection, visible: canSwitchConnection\">Switch Connection</button>\r\n <button class=\"btn btn-primary btn-sm\" data-toggle=\"modal\" data-target=\"#add-connection-modal\">Add New Connection</button>\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"click: exportAll\">Export Connection</button>\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"click: importStart\">Import Connection</button>\r\n </div>\r\n <div data-bind=\"visible: importingFile\">\r\n <br />\r\n <div class=\"alert alert-info\">\r\n Please select a file you have previously exported from this utility. The system will load the screen with the Data Connection setting in the file, however, it will <b>NOT</b> be saved until you press the Save All button or Save individual tables\r\n <br />\r\n <div class=\"input-group\">\r\n <input type=\"file\" accept=\".json\" id=\"import-file\" data-bind=\"event: { change: function() { importFile($element.files[0]) } }\" />\r\n <span class=\"input-group-btn\">\r\n <button class=\"btn btn-link\" data-bind=\"click: importCancel\">Cancel</button>\r\n </span>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <br />\r\n <div>\r\n <!-- Nav tabs -->\r\n <ul class=\"nav nav-tabs\" role=\"tablist\">\r\n <li role=\"presentation\" class=\"nav-item\"><a class=\"nav-link active\" href=\"#tablesfields\" aria-controls=\"home\" role=\"tab\" data-toggle=\"tab\" data-bind=\"click: function() { customTableMode(false); }\">Tables and Fields</a></li>\r\n <li role=\"presentation\" class=\"nav-item\"><a class=\"nav-link\" href=\"#tablesfields\" aria-controls=\"custom\" role=\"tab\" data-toggle=\"tab\" data-bind=\"click: function() { customTableMode(true); }\">Custom Data Views</a></li>\r\n <li role=\"presentation\" class=\"nav-item\"><a class=\"nav-link\" href=\"#relations\" aria-controls=\"profile\" role=\"tab\" data-toggle=\"tab\">Relations</a></li>\r\n <li role=\"presentation\" class=\"nav-item\"><a class=\"nav-link\" href=\"#procedure\" aria-controls=\"procedure\" role=\"tab\" data-toggle=\"tab\">Stored Procs</a></li>\r\n <li role=\"presentation\" class=\"nav-item\"><a class=\"nav-link\" href=\"#manageaccess\" aria-controls=\"manageaccess\" role=\"tab\" data-toggle=\"tab\">Manage Reports Access</a></li>\r\n </ul>\r\n </div>\r\n <br />\r\n </div>\r\n <!-- Tab panes -->\r\n <div class=\"fix-content\" style=\"display: none;\" data-bind=\"visible: true\">\r\n <div class=\"tab-content\">\r\n <div role=\"tabpanel\" class=\"tab-pane active\" id=\"tablesfields\">\r\n <div data-bind=\"with: Tables\">\r\n <input type=\"text\" class=\"form-control input-sm\" placeholder=\"Filter Tables for...\" data-bind=\"value: tableFilter, valueUpdate: 'afterkeydown'\" style=\"float: left; width: 140px;\">\r\n <button class=\"btn btn-sm\" data-bind=\"click: clearTableFilter, visible: tableFilter()!='' && tableFilter()!=null\"><span class=\"fa fa-remove\"></span></button>\r\n <button class=\"btn btn-sm\" onclick=\"openall()\" style=\"margin-left: 15px;\">Open all</button>\r\n <button class=\"btn btn-sm\" onclick=\"closeall()\">Close all</button>\r\n <button class=\"btn btn-sm\" data-bind=\"click: selectAll, hidden: $root.customTableMode\">Select all</button>\r\n <button class=\"btn btn-sm\" data-bind=\"click: unselectAll, hidden: $root.customTableMode\">Unselect all</button>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: $root.customSql.addNewCustomSqlTable, visible: $root.customTableMode\">Add New Custom Table</button>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: $root.saveChanges, hidden: $root.customTableMode\">Save All Changes</button>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n <hr />\r\n <div class=\"row\">\r\n <div class=\"form-group form-inline col-md-4\" data-bind=\"with: pager\">\r\n <div data-bind=\"template: 'pager-template', data: $data\"></div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div>\r\n <span data-bind=\"text: Tables.model().length\"></span> Tables/Views read from database.\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"menu row\" style=\"margin-left: 20px;\" data-bind=\"foreach: pagedTables\">\r\n <div class=\"menu-category card\">\r\n\r\n <div class=\"card-header clearfix\" style=\"\">\r\n <div class=\"checkbox pull-left\">\r\n <label>\r\n <input type=\"checkbox\" data-bind=\"checked: Selected\">\r\n <span data-bind=\"text: TableName\"></span>\r\n <span data-bind=\"visible: IsView\" class=\"label-sm\">(view)</span>\r\n </label>\r\n <button class=\"btn btn-sm\" title=\"Save this Table\" data-bind=\"click: function(){$data.saveTable($root.keys.AccountApiKey, $root.keys.DatabaseApiKey);}\"><i class=\"fa fa-floppy-o\"></i></button>\r\n <button class=\"btn btn-sm\" title=\"Manage Role Access\" data-toggle=\"modal\" data-target=\"#role-access-modal\" data-bind=\"click: $root.selectAllowedRoles\">\r\n <i class=\"fa fa-user\"></i>\r\n </button>\r\n </div>\r\n <a class=\"pull-right\" data-toggle=\"collapse\" data-bind=\"attr: {'data-target': '#table'+$index()}\">\r\n <span class=\"fa fa-chevron-down\"></span>\r\n </a>\r\n </div>\r\n <div data-bind=\"attr: {id: 'table'+$index()}\" class=\"panel-collapse collapse in\">\r\n <div class=\"card-body\">\r\n <p>\r\n <label class=\"label-sm\">Display Name</label><br />\r\n <span data-bind=\"editable: DisplayName\"></span>\r\n </p>\r\n <p>\r\n <label class=\"label-sm\">Schema Name</label><br />\r\n <span data-bind=\"editable: SchemaName\"></span>\r\n </p>\r\n <p>\r\n <label class=\"label-sm\">Account Id Field</label><br />\r\n <span data-bind=\"editable: AccountIdField\"></span>\r\n </p>\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" type=\"checkbox\" value=\"true\" data-bind=\"checked: DoNotDisplay\" title=\"Do not display this table for selecting in reports\"> Do Not Display\r\n </label>\r\n </div>\r\n <div data-bind=\"if: CustomTable\">\r\n <button data-bind=\"click: $root.customSql.viewCustomSql.bind($data)\" class=\"btn btn-sm btn-secondary\">View Custom Sql</button>\r\n </div>\r\n </div>\r\n\r\n <label style=\"padding-left: 15px;\" class=\"label-sm\"><span data-bind=\"text: Columns().length\"></span> Columns</label>\r\n <button class=\"btn btn-sm btn-link label-sm\" data-bind=\"click: autoFormat, visible: Selected\">Auto Format</button>\r\n <button class=\"btn btn-sm btn-link label-sm\" data-bind=\"click: unselectAllColumns, visible: Selected\">Unselect All</button>\r\n <button class=\"btn btn-sm btn-link label-sm\" data-bind=\"click: selectAllColumns, visible: Selected\">Select All</button>\r\n <div class=\"list-group\" data-bind=\"sortable: { data: Columns, options: { handle: '.sortable', cursor: 'move' }, afterMove: $parent.columnSorted }\">\r\n <div class=\"list-group-item\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input type=\"checkbox\" data-bind=\"checked: Selected, enable: $parent.Selected()\">\r\n <span data-bind=\"editable: DisplayName, attr: {title: 'DB field is ' + ColumnName()}\"></span>\r\n <label data-bind=\"visible: PrimaryKey\" class=\"badge badge-primary\">Primary</label>\r\n <label data-bind=\"visible: ForeignKey\" class=\"badge badge-info\">Foreign</label>\r\n </label>\r\n <button class=\"btn btn-sm pull-right\" data-toggle=\"modal\" data-target=\"#column-modal\" title=\"All column options\" data-bind=\"click: $root.selectColumn.bind($data, false)\">...</button>\r\n\r\n <div class=\"btn btn-sm pull-right sortable\">\r\n <span class=\"fa fa-arrows\" aria-hidden=\"true\" title=\"Drag to reorder\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div role=\"tabpanel\" class=\"tab-pane\" id=\"relations\">\r\n\r\n <br />\r\n <form id=\"form-joins\">\r\n\r\n <p>\r\n Setup your Database Relations\r\n <span data-toggle=\"tooltip\" data-placement=\"right\" title=\"Report Builder also needs to know the Data Table Relations in order to Generate Reports. You have to specify it here.\" class=\"fa fa-question-circle helptip\"></span>\r\n </p>\r\n\r\n <table class=\"table\">\r\n <thead data-bind=\"with: JoinFilters\">\r\n <tr>\r\n <th>\r\n Primary Table\r\n <div class=\"input-group input-group-sm\">\r\n <input type=\"text\" class=\"form-control input-sm\" data-bind=\"value: primaryTable, valueUpdate: 'afterkeydown'\" placeholder=\"Search...\">\r\n <span class=\"input-group-addon\"><i class=\"fa fa-filter\"></i></span>\r\n </div>\r\n </th>\r\n <th>\r\n Field\r\n <div class=\"input-group input-group-sm\">\r\n\r\n <input type=\"text\" class=\"form-control input-sm\" data-bind=\"value: primaryField, valueUpdate: 'afterkeydown'\" placeholder=\"Search...\">\r\n <span class=\"input-group-addon\"><i class=\"fa fa-filter\"></i></span>\r\n </div>\r\n </th>\r\n <th>\r\n Join Type\r\n <div class=\"input-group input-group-sm\">\r\n\r\n <input type=\"text\" class=\"form-control input-sm\" data-bind=\"value: joinType, valueUpdate: 'afterkeydown'\" placeholder=\"Search...\">\r\n <span class=\"input-group-addon\"><i class=\"fa fa-filter\"></i></span>\r\n </div>\r\n </th>\r\n <th>\r\n Join Table\r\n <div class=\"input-group input-group-sm\">\r\n\r\n <input type=\"text\" class=\"form-control input-sm\" data-bind=\"value: joinTable, valueUpdate: 'afterkeydown'\" placeholder=\"Search...\">\r\n <span class=\"input-group-addon\"><i class=\"fa fa-filter\"></i></span>\r\n </div>\r\n </th>\r\n <th>\r\n Field<div class=\"input-group input-group-sm\">\r\n\r\n <input type=\"text\" class=\"form-control input-sm\" data-bind=\"value: joinField, valueUpdate: 'afterkeydown'\" placeholder=\"Search...\">\r\n <span class=\"input-group-addon\"><i class=\"fa fa-filter\"></i></span>\r\n </div>\r\n </th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody data-bind=\"foreach: filteredJoins\">\r\n <tr>\r\n <td>\r\n <select class=\"form-control input-medium\" data-bind=\"options: $root.Tables.availableTables, optionsText: 'DisplayName', value: JoinTable\"></select>\r\n </td>\r\n <td data-bind=\"with: JoinTable\">\r\n <select class=\"form-control\" data-bind=\"options: availableColumns, optionsText: 'DisplayName', optionsValue: 'ColumnName', value: $parent.FieldName\"></select>\r\n </td>\r\n <td>\r\n <select class=\"form-control input-small\" data-bind=\"options: $root.JoinTypes, value: JoinType\"></select>\r\n </td>\r\n <td>\r\n <select class=\"form-control input-medium\" data-bind=\"options: OtherTables, optionsText: 'DisplayName', value: OtherTable\"></select>\r\n </td>\r\n\r\n <td data-bind=\"with: OtherTable\">\r\n <select class=\"form-control\" data-bind=\"options: availableColumns, optionsText: 'DisplayName', optionsValue: 'ColumnName', value: $parent.JoinFieldName\"></select>\r\n </td>\r\n <td>\r\n <button class=\"btn btn-secondary\" data-bind=\"click: DeleteJoin\">Delete</button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <button class=\"btn btn-primary\" data-bind=\"click: AddJoin\">Add new Join</button> \r\n <button class=\"btn btn-primary\" data-bind=\"click: SaveJoins\">Save Joins</button>\r\n </form>\r\n\r\n </div>\r\n <div id=\"procedure\" class=\"tab-pane\">\r\n <button class=\"btn btn-primary\" data-toggle=\"modal\" data-target=\"#procedure-modal\">Add Stored Procs from database</button>\r\n <br />\r\n <br />\r\n <div data-bind=\"if: Procedures.savedProcedures().length == 0\">\r\n No Stored Procedures have been setup yet.\r\n </div> \r\n <div class=\"menu row\" data-bind=\"foreach: Procedures.savedProcedures\" style=\"margin-left: 20px;\">\r\n <div class=\"menu-category card\">\r\n\r\n <div class=\"card-header clearfix\" style=\"\">\r\n <div class=\"pull-left\">\r\n <label>\r\n <span data-bind=\"text: TableName\"></span>\r\n <span class=\"label-xs\">Procedure</span>\r\n </label>\r\n\r\n <button class=\"btn btn-sm\" title=\"Save this Procedure\" data-bind=\"click: function(){$root.saveProcedure($data.TableName, false);}\">\r\n <span class=\"fa fa-save\"></span>\r\n </button>\r\n <button class=\"btn btn-sm\" title=\"Manage Role Access\" data-toggle=\"modal\" data-target=\"#role-access-modal\" data-bind=\"click: $root.selectAllowedRoles\">\r\n <i class=\"fa fa-user\"></i>\r\n </button>\r\n <button class=\"btn btn-sm\" title=\"Delete this Procedure\" data-bind=\"click: function(){$data.deleteTable($root.keys.AccountApiKey, $root.keys.DatabaseApiKey);}\">\r\n <span class=\"fa fa-trash\"></span>\r\n </button>\r\n\r\n </div>\r\n <a class=\"pull-right\" data-toggle=\"collapse\" data-bind=\"attr: {'data-target': '#table'+$index()}\">\r\n <span class=\"fa fa-chevron-down\"></span>\r\n </a>\r\n </div>\r\n <div data-bind=\"attr: {id: 'table'+$index()}\" class=\"panel-collapse collapse in\">\r\n <div class=\"card-body\">\r\n <p>\r\n <label class=\"label-sm\">Display Name</label><br />\r\n <span data-bind=\"editable: DisplayName\"></span>\r\n </p>\r\n <p>\r\n <label class=\"label-sm\">Schema Name</label><br />\r\n <span data-bind=\"editable: SchemaName\"></span>\r\n </p>\r\n <label class=\"small\">Columns</label>\r\n\r\n <div class=\"list-group\" data-bind=\"foreach: Columns\">\r\n <div class=\"list-group-item\">\r\n <label>\r\n <span data-bind=\"editable: DisplayName, attr: {title: 'DB field is ' + ColumnName()}\"></span>\r\n <span class=\"badge badge-info\" data-bind=\"text: FieldType\"></span>\r\n </label>\r\n <button class=\"btn btn-sm pull-right\" data-toggle=\"modal\" data-target=\"#column-modal\" title=\"All column options\" data-bind=\"click: $root.selectColumn.bind($data, true)\">...</button>\r\n\r\n </div>\r\n </div>\r\n <label class=\"small\">Parameters</label>\r\n\r\n <div class=\"list-group\" data-bind=\"foreach: Parameters\">\r\n <div class=\"list-group-item\">\r\n <label>\r\n <span data-bind=\"editable: DisplayName, attr: {title: 'DB field is ' + ParameterName()}\"></span>\r\n <span class=\"badge badge-info\" data-bind=\"text: ParameterDataTypeString\"></span>\r\n \r\n \r\n <button class=\"btn btn-sm btn-primary pull-right\" data-toggle=\"modal\" data-target=\"#parameter-modal\" title=\"All Parameter options\" data-bind=\"click: $root.editParameter\">...</button>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div id=\"manageaccess\" class=\"tab-pane\">\r\n <div data-bind=\"foreach: reportsAndFolders\" class=\"card\" style=\"margin-left: 20px;\">\r\n <div class=\"card-body\">\r\n <a class=\"btn btn-link\" role=\"button\" data-toggle=\"collapse\" data-bind=\"attr: {href: '#folder-' + folderId }\">\r\n <i class=\"fa fa-folder\"></i> <span data-bind=\"text: folder\"></span>\r\n </a>\r\n <div class=\"collapse\" data-bind=\"attr: {id: 'folder-' + folderId }\">\r\n <div data-bind=\"if: reports.length == 0\">\r\n No Reports found in this folder\r\n </div>\r\n <ul class=\"list-group\" data-bind=\"foreach: reports\">\r\n <li class=\"list-group-item\">\r\n <div class=\"row\">\r\n <div class=\"col-md-3\">\r\n <div>\r\n <label class=\"list-group-item-heading\">\r\n <span class=\"fa\" data-bind=\"css: {'fa-file': reportType=='List', 'fa-th-list': reportType=='Summary', 'fa-bar-chart': reportType=='Bar', 'fa-pie-chart': reportType=='Pie', 'fa-line-chart': reportType=='Line', 'fa-globe': reportType =='Map'}\" style=\"font-size: 14pt; color: #808080\"></span>\r\n <span data-bind=\"text: reportName\"></span>\r\n </label>\r\n </div>\r\n <p class=\"list-group-item-text small\" data-bind=\"text: reportDescription\"></p>\r\n\r\n <div class=\"small\" style=\"padding-top: 10px;\">\r\n <b>Current Report Access</b><br />\r\n Manage by User <span class=\"badge badge-info\" data-bind=\"text: userId ? userId : 'No User'\"></span>\r\n <br />\r\n View only by User <span class=\"badge badge-info\" data-bind=\"text: (viewOnlyUserId ? viewOnlyUserId : (userId ? userId : 'Any User'))\"></span>\r\n <br />\r\n <div data-bind=\"if: deleteOnlyUserId\">\r\n Delete only by User <span class=\"badge badge-info\" data-bind=\"text: deleteOnlyUserId\"></span>\r\n <br />\r\n </div>\r\n <div data-bind=\"if: userRole\">\r\n Manage by Role <span class=\"badge badge-info\" data-bind=\"text: userRole ? userRole : 'No Role'\"></span>\r\n <br />\r\n </div>\r\n <div data-bind=\"if: viewOnlyUserRole\">\r\n View only by Role <span class=\"badge badge-info\" data-bind=\"text: viewOnlyUserRole ? viewOnlyUserRole : 'Any Role'\"></span>\r\n <br />\r\n </div>\r\n <div data-bind=\"if: deleteOnlyUserRole\">\r\n Delete only by Role <span class=\"badge badge-info\" data-bind=\"text: deleteOnlyUserRole ? deleteOnlyUserRole : 'Same as Manage'\"></span>\r\n <br />\r\n </div>\r\n <div>\r\n For Client <span class=\"badge badge-info\" data-bind=\"text: clientId ? clientId : 'All Clients'\"></span>\r\n <br />\r\n </div>\r\n </div>\r\n <br />\r\n <br />\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: function() { changeAccess(!changeAccess())}, text: !changeAccess() ? 'Change Access': 'Cancel Changing Access', hidden: changeAccess\">Change Access</button>\r\n </div>\r\n\r\n <div data-bind=\"if: changeAccess\" class=\"col-md-9\" >\r\n <div style=\"border-left: 1px solid; padding-left: 10px;\">\r\n <div data-bind=\"template: {name: 'manage-access-template', data: $root }\"></div>\r\n <br />\r\n <br />\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: saveAccessChanges\">Save Access Changes</button>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: function() { changeAccess(!changeAccess())}, text: !changeAccess() ? 'Change Access': 'Cancel Changing Access'\">Change Access</button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Modal -->\r\n <div class=\"modal\" id=\"column-modal\" role=\"dialog\" tabindex=\"-1\">\r\n <div class=\"modal-dialog\" role=\"document\">\r\n <div class=\"modal-content\" data-bind=\"with: editColumn()\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\" id=\"myModalLabel\">\r\n Manage\r\n <label data-bind=\"text: ColumnName\"></label>\r\n </h4>\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">×</span></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <p>Choose options that will determine how users interact with this column on Reports</p>\r\n <div class=\"form-horizontal\">\r\n\r\n <ul class=\"nav nav-tabs\" role=\"tablist\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <li role=\"presentation\" class=\"nav-item\"><a class=\"nav-link active\" href=\"#column-main\" aria-controls=\"home\" role=\"tab\" data-toggle=\"tab\">Main Options</a></li>\r\n <li role=\"presentation\" class=\"nav-item\"><a class=\"nav-link\" href=\"#column-foreign\" aria-controls=\"profile\" role=\"tab\" data-toggle=\"tab\">Foreign Key Options</a></li>\r\n <li role=\"presentation\" class=\"nav-item\"><a class=\"nav-link\" href=\"#column-filter\" aria-controls=\"procedure\" role=\"tab\" data-toggle=\"tab\">Filter Options</a></li>\r\n </ul>\r\n <div class=\"tab-content\">\r\n <br />\r\n <div role=\"tabpanel\" class=\"tab-pane active\" id=\"column-main\">\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" for=\"Display_Name\" data-bind=\"attr:{placeholder:'Ex First Name'}\" placeholder=\"Ex First Name\">Display Name</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <input class=\"form-control text-box single-line\" data-val=\"true\" data-val-required=\"The DisplayName field is required.\" id=\"DisplayName\" name=\"DisplayName\" type=\"text\" value=\"First Name\" data-bind=\"value: DisplayName, attr:{placeholder:'Ex First Name'}\" placeholder=\"Ex First Name\">\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-toggle=\"tooltip\" data-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"This is a friendly name to display to your users\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" for=\"Field_Type\" data-bind=\"\">Field Type</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-control\" id=\"FieldType_SelectedId\" name=\"FieldType.SelectedId\" data-bind=\"value: FieldType\">\r\n <option value=\"Boolean\">Boolean</option>\r\n <option value=\"DateTime\">Date Time</option>\r\n <option value=\"Varchar\">Varchar</option>\r\n <option value=\"Money\">Money</option>\r\n <option value=\"Int\">Int</option>\r\n <option value=\"Double\">Double</option>\r\n <option value=\"Json\">Json</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span class=\"field-validation-valid help-inline indent\" data-valmsg-for=\"FieldType\" data-valmsg-replace=\"true\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" for=\"Primary_Key\" data-bind=\"\">Primary Key</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" data-val-required=\"The PrimaryKey field is required.\" id=\"PrimaryKey\" name=\"PrimaryKey\" type=\"checkbox\" value=\"true\" data-bind=\"checked:PrimaryKey\"><input name=\"PrimaryKey\" type=\"hidden\" value=\"false\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span class=\"field-validation-valid help-inline indent\" data-valmsg-for=\"PrimaryKey\" data-valmsg-replace=\"true\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"\">Do Not Display</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" type=\"checkbox\" value=\"true\" data-bind=\"checked:DoNotDisplay\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-toggle=\"tooltip\" data-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"If this is checked, the column will not be displayed on Report Designer, but can still be used on Global Data Filters\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"control-group\" data-bind=\"if: FieldType() == 'Json'\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">JSON Data Structure</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <textarea class=\"form-control text-box single-line\" data-val=\"true\" data-val-required=\"The DisplayName field is required.\" data-bind=\"value: JsonStructure, attr:{placeholder:'Please paste in Sample Json with all columns for this JSON data field'}\" rows=\"5\" ></textarea>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-toggle=\"tooltip\" data-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"You can paste in a sample Json blob with all the columns you want to use in this field\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div role=\"tabpanel\" class=\"tab-pane\" id=\"column-filter\">\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-4 col-sm-4 control-label\" data-bind=\"\">Require Filter if Column is selected</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" type=\"checkbox\" value=\"true\" data-bind=\"checked:ForceFilter\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2 col-sm-2\">\r\n <span data-toggle=\"tooltip\" data-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"If this is checked, the column will always require the user to pick a filtered value\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-4 col-sm-4 control-label\" data-bind=\"\">Require Filter if Table is selected</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" type=\"checkbox\" value=\"true\" data-bind=\"checked:ForceFilterForTable\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2 col-sm-2\">\r\n <span data-toggle=\"tooltip\" data-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"If this is checked, the report will always require the user to pick a filter value if user picks the column in report\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: FieldType() == 'DateTime'\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-4 col-sm-4 control-label\" data-bind=\"\">Restrict Filter Date Range</label>\r\n <div class=\"col-md-1 col-sm-1\">\r\n <input class=\"check-box\" type=\"checkbox\" data-bind=\"checked: restrictDateRangeFilter\" />\r\n </div>\r\n <div class=\"col-md-2 col-sm-2\" data-bind=\"if: restrictDateRangeFilter\">\r\n <input class=\"form-control\" type=\"number\" data-bind=\"value: restrictDateRangeNumber\" />\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\" data-bind=\"if: restrictDateRangeFilter\">\r\n <select class=\"form-control\" data-bind=\"value: restrictDateRangeValue\">\r\n <option value=\"Days\">Day(s)</option>\r\n <option value=\"Months\">Month(s)</option>\r\n <option value=\"Years\">Year(s)</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-2 col-sm-2\">\r\n <span data-toggle=\"tooltip\" data-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"If this is selected, user will not be able to pick date range larger than this selection\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div role=\"tabpanel\" class=\"tab-pane\" id=\"column-foreign\">\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" for=\"Foreign_Key\" data-bind=\"\">Foreign Key</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" data-val-required=\"The ForeignKey field is required.\" id=\"ForeignKey\" name=\"ForeignKey\" type=\"checkbox\" value=\"true\" data-bind=\"checked:ForeignKey\"><input name=\"ForeignKey\" type=\"hidden\" value=\"false\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-toggle=\"tooltip\" data-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Foreign keys allows friendly selection in Filters using a Dropdown List\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" for=\"Foreign_Table\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null, placeholder: 'Ex tblEmployees'}\" placeholder=\"Ex tblEmployees\" style=\"display: none;\">Foreign Table</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-control\" data-bind=\"value: JoinTable, visible:ForeignKey(), options: $root.Tables.model, optionsText: 'TableName'\" placeholder=\"Ex tblEmployees\" style=\"display: none;\"></select>\r\n\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span class=\"field-validation-valid help-inline indent\" data-valmsg-for=\"ForeignTable\" data-valmsg-replace=\"true\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" for=\"Foreign_Join\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null}\" style=\"display: none;\">Foreign Join</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-control\" id=\"ForeignJoin_SelectedId\" name=\"ForeignJoin.SelectedId\" data-bind=\"value: ForeignJoin, visible:ForeignKey(), attr: {required: ForeignKey()?'True':null}\" style=\"display: none;\">\r\n <option selected=\"selected\" value=\"Inner\">Inner</option>\r\n <option value=\"Left\">Left</option>\r\n <option value=\"Right\">Right</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span class=\"field-validation-valid help-inline indent\" data-valmsg-for=\"ForeignJoin\" data-valmsg-replace=\"true\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" for=\"Foreign_Key_Field\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null, placeholder: 'Ex EmployeeId'}\" placeholder=\"Ex EmployeeId\" style=\"display: none;\">Foreign Key Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-control\" id=\"ForeignKeyField\" name=\"ForeignKeyField\" data-bind=\"options: JoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignKeyField, visible:ForeignKey(), attr: {required: ForeignKey()?'True':null}\" placeholder=\"Ex EmployeeId\" style=\"display: none;\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bind=\"visible:ForeignKey()\" data-toggle=\"tooltip\" data-placement=\"right\" class=\"fa fa-question-circle helptip\" style=\"display: none;\" title=\"Foreign Key field is a Column from the Foreign table which is used as the Key field\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" for=\"Foreign_Value_Field\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null, placeholder: 'Ex EmployeeName'}\" placeholder=\"Ex EmployeeName\" style=\"display: none;\">Foreign Value Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-control\" id=\"ForeignValueField\" name=\"ForeignValueField\" data-bind=\"options: JoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignValueField, visible:ForeignKey(), attr: {required: ForeignKey()?'True':null}\" placeholder=\"Ex EmployeeName\" style=\"display: none;\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bind=\"visible:ForeignKey()\" data-toggle=\"tooltip\" data-placement=\"right\" class=\"fa fa-question-circle helptip\" style=\"display: none;\" title=\"Foreign Value field is a Column from the Foreign table which is used to display the value to the User in the Report Designer\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div data-bind=\"if: ForeignKey\">\r\n <div class=\"alert alert-info\">\r\n You can setup a cascading filter by setting up a parent for the foreign key below\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Setup Foreign Key Parent?</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" type=\"checkbox\" data-bind=\"checked:ForeignParentKey\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-toggle=\"tooltip\" data-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Foreign keys parent allows cascading dropdown selection in Filters\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignParentKey(), attr: {required: ForeignParentKey()?'True':null, placeholder: 'Ex tblEmployees'}\" placeholder=\"Ex tblEmployees\" style=\"display: none;\">Parent Table</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-control\" data-bind=\"value: ForeignJoinTable, visible:ForeignParentKey(), options: $root.Tables.model, optionsText: 'TableName'\" placeholder=\"Ex tblEmployees\" style=\"display: none;\"></select>\r\n\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span class=\"field-validation-valid help-inline indent\" data-valmsg-for=\"ForeignJoinTable\" data-valmsg-replace=\"true\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"control-group\" data-bind=\"visible:ForeignParentKey()\" style=\"display: none;\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"attr: {required: ForeignParentKey()?'True':null, placeholder: 'Ex EmployeeId'}\">Parent Key Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-control\" data-bind=\"options: ForeignJoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignParentKeyField, attr: {required: ForeignParentKey()?'True':null}\" placeholder=\"Ex EmployeeId\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-toggle=\"tooltip\" data-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Parent Key field is a Column from the Parent table which is used as the key in cascading filters\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"visible:ForeignParentKey()\" style=\"display: none;\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"attr: {required: ForeignParentKey()?'True':null, placeholder: 'Ex EmployeeName'}\">Parent Value Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-control\" data-bind=\"options: ForeignJoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignParentValueField, attr: {required: ForeignParentKey()?'True':null}\" placeholder=\"Ex EmployeeName\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-toggle=\"tooltip\" data-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Parent Value field is a Column from the Parent table which is used to display the value to the User in the Report Designer for cascading filters\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"visible:ForeignParentKey()\" style=\"display: none;\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"attr: {required: ForeignParentKey()?'True':null, placeholder: 'Ex EmployeeName'}\">Foreign Key Filter Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-control\" data-bind=\"options: JoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignParentApplyTo, attr: {required: ForeignParentKey()?'True':null}\" placeholder=\"Ex EmployeeName\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-toggle=\"tooltip\" data-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Foreign Key Filter Value field is a Column from the Foreign table where the selected parent filter will be applied for cascading filters\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <!--<div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Require Foreign Key Parent?</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" type=\"checkbox\" data-bind=\"checked:ForeignParentRequired\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-toggle=\"tooltip\" data-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Foreign keys parent can be optional or set to required for cascading filters\"></span>\r\n </div>\r\n </div>\r\n </div>-->\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button class=\"btn btn-secondary\" title=\"Manage Role Access\" data-toggle=\"modal\" data-target=\"#role-access-modal\" data-bind=\"click: $root.selectAllowedRoles\">\r\n <i class=\"fa fa-user\"></i>Manage Role Access\r\n </button>\r\n <button type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\">Done</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal\" id=\"procedure-modal\" role=\"dialog\" tabindex=\"-2\">\r\n <div class=\"modal-dialog modal-lg\" role=\"document\">\r\n <div class=\"modal-content \">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">Add Stored Proc</h4>\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">×</span></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <label class=\"col-md-2 control-label\">\r\n Search for\r\n </label>\r\n <div class=\"col-md-6\">\r\n <input type=\"text\" class=\"form-control\" data-bind=\"value: searchProcedureTerm\" placeholder=\"Search stored procedures by name\" />\r\n </div>\r\n <div class=\"col-md-2\">\r\n <button class=\"btn btn-primary\" data-bind=\"click: searchStoredProcedure\">Search</button>\r\n </div>\r\n </div>\r\n <br />\r\n <div class=\"menu row\" style=\"margin-left: 20px;\" data-bind=\"foreach: foundProcedures\"> \r\n <div class=\"menu-category card\">\r\n <div class=\"card-header clearfix\" style=\"\">\r\n <div class=\"pull-left\">\r\n <label>\r\n <span data-bind=\"text: TableName\"></span>\r\n <span class=\"label-xs\">Procedure</span>\r\n </label>\r\n <button class=\"btn btn-sm\" title=\"Save this Procedure\" data-bind=\"click: function(){$root.saveProcedure($data.TableName, true);}\">\r\n <span class=\"fa fa-save\"></span>\r\n </button>\r\n </div>\r\n <a class=\"pull-right\" data-toggle=\"collapse\" data-bind=\"attr: {'data-target': '#sp_'+$index()}\">\r\n <span class=\"fa fa-chevron-down\"></span>\r\n </a>\r\n </div>\r\n <div data-bind=\"attr: {id: 'sp_'+$index()}\" class=\"panel-collapse collapse in\">\r\n <div class=\"card-body\">\r\n Display Name<br />\r\n <span data-bind=\"editable: DisplayName\"></span>\r\n <label class=\"small\">Columns</label>\r\n\r\n <div class=\"list-group\" data-bind=\"foreach: Columns\">\r\n <div class=\"list-group-item\">\r\n <span data-bind=\"editable: DisplayName\"></span>\r\n <span class=\"badge badge-info\" data-bind=\"text: FieldType\"></span>\r\n </div>\r\n </div>\r\n <label class=\"small\">Paramters</label>\r\n\r\n <div class=\"list-group\" data-bind=\"foreach: Parameters\">\r\n <div class=\"list-group-item\">\r\n <span data-bind=\"editable: DisplayName\"></span>\r\n <span class=\"badge badge-info\" data-bind=\"text: ParameterDataTypeString\"></span><br />\r\n Default Value: <span data-bind=\"editable: ParameterValue\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-primary\" data-dismiss=\"modal\">Done</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal\" id=\"parameter-modal\" role=\"dialog\" tabindex=\"-1\">\r\n <div class=\"modal-dialog\" role=\"document\">\r\n <div class=\"modal-content\" data-bind=\"with: editParameter()\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\" id=\"myModalLabel\">\r\n Manage\r\n <label data-bind=\"text: ParameterName\"></label>\r\n </h4>\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">×</span></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <p>Choose options that will determine how users interact with this parameter on Reports</p>\r\n <div class=\"form-horizontal\">\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" for=\"Display_Name\" data-bind=\"attr:{placeholder:'Ex First Name'}\" placeholder=\"Ex First Name\">Display Name</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <input class=\"form-control text-box single-line\" data-val=\"true\" data-val-required=\"The DisplayName field is required.\" name=\"DisplayName\" type=\"text\" value=\"First Name\" data-bind=\"value: DisplayName, attr:{placeholder:'Ex First Name'}\" placeholder=\"Ex First Name\">\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-toggle=\"tooltip\" data-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"This is a friendly name to display to your users\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Default Value</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <span data-bind=\"editable: ParameterValue\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"\">Hidden Parameter</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" type=\"checkbox\" value=\"true\" data-bind=\"checked: Hidden, enable: ParameterValue\">\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"\">Required</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" type=\"checkbox\" value=\"true\" data-bind=\"checked:Required\">\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" for=\"Foreign_Key\" data-bind=\"\">Use Lookup Table</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" name=\"ForeignKey\" type=\"checkbox\" value=\"true\" data-bind=\"checked:ForeignKey\"><input name=\"ForeignKey\" type=\"hidden\" value=\"false\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-toggle=\"tooltip\" data-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Using lookup table allows friendly selection in report using a Dropdown List\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" for=\"Foreign_Table\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null, placeholder: 'Ex tblEmployees'}\" placeholder=\"Ex tblEmployees\" style=\"display: none;\">Lookup Table</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-control\" data-bind=\"value: JoinTable, visible:ForeignKey(), options: $root.Procedures.tables, optionsText: 'TableName'\" placeholder=\"Ex tblEmployees\" style=\"display: none;\"></select>\r\n\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span class=\"field-validation-valid help-inline indent\" data-valmsg-for=\"ForeignTable\" data-valmsg-replace=\"true\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" for=\"Foreign_Key_Field\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null, placeholder: 'Ex EmployeeId'}\" placeholder=\"Ex EmployeeId\" style=\"display: none;\">Lookup Key Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-control\" name=\"ForeignKeyField\" data-bind=\"options: JoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignKeyField, visible:ForeignKey(), attr: {required: ForeignKey()?'True':null}\" placeholder=\"Ex EmployeeId\" style=\"display: none;\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bind=\"visible:ForeignKey()\" data-toggle=\"tooltip\" data-placement=\"right\" class=\"fa fa-question-circle helptip\" style=\"display: none;\" title=\"Foreign Key field is a Column from the Foreign table which is used as the Key field\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" for=\"Foreign_Value_Field\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null, placeholder: 'Ex EmployeeName'}\" placeholder=\"Ex EmployeeName\" style=\"display: none;\">Lookup Value Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-control\" name=\"ForeignValueField\" data-bind=\"options: JoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignValueField, visible:ForeignKey(), attr: {required: ForeignKey()?'True':null}\" placeholder=\"Ex EmployeeName\" style=\"display: none;\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bind=\"visible:ForeignKey()\" data-toggle=\"tooltip\" data-placement=\"right\" class=\"fa fa-question-circle helptip\" style=\"display: none;\" title=\"Lookup Value field is a Column from the Lookup table which is used to display the value to the User in the Report Designer\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\">Done</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal fade\" id=\"role-access-modal\" role=\"dialog\" tabindex=\"-2\">\r\n <div class=\"modal-dialog\" role=\"document\">\r\n <div class=\"modal-content\" data-bind=\"with: editAllowedRoles\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">Manage Access by Roles</h4>\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">×</span></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <p>Choose User Roles that will have Access</p>\r\n <p class=\"small\">Note: All Users will have access if no restricted roles are setup</p>\r\n <div class=\"list-group\" data-bind=\"foreach: AllowedRoles\">\r\n <div class=\"list-group-item\" style=\"padding-top: 2px; padding-bottom: 2px;\">\r\n <span data-bind=\"text: $data\"></span>\r\n <button class=\"btn btn-sm btn-danger pull-right\"><i class=\"fa fa-trash\" data-bind=\"click: $root.removeAllowedRole\"></i></button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-10\">\r\n <input class=\"form-control\" type=\"text\" data-bind=\"value: $root.newAllowedRole\" placeholder=\"Ex Sales\">\r\n </div>\r\n <div class=\"col-2\">\r\n <button class=\"btn btn-primary\" data-bind=\"click: $root.addAllowedRole\">Add</button>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\">Done</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"clearfix\"></div>\r\n\r\n <div class=\"modal\" id=\"add-connection-modal\" role=\"dialog\">\r\n <div class=\"modal-dialog\" role=\"document\">\r\n <div class=\"modal-content\" data-bind=\"with: newDataConnection\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">Add a new Data Connection</h4>\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">×</span></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <p>Choose User Roles that will have Access</p>\r\n <p class=\"small\">Note: All Users will have access if no restricted roles are setup</p>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Connection Name</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <input class=\"form-control text-box\" data-val=\"true\" data-val-required=\"Connection Name is required.\" type=\"text\" data-bind=\"value: Name\" placeholder=\"\" id=\"add-conn-name\">\r\n </div>\r\n </div>\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Connection Key</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <input class=\"form-control text-box\" data-val=\"true\" data-val-required=\"Connection Key is required.\" type=\"text\" data-bind=\"value: ConnectionKey\" placeholder=\"\" id=\"add-conn-key\">\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-toggle=\"tooltip\" data-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"This is the Connection Key in your web.config for your SQL Connection String\"></span>\r\n </div>\r\n </div>\r\n <div class=\"form-group row\">\r\n <div class=\"check-box col-md-12\">\r\n <label>\r\n <input type=\"checkbox\" data-bind=\"checked: copySchema\">\r\n Copy Schema from existing Connection\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"form-group row\" data-bind=\"visible: copySchema\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Choose Connection</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-control\" style=\"max-width: 300px;\" data-bind=\"options: $root.DataConnections, optionsText: 'DataConnectName', optionsValue: 'DataConnectGuid', value: copyFrom\"></select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bind=\"click: $root.addDataConnection\">Create</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n\r\n <div class=\"modal\" id=\"custom-sql-modal\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog modal-lg\" data-bind=\"with: customSql\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\">Enter Select SQL for your Data</h5>\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">\r\n <span aria-hidden=\"true\">×</span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"form-group\" data-bind=\"validationElement: customTableName\">\r\n <label for=\"custom-table-name\">Custom Table Name</label>\r\n <input type=\"text\" class=\"form-control\" name=\"customTableName\" placeholder=\"Enter table name\" data-bind=\"textInput: customTableName\" required>\r\n <div class=\"invalid-feedback\">Custom Table Name is required.</div>\r\n </div>\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" type=\"checkbox\" data-bind=\"checked: useAi\"> Use ChatGPT to build the query?\r\n </label>\r\n </div>\r\n <div data-bind=\"visible: useAi\">\r\n <p id=\"query-input\" class=\"query-input\">\r\n Show me \r\n </p> \r\n <button data-bind=\"click: buildSqlUsingAi\" class=\"btn btn-primary btn-sm\">Process with ChatGPT</button>\r\n <button data-bind=\"click: textQuery.resetQuery\" class=\"btn btn-secondary btn-sm\">Start over</button>\r\n <hr />\r\n </div>\r\n\r\n <div class=\"form-group\" data-bind=\"validationElement: customSql\">\r\n <label for=\"custom-sql\">Custom SQL</label> | <a href=\"#\" data-bind=\"click: beautifySql\">Beautify Sql</a>\r\n <textarea class=\"form-control\" style=\"height: 240px;\" name=\"customSql\" data-bind=\"textInput: customSql\" required></textarea>\r\n <div class=\"invalid-feedback\">Custom SQL is required.</div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary\" data-bind=\"click: executeSql\">Save changes</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n</div> \r\n\r\n<!-- Templates -->\r\n<div [innerHtml]=\"reportTemplates\"></div>\r\n<!-- Templates -->", styles: [".glyphicon-ok:before{content:\"\\f00c\"}.glyphicon-remove:before{content:\"\\f00d\"}.glyphicon{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}\n"] });
|
|
1603
|
+
DotnetsetupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: DotnetsetupComponent, selector: "app-dotnetsetup", ngImport: i0, template: "<div id=\"dot-net-report\" class=\"body-content\">\r\n\r\n <h2>Manage Database</h2>\r\n <p>\r\n You can select and manage display names for the Tables and Columns you would like to allow in Dotnet Report Builder.\r\n </p>\r\n <div class=\"alert alert-danger\">\r\n Do not expose this Setup Tool to end users who should not have access to it. Ideally, only Developers should be given access to this utility.\r\n </div>\r\n <div data-bind=\"visible: false;\">\r\n Loading...\r\n </div>\r\n\r\n <div>\r\n <!-- Nav tabs -->\r\n <ul class=\"nav nav-tabs\" role=\"tablist\">\r\n <li role=\"presentation\" class=\"nav-item\"><a class=\"nav-link active\" href=\"#tablesfields\" aria-controls=\"home\" role=\"tab\" data-toggle=\"tab\" data-bind=\"click: function() { customTableMode(false); }\">Database Tables</a></li>\r\n <li role=\"presentation\" class=\"nav-item\"><a class=\"nav-link\" href=\"#tablesfields\" aria-controls=\"custom\" role=\"tab\" data-toggle=\"tab\" data-bind=\"click: function() { customTableMode(true); }\">Custom Tables</a></li>\r\n <li role=\"presentation\" class=\"nav-item\"><a class=\"nav-link\" href=\"#relations\" aria-controls=\"profile\" role=\"tab\" data-toggle=\"tab\">Relations</a></li>\r\n <li role=\"presentation\" class=\"nav-item\"><a class=\"nav-link\" href=\"#procedure\" aria-controls=\"procedure\" role=\"tab\" data-toggle=\"tab\">Stored Procs</a></li>\r\n <li role=\"presentation\" class=\"nav-item\"><a class=\"nav-link\" href=\"#manageaccess\" aria-controls=\"manageaccess\" role=\"tab\" data-toggle=\"tab\">Manage Reports Access</a></li>\r\n <li role=\"presentation\" class=\"nav-item\"><a class=\"nav-link\" href=\"#connection\" aria-controls=\"home\" role=\"tab\" data-toggle=\"tab\">Data Connection</a></li>\r\n </ul>\r\n </div>\r\n <br />\r\n\r\n<!-- Tab panes -->\r\n<div class=\"fix-content\" style=\"display: none;\" data-bind=\"visible: true\">\r\n <div class=\"tab-content\">\r\n <div role=\"tabpanel\" class=\"tab-pane\" id=\"connection\">\r\n <b>Manage Database Connection</b>\r\n <p>\r\n Select and manage Data you would like to allow access to in DNR to use in building Reports and Dashboards\r\n </p>\r\n <div class=\"form-row\" data-bind=\"visible: true\">\r\n <div class=\"form-group\">\r\n <div class=\"control-group\">\r\n <select class=\"form-control\" data-bind=\"options: DataConnections, optionsText: 'DataConnectName', optionsValue: 'DataConnectGuid', value: currentConnectionKey\"></select>\r\n <div class=\"padded-top\"></div>\r\n <button class=\"btn btn-primary btn-sm\" data-toggle=\"modal\" data-target=\"#connection-setup-modal\">Manage DB Connection</button>\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"click: switchConnection, visible: canSwitchConnection\">Switch Connection</button>\r\n <button class=\"btn btn-primary btn-sm\" data-toggle=\"modal\" data-target=\"#add-connection-modal\">Add New Connection</button>\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"click: exportAll, visible: false\">Export Connection</button>\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"click: importStart, visible: false\">Import Connection</button>\r\n </div>\r\n <div data-bind=\"visible: importingFile\">\r\n <br />\r\n <div class=\"alert alert-info\">\r\n Please select a file you have previously exported from this utility. The system will load the screen with the Data Connection setting in the file, however, it will <b>NOT</b> be saved until you press the Save All button or Save individual tables\r\n <br />\r\n <div class=\"input-group\">\r\n <input type=\"file\" accept=\".json\" id=\"import-file\" data-bind=\"event: { change: function() { importFile($element.files[0]) } }\" />\r\n <span class=\"input-group-btn\">\r\n <button class=\"btn btn-link\" data-bind=\"click: importCancel\">Cancel</button>\r\n </span>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div role=\"tabpanel\" class=\"tab-pane active\" id=\"tablesfields\">\r\n <b data-bind=\"text: customTableMode() ? 'Custom Tables' : 'Database Tables'\"></b>\r\n <p>\r\n <span data-bind=\"visible: $root.customTableMode\">\r\n Define Custom Tables using SQL Select Query to use in DNR for Reporting and Analytics.\r\n </span>\r\n <span data-bind=\"hidden: $root.customTableMode\">\r\n Select Tables or Views from your Database to use in DNR for Reporting and Analytics.\r\n </span>\r\n </p>\r\n\r\n <div data-bind=\"with: Tables\">\r\n <input type=\"text\" class=\"form-control input-sm\" placeholder=\"Filter Tables for...\" data-bind=\"value: tableFilter, valueUpdate: 'afterkeydown'\" style=\"float: left; width: 140px;\">\r\n <button class=\"btn btn-sm\" data-bind=\"click: clearTableFilter, visible: tableFilter()!='' && tableFilter()!=null\"><span class=\"fa fa-remove\"></span></button>\r\n <button class=\"btn btn-sm\" onclick=\"openall()\" style=\"margin-left: 15px;\">Open all</button>\r\n <button class=\"btn btn-sm\" onclick=\"closeall()\">Close all</button>\r\n <button class=\"btn btn-sm\" data-bind=\"click: toggleShowAll, hidden: $root.customTableMode() || $root.onlyApi(), text: usedOnly() ? 'Show all' : 'Show used only'\">Show used only</button>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: $root.customSql.addNewCustomSqlTable, visible: $root.customTableMode\">Add New Custom Table</button>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: $root.loadFromDatabase, hidden: $root.customTableMode() || !$root.onlyApi()\">Load all Database Tables</button>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n <hr />\r\n <div class=\"row\">\r\n <div class=\"form-group form-inline col-md-4\" data-bind=\"with: pager\">\r\n <div data-bind=\"template: 'pager-template', data: $data\"></div>\r\n </div>\r\n <div class=\"col-md-4\" data-bind=\"ifnot: $root.customTableMode\">\r\n <div>\r\n <span data-bind=\"text: Tables.model().length\"></span> Tables/Views <span data-bind=\"text: $root.onlyApi() ? 'configured and used' : 'read from database'\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"menu row\" style=\"margin-left: 20px;\" data-bind=\"foreach: pagedTables\">\r\n <div class=\"menu-category card\" style=\"float: left;\">\r\n\r\n <div class=\"card-header clearfix\" >\r\n <div class=\"checkbox pull-left\">\r\n <label>\r\n <input type=\"checkbox\" data-bind=\"checked: Selected\">\r\n <span data-bind=\"text: TableName\"></span>\r\n <span data-bind=\"visible: IsView\" class=\"label-sm\">(view)</span>\r\n </label>\r\n <button class=\"btn btn-sm\" title=\"Save this Table\" data-bind=\"click: function(){$data.saveTable($root.keys.AccountApiKey, $root.keys.DatabaseApiKey);}\"><i class=\"fa fa-floppy-o\"></i></button>\r\n <button class=\"btn btn-sm\" title=\"Manage Role Access\" data-toggle=\"modal\" data-target=\"#role-access-modal\" data-bind=\"click: $root.selectAllowedRoles\">\r\n <i class=\"fa fa-user\"></i>\r\n </button>\r\n </div>\r\n <a class=\"pull-right\" data-toggle=\"collapse\" data-bind=\"attr: {'data-target': '#table'+$index()}\">\r\n <span class=\"fa fa-chevron-down\"></span>\r\n </a>\r\n </div>\r\n <div data-bind=\"attr: {id: 'table'+$index()}\" class=\"panel-collapse collapse in\">\r\n <div class=\"card-body\">\r\n <p>\r\n <label class=\"label-sm\">Display Name</label><br />\r\n <span data-bind=\"editable: DisplayName\"></span>\r\n </p>\r\n <p>\r\n <label class=\"label-sm\">Schema Name</label><br />\r\n <span data-bind=\"editable: SchemaName\"></span>\r\n </p>\r\n <p>\r\n <label class=\"label-sm\">Account Id Field</label><br />\r\n <span data-bind=\"editable: AccountIdField\"></span>\r\n </p>\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" type=\"checkbox\" value=\"true\" data-bind=\"checked: DoNotDisplay\" title=\"Do not display this table for selecting in reports\"> Do Not Display\r\n </label>\r\n </div>\r\n <div data-bind=\"if: CustomTable\">\r\n <button data-bind=\"click: $root.customSql.viewCustomSql.bind($data)\" class=\"btn btn-sm btn-secondary\">View Custom Sql</button>\r\n </div>\r\n </div>\r\n\r\n <label style=\"padding-left: 15px;\" class=\"label-sm\"><span data-bind=\"text: Columns().length\"></span> Columns</label>\r\n <button class=\"btn btn-sm btn-link label-sm\" data-bind=\"click: autoFormat, visible: Selected\">Auto Format</button>\r\n <button class=\"btn btn-sm btn-link label-sm\" data-bind=\"click: unselectAllColumns, visible: Selected\">Unselect All</button>\r\n <button class=\"btn btn-sm btn-link label-sm\" data-bind=\"click: selectAllColumns, visible: Selected\">Select All</button>\r\n <div class=\"list-group\" data-bind=\"sortable: { data: Columns, options: { handle: '.sortable', cursor: 'move' }, afterMove: $parent.columnSorted }\">\r\n <div class=\"list-group-item\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input type=\"checkbox\" data-bind=\"checked: Selected, enable: $parent.Selected()\">\r\n <span data-bind=\"editable: DisplayName, attr: {title: 'DB field is ' + ColumnName()}\"></span>\r\n <label data-bind=\"visible: PrimaryKey\" class=\"badge badge-primary\">Primary</label>\r\n <label data-bind=\"visible: ForeignKey\" class=\"badge badge-info\">Foreign</label>\r\n </label>\r\n <button class=\"btn btn-sm pull-right\" data-toggle=\"modal\" data-target=\"#column-modal\" title=\"All column options\" data-bind=\"click: $root.selectColumn.bind($data, false)\">...</button>\r\n\r\n <div class=\"btn btn-sm pull-right sortable\">\r\n <span class=\"fa fa-arrows\" aria-hidden=\"true\" title=\"Drag to reorder\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div role=\"tabpanel\" class=\"tab-pane\" id=\"relations\">\r\n <b>Relations</b>\r\n <p>\r\n Setup your Database Relations for DNR to produce dynamic queries\r\n </p>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: AddJoin\">Add new Join</button> \r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: SaveJoins\">Save Joins</button>\r\n <br />\r\n <br />\r\n <form id=\"form-joins\">\r\n <table class=\"table\">\r\n <thead data-bind=\"with: JoinFilters\">\r\n <tr>\r\n <th>\r\n Primary Table\r\n <div class=\"input-group input-group-sm\">\r\n <input type=\"text\" class=\"form-control input-sm\" data-bind=\"value: primaryTable, valueUpdate: 'afterkeydown'\" placeholder=\"Search...\">\r\n <span class=\"input-group-addon\"><i class=\"fa fa-filter\"></i></span>\r\n </div>\r\n </th>\r\n <th>\r\n Field\r\n <div class=\"input-group input-group-sm\">\r\n\r\n <input type=\"text\" class=\"form-control input-sm\" data-bind=\"value: primaryField, valueUpdate: 'afterkeydown'\" placeholder=\"Search...\">\r\n <span class=\"input-group-addon\"><i class=\"fa fa-filter\"></i></span>\r\n </div>\r\n </th>\r\n <th>\r\n Join Type\r\n <div class=\"input-group input-group-sm\">\r\n\r\n <input type=\"text\" class=\"form-control input-sm\" data-bind=\"value: joinType, valueUpdate: 'afterkeydown'\" placeholder=\"Search...\">\r\n <span class=\"input-group-addon\"><i class=\"fa fa-filter\"></i></span>\r\n </div>\r\n </th>\r\n <th>\r\n Join Table\r\n <div class=\"input-group input-group-sm\">\r\n\r\n <input type=\"text\" class=\"form-control input-sm\" data-bind=\"value: joinTable, valueUpdate: 'afterkeydown'\" placeholder=\"Search...\">\r\n <span class=\"input-group-addon\"><i class=\"fa fa-filter\"></i></span>\r\n </div>\r\n </th>\r\n <th>\r\n Field<div class=\"input-group input-group-sm\">\r\n\r\n <input type=\"text\" class=\"form-control input-sm\" data-bind=\"value: joinField, valueUpdate: 'afterkeydown'\" placeholder=\"Search...\">\r\n <span class=\"input-group-addon\"><i class=\"fa fa-filter\"></i></span>\r\n </div>\r\n </th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody data-bind=\"foreach: filteredJoins\">\r\n <tr>\r\n <td>\r\n <select class=\"form-control input-medium\" data-bind=\"options: $root.Tables.availableTables, optionsText: 'DisplayName', value: JoinTable\"></select>\r\n </td>\r\n <td data-bind=\"with: JoinTable\">\r\n <select class=\"form-control\" data-bind=\"options: availableColumns, optionsText: 'DisplayName', optionsValue: 'ColumnName', value: $parent.FieldName\"></select>\r\n </td>\r\n <td>\r\n <select class=\"form-control input-small\" data-bind=\"options: $root.JoinTypes, value: JoinType\"></select>\r\n </td>\r\n <td>\r\n <select class=\"form-control input-medium\" data-bind=\"options: OtherTables, optionsText: 'DisplayName', value: OtherTable\"></select>\r\n </td>\r\n\r\n <td data-bind=\"with: OtherTable\">\r\n <select class=\"form-control\" data-bind=\"options: availableColumns, optionsText: 'DisplayName', optionsValue: 'ColumnName', value: $parent.JoinFieldName\"></select>\r\n </td>\r\n <td>\r\n <button class=\"btn btn-sm btn-secondary\" data-bind=\"click: DeleteJoin\">Delete</button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </form>\r\n <br />\r\n <br />\r\n </div>\r\n <div id=\"procedure\" class=\"tab-pane\">\r\n <b>Stored Procedures</b>\r\n <p>\r\n Select and manage Stored Procedures to use in DNR for more complex and coded Reports\r\n </p>\r\n <hr />\r\n <button class=\"btn btn-sm btn-primary\" data-toggle=\"modal\" data-target=\"#procedure-modal\">Add Stored Procs from database</button>\r\n <br />\r\n <div data-bind=\"if: Procedures.savedProcedures().length == 0\">\r\n No Stored Procedures have been setup yet.\r\n </div>\r\n <div class=\"menu row\" data-bind=\"foreach: Procedures.savedProcedures\" style=\"margin-left: 20px; padding-top: 20px;\">\r\n <div class=\"menu-category card\" style=\"float: left;\">\r\n\r\n <div class=\"card-header clearfix\">\r\n <div class=\"pull-left\">\r\n <label>\r\n <span data-bind=\"text: TableName\"></span>\r\n <span class=\"label-xs\">Procedure</span>\r\n </label>\r\n\r\n <button class=\"btn btn-sm\" title=\"Save this Procedure\" data-bind=\"click: function(){$root.saveProcedure($data.TableName, false);}\">\r\n <span class=\"fa fa-save\"></span>\r\n </button>\r\n <button class=\"btn btn-sm\" title=\"Manage Role Access\" data-toggle=\"modal\" data-target=\"#role-access-modal\" data-bind=\"click: $root.selectAllowedRoles\">\r\n <i class=\"fa fa-user\"></i>\r\n </button>\r\n <button class=\"btn btn-sm\" title=\"Delete this Procedure\" data-bind=\"click: function(){$data.deleteTable($root.keys.AccountApiKey, $root.keys.DatabaseApiKey);}\">\r\n <span class=\"fa fa-trash\"></span>\r\n </button>\r\n\r\n </div>\r\n <a class=\"pull-right\" data-toggle=\"collapse\" data-bind=\"attr: {'data-target': '#table'+$index()}\">\r\n <span class=\"fa fa-chevron-down\"></span>\r\n </a>\r\n </div>\r\n <div data-bind=\"attr: {id: 'table'+$index()}\" class=\"panel-collapse collapse in\">\r\n <div class=\"card-body\">\r\n <p>\r\n <label class=\"label-sm\">Display Name</label><br />\r\n <span data-bind=\"editable: DisplayName\"></span>\r\n </p>\r\n <p>\r\n <label class=\"label-sm\">Schema Name</label><br />\r\n <span data-bind=\"editable: SchemaName\"></span>\r\n </p>\r\n <label class=\"small\">Columns</label>\r\n\r\n <div class=\"list-group\" data-bind=\"foreach: Columns\">\r\n <div class=\"list-group-item\">\r\n <label>\r\n <span data-bind=\"editable: DisplayName, attr: {title: 'DB field is ' + ColumnName()}\"></span>\r\n <span class=\"badge badge-info\" data-bind=\"text: FieldType\"></span>\r\n </label>\r\n <button class=\"btn btn-sm pull-right\" data-toggle=\"modal\" data-target=\"#column-modal\" title=\"All column options\" data-bind=\"click: $root.selectColumn.bind($data, true)\">...</button>\r\n\r\n </div>\r\n </div>\r\n <label class=\"small\">Parameters</label>\r\n\r\n <div class=\"list-group\" data-bind=\"foreach: Parameters\">\r\n <div class=\"list-group-item\">\r\n <label>\r\n <span data-bind=\"editable: DisplayName, attr: {title: 'DB field is ' + ParameterName()}\"></span>\r\n <span class=\"badge badge-info\" data-bind=\"text: ParameterDataTypeString\"></span>\r\n \r\n \r\n <button class=\"btn btn-sm btn-primary pull-right\" data-toggle=\"modal\" data-target=\"#parameter-modal\" title=\"All Parameter options\" data-bind=\"click: $root.editParameter\">...</button>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div id=\"manageaccess\" class=\"tab-pane\">\r\n <div data-bind=\"foreach: reportsAndFolders\" class=\"card\" style=\"margin-left: 20px;\">\r\n <div class=\"card-body\">\r\n <a class=\"btn btn-link\" role=\"button\" data-toggle=\"collapse\" data-bind=\"attr: {href: '#folder-' + folderId }\">\r\n <i class=\"fa fa-folder\"></i> <span data-bind=\"text: folder\"></span>\r\n </a>\r\n <div class=\"collapse\" data-bind=\"attr: {id: 'folder-' + folderId }\">\r\n <div data-bind=\"if: reports.length == 0\">\r\n No Reports found in this folder\r\n </div>\r\n <ul class=\"list-group\" data-bind=\"foreach: reports\">\r\n <li class=\"list-group-item\">\r\n <div class=\"row\">\r\n <div class=\"col-md-3\">\r\n <div>\r\n <label class=\"list-group-item-heading\">\r\n <span class=\"fa\" data-bind=\"css: {'fa-file': reportType=='List', 'fa-th-list': reportType=='Summary', 'fa-bar-chart': reportType=='Bar', 'fa-pie-chart': reportType=='Pie', 'fa-line-chart': reportType=='Line', 'fa-globe': reportType =='Map'}\" style=\"font-size: 14pt; color: #808080\"></span>\r\n <span data-bind=\"text: reportName\"></span>\r\n </label>\r\n </div>\r\n <p class=\"list-group-item-text small\" data-bind=\"text: reportDescription\"></p>\r\n\r\n <div class=\"small\" style=\"padding-top: 10px;\">\r\n <b>Current Report Access</b><br />\r\n Manage by User <span class=\"badge badge-info\" data-bind=\"text: userId ? userId : 'Any User'\"></span>\r\n <br />\r\n View only by User <span class=\"badge badge-info\" data-bind=\"text: (viewOnlyUserId ? viewOnlyUserId : (userId ? userId : 'Any User'))\"></span>\r\n <br />\r\n <div data-bind=\"if: deleteOnlyUserId\">\r\n Delete only by User <span class=\"badge badge-info\" data-bind=\"text: deleteOnlyUserId\"></span>\r\n <br />\r\n </div>\r\n <div data-bind=\"if: userRole\">\r\n Manage by Role <span class=\"badge badge-info\" data-bind=\"text: userRole ? userRole : 'No Role'\"></span>\r\n <br />\r\n </div>\r\n <div data-bind=\"if: viewOnlyUserRole\">\r\n View only by Role <span class=\"badge badge-info\" data-bind=\"text: viewOnlyUserRole ? viewOnlyUserRole : 'Any Role'\"></span>\r\n <br />\r\n </div>\r\n <div data-bind=\"if: deleteOnlyUserRole\">\r\n Delete only by Role <span class=\"badge badge-info\" data-bind=\"text: deleteOnlyUserRole ? deleteOnlyUserRole : 'Same as Manage'\"></span>\r\n <br />\r\n </div>\r\n <div>\r\n For Client <span class=\"badge badge-info\" data-bind=\"text: clientId ? clientId : 'All Clients'\"></span>\r\n <br />\r\n </div>\r\n </div>\r\n <br />\r\n <br />\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: function() { changeAccess(!changeAccess())}, text: !changeAccess() ? 'Change Access': 'Cancel Changing Access', hidden: changeAccess\">Change Access</button>\r\n </div>\r\n\r\n <div data-bind=\"if: changeAccess\" class=\"col-md-9\" >\r\n <div style=\"border-left: 1px solid; padding-left: 10px;\">\r\n <div data-bind=\"template: {name: 'manage-access-template', data: $root }\"></div>\r\n <br />\r\n <br />\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: saveAccessChanges\">Save Access Changes</button>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: function() { changeAccess(!changeAccess())}, text: !changeAccess() ? 'Change Access': 'Cancel Changing Access'\">Change Access</button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- Modal -->\r\n<div class=\"modal\" id=\"column-modal\" role=\"dialog\" tabindex=\"-1\">\r\n <div class=\"modal-dialog\" role=\"document\">\r\n <div class=\"modal-content\" data-bind=\"with: editColumn()\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\" id=\"myModalLabel\">\r\n Manage\r\n <label data-bind=\"text: ColumnName\"></label>\r\n </h4>\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">×</span></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <p>Choose options that will determine how users interact with this column on Reports</p>\r\n <div class=\"form-horizontal\">\r\n\r\n <ul class=\"nav nav-tabs\" role=\"tablist\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <li role=\"presentation\" class=\"nav-item\"><a class=\"nav-link active\" href=\"#column-main\" aria-controls=\"home\" role=\"tab\" data-toggle=\"tab\">Main Options</a></li>\r\n <li role=\"presentation\" class=\"nav-item\"><a class=\"nav-link\" href=\"#column-foreign\" aria-controls=\"profile\" role=\"tab\" data-toggle=\"tab\">Foreign Key Options</a></li>\r\n <li role=\"presentation\" class=\"nav-item\"><a class=\"nav-link\" href=\"#column-filter\" aria-controls=\"procedure\" role=\"tab\" data-toggle=\"tab\">Filter Options</a></li>\r\n </ul>\r\n <div class=\"tab-content\">\r\n <br />\r\n <div role=\"tabpanel\" class=\"tab-pane active\" id=\"column-main\">\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" for=\"Display_Name\" data-bind=\"attr:{placeholder:'Ex First Name'}\" placeholder=\"Ex First Name\">Display Name</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <input class=\"form-control text-box single-line\" data-val=\"true\" data-val-required=\"The DisplayName field is required.\" id=\"DisplayName\" name=\"DisplayName\" type=\"text\" value=\"First Name\" data-bind=\"value: DisplayName, attr:{placeholder:'Ex First Name'}\" placeholder=\"Ex First Name\">\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-toggle=\"tooltip\" data-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"This is a friendly name to display to your users\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" for=\"Field_Type\" data-bind=\"\">Field Type</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-control\" id=\"FieldType_SelectedId\" name=\"FieldType.SelectedId\" data-bind=\"value: FieldType\">\r\n <option value=\"Boolean\">Boolean</option>\r\n <option value=\"DateTime\">Date Time</option>\r\n <option value=\"Varchar\">Varchar</option>\r\n <option value=\"Money\">Money</option>\r\n <option value=\"Int\">Int</option>\r\n <option value=\"Double\">Double</option>\r\n <option value=\"Json\">Json</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span class=\"field-validation-valid help-inline indent\" data-valmsg-for=\"FieldType\" data-valmsg-replace=\"true\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" for=\"Primary_Key\" data-bind=\"\">Primary Key</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" data-val-required=\"The PrimaryKey field is required.\" id=\"PrimaryKey\" name=\"PrimaryKey\" type=\"checkbox\" value=\"true\" data-bind=\"checked:PrimaryKey\"><input name=\"PrimaryKey\" type=\"hidden\" value=\"false\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span class=\"field-validation-valid help-inline indent\" data-valmsg-for=\"PrimaryKey\" data-valmsg-replace=\"true\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"\">Do Not Display</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" type=\"checkbox\" value=\"true\" data-bind=\"checked:DoNotDisplay\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-toggle=\"tooltip\" data-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"If this is checked, the column will not be displayed on Report Designer, but can still be used on Global Data Filters\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"control-group\" data-bind=\"if: FieldType() == 'Json'\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">JSON Data Structure</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <textarea class=\"form-control text-box single-line\" data-val=\"true\" data-val-required=\"The DisplayName field is required.\" data-bind=\"value: JsonStructure, attr:{placeholder:'Please paste in Sample Json with all columns for this JSON data field'}\" rows=\"5\" ></textarea>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-toggle=\"tooltip\" data-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"You can paste in a sample Json blob with all the columns you want to use in this field\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div role=\"tabpanel\" class=\"tab-pane\" id=\"column-filter\">\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-4 col-sm-4 control-label\" data-bind=\"\">Require Filter if Column is selected</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" type=\"checkbox\" value=\"true\" data-bind=\"checked:ForceFilter\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2 col-sm-2\">\r\n <span data-toggle=\"tooltip\" data-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"If this is checked, the column will always require the user to pick a filtered value\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-4 col-sm-4 control-label\" data-bind=\"\">Require Filter if Table is selected</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" type=\"checkbox\" value=\"true\" data-bind=\"checked:ForceFilterForTable\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2 col-sm-2\">\r\n <span data-toggle=\"tooltip\" data-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"If this is checked, the report will always require the user to pick a filter value if user picks the column in report\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: FieldType() == 'DateTime'\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-4 col-sm-4 control-label\" data-bind=\"\">Restrict Filter Date Range</label>\r\n <div class=\"col-md-1 col-sm-1\">\r\n <input class=\"check-box\" type=\"checkbox\" data-bind=\"checked: restrictDateRangeFilter\" />\r\n </div>\r\n <div class=\"col-md-2 col-sm-2\" data-bind=\"if: restrictDateRangeFilter\">\r\n <input class=\"form-control\" type=\"number\" data-bind=\"value: restrictDateRangeNumber\" />\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\" data-bind=\"if: restrictDateRangeFilter\">\r\n <select class=\"form-control\" data-bind=\"value: restrictDateRangeValue\">\r\n <option value=\"Days\">Day(s)</option>\r\n <option value=\"Months\">Month(s)</option>\r\n <option value=\"Years\">Year(s)</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-2 col-sm-2\">\r\n <span data-toggle=\"tooltip\" data-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"If this is selected, user will not be able to pick date range larger than this selection\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div role=\"tabpanel\" class=\"tab-pane\" id=\"column-foreign\">\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"\">Foreign Key</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" data-val-required=\"The ForeignKey field is required.\" id=\"ForeignKey\" name=\"ForeignKey\" type=\"checkbox\" value=\"true\" data-bind=\"checked:ForeignKey\"><input name=\"ForeignKey\" type=\"hidden\" value=\"false\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-toggle=\"tooltip\" data-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Foreign keys allows friendly selection in Filters using a Dropdown List\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null, placeholder: 'Ex tblEmployees'}\" placeholder=\"Ex tblEmployees\" style=\"display: none;\">Foreign Table</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-control\" data-bind=\"value: JoinTable, visible:ForeignKey(), options: $root.Tables.model, optionsText: 'TableName'\" placeholder=\"Ex tblEmployees\" style=\"display: none;\"></select>\r\n\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span class=\"field-validation-valid help-inline indent\" data-valmsg-for=\"ForeignTable\" data-valmsg-replace=\"true\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null}\" style=\"display: none;\">Foreign Join</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-control\" id=\"ForeignJoin_SelectedId\" name=\"ForeignJoin.SelectedId\" data-bind=\"value: ForeignJoin, visible:ForeignKey(), attr: {required: ForeignKey()?'True':null}\" style=\"display: none;\">\r\n <option selected=\"selected\" value=\"Inner\">Inner</option>\r\n <option value=\"Left\">Left</option>\r\n <option value=\"Right\">Right</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span class=\"field-validation-valid help-inline indent\" data-valmsg-for=\"ForeignJoin\" data-valmsg-replace=\"true\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null, placeholder: 'Ex EmployeeId'}\" placeholder=\"Ex EmployeeId\" style=\"display: none;\">Foreign Key Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-control\" id=\"ForeignKeyField\" name=\"ForeignKeyField\" data-bind=\"options: JoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignKeyField, visible:ForeignKey(), attr: {required: ForeignKey()?'True':null}\" placeholder=\"Ex EmployeeId\" style=\"display: none;\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bind=\"visible:ForeignKey()\" data-toggle=\"tooltip\" data-placement=\"right\" class=\"fa fa-question-circle helptip\" style=\"display: none;\" title=\"Foreign Key field is a Column from the Foreign table which is used as the Key field\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null, placeholder: 'Ex EmployeeName'}\" placeholder=\"Ex EmployeeName\" style=\"display: none;\">Foreign Value Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-control\" id=\"ForeignValueField\" name=\"ForeignValueField\" data-bind=\"options: JoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignValueField, visible:ForeignKey(), attr: {required: ForeignKey()?'True':null}\" placeholder=\"Ex EmployeeName\" style=\"display: none;\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bind=\"visible:ForeignKey()\" data-toggle=\"tooltip\" data-placement=\"right\" class=\"fa fa-question-circle helptip\" style=\"display: none;\" title=\"Foreign Value field is a Column from the Foreign table which is used to display the value to the User in the Report Designer\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div data-bind=\"if: ForeignKey\">\r\n <div class=\"alert alert-info\">\r\n You can setup a cascading filter by setting up a parent for the foreign key below\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Setup Foreign Key Parent?</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" type=\"checkbox\" data-bind=\"checked:ForeignParentKey\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-toggle=\"tooltip\" data-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Foreign keys parent allows cascading dropdown selection in Filters\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignParentKey(), attr: {required: ForeignParentKey()?'True':null, placeholder: 'Ex tblEmployees'}\" placeholder=\"Ex tblEmployees\" style=\"display: none;\">Parent Table</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-control\" data-bind=\"value: ForeignJoinTable, visible:ForeignParentKey(), options: $root.Tables.model, optionsText: 'TableName'\" placeholder=\"Ex tblEmployees\" style=\"display: none;\"></select>\r\n\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span class=\"field-validation-valid help-inline indent\" data-valmsg-for=\"ForeignJoinTable\" data-valmsg-replace=\"true\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"control-group\" data-bind=\"visible:ForeignParentKey()\" style=\"display: none;\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"attr: {required: ForeignParentKey()?'True':null, placeholder: 'Ex EmployeeId'}\">Parent Key Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-control\" data-bind=\"options: ForeignJoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignParentKeyField, attr: {required: ForeignParentKey()?'True':null}\" placeholder=\"Ex EmployeeId\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-toggle=\"tooltip\" data-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Parent Key field is a Column from the Parent table which is used as the key in cascading filters\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"visible:ForeignParentKey()\" style=\"display: none;\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"attr: {required: ForeignParentKey()?'True':null, placeholder: 'Ex EmployeeName'}\">Parent Value Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-control\" data-bind=\"options: ForeignJoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignParentValueField, attr: {required: ForeignParentKey()?'True':null}\" placeholder=\"Ex EmployeeName\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-toggle=\"tooltip\" data-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Parent Value field is a Column from the Parent table which is used to display the value to the User in the Report Designer for cascading filters\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"visible:ForeignParentKey()\" style=\"display: none;\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"attr: {required: ForeignParentKey()?'True':null, placeholder: 'Ex EmployeeName'}\">Foreign Key Filter Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-control\" data-bind=\"options: JoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignParentApplyTo, attr: {required: ForeignParentKey()?'True':null}\" placeholder=\"Ex EmployeeName\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-toggle=\"tooltip\" data-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Foreign Key Filter Value field is a Column from the Foreign table where the selected parent filter will be applied for cascading filters\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <!--<div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Require Foreign Key Parent?</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" type=\"checkbox\" data-bind=\"checked:ForeignParentRequired\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-toggle=\"tooltip\" data-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Foreign keys parent can be optional or set to required for cascading filters\"></span>\r\n </div>\r\n </div>\r\n </div>-->\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button class=\"btn btn-secondary\" title=\"Manage Role Access\" data-toggle=\"modal\" data-target=\"#role-access-modal\" data-bind=\"click: $root.selectAllowedRoles\">\r\n <i class=\"fa fa-user\"></i>Manage Role Access\r\n </button>\r\n <button type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\">Done</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"modal\" id=\"procedure-modal\" role=\"dialog\" tabindex=\"-2\">\r\n <div class=\"modal-dialog modal-lg\" role=\"document\">\r\n <div class=\"modal-content \">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">Add Stored Proc</h4>\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">×</span></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <label class=\"col-md-2 control-label\">\r\n Search for\r\n </label>\r\n <div class=\"col-md-6\">\r\n <input type=\"text\" class=\"form-control\" data-bind=\"value: searchProcedureTerm\" placeholder=\"Search stored procedures by name\" />\r\n </div>\r\n <div class=\"col-md-2\">\r\n <button class=\"btn btn-primary\" data-bind=\"click: searchStoredProcedure\">Search</button>\r\n </div>\r\n </div>\r\n <br />\r\n <div class=\"menu row\" style=\"margin-left: 20px;\" data-bind=\"foreach: foundProcedures\">\r\n <div class=\"menu-category card\">\r\n <div class=\"card-header clearfix\">\r\n <div class=\"pull-left\">\r\n <label>\r\n <span data-bind=\"text: TableName\"></span>\r\n <span class=\"label-xs\">Procedure</span>\r\n </label>\r\n <button class=\"btn btn-sm\" title=\"Save this Procedure\" data-bind=\"click: function(){$root.saveProcedure($data.TableName, true);}\">\r\n <span class=\"fa fa-save\"></span>\r\n </button>\r\n </div>\r\n <a class=\"pull-right\" data-toggle=\"collapse\" data-bind=\"attr: {'data-target': '#sp_'+$index()}\">\r\n <span class=\"fa fa-chevron-down\"></span>\r\n </a>\r\n </div>\r\n <div data-bind=\"attr: {id: 'sp_'+$index()}\" class=\"panel-collapse collapse in\">\r\n <div class=\"card-body\">\r\n Display Name<br />\r\n <span data-bind=\"editable: DisplayName\"></span>\r\n <label class=\"small\">Columns</label>\r\n\r\n <div class=\"list-group\" data-bind=\"foreach: Columns\">\r\n <div class=\"list-group-item\">\r\n <span data-bind=\"editable: DisplayName\"></span>\r\n <span class=\"badge badge-info\" data-bind=\"text: FieldType\"></span>\r\n </div>\r\n </div>\r\n <label class=\"small\">Paramters</label>\r\n\r\n <div class=\"list-group\" data-bind=\"foreach: Parameters\">\r\n <div class=\"list-group-item\">\r\n <span data-bind=\"editable: DisplayName\"></span>\r\n <span class=\"badge badge-info\" data-bind=\"text: ParameterDataTypeString\"></span><br />\r\n Default Value: <span data-bind=\"editable: ParameterValue\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-primary\" data-dismiss=\"modal\">Done</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"modal\" id=\"parameter-modal\" role=\"dialog\" tabindex=\"-1\">\r\n <div class=\"modal-dialog\" role=\"document\">\r\n <div class=\"modal-content\" data-bind=\"with: editParameter()\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\" id=\"myModalLabel\">\r\n Manage\r\n <label data-bind=\"text: ParameterName\"></label>\r\n </h4>\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">×</span></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <p>Choose options that will determine how users interact with this parameter on Reports</p>\r\n <div class=\"form-horizontal\">\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"attr:{placeholder:'Ex First Name'}\" placeholder=\"Ex First Name\">Display Name</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <input class=\"form-control text-box single-line\" data-val=\"true\" data-val-required=\"The DisplayName field is required.\" name=\"DisplayName\" type=\"text\" value=\"First Name\" data-bind=\"value: DisplayName, attr:{placeholder:'Ex First Name'}\" placeholder=\"Ex First Name\">\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-toggle=\"tooltip\" data-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"This is a friendly name to display to your users\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Default Value</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <span data-bind=\"editable: ParameterValue\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"\">Hidden Parameter</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" type=\"checkbox\" value=\"true\" data-bind=\"checked: Hidden, enable: ParameterValue\">\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"\">Required</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" type=\"checkbox\" value=\"true\" data-bind=\"checked:Required\">\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"\">Use Lookup Table</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" name=\"ForeignKey\" type=\"checkbox\" value=\"true\" data-bind=\"checked:ForeignKey\"><input name=\"ForeignKey\" type=\"hidden\" value=\"false\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-toggle=\"tooltip\" data-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Using lookup table allows friendly selection in report using a Dropdown List\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null, placeholder: 'Ex tblEmployees'}\" placeholder=\"Ex tblEmployees\" style=\"display: none;\">Lookup Table</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-control\" data-bind=\"value: JoinTable, visible:ForeignKey(), options: $root.Procedures.tables, optionsText: 'TableName'\" placeholder=\"Ex tblEmployees\" style=\"display: none;\"></select>\r\n\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span class=\"field-validation-valid help-inline indent\" data-valmsg-for=\"ForeignTable\" data-valmsg-replace=\"true\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null, placeholder: 'Ex EmployeeId'}\" placeholder=\"Ex EmployeeId\" style=\"display: none;\">Lookup Key Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-control\" name=\"ForeignKeyField\" data-bind=\"options: JoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignKeyField, visible:ForeignKey(), attr: {required: ForeignKey()?'True':null}\" placeholder=\"Ex EmployeeId\" style=\"display: none;\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bind=\"visible:ForeignKey()\" data-toggle=\"tooltip\" data-placement=\"right\" class=\"fa fa-question-circle helptip\" style=\"display: none;\" title=\"Foreign Key field is a Column from the Foreign table which is used as the Key field\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null, placeholder: 'Ex EmployeeName'}\" placeholder=\"Ex EmployeeName\" style=\"display: none;\">Lookup Value Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-control\" name=\"ForeignValueField\" data-bind=\"options: JoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignValueField, visible:ForeignKey(), attr: {required: ForeignKey()?'True':null}\" placeholder=\"Ex EmployeeName\" style=\"display: none;\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bind=\"visible:ForeignKey()\" data-toggle=\"tooltip\" data-placement=\"right\" class=\"fa fa-question-circle helptip\" style=\"display: none;\" title=\"Lookup Value field is a Column from the Lookup table which is used to display the value to the User in the Report Designer\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\">Done</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"modal fade\" id=\"role-access-modal\" role=\"dialog\" tabindex=\"-2\">\r\n <div class=\"modal-dialog\" role=\"document\">\r\n <div class=\"modal-content\" data-bind=\"with: editAllowedRoles\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">Manage Access by Roles</h4>\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">×</span></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <p>Choose User Roles that will have Access</p>\r\n <p class=\"small\">Note: All Users will have access if no restricted roles are setup</p>\r\n <div class=\"list-group\" data-bind=\"foreach: AllowedRoles\">\r\n <div class=\"list-group-item\" style=\"padding-top: 2px; padding-bottom: 2px;\">\r\n <span data-bind=\"text: $data\"></span>\r\n <button class=\"btn btn-sm btn-danger pull-right\"><i class=\"fa fa-trash\" data-bind=\"click: $root.removeAllowedRole\"></i></button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-10\">\r\n <input class=\"form-control\" type=\"text\" data-bind=\"value: $root.newAllowedRole\" placeholder=\"Ex Sales\">\r\n </div>\r\n <div class=\"col-2\">\r\n <button class=\"btn btn-primary\" data-bind=\"click: $root.addAllowedRole\">Add</button>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\">Done</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"clearfix\"></div>\r\n\r\n<div class=\"modal\" id=\"add-connection-modal\" role=\"dialog\">\r\n <div class=\"modal-dialog\" role=\"document\">\r\n <div class=\"modal-content\" data-bind=\"with: newDataConnection\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">Add a new Data Connection</h4>\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">×</span></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <p>Choose User Roles that will have Access</p>\r\n <p class=\"small\">Note: All Users will have access if no restricted roles are setup</p>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Connection Name</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <input class=\"form-control text-box\" data-val=\"true\" data-val-required=\"Connection Name is required.\" type=\"text\" data-bind=\"value: Name\" placeholder=\"\" id=\"add-conn-name\">\r\n </div>\r\n </div>\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Connection Key</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <input class=\"form-control text-box\" data-val=\"true\" data-val-required=\"Connection Key is required.\" type=\"text\" data-bind=\"value: ConnectionKey\" placeholder=\"\" id=\"add-conn-key\">\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-toggle=\"tooltip\" data-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"This is the Connection Key in your web.config for your SQL Connection String\"></span>\r\n </div>\r\n </div>\r\n <div class=\"form-group row\">\r\n <div class=\"check-box col-md-12\">\r\n <label>\r\n <input type=\"checkbox\" data-bind=\"checked: copySchema\">\r\n Copy Schema from existing Connection\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"form-group row\" data-bind=\"visible: copySchema\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Choose Connection</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-control\" style=\"max-width: 300px;\" data-bind=\"options: $root.DataConnections, optionsText: 'DataConnectName', optionsValue: 'DataConnectGuid', value: copyFrom\"></select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bind=\"click: $root.addDataConnection\">Create</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"clearfix\"></div>\r\n\r\n<div class=\"modal\" id=\"custom-sql-modal\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog modal-lg\" data-bind=\"with: customSql\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\">Enter Select SQL for your Data</h5>\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">\r\n <span aria-hidden=\"true\">×</span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"form-group\" data-bind=\"validationElement: customTableName\">\r\n <label for=\"custom-table-name\">Custom Table Name</label>\r\n <input type=\"text\" class=\"form-control\" name=\"customTableName\" placeholder=\"Enter table name\" data-bind=\"textInput: customTableName\" required>\r\n <div class=\"invalid-feedback\">Custom Table Name is required.</div>\r\n </div>\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" type=\"checkbox\" data-bind=\"checked: useAi\"> Use ChatGPT to build the query?\r\n </label>\r\n </div>\r\n <div data-bind=\"visible: useAi\">\r\n <p id=\"query-input\" class=\"query-input\">\r\n Show me \r\n </p>\r\n <button data-bind=\"click: buildSqlUsingAi\" class=\"btn btn-primary btn-sm\">Process with ChatGPT</button>\r\n <button data-bind=\"click: textQuery.resetQuery\" class=\"btn btn-secondary btn-sm\">Start over</button>\r\n <hr />\r\n </div>\r\n\r\n <div class=\"form-group\" data-bind=\"validationElement: customSql\">\r\n <label for=\"custom-sql\">Custom SQL</label> | <a href=\"#\" data-bind=\"click: beautifySql\">Beautify Sql</a>\r\n <textarea class=\"form-control\" style=\"height: 240px;\" name=\"customSql\" data-bind=\"textInput: customSql\" required></textarea>\r\n <div class=\"invalid-feedback\">Custom SQL is required.</div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary\" data-bind=\"click: executeSql\">Save changes</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n</div>\r\n\r\n<!-- Templates -->\r\n<div [innerHtml]=\"reportTemplates\"></div>\r\n<!-- Templates -->", styles: [".glyphicon-ok:before{content:\"\\f00c\"}.glyphicon-remove:before{content:\"\\f00d\"}.glyphicon{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}\n"] });
|
|
1425
1604
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DotnetsetupComponent, decorators: [{
|
|
1426
1605
|
type: Component,
|
|
1427
1606
|
args: [{
|
|
@@ -1433,4 +1612,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
1433
1612
|
type: Inject,
|
|
1434
1613
|
args: [BASE_URL_TOKEN]
|
|
1435
1614
|
}] }, { type: i2.HttpClient }, { type: i3.ActivatedRoute }]; } });
|
|
1436
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG90bmV0c2V0dXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZG90bmV0cmVwb3J0LWxpYi9zcmMvbGliL2RvdG5ldHNldHVwL2RvdG5ldHNldHVwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RvdG5ldHJlcG9ydC1saWIvc3JjL2xpYi9kb3RuZXRzZXR1cC9kb3RuZXRzZXR1cC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxNQUFNLEVBQStCLE1BQU0sZUFBZSxDQUFDO0FBRWxHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7QUFZMUQsTUFBTSxPQUFPLG9CQUFvQjtJQUsvQixZQUFZLFFBQWtCLEVBQ3BCLFNBQXVCLEVBQ3ZCLEtBQXdCLEVBQ0EsT0FBZSxFQUN2QyxJQUFnQixFQUNoQixLQUFxQjtRQUpyQixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBQ3ZCLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQ0EsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUN2QyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBRTNCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyw4QkFBOEI7UUFDM0UsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUdILFFBQVE7UUFDTixJQUFJLGtCQUFrQixHQUFHLElBQUksQ0FBQyxjQUFjLEdBQUcsa0NBQWtDLENBQUM7UUFDbEYsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7UUFDbkQsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUU5RCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsR0FBRyxjQUFjLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUM3RixJQUFJLE9BQU8sR0FBRztnQkFDVixLQUFLLEVBQUUsS0FBSztnQkFDWixZQUFZLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxxQkFBcUI7Z0JBQ2xELGNBQWMsRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLHVCQUF1QjtnQkFDdEQsZUFBZSxFQUFFLEtBQUssQ0FBQyxNQUFNLEdBQUcsd0JBQXdCO2dCQUN4RCxxQkFBcUIsRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLDhCQUE4QjtnQkFDcEUsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyx5QkFBeUI7Z0JBQzFELG9CQUFvQixFQUFFLEtBQUssQ0FBQyxNQUFNLEdBQUcsNkJBQTZCO2dCQUNsRSxXQUFXLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyx5QkFBeUI7Z0JBQ3JELGFBQWEsRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLDJCQUEyQjtnQkFDekQsYUFBYSxFQUFFLEtBQUssQ0FBQyxNQUFNO2dCQUMzQixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsY0FBYyxHQUFHLG1DQUFtQztnQkFDM0UsYUFBYSxFQUFHLElBQUksQ0FBQyxjQUFjLEdBQUcsa0NBQWtDO2dCQUN4RSxnQkFBZ0IsRUFBRyxJQUFJLENBQUMsY0FBYyxHQUFHLG1DQUFtQztnQkFDNUUsTUFBTSxFQUFHLElBQUksQ0FBQyxjQUFjLEdBQUcsZ0NBQWdDO2FBQ2xFLENBQUM7WUFFRixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN6QixJQUFJLEVBQUUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN0QyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZixFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN2QixFQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztZQUVoRSxFQUFFLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUN6QixFQUFFLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUV4QyxDQUFDLENBQUMsQ0FBQztJQUVMLENBQUM7SUFFRCxXQUFXO1FBQ1QsRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRU0sSUFBSTtRQUNSLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRU0saUJBQWlCO1FBRXhCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcTFDN0QsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM3QixDQUFDOztrSEF0NUNZLG9CQUFvQix1R0FRckIsY0FBYztzR0FSYixvQkFBb0IsdURDZmpDLHE3K0VBdytCa0I7NEZEejlCTCxvQkFBb0I7a0JBTmhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsV0FBVyxFQUFFLDhCQUE4QjtvQkFDM0MsU0FBUyxFQUFFLENBQUMsNkJBQTZCLENBQUM7aUJBQzNDOzswQkFVSSxNQUFNOzJCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbmplY3QsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IEJBU0VfVVJMX1RPS0VOIH0gZnJvbSAnLi8uLi9kb3RuZXRyZXBvcnQtbGliLmRpJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuZGVjbGFyZSB2YXIga286IGFueTtcclxuZGVjbGFyZSB2YXIgbWFuYWdlVmlld01vZGVsOiBhbnk7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1kb3RuZXRzZXR1cCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RvdG5ldHNldHVwLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kb3RuZXRzZXR1cC5jb21wb25lbnQuY3NzJ11cclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBEb3RuZXRzZXR1cENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIGJhc2VTZXJ2aWNlVXJsOiBzdHJpbmc7XHJcbiAgcHVibGljIHJlcG9ydFRlbXBsYXRlczogU2FmZUh0bWw7XHJcbiAgcHJpdmF0ZSBxdWVyeVBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcclxuXHJcbiAgY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcclxuICAgIHByaXZhdGUgY2RyZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQEluamVjdChCQVNFX1VSTF9UT0tFTikgcHJpdmF0ZSBiYXNlVXJsOiBzdHJpbmcsXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSkgeyBcclxuXHJcbiAgICAgIHRoaXMuYmFzZVNlcnZpY2VVcmwgPSB0aGlzLmJhc2VVcmwgKyAnL2FwaSc7IC8vIFwiaHR0cDovL2xvY2FsaG9zdDozOTM3OFwiOyBcXFxyXG4gICAgICB0aGlzLnJlcG9ydFRlbXBsYXRlcyA9IFwiXCI7XHJcbiAgICB9XHJcblxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGxldCBsb2FkU2V0dXBTY2hlbWFVcmwgPSB0aGlzLmJhc2VTZXJ2aWNlVXJsICsgXCIvRG90TmV0UmVwb3J0QXBpL0xvYWRTZXR1cFNjaGVtYVwiO1xyXG4gICAgdGhpcy5xdWVyeVBhcmFtcyA9IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXM7XHJcbiAgICB2YXIgZGF0YWJhc2VBcGlLZXkgPSB0aGlzLnF1ZXJ5UGFyYW1zWydkYXRhYmFzZUFwaUtleSddIHx8ICcnO1xyXG4gICBcclxuICAgIHRoaXMuaHR0cC5nZXQobG9hZFNldHVwU2NoZW1hVXJsICsgXCI/ZGF0YWJhc2VBcGlLZXk9XCIgKyBkYXRhYmFzZUFwaUtleSkuc3Vic2NyaWJlKChtb2RlbDogYW55KSA9PiB7XHJcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIG1vZGVsOiBtb2RlbCxcclxuICAgICAgICAgICAgc2F2ZVRhYmxlVXJsOiBtb2RlbC5BcGlVcmwgKyAnUmVwb3J0QXBpL1NhdmVUYWJsZScsXHJcbiAgICAgICAgICAgIGRlbGV0ZVRhYmxlVXJsOiBtb2RlbC5BcGlVcmwgKyAnUmVwb3J0QXBpL0RlbGV0ZVRhYmxlJyxcclxuICAgICAgICAgICAgZ2V0UmVsYXRpb25zVXJsOiBtb2RlbC5BcGlVcmwgKyAnUmVwb3J0QXBpL0dldFJlbGF0aW9ucycsXHJcbiAgICAgICAgICAgIGdldERhdGFDb25uZWN0aW9uc1VybDogbW9kZWwuQXBpVXJsICsgJ1JlcG9ydEFwaS9HZXREYXRhQ29ubmVjdGlvbnMnLFxyXG4gICAgICAgICAgICBzYXZlUmVsYXRpb25zVXJsOiBtb2RlbC5BcGlVcmwgKyAnUmVwb3J0QXBpL1NhdmVSZWxhdGlvbnMnLFxyXG4gICAgICAgICAgICBhZGREYXRhQ29ubmVjdGlvblVybDogbW9kZWwuQXBpVXJsICsgJ1JlcG9ydEFwaS9BZGREYXRhQ29ubmVjdGlvbicsXHJcbiAgICAgICAgICAgIHNhdmVQcm9jVXJsOiBtb2RlbC5BcGlVcmwgKyAnUmVwb3J0QXBpL1NhdmVQcm9jZWR1cmUnLFxyXG4gICAgICAgICAgICBkZWxldGVQcm9jVXJsOiBtb2RlbC5BcGlVcmwgKyAnUmVwb3J0QXBpL0RlbGV0ZVByb2NlZHVyZScsXHJcbiAgICAgICAgICAgIHJlcG9ydHNBcGlVcmw6IG1vZGVsLkFwaVVybCxcclxuICAgICAgICAgICAgZ2V0VXNlcnNBbmRSb2xlczogdGhpcy5iYXNlU2VydmljZVVybCArICcvRG90TmV0UmVwb3J0QXBpL0dldFVzZXJzQW5kUm9sZXMnLFxyXG4gICAgICAgICAgICBzZWFyY2hQcm9jVXJsOiAgdGhpcy5iYXNlU2VydmljZVVybCArICcvRG90TmV0UmVwb3J0QXBpL1NlYXJjaFByb2NlZHVyZScsXHJcbiAgICAgICAgICAgIGdldFNjaGVtYUZyb21TcWw6ICB0aGlzLmJhc2VTZXJ2aWNlVXJsICsgJy9Eb3ROZXRSZXBvcnRBcGkvR2V0U2NoZW1hRnJvbVNxbCcsXHJcbiAgICAgICAgICAgIGFwaVVybDogIHRoaXMuYmFzZVNlcnZpY2VVcmwgKyAnL0RvdE5ldFJlcG9ydEFwaS9DYWxsUmVwb3J0QXBpJyxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnJlbmRlcktPVGVtcGxhdGVzKCk7XHJcbiAgICAgICAgdmFyIHZtID0gbmV3IG1hbmFnZVZpZXdNb2RlbChvcHRpb25zKTtcclxuICAgICAgICB2bS5Mb2FkSm9pbnMoKTtcclxuICAgICAgICB2bS5zZXR1cE1hbmFnZUFjY2VzcygpO1xyXG4gICAgICAgIGtvLmFwcGx5QmluZGluZ3Modm0sIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb3QtbmV0LXJlcG9ydCcpKTtcclxuXHJcbiAgICAgICAgdm0uTG9hZERhdGFDb25uZWN0aW9ucygpO1xyXG4gICAgICAgIHZtLmN1c3RvbVNxbC50ZXh0UXVlcnkuc2V0dXBRdWVyeSgpO1xyXG4gICAgICAgICAgICBcclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAga28uY2xlYW5Ob2RlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb3QtbmV0LXJlcG9ydCcpKTtcclxuIH1cclxuIFxyXG4gcHVibGljIGluaXQoKSB7XHJcbiAgICB0aGlzLm5nT25Jbml0KCk7XHJcbiAgfVxyXG5cclxuIHByaXZhdGUgcmVuZGVyS09UZW1wbGF0ZXMoKSB7XHJcbiAgXHJcbiAgdGhpcy5yZXBvcnRUZW1wbGF0ZXMgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChgXHJcbiAgPCEtLSBEb3RuZXQgUmVwb3J0IEhUTUwgVGVtcGxhdGVzIC0tPlxyXG4gIDxzY3JpcHQgdHlwZT1cInRleHQvaHRtbFwiIGlkPVwicmVwb3J0LWZpbHRlclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgPCEtLSBrbyBpZjogIWhhc0ZvcmVpZ25LZXktLT5cclxuICAgICAgICAgIDwhLS0ga28gaWY6IGZpZWxkVHlwZT09J0RhdGVUaW1lJy0tPlxyXG4gICAgICAgICAgPCEtLSBrbyBpZjogWyc9JywnPicsJzwnLCc+PScsJzw9JywgJ25vdCBlcXVhbCddLmluZGV4T2YoJHBhcmVudC5PcGVyYXRvcigpKSAhPSAtMSAtLT5cclxuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cImRhdGVwaWNrZXI6ICRwYXJlbnQuVmFsdWVcIiByZXF1aXJlZCAvPlxyXG4gICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICA8IS0tIGtvIGlmOiBbJ2JldHdlZW4nXS5pbmRleE9mKCRwYXJlbnQuT3BlcmF0b3IoKSkgIT0gLTEgLS0+XHJcbiAgICAgICAgICBGcm9tXHJcbiAgICAgICAgICA8aW5wdXQgcmVxdWlyZWQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJkYXRlcGlja2VyOiAkcGFyZW50LlZhbHVlXCIgLz5cclxuICAgICAgICAgIHRvXHJcbiAgICAgICAgICA8aW5wdXQgZGF0YS1iaW5kPVwiZGF0ZXBpY2tlcjogJHBhcmVudC5WYWx1ZTJcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJlcXVpcmVkIC8+XHJcbiAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgIDwhLS0ga28gaWY6IFsncmFuZ2UnXS5pbmRleE9mKCRwYXJlbnQuT3BlcmF0b3IoKSkgIT0gLTEgLS0+XHJcbiAgICAgICAgICA8c2VsZWN0IGRhdGEtYmluZD1cInZhbHVlOiAkcGFyZW50LlZhbHVlXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByZXF1aXJlZD5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbj5Ub2RheTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24+VG9kYXkgKzwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24+VG9kYXkgLTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24+WWVzdGVyZGF5PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbj5UaGlzIFdlZWs8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uPkxhc3QgV2Vlazwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24+VGhpcyBNb250aDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24+TGFzdCBNb250aDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24+VGhpcyBZZWFyPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbj5MYXN0IFllYXI8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uPlRoaXMgTW9udGggVG8gRGF0ZTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24+VGhpcyBZZWFyIFRvIERhdGU8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uPkxhc3QgMzAgRGF5czwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDxvcHRncm91cCBsYWJlbD1cIkNvbXBhcmlzb24gT3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8b3B0aW9uPj49IFRvZGF5PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgIDxvcHRpb24+PD0gVG9kYXk8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgPG9wdGlvbj4+PSBUb2RheSArPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgIDxvcHRpb24+PD0gVG9kYXkgKzwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICA8b3B0aW9uPj49IFRvZGF5IC08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgPG9wdGlvbj48PSBUb2RheSAtPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgPC9vcHRncm91cD5cclxuICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogJHBhcmVudC5WYWx1ZSgpLmluZGV4T2YoJ1RvZGF5ICsnKSA+PSAwIHx8ICRwYXJlbnQuVmFsdWUoKS5pbmRleE9mKCdUb2RheSAtJykgPj0gMFwiIGNsYXNzPVwiZm9ybS1ncm91cCBwdWxsLWxlZnRcIiBzdHlsZT1cInBhZGRpbmctdG9wOiA1cHg7XCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC1zbSBwdWxsLWxlZnRcIiBzdHlsZT1cIndpZHRoOiA4MHB4O1wiIGRhdGEtYmluZD1cInZhbHVlOiAkcGFyZW50LlZhbHVlMlwiIHJlcXVpcmVkIC8+PHNwYW4gc3R5bGU9XCJwYWRkaW5nOiA1cHggNXB4O1wiIGNsYXNzPVwicHVsbC1sZWZ0XCI+IGRheXM8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICA8IS0tIGtvIGlmOiBbJ0ludCcsJ01vbmV5JywnRmxvYXQnLCdEb3VibGUnXS5pbmRleE9mKGZpZWxkVHlwZSkgIT0gLTEgLS0+XHJcbiAgICAgICAgICA8IS0tIGtvIGlmOiBbJz0nLCc+JywnPCcsJz49JywnPD0nLCAnbm90IGVxdWFsJ10uaW5kZXhPZigkcGFyZW50Lk9wZXJhdG9yKCkpICE9IC0xICYmIFsnaXMgYmxhbmsnLCAnaXMgbm90IGJsYW5rJywgJ2lzIG51bGwnLCAnaXMgbm90IG51bGwnXS5pbmRleE9mKCRwYXJlbnQuT3BlcmF0b3IoKSkgPT0gLTEgLS0+XHJcbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiB0eXBlPVwibnVtYmVyXCIgZGF0YS1iaW5kPVwidmFsdWU6ICRwYXJlbnQuVmFsdWUsIGRpc2FibGU6ICRwYXJlbnQuT3BlcmF0b3IoKSA9PSAnaXMgZGVmYXVsdCdcIiByZXF1aXJlZCAvPlxyXG4gICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICA8IS0tIGtvIGlmOiBbJ2JldHdlZW4nXS5pbmRleE9mKCRwYXJlbnQuT3BlcmF0b3IoKSkgIT0gLTEgLS0+XHJcbiAgICAgICAgICBGcm9tXHJcbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiB0eXBlPVwibnVtYmVyXCIgZGF0YS1iaW5kPVwidmFsdWU6ICRwYXJlbnQuVmFsdWVcIiByZXF1aXJlZCAvPlxyXG4gICAgICAgICAgdG9cclxuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIHR5cGU9XCJudW1iZXJcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogJHBhcmVudC5WYWx1ZTJcIiByZXF1aXJlZCAvPlxyXG4gICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgIDwhLS0ga28gaWY6IGZpZWxkVHlwZT09J0Jvb2xlYW4nICYmIFsnaXMgYmxhbmsnLCAnaXMgbm90IGJsYW5rJywgJ2lzIG51bGwnLCAnaXMgbm90IG51bGwnXS5pbmRleE9mKCRwYXJlbnQuT3BlcmF0b3IoKSkgPT0gLTEgLS0+XHJcbiAgICAgICAgICA8c2VsZWN0IHJlcXVpcmVkIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZGF0YS1iaW5kPVwidmFsdWU6ICRwYXJlbnQuVmFsdWUsIGRpc2FibGU6ICRwYXJlbnQuT3BlcmF0b3IoKSA9PSAnaXMgZGVmYXVsdCdcIj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMVwiPlllczwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIwXCI+Tm88L29wdGlvbj5cclxuICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICA8IS0tIGtvIGlmOiBbJ0ludCcsJ01vbmV5JywnRmxvYXQnLCdEb3VibGUnLCdEYXRlJywnRGF0ZVRpbWUnLCdCb29sZWFuJ10uaW5kZXhPZihmaWVsZFR5cGUpID09IC0xICYmIFsnaXMgYmxhbmsnLCAnaXMgbm90IGJsYW5rJywgJ2lzIG51bGwnLCAnaXMgbm90IG51bGwnXS5pbmRleE9mKCRwYXJlbnQuT3BlcmF0b3IoKSkgPT0gLTEgLS0+XHJcbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiB0eXBlPVwidGV4dFwiIGRhdGEtYmluZD1cInZhbHVlOiAkcGFyZW50LlZhbHVlLCBkaXNhYmxlOiAkcGFyZW50Lk9wZXJhdG9yKCkgPT0gJ2lzIGRlZmF1bHQnXCIgcmVxdWlyZWQgLz5cclxuICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICA8IS0tIGtvIGlmOiBoYXNGb3JlaWduS2V5LS0+XHJcbiAgICAgICAgICA8IS0tIGtvIGlmOiBoYXNGb3JlaWduUGFyZW50S2V5ICYmICRwYXJlbnQuc2hvd1BhcmVudEZpbHRlcigpIC0tPlxyXG4gICAgICAgICAgPHNlbGVjdCBtdWx0aXBsZSBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cInNlbGVjdDI6IHsgcGxhY2Vob2xkZXI6ICdQbGVhc2UgQ2hvb3NlJywgYWxsb3dDbGVhcjogdHJ1ZSB9LCBvcHRpb25zOiAkcGFyZW50LlBhcmVudExpc3QsIG9wdGlvbnNUZXh0OiAndGV4dCcsIG9wdGlvbnNWYWx1ZTogJ2lkJywgc2VsZWN0ZWRPcHRpb25zOiAkcGFyZW50LlBhcmVudEluXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgIDwhLS0ga28gaWY6ICRwYXJlbnQuT3BlcmF0b3IoKT09Jz0nLS0+XHJcbiAgICAgICAgICA8c2VsZWN0IHJlcXVpcmVkIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZGF0YS1iaW5kPVwib3B0aW9uczogJHBhcmVudC5Mb29rdXBMaXN0LCBvcHRpb25zVGV4dDogJ3RleHQnLCBvcHRpb25zVmFsdWU6ICdpZCcsIHZhbHVlOiAkcGFyZW50LlZhbHVlLCBvcHRpb25zQ2FwdGlvbjogJ1BsZWFzZSBDaG9vc2UnXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgIDwhLS0ga28gaWY6ICRwYXJlbnQuT3BlcmF0b3IoKT09J2luJyB8fCAkcGFyZW50Lk9wZXJhdG9yKCk9PSdub3QgaW4nLS0+XHJcbiAgICAgICAgICA8c2VsZWN0IHJlcXVpcmVkIG11bHRpcGxlIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZGF0YS1iaW5kPVwic2VsZWN0MjogeyBwbGFjZWhvbGRlcjogJ1BsZWFzZSBDaG9vc2UnLCBhbGxvd0NsZWFyOiB0cnVlIH0sIG9wdGlvbnM6ICRwYXJlbnQuTG9va3VwTGlzdCwgb3B0aW9uc1RleHQ6ICd0ZXh0Jywgb3B0aW9uc1ZhbHVlOiAnaWQnLCBzZWxlY3RlZE9wdGlvbnM6ICRwYXJlbnQuVmFsdWVJblwiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgPC9kaXY+XHJcbiAgPC9zY3JpcHQ+XHJcbiAgPHNjcmlwdCB0eXBlPVwidGV4dC9odG1sXCIgaWQ9XCJwYWdlci10ZW1wbGF0ZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicGFnZXItY29udGFpbmVyXCI+XHJcbiAgICAgICAgICA8YSBocmVmPVwiXCIgdGl0bGU9XCJmaXJzdFwiIGRhdGEtYmluZD1cImNsaWNrOiBmaXJzdCwgZW5hYmxlOiAhaXNGaXJzdFBhZ2UoKVwiPjxpIGNsYXNzPVwiZmEgZmEtYmFja3dhcmQgcmVwb3J0LXBhZ2VyLWJ0blwiIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4O1wiPjwvaT48L2E+Jm5ic3A7XHJcbiAgICAgICAgICA8YSBocmVmPVwiXCIgdGl0bGU9XCJwcmV2aW91c1wiIGRhdGEtYmluZD1cImNsaWNrOiBwcmV2aW91cywgZW5hYmxlOiAhaXNGaXJzdFBhZ2UoKVwiPjxpIGNsYXNzPVwiZmEgZmEtY2FyZXQtbGVmdCBmYS0yeCByZXBvcnQtcGFnZXItYnRuXCI+PC9pPjwvYT5cclxuICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCIgZGF0YS1iaW5kPVwib3B0aW9uczogWzEwLDMwLDUwLDEwMCwxNTAsMjAwLDUwMF0sIHZhbHVlOiBwYWdlU2l6ZVwiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWdlci1wYWdlaW5mb1wiPlxyXG4gICAgICAgICAgICAgIDxzcGFuPlBhZ2U8L3NwYW4+Jm5ic3A7XHJcbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBtaW49XCIxXCIgcGF0dGVybj1cIlswLTldKlwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbSB0ZXh0LWNlbnRlclwiIGRhdGEtYmluZD1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGN1cnJlbnRQYWdlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cjogeyBtYXg6IHBhZ2VzKCkgfVwiIC8+Jm5ic3A7XHJcbiAgICAgICAgICAgICAgPHNwYW4+b2Y8L3NwYW4+Jm5ic3A7XHJcbiAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogcGFnZXNcIj48L3NwYW4+XHJcbiAgICAgICAgICA8L3NwYW4+Jm5ic3A7XHJcbiAgXHJcbiAgICAgICAgICA8YSBocmVmPVwiXCIgdGl0bGU9XCJuZXh0XCIgZGF0YS1iaW5kPVwiY2xpY2s6IG5leHQsIGVuYWJsZTogIWlzTGFzdFBhZ2UoKVwiPjxpIGNsYXNzPVwiZmEgZmEtY2FyZXQtcmlnaHQgZmEtMnggcmVwb3J0LXBhZ2VyLWJ0blwiPjwvaT48L2E+Jm5ic3A7XHJcbiAgICAgICAgICA8YSBocmVmPVwiXCIgdGl0bGU9XCJsYXN0XCIgZGF0YS1iaW5kPVwiY2xpY2s6IGxhc3QsIGVuYWJsZTogIWlzTGFzdFBhZ2UoKVwiPjxpIGNsYXNzPVwiZmEgZmEtZm9yd2FyZCByZXBvcnQtcGFnZXItYnRuXCIgc3R5bGU9XCJmb250LXNpemU6IDE4cHg7XCI+PC9pPjwvYT5cclxuICAgICAgPC9kaXY+XHJcbiAgPC9zY3JpcHQ+XHJcbiAgXHJcbiAgPHNjcmlwdCB0eXBlPVwidGV4dC9odG1sXCIgaWQ9XCJyZXBvcnQtY29sdW1uLWhlYWRlclwiPlxyXG4gICAgICA8IS0tIGtvIGZvcmVhY2g6IENvbHVtbnMgLS0+XHJcbiAgICAgIDx0aCBkYXRhLWJpbmQ9XCJhdHRyOiB7IGlkOiBmaWVsZElkIH0sIGNzczogeydyaWdodC1hbGlnbic6IElzTnVtZXJpY30sIHN0eWxlOiB7J3dpZHRoJzogZmllbGRXaWR0aCwgJ2JhY2tncm91bmQtY29sb3InOiBoZWFkZXJCYWNrQ29sb3IgfSwgaGlkZGVuOiBvdXRlckdyb3VwXCIgc3R5bGU9XCJib3JkZXItcmlnaHQ6IDFweCBzb2xpZDtcIj5cclxuICAgICAgICAgIDwhLS0ga28gaWY6ICRwYXJlbnRzWzNdLnVzZVN0b3JlZFByb2MgPyAkcGFyZW50c1szXS51c2VTdG9yZWRQcm9jKCkgOiAoJHBhcmVudHNbNV0udXNlU3RvcmVkUHJvYyA/ICRwYXJlbnRzWzVdLnVzZVN0b3JlZFByb2MoKSA6IGZhbHNlKSAtLT5cclxuICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IGZpZWxkTGFiZWwoKSA/IGZpZWxkTGFiZWwoKSA6IGZpZWxkTmFtZSwgc3R5bGU6IHsnY29sb3InOiBoZWFkZXJGb250Q29sb3IoKSwgJ2ZvbnQtd2VpZ2h0JzogaGVhZGVyRm9udEJvbGQoKSA/ICdib2xkJyA6ICdub3JtYWwnfVwiPjwvc3Bhbj5cclxuICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgPCEtLSBrbyBpZm5vdDogJHBhcmVudHNbM10udXNlU3RvcmVkUHJvYyA/ICRwYXJlbnRzWzNdLnVzZVN0b3JlZFByb2MoKSA6ICgkcGFyZW50c1s1XS51c2VTdG9yZWRQcm9jID8gJHBhcmVudHNbNV0udXNlU3RvcmVkUHJvYygpIDogZmFsc2UpICAtLT5cclxuICAgICAgICAgIDxhIGhyZWY9XCJcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXsgISRwYXJlbnQuSXNEcmlsbERvd24oKSA/ICRwYXJlbnRzWzNdLmNoYW5nZVNvcnQoU3FsRmllbGQpIDogJHBhcmVudHNbMV0uY2hhbmdlU29ydChTcWxGaWVsZCk7IH0sIHN0eWxlOiB7J2NvbG9yJzogaGVhZGVyRm9udENvbG9yLCAnZm9udC13ZWlnaHQnOiBoZWFkZXJGb250Qm9sZCgpID8gJ2JvbGQnIDogJ25vcm1hbCd9XCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogZmllbGRMYWJlbCgpID8gZmllbGRMYWJlbCgpIDogQ29sdW1uTmFtZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiAoISRwYXJlbnQuSXNEcmlsbERvd24oKSA/ICRwYXJlbnRzWzNdLnBhZ2VyLnNvcnRDb2x1bW4oKSA6ICRwYXJlbnRzWzFdLnBhZ2VyLnNvcnRDb2x1bW4oKSkgPT09IFNxbEZpZWxkID8gKCghJHBhcmVudC5Jc0RyaWxsRG93bigpID8gJHBhcmVudHNbM10ucGFnZXIuc29ydERlc2NlbmRpbmcoKSA6ICRwYXJlbnRzWzFdLnBhZ2VyLnNvcnREZXNjZW5kaW5nKCkpID8gJyYjOTY2MDsnIDogJyYjOTY1MDsnKSA6ICcnXCI+PC9zcGFuPlxyXG4gICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1yaWdodFwiIGRhdGEtYmluZD1cImlmOiAhJHBhcmVudC5Jc0RyaWxsRG93bigpICYmICFJc051bWVyaWNcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcHVwXCI+XHJcbiAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cImZhbHNlXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtZWxsaXBzaXMtdlwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBzdHlsZT1cInotaW5kZXg6IDEwMDE7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJkcm9wZG93bi1pdGVtIHNtYWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBkYXRhLWJpbmQ9XCJjbGljazogdG9nZ2xlT3V0ZXJHcm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWNsb25lXCI+PC9zcGFuPiBPdXRlciBHcm91cFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJkcm9wZG93bi1pdGVtIHNtYWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBkYXRhLWJpbmQ9XCJjbGljazogc2V0dXBGaWVsZE9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1nZWFyXCI+PC9zcGFuPiBGaWVsZCBTZXR0aW5nc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICBcclxuICAgICAgPC90aD5cclxuICAgICAgPCEtLSAva28gLS0+XHJcbiAgPC9zY3JpcHQ+XHJcbiAgXHJcbiAgPHNjcmlwdCB0eXBlPVwidGV4dC9odG1sXCIgaWQ9XCJyZXBvcnQtY29sdW1uXCI+XHJcbiAgICAgIDwhLS0ga28gZm9yZWFjaDogSXRlbXMgLS0+XHJcbiAgICAgIDx0ZCBkYXRhLWJpbmQ9XCJoaWRkZW46IG91dGVyR3JvdXAsIHN0eWxlOiB7J2JhY2tncm91bmQtY29sb3InOiBiYWNrQ29sb3IsICdjb2xvcic6IGZvbnRDb2xvciwgJ2ZvbnQtd2VpZ2h0JzogZm9udEJvbGQoKSA/ICdib2xkJyA6ICdub3JtYWwnLCAndGV4dC1hbGlnbic6ICRwYXJlbnRzWzRdLnBhZ2VyICYmICRwYXJlbnRzWzRdLlJlcG9ydFR5cGUoKT09J1NpbmdsZScgPyAnY2VudGVyJyA6IChmaWVsZEFsaWduKCkgPyBmaWVsZEFsaWduKCkgOiAoQ29sdW1uLklzTnVtZXJpYyA/ICdyaWdodCcgOiAnbGVmdCcpKSwgJ2ZvbnQtc2l6ZSc6JHBhcmVudHNbNF0ucGFnZXIgJiYgJHBhcmVudHNbNF0uUmVwb3J0VHlwZSgpPT0nU2luZ2xlJyA/ICc2NHB4JyA6ICcnfVwiPlxyXG4gICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJzdHlsZTogeyd3aWR0aCc6IGZpZWxkV2lkdGggfVwiPlxyXG4gICAgICAgICAgPCEtLSBrbyBpZjogTGlua1RvLS0+XHJcbiAgICAgICAgICA8YSBkYXRhLWJpbmQ9XCJhdHRyOiB7aHJlZjogTGlua1RvfVwiPjxzcGFuIGRhdGEtYmluZD1cImh0bWw6IEZvcm1hdHRlZFZhbHVlXCI+PC9zcGFuPjwvYT5cclxuICAgICAgICAgIDwhLS0gL2tvLS0+XHJcbiAgICAgICAgICA8IS0tIGtvIGlmbm90OiBMaW5rVG8tLT5cclxuICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cImh0bWw6IEZvcm1hdHRlZFZhbHVlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgPCEtLSAva28tLT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICA8L3RkPlxyXG4gIDwvc2NyaXB0PlxyXG4gIFxyXG4gIDxzY3JpcHQgdHlwZT1cInRleHQvaHRtbFwiIGlkPVwicmVwb3J0LXBpdm90XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiIGRhdGEtYmluZD1cIndpdGg6IFJlcG9ydERhdGFcIj5cclxuICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWhvdmVyIHRhYmxlLWNvbmRlbnNlZFwiPlxyXG4gICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRoPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGZvcmVhY2g6IFJvd3MgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogSXRlbXNbMF0uRm9ybWF0dGVkVmFsdWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICA8dGJvZHkgZGF0YS1iaW5kPVwiZm9yZWFjaDogQ29sdW1uc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0ga28gaWY6ICRpbmRleCgpID4gMCAtLT5cclxuICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogZmllbGRMYWJlbCB8fCBDb2x1bW5OYW1lXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tIGtvIGZvcmVhY2g6ICRwYXJlbnQuUm93cyAtLT5cclxuICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtYmluZD1cInN0eWxlOiB7J2JhY2tncm91bmQtY29sb3InOiAkcGFyZW50LmJhY2tDb2xvciwgJ2NvbG9yJzogJHBhcmVudC5mb250Q29sb3IsICdmb250LXdlaWdodCc6ICRwYXJlbnQuZm9udEJvbGQgPyAnYm9sZCcgOiAnbm9ybWFsJywgJ3RleHQtYWxpZ24nOiAkcGFyZW50LmZpZWxkQWxpZ24gPyAkcGFyZW50LmZpZWxkQWxpZ24gOiAoJHBhcmVudC5Jc051bWVyaWMgPyAncmlnaHQnIDogJ2xlZnQnKSB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBJdGVtc1skcGFyZW50Q29udGV4dC4kaW5kZXgoKV0uRm9ybWF0dGVkVmFsdWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgPC90YWJsZT5cclxuICBcclxuICAgICAgPC9kaXY+XHJcbiAgXHJcbiAgPC9zY3JpcHQ+XHJcbiAgXHJcbiAgPHNjcmlwdCB0eXBlPVwidGV4dC9odG1sXCIgaWQ9XCJyZXBvcnQtdGFibGVcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCIgPlxyXG4gICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtaG92ZXIgdGFibGUtY29uZGVuc2VkXCI+XHJcbiAgICAgICAgICAgICAgPHRoZWFkIGRhdGEtYmluZD1cImlmOiAkcGFyZW50c1syXS5SZXBvcnRUeXBlKCkgIT0gJ1NpbmdsZSdcIj5cclxuICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwibm8taGlnaGxpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGlmOiAkcGFyZW50Q29udGV4dC4kcGFyZW50Q29udGV4dC4kcGFyZW50LmNhbkRyaWxsZG93bigpICYmICFJc0RyaWxsRG93bigpIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6IDMwcHg7IGJvcmRlci1sZWZ0OiAxcHggc29saWQ7XCI+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyB0ZW1wbGF0ZTogJ3JlcG9ydC1jb2x1bW4taGVhZGVyJywgZGF0YTogJGRhdGEgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIC9rby0tPlxyXG4gICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgICA8dHIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIGRhdGEtYmluZD1cInZpc2libGU6IFJvd3MubGVuZ3RoIDwgMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1pbmZvXCIgZGF0YS1iaW5kPVwiYXR0cjp7Y29sc3BhbjogQ29sdW1ucy5sZW5ndGh9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gcmVjb3JkcyBmb3VuZFxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiAkcGFyZW50LnJvd3MgIC0tPlxyXG4gICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGlmOiAkcGFyZW50Q29udGV4dC4kcGFyZW50Q29udGV4dC4kcGFyZW50Q29udGV4dC4kcGFyZW50LmNhbkRyaWxsZG93bigpICYmICEkcGFyZW50LklzRHJpbGxEb3duKCkgJiYgJHBhcmVudENvbnRleHQuJHBhcmVudENvbnRleHQuJHBhcmVudENvbnRleHQuJHBhcmVudC5SZXBvcnRUeXBlKCkgIT0gJ1NpbmdsZScgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ3aWR0aDogMzBweDsgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcIj48YSBocmVmPVwiI1wiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpeyB0b2dnbGUoKTsgfVwiPjxzcGFuIGNsYXNzPVwiZmFcIiBkYXRhLWJpbmQ9XCJjc3M6IHsnZmEtcGx1cyc6ICFpc0V4cGFuZGVkKCksICdmYS1taW51cyc6IGlzRXhwYW5kZWQoKX1cIj48L3NwYW4+PC9hPjwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0ga28gdGVtcGxhdGU6ICdyZXBvcnQtY29sdW1uJywgZGF0YTogJGRhdGEgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIC9rby0tPlxyXG4gICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tIGtvIGlmOiBpc0V4cGFuZGVkIC0tPlxyXG4gICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ3aWR0aDogMzBweDtcIj48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtYmluZD1cImF0dHI6e2NvbHNwYW46ICRwYXJlbnQuQ29sdW1ucy5sZW5ndGggfVwiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiAwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBpZjogRHJpbGxEb3duRGF0YSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1ob3ZlciB0YWJsZS1jb25kZW5zZWRcIiBkYXRhLWJpbmQ9XCJ3aXRoOiBEcmlsbERvd25EYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cIm5vLWhpZ2hsaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ga28gdGVtcGxhdGU6ICdyZXBvcnQtY29sdW1uLWhlYWRlcicsIGRhdGE6ICRkYXRhIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIGRhdGEtYmluZD1cInZpc2libGU6IFJvd3MubGVuZ3RoIDwgMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtaW5mb1wiIGRhdGEtYmluZD1cImF0dHI6e2NvbHNwYW46IENvbHVtbnMubGVuZ3RofVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyByZWNvcmRzIGZvdW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGZvcmVhY2g6IFJvd3MgIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ga28gdGVtcGxhdGU6ICdyZXBvcnQtY29sdW1uJywgZGF0YTogJGRhdGEgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAva28tLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wteHMtMTIgY29sLWNlbnRlcmVkXCIgZGF0YS1iaW5kPVwid2l0aDogcGFnZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0taW5saW5lIHNtYWxsIHRleHQtbXV0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLWxlZnQgdG90YWwtcmVjb3Jkc1wiIGRhdGEtYmluZD1cInZpc2libGU6IHBhZ2VzKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiAnVG90YWwgUmVjb3JkczogJyArIHRvdGFsUmVjb3JkcygpXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4teHNcIiB0aXRsZT1cIkRvd25sb2FkIEV4Y2VsXCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRwYXJlbnQuZXhwb3J0RXhjZWxcIj48c3BhbiBjbGFzcz1cImZhIGZhLWZpbGUtZXhjZWwtb1wiPjwvc3Bhbj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcHVsbC1yaWdodFwiIGRhdGEtYmluZD1cInZpc2libGU6IHBhZ2VzKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRlbXBsYXRlOiAncGFnZXItdGVtcGxhdGUnLCBkYXRhOiAkZGF0YVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgPCEtLSBrbyBpZjogJHBhcmVudENvbnRleHQuJHBhcmVudC5TdWJUb3RhbHMoKS5sZW5ndGggPT0gMSAmJiAkcGFyZW50Q29udGV4dC4kcGFyZW50Q29udGV4dC4kcGFyZW50Lk91dGVyR3JvdXBDb2x1bW5zKCkubGVuZ3RoID09IDAgLS0+XHJcbiAgICAgICAgICAgICAgPHRmb290IGRhdGEtYmluZD1cImZvcmVhY2g6ICRwYXJlbnRDb250ZXh0LiRwYXJlbnQuU3ViVG90YWxzXCI+XHJcbiAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0ga28gaWY6ICRwYXJlbnRDb250ZXh0LiRwYXJlbnRDb250ZXh0LiRwYXJlbnRDb250ZXh0LiRwYXJlbnQuY2FuRHJpbGxkb3duKCkgJiYgISRwYXJlbnQuSXNEcmlsbERvd24oKSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGZvcmVhY2g6IEl0ZW1zIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBpZjogVmFsdWUgIT0gJ05BJyAmJiBWYWx1ZSAhPSAnTmFOJyAmJiAhb3V0ZXJHcm91cCgpIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtYmluZD1cInN0eWxlOiB7J2JhY2tncm91bmQtY29sb3InOiBiYWNrQ29sb3IsICdjb2xvcic6IGZvbnRDb2xvciwgJ2ZvbnQtd2VpZ2h0JzogZm9udEJvbGQgPyAnYm9sZCcgOiAnbm9ybWFsJywgJ3RleHQtYWxpZ24nOiAkcGFyZW50c1s0XS5wYWdlciAmJiAkcGFyZW50c1s0XS5SZXBvcnRUeXBlKCk9PSdTaW5nbGUnID8gJ2NlbnRlcicgOiAoZmllbGRBbGlnbiA/IGZpZWxkQWxpZ24gOiAoQ29sdW1uLklzTnVtZXJpYyA/ICdyaWdodCcgOiAnbGVmdCcpKSwgJ2ZvbnQtc2l6ZSc6JHBhcmVudHNbNF0ucGFnZXIgJiYgJHBhcmVudHNbNF0uUmVwb3J0VHlwZSgpPT0nU2luZ2xlJyA/ICc2NHB4JyA6ICcnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cImh0bWw6IEZvcm1hdHRlZFZhbHVlLCBjc3M6IHsncmlnaHQtYWxpZ24nOiB0cnVlfVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgIDwvdGZvb3Q+XHJcbiAgICAgICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICA8L2Rpdj5cclxuICA8L3NjcmlwdD5cclxuICBcclxuICA8c2NyaXB0IHR5cGU9XCJ0ZXh0L2h0bWxcIiBpZD1cInJlcG9ydC10ZW1wbGF0ZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicmVwb3J0LWNoYXJ0XCIgZGF0YS1iaW5kPVwiYXR0cjoge2lkOiAnY2hhcnRfZGl2XycgKyAkcGFyZW50LlJlcG9ydElEKCl9LCB2aXNpYmxlOiAkcGFyZW50LmlzQ2hhcnRcIj48L2Rpdj5cclxuICAgICAgPCEtLSBrbyBpZjogJHBhcmVudC5SZXBvcnRUeXBlKCkgPT0gJ1Bpdm90JyAtLT5cclxuICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZW1wbGF0ZToge25hbWU6ICdyZXBvcnQtcGl2b3QnLCBkYXRhOiAkZGF0YSB9XCI+PC9kaXY+XHJcbiAgICAgIDwhLS0gL2tvIC0tPlxyXG4gIFxyXG4gICAgICA8IS0tIGtvIGlmOiAkcGFyZW50LlJlcG9ydFR5cGUoKSAhPSAnUGl2b3QnICYmICghJHBhcmVudC5pc0NoYXJ0KCkgfHwgJHBhcmVudC5TaG93RGF0YVdpdGhHcmFwaCgpKSAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cInB1bGwtcmlnaHRcIiBkYXRhLWJpbmQ9XCJpZjogJHBhcmVudC5PdXRlckdyb3VwQ29sdW1ucygpLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgIDxhIGhyZWY9XCIjXCIgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiIGFyaWEtaGFzcG9wdXA9XCJmYWxzZVwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgIE1hbmFnZSBHcm91cHMgPHNwYW4gY2xhc3M9XCJmYSBmYS1lbGxpcHNpcy12XCI+PC9zcGFuPlxyXG4gICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgPHVsIGNsYXNzPVwiZHJvcGRvd24tbWVudVwiIHN0eWxlPVwiei1pbmRleDogMTAwMTtcIiBkYXRhLWJpbmQ9XCJmb3JlYWNoOiAkcGFyZW50Lk91dGVyR3JvdXBDb2x1bW5zXCI+XHJcbiAgICAgICAgICAgICAgPGxpIGNsYXNzPVwiZHJvcGRvd24taXRlbSBzbWFsbFwiPlxyXG4gICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIGRhdGEtYmluZD1cImNsaWNrOiByZW1vdmVcIiB0aXRsZT1cIlJlbW92ZSBmcm9tIEdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWNsb3NlXCI+PC9zcGFuPiA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBmaWVsZE5hbWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgPC91bD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjbGVhci1maXhcIj48L2Rpdj5cclxuICBcclxuICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJmb3JlYWNoOiBvdXRlckdyb3VwRGF0YVwiPlxyXG4gICAgICAgICAgPCEtLSBrbyBpZjogcm93cy5sZW5ndGggPiAwIHx8ICgkcGFyZW50Lm91dGVyR3JvdXBEYXRhICYmICRwYXJlbnQub3V0ZXJHcm91cERhdGEoKS5sZW5ndGggPT0gMSkgLS0+XHJcbiAgICAgICAgICA8aDYgZGF0YS1iaW5kPVwiaHRtbDogZGlzcGxheVwiPjwvaDY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCIgc3R5bGU9XCJwYWRkaW5nLXRvcDogNXB4O1wiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZW1wbGF0ZToge25hbWU6ICdyZXBvcnQtdGFibGUnLCBkYXRhOiAkcGFyZW50LlJlcG9ydERhdGEgfVwiPjwvZGl2PlxyXG4gICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tIC9rbyAtLT5cclxuICA8L3NjcmlwdD5cclxuICA8c2NyaXB0IHR5cGU9XCJ0ZXh0L2h0bWxcIiBpZD1cImFkbWluLW1vZGUtdGVtcGxhdGVcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiIHN0eWxlPVwicGFkZGluZzogMTBweCAxMHB4XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF0ZXJpYWwtc3dpdGNoIHB1bGwtcmlnaHRcIj5cclxuICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJhZG1pbi1tb2RlXCIgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogYWRtaW5Nb2RlXCIgLz5cclxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiYWRtaW4tbW9kZVwiIGNsYXNzPVwibGFiZWwtcHJpbWFyeVwiPjwvbGFiZWw+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLXJpZ2h0XCI+QWRtaW4gTW9kZTwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICBcclxuICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm9cIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBhZG1pbk1vZGVcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdXNlci1jaXJjbGVcIj48L2k+QWRtaW4gTW9kZSBpcyB0dXJuZWQgb24gbm93LCBpdCBhbGxvd3MgeW91IHRvIHNldHVwIGFuZCB2aWV3IFJlcG9ydHMgb3IgRGFzaGJvYXJkcyBmb3IgYWxsIHJvbGVzIGFuZCB1c2Vycy4gWW91IHNob3VsZCByZW1vdmUgdGhlIEFkbWluIG1vZGUgdG9nZ2xlIGZvciBub24tYWRtaW4gdXNlcnMuPGJyIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gIDwvc2NyaXB0PlxyXG4gIDxzY3JpcHQgdHlwZT1cInRleHQvaHRtbFwiIGlkPVwibWFuYWdlLWFjY2Vzcy10ZW1wbGF0ZVwiPlxyXG4gICAgICA8aDU+PHNwYW4gY2xhc3M9XCJmYSBmYS1rZXlcIj48L3NwYW4+TWFuYWdlIEFjY2VzczwvaDU+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwYW5lbCBwYW5lbC1kZWZhdWx0IHBhbmVsLWJvZHlcIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAyMHB4O1wiPlxyXG4gIFxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCIgZGF0YS1iaW5kPVwiaWZub3Q6IG1hbmFnZUFjY2Vzcy5pc0Rhc2hib2FyZFwiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zIGNvbnRyb2wtbGFiZWxcIj5DbGllbnQgSWQgdG8gUmVzdHJpY3QgQWNjZXNzPC9sYWJlbD5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTNcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIHRleHQtYm94IHNpbmdsZS1saW5lXCIgdHlwZT1cInRleHRcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogbWFuYWdlQWNjZXNzLmNsaWVudElkXCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xIGNvbC1zbS0xXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtdG9nZ2xlPVwidG9vbHRpcFwiIGRhdGEtcGxhY2VtZW50PVwicmlnaHRcIiBjbGFzcz1cImZhIGZhLXF1ZXN0aW9uLWNpcmNsZSBoZWxwdGlwXCIgdGl0bGU9XCJMZWF2ZSBibGFuayB0byBnaXZlIGFsbCBjbGllbnRzIGFjY2VzcyAoR2xvYmFsIFJlcG9ydHMpXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mb1wiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtbGlnaHRidWxiLW8gZmEtMnhcIj48L3NwYW4+Jm5ic3A7VXNlciBsZXZlbCByaWdodHMgb3ZlciBydWxlIFJvbGUgbGV2ZWwgcmlnaHRzLiBObyBzZWxlY3Rpb24gZm9yIGEgcnVsZSBpbXBsaWVzIHJlcG9ydCBpcyBhdmFpbGFibGUgdG8gYWxsLlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHNtYWxsXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxiPk1hbmFnZSBieSBVc2VyPC9iPiAoYWxsb3cgZWRpdClcclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBjb250YWluZXItZmx1aWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDogbWFuYWdlQWNjZXNzLnVzZXJzIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbCBsYWJlbC1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogc2VsZWN0ZWRcIj4mbmJzcDs8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiB0ZXh0XCI+PC9zcGFuPiZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IG1hbmFnZUFjY2Vzcy51c2Vycy5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJzIGxpc3Qgbm90IHBvcHVsYXRlZCBvciBub3QgYXBwbGljYWJsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgPGI+VmlldyBvbmx5IGJ5IFVzZXI8L2I+IChubyBlZGl0L2RlbGV0ZSlcclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBjb250YWluZXItZmx1aWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDogbWFuYWdlQWNjZXNzLnZpZXdPbmx5VXNlcnMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsIGxhYmVsLWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBzZWxlY3RlZFwiPiZuYnNwOzxzcGFuIGRhdGEtYmluZD1cInRleHQ6IHRleHRcIj48L3NwYW4+Jm5ic3A7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogbWFuYWdlQWNjZXNzLnVzZXJzLmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlcnMgbGlzdCBub3QgcG9wdWxhdGVkIG9yIG5vdCBhcHBsaWNhYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmbm90OiBtYW5hZ2VBY2Nlc3MuaXNEYXNoYm9hcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxiPkRlbGV0ZSBieSBVc2VyPC9iPiAoYWxsb3cgZGVsZXRlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBjb250YWluZXItZmx1aWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGZvcmVhY2g6IG1hbmFnZUFjY2Vzcy5kZWxldGVPbmx5VXNlcnMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsIGxhYmVsLWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogc2VsZWN0ZWRcIj4mbmJzcDs8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiB0ZXh0XCI+PC9zcGFuPiZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogbWFuYWdlQWNjZXNzLnVzZXJzLmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJzIGxpc3Qgbm90IHBvcHVsYXRlZCBvciBub3QgYXBwbGljYWJsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxiPk1hbmFnZSBieSBVc2VyIFJvbGU8L2I+IChhbGxvdyBlZGl0KVxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGNvbnRhaW5lci1mbHVpZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiBtYW5hZ2VBY2Nlc3MudXNlclJvbGVzIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbCBsYWJlbC1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogc2VsZWN0ZWRcIj4mbmJzcDs8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiB0ZXh0XCI+PC9zcGFuPiZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IG1hbmFnZUFjY2Vzcy51c2VyUm9sZXMubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VyIFJvbGVzIGxpc3Qgbm90IHBvcHVsYXRlZCBvciBub3QgYXBwbGljYWJsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgPGI+VmlldyBvbmx5IGJ5IFVzZXIgUm9sZTwvYj4gKG5vIGVkaXQvZGVsZXRlKVxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGNvbnRhaW5lci1mbHVpZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiBtYW5hZ2VBY2Nlc3Mudmlld09ubHlVc2VyUm9sZXMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsIGxhYmVsLWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBzZWxlY3RlZFwiPiZuYnNwOzxzcGFuIGRhdGEtYmluZD1cInRleHQ6IHRleHRcIj48L3NwYW4+Jm5ic3A7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogbWFuYWdlQWNjZXNzLnVzZXJSb2xlcy5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXIgUm9sZXMgbGlzdCBub3QgcG9wdWxhdGVkIG9yIG5vdCBhcHBsaWNhYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWZub3Q6IG1hbmFnZUFjY2Vzcy5pc0Rhc2hib2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8Yj5EZWxldGUgYnkgVXNlciBSb2xlPC9iPiAoYWxsb3cgZGVsZXRlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBjb250YWluZXItZmx1aWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGZvcmVhY2g6IG1hbmFnZUFjY2Vzcy5kZWxldGVPbmx5VXNlclJvbGVzIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLWxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbCBsYWJlbC1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IHNlbGVjdGVkXCI+Jm5ic3A7PHNwYW4gZGF0YS1iaW5kPVwidGV4dDogdGV4dFwiPjwvc3Bhbj4mbmJzcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IG1hbmFnZUFjY2Vzcy51c2VyUm9sZXMubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlciBSb2xlcyBsaXN0IG5vdCBwb3B1bGF0ZWQgb3Igbm90IGFwcGxpY2FibGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICA8L3NjcmlwdD5cclxuICA8c2NyaXB0IHR5cGU9XCJ0ZXh0L2h0bWxcIiBpZD1cImZpbHRlci1ncm91cFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicXVlcnktYnVpbGRlciBmb3JtLWlubGluZVwiIGRhdGEtYmluZD1cImZvcmVhY2g6IEZpbHRlckdyb3Vwc1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJ1bGVzLWdyb3VwLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJydWxlcy1ncm91cC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAhaXNSb290XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBidG4tZ3JvdXAtdG9nZ2xlIGJ0bi1ncm91cC1zbVwiIGRhdGEtdG9nZ2xlPVwiYnV0dG9uc1wiIHJvbGU9XCJncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBhY3RpdmVcIiBzdHlsZT1cIm1hcmdpbi1yaWdodDogMHB4O1wiID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJhbmRvcm9wdGlvblwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IEFuZE9yLCBjaGVja2VkVmFsdWU6ICdBbmQnXCI+IEFuZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwiYW5kb3JvcHRpb25cIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBBbmRPciwgY2hlY2tlZFZhbHVlOiAnT3InXCI+IE9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtcmlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tc2Vjb25kYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRwYXJlbnQuUmVtb3ZlRmlsdGVyR3JvdXAsIHZpc2libGU6ICFpc1Jvb3RcIj5SZW1vdmUgR3JvdXA8L2J1dHRvbj4mbmJzcDtcclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBpc1Jvb3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgYnRuLWdyb3VwLXNtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCI+RmlsdGVyIENvbmRpdGlvbnM8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xlYXJmaXhcIj48L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICBcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnVsZXMtZ3JvdXAtYm9keVwiIGRhdGEtYmluZD1cInRlbXBsYXRlOiB7bmFtZTogJ2ZpbHRlci1pbm5lcid9XCI+PC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgPC9zY3JpcHQ+XHJcbiAgPHNjcmlwdCB0eXBlPVwidGV4dC9odG1sXCIgaWQ9XCJmbHktZmlsdGVyLXRlbXBsYXRlXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogRmx5RmlsdGVycygpLmxlbmd0aD4wXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJjYXJkLXRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxhIGRhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIiBkYXRhLXRhcmdldD1cIiNmaWx0ZXItcGFuZWxcIiBocmVmPVwiI1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1maWx0ZXJcIj48L2k+Q2hvb3NlIGZpbHRlciBvcHRpb25zXHJcbiAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICA8L2g1PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGlkPVwiZmlsdGVyLXBhbmVsXCIgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8IS0tIGtvIGZvcmVhY2g6IEZseUZpbHRlcnMgLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICBcclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNSBjb2wteHMtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwid2l0aDogRmllbGRcIiBjbGFzcz1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiB0aXRsZT1cIkFwcGx5IHRoaXMgZmlsdGVyXCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogJHBhcmVudC5BcHBseVwiIC8+PHNwYW4gZGF0YS1iaW5kPVwidGV4dDogc2VsZWN0ZWRGaWVsZE5hbWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ3aXRoOiBGaWVsZFwiIGNsYXNzPVwiY29sLXNtLTIgY29sLXhzLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiIGRhdGEtYmluZD1cImlmOiAkcGFyZW50LkFwcGx5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJvcHRpb25zOiBmaWVsZEZpbHRlciwgdmFsdWU6ICRwYXJlbnQuT3BlcmF0b3JcIiByZXF1aXJlZD48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ3aXRoOiBGaWVsZFwiIGNsYXNzPVwiY29sLXhzLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiAkcGFyZW50LkFwcGx5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidGVtcGxhdGU6ICdyZXBvcnQtZmlsdGVyJywgZGF0YTogJGRhdGFcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogUnVuUmVwb3J0XCI+UmVmcmVzaCBSZXBvcnQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICA8L3NjcmlwdD5cclxuICBcclxuICA8c2NyaXB0IHR5cGU9XCJ0ZXh0L2h0bWxcIiBpZD1cImZpbHRlci1pbm5lclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicnVsZXMtbGlzdFwiID5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJydWxlLWNvbnRhaW5lclwiIGRhdGEtYmluZD1cInZpc2libGU6IEZpbHRlcnMoKS5sZW5ndGg+MFwiPlxyXG4gICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtaG92ZXIgdGFibGUtYm9yZGVybGVzc1wiPlxyXG4gICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6IDEwJVwiPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDogMzAlXCI+RmllbGQ8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6IDEwJVwiPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDogMzAlXCI+RmlsdGVyPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0aD48L3RoPlxyXG4gICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgPHRib2R5IGRhdGEtYmluZD1cImZvcmVhY2g6IEZpbHRlcnNcIj5cclxuICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwicnVsZS1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGRhdGEtYmluZD1cInZhbHVlOiBBbmRPciwgdmlzaWJsZTogJGluZGV4KCk+MFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+QW5kPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+T3I8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7XCIgZGF0YS1iaW5kPVwib3B0aW9uczogJHBhcmVudENvbnRleHQuJHBhcmVudC5zZWxlY3RlZEZpZWxkc0NhbkZpbHRlciwgb3B0aW9uc1RleHQ6ICdzZWxlY3RlZEZpZWxkTmFtZScsIG9wdGlvbnNDYXB0aW9uOiAnUGxlYXNlIENob29zZScsIHZhbHVlOiBGaWVsZCwgYXR0cjoge3JlcXVpcmVkOiBGaWVsZCgpPT1udWxsPydyZXF1aXJlZCc6ZmFsc2V9LCBkaXNhYmxlOiBGaWVsZCgpICYmIEZpZWxkKCkuZm9yY2VkXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtYmluZD1cIndpdGg6IEZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7XCIgZGF0YS1iaW5kPVwib3B0aW9uczogZmllbGRGaWx0ZXIsIHZhbHVlOiAkcGFyZW50Lk9wZXJhdG9yXCIgcmVxdWlyZWQ+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtYmluZD1cIndpdGg6IEZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZW1wbGF0ZTogJ3JlcG9ydC1maWx0ZXInLCBkYXRhOiAkZGF0YVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBGaWVsZCgpICYmIEZpZWxkKCkuZm9yY2VkXCIgY2xhc3M9XCJiYWRnZSBiYWRnZS1pbmZvXCI+UmVxdWlyZWQgRmlsdGVyPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1zZWNvbmRhcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogJHBhcmVudC5SZW1vdmVGaWx0ZXIsIGhpZGRlbjogRmllbGQoKSAmJiBGaWVsZCgpLmZvcmNlZFwiPlJlbW92ZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ga28gaWY6IEZpZWxkKCkgJiYgRmllbGQoKS5maWVsZFR5cGUgPT0gJ0RhdGVUaW1lJyAmJiBPcGVyYXRvcigpID09ICdyYW5nZScgJiYgJHBhcmVudENvbnRleHQuJHBhcmVudC5jYW5BZGRTZXJpZXMoKSAmJiAkaW5kZXgoKT09MCAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tc2Vjb25kYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRwYXJlbnRDb250ZXh0LiRwYXJlbnQuQWRkU2VyaWVzLmJpbmQoJGRhdGEpXCI+QWRkIENvbXBhcmlzb248L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiBjb21wYXJlVG8gLS0+XHJcbiAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwidGV4dC1hbGlnbjogcmlnaHRcIj48YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi14c1wiIGRhdGEtYmluZD1cImNsaWNrOiAkcGFyZW50c1syXS5SZW1vdmVTZXJpZXNcIj48c3BhbiBjbGFzcz1cImZhIGZhLXRyYXNoLW9cIj48L3NwYW4+PC9idXR0b24+PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ZD5Db21wYXJlIFRvPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZGF0YS1iaW5kPVwib3B0aW9uczogUmFuZ2UsIHZhbHVlOiBWYWx1ZVwiIHJlcXVpcmVkPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICBcclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJydWxlLWNvbnRhaW5lclwiID5cclxuICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRlbXBsYXRlOiB7bmFtZTogJ2ZpbHRlci1ncm91cCd9XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogQWRkRmlsdGVyR3JvdXBcIj5BZGQgR3JvdXA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogQWRkRmlsdGVyXCI+QWRkIEZpbHRlcjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gIFxyXG4gIDwvc2NyaXB0PlxyXG4gIFxyXG4gIDxzY3JpcHQgdHlwZT1cInRleHQvaHRtbFwiIGlkPVwiZmlsdGVyLXBhcmFtZXRlcnNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmUgY2FyZFwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDIwcHg7XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwiaGlkZGVuOiBzaG93UGFyYW1ldGVyc1wiPk5vIGZpbHRlcnMgYXZhaWxhYmxlIHRvIGNob29zZTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSAgdGFibGUtaG92ZXIgdGFibGUtYm9yZGVybGVzc1wiIGRhdGEtYmluZD1cInZpc2libGU6IHNob3dQYXJhbWV0ZXJzXCI+XHJcbiAgICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDogMzAlXCI+UGFyYW10ZXI8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOiAyMCVcIj48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOiAzMCVcIj5WYWx1ZTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgICA8dGJvZHkgZGF0YS1iaW5kPVwiZm9yZWFjaDogUGFyYW1ldGVyc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRyIGRhdGEtYmluZD1cImlmbm90OiBIaWRkZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1iaW5kPVwidGV4dDogRGlzcGxheU5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiIGRhdGEtYmluZD1cIm9wdGlvbnM6IG9wZXJhdG9ycywgdmFsdWU6IE9wZXJhdG9yXCIgcmVxdWlyZWQ+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtYmluZD1cIndpdGg6IEZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidGVtcGxhdGU6ICdyZXBvcnQtZmlsdGVyJywgZGF0YTogJGRhdGFcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICBcclxuICAgICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gIDwvc2NyaXB0PlxyXG4gIFxyXG4gIDxzY3JpcHQgdHlwZT1cInRleHQvaHRtbFwiIGlkPVwicmVwb3J0LXNjaGVkdWxlXCI+XHJcbiAgICAgIDxkaXYgZGF0YS1iaW5kPVwid2l0aDogc2NoZWR1bGVCdWlsZGVyXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBoYXNTY2hlZHVsZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICBTY2hlZHVsZSBSZXBvcnRcclxuICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogaGFzU2NoZWR1bGVcIj5cclxuICBcclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0taW5saW5lIGZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBjb2wtc20tMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IHNlbGVjdGVkT3B0aW9uKCkgIT0gJ29uY2UnID8gJ0V2ZXJ5ICcgOiAnJ1wiPjwvc3Bhbj4mbmJzcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJlcXVpcmVkIGRhdGEtYmluZD1cIm9wdGlvbnM6IG9wdGlvbnMsIHZhbHVlOiBzZWxlY3RlZE9wdGlvblwiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IHNlbGVjdGVkT3B0aW9uKCkgPT0gJ29uY2UnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7b24mbmJzcDs8aW5wdXQgZGF0YS1iaW5kPVwiZGF0ZXBpY2tlcjogc2VsZWN0ZWREYXRlXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByZXF1aXJlZCAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogc2hvd0RheXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtvbiZuYnNwOzxzZWxlY3QgbXVsdGlwbGUgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByZXF1aXJlZCBkYXRhLWJpbmQ9XCJzZWxlY3QyOiB7IHBsYWNlaG9sZGVyOiAnQ2hvb3NlIERheXMnLCBhbGxvd0NsZWFyOiB0cnVlIH0sIG9wdGlvbnM6IGRheXMsIHNlbGVjdGVkT3B0aW9uczogc2VsZWN0ZWREYXlzXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogc2hvd0RhdGVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtvbiZuYnNwOzxzZWxlY3QgbXVsdGlwbGUgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByZXF1aXJlZCBkYXRhLWJpbmQ9XCJzZWxlY3QyOiB7IHBsYWNlaG9sZGVyOiAnQ2hvb3NlIERhdGVzJywgYWxsb3dDbGVhcjogdHJ1ZSB9LCBvcHRpb25zOiBkYXRlcywgc2VsZWN0ZWRPcHRpb25zOiBzZWxlY3RlZERhdGVzXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogc2hvd01vbnRoc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO29mJm5ic3A7PHNlbGVjdCBtdWx0aXBsZSBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJlcXVpcmVkIGRhdGEtYmluZD1cInNlbGVjdDI6IHsgcGxhY2Vob2xkZXI6ICdDaG9vc2UgTW9udGhzJywgYWxsb3dDbGVhcjogdHJ1ZSB9LCBvcHRpb25zOiBtb250aHMsIHNlbGVjdGVkT3B0aW9uczogc2VsZWN0ZWRNb250aHNcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IHNob3dBdFRpbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDthdCZuYnNwOzxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJvcHRpb25zOiBob3VycywgdmFsdWU6IHNlbGVjdGVkSG91clwiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJvcHRpb25zOiBtaW51dGVzLCB2YWx1ZTogc2VsZWN0ZWRNaW51dGVcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogc2VsZWN0ZWRBbVBtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5BTTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5QTTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgUmVwb3J0IHdpbGwgYmUgcnVuIGFuZCBlbWFpbGVkIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IHNlbGVjdGVkT3B0aW9uKCkgIT0gJ29uY2UnID8gJ2V2ZXJ5JyA6ICcnXCI+PC9zcGFuPiA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBzZWxlY3RlZE9wdGlvblwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cImlmOiBzZWxlY3RlZE9wdGlvbigpID09ICdvbmNlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgIG9uIDxzcGFuIGNsYXNzPVwiZXJyb3JcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAhc2VsZWN0ZWREYXRlKClcIj5QbGVhc2UgcGljayBhIERhdGU8L3NwYW4+IDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IHNlbGVjdGVkRGF0ZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwiaWY6IHNob3dEYXlzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBvbiA8c3BhbiBjbGFzcz1cImVycm9yXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogc2VsZWN0ZWREYXlzKCkubGVuZ3RoID09IDBcIj5QbGVhc2UgcGljayBEYXkocyk8L3NwYW4+IDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IHNlbGVjdGVkRGF5c1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwiaWY6IHNob3dEYXRlc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgIG9uIDxzcGFuIGNsYXNzPVwiZXJyb3JcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBzZWxlY3RlZERhdGVzKCkubGVuZ3RoID09IDBcIj5QbGVhc2UgcGljayBEYXRlKHMpPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cImZvcmVhY2g6IHNlbGVjdGVkRGF0ZXNcIj48c3BhbiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAkaW5kZXgoKT4wXCI+LCA8L3NwYW4+PHNwYW4gZGF0YS1iaW5kPVwidGV4dDogJGRhdGEgPT0gMSA/ICcxc3QnOiAoJGRhdGEgPT0gMiA/ICcybmQnIDogKCRkYXRhID09IDMgPyAnM3JkJyA6ICRkYXRhKyd0aCcpKVwiPjwvc3Bhbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwiaWY6IHNob3dNb250aHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBvZiA8c3BhbiBjbGFzcz1cImVycm9yXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogc2VsZWN0ZWRNb250aHMoKS5sZW5ndGggPT0gMFwiPlBsZWFzZSBwaWNrIE1vbnRoKHMpPC9zcGFuPiA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBzZWxlY3RlZE1vbnRoc1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cImlmOiBzaG93QXRUaW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgYXQgPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogc2VsZWN0ZWRIb3VyXCI+PC9zcGFuPjo8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBzZWxlY3RlZE1pbnV0ZVwiPjwvc3Bhbj4gPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogc2VsZWN0ZWRBbVBtXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWhvcml6b250YWwgZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMiBjb250cm9sLWxhYmVsXCI+RW1haWwgdG88L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7XCIgZGF0YS1iaW5kPVwidmFsdWU6IGVtYWlsVG9cIiBwbGFjZWhvbGRlcj1cIkVudGVyIEVtYWlsIEFkZHJlc3NlcyBzZXBhcmF0ZWQgYnkgY29tbWEgdG8gc2VuZCB0aGUgUmVwb3J0IHRvXCIgcmVxdWlyZWQgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTIgY29udHJvbC1sYWJlbFwiPlJlcG9ydCBGb3JtYXQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogZm9ybWF0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJFWENFTFwiPkV4Y2VsPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiQ1NWXCI+Q1NWPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJQREZcIj5QREY8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ob3Jpem9udGFsIGZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0yIGNvbnRyb2wtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgdGl0bGU9XCJTZXQgYSBkYXRlIHRvIHN0YXJ0IHNlbmRpbmcgc2NoZWR1bGVkIHJlcG9ydFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogaGFzU2NoZWR1bGVTdGFydFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0IFNjaGVkdWxlIFN0YXJ0IERhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNFwiIGRhdGEtYmluZD1cImlmOiBoYXNTY2hlZHVsZVN0YXJ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cImRhdGVwaWNrZXI6IHNjaGVkdWxlU3RhcnRcIiB0aXRsZT1cIlNjaGVkdWxlZCBSZXBvcnQgd2lsbCBub3QgYmUgc2VudCBiZWZvcmUgdGhpcyBkYXRlXCIgcmVxdWlyZWQgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0taG9yaXpvbnRhbCBmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMiBjb250cm9sLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIiB0aXRsZT1cIlNldCBhIGRhdGUgdG8gc3RvcCBzZW5kaW5nIHNjaGVkdWxlZCByZXBvcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IGhhc1NjaGVkdWxlRW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXQgU2NoZWR1bGUgRW5kIERhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNFwiIGRhdGEtYmluZD1cImlmOiBoYXNTY2hlZHVsZUVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZGF0YS1iaW5kPVwiZGF0ZXBpY2tlcjogc2NoZWR1bGVFbmRcIiB0aXRsZT1cIlNjaGVkdWxlZCBSZXBvcnQgd2lsbCBub3QgYmUgc2VudCBhZnRlciB0aGlzIGRhdGVcIiByZXF1aXJlZCAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gIDwvc2NyaXB0PlxyXG4gIFxyXG4gIDxzY3JpcHQgdHlwZT1cInRleHQvaHRtbFwiIGlkPVwicmVwb3J0LWZpZWxkLW9wdGlvbnNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiIHN0eWxlPVwibWF4LXdpZHRoOiA3NTBweDtcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCIgZGF0YS1iaW5kPVwid2l0aDogZWRpdEZpZWxkT3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIj48c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBmaWVsZE5hbWVcIj48L3NwYW4+IC0gU2V0dXAgQWRkaXRpb25hbCBGaWVsZCBPcHRpb25zPC9oNT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBuZWVkcy12YWxpZGF0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTUgY29sLW1kLTUgY29udHJvbC1sYWJlbFwiPlBpY2sgRGF0YSBGb3JtYXQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS03IGNvbC1tZC03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJlcXVpcmVkIGRhdGEtYmluZD1cIm9wdGlvbnM6ICRwYXJlbnQuZmllbGRGb3JtYXRUeXBlcywgdmFsdWU6IGZpZWxkRm9ybWF0XCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiIGRhdGEtYmluZD1cInZpc2libGU6ICRwYXJlbnQuZGVjaW1hbEZvcm1hdFR5cGVzLmluZGV4T2YoJGRhdGEuZmllbGRGb3JtYXQoKSk+PTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS01IGNvbC1tZC01IGNvbnRyb2wtbGFiZWxcIj5QaWNrIERlY2ltYWwgUGxhY2VzPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNyBjb2wtbWQtN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogZGVjaW1hbFBsYWNlc1wiIHBsYWNlaG9sZGVyPVwiXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tNSBjb2wtbWQtNSBjb250cm9sLWxhYmVsXCI+Q2hvb3NlIENvbHVtbiBMYWJlbDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTcgY29sLW1kLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJlcXVpcmVkIGRhdGEtYmluZD1cInZhbHVlOiBmaWVsZExhYmVsXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tNSBjb2wtbWQtNSBjb250cm9sLWxhYmVsXCI+Q2hvb3NlIFRleHQgQWxpZ25tZW50PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNyBjb2wtbWQtN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByZXF1aXJlZCBkYXRhLWJpbmQ9XCJvcHRpb25zOiAkcGFyZW50LmZpZWxkQWxpZ25tZW50cywgdmFsdWU6IGZpZWxkQWxpZ25cIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tNSBjb2wtbWQtNSBjb250cm9sLWxhYmVsXCI+UGljayBIZWFkZXIgVGV4dCBDb2xvcjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTcgY29sLW1kLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgc3R5bGU9XCJ3aWR0aDogNTBweFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHB1bGwtbGVmdFwiIHJlcXVpcmVkIGRhdGEtYmluZD1cInZhbHVlOiBoZWFkZXJGb250Q29sb3JcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHN0eWxlPVwid2lkdGg6IDEwMHB4XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgcHVsbC1sZWZ0XCIgcmVxdWlyZWQgZGF0YS1iaW5kPVwidmFsdWU6IGhlYWRlckZvbnRDb2xvclwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gcHVsbC1sZWZ0XCIgdGl0bGU9XCJBcHBseSB0byBhbGwgY29sdW1uc1wiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpe2FwcGx5QWxsSGVhZGVyRm9udENvbG9yKCFhcHBseUFsbEhlYWRlckZvbnRDb2xvcigpKTsgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhXCIgZGF0YS1iaW5kPVwiY3NzOiBhcHBseUFsbEhlYWRlckZvbnRDb2xvcigpID8gJ2ZhLWNoZWNrJyA6ICdmYS1wYXN0ZSdcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTUgY29sLW1kLTUgY29udHJvbC1sYWJlbFwiPlBpY2sgSGVhZGVyIEJhY2tncm91bmQgQ29sb3I8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS03IGNvbC1tZC03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIHN0eWxlPVwid2lkdGg6IDUwcHhcIiBjbGFzcz1cImZvcm0tY29udHJvbCBwdWxsLWxlZnRcIiByZXF1aXJlZCBkYXRhLWJpbmQ9XCJ2YWx1ZTogaGVhZGVyQmFja0NvbG9yXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBzdHlsZT1cIndpZHRoOiAxMDBweFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHB1bGwtbGVmdFwiIHJlcXVpcmVkIGRhdGEtYmluZD1cInZhbHVlOiBoZWFkZXJCYWNrQ29sb3JcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIHB1bGwtbGVmdFwiIHRpdGxlPVwiQXBwbHkgdG8gYWxsIGNvbHVtbnNcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXthcHBseUFsbEhlYWRlckJhY2tDb2xvcighYXBwbHlBbGxIZWFkZXJCYWNrQ29sb3IoKSk7IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYVwiIGRhdGEtYmluZD1cImNzczogYXBwbHlBbGxIZWFkZXJCYWNrQ29sb3IoKSA/ICdmYS1jaGVjaycgOiAnZmEtcGFzdGUnXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS01IGNvbC1tZC01IGNvbnRyb2wtbGFiZWxcIj5QaWNrIFRleHQgQ29sb3I8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS03IGNvbC1tZC03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIHN0eWxlPVwid2lkdGg6IDUwcHhcIiBjbGFzcz1cImZvcm0tY29udHJvbCBwdWxsLWxlZnRcIiByZXF1aXJlZCBkYXRhLWJpbmQ9XCJ2YWx1ZTogZm9udENvbG9yXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBzdHlsZT1cIndpZHRoOiAxMDBweFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHB1bGwtbGVmdFwiIGRhdGEtYmluZD1cInZhbHVlOiBmb250Q29sb3JcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIHB1bGwtbGVmdFwiIHRpdGxlPVwiQXBwbHkgdG8gYWxsIGNvbHVtbnNcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXthcHBseUFsbEZvbnRDb2xvcighYXBwbHlBbGxGb250Q29sb3IoKSk7IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYVwiIGRhdGEtYmluZD1cImNzczogYXBwbHlBbGxGb250Q29sb3IoKSA/ICdmYS1jaGVjaycgOiAnZmEtcGFzdGUnXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS01IGNvbC1tZC01IGNvbnRyb2wtbGFiZWxcIj5QaWNrIEJhY2tncm91bmQgQ29sb3I8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS03IGNvbC1tZC03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIHN0eWxlPVwid2lkdGg6IDUwcHhcIiBjbGFzcz1cImZvcm0tY29udHJvbCBwdWxsLWxlZnRcIiByZXF1aXJlZCBkYXRhLWJpbmQ9XCJ2YWx1ZTogYmFja0NvbG9yXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBzdHlsZT1cIndpZHRoOiAxMDBweFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHB1bGwtbGVmdFwiIGRhdGEtYmluZD1cInZhbHVlOiBiYWNrQ29sb3JcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIHB1bGwtbGVmdFwiIHRpdGxlPVwiQXBwbHkgdG8gYWxsIGNvbHVtbnNcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXthcHBseUFsbEJhY2tDb2xvcighYXBwbHlBbGxCYWNrQ29sb3IoKSk7IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYVwiIGRhdGEtYmluZD1cImNzczogYXBwbHlBbGxCYWNrQ29sb3IoKSA/ICdmYS1jaGVjaycgOiAnZmEtcGFzdGUnXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS01IGNvbC1tZC01IGNvbnRyb2wtbGFiZWxcIj5DaG9vc2UgV2lkdGggKGxlYXZlIGJsYW5rIGZvciBhdXRvKTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTcgY29sLW1kLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJlcXVpcmVkIGRhdGEtYmluZD1cInZhbHVlOiBmaWVsZFdpZHRoXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94IHB1bGwtbGVmdFwiIHN0eWxlPVwicGFkZGluZy10b3A6IDVweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IGhlYWRlckZvbnRCb2xkXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2UgSGVhZGVyIFRleHQgQm9sZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIHB1bGwtbGVmdFwiIHRpdGxlPVwiQXBwbHkgdG8gYWxsIGNvbHVtbnNcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXthcHBseUFsbEhlYWRlckJvbGQoIWFwcGx5QWxsSGVhZGVyQm9sZCgpKTsgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhXCIgZGF0YS1iaW5kPVwiY3NzOiBhcHBseUFsbEhlYWRlckJvbGQoKSA/ICdmYS1jaGVjaycgOiAnZmEtcGFzdGUnXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3ggcHVsbC1sZWZ0XCIgc3R5bGU9XCJwYWRkaW5nLXRvcDogNXB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogZm9udEJvbGRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZSBUZXh0IEJvbGRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBwdWxsLWxlZnRcIiB0aXRsZT1cIkFwcGx5IHRvIGFsbCBjb2x1bW5zXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCl7YXBwbHlBbGxCb2xkKCFhcHBseUFsbEJvbGQoKSk7IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYVwiIGRhdGEtYmluZD1cImNzczogYXBwbHlBbGxCb2xkKCkgPyAnZmEtY2hlY2snIDogJ2ZhLXBhc3RlJ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCIgZGF0YS1iaW5kPVwiaWY6ICRwYXJlbnQudXNlU3RvcmVkUHJvYygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94IHB1bGwtbGVmdFwiIHN0eWxlPVwicGFkZGluZy10b3A6IDVweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IGNoZWNrT3V0ZXJHcm91cFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRlciBHcm91cFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWRhbmdlclwiIGRhdGEtYmluZD1cImNsaWNrOiBjYW5jZWxGaWVsZE9wdGlvbnNcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogc2F2ZUZpZWxkT3B0aW9uc1wiPlNhdmUgQ2hhbmdlczwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gIDwvc2NyaXB0PlxyXG4gIFxyXG4gIDxzY3JpcHQgdHlwZT1cInRleHQvaHRtbFwiIGlkPVwicmVwb3J0LWxpbmstZWRpdFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCIgc3R5bGU9XCJtYXgtd2lkdGg6IDc1MHB4O1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIiBkYXRhLWJpbmQ9XCJ3aXRoOiBlZGl0TGlua0ZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiPlNldHVwIExpbmsgRmllbGQ8L2g1PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IG5lZWRzLXZhbGlkYXRpb25cIiBkYXRhLWJpbmQ9XCJ3aXRoOiBsaW5rRmllbGRJdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTUgY29sLW1kLTUgY29udHJvbC1sYWJlbFwiPlRoaXMgZmllbGQgd2lsbCBsaW5rIHRvPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNyBjb2wtbWQtN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByZXF1aXJlZCBkYXRhLWJpbmQ9XCJvcHRpb25zOiBsaW5rVHlwZXMsIHZhbHVlOiBzZWxlY3RlZExpbmtUeXBlXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IExpbmtzVG9SZXBvcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS01IGNvbC1tZC01IGNvbnRyb2wtbGFiZWxcIj5MaW5rIHRvIHRoaXMgUmVwb3J0PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTcgY29sLW1kLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJlcXVpcmVkIGRhdGEtYmluZD1cIm9wdGlvbnM6ICRwYXJlbnRDb250ZXh0LiRwYXJlbnQuU2F2ZWRSZXBvcnRzLCBvcHRpb25zVGV4dDogJ3JlcG9ydE5hbWUnLCBvcHRpb25zVmFsdWU6ICdyZXBvcnRJZCcsIHZhbHVlOiBMaW5rZWRUb1JlcG9ydElkLCBvcHRpb25zQ2FwdGlvbjogJ0Nob29zZSB0aGUgUmVwb3J0IHRvIGxpbmsgdG8nXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImlmOiBMaW5rZWRUb1JlcG9ydElkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogU2VuZEFzRmlsdGVyUGFyYW1ldGVyXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VuZCBmaWVsZCB2YWx1ZSBhcyBSZXBvcnQgRmlsdGVyIFBhcmFtZXRlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiIGRhdGEtYmluZD1cImlmOiBTZW5kQXNGaWx0ZXJQYXJhbWV0ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tNSBjb2wtbWQtNSBjb250cm9sLWxhYmVsXCI+TGluayB0byB0aGlzIFJlcG9ydCBGaWx0ZXI8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNyBjb2wtbWQtN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcmVxdWlyZWQgZGF0YS1iaW5kPVwib3B0aW9uczogYWxsRmllbGRzLCBvcHRpb25zVGV4dDogJ2ZpZWxkTmFtZScsIG9wdGlvbnNWYWx1ZTogJ2ZpZWxkSWQnLCB2YWx1ZTogU2VsZWN0ZWRGaWx0ZXJJZCwgb3B0aW9uc0NhcHRpb246ICdDaG9vc2UgdGhlIEZpZWxkIHRvIEZpbHRlciBieSB2YWx1ZSdcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZm5vdDogTGlua3NUb1JlcG9ydFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTUgY29sLW1kLTUgY29udHJvbC1sYWJlbFwiPkxpbmsgdG8gdGhpcyBVUkw8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNyBjb2wtbWQtN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInVybFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcmVxdWlyZWQgcGxhY2Vob2xkZXI9XCJFbnRlciBhIHVybCB0byBvcGVuXCIgZGF0YS1iaW5kPVwidmFsdWU6IExpbmtUb1VybFwiIHRpdGxlPVwiVmFsaWQgVVJMIG5lZWRzIHRvIHN0YXJ0IHdpdGggaHR0cDovLyBvciBodHRwczovL1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBTZW5kQXNRdWVyeVBhcmFtZXRlclwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbmQgZmllbGQgdmFsdWUgYXMgUXVlcnkgUGFyYW1ldGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCIgZGF0YS1iaW5kPVwiaWY6IFNlbmRBc1F1ZXJ5UGFyYW1ldGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTUgY29sLW1kLTUgY29udHJvbC1sYWJlbFwiPlBhcmFtZXRlciBOYW1lIHRvIHVzZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS03IGNvbC1tZC03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcmVxdWlyZWQgcGxhY2Vob2xkZXI9XCJFbnRlciBwYXJhbWV0ZXIgbmFtZSB0byBzZW5kIHZhbHVlIGFzXCIgZGF0YS1iaW5kPVwidmFsdWU6IFF1ZXJ5UGFyYW1ldGVyTmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tZGFuZ2VyXCIgZGF0YS1iaW5kPVwiY2xpY2s6IHJlbW92ZUxpbmtGaWVsZFwiPlJlbW92ZSBMaW5rPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IHNhdmVMaW5rRmllbGRcIj5TYXZlIENoYW5nZXM8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICA8L3NjcmlwdD5cclxuICBcclxuICA8c2NyaXB0IHR5cGU9XCJ0ZXh0L2h0bWxcIiBpZD1cInJlcG9ydC1kZXNpZ25lclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cIm15TW9kYWxMYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCJOZWVkIGhlbHAgc2V0dGluZyB1cCBhIHJlcG9ydD9cIiB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiaHR0cHM6Ly9kb3RuZXRyZXBvcnQuY29tL2RvY3MvZGVzaWduaW5nLXJlcG9ydHMvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2E+RGVzaWduIHlvdXIgUmVwb3J0XHJcbiAgICAgICAgICAgICAgICAgIDwvaDU+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2xvc2VcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiPjxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+PHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+Q2xvc2U8L3NwYW4+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgbmVlZHMtdmFsaWRhdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICA8aDU+PHNwYW4gY2xhc3M9XCJmYSBmYS1maWxlXCI+PC9zcGFuPiZuYnNwO0Nob29zZSBSZXBvcnQgVHlwZTwvaDU+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tMyBjb2wteHMtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b24tYm94XCIgdGFiaW5kZXg9XCIwXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCl7IHNldFJlcG9ydFR5cGUoJ0xpc3QnKTsgfSwgY3NzOiB7YWN0aXZlOiBSZXBvcnRUeXBlKCk9PSdMaXN0J31cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS0yeCBmYS1saXN0LWFsdFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+TGlzdDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zIGNvbC14cy02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1ib3hcIiB0YWJpbmRleD1cIjBcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXsgc2V0UmVwb3J0VHlwZSgnU3VtbWFyeScpOyB9LCBjc3M6IHthY3RpdmU6IFJlcG9ydFR5cGUoKT09J1N1bW1hcnknfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLTJ4IGZhLXRhYmxlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5TdW1tYXJ5PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29sLXhzLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLWJveFwiIHRhYmluZGV4PVwiMFwiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpeyBzZXRSZXBvcnRUeXBlKCdCYXInKTsgfSwgY3NzOiB7YWN0aXZlOiBSZXBvcnRUeXBlKCk9PSdCYXInfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLTJ4IGZhLWJhci1jaGFydFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+QmFyPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29sLXhzLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLWJveFwiIHRhYmluZGV4PVwiMFwiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpeyBzZXRSZXBvcnRUeXBlKCdQaWUnKTsgfSwgY3NzOiB7YWN0aXZlOiBSZXBvcnRUeXBlKCk9PSdQaWUnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLTJ4IGZhLXBpZS1jaGFydFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+UGllPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29sLXhzLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLWJveFwiIHRhYmluZGV4PVwiMFwiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpeyBzZXRSZXBvcnRUeXBlKCdMaW5lJyk7IH0sIGNzczoge2FjdGl2ZTogUmVwb3J0VHlwZSgpPT0nTGluZSd9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtMnggZmEtbGluZS1jaGFydFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+TGluZTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zIGNvbC14cy02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1ib3hcIiB0YWJpbmRleD1cIjBcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXsgc2V0UmVwb3J0VHlwZSgnTWFwJyk7IH0sIGNzczoge2FjdGl2ZTogUmVwb3J0VHlwZSgpPT0nTWFwJ31cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS0yeCBmYS1nbG9iZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+TWFwPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29sLXhzLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLWJveFwiIHRhYmluZGV4PVwiMFwiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpeyBzZXRSZXBvcnRUeXBlKCdTaW5nbGUnKTsgfSwgY3NzOiB7YWN0aXZlOiBSZXBvcnRUeXBlKCk9PSdTaW5nbGUnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLTJ4IGZhLXdpbmRvdy1tYXhpbWl6ZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+U2luZ2xlIFZhbHVlPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29sLXhzLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLWJveFwiIHRhYmluZGV4PVwiMFwiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpeyBzZXRSZXBvcnRUeXBlKCdQaXZvdCcpOyB9LCBjc3M6IHthY3RpdmU6IFJlcG9ydFR5cGUoKT09J1Bpdm90J31cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS0yeCBmYS1yYW5kb21cIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlBpdm90PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8aHIgLz5cclxuICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwicHVsbC1sZWZ0XCI+PHNwYW4gY2xhc3M9XCJmYSBmYS1kYXRhYmFzZVwiPjwvc3Bhbj4mbmJzcDtDaG9vc2UgRGF0YSBmb3IgUmVwb3J0PC9oNT5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtcmlnaHQgYnRuLWdyb3VwIGJ0bi1ncm91cC10b2dnbGUgYnRuLWdyb3VwLXNtXCIgZGF0YS10b2dnbGU9XCJidXR0b25zXCIgcm9sZT1cImdyb3VwXCIgZGF0YS1iaW5kPVwiaWY6IFJlcG9ydElEKCkgPD0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGFjdGl2ZVwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAwcHg7XCIgdGl0bGU9XCJZb3UgY2FuIGNoYW5nZSB0aGUgRGF0YSBzb3VyY2Ugb25seSB3aGVuIGNyZWF0aW5nIGEgbmV3IHJlcG9ydCwgY2hhbmdpbmcgdGhpcyB3aWxsIGNsZWFyIGFsbCBzZWxlY3Rpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJkYXRhb3B0aW9uXCIgaWQ9XCJ0YWJsZVwiIGNoZWNrZWQgZGF0YS1iaW5kPVwiY2hlY2tlZDogdXNlU3RvcmVkUHJvYywgY2hlY2tlZFZhbHVlOiBmYWxzZVwiPiBEeW5hbWljXHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJkYXRhb3B0aW9uXCIgaWQ9XCJwcm9jXCIgdmFsdWU9XCIxXCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogdXNlU3RvcmVkUHJvYywgY2hlY2tlZFZhbHVlOiB0cnVlXCI+IFByZWRlZmluZWRcclxuICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xlYXJmaXhcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cIm9wdGlvbnM6IFByb2NzLCBvcHRpb25zQ2FwdGlvbjogJ0Nob29zZSBTZWN0aW9uLi4uJywgb3B0aW9uc1RleHQ6ICdEaXNwbGF5TmFtZScsIHZhbHVlOiBTZWxlY3RlZFByb2MsIGRpc2FibGU6IGlzRm9ybXVsYUZpZWxkLCB2aXNpYmxlOiB1c2VTdG9yZWRQcm9jXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cIm9wdGlvbnM6IFRhYmxlcywgb3B0aW9uc0NhcHRpb246ICdDaG9vc2UgU2VjdGlvbi4uLicsIG9wdGlvbnNUZXh0OiAndGFibGVOYW1lJywgdmFsdWU6IFNlbGVjdGVkVGFibGUsIGRpc2FibGU6IGlzRm9ybXVsYUZpZWxkLCBoaWRkZW46IHVzZVN0b3JlZFByb2NcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gIFxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgZGF0YS1iaW5kPVwiZGlzYWJsZTogaXNGb3JtdWxhRmllbGQsIGhpZGRlbjogdXNlU3RvcmVkUHJvY1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwid2l0aDogdGV4dFF1ZXJ5LnNlYXJjaEZpZWxkc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPVwic2VhcmNoLWZpZWxkXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJzZWxlY3QyOiB7cGxhY2Vob2xkZXI6ICdPciBTZWFyY2ggZm9yIGEgRGF0YSBGaWVsZC4uLicsIGFqYXg6IHsgdXJsOiB1cmwsIGRhdGFUeXBlOiAnanNvbicsIGRhdGE6IHF1ZXJ5LCBwcm9jZXNzUmVzdWx0czogcHJvY2Vzc1Jlc3VsdHMgfSwgbWluaW11bUlucHV0TGVuZ3RoOiAyLCBhbGxvd0NsZWFyOiB0cnVlIH0sIHZhbHVlOiBzZWxlY3RlZE9wdGlvblwiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgXHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIHBhZGRlZC1kaXZcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBDaG9vc2VGaWVsZHMoKS5sZW5ndGg+MFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbWFsbCBwdWxsLWxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hlY2sgdGhlIGZpZWxkcyB5b3Ugd291bGQgbGlrZSB0byB1c2UgaW4gdGhlIFJlcG9ydFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLXJpZ2h0IGJ0bi10b29sYmFyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJidG4gYnRuLXNtXCIgdGl0bGU9XCJDdXN0b20gRmllbGQgdXNpbmcgRm9ybXVsYVwiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpe2lzRm9ybXVsYUZpZWxkKCFpc0Zvcm11bGFGaWVsZCgpKX0sIHRleHQ6IGlzRm9ybXVsYUZpZWxkKCk/ICdDYW5jZWwnOiAnQ3VzdG9taXplJywgY3NzOiB7J2J0bi1wcmltYXJ5JzogIWlzRm9ybXVsYUZpZWxkKCksICdidG4tZGFuZ2VyJzogaXNGb3JtdWxhRmllbGR9XCI+PC9hPlxyXG4gIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgYnRuLXNtXCIgZGF0YS1iaW5kPVwiY2xpY2s6IE1vdmVBbGxGaWVsZHMsIHZpc2libGU6ICFpc0Zvcm11bGFGaWVsZCgpXCI+U2VsZWN0IGFsbDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IGJ0bi1zbVwiIGRhdGEtYmluZD1cImNsaWNrOiBSZW1vdmVTZWxlY3RlZEZpZWxkcywgdmlzaWJsZTogIWlzRm9ybXVsYUZpZWxkKClcIj5SZW1vdmUgYWxsPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGNvbnRhaW5lci1mbHVpZFwiIGRhdGEtYmluZD1cImZvcmVhY2g6IENob29zZUZpZWxkc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tNCBjb2wteHMtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkSW5BcnJheToge2FycmF5OiAkcGFyZW50LmlzRm9ybXVsYUZpZWxkKCkgPyAkcGFyZW50LmZvcm11bGFGaWVsZHMgOiAkcGFyZW50LlNlbGVjdGVkRmllbGRzLCB2YWx1ZTogJGRhdGF9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IGZpZWxkTmFtZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gIFxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiBsYXN0UGlja2VkRmllbGQoKSAmJiBsYXN0UGlja2VkRmllbGQoKS5maWVsZFR5cGUgPT0gJ0pzb24nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNj5TZWxlY3QgRGF0YSBGaWVsZHMgZnJvbSA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBsYXN0UGlja2VkRmllbGQoKS5maWVsZE5hbWVcIj48L3NwYW4+PC9oNj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgY29udGFpbmVyLWZsdWlkXCIgZGF0YS1iaW5kPVwiZm9yZWFjaDoganNvbkZpZWxkc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS00IGNvbC14cy02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZEluQXJyYXk6IHthcnJheTogJHBhcmVudC5TZWxlY3RlZEZpZWxkcywgdmFsdWU6ICRkYXRhfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IGpzb25Db2x1bW5OYW1lXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IGlzRm9ybXVsYUZpZWxkXCIgaWQ9XCJjdXN0b20tZmllbGQtZGVzaWduXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcHVsbC1yaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCIgdGl0bGU9XCJTYXZlIEN1c3RvbSBGb3JtdWxhIEZpZWxkXCIgZGF0YS1iaW5kPVwiY2xpY2s6IHNhdmVGb3JtdWxhRmllbGQsIHZpc2libGU6IGlzRm9ybXVsYUZpZWxkXCI+U2F2ZTwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIGNsYXNzPVwiYnRuIGJ0bi1zbVwiIHRpdGxlPVwiQ3VzdG9tIEZpZWxkIHVzaW5nIEZvcm11bGFcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXtpc0Zvcm11bGFGaWVsZCghaXNGb3JtdWxhRmllbGQoKSl9LCB0ZXh0OiBpc0Zvcm11bGFGaWVsZCgpPyAnQ2FuY2VsJzogJ0N1c3RvbWl6ZScsIGNzczogeydidG4tcHJpbWFyeSc6ICFpc0Zvcm11bGFGaWVsZCgpLCAnYnRuLWRhbmdlcic6IGlzRm9ybXVsYUZpZWxkfVwiPjwvYT5cclxuICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBwYWRkZWQtZGl2XCIgZGF0YS1iaW5kPVwidmlzaWJsZTogQ2hvb3NlRmllbGRzKCkubGVuZ3RoPjAgJiYgaXNGb3JtdWxhRmllbGQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBhcmUgbm93IGNyZWF0aW5nIGEgQ3VzdG9taXplZCBGaWVsZC4gQ2hlY2sgRmllbGRzIHlvdSB3YW50IHRvIHVzZSBpbiB0aGUgY2FsY3VsYXRpb24sIHRoZW4gY2hvb3NlIHRoZSBvcGVyYXRpb25zIHlvdSB3YW50IHRvIHBlcmZvcm0sIGFuZCBjbGljayBcIlNhdmVcIiBvbiB0aGUgcmlnaHQgYWJvdmUgdG8gYWRkIHlvdXIgQ3VzdG9tIGZpZWxkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2Ugbm90ZSB0aGF0IEN1c3RvbSBGaWVsZCBtdXN0IGJlIGNob3NlbiBpbiB3aXRoaW4gdGhlIHNhbWUgU2VjdGlvbiBhbmQgdGhlaXIgZGF0YSB0eXBlcyBtdXN0IG1hdGNoLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTYgc21hbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXR1cCB5b3VyIEZvcm11bGEgZm9yIGNhbGN1bGF0aW5nIHRoaXMgRmllbGRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02IHJpZ2h0LWFsaWduXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IGJ0bi1zbVwiIGRhdGEtYmluZD1cImNsaWNrOiBhZGRGb3JtdWxhUGFyZW50aGVzZXNcIj5BZGQgKCApPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSBidG4tc21cIiB0aXRsZT1cIkFkZCBhIENvbnN0YW50IFZhbHVlXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGFkZEZvcm11bGFDb25zdGFudFZhbHVlXCI+QWRkIFZhbHVlPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSBidG4tc21cIiBkYXRhLWJpbmQ9XCJjbGljazogY2xlYXJGb3JtdWxhRmllbGRcIj5DbGVhcjwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCIgZGF0YS1iaW5kPVwiaWY6IGZvcm11bGFPbmx5SGFzRGF0ZUZpZWxkc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBEYXRlcyBGaWVsZCBjYWxjdWxhdGlvbiwgeW91IGNhbiBvbmx5IHN1YnN0cmFjdCBkYXRlIGZpZWxkcyBhbmQgZGlzcGxheSB0aGUgcmVzdWx0IGFzIGRheXMsIGhvdXJzLCBtaW51dGVzIG9yIHNlY29uZHMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTIgY29udHJvbC1sYWJlbFwiPkZpZWxkIExhYmVsPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogZm9ybXVsYUZpZWxkTGFiZWxcIiByZXF1aXJlZCBwbGFjZWhvbGRlcj1cIkN1c3RvbSBGaWVsZCBMYWJlbFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTIgY29udHJvbC1sYWJlbFwiPkRhdGEgRm9ybWF0PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiIGRhdGEtYmluZD1cInZhbHVlOiBmb3JtdWxhRGF0YUZvcm1hdFwiIHJlcXVpcmVkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGlmbm90OiBmb3JtdWxhT25seUhhc0RhdGVGaWVsZHMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+U3RyaW5nPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+SW50ZWdlcjwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPkRlY2ltYWw8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5DdXJyZW5jeTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBpZjogZm9ybXVsYU9ubHlIYXNEYXRlRmllbGRzIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPkRheXM8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5Ib3Vyczwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPk1pbnV0ZXM8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5TZWNvbmRzPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBmb3JtdWxhRGF0YUZvcm1hdCgpID09ICdEZWNpbWFsJyB8fCBmb3JtdWxhRGF0YUZvcm1hdCgpID09ICdDdXJyZW5jeSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0yIGNvbnRyb2wtbGFiZWxcIj5Sb3VuZCB0byBEZWNpbWFsIFBsYWNlczwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cInZhbHVlOiBmb3JtdWxhRGVjaW1hbFBsYWNlc1wiIHBsYWNlaG9sZGVyPVwiQ2hvb3NlIERlY2ltYWwgcGxhY2VzIChsZWF2ZSBibGFuayB0byBub3QgdXNlIHJvdW5kaW5nKVwiIHRpdGxlPVwiQ2hvb3NlIERlY2ltYWwgcGxhY2VzIChsZWF2ZSBibGFuayB0byBub3QgdXNlIHJvdW5kaW5nKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTIgY29udHJvbC1sYWJlbFwiPkZpZWxkIEZvcm11bGE8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiZm9yZWFjaDogZm9ybXVsYUZpZWxkc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJwdWxsLWxlZnRcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBzZXR1cEZvcm11bGEuaXNQYXJlbnRoZXNlc1N0YXJ0XCIgc3R5bGU9XCJtYXJnaW4tdG9wOiAwO1wiPig8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiAhc2V0dXBGb3JtdWxhLmlzUGFyZW50aGVzZXNTdGFydCgpICYmICFzZXR1cEZvcm11bGEuaXNQYXJlbnRoZXNlc0VuZCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIHB1bGwtbGVmdFwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDE1cHg7IHBhZGRpbmc6IDVweCAxNXB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogZmllbGROYW1lLCB2aXNpYmxlOiAhc2V0dXBGb3JtdWxhLmlzQ29uc3RhbnRWYWx1ZSgpXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IHNldHVwRm9ybXVsYS5pc0NvbnN0YW50VmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGRhdGEtYmluZD1cInZhbHVlOiBzZXR1cEZvcm11bGEuY29uc3RhbnRWYWx1ZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiIHJlcXVpcmVkIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cInB1bGwtbGVmdFwiIGRhdGEtYmluZD1cInZpc2libGU6IHNldHVwRm9ybXVsYS5pc1BhcmVudGhlc2VzRW5kXCIgc3R5bGU9XCJtYXJnaW4tdG9wOiAwO1wiPik8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1sZWZ0XCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTVweDtcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAkcGFyZW50LnNob3dGb3JtdWxhT3BlcmF0aW9uKCRpbmRleCgpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIiBzdHlsZT1cIm1heC13aWR0aDogNTBweDtcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogc2V0dXBGb3JtdWxhLmZvcm11bGFPcGVyYXRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGlmOiAhJHBhcmVudC5mb3JtdWxhT25seUhhc0RhdGVGaWVsZHMoKSB8fCAoJHBhcmVudC5mb3JtdWxhT25seUhhc0RhdGVGaWVsZHMoKSAmJiAkcGFyZW50LmlzQ29uc3RhbnRPcGVyYXRpb24oJGluZGV4KCkpKSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPis8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPi08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGlmOiBbJ0ludCcsJ01vbmV5JywnRmxvYXQnLCdEb3VibGUnXS5pbmRleE9mKGZpZWxkVHlwZSkgIT0gLTEgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj4qPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj4vPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbGVhcmZpeFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogU2VsZWN0ZWRGaWVsZHMoKS5sZW5ndGg+MFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGhyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aDU+PHNwYW4gY2xhc3M9XCJmYSBmYS10YWJsZVwiPjwvc3Bhbj4mbmJzcDtTZWxlY3RlZCBkYXRhIGZvciB0aGUgUmVwb3J0PC9oNT5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm9cIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBSZXBvcnRUeXBlKCk9PSdCYXInXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtbGlnaHRidWxiLW8gZmEtMnhcIj48L3NwYW4+Jm5ic3A7Rm9yIEJhciBHcmFwaCwgdGhlIGZpcnN0IGZpZWxkIGJlbG93IHdpbGwgc2hvdyBvbiB0aGUgeC1heGlzLiBBbGwgb3RoZXIgZmllbGRzIHdpbGwgc2hvdyBvbiB5LWF4aXMsIGJ1dCB0aGV5IG11c3QgYmUgbnVtZXJpYy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mb1wiIGRhdGEtYmluZD1cInZpc2libGU6IFJlcG9ydFR5cGUoKT09J0xpbmUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtbGlnaHRidWxiLW8gZmEtMnhcIj48L3NwYW4+Jm5ic3A7Rm9yIExpbmUgR3JhcGgsIHRoZSBmaXJzdCBmaWVsZCBiZWxvdyB3aWxsIHNob3cgb24gdGhlIHgtYXhpcyBhbmQgaXQgbmVlZHMgdG8gYmUgbnVtZXJpYy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mb1wiIGRhdGEtYmluZD1cInZpc2libGU6IFJlcG9ydFR5cGUoKT09J1Bpdm90J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWxpZ2h0YnVsYi1vIGZhLTJ4XCI+PC9zcGFuPiZuYnNwO0ZvciBQaXZvdCByZXBvcnQsIHRoZSBmaXJzdCBmaWVsZCBiZWxvdyB3aWxsIGJlIHVzZWQgdG8gUGl2b3QvVHJhbnNwb3NlIHRoZSByb3dzIGFzIGNvbHVtbnMsIGFuZCBpdCBtdXN0IGJlIGdyb3VwZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBSZXBvcnRUeXBlKCk9PSdNYXAnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWxpZ2h0YnVsYi1vIGZhLTJ4XCI+PC9zcGFuPiZuYnNwO0ZvciBNYXAgR3JhcGgsIHRoZSBmaXJzdCBmaWVsZCBiZWxvdyBoYXMgdG8gYmUgYSBSZWdpb24sIGxpa2UgYSBDb3VudHJ5LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMiBjb250cm9sLWxhYmVsXCI+TWFwIERpc3BsYXk8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIiBkYXRhLWJpbmQ9XCJvcHRpb25zOiAkcGFyZW50Lm1hcFJlZ2lvbnMsIHZhbHVlOiBtYXBSZWdpb25cIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwXCIgZGF0YS1iaW5kPVwic29ydGFibGU6IHsgZGF0YTogU2VsZWN0ZWRGaWVsZHMsIG9wdGlvbnM6IHsgaGFuZGxlOiAnLnNvcnRhYmxlJywgY3Vyc29yOiAnbW92ZScsIHBsYWNlaG9sZGVyOiAnZHJvcC1oaWdobGlnaHQnIH0sIHN0cmF0ZWd5TW92ZTogdHJ1ZSB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1jb2x1bW5zXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBzZWxlY3RlZEZpZWxkTmFtZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogaXNGb3JtdWxhRmllbGQoKSA/ICcoJyArIGZpZWxkRm9ybWF0KCkgKyAnKScgOiAnJ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidmlzaWJsZTogISRwYXJlbnQuaXNGaWVsZFZhbGlkRm9yWUF4aXMoJGluZGV4KCksIGZpZWxkVHlwZSwgc2VsZWN0ZWRBZ2dyZWdhdGUoKSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtZGFuZ2VyXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogIWdyb3VwSW5HcmFwaCgpXCI+V2lsbCBub3Qgc2hvdyBpbiA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiAkcGFyZW50LlJlcG9ydFR5cGVcIj48L3NwYW4+Q2hhcnQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLXJpZ2h0XCIgc3R5bGU9XCJtYXJnaW4tdG9wOiAtNXB4O1wiIGRhdGEtYmluZD1cImlmOiAkcGFyZW50LkFnZ3JlZ2F0ZVJlcG9ydCgpICYmICEkcGFyZW50LnVzZVN0b3JlZFByb2MoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIiBkYXRhLWJpbmQ9XCJvcHRpb25zOiAkcGFyZW50LmNhbkRyaWxsZG93bigpICYmICRpbmRleCgpPjAgPyBmaWVsZEFnZ3JlZ2F0ZVdpdGhEcmlsbGRvd24gOiBmaWVsZEFnZ3JlZ2F0ZSwgdmFsdWU6IHNlbGVjdGVkQWdncmVnYXRlXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic29ydGFibGUgcHVsbC1yaWdodFwiIHN0eWxlPVwicGFkZGluZy1yaWdodDogMTVweDtcIiBkYXRhLWJpbmQ9XCJpZm5vdDogJHBhcmVudC51c2VTdG9yZWRQcm9jXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWFycm93cyBcIiBhcmlhLWhpZGRlbj1cInRydWVcIiB0aXRsZT1cIkRyYWcgdG8gcmVvcmRlclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLXJpZ2h0XCIgc3R5bGU9XCJwYWRkaW5nLXJpZ2h0OiAxNXB4O1wiIGRhdGEtYmluZD1cImlmbm90OiAkcGFyZW50LnVzZVN0b3JlZFByb2NcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtdHJhc2gtb1wiIHRpdGxlPVwiQ2Fubm90IERlbGV0ZSBSZXF1aXJlZCBGaWx0ZXJcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBmb3JjZUZpbHRlckZvclRhYmxlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS10cmFzaFwiIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyO1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiRGVsZXRlIHRoaXMgRmllbGRcIiBkYXRhLWJpbmQ9XCJjbGljazogJHBhcmVudC5SZW1vdmVGaWVsZCwgaGlkZGVuOiBmb3JjZUZpbHRlckZvclRhYmxlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtcmlnaHRcIiBzdHlsZT1cInBhZGRpbmctcmlnaHQ6IDE1cHg7XCIgZGF0YS1iaW5kPVwiaWZub3Q6ICRwYXJlbnQudXNlU3RvcmVkUHJvY1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJidXR0b24tYm94IG5vLXBhZGRpbmdcIiB0YWJpbmRleD1cIjBcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXsgZmlsdGVyT25GbHkoIWZpbHRlck9uRmx5KCkpOyB9LCBjc3M6IHthY3RpdmU6IGZpbHRlck9uRmx5KCk9PXRydWV9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1maWx0ZXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIiB0aXRsZT1cIkZpbHRlciBieSB0aGlzIGZpZWxkIG9uIHRoZSBSZXBvcnRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1yaWdodFwiIHN0eWxlPVwicGFkZGluZy1yaWdodDogMTVweDtcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAkcGFyZW50LlJlcG9ydFR5cGUoKSE9J1Bpdm90J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJidXR0b24tYm94IG5vLXBhZGRpbmdcIiB0YWJpbmRleD1cIjBcIiBkYXRhLWJpbmQ9XCJjbGljazogdG9nZ2xlRGlzYWJsZSwgY3NzOiB7YWN0aXZlOiBkaXNhYmxlZCgpPT10cnVlfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtY2xvc2VcIiBhcmlhLWhpZGRlbj1cInRydWVcIiB0aXRsZT1cIkRvIG5vdCBpbmNsdWRlIGluIFJlcG9ydFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLXJpZ2h0XCIgc3R5bGU9XCJwYWRkaW5nLXJpZ2h0OiAxNXB4O1wiIGRhdGEtYmluZD1cInZpc2libGU6ICRwYXJlbnQuUmVwb3J0VHlwZSgpIT0nUGl2b3QnICYmICRwYXJlbnQuUmVwb3J0VHlwZSgpIT0nTGlzdCcgJiYgISRwYXJlbnQudXNlU3RvcmVkUHJvYygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ1dHRvbi1ib3ggbm8tcGFkZGluZ1wiIHRhYmluZGV4PVwiMFwiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpeyBoaWRlSW5EZXRhaWwoIWhpZGVJbkRldGFpbCgpKTsgfSwgY3NzOiB7YWN0aXZlOiBoaWRlSW5EZXRhaWwoKT09dHJ1ZX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWV5ZS1zbGFzaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiSGlkZSBpbiBEZXRhaWxzXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtcmlnaHRcIiBzdHlsZT1cInBhZGRpbmctcmlnaHQ6IDE1cHg7XCIgZGF0YS1iaW5kPVwidmlzaWJsZTogJHBhcmVudC5pc0ZpZWxkVmFsaWRGb3JZQXhpcygkaW5kZXgoKSwgZmllbGRUeXBlLCBzZWxlY3RlZEFnZ3JlZ2F0ZSgpKSAgJiYgJHBhcmVudC5pc0NoYXJ0KCkgJiYgJGluZGV4KCk+MFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJidXR0b24tYm94IG5vLXBhZGRpbmdcIiB0YWJpbmRleD1cIjBcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXsgZ3JvdXBJbkdyYXBoKCFncm91cEluR3JhcGgoKSk7IH0sIGNzczoge2FjdGl2ZTogZ3JvdXBJbkdyYXBoKCk9PWZhbHNlfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtbGluZS1jaGFydFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiSW5jbHVkZSBpbiBzZXJpZXNcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1yaWdodFwiIHN0eWxlPVwicGFkZGluZy1yaWdodDogMTVweDtcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAkcGFyZW50LkluY2x1ZGVTdWJUb3RhbCgpICAmJiAgKFsnSW50JywgJ0RvdWJsZScsICdNb25leScsICdEZWNpbWFsJywgJ0N1cnJlbmN5J10uaW5kZXhPZihmaWVsZFR5cGUpID49IDAgfHwgWydJbnQnLCAnRG91YmxlJywgJ01vbmV5JywgJ0RlY2ltYWwnLCAnQ3VycmVuY3knXS5pbmRleE9mKGZpZWxkRm9ybWF0KCkpID49IDApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ1dHRvbi1ib3ggbm8tcGFkZGluZ1wiIHRhYmluZGV4PVwiMFwiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpeyBkb250U3ViVG90YWwoIWRvbnRTdWJUb3RhbCgpKTsgfSwgY3NzOiB7YWN0aXZlOiBkb250U3ViVG90YWwoKT09dHJ1ZX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLXBsdXMtY2lyY2xlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJEb24ndCBhZGQgdG8gVG90YWwgcm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtcmlnaHRcIiBzdHlsZT1cInBhZGRpbmctcmlnaHQ6IDE1cHg7XCIgZGF0YS1iaW5kPVwidmlzaWJsZTogJHBhcmVudC5SZXBvcnRUeXBlKCkhPSdQaXZvdCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnV0dG9uLWJveCBuby1wYWRkaW5nXCIgdGFiaW5kZXg9XCIwXCIgZGF0YS1iaW5kPVwiY2xpY2s6IHNldHVwTGlua0ZpZWxkLCBjc3M6IHthY3RpdmU6IGxpbmtGaWVsZCgpPT10cnVlfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtbGlua1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiTGluayB0byBhbm90aGVyIFJlcG9ydCBvciBVcmxcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1yaWdodFwiIHN0eWxlPVwicGFkZGluZy1yaWdodDogMTVweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnV0dG9uLWJveCBuby1wYWRkaW5nXCIgdGFiaW5kZXg9XCIwXCIgZGF0YS1iaW5kPVwiY2xpY2s6IHNldHVwRmllbGRPcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1nZWFyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJNb3JlIE9wdGlvbnNcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1yaWdodFwiIHN0eWxlPVwicGFkZGluZy1yaWdodDogMTVweDtcIiBkYXRhLWJpbmQ9XCJpZjogaXNGb3JtdWxhRmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnV0dG9uLWJveCBuby1wYWRkaW5nXCIgdGFiaW5kZXg9XCIwXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGVkaXRGb3JtdWxhRmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLXBlbmNpbFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiRWRpdCBGb3JtdWxhIEZpZWxkXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxociAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogdXNlU3RvcmVkUHJvY1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxoNT48c3BhbiBjbGFzcz1cImZhIGZhLWZpbHRlclwiPjwvc3Bhbj4mbmJzcDtDaG9vc2UgZmlsdGVyczwvaDU+XHJcbiAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiIHN0eWxlPVwicGFkZGluZzogMTBweCAxMHB4OyBvdmVyZmxvdy14OiBhdXRvO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRlbXBsYXRlOiB7bmFtZTogJ2ZpbHRlci1wYXJhbWV0ZXJzJ31cIiBjbGFzcz1cImNvbFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZm5vdDogdXNlU3RvcmVkUHJvY1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxoNT48c3BhbiBjbGFzcz1cImZhIGZhLWZpbHRlclwiPjwvc3Bhbj4mbmJzcDtDaG9vc2UgZmlsdGVyczwvaDU+XHJcbiAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiIHN0eWxlPVwicGFkZGluZzogMTBweCAxMHB4OyBvdmVyZmxvdy14OiBhdXRvO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRlbXBsYXRlOiB7bmFtZTogJ2ZpbHRlci1ncm91cCd9XCIgY2xhc3M9XCJjb2wtMTJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveCBjb2wtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogRWRpdEZpbHRlcnNPblJlcG9ydFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3cgc2V0dGluZyB1cCBhbmQgc2F2aW5nIGZpbHRlcnMgb24gUmVwb3J0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGhyIC8+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IFNhdmVSZXBvcnRcIj5cclxuICAgICAgICAgICAgICAgICAgPGg1PjxzcGFuIGNsYXNzPVwiZmEgZmEtaG91cmdsYXNzXCI+PC9zcGFuPiZuYnNwO0Nob29zZSBTY2hlZHVsZTwvaDU+XHJcbiAgXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJwYWRkaW5nOiAxMHB4IDEwcHhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidGVtcGxhdGU6IHtuYW1lOiAncmVwb3J0LXNjaGVkdWxlJ31cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxociAvPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiIGRhdGEtYmluZD1cImlmOiBTYXZlUmVwb3J0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTIgY29udHJvbC1sYWJlbFwiPlJlcG9ydCBOYW1lPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByZXF1aXJlZCBwbGFjZWhvbGRlcj1cIlJlcG9ydCBOYW1lXCIgZGF0YS1iaW5kPVwidmFsdWU6IFJlcG9ydE5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTIgY29udHJvbC1sYWJlbFwiPlJlcG9ydCBEZXNjcmlwdGlvbjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiIHJvd3M9XCIzXCIgcGxhY2Vob2xkZXI9XCJPcHRpb25hbCBSZXBvcnQgRGVzY3JpcHRpb25cIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogUmVwb3J0RGVzY3JpcHRpb25cIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmbm90OiB1c2VTdG9yZWRQcm9jXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0yIGNvbnRyb2wtbGFiZWxcIj5Tb3J0IEJ5PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcmVxdWlyZWQgZGF0YS1iaW5kPVwib3B0aW9uczogU2VsZWN0ZWRGaWVsZHMsIG9wdGlvbnNUZXh0OiAnc2VsZWN0ZWRGaWVsZE5hbWUnLCBvcHRpb25zVmFsdWU6ICdmaWVsZElkJywgdmFsdWU6IFNvcnRCeUZpZWxkXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1zZWNvbmRhcnlcIiBkYXRhLWJpbmQ9XCJ0ZXh0OiAhU29ydERlc2MoKSA/ICfilrIgU29ydCBBc2NlbmRpbmcnIDogJ1NvcnQgRGVzY2VuZGluZyDilrwnLCBjbGljazogZnVuY3Rpb24oKSB7IFNvcnREZXNjKCFTb3J0RGVzYygpKTsgcmV0dXJuIGZhbHNlOyB9XCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1zZWNvbmRhcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogYWRkU29ydEZpZWxkXCI+QWRkIFNvcnQgRmllbGQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJmb3JlYWNoOiBTb3J0RmllbGRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTIgY29udHJvbC1sYWJlbFwiPiZuYnNwOyZuYnNwO1RoZW4gU29ydCBCeTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcmVxdWlyZWQgZGF0YS1iaW5kPVwib3B0aW9uczogJHBhcmVudC5TZWxlY3RlZEZpZWxkcywgb3B0aW9uc1RleHQ6ICdzZWxlY3RlZEZpZWxkTmFtZScsIG9wdGlvbnNWYWx1ZTogJ2ZpZWxkSWQnLCB2YWx1ZTogc29ydEJ5RmllbGRJZFwiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tc2Vjb25kYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IHJlbW92ZVwiPlJlbW92ZSBTb3J0IEZpZWxkPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1zZWNvbmRhcnlcIiBkYXRhLWJpbmQ9XCJ0ZXh0OiAhc29ydERlc2MoKSA/ICfilrIgU29ydCBBc2NlbmRpbmcnIDogJ1NvcnQgRGVzY2VuZGluZyDilrwnLCBjbGljazogZnVuY3Rpb24oKSB7IHNvcnREZXNjKCFzb3J0RGVzYygpKTsgcmV0dXJuIGZhbHNlOyB9XCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1zZWNvbmRhcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogJHBhcmVudC5hZGRTb3J0RmllbGRcIj5BZGQgU29ydCBGaWVsZDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cInZpc2libGU6IFJlcG9ydFR5cGUoKSE9J1Bpdm90J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogSW5jbHVkZVN1YlRvdGFsXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGUgVG90YWwgUm93XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiaGlkZGVuOiBBZ2dyZWdhdGVSZXBvcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IFNob3dVbmlxdWVSZWNvcmRzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNob3cgb25seSBVbmlxdWUgUmVjb3Jkc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3ggY29sLW1kLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IG1heFJlY29yZHNcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heCBSZWNvcmRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMFwiIGRhdGEtYmluZD1cImlmOiBtYXhSZWNvcmRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIHN0eWxlPVwid2lkdGg6IDE1MHB4O1wiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcmVxdWlyZWQgcGxhY2Vob2xkZXI9XCJPbmx5IHRvcCBuLi4uXCIgZGF0YS1iaW5kPVwidmFsdWU6IE9ubHlUb3AsIHZpc2libGU6IG1heFJlY29yZHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cInZpc2libGU6IGlzQ2hhcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBTaG93RGF0YVdpdGhHcmFwaFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNob3cgRGF0YSBhbG9uZyB3aXRoIEdyYXBoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwidmlzaWJsZTogQ2FuU2F2ZVJlcG9ydHMoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IFNhdmVSZXBvcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2F2ZSBSZXBvcnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBTYXZlUmVwb3J0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTIgY29udHJvbC1sYWJlbFwiPkNob29zZSBGb2xkZXI8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7XCIgZGF0YS1iaW5kPVwib3B0aW9uczogRm9sZGVycywgb3B0aW9uc1RleHQ6ICdGb2xkZXJOYW1lJywgb3B0aW9uc1ZhbHVlOiAnSWQnLCB2YWx1ZTogRm9sZGVySURcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gIFxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogYWRtaW5Nb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGhyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZW1wbGF0ZToge25hbWU6ICdtYW5hZ2UtYWNjZXNzLXRlbXBsYXRlJ31cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJidG4gYnRuLWRhbmdlclwiIGRhdGEtYmluZD1cImNsaWNrOiBjYW5jZWxDcmVhdGVSZXBvcnRcIj5DYW5jZWwgZWRpdGluZyBSZXBvcnQ8L2E+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogU2F2ZVJlcG9ydCgpICYmIENhblNhdmVSZXBvcnRzKCksIGNsaWNrOiBTYXZlV2l0aG91dFJ1blwiIHN0eWxlPVwicGFkZGluZy1yaWdodDogMTBweDtcIj5TYXZlIFJlcG9ydDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiIGRhdGEtYmluZD1cInRleHQ6IFNhdmVSZXBvcnQoKSAmJiBDYW5TYXZlUmVwb3J0cygpPyAnU2F2ZSAmIFJ1biBSZXBvcnQnOiAnUnVuIFJlcG9ydCcsIGNsaWNrOiBSdW5SZXBvcnRcIj5SdW4gUmVwb3J0PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgPC9zY3JpcHQ+XHJcbiAgYCk7XHJcbiAgdGhpcy5jZHJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbn1cclxuXHJcbn1cclxuIiwiPGRpdiBpZD1cImRvdC1uZXQtcmVwb3J0XCIgY2xhc3M9XCJib2R5LWNvbnRlbnRcIj5cclxuICAgIDxkaXY+XHJcbiAgICAgICAgPGgyPk1hbmFnZSBEYXRhYmFzZTwvaDI+XHJcbiAgICAgICAgPHA+XHJcbiAgICAgICAgICAgIFlvdSBjYW4gc2VsZWN0IGFuZCBtYW5hZ2UgZGlzcGxheSBuYW1lcyBmb3IgdGhlIFRhYmxlcyBhbmQgQ29sdW1ucyB5b3Ugd291bGQgbGlrZSB0byBhbGxvdyBpbiAuTmV0IFJlcG9ydCBCdWlsZGVyLlxyXG4gICAgICAgIDwvcD5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyXCI+XHJcbiAgICAgICAgICAgIERvIG5vdCBleHBvc2UgdGhpcyBTZXR1cCBUb29sIHRvIGVuZCB1c2VycyB3aG8gc2hvdWxkIG5vdCBoYXZlIGFjY2VzcyB0byBpdC4gSWRlYWxseSwgb25seSBEZXZlbG9wZXJzIHNob3VsZCBiZSBnaXZlbiBhY2Nlc3MgdG8gdGhpcyB1dGlsaXR5LlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidmlzaWJsZTogZmFsc2U7XCI+XHJcbiAgICAgICAgICAgIExvYWRpbmcuLi5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgZGF0YS1iaW5kPVwidmlzaWJsZTogdHJ1ZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJvcHRpb25zOiBEYXRhQ29ubmVjdGlvbnMsIG9wdGlvbnNUZXh0OiAnRGF0YUNvbm5lY3ROYW1lJywgb3B0aW9uc1ZhbHVlOiAnRGF0YUNvbm5lY3RHdWlkJywgdmFsdWU6IGN1cnJlbnRDb25uZWN0aW9uS2V5XCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIiBkYXRhLWJpbmQ9XCJjbGljazogc3dpdGNoQ29ubmVjdGlvbiwgdmlzaWJsZTogY2FuU3dpdGNoQ29ubmVjdGlvblwiPlN3aXRjaCBDb25uZWN0aW9uPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIiBkYXRhLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS10YXJnZXQ9XCIjYWRkLWNvbm5lY3Rpb24tbW9kYWxcIj5BZGQgTmV3IENvbm5lY3Rpb248L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiIGRhdGEtYmluZD1cImNsaWNrOiBleHBvcnRBbGxcIj5FeHBvcnQgQ29ubmVjdGlvbjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGltcG9ydFN0YXJ0XCI+SW1wb3J0IENvbm5lY3Rpb248L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBpbXBvcnRpbmdGaWxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgUGxlYXNlIHNlbGVjdCBhIGZpbGUgeW91IGhhdmUgcHJldmlvdXNseSBleHBvcnRlZCBmcm9tIHRoaXMgdXRpbGl0eS4gVGhlIHN5c3RlbSB3aWxsIGxvYWQgdGhlIHNjcmVlbiB3aXRoIHRoZSBEYXRhIENvbm5lY3Rpb24gc2V0dGluZyBpbiB0aGUgZmlsZSwgaG93ZXZlciwgaXQgd2lsbCA8Yj5OT1Q8L2I+IGJlIHNhdmVkIHVudGlsIHlvdSBwcmVzcyB0aGUgU2F2ZSBBbGwgYnV0dG9uIG9yIFNhdmUgaW5kaXZpZHVhbCB0YWJsZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgYWNjZXB0PVwiLmpzb25cIiBpZD1cImltcG9ydC1maWxlXCIgZGF0YS1iaW5kPVwiZXZlbnQ6IHsgY2hhbmdlOiBmdW5jdGlvbigpIHsgaW1wb3J0RmlsZSgkZWxlbWVudC5maWxlc1swXSkgfSB9XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtYnRuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbGlua1wiIGRhdGEtYmluZD1cImNsaWNrOiBpbXBvcnRDYW5jZWxcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8YnIgLz5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8IS0tIE5hdiB0YWJzIC0tPlxyXG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXRhYnNcIiByb2xlPVwidGFibGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgPGxpIHJvbGU9XCJwcmVzZW50YXRpb25cIiBjbGFzcz1cIm5hdi1pdGVtXCI+PGEgY2xhc3M9XCJuYXYtbGluayBhY3RpdmVcIiBocmVmPVwiI3RhYmxlc2ZpZWxkc1wiIGFyaWEtY29udHJvbHM9XCJob21lXCIgcm9sZT1cInRhYlwiIGRhdGEtdG9nZ2xlPVwidGFiXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCkgeyBjdXN0b21UYWJsZU1vZGUoZmFsc2UpOyB9XCI+VGFibGVzIGFuZCBGaWVsZHM8L2E+PC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSByb2xlPVwicHJlc2VudGF0aW9uXCIgY2xhc3M9XCJuYXYtaXRlbVwiPjxhIGNsYXNzPVwibmF2LWxpbmtcIiBocmVmPVwiI3RhYmxlc2ZpZWxkc1wiIGFyaWEtY29udHJvbHM9XCJjdXN0b21cIiByb2xlPVwidGFiXCIgZGF0YS10b2dnbGU9XCJ0YWJcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKSB7IGN1c3RvbVRhYmxlTW9kZSh0cnVlKTsgfVwiPkN1c3RvbSBEYXRhIFZpZXdzPC9hPjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgcm9sZT1cInByZXNlbnRhdGlvblwiIGNsYXNzPVwibmF2LWl0ZW1cIj48YSBjbGFzcz1cIm5hdi1saW5rXCIgaHJlZj1cIiNyZWxhdGlvbnNcIiBhcmlhLWNvbnRyb2xzPVwicHJvZmlsZVwiIHJvbGU9XCJ0YWJcIiBkYXRhLXRvZ2dsZT1cInRhYlwiPlJlbGF0aW9uczwvYT48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIHJvbGU9XCJwcmVzZW50YXRpb25cIiBjbGFzcz1cIm5hdi1pdGVtXCI+PGEgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjcHJvY2VkdXJlXCIgYXJpYS1jb250cm9scz1cInByb2NlZHVyZVwiIHJvbGU9XCJ0YWJcIiBkYXRhLXRvZ2dsZT1cInRhYlwiPlN0b3JlZCBQcm9jczwvYT48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIHJvbGU9XCJwcmVzZW50YXRpb25cIiBjbGFzcz1cIm5hdi1pdGVtXCI+PGEgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjbWFuYWdlYWNjZXNzXCIgYXJpYS1jb250cm9scz1cIm1hbmFnZWFjY2Vzc1wiIHJvbGU9XCJ0YWJcIiBkYXRhLXRvZ2dsZT1cInRhYlwiPk1hbmFnZSBSZXBvcnRzIEFjY2VzczwvYT48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxiciAvPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tIFRhYiBwYW5lcyAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJmaXgtY29udGVudFwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiB0cnVlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1jb250ZW50XCI+XHJcbiAgICAgICAgICAgIDxkaXYgcm9sZT1cInRhYnBhbmVsXCIgY2xhc3M9XCJ0YWItcGFuZSBhY3RpdmVcIiBpZD1cInRhYmxlc2ZpZWxkc1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ3aXRoOiBUYWJsZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC1zbVwiIHBsYWNlaG9sZGVyPVwiRmlsdGVyIFRhYmxlcyBmb3IuLi5cIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogdGFibGVGaWx0ZXIsIHZhbHVlVXBkYXRlOiAnYWZ0ZXJrZXlkb3duJ1wiIHN0eWxlPVwiZmxvYXQ6IGxlZnQ7IHdpZHRoOiAxNDBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbVwiIGRhdGEtYmluZD1cImNsaWNrOiBjbGVhclRhYmxlRmlsdGVyLCAgdmlzaWJsZTogdGFibGVGaWx0ZXIoKSE9JycgJiYgdGFibGVGaWx0ZXIoKSE9bnVsbFwiPjxzcGFuIGNsYXNzPVwiZmEgZmEtcmVtb3ZlXCI+PC9zcGFuPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtXCIgb25jbGljaz1cIm9wZW5hbGwoKVwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDE1cHg7XCI+T3BlbiBhbGw8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbVwiIG9uY2xpY2s9XCJjbG9zZWFsbCgpXCI+Q2xvc2UgYWxsPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc21cIiBkYXRhLWJpbmQ9XCJjbGljazogc2VsZWN0QWxsLCBoaWRkZW46ICRyb290LmN1c3RvbVRhYmxlTW9kZVwiPlNlbGVjdCBhbGw8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbVwiIGRhdGEtYmluZD1cImNsaWNrOiB1bnNlbGVjdEFsbCwgaGlkZGVuOiAkcm9vdC5jdXN0b21UYWJsZU1vZGVcIj5VbnNlbGVjdCBhbGw8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiAkcm9vdC5jdXN0b21TcWwuYWRkTmV3Q3VzdG9tU3FsVGFibGUsIHZpc2libGU6ICRyb290LmN1c3RvbVRhYmxlTW9kZVwiPkFkZCBOZXcgQ3VzdG9tIFRhYmxlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogJHJvb3Quc2F2ZUNoYW5nZXMsIGhpZGRlbjogJHJvb3QuY3VzdG9tVGFibGVNb2RlXCI+U2F2ZSBBbGwgQ2hhbmdlczwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xlYXJmaXhcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxociAvPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGZvcm0taW5saW5lIGNvbC1tZC00XCIgZGF0YS1iaW5kPVwid2l0aDogcGFnZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZW1wbGF0ZTogJ3BhZ2VyLXRlbXBsYXRlJywgZGF0YTogJGRhdGFcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IFRhYmxlcy5tb2RlbCgpLmxlbmd0aFwiPjwvc3Bhbj4gVGFibGVzL1ZpZXdzIHJlYWQgZnJvbSBkYXRhYmFzZS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZW51IHJvd1wiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDIwcHg7XCIgZGF0YS1iaW5kPVwiZm9yZWFjaDogcGFnZWRUYWJsZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVudS1jYXRlZ29yeSBjYXJkXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgY2xlYXJmaXhcIiBzdHlsZT1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94IHB1bGwtbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IFNlbGVjdGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IFRhYmxlTmFtZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidmlzaWJsZTogSXNWaWV3XCIgY2xhc3M9XCJsYWJlbC1zbVwiPih2aWV3KTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtXCIgdGl0bGU9XCJTYXZlIHRoaXMgVGFibGVcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXskZGF0YS5zYXZlVGFibGUoJHJvb3Qua2V5cy5BY2NvdW50QXBpS2V5LCAkcm9vdC5rZXlzLkRhdGFiYXNlQXBpS2V5KTt9XCI+PGkgY2xhc3M9XCJmYSBmYS1mbG9wcHktb1wiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbVwiIHRpdGxlPVwiTWFuYWdlIFJvbGUgQWNjZXNzXCIgZGF0YS10b2dnbGU9XCJtb2RhbFwiIGRhdGEtdGFyZ2V0PVwiI3JvbGUtYWNjZXNzLW1vZGFsXCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRyb290LnNlbGVjdEFsbG93ZWRSb2xlc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXVzZXJcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwicHVsbC1yaWdodFwiIGRhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIiBkYXRhLWJpbmQ9XCJhdHRyOiB7J2RhdGEtdGFyZ2V0JzogJyN0YWJsZScrJGluZGV4KCl9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWRvd25cIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImF0dHI6IHtpZDogJ3RhYmxlJyskaW5kZXgoKX1cIiBjbGFzcz1cInBhbmVsLWNvbGxhcHNlIGNvbGxhcHNlIGluXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsLXNtXCI+RGlzcGxheSBOYW1lPC9sYWJlbD48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwiZWRpdGFibGU6IERpc3BsYXlOYW1lXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwtc21cIj5TY2hlbWEgTmFtZTwvbGFiZWw+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cImVkaXRhYmxlOiBTY2hlbWFOYW1lXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwtc21cIj5BY2NvdW50IElkIEZpZWxkPC9sYWJlbD48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwiZWRpdGFibGU6IEFjY291bnRJZEZpZWxkXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiY2hlY2stYm94XCIgZGF0YS12YWw9XCJ0cnVlXCIgdHlwZT1cImNoZWNrYm94XCIgdmFsdWU9XCJ0cnVlXCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogRG9Ob3REaXNwbGF5XCIgdGl0bGU9XCJEbyBub3QgZGlzcGxheSB0aGlzIHRhYmxlIGZvciBzZWxlY3RpbmcgaW4gcmVwb3J0c1wiPiBEbyBOb3QgRGlzcGxheVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IEN1c3RvbVRhYmxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1iaW5kPVwiY2xpY2s6ICRyb290LmN1c3RvbVNxbC52aWV3Q3VzdG9tU3FsLmJpbmQoJGRhdGEpXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1zZWNvbmRhcnlcIj5WaWV3IEN1c3RvbSBTcWw8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT1cInBhZGRpbmctbGVmdDogMTVweDtcIiBjbGFzcz1cImxhYmVsLXNtXCI+PHNwYW4gZGF0YS1iaW5kPVwidGV4dDogQ29sdW1ucygpLmxlbmd0aFwiPjwvc3Bhbj4gQ29sdW1uczwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGluayBsYWJlbC1zbVwiIGRhdGEtYmluZD1cImNsaWNrOiBhdXRvRm9ybWF0LCB2aXNpYmxlOiBTZWxlY3RlZFwiPkF1dG8gRm9ybWF0PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGluayBsYWJlbC1zbVwiIGRhdGEtYmluZD1cImNsaWNrOiB1bnNlbGVjdEFsbENvbHVtbnMsIHZpc2libGU6IFNlbGVjdGVkXCI+VW5zZWxlY3QgQWxsPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGluayBsYWJlbC1zbVwiIGRhdGEtYmluZD1cImNsaWNrOiBzZWxlY3RBbGxDb2x1bW5zLCB2aXNpYmxlOiBTZWxlY3RlZFwiPlNlbGVjdCBBbGw8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWdyb3VwXCIgZGF0YS1iaW5kPVwic29ydGFibGU6IHsgZGF0YTogQ29sdW1ucywgb3B0aW9uczogeyBoYW5kbGU6ICcuc29ydGFibGUnLCBjdXJzb3I6ICdtb3ZlJyB9LCBhZnRlck1vdmU6ICRwYXJlbnQuY29sdW1uU29ydGVkIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBTZWxlY3RlZCwgZW5hYmxlOiAkcGFyZW50LlNlbGVjdGVkKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJlZGl0YWJsZTogRGlzcGxheU5hbWUsIGF0dHI6IHt0aXRsZTogJ0RCIGZpZWxkIGlzICcgKyBDb2x1bW5OYW1lKCl9XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBQcmltYXJ5S2V5XCIgY2xhc3M9XCJiYWRnZSBiYWRnZS1wcmltYXJ5XCI+UHJpbWFyeTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGRhdGEtYmluZD1cInZpc2libGU6IEZvcmVpZ25LZXlcIiBjbGFzcz1cImJhZGdlIGJhZGdlLWluZm9cIj5Gb3JlaWduPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBwdWxsLXJpZ2h0XCIgZGF0YS10b2dnbGU9XCJtb2RhbFwiIGRhdGEtdGFyZ2V0PVwiI2NvbHVtbi1tb2RhbFwiIHRpdGxlPVwiQWxsIGNvbHVtbiBvcHRpb25zXCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRyb290LnNlbGVjdENvbHVtbi5iaW5kKCRkYXRhLCBmYWxzZSlcIj4uLi48L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuIGJ0bi1zbSBwdWxsLXJpZ2h0IHNvcnRhYmxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1hcnJvd3NcIiBhcmlhLWhpZGRlbj1cInRydWVcIiB0aXRsZT1cIkRyYWcgdG8gcmVvcmRlclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiByb2xlPVwidGFicGFuZWxcIiBjbGFzcz1cInRhYi1wYW5lXCIgaWQ9XCJyZWxhdGlvbnNcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgIDxmb3JtIGlkPVwiZm9ybS1qb2luc1wiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgU2V0dXAgeW91ciBEYXRhYmFzZSBSZWxhdGlvbnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS10b2dnbGU9XCJ0b29sdGlwXCIgZGF0YS1wbGFjZW1lbnQ9XCJyaWdodFwiIHRpdGxlPVwiUmVwb3J0IEJ1aWxkZXIgYWxzbyBuZWVkcyB0byBrbm93IHRoZSBEYXRhIFRhYmxlIFJlbGF0aW9ucyBpbiBvcmRlciB0byBHZW5lcmF0ZSBSZXBvcnRzLiBZb3UgaGF2ZSB0byBzcGVjaWZ5IGl0IGhlcmUuXCIgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGUgaGVscHRpcFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3A+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZCBkYXRhLWJpbmQ9XCJ3aXRoOiBKb2luRmlsdGVyc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpbWFyeSBUYWJsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgaW5wdXQtZ3JvdXAtc21cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LXNtXCIgZGF0YS1iaW5kPVwidmFsdWU6IHByaW1hcnlUYWJsZSwgdmFsdWVVcGRhdGU6ICdhZnRlcmtleWRvd24nXCIgcGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtYWRkb25cIj48aSBjbGFzcz1cImZhIGZhLWZpbHRlclwiPjwvaT48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWVsZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgaW5wdXQtZ3JvdXAtc21cIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC1zbVwiIGRhdGEtYmluZD1cInZhbHVlOiBwcmltYXJ5RmllbGQsIHZhbHVlVXBkYXRlOiAnYWZ0ZXJrZXlkb3duJ1wiIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLWFkZG9uXCI+PGkgY2xhc3M9XCJmYSBmYS1maWx0ZXJcIj48L2k+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSm9pbiBUeXBlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1zbVwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LXNtXCIgZGF0YS1iaW5kPVwidmFsdWU6IGpvaW5UeXBlLCB2YWx1ZVVwZGF0ZTogJ2FmdGVya2V5ZG93bidcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC1hZGRvblwiPjxpIGNsYXNzPVwiZmEgZmEtZmlsdGVyXCI+PC9pPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpvaW4gVGFibGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIGlucHV0LWdyb3VwLXNtXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtc21cIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogam9pblRhYmxlLCB2YWx1ZVVwZGF0ZTogJ2FmdGVya2V5ZG93bidcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC1hZGRvblwiPjxpIGNsYXNzPVwiZmEgZmEtZmlsdGVyXCI+PC9pPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIGlucHV0LWdyb3VwLXNtXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtc21cIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogam9pbkZpZWxkLCB2YWx1ZVVwZGF0ZTogJ2FmdGVya2V5ZG93bidcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC1hZGRvblwiPjxpIGNsYXNzPVwiZmEgZmEtZmlsdGVyXCI+PC9pPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keSBkYXRhLWJpbmQ9XCJmb3JlYWNoOiBmaWx0ZXJlZEpvaW5zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LW1lZGl1bVwiIGRhdGEtYmluZD1cIm9wdGlvbnM6ICRyb290LlRhYmxlcy5hdmFpbGFibGVUYWJsZXMsIG9wdGlvbnNUZXh0OiAnRGlzcGxheU5hbWUnLCB2YWx1ZTogSm9pblRhYmxlXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1iaW5kPVwid2l0aDogSm9pblRhYmxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJvcHRpb25zOiBhdmFpbGFibGVDb2x1bW5zLCBvcHRpb25zVGV4dDogJ0Rpc3BsYXlOYW1lJywgb3B0aW9uc1ZhbHVlOiAnQ29sdW1uTmFtZScsIHZhbHVlOiAkcGFyZW50LkZpZWxkTmFtZVwiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LXNtYWxsXCIgZGF0YS1iaW5kPVwib3B0aW9uczogJHJvb3QuSm9pblR5cGVzLCB2YWx1ZTogSm9pblR5cGVcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC1tZWRpdW1cIiBkYXRhLWJpbmQ9XCJvcHRpb25zOiBPdGhlclRhYmxlcywgb3B0aW9uc1RleHQ6ICdEaXNwbGF5TmFtZScsIHZhbHVlOiBPdGhlclRhYmxlXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtYmluZD1cIndpdGg6IE90aGVyVGFibGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cIm9wdGlvbnM6IGF2YWlsYWJsZUNvbHVtbnMsIG9wdGlvbnNUZXh0OiAnRGlzcGxheU5hbWUnLCBvcHRpb25zVmFsdWU6ICdDb2x1bW5OYW1lJywgdmFsdWU6ICRwYXJlbnQuSm9pbkZpZWxkTmFtZVwiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogRGVsZXRlSm9pblwiPkRlbGV0ZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiBBZGRKb2luXCI+QWRkIG5ldyBKb2luPC9idXR0b24+Jm5ic3A7XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiBTYXZlSm9pbnNcIj5TYXZlIEpvaW5zPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Zvcm0+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBpZD1cInByb2NlZHVyZVwiIGNsYXNzPVwidGFiLXBhbmVcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBkYXRhLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS10YXJnZXQ9XCIjcHJvY2VkdXJlLW1vZGFsXCI+QWRkIFN0b3JlZCBQcm9jcyBmcm9tIGRhdGFiYXNlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogUHJvY2VkdXJlcy5zYXZlZFByb2NlZHVyZXMoKS5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIE5vIFN0b3JlZCBQcm9jZWR1cmVzIGhhdmUgYmVlbiBzZXR1cCB5ZXQuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lbnUgcm93XCIgZGF0YS1iaW5kPVwiZm9yZWFjaDogUHJvY2VkdXJlcy5zYXZlZFByb2NlZHVyZXNcIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAyMHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZW51LWNhdGVnb3J5IGNhcmRcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBjbGVhcmZpeFwiIHN0eWxlPVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBUYWJsZU5hbWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWwteHNcIj5Qcm9jZWR1cmU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc21cIiB0aXRsZT1cIlNhdmUgdGhpcyBQcm9jZWR1cmVcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXskcm9vdC5zYXZlUHJvY2VkdXJlKCRkYXRhLlRhYmxlTmFtZSwgZmFsc2UpO31cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1zYXZlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtXCIgdGl0bGU9XCJNYW5hZ2UgUm9sZSBBY2Nlc3NcIiBkYXRhLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS10YXJnZXQ9XCIjcm9sZS1hY2Nlc3MtbW9kYWxcIiBkYXRhLWJpbmQ9XCJjbGljazogJHJvb3Quc2VsZWN0QWxsb3dlZFJvbGVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdXNlclwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbVwiIHRpdGxlPVwiRGVsZXRlIHRoaXMgUHJvY2VkdXJlXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCl7JGRhdGEuZGVsZXRlVGFibGUoJHJvb3Qua2V5cy5BY2NvdW50QXBpS2V5LCAkcm9vdC5rZXlzLkRhdGFiYXNlQXBpS2V5KTt9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtdHJhc2hcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cInB1bGwtcmlnaHRcIiBkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCIgZGF0YS1iaW5kPVwiYXR0cjogeydkYXRhLXRhcmdldCc6ICcjdGFibGUnKyRpbmRleCgpfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1kb3duXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJhdHRyOiB7aWQ6ICd0YWJsZScrJGluZGV4KCl9XCIgY2xhc3M9XCJwYW5lbC1jb2xsYXBzZSBjb2xsYXBzZSBpblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbC1zbVwiPkRpc3BsYXkgTmFtZTwvbGFiZWw+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cImVkaXRhYmxlOiBEaXNwbGF5TmFtZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsLXNtXCI+U2NoZW1hIE5hbWU8L2xhYmVsPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJlZGl0YWJsZTogU2NoZW1hTmFtZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic21hbGxcIj5Db2x1bW5zPC9sYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZ3JvdXBcIiBkYXRhLWJpbmQ9XCJmb3JlYWNoOiBDb2x1bW5zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJlZGl0YWJsZTogRGlzcGxheU5hbWUsIGF0dHI6IHt0aXRsZTogJ0RCIGZpZWxkIGlzICcgKyBDb2x1bW5OYW1lKCl9XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtaW5mb1wiIGRhdGEtYmluZD1cInRleHQ6IEZpZWxkVHlwZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBwdWxsLXJpZ2h0XCIgZGF0YS10b2dnbGU9XCJtb2RhbFwiIGRhdGEtdGFyZ2V0PVwiI2NvbHVtbi1tb2RhbFwiIHRpdGxlPVwiQWxsIGNvbHVtbiBvcHRpb25zXCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRyb290LnNlbGVjdENvbHVtbi5iaW5kKCRkYXRhLCB0cnVlKVwiPi4uLjwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic21hbGxcIj5QYXJhbWV0ZXJzPC9sYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZ3JvdXBcIiBkYXRhLWJpbmQ9XCJmb3JlYWNoOiBQYXJhbWV0ZXJzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJlZGl0YWJsZTogRGlzcGxheU5hbWUsIGF0dHI6IHt0aXRsZTogJ0RCIGZpZWxkIGlzICcgKyBQYXJhbWV0ZXJOYW1lKCl9XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtaW5mb1wiIGRhdGEtYmluZD1cInRleHQ6IFBhcmFtZXRlckRhdGFUeXBlU3RyaW5nXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5IHB1bGwtcmlnaHRcIiBkYXRhLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS10YXJnZXQ9XCIjcGFyYW1ldGVyLW1vZGFsXCIgdGl0bGU9XCJBbGwgUGFyYW1ldGVyIG9wdGlvbnNcIiBkYXRhLWJpbmQ9XCJjbGljazogJHJvb3QuZWRpdFBhcmFtZXRlclwiPi4uLjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgaWQ9XCJtYW5hZ2VhY2Nlc3NcIiBjbGFzcz1cInRhYi1wYW5lXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImZvcmVhY2g6IHJlcG9ydHNBbmRGb2xkZXJzXCIgY2xhc3M9XCJjYXJkXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogMjBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCIgcm9sZT1cImJ1dHRvblwiIGRhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIiBkYXRhLWJpbmQ9XCJhdHRyOiB7aHJlZjogJyNmb2xkZXItJyArIGZvbGRlcklkIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZm9sZGVyXCI+PC9pPiZuYnNwOzxzcGFuIGRhdGEtYmluZD1cInRleHQ6IGZvbGRlclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFwc2VcIiBkYXRhLWJpbmQ9XCJhdHRyOiB7aWQ6ICdmb2xkZXItJyArIGZvbGRlcklkIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IHJlcG9ydHMubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyBSZXBvcnRzIGZvdW5kIGluIHRoaXMgZm9sZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXBcIiBkYXRhLWJpbmQ9XCJmb3JlYWNoOiByZXBvcnRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhXCIgZGF0YS1iaW5kPVwiY3NzOiB7J2ZhLWZpbGUnOiByZXBvcnRUeXBlPT0nTGlzdCcsICdmYS10aC1saXN0JzogcmVwb3J0VHlwZT09J1N1bW1hcnknLCAnZmEtYmFyLWNoYXJ0JzogcmVwb3J0VHlwZT09J0JhcicsICdmYS1waWUtY2hhcnQnOiByZXBvcnRUeXBlPT0nUGllJywgICdmYS1saW5lLWNoYXJ0JzogcmVwb3J0VHlwZT09J0xpbmUnLCAnZmEtZ2xvYmUnOiByZXBvcnRUeXBlID09J01hcCd9XCIgc3R5bGU9XCJmb250LXNpemU6IDE0cHQ7IGNvbG9yOiAjODA4MDgwXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogcmVwb3J0TmFtZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbS10ZXh0IHNtYWxsXCIgZGF0YS1iaW5kPVwidGV4dDogcmVwb3J0RGVzY3JpcHRpb25cIj48L3A+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbWFsbFwiIHN0eWxlPVwicGFkZGluZy10b3A6IDEwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkN1cnJlbnQgUmVwb3J0IEFjY2VzczwvYj48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFuYWdlIGJ5IFVzZXIgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1pbmZvXCIgZGF0YS1iaW5kPVwidGV4dDogdXNlcklkID8gdXNlcklkIDogJ05vIFVzZXInXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlldyBvbmx5IGJ5IFVzZXIgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1pbmZvXCIgZGF0YS1iaW5kPVwidGV4dDogKHZpZXdPbmx5VXNlcklkID8gdmlld09ubHlVc2VySWQgOiAodXNlcklkID8gdXNlcklkIDogJ0FueSBVc2VyJykpXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogZGVsZXRlT25seVVzZXJJZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVsZXRlIG9ubHkgYnkgVXNlciA8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWluZm9cIiBkYXRhLWJpbmQ9XCJ0ZXh0OiBkZWxldGVPbmx5VXNlcklkXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiB1c2VyUm9sZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFuYWdlIGJ5IFJvbGUgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1pbmZvXCIgZGF0YS1iaW5kPVwidGV4dDogdXNlclJvbGUgPyB1c2VyUm9sZSA6ICdObyBSb2xlJ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogdmlld09ubHlVc2VyUm9sZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlldyBvbmx5IGJ5IFJvbGUgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1pbmZvXCIgZGF0YS1iaW5kPVwidGV4dDogdmlld09ubHlVc2VyUm9sZSA/IHZpZXdPbmx5VXNlclJvbGUgOiAnQW55IFJvbGUnXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiBkZWxldGVPbmx5VXNlclJvbGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlbGV0ZSBvbmx5IGJ5IFJvbGUgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1pbmZvXCIgZGF0YS1iaW5kPVwidGV4dDogZGVsZXRlT25seVVzZXJSb2xlID8gZGVsZXRlT25seVVzZXJSb2xlIDogJ1NhbWUgYXMgTWFuYWdlJ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBDbGllbnQgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1pbmZvXCIgZGF0YS1iaW5kPVwidGV4dDogY2xpZW50SWQgPyBjbGllbnRJZCA6ICdBbGwgQ2xpZW50cydcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKSB7IGNoYW5nZUFjY2VzcyghY2hhbmdlQWNjZXNzKCkpfSwgdGV4dDogIWNoYW5nZUFjY2VzcygpID8gJ0NoYW5nZSBBY2Nlc3MnOiAnQ2FuY2VsIENoYW5naW5nIEFjY2VzcycsIGhpZGRlbjogY2hhbmdlQWNjZXNzXCI+Q2hhbmdlIEFjY2VzczwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogY2hhbmdlQWNjZXNzXCIgY2xhc3M9XCJjb2wtbWQtOVwiID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiYm9yZGVyLWxlZnQ6IDFweCBzb2xpZDsgcGFkZGluZy1sZWZ0OiAxMHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRlbXBsYXRlOiB7bmFtZTogJ21hbmFnZS1hY2Nlc3MtdGVtcGxhdGUnLCBkYXRhOiAkcm9vdCB9XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogc2F2ZUFjY2Vzc0NoYW5nZXNcIj5TYXZlIEFjY2VzcyBDaGFuZ2VzPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCkgeyBjaGFuZ2VBY2Nlc3MoIWNoYW5nZUFjY2VzcygpKX0sIHRleHQ6ICFjaGFuZ2VBY2Nlc3MoKSA/ICdDaGFuZ2UgQWNjZXNzJzogJ0NhbmNlbCBDaGFuZ2luZyBBY2Nlc3MnXCI+Q2hhbmdlIEFjY2VzczwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIE1vZGFsIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJjb2x1bW4tbW9kYWxcIiByb2xlPVwiZGlhbG9nXCIgdGFiaW5kZXg9XCItMVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIiByb2xlPVwiZG9jdW1lbnRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIiBkYXRhLWJpbmQ9XCJ3aXRoOiBlZGl0Q29sdW1uKClcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwibXlNb2RhbExhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE1hbmFnZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZGF0YS1iaW5kPVwidGV4dDogQ29sdW1uTmFtZVwiPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9oND5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwPkNob29zZSBvcHRpb25zIHRoYXQgd2lsbCBkZXRlcm1pbmUgaG93IHVzZXJzIGludGVyYWN0IHdpdGggdGhpcyBjb2x1bW4gb24gUmVwb3J0czwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ob3Jpem9udGFsXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXRhYnNcIiByb2xlPVwidGFibGlzdFwiIGRhdGEtYmluZD1cImlmOiAkcm9vdC5pc1N0b3JlZFByb2NDb2x1bW4oKSA9PSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIHJvbGU9XCJwcmVzZW50YXRpb25cIiBjbGFzcz1cIm5hdi1pdGVtXCI+PGEgY2xhc3M9XCJuYXYtbGluayBhY3RpdmVcIiBocmVmPVwiI2NvbHVtbi1tYWluXCIgYXJpYS1jb250cm9scz1cImhvbWVcIiByb2xlPVwidGFiXCIgZGF0YS10b2dnbGU9XCJ0YWJcIj5NYWluIE9wdGlvbnM8L2E+PC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSByb2xlPVwicHJlc2VudGF0aW9uXCIgY2xhc3M9XCJuYXYtaXRlbVwiPjxhIGNsYXNzPVwibmF2LWxpbmtcIiBocmVmPVwiI2NvbHVtbi1mb3JlaWduXCIgYXJpYS1jb250cm9scz1cInByb2ZpbGVcIiByb2xlPVwidGFiXCIgZGF0YS10b2dnbGU9XCJ0YWJcIj5Gb3JlaWduIEtleSBPcHRpb25zPC9hPjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgcm9sZT1cInByZXNlbnRhdGlvblwiIGNsYXNzPVwibmF2LWl0ZW1cIj48YSBjbGFzcz1cIm5hdi1saW5rXCIgaHJlZj1cIiNjb2x1bW4tZmlsdGVyXCIgYXJpYS1jb250cm9scz1cInByb2NlZHVyZVwiIHJvbGU9XCJ0YWJcIiBkYXRhLXRvZ2dsZT1cInRhYlwiPkZpbHRlciBPcHRpb25zPC9hPjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHJvbGU9XCJ0YWJwYW5lbFwiIGNsYXNzPVwidGFiLXBhbmUgYWN0aXZlXCIgaWQ9XCJjb2x1bW4tbWFpblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiIGZvcj1cIkRpc3BsYXlfTmFtZVwiIGRhdGEtYmluZD1cImF0dHI6e3BsYWNlaG9sZGVyOidFeCBGaXJzdCBOYW1lJ31cIiBwbGFjZWhvbGRlcj1cIkV4IEZpcnN0IE5hbWVcIj5EaXNwbGF5IE5hbWU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIHRleHQtYm94IHNpbmdsZS1saW5lXCIgZGF0YS12YWw9XCJ0cnVlXCIgZGF0YS12YWwtcmVxdWlyZWQ9XCJUaGUgRGlzcGxheU5hbWUgZmllbGQgaXMgcmVxdWlyZWQuXCIgaWQ9XCJEaXNwbGF5TmFtZVwiIG5hbWU9XCJEaXNwbGF5TmFtZVwiIHR5cGU9XCJ0ZXh0XCIgdmFsdWU9XCJGaXJzdCBOYW1lXCIgZGF0YS1iaW5kPVwidmFsdWU6IERpc3BsYXlOYW1lLCBhdHRyOntwbGFjZWhvbGRlcjonRXggRmlyc3QgTmFtZSd9XCIgcGxhY2Vob2xkZXI9XCJFeCBGaXJzdCBOYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtdG9nZ2xlPVwidG9vbHRpcFwiIGRhdGEtcGxhY2VtZW50PVwicmlnaHRcIiBjbGFzcz1cImZhIGZhLXF1ZXN0aW9uLWNpcmNsZSBoZWxwdGlwXCIgdGl0bGU9XCJUaGlzIGlzIGEgZnJpZW5kbHkgbmFtZSB0byBkaXNwbGF5IHRvIHlvdXIgdXNlcnNcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wtZ3JvdXBcIiBkYXRhLWJpbmQ9XCJpZjogJHJvb3QuaXNTdG9yZWRQcm9jQ29sdW1uKCkgPT0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tMyBjb250cm9sLWxhYmVsXCIgZm9yPVwiRmllbGRfVHlwZVwiIGRhdGEtYmluZD1cIlwiPkZpZWxkIFR5cGU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiRmllbGRUeXBlX1NlbGVjdGVkSWRcIiBuYW1lPVwiRmllbGRUeXBlLlNlbGVjdGVkSWRcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogRmllbGRUeXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJCb29sZWFuXCI+Qm9vbGVhbjwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiRGF0ZVRpbWVcIj5EYXRlIFRpbWU8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlZhcmNoYXJcIj5WYXJjaGFyPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJNb25leVwiPk1vbmV5PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJJbnRcIj5JbnQ8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkRvdWJsZVwiPkRvdWJsZTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiSnNvblwiPkpzb248L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWVsZC12YWxpZGF0aW9uLXZhbGlkIGhlbHAtaW5saW5lIGluZGVudFwiIGRhdGEtdmFsbXNnLWZvcj1cIkZpZWxkVHlwZVwiIGRhdGEtdmFsbXNnLXJlcGxhY2U9XCJ0cnVlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWdyb3VwXCIgZGF0YS1iaW5kPVwiaWY6ICRyb290LmlzU3RvcmVkUHJvY0NvbHVtbigpID09IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiIGZvcj1cIlByaW1hcnlfS2V5XCIgZGF0YS1iaW5kPVwiXCI+UHJpbWFyeSBLZXk8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImNoZWNrLWJveFwiIGRhdGEtdmFsPVwidHJ1ZVwiIGRhdGEtdmFsLXJlcXVpcmVkPVwiVGhlIFByaW1hcnlLZXkgZmllbGQgaXMgcmVxdWlyZWQuXCIgaWQ9XCJQcmltYXJ5S2V5XCIgbmFtZT1cIlByaW1hcnlLZXlcIiB0eXBlPVwiY2hlY2tib3hcIiB2YWx1ZT1cInRydWVcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOlByaW1hcnlLZXlcIj48aW5wdXQgbmFtZT1cIlByaW1hcnlLZXlcIiB0eXBlPVwiaGlkZGVuXCIgdmFsdWU9XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpZWxkLXZhbGlkYXRpb24tdmFsaWQgaGVscC1pbmxpbmUgaW5kZW50XCIgZGF0YS12YWxtc2ctZm9yPVwiUHJpbWFyeUtleVwiIGRhdGEtdmFsbXNnLXJlcGxhY2U9XCJ0cnVlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiIGRhdGEtYmluZD1cIlwiPkRvIE5vdCBEaXNwbGF5PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJjaGVjay1ib3hcIiBkYXRhLXZhbD1cInRydWVcIiB0eXBlPVwiY2hlY2tib3hcIiB2YWx1ZT1cInRydWVcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOkRvTm90RGlzcGxheVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLXBsYWNlbWVudD1cInJpZ2h0XCIgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGUgaGVscHRpcFwiIHRpdGxlPVwiSWYgdGhpcyBpcyBjaGVja2VkLCB0aGUgY29sdW1uIHdpbGwgbm90IGJlIGRpc3BsYXllZCBvbiBSZXBvcnQgRGVzaWduZXIsIGJ1dCBjYW4gc3RpbGwgYmUgdXNlZCBvbiBHbG9iYWwgRGF0YSBGaWx0ZXJzXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiIGRhdGEtYmluZD1cImlmOiBGaWVsZFR5cGUoKSA9PSAnSnNvbidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tMyBjb250cm9sLWxhYmVsXCI+SlNPTiBEYXRhIFN0cnVjdHVyZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdGV4dC1ib3ggc2luZ2xlLWxpbmVcIiBkYXRhLXZhbD1cInRydWVcIiBkYXRhLXZhbC1yZXF1aXJlZD1cIlRoZSBEaXNwbGF5TmFtZSBmaWVsZCBpcyByZXF1aXJlZC5cIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogSnNvblN0cnVjdHVyZSwgYXR0cjp7cGxhY2Vob2xkZXI6J1BsZWFzZSBwYXN0ZSBpbiBTYW1wbGUgSnNvbiB3aXRoIGFsbCBjb2x1bW5zIGZvciB0aGlzIEpTT04gZGF0YSBmaWVsZCd9XCIgcm93cz1cIjVcIiA+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS10b2dnbGU9XCJ0b29sdGlwXCIgZGF0YS1wbGFjZW1lbnQ9XCJyaWdodFwiIGNsYXNzPVwiZmEgZmEtcXVlc3Rpb24tY2lyY2xlIGhlbHB0aXBcIiB0aXRsZT1cIllvdSBjYW4gcGFzdGUgaW4gYSBzYW1wbGUgSnNvbiBibG9iIHdpdGggYWxsIHRoZSBjb2x1bW5zIHlvdSB3YW50IHRvIHVzZSBpbiB0aGlzIGZpZWxkXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHJvbGU9XCJ0YWJwYW5lbFwiIGNsYXNzPVwidGFiLXBhbmVcIiBpZD1cImNvbHVtbi1maWx0ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiIGRhdGEtYmluZD1cImlmOiAkcm9vdC5pc1N0b3JlZFByb2NDb2x1bW4oKSA9PSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC00IGNvbC1zbS00IGNvbnRyb2wtbGFiZWxcIiBkYXRhLWJpbmQ9XCJcIj5SZXF1aXJlIEZpbHRlciBpZiBDb2x1bW4gaXMgc2VsZWN0ZWQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImNoZWNrLWJveFwiIGRhdGEtdmFsPVwidHJ1ZVwiIHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwidHJ1ZVwiIGRhdGEtYmluZD1cImNoZWNrZWQ6Rm9yY2VGaWx0ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yIGNvbC1zbS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS10b2dnbGU9XCJ0b29sdGlwXCIgZGF0YS1wbGFjZW1lbnQ9XCJyaWdodFwiIGNsYXNzPVwiZmEgZmEtcXVlc3Rpb24tY2lyY2xlIGhlbHB0aXBcIiB0aXRsZT1cIklmIHRoaXMgaXMgY2hlY2tlZCwgdGhlIGNvbHVtbiB3aWxsIGFsd2F5cyByZXF1aXJlIHRoZSB1c2VyIHRvIHBpY2sgYSBmaWx0ZXJlZCB2YWx1ZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiIGRhdGEtYmluZD1cImlmOiAkcm9vdC5pc1N0b3JlZFByb2NDb2x1bW4oKSA9PSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC00IGNvbC1zbS00IGNvbnRyb2wtbGFiZWxcIiBkYXRhLWJpbmQ9XCJcIj5SZXF1aXJlIEZpbHRlciBpZiBUYWJsZSBpcyBzZWxlY3RlZDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiY2hlY2stYm94XCIgZGF0YS12YWw9XCJ0cnVlXCIgdHlwZT1cImNoZWNrYm94XCIgdmFsdWU9XCJ0cnVlXCIgZGF0YS1iaW5kPVwiY2hlY2tlZDpGb3JjZUZpbHRlckZvclRhYmxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMiBjb2wtc20tMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtdG9nZ2xlPVwidG9vbHRpcFwiIGRhdGEtcGxhY2VtZW50PVwicmlnaHRcIiBjbGFzcz1cImZhIGZhLXF1ZXN0aW9uLWNpcmNsZSBoZWxwdGlwXCIgdGl0bGU9XCJJZiB0aGlzIGlzIGNoZWNrZWQsIHRoZSByZXBvcnQgd2lsbCBhbHdheXMgcmVxdWlyZSB0aGUgdXNlciB0byBwaWNrIGEgZmlsdGVyIHZhbHVlIGlmIHVzZXIgcGlja3MgdGhlIGNvbHVtbiBpbiByZXBvcnRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wtZ3JvdXBcIiBkYXRhLWJpbmQ9XCJpZjogRmllbGRUeXBlKCkgPT0gJ0RhdGVUaW1lJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC00IGNvbC1zbS00IGNvbnRyb2wtbGFiZWxcIiBkYXRhLWJpbmQ9XCJcIj5SZXN0cmljdCBGaWx0ZXIgRGF0ZSBSYW5nZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEgY29sLXNtLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJjaGVjay1ib3hcIiB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiByZXN0cmljdERhdGVSYW5nZUZpbHRlclwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMiBjb2wtc20tMlwiIGRhdGEtYmluZD1cImlmOiByZXN0cmljdERhdGVSYW5nZUZpbHRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIHR5cGU9XCJudW1iZXJcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogcmVzdHJpY3REYXRlUmFuZ2VOdW1iZXJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTNcIiBkYXRhLWJpbmQ9XCJpZjogcmVzdHJpY3REYXRlUmFuZ2VGaWx0ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZGF0YS1iaW5kPVwidmFsdWU6IHJlc3RyaWN0RGF0ZVJhbmdlVmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkRheXNcIj5EYXkocyk8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIk1vbnRoc1wiPk1vbnRoKHMpPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJZZWFyc1wiPlllYXIocyk8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yIGNvbC1zbS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS10b2dnbGU9XCJ0b29sdGlwXCIgZGF0YS1wbGFjZW1lbnQ9XCJyaWdodFwiIGNsYXNzPVwiZmEgZmEtcXVlc3Rpb24tY2lyY2xlIGhlbHB0aXBcIiB0aXRsZT1cIklmIHRoaXMgaXMgc2VsZWN0ZWQsIHVzZXIgd2lsbCBub3QgYmUgYWJsZSB0byBwaWNrIGRhdGUgcmFuZ2UgbGFyZ2VyIHRoYW4gdGhpcyBzZWxlY3Rpb25cIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgcm9sZT1cInRhYnBhbmVsXCIgY2xhc3M9XCJ0YWItcGFuZVwiIGlkPVwiY29sdW1uLWZvcmVpZ25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiIGRhdGEtYmluZD1cImlmOiAkcm9vdC5pc1N0b3JlZFByb2NDb2x1bW4oKSA9PSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zIGNvbnRyb2wtbGFiZWxcIiBmb3I9XCJGb3JlaWduX0tleVwiIGRhdGEtYmluZD1cIlwiPkZvcmVpZ24gS2V5PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJjaGVjay1ib3hcIiBkYXRhLXZhbD1cInRydWVcIiBkYXRhLXZhbC1yZXF1aXJlZD1cIlRoZSBGb3JlaWduS2V5IGZpZWxkIGlzIHJlcXVpcmVkLlwiIGlkPVwiRm9yZWlnbktleVwiIG5hbWU9XCJGb3JlaWduS2V5XCIgdHlwZT1cImNoZWNrYm94XCIgdmFsdWU9XCJ0cnVlXCIgZGF0YS1iaW5kPVwiY2hlY2tlZDpGb3JlaWduS2V5XCI+PGlucHV0IG5hbWU9XCJGb3JlaWduS2V5XCIgdHlwZT1cImhpZGRlblwiIHZhbHVlPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS10b2dnbGU9XCJ0b29sdGlwXCIgZGF0YS1wbGFjZW1lbnQ9XCJyaWdodFwiIGNsYXNzPVwiZmEgZmEtcXVlc3Rpb24tY2lyY2xlIGhlbHB0aXBcIiB0aXRsZT1cIkZvcmVpZ24ga2V5cyBhbGxvd3MgZnJpZW5kbHkgc2VsZWN0aW9uIGluIEZpbHRlcnMgdXNpbmcgYSBEcm9wZG93biBMaXN0XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWdyb3VwXCIgZGF0YS1iaW5kPVwiaWY6ICRyb290LmlzU3RvcmVkUHJvY0NvbHVtbigpID09IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiIGZvcj1cIkZvcmVpZ25fVGFibGVcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOkZvcmVpZ25LZXkoKSwgYXR0cjoge3JlcXVpcmVkOiBGb3JlaWduS2V5KCk/J1RydWUnOm51bGwsIHBsYWNlaG9sZGVyOiAnRXggdGJsRW1wbG95ZWVzJ31cIiBwbGFjZWhvbGRlcj1cIkV4IHRibEVtcGxveWVlc1wiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5Gb3JlaWduIFRhYmxlPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogSm9pblRhYmxlLCB2aXNpYmxlOkZvcmVpZ25LZXkoKSwgb3B0aW9uczogJHJvb3QuVGFibGVzLm1vZGVsLCBvcHRpb25zVGV4dDogJ1RhYmxlTmFtZSdcIiBwbGFjZWhvbGRlcj1cIkV4IHRibEVtcGxveWVlc1wiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj48L3NlbGVjdD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmllbGQtdmFsaWRhdGlvbi12YWxpZCBoZWxwLWlubGluZSBpbmRlbnRcIiBkYXRhLXZhbG1zZy1mb3I9XCJGb3JlaWduVGFibGVcIiBkYXRhLXZhbG1zZy1yZXBsYWNlPVwidHJ1ZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiIGRhdGEtYmluZD1cImlmOiAkcm9vdC5pc1N0b3JlZFByb2NDb2x1bW4oKSA9PSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zIGNvbnRyb2wtbGFiZWxcIiBmb3I9XCJGb3JlaWduX0pvaW5cIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOkZvcmVpZ25LZXkoKSwgYXR0cjoge3JlcXVpcmVkOiBGb3JlaWduS2V5KCk/J1RydWUnOm51bGx9XCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPkZvcmVpZ24gSm9pbjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJGb3JlaWduSm9pbl9TZWxlY3RlZElkXCIgbmFtZT1cIkZvcmVpZ25Kb2luLlNlbGVjdGVkSWRcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogRm9yZWlnbkpvaW4sIHZpc2libGU6Rm9yZWlnbktleSgpLCBhdHRyOiB7cmVxdWlyZWQ6IEZvcmVpZ25LZXkoKT8nVHJ1ZSc6bnVsbH1cIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gc2VsZWN0ZWQ9XCJzZWxlY3RlZFwiIHZhbHVlPVwiSW5uZXJcIj5Jbm5lcjwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiTGVmdFwiPkxlZnQ8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlJpZ2h0XCI+UmlnaHQ8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWVsZC12YWxpZGF0aW9uLXZhbGlkIGhlbHAtaW5saW5lIGluZGVudFwiIGRhdGEtdmFsbXNnLWZvcj1cIkZvcmVpZ25Kb2luXCIgZGF0YS12YWxtc2ctcmVwbGFjZT1cInRydWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wtZ3JvdXBcIiBkYXRhLWJpbmQ9XCJpZjogJHJvb3QuaXNTdG9yZWRQcm9jQ29sdW1uKCkgPT0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tMyBjb250cm9sLWxhYmVsXCIgZm9yPVwiRm9yZWlnbl9LZXlfRmllbGRcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOkZvcmVpZ25LZXkoKSwgYXR0cjoge3JlcXVpcmVkOiBGb3JlaWduS2V5KCk/J1RydWUnOm51bGwsIHBsYWNlaG9sZGVyOiAnRXggRW1wbG95ZWVJZCd9XCIgcGxhY2Vob2xkZXI9XCJFeCBFbXBsb3llZUlkXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPkZvcmVpZ24gS2V5IEZpZWxkPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cIkZvcmVpZ25LZXlGaWVsZFwiIG5hbWU9XCJGb3JlaWduS2V5RmllbGRcIiBkYXRhLWJpbmQ9XCJvcHRpb25zOiBKb2luVGFibGUoKS5Db2x1bW5zLCBvcHRpb25zVGV4dDogJ0NvbHVtbk5hbWUnLCBvcHRpb25zVmFsdWU6ICdDb2x1bW5OYW1lJywgdmFsdWU6IEZvcmVpZ25LZXlGaWVsZCwgdmlzaWJsZTpGb3JlaWduS2V5KCksIGF0dHI6IHtyZXF1aXJlZDogRm9yZWlnbktleSgpPydUcnVlJzpudWxsfVwiIHBsYWNlaG9sZGVyPVwiRXggRW1wbG95ZWVJZFwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidmlzaWJsZTpGb3JlaWduS2V5KClcIiBkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLXBsYWNlbWVudD1cInJpZ2h0XCIgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGUgaGVscHRpcFwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiB0aXRsZT1cIkZvcmVpZ24gS2V5IGZpZWxkIGlzIGEgQ29sdW1uIGZyb20gdGhlIEZvcmVpZ24gdGFibGUgd2hpY2ggaXMgdXNlZCBhcyB0aGUgS2V5IGZpZWxkXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWdyb3VwXCIgZGF0YS1iaW5kPVwiaWY6ICRyb290LmlzU3RvcmVkUHJvY0NvbHVtbigpID09IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiIGZvcj1cIkZvcmVpZ25fVmFsdWVfRmllbGRcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOkZvcmVpZ25LZXkoKSwgYXR0cjoge3JlcXVpcmVkOiBGb3JlaWduS2V5KCk/J1RydWUnOm51bGwsIHBsYWNlaG9sZGVyOiAnRXggRW1wbG95ZWVOYW1lJ31cIiBwbGFjZWhvbGRlcj1cIkV4IEVtcGxveWVlTmFtZVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5Gb3JlaWduIFZhbHVlIEZpZWxkPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cIkZvcmVpZ25WYWx1ZUZpZWxkXCIgbmFtZT1cIkZvcmVpZ25WYWx1ZUZpZWxkXCIgZGF0YS1iaW5kPVwib3B0aW9uczogSm9pblRhYmxlKCkuQ29sdW1ucywgb3B0aW9uc1RleHQ6ICdDb2x1bW5OYW1lJywgb3B0aW9uc1ZhbHVlOiAnQ29sdW1uTmFtZScsIHZhbHVlOiBGb3JlaWduVmFsdWVGaWVsZCwgdmlzaWJsZTpGb3JlaWduS2V5KCksIGF0dHI6IHtyZXF1aXJlZDogRm9yZWlnbktleSgpPydUcnVlJzpudWxsfVwiIHBsYWNlaG9sZGVyPVwiRXggRW1wbG95ZWVOYW1lXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOkZvcmVpZ25LZXkoKVwiIGRhdGEtdG9nZ2xlPVwidG9vbHRpcFwiIGRhdGEtcGxhY2VtZW50PVwicmlnaHRcIiBjbGFzcz1cImZhIGZhLXF1ZXN0aW9uLWNpcmNsZSBoZWxwdGlwXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIHRpdGxlPVwiRm9yZWlnbiBWYWx1ZSBmaWVsZCBpcyBhIENvbHVtbiBmcm9tIHRoZSBGb3JlaWduIHRhYmxlIHdoaWNoIGlzIHVzZWQgdG8gZGlzcGxheSB0aGUgdmFsdWUgdG8gdGhlIFVzZXIgaW4gdGhlIFJlcG9ydCBEZXNpZ25lclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogRm9yZWlnbktleVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZXR1cCBhIGNhc2NhZGluZyBmaWx0ZXIgYnkgc2V0dGluZyB1cCBhIHBhcmVudCBmb3IgdGhlIGZvcmVpZ24ga2V5IGJlbG93XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiPlNldHVwIEZvcmVpZ24gS2V5IFBhcmVudD88L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJjaGVjay1ib3hcIiB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOkZvcmVpZ25QYXJlbnRLZXlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLXBsYWNlbWVudD1cInJpZ2h0XCIgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGUgaGVscHRpcFwiIHRpdGxlPVwiRm9yZWlnbiBrZXlzIHBhcmVudCBhbGxvd3MgY2FzY2FkaW5nIGRyb3Bkb3duIHNlbGVjdGlvbiBpbiBGaWx0ZXJzXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiIGRhdGEtYmluZD1cInZpc2libGU6Rm9yZWlnblBhcmVudEtleSgpLCBhdHRyOiB7cmVxdWlyZWQ6IEZvcmVpZ25QYXJlbnRLZXkoKT8nVHJ1ZSc6bnVsbCwgcGxhY2Vob2xkZXI6ICdFeCB0YmxFbXBsb3llZXMnfVwiIHBsYWNlaG9sZGVyPVwiRXggdGJsRW1wbG95ZWVzXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPlBhcmVudCBUYWJsZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogRm9yZWlnbkpvaW5UYWJsZSwgdmlzaWJsZTpGb3JlaWduUGFyZW50S2V5KCksIG9wdGlvbnM6ICRyb290LlRhYmxlcy5tb2RlbCwgb3B0aW9uc1RleHQ6ICdUYWJsZU5hbWUnXCIgcGxhY2Vob2xkZXI9XCJFeCB0YmxFbXBsb3llZXNcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+PC9zZWxlY3Q+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpZWxkLXZhbGlkYXRpb24tdmFsaWQgaGVscC1pbmxpbmUgaW5kZW50XCIgZGF0YS12YWxtc2ctZm9yPVwiRm9yZWlnbkpvaW5UYWJsZVwiIGRhdGEtdmFsbXNnLXJlcGxhY2U9XCJ0cnVlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wtZ3JvdXBcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOkZvcmVpZ25QYXJlbnRLZXkoKVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zIGNvbnRyb2wtbGFiZWxcIiBkYXRhLWJpbmQ9XCJhdHRyOiB7cmVxdWlyZWQ6IEZvcmVpZ25QYXJlbnRLZXkoKT8nVHJ1ZSc6bnVsbCwgcGxhY2Vob2xkZXI6ICdFeCBFbXBsb3llZUlkJ31cIj5QYXJlbnQgS2V5IEZpZWxkPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cIm9wdGlvbnM6IEZvcmVpZ25Kb2luVGFibGUoKS5Db2x1bW5zLCBvcHRpb25zVGV4dDogJ0NvbHVtbk5hbWUnLCBvcHRpb25zVmFsdWU6ICdDb2x1bW5OYW1lJywgdmFsdWU6IEZvcmVpZ25QYXJlbnRLZXlGaWVsZCwgYXR0cjoge3JlcXVpcmVkOiBGb3JlaWduUGFyZW50S2V5KCk/J1RydWUnOm51bGx9XCIgcGxhY2Vob2xkZXI9XCJFeCBFbXBsb3llZUlkXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtdG9nZ2xlPVwidG9vbHRpcFwiIGRhdGEtcGxhY2VtZW50PVwicmlnaHRcIiBjbGFzcz1cImZhIGZhLXF1ZXN0aW9uLWNpcmNsZSBoZWxwdGlwXCIgdGl0bGU9XCJQYXJlbnQgS2V5IGZpZWxkIGlzIGEgQ29sdW1uIGZyb20gdGhlIFBhcmVudCB0YWJsZSB3aGljaCBpcyB1c2VkIGFzIHRoZSBrZXkgaW4gY2FzY2FkaW5nIGZpbHRlcnNcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWdyb3VwXCIgZGF0YS1iaW5kPVwidmlzaWJsZTpGb3JlaWduUGFyZW50S2V5KClcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tMyBjb250cm9sLWxhYmVsXCIgZGF0YS1iaW5kPVwiYXR0cjoge3JlcXVpcmVkOiBGb3JlaWduUGFyZW50S2V5KCk/J1RydWUnOm51bGwsIHBsYWNlaG9sZGVyOiAnRXggRW1wbG95ZWVOYW1lJ31cIj5QYXJlbnQgVmFsdWUgRmllbGQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZGF0YS1iaW5kPVwib3B0aW9uczogRm9yZWlnbkpvaW5UYWJsZSgpLkNvbHVtbnMsIG9wdGlvbnNUZXh0OiAnQ29sdW1uTmFtZScsIG9wdGlvbnNWYWx1ZTogJ0NvbHVtbk5hbWUnLCB2YWx1ZTogRm9yZWlnblBhcmVudFZhbHVlRmllbGQsIGF0dHI6IHtyZXF1aXJlZDogRm9yZWlnblBhcmVudEtleSgpPydUcnVlJzpudWxsfVwiIHBsYWNlaG9sZGVyPVwiRXggRW1wbG95ZWVOYW1lXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtdG9nZ2xlPVwidG9vbHRpcFwiIGRhdGEtcGxhY2VtZW50PVwicmlnaHRcIiBjbGFzcz1cImZhIGZhLXF1ZXN0aW9uLWNpcmNsZSBoZWxwdGlwXCIgdGl0bGU9XCJQYXJlbnQgVmFsdWUgZmllbGQgaXMgYSBDb2x1bW4gZnJvbSB0aGUgUGFyZW50IHRhYmxlIHdoaWNoIGlzIHVzZWQgdG8gZGlzcGxheSB0aGUgdmFsdWUgdG8gdGhlIFVzZXIgaW4gdGhlIFJlcG9ydCBEZXNpZ25lciBmb3IgY2FzY2FkaW5nIGZpbHRlcnNcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWdyb3VwXCIgZGF0YS1iaW5kPVwidmlzaWJsZTpGb3JlaWduUGFyZW50S2V5KClcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tMyBjb250cm9sLWxhYmVsXCIgZGF0YS1iaW5kPVwiYXR0cjoge3JlcXVpcmVkOiBGb3JlaWduUGFyZW50S2V5KCk/J1RydWUnOm51bGwsIHBsYWNlaG9sZGVyOiAnRXggRW1wbG95ZWVOYW1lJ31cIj5Gb3JlaWduIEtleSBGaWx0ZXIgRmllbGQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZGF0YS1iaW5kPVwib3B0aW9uczogSm9pblRhYmxlKCkuQ29sdW1ucywgb3B0aW9uc1RleHQ6ICdDb2x1bW5OYW1lJywgb3B0aW9uc1ZhbHVlOiAnQ29sdW1uTmFtZScsIHZhbHVlOiBGb3JlaWduUGFyZW50QXBwbHlUbywgYXR0cjoge3JlcXVpcmVkOiBGb3JlaWduUGFyZW50S2V5KCk/J1RydWUnOm51bGx9XCIgcGxhY2Vob2xkZXI9XCJFeCBFbXBsb3llZU5hbWVcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS10b2dnbGU9XCJ0b29sdGlwXCIgZGF0YS1wbGFjZW1lbnQ9XCJyaWdodFwiIGNsYXNzPVwiZmEgZmEtcXVlc3Rpb24tY2lyY2xlIGhlbHB0aXBcIiB0aXRsZT1cIkZvcmVpZ24gS2V5IEZpbHRlciBWYWx1ZSBmaWVsZCBpcyBhIENvbHVtbiBmcm9tIHRoZSBGb3JlaWduIHRhYmxlIHdoZXJlIHRoZSBzZWxlY3RlZCBwYXJlbnQgZmlsdGVyIHdpbGwgYmUgYXBwbGllZCBmb3IgY2FzY2FkaW5nIGZpbHRlcnNcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS08ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiPlJlcXVpcmUgRm9yZWlnbiBLZXkgUGFyZW50PzwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImNoZWNrLWJveFwiIHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6Rm9yZWlnblBhcmVudFJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS10b2dnbGU9XCJ0b29sdGlwXCIgZGF0YS1wbGFjZW1lbnQ9XCJyaWdodFwiIGNsYXNzPVwiZmEgZmEtcXVlc3Rpb24tY2lyY2xlIGhlbHB0aXBcIiB0aXRsZT1cIkZvcmVpZ24ga2V5cyBwYXJlbnQgY2FuIGJlIG9wdGlvbmFsIG9yIHNldCB0byByZXF1aXJlZCBmb3IgY2FzY2FkaW5nIGZpbHRlcnNcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+LS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIHRpdGxlPVwiTWFuYWdlIFJvbGUgQWNjZXNzXCIgZGF0YS10b2dnbGU9XCJtb2RhbFwiIGRhdGEtdGFyZ2V0PVwiI3JvbGUtYWNjZXNzLW1vZGFsXCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRyb290LnNlbGVjdEFsbG93ZWRSb2xlc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdXNlclwiPjwvaT5NYW5hZ2UgUm9sZSBBY2Nlc3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCI+RG9uZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbFwiIGlkPVwicHJvY2VkdXJlLW1vZGFsXCIgcm9sZT1cImRpYWxvZ1wiIHRhYmluZGV4PVwiLTJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLWxnXCIgcm9sZT1cImRvY3VtZW50XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50IFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+QWRkIFN0b3JlZCBQcm9jPC9oND5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTIgY29udHJvbC1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VhcmNoIGZvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZGF0YS1iaW5kPVwidmFsdWU6IHNlYXJjaFByb2NlZHVyZVRlcm1cIiBwbGFjZWhvbGRlcj1cIlNlYXJjaCBzdG9yZWQgcHJvY2VkdXJlcyBieSBuYW1lXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiBzZWFyY2hTdG9yZWRQcm9jZWR1cmVcIj5TZWFyY2g8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lbnUgcm93XCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogMjBweDtcIiBkYXRhLWJpbmQ9XCJmb3JlYWNoOiBmb3VuZFByb2NlZHVyZXNcIj4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lbnUtY2F0ZWdvcnkgY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGNsZWFyZml4XCIgc3R5bGU9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IFRhYmxlTmFtZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWwteHNcIj5Qcm9jZWR1cmU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtXCIgdGl0bGU9XCJTYXZlIHRoaXMgUHJvY2VkdXJlXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCl7JHJvb3Quc2F2ZVByb2NlZHVyZSgkZGF0YS5UYWJsZU5hbWUsIHRydWUpO31cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtc2F2ZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJwdWxsLXJpZ2h0XCIgZGF0YS10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtYmluZD1cImF0dHI6IHsnZGF0YS10YXJnZXQnOiAnI3NwXycrJGluZGV4KCl9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1kb3duXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJhdHRyOiB7aWQ6ICdzcF8nKyRpbmRleCgpfVwiIGNsYXNzPVwicGFuZWwtY29sbGFwc2UgY29sbGFwc2UgaW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYXkgTmFtZTxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJlZGl0YWJsZTogRGlzcGxheU5hbWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInNtYWxsXCI+Q29sdW1uczwvbGFiZWw+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cFwiIGRhdGEtYmluZD1cImZvcmVhY2g6IENvbHVtbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJlZGl0YWJsZTogRGlzcGxheU5hbWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1pbmZvXCIgZGF0YS1iaW5kPVwidGV4dDogRmllbGRUeXBlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzbWFsbFwiPlBhcmFtdGVyczwvbGFiZWw+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cFwiIGRhdGEtYmluZD1cImZvcmVhY2g6IFBhcmFtZXRlcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJlZGl0YWJsZTogRGlzcGxheU5hbWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1pbmZvXCIgZGF0YS1iaW5kPVwidGV4dDogUGFyYW1ldGVyRGF0YVR5cGVTdHJpbmdcIj48L3NwYW4+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCBWYWx1ZTogPHNwYW4gZGF0YS1iaW5kPVwiZWRpdGFibGU6IFBhcmFtZXRlclZhbHVlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiPkRvbmU8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbFwiIGlkPVwicGFyYW1ldGVyLW1vZGFsXCIgcm9sZT1cImRpYWxvZ1wiIHRhYmluZGV4PVwiLTFcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCIgcm9sZT1cImRvY3VtZW50XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCIgZGF0YS1iaW5kPVwid2l0aDogZWRpdFBhcmFtZXRlcigpXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cIm15TW9kYWxMYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBNYW5hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGRhdGEtYmluZD1cInRleHQ6IFBhcmFtZXRlck5hbWVcIj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvaDQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+PHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cD5DaG9vc2Ugb3B0aW9ucyB0aGF0IHdpbGwgZGV0ZXJtaW5lIGhvdyB1c2VycyBpbnRlcmFjdCB3aXRoIHRoaXMgcGFyYW1ldGVyIG9uIFJlcG9ydHM8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0taG9yaXpvbnRhbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiIGZvcj1cIkRpc3BsYXlfTmFtZVwiIGRhdGEtYmluZD1cImF0dHI6e3BsYWNlaG9sZGVyOidFeCBGaXJzdCBOYW1lJ31cIiBwbGFjZWhvbGRlcj1cIkV4IEZpcnN0IE5hbWVcIj5EaXNwbGF5IE5hbWU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdGV4dC1ib3ggc2luZ2xlLWxpbmVcIiBkYXRhLXZhbD1cInRydWVcIiBkYXRhLXZhbC1yZXF1aXJlZD1cIlRoZSBEaXNwbGF5TmFtZSBmaWVsZCBpcyByZXF1aXJlZC5cIiBuYW1lPVwiRGlzcGxheU5hbWVcIiB0eXBlPVwidGV4dFwiIHZhbHVlPVwiRmlyc3QgTmFtZVwiIGRhdGEtYmluZD1cInZhbHVlOiBEaXNwbGF5TmFtZSwgYXR0cjp7cGxhY2Vob2xkZXI6J0V4IEZpcnN0IE5hbWUnfVwiIHBsYWNlaG9sZGVyPVwiRXggRmlyc3QgTmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLXBsYWNlbWVudD1cInJpZ2h0XCIgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGUgaGVscHRpcFwiIHRpdGxlPVwiVGhpcyBpcyBhIGZyaWVuZGx5IG5hbWUgdG8gZGlzcGxheSB0byB5b3VyIHVzZXJzXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiPkRlZmF1bHQgVmFsdWU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJlZGl0YWJsZTogUGFyYW1ldGVyVmFsdWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tMyBjb250cm9sLWxhYmVsXCIgZGF0YS1iaW5kPVwiXCI+SGlkZGVuIFBhcmFtZXRlcjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImNoZWNrLWJveFwiIGRhdGEtdmFsPVwidHJ1ZVwiIHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwidHJ1ZVwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IEhpZGRlbiwgZW5hYmxlOiBQYXJhbWV0ZXJWYWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tMyBjb250cm9sLWxhYmVsXCIgZGF0YS1iaW5kPVwiXCI+UmVxdWlyZWQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJjaGVjay1ib3hcIiBkYXRhLXZhbD1cInRydWVcIiB0eXBlPVwiY2hlY2tib3hcIiB2YWx1ZT1cInRydWVcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOlJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zIGNvbnRyb2wtbGFiZWxcIiBmb3I9XCJGb3JlaWduX0tleVwiIGRhdGEtYmluZD1cIlwiPlVzZSBMb29rdXAgVGFibGU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJjaGVjay1ib3hcIiBkYXRhLXZhbD1cInRydWVcIiBuYW1lPVwiRm9yZWlnbktleVwiIHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwidHJ1ZVwiIGRhdGEtYmluZD1cImNoZWNrZWQ6Rm9yZWlnbktleVwiPjxpbnB1dCBuYW1lPVwiRm9yZWlnbktleVwiIHR5cGU9XCJoaWRkZW5cIiB2YWx1ZT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS10b2dnbGU9XCJ0b29sdGlwXCIgZGF0YS1wbGFjZW1lbnQ9XCJyaWdodFwiIGNsYXNzPVwiZmEgZmEtcXVlc3Rpb24tY2lyY2xlIGhlbHB0aXBcIiB0aXRsZT1cIlVzaW5nIGxvb2t1cCB0YWJsZSBhbGxvd3MgZnJpZW5kbHkgc2VsZWN0aW9uIGluIHJlcG9ydCB1c2luZyBhIERyb3Bkb3duIExpc3RcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tMyBjb250cm9sLWxhYmVsXCIgZm9yPVwiRm9yZWlnbl9UYWJsZVwiIGRhdGEtYmluZD1cInZpc2libGU6Rm9yZWlnbktleSgpLCBhdHRyOiB7cmVxdWlyZWQ6IEZvcmVpZ25LZXkoKT8nVHJ1ZSc6bnVsbCwgcGxhY2Vob2xkZXI6ICdFeCB0YmxFbXBsb3llZXMnfVwiIHBsYWNlaG9sZGVyPVwiRXggdGJsRW1wbG95ZWVzXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPkxvb2t1cCBUYWJsZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogSm9pblRhYmxlLCB2aXNpYmxlOkZvcmVpZ25LZXkoKSwgb3B0aW9uczogJHJvb3QuUHJvY2VkdXJlcy50YWJsZXMsIG9wdGlvbnNUZXh0OiAnVGFibGVOYW1lJ1wiIHBsYWNlaG9sZGVyPVwiRXggdGJsRW1wbG95ZWVzXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPjwvc2VsZWN0PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWVsZC12YWxpZGF0aW9uLXZhbGlkIGhlbHAtaW5saW5lIGluZGVudFwiIGRhdGEtdmFsbXNnLWZvcj1cIkZvcmVpZ25UYWJsZVwiIGRhdGEtdmFsbXNnLXJlcGxhY2U9XCJ0cnVlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiIGZvcj1cIkZvcmVpZ25fS2V5X0ZpZWxkXCIgZGF0YS1iaW5kPVwidmlzaWJsZTpGb3JlaWduS2V5KCksIGF0dHI6IHtyZXF1aXJlZDogRm9yZWlnbktleSgpPydUcnVlJzpudWxsLCBwbGFjZWhvbGRlcjogJ0V4IEVtcGxveWVlSWQnfVwiIHBsYWNlaG9sZGVyPVwiRXggRW1wbG95ZWVJZFwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5Mb29rdXAgS2V5IEZpZWxkPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIG5hbWU9XCJGb3JlaWduS2V5RmllbGRcIiBkYXRhLWJpbmQ9XCJvcHRpb25zOiBKb2luVGFibGUoKS5Db2x1bW5zLCBvcHRpb25zVGV4dDogJ0NvbHVtbk5hbWUnLCBvcHRpb25zVmFsdWU6ICdDb2x1bW5OYW1lJywgdmFsdWU6IEZvcmVpZ25LZXlGaWVsZCwgdmlzaWJsZTpGb3JlaWduS2V5KCksIGF0dHI6IHtyZXF1aXJlZDogRm9yZWlnbktleSgpPydUcnVlJzpudWxsfVwiIHBsYWNlaG9sZGVyPVwiRXggRW1wbG95ZWVJZFwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidmlzaWJsZTpGb3JlaWduS2V5KClcIiBkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLXBsYWNlbWVudD1cInJpZ2h0XCIgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGUgaGVscHRpcFwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiB0aXRsZT1cIkZvcmVpZ24gS2V5IGZpZWxkIGlzIGEgQ29sdW1uIGZyb20gdGhlIEZvcmVpZ24gdGFibGUgd2hpY2ggaXMgdXNlZCBhcyB0aGUgS2V5IGZpZWxkXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiIGZvcj1cIkZvcmVpZ25fVmFsdWVfRmllbGRcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOkZvcmVpZ25LZXkoKSwgYXR0cjoge3JlcXVpcmVkOiBGb3JlaWduS2V5KCk/J1RydWUnOm51bGwsIHBsYWNlaG9sZGVyOiAnRXggRW1wbG95ZWVOYW1lJ31cIiBwbGFjZWhvbGRlcj1cIkV4IEVtcGxveWVlTmFtZVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5Mb29rdXAgVmFsdWUgRmllbGQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmFtZT1cIkZvcmVpZ25WYWx1ZUZpZWxkXCIgZGF0YS1iaW5kPVwib3B0aW9uczogSm9pblRhYmxlKCkuQ29sdW1ucywgb3B0aW9uc1RleHQ6ICdDb2x1bW5OYW1lJywgb3B0aW9uc1ZhbHVlOiAnQ29sdW1uTmFtZScsIHZhbHVlOiBGb3JlaWduVmFsdWVGaWVsZCwgdmlzaWJsZTpGb3JlaWduS2V5KCksIGF0dHI6IHtyZXF1aXJlZDogRm9yZWlnbktleSgpPydUcnVlJzpudWxsfVwiIHBsYWNlaG9sZGVyPVwiRXggRW1wbG95ZWVOYW1lXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOkZvcmVpZ25LZXkoKVwiIGRhdGEtdG9nZ2xlPVwidG9vbHRpcFwiIGRhdGEtcGxhY2VtZW50PVwicmlnaHRcIiBjbGFzcz1cImZhIGZhLXF1ZXN0aW9uLWNpcmNsZSBoZWxwdGlwXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIHRpdGxlPVwiTG9va3VwIFZhbHVlIGZpZWxkIGlzIGEgQ29sdW1uIGZyb20gdGhlIExvb2t1cCB0YWJsZSB3aGljaCBpcyB1c2VkIHRvIGRpc3BsYXkgdGhlIHZhbHVlIHRvIHRoZSBVc2VyIGluIHRoZSBSZXBvcnQgRGVzaWduZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCI+RG9uZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsIGZhZGVcIiBpZD1cInJvbGUtYWNjZXNzLW1vZGFsXCIgcm9sZT1cImRpYWxvZ1wiIHRhYmluZGV4PVwiLTJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCIgcm9sZT1cImRvY3VtZW50XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCIgZGF0YS1iaW5kPVwid2l0aDogZWRpdEFsbG93ZWRSb2xlc1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+TWFuYWdlIEFjY2VzcyBieSBSb2xlczwvaDQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+PHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cD5DaG9vc2UgVXNlciBSb2xlcyB0aGF0IHdpbGwgaGF2ZSBBY2Nlc3M8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJzbWFsbFwiPk5vdGU6IEFsbCBVc2VycyB3aWxsIGhhdmUgYWNjZXNzIGlmIG5vIHJlc3RyaWN0ZWQgcm9sZXMgYXJlIHNldHVwPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWdyb3VwXCIgZGF0YS1iaW5kPVwiZm9yZWFjaDogQWxsb3dlZFJvbGVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIiBzdHlsZT1cInBhZGRpbmctdG9wOiAycHg7IHBhZGRpbmctYm90dG9tOiAycHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiAkZGF0YVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1kYW5nZXIgcHVsbC1yaWdodFwiPjxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIiBkYXRhLWJpbmQ9XCJjbGljazogJHJvb3QucmVtb3ZlQWxsb3dlZFJvbGVcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIHR5cGU9XCJ0ZXh0XCIgZGF0YS1iaW5kPVwidmFsdWU6ICRyb290Lm5ld0FsbG93ZWRSb2xlXCIgcGxhY2Vob2xkZXI9XCJFeCBTYWxlc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRyb290LmFkZEFsbG93ZWRSb2xlXCI+QWRkPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiPkRvbmU8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJjbGVhcmZpeFwiPjwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbFwiIGlkPVwiYWRkLWNvbm5lY3Rpb24tbW9kYWxcIiByb2xlPVwiZGlhbG9nXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiIGRhdGEtYmluZD1cIndpdGg6IG5ld0RhdGFDb25uZWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5BZGQgYSBuZXcgRGF0YSBDb25uZWN0aW9uPC9oND5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwPkNob29zZSBVc2VyIFJvbGVzIHRoYXQgd2lsbCBoYXZlIEFjY2VzczwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInNtYWxsXCI+Tm90ZTogQWxsIFVzZXJzIHdpbGwgaGF2ZSBhY2Nlc3MgaWYgbm8gcmVzdHJpY3RlZCByb2xlcyBhcmUgc2V0dXA8L3A+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tMyBjb250cm9sLWxhYmVsXCI+Q29ubmVjdGlvbiBOYW1lPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdGV4dC1ib3hcIiBkYXRhLXZhbD1cInRydWVcIiBkYXRhLXZhbC1yZXF1aXJlZD1cIkNvbm5lY3Rpb24gTmFtZSBpcyByZXF1aXJlZC5cIiB0eXBlPVwidGV4dFwiIGRhdGEtYmluZD1cInZhbHVlOiBOYW1lXCIgcGxhY2Vob2xkZXI9XCJcIiBpZD1cImFkZC1jb25uLW5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zIGNvbnRyb2wtbGFiZWxcIj5Db25uZWN0aW9uIEtleTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIHRleHQtYm94XCIgZGF0YS12YWw9XCJ0cnVlXCIgZGF0YS12YWwtcmVxdWlyZWQ9XCJDb25uZWN0aW9uIEtleSBpcyByZXF1aXJlZC5cIiB0eXBlPVwidGV4dFwiIGRhdGEtYmluZD1cInZhbHVlOiBDb25uZWN0aW9uS2V5XCIgcGxhY2Vob2xkZXI9XCJcIiBpZD1cImFkZC1jb25uLWtleVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLXBsYWNlbWVudD1cInJpZ2h0XCIgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGUgaGVscHRpcFwiIHRpdGxlPVwiVGhpcyBpcyB0aGUgQ29ubmVjdGlvbiBLZXkgaW4geW91ciB3ZWIuY29uZmlnIGZvciB5b3VyIFNRTCBDb25uZWN0aW9uIFN0cmluZ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVjay1ib3ggY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IGNvcHlTY2hlbWFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3B5IFNjaGVtYSBmcm9tIGV4aXN0aW5nIENvbm5lY3Rpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiIGRhdGEtYmluZD1cInZpc2libGU6IGNvcHlTY2hlbWFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiPkNob29zZSBDb25uZWN0aW9uPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgc3R5bGU9XCJtYXgtd2lkdGg6IDMwMHB4O1wiIGRhdGEtYmluZD1cIm9wdGlvbnM6ICRyb290LkRhdGFDb25uZWN0aW9ucywgb3B0aW9uc1RleHQ6ICdEYXRhQ29ubmVjdE5hbWUnLCBvcHRpb25zVmFsdWU6ICdEYXRhQ29ubmVjdEd1aWQnLCB2YWx1ZTogY29weUZyb21cIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRyb290LmFkZERhdGFDb25uZWN0aW9uXCI+Q3JlYXRlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjbGVhcmZpeFwiPjwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbFwiIGlkPVwiY3VzdG9tLXNxbC1tb2RhbFwiIHRhYmluZGV4PVwiLTFcIiByb2xlPVwiZGlhbG9nXCIgYXJpYS1sYWJlbGxlZGJ5PVwibXlNb2RhbExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC1sZ1wiIGRhdGEtYmluZD1cIndpdGg6IGN1c3RvbVNxbFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+RW50ZXIgU2VsZWN0IFNRTCBmb3IgeW91ciBEYXRhPC9oNT5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiIGRhdGEtYmluZD1cInZhbGlkYXRpb25FbGVtZW50OiBjdXN0b21UYWJsZU5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImN1c3RvbS10YWJsZS1uYW1lXCI+Q3VzdG9tIFRhYmxlIE5hbWU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIG5hbWU9XCJjdXN0b21UYWJsZU5hbWVcIiBwbGFjZWhvbGRlcj1cIkVudGVyIHRhYmxlIG5hbWVcIiBkYXRhLWJpbmQ9XCJ0ZXh0SW5wdXQ6IGN1c3RvbVRhYmxlTmFtZVwiIHJlcXVpcmVkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiPkN1c3RvbSBUYWJsZSBOYW1lIGlzIHJlcXVpcmVkLjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJjaGVjay1ib3hcIiB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiB1c2VBaVwiPiBVc2UgQ2hhdEdQVCB0byBidWlsZCB0aGUgcXVlcnk/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiB1c2VBaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBpZD1cInF1ZXJ5LWlucHV0XCIgY2xhc3M9XCJxdWVyeS1pbnB1dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hvdyBtZSZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+ICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1iaW5kPVwiY2xpY2s6IGJ1aWxkU3FsVXNpbmdBaVwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPlByb2Nlc3Mgd2l0aCBDaGF0R1BUPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1iaW5kPVwiY2xpY2s6IHRleHRRdWVyeS5yZXNldFF1ZXJ5XCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSBidG4tc21cIj5TdGFydCBvdmVyPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxociAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiIGRhdGEtYmluZD1cInZhbGlkYXRpb25FbGVtZW50OiBjdXN0b21TcWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImN1c3RvbS1zcWxcIj5DdXN0b20gU1FMPC9sYWJlbD4gfCA8YSBocmVmPVwiI1wiIGRhdGEtYmluZD1cImNsaWNrOiBiZWF1dGlmeVNxbFwiPkJlYXV0aWZ5IFNxbDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgc3R5bGU9XCJoZWlnaHQ6IDI0MHB4O1wiIG5hbWU9XCJjdXN0b21TcWxcIiBkYXRhLWJpbmQ9XCJ0ZXh0SW5wdXQ6IGN1c3RvbVNxbFwiIHJlcXVpcmVkPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCI+Q3VzdG9tIFNRTCBpcyByZXF1aXJlZC48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IGV4ZWN1dGVTcWxcIj5TYXZlIGNoYW5nZXM8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuPC9kaXY+ICBcclxuXHJcbjwhLS0gVGVtcGxhdGVzIC0tPlxyXG48ZGl2IFtpbm5lckh0bWxdPVwicmVwb3J0VGVtcGxhdGVzXCI+PC9kaXY+XHJcbjwhLS0gVGVtcGxhdGVzIC0tPiJdfQ==
|
|
1615
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG90bmV0c2V0dXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZG90bmV0cmVwb3J0LWxpYi9zcmMvbGliL2RvdG5ldHNldHVwL2RvdG5ldHNldHVwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RvdG5ldHJlcG9ydC1saWIvc3JjL2xpYi9kb3RuZXRzZXR1cC9kb3RuZXRzZXR1cC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxNQUFNLEVBQStCLE1BQU0sZUFBZSxDQUFDO0FBRWxHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7QUFZMUQsTUFBTSxPQUFPLG9CQUFvQjtJQUsvQixZQUFZLFFBQWtCLEVBQ3BCLFNBQXVCLEVBQ3ZCLEtBQXdCLEVBQ0EsT0FBZSxFQUN2QyxJQUFnQixFQUNoQixLQUFxQjtRQUpyQixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBQ3ZCLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQ0EsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUN2QyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBRTNCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyw4QkFBOEI7UUFDM0UsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUdILFFBQVE7UUFDTixJQUFJLGtCQUFrQixHQUFHLElBQUksQ0FBQyxjQUFjLEdBQUcsa0NBQWtDLENBQUM7UUFDbEYsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7UUFDbkQsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM5RCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLE9BQU8sQ0FBQztRQUV0RCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsR0FBRyxjQUFjLEdBQUUsV0FBVyxHQUFHLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ3BILElBQUksT0FBTyxHQUFHO2dCQUNWLEtBQUssRUFBRSxLQUFLO2dCQUNaLFlBQVksRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLHFCQUFxQjtnQkFDbEQsY0FBYyxFQUFFLEtBQUssQ0FBQyxNQUFNLEdBQUcsdUJBQXVCO2dCQUN0RCxlQUFlLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyx3QkFBd0I7Z0JBQ3hELHFCQUFxQixFQUFFLEtBQUssQ0FBQyxNQUFNLEdBQUcsOEJBQThCO2dCQUNwRSxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLHlCQUF5QjtnQkFDMUQsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyw2QkFBNkI7Z0JBQ2xFLFdBQVcsRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLHlCQUF5QjtnQkFDckQsYUFBYSxFQUFFLEtBQUssQ0FBQyxNQUFNLEdBQUcsMkJBQTJCO2dCQUN6RCxhQUFhLEVBQUUsS0FBSyxDQUFDLE1BQU07Z0JBQzNCLGdCQUFnQixFQUFFLElBQUksQ0FBQyxjQUFjLEdBQUcsbUNBQW1DO2dCQUMzRSxhQUFhLEVBQUcsSUFBSSxDQUFDLGNBQWMsR0FBRyxrQ0FBa0M7Z0JBQ3hFLGdCQUFnQixFQUFHLElBQUksQ0FBQyxjQUFjLEdBQUcsbUNBQW1DO2dCQUM1RSxNQUFNLEVBQUcsSUFBSSxDQUFDLGNBQWMsR0FBRyxnQ0FBZ0M7Z0JBQy9ELE9BQU8sRUFBRSxPQUFPO2FBQ25CLENBQUM7WUFFRixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN6QixJQUFJLEVBQUUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN0QyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZixFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN2QixFQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztZQUVoRSxFQUFFLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUN6QixFQUFFLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUV4QyxDQUFDLENBQUMsQ0FBQztJQUVMLENBQUM7SUFFRCxXQUFXO1FBQ1QsRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRU0sSUFBSTtRQUNSLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRU0saUJBQWlCO1FBRXhCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc2dEN0QsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM3QixDQUFDOztrSEF6a0RZLG9CQUFvQix1R0FRckIsY0FBYztzR0FSYixvQkFBb0IsdURDZmpDLHFnNkVBNC9Ca0I7NEZENytCTCxvQkFBb0I7a0JBTmhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsV0FBVyxFQUFFLDhCQUE4QjtvQkFDM0MsU0FBUyxFQUFFLENBQUMsNkJBQTZCLENBQUM7aUJBQzNDOzswQkFVSSxNQUFNOzJCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbmplY3QsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IEJBU0VfVVJMX1RPS0VOIH0gZnJvbSAnLi8uLi9kb3RuZXRyZXBvcnQtbGliLmRpJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuZGVjbGFyZSB2YXIga286IGFueTtcclxuZGVjbGFyZSB2YXIgbWFuYWdlVmlld01vZGVsOiBhbnk7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1kb3RuZXRzZXR1cCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RvdG5ldHNldHVwLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kb3RuZXRzZXR1cC5jb21wb25lbnQuY3NzJ11cclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBEb3RuZXRzZXR1cENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIGJhc2VTZXJ2aWNlVXJsOiBzdHJpbmc7XHJcbiAgcHVibGljIHJlcG9ydFRlbXBsYXRlczogU2FmZUh0bWw7XHJcbiAgcHJpdmF0ZSBxdWVyeVBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcclxuXHJcbiAgY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcclxuICAgIHByaXZhdGUgY2RyZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQEluamVjdChCQVNFX1VSTF9UT0tFTikgcHJpdmF0ZSBiYXNlVXJsOiBzdHJpbmcsXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSkgeyBcclxuXHJcbiAgICAgIHRoaXMuYmFzZVNlcnZpY2VVcmwgPSB0aGlzLmJhc2VVcmwgKyAnL2FwaSc7IC8vIFwiaHR0cDovL2xvY2FsaG9zdDozOTM3OFwiOyBcXFxyXG4gICAgICB0aGlzLnJlcG9ydFRlbXBsYXRlcyA9IFwiXCI7XHJcbiAgICB9XHJcblxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGxldCBsb2FkU2V0dXBTY2hlbWFVcmwgPSB0aGlzLmJhc2VTZXJ2aWNlVXJsICsgXCIvRG90TmV0UmVwb3J0QXBpL0xvYWRTZXR1cFNjaGVtYVwiO1xyXG4gICAgdGhpcy5xdWVyeVBhcmFtcyA9IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXM7XHJcbiAgICB2YXIgZGF0YWJhc2VBcGlLZXkgPSB0aGlzLnF1ZXJ5UGFyYW1zWydkYXRhYmFzZUFwaUtleSddIHx8ICcnO1xyXG4gICAgdmFyIG9ubHlBcGkgPSB0aGlzLnF1ZXJ5UGFyYW1zWydvbmx5QXBpJ10gPT09ICdmYWxzZSc7XHJcbiAgIFxyXG4gICAgdGhpcy5odHRwLmdldChsb2FkU2V0dXBTY2hlbWFVcmwgKyBcIj9kYXRhYmFzZUFwaUtleT1cIiArIGRhdGFiYXNlQXBpS2V5ICsnJm9ubHlBcGk9JyArIG9ubHlBcGkpLnN1YnNjcmliZSgobW9kZWw6IGFueSkgPT4ge1xyXG4gICAgICAgIHZhciBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICBtb2RlbDogbW9kZWwsXHJcbiAgICAgICAgICAgIHNhdmVUYWJsZVVybDogbW9kZWwuQXBpVXJsICsgJ1JlcG9ydEFwaS9TYXZlVGFibGUnLFxyXG4gICAgICAgICAgICBkZWxldGVUYWJsZVVybDogbW9kZWwuQXBpVXJsICsgJ1JlcG9ydEFwaS9EZWxldGVUYWJsZScsXHJcbiAgICAgICAgICAgIGdldFJlbGF0aW9uc1VybDogbW9kZWwuQXBpVXJsICsgJ1JlcG9ydEFwaS9HZXRSZWxhdGlvbnMnLFxyXG4gICAgICAgICAgICBnZXREYXRhQ29ubmVjdGlvbnNVcmw6IG1vZGVsLkFwaVVybCArICdSZXBvcnRBcGkvR2V0RGF0YUNvbm5lY3Rpb25zJyxcclxuICAgICAgICAgICAgc2F2ZVJlbGF0aW9uc1VybDogbW9kZWwuQXBpVXJsICsgJ1JlcG9ydEFwaS9TYXZlUmVsYXRpb25zJyxcclxuICAgICAgICAgICAgYWRkRGF0YUNvbm5lY3Rpb25Vcmw6IG1vZGVsLkFwaVVybCArICdSZXBvcnRBcGkvQWRkRGF0YUNvbm5lY3Rpb24nLFxyXG4gICAgICAgICAgICBzYXZlUHJvY1VybDogbW9kZWwuQXBpVXJsICsgJ1JlcG9ydEFwaS9TYXZlUHJvY2VkdXJlJyxcclxuICAgICAgICAgICAgZGVsZXRlUHJvY1VybDogbW9kZWwuQXBpVXJsICsgJ1JlcG9ydEFwaS9EZWxldGVQcm9jZWR1cmUnLFxyXG4gICAgICAgICAgICByZXBvcnRzQXBpVXJsOiBtb2RlbC5BcGlVcmwsXHJcbiAgICAgICAgICAgIGdldFVzZXJzQW5kUm9sZXM6IHRoaXMuYmFzZVNlcnZpY2VVcmwgKyAnL0RvdE5ldFJlcG9ydEFwaS9HZXRVc2Vyc0FuZFJvbGVzJyxcclxuICAgICAgICAgICAgc2VhcmNoUHJvY1VybDogIHRoaXMuYmFzZVNlcnZpY2VVcmwgKyAnL0RvdE5ldFJlcG9ydEFwaS9TZWFyY2hQcm9jZWR1cmUnLFxyXG4gICAgICAgICAgICBnZXRTY2hlbWFGcm9tU3FsOiAgdGhpcy5iYXNlU2VydmljZVVybCArICcvRG90TmV0UmVwb3J0QXBpL0dldFNjaGVtYUZyb21TcWwnLFxyXG4gICAgICAgICAgICBhcGlVcmw6ICB0aGlzLmJhc2VTZXJ2aWNlVXJsICsgJy9Eb3ROZXRSZXBvcnRBcGkvQ2FsbFJlcG9ydEFwaScsXHJcbiAgICAgICAgICAgIG9ubHlBcGk6IG9ubHlBcGlcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnJlbmRlcktPVGVtcGxhdGVzKCk7XHJcbiAgICAgICAgdmFyIHZtID0gbmV3IG1hbmFnZVZpZXdNb2RlbChvcHRpb25zKTtcclxuICAgICAgICB2bS5Mb2FkSm9pbnMoKTtcclxuICAgICAgICB2bS5zZXR1cE1hbmFnZUFjY2VzcygpO1xyXG4gICAgICAgIGtvLmFwcGx5QmluZGluZ3Modm0sIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb3QtbmV0LXJlcG9ydCcpKTtcclxuXHJcbiAgICAgICAgdm0uTG9hZERhdGFDb25uZWN0aW9ucygpO1xyXG4gICAgICAgIHZtLmN1c3RvbVNxbC50ZXh0UXVlcnkuc2V0dXBRdWVyeSgpO1xyXG4gICAgICAgICAgICBcclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAga28uY2xlYW5Ob2RlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb3QtbmV0LXJlcG9ydCcpKTtcclxuIH1cclxuIFxyXG4gcHVibGljIGluaXQoKSB7XHJcbiAgICB0aGlzLm5nT25Jbml0KCk7XHJcbiAgfVxyXG5cclxuIHByaXZhdGUgcmVuZGVyS09UZW1wbGF0ZXMoKSB7XHJcbiAgXHJcbiAgdGhpcy5yZXBvcnRUZW1wbGF0ZXMgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChgXHJcbiAgPCEtLSBEb3RuZXQgUmVwb3J0IEhUTUwgVGVtcGxhdGVzIC0tPlxyXG48c2NyaXB0IHR5cGU9XCJ0ZXh0L2h0bWxcIiBpZD1cInJlcG9ydC1maWx0ZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgPCEtLSBrbyBpZjogIWhhc0ZvcmVpZ25LZXktLT5cclxuICAgICAgICA8IS0tIGtvIGlmOiBmaWVsZFR5cGU9PSdEYXRlVGltZSctLT5cclxuICAgICAgICA8IS0tIGtvIGlmOiBbJz0nLCc+JywnPCcsJz49JywnPD0nLCAnbm90IGVxdWFsJ10uaW5kZXhPZigkcGFyZW50Lk9wZXJhdG9yKCkpICE9IC0xIC0tPlxyXG4gICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cImRhdGVwaWNrZXI6ICRwYXJlbnQuVmFsdWVcIiByZXF1aXJlZCAvPlxyXG4gICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgIDwhLS0ga28gaWY6IFsnYmV0d2VlbiddLmluZGV4T2YoJHBhcmVudC5PcGVyYXRvcigpKSAhPSAtMSAtLT5cclxuICAgICAgICBGcm9tXHJcbiAgICAgICAgPGlucHV0IHJlcXVpcmVkIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZGF0YS1iaW5kPVwiZGF0ZXBpY2tlcjogJHBhcmVudC5WYWx1ZVwiIC8+XHJcbiAgICAgICAgdG9cclxuICAgICAgICA8aW5wdXQgZGF0YS1iaW5kPVwiZGF0ZXBpY2tlcjogJHBhcmVudC5WYWx1ZTJcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJlcXVpcmVkIC8+XHJcbiAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgPCEtLSBrbyBpZjogWydyYW5nZSddLmluZGV4T2YoJHBhcmVudC5PcGVyYXRvcigpKSAhPSAtMSAtLT5cclxuICAgICAgICA8c2VsZWN0IGRhdGEtYmluZD1cInZhbHVlOiAkcGFyZW50LlZhbHVlXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByZXF1aXJlZD5cclxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPjwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uPlRvZGF5PC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24+VG9kYXkgKzwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uPlRvZGF5IC08L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbj5ZZXN0ZXJkYXk8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbj5UaGlzIFdlZWs8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbj5MYXN0IFdlZWs8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbj5UaGlzIE1vbnRoPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24+TGFzdCBNb250aDwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uPlRoaXMgWWVhcjwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uPkxhc3QgWWVhcjwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uPlRoaXMgV2VlayBUbyBEYXRlPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24+VGhpcyBNb250aCBUbyBEYXRlPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24+VGhpcyBZZWFyIFRvIERhdGU8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbj5MYXN0IDMwIERheXM8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGdyb3VwIGxhYmVsPVwiQ29tcGFyaXNvbiBPcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICA8b3B0aW9uPj49IFRvZGF5PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8b3B0aW9uPjw9IFRvZGF5PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8b3B0aW9uPj49IFRvZGF5ICs8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgIDxvcHRpb24+PD0gVG9kYXkgKzwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPG9wdGlvbj4+PSBUb2RheSAtPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8b3B0aW9uPjw9IFRvZGF5IC08L29wdGlvbj5cclxuICAgICAgICAgICAgPC9vcHRncm91cD5cclxuICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiAkcGFyZW50LlZhbHVlKCkuaW5kZXhPZignVG9kYXkgKycpID49IDAgfHwgJHBhcmVudC5WYWx1ZSgpLmluZGV4T2YoJ1RvZGF5IC0nKSA+PSAwXCIgY2xhc3M9XCJmb3JtLWdyb3VwIHB1bGwtbGVmdFwiIHN0eWxlPVwicGFkZGluZy10b3A6IDVweDtcIj5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC1zbSBwdWxsLWxlZnRcIiBzdHlsZT1cIndpZHRoOiA4MHB4O1wiIGRhdGEtYmluZD1cInZhbHVlOiAkcGFyZW50LlZhbHVlMlwiIHJlcXVpcmVkIC8+PHNwYW4gc3R5bGU9XCJwYWRkaW5nOiA1cHggNXB4O1wiIGNsYXNzPVwicHVsbC1sZWZ0XCI+IGRheXM8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgPCEtLSBrbyBpZjogWydJbnQnLCdNb25leScsJ0Zsb2F0JywnRG91YmxlJ10uaW5kZXhPZihmaWVsZFR5cGUpICE9IC0xIC0tPlxyXG4gICAgICAgIDwhLS0ga28gaWY6IFsnPScsJz4nLCc8JywnPj0nLCc8PScsICdub3QgZXF1YWwnXS5pbmRleE9mKCRwYXJlbnQuT3BlcmF0b3IoKSkgIT0gLTEgJiYgWydpcyBibGFuaycsICdpcyBub3QgYmxhbmsnLCAnaXMgbnVsbCcsICdpcyBub3QgbnVsbCddLmluZGV4T2YoJHBhcmVudC5PcGVyYXRvcigpKSA9PSAtMSAtLT5cclxuICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiB0eXBlPVwibnVtYmVyXCIgZGF0YS1iaW5kPVwidmFsdWU6ICRwYXJlbnQuVmFsdWUsIGRpc2FibGU6ICRwYXJlbnQuT3BlcmF0b3IoKSA9PSAnaXMgZGVmYXVsdCdcIiByZXF1aXJlZCAvPlxyXG4gICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgIDwhLS0ga28gaWY6IFsnYmV0d2VlbiddLmluZGV4T2YoJHBhcmVudC5PcGVyYXRvcigpKSAhPSAtMSAtLT5cclxuICAgICAgICBGcm9tXHJcbiAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgdHlwZT1cIm51bWJlclwiIGRhdGEtYmluZD1cInZhbHVlOiAkcGFyZW50LlZhbHVlXCIgcmVxdWlyZWQgLz5cclxuICAgICAgICB0b1xyXG4gICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIHR5cGU9XCJudW1iZXJcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogJHBhcmVudC5WYWx1ZTJcIiByZXF1aXJlZCAvPlxyXG4gICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgIDwhLS0ga28gaWY6IGZpZWxkVHlwZT09J0Jvb2xlYW4nICYmIFsnaXMgYmxhbmsnLCAnaXMgbm90IGJsYW5rJywgJ2lzIG51bGwnLCAnaXMgbm90IG51bGwnXS5pbmRleE9mKCRwYXJlbnQuT3BlcmF0b3IoKSkgPT0gLTEgLS0+XHJcbiAgICAgICAgPHNlbGVjdCByZXF1aXJlZCBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cInZhbHVlOiAkcGFyZW50LlZhbHVlLCBkaXNhYmxlOiAkcGFyZW50Lk9wZXJhdG9yKCkgPT0gJ2lzIGRlZmF1bHQnXCI+XHJcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIxXCI+WWVzPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIwXCI+Tm88L29wdGlvbj5cclxuICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICA8IS0tIGtvIGlmOiBbJ0ludCcsJ01vbmV5JywnRmxvYXQnLCdEb3VibGUnLCdEYXRlJywnRGF0ZVRpbWUnLCdCb29sZWFuJ10uaW5kZXhPZihmaWVsZFR5cGUpID09IC0xICYmIFsnaXMgYmxhbmsnLCAnaXMgbm90IGJsYW5rJywgJ2lzIG51bGwnLCAnaXMgbm90IG51bGwnXS5pbmRleE9mKCRwYXJlbnQuT3BlcmF0b3IoKSkgPT0gLTEgLS0+XHJcbiAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgdHlwZT1cInRleHRcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogJHBhcmVudC5WYWx1ZSwgZGlzYWJsZTogJHBhcmVudC5PcGVyYXRvcigpID09ICdpcyBkZWZhdWx0J1wiIHJlcXVpcmVkIC8+XHJcbiAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgPCEtLSBrbyBpZjogaGFzRm9yZWlnbktleSAmJiAkcGFyZW50Lk9wZXJhdG9yKCkgIT0gJ2FsbCcgLS0+XHJcbiAgICAgICAgPCEtLSBrbyBpZjogaGFzRm9yZWlnblBhcmVudEtleSAmJiAkcGFyZW50LnNob3dQYXJlbnRGaWx0ZXIoKSAtLT5cclxuICAgICAgICA8c2VsZWN0IG11bHRpcGxlIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZGF0YS1iaW5kPVwic2VsZWN0MjogeyBwbGFjZWhvbGRlcjogJ1BsZWFzZSBDaG9vc2UnLCBhbGxvd0NsZWFyOiB0cnVlIH0sIG9wdGlvbnM6ICRwYXJlbnQuUGFyZW50TGlzdCwgb3B0aW9uc1RleHQ6ICd0ZXh0Jywgb3B0aW9uc1ZhbHVlOiAnaWQnLCBzZWxlY3RlZE9wdGlvbnM6ICRwYXJlbnQuUGFyZW50SW5cIj48L3NlbGVjdD5cclxuICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICA8IS0tIGtvIGlmOiAkcGFyZW50Lk9wZXJhdG9yKCk9PSc9Jy0tPlxyXG4gICAgICAgIDxzZWxlY3QgcmVxdWlyZWQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJvcHRpb25zOiAkcGFyZW50Lkxvb2t1cExpc3QsIG9wdGlvbnNUZXh0OiAndGV4dCcsIG9wdGlvbnNWYWx1ZTogJ2lkJywgdmFsdWU6ICRwYXJlbnQuVmFsdWUsIG9wdGlvbnNDYXB0aW9uOiAnUGxlYXNlIENob29zZSdcIj48L3NlbGVjdD5cclxuICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICA8IS0tIGtvIGlmOiAkcGFyZW50Lk9wZXJhdG9yKCk9PSdpbicgfHwgJHBhcmVudC5PcGVyYXRvcigpPT0nbm90IGluJy0tPlxyXG4gICAgICAgIDxzZWxlY3QgcmVxdWlyZWQgbXVsdGlwbGUgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJzZWxlY3QyOiB7IHBsYWNlaG9sZGVyOiAnUGxlYXNlIENob29zZScsIGFsbG93Q2xlYXI6IHRydWUgfSwgb3B0aW9uczogJHBhcmVudC5Mb29rdXBMaXN0LCBvcHRpb25zVGV4dDogJ3RleHQnLCBvcHRpb25zVmFsdWU6ICdpZCcsIHNlbGVjdGVkT3B0aW9uczogJHBhcmVudC5WYWx1ZUluXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICA8L2Rpdj5cclxuPC9zY3JpcHQ+XHJcbjxzY3JpcHQgdHlwZT1cInRleHQvaHRtbFwiIGlkPVwicGFnZXItdGVtcGxhdGVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJwYWdlci1jb250YWluZXJcIj5cclxuICAgICAgICA8YSBocmVmPVwiXCIgdGl0bGU9XCJmaXJzdFwiIGRhdGEtYmluZD1cImNsaWNrOiBmaXJzdCwgZW5hYmxlOiAhaXNGaXJzdFBhZ2UoKVwiPjxpIGNsYXNzPVwiZmEgZmEtYmFja3dhcmQgcmVwb3J0LXBhZ2VyLWJ0blwiIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4O1wiPjwvaT48L2E+Jm5ic3A7XHJcbiAgICAgICAgPGEgaHJlZj1cIlwiIHRpdGxlPVwicHJldmlvdXNcIiBkYXRhLWJpbmQ9XCJjbGljazogcHJldmlvdXMsIGVuYWJsZTogIWlzRmlyc3RQYWdlKClcIj48aSBjbGFzcz1cImZhIGZhLWNhcmV0LWxlZnQgZmEtMnggcmVwb3J0LXBhZ2VyLWJ0blwiPjwvaT48L2E+XHJcbiAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIiBkYXRhLWJpbmQ9XCJvcHRpb25zOiBbMTAsMzAsNTAsMTAwLDE1MCwyMDAsNTAwXSwgdmFsdWU6IHBhZ2VTaXplXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWdlci1wYWdlaW5mb1wiPlxyXG4gICAgICAgICAgICA8c3Bhbj5QYWdlPC9zcGFuPiZuYnNwO1xyXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIG1pbj1cIjFcIiBwYXR0ZXJuPVwiWzAtOV0qXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtIHRleHQtY2VudGVyXCIgZGF0YS1iaW5kPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGN1cnJlbnRQYWdlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHI6IHsgbWF4OiBwYWdlcygpIH1cIiAvPiZuYnNwO1xyXG4gICAgICAgICAgICA8c3Bhbj5vZjwvc3Bhbj4mbmJzcDtcclxuICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogcGFnZXNcIj48L3NwYW4+XHJcbiAgICAgICAgPC9zcGFuPiZuYnNwO1xyXG5cclxuICAgICAgICA8YSBocmVmPVwiXCIgdGl0bGU9XCJuZXh0XCIgZGF0YS1iaW5kPVwiY2xpY2s6IG5leHQsIGVuYWJsZTogIWlzTGFzdFBhZ2UoKVwiPjxpIGNsYXNzPVwiZmEgZmEtY2FyZXQtcmlnaHQgZmEtMnggcmVwb3J0LXBhZ2VyLWJ0blwiPjwvaT48L2E+Jm5ic3A7XHJcbiAgICAgICAgPGEgaHJlZj1cIlwiIHRpdGxlPVwibGFzdFwiIGRhdGEtYmluZD1cImNsaWNrOiBsYXN0LCBlbmFibGU6ICFpc0xhc3RQYWdlKClcIj48aSBjbGFzcz1cImZhIGZhLWZvcndhcmQgcmVwb3J0LXBhZ2VyLWJ0blwiIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4O1wiPjwvaT48L2E+XHJcbiAgICA8L2Rpdj5cclxuPC9zY3JpcHQ+XHJcblxyXG48c2NyaXB0IHR5cGU9XCJ0ZXh0L2h0bWxcIiBpZD1cInJlcG9ydC1jb2x1bW4taGVhZGVyXCI+XHJcbiAgICA8IS0tIGtvIGZvcmVhY2g6IENvbHVtbnMgLS0+XHJcbiAgICA8dGggZGF0YS1iaW5kPVwiYXR0cjogeyBpZDogZmllbGRJZCB9LCBjc3M6IHsncmlnaHQtYWxpZ24nOiBJc051bWVyaWN9LCBzdHlsZTogeyd3aWR0aCc6IGZpZWxkV2lkdGgsICdiYWNrZ3JvdW5kLWNvbG9yJzogaGVhZGVyQmFja0NvbG9yIH0sIGhpZGRlbjogb3V0ZXJHcm91cFwiIHN0eWxlPVwiYm9yZGVyLXJpZ2h0OiAxcHggc29saWQ7XCI+XHJcbiAgICAgICAgPCEtLSBrbyBpZjogJHBhcmVudHNbM10udXNlU3RvcmVkUHJvYyA/ICRwYXJlbnRzWzNdLnVzZVN0b3JlZFByb2MoKSA6ICgkcGFyZW50c1s1XS51c2VTdG9yZWRQcm9jID8gJHBhcmVudHNbNV0udXNlU3RvcmVkUHJvYygpIDogZmFsc2UpIC0tPlxyXG4gICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IGZpZWxkTGFiZWwoKSA/IGZpZWxkTGFiZWwoKSA6IGZpZWxkTmFtZSwgc3R5bGU6IHsnY29sb3InOiBoZWFkZXJGb250Q29sb3IsICdmb250LXdlaWdodCc6IGhlYWRlckZvbnRCb2xkKCkgPyAnYm9sZCcgOiAnbm9ybWFsJ31cIj48L3NwYW4+XHJcbiAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgPCEtLSBrbyBpZm5vdDogJHBhcmVudHNbM10udXNlU3RvcmVkUHJvYyA/ICRwYXJlbnRzWzNdLnVzZVN0b3JlZFByb2MoKSA6ICgkcGFyZW50c1s1XS51c2VTdG9yZWRQcm9jID8gJHBhcmVudHNbNV0udXNlU3RvcmVkUHJvYygpIDogZmFsc2UpICAtLT5cclxuICAgICAgICA8YSBocmVmPVwiXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCl7ICRwYXJlbnRzW3BhZ2VySW5kZXgoJHBhcmVudHMpXS5jaGFuZ2VTb3J0KFNxbEZpZWxkKSB9LCBzdHlsZTogeydjb2xvcic6IGhlYWRlckZvbnRDb2xvciwgJ2ZvbnQtd2VpZ2h0JzogaGVhZGVyRm9udEJvbGQoKSA/ICdib2xkJyA6ICdub3JtYWwnfVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBmaWVsZExhYmVsKCkgPyBmaWVsZExhYmVsKCkgOiBDb2x1bW5OYW1lXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiAkcGFyZW50c1twYWdlckluZGV4KCRwYXJlbnRzKV0ucGFnZXIuc29ydENvbHVtbigpID09PSBTcWxGaWVsZCA/ICgkcGFyZW50c1twYWdlckluZGV4KCRwYXJlbnRzKV0ucGFnZXIuc29ydERlc2NlbmRpbmcoKSA/ICcmIzk2NjA7JyA6ICcmIzk2NTA7JykgOiAnJ1wiPjwvc3Bhbj5cclxuICAgICAgICA8L2E+XHJcbiAgICAgICAgPCEtLSAva28gLS0+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLXJpZ2h0XCIgZGF0YS1iaW5kPVwiaWY6ICEkcGFyZW50LklzRHJpbGxEb3duKCkgJiYgIUlzTnVtZXJpY1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcHVwXCI+XHJcbiAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiIGFyaWEtaGFzcG9wdXA9XCJmYWxzZVwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1lbGxpcHNpcy12XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgc3R5bGU9XCJ6LWluZGV4OiAxMDAxO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gc21hbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBkYXRhLWJpbmQ9XCJjbGljazogdG9nZ2xlT3V0ZXJHcm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1jbG9uZVwiPjwvc3Bhbj4gT3V0ZXIgR3JvdXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwiZHJvcGRvd24taXRlbSBzbWFsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIGRhdGEtYmluZD1cImNsaWNrOiBzZXR1cEZpZWxkT3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1nZWFyXCI+PC9zcGFuPiBGaWVsZCBTZXR0aW5nc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvdGg+XHJcbiAgICA8IS0tIC9rbyAtLT5cclxuPC9zY3JpcHQ+XHJcblxyXG48c2NyaXB0IHR5cGU9XCJ0ZXh0L2h0bWxcIiBpZD1cInJlcG9ydC1jb2x1bW5cIj5cclxuICAgIDwhLS0ga28gZm9yZWFjaDogSXRlbXMgLS0+XHJcbiAgICA8dGQgZGF0YS1iaW5kPVwiaGlkZGVuOiBvdXRlckdyb3VwLCBzdHlsZTogeydiYWNrZ3JvdW5kLWNvbG9yJzogYmFja0NvbG9yLCAnY29sb3InOiBmb250Q29sb3IsICdmb250LXdlaWdodCc6IGZvbnRCb2xkKCkgPyAnYm9sZCcgOiAnbm9ybWFsJywgJ3RleHQtYWxpZ24nOiAkcGFyZW50c1s0XS5wYWdlciAmJiAkcGFyZW50c1s0XS5SZXBvcnRUeXBlKCk9PSdTaW5nbGUnID8gJ2NlbnRlcicgOiAoZmllbGRBbGlnbiA/IGZpZWxkQWxpZ24gOiAoQ29sdW1uLklzTnVtZXJpYyA/ICdyaWdodCcgOiAnbGVmdCcpKSwgJ2ZvbnQtc2l6ZSc6JHBhcmVudHNbNF0ucGFnZXIgJiYgJHBhcmVudHNbNF0uUmVwb3J0VHlwZSgpPT0nU2luZ2xlJyA/ICc0OHB4JyA6ICcnfVwiPlxyXG4gICAgICAgIDxkaXYgZGF0YS1iaW5kPVwic3R5bGU6IHsnd2lkdGgnOiBmaWVsZFdpZHRoIH1cIj5cclxuICAgICAgICA8IS0tIGtvIGlmOiBMaW5rVG8tLT5cclxuICAgICAgICA8YSBkYXRhLWJpbmQ9XCJhdHRyOiB7aHJlZjogTGlua1RvfVwiIHRhcmdldD1cIl9ibGFua1wiPjxzcGFuIGRhdGEtYmluZD1cImh0bWw6IGZvcm1hdHRlZFZhbFwiPjwvc3Bhbj48L2E+XHJcbiAgICAgICAgPCEtLSAva28tLT5cclxuICAgICAgICA8IS0tIGtvIGlmbm90OiBMaW5rVG8tLT5cclxuICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJodG1sOiBmb3JtYXR0ZWRWYWxcIj48L3NwYW4+XHJcbiAgICAgICAgPCEtLSAva28tLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvdGQ+XHJcbjwvc2NyaXB0PlxyXG5cclxuPHNjcmlwdCB0eXBlPVwidGV4dC9odG1sXCIgaWQ9XCJyZXBvcnQtcGl2b3RcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiIGRhdGEtYmluZD1cIndpdGg6IFJlcG9ydERhdGFcIj5cclxuICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1zdHJpcGVkIHRhYmxlLWhvdmVyIHRhYmxlLWNvbmRlbnNlZFwiPlxyXG4gICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiBSb3dzIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogSXRlbXNbMF0uRm9ybWF0dGVkVmFsdWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgIDx0Ym9keSBkYXRhLWJpbmQ9XCJmb3JlYWNoOiBDb2x1bW5zXCI+XHJcbiAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIGtvIGlmOiAkaW5kZXgoKSA+IDAgLS0+XHJcbiAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogZmllbGRMYWJlbCB8fCBDb2x1bW5OYW1lXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDogJHBhcmVudC5Sb3dzIC0tPlxyXG4gICAgICAgICAgICAgICAgPHRkIGRhdGEtYmluZD1cInN0eWxlOiB7J2JhY2tncm91bmQtY29sb3InOiAkcGFyZW50LmJhY2tDb2xvciwgJ2NvbG9yJzogJHBhcmVudC5mb250Q29sb3IsICdmb250LXdlaWdodCc6ICRwYXJlbnQuZm9udEJvbGQoKSA/ICdib2xkJyA6ICdub3JtYWwnLCAndGV4dC1hbGlnbic6ICRwYXJlbnQuZmllbGRBbGlnbiA/ICRwYXJlbnQuZmllbGRBbGlnbiA6ICgkcGFyZW50LklzTnVtZXJpYyA/ICdyaWdodCcgOiAnbGVmdCcpIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBJdGVtc1skcGFyZW50Q29udGV4dC4kaW5kZXgoKV0uRm9ybWF0dGVkVmFsdWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgPC90YWJsZT5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcbjwvc2NyaXB0PlxyXG5cclxuPHNjcmlwdCB0eXBlPVwidGV4dC9odG1sXCIgaWQ9XCJyZXBvcnQtdGFibGVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCIgPlxyXG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWhvdmVyIHRhYmxlLWNvbmRlbnNlZFwiIGRhdGEtYmluZD1cImF0dHI6IHtjbGFzczogJ3RhYmxlIHRhYmxlLXN0cmlwZWQgdGFibGUtaG92ZXIgdGFibGUtY29uZGVuc2VkICcgKyAkcGFyZW50c1syXS5zZWxlY3RlZFN0eWxlKCl9XCI+ICAgICAgICBcclxuICAgICAgICAgICAgPHRoZWFkIGRhdGEtYmluZD1cImlmOiAkcGFyZW50c1syXS5SZXBvcnRUeXBlKCkgIT0gJ1NpbmdsZSdcIj5cclxuICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cIm5vLWhpZ2hsaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0ga28gaWY6ICRwYXJlbnRDb250ZXh0LiRwYXJlbnRDb250ZXh0LiRwYXJlbnQuY2FuRHJpbGxkb3duKCkgJiYgIUlzRHJpbGxEb3duKCkgJiYgIUNhbkV4cGFuZE9wdGlvbigpIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOiAzMHB4OyBib3JkZXItbGVmdDogMXB4IHNvbGlkO1wiPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyB0ZW1wbGF0ZTogJ3JlcG9ydC1jb2x1bW4taGVhZGVyJywgZGF0YTogJGRhdGEgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSAva28tLT5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgIDx0ciBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgZGF0YS1iaW5kPVwidmlzaWJsZTogUm93cy5sZW5ndGggPCAxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1pbmZvXCIgZGF0YS1iaW5kPVwiYXR0cjp7Y29sc3BhbjogQ29sdW1ucy5sZW5ndGh9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ga28gaWY6ICRwYXJlbnRzWzJdLlJlcG9ydFR5cGUoKT09J1NpbmdsZScgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7IHdpZHRoOiAxMDAlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOiA0OHB4XCIgdGl0bGU9XCJObyBkYXRhIGZvdW5kXCI+Lzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGlmOiAkcGFyZW50c1syXS5SZXBvcnRUeXBlKCkhPSdTaW5nbGUnIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBObyByZWNvcmRzIGZvdW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiAkcGFyZW50LnJvd3MgIC0tPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0ga28gaWY6ICRwYXJlbnRDb250ZXh0LiRwYXJlbnRDb250ZXh0LiRwYXJlbnRDb250ZXh0LiRwYXJlbnQuY2FuRHJpbGxkb3duKCkgJiYgISRwYXJlbnQuSXNEcmlsbERvd24oKSAmJiAhJHBhcmVudC5DYW5FeHBhbmRPcHRpb24oKSAmJiAkcGFyZW50Q29udGV4dC4kcGFyZW50Q29udGV4dC4kcGFyZW50Q29udGV4dC4kcGFyZW50LlJlcG9ydFR5cGUoKSAhPSAnU2luZ2xlJyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ3aWR0aDogMzBweDsgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcIj48YSBocmVmPVwiI1wiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpeyB0b2dnbGUoKTsgfVwiPjxzcGFuIGNsYXNzPVwiZmFcIiBkYXRhLWJpbmQ9XCJjc3M6IHsnZmEtcGx1cyc6ICFpc0V4cGFuZGVkKCksICdmYS1taW51cyc6IGlzRXhwYW5kZWQoKX1cIj48L3NwYW4+PC9hPjwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyB0ZW1wbGF0ZTogJ3JlcG9ydC1jb2x1bW4nLCBkYXRhOiAkZGF0YSAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIC9rby0tPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwhLS0ga28gaWY6IGlzRXhwYW5kZWQgLS0+XHJcbiAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6IDMwcHg7XCI+PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1iaW5kPVwiYXR0cjp7Y29sc3BhbjogJHBhcmVudC5Db2x1bW5zLmxlbmd0aCB9XCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBpZjogRHJpbGxEb3duRGF0YSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc3RyaXBlZCB0YWJsZS1ob3ZlciB0YWJsZS1jb25kZW5zZWRcIiBkYXRhLWJpbmQ9XCJ3aXRoOiBEcmlsbERvd25EYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwibm8taGlnaGxpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ga28gdGVtcGxhdGU6ICdyZXBvcnQtY29sdW1uLWhlYWRlcicsIGRhdGE6ICRkYXRhIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIC9rby0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgZGF0YS1iaW5kPVwidmlzaWJsZTogUm93cyAmJiBSb3dzLmxlbmd0aCA8IDFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1pbmZvXCIgZGF0YS1iaW5kPVwiYXR0cjp7Y29sc3BhbjogQ29sdW1ucy5sZW5ndGh9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyByZWNvcmRzIGZvdW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGZvcmVhY2g6IFJvd3MgIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyB0ZW1wbGF0ZTogJ3JlcG9ydC1jb2x1bW4nLCBkYXRhOiAkZGF0YSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAva28tLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtY2VudGVyZWRcIiBkYXRhLWJpbmQ9XCJ3aXRoOiBwYWdlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0taW5saW5lIHNtYWxsIHRleHQtbXV0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1sZWZ0IHRvdGFsLXJlY29yZHNcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBwYWdlcygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6ICdUb3RhbCBSZWNvcmRzOiAnICsgdG90YWxSZWNvcmRzKClcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi14c1wiIHRpdGxlPVwiRG93bmxvYWQgRXhjZWxcIiBkYXRhLWJpbmQ9XCJjbGljazogJHBhcmVudC5leHBvcnRFeGNlbFwiPjxzcGFuIGNsYXNzPVwiZmEgZmEtZmlsZS1leGNlbC1vXCI+PC9zcGFuPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHB1bGwtcmlnaHRcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBwYWdlcygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidGVtcGxhdGU6ICdwYWdlci10ZW1wbGF0ZScsIGRhdGE6ICRkYXRhXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgPCEtLSBrbyBpZjogJHBhcmVudENvbnRleHQuJHBhcmVudC5TdWJUb3RhbHMoKS5sZW5ndGggPT0gMSAmJiAkcGFyZW50Q29udGV4dC4kcGFyZW50Q29udGV4dC4kcGFyZW50Lk91dGVyR3JvdXBDb2x1bW5zKCkubGVuZ3RoID09IDAgLS0+XHJcbiAgICAgICAgICAgIDx0Zm9vdCBkYXRhLWJpbmQ9XCJmb3JlYWNoOiAkcGFyZW50Q29udGV4dC4kcGFyZW50LlN1YlRvdGFsc1wiPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0ga28gaWY6ICRwYXJlbnRDb250ZXh0LiRwYXJlbnRDb250ZXh0LiRwYXJlbnRDb250ZXh0LiRwYXJlbnQuY2FuRHJpbGxkb3duKCkgJiYgISRwYXJlbnQuSXNEcmlsbERvd24oKSAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8dGQ+PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGZvcmVhY2g6IEl0ZW1zIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0ga28gaWY6IFZhbHVlICE9ICdOQScgJiYgVmFsdWUgIT0gJ05hTicgJiYgIW91dGVyR3JvdXAoKSAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1iaW5kPVwic3R5bGU6IHsnYmFja2dyb3VuZC1jb2xvcic6IGJhY2tDb2xvciwgJ2NvbG9yJzogZm9udENvbG9yLCAnZm9udC13ZWlnaHQnOiBmb250Qm9sZCgpID8gJ2JvbGQnIDogJ25vcm1hbCcsICd0ZXh0LWFsaWduJzogJHBhcmVudHNbNF0ucGFnZXIgJiYgJHBhcmVudHNbNF0uUmVwb3J0VHlwZSgpPT0nU2luZ2xlJyA/ICdjZW50ZXInIDogKGZpZWxkQWxpZ24gPyBmaWVsZEFsaWduIDogKENvbHVtbi5Jc051bWVyaWMgPyAncmlnaHQnIDogJ2xlZnQnKSksICdmb250LXNpemUnOiRwYXJlbnRzWzRdLnBhZ2VyICYmICRwYXJlbnRzWzRdLlJlcG9ydFR5cGUoKT09J1NpbmdsZScgPyAnNDhweCcgOiAnJ31cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwiaHRtbDogZm9ybWF0dGVkVmFsLCBjc3M6IHsncmlnaHQtYWxpZ24nOiB0cnVlfVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90Zm9vdD5cclxuICAgICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgPC90YWJsZT5cclxuICAgIDwvZGl2PlxyXG48L3NjcmlwdD5cclxuXHJcbjxzY3JpcHQgdHlwZT1cInRleHQvaHRtbFwiIGlkPVwicmVwb3J0LXRlbXBsYXRlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicmVwb3J0LWNoYXJ0XCIgZGF0YS1iaW5kPVwiYXR0cjoge2lkOiAnY2hhcnRfZGl2XycgKyAkcGFyZW50LlJlcG9ydElEKCl9LCB2aXNpYmxlOiAkcGFyZW50LmlzQ2hhcnRcIj48L2Rpdj5cclxuICAgIDwhLS0ga28gaWY6ICRwYXJlbnQuUmVwb3J0VHlwZSgpID09ICdQaXZvdCcgLS0+XHJcbiAgICA8ZGl2IGRhdGEtYmluZD1cInRlbXBsYXRlOiB7bmFtZTogJ3JlcG9ydC1waXZvdCcsIGRhdGE6ICRkYXRhIH1cIj48L2Rpdj5cclxuICAgIDwhLS0gL2tvIC0tPlxyXG5cclxuICAgIDwhLS0ga28gaWY6ICRwYXJlbnQuUmVwb3J0VHlwZSgpICE9ICdQaXZvdCcgJiYgKCEkcGFyZW50LmlzQ2hhcnQoKSB8fCAkcGFyZW50LlNob3dEYXRhV2l0aEdyYXBoKCkpIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cInB1bGwtcmlnaHRcIiBkYXRhLWJpbmQ9XCJpZjogJHBhcmVudC5PdXRlckdyb3VwQ29sdW1ucygpLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICA8YSBocmVmPVwiI1wiIGRhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIiBhcmlhLWhhc3BvcHVwPVwiZmFsc2VcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgTWFuYWdlIEdyb3VwcyA8c3BhbiBjbGFzcz1cImZhIGZhLWVsbGlwc2lzLXZcIj48L3NwYW4+XHJcbiAgICAgICAgPC9hPlxyXG4gICAgICAgIDx1bCBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBzdHlsZT1cInotaW5kZXg6IDEwMDE7XCIgZGF0YS1iaW5kPVwiZm9yZWFjaDogJHBhcmVudC5PdXRlckdyb3VwQ29sdW1uc1wiPlxyXG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJkcm9wZG93bi1pdGVtIHNtYWxsXCI+XHJcbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIGRhdGEtYmluZD1cImNsaWNrOiByZW1vdmVcIiB0aXRsZT1cIlJlbW92ZSBmcm9tIEdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1jbG9zZVwiPjwvc3Bhbj4gPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogZmllbGROYW1lXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjbGVhci1maXhcIj48L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGRhdGEtYmluZD1cImZvcmVhY2g6IG91dGVyR3JvdXBEYXRhXCI+XHJcbiAgICAgICAgPCEtLSBrbyBpZjogcm93cy5sZW5ndGggPiAwIHx8ICgkcGFyZW50Lm91dGVyR3JvdXBEYXRhICYmICRwYXJlbnQub3V0ZXJHcm91cERhdGEoKS5sZW5ndGggPT0gMSkgLS0+XHJcbiAgICAgICAgPGg2IGRhdGEtYmluZD1cImh0bWw6IGRpc3BsYXlcIj48L2g2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJcIiBzdHlsZT1cInBhZGRpbmctdG9wOiA1cHg7XCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZW1wbGF0ZToge25hbWU6ICdyZXBvcnQtdGFibGUnLCBkYXRhOiAkcGFyZW50LlJlcG9ydERhdGEgfVwiPjwvZGl2PlxyXG4gICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tIC9rbyAtLT5cclxuPC9zY3JpcHQ+XHJcbjxzY3JpcHQgdHlwZT1cInRleHQvaHRtbFwiIGlkPVwiYWRtaW4tbW9kZS10ZW1wbGF0ZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiIHN0eWxlPVwicGFkZGluZzogMTBweCAxMHB4XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1hdGVyaWFsLXN3aXRjaCBwdWxsLXJpZ2h0XCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCBpZD1cImFkbWluLW1vZGVcIiB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBhZG1pbk1vZGVcIiAvPlxyXG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwiYWRtaW4tbW9kZVwiIGNsYXNzPVwibGFiZWwtcHJpbWFyeVwiPjwvbGFiZWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtcmlnaHRcIj5BZG1pbiBNb2RlPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mb1wiIGRhdGEtYmluZD1cInZpc2libGU6IGFkbWluTW9kZVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdXNlci1jaXJjbGVcIj48L2k+QWRtaW4gTW9kZSBpcyB0dXJuZWQgb24gbm93LCBpdCBhbGxvd3MgeW91IHRvIHNldHVwIGFuZCB2aWV3IFJlcG9ydHMgb3IgRGFzaGJvYXJkcyBmb3IgYWxsIHJvbGVzIGFuZCB1c2Vycy4gWW91IHNob3VsZCByZW1vdmUgdGhlIEFkbWluIG1vZGUgdG9nZ2xlIGZvciBub24tYWRtaW4gdXNlcnMuPGJyIC8+XHJcbiAgICA8L2Rpdj5cclxuPC9zY3JpcHQ+XHJcbjxzY3JpcHQgdHlwZT1cInRleHQvaHRtbFwiIGlkPVwibWFuYWdlLWFjY2Vzcy10ZW1wbGF0ZVwiPlxyXG4gICAgPGg1PjxzcGFuIGNsYXNzPVwiZmEgZmEta2V5XCI+PC9zcGFuPk1hbmFnZSBBY2Nlc3M8L2g1PlxyXG4gICAgPGRpdiBjbGFzcz1cInBhbmVsIHBhbmVsLWRlZmF1bHQgcGFuZWwtYm9keVwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDIwcHg7XCI+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tMyBjb250cm9sLWxhYmVsXCI+Q2xpZW50IElkIHRvIFJlc3RyaWN0IEFjY2VzczwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIHRleHQtYm94IHNpbmdsZS1saW5lXCIgdHlwZT1cInRleHRcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogbWFuYWdlQWNjZXNzLmNsaWVudElkXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEgY29sLXNtLTFcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtdG9nZ2xlPVwidG9vbHRpcFwiIGRhdGEtcGxhY2VtZW50PVwicmlnaHRcIiBjbGFzcz1cImZhIGZhLXF1ZXN0aW9uLWNpcmNsZSBoZWxwdGlwXCIgdGl0bGU9XCJMZWF2ZSBibGFuayB0byBnaXZlIGFsbCBjbGllbnRzIGFjY2VzcyAoR2xvYmFsIFJlcG9ydHMpXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mb1wiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWxpZ2h0YnVsYi1vIGZhLTJ4XCI+PC9zcGFuPiZuYnNwO1VzZXIgbGV2ZWwgcmlnaHRzIG92ZXIgcnVsZSBSb2xlIGxldmVsIHJpZ2h0cy4gTm8gc2VsZWN0aW9uIGZvciBhIHJ1bGUgaW1wbGllcyByZXBvcnQgaXMgYXZhaWxhYmxlIHRvIGFsbC5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBzbWFsbFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgIDxiPk1hbmFnZSBieSBVc2VyPC9iPiAoYWxsb3cgZWRpdClcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgY29udGFpbmVyLWZsdWlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiBtYW5hZ2VBY2Nlc3MudXNlcnMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsIGxhYmVsLWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogc2VsZWN0ZWRcIj4mbmJzcDs8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiB0ZXh0XCI+PC9zcGFuPiZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogbWFuYWdlQWNjZXNzLnVzZXJzLmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJzIGxpc3Qgbm90IHBvcHVsYXRlZCBvciBub3QgYXBwbGljYWJsZVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgIDxiPlZpZXcgb25seSBieSBVc2VyPC9iPiAobm8gZWRpdC9kZWxldGUpXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGNvbnRhaW5lci1mbHVpZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDogbWFuYWdlQWNjZXNzLnZpZXdPbmx5VXNlcnMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsIGxhYmVsLWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogc2VsZWN0ZWRcIj4mbmJzcDs8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiB0ZXh0XCI+PC9zcGFuPiZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogbWFuYWdlQWNjZXNzLnVzZXJzLmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJzIGxpc3Qgbm90IHBvcHVsYXRlZCBvciBub3QgYXBwbGljYWJsZVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWZub3Q6IG1hbmFnZUFjY2Vzcy5pc0Rhc2hib2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxiPkRlbGV0ZSBieSBVc2VyPC9iPiAoYWxsb3cgZGVsZXRlKVxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgY29udGFpbmVyLWZsdWlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDogbWFuYWdlQWNjZXNzLmRlbGV0ZU9ubHlVc2VycyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwgbGFiZWwtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogc2VsZWN0ZWRcIj4mbmJzcDs8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiB0ZXh0XCI+PC9zcGFuPiZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiBtYW5hZ2VBY2Nlc3MudXNlcnMubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJzIGxpc3Qgbm90IHBvcHVsYXRlZCBvciBub3QgYXBwbGljYWJsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICA8Yj5NYW5hZ2UgYnkgVXNlciBSb2xlPC9iPiAoYWxsb3cgZWRpdClcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgY29udGFpbmVyLWZsdWlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiBtYW5hZ2VBY2Nlc3MudXNlclJvbGVzIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLWxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbCBsYWJlbC1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IHNlbGVjdGVkXCI+Jm5ic3A7PHNwYW4gZGF0YS1iaW5kPVwidGV4dDogdGV4dFwiPjwvc3Bhbj4mbmJzcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IG1hbmFnZUFjY2Vzcy51c2VyUm9sZXMubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgVXNlciBSb2xlcyBsaXN0IG5vdCBwb3B1bGF0ZWQgb3Igbm90IGFwcGxpY2FibGVcclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICA8Yj5WaWV3IG9ubHkgYnkgVXNlciBSb2xlPC9iPiAobm8gZWRpdC9kZWxldGUpXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGNvbnRhaW5lci1mbHVpZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDogbWFuYWdlQWNjZXNzLnZpZXdPbmx5VXNlclJvbGVzIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLWxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbCBsYWJlbC1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IHNlbGVjdGVkXCI+Jm5ic3A7PHNwYW4gZGF0YS1iaW5kPVwidGV4dDogdGV4dFwiPjwvc3Bhbj4mbmJzcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IG1hbmFnZUFjY2Vzcy51c2VyUm9sZXMubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgVXNlciBSb2xlcyBsaXN0IG5vdCBwb3B1bGF0ZWQgb3Igbm90IGFwcGxpY2FibGVcclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZm5vdDogbWFuYWdlQWNjZXNzLmlzRGFzaGJvYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGI+RGVsZXRlIGJ5IFVzZXIgUm9sZTwvYj4gKGFsbG93IGRlbGV0ZSlcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGNvbnRhaW5lci1mbHVpZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGZvcmVhY2g6IG1hbmFnZUFjY2Vzcy5kZWxldGVPbmx5VXNlclJvbGVzIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbCBsYWJlbC1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBzZWxlY3RlZFwiPiZuYnNwOzxzcGFuIGRhdGEtYmluZD1cInRleHQ6IHRleHRcIj48L3NwYW4+Jm5ic3A7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IG1hbmFnZUFjY2Vzcy51c2VyUm9sZXMubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXIgUm9sZXMgbGlzdCBub3QgcG9wdWxhdGVkIG9yIG5vdCBhcHBsaWNhYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvc2NyaXB0PlxyXG48c2NyaXB0IHR5cGU9XCJ0ZXh0L2h0bWxcIiBpZD1cImZpbHRlci1ncm91cFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInF1ZXJ5LWJ1aWxkZXIgZm9ybS1pbmxpbmVcIiBkYXRhLWJpbmQ9XCJmb3JlYWNoOiBGaWx0ZXJHcm91cHNcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicnVsZXMtZ3JvdXAtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJydWxlcy1ncm91cC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidmlzaWJsZTogIWlzUm9vdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLWxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBidG4tZ3JvdXAtdG9nZ2xlIGJ0bi1ncm91cC1zbVwiIGRhdGEtdG9nZ2xlPVwiYnV0dG9uc1wiIHJvbGU9XCJncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYWN0aXZlXCIgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDBweDtcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cImFuZG9yb3B0aW9uXCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogQW5kT3IsIGNoZWNrZWRWYWx1ZTogJ0FuZCdcIj4gQW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJhbmRvcm9wdGlvblwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IEFuZE9yLCBjaGVja2VkVmFsdWU6ICdPcidcIj4gT3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtcmlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXNlY29uZGFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiAkcGFyZW50LlJlbW92ZUZpbHRlckdyb3VwLCB2aXNpYmxlOiAhaXNSb290XCI+UmVtb3ZlIEdyb3VwPC9idXR0b24+Jm5ic3A7XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidmlzaWJsZTogaXNSb290XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtbGVmdCBwYWRkZWQtZGl2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4gJm5ic3A7RmlsdGVyIENvbmRpdGlvbnM8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xlYXJmaXhcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnVsZXMtZ3JvdXAtYm9keVwiIGRhdGEtYmluZD1cInRlbXBsYXRlOiB7bmFtZTogJ2ZpbHRlci1pbm5lcid9XCI+PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9zY3JpcHQ+XHJcbjxzY3JpcHQgdHlwZT1cInRleHQvaHRtbFwiIGlkPVwiZmx5LWZpbHRlci10ZW1wbGF0ZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmRcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBGbHlGaWx0ZXJzKCkubGVuZ3RoPjBcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgPGEgZGF0YS10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtYmluZD1cImF0dHI6IHsnZGF0YS10YXJnZXQnOiAnI2ZpbHRlci1wYW5lbC0nICsgUmVwb3J0SUQoKSB9XCIgaHJlZj1cIiNcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZmlsdGVyXCI+PC9pPiBDaG9vc2UgRmlsdGVyc1xyXG4gICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJhdHRyOiB7aWQ6ICdmaWx0ZXItcGFuZWwtJyArIFJlcG9ydElEKCkgfSwgY3NzOiB7Y29sbHBhc2VkOiAhRG9udEV4ZWN1dGVPblJ1bigpLCBjb2xsYXBzZTogIURvbnRFeGVjdXRlT25SdW4oKX1cIiBjbGFzcz1cImNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiBGbHlGaWx0ZXJzIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNSBjb2wteHMtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cIndpdGg6IEZpZWxkXCIgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgdGl0bGU9XCJBcHBseSB0aGlzIGZpbHRlclwiIGRhdGEtYmluZD1cImNoZWNrZWQ6ICRwYXJlbnQuQXBwbHlcIiAvPiA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBzZWxlY3RlZEZpbHRlck5hbWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cIndpdGg6IEZpZWxkXCIgY2xhc3M9XCJjb2wtc20tMiBjb2wteHMtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiIGRhdGEtYmluZD1cImlmOiAkcGFyZW50LkFwcGx5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZGF0YS1iaW5kPVwib3B0aW9uczogZmllbGRGaWx0ZXIsIHZhbHVlOiAkcGFyZW50Lk9wZXJhdG9yXCIgcmVxdWlyZWQ+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwid2l0aDogRmllbGRcIiBjbGFzcz1cImNvbC1zbS01IGNvbC14cy01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6ICRwYXJlbnQuQXBwbHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidGVtcGxhdGU6ICdyZXBvcnQtZmlsdGVyJywgZGF0YTogJGRhdGFcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiBFeGVjdXRlUmVwb3J0XCI+UnVuPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvc2NyaXB0PlxyXG5cclxuPHNjcmlwdCB0eXBlPVwidGV4dC9odG1sXCIgaWQ9XCJmaWx0ZXItaW5uZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJydWxlcy1saXN0XCIgPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJydWxlLWNvbnRhaW5lclwiIGRhdGEtYmluZD1cInZpc2libGU6IEZpbHRlcnMoKS5sZW5ndGg+MFwiPlxyXG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLXN0cmlwZWQgdGFibGUtaG92ZXIgdGFibGUtYm9yZGVybGVzc1wiPlxyXG4gICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5GaWVsZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+RmlsdGVyPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICA8dGJvZHkgZGF0YS1iaW5kPVwiZm9yZWFjaDogRmlsdGVyc1wiPlxyXG4gICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwicnVsZS1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgZGF0YS1iaW5kPVwidmFsdWU6IEFuZE9yLCB2aXNpYmxlOiAkaW5kZXgoKT4wXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+QW5kPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPk9yPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiIGRhdGEtYmluZD1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogJHBhcmVudHNbJHBhcmVudHMubGVuZ3RoLTJdLnNlbGVjdGVkRmllbGRzQ2FuRmlsdGVyICE9IHVuZGVmaW5lZCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJHBhcmVudHNbJHBhcmVudHMubGVuZ3RoLTJdLnNlbGVjdGVkRmllbGRzQ2FuRmlsdGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICRwYXJlbnRzWyRwYXJlbnRzLmxlbmd0aC0xXS5zZWxlY3RlZEZpZWxkc0NhbkZpbHRlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNUZXh0OiAnc2VsZWN0ZWRGaWVsZE5hbWUnLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNDYXB0aW9uOiAnUGxlYXNlIENob29zZScsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IEZpZWxkLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHI6IHtyZXF1aXJlZDogRmllbGQoKT09bnVsbD8ncmVxdWlyZWQnOmZhbHNlfSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlOiBGaWVsZCgpICYmIEZpZWxkKCkuZm9yY2VkXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwid2l0aDogRmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7XCIgZGF0YS1iaW5kPVwib3B0aW9uczogZmllbGRGaWx0ZXIsIHZhbHVlOiAkcGFyZW50Lk9wZXJhdG9yXCIgcmVxdWlyZWQ+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cIndpdGg6IEZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZW1wbGF0ZTogJ3JlcG9ydC1maWx0ZXInLCBkYXRhOiAkZGF0YVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGlmOiBGaWVsZCgpICYmIEZpZWxkKCkuZmllbGRUeXBlID09ICdEYXRlVGltZScgJiYgT3BlcmF0b3IoKSA9PSAncmFuZ2UnICYmICRpbmRleCgpPT0wIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ga28gaWY6ICRwYXJlbnRzWyRwYXJlbnRzLmxlbmd0aC0yXS5jYW5BZGRTZXJpZXMgIT0gdW5kZWZpbmVkICYmICRwYXJlbnRzWyRwYXJlbnRzLmxlbmd0aC0yXS5jYW5BZGRTZXJpZXMoKSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tc2Vjb25kYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRwYXJlbnRzWyRwYXJlbnRzLmxlbmd0aC0yXS5BZGRTZXJpZXMuYmluZCgkZGF0YSlcIj5BZGQgQ29tcGFyaXNvbjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0va28gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBpZjogJHBhcmVudHNbJHBhcmVudHMubGVuZ3RoLTJdLmNhbkFkZFNlcmllcyA9PSB1bmRlZmluZWQgJiYgJHBhcmVudENvbnRleHQuJHBhcmVudC5jYW5BZGRTZXJpZXMgIT0gdW5kZWZpbmVkICYmICRwYXJlbnRDb250ZXh0LiRwYXJlbnQuY2FuQWRkU2VyaWVzKCktLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tc2Vjb25kYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRwYXJlbnRDb250ZXh0LiRwYXJlbnQuQWRkU2VyaWVzLmJpbmQoJGRhdGEpXCI+QWRkIENvbXBhcmlzb248L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLS9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInZpc2libGU6IEZpZWxkKCkgJiYgRmllbGQoKS5mb3JjZWRcIiBjbGFzcz1cImJhZGdlIGJhZGdlLWluZm9cIj5SZXF1aXJlZCBGaWx0ZXI8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1zZWNvbmRhcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogJHBhcmVudC5SZW1vdmVGaWx0ZXIsIGhpZGRlbjogRmllbGQoKSAmJiBGaWVsZCgpLmZvcmNlZFwiPlJlbW92ZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDogY29tcGFyZVRvIC0tPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj4mbmJzcDs8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwidGV4dC1hbGlnbjogcmlnaHRcIj48YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi14c1wiIGRhdGEtYmluZD1cImNsaWNrOiAkcGFyZW50c1syXS5SZW1vdmVTZXJpZXNcIj48c3BhbiBjbGFzcz1cImZhIGZhLXRyYXNoLW9cIj48L3NwYW4+PC9idXR0b24+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5Db21wYXJlIFRvPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZGF0YS1iaW5kPVwib3B0aW9uczogUmFuZ2UsIHZhbHVlOiBWYWx1ZVwiIHJlcXVpcmVkPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJydWxlLWNvbnRhaW5lclwiID5cclxuICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZW1wbGF0ZToge25hbWU6ICdmaWx0ZXItZ3JvdXAnfVwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogQWRkRmlsdGVyR3JvdXBcIj5BZGQgR3JvdXA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IEFkZEZpbHRlclwiPkFkZCBGaWx0ZXI8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbjwvc2NyaXB0PlxyXG5cclxuPHNjcmlwdCB0eXBlPVwidGV4dC9odG1sXCIgaWQ9XCJmaWx0ZXItcGFyYW1ldGVyc1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmUgY2FyZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwiaGlkZGVuOiBzaG93UGFyYW1ldGVyc1wiPk5vIGZpbHRlcnMgYXZhaWxhYmxlIHRvIGNob29zZTwvc3Bhbj5cclxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc3RyaXBlZCB0YWJsZS1ob3ZlciB0YWJsZS1ib3JkZXJsZXNzXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogc2hvd1BhcmFtZXRlcnNcIj5cclxuICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOiAzMCVcIj5GaWx0ZXI8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDogMjAlXCI+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6IDMwJVwiPlZhbHVlPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8dGJvZHkgZGF0YS1iaW5kPVwiZm9yZWFjaDogUGFyYW1ldGVyc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ciBkYXRhLWJpbmQ9XCJpZm5vdDogSGlkZGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBkYXRhLWJpbmQ9XCJ0ZXh0OiBEaXNwbGF5TmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiIGRhdGEtYmluZD1cIm9wdGlvbnM6IG9wZXJhdG9ycywgdmFsdWU6IE9wZXJhdG9yXCIgcmVxdWlyZWQ+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtYmluZD1cIndpdGg6IEZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRlbXBsYXRlOiAncmVwb3J0LWZpbHRlcicsIGRhdGE6ICRkYXRhXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcblxyXG4gICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L3NjcmlwdD5cclxuXHJcbjxzY3JpcHQgdHlwZT1cInRleHQvaHRtbFwiIGlkPVwicmVwb3J0LXNjaGVkdWxlXCI+XHJcbiAgICA8ZGl2IGRhdGEtYmluZD1cIndpdGg6IHNjaGVkdWxlQnVpbGRlclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogaGFzU2NoZWR1bGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgIFNjaGVkdWxlIFJlcG9ydFxyXG4gICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiBoYXNTY2hlZHVsZVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0taW5saW5lIGZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgY29sLXNtLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IHNlbGVjdGVkT3B0aW9uKCkgIT0gJ29uY2UnID8gJ0V2ZXJ5ICcgOiAnJ1wiPjwvc3Bhbj4mbmJzcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJlcXVpcmVkIGRhdGEtYmluZD1cIm9wdGlvbnM6IG9wdGlvbnMsIHZhbHVlOiBzZWxlY3RlZE9wdGlvblwiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiBzZWxlY3RlZE9wdGlvbigpID09ICdvbmNlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7b24mbmJzcDs8aW5wdXQgZGF0YS1iaW5kPVwiZGF0ZXBpY2tlcjogc2VsZWN0ZWREYXRlXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByZXF1aXJlZCAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogc2hvd0RheXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7b24mbmJzcDs8c2VsZWN0IG11bHRpcGxlIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcmVxdWlyZWQgZGF0YS1iaW5kPVwic2VsZWN0MjogeyBwbGFjZWhvbGRlcjogJ0Nob29zZSBEYXlzJywgYWxsb3dDbGVhcjogdHJ1ZSB9LCBvcHRpb25zOiBkYXlzLCBzZWxlY3RlZE9wdGlvbnM6IHNlbGVjdGVkRGF5c1wiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogc2hvd0RhdGVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO29uJm5ic3A7PHNlbGVjdCBtdWx0aXBsZSBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJlcXVpcmVkIGRhdGEtYmluZD1cInNlbGVjdDI6IHsgcGxhY2Vob2xkZXI6ICdDaG9vc2UgRGF0ZXMnLCBhbGxvd0NsZWFyOiB0cnVlIH0sIG9wdGlvbnM6IGRhdGVzLCBzZWxlY3RlZE9wdGlvbnM6IHNlbGVjdGVkRGF0ZXNcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IHNob3dNb250aHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtvZiZuYnNwOzxzZWxlY3QgbXVsdGlwbGUgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByZXF1aXJlZCBkYXRhLWJpbmQ9XCJzZWxlY3QyOiB7IHBsYWNlaG9sZGVyOiAnQ2hvb3NlIE1vbnRocycsIGFsbG93Q2xlYXI6IHRydWUgfSwgb3B0aW9uczogbW9udGhzLCBzZWxlY3RlZE9wdGlvbnM6IHNlbGVjdGVkTW9udGhzXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiBzaG93QXRUaW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDthdCZuYnNwOzxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJvcHRpb25zOiBob3VycywgdmFsdWU6IHNlbGVjdGVkSG91clwiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cIm9wdGlvbnM6IG1pbnV0ZXMsIHZhbHVlOiBzZWxlY3RlZE1pbnV0ZVwiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cInZhbHVlOiBzZWxlY3RlZEFtUG1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPkFNPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5QTTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgIFJlcG9ydCB3aWxsIGJlIHJ1biBhbmQgZW1haWxlZCA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBzZWxlY3RlZE9wdGlvbigpICE9ICdvbmNlJyA/ICdldmVyeScgOiAnJ1wiPjwvc3Bhbj4gPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogc2VsZWN0ZWRPcHRpb25cIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwiaWY6IHNlbGVjdGVkT3B0aW9uKCkgPT0gJ29uY2UnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgIG9uIDxzcGFuIGNsYXNzPVwiZXJyb3JcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAhc2VsZWN0ZWREYXRlKClcIj5QbGVhc2UgcGljayBhIERhdGU8L3NwYW4+IDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IHNlbGVjdGVkRGF0ZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJpZjogc2hvd0RheXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICBvbiA8c3BhbiBjbGFzcz1cImVycm9yXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogc2VsZWN0ZWREYXlzKCkubGVuZ3RoID09IDBcIj5QbGVhc2UgcGljayBEYXkocyk8L3NwYW4+IDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IHNlbGVjdGVkRGF5c1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJpZjogc2hvd0RhdGVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgIG9uIDxzcGFuIGNsYXNzPVwiZXJyb3JcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBzZWxlY3RlZERhdGVzKCkubGVuZ3RoID09IDBcIj5QbGVhc2UgcGljayBEYXRlKHMpPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJmb3JlYWNoOiBzZWxlY3RlZERhdGVzXCI+PHNwYW4gZGF0YS1iaW5kPVwidmlzaWJsZTogJGluZGV4KCk+MFwiPiwgPC9zcGFuPjxzcGFuIGRhdGEtYmluZD1cInRleHQ6ICRkYXRhID09IDEgPyAnMXN0JzogKCRkYXRhID09IDIgPyAnMm5kJyA6ICgkZGF0YSA9PSAzID8gJzNyZCcgOiAkZGF0YSsndGgnKSlcIj48L3NwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwiaWY6IHNob3dNb250aHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgb2YgPHNwYW4gY2xhc3M9XCJlcnJvclwiIGRhdGEtYmluZD1cInZpc2libGU6IHNlbGVjdGVkTW9udGhzKCkubGVuZ3RoID09IDBcIj5QbGVhc2UgcGljayBNb250aChzKTwvc3Bhbj4gPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogc2VsZWN0ZWRNb250aHNcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cImlmOiBzaG93QXRUaW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgIGF0IDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IHNlbGVjdGVkSG91clwiPjwvc3Bhbj46PHNwYW4gZGF0YS1iaW5kPVwidGV4dDogc2VsZWN0ZWRNaW51dGVcIj48L3NwYW4+IDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IHNlbGVjdGVkQW1QbVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ob3Jpem9udGFsIGZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMiBjb250cm9sLWxhYmVsXCI+RW1haWwgdG88L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogZW1haWxUb1wiIHBsYWNlaG9sZGVyPVwiRW50ZXIgRW1haWwgQWRkcmVzc2VzIHNlcGFyYXRlZCBieSBjb21tYSB0byBzZW5kIHRoZSBSZXBvcnQgdG9cIiByZXF1aXJlZCAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0yIGNvbnRyb2wtbGFiZWxcIj5SZXBvcnQgRm9ybWF0PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogZm9ybWF0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiRVhDRUxcIj5FeGNlbDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJDU1ZcIj5DU1Y8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJQREZcIj5QREY8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWhvcml6b250YWwgZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNCBjb250cm9sLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgdGl0bGU9XCJTZXQgYSBkYXRlIHRvIHN0YXJ0IHNlbmRpbmcgc2NoZWR1bGVkIHJlcG9ydFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IGhhc1NjaGVkdWxlU3RhcnRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXQgU2NoZWR1bGUgU3RhcnQgRGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNFwiIGRhdGEtYmluZD1cImlmOiBoYXNTY2hlZHVsZVN0YXJ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJkYXRlcGlja2VyOiBzY2hlZHVsZVN0YXJ0XCIgdGl0bGU9XCJTY2hlZHVsZWQgUmVwb3J0IHdpbGwgbm90IGJlIHNlbnQgYmVmb3JlIHRoaXMgZGF0ZVwiIHJlcXVpcmVkIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0taG9yaXpvbnRhbCBmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS00IGNvbnRyb2wtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIiB0aXRsZT1cIlNldCBhIGRhdGUgdG8gc3RvcCBzZW5kaW5nIHNjaGVkdWxlZCByZXBvcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogaGFzU2NoZWR1bGVFbmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXQgU2NoZWR1bGUgRW5kIERhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTRcIiBkYXRhLWJpbmQ9XCJpZjogaGFzU2NoZWR1bGVFbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJkYXRlcGlja2VyOiBzY2hlZHVsZUVuZFwiIHRpdGxlPVwiU2NoZWR1bGVkIFJlcG9ydCB3aWxsIG5vdCBiZSBzZW50IGFmdGVyIHRoaXMgZGF0ZVwiIHJlcXVpcmVkIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9zY3JpcHQ+XHJcblxyXG48c2NyaXB0IHR5cGU9XCJ0ZXh0L2h0bWxcIiBpZD1cInJlcG9ydC1maWVsZC1vcHRpb25zXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCIgc3R5bGU9XCJtYXgtd2lkdGg6IDc1MHB4O1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCIgZGF0YS1iaW5kPVwid2l0aDogZWRpdEZpZWxkT3B0aW9uc1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiPjxzcGFuIGRhdGEtYmluZD1cInRleHQ6IGZpZWxkTmFtZVwiPjwvc3Bhbj4gLSBTZXR1cCBBZGRpdGlvbmFsIEZpZWxkIE9wdGlvbnM8L2g1PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgbmVlZHMtdmFsaWRhdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTUgY29sLW1kLTUgY29udHJvbC1sYWJlbFwiPlBpY2sgRGF0YSBGb3JtYXQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNyBjb2wtbWQtN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcmVxdWlyZWQgZGF0YS1iaW5kPVwib3B0aW9uczogJHBhcmVudC5maWVsZEZvcm1hdFR5cGVzLCB2YWx1ZTogZmllbGRGb3JtYXRcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCIgZGF0YS1iaW5kPVwidmlzaWJsZTogJHBhcmVudC5kZWNpbWFsRm9ybWF0VHlwZXMuaW5kZXhPZigkZGF0YS5maWVsZEZvcm1hdCgpKT49MFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS01IGNvbC1tZC01IGNvbnRyb2wtbGFiZWxcIj5QaWNrIERlY2ltYWwgUGxhY2VzPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTcgY29sLW1kLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cInZhbHVlOiBkZWNpbWFsUGxhY2VzXCIgcGxhY2Vob2xkZXI9XCJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiIGRhdGEtYmluZD1cInZpc2libGU6ICRwYXJlbnQuZGF0ZUZvcm1hdFR5cGVzLmluZGV4T2YoJGRhdGEuZmllbGRGb3JtYXQoKSk+PTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tNSBjb2wtbWQtNSBjb250cm9sLWxhYmVsXCI+UGljayBEYXRlIEZvcm1hdDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS03IGNvbC1tZC03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByZXF1aXJlZCBkYXRhLWJpbmQ9XCJvcHRpb25zOiAkcGFyZW50LmRhdGVGb3JtYXRzLCB2YWx1ZTogZGF0ZUZvcm1hdFwiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBkYXRlRm9ybWF0KCk9PT0nQ3VzdG9tJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tNSBjb2wtbWQtNSBjb250cm9sLWxhYmVsXCI+RW50ZXIgQ3VzdG9tIERhdGUgRm9ybWF0PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTcgY29sLW1kLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogY3VzdG9tRGF0ZUZvcm1hdFwiIHBsYWNlaG9sZGVyPVwiZGQvbW0veXl5eVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tNSBjb2wtbWQtNSBjb250cm9sLWxhYmVsXCI+Q2hvb3NlIENvbHVtbiBMYWJlbDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS03IGNvbC1tZC03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcmVxdWlyZWQgZGF0YS1iaW5kPVwidmFsdWU6IGZpZWxkTGFiZWxcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tNSBjb2wtbWQtNSBjb250cm9sLWxhYmVsXCI+Q2hvb3NlIFRleHQgQWxpZ25tZW50PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTcgY29sLW1kLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJlcXVpcmVkIGRhdGEtYmluZD1cIm9wdGlvbnM6ICRwYXJlbnQuZmllbGRBbGlnbm1lbnRzLCB2YWx1ZTogZmllbGRBbGlnblwiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tNSBjb2wtbWQtNSBjb250cm9sLWxhYmVsXCI+UGljayBIZWFkZXIgVGV4dCBDb2xvcjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS03IGNvbC1tZC03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBzdHlsZT1cIndpZHRoOiA1MHB4XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgcHVsbC1sZWZ0XCIgcmVxdWlyZWQgZGF0YS1iaW5kPVwidmFsdWU6IGhlYWRlckZvbnRDb2xvclwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHN0eWxlPVwid2lkdGg6IDEwMHB4XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgcHVsbC1sZWZ0XCIgcmVxdWlyZWQgZGF0YS1iaW5kPVwidmFsdWU6IGhlYWRlckZvbnRDb2xvclwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIHB1bGwtbGVmdFwiIHRpdGxlPVwiQXBwbHkgdG8gYWxsIGNvbHVtbnNcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXthcHBseUFsbEhlYWRlckZvbnRDb2xvcighYXBwbHlBbGxIZWFkZXJGb250Q29sb3IoKSk7IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmFcIiBkYXRhLWJpbmQ9XCJjc3M6IGFwcGx5QWxsSGVhZGVyRm9udENvbG9yKCkgPyAnZmEtY2hlY2snIDogJ2ZhLXBhc3RlJ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS01IGNvbC1tZC01IGNvbnRyb2wtbGFiZWxcIj5QaWNrIEhlYWRlciBCYWNrZ3JvdW5kIENvbG9yPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTcgY29sLW1kLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIHN0eWxlPVwid2lkdGg6IDUwcHhcIiBjbGFzcz1cImZvcm0tY29udHJvbCBwdWxsLWxlZnRcIiByZXF1aXJlZCBkYXRhLWJpbmQ9XCJ2YWx1ZTogaGVhZGVyQmFja0NvbG9yXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgc3R5bGU9XCJ3aWR0aDogMTAwcHhcIiBjbGFzcz1cImZvcm0tY29udHJvbCBwdWxsLWxlZnRcIiByZXF1aXJlZCBkYXRhLWJpbmQ9XCJ2YWx1ZTogaGVhZGVyQmFja0NvbG9yXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gcHVsbC1sZWZ0XCIgdGl0bGU9XCJBcHBseSB0byBhbGwgY29sdW1uc1wiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpe2FwcGx5QWxsSGVhZGVyQmFja0NvbG9yKCFhcHBseUFsbEhlYWRlckJhY2tDb2xvcigpKTsgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYVwiIGRhdGEtYmluZD1cImNzczogYXBwbHlBbGxIZWFkZXJCYWNrQ29sb3IoKSA/ICdmYS1jaGVjaycgOiAnZmEtcGFzdGUnXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTUgY29sLW1kLTUgY29udHJvbC1sYWJlbFwiPlBpY2sgVGV4dCBDb2xvcjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS03IGNvbC1tZC03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBzdHlsZT1cIndpZHRoOiA1MHB4XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgcHVsbC1sZWZ0XCIgcmVxdWlyZWQgZGF0YS1iaW5kPVwidmFsdWU6IGZvbnRDb2xvclwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHN0eWxlPVwid2lkdGg6IDEwMHB4XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgcHVsbC1sZWZ0XCIgZGF0YS1iaW5kPVwidmFsdWU6IGZvbnRDb2xvclwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIHB1bGwtbGVmdFwiIHRpdGxlPVwiQXBwbHkgdG8gYWxsIGNvbHVtbnNcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXthcHBseUFsbEZvbnRDb2xvcighYXBwbHlBbGxGb250Q29sb3IoKSk7IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmFcIiBkYXRhLWJpbmQ9XCJjc3M6IGFwcGx5QWxsRm9udENvbG9yKCkgPyAnZmEtY2hlY2snIDogJ2ZhLXBhc3RlJ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS01IGNvbC1tZC01IGNvbnRyb2wtbGFiZWxcIj5QaWNrIEJhY2tncm91bmQgQ29sb3I8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNyBjb2wtbWQtN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgc3R5bGU9XCJ3aWR0aDogNTBweFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHB1bGwtbGVmdFwiIHJlcXVpcmVkIGRhdGEtYmluZD1cInZhbHVlOiBiYWNrQ29sb3JcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBzdHlsZT1cIndpZHRoOiAxMDBweFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHB1bGwtbGVmdFwiIGRhdGEtYmluZD1cInZhbHVlOiBiYWNrQ29sb3JcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBwdWxsLWxlZnRcIiB0aXRsZT1cIkFwcGx5IHRvIGFsbCBjb2x1bW5zXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCl7YXBwbHlBbGxCYWNrQ29sb3IoIWFwcGx5QWxsQmFja0NvbG9yKCkpOyB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhXCIgZGF0YS1iaW5kPVwiY3NzOiBhcHBseUFsbEJhY2tDb2xvcigpID8gJ2ZhLWNoZWNrJyA6ICdmYS1wYXN0ZSdcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tNSBjb2wtbWQtNSBjb250cm9sLWxhYmVsXCI+Q2hvb3NlIFdpZHRoIChsZWF2ZSBibGFuayBmb3IgYXV0byk8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNyBjb2wtbWQtN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJlcXVpcmVkIGRhdGEtYmluZD1cInZhbHVlOiBmaWVsZFdpZHRoXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3ggcHVsbC1sZWZ0XCIgc3R5bGU9XCJwYWRkaW5nLXRvcDogNXB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBoZWFkZXJGb250Qm9sZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZSBIZWFkZXIgVGV4dCBCb2xkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gcHVsbC1sZWZ0XCIgdGl0bGU9XCJBcHBseSB0byBhbGwgY29sdW1uc1wiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpe2FwcGx5QWxsSGVhZGVyQm9sZCghYXBwbHlBbGxIZWFkZXJCb2xkKCkpOyB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhXCIgZGF0YS1iaW5kPVwiY3NzOiBhcHBseUFsbEhlYWRlckJvbGQoKSA/ICdmYS1jaGVjaycgOiAnZmEtcGFzdGUnXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3ggcHVsbC1sZWZ0XCIgc3R5bGU9XCJwYWRkaW5nLXRvcDogNXB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBmb250Qm9sZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZSBUZXh0IEJvbGRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBwdWxsLWxlZnRcIiB0aXRsZT1cIkFwcGx5IHRvIGFsbCBjb2x1bW5zXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCl7YXBwbHlBbGxCb2xkKCFhcHBseUFsbEJvbGQoKSk7IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmFcIiBkYXRhLWJpbmQ9XCJjc3M6IGFwcGx5QWxsQm9sZCgpID8gJ2ZhLWNoZWNrJyA6ICdmYS1wYXN0ZSdcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIiBkYXRhLWJpbmQ9XCJpZjogJHBhcmVudC51c2VTdG9yZWRQcm9jKCkgfHwgJHBhcmVudC5SZXBvcnRUeXBlKCkgPT0gJ0xpc3QnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3ggcHVsbC1sZWZ0XCIgc3R5bGU9XCJwYWRkaW5nLXRvcDogNXB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBjaGVja091dGVyR3JvdXBcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dGVyIEdyb3VwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWRhbmdlclwiIGRhdGEtYmluZD1cImNsaWNrOiBjYW5jZWxGaWVsZE9wdGlvbnNcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IHNhdmVGaWVsZE9wdGlvbnNcIj5TYXZlIENoYW5nZXM8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9zY3JpcHQ+XHJcblxyXG48c2NyaXB0IHR5cGU9XCJ0ZXh0L2h0bWxcIiBpZD1cInJlcG9ydC1saW5rLWVkaXRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIiBzdHlsZT1cIm1heC13aWR0aDogNzUwcHg7XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIiBkYXRhLWJpbmQ9XCJ3aXRoOiBlZGl0TGlua0ZpZWxkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+U2V0dXAgTGluayBGaWVsZDwvaDU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBuZWVkcy12YWxpZGF0aW9uXCIgZGF0YS1iaW5kPVwid2l0aDogbGlua0ZpZWxkSXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTUgY29sLW1kLTUgY29udHJvbC1sYWJlbFwiPlRoaXMgZmllbGQgd2lsbCBsaW5rIHRvPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTcgY29sLW1kLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJlcXVpcmVkIGRhdGEtYmluZD1cIm9wdGlvbnM6IGxpbmtUeXBlcywgdmFsdWU6IHNlbGVjdGVkTGlua1R5cGVcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogTGlua3NUb1JlcG9ydFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tNSBjb2wtbWQtNSBjb250cm9sLWxhYmVsXCI+TGluayB0byB0aGlzIFJlcG9ydDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNyBjb2wtbWQtN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJlcXVpcmVkIGRhdGEtYmluZD1cIm9wdGlvbnM6ICRwYXJlbnRDb250ZXh0LiRwYXJlbnQuU2F2ZWRSZXBvcnRzLCBvcHRpb25zVGV4dDogJ3JlcG9ydE5hbWUnLCBvcHRpb25zVmFsdWU6ICdyZXBvcnRJZCcsIHZhbHVlOiBMaW5rZWRUb1JlcG9ydElkLCBvcHRpb25zQ2FwdGlvbjogJ0Nob29zZSB0aGUgUmVwb3J0IHRvIGxpbmsgdG8nXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImlmOiBMaW5rZWRUb1JlcG9ydElkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBTZW5kQXNGaWx0ZXJQYXJhbWV0ZXJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VuZCBmaWVsZCB2YWx1ZSBhcyBSZXBvcnQgRmlsdGVyIFBhcmFtZXRlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiIGRhdGEtYmluZD1cImlmOiBTZW5kQXNGaWx0ZXJQYXJhbWV0ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTUgY29sLW1kLTUgY29udHJvbC1sYWJlbFwiPkxpbmsgdG8gdGhpcyBSZXBvcnQgRmlsdGVyPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS03IGNvbC1tZC03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcmVxdWlyZWQgZGF0YS1iaW5kPVwib3B0aW9uczogYWxsRmllbGRzLCBvcHRpb25zVGV4dDogJ2ZpZWxkTmFtZScsIG9wdGlvbnNWYWx1ZTogJ2ZpZWxkSWQnLCB2YWx1ZTogU2VsZWN0ZWRGaWx0ZXJJZCwgb3B0aW9uc0NhcHRpb246ICdDaG9vc2UgdGhlIEZpZWxkIHRvIEZpbHRlciBieSB2YWx1ZSdcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWZub3Q6IExpbmtzVG9SZXBvcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTUgY29sLW1kLTUgY29udHJvbC1sYWJlbFwiPkxpbmsgdG8gdGhpcyBVUkw8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTcgY29sLW1kLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcmVxdWlyZWQgcGxhY2Vob2xkZXI9XCJFbnRlciBhIHVybCB0byBvcGVuXCIgZGF0YS1iaW5kPVwidmFsdWU6IExpbmtUb1VybFwiIHRpdGxlPVwiVmFsaWQgVVJMIG5lZWRzIHRvIHN0YXJ0IHdpdGggaHR0cDovLyBvciBodHRwczovL1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IFNlbmRBc1F1ZXJ5UGFyYW1ldGVyXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbmQgZmllbGQgdmFsdWUgYXMgUXVlcnkgUGFyYW1ldGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCIgZGF0YS1iaW5kPVwiaWY6IFNlbmRBc1F1ZXJ5UGFyYW1ldGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS01IGNvbC1tZC01IGNvbnRyb2wtbGFiZWxcIj5QYXJhbWV0ZXIgTmFtZSB0byB1c2U8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTcgY29sLW1kLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcmVxdWlyZWQgcGxhY2Vob2xkZXI9XCJFbnRlciBwYXJhbWV0ZXIgbmFtZSB0byBzZW5kIHZhbHVlIGFzXCIgZGF0YS1iaW5kPVwidmFsdWU6IFF1ZXJ5UGFyYW1ldGVyTmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWRhbmdlclwiIGRhdGEtYmluZD1cImNsaWNrOiByZW1vdmVMaW5rRmllbGRcIj5SZW1vdmUgTGluazwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogc2F2ZUxpbmtGaWVsZFwiPlNhdmUgQ2hhbmdlczwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L3NjcmlwdD5cclxuXHJcbjxzY3JpcHQgdHlwZT1cInRleHQvaHRtbFwiIGlkPVwicmVwb3J0LWRlc2lnbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cIm15TW9kYWxMYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiTmVlZCBoZWxwIHNldHRpbmcgdXAgYSByZXBvcnQ/XCIgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cImh0dHBzOi8vZG90bmV0cmVwb3J0LmNvbS9ibG9ncy9kb2NzL2Rlc2lnbmluZy1yZXBvcnRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtcXVlc3Rpb24tY2lyY2xlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYT5EZXNpZ24geW91ciBSZXBvcnRcclxuICAgICAgICAgICAgICAgIDwvaDU+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIj48c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPjxzcGFuIGNsYXNzPVwic3Itb25seVwiPkNsb3NlPC9zcGFuPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgbmVlZHMtdmFsaWRhdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGg1PjxzcGFuIGNsYXNzPVwiZmEgZmEtZmlsZVwiPjwvc3Bhbj4mbmJzcDtDaG9vc2UgUmVwb3J0IFR5cGU8L2g1PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yIGNvbC1zbS00IGNvbC14cy02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLWJveFwiIHRhYmluZGV4PVwiMFwiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpeyBzZXRSZXBvcnRUeXBlKCdMaXN0Jyk7IH0sIGNzczoge2FjdGl2ZTogUmVwb3J0VHlwZSgpPT0nTGlzdCd9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS0yeCBmYS1saXN0LWFsdFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5MaXN0PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTIgY29sLXNtLTQgY29sLXhzLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b24tYm94XCIgdGFiaW5kZXg9XCIwXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCl7IHNldFJlcG9ydFR5cGUoJ1N1bW1hcnknKTsgfSwgY3NzOiB7YWN0aXZlOiBSZXBvcnRUeXBlKCk9PSdTdW1tYXJ5J31cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLTJ4IGZhLXRhYmxlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlN1bW1hcnk8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMiBjb2wtc20tNCBjb2wteHMtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1ib3hcIiB0YWJpbmRleD1cIjBcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXsgc2V0UmVwb3J0VHlwZSgnQmFyJyk7IH0sIGNzczoge2FjdGl2ZTogUmVwb3J0VHlwZSgpPT0nQmFyJ31cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLTJ4IGZhLWJhci1jaGFydFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5CYXI8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMiBjb2wtc20tNCBjb2wteHMtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1ib3hcIiB0YWJpbmRleD1cIjBcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXsgc2V0UmVwb3J0VHlwZSgnUGllJyk7IH0sIGNzczoge2FjdGl2ZTogUmVwb3J0VHlwZSgpPT0nUGllJ31cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLTJ4IGZhLXBpZS1jaGFydFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5QaWU8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTIgY29sLXNtLTQgY29sLXhzLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b24tYm94XCIgdGFiaW5kZXg9XCIwXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCl7IHNldFJlcG9ydFR5cGUoJ0xpbmUnKTsgfSwgY3NzOiB7YWN0aXZlOiBSZXBvcnRUeXBlKCk9PSdMaW5lJ31cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLTJ4IGZhLWxpbmUtY2hhcnRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+TGluZTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yIGNvbC1zbS00IGNvbC14cy02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLWJveFwiIHRhYmluZGV4PVwiMFwiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpeyBzZXRSZXBvcnRUeXBlKCdNYXAnKTsgfSwgY3NzOiB7YWN0aXZlOiBSZXBvcnRUeXBlKCkuaW5kZXhPZignTWFwJyk9PTB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS0yeCBmYS1nbG9iZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5NYXA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMiBjb2wtc20tNCBjb2wteHMtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1ib3hcIiB0YWJpbmRleD1cIjBcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXsgc2V0UmVwb3J0VHlwZSgnU2luZ2xlJyk7IH0sIGNzczoge2FjdGl2ZTogUmVwb3J0VHlwZSgpPT0nU2luZ2xlJ31cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLTJ4IGZhLXdpbmRvdy1tYXhpbWl6ZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5XaWRnZXQ8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMiBjb2wtc20tNCBjb2wteHMtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1ib3hcIiB0YWJpbmRleD1cIjBcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXsgc2V0UmVwb3J0VHlwZSgnUGl2b3QnKTsgfSwgY3NzOiB7YWN0aXZlOiBSZXBvcnRUeXBlKCk9PSdQaXZvdCd9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS0yeCBmYS1yYW5kb21cIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+VHJhbnNwb3NlPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cInB1bGwtbGVmdFwiPjxzcGFuIGNsYXNzPVwiZmEgZmEtZGF0YWJhc2VcIj48L3NwYW4+Jm5ic3A7Q2hvb3NlIERhdGEgZm9yIFJlcG9ydDwvaDU+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtcmlnaHRcIiByb2xlPVwiZ3JvdXBcIiBkYXRhLWJpbmQ9XCJpZjogUmVwb3J0SUQoKSA8PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnkgYWN0aXZlXCIgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDBweDtcIiB0aXRsZT1cIllvdSBjYW4gY2hhbmdlIHRoZSBEYXRhIHNvdXJjZSBvbmx5IHdoZW4gY3JlYXRpbmcgYSBuZXcgcmVwb3J0LCBjaGFuZ2luZyB0aGlzIHdpbGwgY2xlYXIgYWxsIHNlbGVjdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwiZGF0YW9wdGlvblwiIGlkPVwidGFibGVcIiBjaGVja2VkIGRhdGEtYmluZD1cImNoZWNrZWQ6IHVzZVN0b3JlZFByb2MsIGNoZWNrZWRWYWx1ZTogZmFsc2VcIj4gRHluYW1pY1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cImRhdGFvcHRpb25cIiBpZD1cInByb2NcIiB2YWx1ZT1cIjFcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiB1c2VTdG9yZWRQcm9jLCBjaGVja2VkVmFsdWU6IHRydWVcIj4gUHJlZGVmaW5lZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbGVhcmZpeFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZGF0YS1iaW5kPVwib3B0aW9uczogUHJvY3MsIG9wdGlvbnNDYXB0aW9uOiAnQ2hvb3NlIFNlY3Rpb24uLi4nLCBvcHRpb25zVGV4dDogJ0Rpc3BsYXlOYW1lJywgdmFsdWU6IFNlbGVjdGVkUHJvYywgZGlzYWJsZTogaXNGb3JtdWxhRmllbGQsIHZpc2libGU6IHVzZVN0b3JlZFByb2NcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJvcHRpb25zOiBUYWJsZXMsIG9wdGlvbnNDYXB0aW9uOiAnQ2hvb3NlIFNlY3Rpb24uLi4nLCBvcHRpb25zVGV4dDogJ3RhYmxlTmFtZScsIHZhbHVlOiBTZWxlY3RlZFRhYmxlLCBkaXNhYmxlOiBpc0Zvcm11bGFGaWVsZCwgaGlkZGVuOiB1c2VTdG9yZWRQcm9jXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgZGF0YS1iaW5kPVwiZGlzYWJsZTogaXNGb3JtdWxhRmllbGQsIGhpZGRlbjogdXNlU3RvcmVkUHJvY1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ3aXRoOiB0ZXh0UXVlcnkuc2VhcmNoRmllbGRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBpZD1cInNlYXJjaC1maWVsZFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZGF0YS1iaW5kPVwic2VsZWN0Mjoge3BsYWNlaG9sZGVyOiAnT3IgU2VhcmNoIGZvciBhIERhdGEgRmllbGQuLi4nLCBhamF4OiB7IHVybDogdXJsLCBkYXRhVHlwZTogJ2pzb24nLCBkYXRhOiBxdWVyeSwgcHJvY2Vzc1Jlc3VsdHM6IHByb2Nlc3NSZXN1bHRzLCBoZWFkZXJzOiBoZWFkZXJzIH0sIG1pbmltdW1JbnB1dExlbmd0aDogMiwgYWxsb3dDbGVhcjogdHJ1ZSB9LCB2YWx1ZTogc2VsZWN0ZWRPcHRpb25cIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGVkLWRpdlwiIGRhdGEtYmluZD1cInZpc2libGU6IENob29zZUZpZWxkcygpLmxlbmd0aD4wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic21hbGwgcHVsbC1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hlY2sgdGhlIGZpZWxkcyB5b3Ugd291bGQgbGlrZSB0byB1c2UgaW4gdGhlIFJlcG9ydFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1yaWdodCBidG4tdG9vbGJhclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJidG4gYnRuLXNtXCIgdGl0bGU9XCJDdXN0b20gRmllbGQgdXNpbmcgRm9ybXVsYVwiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpe2lzRm9ybXVsYUZpZWxkKCFpc0Zvcm11bGFGaWVsZCgpKX0sIHRleHQ6IGlzRm9ybXVsYUZpZWxkKCk/ICdDYW5jZWwnOiAnQ3VzdG9taXplJywgY3NzOiB7J2J0bi1wcmltYXJ5JzogIWlzRm9ybXVsYUZpZWxkKCksICdidG4tZGFuZ2VyJzogaXNGb3JtdWxhRmllbGR9XCI+PC9hPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgYnRuLXNtXCIgZGF0YS1iaW5kPVwiY2xpY2s6IE1vdmVBbGxGaWVsZHMsIHZpc2libGU6ICFpc0Zvcm11bGFGaWVsZCgpXCI+U2VsZWN0IGFsbDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgYnRuLXNtXCIgZGF0YS1iaW5kPVwiY2xpY2s6IFJlbW92ZVNlbGVjdGVkRmllbGRzLCB2aXNpYmxlOiAhaXNGb3JtdWxhRmllbGQoKVwiPlJlbW92ZSBhbGw8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgY29udGFpbmVyLWZsdWlkXCIgZGF0YS1iaW5kPVwiZm9yZWFjaDogQ2hvb3NlRmllbGRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTQgY29sLXhzLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkSW5BcnJheToge2FycmF5OiAkcGFyZW50LmlzRm9ybXVsYUZpZWxkKCkgPyAkcGFyZW50LmZvcm11bGFGaWVsZHMgOiAkcGFyZW50LlNlbGVjdGVkRmllbGRzLCB2YWx1ZTogJGRhdGF9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogZmllbGROYW1lXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IGxhc3RQaWNrZWRGaWVsZCgpICYmIGxhc3RQaWNrZWRGaWVsZCgpLmZpZWxkVHlwZSA9PSAnSnNvbidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDY+U2VsZWN0IERhdGEgRmllbGRzIGZyb20gPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogbGFzdFBpY2tlZEZpZWxkKCkuZmllbGROYW1lXCI+PC9zcGFuPjwvaDY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGNvbnRhaW5lci1mbHVpZFwiIGRhdGEtYmluZD1cImZvcmVhY2g6IGpzb25GaWVsZHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS00IGNvbC14cy02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkSW5BcnJheToge2FycmF5OiAkcGFyZW50LlNlbGVjdGVkRmllbGRzLCB2YWx1ZTogJGRhdGF9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBqc29uQ29sdW1uTmFtZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogaXNGb3JtdWxhRmllbGRcIiBpZD1cImN1c3RvbS1maWVsZC1kZXNpZ25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBwdWxsLXJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiIHRpdGxlPVwiU2F2ZSBDdXN0b20gRm9ybXVsYSBGaWVsZFwiIGRhdGEtYmluZD1cImNsaWNrOiBzYXZlRm9ybXVsYUZpZWxkLCB2aXNpYmxlOiBpc0Zvcm11bGFGaWVsZFwiPlNhdmU8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIGNsYXNzPVwiYnRuIGJ0bi1zbVwiIHRpdGxlPVwiQ3VzdG9tIEZpZWxkIHVzaW5nIEZvcm11bGFcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXtpc0Zvcm11bGFGaWVsZCghaXNGb3JtdWxhRmllbGQoKSl9LCB0ZXh0OiBpc0Zvcm11bGFGaWVsZCgpPyAnQ2FuY2VsJzogJ0N1c3RvbWl6ZScsIGNzczogeydidG4tcHJpbWFyeSc6ICFpc0Zvcm11bGFGaWVsZCgpLCAnYnRuLWRhbmdlcic6IGlzRm9ybXVsYUZpZWxkfVwiPjwvYT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIHBhZGRlZC1kaXZcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBDaG9vc2VGaWVsZHMoKS5sZW5ndGg+MCAmJiBpc0Zvcm11bGFGaWVsZCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBhcmUgbm93IGNyZWF0aW5nIGEgQ3VzdG9taXplZCBGaWVsZC4gQ2hlY2sgRmllbGRzIHlvdSB3YW50IHRvIHVzZSBpbiB0aGUgY2FsY3VsYXRpb24sIHRoZW4gY2hvb3NlIHRoZSBvcGVyYXRpb25zIHlvdSB3YW50IHRvIHBlcmZvcm0sIGFuZCBjbGljayBcIlNhdmVcIiBvbiB0aGUgcmlnaHQgYWJvdmUgdG8gYWRkIHlvdXIgQ3VzdG9tIGZpZWxkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgQ3VzdG9tIEZpZWxkIG11c3QgYmUgY2hvc2VuIGluIHdpdGhpbiB0aGUgc2FtZSBTZWN0aW9uIGFuZCB0aGVpciBkYXRhIHR5cGVzIG11c3QgbWF0Y2guXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTYgc21hbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldHVwIHlvdXIgRm9ybXVsYSBmb3IgY2FsY3VsYXRpbmcgdGhpcyBGaWVsZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02IHJpZ2h0LWFsaWduXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgYnRuLXNtXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGFkZEZvcm11bGFQYXJlbnRoZXNlc1wiPkFkZCAoICk8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgYnRuLXNtXCIgdGl0bGU9XCJBZGQgYSBDb25zdGFudCBWYWx1ZVwiIGRhdGEtYmluZD1cImNsaWNrOiBhZGRGb3JtdWxhQ29uc3RhbnRWYWx1ZVwiPkFkZCBWYWx1ZTwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSBidG4tc21cIiBkYXRhLWJpbmQ9XCJjbGljazogY2xlYXJGb3JtdWxhRmllbGRcIj5DbGVhcjwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCIgZGF0YS1iaW5kPVwiaWY6IGZvcm11bGFPbmx5SGFzRGF0ZUZpZWxkc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBEYXRlcyBGaWVsZCBjYWxjdWxhdGlvbiwgeW91IGNhbiBvbmx5IHN1YnN0cmFjdCBkYXRlIGZpZWxkcyBhbmQgZGlzcGxheSB0aGUgcmVzdWx0IGFzIGRheXMsIGhvdXJzLCBtaW51dGVzIG9yIHNlY29uZHMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0yIGNvbnRyb2wtbGFiZWxcIj5GaWVsZCBMYWJlbDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiIGRhdGEtYmluZD1cInZhbHVlOiBmb3JtdWxhRmllbGRMYWJlbFwiIHJlcXVpcmVkIHBsYWNlaG9sZGVyPVwiQ3VzdG9tIEZpZWxkIExhYmVsXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0yIGNvbnRyb2wtbGFiZWxcIj5EYXRhIEZvcm1hdDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCIgZGF0YS1iaW5kPVwidmFsdWU6IGZvcm11bGFEYXRhRm9ybWF0XCIgcmVxdWlyZWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBpZm5vdDogZm9ybXVsYU9ubHlIYXNEYXRlRmllbGRzIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+U3RyaW5nPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5JbnRlZ2VyPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5EZWNpbWFsPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5DdXJyZW5jeTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ga28gaWY6IGZvcm11bGFPbmx5SGFzRGF0ZUZpZWxkcyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPkRheXM8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPkhvdXJzPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5NaW51dGVzPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5TZWNvbmRzPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCIgZGF0YS1iaW5kPVwidmlzaWJsZTogZm9ybXVsYURhdGFGb3JtYXQoKSA9PSAnRGVjaW1hbCcgfHwgZm9ybXVsYURhdGFGb3JtYXQoKSA9PSAnQ3VycmVuY3knXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0yIGNvbnRyb2wtbGFiZWxcIj5Sb3VuZCB0byBEZWNpbWFsIFBsYWNlczwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogZm9ybXVsYURlY2ltYWxQbGFjZXNcIiBwbGFjZWhvbGRlcj1cIkNob29zZSBEZWNpbWFsIHBsYWNlcyAobGVhdmUgYmxhbmsgdG8gbm90IHVzZSByb3VuZGluZylcIiB0aXRsZT1cIkNob29zZSBEZWNpbWFsIHBsYWNlcyAobGVhdmUgYmxhbmsgdG8gbm90IHVzZSByb3VuZGluZylcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0yIGNvbnRyb2wtbGFiZWxcIj5GaWVsZCBGb3JtdWxhPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJmb3JlYWNoOiBmb3JtdWxhRmllbGRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwicHVsbC1sZWZ0XCIgZGF0YS1iaW5kPVwidmlzaWJsZTogc2V0dXBGb3JtdWxhLmlzUGFyZW50aGVzZXNTdGFydFwiIHN0eWxlPVwibWFyZ2luLXRvcDogMDtcIj4oPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiAhc2V0dXBGb3JtdWxhLmlzUGFyZW50aGVzZXNTdGFydCgpICYmICFzZXR1cEZvcm11bGEuaXNQYXJlbnRoZXNlc0VuZCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gcHVsbC1sZWZ0XCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTVweDsgcGFkZGluZzogNXB4IDE1cHhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IGZpZWxkTmFtZSwgdmlzaWJsZTogIXNldHVwRm9ybXVsYS5pc0NvbnN0YW50VmFsdWUoKVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IHNldHVwRm9ybXVsYS5pc0NvbnN0YW50VmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZGF0YS1iaW5kPVwidmFsdWU6IHNldHVwRm9ybXVsYS5jb25zdGFudFZhbHVlXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCIgcmVxdWlyZWQgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJwdWxsLWxlZnRcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBzZXR1cEZvcm11bGEuaXNQYXJlbnRoZXNlc0VuZFwiIHN0eWxlPVwibWFyZ2luLXRvcDogMDtcIj4pPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1sZWZ0XCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTVweDtcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAkcGFyZW50LnNob3dGb3JtdWxhT3BlcmF0aW9uKCRpbmRleCgpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiIHN0eWxlPVwibWF4LXdpZHRoOiA1MHB4O1wiIGRhdGEtYmluZD1cInZhbHVlOiBzZXR1cEZvcm11bGEuZm9ybXVsYU9wZXJhdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBpZjogISRwYXJlbnQuZm9ybXVsYU9ubHlIYXNEYXRlRmllbGRzKCkgfHwgKCRwYXJlbnQuZm9ybXVsYU9ubHlIYXNEYXRlRmllbGRzKCkgJiYgJHBhcmVudC5pc0NvbnN0YW50T3BlcmF0aW9uKCRpbmRleCgpKSkgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPis8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj4tPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGlmOiBbJ0ludGVnZXInLCdNb25leScsJ0Zsb2F0JywnRG91YmxlJywnRGVjaW1hbCcsJ0N1cnJlbmN5J10uaW5kZXhPZigkcGFyZW50LmZvcm11bGFEYXRhRm9ybWF0KCkpICE9IC0xIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj4qPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPi88L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsZWFyZml4XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogU2VsZWN0ZWRGaWVsZHMoKS5sZW5ndGg+MFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aHIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGg1PjxzcGFuIGNsYXNzPVwiZmEgZmEtdGFibGVcIj48L3NwYW4+Jm5ic3A7U2VsZWN0ZWQgZGF0YSBmb3IgdGhlIFJlcG9ydDwvaDU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInZpc2libGU6IFJlcG9ydFR5cGUoKT09J0JhcidcIiBjbGFzcz1cImNhcmQgY2FyZC1ib2R5XCIgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiAxNXB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1saWdodGJ1bGItbyBmYS0yeFwiPjwvc3Bhbj4mbmJzcDtGb3IgQmFyIEdyYXBoLCB0aGUgZmlyc3QgZmllbGQgYmVsb3cgd2lsbCBzaG93IG9uIHRoZSB4LWF4aXMuIEFsbCBvdGhlciBmaWVsZHMgd2lsbCBzaG93IG9uIHktYXhpcywgYnV0IHRoZXkgbXVzdCBiZSBudW1lcmljLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3ggY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogYmFyQ2hhcnRIb3Jpem9udGFsXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3Jpem9udGFsIEJhciBDaGFydFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveCBjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBiYXJDaGFydFN0YWNrZWRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrZWQgQmFyIENoYXJ0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm9cIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBSZXBvcnRUeXBlKCk9PSdMaW5lJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtbGlnaHRidWxiLW8gZmEtMnhcIj48L3NwYW4+Jm5ic3A7Rm9yIExpbmUgR3JhcGgsIHRoZSBmaXJzdCBmaWVsZCBiZWxvdyB3aWxsIHNob3cgb24gdGhlIHgtYXhpcyBhbmQgaXQgbmVlZHMgdG8gYmUgbnVtZXJpYy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm9cIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBSZXBvcnRUeXBlKCk9PSdQaXZvdCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWxpZ2h0YnVsYi1vIGZhLTJ4XCI+PC9zcGFuPiZuYnNwO0ZvciBUcmFuc3Bvc2UsIHRoZSBmaXJzdCBmaWVsZCBiZWxvdyB3aWxsIGJlIHVzZWQgdG8gUGl2b3QvVHJhbnNwb3NlIHRoZSByb3dzIGFzIGNvbHVtbnMsIGFuZCBpdCBtdXN0IGJlIGdyb3VwZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidmlzaWJsZTogUmVwb3J0VHlwZSgpPT0nTWFwJ1wiIGNsYXNzPVwiY2FyZCBjYXJkLWJvZHlcIiBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDE1cHhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWxpZ2h0YnVsYi1vIGZhLTJ4XCI+PC9zcGFuPiZuYnNwO0ZvciBNYXAgR3JhcGgsIHRoZSBmaXJzdCBmaWVsZCBiZWxvdyBoYXMgdG8gYmUgYSBSZWdpb24sIGxpa2UgYSBDb3VudHJ5LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMiBjb250cm9sLWxhYmVsXCI+TWFwIERpc3BsYXk8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCIgZGF0YS1iaW5kPVwib3B0aW9uczogJHBhcmVudC5tYXBSZWdpb25zLCB2YWx1ZTogbWFwUmVnaW9uXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwXCIgZGF0YS1iaW5kPVwic29ydGFibGU6IHsgZGF0YTogU2VsZWN0ZWRGaWVsZHMsIG9wdGlvbnM6IHsgaGFuZGxlOiAnLnNvcnRhYmxlJywgY3Vyc29yOiAnbW92ZScsIHBsYWNlaG9sZGVyOiAnZHJvcC1oaWdobGlnaHQnIH0sIHN0cmF0ZWd5TW92ZTogdHJ1ZSB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWNvbHVtbnNcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogc2VsZWN0ZWRGaWVsZE5hbWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogaXNGb3JtdWxhRmllbGQoKSA/ICcoJyArIGZpZWxkRm9ybWF0KCkgKyAnKScgOiAnJ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAhJHBhcmVudC5pc0ZpZWxkVmFsaWRGb3JZQXhpcygkaW5kZXgoKSwgZmllbGRUeXBlLCBzZWxlY3RlZEFnZ3JlZ2F0ZSgpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWRhbmdlclwiIGRhdGEtYmluZD1cInZpc2libGU6ICFncm91cEluR3JhcGgoKVwiPldpbGwgbm90IHNob3cgaW4gPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogJHBhcmVudC5SZXBvcnRUeXBlXCI+PC9zcGFuPkNoYXJ0PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLXJpZ2h0XCIgc3R5bGU9XCJtYXJnaW4tdG9wOiAtNXB4O1wiIGRhdGEtYmluZD1cImlmOiAkcGFyZW50LkFnZ3JlZ2F0ZVJlcG9ydCgpICYmICEkcGFyZW50LnVzZVN0b3JlZFByb2MoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiIGRhdGEtYmluZD1cIm9wdGlvbnM6ICRwYXJlbnQuY2FuRHJpbGxkb3duKCkgJiYgJGluZGV4KCk+MCA/IGZpZWxkQWdncmVnYXRlV2l0aERyaWxsZG93biA6IGZpZWxkQWdncmVnYXRlLCB2YWx1ZTogc2VsZWN0ZWRBZ2dyZWdhdGVcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic29ydGFibGUgcHVsbC1yaWdodFwiIHN0eWxlPVwicGFkZGluZy1yaWdodDogMTVweDtcIiBkYXRhLWJpbmQ9XCJpZm5vdDogJHBhcmVudC51c2VTdG9yZWRQcm9jXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtYXJyb3dzIFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiRHJhZyB0byByZW9yZGVyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLXJpZ2h0XCIgc3R5bGU9XCJwYWRkaW5nLXJpZ2h0OiAxNXB4O1wiIGRhdGEtYmluZD1cImlmbm90OiAkcGFyZW50LnVzZVN0b3JlZFByb2NcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS10cmFzaC1vXCIgdGl0bGU9XCJDYW5ub3QgRGVsZXRlIFJlcXVpcmVkIEZpbHRlclwiIGRhdGEtYmluZD1cInZpc2libGU6IGZvcmNlRmlsdGVyRm9yVGFibGVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtdHJhc2hcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjtcIiBhcmlhLWhpZGRlbj1cInRydWVcIiB0aXRsZT1cIkRlbGV0ZSB0aGlzIEZpZWxkXCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRwYXJlbnQuUmVtb3ZlRmllbGQsIGhpZGRlbjogZm9yY2VGaWx0ZXJGb3JUYWJsZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1yaWdodFwiIHN0eWxlPVwicGFkZGluZy1yaWdodDogMTVweDtcIiBkYXRhLWJpbmQ9XCJpZm5vdDogJHBhcmVudC51c2VTdG9yZWRQcm9jXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnV0dG9uLWJveCBuby1wYWRkaW5nXCIgdGFiaW5kZXg9XCIwXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCl7IGZpbHRlck9uRmx5KCFmaWx0ZXJPbkZseSgpKTsgfSwgY3NzOiB7YWN0aXZlOiBmaWx0ZXJPbkZseSgpPT10cnVlfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1maWx0ZXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIiB0aXRsZT1cIkZpbHRlciBieSB0aGlzIGZpZWxkIG9uIHRoZSBSZXBvcnRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1yaWdodFwiIHN0eWxlPVwicGFkZGluZy1yaWdodDogMTVweDtcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAkcGFyZW50LlJlcG9ydFR5cGUoKSE9J1Bpdm90J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ1dHRvbi1ib3ggbm8tcGFkZGluZ1wiIHRhYmluZGV4PVwiMFwiIGRhdGEtYmluZD1cImNsaWNrOiB0b2dnbGVEaXNhYmxlLCBjc3M6IHthY3RpdmU6IGRpc2FibGVkKCk9PXRydWV9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWNsb3NlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJEbyBub3QgaW5jbHVkZSBpbiBSZXBvcnRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1yaWdodFwiIHN0eWxlPVwicGFkZGluZy1yaWdodDogMTVweDtcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAkcGFyZW50LlJlcG9ydFR5cGUoKSE9J1Bpdm90JyAmJiAkcGFyZW50LlJlcG9ydFR5cGUoKSE9J0xpc3QnICYmICEkcGFyZW50LnVzZVN0b3JlZFByb2MoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ1dHRvbi1ib3ggbm8tcGFkZGluZ1wiIHRhYmluZGV4PVwiMFwiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpeyBoaWRlSW5EZXRhaWwoIWhpZGVJbkRldGFpbCgpKTsgfSwgY3NzOiB7YWN0aXZlOiBoaWRlSW5EZXRhaWwoKT09dHJ1ZX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtZXllLXNsYXNoXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJIaWRlIGluIERldGFpbHNcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1yaWdodFwiIHN0eWxlPVwicGFkZGluZy1yaWdodDogMTVweDtcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAkcGFyZW50LmlzRmllbGRWYWxpZEZvcllBeGlzKCRpbmRleCgpLCBmaWVsZFR5cGUsIHNlbGVjdGVkQWdncmVnYXRlKCkpICAmJiAkcGFyZW50LmlzQ2hhcnQoKSAmJiAkaW5kZXgoKT4wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnV0dG9uLWJveCBuby1wYWRkaW5nXCIgdGFiaW5kZXg9XCIwXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCl7IGdyb3VwSW5HcmFwaCghZ3JvdXBJbkdyYXBoKCkpOyB9LCBjc3M6IHthY3RpdmU6IGdyb3VwSW5HcmFwaCgpPT1mYWxzZX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtbGluZS1jaGFydFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiSW5jbHVkZSBpbiBzZXJpZXNcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1yaWdodFwiIHN0eWxlPVwicGFkZGluZy1yaWdodDogMTVweDtcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAkcGFyZW50LkluY2x1ZGVTdWJUb3RhbCgpICAmJiAgKFsnSW50JywgJ0RvdWJsZScsICdNb25leScsICdEZWNpbWFsJywgJ0N1cnJlbmN5J10uaW5kZXhPZihmaWVsZFR5cGUpID49IDAgfHwgWydJbnQnLCAnRG91YmxlJywgJ01vbmV5JywgJ0RlY2ltYWwnLCAnQ3VycmVuY3knXS5pbmRleE9mKGZpZWxkRm9ybWF0KCkpID49IDApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnV0dG9uLWJveCBuby1wYWRkaW5nXCIgdGFiaW5kZXg9XCIwXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCl7IGRvbnRTdWJUb3RhbCghZG9udFN1YlRvdGFsKCkpOyB9LCBjc3M6IHthY3RpdmU6IGRvbnRTdWJUb3RhbCgpPT10cnVlfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1wbHVzLWNpcmNsZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiRG9uJ3QgYWRkIHRvIFRvdGFsIHJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLXJpZ2h0XCIgc3R5bGU9XCJwYWRkaW5nLXJpZ2h0OiAxNXB4O1wiIGRhdGEtYmluZD1cInZpc2libGU6ICRwYXJlbnQuUmVwb3J0VHlwZSgpIT0nUGl2b3QnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnV0dG9uLWJveCBuby1wYWRkaW5nXCIgdGFiaW5kZXg9XCIwXCIgZGF0YS1iaW5kPVwiY2xpY2s6IHNldHVwTGlua0ZpZWxkLCBjc3M6IHthY3RpdmU6IGxpbmtGaWVsZCgpPT10cnVlfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1saW5rXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJMaW5rIHRvIGFub3RoZXIgUmVwb3J0IG9yIFVybFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLXJpZ2h0XCIgc3R5bGU9XCJwYWRkaW5nLXJpZ2h0OiAxNXB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ1dHRvbi1ib3ggbm8tcGFkZGluZ1wiIHRhYmluZGV4PVwiMFwiIGRhdGEtYmluZD1cImNsaWNrOiBzZXR1cEZpZWxkT3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1nZWFyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJNb3JlIE9wdGlvbnNcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1yaWdodFwiIHN0eWxlPVwicGFkZGluZy1yaWdodDogMTVweDtcIiBkYXRhLWJpbmQ9XCJpZjogaXNGb3JtdWxhRmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJidXR0b24tYm94IG5vLXBhZGRpbmdcIiB0YWJpbmRleD1cIjBcIiBkYXRhLWJpbmQ9XCJjbGljazogZWRpdEZvcm11bGFGaWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1wZW5jaWxcIiBhcmlhLWhpZGRlbj1cInRydWVcIiB0aXRsZT1cIkVkaXQgRm9ybXVsYSBGaWVsZFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aDU+PHNwYW4gY2xhc3M9XCJmYSBmYS1maWx0ZXJcIj48L3NwYW4+Jm5ic3A7Q2hvb3NlIGZpbHRlcnM8L2g1PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgc3R5bGU9XCJwYWRkaW5nOiAxMHB4IDEwcHg7IG92ZXJmbG93LXg6IGF1dG87XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IHVzZVN0b3JlZFByb2NcIiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZW1wbGF0ZToge25hbWU6ICdmaWx0ZXItcGFyYW1ldGVycyd9XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmbm90OiB1c2VTdG9yZWRQcm9jXCIgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidGVtcGxhdGU6IHtuYW1lOiAnZmlsdGVyLWdyb3VwJ31cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3ggY29sLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IEVkaXRGaWx0ZXJzT25SZXBvcnRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93IHNldHRpbmcgdXAgYW5kIHNhdmluZyBmaWx0ZXJzIG9uIFJlcG9ydFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidmlzaWJsZTogU2F2ZVJlcG9ydFwiIGNsYXNzPVwiY2FyZCBjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aDU+PHNwYW4gY2xhc3M9XCJmYSBmYS1ob3VyZ2xhc3NcIj48L3NwYW4+Jm5ic3A7Q2hvb3NlIFNjaGVkdWxlPC9oNT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cInBhZGRpbmc6IDEwcHggMTBweFwiIGRhdGEtYmluZD1cImlmOiBTYXZlUmVwb3J0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidGVtcGxhdGU6IHtuYW1lOiAncmVwb3J0LXNjaGVkdWxlJ31cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIiBkYXRhLWJpbmQ9XCJpZjogU2F2ZVJlcG9ydFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMiBjb250cm9sLWxhYmVsXCI+UmVwb3J0IE5hbWU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcmVxdWlyZWQgcGxhY2Vob2xkZXI9XCJSZXBvcnQgTmFtZVwiIGRhdGEtYmluZD1cInZhbHVlOiBSZXBvcnROYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMiBjb250cm9sLWxhYmVsXCI+UmVwb3J0IERlc2NyaXB0aW9uPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIiByb3dzPVwiM1wiIHBsYWNlaG9sZGVyPVwiT3B0aW9uYWwgUmVwb3J0IERlc2NyaXB0aW9uXCIgZGF0YS1iaW5kPVwidmFsdWU6IFJlcG9ydERlc2NyaXB0aW9uXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZm5vdDogdXNlU3RvcmVkUHJvY1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0yIGNvbnRyb2wtbGFiZWxcIj5Tb3J0IEJ5PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByZXF1aXJlZCBkYXRhLWJpbmQ9XCJvcHRpb25zOiBTZWxlY3RlZEZpZWxkcywgb3B0aW9uc1RleHQ6ICdzZWxlY3RlZEZpZWxkTmFtZScsIG9wdGlvbnNWYWx1ZTogJ2ZpZWxkSWQnLCB2YWx1ZTogU29ydEJ5RmllbGRcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXNlY29uZGFyeVwiIGRhdGEtYmluZD1cInRleHQ6ICFTb3J0RGVzYygpID8gJ+KWsiBTb3J0IEFzY2VuZGluZycgOiAnU29ydCBEZXNjZW5kaW5nIOKWvCcsIGNsaWNrOiBmdW5jdGlvbigpIHsgU29ydERlc2MoIVNvcnREZXNjKCkpOyByZXR1cm4gZmFsc2U7IH1cIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXNlY29uZGFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiBhZGRTb3J0RmllbGRcIj5BZGQgU29ydCBGaWVsZDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImZvcmVhY2g6IFNvcnRGaWVsZHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0yIGNvbnRyb2wtbGFiZWxcIj4mbmJzcDsmbmJzcDtUaGVuIFNvcnQgQnk8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcmVxdWlyZWQgZGF0YS1iaW5kPVwib3B0aW9uczogJHBhcmVudC5TZWxlY3RlZEZpZWxkcywgb3B0aW9uc1RleHQ6ICdzZWxlY3RlZEZpZWxkTmFtZScsIG9wdGlvbnNWYWx1ZTogJ2ZpZWxkSWQnLCB2YWx1ZTogc29ydEJ5RmllbGRJZFwiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tc2Vjb25kYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IHJlbW92ZVwiPlJlbW92ZSBTb3J0IEZpZWxkPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1zZWNvbmRhcnlcIiBkYXRhLWJpbmQ9XCJ0ZXh0OiAhc29ydERlc2MoKSA/ICfilrIgU29ydCBBc2NlbmRpbmcnIDogJ1NvcnQgRGVzY2VuZGluZyDilrwnLCBjbGljazogZnVuY3Rpb24oKSB7IHNvcnREZXNjKCFzb3J0RGVzYygpKTsgcmV0dXJuIGZhbHNlOyB9XCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1zZWNvbmRhcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogJHBhcmVudC5hZGRTb3J0RmllbGRcIj5BZGQgU29ydCBGaWVsZDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBpc0NoYXJ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBTaG93RGF0YVdpdGhHcmFwaFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaG93IERhdGEgYWxvbmcgd2l0aCBHcmFwaFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cInZpc2libGU6IENhblNhdmVSZXBvcnRzKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IFNhdmVSZXBvcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhdmUgUmVwb3J0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCIgZGF0YS1iaW5kPVwidmlzaWJsZTogU2F2ZVJlcG9ydFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMiBjb250cm9sLWxhYmVsXCI+Q2hvb3NlIEZvbGRlcjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiIGRhdGEtYmluZD1cIm9wdGlvbnM6IEZvbGRlcnMsIG9wdGlvbnNUZXh0OiAnRm9sZGVyTmFtZScsIG9wdGlvbnNWYWx1ZTogJ0lkJywgdmFsdWU6IEZvbGRlcklEXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWZub3Q6IHVzZVN0b3JlZFByb2NcIiBjbGFzcz1cImNhcmQgY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNT48c3BhbiBjbGFzcz1cImZhIGZhLWdlYXJcIj48L3NwYW4+Jm5ic3A7T3RoZXIgU2V0dGluZ3M8L2g1PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwidmlzaWJsZTogUmVwb3J0VHlwZSgpIT0nUGl2b3QnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogSW5jbHVkZVN1YlRvdGFsXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5jbHVkZSBUb3RhbCBSb3dcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJoaWRkZW46IEFnZ3JlZ2F0ZVJlcG9ydFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IFNob3dVbmlxdWVSZWNvcmRzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hvdyBvbmx5IFVuaXF1ZSBSZWNvcmRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwidmlzaWJsZTogUmVwb3J0VHlwZSgpIT0nTGlzdCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBTaG93RXhwYW5kT3B0aW9uXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9uJ3QgU2hvdyBFeHBhbmQgT3B0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogRG9udEV4ZWN1dGVPblJ1blwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdhaXQgdG8gU2VsZWN0IEZpbHRlcnMgYmVmb3JlIFJ1bm5pbmcgUmVwb3J0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94IGNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBtYXhSZWNvcmRzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heCBSZWNvcmRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgZGF0YS1iaW5kPVwiaWY6IG1heFJlY29yZHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBzdHlsZT1cIndpZHRoOiAxNTBweDtcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJlcXVpcmVkIHBsYWNlaG9sZGVyPVwiT25seSB0b3Agbi4uLlwiIGRhdGEtYmluZD1cInZhbHVlOiBPbmx5VG9wLCB2aXNpYmxlOiBtYXhSZWNvcmRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1PjxzcGFuIGNsYXNzPVwiZmEgZmEtcGFpbnQtYnJ1c2hcIj48L3NwYW4+Jm5ic3A7UGljayBSZXBvcnQgRm9ybWF0PC9oNT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiB0YWJsZVN0eWxlcyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tb3B0aW9uXCIgZGF0YS1iaW5kPVwidGl0bGU6ICRkYXRhLm5hbWUsIGNsaWNrOiAkcGFyZW50LnNlbGVjdFN0eWxlLCBjc3M6IHsnZHJvcGRvd24tb3B0aW9uLXNlbGVjdGVkJzogJHBhcmVudC5zZWxlY3RlZFN0eWxlKCkgPT0gJGRhdGEuY29sb3JzY2hlbWV9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW5pLXRhYmxlLXByZXZpZXdcIiBkYXRhLWJpbmQ9XCJmb3JlYWNoOiBuZXcgQXJyYXkoNSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW5pLXRhYmxlLXJvd1wiIGRhdGEtYmluZD1cImZvcmVhY2g6IG5ldyBBcnJheSg1KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW5pLXRhYmxlLWNlbGxcIiBkYXRhLWJpbmQ9XCJzdHlsZTogeyBiYWNrZ3JvdW5kQ29sb3I6ICRwYXJlbnRDb250ZXh0LiRpbmRleCgpID09PSAwID8gJHBhcmVudHNbMV0uaGVhZGVyQmcgOiAoJHBhcmVudENvbnRleHQuJGluZGV4KCkgJSAyID09PSAwID8gJHBhcmVudHNbMV0uYWx0Um93QmcgOiAkcGFyZW50c1sxXS5yb3dCZyksIGNvbG9yOiAkcGFyZW50c1sxXS50ZXh0Q29sb3IgfVwiPjwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInZpc2libGU6IGFkbWluTW9kZVwiIGNsYXNzPVwiY2FyZCBjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRlbXBsYXRlOiB7bmFtZTogJ21hbmFnZS1hY2Nlc3MtdGVtcGxhdGUnfVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIGNsYXNzPVwiYnRuIGJ0bi1kYW5nZXJcIiBkYXRhLWJpbmQ9XCJjbGljazogY2FuY2VsQ3JlYXRlUmVwb3J0XCI+Q2FuY2VsIGVkaXRpbmcgUmVwb3J0PC9hPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBTYXZlUmVwb3J0KCkgJiYgQ2FuU2F2ZVJlcG9ydHMoKSwgY2xpY2s6IFNhdmVXaXRob3V0UnVuXCIgc3R5bGU9XCJwYWRkaW5nLXJpZ2h0OiAxMHB4O1wiPlNhdmUgUmVwb3J0PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiIGRhdGEtYmluZD1cInRleHQ6IFNhdmVSZXBvcnQoKSAmJiBDYW5TYXZlUmVwb3J0cygpPyAnU2F2ZSAmIFJ1biBSZXBvcnQnOiAnUnVuIFJlcG9ydCcsIGNsaWNrOiBSdW5SZXBvcnRcIj5SdW4gUmVwb3J0PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvc2NyaXB0PlxyXG5cclxuPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJkcmlsbGRvd25Nb2RhbFwiIHRhYmluZGV4PVwiLTFcIiByb2xlPVwiZGlhbG9nXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLWxnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIiBkYXRhLWJpbmQ9XCJ3aXRoOiBDaGFydERyaWxsRG93bkRhdGFcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5EcmlsbGRvd24gRGF0YTwvaDQ+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlIHB1bGwtcmlnaHRcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiPjxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIGtvIGlmOiBEcmlsbERvd25EYXRhIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc3RyaXBlZCB0YWJsZS1ob3ZlciB0YWJsZS1jb25kZW5zZWRcIiBkYXRhLWJpbmQ9XCJ3aXRoOiBEcmlsbERvd25EYXRhLCBhdHRyOiB7Y2xhc3M6ICd0YWJsZSB0YWJsZS1zdHJpcGVkIHRhYmxlLWhvdmVyIHRhYmxlLWNvbmRlbnNlZCAnICsgJHBhcmVudC5zZWxlY3RlZFN0eWxlKCl9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJuby1oaWdobGlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDogQ29sdW1ucyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBkYXRhLWJpbmQ9XCJhdHRyOiB7IGlkOiBmaWVsZElkIH0sIGNzczogeydyaWdodC1hbGlnbic6IElzTnVtZXJpY30sIHN0eWxlOiB7J3dpZHRoJzogZmllbGRXaWR0aCwgJ2JhY2tncm91bmQtY29sb3InOiBoZWFkZXJCYWNrQ29sb3IgfSwgaGlkZGVuOiBvdXRlckdyb3VwXCIgc3R5bGU9XCJib3JkZXItcmlnaHQ6IDFweCBzb2xpZDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBmaWVsZExhYmVsKCkgPyBmaWVsZExhYmVsKCkgOiBmaWVsZE5hbWUsIHN0eWxlOiB7J2NvbG9yJzogaGVhZGVyRm9udENvbG9yLCAnZm9udC13ZWlnaHQnOiBoZWFkZXJGb250Qm9sZCgpID8gJ2JvbGQnIDogJ25vcm1hbCd9XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgZGF0YS1iaW5kPVwidmlzaWJsZTogUm93cyAmJiBSb3dzLmxlbmd0aCA8IDFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtaW5mb1wiIGRhdGEtYmluZD1cImF0dHI6e2NvbHNwYW46IENvbHVtbnMubGVuZ3RofVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIHJlY29yZHMgZm91bmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDogUm93cyAgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDogSXRlbXMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1iaW5kPVwiaGlkZGVuOiBvdXRlckdyb3VwLCBzdHlsZTogeydiYWNrZ3JvdW5kLWNvbG9yJzogYmFja0NvbG9yLCAnY29sb3InOiBmb250Q29sb3IsICdmb250LXdlaWdodCc6IGZvbnRCb2xkKCkgPyAnYm9sZCcgOiAnbm9ybWFsJyB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJzdHlsZTogeyd3aWR0aCc6IGZpZWxkV2lkdGggfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGlmOiBMaW5rVG8tLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1iaW5kPVwiYXR0cjoge2hyZWY6IExpbmtUb31cIiB0YXJnZXQ9XCJfYmxhbmtcIj48c3BhbiBkYXRhLWJpbmQ9XCJodG1sOiBmb3JtYXR0ZWRWYWxcIj48L3NwYW4+PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIC9rby0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGlmbm90OiBMaW5rVG8tLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwiaHRtbDogZm9ybWF0dGVkVmFsXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIC9rby0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wteHMtMTIgY29sLWNlbnRlcmVkXCIgZGF0YS1iaW5kPVwid2l0aDogcGFnZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1pbmxpbmUgc21hbGwgdGV4dC1tdXRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1sZWZ0IHRvdGFsLXJlY29yZHNcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBwYWdlcygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiAnVG90YWwgUmVjb3JkczogJyArIHRvdGFsUmVjb3JkcygpXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4teHNcIiB0aXRsZT1cIkRvd25sb2FkIEV4Y2VsXCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRwYXJlbnQuZXhwb3J0RXhjZWxcIj48c3BhbiBjbGFzcz1cImZhIGZhLWZpbGUtZXhjZWwtb1wiPjwvc3Bhbj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHB1bGwtcmlnaHRcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBwYWdlcygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRlbXBsYXRlOiAncGFnZXItdGVtcGxhdGUnLCBkYXRhOiAkZGF0YVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwibW9kYWxcIiBpZD1cIm5vYWNjb3VudE1vZGFsXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5BY2NvdW50IG5vdCBTZXR1cDwvaDQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXJcIj5kb3RuZXQgUmVwb3J0IEFjY291bnQgQ29uZmlndXJhdGlvbiBtaXNzaW5nITwvcD5cclxuICAgICAgICAgICAgICAgIDxwPllvdSBkbyBub3QgaGF2ZSB0aGUgbmVjY2Vzc2FyeSBpbml0aWFsIGNvbmZpZ3VyYXRpb24gY29tcGxldGVkIHRvIHVzZSBkb3RuZXQgUmVwb3J0LjwvcD5cclxuICAgICAgICAgICAgICAgIDxwPlBsZWFzZSB2aWV3IHRoZSA8YSBocmVmPVwiaHR0cHM6Ly9kb3RuZXRyZXBvcnQuY29tL2Jsb2dzL2dldHRpbmctc3RhcnRlZC13aXRoLWRvdG5ldC1yZXBvcnQvXCIgdGFyZ2V0PVwiX2JsYW5rXCI+R2V0dGluZyBTdGFydGVkIEd1aWRlPC9hPiB0byBjb3JyZWN0bHkgY29uZmlndXJlIGRvdG5ldCBSZXBvcnQuPC9wPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiPkNsb3NlPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG4gIGApO1xyXG4gIHRoaXMuY2RyZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG59XHJcblxyXG59XHJcbiIsIjxkaXYgaWQ9XCJkb3QtbmV0LXJlcG9ydFwiIGNsYXNzPVwiYm9keS1jb250ZW50XCI+XHJcblxyXG4gICAgPGgyPk1hbmFnZSBEYXRhYmFzZTwvaDI+XHJcbiAgICA8cD5cclxuICAgICAgICBZb3UgY2FuIHNlbGVjdCBhbmQgbWFuYWdlIGRpc3BsYXkgbmFtZXMgZm9yIHRoZSBUYWJsZXMgYW5kIENvbHVtbnMgeW91IHdvdWxkIGxpa2UgdG8gYWxsb3cgaW4gRG90bmV0IFJlcG9ydCBCdWlsZGVyLlxyXG4gICAgPC9wPlxyXG4gICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlclwiPlxyXG4gICAgICAgIERvIG5vdCBleHBvc2UgdGhpcyBTZXR1cCBUb29sIHRvIGVuZCB1c2VycyB3aG8gc2hvdWxkIG5vdCBoYXZlIGFjY2VzcyB0byBpdC4gSWRlYWxseSwgb25seSBEZXZlbG9wZXJzIHNob3VsZCBiZSBnaXZlbiBhY2Nlc3MgdG8gdGhpcyB1dGlsaXR5LlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGRhdGEtYmluZD1cInZpc2libGU6IGZhbHNlO1wiPlxyXG4gICAgICAgIExvYWRpbmcuLi5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXY+XHJcbiAgICAgICAgPCEtLSBOYXYgdGFicyAtLT5cclxuICAgICAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXRhYnNcIiByb2xlPVwidGFibGlzdFwiPlxyXG4gICAgICAgICAgICA8bGkgcm9sZT1cInByZXNlbnRhdGlvblwiIGNsYXNzPVwibmF2LWl0ZW1cIj48YSBjbGFzcz1cIm5hdi1saW5rIGFjdGl2ZVwiIGhyZWY9XCIjdGFibGVzZmllbGRzXCIgYXJpYS1jb250cm9scz1cImhvbWVcIiByb2xlPVwidGFiXCIgZGF0YS10b2dnbGU9XCJ0YWJcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKSB7IGN1c3RvbVRhYmxlTW9kZShmYWxzZSk7IH1cIj5EYXRhYmFzZSBUYWJsZXM8L2E+PC9saT5cclxuICAgICAgICAgICAgPGxpIHJvbGU9XCJwcmVzZW50YXRpb25cIiBjbGFzcz1cIm5hdi1pdGVtXCI+PGEgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjdGFibGVzZmllbGRzXCIgYXJpYS1jb250cm9scz1cImN1c3RvbVwiIHJvbGU9XCJ0YWJcIiBkYXRhLXRvZ2dsZT1cInRhYlwiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpIHsgY3VzdG9tVGFibGVNb2RlKHRydWUpOyB9XCI+Q3VzdG9tIFRhYmxlczwvYT48L2xpPlxyXG4gICAgICAgICAgICA8bGkgcm9sZT1cInByZXNlbnRhdGlvblwiIGNsYXNzPVwibmF2LWl0ZW1cIj48YSBjbGFzcz1cIm5hdi1saW5rXCIgaHJlZj1cIiNyZWxhdGlvbnNcIiBhcmlhLWNvbnRyb2xzPVwicHJvZmlsZVwiIHJvbGU9XCJ0YWJcIiBkYXRhLXRvZ2dsZT1cInRhYlwiPlJlbGF0aW9uczwvYT48L2xpPlxyXG4gICAgICAgICAgICA8bGkgcm9sZT1cInByZXNlbnRhdGlvblwiIGNsYXNzPVwibmF2LWl0ZW1cIj48YSBjbGFzcz1cIm5hdi1saW5rXCIgaHJlZj1cIiNwcm9jZWR1cmVcIiBhcmlhLWNvbnRyb2xzPVwicHJvY2VkdXJlXCIgcm9sZT1cInRhYlwiIGRhdGEtdG9nZ2xlPVwidGFiXCI+U3RvcmVkIFByb2NzPC9hPjwvbGk+XHJcbiAgICAgICAgICAgIDxsaSByb2xlPVwicHJlc2VudGF0aW9uXCIgY2xhc3M9XCJuYXYtaXRlbVwiPjxhIGNsYXNzPVwibmF2LWxpbmtcIiBocmVmPVwiI21hbmFnZWFjY2Vzc1wiIGFyaWEtY29udHJvbHM9XCJtYW5hZ2VhY2Nlc3NcIiByb2xlPVwidGFiXCIgZGF0YS10b2dnbGU9XCJ0YWJcIj5NYW5hZ2UgUmVwb3J0cyBBY2Nlc3M8L2E+PC9saT5cclxuICAgICAgICAgICAgPGxpIHJvbGU9XCJwcmVzZW50YXRpb25cIiBjbGFzcz1cIm5hdi1pdGVtXCI+PGEgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjY29ubmVjdGlvblwiIGFyaWEtY29udHJvbHM9XCJob21lXCIgcm9sZT1cInRhYlwiIGRhdGEtdG9nZ2xlPVwidGFiXCI+RGF0YSBDb25uZWN0aW9uPC9hPjwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGJyIC8+XHJcblxyXG48IS0tIFRhYiBwYW5lcyAtLT5cclxuPGRpdiBjbGFzcz1cImZpeC1jb250ZW50XCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIGRhdGEtYmluZD1cInZpc2libGU6IHRydWVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0YWItY29udGVudFwiPlxyXG4gICAgICAgIDxkaXYgcm9sZT1cInRhYnBhbmVsXCIgY2xhc3M9XCJ0YWItcGFuZVwiIGlkPVwiY29ubmVjdGlvblwiPlxyXG4gICAgICAgICAgICA8Yj5NYW5hZ2UgRGF0YWJhc2UgQ29ubmVjdGlvbjwvYj5cclxuICAgICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgICAgICBTZWxlY3QgYW5kIG1hbmFnZSBEYXRhIHlvdSB3b3VsZCBsaWtlIHRvIGFsbG93IGFjY2VzcyB0byBpbiBETlIgdG8gdXNlIGluIGJ1aWxkaW5nIFJlcG9ydHMgYW5kIERhc2hib2FyZHNcclxuICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiB0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJvcHRpb25zOiBEYXRhQ29ubmVjdGlvbnMsIG9wdGlvbnNUZXh0OiAnRGF0YUNvbm5lY3ROYW1lJywgb3B0aW9uc1ZhbHVlOiAnRGF0YUNvbm5lY3RHdWlkJywgdmFsdWU6IGN1cnJlbnRDb25uZWN0aW9uS2V5XCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWRkZWQtdG9wXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCIgZGF0YS10b2dnbGU9XCJtb2RhbFwiIGRhdGEtdGFyZ2V0PVwiI2Nvbm5lY3Rpb24tc2V0dXAtbW9kYWxcIj5NYW5hZ2UgREIgQ29ubmVjdGlvbjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiIGRhdGEtYmluZD1cImNsaWNrOiBzd2l0Y2hDb25uZWN0aW9uLCB2aXNpYmxlOiBjYW5Td2l0Y2hDb25uZWN0aW9uXCI+U3dpdGNoIENvbm5lY3Rpb248L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIiBkYXRhLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS10YXJnZXQ9XCIjYWRkLWNvbm5lY3Rpb24tbW9kYWxcIj5BZGQgTmV3IENvbm5lY3Rpb248L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIiBkYXRhLWJpbmQ9XCJjbGljazogZXhwb3J0QWxsLCB2aXNpYmxlOiBmYWxzZVwiPkV4cG9ydCBDb25uZWN0aW9uPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGltcG9ydFN0YXJ0LCB2aXNpYmxlOiBmYWxzZVwiPkltcG9ydCBDb25uZWN0aW9uPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBpbXBvcnRpbmdGaWxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxlYXNlIHNlbGVjdCBhIGZpbGUgeW91IGhhdmUgcHJldmlvdXNseSBleHBvcnRlZCBmcm9tIHRoaXMgdXRpbGl0eS4gVGhlIHN5c3RlbSB3aWxsIGxvYWQgdGhlIHNjcmVlbiB3aXRoIHRoZSBEYXRhIENvbm5lY3Rpb24gc2V0dGluZyBpbiB0aGUgZmlsZSwgaG93ZXZlciwgaXQgd2lsbCA8Yj5OT1Q8L2I+IGJlIHNhdmVkIHVudGlsIHlvdSBwcmVzcyB0aGUgU2F2ZSBBbGwgYnV0dG9uIG9yIFNhdmUgaW5kaXZpZHVhbCB0YWJsZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgYWNjZXB0PVwiLmpzb25cIiBpZD1cImltcG9ydC1maWxlXCIgZGF0YS1iaW5kPVwiZXZlbnQ6IHsgY2hhbmdlOiBmdW5jdGlvbigpIHsgaW1wb3J0RmlsZSgkZWxlbWVudC5maWxlc1swXSkgfSB9XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLWJ0blwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGltcG9ydENhbmNlbFwiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgcm9sZT1cInRhYnBhbmVsXCIgY2xhc3M9XCJ0YWItcGFuZSBhY3RpdmVcIiBpZD1cInRhYmxlc2ZpZWxkc1wiPlxyXG4gICAgICAgICAgICA8YiBkYXRhLWJpbmQ9XCJ0ZXh0OiBjdXN0b21UYWJsZU1vZGUoKSA/ICdDdXN0b20gVGFibGVzJyA6ICdEYXRhYmFzZSBUYWJsZXMnXCI+PC9iPlxyXG4gICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInZpc2libGU6ICRyb290LmN1c3RvbVRhYmxlTW9kZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIERlZmluZSBDdXN0b20gVGFibGVzIHVzaW5nIFNRTCBTZWxlY3QgUXVlcnkgdG8gdXNlIGluIEROUiBmb3IgUmVwb3J0aW5nIGFuZCBBbmFseXRpY3MuXHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJoaWRkZW46ICRyb290LmN1c3RvbVRhYmxlTW9kZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFNlbGVjdCBUYWJsZXMgb3IgVmlld3MgZnJvbSB5b3VyIERhdGFiYXNlIHRvIHVzZSBpbiBETlIgZm9yIFJlcG9ydGluZyBhbmQgQW5hbHl0aWNzLlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L3A+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cIndpdGg6IFRhYmxlc1wiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtc21cIiBwbGFjZWhvbGRlcj1cIkZpbHRlciBUYWJsZXMgZm9yLi4uXCIgZGF0YS1iaW5kPVwidmFsdWU6IHRhYmxlRmlsdGVyLCB2YWx1ZVVwZGF0ZTogJ2FmdGVya2V5ZG93bidcIiBzdHlsZT1cImZsb2F0OiBsZWZ0OyB3aWR0aDogMTQwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbVwiIGRhdGEtYmluZD1cImNsaWNrOiBjbGVhclRhYmxlRmlsdGVyLCAgdmlzaWJsZTogdGFibGVGaWx0ZXIoKSE9JycgJiYgdGFibGVGaWx0ZXIoKSE9bnVsbFwiPjxzcGFuIGNsYXNzPVwiZmEgZmEtcmVtb3ZlXCI+PC9zcGFuPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc21cIiBvbmNsaWNrPVwib3BlbmFsbCgpXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTVweDtcIj5PcGVuIGFsbDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc21cIiBvbmNsaWNrPVwiY2xvc2VhbGwoKVwiPkNsb3NlIGFsbDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc21cIiBkYXRhLWJpbmQ9XCJjbGljazogdG9nZ2xlU2hvd0FsbCwgaGlkZGVuOiAkcm9vdC5jdXN0b21UYWJsZU1vZGUoKSB8fCAkcm9vdC5vbmx5QXBpKCksIHRleHQ6IHVzZWRPbmx5KCkgPyAnU2hvdyBhbGwnIDogJ1Nob3cgdXNlZCBvbmx5J1wiPlNob3cgdXNlZCBvbmx5PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiAkcm9vdC5jdXN0b21TcWwuYWRkTmV3Q3VzdG9tU3FsVGFibGUsIHZpc2libGU6ICRyb290LmN1c3RvbVRhYmxlTW9kZVwiPkFkZCBOZXcgQ3VzdG9tIFRhYmxlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiAkcm9vdC5sb2FkRnJvbURhdGFiYXNlLCBoaWRkZW46ICRyb290LmN1c3RvbVRhYmxlTW9kZSgpIHx8ICEkcm9vdC5vbmx5QXBpKClcIj5Mb2FkIGFsbCBEYXRhYmFzZSBUYWJsZXM8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbGVhcmZpeFwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8aHIgLz5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgZm9ybS1pbmxpbmUgY29sLW1kLTRcIiBkYXRhLWJpbmQ9XCJ3aXRoOiBwYWdlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidGVtcGxhdGU6ICdwYWdlci10ZW1wbGF0ZScsIGRhdGE6ICRkYXRhXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiIGRhdGEtYmluZD1cImlmbm90OiAkcm9vdC5jdXN0b21UYWJsZU1vZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBUYWJsZXMubW9kZWwoKS5sZW5ndGhcIj48L3NwYW4+IFRhYmxlcy9WaWV3cyA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiAkcm9vdC5vbmx5QXBpKCkgPyAnY29uZmlndXJlZCBhbmQgdXNlZCcgOiAncmVhZCBmcm9tIGRhdGFiYXNlJ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lbnUgcm93XCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogMjBweDtcIiBkYXRhLWJpbmQ9XCJmb3JlYWNoOiBwYWdlZFRhYmxlc1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lbnUtY2F0ZWdvcnkgY2FyZFwiIHN0eWxlPVwiZmxvYXQ6IGxlZnQ7XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBjbGVhcmZpeFwiID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94IHB1bGwtbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBTZWxlY3RlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IFRhYmxlTmFtZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBJc1ZpZXdcIiBjbGFzcz1cImxhYmVsLXNtXCI+KHZpZXcpPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtXCIgdGl0bGU9XCJTYXZlIHRoaXMgVGFibGVcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXskZGF0YS5zYXZlVGFibGUoJHJvb3Qua2V5cy5BY2NvdW50QXBpS2V5LCAkcm9vdC5rZXlzLkRhdGFiYXNlQXBpS2V5KTt9XCI+PGkgY2xhc3M9XCJmYSBmYS1mbG9wcHktb1wiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtXCIgdGl0bGU9XCJNYW5hZ2UgUm9sZSBBY2Nlc3NcIiBkYXRhLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS10YXJnZXQ9XCIjcm9sZS1hY2Nlc3MtbW9kYWxcIiBkYXRhLWJpbmQ9XCJjbGljazogJHJvb3Quc2VsZWN0QWxsb3dlZFJvbGVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS11c2VyXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cInB1bGwtcmlnaHRcIiBkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCIgZGF0YS1iaW5kPVwiYXR0cjogeydkYXRhLXRhcmdldCc6ICcjdGFibGUnKyRpbmRleCgpfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWRvd25cIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImF0dHI6IHtpZDogJ3RhYmxlJyskaW5kZXgoKX1cIiBjbGFzcz1cInBhbmVsLWNvbGxhcHNlIGNvbGxhcHNlIGluXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsLXNtXCI+RGlzcGxheSBOYW1lPC9sYWJlbD48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJlZGl0YWJsZTogRGlzcGxheU5hbWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbC1zbVwiPlNjaGVtYSBOYW1lPC9sYWJlbD48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJlZGl0YWJsZTogU2NoZW1hTmFtZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsLXNtXCI+QWNjb3VudCBJZCBGaWVsZDwvbGFiZWw+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwiZWRpdGFibGU6IEFjY291bnRJZEZpZWxkXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJjaGVjay1ib3hcIiBkYXRhLXZhbD1cInRydWVcIiB0eXBlPVwiY2hlY2tib3hcIiB2YWx1ZT1cInRydWVcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBEb05vdERpc3BsYXlcIiB0aXRsZT1cIkRvIG5vdCBkaXNwbGF5IHRoaXMgdGFibGUgZm9yIHNlbGVjdGluZyBpbiByZXBvcnRzXCI+IERvIE5vdCBEaXNwbGF5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogQ3VzdG9tVGFibGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGRhdGEtYmluZD1cImNsaWNrOiAkcm9vdC5jdXN0b21TcWwudmlld0N1c3RvbVNxbC5iaW5kKCRkYXRhKVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tc2Vjb25kYXJ5XCI+VmlldyBDdXN0b20gU3FsPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDE1cHg7XCIgY2xhc3M9XCJsYWJlbC1zbVwiPjxzcGFuIGRhdGEtYmluZD1cInRleHQ6IENvbHVtbnMoKS5sZW5ndGhcIj48L3NwYW4+IENvbHVtbnM8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGluayBsYWJlbC1zbVwiIGRhdGEtYmluZD1cImNsaWNrOiBhdXRvRm9ybWF0LCB2aXNpYmxlOiBTZWxlY3RlZFwiPkF1dG8gRm9ybWF0PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1saW5rIGxhYmVsLXNtXCIgZGF0YS1iaW5kPVwiY2xpY2s6IHVuc2VsZWN0QWxsQ29sdW1ucywgdmlzaWJsZTogU2VsZWN0ZWRcIj5VbnNlbGVjdCBBbGw8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpbmsgbGFiZWwtc21cIiBkYXRhLWJpbmQ9XCJjbGljazogc2VsZWN0QWxsQ29sdW1ucywgdmlzaWJsZTogU2VsZWN0ZWRcIj5TZWxlY3QgQWxsPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWdyb3VwXCIgZGF0YS1iaW5kPVwic29ydGFibGU6IHsgZGF0YTogQ29sdW1ucywgb3B0aW9uczogeyBoYW5kbGU6ICcuc29ydGFibGUnLCBjdXJzb3I6ICdtb3ZlJyB9LCBhZnRlck1vdmU6ICRwYXJlbnQuY29sdW1uU29ydGVkIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IFNlbGVjdGVkLCBlbmFibGU6ICRwYXJlbnQuU2VsZWN0ZWQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwiZWRpdGFibGU6IERpc3BsYXlOYW1lLCBhdHRyOiB7dGl0bGU6ICdEQiBmaWVsZCBpcyAnICsgQ29sdW1uTmFtZSgpfVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBQcmltYXJ5S2V5XCIgY2xhc3M9XCJiYWRnZSBiYWRnZS1wcmltYXJ5XCI+UHJpbWFyeTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZGF0YS1iaW5kPVwidmlzaWJsZTogRm9yZWlnbktleVwiIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtaW5mb1wiPkZvcmVpZ248L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBwdWxsLXJpZ2h0XCIgZGF0YS10b2dnbGU9XCJtb2RhbFwiIGRhdGEtdGFyZ2V0PVwiI2NvbHVtbi1tb2RhbFwiIHRpdGxlPVwiQWxsIGNvbHVtbiBvcHRpb25zXCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRyb290LnNlbGVjdENvbHVtbi5iaW5kKCRkYXRhLCBmYWxzZSlcIj4uLi48L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4gYnRuLXNtIHB1bGwtcmlnaHQgc29ydGFibGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtYXJyb3dzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJEcmFnIHRvIHJlb3JkZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgcm9sZT1cInRhYnBhbmVsXCIgY2xhc3M9XCJ0YWItcGFuZVwiIGlkPVwicmVsYXRpb25zXCI+XHJcbiAgICAgICAgICAgIDxiPlJlbGF0aW9uczwvYj5cclxuICAgICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgICAgICBTZXR1cCB5b3VyIERhdGFiYXNlIFJlbGF0aW9ucyBmb3IgRE5SIHRvIHByb2R1Y2UgZHluYW1pYyBxdWVyaWVzXHJcbiAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogQWRkSm9pblwiPkFkZCBuZXcgSm9pbjwvYnV0dG9uPiZuYnNwO1xyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiBTYXZlSm9pbnNcIj5TYXZlIEpvaW5zPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgPGZvcm0gaWQ9XCJmb3JtLWpvaW5zXCI+XHJcbiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aGVhZCBkYXRhLWJpbmQ9XCJ3aXRoOiBKb2luRmlsdGVyc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpbWFyeSBUYWJsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1zbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC1zbVwiIGRhdGEtYmluZD1cInZhbHVlOiBwcmltYXJ5VGFibGUsIHZhbHVlVXBkYXRlOiAnYWZ0ZXJrZXlkb3duJ1wiIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtYWRkb25cIj48aSBjbGFzcz1cImZhIGZhLWZpbHRlclwiPjwvaT48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIGlucHV0LWdyb3VwLXNtXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC1zbVwiIGRhdGEtYmluZD1cInZhbHVlOiBwcmltYXJ5RmllbGQsIHZhbHVlVXBkYXRlOiAnYWZ0ZXJrZXlkb3duJ1wiIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtYWRkb25cIj48aSBjbGFzcz1cImZhIGZhLWZpbHRlclwiPjwvaT48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpvaW4gVHlwZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1zbVwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtc21cIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogam9pblR5cGUsIHZhbHVlVXBkYXRlOiAnYWZ0ZXJrZXlkb3duJ1wiIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtYWRkb25cIj48aSBjbGFzcz1cImZhIGZhLWZpbHRlclwiPjwvaT48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpvaW4gVGFibGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgaW5wdXQtZ3JvdXAtc21cIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LXNtXCIgZGF0YS1iaW5kPVwidmFsdWU6IGpvaW5UYWJsZSwgdmFsdWVVcGRhdGU6ICdhZnRlcmtleWRvd24nXCIgcGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC1hZGRvblwiPjxpIGNsYXNzPVwiZmEgZmEtZmlsdGVyXCI+PC9pPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmllbGQ8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgaW5wdXQtZ3JvdXAtc21cIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LXNtXCIgZGF0YS1iaW5kPVwidmFsdWU6IGpvaW5GaWVsZCwgdmFsdWVVcGRhdGU6ICdhZnRlcmtleWRvd24nXCIgcGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC1hZGRvblwiPjxpIGNsYXNzPVwiZmEgZmEtZmlsdGVyXCI+PC9pPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0Ym9keSBkYXRhLWJpbmQ9XCJmb3JlYWNoOiBmaWx0ZXJlZEpvaW5zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LW1lZGl1bVwiIGRhdGEtYmluZD1cIm9wdGlvbnM6ICRyb290LlRhYmxlcy5hdmFpbGFibGVUYWJsZXMsIG9wdGlvbnNUZXh0OiAnRGlzcGxheU5hbWUnLCB2YWx1ZTogSm9pblRhYmxlXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtYmluZD1cIndpdGg6IEpvaW5UYWJsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJvcHRpb25zOiBhdmFpbGFibGVDb2x1bW5zLCBvcHRpb25zVGV4dDogJ0Rpc3BsYXlOYW1lJywgb3B0aW9uc1ZhbHVlOiAnQ29sdW1uTmFtZScsIHZhbHVlOiAkcGFyZW50LkZpZWxkTmFtZVwiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LXNtYWxsXCIgZGF0YS1iaW5kPVwib3B0aW9uczogJHJvb3QuSm9pblR5cGVzLCB2YWx1ZTogSm9pblR5cGVcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC1tZWRpdW1cIiBkYXRhLWJpbmQ9XCJvcHRpb25zOiBPdGhlclRhYmxlcywgb3B0aW9uc1RleHQ6ICdEaXNwbGF5TmFtZScsIHZhbHVlOiBPdGhlclRhYmxlXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBkYXRhLWJpbmQ9XCJ3aXRoOiBPdGhlclRhYmxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cIm9wdGlvbnM6IGF2YWlsYWJsZUNvbHVtbnMsIG9wdGlvbnNUZXh0OiAnRGlzcGxheU5hbWUnLCBvcHRpb25zVmFsdWU6ICdDb2x1bW5OYW1lJywgdmFsdWU6ICRwYXJlbnQuSm9pbkZpZWxkTmFtZVwiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tc2Vjb25kYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IERlbGV0ZUpvaW5cIj5EZWxldGU8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgaWQ9XCJwcm9jZWR1cmVcIiBjbGFzcz1cInRhYi1wYW5lXCI+XHJcbiAgICAgICAgICAgIDxiPlN0b3JlZCBQcm9jZWR1cmVzPC9iPlxyXG4gICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICAgIFNlbGVjdCBhbmQgbWFuYWdlIFN0b3JlZCBQcm9jZWR1cmVzIHRvIHVzZSBpbiBETlIgZm9yIG1vcmUgY29tcGxleCBhbmQgY29kZWQgUmVwb3J0c1xyXG4gICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgIDxociAvPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiIGRhdGEtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLXRhcmdldD1cIiNwcm9jZWR1cmUtbW9kYWxcIj5BZGQgU3RvcmVkIFByb2NzIGZyb20gZGF0YWJhc2U8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IFByb2NlZHVyZXMuc2F2ZWRQcm9jZWR1cmVzKCkubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICAgIE5vIFN0b3JlZCBQcm9jZWR1cmVzIGhhdmUgYmVlbiBzZXR1cCB5ZXQuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVudSByb3dcIiBkYXRhLWJpbmQ9XCJmb3JlYWNoOiBQcm9jZWR1cmVzLnNhdmVkUHJvY2VkdXJlc1wiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDIwcHg7IHBhZGRpbmctdG9wOiAyMHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lbnUtY2F0ZWdvcnkgY2FyZFwiIHN0eWxlPVwiZmxvYXQ6IGxlZnQ7XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBjbGVhcmZpeFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogVGFibGVOYW1lXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWwteHNcIj5Qcm9jZWR1cmU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtXCIgdGl0bGU9XCJTYXZlIHRoaXMgUHJvY2VkdXJlXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCl7JHJvb3Quc2F2ZVByb2NlZHVyZSgkZGF0YS5UYWJsZU5hbWUsIGZhbHNlKTt9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1zYXZlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbVwiIHRpdGxlPVwiTWFuYWdlIFJvbGUgQWNjZXNzXCIgZGF0YS10b2dnbGU9XCJtb2RhbFwiIGRhdGEtdGFyZ2V0PVwiI3JvbGUtYWNjZXNzLW1vZGFsXCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRyb290LnNlbGVjdEFsbG93ZWRSb2xlc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdXNlclwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc21cIiB0aXRsZT1cIkRlbGV0ZSB0aGlzIFByb2NlZHVyZVwiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpeyRkYXRhLmRlbGV0ZVRhYmxlKCRyb290LmtleXMuQWNjb3VudEFwaUtleSwgJHJvb3Qua2V5cy5EYXRhYmFzZUFwaUtleSk7fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtdHJhc2hcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cInB1bGwtcmlnaHRcIiBkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCIgZGF0YS1iaW5kPVwiYXR0cjogeydkYXRhLXRhcmdldCc6ICcjdGFibGUnKyRpbmRleCgpfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWRvd25cIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImF0dHI6IHtpZDogJ3RhYmxlJyskaW5kZXgoKX1cIiBjbGFzcz1cInBhbmVsLWNvbGxhcHNlIGNvbGxhcHNlIGluXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsLXNtXCI+RGlzcGxheSBOYW1lPC9sYWJlbD48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJlZGl0YWJsZTogRGlzcGxheU5hbWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbC1zbVwiPlNjaGVtYSBOYW1lPC9sYWJlbD48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJlZGl0YWJsZTogU2NoZW1hTmFtZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInNtYWxsXCI+Q29sdW1uczwvbGFiZWw+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZ3JvdXBcIiBkYXRhLWJpbmQ9XCJmb3JlYWNoOiBDb2x1bW5zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJlZGl0YWJsZTogRGlzcGxheU5hbWUsIGF0dHI6IHt0aXRsZTogJ0RCIGZpZWxkIGlzICcgKyBDb2x1bW5OYW1lKCl9XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1pbmZvXCIgZGF0YS1iaW5kPVwidGV4dDogRmllbGRUeXBlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBwdWxsLXJpZ2h0XCIgZGF0YS10b2dnbGU9XCJtb2RhbFwiIGRhdGEtdGFyZ2V0PVwiI2NvbHVtbi1tb2RhbFwiIHRpdGxlPVwiQWxsIGNvbHVtbiBvcHRpb25zXCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRyb290LnNlbGVjdENvbHVtbi5iaW5kKCRkYXRhLCB0cnVlKVwiPi4uLjwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic21hbGxcIj5QYXJhbWV0ZXJzPC9sYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cFwiIGRhdGEtYmluZD1cImZvcmVhY2g6IFBhcmFtZXRlcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cImVkaXRhYmxlOiBEaXNwbGF5TmFtZSwgYXR0cjoge3RpdGxlOiAnREIgZmllbGQgaXMgJyArIFBhcmFtZXRlck5hbWUoKX1cIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWluZm9cIiBkYXRhLWJpbmQ9XCJ0ZXh0OiBQYXJhbWV0ZXJEYXRhVHlwZVN0cmluZ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeSBwdWxsLXJpZ2h0XCIgZGF0YS10b2dnbGU9XCJtb2RhbFwiIGRhdGEtdGFyZ2V0PVwiI3BhcmFtZXRlci1tb2RhbFwiIHRpdGxlPVwiQWxsIFBhcmFtZXRlciBvcHRpb25zXCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRyb290LmVkaXRQYXJhbWV0ZXJcIj4uLi48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGlkPVwibWFuYWdlYWNjZXNzXCIgY2xhc3M9XCJ0YWItcGFuZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImZvcmVhY2g6IHJlcG9ydHNBbmRGb2xkZXJzXCIgY2xhc3M9XCJjYXJkXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogMjBweDtcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImJ0biBidG4tbGlua1wiIHJvbGU9XCJidXR0b25cIiBkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCIgZGF0YS1iaW5kPVwiYXR0cjoge2hyZWY6ICcjZm9sZGVyLScgKyBmb2xkZXJJZCB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZm9sZGVyXCI+PC9pPiZuYnNwOzxzcGFuIGRhdGEtYmluZD1cInRleHQ6IGZvbGRlclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbGxhcHNlXCIgZGF0YS1iaW5kPVwiYXR0cjoge2lkOiAnZm9sZGVyLScgKyBmb2xkZXJJZCB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IHJlcG9ydHMubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIFJlcG9ydHMgZm91bmQgaW4gdGhpcyBmb2xkZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXBcIiBkYXRhLWJpbmQ9XCJmb3JlYWNoOiByZXBvcnRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0taGVhZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhXCIgZGF0YS1iaW5kPVwiY3NzOiB7J2ZhLWZpbGUnOiByZXBvcnRUeXBlPT0nTGlzdCcsICdmYS10aC1saXN0JzogcmVwb3J0VHlwZT09J1N1bW1hcnknLCAnZmEtYmFyLWNoYXJ0JzogcmVwb3J0VHlwZT09J0JhcicsICdmYS1waWUtY2hhcnQnOiByZXBvcnRUeXBlPT0nUGllJywgICdmYS1saW5lLWNoYXJ0JzogcmVwb3J0VHlwZT09J0xpbmUnLCAnZmEtZ2xvYmUnOiByZXBvcnRUeXBlID09J01hcCd9XCIgc3R5bGU9XCJmb250LXNpemU6IDE0cHQ7IGNvbG9yOiAjODA4MDgwXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiByZXBvcnROYW1lXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtLXRleHQgc21hbGxcIiBkYXRhLWJpbmQ9XCJ0ZXh0OiByZXBvcnREZXNjcmlwdGlvblwiPjwvcD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic21hbGxcIiBzdHlsZT1cInBhZGRpbmctdG9wOiAxMHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkN1cnJlbnQgUmVwb3J0IEFjY2VzczwvYj48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYW5hZ2UgYnkgVXNlciA8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWluZm9cIiBkYXRhLWJpbmQ9XCJ0ZXh0OiB1c2VySWQgPyB1c2VySWQgOiAnQW55IFVzZXInXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZXcgb25seSBieSBVc2VyIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtaW5mb1wiIGRhdGEtYmluZD1cInRleHQ6ICh2aWV3T25seVVzZXJJZCA/IHZpZXdPbmx5VXNlcklkIDogKHVzZXJJZCA/IHVzZXJJZCA6ICdBbnkgVXNlcicpKVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiBkZWxldGVPbmx5VXNlcklkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlbGV0ZSBvbmx5IGJ5IFVzZXIgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1pbmZvXCIgZGF0YS1iaW5kPVwidGV4dDogZGVsZXRlT25seVVzZXJJZFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogdXNlclJvbGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFuYWdlIGJ5IFJvbGUgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1pbmZvXCIgZGF0YS1iaW5kPVwidGV4dDogdXNlclJvbGUgPyB1c2VyUm9sZSA6ICdObyBSb2xlJ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogdmlld09ubHlVc2VyUm9sZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWV3IG9ubHkgYnkgUm9sZSA8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWluZm9cIiBkYXRhLWJpbmQ9XCJ0ZXh0OiB2aWV3T25seVVzZXJSb2xlID8gdmlld09ubHlVc2VyUm9sZSA6ICdBbnkgUm9sZSdcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IGRlbGV0ZU9ubHlVc2VyUm9sZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWxldGUgb25seSBieSBSb2xlIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtaW5mb1wiIGRhdGEtYmluZD1cInRleHQ6IGRlbGV0ZU9ubHlVc2VyUm9sZSA/IGRlbGV0ZU9ubHlVc2VyUm9sZSA6ICdTYW1lIGFzIE1hbmFnZSdcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBDbGllbnQgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1pbmZvXCIgZGF0YS1iaW5kPVwidGV4dDogY2xpZW50SWQgPyBjbGllbnRJZCA6ICdBbGwgQ2xpZW50cydcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKSB7IGNoYW5nZUFjY2VzcyghY2hhbmdlQWNjZXNzKCkpfSwgdGV4dDogIWNoYW5nZUFjY2VzcygpID8gJ0NoYW5nZSBBY2Nlc3MnOiAnQ2FuY2VsIENoYW5naW5nIEFjY2VzcycsIGhpZGRlbjogY2hhbmdlQWNjZXNzXCI+Q2hhbmdlIEFjY2VzczwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IGNoYW5nZUFjY2Vzc1wiIGNsYXNzPVwiY29sLW1kLTlcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiYm9yZGVyLWxlZnQ6IDFweCBzb2xpZDsgcGFkZGluZy1sZWZ0OiAxMHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidGVtcGxhdGU6IHtuYW1lOiAnbWFuYWdlLWFjY2Vzcy10ZW1wbGF0ZScsIGRhdGE6ICRyb290IH1cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiBzYXZlQWNjZXNzQ2hhbmdlc1wiPlNhdmUgQWNjZXNzIENoYW5nZXM8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpIHsgY2hhbmdlQWNjZXNzKCFjaGFuZ2VBY2Nlc3MoKSl9LCB0ZXh0OiAhY2hhbmdlQWNjZXNzKCkgPyAnQ2hhbmdlIEFjY2Vzcyc6ICdDYW5jZWwgQ2hhbmdpbmcgQWNjZXNzJ1wiPkNoYW5nZSBBY2Nlc3M8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPCEtLSBNb2RhbCAtLT5cclxuPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJjb2x1bW4tbW9kYWxcIiByb2xlPVwiZGlhbG9nXCIgdGFiaW5kZXg9XCItMVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCIgZGF0YS1iaW5kPVwid2l0aDogZWRpdENvbHVtbigpXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJteU1vZGFsTGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICBNYW5hZ2VcclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZGF0YS1iaW5kPVwidGV4dDogQ29sdW1uTmFtZVwiPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2g0PlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+PHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICA8cD5DaG9vc2Ugb3B0aW9ucyB0aGF0IHdpbGwgZGV0ZXJtaW5lIGhvdyB1c2VycyBpbnRlcmFjdCB3aXRoIHRoaXMgY29sdW1uIG9uIFJlcG9ydHM8L3A+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ob3Jpem9udGFsXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cIm5hdiBuYXYtdGFic1wiIHJvbGU9XCJ0YWJsaXN0XCIgZGF0YS1iaW5kPVwiaWY6ICRyb290LmlzU3RvcmVkUHJvY0NvbHVtbigpID09IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSByb2xlPVwicHJlc2VudGF0aW9uXCIgY2xhc3M9XCJuYXYtaXRlbVwiPjxhIGNsYXNzPVwibmF2LWxpbmsgYWN0aXZlXCIgaHJlZj1cIiNjb2x1bW4tbWFpblwiIGFyaWEtY29udHJvbHM9XCJob21lXCIgcm9sZT1cInRhYlwiIGRhdGEtdG9nZ2xlPVwidGFiXCI+TWFpbiBPcHRpb25zPC9hPjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSByb2xlPVwicHJlc2VudGF0aW9uXCIgY2xhc3M9XCJuYXYtaXRlbVwiPjxhIGNsYXNzPVwibmF2LWxpbmtcIiBocmVmPVwiI2NvbHVtbi1mb3JlaWduXCIgYXJpYS1jb250cm9scz1cInByb2ZpbGVcIiByb2xlPVwidGFiXCIgZGF0YS10b2dnbGU9XCJ0YWJcIj5Gb3JlaWduIEtleSBPcHRpb25zPC9hPjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSByb2xlPVwicHJlc2VudGF0aW9uXCIgY2xhc3M9XCJuYXYtaXRlbVwiPjxhIGNsYXNzPVwibmF2LWxpbmtcIiBocmVmPVwiI2NvbHVtbi1maWx0ZXJcIiBhcmlhLWNvbnRyb2xzPVwicHJvY2VkdXJlXCIgcm9sZT1cInRhYlwiIGRhdGEtdG9nZ2xlPVwidGFiXCI+RmlsdGVyIE9wdGlvbnM8L2E+PC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiByb2xlPVwidGFicGFuZWxcIiBjbGFzcz1cInRhYi1wYW5lIGFjdGl2ZVwiIGlkPVwiY29sdW1uLW1haW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zIGNvbnRyb2wtbGFiZWxcIiBmb3I9XCJEaXNwbGF5X05hbWVcIiBkYXRhLWJpbmQ9XCJhdHRyOntwbGFjZWhvbGRlcjonRXggRmlyc3QgTmFtZSd9XCIgcGxhY2Vob2xkZXI9XCJFeCBGaXJzdCBOYW1lXCI+RGlzcGxheSBOYW1lPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdGV4dC1ib3ggc2luZ2xlLWxpbmVcIiBkYXRhLXZhbD1cInRydWVcIiBkYXRhLXZhbC1yZXF1aXJlZD1cIlRoZSBEaXNwbGF5TmFtZSBmaWVsZCBpcyByZXF1aXJlZC5cIiBpZD1cIkRpc3BsYXlOYW1lXCIgbmFtZT1cIkRpc3BsYXlOYW1lXCIgdHlwZT1cInRleHRcIiB2YWx1ZT1cIkZpcnN0IE5hbWVcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogRGlzcGxheU5hbWUsIGF0dHI6e3BsYWNlaG9sZGVyOidFeCBGaXJzdCBOYW1lJ31cIiBwbGFjZWhvbGRlcj1cIkV4IEZpcnN0IE5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS10b2dnbGU9XCJ0b29sdGlwXCIgZGF0YS1wbGFjZW1lbnQ9XCJyaWdodFwiIGNsYXNzPVwiZmEgZmEtcXVlc3Rpb24tY2lyY2xlIGhlbHB0aXBcIiB0aXRsZT1cIlRoaXMgaXMgYSBmcmllbmRseSBuYW1lIHRvIGRpc3BsYXkgdG8geW91ciB1c2Vyc1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWdyb3VwXCIgZGF0YS1iaW5kPVwiaWY6ICRyb290LmlzU3RvcmVkUHJvY0NvbHVtbigpID09IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zIGNvbnRyb2wtbGFiZWxcIiBmb3I9XCJGaWVsZF9UeXBlXCIgZGF0YS1iaW5kPVwiXCI+RmllbGQgVHlwZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiRmllbGRUeXBlX1NlbGVjdGVkSWRcIiBuYW1lPVwiRmllbGRUeXBlLlNlbGVjdGVkSWRcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogRmllbGRUeXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkJvb2xlYW5cIj5Cb29sZWFuPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkRhdGVUaW1lXCI+RGF0ZSBUaW1lPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlZhcmNoYXJcIj5WYXJjaGFyPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIk1vbmV5XCI+TW9uZXk8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiSW50XCI+SW50PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkRvdWJsZVwiPkRvdWJsZTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJKc29uXCI+SnNvbjwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmllbGQtdmFsaWRhdGlvbi12YWxpZCBoZWxwLWlubGluZSBpbmRlbnRcIiBkYXRhLXZhbG1zZy1mb3I9XCJGaWVsZFR5cGVcIiBkYXRhLXZhbG1zZy1yZXBsYWNlPVwidHJ1ZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWdyb3VwXCIgZGF0YS1iaW5kPVwiaWY6ICRyb290LmlzU3RvcmVkUHJvY0NvbHVtbigpID09IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zIGNvbnRyb2wtbGFiZWxcIiBmb3I9XCJQcmltYXJ5X0tleVwiIGRhdGEtYmluZD1cIlwiPlByaW1hcnkgS2V5PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImNoZWNrLWJveFwiIGRhdGEtdmFsPVwidHJ1ZVwiIGRhdGEtdmFsLXJlcXVpcmVkPVwiVGhlIFByaW1hcnlLZXkgZmllbGQgaXMgcmVxdWlyZWQuXCIgaWQ9XCJQcmltYXJ5S2V5XCIgbmFtZT1cIlByaW1hcnlLZXlcIiB0eXBlPVwiY2hlY2tib3hcIiB2YWx1ZT1cInRydWVcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOlByaW1hcnlLZXlcIj48aW5wdXQgbmFtZT1cIlByaW1hcnlLZXlcIiB0eXBlPVwiaGlkZGVuXCIgdmFsdWU9XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWVsZC12YWxpZGF0aW9uLXZhbGlkIGhlbHAtaW5saW5lIGluZGVudFwiIGRhdGEtdmFsbXNnLWZvcj1cIlByaW1hcnlLZXlcIiBkYXRhLXZhbG1zZy1yZXBsYWNlPVwidHJ1ZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zIGNvbnRyb2wtbGFiZWxcIiBkYXRhLWJpbmQ9XCJcIj5EbyBOb3QgRGlzcGxheTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJjaGVjay1ib3hcIiBkYXRhLXZhbD1cInRydWVcIiB0eXBlPVwiY2hlY2tib3hcIiB2YWx1ZT1cInRydWVcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOkRvTm90RGlzcGxheVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS10b2dnbGU9XCJ0b29sdGlwXCIgZGF0YS1wbGFjZW1lbnQ9XCJyaWdodFwiIGNsYXNzPVwiZmEgZmEtcXVlc3Rpb24tY2lyY2xlIGhlbHB0aXBcIiB0aXRsZT1cIklmIHRoaXMgaXMgY2hlY2tlZCwgdGhlIGNvbHVtbiB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQgb24gUmVwb3J0IERlc2lnbmVyLCBidXQgY2FuIHN0aWxsIGJlIHVzZWQgb24gR2xvYmFsIERhdGEgRmlsdGVyc1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiIGRhdGEtYmluZD1cImlmOiBGaWVsZFR5cGUoKSA9PSAnSnNvbidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiPkpTT04gRGF0YSBTdHJ1Y3R1cmU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImZvcm0tY29udHJvbCB0ZXh0LWJveCBzaW5nbGUtbGluZVwiIGRhdGEtdmFsPVwidHJ1ZVwiIGRhdGEtdmFsLXJlcXVpcmVkPVwiVGhlIERpc3BsYXlOYW1lIGZpZWxkIGlzIHJlcXVpcmVkLlwiIGRhdGEtYmluZD1cInZhbHVlOiBKc29uU3RydWN0dXJlLCBhdHRyOntwbGFjZWhvbGRlcjonUGxlYXNlIHBhc3RlIGluIFNhbXBsZSBKc29uIHdpdGggYWxsIGNvbHVtbnMgZm9yIHRoaXMgSlNPTiBkYXRhIGZpZWxkJ31cIiByb3dzPVwiNVwiID48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLXBsYWNlbWVudD1cInJpZ2h0XCIgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGUgaGVscHRpcFwiIHRpdGxlPVwiWW91IGNhbiBwYXN0ZSBpbiBhIHNhbXBsZSBKc29uIGJsb2Igd2l0aCBhbGwgdGhlIGNvbHVtbnMgeW91IHdhbnQgdG8gdXNlIGluIHRoaXMgZmllbGRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHJvbGU9XCJ0YWJwYW5lbFwiIGNsYXNzPVwidGFiLXBhbmVcIiBpZD1cImNvbHVtbi1maWx0ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWdyb3VwXCIgZGF0YS1iaW5kPVwiaWY6ICRyb290LmlzU3RvcmVkUHJvY0NvbHVtbigpID09IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC00IGNvbC1zbS00IGNvbnRyb2wtbGFiZWxcIiBkYXRhLWJpbmQ9XCJcIj5SZXF1aXJlIEZpbHRlciBpZiBDb2x1bW4gaXMgc2VsZWN0ZWQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiY2hlY2stYm94XCIgZGF0YS12YWw9XCJ0cnVlXCIgdHlwZT1cImNoZWNrYm94XCIgdmFsdWU9XCJ0cnVlXCIgZGF0YS1iaW5kPVwiY2hlY2tlZDpGb3JjZUZpbHRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMiBjb2wtc20tMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS10b2dnbGU9XCJ0b29sdGlwXCIgZGF0YS1wbGFjZW1lbnQ9XCJyaWdodFwiIGNsYXNzPVwiZmEgZmEtcXVlc3Rpb24tY2lyY2xlIGhlbHB0aXBcIiB0aXRsZT1cIklmIHRoaXMgaXMgY2hlY2tlZCwgdGhlIGNvbHVtbiB3aWxsIGFsd2F5cyByZXF1aXJlIHRoZSB1c2VyIHRvIHBpY2sgYSBmaWx0ZXJlZCB2YWx1ZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWdyb3VwXCIgZGF0YS1iaW5kPVwiaWY6ICRyb290LmlzU3RvcmVkUHJvY0NvbHVtbigpID09IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC00IGNvbC1zbS00IGNvbnRyb2wtbGFiZWxcIiBkYXRhLWJpbmQ9XCJcIj5SZXF1aXJlIEZpbHRlciBpZiBUYWJsZSBpcyBzZWxlY3RlZDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJjaGVjay1ib3hcIiBkYXRhLXZhbD1cInRydWVcIiB0eXBlPVwiY2hlY2tib3hcIiB2YWx1ZT1cInRydWVcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOkZvcmNlRmlsdGVyRm9yVGFibGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTIgY29sLXNtLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtdG9nZ2xlPVwidG9vbHRpcFwiIGRhdGEtcGxhY2VtZW50PVwicmlnaHRcIiBjbGFzcz1cImZhIGZhLXF1ZXN0aW9uLWNpcmNsZSBoZWxwdGlwXCIgdGl0bGU9XCJJZiB0aGlzIGlzIGNoZWNrZWQsIHRoZSByZXBvcnQgd2lsbCBhbHdheXMgcmVxdWlyZSB0aGUgdXNlciB0byBwaWNrIGEgZmlsdGVyIHZhbHVlIGlmIHVzZXIgcGlja3MgdGhlIGNvbHVtbiBpbiByZXBvcnRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiIGRhdGEtYmluZD1cImlmOiBGaWVsZFR5cGUoKSA9PSAnRGF0ZVRpbWUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC00IGNvbC1zbS00IGNvbnRyb2wtbGFiZWxcIiBkYXRhLWJpbmQ9XCJcIj5SZXN0cmljdCBGaWx0ZXIgRGF0ZSBSYW5nZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMSBjb2wtc20tMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiY2hlY2stYm94XCIgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogcmVzdHJpY3REYXRlUmFuZ2VGaWx0ZXJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yIGNvbC1zbS0yXCIgZGF0YS1iaW5kPVwiaWY6IHJlc3RyaWN0RGF0ZVJhbmdlRmlsdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiB0eXBlPVwibnVtYmVyXCIgZGF0YS1iaW5kPVwidmFsdWU6IHJlc3RyaWN0RGF0ZVJhbmdlTnVtYmVyXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tM1wiIGRhdGEtYmluZD1cImlmOiByZXN0cmljdERhdGVSYW5nZUZpbHRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cInZhbHVlOiByZXN0cmljdERhdGVSYW5nZVZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkRheXNcIj5EYXkocyk8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiTW9udGhzXCI+TW9udGgocyk8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiWWVhcnNcIj5ZZWFyKHMpPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMiBjb2wtc20tMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS10b2dnbGU9XCJ0b29sdGlwXCIgZGF0YS1wbGFjZW1lbnQ9XCJyaWdodFwiIGNsYXNzPVwiZmEgZmEtcXVlc3Rpb24tY2lyY2xlIGhlbHB0aXBcIiB0aXRsZT1cIklmIHRoaXMgaXMgc2VsZWN0ZWQsIHVzZXIgd2lsbCBub3QgYmUgYWJsZSB0byBwaWNrIGRhdGUgcmFuZ2UgbGFyZ2VyIHRoYW4gdGhpcyBzZWxlY3Rpb25cIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHJvbGU9XCJ0YWJwYW5lbFwiIGNsYXNzPVwidGFiLXBhbmVcIiBpZD1cImNvbHVtbi1mb3JlaWduXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiIGRhdGEtYmluZD1cImlmOiAkcm9vdC5pc1N0b3JlZFByb2NDb2x1bW4oKSA9PSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tMyBjb250cm9sLWxhYmVsXCIgZGF0YS1iaW5kPVwiXCI+Rm9yZWlnbiBLZXk8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiY2hlY2stYm94XCIgZGF0YS12YWw9XCJ0cnVlXCIgZGF0YS12YWwtcmVxdWlyZWQ9XCJUaGUgRm9yZWlnbktleSBmaWVsZCBpcyByZXF1aXJlZC5cIiBpZD1cIkZvcmVpZ25LZXlcIiBuYW1lPVwiRm9yZWlnbktleVwiIHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwidHJ1ZVwiIGRhdGEtYmluZD1cImNoZWNrZWQ6Rm9yZWlnbktleVwiPjxpbnB1dCBuYW1lPVwiRm9yZWlnbktleVwiIHR5cGU9XCJoaWRkZW5cIiB2YWx1ZT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLXBsYWNlbWVudD1cInJpZ2h0XCIgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGUgaGVscHRpcFwiIHRpdGxlPVwiRm9yZWlnbiBrZXlzIGFsbG93cyBmcmllbmRseSBzZWxlY3Rpb24gaW4gRmlsdGVycyB1c2luZyBhIERyb3Bkb3duIExpc3RcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiIGRhdGEtYmluZD1cImlmOiAkcm9vdC5pc1N0b3JlZFByb2NDb2x1bW4oKSA9PSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tMyBjb250cm9sLWxhYmVsXCIgZGF0YS1iaW5kPVwidmlzaWJsZTpGb3JlaWduS2V5KCksIGF0dHI6IHtyZXF1aXJlZDogRm9yZWlnbktleSgpPydUcnVlJzpudWxsLCBwbGFjZWhvbGRlcjogJ0V4IHRibEVtcGxveWVlcyd9XCIgcGxhY2Vob2xkZXI9XCJFeCB0YmxFbXBsb3llZXNcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+Rm9yZWlnbiBUYWJsZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cInZhbHVlOiBKb2luVGFibGUsIHZpc2libGU6Rm9yZWlnbktleSgpLCBvcHRpb25zOiAkcm9vdC5UYWJsZXMubW9kZWwsIG9wdGlvbnNUZXh0OiAnVGFibGVOYW1lJ1wiIHBsYWNlaG9sZGVyPVwiRXggdGJsRW1wbG95ZWVzXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPjwvc2VsZWN0PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWVsZC12YWxpZGF0aW9uLXZhbGlkIGhlbHAtaW5saW5lIGluZGVudFwiIGRhdGEtdmFsbXNnLWZvcj1cIkZvcmVpZ25UYWJsZVwiIGRhdGEtdmFsbXNnLXJlcGxhY2U9XCJ0cnVlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wtZ3JvdXBcIiBkYXRhLWJpbmQ9XCJpZjogJHJvb3QuaXNTdG9yZWRQcm9jQ29sdW1uKCkgPT0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiIGRhdGEtYmluZD1cInZpc2libGU6Rm9yZWlnbktleSgpLCBhdHRyOiB7cmVxdWlyZWQ6IEZvcmVpZ25LZXkoKT8nVHJ1ZSc6bnVsbH1cIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+Rm9yZWlnbiBKb2luPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJGb3JlaWduSm9pbl9TZWxlY3RlZElkXCIgbmFtZT1cIkZvcmVpZ25Kb2luLlNlbGVjdGVkSWRcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogRm9yZWlnbkpvaW4sIHZpc2libGU6Rm9yZWlnbktleSgpLCBhdHRyOiB7cmVxdWlyZWQ6IEZvcmVpZ25LZXkoKT8nVHJ1ZSc6bnVsbH1cIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBzZWxlY3RlZD1cInNlbGVjdGVkXCIgdmFsdWU9XCJJbm5lclwiPklubmVyPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkxlZnRcIj5MZWZ0PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlJpZ2h0XCI+UmlnaHQ8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpZWxkLXZhbGlkYXRpb24tdmFsaWQgaGVscC1pbmxpbmUgaW5kZW50XCIgZGF0YS12YWxtc2ctZm9yPVwiRm9yZWlnbkpvaW5cIiBkYXRhLXZhbG1zZy1yZXBsYWNlPVwidHJ1ZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWdyb3VwXCIgZGF0YS1iaW5kPVwiaWY6ICRyb290LmlzU3RvcmVkUHJvY0NvbHVtbigpID09IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zIGNvbnRyb2wtbGFiZWxcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOkZvcmVpZ25LZXkoKSwgYXR0cjoge3JlcXVpcmVkOiBGb3JlaWduS2V5KCk/J1RydWUnOm51bGwsIHBsYWNlaG9sZGVyOiAnRXggRW1wbG95ZWVJZCd9XCIgcGxhY2Vob2xkZXI9XCJFeCBFbXBsb3llZUlkXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPkZvcmVpZ24gS2V5IEZpZWxkPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJGb3JlaWduS2V5RmllbGRcIiBuYW1lPVwiRm9yZWlnbktleUZpZWxkXCIgZGF0YS1iaW5kPVwib3B0aW9uczogSm9pblRhYmxlKCkuQ29sdW1ucywgb3B0aW9uc1RleHQ6ICdDb2x1bW5OYW1lJywgb3B0aW9uc1ZhbHVlOiAnQ29sdW1uTmFtZScsIHZhbHVlOiBGb3JlaWduS2V5RmllbGQsIHZpc2libGU6Rm9yZWlnbktleSgpLCBhdHRyOiB7cmVxdWlyZWQ6IEZvcmVpZ25LZXkoKT8nVHJ1ZSc6bnVsbH1cIiBwbGFjZWhvbGRlcj1cIkV4IEVtcGxveWVlSWRcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInZpc2libGU6Rm9yZWlnbktleSgpXCIgZGF0YS10b2dnbGU9XCJ0b29sdGlwXCIgZGF0YS1wbGFjZW1lbnQ9XCJyaWdodFwiIGNsYXNzPVwiZmEgZmEtcXVlc3Rpb24tY2lyY2xlIGhlbHB0aXBcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgdGl0bGU9XCJGb3JlaWduIEtleSBmaWVsZCBpcyBhIENvbHVtbiBmcm9tIHRoZSBGb3JlaWduIHRhYmxlIHdoaWNoIGlzIHVzZWQgYXMgdGhlIEtleSBmaWVsZFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWdyb3VwXCIgZGF0YS1iaW5kPVwiaWY6ICRyb290LmlzU3RvcmVkUHJvY0NvbHVtbigpID09IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zIGNvbnRyb2wtbGFiZWxcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOkZvcmVpZ25LZXkoKSwgYXR0cjoge3JlcXVpcmVkOiBGb3JlaWduS2V5KCk/J1RydWUnOm51bGwsIHBsYWNlaG9sZGVyOiAnRXggRW1wbG95ZWVOYW1lJ31cIiBwbGFjZWhvbGRlcj1cIkV4IEVtcGxveWVlTmFtZVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5Gb3JlaWduIFZhbHVlIEZpZWxkPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJGb3JlaWduVmFsdWVGaWVsZFwiIG5hbWU9XCJGb3JlaWduVmFsdWVGaWVsZFwiIGRhdGEtYmluZD1cIm9wdGlvbnM6IEpvaW5UYWJsZSgpLkNvbHVtbnMsIG9wdGlvbnNUZXh0OiAnQ29sdW1uTmFtZScsIG9wdGlvbnNWYWx1ZTogJ0NvbHVtbk5hbWUnLCB2YWx1ZTogRm9yZWlnblZhbHVlRmllbGQsIHZpc2libGU6Rm9yZWlnbktleSgpLCBhdHRyOiB7cmVxdWlyZWQ6IEZvcmVpZ25LZXkoKT8nVHJ1ZSc6bnVsbH1cIiBwbGFjZWhvbGRlcj1cIkV4IEVtcGxveWVlTmFtZVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidmlzaWJsZTpGb3JlaWduS2V5KClcIiBkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLXBsYWNlbWVudD1cInJpZ2h0XCIgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGUgaGVscHRpcFwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiB0aXRsZT1cIkZvcmVpZ24gVmFsdWUgZmllbGQgaXMgYSBDb2x1bW4gZnJvbSB0aGUgRm9yZWlnbiB0YWJsZSB3aGljaCBpcyB1c2VkIHRvIGRpc3BsYXkgdGhlIHZhbHVlIHRvIHRoZSBVc2VyIGluIHRoZSBSZXBvcnQgRGVzaWduZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogRm9yZWlnbktleVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2V0dXAgYSBjYXNjYWRpbmcgZmlsdGVyIGJ5IHNldHRpbmcgdXAgYSBwYXJlbnQgZm9yIHRoZSBmb3JlaWduIGtleSBiZWxvd1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiPlNldHVwIEZvcmVpZ24gS2V5IFBhcmVudD88L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImNoZWNrLWJveFwiIHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6Rm9yZWlnblBhcmVudEtleVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLXBsYWNlbWVudD1cInJpZ2h0XCIgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGUgaGVscHRpcFwiIHRpdGxlPVwiRm9yZWlnbiBrZXlzIHBhcmVudCBhbGxvd3MgY2FzY2FkaW5nIGRyb3Bkb3duIHNlbGVjdGlvbiBpbiBGaWx0ZXJzXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiIGRhdGEtYmluZD1cInZpc2libGU6Rm9yZWlnblBhcmVudEtleSgpLCBhdHRyOiB7cmVxdWlyZWQ6IEZvcmVpZ25QYXJlbnRLZXkoKT8nVHJ1ZSc6bnVsbCwgcGxhY2Vob2xkZXI6ICdFeCB0YmxFbXBsb3llZXMnfVwiIHBsYWNlaG9sZGVyPVwiRXggdGJsRW1wbG95ZWVzXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPlBhcmVudCBUYWJsZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZGF0YS1iaW5kPVwidmFsdWU6IEZvcmVpZ25Kb2luVGFibGUsIHZpc2libGU6Rm9yZWlnblBhcmVudEtleSgpLCBvcHRpb25zOiAkcm9vdC5UYWJsZXMubW9kZWwsIG9wdGlvbnNUZXh0OiAnVGFibGVOYW1lJ1wiIHBsYWNlaG9sZGVyPVwiRXggdGJsRW1wbG95ZWVzXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPjwvc2VsZWN0PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWVsZC12YWxpZGF0aW9uLXZhbGlkIGhlbHAtaW5saW5lIGluZGVudFwiIGRhdGEtdmFsbXNnLWZvcj1cIkZvcmVpZ25Kb2luVGFibGVcIiBkYXRhLXZhbG1zZy1yZXBsYWNlPVwidHJ1ZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wtZ3JvdXBcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOkZvcmVpZ25QYXJlbnRLZXkoKVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tMyBjb250cm9sLWxhYmVsXCIgZGF0YS1iaW5kPVwiYXR0cjoge3JlcXVpcmVkOiBGb3JlaWduUGFyZW50S2V5KCk/J1RydWUnOm51bGwsIHBsYWNlaG9sZGVyOiAnRXggRW1wbG95ZWVJZCd9XCI+UGFyZW50IEtleSBGaWVsZDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZGF0YS1iaW5kPVwib3B0aW9uczogRm9yZWlnbkpvaW5UYWJsZSgpLkNvbHVtbnMsIG9wdGlvbnNUZXh0OiAnQ29sdW1uTmFtZScsIG9wdGlvbnNWYWx1ZTogJ0NvbHVtbk5hbWUnLCB2YWx1ZTogRm9yZWlnblBhcmVudEtleUZpZWxkLCBhdHRyOiB7cmVxdWlyZWQ6IEZvcmVpZ25QYXJlbnRLZXkoKT8nVHJ1ZSc6bnVsbH1cIiBwbGFjZWhvbGRlcj1cIkV4IEVtcGxveWVlSWRcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS10b2dnbGU9XCJ0b29sdGlwXCIgZGF0YS1wbGFjZW1lbnQ9XCJyaWdodFwiIGNsYXNzPVwiZmEgZmEtcXVlc3Rpb24tY2lyY2xlIGhlbHB0aXBcIiB0aXRsZT1cIlBhcmVudCBLZXkgZmllbGQgaXMgYSBDb2x1bW4gZnJvbSB0aGUgUGFyZW50IHRhYmxlIHdoaWNoIGlzIHVzZWQgYXMgdGhlIGtleSBpbiBjYXNjYWRpbmcgZmlsdGVyc1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiIGRhdGEtYmluZD1cInZpc2libGU6Rm9yZWlnblBhcmVudEtleSgpXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zIGNvbnRyb2wtbGFiZWxcIiBkYXRhLWJpbmQ9XCJhdHRyOiB7cmVxdWlyZWQ6IEZvcmVpZ25QYXJlbnRLZXkoKT8nVHJ1ZSc6bnVsbCwgcGxhY2Vob2xkZXI6ICdFeCBFbXBsb3llZU5hbWUnfVwiPlBhcmVudCBWYWx1ZSBGaWVsZDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZGF0YS1iaW5kPVwib3B0aW9uczogRm9yZWlnbkpvaW5UYWJsZSgpLkNvbHVtbnMsIG9wdGlvbnNUZXh0OiAnQ29sdW1uTmFtZScsIG9wdGlvbnNWYWx1ZTogJ0NvbHVtbk5hbWUnLCB2YWx1ZTogRm9yZWlnblBhcmVudFZhbHVlRmllbGQsIGF0dHI6IHtyZXF1aXJlZDogRm9yZWlnblBhcmVudEtleSgpPydUcnVlJzpudWxsfVwiIHBsYWNlaG9sZGVyPVwiRXggRW1wbG95ZWVOYW1lXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtdG9nZ2xlPVwidG9vbHRpcFwiIGRhdGEtcGxhY2VtZW50PVwicmlnaHRcIiBjbGFzcz1cImZhIGZhLXF1ZXN0aW9uLWNpcmNsZSBoZWxwdGlwXCIgdGl0bGU9XCJQYXJlbnQgVmFsdWUgZmllbGQgaXMgYSBDb2x1bW4gZnJvbSB0aGUgUGFyZW50IHRhYmxlIHdoaWNoIGlzIHVzZWQgdG8gZGlzcGxheSB0aGUgdmFsdWUgdG8gdGhlIFVzZXIgaW4gdGhlIFJlcG9ydCBEZXNpZ25lciBmb3IgY2FzY2FkaW5nIGZpbHRlcnNcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wtZ3JvdXBcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOkZvcmVpZ25QYXJlbnRLZXkoKVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tMyBjb250cm9sLWxhYmVsXCIgZGF0YS1iaW5kPVwiYXR0cjoge3JlcXVpcmVkOiBGb3JlaWduUGFyZW50S2V5KCk/J1RydWUnOm51bGwsIHBsYWNlaG9sZGVyOiAnRXggRW1wbG95ZWVOYW1lJ31cIj5Gb3JlaWduIEtleSBGaWx0ZXIgRmllbGQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cIm9wdGlvbnM6IEpvaW5UYWJsZSgpLkNvbHVtbnMsIG9wdGlvbnNUZXh0OiAnQ29sdW1uTmFtZScsIG9wdGlvbnNWYWx1ZTogJ0NvbHVtbk5hbWUnLCB2YWx1ZTogRm9yZWlnblBhcmVudEFwcGx5VG8sIGF0dHI6IHtyZXF1aXJlZDogRm9yZWlnblBhcmVudEtleSgpPydUcnVlJzpudWxsfVwiIHBsYWNlaG9sZGVyPVwiRXggRW1wbG95ZWVOYW1lXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtdG9nZ2xlPVwidG9vbHRpcFwiIGRhdGEtcGxhY2VtZW50PVwicmlnaHRcIiBjbGFzcz1cImZhIGZhLXF1ZXN0aW9uLWNpcmNsZSBoZWxwdGlwXCIgdGl0bGU9XCJGb3JlaWduIEtleSBGaWx0ZXIgVmFsdWUgZmllbGQgaXMgYSBDb2x1bW4gZnJvbSB0aGUgRm9yZWlnbiB0YWJsZSB3aGVyZSB0aGUgc2VsZWN0ZWQgcGFyZW50IGZpbHRlciB3aWxsIGJlIGFwcGxpZWQgZm9yIGNhc2NhZGluZyBmaWx0ZXJzXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS08ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zIGNvbnRyb2wtbGFiZWxcIj5SZXF1aXJlIEZvcmVpZ24gS2V5IFBhcmVudD88L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImNoZWNrLWJveFwiIHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6Rm9yZWlnblBhcmVudFJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtdG9nZ2xlPVwidG9vbHRpcFwiIGRhdGEtcGxhY2VtZW50PVwicmlnaHRcIiBjbGFzcz1cImZhIGZhLXF1ZXN0aW9uLWNpcmNsZSBoZWxwdGlwXCIgdGl0bGU9XCJGb3JlaWduIGtleXMgcGFyZW50IGNhbiBiZSBvcHRpb25hbCBvciBzZXQgdG8gcmVxdWlyZWQgZm9yIGNhc2NhZGluZyBmaWx0ZXJzXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pi0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgdGl0bGU9XCJNYW5hZ2UgUm9sZSBBY2Nlc3NcIiBkYXRhLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS10YXJnZXQ9XCIjcm9sZS1hY2Nlc3MtbW9kYWxcIiBkYXRhLWJpbmQ9XCJjbGljazogJHJvb3Quc2VsZWN0QWxsb3dlZFJvbGVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXVzZXJcIj48L2k+TWFuYWdlIFJvbGUgQWNjZXNzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIj5Eb25lPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwibW9kYWxcIiBpZD1cInByb2NlZHVyZS1tb2RhbFwiIHJvbGU9XCJkaWFsb2dcIiB0YWJpbmRleD1cIi0yXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLWxnXCIgcm9sZT1cImRvY3VtZW50XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnQgXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+QWRkIFN0b3JlZCBQcm9jPC9oND5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2xvc2VcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiPjxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0yIGNvbnRyb2wtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgU2VhcmNoIGZvclxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZGF0YS1iaW5kPVwidmFsdWU6IHNlYXJjaFByb2NlZHVyZVRlcm1cIiBwbGFjZWhvbGRlcj1cIlNlYXJjaCBzdG9yZWQgcHJvY2VkdXJlcyBieSBuYW1lXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiBzZWFyY2hTdG9yZWRQcm9jZWR1cmVcIj5TZWFyY2g8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVudSByb3dcIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAyMHB4O1wiIGRhdGEtYmluZD1cImZvcmVhY2g6IGZvdW5kUHJvY2VkdXJlc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZW51LWNhdGVnb3J5IGNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGNsZWFyZml4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBUYWJsZU5hbWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWwteHNcIj5Qcm9jZWR1cmU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbVwiIHRpdGxlPVwiU2F2ZSB0aGlzIFByb2NlZHVyZVwiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpeyRyb290LnNhdmVQcm9jZWR1cmUoJGRhdGEuVGFibGVOYW1lLCB0cnVlKTt9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtc2F2ZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJwdWxsLXJpZ2h0XCIgZGF0YS10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtYmluZD1cImF0dHI6IHsnZGF0YS10YXJnZXQnOiAnI3NwXycrJGluZGV4KCl9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWRvd25cIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImF0dHI6IHtpZDogJ3NwXycrJGluZGV4KCl9XCIgY2xhc3M9XCJwYW5lbC1jb2xsYXBzZSBjb2xsYXBzZSBpblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYXkgTmFtZTxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cImVkaXRhYmxlOiBEaXNwbGF5TmFtZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzbWFsbFwiPkNvbHVtbnM8L2xhYmVsPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cFwiIGRhdGEtYmluZD1cImZvcmVhY2g6IENvbHVtbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwiZWRpdGFibGU6IERpc3BsYXlOYW1lXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1pbmZvXCIgZGF0YS1iaW5kPVwidGV4dDogRmllbGRUeXBlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzbWFsbFwiPlBhcmFtdGVyczwvbGFiZWw+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWdyb3VwXCIgZGF0YS1iaW5kPVwiZm9yZWFjaDogUGFyYW1ldGVyc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJlZGl0YWJsZTogRGlzcGxheU5hbWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWluZm9cIiBkYXRhLWJpbmQ9XCJ0ZXh0OiBQYXJhbWV0ZXJEYXRhVHlwZVN0cmluZ1wiPjwvc3Bhbj48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgVmFsdWU6IDxzcGFuIGRhdGEtYmluZD1cImVkaXRhYmxlOiBQYXJhbWV0ZXJWYWx1ZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIj5Eb25lPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJwYXJhbWV0ZXItbW9kYWxcIiByb2xlPVwiZGlhbG9nXCIgdGFiaW5kZXg9XCItMVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCIgZGF0YS1iaW5kPVwid2l0aDogZWRpdFBhcmFtZXRlcigpXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJteU1vZGFsTGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICBNYW5hZ2VcclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZGF0YS1iaW5kPVwidGV4dDogUGFyYW1ldGVyTmFtZVwiPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2g0PlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+PHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICA8cD5DaG9vc2Ugb3B0aW9ucyB0aGF0IHdpbGwgZGV0ZXJtaW5lIGhvdyB1c2VycyBpbnRlcmFjdCB3aXRoIHRoaXMgcGFyYW1ldGVyIG9uIFJlcG9ydHM8L3A+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ob3Jpem9udGFsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tMyBjb250cm9sLWxhYmVsXCIgZGF0YS1iaW5kPVwiYXR0cjp7cGxhY2Vob2xkZXI6J0V4IEZpcnN0IE5hbWUnfVwiIHBsYWNlaG9sZGVyPVwiRXggRmlyc3QgTmFtZVwiPkRpc3BsYXkgTmFtZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdGV4dC1ib3ggc2luZ2xlLWxpbmVcIiBkYXRhLXZhbD1cInRydWVcIiBkYXRhLXZhbC1yZXF1aXJlZD1cIlRoZSBEaXNwbGF5TmFtZSBmaWVsZCBpcyByZXF1aXJlZC5cIiBuYW1lPVwiRGlzcGxheU5hbWVcIiB0eXBlPVwidGV4dFwiIHZhbHVlPVwiRmlyc3QgTmFtZVwiIGRhdGEtYmluZD1cInZhbHVlOiBEaXNwbGF5TmFtZSwgYXR0cjp7cGxhY2Vob2xkZXI6J0V4IEZpcnN0IE5hbWUnfVwiIHBsYWNlaG9sZGVyPVwiRXggRmlyc3QgTmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLXBsYWNlbWVudD1cInJpZ2h0XCIgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGUgaGVscHRpcFwiIHRpdGxlPVwiVGhpcyBpcyBhIGZyaWVuZGx5IG5hbWUgdG8gZGlzcGxheSB0byB5b3VyIHVzZXJzXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiPkRlZmF1bHQgVmFsdWU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwiZWRpdGFibGU6IFBhcmFtZXRlclZhbHVlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiIGRhdGEtYmluZD1cIlwiPkhpZGRlbiBQYXJhbWV0ZXI8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImNoZWNrLWJveFwiIGRhdGEtdmFsPVwidHJ1ZVwiIHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwidHJ1ZVwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IEhpZGRlbiwgZW5hYmxlOiBQYXJhbWV0ZXJWYWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiIGRhdGEtYmluZD1cIlwiPlJlcXVpcmVkPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJjaGVjay1ib3hcIiBkYXRhLXZhbD1cInRydWVcIiB0eXBlPVwiY2hlY2tib3hcIiB2YWx1ZT1cInRydWVcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOlJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tMyBjb250cm9sLWxhYmVsXCIgZGF0YS1iaW5kPVwiXCI+VXNlIExvb2t1cCBUYWJsZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiY2hlY2stYm94XCIgZGF0YS12YWw9XCJ0cnVlXCIgbmFtZT1cIkZvcmVpZ25LZXlcIiB0eXBlPVwiY2hlY2tib3hcIiB2YWx1ZT1cInRydWVcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOkZvcmVpZ25LZXlcIj48aW5wdXQgbmFtZT1cIkZvcmVpZ25LZXlcIiB0eXBlPVwiaGlkZGVuXCIgdmFsdWU9XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLXBsYWNlbWVudD1cInJpZ2h0XCIgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGUgaGVscHRpcFwiIHRpdGxlPVwiVXNpbmcgbG9va3VwIHRhYmxlIGFsbG93cyBmcmllbmRseSBzZWxlY3Rpb24gaW4gcmVwb3J0IHVzaW5nIGEgRHJvcGRvd24gTGlzdFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zIGNvbnRyb2wtbGFiZWxcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOkZvcmVpZ25LZXkoKSwgYXR0cjoge3JlcXVpcmVkOiBGb3JlaWduS2V5KCk/J1RydWUnOm51bGwsIHBsYWNlaG9sZGVyOiAnRXggdGJsRW1wbG95ZWVzJ31cIiBwbGFjZWhvbGRlcj1cIkV4IHRibEVtcGxveWVlc1wiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5Mb29rdXAgVGFibGU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cInZhbHVlOiBKb2luVGFibGUsIHZpc2libGU6Rm9yZWlnbktleSgpLCBvcHRpb25zOiAkcm9vdC5Qcm9jZWR1cmVzLnRhYmxlcywgb3B0aW9uc1RleHQ6ICdUYWJsZU5hbWUnXCIgcGxhY2Vob2xkZXI9XCJFeCB0YmxFbXBsb3llZXNcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+PC9zZWxlY3Q+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpZWxkLXZhbGlkYXRpb24tdmFsaWQgaGVscC1pbmxpbmUgaW5kZW50XCIgZGF0YS12YWxtc2ctZm9yPVwiRm9yZWlnblRhYmxlXCIgZGF0YS12YWxtc2ctcmVwbGFjZT1cInRydWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tMyBjb250cm9sLWxhYmVsXCIgZGF0YS1iaW5kPVwidmlzaWJsZTpGb3JlaWduS2V5KCksIGF0dHI6IHtyZXF1aXJlZDogRm9yZWlnbktleSgpPydUcnVlJzpudWxsLCBwbGFjZWhvbGRlcjogJ0V4IEVtcGxveWVlSWQnfVwiIHBsYWNlaG9sZGVyPVwiRXggRW1wbG95ZWVJZFwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5Mb29rdXAgS2V5IEZpZWxkPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBuYW1lPVwiRm9yZWlnbktleUZpZWxkXCIgZGF0YS1iaW5kPVwib3B0aW9uczogSm9pblRhYmxlKCkuQ29sdW1ucywgb3B0aW9uc1RleHQ6ICdDb2x1bW5OYW1lJywgb3B0aW9uc1ZhbHVlOiAnQ29sdW1uTmFtZScsIHZhbHVlOiBGb3JlaWduS2V5RmllbGQsIHZpc2libGU6Rm9yZWlnbktleSgpLCBhdHRyOiB7cmVxdWlyZWQ6IEZvcmVpZ25LZXkoKT8nVHJ1ZSc6bnVsbH1cIiBwbGFjZWhvbGRlcj1cIkV4IEVtcGxveWVlSWRcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInZpc2libGU6Rm9yZWlnbktleSgpXCIgZGF0YS10b2dnbGU9XCJ0b29sdGlwXCIgZGF0YS1wbGFjZW1lbnQ9XCJyaWdodFwiIGNsYXNzPVwiZmEgZmEtcXVlc3Rpb24tY2lyY2xlIGhlbHB0aXBcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgdGl0bGU9XCJGb3JlaWduIEtleSBmaWVsZCBpcyBhIENvbHVtbiBmcm9tIHRoZSBGb3JlaWduIHRhYmxlIHdoaWNoIGlzIHVzZWQgYXMgdGhlIEtleSBmaWVsZFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zIGNvbnRyb2wtbGFiZWxcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOkZvcmVpZ25LZXkoKSwgYXR0cjoge3JlcXVpcmVkOiBGb3JlaWduS2V5KCk/J1RydWUnOm51bGwsIHBsYWNlaG9sZGVyOiAnRXggRW1wbG95ZWVOYW1lJ31cIiBwbGFjZWhvbGRlcj1cIkV4IEVtcGxveWVlTmFtZVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5Mb29rdXAgVmFsdWUgRmllbGQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIG5hbWU9XCJGb3JlaWduVmFsdWVGaWVsZFwiIGRhdGEtYmluZD1cIm9wdGlvbnM6IEpvaW5UYWJsZSgpLkNvbHVtbnMsIG9wdGlvbnNUZXh0OiAnQ29sdW1uTmFtZScsIG9wdGlvbnNWYWx1ZTogJ0NvbHVtbk5hbWUnLCB2YWx1ZTogRm9yZWlnblZhbHVlRmllbGQsIHZpc2libGU6Rm9yZWlnbktleSgpLCBhdHRyOiB7cmVxdWlyZWQ6IEZvcmVpZ25LZXkoKT8nVHJ1ZSc6bnVsbH1cIiBwbGFjZWhvbGRlcj1cIkV4IEVtcGxveWVlTmFtZVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidmlzaWJsZTpGb3JlaWduS2V5KClcIiBkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLXBsYWNlbWVudD1cInJpZ2h0XCIgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGUgaGVscHRpcFwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiB0aXRsZT1cIkxvb2t1cCBWYWx1ZSBmaWVsZCBpcyBhIENvbHVtbiBmcm9tIHRoZSBMb29rdXAgdGFibGUgd2hpY2ggaXMgdXNlZCB0byBkaXNwbGF5IHRoZSB2YWx1ZSB0byB0aGUgVXNlciBpbiB0aGUgUmVwb3J0IERlc2lnbmVyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCI+RG9uZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJtb2RhbCBmYWRlXCIgaWQ9XCJyb2xlLWFjY2Vzcy1tb2RhbFwiIHJvbGU9XCJkaWFsb2dcIiB0YWJpbmRleD1cIi0yXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCIgcm9sZT1cImRvY3VtZW50XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIiBkYXRhLWJpbmQ9XCJ3aXRoOiBlZGl0QWxsb3dlZFJvbGVzXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+TWFuYWdlIEFjY2VzcyBieSBSb2xlczwvaDQ+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgIDxwPkNob29zZSBVc2VyIFJvbGVzIHRoYXQgd2lsbCBoYXZlIEFjY2VzczwvcD5cclxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwic21hbGxcIj5Ob3RlOiBBbGwgVXNlcnMgd2lsbCBoYXZlIGFjY2VzcyBpZiBubyByZXN0cmljdGVkIHJvbGVzIGFyZSBzZXR1cDwvcD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWdyb3VwXCIgZGF0YS1iaW5kPVwiZm9yZWFjaDogQWxsb3dlZFJvbGVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiIHN0eWxlPVwicGFkZGluZy10b3A6IDJweDsgcGFkZGluZy1ib3R0b206IDJweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogJGRhdGFcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1kYW5nZXIgcHVsbC1yaWdodFwiPjxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIiBkYXRhLWJpbmQ9XCJjbGljazogJHJvb3QucmVtb3ZlQWxsb3dlZFJvbGVcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiB0eXBlPVwidGV4dFwiIGRhdGEtYmluZD1cInZhbHVlOiAkcm9vdC5uZXdBbGxvd2VkUm9sZVwiIHBsYWNlaG9sZGVyPVwiRXggU2FsZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiAkcm9vdC5hZGRBbGxvd2VkUm9sZVwiPkFkZDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCI+RG9uZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJjbGVhcmZpeFwiPjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJhZGQtY29ubmVjdGlvbi1tb2RhbFwiIHJvbGU9XCJkaWFsb2dcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIiByb2xlPVwiZG9jdW1lbnRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiIGRhdGEtYmluZD1cIndpdGg6IG5ld0RhdGFDb25uZWN0aW9uXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+QWRkIGEgbmV3IERhdGEgQ29ubmVjdGlvbjwvaDQ+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgIDxwPkNob29zZSBVc2VyIFJvbGVzIHRoYXQgd2lsbCBoYXZlIEFjY2VzczwvcD5cclxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwic21hbGxcIj5Ob3RlOiBBbGwgVXNlcnMgd2lsbCBoYXZlIGFjY2VzcyBpZiBubyByZXN0cmljdGVkIHJvbGVzIGFyZSBzZXR1cDwvcD5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tMyBjb250cm9sLWxhYmVsXCI+Q29ubmVjdGlvbiBOYW1lPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIHRleHQtYm94XCIgZGF0YS12YWw9XCJ0cnVlXCIgZGF0YS12YWwtcmVxdWlyZWQ9XCJDb25uZWN0aW9uIE5hbWUgaXMgcmVxdWlyZWQuXCIgdHlwZT1cInRleHRcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogTmFtZVwiIHBsYWNlaG9sZGVyPVwiXCIgaWQ9XCJhZGQtY29ubi1uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zIGNvbnRyb2wtbGFiZWxcIj5Db25uZWN0aW9uIEtleTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbCB0ZXh0LWJveFwiIGRhdGEtdmFsPVwidHJ1ZVwiIGRhdGEtdmFsLXJlcXVpcmVkPVwiQ29ubmVjdGlvbiBLZXkgaXMgcmVxdWlyZWQuXCIgdHlwZT1cInRleHRcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogQ29ubmVjdGlvbktleVwiIHBsYWNlaG9sZGVyPVwiXCIgaWQ9XCJhZGQtY29ubi1rZXlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS10b2dnbGU9XCJ0b29sdGlwXCIgZGF0YS1wbGFjZW1lbnQ9XCJyaWdodFwiIGNsYXNzPVwiZmEgZmEtcXVlc3Rpb24tY2lyY2xlIGhlbHB0aXBcIiB0aXRsZT1cIlRoaXMgaXMgdGhlIENvbm5lY3Rpb24gS2V5IGluIHlvdXIgd2ViLmNvbmZpZyBmb3IgeW91ciBTUUwgQ29ubmVjdGlvbiBTdHJpbmdcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVjay1ib3ggY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBjb3B5U2NoZW1hXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3B5IFNjaGVtYSBmcm9tIGV4aXN0aW5nIENvbm5lY3Rpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCIgZGF0YS1iaW5kPVwidmlzaWJsZTogY29weVNjaGVtYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zIGNvbnRyb2wtbGFiZWxcIj5DaG9vc2UgQ29ubmVjdGlvbjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBzdHlsZT1cIm1heC13aWR0aDogMzAwcHg7XCIgZGF0YS1iaW5kPVwib3B0aW9uczogJHJvb3QuRGF0YUNvbm5lY3Rpb25zLCBvcHRpb25zVGV4dDogJ0RhdGFDb25uZWN0TmFtZScsIG9wdGlvbnNWYWx1ZTogJ0RhdGFDb25uZWN0R3VpZCcsIHZhbHVlOiBjb3B5RnJvbVwiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRyb290LmFkZERhdGFDb25uZWN0aW9uXCI+Q3JlYXRlPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwiY2xlYXJmaXhcIj48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJtb2RhbFwiIGlkPVwiY3VzdG9tLXNxbC1tb2RhbFwiIHRhYmluZGV4PVwiLTFcIiByb2xlPVwiZGlhbG9nXCIgYXJpYS1sYWJlbGxlZGJ5PVwibXlNb2RhbExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLWxnXCIgZGF0YS1iaW5kPVwid2l0aDogY3VzdG9tU3FsXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5FbnRlciBTZWxlY3QgU1FMIGZvciB5b3VyIERhdGE8L2g1PlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgZGF0YS1iaW5kPVwidmFsaWRhdGlvbkVsZW1lbnQ6IGN1c3RvbVRhYmxlTmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJjdXN0b20tdGFibGUtbmFtZVwiPkN1c3RvbSBUYWJsZSBOYW1lPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIG5hbWU9XCJjdXN0b21UYWJsZU5hbWVcIiBwbGFjZWhvbGRlcj1cIkVudGVyIHRhYmxlIG5hbWVcIiBkYXRhLWJpbmQ9XCJ0ZXh0SW5wdXQ6IGN1c3RvbVRhYmxlTmFtZVwiIHJlcXVpcmVkPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCI+Q3VzdG9tIFRhYmxlIE5hbWUgaXMgcmVxdWlyZWQuPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiY2hlY2stYm94XCIgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogdXNlQWlcIj4gVXNlIENoYXRHUFQgdG8gYnVpbGQgdGhlIHF1ZXJ5P1xyXG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidmlzaWJsZTogdXNlQWlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cCBpZD1cInF1ZXJ5LWlucHV0XCIgY2xhc3M9XCJxdWVyeS1pbnB1dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBTaG93IG1lJm5ic3A7XHJcbiAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1iaW5kPVwiY2xpY2s6IGJ1aWxkU3FsVXNpbmdBaVwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPlByb2Nlc3Mgd2l0aCBDaGF0R1BUPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBkYXRhLWJpbmQ9XCJjbGljazogdGV4dFF1ZXJ5LnJlc2V0UXVlcnlcIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IGJ0bi1zbVwiPlN0YXJ0IG92ZXI8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8aHIgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgZGF0YS1iaW5kPVwidmFsaWRhdGlvbkVsZW1lbnQ6IGN1c3RvbVNxbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJjdXN0b20tc3FsXCI+Q3VzdG9tIFNRTDwvbGFiZWw+IHwgPGEgaHJlZj1cIiNcIiBkYXRhLWJpbmQ9XCJjbGljazogYmVhdXRpZnlTcWxcIj5CZWF1dGlmeSBTcWw8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgc3R5bGU9XCJoZWlnaHQ6IDI0MHB4O1wiIG5hbWU9XCJjdXN0b21TcWxcIiBkYXRhLWJpbmQ9XCJ0ZXh0SW5wdXQ6IGN1c3RvbVNxbFwiIHJlcXVpcmVkPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIj5DdXN0b20gU1FMIGlzIHJlcXVpcmVkLjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IGV4ZWN1dGVTcWxcIj5TYXZlIGNoYW5nZXM8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPCEtLSBUZW1wbGF0ZXMgLS0+XHJcbjxkaXYgW2lubmVySHRtbF09XCJyZXBvcnRUZW1wbGF0ZXNcIj48L2Rpdj5cclxuPCEtLSBUZW1wbGF0ZXMgLS0+Il19
|