@pie-element/charting 10.1.0 → 10.2.0-mui-update.0

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.
@@ -0,0 +1,1676 @@
1
+ "use strict";
2
+
3
+ var _index = require("../index");
4
+ describe('setCorrectness', () => {
5
+ it('sets correctness on answers for partial scoring: incorrect', () => {
6
+ const corectnessAnswers = (0, _index.setCorrectness)([{
7
+ value: 0,
8
+ label: 'A'
9
+ }, {
10
+ value: 1,
11
+ label: 'B'
12
+ }, {
13
+ value: 2,
14
+ label: 'C'
15
+ }], true);
16
+ expect(corectnessAnswers).toEqual([{
17
+ value: 0,
18
+ label: 'A',
19
+ correctness: {
20
+ value: 'incorrect',
21
+ label: 'incorrect'
22
+ }
23
+ }, {
24
+ value: 1,
25
+ label: 'B',
26
+ correctness: {
27
+ value: 'incorrect',
28
+ label: 'incorrect'
29
+ }
30
+ }, {
31
+ value: 2,
32
+ label: 'C',
33
+ correctness: {
34
+ value: 'incorrect',
35
+ label: 'incorrect'
36
+ }
37
+ }]);
38
+ });
39
+ it('sets correctness on answers for all or nothing: correct', () => {
40
+ const corectnessAnswers = (0, _index.setCorrectness)([{
41
+ value: 0,
42
+ label: 'A'
43
+ }, {
44
+ value: 1,
45
+ label: 'B'
46
+ }, {
47
+ value: 2,
48
+ label: 'C'
49
+ }]);
50
+ expect(corectnessAnswers).toEqual([{
51
+ value: 0,
52
+ label: 'A',
53
+ correctness: {
54
+ value: 'correct',
55
+ label: 'correct'
56
+ }
57
+ }, {
58
+ value: 1,
59
+ label: 'B',
60
+ correctness: {
61
+ value: 'correct',
62
+ label: 'correct'
63
+ }
64
+ }, {
65
+ value: 2,
66
+ label: 'C',
67
+ correctness: {
68
+ value: 'correct',
69
+ label: 'correct'
70
+ }
71
+ }]);
72
+ });
73
+ it('sets correctness on answers if answers not set', () => {
74
+ expect((0, _index.setCorrectness)([])).toEqual([]);
75
+ expect((0, _index.setCorrectness)()).toEqual([]);
76
+ });
77
+ });
78
+ describe('checkLabelsEquality', () => {
79
+ it('returns equality between labels', () => {
80
+ expect((0, _index.checkLabelsEquality)('label', 'Label')).toEqual(true);
81
+ expect((0, _index.checkLabelsEquality)('label', 'LABEL')).toEqual(true);
82
+ expect((0, _index.checkLabelsEquality)('label', 'lAbEl')).toEqual(true);
83
+ expect((0, _index.checkLabelsEquality)('label', 'Test')).toEqual(false);
84
+ expect((0, _index.checkLabelsEquality)('label', 'Test')).not.toEqual(true);
85
+ });
86
+ });
87
+ describe('filterCategories', () => {
88
+ it('returns categories filtered with correct values', () => {
89
+ expect((0, _index.filterCategories)(null)).toEqual([]);
90
+ expect((0, _index.filterCategories)([{
91
+ value: 0,
92
+ label: 'A',
93
+ interactive: true,
94
+ editable: true
95
+ }, {
96
+ value: 1,
97
+ label: 'B',
98
+ interactive: true,
99
+ editable: true
100
+ }, {
101
+ value: 2,
102
+ label: 'C',
103
+ interactive: true,
104
+ editable: true
105
+ }])).toEqual([{
106
+ value: 0,
107
+ label: 'A',
108
+ interactive: true,
109
+ editable: true
110
+ }, {
111
+ value: 1,
112
+ label: 'B',
113
+ interactive: true,
114
+ editable: true
115
+ }, {
116
+ value: 2,
117
+ label: 'C',
118
+ interactive: true,
119
+ editable: true
120
+ }]);
121
+ expect((0, _index.filterCategories)([{
122
+ value: 0,
123
+ label: 'A',
124
+ interactive: true,
125
+ editable: false
126
+ }, {
127
+ value: 1,
128
+ label: 'B',
129
+ interactive: true,
130
+ editable: false
131
+ }, {
132
+ value: 2,
133
+ label: 'C',
134
+ interactive: true,
135
+ editable: false
136
+ }])).toEqual([{
137
+ value: 0,
138
+ label: 'A',
139
+ interactive: true,
140
+ editable: false
141
+ }, {
142
+ value: 1,
143
+ label: 'B',
144
+ interactive: true,
145
+ editable: false
146
+ }, {
147
+ value: 2,
148
+ label: 'C',
149
+ interactive: true,
150
+ editable: false
151
+ }]);
152
+ });
153
+ });
154
+ describe('getScore partialScoring test', () => {
155
+ const mkQuestion = extras => ({
156
+ correctAnswer: {
157
+ data: [{
158
+ label: 'A',
159
+ value: 0,
160
+ editable: true
161
+ }, {
162
+ label: 'B',
163
+ value: 1,
164
+ editable: true
165
+ }, {
166
+ label: 'C',
167
+ value: 2,
168
+ editable: true
169
+ }]
170
+ },
171
+ data: [],
172
+ ...extras
173
+ });
174
+
175
+ // if model.scoringType = 'all or nothing'
176
+ // if env.partialScoring = false => dichotomous
177
+ // else env.partialScoring = true || env.partialScoring = undefined => dichotomous
178
+ // else model.scoringType = 'partial scoring' || model.scoringType = undefined
179
+ // if env.partialScoring = false => dichotomous
180
+ // else env.partialScoring = true || model.partialScoring = undefined => partial-credit scoring
181
+ it.each`
182
+ mode | partialScoring | scoringType | expected
183
+ ${'evaluate'} | ${false} | ${'all or nothing'} | ${0}
184
+ ${'evaluate'} | ${true} | ${'all or nothing'} | ${0}
185
+ ${'evaluate'} | ${undefined} | ${'all or nothing'} | ${0}
186
+ ${'evaluate'} | ${false} | ${'partial scoring'} | ${0}
187
+ ${'evaluate'} | ${true} | ${'partial scoring'} | ${0.33}
188
+ ${'evaluate'} | ${undefined} | ${'partial scoring'} | ${0.33}
189
+ ${'evaluate'} | ${false} | ${undefined} | ${0}
190
+ ${'evaluate'} | ${true} | ${undefined} | ${0.33}
191
+ ${'evaluate'} | ${undefined} | ${undefined} | ${0.33}
192
+ `('env: { mode $mode, partialScoring $partialScoring }, model.scoringType = $scoringType => $expected', async ({
193
+ mode,
194
+ partialScoring,
195
+ scoringType,
196
+ expected
197
+ }) => {
198
+ const env = {
199
+ mode,
200
+ partialScoring
201
+ };
202
+ const session = {
203
+ answer: (0, _index.filterCategories)([{
204
+ label: 'A',
205
+ value: 0
206
+ }, {
207
+ label: 'C',
208
+ value: 2
209
+ }])
210
+ };
211
+ const mod = await (0, _index.model)(mkQuestion({
212
+ scoringType
213
+ }), session, env);
214
+ const result = await (0, _index.outcome)(mod, session, env);
215
+ expect(result.score).toEqual(expected);
216
+ });
217
+ });
218
+ describe('getScore all or nothing', () => {
219
+ const scoringType = 'all or nothing';
220
+ const question = {
221
+ correctAnswer: {
222
+ data: [{
223
+ label: 'A',
224
+ value: 0
225
+ }, {
226
+ label: 'B',
227
+ value: 1
228
+ }, {
229
+ label: 'C',
230
+ value: 2
231
+ }]
232
+ },
233
+ data: [],
234
+ scoringType
235
+ };
236
+ const assertGetScore = (message, session, expected) => {
237
+ it(message, () => {
238
+ expect((0, _index.getScore)(question, session)).toEqual(expected);
239
+ });
240
+ };
241
+ assertGetScore('response is correct', {
242
+ answer: (0, _index.filterCategories)([{
243
+ label: 'A',
244
+ value: 0
245
+ }, {
246
+ label: 'B',
247
+ value: 1
248
+ }, {
249
+ label: 'C',
250
+ value: 2
251
+ }])
252
+ }, {
253
+ score: 1,
254
+ answers: (0, _index.filterCategories)([{
255
+ label: 'A',
256
+ value: 0,
257
+ correctness: {
258
+ value: 'correct',
259
+ label: 'correct'
260
+ }
261
+ }, {
262
+ label: 'B',
263
+ value: 1,
264
+ correctness: {
265
+ value: 'correct',
266
+ label: 'correct'
267
+ }
268
+ }, {
269
+ label: 'C',
270
+ value: 2,
271
+ correctness: {
272
+ value: 'correct',
273
+ label: 'correct'
274
+ }
275
+ }])
276
+ });
277
+ assertGetScore('response is incorrect: incorrect value', {
278
+ answer: (0, _index.filterCategories)([{
279
+ label: 'A',
280
+ value: 0
281
+ }, {
282
+ label: 'B',
283
+ value: 2
284
+ }, {
285
+ label: 'C',
286
+ value: 2
287
+ }])
288
+ }, {
289
+ score: 0,
290
+ answers: (0, _index.filterCategories)([{
291
+ label: 'A',
292
+ value: 0,
293
+ correctness: {
294
+ value: 'correct',
295
+ label: 'correct'
296
+ }
297
+ }, {
298
+ label: 'B',
299
+ value: 2,
300
+ correctness: {
301
+ value: 'incorrect',
302
+ label: 'correct'
303
+ }
304
+ }, {
305
+ label: 'C',
306
+ value: 2,
307
+ correctness: {
308
+ value: 'correct',
309
+ label: 'correct'
310
+ }
311
+ }])
312
+ });
313
+ assertGetScore('response is incorrect: incorrect label', {
314
+ answer: (0, _index.filterCategories)([{
315
+ label: 'A',
316
+ value: 0
317
+ }, {
318
+ label: 'D',
319
+ value: 1
320
+ }, {
321
+ label: 'C',
322
+ value: 2
323
+ }])
324
+ }, {
325
+ score: 0,
326
+ answers: (0, _index.filterCategories)([{
327
+ label: 'A',
328
+ value: 0,
329
+ correctness: {
330
+ value: 'correct',
331
+ label: 'correct'
332
+ }
333
+ }, {
334
+ label: 'D',
335
+ value: 1,
336
+ correctness: {
337
+ value: 'correct',
338
+ label: 'incorrect'
339
+ }
340
+ }, {
341
+ label: 'C',
342
+ value: 2,
343
+ correctness: {
344
+ value: 'correct',
345
+ label: 'correct'
346
+ }
347
+ }])
348
+ });
349
+ assertGetScore('response is incorrect: incorrect value & label', {
350
+ answer: (0, _index.filterCategories)([{
351
+ label: 'A',
352
+ value: 0
353
+ }, {
354
+ label: 'D',
355
+ value: 2
356
+ }, {
357
+ label: 'C',
358
+ value: 2
359
+ }])
360
+ }, {
361
+ score: 0,
362
+ answers: (0, _index.filterCategories)([{
363
+ label: 'A',
364
+ value: 0,
365
+ correctness: {
366
+ value: 'correct',
367
+ label: 'correct'
368
+ }
369
+ }, {
370
+ label: 'D',
371
+ value: 2,
372
+ correctness: {
373
+ value: 'incorrect',
374
+ label: 'incorrect'
375
+ }
376
+ }, {
377
+ label: 'C',
378
+ value: 2,
379
+ correctness: {
380
+ value: 'correct',
381
+ label: 'correct'
382
+ }
383
+ }])
384
+ });
385
+ assertGetScore('response is incorrect: more categories in given answer', {
386
+ answer: (0, _index.filterCategories)([{
387
+ label: 'A',
388
+ value: 0
389
+ }, {
390
+ label: 'B',
391
+ value: 1
392
+ }, {
393
+ label: 'C',
394
+ value: 2
395
+ }, {
396
+ label: 'D',
397
+ value: 3
398
+ }])
399
+ }, {
400
+ score: 0,
401
+ answers: (0, _index.filterCategories)([{
402
+ label: 'A',
403
+ value: 0,
404
+ correctness: {
405
+ value: 'correct',
406
+ label: 'correct'
407
+ }
408
+ }, {
409
+ label: 'B',
410
+ value: 1,
411
+ correctness: {
412
+ value: 'correct',
413
+ label: 'correct'
414
+ }
415
+ }, {
416
+ label: 'C',
417
+ value: 2,
418
+ correctness: {
419
+ value: 'correct',
420
+ label: 'correct'
421
+ }
422
+ }, {
423
+ label: 'D',
424
+ value: 3,
425
+ correctness: {
426
+ value: 'incorrect',
427
+ label: 'incorrect'
428
+ }
429
+ }])
430
+ });
431
+ assertGetScore('response is incorrect: less categories in given answer', {
432
+ answer: (0, _index.filterCategories)([{
433
+ label: 'A',
434
+ value: 0
435
+ }, {
436
+ label: 'B',
437
+ value: 1
438
+ }])
439
+ }, {
440
+ score: 0,
441
+ answers: (0, _index.filterCategories)([{
442
+ label: 'A',
443
+ value: 0,
444
+ correctness: {
445
+ value: 'correct',
446
+ label: 'correct'
447
+ }
448
+ }, {
449
+ label: 'B',
450
+ value: 1,
451
+ correctness: {
452
+ value: 'correct',
453
+ label: 'correct'
454
+ }
455
+ }])
456
+ });
457
+ assertGetScore('session is undefined', undefined, {
458
+ score: 0,
459
+ answers: []
460
+ });
461
+ assertGetScore('session is null', null, {
462
+ score: 0,
463
+ answers: []
464
+ });
465
+ assertGetScore('session is empty', {}, {
466
+ score: 0,
467
+ answers: []
468
+ });
469
+ });
470
+ describe('getScore partial scoring - editable - interactive', () => {
471
+ const scoringType = 'partial scoring';
472
+ const question = {
473
+ correctAnswer: {
474
+ data: [{
475
+ label: 'A',
476
+ value: 0,
477
+ editable: true
478
+ }, {
479
+ label: 'B',
480
+ value: 1,
481
+ editable: true
482
+ }, {
483
+ label: 'C',
484
+ value: 2,
485
+ editable: true
486
+ }]
487
+ },
488
+ data: (0, _index.filterCategories)([{
489
+ label: 'A',
490
+ value: 0,
491
+ interactive: true,
492
+ editable: true
493
+ }, {
494
+ label: 'B',
495
+ value: 1,
496
+ interactive: true,
497
+ editable: true
498
+ }]),
499
+ scoringType
500
+ };
501
+ const assertGetScore = (message, questionExtra, session, expected) => {
502
+ it(message, () => {
503
+ expect((0, _index.getScore)({
504
+ ...question,
505
+ ...questionExtra
506
+ }, session)).toEqual(expected);
507
+ });
508
+ };
509
+ assertGetScore('Answer is default answer, 4/6 correct answers', {}, {}, {
510
+ score: 0.67,
511
+ answers: (0, _index.filterCategories)([{
512
+ label: 'A',
513
+ value: 0,
514
+ interactive: true,
515
+ editable: true,
516
+ correctness: {
517
+ value: 'correct',
518
+ label: 'correct'
519
+ }
520
+ }, {
521
+ label: 'B',
522
+ value: 1,
523
+ interactive: true,
524
+ editable: true,
525
+ correctness: {
526
+ value: 'correct',
527
+ label: 'correct'
528
+ }
529
+ }])
530
+ });
531
+ assertGetScore('5/6 correct answers', {}, {
532
+ answer: (0, _index.filterCategories)([{
533
+ label: 'A',
534
+ value: 0,
535
+ interactive: true,
536
+ editable: true
537
+ }, {
538
+ label: 'B',
539
+ value: 1,
540
+ interactive: true,
541
+ editable: true
542
+ }, {
543
+ label: 'C',
544
+ value: 1,
545
+ interactive: true,
546
+ editable: true
547
+ }])
548
+ }, {
549
+ score: 0.83,
550
+ answers: (0, _index.filterCategories)([{
551
+ label: 'A',
552
+ value: 0,
553
+ interactive: true,
554
+ editable: true,
555
+ correctness: {
556
+ value: 'correct',
557
+ label: 'correct'
558
+ }
559
+ }, {
560
+ label: 'B',
561
+ value: 1,
562
+ interactive: true,
563
+ editable: true,
564
+ correctness: {
565
+ value: 'correct',
566
+ label: 'correct'
567
+ }
568
+ }, {
569
+ label: 'C',
570
+ value: 1,
571
+ interactive: true,
572
+ editable: true,
573
+ correctness: {
574
+ value: 'incorrect',
575
+ label: 'correct'
576
+ }
577
+ }])
578
+ });
579
+ assertGetScore('Default answer edited with incorrect answer, 4/6 correct answers', {}, {
580
+ answer: (0, _index.filterCategories)([{
581
+ label: 'A',
582
+ value: 0,
583
+ interactive: true,
584
+ editable: true
585
+ }, {
586
+ label: 'D',
587
+ value: 1,
588
+ interactive: true,
589
+ editable: true
590
+ }, {
591
+ label: 'C',
592
+ value: 1,
593
+ interactive: true,
594
+ editable: true
595
+ }])
596
+ }, {
597
+ score: 0.67,
598
+ answers: (0, _index.filterCategories)([{
599
+ label: 'A',
600
+ value: 0,
601
+ interactive: true,
602
+ editable: true,
603
+ correctness: {
604
+ value: 'correct',
605
+ label: 'correct'
606
+ }
607
+ }, {
608
+ label: 'D',
609
+ value: 1,
610
+ interactive: true,
611
+ editable: true,
612
+ correctness: {
613
+ value: 'correct',
614
+ label: 'incorrect'
615
+ }
616
+ }, {
617
+ label: 'C',
618
+ value: 1,
619
+ interactive: true,
620
+ editable: true,
621
+ correctness: {
622
+ value: 'incorrect',
623
+ label: 'correct'
624
+ }
625
+ }])
626
+ });
627
+ assertGetScore('Default answer was incorrect and edited, 4/6 correct answers', {
628
+ data: (0, _index.filterCategories)([{
629
+ label: 'A-wrong',
630
+ value: 0,
631
+ interactive: true,
632
+ editable: true
633
+ }, {
634
+ label: 'B',
635
+ value: 1,
636
+ interactive: true,
637
+ editable: true
638
+ }])
639
+ }, {
640
+ answer: (0, _index.filterCategories)([{
641
+ label: 'A',
642
+ value: 0,
643
+ interactive: true,
644
+ editable: true
645
+ }, {
646
+ label: 'B',
647
+ value: 1,
648
+ interactive: true,
649
+ editable: true
650
+ }, {
651
+ label: 'C',
652
+ value: 2,
653
+ interactive: true,
654
+ editable: true
655
+ }])
656
+ }, {
657
+ score: 1,
658
+ answers: (0, _index.filterCategories)([{
659
+ label: 'A',
660
+ value: 0,
661
+ interactive: true,
662
+ editable: true,
663
+ correctness: {
664
+ value: 'correct',
665
+ label: 'correct'
666
+ }
667
+ }, {
668
+ label: 'B',
669
+ value: 1,
670
+ interactive: true,
671
+ editable: true,
672
+ correctness: {
673
+ value: 'correct',
674
+ label: 'correct'
675
+ }
676
+ }, {
677
+ label: 'C',
678
+ value: 2,
679
+ interactive: true,
680
+ editable: true,
681
+ correctness: {
682
+ value: 'correct',
683
+ label: 'correct'
684
+ }
685
+ }])
686
+ });
687
+ });
688
+ describe('getScore partial scoring - NOT editable - interactive', () => {
689
+ const scoringType = 'partial scoring';
690
+ const question = {
691
+ correctAnswer: {
692
+ data: [{
693
+ label: 'A',
694
+ value: 0
695
+ }, {
696
+ label: 'B',
697
+ value: 1
698
+ }, {
699
+ label: 'C',
700
+ value: 2
701
+ }]
702
+ },
703
+ data: (0, _index.filterCategories)([{
704
+ label: 'A',
705
+ value: 0,
706
+ interactive: true
707
+ }, {
708
+ label: 'B',
709
+ value: 1,
710
+ interactive: true
711
+ }]),
712
+ scoringType
713
+ };
714
+ const assertGetScore = (message, questionExtra, session, expected) => {
715
+ it(message, () => {
716
+ expect((0, _index.getScore)({
717
+ ...question,
718
+ ...questionExtra
719
+ }, session)).toEqual(expected);
720
+ });
721
+ };
722
+ assertGetScore('Answer is default answer, 2/4 correct answers (3 values + 1 label)', {}, {}, {
723
+ score: 0.5,
724
+ answers: (0, _index.filterCategories)([{
725
+ label: 'A',
726
+ value: 0,
727
+ interactive: true,
728
+ correctness: {
729
+ value: 'correct',
730
+ label: 'correct'
731
+ }
732
+ }, {
733
+ label: 'B',
734
+ value: 1,
735
+ interactive: true,
736
+ correctness: {
737
+ value: 'correct',
738
+ label: 'correct'
739
+ }
740
+ }])
741
+ });
742
+ assertGetScore('2/4 correct answers (3 values + 1 label)', {}, {
743
+ answer: (0, _index.filterCategories)([{
744
+ label: 'A',
745
+ value: 0,
746
+ interactive: true
747
+ }, {
748
+ label: 'B',
749
+ value: 1,
750
+ interactive: true
751
+ }, {
752
+ label: 'C',
753
+ value: 1,
754
+ interactive: true
755
+ }])
756
+ }, {
757
+ score: 0.75,
758
+ answers: (0, _index.filterCategories)([{
759
+ label: 'A',
760
+ value: 0,
761
+ interactive: true,
762
+ correctness: {
763
+ value: 'correct',
764
+ label: 'correct'
765
+ }
766
+ }, {
767
+ label: 'B',
768
+ value: 1,
769
+ interactive: true,
770
+ correctness: {
771
+ value: 'correct',
772
+ label: 'correct'
773
+ }
774
+ }, {
775
+ label: 'C',
776
+ value: 1,
777
+ interactive: true,
778
+ correctness: {
779
+ value: 'incorrect',
780
+ label: 'correct'
781
+ }
782
+ }])
783
+ });
784
+ assertGetScore('Default answer plus extra incorrect answer, 2/4 correct answers (3 values + 1 label)', {}, {
785
+ answer: (0, _index.filterCategories)([{
786
+ label: 'A',
787
+ value: 0,
788
+ interactive: true
789
+ }, {
790
+ label: 'B',
791
+ value: 1,
792
+ interactive: true
793
+ }, {
794
+ label: 'D',
795
+ value: 1,
796
+ interactive: true
797
+ }])
798
+ }, {
799
+ score: 0.5,
800
+ answers: (0, _index.filterCategories)([{
801
+ label: 'A',
802
+ value: 0,
803
+ interactive: true,
804
+ correctness: {
805
+ value: 'correct',
806
+ label: 'correct'
807
+ }
808
+ }, {
809
+ label: 'B',
810
+ value: 1,
811
+ interactive: true,
812
+ correctness: {
813
+ value: 'correct',
814
+ label: 'correct'
815
+ }
816
+ }, {
817
+ label: 'D',
818
+ value: 1,
819
+ interactive: true,
820
+ correctness: {
821
+ value: 'incorrect',
822
+ label: 'incorrect'
823
+ }
824
+ }])
825
+ });
826
+ assertGetScore('Default answer was incorrect, 4/4 correct answers (3 values + 1 label)', {
827
+ data: (0, _index.filterCategories)([{
828
+ label: 'A-wrong',
829
+ value: 0,
830
+ interactive: true
831
+ }, {
832
+ label: 'B',
833
+ value: 1,
834
+ interactive: true
835
+ }])
836
+ }, {
837
+ answer: (0, _index.filterCategories)([{
838
+ label: 'A-wrong',
839
+ value: 0,
840
+ interactive: true
841
+ }, {
842
+ label: 'B',
843
+ value: 1,
844
+ interactive: true
845
+ }, {
846
+ label: 'C',
847
+ value: 2,
848
+ interactive: true
849
+ }])
850
+ }, {
851
+ score: 1,
852
+ answers: (0, _index.filterCategories)([{
853
+ label: 'A-wrong',
854
+ value: 0,
855
+ interactive: true,
856
+ correctness: {
857
+ value: 'correct',
858
+ label: 'correct'
859
+ }
860
+ }, {
861
+ label: 'B',
862
+ value: 1,
863
+ interactive: true,
864
+ correctness: {
865
+ value: 'correct',
866
+ label: 'correct'
867
+ }
868
+ }, {
869
+ label: 'C',
870
+ value: 2,
871
+ interactive: true,
872
+ correctness: {
873
+ value: 'correct',
874
+ label: 'correct'
875
+ }
876
+ }])
877
+ });
878
+ });
879
+ describe('getScore partial scoring - editable - randomly interactive', () => {
880
+ const scoringType = 'partial scoring';
881
+ const question = {
882
+ correctAnswer: {
883
+ data: [{
884
+ label: 'A',
885
+ value: 0
886
+ }, {
887
+ label: 'B',
888
+ value: 1
889
+ }, {
890
+ label: 'C',
891
+ value: 2
892
+ }]
893
+ },
894
+ data: (0, _index.filterCategories)([{
895
+ label: 'A',
896
+ value: 0,
897
+ interactive: false,
898
+ editable: true
899
+ }, {
900
+ label: 'B',
901
+ value: 1,
902
+ interactive: true,
903
+ editable: true
904
+ }]),
905
+ scoringType
906
+ };
907
+ const assertGetScore = (message, questionExtra, session, expected) => {
908
+ it(message, () => {
909
+ expect((0, _index.getScore)({
910
+ ...question,
911
+ ...questionExtra
912
+ }, session)).toEqual(expected);
913
+ });
914
+ };
915
+ assertGetScore('Answer is default answer, 2/4 correct answers (2 values + 2 labels)', {}, {}, {
916
+ score: 0.5,
917
+ answers: (0, _index.filterCategories)([{
918
+ label: 'A',
919
+ value: 0,
920
+ interactive: false,
921
+ editable: true,
922
+ correctness: {
923
+ value: 'correct',
924
+ label: 'correct'
925
+ }
926
+ }, {
927
+ label: 'B',
928
+ value: 1,
929
+ interactive: true,
930
+ editable: true,
931
+ correctness: {
932
+ value: 'correct',
933
+ label: 'correct'
934
+ }
935
+ }])
936
+ });
937
+ assertGetScore(' correct answers 3/4 (2 values + 2 labels)', {}, {
938
+ answer: (0, _index.filterCategories)([{
939
+ label: 'A',
940
+ value: 0,
941
+ interactive: false,
942
+ editable: true
943
+ }, {
944
+ label: 'B',
945
+ value: 1,
946
+ interactive: true,
947
+ editable: true
948
+ }, {
949
+ label: 'C',
950
+ value: 1,
951
+ interactive: true,
952
+ editable: true
953
+ }])
954
+ }, {
955
+ score: 0.75,
956
+ answers: (0, _index.filterCategories)([{
957
+ label: 'A',
958
+ value: 0,
959
+ interactive: false,
960
+ editable: true,
961
+ correctness: {
962
+ value: 'correct',
963
+ label: 'correct'
964
+ }
965
+ }, {
966
+ label: 'B',
967
+ value: 1,
968
+ interactive: true,
969
+ editable: true,
970
+ correctness: {
971
+ value: 'correct',
972
+ label: 'correct'
973
+ }
974
+ }, {
975
+ label: 'C',
976
+ value: 1,
977
+ interactive: true,
978
+ editable: true,
979
+ correctness: {
980
+ value: 'incorrect',
981
+ label: 'correct'
982
+ }
983
+ }])
984
+ });
985
+ assertGetScore('Default answer edited with incorrect answer, 2/4 correct answers (2 labels + 2 values)', {}, {
986
+ answer: (0, _index.filterCategories)([{
987
+ label: 'A',
988
+ value: 0,
989
+ interactive: false,
990
+ editable: true
991
+ }, {
992
+ label: 'D',
993
+ value: 1,
994
+ interactive: true,
995
+ editable: true
996
+ }, {
997
+ label: 'C',
998
+ value: 1,
999
+ interactive: true,
1000
+ editable: true
1001
+ }])
1002
+ }, {
1003
+ score: 0.5,
1004
+ answers: (0, _index.filterCategories)([{
1005
+ label: 'A',
1006
+ value: 0,
1007
+ interactive: false,
1008
+ editable: true,
1009
+ correctness: {
1010
+ value: 'correct',
1011
+ label: 'correct'
1012
+ }
1013
+ }, {
1014
+ label: 'D',
1015
+ value: 1,
1016
+ interactive: true,
1017
+ editable: true,
1018
+ correctness: {
1019
+ value: 'correct',
1020
+ label: 'incorrect'
1021
+ }
1022
+ }, {
1023
+ label: 'C',
1024
+ value: 1,
1025
+ interactive: true,
1026
+ editable: true,
1027
+ correctness: {
1028
+ value: 'incorrect',
1029
+ label: 'correct'
1030
+ }
1031
+ }])
1032
+ });
1033
+ assertGetScore('Default answer was incorrect and edited, 4/4 correct answers (2 labels + 2 values)', {
1034
+ data: (0, _index.filterCategories)([{
1035
+ label: 'A-wrong',
1036
+ value: 0,
1037
+ interactive: false,
1038
+ editable: true
1039
+ }, {
1040
+ label: 'B',
1041
+ value: 1,
1042
+ interactive: true,
1043
+ editable: true
1044
+ }])
1045
+ }, {
1046
+ answer: (0, _index.filterCategories)([{
1047
+ label: 'A-wrong',
1048
+ value: 0,
1049
+ interactive: false,
1050
+ editable: true
1051
+ }, {
1052
+ label: 'B',
1053
+ value: 1,
1054
+ interactive: true,
1055
+ editable: true
1056
+ }, {
1057
+ label: 'C',
1058
+ value: 2,
1059
+ interactive: true,
1060
+ editable: true
1061
+ }])
1062
+ }, {
1063
+ score: 1,
1064
+ answers: (0, _index.filterCategories)([{
1065
+ label: 'A-wrong',
1066
+ value: 0,
1067
+ interactive: false,
1068
+ editable: true,
1069
+ correctness: {
1070
+ value: 'correct',
1071
+ label: 'correct'
1072
+ }
1073
+ }, {
1074
+ label: 'B',
1075
+ value: 1,
1076
+ interactive: true,
1077
+ editable: true,
1078
+ correctness: {
1079
+ value: 'correct',
1080
+ label: 'correct'
1081
+ }
1082
+ }, {
1083
+ label: 'C',
1084
+ value: 2,
1085
+ interactive: true,
1086
+ editable: true,
1087
+ correctness: {
1088
+ value: 'correct',
1089
+ label: 'correct'
1090
+ }
1091
+ }])
1092
+ });
1093
+ });
1094
+ describe('getScore partial scoring - NOT editable - randomly interactive', () => {
1095
+ const scoringType = 'partial scoring';
1096
+ const question = {
1097
+ correctAnswer: {
1098
+ data: [{
1099
+ label: 'A',
1100
+ value: 0
1101
+ }, {
1102
+ label: 'B',
1103
+ value: 1
1104
+ }, {
1105
+ label: 'C',
1106
+ value: 2
1107
+ }]
1108
+ },
1109
+ data: (0, _index.filterCategories)([{
1110
+ label: 'A',
1111
+ value: 0,
1112
+ interactive: false,
1113
+ editable: false
1114
+ }, {
1115
+ label: 'B',
1116
+ value: 1,
1117
+ interactive: true,
1118
+ editable: false
1119
+ }]),
1120
+ scoringType
1121
+ };
1122
+ const assertGetScore = (message, questionExtra, session, expected) => {
1123
+ it(message, () => {
1124
+ expect((0, _index.getScore)({
1125
+ ...question,
1126
+ ...questionExtra
1127
+ }, session)).toEqual(expected);
1128
+ });
1129
+ };
1130
+ assertGetScore('Answer is default answer, 1/3 correct answers (2 values + 1 label)', {}, {}, {
1131
+ score: 0.33,
1132
+ answers: (0, _index.filterCategories)([{
1133
+ label: 'A',
1134
+ value: 0,
1135
+ interactive: false,
1136
+ editable: false,
1137
+ correctness: {
1138
+ value: 'correct',
1139
+ label: 'correct'
1140
+ }
1141
+ }, {
1142
+ label: 'B',
1143
+ value: 1,
1144
+ interactive: true,
1145
+ editable: false,
1146
+ correctness: {
1147
+ value: 'correct',
1148
+ label: 'correct'
1149
+ }
1150
+ }])
1151
+ });
1152
+ assertGetScore(' correct answers 2/3 (2 values + 1 label)', {}, {
1153
+ answer: (0, _index.filterCategories)([{
1154
+ label: 'A',
1155
+ value: 0,
1156
+ interactive: false,
1157
+ editable: false
1158
+ }, {
1159
+ label: 'B',
1160
+ value: 1,
1161
+ interactive: true,
1162
+ editable: false
1163
+ }, {
1164
+ label: 'C',
1165
+ value: 1,
1166
+ interactive: true,
1167
+ editable: false
1168
+ }])
1169
+ }, {
1170
+ score: 0.67,
1171
+ answers: (0, _index.filterCategories)([{
1172
+ label: 'A',
1173
+ value: 0,
1174
+ interactive: false,
1175
+ editable: false,
1176
+ correctness: {
1177
+ value: 'correct',
1178
+ label: 'correct'
1179
+ }
1180
+ }, {
1181
+ label: 'B',
1182
+ value: 1,
1183
+ interactive: true,
1184
+ editable: false,
1185
+ correctness: {
1186
+ value: 'correct',
1187
+ label: 'correct'
1188
+ }
1189
+ }, {
1190
+ label: 'C',
1191
+ value: 1,
1192
+ interactive: true,
1193
+ editable: false,
1194
+ correctness: {
1195
+ value: 'incorrect',
1196
+ label: 'correct'
1197
+ }
1198
+ }])
1199
+ });
1200
+ assertGetScore('Default answer edited with incorrect answer, 2/3 correct answers (2 values + 1 label)', {}, {
1201
+ answer: (0, _index.filterCategories)([{
1202
+ label: 'A',
1203
+ value: 0,
1204
+ interactive: false,
1205
+ editable: false
1206
+ }, {
1207
+ label: 'D',
1208
+ value: 1,
1209
+ interactive: true,
1210
+ editable: false
1211
+ }, {
1212
+ label: 'C',
1213
+ value: 1,
1214
+ interactive: true,
1215
+ editable: false
1216
+ }])
1217
+ }, {
1218
+ score: 0.67,
1219
+ answers: (0, _index.filterCategories)([{
1220
+ label: 'A',
1221
+ value: 0,
1222
+ interactive: false,
1223
+ editable: false,
1224
+ correctness: {
1225
+ value: 'correct',
1226
+ label: 'correct'
1227
+ }
1228
+ }, {
1229
+ label: 'D',
1230
+ value: 1,
1231
+ interactive: true,
1232
+ editable: false,
1233
+ correctness: {
1234
+ value: 'correct',
1235
+ label: 'correct'
1236
+ }
1237
+ }, {
1238
+ label: 'C',
1239
+ value: 1,
1240
+ interactive: true,
1241
+ editable: false,
1242
+ correctness: {
1243
+ value: 'incorrect',
1244
+ label: 'correct'
1245
+ }
1246
+ }])
1247
+ });
1248
+ assertGetScore('Default answer was incorrect and edited, 3/3 correct answers (1 label + 2 values)', {
1249
+ data: (0, _index.filterCategories)([{
1250
+ label: 'A-wrong',
1251
+ value: 0,
1252
+ interactive: false,
1253
+ editable: false
1254
+ }, {
1255
+ label: 'B',
1256
+ value: 1,
1257
+ interactive: true,
1258
+ editable: false
1259
+ }])
1260
+ }, {
1261
+ answer: (0, _index.filterCategories)([{
1262
+ label: 'A-wrong',
1263
+ value: 0,
1264
+ interactive: false,
1265
+ editable: false
1266
+ }, {
1267
+ label: 'B',
1268
+ value: 1,
1269
+ interactive: true,
1270
+ editable: false
1271
+ }, {
1272
+ label: 'C',
1273
+ value: 2,
1274
+ interactive: true,
1275
+ editable: false
1276
+ }])
1277
+ }, {
1278
+ score: 1,
1279
+ answers: (0, _index.filterCategories)([{
1280
+ label: 'A-wrong',
1281
+ value: 0,
1282
+ interactive: false,
1283
+ editable: false,
1284
+ correctness: {
1285
+ value: 'correct',
1286
+ label: 'correct'
1287
+ }
1288
+ }, {
1289
+ label: 'B',
1290
+ value: 1,
1291
+ interactive: true,
1292
+ editable: false,
1293
+ correctness: {
1294
+ value: 'correct',
1295
+ label: 'correct'
1296
+ }
1297
+ }, {
1298
+ label: 'C',
1299
+ value: 2,
1300
+ interactive: true,
1301
+ editable: false,
1302
+ correctness: {
1303
+ value: 'correct',
1304
+ label: 'correct'
1305
+ }
1306
+ }])
1307
+ });
1308
+ });
1309
+ describe('createCorrectResponseSession', () => {
1310
+ const question = {
1311
+ studentNewCategoryDefaultLabel: 'Category',
1312
+ chartType: 'lineCross',
1313
+ correctAnswer: {
1314
+ data: [{
1315
+ label: 'A',
1316
+ value: 1,
1317
+ interactive: false,
1318
+ editable: true
1319
+ }, {
1320
+ label: 'B',
1321
+ value: 1,
1322
+ interactive: true,
1323
+ editable: true
1324
+ }, {
1325
+ label: 'C',
1326
+ value: 1,
1327
+ interactive: true,
1328
+ editable: true
1329
+ }]
1330
+ },
1331
+ data: [{
1332
+ label: 'A',
1333
+ value: 1,
1334
+ interactive: false,
1335
+ editable: true
1336
+ }, {
1337
+ label: 'B',
1338
+ value: 1,
1339
+ interactive: true,
1340
+ editable: true
1341
+ }, {
1342
+ label: 'D',
1343
+ value: 1,
1344
+ interactive: true,
1345
+ editable: true
1346
+ }],
1347
+ domain: {
1348
+ label: 'Fruits'
1349
+ },
1350
+ graph: {
1351
+ width: 480,
1352
+ height: 480
1353
+ },
1354
+ prompt: 'Here goes item stem!',
1355
+ rationale: 'Rationale goes here!',
1356
+ range: {
1357
+ label: 'Amount',
1358
+ max: 5.5,
1359
+ min: 0,
1360
+ labelStep: 1
1361
+ },
1362
+ scoringType: 'partial scoring',
1363
+ title: 'This is a chart!'
1364
+ };
1365
+ it('returns correct response if role is instructor and mode is gather', async () => {
1366
+ const sess = await (0, _index.createCorrectResponseSession)(question, {
1367
+ mode: 'gather',
1368
+ role: 'instructor'
1369
+ });
1370
+ expect(sess).toEqual({
1371
+ answer: [{
1372
+ label: 'A',
1373
+ value: 1,
1374
+ interactive: false,
1375
+ editable: true
1376
+ }, {
1377
+ label: 'B',
1378
+ value: 1,
1379
+ interactive: true,
1380
+ editable: true
1381
+ }, {
1382
+ label: 'C',
1383
+ value: 1,
1384
+ interactive: true,
1385
+ editable: true
1386
+ }],
1387
+ id: '1'
1388
+ });
1389
+ });
1390
+ it('returns correct response if role is instructor and mode is view', async () => {
1391
+ const sess = await (0, _index.createCorrectResponseSession)(question, {
1392
+ mode: 'view',
1393
+ role: 'instructor'
1394
+ });
1395
+ expect(sess).toEqual({
1396
+ answer: [{
1397
+ label: 'A',
1398
+ value: 1,
1399
+ interactive: false,
1400
+ editable: true
1401
+ }, {
1402
+ label: 'B',
1403
+ value: 1,
1404
+ interactive: true,
1405
+ editable: true
1406
+ }, {
1407
+ label: 'C',
1408
+ value: 1,
1409
+ interactive: true,
1410
+ editable: true
1411
+ }],
1412
+ id: '1'
1413
+ });
1414
+ });
1415
+ it('returns null if mode is evaluate', async () => {
1416
+ const noResult = await (0, _index.createCorrectResponseSession)(question, {
1417
+ mode: 'evaluate',
1418
+ role: 'instructor'
1419
+ });
1420
+ expect(noResult).toBeNull();
1421
+ });
1422
+ it('returns null if role is student', async () => {
1423
+ const noResult = await (0, _index.createCorrectResponseSession)(question, {
1424
+ mode: 'gather',
1425
+ role: 'student'
1426
+ });
1427
+ expect(noResult).toBeNull();
1428
+ });
1429
+ });
1430
+ const mockFetchSession = jest.fn();
1431
+ const question = {
1432
+ addCategoryEnabled: true,
1433
+ chartType: 'bar',
1434
+ data: [{
1435
+ interactive: true,
1436
+ value: 3,
1437
+ label: 'Three'
1438
+ }, {
1439
+ interactive: true,
1440
+ value: 0,
1441
+ label: 'Four'
1442
+ }, {
1443
+ interactive: true,
1444
+ value: 0,
1445
+ label: 'Five'
1446
+ }],
1447
+ correctAnswer: {
1448
+ data: [{
1449
+ value: 3,
1450
+ label: 'Three'
1451
+ }, {
1452
+ value: 2,
1453
+ label: 'Four'
1454
+ }, {
1455
+ value: 4,
1456
+ label: 'Five'
1457
+ }, {
1458
+ value: 0,
1459
+ label: 'Six'
1460
+ }, {
1461
+ value: 1,
1462
+ label: 'Seven'
1463
+ }, {
1464
+ value: 1,
1465
+ label: 'Eight'
1466
+ }]
1467
+ },
1468
+ domain: {
1469
+ label: 'Number of Letters'
1470
+ },
1471
+ graph: {
1472
+ height: 500,
1473
+ width: 500
1474
+ },
1475
+ prompt: '<p>Ms. Byrd shows her third grade students how to make a bar graph. She uses the number of letters in some of her students&#39; first names. The students&#39; names she uses for the bar graph are shown below.</p><p><img alt="image 2eade8e8a2fa445dae432c417e8a2731" id="2eade8e8a2fa445dae432c417e8a2731" src="https://storage.googleapis.com/pie-prod-221718-assets/image/cf2c334e-340c-4523-9a47-cb835fddfefe"></p><p>Ms. Byrd starts the bar graph by writing some of the labels.&#160;Finish the bar graph below by dragging the bars to show the correct number of first name letters of all the students and adding labels as needed.</p><p></p><p></p><p></p>',
1476
+ range: {
1477
+ label: 'Number of Students',
1478
+ max: 6,
1479
+ labelStep: 0.25,
1480
+ step: 0.25,
1481
+ min: 0
1482
+ },
1483
+ rationale: null,
1484
+ title: 'Number of Letters in First Name',
1485
+ disabled: false,
1486
+ teacherInstructions: null
1487
+ };
1488
+ mockFetchSession.mockResolvedValue({
1489
+ answer: [{
1490
+ interactive: false,
1491
+ value: 3,
1492
+ label: 'Three'
1493
+ }, {
1494
+ value: 2,
1495
+ label: 'Four',
1496
+ interactive: false
1497
+ }, {
1498
+ value: 4,
1499
+ label: 'Five',
1500
+ interactive: false
1501
+ }, {
1502
+ interactive: false,
1503
+ value: 0.25,
1504
+ label: 'six'
1505
+ }, {
1506
+ value: 1,
1507
+ label: 'seven',
1508
+ interactive: false
1509
+ }, {
1510
+ interactive: false,
1511
+ value: 1,
1512
+ label: 'eight'
1513
+ }]
1514
+ });
1515
+
1516
+ // Test to check if getScore correctly processes the session data from API
1517
+ describe('getScore with API session data', () => {
1518
+ it('correctly processes session data from API in evaluate mode', async () => {
1519
+ const session = await mockFetchSession();
1520
+ const env = {
1521
+ mode: 'evaluate',
1522
+ partialScoring: true
1523
+ };
1524
+ const mod = await (0, _index.model)(question, session, env);
1525
+
1526
+ // Simulate the API call and process the data
1527
+ const scoreResult = (0, _index.getScore)(mod, session, env);
1528
+
1529
+ // Check if the answers from getScore match the correctedAnswer in mod
1530
+ expect(scoreResult.answers).toEqual(mod.correctedAnswer);
1531
+ });
1532
+ it('correctly processes session data from API in view mode', async () => {
1533
+ const session = await mockFetchSession();
1534
+ const env = {
1535
+ mode: 'view',
1536
+ partialScoring: true
1537
+ };
1538
+ const mod = await (0, _index.model)(question, session, env);
1539
+
1540
+ // Simulate the API call and process the data
1541
+ const scoreResult = (0, _index.getScore)(mod, session, env);
1542
+
1543
+ // Check if the answers from getScore match the correctedAnswer in mod
1544
+ expect(scoreResult.answers).toEqual((0, _index.setCorrectness)(mod.correctedAnswer, true));
1545
+ });
1546
+ });
1547
+ describe('outcome', () => {
1548
+ const session = {
1549
+ answer: [{
1550
+ interactive: true,
1551
+ value: 3,
1552
+ label: 'Three'
1553
+ }, {
1554
+ value: 2,
1555
+ label: 'Four',
1556
+ interactive: true
1557
+ }, {
1558
+ value: 4,
1559
+ label: 'Five',
1560
+ interactive: true
1561
+ }, {
1562
+ interactive: true,
1563
+ editable: true,
1564
+ value: 0.25,
1565
+ label: 'six'
1566
+ }, {
1567
+ value: 1,
1568
+ label: 'seven',
1569
+ interactive: true,
1570
+ editable: true
1571
+ }, {
1572
+ interactive: true,
1573
+ editable: true,
1574
+ value: 1,
1575
+ label: 'eight'
1576
+ }],
1577
+ id: '4028e4a24e6f8eaf014ed1b0833635d3'
1578
+ };
1579
+ const question = {
1580
+ addCategoryEnabled: true,
1581
+ chartType: 'bar',
1582
+ data: [{
1583
+ interactive: true,
1584
+ value: 3,
1585
+ label: 'Three'
1586
+ }, {
1587
+ interactive: true,
1588
+ value: 0,
1589
+ label: 'Four'
1590
+ }, {
1591
+ interactive: true,
1592
+ value: 0,
1593
+ label: 'Five'
1594
+ }],
1595
+ correctAnswer: {
1596
+ data: [{
1597
+ value: 3,
1598
+ label: 'Three'
1599
+ }, {
1600
+ value: 2,
1601
+ label: 'Four'
1602
+ }, {
1603
+ value: 4,
1604
+ label: 'Five'
1605
+ }, {
1606
+ value: 0,
1607
+ label: 'Six'
1608
+ }, {
1609
+ value: 1,
1610
+ label: 'Seven'
1611
+ }, {
1612
+ value: 1,
1613
+ label: 'Eight'
1614
+ }]
1615
+ },
1616
+ domain: {
1617
+ label: 'Number of Letters'
1618
+ },
1619
+ graph: {
1620
+ height: 500,
1621
+ width: 500
1622
+ },
1623
+ prompt: '<p>Ms. Byrd shows her third grade students how to make a bar graph. She uses the number of letters in some of her students&#39; first names. The students&#39; names she uses for the bar graph are shown below.</p><p><img alt="image 2eade8e8a2fa445dae432c417e8a2731" id="2eade8e8a2fa445dae432c417e8a2731" src="https://storage.googleapis.com/pie-prod-221718-assets/image/cf2c334e-340c-4523-9a47-cb835fddfefe"></p><p>Ms. Byrd starts the bar graph by writing some of the labels.&#160;Finish the bar graph below by dragging the bars to show the correct number of first name letters of all the students and adding labels as needed.</p><p></p><p></p><p></p>',
1624
+ range: {
1625
+ label: 'Number of Students',
1626
+ max: 6,
1627
+ labelStep: 0.25,
1628
+ step: 0.25,
1629
+ min: 0
1630
+ },
1631
+ rationale: null,
1632
+ title: 'Number of Letters in First Name',
1633
+ disabled: false,
1634
+ teacherInstructions: null
1635
+ };
1636
+
1637
+ // if model.scoringType = 'all or nothing'
1638
+ // if env.partialScoring = false => dichotomous
1639
+ // else env.partialScoring = true || env.partialScoring = undefined => dichotomous
1640
+ // else model.scoringType = 'partial scoring' || model.scoringType = undefined
1641
+ // if env.partialScoring = false => dichotomous
1642
+ // else env.partialScoring = true || model.partialScoring = undefined => partial-credit scoring
1643
+
1644
+ it.each`
1645
+ mode | partialScoring | scoringType | expected
1646
+ ${'evaluate'} | ${false} | ${'all or nothing'} | ${0}
1647
+ ${'evaluate'} | ${true} | ${'all or nothing'} | ${0}
1648
+ ${'evaluate'} | ${undefined} | ${'all or nothing'} | ${0}
1649
+ ${'evaluate'} | ${false} | ${'partial scoring'} | ${0}
1650
+ ${'evaluate'} | ${true} | ${'partial scoring'} | ${0.89}
1651
+ ${'evaluate'} | ${undefined} | ${'partial scoring'} | ${0.89}
1652
+ ${'evaluate'} | ${false} | ${undefined} | ${0}
1653
+ ${'evaluate'} | ${true} | ${undefined} | ${0.89}
1654
+ ${'evaluate'} | ${undefined} | ${undefined} | ${0.89}
1655
+ ${'gather'} | ${false} | ${'partial scoring'} | ${0}
1656
+ ${'gather'} | ${true} | ${'partial scoring'} | ${0}
1657
+ ${'gather'} | ${undefined} | ${'partial scoring'} | ${0}
1658
+ `('env.mode $mode, env.partialScoring $partialScoring, model.scoringType $scoringType => $expected', async ({
1659
+ mode,
1660
+ partialScoring,
1661
+ scoringType,
1662
+ expected
1663
+ }) => {
1664
+ const env = {
1665
+ mode,
1666
+ partialScoring
1667
+ };
1668
+ const mod = await (0, _index.model)({
1669
+ ...question,
1670
+ scoringType
1671
+ }, session, env);
1672
+ const result = await (0, _index.outcome)(mod, session, env);
1673
+ expect(result.score).toEqual(expected);
1674
+ });
1675
+ });
1676
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfaW5kZXgiLCJyZXF1aXJlIiwiZGVzY3JpYmUiLCJpdCIsImNvcmVjdG5lc3NBbnN3ZXJzIiwic2V0Q29ycmVjdG5lc3MiLCJ2YWx1ZSIsImxhYmVsIiwiZXhwZWN0IiwidG9FcXVhbCIsImNvcnJlY3RuZXNzIiwiY2hlY2tMYWJlbHNFcXVhbGl0eSIsIm5vdCIsImZpbHRlckNhdGVnb3JpZXMiLCJpbnRlcmFjdGl2ZSIsImVkaXRhYmxlIiwibWtRdWVzdGlvbiIsImV4dHJhcyIsImNvcnJlY3RBbnN3ZXIiLCJkYXRhIiwiZWFjaCIsInVuZGVmaW5lZCIsIm1vZGUiLCJwYXJ0aWFsU2NvcmluZyIsInNjb3JpbmdUeXBlIiwiZXhwZWN0ZWQiLCJlbnYiLCJzZXNzaW9uIiwiYW5zd2VyIiwibW9kIiwibW9kZWwiLCJyZXN1bHQiLCJvdXRjb21lIiwic2NvcmUiLCJxdWVzdGlvbiIsImFzc2VydEdldFNjb3JlIiwibWVzc2FnZSIsImdldFNjb3JlIiwiYW5zd2VycyIsInF1ZXN0aW9uRXh0cmEiLCJzdHVkZW50TmV3Q2F0ZWdvcnlEZWZhdWx0TGFiZWwiLCJjaGFydFR5cGUiLCJkb21haW4iLCJncmFwaCIsIndpZHRoIiwiaGVpZ2h0IiwicHJvbXB0IiwicmF0aW9uYWxlIiwicmFuZ2UiLCJtYXgiLCJtaW4iLCJsYWJlbFN0ZXAiLCJ0aXRsZSIsInNlc3MiLCJjcmVhdGVDb3JyZWN0UmVzcG9uc2VTZXNzaW9uIiwicm9sZSIsImlkIiwibm9SZXN1bHQiLCJ0b0JlTnVsbCIsIm1vY2tGZXRjaFNlc3Npb24iLCJqZXN0IiwiZm4iLCJhZGRDYXRlZ29yeUVuYWJsZWQiLCJzdGVwIiwiZGlzYWJsZWQiLCJ0ZWFjaGVySW5zdHJ1Y3Rpb25zIiwibW9ja1Jlc29sdmVkVmFsdWUiLCJzY29yZVJlc3VsdCIsImNvcnJlY3RlZEFuc3dlciJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vaW5kZXgudGVzdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBzZXRDb3JyZWN0bmVzcyxcbiAgY2hlY2tMYWJlbHNFcXVhbGl0eSxcbiAgZmlsdGVyQ2F0ZWdvcmllcyxcbiAgZ2V0U2NvcmUsXG4gIGNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24sXG4gIG91dGNvbWUsXG4gIG1vZGVsLFxufSBmcm9tICcuLi9pbmRleCc7XG5cbmRlc2NyaWJlKCdzZXRDb3JyZWN0bmVzcycsICgpID0+IHtcbiAgaXQoJ3NldHMgY29ycmVjdG5lc3Mgb24gYW5zd2VycyBmb3IgcGFydGlhbCBzY29yaW5nOiBpbmNvcnJlY3QnLCAoKSA9PiB7XG4gICAgY29uc3QgY29yZWN0bmVzc0Fuc3dlcnMgPSBzZXRDb3JyZWN0bmVzcyhcbiAgICAgIFtcbiAgICAgICAgeyB2YWx1ZTogMCwgbGFiZWw6ICdBJyB9LFxuICAgICAgICB7IHZhbHVlOiAxLCBsYWJlbDogJ0InIH0sXG4gICAgICAgIHsgdmFsdWU6IDIsIGxhYmVsOiAnQycgfSxcbiAgICAgIF0sXG4gICAgICB0cnVlLFxuICAgICk7XG5cbiAgICBleHBlY3QoY29yZWN0bmVzc0Fuc3dlcnMpLnRvRXF1YWwoW1xuICAgICAge1xuICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgbGFiZWw6ICdBJyxcbiAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdpbmNvcnJlY3QnLCBsYWJlbDogJ2luY29ycmVjdCcgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiAxLFxuICAgICAgICBsYWJlbDogJ0InLFxuICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2luY29ycmVjdCcsIGxhYmVsOiAnaW5jb3JyZWN0JyB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IDIsXG4gICAgICAgIGxhYmVsOiAnQycsXG4gICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnaW5jb3JyZWN0JywgbGFiZWw6ICdpbmNvcnJlY3QnIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICB9KTtcblxuICBpdCgnc2V0cyBjb3JyZWN0bmVzcyBvbiBhbnN3ZXJzIGZvciBhbGwgb3Igbm90aGluZzogY29ycmVjdCcsICgpID0+IHtcbiAgICBjb25zdCBjb3JlY3RuZXNzQW5zd2VycyA9IHNldENvcnJlY3RuZXNzKFtcbiAgICAgIHsgdmFsdWU6IDAsIGxhYmVsOiAnQScgfSxcbiAgICAgIHsgdmFsdWU6IDEsIGxhYmVsOiAnQicgfSxcbiAgICAgIHsgdmFsdWU6IDIsIGxhYmVsOiAnQycgfSxcbiAgICBdKTtcblxuICAgIGV4cGVjdChjb3JlY3RuZXNzQW5zd2VycykudG9FcXVhbChbXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiAwLFxuICAgICAgICBsYWJlbDogJ0EnLFxuICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgbGFiZWw6ICdCJyxcbiAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdjb3JyZWN0JywgbGFiZWw6ICdjb3JyZWN0JyB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IDIsXG4gICAgICAgIGxhYmVsOiAnQycsXG4gICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnY29ycmVjdCcsIGxhYmVsOiAnY29ycmVjdCcgfSxcbiAgICAgIH0sXG4gICAgXSk7XG4gIH0pO1xuXG4gIGl0KCdzZXRzIGNvcnJlY3RuZXNzIG9uIGFuc3dlcnMgaWYgYW5zd2VycyBub3Qgc2V0JywgKCkgPT4ge1xuICAgIGV4cGVjdChzZXRDb3JyZWN0bmVzcyhbXSkpLnRvRXF1YWwoW10pO1xuICAgIGV4cGVjdChzZXRDb3JyZWN0bmVzcygpKS50b0VxdWFsKFtdKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ2NoZWNrTGFiZWxzRXF1YWxpdHknLCAoKSA9PiB7XG4gIGl0KCdyZXR1cm5zIGVxdWFsaXR5IGJldHdlZW4gbGFiZWxzJywgKCkgPT4ge1xuICAgIGV4cGVjdChjaGVja0xhYmVsc0VxdWFsaXR5KCdsYWJlbCcsICdMYWJlbCcpKS50b0VxdWFsKHRydWUpO1xuICAgIGV4cGVjdChjaGVja0xhYmVsc0VxdWFsaXR5KCdsYWJlbCcsICdMQUJFTCcpKS50b0VxdWFsKHRydWUpO1xuICAgIGV4cGVjdChjaGVja0xhYmVsc0VxdWFsaXR5KCdsYWJlbCcsICdsQWJFbCcpKS50b0VxdWFsKHRydWUpO1xuICAgIGV4cGVjdChjaGVja0xhYmVsc0VxdWFsaXR5KCdsYWJlbCcsICdUZXN0JykpLnRvRXF1YWwoZmFsc2UpO1xuICAgIGV4cGVjdChjaGVja0xhYmVsc0VxdWFsaXR5KCdsYWJlbCcsICdUZXN0JykpLm5vdC50b0VxdWFsKHRydWUpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnZmlsdGVyQ2F0ZWdvcmllcycsICgpID0+IHtcbiAgaXQoJ3JldHVybnMgY2F0ZWdvcmllcyBmaWx0ZXJlZCB3aXRoIGNvcnJlY3QgdmFsdWVzJywgKCkgPT4ge1xuICAgIGV4cGVjdChmaWx0ZXJDYXRlZ29yaWVzKG51bGwpKS50b0VxdWFsKFtdKTtcbiAgICBleHBlY3QoXG4gICAgICBmaWx0ZXJDYXRlZ29yaWVzKFtcbiAgICAgICAgeyB2YWx1ZTogMCwgbGFiZWw6ICdBJywgaW50ZXJhY3RpdmU6IHRydWUsIGVkaXRhYmxlOiB0cnVlIH0sXG4gICAgICAgIHsgdmFsdWU6IDEsIGxhYmVsOiAnQicsIGludGVyYWN0aXZlOiB0cnVlLCBlZGl0YWJsZTogdHJ1ZSB9LFxuICAgICAgICB7IHZhbHVlOiAyLCBsYWJlbDogJ0MnLCBpbnRlcmFjdGl2ZTogdHJ1ZSwgZWRpdGFibGU6IHRydWUgfSxcbiAgICAgIF0pLFxuICAgICkudG9FcXVhbChbXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiAwLFxuICAgICAgICBsYWJlbDogJ0EnLFxuICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgbGFiZWw6ICdCJyxcbiAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IDIsXG4gICAgICAgIGxhYmVsOiAnQycsXG4gICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgXSk7XG4gICAgZXhwZWN0KFxuICAgICAgZmlsdGVyQ2F0ZWdvcmllcyhbXG4gICAgICAgIHsgdmFsdWU6IDAsIGxhYmVsOiAnQScsIGludGVyYWN0aXZlOiB0cnVlLCBlZGl0YWJsZTogZmFsc2UgfSxcbiAgICAgICAgeyB2YWx1ZTogMSwgbGFiZWw6ICdCJywgaW50ZXJhY3RpdmU6IHRydWUsIGVkaXRhYmxlOiBmYWxzZSB9LFxuICAgICAgICB7IHZhbHVlOiAyLCBsYWJlbDogJ0MnLCBpbnRlcmFjdGl2ZTogdHJ1ZSwgZWRpdGFibGU6IGZhbHNlIH0sXG4gICAgICBdKSxcbiAgICApLnRvRXF1YWwoW1xuICAgICAge1xuICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgbGFiZWw6ICdBJyxcbiAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgIGVkaXRhYmxlOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiAxLFxuICAgICAgICBsYWJlbDogJ0InLFxuICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgZWRpdGFibGU6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IDIsXG4gICAgICAgIGxhYmVsOiAnQycsXG4gICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICBlZGl0YWJsZTogZmFsc2UsXG4gICAgICB9LFxuICAgIF0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnZ2V0U2NvcmUgcGFydGlhbFNjb3JpbmcgdGVzdCcsICgpID0+IHtcbiAgY29uc3QgbWtRdWVzdGlvbiA9IChleHRyYXMpID0+ICh7XG4gICAgY29ycmVjdEFuc3dlcjoge1xuICAgICAgZGF0YTogW1xuICAgICAgICB7IGxhYmVsOiAnQScsIHZhbHVlOiAwLCBlZGl0YWJsZTogdHJ1ZSB9LFxuICAgICAgICB7IGxhYmVsOiAnQicsIHZhbHVlOiAxLCBlZGl0YWJsZTogdHJ1ZSB9LFxuICAgICAgICB7IGxhYmVsOiAnQycsIHZhbHVlOiAyLCBlZGl0YWJsZTogdHJ1ZSB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIGRhdGE6IFtdLFxuICAgIC4uLmV4dHJhcyxcbiAgfSk7XG5cbiAgLy8gaWYgbW9kZWwuc2NvcmluZ1R5cGUgPSAnYWxsIG9yIG5vdGhpbmcnXG4gIC8vICAgIGlmIGVudi5wYXJ0aWFsU2NvcmluZyA9IGZhbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gZGljaG90b21vdXNcbiAgLy8gICAgZWxzZSBlbnYucGFydGlhbFNjb3JpbmcgPSB0cnVlIHx8IGVudi5wYXJ0aWFsU2NvcmluZyA9IHVuZGVmaW5lZCAgICA9PiBkaWNob3RvbW91c1xuICAvLyBlbHNlIG1vZGVsLnNjb3JpbmdUeXBlID0gJ3BhcnRpYWwgc2NvcmluZycgfHwgbW9kZWwuc2NvcmluZ1R5cGUgPSB1bmRlZmluZWRcbiAgLy8gICAgaWYgZW52LnBhcnRpYWxTY29yaW5nID0gZmFsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiBkaWNob3RvbW91c1xuICAvLyAgICBlbHNlIGVudi5wYXJ0aWFsU2NvcmluZyA9IHRydWUgfHwgbW9kZWwucGFydGlhbFNjb3JpbmcgPSB1bmRlZmluZWQgID0+IHBhcnRpYWwtY3JlZGl0IHNjb3JpbmdcbiAgaXQuZWFjaGBcbiAgICBtb2RlICAgICAgICAgIHwgcGFydGlhbFNjb3JpbmcgfCBzY29yaW5nVHlwZSAgICAgICAgICB8IGV4cGVjdGVkXG4gICAgJHsnZXZhbHVhdGUnfSB8ICR7ZmFsc2V9ICAgICAgIHwgJHsnYWxsIG9yIG5vdGhpbmcnfSAgfCAkezB9XG4gICAgJHsnZXZhbHVhdGUnfSB8ICR7dHJ1ZX0gICAgICAgIHwgJHsnYWxsIG9yIG5vdGhpbmcnfSAgfCAkezB9XG4gICAgJHsnZXZhbHVhdGUnfSB8ICR7dW5kZWZpbmVkfSAgIHwgJHsnYWxsIG9yIG5vdGhpbmcnfSAgfCAkezB9XG4gICAgJHsnZXZhbHVhdGUnfSB8ICR7ZmFsc2V9ICAgICAgIHwgJHsncGFydGlhbCBzY29yaW5nJ30gfCAkezB9XG4gICAgJHsnZXZhbHVhdGUnfSB8ICR7dHJ1ZX0gICAgICAgIHwgJHsncGFydGlhbCBzY29yaW5nJ30gfCAkezAuMzN9XG4gICAgJHsnZXZhbHVhdGUnfSB8ICR7dW5kZWZpbmVkfSAgIHwgJHsncGFydGlhbCBzY29yaW5nJ30gfCAkezAuMzN9XG4gICAgJHsnZXZhbHVhdGUnfSB8ICR7ZmFsc2V9ICAgICAgIHwgJHt1bmRlZmluZWR9ICAgICAgICAgfCAkezB9XG4gICAgJHsnZXZhbHVhdGUnfSB8ICR7dHJ1ZX0gICAgICAgIHwgJHt1bmRlZmluZWR9ICAgICAgICAgfCAkezAuMzN9XG4gICAgJHsnZXZhbHVhdGUnfSB8ICR7dW5kZWZpbmVkfSAgIHwgJHt1bmRlZmluZWR9ICAgICAgICAgfCAkezAuMzN9XG4gIGAoXG4gICAgJ2VudjogeyBtb2RlICRtb2RlLCBwYXJ0aWFsU2NvcmluZyAkcGFydGlhbFNjb3JpbmcgfSwgbW9kZWwuc2NvcmluZ1R5cGUgPSAkc2NvcmluZ1R5cGUgPT4gJGV4cGVjdGVkJyxcbiAgICBhc3luYyAoeyBtb2RlLCBwYXJ0aWFsU2NvcmluZywgc2NvcmluZ1R5cGUsIGV4cGVjdGVkIH0pID0+IHtcbiAgICAgIGNvbnN0IGVudiA9IHsgbW9kZSwgcGFydGlhbFNjb3JpbmcgfTtcbiAgICAgIGNvbnN0IHNlc3Npb24gPSB7XG4gICAgICAgIGFuc3dlcjogZmlsdGVyQ2F0ZWdvcmllcyhbXG4gICAgICAgICAgeyBsYWJlbDogJ0EnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgIHsgbGFiZWw6ICdDJywgdmFsdWU6IDIgfSxcbiAgICAgICAgXSksXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBtb2QgPSBhd2FpdCBtb2RlbChta1F1ZXN0aW9uKHsgc2NvcmluZ1R5cGUgfSksIHNlc3Npb24sIGVudik7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKG1vZCwgc2Vzc2lvbiwgZW52KTtcblxuICAgICAgZXhwZWN0KHJlc3VsdC5zY29yZSkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSxcbiAgKTtcbn0pO1xuXG5kZXNjcmliZSgnZ2V0U2NvcmUgYWxsIG9yIG5vdGhpbmcnLCAoKSA9PiB7XG4gIGNvbnN0IHNjb3JpbmdUeXBlID0gJ2FsbCBvciBub3RoaW5nJztcbiAgY29uc3QgcXVlc3Rpb24gPSB7XG4gICAgY29ycmVjdEFuc3dlcjoge1xuICAgICAgZGF0YTogW1xuICAgICAgICB7IGxhYmVsOiAnQScsIHZhbHVlOiAwIH0sXG4gICAgICAgIHsgbGFiZWw6ICdCJywgdmFsdWU6IDEgfSxcbiAgICAgICAgeyBsYWJlbDogJ0MnLCB2YWx1ZTogMiB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIGRhdGE6IFtdLFxuICAgIHNjb3JpbmdUeXBlLFxuICB9O1xuXG4gIGNvbnN0IGFzc2VydEdldFNjb3JlID0gKG1lc3NhZ2UsIHNlc3Npb24sIGV4cGVjdGVkKSA9PiB7XG4gICAgaXQobWVzc2FnZSwgKCkgPT4ge1xuICAgICAgZXhwZWN0KGdldFNjb3JlKHF1ZXN0aW9uLCBzZXNzaW9uKSkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG4gIH07XG5cbiAgYXNzZXJ0R2V0U2NvcmUoXG4gICAgJ3Jlc3BvbnNlIGlzIGNvcnJlY3QnLFxuICAgIHtcbiAgICAgIGFuc3dlcjogZmlsdGVyQ2F0ZWdvcmllcyhbXG4gICAgICAgIHsgbGFiZWw6ICdBJywgdmFsdWU6IDAgfSxcbiAgICAgICAgeyBsYWJlbDogJ0InLCB2YWx1ZTogMSB9LFxuICAgICAgICB7IGxhYmVsOiAnQycsIHZhbHVlOiAyIH0sXG4gICAgICBdKSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHNjb3JlOiAxLFxuICAgICAgYW5zd2VyczogZmlsdGVyQ2F0ZWdvcmllcyhbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0EnLFxuICAgICAgICAgIHZhbHVlOiAwLFxuICAgICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnY29ycmVjdCcsIGxhYmVsOiAnY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQicsXG4gICAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdjb3JyZWN0JywgbGFiZWw6ICdjb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdDJyxcbiAgICAgICAgICB2YWx1ZTogMixcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICBdKSxcbiAgICB9LFxuICApO1xuXG4gIGFzc2VydEdldFNjb3JlKFxuICAgICdyZXNwb25zZSBpcyBpbmNvcnJlY3Q6IGluY29ycmVjdCB2YWx1ZScsXG4gICAge1xuICAgICAgYW5zd2VyOiBmaWx0ZXJDYXRlZ29yaWVzKFtcbiAgICAgICAgeyBsYWJlbDogJ0EnLCB2YWx1ZTogMCB9LFxuICAgICAgICB7IGxhYmVsOiAnQicsIHZhbHVlOiAyIH0sXG4gICAgICAgIHsgbGFiZWw6ICdDJywgdmFsdWU6IDIgfSxcbiAgICAgIF0pLFxuICAgIH0sXG4gICAge1xuICAgICAgc2NvcmU6IDAsXG4gICAgICBhbnN3ZXJzOiBmaWx0ZXJDYXRlZ29yaWVzKFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQScsXG4gICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdjb3JyZWN0JywgbGFiZWw6ICdjb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdCJyxcbiAgICAgICAgICB2YWx1ZTogMixcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2luY29ycmVjdCcsIGxhYmVsOiAnY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQycsXG4gICAgICAgICAgdmFsdWU6IDIsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdjb3JyZWN0JywgbGFiZWw6ICdjb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgXSksXG4gICAgfSxcbiAgKTtcblxuICBhc3NlcnRHZXRTY29yZShcbiAgICAncmVzcG9uc2UgaXMgaW5jb3JyZWN0OiBpbmNvcnJlY3QgbGFiZWwnLFxuICAgIHtcbiAgICAgIGFuc3dlcjogZmlsdGVyQ2F0ZWdvcmllcyhbXG4gICAgICAgIHsgbGFiZWw6ICdBJywgdmFsdWU6IDAgfSxcbiAgICAgICAgeyBsYWJlbDogJ0QnLCB2YWx1ZTogMSB9LFxuICAgICAgICB7IGxhYmVsOiAnQycsIHZhbHVlOiAyIH0sXG4gICAgICBdKSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHNjb3JlOiAwLFxuICAgICAgYW5zd2VyczogZmlsdGVyQ2F0ZWdvcmllcyhbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0EnLFxuICAgICAgICAgIHZhbHVlOiAwLFxuICAgICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnY29ycmVjdCcsIGxhYmVsOiAnY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnRCcsXG4gICAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdjb3JyZWN0JywgbGFiZWw6ICdpbmNvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0MnLFxuICAgICAgICAgIHZhbHVlOiAyLFxuICAgICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnY29ycmVjdCcsIGxhYmVsOiAnY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgIF0pLFxuICAgIH0sXG4gICk7XG5cbiAgYXNzZXJ0R2V0U2NvcmUoXG4gICAgJ3Jlc3BvbnNlIGlzIGluY29ycmVjdDogaW5jb3JyZWN0IHZhbHVlICYgbGFiZWwnLFxuICAgIHtcbiAgICAgIGFuc3dlcjogZmlsdGVyQ2F0ZWdvcmllcyhbXG4gICAgICAgIHsgbGFiZWw6ICdBJywgdmFsdWU6IDAgfSxcbiAgICAgICAgeyBsYWJlbDogJ0QnLCB2YWx1ZTogMiB9LFxuICAgICAgICB7IGxhYmVsOiAnQycsIHZhbHVlOiAyIH0sXG4gICAgICBdKSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHNjb3JlOiAwLFxuICAgICAgYW5zd2VyczogZmlsdGVyQ2F0ZWdvcmllcyhbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0EnLFxuICAgICAgICAgIHZhbHVlOiAwLFxuICAgICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnY29ycmVjdCcsIGxhYmVsOiAnY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnRCcsXG4gICAgICAgICAgdmFsdWU6IDIsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdpbmNvcnJlY3QnLCBsYWJlbDogJ2luY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQycsXG4gICAgICAgICAgdmFsdWU6IDIsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdjb3JyZWN0JywgbGFiZWw6ICdjb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgXSksXG4gICAgfSxcbiAgKTtcblxuICBhc3NlcnRHZXRTY29yZShcbiAgICAncmVzcG9uc2UgaXMgaW5jb3JyZWN0OiBtb3JlIGNhdGVnb3JpZXMgaW4gZ2l2ZW4gYW5zd2VyJyxcbiAgICB7XG4gICAgICBhbnN3ZXI6IGZpbHRlckNhdGVnb3JpZXMoW1xuICAgICAgICB7IGxhYmVsOiAnQScsIHZhbHVlOiAwIH0sXG4gICAgICAgIHsgbGFiZWw6ICdCJywgdmFsdWU6IDEgfSxcbiAgICAgICAgeyBsYWJlbDogJ0MnLCB2YWx1ZTogMiB9LFxuICAgICAgICB7IGxhYmVsOiAnRCcsIHZhbHVlOiAzIH0sXG4gICAgICBdKSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHNjb3JlOiAwLFxuICAgICAgYW5zd2VyczogZmlsdGVyQ2F0ZWdvcmllcyhbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0EnLFxuICAgICAgICAgIHZhbHVlOiAwLFxuICAgICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnY29ycmVjdCcsIGxhYmVsOiAnY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQicsXG4gICAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdjb3JyZWN0JywgbGFiZWw6ICdjb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdDJyxcbiAgICAgICAgICB2YWx1ZTogMixcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0QnLFxuICAgICAgICAgIHZhbHVlOiAzLFxuICAgICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnaW5jb3JyZWN0JywgbGFiZWw6ICdpbmNvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICBdKSxcbiAgICB9LFxuICApO1xuXG4gIGFzc2VydEdldFNjb3JlKFxuICAgICdyZXNwb25zZSBpcyBpbmNvcnJlY3Q6IGxlc3MgY2F0ZWdvcmllcyBpbiBnaXZlbiBhbnN3ZXInLFxuICAgIHtcbiAgICAgIGFuc3dlcjogZmlsdGVyQ2F0ZWdvcmllcyhbXG4gICAgICAgIHsgbGFiZWw6ICdBJywgdmFsdWU6IDAgfSxcbiAgICAgICAgeyBsYWJlbDogJ0InLCB2YWx1ZTogMSB9LFxuICAgICAgXSksXG4gICAgfSxcbiAgICB7XG4gICAgICBzY29yZTogMCxcbiAgICAgIGFuc3dlcnM6IGZpbHRlckNhdGVnb3JpZXMoW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdBJyxcbiAgICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0InLFxuICAgICAgICAgIHZhbHVlOiAxLFxuICAgICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnY29ycmVjdCcsIGxhYmVsOiAnY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgIF0pLFxuICAgIH0sXG4gICk7XG5cbiAgYXNzZXJ0R2V0U2NvcmUoJ3Nlc3Npb24gaXMgdW5kZWZpbmVkJywgdW5kZWZpbmVkLCB7IHNjb3JlOiAwLCBhbnN3ZXJzOiBbXSB9KTtcblxuICBhc3NlcnRHZXRTY29yZSgnc2Vzc2lvbiBpcyBudWxsJywgbnVsbCwgeyBzY29yZTogMCwgYW5zd2VyczogW10gfSk7XG5cbiAgYXNzZXJ0R2V0U2NvcmUoJ3Nlc3Npb24gaXMgZW1wdHknLCB7fSwgeyBzY29yZTogMCwgYW5zd2VyczogW10gfSk7XG59KTtcblxuZGVzY3JpYmUoJ2dldFNjb3JlIHBhcnRpYWwgc2NvcmluZyAtIGVkaXRhYmxlIC0gaW50ZXJhY3RpdmUnLCAoKSA9PiB7XG4gIGNvbnN0IHNjb3JpbmdUeXBlID0gJ3BhcnRpYWwgc2NvcmluZyc7XG4gIGNvbnN0IHF1ZXN0aW9uID0ge1xuICAgIGNvcnJlY3RBbnN3ZXI6IHtcbiAgICAgIGRhdGE6IFtcbiAgICAgICAgeyBsYWJlbDogJ0EnLCB2YWx1ZTogMCwgZWRpdGFibGU6IHRydWUgfSxcbiAgICAgICAgeyBsYWJlbDogJ0InLCB2YWx1ZTogMSwgZWRpdGFibGU6IHRydWUgfSxcbiAgICAgICAgeyBsYWJlbDogJ0MnLCB2YWx1ZTogMiwgZWRpdGFibGU6IHRydWUgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICBkYXRhOiBmaWx0ZXJDYXRlZ29yaWVzKFtcbiAgICAgIHsgbGFiZWw6ICdBJywgdmFsdWU6IDAsIGludGVyYWN0aXZlOiB0cnVlLCBlZGl0YWJsZTogdHJ1ZSB9LFxuICAgICAgeyBsYWJlbDogJ0InLCB2YWx1ZTogMSwgaW50ZXJhY3RpdmU6IHRydWUsIGVkaXRhYmxlOiB0cnVlIH0sXG4gICAgXSksXG4gICAgc2NvcmluZ1R5cGUsXG4gIH07XG5cbiAgY29uc3QgYXNzZXJ0R2V0U2NvcmUgPSAobWVzc2FnZSwgcXVlc3Rpb25FeHRyYSwgc2Vzc2lvbiwgZXhwZWN0ZWQpID0+IHtcbiAgICBpdChtZXNzYWdlLCAoKSA9PiB7XG4gICAgICBleHBlY3QoZ2V0U2NvcmUoeyAuLi5xdWVzdGlvbiwgLi4ucXVlc3Rpb25FeHRyYSB9LCBzZXNzaW9uKSkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG4gIH07XG5cbiAgYXNzZXJ0R2V0U2NvcmUoXG4gICAgJ0Fuc3dlciBpcyBkZWZhdWx0IGFuc3dlciwgNC82IGNvcnJlY3QgYW5zd2VycycsXG4gICAge30sXG4gICAge30sXG4gICAge1xuICAgICAgc2NvcmU6IDAuNjcsXG4gICAgICBhbnN3ZXJzOiBmaWx0ZXJDYXRlZ29yaWVzKFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQScsXG4gICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdjb3JyZWN0JywgbGFiZWw6ICdjb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdCJyxcbiAgICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICBdKSxcbiAgICB9LFxuICApO1xuXG4gIGFzc2VydEdldFNjb3JlKFxuICAgICc1LzYgY29ycmVjdCBhbnN3ZXJzJyxcbiAgICB7fSxcbiAgICB7XG4gICAgICBhbnN3ZXI6IGZpbHRlckNhdGVnb3JpZXMoW1xuICAgICAgICB7IGxhYmVsOiAnQScsIHZhbHVlOiAwLCBpbnRlcmFjdGl2ZTogdHJ1ZSwgZWRpdGFibGU6IHRydWUgfSxcbiAgICAgICAgeyBsYWJlbDogJ0InLCB2YWx1ZTogMSwgaW50ZXJhY3RpdmU6IHRydWUsIGVkaXRhYmxlOiB0cnVlIH0sXG4gICAgICAgIHsgbGFiZWw6ICdDJywgdmFsdWU6IDEsIGludGVyYWN0aXZlOiB0cnVlLCBlZGl0YWJsZTogdHJ1ZSB9LFxuICAgICAgXSksXG4gICAgfSxcbiAgICB7XG4gICAgICBzY29yZTogMC44MyxcbiAgICAgIGFuc3dlcnM6IGZpbHRlckNhdGVnb3JpZXMoW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdBJyxcbiAgICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0InLFxuICAgICAgICAgIHZhbHVlOiAxLFxuICAgICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnY29ycmVjdCcsIGxhYmVsOiAnY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQycsXG4gICAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdpbmNvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICBdKSxcbiAgICB9LFxuICApO1xuXG4gIGFzc2VydEdldFNjb3JlKFxuICAgICdEZWZhdWx0IGFuc3dlciBlZGl0ZWQgd2l0aCBpbmNvcnJlY3QgYW5zd2VyLCA0LzYgY29ycmVjdCBhbnN3ZXJzJyxcbiAgICB7fSxcbiAgICB7XG4gICAgICBhbnN3ZXI6IGZpbHRlckNhdGVnb3JpZXMoW1xuICAgICAgICB7IGxhYmVsOiAnQScsIHZhbHVlOiAwLCBpbnRlcmFjdGl2ZTogdHJ1ZSwgZWRpdGFibGU6IHRydWUgfSxcbiAgICAgICAgeyBsYWJlbDogJ0QnLCB2YWx1ZTogMSwgaW50ZXJhY3RpdmU6IHRydWUsIGVkaXRhYmxlOiB0cnVlIH0sXG4gICAgICAgIHsgbGFiZWw6ICdDJywgdmFsdWU6IDEsIGludGVyYWN0aXZlOiB0cnVlLCBlZGl0YWJsZTogdHJ1ZSB9LFxuICAgICAgXSksXG4gICAgfSxcbiAgICB7XG4gICAgICBzY29yZTogMC42NyxcbiAgICAgIGFuc3dlcnM6IGZpbHRlckNhdGVnb3JpZXMoW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdBJyxcbiAgICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0QnLFxuICAgICAgICAgIHZhbHVlOiAxLFxuICAgICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnY29ycmVjdCcsIGxhYmVsOiAnaW5jb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdDJyxcbiAgICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2luY29ycmVjdCcsIGxhYmVsOiAnY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgIF0pLFxuICAgIH0sXG4gICk7XG5cbiAgYXNzZXJ0R2V0U2NvcmUoXG4gICAgJ0RlZmF1bHQgYW5zd2VyIHdhcyBpbmNvcnJlY3QgYW5kIGVkaXRlZCwgNC82IGNvcnJlY3QgYW5zd2VycycsXG4gICAge1xuICAgICAgZGF0YTogZmlsdGVyQ2F0ZWdvcmllcyhbXG4gICAgICAgIHsgbGFiZWw6ICdBLXdyb25nJywgdmFsdWU6IDAsIGludGVyYWN0aXZlOiB0cnVlLCBlZGl0YWJsZTogdHJ1ZSB9LFxuICAgICAgICB7IGxhYmVsOiAnQicsIHZhbHVlOiAxLCBpbnRlcmFjdGl2ZTogdHJ1ZSwgZWRpdGFibGU6IHRydWUgfSxcbiAgICAgIF0pLFxuICAgIH0sXG4gICAge1xuICAgICAgYW5zd2VyOiBmaWx0ZXJDYXRlZ29yaWVzKFtcbiAgICAgICAgeyBsYWJlbDogJ0EnLCB2YWx1ZTogMCwgaW50ZXJhY3RpdmU6IHRydWUsIGVkaXRhYmxlOiB0cnVlIH0sXG4gICAgICAgIHsgbGFiZWw6ICdCJywgdmFsdWU6IDEsIGludGVyYWN0aXZlOiB0cnVlLCBlZGl0YWJsZTogdHJ1ZSB9LFxuICAgICAgICB7IGxhYmVsOiAnQycsIHZhbHVlOiAyLCBpbnRlcmFjdGl2ZTogdHJ1ZSwgZWRpdGFibGU6IHRydWUgfSxcbiAgICAgIF0pLFxuICAgIH0sXG4gICAge1xuICAgICAgc2NvcmU6IDEsXG4gICAgICBhbnN3ZXJzOiBmaWx0ZXJDYXRlZ29yaWVzKFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQScsXG4gICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdjb3JyZWN0JywgbGFiZWw6ICdjb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdCJyxcbiAgICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0MnLFxuICAgICAgICAgIHZhbHVlOiAyLFxuICAgICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnY29ycmVjdCcsIGxhYmVsOiAnY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgIF0pLFxuICAgIH0sXG4gICk7XG59KTtcblxuZGVzY3JpYmUoJ2dldFNjb3JlIHBhcnRpYWwgc2NvcmluZyAtIE5PVCBlZGl0YWJsZSAtIGludGVyYWN0aXZlJywgKCkgPT4ge1xuICBjb25zdCBzY29yaW5nVHlwZSA9ICdwYXJ0aWFsIHNjb3JpbmcnO1xuICBjb25zdCBxdWVzdGlvbiA9IHtcbiAgICBjb3JyZWN0QW5zd2VyOiB7XG4gICAgICBkYXRhOiBbXG4gICAgICAgIHsgbGFiZWw6ICdBJywgdmFsdWU6IDAgfSxcbiAgICAgICAgeyBsYWJlbDogJ0InLCB2YWx1ZTogMSB9LFxuICAgICAgICB7IGxhYmVsOiAnQycsIHZhbHVlOiAyIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAgZGF0YTogZmlsdGVyQ2F0ZWdvcmllcyhbXG4gICAgICB7IGxhYmVsOiAnQScsIHZhbHVlOiAwLCBpbnRlcmFjdGl2ZTogdHJ1ZSB9LFxuICAgICAgeyBsYWJlbDogJ0InLCB2YWx1ZTogMSwgaW50ZXJhY3RpdmU6IHRydWUgfSxcbiAgICBdKSxcbiAgICBzY29yaW5nVHlwZSxcbiAgfTtcblxuICBjb25zdCBhc3NlcnRHZXRTY29yZSA9IChtZXNzYWdlLCBxdWVzdGlvbkV4dHJhLCBzZXNzaW9uLCBleHBlY3RlZCkgPT4ge1xuICAgIGl0KG1lc3NhZ2UsICgpID0+IHtcbiAgICAgIGV4cGVjdChnZXRTY29yZSh7IC4uLnF1ZXN0aW9uLCAuLi5xdWVzdGlvbkV4dHJhIH0sIHNlc3Npb24pKS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcbiAgfTtcblxuICBhc3NlcnRHZXRTY29yZShcbiAgICAnQW5zd2VyIGlzIGRlZmF1bHQgYW5zd2VyLCAyLzQgY29ycmVjdCBhbnN3ZXJzICgzIHZhbHVlcyArIDEgbGFiZWwpJyxcbiAgICB7fSxcbiAgICB7fSxcbiAgICB7XG4gICAgICBzY29yZTogMC41LFxuICAgICAgYW5zd2VyczogZmlsdGVyQ2F0ZWdvcmllcyhbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0EnLFxuICAgICAgICAgIHZhbHVlOiAwLFxuICAgICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnY29ycmVjdCcsIGxhYmVsOiAnY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQicsXG4gICAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdjb3JyZWN0JywgbGFiZWw6ICdjb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgXSksXG4gICAgfSxcbiAgKTtcblxuICBhc3NlcnRHZXRTY29yZShcbiAgICAnMi80IGNvcnJlY3QgYW5zd2VycyAoMyB2YWx1ZXMgKyAxIGxhYmVsKScsXG4gICAge30sXG4gICAge1xuICAgICAgYW5zd2VyOiBmaWx0ZXJDYXRlZ29yaWVzKFtcbiAgICAgICAgeyBsYWJlbDogJ0EnLCB2YWx1ZTogMCwgaW50ZXJhY3RpdmU6IHRydWUgfSxcbiAgICAgICAgeyBsYWJlbDogJ0InLCB2YWx1ZTogMSwgaW50ZXJhY3RpdmU6IHRydWUgfSxcbiAgICAgICAgeyBsYWJlbDogJ0MnLCB2YWx1ZTogMSwgaW50ZXJhY3RpdmU6IHRydWUgfSxcbiAgICAgIF0pLFxuICAgIH0sXG4gICAge1xuICAgICAgc2NvcmU6IDAuNzUsXG4gICAgICBhbnN3ZXJzOiBmaWx0ZXJDYXRlZ29yaWVzKFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQScsXG4gICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdjb3JyZWN0JywgbGFiZWw6ICdjb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdCJyxcbiAgICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0MnLFxuICAgICAgICAgIHZhbHVlOiAxLFxuICAgICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnaW5jb3JyZWN0JywgbGFiZWw6ICdjb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgXSksXG4gICAgfSxcbiAgKTtcblxuICBhc3NlcnRHZXRTY29yZShcbiAgICAnRGVmYXVsdCBhbnN3ZXIgcGx1cyBleHRyYSBpbmNvcnJlY3QgYW5zd2VyLCAyLzQgY29ycmVjdCBhbnN3ZXJzICgzIHZhbHVlcyArIDEgbGFiZWwpJyxcbiAgICB7fSxcbiAgICB7XG4gICAgICBhbnN3ZXI6IGZpbHRlckNhdGVnb3JpZXMoW1xuICAgICAgICB7IGxhYmVsOiAnQScsIHZhbHVlOiAwLCBpbnRlcmFjdGl2ZTogdHJ1ZSB9LFxuICAgICAgICB7IGxhYmVsOiAnQicsIHZhbHVlOiAxLCBpbnRlcmFjdGl2ZTogdHJ1ZSB9LFxuICAgICAgICB7IGxhYmVsOiAnRCcsIHZhbHVlOiAxLCBpbnRlcmFjdGl2ZTogdHJ1ZSB9LFxuICAgICAgXSksXG4gICAgfSxcbiAgICB7XG4gICAgICBzY29yZTogMC41LFxuICAgICAgYW5zd2VyczogZmlsdGVyQ2F0ZWdvcmllcyhbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0EnLFxuICAgICAgICAgIHZhbHVlOiAwLFxuICAgICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnY29ycmVjdCcsIGxhYmVsOiAnY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQicsXG4gICAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdjb3JyZWN0JywgbGFiZWw6ICdjb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdEJyxcbiAgICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2luY29ycmVjdCcsIGxhYmVsOiAnaW5jb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgXSksXG4gICAgfSxcbiAgKTtcblxuICBhc3NlcnRHZXRTY29yZShcbiAgICAnRGVmYXVsdCBhbnN3ZXIgd2FzIGluY29ycmVjdCwgNC80IGNvcnJlY3QgYW5zd2VycyAoMyB2YWx1ZXMgKyAxIGxhYmVsKScsXG4gICAge1xuICAgICAgZGF0YTogZmlsdGVyQ2F0ZWdvcmllcyhbXG4gICAgICAgIHsgbGFiZWw6ICdBLXdyb25nJywgdmFsdWU6IDAsIGludGVyYWN0aXZlOiB0cnVlIH0sXG4gICAgICAgIHsgbGFiZWw6ICdCJywgdmFsdWU6IDEsIGludGVyYWN0aXZlOiB0cnVlIH0sXG4gICAgICBdKSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGFuc3dlcjogZmlsdGVyQ2F0ZWdvcmllcyhbXG4gICAgICAgIHsgbGFiZWw6ICdBLXdyb25nJywgdmFsdWU6IDAsIGludGVyYWN0aXZlOiB0cnVlIH0sXG4gICAgICAgIHsgbGFiZWw6ICdCJywgdmFsdWU6IDEsIGludGVyYWN0aXZlOiB0cnVlIH0sXG4gICAgICAgIHsgbGFiZWw6ICdDJywgdmFsdWU6IDIsIGludGVyYWN0aXZlOiB0cnVlIH0sXG4gICAgICBdKSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHNjb3JlOiAxLFxuICAgICAgYW5zd2VyczogZmlsdGVyQ2F0ZWdvcmllcyhbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0Etd3JvbmcnLFxuICAgICAgICAgIHZhbHVlOiAwLFxuICAgICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnY29ycmVjdCcsIGxhYmVsOiAnY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQicsXG4gICAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdjb3JyZWN0JywgbGFiZWw6ICdjb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdDJyxcbiAgICAgICAgICB2YWx1ZTogMixcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICBdKSxcbiAgICB9LFxuICApO1xufSk7XG5cbmRlc2NyaWJlKCdnZXRTY29yZSBwYXJ0aWFsIHNjb3JpbmcgLSBlZGl0YWJsZSAtIHJhbmRvbWx5IGludGVyYWN0aXZlJywgKCkgPT4ge1xuICBjb25zdCBzY29yaW5nVHlwZSA9ICdwYXJ0aWFsIHNjb3JpbmcnO1xuICBjb25zdCBxdWVzdGlvbiA9IHtcbiAgICBjb3JyZWN0QW5zd2VyOiB7XG4gICAgICBkYXRhOiBbXG4gICAgICAgIHsgbGFiZWw6ICdBJywgdmFsdWU6IDAgfSxcbiAgICAgICAgeyBsYWJlbDogJ0InLCB2YWx1ZTogMSB9LFxuICAgICAgICB7IGxhYmVsOiAnQycsIHZhbHVlOiAyIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAgZGF0YTogZmlsdGVyQ2F0ZWdvcmllcyhbXG4gICAgICB7IGxhYmVsOiAnQScsIHZhbHVlOiAwLCBpbnRlcmFjdGl2ZTogZmFsc2UsIGVkaXRhYmxlOiB0cnVlIH0sXG4gICAgICB7IGxhYmVsOiAnQicsIHZhbHVlOiAxLCBpbnRlcmFjdGl2ZTogdHJ1ZSwgZWRpdGFibGU6IHRydWUgfSxcbiAgICBdKSxcbiAgICBzY29yaW5nVHlwZSxcbiAgfTtcblxuICBjb25zdCBhc3NlcnRHZXRTY29yZSA9IChtZXNzYWdlLCBxdWVzdGlvbkV4dHJhLCBzZXNzaW9uLCBleHBlY3RlZCkgPT4ge1xuICAgIGl0KG1lc3NhZ2UsICgpID0+IHtcbiAgICAgIGV4cGVjdChnZXRTY29yZSh7IC4uLnF1ZXN0aW9uLCAuLi5xdWVzdGlvbkV4dHJhIH0sIHNlc3Npb24pKS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcbiAgfTtcblxuICBhc3NlcnRHZXRTY29yZShcbiAgICAnQW5zd2VyIGlzIGRlZmF1bHQgYW5zd2VyLCAyLzQgY29ycmVjdCBhbnN3ZXJzICgyIHZhbHVlcyArIDIgbGFiZWxzKScsXG4gICAge30sXG4gICAge30sXG4gICAge1xuICAgICAgc2NvcmU6IDAuNSxcbiAgICAgIGFuc3dlcnM6IGZpbHRlckNhdGVnb3JpZXMoW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdBJyxcbiAgICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogZmFsc2UsXG4gICAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdjb3JyZWN0JywgbGFiZWw6ICdjb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdCJyxcbiAgICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICBdKSxcbiAgICB9LFxuICApO1xuXG4gIGFzc2VydEdldFNjb3JlKFxuICAgICcgY29ycmVjdCBhbnN3ZXJzIDMvNCAoMiB2YWx1ZXMgKyAyIGxhYmVscyknLFxuICAgIHt9LFxuICAgIHtcbiAgICAgIGFuc3dlcjogZmlsdGVyQ2F0ZWdvcmllcyhbXG4gICAgICAgIHsgbGFiZWw6ICdBJywgdmFsdWU6IDAsIGludGVyYWN0aXZlOiBmYWxzZSwgZWRpdGFibGU6IHRydWUgfSxcbiAgICAgICAgeyBsYWJlbDogJ0InLCB2YWx1ZTogMSwgaW50ZXJhY3RpdmU6IHRydWUsIGVkaXRhYmxlOiB0cnVlIH0sXG4gICAgICAgIHsgbGFiZWw6ICdDJywgdmFsdWU6IDEsIGludGVyYWN0aXZlOiB0cnVlLCBlZGl0YWJsZTogdHJ1ZSB9LFxuICAgICAgXSksXG4gICAgfSxcbiAgICB7XG4gICAgICBzY29yZTogMC43NSxcbiAgICAgIGFuc3dlcnM6IGZpbHRlckNhdGVnb3JpZXMoW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdBJyxcbiAgICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogZmFsc2UsXG4gICAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdjb3JyZWN0JywgbGFiZWw6ICdjb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdCJyxcbiAgICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0MnLFxuICAgICAgICAgIHZhbHVlOiAxLFxuICAgICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnaW5jb3JyZWN0JywgbGFiZWw6ICdjb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgXSksXG4gICAgfSxcbiAgKTtcblxuICBhc3NlcnRHZXRTY29yZShcbiAgICAnRGVmYXVsdCBhbnN3ZXIgZWRpdGVkIHdpdGggaW5jb3JyZWN0IGFuc3dlciwgMi80IGNvcnJlY3QgYW5zd2VycyAoMiBsYWJlbHMgKyAyIHZhbHVlcyknLFxuICAgIHt9LFxuICAgIHtcbiAgICAgIGFuc3dlcjogZmlsdGVyQ2F0ZWdvcmllcyhbXG4gICAgICAgIHsgbGFiZWw6ICdBJywgdmFsdWU6IDAsIGludGVyYWN0aXZlOiBmYWxzZSwgZWRpdGFibGU6IHRydWUgfSxcbiAgICAgICAgeyBsYWJlbDogJ0QnLCB2YWx1ZTogMSwgaW50ZXJhY3RpdmU6IHRydWUsIGVkaXRhYmxlOiB0cnVlIH0sXG4gICAgICAgIHsgbGFiZWw6ICdDJywgdmFsdWU6IDEsIGludGVyYWN0aXZlOiB0cnVlLCBlZGl0YWJsZTogdHJ1ZSB9LFxuICAgICAgXSksXG4gICAgfSxcbiAgICB7XG4gICAgICBzY29yZTogMC41LFxuICAgICAgYW5zd2VyczogZmlsdGVyQ2F0ZWdvcmllcyhbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0EnLFxuICAgICAgICAgIHZhbHVlOiAwLFxuICAgICAgICAgIGludGVyYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0QnLFxuICAgICAgICAgIHZhbHVlOiAxLFxuICAgICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnY29ycmVjdCcsIGxhYmVsOiAnaW5jb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdDJyxcbiAgICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2luY29ycmVjdCcsIGxhYmVsOiAnY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgIF0pLFxuICAgIH0sXG4gICk7XG5cbiAgYXNzZXJ0R2V0U2NvcmUoXG4gICAgJ0RlZmF1bHQgYW5zd2VyIHdhcyBpbmNvcnJlY3QgYW5kIGVkaXRlZCwgNC80IGNvcnJlY3QgYW5zd2VycyAoMiBsYWJlbHMgKyAyIHZhbHVlcyknLFxuICAgIHtcbiAgICAgIGRhdGE6IGZpbHRlckNhdGVnb3JpZXMoW1xuICAgICAgICB7IGxhYmVsOiAnQS13cm9uZycsIHZhbHVlOiAwLCBpbnRlcmFjdGl2ZTogZmFsc2UsIGVkaXRhYmxlOiB0cnVlIH0sXG4gICAgICAgIHsgbGFiZWw6ICdCJywgdmFsdWU6IDEsIGludGVyYWN0aXZlOiB0cnVlLCBlZGl0YWJsZTogdHJ1ZSB9LFxuICAgICAgXSksXG4gICAgfSxcbiAgICB7XG4gICAgICBhbnN3ZXI6IGZpbHRlckNhdGVnb3JpZXMoW1xuICAgICAgICB7IGxhYmVsOiAnQS13cm9uZycsIHZhbHVlOiAwLCBpbnRlcmFjdGl2ZTogZmFsc2UsIGVkaXRhYmxlOiB0cnVlIH0sXG4gICAgICAgIHsgbGFiZWw6ICdCJywgdmFsdWU6IDEsIGludGVyYWN0aXZlOiB0cnVlLCBlZGl0YWJsZTogdHJ1ZSB9LFxuICAgICAgICB7IGxhYmVsOiAnQycsIHZhbHVlOiAyLCBpbnRlcmFjdGl2ZTogdHJ1ZSwgZWRpdGFibGU6IHRydWUgfSxcbiAgICAgIF0pLFxuICAgIH0sXG4gICAge1xuICAgICAgc2NvcmU6IDEsXG4gICAgICBhbnN3ZXJzOiBmaWx0ZXJDYXRlZ29yaWVzKFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQS13cm9uZycsXG4gICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IGZhbHNlLFxuICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnY29ycmVjdCcsIGxhYmVsOiAnY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQicsXG4gICAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29ycmVjdG5lc3M6IHsgdmFsdWU6ICdjb3JyZWN0JywgbGFiZWw6ICdjb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdDJyxcbiAgICAgICAgICB2YWx1ZTogMixcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICBdKSxcbiAgICB9LFxuICApO1xufSk7XG5cbmRlc2NyaWJlKCdnZXRTY29yZSBwYXJ0aWFsIHNjb3JpbmcgLSBOT1QgZWRpdGFibGUgLSByYW5kb21seSBpbnRlcmFjdGl2ZScsICgpID0+IHtcbiAgY29uc3Qgc2NvcmluZ1R5cGUgPSAncGFydGlhbCBzY29yaW5nJztcbiAgY29uc3QgcXVlc3Rpb24gPSB7XG4gICAgY29ycmVjdEFuc3dlcjoge1xuICAgICAgZGF0YTogW1xuICAgICAgICB7IGxhYmVsOiAnQScsIHZhbHVlOiAwIH0sXG4gICAgICAgIHsgbGFiZWw6ICdCJywgdmFsdWU6IDEgfSxcbiAgICAgICAgeyBsYWJlbDogJ0MnLCB2YWx1ZTogMiB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIGRhdGE6IGZpbHRlckNhdGVnb3JpZXMoW1xuICAgICAgeyBsYWJlbDogJ0EnLCB2YWx1ZTogMCwgaW50ZXJhY3RpdmU6IGZhbHNlLCBlZGl0YWJsZTogZmFsc2UgfSxcbiAgICAgIHsgbGFiZWw6ICdCJywgdmFsdWU6IDEsIGludGVyYWN0aXZlOiB0cnVlLCBlZGl0YWJsZTogZmFsc2UgfSxcbiAgICBdKSxcbiAgICBzY29yaW5nVHlwZSxcbiAgfTtcblxuICBjb25zdCBhc3NlcnRHZXRTY29yZSA9IChtZXNzYWdlLCBxdWVzdGlvbkV4dHJhLCBzZXNzaW9uLCBleHBlY3RlZCkgPT4ge1xuICAgIGl0KG1lc3NhZ2UsICgpID0+IHtcbiAgICAgIGV4cGVjdChnZXRTY29yZSh7IC4uLnF1ZXN0aW9uLCAuLi5xdWVzdGlvbkV4dHJhIH0sIHNlc3Npb24pKS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcbiAgfTtcblxuICBhc3NlcnRHZXRTY29yZShcbiAgICAnQW5zd2VyIGlzIGRlZmF1bHQgYW5zd2VyLCAxLzMgY29ycmVjdCBhbnN3ZXJzICgyIHZhbHVlcyArIDEgbGFiZWwpJyxcbiAgICB7fSxcbiAgICB7fSxcbiAgICB7XG4gICAgICBzY29yZTogMC4zMyxcbiAgICAgIGFuc3dlcnM6IGZpbHRlckNhdGVnb3JpZXMoW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdBJyxcbiAgICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogZmFsc2UsXG4gICAgICAgICAgZWRpdGFibGU6IGZhbHNlLFxuICAgICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnY29ycmVjdCcsIGxhYmVsOiAnY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQicsXG4gICAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgICAgZWRpdGFibGU6IGZhbHNlLFxuICAgICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnY29ycmVjdCcsIGxhYmVsOiAnY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgIF0pLFxuICAgIH0sXG4gICk7XG5cbiAgYXNzZXJ0R2V0U2NvcmUoXG4gICAgJyBjb3JyZWN0IGFuc3dlcnMgMi8zICgyIHZhbHVlcyArIDEgbGFiZWwpJyxcbiAgICB7fSxcbiAgICB7XG4gICAgICBhbnN3ZXI6IGZpbHRlckNhdGVnb3JpZXMoW1xuICAgICAgICB7IGxhYmVsOiAnQScsIHZhbHVlOiAwLCBpbnRlcmFjdGl2ZTogZmFsc2UsIGVkaXRhYmxlOiBmYWxzZSB9LFxuICAgICAgICB7IGxhYmVsOiAnQicsIHZhbHVlOiAxLCBpbnRlcmFjdGl2ZTogdHJ1ZSwgZWRpdGFibGU6IGZhbHNlIH0sXG4gICAgICAgIHsgbGFiZWw6ICdDJywgdmFsdWU6IDEsIGludGVyYWN0aXZlOiB0cnVlLCBlZGl0YWJsZTogZmFsc2UgfSxcbiAgICAgIF0pLFxuICAgIH0sXG4gICAge1xuICAgICAgc2NvcmU6IDAuNjcsXG4gICAgICBhbnN3ZXJzOiBmaWx0ZXJDYXRlZ29yaWVzKFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQScsXG4gICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IGZhbHNlLFxuICAgICAgICAgIGVkaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0InLFxuICAgICAgICAgIHZhbHVlOiAxLFxuICAgICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICAgIGVkaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0MnLFxuICAgICAgICAgIHZhbHVlOiAxLFxuICAgICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICAgIGVkaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2luY29ycmVjdCcsIGxhYmVsOiAnY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgIF0pLFxuICAgIH0sXG4gICk7XG5cbiAgYXNzZXJ0R2V0U2NvcmUoXG4gICAgJ0RlZmF1bHQgYW5zd2VyIGVkaXRlZCB3aXRoIGluY29ycmVjdCBhbnN3ZXIsIDIvMyBjb3JyZWN0IGFuc3dlcnMgKDIgdmFsdWVzICsgMSBsYWJlbCknLFxuICAgIHt9LFxuICAgIHtcbiAgICAgIGFuc3dlcjogZmlsdGVyQ2F0ZWdvcmllcyhbXG4gICAgICAgIHsgbGFiZWw6ICdBJywgdmFsdWU6IDAsIGludGVyYWN0aXZlOiBmYWxzZSwgZWRpdGFibGU6IGZhbHNlIH0sXG4gICAgICAgIHsgbGFiZWw6ICdEJywgdmFsdWU6IDEsIGludGVyYWN0aXZlOiB0cnVlLCBlZGl0YWJsZTogZmFsc2UgfSxcbiAgICAgICAgeyBsYWJlbDogJ0MnLCB2YWx1ZTogMSwgaW50ZXJhY3RpdmU6IHRydWUsIGVkaXRhYmxlOiBmYWxzZSB9LFxuICAgICAgXSksXG4gICAgfSxcbiAgICB7XG4gICAgICBzY29yZTogMC42NyxcbiAgICAgIGFuc3dlcnM6IGZpbHRlckNhdGVnb3JpZXMoW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdBJyxcbiAgICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogZmFsc2UsXG4gICAgICAgICAgZWRpdGFibGU6IGZhbHNlLFxuICAgICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnY29ycmVjdCcsIGxhYmVsOiAnY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnRCcsXG4gICAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgICAgZWRpdGFibGU6IGZhbHNlLFxuICAgICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnY29ycmVjdCcsIGxhYmVsOiAnY29ycmVjdCcgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQycsXG4gICAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgICAgZWRpdGFibGU6IGZhbHNlLFxuICAgICAgICAgIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnaW5jb3JyZWN0JywgbGFiZWw6ICdjb3JyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgXSksXG4gICAgfSxcbiAgKTtcblxuICBhc3NlcnRHZXRTY29yZShcbiAgICAnRGVmYXVsdCBhbnN3ZXIgd2FzIGluY29ycmVjdCBhbmQgZWRpdGVkLCAzLzMgY29ycmVjdCBhbnN3ZXJzICgxIGxhYmVsICsgMiB2YWx1ZXMpJyxcbiAgICB7XG4gICAgICBkYXRhOiBmaWx0ZXJDYXRlZ29yaWVzKFtcbiAgICAgICAgeyBsYWJlbDogJ0Etd3JvbmcnLCB2YWx1ZTogMCwgaW50ZXJhY3RpdmU6IGZhbHNlLCBlZGl0YWJsZTogZmFsc2UgfSxcbiAgICAgICAgeyBsYWJlbDogJ0InLCB2YWx1ZTogMSwgaW50ZXJhY3RpdmU6IHRydWUsIGVkaXRhYmxlOiBmYWxzZSB9LFxuICAgICAgXSksXG4gICAgfSxcbiAgICB7XG4gICAgICBhbnN3ZXI6IGZpbHRlckNhdGVnb3JpZXMoW1xuICAgICAgICB7IGxhYmVsOiAnQS13cm9uZycsIHZhbHVlOiAwLCBpbnRlcmFjdGl2ZTogZmFsc2UsIGVkaXRhYmxlOiBmYWxzZSB9LFxuICAgICAgICB7IGxhYmVsOiAnQicsIHZhbHVlOiAxLCBpbnRlcmFjdGl2ZTogdHJ1ZSwgZWRpdGFibGU6IGZhbHNlIH0sXG4gICAgICAgIHsgbGFiZWw6ICdDJywgdmFsdWU6IDIsIGludGVyYWN0aXZlOiB0cnVlLCBlZGl0YWJsZTogZmFsc2UgfSxcbiAgICAgIF0pLFxuICAgIH0sXG4gICAge1xuICAgICAgc2NvcmU6IDEsXG4gICAgICBhbnN3ZXJzOiBmaWx0ZXJDYXRlZ29yaWVzKFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQS13cm9uZycsXG4gICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IGZhbHNlLFxuICAgICAgICAgIGVkaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0InLFxuICAgICAgICAgIHZhbHVlOiAxLFxuICAgICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICAgIGVkaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0MnLFxuICAgICAgICAgIHZhbHVlOiAyLFxuICAgICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICAgIGVkaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICBdKSxcbiAgICB9LFxuICApO1xufSk7XG5cbmRlc2NyaWJlKCdjcmVhdGVDb3JyZWN0UmVzcG9uc2VTZXNzaW9uJywgKCkgPT4ge1xuICBjb25zdCBxdWVzdGlvbiA9IHtcbiAgICBzdHVkZW50TmV3Q2F0ZWdvcnlEZWZhdWx0TGFiZWw6ICdDYXRlZ29yeScsXG4gICAgY2hhcnRUeXBlOiAnbGluZUNyb3NzJyxcbiAgICBjb3JyZWN0QW5zd2VyOiB7XG4gICAgICBkYXRhOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0EnLFxuICAgICAgICAgIHZhbHVlOiAxLFxuICAgICAgICAgIGludGVyYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQicsXG4gICAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0MnLFxuICAgICAgICAgIHZhbHVlOiAxLFxuICAgICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIGRhdGE6IFtcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdBJyxcbiAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgIGludGVyYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogJ0InLFxuICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdEJyxcbiAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBkb21haW46IHtcbiAgICAgIGxhYmVsOiAnRnJ1aXRzJyxcbiAgICB9LFxuICAgIGdyYXBoOiB7XG4gICAgICB3aWR0aDogNDgwLFxuICAgICAgaGVpZ2h0OiA0ODAsXG4gICAgfSxcbiAgICBwcm9tcHQ6ICdIZXJlIGdvZXMgaXRlbSBzdGVtIScsXG4gICAgcmF0aW9uYWxlOiAnUmF0aW9uYWxlIGdvZXMgaGVyZSEnLFxuICAgIHJhbmdlOiB7XG4gICAgICBsYWJlbDogJ0Ftb3VudCcsXG4gICAgICBtYXg6IDUuNSxcbiAgICAgIG1pbjogMCxcbiAgICAgIGxhYmVsU3RlcDogMSxcbiAgICB9LFxuICAgIHNjb3JpbmdUeXBlOiAncGFydGlhbCBzY29yaW5nJyxcbiAgICB0aXRsZTogJ1RoaXMgaXMgYSBjaGFydCEnLFxuICB9O1xuXG4gIGl0KCdyZXR1cm5zIGNvcnJlY3QgcmVzcG9uc2UgaWYgcm9sZSBpcyBpbnN0cnVjdG9yIGFuZCBtb2RlIGlzIGdhdGhlcicsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzZXNzID0gYXdhaXQgY3JlYXRlQ29ycmVjdFJlc3BvbnNlU2Vzc2lvbihxdWVzdGlvbiwge1xuICAgICAgbW9kZTogJ2dhdGhlcicsXG4gICAgICByb2xlOiAnaW5zdHJ1Y3RvcicsXG4gICAgfSk7XG5cbiAgICBleHBlY3Qoc2VzcykudG9FcXVhbCh7XG4gICAgICBhbnN3ZXI6IFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQScsXG4gICAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IGZhbHNlLFxuICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdCJyxcbiAgICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQycsXG4gICAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgaWQ6ICcxJyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3JldHVybnMgY29ycmVjdCByZXNwb25zZSBpZiByb2xlIGlzIGluc3RydWN0b3IgYW5kIG1vZGUgaXMgdmlldycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzZXNzID0gYXdhaXQgY3JlYXRlQ29ycmVjdFJlc3BvbnNlU2Vzc2lvbihxdWVzdGlvbiwge1xuICAgICAgbW9kZTogJ3ZpZXcnLFxuICAgICAgcm9sZTogJ2luc3RydWN0b3InLFxuICAgIH0pO1xuXG4gICAgZXhwZWN0KHNlc3MpLnRvRXF1YWwoe1xuICAgICAgYW5zd2VyOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0EnLFxuICAgICAgICAgIHZhbHVlOiAxLFxuICAgICAgICAgIGludGVyYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQicsXG4gICAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0MnLFxuICAgICAgICAgIHZhbHVlOiAxLFxuICAgICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGlkOiAnMScsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdyZXR1cm5zIG51bGwgaWYgbW9kZSBpcyBldmFsdWF0ZScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBub1Jlc3VsdCA9IGF3YWl0IGNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24ocXVlc3Rpb24sIHtcbiAgICAgIG1vZGU6ICdldmFsdWF0ZScsXG4gICAgICByb2xlOiAnaW5zdHJ1Y3RvcicsXG4gICAgfSk7XG5cbiAgICBleHBlY3Qobm9SZXN1bHQpLnRvQmVOdWxsKCk7XG4gIH0pO1xuXG4gIGl0KCdyZXR1cm5zIG51bGwgaWYgcm9sZSBpcyBzdHVkZW50JywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG5vUmVzdWx0ID0gYXdhaXQgY3JlYXRlQ29ycmVjdFJlc3BvbnNlU2Vzc2lvbihxdWVzdGlvbiwge1xuICAgICAgbW9kZTogJ2dhdGhlcicsXG4gICAgICByb2xlOiAnc3R1ZGVudCcsXG4gICAgfSk7XG5cbiAgICBleHBlY3Qobm9SZXN1bHQpLnRvQmVOdWxsKCk7XG4gIH0pO1xufSk7XG5cbmNvbnN0IG1vY2tGZXRjaFNlc3Npb24gPSBqZXN0LmZuKCk7XG5jb25zdCBxdWVzdGlvbiA9IHtcbiAgYWRkQ2F0ZWdvcnlFbmFibGVkOiB0cnVlLFxuICBjaGFydFR5cGU6ICdiYXInLFxuICBkYXRhOiBbXG4gICAge1xuICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICB2YWx1ZTogMyxcbiAgICAgIGxhYmVsOiAnVGhyZWUnLFxuICAgIH0sXG4gICAge1xuICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICB2YWx1ZTogMCxcbiAgICAgIGxhYmVsOiAnRm91cicsXG4gICAgfSxcbiAgICB7XG4gICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiAwLFxuICAgICAgbGFiZWw6ICdGaXZlJyxcbiAgICB9LFxuICBdLFxuICBjb3JyZWN0QW5zd2VyOiB7XG4gICAgZGF0YTogW1xuICAgICAge1xuICAgICAgICB2YWx1ZTogMyxcbiAgICAgICAgbGFiZWw6ICdUaHJlZScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB2YWx1ZTogMixcbiAgICAgICAgbGFiZWw6ICdGb3VyJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiA0LFxuICAgICAgICBsYWJlbDogJ0ZpdmUnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgIGxhYmVsOiAnU2l4JyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiAxLFxuICAgICAgICBsYWJlbDogJ1NldmVuJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiAxLFxuICAgICAgICBsYWJlbDogJ0VpZ2h0JyxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcbiAgZG9tYWluOiB7XG4gICAgbGFiZWw6ICdOdW1iZXIgb2YgTGV0dGVycycsXG4gIH0sXG4gIGdyYXBoOiB7XG4gICAgaGVpZ2h0OiA1MDAsXG4gICAgd2lkdGg6IDUwMCxcbiAgfSxcbiAgcHJvbXB0OlxuICAgICc8cD5Ncy4gQnlyZCBzaG93cyBoZXIgdGhpcmQgZ3JhZGUgc3R1ZGVudHMgaG93IHRvIG1ha2UgYSBiYXIgZ3JhcGguIFNoZSB1c2VzIHRoZSBudW1iZXIgb2YgbGV0dGVycyBpbiBzb21lIG9mIGhlciBzdHVkZW50cyYjMzk7IGZpcnN0IG5hbWVzLiBUaGUgc3R1ZGVudHMmIzM5OyBuYW1lcyBzaGUgdXNlcyBmb3IgdGhlIGJhciBncmFwaCBhcmUgc2hvd24gYmVsb3cuPC9wPjxwPjxpbWcgYWx0PVwiaW1hZ2UgMmVhZGU4ZThhMmZhNDQ1ZGFlNDMyYzQxN2U4YTI3MzFcIiBpZD1cIjJlYWRlOGU4YTJmYTQ0NWRhZTQzMmM0MTdlOGEyNzMxXCIgc3JjPVwiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3BpZS1wcm9kLTIyMTcxOC1hc3NldHMvaW1hZ2UvY2YyYzMzNGUtMzQwYy00NTIzLTlhNDctY2I4MzVmZGRmZWZlXCI+PC9wPjxwPk1zLiBCeXJkIHN0YXJ0cyB0aGUgYmFyIGdyYXBoIGJ5IHdyaXRpbmcgc29tZSBvZiB0aGUgbGFiZWxzLiYjMTYwO0ZpbmlzaCB0aGUgYmFyIGdyYXBoIGJlbG93IGJ5IGRyYWdnaW5nIHRoZSBiYXJzIHRvIHNob3cgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGZpcnN0IG5hbWUgbGV0dGVycyBvZiBhbGwgdGhlIHN0dWRlbnRzIGFuZCBhZGRpbmcgbGFiZWxzIGFzIG5lZWRlZC48L3A+PHA+PC9wPjxwPjwvcD48cD48L3A+JyxcbiAgcmFuZ2U6IHtcbiAgICBsYWJlbDogJ051bWJlciBvZiBTdHVkZW50cycsXG4gICAgbWF4OiA2LFxuICAgIGxhYmVsU3RlcDogMC4yNSxcbiAgICBzdGVwOiAwLjI1LFxuICAgIG1pbjogMCxcbiAgfSxcbiAgcmF0aW9uYWxlOiBudWxsLFxuICB0aXRsZTogJ051bWJlciBvZiBMZXR0ZXJzIGluIEZpcnN0IE5hbWUnLFxuICBkaXNhYmxlZDogZmFsc2UsXG4gIHRlYWNoZXJJbnN0cnVjdGlvbnM6IG51bGwsXG59O1xuXG5tb2NrRmV0Y2hTZXNzaW9uLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgYW5zd2VyOiBbXG4gICAge1xuICAgICAgaW50ZXJhY3RpdmU6IGZhbHNlLFxuICAgICAgdmFsdWU6IDMsXG4gICAgICBsYWJlbDogJ1RocmVlJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIHZhbHVlOiAyLFxuICAgICAgbGFiZWw6ICdGb3VyJyxcbiAgICAgIGludGVyYWN0aXZlOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHZhbHVlOiA0LFxuICAgICAgbGFiZWw6ICdGaXZlJyxcbiAgICAgIGludGVyYWN0aXZlOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGludGVyYWN0aXZlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiAwLjI1LFxuICAgICAgbGFiZWw6ICdzaXgnLFxuICAgIH0sXG4gICAge1xuICAgICAgdmFsdWU6IDEsXG4gICAgICBsYWJlbDogJ3NldmVuJyxcbiAgICAgIGludGVyYWN0aXZlOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGludGVyYWN0aXZlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgbGFiZWw6ICdlaWdodCcsXG4gICAgfSxcbiAgXSxcbn0pO1xuXG4vLyBUZXN0IHRvIGNoZWNrIGlmIGdldFNjb3JlIGNvcnJlY3RseSBwcm9jZXNzZXMgdGhlIHNlc3Npb24gZGF0YSBmcm9tIEFQSVxuZGVzY3JpYmUoJ2dldFNjb3JlIHdpdGggQVBJIHNlc3Npb24gZGF0YScsICgpID0+IHtcbiAgaXQoJ2NvcnJlY3RseSBwcm9jZXNzZXMgc2Vzc2lvbiBkYXRhIGZyb20gQVBJIGluIGV2YWx1YXRlIG1vZGUnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IG1vY2tGZXRjaFNlc3Npb24oKTtcbiAgICBjb25zdCBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScsIHBhcnRpYWxTY29yaW5nOiB0cnVlIH07XG4gICAgY29uc3QgbW9kID0gYXdhaXQgbW9kZWwocXVlc3Rpb24sIHNlc3Npb24sIGVudik7XG5cbiAgICAvLyBTaW11bGF0ZSB0aGUgQVBJIGNhbGwgYW5kIHByb2Nlc3MgdGhlIGRhdGFcbiAgICBjb25zdCBzY29yZVJlc3VsdCA9IGdldFNjb3JlKG1vZCwgc2Vzc2lvbiwgZW52KTtcblxuICAgIC8vIENoZWNrIGlmIHRoZSBhbnN3ZXJzIGZyb20gZ2V0U2NvcmUgbWF0Y2ggdGhlIGNvcnJlY3RlZEFuc3dlciBpbiBtb2RcbiAgICBleHBlY3Qoc2NvcmVSZXN1bHQuYW5zd2VycykudG9FcXVhbChtb2QuY29ycmVjdGVkQW5zd2VyKTtcbiAgfSk7XG5cbiAgaXQoJ2NvcnJlY3RseSBwcm9jZXNzZXMgc2Vzc2lvbiBkYXRhIGZyb20gQVBJIGluIHZpZXcgbW9kZScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gYXdhaXQgbW9ja0ZldGNoU2Vzc2lvbigpO1xuICAgIGNvbnN0IGVudiA9IHsgbW9kZTogJ3ZpZXcnLCBwYXJ0aWFsU2NvcmluZzogdHJ1ZSB9O1xuICAgIGNvbnN0IG1vZCA9IGF3YWl0IG1vZGVsKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpO1xuXG4gICAgLy8gU2ltdWxhdGUgdGhlIEFQSSBjYWxsIGFuZCBwcm9jZXNzIHRoZSBkYXRhXG4gICAgY29uc3Qgc2NvcmVSZXN1bHQgPSBnZXRTY29yZShtb2QsIHNlc3Npb24sIGVudik7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgYW5zd2VycyBmcm9tIGdldFNjb3JlIG1hdGNoIHRoZSBjb3JyZWN0ZWRBbnN3ZXIgaW4gbW9kXG4gICAgZXhwZWN0KHNjb3JlUmVzdWx0LmFuc3dlcnMpLnRvRXF1YWwoc2V0Q29ycmVjdG5lc3MobW9kLmNvcnJlY3RlZEFuc3dlciwgdHJ1ZSkpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnb3V0Y29tZScsICgpID0+IHtcbiAgY29uc3Qgc2Vzc2lvbiA9IHtcbiAgICBhbnN3ZXI6IFtcbiAgICAgIHtcbiAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgIHZhbHVlOiAzLFxuICAgICAgICBsYWJlbDogJ1RocmVlJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiAyLFxuICAgICAgICBsYWJlbDogJ0ZvdXInLFxuICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiA0LFxuICAgICAgICBsYWJlbDogJ0ZpdmUnLFxuICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IDAuMjUsXG4gICAgICAgIGxhYmVsOiAnc2l4JyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiAxLFxuICAgICAgICBsYWJlbDogJ3NldmVuJyxcbiAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgbGFiZWw6ICdlaWdodCcsXG4gICAgICB9LFxuICAgIF0sXG4gICAgaWQ6ICc0MDI4ZTRhMjRlNmY4ZWFmMDE0ZWQxYjA4MzM2MzVkMycsXG4gIH07XG4gIGNvbnN0IHF1ZXN0aW9uID0ge1xuICAgIGFkZENhdGVnb3J5RW5hYmxlZDogdHJ1ZSxcbiAgICBjaGFydFR5cGU6ICdiYXInLFxuICAgIGRhdGE6IFtcbiAgICAgIHtcbiAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgIHZhbHVlOiAzLFxuICAgICAgICBsYWJlbDogJ1RocmVlJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgbGFiZWw6ICdGb3VyJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgbGFiZWw6ICdGaXZlJyxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjb3JyZWN0QW5zd2VyOiB7XG4gICAgICBkYXRhOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB2YWx1ZTogMyxcbiAgICAgICAgICBsYWJlbDogJ1RocmVlJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHZhbHVlOiAyLFxuICAgICAgICAgIGxhYmVsOiAnRm91cicsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB2YWx1ZTogNCxcbiAgICAgICAgICBsYWJlbDogJ0ZpdmUnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgbGFiZWw6ICdTaXgnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgICAgbGFiZWw6ICdTZXZlbicsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgICBsYWJlbDogJ0VpZ2h0JyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICBkb21haW46IHtcbiAgICAgIGxhYmVsOiAnTnVtYmVyIG9mIExldHRlcnMnLFxuICAgIH0sXG4gICAgZ3JhcGg6IHtcbiAgICAgIGhlaWdodDogNTAwLFxuICAgICAgd2lkdGg6IDUwMCxcbiAgICB9LFxuICAgIHByb21wdDpcbiAgICAgICc8cD5Ncy4gQnlyZCBzaG93cyBoZXIgdGhpcmQgZ3JhZGUgc3R1ZGVudHMgaG93IHRvIG1ha2UgYSBiYXIgZ3JhcGguIFNoZSB1c2VzIHRoZSBudW1iZXIgb2YgbGV0dGVycyBpbiBzb21lIG9mIGhlciBzdHVkZW50cyYjMzk7IGZpcnN0IG5hbWVzLiBUaGUgc3R1ZGVudHMmIzM5OyBuYW1lcyBzaGUgdXNlcyBmb3IgdGhlIGJhciBncmFwaCBhcmUgc2hvd24gYmVsb3cuPC9wPjxwPjxpbWcgYWx0PVwiaW1hZ2UgMmVhZGU4ZThhMmZhNDQ1ZGFlNDMyYzQxN2U4YTI3MzFcIiBpZD1cIjJlYWRlOGU4YTJmYTQ0NWRhZTQzMmM0MTdlOGEyNzMxXCIgc3JjPVwiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3BpZS1wcm9kLTIyMTcxOC1hc3NldHMvaW1hZ2UvY2YyYzMzNGUtMzQwYy00NTIzLTlhNDctY2I4MzVmZGRmZWZlXCI+PC9wPjxwPk1zLiBCeXJkIHN0YXJ0cyB0aGUgYmFyIGdyYXBoIGJ5IHdyaXRpbmcgc29tZSBvZiB0aGUgbGFiZWxzLiYjMTYwO0ZpbmlzaCB0aGUgYmFyIGdyYXBoIGJlbG93IGJ5IGRyYWdnaW5nIHRoZSBiYXJzIHRvIHNob3cgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGZpcnN0IG5hbWUgbGV0dGVycyBvZiBhbGwgdGhlIHN0dWRlbnRzIGFuZCBhZGRpbmcgbGFiZWxzIGFzIG5lZWRlZC48L3A+PHA+PC9wPjxwPjwvcD48cD48L3A+JyxcbiAgICByYW5nZToge1xuICAgICAgbGFiZWw6ICdOdW1iZXIgb2YgU3R1ZGVudHMnLFxuICAgICAgbWF4OiA2LFxuICAgICAgbGFiZWxTdGVwOiAwLjI1LFxuICAgICAgc3RlcDogMC4yNSxcbiAgICAgIG1pbjogMCxcbiAgICB9LFxuICAgIHJhdGlvbmFsZTogbnVsbCxcbiAgICB0aXRsZTogJ051bWJlciBvZiBMZXR0ZXJzIGluIEZpcnN0IE5hbWUnLFxuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiBudWxsLFxuICB9O1xuXG4gIC8vIGlmIG1vZGVsLnNjb3JpbmdUeXBlID0gJ2FsbCBvciBub3RoaW5nJ1xuICAvLyAgICBpZiBlbnYucGFydGlhbFNjb3JpbmcgPSBmYWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+IGRpY2hvdG9tb3VzXG4gIC8vICAgIGVsc2UgZW52LnBhcnRpYWxTY29yaW5nID0gdHJ1ZSB8fCBlbnYucGFydGlhbFNjb3JpbmcgPSB1bmRlZmluZWQgICAgPT4gZGljaG90b21vdXNcbiAgLy8gZWxzZSBtb2RlbC5zY29yaW5nVHlwZSA9ICdwYXJ0aWFsIHNjb3JpbmcnIHx8IG1vZGVsLnNjb3JpbmdUeXBlID0gdW5kZWZpbmVkXG4gIC8vICAgIGlmIGVudi5wYXJ0aWFsU2NvcmluZyA9IGZhbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gZGljaG90b21vdXNcbiAgLy8gICAgZWxzZSBlbnYucGFydGlhbFNjb3JpbmcgPSB0cnVlIHx8IG1vZGVsLnBhcnRpYWxTY29yaW5nID0gdW5kZWZpbmVkICA9PiBwYXJ0aWFsLWNyZWRpdCBzY29yaW5nXG5cbiAgaXQuZWFjaGBcbiAgICBtb2RlICAgICAgICAgIHwgcGFydGlhbFNjb3JpbmcgfCBzY29yaW5nVHlwZSAgICAgICAgICB8IGV4cGVjdGVkXG4gICAgJHsnZXZhbHVhdGUnfSB8ICR7ZmFsc2V9ICAgICAgIHwgJHsnYWxsIG9yIG5vdGhpbmcnfSAgfCAkezB9XG4gICAgJHsnZXZhbHVhdGUnfSB8ICR7dHJ1ZX0gICAgICAgIHwgJHsnYWxsIG9yIG5vdGhpbmcnfSAgfCAkezB9XG4gICAgJHsnZXZhbHVhdGUnfSB8ICR7dW5kZWZpbmVkfSAgIHwgJHsnYWxsIG9yIG5vdGhpbmcnfSAgfCAkezB9XG4gICAgJHsnZXZhbHVhdGUnfSB8ICR7ZmFsc2V9ICAgICAgIHwgJHsncGFydGlhbCBzY29yaW5nJ30gfCAkezB9XG4gICAgJHsnZXZhbHVhdGUnfSB8ICR7dHJ1ZX0gICAgICAgIHwgJHsncGFydGlhbCBzY29yaW5nJ30gfCAkezAuODl9XG4gICAgJHsnZXZhbHVhdGUnfSB8ICR7dW5kZWZpbmVkfSAgIHwgJHsncGFydGlhbCBzY29yaW5nJ30gfCAkezAuODl9XG4gICAgJHsnZXZhbHVhdGUnfSB8ICR7ZmFsc2V9ICAgICAgIHwgJHt1bmRlZmluZWR9ICAgICAgICAgfCAkezB9XG4gICAgJHsnZXZhbHVhdGUnfSB8ICR7dHJ1ZX0gICAgICAgIHwgJHt1bmRlZmluZWR9ICAgICAgICAgfCAkezAuODl9XG4gICAgJHsnZXZhbHVhdGUnfSB8ICR7dW5kZWZpbmVkfSAgIHwgJHt1bmRlZmluZWR9ICAgICAgICAgfCAkezAuODl9XG4gICAgJHsnZ2F0aGVyJ30gICB8ICR7ZmFsc2V9ICAgICAgIHwgJHsncGFydGlhbCBzY29yaW5nJ30gfCAkezB9XG4gICAgJHsnZ2F0aGVyJ30gICB8ICR7dHJ1ZX0gICAgICAgIHwgJHsncGFydGlhbCBzY29yaW5nJ30gfCAkezB9XG4gICAgJHsnZ2F0aGVyJ30gICB8ICR7dW5kZWZpbmVkfSAgIHwgJHsncGFydGlhbCBzY29yaW5nJ30gfCAkezB9XG4gIGAoXG4gICAgJ2Vudi5tb2RlICRtb2RlLCBlbnYucGFydGlhbFNjb3JpbmcgJHBhcnRpYWxTY29yaW5nLCBtb2RlbC5zY29yaW5nVHlwZSAkc2NvcmluZ1R5cGUgPT4gJGV4cGVjdGVkJyxcbiAgICBhc3luYyAoeyBtb2RlLCBwYXJ0aWFsU2NvcmluZywgc2NvcmluZ1R5cGUsIGV4cGVjdGVkIH0pID0+IHtcbiAgICAgIGNvbnN0IGVudiA9IHsgbW9kZSwgcGFydGlhbFNjb3JpbmcgfTtcblxuICAgICAgY29uc3QgbW9kID0gYXdhaXQgbW9kZWwoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5xdWVzdGlvbixcbiAgICAgICAgICBzY29yaW5nVHlwZSxcbiAgICAgICAgfSxcbiAgICAgICAgc2Vzc2lvbixcbiAgICAgICAgZW52LFxuICAgICAgKTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZShtb2QsIHNlc3Npb24sIGVudik7XG5cbiAgICAgIGV4cGVjdChy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