@rushstack/rush-http-build-cache-plugin 5.97.1 → 5.98.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.
Files changed (53) hide show
  1. package/.heft/build-cache/jest-cache/haste-map-bae913f9b9aa720eb4deeae0a60a4b27-22ae7f4ce9de4306889d8c05e5cc39b9-f6b1af01a3130057bdfe3d86807211f9 +0 -0
  2. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/{9d/commons_9d513d1d600f9112f73547da918dcbb7 → 2e/commons_2e52897dfe4222d991674613f5b35882} +356 -314
  3. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/34/PrefixProxyTerminalProvider_34b4603b9c4455de1c3cc05820149fdd +65 -0
  4. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/{53/index_53d9d5a344c3984994c801733764f503 → 46/index_46761981528d09d1a0e438f06cd2c548} +6 -2
  5. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/{06/ConfigurationFile_06d7f35feb0bd944d9b9a2a4d9e112c8 → 57/ConfigurationFile_57c950e8ef4673e11bff94304a50823c} +10 -4
  6. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/{68/rushlib_68c59fa059ba441c9c6883bcfed4a8d2 → 69/rushlib_695f6e29167e91482e2906a8d09b3a5a} +17 -6
  7. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/8a/HttpBuildCacheProvidertest_8a1598e1f1b42d6933964acfb7612893 +116 -0
  8. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/8a/HttpBuildCacheProvidertest_8a1598e1f1b42d6933964acfb7612893.map +1 -0
  9. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/a3/RushHttpBuildCachePlugin_a3e8a9bb172ff361907e770dcf3268be +1551 -0
  10. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/a3/RushHttpBuildCachePlugin_a3e8a9bb172ff361907e770dcf3268be.map +1 -0
  11. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/ba/TerminalWritable_ba71b4b7bfe6a26c85f4fd0245057a0a +54 -0
  12. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/{5d/Text_5da85b5db9a2f06bbe29cdcd91e6fbca → df/Text_df57ddd200e4237e617fc183dcb5fe67} +7 -1
  13. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/ec/HttpBuildCacheProvider_ecceab34e8340fa24dde11b618ffa8a4 +4668 -0
  14. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/ec/HttpBuildCacheProvider_ecceab34e8340fa24dde11b618ffa8a4.map +1 -0
  15. package/.heft/build-cache/jest-cache/perf-cache-bae913f9b9aa720eb4deeae0a60a4b27-da39a3ee5e6b4b0d3255bfef95601890 +1 -1
  16. package/.rush/temp/operation/_phase_build/state.json +1 -1
  17. package/.rush/temp/operation/_phase_test/all.log +14 -14
  18. package/.rush/temp/operation/_phase_test/state.json +1 -1
  19. package/.rush/temp/package-deps__phase_build.json +3 -3
  20. package/.rush/temp/package-deps__phase_test.json +3 -3
  21. package/.rush/temp/{rushstack+rush-http-build-cache-plugin-_phase_build-646439b80a2010050f5b4b8a916e50afae04c3ab.log → rushstack+rush-http-build-cache-plugin-_phase_build-08118e08afc6d454e5623f20498fd64b5e3e9051.log} +2 -2
  22. package/lib/HttpBuildCacheProvider.d.ts +2 -0
  23. package/lib/HttpBuildCacheProvider.d.ts.map +1 -1
  24. package/lib/HttpBuildCacheProvider.js +26 -7
  25. package/lib/HttpBuildCacheProvider.js.map +1 -1
  26. package/lib/RushHttpBuildCachePlugin.d.ts.map +1 -1
  27. package/lib/RushHttpBuildCachePlugin.js +28 -4
  28. package/lib/RushHttpBuildCachePlugin.js.map +1 -1
  29. package/lib/test/HttpBuildCacheProvider.test.d.ts.map +1 -0
  30. package/lib/{HttpBuildCacheProvider.test.js → test/HttpBuildCacheProvider.test.js} +46 -3
  31. package/lib/test/HttpBuildCacheProvider.test.js.map +1 -0
  32. package/package.json +6 -6
  33. package/rush-logs/rush-http-build-cache-plugin._phase_test.log +14 -14
  34. package/src/HttpBuildCacheProvider.ts +36 -7
  35. package/src/RushHttpBuildCachePlugin.ts +23 -28
  36. package/src/test/HttpBuildCacheProvider.test.ts +115 -0
  37. package/temp/coverage/clover.xml +117 -109
  38. package/temp/coverage/coverage-final.json +2 -2
  39. package/temp/coverage/lcov-report/HttpBuildCacheProvider.ts.html +166 -79
  40. package/temp/coverage/lcov-report/RushHttpBuildCachePlugin.ts.html +29 -44
  41. package/temp/coverage/lcov-report/index.html +24 -24
  42. package/temp/coverage/lcov-report/index.ts.html +1 -1
  43. package/temp/coverage/lcov.info +236 -218
  44. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/e5/HttpBuildCacheProvider_e53bd002cf44ae62693f20b8c4682941 +0 -4367
  45. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/e5/HttpBuildCacheProvider_e53bd002cf44ae62693f20b8c4682941.map +0 -1
  46. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/e6/RushHttpBuildCachePlugin_e69b4b7cd4f95aa49455690c88f00247 +0 -362
  47. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/e6/RushHttpBuildCachePlugin_e69b4b7cd4f95aa49455690c88f00247.map +0 -1
  48. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/f7/HttpBuildCacheProvidertest_f710af633835df558cad54cb165c14fa +0 -73
  49. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/f7/HttpBuildCacheProvidertest_f710af633835df558cad54cb165c14fa.map +0 -1
  50. package/lib/HttpBuildCacheProvider.test.d.ts.map +0 -1
  51. package/lib/HttpBuildCacheProvider.test.js.map +0 -1
  52. package/src/HttpBuildCacheProvider.test.ts +0 -58
  53. /package/lib/{HttpBuildCacheProvider.test.d.ts → test/HttpBuildCacheProvider.test.d.ts} +0 -0
@@ -0,0 +1,4668 @@
1
+ 1f6fe130d2f5ce096048c0a4ef878ac2
2
+ "use strict";
3
+
4
+ /* istanbul ignore next */
5
+ function cov_ms2xfswbr() {
6
+ var path = "/home/vsts/work/1/s/rush-plugins/rush-http-build-cache-plugin/src/HttpBuildCacheProvider.ts";
7
+ var hash = "f39662f2cf6af1c0d874c48f29702c0c9cefda13";
8
+ var global = new Function("return this")();
9
+ var gcv = "__coverage__";
10
+ var coverageData = {
11
+ path: "/home/vsts/work/1/s/rush-plugins/rush-http-build-cache-plugin/src/HttpBuildCacheProvider.ts",
12
+ statementMap: {
13
+ "0": {
14
+ start: {
15
+ line: 2,
16
+ column: 22
17
+ },
18
+ end: {
19
+ line: 4,
20
+ column: 1
21
+ }
22
+ },
23
+ "1": {
24
+ start: {
25
+ line: 3,
26
+ column: 4
27
+ },
28
+ end: {
29
+ line: 3,
30
+ column: 62
31
+ }
32
+ },
33
+ "2": {
34
+ start: {
35
+ line: 5,
36
+ column: 0
37
+ },
38
+ end: {
39
+ line: 5,
40
+ column: 62
41
+ }
42
+ },
43
+ "3": {
44
+ start: {
45
+ line: 6,
46
+ column: 0
47
+ },
48
+ end: {
49
+ line: 6,
50
+ column: 40
51
+ }
52
+ },
53
+ "4": {
54
+ start: {
55
+ line: 7,
56
+ column: 28
57
+ },
58
+ end: {
59
+ line: 7,
60
+ column: 67
61
+ }
62
+ },
63
+ "5": {
64
+ start: {
65
+ line: 8,
66
+ column: 19
67
+ },
68
+ end: {
69
+ line: 8,
70
+ column: 49
71
+ }
72
+ },
73
+ "6": {
74
+ start: {
75
+ line: 9,
76
+ column: 21
77
+ },
78
+ end: {
79
+ line: 9,
80
+ column: 59
81
+ }
82
+ },
83
+ "7": {
84
+ start: {
85
+ line: 11,
86
+ column: 0
87
+ },
88
+ end: {
89
+ line: 15,
90
+ column: 52
91
+ }
92
+ },
93
+ "8": {
94
+ start: {
95
+ line: 12,
96
+ column: 4
97
+ },
98
+ end: {
99
+ line: 12,
100
+ column: 72
101
+ }
102
+ },
103
+ "9": {
104
+ start: {
105
+ line: 13,
106
+ column: 4
107
+ },
108
+ end: {
109
+ line: 13,
110
+ column: 72
111
+ }
112
+ },
113
+ "10": {
114
+ start: {
115
+ line: 14,
116
+ column: 4
117
+ },
118
+ end: {
119
+ line: 14,
120
+ column: 64
121
+ }
122
+ },
123
+ "11": {
124
+ start: {
125
+ line: 17,
126
+ column: 0
127
+ },
128
+ end: {
129
+ line: 23,
130
+ column: 38
131
+ }
132
+ },
133
+ "12": {
134
+ start: {
135
+ line: 18,
136
+ column: 4
137
+ },
138
+ end: {
139
+ line: 18,
140
+ column: 50
141
+ }
142
+ },
143
+ "13": {
144
+ start: {
145
+ line: 19,
146
+ column: 4
147
+ },
148
+ end: {
149
+ line: 19,
150
+ column: 68
151
+ }
152
+ },
153
+ "14": {
154
+ start: {
155
+ line: 20,
156
+ column: 4
157
+ },
158
+ end: {
159
+ line: 20,
160
+ column: 56
161
+ }
162
+ },
163
+ "15": {
164
+ start: {
165
+ line: 21,
166
+ column: 4
167
+ },
168
+ end: {
169
+ line: 21,
170
+ column: 52
171
+ }
172
+ },
173
+ "16": {
174
+ start: {
175
+ line: 22,
176
+ column: 4
177
+ },
178
+ end: {
179
+ line: 22,
180
+ column: 70
181
+ }
182
+ },
183
+ "17": {
184
+ start: {
185
+ line: 24,
186
+ column: 32
187
+ },
188
+ end: {
189
+ line: 24,
190
+ column: 33
191
+ }
192
+ },
193
+ "18": {
194
+ start: {
195
+ line: 25,
196
+ column: 40
197
+ },
198
+ end: {
199
+ line: 25,
200
+ column: 44
201
+ }
202
+ },
203
+ "19": {
204
+ start: {
205
+ line: 29,
206
+ column: 8
207
+ },
208
+ end: {
209
+ line: 29,
210
+ column: 46
211
+ }
212
+ },
213
+ "20": {
214
+ start: {
215
+ line: 30,
216
+ column: 8
217
+ },
218
+ end: {
219
+ line: 30,
220
+ column: 40
221
+ }
222
+ },
223
+ "21": {
224
+ start: {
225
+ line: 31,
226
+ column: 8
227
+ },
228
+ end: {
229
+ line: 31,
230
+ column: 56
231
+ }
232
+ },
233
+ "22": {
234
+ start: {
235
+ line: 32,
236
+ column: 8
237
+ },
238
+ end: {
239
+ line: 32,
240
+ column: 95
241
+ }
242
+ },
243
+ "23": {
244
+ start: {
245
+ line: 33,
246
+ column: 8
247
+ },
248
+ end: {
249
+ line: 33,
250
+ column: 79
251
+ }
252
+ },
253
+ "24": {
254
+ start: {
255
+ line: 34,
256
+ column: 8
257
+ },
258
+ end: {
259
+ line: 34,
260
+ column: 89
261
+ }
262
+ },
263
+ "25": {
264
+ start: {
265
+ line: 35,
266
+ column: 8
267
+ },
268
+ end: {
269
+ line: 35,
270
+ column: 96
271
+ }
272
+ },
273
+ "26": {
274
+ start: {
275
+ line: 36,
276
+ column: 8
277
+ },
278
+ end: {
279
+ line: 36,
280
+ column: 83
281
+ }
282
+ },
283
+ "27": {
284
+ start: {
285
+ line: 37,
286
+ column: 8
287
+ },
288
+ end: {
289
+ line: 37,
290
+ column: 50
291
+ }
292
+ },
293
+ "28": {
294
+ start: {
295
+ line: 38,
296
+ column: 8
297
+ },
298
+ end: {
299
+ line: 38,
300
+ column: 97
301
+ }
302
+ },
303
+ "29": {
304
+ start: {
305
+ line: 39,
306
+ column: 8
307
+ },
308
+ end: {
309
+ line: 39,
310
+ column: 136
311
+ }
312
+ },
313
+ "30": {
314
+ start: {
315
+ line: 43,
316
+ column: 8
317
+ },
318
+ end: {
319
+ line: 43,
320
+ column: 155
321
+ }
322
+ },
323
+ "31": {
324
+ start: {
325
+ line: 46,
326
+ column: 8
327
+ },
328
+ end: {
329
+ line: 61,
330
+ column: 9
331
+ }
332
+ },
333
+ "32": {
334
+ start: {
335
+ line: 47,
336
+ column: 27
337
+ },
338
+ end: {
339
+ line: 55,
340
+ column: 14
341
+ }
342
+ },
343
+ "33": {
344
+ start: {
345
+ line: 56,
346
+ column: 12
347
+ },
348
+ end: {
349
+ line: 56,
350
+ column: 64
351
+ }
352
+ },
353
+ "34": {
354
+ start: {
355
+ line: 59,
356
+ column: 12
357
+ },
358
+ end: {
359
+ line: 59,
360
+ column: 73
361
+ }
362
+ },
363
+ "35": {
364
+ start: {
365
+ line: 60,
366
+ column: 12
367
+ },
368
+ end: {
369
+ line: 60,
370
+ column: 29
371
+ }
372
+ },
373
+ "36": {
374
+ start: {
375
+ line: 64,
376
+ column: 8
377
+ },
378
+ end: {
379
+ line: 67,
380
+ column: 9
381
+ }
382
+ },
383
+ "37": {
384
+ start: {
385
+ line: 65,
386
+ column: 12
387
+ },
388
+ end: {
389
+ line: 65,
390
+ column: 101
391
+ }
392
+ },
393
+ "38": {
394
+ start: {
395
+ line: 66,
396
+ column: 12
397
+ },
398
+ end: {
399
+ line: 66,
400
+ column: 25
401
+ }
402
+ },
403
+ "39": {
404
+ start: {
405
+ line: 68,
406
+ column: 8
407
+ },
408
+ end: {
409
+ line: 68,
410
+ column: 76
411
+ }
412
+ },
413
+ "40": {
414
+ start: {
415
+ line: 69,
416
+ column: 8
417
+ },
418
+ end: {
419
+ line: 84,
420
+ column: 9
421
+ }
422
+ },
423
+ "41": {
424
+ start: {
425
+ line: 70,
426
+ column: 27
427
+ },
428
+ end: {
429
+ line: 78,
430
+ column: 14
431
+ }
432
+ },
433
+ "42": {
434
+ start: {
435
+ line: 79,
436
+ column: 12
437
+ },
438
+ end: {
439
+ line: 79,
440
+ column: 36
441
+ }
442
+ },
443
+ "43": {
444
+ start: {
445
+ line: 82,
446
+ column: 12
447
+ },
448
+ end: {
449
+ line: 82,
450
+ column: 75
451
+ }
452
+ },
453
+ "44": {
454
+ start: {
455
+ line: 83,
456
+ column: 12
457
+ },
458
+ end: {
459
+ line: 83,
460
+ column: 25
461
+ }
462
+ },
463
+ "45": {
464
+ start: {
465
+ line: 87,
466
+ column: 8
467
+ },
468
+ end: {
469
+ line: 94,
470
+ column: 11
471
+ }
472
+ },
473
+ "46": {
474
+ start: {
475
+ line: 90,
476
+ column: 12
477
+ },
478
+ end: {
479
+ line: 92,
480
+ column: 15
481
+ }
482
+ },
483
+ "47": {
484
+ start: {
485
+ line: 93,
486
+ column: 12
487
+ },
488
+ end: {
489
+ line: 93,
490
+ column: 57
491
+ }
492
+ },
493
+ "48": {
494
+ start: {
495
+ line: 97,
496
+ column: 8
497
+ },
498
+ end: {
499
+ line: 102,
500
+ column: 9
501
+ }
502
+ },
503
+ "49": {
504
+ start: {
505
+ line: 98,
506
+ column: 12
507
+ },
508
+ end: {
509
+ line: 101,
510
+ column: 72
511
+ }
512
+ },
513
+ "50": {
514
+ start: {
515
+ line: 103,
516
+ column: 20
517
+ },
518
+ end: {
519
+ line: 103,
520
+ column: 93
521
+ }
522
+ },
523
+ "51": {
524
+ start: {
525
+ line: 104,
526
+ column: 8
527
+ },
528
+ end: {
529
+ line: 104,
530
+ column: 73
531
+ }
532
+ },
533
+ "52": {
534
+ start: {
535
+ line: 105,
536
+ column: 23
537
+ },
538
+ end: {
539
+ line: 105,
540
+ column: 119
541
+ }
542
+ },
543
+ "53": {
544
+ start: {
545
+ line: 106,
546
+ column: 8
547
+ },
548
+ end: {
549
+ line: 106,
550
+ column: 47
551
+ }
552
+ },
553
+ "54": {
554
+ start: {
555
+ line: 107,
556
+ column: 8
557
+ },
558
+ end: {
559
+ line: 109,
560
+ column: 9
561
+ }
562
+ },
563
+ "55": {
564
+ start: {
565
+ line: 108,
566
+ column: 12
567
+ },
568
+ end: {
569
+ line: 108,
570
+ column: 90
571
+ }
572
+ },
573
+ "56": {
574
+ start: {
575
+ line: 110,
576
+ column: 27
577
+ },
578
+ end: {
579
+ line: 110,
580
+ column: 47
581
+ }
582
+ },
583
+ "57": {
584
+ start: {
585
+ line: 111,
586
+ column: 8
587
+ },
588
+ end: {
589
+ line: 111,
590
+ column: 53
591
+ }
592
+ },
593
+ "58": {
594
+ start: {
595
+ line: 112,
596
+ column: 8
597
+ },
598
+ end: {
599
+ line: 112,
600
+ column: 69
601
+ }
602
+ },
603
+ "59": {
604
+ start: {
605
+ line: 113,
606
+ column: 8
607
+ },
608
+ end: {
609
+ line: 113,
610
+ column: 56
611
+ }
612
+ },
613
+ "60": {
614
+ start: {
615
+ line: 116,
616
+ column: 8
617
+ },
618
+ end: {
619
+ line: 121,
620
+ column: 11
621
+ }
622
+ },
623
+ "61": {
624
+ start: {
625
+ line: 119,
626
+ column: 12
627
+ },
628
+ end: {
629
+ line: 119,
630
+ column: 71
631
+ }
632
+ },
633
+ "62": {
634
+ start: {
635
+ line: 120,
636
+ column: 12
637
+ },
638
+ end: {
639
+ line: 120,
640
+ column: 57
641
+ }
642
+ },
643
+ "63": {
644
+ start: {
645
+ line: 124,
646
+ column: 8
647
+ },
648
+ end: {
649
+ line: 130,
650
+ column: 9
651
+ }
652
+ },
653
+ "64": {
654
+ start: {
655
+ line: 125,
656
+ column: 33
657
+ },
658
+ end: {
659
+ line: 125,
660
+ column: 49
661
+ }
662
+ },
663
+ "65": {
664
+ start: {
665
+ line: 126,
666
+ column: 12
667
+ },
668
+ end: {
669
+ line: 128,
670
+ column: 13
671
+ }
672
+ },
673
+ "66": {
674
+ start: {
675
+ line: 127,
676
+ column: 16
677
+ },
678
+ end: {
679
+ line: 127,
680
+ column: 55
681
+ }
682
+ },
683
+ "67": {
684
+ start: {
685
+ line: 129,
686
+ column: 12
687
+ },
688
+ end: {
689
+ line: 129,
690
+ column: 62
691
+ }
692
+ },
693
+ "68": {
694
+ start: {
695
+ line: 131,
696
+ column: 8
697
+ },
698
+ end: {
699
+ line: 131,
700
+ column: 40
701
+ }
702
+ },
703
+ "69": {
704
+ start: {
705
+ line: 134,
706
+ column: 93
707
+ },
708
+ end: {
709
+ line: 134,
710
+ column: 100
711
+ }
712
+ },
713
+ "70": {
714
+ start: {
715
+ line: 135,
716
+ column: 38
717
+ },
718
+ end: {
719
+ line: 135,
720
+ column: 146
721
+ }
722
+ },
723
+ "71": {
724
+ start: {
725
+ line: 136,
726
+ column: 28
727
+ },
728
+ end: {
729
+ line: 136,
730
+ column: 80
731
+ }
732
+ },
733
+ "72": {
734
+ start: {
735
+ line: 137,
736
+ column: 20
737
+ },
738
+ end: {
739
+ line: 137,
740
+ column: 51
741
+ }
742
+ },
743
+ "73": {
744
+ start: {
745
+ line: 138,
746
+ column: 24
747
+ },
748
+ end: {
749
+ line: 138,
750
+ column: 26
751
+ }
752
+ },
753
+ "74": {
754
+ start: {
755
+ line: 139,
756
+ column: 8
757
+ },
758
+ end: {
759
+ line: 141,
760
+ column: 9
761
+ }
762
+ },
763
+ "75": {
764
+ start: {
765
+ line: 140,
766
+ column: 12
767
+ },
768
+ end: {
769
+ line: 140,
770
+ column: 48
771
+ }
772
+ },
773
+ "76": {
774
+ start: {
775
+ line: 142,
776
+ column: 8
777
+ },
778
+ end: {
779
+ line: 146,
780
+ column: 9
781
+ }
782
+ },
783
+ "77": {
784
+ start: {
785
+ line: 143,
786
+ column: 12
787
+ },
788
+ end: {
789
+ line: 145,
790
+ column: 13
791
+ }
792
+ },
793
+ "78": {
794
+ start: {
795
+ line: 144,
796
+ column: 16
797
+ },
798
+ end: {
799
+ line: 144,
800
+ column: 37
801
+ }
802
+ },
803
+ "79": {
804
+ start: {
805
+ line: 147,
806
+ column: 27
807
+ },
808
+ end: {
809
+ line: 147,
810
+ column: 97
811
+ }
812
+ },
813
+ "80": {
814
+ start: {
815
+ line: 148,
816
+ column: 8
817
+ },
818
+ end: {
819
+ line: 148,
820
+ column: 100
821
+ }
822
+ },
823
+ "81": {
824
+ start: {
825
+ line: 149,
826
+ column: 25
827
+ },
828
+ end: {
829
+ line: 154,
830
+ column: 10
831
+ }
832
+ },
833
+ "82": {
834
+ start: {
835
+ line: 155,
836
+ column: 8
837
+ },
838
+ end: {
839
+ line: 178,
840
+ column: 9
841
+ }
842
+ },
843
+ "83": {
844
+ start: {
845
+ line: 156,
846
+ column: 44
847
+ },
848
+ end: {
849
+ line: 156,
850
+ column: 91
851
+ }
852
+ },
853
+ "84": {
854
+ start: {
855
+ line: 157,
856
+ column: 12
857
+ },
858
+ end: {
859
+ line: 166,
860
+ column: 13
861
+ }
862
+ },
863
+ "85": {
864
+ start: {
865
+ line: 165,
866
+ column: 16
867
+ },
868
+ end: {
869
+ line: 165,
870
+ column: 135
871
+ }
872
+ },
873
+ "86": {
874
+ start: {
875
+ line: 167,
876
+ column: 12
877
+ },
878
+ end: {
879
+ line: 175,
880
+ column: 13
881
+ }
882
+ },
883
+ "87": {
884
+ start: {
885
+ line: 171,
886
+ column: 31
887
+ },
888
+ end: {
889
+ line: 171,
890
+ column: 50
891
+ }
892
+ },
893
+ "88": {
894
+ start: {
895
+ line: 172,
896
+ column: 35
897
+ },
898
+ end: {
899
+ line: 172,
900
+ column: 81
901
+ }
902
+ },
903
+ "89": {
904
+ start: {
905
+ line: 173,
906
+ column: 16
907
+ },
908
+ end: {
909
+ line: 173,
910
+ column: 66
911
+ }
912
+ },
913
+ "90": {
914
+ start: {
915
+ line: 174,
916
+ column: 16
917
+ },
918
+ end: {
919
+ line: 174,
920
+ column: 125
921
+ }
922
+ },
923
+ "91": {
924
+ start: {
925
+ line: 176,
926
+ column: 12
927
+ },
928
+ end: {
929
+ line: 176,
930
+ column: 80
931
+ }
932
+ },
933
+ "92": {
934
+ start: {
935
+ line: 177,
936
+ column: 12
937
+ },
938
+ end: {
939
+ line: 177,
940
+ column: 25
941
+ }
942
+ },
943
+ "93": {
944
+ start: {
945
+ line: 179,
946
+ column: 23
947
+ },
948
+ end: {
949
+ line: 179,
950
+ column: 82
951
+ }
952
+ },
953
+ "94": {
954
+ start: {
955
+ line: 180,
956
+ column: 8
957
+ },
958
+ end: {
959
+ line: 180,
960
+ column: 147
961
+ }
962
+ },
963
+ "95": {
964
+ start: {
965
+ line: 181,
966
+ column: 8
967
+ },
968
+ end: {
969
+ line: 181,
970
+ column: 22
971
+ }
972
+ },
973
+ "96": {
974
+ start: {
975
+ line: 184,
976
+ column: 8
977
+ },
978
+ end: {
979
+ line: 186,
980
+ column: 9
981
+ }
982
+ },
983
+ "97": {
984
+ start: {
985
+ line: 185,
986
+ column: 12
987
+ },
988
+ end: {
989
+ line: 185,
990
+ column: 19
991
+ }
992
+ },
993
+ "98": {
994
+ start: {
995
+ line: 187,
996
+ column: 26
997
+ },
998
+ end: {
999
+ line: 187,
1000
+ column: 53
1001
+ }
1002
+ },
1003
+ "99": {
1004
+ start: {
1005
+ line: 188,
1006
+ column: 8
1007
+ },
1008
+ end: {
1009
+ line: 190,
1010
+ column: 9
1011
+ }
1012
+ },
1013
+ "100": {
1014
+ start: {
1015
+ line: 189,
1016
+ column: 12
1017
+ },
1018
+ end: {
1019
+ line: 189,
1020
+ column: 67
1021
+ }
1022
+ },
1023
+ "101": {
1024
+ start: {
1025
+ line: 191,
1026
+ column: 8
1027
+ },
1028
+ end: {
1029
+ line: 201,
1030
+ column: 9
1031
+ }
1032
+ },
1033
+ "102": {
1034
+ start: {
1035
+ line: 192,
1036
+ column: 12
1037
+ },
1038
+ end: {
1039
+ line: 200,
1040
+ column: 26
1041
+ }
1042
+ },
1043
+ "103": {
1044
+ start: {
1045
+ line: 202,
1046
+ column: 8
1047
+ },
1048
+ end: {
1049
+ line: 202,
1050
+ column: 27
1051
+ }
1052
+ },
1053
+ "104": {
1054
+ start: {
1055
+ line: 207,
1056
+ column: 8
1057
+ },
1058
+ end: {
1059
+ line: 211,
1060
+ column: 11
1061
+ }
1062
+ },
1063
+ "105": {
1064
+ start: {
1065
+ line: 210,
1066
+ column: 12
1067
+ },
1068
+ end: {
1069
+ line: 210,
1070
+ column: 84
1071
+ }
1072
+ },
1073
+ "106": {
1074
+ start: {
1075
+ line: 212,
1076
+ column: 8
1077
+ },
1078
+ end: {
1079
+ line: 217,
1080
+ column: 9
1081
+ }
1082
+ },
1083
+ "107": {
1084
+ start: {
1085
+ line: 213,
1086
+ column: 35
1087
+ },
1088
+ end: {
1089
+ line: 213,
1090
+ column: 110
1091
+ }
1092
+ },
1093
+ "108": {
1094
+ start: {
1095
+ line: 214,
1096
+ column: 12
1097
+ },
1098
+ end: {
1099
+ line: 216,
1100
+ column: 13
1101
+ }
1102
+ },
1103
+ "109": {
1104
+ start: {
1105
+ line: 215,
1106
+ column: 16
1107
+ },
1108
+ end: {
1109
+ line: 215,
1110
+ column: 45
1111
+ }
1112
+ },
1113
+ "110": {
1114
+ start: {
1115
+ line: 220,
1116
+ column: 8
1117
+ },
1118
+ end: {
1119
+ line: 222,
1120
+ column: 9
1121
+ }
1122
+ },
1123
+ "111": {
1124
+ start: {
1125
+ line: 221,
1126
+ column: 12
1127
+ },
1128
+ end: {
1129
+ line: 221,
1130
+ column: 36
1131
+ }
1132
+ },
1133
+ "112": {
1134
+ start: {
1135
+ line: 223,
1136
+ column: 8
1137
+ },
1138
+ end: {
1139
+ line: 255,
1140
+ column: 9
1141
+ }
1142
+ },
1143
+ "113": {
1144
+ start: {
1145
+ line: 232,
1146
+ column: 16
1147
+ },
1148
+ end: {
1149
+ line: 232,
1150
+ column: 49
1151
+ }
1152
+ },
1153
+ "114": {
1154
+ start: {
1155
+ line: 237,
1156
+ column: 16
1157
+ },
1158
+ end: {
1159
+ line: 246,
1160
+ column: 17
1161
+ }
1162
+ },
1163
+ "115": {
1164
+ start: {
1165
+ line: 245,
1166
+ column: 20
1167
+ },
1168
+ end: {
1169
+ line: 245,
1170
+ column: 44
1171
+ }
1172
+ },
1173
+ "116": {
1174
+ start: {
1175
+ line: 247,
1176
+ column: 16
1177
+ },
1178
+ end: {
1179
+ line: 247,
1180
+ column: 50
1181
+ }
1182
+ },
1183
+ "117": {
1184
+ start: {
1185
+ line: 250,
1186
+ column: 16
1187
+ },
1188
+ end: {
1189
+ line: 253,
1190
+ column: 17
1191
+ }
1192
+ },
1193
+ "118": {
1194
+ start: {
1195
+ line: 252,
1196
+ column: 20
1197
+ },
1198
+ end: {
1199
+ line: 252,
1200
+ column: 44
1201
+ }
1202
+ },
1203
+ "119": {
1204
+ start: {
1205
+ line: 257,
1206
+ column: 8
1207
+ },
1208
+ end: {
1209
+ line: 257,
1210
+ column: 35
1211
+ }
1212
+ },
1213
+ "120": {
1214
+ start: {
1215
+ line: 260,
1216
+ column: 8
1217
+ },
1218
+ end: {
1219
+ line: 289,
1220
+ column: 9
1221
+ }
1222
+ },
1223
+ "121": {
1224
+ start: {
1225
+ line: 262,
1226
+ column: 16
1227
+ },
1228
+ end: {
1229
+ line: 262,
1230
+ column: 103
1231
+ }
1232
+ },
1233
+ "122": {
1234
+ start: {
1235
+ line: 263,
1236
+ column: 16
1237
+ },
1238
+ end: {
1239
+ line: 263,
1240
+ column: 22
1241
+ }
1242
+ },
1243
+ "123": {
1244
+ start: {
1245
+ line: 266,
1246
+ column: 16
1247
+ },
1248
+ end: {
1249
+ line: 266,
1250
+ column: 105
1251
+ }
1252
+ },
1253
+ "124": {
1254
+ start: {
1255
+ line: 267,
1256
+ column: 16
1257
+ },
1258
+ end: {
1259
+ line: 267,
1260
+ column: 22
1261
+ }
1262
+ },
1263
+ "125": {
1264
+ start: {
1265
+ line: 270,
1266
+ column: 16
1267
+ },
1268
+ end: {
1269
+ line: 270,
1270
+ column: 98
1271
+ }
1272
+ },
1273
+ "126": {
1274
+ start: {
1275
+ line: 271,
1276
+ column: 16
1277
+ },
1278
+ end: {
1279
+ line: 271,
1280
+ column: 22
1281
+ }
1282
+ },
1283
+ "127": {
1284
+ start: {
1285
+ line: 274,
1286
+ column: 16
1287
+ },
1288
+ end: {
1289
+ line: 274,
1290
+ column: 103
1291
+ }
1292
+ },
1293
+ "128": {
1294
+ start: {
1295
+ line: 275,
1296
+ column: 16
1297
+ },
1298
+ end: {
1299
+ line: 275,
1300
+ column: 22
1301
+ }
1302
+ },
1303
+ "129": {
1304
+ start: {
1305
+ line: 278,
1306
+ column: 16
1307
+ },
1308
+ end: {
1309
+ line: 287,
1310
+ column: 30
1311
+ }
1312
+ },
1313
+ "130": {
1314
+ start: {
1315
+ line: 292,
1316
+ column: 0
1317
+ },
1318
+ end: {
1319
+ line: 292,
1320
+ column: 56
1321
+ }
1322
+ }
1323
+ },
1324
+ fnMap: {
1325
+ "0": {
1326
+ name: "(anonymous_0)",
1327
+ decl: {
1328
+ start: {
1329
+ line: 2,
1330
+ column: 56
1331
+ },
1332
+ end: {
1333
+ line: 2,
1334
+ column: 57
1335
+ }
1336
+ },
1337
+ loc: {
1338
+ start: {
1339
+ line: 2,
1340
+ column: 71
1341
+ },
1342
+ end: {
1343
+ line: 4,
1344
+ column: 1
1345
+ }
1346
+ },
1347
+ line: 2
1348
+ },
1349
+ "1": {
1350
+ name: "(anonymous_1)",
1351
+ decl: {
1352
+ start: {
1353
+ line: 11,
1354
+ column: 1
1355
+ },
1356
+ end: {
1357
+ line: 11,
1358
+ column: 2
1359
+ }
1360
+ },
1361
+ loc: {
1362
+ start: {
1363
+ line: 11,
1364
+ column: 31
1365
+ },
1366
+ end: {
1367
+ line: 15,
1368
+ column: 1
1369
+ }
1370
+ },
1371
+ line: 11
1372
+ },
1373
+ "2": {
1374
+ name: "(anonymous_2)",
1375
+ decl: {
1376
+ start: {
1377
+ line: 17,
1378
+ column: 1
1379
+ },
1380
+ end: {
1381
+ line: 17,
1382
+ column: 2
1383
+ }
1384
+ },
1385
+ loc: {
1386
+ start: {
1387
+ line: 17,
1388
+ column: 24
1389
+ },
1390
+ end: {
1391
+ line: 23,
1392
+ column: 1
1393
+ }
1394
+ },
1395
+ line: 17
1396
+ },
1397
+ "3": {
1398
+ name: "(anonymous_3)",
1399
+ decl: {
1400
+ start: {
1401
+ line: 27,
1402
+ column: 4
1403
+ },
1404
+ end: {
1405
+ line: 27,
1406
+ column: 5
1407
+ }
1408
+ },
1409
+ loc: {
1410
+ start: {
1411
+ line: 27,
1412
+ column: 38
1413
+ },
1414
+ end: {
1415
+ line: 40,
1416
+ column: 5
1417
+ }
1418
+ },
1419
+ line: 27
1420
+ },
1421
+ "4": {
1422
+ name: "(anonymous_4)",
1423
+ decl: {
1424
+ start: {
1425
+ line: 41,
1426
+ column: 4
1427
+ },
1428
+ end: {
1429
+ line: 41,
1430
+ column: 5
1431
+ }
1432
+ },
1433
+ loc: {
1434
+ start: {
1435
+ line: 41,
1436
+ column: 30
1437
+ },
1438
+ end: {
1439
+ line: 44,
1440
+ column: 5
1441
+ }
1442
+ },
1443
+ line: 41
1444
+ },
1445
+ "5": {
1446
+ name: "(anonymous_5)",
1447
+ decl: {
1448
+ start: {
1449
+ line: 45,
1450
+ column: 4
1451
+ },
1452
+ end: {
1453
+ line: 45,
1454
+ column: 5
1455
+ }
1456
+ },
1457
+ loc: {
1458
+ start: {
1459
+ line: 45,
1460
+ column: 61
1461
+ },
1462
+ end: {
1463
+ line: 62,
1464
+ column: 5
1465
+ }
1466
+ },
1467
+ line: 45
1468
+ },
1469
+ "6": {
1470
+ name: "(anonymous_6)",
1471
+ decl: {
1472
+ start: {
1473
+ line: 63,
1474
+ column: 4
1475
+ },
1476
+ end: {
1477
+ line: 63,
1478
+ column: 5
1479
+ }
1480
+ },
1481
+ loc: {
1482
+ start: {
1483
+ line: 63,
1484
+ column: 71
1485
+ },
1486
+ end: {
1487
+ line: 85,
1488
+ column: 5
1489
+ }
1490
+ },
1491
+ line: 63
1492
+ },
1493
+ "7": {
1494
+ name: "(anonymous_7)",
1495
+ decl: {
1496
+ start: {
1497
+ line: 86,
1498
+ column: 4
1499
+ },
1500
+ end: {
1501
+ line: 86,
1502
+ column: 5
1503
+ }
1504
+ },
1505
+ loc: {
1506
+ start: {
1507
+ line: 86,
1508
+ column: 60
1509
+ },
1510
+ end: {
1511
+ line: 95,
1512
+ column: 5
1513
+ }
1514
+ },
1515
+ line: 86
1516
+ },
1517
+ "8": {
1518
+ name: "(anonymous_8)",
1519
+ decl: {
1520
+ start: {
1521
+ line: 89,
1522
+ column: 11
1523
+ },
1524
+ end: {
1525
+ line: 89,
1526
+ column: 12
1527
+ }
1528
+ },
1529
+ loc: {
1530
+ start: {
1531
+ line: 89,
1532
+ column: 39
1533
+ },
1534
+ end: {
1535
+ line: 94,
1536
+ column: 9
1537
+ }
1538
+ },
1539
+ line: 89
1540
+ },
1541
+ "9": {
1542
+ name: "(anonymous_9)",
1543
+ decl: {
1544
+ start: {
1545
+ line: 96,
1546
+ column: 4
1547
+ },
1548
+ end: {
1549
+ line: 96,
1550
+ column: 5
1551
+ }
1552
+ },
1553
+ loc: {
1554
+ start: {
1555
+ line: 96,
1556
+ column: 59
1557
+ },
1558
+ end: {
1559
+ line: 114,
1560
+ column: 5
1561
+ }
1562
+ },
1563
+ line: 96
1564
+ },
1565
+ "10": {
1566
+ name: "(anonymous_10)",
1567
+ decl: {
1568
+ start: {
1569
+ line: 115,
1570
+ column: 4
1571
+ },
1572
+ end: {
1573
+ line: 115,
1574
+ column: 5
1575
+ }
1576
+ },
1577
+ loc: {
1578
+ start: {
1579
+ line: 115,
1580
+ column: 49
1581
+ },
1582
+ end: {
1583
+ line: 122,
1584
+ column: 5
1585
+ }
1586
+ },
1587
+ line: 115
1588
+ },
1589
+ "11": {
1590
+ name: "(anonymous_11)",
1591
+ decl: {
1592
+ start: {
1593
+ line: 118,
1594
+ column: 11
1595
+ },
1596
+ end: {
1597
+ line: 118,
1598
+ column: 12
1599
+ }
1600
+ },
1601
+ loc: {
1602
+ start: {
1603
+ line: 118,
1604
+ column: 39
1605
+ },
1606
+ end: {
1607
+ line: 121,
1608
+ column: 9
1609
+ }
1610
+ },
1611
+ line: 118
1612
+ },
1613
+ "12": {
1614
+ name: "(anonymous_12)",
1615
+ decl: {
1616
+ start: {
1617
+ line: 123,
1618
+ column: 4
1619
+ },
1620
+ end: {
1621
+ line: 123,
1622
+ column: 5
1623
+ }
1624
+ },
1625
+ loc: {
1626
+ start: {
1627
+ line: 123,
1628
+ column: 29
1629
+ },
1630
+ end: {
1631
+ line: 132,
1632
+ column: 5
1633
+ }
1634
+ },
1635
+ line: 123
1636
+ },
1637
+ "13": {
1638
+ name: "(anonymous_13)",
1639
+ decl: {
1640
+ start: {
1641
+ line: 133,
1642
+ column: 4
1643
+ },
1644
+ end: {
1645
+ line: 133,
1646
+ column: 5
1647
+ }
1648
+ },
1649
+ loc: {
1650
+ start: {
1651
+ line: 133,
1652
+ column: 25
1653
+ },
1654
+ end: {
1655
+ line: 182,
1656
+ column: 5
1657
+ }
1658
+ },
1659
+ line: 133
1660
+ },
1661
+ "14": {
1662
+ name: "(anonymous_14)",
1663
+ decl: {
1664
+ start: {
1665
+ line: 183,
1666
+ column: 4
1667
+ },
1668
+ end: {
1669
+ line: 183,
1670
+ column: 5
1671
+ }
1672
+ },
1673
+ loc: {
1674
+ start: {
1675
+ line: 183,
1676
+ column: 38
1677
+ },
1678
+ end: {
1679
+ line: 203,
1680
+ column: 5
1681
+ }
1682
+ },
1683
+ line: 183
1684
+ },
1685
+ "15": {
1686
+ name: "(anonymous_15)",
1687
+ decl: {
1688
+ start: {
1689
+ line: 204,
1690
+ column: 4
1691
+ },
1692
+ end: {
1693
+ line: 204,
1694
+ column: 5
1695
+ }
1696
+ },
1697
+ loc: {
1698
+ start: {
1699
+ line: 204,
1700
+ column: 40
1701
+ },
1702
+ end: {
1703
+ line: 218,
1704
+ column: 5
1705
+ }
1706
+ },
1707
+ line: 204
1708
+ },
1709
+ "16": {
1710
+ name: "(anonymous_16)",
1711
+ decl: {
1712
+ start: {
1713
+ line: 209,
1714
+ column: 11
1715
+ },
1716
+ end: {
1717
+ line: 209,
1718
+ column: 12
1719
+ }
1720
+ },
1721
+ loc: {
1722
+ start: {
1723
+ line: 209,
1724
+ column: 33
1725
+ },
1726
+ end: {
1727
+ line: 211,
1728
+ column: 9
1729
+ }
1730
+ },
1731
+ line: 209
1732
+ },
1733
+ "17": {
1734
+ name: "(anonymous_17)",
1735
+ decl: {
1736
+ start: {
1737
+ line: 219,
1738
+ column: 4
1739
+ },
1740
+ end: {
1741
+ line: 219,
1742
+ column: 5
1743
+ }
1744
+ },
1745
+ loc: {
1746
+ start: {
1747
+ line: 219,
1748
+ column: 57
1749
+ },
1750
+ end: {
1751
+ line: 258,
1752
+ column: 5
1753
+ }
1754
+ },
1755
+ line: 219
1756
+ },
1757
+ "18": {
1758
+ name: "(anonymous_18)",
1759
+ decl: {
1760
+ start: {
1761
+ line: 259,
1762
+ column: 4
1763
+ },
1764
+ end: {
1765
+ line: 259,
1766
+ column: 5
1767
+ }
1768
+ },
1769
+ loc: {
1770
+ start: {
1771
+ line: 259,
1772
+ column: 75
1773
+ },
1774
+ end: {
1775
+ line: 290,
1776
+ column: 5
1777
+ }
1778
+ },
1779
+ line: 259
1780
+ }
1781
+ },
1782
+ branchMap: {
1783
+ "0": {
1784
+ loc: {
1785
+ start: {
1786
+ line: 2,
1787
+ column: 22
1788
+ },
1789
+ end: {
1790
+ line: 4,
1791
+ column: 1
1792
+ }
1793
+ },
1794
+ type: "binary-expr",
1795
+ locations: [{
1796
+ start: {
1797
+ line: 2,
1798
+ column: 23
1799
+ },
1800
+ end: {
1801
+ line: 2,
1802
+ column: 27
1803
+ }
1804
+ }, {
1805
+ start: {
1806
+ line: 2,
1807
+ column: 31
1808
+ },
1809
+ end: {
1810
+ line: 2,
1811
+ column: 51
1812
+ }
1813
+ }, {
1814
+ start: {
1815
+ line: 2,
1816
+ column: 56
1817
+ },
1818
+ end: {
1819
+ line: 4,
1820
+ column: 1
1821
+ }
1822
+ }],
1823
+ line: 2
1824
+ },
1825
+ "1": {
1826
+ loc: {
1827
+ start: {
1828
+ line: 3,
1829
+ column: 11
1830
+ },
1831
+ end: {
1832
+ line: 3,
1833
+ column: 61
1834
+ }
1835
+ },
1836
+ type: "cond-expr",
1837
+ locations: [{
1838
+ start: {
1839
+ line: 3,
1840
+ column: 37
1841
+ },
1842
+ end: {
1843
+ line: 3,
1844
+ column: 40
1845
+ }
1846
+ }, {
1847
+ start: {
1848
+ line: 3,
1849
+ column: 43
1850
+ },
1851
+ end: {
1852
+ line: 3,
1853
+ column: 61
1854
+ }
1855
+ }],
1856
+ line: 3
1857
+ },
1858
+ "2": {
1859
+ loc: {
1860
+ start: {
1861
+ line: 3,
1862
+ column: 12
1863
+ },
1864
+ end: {
1865
+ line: 3,
1866
+ column: 33
1867
+ }
1868
+ },
1869
+ type: "binary-expr",
1870
+ locations: [{
1871
+ start: {
1872
+ line: 3,
1873
+ column: 12
1874
+ },
1875
+ end: {
1876
+ line: 3,
1877
+ column: 15
1878
+ }
1879
+ }, {
1880
+ start: {
1881
+ line: 3,
1882
+ column: 19
1883
+ },
1884
+ end: {
1885
+ line: 3,
1886
+ column: 33
1887
+ }
1888
+ }],
1889
+ line: 3
1890
+ },
1891
+ "3": {
1892
+ loc: {
1893
+ start: {
1894
+ line: 15,
1895
+ column: 3
1896
+ },
1897
+ end: {
1898
+ line: 15,
1899
+ column: 50
1900
+ }
1901
+ },
1902
+ type: "binary-expr",
1903
+ locations: [{
1904
+ start: {
1905
+ line: 15,
1906
+ column: 3
1907
+ },
1908
+ end: {
1909
+ line: 15,
1910
+ column: 21
1911
+ }
1912
+ }, {
1913
+ start: {
1914
+ line: 15,
1915
+ column: 26
1916
+ },
1917
+ end: {
1918
+ line: 15,
1919
+ column: 49
1920
+ }
1921
+ }],
1922
+ line: 15
1923
+ },
1924
+ "4": {
1925
+ loc: {
1926
+ start: {
1927
+ line: 23,
1928
+ column: 3
1929
+ },
1930
+ end: {
1931
+ line: 23,
1932
+ column: 36
1933
+ }
1934
+ },
1935
+ type: "binary-expr",
1936
+ locations: [{
1937
+ start: {
1938
+ line: 23,
1939
+ column: 3
1940
+ },
1941
+ end: {
1942
+ line: 23,
1943
+ column: 14
1944
+ }
1945
+ }, {
1946
+ start: {
1947
+ line: 23,
1948
+ column: 19
1949
+ },
1950
+ end: {
1951
+ line: 23,
1952
+ column: 35
1953
+ }
1954
+ }],
1955
+ line: 23
1956
+ },
1957
+ "5": {
1958
+ loc: {
1959
+ start: {
1960
+ line: 34,
1961
+ column: 28
1962
+ },
1963
+ end: {
1964
+ line: 34,
1965
+ column: 87
1966
+ }
1967
+ },
1968
+ type: "cond-expr",
1969
+ locations: [{
1970
+ start: {
1971
+ line: 34,
1972
+ column: 56
1973
+ },
1974
+ end: {
1975
+ line: 34,
1976
+ column: 67
1977
+ }
1978
+ }, {
1979
+ start: {
1980
+ line: 34,
1981
+ column: 70
1982
+ },
1983
+ end: {
1984
+ line: 34,
1985
+ column: 87
1986
+ }
1987
+ }],
1988
+ line: 34
1989
+ },
1990
+ "6": {
1991
+ loc: {
1992
+ start: {
1993
+ line: 35,
1994
+ column: 29
1995
+ },
1996
+ end: {
1997
+ line: 35,
1998
+ column: 95
1999
+ }
2000
+ },
2001
+ type: "cond-expr",
2002
+ locations: [{
2003
+ start: {
2004
+ line: 35,
2005
+ column: 85
2006
+ },
2007
+ end: {
2008
+ line: 35,
2009
+ column: 87
2010
+ }
2011
+ }, {
2012
+ start: {
2013
+ line: 35,
2014
+ column: 90
2015
+ },
2016
+ end: {
2017
+ line: 35,
2018
+ column: 95
2019
+ }
2020
+ }],
2021
+ line: 35
2022
+ },
2023
+ "7": {
2024
+ loc: {
2025
+ start: {
2026
+ line: 35,
2027
+ column: 29
2028
+ },
2029
+ end: {
2030
+ line: 35,
2031
+ column: 82
2032
+ }
2033
+ },
2034
+ type: "binary-expr",
2035
+ locations: [{
2036
+ start: {
2037
+ line: 35,
2038
+ column: 29
2039
+ },
2040
+ end: {
2041
+ line: 35,
2042
+ column: 65
2043
+ }
2044
+ }, {
2045
+ start: {
2046
+ line: 35,
2047
+ column: 69
2048
+ },
2049
+ end: {
2050
+ line: 35,
2051
+ column: 82
2052
+ }
2053
+ }],
2054
+ line: 35
2055
+ },
2056
+ "8": {
2057
+ loc: {
2058
+ start: {
2059
+ line: 36,
2060
+ column: 24
2061
+ },
2062
+ end: {
2063
+ line: 36,
2064
+ column: 82
2065
+ }
2066
+ },
2067
+ type: "cond-expr",
2068
+ locations: [{
2069
+ start: {
2070
+ line: 36,
2071
+ column: 75
2072
+ },
2073
+ end: {
2074
+ line: 36,
2075
+ column: 77
2076
+ }
2077
+ }, {
2078
+ start: {
2079
+ line: 36,
2080
+ column: 80
2081
+ },
2082
+ end: {
2083
+ line: 36,
2084
+ column: 82
2085
+ }
2086
+ }],
2087
+ line: 36
2088
+ },
2089
+ "9": {
2090
+ loc: {
2091
+ start: {
2092
+ line: 36,
2093
+ column: 24
2094
+ },
2095
+ end: {
2096
+ line: 36,
2097
+ column: 72
2098
+ }
2099
+ },
2100
+ type: "binary-expr",
2101
+ locations: [{
2102
+ start: {
2103
+ line: 36,
2104
+ column: 24
2105
+ },
2106
+ end: {
2107
+ line: 36,
2108
+ column: 55
2109
+ }
2110
+ }, {
2111
+ start: {
2112
+ line: 36,
2113
+ column: 59
2114
+ },
2115
+ end: {
2116
+ line: 36,
2117
+ column: 72
2118
+ }
2119
+ }],
2120
+ line: 36
2121
+ },
2122
+ "10": {
2123
+ loc: {
2124
+ start: {
2125
+ line: 38,
2126
+ column: 31
2127
+ },
2128
+ end: {
2129
+ line: 38,
2130
+ column: 96
2131
+ }
2132
+ },
2133
+ type: "cond-expr",
2134
+ locations: [{
2135
+ start: {
2136
+ line: 38,
2137
+ column: 89
2138
+ },
2139
+ end: {
2140
+ line: 38,
2141
+ column: 91
2142
+ }
2143
+ }, {
2144
+ start: {
2145
+ line: 38,
2146
+ column: 94
2147
+ },
2148
+ end: {
2149
+ line: 38,
2150
+ column: 96
2151
+ }
2152
+ }],
2153
+ line: 38
2154
+ },
2155
+ "11": {
2156
+ loc: {
2157
+ start: {
2158
+ line: 38,
2159
+ column: 31
2160
+ },
2161
+ end: {
2162
+ line: 38,
2163
+ column: 86
2164
+ }
2165
+ },
2166
+ type: "binary-expr",
2167
+ locations: [{
2168
+ start: {
2169
+ line: 38,
2170
+ column: 31
2171
+ },
2172
+ end: {
2173
+ line: 38,
2174
+ column: 69
2175
+ }
2176
+ }, {
2177
+ start: {
2178
+ line: 38,
2179
+ column: 73
2180
+ },
2181
+ end: {
2182
+ line: 38,
2183
+ column: 86
2184
+ }
2185
+ }],
2186
+ line: 38
2187
+ },
2188
+ "12": {
2189
+ loc: {
2190
+ start: {
2191
+ line: 39,
2192
+ column: 36
2193
+ },
2194
+ end: {
2195
+ line: 39,
2196
+ column: 135
2197
+ }
2198
+ },
2199
+ type: "cond-expr",
2200
+ locations: [{
2201
+ start: {
2202
+ line: 39,
2203
+ column: 99
2204
+ },
2205
+ end: {
2206
+ line: 39,
2207
+ column: 101
2208
+ }
2209
+ }, {
2210
+ start: {
2211
+ line: 39,
2212
+ column: 104
2213
+ },
2214
+ end: {
2215
+ line: 39,
2216
+ column: 135
2217
+ }
2218
+ }],
2219
+ line: 39
2220
+ },
2221
+ "13": {
2222
+ loc: {
2223
+ start: {
2224
+ line: 39,
2225
+ column: 36
2226
+ },
2227
+ end: {
2228
+ line: 39,
2229
+ column: 96
2230
+ }
2231
+ },
2232
+ type: "binary-expr",
2233
+ locations: [{
2234
+ start: {
2235
+ line: 39,
2236
+ column: 36
2237
+ },
2238
+ end: {
2239
+ line: 39,
2240
+ column: 79
2241
+ }
2242
+ }, {
2243
+ start: {
2244
+ line: 39,
2245
+ column: 83
2246
+ },
2247
+ end: {
2248
+ line: 39,
2249
+ column: 96
2250
+ }
2251
+ }],
2252
+ line: 39
2253
+ },
2254
+ "14": {
2255
+ loc: {
2256
+ start: {
2257
+ line: 43,
2258
+ column: 15
2259
+ },
2260
+ end: {
2261
+ line: 43,
2262
+ column: 154
2263
+ }
2264
+ },
2265
+ type: "cond-expr",
2266
+ locations: [{
2267
+ start: {
2268
+ line: 43,
2269
+ column: 109
2270
+ },
2271
+ end: {
2272
+ line: 43,
2273
+ column: 111
2274
+ }
2275
+ }, {
2276
+ start: {
2277
+ line: 43,
2278
+ column: 114
2279
+ },
2280
+ end: {
2281
+ line: 43,
2282
+ column: 154
2283
+ }
2284
+ }],
2285
+ line: 43
2286
+ },
2287
+ "15": {
2288
+ loc: {
2289
+ start: {
2290
+ line: 43,
2291
+ column: 15
2292
+ },
2293
+ end: {
2294
+ line: 43,
2295
+ column: 106
2296
+ }
2297
+ },
2298
+ type: "binary-expr",
2299
+ locations: [{
2300
+ start: {
2301
+ line: 43,
2302
+ column: 15
2303
+ },
2304
+ end: {
2305
+ line: 43,
2306
+ column: 89
2307
+ }
2308
+ }, {
2309
+ start: {
2310
+ line: 43,
2311
+ column: 93
2312
+ },
2313
+ end: {
2314
+ line: 43,
2315
+ column: 106
2316
+ }
2317
+ }],
2318
+ line: 43
2319
+ },
2320
+ "16": {
2321
+ loc: {
2322
+ start: {
2323
+ line: 56,
2324
+ column: 19
2325
+ },
2326
+ end: {
2327
+ line: 56,
2328
+ column: 63
2329
+ }
2330
+ },
2331
+ type: "cond-expr",
2332
+ locations: [{
2333
+ start: {
2334
+ line: 56,
2335
+ column: 45
2336
+ },
2337
+ end: {
2338
+ line: 56,
2339
+ column: 51
2340
+ }
2341
+ }, {
2342
+ start: {
2343
+ line: 56,
2344
+ column: 54
2345
+ },
2346
+ end: {
2347
+ line: 56,
2348
+ column: 63
2349
+ }
2350
+ }],
2351
+ line: 56
2352
+ },
2353
+ "17": {
2354
+ loc: {
2355
+ start: {
2356
+ line: 64,
2357
+ column: 8
2358
+ },
2359
+ end: {
2360
+ line: 67,
2361
+ column: 9
2362
+ }
2363
+ },
2364
+ type: "if",
2365
+ locations: [{
2366
+ start: {
2367
+ line: 64,
2368
+ column: 8
2369
+ },
2370
+ end: {
2371
+ line: 67,
2372
+ column: 9
2373
+ }
2374
+ }, {
2375
+ start: {
2376
+ line: undefined,
2377
+ column: undefined
2378
+ },
2379
+ end: {
2380
+ line: undefined,
2381
+ column: undefined
2382
+ }
2383
+ }],
2384
+ line: 64
2385
+ },
2386
+ "18": {
2387
+ loc: {
2388
+ start: {
2389
+ line: 97,
2390
+ column: 8
2391
+ },
2392
+ end: {
2393
+ line: 102,
2394
+ column: 9
2395
+ }
2396
+ },
2397
+ type: "if",
2398
+ locations: [{
2399
+ start: {
2400
+ line: 97,
2401
+ column: 8
2402
+ },
2403
+ end: {
2404
+ line: 102,
2405
+ column: 9
2406
+ }
2407
+ }, {
2408
+ start: {
2409
+ line: undefined,
2410
+ column: undefined
2411
+ },
2412
+ end: {
2413
+ line: undefined,
2414
+ column: undefined
2415
+ }
2416
+ }],
2417
+ line: 97
2418
+ },
2419
+ "19": {
2420
+ loc: {
2421
+ start: {
2422
+ line: 103,
2423
+ column: 51
2424
+ },
2425
+ end: {
2426
+ line: 103,
2427
+ column: 80
2428
+ }
2429
+ },
2430
+ type: "binary-expr",
2431
+ locations: [{
2432
+ start: {
2433
+ line: 103,
2434
+ column: 51
2435
+ },
2436
+ end: {
2437
+ line: 103,
2438
+ column: 74
2439
+ }
2440
+ }, {
2441
+ start: {
2442
+ line: 103,
2443
+ column: 78
2444
+ },
2445
+ end: {
2446
+ line: 103,
2447
+ column: 80
2448
+ }
2449
+ }],
2450
+ line: 103
2451
+ },
2452
+ "20": {
2453
+ loc: {
2454
+ start: {
2455
+ line: 105,
2456
+ column: 89
2457
+ },
2458
+ end: {
2459
+ line: 105,
2460
+ column: 118
2461
+ }
2462
+ },
2463
+ type: "binary-expr",
2464
+ locations: [{
2465
+ start: {
2466
+ line: 105,
2467
+ column: 89
2468
+ },
2469
+ end: {
2470
+ line: 105,
2471
+ column: 112
2472
+ }
2473
+ }, {
2474
+ start: {
2475
+ line: 105,
2476
+ column: 116
2477
+ },
2478
+ end: {
2479
+ line: 105,
2480
+ column: 118
2481
+ }
2482
+ }],
2483
+ line: 105
2484
+ },
2485
+ "21": {
2486
+ loc: {
2487
+ start: {
2488
+ line: 107,
2489
+ column: 8
2490
+ },
2491
+ end: {
2492
+ line: 109,
2493
+ column: 9
2494
+ }
2495
+ },
2496
+ type: "if",
2497
+ locations: [{
2498
+ start: {
2499
+ line: 107,
2500
+ column: 8
2501
+ },
2502
+ end: {
2503
+ line: 109,
2504
+ column: 9
2505
+ }
2506
+ }, {
2507
+ start: {
2508
+ line: undefined,
2509
+ column: undefined
2510
+ },
2511
+ end: {
2512
+ line: undefined,
2513
+ column: undefined
2514
+ }
2515
+ }],
2516
+ line: 107
2517
+ },
2518
+ "22": {
2519
+ loc: {
2520
+ start: {
2521
+ line: 124,
2522
+ column: 8
2523
+ },
2524
+ end: {
2525
+ line: 130,
2526
+ column: 9
2527
+ }
2528
+ },
2529
+ type: "if",
2530
+ locations: [{
2531
+ start: {
2532
+ line: 124,
2533
+ column: 8
2534
+ },
2535
+ end: {
2536
+ line: 130,
2537
+ column: 9
2538
+ }
2539
+ }, {
2540
+ start: {
2541
+ line: undefined,
2542
+ column: undefined
2543
+ },
2544
+ end: {
2545
+ line: undefined,
2546
+ column: undefined
2547
+ }
2548
+ }],
2549
+ line: 124
2550
+ },
2551
+ "23": {
2552
+ loc: {
2553
+ start: {
2554
+ line: 126,
2555
+ column: 12
2556
+ },
2557
+ end: {
2558
+ line: 128,
2559
+ column: 13
2560
+ }
2561
+ },
2562
+ type: "if",
2563
+ locations: [{
2564
+ start: {
2565
+ line: 126,
2566
+ column: 12
2567
+ },
2568
+ end: {
2569
+ line: 128,
2570
+ column: 13
2571
+ }
2572
+ }, {
2573
+ start: {
2574
+ line: undefined,
2575
+ column: undefined
2576
+ },
2577
+ end: {
2578
+ line: undefined,
2579
+ column: undefined
2580
+ }
2581
+ }],
2582
+ line: 126
2583
+ },
2584
+ "24": {
2585
+ loc: {
2586
+ start: {
2587
+ line: 135,
2588
+ column: 38
2589
+ },
2590
+ end: {
2591
+ line: 135,
2592
+ column: 146
2593
+ }
2594
+ },
2595
+ type: "cond-expr",
2596
+ locations: [{
2597
+ start: {
2598
+ line: 135,
2599
+ column: 99
2600
+ },
2601
+ end: {
2602
+ line: 135,
2603
+ column: 116
2604
+ }
2605
+ }, {
2606
+ start: {
2607
+ line: 135,
2608
+ column: 119
2609
+ },
2610
+ end: {
2611
+ line: 135,
2612
+ column: 146
2613
+ }
2614
+ }],
2615
+ line: 135
2616
+ },
2617
+ "25": {
2618
+ loc: {
2619
+ start: {
2620
+ line: 135,
2621
+ column: 38
2622
+ },
2623
+ end: {
2624
+ line: 135,
2625
+ column: 96
2626
+ }
2627
+ },
2628
+ type: "binary-expr",
2629
+ locations: [{
2630
+ start: {
2631
+ line: 135,
2632
+ column: 38
2633
+ },
2634
+ end: {
2635
+ line: 135,
2636
+ column: 64
2637
+ }
2638
+ }, {
2639
+ start: {
2640
+ line: 135,
2641
+ column: 68
2642
+ },
2643
+ end: {
2644
+ line: 135,
2645
+ column: 96
2646
+ }
2647
+ }],
2648
+ line: 135
2649
+ },
2650
+ "26": {
2651
+ loc: {
2652
+ start: {
2653
+ line: 139,
2654
+ column: 8
2655
+ },
2656
+ end: {
2657
+ line: 141,
2658
+ column: 9
2659
+ }
2660
+ },
2661
+ type: "if",
2662
+ locations: [{
2663
+ start: {
2664
+ line: 139,
2665
+ column: 8
2666
+ },
2667
+ end: {
2668
+ line: 141,
2669
+ column: 9
2670
+ }
2671
+ }, {
2672
+ start: {
2673
+ line: undefined,
2674
+ column: undefined
2675
+ },
2676
+ end: {
2677
+ line: undefined,
2678
+ column: undefined
2679
+ }
2680
+ }],
2681
+ line: 139
2682
+ },
2683
+ "27": {
2684
+ loc: {
2685
+ start: {
2686
+ line: 143,
2687
+ column: 12
2688
+ },
2689
+ end: {
2690
+ line: 145,
2691
+ column: 13
2692
+ }
2693
+ },
2694
+ type: "if",
2695
+ locations: [{
2696
+ start: {
2697
+ line: 143,
2698
+ column: 12
2699
+ },
2700
+ end: {
2701
+ line: 145,
2702
+ column: 13
2703
+ }
2704
+ }, {
2705
+ start: {
2706
+ line: undefined,
2707
+ column: undefined
2708
+ },
2709
+ end: {
2710
+ line: undefined,
2711
+ column: undefined
2712
+ }
2713
+ }],
2714
+ line: 143
2715
+ },
2716
+ "28": {
2717
+ loc: {
2718
+ start: {
2719
+ line: 147,
2720
+ column: 27
2721
+ },
2722
+ end: {
2723
+ line: 147,
2724
+ column: 97
2725
+ }
2726
+ },
2727
+ type: "binary-expr",
2728
+ locations: [{
2729
+ start: {
2730
+ line: 147,
2731
+ column: 28
2732
+ },
2733
+ end: {
2734
+ line: 147,
2735
+ column: 83
2736
+ }
2737
+ }, {
2738
+ start: {
2739
+ line: 147,
2740
+ column: 88
2741
+ },
2742
+ end: {
2743
+ line: 147,
2744
+ column: 97
2745
+ }
2746
+ }],
2747
+ line: 147
2748
+ },
2749
+ "29": {
2750
+ loc: {
2751
+ start: {
2752
+ line: 147,
2753
+ column: 28
2754
+ },
2755
+ end: {
2756
+ line: 147,
2757
+ column: 83
2758
+ }
2759
+ },
2760
+ type: "cond-expr",
2761
+ locations: [{
2762
+ start: {
2763
+ line: 147,
2764
+ column: 63
2765
+ },
2766
+ end: {
2767
+ line: 147,
2768
+ column: 69
2769
+ }
2770
+ }, {
2771
+ start: {
2772
+ line: 147,
2773
+ column: 72
2774
+ },
2775
+ end: {
2776
+ line: 147,
2777
+ column: 83
2778
+ }
2779
+ }],
2780
+ line: 147
2781
+ },
2782
+ "30": {
2783
+ loc: {
2784
+ start: {
2785
+ line: 147,
2786
+ column: 28
2787
+ },
2788
+ end: {
2789
+ line: 147,
2790
+ column: 60
2791
+ }
2792
+ },
2793
+ type: "binary-expr",
2794
+ locations: [{
2795
+ start: {
2796
+ line: 147,
2797
+ column: 28
2798
+ },
2799
+ end: {
2800
+ line: 147,
2801
+ column: 41
2802
+ }
2803
+ }, {
2804
+ start: {
2805
+ line: 147,
2806
+ column: 45
2807
+ },
2808
+ end: {
2809
+ line: 147,
2810
+ column: 60
2811
+ }
2812
+ }],
2813
+ line: 147
2814
+ },
2815
+ "31": {
2816
+ loc: {
2817
+ start: {
2818
+ line: 155,
2819
+ column: 8
2820
+ },
2821
+ end: {
2822
+ line: 178,
2823
+ column: 9
2824
+ }
2825
+ },
2826
+ type: "if",
2827
+ locations: [{
2828
+ start: {
2829
+ line: 155,
2830
+ column: 8
2831
+ },
2832
+ end: {
2833
+ line: 178,
2834
+ column: 9
2835
+ }
2836
+ }, {
2837
+ start: {
2838
+ line: undefined,
2839
+ column: undefined
2840
+ },
2841
+ end: {
2842
+ line: undefined,
2843
+ column: undefined
2844
+ }
2845
+ }],
2846
+ line: 155
2847
+ },
2848
+ "32": {
2849
+ loc: {
2850
+ start: {
2851
+ line: 156,
2852
+ column: 44
2853
+ },
2854
+ end: {
2855
+ line: 156,
2856
+ column: 91
2857
+ }
2858
+ },
2859
+ type: "binary-expr",
2860
+ locations: [{
2861
+ start: {
2862
+ line: 156,
2863
+ column: 44
2864
+ },
2865
+ end: {
2866
+ line: 156,
2867
+ column: 66
2868
+ }
2869
+ }, {
2870
+ start: {
2871
+ line: 156,
2872
+ column: 70
2873
+ },
2874
+ end: {
2875
+ line: 156,
2876
+ column: 91
2877
+ }
2878
+ }],
2879
+ line: 156
2880
+ },
2881
+ "33": {
2882
+ loc: {
2883
+ start: {
2884
+ line: 157,
2885
+ column: 12
2886
+ },
2887
+ end: {
2888
+ line: 166,
2889
+ column: 13
2890
+ }
2891
+ },
2892
+ type: "if",
2893
+ locations: [{
2894
+ start: {
2895
+ line: 157,
2896
+ column: 12
2897
+ },
2898
+ end: {
2899
+ line: 166,
2900
+ column: 13
2901
+ }
2902
+ }, {
2903
+ start: {
2904
+ line: undefined,
2905
+ column: undefined
2906
+ },
2907
+ end: {
2908
+ line: undefined,
2909
+ column: undefined
2910
+ }
2911
+ }],
2912
+ line: 157
2913
+ },
2914
+ "34": {
2915
+ loc: {
2916
+ start: {
2917
+ line: 157,
2918
+ column: 16
2919
+ },
2920
+ end: {
2921
+ line: 159,
2922
+ column: 69
2923
+ }
2924
+ },
2925
+ type: "binary-expr",
2926
+ locations: [{
2927
+ start: {
2928
+ line: 157,
2929
+ column: 16
2930
+ },
2931
+ end: {
2932
+ line: 157,
2933
+ column: 40
2934
+ }
2935
+ }, {
2936
+ start: {
2937
+ line: 158,
2938
+ column: 16
2939
+ },
2940
+ end: {
2941
+ line: 158,
2942
+ column: 47
2943
+ }
2944
+ }, {
2945
+ start: {
2946
+ line: 159,
2947
+ column: 16
2948
+ },
2949
+ end: {
2950
+ line: 159,
2951
+ column: 69
2952
+ }
2953
+ }],
2954
+ line: 157
2955
+ },
2956
+ "35": {
2957
+ loc: {
2958
+ start: {
2959
+ line: 167,
2960
+ column: 12
2961
+ },
2962
+ end: {
2963
+ line: 175,
2964
+ column: 13
2965
+ }
2966
+ },
2967
+ type: "if",
2968
+ locations: [{
2969
+ start: {
2970
+ line: 167,
2971
+ column: 12
2972
+ },
2973
+ end: {
2974
+ line: 175,
2975
+ column: 13
2976
+ }
2977
+ }, {
2978
+ start: {
2979
+ line: undefined,
2980
+ column: undefined
2981
+ },
2982
+ end: {
2983
+ line: undefined,
2984
+ column: undefined
2985
+ }
2986
+ }],
2987
+ line: 167
2988
+ },
2989
+ "36": {
2990
+ loc: {
2991
+ start: {
2992
+ line: 179,
2993
+ column: 23
2994
+ },
2995
+ end: {
2996
+ line: 179,
2997
+ column: 82
2998
+ }
2999
+ },
3000
+ type: "cond-expr",
3001
+ locations: [{
3002
+ start: {
3003
+ line: 179,
3004
+ column: 34
3005
+ },
3006
+ end: {
3007
+ line: 179,
3008
+ column: 75
3009
+ }
3010
+ }, {
3011
+ start: {
3012
+ line: 179,
3013
+ column: 78
3014
+ },
3015
+ end: {
3016
+ line: 179,
3017
+ column: 82
3018
+ }
3019
+ }],
3020
+ line: 179
3021
+ },
3022
+ "37": {
3023
+ loc: {
3024
+ start: {
3025
+ line: 180,
3026
+ column: 97
3027
+ },
3028
+ end: {
3029
+ line: 180,
3030
+ column: 137
3031
+ }
3032
+ },
3033
+ type: "cond-expr",
3034
+ locations: [{
3035
+ start: {
3036
+ line: 180,
3037
+ column: 115
3038
+ },
3039
+ end: {
3040
+ line: 180,
3041
+ column: 121
3042
+ }
3043
+ }, {
3044
+ start: {
3045
+ line: 180,
3046
+ column: 124
3047
+ },
3048
+ end: {
3049
+ line: 180,
3050
+ column: 137
3051
+ }
3052
+ }],
3053
+ line: 180
3054
+ },
3055
+ "38": {
3056
+ loc: {
3057
+ start: {
3058
+ line: 184,
3059
+ column: 8
3060
+ },
3061
+ end: {
3062
+ line: 186,
3063
+ column: 9
3064
+ }
3065
+ },
3066
+ type: "if",
3067
+ locations: [{
3068
+ start: {
3069
+ line: 184,
3070
+ column: 8
3071
+ },
3072
+ end: {
3073
+ line: 186,
3074
+ column: 9
3075
+ }
3076
+ }, {
3077
+ start: {
3078
+ line: undefined,
3079
+ column: undefined
3080
+ },
3081
+ end: {
3082
+ line: undefined,
3083
+ column: undefined
3084
+ }
3085
+ }],
3086
+ line: 184
3087
+ },
3088
+ "39": {
3089
+ loc: {
3090
+ start: {
3091
+ line: 188,
3092
+ column: 8
3093
+ },
3094
+ end: {
3095
+ line: 190,
3096
+ column: 9
3097
+ }
3098
+ },
3099
+ type: "if",
3100
+ locations: [{
3101
+ start: {
3102
+ line: 188,
3103
+ column: 8
3104
+ },
3105
+ end: {
3106
+ line: 190,
3107
+ column: 9
3108
+ }
3109
+ }, {
3110
+ start: {
3111
+ line: undefined,
3112
+ column: undefined
3113
+ },
3114
+ end: {
3115
+ line: undefined,
3116
+ column: undefined
3117
+ }
3118
+ }],
3119
+ line: 188
3120
+ },
3121
+ "40": {
3122
+ loc: {
3123
+ start: {
3124
+ line: 191,
3125
+ column: 8
3126
+ },
3127
+ end: {
3128
+ line: 201,
3129
+ column: 9
3130
+ }
3131
+ },
3132
+ type: "if",
3133
+ locations: [{
3134
+ start: {
3135
+ line: 191,
3136
+ column: 8
3137
+ },
3138
+ end: {
3139
+ line: 201,
3140
+ column: 9
3141
+ }
3142
+ }, {
3143
+ start: {
3144
+ line: undefined,
3145
+ column: undefined
3146
+ },
3147
+ end: {
3148
+ line: undefined,
3149
+ column: undefined
3150
+ }
3151
+ }],
3152
+ line: 191
3153
+ },
3154
+ "41": {
3155
+ loc: {
3156
+ start: {
3157
+ line: 191,
3158
+ column: 12
3159
+ },
3160
+ end: {
3161
+ line: 191,
3162
+ column: 86
3163
+ }
3164
+ },
3165
+ type: "binary-expr",
3166
+ locations: [{
3167
+ start: {
3168
+ line: 191,
3169
+ column: 12
3170
+ },
3171
+ end: {
3172
+ line: 191,
3173
+ column: 43
3174
+ }
3175
+ }, {
3176
+ start: {
3177
+ line: 191,
3178
+ column: 47
3179
+ },
3180
+ end: {
3181
+ line: 191,
3182
+ column: 86
3183
+ }
3184
+ }],
3185
+ line: 191
3186
+ },
3187
+ "42": {
3188
+ loc: {
3189
+ start: {
3190
+ line: 212,
3191
+ column: 8
3192
+ },
3193
+ end: {
3194
+ line: 217,
3195
+ column: 9
3196
+ }
3197
+ },
3198
+ type: "if",
3199
+ locations: [{
3200
+ start: {
3201
+ line: 212,
3202
+ column: 8
3203
+ },
3204
+ end: {
3205
+ line: 217,
3206
+ column: 9
3207
+ }
3208
+ }, {
3209
+ start: {
3210
+ line: undefined,
3211
+ column: undefined
3212
+ },
3213
+ end: {
3214
+ line: undefined,
3215
+ column: undefined
3216
+ }
3217
+ }],
3218
+ line: 212
3219
+ },
3220
+ "43": {
3221
+ loc: {
3222
+ start: {
3223
+ line: 213,
3224
+ column: 35
3225
+ },
3226
+ end: {
3227
+ line: 213,
3228
+ column: 110
3229
+ }
3230
+ },
3231
+ type: "cond-expr",
3232
+ locations: [{
3233
+ start: {
3234
+ line: 213,
3235
+ column: 89
3236
+ },
3237
+ end: {
3238
+ line: 213,
3239
+ column: 95
3240
+ }
3241
+ }, {
3242
+ start: {
3243
+ line: 213,
3244
+ column: 98
3245
+ },
3246
+ end: {
3247
+ line: 213,
3248
+ column: 110
3249
+ }
3250
+ }],
3251
+ line: 213
3252
+ },
3253
+ "44": {
3254
+ loc: {
3255
+ start: {
3256
+ line: 213,
3257
+ column: 35
3258
+ },
3259
+ end: {
3260
+ line: 213,
3261
+ column: 86
3262
+ }
3263
+ },
3264
+ type: "binary-expr",
3265
+ locations: [{
3266
+ start: {
3267
+ line: 213,
3268
+ column: 35
3269
+ },
3270
+ end: {
3271
+ line: 213,
3272
+ column: 69
3273
+ }
3274
+ }, {
3275
+ start: {
3276
+ line: 213,
3277
+ column: 73
3278
+ },
3279
+ end: {
3280
+ line: 213,
3281
+ column: 86
3282
+ }
3283
+ }],
3284
+ line: 213
3285
+ },
3286
+ "45": {
3287
+ loc: {
3288
+ start: {
3289
+ line: 214,
3290
+ column: 12
3291
+ },
3292
+ end: {
3293
+ line: 216,
3294
+ column: 13
3295
+ }
3296
+ },
3297
+ type: "if",
3298
+ locations: [{
3299
+ start: {
3300
+ line: 214,
3301
+ column: 12
3302
+ },
3303
+ end: {
3304
+ line: 216,
3305
+ column: 13
3306
+ }
3307
+ }, {
3308
+ start: {
3309
+ line: undefined,
3310
+ column: undefined
3311
+ },
3312
+ end: {
3313
+ line: undefined,
3314
+ column: undefined
3315
+ }
3316
+ }],
3317
+ line: 214
3318
+ },
3319
+ "46": {
3320
+ loc: {
3321
+ start: {
3322
+ line: 214,
3323
+ column: 16
3324
+ },
3325
+ end: {
3326
+ line: 214,
3327
+ column: 63
3328
+ }
3329
+ },
3330
+ type: "binary-expr",
3331
+ locations: [{
3332
+ start: {
3333
+ line: 214,
3334
+ column: 16
3335
+ },
3336
+ end: {
3337
+ line: 214,
3338
+ column: 31
3339
+ }
3340
+ }, {
3341
+ start: {
3342
+ line: 214,
3343
+ column: 35
3344
+ },
3345
+ end: {
3346
+ line: 214,
3347
+ column: 63
3348
+ }
3349
+ }],
3350
+ line: 214
3351
+ },
3352
+ "47": {
3353
+ loc: {
3354
+ start: {
3355
+ line: 220,
3356
+ column: 8
3357
+ },
3358
+ end: {
3359
+ line: 222,
3360
+ column: 9
3361
+ }
3362
+ },
3363
+ type: "if",
3364
+ locations: [{
3365
+ start: {
3366
+ line: 220,
3367
+ column: 8
3368
+ },
3369
+ end: {
3370
+ line: 222,
3371
+ column: 9
3372
+ }
3373
+ }, {
3374
+ start: {
3375
+ line: undefined,
3376
+ column: undefined
3377
+ },
3378
+ end: {
3379
+ line: undefined,
3380
+ column: undefined
3381
+ }
3382
+ }],
3383
+ line: 220
3384
+ },
3385
+ "48": {
3386
+ loc: {
3387
+ start: {
3388
+ line: 223,
3389
+ column: 8
3390
+ },
3391
+ end: {
3392
+ line: 255,
3393
+ column: 9
3394
+ }
3395
+ },
3396
+ type: "switch",
3397
+ locations: [{
3398
+ start: {
3399
+ line: 224,
3400
+ column: 12
3401
+ },
3402
+ end: {
3403
+ line: 233,
3404
+ column: 13
3405
+ }
3406
+ }, {
3407
+ start: {
3408
+ line: 234,
3409
+ column: 12
3410
+ },
3411
+ end: {
3412
+ line: 234,
3413
+ column: 21
3414
+ }
3415
+ }, {
3416
+ start: {
3417
+ line: 235,
3418
+ column: 12
3419
+ },
3420
+ end: {
3421
+ line: 235,
3422
+ column: 21
3423
+ }
3424
+ }, {
3425
+ start: {
3426
+ line: 236,
3427
+ column: 12
3428
+ },
3429
+ end: {
3430
+ line: 248,
3431
+ column: 13
3432
+ }
3433
+ }, {
3434
+ start: {
3435
+ line: 249,
3436
+ column: 12
3437
+ },
3438
+ end: {
3439
+ line: 254,
3440
+ column: 13
3441
+ }
3442
+ }],
3443
+ line: 223
3444
+ },
3445
+ "49": {
3446
+ loc: {
3447
+ start: {
3448
+ line: 237,
3449
+ column: 16
3450
+ },
3451
+ end: {
3452
+ line: 246,
3453
+ column: 17
3454
+ }
3455
+ },
3456
+ type: "if",
3457
+ locations: [{
3458
+ start: {
3459
+ line: 237,
3460
+ column: 16
3461
+ },
3462
+ end: {
3463
+ line: 246,
3464
+ column: 17
3465
+ }
3466
+ }, {
3467
+ start: {
3468
+ line: undefined,
3469
+ column: undefined
3470
+ },
3471
+ end: {
3472
+ line: undefined,
3473
+ column: undefined
3474
+ }
3475
+ }],
3476
+ line: 237
3477
+ },
3478
+ "50": {
3479
+ loc: {
3480
+ start: {
3481
+ line: 237,
3482
+ column: 20
3483
+ },
3484
+ end: {
3485
+ line: 237,
3486
+ column: 82
3487
+ }
3488
+ },
3489
+ type: "binary-expr",
3490
+ locations: [{
3491
+ start: {
3492
+ line: 237,
3493
+ column: 20
3494
+ },
3495
+ end: {
3496
+ line: 237,
3497
+ column: 43
3498
+ }
3499
+ }, {
3500
+ start: {
3501
+ line: 237,
3502
+ column: 48
3503
+ },
3504
+ end: {
3505
+ line: 237,
3506
+ column: 58
3507
+ }
3508
+ }, {
3509
+ start: {
3510
+ line: 237,
3511
+ column: 62
3512
+ },
3513
+ end: {
3514
+ line: 237,
3515
+ column: 81
3516
+ }
3517
+ }],
3518
+ line: 237
3519
+ },
3520
+ "51": {
3521
+ loc: {
3522
+ start: {
3523
+ line: 250,
3524
+ column: 16
3525
+ },
3526
+ end: {
3527
+ line: 253,
3528
+ column: 17
3529
+ }
3530
+ },
3531
+ type: "if",
3532
+ locations: [{
3533
+ start: {
3534
+ line: 250,
3535
+ column: 16
3536
+ },
3537
+ end: {
3538
+ line: 253,
3539
+ column: 17
3540
+ }
3541
+ }, {
3542
+ start: {
3543
+ line: undefined,
3544
+ column: undefined
3545
+ },
3546
+ end: {
3547
+ line: undefined,
3548
+ column: undefined
3549
+ }
3550
+ }],
3551
+ line: 250
3552
+ },
3553
+ "52": {
3554
+ loc: {
3555
+ start: {
3556
+ line: 260,
3557
+ column: 8
3558
+ },
3559
+ end: {
3560
+ line: 289,
3561
+ column: 9
3562
+ }
3563
+ },
3564
+ type: "switch",
3565
+ locations: [{
3566
+ start: {
3567
+ line: 261,
3568
+ column: 12
3569
+ },
3570
+ end: {
3571
+ line: 264,
3572
+ column: 13
3573
+ }
3574
+ }, {
3575
+ start: {
3576
+ line: 265,
3577
+ column: 12
3578
+ },
3579
+ end: {
3580
+ line: 268,
3581
+ column: 13
3582
+ }
3583
+ }, {
3584
+ start: {
3585
+ line: 269,
3586
+ column: 12
3587
+ },
3588
+ end: {
3589
+ line: 272,
3590
+ column: 13
3591
+ }
3592
+ }, {
3593
+ start: {
3594
+ line: 273,
3595
+ column: 12
3596
+ },
3597
+ end: {
3598
+ line: 276,
3599
+ column: 13
3600
+ }
3601
+ }, {
3602
+ start: {
3603
+ line: 277,
3604
+ column: 12
3605
+ },
3606
+ end: {
3607
+ line: 288,
3608
+ column: 13
3609
+ }
3610
+ }],
3611
+ line: 260
3612
+ }
3613
+ },
3614
+ s: {
3615
+ "0": 0,
3616
+ "1": 0,
3617
+ "2": 0,
3618
+ "3": 0,
3619
+ "4": 0,
3620
+ "5": 0,
3621
+ "6": 0,
3622
+ "7": 0,
3623
+ "8": 0,
3624
+ "9": 0,
3625
+ "10": 0,
3626
+ "11": 0,
3627
+ "12": 0,
3628
+ "13": 0,
3629
+ "14": 0,
3630
+ "15": 0,
3631
+ "16": 0,
3632
+ "17": 0,
3633
+ "18": 0,
3634
+ "19": 0,
3635
+ "20": 0,
3636
+ "21": 0,
3637
+ "22": 0,
3638
+ "23": 0,
3639
+ "24": 0,
3640
+ "25": 0,
3641
+ "26": 0,
3642
+ "27": 0,
3643
+ "28": 0,
3644
+ "29": 0,
3645
+ "30": 0,
3646
+ "31": 0,
3647
+ "32": 0,
3648
+ "33": 0,
3649
+ "34": 0,
3650
+ "35": 0,
3651
+ "36": 0,
3652
+ "37": 0,
3653
+ "38": 0,
3654
+ "39": 0,
3655
+ "40": 0,
3656
+ "41": 0,
3657
+ "42": 0,
3658
+ "43": 0,
3659
+ "44": 0,
3660
+ "45": 0,
3661
+ "46": 0,
3662
+ "47": 0,
3663
+ "48": 0,
3664
+ "49": 0,
3665
+ "50": 0,
3666
+ "51": 0,
3667
+ "52": 0,
3668
+ "53": 0,
3669
+ "54": 0,
3670
+ "55": 0,
3671
+ "56": 0,
3672
+ "57": 0,
3673
+ "58": 0,
3674
+ "59": 0,
3675
+ "60": 0,
3676
+ "61": 0,
3677
+ "62": 0,
3678
+ "63": 0,
3679
+ "64": 0,
3680
+ "65": 0,
3681
+ "66": 0,
3682
+ "67": 0,
3683
+ "68": 0,
3684
+ "69": 0,
3685
+ "70": 0,
3686
+ "71": 0,
3687
+ "72": 0,
3688
+ "73": 0,
3689
+ "74": 0,
3690
+ "75": 0,
3691
+ "76": 0,
3692
+ "77": 0,
3693
+ "78": 0,
3694
+ "79": 0,
3695
+ "80": 0,
3696
+ "81": 0,
3697
+ "82": 0,
3698
+ "83": 0,
3699
+ "84": 0,
3700
+ "85": 0,
3701
+ "86": 0,
3702
+ "87": 0,
3703
+ "88": 0,
3704
+ "89": 0,
3705
+ "90": 0,
3706
+ "91": 0,
3707
+ "92": 0,
3708
+ "93": 0,
3709
+ "94": 0,
3710
+ "95": 0,
3711
+ "96": 0,
3712
+ "97": 0,
3713
+ "98": 0,
3714
+ "99": 0,
3715
+ "100": 0,
3716
+ "101": 0,
3717
+ "102": 0,
3718
+ "103": 0,
3719
+ "104": 0,
3720
+ "105": 0,
3721
+ "106": 0,
3722
+ "107": 0,
3723
+ "108": 0,
3724
+ "109": 0,
3725
+ "110": 0,
3726
+ "111": 0,
3727
+ "112": 0,
3728
+ "113": 0,
3729
+ "114": 0,
3730
+ "115": 0,
3731
+ "116": 0,
3732
+ "117": 0,
3733
+ "118": 0,
3734
+ "119": 0,
3735
+ "120": 0,
3736
+ "121": 0,
3737
+ "122": 0,
3738
+ "123": 0,
3739
+ "124": 0,
3740
+ "125": 0,
3741
+ "126": 0,
3742
+ "127": 0,
3743
+ "128": 0,
3744
+ "129": 0,
3745
+ "130": 0
3746
+ },
3747
+ f: {
3748
+ "0": 0,
3749
+ "1": 0,
3750
+ "2": 0,
3751
+ "3": 0,
3752
+ "4": 0,
3753
+ "5": 0,
3754
+ "6": 0,
3755
+ "7": 0,
3756
+ "8": 0,
3757
+ "9": 0,
3758
+ "10": 0,
3759
+ "11": 0,
3760
+ "12": 0,
3761
+ "13": 0,
3762
+ "14": 0,
3763
+ "15": 0,
3764
+ "16": 0,
3765
+ "17": 0,
3766
+ "18": 0
3767
+ },
3768
+ b: {
3769
+ "0": [0, 0, 0],
3770
+ "1": [0, 0],
3771
+ "2": [0, 0],
3772
+ "3": [0, 0],
3773
+ "4": [0, 0],
3774
+ "5": [0, 0],
3775
+ "6": [0, 0],
3776
+ "7": [0, 0],
3777
+ "8": [0, 0],
3778
+ "9": [0, 0],
3779
+ "10": [0, 0],
3780
+ "11": [0, 0],
3781
+ "12": [0, 0],
3782
+ "13": [0, 0],
3783
+ "14": [0, 0],
3784
+ "15": [0, 0],
3785
+ "16": [0, 0],
3786
+ "17": [0, 0],
3787
+ "18": [0, 0],
3788
+ "19": [0, 0],
3789
+ "20": [0, 0],
3790
+ "21": [0, 0],
3791
+ "22": [0, 0],
3792
+ "23": [0, 0],
3793
+ "24": [0, 0],
3794
+ "25": [0, 0],
3795
+ "26": [0, 0],
3796
+ "27": [0, 0],
3797
+ "28": [0, 0],
3798
+ "29": [0, 0],
3799
+ "30": [0, 0],
3800
+ "31": [0, 0],
3801
+ "32": [0, 0],
3802
+ "33": [0, 0],
3803
+ "34": [0, 0, 0],
3804
+ "35": [0, 0],
3805
+ "36": [0, 0],
3806
+ "37": [0, 0],
3807
+ "38": [0, 0],
3808
+ "39": [0, 0],
3809
+ "40": [0, 0],
3810
+ "41": [0, 0],
3811
+ "42": [0, 0],
3812
+ "43": [0, 0],
3813
+ "44": [0, 0],
3814
+ "45": [0, 0],
3815
+ "46": [0, 0],
3816
+ "47": [0, 0],
3817
+ "48": [0, 0, 0, 0, 0],
3818
+ "49": [0, 0],
3819
+ "50": [0, 0, 0],
3820
+ "51": [0, 0],
3821
+ "52": [0, 0, 0, 0, 0]
3822
+ },
3823
+ inputSourceMap: {
3824
+ version: 3,
3825
+ file: "/home/vsts/work/1/s/rush-plugins/rush-http-build-cache-plugin/src/HttpBuildCacheProvider.ts",
3826
+ sources: ["/home/vsts/work/1/s/rush-plugins/rush-http-build-cache-plugin/src/HttpBuildCacheProvider.ts"],
3827
+ names: [],
3828
+ mappings: "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",
3829
+ sourcesContent: ["import { ITerminal, Executable, Async } from '@rushstack/node-core-library';\nimport {\n ICloudBuildCacheProvider,\n ICredentialCacheEntry,\n CredentialCache,\n RushSession,\n EnvironmentConfiguration\n} from '@rushstack/rush-sdk';\nimport fetch, { BodyInit, Response } from 'node-fetch';\n\nenum CredentialsOptions {\n Optional,\n Required,\n Omit\n}\n\nenum FailureType {\n None,\n Informational,\n Warning,\n Error,\n Authentication\n}\n\nexport interface IHttpBuildCacheTokenHandler {\n exec: string;\n args?: string[];\n}\n\n/**\n * @public\n */\nexport interface IHttpBuildCacheProviderOptions {\n url: string;\n tokenHandler?: IHttpBuildCacheTokenHandler;\n uploadMethod?: string;\n minHttpRetryDelayMs?: number;\n headers?: Record<string, string>;\n cacheKeyPrefix?: string;\n isCacheWriteAllowed: boolean;\n pluginName: string;\n rushProjectRoot: string;\n}\n\nconst MAX_HTTP_CACHE_ATTEMPTS: number = 3;\nconst DEFAULT_MIN_HTTP_RETRY_DELAY_MS = 2500;\n\nexport class HttpBuildCacheProvider implements ICloudBuildCacheProvider {\n private readonly _pluginName: string;\n private readonly _rushSession: RushSession;\n private readonly _rushProjectRoot: string;\n private readonly _environmentCredential: string | undefined;\n private readonly _isCacheWriteAllowedByConfiguration: boolean;\n private readonly _url: URL;\n private readonly _uploadMethod: string;\n private readonly _headers: Record<string, string>;\n private readonly _cacheKeyPrefix: string;\n private readonly _tokenHandler: IHttpBuildCacheTokenHandler | undefined;\n private readonly _minHttpRetryDelayMs: number;\n private __credentialCacheId: string | undefined;\n\n public get isCacheWriteAllowed(): boolean {\n return EnvironmentConfiguration.buildCacheWriteAllowed ?? this._isCacheWriteAllowedByConfiguration;\n }\n\n public constructor(options: IHttpBuildCacheProviderOptions, rushSession: RushSession) {\n this._pluginName = options.pluginName;\n this._rushSession = rushSession;\n this._rushProjectRoot = options.rushProjectRoot;\n\n this._environmentCredential = EnvironmentConfiguration.buildCacheCredential;\n this._isCacheWriteAllowedByConfiguration = options.isCacheWriteAllowed;\n this._url = new URL(options.url.endsWith('/') ? options.url : options.url + '/');\n this._uploadMethod = options.uploadMethod ?? 'PUT';\n this._headers = options.headers ?? {};\n this._tokenHandler = options.tokenHandler;\n this._cacheKeyPrefix = options.cacheKeyPrefix ?? '';\n this._minHttpRetryDelayMs = options.minHttpRetryDelayMs ?? DEFAULT_MIN_HTTP_RETRY_DELAY_MS;\n }\n\n public async tryGetCacheEntryBufferByIdAsync(\n terminal: ITerminal,\n cacheId: string\n ): Promise<Buffer | undefined> {\n try {\n const result = await this._http({\n terminal: terminal,\n relUrl: `${this._cacheKeyPrefix}${cacheId}`,\n method: 'GET',\n body: undefined,\n warningText: 'Could not get cache entry',\n readBody: true,\n maxAttempts: MAX_HTTP_CACHE_ATTEMPTS\n });\n\n return Buffer.isBuffer(result) ? result : undefined;\n } catch (e) {\n terminal.writeWarningLine(`Error getting cache entry: ${e}`);\n return undefined;\n }\n }\n\n public async trySetCacheEntryBufferAsync(\n terminal: ITerminal,\n cacheId: string,\n objectBuffer: Buffer\n ): Promise<boolean> {\n if (!this.isCacheWriteAllowed) {\n terminal.writeErrorLine('Writing to cache is not allowed in the current configuration.');\n return false;\n }\n\n terminal.writeDebugLine('Uploading object with cacheId: ', cacheId);\n\n try {\n const result = await this._http({\n terminal: terminal,\n relUrl: `${this._cacheKeyPrefix}${cacheId}`,\n method: this._uploadMethod,\n body: objectBuffer,\n warningText: 'Could not write cache entry',\n readBody: false,\n maxAttempts: MAX_HTTP_CACHE_ATTEMPTS\n });\n\n return result !== false;\n } catch (e) {\n terminal.writeWarningLine(`Error uploading cache entry: ${e}`);\n return false;\n }\n }\n\n public async updateCachedCredentialAsync(terminal: ITerminal, credential: string): Promise<void> {\n await CredentialCache.usingAsync(\n {\n supportEditing: true\n },\n async (credentialsCache: CredentialCache) => {\n credentialsCache.setCacheEntry(this._credentialCacheId, {\n credential: credential\n });\n await credentialsCache.saveIfModifiedAsync();\n }\n );\n }\n\n public async updateCachedCredentialInteractiveAsync(terminal: ITerminal): Promise<void> {\n if (!this._tokenHandler) {\n throw new Error(\n `The interactive cloud credentials flow is not configured.\\n` +\n `Set the 'tokenHandler' setting in 'common/config/rush-plugins/${this._pluginName}.json' to a command that writes your credentials to standard output and exits with code 0 ` +\n `or provide your credentials to rush using the --credential flag instead. Credentials must be the ` +\n `'Authorization' header expected by ${this._url.href}`\n );\n }\n\n const cmd: string = `${this._tokenHandler.exec} ${(this._tokenHandler.args || []).join(' ')}`;\n terminal.writeVerboseLine(`Running '${cmd}' to get credentials`);\n const result = Executable.spawnSync(this._tokenHandler.exec, this._tokenHandler.args || []);\n\n terminal.writeErrorLine(result.stderr);\n\n if (result.error) {\n throw new Error(`Could not obtain credentials. The command '${cmd}' failed.`);\n }\n\n const credential = result.stdout.trim();\n terminal.writeVerboseLine('Got credentials');\n\n await this.updateCachedCredentialAsync(terminal, credential);\n\n terminal.writeLine('Updated credentials cache');\n }\n\n public async deleteCachedCredentialsAsync(terminal: ITerminal): Promise<void> {\n await CredentialCache.usingAsync(\n {\n supportEditing: true\n },\n async (credentialsCache: CredentialCache) => {\n credentialsCache.deleteCacheEntry(this._credentialCacheId);\n await credentialsCache.saveIfModifiedAsync();\n }\n );\n }\n\n private get _credentialCacheId(): string {\n if (!this.__credentialCacheId) {\n const cacheIdParts: string[] = [this._url.href];\n\n if (this._isCacheWriteAllowedByConfiguration) {\n cacheIdParts.push('cacheWriteAllowed');\n }\n\n this.__credentialCacheId = cacheIdParts.join('|');\n }\n\n return this.__credentialCacheId;\n }\n\n private async _http(options: {\n terminal: ITerminal;\n relUrl: string;\n method: string;\n body: BodyInit | undefined;\n warningText: string;\n readBody: boolean;\n maxAttempts: number;\n credentialOptions?: CredentialsOptions;\n }): Promise<Buffer | boolean> {\n const { terminal, relUrl, method, body, warningText, readBody, credentialOptions } = options;\n const safeCredentialOptions = credentialOptions ?? CredentialsOptions.Optional;\n const credentials = await this._tryGetCredentials(safeCredentialOptions);\n const url = new URL(relUrl, this._url).href;\n\n const headers: Record<string, string> = {};\n if (typeof credentials === 'string') {\n headers.Authorization = credentials;\n }\n\n for (const [key, value] of Object.entries(this._headers)) {\n if (typeof value === 'string') {\n headers[key] = value;\n }\n }\n\n const bodyLength = (body as { length: number })?.length || 'unknown';\n\n terminal.writeDebugLine(`[http-build-cache] request: ${method} ${url} ${bodyLength} bytes`);\n\n const response = await fetch(url, {\n method: method,\n headers: headers,\n body: body,\n redirect: 'follow'\n });\n\n if (!response.ok) {\n const isNonCredentialResponse = response.status >= 500 && response.status < 600;\n\n if (\n !isNonCredentialResponse &&\n typeof credentials !== 'string' &&\n safeCredentialOptions === CredentialsOptions.Optional\n ) {\n // If we don't already have credentials yet, and we got a response from the server\n // that is a \"normal\" failure (4xx), then we assume that credentials are probably\n // required. Re-attempt the request, requiring credentials this time.\n //\n // This counts as part of the \"first attempt\", so it is not included in the max attempts\n return await this._http({ ...options, credentialOptions: CredentialsOptions.Required });\n }\n\n if (options.maxAttempts > 1) {\n // Pause a bit before retrying in case the server is busy\n // Add some random jitter to the retry so we can spread out load on the remote service\n // A proper solution might add exponential back off in case the retry count is high (10 or more)\n const factor = 1.0 + Math.random(); // A random number between 1.0 and 2.0\n const retryDelay = Math.floor(factor * this._minHttpRetryDelayMs);\n\n await Async.sleep(retryDelay);\n\n return await this._http({ ...options, maxAttempts: options.maxAttempts - 1 });\n }\n\n this._reportFailure(terminal, method, response, false, warningText);\n return false;\n }\n\n const result: Buffer | boolean = readBody ? Buffer.from(await response.arrayBuffer()) : true;\n\n terminal.writeDebugLine(\n `[http-build-cache] actual response: ${response.status} ${url} ${\n result === true ? 'true' : result.length\n } bytes`\n );\n\n return result;\n }\n\n private async _tryGetCredentials(options: CredentialsOptions.Required): Promise<string>;\n private async _tryGetCredentials(options: CredentialsOptions.Optional): Promise<string | undefined>;\n private async _tryGetCredentials(options: CredentialsOptions.Omit): Promise<undefined>;\n private async _tryGetCredentials(options: CredentialsOptions): Promise<string | undefined>;\n private async _tryGetCredentials(options: CredentialsOptions): Promise<string | undefined> {\n if (options === CredentialsOptions.Omit) {\n return;\n }\n\n let credentials: string | undefined = this._environmentCredential;\n\n if (credentials === undefined) {\n credentials = await this._tryGetCredentialsFromCache();\n }\n\n if (typeof credentials !== 'string' && options === CredentialsOptions.Required) {\n throw new Error(\n [\n `Credentials for ${this._url.href} have not been provided.`,\n `In CI, verify that RUSH_BUILD_CACHE_CREDENTIAL contains a valid Authorization header value.`,\n ``,\n `For local developers, run:`,\n ``,\n ` rush update-cloud-credentials --interactive`,\n ``\n ].join('\\n')\n );\n }\n\n return credentials;\n }\n\n private async _tryGetCredentialsFromCache(): Promise<string | undefined> {\n let cacheEntry: ICredentialCacheEntry | undefined;\n\n await CredentialCache.usingAsync(\n {\n supportEditing: false\n },\n (credentialsCache: CredentialCache) => {\n cacheEntry = credentialsCache.tryGetCacheEntry(this._credentialCacheId);\n }\n );\n\n if (cacheEntry) {\n const expirationTime: number | undefined = cacheEntry.expires?.getTime();\n if (!expirationTime || expirationTime >= Date.now()) {\n return cacheEntry.credential;\n }\n }\n }\n\n private _getFailureType(requestMethod: string, response: Response, isRedirect: boolean): FailureType {\n if (response.ok) {\n return FailureType.None;\n }\n\n switch (response.status) {\n case 503: {\n // We select 503 specifically because this represents \"service unavailable\" and\n // \"rate limit throttle\" errors, which are transient issues.\n //\n // There are other 5xx errors, such as 501, that can occur if the request is\n // malformed, so as a general rule we want to let through other 5xx errors\n // so the user can troubleshoot.\n\n // Don't fail production builds with warnings for transient issues\n return FailureType.Informational;\n }\n\n case 401:\n case 403:\n case 407: {\n if (requestMethod === 'GET' && (isRedirect || response.redirected)) {\n // Cache misses for GET requests are not errors\n // This is a workaround behavior where a server can issue a redirect and we fail to authenticate at the new location.\n // We do not want to signal this as an authentication failure because the authorization header is not passed on to redirects.\n // i.e The authentication header was accepted for the first request and therefore subsequent failures\n // where it was not present should not be attributed to the header.\n // This scenario usually comes up with services that redirect to pre-signed URLS that don't actually exist.\n // Those services then usually treat the 404 as a 403 to prevent leaking information.\n return FailureType.None;\n }\n\n return FailureType.Authentication;\n }\n\n case 404: {\n if (requestMethod === 'GET') {\n // Cache misses for GET requests are not errors\n return FailureType.None;\n }\n }\n }\n\n // Let dev builds succeed, let Prod builds fail\n return FailureType.Warning;\n }\n\n private _reportFailure(\n terminal: ITerminal,\n requestMethod: string,\n response: Response,\n isRedirect: boolean,\n message: string\n ): void {\n switch (this._getFailureType(requestMethod, response, isRedirect)) {\n default: {\n terminal.writeErrorLine(`${message}: HTTP ${response.status}: ${response.statusText}`);\n break;\n }\n\n case FailureType.Warning: {\n terminal.writeWarningLine(`${message}: HTTP ${response.status}: ${response.statusText}`);\n break;\n }\n\n case FailureType.Informational: {\n terminal.writeLine(`${message}: HTTP ${response.status}: ${response.statusText}`);\n break;\n }\n\n case FailureType.None: {\n terminal.writeDebugLine(`${message}: HTTP ${response.status}: ${response.statusText}`);\n break;\n }\n\n case FailureType.Authentication: {\n throw new Error(\n [\n `${this._url.href} responded with ${response.status}: ${response.statusText}.`,\n `Credentials may be misconfigured or have expired.`,\n `In CI, verify that RUSH_BUILD_CACHE_CREDENTIAL contains a valid Authorization header value.`,\n ``,\n `For local developers, run:`,\n ``,\n ` rush update-cloud-credentials --interactive`,\n ``\n ].join('\\n')\n );\n }\n }\n }\n}\n"]
3830
+ },
3831
+ _coverageSchema: "1a1c01bbd47fc00a2c39e90264f33305004495a9",
3832
+ hash: "f39662f2cf6af1c0d874c48f29702c0c9cefda13"
3833
+ };
3834
+ var coverage = global[gcv] || (global[gcv] = {});
3835
+ if (!coverage[path] || coverage[path].hash !== hash) {
3836
+ coverage[path] = coverageData;
3837
+ }
3838
+ var actualCoverage = coverage[path];
3839
+ {
3840
+ // @ts-ignore
3841
+ cov_ms2xfswbr = function () {
3842
+ return actualCoverage;
3843
+ };
3844
+ }
3845
+ return actualCoverage;
3846
+ }
3847
+ cov_ms2xfswbr();
3848
+ var __importDefault =
3849
+ /* istanbul ignore next */
3850
+ (cov_ms2xfswbr().s[0]++,
3851
+ /* istanbul ignore next */
3852
+ (cov_ms2xfswbr().b[0][0]++, this) &&
3853
+ /* istanbul ignore next */
3854
+ (cov_ms2xfswbr().b[0][1]++, this.__importDefault) ||
3855
+ /* istanbul ignore next */
3856
+ (cov_ms2xfswbr().b[0][2]++, function (mod) {
3857
+ /* istanbul ignore next */
3858
+ cov_ms2xfswbr().f[0]++;
3859
+ cov_ms2xfswbr().s[1]++;
3860
+ return (
3861
+ /* istanbul ignore next */
3862
+ (cov_ms2xfswbr().b[2][0]++, mod) &&
3863
+ /* istanbul ignore next */
3864
+ (cov_ms2xfswbr().b[2][1]++, mod.__esModule) ?
3865
+ /* istanbul ignore next */
3866
+ (cov_ms2xfswbr().b[1][0]++, mod) :
3867
+ /* istanbul ignore next */
3868
+ (cov_ms2xfswbr().b[1][1]++, {
3869
+ "default": mod
3870
+ })
3871
+ );
3872
+ }));
3873
+ /* istanbul ignore next */
3874
+ cov_ms2xfswbr().s[2]++;
3875
+ Object.defineProperty(exports, "__esModule", {
3876
+ value: true
3877
+ });
3878
+ /* istanbul ignore next */
3879
+ cov_ms2xfswbr().s[3]++;
3880
+ exports.HttpBuildCacheProvider = void 0;
3881
+ const node_core_library_1 =
3882
+ /* istanbul ignore next */
3883
+ (cov_ms2xfswbr().s[4]++, require("@rushstack/node-core-library"));
3884
+ const rush_sdk_1 =
3885
+ /* istanbul ignore next */
3886
+ (cov_ms2xfswbr().s[5]++, require("@rushstack/rush-sdk"));
3887
+ const node_fetch_1 =
3888
+ /* istanbul ignore next */
3889
+ (cov_ms2xfswbr().s[6]++, __importDefault(require("node-fetch")));
3890
+ var CredentialsOptions;
3891
+ /* istanbul ignore next */
3892
+ cov_ms2xfswbr().s[7]++;
3893
+ (function (CredentialsOptions) {
3894
+ /* istanbul ignore next */
3895
+ cov_ms2xfswbr().f[1]++;
3896
+ cov_ms2xfswbr().s[8]++;
3897
+ CredentialsOptions[CredentialsOptions["Optional"] = 0] = "Optional";
3898
+ /* istanbul ignore next */
3899
+ cov_ms2xfswbr().s[9]++;
3900
+ CredentialsOptions[CredentialsOptions["Required"] = 1] = "Required";
3901
+ /* istanbul ignore next */
3902
+ cov_ms2xfswbr().s[10]++;
3903
+ CredentialsOptions[CredentialsOptions["Omit"] = 2] = "Omit";
3904
+ })(
3905
+ /* istanbul ignore next */
3906
+ (cov_ms2xfswbr().b[3][0]++, CredentialsOptions) ||
3907
+ /* istanbul ignore next */
3908
+ (cov_ms2xfswbr().b[3][1]++, CredentialsOptions = {}));
3909
+ var FailureType;
3910
+ /* istanbul ignore next */
3911
+ cov_ms2xfswbr().s[11]++;
3912
+ (function (FailureType) {
3913
+ /* istanbul ignore next */
3914
+ cov_ms2xfswbr().f[2]++;
3915
+ cov_ms2xfswbr().s[12]++;
3916
+ FailureType[FailureType["None"] = 0] = "None";
3917
+ /* istanbul ignore next */
3918
+ cov_ms2xfswbr().s[13]++;
3919
+ FailureType[FailureType["Informational"] = 1] = "Informational";
3920
+ /* istanbul ignore next */
3921
+ cov_ms2xfswbr().s[14]++;
3922
+ FailureType[FailureType["Warning"] = 2] = "Warning";
3923
+ /* istanbul ignore next */
3924
+ cov_ms2xfswbr().s[15]++;
3925
+ FailureType[FailureType["Error"] = 3] = "Error";
3926
+ /* istanbul ignore next */
3927
+ cov_ms2xfswbr().s[16]++;
3928
+ FailureType[FailureType["Authentication"] = 4] = "Authentication";
3929
+ })(
3930
+ /* istanbul ignore next */
3931
+ (cov_ms2xfswbr().b[4][0]++, FailureType) ||
3932
+ /* istanbul ignore next */
3933
+ (cov_ms2xfswbr().b[4][1]++, FailureType = {}));
3934
+ const MAX_HTTP_CACHE_ATTEMPTS =
3935
+ /* istanbul ignore next */
3936
+ (cov_ms2xfswbr().s[17]++, 3);
3937
+ const DEFAULT_MIN_HTTP_RETRY_DELAY_MS =
3938
+ /* istanbul ignore next */
3939
+ (cov_ms2xfswbr().s[18]++, 2500);
3940
+ class HttpBuildCacheProvider {
3941
+ constructor(options, rushSession) {
3942
+ /* istanbul ignore next */
3943
+ cov_ms2xfswbr().f[3]++;
3944
+ var _a, _b, _c, _d;
3945
+ /* istanbul ignore next */
3946
+ cov_ms2xfswbr().s[19]++;
3947
+ this._pluginName = options.pluginName;
3948
+ /* istanbul ignore next */
3949
+ cov_ms2xfswbr().s[20]++;
3950
+ this._rushSession = rushSession;
3951
+ /* istanbul ignore next */
3952
+ cov_ms2xfswbr().s[21]++;
3953
+ this._rushProjectRoot = options.rushProjectRoot;
3954
+ /* istanbul ignore next */
3955
+ cov_ms2xfswbr().s[22]++;
3956
+ this._environmentCredential = rush_sdk_1.EnvironmentConfiguration.buildCacheCredential;
3957
+ /* istanbul ignore next */
3958
+ cov_ms2xfswbr().s[23]++;
3959
+ this._isCacheWriteAllowedByConfiguration = options.isCacheWriteAllowed;
3960
+ /* istanbul ignore next */
3961
+ cov_ms2xfswbr().s[24]++;
3962
+ this._url = new URL(options.url.endsWith('/') ?
3963
+ /* istanbul ignore next */
3964
+ (cov_ms2xfswbr().b[5][0]++, options.url) :
3965
+ /* istanbul ignore next */
3966
+ (cov_ms2xfswbr().b[5][1]++, options.url + '/'));
3967
+ /* istanbul ignore next */
3968
+ cov_ms2xfswbr().s[25]++;
3969
+ this._uploadMethod =
3970
+ /* istanbul ignore next */
3971
+ (cov_ms2xfswbr().b[7][0]++, (_a = options.uploadMethod) !== null) &&
3972
+ /* istanbul ignore next */
3973
+ (cov_ms2xfswbr().b[7][1]++, _a !== void 0) ?
3974
+ /* istanbul ignore next */
3975
+ (cov_ms2xfswbr().b[6][0]++, _a) :
3976
+ /* istanbul ignore next */
3977
+ (cov_ms2xfswbr().b[6][1]++, 'PUT');
3978
+ /* istanbul ignore next */
3979
+ cov_ms2xfswbr().s[26]++;
3980
+ this._headers =
3981
+ /* istanbul ignore next */
3982
+ (cov_ms2xfswbr().b[9][0]++, (_b = options.headers) !== null) &&
3983
+ /* istanbul ignore next */
3984
+ (cov_ms2xfswbr().b[9][1]++, _b !== void 0) ?
3985
+ /* istanbul ignore next */
3986
+ (cov_ms2xfswbr().b[8][0]++, _b) :
3987
+ /* istanbul ignore next */
3988
+ (cov_ms2xfswbr().b[8][1]++, {});
3989
+ /* istanbul ignore next */
3990
+ cov_ms2xfswbr().s[27]++;
3991
+ this._tokenHandler = options.tokenHandler;
3992
+ /* istanbul ignore next */
3993
+ cov_ms2xfswbr().s[28]++;
3994
+ this._cacheKeyPrefix =
3995
+ /* istanbul ignore next */
3996
+ (cov_ms2xfswbr().b[11][0]++, (_c = options.cacheKeyPrefix) !== null) &&
3997
+ /* istanbul ignore next */
3998
+ (cov_ms2xfswbr().b[11][1]++, _c !== void 0) ?
3999
+ /* istanbul ignore next */
4000
+ (cov_ms2xfswbr().b[10][0]++, _c) :
4001
+ /* istanbul ignore next */
4002
+ (cov_ms2xfswbr().b[10][1]++, '');
4003
+ /* istanbul ignore next */
4004
+ cov_ms2xfswbr().s[29]++;
4005
+ this._minHttpRetryDelayMs =
4006
+ /* istanbul ignore next */
4007
+ (cov_ms2xfswbr().b[13][0]++, (_d = options.minHttpRetryDelayMs) !== null) &&
4008
+ /* istanbul ignore next */
4009
+ (cov_ms2xfswbr().b[13][1]++, _d !== void 0) ?
4010
+ /* istanbul ignore next */
4011
+ (cov_ms2xfswbr().b[12][0]++, _d) :
4012
+ /* istanbul ignore next */
4013
+ (cov_ms2xfswbr().b[12][1]++, DEFAULT_MIN_HTTP_RETRY_DELAY_MS);
4014
+ }
4015
+ get isCacheWriteAllowed() {
4016
+ /* istanbul ignore next */
4017
+ cov_ms2xfswbr().f[4]++;
4018
+ var _a;
4019
+ /* istanbul ignore next */
4020
+ cov_ms2xfswbr().s[30]++;
4021
+ return (
4022
+ /* istanbul ignore next */
4023
+ (cov_ms2xfswbr().b[15][0]++, (_a = rush_sdk_1.EnvironmentConfiguration.buildCacheWriteAllowed) !== null) &&
4024
+ /* istanbul ignore next */
4025
+ (cov_ms2xfswbr().b[15][1]++, _a !== void 0) ?
4026
+ /* istanbul ignore next */
4027
+ (cov_ms2xfswbr().b[14][0]++, _a) :
4028
+ /* istanbul ignore next */
4029
+ (cov_ms2xfswbr().b[14][1]++, this._isCacheWriteAllowedByConfiguration)
4030
+ );
4031
+ }
4032
+ async tryGetCacheEntryBufferByIdAsync(terminal, cacheId) {
4033
+ /* istanbul ignore next */
4034
+ cov_ms2xfswbr().f[5]++;
4035
+ cov_ms2xfswbr().s[31]++;
4036
+ try {
4037
+ const result =
4038
+ /* istanbul ignore next */
4039
+ (cov_ms2xfswbr().s[32]++, await this._http({
4040
+ terminal: terminal,
4041
+ relUrl: `${this._cacheKeyPrefix}${cacheId}`,
4042
+ method: 'GET',
4043
+ body: undefined,
4044
+ warningText: 'Could not get cache entry',
4045
+ readBody: true,
4046
+ maxAttempts: MAX_HTTP_CACHE_ATTEMPTS
4047
+ }));
4048
+ /* istanbul ignore next */
4049
+ cov_ms2xfswbr().s[33]++;
4050
+ return Buffer.isBuffer(result) ?
4051
+ /* istanbul ignore next */
4052
+ (cov_ms2xfswbr().b[16][0]++, result) :
4053
+ /* istanbul ignore next */
4054
+ (cov_ms2xfswbr().b[16][1]++, undefined);
4055
+ } catch (e) {
4056
+ /* istanbul ignore next */
4057
+ cov_ms2xfswbr().s[34]++;
4058
+ terminal.writeWarningLine(`Error getting cache entry: ${e}`);
4059
+ /* istanbul ignore next */
4060
+ cov_ms2xfswbr().s[35]++;
4061
+ return undefined;
4062
+ }
4063
+ }
4064
+ async trySetCacheEntryBufferAsync(terminal, cacheId, objectBuffer) {
4065
+ /* istanbul ignore next */
4066
+ cov_ms2xfswbr().f[6]++;
4067
+ cov_ms2xfswbr().s[36]++;
4068
+ if (!this.isCacheWriteAllowed) {
4069
+ /* istanbul ignore next */
4070
+ cov_ms2xfswbr().b[17][0]++;
4071
+ cov_ms2xfswbr().s[37]++;
4072
+ terminal.writeErrorLine('Writing to cache is not allowed in the current configuration.');
4073
+ /* istanbul ignore next */
4074
+ cov_ms2xfswbr().s[38]++;
4075
+ return false;
4076
+ } else
4077
+ /* istanbul ignore next */
4078
+ {
4079
+ cov_ms2xfswbr().b[17][1]++;
4080
+ }
4081
+ cov_ms2xfswbr().s[39]++;
4082
+ terminal.writeDebugLine('Uploading object with cacheId: ', cacheId);
4083
+ /* istanbul ignore next */
4084
+ cov_ms2xfswbr().s[40]++;
4085
+ try {
4086
+ const result =
4087
+ /* istanbul ignore next */
4088
+ (cov_ms2xfswbr().s[41]++, await this._http({
4089
+ terminal: terminal,
4090
+ relUrl: `${this._cacheKeyPrefix}${cacheId}`,
4091
+ method: this._uploadMethod,
4092
+ body: objectBuffer,
4093
+ warningText: 'Could not write cache entry',
4094
+ readBody: false,
4095
+ maxAttempts: MAX_HTTP_CACHE_ATTEMPTS
4096
+ }));
4097
+ /* istanbul ignore next */
4098
+ cov_ms2xfswbr().s[42]++;
4099
+ return result !== false;
4100
+ } catch (e) {
4101
+ /* istanbul ignore next */
4102
+ cov_ms2xfswbr().s[43]++;
4103
+ terminal.writeWarningLine(`Error uploading cache entry: ${e}`);
4104
+ /* istanbul ignore next */
4105
+ cov_ms2xfswbr().s[44]++;
4106
+ return false;
4107
+ }
4108
+ }
4109
+ async updateCachedCredentialAsync(terminal, credential) {
4110
+ /* istanbul ignore next */
4111
+ cov_ms2xfswbr().f[7]++;
4112
+ cov_ms2xfswbr().s[45]++;
4113
+ await rush_sdk_1.CredentialCache.usingAsync({
4114
+ supportEditing: true
4115
+ }, async credentialsCache => {
4116
+ /* istanbul ignore next */
4117
+ cov_ms2xfswbr().f[8]++;
4118
+ cov_ms2xfswbr().s[46]++;
4119
+ credentialsCache.setCacheEntry(this._credentialCacheId, {
4120
+ credential: credential
4121
+ });
4122
+ /* istanbul ignore next */
4123
+ cov_ms2xfswbr().s[47]++;
4124
+ await credentialsCache.saveIfModifiedAsync();
4125
+ });
4126
+ }
4127
+ async updateCachedCredentialInteractiveAsync(terminal) {
4128
+ /* istanbul ignore next */
4129
+ cov_ms2xfswbr().f[9]++;
4130
+ cov_ms2xfswbr().s[48]++;
4131
+ if (!this._tokenHandler) {
4132
+ /* istanbul ignore next */
4133
+ cov_ms2xfswbr().b[18][0]++;
4134
+ cov_ms2xfswbr().s[49]++;
4135
+ throw new Error(`The interactive cloud credentials flow is not configured.\n` + `Set the 'tokenHandler' setting in 'common/config/rush-plugins/${this._pluginName}.json' to a command that writes your credentials to standard output and exits with code 0 ` + `or provide your credentials to rush using the --credential flag instead. Credentials must be the ` + `'Authorization' header expected by ${this._url.href}`);
4136
+ } else
4137
+ /* istanbul ignore next */
4138
+ {
4139
+ cov_ms2xfswbr().b[18][1]++;
4140
+ }
4141
+ const cmd =
4142
+ /* istanbul ignore next */
4143
+ (cov_ms2xfswbr().s[50]++, `${this._tokenHandler.exec} ${(
4144
+ /* istanbul ignore next */
4145
+ (cov_ms2xfswbr().b[19][0]++, this._tokenHandler.args) ||
4146
+ /* istanbul ignore next */
4147
+ (cov_ms2xfswbr().b[19][1]++, [])).join(' ')}`);
4148
+ /* istanbul ignore next */
4149
+ cov_ms2xfswbr().s[51]++;
4150
+ terminal.writeVerboseLine(`Running '${cmd}' to get credentials`);
4151
+ const result =
4152
+ /* istanbul ignore next */
4153
+ (cov_ms2xfswbr().s[52]++, node_core_library_1.Executable.spawnSync(this._tokenHandler.exec,
4154
+ /* istanbul ignore next */
4155
+ (cov_ms2xfswbr().b[20][0]++, this._tokenHandler.args) ||
4156
+ /* istanbul ignore next */
4157
+ (cov_ms2xfswbr().b[20][1]++, [])));
4158
+ /* istanbul ignore next */
4159
+ cov_ms2xfswbr().s[53]++;
4160
+ terminal.writeErrorLine(result.stderr);
4161
+ /* istanbul ignore next */
4162
+ cov_ms2xfswbr().s[54]++;
4163
+ if (result.error) {
4164
+ /* istanbul ignore next */
4165
+ cov_ms2xfswbr().b[21][0]++;
4166
+ cov_ms2xfswbr().s[55]++;
4167
+ throw new Error(`Could not obtain credentials. The command '${cmd}' failed.`);
4168
+ } else
4169
+ /* istanbul ignore next */
4170
+ {
4171
+ cov_ms2xfswbr().b[21][1]++;
4172
+ }
4173
+ const credential =
4174
+ /* istanbul ignore next */
4175
+ (cov_ms2xfswbr().s[56]++, result.stdout.trim());
4176
+ /* istanbul ignore next */
4177
+ cov_ms2xfswbr().s[57]++;
4178
+ terminal.writeVerboseLine('Got credentials');
4179
+ /* istanbul ignore next */
4180
+ cov_ms2xfswbr().s[58]++;
4181
+ await this.updateCachedCredentialAsync(terminal, credential);
4182
+ /* istanbul ignore next */
4183
+ cov_ms2xfswbr().s[59]++;
4184
+ terminal.writeLine('Updated credentials cache');
4185
+ }
4186
+ async deleteCachedCredentialsAsync(terminal) {
4187
+ /* istanbul ignore next */
4188
+ cov_ms2xfswbr().f[10]++;
4189
+ cov_ms2xfswbr().s[60]++;
4190
+ await rush_sdk_1.CredentialCache.usingAsync({
4191
+ supportEditing: true
4192
+ }, async credentialsCache => {
4193
+ /* istanbul ignore next */
4194
+ cov_ms2xfswbr().f[11]++;
4195
+ cov_ms2xfswbr().s[61]++;
4196
+ credentialsCache.deleteCacheEntry(this._credentialCacheId);
4197
+ /* istanbul ignore next */
4198
+ cov_ms2xfswbr().s[62]++;
4199
+ await credentialsCache.saveIfModifiedAsync();
4200
+ });
4201
+ }
4202
+ get _credentialCacheId() {
4203
+ /* istanbul ignore next */
4204
+ cov_ms2xfswbr().f[12]++;
4205
+ cov_ms2xfswbr().s[63]++;
4206
+ if (!this.__credentialCacheId) {
4207
+ /* istanbul ignore next */
4208
+ cov_ms2xfswbr().b[22][0]++;
4209
+ const cacheIdParts =
4210
+ /* istanbul ignore next */
4211
+ (cov_ms2xfswbr().s[64]++, [this._url.href]);
4212
+ /* istanbul ignore next */
4213
+ cov_ms2xfswbr().s[65]++;
4214
+ if (this._isCacheWriteAllowedByConfiguration) {
4215
+ /* istanbul ignore next */
4216
+ cov_ms2xfswbr().b[23][0]++;
4217
+ cov_ms2xfswbr().s[66]++;
4218
+ cacheIdParts.push('cacheWriteAllowed');
4219
+ } else
4220
+ /* istanbul ignore next */
4221
+ {
4222
+ cov_ms2xfswbr().b[23][1]++;
4223
+ }
4224
+ cov_ms2xfswbr().s[67]++;
4225
+ this.__credentialCacheId = cacheIdParts.join('|');
4226
+ } else
4227
+ /* istanbul ignore next */
4228
+ {
4229
+ cov_ms2xfswbr().b[22][1]++;
4230
+ }
4231
+ cov_ms2xfswbr().s[68]++;
4232
+ return this.__credentialCacheId;
4233
+ }
4234
+ async _http(options) {
4235
+ /* istanbul ignore next */
4236
+ cov_ms2xfswbr().f[13]++;
4237
+ const {
4238
+ terminal,
4239
+ relUrl,
4240
+ method,
4241
+ body,
4242
+ warningText,
4243
+ readBody,
4244
+ credentialOptions
4245
+ } =
4246
+ /* istanbul ignore next */
4247
+ (cov_ms2xfswbr().s[69]++, options);
4248
+ const safeCredentialOptions =
4249
+ /* istanbul ignore next */
4250
+ (cov_ms2xfswbr().s[70]++,
4251
+ /* istanbul ignore next */
4252
+ (cov_ms2xfswbr().b[25][0]++, credentialOptions !== null) &&
4253
+ /* istanbul ignore next */
4254
+ (cov_ms2xfswbr().b[25][1]++, credentialOptions !== void 0) ?
4255
+ /* istanbul ignore next */
4256
+ (cov_ms2xfswbr().b[24][0]++, credentialOptions) :
4257
+ /* istanbul ignore next */
4258
+ (cov_ms2xfswbr().b[24][1]++, CredentialsOptions.Optional));
4259
+ const credentials =
4260
+ /* istanbul ignore next */
4261
+ (cov_ms2xfswbr().s[71]++, await this._tryGetCredentials(safeCredentialOptions));
4262
+ const url =
4263
+ /* istanbul ignore next */
4264
+ (cov_ms2xfswbr().s[72]++, new URL(relUrl, this._url).href);
4265
+ const headers =
4266
+ /* istanbul ignore next */
4267
+ (cov_ms2xfswbr().s[73]++, {});
4268
+ /* istanbul ignore next */
4269
+ cov_ms2xfswbr().s[74]++;
4270
+ if (typeof credentials === 'string') {
4271
+ /* istanbul ignore next */
4272
+ cov_ms2xfswbr().b[26][0]++;
4273
+ cov_ms2xfswbr().s[75]++;
4274
+ headers.Authorization = credentials;
4275
+ } else
4276
+ /* istanbul ignore next */
4277
+ {
4278
+ cov_ms2xfswbr().b[26][1]++;
4279
+ }
4280
+ cov_ms2xfswbr().s[76]++;
4281
+ for (const [key, value] of Object.entries(this._headers)) {
4282
+ /* istanbul ignore next */
4283
+ cov_ms2xfswbr().s[77]++;
4284
+ if (typeof value === 'string') {
4285
+ /* istanbul ignore next */
4286
+ cov_ms2xfswbr().b[27][0]++;
4287
+ cov_ms2xfswbr().s[78]++;
4288
+ headers[key] = value;
4289
+ } else
4290
+ /* istanbul ignore next */
4291
+ {
4292
+ cov_ms2xfswbr().b[27][1]++;
4293
+ }
4294
+ }
4295
+ const bodyLength =
4296
+ /* istanbul ignore next */
4297
+ (cov_ms2xfswbr().s[79]++,
4298
+ /* istanbul ignore next */
4299
+ (cov_ms2xfswbr().b[28][0]++,
4300
+ /* istanbul ignore next */
4301
+ (cov_ms2xfswbr().b[30][0]++, body === null) ||
4302
+ /* istanbul ignore next */
4303
+ (cov_ms2xfswbr().b[30][1]++, body === void 0) ?
4304
+ /* istanbul ignore next */
4305
+ (cov_ms2xfswbr().b[29][0]++, void 0) :
4306
+ /* istanbul ignore next */
4307
+ (cov_ms2xfswbr().b[29][1]++, body.length)) ||
4308
+ /* istanbul ignore next */
4309
+ (cov_ms2xfswbr().b[28][1]++, 'unknown'));
4310
+ /* istanbul ignore next */
4311
+ cov_ms2xfswbr().s[80]++;
4312
+ terminal.writeDebugLine(`[http-build-cache] request: ${method} ${url} ${bodyLength} bytes`);
4313
+ const response =
4314
+ /* istanbul ignore next */
4315
+ (cov_ms2xfswbr().s[81]++, await (0, node_fetch_1.default)(url, {
4316
+ method: method,
4317
+ headers: headers,
4318
+ body: body,
4319
+ redirect: 'follow'
4320
+ }));
4321
+ /* istanbul ignore next */
4322
+ cov_ms2xfswbr().s[82]++;
4323
+ if (!response.ok) {
4324
+ /* istanbul ignore next */
4325
+ cov_ms2xfswbr().b[31][0]++;
4326
+ const isNonCredentialResponse =
4327
+ /* istanbul ignore next */
4328
+ (cov_ms2xfswbr().s[83]++,
4329
+ /* istanbul ignore next */
4330
+ (cov_ms2xfswbr().b[32][0]++, response.status >= 500) &&
4331
+ /* istanbul ignore next */
4332
+ (cov_ms2xfswbr().b[32][1]++, response.status < 600));
4333
+ /* istanbul ignore next */
4334
+ cov_ms2xfswbr().s[84]++;
4335
+ if (
4336
+ /* istanbul ignore next */
4337
+ (cov_ms2xfswbr().b[34][0]++, !isNonCredentialResponse) &&
4338
+ /* istanbul ignore next */
4339
+ (cov_ms2xfswbr().b[34][1]++, typeof credentials !== 'string') &&
4340
+ /* istanbul ignore next */
4341
+ (cov_ms2xfswbr().b[34][2]++, safeCredentialOptions === CredentialsOptions.Optional)) {
4342
+ /* istanbul ignore next */
4343
+ cov_ms2xfswbr().b[33][0]++;
4344
+ cov_ms2xfswbr().s[85]++;
4345
+ // If we don't already have credentials yet, and we got a response from the server
4346
+ // that is a "normal" failure (4xx), then we assume that credentials are probably
4347
+ // required. Re-attempt the request, requiring credentials this time.
4348
+ //
4349
+ // This counts as part of the "first attempt", so it is not included in the max attempts
4350
+ return await this._http(Object.assign(Object.assign({}, options), {
4351
+ credentialOptions: CredentialsOptions.Required
4352
+ }));
4353
+ } else
4354
+ /* istanbul ignore next */
4355
+ {
4356
+ cov_ms2xfswbr().b[33][1]++;
4357
+ }
4358
+ cov_ms2xfswbr().s[86]++;
4359
+ if (options.maxAttempts > 1) {
4360
+ /* istanbul ignore next */
4361
+ cov_ms2xfswbr().b[35][0]++;
4362
+ // Pause a bit before retrying in case the server is busy
4363
+ // Add some random jitter to the retry so we can spread out load on the remote service
4364
+ // A proper solution might add exponential back off in case the retry count is high (10 or more)
4365
+ const factor =
4366
+ /* istanbul ignore next */
4367
+ (cov_ms2xfswbr().s[87]++, 1.0 + Math.random()); // A random number between 1.0 and 2.0
4368
+ const retryDelay =
4369
+ /* istanbul ignore next */
4370
+ (cov_ms2xfswbr().s[88]++, Math.floor(factor * this._minHttpRetryDelayMs));
4371
+ /* istanbul ignore next */
4372
+ cov_ms2xfswbr().s[89]++;
4373
+ await node_core_library_1.Async.sleep(retryDelay);
4374
+ /* istanbul ignore next */
4375
+ cov_ms2xfswbr().s[90]++;
4376
+ return await this._http(Object.assign(Object.assign({}, options), {
4377
+ maxAttempts: options.maxAttempts - 1
4378
+ }));
4379
+ } else
4380
+ /* istanbul ignore next */
4381
+ {
4382
+ cov_ms2xfswbr().b[35][1]++;
4383
+ }
4384
+ cov_ms2xfswbr().s[91]++;
4385
+ this._reportFailure(terminal, method, response, false, warningText);
4386
+ /* istanbul ignore next */
4387
+ cov_ms2xfswbr().s[92]++;
4388
+ return false;
4389
+ } else
4390
+ /* istanbul ignore next */
4391
+ {
4392
+ cov_ms2xfswbr().b[31][1]++;
4393
+ }
4394
+ const result =
4395
+ /* istanbul ignore next */
4396
+ (cov_ms2xfswbr().s[93]++, readBody ?
4397
+ /* istanbul ignore next */
4398
+ (cov_ms2xfswbr().b[36][0]++, Buffer.from(await response.arrayBuffer())) :
4399
+ /* istanbul ignore next */
4400
+ (cov_ms2xfswbr().b[36][1]++, true));
4401
+ /* istanbul ignore next */
4402
+ cov_ms2xfswbr().s[94]++;
4403
+ terminal.writeDebugLine(`[http-build-cache] actual response: ${response.status} ${url} ${result === true ?
4404
+ /* istanbul ignore next */
4405
+ (cov_ms2xfswbr().b[37][0]++, 'true') :
4406
+ /* istanbul ignore next */
4407
+ (cov_ms2xfswbr().b[37][1]++, result.length)} bytes`);
4408
+ /* istanbul ignore next */
4409
+ cov_ms2xfswbr().s[95]++;
4410
+ return result;
4411
+ }
4412
+ async _tryGetCredentials(options) {
4413
+ /* istanbul ignore next */
4414
+ cov_ms2xfswbr().f[14]++;
4415
+ cov_ms2xfswbr().s[96]++;
4416
+ if (options === CredentialsOptions.Omit) {
4417
+ /* istanbul ignore next */
4418
+ cov_ms2xfswbr().b[38][0]++;
4419
+ cov_ms2xfswbr().s[97]++;
4420
+ return;
4421
+ } else
4422
+ /* istanbul ignore next */
4423
+ {
4424
+ cov_ms2xfswbr().b[38][1]++;
4425
+ }
4426
+ let credentials =
4427
+ /* istanbul ignore next */
4428
+ (cov_ms2xfswbr().s[98]++, this._environmentCredential);
4429
+ /* istanbul ignore next */
4430
+ cov_ms2xfswbr().s[99]++;
4431
+ if (credentials === undefined) {
4432
+ /* istanbul ignore next */
4433
+ cov_ms2xfswbr().b[39][0]++;
4434
+ cov_ms2xfswbr().s[100]++;
4435
+ credentials = await this._tryGetCredentialsFromCache();
4436
+ } else
4437
+ /* istanbul ignore next */
4438
+ {
4439
+ cov_ms2xfswbr().b[39][1]++;
4440
+ }
4441
+ cov_ms2xfswbr().s[101]++;
4442
+ if (
4443
+ /* istanbul ignore next */
4444
+ (cov_ms2xfswbr().b[41][0]++, typeof credentials !== 'string') &&
4445
+ /* istanbul ignore next */
4446
+ (cov_ms2xfswbr().b[41][1]++, options === CredentialsOptions.Required)) {
4447
+ /* istanbul ignore next */
4448
+ cov_ms2xfswbr().b[40][0]++;
4449
+ cov_ms2xfswbr().s[102]++;
4450
+ throw new Error([`Credentials for ${this._url.href} have not been provided.`, `In CI, verify that RUSH_BUILD_CACHE_CREDENTIAL contains a valid Authorization header value.`, ``, `For local developers, run:`, ``, ` rush update-cloud-credentials --interactive`, ``].join('\n'));
4451
+ } else
4452
+ /* istanbul ignore next */
4453
+ {
4454
+ cov_ms2xfswbr().b[40][1]++;
4455
+ }
4456
+ cov_ms2xfswbr().s[103]++;
4457
+ return credentials;
4458
+ }
4459
+ async _tryGetCredentialsFromCache() {
4460
+ /* istanbul ignore next */
4461
+ cov_ms2xfswbr().f[15]++;
4462
+ var _a;
4463
+ let cacheEntry;
4464
+ /* istanbul ignore next */
4465
+ cov_ms2xfswbr().s[104]++;
4466
+ await rush_sdk_1.CredentialCache.usingAsync({
4467
+ supportEditing: false
4468
+ }, credentialsCache => {
4469
+ /* istanbul ignore next */
4470
+ cov_ms2xfswbr().f[16]++;
4471
+ cov_ms2xfswbr().s[105]++;
4472
+ cacheEntry = credentialsCache.tryGetCacheEntry(this._credentialCacheId);
4473
+ });
4474
+ /* istanbul ignore next */
4475
+ cov_ms2xfswbr().s[106]++;
4476
+ if (cacheEntry) {
4477
+ /* istanbul ignore next */
4478
+ cov_ms2xfswbr().b[42][0]++;
4479
+ const expirationTime =
4480
+ /* istanbul ignore next */
4481
+ (cov_ms2xfswbr().s[107]++,
4482
+ /* istanbul ignore next */
4483
+ (cov_ms2xfswbr().b[44][0]++, (_a = cacheEntry.expires) === null) ||
4484
+ /* istanbul ignore next */
4485
+ (cov_ms2xfswbr().b[44][1]++, _a === void 0) ?
4486
+ /* istanbul ignore next */
4487
+ (cov_ms2xfswbr().b[43][0]++, void 0) :
4488
+ /* istanbul ignore next */
4489
+ (cov_ms2xfswbr().b[43][1]++, _a.getTime()));
4490
+ /* istanbul ignore next */
4491
+ cov_ms2xfswbr().s[108]++;
4492
+ if (
4493
+ /* istanbul ignore next */
4494
+ (cov_ms2xfswbr().b[46][0]++, !expirationTime) ||
4495
+ /* istanbul ignore next */
4496
+ (cov_ms2xfswbr().b[46][1]++, expirationTime >= Date.now())) {
4497
+ /* istanbul ignore next */
4498
+ cov_ms2xfswbr().b[45][0]++;
4499
+ cov_ms2xfswbr().s[109]++;
4500
+ return cacheEntry.credential;
4501
+ } else
4502
+ /* istanbul ignore next */
4503
+ {
4504
+ cov_ms2xfswbr().b[45][1]++;
4505
+ }
4506
+ } else
4507
+ /* istanbul ignore next */
4508
+ {
4509
+ cov_ms2xfswbr().b[42][1]++;
4510
+ }
4511
+ }
4512
+ _getFailureType(requestMethod, response, isRedirect) {
4513
+ /* istanbul ignore next */
4514
+ cov_ms2xfswbr().f[17]++;
4515
+ cov_ms2xfswbr().s[110]++;
4516
+ if (response.ok) {
4517
+ /* istanbul ignore next */
4518
+ cov_ms2xfswbr().b[47][0]++;
4519
+ cov_ms2xfswbr().s[111]++;
4520
+ return FailureType.None;
4521
+ } else
4522
+ /* istanbul ignore next */
4523
+ {
4524
+ cov_ms2xfswbr().b[47][1]++;
4525
+ }
4526
+ cov_ms2xfswbr().s[112]++;
4527
+ switch (response.status) {
4528
+ case 503:
4529
+ /* istanbul ignore next */
4530
+ cov_ms2xfswbr().b[48][0]++;
4531
+ {
4532
+ /* istanbul ignore next */
4533
+ cov_ms2xfswbr().s[113]++;
4534
+ // We select 503 specifically because this represents "service unavailable" and
4535
+ // "rate limit throttle" errors, which are transient issues.
4536
+ //
4537
+ // There are other 5xx errors, such as 501, that can occur if the request is
4538
+ // malformed, so as a general rule we want to let through other 5xx errors
4539
+ // so the user can troubleshoot.
4540
+ // Don't fail production builds with warnings for transient issues
4541
+ return FailureType.Informational;
4542
+ }
4543
+ case 401:
4544
+ /* istanbul ignore next */
4545
+ cov_ms2xfswbr().b[48][1]++;
4546
+ case 403:
4547
+ /* istanbul ignore next */
4548
+ cov_ms2xfswbr().b[48][2]++;
4549
+ case 407:
4550
+ /* istanbul ignore next */
4551
+ cov_ms2xfswbr().b[48][3]++;
4552
+ {
4553
+ /* istanbul ignore next */
4554
+ cov_ms2xfswbr().s[114]++;
4555
+ if (
4556
+ /* istanbul ignore next */
4557
+ (cov_ms2xfswbr().b[50][0]++, requestMethod === 'GET') && (
4558
+ /* istanbul ignore next */
4559
+ (cov_ms2xfswbr().b[50][1]++, isRedirect) ||
4560
+ /* istanbul ignore next */
4561
+ (cov_ms2xfswbr().b[50][2]++, response.redirected))) {
4562
+ /* istanbul ignore next */
4563
+ cov_ms2xfswbr().b[49][0]++;
4564
+ cov_ms2xfswbr().s[115]++;
4565
+ // Cache misses for GET requests are not errors
4566
+ // This is a workaround behavior where a server can issue a redirect and we fail to authenticate at the new location.
4567
+ // We do not want to signal this as an authentication failure because the authorization header is not passed on to redirects.
4568
+ // i.e The authentication header was accepted for the first request and therefore subsequent failures
4569
+ // where it was not present should not be attributed to the header.
4570
+ // This scenario usually comes up with services that redirect to pre-signed URLS that don't actually exist.
4571
+ // Those services then usually treat the 404 as a 403 to prevent leaking information.
4572
+ return FailureType.None;
4573
+ } else
4574
+ /* istanbul ignore next */
4575
+ {
4576
+ cov_ms2xfswbr().b[49][1]++;
4577
+ }
4578
+ cov_ms2xfswbr().s[116]++;
4579
+ return FailureType.Authentication;
4580
+ }
4581
+ case 404:
4582
+ /* istanbul ignore next */
4583
+ cov_ms2xfswbr().b[48][4]++;
4584
+ {
4585
+ /* istanbul ignore next */
4586
+ cov_ms2xfswbr().s[117]++;
4587
+ if (requestMethod === 'GET') {
4588
+ /* istanbul ignore next */
4589
+ cov_ms2xfswbr().b[51][0]++;
4590
+ cov_ms2xfswbr().s[118]++;
4591
+ // Cache misses for GET requests are not errors
4592
+ return FailureType.None;
4593
+ } else
4594
+ /* istanbul ignore next */
4595
+ {
4596
+ cov_ms2xfswbr().b[51][1]++;
4597
+ }
4598
+ }
4599
+ }
4600
+ // Let dev builds succeed, let Prod builds fail
4601
+ /* istanbul ignore next */
4602
+ cov_ms2xfswbr().s[119]++;
4603
+ return FailureType.Warning;
4604
+ }
4605
+ _reportFailure(terminal, requestMethod, response, isRedirect, message) {
4606
+ /* istanbul ignore next */
4607
+ cov_ms2xfswbr().f[18]++;
4608
+ cov_ms2xfswbr().s[120]++;
4609
+ switch (this._getFailureType(requestMethod, response, isRedirect)) {
4610
+ default:
4611
+ /* istanbul ignore next */
4612
+ cov_ms2xfswbr().b[52][0]++;
4613
+ {
4614
+ /* istanbul ignore next */
4615
+ cov_ms2xfswbr().s[121]++;
4616
+ terminal.writeErrorLine(`${message}: HTTP ${response.status}: ${response.statusText}`);
4617
+ /* istanbul ignore next */
4618
+ cov_ms2xfswbr().s[122]++;
4619
+ break;
4620
+ }
4621
+ case FailureType.Warning:
4622
+ /* istanbul ignore next */
4623
+ cov_ms2xfswbr().b[52][1]++;
4624
+ {
4625
+ /* istanbul ignore next */
4626
+ cov_ms2xfswbr().s[123]++;
4627
+ terminal.writeWarningLine(`${message}: HTTP ${response.status}: ${response.statusText}`);
4628
+ /* istanbul ignore next */
4629
+ cov_ms2xfswbr().s[124]++;
4630
+ break;
4631
+ }
4632
+ case FailureType.Informational:
4633
+ /* istanbul ignore next */
4634
+ cov_ms2xfswbr().b[52][2]++;
4635
+ {
4636
+ /* istanbul ignore next */
4637
+ cov_ms2xfswbr().s[125]++;
4638
+ terminal.writeLine(`${message}: HTTP ${response.status}: ${response.statusText}`);
4639
+ /* istanbul ignore next */
4640
+ cov_ms2xfswbr().s[126]++;
4641
+ break;
4642
+ }
4643
+ case FailureType.None:
4644
+ /* istanbul ignore next */
4645
+ cov_ms2xfswbr().b[52][3]++;
4646
+ {
4647
+ /* istanbul ignore next */
4648
+ cov_ms2xfswbr().s[127]++;
4649
+ terminal.writeDebugLine(`${message}: HTTP ${response.status}: ${response.statusText}`);
4650
+ /* istanbul ignore next */
4651
+ cov_ms2xfswbr().s[128]++;
4652
+ break;
4653
+ }
4654
+ case FailureType.Authentication:
4655
+ /* istanbul ignore next */
4656
+ cov_ms2xfswbr().b[52][4]++;
4657
+ {
4658
+ /* istanbul ignore next */
4659
+ cov_ms2xfswbr().s[129]++;
4660
+ throw new Error([`${this._url.href} responded with ${response.status}: ${response.statusText}.`, `Credentials may be misconfigured or have expired.`, `In CI, verify that RUSH_BUILD_CACHE_CREDENTIAL contains a valid Authorization header value.`, ``, `For local developers, run:`, ``, ` rush update-cloud-credentials --interactive`, ``].join('\n'));
4661
+ }
4662
+ }
4663
+ }
4664
+ }
4665
+ /* istanbul ignore next */
4666
+ cov_ms2xfswbr().s[130]++;
4667
+ exports.HttpBuildCacheProvider = HttpBuildCacheProvider;
4668
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQWdCSztJQUFBO01BQUE7SUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaEJMO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQU9BO0FBQUE7QUFBQTtBQUVBLElBQUtBLGtCQUlKO0FBQUE7QUFBQTtBQUpELFdBQUtBLGtCQUFrQjtFQUFBO0VBQUE7RUFBQTtFQUNyQkEsbUVBQVE7RUFBQTtFQUFBO0VBQ1JBLG1FQUFRO0VBQUE7RUFBQTtFQUNSQSwyREFBSTtBQUNOLENBQUM7QUFKSTtBQUFBLDhDQUFrQjtBQUFBO0FBQUEsNEJBQWxCQSxrQkFBa0I7QUFNdkIsSUFBS0MsV0FNSjtBQUFBO0FBQUE7QUFORCxXQUFLQSxXQUFXO0VBQUE7RUFBQTtFQUFBO0VBQ2RBLDZDQUFJO0VBQUE7RUFBQTtFQUNKQSwrREFBYTtFQUFBO0VBQUE7RUFDYkEsbURBQU87RUFBQTtFQUFBO0VBQ1BBLCtDQUFLO0VBQUE7RUFBQTtFQUNMQSxpRUFBYztBQUNoQixDQUFDO0FBTkk7QUFBQSx1Q0FBVztBQUFBO0FBQUEsNEJBQVhBLFdBQVc7QUE0QmhCLE1BQU1DLHVCQUF1QjtBQUFBO0FBQUEsMEJBQVcsQ0FBQztBQUN6QyxNQUFNQywrQkFBK0I7QUFBQTtBQUFBLDBCQUFHLElBQUk7QUFFNUMsTUFBYUMsc0JBQXNCO0VBa0JqQ0MsWUFBbUJDLE9BQXVDLEVBQUVDLFdBQXdCO0lBQUE7SUFBQTs7OztJQUNsRixJQUFJLENBQUNDLFdBQVcsR0FBR0YsT0FBTyxDQUFDRyxVQUFVO0lBQUM7SUFBQTtJQUN0QyxJQUFJLENBQUNDLFlBQVksR0FBR0gsV0FBVztJQUFDO0lBQUE7SUFDaEMsSUFBSSxDQUFDSSxnQkFBZ0IsR0FBR0wsT0FBTyxDQUFDTSxlQUFlO0lBQUM7SUFBQTtJQUVoRCxJQUFJLENBQUNDLHNCQUFzQixHQUFHQyxtQ0FBd0IsQ0FBQ0Msb0JBQW9CO0lBQUM7SUFBQTtJQUM1RSxJQUFJLENBQUNDLG1DQUFtQyxHQUFHVixPQUFPLENBQUNXLG1CQUFtQjtJQUFDO0lBQUE7SUFDdkUsSUFBSSxDQUFDQyxJQUFJLEdBQUcsSUFBSUMsR0FBRyxDQUFDYixPQUFPLENBQUNjLEdBQUcsQ0FBQ0MsUUFBUSxDQUFDLEdBQUcsQ0FBQztJQUFBO0lBQUEsNEJBQUdmLE9BQU8sQ0FBQ2MsR0FBRztJQUFBO0lBQUEsNEJBQUdkLE9BQU8sQ0FBQ2MsR0FBRyxHQUFHLEdBQUcsRUFBQztJQUFDO0lBQUE7SUFDakYsSUFBSSxDQUFDRSxhQUFhO0lBQUc7SUFBQSx5Q0FBTyxDQUFDQyxZQUFZO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBLDRCQUFJLEtBQUs7SUFBQztJQUFBO0lBQ25ELElBQUksQ0FBQ0MsUUFBUTtJQUFHO0lBQUEseUNBQU8sQ0FBQ0MsT0FBTztJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQSw0QkFBSSxFQUFFO0lBQUM7SUFBQTtJQUN0QyxJQUFJLENBQUNDLGFBQWEsR0FBR3BCLE9BQU8sQ0FBQ3FCLFlBQVk7SUFBQztJQUFBO0lBQzFDLElBQUksQ0FBQ0MsZUFBZTtJQUFHO0lBQUEsMENBQU8sQ0FBQ0MsY0FBYztJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQSw2QkFBSSxFQUFFO0lBQUM7SUFBQTtJQUNwRCxJQUFJLENBQUNDLG9CQUFvQjtJQUFHO0lBQUEsMENBQU8sQ0FBQ0MsbUJBQW1CO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBLDZCQUFJNUIsK0JBQStCO0VBQzVGO0VBakJBLElBQVdjLG1CQUFtQjtJQUFBO0lBQUE7Ozs7SUFDNUIsT0FBTztNQUFBO01BQUEsc0VBQXdCLENBQUNlLHNCQUFzQjtNQUFBO01BQUE7TUFBQTtNQUFBO01BQUE7TUFBQSw2QkFBSSxJQUFJLENBQUNoQixtQ0FBbUM7SUFBQTtFQUNwRztFQWlCTyxNQUFNaUIsK0JBQStCLENBQzFDQyxRQUFtQixFQUNuQkMsT0FBZTtJQUFBO0lBQUE7SUFBQTtJQUVmLElBQUk7TUFDRixNQUFNQyxNQUFNO01BQUE7TUFBQSwwQkFBRyxNQUFNLElBQUksQ0FBQ0MsS0FBSyxDQUFDO1FBQzlCSCxRQUFRLEVBQUVBLFFBQVE7UUFDbEJJLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQ1YsZUFBZSxHQUFHTyxPQUFPLEVBQUU7UUFDM0NJLE1BQU0sRUFBRSxLQUFLO1FBQ2JDLElBQUksRUFBRUMsU0FBUztRQUNmQyxXQUFXLEVBQUUsMkJBQTJCO1FBQ3hDQyxRQUFRLEVBQUUsSUFBSTtRQUNkQyxXQUFXLEVBQUUxQztPQUNkLENBQUM7TUFBQztNQUFBO01BRUgsT0FBTzJDLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDVixNQUFNLENBQUM7TUFBQTtNQUFBLDZCQUFHQSxNQUFNO01BQUE7TUFBQSw2QkFBR0ssU0FBUztLQUNwRCxDQUFDLE9BQU9NLENBQUMsRUFBRTtNQUFBO01BQUE7TUFDVmIsUUFBUSxDQUFDYyxnQkFBZ0IsQ0FBQyw4QkFBOEJELENBQUMsRUFBRSxDQUFDO01BQUM7TUFBQTtNQUM3RCxPQUFPTixTQUFTOztFQUVwQjtFQUVPLE1BQU1RLDJCQUEyQixDQUN0Q2YsUUFBbUIsRUFDbkJDLE9BQWUsRUFDZmUsWUFBb0I7SUFBQTtJQUFBO0lBQUE7SUFFcEIsSUFBSSxDQUFDLElBQUksQ0FBQ2pDLG1CQUFtQixFQUFFO01BQUE7TUFBQTtNQUFBO01BQzdCaUIsUUFBUSxDQUFDaUIsY0FBYyxDQUFDLCtEQUErRCxDQUFDO01BQUM7TUFBQTtNQUN6RixPQUFPLEtBQUs7S0FDYjtJQUFBO0lBQUE7TUFBQTtJQUFBO0lBQUE7SUFFRGpCLFFBQVEsQ0FBQ2tCLGNBQWMsQ0FBQyxpQ0FBaUMsRUFBRWpCLE9BQU8sQ0FBQztJQUFDO0lBQUE7SUFFcEUsSUFBSTtNQUNGLE1BQU1DLE1BQU07TUFBQTtNQUFBLDBCQUFHLE1BQU0sSUFBSSxDQUFDQyxLQUFLLENBQUM7UUFDOUJILFFBQVEsRUFBRUEsUUFBUTtRQUNsQkksTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDVixlQUFlLEdBQUdPLE9BQU8sRUFBRTtRQUMzQ0ksTUFBTSxFQUFFLElBQUksQ0FBQ2pCLGFBQWE7UUFDMUJrQixJQUFJLEVBQUVVLFlBQVk7UUFDbEJSLFdBQVcsRUFBRSw2QkFBNkI7UUFDMUNDLFFBQVEsRUFBRSxLQUFLO1FBQ2ZDLFdBQVcsRUFBRTFDO09BQ2QsQ0FBQztNQUFDO01BQUE7TUFFSCxPQUFPa0MsTUFBTSxLQUFLLEtBQUs7S0FDeEIsQ0FBQyxPQUFPVyxDQUFDLEVBQUU7TUFBQTtNQUFBO01BQ1ZiLFFBQVEsQ0FBQ2MsZ0JBQWdCLENBQUMsZ0NBQWdDRCxDQUFDLEVBQUUsQ0FBQztNQUFDO01BQUE7TUFDL0QsT0FBTyxLQUFLOztFQUVoQjtFQUVPLE1BQU1NLDJCQUEyQixDQUFDbkIsUUFBbUIsRUFBRW9CLFVBQWtCO0lBQUE7SUFBQTtJQUFBO0lBQzlFLE1BQU14QywwQkFBZSxDQUFDeUMsVUFBVSxDQUM5QjtNQUNFQyxjQUFjLEVBQUU7S0FDakIsRUFDRCxNQUFPQyxnQkFBaUMsSUFBSTtNQUFBO01BQUE7TUFBQTtNQUMxQ0EsZ0JBQWdCLENBQUNDLGFBQWEsQ0FBQyxJQUFJLENBQUNDLGtCQUFrQixFQUFFO1FBQ3RETCxVQUFVLEVBQUVBO09BQ2IsQ0FBQztNQUFDO01BQUE7TUFDSCxNQUFNRyxnQkFBZ0IsQ0FBQ0csbUJBQW1CLEVBQUU7SUFDOUMsQ0FBQyxDQUNGO0VBQ0g7RUFFTyxNQUFNQyxzQ0FBc0MsQ0FBQzNCLFFBQW1CO0lBQUE7SUFBQTtJQUFBO0lBQ3JFLElBQUksQ0FBQyxJQUFJLENBQUNSLGFBQWEsRUFBRTtNQUFBO01BQUE7TUFBQTtNQUN2QixNQUFNLElBQUlvQyxLQUFLLENBQ2IsNkRBQTZELEdBQzNELGlFQUFpRSxJQUFJLENBQUN0RCxXQUFXLDRGQUE0RixHQUM3SyxtR0FBbUcsR0FDbkcsc0NBQXNDLElBQUksQ0FBQ1UsSUFBSSxDQUFDNkMsSUFBSSxFQUFFLENBQ3pEO0tBQ0Y7SUFBQTtJQUFBO01BQUE7SUFBQTtJQUVELE1BQU1DLEdBQUc7SUFBQTtJQUFBLDBCQUFXLEdBQUcsSUFBSSxDQUFDdEMsYUFBYSxDQUFDdUMsSUFBSSxJQUFJO0lBQUM7SUFBQSxpQ0FBSSxDQUFDdkMsYUFBYSxDQUFDd0MsSUFBSTtJQUFBO0lBQUEsNkJBQUksRUFBRSxHQUFFQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7SUFBQztJQUFBO0lBQzlGakMsUUFBUSxDQUFDa0MsZ0JBQWdCLENBQUMsWUFBWUosR0FBRyxzQkFBc0IsQ0FBQztJQUNoRSxNQUFNNUIsTUFBTTtJQUFBO0lBQUEsMEJBQUdpQyw4QkFBVSxDQUFDQyxTQUFTLENBQUMsSUFBSSxDQUFDNUMsYUFBYSxDQUFDdUMsSUFBSTtJQUFFO0lBQUEsaUNBQUksQ0FBQ3ZDLGFBQWEsQ0FBQ3dDLElBQUk7SUFBQTtJQUFBLDZCQUFJLEVBQUUsRUFBQztJQUFDO0lBQUE7SUFFNUZoQyxRQUFRLENBQUNpQixjQUFjLENBQUNmLE1BQU0sQ0FBQ21DLE1BQU0sQ0FBQztJQUFDO0lBQUE7SUFFdkMsSUFBSW5DLE1BQU0sQ0FBQ29DLEtBQUssRUFBRTtNQUFBO01BQUE7TUFBQTtNQUNoQixNQUFNLElBQUlWLEtBQUssQ0FBQyw4Q0FBOENFLEdBQUcsV0FBVyxDQUFDO0tBQzlFO0lBQUE7SUFBQTtNQUFBO0lBQUE7SUFFRCxNQUFNVixVQUFVO0lBQUE7SUFBQSwwQkFBR2xCLE1BQU0sQ0FBQ3FDLE1BQU0sQ0FBQ0MsSUFBSSxFQUFFO0lBQUM7SUFBQTtJQUN4Q3hDLFFBQVEsQ0FBQ2tDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDO0lBQUM7SUFBQTtJQUU3QyxNQUFNLElBQUksQ0FBQ2YsMkJBQTJCLENBQUNuQixRQUFRLEVBQUVvQixVQUFVLENBQUM7SUFBQztJQUFBO0lBRTdEcEIsUUFBUSxDQUFDeUMsU0FBUyxDQUFDLDJCQUEyQixDQUFDO0VBQ2pEO0VBRU8sTUFBTUMsNEJBQTRCLENBQUMxQyxRQUFtQjtJQUFBO0lBQUE7SUFBQTtJQUMzRCxNQUFNcEIsMEJBQWUsQ0FBQ3lDLFVBQVUsQ0FDOUI7TUFDRUMsY0FBYyxFQUFFO0tBQ2pCLEVBQ0QsTUFBT0MsZ0JBQWlDLElBQUk7TUFBQTtNQUFBO01BQUE7TUFDMUNBLGdCQUFnQixDQUFDb0IsZ0JBQWdCLENBQUMsSUFBSSxDQUFDbEIsa0JBQWtCLENBQUM7TUFBQztNQUFBO01BQzNELE1BQU1GLGdCQUFnQixDQUFDRyxtQkFBbUIsRUFBRTtJQUM5QyxDQUFDLENBQ0Y7RUFDSDtFQUVBLElBQVlELGtCQUFrQjtJQUFBO0lBQUE7SUFBQTtJQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDbUIsbUJBQW1CLEVBQUU7TUFBQTtNQUFBO01BQzdCLE1BQU1DLFlBQVk7TUFBQTtNQUFBLDBCQUFhLENBQUMsSUFBSSxDQUFDN0QsSUFBSSxDQUFDNkMsSUFBSSxDQUFDO01BQUM7TUFBQTtNQUVoRCxJQUFJLElBQUksQ0FBQy9DLG1DQUFtQyxFQUFFO1FBQUE7UUFBQTtRQUFBO1FBQzVDK0QsWUFBWSxDQUFDQyxJQUFJLENBQUMsbUJBQW1CLENBQUM7T0FDdkM7TUFBQTtNQUFBO1FBQUE7TUFBQTtNQUFBO01BRUQsSUFBSSxDQUFDRixtQkFBbUIsR0FBR0MsWUFBWSxDQUFDWixJQUFJLENBQUMsR0FBRyxDQUFDO0tBQ2xEO0lBQUE7SUFBQTtNQUFBO0lBQUE7SUFBQTtJQUVELE9BQU8sSUFBSSxDQUFDVyxtQkFBbUI7RUFDakM7RUFFUSxNQUFNekMsS0FBSyxDQUFDL0IsT0FTbkI7SUFBQTtJQUFBO0lBQ0MsTUFBTTtNQUFFNEIsUUFBUTtNQUFFSSxNQUFNO01BQUVDLE1BQU07TUFBRUMsSUFBSTtNQUFFRSxXQUFXO01BQUVDLFFBQVE7TUFBRXNDO0lBQWlCLENBQUU7SUFBQTtJQUFBLDBCQUFHM0UsT0FBTztJQUM1RixNQUFNNEUscUJBQXFCO0lBQUE7SUFBQTtJQUFHO0lBQUEsOENBQWlCO0lBQUE7SUFBQSw2QkFBakJELGlCQUFpQjtJQUFBO0lBQUEsNkJBQWpCQSxpQkFBaUI7SUFBQTtJQUFBLDZCQUFJakYsa0JBQWtCLENBQUNtRixRQUFRO0lBQzlFLE1BQU1DLFdBQVc7SUFBQTtJQUFBLDBCQUFHLE1BQU0sSUFBSSxDQUFDQyxrQkFBa0IsQ0FBQ0gscUJBQXFCLENBQUM7SUFDeEUsTUFBTTlELEdBQUc7SUFBQTtJQUFBLDBCQUFHLElBQUlELEdBQUcsQ0FBQ21CLE1BQU0sRUFBRSxJQUFJLENBQUNwQixJQUFJLENBQUMsQ0FBQzZDLElBQUk7SUFFM0MsTUFBTXRDLE9BQU87SUFBQTtJQUFBLDBCQUEyQixFQUFFO0lBQUM7SUFBQTtJQUMzQyxJQUFJLE9BQU8yRCxXQUFXLEtBQUssUUFBUSxFQUFFO01BQUE7TUFBQTtNQUFBO01BQ25DM0QsT0FBTyxDQUFDNkQsYUFBYSxHQUFHRixXQUFXO0tBQ3BDO0lBQUE7SUFBQTtNQUFBO0lBQUE7SUFBQTtJQUVELEtBQUssTUFBTSxDQUFDRyxHQUFHLEVBQUVDLEtBQUssQ0FBQyxJQUFJQyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxJQUFJLENBQUNsRSxRQUFRLENBQUMsRUFBRTtNQUFBO01BQUE7TUFDeEQsSUFBSSxPQUFPZ0UsS0FBSyxLQUFLLFFBQVEsRUFBRTtRQUFBO1FBQUE7UUFBQTtRQUM3Qi9ELE9BQU8sQ0FBQzhELEdBQUcsQ0FBQyxHQUFHQyxLQUFLO09BQ3JCO01BQUE7TUFBQTtRQUFBO01BQUE7O0lBR0gsTUFBTUcsVUFBVTtJQUFBO0lBQUE7SUFBRztJQUFBO0lBQUM7SUFBQSxpQ0FBMkI7SUFBQTtJQUFBLDZCQUEzQm5ELElBQUk7SUFBQTtJQUFBO0lBQUE7SUFBQSw2QkFBSkEsSUFBSSxDQUF5Qm9ELE1BQU07SUFBQTtJQUFBLDZCQUFJLFNBQVM7SUFBQztJQUFBO0lBRXJFMUQsUUFBUSxDQUFDa0IsY0FBYyxDQUFDLCtCQUErQmIsTUFBTSxJQUFJbkIsR0FBRyxJQUFJdUUsVUFBVSxRQUFRLENBQUM7SUFFM0YsTUFBTUUsUUFBUTtJQUFBO0lBQUEsMEJBQUcsTUFBTSx3QkFBSyxFQUFDekUsR0FBRyxFQUFFO01BQ2hDbUIsTUFBTSxFQUFFQSxNQUFNO01BQ2RkLE9BQU8sRUFBRUEsT0FBTztNQUNoQmUsSUFBSSxFQUFFQSxJQUFJO01BQ1ZzRCxRQUFRLEVBQUU7S0FDWCxDQUFDO0lBQUM7SUFBQTtJQUVILElBQUksQ0FBQ0QsUUFBUSxDQUFDRSxFQUFFLEVBQUU7TUFBQTtNQUFBO01BQ2hCLE1BQU1DLHVCQUF1QjtNQUFBO01BQUE7TUFBRztNQUFBLHFDQUFRLENBQUNDLE1BQU0sSUFBSSxHQUFHO01BQUE7TUFBQSw2QkFBSUosUUFBUSxDQUFDSSxNQUFNLEdBQUcsR0FBRztNQUFDO01BQUE7TUFFaEY7TUFDRTtNQUFBLDhCQUFDRCx1QkFBdUI7TUFBQTtNQUFBLDZCQUN4QixPQUFPWixXQUFXLEtBQUssUUFBUTtNQUFBO01BQUEsNkJBQy9CRixxQkFBcUIsS0FBS2xGLGtCQUFrQixDQUFDbUYsUUFBUSxHQUNyRDtRQUFBO1FBQUE7UUFBQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxPQUFPLE1BQU0sSUFBSSxDQUFDOUMsS0FBSyxpQ0FBTS9CLE9BQU87VUFBRTJFLGlCQUFpQixFQUFFakYsa0JBQWtCLENBQUNrRztRQUFRLEdBQUc7T0FDeEY7TUFBQTtNQUFBO1FBQUE7TUFBQTtNQUFBO01BRUQsSUFBSTVGLE9BQU8sQ0FBQ3NDLFdBQVcsR0FBRyxDQUFDLEVBQUU7UUFBQTtRQUFBO1FBQzNCO1FBQ0E7UUFDQTtRQUNBLE1BQU11RCxNQUFNO1FBQUE7UUFBQSwwQkFBRyxHQUFHLEdBQUdDLElBQUksQ0FBQ0MsTUFBTSxFQUFFLEVBQUMsQ0FBQztRQUNwQyxNQUFNQyxVQUFVO1FBQUE7UUFBQSwwQkFBR0YsSUFBSSxDQUFDRyxLQUFLLENBQUNKLE1BQU0sR0FBRyxJQUFJLENBQUNyRSxvQkFBb0IsQ0FBQztRQUFDO1FBQUE7UUFFbEUsTUFBTXVDLHlCQUFLLENBQUNtQyxLQUFLLENBQUNGLFVBQVUsQ0FBQztRQUFDO1FBQUE7UUFFOUIsT0FBTyxNQUFNLElBQUksQ0FBQ2pFLEtBQUssaUNBQU0vQixPQUFPO1VBQUVzQyxXQUFXLEVBQUV0QyxPQUFPLENBQUNzQyxXQUFXLEdBQUc7UUFBQyxHQUFHO09BQzlFO01BQUE7TUFBQTtRQUFBO01BQUE7TUFBQTtNQUVELElBQUksQ0FBQzZELGNBQWMsQ0FBQ3ZFLFFBQVEsRUFBRUssTUFBTSxFQUFFc0QsUUFBUSxFQUFFLEtBQUssRUFBRW5ELFdBQVcsQ0FBQztNQUFDO01BQUE7TUFDcEUsT0FBTyxLQUFLO0tBQ2I7SUFBQTtJQUFBO01BQUE7SUFBQTtJQUVELE1BQU1OLE1BQU07SUFBQTtJQUFBLDBCQUFxQk8sUUFBUTtJQUFBO0lBQUEsNkJBQUdFLE1BQU0sQ0FBQzZELElBQUksQ0FBQyxNQUFNYixRQUFRLENBQUNjLFdBQVcsRUFBRSxDQUFDO0lBQUE7SUFBQSw2QkFBRyxJQUFJO0lBQUM7SUFBQTtJQUU3RnpFLFFBQVEsQ0FBQ2tCLGNBQWMsQ0FDckIsdUNBQXVDeUMsUUFBUSxDQUFDSSxNQUFNLElBQUk3RSxHQUFHLElBQzNEZ0IsTUFBTSxLQUFLLElBQUk7SUFBQTtJQUFBLDZCQUFHLE1BQU07SUFBQTtJQUFBLDZCQUFHQSxNQUFNLENBQUN3RCxNQUNwQyxTQUFRLENBQ1Q7SUFBQztJQUFBO0lBRUYsT0FBT3hELE1BQU07RUFDZjtFQU1RLE1BQU1pRCxrQkFBa0IsQ0FBQy9FLE9BQTJCO0lBQUE7SUFBQTtJQUFBO0lBQzFELElBQUlBLE9BQU8sS0FBS04sa0JBQWtCLENBQUM0RyxJQUFJLEVBQUU7TUFBQTtNQUFBO01BQUE7TUFDdkM7S0FDRDtJQUFBO0lBQUE7TUFBQTtJQUFBO0lBRUQsSUFBSXhCLFdBQVc7SUFBQTtJQUFBLDBCQUF1QixJQUFJLENBQUN2RSxzQkFBc0I7SUFBQztJQUFBO0lBRWxFLElBQUl1RSxXQUFXLEtBQUszQyxTQUFTLEVBQUU7TUFBQTtNQUFBO01BQUE7TUFDN0IyQyxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUN5QiwyQkFBMkIsRUFBRTtLQUN2RDtJQUFBO0lBQUE7TUFBQTtJQUFBO0lBQUE7SUFFRDtJQUFJO0lBQUEsb0NBQU96QixXQUFXLEtBQUssUUFBUTtJQUFBO0lBQUEsNkJBQUk5RSxPQUFPLEtBQUtOLGtCQUFrQixDQUFDa0csUUFBUSxHQUFFO01BQUE7TUFBQTtNQUFBO01BQzlFLE1BQU0sSUFBSXBDLEtBQUssQ0FDYixDQUNFLG1CQUFtQixJQUFJLENBQUM1QyxJQUFJLENBQUM2QyxJQUFJLDBCQUEwQixFQUMzRCw2RkFBNkYsRUFDN0YsRUFBRSxFQUNGLDRCQUE0QixFQUM1QixFQUFFLEVBQ0YsaURBQWlELEVBQ2pELEVBQUUsQ0FDSCxDQUFDSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQ2I7S0FDRjtJQUFBO0lBQUE7TUFBQTtJQUFBO0lBQUE7SUFFRCxPQUFPaUIsV0FBVztFQUNwQjtFQUVRLE1BQU15QiwyQkFBMkI7SUFBQTtJQUFBOztJQUN2QyxJQUFJQyxVQUE2QztJQUFDO0lBQUE7SUFFbEQsTUFBTWhHLDBCQUFlLENBQUN5QyxVQUFVLENBQzlCO01BQ0VDLGNBQWMsRUFBRTtLQUNqQixFQUNBQyxnQkFBaUMsSUFBSTtNQUFBO01BQUE7TUFBQTtNQUNwQ3FELFVBQVUsR0FBR3JELGdCQUFnQixDQUFDc0QsZ0JBQWdCLENBQUMsSUFBSSxDQUFDcEQsa0JBQWtCLENBQUM7SUFDekUsQ0FBQyxDQUNGO0lBQUM7SUFBQTtJQUVGLElBQUltRCxVQUFVLEVBQUU7TUFBQTtNQUFBO01BQ2QsTUFBTUUsY0FBYztNQUFBO01BQUE7TUFBdUI7TUFBQSw2Q0FBVSxDQUFDQyxPQUFPO01BQUE7TUFBQTtNQUFBO01BQUE7TUFBQTtNQUFBLGdDQUFFQyxPQUFPLEVBQUU7TUFBQztNQUFBO01BQ3pFO01BQUk7TUFBQSw4QkFBQ0YsY0FBYztNQUFBO01BQUEsNkJBQUlBLGNBQWMsSUFBSUcsSUFBSSxDQUFDQyxHQUFHLEVBQUUsR0FBRTtRQUFBO1FBQUE7UUFBQTtRQUNuRCxPQUFPTixVQUFVLENBQUN4RCxVQUFVO09BQzdCO01BQUE7TUFBQTtRQUFBO01BQUE7S0FDRjtJQUFBO0lBQUE7TUFBQTtJQUFBO0VBQ0g7RUFFUStELGVBQWUsQ0FBQ0MsYUFBcUIsRUFBRXpCLFFBQWtCLEVBQUUwQixVQUFtQjtJQUFBO0lBQUE7SUFBQTtJQUNwRixJQUFJMUIsUUFBUSxDQUFDRSxFQUFFLEVBQUU7TUFBQTtNQUFBO01BQUE7TUFDZixPQUFPOUYsV0FBVyxDQUFDdUgsSUFBSTtLQUN4QjtJQUFBO0lBQUE7TUFBQTtJQUFBO0lBQUE7SUFFRCxRQUFRM0IsUUFBUSxDQUFDSSxNQUFNO01BQ3JCLEtBQUssR0FBRztRQUFBO1FBQUE7UUFBRTtVQUFBO1VBQUE7VUFDUjtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFFQTtVQUNBLE9BQU9oRyxXQUFXLENBQUN3SCxhQUFhOztNQUdsQyxLQUFLLEdBQUc7UUFBQTtRQUFBO01BQ1IsS0FBSyxHQUFHO1FBQUE7UUFBQTtNQUNSLEtBQUssR0FBRztRQUFBO1FBQUE7UUFBRTtVQUFBO1VBQUE7VUFDUjtVQUFJO1VBQUEsMENBQWEsS0FBSyxLQUFLO1VBQUs7VUFBQSx1Q0FBVTtVQUFBO1VBQUEsNkJBQUk1QixRQUFRLENBQUM2QixVQUFVLEVBQUMsRUFBRTtZQUFBO1lBQUE7WUFBQTtZQUNsRTtZQUNBO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBLE9BQU96SCxXQUFXLENBQUN1SCxJQUFJO1dBQ3hCO1VBQUE7VUFBQTtZQUFBO1VBQUE7VUFBQTtVQUVELE9BQU92SCxXQUFXLENBQUMwSCxjQUFjOztNQUduQyxLQUFLLEdBQUc7UUFBQTtRQUFBO1FBQUU7VUFBQTtVQUFBO1VBQ1IsSUFBSUwsYUFBYSxLQUFLLEtBQUssRUFBRTtZQUFBO1lBQUE7WUFBQTtZQUMzQjtZQUNBLE9BQU9ySCxXQUFXLENBQUN1SCxJQUFJO1dBQ3hCO1VBQUE7VUFBQTtZQUFBO1VBQUE7O0lBQ0Y7SUFHSDtJQUFBO0lBQUE7SUFDQSxPQUFPdkgsV0FBVyxDQUFDMkgsT0FBTztFQUM1QjtFQUVRbkIsY0FBYyxDQUNwQnZFLFFBQW1CLEVBQ25Cb0YsYUFBcUIsRUFDckJ6QixRQUFrQixFQUNsQjBCLFVBQW1CLEVBQ25CTSxPQUFlO0lBQUE7SUFBQTtJQUFBO0lBRWYsUUFBUSxJQUFJLENBQUNSLGVBQWUsQ0FBQ0MsYUFBYSxFQUFFekIsUUFBUSxFQUFFMEIsVUFBVSxDQUFDO01BQy9EO1FBQUE7UUFBQTtRQUFTO1VBQUE7VUFBQTtVQUNQckYsUUFBUSxDQUFDaUIsY0FBYyxDQUFDLEdBQUcwRSxPQUFPLFVBQVVoQyxRQUFRLENBQUNJLE1BQU0sS0FBS0osUUFBUSxDQUFDaUMsVUFBVSxFQUFFLENBQUM7VUFBQztVQUFBO1VBQ3ZGOztNQUdGLEtBQUs3SCxXQUFXLENBQUMySCxPQUFPO1FBQUE7UUFBQTtRQUFFO1VBQUE7VUFBQTtVQUN4QjFGLFFBQVEsQ0FBQ2MsZ0JBQWdCLENBQUMsR0FBRzZFLE9BQU8sVUFBVWhDLFFBQVEsQ0FBQ0ksTUFBTSxLQUFLSixRQUFRLENBQUNpQyxVQUFVLEVBQUUsQ0FBQztVQUFDO1VBQUE7VUFDekY7O01BR0YsS0FBSzdILFdBQVcsQ0FBQ3dILGFBQWE7UUFBQTtRQUFBO1FBQUU7VUFBQTtVQUFBO1VBQzlCdkYsUUFBUSxDQUFDeUMsU0FBUyxDQUFDLEdBQUdrRCxPQUFPLFVBQVVoQyxRQUFRLENBQUNJLE1BQU0sS0FBS0osUUFBUSxDQUFDaUMsVUFBVSxFQUFFLENBQUM7VUFBQztVQUFBO1VBQ2xGOztNQUdGLEtBQUs3SCxXQUFXLENBQUN1SCxJQUFJO1FBQUE7UUFBQTtRQUFFO1VBQUE7VUFBQTtVQUNyQnRGLFFBQVEsQ0FBQ2tCLGNBQWMsQ0FBQyxHQUFHeUUsT0FBTyxVQUFVaEMsUUFBUSxDQUFDSSxNQUFNLEtBQUtKLFFBQVEsQ0FBQ2lDLFVBQVUsRUFBRSxDQUFDO1VBQUM7VUFBQTtVQUN2Rjs7TUFHRixLQUFLN0gsV0FBVyxDQUFDMEgsY0FBYztRQUFBO1FBQUE7UUFBRTtVQUFBO1VBQUE7VUFDL0IsTUFBTSxJQUFJN0QsS0FBSyxDQUNiLENBQ0UsR0FBRyxJQUFJLENBQUM1QyxJQUFJLENBQUM2QyxJQUFJLG1CQUFtQjhCLFFBQVEsQ0FBQ0ksTUFBTSxLQUFLSixRQUFRLENBQUNpQyxVQUFVLEdBQUcsRUFDOUUsbURBQW1ELEVBQ25ELDZGQUE2RixFQUM3RixFQUFFLEVBQ0YsNEJBQTRCLEVBQzVCLEVBQUUsRUFDRixpREFBaUQsRUFDakQsRUFBRSxDQUNILENBQUMzRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQ2I7O0lBQ0Y7RUFFTDs7QUFDRDtBQUFBO0FBeFhENEQiLCJuYW1lcyI6WyJDcmVkZW50aWFsc09wdGlvbnMiLCJGYWlsdXJlVHlwZSIsIk1BWF9IVFRQX0NBQ0hFX0FUVEVNUFRTIiwiREVGQVVMVF9NSU5fSFRUUF9SRVRSWV9ERUxBWV9NUyIsIkh0dHBCdWlsZENhY2hlUHJvdmlkZXIiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJydXNoU2Vzc2lvbiIsIl9wbHVnaW5OYW1lIiwicGx1Z2luTmFtZSIsIl9ydXNoU2Vzc2lvbiIsIl9ydXNoUHJvamVjdFJvb3QiLCJydXNoUHJvamVjdFJvb3QiLCJfZW52aXJvbm1lbnRDcmVkZW50aWFsIiwicnVzaF9zZGtfMSIsImJ1aWxkQ2FjaGVDcmVkZW50aWFsIiwiX2lzQ2FjaGVXcml0ZUFsbG93ZWRCeUNvbmZpZ3VyYXRpb24iLCJpc0NhY2hlV3JpdGVBbGxvd2VkIiwiX3VybCIsIlVSTCIsInVybCIsImVuZHNXaXRoIiwiX3VwbG9hZE1ldGhvZCIsInVwbG9hZE1ldGhvZCIsIl9oZWFkZXJzIiwiaGVhZGVycyIsIl90b2tlbkhhbmRsZXIiLCJ0b2tlbkhhbmRsZXIiLCJfY2FjaGVLZXlQcmVmaXgiLCJjYWNoZUtleVByZWZpeCIsIl9taW5IdHRwUmV0cnlEZWxheU1zIiwibWluSHR0cFJldHJ5RGVsYXlNcyIsImJ1aWxkQ2FjaGVXcml0ZUFsbG93ZWQiLCJ0cnlHZXRDYWNoZUVudHJ5QnVmZmVyQnlJZEFzeW5jIiwidGVybWluYWwiLCJjYWNoZUlkIiwicmVzdWx0IiwiX2h0dHAiLCJyZWxVcmwiLCJtZXRob2QiLCJib2R5IiwidW5kZWZpbmVkIiwid2FybmluZ1RleHQiLCJyZWFkQm9keSIsIm1heEF0dGVtcHRzIiwiQnVmZmVyIiwiaXNCdWZmZXIiLCJlIiwid3JpdGVXYXJuaW5nTGluZSIsInRyeVNldENhY2hlRW50cnlCdWZmZXJBc3luYyIsIm9iamVjdEJ1ZmZlciIsIndyaXRlRXJyb3JMaW5lIiwid3JpdGVEZWJ1Z0xpbmUiLCJ1cGRhdGVDYWNoZWRDcmVkZW50aWFsQXN5bmMiLCJjcmVkZW50aWFsIiwidXNpbmdBc3luYyIsInN1cHBvcnRFZGl0aW5nIiwiY3JlZGVudGlhbHNDYWNoZSIsInNldENhY2hlRW50cnkiLCJfY3JlZGVudGlhbENhY2hlSWQiLCJzYXZlSWZNb2RpZmllZEFzeW5jIiwidXBkYXRlQ2FjaGVkQ3JlZGVudGlhbEludGVyYWN0aXZlQXN5bmMiLCJFcnJvciIsImhyZWYiLCJjbWQiLCJleGVjIiwiYXJncyIsImpvaW4iLCJ3cml0ZVZlcmJvc2VMaW5lIiwibm9kZV9jb3JlX2xpYnJhcnlfMSIsInNwYXduU3luYyIsInN0ZGVyciIsImVycm9yIiwic3Rkb3V0IiwidHJpbSIsIndyaXRlTGluZSIsImRlbGV0ZUNhY2hlZENyZWRlbnRpYWxzQXN5bmMiLCJkZWxldGVDYWNoZUVudHJ5IiwiX19jcmVkZW50aWFsQ2FjaGVJZCIsImNhY2hlSWRQYXJ0cyIsInB1c2giLCJjcmVkZW50aWFsT3B0aW9ucyIsInNhZmVDcmVkZW50aWFsT3B0aW9ucyIsIk9wdGlvbmFsIiwiY3JlZGVudGlhbHMiLCJfdHJ5R2V0Q3JlZGVudGlhbHMiLCJBdXRob3JpemF0aW9uIiwia2V5IiwidmFsdWUiLCJPYmplY3QiLCJlbnRyaWVzIiwiYm9keUxlbmd0aCIsImxlbmd0aCIsInJlc3BvbnNlIiwicmVkaXJlY3QiLCJvayIsImlzTm9uQ3JlZGVudGlhbFJlc3BvbnNlIiwic3RhdHVzIiwiUmVxdWlyZWQiLCJmYWN0b3IiLCJNYXRoIiwicmFuZG9tIiwicmV0cnlEZWxheSIsImZsb29yIiwic2xlZXAiLCJfcmVwb3J0RmFpbHVyZSIsImZyb20iLCJhcnJheUJ1ZmZlciIsIk9taXQiLCJfdHJ5R2V0Q3JlZGVudGlhbHNGcm9tQ2FjaGUiLCJjYWNoZUVudHJ5IiwidHJ5R2V0Q2FjaGVFbnRyeSIsImV4cGlyYXRpb25UaW1lIiwiZXhwaXJlcyIsImdldFRpbWUiLCJEYXRlIiwibm93IiwiX2dldEZhaWx1cmVUeXBlIiwicmVxdWVzdE1ldGhvZCIsImlzUmVkaXJlY3QiLCJOb25lIiwiSW5mb3JtYXRpb25hbCIsInJlZGlyZWN0ZWQiLCJBdXRoZW50aWNhdGlvbiIsIldhcm5pbmciLCJtZXNzYWdlIiwic3RhdHVzVGV4dCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIvaG9tZS92c3RzL3dvcmsvMS9zL3J1c2gtcGx1Z2lucy9ydXNoLWh0dHAtYnVpbGQtY2FjaGUtcGx1Z2luL3NyYy9IdHRwQnVpbGRDYWNoZVByb3ZpZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElUZXJtaW5hbCwgRXhlY3V0YWJsZSwgQXN5bmMgfSBmcm9tICdAcnVzaHN0YWNrL25vZGUtY29yZS1saWJyYXJ5JztcbmltcG9ydCB7XG4gIElDbG91ZEJ1aWxkQ2FjaGVQcm92aWRlcixcbiAgSUNyZWRlbnRpYWxDYWNoZUVudHJ5LFxuICBDcmVkZW50aWFsQ2FjaGUsXG4gIFJ1c2hTZXNzaW9uLFxuICBFbnZpcm9ubWVudENvbmZpZ3VyYXRpb25cbn0gZnJvbSAnQHJ1c2hzdGFjay9ydXNoLXNkayc7XG5pbXBvcnQgZmV0Y2gsIHsgQm9keUluaXQsIFJlc3BvbnNlIH0gZnJvbSAnbm9kZS1mZXRjaCc7XG5cbmVudW0gQ3JlZGVudGlhbHNPcHRpb25zIHtcbiAgT3B0aW9uYWwsXG4gIFJlcXVpcmVkLFxuICBPbWl0XG59XG5cbmVudW0gRmFpbHVyZVR5cGUge1xuICBOb25lLFxuICBJbmZvcm1hdGlvbmFsLFxuICBXYXJuaW5nLFxuICBFcnJvcixcbiAgQXV0aGVudGljYXRpb25cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJSHR0cEJ1aWxkQ2FjaGVUb2tlbkhhbmRsZXIge1xuICBleGVjOiBzdHJpbmc7XG4gIGFyZ3M/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUh0dHBCdWlsZENhY2hlUHJvdmlkZXJPcHRpb25zIHtcbiAgdXJsOiBzdHJpbmc7XG4gIHRva2VuSGFuZGxlcj86IElIdHRwQnVpbGRDYWNoZVRva2VuSGFuZGxlcjtcbiAgdXBsb2FkTWV0aG9kPzogc3RyaW5nO1xuICBtaW5IdHRwUmV0cnlEZWxheU1zPzogbnVtYmVyO1xuICBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgY2FjaGVLZXlQcmVmaXg/OiBzdHJpbmc7XG4gIGlzQ2FjaGVXcml0ZUFsbG93ZWQ6IGJvb2xlYW47XG4gIHBsdWdpbk5hbWU6IHN0cmluZztcbiAgcnVzaFByb2plY3RSb290OiBzdHJpbmc7XG59XG5cbmNvbnN0IE1BWF9IVFRQX0NBQ0hFX0FUVEVNUFRTOiBudW1iZXIgPSAzO1xuY29uc3QgREVGQVVMVF9NSU5fSFRUUF9SRVRSWV9ERUxBWV9NUyA9IDI1MDA7XG5cbmV4cG9ydCBjbGFzcyBIdHRwQnVpbGRDYWNoZVByb3ZpZGVyIGltcGxlbWVudHMgSUNsb3VkQnVpbGRDYWNoZVByb3ZpZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGx1Z2luTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ydXNoU2Vzc2lvbjogUnVzaFNlc3Npb247XG4gIHByaXZhdGUgcmVhZG9ubHkgX3J1c2hQcm9qZWN0Um9vdDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lbnZpcm9ubWVudENyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNDYWNoZVdyaXRlQWxsb3dlZEJ5Q29uZmlndXJhdGlvbjogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfdXJsOiBVUkw7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3VwbG9hZE1ldGhvZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9oZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9jYWNoZUtleVByZWZpeDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF90b2tlbkhhbmRsZXI6IElIdHRwQnVpbGRDYWNoZVRva2VuSGFuZGxlciB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWluSHR0cFJldHJ5RGVsYXlNczogbnVtYmVyO1xuICBwcml2YXRlIF9fY3JlZGVudGlhbENhY2hlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgZ2V0IGlzQ2FjaGVXcml0ZUFsbG93ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEVudmlyb25tZW50Q29uZmlndXJhdGlvbi5idWlsZENhY2hlV3JpdGVBbGxvd2VkID8/IHRoaXMuX2lzQ2FjaGVXcml0ZUFsbG93ZWRCeUNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9uczogSUh0dHBCdWlsZENhY2hlUHJvdmlkZXJPcHRpb25zLCBydXNoU2Vzc2lvbjogUnVzaFNlc3Npb24pIHtcbiAgICB0aGlzLl9wbHVnaW5OYW1lID0gb3B0aW9ucy5wbHVnaW5OYW1lO1xuICAgIHRoaXMuX3J1c2hTZXNzaW9uID0gcnVzaFNlc3Npb247XG4gICAgdGhpcy5fcnVzaFByb2plY3RSb290ID0gb3B0aW9ucy5ydXNoUHJvamVjdFJvb3Q7XG5cbiAgICB0aGlzLl9lbnZpcm9ubWVudENyZWRlbnRpYWwgPSBFbnZpcm9ubWVudENvbmZpZ3VyYXRpb24uYnVpbGRDYWNoZUNyZWRlbnRpYWw7XG4gICAgdGhpcy5faXNDYWNoZVdyaXRlQWxsb3dlZEJ5Q29uZmlndXJhdGlvbiA9IG9wdGlvbnMuaXNDYWNoZVdyaXRlQWxsb3dlZDtcbiAgICB0aGlzLl91cmwgPSBuZXcgVVJMKG9wdGlvbnMudXJsLmVuZHNXaXRoKCcvJykgPyBvcHRpb25zLnVybCA6IG9wdGlvbnMudXJsICsgJy8nKTtcbiAgICB0aGlzLl91cGxvYWRNZXRob2QgPSBvcHRpb25zLnVwbG9hZE1ldGhvZCA/PyAnUFVUJztcbiAgICB0aGlzLl9oZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzID8/IHt9O1xuICAgIHRoaXMuX3Rva2VuSGFuZGxlciA9IG9wdGlvbnMudG9rZW5IYW5kbGVyO1xuICAgIHRoaXMuX2NhY2hlS2V5UHJlZml4ID0gb3B0aW9ucy5jYWNoZUtleVByZWZpeCA/PyAnJztcbiAgICB0aGlzLl9taW5IdHRwUmV0cnlEZWxheU1zID0gb3B0aW9ucy5taW5IdHRwUmV0cnlEZWxheU1zID8/IERFRkFVTFRfTUlOX0hUVFBfUkVUUllfREVMQVlfTVM7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdHJ5R2V0Q2FjaGVFbnRyeUJ1ZmZlckJ5SWRBc3luYyhcbiAgICB0ZXJtaW5hbDogSVRlcm1pbmFsLFxuICAgIGNhY2hlSWQ6IHN0cmluZ1xuICApOiBQcm9taXNlPEJ1ZmZlciB8IHVuZGVmaW5lZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLl9odHRwKHtcbiAgICAgICAgdGVybWluYWw6IHRlcm1pbmFsLFxuICAgICAgICByZWxVcmw6IGAke3RoaXMuX2NhY2hlS2V5UHJlZml4fSR7Y2FjaGVJZH1gLFxuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICBib2R5OiB1bmRlZmluZWQsXG4gICAgICAgIHdhcm5pbmdUZXh0OiAnQ291bGQgbm90IGdldCBjYWNoZSBlbnRyeScsXG4gICAgICAgIHJlYWRCb2R5OiB0cnVlLFxuICAgICAgICBtYXhBdHRlbXB0czogTUFYX0hUVFBfQ0FDSEVfQVRURU1QVFNcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKHJlc3VsdCkgPyByZXN1bHQgOiB1bmRlZmluZWQ7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGVybWluYWwud3JpdGVXYXJuaW5nTGluZShgRXJyb3IgZ2V0dGluZyBjYWNoZSBlbnRyeTogJHtlfWApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdHJ5U2V0Q2FjaGVFbnRyeUJ1ZmZlckFzeW5jKFxuICAgIHRlcm1pbmFsOiBJVGVybWluYWwsXG4gICAgY2FjaGVJZDogc3RyaW5nLFxuICAgIG9iamVjdEJ1ZmZlcjogQnVmZmVyXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghdGhpcy5pc0NhY2hlV3JpdGVBbGxvd2VkKSB7XG4gICAgICB0ZXJtaW5hbC53cml0ZUVycm9yTGluZSgnV3JpdGluZyB0byBjYWNoZSBpcyBub3QgYWxsb3dlZCBpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLicpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRlcm1pbmFsLndyaXRlRGVidWdMaW5lKCdVcGxvYWRpbmcgb2JqZWN0IHdpdGggY2FjaGVJZDogJywgY2FjaGVJZCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5faHR0cCh7XG4gICAgICAgIHRlcm1pbmFsOiB0ZXJtaW5hbCxcbiAgICAgICAgcmVsVXJsOiBgJHt0aGlzLl9jYWNoZUtleVByZWZpeH0ke2NhY2hlSWR9YCxcbiAgICAgICAgbWV0aG9kOiB0aGlzLl91cGxvYWRNZXRob2QsXG4gICAgICAgIGJvZHk6IG9iamVjdEJ1ZmZlcixcbiAgICAgICAgd2FybmluZ1RleHQ6ICdDb3VsZCBub3Qgd3JpdGUgY2FjaGUgZW50cnknLFxuICAgICAgICByZWFkQm9keTogZmFsc2UsXG4gICAgICAgIG1heEF0dGVtcHRzOiBNQVhfSFRUUF9DQUNIRV9BVFRFTVBUU1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByZXN1bHQgIT09IGZhbHNlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRlcm1pbmFsLndyaXRlV2FybmluZ0xpbmUoYEVycm9yIHVwbG9hZGluZyBjYWNoZSBlbnRyeTogJHtlfWApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVDYWNoZWRDcmVkZW50aWFsQXN5bmModGVybWluYWw6IElUZXJtaW5hbCwgY3JlZGVudGlhbDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgQ3JlZGVudGlhbENhY2hlLnVzaW5nQXN5bmMoXG4gICAgICB7XG4gICAgICAgIHN1cHBvcnRFZGl0aW5nOiB0cnVlXG4gICAgICB9LFxuICAgICAgYXN5bmMgKGNyZWRlbnRpYWxzQ2FjaGU6IENyZWRlbnRpYWxDYWNoZSkgPT4ge1xuICAgICAgICBjcmVkZW50aWFsc0NhY2hlLnNldENhY2hlRW50cnkodGhpcy5fY3JlZGVudGlhbENhY2hlSWQsIHtcbiAgICAgICAgICBjcmVkZW50aWFsOiBjcmVkZW50aWFsXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBjcmVkZW50aWFsc0NhY2hlLnNhdmVJZk1vZGlmaWVkQXN5bmMoKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUNhY2hlZENyZWRlbnRpYWxJbnRlcmFjdGl2ZUFzeW5jKHRlcm1pbmFsOiBJVGVybWluYWwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuX3Rva2VuSGFuZGxlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVGhlIGludGVyYWN0aXZlIGNsb3VkIGNyZWRlbnRpYWxzIGZsb3cgaXMgbm90IGNvbmZpZ3VyZWQuXFxuYCArXG4gICAgICAgICAgYFNldCB0aGUgJ3Rva2VuSGFuZGxlcicgc2V0dGluZyBpbiAnY29tbW9uL2NvbmZpZy9ydXNoLXBsdWdpbnMvJHt0aGlzLl9wbHVnaW5OYW1lfS5qc29uJyB0byBhIGNvbW1hbmQgdGhhdCB3cml0ZXMgeW91ciBjcmVkZW50aWFscyB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXRzIHdpdGggY29kZSAwIGAgK1xuICAgICAgICAgIGBvciBwcm92aWRlIHlvdXIgY3JlZGVudGlhbHMgdG8gcnVzaCB1c2luZyB0aGUgLS1jcmVkZW50aWFsIGZsYWcgaW5zdGVhZC4gQ3JlZGVudGlhbHMgbXVzdCBiZSB0aGUgYCArXG4gICAgICAgICAgYCdBdXRob3JpemF0aW9uJyBoZWFkZXIgZXhwZWN0ZWQgYnkgJHt0aGlzLl91cmwuaHJlZn1gXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGNtZDogc3RyaW5nID0gYCR7dGhpcy5fdG9rZW5IYW5kbGVyLmV4ZWN9ICR7KHRoaXMuX3Rva2VuSGFuZGxlci5hcmdzIHx8IFtdKS5qb2luKCcgJyl9YDtcbiAgICB0ZXJtaW5hbC53cml0ZVZlcmJvc2VMaW5lKGBSdW5uaW5nICcke2NtZH0nIHRvIGdldCBjcmVkZW50aWFsc2ApO1xuICAgIGNvbnN0IHJlc3VsdCA9IEV4ZWN1dGFibGUuc3Bhd25TeW5jKHRoaXMuX3Rva2VuSGFuZGxlci5leGVjLCB0aGlzLl90b2tlbkhhbmRsZXIuYXJncyB8fCBbXSk7XG5cbiAgICB0ZXJtaW5hbC53cml0ZUVycm9yTGluZShyZXN1bHQuc3RkZXJyKTtcblxuICAgIGlmIChyZXN1bHQuZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IG9idGFpbiBjcmVkZW50aWFscy4gVGhlIGNvbW1hbmQgJyR7Y21kfScgZmFpbGVkLmApO1xuICAgIH1cblxuICAgIGNvbnN0IGNyZWRlbnRpYWwgPSByZXN1bHQuc3Rkb3V0LnRyaW0oKTtcbiAgICB0ZXJtaW5hbC53cml0ZVZlcmJvc2VMaW5lKCdHb3QgY3JlZGVudGlhbHMnKTtcblxuICAgIGF3YWl0IHRoaXMudXBkYXRlQ2FjaGVkQ3JlZGVudGlhbEFzeW5jKHRlcm1pbmFsLCBjcmVkZW50aWFsKTtcblxuICAgIHRlcm1pbmFsLndyaXRlTGluZSgnVXBkYXRlZCBjcmVkZW50aWFscyBjYWNoZScpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlbGV0ZUNhY2hlZENyZWRlbnRpYWxzQXN5bmModGVybWluYWw6IElUZXJtaW5hbCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IENyZWRlbnRpYWxDYWNoZS51c2luZ0FzeW5jKFxuICAgICAge1xuICAgICAgICBzdXBwb3J0RWRpdGluZzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGFzeW5jIChjcmVkZW50aWFsc0NhY2hlOiBDcmVkZW50aWFsQ2FjaGUpID0+IHtcbiAgICAgICAgY3JlZGVudGlhbHNDYWNoZS5kZWxldGVDYWNoZUVudHJ5KHRoaXMuX2NyZWRlbnRpYWxDYWNoZUlkKTtcbiAgICAgICAgYXdhaXQgY3JlZGVudGlhbHNDYWNoZS5zYXZlSWZNb2RpZmllZEFzeW5jKCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IF9jcmVkZW50aWFsQ2FjaGVJZCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5fX2NyZWRlbnRpYWxDYWNoZUlkKSB7XG4gICAgICBjb25zdCBjYWNoZUlkUGFydHM6IHN0cmluZ1tdID0gW3RoaXMuX3VybC5ocmVmXTtcblxuICAgICAgaWYgKHRoaXMuX2lzQ2FjaGVXcml0ZUFsbG93ZWRCeUNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgY2FjaGVJZFBhcnRzLnB1c2goJ2NhY2hlV3JpdGVBbGxvd2VkJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX19jcmVkZW50aWFsQ2FjaGVJZCA9IGNhY2hlSWRQYXJ0cy5qb2luKCd8Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX19jcmVkZW50aWFsQ2FjaGVJZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX2h0dHAob3B0aW9uczoge1xuICAgIHRlcm1pbmFsOiBJVGVybWluYWw7XG4gICAgcmVsVXJsOiBzdHJpbmc7XG4gICAgbWV0aG9kOiBzdHJpbmc7XG4gICAgYm9keTogQm9keUluaXQgfCB1bmRlZmluZWQ7XG4gICAgd2FybmluZ1RleHQ6IHN0cmluZztcbiAgICByZWFkQm9keTogYm9vbGVhbjtcbiAgICBtYXhBdHRlbXB0czogbnVtYmVyO1xuICAgIGNyZWRlbnRpYWxPcHRpb25zPzogQ3JlZGVudGlhbHNPcHRpb25zO1xuICB9KTogUHJvbWlzZTxCdWZmZXIgfCBib29sZWFuPiB7XG4gICAgY29uc3QgeyB0ZXJtaW5hbCwgcmVsVXJsLCBtZXRob2QsIGJvZHksIHdhcm5pbmdUZXh0LCByZWFkQm9keSwgY3JlZGVudGlhbE9wdGlvbnMgfSA9IG9wdGlvbnM7XG4gICAgY29uc3Qgc2FmZUNyZWRlbnRpYWxPcHRpb25zID0gY3JlZGVudGlhbE9wdGlvbnMgPz8gQ3JlZGVudGlhbHNPcHRpb25zLk9wdGlvbmFsO1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5fdHJ5R2V0Q3JlZGVudGlhbHMoc2FmZUNyZWRlbnRpYWxPcHRpb25zKTtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlbFVybCwgdGhpcy5fdXJsKS5ocmVmO1xuXG4gICAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGlmICh0eXBlb2YgY3JlZGVudGlhbHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICBoZWFkZXJzLkF1dGhvcml6YXRpb24gPSBjcmVkZW50aWFscztcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLl9oZWFkZXJzKSkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaGVhZGVyc1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYm9keUxlbmd0aCA9IChib2R5IGFzIHsgbGVuZ3RoOiBudW1iZXIgfSk/Lmxlbmd0aCB8fCAndW5rbm93bic7XG5cbiAgICB0ZXJtaW5hbC53cml0ZURlYnVnTGluZShgW2h0dHAtYnVpbGQtY2FjaGVdIHJlcXVlc3Q6ICR7bWV0aG9kfSAke3VybH0gJHtib2R5TGVuZ3RofSBieXRlc2ApO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgIGJvZHk6IGJvZHksXG4gICAgICByZWRpcmVjdDogJ2ZvbGxvdydcbiAgICB9KTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIGNvbnN0IGlzTm9uQ3JlZGVudGlhbFJlc3BvbnNlID0gcmVzcG9uc2Uuc3RhdHVzID49IDUwMCAmJiByZXNwb25zZS5zdGF0dXMgPCA2MDA7XG5cbiAgICAgIGlmIChcbiAgICAgICAgIWlzTm9uQ3JlZGVudGlhbFJlc3BvbnNlICYmXG4gICAgICAgIHR5cGVvZiBjcmVkZW50aWFscyAhPT0gJ3N0cmluZycgJiZcbiAgICAgICAgc2FmZUNyZWRlbnRpYWxPcHRpb25zID09PSBDcmVkZW50aWFsc09wdGlvbnMuT3B0aW9uYWxcbiAgICAgICkge1xuICAgICAgICAvLyBJZiB3ZSBkb24ndCBhbHJlYWR5IGhhdmUgY3JlZGVudGlhbHMgeWV0LCBhbmQgd2UgZ290IGEgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyXG4gICAgICAgIC8vIHRoYXQgaXMgYSBcIm5vcm1hbFwiIGZhaWx1cmUgKDR4eCksIHRoZW4gd2UgYXNzdW1lIHRoYXQgY3JlZGVudGlhbHMgYXJlIHByb2JhYmx5XG4gICAgICAgIC8vIHJlcXVpcmVkLiBSZS1hdHRlbXB0IHRoZSByZXF1ZXN0LCByZXF1aXJpbmcgY3JlZGVudGlhbHMgdGhpcyB0aW1lLlxuICAgICAgICAvL1xuICAgICAgICAvLyBUaGlzIGNvdW50cyBhcyBwYXJ0IG9mIHRoZSBcImZpcnN0IGF0dGVtcHRcIiwgc28gaXQgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBtYXggYXR0ZW1wdHNcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2h0dHAoeyAuLi5vcHRpb25zLCBjcmVkZW50aWFsT3B0aW9uczogQ3JlZGVudGlhbHNPcHRpb25zLlJlcXVpcmVkIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5tYXhBdHRlbXB0cyA+IDEpIHtcbiAgICAgICAgLy8gUGF1c2UgYSBiaXQgYmVmb3JlIHJldHJ5aW5nIGluIGNhc2UgdGhlIHNlcnZlciBpcyBidXN5XG4gICAgICAgIC8vIEFkZCBzb21lIHJhbmRvbSBqaXR0ZXIgdG8gdGhlIHJldHJ5IHNvIHdlIGNhbiBzcHJlYWQgb3V0IGxvYWQgb24gdGhlIHJlbW90ZSBzZXJ2aWNlXG4gICAgICAgIC8vIEEgcHJvcGVyIHNvbHV0aW9uIG1pZ2h0IGFkZCBleHBvbmVudGlhbCBiYWNrIG9mZiBpbiBjYXNlIHRoZSByZXRyeSBjb3VudCBpcyBoaWdoICgxMCBvciBtb3JlKVxuICAgICAgICBjb25zdCBmYWN0b3IgPSAxLjAgKyBNYXRoLnJhbmRvbSgpOyAvLyBBIHJhbmRvbSBudW1iZXIgYmV0d2VlbiAxLjAgYW5kIDIuMFxuICAgICAgICBjb25zdCByZXRyeURlbGF5ID0gTWF0aC5mbG9vcihmYWN0b3IgKiB0aGlzLl9taW5IdHRwUmV0cnlEZWxheU1zKTtcblxuICAgICAgICBhd2FpdCBBc3luYy5zbGVlcChyZXRyeURlbGF5KTtcblxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5faHR0cCh7IC4uLm9wdGlvbnMsIG1heEF0dGVtcHRzOiBvcHRpb25zLm1heEF0dGVtcHRzIC0gMSB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcmVwb3J0RmFpbHVyZSh0ZXJtaW5hbCwgbWV0aG9kLCByZXNwb25zZSwgZmFsc2UsIHdhcm5pbmdUZXh0KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQ6IEJ1ZmZlciB8IGJvb2xlYW4gPSByZWFkQm9keSA/IEJ1ZmZlci5mcm9tKGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKCkpIDogdHJ1ZTtcblxuICAgIHRlcm1pbmFsLndyaXRlRGVidWdMaW5lKFxuICAgICAgYFtodHRwLWJ1aWxkLWNhY2hlXSBhY3R1YWwgcmVzcG9uc2U6ICR7cmVzcG9uc2Uuc3RhdHVzfSAke3VybH0gJHtcbiAgICAgICAgcmVzdWx0ID09PSB0cnVlID8gJ3RydWUnIDogcmVzdWx0Lmxlbmd0aFxuICAgICAgfSBieXRlc2BcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX3RyeUdldENyZWRlbnRpYWxzKG9wdGlvbnM6IENyZWRlbnRpYWxzT3B0aW9ucy5SZXF1aXJlZCk6IFByb21pc2U8c3RyaW5nPjtcbiAgcHJpdmF0ZSBhc3luYyBfdHJ5R2V0Q3JlZGVudGlhbHMob3B0aW9uczogQ3JlZGVudGlhbHNPcHRpb25zLk9wdGlvbmFsKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+O1xuICBwcml2YXRlIGFzeW5jIF90cnlHZXRDcmVkZW50aWFscyhvcHRpb25zOiBDcmVkZW50aWFsc09wdGlvbnMuT21pdCk6IFByb21pc2U8dW5kZWZpbmVkPjtcbiAgcHJpdmF0ZSBhc3luYyBfdHJ5R2V0Q3JlZGVudGlhbHMob3B0aW9uczogQ3JlZGVudGlhbHNPcHRpb25zKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+O1xuICBwcml2YXRlIGFzeW5jIF90cnlHZXRDcmVkZW50aWFscyhvcHRpb25zOiBDcmVkZW50aWFsc09wdGlvbnMpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIGlmIChvcHRpb25zID09PSBDcmVkZW50aWFsc09wdGlvbnMuT21pdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBjcmVkZW50aWFsczogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5fZW52aXJvbm1lbnRDcmVkZW50aWFsO1xuXG4gICAgaWYgKGNyZWRlbnRpYWxzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5fdHJ5R2V0Q3JlZGVudGlhbHNGcm9tQ2FjaGUoKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNyZWRlbnRpYWxzICE9PSAnc3RyaW5nJyAmJiBvcHRpb25zID09PSBDcmVkZW50aWFsc09wdGlvbnMuUmVxdWlyZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgW1xuICAgICAgICAgIGBDcmVkZW50aWFscyBmb3IgJHt0aGlzLl91cmwuaHJlZn0gaGF2ZSBub3QgYmVlbiBwcm92aWRlZC5gLFxuICAgICAgICAgIGBJbiBDSSwgdmVyaWZ5IHRoYXQgUlVTSF9CVUlMRF9DQUNIRV9DUkVERU5USUFMIGNvbnRhaW5zIGEgdmFsaWQgQXV0aG9yaXphdGlvbiBoZWFkZXIgdmFsdWUuYCxcbiAgICAgICAgICBgYCxcbiAgICAgICAgICBgRm9yIGxvY2FsIGRldmVsb3BlcnMsIHJ1bjpgLFxuICAgICAgICAgIGBgLFxuICAgICAgICAgIGAgICAgcnVzaCB1cGRhdGUtY2xvdWQtY3JlZGVudGlhbHMgLS1pbnRlcmFjdGl2ZWAsXG4gICAgICAgICAgYGBcbiAgICAgICAgXS5qb2luKCdcXG4nKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3JlZGVudGlhbHM7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF90cnlHZXRDcmVkZW50aWFsc0Zyb21DYWNoZSgpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIGxldCBjYWNoZUVudHJ5OiBJQ3JlZGVudGlhbENhY2hlRW50cnkgfCB1bmRlZmluZWQ7XG5cbiAgICBhd2FpdCBDcmVkZW50aWFsQ2FjaGUudXNpbmdBc3luYyhcbiAgICAgIHtcbiAgICAgICAgc3VwcG9ydEVkaXRpbmc6IGZhbHNlXG4gICAgICB9LFxuICAgICAgKGNyZWRlbnRpYWxzQ2FjaGU6IENyZWRlbnRpYWxDYWNoZSkgPT4ge1xuICAgICAgICBjYWNoZUVudHJ5ID0gY3JlZGVudGlhbHNDYWNoZS50cnlHZXRDYWNoZUVudHJ5KHRoaXMuX2NyZWRlbnRpYWxDYWNoZUlkKTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgaWYgKGNhY2hlRW50cnkpIHtcbiAgICAgIGNvbnN0IGV4cGlyYXRpb25UaW1lOiBudW1iZXIgfCB1bmRlZmluZWQgPSBjYWNoZUVudHJ5LmV4cGlyZXM/LmdldFRpbWUoKTtcbiAgICAgIGlmICghZXhwaXJhdGlvblRpbWUgfHwgZXhwaXJhdGlvblRpbWUgPj0gRGF0ZS5ub3coKSkge1xuICAgICAgICByZXR1cm4gY2FjaGVFbnRyeS5jcmVkZW50aWFsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2dldEZhaWx1cmVUeXBlKHJlcXVlc3RNZXRob2Q6IHN0cmluZywgcmVzcG9uc2U6IFJlc3BvbnNlLCBpc1JlZGlyZWN0OiBib29sZWFuKTogRmFpbHVyZVR5cGUge1xuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgcmV0dXJuIEZhaWx1cmVUeXBlLk5vbmU7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgNTAzOiB7XG4gICAgICAgIC8vIFdlIHNlbGVjdCA1MDMgc3BlY2lmaWNhbGx5IGJlY2F1c2UgdGhpcyByZXByZXNlbnRzIFwic2VydmljZSB1bmF2YWlsYWJsZVwiIGFuZFxuICAgICAgICAvLyBcInJhdGUgbGltaXQgdGhyb3R0bGVcIiBlcnJvcnMsIHdoaWNoIGFyZSB0cmFuc2llbnQgaXNzdWVzLlxuICAgICAgICAvL1xuICAgICAgICAvLyBUaGVyZSBhcmUgb3RoZXIgNXh4IGVycm9ycywgc3VjaCBhcyA1MDEsIHRoYXQgY2FuIG9jY3VyIGlmIHRoZSByZXF1ZXN0IGlzXG4gICAgICAgIC8vIG1hbGZvcm1lZCwgc28gYXMgYSBnZW5lcmFsIHJ1bGUgd2Ugd2FudCB0byBsZXQgdGhyb3VnaCBvdGhlciA1eHggZXJyb3JzXG4gICAgICAgIC8vIHNvIHRoZSB1c2VyIGNhbiB0cm91Ymxlc2hvb3QuXG5cbiAgICAgICAgLy8gRG9uJ3QgZmFpbCBwcm9kdWN0aW9uIGJ1aWxkcyB3aXRoIHdhcm5pbmdzIGZvciB0cmFuc2llbnQgaXNzdWVzXG4gICAgICAgIHJldHVybiBGYWlsdXJlVHlwZS5JbmZvcm1hdGlvbmFsO1xuICAgICAgfVxuXG4gICAgICBjYXNlIDQwMTpcbiAgICAgIGNhc2UgNDAzOlxuICAgICAgY2FzZSA0MDc6IHtcbiAgICAgICAgaWYgKHJlcXVlc3RNZXRob2QgPT09ICdHRVQnICYmIChpc1JlZGlyZWN0IHx8IHJlc3BvbnNlLnJlZGlyZWN0ZWQpKSB7XG4gICAgICAgICAgLy8gQ2FjaGUgbWlzc2VzIGZvciBHRVQgcmVxdWVzdHMgYXJlIG5vdCBlcnJvcnNcbiAgICAgICAgICAvLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCBiZWhhdmlvciB3aGVyZSBhIHNlcnZlciBjYW4gaXNzdWUgYSByZWRpcmVjdCBhbmQgd2UgZmFpbCB0byBhdXRoZW50aWNhdGUgYXQgdGhlIG5ldyBsb2NhdGlvbi5cbiAgICAgICAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBzaWduYWwgdGhpcyBhcyBhbiBhdXRoZW50aWNhdGlvbiBmYWlsdXJlIGJlY2F1c2UgdGhlIGF1dGhvcml6YXRpb24gaGVhZGVyIGlzIG5vdCBwYXNzZWQgb24gdG8gcmVkaXJlY3RzLlxuICAgICAgICAgIC8vIGkuZSBUaGUgYXV0aGVudGljYXRpb24gaGVhZGVyIHdhcyBhY2NlcHRlZCBmb3IgdGhlIGZpcnN0IHJlcXVlc3QgYW5kIHRoZXJlZm9yZSBzdWJzZXF1ZW50IGZhaWx1cmVzXG4gICAgICAgICAgLy8gd2hlcmUgaXQgd2FzIG5vdCBwcmVzZW50IHNob3VsZCBub3QgYmUgYXR0cmlidXRlZCB0byB0aGUgaGVhZGVyLlxuICAgICAgICAgIC8vIFRoaXMgc2NlbmFyaW8gdXN1YWxseSBjb21lcyB1cCB3aXRoIHNlcnZpY2VzIHRoYXQgcmVkaXJlY3QgdG8gcHJlLXNpZ25lZCBVUkxTIHRoYXQgZG9uJ3QgYWN0dWFsbHkgZXhpc3QuXG4gICAgICAgICAgLy8gVGhvc2Ugc2VydmljZXMgdGhlbiB1c3VhbGx5IHRyZWF0IHRoZSA0MDQgYXMgYSA0MDMgdG8gcHJldmVudCBsZWFraW5nIGluZm9ybWF0aW9uLlxuICAgICAgICAgIHJldHVybiBGYWlsdXJlVHlwZS5Ob25lO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIEZhaWx1cmVUeXBlLkF1dGhlbnRpY2F0aW9uO1xuICAgICAgfVxuXG4gICAgICBjYXNlIDQwNDoge1xuICAgICAgICBpZiAocmVxdWVzdE1ldGhvZCA9PT0gJ0dFVCcpIHtcbiAgICAgICAgICAvLyBDYWNoZSBtaXNzZXMgZm9yIEdFVCByZXF1ZXN0cyBhcmUgbm90IGVycm9yc1xuICAgICAgICAgIHJldHVybiBGYWlsdXJlVHlwZS5Ob25lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTGV0IGRldiBidWlsZHMgc3VjY2VlZCwgbGV0IFByb2QgYnVpbGRzIGZhaWxcbiAgICByZXR1cm4gRmFpbHVyZVR5cGUuV2FybmluZztcbiAgfVxuXG4gIHByaXZhdGUgX3JlcG9ydEZhaWx1cmUoXG4gICAgdGVybWluYWw6IElUZXJtaW5hbCxcbiAgICByZXF1ZXN0TWV0aG9kOiBzdHJpbmcsXG4gICAgcmVzcG9uc2U6IFJlc3BvbnNlLFxuICAgIGlzUmVkaXJlY3Q6IGJvb2xlYW4sXG4gICAgbWVzc2FnZTogc3RyaW5nXG4gICk6IHZvaWQge1xuICAgIHN3aXRjaCAodGhpcy5fZ2V0RmFpbHVyZVR5cGUocmVxdWVzdE1ldGhvZCwgcmVzcG9uc2UsIGlzUmVkaXJlY3QpKSB7XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHRlcm1pbmFsLndyaXRlRXJyb3JMaW5lKGAke21lc3NhZ2V9OiBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfTogJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSBGYWlsdXJlVHlwZS5XYXJuaW5nOiB7XG4gICAgICAgIHRlcm1pbmFsLndyaXRlV2FybmluZ0xpbmUoYCR7bWVzc2FnZX06IEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9OiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlIEZhaWx1cmVUeXBlLkluZm9ybWF0aW9uYWw6IHtcbiAgICAgICAgdGVybWluYWwud3JpdGVMaW5lKGAke21lc3NhZ2V9OiBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfTogJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSBGYWlsdXJlVHlwZS5Ob25lOiB7XG4gICAgICAgIHRlcm1pbmFsLndyaXRlRGVidWdMaW5lKGAke21lc3NhZ2V9OiBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfTogJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSBGYWlsdXJlVHlwZS5BdXRoZW50aWNhdGlvbjoge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgW1xuICAgICAgICAgICAgYCR7dGhpcy5fdXJsLmhyZWZ9IHJlc3BvbmRlZCB3aXRoICR7cmVzcG9uc2Uuc3RhdHVzfTogJHtyZXNwb25zZS5zdGF0dXNUZXh0fS5gLFxuICAgICAgICAgICAgYENyZWRlbnRpYWxzIG1heSBiZSBtaXNjb25maWd1cmVkIG9yIGhhdmUgZXhwaXJlZC5gLFxuICAgICAgICAgICAgYEluIENJLCB2ZXJpZnkgdGhhdCBSVVNIX0JVSUxEX0NBQ0hFX0NSRURFTlRJQUwgY29udGFpbnMgYSB2YWxpZCBBdXRob3JpemF0aW9uIGhlYWRlciB2YWx1ZS5gLFxuICAgICAgICAgICAgYGAsXG4gICAgICAgICAgICBgRm9yIGxvY2FsIGRldmVsb3BlcnMsIHJ1bjpgLFxuICAgICAgICAgICAgYGAsXG4gICAgICAgICAgICBgICAgIHJ1c2ggdXBkYXRlLWNsb3VkLWNyZWRlbnRpYWxzIC0taW50ZXJhY3RpdmVgLFxuICAgICAgICAgICAgYGBcbiAgICAgICAgICBdLmpvaW4oJ1xcbicpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=