@pie-element/explicit-constructed-response 9.3.2-tip-tap.9 → 9.3.2-tip-tap.10

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.
@@ -1,1205 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
6
-
7
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
8
-
9
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
-
11
- var _index = require("../index");
12
-
13
- var _defaults = _interopRequireDefault(require("../defaults"));
14
-
15
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
16
-
17
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
18
-
19
- jest.mock('@pie-lib/controller-utils', function () {
20
- return {
21
- getShuffledChoices: function getShuffledChoices(choices, session, updateSession, key) {
22
- var currentShuffled = ((session || {}).shuffledValues || []).filter(function (v) {
23
- return v;
24
- });
25
-
26
- if (session && !currentShuffled.length && updateSession && typeof updateSession === 'function') {
27
- updateSession();
28
- }
29
-
30
- return choices;
31
- },
32
- partialScoring: {
33
- enabled: function enabled(config, env) {
34
- config = config || {};
35
- env = env || {};
36
-
37
- if (config.partialScoring === false) {
38
- return false;
39
- }
40
-
41
- if (env.partialScoring === false) {
42
- return false;
43
- }
44
-
45
- return true;
46
- }
47
- }
48
- };
49
- });
50
-
51
- var choice = function choice(l, v) {
52
- return {
53
- label: l,
54
- value: v
55
- };
56
- };
57
-
58
- var choices = {
59
- 0: [choice('cow', '0'), choice('cattle', '1'), choice('calf', '2')],
60
- 1: [choice('over', '0'), choice('past', '1'), choice('beyond', '2')],
61
- 2: [choice('moon', '0')]
62
- };
63
- var question = {
64
- markup: '<p>The {{0}} jumped {{1}} the {{2}}</p>',
65
- disabled: false,
66
- choices: choices,
67
- prompt: 'Complete the sentence',
68
- note: 'The answer shown above is the most common correct answer for this item.',
69
- language: 'english',
70
- maxLengthPerChoiceEnabled: true,
71
- playerSpellCheckEnabled: true,
72
- displayType: 'block'
73
- };
74
- describe('controller', function () {
75
- describe('model', function () {
76
- var q, env;
77
- it('output when session is defined', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
78
- var m;
79
- return _regenerator["default"].wrap(function _callee$(_context) {
80
- while (1) {
81
- switch (_context.prev = _context.next) {
82
- case 0:
83
- _context.next = 2;
84
- return (0, _index.model)(question, {
85
- value: {
86
- 0: 'cow',
87
- 1: 'over',
88
- 2: 'moon'
89
- }
90
- }, {
91
- mode: 'evaluate'
92
- });
93
-
94
- case 2:
95
- m = _context.sent;
96
- expect(m).toEqual(expect.objectContaining({
97
- feedback: {
98
- 0: 'correct',
99
- 1: 'correct',
100
- 2: 'correct'
101
- },
102
- responseCorrect: true
103
- }));
104
-
105
- case 4:
106
- case "end":
107
- return _context.stop();
108
- }
109
- }
110
- }, _callee);
111
- })));
112
-
113
- var returnModel = function returnModel(session) {
114
- it("output when session is ".concat(JSON.stringify(session)), /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
115
- var m;
116
- return _regenerator["default"].wrap(function _callee2$(_context2) {
117
- while (1) {
118
- switch (_context2.prev = _context2.next) {
119
- case 0:
120
- _context2.next = 2;
121
- return (0, _index.model)(question, session, {
122
- mode: 'evaluate'
123
- });
124
-
125
- case 2:
126
- m = _context2.sent;
127
- expect(m).toEqual(expect.objectContaining({
128
- feedback: {
129
- 0: 'incorrect',
130
- 1: 'incorrect',
131
- 2: 'incorrect'
132
- },
133
- responseCorrect: false
134
- }));
135
-
136
- case 4:
137
- case "end":
138
- return _context2.stop();
139
- }
140
- }
141
- }, _callee2);
142
- })));
143
- };
144
-
145
- returnModel(undefined);
146
- returnModel(null);
147
- returnModel({});
148
-
149
- var assertGather = function assertGather(label, extra, session, expected) {
150
- it("'mode: gather, ".concat(label, "'"), /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
151
- var result;
152
- return _regenerator["default"].wrap(function _callee3$(_context3) {
153
- while (1) {
154
- switch (_context3.prev = _context3.next) {
155
- case 0:
156
- q = _objectSpread(_objectSpread({}, question), {}, {
157
- teacherInstructions: 'Teacher Instructions',
158
- rationale: 'Rationale'
159
- }, extra);
160
- env = {
161
- mode: 'gather'
162
- };
163
- _context3.next = 4;
164
- return (0, _index.model)(q, _objectSpread({
165
- id: '1',
166
- element: 'explicit-constructed-response'
167
- }, session), env);
168
-
169
- case 4:
170
- result = _context3.sent;
171
- expect(result).toEqual(_objectSpread(_objectSpread(_objectSpread({}, question), {}, {
172
- disabled: false,
173
- feedback: {},
174
- responseCorrect: undefined,
175
- maxLengthPerChoice: [10, 10, 7]
176
- }, env), expected));
177
-
178
- case 6:
179
- case "end":
180
- return _context3.stop();
181
- }
182
- }
183
- }, _callee3);
184
- })));
185
- };
186
-
187
- assertGather('promptEnabled, rationaleEnabled and teacherInstructionsEnabled not set', {}, {}, {
188
- rationale: _defaults["default"].rationale,
189
- showNote: true,
190
- teacherInstructions: _defaults["default"].teacherInstructions
191
- });
192
- assertGather('promptEnabled, rationaleEnabled and teacherInstructionsEnabled set to false', {
193
- promptEnabled: false,
194
- rationaleEnabled: false,
195
- teacherInstructionsEnabled: false,
196
- studentInstructionsEnabled: false
197
- }, {}, {
198
- prompt: _defaults["default"].prompt,
199
- rationale: _defaults["default"].rationale,
200
- showNote: true,
201
- teacherInstructions: _defaults["default"].teacherInstructions
202
- });
203
-
204
- var assertView = function assertView(label, extra, session, expected) {
205
- it("'mode: view, ".concat(label, "'"), /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
206
- var result;
207
- return _regenerator["default"].wrap(function _callee4$(_context4) {
208
- while (1) {
209
- switch (_context4.prev = _context4.next) {
210
- case 0:
211
- q = _objectSpread(_objectSpread({}, question), {}, {
212
- teacherInstructions: 'Teacher Instructions',
213
- rationale: 'Rationale'
214
- }, extra);
215
- env = {
216
- mode: 'view',
217
- role: 'instructor'
218
- };
219
- _context4.next = 4;
220
- return (0, _index.model)(q, _objectSpread({
221
- id: '1',
222
- element: 'explicit-constructed-response'
223
- }, session), env);
224
-
225
- case 4:
226
- result = _context4.sent;
227
- expect(result).toEqual(_objectSpread(_objectSpread(_objectSpread({}, question), {}, {
228
- disabled: true,
229
- feedback: {},
230
- responseCorrect: undefined,
231
- maxLengthPerChoice: [10, 10, 7]
232
- }, env), expected));
233
-
234
- case 6:
235
- case "end":
236
- return _context4.stop();
237
- }
238
- }
239
- }, _callee4);
240
- })));
241
- };
242
-
243
- assertView(' + role: instructor, promptEnabled, rationaleEnabled and teacherInstructionsEnabled set to false', {
244
- promptEnabled: false,
245
- rationaleEnabled: false,
246
- teacherInstructionsEnabled: false,
247
- studentInstructionsEnabled: false
248
- }, {}, {
249
- prompt: _defaults["default"].prompt,
250
- rationale: _defaults["default"].rationale,
251
- showNote: true,
252
- teacherInstructions: _defaults["default"].teacherInstructions
253
- });
254
- assertView(' + role: instructor, promptEnabled, rationaleEnabled and teacherInstructionsEnabled unset', {}, {}, {
255
- teacherInstructions: 'Teacher Instructions',
256
- showNote: true,
257
- rationale: 'Rationale'
258
- });
259
-
260
- var assertViewStudent = function assertViewStudent(label, extra, session, expected) {
261
- it("'mode: view, ".concat(label, "'"), /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5() {
262
- var result;
263
- return _regenerator["default"].wrap(function _callee5$(_context5) {
264
- while (1) {
265
- switch (_context5.prev = _context5.next) {
266
- case 0:
267
- q = _objectSpread(_objectSpread({}, question), {}, {
268
- teacherInstructions: 'Teacher Instructions',
269
- rationale: 'Rationale'
270
- }, extra);
271
- env = {
272
- mode: 'view',
273
- role: ' student'
274
- };
275
- _context5.next = 4;
276
- return (0, _index.model)(q, _objectSpread({
277
- id: '1',
278
- element: 'explicit-constructed-response'
279
- }, session), env);
280
-
281
- case 4:
282
- result = _context5.sent;
283
- expect(result).toEqual(_objectSpread(_objectSpread(_objectSpread({}, question), {}, {
284
- disabled: true,
285
- feedback: {},
286
- responseCorrect: undefined,
287
- maxLengthPerChoice: [10, 10, 7]
288
- }, env), expected));
289
-
290
- case 6:
291
- case "end":
292
- return _context5.stop();
293
- }
294
- }
295
- }, _callee5);
296
- })));
297
- };
298
-
299
- assertViewStudent(' + role: student, promptEnabled, rationaleEnabled and teacherInstructionsEnabled set to false', {
300
- promptEnabled: false,
301
- rationaleEnabled: false,
302
- teacherInstructionsEnabled: false,
303
- studentInstructionsEnabled: false
304
- }, {}, {
305
- prompt: _defaults["default"].prompt,
306
- rationale: _defaults["default"].rationale,
307
- showNote: true,
308
- teacherInstructions: _defaults["default"].teacherInstructions
309
- });
310
- assertViewStudent(' + role: student, promptEnabled, rationaleEnabled and teacherInstructionsEnabled unset', {}, {}, {
311
- rationale: _defaults["default"].rationale,
312
- showNote: true,
313
- teacherInstructions: _defaults["default"].teacherInstructions
314
- });
315
-
316
- var assertEvaluate = function assertEvaluate(label, extra, session, expected) {
317
- it("'mode: evaluate, ".concat(label, "'"), /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6() {
318
- var result;
319
- return _regenerator["default"].wrap(function _callee6$(_context6) {
320
- while (1) {
321
- switch (_context6.prev = _context6.next) {
322
- case 0:
323
- q = _objectSpread(_objectSpread({}, question), {}, {
324
- teacherInstructions: 'Teacher Instructions',
325
- rationale: 'Rationale'
326
- }, extra);
327
- env = {
328
- mode: 'evaluate',
329
- role: 'instructor'
330
- };
331
- _context6.next = 4;
332
- return (0, _index.model)(q, _objectSpread({
333
- id: '1',
334
- element: 'explicit-constructed-response'
335
- }, session), env);
336
-
337
- case 4:
338
- result = _context6.sent;
339
- expect(result).toEqual(_objectSpread(_objectSpread(_objectSpread({}, question), {}, {
340
- teacherInstructions: 'Teacher Instructions',
341
- rationale: 'Rationale',
342
- disabled: true,
343
- choices: {
344
- 0: [{
345
- label: 'cow',
346
- value: '0',
347
- correct: true
348
- }, {
349
- label: 'cattle',
350
- value: '1',
351
- correct: true
352
- }, {
353
- label: 'calf',
354
- value: '2',
355
- correct: true
356
- }],
357
- 1: [{
358
- label: 'over',
359
- value: '0',
360
- correct: true
361
- }, {
362
- label: 'past',
363
- value: '1',
364
- correct: true
365
- }, {
366
- label: 'beyond',
367
- value: '2',
368
- correct: true
369
- }],
370
- 2: [{
371
- label: 'moon',
372
- value: '0',
373
- correct: true
374
- }]
375
- },
376
- maxLengthPerChoice: [10, 10, 7]
377
- }, env), expected));
378
-
379
- case 6:
380
- case "end":
381
- return _context6.stop();
382
- }
383
- }
384
- }, _callee6);
385
- })));
386
- };
387
-
388
- assertEvaluate('- correct answer', {}, {
389
- value: {
390
- 0: 'cow',
391
- 1: 'over',
392
- 2: 'moon'
393
- }
394
- }, {
395
- feedback: {
396
- 0: 'correct',
397
- 1: 'correct',
398
- 2: 'correct'
399
- },
400
- showNote: true,
401
- responseCorrect: true
402
- });
403
- assertEvaluate('- partially correct answer', {}, {
404
- value: {
405
- 0: 'cow',
406
- 1: 'over',
407
- 2: 'sun'
408
- }
409
- }, {
410
- feedback: {
411
- 0: 'correct',
412
- 1: 'correct',
413
- 2: 'incorrect'
414
- },
415
- showNote: true,
416
- responseCorrect: false
417
- });
418
- assertEvaluate('- partially correct answer using alternates', {}, {
419
- value: {
420
- 0: 'calf',
421
- 1: 'over',
422
- 2: 'sun'
423
- }
424
- }, {
425
- feedback: {
426
- 0: 'correct',
427
- 1: 'correct',
428
- 2: 'incorrect'
429
- },
430
- showNote: true,
431
- responseCorrect: false
432
- });
433
- assertEvaluate('- incorrect answer', {}, {
434
- value: {
435
- 0: 'han',
436
- 1: 'above',
437
- 2: 'chicken'
438
- }
439
- }, {
440
- feedback: {
441
- 0: 'incorrect',
442
- 1: 'incorrect',
443
- 2: 'incorrect'
444
- },
445
- showNote: true,
446
- responseCorrect: false
447
- });
448
- });
449
- describe('get score', function () {
450
- var assertScore = function assertScore(session, expected) {
451
- it('return score', function () {
452
- var score = (0, _index.getScore)(question, session);
453
- expect(score).toEqual(expected);
454
- });
455
- };
456
-
457
- assertScore({
458
- value: {
459
- 0: 'cow',
460
- 1: 'over',
461
- 2: 'moon'
462
- }
463
- }, 1);
464
- assertScore({
465
- value: {
466
- 0: 'cattle',
467
- 1: 'over',
468
- 2: 'moon'
469
- }
470
- }, 1);
471
- assertScore({
472
- value: {
473
- 0: 'calf',
474
- 1: 'over',
475
- 2: 'moon'
476
- }
477
- }, 1);
478
- assertScore({
479
- value: {
480
- 0: 'cow',
481
- 1: 'past',
482
- 2: 'moon'
483
- }
484
- }, 1);
485
- assertScore({
486
- value: {
487
- 0: 'cattle',
488
- 1: 'past',
489
- 2: 'moon'
490
- }
491
- }, 1);
492
- assertScore({
493
- value: {
494
- 0: 'calf',
495
- 1: 'past',
496
- 2: 'moon'
497
- }
498
- }, 1);
499
- assertScore({
500
- value: {
501
- 0: 'cow',
502
- 1: 'beyond',
503
- 2: 'moon'
504
- }
505
- }, 1);
506
- assertScore({
507
- value: {
508
- 0: 'cattle',
509
- 1: 'beyond',
510
- 2: 'moon'
511
- }
512
- }, 1);
513
- assertScore({
514
- value: {
515
- 0: 'calf',
516
- 1: 'beyond',
517
- 2: 'moon'
518
- }
519
- }, 1);
520
- assertScore({
521
- value: {
522
- 0: 'calf',
523
- 1: 'under',
524
- 2: 'moon'
525
- }
526
- }, 0.67);
527
- assertScore({
528
- value: {
529
- 0: 'cat',
530
- 1: 'under',
531
- 2: 'moon'
532
- }
533
- }, 0.33);
534
- assertScore({
535
- value: {
536
- 0: 'cat',
537
- 1: 'under',
538
- 2: 'sun'
539
- }
540
- }, 0);
541
-
542
- var returnScore = function returnScore(session) {
543
- it("score = 0 when session is ".concat(JSON.stringify(session)), function () {
544
- expect((0, _index.getScore)(question, session)).toEqual(0);
545
- });
546
- };
547
-
548
- returnScore(undefined);
549
- returnScore(null);
550
- returnScore({});
551
- });
552
- describe('outcome partialScoring test', function () {
553
- var assertOutcome = function assertOutcome(message, extra, sessionValue, env, expected) {
554
- it(message, /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7() {
555
- var result;
556
- return _regenerator["default"].wrap(function _callee7$(_context7) {
557
- while (1) {
558
- switch (_context7.prev = _context7.next) {
559
- case 0:
560
- _context7.next = 2;
561
- return (0, _index.outcome)(_objectSpread(_objectSpread({}, question), extra), sessionValue, env);
562
-
563
- case 2:
564
- result = _context7.sent;
565
- expect(result).toEqual(expect.objectContaining(expected));
566
-
567
- case 4:
568
- case "end":
569
- return _context7.stop();
570
- }
571
- }
572
- }, _callee7);
573
- })));
574
- };
575
-
576
- assertOutcome('element.partialScoring = true', {
577
- partialScoring: true
578
- }, {
579
- value: {
580
- 0: 'calf',
581
- 1: 'under',
582
- 2: 'moon'
583
- }
584
- }, {
585
- mode: 'evaluate'
586
- }, {
587
- score: 0.67
588
- });
589
- assertOutcome('element.partialScoring = false', {
590
- partialScoring: false
591
- }, {
592
- value: {
593
- 0: 'calf',
594
- 1: 'under',
595
- 2: 'moon'
596
- }
597
- }, {
598
- mode: 'evaluate'
599
- }, {
600
- score: 0
601
- });
602
- assertOutcome('element.partialScoring = false, env.partialScoring = true', {
603
- partialScoring: false
604
- }, {
605
- value: {
606
- 0: 'calf',
607
- 1: 'under',
608
- 2: 'moon'
609
- }
610
- }, {
611
- mode: 'evaluate',
612
- partialScoring: true
613
- }, {
614
- score: 0
615
- });
616
- assertOutcome('element.partialScoring = true, env.partialScoring = false', {
617
- partialScoring: true
618
- }, {
619
- value: {
620
- 0: 'calf',
621
- 1: 'under',
622
- 2: 'moon'
623
- }
624
- }, {
625
- mode: 'evaluate',
626
- partialScoring: false
627
- }, {
628
- score: 0
629
- });
630
- });
631
- describe('outcome', function () {
632
- var assertOutcome = function assertOutcome(partialScoring, sessionValue, expected) {
633
- it("partial score ".concat(partialScoring ? 'enabled' : ''), /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee8() {
634
- var result;
635
- return _regenerator["default"].wrap(function _callee8$(_context8) {
636
- while (1) {
637
- switch (_context8.prev = _context8.next) {
638
- case 0:
639
- _context8.next = 2;
640
- return (0, _index.outcome)(_objectSpread(_objectSpread({}, question), {}, {
641
- partialScoring: partialScoring
642
- }), sessionValue);
643
-
644
- case 2:
645
- result = _context8.sent;
646
- expect(result).toEqual(expected);
647
-
648
- case 4:
649
- case "end":
650
- return _context8.stop();
651
- }
652
- }
653
- }, _callee8);
654
- })));
655
- };
656
-
657
- assertOutcome(true, {
658
- value: {
659
- 0: 'cow',
660
- 1: 'over',
661
- 2: 'moon'
662
- }
663
- }, {
664
- score: 1,
665
- empty: false
666
- });
667
- assertOutcome(true, {
668
- value: {
669
- 0: 'cattle',
670
- 1: 'over',
671
- 2: 'moon'
672
- }
673
- }, {
674
- score: 1,
675
- empty: false
676
- });
677
- assertOutcome(true, {
678
- value: {
679
- 0: 'calf',
680
- 1: 'over',
681
- 2: 'moon'
682
- }
683
- }, {
684
- score: 1,
685
- empty: false
686
- });
687
- assertOutcome(true, {
688
- value: {
689
- 0: 'cow',
690
- 1: 'past',
691
- 2: 'moon'
692
- }
693
- }, {
694
- score: 1,
695
- empty: false
696
- });
697
- assertOutcome(true, {
698
- value: {
699
- 0: 'cattle',
700
- 1: 'past',
701
- 2: 'moon'
702
- }
703
- }, {
704
- score: 1,
705
- empty: false
706
- });
707
- assertOutcome(true, {
708
- value: {
709
- 0: 'calf',
710
- 1: 'past',
711
- 2: 'moon'
712
- }
713
- }, {
714
- score: 1,
715
- empty: false
716
- });
717
- assertOutcome(true, {
718
- value: {
719
- 0: 'cow',
720
- 1: 'beyond',
721
- 2: 'moon'
722
- }
723
- }, {
724
- score: 1,
725
- empty: false
726
- });
727
- assertOutcome(true, {
728
- value: {
729
- 0: 'cattle',
730
- 1: 'beyond',
731
- 2: 'moon'
732
- }
733
- }, {
734
- score: 1,
735
- empty: false
736
- });
737
- assertOutcome(true, {
738
- value: {
739
- 0: 'calf',
740
- 1: 'beyond',
741
- 2: 'moon'
742
- }
743
- }, {
744
- score: 1,
745
- empty: false
746
- });
747
- assertOutcome(true, {
748
- value: {
749
- 0: 'calf',
750
- 1: 'under',
751
- 2: 'moon'
752
- }
753
- }, {
754
- score: 0.67,
755
- empty: false
756
- });
757
- assertOutcome(true, {
758
- value: {
759
- 0: 'cat',
760
- 1: 'under',
761
- 2: 'moon'
762
- }
763
- }, {
764
- score: 0.33,
765
- empty: false
766
- });
767
- assertOutcome(true, {
768
- value: {
769
- 0: 'cat',
770
- 1: 'under',
771
- 2: 'sun'
772
- }
773
- }, {
774
- score: 0,
775
- empty: false
776
- });
777
- assertOutcome(false, {
778
- value: {
779
- 0: 'cow',
780
- 1: 'over',
781
- 2: 'moon'
782
- }
783
- }, {
784
- score: 1,
785
- empty: false
786
- });
787
- assertOutcome(false, {
788
- value: {
789
- 0: 'cattle',
790
- 1: 'over',
791
- 2: 'moon'
792
- }
793
- }, {
794
- score: 1,
795
- empty: false
796
- });
797
- assertOutcome(false, {
798
- value: {
799
- 0: 'calf',
800
- 1: 'over',
801
- 2: 'moon'
802
- }
803
- }, {
804
- score: 1,
805
- empty: false
806
- });
807
- assertOutcome(false, {
808
- value: {
809
- 0: 'cow',
810
- 1: 'past',
811
- 2: 'moon'
812
- }
813
- }, {
814
- score: 1,
815
- empty: false
816
- });
817
- assertOutcome(false, {
818
- value: {
819
- 0: 'cattle',
820
- 1: 'past',
821
- 2: 'moon'
822
- }
823
- }, {
824
- score: 1,
825
- empty: false
826
- });
827
- assertOutcome(false, {
828
- value: {
829
- 0: 'calf',
830
- 1: 'past',
831
- 2: 'moon'
832
- }
833
- }, {
834
- score: 1,
835
- empty: false
836
- });
837
- assertOutcome(false, {
838
- value: {
839
- 0: 'cow',
840
- 1: 'beyond',
841
- 2: 'moon'
842
- }
843
- }, {
844
- score: 1,
845
- empty: false
846
- });
847
- assertOutcome(false, {
848
- value: {
849
- 0: 'cattle',
850
- 1: 'beyond',
851
- 2: 'moon'
852
- }
853
- }, {
854
- score: 1,
855
- empty: false
856
- });
857
- assertOutcome(false, {
858
- value: {
859
- 0: 'calf',
860
- 1: 'beyond',
861
- 2: 'moon'
862
- }
863
- }, {
864
- score: 1,
865
- empty: false
866
- });
867
- assertOutcome(false, {
868
- value: {
869
- 0: 'calf',
870
- 1: 'under',
871
- 2: 'moon'
872
- }
873
- }, {
874
- score: 0,
875
- empty: false
876
- });
877
- assertOutcome(false, {
878
- value: {
879
- 0: 'cat',
880
- 1: 'under',
881
- 2: 'moon'
882
- }
883
- }, {
884
- score: 0,
885
- empty: false
886
- });
887
- assertOutcome(false, {
888
- value: {
889
- 0: 'cat',
890
- 1: 'under',
891
- 2: 'sun'
892
- }
893
- }, {
894
- score: 0,
895
- empty: false
896
- });
897
-
898
- var returnModel = function returnModel(session) {
899
- it("empty: true when session is ".concat(JSON.stringify(session)), /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee9() {
900
- var m;
901
- return _regenerator["default"].wrap(function _callee9$(_context9) {
902
- while (1) {
903
- switch (_context9.prev = _context9.next) {
904
- case 0:
905
- _context9.next = 2;
906
- return (0, _index.outcome)(question, session);
907
-
908
- case 2:
909
- m = _context9.sent;
910
- expect(m).toEqual(expect.objectContaining({
911
- score: 0,
912
- empty: true
913
- }));
914
-
915
- case 4:
916
- case "end":
917
- return _context9.stop();
918
- }
919
- }
920
- }, _callee9);
921
- })));
922
- };
923
-
924
- returnModel(undefined);
925
- returnModel(null);
926
- returnModel({});
927
- });
928
- describe('prepareVal', function () {
929
- it('should return empty string on null or undefined', function () {
930
- expect((0, _index.prepareVal)(null)).toEqual('');
931
- expect((0, _index.prepareVal)(undefined)).toEqual('');
932
- });
933
- it('should remove html tags', function () {
934
- expect((0, _index.prepareVal)('<div>Foo Bar</div>')).toEqual('Foo Bar');
935
- });
936
- describe('correct response', function () {
937
- var question;
938
- beforeEach(function () {
939
- question = {
940
- choices: choices
941
- };
942
- });
943
- it('returns correct response if env is correct', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee10() {
944
- var sess;
945
- return _regenerator["default"].wrap(function _callee10$(_context10) {
946
- while (1) {
947
- switch (_context10.prev = _context10.next) {
948
- case 0:
949
- _context10.next = 2;
950
- return (0, _index.createCorrectResponseSession)(question, {
951
- mode: 'gather',
952
- role: 'instructor'
953
- });
954
-
955
- case 2:
956
- sess = _context10.sent;
957
- expect(sess).toEqual({
958
- id: '1',
959
- value: {
960
- 0: 'cow',
961
- 1: 'over',
962
- 2: 'moon'
963
- }
964
- });
965
-
966
- case 4:
967
- case "end":
968
- return _context10.stop();
969
- }
970
- }
971
- }, _callee10);
972
- })));
973
- it('returns null env is student', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee11() {
974
- var noResult;
975
- return _regenerator["default"].wrap(function _callee11$(_context11) {
976
- while (1) {
977
- switch (_context11.prev = _context11.next) {
978
- case 0:
979
- _context11.next = 2;
980
- return (0, _index.createCorrectResponseSession)(question, {
981
- mode: 'gather',
982
- role: 'student'
983
- });
984
-
985
- case 2:
986
- noResult = _context11.sent;
987
- expect(noResult).toBeNull();
988
-
989
- case 4:
990
- case "end":
991
- return _context11.stop();
992
- }
993
- }
994
- }, _callee11);
995
- })));
996
- });
997
- });
998
- describe('correct response', function () {
999
- it('returns correct response if role is instructor and mode is gather', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee12() {
1000
- var sess;
1001
- return _regenerator["default"].wrap(function _callee12$(_context12) {
1002
- while (1) {
1003
- switch (_context12.prev = _context12.next) {
1004
- case 0:
1005
- _context12.next = 2;
1006
- return (0, _index.createCorrectResponseSession)(question, {
1007
- mode: 'gather',
1008
- role: 'instructor'
1009
- });
1010
-
1011
- case 2:
1012
- sess = _context12.sent;
1013
- expect(sess).toEqual({
1014
- id: '1',
1015
- value: {
1016
- 0: 'cow',
1017
- 1: 'over',
1018
- 2: 'moon'
1019
- }
1020
- });
1021
-
1022
- case 4:
1023
- case "end":
1024
- return _context12.stop();
1025
- }
1026
- }
1027
- }, _callee12);
1028
- })));
1029
- it('returns correct response if role is instructor and mode is view', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee13() {
1030
- var sess;
1031
- return _regenerator["default"].wrap(function _callee13$(_context13) {
1032
- while (1) {
1033
- switch (_context13.prev = _context13.next) {
1034
- case 0:
1035
- _context13.next = 2;
1036
- return (0, _index.createCorrectResponseSession)(question, {
1037
- mode: 'view',
1038
- role: 'instructor'
1039
- });
1040
-
1041
- case 2:
1042
- sess = _context13.sent;
1043
- expect(sess).toEqual({
1044
- id: '1',
1045
- value: {
1046
- 0: 'cow',
1047
- 1: 'over',
1048
- 2: 'moon'
1049
- }
1050
- });
1051
-
1052
- case 4:
1053
- case "end":
1054
- return _context13.stop();
1055
- }
1056
- }
1057
- }, _callee13);
1058
- })));
1059
- it('returns null if mode is evaluate', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee14() {
1060
- var noResult;
1061
- return _regenerator["default"].wrap(function _callee14$(_context14) {
1062
- while (1) {
1063
- switch (_context14.prev = _context14.next) {
1064
- case 0:
1065
- _context14.next = 2;
1066
- return (0, _index.createCorrectResponseSession)(question, {
1067
- mode: 'evaluate',
1068
- role: 'instructor'
1069
- });
1070
-
1071
- case 2:
1072
- noResult = _context14.sent;
1073
- expect(noResult).toBeNull();
1074
-
1075
- case 4:
1076
- case "end":
1077
- return _context14.stop();
1078
- }
1079
- }
1080
- }, _callee14);
1081
- })));
1082
- it('returns null if role is student', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee15() {
1083
- var noResult;
1084
- return _regenerator["default"].wrap(function _callee15$(_context15) {
1085
- while (1) {
1086
- switch (_context15.prev = _context15.next) {
1087
- case 0:
1088
- _context15.next = 2;
1089
- return (0, _index.createCorrectResponseSession)(question, {
1090
- mode: 'gather',
1091
- role: 'student'
1092
- });
1093
-
1094
- case 2:
1095
- noResult = _context15.sent;
1096
- expect(noResult).toBeNull();
1097
-
1098
- case 4:
1099
- case "end":
1100
- return _context15.stop();
1101
- }
1102
- }
1103
- }, _callee15);
1104
- })));
1105
- });
1106
- describe('prepareChoice', function () {
1107
- var assertPrepareChoice = function assertPrepareChoice(env, defaultFeedback, choice, expected) {
1108
- var preparChoiceFn = (0, _index.prepareChoice)(env.mode, defaultFeedback);
1109
- it("prepare choices in ".concat(env.mode, " mode: ").concat(JSON.stringify(choice), " -> ").concat(JSON.stringify(expected)), function () {
1110
- expect(preparChoiceFn(choice)).toEqual(expected);
1111
- });
1112
- };
1113
-
1114
- assertPrepareChoice({
1115
- mode: 'gather'
1116
- }, {
1117
- correct: 'Correct',
1118
- incorrect: 'Incorrect'
1119
- }, {
1120
- value: '0',
1121
- label: 'cow'
1122
- }, {
1123
- value: '0',
1124
- label: 'cow'
1125
- });
1126
- assertPrepareChoice({
1127
- mode: 'view'
1128
- }, {
1129
- correct: 'Correct',
1130
- incorrect: 'Incorrect'
1131
- }, {
1132
- value: '0',
1133
- label: 'cow'
1134
- }, {
1135
- value: '0',
1136
- label: 'cow'
1137
- });
1138
- assertPrepareChoice({
1139
- mode: 'evaluate'
1140
- }, {
1141
- correct: 'Correct',
1142
- incorrect: 'Incorrect'
1143
- }, {
1144
- value: '0',
1145
- label: 'cow'
1146
- }, {
1147
- value: '0',
1148
- label: 'cow',
1149
- correct: true
1150
- });
1151
- assertPrepareChoice({
1152
- mode: 'evaluate'
1153
- }, {
1154
- correct: 'Correct',
1155
- incorrect: 'Incorrect'
1156
- }, {
1157
- value: '0',
1158
- label: 'cow',
1159
- feedback: {
1160
- type: 'default'
1161
- }
1162
- }, {
1163
- value: '0',
1164
- label: 'cow',
1165
- correct: true,
1166
- feedback: 'Correct'
1167
- });
1168
- assertPrepareChoice({
1169
- mode: 'evaluate'
1170
- }, {
1171
- correct: 'Correct',
1172
- incorrect: 'Incorrect'
1173
- }, {
1174
- value: '0',
1175
- label: 'cow',
1176
- feedback: {
1177
- type: 'custom'
1178
- }
1179
- }, {
1180
- value: '0',
1181
- label: 'cow',
1182
- correct: true,
1183
- feedback: undefined
1184
- });
1185
- assertPrepareChoice({
1186
- mode: 'evaluate'
1187
- }, {
1188
- correct: 'Correct',
1189
- incorrect: 'Incorrect'
1190
- }, {
1191
- value: '0',
1192
- label: 'cow',
1193
- feedback: {
1194
- type: 'custom',
1195
- value: 'Custom Feedback'
1196
- }
1197
- }, {
1198
- value: '0',
1199
- label: 'cow',
1200
- correct: true,
1201
- feedback: 'Custom Feedback'
1202
- });
1203
- });
1204
- });
1205
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vaW5kZXgudGVzdC5qcyJdLCJuYW1lcyI6WyJqZXN0IiwibW9jayIsImdldFNodWZmbGVkQ2hvaWNlcyIsImNob2ljZXMiLCJzZXNzaW9uIiwidXBkYXRlU2Vzc2lvbiIsImtleSIsImN1cnJlbnRTaHVmZmxlZCIsInNodWZmbGVkVmFsdWVzIiwiZmlsdGVyIiwidiIsImxlbmd0aCIsInBhcnRpYWxTY29yaW5nIiwiZW5hYmxlZCIsImNvbmZpZyIsImVudiIsImNob2ljZSIsImwiLCJsYWJlbCIsInZhbHVlIiwicXVlc3Rpb24iLCJtYXJrdXAiLCJkaXNhYmxlZCIsInByb21wdCIsIm5vdGUiLCJsYW5ndWFnZSIsIm1heExlbmd0aFBlckNob2ljZUVuYWJsZWQiLCJwbGF5ZXJTcGVsbENoZWNrRW5hYmxlZCIsImRpc3BsYXlUeXBlIiwiZGVzY3JpYmUiLCJxIiwiaXQiLCJtb2RlIiwibSIsImV4cGVjdCIsInRvRXF1YWwiLCJvYmplY3RDb250YWluaW5nIiwiZmVlZGJhY2siLCJyZXNwb25zZUNvcnJlY3QiLCJyZXR1cm5Nb2RlbCIsIkpTT04iLCJzdHJpbmdpZnkiLCJ1bmRlZmluZWQiLCJhc3NlcnRHYXRoZXIiLCJleHRyYSIsImV4cGVjdGVkIiwidGVhY2hlckluc3RydWN0aW9ucyIsInJhdGlvbmFsZSIsImlkIiwiZWxlbWVudCIsInJlc3VsdCIsIm1heExlbmd0aFBlckNob2ljZSIsImRlZmF1bHRzIiwic2hvd05vdGUiLCJwcm9tcHRFbmFibGVkIiwicmF0aW9uYWxlRW5hYmxlZCIsInRlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkIiwic3R1ZGVudEluc3RydWN0aW9uc0VuYWJsZWQiLCJhc3NlcnRWaWV3Iiwicm9sZSIsImFzc2VydFZpZXdTdHVkZW50IiwiYXNzZXJ0RXZhbHVhdGUiLCJjb3JyZWN0IiwiYXNzZXJ0U2NvcmUiLCJzY29yZSIsInJldHVyblNjb3JlIiwiYXNzZXJ0T3V0Y29tZSIsIm1lc3NhZ2UiLCJzZXNzaW9uVmFsdWUiLCJlbXB0eSIsImJlZm9yZUVhY2giLCJzZXNzIiwibm9SZXN1bHQiLCJ0b0JlTnVsbCIsImFzc2VydFByZXBhcmVDaG9pY2UiLCJkZWZhdWx0RmVlZGJhY2siLCJwcmVwYXJDaG9pY2VGbiIsImluY29ycmVjdCIsInR5cGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTs7QUFFQTs7Ozs7O0FBRUFBLElBQUksQ0FBQ0MsSUFBTCxDQUFVLDJCQUFWLEVBQXVDO0FBQUEsU0FBTztBQUM1Q0MsSUFBQUEsa0JBQWtCLEVBQUUsNEJBQUNDLE9BQUQsRUFBVUMsT0FBVixFQUFtQkMsYUFBbkIsRUFBa0NDLEdBQWxDLEVBQTBDO0FBQzVELFVBQU1DLGVBQWUsR0FBRyxDQUFDLENBQUNILE9BQU8sSUFBSSxFQUFaLEVBQWdCSSxjQUFoQixJQUFrQyxFQUFuQyxFQUF1Q0MsTUFBdkMsQ0FBOEMsVUFBQ0MsQ0FBRDtBQUFBLGVBQU9BLENBQVA7QUFBQSxPQUE5QyxDQUF4Qjs7QUFFQSxVQUFJTixPQUFPLElBQUksQ0FBQ0csZUFBZSxDQUFDSSxNQUE1QixJQUFzQ04sYUFBdEMsSUFBdUQsT0FBT0EsYUFBUCxLQUF5QixVQUFwRixFQUFnRztBQUM5RkEsUUFBQUEsYUFBYTtBQUNkOztBQUVELGFBQU9GLE9BQVA7QUFDRCxLQVQyQztBQVU1Q1MsSUFBQUEsY0FBYyxFQUFFO0FBQ2RDLE1BQUFBLE9BQU8sRUFBRSxpQkFBQ0MsTUFBRCxFQUFTQyxHQUFULEVBQWlCO0FBQ3hCRCxRQUFBQSxNQUFNLEdBQUdBLE1BQU0sSUFBSSxFQUFuQjtBQUNBQyxRQUFBQSxHQUFHLEdBQUdBLEdBQUcsSUFBSSxFQUFiOztBQUVBLFlBQUlELE1BQU0sQ0FBQ0YsY0FBUCxLQUEwQixLQUE5QixFQUFxQztBQUNuQyxpQkFBTyxLQUFQO0FBQ0Q7O0FBRUQsWUFBSUcsR0FBRyxDQUFDSCxjQUFKLEtBQXVCLEtBQTNCLEVBQWtDO0FBQ2hDLGlCQUFPLEtBQVA7QUFDRDs7QUFFRCxlQUFPLElBQVA7QUFDRDtB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QUFFO0FBQXpCO0FBQXRDLEtBSGlCLEVBSWpCO0FBQUVBLE1BQUFBLEtBQUssRUFBRSxHQUFUO0FBQWNELE1BQUFBLEtBQUssRUFBRSxLQUFyQjtBQUE0QjRDLE1BQUFBLE9BQU8sRUFBRSxJQUFyQztBQUEyQ3pCLE1BQUFBLFFBQVEsRUFBRTtBQUFyRCxLQUppQixDQUFuQjtBQU1ELEdBbERPLENBQVI7QUFtREQsQ0F6a0JPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtb2RlbCwgZ2V0U2NvcmUsIG91dGNvbWUsIHByZXBhcmVWYWwsIGNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24sIHByZXBhcmVDaG9pY2UgfSBmcm9tICcuLi9pbmRleCc7XG5cbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cyc7XG5cbmplc3QubW9jaygnQHBpZS1saWIvY29udHJvbGxlci11dGlscycsICgpID0+ICh7XG4gIGdldFNodWZmbGVkQ2hvaWNlczogKGNob2ljZXMsIHNlc3Npb24sIHVwZGF0ZVNlc3Npb24sIGtleSkgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnRTaHVmZmxlZCA9ICgoc2Vzc2lvbiB8fCB7fSkuc2h1ZmZsZWRWYWx1ZXMgfHwgW10pLmZpbHRlcigodikgPT4gdik7XG5cbiAgICBpZiAoc2Vzc2lvbiAmJiAhY3VycmVudFNodWZmbGVkLmxlbmd0aCAmJiB1cGRhdGVTZXNzaW9uICYmIHR5cGVvZiB1cGRhdGVTZXNzaW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB1cGRhdGVTZXNzaW9uKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNob2ljZXM7XG4gIH0sXG4gIHBhcnRpYWxTY29yaW5nOiB7XG4gICAgZW5hYmxlZDogKGNvbmZpZywgZW52KSA9PiB7XG4gICAgICBjb25maWcgPSBjb25maWcgfHwge307XG4gICAgICBlbnYgPSBlbnYgfHwge307XG5cbiAgICAgIGlmIChjb25maWcucGFydGlhbFNjb3JpbmcgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVudi5wYXJ0aWFsU2NvcmluZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICB9LFxufSkpO1xuXG5jb25zdCBjaG9pY2UgPSAobCwgdikgPT4gKHsgbGFiZWw6IGwsIHZhbHVlOiB2IH0pO1xuY29uc3QgY2hvaWNlcyA9IHtcbiAgMDogW2Nob2ljZSgnY293JywgJzAnKSwgY2hvaWNlKCdjYXR0bGUnLCAnMScpLCBjaG9pY2UoJ2NhbGYnLCAnMicpXSxcbiAgMTogW2Nob2ljZSgnb3ZlcicsICcwJyksIGNob2ljZSgncGFzdCcsICcxJyksIGNob2ljZSgnYmV5b25kJywgJzInKV0sXG4gIDI6IFtjaG9pY2UoJ21vb24nLCAnMCcpXSxcbn07XG5cbmNvbnN0IHF1ZXN0aW9uID0ge1xuICBtYXJrdXA6ICc8cD5UaGUge3swfX0ganVtcGVkIHt7MX19IHRoZSB7ezJ9fTwvcD4nLFxuICBkaXNhYmxlZDogZmFsc2UsXG4gIGNob2ljZXMsXG4gIHByb21wdDogJ0NvbXBsZXRlIHRoZSBzZW50ZW5jZScsXG4gIG5vdGU6ICdUaGUgYW5zd2VyIHNob3duIGFib3ZlIGlzIHRoZSBtb3N0IGNvbW1vbiBjb3JyZWN0IGFuc3dlciBmb3IgdGhpcyBpdGVtLicsXG4gIGxhbmd1YWdlOiAnZW5nbGlzaCcsXG4gIG1heExlbmd0aFBlckNob2ljZUVuYWJsZWQ6IHRydWUsXG4gIHBsYXllclNwZWxsQ2hlY2tFbmFibGVkOiB0cnVlLFxuICBkaXNwbGF5VHlwZTogJ2Jsb2NrJyxcbn07XG5cbmRlc2NyaWJlKCdjb250cm9sbGVyJywgKCkgPT4ge1xuICBkZXNjcmliZSgnbW9kZWwnLCAoKSA9PiB7XG4gICAgbGV0IHEsIGVudjtcblxuICAgIGl0KCdvdXRwdXQgd2hlbiBzZXNzaW9uIGlzIGRlZmluZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBtID0gYXdhaXQgbW9kZWwocXVlc3Rpb24sIHsgdmFsdWU6IHsgMDogJ2NvdycsIDE6ICdvdmVyJywgMjogJ21vb24nIH0gfSwgeyBtb2RlOiAnZXZhbHVhdGUnIH0pO1xuXG4gICAgICBleHBlY3QobSkudG9FcXVhbChcbiAgICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgIGZlZWRiYWNrOiB7IDA6ICdjb3JyZWN0JywgMTogJ2NvcnJlY3QnLCAyOiAnY29ycmVjdCcgfSxcbiAgICAgICAgICByZXNwb25zZUNvcnJlY3Q6IHRydWUsXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJldHVybk1vZGVsID0gKHNlc3Npb24pID0+IHtcbiAgICAgIGl0KGBvdXRwdXQgd2hlbiBzZXNzaW9uIGlzICR7SlNPTi5zdHJpbmdpZnkoc2Vzc2lvbil9YCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBtID0gYXdhaXQgbW9kZWwocXVlc3Rpb24sIHNlc3Npb24sIHsgbW9kZTogJ2V2YWx1YXRlJyB9KTtcblxuICAgICAgICBleHBlY3QobSkudG9FcXVhbChcbiAgICAgICAgICBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgICBmZWVkYmFjazogeyAwOiAnaW5jb3JyZWN0JywgMTogJ2luY29ycmVjdCcsIDI6ICdpbmNvcnJlY3QnIH0sXG4gICAgICAgICAgICByZXNwb25zZUNvcnJlY3Q6IGZhbHNlLFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHJldHVybk1vZGVsKHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuTW9kZWwobnVsbCk7XG4gICAgcmV0dXJuTW9kZWwoe30pO1xuXG4gICAgY29uc3QgYXNzZXJ0R2F0aGVyID0gKGxhYmVsLCBleHRyYSwgc2Vzc2lvbiwgZXhwZWN0ZWQpID0+IHtcbiAgICAgIGl0KGAnbW9kZTogZ2F0aGVyLCAke2xhYmVsfSdgLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHEgPSB7XG4gICAgICAgICAgLi4ucXVlc3Rpb24sXG4gICAgICAgICAgdGVhY2hlckluc3RydWN0aW9uczogJ1RlYWNoZXIgSW5zdHJ1Y3Rpb25zJyxcbiAgICAgICAgICByYXRpb25hbGU6ICdSYXRpb25hbGUnLFxuICAgICAgICAgIC4uLmV4dHJhLFxuICAgICAgICB9O1xuICAgICAgICBlbnYgPSB7IG1vZGU6ICdnYXRoZXInIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbW9kZWwoXG4gICAgICAgICAgcSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogJzEnLFxuICAgICAgICAgICAgZWxlbWVudDogJ2V4cGxpY2l0LWNvbnN0cnVjdGVkLXJlc3BvbnNlJyxcbiAgICAgICAgICAgIC4uLnNlc3Npb24sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBlbnYsXG4gICAgICAgICk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7XG4gICAgICAgICAgLi4ucXVlc3Rpb24sXG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgIGZlZWRiYWNrOiB7fSxcbiAgICAgICAgICByZXNwb25zZUNvcnJlY3Q6IHVuZGVmaW5lZCxcbiAgICAgICAgICBtYXhMZW5ndGhQZXJDaG9pY2U6IFsxMCwgMTAsIDddLFxuICAgICAgICAgIC4uLmVudixcbiAgICAgICAgICAuLi5leHBlY3RlZCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXNzZXJ0R2F0aGVyKFxuICAgICAgJ3Byb21wdEVuYWJsZWQsIHJhdGlvbmFsZUVuYWJsZWQgYW5kIHRlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkIG5vdCBzZXQnLFxuICAgICAge30sXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgcmF0aW9uYWxlOiBkZWZhdWx0cy5yYXRpb25hbGUsXG4gICAgICAgIHNob3dOb3RlOiB0cnVlLFxuICAgICAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiBkZWZhdWx0cy50ZWFjaGVySW5zdHJ1Y3Rpb25zLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgYXNzZXJ0R2F0aGVyKFxuICAgICAgJ3Byb21wdEVuYWJsZWQsIHJhdGlvbmFsZUVuYWJsZWQgYW5kIHRlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkIHNldCB0byBmYWxzZScsXG4gICAgICB7XG4gICAgICAgIHByb21wdEVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICByYXRpb25hbGVFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgdGVhY2hlckluc3RydWN0aW9uc0VuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBzdHVkZW50SW5zdHJ1Y3Rpb25zRW5hYmxlZDogZmFsc2UsXG4gICAgICB9LFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIHByb21wdDogZGVmYXVsdHMucHJvbXB0LFxuICAgICAgICByYXRpb25hbGU6IGRlZmF1bHRzLnJhdGlvbmFsZSxcbiAgICAgICAgc2hvd05vdGU6IHRydWUsXG4gICAgICAgIHRlYWNoZXJJbnN0cnVjdGlvbnM6IGRlZmF1bHRzLnRlYWNoZXJJbnN0cnVjdGlvbnMsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjb25zdCBhc3NlcnRWaWV3ID0gKGxhYmVsLCBleHRyYSwgc2Vzc2lvbiwgZXhwZWN0ZWQpID0+IHtcbiAgICAgIGl0KGAnbW9kZTogdmlldywgJHtsYWJlbH0nYCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBxID0ge1xuICAgICAgICAgIC4uLnF1ZXN0aW9uLFxuICAgICAgICAgIHRlYWNoZXJJbnN0cnVjdGlvbnM6ICdUZWFjaGVyIEluc3RydWN0aW9ucycsXG4gICAgICAgICAgcmF0aW9uYWxlOiAnUmF0aW9uYWxlJyxcbiAgICAgICAgICAuLi5leHRyYSxcbiAgICAgICAgfTtcbiAgICAgICAgZW52ID0geyBtb2RlOiAndmlldycsIHJvbGU6ICdpbnN0cnVjdG9yJyB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1vZGVsKFxuICAgICAgICAgIHEsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICcxJyxcbiAgICAgICAgICAgIGVsZW1lbnQ6ICdleHBsaWNpdC1jb25zdHJ1Y3RlZC1yZXNwb25zZScsXG4gICAgICAgICAgICAuLi5zZXNzaW9uLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZW52LFxuICAgICAgICApO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoe1xuICAgICAgICAgIC4uLnF1ZXN0aW9uLFxuICAgICAgICAgIGRpc2FibGVkOiB0cnVlLFxuICAgICAgICAgIGZlZWRiYWNrOiB7fSxcbiAgICAgICAgICByZXNwb25zZUNvcnJlY3Q6IHVuZGVmaW5lZCxcbiAgICAgICAgICBtYXhMZW5ndGhQZXJDaG9pY2U6IFsxMCwgMTAsIDddLFxuICAgICAgICAgIC4uLmVudixcbiAgICAgICAgICAuLi5leHBlY3RlZCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXNzZXJ0VmlldyhcbiAgICAgICcgKyByb2xlOiBpbnN0cnVjdG9yLCBwcm9tcHRFbmFibGVkLCByYXRpb25hbGVFbmFibGVkIGFuZCB0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZCBzZXQgdG8gZmFsc2UnLFxuICAgICAge1xuICAgICAgICBwcm9tcHRFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgcmF0aW9uYWxlRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHRlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgc3R1ZGVudEluc3RydWN0aW9uc0VuYWJsZWQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBwcm9tcHQ6IGRlZmF1bHRzLnByb21wdCxcbiAgICAgICAgcmF0aW9uYWxlOiBkZWZhdWx0cy5yYXRpb25hbGUsXG4gICAgICAgIHNob3dOb3RlOiB0cnVlLFxuICAgICAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiBkZWZhdWx0cy50ZWFjaGVySW5zdHJ1Y3Rpb25zLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgYXNzZXJ0VmlldyhcbiAgICAgICcgKyByb2xlOiBpbnN0cnVjdG9yLCBwcm9tcHRFbmFibGVkLCByYXRpb25hbGVFbmFibGVkIGFuZCB0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZCB1bnNldCcsXG4gICAgICB7fSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiAnVGVhY2hlciBJbnN0cnVjdGlvbnMnLFxuICAgICAgICBzaG93Tm90ZTogdHJ1ZSxcbiAgICAgICAgcmF0aW9uYWxlOiAnUmF0aW9uYWxlJyxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGNvbnN0IGFzc2VydFZpZXdTdHVkZW50ID0gKGxhYmVsLCBleHRyYSwgc2Vzc2lvbiwgZXhwZWN0ZWQpID0+IHtcbiAgICAgIGl0KGAnbW9kZTogdmlldywgJHtsYWJlbH0nYCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBxID0ge1xuICAgICAgICAgIC4uLnF1ZXN0aW9uLFxuICAgICAgICAgIHRlYWNoZXJJbnN0cnVjdGlvbnM6ICdUZWFjaGVyIEluc3RydWN0aW9ucycsXG4gICAgICAgICAgcmF0aW9uYWxlOiAnUmF0aW9uYWxlJyxcbiAgICAgICAgICAuLi5leHRyYSxcbiAgICAgICAgfTtcbiAgICAgICAgZW52ID0geyBtb2RlOiAndmlldycsIHJvbGU6ICcgc3R1ZGVudCcgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtb2RlbChcbiAgICAgICAgICBxLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAnMScsXG4gICAgICAgICAgICBlbGVtZW50OiAnZXhwbGljaXQtY29uc3RydWN0ZWQtcmVzcG9uc2UnLFxuICAgICAgICAgICAgLi4uc2Vzc2lvbixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVudixcbiAgICAgICAgKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHtcbiAgICAgICAgICAuLi5xdWVzdGlvbixcbiAgICAgICAgICBkaXNhYmxlZDogdHJ1ZSxcbiAgICAgICAgICBmZWVkYmFjazoge30sXG4gICAgICAgICAgcmVzcG9uc2VDb3JyZWN0OiB1bmRlZmluZWQsXG4gICAgICAgICAgbWF4TGVuZ3RoUGVyQ2hvaWNlOiBbMTAsIDEwLCA3XSxcbiAgICAgICAgICAuLi5lbnYsXG4gICAgICAgICAgLi4uZXhwZWN0ZWQsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzc2VydFZpZXdTdHVkZW50KFxuICAgICAgJyArIHJvbGU6IHN0dWRlbnQsIHByb21wdEVuYWJsZWQsIHJhdGlvbmFsZUVuYWJsZWQgYW5kIHRlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkIHNldCB0byBmYWxzZScsXG4gICAgICB7XG4gICAgICAgIHByb21wdEVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICByYXRpb25hbGVFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgdGVhY2hlckluc3RydWN0aW9uc0VuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBzdHVkZW50SW5zdHJ1Y3Rpb25zRW5hYmxlZDogZmFsc2UsXG4gICAgICB9LFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIHByb21wdDogZGVmYXVsdHMucHJvbXB0LFxuICAgICAgICByYXRpb25hbGU6IGRlZmF1bHRzLnJhdGlvbmFsZSxcbiAgICAgICAgc2hvd05vdGU6IHRydWUsXG4gICAgICAgIHRlYWNoZXJJbnN0cnVjdGlvbnM6IGRlZmF1bHRzLnRlYWNoZXJJbnN0cnVjdGlvbnMsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBhc3NlcnRWaWV3U3R1ZGVudChcbiAgICAgICcgKyByb2xlOiBzdHVkZW50LCBwcm9tcHRFbmFibGVkLCByYXRpb25hbGVFbmFibGVkIGFuZCB0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZCB1bnNldCcsXG4gICAgICB7fSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICByYXRpb25hbGU6IGRlZmF1bHRzLnJhdGlvbmFsZSxcbiAgICAgICAgc2hvd05vdGU6IHRydWUsXG4gICAgICAgIHRlYWNoZXJJbnN0cnVjdGlvbnM6IGRlZmF1bHRzLnRlYWNoZXJJbnN0cnVjdGlvbnMsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjb25zdCBhc3NlcnRFdmFsdWF0ZSA9IChsYWJlbCwgZXh0cmEsIHNlc3Npb24sIGV4cGVjdGVkKSA9PiB7XG4gICAgICBpdChgJ21vZGU6IGV2YWx1YXRlLCAke2xhYmVsfSdgLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHEgPSB7XG4gICAgICAgICAgLi4ucXVlc3Rpb24sXG4gICAgICAgICAgdGVhY2hlckluc3RydWN0aW9uczogJ1RlYWNoZXIgSW5zdHJ1Y3Rpb25zJyxcbiAgICAgICAgICByYXRpb25hbGU6ICdSYXRpb25hbGUnLFxuICAgICAgICAgIC4uLmV4dHJhLFxuICAgICAgICB9O1xuICAgICAgICBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScsIHJvbGU6ICdpbnN0cnVjdG9yJyB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1vZGVsKFxuICAgICAgICAgIHEsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICcxJyxcbiAgICAgICAgICAgIGVsZW1lbnQ6ICdleHBsaWNpdC1jb25zdHJ1Y3RlZC1yZXNwb25zZScsXG4gICAgICAgICAgICAuLi5zZXNzaW9uLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZW52LFxuICAgICAgICApO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoe1xuICAgICAgICAgIC4uLnF1ZXN0aW9uLFxuICAgICAgICAgIHRlYWNoZXJJbnN0cnVjdGlvbnM6ICdUZWFjaGVyIEluc3RydWN0aW9ucycsXG4gICAgICAgICAgcmF0aW9uYWxlOiAnUmF0aW9uYWxlJyxcbiAgICAgICAgICBkaXNhYmxlZDogdHJ1ZSxcbiAgICAgICAgICBjaG9pY2VzOiB7XG4gICAgICAgICAgICAwOiBbXG4gICAgICAgICAgICAgIHsgbGFiZWw6ICdjb3cnLCB2YWx1ZTogJzAnLCBjb3JyZWN0OiB0cnVlIH0sXG4gICAgICAgICAgICAgIHsgbGFiZWw6ICdjYXR0bGUnLCB2YWx1ZTogJzEnLCBjb3JyZWN0OiB0cnVlIH0sXG4gICAgICAgICAgICAgIHsgbGFiZWw6ICdjYWxmJywgdmFsdWU6ICcyJywgY29ycmVjdDogdHJ1ZSB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDE6IFtcbiAgICAgICAgICAgICAgeyBsYWJlbDogJ292ZXInLCB2YWx1ZTogJzAnLCBjb3JyZWN0OiB0cnVlIH0sXG4gICAgICAgICAgICAgIHsgbGFiZWw6ICdwYXN0JywgdmFsdWU6ICcxJywgY29ycmVjdDogdHJ1ZSB9LFxuICAgICAgICAgICAgICB7IGxhYmVsOiAnYmV5b25kJywgdmFsdWU6ICcyJywgY29ycmVjdDogdHJ1ZSB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDI6IFt7IGxhYmVsOiAnbW9vbicsIHZhbHVlOiAnMCcsIGNvcnJlY3Q6IHRydWUgfV0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtYXhMZW5ndGhQZXJDaG9pY2U6IFsxMCwgMTAsIDddLFxuICAgICAgICAgIC4uLmVudixcbiAgICAgICAgICAuLi5leHBlY3RlZCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXNzZXJ0RXZhbHVhdGUoXG4gICAgICAnLSBjb3JyZWN0IGFuc3dlcicsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAwOiAnY293JyxcbiAgICAgICAgICAxOiAnb3ZlcicsXG4gICAgICAgICAgMjogJ21vb24nLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZmVlZGJhY2s6IHsgMDogJ2NvcnJlY3QnLCAxOiAnY29ycmVjdCcsIDI6ICdjb3JyZWN0JyB9LFxuICAgICAgICBzaG93Tm90ZTogdHJ1ZSxcbiAgICAgICAgcmVzcG9uc2VDb3JyZWN0OiB0cnVlLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgYXNzZXJ0RXZhbHVhdGUoXG4gICAgICAnLSBwYXJ0aWFsbHkgY29ycmVjdCBhbnN3ZXInLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgMDogJ2NvdycsXG4gICAgICAgICAgMTogJ292ZXInLFxuICAgICAgICAgIDI6ICdzdW4nLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZmVlZGJhY2s6IHsgMDogJ2NvcnJlY3QnLCAxOiAnY29ycmVjdCcsIDI6ICdpbmNvcnJlY3QnIH0sXG4gICAgICAgIHNob3dOb3RlOiB0cnVlLFxuICAgICAgICByZXNwb25zZUNvcnJlY3Q6IGZhbHNlLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgYXNzZXJ0RXZhbHVhdGUoXG4gICAgICAnLSBwYXJ0aWFsbHkgY29ycmVjdCBhbnN3ZXIgdXNpbmcgYWx0ZXJuYXRlcycsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAwOiAnY2FsZicsXG4gICAgICAgICAgMTogJ292ZXInLFxuICAgICAgICAgIDI6ICdzdW4nLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZmVlZGJhY2s6IHsgMDogJ2NvcnJlY3QnLCAxOiAnY29ycmVjdCcsIDI6ICdpbmNvcnJlY3QnIH0sXG4gICAgICAgIHNob3dOb3RlOiB0cnVlLFxuICAgICAgICByZXNwb25zZUNvcnJlY3Q6IGZhbHNlLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgYXNzZXJ0RXZhbHVhdGUoXG4gICAgICAnLSBpbmNvcnJlY3QgYW5zd2VyJyxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIDA6ICdoYW4nLFxuICAgICAgICAgIDE6ICdhYm92ZScsXG4gICAgICAgICAgMjogJ2NoaWNrZW4nLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZmVlZGJhY2s6IHsgMDogJ2luY29ycmVjdCcsIDE6ICdpbmNvcnJlY3QnLCAyOiAnaW5jb3JyZWN0JyB9LFxuICAgICAgICBzaG93Tm90ZTogdHJ1ZSxcbiAgICAgICAgcmVzcG9uc2VDb3JyZWN0OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldCBzY29yZScsICgpID0+IHtcbiAgICBjb25zdCBhc3NlcnRTY29yZSA9IChzZXNzaW9uLCBleHBlY3RlZCkgPT4ge1xuICAgICAgaXQoJ3JldHVybiBzY29yZScsICgpID0+IHtcbiAgICAgICAgY29uc3Qgc2NvcmUgPSBnZXRTY29yZShxdWVzdGlvbiwgc2Vzc2lvbik7XG5cbiAgICAgICAgZXhwZWN0KHNjb3JlKS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3NlcnRTY29yZSh7IHZhbHVlOiB7IDA6ICdjb3cnLCAxOiAnb3ZlcicsIDI6ICdtb29uJyB9IH0sIDEpO1xuICAgIGFzc2VydFNjb3JlKHsgdmFsdWU6IHsgMDogJ2NhdHRsZScsIDE6ICdvdmVyJywgMjogJ21vb24nIH0gfSwgMSk7XG4gICAgYXNzZXJ0U2NvcmUoeyB2YWx1ZTogeyAwOiAnY2FsZicsIDE6ICdvdmVyJywgMjogJ21vb24nIH0gfSwgMSk7XG4gICAgYXNzZXJ0U2NvcmUoeyB2YWx1ZTogeyAwOiAnY293JywgMTogJ3Bhc3QnLCAyOiAnbW9vbicgfSB9LCAxKTtcbiAgICBhc3NlcnRTY29yZSh7IHZhbHVlOiB7IDA6ICdjYXR0bGUnLCAxOiAncGFzdCcsIDI6ICdtb29uJyB9IH0sIDEpO1xuICAgIGFzc2VydFNjb3JlKHsgdmFsdWU6IHsgMDogJ2NhbGYnLCAxOiAncGFzdCcsIDI6ICdtb29uJyB9IH0sIDEpO1xuICAgIGFzc2VydFNjb3JlKHsgdmFsdWU6IHsgMDogJ2NvdycsIDE6ICdiZXlvbmQnLCAyOiAnbW9vbicgfSB9LCAxKTtcbiAgICBhc3NlcnRTY29yZSh7IHZhbHVlOiB7IDA6ICdjYXR0bGUnLCAxOiAnYmV5b25kJywgMjogJ21vb24nIH0gfSwgMSk7XG4gICAgYXNzZXJ0U2NvcmUoeyB2YWx1ZTogeyAwOiAnY2FsZicsIDE6ICdiZXlvbmQnLCAyOiAnbW9vbicgfSB9LCAxKTtcblxuICAgIGFzc2VydFNjb3JlKHsgdmFsdWU6IHsgMDogJ2NhbGYnLCAxOiAndW5kZXInLCAyOiAnbW9vbicgfSB9LCAwLjY3KTtcbiAgICBhc3NlcnRTY29yZSh7IHZhbHVlOiB7IDA6ICdjYXQnLCAxOiAndW5kZXInLCAyOiAnbW9vbicgfSB9LCAwLjMzKTtcbiAgICBhc3NlcnRTY29yZSh7IHZhbHVlOiB7IDA6ICdjYXQnLCAxOiAndW5kZXInLCAyOiAnc3VuJyB9IH0sIDApO1xuXG4gICAgY29uc3QgcmV0dXJuU2NvcmUgPSAoc2Vzc2lvbikgPT4ge1xuICAgICAgaXQoYHNjb3JlID0gMCB3aGVuIHNlc3Npb24gaXMgJHtKU09OLnN0cmluZ2lmeShzZXNzaW9uKX1gLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChnZXRTY29yZShxdWVzdGlvbiwgc2Vzc2lvbikpLnRvRXF1YWwoMCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuU2NvcmUodW5kZWZpbmVkKTtcbiAgICByZXR1cm5TY29yZShudWxsKTtcbiAgICByZXR1cm5TY29yZSh7fSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdvdXRjb21lIHBhcnRpYWxTY29yaW5nIHRlc3QnLCAoKSA9PiB7XG4gICAgY29uc3QgYXNzZXJ0T3V0Y29tZSA9IChtZXNzYWdlLCBleHRyYSwgc2Vzc2lvblZhbHVlLCBlbnYsIGV4cGVjdGVkKSA9PiB7XG4gICAgICBpdChtZXNzYWdlLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgLi4ucXVlc3Rpb24sXG4gICAgICAgICAgICAuLi5leHRyYSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlc3Npb25WYWx1ZSxcbiAgICAgICAgICBlbnYsXG4gICAgICAgICk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3Qub2JqZWN0Q29udGFpbmluZyhleHBlY3RlZCkpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzc2VydE91dGNvbWUoXG4gICAgICAnZWxlbWVudC5wYXJ0aWFsU2NvcmluZyA9IHRydWUnLFxuICAgICAgeyBwYXJ0aWFsU2NvcmluZzogdHJ1ZSB9LFxuICAgICAgeyB2YWx1ZTogeyAwOiAnY2FsZicsIDE6ICd1bmRlcicsIDI6ICdtb29uJyB9IH0sXG4gICAgICB7IG1vZGU6ICdldmFsdWF0ZScgfSxcbiAgICAgIHsgc2NvcmU6IDAuNjcgfSxcbiAgICApO1xuXG4gICAgYXNzZXJ0T3V0Y29tZShcbiAgICAgICdlbGVtZW50LnBhcnRpYWxTY29yaW5nID0gZmFsc2UnLFxuICAgICAgeyBwYXJ0aWFsU2NvcmluZzogZmFsc2UgfSxcbiAgICAgIHsgdmFsdWU6IHsgMDogJ2NhbGYnLCAxOiAndW5kZXInLCAyOiAnbW9vbicgfSB9LFxuICAgICAgeyBtb2RlOiAnZXZhbHVhdGUnIH0sXG4gICAgICB7IHNjb3JlOiAwIH0sXG4gICAgKTtcblxuICAgIGFzc2VydE91dGNvbWUoXG4gICAgICAnZWxlbWVudC5wYXJ0aWFsU2NvcmluZyA9IGZhbHNlLCBlbnYucGFydGlhbFNjb3JpbmcgPSB0cnVlJyxcbiAgICAgIHsgcGFydGlhbFNjb3Jpbmc6IGZhbHNlIH0sXG4gICAgICB7IHZhbHVlOiB7IDA6ICdjYWxmJywgMTogJ3VuZGVyJywgMjogJ21vb24nIH0gfSxcbiAgICAgIHtcbiAgICAgICAgbW9kZTogJ2V2YWx1YXRlJyxcbiAgICAgICAgcGFydGlhbFNjb3Jpbmc6IHRydWUsXG4gICAgICB9LFxuICAgICAgeyBzY29yZTogMCB9LFxuICAgICk7XG5cbiAgICBhc3NlcnRPdXRjb21lKFxuICAgICAgJ2VsZW1lbnQucGFydGlhbFNjb3JpbmcgPSB0cnVlLCBlbnYucGFydGlhbFNjb3JpbmcgPSBmYWxzZScsXG4gICAgICB7IHBhcnRpYWxTY29yaW5nOiB0cnVlIH0sXG4gICAgICB7IHZhbHVlOiB7IDA6ICdjYWxmJywgMTogJ3VuZGVyJywgMjogJ21vb24nIH0gfSxcbiAgICAgIHtcbiAgICAgICAgbW9kZTogJ2V2YWx1YXRlJyxcbiAgICAgICAgcGFydGlhbFNjb3Jpbmc6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIHsgc2NvcmU6IDAgfSxcbiAgICApO1xuICB9KTtcblxuICBkZXNjcmliZSgnb3V0Y29tZScsICgpID0+IHtcbiAgICBjb25zdCBhc3NlcnRPdXRjb21lID0gKHBhcnRpYWxTY29yaW5nLCBzZXNzaW9uVmFsdWUsIGV4cGVjdGVkKSA9PiB7XG4gICAgICBpdChgcGFydGlhbCBzY29yZSAke3BhcnRpYWxTY29yaW5nID8gJ2VuYWJsZWQnIDogJyd9YCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLnF1ZXN0aW9uLFxuICAgICAgICAgICAgcGFydGlhbFNjb3JpbmcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXNzaW9uVmFsdWUsXG4gICAgICAgICk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXNzZXJ0T3V0Y29tZSh0cnVlLCB7IHZhbHVlOiB7IDA6ICdjb3cnLCAxOiAnb3ZlcicsIDI6ICdtb29uJyB9IH0sIHsgc2NvcmU6IDEsIGVtcHR5OiBmYWxzZSB9KTtcbiAgICBhc3NlcnRPdXRjb21lKHRydWUsIHsgdmFsdWU6IHsgMDogJ2NhdHRsZScsIDE6ICdvdmVyJywgMjogJ21vb24nIH0gfSwgeyBzY29yZTogMSwgZW1wdHk6IGZhbHNlIH0pO1xuICAgIGFzc2VydE91dGNvbWUodHJ1ZSwgeyB2YWx1ZTogeyAwOiAnY2FsZicsIDE6ICdvdmVyJywgMjogJ21vb24nIH0gfSwgeyBzY29yZTogMSwgZW1wdHk6IGZhbHNlIH0pO1xuICAgIGFzc2VydE91dGNvbWUodHJ1ZSwgeyB2YWx1ZTogeyAwOiAnY293JywgMTogJ3Bhc3QnLCAyOiAnbW9vbicgfSB9LCB7IHNjb3JlOiAxLCBlbXB0eTogZmFsc2UgfSk7XG4gICAgYXNzZXJ0T3V0Y29tZSh0cnVlLCB7IHZhbHVlOiB7IDA6ICdjYXR0bGUnLCAxOiAncGFzdCcsIDI6ICdtb29uJyB9IH0sIHsgc2NvcmU6IDEsIGVtcHR5OiBmYWxzZSB9KTtcbiAgICBhc3NlcnRPdXRjb21lKHRydWUsIHsgdmFsdWU6IHsgMDogJ2NhbGYnLCAxOiAncGFzdCcsIDI6ICdtb29uJyB9IH0sIHsgc2NvcmU6IDEsIGVtcHR5OiBmYWxzZSB9KTtcbiAgICBhc3NlcnRPdXRjb21lKHRydWUsIHsgdmFsdWU6IHsgMDogJ2NvdycsIDE6ICdiZXlvbmQnLCAyOiAnbW9vbicgfSB9LCB7IHNjb3JlOiAxLCBlbXB0eTogZmFsc2UgfSk7XG4gICAgYXNzZXJ0T3V0Y29tZSh0cnVlLCB7IHZhbHVlOiB7IDA6ICdjYXR0bGUnLCAxOiAnYmV5b25kJywgMjogJ21vb24nIH0gfSwgeyBzY29yZTogMSwgZW1wdHk6IGZhbHNlIH0pO1xuICAgIGFzc2VydE91dGNvbWUodHJ1ZSwgeyB2YWx1ZTogeyAwOiAnY2FsZicsIDE6ICdiZXlvbmQnLCAyOiAnbW9vbicgfSB9LCB7IHNjb3JlOiAxLCBlbXB0eTogZmFsc2UgfSk7XG4gICAgYXNzZXJ0T3V0Y29tZSh0cnVlLCB7IHZhbHVlOiB7IDA6ICdjYWxmJywgMTogJ3VuZGVyJywgMjogJ21vb24nIH0gfSwgeyBzY29yZTogMC42NywgZW1wdHk6IGZhbHNlIH0pO1xuICAgIGFzc2VydE91dGNvbWUodHJ1ZSwgeyB2YWx1ZTogeyAwOiAnY2F0JywgMTogJ3VuZGVyJywgMjogJ21vb24nIH0gfSwgeyBzY29yZTogMC4zMywgZW1wdHk6IGZhbHNlIH0pO1xuICAgIGFzc2VydE91dGNvbWUodHJ1ZSwgeyB2YWx1ZTogeyAwOiAnY2F0JywgMTogJ3VuZGVyJywgMjogJ3N1bicgfSB9LCB7IHNjb3JlOiAwLCBlbXB0eTogZmFsc2UgfSk7XG5cbiAgICBhc3NlcnRPdXRjb21lKGZhbHNlLCB7IHZhbHVlOiB7IDA6ICdjb3cnLCAxOiAnb3ZlcicsIDI6ICdtb29uJyB9IH0sIHsgc2NvcmU6IDEsIGVtcHR5OiBmYWxzZSB9KTtcbiAgICBhc3NlcnRPdXRjb21lKGZhbHNlLCB7IHZhbHVlOiB7IDA6ICdjYXR0bGUnLCAxOiAnb3ZlcicsIDI6ICdtb29uJyB9IH0sIHsgc2NvcmU6IDEsIGVtcHR5OiBmYWxzZSB9KTtcbiAgICBhc3NlcnRPdXRjb21lKGZhbHNlLCB7IHZhbHVlOiB7IDA6ICdjYWxmJywgMTogJ292ZXInLCAyOiAnbW9vbicgfSB9LCB7IHNjb3JlOiAxLCBlbXB0eTogZmFsc2UgfSk7XG4gICAgYXNzZXJ0T3V0Y29tZShmYWxzZSwgeyB2YWx1ZTogeyAwOiAnY293JywgMTogJ3Bhc3QnLCAyOiAnbW9vbicgfSB9LCB7IHNjb3JlOiAxLCBlbXB0eTogZmFsc2UgfSk7XG4gICAgYXNzZXJ0T3V0Y29tZShmYWxzZSwgeyB2YWx1ZTogeyAwOiAnY2F0dGxlJywgMTogJ3Bhc3QnLCAyOiAnbW9vbicgfSB9LCB7IHNjb3JlOiAxLCBlbXB0eTogZmFsc2UgfSk7XG4gICAgYXNzZXJ0T3V0Y29tZShmYWxzZSwgeyB2YWx1ZTogeyAwOiAnY2FsZicsIDE6ICdwYXN0JywgMjogJ21vb24nIH0gfSwgeyBzY29yZTogMSwgZW1wdHk6IGZhbHNlIH0pO1xuICAgIGFzc2VydE91dGNvbWUoZmFsc2UsIHsgdmFsdWU6IHsgMDogJ2NvdycsIDE6ICdiZXlvbmQnLCAyOiAnbW9vbicgfSB9LCB7IHNjb3JlOiAxLCBlbXB0eTogZmFsc2UgfSk7XG4gICAgYXNzZXJ0T3V0Y29tZShmYWxzZSwgeyB2YWx1ZTogeyAwOiAnY2F0dGxlJywgMTogJ2JleW9uZCcsIDI6ICdtb29uJyB9IH0sIHsgc2NvcmU6IDEsIGVtcHR5OiBmYWxzZSB9KTtcbiAgICBhc3NlcnRPdXRjb21lKGZhbHNlLCB7IHZhbHVlOiB7IDA6ICdjYWxmJywgMTogJ2JleW9uZCcsIDI6ICdtb29uJyB9IH0sIHsgc2NvcmU6IDEsIGVtcHR5OiBmYWxzZSB9KTtcbiAgICBhc3NlcnRPdXRjb21lKGZhbHNlLCB7IHZhbHVlOiB7IDA6ICdjYWxmJywgMTogJ3VuZGVyJywgMjogJ21vb24nIH0gfSwgeyBzY29yZTogMCwgZW1wdHk6IGZhbHNlIH0pO1xuICAgIGFzc2VydE91dGNvbWUoZmFsc2UsIHsgdmFsdWU6IHsgMDogJ2NhdCcsIDE6ICd1bmRlcicsIDI6ICdtb29uJyB9IH0sIHsgc2NvcmU6IDAsIGVtcHR5OiBmYWxzZSB9KTtcbiAgICBhc3NlcnRPdXRjb21lKGZhbHNlLCB7IHZhbHVlOiB7IDA6ICdjYXQnLCAxOiAndW5kZXInLCAyOiAnc3VuJyB9IH0sIHsgc2NvcmU6IDAsIGVtcHR5OiBmYWxzZSB9KTtcblxuICAgIGNvbnN0IHJldHVybk1vZGVsID0gKHNlc3Npb24pID0+IHtcbiAgICAgIGl0KGBlbXB0eTogdHJ1ZSB3aGVuIHNlc3Npb24gaXMgJHtKU09OLnN0cmluZ2lmeShzZXNzaW9uKX1gLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG0gPSBhd2FpdCBvdXRjb21lKHF1ZXN0aW9uLCBzZXNzaW9uKTtcblxuICAgICAgICBleHBlY3QobSkudG9FcXVhbChleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7IHNjb3JlOiAwLCBlbXB0eTogdHJ1ZSB9KSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuTW9kZWwodW5kZWZpbmVkKTtcbiAgICByZXR1cm5Nb2RlbChudWxsKTtcbiAgICByZXR1cm5Nb2RlbCh7fSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdwcmVwYXJlVmFsJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGVtcHR5IHN0cmluZyBvbiBudWxsIG9yIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChwcmVwYXJlVmFsKG51bGwpKS50b0VxdWFsKCcnKTtcbiAgICAgIGV4cGVjdChwcmVwYXJlVmFsKHVuZGVmaW5lZCkpLnRvRXF1YWwoJycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZW1vdmUgaHRtbCB0YWdzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHByZXBhcmVWYWwoJzxkaXY+Rm9vIEJhcjwvZGl2PicpKS50b0VxdWFsKCdGb28gQmFyJyk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnY29ycmVjdCByZXNwb25zZScsICgpID0+IHtcbiAgICAgIGxldCBxdWVzdGlvbjtcbiAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBxdWVzdGlvbiA9IHtcbiAgICAgICAgICBjaG9pY2VzLFxuICAgICAgICB9O1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdyZXR1cm5zIGNvcnJlY3QgcmVzcG9uc2UgaWYgZW52IGlzIGNvcnJlY3QnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlc3MgPSBhd2FpdCBjcmVhdGVDb3JyZWN0UmVzcG9uc2VTZXNzaW9uKHF1ZXN0aW9uLCB7XG4gICAgICAgICAgbW9kZTogJ2dhdGhlcicsXG4gICAgICAgICAgcm9sZTogJ2luc3RydWN0b3InLFxuICAgICAgICB9KTtcbiAgICAgICAgZXhwZWN0KHNlc3MpLnRvRXF1YWwoeyBpZDogJzEnLCB2YWx1ZTogeyAwOiAnY293JywgMTogJ292ZXInLCAyOiAnbW9vbicgfSB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBudWxsIGVudiBpcyBzdHVkZW50JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBub1Jlc3VsdCA9IGF3YWl0IGNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24ocXVlc3Rpb24sIHsgbW9kZTogJ2dhdGhlcicsIHJvbGU6ICdzdHVkZW50JyB9KTtcbiAgICAgICAgZXhwZWN0KG5vUmVzdWx0KS50b0JlTnVsbCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjb3JyZWN0IHJlc3BvbnNlJywgKCkgPT4ge1xuICAgIGl0KCdyZXR1cm5zIGNvcnJlY3QgcmVzcG9uc2UgaWYgcm9sZSBpcyBpbnN0cnVjdG9yIGFuZCBtb2RlIGlzIGdhdGhlcicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHNlc3MgPSBhd2FpdCBjcmVhdGVDb3JyZWN0UmVzcG9uc2VTZXNzaW9uKHF1ZXN0aW9uLCB7XG4gICAgICAgIG1vZGU6ICdnYXRoZXInLFxuICAgICAgICByb2xlOiAnaW5zdHJ1Y3RvcicsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHNlc3MpLnRvRXF1YWwoeyBpZDogJzEnLCB2YWx1ZTogeyAwOiAnY293JywgMTogJ292ZXInLCAyOiAnbW9vbicgfSB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIGNvcnJlY3QgcmVzcG9uc2UgaWYgcm9sZSBpcyBpbnN0cnVjdG9yIGFuZCBtb2RlIGlzIHZpZXcnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBzZXNzID0gYXdhaXQgY3JlYXRlQ29ycmVjdFJlc3BvbnNlU2Vzc2lvbihxdWVzdGlvbiwge1xuICAgICAgICBtb2RlOiAndmlldycsXG4gICAgICAgIHJvbGU6ICdpbnN0cnVjdG9yJyxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3Qoc2VzcykudG9FcXVhbCh7IGlkOiAnMScsIHZhbHVlOiB7IDA6ICdjb3cnLCAxOiAnb3ZlcicsIDI6ICdtb29uJyB9IH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgbnVsbCBpZiBtb2RlIGlzIGV2YWx1YXRlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgbm9SZXN1bHQgPSBhd2FpdCBjcmVhdGVDb3JyZWN0UmVzcG9uc2VTZXNzaW9uKHF1ZXN0aW9uLCB7IG1vZGU6ICdldmFsdWF0ZScsIHJvbGU6ICdpbnN0cnVjdG9yJyB9KTtcblxuICAgICAgZXhwZWN0KG5vUmVzdWx0KS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgbnVsbCBpZiByb2xlIGlzIHN0dWRlbnQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBub1Jlc3VsdCA9IGF3YWl0IGNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24ocXVlc3Rpb24sIHsgbW9kZTogJ2dhdGhlcicsIHJvbGU6ICdzdHVkZW50JyB9KTtcblxuICAgICAgZXhwZWN0KG5vUmVzdWx0KS50b0JlTnVsbCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncHJlcGFyZUNob2ljZScsICgpID0+IHtcbiAgICBjb25zdCBhc3NlcnRQcmVwYXJlQ2hvaWNlID0gKGVudiwgZGVmYXVsdEZlZWRiYWNrLCBjaG9pY2UsIGV4cGVjdGVkKSA9PiB7XG4gICAgICBjb25zdCBwcmVwYXJDaG9pY2VGbiA9IHByZXBhcmVDaG9pY2UoZW52Lm1vZGUsIGRlZmF1bHRGZWVkYmFjayk7XG5cbiAgICAgIGl0KGBwcmVwYXJlIGNob2ljZXMgaW4gJHtlbnYubW9kZX0gbW9kZTogJHtKU09OLnN0cmluZ2lmeShjaG9pY2UpfSAtPiAke0pTT04uc3RyaW5naWZ5KGV4cGVjdGVkKX1gLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChwcmVwYXJDaG9pY2VGbihjaG9pY2UpKS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3NlcnRQcmVwYXJlQ2hvaWNlKFxuICAgICAgeyBtb2RlOiAnZ2F0aGVyJyB9LFxuICAgICAgeyBjb3JyZWN0OiAnQ29ycmVjdCcsIGluY29ycmVjdDogJ0luY29ycmVjdCcgfSxcbiAgICAgIHsgdmFsdWU6ICcwJywgbGFiZWw6ICdjb3cnIH0sXG4gICAgICB7IHZhbHVlOiAnMCcsIGxhYmVsOiAnY293JyB9LFxuICAgICk7XG5cbiAgICBhc3NlcnRQcmVwYXJlQ2hvaWNlKFxuICAgICAgeyBtb2RlOiAndmlldycgfSxcbiAgICAgIHsgY29ycmVjdDogJ0NvcnJlY3QnLCBpbmNvcnJlY3Q6ICdJbmNvcnJlY3QnIH0sXG4gICAgICB7IHZhbHVlOiAnMCcsIGxhYmVsOiAnY293JyB9LFxuICAgICAgeyB2YWx1ZTogJzAnLCBsYWJlbDogJ2NvdycgfSxcbiAgICApO1xuXG4gICAgYXNzZXJ0UHJlcGFyZUNob2ljZShcbiAgICAgIHsgbW9kZTogJ2V2YWx1YXRlJyB9LFxuICAgICAgeyBjb3JyZWN0OiAnQ29ycmVjdCcsIGluY29ycmVjdDogJ0luY29ycmVjdCcgfSxcbiAgICAgIHsgdmFsdWU6ICcwJywgbGFiZWw6ICdjb3cnIH0sXG4gICAgICB7IHZhbHVlOiAnMCcsIGxhYmVsOiAnY293JywgY29ycmVjdDogdHJ1ZSB9LFxuICAgICk7XG5cbiAgICBhc3NlcnRQcmVwYXJlQ2hvaWNlKFxuICAgICAgeyBtb2RlOiAnZXZhbHVhdGUnIH0sXG4gICAgICB7IGNvcnJlY3Q6ICdDb3JyZWN0JywgaW5jb3JyZWN0OiAnSW5jb3JyZWN0JyB9LFxuICAgICAgeyB2YWx1ZTogJzAnLCBsYWJlbDogJ2NvdycsIGZlZWRiYWNrOiB7IHR5cGU6ICdkZWZhdWx0JyB9IH0sXG4gICAgICB7IHZhbHVlOiAnMCcsIGxhYmVsOiAnY293JywgY29ycmVjdDogdHJ1ZSwgZmVlZGJhY2s6ICdDb3JyZWN0JyB9LFxuICAgICk7XG5cbiAgICBhc3NlcnRQcmVwYXJlQ2hvaWNlKFxuICAgICAgeyBtb2RlOiAnZXZhbHVhdGUnIH0sXG4gICAgICB7IGNvcnJlY3Q6ICdDb3JyZWN0JywgaW5jb3JyZWN0OiAnSW5jb3JyZWN0JyB9LFxuICAgICAgeyB2YWx1ZTogJzAnLCBsYWJlbDogJ2NvdycsIGZlZWRiYWNrOiB7IHR5cGU6ICdjdXN0b20nIH0gfSxcbiAgICAgIHsgdmFsdWU6ICcwJywgbGFiZWw6ICdjb3cnLCBjb3JyZWN0OiB0cnVlLCBmZWVkYmFjazogdW5kZWZpbmVkIH0sXG4gICAgKTtcblxuICAgIGFzc2VydFByZXBhcmVDaG9pY2UoXG4gICAgICB7IG1vZGU6ICdldmFsdWF0ZScgfSxcbiAgICAgIHsgY29ycmVjdDogJ0NvcnJlY3QnLCBpbmNvcnJlY3Q6ICdJbmNvcnJlY3QnIH0sXG4gICAgICB7IHZhbHVlOiAnMCcsIGxhYmVsOiAnY293JywgZmVlZGJhY2s6IHsgdHlwZTogJ2N1c3RvbScsIHZhbHVlOiAnQ3VzdG9tIEZlZWRiYWNrJyB9IH0sXG4gICAgICB7IHZhbHVlOiAnMCcsIGxhYmVsOiAnY293JywgY29ycmVjdDogdHJ1ZSwgZmVlZGJhY2s6ICdDdXN0b20gRmVlZGJhY2snIH0sXG4gICAgKTtcbiAgfSk7XG59KTtcbiJdfQ==