summaryrefslogtreecommitdiffstats
path: root/php-nikic-php-parser4-upstream.patch
blob: f1904ca22e63bc2bacb9383f40889a4e36d04baf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260
4261
4262
4263
4264
4265
4266
4267
4268
4269
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288
4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339
4340
4341
4342
4343
4344
4345
4346
4347
4348
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384
4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401
4402
4403
4404
4405
4406
4407
4408
4409
4410
4411
4412
4413
4414
4415
4416
4417
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428
4429
4430
4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
4444
4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455
4456
4457
4458
4459
4460
4461
4462
4463
4464
4465
4466
4467
4468
4469
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479
4480
4481
4482
4483
4484
4485
4486
4487
4488
4489
4490
4491
4492
4493
4494
4495
4496
4497
4498
4499
4500
4501
4502
4503
4504
4505
4506
4507
4508
4509
4510
4511
4512
4513
4514
4515
4516
4517
4518
4519
4520
4521
4522
4523
4524
4525
4526
4527
4528
4529
4530
4531
4532
4533
4534
4535
4536
4537
4538
4539
4540
4541
4542
4543
4544
4545
4546
4547
4548
4549
4550
4551
4552
4553
4554
4555
4556
4557
4558
4559
4560
4561
4562
4563
4564
4565
4566
4567
4568
4569
4570
4571
4572
4573
4574
4575
4576
4577
4578
4579
4580
4581
4582
4583
4584
4585
4586
4587
4588
4589
4590
4591
4592
4593
4594
4595
4596
4597
4598
4599
4600
4601
4602
4603
4604
4605
4606
4607
4608
4609
4610
4611
4612
4613
4614
4615
4616
4617
4618
4619
4620
4621
4622
4623
4624
4625
4626
4627
4628
4629
4630
4631
4632
4633
4634
4635
4636
4637
4638
4639
4640
4641
4642
4643
4644
4645
4646
4647
4648
4649
4650
4651
4652
4653
4654
4655
4656
4657
4658
4659
4660
4661
4662
4663
4664
4665
4666
4667
4668
4669
4670
4671
4672
4673
4674
4675
4676
4677
4678
4679
4680
4681
4682
4683
4684
4685
4686
4687
4688
4689
4690
4691
4692
4693
4694
4695
4696
4697
4698
4699
4700
4701
4702
4703
4704
4705
4706
4707
4708
4709
4710
4711
4712
4713
4714
4715
4716
4717
4718
4719
4720
4721
4722
4723
4724
4725
4726
4727
4728
4729
4730
4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
4748
4749
4750
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
4772
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783
4784
4785
4786
4787
4788
4789
4790
4791
4792
4793
4794
4795
4796
4797
4798
4799
4800
4801
4802
4803
4804
4805
4806
4807
4808
4809
4810
4811
4812
4813
4814
4815
4816
4817
4818
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
4832
4833
4834
4835
4836
4837
4838
4839
4840
4841
4842
4843
4844
4845
4846
4847
4848
4849
4850
4851
4852
4853
4854
4855
4856
4857
4858
4859
4860
4861
4862
4863
4864
4865
4866
4867
4868
4869
4870
4871
4872
4873
4874
4875
4876
4877
4878
4879
4880
4881
4882
4883
4884
4885
4886
4887
4888
4889
4890
4891
4892
4893
4894
4895
4896
4897
4898
4899
4900
4901
4902
4903
4904
4905
4906
4907
4908
4909
4910
4911
4912
4913
4914
4915
4916
4917
4918
4919
4920
4921
4922
4923
4924
4925
4926
4927
4928
4929
4930
4931
4932
4933
4934
4935
4936
4937
4938
4939
4940
4941
4942
4943
4944
4945
4946
4947
4948
4949
4950
4951
4952
4953
4954
4955
4956
4957
4958
4959
4960
4961
4962
4963
4964
4965
4966
4967
4968
4969
4970
4971
4972
4973
4974
4975
4976
4977
4978
4979
4980
4981
4982
4983
4984
4985
4986
4987
4988
4989
4990
4991
4992
4993
4994
4995
4996
4997
4998
4999
5000
5001
5002
5003
5004
5005
5006
5007
5008
5009
5010
5011
5012
5013
5014
5015
5016
5017
5018
5019
5020
5021
5022
5023
5024
5025
5026
5027
5028
5029
5030
5031
5032
5033
5034
5035
5036
5037
5038
5039
5040
5041
5042
5043
5044
5045
5046
5047
5048
5049
5050
5051
5052
5053
5054
5055
5056
5057
5058
5059
5060
5061
5062
5063
5064
5065
5066
5067
5068
5069
5070
5071
5072
5073
5074
5075
5076
5077
5078
5079
5080
5081
5082
5083
5084
5085
5086
5087
5088
5089
5090
5091
5092
5093
5094
5095
5096
5097
5098
5099
5100
5101
5102
5103
5104
5105
5106
5107
5108
5109
5110
5111
5112
5113
5114
5115
5116
5117
5118
5119
5120
5121
5122
5123
5124
5125
5126
5127
5128
5129
5130
5131
5132
5133
5134
5135
5136
5137
5138
5139
5140
5141
5142
5143
5144
5145
5146
5147
5148
5149
5150
5151
5152
5153
5154
5155
5156
5157
5158
5159
5160
5161
5162
5163
5164
5165
5166
5167
5168
5169
5170
5171
5172
5173
5174
5175
5176
5177
5178
5179
5180
5181
5182
5183
5184
5185
5186
5187
5188
5189
5190
5191
5192
5193
5194
5195
5196
5197
5198
5199
5200
5201
5202
5203
5204
5205
5206
5207
5208
5209
5210
5211
5212
5213
5214
5215
5216
5217
5218
5219
5220
5221
5222
5223
5224
5225
5226
5227
5228
5229
5230
5231
5232
5233
5234
5235
5236
5237
5238
5239
5240
5241
5242
5243
5244
5245
5246
5247
5248
5249
5250
5251
5252
5253
5254
5255
5256
5257
5258
5259
5260
5261
5262
5263
5264
5265
5266
5267
5268
5269
5270
5271
5272
5273
5274
5275
5276
5277
5278
5279
5280
5281
5282
5283
5284
5285
5286
5287
5288
5289
5290
5291
5292
5293
5294
5295
5296
5297
5298
5299
5300
5301
5302
5303
5304
5305
5306
5307
5308
5309
5310
5311
5312
5313
5314
5315
5316
5317
5318
5319
5320
5321
5322
5323
5324
5325
5326
5327
5328
5329
5330
5331
5332
5333
5334
5335
5336
5337
5338
5339
5340
5341
5342
5343
5344
5345
5346
5347
5348
5349
5350
5351
5352
5353
5354
5355
5356
5357
5358
5359
5360
5361
5362
5363
5364
5365
5366
5367
5368
5369
5370
5371
5372
5373
5374
5375
5376
5377
5378
5379
5380
5381
5382
5383
5384
5385
5386
5387
5388
5389
5390
5391
5392
5393
5394
5395
5396
5397
5398
5399
5400
5401
5402
5403
5404
5405
5406
5407
5408
5409
5410
5411
5412
5413
5414
5415
5416
5417
5418
5419
5420
5421
5422
5423
5424
5425
5426
5427
5428
5429
5430
5431
5432
5433
5434
5435
5436
5437
5438
5439
5440
5441
5442
5443
5444
5445
5446
5447
5448
5449
5450
5451
5452
5453
5454
5455
5456
5457
5458
5459
5460
5461
5462
5463
5464
5465
5466
5467
5468
5469
5470
5471
5472
5473
5474
5475
5476
5477
5478
5479
5480
5481
5482
5483
5484
5485
5486
5487
5488
5489
5490
5491
5492
5493
5494
5495
5496
5497
5498
5499
5500
5501
5502
5503
5504
5505
5506
5507
5508
5509
5510
5511
5512
5513
5514
5515
5516
5517
5518
5519
5520
5521
5522
5523
5524
5525
5526
5527
5528
5529
5530
5531
5532
5533
5534
5535
5536
5537
5538
5539
5540
5541
5542
5543
5544
5545
5546
5547
5548
5549
5550
5551
5552
5553
5554
5555
5556
5557
5558
5559
5560
5561
5562
5563
5564
5565
5566
5567
5568
5569
5570
5571
5572
5573
5574
5575
5576
5577
5578
5579
5580
5581
5582
5583
5584
5585
5586
5587
5588
5589
5590
5591
5592
5593
5594
5595
5596
5597
5598
5599
5600
5601
5602
5603
5604
5605
5606
5607
5608
5609
5610
5611
5612
5613
5614
5615
5616
5617
5618
5619
5620
5621
5622
5623
5624
5625
5626
5627
5628
5629
5630
5631
5632
5633
5634
5635
5636
5637
5638
5639
5640
5641
5642
5643
5644
5645
5646
5647
5648
5649
5650
5651
5652
5653
5654
5655
5656
5657
5658
5659
5660
5661
5662
5663
5664
5665
5666
5667
5668
5669
5670
5671
5672
5673
5674
5675
5676
5677
5678
5679
5680
5681
5682
5683
5684
5685
5686
5687
5688
5689
5690
5691
5692
5693
5694
5695
5696
5697
5698
5699
5700
5701
5702
5703
5704
5705
5706
5707
5708
5709
5710
5711
5712
5713
5714
5715
5716
5717
5718
5719
5720
5721
5722
5723
5724
5725
5726
5727
5728
5729
5730
5731
5732
5733
5734
5735
5736
5737
5738
5739
5740
5741
5742
5743
5744
5745
5746
5747
5748
5749
5750
5751
5752
5753
5754
5755
5756
5757
5758
5759
5760
5761
5762
5763
5764
5765
5766
5767
5768
5769
5770
5771
5772
5773
5774
5775
5776
5777
5778
5779
5780
5781
5782
5783
5784
5785
5786
5787
5788
5789
5790
5791
5792
5793
5794
5795
5796
5797
5798
5799
5800
5801
5802
5803
5804
5805
5806
5807
5808
5809
5810
5811
5812
5813
5814
5815
5816
5817
5818
5819
5820
5821
5822
5823
5824
5825
5826
5827
5828
5829
5830
5831
5832
5833
5834
5835
5836
5837
5838
5839
5840
5841
5842
5843
5844
5845
5846
5847
5848
5849
5850
5851
5852
5853
5854
5855
5856
5857
5858
5859
5860
5861
5862
5863
5864
5865
5866
5867
5868
5869
5870
5871
5872
5873
5874
5875
5876
5877
5878
5879
5880
5881
5882
5883
5884
5885
5886
5887
5888
5889
5890
5891
5892
5893
5894
5895
5896
5897
5898
5899
5900
5901
5902
5903
5904
5905
5906
5907
5908
5909
5910
5911
5912
5913
5914
5915
5916
5917
5918
5919
5920
5921
5922
5923
5924
5925
5926
5927
5928
5929
5930
5931
5932
5933
5934
5935
5936
5937
5938
5939
5940
5941
5942
5943
5944
5945
5946
5947
5948
5949
5950
5951
5952
5953
5954
5955
5956
5957
5958
5959
5960
5961
5962
5963
5964
5965
5966
5967
5968
5969
5970
5971
5972
5973
5974
5975
5976
5977
5978
5979
5980
5981
5982
5983
5984
5985
5986
5987
5988
5989
5990
5991
5992
5993
5994
5995
5996
5997
5998
5999
6000
6001
6002
6003
6004
6005
6006
6007
6008
6009
6010
6011
6012
6013
6014
6015
6016
6017
6018
6019
6020
6021
6022
6023
6024
6025
6026
6027
6028
6029
6030
6031
6032
6033
6034
6035
6036
6037
6038
6039
6040
6041
6042
6043
6044
6045
6046
6047
6048
6049
6050
6051
6052
6053
6054
6055
6056
6057
6058
6059
6060
6061
6062
6063
6064
6065
6066
6067
6068
6069
6070
6071
6072
6073
6074
6075
6076
6077
6078
6079
6080
6081
6082
6083
6084
6085
6086
6087
6088
6089
6090
6091
6092
6093
6094
6095
6096
6097
6098
6099
6100
6101
6102
6103
6104
6105
6106
6107
6108
6109
6110
6111
6112
6113
6114
6115
6116
6117
6118
6119
6120
6121
6122
6123
6124
6125
6126
6127
6128
6129
6130
6131
6132
6133
6134
6135
6136
6137
6138
6139
6140
6141
6142
6143
6144
6145
6146
6147
6148
6149
6150
6151
6152
6153
6154
6155
6156
6157
6158
6159
6160
6161
6162
6163
6164
6165
6166
6167
6168
6169
6170
6171
6172
6173
6174
6175
6176
6177
6178
6179
6180
6181
6182
6183
6184
6185
6186
6187
6188
6189
6190
6191
6192
6193
6194
6195
6196
6197
6198
6199
6200
6201
6202
6203
6204
6205
6206
6207
6208
6209
6210
6211
6212
6213
6214
6215
6216
6217
6218
6219
6220
6221
6222
6223
6224
6225
6226
6227
6228
6229
6230
6231
6232
6233
6234
6235
6236
6237
6238
6239
6240
6241
6242
6243
6244
6245
6246
6247
6248
6249
6250
6251
6252
6253
6254
6255
6256
6257
6258
6259
6260
6261
6262
6263
6264
6265
6266
6267
6268
6269
6270
6271
6272
6273
6274
6275
6276
6277
6278
6279
6280
6281
6282
6283
6284
6285
6286
6287
6288
6289
6290
6291
6292
6293
6294
6295
6296
6297
6298
6299
6300
6301
6302
6303
6304
6305
6306
6307
6308
6309
6310
6311
6312
6313
6314
6315
6316
6317
6318
6319
6320
6321
6322
6323
6324
6325
6326
6327
6328
6329
6330
6331
6332
6333
6334
6335
6336
6337
6338
6339
6340
6341
6342
6343
6344
6345
6346
6347
6348
6349
6350
6351
6352
6353
6354
6355
6356
6357
6358
6359
6360
6361
6362
6363
6364
6365
6366
6367
6368
6369
6370
6371
6372
6373
6374
6375
6376
6377
6378
6379
6380
6381
6382
6383
6384
6385
6386
6387
6388
6389
6390
6391
6392
6393
6394
6395
6396
6397
6398
6399
6400
6401
6402
6403
6404
6405
6406
6407
6408
6409
6410
6411
6412
6413
6414
6415
6416
6417
6418
6419
6420
6421
6422
6423
6424
6425
6426
6427
6428
6429
6430
6431
6432
6433
6434
6435
6436
6437
6438
6439
6440
6441
6442
6443
6444
6445
6446
6447
6448
6449
6450
6451
6452
6453
6454
6455
6456
6457
6458
6459
6460
6461
6462
6463
6464
6465
6466
6467
6468
6469
6470
6471
6472
6473
6474
6475
6476
6477
6478
6479
6480
6481
6482
6483
6484
6485
6486
6487
6488
6489
6490
6491
6492
6493
6494
6495
6496
6497
6498
6499
6500
6501
6502
6503
6504
6505
6506
6507
6508
6509
6510
6511
6512
6513
6514
6515
6516
6517
6518
6519
6520
6521
6522
6523
6524
6525
6526
6527
6528
6529
6530
6531
6532
6533
6534
6535
6536
6537
6538
6539
6540
6541
6542
6543
6544
6545
6546
6547
6548
6549
6550
6551
6552
6553
6554
6555
6556
6557
6558
6559
6560
6561
6562
6563
6564
6565
6566
6567
6568
6569
6570
6571
6572
6573
6574
6575
6576
6577
6578
6579
6580
6581
6582
6583
6584
6585
6586
6587
6588
6589
6590
6591
6592
6593
6594
6595
6596
6597
6598
6599
6600
6601
6602
6603
6604
6605
6606
6607
6608
6609
6610
6611
6612
6613
6614
6615
6616
6617
6618
6619
6620
6621
6622
6623
6624
6625
6626
6627
6628
6629
6630
6631
6632
6633
6634
6635
6636
6637
6638
6639
6640
6641
6642
6643
6644
6645
6646
6647
6648
6649
6650
6651
6652
6653
6654
6655
6656
6657
6658
6659
6660
6661
6662
6663
6664
6665
6666
6667
6668
6669
6670
6671
6672
6673
6674
6675
6676
6677
6678
6679
6680
6681
6682
6683
6684
6685
6686
6687
6688
6689
6690
6691
6692
6693
6694
6695
6696
6697
6698
6699
6700
6701
6702
6703
6704
6705
6706
6707
6708
6709
6710
6711
6712
6713
6714
6715
6716
6717
6718
6719
6720
6721
6722
6723
6724
6725
6726
6727
6728
6729
6730
6731
6732
6733
6734
6735
6736
6737
6738
6739
6740
6741
6742
6743
6744
6745
6746
6747
6748
6749
6750
6751
6752
6753
6754
6755
6756
6757
6758
6759
6760
6761
6762
6763
6764
6765
6766
6767
6768
6769
6770
6771
6772
6773
6774
6775
6776
6777
6778
6779
6780
6781
6782
6783
6784
6785
6786
6787
6788
6789
6790
6791
6792
6793
6794
6795
6796
6797
6798
6799
6800
6801
6802
6803
6804
6805
6806
6807
6808
6809
6810
6811
6812
6813
6814
6815
6816
6817
6818
6819
6820
6821
6822
6823
6824
6825
6826
6827
6828
6829
6830
6831
6832
6833
6834
6835
6836
6837
6838
6839
6840
6841
6842
6843
6844
6845
6846
6847
6848
6849
6850
6851
6852
6853
6854
6855
6856
6857
6858
6859
6860
6861
6862
6863
6864
6865
6866
6867
6868
6869
6870
6871
6872
6873
6874
6875
6876
6877
6878
6879
6880
6881
6882
6883
6884
6885
6886
6887
6888
6889
6890
6891
6892
6893
6894
6895
6896
6897
6898
6899
6900
6901
6902
6903
6904
6905
6906
6907
6908
6909
6910
6911
6912
6913
6914
6915
6916
6917
6918
6919
6920
6921
6922
6923
6924
6925
6926
6927
6928
6929
6930
6931
6932
6933
6934
6935
6936
6937
6938
6939
6940
6941
6942
6943
6944
6945
6946
6947
6948
6949
6950
6951
6952
6953
6954
6955
6956
6957
6958
6959
6960
6961
6962
6963
6964
6965
6966
6967
6968
6969
6970
6971
6972
6973
6974
6975
6976
6977
6978
6979
6980
6981
6982
6983
6984
6985
6986
6987
6988
6989
6990
6991
6992
6993
6994
6995
6996
6997
6998
6999
7000
7001
7002
7003
7004
7005
7006
7007
7008
7009
7010
7011
7012
7013
7014
7015
7016
7017
7018
7019
7020
7021
7022
7023
7024
7025
7026
7027
7028
7029
7030
7031
7032
7033
7034
7035
7036
7037
7038
7039
7040
7041
7042
7043
7044
7045
7046
7047
7048
7049
7050
7051
7052
7053
7054
7055
7056
7057
7058
7059
7060
7061
7062
7063
7064
7065
7066
7067
7068
7069
7070
7071
7072
7073
7074
7075
7076
7077
7078
7079
7080
7081
7082
7083
7084
7085
7086
7087
7088
7089
7090
7091
7092
7093
7094
7095
7096
7097
7098
7099
7100
7101
7102
7103
7104
7105
7106
7107
7108
7109
7110
7111
7112
7113
7114
7115
7116
7117
7118
7119
7120
7121
7122
7123
7124
7125
7126
7127
7128
7129
7130
7131
7132
7133
7134
7135
7136
7137
7138
7139
7140
7141
7142
7143
7144
7145
7146
7147
7148
7149
7150
7151
7152
7153
7154
7155
7156
7157
7158
7159
7160
7161
7162
7163
7164
7165
7166
7167
7168
7169
7170
7171
7172
7173
7174
7175
7176
7177
7178
7179
7180
7181
7182
7183
7184
7185
7186
7187
7188
7189
7190
7191
7192
7193
7194
7195
7196
7197
7198
7199
7200
7201
7202
7203
7204
7205
7206
7207
7208
7209
7210
7211
7212
7213
7214
7215
7216
7217
7218
7219
7220
7221
7222
7223
7224
7225
7226
7227
7228
7229
7230
7231
7232
7233
7234
7235
7236
7237
7238
7239
7240
7241
7242
7243
7244
7245
7246
7247
7248
7249
7250
7251
7252
7253
7254
7255
7256
7257
7258
7259
7260
7261
7262
7263
7264
7265
7266
7267
7268
7269
7270
7271
7272
7273
7274
7275
7276
7277
7278
7279
7280
7281
7282
7283
7284
7285
7286
7287
7288
7289
7290
7291
7292
7293
7294
7295
7296
7297
7298
7299
7300
7301
7302
7303
7304
7305
7306
7307
7308
7309
7310
7311
7312
7313
7314
7315
7316
7317
7318
7319
7320
7321
7322
7323
7324
7325
7326
7327
7328
7329
7330
7331
7332
7333
7334
7335
7336
7337
7338
7339
7340
7341
7342
7343
7344
7345
7346
7347
7348
7349
7350
7351
7352
7353
7354
7355
7356
7357
7358
7359
7360
7361
7362
7363
7364
7365
7366
7367
7368
7369
7370
7371
7372
7373
7374
7375
7376
7377
7378
7379
7380
7381
7382
7383
7384
7385
7386
7387
7388
7389
7390
7391
7392
7393
7394
7395
7396
7397
7398
7399
7400
7401
7402
7403
7404
7405
7406
7407
7408
7409
7410
7411
7412
7413
7414
7415
7416
7417
7418
7419
7420
7421
7422
7423
7424
7425
7426
7427
7428
7429
7430
7431
7432
7433
7434
7435
7436
7437
7438
7439
7440
7441
7442
7443
7444
7445
7446
7447
7448
7449
7450
7451
7452
7453
7454
7455
7456
7457
7458
7459
7460
7461
7462
7463
7464
7465
7466
7467
7468
7469
7470
7471
7472
7473
7474
7475
7476
7477
7478
7479
7480
7481
7482
7483
7484
7485
7486
7487
7488
7489
From feed91cf0f70857968d3719211204f9e00274ffe Mon Sep 17 00:00:00 2001
From: Nikita Popov <nikita.ppv@gmail.com>
Date: Fri, 9 Jul 2021 15:46:50 +0200
Subject: [PATCH] Avoid ctype_alnum() on integer

This is deprecated in PHP 8.1
---
 lib/PhpParser/PrettyPrinterAbstract.php | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/lib/PhpParser/PrettyPrinterAbstract.php b/lib/PhpParser/PrettyPrinterAbstract.php
index f453db0919..0e0e79d7b1 100644
--- a/lib/PhpParser/PrettyPrinterAbstract.php
+++ b/lib/PhpParser/PrettyPrinterAbstract.php
@@ -1123,7 +1123,8 @@ protected function initializeLabelCharMap() {
         for ($i = 0; $i < 256; $i++) {
             // Since PHP 7.1 The lower range is 0x80. However, we also want to support code for
             // older versions.
-            $this->labelCharMap[chr($i)] = $i >= 0x7f || ctype_alnum($i);
+            $chr = chr($i);
+            $this->labelCharMap[$chr] = $i >= 0x7f || ctype_alnum($chr);
         }
     }
 
From c758510a37218d631fd10f67bca5bccbfef864fa Mon Sep 17 00:00:00 2001
From: Nikita Popov <nikita.ppv@gmail.com>
Date: Fri, 9 Jul 2021 16:08:46 +0200
Subject: [PATCH] Add support for PHP 8.1

With the introduction of intersection types, PHP now lexes the
token '&' either as T_AMPERSAND_(NOT_)FOLLOWED_BY_VAR_OR_VARARG.
This completely breaks parsing of any code containing '&'.

Fix this by canonicalizing to the new token format (unconditionally,
independent of emulation) and adjusting the parser to use the two
new tokens.

This doesn't add actual support for intersection types yet.
---
 grammar/php5.y                               |   36 +-
 grammar/php7.y                               |   34 +-
 grammar/tokens.y                             |    2 +-
 lib/PhpParser/Lexer.php                      |   29 +-
 lib/PhpParser/Parser/Php5.php                | 2293 +++++++++--------
 lib/PhpParser/Parser/Php7.php                | 2394 +++++++++---------
 lib/PhpParser/Parser/Tokens.php              |  216 +-
 test/PhpParser/CodeParsingTest.php           |    7 +-
 test/code/parser/errorHandling/recovery.test |    6 +-
 9 files changed, 2578 insertions(+), 2439 deletions(-)

diff --git a/grammar/php5.y b/grammar/php5.y
index c7d245dc78..f9e7e7dd16 100644
--- a/grammar/php5.y
+++ b/grammar/php5.y
@@ -20,6 +20,11 @@ top_statement_list:
             if ($nop !== null) { $1[] = $nop; } $$ = $1; }
 ;
 
+ampersand:
+      T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG
+    | T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG
+;
+
 reserved_non_modifiers:
       T_INCLUDE | T_INCLUDE_ONCE | T_EVAL | T_REQUIRE | T_REQUIRE_ONCE | T_LOGICAL_OR | T_LOGICAL_XOR | T_LOGICAL_AND
     | T_INSTANCEOF | T_NEW | T_CLONE | T_EXIT | T_IF | T_ELSEIF | T_ELSE | T_ENDIF | T_ECHO | T_DO | T_WHILE
@@ -246,7 +251,12 @@ variables_list:
 
 optional_ref:
       /* empty */                                           { $$ = false; }
-    | '&'                                                   { $$ = true; }
+    | ampersand                                             { $$ = true; }
+;
+
+optional_arg_ref:
+      /* empty */                                           { $$ = false; }
+    | T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG                 { $$ = true; }
 ;
 
 optional_ellipsis:
@@ -378,7 +388,7 @@ new_else_single:
 
 foreach_variable:
       variable                                              { $$ = array($1, false); }
-    | '&' variable                                          { $$ = array($2, true); }
+    | ampersand variable                                    { $$ = array($2, true); }
     | list_expr                                             { $$ = array($1, false); }
 ;
 
@@ -393,9 +403,9 @@ non_empty_parameter_list:
 ;
 
 parameter:
-      optional_param_type optional_ref optional_ellipsis plain_variable
+      optional_param_type optional_arg_ref optional_ellipsis plain_variable
           { $$ = Node\Param[$4, null, $1, $2, $3]; $this->checkParam($$); }
-    | optional_param_type optional_ref optional_ellipsis plain_variable '=' static_scalar
+    | optional_param_type optional_arg_ref optional_ellipsis plain_variable '=' static_scalar
           { $$ = Node\Param[$4, $6, $1, $2, $3]; $this->checkParam($$); }
 ;
 
@@ -428,7 +438,7 @@ non_empty_argument_list:
 
 argument:
       expr                                                  { $$ = Node\Arg[$1, false, false]; }
-    | '&' variable                                          { $$ = Node\Arg[$2, true, false]; }
+    | ampersand variable                                    { $$ = Node\Arg[$2, true, false]; }
     | T_ELLIPSIS expr                                       { $$ = Node\Arg[$2, false, true]; }
 ;
 
@@ -562,8 +572,8 @@ expr:
       variable                                              { $$ = $1; }
     | list_expr '=' expr                                    { $$ = Expr\Assign[$1, $3]; }
     | variable '=' expr                                     { $$ = Expr\Assign[$1, $3]; }
-    | variable '=' '&' variable                             { $$ = Expr\AssignRef[$1, $4]; }
-    | variable '=' '&' new_expr                             { $$ = Expr\AssignRef[$1, $4]; }
+    | variable '=' ampersand variable                       { $$ = Expr\AssignRef[$1, $4]; }
+    | variable '=' ampersand new_expr                       { $$ = Expr\AssignRef[$1, $4]; }
     | new_expr                                              { $$ = $1; }
     | T_CLONE expr                                          { $$ = Expr\Clone_[$2]; }
     | variable T_PLUS_EQUAL expr                            { $$ = Expr\AssignOp\Plus      [$1, $3]; }
@@ -589,7 +599,8 @@ expr:
     | expr T_LOGICAL_AND expr                               { $$ = Expr\BinaryOp\LogicalAnd[$1, $3]; }
     | expr T_LOGICAL_XOR expr                               { $$ = Expr\BinaryOp\LogicalXor[$1, $3]; }
     | expr '|' expr                                         { $$ = Expr\BinaryOp\BitwiseOr [$1, $3]; }
-    | expr '&' expr                                         { $$ = Expr\BinaryOp\BitwiseAnd[$1, $3]; }
+    | expr T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG expr   { $$ = Expr\BinaryOp\BitwiseAnd[$1, $3]; }
+    | expr T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG expr       { $$ = Expr\BinaryOp\BitwiseAnd[$1, $3]; }
     | expr '^' expr                                         { $$ = Expr\BinaryOp\BitwiseXor[$1, $3]; }
     | expr '.' expr                                         { $$ = Expr\BinaryOp\Concat    [$1, $3]; }
     | expr '+' expr                                         { $$ = Expr\BinaryOp\Plus      [$1, $3]; }
@@ -816,7 +827,10 @@ static_operation:
     | static_scalar T_LOGICAL_AND static_scalar             { $$ = Expr\BinaryOp\LogicalAnd[$1, $3]; }
     | static_scalar T_LOGICAL_XOR static_scalar             { $$ = Expr\BinaryOp\LogicalXor[$1, $3]; }
     | static_scalar '|' static_scalar                       { $$ = Expr\BinaryOp\BitwiseOr [$1, $3]; }
-    | static_scalar '&' static_scalar                       { $$ = Expr\BinaryOp\BitwiseAnd[$1, $3]; }
+    | static_scalar T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG static_scalar
+          { $$ = Expr\BinaryOp\BitwiseAnd[$1, $3]; }
+    | static_scalar T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG static_scalar
+          { $$ = Expr\BinaryOp\BitwiseAnd[$1, $3]; }
     | static_scalar '^' static_scalar                       { $$ = Expr\BinaryOp\BitwiseXor[$1, $3]; }
     | static_scalar '.' static_scalar                       { $$ = Expr\BinaryOp\Concat    [$1, $3]; }
     | static_scalar '+' static_scalar                       { $$ = Expr\BinaryOp\Plus      [$1, $3]; }
@@ -986,8 +1000,8 @@ non_empty_array_pair_list:
 array_pair:
       expr T_DOUBLE_ARROW expr                              { $$ = Expr\ArrayItem[$3, $1,   false]; }
     | expr                                                  { $$ = Expr\ArrayItem[$1, null, false]; }
-    | expr T_DOUBLE_ARROW '&' variable                      { $$ = Expr\ArrayItem[$4, $1,   true]; }
-    | '&' variable                                          { $$ = Expr\ArrayItem[$2, null, true]; }
+    | expr T_DOUBLE_ARROW ampersand variable                { $$ = Expr\ArrayItem[$4, $1,   true]; }
+    | ampersand variable                                    { $$ = Expr\ArrayItem[$2, null, true]; }
     | T_ELLIPSIS expr                                       { $$ = Expr\ArrayItem[$2, null, false, attributes(), true]; }
 ;
 
diff --git a/grammar/php7.y b/grammar/php7.y
index 3c34398d6d..f1fa070df8 100644
--- a/grammar/php7.y
+++ b/grammar/php7.y
@@ -20,6 +20,11 @@ top_statement_list:
             if ($nop !== null) { $1[] = $nop; } $$ = $1; }
 ;
 
+ampersand:
+      T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG
+    | T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG
+;
+
 reserved_non_modifiers:
       T_INCLUDE | T_INCLUDE_ONCE | T_EVAL | T_REQUIRE | T_REQUIRE_ONCE | T_LOGICAL_OR | T_LOGICAL_XOR | T_LOGICAL_AND
     | T_INSTANCEOF | T_NEW | T_CLONE | T_EXIT | T_IF | T_ELSEIF | T_ELSE | T_ENDIF | T_ECHO | T_DO | T_WHILE
@@ -327,7 +332,12 @@ non_empty_variables_list:
 
 optional_ref:
       /* empty */                                           { $$ = false; }
-    | '&'                                                   { $$ = true; }
+    | ampersand                                             { $$ = true; }
+;
+
+optional_arg_ref:
+      /* empty */                                           { $$ = false; }
+    | T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG                 { $$ = true; }
 ;
 
 optional_ellipsis:
@@ -505,7 +515,7 @@ new_else_single:
 
 foreach_variable:
       variable                                              { $$ = array($1, false); }
-    | '&' variable                                          { $$ = array($2, true); }
+    | ampersand variable                                    { $$ = array($2, true); }
     | list_expr                                             { $$ = array($1, false); }
     | array_short_syntax                                    { $$ = array($1, false); }
 ;
@@ -528,13 +538,16 @@ optional_visibility_modifier:
 ;
 
 parameter:
-      optional_attributes optional_visibility_modifier optional_type_without_static optional_ref optional_ellipsis plain_variable
+      optional_attributes optional_visibility_modifier optional_type_without_static
+      optional_arg_ref optional_ellipsis plain_variable
           { $$ = new Node\Param($6, null, $3, $4, $5, attributes(), $2, $1);
             $this->checkParam($$); }
-    | optional_attributes optional_visibility_modifier optional_type_without_static optional_ref optional_ellipsis plain_variable '=' expr
+    | optional_attributes optional_visibility_modifier optional_type_without_static
+      optional_arg_ref optional_ellipsis plain_variable '=' expr
           { $$ = new Node\Param($6, $8, $3, $4, $5, attributes(), $2, $1);
             $this->checkParam($$); }
-    | optional_attributes optional_visibility_modifier optional_type_without_static optional_ref optional_ellipsis error
+    | optional_attributes optional_visibility_modifier optional_type_without_static
+      optional_arg_ref optional_ellipsis error
           { $$ = new Node\Param(Expr\Error[], null, $3, $4, $5, attributes(), $2, $1); }
 ;
 
@@ -594,7 +607,7 @@ non_empty_argument_list:
 
 argument:
       expr                                                  { $$ = Node\Arg[$1, false, false]; }
-    | '&' variable                                          { $$ = Node\Arg[$2, true, false]; }
+    | ampersand variable                                    { $$ = Node\Arg[$2, true, false]; }
     | T_ELLIPSIS expr                                       { $$ = Node\Arg[$2, false, true]; }
     | identifier_ex ':' expr
           { $$ = new Node\Arg($3, false, false, attributes(), $1); }
@@ -756,7 +769,7 @@ expr:
     | list_expr '=' expr                                    { $$ = Expr\Assign[$1, $3]; }
     | array_short_syntax '=' expr                           { $$ = Expr\Assign[$1, $3]; }
     | variable '=' expr                                     { $$ = Expr\Assign[$1, $3]; }
-    | variable '=' '&' variable                             { $$ = Expr\AssignRef[$1, $4]; }
+    | variable '=' ampersand variable                       { $$ = Expr\AssignRef[$1, $4]; }
     | new_expr                                              { $$ = $1; }
     | match                                                 { $$ = $1; }
     | T_CLONE expr                                          { $$ = Expr\Clone_[$2]; }
@@ -783,7 +796,8 @@ expr:
     | expr T_LOGICAL_AND expr                               { $$ = Expr\BinaryOp\LogicalAnd[$1, $3]; }
     | expr T_LOGICAL_XOR expr                               { $$ = Expr\BinaryOp\LogicalXor[$1, $3]; }
     | expr '|' expr                                         { $$ = Expr\BinaryOp\BitwiseOr [$1, $3]; }
-    | expr '&' expr                                         { $$ = Expr\BinaryOp\BitwiseAnd[$1, $3]; }
+    | expr T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG expr   { $$ = Expr\BinaryOp\BitwiseAnd[$1, $3]; }
+    | expr T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG expr       { $$ = Expr\BinaryOp\BitwiseAnd[$1, $3]; }
     | expr '^' expr                                         { $$ = Expr\BinaryOp\BitwiseXor[$1, $3]; }
     | expr '.' expr                                         { $$ = Expr\BinaryOp\Concat    [$1, $3]; }
     | expr '+' expr                                         { $$ = Expr\BinaryOp\Plus      [$1, $3]; }
@@ -1106,10 +1120,10 @@ inner_array_pair_list:
 
 array_pair:
       expr                                                  { $$ = Expr\ArrayItem[$1, null, false]; }
-    | '&' variable                                          { $$ = Expr\ArrayItem[$2, null, true]; }
+    | ampersand variable                                    { $$ = Expr\ArrayItem[$2, null, true]; }
     | list_expr                                             { $$ = Expr\ArrayItem[$1, null, false]; }
     | expr T_DOUBLE_ARROW expr                              { $$ = Expr\ArrayItem[$3, $1,   false]; }
-    | expr T_DOUBLE_ARROW '&' variable                      { $$ = Expr\ArrayItem[$4, $1,   true]; }
+    | expr T_DOUBLE_ARROW ampersand variable                { $$ = Expr\ArrayItem[$4, $1,   true]; }
     | expr T_DOUBLE_ARROW list_expr                         { $$ = Expr\ArrayItem[$3, $1,   false]; }
     | T_ELLIPSIS expr                                       { $$ = Expr\ArrayItem[$2, null, false, attributes(), true]; }
     | /* empty */                                           { $$ = null; }
diff --git a/grammar/tokens.y b/grammar/tokens.y
index 88d4498bfa..ab36c55973 100644
--- a/grammar/tokens.y
+++ b/grammar/tokens.y
@@ -18,7 +18,7 @@
 %left T_BOOLEAN_AND
 %left '|'
 %left '^'
-%left '&'
+%left T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG
 %nonassoc T_IS_EQUAL T_IS_NOT_EQUAL T_IS_IDENTICAL T_IS_NOT_IDENTICAL T_SPACESHIP
 %nonassoc '<' T_IS_SMALLER_OR_EQUAL '>' T_IS_GREATER_OR_EQUAL
 %left T_SL T_SR
diff --git a/lib/PhpParser/Lexer.php b/lib/PhpParser/Lexer.php
index e29e4b91fb..20495e5073 100644
--- a/lib/PhpParser/Lexer.php
+++ b/lib/PhpParser/Lexer.php
@@ -134,10 +134,11 @@ protected function postprocessTokens(ErrorHandler $errorHandler) {
         // detected by finding "gaps" in the token array. Unterminated comments are detected
         // by checking if a trailing comment has a "*/" at the end.
         //
-        // Additionally, we canonicalize to the PHP 8 comment format here, which does not include
-        // the trailing whitespace anymore.
-        //
-        // We also canonicalize to the PHP 8 T_NAME_* tokens.
+        // Additionally, we perform a number of canonicalizations here:
+        //  * Use the PHP 8.0 comment format, which does not include trailing whitespace anymore.
+        //  * Use PHP 8.0 T_NAME_* tokens.
+        //  * Use PHP 8.1 T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG and
+        //    T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG tokens used to disambiguate intersection types.
 
         $filePos = 0;
         $line = 1;
@@ -208,6 +209,22 @@ protected function postprocessTokens(ErrorHandler $errorHandler) {
                 }
             }
 
+            if ($token === '&') {
+                $next = $i + 1;
+                while (isset($this->tokens[$next]) && $this->tokens[$next][0] === \T_WHITESPACE) {
+                    $next++;
+                }
+                $followedByVarOrVarArg = isset($this->tokens[$next]) &&
+                    ($this->tokens[$next][0] === \T_VARIABLE || $this->tokens[$next][0] === \T_ELLIPSIS);
+                $this->tokens[$i] = $token = [
+                    $followedByVarOrVarArg
+                        ? \T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG
+                        : \T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG,
+                    '&',
+                    $line,
+                ];
+            }
+
             $tokenValue = \is_string($token) ? $token : $token[1];
             $tokenLen = \strlen($tokenValue);
 
@@ -424,6 +441,8 @@ private function defineCompatibilityTokens() {
             'T_ATTRIBUTE',
             // PHP 8.1
             'T_ENUM',
+            'T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG',
+            'T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG',
         ];
 
         // PHP-Parser might be used together with another library that also emulates some or all
@@ -514,6 +533,8 @@ protected function createTokenMap() : array {
         $tokenMap[\T_MATCH] = Tokens::T_MATCH;
         $tokenMap[\T_NULLSAFE_OBJECT_OPERATOR] = Tokens::T_NULLSAFE_OBJECT_OPERATOR;
         $tokenMap[\T_ATTRIBUTE] = Tokens::T_ATTRIBUTE;
+        $tokenMap[\T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG] = Tokens::T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG;
+        $tokenMap[\T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG] = Tokens::T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG;
         $tokenMap[\T_ENUM] = Tokens::T_ENUM;
 
         return $tokenMap;
diff --git a/lib/PhpParser/Parser/Php5.php b/lib/PhpParser/Parser/Php5.php
index 39cdbcc30f..c260e598bd 100644
--- a/lib/PhpParser/Parser/Php5.php
+++ b/lib/PhpParser/Parser/Php5.php
@@ -17,17 +17,17 @@
  */
 class Php5 extends \PhpParser\ParserAbstract
 {
-    protected $tokenToSymbolMapSize = 393;
-    protected $actionTableSize = 1069;
-    protected $gotoTableSize = 580;
+    protected $tokenToSymbolMapSize = 395;
+    protected $actionTableSize = 1093;
+    protected $gotoTableSize = 643;
 
-    protected $invalidSymbol = 166;
+    protected $invalidSymbol = 167;
     protected $errorSymbol = 1;
     protected $defaultAction = -32766;
     protected $unexpectedTokenRule = 32767;
 
-    protected $YY2TBLSTATE = 405;
-    protected $numNonLeafStates = 658;
+    protected $YY2TBLSTATE = 415;
+    protected $numNonLeafStates = 662;
 
     protected $symbolToName = array(
         "EOF",
@@ -67,7 +67,8 @@ class Php5 extends \PhpParser\ParserAbstract
         "T_BOOLEAN_AND",
         "'|'",
         "'^'",
-        "'&'",
+        "T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG",
+        "T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG",
         "T_IS_EQUAL",
         "T_IS_NOT_EQUAL",
         "T_IS_IDENTICAL",
@@ -199,662 +200,685 @@ class Php5 extends \PhpParser\ParserAbstract
     );
 
     protected $tokenToSymbol = array(
-            0,  166,  166,  166,  166,  166,  166,  166,  166,  166,
-          166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
-          166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
-          166,  166,  166,   55,  162,  166,  159,   54,   37,  166,
-          157,  158,   52,   49,    8,   50,   51,   53,  166,  166,
-          166,  166,  166,  166,  166,  166,  166,  166,   31,  154,
-           43,   16,   45,   30,   67,  166,  166,  166,  166,  166,
-          166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
-          166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
-          166,   69,  166,  161,   36,  166,  160,  166,  166,  166,
-          166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
-          166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
-          166,  166,  166,  155,   35,  156,   57,  166,  166,  166,
-          166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
-          166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
-          166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
-          166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
-          166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
-          166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
-          166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
-          166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
-          166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
-          166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
-          166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
-          166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
-          166,  166,  166,  166,  166,  166,    1,    2,    3,    4,
+            0,  167,  167,  167,  167,  167,  167,  167,  167,  167,
+          167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
+          167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
+          167,  167,  167,   56,  163,  167,  160,   55,  167,  167,
+          158,  159,   53,   50,    8,   51,   52,   54,  167,  167,
+          167,  167,  167,  167,  167,  167,  167,  167,   31,  155,
+           44,   16,   46,   30,   68,  167,  167,  167,  167,  167,
+          167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
+          167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
+          167,   70,  167,  162,   36,  167,  161,  167,  167,  167,
+          167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
+          167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
+          167,  167,  167,  156,   35,  157,   58,  167,  167,  167,
+          167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
+          167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
+          167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
+          167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
+          167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
+          167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
+          167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
+          167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
+          167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
+          167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
+          167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
+          167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
+          167,  167,  167,  167,  167,  167,    1,    2,    3,    4,
             5,    6,    7,    9,   10,   11,   12,   13,   14,   15,
            17,   18,   19,   20,   21,   22,   23,   24,   25,   26,
-           27,   28,   29,   32,   33,   34,   38,   39,   40,   41,
-           42,   44,   46,   47,   48,   56,   58,   59,   60,   61,
-           62,   63,   64,   65,   66,   68,   70,   71,   72,   73,
-           74,   75,   76,   77,   78,   79,   80,   81,   82,   83,
-           84,   85,   86,   87,   88,   89,   90,   91,   92,   93,
-           94,   95,   96,   97,   98,   99,  100,  101,  102,  103,
-          104,  105,  106,  107,  108,  109,  110,  111,  112,  113,
-          114,  115,  116,  117,  118,  119,  120,  121,  122,  123,
-          124,  125,  126,  127,  128,  163,  129,  130,  131,  164,
-          132,  133,  134,  135,  136,  137,  138,  139,  140,  141,
-          142,  143,  144,  145,  146,  147,  148,  149,  150,  151,
-          152,  153,  165
+           27,   28,   29,   32,   33,   34,   37,   38,   39,   40,
+           41,   42,   43,   45,   47,   48,   49,   57,   59,   60,
+           61,   62,   63,   64,   65,   66,   67,   69,   71,   72,
+           73,   74,   75,   76,   77,   78,   79,   80,   81,   82,
+           83,   84,   85,   86,   87,   88,   89,   90,   91,   92,
+           93,   94,   95,   96,   97,   98,   99,  100,  101,  102,
+          103,  104,  105,  106,  107,  108,  109,  110,  111,  112,
+          113,  114,  115,  116,  117,  118,  119,  120,  121,  122,
+          123,  124,  125,  126,  127,  128,  129,  164,  130,  131,
+          132,  165,  133,  134,  135,  136,  137,  138,  139,  140,
+          141,  142,  143,  144,  145,  146,  147,  148,  149,  150,
+          151,  152,  153,  154,  166
     );
 
     protected $action = array(
-          693,  663,  664,  665,  666,  667,  282,  668,  669,  670,
-          706,  707,  221,  222,  223,  224,  225,  226,  227,  228,
-          229,    0,  230,  231,  232,  233,  234,  235,  236,  237,
-          238,  239,  240,  241,-32766,-32766,-32766,-32766,-32766,-32766,
-        -32766,-32766,-32767,-32767,-32767,-32767,   27,  242,  243,-32766,
-        -32766,-32766,-32766,-32766,  671,-32766,  333,-32766,-32766,-32766,
-        -32766,-32766,-32766,-32767,-32767,-32767,-32767,-32767,  672,  673,
-          674,  675,  676,  677,  678, 1034,  816,  740,  941,  942,
-          943,  940,  939,  938,  679,  680,  681,  682,  683,  684,
-          685,  686,  687,  688,  689,  709,  732,  710,  711,  712,
-          713,  701,  702,  703,  731,  704,  705,  690,  691,  692,
-          694,  695,  696,  734,  735,  736,  737,  738,  739,  697,
-          698,  699,  700,  730,  721,  719,  720,  716,  717,  437,
-          708,  714,  715,  722,  723,  725,  724,  726,  727,   55,
-           56,  417,   57,   58,  718,  729,  728,   28,   59,   60,
-         -220,   61,-32766,-32766,-32766,-32766,-32766,-32766,-32766,-32766,
-        -32766,   36,-32767,-32767,-32767,-32767, 1034,   35,  106,  107,
+          699,  669,  670,  671,  672,  673,  286,  674,  675,  676,
+          712,  713,  223,  224,  225,  226,  227,  228,  229,  230,
+          231,  232,    0,  233,  234,  235,  236,  237,  238,  239,
+          240,  241,  242,  243,  244,-32766,-32766,-32766,-32766,-32766,
+        -32766,-32766,-32766,-32766,-32767,-32767,-32767,-32767,  245,  246,
+          242,  243,  244,-32766,-32766,  677,-32766,  750,-32766,-32766,
+        -32766,-32766,-32766,-32766,-32766, 1224,  245,  246, 1225,  678,
+          679,  680,  681,  682,  683,  684,-32766,   48,  746,-32766,
+        -32766,-32766,-32766,-32766,-32766,  685,  686,  687,  688,  689,
+          690,  691,  692,  693,  694,  695,  715,  738,  716,  717,
+          718,  719,  707,  708,  709,  737,  710,  711,  696,  697,
+          698,  700,  701,  702,  740,  741,  742,  743,  744,  745,
+          703,  704,  705,  706,  736,  727,  725,  726,  722,  723,
+          751,  714,  720,  721,  728,  729,  731,  730,  732,  733,
+           55,   56,  425,   57,   58,  724,  735,  734, 1073,   59,
+           60, -224,   61,-32766,-32766,-32766,-32766,-32766,-32766,-32766,
+        -32766,-32766,-32766,  121,-32767,-32767,-32767,-32767,   29,  107,
           108,  109,  110,  111,  112,  113,  114,  115,  116,  117,
-          118,-32766,-32766,-32766,-32766,   62,   63, 1034,  125,  285,
-          292,   64,  748,   65,  290,  291,   66,   67,   68,   69,
-           70,   71,   72,   73,  763,   25,  298,   74,  409,  973,
-          975,  294,  294, 1086, 1087, 1064,  796,  748,  218,  219,
-          220,  465,-32766,-32766,-32766,  742,  864,  817,   54,  807,
-            9,-32766,-32766,-32766,  760,  320,  761,  410,   10,  202,
-          246,  428,  209,-32766,  933,-32766,-32766,-32766,-32766,-32766,
-        -32766,  488,-32766,  438,-32766,-32766,-32766,-32766,-32766,  473,
-          474,  941,  942,  943,  940,  939,  938,-32766,  475,  476,
-          337, 1092, 1093, 1094, 1095, 1089, 1090,  315, 1214, -255,
-          747, 1215, -505, 1096, 1091,  888,  889, 1066, 1065, 1067,
-          218,  219,  220,   41,  414,  337,  330,  895,  332,  418,
-         -126, -126, -126,   75,   52,  464,   -4,  817,   54,  805,
-         -224,  202,   40,   21,  419, -126,  466, -126,  467, -126,
-          468, -126,  359,  420,  128,  128,  748, 1171,   31,   32,
-          421,  422, 1034,  894,   33,  469,-32766,-32766,-32766, 1186,
-          351,  352,  470,  471,-32766,-32766,-32766,  309,  472,  865,
-          323,  788,  835,  423,  424,-32767,-32767,-32767,-32767,   97,
-           98,   99,  100,  101,  615,-32766,  313,-32766,-32766,-32766,
-        -32766,  354, 1185, 1171,  218,  219,  220,  475,  748,  418,
-          819,  629, -126,  297,  915,  464,  817,   54,-32766,  805,
-          124,  748,   40,   21,  419,  202,  466,   48,  467,  534,
-          468,  129,  429,  420,  337,  341,  888,  889,   31,   32,
-          421,  422,  416,  405,   33,  469,-32766,-32766,  311,  298,
-          351,  352,  470,  471,-32766,-32766,-32766,  748,  472,  412,
-          748,  752,  835,  423,  424,  338, 1066, 1065, 1067,  219,
-          220,  919, 1136,  296,   20,-32766,  576,-32766,-32766,-32766,
-          742,  341,  342,  413,  429, 1064,  337,  512,  418,  202,
-          819,  629,   -4, 1034,  464,  817,   54,   49,  805,  337,
-          762,   40,   21,  419,   51,  466, 1034,  467,  475,  468,
-          340,  748,  420,  120, -205, -205, -205,   31,   32,  421,
-          422, 1062,-32766,   33,  469,-32766,-32766,-32766,  744,  351,
-          352,  470,  471,  429, 1098,  337,  429,  472,  337, 1034,
-          788,  835,  423,  424,  415, 1098,-32766,  802,-32766,-32766,
-          102,  103,  104, 1137,  303,  202,  130, 1066, 1065, 1067,
-          337,  123,  239,  240,  241,  748,  105,  418, 1205,  819,
-          629, -205,  440,  464,-32766,-32766,-32766,  805,  242,  243,
-           40,   21,  419,  121,  466,  126,  467,  429,  468,  337,
-          122,  420, 1052, -204, -204, -204,   31,   32,  421,  422,
-         1034,  745,   33,  469,  220,  759,  817,   54,  351,  352,
-          470,  471,  218,  219,  220,  119,  472,  244,  127,  788,
-          835,  423,  424,  202,-32766,-32766,-32766,   30,  293,  803,
-           79,   80,   81,  202,  798,  210,  632,   99,  100,  101,
-          236,  237,  238,  817,   54,-32766,  211,  800,  819,  629,
-         -204,   34, 1034,   82,   83,   84,   85,   86,   87,   88,
-           89,   90,   91,   92,   93,   94,   95,   96,   97,   98,
-           99,  100,  101,  102,  103,  104,  286,  303,  418, 1034,
-          817,   54,-32766,-32766,  464,  218,  219,  220,  805,  105,
-          914,   40,   21,  419,   78,  466,  212,  467,  337,  468,
-          133,  247,  420,  295,  567,  248,  202,   31,   32,  421,
-          633,  242,  243,   33,  469,  418,  249,  817,   54,  351,
-          352,  464,  760,  -84,  761,  805,  310,  472,   40,   21,
-          419,-32766,  466,  640,  467,  643,  468,  447,   22,  420,
-          815,  452,  584,  132,   31,   32,  421,  637,  134,  364,
-           33,  469,  418,  303,  817,   54,  351,  352,  464,  819,
-          629,  828,  805,   43,  472,   40,   21,  419,   44,  466,
-           45,  467,   46,  468,  591,  592,  420,  753,  635,  930,
-          649,   31,   32,  421,  641,  918,  657,   33,  469,  418,
-          105,  817,   54,  351,  352,  464,  819,  629,   47,  805,
-           50,  472,   40,   21,  419,   53,  466,  131,  467,  298,
-          468,  599,  742,  420,-32766, -274,  516,  570,   31,   32,
-          421,  646,  748,  946,   33,  469,  418,  589,  436,-32766,
-          351,  352,  464,  819,  629,  623,  805,  836,  472,   40,
-           21,  419,  611,  466,  -82,  467,  603,  468,   11,  573,
-          420,  439,  456,  281,  318,   31,   32,  421,  588,  432,
-          321,   33,  469,  418, -414,  458,  322,  351,  352,  464,
-          851,  629,  837,  805, -505,  472,   40,   21,  419,  654,
-          466,   38,  467,   24,  468,    0,    0,  420,  319,    0,
-         -405,    0,   31,   32,  421,  245,  312,  314,   33,  469,
-         -506,    0,    0, 1097,  351,  352, 1143,  819,  629,    0,
-            0,  527,  472,  213,  214,    6,    7,   12,   14,  215,
-          363,  216, -415,  558,  789, -221,  830,    0,    0,  747,
-            0,    0,    0,  207,   39,  652,  653,  758,  806,  814,
-          793, 1086, 1087,  808,  819,  629,  213,  214,  867, 1088,
-          858,  859,  215,  791,  216,  852,  849,  847,  925,  926,
-          923,  813,  797,  799,  801,  804,  207,  922,  756,  757,
-          924,  287,   78,  331, 1086, 1087,  353,  630,  634,  636,
-          638,  639, 1088,  642,  644,  645,  647,  648,  631, 1142,
-         1211, 1213,  755,  834,  754,  833, 1212,  554,  832, 1092,
-         1093, 1094, 1095, 1089, 1090,  388, 1048,  824, 1036,  831,
-         1037, 1096, 1091,  822,  931,  856,  857,  451, 1210, 1179,
-            0,  217, 1177, 1162, 1175, 1077,  906, 1183, 1173,    0,
-          554,   26, 1092, 1093, 1094, 1095, 1089, 1090,  388,   29,
-           37,   42,   76,   77, 1096, 1091,  208,  284,  288,  289,
-          304,  305,  306,  307,  217,  335,  406,  408,    0, -220,
-           16,   17,   18,  383,  448,  455,  457,  462,  548,  620,
-         1039, 1042,  896, 1102, 1038, 1014,  559, 1013, 1079,    0,
-            0, -424, 1032,    0, 1043, 1045, 1044, 1047, 1046, 1061,
-         1176, 1161, 1157, 1174, 1076, 1208, 1103, 1156,  595
+          118,  119, 1043,  766, 1071,  767,  580,   62,   63,-32766,
+        -32766,-32766,-32766,   64,  516,   65,  294,  295,   66,   67,
+           68,   69,   70,   71,   72,   73,  822,   25,  302,   74,
+          418,  981,  983, 1043, 1181, 1095, 1096, 1073,  748,  754,
+         1075, 1074, 1076,  469,-32766,-32766,-32766,  337,  823,   54,
+        -32767,-32767,-32767,-32767,   98,   99,  100,  101,  102,  220,
+          221,  222,   78,  361, 1107,-32766,  341,-32766,-32766,-32766,
+        -32766,-32766, 1107,  492,  949,  950,  951,  948,  947,  946,
+          207,  477,  478,  949,  950,  951,  948,  947,  946, 1043,
+          479,  480,   52, 1101, 1102, 1103, 1104, 1098, 1099,  319,
+          872,  668,  667,   27, -511, 1105, 1100,-32766,  130, 1075,
+         1074, 1076,  345,  668,  667,   41,  126,  341,  334,  369,
+          336,  426, -128, -128, -128,  896,  897,  468,  220,  221,
+          222,  811, 1195,  619,   40,   21,  427, -128,  470, -128,
+          471, -128,  472, -128,  802,  428,   -4,  823,   54,  207,
+           33,   34,  429,  360,  317,   28,   35,  473,-32766,-32766,
+        -32766,  211,  356,  357,  474,  475,-32766,-32766,-32766,  754,
+          476,   49,  313,  794,  843,  430,  431,  289,  125,-32766,
+          813,-32766,-32766,-32766,-32766,-32766,-32766,-32766,-32767,-32767,
+        -32767,-32767,-32767,-32766,-32766,-32766,  769,  103,  104,  105,
+          327,  307,  825,  633, -128, 1075, 1074, 1076,  221,  222,
+          927,  748, 1146,  106,-32766,  129,-32766,-32766,-32766,-32766,
+          426,  823,   54,  902,  873,  302,  468,   75,  207,  359,
+          811,  668,  667,   40,   21,  427,  754,  470,  754,  471,
+          423,  472, 1043,  127,  428,  435, 1043,  341, 1043,   33,
+           34,  429,  360, 1181,  415,   35,  473,  122,   10,  315,
+          128,  356,  357,  474,  475,-32766,-32766,-32766,  768,  476,
+          668,  667,  758,  843,  430,  431,  754, 1043, 1147,-32766,
+        -32766,-32766,  754,  419,  342, 1215,-32766,  131,-32766,-32766,
+        -32766,  341,  363,  346,  426,  823,   54,  100,  101,  102,
+          468,  825,  633,   -4,  811,  442,  903,   40,   21,  427,
+          754,  470,  435,  471,  341,  472,  341,  766,  428,  767,
+         -209, -209, -209,   33,   34,  429,  360,  479, 1196,   35,
+          473,  345,-32766,-32766,-32766,  356,  357,  474,  475,  220,
+          221,  222,  421,  476,   32,  297,  794,  843,  430,  431,
+          754,  754,  435,-32766,  341,-32766,-32766,    9,  300,   51,
+          207,  249,  324,  753,  120,  220,  221,  222,  426,   30,
+          247,  941,  422,  424,  468,  825,  633, -209,  811, 1043,
+         1061,   40,   21,  427,  129,  470,  207,  471,  341,  472,
+          804,   20,  428,  124, -208, -208, -208,   33,   34,  429,
+          360,  479,  212,   35,  473,  923, -259,  823,   54,  356,
+          357,  474,  475,-32766,-32766,-32766, 1043,  476,  213,  806,
+          794,  843,  430,  431,-32766,-32766,  435,  435,  341,  341,
+          443,   79,   80,   81,-32766,  668,  667,  636,  344,  808,
+          668,  667,  239,  240,  241,  123,  214,  538,  250,  825,
+          633, -208,   36,  251,   82,   83,   84,   85,   86,   87,
+           88,   89,   90,   91,   92,   93,   94,   95,   96,   97,
+           98,   99,  100,  101,  102,  103,  104,  105,  252,  307,
+          426,  220,  221,  222,  823,   54,  468,-32766,  222,  765,
+          811,  106,  134,   40,   21,  427,  571,  470,  207,  471,
+          445,  472,  207,-32766,  428,  896,  897,  207,  307,   33,
+           34,  429,  245,  246,  637,   35,  473,  452,   22,  809,
+          922,  356,  357,  457,  588,  135,  374,  595,  596,  476,
+         -228,  759,  639,  938,  653,  926,  661,  -86,  823,   54,
+          314,  644,  647,  821,  133,  836,   43,  106,  603,   44,
+           45,   46,   47,  748,   50,   53,  132,  426,  302,-32766,
+          520,  825,  633,  468,  -84,  607,  577,  811,  641,  362,
+           40,   21,  427, -278,  470,  754,  471,  954,  472,  441,
+          627,  428,  823,   54,  574,  844,   33,   34,  429,   11,
+          615,  845,   35,  473,  444,  461,  285, -511,  356,  357,
+          592, -419,  593, 1106, 1153, -410,  476,  368,  838,   38,
+          658,  426,  645,  795, 1052,    0,  325,  468,    0,-32766,
+            0,  811,    0,    0,   40,   21,  427,    0,  470,    0,
+          471,    0,  472,    0,  322,  428,  823,   54,  825,  633,
+           33,   34,  429,    0,  326,    0,   35,  473,  323,    0,
+          316,  318,  356,  357, -512,  426,    0,  753,  531,    0,
+          476,  468,    6,    0,    0,  811,  650,    7,   40,   21,
+          427,   12,  470,   14,  471,  373,  472, -420,  562,  428,
+          823,   54,   78, -225,   33,   34,  429,   39,  656,  657,
+           35,  473,  859,  633,  764,  812,  356,  357,  820,  799,
+          814,  875,  866,  867,  476,  797,  860,  857,  855,  426,
+          933,  934,  931,  819,  803,  468,  805,  807,  810,  811,
+          930,  762,   40,   21,  427,  763,  470,  932,  471,  335,
+          472,  358,  634,  428,  638,  640,  825,  633,   33,   34,
+          429,  642,  643,  646,   35,  473,  648,  649,  651,  652,
+          356,  357,  635,  426, 1221, 1223,  761,  842,  476,  468,
+          248,  760,  841,  811, 1222,  840,   40,   21,  427, 1057,
+          470,  830,  471, 1045,  472,  839, 1046,  428,  828,  215,
+          216,  939,   33,   34,  429,  217,  864,  218,   35,  473,
+          825,  633,   24,  865,  356,  357,  456, 1220, 1189,  209,
+         1187, 1172,  476, 1185,  215,  216, 1086, 1095, 1096,  914,
+          217, 1193,  218, 1183, -224, 1097,   26,   31,   37,   42,
+           76,   77,  210,  288,  209,  292,  293,  308,  309,  310,
+          311,  339, 1095, 1096,  825,  633,  355,  291,  416, 1152,
+         1097,   16,   17,   18,  393,  453,  460,  462,  466,  552,
+          624, 1048, 1051,  904, 1111, 1047, 1023,  563, 1022, 1088,
+            0,    0, -429,  558, 1041, 1101, 1102, 1103, 1104, 1098,
+         1099,  398, 1054, 1053, 1056, 1055, 1070, 1105, 1100, 1186,
+         1171, 1167, 1184, 1085, 1218, 1112, 1166,  219,  558,  599,
+         1101, 1102, 1103, 1104, 1098, 1099,  398,    0,    0,    0,
+            0,    0, 1105, 1100,    0,    0,    0,    0,    0,    0,
+            0,    0,  219
     );
 
     protected $actionCheck = array(
             2,    3,    4,    5,    6,    7,   14,    9,   10,   11,
            12,   13,   33,   34,   35,   36,   37,   38,   39,   40,
-           41,    0,   43,   44,   45,   46,   47,   48,   49,   50,
-           51,   52,   53,   54,    9,   10,   11,   33,   34,   35,
-           36,   37,   38,   39,   40,   41,    8,   68,   69,   33,
-           34,   35,   36,   37,   56,   30,    8,   32,   33,   34,
-           35,   36,   37,   38,   39,   40,   41,   42,   70,   71,
-           72,   73,   74,   75,   76,   13,    1,   79,  115,  116,
-          117,  118,  119,  120,   86,   87,   88,   89,   90,   91,
+           41,   42,    0,   44,   45,   46,   47,   48,   49,   50,
+           51,   52,   53,   54,   55,    9,   10,   11,   33,   34,
+           35,   36,   37,   38,   39,   40,   41,   42,   69,   70,
+           53,   54,   55,    9,   10,   57,   30,   80,   32,   33,
+           34,   35,   36,   37,   38,   80,   69,   70,   83,   71,
+           72,   73,   74,   75,   76,   77,    9,   70,   80,   33,
+           34,   35,   36,   37,   38,   87,   88,   89,   90,   91,
            92,   93,   94,   95,   96,   97,   98,   99,  100,  101,
           102,  103,  104,  105,  106,  107,  108,  109,  110,  111,
           112,  113,  114,  115,  116,  117,  118,  119,  120,  121,
-          122,  123,  124,  125,  126,  127,  128,  129,  130,   31,
-          132,  133,  134,  135,  136,  137,  138,  139,  140,    3,
-            4,    5,    6,    7,  146,  147,  148,    8,   12,   13,
-          158,   15,   33,   34,   35,   36,   37,   38,   39,   40,
-           41,   14,   43,   44,   45,   46,   13,   16,   17,   18,
-           19,   20,   21,   22,   23,   24,   25,   26,   27,   28,
-           29,   33,   34,   35,   36,   49,   50,   13,    8,    8,
-           37,   55,   81,   57,   58,   59,   60,   61,   62,   63,
-           64,   65,   66,   67,  156,   69,   70,   71,   72,   58,
-           59,   37,   37,   77,   78,   79,  154,   81,    9,   10,
-           11,   85,    9,   10,   11,   79,   31,    1,    2,  154,
-          107,    9,   10,   11,  105,  112,  107,  126,    8,   30,
-           31,  105,    8,   30,  121,   32,   33,   34,   35,   36,
-           37,  115,   30,  155,   32,   33,   34,   35,   36,  123,
-          124,  115,  116,  117,  118,  119,  120,  115,  132,  133,
-          159,  135,  136,  137,  138,  139,  140,  141,   79,  156,
-          151,   82,  131,  147,  148,  133,  134,  151,  152,  153,
-            9,   10,   11,  157,    8,  159,  160,  158,  162,   73,
-           74,   75,   76,  150,   69,   79,    0,    1,    2,   83,
-          158,   30,   86,   87,   88,   89,   90,   91,   92,   93,
-           94,   95,    8,   97,  150,  150,   81,   81,  102,  103,
-          104,  105,   13,  158,  108,  109,    9,   10,   11,  158,
-          114,  115,  116,  117,    9,   10,   11,    8,  122,  154,
-            8,  125,  126,  127,  128,   43,   44,   45,   46,   47,
-           48,   49,   50,   51,   79,   30,  131,   32,   33,   34,
-           35,    8,    1,   81,    9,   10,   11,  132,   81,   73,
-          154,  155,  156,   37,  154,   79,    1,    2,  115,   83,
-          155,   81,   86,   87,   88,   30,   90,   69,   92,   80,
-           94,  155,  157,   97,  159,  159,  133,  134,  102,  103,
-          104,  105,    8,  107,  108,  109,    9,   10,  112,   70,
-          114,  115,  116,  117,    9,   10,   11,   81,  122,    8,
-           81,  125,  126,  127,  128,    8,  151,  152,  153,   10,
-           11,  156,  161,    8,  158,   30,   84,   32,   33,   34,
-           79,  159,  146,    8,  157,   79,  159,   84,   73,   30,
-          154,  155,  156,   13,   79,    1,    2,   69,   83,  159,
-          156,   86,   87,   88,   69,   90,   13,   92,  132,   94,
-           69,   81,   97,  155,   99,  100,  101,  102,  103,  104,
-          105,  115,    9,  108,  109,    9,   10,   11,   79,  114,
-          115,  116,  117,  157,  142,  159,  157,  122,  159,   13,
-          125,  126,  127,  128,    8,  142,   30,  154,   32,   33,
-           52,   53,   54,  158,   56,   30,  155,  151,  152,  153,
-          159,   14,   52,   53,   54,   81,   68,   73,   84,  154,
-          155,  156,  131,   79,   33,   34,   35,   83,   68,   69,
-           86,   87,   88,  155,   90,  155,   92,  157,   94,  159,
-          155,   97,  158,   99,  100,  101,  102,  103,  104,  105,
-           13,  152,  108,  109,   11,  154,    1,    2,  114,  115,
-          116,  117,    9,   10,   11,   16,  122,   14,   31,  125,
-          126,  127,  128,   30,    9,   10,   11,  143,  144,  154,
-            9,   10,   11,   30,  154,   16,   31,   49,   50,   51,
-           49,   50,   51,    1,    2,   30,   16,  154,  154,  155,
-          156,   30,   13,   32,   33,   34,   35,   36,   37,   38,
-           39,   40,   41,   42,   43,   44,   45,   46,   47,   48,
-           49,   50,   51,   52,   53,   54,   37,   56,   73,   13,
-            1,    2,   33,   34,   79,    9,   10,   11,   83,   68,
-          154,   86,   87,   88,  155,   90,   16,   92,  159,   94,
-          155,   16,   97,   37,  159,   16,   30,  102,  103,  104,
-           31,   68,   69,  108,  109,   73,   16,    1,    2,  114,
-          115,   79,  105,   31,  107,   83,   31,  122,   86,   87,
-           88,   33,   90,   31,   92,   31,   94,   74,   75,   97,
-           31,   74,   75,   31,  102,  103,  104,   31,  100,  101,
-          108,  109,   73,   56,    1,    2,  114,  115,   79,  154,
-          155,   37,   83,   69,  122,   86,   87,   88,   69,   90,
-           69,   92,   69,   94,  110,  111,   97,  154,  155,  154,
-          155,  102,  103,  104,   31,  154,  155,  108,  109,   73,
-           68,    1,    2,  114,  115,   79,  154,  155,   69,   83,
-           69,  122,   86,   87,   88,   69,   90,   69,   92,   70,
-           94,   76,   79,   97,   84,   81,   84,   89,  102,  103,
-          104,   31,   81,   81,  108,  109,   73,  112,   88,  115,
-          114,  115,   79,  154,  155,   91,   83,  126,  122,   86,
-           87,   88,   93,   90,   96,   92,   95,   94,   96,   99,
-           97,   96,   96,   96,  129,  102,  103,  104,   99,  105,
-          113,  108,  109,   73,  145,  105,  129,  114,  115,   79,
-          154,  155,  126,   83,  131,  122,   86,   87,   88,  156,
-           90,  154,   92,  157,   94,   -1,   -1,   97,  130,   -1,
-          145,   -1,  102,  103,  104,   31,  131,  131,  108,  109,
-          131,   -1,   -1,  142,  114,  115,  142,  154,  155,   -1,
-           -1,  149,  122,   49,   50,  145,  145,  145,  145,   55,
-          145,   57,  145,  149,  156,  158,  150,   -1,   -1,  151,
-           -1,   -1,   -1,   69,  154,  154,  154,  154,  154,  154,
-          154,   77,   78,  154,  154,  155,   49,   50,  154,   85,
-          154,  154,   55,  154,   57,  154,  154,  154,  154,  154,
-          154,  154,  154,  154,  154,  154,   69,  154,  154,  154,
-          154,  159,  155,  155,   77,   78,  155,  155,  155,  155,
-          155,  155,   85,  155,  155,  155,  155,  155,  155,  162,
-          156,  156,  156,  156,  156,  156,  156,  133,  156,  135,
-          136,  137,  138,  139,  140,  141,  156,  156,  156,  156,
-          156,  147,  148,  156,  156,  156,  156,  156,  156,  156,
-           -1,  157,  156,  156,  156,  156,  156,  156,  156,   -1,
-          133,  157,  135,  136,  137,  138,  139,  140,  141,  157,
-          157,  157,  157,  157,  147,  148,  157,  157,  157,  157,
-          157,  157,  157,  157,  157,  157,  157,  157,   -1,  158,
-          158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
-          158,  158,  158,  158,  158,  158,  158,  158,  158,   -1,
-           -1,  160,  160,   -1,  161,  161,  161,  161,  161,  161,
-          161,  161,  161,  161,  161,  161,  161,  161,  161
+          122,  123,  124,  125,  126,  127,  128,  129,  130,  131,
+          153,  133,  134,  135,  136,  137,  138,  139,  140,  141,
+            3,    4,    5,    6,    7,  147,  148,  149,   80,   12,
+           13,  159,   15,   33,   34,   35,   36,   37,   38,   39,
+           40,   41,   42,  156,   44,   45,   46,   47,   16,   17,
+           18,   19,   20,   21,   22,   23,   24,   25,   26,   27,
+           28,   29,   13,  106,  116,  108,   85,   50,   51,   33,
+           34,   35,   36,   56,   85,   58,   59,   60,   61,   62,
+           63,   64,   65,   66,   67,   68,    1,   70,   71,   72,
+           73,   59,   60,   13,   82,   78,   79,   80,   80,   82,
+          152,  153,  154,   86,    9,   10,   11,    8,    1,    2,
+           44,   45,   46,   47,   48,   49,   50,   51,   52,    9,
+           10,   11,  156,  106,  143,   30,  160,   32,   33,   34,
+           35,   36,  143,  116,  116,  117,  118,  119,  120,  121,
+           30,  124,  125,  116,  117,  118,  119,  120,  121,   13,
+          133,  134,   70,  136,  137,  138,  139,  140,  141,  142,
+           31,   37,   38,    8,  132,  148,  149,  116,  156,  152,
+          153,  154,  160,   37,   38,  158,    8,  160,  161,    8,
+          163,   74,   75,   76,   77,  134,  135,   80,    9,   10,
+           11,   84,    1,   80,   87,   88,   89,   90,   91,   92,
+           93,   94,   95,   96,  155,   98,    0,    1,    2,   30,
+          103,  104,  105,  106,  132,    8,  109,  110,    9,   10,
+           11,    8,  115,  116,  117,  118,    9,   10,   11,   82,
+          123,   70,    8,  126,  127,  128,  129,    8,  156,   30,
+          155,   32,   33,   34,   35,   36,   37,   38,   39,   40,
+           41,   42,   43,    9,   10,   11,  157,   53,   54,   55,
+            8,   57,  155,  156,  157,  152,  153,  154,   10,   11,
+          157,   80,  162,   69,   30,  151,   32,   33,   34,   35,
+           74,    1,    2,  159,  155,   71,   80,  151,   30,    8,
+           84,   37,   38,   87,   88,   89,   82,   91,   82,   93,
+            8,   95,   13,  156,   98,  158,   13,  160,   13,  103,
+          104,  105,  106,   82,  108,  109,  110,  156,    8,  113,
+           31,  115,  116,  117,  118,    9,   10,   11,  157,  123,
+           37,   38,  126,  127,  128,  129,   82,   13,  159,   33,
+           34,   35,   82,  127,    8,   85,   30,  156,   32,   33,
+           34,  160,    8,  147,   74,    1,    2,   50,   51,   52,
+           80,  155,  156,  157,   84,   31,  159,   87,   88,   89,
+           82,   91,  158,   93,  160,   95,  160,  106,   98,  108,
+          100,  101,  102,  103,  104,  105,  106,  133,  159,  109,
+          110,  160,    9,   10,   11,  115,  116,  117,  118,    9,
+           10,   11,    8,  123,  144,  145,  126,  127,  128,  129,
+           82,   82,  158,   30,  160,   32,   33,  108,    8,   70,
+           30,   31,  113,  152,   16,    9,   10,   11,   74,   14,
+           14,  122,    8,    8,   80,  155,  156,  157,   84,   13,
+          159,   87,   88,   89,  151,   91,   30,   93,  160,   95,
+          155,  159,   98,   14,  100,  101,  102,  103,  104,  105,
+          106,  133,   16,  109,  110,  155,  157,    1,    2,  115,
+          116,  117,  118,    9,   10,   11,   13,  123,   16,  155,
+          126,  127,  128,  129,   33,   34,  158,  158,  160,  160,
+          156,    9,   10,   11,   30,   37,   38,   31,   70,  155,
+           37,   38,   50,   51,   52,  156,   16,   81,   16,  155,
+          156,  157,   30,   16,   32,   33,   34,   35,   36,   37,
+           38,   39,   40,   41,   42,   43,   44,   45,   46,   47,
+           48,   49,   50,   51,   52,   53,   54,   55,   16,   57,
+           74,    9,   10,   11,    1,    2,   80,  116,   11,  155,
+           84,   69,  156,   87,   88,   89,  160,   91,   30,   93,
+          132,   95,   30,   33,   98,  134,  135,   30,   57,  103,
+          104,  105,   69,   70,   31,  109,  110,   75,   76,  155,
+          155,  115,  116,   75,   76,  101,  102,  111,  112,  123,
+          159,  155,  156,  155,  156,  155,  156,   31,    1,    2,
+           31,   31,   31,   31,   31,   38,   70,   69,   77,   70,
+           70,   70,   70,   80,   70,   70,   70,   74,   71,   85,
+           85,  155,  156,   80,   97,   96,  100,   84,   31,  106,
+           87,   88,   89,   82,   91,   82,   93,   82,   95,   89,
+           92,   98,    1,    2,   90,  127,  103,  104,  105,   97,
+           94,  127,  109,  110,   97,   97,   97,  132,  115,  116,
+          100,  146,  113,  143,  143,  146,  123,  106,  151,  155,
+          157,   74,   31,  157,  162,   -1,  114,   80,   -1,  116,
+           -1,   84,   -1,   -1,   87,   88,   89,   -1,   91,   -1,
+           93,   -1,   95,   -1,  130,   98,    1,    2,  155,  156,
+          103,  104,  105,   -1,  130,   -1,  109,  110,  131,   -1,
+          132,  132,  115,  116,  132,   74,   -1,  152,  150,   -1,
+          123,   80,  146,   -1,   -1,   84,   31,  146,   87,   88,
+           89,  146,   91,  146,   93,  146,   95,  146,  150,   98,
+            1,    2,  156,  159,  103,  104,  105,  155,  155,  155,
+          109,  110,  155,  156,  155,  155,  115,  116,  155,  155,
+          155,  155,  155,  155,  123,  155,  155,  155,  155,   74,
+          155,  155,  155,  155,  155,   80,  155,  155,  155,   84,
+          155,  155,   87,   88,   89,  155,   91,  155,   93,  156,
+           95,  156,  156,   98,  156,  156,  155,  156,  103,  104,
+          105,  156,  156,  156,  109,  110,  156,  156,  156,  156,
+          115,  116,  156,   74,  157,  157,  157,  157,  123,   80,
+           31,  157,  157,   84,  157,  157,   87,   88,   89,  157,
+           91,  157,   93,  157,   95,  157,  157,   98,  157,   50,
+           51,  157,  103,  104,  105,   56,  157,   58,  109,  110,
+          155,  156,  158,  157,  115,  116,  157,  157,  157,   70,
+          157,  157,  123,  157,   50,   51,  157,   78,   79,  157,
+           56,  157,   58,  157,  159,   86,  158,  158,  158,  158,
+          158,  158,  158,  158,   70,  158,  158,  158,  158,  158,
+          158,  158,   78,   79,  155,  156,  158,  160,  158,  163,
+           86,  159,  159,  159,  159,  159,  159,  159,  159,  159,
+          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
+           -1,   -1,  161,  134,  161,  136,  137,  138,  139,  140,
+          141,  142,  162,  162,  162,  162,  162,  148,  149,  162,
+          162,  162,  162,  162,  162,  162,  162,  158,  134,  162,
+          136,  137,  138,  139,  140,  141,  142,   -1,   -1,   -1,
+           -1,   -1,  148,  149,   -1,   -1,   -1,   -1,   -1,   -1,
+           -1,   -1,  158
     );
 
     protected $actionBase = array(
-            0,  226,  306,  385,  464,  285,  246,  246,  786,   -2,
-           -2,  146,   -2,   -2,   -2,  649,  723,  760,  723,  575,
-          686,  612,  612,  612,  175,  153,  153,  153,  174,  890,
-          319,   62,  450,  463,  557,  609,  636,  496,  496,  496,
-          496,  136,  136,  496,  496,  496,  496,  496,  496,  496,
-          496,  496,  496,  496,  496,  496,  496,  496,  496,  496,
-          496,  496,  496,  496,  496,  496,  496,  496,  496,  496,
-          496,  496,  496,  496,  496,  496,  496,  496,  496,  496,
-          496,  496,  496,  496,  496,  496,  496,  496,  496,  496,
-          496,  496,  496,  496,  496,  496,  496,  496,  496,  496,
-          496,  496,  496,  496,  496,  496,  496,  496,  496,  496,
-          496,  496,  496,  496,  496,  496,  496,  496,  496,  496,
-          496,  496,  496,  496,  496,  496,  496,  496,  496,  496,
-          496,  496,  496,  496,  496,  195,   75,  777,  517,  147,
-          778,  779,  780,  886,  727,  887,  832,  833,  682,  836,
-          837,  838,  839,  840,  831,  841,  907,  842,  591,  591,
-          591,  591,  591,  591,  591,  591,  591,  591,  591,  591,
-          483,  573,  365,  209,  281,  407,  646,  646,  646,  646,
-          646,  646,  646,  327,  327,  327,  327,  327,  327,  327,
-          327,  327,  327,  327,  327,  327,  327,  327,  327,  327,
-          327,  429,  834,  585,  585,  585,  563,  867,  867,  867,
-          867,  867,  867,  867,  867,  867,  867,  867,  867,  867,
-          867,  867,  867,  867,  867,  867,  867,  867,  867,  867,
-          867,  867,  867,  867,  867,  867,  867,  867,  867,  867,
-          867,  867,  867,  867,  867,  867,  867,  867,  867,  867,
-          495,  486,  -21,  -21,  415,  668,  335,  619,  222,  511,
-          213,   25,   25,   25,   25,   25,  148,   16,    4,    4,
-            4,    4,  151,  312,  312,  312,  312,  119,  119,  119,
-          119,  346,  346,  123,  245,  245,  349,  400,  297,  297,
-          297,  297,  297,  297,  297,  297,  297,  297,  111,  558,
-          558,  561,  561,  310,  152,  152,  152,  152,  704,  273,
-          273,  129,  371,  371,  371,  373,  734,  797,  376,  376,
-          376,  376,  376,  376,  468,  468,  468,  480,  480,  480,
-          702,  587,  454,  587,  454,  684,  748,  509,  748,  700,
-          199,  515,  803,  398,  720,  829,  729,  830,  601,  747,
-          235,  782,  724,  419,  782,  633,  637,  634,  419,  419,
-          715,   98,  863,  292,  195,  595,  405,  667,  781,  421,
-          732,  784,  363,  445,  411,  593,  328,  286,  744,  785,
-          888,  889,  181,  739,  667,  667,  667,  139,  362,  328,
-           -8,  613,  613,  613,  613,   48,  613,  613,  613,  613,
-          314,  230,  506,  404,  783,  703,  703,  712,  694,  852,
-          696,  696,  703,  711,  703,  712,  694,  854,  854,  854,
-          854,  703,  694,  703,  703,  703,  696,  696,  694,  709,
-          696,   38,  694,  695,  707,  707,  854,  751,  752,  703,
-          703,  728,  696,  696,  696,  728,  694,  854,  685,  746,
-          234,  696,  854,  665,  711,  665,  703,  685,  694,  665,
-          711,  711,  665,   21,  662,  664,  853,  855,  869,  792,
-          681,  716,  861,  862,  856,  860,  844,  679,  753,  754,
-          569,  669,  671,  673,  699,  740,  701,  735,  724,  692,
-          692,  692,  713,  741,  713,  692,  692,  692,  692,  692,
-          692,  692,  692,  893,  689,  745,  736,  710,  755,  589,
-          600,  793,  731,  738,  882,  875,  891,  892,  863,  880,
-          713,  894,  697,  180,  650,  864,  693,  788,  713,  865,
-          713,  794,  713,  883,  804,  708,  805,  806,  692,  884,
-          895,  896,  897,  898,  899,  900,  901,  902,  706,  903,
-          756,  698,  876,  339,  859,  715,  742,  725,  791,  759,
-          807,  342,  904,  808,  713,  713,  795,  787,  713,  796,
-          764,  750,  872,  766,  877,  905,  731,  726,  878,  713,
-          730,  809,  906,  342,  672,  705,  737,  721,  767,  870,
-          885,  868,  798,  655,  659,  810,  812,  820,  674,  769,
-          873,  874,  871,  771,  799,  670,  800,  719,  821,  801,
-          866,  772,  822,  823,  881,  718,  743,  717,  722,  714,
-          802,  824,  879,  773,  774,  775,  827,  776,  828,    0,
+            0,  227,  326,  400,  474,  233,  132,  132,  752,   -2,
+           -2,  138,   -2,   -2,   -2,  663,  761,  815,  761,  586,
+          717,  859,  859,  859,  244,  256,  256,  256,  413,  583,
+          583,  880,  546,  169,  415,  444,  409,  200,  200,  200,
+          200,  137,  137,  200,  200,  200,  200,  200,  200,  200,
+          200,  200,  200,  200,  200,  200,  200,  200,  200,  200,
+          200,  200,  200,  200,  200,  200,  200,  200,  200,  200,
+          200,  200,  200,  200,  200,  200,  200,  200,  200,  200,
+          200,  200,  200,  200,  200,  200,  200,  200,  200,  200,
+          200,  200,  200,  200,  200,  200,  200,  200,  200,  200,
+          200,  200,  200,  200,  200,  200,  200,  200,  200,  200,
+          200,  200,  200,  200,  200,  200,  200,  200,  200,  200,
+          200,  200,  200,  200,  200,  200,  200,  200,  200,  200,
+          200,  200,  200,  200,  200,  200,  249,  205,  738,  559,
+          535,  739,  741,  742,  876,  679,  877,  820,  821,  693,
+          823,  824,  826,  829,  832,  819,  834,  907,  836,  602,
+          602,  602,  602,  602,  602,  602,  602,  602,  602,  602,
+          602,   67,  536,  299,  510,  230,   44,  652,  652,  652,
+          652,  652,  652,  652,  337,  337,  337,  337,  337,  337,
+          337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+          337,  337,  378,  584,  584,  584,  657,  909,  648,  934,
+          934,  934,  934,  934,  934,  934,  934,  934,  934,  934,
+          934,  934,  934,  934,  934,  934,  934,  934,  934,  934,
+          934,  934,  934,  934,  934,  934,  934,  934,  934,  934,
+          934,  934,  934,  934,  934,  934,  934,  934,  934,  934,
+          934,  934,  934,  503,  -21,  -21,  436,  650,  364,  571,
+          215,  426,  156,   26,   26,  329,  329,  329,  329,  329,
+           46,   46,    5,    5,    5,    5,  152,  186,  186,  186,
+          186,  120,  120,  120,  120,  374,  374,  429,  448,  448,
+          334,  267,  449,  449,  449,  449,  449,  449,  449,  449,
+          449,  449,  336,  427,  427,  572,  572,  408,  551,  551,
+          551,  551,  671,  171,  171,  391,  311,  311,  311,  109,
+          641,  856,   68,   68,   68,   68,   68,   68,  324,  324,
+          324,   -3,   -3,   -3,  655,   77,  380,   77,  380,  683,
+          685,   86,  685,  654,  -15,  516,  776,  281,  646,  809,
+          680,  816,  560,  711,  202,  578,  857,  643,  -23,  578,
+          578,  578,  578,  857,  622,  628,  596,  -23,  578,  -23,
+          639,  454,  849,  351,  249,  558,  469,  631,  743,  514,
+          688,  746,  464,  544,  548,  556,    7,  412,  708,  750,
+          878,  879,  349,  702,  631,  631,  631,  327,  101,    7,
+           -8,  623,  623,  623,  623,  219,  623,  623,  623,  623,
+          291,  430,  545,  401,  745,  653,  653,  675,  839,  814,
+          814,  653,  673,  653,  675,  841,  841,  841,  841,  653,
+          653,  653,  653,  814,  814,  667,  814,  275,  684,  694,
+          694,  841,  713,  714,  653,  653,  697,  814,  814,  814,
+          697,  687,  841,  669,  637,  333,  814,  841,  689,  673,
+          689,  653,  669,  689,  673,  673,  689,   22,  686,  656,
+          840,  842,  860,  756,  638,  644,  847,  848,  843,  845,
+          838,  692,  719,  720,  528,  659,  660,  661,  662,  696,
+          664,  698,  643,  658,  658,  658,  645,  701,  645,  658,
+          658,  658,  658,  658,  658,  658,  658,  632,  635,  709,
+          699,  670,  723,  566,  582,  758,  640,  636,  872,  865,
+          881,  883,  849,  870,  645,  890,  634,  288,  610,  850,
+          633,  753,  645,  851,  645,  759,  645,  873,  777,  666,
+          778,  779,  658,  874,  891,  892,  893,  894,  897,  898,
+          899,  900,  665,  901,  724,  674,  866,  344,  844,  639,
+          705,  677,  755,  725,  780,  372,  902,  784,  645,  645,
+          765,  706,  645,  766,  726,  712,  862,  727,  867,  903,
+          640,  678,  868,  645,  681,  785,  904,  372,  690,  651,
+          704,  649,  728,  858,  875,  853,  767,  612,  617,  787,
+          788,  792,  691,  730,  863,  864,  835,  731,  770,  642,
+          771,  676,  794,  772,  852,  732,  796,  798,  871,  647,
+          707,  682,  672,  668,  773,  799,  869,  733,  735,  736,
+          801,  737,  804,    0,    0,    0,    0,    0,    0,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,  136,
-          136,  136,  136,   -2,   -2,   -2,   -2,    0,    0,   -2,
-            0,    0,    0,  136,  136,  136,  136,  136,  136,  136,
-          136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  136,  136,  136,  136,  136,  136,  136,  136,    0,
-            0,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  136,  136,  591,  591,  591,  591,  591,  591,  591,
-          591,  591,  591,  591,  591,  591,  591,  591,  591,  591,
-          591,  591,  591,  591,  591,  591,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,  591,  -21,
-          -21,  -21,  -21,  591,  -21,  -21,  -21,  -21,  -21,  -21,
-          -21,  591,  591,  591,  591,  591,  591,  591,  591,  591,
-          591,  591,  591,  591,  591,  591,  591,  591,  591,  -21,
-          376,  591,  591,  591,  -21,  376,  376,  376,  376,  376,
-          376,  376,  376,  376,  376,  376,  376,  376,  376,  376,
-          376,  376,  376,  376,  376,  376,  376,  376,  376,  376,
-          376,  376,  376,  376,  376,  376,  376,  376,  376,  376,
-          376,  376,  376,  376,  376,  376,  376,  376,  -21,  591,
-            0,    0,  591,  -21,  591,  -21,  591,  -21,  591,  591,
-          591,  591,  591,  591,  -21,  -21,  -21,  -21,  -21,  -21,
-            0,  468,  468,  468,  468,  -21,  -21,  -21,  -21,  376,
-          376,  -37,  376,  376,  376,  376,  376,  376,  376,  376,
-          376,  376,  376,  376,  376,  376,  376,  468,  468,  480,
-          480,  376,  376,  376,  376,  376,  -37,  376,  376,  419,
-          711,  711,  711,  454,  454,  454,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,  454,  419,
-            0,  419,    0,  376,  419,  711,  419,  454,  711,  711,
-          419,  696,  618,  618,  618,  618,  342,  328,    0,  711,
-          711,    0,  711,    0,    0,    0,    0,    0,  696,    0,
-          703,    0,    0,    0,    0,  692,  180,    0,  725,  427,
-            0,    0,    0,    0,    0,    0,  725,  427,  435,  435,
-            0,  706,  692,  692,  692,    0,    0,    0,    0,    0,
+            0,    0,    0,  137,  137,  137,  137,   -2,   -2,   -2,
+           -2,    0,    0,   -2,    0,    0,    0,  137,  137,  137,
+          137,  137,  137,  137,  137,  137,  137,  137,  137,  137,
+          137,  137,  137,  137,  137,  137,  137,  137,  137,  137,
+          137,  137,  137,    0,    0,  137,  137,  137,  137,  137,
+          137,  137,  137,  137,  137,  137,  137,  137,  137,  137,
+          137,  137,  137,  137,  137,  137,  137,  137,  137,  137,
+          137,  137,  137,  137,  137,  137,  137,  137,  137,  137,
+          137,  137,  137,  137,  137,  137,  137,  137,  137,  137,
+          137,  137,  137,  137,  137,  137,  137,  137,  137,  137,
+          137,  137,  137,  137,  137,  137,  137,  137,  137,  137,
+          137,  137,  137,  137,  137,  137,  137,  137,  137,  137,
+          137,  137,  137,  137,  137,  137,  137,  137,  137,  137,
+          137,  137,  137,  137,  137,  137,  137,  137,  602,  602,
+          602,  602,  602,  602,  602,  602,  602,  602,  602,  602,
+          602,  602,  602,  602,  602,  602,  602,  602,  602,  602,
+          602,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,  602,  -21,  -21,  -21,  -21,  602,  -21,
+          -21,  -21,  -21,  -21,  -21,  -21,  602,  602,  602,  602,
+          602,  602,  602,  602,  602,  602,  602,  602,  602,  602,
+          602,  602,  602,  602,  -21,  602,  602,  602,  -21,   68,
+          -21,   68,   68,   68,   68,   68,   68,   68,   68,   68,
+           68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
+           68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
+           68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
+           68,   68,   68,   68,   68,  602,    0,    0,  602,  -21,
+          602,  -21,  602,  -21,  -21,  602,  602,  602,  602,  602,
+          602,  602,  -21,  -21,  -21,  -21,  -21,  -21,    0,  324,
+          324,  324,  324,  -21,  -21,  -21,  -21,   68,   68,  147,
+           68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
+           68,   68,   68,   68,   68,  324,  324,   -3,   -3,   68,
+           68,   68,   68,   68,  147,   68,   68,  -23,  673,  673,
+          673,  380,  380,  380,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,  380,  -23,    0,  -23,
+            0,   68,  -23,  673,  -23,  380,  673,  673,  -23,  814,
+          604,  604,  604,  604,  372,    7,    0,    0,  673,  673,
+            0,    0,    0,    0,    0,  673,    0,    0,    0,    0,
+            0,    0,  814,    0,  653,    0,    0,    0,    0,  658,
+          288,    0,  677,  456,    0,    0,    0,    0,    0,    0,
+          677,  456,  530,  530,    0,  665,  658,  658,  658,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,  342
+            0,    0,    0,    0,    0,    0,  372
     );
 
     protected $actionDefault = array(
             3,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,  534,  534,  489,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,  293,  293,  293,
-        32767,32767,32767,  522,  522,  522,  522,  522,  522,  522,
-          522,  522,  522,  522,32767,32767,32767,32767,32767,32767,
-          376,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,  540,  540,  495,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,  297,  297,  297,
+        32767,32767,32767,  528,  528,  528,  528,  528,  528,  528,
+          528,  528,  528,  528,32767,32767,32767,32767,32767,32767,
+          381,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,32767,  382,  539,
+        32767,32767,32767,32767,32767,32767,32767,32767,32767,  387,
+          545,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,32767,32767,  362,
+          363,  365,  366,  296,  548,  529,  245,  388,  544,  295,
+          247,  325,  499,32767,32767,32767,  327,  122,  256,  201,
+          498,  125,  294,  232,  380,  382,  326,  301,  306,  307,
+          308,  309,  310,  311,  312,  313,  314,  315,  316,  317,
+          318,  300,  454,  359,  358,  357,  456,32767,  455,  492,
+          492,  495,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,32767,  357,  358,
-          360,  361,  292,  542,  523,  241,  383,  538,  291,  243,
-          321,  493,32767,32767,32767,  323,  120,  252,  197,  492,
-          123,  290,  228,  375,  377,  322,  297,  302,  303,  304,
-          305,  306,  307,  308,  309,  310,  311,  312,  313,  314,
-          296,  449,32767,  354,  353,  352,  451,  486,  486,  489,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,  323,  483,  482,  324,  452,  328,  453,
+          331,  457,  460,  329,  330,  347,  348,  345,  346,  349,
+          458,  459,  476,  477,  474,  475,  299,  350,  351,  352,
+          353,  478,  479,  480,  481,32767,32767,  280,  539,  539,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,  338,  339,  467,  468,32767,  236,  236,
+          236,  236,  281,  236,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,32767,  333,  334,
+          332,  462,  463,  461,  428,32767,32767,32767,  430,32767,
+        32767,32767,32767,32767,32767,32767,32767,  500,32767,32767,
+        32767,32767,32767,  513,  417,  171,32767,  409,32767,  171,
+          171,  171,  171,32767,  220,  222,  167,32767,  171,32767,
+          486,32767,32767,32767,32767,32767,  518,  343,32767,32767,
+          116,32767,32767,32767,  555,32767,  513,32767,  116,32767,
+        32767,32767,32767,  356,  335,  336,  337,32767,32767,  517,
+          511,  470,  471,  472,  473,32767,  464,  465,  466,  469,
+        32767,32767,32767,32767,32767,32767,32767,32767,  425,  431,
+          431,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,  516,  515,32767,  410,  494,  186,  184,
+          184,32767,  206,  206,32767,32767,  188,  487,  506,32767,
+          188,  173,32767,  398,  175,  494,32767,32767,  238,32767,
+          238,32767,  398,  238,32767,32767,  238,32767,  411,  435,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-          450,  319,  477,  476,  320,  447,  324,  448,  326,  452,
-          325,  342,  343,  340,  341,  344,  454,  453,  470,  471,
-          468,  469,  295,  345,  346,  347,  348,  472,  473,  474,
-          475,32767,32767,  276,  533,  533,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,  333,
-          334,  461,  462,32767,  232,  232,  232,  232,  277,  232,
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,  328,  329,  327,  456,  457,  455,
-          423,32767,32767,32767,  425,32767,32767,32767,32767,32767,
-        32767,32767,32767,  494,32767,32767,32767,32767,32767,  507,
-          412,32767,  404,32767,32767,  216,  218,  165,32767,32767,
-          480,32767,32767,32767,32767,32767,  512,  338,32767,32767,
-          114,32767,32767,32767,  549,32767,  507,32767,  114,32767,
-        32767,32767,32767,  351,  330,  331,  332,32767,32767,  511,
-          505,  464,  465,  466,  467,32767,  458,  459,  460,  463,
-        32767,32767,32767,32767,32767,32767,32767,32767,  169,  420,
-          426,  426,32767,32767,32767,32767,  169,32767,32767,32767,
-        32767,32767,  169,32767,32767,32767,  510,  509,  169,32767,
-          405,  488,  169,  182,  180,  180,32767,  202,  202,32767,
-        32767,  184,  481,  500,32767,  184,  169,32767,  393,  171,
-          488,32767,32767,  234,32767,  234,32767,  393,  169,  234,
-        32767,32767,  234,32767,  406,  430,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,  372,  373,  483,  496,32767,  497,32767,  404,  336,
-          337,  339,  316,32767,  318,  362,  363,  364,  365,  366,
-          367,  368,  370,32767,  410,32767,  413,32767,32767,32767,
-          251,32767,  547,32767,32767,  300,  547,32767,32767,32767,
-          541,32767,32767,  294,32767,32767,32767,32767,  247,32767,
-          167,32767,  531,32767,  548,32767,  505,32767,  335,32767,
-        32767,32767,32767,32767,32767,32767,32767,32767,  506,32767,
-        32767,32767,32767,  223,32767,  443,32767,  114,32767,32767,
-        32767,  183,32767,32767,  298,  242,32767,32767,  540,32767,
-        32767,32767,32767,32767,32767,32767,32767,  112,32767,  168,
-        32767,32767,32767,  185,32767,32767,  505,32767,32767,32767,
-        32767,32767,32767,32767,  289,32767,32767,32767,32767,32767,
-        32767,32767,  505,32767,32767,  227,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,  406,32767,  270,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,  125,
-          125,    3,  125,  125,  254,    3,  254,  125,  254,  254,
-          125,  125,  125,  125,  125,  125,  125,  125,  125,  125,
-          210,  213,  202,  202,  162,  125,  125,  262
+        32767,32767,32767,32767,32767,  377,  378,  489,  502,32767,
+          503,32767,  409,  341,  342,  344,  320,32767,  322,  367,
+          368,  369,  370,  371,  372,  373,  375,32767,  415,32767,
+          418,32767,32767,32767,  255,32767,  553,32767,32767,  304,
+          553,32767,32767,32767,  547,32767,32767,  298,32767,32767,
+        32767,32767,  251,32767,  169,32767,  537,32767,  554,32767,
+          511,32767,  340,32767,32767,32767,32767,32767,32767,32767,
+        32767,32767,  512,32767,32767,32767,32767,  227,32767,  448,
+        32767,  116,32767,32767,32767,  187,32767,32767,  302,  246,
+        32767,32767,  546,32767,32767,32767,32767,32767,32767,32767,
+        32767,  114,32767,  170,32767,32767,32767,  189,32767,32767,
+          511,32767,32767,32767,32767,32767,32767,32767,  293,32767,
+        32767,32767,32767,32767,32767,32767,  511,32767,32767,  231,
+        32767,32767,32767,32767,32767,32767,32767,32767,32767,  411,
+        32767,  274,32767,32767,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,  127,  127,    3,  127,  127,  258,    3,
+          258,  127,  258,  258,  127,  127,  127,  127,  127,  127,
+          127,  127,  127,  127,  214,  217,  206,  206,  164,  127,
+          127,  266
     );
 
     protected $goto = array(
-          165,  139,  139,  139,  165,  143,  146,  140,  141,  142,
-          148,  186,  167,  162,  162,  162,  162,  143,  143,  164,
-          164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
-          137,  158,  159,  160,  161,  183,  138,  184,  489,  490,
-          367,  491,  495,  496,  497,  498,  499,  500,  501,  502,
-          959,  163,  144,  145,  147,  170,  175,  185,  203,  251,
-          254,  256,  258,  260,  261,  262,  263,  264,  265,  273,
-          274,  275,  276,  299,  300,  324,  325,  326,  384,  385,
-          386,  538,  187,  188,  189,  190,  191,  192,  193,  194,
-          195,  196,  197,  198,  199,  200,  149,  150,  151,  166,
-          152,  168,  153,  204,  169,  154,  155,  156,  205,  157,
-          135,  616,  556,  574,  578,  622,  624,  556,  556,  556,
-          556,  556,  556,  556,  556,  556,  556,  556,  556,  556,
-          556,  556,  556,  556,  556,  556,  556,  556,  556,  556,
-          556,  556,  556,  556,  556,  556,  556,  556,  556,  556,
-          556,  556,  556,  556,  556,  556,  556,  556,  556,  556,
-         1099,  515,  345,  571,  600, 1099, 1099, 1099, 1099, 1099,
-         1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099,
-         1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099,
-         1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099,
-         1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099,  504, 1202,
-         1202, 1075, 1074,  504,  540,  541,  542,  543,  544,  545,
-          546,  547,  549,  582,    3,    4,  173, 1202,  844,  844,
-          844,  844,  839,  845,  176,  177,  178,  391,  392,  393,
-          394,  172,  201,  206,  250,  255,  257,  259,  266,  267,
-          268,  269,  270,  271,  277,  278,  279,  280,  301,  302,
-          327,  328,  329,  396,  397,  398,  399,  174,  179,  252,
-          253,  180,  181,  182,  493,  493,  750,  493,  493,  493,
-          493,  493,  493,  493,  493,  493,  493,  493,  493,  493,
-          493,  505,  929,  442,  444,  627,  505,  751,  779, 1100,
-          610,  927,  880,  880,  765, 1190, 1190, 1168,  555,  775,
-          764,  743, 1168,  555,  555,  555,  555,  555,  555,  555,
-          555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
-          555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
-          555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
-          555,  555,  555,  555,  555,  555,  390,  602,  746,  532,
-          532,  564,  528,  530,  530,  492,  494,  520,  536,  565,
-          568,  579,  586,  810,  606,  506,  346,  347,  609,  850,
-          506,  365,  537,  746,  533,  746,  563,  430,  430,  375,
-          430,  430,  430,  430,  430,  430,  430,  430,  430,  430,
-          430,  430,  430,  430, 1063,  581,  957,  596,  597, 1063,
-          887,  887,  887,  887, 1160,  887,  887, 1182, 1182, 1182,
-          376,  376,  376,  749, 1063, 1063, 1063, 1063, 1063, 1063,
-          334, 1056,  317,  374,  374,  374,  866,  848,  846,  848,
-          650,  461,  507,  875,  870,  376, 1194,  368,  374,  389,
-          374,  898,  374, 1080,  583,  348,  404,  374, 1216,  590,
-          601, 1017,   19,   15,  361, 1148, 1187,  525,  936,  904,
-          510,  526,  904,  651,  551,  381, 1201, 1201,  587, 1007,
-          550,  877,  607,  608,  873,  612,  613,  619,  621,  626,
-          628,   23,  884,  937, 1201,  336,  598, 1059, 1060, 1204,
-          378, 1056,  557,  539,  893,  768,  766,  379,  514,  902,
-          509,  524,  655, 1057, 1159, 1057,  776,  509, 1167,  524,
-          514,  514, 1058, 1167, 1049,  907,  508, 1054,  511,  433,
-          434,  510, 1184, 1184, 1184,  854,  445,  945,  569, 1145,
-          459,  362,    0,    0,  773, 1209,    0,  518,    0,  519,
-            0,  529,    0,    0,    0,    0,    0, 1166,    0,    0,
-            0,  771,    0,    0,    0,  449,    0,    0,    0,    0,
-            0,    0,  605,    0,    0,    0,    0,   13, 1055,  614
+          166,  140,  140,  140,  166,  187,  168,  144,  147,  141,
+          142,  143,  149,  163,  163,  163,  163,  144,  144,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          138,  159,  160,  161,  162,  184,  139,  185,  493,  494,
+          377,  495,  499,  500,  501,  502,  503,  504,  505,  506,
+          967,  164,  145,  146,  148,  171,  176,  186,  203,  253,
+          256,  258,  260,  263,  264,  265,  266,  267,  268,  269,
+          277,  278,  279,  280,  303,  304,  328,  329,  330,  394,
+          395,  396,  542,  188,  189,  190,  191,  192,  193,  194,
+          195,  196,  197,  198,  199,  200,  201,  150,  151,  152,
+          167,  153,  169,  154,  204,  170,  155,  156,  157,  205,
+          158,  136,  620,  560,  756,  560,  560,  560,  560,  560,
+          560,  560,  560,  560,  560,  560,  560,  560,  560,  560,
+          560,  560,  560,  560,  560,  560,  560,  560,  560,  560,
+          560,  560,  560,  560,  560,  560,  560,  560,  560,  560,
+          560,  560,  560,  560,  560,  560,  560,  560,  560, 1108,
+          628, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
+         1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
+         1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
+         1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
+         1108, 1108, 1108, 1108, 1108,  757,  888,  888,  508, 1200,
+         1200,  400,  606,  508,  536,  536,  568,  532,  534,  534,
+          496,  498,  524,  540,  569,  572,  583,  590,  852,  852,
+          852,  852,  847,  853,  174,  585,  519,  600,  601,  177,
+          178,  179,  401,  402,  403,  404,  173,  202,  206,  208,
+          257,  259,  261,  262,  270,  271,  272,  273,  274,  275,
+          281,  282,  283,  284,  305,  306,  331,  332,  333,  406,
+          407,  408,  409,  175,  180,  254,  255,  181,  182,  183,
+          497,  497,  785,  497,  497,  497,  497,  497,  497,  497,
+          497,  497,  497,  497,  497,  497,  497,  509,  578,  582,
+          626,  749,  509,  544,  545,  546,  547,  548,  549,  550,
+          551,  553,  586,  338,  559,  321,  559,  559,  559,  559,
+          559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
+          559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
+          559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
+          559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
+          530,  349,  655,  555,  587,  352,  414,  591,  575,  604,
+          885,  611,  612,  881,  616,  617,  623,  625,  630,  632,
+          298,  296,  296,  296,  298,  290,  299,  944,  610,  816,
+         1170,  613,  436,  436,  375,  436,  436,  436,  436,  436,
+          436,  436,  436,  436,  436,  436,  436,  436,  436, 1072,
+         1084, 1083,  945, 1065, 1072,  895,  895,  895,  895, 1178,
+          895,  895, 1212, 1212, 1178,  388,  858,  561,  755, 1072,
+         1072, 1072, 1072, 1072, 1072,    3,    4,  384,  384,  384,
+         1212,  874,  856,  854,  856,  654,  465,  511,  883,  878,
+         1089,  541,  384,  537,  384,  567,  384, 1026,   19,   15,
+          371,  384, 1226,  510, 1204, 1192, 1192, 1192,  510,  906,
+          372,  522,  533,  554,  912,  514, 1068, 1069,   13, 1065,
+          378,  912, 1158,  594,   23,  965,  386,  386,  386,  602,
+         1066, 1169, 1066,  937,  447,  449,  631,  752, 1177, 1067,
+         1109,  614,  935, 1177,  605, 1197,  391, 1211, 1211,  543,
+          892,  386, 1194, 1194, 1194,  399,  518, 1016,  901,  389,
+          771,  529,  752,  340,  752, 1211,  518,  518,  385,  781,
+         1214,  770,  772, 1063,  910,  774, 1058, 1176,  659,  953,
+          514,  782,  862,  915,  450,  573, 1155,    0,  463,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,    0,  513,  528,    0,    0,    0,    0,
+          513,    0,  528,    0,  350,  351,    0,  609,  512,  515,
+          438,  439, 1064,  618,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,  779, 1219,    0,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+          777,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+          523,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,  301,  301
     );
 
     protected $gotoCheck = array(
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-           42,   56,   66,   59,   59,   59,    8,   66,   66,   66,
-           66,   66,   66,   66,   66,   66,   66,   66,   66,   66,
-           66,   66,   66,   66,   66,   66,   66,   66,   66,   66,
-           66,   66,   66,   66,   66,   66,   66,   66,   66,   66,
-           66,   66,   66,   66,   66,   66,   66,   66,   66,   66,
-          124,   99,   69,   39,   39,  124,  124,  124,  124,  124,
-          124,  124,  124,  124,  124,  124,  124,  124,  124,  124,
-          124,  124,  124,  124,  124,  124,  124,  124,  124,  124,
-          124,  124,  124,  124,  124,  124,  124,  124,  124,  124,
-          124,  124,  124,  124,  124,  124,  124,  124,   66,  140,
-          140,  122,  122,   66,  108,  108,  108,  108,  108,  108,
-          108,  108,  108,  108,   29,   29,   26,  140,   66,   66,
-           66,   66,   66,   66,   26,   26,   26,   26,   26,   26,
-           26,   26,   26,   26,   26,   26,   26,   26,   26,   26,
-           26,   26,   26,   26,   26,   26,   26,   26,   26,   26,
-           26,   26,   26,   26,   26,   26,   26,   26,   26,   26,
-           26,   26,   26,   26,  115,  115,   14,  115,  115,  115,
-          115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
-          115,  115,    7,    7,    7,    7,  115,   15,   28,    7,
-            7,    7,   74,   74,   22,   74,   74,  116,   56,   22,
-           22,    5,  116,   56,   56,   56,   56,   56,   56,   56,
-           56,   56,   56,   56,   56,   56,   56,   56,   56,   56,
-           56,   56,   56,   56,   56,   56,   56,   56,   56,   56,
-           56,   56,   56,   56,   56,   56,   56,   56,   56,   56,
-           56,   56,   56,   56,   56,   56,   50,   50,   10,   50,
-           50,   50,   50,   50,   50,   50,   50,   50,   50,   50,
-           50,   50,   50,   49,   60,  120,   69,   69,   60,   32,
-          120,   60,    2,   10,  107,   10,    2,   56,   56,   10,
-           56,   56,   56,   56,   56,   56,   56,   56,   56,   56,
-           56,   56,   56,   56,   56,   64,   99,   64,   64,   56,
-           56,   56,   56,   56,   79,   56,   56,    8,    8,    8,
-          121,  121,  121,   13,   56,   56,   56,   56,   56,   56,
-          123,   79,  123,   12,   12,   12,   13,   13,   13,   13,
-           13,   56,   13,   13,   13,  121,  138,   45,   12,  121,
-           12,   81,   12,   33,   67,   67,   67,   12,   12,  125,
-           48,   33,   33,   33,   33,  129,  136,    8,   95,   12,
-           12,   31,   12,   31,   31,   47,  139,  139,   31,  100,
-           33,   31,   31,   31,   31,   31,   31,   31,   31,   31,
-           31,   33,   76,   95,  139,   17,   33,   79,   79,  139,
-           11,   79,   11,   46,   78,   24,   23,   16,   46,   82,
-            8,    8,   71,   79,   79,   79,   25,    8,  117,    8,
-           46,   46,   79,  117,  111,   83,    8,  113,    8,    8,
-            8,   12,  117,  117,  117,   68,   62,   97,   63,  128,
-          106,   57,   -1,   -1,    8,    8,   -1,   57,   -1,   99,
-           -1,   57,   -1,   -1,   -1,   -1,   -1,  117,   -1,   -1,
-           -1,    8,   -1,   -1,   -1,   57,   -1,   -1,   -1,   -1,
-           -1,   -1,   12,   -1,   -1,   -1,   -1,   57,   12,   12
+           43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
+           43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
+           43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
+           43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
+           43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
+           43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
+           43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
+           43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
+           43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
+           43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
+           43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
+           43,   43,   57,   68,   15,   68,   68,   68,   68,   68,
+           68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
+           68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
+           68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
+           68,   68,   68,   68,   68,   68,   68,   68,   68,  126,
+            9,  126,  126,  126,  126,  126,  126,  126,  126,  126,
+          126,  126,  126,  126,  126,  126,  126,  126,  126,  126,
+          126,  126,  126,  126,  126,  126,  126,  126,  126,  126,
+          126,  126,  126,  126,  126,  126,  126,  126,  126,  126,
+          126,  126,  126,  126,  126,   16,   76,   76,   68,   76,
+           76,   51,   51,   68,   51,   51,   51,   51,   51,   51,
+           51,   51,   51,   51,   51,   51,   51,   51,   68,   68,
+           68,   68,   68,   68,   27,   66,  101,   66,   66,   27,
+           27,   27,   27,   27,   27,   27,   27,   27,   27,   27,
+           27,   27,   27,   27,   27,   27,   27,   27,   27,   27,
+           27,   27,   27,   27,   27,   27,   27,   27,   27,   27,
+           27,   27,   27,   27,   27,   27,   27,   27,   27,   27,
+          117,  117,   29,  117,  117,  117,  117,  117,  117,  117,
+          117,  117,  117,  117,  117,  117,  117,  117,   61,   61,
+           61,    6,  117,  110,  110,  110,  110,  110,  110,  110,
+          110,  110,  110,  125,   57,  125,   57,   57,   57,   57,
+           57,   57,   57,   57,   57,   57,   57,   57,   57,   57,
+           57,   57,   57,   57,   57,   57,   57,   57,   57,   57,
+           57,   57,   57,   57,   57,   57,   57,   57,   57,   57,
+           57,   57,   57,   57,   57,   57,   57,   57,   57,   57,
+           32,   71,   32,   32,   69,   69,   69,   32,   40,   40,
+           32,   32,   32,   32,   32,   32,   32,   32,   32,   32,
+            5,    5,    5,    5,    5,    5,    5,   97,   62,   50,
+           81,   62,   57,   57,   62,   57,   57,   57,   57,   57,
+           57,   57,   57,   57,   57,   57,   57,   57,   57,   57,
+          124,  124,   97,   81,   57,   57,   57,   57,   57,  118,
+           57,   57,  142,  142,  118,   12,   33,   12,   14,   57,
+           57,   57,   57,   57,   57,   30,   30,   13,   13,   13,
+          142,   14,   14,   14,   14,   14,   57,   14,   14,   14,
+           34,    2,   13,  109,   13,    2,   13,   34,   34,   34,
+           34,   13,   13,  122,  140,    9,    9,    9,  122,   83,
+           58,   58,   58,   34,   13,   13,   81,   81,   58,   81,
+           46,   13,  131,  127,   34,  101,  123,  123,  123,   34,
+           81,   81,   81,    8,    8,    8,    8,   11,  119,   81,
+            8,    8,    8,  119,   49,  138,   48,  141,  141,   47,
+           78,  123,  119,  119,  119,  123,   47,  102,   80,   17,
+           23,    9,   11,   18,   11,  141,   47,   47,   11,   23,
+          141,   23,   24,  115,   84,   25,  113,  119,   73,   99,
+           13,   26,   70,   85,   64,   65,  130,   -1,  108,   -1,
+           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+           -1,   -1,   -1,   -1,    9,    9,   -1,   -1,   -1,   -1,
+            9,   -1,    9,   -1,   71,   71,   -1,   13,    9,    9,
+            9,    9,   13,   13,   -1,   -1,   -1,   -1,   -1,   -1,
+           -1,   -1,   -1,    9,    9,   -1,   -1,   -1,   -1,   -1,
+           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+            9,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+          101,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+           -1,    5,    5
     );
 
     protected $gotoBase = array(
-            0,    0, -249,    0,    0,  300,    0,  287,  105,    0,
-           47,  164,  118,  421,  274,  295,  171,  184,    0,    0,
-            0,    0,  -49,  168,  172,  104,   24,    0,  288, -431,
-            0, -159,  359,   44,    0,    0,    0,    0,    0,  125,
-            0,    0,  -24,    0,    0,  407,  479,  186,  178,  355,
-           75,    0,    0,    0,    0,    0,  106,  119,    0, -192,
-          -81,    0,  101,   93, -231,    0,  -90,  135,  121, -276,
-            0,  148,    0,    0,   21,    0,  183,    0,  194,   71,
-            0,  423,  155,  112,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,  185,    0,  122,    0,  120,
-          176,    0,    0,    0,    0,    0,   83,  358,  170,    0,
-            0,  113,    0,  111,    0,   -7,    9,  220,    0,    0,
-           77,  108, -102,  100,  -42,  251,    0,    0,   89,  256,
-            0,    0,    0,    0,    0,    0,  181,    0,  419,  160,
-         -107,    0,    0
+            0,    0, -184,    0,    0,  356,  290,    0,  488,  149,
+            0,  182,   85,  118,  426,  112,  203,  179,  208,    0,
+            0,    0,    0,  162,  190,  198,  120,   27,    0,  272,
+         -224,    0, -274,  406,   32,    0,    0,    0,    0,    0,
+          330,    0,    0,  -24,    0,    0,  440,  485,  213,  218,
+          371,  -74,    0,    0,    0,    0,    0,  107,  110,    0,
+            0,  -11,  -72,    0,  104,   95, -405,    0,  -94,   41,
+          119,  -82,    0,  164,    0,    0,  -79,    0,  197,    0,
+          204,   43,    0,  441,  171,  121,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,  100,    0,  115,
+            0,  195,  210,    0,    0,    0,    0,    0,   86,  427,
+          259,    0,    0,  116,    0,  174,    0,   -5,  117,  196,
+            0,    0,  161,  170,   93,  -21,  -48,  273,    0,    0,
+           91,  271,    0,    0,    0,    0,    0,    0,  216,    0,
+          437,  187,  102,    0,    0
     );
 
     protected $gotoDefault = array(
-        -32768,  463,  659,    2,  660,  733,  741,  593,  477,  625,
-          577,  370, 1178,  785,  786,  787,  371,  358,  478,  369,
-          400,  395,  774,  767,  769,  777,  171,  401,  780,    1,
-          782,  513,  818, 1008,  355,  790,  356,  585,  792,  522,
-          794,  795,  136,  372,  373,  523,  479,  380,  572,  809,
-          272,  377,  811,  357,  812,  821,  360,  460,  454,  552,
-          604,  425,  441,  566,  560,  531, 1072,  561,  853,  344,
-          861,  656,  869,  872,  480,  553,  883,  446,  891, 1085,
-          387,  897,  903,  908,  283,  911,  407,  402,  580,  916,
-          917,    5,  921,  617,  618,    8,  308,  944,  594,  958,
-          411, 1027, 1029,  481,  482,  517,  453,  503,  521,  483,
-         1050,  435,  403, 1053,  484,  485,  426,  427, 1069,  350,
-         1153,  349,  443,  316, 1140,  575, 1104,  450, 1193, 1149,
-          343,  486,  487,  366, 1172,  382, 1188,  431, 1195, 1203,
-          339,  535,  562
+        -32768,  467,  663,    2,  664,  834,  739,  747,  597,  481,
+          629,  581,  380, 1188,  791,  792,  793,  381,  367,  482,
+          379,  410,  405,  780,  773,  775,  783,  172,  411,  786,
+            1,  788,  517,  824, 1017,  364,  796,  365,  589,  798,
+          526,  800,  801,  137,  382,  383,  527,  483,  390,  576,
+          815,  276,  387,  817,  366,  818,  827,  370,  464,  454,
+          459,  556,  608,  432,  446,  570,  564,  535, 1081,  565,
+          861,  348,  869,  660,  877,  880,  484,  557,  891,  451,
+          899, 1094,  397,  905,  911,  916,  287,  919,  417,  412,
+          584,  924,  925,    5,  929,  621,  622,    8,  312,  952,
+          598,  966,  420, 1036, 1038,  485,  486,  521,  458,  507,
+          525,  487, 1059,  440,  413, 1062,  488,  489,  433,  434,
+         1078,  354, 1163,  353,  448,  320, 1150,  579, 1113,  455,
+         1203, 1159,  347,  490,  491,  376, 1182,  392, 1198,  437,
+         1205, 1213,  343,  539,  566
     );
 
     protected $ruleToNonTerminal = array(
-            0,    1,    3,    3,    2,    5,    5,    5,    5,    5,
-            5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-            5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-            5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-            5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-            5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-            5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-            5,    5,    5,    5,    5,    6,    6,    6,    6,    6,
-            6,    6,    7,    7,    8,    9,   10,   10,   11,   11,
-           12,    4,    4,    4,    4,    4,    4,    4,    4,    4,
-            4,    4,   17,   17,   18,   18,   20,   20,   16,   16,
-           21,   21,   22,   22,   23,   23,   24,   24,   19,   19,
-           25,   27,   27,   28,   29,   29,   31,   30,   30,   30,
-           30,   32,   32,   32,   32,   32,   32,   32,   32,   32,
-           32,   32,   32,   32,   32,   32,   32,   32,   32,   32,
-           32,   32,   32,   32,   32,   32,   32,   32,   32,   32,
-           13,   13,   53,   53,   55,   54,   54,   47,   47,   57,
-           57,   58,   58,   14,   15,   15,   15,   61,   61,   61,
-           62,   62,   65,   65,   63,   63,   67,   67,   40,   40,
-           49,   49,   52,   52,   52,   51,   51,   68,   41,   41,
-           41,   41,   69,   69,   70,   70,   71,   71,   38,   38,
-           34,   34,   72,   36,   36,   73,   35,   35,   37,   37,
-           48,   48,   48,   59,   59,   75,   75,   76,   76,   78,
-           78,   78,   77,   77,   60,   60,   79,   79,   79,   80,
-           80,   81,   81,   81,   43,   43,   82,   82,   82,   44,
-           44,   83,   83,   84,   84,   64,   85,   85,   85,   85,
-           90,   90,   91,   91,   92,   92,   92,   92,   92,   93,
-           94,   94,   89,   89,   86,   86,   88,   88,   96,   96,
-           95,   95,   95,   95,   95,   95,   87,   87,   98,   97,
-           97,   45,   45,   39,   39,   42,   42,   42,   42,   42,
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-           33,   33,   46,   46,  103,  103,  104,  104,  104,  104,
-          110,   99,   99,  106,  106,  112,  112,  113,  114,  114,
-          114,  114,  114,  114,   66,   66,   56,   56,   56,   56,
-          100,  100,  118,  118,  115,  115,  119,  119,  119,  119,
-          101,  101,  101,  105,  105,  105,  111,  111,  124,  124,
-          124,  124,  124,  124,  124,  124,  124,  124,  124,  124,
-          124,   26,   26,   26,   26,   26,   26,  126,  126,  126,
-          126,  126,  126,  126,  126,  126,  126,  126,  126,  126,
-          126,  126,  126,  126,  126,  126,  126,  126,  126,  126,
-          126,  126,  126,  126,  126,  126,  126,  126,  126,  126,
-          109,  109,  102,  102,  102,  102,  125,  125,  128,  128,
-          127,  127,  129,  129,   50,   50,   50,   50,  131,  131,
-          130,  130,  130,  130,  130,  132,  132,  117,  117,  120,
-          120,  116,  116,  134,  133,  133,  133,  133,  121,  121,
-          121,  121,  108,  108,  122,  122,  122,  122,   74,  135,
-          135,  136,  136,  136,  107,  107,  137,  137,  138,  138,
-          138,  138,  138,  123,  123,  123,  123,  140,  141,  139,
-          139,  139,  139,  139,  139,  139,  142,  142,  142
+            0,    1,    3,    3,    2,    5,    5,    6,    6,    6,
+            6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
+            6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
+            6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
+            6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
+            6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
+            6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
+            6,    6,    6,    6,    6,    6,    6,    7,    7,    7,
+            7,    7,    7,    7,    8,    8,    9,   10,   11,   11,
+           12,   12,   13,    4,    4,    4,    4,    4,    4,    4,
+            4,    4,    4,    4,   18,   18,   19,   19,   21,   21,
+           17,   17,   22,   22,   23,   23,   24,   24,   25,   25,
+           20,   20,   26,   28,   28,   29,   30,   30,   32,   31,
+           31,   31,   31,   33,   33,   33,   33,   33,   33,   33,
+           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
+           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
+           33,   33,   14,   14,   54,   54,   56,   55,   55,   48,
+           48,   58,   58,   59,   59,   60,   60,   15,   16,   16,
+           16,   63,   63,   63,   64,   64,   67,   67,   65,   65,
+           69,   69,   41,   41,   50,   50,   53,   53,   53,   52,
+           52,   70,   42,   42,   42,   42,   71,   71,   72,   72,
+           73,   73,   39,   39,   35,   35,   74,   37,   37,   75,
+           36,   36,   38,   38,   49,   49,   49,   61,   61,   77,
+           77,   78,   78,   80,   80,   80,   79,   79,   62,   62,
+           81,   81,   81,   82,   82,   83,   83,   83,   44,   44,
+           84,   84,   84,   45,   45,   85,   85,   86,   86,   66,
+           87,   87,   87,   87,   92,   92,   93,   93,   94,   94,
+           94,   94,   94,   95,   96,   96,   91,   91,   88,   88,
+           90,   90,   98,   98,   97,   97,   97,   97,   97,   97,
+           89,   89,  100,   99,   99,   46,   46,   40,   40,   43,
+           43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
+           43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
+           43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
+           43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
+           43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
+           43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
+           43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
+           43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
+           43,   43,   43,   43,   43,   34,   34,   47,   47,  105,
+          105,  106,  106,  106,  106,  112,  101,  101,  108,  108,
+          114,  114,  115,  116,  116,  116,  116,  116,  116,   68,
+           68,   57,   57,   57,   57,  102,  102,  120,  120,  117,
+          117,  121,  121,  121,  121,  103,  103,  103,  107,  107,
+          107,  113,  113,  126,  126,  126,  126,  126,  126,  126,
+          126,  126,  126,  126,  126,  126,   27,   27,   27,   27,
+           27,   27,  128,  128,  128,  128,  128,  128,  128,  128,
+          128,  128,  128,  128,  128,  128,  128,  128,  128,  128,
+          128,  128,  128,  128,  128,  128,  128,  128,  128,  128,
+          128,  128,  128,  128,  128,  128,  111,  111,  104,  104,
+          104,  104,  127,  127,  130,  130,  129,  129,  131,  131,
+           51,   51,   51,   51,  133,  133,  132,  132,  132,  132,
+          132,  134,  134,  119,  119,  122,  122,  118,  118,  136,
+          135,  135,  135,  135,  123,  123,  123,  123,  110,  110,
+          124,  124,  124,  124,   76,  137,  137,  138,  138,  138,
+          109,  109,  139,  139,  140,  140,  140,  140,  140,  125,
+          125,  125,  125,  142,  143,  141,  141,  141,  141,  141,
+          141,  141,  144,  144,  144
     );
 
     protected $ruleToLength = array(
@@ -867,53 +891,54 @@ class Php5 extends \PhpParser\ParserAbstract
             1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
             1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
             1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-            1,    1,    1,    1,    1,    3,    5,    4,    3,    4,
-            2,    3,    1,    1,    7,    6,    3,    1,    3,    1,
-            3,    1,    1,    3,    1,    3,    1,    2,    3,    1,
-            3,    3,    1,    3,    2,    0,    1,    1,    1,    1,
-            1,    3,    5,    8,    3,    5,    9,    3,    2,    3,
-            2,    3,    2,    3,    3,    3,    3,    1,    2,    2,
-            5,    7,    9,    5,    6,    3,    3,    2,    2,    1,
-            1,    1,    0,    2,    8,    0,    4,    1,    3,    0,
-            1,    0,    1,   10,    7,    6,    5,    1,    2,    2,
-            0,    2,    0,    2,    0,    2,    1,    3,    1,    4,
-            1,    4,    1,    1,    4,    1,    3,    3,    3,    4,
-            4,    5,    0,    2,    4,    3,    1,    1,    1,    4,
-            0,    2,    3,    0,    2,    4,    0,    2,    0,    3,
-            1,    2,    1,    1,    0,    1,    3,    4,    6,    1,
-            1,    1,    0,    1,    0,    2,    2,    3,    3,    1,
-            3,    1,    2,    2,    3,    1,    1,    2,    4,    3,
-            1,    1,    3,    2,    0,    1,    3,    3,    9,    3,
-            1,    3,    0,    2,    4,    5,    4,    4,    4,    3,
-            1,    1,    1,    3,    1,    1,    0,    1,    1,    2,
-            1,    1,    1,    1,    1,    1,    1,    3,    1,    1,
-            3,    3,    1,    0,    1,    1,    3,    3,    4,    4,
-            1,    2,    3,    3,    3,    3,    3,    3,    3,    3,
-            3,    3,    3,    3,    3,    2,    2,    2,    2,    3,
+            1,    1,    1,    1,    1,    1,    1,    3,    5,    4,
+            3,    4,    2,    3,    1,    1,    7,    6,    3,    1,
+            3,    1,    3,    1,    1,    3,    1,    3,    1,    2,
+            3,    1,    3,    3,    1,    3,    2,    0,    1,    1,
+            1,    1,    1,    3,    5,    8,    3,    5,    9,    3,
+            2,    3,    2,    3,    2,    3,    3,    3,    3,    1,
+            2,    2,    5,    7,    9,    5,    6,    3,    3,    2,
+            2,    1,    1,    1,    0,    2,    8,    0,    4,    1,
+            3,    0,    1,    0,    1,    0,    1,   10,    7,    6,
+            5,    1,    2,    2,    0,    2,    0,    2,    0,    2,
+            1,    3,    1,    4,    1,    4,    1,    1,    4,    1,
+            3,    3,    3,    4,    4,    5,    0,    2,    4,    3,
+            1,    1,    1,    4,    0,    2,    3,    0,    2,    4,
+            0,    2,    0,    3,    1,    2,    1,    1,    0,    1,
+            3,    4,    6,    1,    1,    1,    0,    1,    0,    2,
+            2,    3,    3,    1,    3,    1,    2,    2,    3,    1,
+            1,    2,    4,    3,    1,    1,    3,    2,    0,    1,
+            3,    3,    9,    3,    1,    3,    0,    2,    4,    5,
+            4,    4,    4,    3,    1,    1,    1,    3,    1,    1,
+            0,    1,    1,    2,    1,    1,    1,    1,    1,    1,
+            1,    3,    1,    1,    3,    3,    1,    0,    1,    1,
+            3,    3,    4,    4,    1,    2,    3,    3,    3,    3,
+            3,    3,    3,    3,    3,    3,    3,    3,    3,    2,
+            2,    2,    2,    3,    3,    3,    3,    3,    3,    3,
             3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
-            3,    3,    3,    3,    3,    3,    2,    2,    2,    2,
-            3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
-            1,    3,    5,    4,    3,    4,    4,    2,    2,    2,
-            2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
-            2,    1,    1,    1,    3,    2,    1,    2,   10,   11,
-            3,    3,    2,    4,    4,    3,    4,    4,    4,    4,
-            7,    3,    2,    0,    4,    1,    3,    2,    2,    4,
-            6,    2,    2,    4,    1,    1,    1,    1,    1,    1,
-            1,    1,    1,    1,    1,    1,    3,    3,    4,    4,
-            0,    2,    1,    0,    1,    1,    0,    1,    1,    1,
-            1,    1,    1,    1,    1,    1,    1,    1,    1,    3,
-            2,    1,    3,    1,    4,    3,    1,    3,    3,    3,
+            3,    2,    2,    2,    2,    3,    3,    3,    3,    3,
+            3,    3,    3,    3,    3,    1,    3,    5,    4,    3,
+            4,    4,    2,    2,    2,    2,    2,    2,    2,    2,
+            2,    2,    2,    2,    2,    2,    1,    1,    1,    3,
+            2,    1,    2,   10,   11,    3,    3,    2,    4,    4,
+            3,    4,    4,    4,    4,    7,    3,    2,    0,    4,
+            1,    3,    2,    2,    4,    6,    2,    2,    4,    1,
+            1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+            1,    3,    3,    4,    4,    0,    2,    1,    0,    1,
+            1,    0,    1,    1,    1,    1,    1,    1,    1,    1,
+            1,    1,    1,    1,    3,    2,    1,    3,    1,    4,
+            3,    1,    3,    3,    3,    3,    3,    3,    3,    3,
             3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
-            3,    3,    3,    3,    2,    2,    2,    2,    3,    3,
-            3,    3,    3,    3,    3,    3,    5,    4,    4,    3,
-            1,    3,    1,    1,    3,    3,    0,    2,    0,    1,
-            3,    1,    3,    1,    1,    1,    1,    1,    6,    4,
-            3,    4,    2,    4,    4,    1,    3,    1,    2,    1,
-            1,    4,    1,    1,    3,    6,    4,    4,    4,    4,
-            1,    4,    0,    1,    1,    3,    1,    1,    4,    3,
-            1,    1,    1,    0,    0,    2,    3,    1,    3,    1,
-            4,    2,    2,    2,    2,    1,    2,    1,    1,    1,
-            4,    3,    3,    3,    6,    3,    1,    1,    1
+            2,    2,    2,    2,    3,    3,    3,    3,    3,    3,
+            3,    3,    5,    4,    4,    3,    1,    3,    1,    1,
+            3,    3,    0,    2,    0,    1,    3,    1,    3,    1,
+            1,    1,    1,    1,    6,    4,    3,    4,    2,    4,
+            4,    1,    3,    1,    2,    1,    1,    4,    1,    1,
+            3,    6,    4,    4,    4,    4,    1,    4,    0,    1,
+            1,    3,    1,    1,    4,    3,    1,    1,    1,    0,
+            0,    2,    3,    1,    3,    1,    4,    2,    2,    2,
+            2,    1,    2,    1,    1,    1,    4,    3,    3,    3,
+            6,    3,    1,    1,    1
     );
 
     protected function initReduceCallbacks() {
@@ -1166,10 +1191,10 @@ protected function initReduceCallbacks() {
                 $this->semValue = $this->semStack[$stackPos];
             },
             82 => function ($stackPos) {
-                 $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                $this->semValue = $this->semStack[$stackPos];
             },
             83 => function ($stackPos) {
-                 $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                $this->semValue = $this->semStack[$stackPos];
             },
             84 => function ($stackPos) {
                  $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
@@ -1178,76 +1203,76 @@ protected function initReduceCallbacks() {
                  $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             86 => function ($stackPos) {
-                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             87 => function ($stackPos) {
-                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             88 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             89 => function ($stackPos) {
-                 $this->semValue = new Name(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             90 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             91 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Name(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             92 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\Variable(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             93 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             94 => function ($stackPos) {
-                 $this->semValue = new Stmt\HaltCompiler($this->lexer->handleHaltCompiler(), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             95 => function ($stackPos) {
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+            },
+            96 => function ($stackPos) {
+                 $this->semValue = new Stmt\HaltCompiler($this->lexer->handleHaltCompiler(), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            97 => function ($stackPos) {
                  $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos-(3-2)], null, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_SEMICOLON);
             $this->checkNamespace($this->semValue);
             },
-            96 => function ($stackPos) {
+            98 => function ($stackPos) {
                  $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos-(5-2)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED);
             $this->checkNamespace($this->semValue);
             },
-            97 => function ($stackPos) {
+            99 => function ($stackPos) {
                  $this->semValue = new Stmt\Namespace_(null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED);
             $this->checkNamespace($this->semValue);
             },
-            98 => function ($stackPos) {
-                 $this->semValue = new Stmt\Use_($this->semStack[$stackPos-(3-2)], Stmt\Use_::TYPE_NORMAL, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
-            },
-            99 => function ($stackPos) {
-                 $this->semValue = new Stmt\Use_($this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
-            },
             100 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Stmt\Use_($this->semStack[$stackPos-(3-2)], Stmt\Use_::TYPE_NORMAL, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             101 => function ($stackPos) {
-                 $this->semValue = new Stmt\Const_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\Use_($this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             102 => function ($stackPos) {
-                 $this->semValue = Stmt\Use_::TYPE_FUNCTION;
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             103 => function ($stackPos) {
-                 $this->semValue = Stmt\Use_::TYPE_CONSTANT;
+                 $this->semValue = new Stmt\Const_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             104 => function ($stackPos) {
-                 $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos-(7-3)], $this->semStack[$stackPos-(7-6)], $this->semStack[$stackPos-(7-2)], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
+                 $this->semValue = Stmt\Use_::TYPE_FUNCTION;
             },
             105 => function ($stackPos) {
-                 $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-5)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
+                 $this->semValue = Stmt\Use_::TYPE_CONSTANT;
             },
             106 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos-(7-3)], $this->semStack[$stackPos-(7-6)], $this->semStack[$stackPos-(7-2)], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
             },
             107 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-5)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
             },
             108 => function ($stackPos) {
                  $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
@@ -1262,10 +1287,10 @@ protected function initReduceCallbacks() {
                  $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             112 => function ($stackPos) {
-                 $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(1-1)], null, Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(1-1));
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             113 => function ($stackPos) {
-                 $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(3-3));
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             114 => function ($stackPos) {
                  $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(1-1)], null, Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(1-1));
@@ -1274,52 +1299,58 @@ protected function initReduceCallbacks() {
                  $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(3-3));
             },
             116 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)]; $this->semValue->type = Stmt\Use_::TYPE_NORMAL;
+                 $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(1-1)], null, Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(1-1));
             },
             117 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-2)]; $this->semValue->type = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(3-3));
             },
             118 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = $this->semStack[$stackPos-(1-1)]; $this->semValue->type = Stmt\Use_::TYPE_NORMAL;
             },
             119 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = $this->semStack[$stackPos-(2-2)]; $this->semValue->type = $this->semStack[$stackPos-(2-1)];
             },
             120 => function ($stackPos) {
-                 $this->semValue = new Node\Const_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             121 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             122 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Node\Const_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             123 => function ($stackPos) {
-                 $this->semValue = new Node\Const_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             124 => function ($stackPos) {
-                 if (is_array($this->semStack[$stackPos-(2-2)])) { $this->semValue = array_merge($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]); } else { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; };
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             125 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = new Node\Const_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             126 => function ($stackPos) {
-                 $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; };
-            if ($nop !== null) { $this->semStack[$stackPos-(1-1)][] = $nop; } $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 if (is_array($this->semStack[$stackPos-(2-2)])) { $this->semValue = array_merge($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]); } else { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; };
             },
             127 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = array();
             },
             128 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; };
+            if ($nop !== null) { $this->semStack[$stackPos-(1-1)][] = $nop; } $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             129 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             130 => function ($stackPos) {
-                 throw new Error('__HALT_COMPILER() can only be used from the outermost scope', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             131 => function ($stackPos) {
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+            },
+            132 => function ($stackPos) {
+                 throw new Error('__HALT_COMPILER() can only be used from the outermost scope', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            133 => function ($stackPos) {
 
         if ($this->semStack[$stackPos-(3-2)]) {
             $this->semValue = $this->semStack[$stackPos-(3-2)]; $attrs = $this->startAttributeStack[$stackPos-(3-1)]; $stmts = $this->semValue; if (!empty($attrs['comments'])) {$stmts[0]->setAttribute('comments', array_merge($attrs['comments'], $stmts[0]->getAttribute('comments', []))); };
@@ -1329,123 +1360,117 @@ protected function initReduceCallbacks() {
         }
 
             },
-            132 => function ($stackPos) {
+            134 => function ($stackPos) {
                  $this->semValue = new Stmt\If_($this->semStack[$stackPos-(5-2)], ['stmts' => is_array($this->semStack[$stackPos-(5-3)]) ? $this->semStack[$stackPos-(5-3)] : array($this->semStack[$stackPos-(5-3)]), 'elseifs' => $this->semStack[$stackPos-(5-4)], 'else' => $this->semStack[$stackPos-(5-5)]], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
-            133 => function ($stackPos) {
+            135 => function ($stackPos) {
                  $this->semValue = new Stmt\If_($this->semStack[$stackPos-(8-2)], ['stmts' => $this->semStack[$stackPos-(8-4)], 'elseifs' => $this->semStack[$stackPos-(8-5)], 'else' => $this->semStack[$stackPos-(8-6)]], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
             },
-            134 => function ($stackPos) {
+            136 => function ($stackPos) {
                  $this->semValue = new Stmt\While_($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            135 => function ($stackPos) {
+            137 => function ($stackPos) {
                  $this->semValue = new Stmt\Do_($this->semStack[$stackPos-(5-4)], is_array($this->semStack[$stackPos-(5-2)]) ? $this->semStack[$stackPos-(5-2)] : array($this->semStack[$stackPos-(5-2)]), $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
-            136 => function ($stackPos) {
+            138 => function ($stackPos) {
                  $this->semValue = new Stmt\For_(['init' => $this->semStack[$stackPos-(9-3)], 'cond' => $this->semStack[$stackPos-(9-5)], 'loop' => $this->semStack[$stackPos-(9-7)], 'stmts' => $this->semStack[$stackPos-(9-9)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
             },
-            137 => function ($stackPos) {
+            139 => function ($stackPos) {
                  $this->semValue = new Stmt\Switch_($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            138 => function ($stackPos) {
+            140 => function ($stackPos) {
                  $this->semValue = new Stmt\Break_(null, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            139 => function ($stackPos) {
+            141 => function ($stackPos) {
                  $this->semValue = new Stmt\Break_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            140 => function ($stackPos) {
+            142 => function ($stackPos) {
                  $this->semValue = new Stmt\Continue_(null, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            141 => function ($stackPos) {
+            143 => function ($stackPos) {
                  $this->semValue = new Stmt\Continue_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            142 => function ($stackPos) {
+            144 => function ($stackPos) {
                  $this->semValue = new Stmt\Return_(null, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            143 => function ($stackPos) {
+            145 => function ($stackPos) {
                  $this->semValue = new Stmt\Return_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            144 => function ($stackPos) {
+            146 => function ($stackPos) {
                  $this->semValue = new Stmt\Global_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            145 => function ($stackPos) {
+            147 => function ($stackPos) {
                  $this->semValue = new Stmt\Static_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            146 => function ($stackPos) {
+            148 => function ($stackPos) {
                  $this->semValue = new Stmt\Echo_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            147 => function ($stackPos) {
+            149 => function ($stackPos) {
                  $this->semValue = new Stmt\InlineHTML($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            148 => function ($stackPos) {
+            150 => function ($stackPos) {
                  $this->semValue = new Stmt\Expression($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            149 => function ($stackPos) {
+            151 => function ($stackPos) {
                  $this->semValue = new Stmt\Expression($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            150 => function ($stackPos) {
+            152 => function ($stackPos) {
                  $this->semValue = new Stmt\Unset_($this->semStack[$stackPos-(5-3)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
-            151 => function ($stackPos) {
+            153 => function ($stackPos) {
                  $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos-(7-3)], $this->semStack[$stackPos-(7-5)][0], ['keyVar' => null, 'byRef' => $this->semStack[$stackPos-(7-5)][1], 'stmts' => $this->semStack[$stackPos-(7-7)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
             },
-            152 => function ($stackPos) {
+            154 => function ($stackPos) {
                  $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos-(9-3)], $this->semStack[$stackPos-(9-7)][0], ['keyVar' => $this->semStack[$stackPos-(9-5)], 'byRef' => $this->semStack[$stackPos-(9-7)][1], 'stmts' => $this->semStack[$stackPos-(9-9)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
             },
-            153 => function ($stackPos) {
+            155 => function ($stackPos) {
                  $this->semValue = new Stmt\Declare_($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
-            154 => function ($stackPos) {
+            156 => function ($stackPos) {
                  $this->semValue = new Stmt\TryCatch($this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-5)], $this->semStack[$stackPos-(6-6)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); $this->checkTryCatch($this->semValue);
             },
-            155 => function ($stackPos) {
+            157 => function ($stackPos) {
                  $this->semValue = new Stmt\Throw_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            156 => function ($stackPos) {
+            158 => function ($stackPos) {
                  $this->semValue = new Stmt\Goto_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            157 => function ($stackPos) {
+            159 => function ($stackPos) {
                  $this->semValue = new Stmt\Label($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            158 => function ($stackPos) {
+            160 => function ($stackPos) {
                  $this->semValue = new Stmt\Expression($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            159 => function ($stackPos) {
+            161 => function ($stackPos) {
                  $this->semValue = array(); /* means: no statement */
             },
-            160 => function ($stackPos) {
+            162 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            161 => function ($stackPos) {
+            163 => function ($stackPos) {
                  $startAttributes = $this->startAttributeStack[$stackPos-(1-1)]; if (isset($startAttributes['comments'])) { $this->semValue = new Stmt\Nop($startAttributes + $this->endAttributes); } else { $this->semValue = null; };
             if ($this->semValue === null) $this->semValue = array(); /* means: no statement */
             },
-            162 => function ($stackPos) {
-                 $this->semValue = array();
-            },
-            163 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
-            },
             164 => function ($stackPos) {
-                 $this->semValue = new Stmt\Catch_(array($this->semStack[$stackPos-(8-3)]), $this->semStack[$stackPos-(8-4)], $this->semStack[$stackPos-(8-7)], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
+                 $this->semValue = array();
             },
             165 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             166 => function ($stackPos) {
-                 $this->semValue = new Stmt\Finally_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\Catch_(array($this->semStack[$stackPos-(8-3)]), $this->semStack[$stackPos-(8-4)], $this->semStack[$stackPos-(8-7)], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
             },
             167 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = null;
             },
             168 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = new Stmt\Finally_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             169 => function ($stackPos) {
-                 $this->semValue = false;
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             170 => function ($stackPos) {
-                 $this->semValue = true;
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             171 => function ($stackPos) {
                  $this->semValue = false;
@@ -1454,1175 +1479,1193 @@ protected function initReduceCallbacks() {
                  $this->semValue = true;
             },
             173 => function ($stackPos) {
-                 $this->semValue = new Stmt\Function_($this->semStack[$stackPos-(10-3)], ['byRef' => $this->semStack[$stackPos-(10-2)], 'params' => $this->semStack[$stackPos-(10-5)], 'returnType' => $this->semStack[$stackPos-(10-7)], 'stmts' => $this->semStack[$stackPos-(10-9)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes);
+                 $this->semValue = false;
             },
             174 => function ($stackPos) {
-                 $this->semValue = new Stmt\Class_($this->semStack[$stackPos-(7-2)], ['type' => $this->semStack[$stackPos-(7-1)], 'extends' => $this->semStack[$stackPos-(7-3)], 'implements' => $this->semStack[$stackPos-(7-4)], 'stmts' => $this->semStack[$stackPos-(7-6)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
-            $this->checkClass($this->semValue, $stackPos-(7-2));
+                 $this->semValue = true;
             },
             175 => function ($stackPos) {
-                 $this->semValue = new Stmt\Interface_($this->semStack[$stackPos-(6-2)], ['extends' => $this->semStack[$stackPos-(6-3)], 'stmts' => $this->semStack[$stackPos-(6-5)]], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
-            $this->checkInterface($this->semValue, $stackPos-(6-2));
+                 $this->semValue = false;
             },
             176 => function ($stackPos) {
-                 $this->semValue = new Stmt\Trait_($this->semStack[$stackPos-(5-2)], ['stmts' => $this->semStack[$stackPos-(5-4)]], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
+                 $this->semValue = true;
             },
             177 => function ($stackPos) {
-                 $this->semValue = 0;
+                 $this->semValue = new Stmt\Function_($this->semStack[$stackPos-(10-3)], ['byRef' => $this->semStack[$stackPos-(10-2)], 'params' => $this->semStack[$stackPos-(10-5)], 'returnType' => $this->semStack[$stackPos-(10-7)], 'stmts' => $this->semStack[$stackPos-(10-9)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes);
             },
             178 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT;
+                 $this->semValue = new Stmt\Class_($this->semStack[$stackPos-(7-2)], ['type' => $this->semStack[$stackPos-(7-1)], 'extends' => $this->semStack[$stackPos-(7-3)], 'implements' => $this->semStack[$stackPos-(7-4)], 'stmts' => $this->semStack[$stackPos-(7-6)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
+            $this->checkClass($this->semValue, $stackPos-(7-2));
             },
             179 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_FINAL;
+                 $this->semValue = new Stmt\Interface_($this->semStack[$stackPos-(6-2)], ['extends' => $this->semStack[$stackPos-(6-3)], 'stmts' => $this->semStack[$stackPos-(6-5)]], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
+            $this->checkInterface($this->semValue, $stackPos-(6-2));
             },
             180 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = new Stmt\Trait_($this->semStack[$stackPos-(5-2)], ['stmts' => $this->semStack[$stackPos-(5-4)]], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
             181 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
+                 $this->semValue = 0;
             },
             182 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT;
             },
             183 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
+                 $this->semValue = Stmt\Class_::MODIFIER_FINAL;
             },
             184 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = null;
             },
             185 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(2-2)];
             },
             186 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = array();
             },
             187 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = $this->semStack[$stackPos-(2-2)];
             },
             188 => function ($stackPos) {
-                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = array();
             },
             189 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
+                 $this->semValue = $this->semStack[$stackPos-(2-2)];
             },
             190 => function ($stackPos) {
-                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             191 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             192 => function ($stackPos) {
                  $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
             },
             193 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = $this->semStack[$stackPos-(4-2)];
             },
             194 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
+                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
             },
             195 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = $this->semStack[$stackPos-(4-2)];
             },
             196 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
             },
             197 => function ($stackPos) {
-                 $this->semValue = new Stmt\DeclareDeclare($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = null;
             },
             198 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = $this->semStack[$stackPos-(4-2)];
             },
             199 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-3)];
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             200 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             201 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(5-3)];
+                 $this->semValue = new Stmt\DeclareDeclare($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             202 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             203 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = $this->semStack[$stackPos-(4-3)];
             },
             204 => function ($stackPos) {
-                 $this->semValue = new Stmt\Case_($this->semStack[$stackPos-(4-2)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(4-2)];
             },
             205 => function ($stackPos) {
-                 $this->semValue = new Stmt\Case_(null, $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(5-3)];
             },
             206 => function ($stackPos) {
-                $this->semValue = $this->semStack[$stackPos];
+                 $this->semValue = array();
             },
             207 => function ($stackPos) {
-                $this->semValue = $this->semStack[$stackPos];
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             208 => function ($stackPos) {
-                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Stmt\Case_($this->semStack[$stackPos-(4-2)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             209 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
+                 $this->semValue = new Stmt\Case_(null, $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             210 => function ($stackPos) {
-                 $this->semValue = array();
+                $this->semValue = $this->semStack[$stackPos];
             },
             211 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+                $this->semValue = $this->semStack[$stackPos];
             },
             212 => function ($stackPos) {
-                 $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos-(3-2)], is_array($this->semStack[$stackPos-(3-3)]) ? $this->semStack[$stackPos-(3-3)] : array($this->semStack[$stackPos-(3-3)]), $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
             },
             213 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = $this->semStack[$stackPos-(4-2)];
             },
             214 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = array();
             },
             215 => function ($stackPos) {
-                 $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos-(4-2)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             216 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos-(3-2)], is_array($this->semStack[$stackPos-(3-3)]) ? $this->semStack[$stackPos-(3-3)] : array($this->semStack[$stackPos-(3-3)]), $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             217 => function ($stackPos) {
-                 $this->semValue = new Stmt\Else_(is_array($this->semStack[$stackPos-(2-2)]) ? $this->semStack[$stackPos-(2-2)] : array($this->semStack[$stackPos-(2-2)]), $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = array();
             },
             218 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             219 => function ($stackPos) {
-                 $this->semValue = new Stmt\Else_($this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos-(4-2)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             220 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)], false);
+                 $this->semValue = null;
             },
             221 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(2-2)], true);
+                 $this->semValue = new Stmt\Else_(is_array($this->semStack[$stackPos-(2-2)]) ? $this->semStack[$stackPos-(2-2)] : array($this->semStack[$stackPos-(2-2)]), $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             222 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)], false);
+                 $this->semValue = null;
             },
             223 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Stmt\Else_($this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             224 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)], false);
             },
             225 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = array($this->semStack[$stackPos-(2-2)], true);
             },
             226 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)], false);
             },
             227 => function ($stackPos) {
-                 $this->semValue = new Node\Param($this->semStack[$stackPos-(4-4)], null, $this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-2)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); $this->checkParam($this->semValue);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             228 => function ($stackPos) {
-                 $this->semValue = new Node\Param($this->semStack[$stackPos-(6-4)], $this->semStack[$stackPos-(6-6)], $this->semStack[$stackPos-(6-1)], $this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-3)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); $this->checkParam($this->semValue);
+                 $this->semValue = array();
             },
             229 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             230 => function ($stackPos) {
-                 $this->semValue = new Node\Identifier('array', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             231 => function ($stackPos) {
-                 $this->semValue = new Node\Identifier('callable', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Node\Param($this->semStack[$stackPos-(4-4)], null, $this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-2)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); $this->checkParam($this->semValue);
             },
             232 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = new Node\Param($this->semStack[$stackPos-(6-4)], $this->semStack[$stackPos-(6-6)], $this->semStack[$stackPos-(6-1)], $this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-3)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); $this->checkParam($this->semValue);
             },
             233 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             234 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = new Node\Identifier('array', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             235 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
+                 $this->semValue = new Node\Identifier('callable', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             236 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = null;
             },
             237 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             238 => function ($stackPos) {
-                 $this->semValue = array(new Node\Arg($this->semStack[$stackPos-(3-2)], false, false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes));
+                 $this->semValue = null;
             },
             239 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = $this->semStack[$stackPos-(2-2)];
             },
             240 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = array();
             },
             241 => function ($stackPos) {
-                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(1-1)], false, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             242 => function ($stackPos) {
-                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(2-2)], true, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = array(new Node\Arg($this->semStack[$stackPos-(3-2)], false, false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes));
             },
             243 => function ($stackPos) {
-                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(2-2)], false, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             244 => function ($stackPos) {
                  $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             245 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(1-1)], false, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             246 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(2-2)], true, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             247 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(2-2)], false, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             248 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             249 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             250 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             251 => function ($stackPos) {
-                 $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos-(1-1)], null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             252 => function ($stackPos) {
-                 $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             253 => function ($stackPos) {
-                 if ($this->semStack[$stackPos-(2-2)] !== null) { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; }
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             254 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             255 => function ($stackPos) {
-                 $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; };
-            if ($nop !== null) { $this->semStack[$stackPos-(1-1)][] = $nop; } $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos-(1-1)], null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             256 => function ($stackPos) {
-                 $this->semValue = new Stmt\Property($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->checkProperty($this->semValue, $stackPos-(3-1));
+                 $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             257 => function ($stackPos) {
-                 $this->semValue = new Stmt\ClassConst($this->semStack[$stackPos-(3-2)], 0, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 if ($this->semStack[$stackPos-(2-2)] !== null) { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; }
             },
             258 => function ($stackPos) {
-                 $this->semValue = new Stmt\ClassMethod($this->semStack[$stackPos-(9-4)], ['type' => $this->semStack[$stackPos-(9-1)], 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-6)], 'returnType' => $this->semStack[$stackPos-(9-8)], 'stmts' => $this->semStack[$stackPos-(9-9)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
-            $this->checkClassMethod($this->semValue, $stackPos-(9-1));
+                 $this->semValue = array();
             },
             259 => function ($stackPos) {
-                 $this->semValue = new Stmt\TraitUse($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; };
+            if ($nop !== null) { $this->semStack[$stackPos-(1-1)][] = $nop; } $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             260 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = new Stmt\Property($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->checkProperty($this->semValue, $stackPos-(3-1));
             },
             261 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = new Stmt\ClassConst($this->semStack[$stackPos-(3-2)], 0, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             262 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = new Stmt\ClassMethod($this->semStack[$stackPos-(9-4)], ['type' => $this->semStack[$stackPos-(9-1)], 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-6)], 'returnType' => $this->semStack[$stackPos-(9-8)], 'stmts' => $this->semStack[$stackPos-(9-9)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
+            $this->checkClassMethod($this->semValue, $stackPos-(9-1));
             },
             263 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Stmt\TraitUse($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             264 => function ($stackPos) {
-                 $this->semValue = new Stmt\TraitUseAdaptation\Precedence($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = array();
             },
             265 => function ($stackPos) {
-                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(5-1)][0], $this->semStack[$stackPos-(5-1)][1], $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             266 => function ($stackPos) {
-                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], $this->semStack[$stackPos-(4-3)], null, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = array();
             },
             267 => function ($stackPos) {
-                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             268 => function ($stackPos) {
-                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\TraitUseAdaptation\Precedence($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             269 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
+                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(5-1)][0], $this->semStack[$stackPos-(5-1)][1], $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
             270 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], $this->semStack[$stackPos-(4-3)], null, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             271 => function ($stackPos) {
-                 $this->semValue = array(null, $this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             272 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             273 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
             },
             274 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             275 => function ($stackPos) {
-                 $this->semValue = 0;
+                 $this->semValue = array(null, $this->semStack[$stackPos-(1-1)]);
             },
             276 => function ($stackPos) {
-                 $this->semValue = 0;
+                 $this->semValue = null;
             },
             277 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             278 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             279 => function ($stackPos) {
-                 $this->checkModifier($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $this->semValue = $this->semStack[$stackPos-(2-1)] | $this->semStack[$stackPos-(2-2)];
+                 $this->semValue = 0;
             },
             280 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_PUBLIC;
+                 $this->semValue = 0;
             },
             281 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_PROTECTED;
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             282 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_PRIVATE;
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             283 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_STATIC;
+                 $this->checkModifier($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $this->semValue = $this->semStack[$stackPos-(2-1)] | $this->semStack[$stackPos-(2-2)];
             },
             284 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT;
+                 $this->semValue = Stmt\Class_::MODIFIER_PUBLIC;
             },
             285 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_FINAL;
+                 $this->semValue = Stmt\Class_::MODIFIER_PROTECTED;
             },
             286 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = Stmt\Class_::MODIFIER_PRIVATE;
             },
             287 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = Stmt\Class_::MODIFIER_STATIC;
             },
             288 => function ($stackPos) {
-                 $this->semValue = new Node\VarLikeIdentifier(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT;
             },
             289 => function ($stackPos) {
-                 $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos-(1-1)], null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = Stmt\Class_::MODIFIER_FINAL;
             },
             290 => function ($stackPos) {
-                 $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             291 => function ($stackPos) {
                  $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             292 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Node\VarLikeIdentifier(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             293 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos-(1-1)], null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             294 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             295 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             296 => function ($stackPos) {
-                 $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             297 => function ($stackPos) {
-                 $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = array();
             },
             298 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignRef($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             299 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignRef($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             300 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             301 => function ($stackPos) {
-                 $this->semValue = new Expr\Clone_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             302 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignRef($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             303 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignRef($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             304 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             305 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Clone_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             306 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             307 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             308 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             309 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             310 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             311 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             312 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             313 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             314 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Coalesce($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             315 => function ($stackPos) {
-                 $this->semValue = new Expr\PostInc($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             316 => function ($stackPos) {
-                 $this->semValue = new Expr\PreInc($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             317 => function ($stackPos) {
-                 $this->semValue = new Expr\PostDec($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             318 => function ($stackPos) {
-                 $this->semValue = new Expr\PreDec($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\Coalesce($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             319 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\BooleanOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\PostInc($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             320 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\BooleanAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\PreInc($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             321 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\LogicalOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\PostDec($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             322 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\LogicalAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\PreDec($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             323 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\LogicalXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\BooleanOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             324 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\BooleanAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             325 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\LogicalOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             326 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\LogicalAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             327 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\LogicalXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             328 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             329 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             330 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             331 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             332 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             333 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             334 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             335 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             336 => function ($stackPos) {
-                 $this->semValue = new Expr\UnaryPlus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             337 => function ($stackPos) {
-                 $this->semValue = new Expr\UnaryMinus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             338 => function ($stackPos) {
-                 $this->semValue = new Expr\BooleanNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             339 => function ($stackPos) {
-                 $this->semValue = new Expr\BitwiseNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             340 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Identical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             341 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\NotIdentical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\UnaryPlus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             342 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Equal($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\UnaryMinus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             343 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\NotEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BooleanNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             344 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Spaceship($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BitwiseNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             345 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Smaller($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Identical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             346 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\SmallerOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\NotIdentical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             347 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Greater($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Equal($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             348 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\GreaterOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\NotEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             349 => function ($stackPos) {
-                 $this->semValue = new Expr\Instanceof_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Spaceship($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             350 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\BinaryOp\Smaller($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             351 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = new Expr\BinaryOp\SmallerOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             352 => function ($stackPos) {
-                 $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(5-1)], $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Greater($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             353 => function ($stackPos) {
-                 $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(4-1)], null, $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\GreaterOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             354 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Coalesce($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Instanceof_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             355 => function ($stackPos) {
-                 $this->semValue = new Expr\Isset_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             356 => function ($stackPos) {
-                 $this->semValue = new Expr\Empty_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             357 => function ($stackPos) {
-                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(5-1)], $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
             358 => function ($stackPos) {
-                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE_ONCE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(4-1)], null, $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             359 => function ($stackPos) {
-                 $this->semValue = new Expr\Eval_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Coalesce($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             360 => function ($stackPos) {
-                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Isset_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             361 => function ($stackPos) {
-                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE_ONCE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Empty_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             362 => function ($stackPos) {
-                 $this->semValue = new Expr\Cast\Int_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             363 => function ($stackPos) {
+                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE_ONCE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+            },
+            364 => function ($stackPos) {
+                 $this->semValue = new Expr\Eval_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+            },
+            365 => function ($stackPos) {
+                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+            },
+            366 => function ($stackPos) {
+                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE_ONCE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+            },
+            367 => function ($stackPos) {
+                 $this->semValue = new Expr\Cast\Int_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+            },
+            368 => function ($stackPos) {
                  $attrs = $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes;
             $attrs['kind'] = $this->getFloatCastKind($this->semStack[$stackPos-(2-1)]);
             $this->semValue = new Expr\Cast\Double($this->semStack[$stackPos-(2-2)], $attrs);
             },
-            364 => function ($stackPos) {
+            369 => function ($stackPos) {
                  $this->semValue = new Expr\Cast\String_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            365 => function ($stackPos) {
+            370 => function ($stackPos) {
                  $this->semValue = new Expr\Cast\Array_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            366 => function ($stackPos) {
+            371 => function ($stackPos) {
                  $this->semValue = new Expr\Cast\Object_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            367 => function ($stackPos) {
+            372 => function ($stackPos) {
                  $this->semValue = new Expr\Cast\Bool_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            368 => function ($stackPos) {
+            373 => function ($stackPos) {
                  $this->semValue = new Expr\Cast\Unset_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            369 => function ($stackPos) {
+            374 => function ($stackPos) {
                  $attrs = $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes;
             $attrs['kind'] = strtolower($this->semStack[$stackPos-(2-1)]) === 'exit' ? Expr\Exit_::KIND_EXIT : Expr\Exit_::KIND_DIE;
             $this->semValue = new Expr\Exit_($this->semStack[$stackPos-(2-2)], $attrs);
             },
-            370 => function ($stackPos) {
+            375 => function ($stackPos) {
                  $this->semValue = new Expr\ErrorSuppress($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            371 => function ($stackPos) {
+            376 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            372 => function ($stackPos) {
+            377 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            373 => function ($stackPos) {
+            378 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            374 => function ($stackPos) {
+            379 => function ($stackPos) {
                  $this->semValue = new Expr\ShellExec($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            375 => function ($stackPos) {
+            380 => function ($stackPos) {
                  $this->semValue = new Expr\Print_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            376 => function ($stackPos) {
+            381 => function ($stackPos) {
                  $this->semValue = new Expr\Yield_(null, null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            377 => function ($stackPos) {
+            382 => function ($stackPos) {
                  $this->semValue = new Expr\YieldFrom($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            378 => function ($stackPos) {
+            383 => function ($stackPos) {
                  $this->semValue = new Expr\Closure(['static' => false, 'byRef' => $this->semStack[$stackPos-(10-2)], 'params' => $this->semStack[$stackPos-(10-4)], 'uses' => $this->semStack[$stackPos-(10-6)], 'returnType' => $this->semStack[$stackPos-(10-7)], 'stmts' => $this->semStack[$stackPos-(10-9)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes);
             },
-            379 => function ($stackPos) {
+            384 => function ($stackPos) {
                  $this->semValue = new Expr\Closure(['static' => true, 'byRef' => $this->semStack[$stackPos-(11-3)], 'params' => $this->semStack[$stackPos-(11-5)], 'uses' => $this->semStack[$stackPos-(11-7)], 'returnType' => $this->semStack[$stackPos-(11-8)], 'stmts' => $this->semStack[$stackPos-(11-10)]], $this->startAttributeStack[$stackPos-(11-1)] + $this->endAttributes);
             },
-            380 => function ($stackPos) {
+            385 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
-            381 => function ($stackPos) {
+            386 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
-            382 => function ($stackPos) {
+            387 => function ($stackPos) {
                  $this->semValue = new Expr\Yield_($this->semStack[$stackPos-(2-2)], null, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            383 => function ($stackPos) {
+            388 => function ($stackPos) {
                  $this->semValue = new Expr\Yield_($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
-            384 => function ($stackPos) {
+            389 => function ($stackPos) {
                  $attrs = $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes; $attrs['kind'] = Expr\Array_::KIND_LONG;
             $this->semValue = new Expr\Array_($this->semStack[$stackPos-(4-3)], $attrs);
             },
-            385 => function ($stackPos) {
+            390 => function ($stackPos) {
                  $attrs = $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes; $attrs['kind'] = Expr\Array_::KIND_SHORT;
             $this->semValue = new Expr\Array_($this->semStack[$stackPos-(3-2)], $attrs);
             },
-            386 => function ($stackPos) {
+            391 => function ($stackPos) {
                  $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
-            387 => function ($stackPos) {
+            392 => function ($stackPos) {
                  $attrs = $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes; $attrs['kind'] = ($this->semStack[$stackPos-(4-1)][0] === "'" || ($this->semStack[$stackPos-(4-1)][1] === "'" && ($this->semStack[$stackPos-(4-1)][0] === 'b' || $this->semStack[$stackPos-(4-1)][0] === 'B')) ? Scalar\String_::KIND_SINGLE_QUOTED : Scalar\String_::KIND_DOUBLE_QUOTED);
             $this->semValue = new Expr\ArrayDimFetch(new Scalar\String_(Scalar\String_::parse($this->semStack[$stackPos-(4-1)]), $attrs), $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
-            388 => function ($stackPos) {
+            393 => function ($stackPos) {
                  $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
-            389 => function ($stackPos) {
+            394 => function ($stackPos) {
                  $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
-            390 => function ($stackPos) {
+            395 => function ($stackPos) {
                  $this->semValue = array(new Stmt\Class_(null, ['type' => 0, 'extends' => $this->semStack[$stackPos-(7-3)], 'implements' => $this->semStack[$stackPos-(7-4)], 'stmts' => $this->semStack[$stackPos-(7-6)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes), $this->semStack[$stackPos-(7-2)]);
             $this->checkClass($this->semValue[0], -1);
             },
-            391 => function ($stackPos) {
+            396 => function ($stackPos) {
                  $this->semValue = new Expr\New_($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            392 => function ($stackPos) {
+            397 => function ($stackPos) {
                  list($class, $ctorArgs) = $this->semStack[$stackPos-(2-2)]; $this->semValue = new Expr\New_($class, $ctorArgs, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            393 => function ($stackPos) {
+            398 => function ($stackPos) {
                  $this->semValue = array();
             },
-            394 => function ($stackPos) {
+            399 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(4-3)];
             },
-            395 => function ($stackPos) {
+            400 => function ($stackPos) {
                  $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
-            396 => function ($stackPos) {
+            401 => function ($stackPos) {
                  $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
-            397 => function ($stackPos) {
+            402 => function ($stackPos) {
                  $this->semValue = new Expr\ClosureUse($this->semStack[$stackPos-(2-2)], $this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            398 => function ($stackPos) {
+            403 => function ($stackPos) {
                  $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            399 => function ($stackPos) {
+            404 => function ($stackPos) {
                  $this->semValue = new Expr\StaticCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
-            400 => function ($stackPos) {
+            405 => function ($stackPos) {
                  $this->semValue = new Expr\StaticCall($this->semStack[$stackPos-(6-1)], $this->semStack[$stackPos-(6-4)], $this->semStack[$stackPos-(6-6)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
             },
-            401 => function ($stackPos) {
+            406 => function ($stackPos) {
                  $this->semValue = $this->fixupPhp5StaticPropCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            402 => function ($stackPos) {
+            407 => function ($stackPos) {
                  $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            403 => function ($stackPos) {
+            408 => function ($stackPos) {
                  $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
-            404 => function ($stackPos) {
+            409 => function ($stackPos) {
                  $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            405 => function ($stackPos) {
+            410 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            406 => function ($stackPos) {
+            411 => function ($stackPos) {
                  $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            407 => function ($stackPos) {
+            412 => function ($stackPos) {
                  $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            408 => function ($stackPos) {
+            413 => function ($stackPos) {
                  $this->semValue = new Name\FullyQualified(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            409 => function ($stackPos) {
+            414 => function ($stackPos) {
                  $this->semValue = new Name\Relative(substr($this->semStack[$stackPos-(1-1)], 10), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            410 => function ($stackPos) {
+            415 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            411 => function ($stackPos) {
+            416 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            412 => function ($stackPos) {
+            417 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            413 => function ($stackPos) {
+            418 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            414 => function ($stackPos) {
+            419 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            415 => function ($stackPos) {
+            420 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            416 => function ($stackPos) {
+            421 => function ($stackPos) {
                  $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            417 => function ($stackPos) {
+            422 => function ($stackPos) {
                  $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            418 => function ($stackPos) {
+            423 => function ($stackPos) {
                  $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
-            419 => function ($stackPos) {
+            424 => function ($stackPos) {
                  $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
-            420 => function ($stackPos) {
+            425 => function ($stackPos) {
                  $this->semValue = null;
             },
-            421 => function ($stackPos) {
+            426 => function ($stackPos) {
                  $this->semValue = null;
             },
-            422 => function ($stackPos) {
+            427 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            423 => function ($stackPos) {
+            428 => function ($stackPos) {
                  $this->semValue = array();
             },
-            424 => function ($stackPos) {
+            429 => function ($stackPos) {
                  $this->semValue = array(new Scalar\EncapsedStringPart(Scalar\String_::parseEscapeSequences($this->semStack[$stackPos-(1-1)], '`', false), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes));
             },
-            425 => function ($stackPos) {
+            430 => function ($stackPos) {
                  foreach ($this->semStack[$stackPos-(1-1)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', false); } }; $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            426 => function ($stackPos) {
+            431 => function ($stackPos) {
                  $this->semValue = array();
             },
-            427 => function ($stackPos) {
+            432 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            428 => function ($stackPos) {
+            433 => function ($stackPos) {
                  $this->semValue = $this->parseLNumber($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes, true);
             },
-            429 => function ($stackPos) {
+            434 => function ($stackPos) {
                  $this->semValue = new Scalar\DNumber(Scalar\DNumber::parse($this->semStack[$stackPos-(1-1)]), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            430 => function ($stackPos) {
+            435 => function ($stackPos) {
                  $attrs = $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes; $attrs['kind'] = ($this->semStack[$stackPos-(1-1)][0] === "'" || ($this->semStack[$stackPos-(1-1)][1] === "'" && ($this->semStack[$stackPos-(1-1)][0] === 'b' || $this->semStack[$stackPos-(1-1)][0] === 'B')) ? Scalar\String_::KIND_SINGLE_QUOTED : Scalar\String_::KIND_DOUBLE_QUOTED);
             $this->semValue = new Scalar\String_(Scalar\String_::parse($this->semStack[$stackPos-(1-1)], false), $attrs);
             },
-            431 => function ($stackPos) {
+            436 => function ($stackPos) {
                  $this->semValue = new Scalar\MagicConst\Line($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            432 => function ($stackPos) {
+            437 => function ($stackPos) {
                  $this->semValue = new Scalar\MagicConst\File($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            433 => function ($stackPos) {
+            438 => function ($stackPos) {
                  $this->semValue = new Scalar\MagicConst\Dir($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            434 => function ($stackPos) {
+            439 => function ($stackPos) {
                  $this->semValue = new Scalar\MagicConst\Class_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            435 => function ($stackPos) {
+            440 => function ($stackPos) {
                  $this->semValue = new Scalar\MagicConst\Trait_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            436 => function ($stackPos) {
+            441 => function ($stackPos) {
                  $this->semValue = new Scalar\MagicConst\Method($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            437 => function ($stackPos) {
+            442 => function ($stackPos) {
                  $this->semValue = new Scalar\MagicConst\Function_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            438 => function ($stackPos) {
+            443 => function ($stackPos) {
                  $this->semValue = new Scalar\MagicConst\Namespace_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            439 => function ($stackPos) {
+            444 => function ($stackPos) {
                  $this->semValue = $this->parseDocString($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)], false);
             },
-            440 => function ($stackPos) {
+            445 => function ($stackPos) {
                  $this->semValue = $this->parseDocString($this->semStack[$stackPos-(2-1)], '', $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(2-2)] + $this->endAttributeStack[$stackPos-(2-2)], false);
             },
-            441 => function ($stackPos) {
+            446 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            442 => function ($stackPos) {
+            447 => function ($stackPos) {
                  $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            443 => function ($stackPos) {
+            448 => function ($stackPos) {
                  $this->semValue = new Expr\ConstFetch($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            444 => function ($stackPos) {
+            449 => function ($stackPos) {
                  $this->semValue = new Expr\Array_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
-            445 => function ($stackPos) {
+            450 => function ($stackPos) {
                  $this->semValue = new Expr\Array_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            446 => function ($stackPos) {
+            451 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            447 => function ($stackPos) {
+            452 => function ($stackPos) {
                  $this->semValue = new Expr\BinaryOp\BooleanOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            448 => function ($stackPos) {
+            453 => function ($stackPos) {
                  $this->semValue = new Expr\BinaryOp\BooleanAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            449 => function ($stackPos) {
+            454 => function ($stackPos) {
                  $this->semValue = new Expr\BinaryOp\LogicalOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            450 => function ($stackPos) {
+            455 => function ($stackPos) {
                  $this->semValue = new Expr\BinaryOp\LogicalAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            451 => function ($stackPos) {
+            456 => function ($stackPos) {
                  $this->semValue = new Expr\BinaryOp\LogicalXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            452 => function ($stackPos) {
+            457 => function ($stackPos) {
                  $this->semValue = new Expr\BinaryOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            453 => function ($stackPos) {
+            458 => function ($stackPos) {
                  $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            454 => function ($stackPos) {
+            459 => function ($stackPos) {
+                 $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+            },
+            460 => function ($stackPos) {
                  $this->semValue = new Expr\BinaryOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            455 => function ($stackPos) {
+            461 => function ($stackPos) {
                  $this->semValue = new Expr\BinaryOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            456 => function ($stackPos) {
+            462 => function ($stackPos) {
                  $this->semValue = new Expr\BinaryOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            457 => function ($stackPos) {
+            463 => function ($stackPos) {
                  $this->semValue = new Expr\BinaryOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            458 => function ($stackPos) {
+            464 => function ($stackPos) {
                  $this->semValue = new Expr\BinaryOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            459 => function ($stackPos) {
+            465 => function ($stackPos) {
                  $this->semValue = new Expr\BinaryOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            460 => function ($stackPos) {
+            466 => function ($stackPos) {
                  $this->semValue = new Expr\BinaryOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            461 => function ($stackPos) {
+            467 => function ($stackPos) {
                  $this->semValue = new Expr\BinaryOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            462 => function ($stackPos) {
+            468 => function ($stackPos) {
                  $this->semValue = new Expr\BinaryOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            463 => function ($stackPos) {
+            469 => function ($stackPos) {
                  $this->semValue = new Expr\BinaryOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            464 => function ($stackPos) {
+            470 => function ($stackPos) {
                  $this->semValue = new Expr\UnaryPlus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            465 => function ($stackPos) {
+            471 => function ($stackPos) {
                  $this->semValue = new Expr\UnaryMinus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            466 => function ($stackPos) {
+            472 => function ($stackPos) {
                  $this->semValue = new Expr\BooleanNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            467 => function ($stackPos) {
+            473 => function ($stackPos) {
                  $this->semValue = new Expr\BitwiseNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            468 => function ($stackPos) {
+            474 => function ($stackPos) {
                  $this->semValue = new Expr\BinaryOp\Identical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            469 => function ($stackPos) {
+            475 => function ($stackPos) {
                  $this->semValue = new Expr\BinaryOp\NotIdentical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            470 => function ($stackPos) {
+            476 => function ($stackPos) {
                  $this->semValue = new Expr\BinaryOp\Equal($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            471 => function ($stackPos) {
+            477 => function ($stackPos) {
                  $this->semValue = new Expr\BinaryOp\NotEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            472 => function ($stackPos) {
+            478 => function ($stackPos) {
                  $this->semValue = new Expr\BinaryOp\Smaller($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            473 => function ($stackPos) {
+            479 => function ($stackPos) {
                  $this->semValue = new Expr\BinaryOp\SmallerOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            474 => function ($stackPos) {
+            480 => function ($stackPos) {
                  $this->semValue = new Expr\BinaryOp\Greater($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            475 => function ($stackPos) {
+            481 => function ($stackPos) {
                  $this->semValue = new Expr\BinaryOp\GreaterOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            476 => function ($stackPos) {
+            482 => function ($stackPos) {
                  $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(5-1)], $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
-            477 => function ($stackPos) {
+            483 => function ($stackPos) {
                  $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(4-1)], null, $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
-            478 => function ($stackPos) {
+            484 => function ($stackPos) {
                  $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
-            479 => function ($stackPos) {
+            485 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
-            480 => function ($stackPos) {
+            486 => function ($stackPos) {
                  $this->semValue = new Expr\ConstFetch($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            481 => function ($stackPos) {
+            487 => function ($stackPos) {
                  $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            482 => function ($stackPos) {
+            488 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            483 => function ($stackPos) {
+            489 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            484 => function ($stackPos) {
+            490 => function ($stackPos) {
                  $attrs = $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes; $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED;
             foreach ($this->semStack[$stackPos-(3-2)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '"', true); } }; $this->semValue = new Scalar\Encapsed($this->semStack[$stackPos-(3-2)], $attrs);
             },
-            485 => function ($stackPos) {
+            491 => function ($stackPos) {
                  $this->semValue = $this->parseDocString($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)], true);
             },
-            486 => function ($stackPos) {
+            492 => function ($stackPos) {
                  $this->semValue = array();
             },
-            487 => function ($stackPos) {
+            493 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
-            488 => function ($stackPos) {
+            494 => function ($stackPos) {
                 $this->semValue = $this->semStack[$stackPos];
             },
-            489 => function ($stackPos) {
+            495 => function ($stackPos) {
                 $this->semValue = $this->semStack[$stackPos];
             },
-            490 => function ($stackPos) {
+            496 => function ($stackPos) {
                  $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
-            491 => function ($stackPos) {
+            497 => function ($stackPos) {
                  $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
-            492 => function ($stackPos) {
+            498 => function ($stackPos) {
                  $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            493 => function ($stackPos) {
+            499 => function ($stackPos) {
                  $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            494 => function ($stackPos) {
+            500 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            495 => function ($stackPos) {
+            501 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            496 => function ($stackPos) {
+            502 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            497 => function ($stackPos) {
+            503 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            498 => function ($stackPos) {
+            504 => function ($stackPos) {
                  $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-5)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
             },
-            499 => function ($stackPos) {
+            505 => function ($stackPos) {
                  $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
-            500 => function ($stackPos) {
+            506 => function ($stackPos) {
                  $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            501 => function ($stackPos) {
+            507 => function ($stackPos) {
                  $this->semValue = new Expr\MethodCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
-            502 => function ($stackPos) {
+            508 => function ($stackPos) {
                  $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            503 => function ($stackPos) {
+            509 => function ($stackPos) {
                  $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
-            504 => function ($stackPos) {
+            510 => function ($stackPos) {
                  $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
-            505 => function ($stackPos) {
+            511 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            506 => function ($stackPos) {
+            512 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
-            507 => function ($stackPos) {
+            513 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            508 => function ($stackPos) {
+            514 => function ($stackPos) {
                  $this->semValue = new Expr\Variable($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            509 => function ($stackPos) {
+            515 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            510 => function ($stackPos) {
+            516 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            511 => function ($stackPos) {
+            517 => function ($stackPos) {
                  $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
-            512 => function ($stackPos) {
+            518 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            513 => function ($stackPos) {
+            519 => function ($stackPos) {
                  $var = substr($this->semStack[$stackPos-(1-1)], 1); $this->semValue = \is_string($var) ? new Node\VarLikeIdentifier($var, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes) : $var;
             },
-            514 => function ($stackPos) {
+            520 => function ($stackPos) {
                  $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            515 => function ($stackPos) {
+            521 => function ($stackPos) {
                  $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(6-1)], $this->semStack[$stackPos-(6-5)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
             },
-            516 => function ($stackPos) {
+            522 => function ($stackPos) {
                  $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
-            517 => function ($stackPos) {
+            523 => function ($stackPos) {
                  $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
-            518 => function ($stackPos) {
+            524 => function ($stackPos) {
                  $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
-            519 => function ($stackPos) {
+            525 => function ($stackPos) {
                  $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
-            520 => function ($stackPos) {
+            526 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            521 => function ($stackPos) {
+            527 => function ($stackPos) {
                  $this->semValue = new Expr\Variable($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
-            522 => function ($stackPos) {
+            528 => function ($stackPos) {
                  $this->semValue = null;
             },
-            523 => function ($stackPos) {
+            529 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            524 => function ($stackPos) {
+            530 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            525 => function ($stackPos) {
+            531 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
-            526 => function ($stackPos) {
+            532 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            527 => function ($stackPos) {
+            533 => function ($stackPos) {
                  $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2;
             },
-            528 => function ($stackPos) {
+            534 => function ($stackPos) {
                  $this->semValue = new Expr\List_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
-            529 => function ($stackPos) {
+            535 => function ($stackPos) {
                  $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
-            530 => function ($stackPos) {
+            536 => function ($stackPos) {
                  $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
-            531 => function ($stackPos) {
+            537 => function ($stackPos) {
                  $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            532 => function ($stackPos) {
+            538 => function ($stackPos) {
                  $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            533 => function ($stackPos) {
+            539 => function ($stackPos) {
                  $this->semValue = null;
             },
-            534 => function ($stackPos) {
+            540 => function ($stackPos) {
                  $this->semValue = array();
             },
-            535 => function ($stackPos) {
+            541 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
-            536 => function ($stackPos) {
+            542 => function ($stackPos) {
                  $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
-            537 => function ($stackPos) {
+            543 => function ($stackPos) {
                  $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
-            538 => function ($stackPos) {
+            544 => function ($stackPos) {
                  $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            539 => function ($stackPos) {
+            545 => function ($stackPos) {
                  $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            540 => function ($stackPos) {
+            546 => function ($stackPos) {
                  $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-1)], true, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
-            541 => function ($stackPos) {
+            547 => function ($stackPos) {
                  $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            542 => function ($stackPos) {
+            548 => function ($stackPos) {
                  $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            543 => function ($stackPos) {
+            549 => function ($stackPos) {
                  $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
-            544 => function ($stackPos) {
+            550 => function ($stackPos) {
                  $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
-            545 => function ($stackPos) {
+            551 => function ($stackPos) {
                  $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
-            546 => function ($stackPos) {
+            552 => function ($stackPos) {
                  $this->semValue = array($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]);
             },
-            547 => function ($stackPos) {
+            553 => function ($stackPos) {
                  $this->semValue = new Scalar\EncapsedStringPart($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            548 => function ($stackPos) {
+            554 => function ($stackPos) {
                  $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            549 => function ($stackPos) {
+            555 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            550 => function ($stackPos) {
+            556 => function ($stackPos) {
                  $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
-            551 => function ($stackPos) {
+            557 => function ($stackPos) {
                  $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            552 => function ($stackPos) {
+            558 => function ($stackPos) {
                  $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            553 => function ($stackPos) {
+            559 => function ($stackPos) {
                  $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            554 => function ($stackPos) {
+            560 => function ($stackPos) {
                  $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-4)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
             },
-            555 => function ($stackPos) {
+            561 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
-            556 => function ($stackPos) {
+            562 => function ($stackPos) {
                  $this->semValue = new Scalar\String_($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            557 => function ($stackPos) {
+            563 => function ($stackPos) {
                  $this->semValue = $this->parseNumString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            558 => function ($stackPos) {
+            564 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
         ];
diff --git a/lib/PhpParser/Parser/Php7.php b/lib/PhpParser/Parser/Php7.php
index c56685c210..f2189d6580 100644
--- a/lib/PhpParser/Parser/Php7.php
+++ b/lib/PhpParser/Parser/Php7.php
@@ -17,17 +17,17 @@
  */
 class Php7 extends \PhpParser\ParserAbstract
 {
-    protected $tokenToSymbolMapSize = 393;
-    protected $actionTableSize = 1178;
-    protected $gotoTableSize = 582;
+    protected $tokenToSymbolMapSize = 395;
+    protected $actionTableSize = 1179;
+    protected $gotoTableSize = 685;
 
-    protected $invalidSymbol = 166;
+    protected $invalidSymbol = 167;
     protected $errorSymbol = 1;
     protected $defaultAction = -32766;
     protected $unexpectedTokenRule = 32767;
 
-    protected $YY2TBLSTATE = 401;
-    protected $numNonLeafStates = 700;
+    protected $YY2TBLSTATE = 415;
+    protected $numNonLeafStates = 702;
 
     protected $symbolToName = array(
         "EOF",
@@ -67,7 +67,8 @@ class Php7 extends \PhpParser\ParserAbstract
         "T_BOOLEAN_AND",
         "'|'",
         "'^'",
-        "'&'",
+        "T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG",
+        "T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG",
         "T_IS_EQUAL",
         "T_IS_NOT_EQUAL",
         "T_IS_IDENTICAL",
@@ -199,700 +200,725 @@ class Php7 extends \PhpParser\ParserAbstract
     );
 
     protected $tokenToSymbol = array(
-            0,  166,  166,  166,  166,  166,  166,  166,  166,  166,
-          166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
-          166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
-          166,  166,  166,   55,  164,  166,  165,   54,   37,  166,
-          161,  162,   52,   49,    8,   50,   51,   53,  166,  166,
-          166,  166,  166,  166,  166,  166,  166,  166,   31,  157,
-           43,   16,   45,   30,   67,  166,  166,  166,  166,  166,
-          166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
-          166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
-          166,   69,  166,  158,   36,  166,  163,  166,  166,  166,
-          166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
-          166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
-          166,  166,  166,  159,   35,  160,   57,  166,  166,  166,
-          166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
-          166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
-          166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
-          166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
-          166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
-          166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
-          166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
-          166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
-          166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
-          166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
-          166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
-          166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
-          166,  166,  166,  166,  166,  166,    1,    2,    3,    4,
+            0,  167,  167,  167,  167,  167,  167,  167,  167,  167,
+          167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
+          167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
+          167,  167,  167,   56,  165,  167,  166,   55,  167,  167,
+          162,  163,   53,   50,    8,   51,   52,   54,  167,  167,
+          167,  167,  167,  167,  167,  167,  167,  167,   31,  158,
+           44,   16,   46,   30,   68,  167,  167,  167,  167,  167,
+          167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
+          167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
+          167,   70,  167,  159,   36,  167,  164,  167,  167,  167,
+          167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
+          167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
+          167,  167,  167,  160,   35,  161,   58,  167,  167,  167,
+          167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
+          167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
+          167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
+          167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
+          167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
+          167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
+          167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
+          167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
+          167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
+          167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
+          167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
+          167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
+          167,  167,  167,  167,  167,  167,    1,    2,    3,    4,
             5,    6,    7,    9,   10,   11,   12,   13,   14,   15,
            17,   18,   19,   20,   21,   22,   23,   24,   25,   26,
-           27,   28,   29,   32,   33,   34,   38,   39,   40,   41,
-           42,   44,   46,   47,   48,   56,   58,   59,   60,   61,
-           62,   63,   64,   65,   66,   68,   70,   71,   72,   73,
-           74,   75,   76,   77,   78,   79,   80,   81,   82,   83,
-           84,   85,   86,   87,   88,   89,   90,   91,   92,   93,
-           94,   95,   96,   97,   98,   99,  100,  101,  102,  103,
-          104,  105,  106,  107,  108,  109,  110,  111,  112,  113,
-          114,  115,  116,  117,  118,  119,  120,  121,  122,  123,
-          124,  125,  126,  127,  128,  129,  130,  131,  132,  133,
-          134,  135,  136,  137,  138,  139,  140,  141,  142,  143,
-          144,  145,  146,  147,  148,  149,  150,  151,  152,  153,
-          154,  155,  156
+           27,   28,   29,   32,   33,   34,   37,   38,   39,   40,
+           41,   42,   43,   45,   47,   48,   49,   57,   59,   60,
+           61,   62,   63,   64,   65,   66,   67,   69,   71,   72,
+           73,   74,   75,   76,   77,   78,   79,   80,   81,   82,
+           83,   84,   85,   86,   87,   88,   89,   90,   91,   92,
+           93,   94,   95,   96,   97,   98,   99,  100,  101,  102,
+          103,  104,  105,  106,  107,  108,  109,  110,  111,  112,
+          113,  114,  115,  116,  117,  118,  119,  120,  121,  122,
+          123,  124,  125,  126,  127,  128,  129,  130,  131,  132,
+          133,  134,  135,  136,  137,  138,  139,  140,  141,  142,
+          143,  144,  145,  146,  147,  148,  149,  150,  151,  152,
+          153,  154,  155,  156,  157
     );
 
     protected $action = array(
-          130,  131,  132,  561,  133,  134,    0,  710,  711,  712,
-          135,   36,  896,  537,  538,-32766, 1231,-32766,-32766,-32766,
-         -558, 1164,  785,  907,  434,  435,  436, -558,-32766,-32766,
-        -32766, -299,-32766,  973,-32766,  247,-32766, -190,-32766,-32766,
-        -32766,-32766,-32766,  465,-32766,-32766,-32766,-32766,-32766,-32766,
-        -32766,-32766,  124,  796,  713,-32766,-32766,  392, 1043, 1044,
-         1045, 1042, 1041, 1040,-32766,-32766,-32766,-32766,  263,  136,
-          375,  717,  718,  719,  720,  980,  981,  401, 1043, 1044,
-         1045, 1042, 1041, 1040,  721,  722,  723,  724,  725,  726,
-          727,  728,  729,  730,  731,  751,  562,  752,  753,  754,
-          755,  743,  744,  376,  377,  746,  747,  732,  733,  734,
-          736,  737,  738,  336,  778,  779,  780,  781,  782,  739,
-          740,  563,  564,  772,  763,  761,  762,  775,  758,  759,
-         -189,  978,  565,  566,  757,  567,  568,  569,  570,  571,
-          572,  533, -555, -509,-32766,-32766,  760,  573,  574, -555,
-          137,  980,  981,  313,  130,  131,  132,  561,  133,  134,
-          994,  710,  711,  712,  135,   36,-32766,-32766,-32766,-32766,
-          687,-32766,-32766,-32766,   80, 1164,  553, -558,  629,   24,
-          312, -558,-32766,-32766,-32766, -299,-32766,-32766,-32766,  247,
-        -32766, -190,-32766,-32766,-32766,-32766,-32766,-32766,-32766,-32766,
-        -32766, 1203,  432,  433,-32766,-32766, -509, -509,  713,  795,
-        -32766,  392,  395,-32766,-32766,-32766,  443,  444,-32766,  438,
-          433, -509,  263,  136,  375,  717,  718,  719,  720,  395,
-          -83,  401,  237, -509,-32766, -515,-32766,-32766,  721,  722,
-          723,  724,  725,  726,  727,  728,  729,  730,  731,  751,
-          562,  752,  753,  754,  755,  743,  744,  376,  377,  746,
-          747,  732,  733,  734,  736,  737,  738,  336,  778,  779,
-          780,  781,  782,  739,  740,  563,  564,  772,  763,  761,
-          762,  775,  758,  759, -189,    2,  565,  566,  757,  567,
-          568,  569,  570,  571,  572,  -83,   81,   82,   83, -555,
-          760,  573,  574, -555,  137,  735,  705,  706,  707,  708,
-          709, 1251,  710,  711,  712,  748,  749,   33, 1250,   84,
-           85,   86,   87,   88,   89,   90,   91,   92,   93,   94,
-           95,   96,   97,   98,   99,  100,  101,  102,  103,  104,
-          105,  106,   12,  265,-32766,-32766,-32766,  104,  105,  106,
-           31,  265,  970,  969,  968,  107,  101,  102,  103,  713,
-        -32766,-32766,-32766,  107,  459,-32766,  583,-32766,-32766,-32766,
-        -32766,-32766,-32766,  714,  715,  716,  717,  718,  719,  720,
-         -259,-32766,  783,-32766,-32766,-32766,-32766,-32766,  126,  721,
-          722,  723,  724,  725,  726,  727,  728,  729,  730,  731,
-          751,  774,  752,  753,  754,  755,  743,  744,  745,  773,
-          746,  747,  732,  733,  734,  736,  737,  738,  777,  778,
-          779,  780,  781,  782,  739,  740,  741,  742,  772,  763,
-          761,  762,  775,  758,  759,  142,  938,  750,  756,  757,
-          764,  765,  767,  766,  768,  769, -549,-32766,-32766,-32766,
-         -549,  760,  771,  770,   48,   49,   50,  492,   51,   52,
-          790,  236,  589, -510,   53,   54,  249,   55,-32766,  993,
+          131,  132,  133,  563,  134,  135,    0,  714,  715,  716,
+          136,   36,-32766,-32766,-32766,  462,-32766,-32766,-32766,-32767,
+        -32767,-32767,-32767,  100,  101,  102,  103,  104, -303,  979,
+        -32766,-32766,-32766,-32766,    2,  708,  707,-32766,  999,-32766,
         -32766,-32766,-32766,-32766,-32766,-32766,-32767,-32767,-32767,-32767,
-        -32767,  296,-32767,-32767,-32767,-32767,   99,  100,  101,  102,
-          103, 1276,  460,  787, 1277,  821,  298,  822,  274,  482,
-         1191,   56,   57, -337,  310, -337, -508,   58, 1171,   59,
-          242,  243,   60,   61,   62,   63,   64,   65,   66,   67,
-         1035,   26,  264,   68,  416,  493, -510, -510,  325, 1197,
-         1198,  494,  349,  794, 1171,  791,  353, 1195,   40,   23,
-          495, -510,  496,  793,  497,  487,  498,   11,  358,  499,
-          500,  645,  646, -510,   42,   43,  417,  421,  419,  878,
-           44,  501,  939,  401,  -14,  360,  348,  324,  789, -508,
-         -508,  412, -507,  675,  502,  503,  504,  427,  428,   47,
-          794,  146,  380,  978, -508,  413,  505,  506,  794, 1185,
-         1186, 1187, 1188, 1182, 1183,  284, -508,  414, -514, 1247,
-          415, 1189, 1184,  980,  981, 1166, 1165, 1167,  285,  821,
-          878,  822,  800,   69,  794,  308,  309,  312,   34,  108,
-          109,  110,  111,  112,  113,  114,  115,  116,  117,  118,
-          119,  120, -150, -150, -150, -507, -507, 1166, 1165, 1167,
-          678,  868,  288,  289, 1021,-32766, 1020, -150,  698, -150,
-         -507, -150,  147, -150,  244,  445,  446,  352,  138, -108,
-         1079, 1081, -507,  418,  312,  621,  622,  148,   73,  125,
-          150, -507,  312,  151, -108, -108,  152,  785,  -85,  154,
-           35,  -49,  -77,  854, -108, -108, -108, -108,  121,  285,
-        -32766,  122,  868,  127,   73,  128, 1164,  141,  312,  155,
-          878,  156,  157,-32766,-32766,-32766,  158,-32766,  277,-32766,
-          878,-32766,  107,  -73,-32766,  880,  878,  673, -150,-32766,
-        -32766,-32766,  -71,-32766,  -70,-32766,-32766,  -69,  129, 1164,
-          679,-32766,  392, -512, -507, -507,-32766,-32766,-32766,-32766,
-        -32766,  -68,-32766,  878,-32766,  -67,  680,-32766,  -66, -507,
-          -65,  -64,-32766,-32766,-32766, 1171,  -45,  139,-32766,-32766,
-          878, -507,  -16,  312,-32766,  392,  880,  246,  673,   72,
-        -32766,  145,-32766,  682, 1164,  266, 1164,  273,  688,   -4,
-          878,  691,  868,-32766,-32766,-32766,  877,-32766,  144,-32766,
-          689,-32766,  868,-32766,-32766,  275, -512, -512,  868,-32766,
-        -32766,-32766,  892,-32766,  248,-32766,-32766,  276,  278, 1164,
-         1162,-32766,  392,  980,  981,  279,-32766,-32766,-32766,-32766,
-        -32766,  318,-32766, -512,-32766,  868,  265,-32766,  653,  794,
-           46,  143,-32766,-32766,-32766,  794,  666,  785,-32766,-32766,
-        -32766,  541,  868,-32766,-32766,  392, 1164, 1049, 1166, 1165,
-         1167, 1278,-32766,-32766,-32766,-32766,  880,-32766,  673,-32766,
-        -32766,-32766,  868,  630,-32766,  250,  880,  535,  673,-32766,
-        -32766,-32766,  924,  635,  673,-32766,-32766,  648,   13,  290,
-         -108,-32766,  392,  440,  418,  794,  406,  470, 1266,-32766,
-          293,  283,  636,  286,  287, -108, -108,   26,  878,  880,
-          649,  673,  619, -473,  813, -108, -108, -108, -108,  794,
-          285,-32766,  878, 1195,  411,   73,  880, 1164,  673,  312,
-          123,  908,  909,  291,-32766,-32766,-32766,    9,-32766,  297,
-        -32766,  285,-32766, 1202,  793,-32766,  880,  894,  673,   -4,
-        -32766,-32766,-32766,    0, 1019, -463,-32766,-32766,  547,   32,
-          245, 1204,-32766,  392,  587,    7,   15,  351, 1192,   38,
-        -32766,    0,  505,  506,  805, 1185, 1186, 1187, 1188, 1182,
-         1183,   39,  695,  696,  859,  948,  925, 1189, 1184,  932,
-          868,  922,  933,  857,  920, -262, 1024, 1027, 1028,   71,
-         1025, 1026,  309,  312,  868, 1217, -237, -237, -237, 1032,
-           30, 1235,  418, 1269,  624, -543,  307,  350,  674,  677,
-         -236, -236, -236, -108, -108,  681,  418,   26,  683,  684,
-          685,  686,  854, -108, -108, -108, -108, -108, -108,  794,
-          690,  676, -260, 1195,  692,  855,  854, -108, -108, -108,
-         -108, 1273, 1275, -108,  816,  815,  824,  901, -108,  940,
-         -108,  823, 1274,  900,  880,  292,  673, -237, -108, -108,
-         -108, -108, -108, -108, -108,  902,  899, 1150,  880,  887,
-          673, -236,  895,  885,  930,  931, 1272, 1229, 1218, 1236,
-         1242, 1245,    0,  506, -541, 1185, 1186, 1187, 1188, 1182,
-         1183, -515, -514, -513,    1,   27,   28, 1189, 1184,   37,
-           41,   45,   70, -313, -259,   74,   75,   76,   77,   71,
-           78,   79,  309,  312,  140,  149,  153,  241,  314,  337,
-          338,  339,  340,  341,  342,  343,  344,  345,  346,  347,
-          407,  408,    0,   17,   18,   19,   20,   22,  379,  461,
-          462,  469,  472,  473,  474,  475,  479,  480,  481,  490,
-          660, 1175, 1118, 1193,  995, 1154, -264, -100,   16,   21,
-           25,  282,  378,  580,  584,  611,  665, 1122, 1170, 1119,
-         1248,    0, -477, 1135,    0, 1196,    0,  312
+        -32767,-32766,   12,-32766,-32766,  717,  902,  800,-32766,-32766,
+        -32766, 1049, 1050, 1051, 1048, 1047, 1046,  276,   33,  265,
+          137,  391,  721,  722,  723,  724, -192, 1025,  415,-32766,
+          127,-32766,-32766,-32766,-32766,  725,  726,  727,  728,  729,
+          730,  731,  732,  733,  734,  735,  755,  564,  756,  757,
+          758,  759,  747,  748,  330,  331,  750,  751,  736,  737,
+          738,  740,  741,  742,  341,  782,  783,  784,  785,  786,
+          743,  744,  565,  566,  776,  767,  765,  766,  779,  762,
+          763,  789, -191,  567,  568,  761,  569,  570,  571,  572,
+          573,  574,  415, -563,  463, 1171,  143,  764,  575,  576,
+         -563,  138, -341,  984, -341,  131,  132,  133,  563,  134,
+          135, 1000,  714,  715,  716,  136,   36, 1049, 1050, 1051,
+         1048, 1047, 1046,  986,  987,  539,  540, -110,-32766,-32766,
+        -32766, 1169, -110, -303, -110,  913,  440,  441,  442,  294,
+          708,  707, -110, -110, -110, -110, -110, -110, -110,-32766,
+         1238,-32766,-32766,-32766,-32766,-32766,-32766,-32766,  708,  707,
+          717,-32766,-32766,-32766,  799,  689, 1173, 1172, 1174, 1173,
+         1172, 1174,  251, 1027,  265,  137,  391,  721,  722,  723,
+          724, -192,-32766,  415,-32766,-32766,-32766, -317,  794,  298,
+          725,  726,  727,  728,  729,  730,  731,  732,  733,  734,
+          735,  755,  564,  756,  757,  758,  759,  747,  748,  330,
+          331,  750,  751,  736,  737,  738,  740,  741,  742,  341,
+          782,  783,  784,  785,  786,  743,  744,  565,  566,  776,
+          767,  765,  766,  779,  762,  763,  300, -191,  567,  568,
+          761,  569,  570,  571,  572,  573,  574, -514,   81,   82,
+           83, -563,  764,  575,  576, -563,  138,  739,  709,  710,
+          711,  712,  713,  795,  714,  715,  716,  752,  753,   35,
+          238,   84,   85,   86,   87,   88,   89,   90,   91,   92,
+           93,   94,   95,   96,   97,   98,   99,  100,  101,  102,
+          103,  104,  105,  106,  107,-32766,  267,-32766,-32766,-32766,
+          105,  106,  107,  312,  267,-32766,-32766,-32766,  108,   80,
+         -514, -514,  717,  327,  944,  314,  108,  279,-32766,  328,
+        -32766,-32766,-32766,-32766,-32766, -514,  718,  719,  720,  721,
+          722,  723,  724,  355, 1178,  787, -513, -514,  315, -520,
+         1178,  585,  725,  726,  727,  728,  729,  730,  731,  732,
+          733,  734,  735,  755,  778,  756,  757,  758,  759,  747,
+          748,  749,  777,  750,  751,  736,  737,  738,  740,  741,
+          742,  781,  782,  783,  784,  785,  786,  743,  744,  745,
+          746,  776,  767,  765,  766,  779,  762,  763,  148,  535,
+          754,  760,  761,  768,  769,  771,  770,  772,  773, -513,
+         -513,  448,  449,-32766,  764,  775,  774,   48,   49,   50,
+          494,   51,   52,  591, -513,  798,  -85,   53,   54, -263,
+           55,  798,  791,  986,  987,  359, -513, 1254, -519,-32766,
+        -32766,-32766,-32766,  825,  125,  826, 1198,  237,  984, -554,
+          882,  945, 1283, -554, 1258, 1284,  102,  103,  104, 1210,
+          882, 1257,  986,  987,  798,   56,   57, 1273,  986,  987,
+         -110,   58,  374,   59,  244,  245,   60,   61,   62,   63,
+           64,   65,   66,   67,  425,   26,  266,   68,  429,  495,
+          680,  797,  -85, 1204, 1205,  496,  376,  798,   11,  426,
+          287, 1202,   40,   23,  497,   73,  498,  793,  499,  314,
+          500,   73,  677,  501,  502,  314,  789,  427,   42,   43,
+          430,  362,  361,  882,   44,  503,  485,  798,   34,  247,
+          353,  326, 1178,  872,  365,  366,  428, -515,  504,  505,
+          506,-32766,-32766,  872,  409,  804,  882, 1041,  631,   24,
+          507,  508,  122, 1192, 1193, 1194, 1195, 1189, 1190,  286,
+         -560,  -87,  -16,  367,  366, 1196, 1191, -560,  149, 1173,
+         1172, 1174,  287,  409,  882,  151,  681,   69, -512,  310,
+          311,  314,   30,  109,  110,  111,  112,  113,  114,  115,
+          116,  117,  118,  119,  120,  121,  140, -152, -152, -152,
+         -515, -515,  314,  882,  682,  139,  872,  884, -517,  675,
+          152,  314, -152,  798, -152, -515, -152,  884, -152,  675,
+          976,  975,  974,  708,  707, 1085, 1087, -515,  360,  872,
+          825,  153,  826,  684,  882, 1026, -512,  700,  155, -110,
+         -110, -512, -512,  647,  648,  147,  394,  123,  858, -110,
+         -110, -110, -110,  363,  364,   31, -512,  872, -110,  128,
+        -32766,  368,  369,  129,  691,  142, 1171,  156, -512,  708,
+          707, -517, -517,-32766,-32766,-32766,  157,-32766,  158,-32766,
+          884,-32766,  675, -152,-32766,  159,  872,  -79,  287,-32766,
+        -32766,-32766,  -75,   73,  -73,-32766,-32766,  314, -517, -512,
+         -512,-32766,  406,  884,  -72,  675,-32766,  708,  707,-32766,
+          -51,  -71, 1171,  -70, -512,  623,  624,  872, -560,-32766,
+        -32766,-32766, -560,-32766,  -69,-32766, -512,-32766,  -68,  -67,
+        -32766,  930,  -66,  675,  -47,-32766,-32766,-32766,  -18,   72,
+           26,-32766,-32766,  146,  268,  275,  690,-32766,  406,  693,
+          881,  145,  798,-32766,   46,-32766, 1202,  277,  278, 1171,
+          884,  280,  675,  281,  320,  898,-32766,-32766,-32766,  108,
+        -32766,  655,-32766,  267,-32766,  144,  789,-32766, 1285,  543,
+          668,  130,-32766,-32766,-32766,  650,  798,-32766,-32766,-32766,
+         1055,  884,  638,  675,-32766,  406,  537,  295,  621,  632,
+          293,  424,-32766,   13,   47,  507,  508,  445, 1192, 1193,
+         1194, 1195, 1189, 1190,  473,-32766,  914,  288,  289, -478,
+         1196, 1191, 1209, 1211,-32766,  651,  637,  549,   -4,  882,
+         1171, 1199,   71,  589, -468,  311,  314,-32766,-32766,-32766,
+          900,-32766,  314,-32766,  124,-32766,    0,    0,-32766,    0,
+            0,  915,  292,-32766,-32766,-32766,    0,-32766,    0,-32766,
+        -32766,    0,  299, 1171,    0,-32766,  406,  290,  291,    0,
+        -32766,-32766,-32766,-32766,-32766,    0,-32766,    0,-32766,    0,
+            7,-32766,  358,   15,  357,  468,-32766,-32766,-32766,    0,
+        -32766,  797,-32766,-32766,  126,  287, 1171,  555,-32766,  406,
+          882,   38,   39,-32766,-32766,-32766,-32766,-32766,  809,-32766,
+          697,-32766,  872,  698,-32766,  863,  954,  931,  938,-32766,
+        -32766,-32766,  928,  939,  861,-32766,-32766,  926, 1030, 1033,
+         1034,-32766,  406, 1031,  360, 1032,  420,  882, 1038,-32766,
+         1224,  285,   32, 1242, 1276, -110, -110,  626,  694,  309,
+          356,  676,  679,  683,  817, -110, -110, -110, -110,  685,
+          686,-32766,  687,  688,  692,  678, 1203, 1171,  859, 1280,
+         1282,  820,  819,  828,-32766,-32766,-32766,    9,-32766,  907,
+        -32766,  946,-32766,  872,  827,-32766,  884, 1281,  675,   -4,
+        -32766,-32766,-32766,  906,  908,  905,-32766,-32766, 1157, -241,
+         -241, -241,-32766,  406,  891,  360,  901,   26,  889,  936,
+        -32766,  937, 1279, 1236, 1225, 1243, -110, -110, 1249,  798,
+          872, 1252, -266, 1202, -548,  858, -110, -110, -110, -110,
+         -546, -520, -519, -518,    1,   27, -240, -240, -240,   28,
+           37,   41,  360,   45,   70,   74,   75,   76,   77,    0,
+           78,   79,  141, -110, -110,  150,  154,  884,  243,  675,
+         -241, -264,  858, -110, -110, -110, -110,  316,  342,  343,
+          344,  345,  346,  508,  347, 1192, 1193, 1194, 1195, 1189,
+         1190,  348,  349,  350,  351,  352,  354, 1196, 1191,  421,
+         -482, -263,   17,   18,  884,   19,  675, -240,   20,   71,
+            0,   22,  311,  314,  393,  464,  465,  472,  475,  476,
+          477,  478,  482,  483,  484,  492,  662, 1182, 1125, 1200,
+         1001, 1161, -268, -102,   16,   21,   25,  284,  392,  582,
+          586,  613,  667, 1129, 1177, 1126, 1255,    0, 1142
     );
 
     protected $actionCheck = array(
             2,    3,    4,    5,    6,    7,    0,    9,   10,   11,
-           12,   13,    1,  116,  117,   73,    1,    9,   10,   11,
-            1,   79,   79,  126,  127,  128,  129,    8,   86,   87,
-           88,    8,   90,    1,   92,   37,   94,    8,   30,   97,
-           32,   33,   34,  101,  102,  103,  104,    9,   10,   11,
-          108,  109,   14,    1,   56,  115,  114,  115,  115,  116,
-          117,  118,  119,  120,  122,    9,   10,   11,   70,   71,
-           72,   73,   74,   75,   76,  135,  136,   79,  115,  116,
-          117,  118,  119,  120,   86,   87,   88,   89,   90,   91,
+           12,   13,    9,   10,   11,   31,    9,   10,   11,   44,
+           45,   46,   47,   48,   49,   50,   51,   52,    8,    1,
+            9,   10,   11,   30,    8,   37,   38,   30,    1,   32,
+           33,   34,   35,   36,   37,   38,   39,   40,   41,   42,
+           43,   30,    8,   32,   33,   57,    1,    1,    9,   10,
+           11,  116,  117,  118,  119,  120,  121,   30,    8,   71,
+           72,   73,   74,   75,   76,   77,    8,    1,   80,   30,
+            8,   32,   33,   34,   35,   87,   88,   89,   90,   91,
            92,   93,   94,   95,   96,   97,   98,   99,  100,  101,
           102,  103,  104,  105,  106,  107,  108,  109,  110,  111,
           112,  113,  114,  115,  116,  117,  118,  119,  120,  121,
           122,  123,  124,  125,  126,  127,  128,  129,  130,  131,
-            8,  115,  134,  135,  136,  137,  138,  139,  140,  141,
-          142,   84,    1,   69,    9,   10,  148,  149,  150,    8,
-          152,  135,  136,   69,    2,    3,    4,    5,    6,    7,
-          162,    9,   10,   11,   12,   13,    9,   10,   11,   73,
-          159,    9,   10,   11,  159,   79,   80,  158,   74,   75,
-          165,  162,   86,   87,   88,  162,   90,   30,   92,   37,
-           94,  162,   30,   97,   32,   33,   34,   35,  102,  103,
-          104,  144,  105,  106,  108,  109,  132,  133,   56,  157,
-          114,  115,  115,    9,   10,   11,  132,  133,  122,  105,
-          106,  147,   70,   71,   72,   73,   74,   75,   76,  115,
-           31,   79,   14,  159,   30,  161,   32,   33,   86,   87,
-           88,   89,   90,   91,   92,   93,   94,   95,   96,   97,
-           98,   99,  100,  101,  102,  103,  104,  105,  106,  107,
-          108,  109,  110,  111,  112,  113,  114,  115,  116,  117,
-          118,  119,  120,  121,  122,  123,  124,  125,  126,  127,
-          128,  129,  130,  131,  162,    8,  134,  135,  136,  137,
-          138,  139,  140,  141,  142,   96,    9,   10,   11,  158,
-          148,  149,  150,  162,  152,    2,    3,    4,    5,    6,
-            7,    1,    9,   10,   11,   12,   13,   30,    8,   32,
-           33,   34,   35,   36,   37,   38,   39,   40,   41,   42,
-           43,   44,   45,   46,   47,   48,   49,   50,   51,   52,
-           53,   54,    8,   56,    9,   10,   11,   52,   53,   54,
-            8,   56,  118,  119,  120,   68,   49,   50,   51,   56,
-            9,   10,   11,   68,   31,   30,    1,   32,   33,   34,
-           35,   36,   37,   70,   71,   72,   73,   74,   75,   76,
-          162,   30,   79,   32,   33,   34,   35,   36,    8,   86,
+          132,   80,    8,  135,  136,  137,  138,  139,  140,  141,
+          142,  143,   80,    1,  160,   80,    8,  149,  150,  151,
+            8,  153,  106,  116,  108,    2,    3,    4,    5,    6,
+            7,  163,    9,   10,   11,   12,   13,  116,  117,  118,
+          119,  120,  121,  136,  137,  117,  118,  101,    9,   10,
+           11,  116,  106,  163,  108,  127,  128,  129,  130,  113,
+           37,   38,  116,  117,  118,  119,  120,  121,  122,   30,
+            1,   32,   33,   34,   35,   36,   37,   38,   37,   38,
+           57,    9,   10,   11,  158,  160,  154,  155,  156,  154,
+          155,  156,    8,  161,   71,   72,   73,   74,   75,   76,
+           77,  163,   30,   80,   32,   33,   34,  161,   80,    8,
            87,   88,   89,   90,   91,   92,   93,   94,   95,   96,
            97,   98,   99,  100,  101,  102,  103,  104,  105,  106,
           107,  108,  109,  110,  111,  112,  113,  114,  115,  116,
           117,  118,  119,  120,  121,  122,  123,  124,  125,  126,
-          127,  128,  129,  130,  131,    8,   31,  134,  135,  136,
-          137,  138,  139,  140,  141,  142,  158,    9,   10,   11,
-          162,  148,  149,  150,    2,    3,    4,    5,    6,    7,
-           79,   96,   50,   69,   12,   13,    8,   15,   30,    1,
-           32,   33,   34,   35,   36,   37,   38,   39,   40,   41,
-           42,    8,   43,   44,   45,   46,   47,   48,   49,   50,
-           51,   79,  159,   79,   82,  105,    8,  107,   30,  100,
-            1,   49,   50,  105,    8,  107,   69,   55,    1,   57,
-           58,   59,   60,   61,   62,   63,   64,   65,   66,   67,
-          121,   69,   70,   71,   72,   73,  132,  133,    8,   77,
-           78,   79,    8,   81,    1,  154,    8,   85,   86,   87,
-           88,  147,   90,  153,   92,  105,   94,  107,    8,   97,
-           98,   74,   75,  159,  102,  103,  104,  105,  106,    1,
-          108,  109,  157,   79,   31,    8,  114,  115,  154,  132,
-          133,    8,   69,  159,  122,  123,  124,  105,  106,   69,
-           81,  100,  101,  115,  147,    8,  134,  135,   81,  137,
-          138,  139,  140,  141,  142,  143,  159,    8,  161,    1,
-            8,  149,  150,  135,  136,  153,  154,  155,  156,  105,
-            1,  107,    8,  161,   81,  163,  164,  165,   16,   17,
-           18,   19,   20,   21,   22,   23,   24,   25,   26,   27,
-           28,   29,   74,   75,   76,  132,  133,  153,  154,  155,
-           31,   83,  132,  133,  160,    9,  157,   89,  159,   91,
-          147,   93,   14,   95,   37,  105,  106,  147,  159,  126,
-           58,   59,  159,  105,  165,  110,  111,   14,  161,  159,
-           14,   69,  165,   14,  116,  117,   14,   79,   31,   14,
-           14,   31,   31,  125,  126,  127,  128,  129,   16,  156,
-           73,   16,   83,   16,  161,   16,   79,   16,  165,   16,
-            1,   16,   16,   86,   87,   88,   16,   90,   30,   92,
-            1,   94,   68,   31,   97,  157,    1,  159,  160,  102,
-          103,  104,   31,   73,   31,  108,  109,   31,   31,   79,
-           31,  114,  115,   69,  132,  133,   86,   87,   88,  122,
-           90,   31,   92,    1,   94,   31,   31,   97,   31,  147,
-           31,   31,  102,  103,  104,    1,   31,  159,  108,  109,
-            1,  159,   31,  165,  114,  115,  157,   37,  159,  152,
-           73,   31,  122,   31,   79,   31,   79,   31,   31,    0,
-            1,   31,   83,   86,   87,   88,   31,   90,   31,   92,
-           31,   94,   83,  115,   97,   35,  132,  133,   83,  102,
-          103,  104,   37,   73,   37,  108,  109,   35,   35,   79,
-          115,  114,  115,  135,  136,   35,   86,   87,   88,  122,
-           90,   35,   92,  159,   94,   83,   56,   97,   76,   81,
-           69,   69,  102,  103,  104,   81,   91,   79,  108,  109,
-           73,   88,   83,  115,  114,  115,   79,   81,  153,  154,
-          155,   82,  122,   86,   87,   88,  157,   90,  159,   92,
-           84,   94,   83,   89,   97,   37,  157,   84,  159,  102,
-          103,  104,  157,   95,  159,  108,  109,   93,   96,  130,
-          126,  114,  115,   96,  105,   81,  107,   96,   84,  122,
-          113,  112,   99,  132,  133,  116,  117,   69,    1,  157,
-           99,  159,  112,  147,  125,  126,  127,  128,  129,   81,
-          156,   73,    1,   85,  126,  161,  157,   79,  159,  165,
-          159,  126,  126,  131,   86,   87,   88,  148,   90,  130,
-           92,  156,   94,  144,  153,   97,  157,  152,  159,  160,
-          102,  103,  104,   -1,    1,  147,  108,  109,  151,  145,
-          146,  144,  114,  115,  151,  147,  147,  147,  158,  157,
-          122,   -1,  134,  135,  158,  137,  138,  139,  140,  141,
-          142,  157,  157,  157,  157,  157,  157,  149,  150,  157,
-           83,  157,  157,  157,  157,  162,  157,  157,  157,  161,
-          157,  157,  164,  165,   83,  158,   99,  100,  101,  157,
-          159,  158,  105,  158,  158,  161,  159,  159,  159,  159,
-           99,  100,  101,  116,  117,  159,  105,   69,  159,  159,
-          159,  159,  125,  126,  127,  128,  129,  116,  117,   81,
-          159,  159,  162,   85,  160,  160,  125,  126,  127,  128,
-          129,  160,  160,  100,  160,  160,  160,  160,  105,  160,
-          107,  160,  160,  160,  157,  112,  159,  160,  115,  116,
-          117,  118,  119,  120,  121,  160,  160,  160,  157,  160,
-          159,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-          160,  160,   -1,  135,  161,  137,  138,  139,  140,  141,
-          142,  161,  161,  161,  161,  161,  161,  149,  150,  161,
-          161,  161,  161,  160,  162,  161,  161,  161,  161,  161,
-          161,  161,  164,  165,  161,  161,  161,  161,  161,  161,
-          161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
-          161,  161,   -1,  162,  162,  162,  162,  162,  162,  162,
-          162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-          162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-          162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-          162,   -1,  163,  163,   -1,  164,   -1,  165
+          127,  128,  129,  130,  131,  132,    8,  163,  135,  136,
+          137,  138,  139,  140,  141,  142,  143,   70,    9,   10,
+           11,  159,  149,  150,  151,  163,  153,    2,    3,    4,
+            5,    6,    7,  155,    9,   10,   11,   12,   13,   30,
+           14,   32,   33,   34,   35,   36,   37,   38,   39,   40,
+           41,   42,   43,   44,   45,   46,   47,   48,   49,   50,
+           51,   52,   53,   54,   55,    9,   57,    9,   10,   11,
+           53,   54,   55,    8,   57,    9,   10,   11,   69,  160,
+          133,  134,   57,    8,   31,  166,   69,   30,   30,    8,
+           32,   33,   34,   35,   36,  148,   71,   72,   73,   74,
+           75,   76,   77,    8,    1,   80,   70,  160,   70,  162,
+            1,    1,   87,   88,   89,   90,   91,   92,   93,   94,
+           95,   96,   97,   98,   99,  100,  101,  102,  103,  104,
+          105,  106,  107,  108,  109,  110,  111,  112,  113,  114,
+          115,  116,  117,  118,  119,  120,  121,  122,  123,  124,
+          125,  126,  127,  128,  129,  130,  131,  132,   14,   85,
+          135,  136,  137,  138,  139,  140,  141,  142,  143,  133,
+          134,  133,  134,  116,  149,  150,  151,    2,    3,    4,
+            5,    6,    7,   51,  148,   82,   31,   12,   13,  163,
+           15,   82,   80,  136,  137,    8,  160,    1,  162,    9,
+           10,   11,  116,  106,   14,  108,    1,   97,  116,  159,
+            1,  158,   80,  163,    1,   83,   50,   51,   52,  145,
+            1,    8,  136,  137,   82,   50,   51,   85,  136,  137,
+          127,   56,    8,   58,   59,   60,   61,   62,   63,   64,
+           65,   66,   67,   68,    8,   70,   71,   72,   73,   74,
+           31,  154,   97,   78,   79,   80,  106,   82,  108,    8,
+          157,   86,   87,   88,   89,  162,   91,  155,   93,  166,
+           95,  162,  160,   98,   99,  166,   80,    8,  103,  104,
+          105,  106,  107,    1,  109,  110,  101,   82,  146,  147,
+          115,  116,    1,   84,  106,  107,    8,   70,  123,  124,
+          125,    9,   10,   84,  116,    8,    1,  122,   75,   76,
+          135,  136,   16,  138,  139,  140,  141,  142,  143,  144,
+            1,   31,   31,  106,  107,  150,  151,    8,   14,  154,
+          155,  156,  157,  116,    1,   14,   31,  162,   70,  164,
+          165,  166,   16,   17,   18,   19,   20,   21,   22,   23,
+           24,   25,   26,   27,   28,   29,  160,   75,   76,   77,
+          133,  134,  166,    1,   31,  160,   84,  158,   70,  160,
+           14,  166,   90,   82,   92,  148,   94,  158,   96,  160,
+          119,  120,  121,   37,   38,   59,   60,  160,  106,   84,
+          106,   14,  108,   31,    1,  158,   70,  160,   14,  117,
+          118,  133,  134,   75,   76,  101,  102,   16,  126,  127,
+          128,  129,  130,  106,  107,   14,  148,   84,  127,   16,
+           74,  106,  107,   16,   31,   16,   80,   16,  160,   37,
+           38,  133,  134,   87,   88,   89,   16,   91,   16,   93,
+          158,   95,  160,  161,   98,   16,   84,   31,  157,  103,
+          104,  105,   31,  162,   31,  109,  110,  166,  160,  133,
+          134,  115,  116,  158,   31,  160,   74,   37,   38,  123,
+           31,   31,   80,   31,  148,  111,  112,   84,  159,   87,
+           88,   89,  163,   91,   31,   93,  160,   95,   31,   31,
+           98,  158,   31,  160,   31,  103,  104,  105,   31,  153,
+           70,  109,  110,   31,   31,   31,   31,  115,  116,   31,
+           31,   31,   82,   74,   70,  123,   86,   35,   35,   80,
+          158,   35,  160,   35,   35,   38,   87,   88,   89,   69,
+           91,   77,   93,   57,   95,   70,   80,   98,   83,   89,
+           92,   31,  103,  104,  105,   94,   82,   85,  109,  110,
+           82,  158,  100,  160,  115,  116,   85,  114,  113,   90,
+          132,  127,  123,   97,   70,  135,  136,   97,  138,  139,
+          140,  141,  142,  143,   97,  116,  127,  133,  134,  148,
+          150,  151,  145,  145,   74,  100,   96,  152,    0,    1,
+           80,  159,  162,  152,  148,  165,  166,   87,   88,   89,
+          153,   91,  166,   93,  160,   95,   -1,   -1,   98,   -1,
+           -1,  127,  131,  103,  104,  105,   -1,   74,   -1,  109,
+          110,   -1,  131,   80,   -1,  115,  116,  133,  134,   -1,
+           87,   88,   89,  123,   91,   -1,   93,   -1,   95,   -1,
+          148,   98,  148,  148,  148,  102,  103,  104,  105,   -1,
+           74,  154,  109,  110,  160,  157,   80,   81,  115,  116,
+            1,  158,  158,   87,   88,   89,  123,   91,  159,   93,
+          158,   95,   84,  158,   98,  158,  158,  158,  158,  103,
+          104,  105,  158,  158,  158,  109,  110,  158,  158,  158,
+          158,  115,  116,  158,  106,  158,  108,    1,  158,  123,
+          159,  113,  160,  159,  159,  117,  118,  159,  161,  160,
+          160,  160,  160,  160,  126,  127,  128,  129,  130,  160,
+          160,   74,  160,  160,  160,  160,  165,   80,  161,  161,
+          161,  161,  161,  161,   87,   88,   89,  149,   91,  161,
+           93,  161,   95,   84,  161,   98,  158,  161,  160,  161,
+          103,  104,  105,  161,  161,  161,  109,  110,  161,  100,
+          101,  102,  115,  116,  161,  106,  161,   70,  161,  161,
+          123,  161,  161,  161,  161,  161,  117,  118,  161,   82,
+           84,  161,  163,   86,  162,  126,  127,  128,  129,  130,
+          162,  162,  162,  162,  162,  162,  100,  101,  102,  162,
+          162,  162,  106,  162,  162,  162,  162,  162,  162,   -1,
+          162,  162,  162,  117,  118,  162,  162,  158,  162,  160,
+          161,  163,  126,  127,  128,  129,  130,  162,  162,  162,
+          162,  162,  162,  136,  162,  138,  139,  140,  141,  142,
+          143,  162,  162,  162,  162,  162,  162,  150,  151,  162,
+          164,  163,  163,  163,  158,  163,  160,  161,  163,  162,
+           -1,  163,  165,  166,  163,  163,  163,  163,  163,  163,
+          163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+          163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+          163,  163,  163,  163,  163,  163,  163,   -1,  164
     );
 
     protected $actionBase = array(
-            0,   -2,  152,  558,  779,  897,  911,  499,  484,  414,
-          834,  303,  303,  -57,  303,  303,  699,  742,  742,  759,
-          742,  609,  715,  709,  709,  709,  617,  617,  617,  617,
-          -58,  -58,   96,  697,  730,  767,  650,  838,  838,  838,
-          838,  838,  838,  838,  838,  838,  838,  838,  838,  838,
-          838,  838,  838,  838,  838,  838,  838,  838,  838,  838,
-          838,  838,  838,  838,  838,  838,  838,  838,  838,  838,
-          838,  838,  838,  838,  838,  838,  838,  838,  838,  838,
-          838,  838,  838,  838,  838,  838,  838,  838,  838,  838,
-          838,  838,  838,  838,  838,  838,  838,  838,  838,  838,
-          838,  838,  838,  838,  838,  838,  838,  838,  838,  838,
-          838,  838,  838,  838,  838,  838,  838,  838,  838,  838,
-          838,  838,  838,  838,  838,  838,  838,  838,  838,  838,
-          838,  838,  838,  838,  838,  838,  838,  838,  838,  838,
-          838,  838,  838,  838,  838,  838,  838,  838,  838,  838,
-          838,  838,  838,  838,  838,  838,  838,  838,  838,   52,
-          405,  365,  666,  999, 1005, 1001, 1006,  997,  996, 1000,
-         1002, 1007,  916,  917,  757,  918,  919,  920,  921, 1003,
-          846,  998, 1004,  287,  287,  287,  287,  287,  287,  287,
-          287,  287,  287,  287,  287,  287,  287,  287,  287,  287,
-          287,  287,  287,  287,  287,  287,  287,  287,  287,  636,
-           38,  135,   56,   56,   56,   56,   56,   56,   56,   56,
-           56,   56,   56,   56,   56,   56,   56,   56,   56,   56,
-           56,   56,  157,  157,  157,  204,  828,  828,    8,  602,
-          162,  948,  948,  948,  948,  948,  948,  948,  948,  948,
-          948,  351,  335,  438,  438,  438,  438,  438,  943,  439,
-          439,  439,  439,  533,  754,  507,  468,  399,  398,  307,
-          307,  678,  678,   16,   16,   16,   16,  -60,  -60,  -60,
-         -103,   74,  437,  390,   57,  695,  598,  598,  598,  598,
-          695,  695,  695,  695,  807, 1011,  695,  695,  695,  394,
-          503,  503,  510,  295,  295,  295,  503,  504,  783,  804,
-          504,  804,   15,  412,  728,   97,  114,  288,  728,  664,
-          761,  141,   19,  781,  472,  781,  776,  842,  872, 1008,
-          234,  793,  914,  801,  915,   84,  651,  994,  994,  994,
-          994,  994,  994,  994,  994,  994,  994,  994, 1012,  995,
-          381, 1012, 1012, 1012,  555,  381,  104,  477,  381,  786,
-          995,   52,  798,   52,   52,   52,   52,  958,   52,   52,
-           52,   52,   52,   52,  963,  731,  725,  682,  333,   52,
-          405,   11,   11,  489,   32,   11,   11,   11,   11,   52,
-           52,   52,  472,  770,  797,  550,  803,  122,  770,  770,
-          770,  199,   23,  218,   29,  440,  758,  758,  765,  766,
-          933,  933,  758,  748,  758,  766,  940,  758,  765,  765,
-          933,  765,  775,  380,  563,  520,  528,  765,  765,  577,
-          933,  473,  765,  765,  758,  758,  758,  758,  765,  589,
-          758,  458,  427,  758,  758,  765,  765,  749,  746,  799,
-          277,  933,  933,  933,  799,  524,  792,  792,  792,  815,
-          816,  790,  744,  496,  488,  604,  342,  765,  744,  744,
-          758,  540,  790,  744,  790,  744,  785,  744,  744,  744,
-          790,  744,  758,  748,  557,  744,  683,  765,  592,  334,
-          744,    6,  941,  944,  647,  945,  938,  946,  969,  947,
-          949,  849,  956,  939,  950,  935,  934,  755,  672,  675,
-          808,  756,  932,  644,  644,  644,  930,  644,  644,  644,
-          644,  644,  644,  644,  644,  672,  800,  810,  788,  753,
-          959,  677,  679,  789,  875, 1009, 1010,  795,  796,  958,
-          989,  953,  802,  681,  975,  960,  874,  847,  961,  962,
-          976,  990,  991,  881,  762,  882,  884,  806,  964,  850,
-          644,  941,  949,  939,  950,  935,  934,  720,  719,  714,
-          717,  710,  696,  691,  693,  740,  923,  844,  837,  963,
-          931,  672,  843,  971,  841,  977,  978,  848,  787,  769,
-          845,  885,  965,  966,  967,  856,  992,  814,  972,  823,
-          979,  791,  886,  980,  981,  982,  983,  887,  859,  860,
-          861,  817,  774,  870,  778,  889,  638,  773,  780,  970,
-          653,  957,  862,  891,  892,  984,  985,  986,  893,  954,
-          818,  973,  784,  974,  942,  819,  822,  656,  760,  772,
-          659,  662,  905,  906,  907,  955,  747,  752,  824,  825,
-          993,  909,  665,  826,  685,  912,  988,  686,  690,  745,
-          871,  809,  777,  782,  968,  750,  827,  913,  829,  830,
-          831,  987,  833,    0,    0,    0,    0,    0,    0,    0,
+            0,   -2,  153,  562,  868,  939,  976,  485,   62,  392,
+          817,  305,  305,   51,  305,  305,  585,  642,  642,  673,
+          642,  499,  613,  489,  489,  489,  626,  626,  626,  626,
+          672,  672,  823,  823,  856,  790,  719,  927,  927,  927,
+          927,  927,  927,  927,  927,  927,  927,  927,  927,  927,
+          927,  927,  927,  927,  927,  927,  927,  927,  927,  927,
+          927,  927,  927,  927,  927,  927,  927,  927,  927,  927,
+          927,  927,  927,  927,  927,  927,  927,  927,  927,  927,
+          927,  927,  927,  927,  927,  927,  927,  927,  927,  927,
+          927,  927,  927,  927,  927,  927,  927,  927,  927,  927,
+          927,  927,  927,  927,  927,  927,  927,  927,  927,  927,
+          927,  927,  927,  927,  927,  927,  927,  927,  927,  927,
+          927,  927,  927,  927,  927,  927,  927,  927,  927,  927,
+          927,  927,  927,  927,  927,  927,  927,  927,  927,  927,
+          927,  927,  927,  927,  927,  927,  927,  927,  927,  927,
+          927,  927,  927,  927,  927,  927,  927,  927,  927,  927,
+           56,  333,  390,  681, 1004, 1010, 1006, 1011, 1002, 1001,
+         1005, 1007, 1012,  891,  892,  760,  893,  894,  897,  900,
+         1008,  828, 1003, 1009,  289,  289,  289,  289,  289,  289,
+          289,  289,  289,  289,  289,  289,  289,  289,  289,  289,
+          289,  289,  289,  289,  289,  289,  289,  289,  289,  289,
+          336,  470,  572,  346,  346,  346,  346,  346,  346,  346,
+          346,  346,  346,  346,  346,  346,  346,  346,  346,  346,
+          346,  346,  346,    3,    3,    3,   21,  710,  710,  202,
+           49,  606,  338,  977,  977,  977,  977,  977,  977,  977,
+          977,  977,  977,  169,  169,    7,    7,    7,    7,    7,
+           76,  -25,  -25,  -25,  -25,  571,  383,  389,   37,  465,
+           46,  446,  446,  337,  337,  372,  372,  372,  372,  366,
+          366,  366,   58,  227,  316,  377,  354,   65,  476,  476,
+          476,  476,   65,   65,   65,   65,  718,  841,   65,   65,
+           65,  507,  548,  548,  774,  297,  297,  297,  548,  564,
+          751,  422,  564,  422,  199,  412,  739,  468,  497,  330,
+          739,  578,  724,  599,  142,  777,  587,  777, 1000,  742,
+          743,  701,  820,  845, 1013,  541,  732,  888,  765,  890,
+          318,  696,  999,  999,  999,  999,  999,  999,  999,  999,
+          999,  999,  999,  716,  171, 1000,  158,  716,  716,  716,
+          171,  171,  171,  171,  171,  171,  171,  171,  171,  171,
+          644,  158,  513,  608,  158,  769,  171,   56,  726,   56,
+           56,   56,   56,  946,   56,   56,   56,   56,   56,   56,
+          952,  747,  -16,   56,  333,   55,   55,  517,   28,   55,
+           55,   55,   55,   56,   56,   56,  587,  756,  715,  595,
+          721,  124,  756,  756,  756,  435,   20,  306,   68,  430,
+          736,  736,  748,  912,  912,  736,  744,  736,  748,  921,
+          736,  912,  778,   72,  516,  355,  467,  531,  912,  231,
+          736,  736,  736,  736,  549,  736,  214,  138,  736,  736,
+          761,  754,  771,   26,  912,  912,  912,  771,  375,  708,
+          708,  708,  792,  795,  725,  753,  345,  278,  577,   60,
+          767,  753,  753,  736,  504,  725,  753,  725,  753,  727,
+          753,  753,  753,  725,  753,  736,  744,  361,  753,  691,
+          568,   44,  753,    6,  922,  923,  570,  924,  918,  925,
+          967,  926,  928,  831,  936,  919,  929,  917,  913,  759,
+          576,  671,  772,  711,  911,  740,  740,  740,  909,  740,
+          740,  740,  740,  740,  740,  740,  740,  576,  712,  776,
+          714,  730,  947,  683,  687,  717,  847,  966, 1014,  729,
+          764,  946,  994,  930,  783,  689,  978,  948,  827,  829,
+          949,  950,  981,  995,  996,  848,  745,  849,  850,  789,
+          959,  832,  740,  922,  928,  919,  929,  917,  913,  741,
+          738,  733,  737,  722,  720,  703,  713,  752,  908,  902,
+          821,  952,  910,  576,  824,  969,  822,  982,  983,  830,
+          750,  735,  825,  851,  960,  961,  962,  833,  997,  784,
+          970,  899,  984,  757,  852,  985,  986,  987,  988,  858,
+          839,  840,  842,  797,  749,  938,  770,  860,  424,  766,
+          768,  964,  594,  945,  843,  863,  866,  989,  990,  991,
+          872,  933,  798,  972,  731,  975,  968,  799,  800,  601,
+          762,  763,  636,  657,  873,  874,  877,  934,  755,  734,
+          804,  805,  998,  883,  664,  806,  700,  885,  993,  702,
+          709,  728,  844,  775,  723,  746,  963,  758,  809,  887,
+          810,  811,  812,  992,  815,    0,    0,    0,    0,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,  452,  452,  452,  452,  452,  452,  303,  303,  303,
-          303,    0,    0,  303,    0,    0,  452,  452,  452,  452,
-          452,  452,  452,  452,  452,  452,  452,  452,  452,  452,
-          452,  452,  452,  452,  452,  452,  452,  452,  452,  452,
-          452,  452,  452,  452,  452,  452,  452,  452,  452,  452,
-          452,  452,  452,  452,  452,  452,  452,  452,  452,  452,
-          452,  452,  452,  452,  452,  452,  452,  452,  452,  452,
-          452,  452,  452,  452,  452,  452,  452,  452,  452,  452,
-          452,  452,  452,  452,  452,  452,  452,  452,  452,  452,
-          452,  452,  452,  452,  452,  452,  452,  452,  452,  452,
-          452,  452,  452,  452,  452,  452,  452,  452,  452,  452,
-          452,  452,  452,  452,  452,  452,  452,  452,  452,  452,
-          452,  452,  452,  452,  452,  452,  452,  452,  452,  452,
-          452,  452,  452,  452,  452,  452,  452,  452,  452,  452,
-          452,  452,  452,  452,  452,  452,  452,  452,  452,  452,
-          452,  452,  452,  452,  452,  452,  452,  452,  452,  287,
-          287,  287,  287,  287,  287,  287,  287,  287,  287,  287,
-          287,  287,  287,  287,  287,  287,  287,  287,  287,  287,
-          287,  287,  287,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,  455,  455,  455,  455,  455,  455,  305,
+          305,  305,  305,    0,    0,  305,    0,    0,  455,  455,
+          455,  455,  455,  455,  455,  455,  455,  455,  455,  455,
+          455,  455,  455,  455,  455,  455,  455,  455,  455,  455,
+          455,  455,  455,  455,  455,  455,  455,  455,  455,  455,
+          455,  455,  455,  455,  455,  455,  455,  455,  455,  455,
+          455,  455,  455,  455,  455,  455,  455,  455,  455,  455,
+          455,  455,  455,  455,  455,  455,  455,  455,  455,  455,
+          455,  455,  455,  455,  455,  455,  455,  455,  455,  455,
+          455,  455,  455,  455,  455,  455,  455,  455,  455,  455,
+          455,  455,  455,  455,  455,  455,  455,  455,  455,  455,
+          455,  455,  455,  455,  455,  455,  455,  455,  455,  455,
+          455,  455,  455,  455,  455,  455,  455,  455,  455,  455,
+          455,  455,  455,  455,  455,  455,  455,  455,  455,  455,
+          455,  455,  455,  455,  455,  455,  455,  455,  455,  455,
+          455,  455,  455,  455,  455,  455,  455,  455,  455,  455,
+          455,  455,  289,  289,  289,  289,  289,  289,  289,  289,
+          289,  289,  289,  289,  289,  289,  289,  289,  289,  289,
+          289,  289,  289,  289,  289,  289,    0,    0,    0,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,  287,
-          287,  287,  287,  287,  287,  287,  287,  287,  287,  287,
-          287,  287,  287,  287,  287,  287,  287,  287,  287,  287,
-          287,  287,  287,  287,  287,  287,  695,  695,  287,    0,
-          287,  695,  695,  695,  695,  695,  695,  695,  695,  695,
-          695,  287,  287,  287,  287,  287,  287,  287,  775,  295,
-          295,  295,  295,  695,  695,  695,  695,  -37,  -37,  295,
-          295,  695,  695,  695,  695,  695,  695,  695,  695,  695,
-            0,    0,    0,  381,  804,    0,  748,  748,  748,  748,
-            0,    0,    0,    0,  804,  804,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,  381,  804,    0,
-          381,    0,  748,  748,  695,  775,  775,  310,  695,    0,
-            0,    0,    0,  381,  748,  381,  804,   11,   52,  310,
-            0,  481,  481,  481,  481,    0,  472,  775,  775,  775,
-          775,  775,  775,  775,  775,  775,  775,  775,  748,  775,
-            0,  748,  748,  748,    0,    0,    0,    0,    0,  748,
-          765,    0,  933,    0,    0,    0,    0,  758,    0,    0,
-            0,    0,    0,    0,  758,  940,  765,  765,    0,    0,
-            0,    0,    0,    0,  748,    0,    0,    0,    0,    0,
-            0,    0,    0,  644,  787,    0,  787,    0,  644,  644,
-          644
+            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,  289,  289,  289,  289,  289,  289,  289,  289,
+          289,  289,  289,  289,  289,  289,  289,  289,  289,  289,
+          289,  289,  289,  289,  289,  289,  289,  289,  289,   65,
+           65,  289,  289,    0,  289,   65,   65,   65,   65,   65,
+           65,   65,   65,   65,   65,  289,  289,  289,  289,  289,
+          289,  289,  778,  297,  297,  297,  297,   65,   65,   65,
+           65,  -55,  -55,  297,  297,   65,   65,   65,   65,   65,
+           65,   65,   65,   65,    0,    0,    0,  158,  422,    0,
+          744,  744,  744,  744,    0,    0,    0,    0,  422,  422,
+            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,  158,  422,    0,  158,    0,  744,  744,   65,  778,
+          778,  493,   65,    0,    0,    0,    0,  158,  744,  158,
+          171,  422,  171,  171,   55,   56,  493,    0,  584,  584,
+          584,  584,    0,  587,  778,  778,  778,  778,  778,  778,
+          778,  778,  778,  778,  778,  744,    0,  778,    0,  744,
+          744,  744,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,  744,    0,    0,
+          912,    0,    0,    0,    0,  736,    0,    0,    0,    0,
+            0,    0,  736,  921,    0,    0,    0,    0,    0,    0,
+          744,    0,    0,    0,    0,    0,    0,    0,    0,  740,
+          750,    0,  750,    0,  740,  740,  740
     );
 
     protected $actionDefault = array(
-            3,32767,  100,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,   98,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,  561,  561,  561,  561,
-          241,  100,32767,32767,32767,32767,  437,  356,  356,  356,
-        32767,32767,  505,  505,  505,  505,  505,  505,32767,32767,
-        32767,32767,32767,32767,  437,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+            3,32767,  102,32767,32767,32767,32767,32767,32767,32767,
+        32767,32767,  100,32767,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,  566,  566,  566,  566,
+        32767,32767,  245,  102,32767,32767,  442,  360,  360,  360,
+        32767,32767,  510,  510,  510,  510,  510,  510,32767,32767,
+        32767,32767,32767,32767,  442,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,   98,32767,32767,32767,
-           35,    5,    6,    8,    9,   48,   15,32767,32767,32767,
-        32767,32767,  100,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,  554,32767,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,  100,32767,32767,
+        32767,   37,    7,    8,   10,   11,   50,   17,32767,32767,
+        32767,32767,32767,  102,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,  441,  420,  421,  423,  424,  355,  506,
-          560,  298,  557,  354,  143,  310,  300,  229,  301,  245,
-          442,  246,  443,  446,  447,  206,  272,  351,  147,  385,
-          438,  387,  436,  440,  386,  361,  366,  367,  368,  369,
-          370,  371,  372,  373,  374,  375,  376,  377,  378,  359,
-          360,  439,  417,  416,  415,  383,32767,32767,  384,  358,
-          388,32767,32767,32767,32767,32767,32767,32767,32767,  100,
-        32767,  390,  389,  406,  407,  404,  405,  408,32767,  409,
-          410,  411,  412,32767,32767,32767,32767,  336,  334,  397,
-          398,  289,  289,32767,32767,32767,32767,32767,32767,32767,
-        32767,  499,  414,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,  100,32767,   98,  501,
-          380,  382,  469,  392,  393,  391,  362,32767,  476,32767,
-          100,  478,32767,32767,32767,  109,32767,32767,32767,  500,
-        32767,  507,  507,32767,  462,   98,32767,32767,32767,32767,
-          267,32767,32767,32767,32767,  568,  462,  108,  108,  108,
-          108,  108,  108,  108,  108,  108,  108,  108,32767,  108,
-        32767,32767,32767,   98,  186,32767,  255,  257,  100,  522,
-          191,32767,  481,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,  474,  191,  191,32767,32767,
+        32767,32767,32767,  559,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,  462,  402,  136,32767,  136,  507,  394,  395,
-          396,  464,  507,  507,  507,32767,32767,32767,  191,32767,
-          479,  479,   98,   98,   98,   98,  474,32767,  191,  191,
-        32767,  191,  109,   97,   97,   97,   97,  191,  191,   97,
-          101,   99,  191,  191,32767,32767,32767,32767,  191,   97,
-        32767,   99,   99,32767,32767,  191,  191,  212,  203,  210,
-           99,32767,  526,  527,  210,   99,  214,  214,  214,  234,
-          234,  453,  291,   99,   97,   99,   99,  191,  291,  291,
-        32767,   99,  453,  291,  453,  291,  193,  291,  291,  291,
-          453,  291,32767,32767,   99,  291,  205,  191,   97,   97,
-          291,32767,32767,32767,  464,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,  494,
-        32767,  511,  524,  400,  401,  403,  509,  425,  426,  427,
-          428,  429,  430,  431,  433,  556,32767,  468,32767,32767,
-        32767,32767,  309,  566,32767,  566,32767,32767,32767,32767,
+        32767,32767,32767,32767,  446,  425,  426,  428,  429,  359,
+          511,  565,  302,  562,  358,  145,  314,  304,  233,  305,
+          249,  447,  250,  448,  451,  452,  210,  276,  355,  149,
+          389,  443,  391,  441,  445,  390,  365,  370,  371,  372,
+          373,  374,  375,  376,  377,  378,  379,  380,  381,  382,
+          363,  364,  444,  422,  421,  420,  387,32767,32767,  388,
+          392,  362,  395,32767,32767,32767,32767,32767,32767,32767,
+        32767,  102,32767,  393,  394,  411,  412,  409,  410,  413,
+        32767,  414,  415,  416,  417,32767,32767,32767,32767,  340,
+          338,  402,  403,  293,  293,32767,32767,32767,32767,32767,
+        32767,32767,32767,  504,  419,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,32767,  102,32767,
+          100,  506,  384,  386,  474,  397,  398,  396,  366,32767,
+          481,32767,  102,  483,32767,32767,32767,  111,32767,32767,
+        32767,  505,32767,  512,  512,32767,  467,  100,  193,32767,
+          193,  193,32767,32767,32767,  271,32767,32767,32767,32767,
+          573,  467,  110,  110,  110,  110,  110,  110,  110,  110,
+          110,  110,  110,32767,  193,  110,32767,32767,32767,  100,
+          193,  193,  193,  193,  193,  193,  193,  193,  193,  193,
+          188,32767,  259,  261,  102,  527,  193,32767,  486,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,  567,32767,  507,32767,32767,32767,32767,
-          399,    7,   74,   41,   42,   50,   56,  485,  486,  487,
-          488,  482,  483,  489,  484,32767,  490,  532,32767,32767,
-          508,  559,32767,32767,32767,32767,32767,32767,  136,32767,
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,  494,
-        32767,  134,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,  507,32767,32767,32767,  286,  288,32767,
+        32767,  479,32767,32767,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,  467,  407,  138,32767,
+          138,  512,  399,  400,  401,  469,  512,  512,  512,32767,
+        32767,32767,32767,  484,  484,  100,  100,  100,  100,  479,
+        32767,32767,  111,   99,   99,   99,   99,   99,  103,  101,
+        32767,32767,32767,32767,   99,32767,  101,  101,32767,32767,
+          216,  207,  214,  101,32767,  531,  532,  214,  101,  218,
+          218,  218,  238,  238,  458,  295,  101,   99,  101,  101,
+          195,  295,  295,32767,  101,  458,  295,  458,  295,  197,
+          295,  295,  295,  458,  295,32767,32767,  101,  295,  209,
+           99,   99,  295,32767,32767,32767,  469,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,  507,32767,32767,32767,  274,  276,
+        32767,  499,32767,  516,  529,  405,  406,  408,  514,  430,
+          431,  432,  433,  434,  435,  436,  438,  561,32767,  473,
+        32767,32767,32767,32767,  313,  571,32767,  571,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,  271,32767,32767,  350,32767,32767,
-        32767,32767,  330,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,  149,  149,    3,    3,  312,  149,  149,
-          149,  312,  149,  312,  312,  312,  149,  149,  149,  149,
-          149,  149,  181,  249,  252,  234,  234,  149,  322,  149
+        32767,32767,32767,32767,32767,  572,32767,  512,32767,32767,
+        32767,32767,  404,    9,   76,   43,   44,   52,   58,  490,
+          491,  492,  493,  487,  488,  494,  489,32767,  495,  537,
+        32767,32767,  513,  564,32767,32767,32767,32767,32767,32767,
+          138,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+        32767,  499,32767,  136,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,  512,32767,32767,32767,  290,
+          292,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,  512,32767,32767,32767,
+          278,  280,32767,32767,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,  275,32767,32767,  354,
+        32767,32767,32767,32767,  334,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,  151,  151,    3,    3,  316,
+          151,  151,  151,  316,  151,  316,  316,  316,  151,  151,
+          151,  151,  151,  151,  183,  253,  256,  238,  238,  151,
+          326,  151
     );
 
     protected $goto = array(
-          191,  191,  661,  403,  634,  453, 1237, 1238,  397,  300,
-          301,  321,  555,  306,  402,  322,  404,  613, 1038, 1039,
-          669,  315,  315,  315,  315,  162,  162,  162,  162,  188,
-          188,  172,  174,  215,  192,  210,  188,  188,  188,  188,
-          188,  189,  189,  189,  189,  189,  189,  183,  184,  185,
-          186,  187,  212,  210,  213,  513,  514,  393,  515,  517,
-          518,  519,  520,  521,  522,  523,  524, 1065,  163,  164,
-          165,  190,  166,  167,  168,  161,  169,  170,  171,  173,
-          209,  211,  214,  232,  235,  238,  240,  251,  252,  253,
-          254,  255,  256,  257,  259,  260,  261,  262,  269,  270,
-          303,  304,  305,  398,  399,  400,  560,  216,  217,  218,
+          192,  192,  663,  417,  636,  910,  981,  988,  989,  411,
+          302,  303,  323,  557,  308,  416,  324,  418,  615, 1003,
+          671,  317,  317,  317,  317,  163,  163,  163,  163,  216,
+          193,  189,  189,  173,  175,  211,  189,  189,  189,  189,
+          189,  190,  190,  190,  190,  190,  190,  184,  185,  186,
+          187,  188,  213,  211,  214,  515,  516,  407,  517,  519,
+          520,  521,  522,  523,  524,  525,  526, 1071,  164,  165,
+          166,  191,  167,  168,  169,  162,  170,  171,  172,  174,
+          210,  212,  215,  233,  236,  239,  240,  242,  253,  254,
+          255,  256,  257,  258,  259,  261,  262,  263,  264,  271,
+          272,  305,  306,  307,  412,  413,  414,  562,  217,  218,
           219,  220,  221,  222,  223,  224,  225,  226,  227,  228,
-          229,  230,  175,  231,  176,  193,  194,  195,  233,  183,
-          184,  185,  186,  187,  212, 1065,  196,  177,  178,  179,
-          197,  193,  180,  234,  198,  160,  199,  200,  181,  201,
-          202,  203,  182,  204,  205,  206,  207,  208,  814,  586,
-          600,  603,  604,  605,  606,  625,  626,  627,  671,  811,
-          599,  599,  539,  530,  577, 1194, 1194, 1194, 1194, 1194,
-         1194, 1194, 1194, 1194, 1194,  280,  280,  280,  280,  997,
-          332,  819,  812,  867,  862,  863,  876,  845,  820,  864,
-          817,  865,  866,  818,  597,  631, 1144,  897,  788,  870,
-         1145, 1148,  898, 1149,  367,  530,  871,  539,  872, 1018,
-         1014, 1015,  792,  548,  549,  617,  617,  786,  374,  558,
-         1159,  987,  984,  985,  579,  915,  383,  668, 1212, 1212,
-          923,  593,  594, 1212, 1212, 1212, 1212, 1212, 1212, 1212,
-         1212, 1212, 1212,  904,  975,  982,  983, 1163, 1163, 1163,
-          979,  552,  792,  476,  792,  979,  979,  979,  979,  979,
-          979,  979,  979,  979,  329,  396,  422,  588,    5, 1163,
-            6,  422,  422,   14, 1163, 1163, 1163, 1163, 1160, 1252,
-         1163, 1163, 1163, 1244, 1244, 1244, 1244,  944,  802,  363,
-          335,  546,  551,  311,  295,  694,  612,  614,  883,  632,
-          335,  335,  884,  651,  655,  958,  659,  667,  954, 1161,
-         1220, 1221, 1239, 1240,  335,  335,  633,  335, 1113, 1279,
-          365,  369,  540,  578,  582,  323, 1262, 1262, 1210, 1210,
-          532,  804,  335, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
-         1210, 1210, 1210, 1262,  409,  422,  422,  422,  422,  422,
-          422,  422,  422,  422,  422,  422,  832,  422, 1265,  373,
-          525,  525,  525,  525,  545, 1223,  829,  516,  516,  581,
-          966,  592,  516,  516,  516,  516,  516,  516,  516,  516,
-          516,  516,  609,  610,  381,  382,  807,  807, 1156,  640,
-          654,  641, 1003,  385,  386,  387,  628,  652,  642,  643,
-          644,  388,  697,  531,  543,  454,  327, 1263, 1263,  531,
-          841,  543,  442,  442,  366,  333,  334,  556,  591,  532,
-         1234, 1234, 1234,  442, 1263,  527,  527,  527, 1007, 1048,
-          267,  559,  447,  448,  449,  528,  528,  837,  928,    0,
-         1270, 1271,  458, 1246, 1246, 1246, 1246,  430,  477,    0,
-          478,    0,  917,  917,  917,  917,  485,  827,  430,  911,
-          918,  810,  839,    0,    0,  826,    0,  835,    0, 1230,
-            0,    0,    0,  947,  921,  921,  919,  921,  693,  486,
-          529,  956,  951,  840,  828, 1002,    0,    0, 1006, 1158,
-          888, 1053,    0,  807,    0,    0,    0,    0,  926,  596,
-            0,    0,    0,    0,  963, 1005,    0,    0, 1232, 1232,
-         1005,    0,  831,    0,  637,  942,    0,    0,    0,    0,
-          825,  576, 1031,  916,  672,  658,  658,    0,  664, 1029,
-            0,    0,    0, 1155,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0, 1046,  844,    0,
+          229,  230,  231,  176,  232,  177,  194,  195,  196,  234,
+          184,  185,  186,  187,  188,  213, 1071,  197,  178,  179,
+          180,  198,  194,  181,  235,  199,  161,  200,  201,  182,
+          202,  203,  204,  183,  205,  206,  207,  208,  209,  818,
+          579,  601,  601,  541,  532, 1270, 1270, 1201, 1201, 1201,
+         1201, 1201, 1201, 1201, 1201, 1201, 1201, 1219, 1219,  456,
+         1244, 1245, 1270, 1219, 1219, 1219, 1219, 1219, 1219, 1219,
+         1219, 1219, 1219,  383,  532,  541,  550,  551,  390,  560,
+          581,  595,  596,  823,  815,  871,  866,  867,  880,   14,
+          824,  868,  821,  869,  870,  822,  816,  811,  811,  874,
+          792,  282,  282,  282,  282,  849, 1217, 1217,  790, 1024,
+         1020, 1021, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217,
+         1217, 1217,  929,  518,  518,  921,  397,  670,  831,  518,
+          518,  518,  518,  518,  518,  518,  518,  518,  518, 1170,
+         1170, 1170,  985,  843,  599,  633,  830,  985,  985,  985,
+          985,  985,  985,  985,  985,  985,  554,  796,  432,  249,
+          249, 1170,  334,  432,  432,  337, 1170, 1170, 1170, 1170,
+         1259,  340, 1170, 1170, 1170, 1251, 1251, 1251, 1251, 1044,
+         1045,  340,  340,  950,  246,  246,  246,  246,  248,  250,
+          887,  529,  529,  529,  888,  340,  340,  796,  340,  796,
+         1286,  588,  602,  605,  606,  607,  608,  627,  628,  629,
+          673,  534,  811,  438,  340,  814,  313,  297,  923,  923,
+          923,  923, 1246, 1247,  438,  917,  924,  953,  927,  927,
+          925,  927,  695,  379,  531,  962,  957,  875,  553,  876,
+          432,  432,  432,  432,  432,  432,  432,  432,  432,  432,
+          432,  548,  410,  432,  590,  696,  614,  616,  635,  634,
+         1230,  611,  612,  653,  657,  964,  661,  669,  960, 1120,
+          547,  395,  396, 1269, 1269,  422,  642,  594,  643,  325,
+          399,  400,  401,  656,  654,    5,  808,    6,  402,  480,
+         1269,  481,  332,  844,  832, 1008, 1012,  488, 1241, 1241,
+         1241,  447,  447,  932,  558,  593, 1272,  533,  545,  836,
+          447,  534,  533,  833,  545,  389,  630,  382,  644,  645,
+          646, 1253, 1253, 1253, 1253, 1163,  922,  561,  450,  451,
+          452,  972,  841, 1009, 1166, 1277, 1278, 1151,  903,  892,
+         1059, 1152, 1155,  904, 1156,  699,  598, 1237,  457, 1052,
+          848,  969,  527,  527,  527,  527,  845,  583,  269,  835,
+          839,  639,  948,  530,  530, 1013, 1054,  829,  934,  461,
+            0, 1165,  489,    0,  578, 1037,    0,  674,  660,  660,
+         1162,  666, 1035,    0,    0,    0, 1011, 1167,    0,    0,
+         1239, 1239, 1011,    0,  806,  252,  252,  619,  619,  338,
+          339,    0,    0,  993,  990,  991,    0,    0,    0,    0,
+         1168, 1227, 1228,  381,  385,  542,  580,  584,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-          961,  961
+            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,  967,  967
     );
 
     protected $gotoCheck = array(
-           41,   41,   71,   64,   64,  160,  160,  160,   64,   64,
-           64,   64,   64,   64,   64,   64,   64,   64,  130,  130,
-            8,   22,   22,   22,   22,   41,   41,   41,   41,   41,
-           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
-           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
-           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
-           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
-           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
-           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
-           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
-           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
-           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
-           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
-           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
-           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
-           41,   41,   41,   41,   41,   41,   41,   41,   14,   77,
-           77,   77,   77,   77,   77,   77,   77,   77,   77,   25,
-          102,  102,   74,   74,  116,  102,  102,  102,  102,  102,
-          102,  102,  102,  102,  102,   23,   23,   23,   23,  113,
-           91,   14,   26,   14,   14,   14,   14,   44,   14,   14,
-           14,   14,   14,   14,   54,   54,   76,   76,    6,   14,
-           76,   76,   76,   76,   74,   74,   63,   74,   63,   14,
-           14,   14,   11,   74,   74,  109,  109,    5,   74,   74,
-           19,  109,  109,  109,   74,   87,   87,   87,  154,  154,
-           48,   74,   74,  154,  154,  154,  154,  154,  154,  154,
-          154,  154,  154,   85,   85,   85,   85,   71,   71,   71,
-           71,  156,   11,   74,   11,   71,   71,   71,   71,   71,
-           71,   71,   71,   71,  163,   12,   22,   12,   45,   71,
-           45,   22,   22,   74,   71,   71,   71,   71,   19,  165,
-           71,   71,   71,    8,    8,    8,    8,   97,   19,   60,
-           13,   47,   98,  153,  153,   47,   47,   47,   71,   47,
-           13,   13,   71,   47,   47,   47,   47,   47,   47,   19,
-           19,   19,  162,  162,   13,   13,   62,   13,  137,   13,
-           57,   57,   57,   57,   57,   28,  166,  166,  155,  155,
-           13,   17,   13,  155,  155,  155,  155,  155,  155,  155,
-          155,  155,  155,  166,  106,   22,   22,   22,   22,   22,
-           22,   22,   22,   22,   22,   22,   38,   22,  166,   27,
-          101,  101,  101,  101,    8,   13,   36,  157,  157,  101,
-          104,    8,  157,  157,  157,  157,  157,  157,  157,  157,
-          157,  157,   81,   81,   78,   78,   21,   21,  146,   78,
-           13,   78,  115,   78,   78,   78,   82,   78,   82,   82,
-           82,   78,   93,    8,    8,  143,   78,  167,  167,    8,
-           40,    8,  135,  135,    8,   91,   91,    2,    2,   13,
-          116,  116,  116,  135,  167,   18,   18,   18,  118,  133,
-           23,    8,    8,    8,    8,   23,   23,    8,   90,   -1,
-            8,    8,   80,  116,  116,  116,  116,   18,  141,   -1,
-          141,   -1,   18,   18,   18,   18,  141,   34,   18,   18,
-           18,   24,   34,   -1,   -1,   34,   -1,    8,   -1,  116,
-           -1,   -1,   -1,   24,   24,   24,   24,   24,   24,    8,
-           24,   24,   24,   15,   15,   15,   -1,   -1,   15,   13,
-           16,   16,   -1,   21,   -1,   -1,   -1,   -1,   15,   16,
-           -1,   -1,   -1,   -1,   16,  116,   -1,   -1,  116,  116,
-          116,   -1,   16,   -1,   16,   16,   -1,   -1,   -1,   -1,
-           16,    7,    7,   15,    7,    7,    7,   -1,    7,    7,
-           -1,   -1,   -1,   16,   -1,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   -1,   -1,   -1,   -1,   -1,   15,   15,   -1,
+           42,   42,   72,   65,   65,   87,   87,   87,   87,   65,
+           65,   65,   65,   65,   65,   65,   65,   65,   65,  115,
+            9,   23,   23,   23,   23,   42,   42,   42,   42,   42,
+           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+           42,   42,   42,   42,   42,   42,   42,   42,   42,   15,
+          118,  104,  104,   75,   75,  169,  169,  104,  104,  104,
+          104,  104,  104,  104,  104,  104,  104,  156,  156,  162,
+          162,  162,  169,  156,  156,  156,  156,  156,  156,  156,
+          156,  156,  156,   75,   75,   75,   75,   75,   75,   75,
+           75,   75,   75,   15,   26,   15,   15,   15,   15,   75,
+           15,   15,   15,   15,   15,   15,   27,   22,   22,   15,
+            7,   24,   24,   24,   24,   45,  157,  157,    6,   15,
+           15,   15,  157,  157,  157,  157,  157,  157,  157,  157,
+          157,  157,   49,  159,  159,   89,   89,   89,   35,  159,
+          159,  159,  159,  159,  159,  159,  159,  159,  159,   72,
+           72,   72,   72,   35,   55,   55,   35,   72,   72,   72,
+           72,   72,   72,   72,   72,   72,  158,   12,   23,    5,
+            5,   72,  165,   23,   23,   93,   72,   72,   72,   72,
+          167,   14,   72,   72,   72,    9,    9,    9,    9,  132,
+          132,   14,   14,   99,    5,    5,    5,    5,    5,    5,
+           72,   19,   19,   19,   72,   14,   14,   12,   14,   12,
+           14,   79,   79,   79,   79,   79,   79,   79,   79,   79,
+           79,   14,   22,   19,   14,   25,  155,  155,   19,   19,
+           19,   19,  164,  164,   19,   19,   19,   25,   25,   25,
+           25,   25,   25,   61,   25,   25,   25,   64,  100,   64,
+           23,   23,   23,   23,   23,   23,   23,   23,   23,   23,
+           23,   48,   13,   23,   13,   48,   48,   48,   63,   48,
+           14,   83,   83,   48,   48,   48,   48,   48,   48,  139,
+            9,   80,   80,  168,  168,  108,   80,    9,   80,   29,
+           80,   80,   80,   14,   80,   46,   18,   46,   80,  143,
+          168,  143,   80,   16,   16,   16,   16,  143,  118,  118,
+          118,  137,  137,   16,    2,    2,  168,    9,    9,   39,
+          137,   14,    9,   37,    9,   28,   84,    9,   84,   84,
+           84,  118,  118,  118,  118,  148,   16,    9,    9,    9,
+            9,  106,    9,  117,   20,    9,    9,   78,   78,   17,
+           17,   78,   78,   78,   78,   95,   17,  118,  145,   16,
+           16,   17,  103,  103,  103,  103,   41,  103,   24,   17,
+            9,   17,   17,   24,   24,  120,  135,   17,   92,   82,
+           -1,   14,    9,   -1,    8,    8,   -1,    8,    8,    8,
+           17,    8,    8,   -1,   -1,   -1,  118,   20,   -1,   -1,
+          118,  118,  118,   -1,   20,    5,    5,  111,  111,   93,
+           93,   -1,   -1,  111,  111,  111,   -1,   -1,   -1,   -1,
+           20,   20,   20,   58,   58,   58,   58,   58,   -1,   -1,
+           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
            -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
            -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-          101,  101
+           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+           -1,   -1,   -1,  103,  103
     );
 
     protected $gotoBase = array(
-            0,    0, -248,    0,    0,  214,  199,  524,    7,    0,
-            0,  -61,  -48,   16, -170,   69,   59,   45,  172, -132,
-            0,   81,   18,  182,  467,  165,  188,   46,   52,    0,
-            0,    0,    0,    0,  117,    0,   51,    0,   56,    0,
-            8,   -1,    0,    0,  185, -419,    0, -373,  218,    0,
-            0,    0,    0,    0,  166,    0,    0,  287,    0,    0,
-          259,    0,   89,  198, -233,    0,    0,    0,    0,    0,
-            0,   -6,    0,    0, -204,    0, -175, -179,  -74,    0,
-           -2,  -65, -275,    0,    0,  -20,    0,  -56,    0,    0,
-           34, -270,    0,   32,    0,    0,    0,  266,  261,    0,
-            0,  344,  -66,    0,   31,    0,   82,    0,    0,  -46,
-            0,    0,    0,  187,    0,   49,  167,    0,   25,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-         -249,    0,    0,   24,    0,  392,    0,   63,    0,    0,
-            0,  -14,    0,    4,    0,    0,  -10,    0,    0,    0,
-            0,    0,    0,   -5,    2,  102,  234,  141,    0,    0,
-         -282,    0,  -29,  246,    0,  260,   42,  123,    0,    0
+            0,    0, -253,    0,    0,  278,  215,  211,  487,    7,
+            0,    0,   -8,   47,    5, -174,  -21,   13,  108,   46,
+           76,    0, -100,   18,  218,  331,  200,  212,  110,  114,
+            0,    0,    0,    0,    0, -108,    0,  106,    0,  117,
+            0,   51,   -1,    0,    0,  213, -294,    0, -305,  220,
+            0,    0,    0,    0,    0,  226,    0,    0,  490,    0,
+            0,  313,    0,  140,  339, -234,    0,    0,    0,    0,
+            0,    0,   -6,    0,    0, -167,    0,    0,   62,  -22,
+          -80,    0,   32,  -79, -247,    0,    0, -270,    0,  -48,
+            0,    0,   61, -178,    0,   71,    0,    0,    0,  270,
+          317,    0,    0,  446,  -76,    0,   96,    0,  121,    0,
+            0,  244,    0,    0,    0,   17,    0,   94,  153,    0,
+           59,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,   30,    0,    0,   58,    0,  389,    0,  122,
+            0,    0,    0,  -66,    0,   44,    0,    0,   91,    0,
+            0,    0,    0,    0,    0,   26,  -60,  -11,  249,    6,
+            0,    0, -110,    0,  -15,  254,    0,  261,   97, -131,
+            0,    0
     );
 
     protected $gotoDefault = array(
-        -32768,  491,  701,    4,  702,  776,  784,  575,  507,  670,
-          328,  601,  394, 1228,  869, 1052,  557,  803, 1172, 1180,
-          431,  806,  316,  330,  851,  852,  853,  370,  355,  361,
-          368,  623,  602,  471,  838,  425,  830,  463,  833,  424,
-          842,  159,  391,  489,  846,    3,  848,  534,  879,  356,
-          856,  357,  647,  858,  542,  860,  861,  364,  371,  372,
-         1057,  550,  598,  873,  239,  544,  874,  354,  875,  882,
-          359,  362,  656,  441,  483,  384, 1033,  585,  620,  437,
-          457,  608,  607,  595,  456,  638,  389,  913,  464,  439,
-          927,  331,  935,  699, 1064,  615,  466,  943,  616,  950,
-          953,  508,  509,  455,  965,  271,  467,  992,  639,  977,
-          618,  990,  450,  996,  426, 1004, 1216,  429, 1008,  258,
-         1011,  272,  390,  405, 1016, 1017,    8, 1023,  662,  663,
-           10,  268,  488, 1047,  657,  423, 1063,  410, 1132, 1134,
-          536,  468, 1152, 1151,  650,  484, 1157, 1219,  420,  510,
-          451,  302,  511,  294,  319,  299,  526,  281,  320,  512,
-          452, 1225, 1233,  317,   29, 1253, 1264,  326,  554,  590
+        -32768,  493,  703,    4,  704,  896,  780,  788,  577,  509,
+          672,  333,  603,  408, 1235,  873, 1058,  559,  807, 1179,
+         1187,  439,  810,  318,  335,  855,  856,  857,  386,  371,
+          377,  384,  625,  604,  474,  842,  435,  834,  466,  837,
+          434,  846,  160,  405,  491,  850,    3,  852,  536,  883,
+          372,  860,  373,  649,  862,  544,  864,  865,  380,  387,
+          388, 1063,  552,  600,  877,  241,  546,  878,  370,  879,
+          886,  375,  378,  658,  446,  486,  479,  398, 1039,  587,
+          622,  443,  460,  610,  609,  597,  459,  640,  403,  919,
+          467,  444,  933,  336,  941,  701, 1070,  617,  469,  949,
+          618,  956,  959,  510,  511,  458,  971,  273,  470,  998,
+          641,  983,  620,  996,  453, 1002,  436, 1010, 1223,  437,
+         1014,  260, 1017,  274,  404,  419, 1022, 1023,    8, 1029,
+          664,  665,   10,  270,  490, 1053,  659,  433, 1069,  423,
+         1139, 1141,  538,  471, 1159, 1158,  652,  487, 1164, 1226,
+          431,  512,  454,  304,  513,  296,  321,  301,  528,  283,
+          322,  514,  455, 1232, 1240,  319,   29, 1260, 1271,  329,
+          556,  592
     );
 
     protected $ruleToNonTerminal = array(
-            0,    1,    3,    3,    2,    5,    5,    5,    5,    5,
-            5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-            5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-            5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-            5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-            5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-            5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-            5,    5,    5,    5,    5,    5,    6,    6,    6,    6,
-            6,    6,    6,    7,    7,    8,    9,   10,   10,   10,
-           11,   11,   12,   12,   13,   14,   14,   15,   15,   16,
-           16,   17,   17,   20,   20,   21,   22,   22,   23,   23,
-            4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
-            4,   28,   28,   29,   29,   31,   33,   33,   27,   35,
-           35,   32,   37,   37,   34,   34,   36,   36,   38,   38,
-           30,   39,   39,   40,   42,   43,   43,   44,   45,   45,
-           47,   46,   46,   46,   46,   48,   48,   48,   48,   48,
-           48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
-           48,   48,   48,   48,   48,   48,   48,   48,   48,   24,
-           24,   67,   67,   70,   70,   69,   68,   68,   61,   73,
-           73,   74,   74,   75,   75,   76,   76,   25,   25,   26,
-           26,   26,   26,   84,   84,   86,   86,   79,   79,   79,
-           80,   80,   83,   83,   81,   81,   87,   88,   88,   55,
-           55,   63,   63,   66,   66,   66,   65,   89,   89,   90,
-           56,   56,   56,   56,   91,   91,   92,   92,   93,   93,
-           94,   95,   95,   96,   96,   97,   97,   53,   53,   49,
-           49,   99,   51,   51,  100,   50,   50,   52,   52,   62,
-           62,   62,   62,   77,   77,  103,  103,  105,  105,  105,
-          105,  104,  104,  104,  107,  107,  107,   85,   85,  109,
-          109,  109,  108,  108,  110,  110,  111,  111,  111,  106,
-          106,   78,   78,   78,   19,   19,  112,  112,  113,  113,
-          113,  113,   58,  114,  114,  115,   59,  117,  117,  118,
-          118,  119,  119,   82,  120,  120,  120,  120,  120,  120,
-          125,  125,  126,  126,  127,  127,  127,  127,  127,  128,
-          129,  129,  124,  124,  121,  121,  123,  123,  131,  131,
-          130,  130,  130,  130,  130,  130,  122,  132,  132,  134,
-          133,  133,   60,   98,  135,  135,   54,   54,   41,   41,
-           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
-           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
-           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
-           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
-           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
-           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
-           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
-           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
-           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
-          142,  136,  136,  141,  141,  144,  145,  145,  146,  147,
-          147,  147,   18,   18,   71,   71,   71,   71,  137,  137,
-          137,  137,  149,  149,  138,  138,  140,  140,  140,  143,
-          143,  154,  154,  154,  154,  154,  154,  154,  154,  154,
-          155,  155,  102,  157,  157,  157,  157,  139,  139,  139,
-          139,  139,  139,  139,  139,   57,   57,  152,  152,  152,
-          152,  158,  158,  148,  148,  148,  159,  159,  159,  159,
-          159,  159,   72,   72,   64,   64,   64,   64,  116,  116,
-          116,  116,  162,  161,  151,  151,  151,  151,  151,  151,
-          151,  150,  150,  150,  160,  160,  160,  160,  101,  156,
-          164,  164,  163,  163,  165,  165,  165,  165,  165,  165,
-          165,  165,  153,  153,  153,  153,  167,  168,  166,  166,
-          166,  166,  166,  166,  166,  166,  169,  169,  169,  169
+            0,    1,    3,    3,    2,    5,    5,    6,    6,    6,
+            6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
+            6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
+            6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
+            6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
+            6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
+            6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
+            6,    6,    6,    6,    6,    6,    6,    6,    7,    7,
+            7,    7,    7,    7,    7,    8,    8,    9,   10,   11,
+           11,   11,   12,   12,   13,   13,   14,   15,   15,   16,
+           16,   17,   17,   18,   18,   21,   21,   22,   23,   23,
+           24,   24,    4,    4,    4,    4,    4,    4,    4,    4,
+            4,    4,    4,   29,   29,   30,   30,   32,   34,   34,
+           28,   36,   36,   33,   38,   38,   35,   35,   37,   37,
+           39,   39,   31,   40,   40,   41,   43,   44,   44,   45,
+           46,   46,   48,   47,   47,   47,   47,   49,   49,   49,
+           49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
+           49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
+           49,   25,   25,   68,   68,   71,   71,   70,   69,   69,
+           62,   74,   74,   75,   75,   76,   76,   77,   77,   78,
+           78,   26,   26,   27,   27,   27,   27,   86,   86,   88,
+           88,   81,   81,   81,   82,   82,   85,   85,   83,   83,
+           89,   90,   90,   56,   56,   64,   64,   67,   67,   67,
+           66,   91,   91,   92,   57,   57,   57,   57,   93,   93,
+           94,   94,   95,   95,   96,   97,   97,   98,   98,   99,
+           99,   54,   54,   50,   50,  101,   52,   52,  102,   51,
+           51,   53,   53,   63,   63,   63,   63,   79,   79,  105,
+          105,  107,  107,  107,  107,  106,  106,  106,  109,  109,
+          109,   87,   87,  111,  111,  111,  110,  110,  112,  112,
+          113,  113,  113,  108,  108,   80,   80,   80,   20,   20,
+          114,  114,  115,  115,  115,  115,   59,  116,  116,  117,
+           60,  119,  119,  120,  120,  121,  121,   84,  122,  122,
+          122,  122,  122,  122,  127,  127,  128,  128,  129,  129,
+          129,  129,  129,  130,  131,  131,  126,  126,  123,  123,
+          125,  125,  133,  133,  132,  132,  132,  132,  132,  132,
+          124,  134,  134,  136,  135,  135,   61,  100,  137,  137,
+           55,   55,   42,   42,   42,   42,   42,   42,   42,   42,
+           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+           42,   42,   42,   42,   42,  144,  138,  138,  143,  143,
+          146,  147,  147,  148,  149,  149,  149,   19,   19,   72,
+           72,   72,   72,  139,  139,  139,  139,  151,  151,  140,
+          140,  142,  142,  142,  145,  145,  156,  156,  156,  156,
+          156,  156,  156,  156,  156,  157,  157,  104,  159,  159,
+          159,  159,  141,  141,  141,  141,  141,  141,  141,  141,
+           58,   58,  154,  154,  154,  154,  160,  160,  150,  150,
+          150,  161,  161,  161,  161,  161,  161,   73,   73,   65,
+           65,   65,   65,  118,  118,  118,  118,  164,  163,  153,
+          153,  153,  153,  153,  153,  153,  152,  152,  152,  162,
+          162,  162,  162,  103,  158,  166,  166,  165,  165,  167,
+          167,  167,  167,  167,  167,  167,  167,  155,  155,  155,
+          155,  169,  170,  168,  168,  168,  168,  168,  168,  168,
+          168,  171,  171,  171,  171
     );
 
     protected $ruleToLength = array(
@@ -905,55 +931,56 @@ class Php7 extends \PhpParser\ParserAbstract
             1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
             1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
             1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-            1,    1,    1,    1,    1,    1,    1,    0,    1,    0,
-            1,    1,    2,    1,    3,    4,    1,    2,    0,    1,
-            1,    1,    1,    1,    3,    5,    4,    3,    4,    2,
-            3,    1,    1,    7,    6,    2,    3,    1,    2,    3,
-            1,    2,    3,    1,    1,    3,    1,    3,    1,    2,
-            2,    3,    1,    3,    2,    3,    1,    3,    2,    0,
-            1,    1,    1,    1,    1,    3,    7,   10,    5,    7,
-            9,    5,    3,    3,    3,    3,    3,    3,    1,    2,
-            5,    7,    9,    6,    5,    6,    3,    2,    1,    1,
-            1,    0,    2,    1,    3,    8,    0,    4,    2,    1,
-            3,    0,    1,    0,    1,    3,    1,    8,    9,    8,
-            7,    6,    8,    0,    2,    0,    2,    1,    2,    2,
-            0,    2,    0,    2,    0,    2,    2,    1,    3,    1,
-            4,    1,    4,    1,    1,    4,    2,    1,    3,    3,
-            3,    4,    4,    5,    0,    2,    4,    3,    1,    1,
-            7,    0,    2,    1,    3,    3,    4,    1,    4,    0,
-            2,    5,    0,    2,    6,    0,    2,    0,    3,    1,
-            2,    1,    1,    2,    0,    1,    3,    0,    1,    1,
-            1,    6,    8,    6,    1,    2,    1,    1,    1,    1,
-            1,    1,    3,    3,    3,    3,    1,    2,    1,    0,
-            1,    0,    2,    2,    2,    4,    1,    3,    1,    2,
-            2,    3,    2,    3,    1,    1,    2,    3,    1,    1,
-            3,    2,    0,    1,    5,    5,   10,    3,    5,    1,
-            1,    3,    0,    2,    4,    5,    4,    4,    4,    3,
-            1,    1,    1,    1,    1,    1,    0,    1,    1,    2,
-            1,    1,    1,    1,    1,    1,    2,    1,    3,    1,
-            1,    3,    2,    2,    3,    1,    0,    1,    1,    3,
-            3,    3,    4,    1,    1,    2,    3,    3,    3,    3,
-            3,    3,    3,    3,    3,    3,    3,    3,    3,    2,
-            2,    2,    2,    3,    3,    3,    3,    3,    3,    3,
+            1,    1,    1,    1,    1,    1,    1,    1,    1,    0,
+            1,    0,    1,    1,    2,    1,    3,    4,    1,    2,
+            0,    1,    1,    1,    1,    1,    3,    5,    4,    3,
+            4,    2,    3,    1,    1,    7,    6,    2,    3,    1,
+            2,    3,    1,    2,    3,    1,    1,    3,    1,    3,
+            1,    2,    2,    3,    1,    3,    2,    3,    1,    3,
+            2,    0,    1,    1,    1,    1,    1,    3,    7,   10,
+            5,    7,    9,    5,    3,    3,    3,    3,    3,    3,
+            1,    2,    5,    7,    9,    6,    5,    6,    3,    2,
+            1,    1,    1,    0,    2,    1,    3,    8,    0,    4,
+            2,    1,    3,    0,    1,    0,    1,    0,    1,    3,
+            1,    8,    9,    8,    7,    6,    8,    0,    2,    0,
+            2,    1,    2,    2,    0,    2,    0,    2,    0,    2,
+            2,    1,    3,    1,    4,    1,    4,    1,    1,    4,
+            2,    1,    3,    3,    3,    4,    4,    5,    0,    2,
+            4,    3,    1,    1,    7,    0,    2,    1,    3,    3,
+            4,    1,    4,    0,    2,    5,    0,    2,    6,    0,
+            2,    0,    3,    1,    2,    1,    1,    2,    0,    1,
+            3,    0,    1,    1,    1,    6,    8,    6,    1,    2,
+            1,    1,    1,    1,    1,    1,    3,    3,    3,    3,
+            1,    2,    1,    0,    1,    0,    2,    2,    2,    4,
+            1,    3,    1,    2,    2,    3,    2,    3,    1,    1,
+            2,    3,    1,    1,    3,    2,    0,    1,    5,    5,
+           10,    3,    5,    1,    1,    3,    0,    2,    4,    5,
+            4,    4,    4,    3,    1,    1,    1,    1,    1,    1,
+            0,    1,    1,    2,    1,    1,    1,    1,    1,    1,
+            2,    1,    3,    1,    1,    3,    2,    2,    3,    1,
+            0,    1,    1,    3,    3,    3,    4,    1,    1,    2,
             3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
-            2,    2,    2,    2,    3,    3,    3,    3,    3,    3,
-            3,    3,    3,    3,    3,    5,    4,    3,    4,    4,
-            2,    2,    4,    2,    2,    2,    2,    2,    2,    2,
-            2,    2,    2,    2,    1,    3,    2,    1,    2,    4,
-            2,    2,    8,    9,    8,    9,    9,   10,    9,   10,
-            8,    3,    2,    0,    4,    2,    1,    3,    2,    2,
-            2,    4,    1,    1,    1,    1,    1,    1,    1,    1,
-            3,    1,    1,    1,    0,    3,    0,    1,    1,    0,
-            1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-            3,    3,    3,    4,    1,    1,    3,    1,    1,    1,
-            1,    1,    3,    2,    3,    0,    1,    1,    3,    1,
-            1,    1,    1,    1,    3,    1,    1,    4,    4,    1,
-            4,    4,    0,    1,    1,    1,    3,    3,    1,    4,
-            2,    2,    1,    3,    1,    4,    4,    3,    3,    3,
-            3,    1,    3,    1,    1,    3,    1,    1,    4,    1,
-            1,    1,    3,    1,    1,    2,    1,    3,    4,    3,
-            2,    0,    2,    2,    1,    2,    1,    1,    1,    4,
-            3,    3,    3,    3,    6,    3,    1,    1,    2,    1
+            3,    3,    3,    2,    2,    2,    2,    3,    3,    3,
+            3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+            3,    3,    3,    3,    3,    2,    2,    2,    2,    3,
+            3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+            5,    4,    3,    4,    4,    2,    2,    4,    2,    2,
+            2,    2,    2,    2,    2,    2,    2,    2,    2,    1,
+            3,    2,    1,    2,    4,    2,    2,    8,    9,    8,
+            9,    9,   10,    9,   10,    8,    3,    2,    0,    4,
+            2,    1,    3,    2,    2,    2,    4,    1,    1,    1,
+            1,    1,    1,    1,    1,    3,    1,    1,    1,    0,
+            3,    0,    1,    1,    0,    1,    1,    1,    1,    1,
+            1,    1,    1,    1,    1,    3,    3,    3,    4,    1,
+            1,    3,    1,    1,    1,    1,    1,    3,    2,    3,
+            0,    1,    1,    3,    1,    1,    1,    1,    1,    3,
+            1,    1,    4,    4,    1,    4,    4,    0,    1,    1,
+            1,    3,    3,    1,    4,    2,    2,    1,    3,    1,
+            4,    4,    3,    3,    3,    3,    1,    3,    1,    1,
+            3,    1,    1,    4,    1,    1,    1,    3,    1,    1,
+            2,    1,    3,    4,    3,    2,    0,    2,    2,    1,
+            2,    1,    1,    1,    4,    3,    3,    3,    3,    6,
+            3,    1,    1,    2,    1
     );
 
     protected function initReduceCallbacks() {
@@ -1209,10 +1236,10 @@ protected function initReduceCallbacks() {
                 $this->semValue = $this->semStack[$stackPos];
             },
             83 => function ($stackPos) {
-                 $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                $this->semValue = $this->semStack[$stackPos];
             },
             84 => function ($stackPos) {
-                 $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                $this->semValue = $this->semStack[$stackPos];
             },
             85 => function ($stackPos) {
                  $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
@@ -1221,10 +1248,10 @@ protected function initReduceCallbacks() {
                  $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             87 => function ($stackPos) {
-                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             88 => function ($stackPos) {
-                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             89 => function ($stackPos) {
                  $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
@@ -1236,61 +1263,61 @@ protected function initReduceCallbacks() {
                  $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             92 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             93 => function ($stackPos) {
-                 $this->semValue = new Name(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             94 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             95 => function ($stackPos) {
-                 /* nothing */
+                 $this->semValue = new Name(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             96 => function ($stackPos) {
-                 /* nothing */
+                 $this->semValue = new Expr\Variable(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             97 => function ($stackPos) {
                  /* nothing */
             },
             98 => function ($stackPos) {
-                 $this->emitError(new Error('A trailing comma is not allowed here', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes));
+                 /* nothing */
             },
             99 => function ($stackPos) {
-                $this->semValue = $this->semStack[$stackPos];
+                 /* nothing */
             },
             100 => function ($stackPos) {
-                $this->semValue = $this->semStack[$stackPos];
+                 $this->emitError(new Error('A trailing comma is not allowed here', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes));
             },
             101 => function ($stackPos) {
-                 $this->semValue = new Node\Attribute($this->semStack[$stackPos-(1-1)], [], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                $this->semValue = $this->semStack[$stackPos];
             },
             102 => function ($stackPos) {
-                 $this->semValue = new Node\Attribute($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                $this->semValue = $this->semStack[$stackPos];
             },
             103 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Node\Attribute($this->semStack[$stackPos-(1-1)], [], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             104 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = new Node\Attribute($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             105 => function ($stackPos) {
-                 $this->semValue = new Node\AttributeGroup($this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             106 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             107 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Node\AttributeGroup($this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             108 => function ($stackPos) {
-                 $this->semValue = [];
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             109 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             110 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = [];
             },
             111 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
@@ -1299,139 +1326,145 @@ protected function initReduceCallbacks() {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             113 => function ($stackPos) {
-                 $this->semValue = new Stmt\HaltCompiler($this->lexer->handleHaltCompiler(), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             114 => function ($stackPos) {
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+            },
+            115 => function ($stackPos) {
+                 $this->semValue = new Stmt\HaltCompiler($this->lexer->handleHaltCompiler(), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            116 => function ($stackPos) {
                  $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos-(3-2)], null, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_SEMICOLON);
             $this->checkNamespace($this->semValue);
             },
-            115 => function ($stackPos) {
+            117 => function ($stackPos) {
                  $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos-(5-2)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED);
             $this->checkNamespace($this->semValue);
             },
-            116 => function ($stackPos) {
+            118 => function ($stackPos) {
                  $this->semValue = new Stmt\Namespace_(null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED);
             $this->checkNamespace($this->semValue);
             },
-            117 => function ($stackPos) {
+            119 => function ($stackPos) {
                  $this->semValue = new Stmt\Use_($this->semStack[$stackPos-(3-2)], Stmt\Use_::TYPE_NORMAL, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            118 => function ($stackPos) {
+            120 => function ($stackPos) {
                  $this->semValue = new Stmt\Use_($this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
-            119 => function ($stackPos) {
+            121 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
-            120 => function ($stackPos) {
+            122 => function ($stackPos) {
                  $this->semValue = new Stmt\Const_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            121 => function ($stackPos) {
+            123 => function ($stackPos) {
                  $this->semValue = Stmt\Use_::TYPE_FUNCTION;
             },
-            122 => function ($stackPos) {
+            124 => function ($stackPos) {
                  $this->semValue = Stmt\Use_::TYPE_CONSTANT;
             },
-            123 => function ($stackPos) {
+            125 => function ($stackPos) {
                  $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos-(7-3)], $this->semStack[$stackPos-(7-6)], $this->semStack[$stackPos-(7-2)], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
             },
-            124 => function ($stackPos) {
+            126 => function ($stackPos) {
                  $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-5)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
             },
-            125 => function ($stackPos) {
+            127 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
-            126 => function ($stackPos) {
+            128 => function ($stackPos) {
                  $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
-            127 => function ($stackPos) {
+            129 => function ($stackPos) {
                  $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
-            128 => function ($stackPos) {
+            130 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
-            129 => function ($stackPos) {
+            131 => function ($stackPos) {
                  $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
-            130 => function ($stackPos) {
+            132 => function ($stackPos) {
                  $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
-            131 => function ($stackPos) {
+            133 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
-            132 => function ($stackPos) {
+            134 => function ($stackPos) {
                  $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
-            133 => function ($stackPos) {
+            135 => function ($stackPos) {
                  $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
-            134 => function ($stackPos) {
+            136 => function ($stackPos) {
                  $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(1-1)], null, Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(1-1));
             },
-            135 => function ($stackPos) {
+            137 => function ($stackPos) {
                  $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(3-3));
             },
-            136 => function ($stackPos) {
+            138 => function ($stackPos) {
                  $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(1-1)], null, Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(1-1));
             },
-            137 => function ($stackPos) {
+            139 => function ($stackPos) {
                  $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(3-3));
             },
-            138 => function ($stackPos) {
+            140 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)]; $this->semValue->type = Stmt\Use_::TYPE_NORMAL;
             },
-            139 => function ($stackPos) {
+            141 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(2-2)]; $this->semValue->type = $this->semStack[$stackPos-(2-1)];
             },
-            140 => function ($stackPos) {
+            142 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
-            141 => function ($stackPos) {
+            143 => function ($stackPos) {
                  $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
-            142 => function ($stackPos) {
+            144 => function ($stackPos) {
                  $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
-            143 => function ($stackPos) {
+            145 => function ($stackPos) {
                  $this->semValue = new Node\Const_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            144 => function ($stackPos) {
+            146 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
-            145 => function ($stackPos) {
+            147 => function ($stackPos) {
                  $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
-            146 => function ($stackPos) {
+            148 => function ($stackPos) {
                  $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
-            147 => function ($stackPos) {
+            149 => function ($stackPos) {
                  $this->semValue = new Node\Const_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            148 => function ($stackPos) {
+            150 => function ($stackPos) {
                  if (is_array($this->semStack[$stackPos-(2-2)])) { $this->semValue = array_merge($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]); } else { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; };
             },
-            149 => function ($stackPos) {
+            151 => function ($stackPos) {
                  $this->semValue = array();
             },
-            150 => function ($stackPos) {
+            152 => function ($stackPos) {
                  $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; };
             if ($nop !== null) { $this->semStack[$stackPos-(1-1)][] = $nop; } $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            151 => function ($stackPos) {
+            153 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            152 => function ($stackPos) {
+            154 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            153 => function ($stackPos) {
+            155 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            154 => function ($stackPos) {
+            156 => function ($stackPos) {
                  throw new Error('__HALT_COMPILER() can only be used from the outermost scope', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            155 => function ($stackPos) {
+            157 => function ($stackPos) {
 
         if ($this->semStack[$stackPos-(3-2)]) {
             $this->semValue = $this->semStack[$stackPos-(3-2)]; $attrs = $this->startAttributeStack[$stackPos-(3-1)]; $stmts = $this->semValue; if (!empty($attrs['comments'])) {$stmts[0]->setAttribute('comments', array_merge($attrs['comments'], $stmts[0]->getAttribute('comments', []))); };
@@ -1441,46 +1474,46 @@ protected function initReduceCallbacks() {
         }
 
             },
-            156 => function ($stackPos) {
+            158 => function ($stackPos) {
                  $this->semValue = new Stmt\If_($this->semStack[$stackPos-(7-3)], ['stmts' => is_array($this->semStack[$stackPos-(7-5)]) ? $this->semStack[$stackPos-(7-5)] : array($this->semStack[$stackPos-(7-5)]), 'elseifs' => $this->semStack[$stackPos-(7-6)], 'else' => $this->semStack[$stackPos-(7-7)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
             },
-            157 => function ($stackPos) {
+            159 => function ($stackPos) {
                  $this->semValue = new Stmt\If_($this->semStack[$stackPos-(10-3)], ['stmts' => $this->semStack[$stackPos-(10-6)], 'elseifs' => $this->semStack[$stackPos-(10-7)], 'else' => $this->semStack[$stackPos-(10-8)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes);
             },
-            158 => function ($stackPos) {
+            160 => function ($stackPos) {
                  $this->semValue = new Stmt\While_($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
-            159 => function ($stackPos) {
+            161 => function ($stackPos) {
                  $this->semValue = new Stmt\Do_($this->semStack[$stackPos-(7-5)], is_array($this->semStack[$stackPos-(7-2)]) ? $this->semStack[$stackPos-(7-2)] : array($this->semStack[$stackPos-(7-2)]), $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
             },
-            160 => function ($stackPos) {
+            162 => function ($stackPos) {
                  $this->semValue = new Stmt\For_(['init' => $this->semStack[$stackPos-(9-3)], 'cond' => $this->semStack[$stackPos-(9-5)], 'loop' => $this->semStack[$stackPos-(9-7)], 'stmts' => $this->semStack[$stackPos-(9-9)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
             },
-            161 => function ($stackPos) {
+            163 => function ($stackPos) {
                  $this->semValue = new Stmt\Switch_($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
-            162 => function ($stackPos) {
+            164 => function ($stackPos) {
                  $this->semValue = new Stmt\Break_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            163 => function ($stackPos) {
+            165 => function ($stackPos) {
                  $this->semValue = new Stmt\Continue_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            164 => function ($stackPos) {
+            166 => function ($stackPos) {
                  $this->semValue = new Stmt\Return_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            165 => function ($stackPos) {
+            167 => function ($stackPos) {
                  $this->semValue = new Stmt\Global_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            166 => function ($stackPos) {
+            168 => function ($stackPos) {
                  $this->semValue = new Stmt\Static_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            167 => function ($stackPos) {
+            169 => function ($stackPos) {
                  $this->semValue = new Stmt\Echo_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            168 => function ($stackPos) {
+            170 => function ($stackPos) {
                  $this->semValue = new Stmt\InlineHTML($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            169 => function ($stackPos) {
+            171 => function ($stackPos) {
 
         $e = $this->semStack[$stackPos-(2-1)];
         if ($e instanceof Expr\Throw_) {
@@ -1492,75 +1525,69 @@ protected function initReduceCallbacks() {
         }
 
             },
-            170 => function ($stackPos) {
+            172 => function ($stackPos) {
                  $this->semValue = new Stmt\Unset_($this->semStack[$stackPos-(5-3)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
-            171 => function ($stackPos) {
+            173 => function ($stackPos) {
                  $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos-(7-3)], $this->semStack[$stackPos-(7-5)][0], ['keyVar' => null, 'byRef' => $this->semStack[$stackPos-(7-5)][1], 'stmts' => $this->semStack[$stackPos-(7-7)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
             },
-            172 => function ($stackPos) {
+            174 => function ($stackPos) {
                  $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos-(9-3)], $this->semStack[$stackPos-(9-7)][0], ['keyVar' => $this->semStack[$stackPos-(9-5)], 'byRef' => $this->semStack[$stackPos-(9-7)][1], 'stmts' => $this->semStack[$stackPos-(9-9)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
             },
-            173 => function ($stackPos) {
+            175 => function ($stackPos) {
                  $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos-(6-3)], new Expr\Error($this->startAttributeStack[$stackPos-(6-4)] + $this->endAttributeStack[$stackPos-(6-4)]), ['stmts' => $this->semStack[$stackPos-(6-6)]], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
             },
-            174 => function ($stackPos) {
+            176 => function ($stackPos) {
                  $this->semValue = new Stmt\Declare_($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
-            175 => function ($stackPos) {
+            177 => function ($stackPos) {
                  $this->semValue = new Stmt\TryCatch($this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-5)], $this->semStack[$stackPos-(6-6)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); $this->checkTryCatch($this->semValue);
             },
-            176 => function ($stackPos) {
+            178 => function ($stackPos) {
                  $this->semValue = new Stmt\Goto_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            177 => function ($stackPos) {
+            179 => function ($stackPos) {
                  $this->semValue = new Stmt\Label($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            178 => function ($stackPos) {
+            180 => function ($stackPos) {
                  $this->semValue = array(); /* means: no statement */
             },
-            179 => function ($stackPos) {
+            181 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            180 => function ($stackPos) {
+            182 => function ($stackPos) {
                  $startAttributes = $this->startAttributeStack[$stackPos-(1-1)]; if (isset($startAttributes['comments'])) { $this->semValue = new Stmt\Nop($startAttributes + $this->endAttributes); } else { $this->semValue = null; };
             if ($this->semValue === null) $this->semValue = array(); /* means: no statement */
             },
-            181 => function ($stackPos) {
-                 $this->semValue = array();
-            },
-            182 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
-            },
             183 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = array();
             },
             184 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             185 => function ($stackPos) {
-                 $this->semValue = new Stmt\Catch_($this->semStack[$stackPos-(8-3)], $this->semStack[$stackPos-(8-4)], $this->semStack[$stackPos-(8-7)], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             186 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             187 => function ($stackPos) {
-                 $this->semValue = new Stmt\Finally_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\Catch_($this->semStack[$stackPos-(8-3)], $this->semStack[$stackPos-(8-4)], $this->semStack[$stackPos-(8-7)], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
             },
             188 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = null;
             },
             189 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Stmt\Finally_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             190 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             191 => function ($stackPos) {
-                 $this->semValue = false;
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             192 => function ($stackPos) {
-                 $this->semValue = true;
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             193 => function ($stackPos) {
                  $this->semValue = false;
@@ -1569,342 +1596,342 @@ protected function initReduceCallbacks() {
                  $this->semValue = true;
             },
             195 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = false;
             },
             196 => function ($stackPos) {
-                 $this->semValue = [];
+                 $this->semValue = true;
             },
             197 => function ($stackPos) {
-                 $this->semValue = new Stmt\Function_($this->semStack[$stackPos-(8-3)], ['byRef' => $this->semStack[$stackPos-(8-2)], 'params' => $this->semStack[$stackPos-(8-5)], 'returnType' => $this->semStack[$stackPos-(8-7)], 'stmts' => $this->semStack[$stackPos-(8-8)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
+                 $this->semValue = false;
             },
             198 => function ($stackPos) {
-                 $this->semValue = new Stmt\Function_($this->semStack[$stackPos-(9-4)], ['byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-6)], 'returnType' => $this->semStack[$stackPos-(9-8)], 'stmts' => $this->semStack[$stackPos-(9-9)], 'attrGroups' => $this->semStack[$stackPos-(9-1)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
+                 $this->semValue = true;
             },
             199 => function ($stackPos) {
-                 $this->semValue = new Stmt\Class_($this->semStack[$stackPos-(8-3)], ['type' => $this->semStack[$stackPos-(8-2)], 'extends' => $this->semStack[$stackPos-(8-4)], 'implements' => $this->semStack[$stackPos-(8-5)], 'stmts' => $this->semStack[$stackPos-(8-7)], 'attrGroups' => $this->semStack[$stackPos-(8-1)]], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
-            $this->checkClass($this->semValue, $stackPos-(8-3));
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             200 => function ($stackPos) {
-                 $this->semValue = new Stmt\Interface_($this->semStack[$stackPos-(7-3)], ['extends' => $this->semStack[$stackPos-(7-4)], 'stmts' => $this->semStack[$stackPos-(7-6)], 'attrGroups' => $this->semStack[$stackPos-(7-1)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
-            $this->checkInterface($this->semValue, $stackPos-(7-3));
+                 $this->semValue = [];
             },
             201 => function ($stackPos) {
-                 $this->semValue = new Stmt\Trait_($this->semStack[$stackPos-(6-3)], ['stmts' => $this->semStack[$stackPos-(6-5)], 'attrGroups' => $this->semStack[$stackPos-(6-1)]], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\Function_($this->semStack[$stackPos-(8-3)], ['byRef' => $this->semStack[$stackPos-(8-2)], 'params' => $this->semStack[$stackPos-(8-5)], 'returnType' => $this->semStack[$stackPos-(8-7)], 'stmts' => $this->semStack[$stackPos-(8-8)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
             },
             202 => function ($stackPos) {
-                 $this->semValue = new Stmt\Enum_($this->semStack[$stackPos-(8-3)], ['scalarType' => $this->semStack[$stackPos-(8-4)], 'implements' => $this->semStack[$stackPos-(8-5)], 'stmts' => $this->semStack[$stackPos-(8-7)], 'attrGroups' => $this->semStack[$stackPos-(8-1)]], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
-            $this->checkEnum($this->semValue, $stackPos-(8-3));
+                 $this->semValue = new Stmt\Function_($this->semStack[$stackPos-(9-4)], ['byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-6)], 'returnType' => $this->semStack[$stackPos-(9-8)], 'stmts' => $this->semStack[$stackPos-(9-9)], 'attrGroups' => $this->semStack[$stackPos-(9-1)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
             },
             203 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = new Stmt\Class_($this->semStack[$stackPos-(8-3)], ['type' => $this->semStack[$stackPos-(8-2)], 'extends' => $this->semStack[$stackPos-(8-4)], 'implements' => $this->semStack[$stackPos-(8-5)], 'stmts' => $this->semStack[$stackPos-(8-7)], 'attrGroups' => $this->semStack[$stackPos-(8-1)]], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
+            $this->checkClass($this->semValue, $stackPos-(8-3));
             },
             204 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
+                 $this->semValue = new Stmt\Interface_($this->semStack[$stackPos-(7-3)], ['extends' => $this->semStack[$stackPos-(7-4)], 'stmts' => $this->semStack[$stackPos-(7-6)], 'attrGroups' => $this->semStack[$stackPos-(7-1)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
+            $this->checkInterface($this->semValue, $stackPos-(7-3));
             },
             205 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = new Stmt\Trait_($this->semStack[$stackPos-(6-3)], ['stmts' => $this->semStack[$stackPos-(6-5)], 'attrGroups' => $this->semStack[$stackPos-(6-1)]], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
             },
             206 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
+                 $this->semValue = new Stmt\Enum_($this->semStack[$stackPos-(8-3)], ['scalarType' => $this->semStack[$stackPos-(8-4)], 'implements' => $this->semStack[$stackPos-(8-5)], 'stmts' => $this->semStack[$stackPos-(8-7)], 'attrGroups' => $this->semStack[$stackPos-(8-1)]], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
+            $this->checkEnum($this->semValue, $stackPos-(8-3));
             },
             207 => function ($stackPos) {
-                 $this->semValue = 0;
+                 $this->semValue = null;
             },
             208 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT;
+                 $this->semValue = $this->semStack[$stackPos-(2-2)];
             },
             209 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_FINAL;
+                 $this->semValue = null;
             },
             210 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = $this->semStack[$stackPos-(2-2)];
             },
             211 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
+                 $this->semValue = 0;
             },
             212 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT;
             },
             213 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
+                 $this->semValue = Stmt\Class_::MODIFIER_FINAL;
             },
             214 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = null;
             },
             215 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(2-2)];
             },
             216 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = array();
             },
             217 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = $this->semStack[$stackPos-(2-2)];
             },
             218 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = array();
             },
             219 => function ($stackPos) {
-                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = $this->semStack[$stackPos-(2-2)];
             },
             220 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             221 => function ($stackPos) {
-                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             222 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             223 => function ($stackPos) {
                  $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
             },
             224 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = $this->semStack[$stackPos-(4-2)];
             },
             225 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
+                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
             },
             226 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = $this->semStack[$stackPos-(4-2)];
             },
             227 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
             },
             228 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = null;
             },
             229 => function ($stackPos) {
-                 $this->semValue = new Stmt\DeclareDeclare($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(4-2)];
             },
             230 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             231 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-3)];
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             232 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             233 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(5-3)];
+                 $this->semValue = new Stmt\DeclareDeclare($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             234 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             235 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = $this->semStack[$stackPos-(4-3)];
             },
             236 => function ($stackPos) {
-                 $this->semValue = new Stmt\Case_($this->semStack[$stackPos-(4-2)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(4-2)];
             },
             237 => function ($stackPos) {
-                 $this->semValue = new Stmt\Case_(null, $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(5-3)];
             },
             238 => function ($stackPos) {
-                $this->semValue = $this->semStack[$stackPos];
+                 $this->semValue = array();
             },
             239 => function ($stackPos) {
-                $this->semValue = $this->semStack[$stackPos];
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             240 => function ($stackPos) {
-                 $this->semValue = new Expr\Match_($this->semStack[$stackPos-(7-3)], $this->semStack[$stackPos-(7-6)], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\Case_($this->semStack[$stackPos-(4-2)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             241 => function ($stackPos) {
-                 $this->semValue = [];
+                 $this->semValue = new Stmt\Case_(null, $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             242 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                $this->semValue = $this->semStack[$stackPos];
             },
             243 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                $this->semValue = $this->semStack[$stackPos];
             },
             244 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = new Expr\Match_($this->semStack[$stackPos-(7-3)], $this->semStack[$stackPos-(7-6)], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
             },
             245 => function ($stackPos) {
-                 $this->semValue = new Node\MatchArm($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = [];
             },
             246 => function ($stackPos) {
-                 $this->semValue = new Node\MatchArm(null, $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             247 => function ($stackPos) {
-                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             248 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             249 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = new Node\MatchArm($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             250 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Node\MatchArm(null, $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             251 => function ($stackPos) {
-                 $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos-(5-3)], is_array($this->semStack[$stackPos-(5-5)]) ? $this->semStack[$stackPos-(5-5)] : array($this->semStack[$stackPos-(5-5)]), $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
+                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
             },
             252 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = $this->semStack[$stackPos-(4-2)];
             },
             253 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = array();
             },
             254 => function ($stackPos) {
-                 $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-6)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             255 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos-(5-3)], is_array($this->semStack[$stackPos-(5-5)]) ? $this->semStack[$stackPos-(5-5)] : array($this->semStack[$stackPos-(5-5)]), $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
             256 => function ($stackPos) {
-                 $this->semValue = new Stmt\Else_(is_array($this->semStack[$stackPos-(2-2)]) ? $this->semStack[$stackPos-(2-2)] : array($this->semStack[$stackPos-(2-2)]), $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = array();
             },
             257 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             258 => function ($stackPos) {
-                 $this->semValue = new Stmt\Else_($this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-6)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
             },
             259 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)], false);
+                 $this->semValue = null;
             },
             260 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(2-2)], true);
+                 $this->semValue = new Stmt\Else_(is_array($this->semStack[$stackPos-(2-2)]) ? $this->semStack[$stackPos-(2-2)] : array($this->semStack[$stackPos-(2-2)]), $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             261 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)], false);
+                 $this->semValue = null;
             },
             262 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)], false);
+                 $this->semValue = new Stmt\Else_($this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             263 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)], false);
             },
             264 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = array($this->semStack[$stackPos-(2-2)], true);
             },
             265 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)], false);
             },
             266 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)], false);
             },
             267 => function ($stackPos) {
-                 $this->semValue = 0;
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             268 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_PUBLIC;
+                 $this->semValue = array();
             },
             269 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_PROTECTED;
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             270 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_PRIVATE;
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             271 => function ($stackPos) {
-                 $this->semValue = new Node\Param($this->semStack[$stackPos-(6-6)], null, $this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-4)], $this->semStack[$stackPos-(6-5)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes, $this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-1)]);
-            $this->checkParam($this->semValue);
+                 $this->semValue = 0;
             },
             272 => function ($stackPos) {
-                 $this->semValue = new Node\Param($this->semStack[$stackPos-(8-6)], $this->semStack[$stackPos-(8-8)], $this->semStack[$stackPos-(8-3)], $this->semStack[$stackPos-(8-4)], $this->semStack[$stackPos-(8-5)], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes, $this->semStack[$stackPos-(8-2)], $this->semStack[$stackPos-(8-1)]);
-            $this->checkParam($this->semValue);
+                 $this->semValue = Stmt\Class_::MODIFIER_PUBLIC;
             },
             273 => function ($stackPos) {
-                 $this->semValue = new Node\Param(new Expr\Error($this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes), null, $this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-4)], $this->semStack[$stackPos-(6-5)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes, $this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-1)]);
+                 $this->semValue = Stmt\Class_::MODIFIER_PROTECTED;
             },
             274 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = Stmt\Class_::MODIFIER_PRIVATE;
             },
             275 => function ($stackPos) {
-                 $this->semValue = new Node\NullableType($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Node\Param($this->semStack[$stackPos-(6-6)], null, $this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-4)], $this->semStack[$stackPos-(6-5)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes, $this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-1)]);
+            $this->checkParam($this->semValue);
             },
             276 => function ($stackPos) {
-                 $this->semValue = new Node\UnionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Node\Param($this->semStack[$stackPos-(8-6)], $this->semStack[$stackPos-(8-8)], $this->semStack[$stackPos-(8-3)], $this->semStack[$stackPos-(8-4)], $this->semStack[$stackPos-(8-5)], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes, $this->semStack[$stackPos-(8-2)], $this->semStack[$stackPos-(8-1)]);
+            $this->checkParam($this->semValue);
             },
             277 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Node\Param(new Expr\Error($this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes), null, $this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-4)], $this->semStack[$stackPos-(6-5)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes, $this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-1)]);
             },
             278 => function ($stackPos) {
-                 $this->semValue = new Node\Name('static', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             279 => function ($stackPos) {
-                 $this->semValue = $this->handleBuiltinTypes($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Node\NullableType($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             280 => function ($stackPos) {
-                 $this->semValue = new Node\Identifier('array', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Node\UnionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             281 => function ($stackPos) {
-                 $this->semValue = new Node\Identifier('callable', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             282 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
+                 $this->semValue = new Node\Name('static', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             283 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = $this->handleBuiltinTypes($this->semStack[$stackPos-(1-1)]);
             },
             284 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
+                 $this->semValue = new Node\Identifier('array', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             285 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = new Node\Identifier('callable', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             286 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
             },
             287 => function ($stackPos) {
-                 $this->semValue = new Node\NullableType($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             288 => function ($stackPos) {
-                 $this->semValue = new Node\UnionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
             },
             289 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             290 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             291 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = new Node\NullableType($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             292 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
+                 $this->semValue = new Node\UnionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             293 => function ($stackPos) {
                  $this->semValue = null;
             },
             294 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             295 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
+                 $this->semValue = null;
             },
             296 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = $this->semStack[$stackPos-(2-2)];
             },
             297 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = null;
             },
             298 => function ($stackPos) {
-                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(1-1)], false, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = array();
             },
             299 => function ($stackPos) {
-                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(2-2)], true, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(4-2)];
             },
             300 => function ($stackPos) {
-                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(2-2)], false, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             301 => function ($stackPos) {
-                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(3-3)], false, false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->semStack[$stackPos-(3-1)]);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             302 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(1-1)], false, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             303 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(2-2)], true, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             304 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(2-2)], false, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             305 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(3-3)], false, false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->semStack[$stackPos-(3-1)]);
             },
             306 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(2-1)];
@@ -1916,92 +1943,92 @@ protected function initReduceCallbacks() {
                  $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             309 => function ($stackPos) {
-                 $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos-(1-1)], null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             310 => function ($stackPos) {
-                 $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             311 => function ($stackPos) {
-                 if ($this->semStack[$stackPos-(2-2)] !== null) { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; }
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             312 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             313 => function ($stackPos) {
-                 $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; };
-            if ($nop !== null) { $this->semStack[$stackPos-(1-1)][] = $nop; } $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos-(1-1)], null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             314 => function ($stackPos) {
-                 $this->semValue = new Stmt\Property($this->semStack[$stackPos-(5-2)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes, $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-1)]);
-            $this->checkProperty($this->semValue, $stackPos-(5-2));
+                 $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             315 => function ($stackPos) {
-                 $this->semValue = new Stmt\ClassConst($this->semStack[$stackPos-(5-4)], $this->semStack[$stackPos-(5-2)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes, $this->semStack[$stackPos-(5-1)]);
-            $this->checkClassConst($this->semValue, $stackPos-(5-2));
+                 if ($this->semStack[$stackPos-(2-2)] !== null) { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; }
             },
             316 => function ($stackPos) {
-                 $this->semValue = new Stmt\ClassMethod($this->semStack[$stackPos-(10-5)], ['type' => $this->semStack[$stackPos-(10-2)], 'byRef' => $this->semStack[$stackPos-(10-4)], 'params' => $this->semStack[$stackPos-(10-7)], 'returnType' => $this->semStack[$stackPos-(10-9)], 'stmts' => $this->semStack[$stackPos-(10-10)], 'attrGroups' => $this->semStack[$stackPos-(10-1)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes);
-            $this->checkClassMethod($this->semValue, $stackPos-(10-2));
+                 $this->semValue = array();
             },
             317 => function ($stackPos) {
-                 $this->semValue = new Stmt\TraitUse($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; };
+            if ($nop !== null) { $this->semStack[$stackPos-(1-1)][] = $nop; } $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             318 => function ($stackPos) {
-                 $this->semValue = new Stmt\EnumCase($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-4)], $this->semStack[$stackPos-(5-1)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\Property($this->semStack[$stackPos-(5-2)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes, $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-1)]);
+            $this->checkProperty($this->semValue, $stackPos-(5-2));
             },
             319 => function ($stackPos) {
-                 $this->semValue = null; /* will be skipped */
+                 $this->semValue = new Stmt\ClassConst($this->semStack[$stackPos-(5-4)], $this->semStack[$stackPos-(5-2)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes, $this->semStack[$stackPos-(5-1)]);
+            $this->checkClassConst($this->semValue, $stackPos-(5-2));
             },
             320 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = new Stmt\ClassMethod($this->semStack[$stackPos-(10-5)], ['type' => $this->semStack[$stackPos-(10-2)], 'byRef' => $this->semStack[$stackPos-(10-4)], 'params' => $this->semStack[$stackPos-(10-7)], 'returnType' => $this->semStack[$stackPos-(10-9)], 'stmts' => $this->semStack[$stackPos-(10-10)], 'attrGroups' => $this->semStack[$stackPos-(10-1)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes);
+            $this->checkClassMethod($this->semValue, $stackPos-(10-2));
             },
             321 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = new Stmt\TraitUse($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             322 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = new Stmt\EnumCase($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-4)], $this->semStack[$stackPos-(5-1)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
             323 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = null; /* will be skipped */
             },
             324 => function ($stackPos) {
-                 $this->semValue = new Stmt\TraitUseAdaptation\Precedence($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = array();
             },
             325 => function ($stackPos) {
-                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(5-1)][0], $this->semStack[$stackPos-(5-1)][1], $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             326 => function ($stackPos) {
-                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], $this->semStack[$stackPos-(4-3)], null, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = array();
             },
             327 => function ($stackPos) {
-                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             328 => function ($stackPos) {
-                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\TraitUseAdaptation\Precedence($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             329 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
+                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(5-1)][0], $this->semStack[$stackPos-(5-1)][1], $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
             330 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], $this->semStack[$stackPos-(4-3)], null, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             331 => function ($stackPos) {
-                 $this->semValue = array(null, $this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             332 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             333 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
             },
             334 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             335 => function ($stackPos) {
-                 $this->semValue = 0;
+                 $this->semValue = array(null, $this->semStack[$stackPos-(1-1)]);
             },
             336 => function ($stackPos) {
-                 $this->semValue = 0;
+                 $this->semValue = null;
             },
             337 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
@@ -2010,529 +2037,529 @@ protected function initReduceCallbacks() {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             339 => function ($stackPos) {
-                 $this->checkModifier($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $this->semValue = $this->semStack[$stackPos-(2-1)] | $this->semStack[$stackPos-(2-2)];
+                 $this->semValue = 0;
             },
             340 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_PUBLIC;
+                 $this->semValue = 0;
             },
             341 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_PROTECTED;
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             342 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_PRIVATE;
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             343 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_STATIC;
+                 $this->checkModifier($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $this->semValue = $this->semStack[$stackPos-(2-1)] | $this->semStack[$stackPos-(2-2)];
             },
             344 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT;
+                 $this->semValue = Stmt\Class_::MODIFIER_PUBLIC;
             },
             345 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_FINAL;
+                 $this->semValue = Stmt\Class_::MODIFIER_PROTECTED;
             },
             346 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = Stmt\Class_::MODIFIER_PRIVATE;
             },
             347 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = Stmt\Class_::MODIFIER_STATIC;
             },
             348 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT;
             },
             349 => function ($stackPos) {
-                 $this->semValue = new Node\VarLikeIdentifier(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = Stmt\Class_::MODIFIER_FINAL;
             },
             350 => function ($stackPos) {
-                 $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos-(1-1)], null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             351 => function ($stackPos) {
-                 $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             352 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             353 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Node\VarLikeIdentifier(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             354 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos-(1-1)], null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             355 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             356 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             357 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             358 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             359 => function ($stackPos) {
-                 $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             360 => function ($stackPos) {
-                 $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = array();
             },
             361 => function ($stackPos) {
-                 $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             362 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignRef($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             363 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             364 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             365 => function ($stackPos) {
-                 $this->semValue = new Expr\Clone_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             366 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignRef($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             367 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             368 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             369 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Clone_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             370 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             371 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             372 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             373 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             374 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             375 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             376 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             377 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             378 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Coalesce($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             379 => function ($stackPos) {
-                 $this->semValue = new Expr\PostInc($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             380 => function ($stackPos) {
-                 $this->semValue = new Expr\PreInc($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             381 => function ($stackPos) {
-                 $this->semValue = new Expr\PostDec($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             382 => function ($stackPos) {
-                 $this->semValue = new Expr\PreDec($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\Coalesce($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             383 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\BooleanOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\PostInc($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             384 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\BooleanAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\PreInc($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             385 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\LogicalOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\PostDec($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             386 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\LogicalAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\PreDec($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             387 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\LogicalXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\BooleanOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             388 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\BooleanAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             389 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\LogicalOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             390 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\LogicalAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             391 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\LogicalXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             392 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             393 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             394 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             395 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             396 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             397 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             398 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             399 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             400 => function ($stackPos) {
-                 $this->semValue = new Expr\UnaryPlus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             401 => function ($stackPos) {
-                 $this->semValue = new Expr\UnaryMinus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             402 => function ($stackPos) {
-                 $this->semValue = new Expr\BooleanNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             403 => function ($stackPos) {
-                 $this->semValue = new Expr\BitwiseNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             404 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Identical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             405 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\NotIdentical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\UnaryPlus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             406 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Equal($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\UnaryMinus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             407 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\NotEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BooleanNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             408 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Spaceship($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BitwiseNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             409 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Smaller($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Identical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             410 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\SmallerOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\NotIdentical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             411 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Greater($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Equal($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             412 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\GreaterOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\NotEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             413 => function ($stackPos) {
-                 $this->semValue = new Expr\Instanceof_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Spaceship($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             414 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = new Expr\BinaryOp\Smaller($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             415 => function ($stackPos) {
-                 $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(5-1)], $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\SmallerOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             416 => function ($stackPos) {
-                 $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(4-1)], null, $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Greater($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             417 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Coalesce($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\GreaterOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             418 => function ($stackPos) {
-                 $this->semValue = new Expr\Isset_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Instanceof_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             419 => function ($stackPos) {
-                 $this->semValue = new Expr\Empty_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             420 => function ($stackPos) {
-                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(5-1)], $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
             421 => function ($stackPos) {
-                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE_ONCE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(4-1)], null, $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             422 => function ($stackPos) {
-                 $this->semValue = new Expr\Eval_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Coalesce($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             423 => function ($stackPos) {
-                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Isset_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             424 => function ($stackPos) {
-                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE_ONCE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Empty_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             425 => function ($stackPos) {
-                 $this->semValue = new Expr\Cast\Int_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             426 => function ($stackPos) {
-                 $attrs = $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes;
-            $attrs['kind'] = $this->getFloatCastKind($this->semStack[$stackPos-(2-1)]);
-            $this->semValue = new Expr\Cast\Double($this->semStack[$stackPos-(2-2)], $attrs);
+                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE_ONCE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             427 => function ($stackPos) {
-                 $this->semValue = new Expr\Cast\String_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Eval_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             428 => function ($stackPos) {
-                 $this->semValue = new Expr\Cast\Array_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             429 => function ($stackPos) {
-                 $this->semValue = new Expr\Cast\Object_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE_ONCE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             430 => function ($stackPos) {
-                 $this->semValue = new Expr\Cast\Bool_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Cast\Int_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             431 => function ($stackPos) {
-                 $this->semValue = new Expr\Cast\Unset_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $attrs = $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes;
+            $attrs['kind'] = $this->getFloatCastKind($this->semStack[$stackPos-(2-1)]);
+            $this->semValue = new Expr\Cast\Double($this->semStack[$stackPos-(2-2)], $attrs);
             },
             432 => function ($stackPos) {
-                 $attrs = $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes;
-            $attrs['kind'] = strtolower($this->semStack[$stackPos-(2-1)]) === 'exit' ? Expr\Exit_::KIND_EXIT : Expr\Exit_::KIND_DIE;
-            $this->semValue = new Expr\Exit_($this->semStack[$stackPos-(2-2)], $attrs);
+                 $this->semValue = new Expr\Cast\String_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             433 => function ($stackPos) {
-                 $this->semValue = new Expr\ErrorSuppress($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Cast\Array_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             434 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\Cast\Object_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             435 => function ($stackPos) {
-                 $this->semValue = new Expr\ShellExec($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Cast\Bool_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             436 => function ($stackPos) {
-                 $this->semValue = new Expr\Print_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Cast\Unset_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             437 => function ($stackPos) {
-                 $this->semValue = new Expr\Yield_(null, null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $attrs = $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes;
+            $attrs['kind'] = strtolower($this->semStack[$stackPos-(2-1)]) === 'exit' ? Expr\Exit_::KIND_EXIT : Expr\Exit_::KIND_DIE;
+            $this->semValue = new Expr\Exit_($this->semStack[$stackPos-(2-2)], $attrs);
             },
             438 => function ($stackPos) {
-                 $this->semValue = new Expr\Yield_($this->semStack[$stackPos-(2-2)], null, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ErrorSuppress($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             439 => function ($stackPos) {
-                 $this->semValue = new Expr\Yield_($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             440 => function ($stackPos) {
-                 $this->semValue = new Expr\YieldFrom($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ShellExec($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             441 => function ($stackPos) {
-                 $this->semValue = new Expr\Throw_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Print_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             442 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrowFunction(['static' => false, 'byRef' => $this->semStack[$stackPos-(8-2)], 'params' => $this->semStack[$stackPos-(8-4)], 'returnType' => $this->semStack[$stackPos-(8-6)], 'expr' => $this->semStack[$stackPos-(8-8)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Yield_(null, null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             443 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrowFunction(['static' => true, 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-5)], 'returnType' => $this->semStack[$stackPos-(9-7)], 'expr' => $this->semStack[$stackPos-(9-9)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Yield_($this->semStack[$stackPos-(2-2)], null, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             444 => function ($stackPos) {
-                 $this->semValue = new Expr\Closure(['static' => false, 'byRef' => $this->semStack[$stackPos-(8-2)], 'params' => $this->semStack[$stackPos-(8-4)], 'uses' => $this->semStack[$stackPos-(8-6)], 'returnType' => $this->semStack[$stackPos-(8-7)], 'stmts' => $this->semStack[$stackPos-(8-8)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Yield_($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             445 => function ($stackPos) {
-                 $this->semValue = new Expr\Closure(['static' => true, 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-5)], 'uses' => $this->semStack[$stackPos-(9-7)], 'returnType' => $this->semStack[$stackPos-(9-8)], 'stmts' => $this->semStack[$stackPos-(9-9)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\YieldFrom($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             446 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrowFunction(['static' => false, 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-5)], 'returnType' => $this->semStack[$stackPos-(9-7)], 'expr' => $this->semStack[$stackPos-(9-9)], 'attrGroups' => $this->semStack[$stackPos-(9-1)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Throw_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             447 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrowFunction(['static' => true, 'byRef' => $this->semStack[$stackPos-(10-4)], 'params' => $this->semStack[$stackPos-(10-6)], 'returnType' => $this->semStack[$stackPos-(10-8)], 'expr' => $this->semStack[$stackPos-(10-10)], 'attrGroups' => $this->semStack[$stackPos-(10-1)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ArrowFunction(['static' => false, 'byRef' => $this->semStack[$stackPos-(8-2)], 'params' => $this->semStack[$stackPos-(8-4)], 'returnType' => $this->semStack[$stackPos-(8-6)], 'expr' => $this->semStack[$stackPos-(8-8)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
             },
             448 => function ($stackPos) {
-                 $this->semValue = new Expr\Closure(['static' => false, 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-5)], 'uses' => $this->semStack[$stackPos-(9-7)], 'returnType' => $this->semStack[$stackPos-(9-8)], 'stmts' => $this->semStack[$stackPos-(9-9)], 'attrGroups' => $this->semStack[$stackPos-(9-1)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ArrowFunction(['static' => true, 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-5)], 'returnType' => $this->semStack[$stackPos-(9-7)], 'expr' => $this->semStack[$stackPos-(9-9)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
             },
             449 => function ($stackPos) {
-                 $this->semValue = new Expr\Closure(['static' => true, 'byRef' => $this->semStack[$stackPos-(10-4)], 'params' => $this->semStack[$stackPos-(10-6)], 'uses' => $this->semStack[$stackPos-(10-8)], 'returnType' => $this->semStack[$stackPos-(10-9)], 'stmts' => $this->semStack[$stackPos-(10-10)], 'attrGroups' => $this->semStack[$stackPos-(10-1)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Closure(['static' => false, 'byRef' => $this->semStack[$stackPos-(8-2)], 'params' => $this->semStack[$stackPos-(8-4)], 'uses' => $this->semStack[$stackPos-(8-6)], 'returnType' => $this->semStack[$stackPos-(8-7)], 'stmts' => $this->semStack[$stackPos-(8-8)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
             },
             450 => function ($stackPos) {
-                 $this->semValue = array(new Stmt\Class_(null, ['type' => 0, 'extends' => $this->semStack[$stackPos-(8-4)], 'implements' => $this->semStack[$stackPos-(8-5)], 'stmts' => $this->semStack[$stackPos-(8-7)], 'attrGroups' => $this->semStack[$stackPos-(8-1)]], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes), $this->semStack[$stackPos-(8-3)]);
-            $this->checkClass($this->semValue[0], -1);
+                 $this->semValue = new Expr\Closure(['static' => true, 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-5)], 'uses' => $this->semStack[$stackPos-(9-7)], 'returnType' => $this->semStack[$stackPos-(9-8)], 'stmts' => $this->semStack[$stackPos-(9-9)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
             },
             451 => function ($stackPos) {
-                 $this->semValue = new Expr\New_($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ArrowFunction(['static' => false, 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-5)], 'returnType' => $this->semStack[$stackPos-(9-7)], 'expr' => $this->semStack[$stackPos-(9-9)], 'attrGroups' => $this->semStack[$stackPos-(9-1)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
             },
             452 => function ($stackPos) {
-                 list($class, $ctorArgs) = $this->semStack[$stackPos-(2-2)]; $this->semValue = new Expr\New_($class, $ctorArgs, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ArrowFunction(['static' => true, 'byRef' => $this->semStack[$stackPos-(10-4)], 'params' => $this->semStack[$stackPos-(10-6)], 'returnType' => $this->semStack[$stackPos-(10-8)], 'expr' => $this->semStack[$stackPos-(10-10)], 'attrGroups' => $this->semStack[$stackPos-(10-1)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes);
             },
             453 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = new Expr\Closure(['static' => false, 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-5)], 'uses' => $this->semStack[$stackPos-(9-7)], 'returnType' => $this->semStack[$stackPos-(9-8)], 'stmts' => $this->semStack[$stackPos-(9-9)], 'attrGroups' => $this->semStack[$stackPos-(9-1)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
             },
             454 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-3)];
+                 $this->semValue = new Expr\Closure(['static' => true, 'byRef' => $this->semStack[$stackPos-(10-4)], 'params' => $this->semStack[$stackPos-(10-6)], 'uses' => $this->semStack[$stackPos-(10-8)], 'returnType' => $this->semStack[$stackPos-(10-9)], 'stmts' => $this->semStack[$stackPos-(10-10)], 'attrGroups' => $this->semStack[$stackPos-(10-1)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes);
             },
             455 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = array(new Stmt\Class_(null, ['type' => 0, 'extends' => $this->semStack[$stackPos-(8-4)], 'implements' => $this->semStack[$stackPos-(8-5)], 'stmts' => $this->semStack[$stackPos-(8-7)], 'attrGroups' => $this->semStack[$stackPos-(8-1)]], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes), $this->semStack[$stackPos-(8-3)]);
+            $this->checkClass($this->semValue[0], -1);
             },
             456 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Expr\New_($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             457 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 list($class, $ctorArgs) = $this->semStack[$stackPos-(2-2)]; $this->semValue = new Expr\New_($class, $ctorArgs, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             458 => function ($stackPos) {
-                 $this->semValue = new Expr\ClosureUse($this->semStack[$stackPos-(2-2)], $this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = array();
             },
             459 => function ($stackPos) {
-                 $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(4-3)];
             },
             460 => function ($stackPos) {
-                 $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             461 => function ($stackPos) {
-                 $this->semValue = new Expr\StaticCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             462 => function ($stackPos) {
-                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             463 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\ClosureUse($this->semStack[$stackPos-(2-2)], $this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             464 => function ($stackPos) {
-                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             465 => function ($stackPos) {
-                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             466 => function ($stackPos) {
-                 $this->semValue = new Name\FullyQualified(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\StaticCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             467 => function ($stackPos) {
-                 $this->semValue = new Name\Relative(substr($this->semStack[$stackPos-(1-1)], 10), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             468 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             469 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             470 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             471 => function ($stackPos) {
-                 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2;
+                 $this->semValue = new Name\FullyQualified(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             472 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Name\Relative(substr($this->semStack[$stackPos-(1-1)], 10), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             473 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             474 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             475 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             476 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2;
             },
             477 => function ($stackPos) {
-                 $this->semValue = array(new Scalar\EncapsedStringPart(Scalar\String_::parseEscapeSequences($this->semStack[$stackPos-(1-1)], '`'), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes));
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             478 => function ($stackPos) {
-                 foreach ($this->semStack[$stackPos-(1-1)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', true); } }; $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             479 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = null;
             },
             480 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             481 => function ($stackPos) {
-                 $this->semValue = new Expr\ConstFetch($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = array();
             },
             482 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Line($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = array(new Scalar\EncapsedStringPart(Scalar\String_::parseEscapeSequences($this->semStack[$stackPos-(1-1)], '`'), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes));
             },
             483 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\File($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 foreach ($this->semStack[$stackPos-(1-1)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', true); } }; $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             484 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Dir($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = array();
             },
             485 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Class_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             486 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Trait_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ConstFetch($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             487 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Method($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Line($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             488 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Function_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\File($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             489 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Namespace_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Dir($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             490 => function ($stackPos) {
-                 $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Class_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             491 => function ($stackPos) {
-                 $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(3-1)], new Expr\Error($this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)]), $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->errorState = 2;
+                 $this->semValue = new Scalar\MagicConst\Trait_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             492 => function ($stackPos) {
-                 $attrs = $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes; $attrs['kind'] = Expr\Array_::KIND_SHORT;
-            $this->semValue = new Expr\Array_($this->semStack[$stackPos-(3-2)], $attrs);
+                 $this->semValue = new Scalar\MagicConst\Method($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             493 => function ($stackPos) {
-                 $attrs = $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes; $attrs['kind'] = Expr\Array_::KIND_LONG;
-            $this->semValue = new Expr\Array_($this->semStack[$stackPos-(4-3)], $attrs);
+                 $this->semValue = new Scalar\MagicConst\Function_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             494 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Scalar\MagicConst\Namespace_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             495 => function ($stackPos) {
-                 $attrs = $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes; $attrs['kind'] = ($this->semStack[$stackPos-(1-1)][0] === "'" || ($this->semStack[$stackPos-(1-1)][1] === "'" && ($this->semStack[$stackPos-(1-1)][0] === 'b' || $this->semStack[$stackPos-(1-1)][0] === 'B')) ? Scalar\String_::KIND_SINGLE_QUOTED : Scalar\String_::KIND_DOUBLE_QUOTED);
-            $this->semValue = new Scalar\String_(Scalar\String_::parse($this->semStack[$stackPos-(1-1)]), $attrs);
+                 $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             496 => function ($stackPos) {
-                 $attrs = $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes; $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED;
-            foreach ($this->semStack[$stackPos-(3-2)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '"', true); } }; $this->semValue = new Scalar\Encapsed($this->semStack[$stackPos-(3-2)], $attrs);
+                 $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(3-1)], new Expr\Error($this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)]), $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->errorState = 2;
             },
             497 => function ($stackPos) {
-                 $this->semValue = $this->parseLNumber($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $attrs = $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes; $attrs['kind'] = Expr\Array_::KIND_SHORT;
+            $this->semValue = new Expr\Array_($this->semStack[$stackPos-(3-2)], $attrs);
             },
             498 => function ($stackPos) {
-                 $this->semValue = new Scalar\DNumber(Scalar\DNumber::parse($this->semStack[$stackPos-(1-1)]), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $attrs = $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes; $attrs['kind'] = Expr\Array_::KIND_LONG;
+            $this->semValue = new Expr\Array_($this->semStack[$stackPos-(4-3)], $attrs);
             },
             499 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             500 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $attrs = $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes; $attrs['kind'] = ($this->semStack[$stackPos-(1-1)][0] === "'" || ($this->semStack[$stackPos-(1-1)][1] === "'" && ($this->semStack[$stackPos-(1-1)][0] === 'b' || $this->semStack[$stackPos-(1-1)][0] === 'B')) ? Scalar\String_::KIND_SINGLE_QUOTED : Scalar\String_::KIND_DOUBLE_QUOTED);
+            $this->semValue = new Scalar\String_(Scalar\String_::parse($this->semStack[$stackPos-(1-1)]), $attrs);
             },
             501 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $attrs = $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes; $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED;
+            foreach ($this->semStack[$stackPos-(3-2)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '"', true); } }; $this->semValue = new Scalar\Encapsed($this->semStack[$stackPos-(3-2)], $attrs);
             },
             502 => function ($stackPos) {
-                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)], true);
+                 $this->semValue = $this->parseLNumber($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             503 => function ($stackPos) {
-                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(2-1)], '', $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(2-2)] + $this->endAttributeStack[$stackPos-(2-2)], true);
+                 $this->semValue = new Scalar\DNumber(Scalar\DNumber::parse($this->semStack[$stackPos-(1-1)]), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             504 => function ($stackPos) {
-                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)], true);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             505 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             506 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             507 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)], true);
             },
             508 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(2-1)], '', $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(2-2)] + $this->endAttributeStack[$stackPos-(2-2)], true);
             },
             509 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)], true);
             },
             510 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = null;
             },
             511 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
@@ -2541,10 +2568,10 @@ protected function initReduceCallbacks() {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             513 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             514 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             515 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
@@ -2553,192 +2580,207 @@ protected function initReduceCallbacks() {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             517 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             518 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             519 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             520 => function ($stackPos) {
-                 $this->semValue = new Expr\MethodCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             521 => function ($stackPos) {
-                 $this->semValue = new Expr\NullsafeMethodCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             522 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             523 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             524 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             525 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\MethodCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             526 => function ($stackPos) {
-                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\NullsafeMethodCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             527 => function ($stackPos) {
-                 $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = null;
             },
             528 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             529 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             530 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             531 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable(new Expr\Error($this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes), $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); $this->errorState = 2;
+                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             532 => function ($stackPos) {
-                 $var = $this->semStack[$stackPos-(1-1)]->name; $this->semValue = \is_string($var) ? new Node\VarLikeIdentifier($var, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes) : $var;
+                 $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             533 => function ($stackPos) {
-                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             534 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             535 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             536 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Variable(new Expr\Error($this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes), $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); $this->errorState = 2;
             },
             537 => function ($stackPos) {
-                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $var = $this->semStack[$stackPos-(1-1)]->name; $this->semValue = \is_string($var) ? new Node\VarLikeIdentifier($var, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes) : $var;
             },
             538 => function ($stackPos) {
-                 $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             539 => function ($stackPos) {
-                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             540 => function ($stackPos) {
-                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             541 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             542 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             543 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             544 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             545 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             546 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             547 => function ($stackPos) {
-                 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2;
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             548 => function ($stackPos) {
-                 $this->semValue = new Expr\List_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             549 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)]; $end = count($this->semValue)-1; if ($this->semValue[$end] === null) array_pop($this->semValue);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             550 => function ($stackPos) {
-                $this->semValue = $this->semStack[$stackPos];
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             551 => function ($stackPos) {
-                 /* do nothing -- prevent default action of $$=$this->semStack[$1]. See $551. */
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             552 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2;
             },
             553 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Expr\List_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             554 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)]; $end = count($this->semValue)-1; if ($this->semValue[$end] === null) array_pop($this->semValue);
             },
             555 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                $this->semValue = $this->semStack[$stackPos];
             },
             556 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 /* do nothing -- prevent default action of $$=$this->semStack[$1]. See $551. */
             },
             557 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             558 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-1)], true, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             559 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             560 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             561 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             562 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             563 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-1)], true, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             564 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             565 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]);
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             566 => function ($stackPos) {
-                 $this->semValue = new Scalar\EncapsedStringPart($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = null;
             },
             567 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             568 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             569 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             570 => function ($stackPos) {
-                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]);
             },
             571 => function ($stackPos) {
-                 $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\EncapsedStringPart($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             572 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             573 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             574 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-4)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             575 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             576 => function ($stackPos) {
-                 $this->semValue = new Scalar\String_($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             577 => function ($stackPos) {
-                 $this->semValue = $this->parseNumString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             578 => function ($stackPos) {
-                 $this->semValue = $this->parseNumString('-' . $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             579 => function ($stackPos) {
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-4)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
+            },
+            580 => function ($stackPos) {
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+            },
+            581 => function ($stackPos) {
+                 $this->semValue = new Scalar\String_($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            582 => function ($stackPos) {
+                 $this->semValue = $this->parseNumString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            583 => function ($stackPos) {
+                 $this->semValue = $this->parseNumString('-' . $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+            },
+            584 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
         ];
diff --git a/lib/PhpParser/Parser/Tokens.php b/lib/PhpParser/Parser/Tokens.php
index ed5ead224d..d6a99d6890 100644
--- a/lib/PhpParser/Parser/Tokens.php
+++ b/lib/PhpParser/Parser/Tokens.php
@@ -35,111 +35,113 @@ final class Tokens
     const T_COALESCE = 283;
     const T_BOOLEAN_OR = 284;
     const T_BOOLEAN_AND = 285;
-    const T_IS_EQUAL = 286;
-    const T_IS_NOT_EQUAL = 287;
-    const T_IS_IDENTICAL = 288;
-    const T_IS_NOT_IDENTICAL = 289;
-    const T_SPACESHIP = 290;
-    const T_IS_SMALLER_OR_EQUAL = 291;
-    const T_IS_GREATER_OR_EQUAL = 292;
-    const T_SL = 293;
-    const T_SR = 294;
-    const T_INSTANCEOF = 295;
-    const T_INC = 296;
-    const T_DEC = 297;
-    const T_INT_CAST = 298;
-    const T_DOUBLE_CAST = 299;
-    const T_STRING_CAST = 300;
-    const T_ARRAY_CAST = 301;
-    const T_OBJECT_CAST = 302;
-    const T_BOOL_CAST = 303;
-    const T_UNSET_CAST = 304;
-    const T_POW = 305;
-    const T_NEW = 306;
-    const T_CLONE = 307;
-    const T_EXIT = 308;
-    const T_IF = 309;
-    const T_ELSEIF = 310;
-    const T_ELSE = 311;
-    const T_ENDIF = 312;
-    const T_LNUMBER = 313;
-    const T_DNUMBER = 314;
-    const T_STRING = 315;
-    const T_STRING_VARNAME = 316;
-    const T_VARIABLE = 317;
-    const T_NUM_STRING = 318;
-    const T_INLINE_HTML = 319;
-    const T_ENCAPSED_AND_WHITESPACE = 320;
-    const T_CONSTANT_ENCAPSED_STRING = 321;
-    const T_ECHO = 322;
-    const T_DO = 323;
-    const T_WHILE = 324;
-    const T_ENDWHILE = 325;
-    const T_FOR = 326;
-    const T_ENDFOR = 327;
-    const T_FOREACH = 328;
-    const T_ENDFOREACH = 329;
-    const T_DECLARE = 330;
-    const T_ENDDECLARE = 331;
-    const T_AS = 332;
-    const T_SWITCH = 333;
-    const T_MATCH = 334;
-    const T_ENDSWITCH = 335;
-    const T_CASE = 336;
-    const T_DEFAULT = 337;
-    const T_BREAK = 338;
-    const T_CONTINUE = 339;
-    const T_GOTO = 340;
-    const T_FUNCTION = 341;
-    const T_FN = 342;
-    const T_CONST = 343;
-    const T_RETURN = 344;
-    const T_TRY = 345;
-    const T_CATCH = 346;
-    const T_FINALLY = 347;
-    const T_USE = 348;
-    const T_INSTEADOF = 349;
-    const T_GLOBAL = 350;
-    const T_STATIC = 351;
-    const T_ABSTRACT = 352;
-    const T_FINAL = 353;
-    const T_PRIVATE = 354;
-    const T_PROTECTED = 355;
-    const T_PUBLIC = 356;
-    const T_VAR = 357;
-    const T_UNSET = 358;
-    const T_ISSET = 359;
-    const T_EMPTY = 360;
-    const T_HALT_COMPILER = 361;
-    const T_CLASS = 362;
-    const T_TRAIT = 363;
-    const T_INTERFACE = 364;
-    const T_ENUM = 365;
-    const T_EXTENDS = 366;
-    const T_IMPLEMENTS = 367;
-    const T_OBJECT_OPERATOR = 368;
-    const T_NULLSAFE_OBJECT_OPERATOR = 369;
-    const T_LIST = 370;
-    const T_ARRAY = 371;
-    const T_CALLABLE = 372;
-    const T_CLASS_C = 373;
-    const T_TRAIT_C = 374;
-    const T_METHOD_C = 375;
-    const T_FUNC_C = 376;
-    const T_LINE = 377;
-    const T_FILE = 378;
-    const T_START_HEREDOC = 379;
-    const T_END_HEREDOC = 380;
-    const T_DOLLAR_OPEN_CURLY_BRACES = 381;
-    const T_CURLY_OPEN = 382;
-    const T_PAAMAYIM_NEKUDOTAYIM = 383;
-    const T_NAMESPACE = 384;
-    const T_NS_C = 385;
-    const T_DIR = 386;
-    const T_NS_SEPARATOR = 387;
-    const T_ELLIPSIS = 388;
-    const T_NAME_FULLY_QUALIFIED = 389;
-    const T_NAME_QUALIFIED = 390;
-    const T_NAME_RELATIVE = 391;
-    const T_ATTRIBUTE = 392;
+    const T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG = 286;
+    const T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG = 287;
+    const T_IS_EQUAL = 288;
+    const T_IS_NOT_EQUAL = 289;
+    const T_IS_IDENTICAL = 290;
+    const T_IS_NOT_IDENTICAL = 291;
+    const T_SPACESHIP = 292;
+    const T_IS_SMALLER_OR_EQUAL = 293;
+    const T_IS_GREATER_OR_EQUAL = 294;
+    const T_SL = 295;
+    const T_SR = 296;
+    const T_INSTANCEOF = 297;
+    const T_INC = 298;
+    const T_DEC = 299;
+    const T_INT_CAST = 300;
+    const T_DOUBLE_CAST = 301;
+    const T_STRING_CAST = 302;
+    const T_ARRAY_CAST = 303;
+    const T_OBJECT_CAST = 304;
+    const T_BOOL_CAST = 305;
+    const T_UNSET_CAST = 306;
+    const T_POW = 307;
+    const T_NEW = 308;
+    const T_CLONE = 309;
+    const T_EXIT = 310;
+    const T_IF = 311;
+    const T_ELSEIF = 312;
+    const T_ELSE = 313;
+    const T_ENDIF = 314;
+    const T_LNUMBER = 315;
+    const T_DNUMBER = 316;
+    const T_STRING = 317;
+    const T_STRING_VARNAME = 318;
+    const T_VARIABLE = 319;
+    const T_NUM_STRING = 320;
+    const T_INLINE_HTML = 321;
+    const T_ENCAPSED_AND_WHITESPACE = 322;
+    const T_CONSTANT_ENCAPSED_STRING = 323;
+    const T_ECHO = 324;
+    const T_DO = 325;
+    const T_WHILE = 326;
+    const T_ENDWHILE = 327;
+    const T_FOR = 328;
+    const T_ENDFOR = 329;
+    const T_FOREACH = 330;
+    const T_ENDFOREACH = 331;
+    const T_DECLARE = 332;
+    const T_ENDDECLARE = 333;
+    const T_AS = 334;
+    const T_SWITCH = 335;
+    const T_MATCH = 336;
+    const T_ENDSWITCH = 337;
+    const T_CASE = 338;
+    const T_DEFAULT = 339;
+    const T_BREAK = 340;
+    const T_CONTINUE = 341;
+    const T_GOTO = 342;
+    const T_FUNCTION = 343;
+    const T_FN = 344;
+    const T_CONST = 345;
+    const T_RETURN = 346;
+    const T_TRY = 347;
+    const T_CATCH = 348;
+    const T_FINALLY = 349;
+    const T_USE = 350;
+    const T_INSTEADOF = 351;
+    const T_GLOBAL = 352;
+    const T_STATIC = 353;
+    const T_ABSTRACT = 354;
+    const T_FINAL = 355;
+    const T_PRIVATE = 356;
+    const T_PROTECTED = 357;
+    const T_PUBLIC = 358;
+    const T_VAR = 359;
+    const T_UNSET = 360;
+    const T_ISSET = 361;
+    const T_EMPTY = 362;
+    const T_HALT_COMPILER = 363;
+    const T_CLASS = 364;
+    const T_TRAIT = 365;
+    const T_INTERFACE = 366;
+    const T_ENUM = 367;
+    const T_EXTENDS = 368;
+    const T_IMPLEMENTS = 369;
+    const T_OBJECT_OPERATOR = 370;
+    const T_NULLSAFE_OBJECT_OPERATOR = 371;
+    const T_LIST = 372;
+    const T_ARRAY = 373;
+    const T_CALLABLE = 374;
+    const T_CLASS_C = 375;
+    const T_TRAIT_C = 376;
+    const T_METHOD_C = 377;
+    const T_FUNC_C = 378;
+    const T_LINE = 379;
+    const T_FILE = 380;
+    const T_START_HEREDOC = 381;
+    const T_END_HEREDOC = 382;
+    const T_DOLLAR_OPEN_CURLY_BRACES = 383;
+    const T_CURLY_OPEN = 384;
+    const T_PAAMAYIM_NEKUDOTAYIM = 385;
+    const T_NAMESPACE = 386;
+    const T_NS_C = 387;
+    const T_DIR = 388;
+    const T_NS_SEPARATOR = 389;
+    const T_ELLIPSIS = 390;
+    const T_NAME_FULLY_QUALIFIED = 391;
+    const T_NAME_QUALIFIED = 392;
+    const T_NAME_RELATIVE = 393;
+    const T_ATTRIBUTE = 394;
 }
diff --git a/test/PhpParser/CodeParsingTest.php b/test/PhpParser/CodeParsingTest.php
index 24e93dd522..08640ff6ab 100644
--- a/test/PhpParser/CodeParsingTest.php
+++ b/test/PhpParser/CodeParsingTest.php
@@ -107,8 +107,11 @@ public function enterNode(Node $node) {
                     $endFilePos < $startFilePos ||
                     $endTokenPos < $startTokenPos
                 ) {
-                    // Nops and error can have inverted order, if they are empty
-                    if (!$node instanceof Stmt\Nop && !$node instanceof Expr\Error) {
+                    // Nop and Error can have inverted order, if they are empty.
+                    // This can also happen for a Param containing an Error.
+                    if (!$node instanceof Stmt\Nop && !$node instanceof Expr\Error &&
+                        !$node instanceof Node\Param
+                    ) {
                         throw new \Exception('End < start on ' . $node->getType());
                     }
                 }
diff --git a/test/code/parser/errorHandling/recovery.test b/test/code/parser/errorHandling/recovery.test
index 27f7cb4434..461bb71eb2 100644
--- a/test/code/parser/errorHandling/recovery.test
+++ b/test/code/parser/errorHandling/recovery.test
@@ -1008,7 +1008,7 @@ function(Foo);
 Syntax error, unexpected ')', expecting T_VARIABLE from 3:18 to 3:18
 Syntax error, unexpected ')', expecting T_VARIABLE from 7:31 to 7:31
 Syntax error, unexpected ')', expecting T_VARIABLE from 11:17 to 11:17
-Syntax error, unexpected ')', expecting T_VARIABLE from 15:15 to 15:15
+Syntax error, unexpected T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG, expecting T_VARIABLE from 15:14 to 15:14
 Syntax error, unexpected ')', expecting T_VARIABLE from 19:17 to 19:17
 Syntax error, unexpected ')', expecting T_VARIABLE from 22:21 to 22:21
 Syntax error, unexpected ')', expecting T_VARIABLE from 25:13 to 25:13
@@ -1137,7 +1137,7 @@ array(
                 )
                 flags: 0
                 type: null
-                byRef: true
+                byRef: false
                 variadic: false
                 var: Expr_Error(
                 )
@@ -1521,4 +1521,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)