@pie-element/math-inline 7.1.0-next.1 → 7.1.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.
@@ -1,2344 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
6
-
7
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
8
-
9
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
-
11
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
12
-
13
- var _mathValidation = require("@pie-framework/math-validation");
14
-
15
- var _index = require("../index");
16
-
17
- var _templateObject, _templateObject2;
18
-
19
- 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; }
20
-
21
- 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; }
22
-
23
- jest.mock('@pie-framework/math-validation', function () {
24
- return {
25
- latexEqual: jest.fn().mockReturnValue(true)
26
- };
27
- });
28
- var defaultModel = {
29
- responseType: 'Advanced Multi',
30
- equationEditor: '3',
31
- expression: '{{response}} = {{response}} \\text{eggs}',
32
- prompt: '<p>Sam sells baskets of eggs at his farm stand. He sold 12 baskets and wrote the number sentence below to show how many eggs he sold in all.</p><p><span class="equation-block"><math xmlns="http://www.w3.org/1998/Math/MathML" >\n <mrow>\n <mn>12</mn><mo>&#x00D7;</mo><mo>&#x25A1;</mo><mo>=</mo><mn>72</mn>\n </mrow>\n</math> </span></p><p>What <span class="relative-emphasis">division</span> number sentence can be used to show how many eggs were in each basket?</p><p>Use the on-screen keyboard to type your number sentence and answer in the box.</p>',
33
- responses: [{
34
- id: '1',
35
- answer: '72\\div12=6\\text{eggs}',
36
- alternates: {
37
- 1: '6=72\\div12\\text{eggs}',
38
- 2: '\\frac{72}{12}=6\\text{eggs}',
39
- 3: '6=\\frac{72}{12}\\text{eggs}'
40
- },
41
- validation: 'literal'
42
- }],
43
- note: 'The answer shown above is the primary correct answer specified by the author for this item, but other answers may also be recognized as correct.',
44
- customKeys: ['\\left(\\right)', '\\frac{}{}', 'x\\frac{}{}'],
45
- id: 1
46
- };
47
-
48
- var mkQuestion = function mkQuestion(model) {
49
- return model || defaultModel;
50
- };
51
-
52
- describe('model', function () {
53
- var result, question, session, env, outcomeResult;
54
- describe('gather', function () {
55
- beforeEach( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
56
- return _regenerator["default"].wrap(function _callee$(_context) {
57
- while (1) {
58
- switch (_context.prev = _context.next) {
59
- case 0:
60
- question = mkQuestion();
61
- session = {};
62
- env = {
63
- mode: 'gather'
64
- };
65
- _context.next = 5;
66
- return (0, _index.model)(question, session, env);
67
-
68
- case 5:
69
- result = _context.sent;
70
-
71
- case 6:
72
- case "end":
73
- return _context.stop();
74
- }
75
- }
76
- }, _callee);
77
- })));
78
- it('returns disabled:false', function () {
79
- expect(result.disabled).toEqual(false);
80
- });
81
- it('returns undefined for correctness ', function () {
82
- expect(result.correctness).toEqual(undefined);
83
- });
84
- it('returns undefined for correctResponse ', function () {
85
- expect(result.correctResponse).toEqual(undefined);
86
- });
87
- it('returns undefined for feedback', function () {
88
- expect(result.feedback).toEqual(undefined);
89
- });
90
- it('returns empty array for responses', function () {
91
- expect(result.config.responses).toEqual([]);
92
- });
93
- it('returns null for rationale', function () {
94
- expect(result.config.rationale).toEqual(null);
95
- });
96
- it('returns null for teacher instructions', function () {
97
- expect(result.config.teacherInstructions).toEqual(null);
98
- });
99
- });
100
- describe('view', function () {
101
- beforeEach( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
102
- return _regenerator["default"].wrap(function _callee2$(_context2) {
103
- while (1) {
104
- switch (_context2.prev = _context2.next) {
105
- case 0:
106
- question = mkQuestion();
107
- session = {};
108
- env = {
109
- mode: 'view'
110
- };
111
- _context2.next = 5;
112
- return (0, _index.model)(question, session, env);
113
-
114
- case 5:
115
- result = _context2.sent;
116
-
117
- case 6:
118
- case "end":
119
- return _context2.stop();
120
- }
121
- }
122
- }, _callee2);
123
- })));
124
- it('returns disabled:true', function () {
125
- expect(result.disabled).toEqual(true);
126
- });
127
- it('returns undefined for correctness ', function () {
128
- expect(result.correctness).toEqual(undefined);
129
- });
130
- it('returns undefined for correctResponse ', function () {
131
- expect(result.correctResponse).toEqual(undefined);
132
- });
133
- it('returns default correct for feedback', function () {
134
- expect(result.feedback).toEqual(undefined);
135
- });
136
- it('returns empty array for responses', function () {
137
- expect(result.config.responses).toEqual([]);
138
- });
139
- });
140
- describe('evaluate - empty', function () {
141
- beforeEach( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
142
- return _regenerator["default"].wrap(function _callee3$(_context3) {
143
- while (1) {
144
- switch (_context3.prev = _context3.next) {
145
- case 0:
146
- question = mkQuestion();
147
- session = {};
148
- env = {
149
- mode: 'evaluate'
150
- };
151
- _context3.next = 5;
152
- return (0, _index.model)(question, session, env);
153
-
154
- case 5:
155
- result = _context3.sent;
156
-
157
- case 6:
158
- case "end":
159
- return _context3.stop();
160
- }
161
- }
162
- }, _callee3);
163
- })));
164
- it('returns disabled:true', function () {
165
- expect(result.disabled).toEqual(true);
166
- });
167
- it('returns empty for correctness ', function () {
168
- expect(result.correctness).toEqual({
169
- correct: false,
170
- correctness: 'unanswered',
171
- score: '0%'
172
- });
173
- });
174
- });
175
- describe('evaluate - correct', function () {
176
- beforeEach( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
177
- return _regenerator["default"].wrap(function _callee4$(_context4) {
178
- while (1) {
179
- switch (_context4.prev = _context4.next) {
180
- case 0:
181
- env = {
182
- mode: 'evaluate'
183
- };
184
-
185
- case 1:
186
- case "end":
187
- return _context4.stop();
188
- }
189
- }
190
- }, _callee4);
191
- })));
192
- it('returns correct for correctness', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5() {
193
- return _regenerator["default"].wrap(function _callee5$(_context5) {
194
- while (1) {
195
- switch (_context5.prev = _context5.next) {
196
- case 0:
197
- question = mkQuestion();
198
- session = {
199
- completeAnswer: '72\\div12=6\\text{eggs}'
200
- };
201
- env = {
202
- mode: 'evaluate'
203
- };
204
- _context5.next = 5;
205
- return (0, _index.model)(question, session, env);
206
-
207
- case 5:
208
- result = _context5.sent;
209
- expect(result.correctness.correctness).toEqual('correct');
210
- expect(result.correctness.score).toEqual('100%');
211
- session = {
212
- completeAnswer: '6=72\\div12\\text{eggs}'
213
- };
214
- _context5.next = 11;
215
- return (0, _index.model)(question, session, env);
216
-
217
- case 11:
218
- result = _context5.sent;
219
- expect(result.correctness.correctness).toEqual('correct');
220
- expect(result.correctness.score).toEqual('100%');
221
- session = {
222
- completeAnswer: '\\frac{72}{12}=6\\text{eggs}'
223
- };
224
- _context5.next = 17;
225
- return (0, _index.model)(question, session, env);
226
-
227
- case 17:
228
- result = _context5.sent;
229
- expect(result.correctness.correctness).toEqual('correct');
230
- expect(result.correctness.score).toEqual('100%');
231
-
232
- case 20:
233
- case "end":
234
- return _context5.stop();
235
- }
236
- }
237
- }, _callee5);
238
- })));
239
- it('returns correct for correctness with text nodes too', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6() {
240
- return _regenerator["default"].wrap(function _callee6$(_context6) {
241
- while (1) {
242
- switch (_context6.prev = _context6.next) {
243
- case 0:
244
- question = mkQuestion();
245
- session = {
246
- completeAnswer: '72\\div12=6\\text{eggs}'
247
- };
248
- env = {
249
- mode: 'evaluate'
250
- };
251
- _context6.next = 5;
252
- return (0, _index.model)(question, session, env);
253
-
254
- case 5:
255
- result = _context6.sent;
256
- expect(result.correctness.correctness).toEqual('correct');
257
- expect(result.correctness.score).toEqual('100%');
258
-
259
- case 8:
260
- case "end":
261
- return _context6.stop();
262
- }
263
- }
264
- }, _callee6);
265
- })));
266
- it('returns correct for correctness with text nodes too in symbolic', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7() {
267
- return _regenerator["default"].wrap(function _callee7$(_context7) {
268
- while (1) {
269
- switch (_context7.prev = _context7.next) {
270
- case 0:
271
- question = mkQuestion();
272
- session = {
273
- completeAnswer: '72\\div12=6\\text{eggs}'
274
- };
275
- question.responses[0].validation = 'symbolic';
276
- env = {
277
- mode: 'evaluate'
278
- };
279
- _context7.next = 6;
280
- return (0, _index.model)(question, session, env);
281
-
282
- case 6:
283
- result = _context7.sent;
284
- expect(result.correctness.correctness).toEqual('correct');
285
- expect(result.correctness.score).toEqual('100%');
286
-
287
- case 9:
288
- case "end":
289
- return _context7.stop();
290
- }
291
- }
292
- }, _callee7);
293
- })));
294
- it('returns correct for correctness even with hyphen vs minus sign', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee8() {
295
- return _regenerator["default"].wrap(function _callee8$(_context8) {
296
- while (1) {
297
- switch (_context8.prev = _context8.next) {
298
- case 0:
299
- question = mkQuestion(_objectSpread(_objectSpread({}, defaultModel), {}, {
300
- expression: '{{response}}',
301
- responses: [{
302
- id: '1',
303
- answer: '8-4',
304
- alternates: {
305
- 1: '4−2'
306
- },
307
- validation: 'literal'
308
- }]
309
- }));
310
- env = {
311
- mode: 'evaluate'
312
- };
313
- session = {
314
- completeAnswer: '4-2'
315
- };
316
- _context8.next = 5;
317
- return (0, _index.model)(question, session, env);
318
-
319
- case 5:
320
- result = _context8.sent;
321
- expect(result.correctness.correctness).toEqual('correct');
322
- expect(result.correctness.score).toEqual('100%');
323
- session = {
324
- completeAnswer: '4−2'
325
- };
326
- _context8.next = 11;
327
- return (0, _index.model)(question, session, env);
328
-
329
- case 11:
330
- result = _context8.sent;
331
- expect(result.correctness.correctness).toEqual('correct');
332
- expect(result.correctness.score).toEqual('100%');
333
- session = {
334
- completeAnswer: '8-4'
335
- };
336
- _context8.next = 17;
337
- return (0, _index.model)(question, session, env);
338
-
339
- case 17:
340
- result = _context8.sent;
341
- expect(result.correctness.correctness).toEqual('correct');
342
- expect(result.correctness.score).toEqual('100%');
343
- session = {
344
- completeAnswer: '8−4'
345
- };
346
- _context8.next = 23;
347
- return (0, _index.model)(question, session, env);
348
-
349
- case 23:
350
- result = _context8.sent;
351
- expect(result.correctness.correctness).toEqual('correct');
352
- expect(result.correctness.score).toEqual('100%');
353
-
354
- case 26:
355
- case "end":
356
- return _context8.stop();
357
- }
358
- }
359
- }, _callee8);
360
- })));
361
- it('returns correct for correctness in cdot vs times situations', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee9() {
362
- return _regenerator["default"].wrap(function _callee9$(_context9) {
363
- while (1) {
364
- switch (_context9.prev = _context9.next) {
365
- case 0:
366
- question = mkQuestion(_objectSpread(_objectSpread({}, defaultModel), {}, {
367
- expression: '{{response}}',
368
- responses: [{
369
- id: '1',
370
- answer: '8\\cdot4',
371
- alternates: {
372
- 1: '4\\times2'
373
- },
374
- validation: 'literal'
375
- }]
376
- }));
377
- env = {
378
- mode: 'evaluate'
379
- };
380
- session = {
381
- completeAnswer: '8\\times4'
382
- };
383
- _context9.next = 5;
384
- return (0, _index.model)(question, session, env);
385
-
386
- case 5:
387
- result = _context9.sent;
388
- expect(result.correctness.correctness).toEqual('correct');
389
- expect(result.correctness.score).toEqual('100%');
390
- session = {
391
- completeAnswer: '4\\cdot2'
392
- };
393
- _context9.next = 11;
394
- return (0, _index.model)(question, session, env);
395
-
396
- case 11:
397
- result = _context9.sent;
398
- expect(result.correctness.correctness).toEqual('correct');
399
- expect(result.correctness.score).toEqual('100%');
400
-
401
- case 14:
402
- case "end":
403
- return _context9.stop();
404
- }
405
- }
406
- }, _callee9);
407
- })));
408
- describe('all responses are checked', function () {
409
- beforeEach(function () {
410
- question = mkQuestion(_objectSpread(_objectSpread({}, defaultModel), {}, {
411
- responses: [{
412
- answer: '0.5+3.5',
413
- validation: 'symbolic',
414
- alternates: ['2']
415
- }, {
416
- answer: 'foo',
417
- validation: 'literal',
418
- id: '1'
419
- }]
420
- }));
421
- });
422
- it('4 is correct - symbolic match answer', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee10() {
423
- return _regenerator["default"].wrap(function _callee10$(_context10) {
424
- while (1) {
425
- switch (_context10.prev = _context10.next) {
426
- case 0:
427
- _context10.next = 2;
428
- return (0, _index.model)(question, {
429
- completeAnswer: '4'
430
- }, env);
431
-
432
- case 2:
433
- result = _context10.sent;
434
- expect(result.correctness.correctness).toEqual('correct');
435
-
436
- case 4:
437
- case "end":
438
- return _context10.stop();
439
- }
440
- }
441
- }, _callee10);
442
- })));
443
- it('2 is correct - symbolic match responses[0].alternates[0]', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee11() {
444
- return _regenerator["default"].wrap(function _callee11$(_context11) {
445
- while (1) {
446
- switch (_context11.prev = _context11.next) {
447
- case 0:
448
- _context11.next = 2;
449
- return (0, _index.model)(question, {
450
- completeAnswer: '2'
451
- }, env);
452
-
453
- case 2:
454
- result = _context11.sent;
455
- expect(result.correctness.correctness).toEqual('correct');
456
-
457
- case 4:
458
- case "end":
459
- return _context11.stop();
460
- }
461
- }
462
- }, _callee11);
463
- })));
464
- it('foo is correct - literal match response[1]', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee12() {
465
- return _regenerator["default"].wrap(function _callee12$(_context12) {
466
- while (1) {
467
- switch (_context12.prev = _context12.next) {
468
- case 0:
469
- _context12.next = 2;
470
- return (0, _index.model)(question, {
471
- completeAnswer: 'foo'
472
- }, env);
473
-
474
- case 2:
475
- result = _context12.sent;
476
- expect(result.correctness.correctness).toEqual('correct');
477
-
478
- case 4:
479
- case "end":
480
- return _context12.stop();
481
- }
482
- }
483
- }, _callee12);
484
- })));
485
- });
486
- it('works for incorrect latex frac command too', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee13() {
487
- return _regenerator["default"].wrap(function _callee13$(_context13) {
488
- while (1) {
489
- switch (_context13.prev = _context13.next) {
490
- case 0:
491
- question = mkQuestion(_objectSpread(_objectSpread({}, defaultModel), {}, {
492
- responseType: 'Advanced Multi',
493
- expression: '{{response}}',
494
- responses: [{
495
- alternates: {},
496
- answer: '1\\frac14',
497
- validation: 'symbolic',
498
- id: '1'
499
- }]
500
- }));
501
- session = {
502
- completeAnswer: '1\\frac{1}{4}'
503
- };
504
- env = {
505
- mode: 'evaluate'
506
- };
507
- _context13.next = 5;
508
- return (0, _index.model)(question, session, env);
509
-
510
- case 5:
511
- result = _context13.sent;
512
- expect(result.correctness.correctness).toEqual('correct');
513
- expect(result.correctness.score).toEqual('100%');
514
- session = {
515
- completeAnswer: '1\\frac1{4}'
516
- };
517
- _context13.next = 11;
518
- return (0, _index.model)(question, session, env);
519
-
520
- case 11:
521
- result = _context13.sent;
522
- expect(result.correctness.correctness).toEqual('correct');
523
- expect(result.correctness.score).toEqual('100%');
524
-
525
- case 14:
526
- case "end":
527
- return _context13.stop();
528
- }
529
- }
530
- }, _callee13);
531
- })));
532
- });
533
- it('works for literal validation for incomplete latex command too', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee14() {
534
- return _regenerator["default"].wrap(function _callee14$(_context14) {
535
- while (1) {
536
- switch (_context14.prev = _context14.next) {
537
- case 0:
538
- question = mkQuestion(_objectSpread(_objectSpread({}, defaultModel), {}, {
539
- responseType: 'Advanced Multi',
540
- expression: '{{response}}',
541
- responses: [{
542
- alternates: {
543
- 1: 'p\\left(x\\right)'
544
- },
545
- answer: '1\\frac14',
546
- validation: 'literal',
547
- id: '1'
548
- }]
549
- }));
550
- session = {
551
- completeAnswer: '1\\frac{1}{4}'
552
- };
553
- env = {
554
- mode: 'evaluate'
555
- };
556
- _context14.next = 5;
557
- return (0, _index.model)(question, session, env);
558
-
559
- case 5:
560
- result = _context14.sent;
561
- expect(result.correctness.correctness).toEqual('correct');
562
- expect(result.correctness.score).toEqual('100%');
563
- session = {
564
- completeAnswer: '1\\frac1{4}'
565
- };
566
- _context14.next = 11;
567
- return (0, _index.model)(question, session, env);
568
-
569
- case 11:
570
- result = _context14.sent;
571
- expect(result.correctness.correctness).toEqual('correct');
572
- expect(result.correctness.score).toEqual('100%');
573
- session = {
574
- completeAnswer: 'p(x)'
575
- };
576
- env = {
577
- mode: 'evaluate'
578
- };
579
- _context14.next = 18;
580
- return (0, _index.model)(question, session, env);
581
-
582
- case 18:
583
- result = _context14.sent;
584
- expect(result.correctness.correctness).toEqual('correct');
585
- expect(result.correctness.score).toEqual('100%');
586
- session = {
587
- completeAnswer: 'p\\left(x\\right)'
588
- };
589
- env = {
590
- mode: 'evaluate'
591
- };
592
- _context14.next = 25;
593
- return (0, _index.model)(question, session, env);
594
-
595
- case 25:
596
- result = _context14.sent;
597
- expect(result.correctness.correctness).toEqual('correct');
598
- expect(result.correctness.score).toEqual('100%');
599
-
600
- case 28:
601
- case "end":
602
- return _context14.stop();
603
- }
604
- }
605
- }, _callee14);
606
- })));
607
- describe('evaluate - incorrect', function () {
608
- beforeEach( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee15() {
609
- return _regenerator["default"].wrap(function _callee15$(_context15) {
610
- while (1) {
611
- switch (_context15.prev = _context15.next) {
612
- case 0:
613
- env = {
614
- mode: 'evaluate'
615
- };
616
-
617
- case 1:
618
- case "end":
619
- return _context15.stop();
620
- }
621
- }
622
- }, _callee15);
623
- })));
624
- });
625
- });
626
- describe('outcome', function () {
627
- var result;
628
- var question = mkQuestion();
629
- var env = {
630
- mode: 'evaluate'
631
- };
632
- it('returns correct for correctness in outcome', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee16() {
633
- var session, outcomeResult;
634
- return _regenerator["default"].wrap(function _callee16$(_context16) {
635
- while (1) {
636
- switch (_context16.prev = _context16.next) {
637
- case 0:
638
- session = {
639
- completeAnswer: '72\\div12=6\\text{eggs}'
640
- };
641
- _context16.next = 3;
642
- return (0, _index.outcome)(question, session, env);
643
-
644
- case 3:
645
- outcomeResult = _context16.sent;
646
- expect(outcomeResult.score).toEqual(1);
647
- session = {
648
- completeAnswer: '\\frac{72}{12}=6\\text{eggs}'
649
- };
650
- _context16.next = 8;
651
- return (0, _index.outcome)(question, session, env);
652
-
653
- case 8:
654
- outcomeResult = _context16.sent;
655
- expect(outcomeResult.score).toEqual(1);
656
-
657
- case 10:
658
- case "end":
659
- return _context16.stop();
660
- }
661
- }
662
- }, _callee16);
663
- })));
664
-
665
- var returnOutcome = function returnOutcome(session) {
666
- it("returns score: 0 and empty: true if session is ".concat(JSON.stringify(session)), /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee17() {
667
- var outcomeResult;
668
- return _regenerator["default"].wrap(function _callee17$(_context17) {
669
- while (1) {
670
- switch (_context17.prev = _context17.next) {
671
- case 0:
672
- _context17.next = 2;
673
- return (0, _index.outcome)(question, session, env);
674
-
675
- case 2:
676
- outcomeResult = _context17.sent;
677
- expect(outcomeResult).toEqual({
678
- score: 0,
679
- empty: true
680
- });
681
-
682
- case 4:
683
- case "end":
684
- return _context17.stop();
685
- }
686
- }
687
- }, _callee17);
688
- })));
689
- };
690
-
691
- returnOutcome(undefined);
692
- returnOutcome(null);
693
- returnOutcome({});
694
- });
695
- describe('createCorrectResponseSession', function () {
696
- var answer = '72\\div12=6';
697
- var question = {
698
- id: '1',
699
- responseType: 'Advanced Multi',
700
- expression: '{{response}} = {{response}}',
701
- prompt: '<p>Sam sells baskets of eggs at his farm stand. He sold 12 baskets and wrote the number sentence below to show how many eggs he sold in all.</p><p><span class="equation-block"><math xmlns="http://www.w3.org/1998/Math/MathML" >\n <mrow>\n <mn>12</mn><mo>&#x00D7;</mo><mo>&#x25A1;</mo><mo>=</mo><mn>72</mn>\n </mrow>\n</math> </span></p><p>What <span class="relative-emphasis">division</span> number sentence can be used to show how many eggs were in each basket?</p><p>Use the on-screen keyboard to type your number sentence and answer in the box.</p>',
702
- responses: [{
703
- id: '1',
704
- answer: answer,
705
- alternates: {
706
- 1: '6=72\\div12]',
707
- 2: '\\frac{72}{12}=6',
708
- 3: '6=\\frac{72}{12}'
709
- },
710
- validation: 'literal'
711
- }],
712
- customKeys: ['\\left(\\right)', '\\frac{}{}', 'x\\frac{}{}']
713
- };
714
- describe('7165', function () {
715
- it('returns whole answer', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee18() {
716
- var question, ca, cs;
717
- return _regenerator["default"].wrap(function _callee18$(_context18) {
718
- while (1) {
719
- switch (_context18.prev = _context18.next) {
720
- case 0:
721
- question = {
722
- element: 'math-inline',
723
- responseType: 'Advanced Multi',
724
- expression: '{{response}}',
725
- responses: [{
726
- alternates: {},
727
- answer: '2\\times7',
728
- validation: 'literal',
729
- id: '1'
730
- }],
731
- id: '1'
732
- };
733
- ca = question.responses[0].answer;
734
- _context18.next = 4;
735
- return (0, _index.createCorrectResponseSession)(question, {
736
- mode: 'gather',
737
- role: 'instructor'
738
- });
739
-
740
- case 4:
741
- cs = _context18.sent;
742
- expect(cs).toMatchObject({
743
- id: '1',
744
- completeAnswer: ca,
745
- answers: {
746
- r1: {
747
- value: ca
748
- }
749
- }
750
- });
751
-
752
- case 6:
753
- case "end":
754
- return _context18.stop();
755
- }
756
- }
757
- }, _callee18);
758
- })));
759
- });
760
- describe('PD-173', function () {
761
- it('returns empty answer if model is incorrectly defined', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee19() {
762
- var question, ca, cs;
763
- return _regenerator["default"].wrap(function _callee19$(_context19) {
764
- while (1) {
765
- switch (_context19.prev = _context19.next) {
766
- case 0:
767
- question = {
768
- element: 'math-inline',
769
- responseType: 'Advanced Multi',
770
- expression: 'x={{response}}\\ \\text{radians}',
771
- responses: [{
772
- alternates: {},
773
- answer: 'x=\\frac{20,000}{r^2}\\text{radians}',
774
- validation: 'symbolic',
775
- id: '1',
776
- allowSpaces: true
777
- }],
778
- id: '1'
779
- };
780
- ca = question.responses[0].answer;
781
- _context19.next = 4;
782
- return (0, _index.createCorrectResponseSession)(question, {
783
- mode: 'gather',
784
- role: 'instructor'
785
- });
786
-
787
- case 4:
788
- cs = _context19.sent;
789
- expect(cs).toMatchObject({
790
- id: '1',
791
- completeAnswer: ca,
792
- answers: {}
793
- });
794
-
795
- case 6:
796
- case "end":
797
- return _context19.stop();
798
- }
799
- }
800
- }, _callee19);
801
- })));
802
- });
803
-
804
- var val = function val(value) {
805
- return {
806
- value: value
807
- };
808
- };
809
-
810
- describe.each(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n expression | cr | expected\n ", " | ", " | ", "\n ", " | ", " | ", "\n ", " | ", " | ", "\n ", " | ", " | ", "\n ", " | ", " | ", "\n ", " | ", " | ", "\n ", " | ", " | ", "\n "])), '{{ response}}', '1', {
811
- r1: val('1')
812
- }, '{{response}} = {{response}}', '1 = 1', {
813
- r1: val('1'),
814
- r2: val('1')
815
- }, '{{response}} + {{response}} = {{response}}', '1 + 2 = 3', {
816
- r1: val('1'),
817
- r2: val('2'),
818
- r3: val('3')
819
- }, '{{response}} = {{response}}', '\\frac{2}{3} + 2 = \\sqrt{9}', {
820
- r1: val('\\frac{2}{3} + 2'),
821
- r2: val('\\sqrt{9}')
822
- }, '{{response}} = {{response}}', '72\\div12=6', {
823
- r1: val('72\\div12'),
824
- r2: val('6')
825
- }, '{{response}} = {{response}}', '72\\div12 = 6', {
826
- r1: val('72\\div12'),
827
- r2: val('6')
828
- }, '{{response}} = {{response}} / {{response}}', '72\\div12 = 6/2', {
829
- r1: val('72\\div12'),
830
- r2: val('6'),
831
- r3: val('2')
832
- })('$expression + $cr', function (_ref20) {
833
- var expression = _ref20.expression,
834
- cr = _ref20.cr,
835
- expected = _ref20.expected;
836
- var crs;
837
- var env;
838
- var q;
839
- beforeEach( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee20() {
840
- return _regenerator["default"].wrap(function _callee20$(_context20) {
841
- while (1) {
842
- switch (_context20.prev = _context20.next) {
843
- case 0:
844
- _context20.prev = 0;
845
- env = {
846
- mode: 'gather',
847
- role: 'instructor'
848
- };
849
- q = {
850
- expression: expression,
851
- responses: [{
852
- answer: cr
853
- }]
854
- };
855
- _context20.next = 5;
856
- return (0, _index.createCorrectResponseSession)(q, env);
857
-
858
- case 5:
859
- crs = _context20.sent;
860
- _context20.next = 12;
861
- break;
862
-
863
- case 8:
864
- _context20.prev = 8;
865
- _context20.t0 = _context20["catch"](0);
866
- console.error(_context20.t0);
867
- fail(_context20.t0);
868
-
869
- case 12:
870
- case "end":
871
- return _context20.stop();
872
- }
873
- }
874
- }, _callee20, null, [[0, 8]]);
875
- })));
876
- it("".concat(JSON.stringify(expected), " correct answers"), function () {
877
- expect(crs.answers).toEqual(expected);
878
- });
879
- it("".concat(JSON.stringify(expected), " - no 'response' prop"), function () {
880
- expect(crs.response).not.toBeDefined();
881
- });
882
- });
883
- it.each(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n mode | role\n ", " | ", "\n ", " | ", "\n "])), 'gather', 'instructor', 'view', 'instructor')('returns correctResponse for $mode + $role', /*#__PURE__*/function () {
884
- var _ref23 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee21(_ref22) {
885
- var mode, role, sess;
886
- return _regenerator["default"].wrap(function _callee21$(_context21) {
887
- while (1) {
888
- switch (_context21.prev = _context21.next) {
889
- case 0:
890
- mode = _ref22.mode, role = _ref22.role;
891
- _context21.next = 3;
892
- return (0, _index.createCorrectResponseSession)(question, {
893
- mode: mode,
894
- role: role
895
- });
896
-
897
- case 3:
898
- sess = _context21.sent;
899
- expect(sess).toMatchObject({
900
- answers: {
901
- r1: val('72\\div12'),
902
- r2: val('6')
903
- },
904
- completeAnswer: answer,
905
- id: '1'
906
- });
907
-
908
- case 5:
909
- case "end":
910
- return _context21.stop();
911
- }
912
- }
913
- }, _callee21);
914
- }));
915
-
916
- return function (_x) {
917
- return _ref23.apply(this, arguments);
918
- };
919
- }());
920
- it('returns correct response if role is instructor and mode is view and responseType is Simple', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee22() {
921
- var sess;
922
- return _regenerator["default"].wrap(function _callee22$(_context22) {
923
- while (1) {
924
- switch (_context22.prev = _context22.next) {
925
- case 0:
926
- _context22.next = 2;
927
- return (0, _index.createCorrectResponseSession)(_objectSpread(_objectSpread({}, question), {}, {
928
- expression: '{{response}}',
929
- responses: [{
930
- answer: '\\frac{3}{4}',
931
- validation: 'symbolic',
932
- id: '1'
933
- }],
934
- responseType: 'Simple'
935
- }), {
936
- mode: 'view',
937
- role: 'instructor'
938
- });
939
-
940
- case 2:
941
- sess = _context22.sent;
942
- expect(sess).toMatchObject({
943
- response: '\\frac{3}{4}',
944
- completeAnswer: '\\frac{3}{4}',
945
- id: '1'
946
- });
947
-
948
- case 4:
949
- case "end":
950
- return _context22.stop();
951
- }
952
- }
953
- }, _callee22);
954
- })));
955
- it('returns null if mode is evaluate', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee23() {
956
- var noResult;
957
- return _regenerator["default"].wrap(function _callee23$(_context23) {
958
- while (1) {
959
- switch (_context23.prev = _context23.next) {
960
- case 0:
961
- _context23.next = 2;
962
- return (0, _index.createCorrectResponseSession)(question, {
963
- mode: 'evaluate',
964
- role: 'instructor'
965
- });
966
-
967
- case 2:
968
- noResult = _context23.sent;
969
- expect(noResult).toBeNull();
970
-
971
- case 4:
972
- case "end":
973
- return _context23.stop();
974
- }
975
- }
976
- }, _callee23);
977
- })));
978
- it('returns null if role is student', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee24() {
979
- var noResult;
980
- return _regenerator["default"].wrap(function _callee24$(_context24) {
981
- while (1) {
982
- switch (_context24.prev = _context24.next) {
983
- case 0:
984
- _context24.next = 2;
985
- return (0, _index.createCorrectResponseSession)(question, {
986
- mode: 'gather',
987
- role: 'student'
988
- });
989
-
990
- case 2:
991
- noResult = _context24.sent;
992
- expect(noResult).toBeNull();
993
-
994
- case 4:
995
- case "end":
996
- return _context24.stop();
997
- }
998
- }
999
- }, _callee24);
1000
- })));
1001
- describe('PIE-188', function () {
1002
- it('works', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee25() {
1003
- var question, session, env;
1004
- return _regenerator["default"].wrap(function _callee25$(_context25) {
1005
- while (1) {
1006
- switch (_context25.prev = _context25.next) {
1007
- case 0:
1008
- _mathValidation.latexEqual.mockReturnValueOnce(false);
1009
-
1010
- question = {
1011
- responseType: 'Advanced Multi',
1012
- expression: '{{response}}',
1013
- equationEditor: 'miscellaneous',
1014
- responses: [{
1015
- alternates: {},
1016
- answer: '1530',
1017
- validation: 'symbolic',
1018
- id: '1'
1019
- }],
1020
- id: '1',
1021
- element: 'math-inline',
1022
- customKeys: ['<', '\\le', '\\ge', '>', '\\frac{}{}', 'x^{}', '\\left(\\right)']
1023
- };
1024
- session = {
1025
- id: '1',
1026
- answers: {
1027
- r1: {
1028
- value: '\\odot'
1029
- }
1030
- },
1031
- completeAnswer: '\\odot'
1032
- };
1033
- env = {
1034
- mode: 'evaluate'
1035
- };
1036
-
1037
- _mathValidation.latexEqual.mockReturnValueOnce(false);
1038
-
1039
- _context25.prev = 5;
1040
- _context25.next = 8;
1041
- return (0, _index.model)(question, session, env);
1042
-
1043
- case 8:
1044
- _context25.next = 15;
1045
- break;
1046
-
1047
- case 10:
1048
- _context25.prev = 10;
1049
- _context25.t0 = _context25["catch"](5);
1050
- console.error('>>');
1051
- console.log(_context25.t0);
1052
- fail(_context25.t0);
1053
-
1054
- case 15:
1055
- _context25.next = 17;
1056
- return expect((0, _index.model)(question, session, env)).resolves.toMatchObject({
1057
- correctness: {
1058
- correct: false
1059
- }
1060
- });
1061
-
1062
- case 17:
1063
- case "end":
1064
- return _context25.stop();
1065
- }
1066
- }
1067
- }, _callee25, null, [[5, 10]]);
1068
- })));
1069
- });
1070
- });
1071
- describe('6456 - outcome', function () {
1072
- var question = {
1073
- equationEditor: 8,
1074
- responseType: 'Advanced Multi',
1075
- teacherInstructions: '',
1076
- expression: '{{response}}',
1077
- responses: [{
1078
- answer: '-12.5',
1079
- id: '1',
1080
- alternates: {
1081
- 1: '-12.5\\%'
1082
- },
1083
- validation: 'symbolic'
1084
- }],
1085
- id: '1',
1086
- prompt: 'prompt',
1087
- rationale: 'rationale',
1088
- element: 'math-inline'
1089
- };
1090
- it('scores 0', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee26() {
1091
- var session, env, result;
1092
- return _regenerator["default"].wrap(function _callee26$(_context26) {
1093
- while (1) {
1094
- switch (_context26.prev = _context26.next) {
1095
- case 0:
1096
- _mathValidation.latexEqual.mockReturnValueOnce(false);
1097
-
1098
- session = {
1099
- id: '1',
1100
- answers: {
1101
- r1: {
1102
- value: '-12\\%'
1103
- }
1104
- },
1105
- completeAnswer: '-12\\%'
1106
- };
1107
-
1108
- _mathValidation.latexEqual.mockReturnValueOnce(false);
1109
-
1110
- env = {
1111
- mode: 'evaluate'
1112
- };
1113
- _context26.next = 6;
1114
- return (0, _index.outcome)(question, session, env);
1115
-
1116
- case 6:
1117
- result = _context26.sent;
1118
- expect(result).toEqual({
1119
- score: 0
1120
- });
1121
-
1122
- case 8:
1123
- case "end":
1124
- return _context26.stop();
1125
- }
1126
- }
1127
- }, _callee26);
1128
- })));
1129
- it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee27() {
1130
- var session, env, result;
1131
- return _regenerator["default"].wrap(function _callee27$(_context27) {
1132
- while (1) {
1133
- switch (_context27.prev = _context27.next) {
1134
- case 0:
1135
- session = {
1136
- id: '1',
1137
- answers: {
1138
- r1: {
1139
- value: '-12.5\\%'
1140
- }
1141
- },
1142
- completeAnswer: '-12.5\\%'
1143
- };
1144
- env = {
1145
- mode: 'evaluate'
1146
- };
1147
- _context27.next = 4;
1148
- return (0, _index.outcome)(question, session, env);
1149
-
1150
- case 4:
1151
- result = _context27.sent;
1152
- expect(result).toEqual({
1153
- score: 1
1154
- });
1155
-
1156
- case 6:
1157
- case "end":
1158
- return _context27.stop();
1159
- }
1160
- }
1161
- }, _callee27);
1162
- })));
1163
- });
1164
- describe('6371', function () {
1165
- var question = {
1166
- equationEditor: 8,
1167
- responseType: 'Advanced Multi',
1168
- teacherInstructions: '',
1169
- expression: '{{response}}\\ \\text{dollars}',
1170
- responses: [{
1171
- answer: '4\\times10^3\\ \\text{dollars}',
1172
- id: '1',
1173
- alternates: {},
1174
- validation: 'symbolic'
1175
- }],
1176
- id: '1',
1177
- prompt: 'prompt',
1178
- rationale: 'rationale',
1179
- element: 'math-inline'
1180
- };
1181
- it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee28() {
1182
- var session, env, result;
1183
- return _regenerator["default"].wrap(function _callee28$(_context28) {
1184
- while (1) {
1185
- switch (_context28.prev = _context28.next) {
1186
- case 0:
1187
- session = {
1188
- id: '1',
1189
- answers: {
1190
- r1: {
1191
- value: '4000\\ \\text{dollars}'
1192
- }
1193
- },
1194
- completeAnswer: '4000\\ \\text{dollars}'
1195
- };
1196
- env = {
1197
- mode: 'evaluate'
1198
- };
1199
- _context28.next = 4;
1200
- return (0, _index.outcome)(question, session, env);
1201
-
1202
- case 4:
1203
- result = _context28.sent;
1204
- expect(result).toEqual({
1205
- score: 1
1206
- });
1207
-
1208
- case 6:
1209
- case "end":
1210
- return _context28.stop();
1211
- }
1212
- }
1213
- }, _callee28);
1214
- })));
1215
- });
1216
- describe('3826', function () {
1217
- var question = {
1218
- equationEditor: 8,
1219
- responseType: 'Advanced Multi',
1220
- teacherInstructions: '',
1221
- expression: '{{response}}\\ \\text{%}',
1222
- responses: [{
1223
- id: '1',
1224
- answer: '84%',
1225
- alternates: {},
1226
- validation: 'literal'
1227
- }],
1228
- id: '1',
1229
- prompt: 'prompt',
1230
- rationale: 'rationale',
1231
- element: 'math-inline'
1232
- };
1233
- it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee29() {
1234
- var session, env, result;
1235
- return _regenerator["default"].wrap(function _callee29$(_context29) {
1236
- while (1) {
1237
- switch (_context29.prev = _context29.next) {
1238
- case 0:
1239
- session = {
1240
- id: '1',
1241
- answers: {
1242
- r1: {
1243
- value: '84\\ \\text{%}'
1244
- }
1245
- },
1246
- completeAnswer: '84\\ \\text{%}'
1247
- };
1248
- env = {
1249
- mode: 'evaluate'
1250
- };
1251
- _context29.next = 4;
1252
- return (0, _index.outcome)(question, session, env);
1253
-
1254
- case 4:
1255
- result = _context29.sent;
1256
- expect(result).toEqual({
1257
- score: 1
1258
- });
1259
-
1260
- case 6:
1261
- case "end":
1262
- return _context29.stop();
1263
- }
1264
- }
1265
- }, _callee29);
1266
- })));
1267
- });
1268
- describe('PD-66', function () {
1269
- var question = {
1270
- id: '1',
1271
- prompt: 'prompt',
1272
- rationale: 'rationale',
1273
- element: 'math-inline',
1274
- feedbackEnabled: true,
1275
- promptEnabled: true,
1276
- rationaleEnabled: true,
1277
- teacherInstructionsEnabled: true,
1278
- studentInstructionsEnabled: true,
1279
- responseType: 'Advanced Multi',
1280
- expression: '{{response}}',
1281
- equationEditor: 'statistics',
1282
- responses: [{
1283
- answer: '\\left(-\\frac{x}{3},-\\frac{y}{3}\\right)',
1284
- id: '1',
1285
- validation: 'literal'
1286
- }, {
1287
- answer: '\\left(\\frac{-x}{3},\\frac{-y}{3}\\right)',
1288
- validation: 'equivLiteral'
1289
- }, {
1290
- answer: '\\left(\\frac{x}{-3},\\frac{y}{-3}\\right)',
1291
- validation: 'equivLiteral'
1292
- }, {
1293
- answer: '\\left(-\\frac{1}{3}x,-\\frac{1}{3}y\\right)',
1294
- validation: 'equivLiteral'
1295
- }, {
1296
- answer: '\\left(\\frac{-1}{3}x,\\frac{-1}{3}y\\right)',
1297
- validation: 'equivLiteral'
1298
- }, {
1299
- answer: '\\left(\\frac{1}{-3}x,\\frac{1}{-3}y\\right)',
1300
- validation: 'equivLiteral'
1301
- }]
1302
- };
1303
- it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee30() {
1304
- var session, env, result;
1305
- return _regenerator["default"].wrap(function _callee30$(_context30) {
1306
- while (1) {
1307
- switch (_context30.prev = _context30.next) {
1308
- case 0:
1309
- session = {
1310
- id: '1',
1311
- answers: {
1312
- r1: {
1313
- value: '\\left(-\\frac{x}{3},-\\frac{y}{3}\\right)'
1314
- }
1315
- },
1316
- completeAnswer: '\\left(-\\frac{x}{3},-\\frac{y}{3}\\right)'
1317
- };
1318
- env = {
1319
- mode: 'evaluate'
1320
- };
1321
- _context30.next = 4;
1322
- return (0, _index.outcome)(question, session, env);
1323
-
1324
- case 4:
1325
- result = _context30.sent;
1326
- expect(result).toEqual({
1327
- score: 1
1328
- });
1329
-
1330
- case 6:
1331
- case "end":
1332
- return _context30.stop();
1333
- }
1334
- }
1335
- }, _callee30);
1336
- })));
1337
- });
1338
- describe('PD-205', function () {
1339
- var question = {
1340
- id: 1,
1341
- element: 'math-inline',
1342
- feedbackEnabled: true,
1343
- promptEnabled: true,
1344
- rationaleEnabled: true,
1345
- teacherInstructionsEnabled: true,
1346
- studentInstructionsEnabled: true,
1347
- equationEditor: 3,
1348
- teacherInstructions: '',
1349
- responseType: 'Advanced Multi',
1350
- expression: '{{response}}\\ =\\ {{response}}\\ \\text{cubic}\\ \\text{inches}',
1351
- rationale: '<p>The volume of the box can be solved by any equivalent variation of the equation: 10 &#215; 7 &#215; 5 = 350 (cubic&#160;inches)&#160;or 70 &#215; 5 = 350&#160;(cubic&#160;inches). This answer is the result of accurately applying either the formula <span class="variable">l</span> &#215; <span class="variable">w</span> &#215; <span class="variable">h</span> = <span class="variable">V</span> or <span class="variable">b</span> &#215; <span class="variable">h</span> = <span class="variable">V</span> to find the volume of the&#160;rectangular prism described.</p>',
1352
- prompt: '<p>Elyse has a plastic box she uses for sand art designs, as shown below.</p><p><img alt="image 5afe5c90cd7e491896d58552ab74b6f7" id="5afe5c90cd7e491896d58552ab74b6f7" src="https://storage.googleapis.com/pie-prod-221718-assets/image/a3ee5289-d882-4c7d-abce-2ee70ce8c26f"></p><p>The length of the box is 10&#160;inches, the width is 7&#160;inches, and the height is 5&#160;inches. Write and solve an&#160;equation Elyse can use to find&#160;the volume of sand, in cubic inches, that will fit in the container.&#160;</p><p>Use the on-screen keyboard to type the correct equation and answer in the box.</p>',
1353
- responses: [{
1354
- answer: '10\\times7\\times5=350\\ \\text{cubic}\\text{inches}',
1355
- validation: 'literal',
1356
- id: '1'
1357
- }, {
1358
- validation: 'equivLiteral',
1359
- answer: '350=10\\times7\\times5\\ \\text{cubic}\\text{inches}'
1360
- }, {
1361
- answer: '350=10\\times5\\times7\\ \\text{cubic}\\text{inches}',
1362
- validation: 'equivLiteral'
1363
- }, {
1364
- answer: '350=7\\times5\\times10\\ \\text{cubic}\\text{inches}',
1365
- validation: 'equivLiteral'
1366
- }, {
1367
- answer: '350=5\\times10\\times7\\ \\text{cubic}\\text{inches}',
1368
- validation: 'equivLiteral'
1369
- }, {
1370
- validation: 'equivLiteral',
1371
- answer: '350=7\\times10\\times5\\ \\text{cubic}\\text{inches}'
1372
- }, {
1373
- answer: '350=7\\times5\\times10\\ \\text{cubic}\\text{inches}',
1374
- validation: 'equivLiteral'
1375
- }, {
1376
- answer: '70\\times5=350\\ \\text{cubic}\\text{inches}',
1377
- validation: 'equivLiteral'
1378
- }, {
1379
- answer: '350=70\\times5\\ \\text{cubic}\\text{inches}',
1380
- validation: 'equivLiteral'
1381
- }, {
1382
- answer: '350=5\\times70\\ \\text{cubic}\\text{inches}',
1383
- validation: 'equivLiteral'
1384
- }]
1385
- };
1386
- it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee31() {
1387
- var session, env, result;
1388
- return _regenerator["default"].wrap(function _callee31$(_context31) {
1389
- while (1) {
1390
- switch (_context31.prev = _context31.next) {
1391
- case 0:
1392
- session = {
1393
- id: '1',
1394
- answers: {
1395
- r1: {
1396
- value: '350'
1397
- },
1398
- r2: {
1399
- value: '7\\cdot50'
1400
- }
1401
- },
1402
- completeAnswer: '350\\ =\\ 7\\cdot50\\ \\text{cubic}\\ \\text{inches}'
1403
- };
1404
- env = {
1405
- mode: 'evaluate'
1406
- };
1407
- _context31.next = 4;
1408
- return (0, _index.outcome)(question, session, env);
1409
-
1410
- case 4:
1411
- result = _context31.sent;
1412
- expect(result).toEqual({
1413
- score: 1
1414
- });
1415
-
1416
- case 6:
1417
- case "end":
1418
- return _context31.stop();
1419
- }
1420
- }
1421
- }, _callee31);
1422
- })));
1423
- });
1424
- describe('PD-610', function () {
1425
- var equation_01 = {
1426
- id: 1,
1427
- element: 'math-inline',
1428
- feedbackEnabled: true,
1429
- promptEnabled: true,
1430
- rationaleEnabled: true,
1431
- teacherInstructionsEnabled: true,
1432
- studentInstructionsEnabled: true,
1433
- equationEditor: 3,
1434
- teacherInstructions: '',
1435
- responseType: 'Advanced Multi',
1436
- expression: '\\frac{1}{3}=\\frac{{response}}{6}',
1437
- rationale: '<p>A correct response is shown below:</p><ul><li>1/3 = <strong>2</strong>/6</li><li>3/4 = <strong>6</strong>/8</li><li>3/6 = <strong>1</strong>/2</li></ul>',
1438
- responses: [{
1439
- answer: '\\frac{1}{3}=\\frac{2}{6}',
1440
- validation: 'literal',
1441
- id: '1'
1442
- }]
1443
- };
1444
- it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee32() {
1445
- var session, env, result;
1446
- return _regenerator["default"].wrap(function _callee32$(_context32) {
1447
- while (1) {
1448
- switch (_context32.prev = _context32.next) {
1449
- case 0:
1450
- session = {
1451
- id: '1',
1452
- answers: {
1453
- r1: {
1454
- value: '2'
1455
- }
1456
- },
1457
- completeAnswer: '\\frac{1}{3}=\\frac{2}{6}'
1458
- };
1459
- env = {
1460
- mode: 'evaluate'
1461
- };
1462
- _context32.next = 4;
1463
- return (0, _index.outcome)(equation_01, session, env);
1464
-
1465
- case 4:
1466
- result = _context32.sent;
1467
- expect(result).toEqual({
1468
- score: 1
1469
- });
1470
-
1471
- case 6:
1472
- case "end":
1473
- return _context32.stop();
1474
- }
1475
- }
1476
- }, _callee32);
1477
- })));
1478
- it('scores 0', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee33() {
1479
- var session, env, result;
1480
- return _regenerator["default"].wrap(function _callee33$(_context33) {
1481
- while (1) {
1482
- switch (_context33.prev = _context33.next) {
1483
- case 0:
1484
- _mathValidation.latexEqual.mockReturnValueOnce(false);
1485
-
1486
- session = {
1487
- id: '1',
1488
- answers: {
1489
- r1: {
1490
- value: '2'
1491
- }
1492
- },
1493
- completeAnswer: '\\frac{1}{3}=\\frac{1}{6}'
1494
- };
1495
- env = {
1496
- mode: 'evaluate'
1497
- };
1498
- _context33.next = 5;
1499
- return (0, _index.outcome)(equation_01, session, env);
1500
-
1501
- case 5:
1502
- result = _context33.sent;
1503
- expect(result).toEqual({
1504
- score: 0
1505
- });
1506
-
1507
- case 7:
1508
- case "end":
1509
- return _context33.stop();
1510
- }
1511
- }
1512
- }, _callee33);
1513
- })));
1514
- var equation_02 = {
1515
- id: 2,
1516
- element: 'math-inline',
1517
- feedbackEnabled: true,
1518
- promptEnabled: true,
1519
- rationaleEnabled: true,
1520
- teacherInstructionsEnabled: true,
1521
- studentInstructionsEnabled: true,
1522
- equationEditor: 3,
1523
- teacherInstructions: '',
1524
- responseType: 'Advanced Multi',
1525
- expression: '\\frac{3}{4}=\\frac{{response}}{8}',
1526
- rationale: '<p>A correct response is shown below:</p><ul><li>1/3 = <strong>2</strong>/6</li><li>3/4 = <strong>6</strong>/8</li><li>3/6 = <strong>1</strong>/2</li></ul>',
1527
- responses: [{
1528
- answer: '\\frac{3}{4}=\\frac{6}{8}',
1529
- validation: 'literal',
1530
- id: '1'
1531
- }]
1532
- };
1533
- it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee34() {
1534
- var session, env, result;
1535
- return _regenerator["default"].wrap(function _callee34$(_context34) {
1536
- while (1) {
1537
- switch (_context34.prev = _context34.next) {
1538
- case 0:
1539
- session = {
1540
- id: '2',
1541
- answers: {
1542
- r1: {
1543
- value: '6'
1544
- }
1545
- },
1546
- completeAnswer: '\\frac{3}{4}=\\frac{6}{8}'
1547
- };
1548
- env = {
1549
- mode: 'evaluate'
1550
- };
1551
- _context34.next = 4;
1552
- return (0, _index.outcome)(equation_02, session, env);
1553
-
1554
- case 4:
1555
- result = _context34.sent;
1556
- expect(result).toEqual({
1557
- score: 1
1558
- });
1559
-
1560
- case 6:
1561
- case "end":
1562
- return _context34.stop();
1563
- }
1564
- }
1565
- }, _callee34);
1566
- })));
1567
- it('scores 0', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee35() {
1568
- var session, env, result;
1569
- return _regenerator["default"].wrap(function _callee35$(_context35) {
1570
- while (1) {
1571
- switch (_context35.prev = _context35.next) {
1572
- case 0:
1573
- _mathValidation.latexEqual.mockReturnValueOnce(false);
1574
-
1575
- session = {
1576
- id: '2',
1577
- answers: {
1578
- r1: {
1579
- value: '6'
1580
- }
1581
- },
1582
- completeAnswer: '\\frac{3}{4}=\\frac{3}{8}'
1583
- };
1584
- env = {
1585
- mode: 'evaluate'
1586
- };
1587
- _context35.next = 5;
1588
- return (0, _index.outcome)(equation_02, session, env);
1589
-
1590
- case 5:
1591
- result = _context35.sent;
1592
- expect(result).toEqual({
1593
- score: 0
1594
- });
1595
-
1596
- case 7:
1597
- case "end":
1598
- return _context35.stop();
1599
- }
1600
- }
1601
- }, _callee35);
1602
- })));
1603
- var equation_03 = {
1604
- id: 3,
1605
- element: 'math-inline',
1606
- feedbackEnabled: true,
1607
- promptEnabled: true,
1608
- rationaleEnabled: true,
1609
- teacherInstructionsEnabled: true,
1610
- studentInstructionsEnabled: true,
1611
- equationEditor: 3,
1612
- teacherInstructions: '',
1613
- responseType: 'Advanced Multi',
1614
- expression: '\\frac{3}{6}=\\frac{{response}}{2}',
1615
- rationale: '<p>A correct response is shown below:</p><ul><li>1/3 = <strong>2</strong>/6</li><li>3/4 = <strong>6</strong>/8</li><li>3/6 = <strong>1</strong>/2</li></ul>',
1616
- responses: [{
1617
- answer: '\\frac{3}{6}=\\frac{1}{2}',
1618
- validation: 'literal',
1619
- id: '3'
1620
- }]
1621
- };
1622
- it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee36() {
1623
- var session, env, result;
1624
- return _regenerator["default"].wrap(function _callee36$(_context36) {
1625
- while (1) {
1626
- switch (_context36.prev = _context36.next) {
1627
- case 0:
1628
- session = {
1629
- id: '3',
1630
- answers: {
1631
- r1: {
1632
- value: '1'
1633
- }
1634
- },
1635
- completeAnswer: '\\frac{3}{6}=\\frac{1}{2}'
1636
- };
1637
- env = {
1638
- mode: 'evaluate'
1639
- };
1640
- _context36.next = 4;
1641
- return (0, _index.outcome)(equation_03, session, env);
1642
-
1643
- case 4:
1644
- result = _context36.sent;
1645
- expect(result).toEqual({
1646
- score: 1
1647
- });
1648
-
1649
- case 6:
1650
- case "end":
1651
- return _context36.stop();
1652
- }
1653
- }
1654
- }, _callee36);
1655
- })));
1656
- it('scores 0', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee37() {
1657
- var session, env, result;
1658
- return _regenerator["default"].wrap(function _callee37$(_context37) {
1659
- while (1) {
1660
- switch (_context37.prev = _context37.next) {
1661
- case 0:
1662
- _mathValidation.latexEqual.mockReturnValueOnce(false);
1663
-
1664
- session = {
1665
- id: '3',
1666
- answers: {
1667
- r1: {
1668
- value: '1'
1669
- }
1670
- },
1671
- completeAnswer: '\\frac{3}{6}=\\frac{2}{2}'
1672
- };
1673
- env = {
1674
- mode: 'evaluate'
1675
- };
1676
- _context37.next = 5;
1677
- return (0, _index.outcome)(equation_03, session, env);
1678
-
1679
- case 5:
1680
- result = _context37.sent;
1681
- expect(result).toEqual({
1682
- score: 0
1683
- });
1684
-
1685
- case 7:
1686
- case "end":
1687
- return _context37.stop();
1688
- }
1689
- }
1690
- }, _callee37);
1691
- })));
1692
- });
1693
- describe('PD-1031', function () {
1694
- var expression_01 = {
1695
- id: 1,
1696
- element: 'math-inline',
1697
- feedbackEnabled: true,
1698
- promptEnabled: true,
1699
- rationaleEnabled: true,
1700
- teacherInstructionsEnabled: true,
1701
- studentInstructionsEnabled: true,
1702
- equationEditor: 3,
1703
- teacherInstructions: '',
1704
- responseType: 'Advanced Multi',
1705
- expression: '{{response}}\\ml',
1706
- rationale: '<p>A correct response is shown below:</p><ul><li>1/3 = <strong>2</strong>/6</li><li>3/4 = <strong>6</strong>/8</li><li>3/6 = <strong>1</strong>/2</li></ul>',
1707
- responses: [{
1708
- answer: '1,000\\ml',
1709
- validation: 'literal',
1710
- id: '1'
1711
- }]
1712
- };
1713
- it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee38() {
1714
- var session, env, result;
1715
- return _regenerator["default"].wrap(function _callee38$(_context38) {
1716
- while (1) {
1717
- switch (_context38.prev = _context38.next) {
1718
- case 0:
1719
- session = {
1720
- id: '1',
1721
- answers: {
1722
- r1: {
1723
- value: '3'
1724
- }
1725
- },
1726
- completeAnswer: '1000\\ml'
1727
- };
1728
- env = {
1729
- mode: 'evaluate'
1730
- };
1731
- _context38.next = 4;
1732
- return (0, _index.outcome)(expression_01, session, env);
1733
-
1734
- case 4:
1735
- result = _context38.sent;
1736
- expect(result).toEqual({
1737
- score: 1
1738
- });
1739
-
1740
- case 6:
1741
- case "end":
1742
- return _context38.stop();
1743
- }
1744
- }
1745
- }, _callee38);
1746
- })));
1747
- var expression_02 = {
1748
- id: 1,
1749
- element: 'math-inline',
1750
- feedbackEnabled: true,
1751
- promptEnabled: true,
1752
- rationaleEnabled: true,
1753
- teacherInstructionsEnabled: true,
1754
- studentInstructionsEnabled: true,
1755
- equationEditor: 3,
1756
- teacherInstructions: '',
1757
- responseType: 'Advanced Multi',
1758
- expression: '{{response}}\\ml',
1759
- rationale: '<p>A correct response is shown below:</p><ul><li>1/3 = <strong>2</strong>/6</li><li>3/4 = <strong>6</strong>/8</li><li>3/6 = <strong>1</strong>/2</li></ul>',
1760
- responses: [{
1761
- answer: '1000\\ml',
1762
- validation: 'literal',
1763
- id: '1'
1764
- }]
1765
- };
1766
- it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee39() {
1767
- var session, env, result;
1768
- return _regenerator["default"].wrap(function _callee39$(_context39) {
1769
- while (1) {
1770
- switch (_context39.prev = _context39.next) {
1771
- case 0:
1772
- session = {
1773
- id: '1',
1774
- answers: {
1775
- r1: {
1776
- value: '3'
1777
- }
1778
- },
1779
- completeAnswer: '1,000\\ml'
1780
- };
1781
- env = {
1782
- mode: 'evaluate'
1783
- };
1784
- _context39.next = 4;
1785
- return (0, _index.outcome)(expression_02, session, env);
1786
-
1787
- case 4:
1788
- result = _context39.sent;
1789
- expect(result).toEqual({
1790
- score: 1
1791
- });
1792
-
1793
- case 6:
1794
- case "end":
1795
- return _context39.stop();
1796
- }
1797
- }
1798
- }, _callee39);
1799
- })));
1800
- var expression_03 = {
1801
- id: 1,
1802
- element: 'math-inline',
1803
- feedbackEnabled: true,
1804
- promptEnabled: true,
1805
- rationaleEnabled: true,
1806
- teacherInstructionsEnabled: true,
1807
- studentInstructionsEnabled: true,
1808
- equationEditor: 3,
1809
- teacherInstructions: '',
1810
- responseType: 'Advanced Multi',
1811
- expression: '{{response}}\\ml',
1812
- rationale: '<p>A correct response is shown below:</p><ul><li>1/3 = <strong>2</strong>/6</li><li>3/4 = <strong>6</strong>/8</li><li>3/6 = <strong>1</strong>/2</li></ul>',
1813
- responses: [{
1814
- answer: '1,000\\ml',
1815
- validation: 'literal',
1816
- id: '1'
1817
- }]
1818
- };
1819
- it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee40() {
1820
- var session, env, result;
1821
- return _regenerator["default"].wrap(function _callee40$(_context40) {
1822
- while (1) {
1823
- switch (_context40.prev = _context40.next) {
1824
- case 0:
1825
- session = {
1826
- id: '1',
1827
- answers: {
1828
- r1: {
1829
- value: '3'
1830
- }
1831
- },
1832
- completeAnswer: '1000\\ml'
1833
- };
1834
- env = {
1835
- mode: 'evaluate'
1836
- };
1837
- _context40.next = 4;
1838
- return (0, _index.outcome)(expression_03, session, env);
1839
-
1840
- case 4:
1841
- result = _context40.sent;
1842
- expect(result).toEqual({
1843
- score: 1
1844
- });
1845
-
1846
- case 6:
1847
- case "end":
1848
- return _context40.stop();
1849
- }
1850
- }
1851
- }, _callee40);
1852
- })));
1853
- var expression_04 = {
1854
- id: 1,
1855
- element: 'math-inline',
1856
- feedbackEnabled: true,
1857
- promptEnabled: true,
1858
- rationaleEnabled: true,
1859
- teacherInstructionsEnabled: true,
1860
- studentInstructionsEnabled: true,
1861
- equationEditor: 3,
1862
- teacherInstructions: '',
1863
- responseType: 'Advanced Multi',
1864
- expression: '$\\{{response}}',
1865
- rationale: '<p>A correct response is shown below:</p><ul><li>1/3 = <strong>2</strong>/6</li><li>3/4 = <strong>6</strong>/8</li><li>3/6 = <strong>1</strong>/2</li></ul>',
1866
- responses: [{
1867
- answer: '5000\\$',
1868
- validation: 'literal',
1869
- id: '1'
1870
- }]
1871
- };
1872
- it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee41() {
1873
- var session, env, result;
1874
- return _regenerator["default"].wrap(function _callee41$(_context41) {
1875
- while (1) {
1876
- switch (_context41.prev = _context41.next) {
1877
- case 0:
1878
- session = {
1879
- id: '1',
1880
- answers: {
1881
- r1: {
1882
- value: '3'
1883
- }
1884
- },
1885
- completeAnswer: '5,000\\$'
1886
- };
1887
- env = {
1888
- mode: 'evaluate'
1889
- };
1890
- _context41.next = 4;
1891
- return (0, _index.outcome)(expression_04, session, env);
1892
-
1893
- case 4:
1894
- result = _context41.sent;
1895
- expect(result).toEqual({
1896
- score: 1
1897
- });
1898
-
1899
- case 6:
1900
- case "end":
1901
- return _context41.stop();
1902
- }
1903
- }
1904
- }, _callee41);
1905
- })));
1906
- var expression_05 = {
1907
- id: 1,
1908
- element: 'math-inline',
1909
- feedbackEnabled: true,
1910
- promptEnabled: true,
1911
- rationaleEnabled: true,
1912
- teacherInstructionsEnabled: true,
1913
- studentInstructionsEnabled: true,
1914
- equationEditor: 3,
1915
- teacherInstructions: '',
1916
- responseType: 'Advanced Multi',
1917
- expression: 'y={{response}}x^2+{{response}}x+{{response}}',
1918
- rationale: '<p>A correct response is shown below:</p><ul><li>1/3 = <strong>2</strong>/6</li><li>3/4 = <strong>6</strong>/8</li><li>3/6 = <strong>1</strong>/2</li></ul>',
1919
- responses: [{
1920
- answer: 'y=1000x^2+250x+5000',
1921
- validation: 'literal',
1922
- id: '1'
1923
- }]
1924
- };
1925
- it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee42() {
1926
- var session, env, result;
1927
- return _regenerator["default"].wrap(function _callee42$(_context42) {
1928
- while (1) {
1929
- switch (_context42.prev = _context42.next) {
1930
- case 0:
1931
- session = {
1932
- id: '1',
1933
- answers: {
1934
- r1: {
1935
- value: '3'
1936
- }
1937
- },
1938
- completeAnswer: 'y=1,000x^2+250x+5,000'
1939
- };
1940
- env = {
1941
- mode: 'evaluate'
1942
- };
1943
- _context42.next = 4;
1944
- return (0, _index.outcome)(expression_05, session, env);
1945
-
1946
- case 4:
1947
- result = _context42.sent;
1948
- expect(result).toEqual({
1949
- score: 1
1950
- });
1951
-
1952
- case 6:
1953
- case "end":
1954
- return _context42.stop();
1955
- }
1956
- }
1957
- }, _callee42);
1958
- })));
1959
- it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee43() {
1960
- var session, env, result;
1961
- return _regenerator["default"].wrap(function _callee43$(_context43) {
1962
- while (1) {
1963
- switch (_context43.prev = _context43.next) {
1964
- case 0:
1965
- session = {
1966
- id: '1',
1967
- answers: {
1968
- r1: {
1969
- value: '3'
1970
- }
1971
- },
1972
- completeAnswer: 'y=1000x^2+250x+5,000'
1973
- };
1974
- env = {
1975
- mode: 'evaluate'
1976
- };
1977
- _context43.next = 4;
1978
- return (0, _index.outcome)(expression_05, session, env);
1979
-
1980
- case 4:
1981
- result = _context43.sent;
1982
- expect(result).toEqual({
1983
- score: 1
1984
- });
1985
-
1986
- case 6:
1987
- case "end":
1988
- return _context43.stop();
1989
- }
1990
- }
1991
- }, _callee43);
1992
- })));
1993
- it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee44() {
1994
- var session, env, result;
1995
- return _regenerator["default"].wrap(function _callee44$(_context44) {
1996
- while (1) {
1997
- switch (_context44.prev = _context44.next) {
1998
- case 0:
1999
- session = {
2000
- id: '1',
2001
- answers: {
2002
- r1: {
2003
- value: '3'
2004
- }
2005
- },
2006
- completeAnswer: 'y=1,000x^2+250x+5000'
2007
- };
2008
- env = {
2009
- mode: 'evaluate'
2010
- };
2011
- _context44.next = 4;
2012
- return (0, _index.outcome)(expression_05, session, env);
2013
-
2014
- case 4:
2015
- result = _context44.sent;
2016
- expect(result).toEqual({
2017
- score: 1
2018
- });
2019
-
2020
- case 6:
2021
- case "end":
2022
- return _context44.stop();
2023
- }
2024
- }
2025
- }, _callee44);
2026
- })));
2027
- var expression_06 = {
2028
- id: 1,
2029
- element: 'math-inline',
2030
- feedbackEnabled: true,
2031
- promptEnabled: true,
2032
- rationaleEnabled: true,
2033
- teacherInstructionsEnabled: true,
2034
- studentInstructionsEnabled: true,
2035
- equationEditor: 3,
2036
- teacherInstructions: '',
2037
- responseType: 'Advanced Multi',
2038
- expression: 'y={{response}}x^2+{{response}}x+{{response}}',
2039
- rationale: '<p>A correct response is shown below:</p><ul><li>1/3 = <strong>2</strong>/6</li><li>3/4 = <strong>6</strong>/8</li><li>3/6 = <strong>1</strong>/2</li></ul>',
2040
- responses: [{
2041
- answer: 'y=1,000x^2+250x+5,000',
2042
- validation: 'literal',
2043
- id: '1'
2044
- }]
2045
- };
2046
- it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee45() {
2047
- var session, env, result;
2048
- return _regenerator["default"].wrap(function _callee45$(_context45) {
2049
- while (1) {
2050
- switch (_context45.prev = _context45.next) {
2051
- case 0:
2052
- session = {
2053
- id: '1',
2054
- answers: {
2055
- r1: {
2056
- value: '3'
2057
- }
2058
- },
2059
- completeAnswer: 'y=1000x^2+250x+5000'
2060
- };
2061
- env = {
2062
- mode: 'evaluate'
2063
- };
2064
- _context45.next = 4;
2065
- return (0, _index.outcome)(expression_06, session, env);
2066
-
2067
- case 4:
2068
- result = _context45.sent;
2069
- expect(result).toEqual({
2070
- score: 1
2071
- });
2072
-
2073
- case 6:
2074
- case "end":
2075
- return _context45.stop();
2076
- }
2077
- }
2078
- }, _callee45);
2079
- })));
2080
- it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee46() {
2081
- var session, env, result;
2082
- return _regenerator["default"].wrap(function _callee46$(_context46) {
2083
- while (1) {
2084
- switch (_context46.prev = _context46.next) {
2085
- case 0:
2086
- session = {
2087
- id: '1',
2088
- answers: {
2089
- r1: {
2090
- value: '3'
2091
- }
2092
- },
2093
- completeAnswer: 'y=1000x^2+250x+5,000'
2094
- };
2095
- env = {
2096
- mode: 'evaluate'
2097
- };
2098
- _context46.next = 4;
2099
- return (0, _index.outcome)(expression_06, session, env);
2100
-
2101
- case 4:
2102
- result = _context46.sent;
2103
- expect(result).toEqual({
2104
- score: 1
2105
- });
2106
-
2107
- case 6:
2108
- case "end":
2109
- return _context46.stop();
2110
- }
2111
- }
2112
- }, _callee46);
2113
- })));
2114
- it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee47() {
2115
- var session, env, result;
2116
- return _regenerator["default"].wrap(function _callee47$(_context47) {
2117
- while (1) {
2118
- switch (_context47.prev = _context47.next) {
2119
- case 0:
2120
- session = {
2121
- id: '1',
2122
- answers: {
2123
- r1: {
2124
- value: '3'
2125
- }
2126
- },
2127
- completeAnswer: 'y=1,000x^2+250x+5000'
2128
- };
2129
- env = {
2130
- mode: 'evaluate'
2131
- };
2132
- _context47.next = 4;
2133
- return (0, _index.outcome)(expression_06, session, env);
2134
-
2135
- case 4:
2136
- result = _context47.sent;
2137
- expect(result).toEqual({
2138
- score: 1
2139
- });
2140
-
2141
- case 6:
2142
- case "end":
2143
- return _context47.stop();
2144
- }
2145
- }
2146
- }, _callee47);
2147
- })));
2148
- var expression_07 = {
2149
- id: 1,
2150
- element: 'math-inline',
2151
- feedbackEnabled: true,
2152
- promptEnabled: true,
2153
- rationaleEnabled: true,
2154
- teacherInstructionsEnabled: true,
2155
- studentInstructionsEnabled: true,
2156
- equationEditor: 3,
2157
- teacherInstructions: '',
2158
- responseType: 'Advanced Multi',
2159
- expression: '\\frac{ x }{{{ response }}}',
2160
- rationale: '<p>A correct response is shown below:</p><ul><li>1/3 = <strong>2</strong>/6</li><li>3/4 = <strong>6</strong>/8</li><li>3/6 = <strong>1</strong>/2</li></ul>',
2161
- responses: [{
2162
- answer: '\\frac{x}{1000}',
2163
- validation: 'literal',
2164
- id: '1'
2165
- }]
2166
- };
2167
- it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee48() {
2168
- var session, env, result;
2169
- return _regenerator["default"].wrap(function _callee48$(_context48) {
2170
- while (1) {
2171
- switch (_context48.prev = _context48.next) {
2172
- case 0:
2173
- session = {
2174
- id: '1',
2175
- answers: {
2176
- r1: {
2177
- value: '3'
2178
- }
2179
- },
2180
- completeAnswer: '\\frac{x}{1,000}'
2181
- };
2182
- env = {
2183
- mode: 'evaluate'
2184
- };
2185
- _context48.next = 4;
2186
- return (0, _index.outcome)(expression_07, session, env);
2187
-
2188
- case 4:
2189
- result = _context48.sent;
2190
- expect(result).toEqual({
2191
- score: 1
2192
- });
2193
-
2194
- case 6:
2195
- case "end":
2196
- return _context48.stop();
2197
- }
2198
- }
2199
- }, _callee48);
2200
- })));
2201
- var expression_08 = {
2202
- id: 1,
2203
- element: 'math-inline',
2204
- feedbackEnabled: true,
2205
- promptEnabled: true,
2206
- rationaleEnabled: true,
2207
- teacherInstructionsEnabled: true,
2208
- studentInstructionsEnabled: true,
2209
- equationEditor: 3,
2210
- teacherInstructions: '',
2211
- responseType: 'Advanced Multi',
2212
- expression: '\\frac{ x }{{{ response }}}',
2213
- rationale: '<p>A correct response is shown below:</p><ul><li>1/3 = <strong>2</strong>/6</li><li>3/4 = <strong>6</strong>/8</li><li>3/6 = <strong>1</strong>/2</li></ul>',
2214
- responses: [{
2215
- answer: '\\frac{x}{1,000}',
2216
- validation: 'literal',
2217
- id: '1'
2218
- }]
2219
- };
2220
- it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee49() {
2221
- var session, env, result;
2222
- return _regenerator["default"].wrap(function _callee49$(_context49) {
2223
- while (1) {
2224
- switch (_context49.prev = _context49.next) {
2225
- case 0:
2226
- session = {
2227
- id: '1',
2228
- answers: {
2229
- r1: {
2230
- value: '3'
2231
- }
2232
- },
2233
- completeAnswer: '\\frac{x}{1000}'
2234
- };
2235
- env = {
2236
- mode: 'evaluate'
2237
- };
2238
- _context49.next = 4;
2239
- return (0, _index.outcome)(expression_08, session, env);
2240
-
2241
- case 4:
2242
- result = _context49.sent;
2243
- expect(result).toEqual({
2244
- score: 1
2245
- });
2246
-
2247
- case 6:
2248
- case "end":
2249
- return _context49.stop();
2250
- }
2251
- }
2252
- }, _callee49);
2253
- })));
2254
- var equation_01 = {
2255
- id: 1,
2256
- element: 'math-inline',
2257
- feedbackEnabled: true,
2258
- promptEnabled: true,
2259
- rationaleEnabled: true,
2260
- teacherInstructionsEnabled: true,
2261
- studentInstructionsEnabled: true,
2262
- equationEditor: 3,
2263
- teacherInstructions: '',
2264
- responseType: 'Advanced Multi',
2265
- expression: '\\frac{1000}{3}=\\frac{{response}}{6}',
2266
- rationale: '<p>A correct response is shown below:</p><ul><li>1/3 = <strong>2</strong>/6</li><li>3/4 = <strong>6</strong>/8</li><li>3/6 = <strong>1</strong>/2</li></ul>',
2267
- responses: [{
2268
- answer: '\\frac{1,000}{3}=\\frac{2}{6}',
2269
- validation: 'literal',
2270
- id: '1'
2271
- }]
2272
- };
2273
- it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee50() {
2274
- var session, env, result;
2275
- return _regenerator["default"].wrap(function _callee50$(_context50) {
2276
- while (1) {
2277
- switch (_context50.prev = _context50.next) {
2278
- case 0:
2279
- session = {
2280
- id: '1',
2281
- answers: {
2282
- r1: {
2283
- value: '3'
2284
- }
2285
- },
2286
- completeAnswer: '\\frac{1000}{3}=\\frac{2}{6}'
2287
- };
2288
- env = {
2289
- mode: 'evaluate'
2290
- };
2291
- _context50.next = 4;
2292
- return (0, _index.outcome)(equation_01, session, env);
2293
-
2294
- case 4:
2295
- result = _context50.sent;
2296
- expect(result).toEqual({
2297
- score: 1
2298
- });
2299
-
2300
- case 6:
2301
- case "end":
2302
- return _context50.stop();
2303
- }
2304
- }
2305
- }, _callee50);
2306
- })));
2307
- it('scores 0', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee51() {
2308
- var session, env, result;
2309
- return _regenerator["default"].wrap(function _callee51$(_context51) {
2310
- while (1) {
2311
- switch (_context51.prev = _context51.next) {
2312
- case 0:
2313
- _mathValidation.latexEqual.mockReturnValueOnce(false);
2314
-
2315
- session = {
2316
- id: '1',
2317
- answers: {
2318
- r1: {
2319
- value: '2'
2320
- }
2321
- },
2322
- completeAnswer: '\\frac{1}{3}=\\frac{1}{6}'
2323
- };
2324
- env = {
2325
- mode: 'evaluate'
2326
- };
2327
- _context51.next = 5;
2328
- return (0, _index.outcome)(equation_01, session, env);
2329
-
2330
- case 5:
2331
- result = _context51.sent;
2332
- expect(result).toEqual({
2333
- score: 0
2334
- });
2335
-
2336
- case 7:
2337
- case "end":
2338
- return _context51.stop();
2339
- }
2340
- }
2341
- }, _callee51);
2342
- })));
2343
- });
2344
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vaW5kZXgudGVzdC5qc3giXSwibmFtZXMiOlsiamVzdCIsIm1vY2siLCJsYXRleEVxdWFsIiwiZm4iLCJtb2NrUmV0dXJuVmFsdWUiLCJkZWZhdWx0TW9kZWwiLCJyZXNwb25zZVR5cGUiLCJlcXVhdGlvbkVkaXRvciIsImV4cHJlc3Npb24iLCJwcm9tcHQiLCJyZXNwb25zZXMiLCJpZCIsImFuc3dlciIsImFsdGVybmF0ZXMiLCJ2YWxpZGF0aW9uIiwibm90ZSIsImN1c3RvbUtleXMiLCJta1F1ZXN0aW9uIiwibW9kZWwiLCJkZXNjcmliZSIsInJlc3VsdCIsInF1ZXN0aW9uIiwic2Vzc2lvbiIsImVudiIsIm91dGNvbWVSZXN1bHQiLCJiZWZvcmVFYWNoIiwibW9kZSIsIml0IiwiZXhwZWN0IiwiZGlzYWJsZWQiLCJ0b0VxdWFsIiwiY29ycmVjdG5lc3MiLCJ1bmRlZmluZWQiLCJjb3JyZWN0UmVzcG9uc2UiLCJmZWVkYmFjayIsImNvbmZpZyIsInJhdGlvbmFsZSIsInRlYWNoZXJJbnN0cnVjdGlvbnMiLCJjb3JyZWN0Iiwic2NvcmUiLCJjb21wbGV0ZUFuc3dlciIsInJldHVybk91dGNvbWUiLCJKU09OIiwic3RyaW5naWZ5IiwiZW1wdHkiLCJlbGVtZW50IiwiY2EiLCJyb2xlIiwiY3MiLCJ0b01hdGNoT2JqZWN0IiwiYW5zd2VycyIsInIxIiwidmFsdWUiLCJhbGxvd1NwYWNlcyIsInZhbCIsImVhY2giLCJyMiIsInIzIiwiY3IiLCJleHBlY3RlZCIsImNycyIsInEiLCJjb25zb2xlIiwiZXJyb3IiLCJmYWlsIiwicmVzcG9uc2UiLCJub3QiLCJ0b0JlRGVmaW5lZCIsInNlc3MiLCJub1Jlc3VsdCIsInRvQmVOdWxsIiwibW9ja1JldHVyblZhbHVlT25jZSIsImxvZyIsInJlc29sdmVzIiwiZmVlZGJhY2tFbmFibGVkIiwicHJvbXB0RW5hYmxlZCIsInJhdGlvbmFsZUVuYWJsZWQiLCJ0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZCIsInN0dWRlbnRJbnN0cnVjdGlvbnNFbmFibGVkIiwiZXF1YXRpb25fMDEiLCJlcXVhdGlvbl8wMiIsImVxdWF0aW9uXzAzIiwiZXhwcmVzc2lvbl8wMSIsImV4cHJlc3Npb25fMDIiLCJleHByZXNzaW9uXzAzIiwiZXhwcmVzc2lvbl8wNCIsImV4cHJlc3Npb25fMDUiLCJleHByZXNzaW9uXzA2IiwiZXhwcmVzc2lvbl8wNyIsImV4cHJlc3Npb25fMDgiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOzs7Ozs7OztBQUVBQSxJQUFJLENBQUNDLElBQUwsQ0FBVSxnQ0FBVixFQUE0QztBQUFBLFNBQU87QUFDakRDLElBQUFBLFVBQVUsRUFBRUYsSUFBSSxDQUFDRyxFQUFMLEdBQVVDLGVBQVYsQ0FBMEIsSUFBMUI7QUFEcUMsR0FBUDtBQUFBLENBQTVDO0FBSUEsSUFBTUMsWUFBWSxHQUFHO0FBQ25CQyxFQUFBQSxZQUFZLEVBQUUsZ0JBREs7QUFFbkJDLEVBQUFBLGNBQWMsRUFBRSxHQUZHO0FBR25CQyxFQUFBQSxVQUFVLEVBQUUsMENBSE87QUFJbkJDLEVBQUFBLE1BQU0sRUFDSix5aUJBTGlCO0FBTW5CQyxFQUFBQSxTQUFTLEVBQUUsQ0FDVDtBQUNFQyxJQUFBQSxFQUFFLEVBQUUsR0FETjtBQUVFQyxJQUFBQSxNQUFNLEVBQUUseUJBRlY7QUFHRUMsSUFBQUEsVUFBVSxFQUFFO0FBQ1YsU0FBRyx5QkFETztBQUVWLFNBQUcsOEJBRk87QUFHVixTQUFHO0FBSE8sS0FIZDtBQVFFQyxJQUFBQSxVQUFVLEVBQUU7QUFSZCxHQURTLENBTlE7QUFrQm5CQyxFQUFBQSxJQUFJLEVBQUUsa0pBbEJhO0FBbUJuQkMsRUFBQUEsVUFBVSxFQUFFLENBQUMsaUJBQUQsRUFBb0IsWUFBcEIsRUFBa0MsYUFBbEMsQ0FuQk87QUFvQm5CTCxFQUFBQSxFQUFFLEVBQUU7QUFwQmUsQ0FBckI7O0FBdUJBLElBQU1NLFVBQVUsR0FBRyxTQUFiQSxVQUFhLENBQUNDLEtBQUQ7QUFB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Rks7QUFHZFosY0FBQUEsY0FBYyxFQUFFO0FBSEYsYUFGSDtBQVFQakIsWUFBQUEsR0FSTyxHQVFEO0FBQUVHLGNBQUFBLElBQUksRUFBRTtBQUFSLGFBUkM7QUFBQTtBQUFBLG1CQVNRLG9CQUFRcUQsV0FBUixFQUFxQnpELE9BQXJCLEVBQThCQyxHQUE5QixDQVRSOztBQUFBO0FBU1BILFlBQUFBLE1BVE87QUFVYlEsWUFBQUEsTUFBTSxDQUFDUixNQUFELENBQU4sQ0FBZVUsT0FBZixDQUF1QjtBQUFFUyxjQUFBQSxLQUFLLEVBQUU7QUFBVCxhQUF2Qjs7QUFWYTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQUFiLEdBQUY7QUFZRCxDQXhYTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbGF0ZXhFcXVhbCB9IGZyb20gJ0BwaWUtZnJhbWV3b3JrL21hdGgtdmFsaWRhdGlvbic7XG5pbXBvcnQgeyBtb2RlbCwgb3V0Y29tZSwgY3JlYXRlQ29ycmVjdFJlc3BvbnNlU2Vzc2lvbiB9IGZyb20gJy4uL2luZGV4JztcblxuamVzdC5tb2NrKCdAcGllLWZyYW1ld29yay9tYXRoLXZhbGlkYXRpb24nLCAoKSA9PiAoe1xuICBsYXRleEVxdWFsOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHRydWUpLFxufSkpO1xuXG5jb25zdCBkZWZhdWx0TW9kZWwgPSB7XG4gIHJlc3BvbnNlVHlwZTogJ0FkdmFuY2VkIE11bHRpJyxcbiAgZXF1YXRpb25FZGl0b3I6ICczJyxcbiAgZXhwcmVzc2lvbjogJ3t7cmVzcG9uc2V9fSA9IHt7cmVzcG9uc2V9fSBcXFxcdGV4dHtlZ2dzfScsXG4gIHByb21wdDpcbiAgICAnPHA+U2FtIHNlbGxzIGJhc2tldHMgb2YgZWdncyBhdCBoaXMgZmFybSBzdGFuZC4gSGUgc29sZCAxMiBiYXNrZXRzIGFuZCB3cm90ZSB0aGUgbnVtYmVyIHNlbnRlbmNlIGJlbG93IHRvIHNob3cgaG93IG1hbnkgZWdncyBoZSBzb2xkIGluIGFsbC48L3A+PHA+PHNwYW4gY2xhc3M9XCJlcXVhdGlvbi1ibG9ja1wiPjxtYXRoIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiID5cXG4gPG1yb3c+XFxuICA8bW4+MTI8L21uPjxtbz4mI3gwMEQ3OzwvbW8+PG1vPiYjeDI1QTE7PC9tbz48bW8+PTwvbW8+PG1uPjcyPC9tbj5cXG4gPC9tcm93PlxcbjwvbWF0aD4gPC9zcGFuPjwvcD48cD5XaGF0IDxzcGFuIGNsYXNzPVwicmVsYXRpdmUtZW1waGFzaXNcIj5kaXZpc2lvbjwvc3Bhbj4gbnVtYmVyIHNlbnRlbmNlIGNhbiBiZSB1c2VkIHRvIHNob3cgaG93IG1hbnkgZWdncyB3ZXJlIGluIGVhY2ggYmFza2V0PzwvcD48cD5Vc2UgdGhlIG9uLXNjcmVlbiBrZXlib2FyZCB0byB0eXBlIHlvdXIgbnVtYmVyIHNlbnRlbmNlIGFuZCBhbnN3ZXIgaW4gdGhlIGJveC48L3A+JyxcbiAgcmVzcG9uc2VzOiBbXG4gICAge1xuICAgICAgaWQ6ICcxJyxcbiAgICAgIGFuc3dlcjogJzcyXFxcXGRpdjEyPTZcXFxcdGV4dHtlZ2dzfScsXG4gICAgICBhbHRlcm5hdGVzOiB7XG4gICAgICAgIDE6ICc2PTcyXFxcXGRpdjEyXFxcXHRleHR7ZWdnc30nLFxuICAgICAgICAyOiAnXFxcXGZyYWN7NzJ9ezEyfT02XFxcXHRleHR7ZWdnc30nLFxuICAgICAgICAzOiAnNj1cXFxcZnJhY3s3Mn17MTJ9XFxcXHRleHR7ZWdnc30nLFxuICAgICAgfSxcbiAgICAgIHZhbGlkYXRpb246ICdsaXRlcmFsJyxcbiAgICB9LFxuICBdLFxuICBub3RlOiAnVGhlIGFuc3dlciBzaG93biBhYm92ZSBpcyB0aGUgcHJpbWFyeSBjb3JyZWN0IGFuc3dlciBzcGVjaWZpZWQgYnkgdGhlIGF1dGhvciBmb3IgdGhpcyBpdGVtLCBidXQgb3RoZXIgYW5zd2VycyBtYXkgYWxzbyBiZSByZWNvZ25pemVkIGFzIGNvcnJlY3QuJyxcbiAgY3VzdG9tS2V5czogWydcXFxcbGVmdChcXFxccmlnaHQpJywgJ1xcXFxmcmFje317fScsICd4XFxcXGZyYWN7fXt9J10sXG4gIGlkOiAxLFxufTtcblxuY29uc3QgbWtRdWVzdGlvbiA9IChtb2RlbCkgPT4gbW9kZWwgfHwgZGVmYXVsdE1vZGVsO1xuXG5kZXNjcmliZSgnbW9kZWwnLCAoKSA9PiB7XG4gIGxldCByZXN1bHQsIHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYsIG91dGNvbWVSZXN1bHQ7XG5cbiAgZGVzY3JpYmUoJ2dhdGhlcicsICgpID0+IHtcbiAgICBiZWZvcmVFYWNoKGFzeW5jICgpID0+IHtcbiAgICAgIHF1ZXN0aW9uID0gbWtRdWVzdGlvbigpO1xuICAgICAgc2Vzc2lvbiA9IHt9O1xuICAgICAgZW52ID0geyBtb2RlOiAnZ2F0aGVyJyB9O1xuICAgICAgcmVzdWx0ID0gYXdhaXQgbW9kZWwocXVlc3Rpb24sIHNlc3Npb24sIGVudik7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyBkaXNhYmxlZDpmYWxzZScsICgpID0+IHtcbiAgICAgIGV4cGVjdChyZXN1bHQuZGlzYWJsZWQpLnRvRXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgdW5kZWZpbmVkIGZvciBjb3JyZWN0bmVzcyAnLCAoKSA9PiB7XG4gICAgICBleHBlY3QocmVzdWx0LmNvcnJlY3RuZXNzKS50b0VxdWFsKHVuZGVmaW5lZCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyB1bmRlZmluZWQgZm9yIGNvcnJlY3RSZXNwb25zZSAnLCAoKSA9PiB7XG4gICAgICBleHBlY3QocmVzdWx0LmNvcnJlY3RSZXNwb25zZSkudG9FcXVhbCh1bmRlZmluZWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgdW5kZWZpbmVkIGZvciBmZWVkYmFjaycsICgpID0+IHtcbiAgICAgIGV4cGVjdChyZXN1bHQuZmVlZGJhY2spLnRvRXF1YWwodW5kZWZpbmVkKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIGVtcHR5IGFycmF5IGZvciByZXNwb25zZXMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QocmVzdWx0LmNvbmZpZy5yZXNwb25zZXMpLnRvRXF1YWwoW10pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgbnVsbCBmb3IgcmF0aW9uYWxlJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHJlc3VsdC5jb25maWcucmF0aW9uYWxlKS50b0VxdWFsKG51bGwpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgbnVsbCBmb3IgdGVhY2hlciBpbnN0cnVjdGlvbnMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QocmVzdWx0LmNvbmZpZy50ZWFjaGVySW5zdHJ1Y3Rpb25zKS50b0VxdWFsKG51bGwpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndmlldycsICgpID0+IHtcbiAgICBiZWZvcmVFYWNoKGFzeW5jICgpID0+IHtcbiAgICAgIHF1ZXN0aW9uID0gbWtRdWVzdGlvbigpO1xuICAgICAgc2Vzc2lvbiA9IHt9O1xuICAgICAgZW52ID0geyBtb2RlOiAndmlldycgfTtcbiAgICAgIHJlc3VsdCA9IGF3YWl0IG1vZGVsKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgZGlzYWJsZWQ6dHJ1ZScsICgpID0+IHtcbiAgICAgIGV4cGVjdChyZXN1bHQuZGlzYWJsZWQpLnRvRXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyB1bmRlZmluZWQgZm9yIGNvcnJlY3RuZXNzICcsICgpID0+IHtcbiAgICAgIGV4cGVjdChyZXN1bHQuY29ycmVjdG5lc3MpLnRvRXF1YWwodW5kZWZpbmVkKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIHVuZGVmaW5lZCBmb3IgY29ycmVjdFJlc3BvbnNlICcsICgpID0+IHtcbiAgICAgIGV4cGVjdChyZXN1bHQuY29ycmVjdFJlc3BvbnNlKS50b0VxdWFsKHVuZGVmaW5lZCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyBkZWZhdWx0IGNvcnJlY3QgZm9yIGZlZWRiYWNrJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHJlc3VsdC5mZWVkYmFjaykudG9FcXVhbCh1bmRlZmluZWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgZW1wdHkgYXJyYXkgZm9yIHJlc3BvbnNlcycsICgpID0+IHtcbiAgICAgIGV4cGVjdChyZXN1bHQuY29uZmlnLnJlc3BvbnNlcykudG9FcXVhbChbXSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdldmFsdWF0ZSAtIGVtcHR5JywgKCkgPT4ge1xuICAgIGJlZm9yZUVhY2goYXN5bmMgKCkgPT4ge1xuICAgICAgcXVlc3Rpb24gPSBta1F1ZXN0aW9uKCk7XG4gICAgICBzZXNzaW9uID0ge307XG4gICAgICBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcbiAgICAgIHJlc3VsdCA9IGF3YWl0IG1vZGVsKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgZGlzYWJsZWQ6dHJ1ZScsICgpID0+IHtcbiAgICAgIGV4cGVjdChyZXN1bHQuZGlzYWJsZWQpLnRvRXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyBlbXB0eSBmb3IgY29ycmVjdG5lc3MgJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHJlc3VsdC5jb3JyZWN0bmVzcykudG9FcXVhbCh7XG4gICAgICAgIGNvcnJlY3Q6IGZhbHNlLFxuICAgICAgICBjb3JyZWN0bmVzczogJ3VuYW5zd2VyZWQnLFxuICAgICAgICBzY29yZTogJzAlJyxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZXZhbHVhdGUgLSBjb3JyZWN0JywgKCkgPT4ge1xuICAgIGJlZm9yZUVhY2goYXN5bmMgKCkgPT4ge1xuICAgICAgZW52ID0geyBtb2RlOiAnZXZhbHVhdGUnIH07XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyBjb3JyZWN0IGZvciBjb3JyZWN0bmVzcycsIGFzeW5jICgpID0+IHtcbiAgICAgIHF1ZXN0aW9uID0gbWtRdWVzdGlvbigpO1xuICAgICAgc2Vzc2lvbiA9IHsgY29tcGxldGVBbnN3ZXI6ICc3MlxcXFxkaXYxMj02XFxcXHRleHR7ZWdnc30nIH07XG4gICAgICBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcbiAgICAgIHJlc3VsdCA9IGF3YWl0IG1vZGVsKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpO1xuXG4gICAgICBleHBlY3QocmVzdWx0LmNvcnJlY3RuZXNzLmNvcnJlY3RuZXNzKS50b0VxdWFsKCdjb3JyZWN0Jyk7XG4gICAgICBleHBlY3QocmVzdWx0LmNvcnJlY3RuZXNzLnNjb3JlKS50b0VxdWFsKCcxMDAlJyk7XG5cbiAgICAgIHNlc3Npb24gPSB7IGNvbXBsZXRlQW5zd2VyOiAnNj03MlxcXFxkaXYxMlxcXFx0ZXh0e2VnZ3N9JyB9O1xuXG4gICAgICByZXN1bHQgPSBhd2FpdCBtb2RlbChxdWVzdGlvbiwgc2Vzc2lvbiwgZW52KTtcblxuICAgICAgZXhwZWN0KHJlc3VsdC5jb3JyZWN0bmVzcy5jb3JyZWN0bmVzcykudG9FcXVhbCgnY29ycmVjdCcpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5jb3JyZWN0bmVzcy5zY29yZSkudG9FcXVhbCgnMTAwJScpO1xuXG4gICAgICBzZXNzaW9uID0geyBjb21wbGV0ZUFuc3dlcjogJ1xcXFxmcmFjezcyfXsxMn09NlxcXFx0ZXh0e2VnZ3N9JyB9O1xuXG4gICAgICByZXN1bHQgPSBhd2FpdCBtb2RlbChxdWVzdGlvbiwgc2Vzc2lvbiwgZW52KTtcblxuICAgICAgZXhwZWN0KHJlc3VsdC5jb3JyZWN0bmVzcy5jb3JyZWN0bmVzcykudG9FcXVhbCgnY29ycmVjdCcpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5jb3JyZWN0bmVzcy5zY29yZSkudG9FcXVhbCgnMTAwJScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgY29ycmVjdCBmb3IgY29ycmVjdG5lc3Mgd2l0aCB0ZXh0IG5vZGVzIHRvbycsIGFzeW5jICgpID0+IHtcbiAgICAgIHF1ZXN0aW9uID0gbWtRdWVzdGlvbigpO1xuICAgICAgc2Vzc2lvbiA9IHsgY29tcGxldGVBbnN3ZXI6ICc3MlxcXFxkaXYxMj02XFxcXHRleHR7ZWdnc30nIH07XG4gICAgICBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcbiAgICAgIHJlc3VsdCA9IGF3YWl0IG1vZGVsKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpO1xuXG4gICAgICBleHBlY3QocmVzdWx0LmNvcnJlY3RuZXNzLmNvcnJlY3RuZXNzKS50b0VxdWFsKCdjb3JyZWN0Jyk7XG4gICAgICBleHBlY3QocmVzdWx0LmNvcnJlY3RuZXNzLnNjb3JlKS50b0VxdWFsKCcxMDAlJyk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyBjb3JyZWN0IGZvciBjb3JyZWN0bmVzcyB3aXRoIHRleHQgbm9kZXMgdG9vIGluIHN5bWJvbGljJywgYXN5bmMgKCkgPT4ge1xuICAgICAgcXVlc3Rpb24gPSBta1F1ZXN0aW9uKCk7XG4gICAgICBzZXNzaW9uID0geyBjb21wbGV0ZUFuc3dlcjogJzcyXFxcXGRpdjEyPTZcXFxcdGV4dHtlZ2dzfScgfTtcbiAgICAgIHF1ZXN0aW9uLnJlc3BvbnNlc1swXS52YWxpZGF0aW9uID0gJ3N5bWJvbGljJztcbiAgICAgIGVudiA9IHsgbW9kZTogJ2V2YWx1YXRlJyB9O1xuICAgICAgcmVzdWx0ID0gYXdhaXQgbW9kZWwocXVlc3Rpb24sIHNlc3Npb24sIGVudik7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQuY29ycmVjdG5lc3MuY29ycmVjdG5lc3MpLnRvRXF1YWwoJ2NvcnJlY3QnKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuY29ycmVjdG5lc3Muc2NvcmUpLnRvRXF1YWwoJzEwMCUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIGNvcnJlY3QgZm9yIGNvcnJlY3RuZXNzIGV2ZW4gd2l0aCBoeXBoZW4gdnMgbWludXMgc2lnbicsIGFzeW5jICgpID0+IHtcbiAgICAgIHF1ZXN0aW9uID0gbWtRdWVzdGlvbih7XG4gICAgICAgIC4uLmRlZmF1bHRNb2RlbCxcbiAgICAgICAgZXhwcmVzc2lvbjogJ3t7cmVzcG9uc2V9fScsXG4gICAgICAgIHJlc3BvbnNlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAnMScsXG4gICAgICAgICAgICBhbnN3ZXI6ICc4LTQnLFxuICAgICAgICAgICAgYWx0ZXJuYXRlczoge1xuICAgICAgICAgICAgICAxOiAnNOKIkjInLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZhbGlkYXRpb246ICdsaXRlcmFsJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG5cbiAgICAgIGVudiA9IHsgbW9kZTogJ2V2YWx1YXRlJyB9O1xuXG4gICAgICBzZXNzaW9uID0geyBjb21wbGV0ZUFuc3dlcjogJzQtMicgfTtcbiAgICAgIHJlc3VsdCA9IGF3YWl0IG1vZGVsKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpO1xuXG4gICAgICBleHBlY3QocmVzdWx0LmNvcnJlY3RuZXNzLmNvcnJlY3RuZXNzKS50b0VxdWFsKCdjb3JyZWN0Jyk7XG4gICAgICBleHBlY3QocmVzdWx0LmNvcnJlY3RuZXNzLnNjb3JlKS50b0VxdWFsKCcxMDAlJyk7XG5cbiAgICAgIHNlc3Npb24gPSB7IGNvbXBsZXRlQW5zd2VyOiAnNOKIkjInIH07XG5cbiAgICAgIHJlc3VsdCA9IGF3YWl0IG1vZGVsKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpO1xuXG4gICAgICBleHBlY3QocmVzdWx0LmNvcnJlY3RuZXNzLmNvcnJlY3RuZXNzKS50b0VxdWFsKCdjb3JyZWN0Jyk7XG4gICAgICBleHBlY3QocmVzdWx0LmNvcnJlY3RuZXNzLnNjb3JlKS50b0VxdWFsKCcxMDAlJyk7XG5cbiAgICAgIHNlc3Npb24gPSB7IGNvbXBsZXRlQW5zd2VyOiAnOC00JyB9O1xuICAgICAgcmVzdWx0ID0gYXdhaXQgbW9kZWwocXVlc3Rpb24sIHNlc3Npb24sIGVudik7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQuY29ycmVjdG5lc3MuY29ycmVjdG5lc3MpLnRvRXF1YWwoJ2NvcnJlY3QnKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuY29ycmVjdG5lc3Muc2NvcmUpLnRvRXF1YWwoJzEwMCUnKTtcblxuICAgICAgc2Vzc2lvbiA9IHsgY29tcGxldGVBbnN3ZXI6ICc44oiSNCcgfTtcblxuICAgICAgcmVzdWx0ID0gYXdhaXQgbW9kZWwocXVlc3Rpb24sIHNlc3Npb24sIGVudik7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQuY29ycmVjdG5lc3MuY29ycmVjdG5lc3MpLnRvRXF1YWwoJ2NvcnJlY3QnKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuY29ycmVjdG5lc3Muc2NvcmUpLnRvRXF1YWwoJzEwMCUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIGNvcnJlY3QgZm9yIGNvcnJlY3RuZXNzIGluIGNkb3QgdnMgdGltZXMgc2l0dWF0aW9ucycsIGFzeW5jICgpID0+IHtcbiAgICAgIHF1ZXN0aW9uID0gbWtRdWVzdGlvbih7XG4gICAgICAgIC4uLmRlZmF1bHRNb2RlbCxcbiAgICAgICAgZXhwcmVzc2lvbjogJ3t7cmVzcG9uc2V9fScsXG4gICAgICAgIHJlc3BvbnNlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAnMScsXG4gICAgICAgICAgICBhbnN3ZXI6ICc4XFxcXGNkb3Q0JyxcbiAgICAgICAgICAgIGFsdGVybmF0ZXM6IHtcbiAgICAgICAgICAgICAgMTogJzRcXFxcdGltZXMyJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2YWxpZGF0aW9uOiAnbGl0ZXJhbCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuXG4gICAgICBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcblxuICAgICAgc2Vzc2lvbiA9IHsgY29tcGxldGVBbnN3ZXI6ICc4XFxcXHRpbWVzNCcgfTtcbiAgICAgIHJlc3VsdCA9IGF3YWl0IG1vZGVsKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpO1xuXG4gICAgICBleHBlY3QocmVzdWx0LmNvcnJlY3RuZXNzLmNvcnJlY3RuZXNzKS50b0VxdWFsKCdjb3JyZWN0Jyk7XG4gICAgICBleHBlY3QocmVzdWx0LmNvcnJlY3RuZXNzLnNjb3JlKS50b0VxdWFsKCcxMDAlJyk7XG5cbiAgICAgIHNlc3Npb24gPSB7IGNvbXBsZXRlQW5zd2VyOiAnNFxcXFxjZG90MicgfTtcblxuICAgICAgcmVzdWx0ID0gYXdhaXQgbW9kZWwocXVlc3Rpb24sIHNlc3Npb24sIGVudik7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQuY29ycmVjdG5lc3MuY29ycmVjdG5lc3MpLnRvRXF1YWwoJ2NvcnJlY3QnKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuY29ycmVjdG5lc3Muc2NvcmUpLnRvRXF1YWwoJzEwMCUnKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdhbGwgcmVzcG9uc2VzIGFyZSBjaGVja2VkJywgKCkgPT4ge1xuICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIHF1ZXN0aW9uID0gbWtRdWVzdGlvbih7XG4gICAgICAgICAgLi4uZGVmYXVsdE1vZGVsLFxuICAgICAgICAgIHJlc3BvbnNlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhbnN3ZXI6ICcwLjUrMy41JyxcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbjogJ3N5bWJvbGljJyxcbiAgICAgICAgICAgICAgYWx0ZXJuYXRlczogWycyJ10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBhbnN3ZXI6ICdmb28nLCB2YWxpZGF0aW9uOiAnbGl0ZXJhbCcsIGlkOiAnMScgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnNCBpcyBjb3JyZWN0IC0gc3ltYm9saWMgbWF0Y2ggYW5zd2VyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICByZXN1bHQgPSBhd2FpdCBtb2RlbChxdWVzdGlvbiwgeyBjb21wbGV0ZUFuc3dlcjogJzQnIH0sIGVudik7XG4gICAgICAgIGV4cGVjdChyZXN1bHQuY29ycmVjdG5lc3MuY29ycmVjdG5lc3MpLnRvRXF1YWwoJ2NvcnJlY3QnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnMiBpcyBjb3JyZWN0IC0gc3ltYm9saWMgbWF0Y2ggcmVzcG9uc2VzWzBdLmFsdGVybmF0ZXNbMF0nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IG1vZGVsKHF1ZXN0aW9uLCB7IGNvbXBsZXRlQW5zd2VyOiAnMicgfSwgZW52KTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5jb3JyZWN0bmVzcy5jb3JyZWN0bmVzcykudG9FcXVhbCgnY29ycmVjdCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdmb28gaXMgY29ycmVjdCAtIGxpdGVyYWwgbWF0Y2ggcmVzcG9uc2VbMV0nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IG1vZGVsKHF1ZXN0aW9uLCB7IGNvbXBsZXRlQW5zd2VyOiAnZm9vJyB9LCBlbnYpO1xuICAgICAgICBleHBlY3QocmVzdWx0LmNvcnJlY3RuZXNzLmNvcnJlY3RuZXNzKS50b0VxdWFsKCdjb3JyZWN0Jyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCd3b3JrcyBmb3IgaW5jb3JyZWN0IGxhdGV4IGZyYWMgY29tbWFuZCB0b28nLCBhc3luYyAoKSA9PiB7XG4gICAgICBxdWVzdGlvbiA9IG1rUXVlc3Rpb24oe1xuICAgICAgICAuLi5kZWZhdWx0TW9kZWwsXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ0FkdmFuY2VkIE11bHRpJyxcbiAgICAgICAgZXhwcmVzc2lvbjogJ3t7cmVzcG9uc2V9fScsXG4gICAgICAgIHJlc3BvbnNlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsdGVybmF0ZXM6IHt9LFxuICAgICAgICAgICAgYW5zd2VyOiAnMVxcXFxmcmFjMTQnLFxuICAgICAgICAgICAgdmFsaWRhdGlvbjogJ3N5bWJvbGljJyxcbiAgICAgICAgICAgIGlkOiAnMScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuICAgICAgc2Vzc2lvbiA9IHtcbiAgICAgICAgY29tcGxldGVBbnN3ZXI6ICcxXFxcXGZyYWN7MX17NH0nLFxuICAgICAgfTtcblxuICAgICAgZW52ID0geyBtb2RlOiAnZXZhbHVhdGUnIH07XG4gICAgICByZXN1bHQgPSBhd2FpdCBtb2RlbChxdWVzdGlvbiwgc2Vzc2lvbiwgZW52KTtcblxuICAgICAgZXhwZWN0KHJlc3VsdC5jb3JyZWN0bmVzcy5jb3JyZWN0bmVzcykudG9FcXVhbCgnY29ycmVjdCcpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5jb3JyZWN0bmVzcy5zY29yZSkudG9FcXVhbCgnMTAwJScpO1xuXG4gICAgICBzZXNzaW9uID0ge1xuICAgICAgICBjb21wbGV0ZUFuc3dlcjogJzFcXFxcZnJhYzF7NH0nLFxuICAgICAgfTtcblxuICAgICAgcmVzdWx0ID0gYXdhaXQgbW9kZWwocXVlc3Rpb24sIHNlc3Npb24sIGVudik7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQuY29ycmVjdG5lc3MuY29ycmVjdG5lc3MpLnRvRXF1YWwoJ2NvcnJlY3QnKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuY29ycmVjdG5lc3Muc2NvcmUpLnRvRXF1YWwoJzEwMCUnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3dvcmtzIGZvciBsaXRlcmFsIHZhbGlkYXRpb24gZm9yIGluY29tcGxldGUgbGF0ZXggY29tbWFuZCB0b28nLCBhc3luYyAoKSA9PiB7XG4gICAgcXVlc3Rpb24gPSBta1F1ZXN0aW9uKHtcbiAgICAgIC4uLmRlZmF1bHRNb2RlbCxcbiAgICAgIHJlc3BvbnNlVHlwZTogJ0FkdmFuY2VkIE11bHRpJyxcbiAgICAgIGV4cHJlc3Npb246ICd7e3Jlc3BvbnNlfX0nLFxuICAgICAgcmVzcG9uc2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhbHRlcm5hdGVzOiB7IDE6ICdwXFxcXGxlZnQoeFxcXFxyaWdodCknIH0sXG4gICAgICAgICAgYW5zd2VyOiAnMVxcXFxmcmFjMTQnLFxuICAgICAgICAgIHZhbGlkYXRpb246ICdsaXRlcmFsJyxcbiAgICAgICAgICBpZDogJzEnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgICBzZXNzaW9uID0ge1xuICAgICAgY29tcGxldGVBbnN3ZXI6ICcxXFxcXGZyYWN7MX17NH0nLFxuICAgIH07XG5cbiAgICBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcbiAgICByZXN1bHQgPSBhd2FpdCBtb2RlbChxdWVzdGlvbiwgc2Vzc2lvbiwgZW52KTtcblxuICAgIGV4cGVjdChyZXN1bHQuY29ycmVjdG5lc3MuY29ycmVjdG5lc3MpLnRvRXF1YWwoJ2NvcnJlY3QnKTtcbiAgICBleHBlY3QocmVzdWx0LmNvcnJlY3RuZXNzLnNjb3JlKS50b0VxdWFsKCcxMDAlJyk7XG5cbiAgICBzZXNzaW9uID0ge1xuICAgICAgY29tcGxldGVBbnN3ZXI6ICcxXFxcXGZyYWMxezR9JyxcbiAgICB9O1xuXG4gICAgcmVzdWx0ID0gYXdhaXQgbW9kZWwocXVlc3Rpb24sIHNlc3Npb24sIGVudik7XG5cbiAgICBleHBlY3QocmVzdWx0LmNvcnJlY3RuZXNzLmNvcnJlY3RuZXNzKS50b0VxdWFsKCdjb3JyZWN0Jyk7XG4gICAgZXhwZWN0KHJlc3VsdC5jb3JyZWN0bmVzcy5zY29yZSkudG9FcXVhbCgnMTAwJScpO1xuXG4gICAgc2Vzc2lvbiA9IHtcbiAgICAgIGNvbXBsZXRlQW5zd2VyOiAncCh4KScsXG4gICAgfTtcblxuICAgIGVudiA9IHsgbW9kZTogJ2V2YWx1YXRlJyB9O1xuICAgIHJlc3VsdCA9IGF3YWl0IG1vZGVsKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpO1xuXG4gICAgZXhwZWN0KHJlc3VsdC5jb3JyZWN0bmVzcy5jb3JyZWN0bmVzcykudG9FcXVhbCgnY29ycmVjdCcpO1xuICAgIGV4cGVjdChyZXN1bHQuY29ycmVjdG5lc3Muc2NvcmUpLnRvRXF1YWwoJzEwMCUnKTtcblxuICAgIHNlc3Npb24gPSB7XG4gICAgICBjb21wbGV0ZUFuc3dlcjogJ3BcXFxcbGVmdCh4XFxcXHJpZ2h0KScsXG4gICAgfTtcblxuICAgIGVudiA9IHsgbW9kZTogJ2V2YWx1YXRlJyB9O1xuICAgIHJlc3VsdCA9IGF3YWl0IG1vZGVsKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpO1xuXG4gICAgZXhwZWN0KHJlc3VsdC5jb3JyZWN0bmVzcy5jb3JyZWN0bmVzcykudG9FcXVhbCgnY29ycmVjdCcpO1xuICAgIGV4cGVjdChyZXN1bHQuY29ycmVjdG5lc3Muc2NvcmUpLnRvRXF1YWwoJzEwMCUnKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2V2YWx1YXRlIC0gaW5jb3JyZWN0JywgKCkgPT4ge1xuICAgIGJlZm9yZUVhY2goYXN5bmMgKCkgPT4ge1xuICAgICAgZW52ID0geyBtb2RlOiAnZXZhbHVhdGUnIH07XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdvdXRjb21lJywgKCkgPT4ge1xuICBsZXQgcmVzdWx0O1xuICBjb25zdCBxdWVzdGlvbiA9IG1rUXVlc3Rpb24oKTtcbiAgY29uc3QgZW52ID0geyBtb2RlOiAnZXZhbHVhdGUnIH07XG5cbiAgaXQoJ3JldHVybnMgY29ycmVjdCBmb3IgY29ycmVjdG5lc3MgaW4gb3V0Y29tZScsIGFzeW5jICgpID0+IHtcbiAgICBsZXQgc2Vzc2lvbiA9IHsgY29tcGxldGVBbnN3ZXI6ICc3MlxcXFxkaXYxMj02XFxcXHRleHR7ZWdnc30nIH07XG4gICAgbGV0IG91dGNvbWVSZXN1bHQgPSBhd2FpdCBvdXRjb21lKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpO1xuXG4gICAgZXhwZWN0KG91dGNvbWVSZXN1bHQuc2NvcmUpLnRvRXF1YWwoMSk7XG5cbiAgICBzZXNzaW9uID0geyBjb21wbGV0ZUFuc3dlcjogJ1xcXFxmcmFjezcyfXsxMn09NlxcXFx0ZXh0e2VnZ3N9JyB9O1xuXG4gICAgb3V0Y29tZVJlc3VsdCA9IGF3YWl0IG91dGNvbWUocXVlc3Rpb24sIHNlc3Npb24sIGVudik7XG5cbiAgICBleHBlY3Qob3V0Y29tZVJlc3VsdC5zY29yZSkudG9FcXVhbCgxKTtcbiAgfSk7XG5cbiAgY29uc3QgcmV0dXJuT3V0Y29tZSA9IChzZXNzaW9uKSA9PiB7XG4gICAgaXQoYHJldHVybnMgc2NvcmU6IDAgYW5kIGVtcHR5OiB0cnVlIGlmIHNlc3Npb24gaXMgJHtKU09OLnN0cmluZ2lmeShzZXNzaW9uKX1gLCBhc3luYyAoKSA9PiB7XG4gICAgICBsZXQgb3V0Y29tZVJlc3VsdCA9IGF3YWl0IG91dGNvbWUocXVlc3Rpb24sIHNlc3Npb24sIGVudik7XG5cbiAgICAgIGV4cGVjdChvdXRjb21lUmVzdWx0KS50b0VxdWFsKHsgc2NvcmU6IDAsIGVtcHR5OiB0cnVlIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybk91dGNvbWUodW5kZWZpbmVkKTtcbiAgcmV0dXJuT3V0Y29tZShudWxsKTtcbiAgcmV0dXJuT3V0Y29tZSh7fSk7XG59KTtcblxuZGVzY3JpYmUoJ2NyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24nLCAoKSA9PiB7XG4gIGNvbnN0IGFuc3dlciA9ICc3MlxcXFxkaXYxMj02JztcbiAgY29uc3QgcXVlc3Rpb24gPSB7XG4gICAgaWQ6ICcxJyxcbiAgICByZXNwb25zZVR5cGU6ICdBZHZhbmNlZCBNdWx0aScsXG4gICAgZXhwcmVzc2lvbjogJ3t7cmVzcG9uc2V9fSA9IHt7cmVzcG9uc2V9fScsXG4gICAgcHJvbXB0OlxuICAgICAgJzxwPlNhbSBzZWxscyBiYXNrZXRzIG9mIGVnZ3MgYXQgaGlzIGZhcm0gc3RhbmQuIEhlIHNvbGQgMTIgYmFza2V0cyBhbmQgd3JvdGUgdGhlIG51bWJlciBzZW50ZW5jZSBiZWxvdyB0byBzaG93IGhvdyBtYW55IGVnZ3MgaGUgc29sZCBpbiBhbGwuPC9wPjxwPjxzcGFuIGNsYXNzPVwiZXF1YXRpb24tYmxvY2tcIj48bWF0aCB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUxcIiA+XFxuIDxtcm93PlxcbiAgPG1uPjEyPC9tbj48bW8+JiN4MDBENzs8L21vPjxtbz4mI3gyNUExOzwvbW8+PG1vPj08L21vPjxtbj43MjwvbW4+XFxuIDwvbXJvdz5cXG48L21hdGg+IDwvc3Bhbj48L3A+PHA+V2hhdCA8c3BhbiBjbGFzcz1cInJlbGF0aXZlLWVtcGhhc2lzXCI+ZGl2aXNpb248L3NwYW4+IG51bWJlciBzZW50ZW5jZSBjYW4gYmUgdXNlZCB0byBzaG93IGhvdyBtYW55IGVnZ3Mgd2VyZSBpbiBlYWNoIGJhc2tldD88L3A+PHA+VXNlIHRoZSBvbi1zY3JlZW4ga2V5Ym9hcmQgdG8gdHlwZSB5b3VyIG51bWJlciBzZW50ZW5jZSBhbmQgYW5zd2VyIGluIHRoZSBib3guPC9wPicsXG4gICAgcmVzcG9uc2VzOiBbXG4gICAgICB7XG4gICAgICAgIGlkOiAnMScsXG4gICAgICAgIGFuc3dlcixcbiAgICAgICAgYWx0ZXJuYXRlczoge1xuICAgICAgICAgIDE6ICc2PTcyXFxcXGRpdjEyXScsXG4gICAgICAgICAgMjogJ1xcXFxmcmFjezcyfXsxMn09NicsXG4gICAgICAgICAgMzogJzY9XFxcXGZyYWN7NzJ9ezEyfScsXG4gICAgICAgIH0sXG4gICAgICAgIHZhbGlkYXRpb246ICdsaXRlcmFsJyxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjdXN0b21LZXlzOiBbJ1xcXFxsZWZ0KFxcXFxyaWdodCknLCAnXFxcXGZyYWN7fXt9JywgJ3hcXFxcZnJhY3t9e30nXSxcbiAgfTtcblxuICBkZXNjcmliZSgnNzE2NScsICgpID0+IHtcbiAgICBpdCgncmV0dXJucyB3aG9sZSBhbnN3ZXInLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBxdWVzdGlvbiA9IHtcbiAgICAgICAgZWxlbWVudDogJ21hdGgtaW5saW5lJyxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAnQWR2YW5jZWQgTXVsdGknLFxuICAgICAgICBleHByZXNzaW9uOiAne3tyZXNwb25zZX19JyxcbiAgICAgICAgcmVzcG9uc2VzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWx0ZXJuYXRlczoge30sXG4gICAgICAgICAgICBhbnN3ZXI6ICcyXFxcXHRpbWVzNycsXG4gICAgICAgICAgICB2YWxpZGF0aW9uOiAnbGl0ZXJhbCcsXG4gICAgICAgICAgICBpZDogJzEnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGlkOiAnMScsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBjYSA9IHF1ZXN0aW9uLnJlc3BvbnNlc1swXS5hbnN3ZXI7XG4gICAgICBjb25zdCBjcyA9IGF3YWl0IGNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24ocXVlc3Rpb24sIHtcbiAgICAgICAgbW9kZTogJ2dhdGhlcicsXG4gICAgICAgIHJvbGU6ICdpbnN0cnVjdG9yJyxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KGNzKS50b01hdGNoT2JqZWN0KHtcbiAgICAgICAgaWQ6ICcxJyxcbiAgICAgICAgY29tcGxldGVBbnN3ZXI6IGNhLFxuICAgICAgICBhbnN3ZXJzOiB7IHIxOiB7IHZhbHVlOiBjYSB9IH0sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1BELTE3MycsICgpID0+IHtcbiAgICBpdCgncmV0dXJucyBlbXB0eSBhbnN3ZXIgaWYgbW9kZWwgaXMgaW5jb3JyZWN0bHkgZGVmaW5lZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHF1ZXN0aW9uID0ge1xuICAgICAgICBlbGVtZW50OiAnbWF0aC1pbmxpbmUnLFxuICAgICAgICByZXNwb25zZVR5cGU6ICdBZHZhbmNlZCBNdWx0aScsXG4gICAgICAgIGV4cHJlc3Npb246ICd4PXt7cmVzcG9uc2V9fVxcXFwgXFxcXHRleHR7cmFkaWFuc30nLFxuICAgICAgICByZXNwb25zZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhbHRlcm5hdGVzOiB7fSxcbiAgICAgICAgICAgIGFuc3dlcjogJ3g9XFxcXGZyYWN7MjAsMDAwfXtyXjJ9XFxcXHRleHR7cmFkaWFuc30nLFxuICAgICAgICAgICAgdmFsaWRhdGlvbjogJ3N5bWJvbGljJyxcbiAgICAgICAgICAgIGlkOiAnMScsXG4gICAgICAgICAgICBhbGxvd1NwYWNlczogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBpZDogJzEnLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgY2EgPSBxdWVzdGlvbi5yZXNwb25zZXNbMF0uYW5zd2VyO1xuICAgICAgY29uc3QgY3MgPSBhd2FpdCBjcmVhdGVDb3JyZWN0UmVzcG9uc2VTZXNzaW9uKHF1ZXN0aW9uLCB7XG4gICAgICAgIG1vZGU6ICdnYXRoZXInLFxuICAgICAgICByb2xlOiAnaW5zdHJ1Y3RvcicsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGNzKS50b01hdGNoT2JqZWN0KHtcbiAgICAgICAgaWQ6ICcxJyxcbiAgICAgICAgY29tcGxldGVBbnN3ZXI6IGNhLFxuICAgICAgICBhbnN3ZXJzOiB7fSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBjb25zdCB2YWwgPSAodmFsdWUpID0+ICh7IHZhbHVlIH0pO1xuICBkZXNjcmliZS5lYWNoYFxuICAgIGV4cHJlc3Npb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZXhwZWN0ZWRcbiAgICAkeyd7eyAgcmVzcG9uc2V9fSd9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICR7JzEnfSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICR7eyByMTogdmFsKCcxJykgfX1cbiAgICAkeyd7e3Jlc3BvbnNlfX0gPSB7e3Jlc3BvbnNlfX0nfSAgICAgICAgICAgICAgICB8ICR7JzEgPSAxJ30gICAgICAgICAgICAgICAgICAgICAgICB8ICR7eyByMTogdmFsKCcxJyksIHIyOiB2YWwoJzEnKSB9fVxuICAgICR7J3t7cmVzcG9uc2V9fSArIHt7cmVzcG9uc2V9fSA9IHt7cmVzcG9uc2V9fSd9IHwgJHsnMSArIDIgPSAzJ30gICAgICAgICAgICAgICAgICAgIHwgJHt7IHIxOiB2YWwoJzEnKSwgcjI6IHZhbCgnMicpLCByMzogdmFsKCczJykgfX1cbiAgICAkeyd7e3Jlc3BvbnNlfX0gPSB7e3Jlc3BvbnNlfX0nfSAgICAgICAgICAgICAgICB8ICR7J1xcXFxmcmFjezJ9ezN9ICsgMiA9IFxcXFxzcXJ0ezl9J30gfCAke3sgcjE6IHZhbCgnXFxcXGZyYWN7Mn17M30gKyAyJyksIHIyOiB2YWwoJ1xcXFxzcXJ0ezl9JykgfX1cbiAgICAkeyd7e3Jlc3BvbnNlfX0gPSB7e3Jlc3BvbnNlfX0nfSAgICAgICAgICAgICAgICB8ICR7JzcyXFxcXGRpdjEyPTYnfSAgICAgICAgICAgICAgICAgIHwgJHt7IHIxOiB2YWwoJzcyXFxcXGRpdjEyJyksIHIyOiB2YWwoJzYnKSB9fVxuICAgICR7J3t7cmVzcG9uc2V9fSA9IHt7cmVzcG9uc2V9fSd9ICAgICAgICAgICAgICAgIHwgJHsnNzJcXFxcZGl2MTIgID0gIDYnfSAgICAgICAgICAgICAgfCAke3sgcjE6IHZhbCgnNzJcXFxcZGl2MTInKSwgcjI6IHZhbCgnNicpIH19XG4gICAgJHsne3tyZXNwb25zZX19ID0ge3tyZXNwb25zZX19IC8ge3tyZXNwb25zZX19J30gfCAkeyc3MlxcXFxkaXYxMiAgPSAgNi8yJ30gICAgICAgICAgICB8ICR7eyByMTogdmFsKCc3MlxcXFxkaXYxMicpLCByMjogdmFsKCc2JyksIHIzOiB2YWwoJzInKSB9fVxuICBgKCckZXhwcmVzc2lvbiArICRjcicsICh7IGV4cHJlc3Npb24sIGNyLCBleHBlY3RlZCB9KSA9PiB7XG4gICAgbGV0IGNycztcbiAgICBsZXQgZW52O1xuICAgIGxldCBxO1xuICAgIGJlZm9yZUVhY2goYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZW52ID0geyBtb2RlOiAnZ2F0aGVyJywgcm9sZTogJ2luc3RydWN0b3InIH07XG4gICAgICAgIHEgPSB7XG4gICAgICAgICAgZXhwcmVzc2lvbixcbiAgICAgICAgICByZXNwb25zZXM6IFt7IGFuc3dlcjogY3IgfV0sXG4gICAgICAgIH07XG4gICAgICAgIGNycyA9IGF3YWl0IGNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24ocSwgZW52KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgZmFpbChlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KGAke0pTT04uc3RyaW5naWZ5KGV4cGVjdGVkKX0gY29ycmVjdCBhbnN3ZXJzYCwgKCkgPT4ge1xuICAgICAgZXhwZWN0KGNycy5hbnN3ZXJzKS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcbiAgICBpdChgJHtKU09OLnN0cmluZ2lmeShleHBlY3RlZCl9IC0gbm8gJ3Jlc3BvbnNlJyBwcm9wYCwgKCkgPT4ge1xuICAgICAgZXhwZWN0KGNycy5yZXNwb25zZSkubm90LnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0LmVhY2hgXG4gICAgbW9kZSAgICAgICAgfCByb2xlXG4gICAgJHsnZ2F0aGVyJ30gfCAkeydpbnN0cnVjdG9yJ31cbiAgICAkeyd2aWV3J30gICB8ICR7J2luc3RydWN0b3InfVxuICBgKCdyZXR1cm5zIGNvcnJlY3RSZXNwb25zZSBmb3IgJG1vZGUgKyAkcm9sZScsIGFzeW5jICh7IG1vZGUsIHJvbGUgfSkgPT4ge1xuICAgIGNvbnN0IHNlc3MgPSBhd2FpdCBjcmVhdGVDb3JyZWN0UmVzcG9uc2VTZXNzaW9uKHF1ZXN0aW9uLCB7IG1vZGUsIHJvbGUgfSk7XG5cbiAgICBleHBlY3Qoc2VzcykudG9NYXRjaE9iamVjdCh7XG4gICAgICBhbnN3ZXJzOiB7XG4gICAgICAgIHIxOiB2YWwoJzcyXFxcXGRpdjEyJyksXG4gICAgICAgIHIyOiB2YWwoJzYnKSxcbiAgICAgIH0sXG4gICAgICBjb21wbGV0ZUFuc3dlcjogYW5zd2VyLFxuICAgICAgaWQ6ICcxJyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3JldHVybnMgY29ycmVjdCByZXNwb25zZSBpZiByb2xlIGlzIGluc3RydWN0b3IgYW5kIG1vZGUgaXMgdmlldyBhbmQgcmVzcG9uc2VUeXBlIGlzIFNpbXBsZScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzZXNzID0gYXdhaXQgY3JlYXRlQ29ycmVjdFJlc3BvbnNlU2Vzc2lvbihcbiAgICAgIHtcbiAgICAgICAgLi4ucXVlc3Rpb24sXG4gICAgICAgIGV4cHJlc3Npb246ICd7e3Jlc3BvbnNlfX0nLFxuICAgICAgICByZXNwb25zZXM6IFt7IGFuc3dlcjogJ1xcXFxmcmFjezN9ezR9JywgdmFsaWRhdGlvbjogJ3N5bWJvbGljJywgaWQ6ICcxJyB9XSxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAnU2ltcGxlJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG1vZGU6ICd2aWV3JyxcbiAgICAgICAgcm9sZTogJ2luc3RydWN0b3InLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgZXhwZWN0KHNlc3MpLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgcmVzcG9uc2U6ICdcXFxcZnJhY3szfXs0fScsXG4gICAgICBjb21wbGV0ZUFuc3dlcjogJ1xcXFxmcmFjezN9ezR9JyxcbiAgICAgIGlkOiAnMScsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdyZXR1cm5zIG51bGwgaWYgbW9kZSBpcyBldmFsdWF0ZScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBub1Jlc3VsdCA9IGF3YWl0IGNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24ocXVlc3Rpb24sIHtcbiAgICAgIG1vZGU6ICdldmFsdWF0ZScsXG4gICAgICByb2xlOiAnaW5zdHJ1Y3RvcicsXG4gICAgfSk7XG5cbiAgICBleHBlY3Qobm9SZXN1bHQpLnRvQmVOdWxsKCk7XG4gIH0pO1xuXG4gIGl0KCdyZXR1cm5zIG51bGwgaWYgcm9sZSBpcyBzdHVkZW50JywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG5vUmVzdWx0ID0gYXdhaXQgY3JlYXRlQ29ycmVjdFJlc3BvbnNlU2Vzc2lvbihxdWVzdGlvbiwge1xuICAgICAgbW9kZTogJ2dhdGhlcicsXG4gICAgICByb2xlOiAnc3R1ZGVudCcsXG4gICAgfSk7XG5cbiAgICBleHBlY3Qobm9SZXN1bHQpLnRvQmVOdWxsKCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdQSUUtMTg4JywgKCkgPT4ge1xuICAgIGl0KCd3b3JrcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGxhdGV4RXF1YWwubW9ja1JldHVyblZhbHVlT25jZShmYWxzZSk7XG4gICAgICBjb25zdCBxdWVzdGlvbiA9IHtcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAnQWR2YW5jZWQgTXVsdGknLFxuICAgICAgICBleHByZXNzaW9uOiAne3tyZXNwb25zZX19JyxcbiAgICAgICAgZXF1YXRpb25FZGl0b3I6ICdtaXNjZWxsYW5lb3VzJyxcbiAgICAgICAgcmVzcG9uc2VzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWx0ZXJuYXRlczoge30sXG4gICAgICAgICAgICBhbnN3ZXI6ICcxNTMwJyxcbiAgICAgICAgICAgIHZhbGlkYXRpb246ICdzeW1ib2xpYycsXG4gICAgICAgICAgICBpZDogJzEnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGlkOiAnMScsXG4gICAgICAgIGVsZW1lbnQ6ICdtYXRoLWlubGluZScsXG4gICAgICAgIGN1c3RvbUtleXM6IFsnPCcsICdcXFxcbGUnLCAnXFxcXGdlJywgJz4nLCAnXFxcXGZyYWN7fXt9JywgJ3hee30nLCAnXFxcXGxlZnQoXFxcXHJpZ2h0KSddLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHNlc3Npb24gPSB7XG4gICAgICAgIGlkOiAnMScsXG4gICAgICAgIGFuc3dlcnM6IHtcbiAgICAgICAgICByMToge1xuICAgICAgICAgICAgdmFsdWU6ICdcXFxcb2RvdCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgY29tcGxldGVBbnN3ZXI6ICdcXFxcb2RvdCcsXG4gICAgICB9O1xuICAgICAgY29uc3QgZW52ID0geyBtb2RlOiAnZXZhbHVhdGUnIH07XG4gICAgICBsYXRleEVxdWFsLm1vY2tSZXR1cm5WYWx1ZU9uY2UoZmFsc2UpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgbW9kZWwocXVlc3Rpb24sIHNlc3Npb24sIGVudik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJz4+Jyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICBmYWlsKGUpO1xuICAgICAgfVxuICAgICAgYXdhaXQgZXhwZWN0KG1vZGVsKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpKS5yZXNvbHZlcy50b01hdGNoT2JqZWN0KHtcbiAgICAgICAgY29ycmVjdG5lc3M6IHsgY29ycmVjdDogZmFsc2UgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnNjQ1NiAtIG91dGNvbWUnLCAoKSA9PiB7XG4gIGNvbnN0IHF1ZXN0aW9uID0ge1xuICAgIGVxdWF0aW9uRWRpdG9yOiA4LFxuICAgIHJlc3BvbnNlVHlwZTogJ0FkdmFuY2VkIE11bHRpJyxcbiAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiAnJyxcbiAgICBleHByZXNzaW9uOiAne3tyZXNwb25zZX19JyxcbiAgICByZXNwb25zZXM6IFtcbiAgICAgIHtcbiAgICAgICAgYW5zd2VyOiAnLTEyLjUnLFxuICAgICAgICBpZDogJzEnLFxuICAgICAgICBhbHRlcm5hdGVzOiB7IDE6ICctMTIuNVxcXFwlJyB9LFxuICAgICAgICB2YWxpZGF0aW9uOiAnc3ltYm9saWMnLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGlkOiAnMScsXG4gICAgcHJvbXB0OiAncHJvbXB0JyxcbiAgICByYXRpb25hbGU6ICdyYXRpb25hbGUnLFxuICAgIGVsZW1lbnQ6ICdtYXRoLWlubGluZScsXG4gIH07XG5cbiAgaXQoJ3Njb3JlcyAwJywgYXN5bmMgKCkgPT4ge1xuICAgIGxhdGV4RXF1YWwubW9ja1JldHVyblZhbHVlT25jZShmYWxzZSk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHtcbiAgICAgIGlkOiAnMScsXG4gICAgICBhbnN3ZXJzOiB7IHIxOiB7IHZhbHVlOiAnLTEyXFxcXCUnIH0gfSxcbiAgICAgIGNvbXBsZXRlQW5zd2VyOiAnLTEyXFxcXCUnLFxuICAgIH07XG4gICAgbGF0ZXhFcXVhbC5tb2NrUmV0dXJuVmFsdWVPbmNlKGZhbHNlKTtcbiAgICBjb25zdCBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpO1xuICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoeyBzY29yZTogMCB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Njb3JlcyAxJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSB7XG4gICAgICBpZDogJzEnLFxuICAgICAgYW5zd2VyczogeyByMTogeyB2YWx1ZTogJy0xMi41XFxcXCUnIH0gfSxcbiAgICAgIGNvbXBsZXRlQW5zd2VyOiAnLTEyLjVcXFxcJScsXG4gICAgfTtcblxuICAgIGNvbnN0IGVudiA9IHsgbW9kZTogJ2V2YWx1YXRlJyB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUocXVlc3Rpb24sIHNlc3Npb24sIGVudik7XG4gICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IHNjb3JlOiAxIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnNjM3MScsICgpID0+IHtcbiAgY29uc3QgcXVlc3Rpb24gPSB7XG4gICAgZXF1YXRpb25FZGl0b3I6IDgsXG4gICAgcmVzcG9uc2VUeXBlOiAnQWR2YW5jZWQgTXVsdGknLFxuICAgIHRlYWNoZXJJbnN0cnVjdGlvbnM6ICcnLFxuICAgIGV4cHJlc3Npb246ICd7e3Jlc3BvbnNlfX1cXFxcIFxcXFx0ZXh0e2RvbGxhcnN9JyxcbiAgICByZXNwb25zZXM6IFtcbiAgICAgIHtcbiAgICAgICAgYW5zd2VyOiAnNFxcXFx0aW1lczEwXjNcXFxcIFxcXFx0ZXh0e2RvbGxhcnN9JyxcbiAgICAgICAgaWQ6ICcxJyxcbiAgICAgICAgYWx0ZXJuYXRlczoge30sXG4gICAgICAgIHZhbGlkYXRpb246ICdzeW1ib2xpYycsXG4gICAgICB9LFxuICAgIF0sXG4gICAgaWQ6ICcxJyxcbiAgICBwcm9tcHQ6ICdwcm9tcHQnLFxuICAgIHJhdGlvbmFsZTogJ3JhdGlvbmFsZScsXG4gICAgZWxlbWVudDogJ21hdGgtaW5saW5lJyxcbiAgfTtcblxuICBpdCgnc2NvcmVzIDEnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHtcbiAgICAgIGlkOiAnMScsXG4gICAgICBhbnN3ZXJzOiB7IHIxOiB7IHZhbHVlOiAnNDAwMFxcXFwgXFxcXHRleHR7ZG9sbGFyc30nIH0gfSxcbiAgICAgIGNvbXBsZXRlQW5zd2VyOiAnNDAwMFxcXFwgXFxcXHRleHR7ZG9sbGFyc30nLFxuICAgIH07XG5cbiAgICBjb25zdCBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpO1xuICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoeyBzY29yZTogMSB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJzM4MjYnLCAoKSA9PiB7XG4gIGNvbnN0IHF1ZXN0aW9uID0ge1xuICAgIGVxdWF0aW9uRWRpdG9yOiA4LFxuICAgIHJlc3BvbnNlVHlwZTogJ0FkdmFuY2VkIE11bHRpJyxcbiAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiAnJyxcbiAgICBleHByZXNzaW9uOiAne3tyZXNwb25zZX19XFxcXCBcXFxcdGV4dHslfScsXG4gICAgcmVzcG9uc2VzOiBbXG4gICAgICB7XG4gICAgICAgIGlkOiAnMScsXG4gICAgICAgIGFuc3dlcjogJzg0JScsXG4gICAgICAgIGFsdGVybmF0ZXM6IHt9LFxuICAgICAgICB2YWxpZGF0aW9uOiAnbGl0ZXJhbCcsXG4gICAgICB9LFxuICAgIF0sXG4gICAgaWQ6ICcxJyxcbiAgICBwcm9tcHQ6ICdwcm9tcHQnLFxuICAgIHJhdGlvbmFsZTogJ3JhdGlvbmFsZScsXG4gICAgZWxlbWVudDogJ21hdGgtaW5saW5lJyxcbiAgfTtcblxuICBpdCgnc2NvcmVzIDEnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHtcbiAgICAgIGlkOiAnMScsXG4gICAgICBhbnN3ZXJzOiB7IHIxOiB7IHZhbHVlOiAnODRcXFxcIFxcXFx0ZXh0eyV9JyB9IH0sXG4gICAgICBjb21wbGV0ZUFuc3dlcjogJzg0XFxcXCBcXFxcdGV4dHslfScsXG4gICAgfTtcblxuICAgIGNvbnN0IGVudiA9IHsgbW9kZTogJ2V2YWx1YXRlJyB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUocXVlc3Rpb24sIHNlc3Npb24sIGVudik7XG4gICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IHNjb3JlOiAxIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnUEQtNjYnLCAoKSA9PiB7XG4gIGNvbnN0IHF1ZXN0aW9uID0ge1xuICAgIGlkOiAnMScsXG4gICAgcHJvbXB0OiAncHJvbXB0JyxcbiAgICByYXRpb25hbGU6ICdyYXRpb25hbGUnLFxuICAgIGVsZW1lbnQ6ICdtYXRoLWlubGluZScsXG4gICAgZmVlZGJhY2tFbmFibGVkOiB0cnVlLFxuICAgIHByb21wdEVuYWJsZWQ6IHRydWUsXG4gICAgcmF0aW9uYWxlRW5hYmxlZDogdHJ1ZSxcbiAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgICBzdHVkZW50SW5zdHJ1Y3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgICByZXNwb25zZVR5cGU6ICdBZHZhbmNlZCBNdWx0aScsXG4gICAgZXhwcmVzc2lvbjogJ3t7cmVzcG9uc2V9fScsXG4gICAgZXF1YXRpb25FZGl0b3I6ICdzdGF0aXN0aWNzJyxcbiAgICByZXNwb25zZXM6IFtcbiAgICAgIHtcbiAgICAgICAgYW5zd2VyOiAnXFxcXGxlZnQoLVxcXFxmcmFje3h9ezN9LC1cXFxcZnJhY3t5fXszfVxcXFxyaWdodCknLFxuICAgICAgICBpZDogJzEnLFxuICAgICAgICB2YWxpZGF0aW9uOiAnbGl0ZXJhbCcsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBhbnN3ZXI6ICdcXFxcbGVmdChcXFxcZnJhY3steH17M30sXFxcXGZyYWN7LXl9ezN9XFxcXHJpZ2h0KScsXG4gICAgICAgIHZhbGlkYXRpb246ICdlcXVpdkxpdGVyYWwnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYW5zd2VyOiAnXFxcXGxlZnQoXFxcXGZyYWN7eH17LTN9LFxcXFxmcmFje3l9ey0zfVxcXFxyaWdodCknLFxuICAgICAgICB2YWxpZGF0aW9uOiAnZXF1aXZMaXRlcmFsJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGFuc3dlcjogJ1xcXFxsZWZ0KC1cXFxcZnJhY3sxfXszfXgsLVxcXFxmcmFjezF9ezN9eVxcXFxyaWdodCknLFxuICAgICAgICB2YWxpZGF0aW9uOiAnZXF1aXZMaXRlcmFsJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGFuc3dlcjogJ1xcXFxsZWZ0KFxcXFxmcmFjey0xfXszfXgsXFxcXGZyYWN7LTF9ezN9eVxcXFxyaWdodCknLFxuICAgICAgICB2YWxpZGF0aW9uOiAnZXF1aXZMaXRlcmFsJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGFuc3dlcjogJ1xcXFxsZWZ0KFxcXFxmcmFjezF9ey0zfXgsXFxcXGZyYWN7MX17LTN9eVxcXFxyaWdodCknLFxuICAgICAgICB2YWxpZGF0aW9uOiAnZXF1aXZMaXRlcmFsJyxcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcblxuICBpdCgnc2NvcmVzIDEnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHtcbiAgICAgIGlkOiAnMScsXG4gICAgICBhbnN3ZXJzOiB7IHIxOiB7IHZhbHVlOiAnXFxcXGxlZnQoLVxcXFxmcmFje3h9ezN9LC1cXFxcZnJhY3t5fXszfVxcXFxyaWdodCknIH0gfSxcbiAgICAgIGNvbXBsZXRlQW5zd2VyOiAnXFxcXGxlZnQoLVxcXFxmcmFje3h9ezN9LC1cXFxcZnJhY3t5fXszfVxcXFxyaWdodCknLFxuICAgIH07XG5cbiAgICBjb25zdCBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpO1xuICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoeyBzY29yZTogMSB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ1BELTIwNScsICgpID0+IHtcbiAgY29uc3QgcXVlc3Rpb24gPSB7XG4gICAgaWQ6IDEsXG4gICAgZWxlbWVudDogJ21hdGgtaW5saW5lJyxcbiAgICBmZWVkYmFja0VuYWJsZWQ6IHRydWUsXG4gICAgcHJvbXB0RW5hYmxlZDogdHJ1ZSxcbiAgICByYXRpb25hbGVFbmFibGVkOiB0cnVlLFxuICAgIHRlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkOiB0cnVlLFxuICAgIHN0dWRlbnRJbnN0cnVjdGlvbnNFbmFibGVkOiB0cnVlLFxuICAgIGVxdWF0aW9uRWRpdG9yOiAzLFxuICAgIHRlYWNoZXJJbnN0cnVjdGlvbnM6ICcnLFxuICAgIHJlc3BvbnNlVHlwZTogJ0FkdmFuY2VkIE11bHRpJyxcbiAgICBleHByZXNzaW9uOiAne3tyZXNwb25zZX19XFxcXCA9XFxcXCB7e3Jlc3BvbnNlfX1cXFxcIFxcXFx0ZXh0e2N1YmljfVxcXFwgXFxcXHRleHR7aW5jaGVzfScsXG4gICAgcmF0aW9uYWxlOlxuICAgICAgJzxwPlRoZSB2b2x1bWUgb2YgdGhlIGJveCBjYW4gYmUgc29sdmVkIGJ5IGFueSBlcXVpdmFsZW50IHZhcmlhdGlvbiBvZiB0aGUgZXF1YXRpb246IDEwICYjMjE1OyA3ICYjMjE1OyA1ID0gMzUwIChjdWJpYyYjMTYwO2luY2hlcykmIzE2MDtvciA3MCAmIzIxNTsgNSA9IDM1MCYjMTYwOyhjdWJpYyYjMTYwO2luY2hlcykuIFRoaXMgYW5zd2VyIGlzIHRoZSByZXN1bHQgb2YgYWNjdXJhdGVseSBhcHBseWluZyBlaXRoZXIgdGhlIGZvcm11bGEgPHNwYW4gY2xhc3M9XCJ2YXJpYWJsZVwiPmw8L3NwYW4+ICYjMjE1OyA8c3BhbiBjbGFzcz1cInZhcmlhYmxlXCI+dzwvc3Bhbj4gJiMyMTU7IDxzcGFuIGNsYXNzPVwidmFyaWFibGVcIj5oPC9zcGFuPiA9IDxzcGFuIGNsYXNzPVwidmFyaWFibGVcIj5WPC9zcGFuPiBvciA8c3BhbiBjbGFzcz1cInZhcmlhYmxlXCI+Yjwvc3Bhbj4gJiMyMTU7IDxzcGFuIGNsYXNzPVwidmFyaWFibGVcIj5oPC9zcGFuPiA9IDxzcGFuIGNsYXNzPVwidmFyaWFibGVcIj5WPC9zcGFuPiB0byBmaW5kIHRoZSB2b2x1bWUgb2YgdGhlJiMxNjA7cmVjdGFuZ3VsYXIgcHJpc20gZGVzY3JpYmVkLjwvcD4nLFxuICAgIHByb21wdDpcbiAgICAgICc8cD5FbHlzZSBoYXMgYSBwbGFzdGljIGJveCBzaGUgdXNlcyBmb3Igc2FuZCBhcnQgZGVzaWducywgYXMgc2hvd24gYmVsb3cuPC9wPjxwPjxpbWcgYWx0PVwiaW1hZ2UgNWFmZTVjOTBjZDdlNDkxODk2ZDU4NTUyYWI3NGI2ZjdcIiBpZD1cIjVhZmU1YzkwY2Q3ZTQ5MTg5NmQ1ODU1MmFiNzRiNmY3XCIgc3JjPVwiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3BpZS1wcm9kLTIyMTcxOC1hc3NldHMvaW1hZ2UvYTNlZTUyODktZDg4Mi00YzdkLWFiY2UtMmVlNzBjZThjMjZmXCI+PC9wPjxwPlRoZSBsZW5ndGggb2YgdGhlIGJveCBpcyAxMCYjMTYwO2luY2hlcywgdGhlIHdpZHRoIGlzIDcmIzE2MDtpbmNoZXMsIGFuZCB0aGUgaGVpZ2h0IGlzIDUmIzE2MDtpbmNoZXMuIFdyaXRlIGFuZCBzb2x2ZSBhbiYjMTYwO2VxdWF0aW9uIEVseXNlIGNhbiB1c2UgdG8gZmluZCYjMTYwO3RoZSB2b2x1bWUgb2Ygc2FuZCwgaW4gY3ViaWMgaW5jaGVzLCB0aGF0IHdpbGwgZml0IGluIHRoZSBjb250YWluZXIuJiMxNjA7PC9wPjxwPlVzZSB0aGUgb24tc2NyZWVuIGtleWJvYXJkIHRvIHR5cGUgdGhlIGNvcnJlY3QgZXF1YXRpb24gYW5kIGFuc3dlciBpbiB0aGUgYm94LjwvcD4nLFxuICAgIHJlc3BvbnNlczogW1xuICAgICAge1xuICAgICAgICBhbnN3ZXI6ICcxMFxcXFx0aW1lczdcXFxcdGltZXM1PTM1MFxcXFwgXFxcXHRleHR7Y3ViaWN9XFxcXHRleHR7aW5jaGVzfScsXG4gICAgICAgIHZhbGlkYXRpb246ICdsaXRlcmFsJyxcbiAgICAgICAgaWQ6ICcxJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHZhbGlkYXRpb246ICdlcXVpdkxpdGVyYWwnLFxuICAgICAgICBhbnN3ZXI6ICczNTA9MTBcXFxcdGltZXM3XFxcXHRpbWVzNVxcXFwgXFxcXHRleHR7Y3ViaWN9XFxcXHRleHR7aW5jaGVzfScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBhbnN3ZXI6ICczNTA9MTBcXFxcdGltZXM1XFxcXHRpbWVzN1xcXFwgXFxcXHRleHR7Y3ViaWN9XFxcXHRleHR7aW5jaGVzfScsXG4gICAgICAgIHZhbGlkYXRpb246ICdlcXVpdkxpdGVyYWwnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYW5zd2VyOiAnMzUwPTdcXFxcdGltZXM1XFxcXHRpbWVzMTBcXFxcIFxcXFx0ZXh0e2N1YmljfVxcXFx0ZXh0e2luY2hlc30nLFxuICAgICAgICB2YWxpZGF0aW9uOiAnZXF1aXZMaXRlcmFsJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGFuc3dlcjogJzM1MD01XFxcXHRpbWVzMTBcXFxcdGltZXM3XFxcXCBcXFxcdGV4dHtjdWJpY31cXFxcdGV4dHtpbmNoZXN9JyxcbiAgICAgICAgdmFsaWRhdGlvbjogJ2VxdWl2TGl0ZXJhbCcsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB2YWxpZGF0aW9uOiAnZXF1aXZMaXRlcmFsJyxcbiAgICAgICAgYW5zd2VyOiAnMzUwPTdcXFxcdGltZXMxMFxcXFx0aW1lczVcXFxcIFxcXFx0ZXh0e2N1YmljfVxcXFx0ZXh0e2luY2hlc30nLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYW5zd2VyOiAnMzUwPTdcXFxcdGltZXM1XFxcXHRpbWVzMTBcXFxcIFxcXFx0ZXh0e2N1YmljfVxcXFx0ZXh0e2luY2hlc30nLFxuICAgICAgICB2YWxpZGF0aW9uOiAnZXF1aXZMaXRlcmFsJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGFuc3dlcjogJzcwXFxcXHRpbWVzNT0zNTBcXFxcIFxcXFx0ZXh0e2N1YmljfVxcXFx0ZXh0e2luY2hlc30nLFxuICAgICAgICB2YWxpZGF0aW9uOiAnZXF1aXZMaXRlcmFsJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGFuc3dlcjogJzM1MD03MFxcXFx0aW1lczVcXFxcIFxcXFx0ZXh0e2N1YmljfVxcXFx0ZXh0e2luY2hlc30nLFxuICAgICAgICB2YWxpZGF0aW9uOiAnZXF1aXZMaXRlcmFsJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGFuc3dlcjogJzM1MD01XFxcXHRpbWVzNzBcXFxcIFxcXFx0ZXh0e2N1YmljfVxcXFx0ZXh0e2luY2hlc30nLFxuICAgICAgICB2YWxpZGF0aW9uOiAnZXF1aXZMaXRlcmFsJyxcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcblxuICBpdCgnc2NvcmVzIDEnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHtcbiAgICAgIGlkOiAnMScsXG4gICAgICBhbnN3ZXJzOiB7IHIxOiB7IHZhbHVlOiAnMzUwJyB9LCByMjogeyB2YWx1ZTogJzdcXFxcY2RvdDUwJyB9IH0sXG4gICAgICBjb21wbGV0ZUFuc3dlcjogJzM1MFxcXFwgPVxcXFwgN1xcXFxjZG90NTBcXFxcIFxcXFx0ZXh0e2N1YmljfVxcXFwgXFxcXHRleHR7aW5jaGVzfScsXG4gICAgfTtcblxuICAgIGNvbnN0IGVudiA9IHsgbW9kZTogJ2V2YWx1YXRlJyB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUocXVlc3Rpb24sIHNlc3Npb24sIGVudik7XG4gICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IHNjb3JlOiAxIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnUEQtNjEwJywgKCkgPT4ge1xuICBjb25zdCBlcXVhdGlvbl8wMSA9IHtcbiAgICBpZDogMSxcbiAgICBlbGVtZW50OiAnbWF0aC1pbmxpbmUnLFxuICAgIGZlZWRiYWNrRW5hYmxlZDogdHJ1ZSxcbiAgICBwcm9tcHRFbmFibGVkOiB0cnVlLFxuICAgIHJhdGlvbmFsZUVuYWJsZWQ6IHRydWUsXG4gICAgdGVhY2hlckluc3RydWN0aW9uc0VuYWJsZWQ6IHRydWUsXG4gICAgc3R1ZGVudEluc3RydWN0aW9uc0VuYWJsZWQ6IHRydWUsXG4gICAgZXF1YXRpb25FZGl0b3I6IDMsXG4gICAgdGVhY2hlckluc3RydWN0aW9uczogJycsXG4gICAgcmVzcG9uc2VUeXBlOiAnQWR2YW5jZWQgTXVsdGknLFxuICAgIGV4cHJlc3Npb246ICdcXFxcZnJhY3sxfXszfT1cXFxcZnJhY3t7cmVzcG9uc2V9fXs2fScsXG4gICAgcmF0aW9uYWxlOlxuICAgICAgJzxwPkEgY29ycmVjdCByZXNwb25zZSBpcyBzaG93biBiZWxvdzo8L3A+PHVsPjxsaT4xLzMgPSA8c3Ryb25nPjI8L3N0cm9uZz4vNjwvbGk+PGxpPjMvNCA9IDxzdHJvbmc+Njwvc3Ryb25nPi84PC9saT48bGk+My82ID0gPHN0cm9uZz4xPC9zdHJvbmc+LzI8L2xpPjwvdWw+JyxcbiAgICByZXNwb25zZXM6IFtcbiAgICAgIHtcbiAgICAgICAgYW5zd2VyOiAnXFxcXGZyYWN7MX17M309XFxcXGZyYWN7Mn17Nn0nLFxuICAgICAgICB2YWxpZGF0aW9uOiAnbGl0ZXJhbCcsXG4gICAgICAgIGlkOiAnMScsXG4gICAgICB9LFxuICAgIF0sXG4gIH07XG5cbiAgaXQoJ3Njb3JlcyAxJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSB7XG4gICAgICBpZDogJzEnLFxuICAgICAgYW5zd2VyczogeyByMTogeyB2YWx1ZTogJzInIH0gfSxcbiAgICAgIGNvbXBsZXRlQW5zd2VyOiAnXFxcXGZyYWN7MX17M309XFxcXGZyYWN7Mn17Nn0nLFxuICAgIH07XG5cbiAgICBjb25zdCBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKGVxdWF0aW9uXzAxLCBzZXNzaW9uLCBlbnYpO1xuICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoeyBzY29yZTogMSB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Njb3JlcyAwJywgYXN5bmMgKCkgPT4ge1xuICAgIGxhdGV4RXF1YWwubW9ja1JldHVyblZhbHVlT25jZShmYWxzZSk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHtcbiAgICAgIGlkOiAnMScsXG4gICAgICBhbnN3ZXJzOiB7IHIxOiB7IHZhbHVlOiAnMicgfSB9LFxuICAgICAgY29tcGxldGVBbnN3ZXI6ICdcXFxcZnJhY3sxfXszfT1cXFxcZnJhY3sxfXs2fScsXG4gICAgfTtcblxuICAgIGNvbnN0IGVudiA9IHsgbW9kZTogJ2V2YWx1YXRlJyB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUoZXF1YXRpb25fMDEsIHNlc3Npb24sIGVudik7XG4gICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IHNjb3JlOiAwIH0pO1xuICB9KTtcblxuICBjb25zdCBlcXVhdGlvbl8wMiA9IHtcbiAgICBpZDogMixcbiAgICBlbGVtZW50OiAnbWF0aC1pbmxpbmUnLFxuICAgIGZlZWRiYWNrRW5hYmxlZDogdHJ1ZSxcbiAgICBwcm9tcHRFbmFibGVkOiB0cnVlLFxuICAgIHJhdGlvbmFsZUVuYWJsZWQ6IHRydWUsXG4gICAgdGVhY2hlckluc3RydWN0aW9uc0VuYWJsZWQ6IHRydWUsXG4gICAgc3R1ZGVudEluc3RydWN0aW9uc0VuYWJsZWQ6IHRydWUsXG4gICAgZXF1YXRpb25FZGl0b3I6IDMsXG4gICAgdGVhY2hlckluc3RydWN0aW9uczogJycsXG4gICAgcmVzcG9uc2VUeXBlOiAnQWR2YW5jZWQgTXVsdGknLFxuICAgIGV4cHJlc3Npb246ICdcXFxcZnJhY3szfXs0fT1cXFxcZnJhY3t7cmVzcG9uc2V9fXs4fScsXG4gICAgcmF0aW9uYWxlOlxuICAgICAgJzxwPkEgY29ycmVjdCByZXNwb25zZSBpcyBzaG93biBiZWxvdzo8L3A+PHVsPjxsaT4xLzMgPSA8c3Ryb25nPjI8L3N0cm9uZz4vNjwvbGk+PGxpPjMvNCA9IDxzdHJvbmc+Njwvc3Ryb25nPi84PC9saT48bGk+My82ID0gPHN0cm9uZz4xPC9zdHJvbmc+LzI8L2xpPjwvdWw+JyxcbiAgICByZXNwb25zZXM6IFtcbiAgICAgIHtcbiAgICAgICAgYW5zd2VyOiAnXFxcXGZyYWN7M317NH09XFxcXGZyYWN7Nn17OH0nLFxuICAgICAgICB2YWxpZGF0aW9uOiAnbGl0ZXJhbCcsXG4gICAgICAgIGlkOiAnMScsXG4gICAgICB9LFxuICAgIF0sXG4gIH07XG5cbiAgaXQoJ3Njb3JlcyAxJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSB7XG4gICAgICBpZDogJzInLFxuICAgICAgYW5zd2VyczogeyByMTogeyB2YWx1ZTogJzYnIH0gfSxcbiAgICAgIGNvbXBsZXRlQW5zd2VyOiAnXFxcXGZyYWN7M317NH09XFxcXGZyYWN7Nn17OH0nLFxuICAgIH07XG5cbiAgICBjb25zdCBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKGVxdWF0aW9uXzAyLCBzZXNzaW9uLCBlbnYpO1xuICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoeyBzY29yZTogMSB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Njb3JlcyAwJywgYXN5bmMgKCkgPT4ge1xuICAgIGxhdGV4RXF1YWwubW9ja1JldHVyblZhbHVlT25jZShmYWxzZSk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHtcbiAgICAgIGlkOiAnMicsXG4gICAgICBhbnN3ZXJzOiB7IHIxOiB7IHZhbHVlOiAnNicgfSB9LFxuICAgICAgY29tcGxldGVBbnN3ZXI6ICdcXFxcZnJhY3szfXs0fT1cXFxcZnJhY3szfXs4fScsXG4gICAgfTtcblxuICAgIGNvbnN0IGVudiA9IHsgbW9kZTogJ2V2YWx1YXRlJyB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUoZXF1YXRpb25fMDIsIHNlc3Npb24sIGVudik7XG4gICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IHNjb3JlOiAwIH0pO1xuICB9KTtcblxuICBjb25zdCBlcXVhdGlvbl8wMyA9IHtcbiAgICBpZDogMyxcbiAgICBlbGVtZW50OiAnbWF0aC1pbmxpbmUnLFxuICAgIGZlZWRiYWNrRW5hYmxlZDogdHJ1ZSxcbiAgICBwcm9tcHRFbmFibGVkOiB0cnVlLFxuICAgIHJhdGlvbmFsZUVuYWJsZWQ6IHRydWUsXG4gICAgdGVhY2hlckluc3RydWN0aW9uc0VuYWJsZWQ6IHRydWUsXG4gICAgc3R1ZGVudEluc3RydWN0aW9uc0VuYWJsZWQ6IHRydWUsXG4gICAgZXF1YXRpb25FZGl0b3I6IDMsXG4gICAgdGVhY2hlckluc3RydWN0aW9uczogJycsXG4gICAgcmVzcG9uc2VUeXBlOiAnQWR2YW5jZWQgTXVsdGknLFxuICAgIGV4cHJlc3Npb246ICdcXFxcZnJhY3szfXs2fT1cXFxcZnJhY3t7cmVzcG9uc2V9fXsyfScsXG4gICAgcmF0aW9uYWxlOlxuICAgICAgJzxwPkEgY29ycmVjdCByZXNwb25zZSBpcyBzaG93biBiZWxvdzo8L3A+PHVsPjxsaT4xLzMgPSA8c3Ryb25nPjI8L3N0cm9uZz4vNjwvbGk+PGxpPjMvNCA9IDxzdHJvbmc+Njwvc3Ryb25nPi84PC9saT48bGk+My82ID0gPHN0cm9uZz4xPC9zdHJvbmc+LzI8L2xpPjwvdWw+JyxcbiAgICByZXNwb25zZXM6IFtcbiAgICAgIHtcbiAgICAgICAgYW5zd2VyOiAnXFxcXGZyYWN7M317Nn09XFxcXGZyYWN7MX17Mn0nLFxuICAgICAgICB2YWxpZGF0aW9uOiAnbGl0ZXJhbCcsXG4gICAgICAgIGlkOiAnMycsXG4gICAgICB9LFxuICAgIF0sXG4gIH07XG5cbiAgaXQoJ3Njb3JlcyAxJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSB7XG4gICAgICBpZDogJzMnLFxuICAgICAgYW5zd2VyczogeyByMTogeyB2YWx1ZTogJzEnIH0gfSxcbiAgICAgIGNvbXBsZXRlQW5zd2VyOiAnXFxcXGZyYWN7M317Nn09XFxcXGZyYWN7MX17Mn0nLFxuICAgIH07XG5cbiAgICBjb25zdCBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKGVxdWF0aW9uXzAzLCBzZXNzaW9uLCBlbnYpO1xuICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoeyBzY29yZTogMSB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Njb3JlcyAwJywgYXN5bmMgKCkgPT4ge1xuICAgIGxhdGV4RXF1YWwubW9ja1JldHVyblZhbHVlT25jZShmYWxzZSk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHtcbiAgICAgIGlkOiAnMycsXG4gICAgICBhbnN3ZXJzOiB7IHIxOiB7IHZhbHVlOiAnMScgfSB9LFxuICAgICAgY29tcGxldGVBbnN3ZXI6ICdcXFxcZnJhY3szfXs2fT1cXFxcZnJhY3syfXsyfScsXG4gICAgfTtcblxuICAgIGNvbnN0IGVudiA9IHsgbW9kZTogJ2V2YWx1YXRlJyB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUoZXF1YXRpb25fMDMsIHNlc3Npb24sIGVudik7XG4gICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IHNjb3JlOiAwIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnUEQtMTAzMScsICgpID0+IHtcbiAgY29uc3QgZXhwcmVzc2lvbl8wMSA9IHtcbiAgICBpZDogMSxcbiAgICBlbGVtZW50OiAnbWF0aC1pbmxpbmUnLFxuICAgIGZlZWRiYWNrRW5hYmxlZDogdHJ1ZSxcbiAgICBwcm9tcHRFbmFibGVkOiB0cnVlLFxuICAgIHJhdGlvbmFsZUVuYWJsZWQ6IHRydWUsXG4gICAgdGVhY2hlckluc3RydWN0aW9uc0VuYWJsZWQ6IHRydWUsXG4gICAgc3R1ZGVudEluc3RydWN0aW9uc0VuYWJsZWQ6IHRydWUsXG4gICAgZXF1YXRpb25FZGl0b3I6IDMsXG4gICAgdGVhY2hlckluc3RydWN0aW9uczogJycsXG4gICAgcmVzcG9uc2VUeXBlOiAnQWR2YW5jZWQgTXVsdGknLFxuICAgIGV4cHJlc3Npb246ICd7e3Jlc3BvbnNlfX1cXFxcbWwnLFxuICAgIHJhdGlvbmFsZTpcbiAgICAgICc8cD5BIGNvcnJlY3QgcmVzcG9uc2UgaXMgc2hvd24gYmVsb3c6PC9wPjx1bD48bGk+MS8zID0gPHN0cm9uZz4yPC9zdHJvbmc+LzY8L2xpPjxsaT4zLzQgPSA8c3Ryb25nPjY8L3N0cm9uZz4vODwvbGk+PGxpPjMvNiA9IDxzdHJvbmc+MTwvc3Ryb25nPi8yPC9saT48L3VsPicsXG4gICAgcmVzcG9uc2VzOiBbXG4gICAgICB7XG4gICAgICAgIGFuc3dlcjogJzEsMDAwXFxcXG1sJyxcbiAgICAgICAgdmFsaWRhdGlvbjogJ2xpdGVyYWwnLFxuICAgICAgICBpZDogJzEnLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xuXG4gIGl0KCdzY29yZXMgMScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0ge1xuICAgICAgaWQ6ICcxJyxcbiAgICAgIGFuc3dlcnM6IHsgcjE6IHsgdmFsdWU6ICczJyB9IH0sXG4gICAgICBjb21wbGV0ZUFuc3dlcjogJzEwMDBcXFxcbWwnLFxuICAgIH07XG5cbiAgICBjb25zdCBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKGV4cHJlc3Npb25fMDEsIHNlc3Npb24sIGVudik7XG4gICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IHNjb3JlOiAxIH0pO1xuICB9KTtcblxuICBjb25zdCBleHByZXNzaW9uXzAyID0ge1xuICAgIGlkOiAxLFxuICAgIGVsZW1lbnQ6ICdtYXRoLWlubGluZScsXG4gICAgZmVlZGJhY2tFbmFibGVkOiB0cnVlLFxuICAgIHByb21wdEVuYWJsZWQ6IHRydWUsXG4gICAgcmF0aW9uYWxlRW5hYmxlZDogdHJ1ZSxcbiAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgICBzdHVkZW50SW5zdHJ1Y3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgICBlcXVhdGlvbkVkaXRvcjogMyxcbiAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiAnJyxcbiAgICByZXNwb25zZVR5cGU6ICdBZHZhbmNlZCBNdWx0aScsXG4gICAgZXhwcmVzc2lvbjogJ3t7cmVzcG9uc2V9fVxcXFxtbCcsXG4gICAgcmF0aW9uYWxlOlxuICAgICAgJzxwPkEgY29ycmVjdCByZXNwb25zZSBpcyBzaG93biBiZWxvdzo8L3A+PHVsPjxsaT4xLzMgPSA8c3Ryb25nPjI8L3N0cm9uZz4vNjwvbGk+PGxpPjMvNCA9IDxzdHJvbmc+Njwvc3Ryb25nPi84PC9saT48bGk+My82ID0gPHN0cm9uZz4xPC9zdHJvbmc+LzI8L2xpPjwvdWw+JyxcbiAgICByZXNwb25zZXM6IFtcbiAgICAgIHtcbiAgICAgICAgYW5zd2VyOiAnMTAwMFxcXFxtbCcsXG4gICAgICAgIHZhbGlkYXRpb246ICdsaXRlcmFsJyxcbiAgICAgICAgaWQ6ICcxJyxcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcblxuICBpdCgnc2NvcmVzIDEnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHtcbiAgICAgIGlkOiAnMScsXG4gICAgICBhbnN3ZXJzOiB7IHIxOiB7IHZhbHVlOiAnMycgfSB9LFxuICAgICAgY29tcGxldGVBbnN3ZXI6ICcxLDAwMFxcXFxtbCcsXG4gICAgfTtcblxuICAgIGNvbnN0IGVudiA9IHsgbW9kZTogJ2V2YWx1YXRlJyB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUoZXhwcmVzc2lvbl8wMiwgc2Vzc2lvbiwgZW52KTtcbiAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHsgc2NvcmU6IDEgfSk7XG4gIH0pO1xuXG4gIGNvbnN0IGV4cHJlc3Npb25fMDMgPSB7XG4gICAgaWQ6IDEsXG4gICAgZWxlbWVudDogJ21hdGgtaW5saW5lJyxcbiAgICBmZWVkYmFja0VuYWJsZWQ6IHRydWUsXG4gICAgcHJvbXB0RW5hYmxlZDogdHJ1ZSxcbiAgICByYXRpb25hbGVFbmFibGVkOiB0cnVlLFxuICAgIHRlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkOiB0cnVlLFxuICAgIHN0dWRlbnRJbnN0cnVjdGlvbnNFbmFibGVkOiB0cnVlLFxuICAgIGVxdWF0aW9uRWRpdG9yOiAzLFxuICAgIHRlYWNoZXJJbnN0cnVjdGlvbnM6ICcnLFxuICAgIHJlc3BvbnNlVHlwZTogJ0FkdmFuY2VkIE11bHRpJyxcbiAgICBleHByZXNzaW9uOiAne3tyZXNwb25zZX19XFxcXG1sJyxcbiAgICByYXRpb25hbGU6XG4gICAgICAnPHA+QSBjb3JyZWN0IHJlc3BvbnNlIGlzIHNob3duIGJlbG93OjwvcD48dWw+PGxpPjEvMyA9IDxzdHJvbmc+Mjwvc3Ryb25nPi82PC9saT48bGk+My80ID0gPHN0cm9uZz42PC9zdHJvbmc+Lzg8L2xpPjxsaT4zLzYgPSA8c3Ryb25nPjE8L3N0cm9uZz4vMjwvbGk+PC91bD4nLFxuICAgIHJlc3BvbnNlczogW1xuICAgICAge1xuICAgICAgICBhbnN3ZXI6ICcxLDAwMFxcXFxtbCcsXG4gICAgICAgIHZhbGlkYXRpb246ICdsaXRlcmFsJyxcbiAgICAgICAgaWQ6ICcxJyxcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcblxuICBpdCgnc2NvcmVzIDEnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHtcbiAgICAgIGlkOiAnMScsXG4gICAgICBhbnN3ZXJzOiB7IHIxOiB7IHZhbHVlOiAnMycgfSB9LFxuICAgICAgY29tcGxldGVBbnN3ZXI6ICcxMDAwXFxcXG1sJyxcbiAgICB9O1xuXG4gICAgY29uc3QgZW52ID0geyBtb2RlOiAnZXZhbHVhdGUnIH07XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZShleHByZXNzaW9uXzAzLCBzZXNzaW9uLCBlbnYpO1xuICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoeyBzY29yZTogMSB9KTtcbiAgfSk7XG5cbiAgY29uc3QgZXhwcmVzc2lvbl8wNCA9IHtcbiAgICBpZDogMSxcbiAgICBlbGVtZW50OiAnbWF0aC1pbmxpbmUnLFxuICAgIGZlZWRiYWNrRW5hYmxlZDogdHJ1ZSxcbiAgICBwcm9tcHRFbmFibGVkOiB0cnVlLFxuICAgIHJhdGlvbmFsZUVuYWJsZWQ6IHRydWUsXG4gICAgdGVhY2hlckluc3RydWN0aW9uc0VuYWJsZWQ6IHRydWUsXG4gICAgc3R1ZGVudEluc3RydWN0aW9uc0VuYWJsZWQ6IHRydWUsXG4gICAgZXF1YXRpb25FZGl0b3I6IDMsXG4gICAgdGVhY2hlckluc3RydWN0aW9uczogJycsXG4gICAgcmVzcG9uc2VUeXBlOiAnQWR2YW5jZWQgTXVsdGknLFxuICAgIGV4cHJlc3Npb246ICckXFxcXHt7cmVzcG9uc2V9fScsXG4gICAgcmF0aW9uYWxlOlxuICAgICAgJzxwPkEgY29ycmVjdCByZXNwb25zZSBpcyBzaG93biBiZWxvdzo8L3A+PHVsPjxsaT4xLzMgPSA8c3Ryb25nPjI8L3N0cm9uZz4vNjwvbGk+PGxpPjMvNCA9IDxzdHJvbmc+Njwvc3Ryb25nPi84PC9saT48bGk+My82ID0gPHN0cm9uZz4xPC9zdHJvbmc+LzI8L2xpPjwvdWw+JyxcbiAgICByZXNwb25zZXM6IFtcbiAgICAgIHtcbiAgICAgICAgYW5zd2VyOiAnNTAwMFxcXFwkJyxcbiAgICAgICAgdmFsaWRhdGlvbjogJ2xpdGVyYWwnLFxuICAgICAgICBpZDogJzEnLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xuXG4gIGl0KCdzY29yZXMgMScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0ge1xuICAgICAgaWQ6ICcxJyxcbiAgICAgIGFuc3dlcnM6IHsgcjE6IHsgdmFsdWU6ICczJyB9IH0sXG4gICAgICBjb21wbGV0ZUFuc3dlcjogJzUsMDAwXFxcXCQnLFxuICAgIH07XG5cbiAgICBjb25zdCBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKGV4cHJlc3Npb25fMDQsIHNlc3Npb24sIGVudik7XG4gICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IHNjb3JlOiAxIH0pO1xuICB9KTtcblxuICBjb25zdCBleHByZXNzaW9uXzA1ID0ge1xuICAgIGlkOiAxLFxuICAgIGVsZW1lbnQ6ICdtYXRoLWlubGluZScsXG4gICAgZmVlZGJhY2tFbmFibGVkOiB0cnVlLFxuICAgIHByb21wdEVuYWJsZWQ6IHRydWUsXG4gICAgcmF0aW9uYWxlRW5hYmxlZDogdHJ1ZSxcbiAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgICBzdHVkZW50SW5zdHJ1Y3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgICBlcXVhdGlvbkVkaXRvcjogMyxcbiAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiAnJyxcbiAgICByZXNwb25zZVR5cGU6ICdBZHZhbmNlZCBNdWx0aScsXG4gICAgZXhwcmVzc2lvbjogJ3k9e3tyZXNwb25zZX19eF4yK3t7cmVzcG9uc2V9fXgre3tyZXNwb25zZX19JyxcbiAgICByYXRpb25hbGU6XG4gICAgICAnPHA+QSBjb3JyZWN0IHJlc3BvbnNlIGlzIHNob3duIGJlbG93OjwvcD48dWw+PGxpPjEvMyA9IDxzdHJvbmc+Mjwvc3Ryb25nPi82PC9saT48bGk+My80ID0gPHN0cm9uZz42PC9zdHJvbmc+Lzg8L2xpPjxsaT4zLzYgPSA8c3Ryb25nPjE8L3N0cm9uZz4vMjwvbGk+PC91bD4nLFxuICAgIHJlc3BvbnNlczogW1xuICAgICAge1xuICAgICAgICBhbnN3ZXI6ICd5PTEwMDB4XjIrMjUweCs1MDAwJyxcbiAgICAgICAgdmFsaWRhdGlvbjogJ2xpdGVyYWwnLFxuICAgICAgICBpZDogJzEnLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xuXG4gIGl0KCdzY29yZXMgMScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0ge1xuICAgICAgaWQ6ICcxJyxcbiAgICAgIGFuc3dlcnM6IHsgcjE6IHsgdmFsdWU6ICczJyB9IH0sXG4gICAgICBjb21wbGV0ZUFuc3dlcjogJ3k9MSwwMDB4XjIrMjUweCs1LDAwMCcsXG4gICAgfTtcblxuICAgIGNvbnN0IGVudiA9IHsgbW9kZTogJ2V2YWx1YXRlJyB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUoZXhwcmVzc2lvbl8wNSwgc2Vzc2lvbiwgZW52KTtcbiAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHsgc2NvcmU6IDEgfSk7XG4gIH0pO1xuXG4gIGl0KCdzY29yZXMgMScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0ge1xuICAgICAgaWQ6ICcxJyxcbiAgICAgIGFuc3dlcnM6IHsgcjE6IHsgdmFsdWU6ICczJyB9IH0sXG4gICAgICBjb21wbGV0ZUFuc3dlcjogJ3k9MTAwMHheMisyNTB4KzUsMDAwJyxcbiAgICB9O1xuXG4gICAgY29uc3QgZW52ID0geyBtb2RlOiAnZXZhbHVhdGUnIH07XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZShleHByZXNzaW9uXzA1LCBzZXNzaW9uLCBlbnYpO1xuICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoeyBzY29yZTogMSB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Njb3JlcyAxJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSB7XG4gICAgICBpZDogJzEnLFxuICAgICAgYW5zd2VyczogeyByMTogeyB2YWx1ZTogJzMnIH0gfSxcbiAgICAgIGNvbXBsZXRlQW5zd2VyOiAneT0xLDAwMHheMisyNTB4KzUwMDAnLFxuICAgIH07XG5cbiAgICBjb25zdCBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKGV4cHJlc3Npb25fMDUsIHNlc3Npb24sIGVudik7XG4gICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IHNjb3JlOiAxIH0pO1xuICB9KTtcblxuICBjb25zdCBleHByZXNzaW9uXzA2ID0ge1xuICAgIGlkOiAxLFxuICAgIGVsZW1lbnQ6ICdtYXRoLWlubGluZScsXG4gICAgZmVlZGJhY2tFbmFibGVkOiB0cnVlLFxuICAgIHByb21wdEVuYWJsZWQ6IHRydWUsXG4gICAgcmF0aW9uYWxlRW5hYmxlZDogdHJ1ZSxcbiAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgICBzdHVkZW50SW5zdHJ1Y3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgICBlcXVhdGlvbkVkaXRvcjogMyxcbiAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiAnJyxcbiAgICByZXNwb25zZVR5cGU6ICdBZHZhbmNlZCBNdWx0aScsXG4gICAgZXhwcmVzc2lvbjogJ3k9e3tyZXNwb25zZX19eF4yK3t7cmVzcG9uc2V9fXgre3tyZXNwb25zZX19JyxcbiAgICByYXRpb25hbGU6XG4gICAgICAnPHA+QSBjb3JyZWN0IHJlc3BvbnNlIGlzIHNob3duIGJlbG93OjwvcD48dWw+PGxpPjEvMyA9IDxzdHJvbmc+Mjwvc3Ryb25nPi82PC9saT48bGk+My80ID0gPHN0cm9uZz42PC9zdHJvbmc+Lzg8L2xpPjxsaT4zLzYgPSA8c3Ryb25nPjE8L3N0cm9uZz4vMjwvbGk+PC91bD4nLFxuICAgIHJlc3BvbnNlczogW1xuICAgICAge1xuICAgICAgICBhbnN3ZXI6ICd5PTEsMDAweF4yKzI1MHgrNSwwMDAnLFxuICAgICAgICB2YWxpZGF0aW9uOiAnbGl0ZXJhbCcsXG4gICAgICAgIGlkOiAnMScsXG4gICAgICB9LFxuICAgIF0sXG4gIH07XG5cbiAgaXQoJ3Njb3JlcyAxJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSB7XG4gICAgICBpZDogJzEnLFxuICAgICAgYW5zd2VyczogeyByMTogeyB2YWx1ZTogJzMnIH0gfSxcbiAgICAgIGNvbXBsZXRlQW5zd2VyOiAneT0xMDAweF4yKzI1MHgrNTAwMCcsXG4gICAgfTtcblxuICAgIGNvbnN0IGVudiA9IHsgbW9kZTogJ2V2YWx1YXRlJyB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUoZXhwcmVzc2lvbl8wNiwgc2Vzc2lvbiwgZW52KTtcbiAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHsgc2NvcmU6IDEgfSk7XG4gIH0pO1xuXG4gIGl0KCdzY29yZXMgMScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0ge1xuICAgICAgaWQ6ICcxJyxcbiAgICAgIGFuc3dlcnM6IHsgcjE6IHsgdmFsdWU6ICczJyB9IH0sXG4gICAgICBjb21wbGV0ZUFuc3dlcjogJ3k9MTAwMHheMisyNTB4KzUsMDAwJyxcbiAgICB9O1xuXG4gICAgY29uc3QgZW52ID0geyBtb2RlOiAnZXZhbHVhdGUnIH07XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZShleHByZXNzaW9uXzA2LCBzZXNzaW9uLCBlbnYpO1xuICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoeyBzY29yZTogMSB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Njb3JlcyAxJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSB7XG4gICAgICBpZDogJzEnLFxuICAgICAgYW5zd2VyczogeyByMTogeyB2YWx1ZTogJzMnIH0gfSxcbiAgICAgIGNvbXBsZXRlQW5zd2VyOiAneT0xLDAwMHheMisyNTB4KzUwMDAnLFxuICAgIH07XG5cbiAgICBjb25zdCBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKGV4cHJlc3Npb25fMDYsIHNlc3Npb24sIGVudik7XG4gICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IHNjb3JlOiAxIH0pO1xuICB9KTtcblxuICBjb25zdCBleHByZXNzaW9uXzA3ID0ge1xuICAgIGlkOiAxLFxuICAgIGVsZW1lbnQ6ICdtYXRoLWlubGluZScsXG4gICAgZmVlZGJhY2tFbmFibGVkOiB0cnVlLFxuICAgIHByb21wdEVuYWJsZWQ6IHRydWUsXG4gICAgcmF0aW9uYWxlRW5hYmxlZDogdHJ1ZSxcbiAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgICBzdHVkZW50SW5zdHJ1Y3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgICBlcXVhdGlvbkVkaXRvcjogMyxcbiAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiAnJyxcbiAgICByZXNwb25zZVR5cGU6ICdBZHZhbmNlZCBNdWx0aScsXG4gICAgZXhwcmVzc2lvbjogJ1xcXFxmcmFjeyB4IH17e3sgcmVzcG9uc2UgfX19JyxcbiAgICByYXRpb25hbGU6XG4gICAgICAnPHA+QSBjb3JyZWN0IHJlc3BvbnNlIGlzIHNob3duIGJlbG93OjwvcD48dWw+PGxpPjEvMyA9IDxzdHJvbmc+Mjwvc3Ryb25nPi82PC9saT48bGk+My80ID0gPHN0cm9uZz42PC9zdHJvbmc+Lzg8L2xpPjxsaT4zLzYgPSA8c3Ryb25nPjE8L3N0cm9uZz4vMjwvbGk+PC91bD4nLFxuICAgIHJlc3BvbnNlczogW1xuICAgICAge1xuICAgICAgICBhbnN3ZXI6ICdcXFxcZnJhY3t4fXsxMDAwfScsXG4gICAgICAgIHZhbGlkYXRpb246ICdsaXRlcmFsJyxcbiAgICAgICAgaWQ6ICcxJyxcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcblxuICBpdCgnc2NvcmVzIDEnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHtcbiAgICAgIGlkOiAnMScsXG4gICAgICBhbnN3ZXJzOiB7IHIxOiB7IHZhbHVlOiAnMycgfSB9LFxuICAgICAgY29tcGxldGVBbnN3ZXI6ICdcXFxcZnJhY3t4fXsxLDAwMH0nLFxuICAgIH07XG5cbiAgICBjb25zdCBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKGV4cHJlc3Npb25fMDcsIHNlc3Npb24sIGVudik7XG4gICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IHNjb3JlOiAxIH0pO1xuICB9KTtcblxuICBjb25zdCBleHByZXNzaW9uXzA4ID0ge1xuICAgIGlkOiAxLFxuICAgIGVsZW1lbnQ6ICdtYXRoLWlubGluZScsXG4gICAgZmVlZGJhY2tFbmFibGVkOiB0cnVlLFxuICAgIHByb21wdEVuYWJsZWQ6IHRydWUsXG4gICAgcmF0aW9uYWxlRW5hYmxlZDogdHJ1ZSxcbiAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgICBzdHVkZW50SW5zdHJ1Y3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgICBlcXVhdGlvbkVkaXRvcjogMyxcbiAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiAnJyxcbiAgICByZXNwb25zZVR5cGU6ICdBZHZhbmNlZCBNdWx0aScsXG4gICAgZXhwcmVzc2lvbjogJ1xcXFxmcmFjeyB4IH17e3sgcmVzcG9uc2UgfX19JyxcbiAgICByYXRpb25hbGU6XG4gICAgICAnPHA+QSBjb3JyZWN0IHJlc3BvbnNlIGlzIHNob3duIGJlbG93OjwvcD48dWw+PGxpPjEvMyA9IDxzdHJvbmc+Mjwvc3Ryb25nPi82PC9saT48bGk+My80ID0gPHN0cm9uZz42PC9zdHJvbmc+Lzg8L2xpPjxsaT4zLzYgPSA8c3Ryb25nPjE8L3N0cm9uZz4vMjwvbGk+PC91bD4nLFxuICAgIHJlc3BvbnNlczogW1xuICAgICAge1xuICAgICAgICBhbnN3ZXI6ICdcXFxcZnJhY3t4fXsxLDAwMH0nLFxuICAgICAgICB2YWxpZGF0aW9uOiAnbGl0ZXJhbCcsXG4gICAgICAgIGlkOiAnMScsXG4gICAgICB9LFxuICAgIF0sXG4gIH07XG5cbiAgaXQoJ3Njb3JlcyAxJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSB7XG4gICAgICBpZDogJzEnLFxuICAgICAgYW5zd2VyczogeyByMTogeyB2YWx1ZTogJzMnIH0gfSxcbiAgICAgIGNvbXBsZXRlQW5zd2VyOiAnXFxcXGZyYWN7eH17MTAwMH0nLFxuICAgIH07XG5cbiAgICBjb25zdCBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKGV4cHJlc3Npb25fMDgsIHNlc3Npb24sIGVudik7XG4gICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IHNjb3JlOiAxIH0pO1xuICB9KTtcblxuICBjb25zdCBlcXVhdGlvbl8wMSA9IHtcbiAgICBpZDogMSxcbiAgICBlbGVtZW50OiAnbWF0aC1pbmxpbmUnLFxuICAgIGZlZWRiYWNrRW5hYmxlZDogdHJ1ZSxcbiAgICBwcm9tcHRFbmFibGVkOiB0cnVlLFxuICAgIHJhdGlvbmFsZUVuYWJsZWQ6IHRydWUsXG4gICAgdGVhY2hlckluc3RydWN0aW9uc0VuYWJsZWQ6IHRydWUsXG4gICAgc3R1ZGVudEluc3RydWN0aW9uc0VuYWJsZWQ6IHRydWUsXG4gICAgZXF1YXRpb25FZGl0b3I6IDMsXG4gICAgdGVhY2hlckluc3RydWN0aW9uczogJycsXG4gICAgcmVzcG9uc2VUeXBlOiAnQWR2YW5jZWQgTXVsdGknLFxuICAgIGV4cHJlc3Npb246ICdcXFxcZnJhY3sxMDAwfXszfT1cXFxcZnJhY3t7cmVzcG9uc2V9fXs2fScsXG4gICAgcmF0aW9uYWxlOlxuICAgICAgJzxwPkEgY29ycmVjdCByZXNwb25zZSBpcyBzaG93biBiZWxvdzo8L3A+PHVsPjxsaT4xLzMgPSA8c3Ryb25nPjI8L3N0cm9uZz4vNjwvbGk+PGxpPjMvNCA9IDxzdHJvbmc+Njwvc3Ryb25nPi84PC9saT48bGk+My82ID0gPHN0cm9uZz4xPC9zdHJvbmc+LzI8L2xpPjwvdWw+JyxcbiAgICByZXNwb25zZXM6IFtcbiAgICAgIHtcbiAgICAgICAgYW5zd2VyOiAnXFxcXGZyYWN7MSwwMDB9ezN9PVxcXFxmcmFjezJ9ezZ9JyxcbiAgICAgICAgdmFsaWRhdGlvbjogJ2xpdGVyYWwnLFxuICAgICAgICBpZDogJzEnLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xuXG4gIGl0KCdzY29yZXMgMScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0ge1xuICAgICAgaWQ6ICcxJyxcbiAgICAgIGFuc3dlcnM6IHsgcjE6IHsgdmFsdWU6ICczJyB9IH0sXG4gICAgICBjb21wbGV0ZUFuc3dlcjogJ1xcXFxmcmFjezEwMDB9ezN9PVxcXFxmcmFjezJ9ezZ9JyxcbiAgICB9O1xuXG4gICAgY29uc3QgZW52ID0geyBtb2RlOiAnZXZhbHVhdGUnIH07XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZShlcXVhdGlvbl8wMSwgc2Vzc2lvbiwgZW52KTtcbiAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHsgc2NvcmU6IDEgfSk7XG4gIH0pO1xuXG4gIGl0KCdzY29yZXMgMCcsIGFzeW5jICgpID0+IHtcbiAgICBsYXRleEVxdWFsLm1vY2tSZXR1cm5WYWx1ZU9uY2UoZmFsc2UpO1xuICAgIGNvbnN0IHNlc3Npb24gPSB7XG4gICAgICBpZDogJzEnLFxuICAgICAgYW5zd2VyczogeyByMTogeyB2YWx1ZTogJzInIH0gfSxcbiAgICAgIGNvbXBsZXRlQW5zd2VyOiAnXFxcXGZyYWN7MX17M309XFxcXGZyYWN7MX17Nn0nLFxuICAgIH07XG5cbiAgICBjb25zdCBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKGVxdWF0aW9uXzAxLCBzZXNzaW9uLCBlbnYpO1xuICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoeyBzY29yZTogMCB9KTtcbiAgfSk7XG59KTtcbiJdfQ==