diff --git a/MAINTAINERS b/MAINTAINERS index f65ed822f4dc..4a3624872506 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -7315,6 +7315,12 @@ F: drivers/hid/ F: include/linux/hid* F: include/uapi/linux/hid* +HID PLAYSTATION DRIVER +M: Roderick Colenbrander +L: linux-input@vger.kernel.org +S: Supported +F: drivers/hid/hid-playstation.c + HID SENSOR HUB DRIVERS M: Jiri Kosina M: Jonathan Cameron diff --git a/android/GKI_VERSION b/android/GKI_VERSION index 5e8995fd55f5..0271ee19e73f 100644 --- a/android/GKI_VERSION +++ b/android/GKI_VERSION @@ -1 +1 @@ -LTS_5.4.86_75c93eb4397b +LTS_5.4.86_884688fe0cd4 diff --git a/android/abi_gki_aarch64.xml b/android/abi_gki_aarch64.xml index 1989997c9623..6aa47db183ed 100644 --- a/android/abi_gki_aarch64.xml +++ b/android/abi_gki_aarch64.xml @@ -1,5 +1,5 @@ - - + + @@ -63,6 +63,7 @@ + @@ -265,6 +266,7 @@ + @@ -315,6 +317,7 @@ + @@ -553,6 +556,13 @@ + + + + + + + @@ -562,6 +572,7 @@ + @@ -588,9 +599,11 @@ + + @@ -621,6 +634,7 @@ + @@ -645,6 +659,7 @@ + @@ -656,6 +671,7 @@ + @@ -665,6 +681,7 @@ + @@ -860,6 +877,7 @@ + @@ -994,6 +1012,7 @@ + @@ -1021,6 +1040,8 @@ + + @@ -1040,15 +1061,18 @@ + + + @@ -1064,6 +1088,7 @@ + @@ -1195,9 +1220,11 @@ + + @@ -1282,6 +1309,7 @@ + @@ -1308,6 +1336,7 @@ + @@ -1317,6 +1346,7 @@ + @@ -1380,6 +1410,7 @@ + @@ -1411,6 +1442,10 @@ + + + + @@ -1420,7 +1455,11 @@ + + + + @@ -1451,13 +1490,17 @@ + + + + @@ -1481,6 +1524,8 @@ + + @@ -1504,6 +1549,7 @@ + @@ -1527,6 +1573,10 @@ + + + + @@ -1545,7 +1595,12 @@ + + + + + @@ -1652,15 +1707,23 @@ + + + + + + + + @@ -1669,6 +1732,7 @@ + @@ -1837,9 +1901,12 @@ + + + @@ -2178,6 +2245,7 @@ + @@ -2222,6 +2290,13 @@ + + + + + + + @@ -2229,6 +2304,7 @@ + @@ -2350,6 +2426,7 @@ + @@ -2416,9 +2493,15 @@ + + + + + + @@ -2436,6 +2519,7 @@ + @@ -2473,9 +2557,18 @@ + + + + + + + + + @@ -2536,6 +2629,7 @@ + @@ -2635,6 +2729,7 @@ + @@ -2700,6 +2795,7 @@ + @@ -2708,9 +2804,11 @@ + + @@ -2756,7 +2854,9 @@ + + @@ -2779,6 +2879,7 @@ + @@ -2789,6 +2890,7 @@ + @@ -2816,6 +2918,7 @@ + @@ -2860,6 +2963,7 @@ + @@ -2956,17 +3060,21 @@ + + + + @@ -2977,8 +3085,13 @@ + + + + + @@ -2997,6 +3110,10 @@ + + + + @@ -3056,10 +3173,13 @@ + + + @@ -3201,6 +3321,7 @@ + @@ -3247,6 +3368,7 @@ + @@ -3284,6 +3406,7 @@ + @@ -3318,24 +3441,35 @@ + + + + + + + + + + + @@ -3382,6 +3516,7 @@ + @@ -3427,6 +3562,7 @@ + @@ -3434,10 +3570,12 @@ + + @@ -3651,6 +3789,7 @@ + @@ -3666,7 +3805,10 @@ + + + @@ -3744,6 +3886,7 @@ + @@ -3913,6 +4056,7 @@ + @@ -3958,6 +4102,7 @@ + @@ -3966,6 +4111,7 @@ + @@ -3999,6 +4145,10 @@ + + + + @@ -4032,6 +4182,7 @@ + @@ -4039,6 +4190,7 @@ + @@ -4071,6 +4223,9 @@ + + + @@ -4079,6 +4234,7 @@ + @@ -4363,6 +4519,16 @@ + + + + + + + + + + @@ -4376,7 +4542,10 @@ + + + @@ -4402,12 +4571,14 @@ + + @@ -4510,6 +4681,7 @@ + @@ -4651,8 +4823,12 @@ + + + + @@ -4685,18 +4861,21 @@ + + - + + @@ -4775,7 +4954,7 @@ - + @@ -4839,9 +5018,6 @@ - - - @@ -4850,9 +5026,12 @@ + + + - + @@ -4871,8 +5050,6 @@ - - @@ -5140,6 +5317,8 @@ + + @@ -5147,33 +5326,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -5285,6 +5437,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -5298,15 +5477,6 @@ - - - - - - - - - @@ -5407,19 +5577,19 @@ - + - + - + - + - + @@ -5506,6 +5676,15 @@ + + + + + + + + + @@ -5521,17 +5700,6 @@ - - - - - - - - - - - @@ -5664,7 +5832,58 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -5690,19 +5909,7 @@ - - - - - - - - - - - - - + @@ -5873,6 +6080,20 @@ + + + + + + + + + + + + + + @@ -5895,6 +6116,23 @@ + + + + + + + + + + + + + + + + + @@ -5904,6 +6142,14 @@ + + + + + + + + @@ -5911,16 +6157,35 @@ - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -6046,6 +6311,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -6071,6 +6362,17 @@ + + + + + + + + + + + @@ -6104,12 +6406,9 @@ - - - - - - + + + @@ -6118,14 +6417,6 @@ - - - - - - - - @@ -6205,6 +6496,20 @@ + + + + + + + + + + + + + + @@ -6289,6 +6594,18 @@ + + + + + + + + + + + + @@ -6319,18 +6636,14 @@ - - - - - - - - - - - - + + + + + + + + @@ -6342,6 +6655,7 @@ + @@ -6360,8 +6674,19 @@ + + + + + + + + + + + @@ -6369,11 +6694,11 @@ + + + + - - - - @@ -6530,6 +6855,11 @@ + + + + + @@ -6544,13 +6874,69 @@ - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -6666,19 +7052,19 @@ - + - + - + - + - + @@ -6777,6 +7163,13 @@ + + + + + + + @@ -6789,30 +7182,28 @@ + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + @@ -6854,34 +7245,34 @@ - + - + - + - + - + - + - + - + - + - + @@ -6899,19 +7290,19 @@ - + - + - + - + - + @@ -6935,37 +7326,37 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -7194,37 +7585,37 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -7682,10 +8073,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -7695,75 +8178,123 @@ + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -7931,7 +8462,23 @@ - + + + + + + + + + + + + + + + + + @@ -8066,7 +8613,35 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -8125,7 +8700,26 @@ - + + + + + + + + + + + + + + + + + + + + @@ -8169,7 +8763,68 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -8263,19 +8918,19 @@ - + - + - + - + - + @@ -8400,6 +9055,14 @@ + + + + + + + + @@ -8500,6 +9163,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -8525,6 +9256,14 @@ + + + + + + + + @@ -8539,47 +9278,104 @@ + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -8602,6 +9398,24 @@ + + + + + + + + + + + + + + + + + + @@ -8929,14 +9743,65 @@ - - - - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -9028,6 +9893,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + @@ -9037,7 +9927,161 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -9182,7 +10226,206 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -9356,10 +10599,10 @@ - + - + @@ -9507,6 +10750,20 @@ + + + + + + + + + + + + + + @@ -9551,16 +10808,16 @@ - + - + - + - + @@ -9679,10 +10936,10 @@ - + - + @@ -9726,12 +10983,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -9751,10 +11068,22 @@ + + + + + + + + + + + + @@ -9762,68 +11091,271 @@ + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -9947,7 +11479,54 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -9993,7 +11572,7 @@ - + @@ -10025,11 +11604,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -10047,7 +11667,189 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -10109,6 +11911,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -10207,7 +12089,44 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -10227,6 +12146,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -10235,6 +12195,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -10455,9 +12461,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -10471,6 +12559,17 @@ + + + + + + + + + + + @@ -10495,14 +12594,6 @@ - - - - - - - - @@ -10522,7 +12613,6 @@ - @@ -10531,6 +12621,7 @@ + @@ -10538,35 +12629,15 @@ + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + @@ -10581,6 +12652,383 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -10700,7 +13148,23 @@ - + + + + + + + + + + + + + + + + + @@ -10797,6 +13261,26 @@ + + + + + + + + + + + + + + + + + + + + @@ -10817,6 +13301,28 @@ + + + + + + + + + + + + + + + + + + + + + + @@ -10895,8 +13401,149 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -10959,6 +13606,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -10979,13 +13670,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -11011,27 +13875,12 @@ - + - + - - - - - - - - - - - - - - - - + @@ -11123,6 +13972,29 @@ + + + + + + + + + + + + + + + + + + + + + + + @@ -11134,6 +14006,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -11162,6 +14129,20 @@ + + + + + + + + + + + + + + @@ -11316,7 +14297,150 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -11365,48 +14489,23 @@ - + - + - + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + - @@ -11546,15 +14645,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -11588,14 +14761,6 @@ - - - - - - - - @@ -11622,12 +14787,29 @@ + + + + + + + + + + + + + + + + + @@ -11646,59 +14828,31 @@ + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -11719,6 +14873,210 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -11744,17 +15102,6 @@ - - - - - - - - - - - @@ -11824,19 +15171,19 @@ - + - + - + - + - + @@ -11878,6 +15225,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -11973,16 +15384,16 @@ - + - + - + - + @@ -12018,7 +15429,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -12039,6 +15590,1293 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -12050,7 +16888,339 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -12121,29 +17291,6 @@ - - - - - - - - - - - - - - - - - - - - - - - @@ -12158,8 +17305,131 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -12198,6 +17468,14 @@ + + + + + + + + @@ -12254,20 +17532,161 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -12291,6 +17710,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -12318,25 +17777,47 @@ - + - + - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + @@ -12345,48 +17826,44 @@ + - + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + @@ -12429,6 +17906,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -12489,60 +18053,135 @@ - + - + - - + + - - + + + + - + - + + + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - - + + + + - - + + - - + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -12596,6 +18235,199 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -12766,114 +18598,77 @@ - + - + - + - + - + - + - + - + + + + - + + + + - + + + + - + + + + - + - + - + - + - - - - + - + - - + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + @@ -12952,90 +18747,23 @@ - + - + - - - - + - - - - - - - - - - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + @@ -13046,6 +18774,267 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -13054,12 +19043,175 @@ - + - + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -13070,6 +19222,427 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -13081,12 +19654,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -13098,6 +19829,15 @@ + + + + + + + + + @@ -13112,7 +19852,26 @@ - + + + + + + + + + + + + + + + + + + + + @@ -13282,6 +20041,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -13308,6 +20094,17 @@ + + + + + + + + + + + @@ -13316,6 +20113,17 @@ + + + + + + + + + + + @@ -13335,13 +20143,215 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + @@ -13352,9 +20362,29 @@ - - + + + + + + + + + + + + + + + + + + + + + + @@ -13379,7 +20409,7 @@ - + @@ -13387,6 +20417,20 @@ + + + + + + + + + + + + + + @@ -13399,15 +20443,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -13417,76 +20494,106 @@ + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -13547,12 +20654,126 @@ - + - + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -13617,6 +20838,26 @@ + + + + + + + + + + + + + + + + + + + + @@ -13643,17 +20884,781 @@ - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -13690,17 +21695,393 @@ - + - + - + - + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -13717,6 +22098,11 @@ + + + + + @@ -13737,692 +22123,468 @@ - + - + - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - + - + + + + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -14631,132 +22793,721 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - + - + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -14767,6 +23518,22 @@ + + + + + + + + + + + + + + + + @@ -14783,195 +23550,263 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - + + - + + + + + + + + + + + + + + + - - - - + - + + + + - + - + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + + - + - + + + + + + + + + + + + + - - + - - - - - - - - - - - - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -15030,15 +23865,597 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -15046,6 +24463,2496 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -15123,57 +27030,248 @@ - + + - + - + - - - - - - - - - - - - - - - - - - + - + - - + + - - - - + + + + + + + + + + + + + + - + + + + + + + + + + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -15188,123 +27286,1208 @@ - + - + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - - - + - + + + + - + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + - + - + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -15312,8 +28495,29 @@ - - + + + + + + + + + + + + + + + + + + + + + + + @@ -15322,6 +28526,14 @@ + + + + + + + + @@ -15330,89 +28542,159 @@ - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + - - - - + + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -15490,7 +28772,4629 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -15567,302 +33471,245 @@ - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - + - - - - + - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + - - + - - - - - - - - - + - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + + + + + + + + + + + + + + + + + + + + - + - + - + - - - - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -15894,8 +33741,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -15928,7 +33932,7 @@ - + @@ -16029,21 +34033,163 @@ - + + + + - + - + + + + + + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -16198,102 +34344,939 @@ - + + - + - + - + - - + + + + + - - - - + - - - - - - - + - + + + - + - - - - - - - - - - - - - - - - - - - - - - - - + + - + + + + - + + + + - + + + + - - - - + - - - - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -16331,7 +35314,7 @@ - + @@ -16493,2587 +35476,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -19155,9 +35557,338 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -19353,15 +36084,197 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -19409,9 +36322,111 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -19477,7 +36492,71 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -20014,22 +37093,22 @@ - + - + - + - + - + - + @@ -20041,79 +37120,79 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -20627,19 +37706,19 @@ - + - + - + - + - + @@ -21136,7 +38215,7 @@ - + @@ -22475,13 +39554,13 @@ - + - + - + @@ -23138,37 +40217,37 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -23822,19 +40901,19 @@ - + - + - + - + - + @@ -23925,16 +41004,16 @@ - + - + - + - + @@ -23973,16 +41052,16 @@ - + - + - + - + @@ -24665,10 +41744,10 @@ - + - + @@ -25556,10 +42635,10 @@ - + - + @@ -25864,7 +42943,7 @@ - + @@ -25873,7 +42952,7 @@ - + @@ -26841,10 +43920,10 @@ - + - + @@ -27603,14 +44682,13 @@ - + - @@ -27767,9 +44845,9 @@ - + - + @@ -28230,6 +45308,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -28790,6 +45892,12 @@ + + + + + + @@ -28836,12 +45944,6 @@ - - - - - - @@ -29371,8 +46473,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -29426,8 +46574,12 @@ + + + + - + @@ -29435,7 +46587,7 @@ - + @@ -29447,7 +46599,7 @@ - + @@ -29480,7 +46632,7 @@ - + @@ -29498,7 +46650,7 @@ - + @@ -29515,13 +46667,13 @@ - + - + @@ -29545,7 +46697,7 @@ - + @@ -29628,7 +46780,7 @@ - + @@ -29647,14 +46799,13 @@ - - + @@ -29727,7 +46878,7 @@ - + @@ -29754,55 +46905,55 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -29814,10 +46965,10 @@ - + - + @@ -29838,112 +46989,112 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -30018,7 +47169,6 @@ - @@ -30027,7 +47177,6 @@ - @@ -30044,7 +47193,6 @@ - @@ -30138,31 +47286,31 @@ - + - + - + - + - + - + - + - + - + @@ -30181,13 +47329,6 @@ - - - - - - - @@ -30218,9 +47359,14 @@ + + + + + + + - - @@ -30238,7 +47384,8 @@ - + + @@ -30282,6 +47429,7 @@ + @@ -30320,7 +47468,7 @@ - + @@ -30330,7 +47478,7 @@ - + @@ -30343,10 +47491,10 @@ - + - + @@ -30355,7 +47503,7 @@ - + @@ -30363,1235 +47511,28 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - + @@ -31617,7 +47558,7 @@ - + @@ -31631,7 +47572,7 @@ - + @@ -31645,7 +47586,7 @@ - + @@ -31659,7 +47600,7 @@ - + @@ -31670,123 +47611,13 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -31798,7 +47629,7 @@ - + @@ -31982,26 +47813,6 @@ - - - - - - - - - - - - - - - - - - - - @@ -32017,8 +47828,6 @@ - - @@ -32037,7 +47846,6 @@ - @@ -32060,7 +47868,7 @@ - + @@ -32220,14 +48028,14 @@ - + - + @@ -32253,7 +48061,7 @@ - + @@ -32265,68 +48073,39 @@ - + + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + @@ -32339,33 +48118,33 @@ - + - + - + - + - + - + - + @@ -32385,9 +48164,9 @@ - + - + @@ -32395,24 +48174,24 @@ - + - + - + - + @@ -32420,7 +48199,7 @@ - + @@ -32441,7 +48220,7 @@ - + @@ -32464,7 +48243,7 @@ - + @@ -32476,7 +48255,7 @@ - + @@ -32485,7 +48264,7 @@ - + @@ -32495,21 +48274,21 @@ - + - + - + - + @@ -32524,28 +48303,17 @@ - - - - - - - - - - - - + - + - + @@ -32556,13 +48324,13 @@ - + - + @@ -32583,155 +48351,14 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -33081,43 +48708,41 @@ - - - + - + - + - + - + - + - + - + @@ -33146,7 +48771,7 @@ - + @@ -33160,27 +48785,27 @@ - + - + - - + + - + - + - + @@ -33196,7 +48821,7 @@ - + @@ -33204,248 +48829,10 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + @@ -33459,10 +48846,10 @@ - + - + @@ -33471,64 +48858,64 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -33596,7 +48983,7 @@ - + @@ -33605,7 +48992,7 @@ - + @@ -33621,22 +49008,8 @@ - + - - - - - - - - - - - - - - @@ -33680,56 +49053,55 @@ - - + - + - + - + - + - + - + - + - + - + @@ -33813,13 +49185,13 @@ - + - + @@ -33841,7 +49213,7 @@ - + @@ -33919,7 +49291,7 @@ - + @@ -33994,7 +49366,7 @@ - + @@ -34020,14 +49392,13 @@ - - + + - @@ -34043,38 +49414,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -34083,110 +49422,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -34198,41 +49433,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -34342,7 +49542,7 @@ - + @@ -34368,50 +49568,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -34427,17 +49583,11 @@ - - - + - - - - @@ -34468,7 +49618,7 @@ - + @@ -34477,7 +49627,7 @@ - + @@ -34512,7 +49662,7 @@ - + @@ -34521,7 +49671,7 @@ - + @@ -34530,7 +49680,7 @@ - + @@ -34539,7 +49689,7 @@ - + @@ -34553,21 +49703,21 @@ - + - + - + - + @@ -34585,29 +49735,29 @@ - + - + - + - + - + - + @@ -34622,7 +49772,7 @@ - + @@ -34635,7 +49785,7 @@ - + @@ -34653,7 +49803,7 @@ - + @@ -34664,11 +49814,8 @@ - - - - + @@ -34681,10 +49828,10 @@ - + - + @@ -34762,7 +49909,7 @@ - + @@ -34869,7 +50016,7 @@ - + @@ -34877,7 +50024,7 @@ - + @@ -34946,7 +50093,7 @@ - + @@ -34955,7 +50102,7 @@ - + @@ -34983,30 +50130,262 @@ - - - - + - - - - - - - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -35038,7 +50417,20 @@ - + + + + + + + + + + + + + + @@ -35059,7 +50451,44 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -35071,7 +50500,137 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -35149,7 +50708,131 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -35161,13 +50844,13 @@ - + - + @@ -35262,7 +50945,7 @@ - + @@ -35313,413 +50996,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -36039,36 +51315,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -36644,7 +51890,7 @@ - + @@ -37082,10 +52328,10 @@ - + - + @@ -37172,7 +52418,7 @@ - + @@ -38092,7 +53338,7 @@ - + @@ -38148,7 +53394,7 @@ - + @@ -38171,7 +53417,7 @@ - + @@ -38189,7 +53435,7 @@ - + @@ -38294,7 +53540,7 @@ - + @@ -38302,7 +53548,7 @@ - + @@ -38388,7 +53634,7 @@ - + @@ -38402,7 +53648,6 @@ - @@ -38519,7 +53764,6 @@ - @@ -38596,10 +53840,6 @@ - - - - @@ -38612,6 +53852,10 @@ + + + + @@ -38620,26 +53864,16 @@ - - - - - - - - - - - + @@ -38731,7 +53965,7 @@ - + @@ -38739,7 +53973,7 @@ - + @@ -38747,42 +53981,42 @@ - + - + - + - + - + - + - + @@ -38791,160 +54025,160 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -38952,127 +54186,127 @@ - + - + - + - + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -39080,7 +54314,7 @@ - + @@ -39090,7 +54324,7 @@ - + @@ -39105,15 +54339,15 @@ - - + + - + @@ -39125,13 +54359,13 @@ - + - + @@ -39149,19 +54383,19 @@ - + - + - + @@ -39169,9 +54403,9 @@ - + - + @@ -39180,7 +54414,7 @@ - + @@ -39199,7 +54433,7 @@ - + @@ -39209,85 +54443,85 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -39303,4212 +54537,14 @@ - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -43586,7 +54622,7 @@ - + @@ -43739,7 +54775,7 @@ - + @@ -43766,7 +54802,7 @@ - + @@ -43836,7 +54872,7 @@ - + @@ -43844,7 +54880,7 @@ - + @@ -43854,7 +54890,7 @@ - + @@ -43968,13 +55004,13 @@ - + - + @@ -44082,13 +55118,13 @@ - + - + @@ -44104,14 +55140,14 @@ - + - + @@ -44208,7 +55244,7 @@ - + @@ -44228,13 +55264,13 @@ - + - + @@ -44247,7 +55283,7 @@ - + @@ -44260,7 +55296,7 @@ - + @@ -44268,7 +55304,7 @@ - + @@ -44278,7 +55314,7 @@ - + @@ -44332,7 +55368,7 @@ - + @@ -44347,7 +55383,7 @@ - + @@ -44369,7 +55405,7 @@ - + @@ -44377,7 +55413,7 @@ - + @@ -44421,93 +55457,20 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - + - + @@ -44546,7 +55509,32 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -44562,8 +55550,19 @@ + + + + + + + + + + + - + @@ -44579,9 +55578,8 @@ - - + @@ -44713,7 +55711,6 @@ - @@ -44725,6 +55722,7 @@ + @@ -44734,91 +55732,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -44826,9 +55740,6 @@ - - - @@ -44868,11 +55779,6 @@ - - - - - @@ -44931,9 +55837,7 @@ - - - + @@ -44992,16 +55896,9 @@ + + - - - - - - - - - @@ -45019,6 +55916,15 @@ + + + + + + + + + @@ -45035,10 +55941,10 @@ - + - + @@ -45048,7 +55954,7 @@ - + @@ -45090,7 +55996,13 @@ - + + + + + + + @@ -45105,7 +56017,7 @@ - + @@ -45119,7 +56031,7 @@ - + @@ -45180,10 +56092,10 @@ - + - + @@ -45251,8 +56163,6 @@ - - @@ -45314,9 +56224,8 @@ - - - + + @@ -45335,17 +56244,10 @@ + + + - - - - - - - - - - @@ -45402,6 +56304,16 @@ + + + + + + + + + + @@ -45411,8 +56323,6 @@ - - @@ -45421,6 +56331,8 @@ + + @@ -45461,7 +56373,6 @@ - @@ -45470,9 +56381,10 @@ + - + @@ -45495,14 +56407,19 @@ - + + + + + + - + @@ -45968,8 +56885,6 @@ - - @@ -46060,9 +56975,8 @@ - - - + + @@ -46071,7 +56985,50 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -46187,9 +57144,10 @@ - - - + + + + @@ -46198,7 +57156,94 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -46227,8 +57272,33 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -46309,325 +57379,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -46819,22 +57570,121 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -46864,9 +57714,255 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -46875,9 +57971,32 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -46916,10 +58035,23 @@ + + + + + + + + + + + + + + - @@ -47007,17 +58139,11 @@ - - - - - - - - - - - + + + + + @@ -47035,6 +58161,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -47044,16 +58297,40 @@ + + + + + + + + + + + + + + + + + + + + + + + - + + @@ -47062,6 +58339,7 @@ + @@ -47076,7 +58354,320 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -47129,8 +58720,6 @@ - - @@ -47157,6 +58746,8 @@ + + @@ -47215,7 +58806,7 @@ - + @@ -47349,13 +58940,6 @@ - - - - - - - @@ -47367,11 +58951,12 @@ - - - - - + + + + + + @@ -47404,85 +58989,11 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + @@ -47557,578 +59068,16 @@ - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -48166,34 +59115,34 @@ - + - + - + - + - + - + - + - + - + - + @@ -48280,7 +59229,7 @@ - + @@ -48318,7 +59267,7 @@ - + @@ -48366,10 +59315,10 @@ - + - + @@ -48384,8 +59333,7 @@ - - + @@ -48663,13 +59611,13 @@ - + - + - + @@ -48707,7 +59655,7 @@ - + @@ -48778,7 +59726,6 @@ - @@ -48801,7 +59748,19 @@ + + + + + + + + + + + + @@ -48865,23 +59824,272 @@ - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -48893,197 +60101,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -49501,7 +60518,6 @@ - @@ -49524,6 +60540,12 @@ + + + + + + @@ -49707,7 +60729,7 @@ - + @@ -49753,7 +60775,7 @@ - + @@ -49774,7 +60796,7 @@ - + @@ -49796,9 +60818,8 @@ - - + @@ -49828,7 +60849,7 @@ - + @@ -49855,50 +60876,50 @@ - + - + - + - + - + - + - + - + - + - + @@ -49961,7 +60982,7 @@ - + @@ -49969,7 +60990,7 @@ - + @@ -49985,7 +61006,6 @@ - @@ -50561,6 +61581,7 @@ + @@ -50583,11 +61604,6 @@ - - - - - @@ -50610,7 +61626,7 @@ - + @@ -50719,6 +61735,11 @@ + + + + + @@ -50726,14 +61747,6 @@ - - - - - - - - @@ -50795,24 +61808,18 @@ + + + + + + + + - - - - - - - - - - - - - - @@ -50836,6 +61843,20 @@ + + + + + + + + + + + + + + @@ -50853,7 +61874,7 @@ - + @@ -50911,7 +61932,20 @@ - + + + + + + + + + + + + + + @@ -51283,34 +62317,34 @@ - + - + - + - + - + - + - + - + - + - + @@ -51780,19 +62814,19 @@ - + - + - + - + - + @@ -52078,22 +63112,22 @@ - + - + - + - + - + - + @@ -52746,7 +63780,7 @@ - + @@ -52803,7 +63837,7 @@ - + @@ -53001,6 +64035,7 @@ + @@ -53123,8 +64158,23 @@ + + + + + + + + + + + + + + + - + @@ -53136,7 +64186,7 @@ - + @@ -53241,14 +64291,14 @@ - + - + @@ -53314,7 +64364,7 @@ - + @@ -53390,24 +64440,7 @@ - - - - - - - - - - - - - - - - - - + @@ -53422,9 +64455,8 @@ - - + @@ -53446,7 +64478,23 @@ - + + + + + + + + + + + + + + + + + @@ -53471,18 +64519,17 @@ - + - + - - + @@ -53493,7 +64540,7 @@ - + @@ -53533,7 +64580,7 @@ - + @@ -53549,7 +64596,7 @@ - + @@ -53578,7 +64625,7 @@ - + @@ -53589,9 +64636,13 @@ - + + + + + - + @@ -53602,7 +64653,7 @@ - + @@ -53617,9 +64668,23 @@ - + + + + + + + + + + + + + + + - + @@ -53636,7 +64701,7 @@ - + @@ -53738,7 +64803,6 @@ - @@ -53906,7 +64970,6 @@ - @@ -54011,11 +65074,11 @@ - + - + @@ -54114,6 +65177,11 @@ + + + + + @@ -54191,7 +65259,7 @@ - + @@ -54204,7 +65272,7 @@ - + @@ -54217,10 +65285,162 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -54251,7 +65471,7 @@ - + @@ -54279,10 +65499,8 @@ - - - + @@ -54304,7 +65522,7 @@ - + @@ -54358,7 +65576,7 @@ - + @@ -54465,7 +65683,7 @@ - + @@ -54567,7 +65785,7 @@ - + @@ -54767,16 +65985,6 @@ - - - - - - - - - - @@ -54788,6 +65996,16 @@ + + + + + + + + + + @@ -54903,7 +66121,7 @@ - + @@ -54951,7 +66169,7 @@ - + @@ -54980,12 +66198,11 @@ - + - + - @@ -55213,7 +66430,7 @@ - + @@ -55233,8 +66450,6 @@ - - @@ -55246,6 +66461,8 @@ + + @@ -55265,7 +66482,7 @@ - + @@ -55454,15 +66671,14 @@ - - + - + @@ -55481,7 +66697,7 @@ - + @@ -55489,7 +66705,7 @@ - + @@ -55631,10 +66847,6 @@ - - - - @@ -55660,6 +66872,10 @@ + + + + @@ -55681,7 +66897,7 @@ - + @@ -55743,13 +66959,13 @@ - + - + @@ -55776,7 +66992,7 @@ - + @@ -55890,8 +67106,6 @@ - - @@ -55903,7 +67117,8 @@ - + + @@ -55926,8 +67141,7 @@ - - + @@ -55981,22 +67195,9 @@ - - - - - - - - + + - - - - - - - @@ -56037,6 +67238,13 @@ + + + + + + + @@ -56045,28 +67253,10 @@ - - - - - - - - - - - - - - - - - - @@ -56114,7 +67304,7 @@ - + @@ -56152,7 +67342,7 @@ - + @@ -56178,7 +67368,7 @@ - + @@ -56201,7 +67391,7 @@ - + @@ -56209,24 +67399,24 @@ - - + + - + - + - + @@ -56238,15 +67428,11 @@ - + - - - - @@ -56258,7 +67444,7 @@ - + @@ -56279,172 +67465,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -56471,25 +67491,9 @@ - - - - - - - - - - - - - - - - @@ -56501,88 +67505,13 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -56619,12 +67548,12 @@ - + - + @@ -56632,7 +67561,7 @@ - + @@ -56646,7 +67575,7 @@ - + @@ -56702,10 +67631,6 @@ - - - - @@ -56731,6 +67656,10 @@ + + + + @@ -56741,7 +67670,7 @@ - + @@ -56811,13 +67740,13 @@ - - + + @@ -56880,7 +67809,7 @@ - + @@ -56893,53 +67822,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -56990,7 +67872,6 @@ - @@ -57043,7 +67924,7 @@ - + @@ -57056,7 +67937,7 @@ - + @@ -57066,7 +67947,7 @@ - + @@ -57078,7 +67959,7 @@ - + @@ -57743,7 +68624,7 @@ - + @@ -57780,7 +68661,7 @@ - + @@ -57798,16 +68679,16 @@ - + - + - + @@ -57827,7 +68708,7 @@ - + @@ -57922,20 +68803,6 @@ - - - - - - - - - - - - - - @@ -57953,8 +68820,22 @@ + + + + + + + + + + + + + + - + @@ -58062,7 +68943,7 @@ - + @@ -58122,7 +69003,7 @@ - + @@ -58146,7 +69027,7 @@ - + @@ -58162,7 +69043,7 @@ - + @@ -58298,7 +69179,6 @@ - @@ -58310,28 +69190,9 @@ + - - - - - - - - - - - - - - - - - - - - - + @@ -58354,7 +69215,6 @@ - @@ -58365,6 +69225,12 @@ + + + + + + @@ -58401,6 +69267,7 @@ + @@ -58411,8 +69278,6 @@ - - @@ -58716,7 +69581,7 @@ - + @@ -58743,52 +69608,31 @@ + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -59312,6 +70156,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -59319,50 +70205,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -59434,7 +70276,185 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -59540,8 +70560,67 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -59610,7 +70689,53 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -59620,12 +70745,6 @@ - - - - - - @@ -59637,6 +70756,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -59649,32 +70812,53 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -59796,518 +70980,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -60424,6 +71096,720 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -60487,7 +71873,103 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -60642,7 +72124,7 @@ - + @@ -60785,6 +72267,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -60795,73 +72301,13 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -60872,7 +72318,7 @@ - + @@ -60894,25 +72340,25 @@ - + - + - + - + - + - + - + @@ -60958,13 +72404,64 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - @@ -61045,7 +72542,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -61085,7 +72622,7 @@ - + @@ -61198,7 +72735,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -61208,28 +72771,6 @@ - - - - - - - - - - - - - - - - - - - - - - @@ -61402,121 +72943,29 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - - + + - - + + - - + + - - - - - + + - @@ -61588,34 +73037,180 @@ - + - + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + + + + - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -61629,6 +73224,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -61693,18 +73362,14 @@ - + + + - - - - + - - - - + @@ -61715,128 +73380,29 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - + @@ -61855,7 +73421,6 @@ - @@ -61870,74 +73435,21 @@ + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - + @@ -61969,27 +73481,27 @@ - + - + - + - + - + @@ -62008,12 +73520,12 @@ - + - + @@ -62025,7 +73537,7 @@ - + @@ -62033,69 +73545,69 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -62120,10 +73632,10 @@ - + - + @@ -62138,7 +73650,7 @@ - + @@ -62152,7 +73664,7 @@ - + @@ -62168,20 +73680,20 @@ - + - + - + - + @@ -62191,7 +73703,7 @@ - + @@ -62206,221 +73718,8 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -62508,46 +73807,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -62558,16 +73818,14 @@ - - - + - + - - + + @@ -62576,11 +73834,11 @@ - + - + @@ -62633,7 +73891,7 @@ - + @@ -62655,14 +73913,14 @@ - + - + @@ -62675,13 +73933,13 @@ - + - + @@ -62696,7 +73954,7 @@ - + @@ -62707,10 +73965,19 @@ + + + + + + + + + @@ -62737,12 +74004,18 @@ + + + + + + - + @@ -62750,7 +74023,7 @@ - + @@ -62758,19 +74031,23 @@ - + - + - + + + + + @@ -62790,8 +74067,7 @@ - - + @@ -62846,7 +74122,6 @@ - @@ -62875,7 +74150,7 @@ - + @@ -62899,17 +74174,52 @@ - + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -62924,8 +74234,64 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -62936,9 +74302,58 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -63133,7 +74548,7 @@ - + @@ -63150,16 +74565,16 @@ - + - + - + @@ -63213,7 +74628,7 @@ - + @@ -63261,7 +74676,7 @@ - + @@ -63440,7 +74855,7 @@ - + @@ -63475,7 +74890,7 @@ - + @@ -63524,7 +74939,7 @@ - + @@ -63762,7 +75177,7 @@ - + @@ -64114,7 +75529,7 @@ - + @@ -64372,23 +75787,23 @@ - + - + - + - + - + @@ -64413,7 +75828,7 @@ - + @@ -64699,7 +76114,7 @@ - + @@ -64727,7 +76142,7 @@ - + @@ -64799,25 +76214,25 @@ - + - + - + - + - + - + - + @@ -64860,13 +76275,13 @@ - + - + - + @@ -64889,7 +76304,7 @@ - + @@ -64909,7 +76324,7 @@ - + @@ -65120,10 +76535,10 @@ - + - + @@ -65196,7 +76611,7 @@ - + @@ -65236,10 +76651,10 @@ - + - + @@ -65550,7 +76965,7 @@ - + @@ -65637,7 +77052,7 @@ - + @@ -65648,7 +77063,7 @@ - + @@ -66042,11 +77457,9 @@ - - - + @@ -66059,20 +77472,20 @@ - + - + - + @@ -66080,15 +77493,15 @@ - + - - + + @@ -66100,10 +77513,10 @@ - + - + @@ -66287,11 +77700,11 @@ - + - + @@ -66316,13 +77729,13 @@ - + - + @@ -66400,7 +77813,7 @@ - + @@ -66478,7 +77891,7 @@ - + @@ -66486,7 +77899,7 @@ - + @@ -66497,7 +77910,7 @@ - + @@ -66505,7 +77918,7 @@ - + @@ -66553,36 +77966,36 @@ - + - + - + - + - + - + @@ -66624,19 +78037,19 @@ - + - + - + @@ -66644,13 +78057,13 @@ - + - + @@ -66663,7 +78076,7 @@ - + @@ -66677,7 +78090,7 @@ - + @@ -66735,7 +78148,7 @@ - + @@ -66800,7 +78213,7 @@ - + @@ -66815,7 +78228,7 @@ - + @@ -66851,7 +78264,7 @@ - + @@ -66870,7 +78283,7 @@ - + @@ -66900,7 +78313,7 @@ - + @@ -66954,7 +78367,7 @@ - + @@ -66963,10 +78376,9 @@ - - + @@ -66991,7 +78403,7 @@ - + @@ -67000,7 +78412,7 @@ - + @@ -67024,12 +78436,135 @@ - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -67117,14 +78652,9 @@ - - - - - @@ -67237,13 +78767,1188 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -67861,19 +80566,19 @@ - + - + - + @@ -67905,7 +80610,7 @@ - + @@ -67916,7 +80621,7 @@ - + @@ -67938,18 +80643,6 @@ - - - - - - - - - - - - @@ -68036,13 +80729,18 @@ - - - - - - - + + + + + + + + + + + + @@ -68054,6 +80752,13 @@ + + + + + + + @@ -68162,12 +80867,6 @@ - - - - - - @@ -68210,6 +80909,12 @@ + + + + + + @@ -68270,7 +80975,7 @@ - + @@ -68289,7 +80994,7 @@ - + @@ -68299,7 +81004,7 @@ - + @@ -68608,7 +81313,7 @@ - + @@ -68635,22 +81340,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -68659,6 +81406,8 @@ + + @@ -68721,6 +81470,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -68759,6 +81589,13 @@ + + + + + + + @@ -68778,6 +81615,10 @@ + + + + @@ -68785,13 +81626,6 @@ - - - - - - - @@ -68805,23 +81639,22 @@ - + - + - - + - + @@ -68833,104 +81666,14 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -68956,7 +81699,7 @@ - + @@ -68971,7 +81714,7 @@ - + @@ -69021,13 +81764,13 @@ - + - + @@ -69037,7 +81780,7 @@ - + @@ -69051,7 +81794,7 @@ - + @@ -69061,7 +81804,7 @@ - + @@ -69072,7 +81815,7 @@ - + @@ -69080,7 +81823,7 @@ - + @@ -69089,11 +81832,11 @@ - + - + @@ -69107,7 +81850,7 @@ - + @@ -69115,7 +81858,7 @@ - + @@ -69127,7 +81870,7 @@ - + @@ -69163,13 +81906,12 @@ - - + - + @@ -69178,37 +81920,43 @@ - + + + + + + + - + - + - + - + - + - + @@ -69216,73 +81964,11 @@ - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -69340,10 +82026,10 @@ - + - + @@ -69357,22 +82043,8 @@ - - - - - - - - - - - - - - - + @@ -69424,28 +82096,24 @@ - - - - - + - + @@ -69460,14 +82128,14 @@ - + - + @@ -69506,9 +82174,30 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + @@ -69525,8 +82214,6 @@ - - @@ -69548,7 +82235,7 @@ - + @@ -69556,7 +82243,7 @@ - + @@ -69564,7 +82251,7 @@ - + @@ -69575,7 +82262,7 @@ - + @@ -69688,6 +82375,11 @@ + + + + + @@ -69799,15 +82491,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -69836,7 +82568,7 @@ - + @@ -69885,7 +82617,7 @@ - + @@ -69895,16 +82627,18 @@ - + - + - + + + @@ -69955,6 +82689,16 @@ + + + + + + + + + + @@ -69989,7 +82733,7 @@ - + @@ -70010,13 +82754,13 @@ - + - + @@ -70051,6 +82795,8 @@ + + @@ -70088,11 +82834,25 @@ + + + + + + + + + + + + + + @@ -70100,7 +82860,7 @@ - + @@ -70138,7 +82898,14 @@ - + + + + + + + + @@ -70153,13 +82920,13 @@ - + - + @@ -70185,7 +82952,7 @@ - + @@ -70197,11 +82964,11 @@ - + - + @@ -70213,7 +82980,7 @@ - + @@ -70223,29 +82990,29 @@ - + - + - + - + - + @@ -70256,13 +83023,13 @@ - + - + @@ -70274,11 +83041,7 @@ - - - - - + @@ -70596,10 +83359,6 @@ - - - - @@ -70688,7 +83447,7 @@ - + @@ -70699,7 +83458,33 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -70745,7 +83530,7 @@ - + @@ -70788,7 +83573,7 @@ - + @@ -70839,7 +83624,7 @@ - + @@ -70859,7 +83644,7 @@ - + @@ -70894,13 +83679,13 @@ - + - + @@ -71037,7 +83822,6 @@ - @@ -71128,7 +83912,7 @@ - + @@ -71225,14 +84009,7 @@ - - - - - - - - + @@ -71270,6 +84047,14 @@ + + + + + + + + @@ -71407,11 +84192,11 @@ - + - + @@ -71425,7 +84210,6 @@ - @@ -71469,8 +84253,7 @@ - - + @@ -71488,21 +84271,23 @@ + + + - - + - + @@ -71511,13 +84296,13 @@ - + - + @@ -71537,7 +84322,7 @@ - + @@ -71545,7 +84330,7 @@ - + @@ -71566,7 +84351,7 @@ - + @@ -71600,7 +84385,7 @@ - + @@ -71748,7 +84533,7 @@ - + @@ -71998,7 +84783,7 @@ - + @@ -72191,16 +84976,16 @@ - + - + - + @@ -72218,8 +85003,7 @@ - - + @@ -72237,7 +85021,7 @@ - + @@ -72270,7 +85054,7 @@ - + @@ -72469,7 +85253,7 @@ - + @@ -72500,8 +85284,6 @@ - - @@ -72575,589 +85357,263 @@ - - + + - + - - - - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - + - + - + - + + + + - + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - + - + @@ -73172,13 +85628,37 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + @@ -73294,33 +85774,109 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - + @@ -73420,7 +85976,7 @@ - + @@ -73440,14 +85996,12 @@ - - - + @@ -73464,7 +86018,7 @@ - + @@ -73545,19 +86099,19 @@ - + - + - + @@ -73691,14 +86245,6 @@ - - - - - - - - @@ -73734,6 +86280,14 @@ + + + + + + + + @@ -73750,7 +86304,7 @@ - + @@ -73759,8 +86313,12 @@ + + + + - + @@ -73781,7 +86339,7 @@ - + @@ -73856,7 +86414,7 @@ - + @@ -73937,7 +86495,7 @@ - + @@ -73961,12 +86519,6 @@ - - - - - - @@ -74035,11 +86587,11 @@ - - - - - + + + + + @@ -74150,16 +86702,16 @@ - + - + - + - + @@ -74216,6 +86768,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -74278,42 +86860,9 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -74325,9 +86874,14 @@ - - - + + + + + + + + @@ -74365,6 +86919,9 @@ + + + @@ -74392,7 +86949,7 @@ - + @@ -74550,7 +87107,7 @@ - + @@ -74708,16 +87265,16 @@ - + - + - + - + @@ -75170,7 +87727,7 @@ - + @@ -75269,8 +87826,7 @@ - - + @@ -75324,8 +87880,6 @@ - - @@ -75387,7 +87941,7 @@ - + @@ -75404,17 +87958,17 @@ - + - + - + @@ -75450,7 +88004,7 @@ - + @@ -76125,7 +88679,7 @@ - + @@ -76344,7 +88898,7 @@ - + @@ -76355,7 +88909,7 @@ - + @@ -76460,43 +89014,43 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -76529,13 +89083,13 @@ - + - + - + @@ -76575,34 +89129,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -76701,6 +89227,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -76709,7 +89263,6 @@ - @@ -76729,16 +89282,16 @@ - + - + - + - + @@ -76932,6 +89485,7 @@ + @@ -77113,28 +89667,28 @@ - + - + - + - + - + - + - + - + @@ -77254,7 +89808,7 @@ - + @@ -77359,9 +89913,6 @@ - - - @@ -77376,6 +89927,9 @@ + + + @@ -77417,7 +89971,7 @@ - + @@ -77546,7 +90100,7 @@ - + @@ -77637,14 +90191,14 @@ - + - + @@ -77823,7 +90377,7 @@ - + @@ -77852,7 +90406,7 @@ - + @@ -78021,7 +90575,7 @@ - + @@ -78046,7 +90600,7 @@ - + @@ -78237,7 +90791,7 @@ - + @@ -78266,7 +90820,7 @@ - + @@ -78276,13 +90830,13 @@ - + - + @@ -78399,7 +90953,7 @@ - + @@ -78478,7 +91032,7 @@ - + @@ -78493,7 +91047,7 @@ - + @@ -78534,31 +91088,31 @@ - + - + - + - + - + - + - + - + - + @@ -78649,7 +91203,7 @@ - + @@ -78679,22 +91233,22 @@ - + - + - + - + - + - + @@ -78814,7 +91368,7 @@ - + @@ -78882,7 +91436,7 @@ - + @@ -78909,55 +91463,55 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -78969,10 +91523,10 @@ - + - + @@ -78993,112 +91547,112 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -79312,7 +91866,7 @@ - + @@ -79380,8 +91934,8 @@ - - + + @@ -79410,26 +91964,26 @@ - + - + - + - + @@ -79508,7 +92062,7 @@ - + @@ -79566,7 +92120,7 @@ - + @@ -79607,7 +92161,6 @@ - @@ -79619,6 +92172,7 @@ + @@ -79637,7 +92191,7 @@ - + @@ -79667,7 +92221,7 @@ - + @@ -79678,14 +92232,14 @@ - + - + @@ -79693,6 +92247,10 @@ + + + + @@ -79705,12 +92263,8 @@ - - - - - + @@ -79732,10 +92286,6 @@ - - - - @@ -79753,13 +92303,17 @@ + + + + - + - + @@ -79878,7 +92432,7 @@ - + @@ -79946,7 +92500,7 @@ - + @@ -79970,7 +92524,7 @@ - + @@ -79978,10 +92532,7 @@ - - - - + @@ -80025,8 +92576,6 @@ - - @@ -80166,7 +92715,7 @@ - + @@ -80192,68 +92741,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -80392,7 +92879,7 @@ - + @@ -80542,7 +93029,7 @@ - + @@ -80622,8 +93109,6 @@ - - @@ -80645,16 +93130,12 @@ - - - - @@ -80721,7 +93202,7 @@ - + @@ -80730,38 +93211,38 @@ - + - + - + - + - + - + @@ -80814,17 +93295,17 @@ - + - + - + @@ -80839,14 +93320,14 @@ - + - + @@ -80863,7 +93344,7 @@ - + @@ -80872,7 +93353,7 @@ - + @@ -80881,7 +93362,7 @@ - + @@ -80950,9 +93431,6 @@ - - - @@ -80974,21 +93452,21 @@ - + - + - + @@ -80997,7 +93475,7 @@ - + @@ -81023,7 +93501,7 @@ - + @@ -81035,7 +93513,7 @@ - + @@ -81079,44 +93557,11 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -81130,50 +93575,50 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -81184,7 +93629,7 @@ - + @@ -81228,11 +93673,6 @@ - - - - - @@ -81250,6 +93690,11 @@ + + + + + @@ -81284,9 +93729,17 @@ - + + + + + + + + + - + @@ -81296,734 +93749,64 @@ - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - - - - - - - - - + - - - - + - + - + - + - - + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -82038,140 +93821,12 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -82437,7 +94092,7 @@ - + @@ -82513,7 +94168,7 @@ - + @@ -82683,7 +94338,6 @@ - @@ -82719,49 +94373,49 @@ - + - + - + - + - + - + - - + + - + - + - + @@ -82809,17 +94463,17 @@ - + - + - - + + @@ -82832,7 +94486,47 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -82846,7 +94540,7 @@ - + @@ -82945,13 +94639,13 @@ - + - + - + @@ -82977,31 +94671,31 @@ - + - + - + - + - + - + - + - + - + @@ -83070,31 +94764,31 @@ - + - + - + - + - + - + - + - + - + @@ -83120,10 +94814,6 @@ - - - - @@ -83181,10 +94871,10 @@ - + - + @@ -83228,20 +94918,13 @@ + + + + - - - - - - - - - - - @@ -83361,6 +95044,17 @@ + + + + + + + + + + + @@ -83372,13 +95066,6 @@ - - - - - - - @@ -83453,6 +95140,13 @@ + + + + + + + @@ -83463,9 +95157,6 @@ - - - @@ -83477,11 +95168,13 @@ + + + - @@ -83493,7 +95186,7 @@ - + @@ -83516,7 +95209,7 @@ - + @@ -83542,6 +95235,7 @@ + @@ -83601,7 +95295,7 @@ - + @@ -83625,15 +95319,6 @@ - - - - - - - - - @@ -83645,12 +95330,20 @@ + + + + + + + + + - @@ -83684,13 +95377,7 @@ - - - - - - - + @@ -83702,11 +95389,18 @@ + + + + + + + - + @@ -83718,7 +95412,7 @@ - + @@ -83748,7 +95442,7 @@ - + @@ -83870,6 +95564,11 @@ + + + + + @@ -84371,10 +96070,10 @@ - + - + @@ -84469,7 +96168,7 @@ - + @@ -84486,7 +96185,7 @@ - + @@ -84830,7 +96529,7 @@ - + @@ -84888,20 +96587,8 @@ - - - - - - - - - - - - - + @@ -84920,6 +96607,10 @@ + + + + @@ -84978,471 +96669,122 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - - + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - + + + - - - + + + + + - - - + + - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - + - - + + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + @@ -85453,7 +96795,7 @@ - + @@ -85510,331 +96852,88 @@ - - + + + + + + + + - + - - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - + + + + + + - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - + - + - + - + + + + - + + + + - + - - - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + @@ -85868,7 +96967,7 @@ - + @@ -85880,7 +96979,7 @@ - + @@ -85931,423 +97030,34 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + + + + + + + + + - + - - + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -86393,63 +97103,32 @@ + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -86461,228 +97140,52 @@ - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -86712,26 +97215,6 @@ - - - - - - - - - - - - - - - - - - - - @@ -87091,77 +97574,180 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -87409,14 +97995,444 @@ - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -87463,14 +98479,840 @@ - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -87524,7 +99366,50 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -87551,7 +99436,146 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -87581,7 +99605,7 @@ - + @@ -87590,10 +99614,10 @@ - + - + @@ -87696,7 +99720,7 @@ - + @@ -87734,7 +99758,7 @@ - + @@ -87862,7 +99886,7 @@ - + @@ -90439,7 +102463,7 @@ - + @@ -90495,7 +102519,7 @@ - + @@ -90976,6 +103000,12 @@ + + + + + + @@ -91137,7 +103167,7 @@ - + @@ -91171,7 +103201,7 @@ - + @@ -91189,9 +103219,7 @@ - - - + @@ -91263,8 +103291,6 @@ - - @@ -91296,7 +103322,7 @@ - + @@ -91321,9 +103347,7 @@ - - - + @@ -91350,7 +103374,7 @@ - + @@ -91366,7 +103390,7 @@ - + @@ -91429,10 +103453,10 @@ - + - + @@ -91468,50 +103492,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -91554,40 +103534,40 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -92349,146 +104329,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -92555,13 +104395,13 @@ - + - + - + @@ -92842,7 +104682,6 @@ - @@ -92854,7 +104693,6 @@ - @@ -93003,7 +104841,7 @@ - + @@ -93041,7 +104879,7 @@ - + @@ -93049,11 +104887,10 @@ - + - @@ -93177,9 +105014,20 @@ - + + + + + + + + + + + + @@ -93233,17 +105081,6 @@ - - - - - - - - - - - @@ -93386,7 +105223,6 @@ - @@ -93403,7 +105239,7 @@ - + @@ -93485,7 +105321,7 @@ - + @@ -93493,7 +105329,7 @@ - + @@ -93501,13 +105337,13 @@ - + - + @@ -93515,7 +105351,7 @@ - + @@ -93550,22 +105386,7 @@ - - - - - - - - - - - - - - - - + @@ -93584,8 +105405,6 @@ - - @@ -93706,7 +105525,7 @@ - + @@ -93758,7 +105577,7 @@ - + @@ -93766,8 +105585,8 @@ - - + + @@ -93781,6 +105600,10 @@ + + + + @@ -93791,7 +105614,7 @@ - + @@ -93799,7 +105622,7 @@ - + @@ -93820,7 +105643,7 @@ - + @@ -93841,7 +105664,7 @@ - + @@ -93871,7 +105694,7 @@ - + @@ -93888,21 +105711,21 @@ - + - + - + @@ -93971,13 +105794,13 @@ - + - + @@ -93991,7 +105814,7 @@ - + @@ -94021,7 +105844,6 @@ - @@ -94125,7 +105947,7 @@ - + @@ -94243,9 +106065,7 @@ - - - + @@ -94332,6 +106152,9 @@ + + + @@ -94352,7 +106175,7 @@ - + @@ -94459,7 +106282,7 @@ - + @@ -94722,6 +106545,19 @@ + + + + + + + + + + + + + @@ -94864,7 +106700,7 @@ - + @@ -94929,7 +106765,7 @@ - + @@ -94942,11 +106778,11 @@ - + - + @@ -94962,14 +106798,14 @@ - + - + - + @@ -94978,23 +106814,23 @@ - - + + - - + + - + @@ -95026,7 +106862,7 @@ - + @@ -95046,24 +106882,23 @@ - + - + - + - + - @@ -95081,464 +106916,18 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + @@ -95565,44 +106954,49 @@ - + + + + + + - + - + - + - + - + - + - + @@ -95610,7 +107004,7 @@ - + @@ -95618,137 +107012,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -95816,7 +107079,7 @@ - + @@ -95840,7 +107103,7 @@ - + @@ -96003,8 +107266,8 @@ - - + + @@ -96063,7 +107326,6 @@ - @@ -96075,7 +107337,7 @@ - + @@ -96087,18 +107349,18 @@ - + - + - + @@ -96109,17 +107371,17 @@ - + - + - + @@ -96138,83 +107400,83 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -96235,66 +107497,66 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -96304,39 +107566,39 @@ - + - + - + - + - + - + - + @@ -96351,91 +107613,106 @@ - + - + - - + + - - + + - + - + - + - + - + - + + + + + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + - + @@ -96452,7 +107729,7 @@ - + @@ -96478,7 +107755,7 @@ - + @@ -96628,7 +107905,7 @@ - + @@ -96734,34 +108011,34 @@ - + - + - + - + - + - + - + - + - + - + @@ -96777,7 +108054,6 @@ - @@ -96845,12 +108121,11 @@ - - + - + @@ -96881,6 +108156,7 @@ + @@ -96918,7 +108194,7 @@ - + @@ -96954,7 +108230,7 @@ - + @@ -96967,1520 +108243,8 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -98553,10 +108317,10 @@ - + - + @@ -98603,8 +108367,6 @@ - - @@ -98642,20 +108404,20 @@ - + - + - + - + @@ -98670,7 +108432,7 @@ - + @@ -98678,14 +108440,10 @@ - + - - - - @@ -98697,23 +108455,27 @@ + + + + - + - + - + - + @@ -98728,7 +108490,7 @@ - + @@ -98741,8 +108503,8 @@ - - + + @@ -98753,10 +108515,24 @@ + + + + + + + + + + + + + + - + @@ -98777,21 +108553,6 @@ - - - - - - - - - - - - - - - @@ -98832,6 +108593,7 @@ + @@ -98935,7 +108697,7 @@ - + @@ -98958,17 +108720,17 @@ - + - + - + @@ -98977,14 +108739,14 @@ - + - + - + @@ -99025,7 +108787,7 @@ - + @@ -99047,7 +108809,7 @@ - + @@ -99317,6 +109079,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -99363,55 +109174,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -99539,7 +109301,7 @@ - + @@ -99571,7 +109333,7 @@ - + @@ -99974,16 +109736,16 @@ - + - + - + - + @@ -99999,11 +109761,6 @@ - - - - - @@ -100020,6 +109777,11 @@ + + + + + @@ -100064,7 +109826,7 @@ - + @@ -100163,16 +109925,16 @@ - + - + - + - + @@ -100207,28 +109969,28 @@ - + - + - + - + - + - + - + - + @@ -100554,43 +110316,43 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -100623,13 +110385,13 @@ - + - + - + @@ -100710,16 +110472,16 @@ - + - + - + - + @@ -101176,7 +110938,7 @@ - + @@ -101208,17 +110970,17 @@ - + - + - + - + @@ -101287,7 +111049,7 @@ - + @@ -101303,7 +111065,7 @@ - + @@ -101328,7 +111090,7 @@ - + @@ -101340,7 +111102,7 @@ - + @@ -101355,7 +111117,7 @@ - + @@ -101379,7 +111141,7 @@ - + @@ -101441,6 +111203,10 @@ + + + + @@ -101449,10 +111215,6 @@ - - - - @@ -101492,7 +111254,7 @@ - + @@ -101512,7 +111274,7 @@ - + @@ -101526,7 +111288,7 @@ - + @@ -101536,56 +111298,56 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -101659,7 +111421,7 @@ - + @@ -101698,7 +111460,44 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -101709,7 +111508,35 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -101810,86 +111637,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -101928,7 +111675,7 @@ - + @@ -101990,7 +111737,7 @@ - + @@ -102002,296 +111749,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -102308,16 +111765,16 @@ - + - + - + - + @@ -102603,14 +112060,6 @@ - - - - - - - - @@ -102654,10 +112103,10 @@ - + - + @@ -102670,7 +112119,7 @@ - + @@ -102726,7 +112175,7 @@ - + @@ -102796,69 +112245,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -102970,7 +112357,7 @@ - + @@ -103025,10 +112412,10 @@ - + - + @@ -103408,65 +112795,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -103813,7 +113141,7 @@ - + @@ -104067,7 +113395,7 @@ - + @@ -104224,13 +113552,13 @@ - + - + - + @@ -104243,96 +113571,14 @@ - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -104377,7 +113623,7 @@ - + @@ -104484,80 +113730,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -104569,7 +113741,7 @@ - + @@ -104581,7 +113753,7 @@ - + @@ -104627,7 +113799,7 @@ - + @@ -104702,10 +113874,10 @@ - + - + @@ -104763,148 +113935,12 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -104971,7 +114007,7 @@ - + @@ -104995,44 +114031,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -105134,20 +114132,6 @@ - - - - - - - - - - - - - - @@ -105359,10 +114343,10 @@ - + - + @@ -105398,89 +114382,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -105754,20 +114655,6 @@ - - - - - - - - - - - - - - @@ -105785,7 +114672,7 @@ - + @@ -105869,16 +114756,14 @@ - - + - - + @@ -105891,7 +114776,7 @@ - + @@ -105901,8 +114786,6 @@ - - @@ -105911,7 +114794,7 @@ - + @@ -105923,15 +114806,12 @@ - - - @@ -105943,7 +114823,6 @@ - @@ -106014,20 +114893,16 @@ - - - - - + @@ -106043,16 +114918,13 @@ - - + - - @@ -106133,28 +115005,28 @@ - + - - - - + + + + - + - + @@ -106163,7 +115035,7 @@ - + @@ -106197,7 +115069,7 @@ - + @@ -106232,9 +115104,19 @@ - + + + + + + + + + + + @@ -106242,16 +115124,6 @@ - - - - - - - - - - @@ -106264,28 +115136,28 @@ - + - + - + - + - + - + @@ -106294,38 +115166,38 @@ - + - + - + - + - + - + - + @@ -106339,7 +115211,7 @@ - + @@ -106404,21 +115276,21 @@ - + - + - + - + @@ -106431,7 +115303,7 @@ - + @@ -106456,7 +115328,7 @@ - + @@ -106468,21 +115340,21 @@ - + - + - + - + @@ -106490,7 +115362,7 @@ - + @@ -106498,19 +115370,19 @@ - + - + - + @@ -106519,7 +115391,7 @@ - + @@ -106527,36 +115399,36 @@ - + - + - - + + - + - + - + @@ -106694,23 +115566,23 @@ - + - + - + - + - + @@ -106728,7 +115600,7 @@ - + @@ -106776,11 +115648,11 @@ - + - + @@ -106789,38 +115661,38 @@ - + - + - + - + - + - + - + @@ -106849,19 +115721,19 @@ - + - + - - + + - + @@ -106881,16 +115753,16 @@ - + - + - + @@ -106939,7 +115811,7 @@ - + @@ -106952,7 +115824,7 @@ - + @@ -107104,55 +115976,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -107171,13 +115995,13 @@ - + - + @@ -107206,19 +116030,17 @@ - + - + - - - + @@ -107251,7 +116073,7 @@ - + @@ -107260,7 +116082,7 @@ - + @@ -107273,7 +116095,7 @@ - + @@ -107283,7 +116105,7 @@ - + @@ -107292,7 +116114,7 @@ - + @@ -107304,12 +116126,24 @@ - + + + + + + + + + + + + + @@ -107319,18 +116153,18 @@ - + - + - + @@ -107340,7 +116174,7 @@ - + @@ -107402,7 +116236,7 @@ - + @@ -107413,7 +116247,7 @@ - + @@ -107454,7 +116288,7 @@ - + @@ -107583,14 +116417,14 @@ - + - + @@ -107613,7 +116447,7 @@ - + @@ -107654,11 +116488,9 @@ - - + - @@ -107669,7 +116501,7 @@ - + @@ -107679,8 +116511,27 @@ - - + + + + + + + + + + + + + + + + + + + + + @@ -107798,7 +116649,7 @@ - + @@ -107872,13 +116723,13 @@ - + - + - + @@ -107925,149 +116776,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -108100,7 +116808,6 @@ - @@ -108193,36 +116900,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -108249,19 +116926,607 @@ - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -108272,7 +117537,11 @@ - + + + + + @@ -108281,13 +117550,13 @@ - + - + @@ -108324,7 +117593,7 @@ - + @@ -108339,7 +117608,47 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -108369,9 +117678,11 @@ - - - + + + + + @@ -108439,7 +117750,7 @@ - + @@ -108540,11 +117851,6 @@ - - - - - @@ -108553,124 +117859,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -108690,96 +117878,21 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -108791,6 +117904,11 @@ + + + + + @@ -108907,50 +118025,14 @@ + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -108973,47 +118055,19 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + @@ -109041,7 +118095,7 @@ - + @@ -109056,7 +118110,7 @@ - + @@ -109079,7 +118133,7 @@ - + @@ -109089,6 +118143,9 @@ + + + @@ -109105,7 +118162,7 @@ - + @@ -109128,7 +118185,7 @@ - + @@ -109151,7 +118208,7 @@ - + @@ -109160,7 +118217,7 @@ - + @@ -109217,6 +118274,11 @@ + + + + + @@ -109325,7 +118387,7 @@ - + @@ -109356,7 +118418,7 @@ - + @@ -109372,7 +118434,7 @@ - + @@ -109410,28 +118472,28 @@ - + - + - + - + - + - + - + - + @@ -109601,20 +118663,20 @@ - + - + - + @@ -109626,7 +118688,7 @@ - + @@ -109710,6 +118772,12 @@ + + + + + + @@ -109733,7 +118801,21 @@ - + + + + + + + + + + + + + + + @@ -109791,6 +118873,8 @@ + + @@ -109806,6 +118890,20 @@ + + + + + + + + + + + + + + @@ -109869,31 +118967,16 @@ - + + + + + + + - - - - - - - - - - - - - - - - - - - - - @@ -109914,7 +118997,7 @@ - + @@ -109958,7 +119041,7 @@ - + @@ -110002,17 +119085,6 @@ - - - - - - - - - - - @@ -110183,14 +119255,23 @@ + + + + + + + + + - + - + @@ -110205,7 +119286,7 @@ - + @@ -110214,7 +119295,7 @@ - + @@ -110279,23 +119360,6 @@ - - - - - - - - - - - - - - - - - @@ -110465,7 +119529,7 @@ - + @@ -110656,7 +119720,7 @@ - + @@ -110665,7 +119729,7 @@ - + @@ -110748,7 +119812,6 @@ - @@ -110854,11 +119917,6 @@ - - - - - @@ -110911,10 +119969,6 @@ - - - - @@ -110985,24 +120039,23 @@ - + - + - + - - + @@ -111026,11 +120079,25 @@ - + + + + + + + + + + + + + + + - + @@ -111054,6 +120121,10 @@ + + + + @@ -111069,7 +120140,7 @@ - + @@ -111093,6 +120164,18 @@ + + + + + + + + + + + + @@ -111136,7 +120219,7 @@ - + @@ -111172,13 +120255,32 @@ - + + + + + + + + + + + + + + + + + + + + - + @@ -111188,7 +120290,7 @@ - + @@ -111266,6 +120368,11 @@ + + + + + @@ -111324,7 +120431,7 @@ - + @@ -111336,262 +120443,10 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -111608,7 +120463,7 @@ - + @@ -111861,7 +120716,7 @@ - + @@ -111869,51 +120724,10 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -111924,7 +120738,6 @@ - @@ -111941,51 +120754,57 @@ - + - + - + - + - + - + - + - + - + - + - + + + + + + + @@ -111995,7 +120814,7 @@ - + @@ -112007,36 +120826,36 @@ - + - + - + - + - + - + - + @@ -112049,7 +120868,7 @@ - + @@ -112063,7 +120882,7 @@ - + @@ -112071,7 +120890,6 @@ - @@ -112083,104 +120901,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -112195,335 +120916,14 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -112544,133 +120944,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -112680,34 +120954,34 @@ - + - + - + - + - + - + - + @@ -112829,25 +121103,25 @@ - + - + - + - + - + - + - + @@ -112899,7 +121173,7 @@ - + @@ -113061,7 +121335,7 @@ - + @@ -113221,7 +121495,7 @@ - + @@ -113235,10 +121509,10 @@ - + - + @@ -113427,7 +121701,7 @@ - + @@ -113471,7 +121745,34 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -113613,6 +121914,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -113660,12 +121999,14 @@ + + @@ -113682,11 +122023,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -113736,6 +122109,11 @@ + + + + + @@ -113785,20 +122163,49 @@ - - - + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + @@ -113817,8 +122224,13 @@ + + + + + - + @@ -113869,7 +122281,7 @@ - + @@ -113886,7 +122298,7 @@ - + @@ -114325,7 +122737,7 @@ - + @@ -114497,7 +122909,7 @@ - + @@ -114521,7 +122933,7 @@ - + @@ -114559,11 +122971,6 @@ - - - - - @@ -114644,8 +123051,15 @@ - + + + + + + + + @@ -114656,6 +123070,11 @@ + + + + + @@ -114671,7 +123090,7 @@ - + @@ -114686,7 +123105,6 @@ - @@ -114704,7 +123122,7 @@ - + @@ -114776,6 +123194,7 @@ + @@ -114836,7 +123255,7 @@ - + @@ -114846,7 +123265,7 @@ - + @@ -114881,7 +123300,7 @@ - + @@ -114943,7 +123362,7 @@ - + @@ -115047,7 +123466,7 @@ - + @@ -115065,7 +123484,7 @@ - + @@ -115285,7 +123704,7 @@ - + @@ -115300,7 +123719,7 @@ - + @@ -115338,21 +123757,21 @@ - + - + - + @@ -115373,7 +123792,7 @@ - + @@ -115480,145 +123899,145 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -115716,19 +124135,19 @@ - + - + - + - + - + @@ -115757,6 +124176,11 @@ + + + + + @@ -115779,11 +124203,6 @@ - - - - - @@ -115823,7 +124242,7 @@ - + @@ -115891,37 +124310,37 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -115976,7 +124395,38 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -115998,8 +124448,14 @@ + + + + + + @@ -116121,25 +124577,25 @@ - + - + - + - + - + - + - + @@ -116179,57 +124635,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -116257,7 +124663,7 @@ - + @@ -116272,6 +124678,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -116295,39 +124781,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -116370,10 +124823,8 @@ - - @@ -116407,6 +124858,14 @@ + + + + + + + + @@ -116446,14 +124905,6 @@ - - - - - - - - @@ -116558,7 +125009,7 @@ - + @@ -116617,10 +125068,11 @@ + - + @@ -116638,7 +125090,7 @@ - + @@ -116655,7 +125107,7 @@ - + @@ -116665,9 +125117,7 @@ - - - + @@ -116686,13 +125136,13 @@ - + - + @@ -116706,7 +125156,7 @@ - + @@ -116747,7 +125197,7 @@ - + @@ -116782,9 +125232,74 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -117137,7 +125652,7 @@ - + @@ -117306,7 +125821,7 @@ - + @@ -117374,37 +125889,37 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -117459,6 +125974,22 @@ + + + + + + + + + + + + + + + + @@ -117580,25 +126111,25 @@ - + - + - + - + - + - + - + @@ -117643,7 +126174,7 @@ - + @@ -117750,145 +126281,145 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -117964,22 +126495,6 @@ - - - - - - - - - - - - - - - - @@ -118013,19 +126528,19 @@ - + - + - + - + - + @@ -119285,7 +127800,7 @@ - + @@ -119398,11 +127913,11 @@ - + - + @@ -119454,7 +127969,7 @@ - + @@ -119470,7 +127985,7 @@ - + @@ -119519,7 +128034,7 @@ - + @@ -119545,7 +128060,7 @@ - + @@ -119705,7 +128220,7 @@ - + @@ -119764,7 +128279,7 @@ - + @@ -119789,7 +128304,7 @@ - + @@ -120044,7 +128559,7 @@ - + @@ -120188,7 +128703,7 @@ - + @@ -120217,8 +128732,21 @@ - - + + + + + + + + + + + + + + + @@ -120428,7 +128956,7 @@ - + @@ -120526,7 +129054,7 @@ - + @@ -120555,10 +129083,10 @@ - + - + @@ -120614,7 +129142,7 @@ - + @@ -120668,7 +129196,7 @@ - + @@ -120682,7 +129210,7 @@ - + @@ -120697,7 +129225,7 @@ - + @@ -120731,7 +129259,7 @@ - + @@ -120774,14 +129302,14 @@ - + - + @@ -120789,14 +129317,14 @@ - + - + @@ -120821,7 +129349,7 @@ - + @@ -120885,7 +129413,7 @@ - + @@ -120930,14 +129458,14 @@ - + - + - + @@ -120947,7 +129475,7 @@ - + @@ -120990,9 +129518,9 @@ - + - + @@ -121001,7 +129529,7 @@ - + @@ -121010,16 +129538,16 @@ - + - + - + @@ -121075,7 +129603,7 @@ - + @@ -121355,7 +129883,7 @@ - + @@ -121365,20 +129893,20 @@ - + - + - + @@ -121394,71 +129922,84 @@ - + - + - + - + - + - + - + - + - + - + - + + + + + - + - + + + + + + + + + + @@ -121482,7 +130023,7 @@ - + @@ -121582,7 +130123,7 @@ - + @@ -121591,7 +130132,7 @@ - + @@ -121635,13 +130176,13 @@ - + - + @@ -121661,7 +130202,7 @@ - + @@ -121814,684 +130355,14 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - @@ -122611,149 +130482,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -122822,26 +130550,6 @@ - - - - - - - - - - - - - - - - - - - - @@ -122876,10 +130584,10 @@ - + - + @@ -122908,10 +130616,10 @@ - + - + @@ -123178,18 +130886,16 @@ - + - - + - @@ -123219,9 +130925,8 @@ - - + @@ -123251,7 +130956,7 @@ - + @@ -123267,82 +130972,82 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -123351,23 +131056,23 @@ - + - + - + - + @@ -123375,7 +131080,7 @@ - + @@ -123388,61 +131093,61 @@ - + - + - + - + - + - + - - + + - + - + - + - + - + @@ -123638,12 +131343,15 @@ - - - - + + + + + + + @@ -123817,11 +131525,6 @@ - - - - - @@ -123891,6 +131594,11 @@ + + + + + @@ -123907,7 +131615,6 @@ - @@ -123966,15 +131673,7 @@ - - - - - - - - - + @@ -124057,6 +131756,15 @@ + + + + + + + + + @@ -124065,7 +131773,13 @@ - + + + + + + + @@ -124581,10 +132295,10 @@ - + - + @@ -124623,7 +132337,7 @@ - + @@ -124840,7 +132554,7 @@ - + @@ -125042,7 +132756,7 @@ - + @@ -125117,7 +132831,7 @@ - + @@ -125216,7 +132930,7 @@ - + @@ -125227,7 +132941,7 @@ - + @@ -125237,7 +132951,7 @@ - + @@ -125246,13 +132960,13 @@ - + - + @@ -125261,7 +132975,7 @@ - + @@ -125269,7 +132983,7 @@ - + @@ -125278,7 +132992,7 @@ - + @@ -125286,7 +133000,7 @@ - + @@ -125294,7 +133008,7 @@ - + @@ -125303,19 +133017,19 @@ - + - + - + @@ -125343,11 +133057,11 @@ - + - + @@ -125386,7 +133100,7 @@ - + @@ -125421,7 +133135,7 @@ - + @@ -125488,7 +133202,27 @@ - + + + + + + + + + + + + + + + + + + + + + @@ -125559,7 +133293,7 @@ - + @@ -125691,15 +133425,15 @@ - + - + - + @@ -125727,7 +133461,7 @@ - + @@ -125759,7 +133493,7 @@ - + @@ -125794,10 +133528,10 @@ - + - + @@ -125825,7 +133559,7 @@ - + @@ -125836,6 +133570,11 @@ + + + + + @@ -125850,7 +133589,7 @@ - + @@ -125867,22 +133606,23 @@ - + - + - + - + + @@ -125893,36 +133633,42 @@ + + + + + + - + - + - + - + - + - + - + - + @@ -125964,7 +133710,7 @@ - + @@ -125978,20 +133724,20 @@ - + - + - + @@ -126032,18 +133778,24 @@ - + + + + + + + - + - + @@ -126220,7 +133972,7 @@ - + @@ -126253,6 +134005,11 @@ + + + + + @@ -126270,8 +134027,23 @@ + + + + + + + + + + + + + + + - + @@ -126283,7 +134055,7 @@ - + @@ -126313,7 +134085,7 @@ - + @@ -126340,14 +134112,14 @@ - + - + @@ -126400,7 +134172,6 @@ - @@ -126444,40 +134215,40 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -126538,16 +134309,7 @@ - - - - - - - - - - + @@ -126717,25 +134479,18 @@ + + + + + + + + + + - - - - - - - - - - - - - - - - - @@ -126785,10 +134540,10 @@ - + - + @@ -126852,6 +134607,23 @@ + + + + + + + + + + + + + + + + + @@ -126859,41 +134631,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -126946,11 +134683,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - @@ -127002,9 +134772,348 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -127043,7 +135152,7 @@ - + @@ -127113,7 +135222,7 @@ - + @@ -127123,7 +135232,7 @@ - + @@ -127137,7 +135246,7 @@ - + @@ -127198,19 +135307,19 @@ - + - + - + @@ -127229,11 +135338,9 @@ - - - + @@ -127253,10 +135360,10 @@ - + - + @@ -127286,10 +135393,10 @@ - + - + @@ -127333,16 +135440,16 @@ - + - + - + - + @@ -127425,167 +135532,12 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -127593,27 +135545,18 @@ - - - - - - - - - @@ -127627,7 +135570,7 @@ - + @@ -127649,53 +135592,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -127704,20 +135600,6 @@ - - - - - - - - - - - - - - @@ -127737,19 +135619,19 @@ - + - + - + - + - + @@ -127771,31 +135653,10 @@ - - - - - - - - - - - - - - - - - + + - - - - - - @@ -127804,29 +135665,9 @@ - - - - - - - - - - - - - - - - - - - - - + @@ -127844,44 +135685,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -127890,35 +135693,11 @@ + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -127936,80 +135715,17 @@ - + - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -128035,130 +135751,16 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + @@ -128185,7 +135787,7 @@ - + @@ -128203,23 +135805,6 @@ - - - - - - - - - - - - - - - - - @@ -128237,7 +135822,7 @@ - + @@ -128327,7 +135912,7 @@ - + @@ -128409,7 +135994,7 @@ - + @@ -128477,16 +136062,16 @@ - + - + - + - + @@ -128495,7 +136080,7 @@ - + @@ -128515,10 +136100,10 @@ - + - + @@ -128548,10 +136133,10 @@ - + - + @@ -128568,7 +136153,7 @@ - + @@ -128615,7 +136200,7 @@ - + @@ -128661,7 +136246,6 @@ - @@ -128732,7 +136316,7 @@ - + @@ -128749,7 +136333,7 @@ - + @@ -128785,7 +136369,7 @@ - + @@ -128822,12 +136406,12 @@ - + - + - + @@ -128920,7 +136504,7 @@ - + @@ -128978,7 +136562,7 @@ - + @@ -129014,7 +136598,6 @@ - @@ -129146,7 +136729,7 @@ - + @@ -129179,10 +136762,10 @@ - + - + @@ -129311,36 +136894,36 @@ - + - + - + - + - + - + - + - + - + @@ -129426,7 +137009,7 @@ - + @@ -129676,7 +137259,6 @@ - @@ -129704,6 +137286,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -129784,37 +137397,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -129824,7 +137407,6 @@ - @@ -129833,6 +137415,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -129840,8 +137491,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -129871,12 +137561,56 @@ + + + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -130105,7 +137839,7 @@ - + @@ -130180,33 +137914,33 @@ - + - + - + - + - - + + - + @@ -130240,7 +137974,7 @@ - + @@ -130254,13 +137988,13 @@ - + - + @@ -130270,29 +138004,29 @@ - + - + - + - + - + @@ -130312,7 +138046,7 @@ - + @@ -130342,7 +138076,7 @@ - + @@ -130386,7 +138120,7 @@ - + @@ -130418,32 +138152,32 @@ - + - + - + - + - + - + @@ -130461,23 +138195,23 @@ - + - + - + - + - + @@ -130496,7 +138230,7 @@ - + @@ -130516,7 +138250,7 @@ - + @@ -130550,19 +138284,19 @@ - + - + - + - + - + @@ -130629,19 +138363,19 @@ - + - + - + - + - + @@ -130664,138 +138398,25 @@ - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -130885,7 +138506,7 @@ - + @@ -130933,7 +138554,6 @@ - @@ -130999,7 +138619,7 @@ - + @@ -131025,11 +138645,11 @@ - + - + @@ -131081,37 +138701,37 @@ - + - + - + - + - + - + - + @@ -131131,28 +138751,28 @@ - + - + - + - + - + @@ -131202,7 +138822,101 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -131391,7 +139105,7 @@ - + @@ -131402,40 +139116,40 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -131566,7 +139280,7 @@ - + @@ -131788,102 +139502,165 @@ - - - - + + - + - + - - - - + - + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - - + + + + + + + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -132034,7 +139811,7 @@ - + @@ -132048,7 +139825,6 @@ - @@ -132183,7 +139959,7 @@ - + @@ -132219,7 +139995,7 @@ - + @@ -132234,9 +140010,7 @@ - - - + @@ -132267,11 +140041,11 @@ - + - + @@ -132285,12 +140059,12 @@ - + - + @@ -132383,7 +140157,7 @@ - + @@ -132527,7 +140301,7 @@ - + @@ -132548,7 +140322,7 @@ - + @@ -132586,7 +140360,7 @@ - + @@ -132643,7 +140417,7 @@ - + @@ -132818,7 +140592,7 @@ - + @@ -132852,7 +140626,7 @@ - + @@ -132891,7 +140665,7 @@ - + @@ -133042,7 +140816,35 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -133790,7 +141592,7 @@ - + @@ -133826,8 +141628,6 @@ - - @@ -133857,6 +141657,8 @@ + + @@ -133906,7 +141708,7 @@ - + @@ -134298,7 +142100,7 @@ - + @@ -134801,7 +142603,7 @@ - + @@ -134880,7 +142682,7 @@ - + @@ -135123,96 +142925,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -135294,7 +143006,7 @@ - + @@ -135302,13 +143014,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -135325,6 +143133,18 @@ + + + + + + + + + + + + @@ -135332,13 +143152,19 @@ - + + + + + + + - + @@ -135346,7 +143172,7 @@ - + @@ -135396,7 +143222,7 @@ - + @@ -135477,7 +143303,7 @@ - + @@ -135634,7 +143460,7 @@ - + @@ -135802,7 +143628,7 @@ - + @@ -135815,14 +143641,14 @@ - + - + @@ -135832,7 +143658,7 @@ - + @@ -135872,13 +143698,18 @@ + + + + + - + @@ -135886,71 +143717,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -135975,7 +143741,7 @@ - + @@ -136029,32 +143795,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -136112,7 +143852,6 @@ - @@ -136120,8 +143859,7 @@ - - + @@ -136132,7 +143870,7 @@ - + @@ -136256,6 +143994,10 @@ + + + + @@ -136270,10 +144012,6 @@ - - - - @@ -136311,27 +144049,27 @@ - - + + - + - + - + - + @@ -136352,13 +144090,13 @@ - + - + - + @@ -136412,7 +144150,7 @@ - + @@ -136420,7 +144158,7 @@ - + @@ -136520,7 +144258,7 @@ - + @@ -136663,7 +144401,7 @@ - + @@ -136684,79 +144422,8 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -136778,7 +144445,7 @@ - + @@ -136788,7 +144455,11 @@ - + + + + + @@ -136798,31 +144469,25 @@ - - - - - - - + - + - + - + - + - + @@ -136836,7 +144501,7 @@ - + @@ -136859,7 +144524,7 @@ - + @@ -136880,7 +144545,7 @@ - + @@ -136910,7 +144575,7 @@ - + @@ -136923,14 +144588,14 @@ - + - + @@ -136945,7 +144610,7 @@ - + @@ -136953,7 +144618,7 @@ - + @@ -136962,7 +144627,7 @@ - + @@ -136978,7 +144643,7 @@ - + @@ -137051,11 +144716,6 @@ - - - - - @@ -137065,6 +144725,15 @@ + + + + + + + + + @@ -137114,89 +144783,28 @@ - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -137217,7 +144825,7 @@ - + @@ -137225,7 +144833,7 @@ - + @@ -137292,13 +144900,13 @@ - + - + @@ -137313,7 +144921,7 @@ - + @@ -137321,7 +144929,7 @@ - + @@ -137329,7 +144937,7 @@ - + @@ -137511,7 +145119,7 @@ - + @@ -137519,7 +145127,7 @@ - + @@ -137527,12 +145135,12 @@ - + - + @@ -137553,6 +145161,13 @@ + + + + + + + @@ -137592,10 +145207,10 @@ - + - + @@ -137629,7 +145244,7 @@ - + @@ -137682,14 +145297,14 @@ - + - + @@ -137706,7 +145321,7 @@ - + @@ -137746,23 +145361,6 @@ - - - - - - - - - - - - - - - - - @@ -137987,7 +145585,7 @@ - + @@ -137997,7 +145595,7 @@ - + @@ -138013,13 +145611,7 @@ - - - - - - - + @@ -138029,17 +145621,17 @@ - + - + - + @@ -138047,114 +145639,28 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -138211,103 +145717,29 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -138319,12 +145751,11 @@ - - + - + @@ -138333,7 +145764,7 @@ - + @@ -138352,7 +145783,7 @@ - + @@ -138369,7 +145800,7 @@ - + @@ -138696,7 +146127,7 @@ - + @@ -138715,21 +146146,7 @@ - - - - - - - - - - - - - - - + @@ -138762,18 +146179,15 @@ - - - - + - + @@ -138782,7 +146196,7 @@ - + @@ -138800,7 +146214,7 @@ - + @@ -138821,7 +146235,7 @@ - + @@ -138899,14 +146313,14 @@ - + - + @@ -138915,7 +146329,7 @@ - + @@ -138998,14 +146412,14 @@ - + - + @@ -139031,7 +146445,7 @@ - + @@ -139044,7 +146458,7 @@ - + @@ -139059,7 +146473,7 @@ - + @@ -139073,10 +146487,10 @@ - + - + @@ -139307,7 +146721,7 @@ - + @@ -139356,7 +146770,7 @@ - + @@ -139383,28 +146797,11 @@ - - - - - - - - - - - - - - - - - - + - + @@ -139476,7 +146873,7 @@ - + @@ -139484,7 +146881,7 @@ - + @@ -139540,6 +146937,17 @@ + + + + + + + + + + + @@ -139563,24 +146971,13 @@ - + - - - - - - - - - - - @@ -139792,7 +147189,6 @@ - @@ -139810,6 +147206,7 @@ + @@ -139823,7 +147220,6 @@ - @@ -139953,14 +147349,11 @@ + - - - - @@ -140012,6 +147405,10 @@ + + + + @@ -140057,50 +147454,10 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + @@ -140116,7 +147473,7 @@ - + @@ -140124,7 +147481,7 @@ - + @@ -140133,18 +147490,18 @@ - + - + - + @@ -140158,7 +147515,7 @@ - + @@ -140167,14 +147524,14 @@ - + - + - + - + @@ -140190,7 +147547,7 @@ - + @@ -140226,7 +147583,7 @@ - + @@ -140235,19 +147592,26 @@ - + - + - + - + - + + + + + + + + @@ -140255,7 +147619,7 @@ - + @@ -140263,7 +147627,7 @@ - + @@ -140329,13 +147693,13 @@ - + - + @@ -140363,7 +147727,7 @@ - + @@ -140668,13 +148032,13 @@ - + - + @@ -140688,7 +148052,7 @@ - + @@ -140702,7 +148066,7 @@ - + @@ -140719,7 +148083,7 @@ - + @@ -140743,7 +148107,7 @@ - + @@ -140832,7 +148196,7 @@ - + @@ -140896,12 +148260,12 @@ - + - + @@ -140985,36 +148349,36 @@ - + - + - + - + - + - + - + - + - + @@ -141024,14 +148388,14 @@ - + - + @@ -141140,7 +148504,7 @@ - + @@ -141234,7 +148598,7 @@ - + @@ -141261,7 +148625,7 @@ - + @@ -141343,14 +148707,14 @@ - + - + @@ -141363,13 +148727,13 @@ - + - + @@ -141461,7 +148825,7 @@ - + @@ -141472,10 +148836,28 @@ + + + + + + + + + + + + + + + + + + - + @@ -141505,7 +148887,7 @@ - + @@ -141520,13 +148902,13 @@ - + - + @@ -141542,7 +148924,7 @@ - + @@ -141556,7 +148938,7 @@ - + @@ -141565,11 +148947,20 @@ - + + + + + + + + + + - + @@ -141578,7 +148969,7 @@ - + @@ -141587,7 +148978,7 @@ - + @@ -141596,7 +148987,7 @@ - + @@ -141605,35 +148996,35 @@ - + - + - + - + - + - + @@ -141709,21 +149100,21 @@ - + - + - + @@ -141737,7 +149128,7 @@ - + @@ -141745,7 +149136,7 @@ - + @@ -141753,7 +149144,7 @@ - + @@ -141847,7 +149238,7 @@ - + @@ -141880,7 +149271,7 @@ - + @@ -141895,7 +149286,7 @@ - + @@ -141907,7 +149298,7 @@ - + @@ -141922,7 +149313,7 @@ - + @@ -141956,7 +149347,7 @@ - + @@ -142006,7 +149397,7 @@ - + @@ -142077,7 +149468,7 @@ - + @@ -142124,7 +149515,7 @@ - + @@ -142216,7 +149607,7 @@ - + @@ -142240,7 +149631,7 @@ - + @@ -142250,7 +149641,7 @@ - + @@ -142261,7 +149652,7 @@ - + @@ -142327,10 +149718,10 @@ - + - + @@ -142343,8 +149734,8 @@ - - + + @@ -142437,14 +149828,14 @@ - + - + @@ -142453,7 +149844,7 @@ - + @@ -142472,7 +149863,7 @@ - + @@ -142488,7 +149879,7 @@ - + @@ -142523,7 +149914,7 @@ - + @@ -142592,7 +149983,7 @@ - + @@ -142621,7 +150012,7 @@ - + @@ -142728,7 +150119,6 @@ - @@ -142917,10 +150307,7 @@ - - - - + @@ -143055,12 +150442,14 @@ + + + + - - @@ -143349,15 +150738,9 @@ + + - - - - - - - - @@ -143403,6 +150786,14 @@ + + + + + + + + @@ -143414,10 +150805,6 @@ - - - - @@ -143461,15 +150848,17 @@ - + - + - - + + + + @@ -143489,6 +150878,8 @@ + + @@ -143539,7 +150930,7 @@ - + @@ -143564,7 +150955,7 @@ - + @@ -143603,7 +150994,7 @@ - + @@ -143618,7 +151009,7 @@ - + @@ -143627,7 +151018,7 @@ - + @@ -143640,7 +151031,7 @@ - + @@ -143731,11 +151122,207 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -143783,7 +151370,50 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -143825,7 +151455,68 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -143877,8 +151568,52 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -143909,8 +151644,82 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -143920,7 +151729,80 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -143964,7 +151846,74 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -144042,7 +151991,26 @@ - + + + + + + + + + + + + + + + + + + + + @@ -144078,7 +152046,116 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -144087,7 +152164,20 @@ - + + + + + + + + + + + + + + @@ -144266,7 +152356,68 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -144311,7 +152462,86 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -144369,7 +152599,80 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -144474,8 +152777,55 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -144500,7 +152850,44 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -145027,222 +153414,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -145359,19 +153530,19 @@ - + - + - + - + - + @@ -145644,47 +153815,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -145928,212 +154058,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -146249,10 +154173,10 @@ - + - + @@ -146282,86 +154206,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -146567,10 +154411,10 @@ - + - + @@ -146740,167 +154584,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -146917,13 +154600,13 @@ - + - + - + @@ -146972,68 +154655,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -147715,16 +155336,16 @@ - + - + - + - + @@ -147791,7 +155412,7 @@ - + @@ -148273,19 +155894,19 @@ - + - + - + - + - + @@ -148391,23 +156012,6 @@ - - - - - - - - - - - - - - - - - @@ -148428,152 +156032,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -149110,7 +156568,7 @@ - + @@ -150073,31 +157531,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - @@ -150175,83 +157608,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -150266,62 +157622,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -150403,209 +157703,9 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -150777,7 +157877,7 @@ - + @@ -150945,7 +158045,7 @@ - + @@ -150981,7 +158081,7 @@ - + @@ -151050,7 +158150,7 @@ - + @@ -151169,7 +158269,7 @@ - + @@ -151307,7 +158407,7 @@ - + @@ -151458,161 +158558,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -151839,7 +158784,7 @@ - + @@ -152136,7 +159081,7 @@ - + @@ -152184,100 +159129,100 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -152506,19 +159451,19 @@ - + - + - + - + - + @@ -152667,25 +159612,25 @@ - + - + - + - + - + - + - + @@ -152698,31 +159643,31 @@ - + - + - + - + - + - + - + - + - + @@ -152842,34 +159787,34 @@ - + - + - + - + - + - + - + - + - + - + @@ -152887,19 +159832,19 @@ - + - + - + - + - + @@ -152923,37 +159868,37 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -153048,10 +159993,10 @@ - + - + @@ -153591,14 +160536,11 @@ - - - @@ -153624,7 +160566,6 @@ - @@ -153657,7 +160598,7 @@ - + @@ -153718,7 +160659,7 @@ - + @@ -153744,9 +160685,7 @@ - - @@ -153832,7 +160771,6 @@ - @@ -153841,7 +160779,6 @@ - @@ -153856,8 +160793,6 @@ - - @@ -153875,7 +160810,6 @@ - @@ -153896,7 +160830,6 @@ - @@ -153910,13 +160843,11 @@ - - - + @@ -153943,11 +160874,9 @@ - - - + - + @@ -154028,7 +160957,7 @@ - + @@ -154059,13 +160988,13 @@ - - + + - + - + @@ -154291,7 +161220,7 @@ - + @@ -154303,16 +161232,16 @@ - + - + - + @@ -154336,12 +161265,12 @@ - + - + @@ -154358,7 +161287,7 @@ - + @@ -154378,18 +161307,18 @@ - + - + - - + + @@ -154397,7 +161326,7 @@ - + @@ -154411,7 +161340,7 @@ - + @@ -154422,14 +161351,10 @@ - + - - - - @@ -154446,7 +161371,7 @@ - + @@ -154513,7 +161438,7 @@ - + @@ -154546,21 +161471,12 @@ - - - - - - - - - @@ -154661,23 +161577,23 @@ - + - + - + - + @@ -154729,27 +161645,27 @@ - + - + - + - + - + @@ -154778,13 +161694,13 @@ - + - + @@ -154847,7 +161763,7 @@ - + @@ -154859,13 +161775,13 @@ - + - + @@ -154921,7 +161837,7 @@ - + @@ -154955,7 +161871,7 @@ - + @@ -155000,7 +161916,7 @@ - + @@ -155020,7 +161936,7 @@ - + @@ -155030,7 +161946,7 @@ - + @@ -155068,7 +161984,7 @@ - + @@ -155076,46 +161992,22 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - + - + @@ -155166,7 +162058,7 @@ - + @@ -155283,7 +162175,7 @@ - + @@ -155384,7 +162276,7 @@ - + @@ -155451,12 +162343,12 @@ - + @@ -155468,7 +162360,7 @@ - + @@ -155477,8 +162369,11 @@ + + + @@ -155495,14 +162390,203 @@ + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -155563,7 +162647,7 @@ - + @@ -155598,7 +162682,7 @@ - + @@ -155644,12 +162728,34 @@ + + + + + - + + + + + + + + + + + + + + + + + + @@ -155730,23 +162836,6 @@ - - - - - - - - - - - - - - - - - @@ -155761,7 +162850,6 @@ - @@ -155777,6 +162865,10 @@ + + + + @@ -155815,7 +162907,7 @@ - + @@ -155835,17 +162927,17 @@ - + - + - + - + @@ -155855,7 +162947,7 @@ - + @@ -155866,7 +162958,7 @@ - + @@ -155878,7 +162970,7 @@ - + @@ -155891,7 +162983,7 @@ - + @@ -155905,7 +162997,7 @@ - + @@ -155920,7 +163012,7 @@ - + @@ -155936,19 +163028,19 @@ - + - + - + @@ -155985,13 +163077,13 @@ - + - + - + @@ -156012,7 +163104,7 @@ - + @@ -156020,7 +163112,7 @@ - + @@ -156206,13 +163298,13 @@ - + - + @@ -156224,7 +163316,7 @@ - + @@ -156232,7 +163324,7 @@ - + @@ -156251,51 +163343,16 @@ - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -156318,7 +163375,6 @@ - @@ -156347,7 +163403,10 @@ - + + + + @@ -156616,7 +163675,7 @@ - + @@ -156676,7 +163735,7 @@ - + @@ -156691,13 +163750,13 @@ - + - + @@ -156711,13 +163770,13 @@ - + - + @@ -156748,7 +163807,7 @@ - + @@ -156762,10 +163821,10 @@ - + - + @@ -156807,7 +163866,7 @@ - + @@ -156819,7 +163878,7 @@ - + @@ -156827,7 +163886,7 @@ - + @@ -156845,7 +163904,7 @@ - + @@ -156853,7 +163912,13 @@ - + + + + + + + @@ -156896,6 +163961,12 @@ + + + + + + @@ -156907,7 +163978,7 @@ - + @@ -156925,7 +163996,7 @@ - + @@ -156965,7 +164036,7 @@ - + @@ -156979,7 +164050,7 @@ - + @@ -156987,7 +164058,7 @@ - + @@ -157092,14 +164163,14 @@ - + - + @@ -157136,7 +164207,7 @@ - + @@ -157148,21 +164219,21 @@ - + - + - + @@ -157173,14 +164244,14 @@ - + - + @@ -157198,7 +164269,7 @@ - + @@ -157217,7 +164288,7 @@ - + @@ -157232,7 +164303,7 @@ - + @@ -157313,7 +164384,7 @@ - + @@ -157321,7 +164392,7 @@ - + @@ -157332,13 +164403,13 @@ - + - + @@ -157411,7 +164482,7 @@ - + @@ -157497,7 +164568,7 @@ - + @@ -157523,7 +164594,7 @@ - + @@ -157532,7 +164603,7 @@ - + @@ -157572,7 +164643,7 @@ - + @@ -157602,7 +164673,7 @@ - + @@ -157610,7 +164681,7 @@ - + @@ -157686,7 +164757,7 @@ - + @@ -157705,14 +164776,14 @@ - + - + @@ -157746,7 +164817,7 @@ - + @@ -157927,7 +164998,7 @@ - + @@ -157974,7 +165045,7 @@ - + @@ -157984,7 +165055,7 @@ - + @@ -157993,10 +165064,10 @@ - + - + @@ -158041,7 +165112,7 @@ - + @@ -158084,7 +165155,7 @@ - + @@ -158097,13 +165168,13 @@ - + - + @@ -158113,7 +165184,7 @@ - + @@ -158123,78 +165194,12 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - @@ -158206,7 +165211,7 @@ - + @@ -158220,7 +165225,7 @@ - + @@ -158251,7 +165256,7 @@ - + @@ -158270,13 +165275,13 @@ - + - + @@ -158293,24 +165298,7 @@ - - - - - - - - - - - - - - - - - - + @@ -158323,7 +165311,7 @@ - + @@ -158334,7 +165322,7 @@ - + @@ -158381,7 +165369,7 @@ - + @@ -158451,7 +165439,7 @@ - + @@ -158517,7 +165505,7 @@ - + @@ -158534,7 +165522,7 @@ - + @@ -158553,7 +165541,7 @@ - + @@ -158578,7 +165566,7 @@ - + @@ -158611,7 +165599,7 @@ - + @@ -158619,7 +165607,7 @@ - + @@ -158627,7 +165615,7 @@ - + @@ -158683,13 +165671,13 @@ - + - + @@ -158734,7 +165722,7 @@ - + @@ -158806,7 +165794,7 @@ - + @@ -158825,13 +165813,13 @@ - + - + @@ -158839,21 +165827,10 @@ - - - - + - - - - - - - - @@ -158877,7 +165854,7 @@ - + @@ -158930,7 +165907,7 @@ - + @@ -158946,7 +165923,7 @@ - + @@ -158976,6 +165953,17 @@ + + + + + + + + + + + @@ -158986,18 +165974,19 @@ + - + - - + + - + @@ -159012,9 +166001,9 @@ - + - + @@ -159023,45 +166012,45 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -159085,7 +166074,7 @@ - + @@ -159094,9 +166083,9 @@ - + - + @@ -159104,7 +166093,7 @@ - + @@ -159127,35 +166116,35 @@ - - + + - - + + - + - + - + - + @@ -159172,24 +166161,24 @@ - + - + - + - + - + @@ -159208,27 +166197,27 @@ - - + + - - + + - - + + - - + + - + @@ -159256,12 +166245,12 @@ - + - + @@ -159271,7 +166260,7 @@ - + @@ -159283,13 +166272,6 @@ - - - - - - - @@ -159309,9 +166291,9 @@ - + - + @@ -159333,15 +166315,15 @@ - + - + - + - + @@ -159351,7 +166333,7 @@ - + @@ -159383,7 +166365,7 @@ - + @@ -159392,7 +166374,7 @@ - + @@ -159500,12 +166482,12 @@ - + - + @@ -159513,9 +166495,9 @@ - + - + @@ -159534,7 +166516,7 @@ - + @@ -159630,7 +166612,53 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -159652,31 +166680,31 @@ - + - + - + - + - + - + - + @@ -159686,22 +166714,22 @@ - + - + - + - + @@ -159768,7 +166796,7 @@ - + @@ -159805,7 +166833,7 @@ - + @@ -159820,18 +166848,18 @@ - - - - + + + - - + + + + - @@ -159861,7 +166889,7 @@ - + @@ -159889,14 +166917,14 @@ - + - + @@ -159937,13 +166965,13 @@ - + - + @@ -159983,61 +167011,49 @@ - + - + - + - + - + - - - - - - - - - - - - - - + + - + - + - + - + - + @@ -160051,23 +167067,23 @@ - + - + - + - + - + @@ -160186,10 +167202,10 @@ - + - + @@ -160198,64 +167214,64 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -160506,13 +167522,13 @@ - + - + - + @@ -160542,28 +167558,28 @@ - + - + - + - + - + - + - + - + @@ -160680,7 +167696,7 @@ - + @@ -160716,26 +167732,6 @@ - - - - - - - - - - - - - - - - - - - - @@ -160782,13 +167778,13 @@ - + - + - + @@ -160822,12 +167818,29 @@ - - - + + + + + + + + + + + + + + + + + + + + - + @@ -160865,34 +167878,34 @@ - + - + - + - + - + - + - + - + - + - + @@ -160989,15 +168002,13 @@ + + + - - - - - @@ -161064,6 +168075,11 @@ + + + + + @@ -161177,19 +168193,19 @@ - + - + - + - + - + @@ -161201,37 +168217,37 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -161297,13 +168313,6 @@ - - - - - - - @@ -161342,22 +168351,22 @@ - + - + - + - + - + - + @@ -161373,6 +168382,13 @@ + + + + + + + @@ -161459,49 +168475,49 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -161544,7 +168560,7 @@ - + @@ -161592,7 +168608,7 @@ - + @@ -161707,7 +168723,7 @@ - + @@ -161727,13 +168743,13 @@ - + - + @@ -161745,13 +168761,13 @@ - + - + @@ -161869,13 +168885,13 @@ - + - + - + @@ -161911,7 +168927,7 @@ - + @@ -161949,34 +168965,34 @@ - + - + - + - + - + - + - + - + - + - + @@ -162017,19 +169033,19 @@ - + - + - + - + - + @@ -162041,37 +169057,37 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -162128,49 +169144,49 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -162265,7 +169281,7 @@ - + @@ -162365,22 +169381,22 @@ - + - + - + - + - + - + @@ -162614,11 +169630,11 @@ - + - + @@ -162628,11 +169644,11 @@ - + - + @@ -162644,36 +169660,36 @@ - + - + - + - + - + - + - + @@ -162844,7 +169860,7 @@ - + @@ -162852,16 +169868,15 @@ - + - + - @@ -162921,15 +169936,15 @@ - + - + - + @@ -162939,7 +169954,7 @@ - + @@ -162968,24 +169983,24 @@ - + - + - + - + @@ -162993,7 +170008,7 @@ - + @@ -163002,7 +170017,7 @@ - + @@ -163010,7 +170025,7 @@ - + @@ -163036,18 +170051,18 @@ - + - + - + @@ -163057,43 +170072,43 @@ - + - + - + - - + + - + - + - + - + - + @@ -163104,7 +170119,7 @@ - + @@ -163121,10 +170136,10 @@ - + - + @@ -163237,7 +170252,7 @@ - + @@ -163245,7 +170260,7 @@ - + @@ -163257,32 +170272,32 @@ - + - - + + - + - + - + - + - + @@ -163290,7 +170305,7 @@ - + @@ -163298,10 +170313,10 @@ - + - + @@ -163394,7 +170409,7 @@ - + @@ -163411,7 +170426,7 @@ - + @@ -163425,7 +170440,7 @@ - + @@ -163435,14 +170450,14 @@ - + - + @@ -163516,13 +170531,13 @@ - + - + - + @@ -163603,7 +170618,7 @@ - + @@ -163612,7 +170627,7 @@ - + @@ -163670,13 +170685,13 @@ - + - + - + @@ -163729,17 +170744,17 @@ - + - + - + - + @@ -163777,7 +170792,7 @@ - + @@ -163803,7 +170818,7 @@ - + @@ -163814,7 +170829,7 @@ - + @@ -163824,7 +170839,7 @@ - + @@ -163834,7 +170849,7 @@ - + @@ -163846,6 +170861,11 @@ + + + + + @@ -163861,13 +170881,8 @@ - - - - - - + @@ -163928,26 +170943,6 @@ - - - - - - - - - - - - - - - - - - - - @@ -164127,34 +171122,8 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + @@ -164233,33 +171202,13 @@ - - - - + - - - - - - - - + + + - - - - - - - - - - - - - + @@ -164274,82 +171223,10 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + @@ -164441,6 +171318,14 @@ + + + + + + + + @@ -164456,116 +171341,10 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -164574,32 +171353,9 @@ - - - - - - - - - - - - - - - - - - - - - - - @@ -164618,7 +171374,7 @@ - + @@ -164632,13 +171388,13 @@ - + - + @@ -164754,7 +171510,6 @@ - @@ -164795,273 +171550,8 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -165091,684 +171581,8 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -167190,6 +173004,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -167561,7 +173511,7 @@ - + @@ -167640,157 +173590,11 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -167802,9 +173606,17 @@ + + + + + + + + + + - - @@ -168059,159 +173871,11 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - @@ -168265,92 +173929,18 @@ + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -168358,7 +173948,7 @@ - + @@ -168385,181 +173975,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -168567,16 +173982,16 @@ - + - + - + - + @@ -168644,32 +174059,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -168683,128 +174072,8 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -168842,7 +174111,7 @@ - + @@ -168852,7 +174121,7 @@ - + @@ -168866,15 +174135,15 @@ - + - + - + @@ -168886,7 +174155,7 @@ - + @@ -168908,7 +174177,7 @@ - + @@ -168921,7 +174190,7 @@ - + @@ -169011,16 +174280,16 @@ - + - + - + - + @@ -169028,10 +174297,10 @@ - + - + @@ -169120,7 +174389,7 @@ - + @@ -169138,7 +174407,7 @@ - + @@ -169226,7 +174495,7 @@ - + @@ -169293,7 +174562,7 @@ - + @@ -169301,7 +174570,6 @@ - @@ -169310,6 +174578,7 @@ + @@ -169423,7 +174692,7 @@ - + @@ -170023,13 +175292,13 @@ - + - + @@ -170041,7 +175310,7 @@ - + @@ -170112,12 +175381,12 @@ - + - + @@ -170125,7 +175394,7 @@ - + @@ -170133,7 +175402,7 @@ - + @@ -170145,7 +175414,7 @@ - + @@ -170205,16 +175474,16 @@ - + - + - + - + @@ -170308,44 +175577,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -170359,7 +175590,7 @@ - + @@ -170410,7 +175641,7 @@ - + @@ -170455,7 +175686,7 @@ - + @@ -170483,7 +175714,7 @@ - + @@ -170495,7 +175726,7 @@ - + @@ -170527,7 +175758,6 @@ - @@ -170605,7 +175835,7 @@ - + @@ -170614,14 +175844,14 @@ - + - + @@ -170629,45 +175859,45 @@ - + - + - + - + - + - + - + - + - + @@ -170685,7 +175915,7 @@ - + @@ -170705,12 +175935,12 @@ - + - + @@ -170727,7 +175957,7 @@ - + @@ -170735,77 +175965,9 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -170814,7 +175976,7 @@ - + @@ -170859,35 +176021,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -170920,14 +176053,12 @@ - - @@ -170937,17 +176068,17 @@ - + - + - + @@ -171016,7 +176147,7 @@ - + @@ -171032,7 +176163,7 @@ - + @@ -171105,7 +176236,7 @@ - + @@ -171129,7 +176260,7 @@ - + @@ -171263,7 +176394,7 @@ - + @@ -171289,7 +176420,7 @@ - + @@ -171311,7 +176442,7 @@ - + @@ -171337,7 +176468,7 @@ - + @@ -171408,7 +176539,7 @@ - + @@ -171458,11 +176589,11 @@ - + - + @@ -171474,29 +176605,29 @@ - + - + - - + + - + - + @@ -171518,7 +176649,7 @@ - + @@ -171540,18 +176671,18 @@ - + - + - + @@ -171693,7 +176824,7 @@ - + @@ -171732,7 +176863,7 @@ - + @@ -171822,7 +176953,7 @@ - + @@ -171837,7 +176968,7 @@ - + @@ -171849,7 +176980,7 @@ - + @@ -171858,7 +176989,7 @@ - + @@ -171885,7 +177016,7 @@ - + @@ -171909,9 +177040,9 @@ - + - + @@ -171939,219 +177070,8 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - @@ -172168,19 +177088,19 @@ - + - + - + @@ -172194,7 +177114,7 @@ - + @@ -172235,19 +177155,8 @@ - - - - - - - - - - - - + @@ -172271,7 +177180,7 @@ - + @@ -172286,11 +177195,11 @@ - + - + @@ -172314,7 +177223,7 @@ - + @@ -172335,6 +177244,7 @@ + @@ -172347,6 +177257,9 @@ + + + @@ -172378,6 +177291,13 @@ + + + + + + + @@ -172604,10 +177524,10 @@ - + - + @@ -172633,6 +177553,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -172915,7 +177891,7 @@ - + @@ -172991,131 +177967,139 @@ - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -173795,10 +178779,10 @@ - + - + @@ -173818,19 +178802,19 @@ - + - + - + - + - + @@ -174473,7 +179457,7 @@ - + @@ -175114,7 +180098,7 @@ - + @@ -175386,7 +180370,7 @@ - + @@ -175869,7 +180853,7 @@ - + @@ -175883,16 +180867,16 @@ - + - + - + - + @@ -176031,6 +181015,10 @@ + + + + @@ -176055,6 +181043,7 @@ + @@ -176142,7 +181131,13 @@ + + + + + + @@ -176164,7 +181159,6 @@ - @@ -176190,15 +181184,22 @@ - + - + + + + + + + + @@ -176225,219 +181226,219 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -176447,14 +181448,14 @@ - + - + @@ -176462,7 +181463,7 @@ - + @@ -176475,46 +181476,46 @@ - + - + - + - + - + - + - + @@ -176522,7 +181523,7 @@ - + @@ -176531,59 +181532,59 @@ - + - + - + - + - + - + - + - + - + @@ -176591,26 +181592,26 @@ - + - + - + - + @@ -176619,7 +181620,7 @@ - + @@ -176627,7 +181628,7 @@ - + @@ -176636,7 +181637,7 @@ - + @@ -176646,7 +181647,7 @@ - + @@ -176654,7 +181655,7 @@ - + @@ -176679,70 +181680,70 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -176750,13 +181751,13 @@ - + - + @@ -176765,17 +181766,21 @@ - + - + + + + + @@ -176787,12 +181792,12 @@ - + - + @@ -176808,25 +181813,25 @@ - + - + - + - + @@ -176836,19 +181841,19 @@ - + - + - + - + @@ -176856,8 +181861,17 @@ + + + + + + + + + - + @@ -176867,29 +181881,29 @@ - + - + - + - + - + @@ -176898,7 +181912,7 @@ - + @@ -176906,8 +181920,26 @@ + + + + + + + + + + + + + + + - + + + + @@ -177363,6 +182395,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -177381,9 +182479,12 @@ + + + - + @@ -177409,13 +182510,13 @@ - + - + @@ -177423,35 +182524,35 @@ - + - + - + - + - + @@ -177460,28 +182561,28 @@ - + - + - + - + @@ -177489,12 +182590,18 @@ - + + + + + + + - + @@ -177502,30 +182609,30 @@ - + - + - + - + - + @@ -177607,10 +182714,10 @@ - + - + @@ -177635,7 +182742,7 @@ - + @@ -177683,7 +182790,7 @@ - + @@ -178237,8 +183344,8 @@ - - + + @@ -178341,25 +183448,25 @@ - + - + - + - + @@ -178368,7 +183475,7 @@ - + @@ -178453,23 +183560,90 @@ - + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -178548,7 +183722,7 @@ - + @@ -178556,7 +183730,7 @@ - + @@ -178564,7 +183738,7 @@ - + @@ -178573,7 +183747,7 @@ - + @@ -178591,7 +183765,7 @@ - + @@ -178607,14 +183781,14 @@ - + - + @@ -178633,7 +183807,7 @@ - + @@ -178665,7 +183839,7 @@ - + @@ -178673,7 +183847,7 @@ - + @@ -178728,7 +183902,7 @@ - + @@ -178860,7 +184034,7 @@ - + @@ -178876,7 +184050,7 @@ - + @@ -178892,36 +184066,34 @@ - - - + - + - + - + - + - + - + @@ -179372,7 +184544,7 @@ - + @@ -179527,7 +184699,7 @@ - + @@ -179769,7 +184941,7 @@ - + @@ -179781,8 +184953,8 @@ - - + + @@ -179891,40 +185063,40 @@ - + - + - + - + - + - + - + - + @@ -179968,7 +185140,7 @@ - + @@ -180125,9 +185297,9 @@ - + - + @@ -180139,14 +185311,14 @@ - - + + - - + + @@ -180157,8 +185329,6 @@ - - @@ -180179,101 +185349,8 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -180354,7 +185431,7 @@ - + @@ -180377,7 +185454,7 @@ - + @@ -180398,14 +185475,42 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -180413,6 +185518,12 @@ + + + + + + @@ -180424,7 +185535,7 @@ - + @@ -180438,16 +185549,14 @@ - - - + - + @@ -180455,7 +185564,7 @@ - + @@ -180554,7 +185663,7 @@ - + @@ -180584,7 +185693,19 @@ - + + + + + + + + + + + + + @@ -180603,7 +185724,7 @@ - + @@ -180663,48 +185784,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -180772,7 +185852,6 @@ - @@ -180781,23 +185860,23 @@ - + - + - + - + @@ -180805,7 +185884,7 @@ - + @@ -180813,14 +185892,14 @@ - + - + @@ -180828,7 +185907,7 @@ - + @@ -180837,7 +185916,7 @@ - + @@ -180846,16 +185925,16 @@ - + - + - + @@ -180892,9 +185971,7 @@ - - - + @@ -180925,7 +186002,7 @@ - + @@ -180947,7 +186024,7 @@ - + @@ -180965,17 +186042,14 @@ - - - - + - + @@ -181000,14 +186074,9 @@ - - - - - - - - + + + @@ -181201,21 +186270,14 @@ - - - + + - - + + + + - - - - - - - - @@ -181298,22 +186360,22 @@ - + - + - + - + - + - + @@ -181343,20 +186405,22 @@ + + + + + + + + + + + + + + + - - - - - - - - - - - - - @@ -181431,52 +186495,52 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -181552,34 +186616,34 @@ - + - + - + - + - + - + - + - + - + - + @@ -181628,9 +186692,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -181685,54 +186810,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -181947,7 +187024,7 @@ - + @@ -182006,13 +187083,13 @@ - + - + - + @@ -182040,7 +187117,7 @@ - + @@ -182169,16 +187246,16 @@ - + - + - + - + @@ -182312,7 +187389,7 @@ - + @@ -182322,7 +187399,6 @@ - @@ -182547,10 +187623,10 @@ - + - + @@ -182601,7 +187677,7 @@ - + @@ -182623,7 +187699,7 @@ - + @@ -182723,22 +187799,22 @@ - + - + - + - + - + - + @@ -182797,34 +187873,34 @@ - + - + - + - + - + - + - + - + - + - + @@ -183237,16 +188313,16 @@ - + - + - + - + @@ -183275,7 +188351,7 @@ - + @@ -183367,13 +188443,13 @@ - + - + - + @@ -183432,52 +188508,52 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -184138,7 +189214,6 @@ - @@ -184301,7 +189376,7 @@ - + @@ -184716,7 +189791,7 @@ - + @@ -184789,7 +189864,7 @@ - + @@ -184812,7 +189887,7 @@ - + @@ -184956,7 +190031,7 @@ - + @@ -185002,7 +190077,7 @@ - + @@ -185012,7 +190087,7 @@ - + @@ -185020,7 +190095,7 @@ - + @@ -185040,7 +190115,7 @@ - + @@ -185123,7 +190198,7 @@ - + @@ -185212,7 +190287,14 @@ - + + + + + + + + @@ -185238,7 +190320,7 @@ - + @@ -185258,7 +190340,7 @@ - + @@ -185419,13 +190501,13 @@ - + - + - + @@ -185532,10 +190614,10 @@ - + - + @@ -185544,7 +190626,7 @@ - + @@ -185736,10 +190818,10 @@ - + - + @@ -185926,7 +191008,7 @@ - + @@ -185938,6 +191020,6 @@ diff --git a/android/abi_gki_aarch64_5d7dfa34c622.xml b/android/abi_gki_aarch64_884688fe0cd4.xml similarity index 99% rename from android/abi_gki_aarch64_5d7dfa34c622.xml rename to android/abi_gki_aarch64_884688fe0cd4.xml index 21bc14b7a4e9..eea02087ca15 100644 --- a/android/abi_gki_aarch64_5d7dfa34c622.xml +++ b/android/abi_gki_aarch64_884688fe0cd4.xml @@ -51,7 +51,10 @@ + + + @@ -206,6 +209,7 @@ + @@ -748,8 +752,10 @@ + + @@ -886,6 +892,10 @@ + + + + @@ -953,6 +963,7 @@ + @@ -28857,8 +28868,8 @@ - - + + @@ -35030,64 +35041,10 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -35268,11 +35225,20 @@ + + + + + + + + + @@ -35357,7 +35323,7 @@ - + @@ -35534,6 +35500,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -35560,10 +35585,19 @@ + + + + + + + + + @@ -36630,7 +36664,7 @@ - + @@ -42451,6 +42485,29 @@ + + + + + + + + + + + + + + + + + + + + + + + @@ -42817,38 +42874,45 @@ - + - + - + - + - + - + - + + + + + + + + @@ -59077,23 +59141,7 @@ - - - - - - - - - - - - - - - - - + @@ -59102,74 +59150,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -59327,9 +59308,6 @@ - - - @@ -59390,13 +59368,9 @@ - - - - @@ -59681,17 +59655,6 @@ - - - - - - - - - - - @@ -60148,9 +60111,6 @@ - - - @@ -60265,60 +60225,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -60340,44 +60246,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -60629,7 +60497,74 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -60638,14 +60573,6 @@ - - - - - - - - @@ -60689,15 +60616,10 @@ - - - - - @@ -61660,6 +61582,9 @@ + + + @@ -61870,98 +61795,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -62451,6 +62284,25 @@ + + + + + + + + + + + + + + + + + + + @@ -62471,6 +62323,7 @@ + @@ -62512,15 +62365,11 @@ - - - - @@ -62848,6 +62697,17 @@ + + + + + + + + + + + @@ -63349,11 +63209,11 @@ - - - + + + @@ -63384,7 +63244,6 @@ - @@ -63444,10 +63303,12 @@ + + + - @@ -63644,58 +63505,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -64240,7 +64049,6 @@ - @@ -64291,26 +64099,6 @@ - - - - - - - - - - - - - - - - - - - - @@ -64357,89 +64145,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -64573,7 +64279,6 @@ - @@ -64837,260 +64542,10 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - @@ -65098,14 +64553,7 @@ - - - - - - - @@ -65125,86 +64573,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -65323,181 +64691,22 @@ - - + - + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - @@ -65506,14 +64715,6 @@ - - - - - - - - @@ -65531,18 +64732,7 @@ - - - - - - - - - - - @@ -65579,17 +64769,6 @@ - - - - - - - - - - - @@ -65628,98 +64807,10 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -65764,90 +64855,15 @@ - + - - - - - - - - - - - - - - - - - - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + @@ -65859,34 +64875,11 @@ - - - - - - - - - - - - - - - - - - - - - - - @@ -65903,10 +64896,6 @@ - - - - @@ -66022,7 +65011,6 @@ - @@ -66222,6 +65210,7 @@ + @@ -66379,10 +65368,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -66416,6 +65448,296 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -67167,20 +66489,6 @@ - - - - - - - - - - - - - - @@ -67198,8 +66506,8 @@ - - + + @@ -67227,6 +66535,20 @@ + + + + + + + + + + + + + + @@ -67245,7 +66567,6 @@ - @@ -67257,21 +66578,21 @@ - + - + - + - + @@ -67306,99 +66627,99 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -67729,14 +67050,14 @@ - + - + - + @@ -68528,16 +67849,16 @@ - - - - + + + + @@ -72433,12 +71754,12 @@ - + - + - + @@ -72457,8 +71778,8 @@ - - + + @@ -72467,8 +71788,8 @@ - - + + @@ -72486,38 +71807,38 @@ - - + + - - + + - - - + + + - - - + + + - - + + - - + + - - + + @@ -72525,21 +71846,21 @@ - - - + + + - - + + - - + + - - + + @@ -85596,13 +84917,13 @@ - - + + - - - + + + @@ -86546,11 +85867,6 @@ - - - - - @@ -86562,6 +85878,11 @@ + + + + + @@ -87193,24 +86514,24 @@ - + - + - + - + - + - + - + @@ -87383,21 +86704,21 @@ - + - + - + - + - + - + @@ -88214,41 +87535,41 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -92527,14 +91848,6 @@ - - - - - - - - @@ -92693,6 +92006,12 @@ + + + + + + @@ -112421,92 +111740,9 @@ - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -112678,237 +111914,93 @@ - + + + + + + + + + + + + + + - - + - + - + + + + - + + + + - + + + + - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - - + + + + + + + + + + + + + + + + + + + + - + - - - - + - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + @@ -129432,6 +128524,8 @@ + + @@ -129461,6 +128555,10 @@ + + + + @@ -131870,274 +130968,9 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -132161,10 +130994,10 @@ - + - + @@ -132214,7 +131047,7 @@ - + @@ -132260,30 +131093,30 @@ + + + + + + + + + + + - - - - - - + + - - - - - - - - + @@ -132354,7 +131187,7 @@ - + @@ -132445,13 +131278,6 @@ - - - - - - - @@ -132459,10 +131285,6 @@ - - - - @@ -132498,6 +131320,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -133002,6 +131850,7 @@ + @@ -133215,6 +132064,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -133395,6 +132327,149 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -133772,8 +132847,10 @@ + + @@ -133874,34 +132951,34 @@ - + - + - + - + - + - + @@ -133949,21 +133026,21 @@ - + - + - + - + @@ -134278,6 +133355,7 @@ + @@ -134290,6 +133368,9 @@ + + + @@ -134324,6 +133405,13 @@ + + + + + + + @@ -134937,6 +134025,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -137977,6 +137254,10 @@ + + + + @@ -138001,6 +137282,7 @@ + @@ -138088,7 +137370,13 @@ + + + + + + @@ -138156,6 +137444,13 @@ + + + + + + + @@ -138733,6 +138028,10 @@ + + + + @@ -139960,6 +139259,20 @@ + + + + + + + + + + + + + + diff --git a/android/abi_gki_aarch64_cuttlefish b/android/abi_gki_aarch64_cuttlefish index df6a9c3c7eb0..ed9d96a0557b 100644 --- a/android/abi_gki_aarch64_cuttlefish +++ b/android/abi_gki_aarch64_cuttlefish @@ -20,6 +20,7 @@ complete __const_udelay consume_skb + _copy_from_iter_full cpu_hwcap_keys cpu_hwcaps cpu_number @@ -63,7 +64,6 @@ kfree_skb __kmalloc kmalloc_caches - kmalloc_order_trace kmem_cache_alloc kmem_cache_alloc_trace kmem_cache_create @@ -159,6 +159,7 @@ sg_init_one sg_init_table skb_clone + skb_dequeue skb_put sk_free snd_device_new @@ -261,6 +262,19 @@ serdev_device_write serdev_device_write_wakeup +# required by hci_vhci.ko + bt_err + hci_alloc_dev + hci_free_dev + hci_recv_frame + hci_register_dev + hci_unregister_dev + skb_pull + skb_push + skb_queue_head + skb_queue_purge + skb_queue_tail + # required by incrementalfs.ko bin2hex __break_lease @@ -312,10 +326,12 @@ __msecs_to_jiffies mutex_is_locked notify_change + override_creds pagecache_get_page path_get path_put register_filesystem + revert_creds seq_puts set_anon_super sget @@ -595,6 +611,7 @@ drm_set_preferred_mode drm_universal_plane_init __get_task_comm + kmalloc_order_trace kvfree kvmalloc_node memdup_user @@ -825,12 +842,13 @@ bpf_trace_run10 bpf_trace_run8 cancel_delayed_work - _copy_from_iter_full _copy_to_iter trace_print_symbols_seq # required by vsock.ko autoremove_wake_function + init_user_ns + ns_capable_noaudit prandom_u32 prepare_to_wait proto_register @@ -839,7 +857,6 @@ _raw_write_unlock_bh security_sock_graft sk_alloc - skb_dequeue sock_init_data sock_no_accept sock_no_getsockopt diff --git a/android/abi_gki_aarch64_imx b/android/abi_gki_aarch64_imx new file mode 100644 index 000000000000..ce8c8cb823f1 --- /dev/null +++ b/android/abi_gki_aarch64_imx @@ -0,0 +1,1882 @@ +[abi_symbol_list] +# commonly used symbols + add_wait_queue + alloc_chrdev_region + alloc_etherdev_mqs + alloc_pages_exact + __alloc_pages_nodemask + __alloc_percpu + alloc_workqueue + __arch_copy_from_user + __arch_copy_to_user + arm64_const_caps_ready + __arm_smccc_smc + atomic_notifier_chain_register + atomic_notifier_chain_unregister + bcmp + bpf_trace_run1 + bpf_trace_run2 + bpf_trace_run3 + cancel_delayed_work + cancel_delayed_work_sync + cancel_work_sync + capable + cdev_add + cdev_del + cdev_init + cec_allocate_adapter + cec_delete_adapter + cec_received_msg_ts + cec_register_adapter + cec_transmit_attempt_done_ts + cec_unregister_adapter + __cfi_slowpath + __check_object_size + __class_create + class_destroy + clk_bulk_disable + clk_bulk_enable + clk_bulk_prepare + clk_bulk_unprepare + clk_disable + clk_enable + clk_gate_ops + clk_get + __clk_get_name + clk_get_parent + clk_get_rate + clk_is_match + clk_prepare + clk_put + clk_register + clk_register_fixed_rate + clk_register_gate + clk_register_mux + clk_round_rate + clk_set_parent + clk_set_rate + clk_unprepare + complete + component_add + component_del + __const_udelay + consume_skb + cpu_hwcap_keys + cpu_hwcaps + cpumask_next + cpu_number + __cpu_online_mask + __cpu_possible_mask + crc32_le + delayed_work_timer_fn + del_timer + del_timer_sync + destroy_workqueue + dev_driver_string + _dev_err + dev_fwnode + device_create + device_create_file + device_destroy + device_for_each_child + device_get_match_data + device_init_wakeup + device_link_add + device_link_del + device_property_present + device_property_read_u32_array + device_remove_file + __device_reset + device_set_wakeup_capable + device_set_wakeup_enable + _dev_info + __dev_kfree_skb_any + devm_add_action + devm_clk_bulk_get + devm_clk_get + devm_clk_get_optional + devm_extcon_dev_allocate + devm_extcon_dev_register + devm_free_irq + devm_gpiod_get + devm_gpiod_get_optional + devm_gpio_request_one + devm_ioremap + devm_ioremap_resource + devm_kfree + devm_kmalloc + __devm_of_phy_provider_register + devm_phy_create + devm_phy_get + devm_pinctrl_get + devm_platform_ioremap_resource + __devm_regmap_init + __devm_regmap_init_i2c + __devm_regmap_init_mmio_clk + devm_regulator_bulk_get + devm_regulator_get + devm_regulator_get_optional + devm_request_threaded_irq + devm_reset_control_array_get + __devm_reset_control_get + devm_reset_controller_register + devm_snd_dmaengine_pcm_register + devm_snd_soc_register_card + devm_snd_soc_register_component + devm_usb_get_phy_by_phandle + dev_pm_domain_attach_by_name + dev_pm_domain_detach + dev_pm_set_wake_irq + dev_set_name + _dev_warn + disable_irq + disable_irq_nosync + dma_alloc_attrs + dma_direct_map_page + dma_direct_map_sg + dma_direct_sync_sg_for_cpu + dma_direct_sync_sg_for_device + dma_direct_sync_single_for_cpu + dma_direct_sync_single_for_device + dma_direct_unmap_page + dma_direct_unmap_sg + dma_free_attrs + dma_get_slave_caps + dmam_alloc_attrs + dma_mmap_attrs + dma_release_channel + __dma_request_channel + dma_request_slave_channel + dma_set_coherent_mask + dma_set_mask + down_interruptible + down_write + drm_add_edid_modes + drm_atomic_helper_check + drm_atomic_helper_check_plane_state + drm_atomic_helper_cleanup_planes + drm_atomic_helper_commit + drm_atomic_helper_commit_hw_done + drm_atomic_helper_commit_modeset_disables + drm_atomic_helper_commit_modeset_enables + drm_atomic_helper_commit_planes + drm_atomic_helper_connector_destroy_state + drm_atomic_helper_connector_duplicate_state + drm_atomic_helper_connector_reset + __drm_atomic_helper_crtc_destroy_state + __drm_atomic_helper_crtc_duplicate_state + drm_atomic_helper_disable_plane + drm_atomic_helper_page_flip + drm_atomic_helper_plane_destroy_state + drm_atomic_helper_plane_duplicate_state + drm_atomic_helper_plane_reset + drm_atomic_helper_set_config + drm_atomic_helper_update_plane + drm_atomic_helper_wait_for_vblanks + drm_bridge_add + drm_bridge_attach + drm_bridge_remove + drm_compat_ioctl + drm_connector_attach_encoder + drm_connector_cleanup + drm_connector_init + drm_connector_update_edid_property + drm_crtc_arm_vblank_event + drm_crtc_cleanup + drm_crtc_handle_vblank + drm_crtc_init_with_planes + drm_crtc_send_vblank_event + drm_crtc_vblank_get + drm_crtc_vblank_off + drm_crtc_vblank_on + drm_detect_hdmi_monitor + drm_dev_alloc + drm_dev_dbg + drm_dev_printk + drm_dev_put + drm_dev_register + drm_dev_unregister + drm_display_info_set_bus_formats + drm_display_mode_from_videomode + drm_display_mode_to_videomode + drm_do_get_edid + drm_encoder_cleanup + drm_encoder_init + drm_err + drm_fb_cma_get_gem_obj + drm_gem_fb_create + drm_gem_prime_fd_to_handle + drm_gem_prime_handle_to_fd + drm_get_edid + drm_get_format_name + drm_hdmi_avi_infoframe_from_display_mode + drm_hdmi_vendor_infoframe_from_display_mode + drm_helper_hpd_irq_event + drm_helper_probe_single_connector_modes + drm_ioctl + drm_match_cea_mode + drm_mode_duplicate + drm_mode_probed_add + drm_mode_set_name + drm_mode_vrefresh + drm_of_find_possible_crtcs + drm_open + drm_panel_add + drm_panel_init + drm_panel_remove + drm_plane_cleanup + drm_plane_create_zpos_immutable_property + drm_poll + drm_read + drm_release + drm_universal_plane_init + dump_stack + enable_irq + eth_type_trans + eth_validate_addr + event_triggers_call + extcon_get_edev_by_phandle + extcon_get_state + extcon_set_state_sync + fd_install + filp_close + filp_open + find_next_bit + finish_wait + flush_work + flush_workqueue + fput + free_irq + free_netdev + __free_pages + free_pages + free_pages_exact + free_percpu + fwnode_graph_get_next_endpoint + fwnode_handle_put + fwnode_property_read_u32_array + generic_handle_irq + get_cpu_device + __get_free_pages + get_random_bytes + get_unused_fd_flags + gpiod_direction_output_raw + gpiod_set_raw_value_cansleep + gpiod_set_value_cansleep + gpio_request + gpio_to_desc + handle_level_irq + hdmi_audio_infoframe_init + hdmi_avi_infoframe_pack + hdmi_vendor_infoframe_pack + i2c_add_adapter + i2c_del_adapter + i2c_del_driver + i2c_register_driver + i2c_transfer + i2c_transfer_buffer_flags + i2c_unregister_device + idr_alloc + idr_destroy + idr_find + idr_remove + init_timer_key + init_wait_entry + __init_waitqueue_head + input_event + input_register_device + input_set_capability + iomem_resource + __ioremap + iounmap + irq_domain_remove + irq_find_mapping + irq_modify_status + irq_set_chained_handler_and_data + irq_set_irq_wake + jiffies + jiffies_to_usecs + kasprintf + kernel_read + kernel_write + kfree + kimage_vaddr + kimage_voffset + __kmalloc + kmalloc_caches + kmalloc_order_trace + kmem_cache_alloc_trace + kmemdup + kobject_create_and_add + kobject_put + kthread_create_on_node + kthread_should_stop + ktime_get + ktime_get_mono_fast_ns + ktime_get_real_ts64 + ktime_get_with_offset + kzfree + __list_add_valid + __list_del_entry_valid + media_create_pad_link + media_entity_pads_init + media_entity_remote_pad + memcpy + memset + mipi_dsi_attach + mipi_dsi_detach + mipi_dsi_driver_register_full + mipi_dsi_driver_unregister + misc_deregister + misc_register + mod_delayed_work_on + mod_timer + module_layout + module_put + __msecs_to_jiffies + msleep + __mutex_init + mutex_lock + mutex_lock_interruptible + mutex_unlock + napi_complete_done + napi_disable + __napi_schedule + napi_schedule_prep + __netdev_alloc_skb + netif_carrier_off + netif_device_attach + netif_device_detach + netif_napi_add + netif_tx_wake_queue + no_llseek + noop_llseek + nr_cpu_ids + ns_to_timespec64 + of_address_to_resource + of_alias_get_id + of_clk_add_provider + of_clk_get + of_clk_get_by_name + of_clk_src_onecell_get + of_count_phandle_with_args + of_device_get_match_data + of_device_is_available + of_device_is_compatible + of_find_compatible_node + of_find_device_by_node + of_find_i2c_device_by_node + of_find_matching_node_and_match + of_find_node_by_name + of_find_property + of_fwnode_ops + of_get_child_by_name + of_get_named_gpio_flags + of_get_next_available_child + of_get_next_child + of_get_parent + of_get_property + of_graph_get_next_endpoint + of_graph_get_port_by_id + of_graph_get_remote_node + of_graph_get_remote_port_parent + of_iomap + of_machine_is_compatible + of_match_device + of_match_node + of_node_name_eq + of_parse_phandle + of_parse_phandle_with_args + of_phy_simple_xlate + of_platform_depopulate + of_platform_populate + of_property_count_elems_of_size + of_property_read_string + of_property_read_u32_index + of_property_read_variable_u32_array + of_reset_control_array_get + param_array_ops + param_ops_bool + param_ops_int + param_ops_uint + param_ops_ullong + __pci_register_driver + pci_set_master + pci_set_power_state + pci_unregister_driver + __per_cpu_offset + perf_trace_buf_alloc + perf_trace_run_bpf_submit + pfn_valid + phy_exit + phy_init + phy_power_off + phy_power_on + physvirt_offset + pinctrl_lookup_state + pinctrl_pm_select_default_state + pinctrl_pm_select_sleep_state + pinctrl_select_state + platform_device_add + platform_device_add_data + platform_device_add_properties + platform_device_add_resources + platform_device_alloc + platform_device_put + platform_device_register_full + platform_device_unregister + __platform_driver_register + platform_driver_unregister + platform_get_irq + platform_get_irq_byname + platform_get_irq_byname_optional + platform_get_irq_optional + platform_get_resource + platform_get_resource_byname + platform_irq_count + pm_qos_add_request + pm_qos_remove_request + __pm_relax + pm_runtime_allow + __pm_runtime_disable + pm_runtime_enable + pm_runtime_forbid + pm_runtime_force_resume + pm_runtime_force_suspend + __pm_runtime_idle + __pm_runtime_resume + pm_runtime_set_autosuspend_delay + __pm_runtime_set_status + __pm_runtime_suspend + __pm_runtime_use_autosuspend + preempt_schedule + preempt_schedule_notrace + prepare_to_wait_event + printk + put_device + __put_page + __put_task_struct + queue_delayed_work_on + queue_work_on + radix_tree_insert + ___ratelimit + _raw_spin_lock + _raw_spin_lock_bh + _raw_spin_lock_irq + _raw_spin_lock_irqsave + _raw_spin_unlock + _raw_spin_unlock_bh + _raw_spin_unlock_irq + _raw_spin_unlock_irqrestore + __rcu_read_lock + __rcu_read_unlock + refcount_dec_and_test_checked + refcount_inc_checked + regcache_cache_only + regcache_mark_dirty + regcache_sync + __register_chrdev + register_netdev + __register_rpmsg_driver + register_virtio_driver + regmap_attach_dev + regmap_read + regmap_update_bits_base + regmap_write + regulator_bulk_disable + regulator_bulk_enable + regulator_disable + regulator_enable + regulator_is_enabled + regulator_set_voltage + release_firmware + __release_region + remap_pfn_range + remove_wait_queue + request_firmware + request_firmware_nowait + __request_region + request_threaded_irq + reset_control_assert + reset_control_deassert + reset_control_put + reset_control_reset + rpmsg_send + rpmsg_sendto + rtnl_lock + rtnl_unlock + schedule + schedule_timeout + scnprintf + seq_printf + seq_puts + sg_alloc_table + sg_free_table + sg_init_one + sg_init_table + sg_next + skb_pull + skb_put + snd_ctl_boolean_mono_info + snd_dma_alloc_pages + snd_dmaengine_pcm_prepare_slave_config + snd_dma_free_pages + snd_pcm_format_physical_width + snd_pcm_format_width + snd_pcm_hw_constraint_integer + snd_pcm_hw_constraint_list + snd_pcm_lib_ioctl + snd_pcm_period_elapsed + snd_soc_add_component_controls + snd_soc_card_jack_new + snd_soc_component_read32 + snd_soc_component_read + snd_soc_component_update_bits + snd_soc_component_write + snd_soc_dai_set_fmt + snd_soc_dai_set_sysclk + snd_soc_dai_set_tdm_slot + snd_soc_dapm_add_routes + snd_soc_dapm_get_volsw + snd_soc_dapm_ignore_suspend + snd_soc_dapm_new_controls + snd_soc_dapm_put_volsw + snd_soc_get_enum_double + snd_soc_get_volsw + snd_soc_info_enum_double + snd_soc_info_volsw + snd_soc_jack_add_gpios + snd_soc_of_parse_audio_routing + snd_soc_of_parse_card_name + snd_soc_params_to_bclk + snd_soc_pm_ops + snd_soc_put_enum_double + snd_soc_put_volsw + snd_soc_rtdcom_lookup + snd_soc_set_runtime_hwparams + snprintf + sprintf + sscanf + __stack_chk_fail + __stack_chk_guard + strcasecmp + strcmp + strcpy + strlcpy + strlen + strncmp + strncpy + strsep + strstr + synchronize_irq + syscon_node_to_regmap + syscon_regmap_lookup_by_compatible + syscon_regmap_lookup_by_phandle + sysfs_create_file_ns + sysfs_create_group + sysfs_remove_file_ns + sysfs_remove_group + system_wq + tasklet_kill + __tasklet_schedule + trace_define_field + trace_event_buffer_commit + trace_event_buffer_reserve + trace_event_ignore_this_pid + trace_event_raw_init + trace_event_reg + trace_handle_return + trace_raw_output_prep + trace_seq_printf + try_module_get + tty_flip_buffer_push + __unregister_chrdev + unregister_chrdev_region + unregister_netdev + unregister_rpmsg_driver + unregister_virtio_driver + up + up_write + usb_add_hcd + usb_disabled + usb_get_dr_mode + usb_hcd_is_primary_hcd + usb_put_hcd + usb_remove_hcd + usleep_range + v4l2_async_notifier_add_subdev + v4l2_async_notifier_init + v4l2_async_notifier_unregister + v4l2_async_register_subdev + v4l2_async_unregister_subdev + v4l2_ctrl_handler_free + v4l2_ctrl_handler_init_class + v4l2_ctrl_new_custom + v4l2_ctrl_new_std + v4l2_ctrl_subdev_subscribe_event + v4l2_device_disconnect + v4l2_device_put + v4l2_device_register + v4l2_device_register_subdev + v4l2_device_register_subdev_nodes + v4l2_device_unregister + v4l2_device_unregister_subdev + v4l2_event_pending + v4l2_event_subdev_unsubscribe + v4l2_event_subscribe + v4l2_event_unsubscribe + v4l2_fh_add + v4l2_fh_del + v4l2_fh_exit + v4l2_fh_init + v4l2_i2c_subdev_init + v4l2_subdev_call_wrappers + v4l2_subdev_init + vabits_actual + vb2_buffer_done + vb2_dma_contig_memops + vb2_dqbuf + vb2_expbuf + vb2_mmap + vb2_ops_wait_finish + vb2_ops_wait_prepare + vb2_plane_cookie + vb2_qbuf + vb2_querybuf + vb2_queue_init + vb2_queue_release + vb2_reqbufs + vb2_streamoff + vb2_streamon + vfree + vfs_mkdir + video_devdata + video_device_release_empty + video_ioctl2 + __video_register_device + video_unregister_device + virtqueue_add_inbuf + virtqueue_add_outbuf + virtqueue_get_buf + virtqueue_get_vring_size + virtqueue_kick + virtqueue_kick_prepare + virtqueue_notify + vmalloc + vmalloc_to_page + vmemmap + vsnprintf + wait_for_completion_interruptible_timeout + wait_for_completion_timeout + __wake_up + wake_up_process + __warn_printk + +# required by adv7511.ko + cec_s_phys_addr + cec_s_phys_addr_from_edid + cec_transmit_done_ts + drm_get_connector_status_name + drm_kms_helper_hotplug_event + drm_mode_copy + hdmi_avi_infoframe_init + i2c_new_ancillary_device + mipi_dsi_device_register_full + mipi_dsi_device_unregister + of_find_mipi_dsi_host_by_node + regmap_bulk_write + regmap_register_patch + +# required by busfreq-imx8mq.ko + register_pm_notifier + register_reboot_notifier + +# required by cdns_mhdp_drmcore.ko + drm_atomic_get_crtc_state + drm_dbg + drm_default_rgb_quant_range + drm_dp_aux_register + drm_dp_aux_unregister + drm_dp_bw_code_to_link_rate + drm_dp_dpcd_read + drm_dp_link_rate_to_bw_code + drm_hdmi_avi_infoframe_colorspace + drm_hdmi_avi_infoframe_quant_range + drm_hdmi_infoframe_set_hdr_metadata + drm_mode_create_hdmi_colorspace_property + drm_mode_is_420_also + drm_mode_is_420_only + drm_object_attach_property + hdmi_audio_infoframe_pack + hdmi_avi_infoframe_check + hdmi_drm_infoframe_pack + +# required by clk-imx8mp.ko + clk_hw_register_divider + clk_hw_register_fixed_factor + clk_hw_register_gate + clk_hw_register_mux + +# required by cpufreq-dt.ko + arch_set_freq_scale + cpufreq_enable_boost_support + cpufreq_freq_attr_scaling_available_freqs + cpufreq_freq_attr_scaling_boost_freqs + cpufreq_generic_frequency_table_verify + cpufreq_generic_get + cpufreq_generic_suspend + cpufreq_register_driver + cpufreq_unregister_driver + dev_pm_opp_free_cpufreq_table + dev_pm_opp_get_max_transition_latency + dev_pm_opp_get_opp_count + dev_pm_opp_get_sharing_cpus + dev_pm_opp_get_suspend_opp_freq + dev_pm_opp_init_cpufreq_table + dev_pm_opp_of_cpumask_add_table + dev_pm_opp_of_cpumask_remove_table + dev_pm_opp_of_get_sharing_cpus + dev_pm_opp_of_register_em + dev_pm_opp_put_regulators + dev_pm_opp_set_rate + dev_pm_opp_set_regulators + dev_pm_opp_set_sharing_cpus + policy_has_boost_freq + regulator_get_optional + regulator_put + +# required by cqhci.ko + dmam_free_coherent + mmc_cqe_request_done + +# required by device_cooling.ko + blocking_notifier_call_chain + blocking_notifier_chain_register + blocking_notifier_chain_unregister + thermal_cooling_device_unregister + thermal_of_cooling_device_register + +# required by dummy_battery.ko + power_supply_register + power_supply_unregister + +# required by dw-hdmi-cec.ko + cec_notifier_cec_adap_register + cec_notifier_cec_adap_unregister + devm_remove_action + +# required by dw-hdmi.ko + cec_fill_conn_info_from_drm + cec_notifier_conn_register + cec_notifier_conn_unregister + cec_notifier_set_phys_addr + cec_notifier_set_phys_addr_from_edid + drm_connector_init_with_ddc + drm_detect_monitor_audio + drm_scdc_read + drm_scdc_set_high_tmds_clock_ratio + drm_scdc_set_scrambling + drm_scdc_write + i2c_put_adapter + of_get_i2c_adapter_by_node + +# required by dw_hdmi-imx.ko + devm_kmemdup + devm_phy_optional_get + drm_of_encoder_active_endpoint + +# required by dwc3-haps.ko + pcim_enable_device + +# required by dwc3-of-simple.ko + clk_bulk_get_all + clk_bulk_put_all + +# required by dwc3-qcom.ko + devm_extcon_register_notifier + of_clk_get_parent_count + +# required by dwc3.ko + bpf_trace_run4 + device_property_read_string + device_property_read_u8_array + devm_clk_bulk_get_all + devm_usb_get_phy + extcon_find_edev_by_node + extcon_get_extcon_dev + extcon_register_notifier + extcon_unregister_notifier + of_usb_get_phy_mode + of_usb_update_otg_caps + phy_pm_runtime_get_sync + phy_pm_runtime_put_sync + phy_set_mode_ext + system_freezable_wq + usb_add_gadget_udc + usb_decode_ctrl + usb_del_gadget_udc + usb_ep_set_maxpacket_limit + usb_gadget_giveback_request + usb_gadget_map_request_by_dev + usb_gadget_set_state + usb_gadget_udc_reset + usb_gadget_unmap_request_by_dev + usb_get_maximum_speed + usb_role_switch_register + usb_role_switch_unregister + +# required by fec.ko + ethtool_op_get_link + ethtool_op_get_ts_info + __local_bh_enable_ip + mdiobus_alloc_size + mdiobus_free + mdiobus_is_registered_device + mdiobus_unregister + napi_gro_receive + netdev_err + netdev_info + netdev_pick_tx + netif_schedule_queue + net_ratelimit + of_find_node_by_phandle + of_get_mac_address + of_get_phy_mode + of_mdiobus_register + of_phy_connect + of_phy_deregister_fixed_link + of_phy_find_device + of_phy_is_fixed_link + of_phy_register_fixed_link + param_ops_byte + phy_attached_info + phy_connect + phy_disconnect + phy_ethtool_get_eee + phy_ethtool_get_link_ksettings + phy_ethtool_nway_reset + phy_ethtool_set_eee + phy_ethtool_set_link_ksettings + phy_init_eee + phy_mii_ioctl + phy_print_status + phy_remove_link_mode + phy_reset_after_clk_enable + phy_set_max_speed + phy_set_sym_pause + phy_start + phy_start_aneg + phy_stop + phy_support_sym_pause + pskb_expand_head + skb_tstamp_tx + timecounter_cyc2time + timecounter_init + timecounter_read + tso_build_data + tso_build_hdr + tso_count_descs + tso_start + +# required by fsl-imx-ldb.ko + devm_drm_panel_bridge_add + drm_of_find_panel_or_bridge + +# required by galcore.ko + anon_inode_getfd + cache_line_size + dev_pm_opp_add + dev_pm_opp_remove + dma_buf_attach + dma_buf_detach + dma_buf_export + dma_buf_fd + dma_buf_get + dma_buf_map_attachment + dma_buf_put + dma_buf_unmap_attachment + dma_fence_array_ops + dma_fence_context_alloc + dma_fence_default_wait + dma_fence_init + dma_fence_release + dma_fence_signal + dma_fence_signal_locked + dma_fence_wait_timeout + down + down_read + down_trylock + driver_create_file + driver_remove_file + drm_gem_handle_create + drm_gem_object_lookup + drm_gem_object_put_unlocked + drm_gem_object_release + drm_gem_private_object_init + find_vma + find_vpid + get_user_pages + hrtimer_resolution + idr_preload + iommu_attach_device + iommu_domain_alloc + iommu_domain_free + iommu_map + iommu_set_fault_handler + iommu_unmap + jiffies_to_msecs + kstrtoint_from_user + kthread_stop + ktime_get_ts64 + mutex_trylock + param_ops_ulong + pid_task + platform_bus_type + schedule_hrtimeout + set_user_nice + sg_alloc_table_from_pages + si_meminfo + sync_file_create + sync_file_get_fence + __task_pid_nr_ns + _totalram_pages + up_read + vmap + vm_mmap + vm_munmap + vunmap + +# required by gmsl-max9286.ko + i2c_smbus_read_byte_data + i2c_smbus_write_byte_data + +# required by gpio-mxc.ko + devm_gpiochip_add_data + __devm_irq_alloc_descs + devm_irq_alloc_generic_chip + devm_irq_setup_generic_chip + gpiochip_generic_free + gpiochip_generic_request + gpiochip_get_data + gpiochip_lock_as_irq + gpiochip_unlock_as_irq + irq_domain_add_legacy + irq_domain_simple_ops + irq_gc_ack_set_bit + irq_gc_mask_clr_bit + irq_gc_mask_set_bit + __irq_set_handler + register_syscore_ops + +# required by gpio-switch.ko + typec_switch_get_drvdata + typec_switch_register + typec_switch_unregister + +# required by i2c-imx.ko + clk_notifier_register + clk_notifier_unregister + dma_request_chan + gpiod_set_raw_value + i2c_add_numbered_adapter + i2c_generic_scl_recovery + i2c_recover_bus + __udelay + +# required by imx-audiomix.ko + devm_of_platform_populate + +# required by imx-cpufreq-dt.ko + dev_pm_opp_put_supported_hw + dev_pm_opp_set_supported_hw + nvmem_cell_read_u32 + +# required by imx-lcdif-crtc.ko + drm_property_destroy + +# required by imx-lcdifv3-crtc.ko + drm_mode_equal + drm_mode_find_dmt + +# required by imx-mailbox.ko + devm_mbox_controller_register + mbox_chan_received_data + mbox_chan_txdone + tasklet_init + +# required by imx-pcm-dma-common.ko + snd_dmaengine_pcm_close_release_chan + snd_dmaengine_pcm_get_chan + snd_dmaengine_pcm_open + snd_dmaengine_pcm_open_request_chan + snd_dmaengine_pcm_pointer + snd_dmaengine_pcm_set_config_from_dai_data + snd_dmaengine_pcm_trigger + snd_hwparams_to_dma_slave_config + +# required by imx-pcm-rpmsg.ko + snd_soc_lookup_component + +# required by imx-sdma.ko + dma_async_device_register + dma_async_device_unregister + dma_async_tx_descriptor_init + gen_pool_dma_alloc + gen_pool_free_owner + of_dma_controller_register + of_gen_pool_get + vchan_dma_desc_free_list + vchan_find_desc + vchan_init + vchan_tx_desc_free + vchan_tx_submit + +# required by imx.ko + do_SAK + handle_sysrq + mctrl_gpio_disable_ms + mctrl_gpio_enable_ms + mctrl_gpio_get + mctrl_gpio_init + mctrl_gpio_set + oops_in_progress + rational_best_approximation + _raw_spin_trylock + __tty_insert_flip_char + tty_insert_flip_string_fixed_flag + tty_termios_encode_baud_rate + uart_add_one_port + uart_console_device + uart_console_write + uart_get_baud_rate + uart_get_divisor + uart_get_rs485_mode + uart_handle_cts_change + uart_handle_dcd_change + uart_parse_options + uart_register_driver + uart_remove_one_port + uart_resume_port + uart_set_options + uart_suspend_port + uart_unregister_driver + uart_update_timeout + uart_write_wakeup + +# required by imx2_wdt.ko + _dev_crit + __platform_driver_probe + watchdog_init_timeout + watchdog_register_device + watchdog_set_restart_priority + watchdog_unregister_device + +# required by imx8-capture.ko + soc_device_match + +# required by imx8-isi-cap.ko + media_graph_walk_cleanup + media_graph_walk_init + media_graph_walk_next + media_graph_walk_start + v4l2_fh_open + v4l2_g_parm_cap + v4l2_s_parm_cap + vb2_fop_mmap + vb2_fop_poll + _vb2_fop_release + vb2_ioctl_create_bufs + vb2_ioctl_dqbuf + vb2_ioctl_expbuf + vb2_ioctl_prepare_buf + vb2_ioctl_qbuf + vb2_ioctl_querybuf + vb2_ioctl_reqbufs + vb2_ioctl_streamoff + vb2_ioctl_streamon + +# required by imx8-media-dev.ko + media_device_cleanup + media_device_init + __media_device_register + media_device_unregister + v4l2_async_notifier_register + +# required by imx8m_pm_domains.ko + of_genpd_add_provider_simple + of_genpd_add_subdomain + of_genpd_del_provider + pm_genpd_init + pm_genpd_remove + +# required by imx8mm_thermal.ko + devm_thermal_zone_of_sensor_register + of_thermal_get_trip_points + thermal_zone_bind_cooling_device + +# required by imx8mp-ldb.ko + devm_of_phy_get + +# required by imx_rpmsg_tty.ko + print_hex_dump + put_tty_driver + __tty_alloc_driver + tty_port_close + tty_port_destroy + tty_port_init + tty_port_install + tty_port_open + tty_prepare_flip_string + tty_register_driver + tty_set_operations + tty_std_termios + tty_unregister_driver + +# required by imx_rproc.ko + mbox_free_channel + mbox_request_channel_byname + mbox_send_message + of_phandle_iterator_init + of_phandle_iterator_next + of_reserved_mem_lookup + reset_control_status + rproc_add + rproc_add_carveout + rproc_alloc + rproc_coredump_add_segment + rproc_da_to_va + rproc_del + rproc_elf_find_loaded_rsc_table + rproc_elf_get_boot_addr + rproc_elf_load_rsc_table + rproc_elf_load_segments + rproc_elf_sanity_check + rproc_free + rproc_mem_entry_init + rproc_of_resm_mem_entry_init + rproc_vq_interrupt + +# required by imxdrm.ko + component_bind_all + component_master_add_with_match + component_master_del + component_match_add_release + component_unbind_all + drm_connector_unregister + drm_gem_cma_dumb_create + drm_gem_cma_free_object + drm_gem_cma_mmap + drm_gem_cma_prime_get_sg_table + drm_gem_cma_prime_import_sg_table + drm_gem_cma_prime_mmap + drm_gem_cma_prime_vmap + drm_gem_cma_prime_vunmap + drm_gem_cma_vm_ops + drm_kms_helper_poll_fini + drm_kms_helper_poll_init + drm_mode_config_cleanup + drm_mode_config_helper_resume + drm_mode_config_helper_suspend + drm_mode_config_init + drm_mode_config_reset + drm_of_component_match_add + drm_vblank_init + +# required by incrementalfs.ko + bin2hex + __break_lease + clear_inode + __close_fd + crypto_alloc_shash + crypto_destroy_tfm + crypto_shash_digest + d_add + d_drop + deactivate_locked_super + dentry_open + dget_parent + d_instantiate + d_make_root + dput + fget + flush_dcache_page + flush_delayed_work + fs_kobj + fsstack_copy_attr_all + generic_file_llseek + generic_file_mmap + generic_file_read_iter + generic_file_splice_read + generic_read_dir + generic_shutdown_super + get_zeroed_page + iget5_locked + ihold + inode_init_once + inode_init_owner + iput + iterate_dir + kern_path + lockref_get + lock_rename + lookup_one_len + LZ4_decompress_safe + match_int + match_token + mutex_is_locked + notify_change + override_creds + pagecache_get_page + path_get + path_put + __put_cred + register_filesystem + revert_creds + set_anon_super + sget + simple_getattr + simple_setattr + simple_statfs + strndup_user + sync_filesystem + truncate_inode_pages + unlock_new_inode + unlock_page + unlock_rename + unregister_filesystem + user_path_at_empty + vfs_create + vfs_fallocate + vfs_getattr + vfs_getxattr + vfs_link + vfs_listxattr + vfs_rename + vfs_rmdir + vfs_setxattr + vfs_unlink + +# required by ion_cma_heap.ko + cma_alloc + cma_for_each_area + cma_get_name + cma_release + ion_buffer_prep_noncached + __ion_device_add_heap + ion_device_remove_heap + +# required by irq-imx-irqsteer.ko + __irq_domain_add + irq_domain_xlate_onecell + irq_of_parse_and_map + irq_set_chip_and_handler_name + irq_set_chip_data + +# required by it6263.ko + i2c_new_dummy + regmap_bulk_read + +# required by moal.ko + alloc_netdev_mqs + __alloc_skb + __cfg80211_alloc_event_skb + __cfg80211_alloc_reply_skb + cfg80211_cac_event + cfg80211_ch_switch_notify + cfg80211_connect_done + cfg80211_cqm_rssi_notify + cfg80211_del_sta_sinfo + cfg80211_disconnected + cfg80211_find_elem_match + cfg80211_ft_event + cfg80211_get_bss + cfg80211_inform_bss_data + cfg80211_mgmt_tx_status + cfg80211_michael_mic_failure + cfg80211_new_sta + cfg80211_pmksa_candidate_notify + cfg80211_put_bss + cfg80211_radar_event + cfg80211_ready_on_channel + cfg80211_remain_on_channel_expired + cfg80211_report_wowlan_wakeup + cfg80211_roamed + cfg80211_rx_assoc_resp + cfg80211_rx_mgmt + cfg80211_rx_mlme_mgmt + cfg80211_scan_done + cfg80211_sched_scan_results + cfg80211_sched_scan_stopped + __cfg80211_send_event_skb + cfg80211_unlink_bss + cfg80211_vendor_cmd_reply + _ctype + default_wake_function + dev_alloc_name + dev_close + ether_setup + hex_dump_to_buffer + ieee80211_bss_get_elem + ieee80211_channel_to_freq_khz + ieee80211_freq_khz_to_channel + ieee80211_get_channel_khz + in4_pton + init_dummy_netdev + init_net + iwe_stream_add_event + iwe_stream_add_point + iwe_stream_add_value + iw_handler_get_spy + iw_handler_get_thrspy + iw_handler_set_spy + iw_handler_set_thrspy + kern_path_create + kfree_skb + ktime_get_raw + ktime_get_raw_ts64 + memcmp + memmove + mmc_set_data_timeout + mmc_wait_for_req + netif_carrier_on + netif_napi_del + netif_rx + netif_rx_ni + netif_tx_stop_all_queues + netlink_broadcast + __netlink_kernel_create + netlink_kernel_release + __nla_parse + nla_put + panic + param_ops_charp + param_ops_ushort + pci_choose_state + pci_disable_device + pci_disable_msi + pci_disable_msix + pci_enable_device + pci_enable_msi + pci_enable_msix_range + pci_enable_wake + pci_iomap + pci_read_config_dword + pci_release_region + pci_request_region + pci_reset_function + pci_restore_state + pci_save_state + PDE_DATA + prandom_u32 + proc_create_data + proc_mkdir + register_netdevice + regulatory_hint + regulatory_set_wiphy_regd + remove_proc_entry + rtnl_is_locked + sdio_claim_host + sdio_claim_irq + sdio_disable_func + sdio_enable_func + sdio_f0_readb + sdio_f0_writeb + sdio_get_host_pm_caps + sdio_readb + sdio_readsb + sdio_register_driver + sdio_release_host + sdio_release_irq + sdio_set_block_size + sdio_set_host_pm_flags + sdio_unregister_driver + sdio_writeb + sdio_writesb + seq_lseek + seq_read + single_open + single_release + skb_realloc_headroom + sort + strcat + strchr + strim + strncasecmp + strrchr + __sw_hweight64 + unregister_netdevice_queue + vprintk + wiphy_apply_custom_regulatory + wiphy_free + wiphy_new_nm + wiphy_register + wiphy_unregister + wireless_send_event + +# required by mxc-clk.ko + __clk_determine_rate + clk_divider_ops + clk_fractional_divider_ops + __clk_get_hw + clk_hw_get_name + clk_hw_get_parent_by_index + clk_hw_is_enabled + clk_hw_register + clk_hw_register_composite + clk_mux_ops + clk_unregister + divider_get_val + divider_recalc_rate + of_clk_get_from_provider + of_find_node_opts_by_path + +# required by nvmem-imx-ocotp.ko + devm_nvmem_register + +# required by os08a20.ko + devm_pinctrl_put + +# required by ov5640.ko + v4l2_ctrl_auto_cluster + v4l2_ctrl_handler_setup + v4l2_ctrl_new_std_menu + v4l2_ctrl_new_std_menu_items + v4l2_ctrl_subdev_log_status + __v4l2_find_nearest_size + +# required by panel-raydium-rm67191.ko + devm_backlight_device_register + mipi_dsi_dcs_enter_sleep_mode + mipi_dsi_dcs_exit_sleep_mode + mipi_dsi_dcs_get_display_brightness + mipi_dsi_dcs_set_display_brightness + mipi_dsi_dcs_set_display_off + mipi_dsi_dcs_set_display_on + mipi_dsi_dcs_set_pixel_format + mipi_dsi_dcs_set_tear_on + mipi_dsi_dcs_set_tear_scanline + mipi_dsi_dcs_soft_reset + mipi_dsi_generic_write + +# required by panel-simple.ko + drm_mode_create + of_find_backlight_by_node + of_find_i2c_adapter_by_node + of_get_display_timing + videomode_from_timing + +# required by pca9450-regulator.ko + of_regulator_match + rdev_get_drvdata + regulator_disable_regmap + regulator_enable_regmap + regulator_get_voltage_sel_regmap + regulator_is_enabled_regmap + regulator_list_voltage_linear + regulator_list_voltage_linear_range + regulator_map_voltage_iterate + regulator_register + regulator_set_voltage_sel_regmap + regulator_set_voltage_time_sel + regulator_unregister + +# required by pca9450.ko + gpiod_to_irq + mfd_add_devices + mfd_remove_devices + regmap_add_irq_chip + regmap_del_irq_chip + regmap_irq_get_domain + +# required by pci-imx6.ko + dw_pcie_ep_init + dw_pcie_ep_raise_legacy_irq + dw_pcie_ep_raise_msi_irq + dw_pcie_ep_raise_msix_irq + dw_pcie_ep_reset_bar + dw_pcie_host_init + dw_pcie_link_up + dw_pcie_msi_init + dw_pcie_read_dbi + dw_pcie_setup_rc + dw_pcie_wait_for_link + dw_pcie_write_dbi + pci_msi_enabled + phy_calibrate + +# required by phy-fsl-imx8mq-usb.ko + power_supply_get_by_phandle + power_supply_get_property + power_supply_put + power_supply_reg_notifier + power_supply_set_property + power_supply_unreg_notifier + +# required by phy-fsl-samsung-hdmi.ko + devm_clk_register + of_clk_del_provider + of_clk_src_simple_get + +# required by pinctrl-imx.ko + devm_pinctrl_register_and_init + pinconf_generic_parse_dt_config + pinctrl_dev_get_drvdata + pinctrl_enable + pinctrl_force_default + pinctrl_force_sleep + pinctrl_generic_get_group + pinctrl_generic_get_group_count + pinctrl_generic_get_group_name + pinctrl_generic_get_group_pins + pin_get_name + pinmux_generic_get_function + pinmux_generic_get_function_count + pinmux_generic_get_function_groups + pinmux_generic_get_function_name + +# required by pps_core.ko + fasync_helper + idr_get_next + kill_fasync + kobject_get + +# required by ptp.ko + device_initialize + ida_alloc_range + ida_destroy + ida_free + kthread_cancel_delayed_work_sync + kthread_create_worker + kthread_delayed_work_timer_fn + kthread_destroy_worker + kthread_mod_delayed_work + kthread_queue_delayed_work + ktime_get_snapshot + memdup_user + posix_clock_register + posix_clock_unregister + +# required by pwm-imx27.ko + of_pwm_xlate_with_flags + pwmchip_add + pwmchip_remove + +# required by pwm_bl.ko + backlight_device_register + backlight_device_unregister + devm_pwm_get + gpiod_direction_output + gpiod_get_direction + gpiod_get_value_cansleep + int_pow + pwm_apply_state + pwm_free + pwm_request + +# required by rtc-snvs.ko + devm_rtc_allocate_device + __rtc_register_device + rtc_time64_to_tm + rtc_tm_to_time64 + rtc_update_irq + +# required by sdhci-esdhc-imx.ko + mmc_gpiod_request_cd + mmc_gpiod_request_ro + mmc_gpio_get_cd + mmc_gpio_get_ro + mmc_of_parse + mmc_of_parse_voltage + mmc_retune_timer_stop + mmc_send_tuning + sdhci_add_host + sdhci_cqe_disable + sdhci_cqe_enable + sdhci_cqe_irq + sdhci_dumpregs + sdhci_execute_tuning + sdhci_pltfm_free + sdhci_pltfm_init + sdhci_remove_host + sdhci_reset + sdhci_resume_host + sdhci_runtime_resume_host + sdhci_runtime_suspend_host + sdhci_suspend_host + +# required by sec-dsim.ko + bsearch + drm_panel_attach + drm_panel_detach + drm_panel_disable + drm_panel_enable + drm_panel_get_modes + drm_panel_prepare + drm_panel_unprepare + mipi_dsi_create_packet + mipi_dsi_host_register + mipi_dsi_host_unregister + of_drm_find_bridge + of_drm_find_panel + +# required by snd-soc-fsl-dsp-cpu.ko + snd_soc_new_compress + snd_soc_register_component + snd_soc_unregister_component + +# required by snd-soc-fsl-dsp.ko + dev_pm_domain_attach_by_id + __memset_io + of_irq_get + pm_system_wakeup + sysfs_streq + vfs_llseek + +# required by snd-soc-fsl-easrc.ko + completion_done + gcd + snd_pcm_format_big_endian + snd_pcm_format_linear + snd_pcm_format_unsigned + snd_soc_dpcm_get_substream + snd_soc_info_xr_sx + +# required by snd-soc-fsl-micfil.ko + kobject_uevent_env + kstrtoull + snd_soc_get_volsw_sx + snd_soc_info_volsw_sx + snd_soc_put_volsw_sx + +# required by snd-soc-fsl-rpmsg-i2s.ko + __pm_stay_awake + wakeup_source_register + wakeup_source_unregister + +# required by snd-soc-fsl-sai.ko + kstrtouint + snd_pcm_hw_constraint_step + __sw_hweight8 + +# required by snd-soc-hdmi-codec.ko + snd_ctl_add + snd_ctl_new1 + snd_pcm_add_chmap_ctls + snd_pcm_create_iec958_consumer_hw_params + snd_pcm_hw_constraint_eld + snd_soc_jack_report + +# required by snd-soc-imx-rpmsg.ko + of_reserved_mem_device_init_by_idx + +# required by snd-soc-imx-wm8960.ko + gpiod_get_raw_value_cansleep + of_parse_phandle_with_fixed_args + snd_soc_dai_set_pll + snd_soc_dapm_disable_pin + snd_soc_dapm_enable_pin + +# required by snd-soc-rpmsg-ak4497.ko + gpio_free + snd_soc_dapm_get_enum_double + snd_soc_dapm_put_enum_double + +# required by snd-soc-rpmsg-cs42xx8.ko + regcache_cache_bypass + +# required by snd-soc-simple-card-utils.ko + devm_get_clk_from_child + devm_kasprintf + devm_kvasprintf + of_property_read_string_helper + snd_soc_dapm_get_pin_switch + snd_soc_dapm_info_pin_switch + snd_soc_dapm_put_pin_switch + snd_soc_of_parse_audio_simple_widgets + snd_soc_of_parse_daifmt + +# required by snd-soc-simple-card.ko + snd_soc_of_get_dai_name + snd_soc_of_parse_node_prefix + snd_soc_of_parse_tdm_slot + +# required by snvs_pwrkey.ko + devm_input_allocate_device + pm_relax + pm_wakeup_dev_event + +# required by soc-imx8m.ko + of_root + soc_device_register + +# required by synaptics_dsx_i2c.ko + input_allocate_device + input_free_device + input_mt_init_slots + input_mt_report_slot_state + input_set_abs_params + input_unregister_device + +# required by tcpci.ko + device_get_named_child_node + regmap_raw_read + regmap_raw_write + tcpm_cc_change + tcpm_pd_hard_reset + tcpm_pd_receive + tcpm_pd_transmit_complete + tcpm_register_port + tcpm_tcpc_reset + tcpm_unregister_port + tcpm_vbus_change + +# required by timer-imx-sysctr.ko + clockevents_config_and_register + cpu_bit_bitmap + timer_of_init + +# required by trusty-arm64-fiq.ko + smp_call_function + smp_call_function_single + +# required by trusty-ipc.ko + _copy_from_iter + _copy_to_iter + idr_for_each + strncpy_from_user + virtqueue_detach_unused_buf + wait_woken + woken_wake_function + +# required by trusty-irq.ko + __cpuhp_remove_state + __cpuhp_setup_state + __cpuhp_state_add_instance + __cpuhp_state_remove_instance + disable_percpu_irq + enable_percpu_irq + free_percpu_irq + irq_create_of_mapping + __request_percpu_irq + +# required by trusty-log.ko + panic_notifier_list + +# required by trusty-virtio.ko + register_virtio_device + unregister_virtio_device + vring_del_virtqueue + vring_interrupt + vring_new_virtqueue + +# required by trusty.ko + atomic_notifier_call_chain + +# required by v4l2-fwnode.ko + fwnode_device_is_available + fwnode_get_next_parent + fwnode_get_parent + fwnode_graph_get_port_parent + fwnode_graph_get_remote_endpoint + fwnode_graph_get_remote_port_parent + fwnode_graph_parse_endpoint + fwnode_property_get_reference_args + fwnode_property_present + fwnode_property_read_u64_array + v4l2_async_notifier_add_fwnode_subdev + v4l2_async_notifier_cleanup + v4l2_async_subdev_notifier_register + +# required by v4l2-mem2mem.ko + media_create_intf_link + media_device_register_entity + media_device_unregister_entity + media_devnode_create + media_devnode_remove + media_entity_remove_links + media_remove_intf_links + vb2_create_bufs + vb2_prepare_buf + vb2_request_object_is_buffer + +# required by virtio_rpmsg_bus.ko + device_unregister + rpmsg_find_device + rpmsg_register_device + rpmsg_unregister_device + virtio_check_driver_offered_feature + virtqueue_disable_cb + virtqueue_enable_cb + +# required by vvcam-csis.ko + of_clk_set_defaults + +# required by vvcam-video.ko + platform_device_register + v4l2_ctrl_poll + v4l2_ctrl_subscribe_event + v4l2_event_queue + v4l_bound_align_image + vb2_poll + video_device_alloc + video_device_release + +# required by xhci-hcd.ko + add_timer + complete_all + dma_pool_alloc + dma_pool_create + dma_pool_destroy + dma_pool_free + __num_online_cpus + pci_alloc_irq_vectors_affinity + pci_free_irq_vectors + pci_irq_vector + radix_tree_delete + radix_tree_lookup + radix_tree_maybe_preload + schedule_timeout_uninterruptible + sg_pcopy_from_buffer + sg_pcopy_to_buffer + __sw_hweight32 + trace_print_symbols_seq + usb_amd_dev_put + usb_amd_pt_check_port + usb_amd_quirk_pll_disable + usb_amd_quirk_pll_enable + usb_asmedia_modifyflowcontrol + usb_disable_xhci_ports + usb_hcd_check_unlink_urb + usb_hcd_end_port_resume + usb_hcd_giveback_urb + usb_hc_died + usb_hcd_irq + usb_hcd_link_urb_to_ep + usb_hcd_map_urb_for_dma + usb_hcd_poll_rh_status + usb_hcd_resume_root_hub + usb_hcd_start_port_resume + usb_hcd_unlink_urb_from_ep + usb_hub_clear_tt_buffer + usb_root_hub_lost_power + usb_wakeup_notification + wait_for_completion + +# required by xhci-pci.ko + pci_d3cold_disable + pci_read_config_byte + pci_set_mwi + usb_amd_quirk_pll_check + usb_create_shared_hcd + usb_enable_intel_xhci_ports + usb_hcd_pci_pm_ops + usb_hcd_pci_probe + usb_hcd_pci_remove + usb_hcd_pci_shutdown + +# required by xhci-plat-hcd.ko + device_wakeup_enable + of_usb_host_tpl_support + pci_bus_type + __usb_create_hcd + usb_hcd_platform_shutdown diff --git a/android/abi_gki_aarch64_qcom b/android/abi_gki_aarch64_qcom index 998ca55dc22a..65c93927312c 100644 --- a/android/abi_gki_aarch64_qcom +++ b/android/abi_gki_aarch64_qcom @@ -8,6 +8,7 @@ alarm_cancel alarm_init alarm_start_relative + alarm_expires_remaining alloc_chrdev_region __alloc_disk_node alarmtimer_get_rtcdev @@ -617,19 +618,24 @@ drm_atomic_helper_crtc_destroy_state __drm_atomic_helper_crtc_duplicate_state drm_atomic_helper_crtc_duplicate_state + __drm_atomic_helper_crtc_reset drm_atomic_helper_crtc_reset drm_atomic_helper_dirtyfb drm_atomic_helper_disable_plane drm_atomic_helper_duplicate_state drm_atomic_helper_page_flip + __drm_atomic_helper_plane_destroy_state drm_atomic_helper_plane_destroy_state __drm_atomic_helper_plane_duplicate_state drm_atomic_helper_plane_duplicate_state + __drm_atomic_helper_plane_reset drm_atomic_helper_plane_reset drm_atomic_helper_prepare_planes __drm_atomic_helper_private_obj_duplicate_state + drm_atomic_helper_resume drm_atomic_helper_set_config drm_atomic_helper_shutdown + drm_atomic_helper_suspend drm_atomic_helper_swap_state drm_atomic_helper_update_legacy_modeset_state drm_atomic_helper_update_plane @@ -768,6 +774,10 @@ drm_gem_prime_mmap drm_gem_private_object_init drm_gem_put_pages + drm_gem_shmem_dumb_create + drm_gem_shmem_get_pages_sgt + drm_gem_shmem_mmap + drm_gem_shmem_prime_import_sg_table drm_gem_vm_close drm_gem_vm_open drm_get_connector_status_name @@ -835,6 +845,7 @@ drm_panel_remove drm_plane_cleanup drm_plane_create_rotation_property + drm_plane_from_index drm_poll drm_prime_gem_destroy drm_prime_pages_to_sg diff --git a/android/abi_gki_aarch64_unisoc b/android/abi_gki_aarch64_unisoc index 0ca6e1b25e0f..6fbaf2fa4896 100644 --- a/android/abi_gki_aarch64_unisoc +++ b/android/abi_gki_aarch64_unisoc @@ -46,6 +46,7 @@ __class_create class_destroy class_find_device + clear_nlink clk_bulk_disable clk_bulk_enable clk_bulk_prepare @@ -94,6 +95,7 @@ __crypto_xor csum_ipv6_magic csum_partial + d_splice_alias default_llseek delayed_work_timer_fn del_timer @@ -271,6 +273,7 @@ ieee80211_freq_khz_to_channel ieee80211_get_channel_khz ignore_console_lock_warning + igrab inet_proto_csum_replace4 init_net __init_rwsem @@ -571,8 +574,10 @@ seq_putc seq_puts seq_read + set_nlink set_normalized_timespec64 set_user_nice + setattr_prepare sg_init_table sg_miter_next sg_miter_start @@ -679,6 +684,7 @@ trace_handle_return trace_raw_output_prep trace_seq_printf + truncate_setsize try_module_get __tty_alloc_driver tty_flip_buffer_push @@ -1558,6 +1564,7 @@ dev_pm_opp_init_cpufreq_table # required by sprd-drm.ko + adjust_managed_page_count component_add component_bind_all component_del diff --git a/arch/arm64/configs/gki_defconfig b/arch/arm64/configs/gki_defconfig index 2a1e688250ac..ecd0538de649 100644 --- a/arch/arm64/configs/gki_defconfig +++ b/arch/arm64/configs/gki_defconfig @@ -393,8 +393,11 @@ CONFIG_HID_MULTITOUCH=y CONFIG_HID_NINTENDO=y CONFIG_HID_PICOLCD=y CONFIG_HID_PLANTRONICS=y +CONFIG_HID_PLAYSTATION=y +CONFIG_PLAYSTATION_FF=y CONFIG_HID_ROCCAT=y CONFIG_HID_SONY=y +CONFIG_SONY_FF=y CONFIG_HID_STEAM=y CONFIG_HID_WACOM=y CONFIG_HID_WIIMOTE=y diff --git a/arch/x86/configs/gki_defconfig b/arch/x86/configs/gki_defconfig index 77e707f79064..9e40154307e6 100644 --- a/arch/x86/configs/gki_defconfig +++ b/arch/x86/configs/gki_defconfig @@ -343,8 +343,11 @@ CONFIG_HID_MULTITOUCH=y CONFIG_HID_NINTENDO=y CONFIG_HID_PICOLCD=y CONFIG_HID_PLANTRONICS=y +CONFIG_HID_PLAYSTATION=y +CONFIG_PLAYSTATION_FF=y CONFIG_HID_ROCCAT=y CONFIG_HID_SONY=y +CONFIG_SONY_FF=y CONFIG_HID_STEAM=y CONFIG_HID_WACOM=y CONFIG_HID_WIIMOTE=y diff --git a/build.config.common b/build.config.common index 660e00f9ec88..98d756fb2408 100644 --- a/build.config.common +++ b/build.config.common @@ -5,7 +5,7 @@ CC=clang LD=ld.lld NM=llvm-nm OBJCOPY=llvm-objcopy -CLANG_PREBUILT_BIN=prebuilts-master/clang/host/linux-x86/clang-r383902/bin +CLANG_PREBUILT_BIN=prebuilts-master/clang/host/linux-x86/clang-r416183/bin DEPMOD=depmod BUILDTOOLS_PREBUILT_BIN=build/build-tools/path/linux-x86 diff --git a/build.config.gki.aarch64 b/build.config.gki.aarch64 index 2c8a87684413..210264370e9b 100644 --- a/build.config.gki.aarch64 +++ b/build.config.gki.aarch64 @@ -12,6 +12,7 @@ android/abi_gki_aarch64_exynosauto android/abi_gki_aarch64_galaxy android/abi_gki_aarch64_goldfish android/abi_gki_aarch64_hikey960 +android/abi_gki_aarch64_imx android/abi_gki_aarch64_oneplus android/abi_gki_aarch64_oplus android/abi_gki_aarch64_qcom diff --git a/drivers/android/binder.c b/drivers/android/binder.c index db6ba4e4f711..9dccb0fe93e1 100644 --- a/drivers/android/binder.c +++ b/drivers/android/binder.c @@ -69,11 +69,9 @@ #include #include -#include #include -#include "binder_alloc.h" #include "binder_internal.h" #include "binder_trace.h" #include @@ -167,24 +165,6 @@ module_param_call(stop_on_user_error, binder_set_stop_on_user_error, #define to_binder_fd_array_object(hdr) \ container_of(hdr, struct binder_fd_array_object, hdr) -enum binder_stat_types { - BINDER_STAT_PROC, - BINDER_STAT_THREAD, - BINDER_STAT_NODE, - BINDER_STAT_REF, - BINDER_STAT_DEATH, - BINDER_STAT_TRANSACTION, - BINDER_STAT_TRANSACTION_COMPLETE, - BINDER_STAT_COUNT -}; - -struct binder_stats { - atomic_t br[_IOC_NR(BR_FAILED_REPLY) + 1]; - atomic_t bc[_IOC_NR(BC_REPLY_SG) + 1]; - atomic_t obj_created[BINDER_STAT_COUNT]; - atomic_t obj_deleted[BINDER_STAT_COUNT]; -}; - static struct binder_stats binder_stats; static inline void binder_stats_deleted(enum binder_stat_types type) @@ -220,299 +200,11 @@ static struct binder_transaction_log_entry *binder_transaction_log_add( return e; } -/** - * struct binder_work - work enqueued on a worklist - * @entry: node enqueued on list - * @type: type of work to be performed - * - * There are separate work lists for proc, thread, and node (async). - */ -struct binder_work { - struct list_head entry; - - enum binder_work_type { - BINDER_WORK_TRANSACTION = 1, - BINDER_WORK_TRANSACTION_COMPLETE, - BINDER_WORK_RETURN_ERROR, - BINDER_WORK_NODE, - BINDER_WORK_DEAD_BINDER, - BINDER_WORK_DEAD_BINDER_AND_CLEAR, - BINDER_WORK_CLEAR_DEATH_NOTIFICATION, - } type; -}; - -struct binder_error { - struct binder_work work; - uint32_t cmd; -}; - -/** - * struct binder_node - binder node bookkeeping - * @debug_id: unique ID for debugging - * (invariant after initialized) - * @lock: lock for node fields - * @work: worklist element for node work - * (protected by @proc->inner_lock) - * @rb_node: element for proc->nodes tree - * (protected by @proc->inner_lock) - * @dead_node: element for binder_dead_nodes list - * (protected by binder_dead_nodes_lock) - * @proc: binder_proc that owns this node - * (invariant after initialized) - * @refs: list of references on this node - * (protected by @lock) - * @internal_strong_refs: used to take strong references when - * initiating a transaction - * (protected by @proc->inner_lock if @proc - * and by @lock) - * @local_weak_refs: weak user refs from local process - * (protected by @proc->inner_lock if @proc - * and by @lock) - * @local_strong_refs: strong user refs from local process - * (protected by @proc->inner_lock if @proc - * and by @lock) - * @tmp_refs: temporary kernel refs - * (protected by @proc->inner_lock while @proc - * is valid, and by binder_dead_nodes_lock - * if @proc is NULL. During inc/dec and node release - * it is also protected by @lock to provide safety - * as the node dies and @proc becomes NULL) - * @ptr: userspace pointer for node - * (invariant, no lock needed) - * @cookie: userspace cookie for node - * (invariant, no lock needed) - * @has_strong_ref: userspace notified of strong ref - * (protected by @proc->inner_lock if @proc - * and by @lock) - * @pending_strong_ref: userspace has acked notification of strong ref - * (protected by @proc->inner_lock if @proc - * and by @lock) - * @has_weak_ref: userspace notified of weak ref - * (protected by @proc->inner_lock if @proc - * and by @lock) - * @pending_weak_ref: userspace has acked notification of weak ref - * (protected by @proc->inner_lock if @proc - * and by @lock) - * @has_async_transaction: async transaction to node in progress - * (protected by @lock) - * @sched_policy: minimum scheduling policy for node - * (invariant after initialized) - * @accept_fds: file descriptor operations supported for node - * (invariant after initialized) - * @min_priority: minimum scheduling priority - * (invariant after initialized) - * @inherit_rt: inherit RT scheduling policy from caller - * @txn_security_ctx: require sender's security context - * (invariant after initialized) - * @async_todo: list of async work items - * (protected by @proc->inner_lock) - * - * Bookkeeping structure for binder nodes. - */ -struct binder_node { - int debug_id; - spinlock_t lock; - struct binder_work work; - union { - struct rb_node rb_node; - struct hlist_node dead_node; - }; - struct binder_proc *proc; - struct hlist_head refs; - int internal_strong_refs; - int local_weak_refs; - int local_strong_refs; - int tmp_refs; - binder_uintptr_t ptr; - binder_uintptr_t cookie; - struct { - /* - * bitfield elements protected by - * proc inner_lock - */ - u8 has_strong_ref:1; - u8 pending_strong_ref:1; - u8 has_weak_ref:1; - u8 pending_weak_ref:1; - }; - struct { - /* - * invariant after initialization - */ - u8 sched_policy:2; - u8 inherit_rt:1; - u8 accept_fds:1; - u8 txn_security_ctx:1; - u8 min_priority; - }; - bool has_async_transaction; - struct list_head async_todo; -}; - -struct binder_ref_death { - /** - * @work: worklist element for death notifications - * (protected by inner_lock of the proc that - * this ref belongs to) - */ - struct binder_work work; - binder_uintptr_t cookie; -}; - -/** - * struct binder_ref_data - binder_ref counts and id - * @debug_id: unique ID for the ref - * @desc: unique userspace handle for ref - * @strong: strong ref count (debugging only if not locked) - * @weak: weak ref count (debugging only if not locked) - * - * Structure to hold ref count and ref id information. Since - * the actual ref can only be accessed with a lock, this structure - * is used to return information about the ref to callers of - * ref inc/dec functions. - */ -struct binder_ref_data { - int debug_id; - uint32_t desc; - int strong; - int weak; -}; - -/** - * struct binder_ref - struct to track references on nodes - * @data: binder_ref_data containing id, handle, and current refcounts - * @rb_node_desc: node for lookup by @data.desc in proc's rb_tree - * @rb_node_node: node for lookup by @node in proc's rb_tree - * @node_entry: list entry for node->refs list in target node - * (protected by @node->lock) - * @proc: binder_proc containing ref - * @node: binder_node of target node. When cleaning up a - * ref for deletion in binder_cleanup_ref, a non-NULL - * @node indicates the node must be freed - * @death: pointer to death notification (ref_death) if requested - * (protected by @node->lock) - * - * Structure to track references from procA to target node (on procB). This - * structure is unsafe to access without holding @proc->outer_lock. - */ -struct binder_ref { - /* Lookups needed: */ - /* node + proc => ref (transaction) */ - /* desc + proc => ref (transaction, inc/dec ref) */ - /* node => refs + procs (proc exit) */ - struct binder_ref_data data; - struct rb_node rb_node_desc; - struct rb_node rb_node_node; - struct hlist_node node_entry; - struct binder_proc *proc; - struct binder_node *node; - struct binder_ref_death *death; -}; - enum binder_deferred_state { BINDER_DEFERRED_FLUSH = 0x01, BINDER_DEFERRED_RELEASE = 0x02, }; -/** - * struct binder_priority - scheduler policy and priority - * @sched_policy scheduler policy - * @prio [100..139] for SCHED_NORMAL, [0..99] for FIFO/RT - * - * The binder driver supports inheriting the following scheduler policies: - * SCHED_NORMAL - * SCHED_BATCH - * SCHED_FIFO - * SCHED_RR - */ -struct binder_priority { - unsigned int sched_policy; - int prio; -}; - -/** - * struct binder_proc - binder process bookkeeping - * @proc_node: element for binder_procs list - * @threads: rbtree of binder_threads in this proc - * (protected by @inner_lock) - * @nodes: rbtree of binder nodes associated with - * this proc ordered by node->ptr - * (protected by @inner_lock) - * @refs_by_desc: rbtree of refs ordered by ref->desc - * (protected by @outer_lock) - * @refs_by_node: rbtree of refs ordered by ref->node - * (protected by @outer_lock) - * @waiting_threads: threads currently waiting for proc work - * (protected by @inner_lock) - * @pid PID of group_leader of process - * (invariant after initialized) - * @tsk task_struct for group_leader of process - * (invariant after initialized) - * @deferred_work_node: element for binder_deferred_list - * (protected by binder_deferred_lock) - * @deferred_work: bitmap of deferred work to perform - * (protected by binder_deferred_lock) - * @is_dead: process is dead and awaiting free - * when outstanding transactions are cleaned up - * (protected by @inner_lock) - * @todo: list of work for this process - * (protected by @inner_lock) - * @stats: per-process binder statistics - * (atomics, no lock needed) - * @delivered_death: list of delivered death notification - * (protected by @inner_lock) - * @max_threads: cap on number of binder threads - * (protected by @inner_lock) - * @requested_threads: number of binder threads requested but not - * yet started. In current implementation, can - * only be 0 or 1. - * (protected by @inner_lock) - * @requested_threads_started: number binder threads started - * (protected by @inner_lock) - * @tmp_ref: temporary reference to indicate proc is in use - * (protected by @inner_lock) - * @default_priority: default scheduler priority - * (invariant after initialized) - * @debugfs_entry: debugfs node - * @alloc: binder allocator bookkeeping - * @context: binder_context for this proc - * (invariant after initialized) - * @inner_lock: can nest under outer_lock and/or node lock - * @outer_lock: no nesting under innor or node lock - * Lock order: 1) outer, 2) node, 3) inner - * @binderfs_entry: process-specific binderfs log file - * - * Bookkeeping structure for binder processes - */ -struct binder_proc { - struct hlist_node proc_node; - struct rb_root threads; - struct rb_root nodes; - struct rb_root refs_by_desc; - struct rb_root refs_by_node; - struct list_head waiting_threads; - int pid; - struct task_struct *tsk; - struct hlist_node deferred_work_node; - int deferred_work; - bool is_dead; - - struct list_head todo; - struct binder_stats stats; - struct list_head delivered_death; - int max_threads; - int requested_threads; - int requested_threads_started; - int tmp_ref; - struct binder_priority default_priority; - struct dentry *debugfs_entry; - struct binder_alloc alloc; - struct binder_context *context; - spinlock_t inner_lock; - spinlock_t outer_lock; - struct dentry *binderfs_entry; -}; - enum { BINDER_LOOPER_STATE_REGISTERED = 0x01, BINDER_LOOPER_STATE_ENTERED = 0x02, @@ -522,129 +214,6 @@ enum { BINDER_LOOPER_STATE_POLL = 0x20, }; -/** - * struct binder_thread - binder thread bookkeeping - * @proc: binder process for this thread - * (invariant after initialization) - * @rb_node: element for proc->threads rbtree - * (protected by @proc->inner_lock) - * @waiting_thread_node: element for @proc->waiting_threads list - * (protected by @proc->inner_lock) - * @pid: PID for this thread - * (invariant after initialization) - * @looper: bitmap of looping state - * (only accessed by this thread) - * @looper_needs_return: looping thread needs to exit driver - * (no lock needed) - * @transaction_stack: stack of in-progress transactions for this thread - * (protected by @proc->inner_lock) - * @todo: list of work to do for this thread - * (protected by @proc->inner_lock) - * @process_todo: whether work in @todo should be processed - * (protected by @proc->inner_lock) - * @return_error: transaction errors reported by this thread - * (only accessed by this thread) - * @reply_error: transaction errors reported by target thread - * (protected by @proc->inner_lock) - * @wait: wait queue for thread work - * @stats: per-thread statistics - * (atomics, no lock needed) - * @tmp_ref: temporary reference to indicate thread is in use - * (atomic since @proc->inner_lock cannot - * always be acquired) - * @is_dead: thread is dead and awaiting free - * when outstanding transactions are cleaned up - * (protected by @proc->inner_lock) - * @task: struct task_struct for this thread - * - * Bookkeeping structure for binder threads. - */ -struct binder_thread { - struct binder_proc *proc; - struct rb_node rb_node; - struct list_head waiting_thread_node; - int pid; - int looper; /* only modified by this thread */ - bool looper_need_return; /* can be written by other thread */ - struct binder_transaction *transaction_stack; - struct list_head todo; - bool process_todo; - struct binder_error return_error; - struct binder_error reply_error; - wait_queue_head_t wait; - struct binder_stats stats; - atomic_t tmp_ref; - bool is_dead; - struct task_struct *task; -}; - -/** - * struct binder_txn_fd_fixup - transaction fd fixup list element - * @fixup_entry: list entry - * @file: struct file to be associated with new fd - * @offset: offset in buffer data to this fixup - * - * List element for fd fixups in a transaction. Since file - * descriptors need to be allocated in the context of the - * target process, we pass each fd to be processed in this - * struct. - */ -struct binder_txn_fd_fixup { - struct list_head fixup_entry; - struct file *file; - size_t offset; -}; - -struct binder_transaction { - int debug_id; - struct binder_work work; - struct binder_thread *from; - struct binder_transaction *from_parent; - struct binder_proc *to_proc; - struct binder_thread *to_thread; - struct binder_transaction *to_parent; - unsigned need_reply:1; - /* unsigned is_dead:1; */ /* not used at the moment */ - - struct binder_buffer *buffer; - unsigned int code; - unsigned int flags; - struct binder_priority priority; - struct binder_priority saved_priority; - bool set_priority_called; - kuid_t sender_euid; - struct list_head fd_fixups; - binder_uintptr_t security_ctx; - /** - * @lock: protects @from, @to_proc, and @to_thread - * - * @from, @to_proc, and @to_thread can be set to NULL - * during thread teardown - */ - spinlock_t lock; - ANDROID_VENDOR_DATA(1); -}; - -/** - * struct binder_object - union of flat binder object types - * @hdr: generic object header - * @fbo: binder object (nodes and refs) - * @fdo: file descriptor object - * @bbo: binder buffer pointer - * @fdao: file descriptor array - * - * Used for type-independent object copies - */ -struct binder_object { - union { - struct binder_object_header hdr; - struct flat_binder_object fbo; - struct binder_fd_object fdo; - struct binder_buffer_object bbo; - struct binder_fd_array_object fdao; - }; -}; - /** * binder_proc_lock() - Acquire outer lock for given binder_proc * @proc: struct binder_proc to acquire diff --git a/drivers/android/binder_internal.h b/drivers/android/binder_internal.h index 283d3cb9c16e..9765fde875a5 100644 --- a/drivers/android/binder_internal.h +++ b/drivers/android/binder_internal.h @@ -12,6 +12,8 @@ #include #include #include +#include +#include "binder_alloc.h" struct binder_context { struct binder_node *binder_context_mgr_node; @@ -141,6 +143,435 @@ struct binder_transaction_log { struct binder_transaction_log_entry entry[32]; }; +enum binder_stat_types { + BINDER_STAT_PROC, + BINDER_STAT_THREAD, + BINDER_STAT_NODE, + BINDER_STAT_REF, + BINDER_STAT_DEATH, + BINDER_STAT_TRANSACTION, + BINDER_STAT_TRANSACTION_COMPLETE, + BINDER_STAT_COUNT +}; + +struct binder_stats { + atomic_t br[_IOC_NR(BR_FAILED_REPLY) + 1]; + atomic_t bc[_IOC_NR(BC_REPLY_SG) + 1]; + atomic_t obj_created[BINDER_STAT_COUNT]; + atomic_t obj_deleted[BINDER_STAT_COUNT]; +}; + +/** + * struct binder_work - work enqueued on a worklist + * @entry: node enqueued on list + * @type: type of work to be performed + * + * There are separate work lists for proc, thread, and node (async). + */ +struct binder_work { + struct list_head entry; + + enum binder_work_type { + BINDER_WORK_TRANSACTION = 1, + BINDER_WORK_TRANSACTION_COMPLETE, + BINDER_WORK_RETURN_ERROR, + BINDER_WORK_NODE, + BINDER_WORK_DEAD_BINDER, + BINDER_WORK_DEAD_BINDER_AND_CLEAR, + BINDER_WORK_CLEAR_DEATH_NOTIFICATION, + } type; +}; + +struct binder_error { + struct binder_work work; + uint32_t cmd; +}; + +/** + * struct binder_node - binder node bookkeeping + * @debug_id: unique ID for debugging + * (invariant after initialized) + * @lock: lock for node fields + * @work: worklist element for node work + * (protected by @proc->inner_lock) + * @rb_node: element for proc->nodes tree + * (protected by @proc->inner_lock) + * @dead_node: element for binder_dead_nodes list + * (protected by binder_dead_nodes_lock) + * @proc: binder_proc that owns this node + * (invariant after initialized) + * @refs: list of references on this node + * (protected by @lock) + * @internal_strong_refs: used to take strong references when + * initiating a transaction + * (protected by @proc->inner_lock if @proc + * and by @lock) + * @local_weak_refs: weak user refs from local process + * (protected by @proc->inner_lock if @proc + * and by @lock) + * @local_strong_refs: strong user refs from local process + * (protected by @proc->inner_lock if @proc + * and by @lock) + * @tmp_refs: temporary kernel refs + * (protected by @proc->inner_lock while @proc + * is valid, and by binder_dead_nodes_lock + * if @proc is NULL. During inc/dec and node release + * it is also protected by @lock to provide safety + * as the node dies and @proc becomes NULL) + * @ptr: userspace pointer for node + * (invariant, no lock needed) + * @cookie: userspace cookie for node + * (invariant, no lock needed) + * @has_strong_ref: userspace notified of strong ref + * (protected by @proc->inner_lock if @proc + * and by @lock) + * @pending_strong_ref: userspace has acked notification of strong ref + * (protected by @proc->inner_lock if @proc + * and by @lock) + * @has_weak_ref: userspace notified of weak ref + * (protected by @proc->inner_lock if @proc + * and by @lock) + * @pending_weak_ref: userspace has acked notification of weak ref + * (protected by @proc->inner_lock if @proc + * and by @lock) + * @has_async_transaction: async transaction to node in progress + * (protected by @lock) + * @sched_policy: minimum scheduling policy for node + * (invariant after initialized) + * @accept_fds: file descriptor operations supported for node + * (invariant after initialized) + * @min_priority: minimum scheduling priority + * (invariant after initialized) + * @inherit_rt: inherit RT scheduling policy from caller + * @txn_security_ctx: require sender's security context + * (invariant after initialized) + * @async_todo: list of async work items + * (protected by @proc->inner_lock) + * + * Bookkeeping structure for binder nodes. + */ +struct binder_node { + int debug_id; + spinlock_t lock; + struct binder_work work; + union { + struct rb_node rb_node; + struct hlist_node dead_node; + }; + struct binder_proc *proc; + struct hlist_head refs; + int internal_strong_refs; + int local_weak_refs; + int local_strong_refs; + int tmp_refs; + binder_uintptr_t ptr; + binder_uintptr_t cookie; + struct { + /* + * bitfield elements protected by + * proc inner_lock + */ + u8 has_strong_ref:1; + u8 pending_strong_ref:1; + u8 has_weak_ref:1; + u8 pending_weak_ref:1; + }; + struct { + /* + * invariant after initialization + */ + u8 sched_policy:2; + u8 inherit_rt:1; + u8 accept_fds:1; + u8 txn_security_ctx:1; + u8 min_priority; + }; + bool has_async_transaction; + struct list_head async_todo; +}; + +struct binder_ref_death { + /** + * @work: worklist element for death notifications + * (protected by inner_lock of the proc that + * this ref belongs to) + */ + struct binder_work work; + binder_uintptr_t cookie; +}; + +/** + * struct binder_ref_data - binder_ref counts and id + * @debug_id: unique ID for the ref + * @desc: unique userspace handle for ref + * @strong: strong ref count (debugging only if not locked) + * @weak: weak ref count (debugging only if not locked) + * + * Structure to hold ref count and ref id information. Since + * the actual ref can only be accessed with a lock, this structure + * is used to return information about the ref to callers of + * ref inc/dec functions. + */ +struct binder_ref_data { + int debug_id; + uint32_t desc; + int strong; + int weak; +}; + +/** + * struct binder_ref - struct to track references on nodes + * @data: binder_ref_data containing id, handle, and current refcounts + * @rb_node_desc: node for lookup by @data.desc in proc's rb_tree + * @rb_node_node: node for lookup by @node in proc's rb_tree + * @node_entry: list entry for node->refs list in target node + * (protected by @node->lock) + * @proc: binder_proc containing ref + * @node: binder_node of target node. When cleaning up a + * ref for deletion in binder_cleanup_ref, a non-NULL + * @node indicates the node must be freed + * @death: pointer to death notification (ref_death) if requested + * (protected by @node->lock) + * + * Structure to track references from procA to target node (on procB). This + * structure is unsafe to access without holding @proc->outer_lock. + */ +struct binder_ref { + /* Lookups needed: */ + /* node + proc => ref (transaction) */ + /* desc + proc => ref (transaction, inc/dec ref) */ + /* node => refs + procs (proc exit) */ + struct binder_ref_data data; + struct rb_node rb_node_desc; + struct rb_node rb_node_node; + struct hlist_node node_entry; + struct binder_proc *proc; + struct binder_node *node; + struct binder_ref_death *death; +}; + +/** + * struct binder_priority - scheduler policy and priority + * @sched_policy scheduler policy + * @prio [100..139] for SCHED_NORMAL, [0..99] for FIFO/RT + * + * The binder driver supports inheriting the following scheduler policies: + * SCHED_NORMAL + * SCHED_BATCH + * SCHED_FIFO + * SCHED_RR + */ +struct binder_priority { + unsigned int sched_policy; + int prio; +}; + +/** + * struct binder_proc - binder process bookkeeping + * @proc_node: element for binder_procs list + * @threads: rbtree of binder_threads in this proc + * (protected by @inner_lock) + * @nodes: rbtree of binder nodes associated with + * this proc ordered by node->ptr + * (protected by @inner_lock) + * @refs_by_desc: rbtree of refs ordered by ref->desc + * (protected by @outer_lock) + * @refs_by_node: rbtree of refs ordered by ref->node + * (protected by @outer_lock) + * @waiting_threads: threads currently waiting for proc work + * (protected by @inner_lock) + * @pid PID of group_leader of process + * (invariant after initialized) + * @tsk task_struct for group_leader of process + * (invariant after initialized) + * @deferred_work_node: element for binder_deferred_list + * (protected by binder_deferred_lock) + * @deferred_work: bitmap of deferred work to perform + * (protected by binder_deferred_lock) + * @is_dead: process is dead and awaiting free + * when outstanding transactions are cleaned up + * (protected by @inner_lock) + * @todo: list of work for this process + * (protected by @inner_lock) + * @stats: per-process binder statistics + * (atomics, no lock needed) + * @delivered_death: list of delivered death notification + * (protected by @inner_lock) + * @max_threads: cap on number of binder threads + * (protected by @inner_lock) + * @requested_threads: number of binder threads requested but not + * yet started. In current implementation, can + * only be 0 or 1. + * (protected by @inner_lock) + * @requested_threads_started: number binder threads started + * (protected by @inner_lock) + * @tmp_ref: temporary reference to indicate proc is in use + * (protected by @inner_lock) + * @default_priority: default scheduler priority + * (invariant after initialized) + * @debugfs_entry: debugfs node + * @alloc: binder allocator bookkeeping + * @context: binder_context for this proc + * (invariant after initialized) + * @inner_lock: can nest under outer_lock and/or node lock + * @outer_lock: no nesting under innor or node lock + * Lock order: 1) outer, 2) node, 3) inner + * @binderfs_entry: process-specific binderfs log file + * + * Bookkeeping structure for binder processes + */ +struct binder_proc { + struct hlist_node proc_node; + struct rb_root threads; + struct rb_root nodes; + struct rb_root refs_by_desc; + struct rb_root refs_by_node; + struct list_head waiting_threads; + int pid; + struct task_struct *tsk; + struct hlist_node deferred_work_node; + int deferred_work; + bool is_dead; + + struct list_head todo; + struct binder_stats stats; + struct list_head delivered_death; + int max_threads; + int requested_threads; + int requested_threads_started; + int tmp_ref; + struct binder_priority default_priority; + struct dentry *debugfs_entry; + struct binder_alloc alloc; + struct binder_context *context; + spinlock_t inner_lock; + spinlock_t outer_lock; + struct dentry *binderfs_entry; +}; + +/** + * struct binder_thread - binder thread bookkeeping + * @proc: binder process for this thread + * (invariant after initialization) + * @rb_node: element for proc->threads rbtree + * (protected by @proc->inner_lock) + * @waiting_thread_node: element for @proc->waiting_threads list + * (protected by @proc->inner_lock) + * @pid: PID for this thread + * (invariant after initialization) + * @looper: bitmap of looping state + * (only accessed by this thread) + * @looper_needs_return: looping thread needs to exit driver + * (no lock needed) + * @transaction_stack: stack of in-progress transactions for this thread + * (protected by @proc->inner_lock) + * @todo: list of work to do for this thread + * (protected by @proc->inner_lock) + * @process_todo: whether work in @todo should be processed + * (protected by @proc->inner_lock) + * @return_error: transaction errors reported by this thread + * (only accessed by this thread) + * @reply_error: transaction errors reported by target thread + * (protected by @proc->inner_lock) + * @wait: wait queue for thread work + * @stats: per-thread statistics + * (atomics, no lock needed) + * @tmp_ref: temporary reference to indicate thread is in use + * (atomic since @proc->inner_lock cannot + * always be acquired) + * @is_dead: thread is dead and awaiting free + * when outstanding transactions are cleaned up + * (protected by @proc->inner_lock) + * @task: struct task_struct for this thread + * + * Bookkeeping structure for binder threads. + */ +struct binder_thread { + struct binder_proc *proc; + struct rb_node rb_node; + struct list_head waiting_thread_node; + int pid; + int looper; /* only modified by this thread */ + bool looper_need_return; /* can be written by other thread */ + struct binder_transaction *transaction_stack; + struct list_head todo; + bool process_todo; + struct binder_error return_error; + struct binder_error reply_error; + wait_queue_head_t wait; + struct binder_stats stats; + atomic_t tmp_ref; + bool is_dead; + struct task_struct *task; +}; + +/** + * struct binder_txn_fd_fixup - transaction fd fixup list element + * @fixup_entry: list entry + * @file: struct file to be associated with new fd + * @offset: offset in buffer data to this fixup + * + * List element for fd fixups in a transaction. Since file + * descriptors need to be allocated in the context of the + * target process, we pass each fd to be processed in this + * struct. + */ +struct binder_txn_fd_fixup { + struct list_head fixup_entry; + struct file *file; + size_t offset; +}; + +struct binder_transaction { + int debug_id; + struct binder_work work; + struct binder_thread *from; + struct binder_transaction *from_parent; + struct binder_proc *to_proc; + struct binder_thread *to_thread; + struct binder_transaction *to_parent; + unsigned need_reply:1; + /* unsigned is_dead:1; */ /* not used at the moment */ + + struct binder_buffer *buffer; + unsigned int code; + unsigned int flags; + struct binder_priority priority; + struct binder_priority saved_priority; + bool set_priority_called; + kuid_t sender_euid; + struct list_head fd_fixups; + binder_uintptr_t security_ctx; + /** + * @lock: protects @from, @to_proc, and @to_thread + * + * @from, @to_proc, and @to_thread can be set to NULL + * during thread teardown + */ + spinlock_t lock; + ANDROID_VENDOR_DATA(1); +}; + +/** + * struct binder_object - union of flat binder object types + * @hdr: generic object header + * @fbo: binder object (nodes and refs) + * @fdo: file descriptor object + * @bbo: binder buffer pointer + * @fdao: file descriptor array + * + * Used for type-independent object copies + */ +struct binder_object { + union { + struct binder_object_header hdr; + struct flat_binder_object fbo; + struct binder_fd_object fdo; + struct binder_buffer_object bbo; + struct binder_fd_array_object fdao; + }; +}; + extern struct binder_transaction_log binder_transaction_log; extern struct binder_transaction_log binder_transaction_log_failed; #endif /* _LINUX_BINDER_INTERNAL_H */ diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig index 2e0019013eed..45966d4e5274 100644 --- a/drivers/hid/Kconfig +++ b/drivers/hid/Kconfig @@ -846,6 +846,24 @@ config HID_PLANTRONICS Say M here if you may ever plug in a Plantronics USB audio device. +config HID_PLAYSTATION + tristate "PlayStation HID Driver" + depends on HID + select CRC32 + select POWER_SUPPLY + help + Provides support for Sony PS5 controllers including support for + its special functionalities e.g. touchpad, lights and motion + sensors. + +config PLAYSTATION_FF + bool "PlayStation force feedback support" + depends on HID_PLAYSTATION + select INPUT_FF_MEMLESS + help + Say Y here if you would like to enable force feedback support for + PlayStation game controllers. + config HID_PRIMAX tristate "Primax non-fully HID-compliant devices" depends on HID diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile index db15bd7f0cd2..95880452016c 100644 --- a/drivers/hid/Makefile +++ b/drivers/hid/Makefile @@ -91,6 +91,7 @@ hid-picolcd-$(CONFIG_HID_PICOLCD_CIR) += hid-picolcd_cir.o hid-picolcd-$(CONFIG_DEBUG_FS) += hid-picolcd_debugfs.o obj-$(CONFIG_HID_PLANTRONICS) += hid-plantronics.o +obj-$(CONFIG_HID_PLAYSTATION) += hid-playstation.o obj-$(CONFIG_HID_PRIMAX) += hid-primax.o obj-$(CONFIG_HID_REDRAGON) += hid-redragon.o obj-$(CONFIG_HID_RETRODE) += hid-retrode.o diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h index 0c8ad0e853f6..ae0ae2811b5d 100644 --- a/drivers/hid/hid-ids.h +++ b/drivers/hid/hid-ids.h @@ -1066,6 +1066,7 @@ #define USB_DEVICE_ID_SONY_PS4_CONTROLLER 0x05c4 #define USB_DEVICE_ID_SONY_PS4_CONTROLLER_2 0x09cc #define USB_DEVICE_ID_SONY_PS4_CONTROLLER_DONGLE 0x0ba0 +#define USB_DEVICE_ID_SONY_PS5_CONTROLLER 0x0ce6 #define USB_DEVICE_ID_SONY_MOTION_CONTROLLER 0x03d5 #define USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER 0x042f #define USB_DEVICE_ID_SONY_BUZZ_CONTROLLER 0x0002 diff --git a/drivers/hid/hid-playstation.c b/drivers/hid/hid-playstation.c new file mode 100644 index 000000000000..1c9216436768 --- /dev/null +++ b/drivers/hid/hid-playstation.c @@ -0,0 +1,1351 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * HID driver for Sony DualSense(TM) controller. + * + * Copyright (c) 2020 Sony Interactive Entertainment + */ + +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "hid-ids.h" + +/* List of connected playstation devices. */ +static DEFINE_MUTEX(ps_devices_lock); +static LIST_HEAD(ps_devices_list); + +static DEFINE_IDA(ps_player_id_allocator); + +#define HID_PLAYSTATION_VERSION_PATCH 0x8000 + +/* Base class for playstation devices. */ +struct ps_device { + struct list_head list; + struct hid_device *hdev; + spinlock_t lock; + + uint32_t player_id; + + struct power_supply_desc battery_desc; + struct power_supply *battery; + uint8_t battery_capacity; + int battery_status; + + uint8_t mac_address[6]; /* Note: stored in little endian order. */ + uint32_t hw_version; + uint32_t fw_version; + + int (*parse_report)(struct ps_device *dev, struct hid_report *report, u8 *data, int size); +}; + +/* Calibration data for playstation motion sensors. */ +struct ps_calibration_data { + int abs_code; + short bias; + int sens_numer; + int sens_denom; +}; + +/* Seed values for DualShock4 / DualSense CRC32 for different report types. */ +#define PS_INPUT_CRC32_SEED 0xA1 +#define PS_OUTPUT_CRC32_SEED 0xA2 +#define PS_FEATURE_CRC32_SEED 0xA3 + +#define DS_INPUT_REPORT_USB 0x01 +#define DS_INPUT_REPORT_USB_SIZE 64 +#define DS_INPUT_REPORT_BT 0x31 +#define DS_INPUT_REPORT_BT_SIZE 78 +#define DS_OUTPUT_REPORT_USB 0x02 +#define DS_OUTPUT_REPORT_USB_SIZE 63 +#define DS_OUTPUT_REPORT_BT 0x31 +#define DS_OUTPUT_REPORT_BT_SIZE 78 + +#define DS_FEATURE_REPORT_CALIBRATION 0x05 +#define DS_FEATURE_REPORT_CALIBRATION_SIZE 41 +#define DS_FEATURE_REPORT_PAIRING_INFO 0x09 +#define DS_FEATURE_REPORT_PAIRING_INFO_SIZE 20 +#define DS_FEATURE_REPORT_FIRMWARE_INFO 0x20 +#define DS_FEATURE_REPORT_FIRMWARE_INFO_SIZE 64 + +/* Button masks for DualSense input report. */ +#define DS_BUTTONS0_HAT_SWITCH GENMASK(3, 0) +#define DS_BUTTONS0_SQUARE BIT(4) +#define DS_BUTTONS0_CROSS BIT(5) +#define DS_BUTTONS0_CIRCLE BIT(6) +#define DS_BUTTONS0_TRIANGLE BIT(7) +#define DS_BUTTONS1_L1 BIT(0) +#define DS_BUTTONS1_R1 BIT(1) +#define DS_BUTTONS1_L2 BIT(2) +#define DS_BUTTONS1_R2 BIT(3) +#define DS_BUTTONS1_CREATE BIT(4) +#define DS_BUTTONS1_OPTIONS BIT(5) +#define DS_BUTTONS1_L3 BIT(6) +#define DS_BUTTONS1_R3 BIT(7) +#define DS_BUTTONS2_PS_HOME BIT(0) +#define DS_BUTTONS2_TOUCHPAD BIT(1) +#define DS_BUTTONS2_MIC_MUTE BIT(2) + +/* Status field of DualSense input report. */ +#define DS_STATUS_BATTERY_CAPACITY GENMASK(3, 0) +#define DS_STATUS_CHARGING GENMASK(7, 4) +#define DS_STATUS_CHARGING_SHIFT 4 + +/* + * Status of a DualSense touch point contact. + * Contact IDs, with highest bit set are 'inactive' + * and any associated data is then invalid. + */ +#define DS_TOUCH_POINT_INACTIVE BIT(7) + + /* Magic value required in tag field of Bluetooth output report. */ +#define DS_OUTPUT_TAG 0x10 +/* Flags for DualSense output report. */ +#define DS_OUTPUT_VALID_FLAG0_COMPATIBLE_VIBRATION BIT(0) +#define DS_OUTPUT_VALID_FLAG0_HAPTICS_SELECT BIT(1) +#define DS_OUTPUT_VALID_FLAG1_MIC_MUTE_LED_CONTROL_ENABLE BIT(0) +#define DS_OUTPUT_VALID_FLAG1_POWER_SAVE_CONTROL_ENABLE BIT(1) +#define DS_OUTPUT_VALID_FLAG1_LIGHTBAR_CONTROL_ENABLE BIT(2) +#define DS_OUTPUT_VALID_FLAG1_RELEASE_LEDS BIT(3) +#define DS_OUTPUT_VALID_FLAG1_PLAYER_INDICATOR_CONTROL_ENABLE BIT(4) +#define DS_OUTPUT_VALID_FLAG2_LIGHTBAR_SETUP_CONTROL_ENABLE BIT(1) +#define DS_OUTPUT_POWER_SAVE_CONTROL_MIC_MUTE BIT(4) +#define DS_OUTPUT_LIGHTBAR_SETUP_LIGHT_OUT BIT(1) + +/* DualSense hardware limits */ +#define DS_ACC_RES_PER_G 8192 +#define DS_ACC_RANGE (4*DS_ACC_RES_PER_G) +#define DS_GYRO_RES_PER_DEG_S 1024 +#define DS_GYRO_RANGE (2048*DS_GYRO_RES_PER_DEG_S) +#define DS_TOUCHPAD_WIDTH 1920 +#define DS_TOUCHPAD_HEIGHT 1080 + +struct dualsense { + struct ps_device base; + struct input_dev *gamepad; + struct input_dev *sensors; + struct input_dev *touchpad; + + /* Calibration data for accelerometer and gyroscope. */ + struct ps_calibration_data accel_calib_data[3]; + struct ps_calibration_data gyro_calib_data[3]; + + /* Timestamp for sensor data */ + bool sensor_timestamp_initialized; + uint32_t prev_sensor_timestamp; + uint32_t sensor_timestamp_us; + + /* Compatible rumble state */ + bool update_rumble; + uint8_t motor_left; + uint8_t motor_right; + + /* RGB lightbar */ + bool update_lightbar; + uint8_t lightbar_red; + uint8_t lightbar_green; + uint8_t lightbar_blue; + + /* Microphone */ + bool update_mic_mute; + bool mic_muted; + bool last_btn_mic_state; + + /* Player leds */ + bool update_player_leds; + uint8_t player_leds_state; + struct led_classdev player_leds[5]; + + struct work_struct output_worker; + void *output_report_dmabuf; + uint8_t output_seq; /* Sequence number for output report. */ +}; + +struct dualsense_touch_point { + uint8_t contact; + uint8_t x_lo; + uint8_t x_hi:4, y_lo:4; + uint8_t y_hi; +} __packed; +static_assert(sizeof(struct dualsense_touch_point) == 4); + +/* Main DualSense input report excluding any BT/USB specific headers. */ +struct dualsense_input_report { + uint8_t x, y; + uint8_t rx, ry; + uint8_t z, rz; + uint8_t seq_number; + uint8_t buttons[4]; + uint8_t reserved[4]; + + /* Motion sensors */ + __le16 gyro[3]; /* x, y, z */ + __le16 accel[3]; /* x, y, z */ + __le32 sensor_timestamp; + uint8_t reserved2; + + /* Touchpad */ + struct dualsense_touch_point points[2]; + + uint8_t reserved3[12]; + uint8_t status; + uint8_t reserved4[10]; +} __packed; +/* Common input report size shared equals the size of the USB report minus 1 byte for ReportID. */ +static_assert(sizeof(struct dualsense_input_report) == DS_INPUT_REPORT_USB_SIZE - 1); + +/* Common data between DualSense BT/USB main output report. */ +struct dualsense_output_report_common { + uint8_t valid_flag0; + uint8_t valid_flag1; + + /* For DualShock 4 compatibility mode. */ + uint8_t motor_right; + uint8_t motor_left; + + /* Audio controls */ + uint8_t reserved[4]; + uint8_t mute_button_led; + + uint8_t power_save_control; + uint8_t reserved2[28]; + + /* LEDs and lightbar */ + uint8_t valid_flag2; + uint8_t reserved3[2]; + uint8_t lightbar_setup; + uint8_t led_brightness; + uint8_t player_leds; + uint8_t lightbar_red; + uint8_t lightbar_green; + uint8_t lightbar_blue; +} __packed; +static_assert(sizeof(struct dualsense_output_report_common) == 47); + +struct dualsense_output_report_bt { + uint8_t report_id; /* 0x31 */ + uint8_t seq_tag; + uint8_t tag; + struct dualsense_output_report_common common; + uint8_t reserved[24]; + __le32 crc32; +} __packed; +static_assert(sizeof(struct dualsense_output_report_bt) == DS_OUTPUT_REPORT_BT_SIZE); + +struct dualsense_output_report_usb { + uint8_t report_id; /* 0x02 */ + struct dualsense_output_report_common common; + uint8_t reserved[15]; +} __packed; +static_assert(sizeof(struct dualsense_output_report_usb) == DS_OUTPUT_REPORT_USB_SIZE); + +/* + * The DualSense has a main output report used to control most features. It is + * largely the same between Bluetooth and USB except for different headers and CRC. + * This structure hide the differences between the two to simplify sending output reports. + */ +struct dualsense_output_report { + uint8_t *data; /* Start of data */ + uint8_t len; /* Size of output report */ + + /* Points to Bluetooth data payload in case for a Bluetooth report else NULL. */ + struct dualsense_output_report_bt *bt; + /* Points to USB data payload in case for a USB report else NULL. */ + struct dualsense_output_report_usb *usb; + /* Points to common section of report, so past any headers. */ + struct dualsense_output_report_common *common; +}; + +/* + * Common gamepad buttons across DualShock 3 / 4 and DualSense. + * Note: for device with a touchpad, touchpad button is not included + * as it will be part of the touchpad device. + */ +static const int ps_gamepad_buttons[] = { + BTN_WEST, /* Square */ + BTN_NORTH, /* Triangle */ + BTN_EAST, /* Circle */ + BTN_SOUTH, /* Cross */ + BTN_TL, /* L1 */ + BTN_TR, /* R1 */ + BTN_TL2, /* L2 */ + BTN_TR2, /* R2 */ + BTN_SELECT, /* Create (PS5) / Share (PS4) */ + BTN_START, /* Option */ + BTN_THUMBL, /* L3 */ + BTN_THUMBR, /* R3 */ + BTN_MODE, /* PS Home */ +}; + +static const struct {int x; int y; } ps_gamepad_hat_mapping[] = { + {0, -1}, {1, -1}, {1, 0}, {1, 1}, {0, 1}, {-1, 1}, {-1, 0}, {-1, -1}, + {0, 0}, +}; + +/* + * Add a new ps_device to ps_devices if it doesn't exist. + * Return error on duplicate device, which can happen if the same + * device is connected using both Bluetooth and USB. + */ +static int ps_devices_list_add(struct ps_device *dev) +{ + struct ps_device *entry; + + mutex_lock(&ps_devices_lock); + list_for_each_entry(entry, &ps_devices_list, list) { + if (!memcmp(entry->mac_address, dev->mac_address, sizeof(dev->mac_address))) { + hid_err(dev->hdev, "Duplicate device found for MAC address %pMR.\n", + dev->mac_address); + mutex_unlock(&ps_devices_lock); + return -EEXIST; + } + } + + list_add_tail(&dev->list, &ps_devices_list); + mutex_unlock(&ps_devices_lock); + return 0; +} + +static int ps_devices_list_remove(struct ps_device *dev) +{ + mutex_lock(&ps_devices_lock); + list_del(&dev->list); + mutex_unlock(&ps_devices_lock); + return 0; +} + +static int ps_device_set_player_id(struct ps_device *dev) +{ + int ret = ida_alloc(&ps_player_id_allocator, GFP_KERNEL); + + if (ret < 0) + return ret; + + dev->player_id = ret; + return 0; +} + +static void ps_device_release_player_id(struct ps_device *dev) +{ + ida_free(&ps_player_id_allocator, dev->player_id); + + dev->player_id = U32_MAX; +} + +static struct input_dev *ps_allocate_input_dev(struct hid_device *hdev, const char *name_suffix) +{ + struct input_dev *input_dev; + + input_dev = devm_input_allocate_device(&hdev->dev); + if (!input_dev) + return ERR_PTR(-ENOMEM); + + input_dev->id.bustype = hdev->bus; + input_dev->id.vendor = hdev->vendor; + input_dev->id.product = hdev->product; + input_dev->id.version = hdev->version; + input_dev->uniq = hdev->uniq; + + if (name_suffix) { + input_dev->name = devm_kasprintf(&hdev->dev, GFP_KERNEL, "%s %s", hdev->name, + name_suffix); + if (!input_dev->name) + return ERR_PTR(-ENOMEM); + } else { + input_dev->name = hdev->name; + } + + input_set_drvdata(input_dev, hdev); + + return input_dev; +} + +static enum power_supply_property ps_power_supply_props[] = { + POWER_SUPPLY_PROP_STATUS, + POWER_SUPPLY_PROP_PRESENT, + POWER_SUPPLY_PROP_CAPACITY, + POWER_SUPPLY_PROP_SCOPE, +}; + +static int ps_battery_get_property(struct power_supply *psy, + enum power_supply_property psp, + union power_supply_propval *val) +{ + struct ps_device *dev = power_supply_get_drvdata(psy); + uint8_t battery_capacity; + int battery_status; + unsigned long flags; + int ret = 0; + + spin_lock_irqsave(&dev->lock, flags); + battery_capacity = dev->battery_capacity; + battery_status = dev->battery_status; + spin_unlock_irqrestore(&dev->lock, flags); + + switch (psp) { + case POWER_SUPPLY_PROP_STATUS: + val->intval = battery_status; + break; + case POWER_SUPPLY_PROP_PRESENT: + val->intval = 1; + break; + case POWER_SUPPLY_PROP_CAPACITY: + val->intval = battery_capacity; + break; + case POWER_SUPPLY_PROP_SCOPE: + val->intval = POWER_SUPPLY_SCOPE_DEVICE; + break; + default: + ret = -EINVAL; + break; + } + + return ret; +} + +static int ps_device_register_battery(struct ps_device *dev) +{ + struct power_supply *battery; + struct power_supply_config battery_cfg = { .drv_data = dev }; + int ret; + + dev->battery_desc.type = POWER_SUPPLY_TYPE_BATTERY; + dev->battery_desc.properties = ps_power_supply_props; + dev->battery_desc.num_properties = ARRAY_SIZE(ps_power_supply_props); + dev->battery_desc.get_property = ps_battery_get_property; + dev->battery_desc.name = devm_kasprintf(&dev->hdev->dev, GFP_KERNEL, + "ps-controller-battery-%pMR", dev->mac_address); + if (!dev->battery_desc.name) + return -ENOMEM; + + battery = devm_power_supply_register(&dev->hdev->dev, &dev->battery_desc, &battery_cfg); + if (IS_ERR(battery)) { + ret = PTR_ERR(battery); + hid_err(dev->hdev, "Unable to register battery device: %d\n", ret); + return ret; + } + dev->battery = battery; + + ret = power_supply_powers(dev->battery, &dev->hdev->dev); + if (ret) { + hid_err(dev->hdev, "Unable to activate battery device: %d\n", ret); + return ret; + } + + return 0; +} + +/* Compute crc32 of HID data and compare against expected CRC. */ +static bool ps_check_crc32(uint8_t seed, uint8_t *data, size_t len, uint32_t report_crc) +{ + uint32_t crc; + + crc = crc32_le(0xFFFFFFFF, &seed, 1); + crc = ~crc32_le(crc, data, len); + + return crc == report_crc; +} + +static struct input_dev *ps_gamepad_create(struct hid_device *hdev, + int (*play_effect)(struct input_dev *, void *, struct ff_effect *)) +{ + struct input_dev *gamepad; + unsigned int i; + int ret; + + gamepad = ps_allocate_input_dev(hdev, NULL); + if (IS_ERR(gamepad)) + return ERR_CAST(gamepad); + + input_set_abs_params(gamepad, ABS_X, 0, 255, 0, 0); + input_set_abs_params(gamepad, ABS_Y, 0, 255, 0, 0); + input_set_abs_params(gamepad, ABS_Z, 0, 255, 0, 0); + input_set_abs_params(gamepad, ABS_RX, 0, 255, 0, 0); + input_set_abs_params(gamepad, ABS_RY, 0, 255, 0, 0); + input_set_abs_params(gamepad, ABS_RZ, 0, 255, 0, 0); + + input_set_abs_params(gamepad, ABS_HAT0X, -1, 1, 0, 0); + input_set_abs_params(gamepad, ABS_HAT0Y, -1, 1, 0, 0); + + for (i = 0; i < ARRAY_SIZE(ps_gamepad_buttons); i++) + input_set_capability(gamepad, EV_KEY, ps_gamepad_buttons[i]); + +#if IS_ENABLED(CONFIG_PLAYSTATION_FF) + if (play_effect) { + input_set_capability(gamepad, EV_FF, FF_RUMBLE); + input_ff_create_memless(gamepad, NULL, play_effect); + } +#endif + + ret = input_register_device(gamepad); + if (ret) + return ERR_PTR(ret); + + return gamepad; +} + +static int ps_get_report(struct hid_device *hdev, uint8_t report_id, uint8_t *buf, size_t size) +{ + int ret; + + ret = hid_hw_raw_request(hdev, report_id, buf, size, HID_FEATURE_REPORT, + HID_REQ_GET_REPORT); + if (ret < 0) { + hid_err(hdev, "Failed to retrieve feature with reportID %d: %d\n", report_id, ret); + return ret; + } + + if (ret != size) { + hid_err(hdev, "Invalid byte count transferred, expected %zu got %d\n", size, ret); + return -EINVAL; + } + + if (buf[0] != report_id) { + hid_err(hdev, "Invalid reportID received, expected %d got %d\n", report_id, buf[0]); + return -EINVAL; + } + + if (hdev->bus == BUS_BLUETOOTH) { + /* Last 4 bytes contains crc32. */ + uint8_t crc_offset = size - 4; + uint32_t report_crc = get_unaligned_le32(&buf[crc_offset]); + + if (!ps_check_crc32(PS_FEATURE_CRC32_SEED, buf, crc_offset, report_crc)) { + hid_err(hdev, "CRC check failed for reportID=%d\n", report_id); + return -EILSEQ; + } + } + + return 0; +} + +static struct input_dev *ps_sensors_create(struct hid_device *hdev, int accel_range, int accel_res, + int gyro_range, int gyro_res) +{ + struct input_dev *sensors; + int ret; + + sensors = ps_allocate_input_dev(hdev, "Motion Sensors"); + if (IS_ERR(sensors)) + return ERR_CAST(sensors); + + __set_bit(INPUT_PROP_ACCELEROMETER, sensors->propbit); + __set_bit(EV_MSC, sensors->evbit); + __set_bit(MSC_TIMESTAMP, sensors->mscbit); + + /* Accelerometer */ + input_set_abs_params(sensors, ABS_X, -accel_range, accel_range, 16, 0); + input_set_abs_params(sensors, ABS_Y, -accel_range, accel_range, 16, 0); + input_set_abs_params(sensors, ABS_Z, -accel_range, accel_range, 16, 0); + input_abs_set_res(sensors, ABS_X, accel_res); + input_abs_set_res(sensors, ABS_Y, accel_res); + input_abs_set_res(sensors, ABS_Z, accel_res); + + /* Gyroscope */ + input_set_abs_params(sensors, ABS_RX, -gyro_range, gyro_range, 16, 0); + input_set_abs_params(sensors, ABS_RY, -gyro_range, gyro_range, 16, 0); + input_set_abs_params(sensors, ABS_RZ, -gyro_range, gyro_range, 16, 0); + input_abs_set_res(sensors, ABS_RX, gyro_res); + input_abs_set_res(sensors, ABS_RY, gyro_res); + input_abs_set_res(sensors, ABS_RZ, gyro_res); + + ret = input_register_device(sensors); + if (ret) + return ERR_PTR(ret); + + return sensors; +} + +static struct input_dev *ps_touchpad_create(struct hid_device *hdev, int width, int height, + unsigned int num_contacts) +{ + struct input_dev *touchpad; + int ret; + + touchpad = ps_allocate_input_dev(hdev, "Touchpad"); + if (IS_ERR(touchpad)) + return ERR_CAST(touchpad); + + /* Map button underneath touchpad to BTN_LEFT. */ + input_set_capability(touchpad, EV_KEY, BTN_LEFT); + __set_bit(INPUT_PROP_BUTTONPAD, touchpad->propbit); + + input_set_abs_params(touchpad, ABS_MT_POSITION_X, 0, width - 1, 0, 0); + input_set_abs_params(touchpad, ABS_MT_POSITION_Y, 0, height - 1, 0, 0); + + ret = input_mt_init_slots(touchpad, num_contacts, INPUT_MT_POINTER); + if (ret) + return ERR_PTR(ret); + + ret = input_register_device(touchpad); + if (ret) + return ERR_PTR(ret); + + return touchpad; +} + +static ssize_t firmware_version_show(struct device *dev, + struct device_attribute + *attr, char *buf) +{ + struct hid_device *hdev = to_hid_device(dev); + struct ps_device *ps_dev = hid_get_drvdata(hdev); + + return snprintf(buf, PAGE_SIZE, "0x%08x\n", ps_dev->fw_version); +} + +static DEVICE_ATTR_RO(firmware_version); + +static ssize_t hardware_version_show(struct device *dev, + struct device_attribute + *attr, char *buf) +{ + struct hid_device *hdev = to_hid_device(dev); + struct ps_device *ps_dev = hid_get_drvdata(hdev); + + return snprintf(buf, PAGE_SIZE, "0x%08x\n", ps_dev->hw_version); +} + +static DEVICE_ATTR_RO(hardware_version); + +static struct attribute *ps_device_attributes[] = { + &dev_attr_firmware_version.attr, + &dev_attr_hardware_version.attr, + NULL +}; + +static const struct attribute_group ps_device_attribute_group = { + .attrs = ps_device_attributes, +}; + +static int dualsense_get_calibration_data(struct dualsense *ds) +{ + short gyro_pitch_bias, gyro_pitch_plus, gyro_pitch_minus; + short gyro_yaw_bias, gyro_yaw_plus, gyro_yaw_minus; + short gyro_roll_bias, gyro_roll_plus, gyro_roll_minus; + short gyro_speed_plus, gyro_speed_minus; + short acc_x_plus, acc_x_minus; + short acc_y_plus, acc_y_minus; + short acc_z_plus, acc_z_minus; + int speed_2x; + int range_2g; + int ret = 0; + uint8_t *buf; + + buf = kzalloc(DS_FEATURE_REPORT_CALIBRATION_SIZE, GFP_KERNEL); + if (!buf) + return -ENOMEM; + + ret = ps_get_report(ds->base.hdev, DS_FEATURE_REPORT_CALIBRATION, buf, + DS_FEATURE_REPORT_CALIBRATION_SIZE); + if (ret) { + hid_err(ds->base.hdev, "Failed to retrieve DualSense calibration info: %d\n", ret); + goto err_free; + } + + gyro_pitch_bias = get_unaligned_le16(&buf[1]); + gyro_yaw_bias = get_unaligned_le16(&buf[3]); + gyro_roll_bias = get_unaligned_le16(&buf[5]); + gyro_pitch_plus = get_unaligned_le16(&buf[7]); + gyro_pitch_minus = get_unaligned_le16(&buf[9]); + gyro_yaw_plus = get_unaligned_le16(&buf[11]); + gyro_yaw_minus = get_unaligned_le16(&buf[13]); + gyro_roll_plus = get_unaligned_le16(&buf[15]); + gyro_roll_minus = get_unaligned_le16(&buf[17]); + gyro_speed_plus = get_unaligned_le16(&buf[19]); + gyro_speed_minus = get_unaligned_le16(&buf[21]); + acc_x_plus = get_unaligned_le16(&buf[23]); + acc_x_minus = get_unaligned_le16(&buf[25]); + acc_y_plus = get_unaligned_le16(&buf[27]); + acc_y_minus = get_unaligned_le16(&buf[29]); + acc_z_plus = get_unaligned_le16(&buf[31]); + acc_z_minus = get_unaligned_le16(&buf[33]); + + /* + * Set gyroscope calibration and normalization parameters. + * Data values will be normalized to 1/DS_GYRO_RES_PER_DEG_S degree/s. + */ + speed_2x = (gyro_speed_plus + gyro_speed_minus); + ds->gyro_calib_data[0].abs_code = ABS_RX; + ds->gyro_calib_data[0].bias = gyro_pitch_bias; + ds->gyro_calib_data[0].sens_numer = speed_2x*DS_GYRO_RES_PER_DEG_S; + ds->gyro_calib_data[0].sens_denom = gyro_pitch_plus - gyro_pitch_minus; + + ds->gyro_calib_data[1].abs_code = ABS_RY; + ds->gyro_calib_data[1].bias = gyro_yaw_bias; + ds->gyro_calib_data[1].sens_numer = speed_2x*DS_GYRO_RES_PER_DEG_S; + ds->gyro_calib_data[1].sens_denom = gyro_yaw_plus - gyro_yaw_minus; + + ds->gyro_calib_data[2].abs_code = ABS_RZ; + ds->gyro_calib_data[2].bias = gyro_roll_bias; + ds->gyro_calib_data[2].sens_numer = speed_2x*DS_GYRO_RES_PER_DEG_S; + ds->gyro_calib_data[2].sens_denom = gyro_roll_plus - gyro_roll_minus; + + /* + * Set accelerometer calibration and normalization parameters. + * Data values will be normalized to 1/DS_ACC_RES_PER_G g. + */ + range_2g = acc_x_plus - acc_x_minus; + ds->accel_calib_data[0].abs_code = ABS_X; + ds->accel_calib_data[0].bias = acc_x_plus - range_2g / 2; + ds->accel_calib_data[0].sens_numer = 2*DS_ACC_RES_PER_G; + ds->accel_calib_data[0].sens_denom = range_2g; + + range_2g = acc_y_plus - acc_y_minus; + ds->accel_calib_data[1].abs_code = ABS_Y; + ds->accel_calib_data[1].bias = acc_y_plus - range_2g / 2; + ds->accel_calib_data[1].sens_numer = 2*DS_ACC_RES_PER_G; + ds->accel_calib_data[1].sens_denom = range_2g; + + range_2g = acc_z_plus - acc_z_minus; + ds->accel_calib_data[2].abs_code = ABS_Z; + ds->accel_calib_data[2].bias = acc_z_plus - range_2g / 2; + ds->accel_calib_data[2].sens_numer = 2*DS_ACC_RES_PER_G; + ds->accel_calib_data[2].sens_denom = range_2g; + +err_free: + kfree(buf); + return ret; +} + +static int dualsense_get_firmware_info(struct dualsense *ds) +{ + uint8_t *buf; + int ret; + + buf = kzalloc(DS_FEATURE_REPORT_FIRMWARE_INFO_SIZE, GFP_KERNEL); + if (!buf) + return -ENOMEM; + + ret = ps_get_report(ds->base.hdev, DS_FEATURE_REPORT_FIRMWARE_INFO, buf, + DS_FEATURE_REPORT_FIRMWARE_INFO_SIZE); + if (ret) { + hid_err(ds->base.hdev, "Failed to retrieve DualSense firmware info: %d\n", ret); + goto err_free; + } + + ds->base.hw_version = get_unaligned_le32(&buf[24]); + ds->base.fw_version = get_unaligned_le32(&buf[28]); + +err_free: + kfree(buf); + return ret; +} + +static int dualsense_get_mac_address(struct dualsense *ds) +{ + uint8_t *buf; + int ret = 0; + + buf = kzalloc(DS_FEATURE_REPORT_PAIRING_INFO_SIZE, GFP_KERNEL); + if (!buf) + return -ENOMEM; + + ret = ps_get_report(ds->base.hdev, DS_FEATURE_REPORT_PAIRING_INFO, buf, + DS_FEATURE_REPORT_PAIRING_INFO_SIZE); + if (ret) { + hid_err(ds->base.hdev, "Failed to retrieve DualSense pairing info: %d\n", ret); + goto err_free; + } + + memcpy(ds->base.mac_address, &buf[1], sizeof(ds->base.mac_address)); + +err_free: + kfree(buf); + return ret; +} + +static void dualsense_init_output_report(struct dualsense *ds, struct dualsense_output_report *rp, + void *buf) +{ + struct hid_device *hdev = ds->base.hdev; + + if (hdev->bus == BUS_BLUETOOTH) { + struct dualsense_output_report_bt *bt = buf; + + memset(bt, 0, sizeof(*bt)); + bt->report_id = DS_OUTPUT_REPORT_BT; + bt->tag = DS_OUTPUT_TAG; /* Tag must be set. Exact meaning is unclear. */ + + /* + * Highest 4-bit is a sequence number, which needs to be increased + * every report. Lowest 4-bit is tag and can be zero for now. + */ + bt->seq_tag = (ds->output_seq << 4) | 0x0; + if (++ds->output_seq == 16) + ds->output_seq = 0; + + rp->data = buf; + rp->len = sizeof(*bt); + rp->bt = bt; + rp->usb = NULL; + rp->common = &bt->common; + } else { /* USB */ + struct dualsense_output_report_usb *usb = buf; + + memset(usb, 0, sizeof(*usb)); + usb->report_id = DS_OUTPUT_REPORT_USB; + + rp->data = buf; + rp->len = sizeof(*usb); + rp->bt = NULL; + rp->usb = usb; + rp->common = &usb->common; + } +} + +/* + * Helper function to send DualSense output reports. Applies a CRC at the end of a report + * for Bluetooth reports. + */ +static void dualsense_send_output_report(struct dualsense *ds, + struct dualsense_output_report *report) +{ + struct hid_device *hdev = ds->base.hdev; + + /* Bluetooth packets need to be signed with a CRC in the last 4 bytes. */ + if (report->bt) { + uint32_t crc; + uint8_t seed = PS_OUTPUT_CRC32_SEED; + + crc = crc32_le(0xFFFFFFFF, &seed, 1); + crc = ~crc32_le(crc, report->data, report->len - 4); + + report->bt->crc32 = cpu_to_le32(crc); + } + + hid_hw_output_report(hdev, report->data, report->len); +} + +static void dualsense_output_worker(struct work_struct *work) +{ + struct dualsense *ds = container_of(work, struct dualsense, output_worker); + struct dualsense_output_report report; + struct dualsense_output_report_common *common; + unsigned long flags; + + dualsense_init_output_report(ds, &report, ds->output_report_dmabuf); + common = report.common; + + spin_lock_irqsave(&ds->base.lock, flags); + + if (ds->update_rumble) { + /* Select classic rumble style haptics and enable it. */ + common->valid_flag0 |= DS_OUTPUT_VALID_FLAG0_HAPTICS_SELECT; + common->valid_flag0 |= DS_OUTPUT_VALID_FLAG0_COMPATIBLE_VIBRATION; + common->motor_left = ds->motor_left; + common->motor_right = ds->motor_right; + ds->update_rumble = false; + } + + if (ds->update_lightbar) { + common->valid_flag1 |= DS_OUTPUT_VALID_FLAG1_LIGHTBAR_CONTROL_ENABLE; + common->lightbar_red = ds->lightbar_red; + common->lightbar_green = ds->lightbar_green; + common->lightbar_blue = ds->lightbar_blue; + + ds->update_lightbar = false; + } + + if (ds->update_player_leds) { + common->valid_flag1 |= DS_OUTPUT_VALID_FLAG1_PLAYER_INDICATOR_CONTROL_ENABLE; + common->player_leds = ds->player_leds_state; + + ds->update_player_leds = false; + } + + if (ds->update_mic_mute) { + common->valid_flag1 |= DS_OUTPUT_VALID_FLAG1_MIC_MUTE_LED_CONTROL_ENABLE; + common->mute_button_led = ds->mic_muted; + + if (ds->mic_muted) { + /* Disable microphone */ + common->valid_flag1 |= DS_OUTPUT_VALID_FLAG1_POWER_SAVE_CONTROL_ENABLE; + common->power_save_control |= DS_OUTPUT_POWER_SAVE_CONTROL_MIC_MUTE; + } else { + /* Enable microphone */ + common->valid_flag1 |= DS_OUTPUT_VALID_FLAG1_POWER_SAVE_CONTROL_ENABLE; + common->power_save_control &= ~DS_OUTPUT_POWER_SAVE_CONTROL_MIC_MUTE; + } + + ds->update_mic_mute = false; + } + + spin_unlock_irqrestore(&ds->base.lock, flags); + + dualsense_send_output_report(ds, &report); +} + +static int dualsense_parse_report(struct ps_device *ps_dev, struct hid_report *report, + u8 *data, int size) +{ + struct hid_device *hdev = ps_dev->hdev; + struct dualsense *ds = container_of(ps_dev, struct dualsense, base); + struct dualsense_input_report *ds_report; + uint8_t battery_data, battery_capacity, charging_status, value; + int battery_status; + uint32_t sensor_timestamp; + bool btn_mic_state; + unsigned long flags; + int i; + + /* + * DualSense in USB uses the full HID report for reportID 1, but + * Bluetooth uses a minimal HID report for reportID 1 and reports + * the full report using reportID 49. + */ + if (hdev->bus == BUS_USB && report->id == DS_INPUT_REPORT_USB && + size == DS_INPUT_REPORT_USB_SIZE) { + ds_report = (struct dualsense_input_report *)&data[1]; + } else if (hdev->bus == BUS_BLUETOOTH && report->id == DS_INPUT_REPORT_BT && + size == DS_INPUT_REPORT_BT_SIZE) { + /* Last 4 bytes of input report contain crc32 */ + uint32_t report_crc = get_unaligned_le32(&data[size - 4]); + + if (!ps_check_crc32(PS_INPUT_CRC32_SEED, data, size - 4, report_crc)) { + hid_err(hdev, "DualSense input CRC's check failed\n"); + return -EILSEQ; + } + + ds_report = (struct dualsense_input_report *)&data[2]; + } else { + hid_err(hdev, "Unhandled reportID=%d\n", report->id); + return -1; + } + + input_report_abs(ds->gamepad, ABS_X, ds_report->x); + input_report_abs(ds->gamepad, ABS_Y, ds_report->y); + input_report_abs(ds->gamepad, ABS_RX, ds_report->rx); + input_report_abs(ds->gamepad, ABS_RY, ds_report->ry); + input_report_abs(ds->gamepad, ABS_Z, ds_report->z); + input_report_abs(ds->gamepad, ABS_RZ, ds_report->rz); + + value = ds_report->buttons[0] & DS_BUTTONS0_HAT_SWITCH; + if (value >= ARRAY_SIZE(ps_gamepad_hat_mapping)) + value = 8; /* center */ + input_report_abs(ds->gamepad, ABS_HAT0X, ps_gamepad_hat_mapping[value].x); + input_report_abs(ds->gamepad, ABS_HAT0Y, ps_gamepad_hat_mapping[value].y); + + input_report_key(ds->gamepad, BTN_WEST, ds_report->buttons[0] & DS_BUTTONS0_SQUARE); + input_report_key(ds->gamepad, BTN_SOUTH, ds_report->buttons[0] & DS_BUTTONS0_CROSS); + input_report_key(ds->gamepad, BTN_EAST, ds_report->buttons[0] & DS_BUTTONS0_CIRCLE); + input_report_key(ds->gamepad, BTN_NORTH, ds_report->buttons[0] & DS_BUTTONS0_TRIANGLE); + input_report_key(ds->gamepad, BTN_TL, ds_report->buttons[1] & DS_BUTTONS1_L1); + input_report_key(ds->gamepad, BTN_TR, ds_report->buttons[1] & DS_BUTTONS1_R1); + input_report_key(ds->gamepad, BTN_TL2, ds_report->buttons[1] & DS_BUTTONS1_L2); + input_report_key(ds->gamepad, BTN_TR2, ds_report->buttons[1] & DS_BUTTONS1_R2); + input_report_key(ds->gamepad, BTN_SELECT, ds_report->buttons[1] & DS_BUTTONS1_CREATE); + input_report_key(ds->gamepad, BTN_START, ds_report->buttons[1] & DS_BUTTONS1_OPTIONS); + input_report_key(ds->gamepad, BTN_THUMBL, ds_report->buttons[1] & DS_BUTTONS1_L3); + input_report_key(ds->gamepad, BTN_THUMBR, ds_report->buttons[1] & DS_BUTTONS1_R3); + input_report_key(ds->gamepad, BTN_MODE, ds_report->buttons[2] & DS_BUTTONS2_PS_HOME); + input_sync(ds->gamepad); + + /* + * The DualSense has an internal microphone, which can be muted through a mute button + * on the device. The driver is expected to read the button state and program the device + * to mute/unmute audio at the hardware level. + */ + btn_mic_state = !!(ds_report->buttons[2] & DS_BUTTONS2_MIC_MUTE); + if (btn_mic_state && !ds->last_btn_mic_state) { + spin_lock_irqsave(&ps_dev->lock, flags); + ds->update_mic_mute = true; + ds->mic_muted = !ds->mic_muted; /* toggle */ + spin_unlock_irqrestore(&ps_dev->lock, flags); + + /* Schedule updating of microphone state at hardware level. */ + schedule_work(&ds->output_worker); + } + ds->last_btn_mic_state = btn_mic_state; + + /* Parse and calibrate gyroscope data. */ + for (i = 0; i < ARRAY_SIZE(ds_report->gyro); i++) { + int raw_data = (short)le16_to_cpu(ds_report->gyro[i]); + int calib_data = mult_frac(ds->gyro_calib_data[i].sens_numer, + raw_data - ds->gyro_calib_data[i].bias, + ds->gyro_calib_data[i].sens_denom); + + input_report_abs(ds->sensors, ds->gyro_calib_data[i].abs_code, calib_data); + } + + /* Parse and calibrate accelerometer data. */ + for (i = 0; i < ARRAY_SIZE(ds_report->accel); i++) { + int raw_data = (short)le16_to_cpu(ds_report->accel[i]); + int calib_data = mult_frac(ds->accel_calib_data[i].sens_numer, + raw_data - ds->accel_calib_data[i].bias, + ds->accel_calib_data[i].sens_denom); + + input_report_abs(ds->sensors, ds->accel_calib_data[i].abs_code, calib_data); + } + + /* Convert timestamp (in 0.33us unit) to timestamp_us */ + sensor_timestamp = le32_to_cpu(ds_report->sensor_timestamp); + if (!ds->sensor_timestamp_initialized) { + ds->sensor_timestamp_us = DIV_ROUND_CLOSEST(sensor_timestamp, 3); + ds->sensor_timestamp_initialized = true; + } else { + uint32_t delta; + + if (ds->prev_sensor_timestamp > sensor_timestamp) + delta = (U32_MAX - ds->prev_sensor_timestamp + sensor_timestamp + 1); + else + delta = sensor_timestamp - ds->prev_sensor_timestamp; + ds->sensor_timestamp_us += DIV_ROUND_CLOSEST(delta, 3); + } + ds->prev_sensor_timestamp = sensor_timestamp; + input_event(ds->sensors, EV_MSC, MSC_TIMESTAMP, ds->sensor_timestamp_us); + input_sync(ds->sensors); + + for (i = 0; i < ARRAY_SIZE(ds_report->points); i++) { + struct dualsense_touch_point *point = &ds_report->points[i]; + bool active = (point->contact & DS_TOUCH_POINT_INACTIVE) ? false : true; + + input_mt_slot(ds->touchpad, i); + input_mt_report_slot_state(ds->touchpad, MT_TOOL_FINGER, active); + + if (active) { + int x = (point->x_hi << 8) | point->x_lo; + int y = (point->y_hi << 4) | point->y_lo; + + input_report_abs(ds->touchpad, ABS_MT_POSITION_X, x); + input_report_abs(ds->touchpad, ABS_MT_POSITION_Y, y); + } + } + input_mt_sync_frame(ds->touchpad); + input_report_key(ds->touchpad, BTN_LEFT, ds_report->buttons[2] & DS_BUTTONS2_TOUCHPAD); + input_sync(ds->touchpad); + + battery_data = ds_report->status & DS_STATUS_BATTERY_CAPACITY; + charging_status = (ds_report->status & DS_STATUS_CHARGING) >> DS_STATUS_CHARGING_SHIFT; + + switch (charging_status) { + case 0x0: + /* + * Each unit of battery data corresponds to 10% + * 0 = 0-9%, 1 = 10-19%, .. and 10 = 100% + */ + battery_capacity = min(battery_data * 10 + 5, 100); + battery_status = POWER_SUPPLY_STATUS_DISCHARGING; + break; + case 0x1: + battery_capacity = min(battery_data * 10 + 5, 100); + battery_status = POWER_SUPPLY_STATUS_CHARGING; + break; + case 0x2: + battery_capacity = 100; + battery_status = POWER_SUPPLY_STATUS_FULL; + break; + case 0xa: /* voltage or temperature out of range */ + case 0xb: /* temperature error */ + battery_capacity = 0; + battery_status = POWER_SUPPLY_STATUS_NOT_CHARGING; + break; + case 0xf: /* charging error */ + default: + battery_capacity = 0; + battery_status = POWER_SUPPLY_STATUS_UNKNOWN; + } + + spin_lock_irqsave(&ps_dev->lock, flags); + ps_dev->battery_capacity = battery_capacity; + ps_dev->battery_status = battery_status; + spin_unlock_irqrestore(&ps_dev->lock, flags); + + return 0; +} + +static int dualsense_play_effect(struct input_dev *dev, void *data, struct ff_effect *effect) +{ + struct hid_device *hdev = input_get_drvdata(dev); + struct dualsense *ds = hid_get_drvdata(hdev); + unsigned long flags; + + if (effect->type != FF_RUMBLE) + return 0; + + spin_lock_irqsave(&ds->base.lock, flags); + ds->update_rumble = true; + ds->motor_left = effect->u.rumble.strong_magnitude / 256; + ds->motor_right = effect->u.rumble.weak_magnitude / 256; + spin_unlock_irqrestore(&ds->base.lock, flags); + + schedule_work(&ds->output_worker); + return 0; +} + +static int dualsense_reset_leds(struct dualsense *ds) +{ + struct dualsense_output_report report; + uint8_t *buf; + + buf = kzalloc(sizeof(struct dualsense_output_report_bt), GFP_KERNEL); + if (!buf) + return -ENOMEM; + + dualsense_init_output_report(ds, &report, buf); + /* + * On Bluetooth the DualSense outputs an animation on the lightbar + * during startup and maintains a color afterwards. We need to explicitly + * reconfigure the lightbar before we can do any programming later on. + * In USB the lightbar is not on by default, but redoing the setup there + * doesn't hurt. + */ + report.common->valid_flag2 = DS_OUTPUT_VALID_FLAG2_LIGHTBAR_SETUP_CONTROL_ENABLE; + report.common->lightbar_setup = DS_OUTPUT_LIGHTBAR_SETUP_LIGHT_OUT; /* Fade light out. */ + dualsense_send_output_report(ds, &report); + + kfree(buf); + return 0; +} + +static void dualsense_set_lightbar(struct dualsense *ds, uint8_t red, uint8_t green, uint8_t blue) +{ + ds->update_lightbar = true; + ds->lightbar_red = red; + ds->lightbar_green = green; + ds->lightbar_blue = blue; + + schedule_work(&ds->output_worker); +} + +static void dualsense_set_player_leds(struct dualsense *ds) +{ + /* + * The DualSense controller has a row of 5 LEDs used for player ids. + * Behavior on the PlayStation 5 console is to center the player id + * across the LEDs, so e.g. player 1 would be "--x--" with x being 'on'. + * Follow a similar mapping here. + */ + static const int player_ids[5] = { + BIT(2), + BIT(3) | BIT(1), + BIT(4) | BIT(2) | BIT(0), + BIT(4) | BIT(3) | BIT(1) | BIT(0), + BIT(4) | BIT(3) | BIT(2) | BIT(1) | BIT(0) + }; + + uint8_t player_id = ds->base.player_id % ARRAY_SIZE(player_ids); + + ds->update_player_leds = true; + ds->player_leds_state = player_ids[player_id]; + schedule_work(&ds->output_worker); +} + +static struct ps_device *dualsense_create(struct hid_device *hdev) +{ + struct dualsense *ds; + struct ps_device *ps_dev; + uint8_t max_output_report_size; + int ret; + + ds = devm_kzalloc(&hdev->dev, sizeof(*ds), GFP_KERNEL); + if (!ds) + return ERR_PTR(-ENOMEM); + + /* + * Patch version to allow userspace to distinguish between + * hid-generic vs hid-playstation axis and button mapping. + */ + hdev->version |= HID_PLAYSTATION_VERSION_PATCH; + + ps_dev = &ds->base; + ps_dev->hdev = hdev; + spin_lock_init(&ps_dev->lock); + ps_dev->battery_capacity = 100; /* initial value until parse_report. */ + ps_dev->battery_status = POWER_SUPPLY_STATUS_UNKNOWN; + ps_dev->parse_report = dualsense_parse_report; + INIT_WORK(&ds->output_worker, dualsense_output_worker); + hid_set_drvdata(hdev, ds); + + max_output_report_size = sizeof(struct dualsense_output_report_bt); + ds->output_report_dmabuf = devm_kzalloc(&hdev->dev, max_output_report_size, GFP_KERNEL); + if (!ds->output_report_dmabuf) + return ERR_PTR(-ENOMEM); + + ret = dualsense_get_mac_address(ds); + if (ret) { + hid_err(hdev, "Failed to get MAC address from DualSense\n"); + return ERR_PTR(ret); + } + snprintf(hdev->uniq, sizeof(hdev->uniq), "%pMR", ds->base.mac_address); + + ret = dualsense_get_firmware_info(ds); + if (ret) { + hid_err(hdev, "Failed to get firmware info from DualSense\n"); + return ERR_PTR(ret); + } + + ret = ps_devices_list_add(ps_dev); + if (ret) + return ERR_PTR(ret); + + ret = dualsense_get_calibration_data(ds); + if (ret) { + hid_err(hdev, "Failed to get calibration data from DualSense\n"); + goto err; + } + + ds->gamepad = ps_gamepad_create(hdev, dualsense_play_effect); + if (IS_ERR(ds->gamepad)) { + ret = PTR_ERR(ds->gamepad); + goto err; + } + + ds->sensors = ps_sensors_create(hdev, DS_ACC_RANGE, DS_ACC_RES_PER_G, + DS_GYRO_RANGE, DS_GYRO_RES_PER_DEG_S); + if (IS_ERR(ds->sensors)) { + ret = PTR_ERR(ds->sensors); + goto err; + } + + ds->touchpad = ps_touchpad_create(hdev, DS_TOUCHPAD_WIDTH, DS_TOUCHPAD_HEIGHT, 2); + if (IS_ERR(ds->touchpad)) { + ret = PTR_ERR(ds->touchpad); + goto err; + } + + ret = ps_device_register_battery(ps_dev); + if (ret) + goto err; + + /* + * The hardware may have control over the LEDs (e.g. in Bluetooth on startup). + * Reset the LEDs (lightbar, mute, player leds), so we can control them + * from software. + */ + ret = dualsense_reset_leds(ds); + if (ret) + goto err; + + dualsense_set_lightbar(ds, 0, 0, 128); /* blue */ + + ret = ps_device_set_player_id(ps_dev); + if (ret) { + hid_err(hdev, "Failed to assign player id for DualSense: %d\n", ret); + goto err; + } + + /* Set player LEDs to our player id. */ + dualsense_set_player_leds(ds); + + /* + * Reporting hardware and firmware is important as there are frequent updates, which + * can change behavior. + */ + hid_info(hdev, "Registered DualSense controller hw_version=0x%08x fw_version=0x%08x\n", + ds->base.hw_version, ds->base.fw_version); + + return &ds->base; + +err: + ps_devices_list_remove(ps_dev); + return ERR_PTR(ret); +} + +static int ps_raw_event(struct hid_device *hdev, struct hid_report *report, + u8 *data, int size) +{ + struct ps_device *dev = hid_get_drvdata(hdev); + + if (dev && dev->parse_report) + return dev->parse_report(dev, report, data, size); + + return 0; +} + +static int ps_probe(struct hid_device *hdev, const struct hid_device_id *id) +{ + struct ps_device *dev; + int ret; + + ret = hid_parse(hdev); + if (ret) { + hid_err(hdev, "Parse failed\n"); + return ret; + } + + ret = hid_hw_start(hdev, HID_CONNECT_HIDRAW); + if (ret) { + hid_err(hdev, "Failed to start HID device\n"); + return ret; + } + + ret = hid_hw_open(hdev); + if (ret) { + hid_err(hdev, "Failed to open HID device\n"); + goto err_stop; + } + + if (hdev->product == USB_DEVICE_ID_SONY_PS5_CONTROLLER) { + dev = dualsense_create(hdev); + if (IS_ERR(dev)) { + hid_err(hdev, "Failed to create dualsense.\n"); + ret = PTR_ERR(dev); + goto err_close; + } + } + + ret = devm_device_add_group(&hdev->dev, &ps_device_attribute_group); + if (ret) { + hid_err(hdev, "Failed to register sysfs nodes.\n"); + goto err_close; + } + + return ret; + +err_close: + hid_hw_close(hdev); +err_stop: + hid_hw_stop(hdev); + return ret; +} + +static void ps_remove(struct hid_device *hdev) +{ + struct ps_device *dev = hid_get_drvdata(hdev); + + ps_devices_list_remove(dev); + ps_device_release_player_id(dev); + + hid_hw_close(hdev); + hid_hw_stop(hdev); +} + +static const struct hid_device_id ps_devices[] = { + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS5_CONTROLLER) }, + { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS5_CONTROLLER) }, + { } +}; +MODULE_DEVICE_TABLE(hid, ps_devices); + +static struct hid_driver ps_driver = { + .name = "playstation", + .id_table = ps_devices, + .probe = ps_probe, + .remove = ps_remove, + .raw_event = ps_raw_event, +}; + +static int __init ps_init(void) +{ + return hid_register_driver(&ps_driver); +} + +static void __exit ps_exit(void) +{ + hid_unregister_driver(&ps_driver); + ida_destroy(&ps_player_id_allocator); +} + +module_init(ps_init); +module_exit(ps_exit); + +MODULE_AUTHOR("Sony Interactive Entertainment"); +MODULE_DESCRIPTION("HID Driver for PlayStation peripherals."); +MODULE_LICENSE("GPL"); diff --git a/fs/configfs/file.c b/fs/configfs/file.c index fb65b706cc0d..84b4d58fc65f 100644 --- a/fs/configfs/file.c +++ b/fs/configfs/file.c @@ -378,7 +378,7 @@ static int __configfs_open_file(struct inode *inode, struct file *file, int type attr = to_attr(dentry); if (!attr) - goto out_put_item; + goto out_free_buffer; if (type & CONFIGFS_ITEM_BIN_ATTR) { buffer->bin_attr = to_bin_attr(dentry); @@ -391,7 +391,7 @@ static int __configfs_open_file(struct inode *inode, struct file *file, int type /* Grab the module reference for this attribute if we have one */ error = -ENODEV; if (!try_module_get(buffer->owner)) - goto out_put_item; + goto out_free_buffer; error = -EACCES; if (!buffer->item->ci_type) @@ -435,8 +435,6 @@ static int __configfs_open_file(struct inode *inode, struct file *file, int type out_put_module: module_put(buffer->owner); -out_put_item: - config_item_put(buffer->item); out_free_buffer: up_read(&frag->frag_sem); kfree(buffer); diff --git a/include/linux/virtio_vsock.h b/include/linux/virtio_vsock.h index b139f76060a6..7a22e5b8c9c9 100644 --- a/include/linux/virtio_vsock.h +++ b/include/linux/virtio_vsock.h @@ -12,7 +12,8 @@ #define VIRTIO_VSOCK_DEFAULT_MAX_BUF_SIZE (1024 * 256) #define VIRTIO_VSOCK_DEFAULT_RX_BUF_SIZE (1024 * 4) #define VIRTIO_VSOCK_MAX_BUF_SIZE 0xFFFFFFFFUL -#define VIRTIO_VSOCK_MAX_PKT_BUF_SIZE (1024 * 64) +#define VIRTIO_VSOCK_MAX_PKT_BUF_SIZE virtio_transport_max_vsock_pkt_buf_size +extern uint virtio_transport_max_vsock_pkt_buf_size; enum { VSOCK_VQ_RX = 0, /* for host to guest data */ diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c index efbb521bff13..d07d1e1c190a 100644 --- a/net/vmw_vsock/virtio_transport_common.c +++ b/net/vmw_vsock/virtio_transport_common.c @@ -29,6 +29,10 @@ /* Threshold for detecting small packets to copy */ #define GOOD_COPY_LEN 128 +uint virtio_transport_max_vsock_pkt_buf_size = 64 * 1024; +module_param(virtio_transport_max_vsock_pkt_buf_size, uint, 0444); +EXPORT_SYMBOL_GPL(virtio_transport_max_vsock_pkt_buf_size); + static const struct virtio_transport *virtio_transport_get_ops(void) { const struct vsock_transport *t = vsock_core_get_transport();