diff --git a/package/kernel/mac80211/patches/rtl/046-wifi-rtw88-8821au-Add-additional-devices-to-the-USB_.patch b/package/kernel/mac80211/patches/rtl/046-v6.14-wifi-rtw88-8821au-Add-additional-devices-to-the-USB_.patch similarity index 93% rename from package/kernel/mac80211/patches/rtl/046-wifi-rtw88-8821au-Add-additional-devices-to-the-USB_.patch rename to package/kernel/mac80211/patches/rtl/046-v6.14-wifi-rtw88-8821au-Add-additional-devices-to-the-USB_.patch index a83094b3c3e..d1e268c79b9 100644 --- a/package/kernel/mac80211/patches/rtl/046-wifi-rtw88-8821au-Add-additional-devices-to-the-USB_.patch +++ b/package/kernel/mac80211/patches/rtl/046-v6.14-wifi-rtw88-8821au-Add-additional-devices-to-the-USB_.patch @@ -1,14 +1,16 @@ -From ff5a1c94e53c0d24f610c2c30add82f75b728737 Mon Sep 17 00:00:00 2001 -From: Larry Finger +From 7b5ce65d90187f0944e70dc5741aa0edfac926f4 Mon Sep 17 00:00:00 2001 +From: Larry Finger Date: Wed, 6 Nov 2024 15:55:31 +0200 -Subject: [PATCH 1/6] wifi: rtw88: 8821au: Add additional devices to the - USB_DEVICE list +Subject: [PATCH] wifi: rtw88: 8821au: Add additional devices to the USB_DEVICE + list These are the entries that Nick Morrow provided. From https://github.com/morrownr/8821au-20210708 Signed-off-by: Larry Finger Signed-off-by: Bitterblue Smith +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/da05b866-a9ff-428c-a008-35e8cf200a98@gmail.com --- .../net/wireless/realtek/rtw88/rtw8821au.c | 52 ++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/package/kernel/mac80211/patches/rtl/047-wifi-rtw88-8812au-Add-more-device-IDs.patch b/package/kernel/mac80211/patches/rtl/047-v6.14-wifi-rtw88-8812au-Add-more-device-IDs.patch similarity index 95% rename from package/kernel/mac80211/patches/rtl/047-wifi-rtw88-8812au-Add-more-device-IDs.patch rename to package/kernel/mac80211/patches/rtl/047-v6.14-wifi-rtw88-8812au-Add-more-device-IDs.patch index a93f9219d9f..e03f2461646 100644 --- a/package/kernel/mac80211/patches/rtl/047-wifi-rtw88-8812au-Add-more-device-IDs.patch +++ b/package/kernel/mac80211/patches/rtl/047-v6.14-wifi-rtw88-8812au-Add-more-device-IDs.patch @@ -1,12 +1,14 @@ -From d21ad2e4edfb64d3f32685607a457576eea3c5cd Mon Sep 17 00:00:00 2001 +From 1ee6ff9ae3c1a9eda9081f9db04f85d3a7352d38 Mon Sep 17 00:00:00 2001 From: Nick Morrow Date: Wed, 6 Nov 2024 15:57:10 +0200 -Subject: [PATCH 2/6] wifi: rtw88: 8812au: Add more device IDs +Subject: [PATCH] wifi: rtw88: 8812au: Add more device IDs From https://github.com/morrownr/8812au-20210820. Signed-off-by: Nick Morrow Signed-off-by: Bitterblue Smith +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/31b7ee6b-f96d-43e0-a32f-a9eb1174a0c1@gmail.com --- .../net/wireless/realtek/rtw88/rtw8812au.c | 68 ++++++++++++++++++- 1 file changed, 67 insertions(+), 1 deletion(-) diff --git a/package/kernel/mac80211/patches/rtl/051-wifi-rtw88-Add-additional-USB-IDs-for-RTL8812BU.patch b/package/kernel/mac80211/patches/rtl/048-v6.14-wifi-rtw88-Add-additional-USB-IDs-for-RTL8812BU.patch similarity index 80% rename from package/kernel/mac80211/patches/rtl/051-wifi-rtw88-Add-additional-USB-IDs-for-RTL8812BU.patch rename to package/kernel/mac80211/patches/rtl/048-v6.14-wifi-rtw88-Add-additional-USB-IDs-for-RTL8812BU.patch index e4e26c79751..bf0bcbf1890 100644 --- a/package/kernel/mac80211/patches/rtl/051-wifi-rtw88-Add-additional-USB-IDs-for-RTL8812BU.patch +++ b/package/kernel/mac80211/patches/rtl/048-v6.14-wifi-rtw88-Add-additional-USB-IDs-for-RTL8812BU.patch @@ -1,7 +1,7 @@ -From acadf3a63b39ad03167a633fa3cea8c0fc2ab87f Mon Sep 17 00:00:00 2001 +From d4c4903508f9e1b2bfec88f777718484e27343fb Mon Sep 17 00:00:00 2001 From: Nick Morrow Date: Thu, 7 Nov 2024 08:28:46 +0800 -Subject: [PATCH 6/6] wifi: rtw88: Add additional USB IDs for RTL8812BU +Subject: [PATCH] wifi: rtw88: Add additional USB IDs for RTL8812BU Add three additional USB IDs found in https://github.com/morrownr/88x2bu-20210702 @@ -9,7 +9,9 @@ to support more RTL8812BU devices. Signed-off-by: Nick Morrow Signed-off-by: Zenm Chen -Signed-off-by: Mikhail Novosyolov +Reviewed-by: Mikhail Novosyolov +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/20241107002846.13748-1-zenmchen@gmail.com --- drivers/net/wireless/realtek/rtw88/rtw8822bu.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/package/kernel/mac80211/patches/rtl/048-wifi-rtw88-usb-Support-USB-3-with-RTL8812AU.patch b/package/kernel/mac80211/patches/rtl/049-v6.14-wifi-rtw88-usb-Support-USB-3-with-RTL8812AU.patch similarity index 63% rename from package/kernel/mac80211/patches/rtl/048-wifi-rtw88-usb-Support-USB-3-with-RTL8812AU.patch rename to package/kernel/mac80211/patches/rtl/049-v6.14-wifi-rtw88-usb-Support-USB-3-with-RTL8812AU.patch index 33ca91d77d8..694c32f79dc 100644 --- a/package/kernel/mac80211/patches/rtl/048-wifi-rtw88-usb-Support-USB-3-with-RTL8812AU.patch +++ b/package/kernel/mac80211/patches/rtl/049-v6.14-wifi-rtw88-usb-Support-USB-3-with-RTL8812AU.patch @@ -1,14 +1,16 @@ -From 213dfa630285bb0241f3eaeb778db8ff128f10ba Mon Sep 17 00:00:00 2001 +From 82a35723a67c29f685d7b518962154a73b7163a2 Mon Sep 17 00:00:00 2001 From: Bitterblue Smith -Date: Fri, 8 Nov 2024 01:41:08 +0200 -Subject: [PATCH 3/6] wifi: rtw88: usb: Support USB 3 with RTL8812AU +Date: Thu, 14 Nov 2024 17:46:08 +0200 +Subject: [PATCH] wifi: rtw88: usb: Support USB 3 with RTL8812AU Add the function to automatically switch the RTL8812AU into USB 3 mode. Signed-off-by: Bitterblue Smith +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/19cda72b-f1f1-4b69-8369-0e4376b646bf@gmail.com --- - drivers/net/wireless/realtek/rtw88/usb.c | 34 ++++++++++++++++++++++-- - 1 file changed, 32 insertions(+), 2 deletions(-) + drivers/net/wireless/realtek/rtw88/usb.c | 44 ++++++++++++++++++++++-- + 1 file changed, 42 insertions(+), 2 deletions(-) --- a/drivers/net/wireless/realtek/rtw88/usb.c +++ b/drivers/net/wireless/realtek/rtw88/usb.c @@ -45,24 +47,38 @@ Signed-off-by: Bitterblue Smith static int rtw_usb_switch_mode_new(struct rtw_dev *rtwdev) { enum usb_device_speed cur_speed; -@@ -983,7 +1009,8 @@ static int rtw_usb_switch_mode(struct rt +@@ -979,11 +1005,22 @@ static int rtw_usb_switch_mode_new(struc + return 1; + } + ++static bool rtw_usb3_chip_old(u8 chip_id) ++{ ++ return chip_id == RTW_CHIP_TYPE_8812A; ++} ++ ++static bool rtw_usb3_chip_new(u8 chip_id) ++{ ++ return chip_id == RTW_CHIP_TYPE_8822C || ++ chip_id == RTW_CHIP_TYPE_8822B; ++} ++ + static int rtw_usb_switch_mode(struct rtw_dev *rtwdev) { u8 id = rtwdev->chip->id; - if (id != RTW_CHIP_TYPE_8822C && id != RTW_CHIP_TYPE_8822B) -+ if (id != RTW_CHIP_TYPE_8822C && id != RTW_CHIP_TYPE_8822B && -+ id != RTW_CHIP_TYPE_8812A) ++ if (!rtw_usb3_chip_new(id) && !rtw_usb3_chip_old(id)) return 0; if (!rtwdev->efuse.usb_mode_switch) { -@@ -998,7 +1025,10 @@ static int rtw_usb_switch_mode(struct rt +@@ -998,7 +1035,10 @@ static int rtw_usb_switch_mode(struct rt return 0; } - return rtw_usb_switch_mode_new(rtwdev); -+ if (id == RTW_CHIP_TYPE_8812A) ++ if (rtw_usb3_chip_old(id)) + return rtw_usb_switch_mode_old(rtwdev); -+ else /* RTL8822CU, RTL8822BU */ ++ else + return rtw_usb_switch_mode_new(rtwdev); } diff --git a/package/kernel/mac80211/patches/rtl/050-wifi-rtlwifi-rtl8821ae-phy-restore-removed-code-to-f.patch b/package/kernel/mac80211/patches/rtl/050-v6.14-wifi-rtlwifi-rtl8821ae-phy-restore-removed-code-to-f.patch similarity index 78% rename from package/kernel/mac80211/patches/rtl/050-wifi-rtlwifi-rtl8821ae-phy-restore-removed-code-to-f.patch rename to package/kernel/mac80211/patches/rtl/050-v6.14-wifi-rtlwifi-rtl8821ae-phy-restore-removed-code-to-f.patch index 798a59351f7..3e66f5b2493 100644 --- a/package/kernel/mac80211/patches/rtl/050-wifi-rtlwifi-rtl8821ae-phy-restore-removed-code-to-f.patch +++ b/package/kernel/mac80211/patches/rtl/050-v6.14-wifi-rtlwifi-rtl8821ae-phy-restore-removed-code-to-f.patch @@ -1,8 +1,8 @@ -From 927dcd0ab53f39ee00a2d1f204b5aac77e28fcf9 Mon Sep 17 00:00:00 2001 +From 5e5903a442bb889a62a0f5d89ac33e53ab08592c Mon Sep 17 00:00:00 2001 From: Colin Ian King Date: Wed, 6 Nov 2024 15:46:42 +0000 -Subject: [PATCH 5/6] wifi: rtlwifi: rtl8821ae: phy: restore removed code to - fix infinite loop +Subject: [PATCH] wifi: rtlwifi: rtl8821ae: phy: restore removed code to fix + infinite loop A previous clean-up fix removed the assignment of v2 inside a while loop that turned it into an infinite loop. Fix this by restoring the assignment @@ -12,6 +12,8 @@ Fixes: cda37445718d ("wifi: rtlwifi: rtl8821ae: phy: remove some useless code") Signed-off-by: Colin Ian King Tested-by: Ping-Ke Shih Reviewed-by: Su Hui +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/20241106154642.1627886-1-colin.i.king@gmail.com --- drivers/net/wireless/realtek/rtlwifi/rtl8821ae/phy.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/package/kernel/mac80211/patches/rtl/049-wifi-rtw88-usb-Enable-RX-aggregation-for-8821au-8812.patch b/package/kernel/mac80211/patches/rtl/051-v6.14-wifi-rtw88-usb-Enable-RX-aggregation-for-8821au-8812.patch similarity index 73% rename from package/kernel/mac80211/patches/rtl/049-wifi-rtw88-usb-Enable-RX-aggregation-for-8821au-8812.patch rename to package/kernel/mac80211/patches/rtl/051-v6.14-wifi-rtw88-usb-Enable-RX-aggregation-for-8821au-8812.patch index d4c3ef34957..1debe2dc73d 100644 --- a/package/kernel/mac80211/patches/rtl/049-wifi-rtw88-usb-Enable-RX-aggregation-for-8821au-8812.patch +++ b/package/kernel/mac80211/patches/rtl/051-v6.14-wifi-rtw88-usb-Enable-RX-aggregation-for-8821au-8812.patch @@ -1,7 +1,7 @@ -From 2b38362bd3b8e0a3691f0a8e82444a54f702e384 Mon Sep 17 00:00:00 2001 +From ce5dea83ee8f945203144fb891fdcb978216e45a Mon Sep 17 00:00:00 2001 From: Bitterblue Smith -Date: Fri, 8 Nov 2024 01:43:50 +0200 -Subject: [PATCH 4/6] wifi: rtw88: usb: Enable RX aggregation for 8821au/8812au +Date: Thu, 14 Nov 2024 17:48:09 +0200 +Subject: [PATCH] wifi: rtw88: usb: Enable RX aggregation for 8821au/8812au USB RX aggregation improves the RX speed on certain ARM systems, like the NanoPi NEO Core2. With RTL8811AU, before: 30 Mbps, after: 224 Mbps. @@ -13,13 +13,15 @@ of 7 RTL8812AU frequently tries to aggregate more frames than will fit in 32768 bytes. Use a size of 6 instead. Signed-off-by: Bitterblue Smith +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/63012163-a425-4b15-b830-43f279c06b73@gmail.com --- - drivers/net/wireless/realtek/rtw88/usb.c | 30 ++++++++++++++++++++++++ - 1 file changed, 30 insertions(+) + drivers/net/wireless/realtek/rtw88/usb.c | 28 ++++++++++++++++++++++++ + 1 file changed, 28 insertions(+) --- a/drivers/net/wireless/realtek/rtw88/usb.c +++ b/drivers/net/wireless/realtek/rtw88/usb.c -@@ -789,6 +789,32 @@ static void rtw_usb_dynamic_rx_agg_v1(st +@@ -789,6 +789,30 @@ static void rtw_usb_dynamic_rx_agg_v1(st rtw_write16(rtwdev, REG_RXDMA_AGG_PG_TH, val16); } @@ -29,7 +31,10 @@ Signed-off-by: Bitterblue Smith + u8 size, timeout; + u16 val16; + -+ if (rtwusb->udev->speed == USB_SPEED_SUPER) { ++ if (!enable) { ++ size = 0x0; ++ timeout = 0x1; ++ } else if (rtwusb->udev->speed == USB_SPEED_SUPER) { + size = 0x6; + timeout = 0x1a; + } else { @@ -37,11 +42,6 @@ Signed-off-by: Bitterblue Smith + timeout = 0x20; + } + -+ if (!enable) { -+ size = 0x0; -+ timeout = 0x1; -+ } -+ + val16 = u16_encode_bits(size, BIT_RXDMA_AGG_PG_TH) | + u16_encode_bits(timeout, BIT_DMA_AGG_TO_V1); + @@ -52,7 +52,7 @@ Signed-off-by: Bitterblue Smith static void rtw_usb_dynamic_rx_agg(struct rtw_dev *rtwdev, bool enable) { switch (rtwdev->chip->id) { -@@ -797,6 +823,10 @@ static void rtw_usb_dynamic_rx_agg(struc +@@ -797,6 +821,10 @@ static void rtw_usb_dynamic_rx_agg(struc case RTW_CHIP_TYPE_8821C: rtw_usb_dynamic_rx_agg_v1(rtwdev, enable); break; diff --git a/package/kernel/mac80211/patches/rtl/052-v6.14-wifi-rtw88-add-__packed-attribute-to-efuse-layout-st.patch b/package/kernel/mac80211/patches/rtl/052-v6.14-wifi-rtw88-add-__packed-attribute-to-efuse-layout-st.patch new file mode 100644 index 00000000000..6132bb7d418 --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/052-v6.14-wifi-rtw88-add-__packed-attribute-to-efuse-layout-st.patch @@ -0,0 +1,195 @@ +From 0daa521a1c8c29ffbefe6530f0d276e74e2749d0 Mon Sep 17 00:00:00 2001 +From: Ping-Ke Shih +Date: Thu, 12 Dec 2024 13:42:03 +0800 +Subject: [PATCH] wifi: rtw88: add __packed attribute to efuse layout struct + +The layout struct of efuse should not do address alignment by compiler. +Otherwise it leads unexpected layout and size for certain arch suc as arm. +In x86-64, the results are identical before and after this patch. + +Also adjust bit-field to prevent over adjacent byte to avoid warning: + rtw88/rtw8822b.h:66:1: note: offset of packed bit-field `res2` has changed in GCC 4.4 + 66 | } __packed; + | ^ + +Reported-by: kernel test robot +Closes: https://lore.kernel.org/oe-kbuild-all/202412120131.qk0x6OhE-lkp@intel.com/ +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/20241212054203.135046-1-pkshih@realtek.com +--- + drivers/net/wireless/realtek/rtw88/main.h | 4 ++-- + drivers/net/wireless/realtek/rtw88/rtw8723x.h | 8 ++++---- + drivers/net/wireless/realtek/rtw88/rtw8821c.h | 9 +++++---- + drivers/net/wireless/realtek/rtw88/rtw8822b.h | 9 +++++---- + drivers/net/wireless/realtek/rtw88/rtw8822c.h | 9 +++++---- + 5 files changed, 21 insertions(+), 18 deletions(-) + +--- a/drivers/net/wireless/realtek/rtw88/main.h ++++ b/drivers/net/wireless/realtek/rtw88/main.h +@@ -510,12 +510,12 @@ struct rtw_5g_txpwr_idx { + struct rtw_5g_vht_ns_pwr_idx_diff vht_2s_diff; + struct rtw_5g_vht_ns_pwr_idx_diff vht_3s_diff; + struct rtw_5g_vht_ns_pwr_idx_diff vht_4s_diff; +-}; ++} __packed; + + struct rtw_txpwr_idx { + struct rtw_2g_txpwr_idx pwr_idx_2g; + struct rtw_5g_txpwr_idx pwr_idx_5g; +-}; ++} __packed; + + struct rtw_channel_params { + u8 center_chan; +--- a/drivers/net/wireless/realtek/rtw88/rtw8723x.h ++++ b/drivers/net/wireless/realtek/rtw88/rtw8723x.h +@@ -47,7 +47,7 @@ struct rtw8723xe_efuse { + u8 device_id[2]; + u8 sub_vendor_id[2]; + u8 sub_device_id[2]; +-}; ++} __packed; + + struct rtw8723xu_efuse { + u8 res4[48]; /* 0xd0 */ +@@ -56,12 +56,12 @@ struct rtw8723xu_efuse { + u8 usb_option; /* 0x104 */ + u8 res5[2]; /* 0x105 */ + u8 mac_addr[ETH_ALEN]; /* 0x107 */ +-}; ++} __packed; + + struct rtw8723xs_efuse { + u8 res4[0x4a]; /* 0xd0 */ + u8 mac_addr[ETH_ALEN]; /* 0x11a */ +-}; ++} __packed; + + struct rtw8723x_efuse { + __le16 rtl_id; +@@ -96,7 +96,7 @@ struct rtw8723x_efuse { + struct rtw8723xu_efuse u; + struct rtw8723xs_efuse s; + }; +-}; ++} __packed; + + #define RTW8723X_IQK_ADDA_REG_NUM 16 + #define RTW8723X_IQK_MAC8_REG_NUM 3 +--- a/drivers/net/wireless/realtek/rtw88/rtw8821c.h ++++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.h +@@ -27,7 +27,7 @@ struct rtw8821cu_efuse { + u8 res11[0xcf]; + u8 package_type; /* 0x1fb */ + u8 res12[0x4]; +-}; ++} __packed; + + struct rtw8821ce_efuse { + u8 mac_addr[ETH_ALEN]; /* 0xd0 */ +@@ -47,7 +47,8 @@ struct rtw8821ce_efuse { + u8 ltr_en:1; + u8 res1:2; + u8 obff:2; +- u8 res2:3; ++ u8 res2_1:1; ++ u8 res2_2:2; + u8 obff_cap:2; + u8 res3:4; + u8 res4[3]; +@@ -63,7 +64,7 @@ struct rtw8821ce_efuse { + u8 res6:1; + u8 port_t_power_on_value:5; + u8 res7; +-}; ++} __packed; + + struct rtw8821cs_efuse { + u8 res4[0x4a]; /* 0xd0 */ +@@ -101,7 +102,7 @@ struct rtw8821c_efuse { + struct rtw8821cu_efuse u; + struct rtw8821cs_efuse s; + }; +-}; ++} __packed; + + static inline void + _rtw_write32s_mask(struct rtw_dev *rtwdev, u32 addr, u32 mask, u32 data) +--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.h ++++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.h +@@ -27,7 +27,7 @@ struct rtw8822bu_efuse { + u8 res11[0xcf]; + u8 package_type; /* 0x1fb */ + u8 res12[0x4]; +-}; ++} __packed; + + struct rtw8822be_efuse { + u8 mac_addr[ETH_ALEN]; /* 0xd0 */ +@@ -47,7 +47,8 @@ struct rtw8822be_efuse { + u8 ltr_en:1; + u8 res1:2; + u8 obff:2; +- u8 res2:3; ++ u8 res2_1:1; ++ u8 res2_2:2; + u8 obff_cap:2; + u8 res3:4; + u8 res4[3]; +@@ -63,7 +64,7 @@ struct rtw8822be_efuse { + u8 res6:1; + u8 port_t_power_on_value:5; + u8 res7; +-}; ++} __packed; + + struct rtw8822bs_efuse { + u8 res4[0x4a]; /* 0xd0 */ +@@ -103,7 +104,7 @@ struct rtw8822b_efuse { + struct rtw8822bu_efuse u; + struct rtw8822bs_efuse s; + }; +-}; ++} __packed; + + static inline void + _rtw_write32s_mask(struct rtw_dev *rtwdev, u32 addr, u32 mask, u32 data) +--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.h ++++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.h +@@ -14,7 +14,7 @@ struct rtw8822cu_efuse { + u8 res1[3]; + u8 mac_addr[ETH_ALEN]; /* 0x157 */ + u8 res2[0x3d]; +-}; ++} __packed; + + struct rtw8822cs_efuse { + u8 res0[0x4a]; /* 0x120 */ +@@ -39,7 +39,8 @@ struct rtw8822ce_efuse { + u8 ltr_en:1; + u8 res1:2; + u8 obff:2; +- u8 res2:3; ++ u8 res2_1:1; ++ u8 res2_2:2; + u8 obff_cap:2; + u8 res3:4; + u8 class_code[3]; +@@ -55,7 +56,7 @@ struct rtw8822ce_efuse { + u8 res6:1; + u8 port_t_power_on_value:5; + u8 res7; +-}; ++} __packed; + + struct rtw8822c_efuse { + __le16 rtl_id; +@@ -102,7 +103,7 @@ struct rtw8822c_efuse { + struct rtw8822cu_efuse u; + struct rtw8822cs_efuse s; + }; +-}; ++} __packed; + + enum rtw8822c_dpk_agc_phase { + RTW_DPK_GAIN_CHECK, diff --git a/package/kernel/mac80211/patches/rtl/053-v6.14-wifi-rtw88-8812a-Support-RFE-type-2.patch b/package/kernel/mac80211/patches/rtl/053-v6.14-wifi-rtw88-8812a-Support-RFE-type-2.patch new file mode 100644 index 00000000000..d59facb3f9d --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/053-v6.14-wifi-rtw88-8812a-Support-RFE-type-2.patch @@ -0,0 +1,28 @@ +From 59ab27a9f20f8de6f7989e8a8c3d97c04ed8199c Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Wed, 18 Dec 2024 02:13:22 +0200 +Subject: [PATCH] wifi: rtw88: 8812a: Support RFE type 2 + +RF front end type 2 exists in the wild and can be treated like types +0 and 1. + +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/2917c7fc-6d88-4007-b6a6-9130bd1991e5@gmail.com +--- + drivers/net/wireless/realtek/rtw88/rtw8812a.c | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/drivers/net/wireless/realtek/rtw88/rtw8812a.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8812a.c +@@ -985,6 +985,9 @@ static const struct rtw_rfe_def rtw8812a + [1] = { .phy_pg_tbl = &rtw8812a_bb_pg_tbl, + .txpwr_lmt_tbl = &rtw8812a_txpwr_lmt_tbl, + .pwr_track_tbl = &rtw8812a_rtw_pwr_track_tbl, }, ++ [2] = { .phy_pg_tbl = &rtw8812a_bb_pg_tbl, ++ .txpwr_lmt_tbl = &rtw8812a_txpwr_lmt_tbl, ++ .pwr_track_tbl = &rtw8812a_rtw_pwr_track_tbl, }, + [3] = { .phy_pg_tbl = &rtw8812a_bb_pg_rfe3_tbl, + .txpwr_lmt_tbl = &rtw8812a_txpwr_lmt_tbl, + .pwr_track_tbl = &rtw8812a_rtw_pwr_track_rfe3_tbl, }, diff --git a/package/kernel/mac80211/patches/rtl/054-v6.14-wifi-rtw88-8821a-8812a-Set-ptct_efuse_size-to-0.patch b/package/kernel/mac80211/patches/rtl/054-v6.14-wifi-rtw88-8821a-8812a-Set-ptct_efuse_size-to-0.patch new file mode 100644 index 00000000000..3b5dea793a7 --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/054-v6.14-wifi-rtw88-8821a-8812a-Set-ptct_efuse_size-to-0.patch @@ -0,0 +1,51 @@ +From 74a72c367573ad521becf6cc4d649e14387b3c64 Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Wed, 18 Dec 2024 02:16:11 +0200 +Subject: [PATCH] wifi: rtw88: 8821a/8812a: Set ptct_efuse_size to 0 + +Some RTL8812AU devices fail to probe: + +[ 12.478774] rtw_8812au 1-1.3:1.0: failed to dump efuse logical map +[ 12.487712] rtw_8812au 1-1.3:1.0: failed to setup chip efuse info +[ 12.487742] rtw_8812au 1-1.3:1.0: failed to setup chip information +[ 12.491077] rtw_8812au: probe of 1-1.3:1.0 failed with error -22 + +It turns out these chips don't need to "protect" any bytes at the end of +the efuse. + +The original value of 96 was copied from rtw8821c.c. + +No one reported any failures with RTL8821AU yet, but the vendor driver +uses the same efuse reading code for both chips. + +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/1a477adb-60c3-463c-b158-3f86c94cb821@gmail.com +--- + drivers/net/wireless/realtek/rtw88/rtw8812a.c | 2 +- + drivers/net/wireless/realtek/rtw88/rtw8821a.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/net/wireless/realtek/rtw88/rtw8812a.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8812a.c +@@ -1027,7 +1027,7 @@ const struct rtw_chip_info rtw8812a_hw_s + .rx_buf_desc_sz = 8, + .phy_efuse_size = 512, + .log_efuse_size = 512, +- .ptct_efuse_size = 96 + 1, /* TODO or just 18? */ ++ .ptct_efuse_size = 0, + .txff_size = 131072, + .rxff_size = 16128, + .rsvd_drv_pg_num = 9, +--- a/drivers/net/wireless/realtek/rtw88/rtw8821a.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8821a.c +@@ -1118,7 +1118,7 @@ const struct rtw_chip_info rtw8821a_hw_s + .rx_buf_desc_sz = 8, + .phy_efuse_size = 512, + .log_efuse_size = 512, +- .ptct_efuse_size = 96 + 1, /* TODO or just 18? */ ++ .ptct_efuse_size = 0, + .txff_size = 65536, + .rxff_size = 16128, + .rsvd_drv_pg_num = 8, diff --git a/package/kernel/mac80211/patches/rtl/055-v6.14-wifi-rtw88-usb-Copy-instead-of-cloning-the-RX-skb.patch b/package/kernel/mac80211/patches/rtl/055-v6.14-wifi-rtw88-usb-Copy-instead-of-cloning-the-RX-skb.patch new file mode 100644 index 00000000000..30f13f9d385 --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/055-v6.14-wifi-rtw88-usb-Copy-instead-of-cloning-the-RX-skb.patch @@ -0,0 +1,130 @@ +From e9048e2935f7d797c2ba047c15b705b57c2fa99a Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Thu, 19 Dec 2024 00:33:20 +0200 +Subject: [PATCH] wifi: rtw88: usb: Copy instead of cloning the RX skb + +"iperf3 -c 192.168.0.1 -R --udp -b 0" shows about 40% of datagrams +are lost. Many torrents don't download faster than 3 MiB/s, probably +because the Bittorrent protocol uses UDP. This is somehow related to +the use of skb_clone() in the RX path. + +Don't use skb_clone(). Instead allocate a new skb for each 802.11 frame +received and copy the data from the big (32768 byte) skb. + +With this patch, "iperf3 -c 192.168.0.1 -R --udp -b 0" shows only 1-2% +of datagrams are lost, and torrents can reach download speeds of 36 +MiB/s. + +Tested with RTL8812AU and RTL8822CU. + +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/8c9d4f9d-ebd8-4dc0-a0c4-9ebe430521dd@gmail.com +--- + drivers/net/wireless/realtek/rtw88/usb.c | 52 ++++++++++++++---------- + 1 file changed, 31 insertions(+), 21 deletions(-) + +--- a/drivers/net/wireless/realtek/rtw88/usb.c ++++ b/drivers/net/wireless/realtek/rtw88/usb.c +@@ -7,6 +7,7 @@ + #include + #include "main.h" + #include "debug.h" ++#include "mac.h" + #include "reg.h" + #include "tx.h" + #include "rx.h" +@@ -547,49 +548,58 @@ static void rtw_usb_rx_handler(struct wo + { + struct rtw_usb *rtwusb = container_of(work, struct rtw_usb, rx_work); + struct rtw_dev *rtwdev = rtwusb->rtwdev; +- const struct rtw_chip_info *chip = rtwdev->chip; +- u32 pkt_desc_sz = chip->rx_pkt_desc_sz; + struct ieee80211_rx_status rx_status; +- u32 pkt_offset, next_pkt, urb_len; + struct rtw_rx_pkt_stat pkt_stat; +- struct sk_buff *next_skb; ++ struct sk_buff *rx_skb; + struct sk_buff *skb; ++ u32 pkt_desc_sz = rtwdev->chip->rx_pkt_desc_sz; ++ u32 max_skb_len = pkt_desc_sz + PHY_STATUS_SIZE * 8 + ++ IEEE80211_MAX_MPDU_LEN_VHT_11454; ++ u32 pkt_offset, next_pkt, skb_len; + u8 *rx_desc; + int limit; + + for (limit = 0; limit < 200; limit++) { +- skb = skb_dequeue(&rtwusb->rx_queue); +- if (!skb) ++ rx_skb = skb_dequeue(&rtwusb->rx_queue); ++ if (!rx_skb) + break; + + if (skb_queue_len(&rtwusb->rx_queue) >= RTW_USB_MAX_RXQ_LEN) { + dev_dbg_ratelimited(rtwdev->dev, "failed to get rx_queue, overflow\n"); +- dev_kfree_skb_any(skb); ++ dev_kfree_skb_any(rx_skb); + continue; + } + +- urb_len = skb->len; ++ rx_desc = rx_skb->data; + + do { +- rx_desc = skb->data; + rtw_rx_query_rx_desc(rtwdev, rx_desc, &pkt_stat, + &rx_status); + pkt_offset = pkt_desc_sz + pkt_stat.drv_info_sz + + pkt_stat.shift; + +- next_pkt = round_up(pkt_stat.pkt_len + pkt_offset, 8); ++ skb_len = pkt_stat.pkt_len + pkt_offset; ++ if (skb_len > max_skb_len) { ++ rtw_dbg(rtwdev, RTW_DBG_USB, ++ "skipping too big packet: %u\n", ++ skb_len); ++ goto skip_packet; ++ } ++ ++ skb = alloc_skb(skb_len, GFP_KERNEL); ++ if (!skb) { ++ rtw_dbg(rtwdev, RTW_DBG_USB, ++ "failed to allocate RX skb of size %u\n", ++ skb_len); ++ goto skip_packet; ++ } + +- if (urb_len >= next_pkt + pkt_desc_sz) +- next_skb = skb_clone(skb, GFP_KERNEL); +- else +- next_skb = NULL; ++ skb_put_data(skb, rx_desc, skb_len); + + if (pkt_stat.is_c2h) { +- skb_trim(skb, pkt_stat.pkt_len + pkt_offset); + rtw_fw_c2h_cmd_rx_irqsafe(rtwdev, pkt_offset, skb); + } else { + skb_pull(skb, pkt_offset); +- skb_trim(skb, pkt_stat.pkt_len); + rtw_update_rx_freq_for_invalid(rtwdev, skb, + &rx_status, + &pkt_stat); +@@ -598,12 +608,12 @@ static void rtw_usb_rx_handler(struct wo + ieee80211_rx_irqsafe(rtwdev->hw, skb); + } + +- skb = next_skb; +- if (skb) +- skb_pull(skb, next_pkt); ++skip_packet: ++ next_pkt = round_up(skb_len, 8); ++ rx_desc += next_pkt; ++ } while (rx_desc + pkt_desc_sz < rx_skb->data + rx_skb->len); + +- urb_len -= next_pkt; +- } while (skb); ++ dev_kfree_skb_any(rx_skb); + } + } + diff --git a/package/kernel/mac80211/patches/rtl/058-v6.14-wifi-rtw88-Add-USB-PHY-configuration.patch b/package/kernel/mac80211/patches/rtl/058-v6.14-wifi-rtw88-Add-USB-PHY-configuration.patch new file mode 100644 index 00000000000..606c0fd6fca --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/058-v6.14-wifi-rtw88-Add-USB-PHY-configuration.patch @@ -0,0 +1,141 @@ +From 5b1b9545262b5126a3c2776e7e64ff29765cbe6e Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Wed, 1 Jan 2025 18:16:32 +0200 +Subject: [PATCH] wifi: rtw88: Add USB PHY configuration + +Add some extra configuration for USB devices. Currently only RTL8822BU +version (cut) D needs this. The new code makes use of the existing +usb3_param_8822b array from rtw8822b.c. + +A user reported that TP-Link Archer T3U in USB 3 mode was randomly +disconnecting from USB: + +[ 26.036502] usb 2-2: new SuperSpeed USB device number 3 using xhci_hcd +... +[ 27.576491] usb 2-2: USB disconnect, device number 3 +[ 28.621528] usb 2-2: new SuperSpeed USB device number 4 using xhci_hcd +... +[ 45.984521] usb 2-2: USB disconnect, device number 4 +... +[ 46.845585] usb 2-2: new SuperSpeed USB device number 5 using xhci_hcd +... +[ 94.400380] usb 2-2: USB disconnect, device number 5 +... +[ 95.590421] usb 2-2: new SuperSpeed USB device number 6 using xhci_hcd + +This patch fixes that. + +Link: https://github.com/lwfinger/rtw88/issues/262 +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/9d312b14-0146-4be8-9c50-ef432234db50@gmail.com +--- + drivers/net/wireless/realtek/rtw88/reg.h | 10 ++++ + drivers/net/wireless/realtek/rtw88/usb.c | 68 ++++++++++++++++++++++++ + 2 files changed, 78 insertions(+) + +--- a/drivers/net/wireless/realtek/rtw88/reg.h ++++ b/drivers/net/wireless/realtek/rtw88/reg.h +@@ -871,7 +871,17 @@ + + #define REG_USB_MOD 0xf008 + #define REG_USB3_RXITV 0xf050 ++#define REG_USB2_PHY_ADR 0xfe40 ++#define REG_USB2_PHY_DAT 0xfe41 ++#define REG_USB2_PHY_CMD 0xfe42 ++#define BIT_USB2_PHY_CMD_TRG 0x81 + #define REG_USB_HRPWM 0xfe58 ++#define REG_USB3_PHY_ADR 0xff0c ++#define REG_USB3_PHY_DAT_L 0xff0d ++#define REG_USB3_PHY_DAT_H 0xff0e ++#define BIT_USB3_PHY_ADR_WR BIT(7) ++#define BIT_USB3_PHY_ADR_RD BIT(6) ++#define BIT_USB3_PHY_ADR_MASK GENMASK(5, 0) + + #define RF_MODE 0x00 + #define RF_MODOPT 0x01 +--- a/drivers/net/wireless/realtek/rtw88/usb.c ++++ b/drivers/net/wireless/realtek/rtw88/usb.c +@@ -1079,6 +1079,71 @@ static int rtw_usb_switch_mode(struct rt + return rtw_usb_switch_mode_new(rtwdev); + } + ++#define USB_REG_PAGE 0xf4 ++#define USB_PHY_PAGE0 0x9b ++#define USB_PHY_PAGE1 0xbb ++ ++static void rtw_usb_phy_write(struct rtw_dev *rtwdev, u8 addr, u16 data, ++ enum usb_device_speed speed) ++{ ++ if (speed == USB_SPEED_SUPER) { ++ rtw_write8(rtwdev, REG_USB3_PHY_DAT_L, data & 0xff); ++ rtw_write8(rtwdev, REG_USB3_PHY_DAT_H, data >> 8); ++ rtw_write8(rtwdev, REG_USB3_PHY_ADR, addr | BIT_USB3_PHY_ADR_WR); ++ } else if (speed == USB_SPEED_HIGH) { ++ rtw_write8(rtwdev, REG_USB2_PHY_DAT, data); ++ rtw_write8(rtwdev, REG_USB2_PHY_ADR, addr); ++ rtw_write8(rtwdev, REG_USB2_PHY_CMD, BIT_USB2_PHY_CMD_TRG); ++ } ++} ++ ++static void rtw_usb_page_switch(struct rtw_dev *rtwdev, ++ enum usb_device_speed speed, u8 page) ++{ ++ if (speed == USB_SPEED_SUPER) ++ return; ++ ++ rtw_usb_phy_write(rtwdev, USB_REG_PAGE, page, speed); ++} ++ ++static void rtw_usb_phy_cfg(struct rtw_dev *rtwdev, ++ enum usb_device_speed speed) ++{ ++ const struct rtw_intf_phy_para *para = NULL; ++ u16 offset; ++ ++ if (!rtwdev->chip->intf_table) ++ return; ++ ++ if (speed == USB_SPEED_SUPER) ++ para = rtwdev->chip->intf_table->usb3_para; ++ else if (speed == USB_SPEED_HIGH) ++ para = rtwdev->chip->intf_table->usb2_para; ++ ++ if (!para) ++ return; ++ ++ for ( ; para->offset != 0xffff; para++) { ++ if (!(para->cut_mask & BIT(rtwdev->hal.cut_version))) ++ continue; ++ ++ offset = para->offset; ++ ++ if (para->ip_sel == RTW_IP_SEL_MAC) { ++ rtw_write8(rtwdev, offset, para->value); ++ } else { ++ if (offset > 0x100) ++ rtw_usb_page_switch(rtwdev, speed, USB_PHY_PAGE1); ++ else ++ rtw_usb_page_switch(rtwdev, speed, USB_PHY_PAGE0); ++ ++ offset &= 0xff; ++ ++ rtw_usb_phy_write(rtwdev, offset, para->value, speed); ++ } ++ } ++} ++ + int rtw_usb_probe(struct usb_interface *intf, const struct usb_device_id *id) + { + struct rtw_dev *rtwdev; +@@ -1134,6 +1199,9 @@ int rtw_usb_probe(struct usb_interface * + goto err_destroy_rxwq; + } + ++ rtw_usb_phy_cfg(rtwdev, USB_SPEED_HIGH); ++ rtw_usb_phy_cfg(rtwdev, USB_SPEED_SUPER); ++ + ret = rtw_usb_switch_mode(rtwdev); + if (ret) { + /* Not a fail, but we do need to skip rtw_register_hw. */ diff --git a/package/kernel/mac80211/patches/rtl/059-v6.14-wifi-rtw88-Delete-rf_type-member-of-struct-rtw_sta_i.patch b/package/kernel/mac80211/patches/rtl/059-v6.14-wifi-rtw88-Delete-rf_type-member-of-struct-rtw_sta_i.patch new file mode 100644 index 00000000000..6a4998e783f --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/059-v6.14-wifi-rtw88-Delete-rf_type-member-of-struct-rtw_sta_i.patch @@ -0,0 +1,60 @@ +From 5ad483955acc85dc91b88c7b76dc1429e8ba33bc Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Wed, 1 Jan 2025 18:27:35 +0200 +Subject: [PATCH] wifi: rtw88: Delete rf_type member of struct rtw_sta_info + +It's not used for anything. + +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/b80f7904-c6b4-4d12-a5f9-69ab9b965732@gmail.com +--- + drivers/net/wireless/realtek/rtw88/main.c | 9 ++------- + drivers/net/wireless/realtek/rtw88/main.h | 1 - + 2 files changed, 2 insertions(+), 8 deletions(-) + +--- a/drivers/net/wireless/realtek/rtw88/main.c ++++ b/drivers/net/wireless/realtek/rtw88/main.c +@@ -1217,7 +1217,6 @@ void rtw_update_sta_info(struct rtw_dev + u8 wireless_set; + u8 bw_mode; + u8 rate_id; +- u8 rf_type = RF_1T1R; + u8 stbc_en = 0; + u8 ldpc_en = 0; + u8 tx_num = 1; +@@ -1302,13 +1301,10 @@ void rtw_update_sta_info(struct rtw_dev + break; + } + +- if (sta->deflink.vht_cap.vht_supported && ra_mask & 0xffc00000) { ++ if (sta->deflink.vht_cap.vht_supported && ra_mask & 0xffc00000) + tx_num = 2; +- rf_type = RF_2T2R; +- } else if (sta->deflink.ht_cap.ht_supported && ra_mask & 0xfff00000) { ++ else if (sta->deflink.ht_cap.ht_supported && ra_mask & 0xfff00000) + tx_num = 2; +- rf_type = RF_2T2R; +- } + + rate_id = get_rate_id(wireless_set, bw_mode, tx_num); + +@@ -1319,7 +1315,6 @@ void rtw_update_sta_info(struct rtw_dev + si->bw_mode = bw_mode; + si->stbc_en = stbc_en; + si->ldpc_en = ldpc_en; +- si->rf_type = rf_type; + si->sgi_enable = is_support_sgi; + si->vht_enable = is_vht_enable; + si->ra_mask = ra_mask; +--- a/drivers/net/wireless/realtek/rtw88/main.h ++++ b/drivers/net/wireless/realtek/rtw88/main.h +@@ -757,7 +757,6 @@ struct rtw_sta_info { + u8 mac_id; + u8 rate_id; + enum rtw_bandwidth bw_mode; +- enum rtw_rf_type rf_type; + u8 stbc_en:2; + u8 ldpc_en:2; + bool sgi_enable; diff --git a/package/kernel/mac80211/patches/rtl/060-v6.14-wifi-rtw88-8703b-Fix-RX-TX-issues.patch b/package/kernel/mac80211/patches/rtl/060-v6.14-wifi-rtw88-8703b-Fix-RX-TX-issues.patch new file mode 100644 index 00000000000..0a512a38592 --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/060-v6.14-wifi-rtw88-8703b-Fix-RX-TX-issues.patch @@ -0,0 +1,59 @@ +From a806a8160a0fcaff368bb510c8a52eff37faf727 Mon Sep 17 00:00:00 2001 +From: Vasily Khoruzhick +Date: Thu, 2 Jan 2025 23:50:53 -0800 +Subject: [PATCH] wifi: rtw88: 8703b: Fix RX/TX issues + +Fix 3 typos in 8703b driver. 2 typos in calibration routines are not +fatal and do not seem to have any impact, just fix them to match vendor +driver. + +However the last one in rtw8703b_set_channel_bb() clears too many bits +in REG_OFDM0_TX_PSD_NOISE, causing TX and RX issues (neither rate goes +above MCS0-MCS1). Vendor driver clears only 2 most significant bits. + +With the last typo fixed, the driver is able to reach MCS7 on Pinebook + +Cc: stable@vger.kernel.org +Fixes: 9bb762b3a957 ("wifi: rtw88: Add definitions for 8703b chip") +Signed-off-by: Vasily Khoruzhick +Acked-by: Ping-Ke Shih +Tested-by: Fiona Klute +Tested-by: Andrey Skvortsov +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/20250103075107.1337533-1-anarsoul@gmail.com +--- + drivers/net/wireless/realtek/rtw88/rtw8703b.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +--- a/drivers/net/wireless/realtek/rtw88/rtw8703b.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8703b.c +@@ -903,7 +903,7 @@ static void rtw8703b_set_channel_bb(stru + rtw_write32_mask(rtwdev, REG_FPGA0_RFMOD, BIT_MASK_RFMOD, 0x0); + rtw_write32_mask(rtwdev, REG_FPGA1_RFMOD, BIT_MASK_RFMOD, 0x0); + rtw_write32_mask(rtwdev, REG_OFDM0_TX_PSD_NOISE, +- GENMASK(31, 20), 0x0); ++ GENMASK(31, 30), 0x0); + rtw_write32(rtwdev, REG_BBRX_DFIR, 0x4A880000); + rtw_write32(rtwdev, REG_OFDM0_A_TX_AFE, 0x19F60000); + break; +@@ -1198,9 +1198,9 @@ static u8 rtw8703b_iqk_rx_path(struct rt + rtw_write32(rtwdev, REG_RXIQK_TONE_A_11N, 0x38008c1c); + rtw_write32(rtwdev, REG_TX_IQK_TONE_B, 0x38008c1c); + rtw_write32(rtwdev, REG_RX_IQK_TONE_B, 0x38008c1c); +- rtw_write32(rtwdev, REG_TXIQK_PI_A_11N, 0x8216000f); ++ rtw_write32(rtwdev, REG_TXIQK_PI_A_11N, 0x8214030f); + rtw_write32(rtwdev, REG_RXIQK_PI_A_11N, 0x28110000); +- rtw_write32(rtwdev, REG_TXIQK_PI_B, 0x28110000); ++ rtw_write32(rtwdev, REG_TXIQK_PI_B, 0x82110000); + rtw_write32(rtwdev, REG_RXIQK_PI_B, 0x28110000); + + /* LOK setting */ +@@ -1372,7 +1372,7 @@ void rtw8703b_iqk_fill_a_matrix(struct r + return; + + tmp_rx_iqi |= FIELD_PREP(BIT_MASK_RXIQ_S1_X, result[IQK_S1_RX_X]); +- tmp_rx_iqi |= FIELD_PREP(BIT_MASK_RXIQ_S1_Y1, result[IQK_S1_RX_X]); ++ tmp_rx_iqi |= FIELD_PREP(BIT_MASK_RXIQ_S1_Y1, result[IQK_S1_RX_Y]); + rtw_write32(rtwdev, REG_A_RXIQI, tmp_rx_iqi); + rtw_write32_mask(rtwdev, REG_RXIQK_MATRIX_LSB_11N, BIT_MASK_RXIQ_S1_Y2, + BIT_SET_RXIQ_S1_Y2(result[IQK_S1_RX_Y])); diff --git a/package/kernel/mac80211/patches/rtl/061-v6.14-wifi-rtw88-sdio-Fix-disconnection-after-beacon-loss.patch b/package/kernel/mac80211/patches/rtl/061-v6.14-wifi-rtw88-sdio-Fix-disconnection-after-beacon-loss.patch new file mode 100644 index 00000000000..790dfe04203 --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/061-v6.14-wifi-rtw88-sdio-Fix-disconnection-after-beacon-loss.patch @@ -0,0 +1,31 @@ +From fb2fcfbe5eef9ae26b0425978435ae1308951e51 Mon Sep 17 00:00:00 2001 +From: Fiona Klute +Date: Mon, 6 Jan 2025 15:54:34 +0200 +Subject: [PATCH] wifi: rtw88: sdio: Fix disconnection after beacon loss + +This is the equivalent of commit 28818b4d871b ("wifi: rtw88: usb: Fix +disconnection after beacon loss") for SDIO chips. +Tested on Pinephone (RTL8723CS), random disconnections became rare, +instead of a frequent nuisance. + +Cc: stable@vger.kernel.org +Signed-off-by: Fiona Klute +Tested-by: Vasily Khoruzhick # Tested on Pinebook +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/20250106135434.35936-1-fiona.klute@gmx.de +--- + drivers/net/wireless/realtek/rtw88/sdio.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/drivers/net/wireless/realtek/rtw88/sdio.c ++++ b/drivers/net/wireless/realtek/rtw88/sdio.c +@@ -1192,6 +1192,8 @@ static void rtw_sdio_indicate_tx_status( + struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); + struct ieee80211_hw *hw = rtwdev->hw; + ++ skb_pull(skb, rtwdev->chip->tx_pkt_desc_sz); ++ + /* enqueue to wait for tx report */ + if (info->flags & IEEE80211_TX_CTL_REQ_TX_STATUS) { + rtw_tx_report_enqueue(rtwdev, skb, tx_data->sn); diff --git a/package/kernel/mac80211/patches/rtl/062-v6.14-wifi-rtw88-Add-support-for-LED-blinking.patch b/package/kernel/mac80211/patches/rtl/062-v6.14-wifi-rtw88-Add-support-for-LED-blinking.patch new file mode 100644 index 00000000000..b261d02e3f6 --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/062-v6.14-wifi-rtw88-Add-support-for-LED-blinking.patch @@ -0,0 +1,424 @@ +From 4b6652bc6d8d5fb0648b3a7a16ef8af4e0345bcd Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Wed, 8 Jan 2025 13:41:23 +0200 +Subject: [PATCH] wifi: rtw88: Add support for LED blinking + +Register a struct led_classdev with the kernel's LED subsystem and +create a throughput-based trigger for it. Then mac80211 makes the LED +blink. + +Tested with Tenda U12 (RTL8812AU), Tenda U9 (RTL8811CU), TP-Link Archer +T2U Nano (RTL8811AU), TP-Link Archer T3U Plus (RTL8812BU), Edimax +EW-7611UCB (RTL8821AU), LM842 (RTL8822CU). + +Also tested with devices which don't have LEDs: the laptop's internal +RTL8822CE and a no-name RTL8723DU. + +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/6c43451f-ab2f-4e76-ac6e-ff5a18dd981d@gmail.com +--- + drivers/net/wireless/realtek/rtw88/Makefile | 2 + + drivers/net/wireless/realtek/rtw88/led.c | 73 +++++++++++++++++++ + drivers/net/wireless/realtek/rtw88/led.h | 25 +++++++ + drivers/net/wireless/realtek/rtw88/main.c | 12 ++- + drivers/net/wireless/realtek/rtw88/main.h | 5 ++ + drivers/net/wireless/realtek/rtw88/reg.h | 12 +++ + drivers/net/wireless/realtek/rtw88/rtw8812a.c | 17 +++++ + drivers/net/wireless/realtek/rtw88/rtw8821a.c | 26 +++++++ + drivers/net/wireless/realtek/rtw88/rtw8821c.c | 19 +++++ + drivers/net/wireless/realtek/rtw88/rtw8822b.c | 19 +++++ + drivers/net/wireless/realtek/rtw88/rtw8822c.c | 19 +++++ + 11 files changed, 227 insertions(+), 2 deletions(-) + create mode 100644 drivers/net/wireless/realtek/rtw88/led.c + create mode 100644 drivers/net/wireless/realtek/rtw88/led.h + +--- a/drivers/net/wireless/realtek/rtw88/Makefile ++++ b/drivers/net/wireless/realtek/rtw88/Makefile +@@ -20,6 +20,8 @@ rtw88_core-y += main.o \ + + rtw88_core-$(CONFIG_PM) += wow.o + ++rtw88_core-$(CONFIG_LEDS_CLASS) += led.o ++ + obj-$(CPTCFG_RTW88_8822B) += rtw88_8822b.o + rtw88_8822b-objs := rtw8822b.o rtw8822b_table.o + +--- /dev/null ++++ b/drivers/net/wireless/realtek/rtw88/led.c +@@ -0,0 +1,73 @@ ++// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause ++/* Copyright(c) 2025 Realtek Corporation ++ */ ++ ++#include "main.h" ++#include "debug.h" ++#include "led.h" ++ ++static int rtw_led_set_blocking(struct led_classdev *led, ++ enum led_brightness brightness) ++{ ++ struct rtw_dev *rtwdev = container_of(led, struct rtw_dev, led_cdev); ++ ++ rtwdev->chip->ops->led_set(led, brightness); ++ ++ return 0; ++} ++ ++void rtw_led_init(struct rtw_dev *rtwdev) ++{ ++ static const struct ieee80211_tpt_blink rtw_tpt_blink[] = { ++ { .throughput = 0 * 1024, .blink_time = 334 }, ++ { .throughput = 1 * 1024, .blink_time = 260 }, ++ { .throughput = 5 * 1024, .blink_time = 220 }, ++ { .throughput = 10 * 1024, .blink_time = 190 }, ++ { .throughput = 20 * 1024, .blink_time = 170 }, ++ { .throughput = 50 * 1024, .blink_time = 150 }, ++ { .throughput = 70 * 1024, .blink_time = 130 }, ++ { .throughput = 100 * 1024, .blink_time = 110 }, ++ { .throughput = 200 * 1024, .blink_time = 80 }, ++ { .throughput = 300 * 1024, .blink_time = 50 }, ++ }; ++ struct led_classdev *led = &rtwdev->led_cdev; ++ int err; ++ ++ if (!rtwdev->chip->ops->led_set) ++ return; ++ ++ if (rtw_hci_type(rtwdev) == RTW_HCI_TYPE_PCIE) ++ led->brightness_set = rtwdev->chip->ops->led_set; ++ else ++ led->brightness_set_blocking = rtw_led_set_blocking; ++ ++ snprintf(rtwdev->led_name, sizeof(rtwdev->led_name), ++ "rtw88-%s", dev_name(rtwdev->dev)); ++ ++ led->name = rtwdev->led_name; ++ led->max_brightness = LED_ON; ++ led->default_trigger = ++ ieee80211_create_tpt_led_trigger(rtwdev->hw, ++ IEEE80211_TPT_LEDTRIG_FL_RADIO, ++ rtw_tpt_blink, ++ ARRAY_SIZE(rtw_tpt_blink)); ++ ++ err = led_classdev_register(rtwdev->dev, led); ++ if (err) { ++ rtw_warn(rtwdev, "Failed to register the LED, error %d\n", err); ++ return; ++ } ++ ++ rtwdev->led_registered = true; ++} ++ ++void rtw_led_deinit(struct rtw_dev *rtwdev) ++{ ++ struct led_classdev *led = &rtwdev->led_cdev; ++ ++ if (!rtwdev->led_registered) ++ return; ++ ++ rtwdev->chip->ops->led_set(led, LED_OFF); ++ led_classdev_unregister(led); ++} +--- /dev/null ++++ b/drivers/net/wireless/realtek/rtw88/led.h +@@ -0,0 +1,25 @@ ++/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ ++/* Copyright(c) 2025 Realtek Corporation ++ */ ++ ++#ifndef __RTW_LED_H ++#define __RTW_LED_H ++ ++#ifdef CONFIG_LEDS_CLASS ++ ++void rtw_led_init(struct rtw_dev *rtwdev); ++void rtw_led_deinit(struct rtw_dev *rtwdev); ++ ++#else ++ ++static inline void rtw_led_init(struct rtw_dev *rtwdev) ++{ ++} ++ ++static inline void rtw_led_deinit(struct rtw_dev *rtwdev) ++{ ++} ++ ++#endif ++ ++#endif +--- a/drivers/net/wireless/realtek/rtw88/main.c ++++ b/drivers/net/wireless/realtek/rtw88/main.c +@@ -19,6 +19,7 @@ + #include "bf.h" + #include "sar.h" + #include "sdio.h" ++#include "led.h" + + bool rtw_disable_lps_deep_mode; + EXPORT_SYMBOL(rtw_disable_lps_deep_mode); +@@ -2292,16 +2293,18 @@ int rtw_register_hw(struct rtw_dev *rtwd + return ret; + } + ++ rtw_led_init(rtwdev); ++ + ret = ieee80211_register_hw(hw); + if (ret) { + rtw_err(rtwdev, "failed to register hw\n"); +- return ret; ++ goto led_deinit; + } + + ret = rtw_regd_hint(rtwdev); + if (ret) { + rtw_err(rtwdev, "failed to hint regd\n"); +- return ret; ++ goto led_deinit; + } + + rtw_debugfs_init(rtwdev); +@@ -2310,6 +2313,10 @@ int rtw_register_hw(struct rtw_dev *rtwd + rtwdev->bf_info.bfer_su_cnt = 0; + + return 0; ++ ++led_deinit: ++ rtw_led_deinit(rtwdev); ++ return ret; + } + EXPORT_SYMBOL(rtw_register_hw); + +@@ -2320,6 +2327,7 @@ void rtw_unregister_hw(struct rtw_dev *r + ieee80211_unregister_hw(hw); + rtw_unset_supported_band(hw, chip); + rtw_debugfs_deinit(rtwdev); ++ rtw_led_deinit(rtwdev); + } + EXPORT_SYMBOL(rtw_unregister_hw); + +--- a/drivers/net/wireless/realtek/rtw88/main.h ++++ b/drivers/net/wireless/realtek/rtw88/main.h +@@ -887,6 +887,7 @@ struct rtw_chip_ops { + bool is_tx2_path); + void (*config_txrx_mode)(struct rtw_dev *rtwdev, u8 tx_path, + u8 rx_path, bool is_tx2_path); ++ void (*led_set)(struct led_classdev *led, enum led_brightness brightness); + /* for USB/SDIO only */ + void (*fill_txdesc_checksum)(struct rtw_dev *rtwdev, + struct rtw_tx_pkt_info *pkt_info, +@@ -2097,6 +2098,10 @@ struct rtw_dev { + struct completion fw_scan_density; + bool ap_active; + ++ bool led_registered; ++ char led_name[32]; ++ struct led_classdev led_cdev; ++ + /* hci related data, must be last */ + u8 priv[] __aligned(sizeof(void *)); + }; +--- a/drivers/net/wireless/realtek/rtw88/reg.h ++++ b/drivers/net/wireless/realtek/rtw88/reg.h +@@ -78,7 +78,19 @@ + #define BIT_PAPE_SEL_EN BIT(25) + #define BIT_DPDT_WL_SEL BIT(24) + #define BIT_DPDT_SEL_EN BIT(23) ++#define BIT_GPIO13_14_WL_CTRL_EN BIT(22) ++#define BIT_LED2_SV BIT(19) ++#define BIT_LED2_CM GENMASK(18, 16) ++#define BIT_LED1_SV BIT(11) ++#define BIT_LED1_CM GENMASK(10, 8) ++#define BIT_LED0_SV BIT(3) ++#define BIT_LED0_CM GENMASK(2, 0) ++#define BIT_LED_MODE_SW_CTRL 0 ++#define BIT_LED_MODE_RX 6 ++#define BIT_LED_MODE_TX 4 ++#define BIT_LED_MODE_TRX 2 + #define REG_LEDCFG2 0x004E ++#define REG_GPIO_PIN_CTRL_2 0x0060 + #define REG_PAD_CTRL1 0x0064 + #define BIT_BT_BTG_SEL BIT(31) + #define BIT_PAPE_WLBT_SEL BIT(29) +--- a/drivers/net/wireless/realtek/rtw88/rtw8812a.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8812a.c +@@ -868,6 +868,22 @@ static void rtw8812a_pwr_track(struct rt + dm_info->pwr_trk_triggered = false; + } + ++static void rtw8812a_led_set(struct led_classdev *led, ++ enum led_brightness brightness) ++{ ++ struct rtw_dev *rtwdev = container_of(led, struct rtw_dev, led_cdev); ++ u8 ledcfg; ++ ++ ledcfg = rtw_read8(rtwdev, REG_LED_CFG); ++ ledcfg &= BIT(6) | BIT(4); ++ ledcfg |= BIT(5); ++ ++ if (brightness == LED_OFF) ++ ledcfg |= BIT(3); ++ ++ rtw_write8(rtwdev, REG_LED_CFG, ledcfg); ++} ++ + static void rtw8812a_fill_txdesc_checksum(struct rtw_dev *rtwdev, + struct rtw_tx_pkt_info *pkt_info, + u8 *txdesc) +@@ -916,6 +932,7 @@ static const struct rtw_chip_ops rtw8812 + .config_bfee = NULL, + .set_gid_table = NULL, + .cfg_csi_rate = NULL, ++ .led_set = rtw8812a_led_set, + .fill_txdesc_checksum = rtw8812a_fill_txdesc_checksum, + .coex_set_init = rtw8812a_coex_cfg_init, + .coex_set_ant_switch = NULL, +--- a/drivers/net/wireless/realtek/rtw88/rtw8821a.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8821a.c +@@ -706,6 +706,31 @@ static void rtw8821a_pwr_track(struct rt + dm_info->pwr_trk_triggered = false; + } + ++static void rtw8821a_led_set(struct led_classdev *led, ++ enum led_brightness brightness) ++{ ++ struct rtw_dev *rtwdev = container_of(led, struct rtw_dev, led_cdev); ++ u32 gpio8_cfg; ++ u8 ledcfg; ++ ++ if (brightness == LED_OFF) { ++ gpio8_cfg = rtw_read32(rtwdev, REG_GPIO_PIN_CTRL_2); ++ gpio8_cfg &= ~BIT(24); ++ gpio8_cfg |= BIT(16) | BIT(8); ++ rtw_write32(rtwdev, REG_GPIO_PIN_CTRL_2, gpio8_cfg); ++ } else { ++ ledcfg = rtw_read8(rtwdev, REG_LED_CFG + 2); ++ gpio8_cfg = rtw_read32(rtwdev, REG_GPIO_PIN_CTRL_2); ++ ++ ledcfg &= BIT(7) | BIT(6); ++ rtw_write8(rtwdev, REG_LED_CFG + 2, ledcfg); ++ ++ gpio8_cfg &= ~(BIT(24) | BIT(8)); ++ gpio8_cfg |= BIT(16); ++ rtw_write32(rtwdev, REG_GPIO_PIN_CTRL_2, gpio8_cfg); ++ } ++} ++ + static void rtw8821a_fill_txdesc_checksum(struct rtw_dev *rtwdev, + struct rtw_tx_pkt_info *pkt_info, + u8 *txdesc) +@@ -853,6 +878,7 @@ static const struct rtw_chip_ops rtw8821 + .config_bfee = NULL, + .set_gid_table = NULL, + .cfg_csi_rate = NULL, ++ .led_set = rtw8821a_led_set, + .fill_txdesc_checksum = rtw8821a_fill_txdesc_checksum, + .coex_set_init = rtw8821a_coex_cfg_init, + .coex_set_ant_switch = rtw8821a_coex_cfg_ant_switch, +--- a/drivers/net/wireless/realtek/rtw88/rtw8821c.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.c +@@ -1206,6 +1206,24 @@ static void rtw8821c_phy_cck_pd_set(stru + dm_info->cck_pd_default + new_lvl * 2); + } + ++static void rtw8821c_led_set(struct led_classdev *led, ++ enum led_brightness brightness) ++{ ++ struct rtw_dev *rtwdev = container_of(led, struct rtw_dev, led_cdev); ++ u32 ledcfg; ++ ++ ledcfg = rtw_read32(rtwdev, REG_LED_CFG); ++ u32p_replace_bits(&ledcfg, BIT_LED_MODE_SW_CTRL, BIT_LED2_CM); ++ ledcfg &= ~BIT_GPIO13_14_WL_CTRL_EN; ++ ++ if (brightness == LED_OFF) ++ ledcfg |= BIT_LED2_SV; ++ else ++ ledcfg &= ~BIT_LED2_SV; ++ ++ rtw_write32(rtwdev, REG_LED_CFG, ledcfg); ++} ++ + static void rtw8821c_fill_txdesc_checksum(struct rtw_dev *rtwdev, + struct rtw_tx_pkt_info *pkt_info, + u8 *txdesc) +@@ -1655,6 +1673,7 @@ static const struct rtw_chip_ops rtw8821 + .config_bfee = rtw8821c_bf_config_bfee, + .set_gid_table = rtw_bf_set_gid_table, + .cfg_csi_rate = rtw_bf_cfg_csi_rate, ++ .led_set = rtw8821c_led_set, + .fill_txdesc_checksum = rtw8821c_fill_txdesc_checksum, + + .coex_set_init = rtw8821c_coex_cfg_init, +--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c +@@ -1566,6 +1566,24 @@ static void rtw8822b_adaptivity(struct r + rtw_phy_set_edcca_th(rtwdev, l2h, h2l); + } + ++static void rtw8822b_led_set(struct led_classdev *led, ++ enum led_brightness brightness) ++{ ++ struct rtw_dev *rtwdev = container_of(led, struct rtw_dev, led_cdev); ++ u32 ledcfg; ++ ++ ledcfg = rtw_read32(rtwdev, REG_LED_CFG); ++ u32p_replace_bits(&ledcfg, BIT_LED_MODE_SW_CTRL, BIT_LED2_CM); ++ ledcfg &= ~BIT_GPIO13_14_WL_CTRL_EN; ++ ++ if (brightness == LED_OFF) ++ ledcfg |= BIT_LED2_SV; ++ else ++ ledcfg &= ~BIT_LED2_SV; ++ ++ rtw_write32(rtwdev, REG_LED_CFG, ledcfg); ++} ++ + static void rtw8822b_fill_txdesc_checksum(struct rtw_dev *rtwdev, + struct rtw_tx_pkt_info *pkt_info, + u8 *txdesc) +@@ -2146,6 +2164,7 @@ static const struct rtw_chip_ops rtw8822 + .cfg_csi_rate = rtw_bf_cfg_csi_rate, + .adaptivity_init = rtw8822b_adaptivity_init, + .adaptivity = rtw8822b_adaptivity, ++ .led_set = rtw8822b_led_set, + .fill_txdesc_checksum = rtw8822b_fill_txdesc_checksum, + + .coex_set_init = rtw8822b_coex_cfg_init, +--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c +@@ -4537,6 +4537,24 @@ static void rtw8822c_adaptivity(struct r + rtw_phy_set_edcca_th(rtwdev, l2h, h2l); + } + ++static void rtw8822c_led_set(struct led_classdev *led, ++ enum led_brightness brightness) ++{ ++ struct rtw_dev *rtwdev = container_of(led, struct rtw_dev, led_cdev); ++ u32 ledcfg; ++ ++ ledcfg = rtw_read32(rtwdev, REG_LED_CFG); ++ u32p_replace_bits(&ledcfg, BIT_LED_MODE_SW_CTRL, BIT_LED2_CM); ++ ledcfg &= ~BIT_GPIO13_14_WL_CTRL_EN; ++ ++ if (brightness == LED_OFF) ++ ledcfg |= BIT_LED2_SV; ++ else ++ ledcfg &= ~BIT_LED2_SV; ++ ++ rtw_write32(rtwdev, REG_LED_CFG, ledcfg); ++} ++ + static void rtw8822c_fill_txdesc_checksum(struct rtw_dev *rtwdev, + struct rtw_tx_pkt_info *pkt_info, + u8 *txdesc) +@@ -4964,6 +4982,7 @@ static const struct rtw_chip_ops rtw8822 + .cfo_track = rtw8822c_cfo_track, + .config_tx_path = rtw8822c_config_tx_path, + .config_txrx_mode = rtw8822c_config_trx_mode, ++ .led_set = rtw8822c_led_set, + .fill_txdesc_checksum = rtw8822c_fill_txdesc_checksum, + + .coex_set_init = rtw8822c_coex_cfg_init, diff --git a/package/kernel/mac80211/patches/rtl/063-v6.14-wifi-rtw88-add-RTW88_LEDS-depends-on-LEDS_CLASS-to-K.patch b/package/kernel/mac80211/patches/rtl/063-v6.14-wifi-rtw88-add-RTW88_LEDS-depends-on-LEDS_CLASS-to-K.patch new file mode 100644 index 00000000000..f1f09fde1a0 --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/063-v6.14-wifi-rtw88-add-RTW88_LEDS-depends-on-LEDS_CLASS-to-K.patch @@ -0,0 +1,73 @@ +From b4bfbc50b1b92a0815800eb1231f73bfc917af03 Mon Sep 17 00:00:00 2001 +From: Ping-Ke Shih +Date: Thu, 16 Jan 2025 20:04:24 +0800 +Subject: [PATCH] wifi: rtw88: add RTW88_LEDS depends on LEDS_CLASS to Kconfig + +When using allmodconfig, .config has CONFIG_LEDS_CLASS=m but +autoconf.h has CONFIG_LEDS_CLASS_MODULE (additional suffix _MODULE) +instead of CONFIG_LEDS_CLASS, which condition CONFIG_LEDS_CLASS in +rtw88/led.h can't work properly. + +Add RTW88_LEDS to Kconfig, and use it as condition to fix this problem. + +drivers/net/wireless/realtek/rtw88/led.c:19:6: error: redefinition of 'rtw_led_init' + 19 | void rtw_led_init(struct rtw_dev *rtwdev) + | ^~~~~~~~~~~~ +In file included from drivers/net/wireless/realtek/rtw88/led.c:7: +drivers/net/wireless/realtek/rtw88/led.h:15:20: note: previous definition of 'rtw_led_init' with type 'void(struct rtw_dev *)' + 15 | static inline void rtw_led_init(struct rtw_dev *rtwdev) + | ^~~~~~~~~~~~ +drivers/net/wireless/realtek/rtw88/led.c:64:6: error: redefinition of 'rtw_led_deinit' + 64 | void rtw_led_deinit(struct rtw_dev *rtwdev) + | ^~~~~~~~~~~~~~ +drivers/net/wireless/realtek/rtw88/led.h:19:20: note: previous definition of 'rtw_led_deinit' with type 'void(struct rtw_dev *)' + 19 | static inline void rtw_led_deinit(struct rtw_dev *rtwdev) + | ^~~~~~~~~~~~~~ + +Reported-by: Stephen Rothwell +Closes: https://lore.kernel.org/linux-wireless/e19a87ad9cd54bfa9907f3a043b25d30@realtek.com/T/#me407832de1040ce22e53517bcb18e322ad0e2260 +Fixes: 4b6652bc6d8d ("wifi: rtw88: Add support for LED blinking") +Cc: Bitterblue Smith +Signed-off-by: Ping-Ke Shih +Signed-off-by: Kalle Valo +Link: https://patch.msgid.link/20250116120424.13174-1-pkshih@realtek.com +--- + drivers/net/wireless/realtek/rtw88/Kconfig | 5 +++++ + drivers/net/wireless/realtek/rtw88/Makefile | 2 +- + drivers/net/wireless/realtek/rtw88/led.h | 2 +- + 3 files changed, 7 insertions(+), 2 deletions(-) + +--- a/drivers/net/wireless/realtek/rtw88/Kconfig ++++ b/drivers/net/wireless/realtek/rtw88/Kconfig +@@ -267,4 +267,9 @@ config RTW88_DEBUGFS + + If unsure, say Y to simplify debug problems + ++config RTW88_LEDS ++ bool ++ depends on LEDS_CLASS=y || LEDS_CLASS=MAC80211 ++ default y ++ + endif +--- a/drivers/net/wireless/realtek/rtw88/Makefile ++++ b/drivers/net/wireless/realtek/rtw88/Makefile +@@ -20,7 +20,7 @@ rtw88_core-y += main.o \ + + rtw88_core-$(CONFIG_PM) += wow.o + +-rtw88_core-$(CONFIG_LEDS_CLASS) += led.o ++rtw88_core-$(CPTCFG_RTW88_LEDS) += led.o + + obj-$(CPTCFG_RTW88_8822B) += rtw88_8822b.o + rtw88_8822b-objs := rtw8822b.o rtw8822b_table.o +--- a/drivers/net/wireless/realtek/rtw88/led.h ++++ b/drivers/net/wireless/realtek/rtw88/led.h +@@ -5,7 +5,7 @@ + #ifndef __RTW_LED_H + #define __RTW_LED_H + +-#ifdef CONFIG_LEDS_CLASS ++#ifdef CPTCFG_RTW88_LEDS + + void rtw_led_init(struct rtw_dev *rtwdev); + void rtw_led_deinit(struct rtw_dev *rtwdev); diff --git a/package/kernel/mac80211/patches/rtl/064-v6.14.9-wifi-rtw88-Don-t-use-static-local-variable-in-rtw882.patch b/package/kernel/mac80211/patches/rtl/064-v6.14.9-wifi-rtw88-Don-t-use-static-local-variable-in-rtw882.patch new file mode 100644 index 00000000000..3b3550d9bec --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/064-v6.14.9-wifi-rtw88-Don-t-use-static-local-variable-in-rtw882.patch @@ -0,0 +1,68 @@ +From 00451eb3bec763f708e7e58326468c1e575e5a66 Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Sun, 26 Jan 2025 16:03:11 +0200 +Subject: [PATCH] wifi: rtw88: Don't use static local variable in + rtw8822b_set_tx_power_index_by_rate + +Some users want to plug two identical USB devices at the same time. +This static variable could theoretically cause them to use incorrect +TX power values. + +Move the variable to the caller and pass a pointer to it to +rtw8822b_set_tx_power_index_by_rate(). + +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/8a60f581-0ab5-4d98-a97d-dd83b605008f@gmail.com +--- + drivers/net/wireless/realtek/rtw88/rtw8822b.c | 14 ++++++++------ + 1 file changed, 8 insertions(+), 6 deletions(-) + +--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c +@@ -935,11 +935,11 @@ static void query_phy_status(struct rtw_ + } + + static void +-rtw8822b_set_tx_power_index_by_rate(struct rtw_dev *rtwdev, u8 path, u8 rs) ++rtw8822b_set_tx_power_index_by_rate(struct rtw_dev *rtwdev, u8 path, ++ u8 rs, u32 *phy_pwr_idx) + { + struct rtw_hal *hal = &rtwdev->hal; + static const u32 offset_txagc[2] = {0x1d00, 0x1d80}; +- static u32 phy_pwr_idx; + u8 rate, rate_idx, pwr_index, shift; + int j; + +@@ -947,12 +947,12 @@ rtw8822b_set_tx_power_index_by_rate(stru + rate = rtw_rate_section[rs][j]; + pwr_index = hal->tx_pwr_tbl[path][rate]; + shift = rate & 0x3; +- phy_pwr_idx |= ((u32)pwr_index << (shift * 8)); ++ *phy_pwr_idx |= ((u32)pwr_index << (shift * 8)); + if (shift == 0x3) { + rate_idx = rate & 0xfc; + rtw_write32(rtwdev, offset_txagc[path] + rate_idx, +- phy_pwr_idx); +- phy_pwr_idx = 0; ++ *phy_pwr_idx); ++ *phy_pwr_idx = 0; + } + } + } +@@ -960,11 +960,13 @@ rtw8822b_set_tx_power_index_by_rate(stru + static void rtw8822b_set_tx_power_index(struct rtw_dev *rtwdev) + { + struct rtw_hal *hal = &rtwdev->hal; ++ u32 phy_pwr_idx = 0; + int rs, path; + + for (path = 0; path < hal->rf_path_num; path++) { + for (rs = 0; rs < RTW_RATE_SECTION_MAX; rs++) +- rtw8822b_set_tx_power_index_by_rate(rtwdev, path, rs); ++ rtw8822b_set_tx_power_index_by_rate(rtwdev, path, rs, ++ &phy_pwr_idx); + } + } + diff --git a/package/kernel/mac80211/patches/rtl/065-v6.15-wifi-rtw88-Don-t-use-static-local-variable-in-rtw882.patch b/package/kernel/mac80211/patches/rtl/065-v6.15-wifi-rtw88-Don-t-use-static-local-variable-in-rtw882.patch new file mode 100644 index 00000000000..ff04eead91c --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/065-v6.15-wifi-rtw88-Don-t-use-static-local-variable-in-rtw882.patch @@ -0,0 +1,71 @@ +From 0d1d165eff9d6cfad51113e18d9d8c9a8de27d6d Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Sun, 26 Jan 2025 16:04:21 +0200 +Subject: [PATCH] wifi: rtw88: Don't use static local variable in + rtw8821c_set_tx_power_index_by_rate + +Some users want to plug two identical USB devices at the same time. +This static variable could theoretically cause them to use incorrect +TX power values. + +Move the variable to the caller and pass a pointer to it to +rtw8821c_set_tx_power_index_by_rate(). + +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/fe42858c-9b9f-4f03-9aaa-737472c2cd90@gmail.com +--- + drivers/net/wireless/realtek/rtw88/rtw8821c.c | 14 ++++++++------ + 1 file changed, 8 insertions(+), 6 deletions(-) + +--- a/drivers/net/wireless/realtek/rtw88/rtw8821c.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.c +@@ -680,11 +680,11 @@ static void query_phy_status(struct rtw_ + } + + static void +-rtw8821c_set_tx_power_index_by_rate(struct rtw_dev *rtwdev, u8 path, u8 rs) ++rtw8821c_set_tx_power_index_by_rate(struct rtw_dev *rtwdev, u8 path, ++ u8 rs, u32 *phy_pwr_idx) + { + struct rtw_hal *hal = &rtwdev->hal; + static const u32 offset_txagc[2] = {0x1d00, 0x1d80}; +- static u32 phy_pwr_idx; + u8 rate, rate_idx, pwr_index, shift; + int j; + +@@ -692,12 +692,12 @@ rtw8821c_set_tx_power_index_by_rate(stru + rate = rtw_rate_section[rs][j]; + pwr_index = hal->tx_pwr_tbl[path][rate]; + shift = rate & 0x3; +- phy_pwr_idx |= ((u32)pwr_index << (shift * 8)); ++ *phy_pwr_idx |= ((u32)pwr_index << (shift * 8)); + if (shift == 0x3 || rate == DESC_RATEVHT1SS_MCS9) { + rate_idx = rate & 0xfc; + rtw_write32(rtwdev, offset_txagc[path] + rate_idx, +- phy_pwr_idx); +- phy_pwr_idx = 0; ++ *phy_pwr_idx); ++ *phy_pwr_idx = 0; + } + } + } +@@ -705,6 +705,7 @@ rtw8821c_set_tx_power_index_by_rate(stru + static void rtw8821c_set_tx_power_index(struct rtw_dev *rtwdev) + { + struct rtw_hal *hal = &rtwdev->hal; ++ u32 phy_pwr_idx = 0; + int rs, path; + + for (path = 0; path < hal->rf_path_num; path++) { +@@ -712,7 +713,8 @@ static void rtw8821c_set_tx_power_index( + if (rs == RTW_RATE_SECTION_HT_2S || + rs == RTW_RATE_SECTION_VHT_2S) + continue; +- rtw8821c_set_tx_power_index_by_rate(rtwdev, path, rs); ++ rtw8821c_set_tx_power_index_by_rate(rtwdev, path, rs, ++ &phy_pwr_idx); + } + } + } diff --git a/package/kernel/mac80211/patches/rtl/066-v6.15-wifi-rtw88-Fix-a-typo-of-debug-message-in-rtw8723d_i.patch b/package/kernel/mac80211/patches/rtl/066-v6.15-wifi-rtw88-Fix-a-typo-of-debug-message-in-rtw8723d_i.patch new file mode 100644 index 00000000000..a2404bafe8c --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/066-v6.15-wifi-rtw88-Fix-a-typo-of-debug-message-in-rtw8723d_i.patch @@ -0,0 +1,39 @@ +From 105dc94233e48ff30e572a50fb39d7e3dec810fa Mon Sep 17 00:00:00 2001 +From: Andrew Kreimer +Date: Mon, 3 Feb 2025 20:08:27 +0200 +Subject: [PATCH] wifi: rtw88: Fix a typo of debug message in + rtw8723d_iqk_check_tx_failed() + +There is a typo in debug messages: + - afer -> after + +Fix it via codespell. + +Signed-off-by: Andrew Kreimer +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/20250203180913.5435-1-algonell@gmail.com +--- + drivers/net/wireless/realtek/rtw88/rtw8723d.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/net/wireless/realtek/rtw88/rtw8723d.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8723d.c +@@ -444,7 +444,7 @@ static u8 rtw8723d_iqk_check_tx_failed(s + rtw_read32(rtwdev, REG_IQK_RES_TX), + rtw_read32(rtwdev, REG_IQK_RES_TY)); + rtw_dbg(rtwdev, RTW_DBG_RFK, +- "[IQK] 0xe90(before IQK)= 0x%x, 0xe98(afer IQK) = 0x%x\n", ++ "[IQK] 0xe90(before IQK)= 0x%x, 0xe98(after IQK) = 0x%x\n", + rtw_read32(rtwdev, 0xe90), + rtw_read32(rtwdev, 0xe98)); + +@@ -472,7 +472,7 @@ static u8 rtw8723d_iqk_check_rx_failed(s + rtw_read32(rtwdev, REG_IQK_RES_RY)); + + rtw_dbg(rtwdev, RTW_DBG_RFK, +- "[IQK] 0xea0(before IQK)= 0x%x, 0xea8(afer IQK) = 0x%x\n", ++ "[IQK] 0xea0(before IQK)= 0x%x, 0xea8(after IQK) = 0x%x\n", + rtw_read32(rtwdev, 0xea0), + rtw_read32(rtwdev, 0xea8)); + diff --git a/package/kernel/mac80211/patches/rtl/067-v6.14.9-wifi-rtw88-Fix-__rtw_download_firmware-for-RTL8814AU.patch b/package/kernel/mac80211/patches/rtl/067-v6.14.9-wifi-rtw88-Fix-__rtw_download_firmware-for-RTL8814AU.patch new file mode 100644 index 00000000000..4de12557641 --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/067-v6.14.9-wifi-rtw88-Fix-__rtw_download_firmware-for-RTL8814AU.patch @@ -0,0 +1,39 @@ +From 8425f5c8f04dbcf11ade78f984a494fc0b90e7a0 Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Tue, 4 Feb 2025 20:36:56 +0200 +Subject: [PATCH] wifi: rtw88: Fix __rtw_download_firmware() for RTL8814AU + +Don't call ltecoex_read_reg() and ltecoex_reg_write() when the +ltecoex_addr member of struct rtw_chip_info is NULL. The RTL8814AU +doesn't have this feature. + +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/55b5641f-094e-4f94-9f79-ac053733f2cf@gmail.com +--- + drivers/net/wireless/realtek/rtw88/mac.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +--- a/drivers/net/wireless/realtek/rtw88/mac.c ++++ b/drivers/net/wireless/realtek/rtw88/mac.c +@@ -784,7 +784,8 @@ static int __rtw_download_firmware(struc + if (!check_firmware_size(data, size)) + return -EINVAL; + +- if (!ltecoex_read_reg(rtwdev, 0x38, <ecoex_bckp)) ++ if (rtwdev->chip->ltecoex_addr && ++ !ltecoex_read_reg(rtwdev, 0x38, <ecoex_bckp)) + return -EBUSY; + + wlan_cpu_enable(rtwdev, false); +@@ -802,7 +803,8 @@ static int __rtw_download_firmware(struc + + wlan_cpu_enable(rtwdev, true); + +- if (!ltecoex_reg_write(rtwdev, 0x38, ltecoex_bckp)) { ++ if (rtwdev->chip->ltecoex_addr && ++ !ltecoex_reg_write(rtwdev, 0x38, ltecoex_bckp)) { + ret = -EBUSY; + goto dlfw_fail; + } diff --git a/package/kernel/mac80211/patches/rtl/068-v6.14.9-wifi-rtw88-Fix-download_firmware_validate-for-RTL881.patch b/package/kernel/mac80211/patches/rtl/068-v6.14.9-wifi-rtw88-Fix-download_firmware_validate-for-RTL881.patch new file mode 100644 index 00000000000..8ff1dc4e3e2 --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/068-v6.14.9-wifi-rtw88-Fix-download_firmware_validate-for-RTL881.patch @@ -0,0 +1,39 @@ +From 9e8243025cc06abc975c876dffda052073207ab3 Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Tue, 4 Feb 2025 20:37:36 +0200 +Subject: [PATCH] wifi: rtw88: Fix download_firmware_validate() for RTL8814AU + +After the firmware is uploaded, download_firmware_validate() checks some +bits in REG_MCUFW_CTRL to see if everything went okay. The +RTL8814AU power on sequence sets bits 13 and 12 to 2, which this +function does not expect, so it thinks the firmware upload failed. + +Make download_firmware_validate() ignore bits 13 and 12. + +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/049d2887-22fc-47b7-9e59-62627cb525f8@gmail.com +--- + drivers/net/wireless/realtek/rtw88/reg.h | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/drivers/net/wireless/realtek/rtw88/reg.h ++++ b/drivers/net/wireless/realtek/rtw88/reg.h +@@ -130,6 +130,7 @@ + #define BIT_SHIFT_ROM_PGE 16 + #define BIT_FW_INIT_RDY BIT(15) + #define BIT_FW_DW_RDY BIT(14) ++#define BIT_CPU_CLK_SEL (BIT(12) | BIT(13)) + #define BIT_RPWM_TOGGLE BIT(7) + #define BIT_RAM_DL_SEL BIT(7) /* legacy only */ + #define BIT_DMEM_CHKSUM_OK BIT(6) +@@ -147,7 +148,7 @@ + BIT_CHECK_SUM_OK) + #define FW_READY_LEGACY (BIT_MCUFWDL_RDY | BIT_FWDL_CHK_RPT | \ + BIT_WINTINI_RDY | BIT_RAM_DL_SEL) +-#define FW_READY_MASK 0xffff ++#define FW_READY_MASK (0xffff & ~BIT_CPU_CLK_SEL) + + #define REG_MCU_TST_CFG 0x84 + #define VAL_FW_TRIGGER 0x1 diff --git a/package/kernel/mac80211/patches/rtl/069-v6.15-wifi-rtw88-Extend-struct-rtw_pwr_track_tbl-for-RTL88.patch b/package/kernel/mac80211/patches/rtl/069-v6.15-wifi-rtw88-Extend-struct-rtw_pwr_track_tbl-for-RTL88.patch new file mode 100644 index 00000000000..c6ac2818dd7 --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/069-v6.15-wifi-rtw88-Extend-struct-rtw_pwr_track_tbl-for-RTL88.patch @@ -0,0 +1,46 @@ +From 62f726848da42554e6d270dfda17ed19bfa3456f Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Tue, 4 Feb 2025 20:38:17 +0200 +Subject: [PATCH] wifi: rtw88: Extend struct rtw_pwr_track_tbl for RTL8814AU + +Currently this struct has the members required for chips with 2 RF +paths. Add more members to support chips with 4 RF paths, like the +RTL8814AU. + +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/be5a73f4-a0fe-43d6-9457-930cde199284@gmail.com +--- + drivers/net/wireless/realtek/rtw88/main.h | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +--- a/drivers/net/wireless/realtek/rtw88/main.h ++++ b/drivers/net/wireless/realtek/rtw88/main.h +@@ -1130,14 +1130,26 @@ struct rtw_rfe_def { + * For 2G there are cck rate and ofdm rate with different settings. + */ + struct rtw_pwr_track_tbl { ++ const u8 *pwrtrk_5gd_n[RTW_PWR_TRK_5G_NUM]; ++ const u8 *pwrtrk_5gd_p[RTW_PWR_TRK_5G_NUM]; ++ const u8 *pwrtrk_5gc_n[RTW_PWR_TRK_5G_NUM]; ++ const u8 *pwrtrk_5gc_p[RTW_PWR_TRK_5G_NUM]; + const u8 *pwrtrk_5gb_n[RTW_PWR_TRK_5G_NUM]; + const u8 *pwrtrk_5gb_p[RTW_PWR_TRK_5G_NUM]; + const u8 *pwrtrk_5ga_n[RTW_PWR_TRK_5G_NUM]; + const u8 *pwrtrk_5ga_p[RTW_PWR_TRK_5G_NUM]; ++ const u8 *pwrtrk_2gd_n; ++ const u8 *pwrtrk_2gd_p; ++ const u8 *pwrtrk_2gc_n; ++ const u8 *pwrtrk_2gc_p; + const u8 *pwrtrk_2gb_n; + const u8 *pwrtrk_2gb_p; + const u8 *pwrtrk_2ga_n; + const u8 *pwrtrk_2ga_p; ++ const u8 *pwrtrk_2g_cckd_n; ++ const u8 *pwrtrk_2g_cckd_p; ++ const u8 *pwrtrk_2g_cckc_n; ++ const u8 *pwrtrk_2g_cckc_p; + const u8 *pwrtrk_2g_cckb_n; + const u8 *pwrtrk_2g_cckb_p; + const u8 *pwrtrk_2g_ccka_n; diff --git a/package/kernel/mac80211/patches/rtl/070-v6.15-wifi-rtw88-Extend-rf_base_addr-and-rf_sipi_addr-for-.patch b/package/kernel/mac80211/patches/rtl/070-v6.15-wifi-rtw88-Extend-rf_base_addr-and-rf_sipi_addr-for-.patch new file mode 100644 index 00000000000..ad80a275f10 --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/070-v6.15-wifi-rtw88-Extend-rf_base_addr-and-rf_sipi_addr-for-.patch @@ -0,0 +1,32 @@ +From d80e7d9b6ba38102f92559dbb647330216ea290b Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Tue, 4 Feb 2025 20:38:43 +0200 +Subject: [PATCH] wifi: rtw88: Extend rf_base_addr and rf_sipi_addr for + RTL8814AU + +These members of struct rtw_chip_info each have a size of 2. Increase +their size to 4, which is the number of RF paths the RTL8814AU has. + +This is required to read and write the RF registers of the RTL8814AU. + +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/7a4d8209-b8af-4943-b5de-f53d6edf591a@gmail.com +--- + drivers/net/wireless/realtek/rtw88/main.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/net/wireless/realtek/rtw88/main.h ++++ b/drivers/net/wireless/realtek/rtw88/main.h +@@ -1239,8 +1239,8 @@ struct rtw_chip_info { + + const struct rtw_hw_reg *dig; + const struct rtw_hw_reg *dig_cck; +- u32 rf_base_addr[2]; +- u32 rf_sipi_addr[2]; ++ u32 rf_base_addr[RTW_RF_PATH_MAX]; ++ u32 rf_sipi_addr[RTW_RF_PATH_MAX]; + const struct rtw_rf_sipi_addr *rf_sipi_read_addr; + u8 fix_rf_phy_num; + const struct rtw_ltecoex_addr *ltecoex_addr; diff --git a/package/kernel/mac80211/patches/rtl/071-v6.14.9-wifi-rtw88-Extend-rtw_fw_send_ra_info-for-RTL8814AU.patch b/package/kernel/mac80211/patches/rtl/071-v6.14.9-wifi-rtw88-Extend-rtw_fw_send_ra_info-for-RTL8814AU.patch new file mode 100644 index 00000000000..9366a54cb5b --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/071-v6.14.9-wifi-rtw88-Extend-rtw_fw_send_ra_info-for-RTL8814AU.patch @@ -0,0 +1,70 @@ +From 8f0076726b66a70727a1bef5c087c60291e90ad8 Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Tue, 4 Feb 2025 20:39:29 +0200 +Subject: [PATCH] wifi: rtw88: Extend rtw_fw_send_ra_info() for RTL8814AU + +The existing code is suitable for chips with up to 2 spatial streams. +Inform the firmware about the rates it's allowed to use when +transmitting 3 spatial streams. + +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/08e2f328-1aab-4e50-93ac-c1e5dd9541ac@gmail.com +--- + drivers/net/wireless/realtek/rtw88/fw.c | 15 +++++++++++++++ + drivers/net/wireless/realtek/rtw88/fw.h | 1 + + drivers/net/wireless/realtek/rtw88/main.h | 1 + + 3 files changed, 17 insertions(+) + +--- a/drivers/net/wireless/realtek/rtw88/fw.c ++++ b/drivers/net/wireless/realtek/rtw88/fw.c +@@ -736,6 +736,7 @@ void rtw_fw_send_ra_info(struct rtw_dev + { + u8 h2c_pkt[H2C_PKT_SIZE] = {0}; + bool disable_pt = true; ++ u32 mask_hi; + + SET_H2C_CMD_ID_CLASS(h2c_pkt, H2C_CMD_RA_INFO); + +@@ -756,6 +757,20 @@ void rtw_fw_send_ra_info(struct rtw_dev + si->init_ra_lv = 0; + + rtw_fw_send_h2c_command(rtwdev, h2c_pkt); ++ ++ if (rtwdev->chip->id != RTW_CHIP_TYPE_8814A) ++ return; ++ ++ SET_H2C_CMD_ID_CLASS(h2c_pkt, H2C_CMD_RA_INFO_HI); ++ ++ mask_hi = si->ra_mask >> 32; ++ ++ SET_RA_INFO_RA_MASK0(h2c_pkt, (mask_hi & 0xff)); ++ SET_RA_INFO_RA_MASK1(h2c_pkt, (mask_hi & 0xff00) >> 8); ++ SET_RA_INFO_RA_MASK2(h2c_pkt, (mask_hi & 0xff0000) >> 16); ++ SET_RA_INFO_RA_MASK3(h2c_pkt, (mask_hi & 0xff000000) >> 24); ++ ++ rtw_fw_send_h2c_command(rtwdev, h2c_pkt); + } + + void rtw_fw_media_status_report(struct rtw_dev *rtwdev, u8 mac_id, bool connect) +--- a/drivers/net/wireless/realtek/rtw88/fw.h ++++ b/drivers/net/wireless/realtek/rtw88/fw.h +@@ -557,6 +557,7 @@ static inline void rtw_h2c_pkt_set_heade + #define H2C_CMD_DEFAULT_PORT 0x2c + #define H2C_CMD_RA_INFO 0x40 + #define H2C_CMD_RSSI_MONITOR 0x42 ++#define H2C_CMD_RA_INFO_HI 0x46 + #define H2C_CMD_BCN_FILTER_OFFLOAD_P0 0x56 + #define H2C_CMD_BCN_FILTER_OFFLOAD_P1 0x57 + #define H2C_CMD_WL_PHY_INFO 0x58 +--- a/drivers/net/wireless/realtek/rtw88/main.h ++++ b/drivers/net/wireless/realtek/rtw88/main.h +@@ -191,6 +191,7 @@ enum rtw_chip_type { + RTW_CHIP_TYPE_8703B, + RTW_CHIP_TYPE_8821A, + RTW_CHIP_TYPE_8812A, ++ RTW_CHIP_TYPE_8814A, + }; + + enum rtw_tx_queue_type { diff --git a/package/kernel/mac80211/patches/rtl/072-v6.15-wifi-rtw88-Constify-some-more-structs-and-arrays.patch b/package/kernel/mac80211/patches/rtl/072-v6.15-wifi-rtw88-Constify-some-more-structs-and-arrays.patch new file mode 100644 index 00000000000..6d3b4e61f9b --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/072-v6.15-wifi-rtw88-Constify-some-more-structs-and-arrays.patch @@ -0,0 +1,213 @@ +From e66f3b5c7535bb508e9c561a047b32de4ddc1cda Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Tue, 4 Feb 2025 20:40:22 +0200 +Subject: [PATCH] wifi: rtw88: Constify some more structs and arrays + +These structs and arrays are never modified, so make them const: + +rtw_band_2ghz +rtw_band_5ghz +rtw_pci_tx_queue_idx_addr +rtw_pci_ops +rtw_cck_rates +rtw_ofdm_rates +rtw_ht_1s_rates +rtw_ht_2s_rates +rtw_vht_1s_rates +rtw_vht_2s_rates +rtw_rate_section +rtw_rate_size +rtw_sdio_ops +rtw_usb_ops + +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/502f124e-ccf3-4c09-80a4-1e5c5304822b@gmail.com +--- + drivers/net/wireless/realtek/rtw88/main.c | 4 ++-- + drivers/net/wireless/realtek/rtw88/main.h | 2 +- + drivers/net/wireless/realtek/rtw88/pci.c | 4 ++-- + drivers/net/wireless/realtek/rtw88/phy.c | 26 ++++++++++++++--------- + drivers/net/wireless/realtek/rtw88/phy.h | 16 +++++++------- + drivers/net/wireless/realtek/rtw88/sdio.c | 2 +- + drivers/net/wireless/realtek/rtw88/usb.c | 2 +- + 7 files changed, 31 insertions(+), 25 deletions(-) + +--- a/drivers/net/wireless/realtek/rtw88/main.c ++++ b/drivers/net/wireless/realtek/rtw88/main.c +@@ -136,7 +136,7 @@ u16 rtw_desc_to_bitrate(u8 desc_rate) + return rate.bitrate; + } + +-static struct ieee80211_supported_band rtw_band_2ghz = { ++static const struct ieee80211_supported_band rtw_band_2ghz = { + .band = NL80211_BAND_2GHZ, + + .channels = rtw_channeltable_2g, +@@ -149,7 +149,7 @@ static struct ieee80211_supported_band r + .vht_cap = {0}, + }; + +-static struct ieee80211_supported_band rtw_band_5ghz = { ++static const struct ieee80211_supported_band rtw_band_5ghz = { + .band = NL80211_BAND_5GHZ, + + .channels = rtw_channeltable_5g, +--- a/drivers/net/wireless/realtek/rtw88/main.h ++++ b/drivers/net/wireless/realtek/rtw88/main.h +@@ -61,7 +61,7 @@ enum rtw_hci_type { + }; + + struct rtw_hci { +- struct rtw_hci_ops *ops; ++ const struct rtw_hci_ops *ops; + enum rtw_hci_type type; + + u32 rpwm_addr; +--- a/drivers/net/wireless/realtek/rtw88/pci.c ++++ b/drivers/net/wireless/realtek/rtw88/pci.c +@@ -20,7 +20,7 @@ module_param_named(disable_aspm, rtw_pci + MODULE_PARM_DESC(disable_msi, "Set Y to disable MSI interrupt support"); + MODULE_PARM_DESC(disable_aspm, "Set Y to disable PCI ASPM support"); + +-static u32 rtw_pci_tx_queue_idx_addr[] = { ++static const u32 rtw_pci_tx_queue_idx_addr[] = { + [RTW_TX_QUEUE_BK] = RTK_PCI_TXBD_IDX_BKQ, + [RTW_TX_QUEUE_BE] = RTK_PCI_TXBD_IDX_BEQ, + [RTW_TX_QUEUE_VI] = RTK_PCI_TXBD_IDX_VIQ, +@@ -1591,7 +1591,7 @@ static void rtw_pci_destroy(struct rtw_d + rtw_pci_io_unmapping(rtwdev, pdev); + } + +-static struct rtw_hci_ops rtw_pci_ops = { ++static const struct rtw_hci_ops rtw_pci_ops = { + .tx_write = rtw_pci_tx_write, + .tx_kick_off = rtw_pci_tx_kick_off, + .flush_queues = rtw_pci_flush_queues, +--- a/drivers/net/wireless/realtek/rtw88/phy.c ++++ b/drivers/net/wireless/realtek/rtw88/phy.c +@@ -52,44 +52,50 @@ static const u32 db_invert_table[12][8] + 1995262315, 2511886432U, 3162277660U, 3981071706U} + }; + +-u8 rtw_cck_rates[] = { DESC_RATE1M, DESC_RATE2M, DESC_RATE5_5M, DESC_RATE11M }; +-u8 rtw_ofdm_rates[] = { ++const u8 rtw_cck_rates[] = { DESC_RATE1M, DESC_RATE2M, DESC_RATE5_5M, DESC_RATE11M }; ++ ++const u8 rtw_ofdm_rates[] = { + DESC_RATE6M, DESC_RATE9M, DESC_RATE12M, + DESC_RATE18M, DESC_RATE24M, DESC_RATE36M, + DESC_RATE48M, DESC_RATE54M + }; +-u8 rtw_ht_1s_rates[] = { ++ ++const u8 rtw_ht_1s_rates[] = { + DESC_RATEMCS0, DESC_RATEMCS1, DESC_RATEMCS2, + DESC_RATEMCS3, DESC_RATEMCS4, DESC_RATEMCS5, + DESC_RATEMCS6, DESC_RATEMCS7 + }; +-u8 rtw_ht_2s_rates[] = { ++ ++const u8 rtw_ht_2s_rates[] = { + DESC_RATEMCS8, DESC_RATEMCS9, DESC_RATEMCS10, + DESC_RATEMCS11, DESC_RATEMCS12, DESC_RATEMCS13, + DESC_RATEMCS14, DESC_RATEMCS15 + }; +-u8 rtw_vht_1s_rates[] = { ++ ++const u8 rtw_vht_1s_rates[] = { + DESC_RATEVHT1SS_MCS0, DESC_RATEVHT1SS_MCS1, + DESC_RATEVHT1SS_MCS2, DESC_RATEVHT1SS_MCS3, + DESC_RATEVHT1SS_MCS4, DESC_RATEVHT1SS_MCS5, + DESC_RATEVHT1SS_MCS6, DESC_RATEVHT1SS_MCS7, + DESC_RATEVHT1SS_MCS8, DESC_RATEVHT1SS_MCS9 + }; +-u8 rtw_vht_2s_rates[] = { ++ ++const u8 rtw_vht_2s_rates[] = { + DESC_RATEVHT2SS_MCS0, DESC_RATEVHT2SS_MCS1, + DESC_RATEVHT2SS_MCS2, DESC_RATEVHT2SS_MCS3, + DESC_RATEVHT2SS_MCS4, DESC_RATEVHT2SS_MCS5, + DESC_RATEVHT2SS_MCS6, DESC_RATEVHT2SS_MCS7, + DESC_RATEVHT2SS_MCS8, DESC_RATEVHT2SS_MCS9 + }; +-u8 *rtw_rate_section[RTW_RATE_SECTION_MAX] = { ++ ++const u8 * const rtw_rate_section[RTW_RATE_SECTION_MAX] = { + rtw_cck_rates, rtw_ofdm_rates, + rtw_ht_1s_rates, rtw_ht_2s_rates, + rtw_vht_1s_rates, rtw_vht_2s_rates + }; + EXPORT_SYMBOL(rtw_rate_section); + +-u8 rtw_rate_size[RTW_RATE_SECTION_MAX] = { ++const u8 rtw_rate_size[RTW_RATE_SECTION_MAX] = { + ARRAY_SIZE(rtw_cck_rates), + ARRAY_SIZE(rtw_ofdm_rates), + ARRAY_SIZE(rtw_ht_1s_rates), +@@ -2214,7 +2220,7 @@ static void rtw_phy_set_tx_power_index_b + { + struct rtw_hal *hal = &rtwdev->hal; + u8 regd = rtw_regd_get(rtwdev); +- u8 *rates; ++ const u8 *rates; + u8 size; + u8 rate; + u8 pwr_idx; +@@ -2274,7 +2280,7 @@ EXPORT_SYMBOL(rtw_phy_set_tx_power_level + + static void + rtw_phy_tx_power_by_rate_config_by_path(struct rtw_hal *hal, u8 path, +- u8 rs, u8 size, u8 *rates) ++ u8 rs, u8 size, const u8 *rates) + { + u8 rate; + u8 base_idx, rate_idx; +--- a/drivers/net/wireless/realtek/rtw88/phy.h ++++ b/drivers/net/wireless/realtek/rtw88/phy.h +@@ -7,14 +7,14 @@ + + #include "debug.h" + +-extern u8 rtw_cck_rates[]; +-extern u8 rtw_ofdm_rates[]; +-extern u8 rtw_ht_1s_rates[]; +-extern u8 rtw_ht_2s_rates[]; +-extern u8 rtw_vht_1s_rates[]; +-extern u8 rtw_vht_2s_rates[]; +-extern u8 *rtw_rate_section[]; +-extern u8 rtw_rate_size[]; ++extern const u8 rtw_cck_rates[]; ++extern const u8 rtw_ofdm_rates[]; ++extern const u8 rtw_ht_1s_rates[]; ++extern const u8 rtw_ht_2s_rates[]; ++extern const u8 rtw_vht_1s_rates[]; ++extern const u8 rtw_vht_2s_rates[]; ++extern const u8 * const rtw_rate_section[]; ++extern const u8 rtw_rate_size[]; + + void rtw_phy_init(struct rtw_dev *rtwdev); + void rtw_phy_dynamic_mechanism(struct rtw_dev *rtwdev); +--- a/drivers/net/wireless/realtek/rtw88/sdio.c ++++ b/drivers/net/wireless/realtek/rtw88/sdio.c +@@ -1147,7 +1147,7 @@ static void rtw_sdio_declaim(struct rtw_ + sdio_release_host(sdio_func); + } + +-static struct rtw_hci_ops rtw_sdio_ops = { ++static const struct rtw_hci_ops rtw_sdio_ops = { + .tx_write = rtw_sdio_tx_write, + .tx_kick_off = rtw_sdio_tx_kick_off, + .setup = rtw_sdio_setup, +--- a/drivers/net/wireless/realtek/rtw88/usb.c ++++ b/drivers/net/wireless/realtek/rtw88/usb.c +@@ -844,7 +844,7 @@ static void rtw_usb_dynamic_rx_agg(struc + } + } + +-static struct rtw_hci_ops rtw_usb_ops = { ++static const struct rtw_hci_ops rtw_usb_ops = { + .tx_write = rtw_usb_tx_write, + .tx_kick_off = rtw_usb_tx_kick_off, + .setup = rtw_usb_setup, diff --git a/package/kernel/mac80211/patches/rtl/073-v6.15-wifi-rtw88-Rename-RTW_RATE_SECTION_MAX-to-RTW_RATE_S.patch b/package/kernel/mac80211/patches/rtl/073-v6.15-wifi-rtw88-Rename-RTW_RATE_SECTION_MAX-to-RTW_RATE_S.patch new file mode 100644 index 00000000000..4a6d5121546 --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/073-v6.15-wifi-rtw88-Rename-RTW_RATE_SECTION_MAX-to-RTW_RATE_S.patch @@ -0,0 +1,227 @@ +From ad815f3920035a0c5b6ffe45bddc9fb308194b49 Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Tue, 4 Feb 2025 20:40:58 +0200 +Subject: [PATCH] wifi: rtw88: Rename RTW_RATE_SECTION_MAX to + RTW_RATE_SECTION_NUM + +It fits the meaning of the enum better. + +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/5a1c5a46-8ebb-43b0-9ab1-b78e2a22b3d2@gmail.com +--- + drivers/net/wireless/realtek/rtw88/main.h | 12 +++++----- + drivers/net/wireless/realtek/rtw88/phy.c | 24 +++++++++---------- + drivers/net/wireless/realtek/rtw88/rtw8821c.c | 2 +- + drivers/net/wireless/realtek/rtw88/rtw8822b.c | 2 +- + drivers/net/wireless/realtek/rtw88/rtw8822c.c | 2 +- + drivers/net/wireless/realtek/rtw88/rtw88xxa.c | 2 +- + drivers/net/wireless/realtek/rtw88/sar.c | 2 +- + 7 files changed, 23 insertions(+), 23 deletions(-) + +--- a/drivers/net/wireless/realtek/rtw88/main.h ++++ b/drivers/net/wireless/realtek/rtw88/main.h +@@ -168,7 +168,7 @@ enum rtw_rate_section { + RTW_RATE_SECTION_VHT_2S, + + /* keep last */ +- RTW_RATE_SECTION_MAX, ++ RTW_RATE_SECTION_NUM, + }; + + enum rtw_wireless_set { +@@ -1937,7 +1937,7 @@ union rtw_sar_cfg { + + struct rtw_sar { + enum rtw_sar_sources src; +- union rtw_sar_cfg cfg[RTW_RF_PATH_MAX][RTW_RATE_SECTION_MAX]; ++ union rtw_sar_cfg cfg[RTW_RF_PATH_MAX][RTW_RATE_SECTION_NUM]; + }; + + struct rtw_hal { +@@ -1981,16 +1981,16 @@ struct rtw_hal { + s8 tx_pwr_by_rate_offset_5g[RTW_RF_PATH_MAX] + [DESC_RATE_MAX]; + s8 tx_pwr_by_rate_base_2g[RTW_RF_PATH_MAX] +- [RTW_RATE_SECTION_MAX]; ++ [RTW_RATE_SECTION_NUM]; + s8 tx_pwr_by_rate_base_5g[RTW_RF_PATH_MAX] +- [RTW_RATE_SECTION_MAX]; ++ [RTW_RATE_SECTION_NUM]; + s8 tx_pwr_limit_2g[RTW_REGD_MAX] + [RTW_CHANNEL_WIDTH_MAX] +- [RTW_RATE_SECTION_MAX] ++ [RTW_RATE_SECTION_NUM] + [RTW_MAX_CHANNEL_NUM_2G]; + s8 tx_pwr_limit_5g[RTW_REGD_MAX] + [RTW_CHANNEL_WIDTH_MAX] +- [RTW_RATE_SECTION_MAX] ++ [RTW_RATE_SECTION_NUM] + [RTW_MAX_CHANNEL_NUM_5G]; + s8 tx_pwr_tbl[RTW_RF_PATH_MAX] + [DESC_RATE_MAX]; +--- a/drivers/net/wireless/realtek/rtw88/phy.c ++++ b/drivers/net/wireless/realtek/rtw88/phy.c +@@ -88,14 +88,14 @@ const u8 rtw_vht_2s_rates[] = { + DESC_RATEVHT2SS_MCS8, DESC_RATEVHT2SS_MCS9 + }; + +-const u8 * const rtw_rate_section[RTW_RATE_SECTION_MAX] = { ++const u8 * const rtw_rate_section[RTW_RATE_SECTION_NUM] = { + rtw_cck_rates, rtw_ofdm_rates, + rtw_ht_1s_rates, rtw_ht_2s_rates, + rtw_vht_1s_rates, rtw_vht_2s_rates + }; + EXPORT_SYMBOL(rtw_rate_section); + +-const u8 rtw_rate_size[RTW_RATE_SECTION_MAX] = { ++const u8 rtw_rate_size[RTW_RATE_SECTION_NUM] = { + ARRAY_SIZE(rtw_cck_rates), + ARRAY_SIZE(rtw_ofdm_rates), + ARRAY_SIZE(rtw_ht_1s_rates), +@@ -1596,7 +1596,7 @@ static void rtw_phy_set_tx_power_limit(s + ch_idx = rtw_channel_to_idx(band, ch); + + if (regd >= RTW_REGD_MAX || bw >= RTW_CHANNEL_WIDTH_MAX || +- rs >= RTW_RATE_SECTION_MAX || ch_idx < 0) { ++ rs >= RTW_RATE_SECTION_NUM || ch_idx < 0) { + WARN(1, + "wrong txpwr_lmt regd=%u, band=%u bw=%u, rs=%u, ch_idx=%u, pwr_limit=%d\n", + regd, band, bw, rs, ch_idx, pwr_limit); +@@ -1701,7 +1701,7 @@ rtw_cfg_txpwr_lmt_by_alt(struct rtw_dev + u8 bw, rs; + + for (bw = 0; bw < RTW_CHANNEL_WIDTH_MAX; bw++) +- for (rs = 0; rs < RTW_RATE_SECTION_MAX; rs++) ++ for (rs = 0; rs < RTW_RATE_SECTION_NUM; rs++) + __cfg_txpwr_lmt_by_alt(&rtwdev->hal, regd, regd_alt, + bw, rs); + } +@@ -2060,7 +2060,7 @@ static u8 rtw_phy_get_5g_tx_power_index( + return tx_power; + } + +-/* return RTW_RATE_SECTION_MAX to indicate rate is invalid */ ++/* return RTW_RATE_SECTION_NUM to indicate rate is invalid */ + static u8 rtw_phy_rate_to_rate_section(u8 rate) + { + if (rate >= DESC_RATE1M && rate <= DESC_RATE11M) +@@ -2076,7 +2076,7 @@ static u8 rtw_phy_rate_to_rate_section(u + else if (rate >= DESC_RATEVHT2SS_MCS0 && rate <= DESC_RATEVHT2SS_MCS9) + return RTW_RATE_SECTION_VHT_2S; + else +- return RTW_RATE_SECTION_MAX; ++ return RTW_RATE_SECTION_NUM; + } + + static s8 rtw_phy_get_tx_power_limit(struct rtw_dev *rtwdev, u8 band, +@@ -2094,7 +2094,7 @@ static s8 rtw_phy_get_tx_power_limit(str + if (regd > RTW_REGD_WW) + return power_limit; + +- if (rs == RTW_RATE_SECTION_MAX) ++ if (rs == RTW_RATE_SECTION_NUM) + goto err; + + /* only 20M BW with cck and ofdm */ +@@ -2138,7 +2138,7 @@ static s8 rtw_phy_get_tx_power_sar(struc + .rs = rs, + }; + +- if (rs == RTW_RATE_SECTION_MAX) ++ if (rs == RTW_RATE_SECTION_NUM) + goto err; + + return rtw_query_sar(rtwdev, &arg); +@@ -2227,7 +2227,7 @@ static void rtw_phy_set_tx_power_index_b + u8 bw; + int i; + +- if (rs >= RTW_RATE_SECTION_MAX) ++ if (rs >= RTW_RATE_SECTION_NUM) + return; + + rates = rtw_rate_section[rs]; +@@ -2258,7 +2258,7 @@ static void rtw_phy_set_tx_power_level_b + else + rs = RTW_RATE_SECTION_OFDM; + +- for (; rs < RTW_RATE_SECTION_MAX; rs++) ++ for (; rs < RTW_RATE_SECTION_NUM; rs++) + rtw_phy_set_tx_power_index_by_rs(rtwdev, ch, path, rs); + } + +@@ -2353,7 +2353,7 @@ void rtw_phy_tx_power_limit_config(struc + + for (regd = 0; regd < RTW_REGD_MAX; regd++) + for (bw = 0; bw < RTW_CHANNEL_WIDTH_MAX; bw++) +- for (rs = 0; rs < RTW_RATE_SECTION_MAX; rs++) ++ for (rs = 0; rs < RTW_RATE_SECTION_NUM; rs++) + __rtw_phy_tx_power_limit_config(hal, regd, bw, rs); + } + +@@ -2389,7 +2389,7 @@ void rtw_phy_init_tx_power(struct rtw_de + /* init tx power limit */ + for (regd = 0; regd < RTW_REGD_MAX; regd++) + for (bw = 0; bw < RTW_CHANNEL_WIDTH_MAX; bw++) +- for (rs = 0; rs < RTW_RATE_SECTION_MAX; rs++) ++ for (rs = 0; rs < RTW_RATE_SECTION_NUM; rs++) + rtw_phy_init_tx_power_limit(rtwdev, regd, bw, + rs); + } +--- a/drivers/net/wireless/realtek/rtw88/rtw8821c.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.c +@@ -709,7 +709,7 @@ static void rtw8821c_set_tx_power_index( + int rs, path; + + for (path = 0; path < hal->rf_path_num; path++) { +- for (rs = 0; rs < RTW_RATE_SECTION_MAX; rs++) { ++ for (rs = 0; rs < RTW_RATE_SECTION_NUM; rs++) { + if (rs == RTW_RATE_SECTION_HT_2S || + rs == RTW_RATE_SECTION_VHT_2S) + continue; +--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c +@@ -964,7 +964,7 @@ static void rtw8822b_set_tx_power_index( + int rs, path; + + for (path = 0; path < hal->rf_path_num; path++) { +- for (rs = 0; rs < RTW_RATE_SECTION_MAX; rs++) ++ for (rs = 0; rs < RTW_RATE_SECTION_NUM; rs++) + rtw8822b_set_tx_power_index_by_rate(rtwdev, path, rs, + &phy_pwr_idx); + } +--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c +@@ -2746,7 +2746,7 @@ static void rtw8822c_set_tx_power_index( + s8 diff_idx[4]; + + rtw8822c_set_write_tx_power_ref(rtwdev, pwr_ref_cck, pwr_ref_ofdm); +- for (rs = 0; rs < RTW_RATE_SECTION_MAX; rs++) { ++ for (rs = 0; rs < RTW_RATE_SECTION_NUM; rs++) { + for (j = 0; j < rtw_rate_size[rs]; j++) { + rate = rtw_rate_section[rs][j]; + pwr_a = hal->tx_pwr_tbl[RF_PATH_A][rate]; +--- a/drivers/net/wireless/realtek/rtw88/rtw88xxa.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw88xxa.c +@@ -1637,7 +1637,7 @@ void rtw88xxa_set_tx_power_index(struct + int rs, path; + + for (path = 0; path < hal->rf_path_num; path++) { +- for (rs = 0; rs < RTW_RATE_SECTION_MAX; rs++) { ++ for (rs = 0; rs < RTW_RATE_SECTION_NUM; rs++) { + if (hal->rf_path_num == 1 && + (rs == RTW_RATE_SECTION_HT_2S || + rs == RTW_RATE_SECTION_VHT_2S)) +--- a/drivers/net/wireless/realtek/rtw88/sar.c ++++ b/drivers/net/wireless/realtek/rtw88/sar.c +@@ -97,7 +97,7 @@ int rtw_set_sar_specs(struct rtw_dev *rt + power, BIT(RTW_COMMON_SAR_FCT)); + + for (j = 0; j < RTW_RF_PATH_MAX; j++) { +- for (k = 0; k < RTW_RATE_SECTION_MAX; k++) { ++ for (k = 0; k < RTW_RATE_SECTION_NUM; k++) { + arg = (struct rtw_sar_arg){ + .sar_band = idx, + .path = j, diff --git a/package/kernel/mac80211/patches/rtl/074-v6.15-wifi-rtw88-Extend-TX-power-stuff-for-3-4-spatial-str.patch b/package/kernel/mac80211/patches/rtl/074-v6.15-wifi-rtw88-Extend-TX-power-stuff-for-3-4-spatial-str.patch new file mode 100644 index 00000000000..fc9aa3b971c --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/074-v6.15-wifi-rtw88-Extend-TX-power-stuff-for-3-4-spatial-str.patch @@ -0,0 +1,369 @@ +From 0f98a59596579b34932c06aec7d52c1e835fa1f0 Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Tue, 4 Feb 2025 20:41:43 +0200 +Subject: [PATCH] wifi: rtw88: Extend TX power stuff for 3-4 spatial streams + +Although the RTL8814AU only has 3 spatial streams, maybe some other chip +has 4. + +Correct the TX power index and TX power limit calculations for 3SS and +4SS HT/VHT rates. + +With this the RTL8814AU can set the TX power correctly. + +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/d0c0e126-0794-4c4e-9203-ea39a707b673@gmail.com +--- + drivers/net/wireless/realtek/rtw88/main.h | 5 + + drivers/net/wireless/realtek/rtw88/phy.c | 145 ++++++++++++------ + drivers/net/wireless/realtek/rtw88/phy.h | 4 + + drivers/net/wireless/realtek/rtw88/rtw8821c.c | 2 +- + drivers/net/wireless/realtek/rtw88/rtw8822b.c | 2 +- + drivers/net/wireless/realtek/rtw88/rtw8822c.c | 2 +- + drivers/net/wireless/realtek/rtw88/rtw88xxa.c | 2 +- + 7 files changed, 111 insertions(+), 51 deletions(-) + +--- a/drivers/net/wireless/realtek/rtw88/main.h ++++ b/drivers/net/wireless/realtek/rtw88/main.h +@@ -166,6 +166,11 @@ enum rtw_rate_section { + RTW_RATE_SECTION_HT_2S, + RTW_RATE_SECTION_VHT_1S, + RTW_RATE_SECTION_VHT_2S, ++ __RTW_RATE_SECTION_2SS_MAX = RTW_RATE_SECTION_VHT_2S, ++ RTW_RATE_SECTION_HT_3S, ++ RTW_RATE_SECTION_HT_4S, ++ RTW_RATE_SECTION_VHT_3S, ++ RTW_RATE_SECTION_VHT_4S, + + /* keep last */ + RTW_RATE_SECTION_NUM, +--- a/drivers/net/wireless/realtek/rtw88/phy.c ++++ b/drivers/net/wireless/realtek/rtw88/phy.c +@@ -88,10 +88,40 @@ const u8 rtw_vht_2s_rates[] = { + DESC_RATEVHT2SS_MCS8, DESC_RATEVHT2SS_MCS9 + }; + ++const u8 rtw_ht_3s_rates[] = { ++ DESC_RATEMCS16, DESC_RATEMCS17, DESC_RATEMCS18, ++ DESC_RATEMCS19, DESC_RATEMCS20, DESC_RATEMCS21, ++ DESC_RATEMCS22, DESC_RATEMCS23 ++}; ++ ++const u8 rtw_ht_4s_rates[] = { ++ DESC_RATEMCS24, DESC_RATEMCS25, DESC_RATEMCS26, ++ DESC_RATEMCS27, DESC_RATEMCS28, DESC_RATEMCS29, ++ DESC_RATEMCS30, DESC_RATEMCS31 ++}; ++ ++const u8 rtw_vht_3s_rates[] = { ++ DESC_RATEVHT3SS_MCS0, DESC_RATEVHT3SS_MCS1, ++ DESC_RATEVHT3SS_MCS2, DESC_RATEVHT3SS_MCS3, ++ DESC_RATEVHT3SS_MCS4, DESC_RATEVHT3SS_MCS5, ++ DESC_RATEVHT3SS_MCS6, DESC_RATEVHT3SS_MCS7, ++ DESC_RATEVHT3SS_MCS8, DESC_RATEVHT3SS_MCS9 ++}; ++ ++const u8 rtw_vht_4s_rates[] = { ++ DESC_RATEVHT4SS_MCS0, DESC_RATEVHT4SS_MCS1, ++ DESC_RATEVHT4SS_MCS2, DESC_RATEVHT4SS_MCS3, ++ DESC_RATEVHT4SS_MCS4, DESC_RATEVHT4SS_MCS5, ++ DESC_RATEVHT4SS_MCS6, DESC_RATEVHT4SS_MCS7, ++ DESC_RATEVHT4SS_MCS8, DESC_RATEVHT4SS_MCS9 ++}; ++ + const u8 * const rtw_rate_section[RTW_RATE_SECTION_NUM] = { + rtw_cck_rates, rtw_ofdm_rates, + rtw_ht_1s_rates, rtw_ht_2s_rates, +- rtw_vht_1s_rates, rtw_vht_2s_rates ++ rtw_vht_1s_rates, rtw_vht_2s_rates, ++ rtw_ht_3s_rates, rtw_ht_4s_rates, ++ rtw_vht_3s_rates, rtw_vht_4s_rates + }; + EXPORT_SYMBOL(rtw_rate_section); + +@@ -101,17 +131,14 @@ const u8 rtw_rate_size[RTW_RATE_SECTION_ + ARRAY_SIZE(rtw_ht_1s_rates), + ARRAY_SIZE(rtw_ht_2s_rates), + ARRAY_SIZE(rtw_vht_1s_rates), +- ARRAY_SIZE(rtw_vht_2s_rates) ++ ARRAY_SIZE(rtw_vht_2s_rates), ++ ARRAY_SIZE(rtw_ht_3s_rates), ++ ARRAY_SIZE(rtw_ht_4s_rates), ++ ARRAY_SIZE(rtw_vht_3s_rates), ++ ARRAY_SIZE(rtw_vht_4s_rates) + }; + EXPORT_SYMBOL(rtw_rate_size); + +-static const u8 rtw_cck_size = ARRAY_SIZE(rtw_cck_rates); +-static const u8 rtw_ofdm_size = ARRAY_SIZE(rtw_ofdm_rates); +-static const u8 rtw_ht_1s_size = ARRAY_SIZE(rtw_ht_1s_rates); +-static const u8 rtw_ht_2s_size = ARRAY_SIZE(rtw_ht_2s_rates); +-static const u8 rtw_vht_1s_size = ARRAY_SIZE(rtw_vht_1s_rates); +-static const u8 rtw_vht_2s_size = ARRAY_SIZE(rtw_vht_2s_rates); +- + enum rtw_phy_band_type { + PHY_BAND_2G = 0, + PHY_BAND_5G = 1, +@@ -1640,11 +1667,15 @@ rtw_xref_5g_txpwr_lmt(struct rtw_dev *rt + static void + rtw_xref_txpwr_lmt_by_rs(struct rtw_dev *rtwdev, u8 regd, u8 bw, u8 ch_idx) + { ++ static const u8 rs_cmp[4][2] = { ++ {RTW_RATE_SECTION_HT_1S, RTW_RATE_SECTION_VHT_1S}, ++ {RTW_RATE_SECTION_HT_2S, RTW_RATE_SECTION_VHT_2S}, ++ {RTW_RATE_SECTION_HT_3S, RTW_RATE_SECTION_VHT_3S}, ++ {RTW_RATE_SECTION_HT_4S, RTW_RATE_SECTION_VHT_4S} ++ }; + u8 rs_idx, rs_ht, rs_vht; +- u8 rs_cmp[2][2] = {{RTW_RATE_SECTION_HT_1S, RTW_RATE_SECTION_VHT_1S}, +- {RTW_RATE_SECTION_HT_2S, RTW_RATE_SECTION_VHT_2S} }; + +- for (rs_idx = 0; rs_idx < 2; rs_idx++) { ++ for (rs_idx = 0; rs_idx < 4; rs_idx++) { + rs_ht = rs_cmp[rs_idx][0]; + rs_vht = rs_cmp[rs_idx][1]; + +@@ -1965,10 +1996,10 @@ static u8 rtw_phy_get_2g_tx_power_index( + u8 rate, u8 group) + { + const struct rtw_chip_info *chip = rtwdev->chip; +- u8 tx_power; +- bool mcs_rate; +- bool above_2ss; ++ bool above_2ss, above_3ss, above_4ss; + u8 factor = chip->txgi_factor; ++ bool mcs_rate; ++ u8 tx_power; + + if (rate <= DESC_RATE11M) + tx_power = pwr_idx_2g->cck_base[group]; +@@ -1978,11 +2009,15 @@ static u8 rtw_phy_get_2g_tx_power_index( + if (rate >= DESC_RATE6M && rate <= DESC_RATE54M) + tx_power += pwr_idx_2g->ht_1s_diff.ofdm * factor; + +- mcs_rate = (rate >= DESC_RATEMCS0 && rate <= DESC_RATEMCS15) || ++ mcs_rate = (rate >= DESC_RATEMCS0 && rate <= DESC_RATEMCS31) || + (rate >= DESC_RATEVHT1SS_MCS0 && +- rate <= DESC_RATEVHT2SS_MCS9); +- above_2ss = (rate >= DESC_RATEMCS8 && rate <= DESC_RATEMCS15) || ++ rate <= DESC_RATEVHT4SS_MCS9); ++ above_2ss = (rate >= DESC_RATEMCS8 && rate <= DESC_RATEMCS31) || + (rate >= DESC_RATEVHT2SS_MCS0); ++ above_3ss = (rate >= DESC_RATEMCS16 && rate <= DESC_RATEMCS31) || ++ (rate >= DESC_RATEVHT3SS_MCS0); ++ above_4ss = (rate >= DESC_RATEMCS24 && rate <= DESC_RATEMCS31) || ++ (rate >= DESC_RATEVHT4SS_MCS0); + + if (!mcs_rate) + return tx_power; +@@ -1995,11 +2030,19 @@ static u8 rtw_phy_get_2g_tx_power_index( + tx_power += pwr_idx_2g->ht_1s_diff.bw20 * factor; + if (above_2ss) + tx_power += pwr_idx_2g->ht_2s_diff.bw20 * factor; ++ if (above_3ss) ++ tx_power += pwr_idx_2g->ht_3s_diff.bw20 * factor; ++ if (above_4ss) ++ tx_power += pwr_idx_2g->ht_4s_diff.bw20 * factor; + break; + case RTW_CHANNEL_WIDTH_40: + /* bw40 is the base power */ + if (above_2ss) + tx_power += pwr_idx_2g->ht_2s_diff.bw40 * factor; ++ if (above_3ss) ++ tx_power += pwr_idx_2g->ht_3s_diff.bw40 * factor; ++ if (above_4ss) ++ tx_power += pwr_idx_2g->ht_4s_diff.bw40 * factor; + break; + } + +@@ -2012,19 +2055,23 @@ static u8 rtw_phy_get_5g_tx_power_index( + u8 rate, u8 group) + { + const struct rtw_chip_info *chip = rtwdev->chip; +- u8 tx_power; ++ bool above_2ss, above_3ss, above_4ss; ++ u8 factor = chip->txgi_factor; + u8 upper, lower; + bool mcs_rate; +- bool above_2ss; +- u8 factor = chip->txgi_factor; ++ u8 tx_power; + + tx_power = pwr_idx_5g->bw40_base[group]; + +- mcs_rate = (rate >= DESC_RATEMCS0 && rate <= DESC_RATEMCS15) || ++ mcs_rate = (rate >= DESC_RATEMCS0 && rate <= DESC_RATEMCS31) || + (rate >= DESC_RATEVHT1SS_MCS0 && +- rate <= DESC_RATEVHT2SS_MCS9); +- above_2ss = (rate >= DESC_RATEMCS8 && rate <= DESC_RATEMCS15) || ++ rate <= DESC_RATEVHT4SS_MCS9); ++ above_2ss = (rate >= DESC_RATEMCS8 && rate <= DESC_RATEMCS31) || + (rate >= DESC_RATEVHT2SS_MCS0); ++ above_3ss = (rate >= DESC_RATEMCS16 && rate <= DESC_RATEMCS31) || ++ (rate >= DESC_RATEVHT3SS_MCS0); ++ above_4ss = (rate >= DESC_RATEMCS24 && rate <= DESC_RATEMCS31) || ++ (rate >= DESC_RATEVHT4SS_MCS0); + + if (!mcs_rate) { + tx_power += pwr_idx_5g->ht_1s_diff.ofdm * factor; +@@ -2039,11 +2086,19 @@ static u8 rtw_phy_get_5g_tx_power_index( + tx_power += pwr_idx_5g->ht_1s_diff.bw20 * factor; + if (above_2ss) + tx_power += pwr_idx_5g->ht_2s_diff.bw20 * factor; ++ if (above_3ss) ++ tx_power += pwr_idx_5g->ht_3s_diff.bw20 * factor; ++ if (above_4ss) ++ tx_power += pwr_idx_5g->ht_4s_diff.bw20 * factor; + break; + case RTW_CHANNEL_WIDTH_40: + /* bw40 is the base power */ + if (above_2ss) + tx_power += pwr_idx_5g->ht_2s_diff.bw40 * factor; ++ if (above_3ss) ++ tx_power += pwr_idx_5g->ht_3s_diff.bw40 * factor; ++ if (above_4ss) ++ tx_power += pwr_idx_5g->ht_4s_diff.bw40 * factor; + break; + case RTW_CHANNEL_WIDTH_80: + /* the base idx of bw80 is the average of bw40+/bw40- */ +@@ -2054,6 +2109,10 @@ static u8 rtw_phy_get_5g_tx_power_index( + tx_power += pwr_idx_5g->vht_1s_diff.bw80 * factor; + if (above_2ss) + tx_power += pwr_idx_5g->vht_2s_diff.bw80 * factor; ++ if (above_3ss) ++ tx_power += pwr_idx_5g->vht_3s_diff.bw80 * factor; ++ if (above_4ss) ++ tx_power += pwr_idx_5g->vht_4s_diff.bw80 * factor; + break; + } + +@@ -2071,10 +2130,18 @@ static u8 rtw_phy_rate_to_rate_section(u + return RTW_RATE_SECTION_HT_1S; + else if (rate >= DESC_RATEMCS8 && rate <= DESC_RATEMCS15) + return RTW_RATE_SECTION_HT_2S; ++ else if (rate >= DESC_RATEMCS16 && rate <= DESC_RATEMCS23) ++ return RTW_RATE_SECTION_HT_3S; ++ else if (rate >= DESC_RATEMCS24 && rate <= DESC_RATEMCS31) ++ return RTW_RATE_SECTION_HT_4S; + else if (rate >= DESC_RATEVHT1SS_MCS0 && rate <= DESC_RATEVHT1SS_MCS9) + return RTW_RATE_SECTION_VHT_1S; + else if (rate >= DESC_RATEVHT2SS_MCS0 && rate <= DESC_RATEVHT2SS_MCS9) + return RTW_RATE_SECTION_VHT_2S; ++ else if (rate >= DESC_RATEVHT3SS_MCS0 && rate <= DESC_RATEVHT3SS_MCS9) ++ return RTW_RATE_SECTION_VHT_3S; ++ else if (rate >= DESC_RATEVHT4SS_MCS0 && rate <= DESC_RATEVHT4SS_MCS9) ++ return RTW_RATE_SECTION_VHT_4S; + else + return RTW_RATE_SECTION_NUM; + } +@@ -2102,7 +2169,7 @@ static s8 rtw_phy_get_tx_power_limit(str + bw = RTW_CHANNEL_WIDTH_20; + + /* only 20/40M BW with ht */ +- if (rs == RTW_RATE_SECTION_HT_1S || rs == RTW_RATE_SECTION_HT_2S) ++ if (rate >= DESC_RATEMCS0 && rate <= DESC_RATEMCS31) + bw = min_t(u8, bw, RTW_CHANNEL_WIDTH_40); + + /* select min power limit among [20M BW ~ current BW] */ +@@ -2286,7 +2353,7 @@ rtw_phy_tx_power_by_rate_config_by_path( + u8 base_idx, rate_idx; + s8 base_2g, base_5g; + +- if (rs >= RTW_RATE_SECTION_VHT_1S) ++ if (size == 10) /* VHT rates */ + base_idx = rates[size - 3]; + else + base_idx = rates[size - 1]; +@@ -2303,28 +2370,12 @@ rtw_phy_tx_power_by_rate_config_by_path( + + void rtw_phy_tx_power_by_rate_config(struct rtw_hal *hal) + { +- u8 path; ++ u8 path, rs; + +- for (path = 0; path < RTW_RF_PATH_MAX; path++) { +- rtw_phy_tx_power_by_rate_config_by_path(hal, path, +- RTW_RATE_SECTION_CCK, +- rtw_cck_size, rtw_cck_rates); +- rtw_phy_tx_power_by_rate_config_by_path(hal, path, +- RTW_RATE_SECTION_OFDM, +- rtw_ofdm_size, rtw_ofdm_rates); +- rtw_phy_tx_power_by_rate_config_by_path(hal, path, +- RTW_RATE_SECTION_HT_1S, +- rtw_ht_1s_size, rtw_ht_1s_rates); +- rtw_phy_tx_power_by_rate_config_by_path(hal, path, +- RTW_RATE_SECTION_HT_2S, +- rtw_ht_2s_size, rtw_ht_2s_rates); +- rtw_phy_tx_power_by_rate_config_by_path(hal, path, +- RTW_RATE_SECTION_VHT_1S, +- rtw_vht_1s_size, rtw_vht_1s_rates); +- rtw_phy_tx_power_by_rate_config_by_path(hal, path, +- RTW_RATE_SECTION_VHT_2S, +- rtw_vht_2s_size, rtw_vht_2s_rates); +- } ++ for (path = 0; path < RTW_RF_PATH_MAX; path++) ++ for (rs = 0; rs < RTW_RATE_SECTION_NUM; rs++) ++ rtw_phy_tx_power_by_rate_config_by_path(hal, path, rs, ++ rtw_rate_size[rs], rtw_rate_section[rs]); + } + + static void +--- a/drivers/net/wireless/realtek/rtw88/phy.h ++++ b/drivers/net/wireless/realtek/rtw88/phy.h +@@ -13,6 +13,10 @@ extern const u8 rtw_ht_1s_rates[]; + extern const u8 rtw_ht_2s_rates[]; + extern const u8 rtw_vht_1s_rates[]; + extern const u8 rtw_vht_2s_rates[]; ++extern const u8 rtw_ht_3s_rates[]; ++extern const u8 rtw_ht_4s_rates[]; ++extern const u8 rtw_vht_3s_rates[]; ++extern const u8 rtw_vht_4s_rates[]; + extern const u8 * const rtw_rate_section[]; + extern const u8 rtw_rate_size[]; + +--- a/drivers/net/wireless/realtek/rtw88/rtw8821c.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.c +@@ -709,7 +709,7 @@ static void rtw8821c_set_tx_power_index( + int rs, path; + + for (path = 0; path < hal->rf_path_num; path++) { +- for (rs = 0; rs < RTW_RATE_SECTION_NUM; rs++) { ++ for (rs = 0; rs <= __RTW_RATE_SECTION_2SS_MAX; rs++) { + if (rs == RTW_RATE_SECTION_HT_2S || + rs == RTW_RATE_SECTION_VHT_2S) + continue; +--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c +@@ -964,7 +964,7 @@ static void rtw8822b_set_tx_power_index( + int rs, path; + + for (path = 0; path < hal->rf_path_num; path++) { +- for (rs = 0; rs < RTW_RATE_SECTION_NUM; rs++) ++ for (rs = 0; rs <= __RTW_RATE_SECTION_2SS_MAX; rs++) + rtw8822b_set_tx_power_index_by_rate(rtwdev, path, rs, + &phy_pwr_idx); + } +--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c +@@ -2746,7 +2746,7 @@ static void rtw8822c_set_tx_power_index( + s8 diff_idx[4]; + + rtw8822c_set_write_tx_power_ref(rtwdev, pwr_ref_cck, pwr_ref_ofdm); +- for (rs = 0; rs < RTW_RATE_SECTION_NUM; rs++) { ++ for (rs = 0; rs <= __RTW_RATE_SECTION_2SS_MAX; rs++) { + for (j = 0; j < rtw_rate_size[rs]; j++) { + rate = rtw_rate_section[rs][j]; + pwr_a = hal->tx_pwr_tbl[RF_PATH_A][rate]; +--- a/drivers/net/wireless/realtek/rtw88/rtw88xxa.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw88xxa.c +@@ -1637,7 +1637,7 @@ void rtw88xxa_set_tx_power_index(struct + int rs, path; + + for (path = 0; path < hal->rf_path_num; path++) { +- for (rs = 0; rs < RTW_RATE_SECTION_NUM; rs++) { ++ for (rs = 0; rs <= __RTW_RATE_SECTION_2SS_MAX; rs++) { + if (hal->rf_path_num == 1 && + (rs == RTW_RATE_SECTION_HT_2S || + rs == RTW_RATE_SECTION_VHT_2S)) diff --git a/package/kernel/mac80211/patches/rtl/075-v6.14.9-wifi-rtw88-Fix-rtw_update_sta_info-for-RTL8814AU.patch b/package/kernel/mac80211/patches/rtl/075-v6.14.9-wifi-rtw88-Fix-rtw_update_sta_info-for-RTL8814AU.patch new file mode 100644 index 00000000000..64bc7f87077 --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/075-v6.14.9-wifi-rtw88-Fix-rtw_update_sta_info-for-RTL8814AU.patch @@ -0,0 +1,61 @@ +From 9f00e2218e15a2ea3c284567424a100c10b6fb85 Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Tue, 4 Feb 2025 20:42:08 +0200 +Subject: [PATCH] wifi: rtw88: Fix rtw_update_sta_info() for RTL8814AU + +This function tells the firmware what rates it can use. + +Put the 3SS and 4SS HT rates supported by the other station into the +rate mask. + +Remove the 3SS and 4SS rates from the rate mask if the hardware only has +2 spatial streams. + +And finally, select the right rate ID (a parameter for the firmware) +when the hardware has 3 spatial streams. + +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/48d1d90f-2aeb-4ec5-9a24-0980e10eae1e@gmail.com +--- + drivers/net/wireless/realtek/rtw88/main.c | 14 +++++++++----- + 1 file changed, 9 insertions(+), 5 deletions(-) + +--- a/drivers/net/wireless/realtek/rtw88/main.c ++++ b/drivers/net/wireless/realtek/rtw88/main.c +@@ -1234,7 +1234,9 @@ void rtw_update_sta_info(struct rtw_dev + if (sta->deflink.vht_cap.cap & IEEE80211_VHT_CAP_RXLDPC) + ldpc_en = VHT_LDPC_EN; + } else if (sta->deflink.ht_cap.ht_supported) { +- ra_mask |= (sta->deflink.ht_cap.mcs.rx_mask[1] << 20) | ++ ra_mask |= ((u64)sta->deflink.ht_cap.mcs.rx_mask[3] << 36) | ++ ((u64)sta->deflink.ht_cap.mcs.rx_mask[2] << 28) | ++ (sta->deflink.ht_cap.mcs.rx_mask[1] << 20) | + (sta->deflink.ht_cap.mcs.rx_mask[0] << 12); + if (sta->deflink.ht_cap.cap & IEEE80211_HT_CAP_RX_STBC) + stbc_en = HT_STBC_EN; +@@ -1244,6 +1246,9 @@ void rtw_update_sta_info(struct rtw_dev + + if (efuse->hw_cap.nss == 1 || rtwdev->hal.txrx_1ss) + ra_mask &= RA_MASK_VHT_RATES_1SS | RA_MASK_HT_RATES_1SS; ++ else if (efuse->hw_cap.nss == 2) ++ ra_mask &= RA_MASK_VHT_RATES_2SS | RA_MASK_HT_RATES_2SS | ++ RA_MASK_VHT_RATES_1SS | RA_MASK_HT_RATES_1SS; + + if (hal->current_band_type == RTW_BAND_5G) { + ra_mask |= (u64)sta->deflink.supp_rates[NL80211_BAND_5GHZ] << 4; +@@ -1302,10 +1307,9 @@ void rtw_update_sta_info(struct rtw_dev + break; + } + +- if (sta->deflink.vht_cap.vht_supported && ra_mask & 0xffc00000) +- tx_num = 2; +- else if (sta->deflink.ht_cap.ht_supported && ra_mask & 0xfff00000) +- tx_num = 2; ++ if (sta->deflink.vht_cap.vht_supported || ++ sta->deflink.ht_cap.ht_supported) ++ tx_num = efuse->hw_cap.nss; + + rate_id = get_rate_id(wireless_set, bw_mode, tx_num); + diff --git a/package/kernel/mac80211/patches/rtl/076-v6.14-wifi-rtw88-Add-support-for-Mercusys-MA30N-and-D-Link.patch b/package/kernel/mac80211/patches/rtl/076-v6.14-wifi-rtw88-Add-support-for-Mercusys-MA30N-and-D-Link.patch new file mode 100644 index 00000000000..e281cf6ecec --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/076-v6.14-wifi-rtw88-Add-support-for-Mercusys-MA30N-and-D-Link.patch @@ -0,0 +1,31 @@ +From 80c4668d024ff7b5427d90b5fad655ce9461c7b1 Mon Sep 17 00:00:00 2001 +From: Zenm Chen +Date: Mon, 10 Feb 2025 15:36:10 +0800 +Subject: [PATCH] wifi: rtw88: Add support for Mercusys MA30N and D-Link + DWA-T185 rev. A1 + +Add two more USB IDs found in +https://github.com/RinCat/RTL88x2BU-Linux-Driver +to support Mercusys MA30N and D-Link DWA-T185 rev. A1. + +Signed-off-by: Zenm Chen +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/20250210073610.4174-1-zenmchen@gmail.com +--- + drivers/net/wireless/realtek/rtw88/rtw8822bu.c | 4 ++++ + 1 file changed, 4 insertions(+) + +--- a/drivers/net/wireless/realtek/rtw88/rtw8822bu.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8822bu.c +@@ -73,6 +73,10 @@ static const struct usb_device_id rtw_88 + .driver_info = (kernel_ulong_t)&(rtw8822b_hw_spec) }, /* ELECOM WDB-867DU3S */ + { USB_DEVICE_AND_INTERFACE_INFO(0x2c4e, 0x0107, 0xff, 0xff, 0xff), + .driver_info = (kernel_ulong_t)&(rtw8822b_hw_spec) }, /* Mercusys MA30H */ ++ { USB_DEVICE_AND_INTERFACE_INFO(0x2c4e, 0x010a, 0xff, 0xff, 0xff), ++ .driver_info = (kernel_ulong_t)&(rtw8822b_hw_spec) }, /* Mercusys MA30N */ ++ { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x3322, 0xff, 0xff, 0xff), ++ .driver_info = (kernel_ulong_t)&(rtw8822b_hw_spec) }, /* D-Link DWA-T185 rev. A1 */ + {}, + }; + MODULE_DEVICE_TABLE(usb, rtw_8822bu_id_table); diff --git a/package/kernel/mac80211/patches/rtl/077-v6.14.9-wifi-rtw88-Fix-rtw_mac_power_switch-for-RTL8814AU.patch b/package/kernel/mac80211/patches/rtl/077-v6.14.9-wifi-rtw88-Fix-rtw_mac_power_switch-for-RTL8814AU.patch new file mode 100644 index 00000000000..092a7677bd4 --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/077-v6.14.9-wifi-rtw88-Fix-rtw_mac_power_switch-for-RTL8814AU.patch @@ -0,0 +1,27 @@ +From e66bca16638ee59e997f9d9a3711b3ae587d04d9 Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Tue, 18 Feb 2025 01:28:59 +0200 +Subject: [PATCH] wifi: rtw88: Fix rtw_mac_power_switch() for RTL8814AU + +rtw_mac_power_switch() checks bit 8 of REG_SYS_STATUS1 to see if the +chip is powered on. This bit appears to be always on in the RTL8814AU, +so ignore it. + +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/2f0fcffb-3067-4d95-a68c-f2f3a5a47921@gmail.com +--- + drivers/net/wireless/realtek/rtw88/mac.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/net/wireless/realtek/rtw88/mac.c ++++ b/drivers/net/wireless/realtek/rtw88/mac.c +@@ -291,6 +291,7 @@ static int rtw_mac_power_switch(struct r + if (rtw_read8(rtwdev, REG_CR) == 0xea) + cur_pwr = false; + else if (rtw_hci_type(rtwdev) == RTW_HCI_TYPE_USB && ++ chip->id != RTW_CHIP_TYPE_8814A && + (rtw_read8(rtwdev, REG_SYS_STATUS1 + 1) & BIT(0))) + cur_pwr = false; + else diff --git a/package/kernel/mac80211/patches/rtl/078-v6.14.9-wifi-rtw88-Fix-rtw_desc_to_mcsrate-to-handle-MCS16-3.patch b/package/kernel/mac80211/patches/rtl/078-v6.14.9-wifi-rtw88-Fix-rtw_desc_to_mcsrate-to-handle-MCS16-3.patch new file mode 100644 index 00000000000..c9588ad545c --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/078-v6.14.9-wifi-rtw88-Fix-rtw_desc_to_mcsrate-to-handle-MCS16-3.patch @@ -0,0 +1,32 @@ +From 86d04f8f991a0509e318fe886d5a1cf795736c7d Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Tue, 18 Feb 2025 01:29:52 +0200 +Subject: [PATCH] wifi: rtw88: Fix rtw_desc_to_mcsrate() to handle MCS16-31 + +This function translates the rate number reported by the hardware into +something mac80211 can understand. It was ignoring the 3SS and 4SS HT +rates. Translate them too. + +Also set *nss to 0 for the HT rates, just to make sure it's +initialised. + +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/d0a5a86b-4869-47f6-a5a7-01c0f987cc7f@gmail.com +--- + drivers/net/wireless/realtek/rtw88/util.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/drivers/net/wireless/realtek/rtw88/util.c ++++ b/drivers/net/wireless/realtek/rtw88/util.c +@@ -101,7 +101,8 @@ void rtw_desc_to_mcsrate(u16 rate, u8 *m + *nss = 4; + *mcs = rate - DESC_RATEVHT4SS_MCS0; + } else if (rate >= DESC_RATEMCS0 && +- rate <= DESC_RATEMCS15) { ++ rate <= DESC_RATEMCS31) { ++ *nss = 0; + *mcs = rate - DESC_RATEMCS0; + } + } diff --git a/package/kernel/mac80211/patches/rtl/079-v6.14.9-wifi-rtw88-Fix-rtw_init_ht_cap-for-RTL8814AU.patch b/package/kernel/mac80211/patches/rtl/079-v6.14.9-wifi-rtw88-Fix-rtw_init_ht_cap-for-RTL8814AU.patch new file mode 100644 index 00000000000..78014f898b1 --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/079-v6.14.9-wifi-rtw88-Fix-rtw_init_ht_cap-for-RTL8814AU.patch @@ -0,0 +1,49 @@ +From c7eea1ba05ca5b0dbf77a27cf2e1e6e2fb3c0043 Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Tue, 18 Feb 2025 01:30:22 +0200 +Subject: [PATCH] wifi: rtw88: Fix rtw_init_ht_cap() for RTL8814AU + +Set the RX mask and the highest RX rate according to the number of +spatial streams the chip can receive. For RTL8814AU that is 3. + +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/4e786f50-ed1c-4387-8b28-e6ff00e35e81@gmail.com +--- + drivers/net/wireless/realtek/rtw88/main.c | 17 ++++++----------- + 1 file changed, 6 insertions(+), 11 deletions(-) + +--- a/drivers/net/wireless/realtek/rtw88/main.c ++++ b/drivers/net/wireless/realtek/rtw88/main.c +@@ -1565,6 +1565,7 @@ static void rtw_init_ht_cap(struct rtw_d + { + const struct rtw_chip_info *chip = rtwdev->chip; + struct rtw_efuse *efuse = &rtwdev->efuse; ++ int i; + + ht_cap->ht_supported = true; + ht_cap->cap = 0; +@@ -1584,17 +1585,11 @@ static void rtw_init_ht_cap(struct rtw_d + ht_cap->ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K; + ht_cap->ampdu_density = chip->ampdu_density; + ht_cap->mcs.tx_params = IEEE80211_HT_MCS_TX_DEFINED; +- if (efuse->hw_cap.nss > 1) { +- ht_cap->mcs.rx_mask[0] = 0xFF; +- ht_cap->mcs.rx_mask[1] = 0xFF; +- ht_cap->mcs.rx_mask[4] = 0x01; +- ht_cap->mcs.rx_highest = cpu_to_le16(300); +- } else { +- ht_cap->mcs.rx_mask[0] = 0xFF; +- ht_cap->mcs.rx_mask[1] = 0x00; +- ht_cap->mcs.rx_mask[4] = 0x01; +- ht_cap->mcs.rx_highest = cpu_to_le16(150); +- } ++ ++ for (i = 0; i < efuse->hw_cap.nss; i++) ++ ht_cap->mcs.rx_mask[i] = 0xFF; ++ ht_cap->mcs.rx_mask[4] = 0x01; ++ ht_cap->mcs.rx_highest = cpu_to_le16(150 * efuse->hw_cap.nss); + } + + static void rtw_init_vht_cap(struct rtw_dev *rtwdev, diff --git a/package/kernel/mac80211/patches/rtl/080-v6.14.9-wifi-rtw88-Fix-rtw_init_vht_cap-for-RTL8814AU.patch b/package/kernel/mac80211/patches/rtl/080-v6.14.9-wifi-rtw88-Fix-rtw_init_vht_cap-for-RTL8814AU.patch new file mode 100644 index 00000000000..e5f0de87d69 --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/080-v6.14.9-wifi-rtw88-Fix-rtw_init_vht_cap-for-RTL8814AU.patch @@ -0,0 +1,58 @@ +From 6be7544d19fcfcb729495e793bc6181f85bb8949 Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Tue, 18 Feb 2025 01:30:48 +0200 +Subject: [PATCH] wifi: rtw88: Fix rtw_init_vht_cap() for RTL8814AU + +Set the MCS maps and the highest rates according to the number of +spatial streams the chip has. For RTL8814AU that is 3. + +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/e86aa009-b5bf-4b3a-8112-ea5e3cd49465@gmail.com +--- + drivers/net/wireless/realtek/rtw88/main.c | 23 +++++++++-------------- + 1 file changed, 9 insertions(+), 14 deletions(-) + +--- a/drivers/net/wireless/realtek/rtw88/main.c ++++ b/drivers/net/wireless/realtek/rtw88/main.c +@@ -1596,8 +1596,9 @@ static void rtw_init_vht_cap(struct rtw_ + struct ieee80211_sta_vht_cap *vht_cap) + { + struct rtw_efuse *efuse = &rtwdev->efuse; +- u16 mcs_map; ++ u16 mcs_map = 0; + __le16 highest; ++ int i; + + if (efuse->hw_cap.ptcl != EFUSE_HW_CAP_IGNORE && + efuse->hw_cap.ptcl != EFUSE_HW_CAP_PTCL_VHT) +@@ -1620,21 +1621,15 @@ static void rtw_init_vht_cap(struct rtw_ + if (rtw_chip_has_rx_ldpc(rtwdev)) + vht_cap->cap |= IEEE80211_VHT_CAP_RXLDPC; + +- mcs_map = IEEE80211_VHT_MCS_SUPPORT_0_9 << 0 | +- IEEE80211_VHT_MCS_NOT_SUPPORTED << 4 | +- IEEE80211_VHT_MCS_NOT_SUPPORTED << 6 | +- IEEE80211_VHT_MCS_NOT_SUPPORTED << 8 | +- IEEE80211_VHT_MCS_NOT_SUPPORTED << 10 | +- IEEE80211_VHT_MCS_NOT_SUPPORTED << 12 | +- IEEE80211_VHT_MCS_NOT_SUPPORTED << 14; +- if (efuse->hw_cap.nss > 1) { +- highest = cpu_to_le16(780); +- mcs_map |= IEEE80211_VHT_MCS_SUPPORT_0_9 << 2; +- } else { +- highest = cpu_to_le16(390); +- mcs_map |= IEEE80211_VHT_MCS_NOT_SUPPORTED << 2; ++ for (i = 0; i < 8; i++) { ++ if (i < efuse->hw_cap.nss) ++ mcs_map |= IEEE80211_VHT_MCS_SUPPORT_0_9 << (i * 2); ++ else ++ mcs_map |= IEEE80211_VHT_MCS_NOT_SUPPORTED << (i * 2); + } + ++ highest = cpu_to_le16(390 * efuse->hw_cap.nss); ++ + vht_cap->vht_mcs.rx_mcs_map = cpu_to_le16(mcs_map); + vht_cap->vht_mcs.tx_mcs_map = cpu_to_le16(mcs_map); + vht_cap->vht_mcs.rx_highest = highest; diff --git a/package/kernel/mac80211/patches/rtl/081-v6.15-wifi-rtw88-Fix-rtw_rx_phy_stat-for-RTL8814AU.patch b/package/kernel/mac80211/patches/rtl/081-v6.15-wifi-rtw88-Fix-rtw_rx_phy_stat-for-RTL8814AU.patch new file mode 100644 index 00000000000..a1ca98f8b63 --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/081-v6.15-wifi-rtw88-Fix-rtw_rx_phy_stat-for-RTL8814AU.patch @@ -0,0 +1,54 @@ +From 053a7aace0207593776c729f229d87f1be464b98 Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Tue, 18 Feb 2025 01:31:13 +0200 +Subject: [PATCH] wifi: rtw88: Fix rtw_rx_phy_stat() for RTL8814AU + +Record statistics for the 3SS rates too. + +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/39e3c7cf-37ed-4c0e-af00-dcd9eab351f0@gmail.com +--- + drivers/net/wireless/realtek/rtw88/main.h | 7 +++++++ + drivers/net/wireless/realtek/rtw88/rx.c | 6 ++++++ + 2 files changed, 13 insertions(+) + +--- a/drivers/net/wireless/realtek/rtw88/main.h ++++ b/drivers/net/wireless/realtek/rtw88/main.h +@@ -386,6 +386,9 @@ enum rtw_evm { + RTW_EVM_1SS, + RTW_EVM_2SS_A, + RTW_EVM_2SS_B, ++ RTW_EVM_3SS_A, ++ RTW_EVM_3SS_B, ++ RTW_EVM_3SS_C, + /* keep it last */ + RTW_EVM_NUM + }; +@@ -403,6 +406,10 @@ enum rtw_snr { + RTW_SNR_2SS_B, + RTW_SNR_2SS_C, + RTW_SNR_2SS_D, ++ RTW_SNR_3SS_A, ++ RTW_SNR_3SS_B, ++ RTW_SNR_3SS_C, ++ RTW_SNR_3SS_D, + /* keep it last */ + RTW_SNR_NUM + }; +--- a/drivers/net/wireless/realtek/rtw88/rx.c ++++ b/drivers/net/wireless/realtek/rtw88/rx.c +@@ -73,6 +73,12 @@ static void rtw_rx_phy_stat(struct rtw_d + rate_ss_evm = 2; + evm_id = RTW_EVM_2SS_A; + break; ++ case DESC_RATEMCS16...DESC_RATEMCS23: ++ case DESC_RATEVHT3SS_MCS0...DESC_RATEVHT3SS_MCS9: ++ rate_ss = 3; ++ rate_ss_evm = 3; ++ evm_id = RTW_EVM_3SS_A; ++ break; + default: + rtw_warn(rtwdev, "unknown pkt rate = %d\n", pkt_stat->rate); + return; diff --git a/package/kernel/mac80211/patches/rtl/082-v6.15-wifi-rtw88-Extend-rtw_phy_config_swing_table-for-RTL.patch b/package/kernel/mac80211/patches/rtl/082-v6.15-wifi-rtw88-Extend-rtw_phy_config_swing_table-for-RTL.patch new file mode 100644 index 00000000000..2ac27f39e73 --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/082-v6.15-wifi-rtw88-Extend-rtw_phy_config_swing_table-for-RTL.patch @@ -0,0 +1,75 @@ +From 8b42c46cf6656ef3c2f6d1ec0f113753c6875712 Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Tue, 18 Feb 2025 01:31:51 +0200 +Subject: [PATCH] wifi: rtw88: Extend rtw_phy_config_swing_table() for + RTL8814AU + +Select the TX power tracking tables for RF paths C and D as well. + +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/e1e532c9-8733-4ec8-84fe-ced4af6c08da@gmail.com +--- + drivers/net/wireless/realtek/rtw88/phy.c | 24 ++++++++++++++++++++++++ + 1 file changed, 24 insertions(+) + +--- a/drivers/net/wireless/realtek/rtw88/phy.c ++++ b/drivers/net/wireless/realtek/rtw88/phy.c +@@ -2458,32 +2458,56 @@ void rtw_phy_config_swing_table(struct r + swing_table->n[RF_PATH_A] = tbl->pwrtrk_2g_ccka_n; + swing_table->p[RF_PATH_B] = tbl->pwrtrk_2g_cckb_p; + swing_table->n[RF_PATH_B] = tbl->pwrtrk_2g_cckb_n; ++ swing_table->p[RF_PATH_C] = tbl->pwrtrk_2g_cckc_p; ++ swing_table->n[RF_PATH_C] = tbl->pwrtrk_2g_cckc_n; ++ swing_table->p[RF_PATH_D] = tbl->pwrtrk_2g_cckd_p; ++ swing_table->n[RF_PATH_D] = tbl->pwrtrk_2g_cckd_n; + } else { + swing_table->p[RF_PATH_A] = tbl->pwrtrk_2ga_p; + swing_table->n[RF_PATH_A] = tbl->pwrtrk_2ga_n; + swing_table->p[RF_PATH_B] = tbl->pwrtrk_2gb_p; + swing_table->n[RF_PATH_B] = tbl->pwrtrk_2gb_n; ++ swing_table->p[RF_PATH_C] = tbl->pwrtrk_2gc_p; ++ swing_table->n[RF_PATH_C] = tbl->pwrtrk_2gc_n; ++ swing_table->p[RF_PATH_D] = tbl->pwrtrk_2gd_p; ++ swing_table->n[RF_PATH_D] = tbl->pwrtrk_2gd_n; + } + } else if (IS_CH_5G_BAND_1(channel) || IS_CH_5G_BAND_2(channel)) { + swing_table->p[RF_PATH_A] = tbl->pwrtrk_5ga_p[RTW_PWR_TRK_5G_1]; + swing_table->n[RF_PATH_A] = tbl->pwrtrk_5ga_n[RTW_PWR_TRK_5G_1]; + swing_table->p[RF_PATH_B] = tbl->pwrtrk_5gb_p[RTW_PWR_TRK_5G_1]; + swing_table->n[RF_PATH_B] = tbl->pwrtrk_5gb_n[RTW_PWR_TRK_5G_1]; ++ swing_table->p[RF_PATH_C] = tbl->pwrtrk_5gc_p[RTW_PWR_TRK_5G_1]; ++ swing_table->n[RF_PATH_C] = tbl->pwrtrk_5gc_n[RTW_PWR_TRK_5G_1]; ++ swing_table->p[RF_PATH_D] = tbl->pwrtrk_5gd_p[RTW_PWR_TRK_5G_1]; ++ swing_table->n[RF_PATH_D] = tbl->pwrtrk_5gd_n[RTW_PWR_TRK_5G_1]; + } else if (IS_CH_5G_BAND_3(channel)) { + swing_table->p[RF_PATH_A] = tbl->pwrtrk_5ga_p[RTW_PWR_TRK_5G_2]; + swing_table->n[RF_PATH_A] = tbl->pwrtrk_5ga_n[RTW_PWR_TRK_5G_2]; + swing_table->p[RF_PATH_B] = tbl->pwrtrk_5gb_p[RTW_PWR_TRK_5G_2]; + swing_table->n[RF_PATH_B] = tbl->pwrtrk_5gb_n[RTW_PWR_TRK_5G_2]; ++ swing_table->p[RF_PATH_C] = tbl->pwrtrk_5gc_p[RTW_PWR_TRK_5G_2]; ++ swing_table->n[RF_PATH_C] = tbl->pwrtrk_5gc_n[RTW_PWR_TRK_5G_2]; ++ swing_table->p[RF_PATH_D] = tbl->pwrtrk_5gd_p[RTW_PWR_TRK_5G_2]; ++ swing_table->n[RF_PATH_D] = tbl->pwrtrk_5gd_n[RTW_PWR_TRK_5G_2]; + } else if (IS_CH_5G_BAND_4(channel)) { + swing_table->p[RF_PATH_A] = tbl->pwrtrk_5ga_p[RTW_PWR_TRK_5G_3]; + swing_table->n[RF_PATH_A] = tbl->pwrtrk_5ga_n[RTW_PWR_TRK_5G_3]; + swing_table->p[RF_PATH_B] = tbl->pwrtrk_5gb_p[RTW_PWR_TRK_5G_3]; + swing_table->n[RF_PATH_B] = tbl->pwrtrk_5gb_n[RTW_PWR_TRK_5G_3]; ++ swing_table->p[RF_PATH_C] = tbl->pwrtrk_5gc_p[RTW_PWR_TRK_5G_3]; ++ swing_table->n[RF_PATH_C] = tbl->pwrtrk_5gc_n[RTW_PWR_TRK_5G_3]; ++ swing_table->p[RF_PATH_D] = tbl->pwrtrk_5gd_p[RTW_PWR_TRK_5G_3]; ++ swing_table->n[RF_PATH_D] = tbl->pwrtrk_5gd_n[RTW_PWR_TRK_5G_3]; + } else { + swing_table->p[RF_PATH_A] = tbl->pwrtrk_2ga_p; + swing_table->n[RF_PATH_A] = tbl->pwrtrk_2ga_n; + swing_table->p[RF_PATH_B] = tbl->pwrtrk_2gb_p; + swing_table->n[RF_PATH_B] = tbl->pwrtrk_2gb_n; ++ swing_table->p[RF_PATH_C] = tbl->pwrtrk_2gc_p; ++ swing_table->n[RF_PATH_C] = tbl->pwrtrk_2gc_n; ++ swing_table->p[RF_PATH_D] = tbl->pwrtrk_2gd_p; ++ swing_table->n[RF_PATH_D] = tbl->pwrtrk_2gd_n; + } + } + EXPORT_SYMBOL(rtw_phy_config_swing_table); diff --git a/package/kernel/mac80211/patches/rtl/083-v6.15-wifi-rtw88-Extend-rtw_debugfs_get_phy_info-for-RTL88.patch b/package/kernel/mac80211/patches/rtl/083-v6.15-wifi-rtw88-Extend-rtw_debugfs_get_phy_info-for-RTL88.patch new file mode 100644 index 00000000000..d34d72a0fb5 --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/083-v6.15-wifi-rtw88-Extend-rtw_debugfs_get_phy_info-for-RTL88.patch @@ -0,0 +1,86 @@ +From cfebabdd351e9cbafdc99cb198db482208ec5ad9 Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Tue, 18 Feb 2025 01:32:15 +0200 +Subject: [PATCH] wifi: rtw88: Extend rtw_debugfs_get_phy_info() for RTL8814AU + +Print information about the 3rd and 4th RF paths and about the 3rd +spatial stream. + +Also, fix a small bug: don't show the average SNR and EVM for the OFDM +and HT/VHT rates when the rate is actually CCK 11M. + +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/7c8e94e2-e034-40f3-bdaf-b000018b5573@gmail.com +--- + drivers/net/wireless/realtek/rtw88/debug.c | 37 +++++++++++++++------- + 1 file changed, 26 insertions(+), 11 deletions(-) + +--- a/drivers/net/wireless/realtek/rtw88/debug.c ++++ b/drivers/net/wireless/realtek/rtw88/debug.c +@@ -654,10 +654,10 @@ static void rtw_print_rate(struct seq_fi + case DESC_RATE6M...DESC_RATE54M: + rtw_print_ofdm_rate_txt(m, rate); + break; +- case DESC_RATEMCS0...DESC_RATEMCS15: ++ case DESC_RATEMCS0...DESC_RATEMCS31: + rtw_print_ht_rate_txt(m, rate); + break; +- case DESC_RATEVHT1SS_MCS0...DESC_RATEVHT2SS_MCS9: ++ case DESC_RATEVHT1SS_MCS0...DESC_RATEVHT4SS_MCS9: + rtw_print_vht_rate_txt(m, rate); + break; + default: +@@ -849,20 +849,28 @@ static int rtw_debugfs_get_phy_info(stru + last_cnt->num_qry_pkt[rate_id + 9]); + } + +- seq_printf(m, "[RSSI(dBm)] = {%d, %d}\n", ++ seq_printf(m, "[RSSI(dBm)] = {%d, %d, %d, %d}\n", + dm_info->rssi[RF_PATH_A] - 100, +- dm_info->rssi[RF_PATH_B] - 100); +- seq_printf(m, "[Rx EVM(dB)] = {-%d, -%d}\n", ++ dm_info->rssi[RF_PATH_B] - 100, ++ dm_info->rssi[RF_PATH_C] - 100, ++ dm_info->rssi[RF_PATH_D] - 100); ++ seq_printf(m, "[Rx EVM(dB)] = {-%d, -%d, -%d, -%d}\n", + dm_info->rx_evm_dbm[RF_PATH_A], +- dm_info->rx_evm_dbm[RF_PATH_B]); +- seq_printf(m, "[Rx SNR] = {%d, %d}\n", ++ dm_info->rx_evm_dbm[RF_PATH_B], ++ dm_info->rx_evm_dbm[RF_PATH_C], ++ dm_info->rx_evm_dbm[RF_PATH_D]); ++ seq_printf(m, "[Rx SNR] = {%d, %d, %d, %d}\n", + dm_info->rx_snr[RF_PATH_A], +- dm_info->rx_snr[RF_PATH_B]); +- seq_printf(m, "[CFO_tail(KHz)] = {%d, %d}\n", ++ dm_info->rx_snr[RF_PATH_B], ++ dm_info->rx_snr[RF_PATH_C], ++ dm_info->rx_snr[RF_PATH_D]); ++ seq_printf(m, "[CFO_tail(KHz)] = {%d, %d, %d, %d}\n", + dm_info->cfo_tail[RF_PATH_A], +- dm_info->cfo_tail[RF_PATH_B]); ++ dm_info->cfo_tail[RF_PATH_B], ++ dm_info->cfo_tail[RF_PATH_C], ++ dm_info->cfo_tail[RF_PATH_D]); + +- if (dm_info->curr_rx_rate >= DESC_RATE11M) { ++ if (dm_info->curr_rx_rate >= DESC_RATE6M) { + seq_puts(m, "[Rx Average Status]:\n"); + seq_printf(m, " * OFDM, EVM: {-%d}, SNR: {%d}\n", + (u8)ewma_evm_read(&ewma_evm[RTW_EVM_OFDM]), +@@ -875,6 +883,13 @@ static int rtw_debugfs_get_phy_info(stru + (u8)ewma_evm_read(&ewma_evm[RTW_EVM_2SS_B]), + (u8)ewma_snr_read(&ewma_snr[RTW_SNR_2SS_A]), + (u8)ewma_snr_read(&ewma_snr[RTW_SNR_2SS_B])); ++ seq_printf(m, " * 3SS, EVM: {-%d, -%d, -%d}, SNR: {%d, %d, %d}\n", ++ (u8)ewma_evm_read(&ewma_evm[RTW_EVM_3SS_A]), ++ (u8)ewma_evm_read(&ewma_evm[RTW_EVM_3SS_B]), ++ (u8)ewma_evm_read(&ewma_evm[RTW_EVM_3SS_C]), ++ (u8)ewma_snr_read(&ewma_snr[RTW_SNR_3SS_A]), ++ (u8)ewma_snr_read(&ewma_snr[RTW_SNR_3SS_B]), ++ (u8)ewma_snr_read(&ewma_snr[RTW_SNR_3SS_C])); + } + + seq_puts(m, "[Rx Counter]:\n"); diff --git a/package/kernel/mac80211/patches/rtl/084-v6.15-wifi-rtw88-Extend-rtw_debugfs_get_tx_pwr_tbl-for-RTL.patch b/package/kernel/mac80211/patches/rtl/084-v6.15-wifi-rtw88-Extend-rtw_debugfs_get_tx_pwr_tbl-for-RTL.patch new file mode 100644 index 00000000000..75fff03ed49 --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/084-v6.15-wifi-rtw88-Extend-rtw_debugfs_get_tx_pwr_tbl-for-RTL.patch @@ -0,0 +1,65 @@ +From c374281f828545b3698cf936b584249c2f9e40c5 Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Tue, 18 Feb 2025 01:32:49 +0200 +Subject: [PATCH] wifi: rtw88: Extend rtw_debugfs_get_tx_pwr_tbl() for + RTL8814AU + +Make it print the TX power details for all RF paths, not just A and B, +and for all the rates supported by the chip, not just 1SS and 2SS +rates. + +Also skip the RF paths and rates not supported by the chip. + +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/ea65a978-a735-4c97-af82-d7fe26f95da1@gmail.com +--- + drivers/net/wireless/realtek/rtw88/debug.c | 20 +++++++++++++------- + 1 file changed, 13 insertions(+), 7 deletions(-) + +--- a/drivers/net/wireless/realtek/rtw88/debug.c ++++ b/drivers/net/wireless/realtek/rtw88/debug.c +@@ -692,9 +692,11 @@ static int rtw_debugfs_get_tx_pwr_tbl(st + { + struct rtw_debugfs_priv *debugfs_priv = m->private; + struct rtw_dev *rtwdev = debugfs_priv->rtwdev; ++ struct rtw_power_params pwr_param = {0}; + struct rtw_hal *hal = &rtwdev->hal; ++ u8 nss = rtwdev->efuse.hw_cap.nss; + u8 path, rate, bw, ch, regd; +- struct rtw_power_params pwr_param = {0}; ++ u8 max_ht_rate, max_rate; + + mutex_lock(&rtwdev->mutex); + bw = hal->current_band_width; +@@ -707,19 +709,23 @@ static int rtw_debugfs_get_tx_pwr_tbl(st + seq_printf(m, "%-4s %-10s %-9s %-9s (%-4s %-4s %-4s) %-4s\n", + "path", "rate", "pwr", "base", "byr", "lmt", "sar", "rem"); + ++ max_ht_rate = DESC_RATEMCS0 + nss * 8 - 1; ++ ++ if (rtwdev->chip->vht_supported) ++ max_rate = DESC_RATEVHT1SS_MCS0 + nss * 10 - 1; ++ else ++ max_rate = max_ht_rate; ++ + mutex_lock(&hal->tx_power_mutex); +- for (path = RF_PATH_A; path <= RF_PATH_B; path++) { ++ for (path = RF_PATH_A; path < hal->rf_path_num; path++) { + /* there is no CCK rates used in 5G */ + if (hal->current_band_type == RTW_BAND_5G) + rate = DESC_RATE6M; + else + rate = DESC_RATE1M; + +- /* now, not support vht 3ss and vht 4ss*/ +- for (; rate <= DESC_RATEVHT2SS_MCS9; rate++) { +- /* now, not support ht 3ss and ht 4ss*/ +- if (rate > DESC_RATEMCS15 && +- rate < DESC_RATEVHT1SS_MCS0) ++ for (; rate <= max_rate; rate++) { ++ if (rate > max_ht_rate && rate <= DESC_RATEMCS31) + continue; + + rtw_get_tx_power_params(rtwdev, path, rate, bw, diff --git a/package/kernel/mac80211/patches/rtl/085-v6.15-wifi-rtw88-Add-some-definitions-for-RTL8814AU.patch b/package/kernel/mac80211/patches/rtl/085-v6.15-wifi-rtw88-Add-some-definitions-for-RTL8814AU.patch new file mode 100644 index 00000000000..d14f1eae4eb --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/085-v6.15-wifi-rtw88-Add-some-definitions-for-RTL8814AU.patch @@ -0,0 +1,200 @@ +From 679ec431477cdb68d1cab068c008da0de7f842ef Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Fri, 7 Mar 2025 02:22:17 +0200 +Subject: [PATCH] wifi: rtw88: Add some definitions for RTL8814AU + +Add various register definitions which will be used by the new driver. + +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/1dcb5abb-26f8-4db5-be36-057de56465e5@gmail.com +--- + drivers/net/wireless/realtek/rtw88/reg.h | 66 ++++++++++++++++++++++-- + 1 file changed, 62 insertions(+), 4 deletions(-) + +--- a/drivers/net/wireless/realtek/rtw88/reg.h ++++ b/drivers/net/wireless/realtek/rtw88/reg.h +@@ -8,6 +8,7 @@ + #define REG_SYS_FUNC_EN 0x0002 + #define BIT_FEN_EN_25_1 BIT(13) + #define BIT_FEN_ELDR BIT(12) ++#define BIT_FEN_PCIEA BIT(6) + #define BIT_FEN_CPUEN BIT(2) + #define BIT_FEN_USBA BIT(2) + #define BIT_FEN_BB_GLB_RST BIT(1) +@@ -39,6 +40,9 @@ + #define BIT_RF_RSTB BIT(1) + #define BIT_RF_EN BIT(0) + ++#define REG_RF_CTRL1 0x0020 ++#define REG_RF_CTRL2 0x0021 ++ + #define REG_AFE_CTRL1 0x0024 + #define BIT_MAC_CLK_SEL (BIT(20) | BIT(21)) + #define REG_EFUSE_CTRL 0x0030 +@@ -73,6 +77,8 @@ + #define BIT_BT_PTA_EN BIT(5) + #define BIT_WLRFE_4_5_EN BIT(2) + ++#define REG_GPIO_PIN_CTRL 0x0044 ++ + #define REG_LED_CFG 0x004C + #define BIT_LNAON_SEL_EN BIT(26) + #define BIT_PAPE_SEL_EN BIT(25) +@@ -110,6 +116,7 @@ + #define BIT_SDIO_PAD_E5 BIT(18) + + #define REG_RF_B_CTRL 0x76 ++#define REG_RF_CTRL3 0x0076 + + #define REG_AFE_CTRL_4 0x0078 + #define BIT_CK320M_AFE_EN BIT(4) +@@ -603,15 +610,25 @@ + #define REG_CCA2ND 0x0838 + #define REG_L1PKTH 0x0848 + #define REG_CLKTRK 0x0860 ++#define REG_CSI_MASK_SETTING1 0x0874 ++#define REG_NBI_SETTING 0x087c ++#define BIT_NBI_ENABLE BIT(13) ++#define REG_CSI_FIX_MASK0 0x0880 ++#define REG_CSI_FIX_MASK1 0x0884 ++#define REG_CSI_FIX_MASK6 0x0898 ++#define REG_CSI_FIX_MASK7 0x089c + #define REG_ADCCLK 0x08AC + #define REG_HSSI_READ 0x08B0 + #define REG_FPGA0_XCD_RF_PARA 0x08B4 + #define REG_RX_MCS_LIMIT 0x08BC + #define REG_ADC160 0x08C4 ++#define REG_DBGSEL 0x08fc + #define REG_ANTSEL_SW 0x0900 + #define REG_DAC_RSTB 0x090c ++#define REG_PSD 0x0910 ++#define BIT_PSD_INI GENMASK(23, 22) + #define REG_SINGLE_TONE_CONT_TX 0x0914 +- ++#define REG_AGC_TABLE 0x0958 + #define REG_RFE_CTRL_E 0x0974 + #define REG_2ND_CCA_CTRL 0x0976 + #define REG_IQK_COM00 0x0978 +@@ -621,10 +638,18 @@ + + #define REG_FAS 0x09a4 + #define REG_RXSB 0x0a00 ++#define BIT_RXSB_ANA_DIV BIT(15) + #define REG_CCK_RX 0x0a04 + #define REG_CCK_PD_TH 0x0a0a +- +-#define REG_CCK0_FAREPORT 0xa2c ++#define REG_PRECTRL 0x0a14 ++#define BIT_DIS_CO_PATHSEL BIT(7) ++#define BIT_IQ_WGT GENMASK(9, 8) ++#define REG_CCA_MF 0x0a20 ++#define BIT_MBC_WIN GENMASK(5, 4) ++#define REG_CCK0_TX_FILTER1 0x0a20 ++#define REG_CCK0_TX_FILTER2 0x0a24 ++#define REG_CCK0_DEBUG_PORT 0x0a28 ++#define REG_CCK0_FAREPORT 0x0a2c + #define BIT_CCK0_2RX BIT(18) + #define BIT_CCK0_MRC BIT(22) + #define REG_FA_CCK 0x0a5c +@@ -643,10 +668,18 @@ + #define DIS_DPD_RATEVHT2SS_MCS1 BIT(9) + #define DIS_DPD_RATEALL GENMASK(9, 0) + ++#define REG_CCA 0x0a70 ++#define BIT_CCA_CO BIT(7) ++#define REG_ANTSEL 0x0a74 ++#define BIT_ANT_BYCO BIT(8) ++#define REG_CCKTX 0x0a84 ++#define BIT_CMB_CCA_2R BIT(28) ++ + #define REG_CNTRST 0x0b58 + + #define REG_3WIRE_SWA 0x0c00 + #define REG_RX_IQC_AB_A 0x0c10 ++#define REG_RX_IQC_CD_A 0x0c14 + #define REG_TXSCALE_A 0x0c1c + #define BB_SWING_MASK GENMASK(31, 21) + #define REG_TX_AGC_A_CCK_11_CCK_1 0xc20 +@@ -674,7 +707,7 @@ + #define REG_LSSI_WRITE_A 0x0c90 + #define REG_PREDISTA 0x0c90 + #define REG_TXAGCIDX 0x0c94 +- ++#define REG_TX_AGC_A 0x0c94 + #define REG_RFE_PINMUX_A 0x0cb0 + #define REG_RFE_INV_A 0x0cb4 + #define REG_RFE_CTRL8 0x0cb4 +@@ -683,6 +716,7 @@ + #define DPDT_CTRL_PIN 0x77 + #define RFE_INV_MASK 0x3ff00000 + #define REG_RFECTL_A 0x0cb8 ++#define REG_RFE_INV0 0x0cbc + #define REG_RFE_INV8 0x0cbd + #define BIT_MASK_RFE_INV89 GENMASK(1, 0) + #define REG_RFE_INV16 0x0cbe +@@ -703,6 +737,7 @@ + + #define REG_3WIRE_SWB 0x0e00 + #define REG_RX_IQC_AB_B 0x0e10 ++#define REG_RX_IQC_CD_B 0x0e14 + #define REG_TXSCALE_B 0x0e1c + #define REG_TX_AGC_B_CCK_11_CCK_1 0xe20 + #define REG_TX_AGC_B_OFDM18_OFDM6 0xe24 +@@ -729,6 +764,7 @@ + #define REG_LSSI_WRITE_B 0x0e90 + #define REG_PREDISTB 0x0e90 + #define REG_INIDLYB 0x0e94 ++#define REG_TX_AGC_B 0x0e94 + #define REG_RFE_PINMUX_B 0x0eb0 + #define REG_RFE_INV_B 0x0eb4 + #define REG_RFECTL_B 0x0eb8 +@@ -744,8 +780,11 @@ + #define REG_CRC_HT 0x0f10 + #define REG_CRC_OFDM 0x0f14 + #define REG_FA_OFDM 0x0f48 ++#define REG_DBGRPT 0x0fa0 + #define REG_CCA_CCK 0x0fcc + ++#define REG_SYS_CFG3_8814A 0x1000 ++ + #define REG_ANAPARSW_MAC_0 0x1010 + #define BIT_CF_L_V2 GENMASK(29, 28) + +@@ -863,9 +902,27 @@ + #define LTECOEX_WRITE_DATA REG_WL2LTECOEX_INDIRECT_ACCESS_WRITE_DATA_V1 + #define LTECOEX_READ_DATA REG_WL2LTECOEX_INDIRECT_ACCESS_READ_DATA_V1 + ++#define REG_RX_IQC_AB_C 0x1810 ++#define REG_RX_IQC_CD_C 0x1814 ++#define REG_TXSCALE_C 0x181c ++#define REG_CK_MONHC 0x185c ++#define REG_AFE_PWR1_C 0x1860 + #define REG_IGN_GNT_BT1 0x1860 ++#define REG_TX_AGC_C 0x1894 ++#define REG_RFE_PINMUX_C 0x18b4 + + #define REG_RFESEL_CTRL 0x1990 ++#define REG_AGC_TBL 0x1998 ++ ++#define REG_RX_IQC_AB_D 0x1a10 ++#define REG_RX_IQC_CD_D 0x1a14 ++#define REG_TXSCALE_D 0x1a1c ++#define REG_CK_MONHD 0x1a5c ++#define REG_AFE_PWR1_D 0x1a60 ++#define REG_TX_AGC_D 0x1a94 ++#define REG_RFE_PINMUX_D 0x1ab4 ++#define REG_RFE_INVSEL_D 0x1abc ++#define BIT_RFE_SELSW0_D GENMASK(27, 20) + + #define REG_NOMASK_TXBT 0x1ca7 + #define REG_ANAPAR 0x1c30 +@@ -906,6 +963,7 @@ + #define RF18_BAND_MASK (BIT(16) | BIT(9) | BIT(8)) + #define RF18_CHANNEL_MASK (MASKBYTE0) + #define RF18_RFSI_MASK (BIT(18) | BIT(17)) ++#define RF_RCK1_V1 0x1c + #define RF_RCK 0x1d + #define RF_MODE_TABLE_ADDR 0x30 + #define RF_MODE_TABLE_DATA0 0x31 diff --git a/package/kernel/mac80211/patches/rtl/086-v6.15-wifi-rtw88-Add-rtw8814a_table.c-part-1-2.patch b/package/kernel/mac80211/patches/rtl/086-v6.15-wifi-rtw88-Add-rtw8814a_table.c-part-1-2.patch new file mode 100644 index 00000000000..6f42855c21a --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/086-v6.15-wifi-rtw88-Add-rtw8814a_table.c-part-1-2.patch @@ -0,0 +1,12573 @@ +From f4debfcb1b3c14a28ec157a41e0b98be72e554a0 Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Fri, 7 Mar 2025 02:23:22 +0200 +Subject: [PATCH] wifi: rtw88: Add rtw8814a_table.c (part 1/2) + +This contains various tables for initialising the RTL8814A, plus TX +power limits. + +Split into two patches because they are big. + +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/df0b8ceb-2c2f-4bda-906f-a05c7b4d424c@gmail.com +--- + .../wireless/realtek/rtw88/rtw8814a_table.c | 12551 ++++++++++++++++ + 1 file changed, 12551 insertions(+) + create mode 100644 drivers/net/wireless/realtek/rtw88/rtw8814a_table.c + +--- /dev/null ++++ b/drivers/net/wireless/realtek/rtw88/rtw8814a_table.c +@@ -0,0 +1,12551 @@ ++// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause ++/* Copyright(c) 2025 Realtek Corporation ++ */ ++ ++#include "main.h" ++#include "phy.h" ++#include "rtw8814a_table.h" ++ ++static const u32 rtw8814a_mac[] = { ++ 0x010, 0x0000007C, ++ 0x014, 0x000000DB, ++ 0x016, 0x00000002, ++ 0x073, 0x00000010, ++ 0x420, 0x00000080, ++ 0x421, 0x0000000F, ++ 0x428, 0x0000000A, ++ 0x429, 0x00000010, ++ 0x430, 0x00000000, ++ 0x431, 0x00000000, ++ 0x432, 0x00000000, ++ 0x433, 0x00000001, ++ 0x434, 0x00000004, ++ 0x435, 0x00000005, ++ 0x436, 0x00000007, ++ 0x437, 0x00000008, ++ 0x43C, 0x00000004, ++ 0x43D, 0x00000005, ++ 0x43E, 0x00000007, ++ 0x43F, 0x00000008, ++ 0x440, 0x0000005D, ++ 0x441, 0x00000001, ++ 0x442, 0x00000000, ++ 0x444, 0x00000010, ++ 0x445, 0x000000F0, ++ 0x446, 0x00000001, ++ 0x447, 0x000000FE, ++ 0x448, 0x00000000, ++ 0x449, 0x00000000, ++ 0x44A, 0x00000000, ++ 0x44B, 0x00000040, ++ 0x44C, 0x00000010, ++ 0x44D, 0x000000F0, ++ 0x44E, 0x0000003F, ++ 0x44F, 0x00000000, ++ 0x450, 0x00000000, ++ 0x451, 0x00000000, ++ 0x452, 0x00000000, ++ 0x453, 0x00000040, ++ 0x45E, 0x00000004, ++ 0x49C, 0x00000010, ++ 0x49D, 0x000000F0, ++ 0x49E, 0x00000000, ++ 0x49F, 0x00000006, ++ 0x4A0, 0x000000E0, ++ 0x4A1, 0x00000003, ++ 0x4A2, 0x00000000, ++ 0x4A3, 0x00000040, ++ 0x4A4, 0x00000015, ++ 0x4A5, 0x000000F0, ++ 0x4A6, 0x00000000, ++ 0x4A7, 0x00000006, ++ 0x4A8, 0x000000E0, ++ 0x4A9, 0x00000000, ++ 0x4AA, 0x00000000, ++ 0x4AB, 0x00000000, ++ 0x7DA, 0x00000008, ++ 0x1448, 0x00000006, ++ 0x144A, 0x00000006, ++ 0x144C, 0x00000006, ++ 0x144E, 0x00000006, ++ 0x4C8, 0x000000FF, ++ 0x4C9, 0x00000008, ++ 0x4CA, 0x0000003C, ++ 0x4CB, 0x0000003C, ++ 0x4CC, 0x000000FF, ++ 0x4CD, 0x000000FF, ++ 0x4CE, 0x00000001, ++ 0x4CF, 0x00000008, ++ 0x500, 0x00000026, ++ 0x501, 0x000000A2, ++ 0x502, 0x0000002F, ++ 0x503, 0x00000000, ++ 0x504, 0x00000028, ++ 0x505, 0x000000A3, ++ 0x506, 0x0000005E, ++ 0x507, 0x00000000, ++ 0x508, 0x0000002B, ++ 0x509, 0x000000A4, ++ 0x50A, 0x0000005E, ++ 0x50B, 0x00000000, ++ 0x50C, 0x0000004F, ++ 0x50D, 0x000000A4, ++ 0x50E, 0x00000000, ++ 0x50F, 0x00000000, ++ 0x512, 0x0000001C, ++ 0x514, 0x0000000A, ++ 0x516, 0x0000000A, ++ 0x521, 0x0000002F, ++ 0x525, 0x00000047, ++ 0x550, 0x00000010, ++ 0x551, 0x00000010, ++ 0x559, 0x00000002, ++ 0x55C, 0x00000064, ++ 0x55D, 0x000000FF, ++ 0x577, 0x00000003, ++ 0x5BE, 0x00000064, ++ 0x604, 0x00000001, ++ 0x605, 0x00000030, ++ 0x607, 0x00000001, ++ 0x608, 0x0000000E, ++ 0x609, 0x0000002A, ++ 0x60A, 0x00000000, ++ 0x60C, 0x00000018, ++ 0x60D, 0x00000050, ++ 0x6A0, 0x000000FF, ++ 0x6A1, 0x000000FF, ++ 0x6A2, 0x000000FF, ++ 0x6A3, 0x000000FF, ++ 0x6A4, 0x000000FF, ++ 0x6A5, 0x000000FF, ++ 0x6DE, 0x00000084, ++ 0x620, 0x000000FF, ++ 0x621, 0x000000FF, ++ 0x622, 0x000000FF, ++ 0x623, 0x000000FF, ++ 0x624, 0x000000FF, ++ 0x625, 0x000000FF, ++ 0x626, 0x000000FF, ++ 0x627, 0x000000FF, ++ 0x638, 0x00000064, ++ 0x63C, 0x0000000A, ++ 0x63D, 0x0000000A, ++ 0x63E, 0x0000000E, ++ 0x63F, 0x0000000E, ++ 0x640, 0x00000040, ++ 0x642, 0x00000040, ++ 0x643, 0x00000000, ++ 0x652, 0x000000C8, ++ 0x66E, 0x00000005, ++ 0x700, 0x00000021, ++ 0x701, 0x00000043, ++ 0x702, 0x00000065, ++ 0x703, 0x00000087, ++ 0x708, 0x00000021, ++ 0x709, 0x00000043, ++ 0x70A, 0x00000065, ++ 0x70B, 0x00000087, ++ 0x718, 0x00000040, ++ 0x7D5, 0x000000BC, ++ 0x7D8, 0x00000028, ++ 0x7D9, 0x00000000, ++ 0x7DA, 0x0000000B, ++}; ++ ++RTW_DECL_TABLE_PHY_COND(rtw8814a_mac, rtw_phy_cfg_mac); ++ ++static const u32 rtw8814a_agc[] = { ++ 0x80000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xFE000003, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xFE000003, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xFE000003, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xFE000003, ++ 0x90000007, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xFF000003, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xFE000003, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xFF000003, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xFE000003, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xFE000003, ++ 0xA0000000, 0x00000000, ++ 0x81C, 0xFF000003, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xFE000003, ++ 0x81C, 0xFD020003, ++ 0x81C, 0xFC040003, ++ 0x81C, 0xFB060003, ++ 0x81C, 0xFA080003, ++ 0x81C, 0xF90A0003, ++ 0x81C, 0xF80C0003, ++ 0x81C, 0xF70E0003, ++ 0x81C, 0xF6100003, ++ 0x81C, 0xF5120003, ++ 0x81C, 0xF4140003, ++ 0x81C, 0xF3160003, ++ 0x81C, 0xF2180003, ++ 0x81C, 0xF11A0003, ++ 0x81C, 0xF01C0003, ++ 0x81C, 0xEF1E0003, ++ 0x81C, 0xEE200003, ++ 0x81C, 0xED220003, ++ 0x81C, 0xCF240003, ++ 0x81C, 0xCE260003, ++ 0x81C, 0xCD280003, ++ 0x81C, 0xCC2A0003, ++ 0x81C, 0xCB2C0003, ++ 0x81C, 0xCA2E0003, ++ 0x81C, 0xC9300003, ++ 0x81C, 0xC8320003, ++ 0x81C, 0xC7340003, ++ 0x81C, 0xC6360003, ++ 0x81C, 0xC5380003, ++ 0x81C, 0xC43A0003, ++ 0x81C, 0xA63C0003, ++ 0x81C, 0xA53E0003, ++ 0x81C, 0xA4400003, ++ 0x81C, 0xA3420003, ++ 0x81C, 0xA2440003, ++ 0x81C, 0xA1460003, ++ 0x81C, 0x86480003, ++ 0x81C, 0x854A0003, ++ 0x81C, 0x844C0003, ++ 0x81C, 0x834E0003, ++ 0x81C, 0x66500003, ++ 0x81C, 0x65520003, ++ 0x81C, 0x64540003, ++ 0x81C, 0x63560003, ++ 0x81C, 0x62580003, ++ 0x81C, 0x615A0003, ++ 0x81C, 0x435C0003, ++ 0x81C, 0x425E0003, ++ 0x81C, 0x41600003, ++ 0x81C, 0x27620003, ++ 0x81C, 0x26640003, ++ 0x81C, 0x25660003, ++ 0x81C, 0x24680003, ++ 0x81C, 0x236A0003, ++ 0x81C, 0x226C0003, ++ 0x81C, 0x216E0003, ++ 0x81C, 0x21700003, ++ 0x81C, 0x21720003, ++ 0x81C, 0x21740003, ++ 0x81C, 0x21760003, ++ 0x81C, 0x21780003, ++ 0x81C, 0x217A0003, ++ 0x81C, 0x217C0003, ++ 0x81C, 0x217E0003, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xFF000003, ++ 0x81C, 0xFE020003, ++ 0x81C, 0xFD040003, ++ 0x81C, 0xFC060003, ++ 0x81C, 0xFB080003, ++ 0x81C, 0xFA0A0003, ++ 0x81C, 0xF90C0003, ++ 0x81C, 0xF80E0003, ++ 0x81C, 0xF7100003, ++ 0x81C, 0xF6120003, ++ 0x81C, 0xF5140003, ++ 0x81C, 0xF4160003, ++ 0x81C, 0xF3180003, ++ 0x81C, 0xF21A0003, ++ 0x81C, 0xF11C0003, ++ 0x81C, 0xF01E0003, ++ 0x81C, 0xEF200003, ++ 0x81C, 0xEE220003, ++ 0x81C, 0xED240003, ++ 0x81C, 0xEC260003, ++ 0x81C, 0xEB280003, ++ 0x81C, 0xEA2A0003, ++ 0x81C, 0xE92C0003, ++ 0x81C, 0xE82E0003, ++ 0x81C, 0xE7300003, ++ 0x81C, 0xE6320003, ++ 0x81C, 0xE5340003, ++ 0x81C, 0xE4360003, ++ 0x81C, 0xE3380003, ++ 0x81C, 0xC53A0003, ++ 0x81C, 0xC43C0003, ++ 0x81C, 0xC33E0003, ++ 0x81C, 0xC2400003, ++ 0x81C, 0xC1420003, ++ 0x81C, 0xA8440003, ++ 0x81C, 0xA7460003, ++ 0x81C, 0xA6480003, ++ 0x81C, 0xA54A0003, ++ 0x81C, 0xA44C0003, ++ 0x81C, 0xA34E0003, ++ 0x81C, 0xA2500003, ++ 0x81C, 0x65520003, ++ 0x81C, 0x64540003, ++ 0x81C, 0x63560003, ++ 0x81C, 0x62580003, ++ 0x81C, 0x615A0003, ++ 0x81C, 0x475C0003, ++ 0x81C, 0x465E0003, ++ 0x81C, 0x45600003, ++ 0x81C, 0x44620003, ++ 0x81C, 0x43640003, ++ 0x81C, 0x42660003, ++ 0x81C, 0x41680003, ++ 0x81C, 0x416A0003, ++ 0x81C, 0x416C0003, ++ 0x81C, 0x416E0003, ++ 0x81C, 0x41700003, ++ 0x81C, 0x41720003, ++ 0x81C, 0x41740003, ++ 0x81C, 0x41760003, ++ 0x81C, 0x41780003, ++ 0x81C, 0x417A0003, ++ 0x81C, 0x417C0003, ++ 0x81C, 0x417E0003, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xFE000003, ++ 0x81C, 0xFD020003, ++ 0x81C, 0xFC040003, ++ 0x81C, 0xFB060003, ++ 0x81C, 0xFA080003, ++ 0x81C, 0xF90A0003, ++ 0x81C, 0xF80C0003, ++ 0x81C, 0xF70E0003, ++ 0x81C, 0xF6100003, ++ 0x81C, 0xF5120003, ++ 0x81C, 0xF4140003, ++ 0x81C, 0xF3160003, ++ 0x81C, 0xF2180003, ++ 0x81C, 0xF11A0003, ++ 0x81C, 0xF01C0003, ++ 0x81C, 0xEF1E0003, ++ 0x81C, 0xEE200003, ++ 0x81C, 0xED220003, ++ 0x81C, 0xEC240003, ++ 0x81C, 0xEB260003, ++ 0x81C, 0xEA280003, ++ 0x81C, 0xE92A0003, ++ 0x81C, 0xE82C0003, ++ 0x81C, 0xE72E0003, ++ 0x81C, 0xE6300003, ++ 0x81C, 0xE5320003, ++ 0x81C, 0xE4340003, ++ 0x81C, 0xE3360003, ++ 0x81C, 0xC6380003, ++ 0x81C, 0xC53A0003, ++ 0x81C, 0xC43C0003, ++ 0x81C, 0xC33E0003, ++ 0x81C, 0xC2400003, ++ 0x81C, 0xA9420003, ++ 0x81C, 0xA8440003, ++ 0x81C, 0xA7460003, ++ 0x81C, 0xA6480003, ++ 0x81C, 0xA54A0003, ++ 0x81C, 0xA44C0003, ++ 0x81C, 0xA34E0003, ++ 0x81C, 0x66500003, ++ 0x81C, 0x65520003, ++ 0x81C, 0x64540003, ++ 0x81C, 0x63560003, ++ 0x81C, 0x49580003, ++ 0x81C, 0x485A0003, ++ 0x81C, 0x475C0003, ++ 0x81C, 0x465E0003, ++ 0x81C, 0x45600003, ++ 0x81C, 0x44620003, ++ 0x81C, 0x43640003, ++ 0x81C, 0x42660003, ++ 0x81C, 0x41680003, ++ 0x81C, 0x416A0003, ++ 0x81C, 0x416C0003, ++ 0x81C, 0x416E0003, ++ 0x81C, 0x41700003, ++ 0x81C, 0x41720003, ++ 0x81C, 0x41740003, ++ 0x81C, 0x41760003, ++ 0x81C, 0x41780003, ++ 0x81C, 0x417A0003, ++ 0x81C, 0x417C0003, ++ 0x81C, 0x417E0003, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xFF000003, ++ 0x81C, 0xFE020003, ++ 0x81C, 0xFD040003, ++ 0x81C, 0xFC060003, ++ 0x81C, 0xFB080003, ++ 0x81C, 0xFA0A0003, ++ 0x81C, 0xF90C0003, ++ 0x81C, 0xF80E0003, ++ 0x81C, 0xF7100003, ++ 0x81C, 0xF6120003, ++ 0x81C, 0xF5140003, ++ 0x81C, 0xF4160003, ++ 0x81C, 0xF3180003, ++ 0x81C, 0xF21A0003, ++ 0x81C, 0xF11C0003, ++ 0x81C, 0xF01E0003, ++ 0x81C, 0xEF200003, ++ 0x81C, 0xEE220003, ++ 0x81C, 0xED240003, ++ 0x81C, 0xEC260003, ++ 0x81C, 0xEB280003, ++ 0x81C, 0xEA2A0003, ++ 0x81C, 0xE92C0003, ++ 0x81C, 0xE82E0003, ++ 0x81C, 0xE7300003, ++ 0x81C, 0xE6320003, ++ 0x81C, 0xE5340003, ++ 0x81C, 0xE4360003, ++ 0x81C, 0xE3380003, ++ 0x81C, 0xC53A0003, ++ 0x81C, 0xC43C0003, ++ 0x81C, 0xC33E0003, ++ 0x81C, 0xC2400003, ++ 0x81C, 0xC1420003, ++ 0x81C, 0xA8440003, ++ 0x81C, 0xA7460003, ++ 0x81C, 0xA6480003, ++ 0x81C, 0xA54A0003, ++ 0x81C, 0xA44C0003, ++ 0x81C, 0xA34E0003, ++ 0x81C, 0xA2500003, ++ 0x81C, 0x65520003, ++ 0x81C, 0x64540003, ++ 0x81C, 0x63560003, ++ 0x81C, 0x62580003, ++ 0x81C, 0x615A0003, ++ 0x81C, 0x475C0003, ++ 0x81C, 0x465E0003, ++ 0x81C, 0x45600003, ++ 0x81C, 0x44620003, ++ 0x81C, 0x43640003, ++ 0x81C, 0x42660003, ++ 0x81C, 0x41680003, ++ 0x81C, 0x416A0003, ++ 0x81C, 0x416C0003, ++ 0x81C, 0x416E0003, ++ 0x81C, 0x41700003, ++ 0x81C, 0x41720003, ++ 0x81C, 0x41740003, ++ 0x81C, 0x41760003, ++ 0x81C, 0x41780003, ++ 0x81C, 0x417A0003, ++ 0x81C, 0x417C0003, ++ 0x81C, 0x417E0003, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xFE000003, ++ 0x81C, 0xFD020003, ++ 0x81C, 0xFC040003, ++ 0x81C, 0xFB060003, ++ 0x81C, 0xFA080003, ++ 0x81C, 0xF90A0003, ++ 0x81C, 0xF80C0003, ++ 0x81C, 0xF70E0003, ++ 0x81C, 0xF6100003, ++ 0x81C, 0xF5120003, ++ 0x81C, 0xF4140003, ++ 0x81C, 0xF3160003, ++ 0x81C, 0xF2180003, ++ 0x81C, 0xF11A0003, ++ 0x81C, 0xF01C0003, ++ 0x81C, 0xEF1E0003, ++ 0x81C, 0xEE200003, ++ 0x81C, 0xED220003, ++ 0x81C, 0xEC240003, ++ 0x81C, 0xEB260003, ++ 0x81C, 0xEA280003, ++ 0x81C, 0xE92A0003, ++ 0x81C, 0xE82C0003, ++ 0x81C, 0xE72E0003, ++ 0x81C, 0xE6300003, ++ 0x81C, 0xE5320003, ++ 0x81C, 0xE4340003, ++ 0x81C, 0xE3360003, ++ 0x81C, 0xC6380003, ++ 0x81C, 0xC53A0003, ++ 0x81C, 0xC43C0003, ++ 0x81C, 0xC33E0003, ++ 0x81C, 0xC2400003, ++ 0x81C, 0xA9420003, ++ 0x81C, 0xA8440003, ++ 0x81C, 0xA7460003, ++ 0x81C, 0xA6480003, ++ 0x81C, 0xA54A0003, ++ 0x81C, 0xA44C0003, ++ 0x81C, 0xA34E0003, ++ 0x81C, 0x66500003, ++ 0x81C, 0x65520003, ++ 0x81C, 0x64540003, ++ 0x81C, 0x63560003, ++ 0x81C, 0x49580003, ++ 0x81C, 0x485A0003, ++ 0x81C, 0x475C0003, ++ 0x81C, 0x465E0003, ++ 0x81C, 0x45600003, ++ 0x81C, 0x44620003, ++ 0x81C, 0x43640003, ++ 0x81C, 0x42660003, ++ 0x81C, 0x41680003, ++ 0x81C, 0x416A0003, ++ 0x81C, 0x416C0003, ++ 0x81C, 0x416E0003, ++ 0x81C, 0x41700003, ++ 0x81C, 0x41720003, ++ 0x81C, 0x41740003, ++ 0x81C, 0x41760003, ++ 0x81C, 0x41780003, ++ 0x81C, 0x417A0003, ++ 0x81C, 0x417C0003, ++ 0x81C, 0x417E0003, ++ 0x90000007, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xDF000003, ++ 0x81C, 0xDF020003, ++ 0x81C, 0xDF040003, ++ 0x81C, 0xDE060003, ++ 0x81C, 0xDD080003, ++ 0x81C, 0xDC0A0003, ++ 0x81C, 0xDB0C0003, ++ 0x81C, 0xDA0E0003, ++ 0x81C, 0xD9100003, ++ 0x81C, 0xD8120003, ++ 0x81C, 0xD7140003, ++ 0x81C, 0xD6160003, ++ 0x81C, 0xD5180003, ++ 0x81C, 0xD41A0003, ++ 0x81C, 0xD31C0003, ++ 0x81C, 0xD21E0003, ++ 0x81C, 0xD1200003, ++ 0x81C, 0xD0220003, ++ 0x81C, 0xCF240003, ++ 0x81C, 0xCE260003, ++ 0x81C, 0xCD280003, ++ 0x81C, 0xCC2A0003, ++ 0x81C, 0xCB2C0003, ++ 0x81C, 0xCA2E0003, ++ 0x81C, 0xC9300003, ++ 0x81C, 0xC8320003, ++ 0x81C, 0xC7340003, ++ 0x81C, 0xC6360003, ++ 0x81C, 0xC5380003, ++ 0x81C, 0xA73A0003, ++ 0x81C, 0xA63C0003, ++ 0x81C, 0xA53E0003, ++ 0x81C, 0xA4400003, ++ 0x81C, 0xA3420003, ++ 0x81C, 0xA2440003, ++ 0x81C, 0x87460003, ++ 0x81C, 0x86480003, ++ 0x81C, 0x854A0003, ++ 0x81C, 0x844C0003, ++ 0x81C, 0x834E0003, ++ 0x81C, 0x82500003, ++ 0x81C, 0x81520003, ++ 0x81C, 0x64540003, ++ 0x81C, 0x63560003, ++ 0x81C, 0x62580003, ++ 0x81C, 0x615A0003, ++ 0x81C, 0x445C0003, ++ 0x81C, 0x435E0003, ++ 0x81C, 0x42600003, ++ 0x81C, 0x41620003, ++ 0x81C, 0x27640003, ++ 0x81C, 0x26660003, ++ 0x81C, 0x25680003, ++ 0x81C, 0x246A0003, ++ 0x81C, 0x236C0003, ++ 0x81C, 0x226E0003, ++ 0x81C, 0x21700003, ++ 0x81C, 0x21720003, ++ 0x81C, 0x21740003, ++ 0x81C, 0x21760003, ++ 0x81C, 0x21780003, ++ 0x81C, 0x217A0003, ++ 0x81C, 0x217C0003, ++ 0x81C, 0x217E0003, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xFF000003, ++ 0x81C, 0xFE020003, ++ 0x81C, 0xFD040003, ++ 0x81C, 0xFC060003, ++ 0x81C, 0xFB080003, ++ 0x81C, 0xFA0A0003, ++ 0x81C, 0xF90C0003, ++ 0x81C, 0xF80E0003, ++ 0x81C, 0xF7100003, ++ 0x81C, 0xF6120003, ++ 0x81C, 0xF5140003, ++ 0x81C, 0xF4160003, ++ 0x81C, 0xF3180003, ++ 0x81C, 0xF21A0003, ++ 0x81C, 0xF11C0003, ++ 0x81C, 0xF01E0003, ++ 0x81C, 0xEF200003, ++ 0x81C, 0xEE220003, ++ 0x81C, 0xED240003, ++ 0x81C, 0xEC260003, ++ 0x81C, 0xEB280003, ++ 0x81C, 0xEA2A0003, ++ 0x81C, 0xE92C0003, ++ 0x81C, 0xE82E0003, ++ 0x81C, 0xE7300003, ++ 0x81C, 0xE6320003, ++ 0x81C, 0xE5340003, ++ 0x81C, 0xE4360003, ++ 0x81C, 0xE3380003, ++ 0x81C, 0xC53A0003, ++ 0x81C, 0xC43C0003, ++ 0x81C, 0xC33E0003, ++ 0x81C, 0xC2400003, ++ 0x81C, 0xC1420003, ++ 0x81C, 0xA8440003, ++ 0x81C, 0xA7460003, ++ 0x81C, 0xA6480003, ++ 0x81C, 0xA54A0003, ++ 0x81C, 0xA44C0003, ++ 0x81C, 0xA34E0003, ++ 0x81C, 0xA2500003, ++ 0x81C, 0x65520003, ++ 0x81C, 0x64540003, ++ 0x81C, 0x63560003, ++ 0x81C, 0x62580003, ++ 0x81C, 0x615A0003, ++ 0x81C, 0x475C0003, ++ 0x81C, 0x465E0003, ++ 0x81C, 0x45600003, ++ 0x81C, 0x44620003, ++ 0x81C, 0x43640003, ++ 0x81C, 0x42660003, ++ 0x81C, 0x41680003, ++ 0x81C, 0x416A0003, ++ 0x81C, 0x416C0003, ++ 0x81C, 0x416E0003, ++ 0x81C, 0x41700003, ++ 0x81C, 0x41720003, ++ 0x81C, 0x41740003, ++ 0x81C, 0x41760003, ++ 0x81C, 0x41780003, ++ 0x81C, 0x417A0003, ++ 0x81C, 0x417C0003, ++ 0x81C, 0x417E0003, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xDF000003, ++ 0x81C, 0xDF020003, ++ 0x81C, 0xDF040003, ++ 0x81C, 0xDE060003, ++ 0x81C, 0xDD080003, ++ 0x81C, 0xDC0A0003, ++ 0x81C, 0xDB0C0003, ++ 0x81C, 0xDA0E0003, ++ 0x81C, 0xD9100003, ++ 0x81C, 0xD8120003, ++ 0x81C, 0xD7140003, ++ 0x81C, 0xD6160003, ++ 0x81C, 0xD5180003, ++ 0x81C, 0xD41A0003, ++ 0x81C, 0xD31C0003, ++ 0x81C, 0xD21E0003, ++ 0x81C, 0xD1200003, ++ 0x81C, 0xD0220003, ++ 0x81C, 0xCF240003, ++ 0x81C, 0xCE260003, ++ 0x81C, 0xCD280003, ++ 0x81C, 0xCC2A0003, ++ 0x81C, 0xCB2C0003, ++ 0x81C, 0xCA2E0003, ++ 0x81C, 0xC9300003, ++ 0x81C, 0xC8320003, ++ 0x81C, 0xC7340003, ++ 0x81C, 0xC6360003, ++ 0x81C, 0xC5380003, ++ 0x81C, 0xA73A0003, ++ 0x81C, 0xA63C0003, ++ 0x81C, 0xA53E0003, ++ 0x81C, 0xA4400003, ++ 0x81C, 0xA3420003, ++ 0x81C, 0xA2440003, ++ 0x81C, 0x87460003, ++ 0x81C, 0x86480003, ++ 0x81C, 0x854A0003, ++ 0x81C, 0x844C0003, ++ 0x81C, 0x834E0003, ++ 0x81C, 0x82500003, ++ 0x81C, 0x81520003, ++ 0x81C, 0x64540003, ++ 0x81C, 0x63560003, ++ 0x81C, 0x62580003, ++ 0x81C, 0x615A0003, ++ 0x81C, 0x445C0003, ++ 0x81C, 0x435E0003, ++ 0x81C, 0x42600003, ++ 0x81C, 0x41620003, ++ 0x81C, 0x27640003, ++ 0x81C, 0x26660003, ++ 0x81C, 0x25680003, ++ 0x81C, 0x246A0003, ++ 0x81C, 0x236C0003, ++ 0x81C, 0x226E0003, ++ 0x81C, 0x21700003, ++ 0x81C, 0x21720003, ++ 0x81C, 0x21740003, ++ 0x81C, 0x21760003, ++ 0x81C, 0x21780003, ++ 0x81C, 0x217A0003, ++ 0x81C, 0x217C0003, ++ 0x81C, 0x217E0003, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xFE000003, ++ 0x81C, 0xFE020003, ++ 0x81C, 0xFD040003, ++ 0x81C, 0xFC060003, ++ 0x81C, 0xFB080003, ++ 0x81C, 0xFA0A0003, ++ 0x81C, 0xF90C0003, ++ 0x81C, 0xF80E0003, ++ 0x81C, 0xF7100003, ++ 0x81C, 0xF6120003, ++ 0x81C, 0xF5140003, ++ 0x81C, 0xF4160003, ++ 0x81C, 0xF3180003, ++ 0x81C, 0xF21A0003, ++ 0x81C, 0xF11C0003, ++ 0x81C, 0xF01E0003, ++ 0x81C, 0xEF200003, ++ 0x81C, 0xEE220003, ++ 0x81C, 0xED240003, ++ 0x81C, 0x0F260003, ++ 0x81C, 0x0E280003, ++ 0x81C, 0x0D2A0003, ++ 0x81C, 0x0C2C0003, ++ 0x81C, 0x0B2E0003, ++ 0x81C, 0x0A300003, ++ 0x81C, 0x09320003, ++ 0x81C, 0x08340003, ++ 0x81C, 0x07360003, ++ 0x81C, 0x06380003, ++ 0x81C, 0x053A0003, ++ 0x81C, 0x043C0003, ++ 0x81C, 0x033E0003, ++ 0x81C, 0x23400003, ++ 0x81C, 0x22420003, ++ 0x81C, 0xA8440003, ++ 0x81C, 0xA7460003, ++ 0x81C, 0xA6480003, ++ 0x81C, 0xA54A0003, ++ 0x81C, 0xA44C0003, ++ 0x81C, 0x684E0003, ++ 0x81C, 0x67500003, ++ 0x81C, 0x66520003, ++ 0x81C, 0x65540003, ++ 0x81C, 0x64560003, ++ 0x81C, 0x63580003, ++ 0x81C, 0x625A0003, ++ 0x81C, 0x615C0003, ++ 0x81C, 0x475E0003, ++ 0x81C, 0x46600003, ++ 0x81C, 0x45620003, ++ 0x81C, 0x44640003, ++ 0x81C, 0x43660003, ++ 0x81C, 0x42680003, ++ 0x81C, 0x416A0003, ++ 0x81C, 0x416C0003, ++ 0x81C, 0x416E0003, ++ 0x81C, 0x41700003, ++ 0x81C, 0x41720003, ++ 0x81C, 0x41740003, ++ 0x81C, 0x41760003, ++ 0x81C, 0x41780003, ++ 0x81C, 0x417A0003, ++ 0x81C, 0x417C0003, ++ 0x81C, 0x417E0003, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xFE000003, ++ 0x81C, 0xFE020003, ++ 0x81C, 0xFD040003, ++ 0x81C, 0xFC060003, ++ 0x81C, 0xFB080003, ++ 0x81C, 0xFA0A0003, ++ 0x81C, 0xF90C0003, ++ 0x81C, 0xF80E0003, ++ 0x81C, 0xF7100003, ++ 0x81C, 0xF6120003, ++ 0x81C, 0xF5140003, ++ 0x81C, 0xF4160003, ++ 0x81C, 0xF3180003, ++ 0x81C, 0xF21A0003, ++ 0x81C, 0xF11C0003, ++ 0x81C, 0xF01E0003, ++ 0x81C, 0xEF200003, ++ 0x81C, 0xEE220003, ++ 0x81C, 0xED240003, ++ 0x81C, 0xEC260003, ++ 0x81C, 0xEB280003, ++ 0x81C, 0xEA2A0003, ++ 0x81C, 0xE92C0003, ++ 0x81C, 0xE72E0003, ++ 0x81C, 0xE6300003, ++ 0x81C, 0xE5320003, ++ 0x81C, 0x08340003, ++ 0x81C, 0x07360003, ++ 0x81C, 0x06380003, ++ 0x81C, 0x053A0003, ++ 0x81C, 0x043C0003, ++ 0x81C, 0x033E0003, ++ 0x81C, 0x02400003, ++ 0x81C, 0xA9420003, ++ 0x81C, 0xA8440003, ++ 0x81C, 0xA7460003, ++ 0x81C, 0xA6480003, ++ 0x81C, 0xA54A0003, ++ 0x81C, 0x684C0003, ++ 0x81C, 0x674E0003, ++ 0x81C, 0x66500003, ++ 0x81C, 0x65520003, ++ 0x81C, 0x64540003, ++ 0x81C, 0x63560003, ++ 0x81C, 0x62580003, ++ 0x81C, 0x615A0003, ++ 0x81C, 0x475C0003, ++ 0x81C, 0x465E0003, ++ 0x81C, 0x45600003, ++ 0x81C, 0x44620003, ++ 0x81C, 0x43640003, ++ 0x81C, 0x42660003, ++ 0x81C, 0x41680003, ++ 0x81C, 0x416A0003, ++ 0x81C, 0x416C0003, ++ 0x81C, 0x416E0003, ++ 0x81C, 0x41700003, ++ 0x81C, 0x41720003, ++ 0x81C, 0x41740003, ++ 0x81C, 0x41760003, ++ 0x81C, 0x41780003, ++ 0x81C, 0x417A0003, ++ 0x81C, 0x417C0003, ++ 0x81C, 0x417E0003, ++ 0xA0000000, 0x00000000, ++ 0x81C, 0xFE000003, ++ 0x81C, 0xFD020003, ++ 0x81C, 0xFC040003, ++ 0x81C, 0xFB060003, ++ 0x81C, 0xFA080003, ++ 0x81C, 0xF90A0003, ++ 0x81C, 0xF80C0003, ++ 0x81C, 0xF70E0003, ++ 0x81C, 0xF6100003, ++ 0x81C, 0xF5120003, ++ 0x81C, 0xF4140003, ++ 0x81C, 0xF3160003, ++ 0x81C, 0xF2180003, ++ 0x81C, 0xF11A0003, ++ 0x81C, 0xF01C0003, ++ 0x81C, 0xEF1E0003, ++ 0x81C, 0xEE200003, ++ 0x81C, 0xED220003, ++ 0x81C, 0xCF240003, ++ 0x81C, 0xCE260003, ++ 0x81C, 0xCD280003, ++ 0x81C, 0xCC2A0003, ++ 0x81C, 0xCB2C0003, ++ 0x81C, 0xCA2E0003, ++ 0x81C, 0xC9300003, ++ 0x81C, 0xC8320003, ++ 0x81C, 0xC7340003, ++ 0x81C, 0xC6360003, ++ 0x81C, 0xC5380003, ++ 0x81C, 0xC43A0003, ++ 0x81C, 0xA63C0003, ++ 0x81C, 0xA53E0003, ++ 0x81C, 0xA4400003, ++ 0x81C, 0xA3420003, ++ 0x81C, 0xA2440003, ++ 0x81C, 0xA1460003, ++ 0x81C, 0x86480003, ++ 0x81C, 0x854A0003, ++ 0x81C, 0x844C0003, ++ 0x81C, 0x834E0003, ++ 0x81C, 0x66500003, ++ 0x81C, 0x65520003, ++ 0x81C, 0x64540003, ++ 0x81C, 0x63560003, ++ 0x81C, 0x62580003, ++ 0x81C, 0x615A0003, ++ 0x81C, 0x435C0003, ++ 0x81C, 0x425E0003, ++ 0x81C, 0x41600003, ++ 0x81C, 0x27620003, ++ 0x81C, 0x26640003, ++ 0x81C, 0x25660003, ++ 0x81C, 0x24680003, ++ 0x81C, 0x236A0003, ++ 0x81C, 0x226C0003, ++ 0x81C, 0x216E0003, ++ 0x81C, 0x21700003, ++ 0x81C, 0x21720003, ++ 0x81C, 0x21740003, ++ 0x81C, 0x21760003, ++ 0x81C, 0x21780003, ++ 0x81C, 0x217A0003, ++ 0x81C, 0x217C0003, ++ 0x81C, 0x217E0003, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xF9000103, ++ 0x81C, 0xF8020103, ++ 0x81C, 0xF7040103, ++ 0x81C, 0xF6060103, ++ 0x81C, 0xF5080103, ++ 0x81C, 0xF40A0103, ++ 0x81C, 0xF30C0103, ++ 0x81C, 0xF20E0103, ++ 0x81C, 0xF1100103, ++ 0x81C, 0xF0120103, ++ 0x81C, 0xEF140103, ++ 0x81C, 0xEE160103, ++ 0x81C, 0xED180103, ++ 0x81C, 0xEC1A0103, ++ 0x81C, 0xEB1C0103, ++ 0x81C, 0xEA1E0103, ++ 0x81C, 0xE9200103, ++ 0x81C, 0xE8220103, ++ 0x81C, 0xE7240103, ++ 0x81C, 0xE6260103, ++ 0x81C, 0xE5280103, ++ 0x81C, 0xE42A0103, ++ 0x81C, 0xE32C0103, ++ 0x81C, 0xC32E0103, ++ 0x81C, 0xC2300103, ++ 0x81C, 0xC1320103, ++ 0x81C, 0xA5340103, ++ 0x81C, 0xA4360103, ++ 0x81C, 0xA3380103, ++ 0x81C, 0xA23A0103, ++ 0x81C, 0xA13C0103, ++ 0x81C, 0x843E0103, ++ 0x81C, 0x83400103, ++ 0x81C, 0x82420103, ++ 0x81C, 0x81440103, ++ 0x81C, 0x64460103, ++ 0x81C, 0x63480103, ++ 0x81C, 0x624A0103, ++ 0x81C, 0x614C0103, ++ 0x81C, 0x444E0103, ++ 0x81C, 0x43500103, ++ 0x81C, 0x42520103, ++ 0x81C, 0x41540103, ++ 0x81C, 0x25560103, ++ 0x81C, 0x24580103, ++ 0x81C, 0x235A0103, ++ 0x81C, 0x065C0103, ++ 0x81C, 0x055E0103, ++ 0x81C, 0x04600103, ++ 0x81C, 0x03620103, ++ 0x81C, 0x02640103, ++ 0x81C, 0x01660103, ++ 0x81C, 0x01680103, ++ 0x81C, 0x016A0103, ++ 0x81C, 0x016C0103, ++ 0x81C, 0x016E0103, ++ 0x81C, 0x01700103, ++ 0x81C, 0x01720103, ++ 0x81C, 0x01740103, ++ 0x81C, 0x01760103, ++ 0x81C, 0x01780103, ++ 0x81C, 0x017A0103, ++ 0x81C, 0x017C0103, ++ 0x81C, 0x017E0103, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xF8000103, ++ 0x81C, 0xF7020103, ++ 0x81C, 0xF6040103, ++ 0x81C, 0xF5060103, ++ 0x81C, 0xF4080103, ++ 0x81C, 0xF30A0103, ++ 0x81C, 0xF20C0103, ++ 0x81C, 0xF10E0103, ++ 0x81C, 0xF0100103, ++ 0x81C, 0xEF120103, ++ 0x81C, 0xEE140103, ++ 0x81C, 0xED160103, ++ 0x81C, 0xEC180103, ++ 0x81C, 0xEB1A0103, ++ 0x81C, 0xEA1C0103, ++ 0x81C, 0xE91E0103, ++ 0x81C, 0xE8200103, ++ 0x81C, 0xE7220103, ++ 0x81C, 0xE6240103, ++ 0x81C, 0xE5260103, ++ 0x81C, 0xE4280103, ++ 0x81C, 0xE32A0103, ++ 0x81C, 0xE22C0103, ++ 0x81C, 0xE12E0103, ++ 0x81C, 0xA5300103, ++ 0x81C, 0xA4320103, ++ 0x81C, 0xA3340103, ++ 0x81C, 0xA2360103, ++ 0x81C, 0xA1380103, ++ 0x81C, 0x843A0103, ++ 0x81C, 0x833C0103, ++ 0x81C, 0x823E0103, ++ 0x81C, 0x81400103, ++ 0x81C, 0x64420103, ++ 0x81C, 0x63440103, ++ 0x81C, 0x62460103, ++ 0x81C, 0x61480103, ++ 0x81C, 0x454A0103, ++ 0x81C, 0x444C0103, ++ 0x81C, 0x434E0103, ++ 0x81C, 0x42500103, ++ 0x81C, 0x25520103, ++ 0x81C, 0x24540103, ++ 0x81C, 0x23560103, ++ 0x81C, 0x06580103, ++ 0x81C, 0x055A0103, ++ 0x81C, 0x045C0103, ++ 0x81C, 0x035E0103, ++ 0x81C, 0x02600103, ++ 0x81C, 0x01620103, ++ 0x81C, 0x01640103, ++ 0x81C, 0x01660103, ++ 0x81C, 0x01680103, ++ 0x81C, 0x016A0103, ++ 0x81C, 0x016C0103, ++ 0x81C, 0x016E0103, ++ 0x81C, 0x01700103, ++ 0x81C, 0x01720103, ++ 0x81C, 0x01740103, ++ 0x81C, 0x01760103, ++ 0x81C, 0x01780103, ++ 0x81C, 0x017A0103, ++ 0x81C, 0x017C0103, ++ 0x81C, 0x017E0103, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xFC000103, ++ 0x81C, 0xFB020103, ++ 0x81C, 0xFA040103, ++ 0x81C, 0xF9060103, ++ 0x81C, 0xF8080103, ++ 0x81C, 0xF70A0103, ++ 0x81C, 0xF60C0103, ++ 0x81C, 0xF50E0103, ++ 0x81C, 0xF4100103, ++ 0x81C, 0xF3120103, ++ 0x81C, 0xF2140103, ++ 0x81C, 0xF1160103, ++ 0x81C, 0xF0180103, ++ 0x81C, 0xEF1A0103, ++ 0x81C, 0xEE1C0103, ++ 0x81C, 0xED1E0103, ++ 0x81C, 0xEC200103, ++ 0x81C, 0xEB220103, ++ 0x81C, 0xEA240103, ++ 0x81C, 0xE9260103, ++ 0x81C, 0xE8280103, ++ 0x81C, 0xE72A0103, ++ 0x81C, 0xE62C0103, ++ 0x81C, 0xE52E0103, ++ 0x81C, 0xE4300103, ++ 0x81C, 0xE3320103, ++ 0x81C, 0xE2340103, ++ 0x81C, 0xE1360103, ++ 0x81C, 0x87380103, ++ 0x81C, 0x863A0103, ++ 0x81C, 0x853C0103, ++ 0x81C, 0x843E0103, ++ 0x81C, 0x83400103, ++ 0x81C, 0x82420103, ++ 0x81C, 0x81440103, ++ 0x81C, 0x64460103, ++ 0x81C, 0x63480103, ++ 0x81C, 0x624A0103, ++ 0x81C, 0x464C0103, ++ 0x81C, 0x454E0103, ++ 0x81C, 0x44500103, ++ 0x81C, 0x43520103, ++ 0x81C, 0x26540103, ++ 0x81C, 0x25560103, ++ 0x81C, 0x24580103, ++ 0x81C, 0x075A0103, ++ 0x81C, 0x065C0103, ++ 0x81C, 0x055E0103, ++ 0x81C, 0x04600103, ++ 0x81C, 0x03620103, ++ 0x81C, 0x02640103, ++ 0x81C, 0x01660103, ++ 0x81C, 0x01680103, ++ 0x81C, 0x016A0103, ++ 0x81C, 0x016C0103, ++ 0x81C, 0x016E0103, ++ 0x81C, 0x01700103, ++ 0x81C, 0x01720103, ++ 0x81C, 0x01740103, ++ 0x81C, 0x01760103, ++ 0x81C, 0x01780103, ++ 0x81C, 0x017A0103, ++ 0x81C, 0x017C0103, ++ 0x81C, 0x017E0103, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xF9000103, ++ 0x81C, 0xF8020103, ++ 0x81C, 0xF7040103, ++ 0x81C, 0xF6060103, ++ 0x81C, 0xF5080103, ++ 0x81C, 0xF40A0103, ++ 0x81C, 0xF30C0103, ++ 0x81C, 0xF20E0103, ++ 0x81C, 0xF1100103, ++ 0x81C, 0xF0120103, ++ 0x81C, 0xEF140103, ++ 0x81C, 0xEE160103, ++ 0x81C, 0xED180103, ++ 0x81C, 0xEC1A0103, ++ 0x81C, 0xEB1C0103, ++ 0x81C, 0xEA1E0103, ++ 0x81C, 0xE9200103, ++ 0x81C, 0xE8220103, ++ 0x81C, 0xE7240103, ++ 0x81C, 0xE6260103, ++ 0x81C, 0xE5280103, ++ 0x81C, 0xE42A0103, ++ 0x81C, 0xE32C0103, ++ 0x81C, 0xE22E0103, ++ 0x81C, 0xA6300103, ++ 0x81C, 0xA5320103, ++ 0x81C, 0xA4340103, ++ 0x81C, 0xA3360103, ++ 0x81C, 0xA2380103, ++ 0x81C, 0xA13A0103, ++ 0x81C, 0x843C0103, ++ 0x81C, 0x833E0103, ++ 0x81C, 0x82400103, ++ 0x81C, 0x81420103, ++ 0x81C, 0x64440103, ++ 0x81C, 0x63460103, ++ 0x81C, 0x62480103, ++ 0x81C, 0x614A0103, ++ 0x81C, 0x444C0103, ++ 0x81C, 0x434E0103, ++ 0x81C, 0x42500103, ++ 0x81C, 0x41520103, ++ 0x81C, 0x25540103, ++ 0x81C, 0x24560103, ++ 0x81C, 0x23580103, ++ 0x81C, 0x225A0103, ++ 0x81C, 0x055C0103, ++ 0x81C, 0x045E0103, ++ 0x81C, 0x03600103, ++ 0x81C, 0x02620103, ++ 0x81C, 0x01640103, ++ 0x81C, 0x01660103, ++ 0x81C, 0x01680103, ++ 0x81C, 0x016A0103, ++ 0x81C, 0x016C0103, ++ 0x81C, 0x016E0103, ++ 0x81C, 0x01700103, ++ 0x81C, 0x01720103, ++ 0x81C, 0x01740103, ++ 0x81C, 0x01760103, ++ 0x81C, 0x01780103, ++ 0x81C, 0x017A0103, ++ 0x81C, 0x017C0103, ++ 0x81C, 0x017E0103, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xFD000103, ++ 0x81C, 0xFC020103, ++ 0x81C, 0xFB040103, ++ 0x81C, 0xFA060103, ++ 0x81C, 0xF9080103, ++ 0x81C, 0xF80A0103, ++ 0x81C, 0xF70C0103, ++ 0x81C, 0xF60E0103, ++ 0x81C, 0xF5100103, ++ 0x81C, 0xF4120103, ++ 0x81C, 0xF3140103, ++ 0x81C, 0xF2160103, ++ 0x81C, 0xF1180103, ++ 0x81C, 0xF01A0103, ++ 0x81C, 0xEF1C0103, ++ 0x81C, 0xEE1E0103, ++ 0x81C, 0xED200103, ++ 0x81C, 0xEC220103, ++ 0x81C, 0xEB240103, ++ 0x81C, 0xEA260103, ++ 0x81C, 0xE9280103, ++ 0x81C, 0xE82A0103, ++ 0x81C, 0xE72C0103, ++ 0x81C, 0xE62E0103, ++ 0x81C, 0xE5300103, ++ 0x81C, 0xE4320103, ++ 0x81C, 0xE3340103, ++ 0x81C, 0xE2360103, ++ 0x81C, 0xE1380103, ++ 0x81C, 0xA33A0103, ++ 0x81C, 0xA23C0103, ++ 0x81C, 0xA13E0103, ++ 0x81C, 0x84400103, ++ 0x81C, 0x83420103, ++ 0x81C, 0x82440103, ++ 0x81C, 0x81460103, ++ 0x81C, 0x64480103, ++ 0x81C, 0x634A0103, ++ 0x81C, 0x624C0103, ++ 0x81C, 0x614E0103, ++ 0x81C, 0x45500103, ++ 0x81C, 0x44520103, ++ 0x81C, 0x43540103, ++ 0x81C, 0x42560103, ++ 0x81C, 0x25580103, ++ 0x81C, 0x245A0103, ++ 0x81C, 0x235C0103, ++ 0x81C, 0x065E0103, ++ 0x81C, 0x05600103, ++ 0x81C, 0x04620103, ++ 0x81C, 0x03640103, ++ 0x81C, 0x02660103, ++ 0x81C, 0x01680103, ++ 0x81C, 0x016A0103, ++ 0x81C, 0x016C0103, ++ 0x81C, 0x016E0103, ++ 0x81C, 0x01700103, ++ 0x81C, 0x01720103, ++ 0x81C, 0x01740103, ++ 0x81C, 0x01760103, ++ 0x81C, 0x01780103, ++ 0x81C, 0x017A0103, ++ 0x81C, 0x017C0103, ++ 0x81C, 0x017E0103, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xFA000103, ++ 0x81C, 0xF9020103, ++ 0x81C, 0xF8040103, ++ 0x81C, 0xF7060103, ++ 0x81C, 0xF6080103, ++ 0x81C, 0xF50A0103, ++ 0x81C, 0xF40C0103, ++ 0x81C, 0xF30E0103, ++ 0x81C, 0xF2100103, ++ 0x81C, 0xF1120103, ++ 0x81C, 0xF0140103, ++ 0x81C, 0xEF160103, ++ 0x81C, 0xEE180103, ++ 0x81C, 0xED1A0103, ++ 0x81C, 0xEC1C0103, ++ 0x81C, 0xEB1E0103, ++ 0x81C, 0xEA200103, ++ 0x81C, 0xE9220103, ++ 0x81C, 0xE8240103, ++ 0x81C, 0xE7260103, ++ 0x81C, 0xE6280103, ++ 0x81C, 0xE52A0103, ++ 0x81C, 0xE42C0103, ++ 0x81C, 0xE32E0103, ++ 0x81C, 0xE2300103, ++ 0x81C, 0xE1320103, ++ 0x81C, 0xA5340103, ++ 0x81C, 0xA4360103, ++ 0x81C, 0xA3380103, ++ 0x81C, 0xA23A0103, ++ 0x81C, 0xA13C0103, ++ 0x81C, 0x843E0103, ++ 0x81C, 0x83400103, ++ 0x81C, 0x82420103, ++ 0x81C, 0x81440103, ++ 0x81C, 0x64460103, ++ 0x81C, 0x63480103, ++ 0x81C, 0x624A0103, ++ 0x81C, 0x614C0103, ++ 0x81C, 0x454E0103, ++ 0x81C, 0x44500103, ++ 0x81C, 0x43520103, ++ 0x81C, 0x42540103, ++ 0x81C, 0x41560103, ++ 0x81C, 0x24580103, ++ 0x81C, 0x235A0103, ++ 0x81C, 0x225C0103, ++ 0x81C, 0x055E0103, ++ 0x81C, 0x04600103, ++ 0x81C, 0x03620103, ++ 0x81C, 0x02640103, ++ 0x81C, 0x01660103, ++ 0x81C, 0x01680103, ++ 0x81C, 0x016A0103, ++ 0x81C, 0x016C0103, ++ 0x81C, 0x016E0103, ++ 0x81C, 0x01700103, ++ 0x81C, 0x01720103, ++ 0x81C, 0x01740103, ++ 0x81C, 0x01760103, ++ 0x81C, 0x01780103, ++ 0x81C, 0x017A0103, ++ 0x81C, 0x017C0103, ++ 0x81C, 0x017E0103, ++ 0x90000007, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xFF000103, ++ 0x81C, 0xFF020103, ++ 0x81C, 0xFE040103, ++ 0x81C, 0xFD060103, ++ 0x81C, 0xFC080103, ++ 0x81C, 0xFB0A0103, ++ 0x81C, 0xFA0C0103, ++ 0x81C, 0xF90E0103, ++ 0x81C, 0xF8100103, ++ 0x81C, 0xF7120103, ++ 0x81C, 0xF6140103, ++ 0x81C, 0xF5160103, ++ 0x81C, 0xF4180103, ++ 0x81C, 0xF31A0103, ++ 0x81C, 0xF21C0103, ++ 0x81C, 0xF11E0103, ++ 0x81C, 0xF0200103, ++ 0x81C, 0xEF220103, ++ 0x81C, 0xEE240103, ++ 0x81C, 0xED260103, ++ 0x81C, 0xEC280103, ++ 0x81C, 0xEB2A0103, ++ 0x81C, 0xEA2C0103, ++ 0x81C, 0xE92E0103, ++ 0x81C, 0xE8300103, ++ 0x81C, 0xE7320103, ++ 0x81C, 0xE6340103, ++ 0x81C, 0xE5360103, ++ 0x81C, 0xE4380103, ++ 0x81C, 0xE33A0103, ++ 0x81C, 0xA53C0103, ++ 0x81C, 0xA43E0103, ++ 0x81C, 0xA3400103, ++ 0x81C, 0xA2420103, ++ 0x81C, 0xA1440103, ++ 0x81C, 0x85460103, ++ 0x81C, 0x84480103, ++ 0x81C, 0x834A0103, ++ 0x81C, 0x824C0103, ++ 0x81C, 0x814E0103, ++ 0x81C, 0x64500103, ++ 0x81C, 0x63520103, ++ 0x81C, 0x62540103, ++ 0x81C, 0x44560103, ++ 0x81C, 0x43580103, ++ 0x81C, 0x425A0103, ++ 0x81C, 0x265C0103, ++ 0x81C, 0x255E0103, ++ 0x81C, 0x24600103, ++ 0x81C, 0x07620103, ++ 0x81C, 0x06640103, ++ 0x81C, 0x05660103, ++ 0x81C, 0x04680103, ++ 0x81C, 0x036A0103, ++ 0x81C, 0x026C0103, ++ 0x81C, 0x016E0103, ++ 0x81C, 0x01700103, ++ 0x81C, 0x01720103, ++ 0x81C, 0x01740103, ++ 0x81C, 0x01760103, ++ 0x81C, 0x01780103, ++ 0x81C, 0x017A0103, ++ 0x81C, 0x017C0103, ++ 0x81C, 0x017E0103, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xF8000103, ++ 0x81C, 0xF7020103, ++ 0x81C, 0xF6040103, ++ 0x81C, 0xF5060103, ++ 0x81C, 0xF4080103, ++ 0x81C, 0xF30A0103, ++ 0x81C, 0xF20C0103, ++ 0x81C, 0xF10E0103, ++ 0x81C, 0xF0100103, ++ 0x81C, 0xEF120103, ++ 0x81C, 0xEE140103, ++ 0x81C, 0xED160103, ++ 0x81C, 0xEC180103, ++ 0x81C, 0xEB1A0103, ++ 0x81C, 0xEA1C0103, ++ 0x81C, 0xE91E0103, ++ 0x81C, 0xE8200103, ++ 0x81C, 0xE7220103, ++ 0x81C, 0xE6240103, ++ 0x81C, 0xE5260103, ++ 0x81C, 0xE4280103, ++ 0x81C, 0xE32A0103, ++ 0x81C, 0xE22C0103, ++ 0x81C, 0xE12E0103, ++ 0x81C, 0xA4300103, ++ 0x81C, 0xA3320103, ++ 0x81C, 0xA2340103, ++ 0x81C, 0xA1360103, ++ 0x81C, 0x85380103, ++ 0x81C, 0x843A0103, ++ 0x81C, 0x833C0103, ++ 0x81C, 0x823E0103, ++ 0x81C, 0x65400103, ++ 0x81C, 0x64420103, ++ 0x81C, 0x63440103, ++ 0x81C, 0x62460103, ++ 0x81C, 0x45480103, ++ 0x81C, 0x444A0103, ++ 0x81C, 0x434C0103, ++ 0x81C, 0x264E0103, ++ 0x81C, 0x25500103, ++ 0x81C, 0x24520103, ++ 0x81C, 0x08540103, ++ 0x81C, 0x07560103, ++ 0x81C, 0x06580103, ++ 0x81C, 0x055A0103, ++ 0x81C, 0x045C0103, ++ 0x81C, 0x035E0103, ++ 0x81C, 0x02600103, ++ 0x81C, 0x01620103, ++ 0x81C, 0x01640103, ++ 0x81C, 0x01660103, ++ 0x81C, 0x01680103, ++ 0x81C, 0x016A0103, ++ 0x81C, 0x016C0103, ++ 0x81C, 0x016E0103, ++ 0x81C, 0x01700103, ++ 0x81C, 0x01720103, ++ 0x81C, 0x01740103, ++ 0x81C, 0x01760103, ++ 0x81C, 0x01780103, ++ 0x81C, 0x017A0103, ++ 0x81C, 0x017C0103, ++ 0x81C, 0x017E0103, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xFF000103, ++ 0x81C, 0xFF020103, ++ 0x81C, 0xFE040103, ++ 0x81C, 0xFD060103, ++ 0x81C, 0xFC080103, ++ 0x81C, 0xFB0A0103, ++ 0x81C, 0xFA0C0103, ++ 0x81C, 0xF90E0103, ++ 0x81C, 0xF8100103, ++ 0x81C, 0xF7120103, ++ 0x81C, 0xF6140103, ++ 0x81C, 0xF5160103, ++ 0x81C, 0xF4180103, ++ 0x81C, 0xF31A0103, ++ 0x81C, 0xF21C0103, ++ 0x81C, 0xF11E0103, ++ 0x81C, 0xF0200103, ++ 0x81C, 0xEF220103, ++ 0x81C, 0xEE240103, ++ 0x81C, 0xED260103, ++ 0x81C, 0xEC280103, ++ 0x81C, 0xEB2A0103, ++ 0x81C, 0xEA2C0103, ++ 0x81C, 0xE92E0103, ++ 0x81C, 0xE8300103, ++ 0x81C, 0xE7320103, ++ 0x81C, 0xE6340103, ++ 0x81C, 0xE5360103, ++ 0x81C, 0xE4380103, ++ 0x81C, 0xE33A0103, ++ 0x81C, 0xA53C0103, ++ 0x81C, 0xA43E0103, ++ 0x81C, 0xA3400103, ++ 0x81C, 0xA2420103, ++ 0x81C, 0xA1440103, ++ 0x81C, 0x85460103, ++ 0x81C, 0x84480103, ++ 0x81C, 0x834A0103, ++ 0x81C, 0x824C0103, ++ 0x81C, 0x814E0103, ++ 0x81C, 0x64500103, ++ 0x81C, 0x63520103, ++ 0x81C, 0x62540103, ++ 0x81C, 0x44560103, ++ 0x81C, 0x43580103, ++ 0x81C, 0x425A0103, ++ 0x81C, 0x265C0103, ++ 0x81C, 0x255E0103, ++ 0x81C, 0x24600103, ++ 0x81C, 0x07620103, ++ 0x81C, 0x06640103, ++ 0x81C, 0x05660103, ++ 0x81C, 0x04680103, ++ 0x81C, 0x036A0103, ++ 0x81C, 0x026C0103, ++ 0x81C, 0x016E0103, ++ 0x81C, 0x01700103, ++ 0x81C, 0x01720103, ++ 0x81C, 0x01740103, ++ 0x81C, 0x01760103, ++ 0x81C, 0x01780103, ++ 0x81C, 0x017A0103, ++ 0x81C, 0x017C0103, ++ 0x81C, 0x017E0103, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xF9000103, ++ 0x81C, 0xF8020103, ++ 0x81C, 0xF7040103, ++ 0x81C, 0xF6060103, ++ 0x81C, 0xF5080103, ++ 0x81C, 0xF40A0103, ++ 0x81C, 0xF30C0103, ++ 0x81C, 0xF20E0103, ++ 0x81C, 0xF1100103, ++ 0x81C, 0xF0120103, ++ 0x81C, 0xEF140103, ++ 0x81C, 0xEE160103, ++ 0x81C, 0xED180103, ++ 0x81C, 0xEC1A0103, ++ 0x81C, 0xEB1C0103, ++ 0x81C, 0xEA1E0103, ++ 0x81C, 0xE9200103, ++ 0x81C, 0xE8220103, ++ 0x81C, 0xE7240103, ++ 0x81C, 0xE6260103, ++ 0x81C, 0xE5280103, ++ 0x81C, 0xE42A0103, ++ 0x81C, 0xE32C0103, ++ 0x81C, 0xE22E0103, ++ 0x81C, 0xA6300103, ++ 0x81C, 0xA5320103, ++ 0x81C, 0xA4340103, ++ 0x81C, 0xA3360103, ++ 0x81C, 0xA2380103, ++ 0x81C, 0xA13A0103, ++ 0x81C, 0x843C0103, ++ 0x81C, 0x833E0103, ++ 0x81C, 0x82400103, ++ 0x81C, 0x81420103, ++ 0x81C, 0x64440103, ++ 0x81C, 0x63460103, ++ 0x81C, 0x62480103, ++ 0x81C, 0x614A0103, ++ 0x81C, 0x444C0103, ++ 0x81C, 0x434E0103, ++ 0x81C, 0x42500103, ++ 0x81C, 0x41520103, ++ 0x81C, 0x25540103, ++ 0x81C, 0x24560103, ++ 0x81C, 0x23580103, ++ 0x81C, 0x225A0103, ++ 0x81C, 0x055C0103, ++ 0x81C, 0x045E0103, ++ 0x81C, 0x03600103, ++ 0x81C, 0x02620103, ++ 0x81C, 0x01640103, ++ 0x81C, 0x01660103, ++ 0x81C, 0x01680103, ++ 0x81C, 0x016A0103, ++ 0x81C, 0x016C0103, ++ 0x81C, 0x016E0103, ++ 0x81C, 0x01700103, ++ 0x81C, 0x01720103, ++ 0x81C, 0x01740103, ++ 0x81C, 0x01760103, ++ 0x81C, 0x01780103, ++ 0x81C, 0x017A0103, ++ 0x81C, 0x017C0103, ++ 0x81C, 0x017E0103, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xFA000103, ++ 0x81C, 0xF9020103, ++ 0x81C, 0xF8040103, ++ 0x81C, 0xF7060103, ++ 0x81C, 0xF6080103, ++ 0x81C, 0xF50A0103, ++ 0x81C, 0xF40C0103, ++ 0x81C, 0xF30E0103, ++ 0x81C, 0xF2100103, ++ 0x81C, 0xF1120103, ++ 0x81C, 0xF0140103, ++ 0x81C, 0xEF160103, ++ 0x81C, 0xEE180103, ++ 0x81C, 0xED1A0103, ++ 0x81C, 0xCC1C0103, ++ 0x81C, 0xCB1E0103, ++ 0x81C, 0xCA200103, ++ 0x81C, 0xE9220103, ++ 0x81C, 0xE8240103, ++ 0x81C, 0xE7260103, ++ 0x81C, 0xE6280103, ++ 0x81C, 0xE42A0103, ++ 0x81C, 0xE32C0103, ++ 0x81C, 0xE22E0103, ++ 0x81C, 0xA7300103, ++ 0x81C, 0xA6320103, ++ 0x81C, 0xA5340103, ++ 0x81C, 0xA4360103, ++ 0x81C, 0xA3380103, ++ 0x81C, 0xA23A0103, ++ 0x81C, 0xA13C0103, ++ 0x81C, 0x843E0103, ++ 0x81C, 0x83400103, ++ 0x81C, 0x82420103, ++ 0x81C, 0x65440103, ++ 0x81C, 0x64460103, ++ 0x81C, 0x63480103, ++ 0x81C, 0x624A0103, ++ 0x81C, 0x614C0103, ++ 0x81C, 0x444E0103, ++ 0x81C, 0x43500103, ++ 0x81C, 0x42520103, ++ 0x81C, 0x41540103, ++ 0x81C, 0x24560103, ++ 0x81C, 0x23580103, ++ 0x81C, 0x055A0103, ++ 0x81C, 0x045C0103, ++ 0x81C, 0x035E0103, ++ 0x81C, 0x02600103, ++ 0x81C, 0x01620103, ++ 0x81C, 0x01640103, ++ 0x81C, 0x01660103, ++ 0x81C, 0x01680103, ++ 0x81C, 0x016A0103, ++ 0x81C, 0x016C0103, ++ 0x81C, 0x016E0103, ++ 0x81C, 0x01700103, ++ 0x81C, 0x01720103, ++ 0x81C, 0x01740103, ++ 0x81C, 0x01760103, ++ 0x81C, 0x01780103, ++ 0x81C, 0x017A0103, ++ 0x81C, 0x017C0103, ++ 0x81C, 0x017E0103, ++ 0xA0000000, 0x00000000, ++ 0x81C, 0xFF000103, ++ 0x81C, 0xFE020103, ++ 0x81C, 0xFD040103, ++ 0x81C, 0xFC060103, ++ 0x81C, 0xFB080103, ++ 0x81C, 0xFA0A0103, ++ 0x81C, 0xF90C0103, ++ 0x81C, 0xF80E0103, ++ 0x81C, 0xF7100103, ++ 0x81C, 0xF6120103, ++ 0x81C, 0xF5140103, ++ 0x81C, 0xF4160103, ++ 0x81C, 0xF3180103, ++ 0x81C, 0xF21A0103, ++ 0x81C, 0xF11C0103, ++ 0x81C, 0xF01E0103, ++ 0x81C, 0xEF200103, ++ 0x81C, 0xEE220103, ++ 0x81C, 0xED240103, ++ 0x81C, 0xEC260103, ++ 0x81C, 0xEB280103, ++ 0x81C, 0xEA2A0103, ++ 0x81C, 0xE92C0103, ++ 0x81C, 0xE82E0103, ++ 0x81C, 0xE7300103, ++ 0x81C, 0xE6320103, ++ 0x81C, 0xE5340103, ++ 0x81C, 0xE4360103, ++ 0x81C, 0xE3380103, ++ 0x81C, 0xE23A0103, ++ 0x81C, 0xE13C0103, ++ 0x81C, 0xA43E0103, ++ 0x81C, 0xA3400103, ++ 0x81C, 0xA2420103, ++ 0x81C, 0xA1440103, ++ 0x81C, 0x86460103, ++ 0x81C, 0x85480103, ++ 0x81C, 0x844A0103, ++ 0x81C, 0x834C0103, ++ 0x81C, 0x824E0103, ++ 0x81C, 0x81500103, ++ 0x81C, 0x64520103, ++ 0x81C, 0x63540103, ++ 0x81C, 0x62560103, ++ 0x81C, 0x61580103, ++ 0x81C, 0x435A0103, ++ 0x81C, 0x425C0103, ++ 0x81C, 0x415E0103, ++ 0x81C, 0x25600103, ++ 0x81C, 0x24620103, ++ 0x81C, 0x06640103, ++ 0x81C, 0x05660103, ++ 0x81C, 0x04680103, ++ 0x81C, 0x036A0103, ++ 0x81C, 0x026C0103, ++ 0x81C, 0x016E0103, ++ 0x81C, 0x01700103, ++ 0x81C, 0x01720103, ++ 0x81C, 0x01740103, ++ 0x81C, 0x01760103, ++ 0x81C, 0x01780103, ++ 0x81C, 0x017A0103, ++ 0x81C, 0x017C0103, ++ 0x81C, 0x017E0103, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xFA000203, ++ 0x81C, 0xF9020203, ++ 0x81C, 0xF8040203, ++ 0x81C, 0xF7060203, ++ 0x81C, 0xF6080203, ++ 0x81C, 0xF50A0203, ++ 0x81C, 0xF40C0203, ++ 0x81C, 0xF30E0203, ++ 0x81C, 0xF2100203, ++ 0x81C, 0xF1120203, ++ 0x81C, 0xF0140203, ++ 0x81C, 0xEF160203, ++ 0x81C, 0xEE180203, ++ 0x81C, 0xED1A0203, ++ 0x81C, 0xEC1C0203, ++ 0x81C, 0xEB1E0203, ++ 0x81C, 0xEA200203, ++ 0x81C, 0xE9220203, ++ 0x81C, 0xE8240203, ++ 0x81C, 0xE7260203, ++ 0x81C, 0xE6280203, ++ 0x81C, 0xE52A0203, ++ 0x81C, 0xE42C0203, ++ 0x81C, 0xE32E0203, ++ 0x81C, 0xE2300203, ++ 0x81C, 0xE1320203, ++ 0x81C, 0xA5340203, ++ 0x81C, 0xA4360203, ++ 0x81C, 0xA3380203, ++ 0x81C, 0xA23A0203, ++ 0x81C, 0xA13C0203, ++ 0x81C, 0x843E0203, ++ 0x81C, 0x83400203, ++ 0x81C, 0x82420203, ++ 0x81C, 0x81440203, ++ 0x81C, 0x63460203, ++ 0x81C, 0x62480203, ++ 0x81C, 0x614A0203, ++ 0x81C, 0x464C0203, ++ 0x81C, 0x454E0203, ++ 0x81C, 0x44500203, ++ 0x81C, 0x43520203, ++ 0x81C, 0x42540203, ++ 0x81C, 0x41560203, ++ 0x81C, 0x24580203, ++ 0x81C, 0x235A0203, ++ 0x81C, 0x065C0203, ++ 0x81C, 0x055E0203, ++ 0x81C, 0x04600203, ++ 0x81C, 0x03620203, ++ 0x81C, 0x02640203, ++ 0x81C, 0x01660203, ++ 0x81C, 0x01680203, ++ 0x81C, 0x016A0203, ++ 0x81C, 0x016C0203, ++ 0x81C, 0x016E0203, ++ 0x81C, 0x01700203, ++ 0x81C, 0x01720203, ++ 0x81C, 0x01740203, ++ 0x81C, 0x01760203, ++ 0x81C, 0x01780203, ++ 0x81C, 0x017A0203, ++ 0x81C, 0x017C0203, ++ 0x81C, 0x017E0203, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xF8000203, ++ 0x81C, 0xF7020203, ++ 0x81C, 0xF6040203, ++ 0x81C, 0xF5060203, ++ 0x81C, 0xF4080203, ++ 0x81C, 0xF30A0203, ++ 0x81C, 0xF20C0203, ++ 0x81C, 0xF10E0203, ++ 0x81C, 0xF0100203, ++ 0x81C, 0xEF120203, ++ 0x81C, 0xEE140203, ++ 0x81C, 0xED160203, ++ 0x81C, 0xEC180203, ++ 0x81C, 0xEB1A0203, ++ 0x81C, 0xEA1C0203, ++ 0x81C, 0xE91E0203, ++ 0x81C, 0xE8200203, ++ 0x81C, 0xE7220203, ++ 0x81C, 0xE6240203, ++ 0x81C, 0xE5260203, ++ 0x81C, 0xE4280203, ++ 0x81C, 0xE32A0203, ++ 0x81C, 0xE22C0203, ++ 0x81C, 0xE12E0203, ++ 0x81C, 0xA6300203, ++ 0x81C, 0xA5320203, ++ 0x81C, 0xA4340203, ++ 0x81C, 0xA3360203, ++ 0x81C, 0xA2380203, ++ 0x81C, 0x853A0203, ++ 0x81C, 0x843C0203, ++ 0x81C, 0x833E0203, ++ 0x81C, 0x82400203, ++ 0x81C, 0x81420203, ++ 0x81C, 0x64440203, ++ 0x81C, 0x63460203, ++ 0x81C, 0x62480203, ++ 0x81C, 0x614A0203, ++ 0x81C, 0x444C0203, ++ 0x81C, 0x434E0203, ++ 0x81C, 0x42500203, ++ 0x81C, 0x25520203, ++ 0x81C, 0x24540203, ++ 0x81C, 0x23560203, ++ 0x81C, 0x06580203, ++ 0x81C, 0x055A0203, ++ 0x81C, 0x045C0203, ++ 0x81C, 0x035E0203, ++ 0x81C, 0x02600203, ++ 0x81C, 0x01620203, ++ 0x81C, 0x01640203, ++ 0x81C, 0x01660203, ++ 0x81C, 0x01680203, ++ 0x81C, 0x016A0203, ++ 0x81C, 0x016C0203, ++ 0x81C, 0x016E0203, ++ 0x81C, 0x01700203, ++ 0x81C, 0x01720203, ++ 0x81C, 0x01740203, ++ 0x81C, 0x01760203, ++ 0x81C, 0x01780203, ++ 0x81C, 0x017A0203, ++ 0x81C, 0x017C0203, ++ 0x81C, 0x017E0203, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xFC000203, ++ 0x81C, 0xFB020203, ++ 0x81C, 0xFA040203, ++ 0x81C, 0xF9060203, ++ 0x81C, 0xF8080203, ++ 0x81C, 0xF70A0203, ++ 0x81C, 0xF60C0203, ++ 0x81C, 0xF50E0203, ++ 0x81C, 0xF4100203, ++ 0x81C, 0xF3120203, ++ 0x81C, 0xF2140203, ++ 0x81C, 0xF1160203, ++ 0x81C, 0xF0180203, ++ 0x81C, 0xEF1A0203, ++ 0x81C, 0xEE1C0203, ++ 0x81C, 0xED1E0203, ++ 0x81C, 0xEC200203, ++ 0x81C, 0xEB220203, ++ 0x81C, 0xEA240203, ++ 0x81C, 0xE9260203, ++ 0x81C, 0xE8280203, ++ 0x81C, 0xE72A0203, ++ 0x81C, 0xE62C0203, ++ 0x81C, 0xE52E0203, ++ 0x81C, 0xE4300203, ++ 0x81C, 0xE3320203, ++ 0x81C, 0xE2340203, ++ 0x81C, 0xE1360203, ++ 0x81C, 0x87380203, ++ 0x81C, 0x863A0203, ++ 0x81C, 0x853C0203, ++ 0x81C, 0x843E0203, ++ 0x81C, 0x83400203, ++ 0x81C, 0x82420203, ++ 0x81C, 0x81440203, ++ 0x81C, 0x64460203, ++ 0x81C, 0x63480203, ++ 0x81C, 0x624A0203, ++ 0x81C, 0x474C0203, ++ 0x81C, 0x464E0203, ++ 0x81C, 0x45500203, ++ 0x81C, 0x44520203, ++ 0x81C, 0x43540203, ++ 0x81C, 0x42560203, ++ 0x81C, 0x24580203, ++ 0x81C, 0x235A0203, ++ 0x81C, 0x075C0203, ++ 0x81C, 0x065E0203, ++ 0x81C, 0x05600203, ++ 0x81C, 0x04620203, ++ 0x81C, 0x03640203, ++ 0x81C, 0x02660203, ++ 0x81C, 0x01680203, ++ 0x81C, 0x016A0203, ++ 0x81C, 0x016C0203, ++ 0x81C, 0x016E0203, ++ 0x81C, 0x01700203, ++ 0x81C, 0x01720203, ++ 0x81C, 0x01740203, ++ 0x81C, 0x01760203, ++ 0x81C, 0x01780203, ++ 0x81C, 0x017A0203, ++ 0x81C, 0x017C0203, ++ 0x81C, 0x017E0203, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xF8000203, ++ 0x81C, 0xF7020203, ++ 0x81C, 0xF6040203, ++ 0x81C, 0xF5060203, ++ 0x81C, 0xF4080203, ++ 0x81C, 0xF30A0203, ++ 0x81C, 0xF20C0203, ++ 0x81C, 0xF10E0203, ++ 0x81C, 0xF0100203, ++ 0x81C, 0xEF120203, ++ 0x81C, 0xEE140203, ++ 0x81C, 0xED160203, ++ 0x81C, 0xEC180203, ++ 0x81C, 0xEB1A0203, ++ 0x81C, 0xEA1C0203, ++ 0x81C, 0xE91E0203, ++ 0x81C, 0xE8200203, ++ 0x81C, 0xE7220203, ++ 0x81C, 0xE6240203, ++ 0x81C, 0xE5260203, ++ 0x81C, 0xE4280203, ++ 0x81C, 0xE32A0203, ++ 0x81C, 0xE22C0203, ++ 0x81C, 0xE12E0203, ++ 0x81C, 0xA6300203, ++ 0x81C, 0xA5320203, ++ 0x81C, 0xA4340203, ++ 0x81C, 0xA3360203, ++ 0x81C, 0xA2380203, ++ 0x81C, 0xA13A0203, ++ 0x81C, 0x843C0203, ++ 0x81C, 0x833E0203, ++ 0x81C, 0x82400203, ++ 0x81C, 0x81420203, ++ 0x81C, 0x64440203, ++ 0x81C, 0x63460203, ++ 0x81C, 0x62480203, ++ 0x81C, 0x614A0203, ++ 0x81C, 0x444C0203, ++ 0x81C, 0x434E0203, ++ 0x81C, 0x42500203, ++ 0x81C, 0x41520203, ++ 0x81C, 0x25540203, ++ 0x81C, 0x24560203, ++ 0x81C, 0x23580203, ++ 0x81C, 0x065A0203, ++ 0x81C, 0x055C0203, ++ 0x81C, 0x045E0203, ++ 0x81C, 0x03600203, ++ 0x81C, 0x02620203, ++ 0x81C, 0x01640203, ++ 0x81C, 0x01660203, ++ 0x81C, 0x01680203, ++ 0x81C, 0x016A0203, ++ 0x81C, 0x016C0203, ++ 0x81C, 0x016E0203, ++ 0x81C, 0x01700203, ++ 0x81C, 0x01720203, ++ 0x81C, 0x01740203, ++ 0x81C, 0x01760203, ++ 0x81C, 0x01780203, ++ 0x81C, 0x017A0203, ++ 0x81C, 0x017C0203, ++ 0x81C, 0x017E0203, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xFB000203, ++ 0x81C, 0xFA020203, ++ 0x81C, 0xF9040203, ++ 0x81C, 0xF8060203, ++ 0x81C, 0xF7080203, ++ 0x81C, 0xF60A0203, ++ 0x81C, 0xF50C0203, ++ 0x81C, 0xF40E0203, ++ 0x81C, 0xF3100203, ++ 0x81C, 0xF2120203, ++ 0x81C, 0xF1140203, ++ 0x81C, 0xF0160203, ++ 0x81C, 0xEF180203, ++ 0x81C, 0xEE1A0203, ++ 0x81C, 0xED1C0203, ++ 0x81C, 0xEC1E0203, ++ 0x81C, 0xEB200203, ++ 0x81C, 0xEA220203, ++ 0x81C, 0xE9240203, ++ 0x81C, 0xE8260203, ++ 0x81C, 0xE7280203, ++ 0x81C, 0xE62A0203, ++ 0x81C, 0xE52C0203, ++ 0x81C, 0xE42E0203, ++ 0x81C, 0xE3300203, ++ 0x81C, 0xE2320203, ++ 0x81C, 0xE1340203, ++ 0x81C, 0xA5360203, ++ 0x81C, 0xA4380203, ++ 0x81C, 0xA33A0203, ++ 0x81C, 0xA23C0203, ++ 0x81C, 0x843E0203, ++ 0x81C, 0x83400203, ++ 0x81C, 0x82420203, ++ 0x81C, 0x81440203, ++ 0x81C, 0x64460203, ++ 0x81C, 0x63480203, ++ 0x81C, 0x624A0203, ++ 0x81C, 0x614C0203, ++ 0x81C, 0x474E0203, ++ 0x81C, 0x46500203, ++ 0x81C, 0x45520203, ++ 0x81C, 0x44540203, ++ 0x81C, 0x43560203, ++ 0x81C, 0x25580203, ++ 0x81C, 0x245A0203, ++ 0x81C, 0x235C0203, ++ 0x81C, 0x075E0203, ++ 0x81C, 0x06600203, ++ 0x81C, 0x05620203, ++ 0x81C, 0x04640203, ++ 0x81C, 0x03660203, ++ 0x81C, 0x02680203, ++ 0x81C, 0x016A0203, ++ 0x81C, 0x016C0203, ++ 0x81C, 0x016E0203, ++ 0x81C, 0x01700203, ++ 0x81C, 0x01720203, ++ 0x81C, 0x01740203, ++ 0x81C, 0x01760203, ++ 0x81C, 0x01780203, ++ 0x81C, 0x017A0203, ++ 0x81C, 0x017C0203, ++ 0x81C, 0x017E0203, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xFC000203, ++ 0x81C, 0xFB020203, ++ 0x81C, 0xFA040203, ++ 0x81C, 0xF9060203, ++ 0x81C, 0xF8080203, ++ 0x81C, 0xF70A0203, ++ 0x81C, 0xF60C0203, ++ 0x81C, 0xF50E0203, ++ 0x81C, 0xF4100203, ++ 0x81C, 0xF3120203, ++ 0x81C, 0xF2140203, ++ 0x81C, 0xF1160203, ++ 0x81C, 0xF0180203, ++ 0x81C, 0xEF1A0203, ++ 0x81C, 0xEE1C0203, ++ 0x81C, 0xED1E0203, ++ 0x81C, 0xEC200203, ++ 0x81C, 0xEB220203, ++ 0x81C, 0xEA240203, ++ 0x81C, 0xE9260203, ++ 0x81C, 0xE8280203, ++ 0x81C, 0xE72A0203, ++ 0x81C, 0xE62C0203, ++ 0x81C, 0xE52E0203, ++ 0x81C, 0xE4300203, ++ 0x81C, 0xE3320203, ++ 0x81C, 0xE2340203, ++ 0x81C, 0xE1360203, ++ 0x81C, 0xA5380203, ++ 0x81C, 0xA43A0203, ++ 0x81C, 0xA33C0203, ++ 0x81C, 0x853E0203, ++ 0x81C, 0x84400203, ++ 0x81C, 0x83420203, ++ 0x81C, 0x82440203, ++ 0x81C, 0x81460203, ++ 0x81C, 0x64480203, ++ 0x81C, 0x634A0203, ++ 0x81C, 0x624C0203, ++ 0x81C, 0x614E0203, ++ 0x81C, 0x46500203, ++ 0x81C, 0x45520203, ++ 0x81C, 0x44540203, ++ 0x81C, 0x43560203, ++ 0x81C, 0x25580203, ++ 0x81C, 0x245A0203, ++ 0x81C, 0x235C0203, ++ 0x81C, 0x075E0203, ++ 0x81C, 0x06600203, ++ 0x81C, 0x05620203, ++ 0x81C, 0x04640203, ++ 0x81C, 0x03660203, ++ 0x81C, 0x02680203, ++ 0x81C, 0x016A0203, ++ 0x81C, 0x016C0203, ++ 0x81C, 0x016E0203, ++ 0x81C, 0x01700203, ++ 0x81C, 0x01720203, ++ 0x81C, 0x01740203, ++ 0x81C, 0x01760203, ++ 0x81C, 0x01780203, ++ 0x81C, 0x017A0203, ++ 0x81C, 0x017C0203, ++ 0x81C, 0x017E0203, ++ 0x90000007, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xFF000203, ++ 0x81C, 0xFF020203, ++ 0x81C, 0xFE040203, ++ 0x81C, 0xFD060203, ++ 0x81C, 0xFC080203, ++ 0x81C, 0xFB0A0203, ++ 0x81C, 0xFA0C0203, ++ 0x81C, 0xF90E0203, ++ 0x81C, 0xF8100203, ++ 0x81C, 0xF7120203, ++ 0x81C, 0xF6140203, ++ 0x81C, 0xF5160203, ++ 0x81C, 0xF4180203, ++ 0x81C, 0xF31A0203, ++ 0x81C, 0xF21C0203, ++ 0x81C, 0xF11E0203, ++ 0x81C, 0xF0200203, ++ 0x81C, 0xEF220203, ++ 0x81C, 0xEE240203, ++ 0x81C, 0xED260203, ++ 0x81C, 0xEC280203, ++ 0x81C, 0xEB2A0203, ++ 0x81C, 0xEA2C0203, ++ 0x81C, 0xE92E0203, ++ 0x81C, 0xE8300203, ++ 0x81C, 0xE7320203, ++ 0x81C, 0xE6340203, ++ 0x81C, 0xE5360203, ++ 0x81C, 0xE4380203, ++ 0x81C, 0xE33A0203, ++ 0x81C, 0xE23C0203, ++ 0x81C, 0xE13E0203, ++ 0x81C, 0xA4400203, ++ 0x81C, 0xA3420203, ++ 0x81C, 0xA2440203, ++ 0x81C, 0xA1460203, ++ 0x81C, 0x84480203, ++ 0x81C, 0x834A0203, ++ 0x81C, 0x824C0203, ++ 0x81C, 0x814E0203, ++ 0x81C, 0x64500203, ++ 0x81C, 0x63520203, ++ 0x81C, 0x62540203, ++ 0x81C, 0x61560203, ++ 0x81C, 0x45580203, ++ 0x81C, 0x445A0203, ++ 0x81C, 0x435C0203, ++ 0x81C, 0x425E0203, ++ 0x81C, 0x24600203, ++ 0x81C, 0x23620203, ++ 0x81C, 0x07640203, ++ 0x81C, 0x06660203, ++ 0x81C, 0x05680203, ++ 0x81C, 0x046A0203, ++ 0x81C, 0x036C0203, ++ 0x81C, 0x026E0203, ++ 0x81C, 0x01700203, ++ 0x81C, 0x01720203, ++ 0x81C, 0x01740203, ++ 0x81C, 0x01760203, ++ 0x81C, 0x01780203, ++ 0x81C, 0x017A0203, ++ 0x81C, 0x017C0203, ++ 0x81C, 0x017E0203, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xF7000203, ++ 0x81C, 0xF6020203, ++ 0x81C, 0xF5040203, ++ 0x81C, 0xF4060203, ++ 0x81C, 0xF3080203, ++ 0x81C, 0xF20A0203, ++ 0x81C, 0xF10C0203, ++ 0x81C, 0xF00E0203, ++ 0x81C, 0xEF100203, ++ 0x81C, 0xEE120203, ++ 0x81C, 0xED140203, ++ 0x81C, 0xEC160203, ++ 0x81C, 0xEB180203, ++ 0x81C, 0xEA1A0203, ++ 0x81C, 0xE91C0203, ++ 0x81C, 0xE81E0203, ++ 0x81C, 0xE7200203, ++ 0x81C, 0xE6220203, ++ 0x81C, 0xE5240203, ++ 0x81C, 0xE4260203, ++ 0x81C, 0xE3280203, ++ 0x81C, 0xE22A0203, ++ 0x81C, 0xA62C0203, ++ 0x81C, 0xA52E0203, ++ 0x81C, 0xA4300203, ++ 0x81C, 0xA3320203, ++ 0x81C, 0xA2340203, ++ 0x81C, 0xA1360203, ++ 0x81C, 0x86380203, ++ 0x81C, 0x853A0203, ++ 0x81C, 0x843C0203, ++ 0x81C, 0x833E0203, ++ 0x81C, 0x65400203, ++ 0x81C, 0x64420203, ++ 0x81C, 0x63440203, ++ 0x81C, 0x46460203, ++ 0x81C, 0x45480203, ++ 0x81C, 0x444A0203, ++ 0x81C, 0x434C0203, ++ 0x81C, 0x264E0203, ++ 0x81C, 0x25500203, ++ 0x81C, 0x24520203, ++ 0x81C, 0x08540203, ++ 0x81C, 0x07560203, ++ 0x81C, 0x06580203, ++ 0x81C, 0x055A0203, ++ 0x81C, 0x045C0203, ++ 0x81C, 0x035E0203, ++ 0x81C, 0x02600203, ++ 0x81C, 0x01620203, ++ 0x81C, 0x01640203, ++ 0x81C, 0x01660203, ++ 0x81C, 0x01680203, ++ 0x81C, 0x016A0203, ++ 0x81C, 0x016C0203, ++ 0x81C, 0x016E0203, ++ 0x81C, 0x01700203, ++ 0x81C, 0x01720203, ++ 0x81C, 0x01740203, ++ 0x81C, 0x01760203, ++ 0x81C, 0x01780203, ++ 0x81C, 0x017A0203, ++ 0x81C, 0x017C0203, ++ 0x81C, 0x017E0203, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xFF000203, ++ 0x81C, 0xFF020203, ++ 0x81C, 0xFE040203, ++ 0x81C, 0xFD060203, ++ 0x81C, 0xFC080203, ++ 0x81C, 0xFB0A0203, ++ 0x81C, 0xFA0C0203, ++ 0x81C, 0xF90E0203, ++ 0x81C, 0xF8100203, ++ 0x81C, 0xF7120203, ++ 0x81C, 0xF6140203, ++ 0x81C, 0xF5160203, ++ 0x81C, 0xF4180203, ++ 0x81C, 0xF31A0203, ++ 0x81C, 0xF21C0203, ++ 0x81C, 0xF11E0203, ++ 0x81C, 0xF0200203, ++ 0x81C, 0xEF220203, ++ 0x81C, 0xEE240203, ++ 0x81C, 0xED260203, ++ 0x81C, 0xEC280203, ++ 0x81C, 0xEB2A0203, ++ 0x81C, 0xEA2C0203, ++ 0x81C, 0xE92E0203, ++ 0x81C, 0xE8300203, ++ 0x81C, 0xE7320203, ++ 0x81C, 0xE6340203, ++ 0x81C, 0xE5360203, ++ 0x81C, 0xE4380203, ++ 0x81C, 0xE33A0203, ++ 0x81C, 0xE23C0203, ++ 0x81C, 0xE13E0203, ++ 0x81C, 0xA4400203, ++ 0x81C, 0xA3420203, ++ 0x81C, 0xA2440203, ++ 0x81C, 0xA1460203, ++ 0x81C, 0x84480203, ++ 0x81C, 0x834A0203, ++ 0x81C, 0x824C0203, ++ 0x81C, 0x814E0203, ++ 0x81C, 0x64500203, ++ 0x81C, 0x63520203, ++ 0x81C, 0x62540203, ++ 0x81C, 0x61560203, ++ 0x81C, 0x45580203, ++ 0x81C, 0x445A0203, ++ 0x81C, 0x435C0203, ++ 0x81C, 0x425E0203, ++ 0x81C, 0x24600203, ++ 0x81C, 0x23620203, ++ 0x81C, 0x07640203, ++ 0x81C, 0x06660203, ++ 0x81C, 0x05680203, ++ 0x81C, 0x046A0203, ++ 0x81C, 0x036C0203, ++ 0x81C, 0x026E0203, ++ 0x81C, 0x01700203, ++ 0x81C, 0x01720203, ++ 0x81C, 0x01740203, ++ 0x81C, 0x01760203, ++ 0x81C, 0x01780203, ++ 0x81C, 0x017A0203, ++ 0x81C, 0x017C0203, ++ 0x81C, 0x017E0203, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xF8000203, ++ 0x81C, 0xF7020203, ++ 0x81C, 0xF6040203, ++ 0x81C, 0xF5060203, ++ 0x81C, 0xF4080203, ++ 0x81C, 0xF30A0203, ++ 0x81C, 0xF20C0203, ++ 0x81C, 0xF10E0203, ++ 0x81C, 0xF0100203, ++ 0x81C, 0xEF120203, ++ 0x81C, 0xEE140203, ++ 0x81C, 0xED160203, ++ 0x81C, 0xEC180203, ++ 0x81C, 0xEB1A0203, ++ 0x81C, 0xEA1C0203, ++ 0x81C, 0xE91E0203, ++ 0x81C, 0xE8200203, ++ 0x81C, 0xE7220203, ++ 0x81C, 0xE6240203, ++ 0x81C, 0xE5260203, ++ 0x81C, 0xE4280203, ++ 0x81C, 0xE32A0203, ++ 0x81C, 0xE22C0203, ++ 0x81C, 0xE12E0203, ++ 0x81C, 0xA6300203, ++ 0x81C, 0xA5320203, ++ 0x81C, 0xA4340203, ++ 0x81C, 0xA3360203, ++ 0x81C, 0xA2380203, ++ 0x81C, 0xA13A0203, ++ 0x81C, 0x843C0203, ++ 0x81C, 0x833E0203, ++ 0x81C, 0x82400203, ++ 0x81C, 0x81420203, ++ 0x81C, 0x64440203, ++ 0x81C, 0x63460203, ++ 0x81C, 0x62480203, ++ 0x81C, 0x614A0203, ++ 0x81C, 0x444C0203, ++ 0x81C, 0x434E0203, ++ 0x81C, 0x42500203, ++ 0x81C, 0x41520203, ++ 0x81C, 0x25540203, ++ 0x81C, 0x24560203, ++ 0x81C, 0x23580203, ++ 0x81C, 0x065A0203, ++ 0x81C, 0x055C0203, ++ 0x81C, 0x045E0203, ++ 0x81C, 0x03600203, ++ 0x81C, 0x02620203, ++ 0x81C, 0x01640203, ++ 0x81C, 0x01660203, ++ 0x81C, 0x01680203, ++ 0x81C, 0x016A0203, ++ 0x81C, 0x016C0203, ++ 0x81C, 0x016E0203, ++ 0x81C, 0x01700203, ++ 0x81C, 0x01720203, ++ 0x81C, 0x01740203, ++ 0x81C, 0x01760203, ++ 0x81C, 0x01780203, ++ 0x81C, 0x017A0203, ++ 0x81C, 0x017C0203, ++ 0x81C, 0x017E0203, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xF9000203, ++ 0x81C, 0xF8020203, ++ 0x81C, 0xF7040203, ++ 0x81C, 0xF6060203, ++ 0x81C, 0xF5080203, ++ 0x81C, 0xF40A0203, ++ 0x81C, 0xF30C0203, ++ 0x81C, 0xF20E0203, ++ 0x81C, 0xF1100203, ++ 0x81C, 0xF0120203, ++ 0x81C, 0xEF140203, ++ 0x81C, 0xCE160203, ++ 0x81C, 0xCD180203, ++ 0x81C, 0xCC1A0203, ++ 0x81C, 0xCB1C0203, ++ 0x81C, 0xCA1E0203, ++ 0x81C, 0xC9200203, ++ 0x81C, 0xC8220203, ++ 0x81C, 0xC7240203, ++ 0x81C, 0xC6260203, ++ 0x81C, 0xC5280203, ++ 0x81C, 0xC42A0203, ++ 0x81C, 0xC32C0203, ++ 0x81C, 0xC22E0203, ++ 0x81C, 0xC1300203, ++ 0x81C, 0xA5320203, ++ 0x81C, 0xA4340203, ++ 0x81C, 0xA3360203, ++ 0x81C, 0xA2380203, ++ 0x81C, 0xA13A0203, ++ 0x81C, 0x853C0203, ++ 0x81C, 0x843E0203, ++ 0x81C, 0x83400203, ++ 0x81C, 0x82420203, ++ 0x81C, 0x81440203, ++ 0x81C, 0x64460203, ++ 0x81C, 0x63480203, ++ 0x81C, 0x624A0203, ++ 0x81C, 0x614C0203, ++ 0x81C, 0x444E0203, ++ 0x81C, 0x43500203, ++ 0x81C, 0x42520203, ++ 0x81C, 0x41540203, ++ 0x81C, 0x24560203, ++ 0x81C, 0x23580203, ++ 0x81C, 0x075A0203, ++ 0x81C, 0x065C0203, ++ 0x81C, 0x055E0203, ++ 0x81C, 0x04600203, ++ 0x81C, 0x03620203, ++ 0x81C, 0x02640203, ++ 0x81C, 0x01660203, ++ 0x81C, 0x01680203, ++ 0x81C, 0x016A0203, ++ 0x81C, 0x016C0203, ++ 0x81C, 0x016E0203, ++ 0x81C, 0x01700203, ++ 0x81C, 0x01720203, ++ 0x81C, 0x01740203, ++ 0x81C, 0x01760203, ++ 0x81C, 0x01780203, ++ 0x81C, 0x017A0203, ++ 0x81C, 0x017C0203, ++ 0x81C, 0x017E0203, ++ 0xA0000000, 0x00000000, ++ 0x81C, 0xFF000203, ++ 0x81C, 0xFF020203, ++ 0x81C, 0xFE040203, ++ 0x81C, 0xFD060203, ++ 0x81C, 0xFC080203, ++ 0x81C, 0xFB0A0203, ++ 0x81C, 0xFA0C0203, ++ 0x81C, 0xF90E0203, ++ 0x81C, 0xF8100203, ++ 0x81C, 0xF7120203, ++ 0x81C, 0xF6140203, ++ 0x81C, 0xF5160203, ++ 0x81C, 0xF4180203, ++ 0x81C, 0xF31A0203, ++ 0x81C, 0xF21C0203, ++ 0x81C, 0xF11E0203, ++ 0x81C, 0xF0200203, ++ 0x81C, 0xEF220203, ++ 0x81C, 0xEE240203, ++ 0x81C, 0xED260203, ++ 0x81C, 0xEC280203, ++ 0x81C, 0xEB2A0203, ++ 0x81C, 0xEA2C0203, ++ 0x81C, 0xE92E0203, ++ 0x81C, 0xE8300203, ++ 0x81C, 0xE7320203, ++ 0x81C, 0xE6340203, ++ 0x81C, 0xE5360203, ++ 0x81C, 0xE4380203, ++ 0x81C, 0xE33A0203, ++ 0x81C, 0xE23C0203, ++ 0x81C, 0xE13E0203, ++ 0x81C, 0xA4400203, ++ 0x81C, 0xA3420203, ++ 0x81C, 0xA2440203, ++ 0x81C, 0xA1460203, ++ 0x81C, 0x85480203, ++ 0x81C, 0x844A0203, ++ 0x81C, 0x834C0203, ++ 0x81C, 0x824E0203, ++ 0x81C, 0x81500203, ++ 0x81C, 0x64520203, ++ 0x81C, 0x63540203, ++ 0x81C, 0x62560203, ++ 0x81C, 0x61580203, ++ 0x81C, 0x445A0203, ++ 0x81C, 0x435C0203, ++ 0x81C, 0x425E0203, ++ 0x81C, 0x25600203, ++ 0x81C, 0x24620203, ++ 0x81C, 0x06640203, ++ 0x81C, 0x05660203, ++ 0x81C, 0x04680203, ++ 0x81C, 0x036A0203, ++ 0x81C, 0x026C0203, ++ 0x81C, 0x016E0203, ++ 0x81C, 0x01700203, ++ 0x81C, 0x01720203, ++ 0x81C, 0x01740203, ++ 0x81C, 0x01760203, ++ 0x81C, 0x01780203, ++ 0x81C, 0x017A0203, ++ 0x81C, 0x017C0203, ++ 0x81C, 0x017E0203, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xF8000303, ++ 0x81C, 0xF7020303, ++ 0x81C, 0xF6040303, ++ 0x81C, 0xF5060303, ++ 0x81C, 0xF4080303, ++ 0x81C, 0xF30A0303, ++ 0x81C, 0xF20C0303, ++ 0x81C, 0xF10E0303, ++ 0x81C, 0xF0100303, ++ 0x81C, 0xEF120303, ++ 0x81C, 0xEE140303, ++ 0x81C, 0xED160303, ++ 0x81C, 0xEC180303, ++ 0x81C, 0xEB1A0303, ++ 0x81C, 0xEA1C0303, ++ 0x81C, 0xE91E0303, ++ 0x81C, 0xE8200303, ++ 0x81C, 0xE7220303, ++ 0x81C, 0xE6240303, ++ 0x81C, 0xE5260303, ++ 0x81C, 0xE4280303, ++ 0x81C, 0xE32A0303, ++ 0x81C, 0xE22C0303, ++ 0x81C, 0xE12E0303, ++ 0x81C, 0xA6300303, ++ 0x81C, 0xA5320303, ++ 0x81C, 0xA4340303, ++ 0x81C, 0xA3360303, ++ 0x81C, 0xA2380303, ++ 0x81C, 0xA13A0303, ++ 0x81C, 0x843C0303, ++ 0x81C, 0x833E0303, ++ 0x81C, 0x82400303, ++ 0x81C, 0x81420303, ++ 0x81C, 0x64440303, ++ 0x81C, 0x63460303, ++ 0x81C, 0x62480303, ++ 0x81C, 0x614A0303, ++ 0x81C, 0x454C0303, ++ 0x81C, 0x444E0303, ++ 0x81C, 0x43500303, ++ 0x81C, 0x42520303, ++ 0x81C, 0x41540303, ++ 0x81C, 0x24560303, ++ 0x81C, 0x23580303, ++ 0x81C, 0x065A0303, ++ 0x81C, 0x055C0303, ++ 0x81C, 0x045E0303, ++ 0x81C, 0x03600303, ++ 0x81C, 0x02620303, ++ 0x81C, 0x01640303, ++ 0x81C, 0x01660303, ++ 0x81C, 0x01680303, ++ 0x81C, 0x016A0303, ++ 0x81C, 0x016C0303, ++ 0x81C, 0x016E0303, ++ 0x81C, 0x01700303, ++ 0x81C, 0x01720303, ++ 0x81C, 0x01740303, ++ 0x81C, 0x01760303, ++ 0x81C, 0x01780303, ++ 0x81C, 0x017A0303, ++ 0x81C, 0x017C0303, ++ 0x81C, 0x017E0303, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xF7000303, ++ 0x81C, 0xF6020303, ++ 0x81C, 0xF5040303, ++ 0x81C, 0xF4060303, ++ 0x81C, 0xF3080303, ++ 0x81C, 0xF20A0303, ++ 0x81C, 0xF10C0303, ++ 0x81C, 0xF00E0303, ++ 0x81C, 0xEF100303, ++ 0x81C, 0xEE120303, ++ 0x81C, 0xED140303, ++ 0x81C, 0xEC160303, ++ 0x81C, 0xEB180303, ++ 0x81C, 0xEA1A0303, ++ 0x81C, 0xE91C0303, ++ 0x81C, 0xE81E0303, ++ 0x81C, 0xE7200303, ++ 0x81C, 0xE6220303, ++ 0x81C, 0xE5240303, ++ 0x81C, 0xE4260303, ++ 0x81C, 0xE3280303, ++ 0x81C, 0xC32A0303, ++ 0x81C, 0xC22C0303, ++ 0x81C, 0xC12E0303, ++ 0x81C, 0xA5300303, ++ 0x81C, 0xA4320303, ++ 0x81C, 0xA3340303, ++ 0x81C, 0xA2360303, ++ 0x81C, 0xA1380303, ++ 0x81C, 0x853A0303, ++ 0x81C, 0x843C0303, ++ 0x81C, 0x833E0303, ++ 0x81C, 0x82400303, ++ 0x81C, 0x81420303, ++ 0x81C, 0x64440303, ++ 0x81C, 0x63460303, ++ 0x81C, 0x62480303, ++ 0x81C, 0x614A0303, ++ 0x81C, 0x454C0303, ++ 0x81C, 0x444E0303, ++ 0x81C, 0x43500303, ++ 0x81C, 0x25520303, ++ 0x81C, 0x24540303, ++ 0x81C, 0x23560303, ++ 0x81C, 0x06580303, ++ 0x81C, 0x055A0303, ++ 0x81C, 0x045C0303, ++ 0x81C, 0x035E0303, ++ 0x81C, 0x02600303, ++ 0x81C, 0x01620303, ++ 0x81C, 0x01640303, ++ 0x81C, 0x01660303, ++ 0x81C, 0x01680303, ++ 0x81C, 0x016A0303, ++ 0x81C, 0x016C0303, ++ 0x81C, 0x016E0303, ++ 0x81C, 0x01700303, ++ 0x81C, 0x01720303, ++ 0x81C, 0x01740303, ++ 0x81C, 0x01760303, ++ 0x81C, 0x01780303, ++ 0x81C, 0x017A0303, ++ 0x81C, 0x017C0303, ++ 0x81C, 0x017E0303, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xF9000303, ++ 0x81C, 0xF8020303, ++ 0x81C, 0xF7040303, ++ 0x81C, 0xF6060303, ++ 0x81C, 0xF5080303, ++ 0x81C, 0xF40A0303, ++ 0x81C, 0xF30C0303, ++ 0x81C, 0xF20E0303, ++ 0x81C, 0xF1100303, ++ 0x81C, 0xF0120303, ++ 0x81C, 0xEF140303, ++ 0x81C, 0xEE160303, ++ 0x81C, 0xED180303, ++ 0x81C, 0xEC1A0303, ++ 0x81C, 0xEB1C0303, ++ 0x81C, 0xEA1E0303, ++ 0x81C, 0xE9200303, ++ 0x81C, 0xE8220303, ++ 0x81C, 0xE7240303, ++ 0x81C, 0xE6260303, ++ 0x81C, 0xE5280303, ++ 0x81C, 0xE42A0303, ++ 0x81C, 0xE32C0303, ++ 0x81C, 0xE22E0303, ++ 0x81C, 0xE1300303, ++ 0x81C, 0xA4320303, ++ 0x81C, 0xA3340303, ++ 0x81C, 0xA2360303, ++ 0x81C, 0xA1380303, ++ 0x81C, 0x853A0303, ++ 0x81C, 0x843C0303, ++ 0x81C, 0x833E0303, ++ 0x81C, 0x82400303, ++ 0x81C, 0x81420303, ++ 0x81C, 0x64440303, ++ 0x81C, 0x63460303, ++ 0x81C, 0x62480303, ++ 0x81C, 0x614A0303, ++ 0x81C, 0x444C0303, ++ 0x81C, 0x434E0303, ++ 0x81C, 0x42500303, ++ 0x81C, 0x25520303, ++ 0x81C, 0x24540303, ++ 0x81C, 0x23560303, ++ 0x81C, 0x07580303, ++ 0x81C, 0x065A0303, ++ 0x81C, 0x055C0303, ++ 0x81C, 0x045E0303, ++ 0x81C, 0x03600303, ++ 0x81C, 0x02620303, ++ 0x81C, 0x01640303, ++ 0x81C, 0x01660303, ++ 0x81C, 0x01680303, ++ 0x81C, 0x016A0303, ++ 0x81C, 0x016C0303, ++ 0x81C, 0x016E0303, ++ 0x81C, 0x01700303, ++ 0x81C, 0x01720303, ++ 0x81C, 0x01740303, ++ 0x81C, 0x01760303, ++ 0x81C, 0x01780303, ++ 0x81C, 0x017A0303, ++ 0x81C, 0x017C0303, ++ 0x81C, 0x017E0303, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xF7000303, ++ 0x81C, 0xF6020303, ++ 0x81C, 0xF5040303, ++ 0x81C, 0xF4060303, ++ 0x81C, 0xF3080303, ++ 0x81C, 0xF20A0303, ++ 0x81C, 0xF10C0303, ++ 0x81C, 0xF00E0303, ++ 0x81C, 0xEF100303, ++ 0x81C, 0xEE120303, ++ 0x81C, 0xED140303, ++ 0x81C, 0xEC160303, ++ 0x81C, 0xEB180303, ++ 0x81C, 0xEA1A0303, ++ 0x81C, 0xE91C0303, ++ 0x81C, 0xE81E0303, ++ 0x81C, 0xE7200303, ++ 0x81C, 0xE6220303, ++ 0x81C, 0xE5240303, ++ 0x81C, 0xE4260303, ++ 0x81C, 0xE3280303, ++ 0x81C, 0xE22A0303, ++ 0x81C, 0xE12C0303, ++ 0x81C, 0xA72E0303, ++ 0x81C, 0xA6300303, ++ 0x81C, 0xA5320303, ++ 0x81C, 0xA4340303, ++ 0x81C, 0xA3360303, ++ 0x81C, 0xA2380303, ++ 0x81C, 0xA13A0303, ++ 0x81C, 0x843C0303, ++ 0x81C, 0x833E0303, ++ 0x81C, 0x82400303, ++ 0x81C, 0x81420303, ++ 0x81C, 0x64440303, ++ 0x81C, 0x63460303, ++ 0x81C, 0x62480303, ++ 0x81C, 0x614A0303, ++ 0x81C, 0x454C0303, ++ 0x81C, 0x444E0303, ++ 0x81C, 0x43500303, ++ 0x81C, 0x42520303, ++ 0x81C, 0x41540303, ++ 0x81C, 0x24560303, ++ 0x81C, 0x23580303, ++ 0x81C, 0x065A0303, ++ 0x81C, 0x055C0303, ++ 0x81C, 0x045E0303, ++ 0x81C, 0x03600303, ++ 0x81C, 0x02620303, ++ 0x81C, 0x01640303, ++ 0x81C, 0x01660303, ++ 0x81C, 0x01680303, ++ 0x81C, 0x016A0303, ++ 0x81C, 0x016C0303, ++ 0x81C, 0x016E0303, ++ 0x81C, 0x01700303, ++ 0x81C, 0x01720303, ++ 0x81C, 0x01740303, ++ 0x81C, 0x01760303, ++ 0x81C, 0x01780303, ++ 0x81C, 0x017A0303, ++ 0x81C, 0x017C0303, ++ 0x81C, 0x017E0303, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xFB000303, ++ 0x81C, 0xFA020303, ++ 0x81C, 0xF9040303, ++ 0x81C, 0xF8060303, ++ 0x81C, 0xF7080303, ++ 0x81C, 0xF60A0303, ++ 0x81C, 0xF50C0303, ++ 0x81C, 0xF40E0303, ++ 0x81C, 0xF3100303, ++ 0x81C, 0xF2120303, ++ 0x81C, 0xF1140303, ++ 0x81C, 0xF0160303, ++ 0x81C, 0xEF180303, ++ 0x81C, 0xEE1A0303, ++ 0x81C, 0xED1C0303, ++ 0x81C, 0xEC1E0303, ++ 0x81C, 0xEB200303, ++ 0x81C, 0xEA220303, ++ 0x81C, 0xE9240303, ++ 0x81C, 0xE8260303, ++ 0x81C, 0xE7280303, ++ 0x81C, 0xE62A0303, ++ 0x81C, 0xE52C0303, ++ 0x81C, 0xE42E0303, ++ 0x81C, 0xE3300303, ++ 0x81C, 0xE2320303, ++ 0x81C, 0xE1340303, ++ 0x81C, 0xC2360303, ++ 0x81C, 0xC1380303, ++ 0x81C, 0xA33A0303, ++ 0x81C, 0xA23C0303, ++ 0x81C, 0x853E0303, ++ 0x81C, 0x84400303, ++ 0x81C, 0x83420303, ++ 0x81C, 0x66440303, ++ 0x81C, 0x65460303, ++ 0x81C, 0x64480303, ++ 0x81C, 0x634A0303, ++ 0x81C, 0x624C0303, ++ 0x81C, 0x614E0303, ++ 0x81C, 0x45500303, ++ 0x81C, 0x44520303, ++ 0x81C, 0x43540303, ++ 0x81C, 0x42560303, ++ 0x81C, 0x25580303, ++ 0x81C, 0x245A0303, ++ 0x81C, 0x235C0303, ++ 0x81C, 0x065E0303, ++ 0x81C, 0x05600303, ++ 0x81C, 0x04620303, ++ 0x81C, 0x03640303, ++ 0x81C, 0x02660303, ++ 0x81C, 0x01680303, ++ 0x81C, 0x016A0303, ++ 0x81C, 0x016C0303, ++ 0x81C, 0x016E0303, ++ 0x81C, 0x01700303, ++ 0x81C, 0x01720303, ++ 0x81C, 0x01740303, ++ 0x81C, 0x01760303, ++ 0x81C, 0x01780303, ++ 0x81C, 0x017A0303, ++ 0x81C, 0x017C0303, ++ 0x81C, 0x017E0303, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xF9000303, ++ 0x81C, 0xF8020303, ++ 0x81C, 0xF7040303, ++ 0x81C, 0xF6060303, ++ 0x81C, 0xF5080303, ++ 0x81C, 0xF40A0303, ++ 0x81C, 0xF30C0303, ++ 0x81C, 0xF20E0303, ++ 0x81C, 0xF1100303, ++ 0x81C, 0xF0120303, ++ 0x81C, 0xEF140303, ++ 0x81C, 0xEE160303, ++ 0x81C, 0xED180303, ++ 0x81C, 0xEC1A0303, ++ 0x81C, 0xEB1C0303, ++ 0x81C, 0xEA1E0303, ++ 0x81C, 0xE9200303, ++ 0x81C, 0xE8220303, ++ 0x81C, 0xE7240303, ++ 0x81C, 0xE6260303, ++ 0x81C, 0xE5280303, ++ 0x81C, 0xE42A0303, ++ 0x81C, 0xE32C0303, ++ 0x81C, 0xE22E0303, ++ 0x81C, 0xE1300303, ++ 0x81C, 0xA6320303, ++ 0x81C, 0xA5340303, ++ 0x81C, 0xA4360303, ++ 0x81C, 0xA3380303, ++ 0x81C, 0xA23A0303, ++ 0x81C, 0xA13C0303, ++ 0x81C, 0x853E0303, ++ 0x81C, 0x84400303, ++ 0x81C, 0x83420303, ++ 0x81C, 0x82440303, ++ 0x81C, 0x81460303, ++ 0x81C, 0x64480303, ++ 0x81C, 0x634A0303, ++ 0x81C, 0x624C0303, ++ 0x81C, 0x614E0303, ++ 0x81C, 0x44500303, ++ 0x81C, 0x43520303, ++ 0x81C, 0x42540303, ++ 0x81C, 0x41560303, ++ 0x81C, 0x25580303, ++ 0x81C, 0x245A0303, ++ 0x81C, 0x235C0303, ++ 0x81C, 0x055E0303, ++ 0x81C, 0x04600303, ++ 0x81C, 0x03620303, ++ 0x81C, 0x02640303, ++ 0x81C, 0x01660303, ++ 0x81C, 0x01680303, ++ 0x81C, 0x016A0303, ++ 0x81C, 0x016C0303, ++ 0x81C, 0x016E0303, ++ 0x81C, 0x01700303, ++ 0x81C, 0x01720303, ++ 0x81C, 0x01740303, ++ 0x81C, 0x01760303, ++ 0x81C, 0x01780303, ++ 0x81C, 0x017A0303, ++ 0x81C, 0x017C0303, ++ 0x81C, 0x017E0303, ++ 0x90000007, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xFE000303, ++ 0x81C, 0xFD020303, ++ 0x81C, 0xFC040303, ++ 0x81C, 0xFB060303, ++ 0x81C, 0xFA080303, ++ 0x81C, 0xF90A0303, ++ 0x81C, 0xF80C0303, ++ 0x81C, 0xF70E0303, ++ 0x81C, 0xF6100303, ++ 0x81C, 0xF5120303, ++ 0x81C, 0xF4140303, ++ 0x81C, 0xF3160303, ++ 0x81C, 0xF2180303, ++ 0x81C, 0xF11A0303, ++ 0x81C, 0xF01C0303, ++ 0x81C, 0xEF1E0303, ++ 0x81C, 0xEE200303, ++ 0x81C, 0xED220303, ++ 0x81C, 0xEC240303, ++ 0x81C, 0xEB260303, ++ 0x81C, 0xEA280303, ++ 0x81C, 0xE92A0303, ++ 0x81C, 0xE82C0303, ++ 0x81C, 0xE72E0303, ++ 0x81C, 0xE6300303, ++ 0x81C, 0xE5320303, ++ 0x81C, 0xE4340303, ++ 0x81C, 0xE3360303, ++ 0x81C, 0xC3380303, ++ 0x81C, 0xC23A0303, ++ 0x81C, 0xC13C0303, ++ 0x81C, 0xA43E0303, ++ 0x81C, 0xA3400303, ++ 0x81C, 0xA2420303, ++ 0x81C, 0xA1440303, ++ 0x81C, 0x85460303, ++ 0x81C, 0x84480303, ++ 0x81C, 0x834A0303, ++ 0x81C, 0x824C0303, ++ 0x81C, 0x814E0303, ++ 0x81C, 0x64500303, ++ 0x81C, 0x63520303, ++ 0x81C, 0x62540303, ++ 0x81C, 0x61560303, ++ 0x81C, 0x44580303, ++ 0x81C, 0x435A0303, ++ 0x81C, 0x425C0303, ++ 0x81C, 0x265E0303, ++ 0x81C, 0x25600303, ++ 0x81C, 0x24620303, ++ 0x81C, 0x06640303, ++ 0x81C, 0x05660303, ++ 0x81C, 0x04680303, ++ 0x81C, 0x036A0303, ++ 0x81C, 0x026C0303, ++ 0x81C, 0x016E0303, ++ 0x81C, 0x01700303, ++ 0x81C, 0x01720303, ++ 0x81C, 0x01740303, ++ 0x81C, 0x01760303, ++ 0x81C, 0x01780303, ++ 0x81C, 0x017A0303, ++ 0x81C, 0x017C0303, ++ 0x81C, 0x017E0303, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xF7000303, ++ 0x81C, 0xF6020303, ++ 0x81C, 0xF5040303, ++ 0x81C, 0xF4060303, ++ 0x81C, 0xF3080303, ++ 0x81C, 0xF20A0303, ++ 0x81C, 0xF10C0303, ++ 0x81C, 0xF00E0303, ++ 0x81C, 0xEF100303, ++ 0x81C, 0xEE120303, ++ 0x81C, 0xED140303, ++ 0x81C, 0xEC160303, ++ 0x81C, 0xEB180303, ++ 0x81C, 0xEA1A0303, ++ 0x81C, 0xE91C0303, ++ 0x81C, 0xE81E0303, ++ 0x81C, 0xE7200303, ++ 0x81C, 0xE6220303, ++ 0x81C, 0xE5240303, ++ 0x81C, 0xE4260303, ++ 0x81C, 0xE3280303, ++ 0x81C, 0xE22A0303, ++ 0x81C, 0xA62C0303, ++ 0x81C, 0xA52E0303, ++ 0x81C, 0xA4300303, ++ 0x81C, 0xA3320303, ++ 0x81C, 0xA2340303, ++ 0x81C, 0x87360303, ++ 0x81C, 0x86380303, ++ 0x81C, 0x853A0303, ++ 0x81C, 0x843C0303, ++ 0x81C, 0x833E0303, ++ 0x81C, 0x66400303, ++ 0x81C, 0x65420303, ++ 0x81C, 0x64440303, ++ 0x81C, 0x45460303, ++ 0x81C, 0x44480303, ++ 0x81C, 0x434A0303, ++ 0x81C, 0x274C0303, ++ 0x81C, 0x264E0303, ++ 0x81C, 0x25500303, ++ 0x81C, 0x24520303, ++ 0x81C, 0x23540303, ++ 0x81C, 0x08560303, ++ 0x81C, 0x07580303, ++ 0x81C, 0x065A0303, ++ 0x81C, 0x055C0303, ++ 0x81C, 0x045E0303, ++ 0x81C, 0x03600303, ++ 0x81C, 0x02620303, ++ 0x81C, 0x01640303, ++ 0x81C, 0x01660303, ++ 0x81C, 0x01680303, ++ 0x81C, 0x016A0303, ++ 0x81C, 0x016C0303, ++ 0x81C, 0x016E0303, ++ 0x81C, 0x01700303, ++ 0x81C, 0x01720303, ++ 0x81C, 0x01740303, ++ 0x81C, 0x01760303, ++ 0x81C, 0x01780303, ++ 0x81C, 0x017A0303, ++ 0x81C, 0x017C0303, ++ 0x81C, 0x017E0303, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xFE000303, ++ 0x81C, 0xFD020303, ++ 0x81C, 0xFC040303, ++ 0x81C, 0xFB060303, ++ 0x81C, 0xFA080303, ++ 0x81C, 0xF90A0303, ++ 0x81C, 0xF80C0303, ++ 0x81C, 0xF70E0303, ++ 0x81C, 0xF6100303, ++ 0x81C, 0xF5120303, ++ 0x81C, 0xF4140303, ++ 0x81C, 0xF3160303, ++ 0x81C, 0xF2180303, ++ 0x81C, 0xF11A0303, ++ 0x81C, 0xF01C0303, ++ 0x81C, 0xEF1E0303, ++ 0x81C, 0xEE200303, ++ 0x81C, 0xED220303, ++ 0x81C, 0xEC240303, ++ 0x81C, 0xEB260303, ++ 0x81C, 0xEA280303, ++ 0x81C, 0xE92A0303, ++ 0x81C, 0xE82C0303, ++ 0x81C, 0xE72E0303, ++ 0x81C, 0xE6300303, ++ 0x81C, 0xE5320303, ++ 0x81C, 0xE4340303, ++ 0x81C, 0xE3360303, ++ 0x81C, 0xC3380303, ++ 0x81C, 0xC23A0303, ++ 0x81C, 0xC13C0303, ++ 0x81C, 0xA43E0303, ++ 0x81C, 0xA3400303, ++ 0x81C, 0xA2420303, ++ 0x81C, 0xA1440303, ++ 0x81C, 0x85460303, ++ 0x81C, 0x84480303, ++ 0x81C, 0x834A0303, ++ 0x81C, 0x824C0303, ++ 0x81C, 0x814E0303, ++ 0x81C, 0x64500303, ++ 0x81C, 0x63520303, ++ 0x81C, 0x62540303, ++ 0x81C, 0x61560303, ++ 0x81C, 0x44580303, ++ 0x81C, 0x435A0303, ++ 0x81C, 0x425C0303, ++ 0x81C, 0x265E0303, ++ 0x81C, 0x25600303, ++ 0x81C, 0x24620303, ++ 0x81C, 0x06640303, ++ 0x81C, 0x05660303, ++ 0x81C, 0x04680303, ++ 0x81C, 0x036A0303, ++ 0x81C, 0x026C0303, ++ 0x81C, 0x016E0303, ++ 0x81C, 0x01700303, ++ 0x81C, 0x01720303, ++ 0x81C, 0x01740303, ++ 0x81C, 0x01760303, ++ 0x81C, 0x01780303, ++ 0x81C, 0x017A0303, ++ 0x81C, 0x017C0303, ++ 0x81C, 0x017E0303, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xF7000303, ++ 0x81C, 0xF6020303, ++ 0x81C, 0xF5040303, ++ 0x81C, 0xF4060303, ++ 0x81C, 0xF3080303, ++ 0x81C, 0xF20A0303, ++ 0x81C, 0xF10C0303, ++ 0x81C, 0xF00E0303, ++ 0x81C, 0xEF100303, ++ 0x81C, 0xEE120303, ++ 0x81C, 0xED140303, ++ 0x81C, 0xEC160303, ++ 0x81C, 0xEB180303, ++ 0x81C, 0xEA1A0303, ++ 0x81C, 0xE91C0303, ++ 0x81C, 0xE81E0303, ++ 0x81C, 0xE7200303, ++ 0x81C, 0xE6220303, ++ 0x81C, 0xE5240303, ++ 0x81C, 0xE4260303, ++ 0x81C, 0xE3280303, ++ 0x81C, 0xE22A0303, ++ 0x81C, 0xE12C0303, ++ 0x81C, 0xA72E0303, ++ 0x81C, 0xA6300303, ++ 0x81C, 0xA5320303, ++ 0x81C, 0xA4340303, ++ 0x81C, 0xA3360303, ++ 0x81C, 0xA2380303, ++ 0x81C, 0xA13A0303, ++ 0x81C, 0x843C0303, ++ 0x81C, 0x833E0303, ++ 0x81C, 0x82400303, ++ 0x81C, 0x81420303, ++ 0x81C, 0x64440303, ++ 0x81C, 0x63460303, ++ 0x81C, 0x62480303, ++ 0x81C, 0x614A0303, ++ 0x81C, 0x454C0303, ++ 0x81C, 0x444E0303, ++ 0x81C, 0x43500303, ++ 0x81C, 0x42520303, ++ 0x81C, 0x41540303, ++ 0x81C, 0x24560303, ++ 0x81C, 0x23580303, ++ 0x81C, 0x065A0303, ++ 0x81C, 0x055C0303, ++ 0x81C, 0x045E0303, ++ 0x81C, 0x03600303, ++ 0x81C, 0x02620303, ++ 0x81C, 0x01640303, ++ 0x81C, 0x01660303, ++ 0x81C, 0x01680303, ++ 0x81C, 0x016A0303, ++ 0x81C, 0x016C0303, ++ 0x81C, 0x016E0303, ++ 0x81C, 0x01700303, ++ 0x81C, 0x01720303, ++ 0x81C, 0x01740303, ++ 0x81C, 0x01760303, ++ 0x81C, 0x01780303, ++ 0x81C, 0x017A0303, ++ 0x81C, 0x017C0303, ++ 0x81C, 0x017E0303, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x81C, 0xF7000303, ++ 0x81C, 0xF6020303, ++ 0x81C, 0xF5040303, ++ 0x81C, 0xF4060303, ++ 0x81C, 0xF3080303, ++ 0x81C, 0xF20A0303, ++ 0x81C, 0xF10C0303, ++ 0x81C, 0xF00E0303, ++ 0x81C, 0xEF100303, ++ 0x81C, 0xEE120303, ++ 0x81C, 0xED140303, ++ 0x81C, 0xEC160303, ++ 0x81C, 0xEB180303, ++ 0x81C, 0xEA1A0303, ++ 0x81C, 0xAF1C0303, ++ 0x81C, 0xAE1E0303, ++ 0x81C, 0xAD200303, ++ 0x81C, 0xAC220303, ++ 0x81C, 0xAB240303, ++ 0x81C, 0xAA260303, ++ 0x81C, 0xC5280303, ++ 0x81C, 0xC42A0303, ++ 0x81C, 0xC32C0303, ++ 0x81C, 0xC22E0303, ++ 0x81C, 0xA5300303, ++ 0x81C, 0xA4320303, ++ 0x81C, 0xA3340303, ++ 0x81C, 0xA2360303, ++ 0x81C, 0xA1380303, ++ 0x81C, 0x853A0303, ++ 0x81C, 0x843C0303, ++ 0x81C, 0x833E0303, ++ 0x81C, 0x82400303, ++ 0x81C, 0x81420303, ++ 0x81C, 0x64440303, ++ 0x81C, 0x63460303, ++ 0x81C, 0x62480303, ++ 0x81C, 0x614A0303, ++ 0x81C, 0x444C0303, ++ 0x81C, 0x434E0303, ++ 0x81C, 0x42500303, ++ 0x81C, 0x41520303, ++ 0x81C, 0x25540303, ++ 0x81C, 0x24560303, ++ 0x81C, 0x06580303, ++ 0x81C, 0x055A0303, ++ 0x81C, 0x045C0303, ++ 0x81C, 0x035E0303, ++ 0x81C, 0x02600303, ++ 0x81C, 0x01620303, ++ 0x81C, 0x01640303, ++ 0x81C, 0x01660303, ++ 0x81C, 0x01680303, ++ 0x81C, 0x016A0303, ++ 0x81C, 0x016C0303, ++ 0x81C, 0x016E0303, ++ 0x81C, 0x01700303, ++ 0x81C, 0x01720303, ++ 0x81C, 0x01740303, ++ 0x81C, 0x01760303, ++ 0x81C, 0x01780303, ++ 0x81C, 0x017A0303, ++ 0x81C, 0x017C0303, ++ 0x81C, 0x017E0303, ++ 0xA0000000, 0x00000000, ++ 0x81C, 0xFD000303, ++ 0x81C, 0xFC020303, ++ 0x81C, 0xFB040303, ++ 0x81C, 0xFA060303, ++ 0x81C, 0xF9080303, ++ 0x81C, 0xF80A0303, ++ 0x81C, 0xF70C0303, ++ 0x81C, 0xF60E0303, ++ 0x81C, 0xF5100303, ++ 0x81C, 0xF4120303, ++ 0x81C, 0xF3140303, ++ 0x81C, 0xF2160303, ++ 0x81C, 0xF1180303, ++ 0x81C, 0xF01A0303, ++ 0x81C, 0xEF1C0303, ++ 0x81C, 0xEE1E0303, ++ 0x81C, 0xED200303, ++ 0x81C, 0xEC220303, ++ 0x81C, 0xEB240303, ++ 0x81C, 0xEA260303, ++ 0x81C, 0xE9280303, ++ 0x81C, 0xE82A0303, ++ 0x81C, 0xE72C0303, ++ 0x81C, 0xE62E0303, ++ 0x81C, 0xE5300303, ++ 0x81C, 0xE4320303, ++ 0x81C, 0xE3340303, ++ 0x81C, 0xE2360303, ++ 0x81C, 0xE1380303, ++ 0x81C, 0xA53A0303, ++ 0x81C, 0xA43C0303, ++ 0x81C, 0xA33E0303, ++ 0x81C, 0xA2400303, ++ 0x81C, 0xA1420303, ++ 0x81C, 0x87440303, ++ 0x81C, 0x86460303, ++ 0x81C, 0x85480303, ++ 0x81C, 0x844A0303, ++ 0x81C, 0x834C0303, ++ 0x81C, 0x824E0303, ++ 0x81C, 0x81500303, ++ 0x81C, 0x64520303, ++ 0x81C, 0x63540303, ++ 0x81C, 0x62560303, ++ 0x81C, 0x61580303, ++ 0x81C, 0x435A0303, ++ 0x81C, 0x425C0303, ++ 0x81C, 0x415E0303, ++ 0x81C, 0x07600303, ++ 0x81C, 0x06620303, ++ 0x81C, 0x05640303, ++ 0x81C, 0x04660303, ++ 0x81C, 0x03680303, ++ 0x81C, 0x026A0303, ++ 0x81C, 0x016C0303, ++ 0x81C, 0x016E0303, ++ 0x81C, 0x01700303, ++ 0x81C, 0x01720303, ++ 0x81C, 0x01740303, ++ 0x81C, 0x01760303, ++ 0x81C, 0x01780303, ++ 0x81C, 0x017A0303, ++ 0x81C, 0x017C0303, ++ 0x81C, 0x017E0303, ++ 0xB0000000, 0x00000000, ++ 0xC50, 0x00000022, ++ 0xC50, 0x00000020, ++ 0xE50, 0x00000022, ++ 0xE50, 0x00000020, ++ 0x1850, 0x00000022, ++ 0x1850, 0x00000020, ++ 0x1A50, 0x00000022, ++ 0x1A50, 0x00000020, ++}; ++ ++RTW_DECL_TABLE_PHY_COND(rtw8814a_agc, rtw_phy_cfg_agc); ++ ++static const u32 rtw8814a_bb[] = { ++ 0x800, 0x9020D010, ++ 0x804, 0x08011280, ++ 0x808, 0x0E0282FF, ++ 0x80C, 0x1000002F, ++ 0x80000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x810, 0x33303265, ++ 0xA0000000, 0x00000000, ++ 0x810, 0x33303265, ++ 0xB0000000, 0x00000000, ++ 0x814, 0x020C3D10, ++ 0x818, 0x04A10385, ++ 0x820, 0x00000000, ++ 0x824, 0x00033E40, ++ 0x828, 0x00000000, ++ 0x82C, 0x73985170, ++ 0x830, 0x79A0EA08, ++ 0x834, 0x042E708A, ++ 0x80000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x838, 0x86667640, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x838, 0x86667641, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x838, 0x86667641, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x838, 0x86667641, ++ 0xA0000000, 0x00000000, ++ 0x838, 0x86667640, ++ 0xB0000000, 0x00000000, ++ 0x83C, 0x9798B9B9, ++ 0x840, 0x17578F60, ++ 0x844, 0x4BBDFCDE, ++ 0x848, 0x5CD07F8B, ++ 0x84C, 0x6CFBF7B5, ++ 0x850, 0x28834706, ++ 0x854, 0x0001520C, ++ 0x858, 0x4060C000, ++ 0x85C, 0x74210368, ++ 0x860, 0x6929C321, ++ 0x864, 0x79727432, ++ 0x868, 0x8CA7A314, ++ 0x86C, 0x438C2878, ++ 0x870, 0x44444444, ++ 0x874, 0x21612C2E, ++ 0x878, 0x00003152, ++ 0x87C, 0x000FC000, ++ 0x8A0, 0x00000013, ++ 0x8A4, 0x7F7F7F7F, ++ 0x8A8, 0xA202033E, ++ 0x8AC, 0xF40F550A, ++ 0x8B0, 0x00000600, ++ 0x8B4, 0x000FC080, ++ 0x8B8, 0xEC0057FF, ++ 0x8BC, 0x8CA520C3, ++ 0x8C0, 0x3FF00020, ++ 0x8C4, 0x44C00000, ++ 0x80000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x8C8, 0x80025969, ++ 0xA0000000, 0x00000000, ++ 0x8C8, 0x80025167, ++ 0xB0000000, 0x00000000, ++ 0x8CC, 0x08250492, ++ 0x8D0, 0x0000B800, ++ 0x8D4, 0x940008A0, ++ 0x8D8, 0x290B5612, ++ 0x8DC, 0x00000000, ++ 0x8E0, 0x32316407, ++ 0x8E4, 0x4A092925, ++ 0x8E8, 0xFFFFC42C, ++ 0x8EC, 0x99999999, ++ 0x8F0, 0x00009999, ++ 0x8F4, 0x00F80FA1, ++ 0x8F8, 0x400082C0, ++ 0x8FC, 0x00000000, ++ 0x900, 0x00400700, ++ 0x90C, 0x09004000, ++ 0x910, 0x0000FC00, ++ 0x914, 0xD6400404, ++ 0x918, 0x1C1028C0, ++ 0x91C, 0x64B11A1C, ++ 0x920, 0xE0767233, ++ 0x924, 0x055AA500, ++ 0x928, 0x4AB0E4E4, ++ 0x92C, 0xFFFE0000, ++ 0x930, 0xFFFFFFFE, ++ 0x934, 0x001FFFFF, ++ 0x938, 0x00008400, ++ 0x93C, 0x932C0642, ++ 0x940, 0x093E9360, ++ 0x944, 0x08000000, ++ 0x948, 0x04000000, ++ 0x950, 0x02010080, ++ 0x954, 0x86510080, ++ 0x960, 0x00000000, ++ 0x964, 0x00000000, ++ 0x968, 0x00000000, ++ 0x96C, 0x00000000, ++ 0x970, 0x801FFFFF, ++ 0x978, 0x00000000, ++ 0x97C, 0x00000000, ++ 0x980, 0x00000000, ++ 0x984, 0x00000000, ++ 0x988, 0x00000000, ++ 0x98C, 0x03440000, ++ 0x990, 0x27100000, ++ 0x994, 0xFFFF0100, ++ 0x998, 0xFFFFFF5C, ++ 0x99C, 0xFFFFFFFF, ++ 0x9A0, 0x000000FF, ++ 0x9A4, 0x00080080, ++ 0x9A8, 0x0C2F0000, ++ 0x9AC, 0x00560000, ++ 0x9B0, 0x81081008, ++ 0x9B4, 0x00000000, ++ 0x9B8, 0x01081008, ++ 0x9BC, 0x01081008, ++ 0x9D0, 0x00000000, ++ 0x9D4, 0x00000000, ++ 0x9D8, 0x00000000, ++ 0x9DC, 0x00000000, ++ 0x9E4, 0x00000002, ++ 0x9E8, 0x000022D5, ++ 0x9FC, 0xEFFFF7FF, ++ 0xB00, 0xE3100000, ++ 0xB04, 0x0000B000, ++ 0xB0C, 0x31EAA006, ++ 0xB5C, 0x41CFFFFF, ++ 0xC00, 0x00000007, ++ 0xC04, 0x00042020, ++ 0xC08, 0x80410231, ++ 0xC0C, 0x00000000, ++ 0xC10, 0x00000100, ++ 0xC14, 0x01000000, ++ 0xC1C, 0x40000053, ++ 0xC50, 0x00000020, ++ 0xC54, 0x00000000, ++ 0x80000002, 0x00000000, 0x40000000, 0x00000000, ++ 0xC58, 0x3C0A0C14, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0xC58, 0x3C0A0C14, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0xC58, 0x3C0A0C14, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0xC58, 0x3C0A0C14, ++ 0xA0000000, 0x00000000, ++ 0xC58, 0x3C020C14, ++ 0xB0000000, 0x00000000, ++ 0xC5C, 0x0D000058, ++ 0xC60, 0x1B800000, ++ 0xC60, 0x0B800001, ++ 0xC60, 0x05800002, ++ 0xC60, 0x07800003, ++ 0xC60, 0x1A800004, ++ 0xC60, 0x0B800005, ++ 0xC60, 0x05800006, ++ 0xC60, 0x0E800007, ++ 0xC60, 0x1A800008, ++ 0xC60, 0x0B800009, ++ 0xC60, 0x1580000A, ++ 0xC60, 0x0880000B, ++ 0xC60, 0x1A80000C, ++ 0xC60, 0x0B80000D, ++ 0xC60, 0x0580000E, ++ 0xC60, 0x0E80000F, ++ 0xC60, 0x1A800010, ++ 0xC60, 0x0B800011, ++ 0xC60, 0x15800012, ++ 0xC60, 0x08800013, ++ 0xC60, 0x1A800014, ++ 0xC60, 0x0B800015, ++ 0xC60, 0x05800016, ++ 0xC60, 0x07800017, ++ 0xC60, 0x1A800018, ++ 0xC60, 0x0B800019, ++ 0xC60, 0x1580001A, ++ 0xC60, 0x0880001B, ++ 0xC60, 0x1B80001C, ++ 0xC60, 0x0B80001D, ++ 0xC60, 0x0580001E, ++ 0xC60, 0x0780001F, ++ 0xC60, 0x1B800020, ++ 0xC60, 0x0B800021, ++ 0xC60, 0x05800022, ++ 0xC60, 0x07800023, ++ 0xC60, 0x1B800024, ++ 0xC60, 0x0B800025, ++ 0xC60, 0x05800026, ++ 0xC60, 0x07800027, ++ 0xC60, 0x1B800028, ++ 0xC60, 0x0B800029, ++ 0xC60, 0x0580002A, ++ 0xC60, 0x0780002B, ++ 0xC60, 0x1B800030, ++ 0xC60, 0x0B800031, ++ 0xC60, 0x05800032, ++ 0xC60, 0x00800033, ++ 0xC60, 0x1B800034, ++ 0xC60, 0x0B800035, ++ 0xC60, 0x05800036, ++ 0xC60, 0x00800037, ++ 0xC60, 0x1B800038, ++ 0xC60, 0x0B800039, ++ 0xC60, 0x0580003A, ++ 0xC60, 0x0E80803B, ++ 0xC94, 0x01000401, ++ 0xC98, 0x00188000, ++ 0xCA0, 0x00002929, ++ 0xCA4, 0x08040201, ++ 0xCA8, 0x80402010, ++ 0xCAC, 0x77777000, ++ 0xCB0, 0x54775477, ++ 0xCB4, 0x54775477, ++ 0xCB8, 0x00500000, ++ 0xCBC, 0x77700000, ++ 0xCC0, 0x00000010, ++ 0xCC8, 0x00000010, ++ 0xE00, 0x00000007, ++ 0xE04, 0x00042020, ++ 0xE08, 0x80410231, ++ 0xE0C, 0x00000000, ++ 0xE10, 0x00000100, ++ 0xE14, 0x01000000, ++ 0xE1C, 0x40000053, ++ 0xE50, 0x00000020, ++ 0xE54, 0x00000000, ++ 0x80000002, 0x00000000, 0x40000000, 0x00000000, ++ 0xE58, 0x3C0A0C14, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0xE58, 0x3C0A0C14, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0xE58, 0x3C0A0C14, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0xE58, 0x3C0A0C14, ++ 0xA0000000, 0x00000000, ++ 0xE58, 0x3C020C14, ++ 0xB0000000, 0x00000000, ++ 0xE5C, 0x0D000058, ++ 0xE60, 0x1B800000, ++ 0xE60, 0x0B800001, ++ 0xE60, 0x05800002, ++ 0xE60, 0x07800003, ++ 0xE60, 0x1A800004, ++ 0xE60, 0x0B800005, ++ 0xE60, 0x05800006, ++ 0xE60, 0x0E800007, ++ 0xE60, 0x1A800008, ++ 0xE60, 0x0B800009, ++ 0xE60, 0x1580000A, ++ 0xE60, 0x0880000B, ++ 0xE60, 0x1A80000C, ++ 0xE60, 0x0B80000D, ++ 0xE60, 0x0580000E, ++ 0xE60, 0x0E80000F, ++ 0xE60, 0x1A800010, ++ 0xE60, 0x0B800011, ++ 0xE60, 0x15800012, ++ 0xE60, 0x08800013, ++ 0xE60, 0x1A800014, ++ 0xE60, 0x0B800015, ++ 0xE60, 0x05800016, ++ 0xE60, 0x07800017, ++ 0xE60, 0x1A800018, ++ 0xE60, 0x0B800019, ++ 0xE60, 0x1580001A, ++ 0xE60, 0x0880001B, ++ 0xE60, 0x1B80001C, ++ 0xE60, 0x0B80001D, ++ 0xE60, 0x0580001E, ++ 0xE60, 0x0780001F, ++ 0xE60, 0x1B800020, ++ 0xE60, 0x0B800021, ++ 0xE60, 0x05800022, ++ 0xE60, 0x07800023, ++ 0xE60, 0x1B800024, ++ 0xE60, 0x0B800025, ++ 0xE60, 0x05800026, ++ 0xE60, 0x07800027, ++ 0xE60, 0x1B800028, ++ 0xE60, 0x0B800029, ++ 0xE60, 0x0580002A, ++ 0xE60, 0x0780002B, ++ 0xE60, 0x1B800030, ++ 0xE60, 0x0B800031, ++ 0xE60, 0x05800032, ++ 0xE60, 0x00800033, ++ 0xE60, 0x1B800034, ++ 0xE60, 0x0B800035, ++ 0xE60, 0x05800036, ++ 0xE60, 0x00800037, ++ 0xE60, 0x1B800038, ++ 0xE60, 0x0B800039, ++ 0xE60, 0x0580003A, ++ 0xE60, 0x0E80803B, ++ 0xE94, 0x01000401, ++ 0xE98, 0x00188000, ++ 0xEA0, 0x00002929, ++ 0xEA4, 0x08040201, ++ 0xEA8, 0x80402010, ++ 0xEAC, 0x77777000, ++ 0xEB0, 0x54775477, ++ 0xEB4, 0x54775477, ++ 0xEB8, 0x00500000, ++ 0xEBC, 0x77700000, ++ 0x1800, 0x00000007, ++ 0x1804, 0x00042020, ++ 0x1808, 0x80410231, ++ 0x180C, 0x00000000, ++ 0x1810, 0x00000100, ++ 0x1814, 0x01000000, ++ 0x181C, 0x40000053, ++ 0x1850, 0x00000020, ++ 0x1854, 0x00000000, ++ 0x80000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x1858, 0x3C0A0C14, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x1858, 0x3C0A0C14, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x1858, 0x3C0A0C14, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x1858, 0x3C0A0C14, ++ 0xA0000000, 0x00000000, ++ 0x1858, 0x3C020C14, ++ 0xB0000000, 0x00000000, ++ 0x185C, 0x0D000058, ++ 0x1860, 0x1B800000, ++ 0x1860, 0x0B800001, ++ 0x1860, 0x05800002, ++ 0x1860, 0x07800003, ++ 0x1860, 0x1A800004, ++ 0x1860, 0x0B800005, ++ 0x1860, 0x05800006, ++ 0x1860, 0x0E800007, ++ 0x1860, 0x1A800008, ++ 0x1860, 0x0B800009, ++ 0x1860, 0x1580000A, ++ 0x1860, 0x0880000B, ++ 0x1860, 0x1A80000C, ++ 0x1860, 0x0B80000D, ++ 0x1860, 0x0580000E, ++ 0x1860, 0x0E80000F, ++ 0x1860, 0x1A800010, ++ 0x1860, 0x0B800011, ++ 0x1860, 0x15800012, ++ 0x1860, 0x08800013, ++ 0x1860, 0x1A800014, ++ 0x1860, 0x0B800015, ++ 0x1860, 0x05800016, ++ 0x1860, 0x07800017, ++ 0x1860, 0x1A800018, ++ 0x1860, 0x0B800019, ++ 0x1860, 0x1580001A, ++ 0x1860, 0x0880001B, ++ 0x1860, 0x1B80001C, ++ 0x1860, 0x0B80001D, ++ 0x1860, 0x0580001E, ++ 0x1860, 0x0780001F, ++ 0x1860, 0x1B800020, ++ 0x1860, 0x0B800021, ++ 0x1860, 0x05800022, ++ 0x1860, 0x07800023, ++ 0x1860, 0x1B800024, ++ 0x1860, 0x0B800025, ++ 0x1860, 0x05800026, ++ 0x1860, 0x07800027, ++ 0x1860, 0x1B800028, ++ 0x1860, 0x0B800029, ++ 0x1860, 0x0580002A, ++ 0x1860, 0x0780002B, ++ 0x1860, 0x1B800030, ++ 0x1860, 0x0B800031, ++ 0x1860, 0x05800032, ++ 0x1860, 0x00800033, ++ 0x1860, 0x1B800034, ++ 0x1860, 0x0B800035, ++ 0x1860, 0x05800036, ++ 0x1860, 0x00800037, ++ 0x1860, 0x1B800038, ++ 0x1860, 0x0B800039, ++ 0x1860, 0x0580003A, ++ 0x1860, 0x0E80803B, ++ 0x1894, 0x01000401, ++ 0x1898, 0x00188000, ++ 0x18A0, 0x00002929, ++ 0x18A4, 0x08040201, ++ 0x18A8, 0x80402010, ++ 0x18AC, 0x77777000, ++ 0x18B0, 0x54775477, ++ 0x18B4, 0x54775477, ++ 0x18B8, 0x00500000, ++ 0x18BC, 0x77700000, ++ 0x1A00, 0x00000007, ++ 0x1A04, 0x00042020, ++ 0x1A08, 0x80410231, ++ 0x1A0C, 0x00000000, ++ 0x1A10, 0x00000100, ++ 0x1A14, 0x01000000, ++ 0x1A1C, 0x40000053, ++ 0x1A50, 0x00000020, ++ 0x1A54, 0x00000000, ++ 0x80000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x1A58, 0x3C0A0C14, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x1A58, 0x3C0A0C14, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x1A58, 0x3C0A0C14, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x1A58, 0x3C0A0C14, ++ 0xA0000000, 0x00000000, ++ 0x1A58, 0x3C020C14, ++ 0xB0000000, 0x00000000, ++ 0x1A5C, 0x0D000058, ++ 0x1A60, 0x1B800000, ++ 0x1A60, 0x0B800001, ++ 0x1A60, 0x05800002, ++ 0x1A60, 0x07800003, ++ 0x1A60, 0x1A800004, ++ 0x1A60, 0x0B800005, ++ 0x1A60, 0x05800006, ++ 0x1A60, 0x0E800007, ++ 0x1A60, 0x1A800008, ++ 0x1A60, 0x0B800009, ++ 0x1A60, 0x1580000A, ++ 0x1A60, 0x0880000B, ++ 0x1A60, 0x1A80000C, ++ 0x1A60, 0x0B80000D, ++ 0x1A60, 0x0580000E, ++ 0x1A60, 0x0E80000F, ++ 0x1A60, 0x1A800010, ++ 0x1A60, 0x0B800011, ++ 0x1A60, 0x15800012, ++ 0x1A60, 0x08800013, ++ 0x1A60, 0x1A800014, ++ 0x1A60, 0x0B800015, ++ 0x1A60, 0x05800016, ++ 0x1A60, 0x07800017, ++ 0x1A60, 0x1A800018, ++ 0x1A60, 0x0B800019, ++ 0x1A60, 0x1580001A, ++ 0x1A60, 0x0880001B, ++ 0x1A60, 0x1B80001C, ++ 0x1A60, 0x0B80001D, ++ 0x1A60, 0x0580001E, ++ 0x1A60, 0x0780001F, ++ 0x1A60, 0x1B800020, ++ 0x1A60, 0x0B800021, ++ 0x1A60, 0x05800022, ++ 0x1A60, 0x07800023, ++ 0x1A60, 0x1B800024, ++ 0x1A60, 0x0B800025, ++ 0x1A60, 0x05800026, ++ 0x1A60, 0x07800027, ++ 0x1A60, 0x1B800028, ++ 0x1A60, 0x0B800029, ++ 0x1A60, 0x0580002A, ++ 0x1A60, 0x0780002B, ++ 0x1A60, 0x1B800030, ++ 0x1A60, 0x0B800031, ++ 0x1A60, 0x05800032, ++ 0x1A60, 0x00800033, ++ 0x1A60, 0x1B800034, ++ 0x1A60, 0x0B800035, ++ 0x1A60, 0x05800036, ++ 0x1A60, 0x00800037, ++ 0x1A60, 0x1B800038, ++ 0x1A60, 0x0B800039, ++ 0x1A60, 0x0580003A, ++ 0x1A60, 0x0E80803B, ++ 0x1A94, 0x01000401, ++ 0x1A98, 0x00188000, ++ 0x1AA0, 0x00002929, ++ 0x1AA4, 0x08040201, ++ 0x1AA8, 0x80402010, ++ 0x1AAC, 0x77777000, ++ 0x1AB0, 0x54775477, ++ 0x1AB4, 0x54775477, ++ 0x1AB8, 0x00500000, ++ 0x1ABC, 0x77700000, ++ 0x1904, 0x00030000, ++ 0x1914, 0x00030000, ++ 0x1984, 0x03000000, ++ 0x1988, 0x00000087, ++ 0x198C, 0x00000007, ++ 0x1990, 0xFFAA5500, ++ 0x1994, 0x00000077, ++ 0x1998, 0x12801000, ++ 0x1998, 0x12801000, ++ 0x1998, 0x12801001, ++ 0x1998, 0x12801002, ++ 0x1998, 0x12801003, ++ 0x1998, 0x12801004, ++ 0x1998, 0x12801005, ++ 0x1998, 0x12801006, ++ 0x1998, 0x12801007, ++ 0x1998, 0x12801008, ++ 0x1998, 0x12801009, ++ 0x1998, 0x1280100A, ++ 0x1998, 0x1280100B, ++ 0x1998, 0x1280100C, ++ 0x1998, 0x1280100D, ++ 0x1998, 0x1280100E, ++ 0x1998, 0x1280100F, ++ 0x1998, 0x12801010, ++ 0x1998, 0x12801011, ++ 0x1998, 0x12801012, ++ 0x1998, 0x12801013, ++ 0x1998, 0x12801014, ++ 0x1998, 0x12801015, ++ 0x1998, 0x12801016, ++ 0x1998, 0x12801017, ++ 0x1998, 0x12801018, ++ 0x1998, 0x12801019, ++ 0x1998, 0x1280101A, ++ 0x1998, 0x1280101B, ++ 0x1998, 0x1280101C, ++ 0x1998, 0x1280101D, ++ 0x1998, 0x1280101E, ++ 0x1998, 0x1280101F, ++ 0x1998, 0x12801020, ++ 0x1998, 0x12801021, ++ 0x1998, 0x12801022, ++ 0x1998, 0x12801023, ++ 0x1998, 0x1280102C, ++ 0x1998, 0x1280102D, ++ 0x1998, 0x1280102E, ++ 0x1998, 0x1280102F, ++ 0x1998, 0x12801030, ++ 0x1998, 0x12801031, ++ 0x1998, 0x12801032, ++ 0x1998, 0x12801033, ++ 0x1998, 0x12801034, ++ 0x1998, 0x12801035, ++ 0x1998, 0x12801036, ++ 0x1998, 0x12801037, ++ 0x1998, 0x12801038, ++ 0x1998, 0x12801039, ++ 0x1998, 0x1280103A, ++ 0x1998, 0x1280103B, ++ 0x1998, 0x1280103C, ++ 0x1998, 0x1280103D, ++ 0x1998, 0x1280103E, ++ 0x1998, 0x1280103F, ++ 0x1998, 0x12801040, ++ 0x1998, 0x12801041, ++ 0x1998, 0x12801042, ++ 0x1998, 0x12801043, ++ 0x1998, 0x12801044, ++ 0x1998, 0x12801045, ++ 0x1998, 0x12801046, ++ 0x1998, 0x12801047, ++ 0x1998, 0x12801048, ++ 0x1998, 0x12801049, ++ 0x1998, 0x12801100, ++ 0x1998, 0x12801101, ++ 0x1998, 0x12801102, ++ 0x1998, 0x12801103, ++ 0x1998, 0x12801104, ++ 0x1998, 0x12801105, ++ 0x1998, 0x12801106, ++ 0x1998, 0x12801107, ++ 0x1998, 0x12801108, ++ 0x1998, 0x12801109, ++ 0x1998, 0x1280110A, ++ 0x1998, 0x1280110B, ++ 0x1998, 0x1280110C, ++ 0x1998, 0x1280110D, ++ 0x1998, 0x1280110E, ++ 0x1998, 0x1280110F, ++ 0x1998, 0x12801110, ++ 0x1998, 0x12801111, ++ 0x1998, 0x12801112, ++ 0x1998, 0x12801113, ++ 0x1998, 0x12801114, ++ 0x1998, 0x12801115, ++ 0x1998, 0x12801116, ++ 0x1998, 0x12801117, ++ 0x1998, 0x12801118, ++ 0x1998, 0x12801119, ++ 0x1998, 0x1280111A, ++ 0x1998, 0x1280111B, ++ 0x1998, 0x1280111C, ++ 0x1998, 0x1280111D, ++ 0x1998, 0x1280111E, ++ 0x1998, 0x1280111F, ++ 0x1998, 0x12801120, ++ 0x1998, 0x12801121, ++ 0x1998, 0x12801122, ++ 0x1998, 0x12801123, ++ 0x1998, 0x1280112C, ++ 0x1998, 0x1280112D, ++ 0x1998, 0x1280112E, ++ 0x1998, 0x1280112F, ++ 0x1998, 0x12801130, ++ 0x1998, 0x12801131, ++ 0x1998, 0x12801132, ++ 0x1998, 0x12801133, ++ 0x1998, 0x12801134, ++ 0x1998, 0x12801135, ++ 0x1998, 0x12801136, ++ 0x1998, 0x12801137, ++ 0x1998, 0x12801138, ++ 0x1998, 0x12801139, ++ 0x1998, 0x1280113A, ++ 0x1998, 0x1280113B, ++ 0x1998, 0x1280113C, ++ 0x1998, 0x1280113D, ++ 0x1998, 0x1280113E, ++ 0x1998, 0x1280113F, ++ 0x1998, 0x12801140, ++ 0x1998, 0x12801141, ++ 0x1998, 0x12801142, ++ 0x1998, 0x12801143, ++ 0x1998, 0x12801144, ++ 0x1998, 0x12801145, ++ 0x1998, 0x12801146, ++ 0x1998, 0x12801147, ++ 0x1998, 0x12801148, ++ 0x1998, 0x12801149, ++ 0x1998, 0x12801200, ++ 0x1998, 0x12801201, ++ 0x1998, 0x12801202, ++ 0x1998, 0x12801203, ++ 0x1998, 0x12801204, ++ 0x1998, 0x12801205, ++ 0x1998, 0x12801206, ++ 0x1998, 0x12801207, ++ 0x1998, 0x12801208, ++ 0x1998, 0x12801209, ++ 0x1998, 0x1280120A, ++ 0x1998, 0x1280120B, ++ 0x1998, 0x1280120C, ++ 0x1998, 0x1280120D, ++ 0x1998, 0x1280120E, ++ 0x1998, 0x1280120F, ++ 0x1998, 0x12801210, ++ 0x1998, 0x12801211, ++ 0x1998, 0x12801212, ++ 0x1998, 0x12801213, ++ 0x1998, 0x12801214, ++ 0x1998, 0x12801215, ++ 0x1998, 0x12801216, ++ 0x1998, 0x12801217, ++ 0x1998, 0x12801218, ++ 0x1998, 0x12801219, ++ 0x1998, 0x1280121A, ++ 0x1998, 0x1280121B, ++ 0x1998, 0x1280121C, ++ 0x1998, 0x1280121D, ++ 0x1998, 0x1280121E, ++ 0x1998, 0x1280121F, ++ 0x1998, 0x12801220, ++ 0x1998, 0x12801221, ++ 0x1998, 0x12801222, ++ 0x1998, 0x12801223, ++ 0x1998, 0x1280122C, ++ 0x1998, 0x1280122D, ++ 0x1998, 0x1280122E, ++ 0x1998, 0x1280122F, ++ 0x1998, 0x12801230, ++ 0x1998, 0x12801231, ++ 0x1998, 0x12801232, ++ 0x1998, 0x12801233, ++ 0x1998, 0x12801234, ++ 0x1998, 0x12801235, ++ 0x1998, 0x12801236, ++ 0x1998, 0x12801237, ++ 0x1998, 0x12801238, ++ 0x1998, 0x12801239, ++ 0x1998, 0x1280123A, ++ 0x1998, 0x1280123B, ++ 0x1998, 0x1280123C, ++ 0x1998, 0x1280123D, ++ 0x1998, 0x1280123E, ++ 0x1998, 0x1280123F, ++ 0x1998, 0x12801240, ++ 0x1998, 0x12801241, ++ 0x1998, 0x12801242, ++ 0x1998, 0x12801243, ++ 0x1998, 0x12801244, ++ 0x1998, 0x12801245, ++ 0x1998, 0x12801246, ++ 0x1998, 0x12801247, ++ 0x1998, 0x12801248, ++ 0x1998, 0x12801249, ++ 0x1998, 0x12801300, ++ 0x1998, 0x12801301, ++ 0x1998, 0x12801302, ++ 0x1998, 0x12801303, ++ 0x1998, 0x12801304, ++ 0x1998, 0x12801305, ++ 0x1998, 0x12801306, ++ 0x1998, 0x12801307, ++ 0x1998, 0x12801308, ++ 0x1998, 0x12801309, ++ 0x1998, 0x1280130A, ++ 0x1998, 0x1280130B, ++ 0x1998, 0x1280130C, ++ 0x1998, 0x1280130D, ++ 0x1998, 0x1280130E, ++ 0x1998, 0x1280130F, ++ 0x1998, 0x12801310, ++ 0x1998, 0x12801311, ++ 0x1998, 0x12801312, ++ 0x1998, 0x12801313, ++ 0x1998, 0x12801314, ++ 0x1998, 0x12801315, ++ 0x1998, 0x12801316, ++ 0x1998, 0x12801317, ++ 0x1998, 0x12801318, ++ 0x1998, 0x12801319, ++ 0x1998, 0x1280131A, ++ 0x1998, 0x1280131B, ++ 0x1998, 0x1280131C, ++ 0x1998, 0x1280131D, ++ 0x1998, 0x1280131E, ++ 0x1998, 0x1280131F, ++ 0x1998, 0x12801320, ++ 0x1998, 0x12801321, ++ 0x1998, 0x12801322, ++ 0x1998, 0x12801323, ++ 0x1998, 0x1280132C, ++ 0x1998, 0x1280132D, ++ 0x1998, 0x1280132E, ++ 0x1998, 0x1280132F, ++ 0x1998, 0x12801330, ++ 0x1998, 0x12801331, ++ 0x1998, 0x12801332, ++ 0x1998, 0x12801333, ++ 0x1998, 0x12801334, ++ 0x1998, 0x12801335, ++ 0x1998, 0x12801336, ++ 0x1998, 0x12801337, ++ 0x1998, 0x12801338, ++ 0x1998, 0x12801339, ++ 0x1998, 0x1280133A, ++ 0x1998, 0x1280133B, ++ 0x1998, 0x1280133C, ++ 0x1998, 0x1280133D, ++ 0x1998, 0x1280133E, ++ 0x1998, 0x1280133F, ++ 0x1998, 0x12801340, ++ 0x1998, 0x12801341, ++ 0x1998, 0x12801342, ++ 0x1998, 0x12801343, ++ 0x1998, 0x12801344, ++ 0x1998, 0x12801345, ++ 0x1998, 0x12801346, ++ 0x1998, 0x12801347, ++ 0x1998, 0x12801348, ++ 0x1998, 0x12801349, ++ 0x19D4, 0x88888888, ++ 0x19D8, 0x00000888, ++ 0xB00, 0xE3100100, ++ 0xB00, 0xE7100100, ++ 0xC60, 0x15808002, ++ 0xC60, 0x01808003, ++ 0xE60, 0x15808002, ++ 0xE60, 0x01808003, ++ 0x1860, 0x15808002, ++ 0x1860, 0x01808003, ++ 0x1A60, 0x15808002, ++ 0x1A60, 0x01808003, ++ 0xB00, 0xE3100100, ++ 0xC5C, 0x0D080058, ++ 0xE5C, 0x0D080058, ++ 0x185C, 0x0D080058, ++ 0x1A5C, 0x0D080058, ++ 0xC5C, 0x0D000058, ++ 0xE5C, 0x0D000058, ++ 0x185C, 0x0D000058, ++ 0x1A5C, 0x0D000058, ++ 0xC60, 0x05808002, ++ 0xC60, 0x0E808003, ++ 0xE60, 0x05808002, ++ 0xE60, 0x0E808003, ++ 0x1860, 0x05808002, ++ 0x1860, 0x0E808003, ++ 0x1A60, 0x05808002, ++ 0x1A60, 0x0E808003, ++ 0xB00, 0xE7100100, ++ 0xB00, 0xE3100100, ++ 0xB00, 0xE3100000, ++ 0x1C38, 0x00000002, ++ 0xA00, 0x00D047C8, ++ 0xA04, 0x46FF800C, ++ 0xA08, 0x8C838300, ++ 0xA0C, 0x2E7E000F, ++ 0xA10, 0x9500BB78, ++ 0xA14, 0x11144028, ++ 0xA18, 0x00881117, ++ 0xA1C, 0x89140F00, ++ 0xA20, 0x1A1B0030, ++ 0xA24, 0x090E1317, ++ 0xA28, 0x00000204, ++ 0xA2C, 0x00900000, ++ 0xA70, 0x101FFF00, ++ 0xA74, 0x00000128, ++ 0xA78, 0x00000900, ++ 0xA7C, 0x225B0606, ++ 0xA80, 0x218075B2, ++ 0xA84, 0x9C1F8C00, ++ 0x1B04, 0xE24628D2, ++ 0x1B10, 0x88010D46, ++ 0x1B14, 0x00000000, ++ 0x1B18, 0x00292903, ++ 0x1B00, 0xF8000000, ++ 0x1B00, 0xF800D000, ++ 0x1B00, 0xF801F000, ++ 0x1B1C, 0xA2123DB2, ++ 0x1B20, 0x07040001, ++ 0x1B24, 0x07060807, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B28, 0xC0060324, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B28, 0xC0060324, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B28, 0xC0060324, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B28, 0xC0060324, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B28, 0xC0060324, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B28, 0xC0060324, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B28, 0xC0060324, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B28, 0xC0060324, ++ 0xA0000000, 0x00000000, ++ 0x1B28, 0xC0060348, ++ 0xB0000000, 0x00000000, ++ 0x1B2C, 0x20000003, ++ 0x1B30, 0x20000000, ++ 0x1B38, 0x20000000, ++ 0x1B3C, 0x20000000, ++ 0x1BD4, 0x00000001, ++ 0x1B94, 0x80000000, ++ 0x1B34, 0x00000000, ++ 0x1B34, 0x00000002, ++ 0x1B34, 0x00000000, ++ 0x1B00, 0xF8000002, ++ 0x1B00, 0xF800D002, ++ 0x1B00, 0xF801F002, ++ 0x1B1C, 0xA2123DB2, ++ 0x1B20, 0x07040001, ++ 0x1B24, 0x07060807, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B28, 0xC0060324, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B28, 0xC0060324, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B28, 0xC0060324, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B28, 0xC0060324, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B28, 0xC0060324, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B28, 0xC0060324, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B28, 0xC0060324, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B28, 0xC0060324, ++ 0xA0000000, 0x00000000, ++ 0x1B28, 0xC0060348, ++ 0xB0000000, 0x00000000, ++ 0x1B2C, 0x20000003, ++ 0x1B30, 0x20000000, ++ 0x1B38, 0x20000000, ++ 0x1B3C, 0x20000000, ++ 0x1BD4, 0x00000001, ++ 0x1B94, 0x80000000, ++ 0x1B34, 0x00000000, ++ 0x1B34, 0x00000002, ++ 0x1B34, 0x00000000, ++ 0x1B00, 0xF8000004, ++ 0x1B00, 0xF800D004, ++ 0x1B00, 0xF801F004, ++ 0x1B1C, 0xA2123DB2, ++ 0x1B20, 0x07040001, ++ 0x1B24, 0x07060807, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B28, 0xC0060324, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B28, 0xC0060324, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B28, 0xC0060324, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B28, 0xC0060324, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B28, 0xC0060324, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B28, 0xC0060324, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B28, 0xC0060324, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B28, 0xC0060324, ++ 0xA0000000, 0x00000000, ++ 0x1B28, 0xC0060348, ++ 0xB0000000, 0x00000000, ++ 0x1B2C, 0x20000003, ++ 0x1B30, 0x20000000, ++ 0x1B38, 0x20000000, ++ 0x1B3C, 0x20000000, ++ 0x1BD4, 0x00000001, ++ 0x1B94, 0x80000000, ++ 0x1B34, 0x00000000, ++ 0x1B34, 0x00000002, ++ 0x1B34, 0x00000000, ++ 0x1B00, 0xF8000006, ++ 0x1B00, 0xF800D006, ++ 0x1B00, 0xF801F006, ++ 0x1B1C, 0xA2123DB2, ++ 0x1B20, 0x07040001, ++ 0x1B24, 0x07060807, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B28, 0xC0060324, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B28, 0xC0060324, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B28, 0xC0060324, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B28, 0xC0060324, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B28, 0xC0060324, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B28, 0xC0060324, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B28, 0xC0060324, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B28, 0xC0060324, ++ 0xA0000000, 0x00000000, ++ 0x1B28, 0xC0060348, ++ 0xB0000000, 0x00000000, ++ 0x1B2C, 0x20000003, ++ 0x1B30, 0x20000000, ++ 0x1B38, 0x20000000, ++ 0x1B3C, 0x20000000, ++ 0x1BD4, 0x00000001, ++ 0x1B94, 0x80000000, ++ 0x1B34, 0x00000000, ++ 0x1B34, 0x00000002, ++ 0x1B34, 0x00000000, ++ 0x1B00, 0xF8000000, ++ 0x1B80, 0x00000007, ++ 0x1B80, 0x09060005, ++ 0x1B80, 0x09060007, ++ 0x1B80, 0x0FFE0015, ++ 0x1B80, 0x0FFE0017, ++ 0x1B80, 0x00240025, ++ 0x1B80, 0x00240027, ++ 0x1B80, 0x00040035, ++ 0x1B80, 0x00040037, ++ 0x1B80, 0x05C00045, ++ 0x1B80, 0x05C00047, ++ 0x1B80, 0x00070055, ++ 0x1B80, 0x00070057, ++ 0x1B80, 0x64000065, ++ 0x1B80, 0x64000067, ++ 0x1B80, 0x00020075, ++ 0x1B80, 0x00020077, ++ 0x1B80, 0x00080085, ++ 0x1B80, 0x00080087, ++ 0x1B80, 0x80000095, ++ 0x1B80, 0x80000097, ++ 0x1B80, 0x090100A5, ++ 0x1B80, 0x090100A7, ++ 0x1B80, 0x0F0200B5, ++ 0x1B80, 0x0F0200B7, ++ 0x1B80, 0x002400C5, ++ 0x1B80, 0x002400C7, ++ 0x1B80, 0x000400D5, ++ 0x1B80, 0x000400D7, ++ 0x1B80, 0x05C000E5, ++ 0x1B80, 0x05C000E7, ++ 0x1B80, 0x000700F5, ++ 0x1B80, 0x000700F7, ++ 0x1B80, 0x64020105, ++ 0x1B80, 0x64020107, ++ 0x1B80, 0x00020115, ++ 0x1B80, 0x00020117, ++ 0x1B80, 0x00040125, ++ 0x1B80, 0x00040127, ++ 0x1B80, 0x4A000135, ++ 0x1B80, 0x4A000137, ++ 0x1B80, 0x4B040145, ++ 0x1B80, 0x4B040147, ++ 0x1B80, 0x85030155, ++ 0x1B80, 0x85030157, ++ 0x1B80, 0x40010165, ++ 0x1B80, 0x40010167, ++ 0x1B80, 0xE0290175, ++ 0x1B80, 0xE0290177, ++ 0x1B80, 0x00040185, ++ 0x1B80, 0x00040187, ++ 0x1B80, 0x4B050195, ++ 0x1B80, 0x4B050197, ++ 0x1B80, 0x860301A5, ++ 0x1B80, 0x860301A7, ++ 0x1B80, 0x400301B5, ++ 0x1B80, 0x400301B7, ++ 0x1B80, 0xE02901C5, ++ 0x1B80, 0xE02901C7, ++ 0x1B80, 0x000401D5, ++ 0x1B80, 0x000401D7, ++ 0x1B80, 0x4B0601E5, ++ 0x1B80, 0x4B0601E7, ++ 0x1B80, 0x870301F5, ++ 0x1B80, 0x870301F7, ++ 0x1B80, 0x40050205, ++ 0x1B80, 0x40050207, ++ 0x1B80, 0xE0290215, ++ 0x1B80, 0xE0290217, ++ 0x1B80, 0x00040225, ++ 0x1B80, 0x00040227, ++ 0x1B80, 0x4B070235, ++ 0x1B80, 0x4B070237, ++ 0x1B80, 0x88030245, ++ 0x1B80, 0x88030247, ++ 0x1B80, 0x40070255, ++ 0x1B80, 0x40070257, ++ 0x1B80, 0xE0290265, ++ 0x1B80, 0xE0290267, ++ 0x1B80, 0x4B000275, ++ 0x1B80, 0x4B000277, ++ 0x1B80, 0x30000285, ++ 0x1B80, 0x30000287, ++ 0x1B80, 0xFE100295, ++ 0x1B80, 0xFE100297, ++ 0x1B80, 0xFF1002A5, ++ 0x1B80, 0xFF1002A7, ++ 0x1B80, 0xE18602B5, ++ 0x1B80, 0xE18602B7, ++ 0x1B80, 0xF00A02C5, ++ 0x1B80, 0xF00A02C7, ++ 0x1B80, 0xF10A02D5, ++ 0x1B80, 0xF10A02D7, ++ 0x1B80, 0xF20A02E5, ++ 0x1B80, 0xF20A02E7, ++ 0x1B80, 0xF30802F5, ++ 0x1B80, 0xF30802F7, ++ 0x1B80, 0xF4070305, ++ 0x1B80, 0xF4070307, ++ 0x1B80, 0xF5060315, ++ 0x1B80, 0xF5060317, ++ 0x1B80, 0xF7060325, ++ 0x1B80, 0xF7060327, ++ 0x1B80, 0xF8050335, ++ 0x1B80, 0xF8050337, ++ 0x1B80, 0xF9040345, ++ 0x1B80, 0xF9040347, ++ 0x1B80, 0x00010355, ++ 0x1B80, 0x00010357, ++ 0x1B80, 0x303B0365, ++ 0x1B80, 0x303B0367, ++ 0x1B80, 0x30500375, ++ 0x1B80, 0x30500377, ++ 0x1B80, 0x305C0385, ++ 0x1B80, 0x305C0387, ++ 0x1B80, 0x31D50395, ++ 0x1B80, 0x31D50397, ++ 0x1B80, 0x31C503A5, ++ 0x1B80, 0x31C503A7, ++ 0x1B80, 0x4D0403B5, ++ 0x1B80, 0x4D0403B7, ++ 0x1B80, 0x2EF003C5, ++ 0x1B80, 0x2EF003C7, ++ 0x1B80, 0x000203D5, ++ 0x1B80, 0x000203D7, ++ 0x1B80, 0x208003E5, ++ 0x1B80, 0x208003E7, ++ 0x1B80, 0x000003F5, ++ 0x1B80, 0x000003F7, ++ 0x1B80, 0x4D000405, ++ 0x1B80, 0x4D000407, ++ 0x1B80, 0x55070415, ++ 0x1B80, 0x55070417, ++ 0x1B80, 0xE1230425, ++ 0x1B80, 0xE1230427, ++ 0x1B80, 0xE1230435, ++ 0x1B80, 0xE1230437, ++ 0x1B80, 0x4D040445, ++ 0x1B80, 0x4D040447, ++ 0x1B80, 0x20800455, ++ 0x1B80, 0x20800457, ++ 0x1B80, 0x84000465, ++ 0x1B80, 0x84000467, ++ 0x1B80, 0x4D000475, ++ 0x1B80, 0x4D000477, ++ 0x1B80, 0x550F0485, ++ 0x1B80, 0x550F0487, ++ 0x1B80, 0xE1230495, ++ 0x1B80, 0xE1230497, ++ 0x1B80, 0x4F0204A5, ++ 0x1B80, 0x4F0204A7, ++ 0x1B80, 0x4E0004B5, ++ 0x1B80, 0x4E0004B7, ++ 0x1B80, 0x530204C5, ++ 0x1B80, 0x530204C7, ++ 0x1B80, 0x520104D5, ++ 0x1B80, 0x520104D7, ++ 0x1B80, 0xE12704E5, ++ 0x1B80, 0xE12704E7, ++ 0x1B80, 0x000104F5, ++ 0x1B80, 0x000104F7, ++ 0x1B80, 0x5C720505, ++ 0x1B80, 0x5C720507, ++ 0x1B80, 0xE1320515, ++ 0x1B80, 0xE1320517, ++ 0x1B80, 0x54E50525, ++ 0x1B80, 0x54E50527, ++ 0x1B80, 0x54BF0535, ++ 0x1B80, 0x54BF0537, ++ 0x1B80, 0x54C50545, ++ 0x1B80, 0x54C50547, ++ 0x1B80, 0x54BE0555, ++ 0x1B80, 0x54BE0557, ++ 0x1B80, 0x54DF0565, ++ 0x1B80, 0x54DF0567, ++ 0x1B80, 0x0BA60575, ++ 0x1B80, 0x0BA60577, ++ 0x1B80, 0xF3130585, ++ 0x1B80, 0xF3130587, ++ 0x1B80, 0xF41E0595, ++ 0x1B80, 0xF41E0597, ++ 0x1B80, 0xF53C05A5, ++ 0x1B80, 0xF53C05A7, ++ 0x1B80, 0x000105B5, ++ 0x1B80, 0x000105B7, ++ 0x1B80, 0x620605C5, ++ 0x1B80, 0x620605C7, ++ 0x1B80, 0x600605D5, ++ 0x1B80, 0x600605D7, ++ 0x1B80, 0xE1A905E5, ++ 0x1B80, 0xE1A905E7, ++ 0x1B80, 0x0C0005F5, ++ 0x1B80, 0x0C0005F7, ++ 0x1B80, 0x5C720605, ++ 0x1B80, 0x5C720607, ++ 0x1B80, 0xE1320615, ++ 0x1B80, 0xE1320617, ++ 0x1B80, 0x5CF10625, ++ 0x1B80, 0x5CF10627, ++ 0x1B80, 0x0C010635, ++ 0x1B80, 0x0C010637, ++ 0x1B80, 0xF2020645, ++ 0x1B80, 0xF2020647, ++ 0x1B80, 0x30D60655, ++ 0x1B80, 0x30D60657, ++ 0x1B80, 0x0AC60665, ++ 0x1B80, 0x0AC60667, ++ 0x1B80, 0xE1B60675, ++ 0x1B80, 0xE1B60677, ++ 0x1B80, 0xE1580685, ++ 0x1B80, 0xE1580687, ++ 0x1B80, 0x54E50695, ++ 0x1B80, 0x54E50697, ++ 0x1B80, 0x000106A5, ++ 0x1B80, 0x000106A7, ++ 0x1B80, 0x560106B5, ++ 0x1B80, 0x560106B7, ++ 0x1B80, 0x5CE206C5, ++ 0x1B80, 0x5CE206C7, ++ 0x1B80, 0x0AE106D5, ++ 0x1B80, 0x0AE106D7, ++ 0x1B80, 0x630C06E5, ++ 0x1B80, 0x630C06E7, ++ 0x1B80, 0xE13F06F5, ++ 0x1B80, 0xE13F06F7, ++ 0x1B80, 0x00270705, ++ 0x1B80, 0x00270707, ++ 0x1B80, 0xE16C0715, ++ 0x1B80, 0xE16C0717, ++ 0x1B80, 0x00020725, ++ 0x1B80, 0x00020727, ++ 0x1B80, 0x002A0735, ++ 0x1B80, 0x002A0737, ++ 0x1B80, 0x07140745, ++ 0x1B80, 0x07140747, ++ 0x1B80, 0x00020755, ++ 0x1B80, 0x00020757, ++ 0x1B80, 0x30C30765, ++ 0x1B80, 0x30C30767, ++ 0x1B80, 0x56010775, ++ 0x1B80, 0x56010777, ++ 0x1B80, 0x5CE20785, ++ 0x1B80, 0x5CE20787, ++ 0x1B80, 0x0AE10795, ++ 0x1B80, 0x0AE10797, ++ 0x1B80, 0x631707A5, ++ 0x1B80, 0x631707A7, ++ 0x1B80, 0xE13F07B5, ++ 0x1B80, 0xE13F07B7, ++ 0x1B80, 0x002507C5, ++ 0x1B80, 0x002507C7, ++ 0x1B80, 0xE16C07D5, ++ 0x1B80, 0xE16C07D7, ++ 0x1B80, 0x000207E5, ++ 0x1B80, 0x000207E7, ++ 0x1B80, 0x630F07F5, ++ 0x1B80, 0x630F07F7, ++ 0x1B80, 0xE13F0805, ++ 0x1B80, 0xE13F0807, ++ 0x1B80, 0x63070815, ++ 0x1B80, 0x63070817, ++ 0x1B80, 0xE13F0825, ++ 0x1B80, 0xE13F0827, ++ 0x1B80, 0x07140835, ++ 0x1B80, 0x07140837, ++ 0x1B80, 0x56000845, ++ 0x1B80, 0x56000847, ++ 0x1B80, 0x5CF20855, ++ 0x1B80, 0x5CF20857, ++ 0x1B80, 0x0AF10865, ++ 0x1B80, 0x0AF10867, ++ 0x1B80, 0x07140875, ++ 0x1B80, 0x07140877, ++ 0x1B80, 0x07140885, ++ 0x1B80, 0x07140887, ++ 0x1B80, 0x630F0895, ++ 0x1B80, 0x630F0897, ++ 0x1B80, 0xE13F08A5, ++ 0x1B80, 0xE13F08A7, ++ 0x1B80, 0x631708B5, ++ 0x1B80, 0x631708B7, ++ 0x1B80, 0xE13F08C5, ++ 0x1B80, 0xE13F08C7, ++ 0x1B80, 0x002508D5, ++ 0x1B80, 0x002508D7, ++ 0x1B80, 0xE16C08E5, ++ 0x1B80, 0xE16C08E7, ++ 0x1B80, 0x000208F5, ++ 0x1B80, 0x000208F7, ++ 0x1B80, 0x30C30905, ++ 0x1B80, 0x30C30907, ++ 0x1B80, 0xE1A90915, ++ 0x1B80, 0xE1A90917, ++ 0x1B80, 0x62060925, ++ 0x1B80, 0x62060927, ++ 0x1B80, 0x60060935, ++ 0x1B80, 0x60060937, ++ 0x1B80, 0xE1160945, ++ 0x1B80, 0xE1160947, ++ 0x1B80, 0x54BE0955, ++ 0x1B80, 0x54BE0957, ++ 0x1B80, 0x56010965, ++ 0x1B80, 0x56010967, ++ 0x1B80, 0x5CE20975, ++ 0x1B80, 0x5CE20977, ++ 0x1B80, 0x0AE10985, ++ 0x1B80, 0x0AE10987, ++ 0x1B80, 0x633A0995, ++ 0x1B80, 0x633A0997, ++ 0x1B80, 0xE13F09A5, ++ 0x1B80, 0xE13F09A7, ++ 0x1B80, 0x633709B5, ++ 0x1B80, 0x633709B7, ++ 0x1B80, 0xE13F09C5, ++ 0x1B80, 0xE13F09C7, ++ 0x1B80, 0x632F09D5, ++ 0x1B80, 0x632F09D7, ++ 0x1B80, 0xE13F09E5, ++ 0x1B80, 0xE13F09E7, ++ 0x1B80, 0x632709F5, ++ 0x1B80, 0x632709F7, ++ 0x1B80, 0xE13F0A05, ++ 0x1B80, 0xE13F0A07, ++ 0x1B80, 0x631F0A15, ++ 0x1B80, 0x631F0A17, ++ 0x1B80, 0xE13F0A25, ++ 0x1B80, 0xE13F0A27, ++ 0x1B80, 0x63170A35, ++ 0x1B80, 0x63170A37, ++ 0x1B80, 0xE13F0A45, ++ 0x1B80, 0xE13F0A47, ++ 0x1B80, 0x630F0A55, ++ 0x1B80, 0x630F0A57, ++ 0x1B80, 0xE13F0A65, ++ 0x1B80, 0xE13F0A67, ++ 0x1B80, 0x63070A75, ++ 0x1B80, 0x63070A77, ++ 0x1B80, 0xE13F0A85, ++ 0x1B80, 0xE13F0A87, ++ 0x1B80, 0xE16C0A95, ++ 0x1B80, 0xE16C0A97, ++ 0x1B80, 0x56000AA5, ++ 0x1B80, 0x56000AA7, ++ 0x1B80, 0x5CF20AB5, ++ 0x1B80, 0x5CF20AB7, ++ 0x1B80, 0x0AF10AC5, ++ 0x1B80, 0x0AF10AC7, ++ 0x1B80, 0xF5040AD5, ++ 0x1B80, 0xF5040AD7, ++ 0x1B80, 0xE13F0AE5, ++ 0x1B80, 0xE13F0AE7, ++ 0x1B80, 0xE16C0AF5, ++ 0x1B80, 0xE16C0AF7, ++ 0x1B80, 0x30B30B05, ++ 0x1B80, 0x30B30B07, ++ 0x1B80, 0x07140B15, ++ 0x1B80, 0x07140B17, ++ 0x1B80, 0x07140B25, ++ 0x1B80, 0x07140B27, ++ 0x1B80, 0x630F0B35, ++ 0x1B80, 0x630F0B37, ++ 0x1B80, 0xE13F0B45, ++ 0x1B80, 0xE13F0B47, ++ 0x1B80, 0x63170B55, ++ 0x1B80, 0x63170B57, ++ 0x1B80, 0xE13F0B65, ++ 0x1B80, 0xE13F0B67, ++ 0x1B80, 0x631F0B75, ++ 0x1B80, 0x631F0B77, ++ 0x1B80, 0xE13F0B85, ++ 0x1B80, 0xE13F0B87, ++ 0x1B80, 0x63270B95, ++ 0x1B80, 0x63270B97, ++ 0x1B80, 0xE13F0BA5, ++ 0x1B80, 0xE13F0BA7, ++ 0x1B80, 0x632F0BB5, ++ 0x1B80, 0x632F0BB7, ++ 0x1B80, 0xE13F0BC5, ++ 0x1B80, 0xE13F0BC7, ++ 0x1B80, 0x63370BD5, ++ 0x1B80, 0x63370BD7, ++ 0x1B80, 0xE13F0BE5, ++ 0x1B80, 0xE13F0BE7, ++ 0x1B80, 0x633A0BF5, ++ 0x1B80, 0x633A0BF7, ++ 0x1B80, 0xE13F0C05, ++ 0x1B80, 0xE13F0C07, ++ 0x1B80, 0xF60B0C15, ++ 0x1B80, 0xF60B0C17, ++ 0x1B80, 0xF7170C25, ++ 0x1B80, 0xF7170C27, ++ 0x1B80, 0x4D300C35, ++ 0x1B80, 0x4D300C37, ++ 0x1B80, 0x57040C45, ++ 0x1B80, 0x57040C47, ++ 0x1B80, 0x57000C55, ++ 0x1B80, 0x57000C57, ++ 0x1B80, 0x96000C65, ++ 0x1B80, 0x96000C67, ++ 0x1B80, 0x57080C75, ++ 0x1B80, 0x57080C77, ++ 0x1B80, 0x57000C85, ++ 0x1B80, 0x57000C87, ++ 0x1B80, 0x95000C95, ++ 0x1B80, 0x95000C97, ++ 0x1B80, 0x4D000CA5, ++ 0x1B80, 0x4D000CA7, ++ 0x1B80, 0x6C070CB5, ++ 0x1B80, 0x6C070CB7, ++ 0x1B80, 0x00010CC5, ++ 0x1B80, 0x00010CC7, ++ 0x1B80, 0x00220CD5, ++ 0x1B80, 0x00220CD7, ++ 0x1B80, 0x06140CE5, ++ 0x1B80, 0x06140CE7, ++ 0x1B80, 0xE16C0CF5, ++ 0x1B80, 0xE16C0CF7, ++ 0x1B80, 0x00020D05, ++ 0x1B80, 0x00020D07, ++ 0x1B80, 0x00250D15, ++ 0x1B80, 0x00250D17, ++ 0x1B80, 0x06140D25, ++ 0x1B80, 0x06140D27, ++ 0x1B80, 0xE16C0D35, ++ 0x1B80, 0xE16C0D37, ++ 0x1B80, 0x00020D45, ++ 0x1B80, 0x00020D47, ++ 0x1B80, 0x00010D55, ++ 0x1B80, 0x00010D57, ++ 0x1B80, 0x00320D65, ++ 0x1B80, 0x00320D67, ++ 0x1B80, 0xE16C0D75, ++ 0x1B80, 0xE16C0D77, ++ 0x1B80, 0x00020D85, ++ 0x1B80, 0x00020D87, ++ 0x1B80, 0xE1860D95, ++ 0x1B80, 0xE1860D97, ++ 0x1B80, 0xE1B60DA5, ++ 0x1B80, 0xE1B60DA7, ++ 0x1B80, 0x5CD10DB5, ++ 0x1B80, 0x5CD10DB7, ++ 0x1B80, 0x673A0DC5, ++ 0x1B80, 0x673A0DC7, ++ 0x1B80, 0xE1230DD5, ++ 0x1B80, 0xE1230DD7, ++ 0x1B80, 0xF80B0DE5, ++ 0x1B80, 0xF80B0DE7, ++ 0x1B80, 0xF9110DF5, ++ 0x1B80, 0xF9110DF7, ++ 0x1B80, 0xE1580E05, ++ 0x1B80, 0xE1580E07, ++ 0x1B80, 0x67370E15, ++ 0x1B80, 0x67370E17, ++ 0x1B80, 0xE1580E25, ++ 0x1B80, 0xE1580E27, ++ 0x1B80, 0x672F0E35, ++ 0x1B80, 0x672F0E37, ++ 0x1B80, 0xE1580E45, ++ 0x1B80, 0xE1580E47, ++ 0x1B80, 0x67270E55, ++ 0x1B80, 0x67270E57, ++ 0x1B80, 0xE1580E65, ++ 0x1B80, 0xE1580E67, ++ 0x1B80, 0x671F0E75, ++ 0x1B80, 0x671F0E77, ++ 0x1B80, 0xE1580E85, ++ 0x1B80, 0xE1580E87, ++ 0x1B80, 0x67170E95, ++ 0x1B80, 0x67170E97, ++ 0x1B80, 0xE1580EA5, ++ 0x1B80, 0xE1580EA7, ++ 0x1B80, 0xF8020EB5, ++ 0x1B80, 0xF8020EB7, ++ 0x1B80, 0x30EE0EC5, ++ 0x1B80, 0x30EE0EC7, ++ 0x1B80, 0xE0D10ED5, ++ 0x1B80, 0xE0D10ED7, ++ 0x1B80, 0x670F0EE5, ++ 0x1B80, 0x670F0EE7, ++ 0x1B80, 0xE1580EF5, ++ 0x1B80, 0xE1580EF7, ++ 0x1B80, 0x67070F05, ++ 0x1B80, 0x67070F07, ++ 0x1B80, 0xE1580F15, ++ 0x1B80, 0xE1580F17, ++ 0x1B80, 0xF9020F25, ++ 0x1B80, 0xF9020F27, ++ 0x1B80, 0x30F50F35, ++ 0x1B80, 0x30F50F37, ++ 0x1B80, 0xE0CD0F45, ++ 0x1B80, 0xE0CD0F47, ++ 0x1B80, 0x06140F55, ++ 0x1B80, 0x06140F57, ++ 0x1B80, 0xE16C0F65, ++ 0x1B80, 0xE16C0F67, ++ 0x1B80, 0x5CF10F75, ++ 0x1B80, 0x5CF10F77, ++ 0x1B80, 0xE1580F85, ++ 0x1B80, 0xE1580F87, ++ 0x1B80, 0x06140F95, ++ 0x1B80, 0x06140F97, ++ 0x1B80, 0xE16C0FA5, ++ 0x1B80, 0xE16C0FA7, ++ 0x1B80, 0xF9020FB5, ++ 0x1B80, 0xF9020FB7, ++ 0x1B80, 0x30FF0FC5, ++ 0x1B80, 0x30FF0FC7, ++ 0x1B80, 0xE0CD0FD5, ++ 0x1B80, 0xE0CD0FD7, ++ 0x1B80, 0x31130FE5, ++ 0x1B80, 0x31130FE7, ++ 0x1B80, 0x670F0FF5, ++ 0x1B80, 0x670F0FF7, ++ 0x1B80, 0xE1581005, ++ 0x1B80, 0xE1581007, ++ 0x1B80, 0x67171015, ++ 0x1B80, 0x67171017, ++ 0x1B80, 0xE1581025, ++ 0x1B80, 0xE1581027, ++ 0x1B80, 0xF8021035, ++ 0x1B80, 0xF8021037, ++ 0x1B80, 0x31071045, ++ 0x1B80, 0x31071047, ++ 0x1B80, 0xE0D11055, ++ 0x1B80, 0xE0D11057, ++ 0x1B80, 0x31131065, ++ 0x1B80, 0x31131067, ++ 0x1B80, 0x670F1075, ++ 0x1B80, 0x670F1077, ++ 0x1B80, 0xE1581085, ++ 0x1B80, 0xE1581087, ++ 0x1B80, 0x671F1095, ++ 0x1B80, 0x671F1097, ++ 0x1B80, 0xE15810A5, ++ 0x1B80, 0xE15810A7, ++ 0x1B80, 0x672710B5, ++ 0x1B80, 0x672710B7, ++ 0x1B80, 0xE15810C5, ++ 0x1B80, 0xE15810C7, ++ 0x1B80, 0x672F10D5, ++ 0x1B80, 0x672F10D7, ++ 0x1B80, 0xE15810E5, ++ 0x1B80, 0xE15810E7, ++ 0x1B80, 0x673710F5, ++ 0x1B80, 0x673710F7, ++ 0x1B80, 0xE1581105, ++ 0x1B80, 0xE1581107, ++ 0x1B80, 0x673A1115, ++ 0x1B80, 0x673A1117, ++ 0x1B80, 0xE1581125, ++ 0x1B80, 0xE1581127, ++ 0x1B80, 0x4D101135, ++ 0x1B80, 0x4D101137, ++ 0x1B80, 0x30C41145, ++ 0x1B80, 0x30C41147, ++ 0x1B80, 0x00011155, ++ 0x1B80, 0x00011157, ++ 0x1B80, 0x6F241165, ++ 0x1B80, 0x6F241167, ++ 0x1B80, 0x6E401175, ++ 0x1B80, 0x6E401177, ++ 0x1B80, 0x6D001185, ++ 0x1B80, 0x6D001187, ++ 0x1B80, 0x55031195, ++ 0x1B80, 0x55031197, ++ 0x1B80, 0x312311A5, ++ 0x1B80, 0x312311A7, ++ 0x1B80, 0x6F1C11B5, ++ 0x1B80, 0x6F1C11B7, ++ 0x1B80, 0x6E4011C5, ++ 0x1B80, 0x6E4011C7, ++ 0x1B80, 0x550B11D5, ++ 0x1B80, 0x550B11D7, ++ 0x1B80, 0x312311E5, ++ 0x1B80, 0x312311E7, ++ 0x1B80, 0x061C11F5, ++ 0x1B80, 0x061C11F7, ++ 0x1B80, 0x54DE1205, ++ 0x1B80, 0x54DE1207, ++ 0x1B80, 0x06DC1215, ++ 0x1B80, 0x06DC1217, ++ 0x1B80, 0x55131225, ++ 0x1B80, 0x55131227, ++ 0x1B80, 0x74011235, ++ 0x1B80, 0x74011237, ++ 0x1B80, 0x74001245, ++ 0x1B80, 0x74001247, ++ 0x1B80, 0x8E001255, ++ 0x1B80, 0x8E001257, ++ 0x1B80, 0x00011265, ++ 0x1B80, 0x00011267, ++ 0x1B80, 0x57021275, ++ 0x1B80, 0x57021277, ++ 0x1B80, 0x57001285, ++ 0x1B80, 0x57001287, ++ 0x1B80, 0x97001295, ++ 0x1B80, 0x97001297, ++ 0x1B80, 0x000112A5, ++ 0x1B80, 0x000112A7, ++ 0x1B80, 0x54BF12B5, ++ 0x1B80, 0x54BF12B7, ++ 0x1B80, 0x54C112C5, ++ 0x1B80, 0x54C112C7, ++ 0x1B80, 0x54A212D5, ++ 0x1B80, 0x54A212D7, ++ 0x1B80, 0x54C012E5, ++ 0x1B80, 0x54C012E7, ++ 0x1B80, 0x54A112F5, ++ 0x1B80, 0x54A112F7, ++ 0x1B80, 0x54DF1305, ++ 0x1B80, 0x54DF1307, ++ 0x1B80, 0x00011315, ++ 0x1B80, 0x00011317, ++ 0x1B80, 0x55001325, ++ 0x1B80, 0x55001327, ++ 0x1B80, 0xE1231335, ++ 0x1B80, 0xE1231337, ++ 0x1B80, 0x54811345, ++ 0x1B80, 0x54811347, ++ 0x1B80, 0xE1231355, ++ 0x1B80, 0xE1231357, ++ 0x1B80, 0x54801365, ++ 0x1B80, 0x54801367, ++ 0x1B80, 0x002A1375, ++ 0x1B80, 0x002A1377, ++ 0x1B80, 0xE12B1385, ++ 0x1B80, 0xE12B1387, ++ 0x1B80, 0xE1231395, ++ 0x1B80, 0xE1231397, ++ 0x1B80, 0x548013A5, ++ 0x1B80, 0x548013A7, ++ 0x1B80, 0xE17213B5, ++ 0x1B80, 0xE17213B7, ++ 0x1B80, 0xBF3013C5, ++ 0x1B80, 0xBF3013C7, ++ 0x1B80, 0x000213D5, ++ 0x1B80, 0x000213D7, ++ 0x1B80, 0x302813E5, ++ 0x1B80, 0x302813E7, ++ 0x1B80, 0x4F7813F5, ++ 0x1B80, 0x4F7813F7, ++ 0x1B80, 0x4E001405, ++ 0x1B80, 0x4E001407, ++ 0x1B80, 0x53871415, ++ 0x1B80, 0x53871417, ++ 0x1B80, 0x52F11425, ++ 0x1B80, 0x52F11427, ++ 0x1B80, 0xE1161435, ++ 0x1B80, 0xE1161437, ++ 0x1B80, 0xE11B1445, ++ 0x1B80, 0xE11B1447, ++ 0x1B80, 0xE11F1455, ++ 0x1B80, 0xE11F1457, ++ 0x1B80, 0xE1271465, ++ 0x1B80, 0xE1271467, ++ 0x1B80, 0x54811475, ++ 0x1B80, 0x54811477, ++ 0x1B80, 0xE1161485, ++ 0x1B80, 0xE1161487, ++ 0x1B80, 0xE11B1495, ++ 0x1B80, 0xE11B1497, ++ 0x1B80, 0xE11F14A5, ++ 0x1B80, 0xE11F14A7, ++ 0x1B80, 0xE12714B5, ++ 0x1B80, 0xE12714B7, ++ 0x1B80, 0x548014C5, ++ 0x1B80, 0x548014C7, ++ 0x1B80, 0x002A14D5, ++ 0x1B80, 0x002A14D7, ++ 0x1B80, 0xE12B14E5, ++ 0x1B80, 0xE12B14E7, ++ 0x1B80, 0xE11614F5, ++ 0x1B80, 0xE11614F7, ++ 0x1B80, 0xE11B1505, ++ 0x1B80, 0xE11B1507, ++ 0x1B80, 0xE11F1515, ++ 0x1B80, 0xE11F1517, ++ 0x1B80, 0xE1271525, ++ 0x1B80, 0xE1271527, ++ 0x1B80, 0x54801535, ++ 0x1B80, 0x54801537, ++ 0x1B80, 0xE1721545, ++ 0x1B80, 0xE1721547, ++ 0x1B80, 0xBF171555, ++ 0x1B80, 0xBF171557, ++ 0x1B80, 0x00021565, ++ 0x1B80, 0x00021567, ++ 0x1B80, 0x30281575, ++ 0x1B80, 0x30281577, ++ 0x1B80, 0x06141585, ++ 0x1B80, 0x06141587, ++ 0x1B80, 0x73201595, ++ 0x1B80, 0x73201597, ++ 0x1B80, 0x720015A5, ++ 0x1B80, 0x720015A7, ++ 0x1B80, 0x710015B5, ++ 0x1B80, 0x710015B7, ++ 0x1B80, 0x550115C5, ++ 0x1B80, 0x550115C7, ++ 0x1B80, 0xE12315D5, ++ 0x1B80, 0xE12315D7, ++ 0x1B80, 0xE12715E5, ++ 0x1B80, 0xE12715E7, ++ 0x1B80, 0x548115F5, ++ 0x1B80, 0x548115F7, ++ 0x1B80, 0xE1231605, ++ 0x1B80, 0xE1231607, ++ 0x1B80, 0xE1271615, ++ 0x1B80, 0xE1271617, ++ 0x1B80, 0x54801625, ++ 0x1B80, 0x54801627, ++ 0x1B80, 0x002A1635, ++ 0x1B80, 0x002A1637, ++ 0x1B80, 0xE12B1645, ++ 0x1B80, 0xE12B1647, ++ 0x1B80, 0xE1231655, ++ 0x1B80, 0xE1231657, ++ 0x1B80, 0xE1271665, ++ 0x1B80, 0xE1271667, ++ 0x1B80, 0x54801675, ++ 0x1B80, 0x54801677, ++ 0x1B80, 0xE1721685, ++ 0x1B80, 0xE1721687, ++ 0x1B80, 0xBF031695, ++ 0x1B80, 0xBF031697, ++ 0x1B80, 0x000216A5, ++ 0x1B80, 0x000216A7, ++ 0x1B80, 0x302816B5, ++ 0x1B80, 0x302816B7, ++ 0x1B80, 0x54BF16C5, ++ 0x1B80, 0x54BF16C7, ++ 0x1B80, 0x54C516D5, ++ 0x1B80, 0x54C516D7, ++ 0x1B80, 0x050A16E5, ++ 0x1B80, 0x050A16E7, ++ 0x1B80, 0x071416F5, ++ 0x1B80, 0x071416F7, ++ 0x1B80, 0x54DF1705, ++ 0x1B80, 0x54DF1707, ++ 0x1B80, 0x00011715, ++ 0x1B80, 0x00011717, ++ 0x1B80, 0x54BF1725, ++ 0x1B80, 0x54BF1727, ++ 0x1B80, 0x54C01735, ++ 0x1B80, 0x54C01737, ++ 0x1B80, 0x54A31745, ++ 0x1B80, 0x54A31747, ++ 0x1B80, 0x54C11755, ++ 0x1B80, 0x54C11757, ++ 0x1B80, 0x54A41765, ++ 0x1B80, 0x54A41767, ++ 0x1B80, 0x4C831775, ++ 0x1B80, 0x4C831777, ++ 0x1B80, 0x4C031785, ++ 0x1B80, 0x4C031787, ++ 0x1B80, 0xBF0B1795, ++ 0x1B80, 0xBF0B1797, ++ 0x1B80, 0x54C217A5, ++ 0x1B80, 0x54C217A7, ++ 0x1B80, 0x54A417B5, ++ 0x1B80, 0x54A417B7, ++ 0x1B80, 0x4C8517C5, ++ 0x1B80, 0x4C8517C7, ++ 0x1B80, 0x4C0517D5, ++ 0x1B80, 0x4C0517D7, ++ 0x1B80, 0xBF0617E5, ++ 0x1B80, 0xBF0617E7, ++ 0x1B80, 0x54C117F5, ++ 0x1B80, 0x54C117F7, ++ 0x1B80, 0x54A31805, ++ 0x1B80, 0x54A31807, ++ 0x1B80, 0x4C861815, ++ 0x1B80, 0x4C861817, ++ 0x1B80, 0x4C061825, ++ 0x1B80, 0x4C061827, ++ 0x1B80, 0xBF011835, ++ 0x1B80, 0xBF011837, ++ 0x1B80, 0x54DF1845, ++ 0x1B80, 0x54DF1847, ++ 0x1B80, 0x00011855, ++ 0x1B80, 0x00011857, ++ 0x1B80, 0x00071865, ++ 0x1B80, 0x00071867, ++ 0x1B80, 0x54011875, ++ 0x1B80, 0x54011877, ++ 0x1B80, 0x00041885, ++ 0x1B80, 0x00041887, ++ 0x1B80, 0x56001895, ++ 0x1B80, 0x56001897, ++ 0x1B80, 0x5CF218A5, ++ 0x1B80, 0x5CF218A7, ++ 0x1B80, 0x630718B5, ++ 0x1B80, 0x630718B7, ++ 0x1B80, 0x620418C5, ++ 0x1B80, 0x620418C7, ++ 0x1B80, 0x610018D5, ++ 0x1B80, 0x610018D7, ++ 0x1B80, 0x670718E5, ++ 0x1B80, 0x670718E7, ++ 0x1B80, 0x660618F5, ++ 0x1B80, 0x660618F7, ++ 0x1B80, 0x6F201905, ++ 0x1B80, 0x6F201907, ++ 0x1B80, 0x6E001915, ++ 0x1B80, 0x6E001917, ++ 0x1B80, 0x6D001925, ++ 0x1B80, 0x6D001927, ++ 0x1B80, 0x6C031935, ++ 0x1B80, 0x6C031937, ++ 0x1B80, 0x73201945, ++ 0x1B80, 0x73201947, ++ 0x1B80, 0x72001955, ++ 0x1B80, 0x72001957, ++ 0x1B80, 0x71001965, ++ 0x1B80, 0x71001967, ++ 0x1B80, 0x7B201975, ++ 0x1B80, 0x7B201977, ++ 0x1B80, 0x7A001985, ++ 0x1B80, 0x7A001987, ++ 0x1B80, 0x79001995, ++ 0x1B80, 0x79001997, ++ 0x1B80, 0x7F2019A5, ++ 0x1B80, 0x7F2019A7, ++ 0x1B80, 0x7E0019B5, ++ 0x1B80, 0x7E0019B7, ++ 0x1B80, 0x7D0019C5, ++ 0x1B80, 0x7D0019C7, ++ 0x1B80, 0x090119D5, ++ 0x1B80, 0x090119D7, ++ 0x1B80, 0x0AC619E5, ++ 0x1B80, 0x0AC619E7, ++ 0x1B80, 0x0BA619F5, ++ 0x1B80, 0x0BA619F7, ++ 0x1B80, 0x0C011A05, ++ 0x1B80, 0x0C011A07, ++ 0x1B80, 0x0D021A15, ++ 0x1B80, 0x0D021A17, ++ 0x1B80, 0x0E041A25, ++ 0x1B80, 0x0E041A27, ++ 0x1B80, 0x0FFF1A35, ++ 0x1B80, 0x0FFF1A37, ++ 0x1B80, 0x4D041A45, ++ 0x1B80, 0x4D041A47, ++ 0x1B80, 0x28F81A55, ++ 0x1B80, 0x28F81A57, ++ 0x1B80, 0xE0001A65, ++ 0x1B80, 0xE0001A67, ++ 0x1B80, 0x4D001A75, ++ 0x1B80, 0x4D001A77, ++ 0x1B80, 0x00011A85, ++ 0x1B80, 0x00011A87, ++ 0x1B80, 0x4D041A95, ++ 0x1B80, 0x4D041A97, ++ 0x1B80, 0x2EF81AA5, ++ 0x1B80, 0x2EF81AA7, ++ 0x1B80, 0x00021AB5, ++ 0x1B80, 0x00021AB7, ++ 0x1B80, 0x23031AC5, ++ 0x1B80, 0x23031AC7, ++ 0x1B80, 0x00001AD5, ++ 0x1B80, 0x00001AD7, ++ 0x1B80, 0x23131AE5, ++ 0x1B80, 0x23131AE7, ++ 0x1B80, 0xE77F1AF5, ++ 0x1B80, 0xE77F1AF7, ++ 0x1B80, 0x232F1B05, ++ 0x1B80, 0x232F1B07, ++ 0x1B80, 0xEFBF1B15, ++ 0x1B80, 0xEFBF1B17, ++ 0x1B80, 0x2EF01B25, ++ 0x1B80, 0x2EF01B27, ++ 0x1B80, 0x00021B35, ++ 0x1B80, 0x00021B37, ++ 0x1B80, 0x4D001B45, ++ 0x1B80, 0x4D001B47, ++ 0x1B80, 0x00011B55, ++ 0x1B80, 0x00011B57, ++ 0x1B80, 0x4D041B65, ++ 0x1B80, 0x4D041B67, ++ 0x1B80, 0x2EF81B75, ++ 0x1B80, 0x2EF81B77, ++ 0x1B80, 0x00021B85, ++ 0x1B80, 0x00021B87, ++ 0x1B80, 0x23031B95, ++ 0x1B80, 0x23031B97, ++ 0x1B80, 0x00001BA5, ++ 0x1B80, 0x00001BA7, ++ 0x1B80, 0x23131BB5, ++ 0x1B80, 0x23131BB7, ++ 0x1B80, 0xE77F1BC5, ++ 0x1B80, 0xE77F1BC7, ++ 0x1B80, 0x232F1BD5, ++ 0x1B80, 0x232F1BD7, ++ 0x1B80, 0xE79F1BE5, ++ 0x1B80, 0xE79F1BE7, ++ 0x1B80, 0x2EF01BF5, ++ 0x1B80, 0x2EF01BF7, ++ 0x1B80, 0x00021C05, ++ 0x1B80, 0x00021C07, ++ 0x1B80, 0x28F81C15, ++ 0x1B80, 0x28F81C17, ++ 0x1B80, 0x80001C25, ++ 0x1B80, 0x80001C27, ++ 0x1B80, 0x4D001C35, ++ 0x1B80, 0x4D001C37, ++ 0x1B80, 0x00011C45, ++ 0x1B80, 0x00011C47, ++ 0x1B80, 0x00041C55, ++ 0x1B80, 0x00041C57, ++ 0x1B80, 0x6BC01C65, ++ 0x1B80, 0x6BC01C67, ++ 0x1B80, 0x4D041C75, ++ 0x1B80, 0x4D041C77, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x68241C85, ++ 0x1B80, 0x68241C87, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x68241C85, ++ 0x1B80, 0x68241C87, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x68241C85, ++ 0x1B80, 0x68241C87, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x68241C85, ++ 0x1B80, 0x68241C87, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x68241C85, ++ 0x1B80, 0x68241C87, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x68241C85, ++ 0x1B80, 0x68241C87, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x68241C85, ++ 0x1B80, 0x68241C87, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x68241C85, ++ 0x1B80, 0x68241C87, ++ 0xA0000000, 0x00000000, ++ 0x1B80, 0x68481C85, ++ 0x1B80, 0x68481C87, ++ 0xB0000000, 0x00000000, ++ 0x1B80, 0x66061C95, ++ 0x1B80, 0x66061C97, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x650C1CA5, ++ 0x1B80, 0x650C1CA7, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x650C1CA5, ++ 0x1B80, 0x650C1CA7, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x650C1CA5, ++ 0x1B80, 0x650C1CA7, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x650C1CA5, ++ 0x1B80, 0x650C1CA7, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x650C1CA5, ++ 0x1B80, 0x650C1CA7, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x650C1CA5, ++ 0x1B80, 0x650C1CA7, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x650C1CA5, ++ 0x1B80, 0x650C1CA7, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x650C1CA5, ++ 0x1B80, 0x650C1CA7, ++ 0xA0000000, 0x00000000, ++ 0x1B80, 0x65041CA5, ++ 0x1B80, 0x65041CA7, ++ 0xB0000000, 0x00000000, ++ 0x1B80, 0x64471CB5, ++ 0x1B80, 0x64471CB7, ++ 0x1B80, 0x23411CC5, ++ 0x1B80, 0x23411CC7, ++ 0x1B80, 0x100E1CD5, ++ 0x1B80, 0x100E1CD7, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x60101CE5, ++ 0x1B80, 0x60101CE7, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x60101CE5, ++ 0x1B80, 0x60101CE7, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x60101CE5, ++ 0x1B80, 0x60101CE7, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x60101CE5, ++ 0x1B80, 0x60101CE7, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x60101CE5, ++ 0x1B80, 0x60101CE7, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x60101CE5, ++ 0x1B80, 0x60101CE7, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x60101CE5, ++ 0x1B80, 0x60101CE7, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x60101CE5, ++ 0x1B80, 0x60101CE7, ++ 0xA0000000, 0x00000000, ++ 0x1B80, 0x60011CE5, ++ 0x1B80, 0x60011CE7, ++ 0xB0000000, 0x00000000, ++ 0x1B80, 0x23411CF5, ++ 0x1B80, 0x23411CF7, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x60811D05, ++ 0x1B80, 0x60811D07, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x60811D05, ++ 0x1B80, 0x60811D07, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x60811D05, ++ 0x1B80, 0x60811D07, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x60811D05, ++ 0x1B80, 0x60811D07, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x60811D05, ++ 0x1B80, 0x60811D07, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x60811D05, ++ 0x1B80, 0x60811D07, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x60811D05, ++ 0x1B80, 0x60811D07, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x60811D05, ++ 0x1B80, 0x60811D07, ++ 0xA0000000, 0x00000000, ++ 0x1B80, 0x60611D05, ++ 0x1B80, 0x60611D07, ++ 0xB0000000, 0x00000000, ++ 0x1B80, 0x23411D15, ++ 0x1B80, 0x23411D17, ++ 0x1B80, 0x70E11D25, ++ 0x1B80, 0x70E11D27, ++ 0x1B80, 0x4D001D35, ++ 0x1B80, 0x4D001D37, ++ 0x1B80, 0x00011D45, ++ 0x1B80, 0x00011D47, ++ 0x1B80, 0x00041D55, ++ 0x1B80, 0x00041D57, ++ 0x1B80, 0x6B401D65, ++ 0x1B80, 0x6B401D67, ++ 0x1B80, 0x4D041D75, ++ 0x1B80, 0x4D041D77, ++ 0x80000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x68241D85, ++ 0x1B80, 0x68241D87, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x68241D85, ++ 0x1B80, 0x68241D87, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x68241D85, ++ 0x1B80, 0x68241D87, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x68241D85, ++ 0x1B80, 0x68241D87, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x68241D85, ++ 0x1B80, 0x68241D87, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x68241D85, ++ 0x1B80, 0x68241D87, ++ 0xA0000000, 0x00000000, ++ 0x1B80, 0x68481D85, ++ 0x1B80, 0x68481D87, ++ 0xB0000000, 0x00000000, ++ 0x1B80, 0x66061D95, ++ 0x1B80, 0x66061D97, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x65081DA5, ++ 0x1B80, 0x65081DA7, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x65181DA5, ++ 0x1B80, 0x65181DA7, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x65181DA5, ++ 0x1B80, 0x65181DA7, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x65181DA5, ++ 0x1B80, 0x65181DA7, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x65181DA5, ++ 0x1B80, 0x65181DA7, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x65081DA5, ++ 0x1B80, 0x65081DA7, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x65181DA5, ++ 0x1B80, 0x65181DA7, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x65181DA5, ++ 0x1B80, 0x65181DA7, ++ 0xA0000000, 0x00000000, ++ 0x1B80, 0x65081DA5, ++ 0x1B80, 0x65081DA7, ++ 0xB0000000, 0x00000000, ++ 0x80000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x64481DB5, ++ 0x1B80, 0x64481DB7, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x64481DB5, ++ 0x1B80, 0x64481DB7, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x64481DB5, ++ 0x1B80, 0x64481DB7, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x64481DB5, ++ 0x1B80, 0x64481DB7, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x64481DB5, ++ 0x1B80, 0x64481DB7, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x64481DB5, ++ 0x1B80, 0x64481DB7, ++ 0xA0000000, 0x00000000, ++ 0x1B80, 0x64471DB5, ++ 0x1B80, 0x64471DB7, ++ 0xB0000000, 0x00000000, ++ 0x1B80, 0x23411DC5, ++ 0x1B80, 0x23411DC7, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x11E41DD5, ++ 0x1B80, 0x11E41DD7, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x11E81DD5, ++ 0x1B80, 0x11E81DD7, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x11E81DD5, ++ 0x1B80, 0x11E81DD7, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x11E81DD5, ++ 0x1B80, 0x11E81DD7, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x11E81DD5, ++ 0x1B80, 0x11E81DD7, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x11E41DD5, ++ 0x1B80, 0x11E41DD7, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x11E81DD5, ++ 0x1B80, 0x11E81DD7, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x11E81DD5, ++ 0x1B80, 0x11E81DD7, ++ 0xA0000000, 0x00000000, ++ 0x1B80, 0x11E41DD5, ++ 0x1B80, 0x11E41DD7, ++ 0xB0000000, 0x00000000, ++ 0x1B80, 0x60011DE5, ++ 0x1B80, 0x60011DE7, ++ 0x1B80, 0x23411DF5, ++ 0x1B80, 0x23411DF7, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x60E11E05, ++ 0x1B80, 0x60E11E07, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x61E11E05, ++ 0x1B80, 0x61E11E07, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x61E11E05, ++ 0x1B80, 0x61E11E07, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x61E11E05, ++ 0x1B80, 0x61E11E07, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x61E11E05, ++ 0x1B80, 0x61E11E07, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x60E11E05, ++ 0x1B80, 0x60E11E07, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x61E11E05, ++ 0x1B80, 0x61E11E07, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x1B80, 0x61E11E05, ++ 0x1B80, 0x61E11E07, ++ 0xA0000000, 0x00000000, ++ 0x1B80, 0x60E11E05, ++ 0x1B80, 0x60E11E07, ++ 0xB0000000, 0x00000000, ++ 0x1B80, 0x23411E15, ++ 0x1B80, 0x23411E17, ++ 0x1B80, 0x70611E25, ++ 0x1B80, 0x70611E27, ++ 0x1B80, 0x4D001E35, ++ 0x1B80, 0x4D001E37, ++ 0x1B80, 0x00011E45, ++ 0x1B80, 0x00011E47, ++ 0x1B80, 0x00001E55, ++ 0x1B80, 0x00001E57, ++ 0x1B80, 0x00001E65, ++ 0x1B80, 0x00001E67, ++ 0x1B80, 0x00001E75, ++ 0x1B80, 0x00001E77, ++ 0x1B80, 0x00001E85, ++ 0x1B80, 0x00001E87, ++ 0x1B80, 0x00001E95, ++ 0x1B80, 0x00001E97, ++ 0x1B80, 0x00001EA5, ++ 0x1B80, 0x00001EA7, ++ 0x1B80, 0x00001EB5, ++ 0x1B80, 0x00001EB7, ++ 0x1B80, 0x00001EC5, ++ 0x1B80, 0x00001EC7, ++ 0x1B80, 0x00001ED5, ++ 0x1B80, 0x00001ED7, ++ 0x1B80, 0x00001EE5, ++ 0x1B80, 0x00001EE7, ++ 0x1B80, 0x00001EF5, ++ 0x1B80, 0x00001EF7, ++ 0x1B80, 0x00001F05, ++ 0x1B80, 0x00001F07, ++ 0x1B80, 0x00001F15, ++ 0x1B80, 0x00001F17, ++ 0x1B80, 0x00001F25, ++ 0x1B80, 0x00001F27, ++ 0x1B80, 0x00001F35, ++ 0x1B80, 0x00001F37, ++ 0x1B80, 0x00001F45, ++ 0x1B80, 0x00001F47, ++ 0x1B80, 0x00001F55, ++ 0x1B80, 0x00001F57, ++ 0x1B80, 0x00001F65, ++ 0x1B80, 0x00001F67, ++ 0x1B80, 0x00001F75, ++ 0x1B80, 0x00001F77, ++ 0x1B80, 0x00001F85, ++ 0x1B80, 0x00001F87, ++ 0x1B80, 0x00001F95, ++ 0x1B80, 0x00001F97, ++ 0x1B80, 0x00001FA5, ++ 0x1B80, 0x00001FA7, ++ 0x1B80, 0x00001FB5, ++ 0x1B80, 0x00001FB7, ++ 0x1B80, 0x00001FC5, ++ 0x1B80, 0x00001FC7, ++ 0x1B80, 0x00001FD5, ++ 0x1B80, 0x00001FD7, ++ 0x1B80, 0x00001FE5, ++ 0x1B80, 0x00001FE7, ++ 0x1B80, 0x00001FF5, ++ 0x1B80, 0x00001FF7, ++ 0x1B80, 0x00000006, ++ 0x1B80, 0x00000002, ++}; ++ ++RTW_DECL_TABLE_PHY_COND(rtw8814a_bb, rtw_phy_cfg_bb); ++ ++static const struct rtw_phy_pg_cfg_pair rtw8814a_bb_pg[] = { ++ { 0, 0, 0, 0x00000c20, 0xffffffff, 0x34343434, }, ++ { 0, 0, 0, 0x00000c24, 0xffffffff, 0x34343434, }, ++ { 0, 0, 0, 0x00000c28, 0xffffffff, 0x30323434, }, ++ { 0, 0, 0, 0x00000c2c, 0xffffffff, 0x34343434, }, ++ { 0, 0, 0, 0x00000c30, 0xffffffff, 0x28303234, }, ++ { 0, 0, 1, 0x00000c34, 0xffffffff, 0x32323232, }, ++ { 0, 0, 1, 0x00000c38, 0xffffffff, 0x26283032, }, ++ { 0, 0, 2, 0x00000cd8, 0xffffffff, 0x30303030, }, ++ { 0, 0, 2, 0x00000cdc, 0xffffffff, 0x24262830, }, ++ { 0, 0, 0, 0x00000c3c, 0xffffffff, 0x34343434, }, ++ { 0, 0, 0, 0x00000c40, 0xffffffff, 0x28303234, }, ++ { 0, 0, 0, 0x00000c44, 0xffffffff, 0x32322426, }, ++ { 0, 0, 1, 0x00000c48, 0xffffffff, 0x30323232, }, ++ { 0, 0, 1, 0x00000c4c, 0xffffffff, 0x22242628, }, ++ { 0, 0, 2, 0x00000ce0, 0xffffffff, 0x30303030, }, ++ { 0, 0, 2, 0x00000ce4, 0xffffffff, 0x24262830, }, ++ { 0, 0, 2, 0x00000ce8, 0x0000ffff, 0x20222222, }, ++ { 0, 1, 0, 0x00000e20, 0xffffffff, 0x34343434, }, ++ { 0, 1, 0, 0x00000e24, 0xffffffff, 0x34343434, }, ++ { 0, 1, 0, 0x00000e28, 0xffffffff, 0x30323434, }, ++ { 0, 1, 0, 0x00000e2c, 0xffffffff, 0x34343434, }, ++ { 0, 1, 0, 0x00000e30, 0xffffffff, 0x28303234, }, ++ { 0, 1, 1, 0x00000e34, 0xffffffff, 0x32323232, }, ++ { 0, 1, 1, 0x00000e38, 0xffffffff, 0x26283032, }, ++ { 0, 1, 2, 0x00000ed8, 0xffffffff, 0x30303030, }, ++ { 0, 1, 2, 0x00000edc, 0xffffffff, 0x24262830, }, ++ { 0, 1, 0, 0x00000e3c, 0xffffffff, 0x34343434, }, ++ { 0, 1, 0, 0x00000e40, 0xffffffff, 0x28303234, }, ++ { 0, 1, 0, 0x00000e44, 0xffffffff, 0x32322426, }, ++ { 0, 1, 1, 0x00000e48, 0xffffffff, 0x30323232, }, ++ { 0, 1, 1, 0x00000e4c, 0xffffffff, 0x22242628, }, ++ { 0, 1, 2, 0x00000ee0, 0xffffffff, 0x30303030, }, ++ { 0, 1, 2, 0x00000ee4, 0xffffffff, 0x24262830, }, ++ { 0, 1, 2, 0x00000ee8, 0x0000ffff, 0x20222222, }, ++ { 0, 2, 0, 0x00001820, 0xffffffff, 0x34343434, }, ++ { 0, 2, 0, 0x00001824, 0xffffffff, 0x34343434, }, ++ { 0, 2, 0, 0x00001828, 0xffffffff, 0x30323434, }, ++ { 0, 2, 0, 0x0000182c, 0xffffffff, 0x34343434, }, ++ { 0, 2, 0, 0x00001830, 0xffffffff, 0x28303234, }, ++ { 0, 2, 1, 0x00001834, 0xffffffff, 0x32323232, }, ++ { 0, 2, 1, 0x00001838, 0xffffffff, 0x26283032, }, ++ { 0, 2, 2, 0x000018d8, 0xffffffff, 0x30303030, }, ++ { 0, 2, 2, 0x000018dc, 0xffffffff, 0x24262830, }, ++ { 0, 2, 0, 0x0000183c, 0xffffffff, 0x34343434, }, ++ { 0, 2, 0, 0x00001840, 0xffffffff, 0x28303234, }, ++ { 0, 2, 0, 0x00001844, 0xffffffff, 0x32322426, }, ++ { 0, 2, 1, 0x00001848, 0xffffffff, 0x30323232, }, ++ { 0, 2, 1, 0x0000184c, 0xffffffff, 0x22242628, }, ++ { 0, 2, 2, 0x000018e0, 0xffffffff, 0x30303030, }, ++ { 0, 2, 2, 0x000018e4, 0xffffffff, 0x24262830, }, ++ { 0, 2, 2, 0x000018e8, 0x0000ffff, 0x20222222, }, ++ { 0, 3, 0, 0x00001a20, 0xffffffff, 0x34343434, }, ++ { 0, 3, 0, 0x00001a24, 0xffffffff, 0x34343434, }, ++ { 0, 3, 0, 0x00001a28, 0xffffffff, 0x30323434, }, ++ { 0, 3, 0, 0x00001a2c, 0xffffffff, 0x34343434, }, ++ { 0, 3, 0, 0x00001a30, 0xffffffff, 0x28303234, }, ++ { 0, 3, 1, 0x00001a34, 0xffffffff, 0x32323232, }, ++ { 0, 3, 1, 0x00001a38, 0xffffffff, 0x26283032, }, ++ { 0, 3, 2, 0x00001ad8, 0xffffffff, 0x30303030, }, ++ { 0, 3, 2, 0x00001adc, 0xffffffff, 0x24262830, }, ++ { 0, 3, 0, 0x00001a3c, 0xffffffff, 0x34343434, }, ++ { 0, 3, 0, 0x00001a40, 0xffffffff, 0x28303234, }, ++ { 0, 3, 0, 0x00001a44, 0xffffffff, 0x32322426, }, ++ { 0, 3, 1, 0x00001a48, 0xffffffff, 0x30323232, }, ++ { 0, 3, 1, 0x00001a4c, 0xffffffff, 0x22242628, }, ++ { 0, 3, 2, 0x00001ae0, 0xffffffff, 0x30303030, }, ++ { 0, 3, 2, 0x00001ae4, 0xffffffff, 0x24262830, }, ++ { 0, 3, 2, 0x00001ae8, 0x0000ffff, 0x20222222, }, ++ { 1, 0, 0, 0x00000c24, 0xffffffff, 0x34343434, }, ++ { 1, 0, 0, 0x00000c28, 0xffffffff, 0x30323434, }, ++ { 1, 0, 0, 0x00000c2c, 0xffffffff, 0x34343434, }, ++ { 1, 0, 0, 0x00000c30, 0xffffffff, 0x28303234, }, ++ { 1, 0, 1, 0x00000c34, 0xffffffff, 0x32323232, }, ++ { 1, 0, 1, 0x00000c38, 0xffffffff, 0x26283032, }, ++ { 1, 0, 2, 0x00000cd8, 0xffffffff, 0x30303030, }, ++ { 1, 0, 2, 0x00000cdc, 0xffffffff, 0x24262830, }, ++ { 1, 0, 0, 0x00000c3c, 0xffffffff, 0x34343434, }, ++ { 1, 0, 0, 0x00000c40, 0xffffffff, 0x28303234, }, ++ { 1, 0, 0, 0x00000c44, 0xffffffff, 0x32322426, }, ++ { 1, 0, 1, 0x00000c48, 0xffffffff, 0x30323232, }, ++ { 1, 0, 1, 0x00000c4c, 0xffffffff, 0x22242628, }, ++ { 1, 0, 2, 0x00000ce0, 0xffffffff, 0x30303030, }, ++ { 1, 0, 2, 0x00000ce4, 0xffffffff, 0x24262830, }, ++ { 1, 0, 2, 0x00000ce8, 0x0000ffff, 0x20222222, }, ++ { 1, 1, 0, 0x00000e24, 0xffffffff, 0x34343434, }, ++ { 1, 1, 0, 0x00000e28, 0xffffffff, 0x30323434, }, ++ { 1, 1, 0, 0x00000e2c, 0xffffffff, 0x34343434, }, ++ { 1, 1, 0, 0x00000e30, 0xffffffff, 0x28303234, }, ++ { 1, 1, 1, 0x00000e34, 0xffffffff, 0x32323232, }, ++ { 1, 1, 1, 0x00000e38, 0xffffffff, 0x26283032, }, ++ { 1, 1, 2, 0x00000ed8, 0xffffffff, 0x30303030, }, ++ { 1, 1, 2, 0x00000edc, 0xffffffff, 0x24262830, }, ++ { 1, 1, 0, 0x00000e3c, 0xffffffff, 0x34343434, }, ++ { 1, 1, 0, 0x00000e40, 0xffffffff, 0x28303234, }, ++ { 1, 1, 0, 0x00000e44, 0xffffffff, 0x32322426, }, ++ { 1, 1, 1, 0x00000e48, 0xffffffff, 0x30323232, }, ++ { 1, 1, 1, 0x00000e4c, 0xffffffff, 0x22242628, }, ++ { 1, 1, 2, 0x00000ee0, 0xffffffff, 0x30303030, }, ++ { 1, 1, 2, 0x00000ee4, 0xffffffff, 0x24262830, }, ++ { 1, 1, 2, 0x00000ee8, 0x0000ffff, 0x20222222, }, ++ { 1, 2, 0, 0x00001824, 0xffffffff, 0x34343434, }, ++ { 1, 2, 0, 0x00001828, 0xffffffff, 0x30323434, }, ++ { 1, 2, 0, 0x0000182c, 0xffffffff, 0x34343434, }, ++ { 1, 2, 0, 0x00001830, 0xffffffff, 0x28303234, }, ++ { 1, 2, 1, 0x00001834, 0xffffffff, 0x32323232, }, ++ { 1, 2, 1, 0x00001838, 0xffffffff, 0x26283032, }, ++ { 1, 2, 2, 0x000018d8, 0xffffffff, 0x30303030, }, ++ { 1, 2, 2, 0x000018dc, 0xffffffff, 0x24262830, }, ++ { 1, 2, 0, 0x0000183c, 0xffffffff, 0x34343434, }, ++ { 1, 2, 0, 0x00001840, 0xffffffff, 0x28303234, }, ++ { 1, 2, 0, 0x00001844, 0xffffffff, 0x32322426, }, ++ { 1, 2, 1, 0x00001848, 0xffffffff, 0x30323232, }, ++ { 1, 2, 1, 0x0000184c, 0xffffffff, 0x22242628, }, ++ { 1, 2, 2, 0x000018e0, 0xffffffff, 0x30303030, }, ++ { 1, 2, 2, 0x000018e4, 0xffffffff, 0x24262830, }, ++ { 1, 2, 2, 0x000018e8, 0x0000ffff, 0x20222222, }, ++ { 1, 3, 0, 0x00001a24, 0xffffffff, 0x34343434, }, ++ { 1, 3, 0, 0x00001a28, 0xffffffff, 0x30323434, }, ++ { 1, 3, 0, 0x00001a2c, 0xffffffff, 0x34343434, }, ++ { 1, 3, 0, 0x00001a30, 0xffffffff, 0x28303234, }, ++ { 1, 3, 1, 0x00001a34, 0xffffffff, 0x32323232, }, ++ { 1, 3, 1, 0x00001a38, 0xffffffff, 0x26283032, }, ++ { 1, 3, 2, 0x00001ad8, 0xffffffff, 0x30303030, }, ++ { 1, 3, 2, 0x00001adc, 0xffffffff, 0x24262830, }, ++ { 1, 3, 0, 0x00001a3c, 0xffffffff, 0x34343434, }, ++ { 1, 3, 0, 0x00001a40, 0xffffffff, 0x28303234, }, ++ { 1, 3, 0, 0x00001a44, 0xffffffff, 0x32322426, }, ++ { 1, 3, 1, 0x00001a48, 0xffffffff, 0x30323232, }, ++ { 1, 3, 1, 0x00001a4c, 0xffffffff, 0x22242628, }, ++ { 1, 3, 2, 0x00001ae0, 0xffffffff, 0x30303030, }, ++ { 1, 3, 2, 0x00001ae4, 0xffffffff, 0x24262830, }, ++ { 1, 3, 2, 0x00001ae8, 0x0000ffff, 0x20222222, }, ++}; ++ ++RTW_DECL_TABLE_BB_PG(rtw8814a_bb_pg); ++ ++static const struct rtw_phy_pg_cfg_pair rtw8814a_bb_pg_type0[] = { ++ { 0, 0, 0, 0x00000c20, 0xffffffff, 0x32323232, }, ++ { 0, 0, 0, 0x00000c24, 0xffffffff, 0x32323232, }, ++ { 0, 0, 0, 0x00000c28, 0xffffffff, 0x28303232, }, ++ { 0, 0, 0, 0x00000c2c, 0xffffffff, 0x32323232, }, ++ { 0, 0, 0, 0x00000c30, 0xffffffff, 0x26283032, }, ++ { 0, 0, 1, 0x00000c34, 0xffffffff, 0x30303030, }, ++ { 0, 0, 1, 0x00000c38, 0xffffffff, 0x24262830, }, ++ { 0, 0, 2, 0x00000cd8, 0xffffffff, 0x28282828, }, ++ { 0, 0, 2, 0x00000cdc, 0xffffffff, 0x22242628, }, ++ { 0, 0, 0, 0x00000c3c, 0xffffffff, 0x32323232, }, ++ { 0, 0, 0, 0x00000c40, 0xffffffff, 0x26283032, }, ++ { 0, 0, 0, 0x00000c44, 0xffffffff, 0x30302224, }, ++ { 0, 0, 1, 0x00000c48, 0xffffffff, 0x28303030, }, ++ { 0, 0, 1, 0x00000c4c, 0xffffffff, 0x20222426, }, ++ { 0, 0, 2, 0x00000ce0, 0xffffffff, 0x28282828, }, ++ { 0, 0, 2, 0x00000ce4, 0xffffffff, 0x22242628, }, ++ { 0, 0, 2, 0x00000ce8, 0x0000ffff, 0x18202020, }, ++ { 0, 1, 0, 0x00000e20, 0xffffffff, 0x32323232, }, ++ { 0, 1, 0, 0x00000e24, 0xffffffff, 0x32323232, }, ++ { 0, 1, 0, 0x00000e28, 0xffffffff, 0x28303232, }, ++ { 0, 1, 0, 0x00000e2c, 0xffffffff, 0x32323232, }, ++ { 0, 1, 0, 0x00000e30, 0xffffffff, 0x26283032, }, ++ { 0, 1, 1, 0x00000e34, 0xffffffff, 0x30303030, }, ++ { 0, 1, 1, 0x00000e38, 0xffffffff, 0x24262830, }, ++ { 0, 1, 2, 0x00000ed8, 0xffffffff, 0x28282828, }, ++ { 0, 1, 2, 0x00000edc, 0xffffffff, 0x22242628, }, ++ { 0, 1, 0, 0x00000e3c, 0xffffffff, 0x32323232, }, ++ { 0, 1, 0, 0x00000e40, 0xffffffff, 0x26283032, }, ++ { 0, 1, 0, 0x00000e44, 0xffffffff, 0x30302224, }, ++ { 0, 1, 1, 0x00000e48, 0xffffffff, 0x28303030, }, ++ { 0, 1, 1, 0x00000e4c, 0xffffffff, 0x20222426, }, ++ { 0, 1, 2, 0x00000ee0, 0xffffffff, 0x28282828, }, ++ { 0, 1, 2, 0x00000ee4, 0xffffffff, 0x22242628, }, ++ { 0, 1, 2, 0x00000ee8, 0x0000ffff, 0x18202020, }, ++ { 0, 2, 0, 0x00001820, 0xffffffff, 0x32323232, }, ++ { 0, 2, 0, 0x00001824, 0xffffffff, 0x32323232, }, ++ { 0, 2, 0, 0x00001828, 0xffffffff, 0x28303232, }, ++ { 0, 2, 0, 0x0000182c, 0xffffffff, 0x32323232, }, ++ { 0, 2, 0, 0x00001830, 0xffffffff, 0x26283032, }, ++ { 0, 2, 1, 0x00001834, 0xffffffff, 0x30303030, }, ++ { 0, 2, 1, 0x00001838, 0xffffffff, 0x24262830, }, ++ { 0, 2, 2, 0x000018d8, 0xffffffff, 0x28282828, }, ++ { 0, 2, 2, 0x000018dc, 0xffffffff, 0x22242628, }, ++ { 0, 2, 0, 0x0000183c, 0xffffffff, 0x32323232, }, ++ { 0, 2, 0, 0x00001840, 0xffffffff, 0x26283032, }, ++ { 0, 2, 0, 0x00001844, 0xffffffff, 0x30302224, }, ++ { 0, 2, 1, 0x00001848, 0xffffffff, 0x28303030, }, ++ { 0, 2, 1, 0x0000184c, 0xffffffff, 0x20222426, }, ++ { 0, 2, 2, 0x000018e0, 0xffffffff, 0x28282828, }, ++ { 0, 2, 2, 0x000018e4, 0xffffffff, 0x22242628, }, ++ { 0, 2, 2, 0x000018e8, 0x0000ffff, 0x18202020, }, ++ { 0, 3, 0, 0x00001a20, 0xffffffff, 0x32323232, }, ++ { 0, 3, 0, 0x00001a24, 0xffffffff, 0x32323232, }, ++ { 0, 3, 0, 0x00001a28, 0xffffffff, 0x28303232, }, ++ { 0, 3, 0, 0x00001a2c, 0xffffffff, 0x32323232, }, ++ { 0, 3, 0, 0x00001a30, 0xffffffff, 0x26283032, }, ++ { 0, 3, 1, 0x00001a34, 0xffffffff, 0x30303030, }, ++ { 0, 3, 1, 0x00001a38, 0xffffffff, 0x24262830, }, ++ { 0, 3, 2, 0x00001ad8, 0xffffffff, 0x28282828, }, ++ { 0, 3, 2, 0x00001adc, 0xffffffff, 0x22242628, }, ++ { 0, 3, 0, 0x00001a3c, 0xffffffff, 0x32323232, }, ++ { 0, 3, 0, 0x00001a40, 0xffffffff, 0x26283032, }, ++ { 0, 3, 0, 0x00001a44, 0xffffffff, 0x30302224, }, ++ { 0, 3, 1, 0x00001a48, 0xffffffff, 0x28303030, }, ++ { 0, 3, 1, 0x00001a4c, 0xffffffff, 0x20222426, }, ++ { 0, 3, 2, 0x00001ae0, 0xffffffff, 0x28282828, }, ++ { 0, 3, 2, 0x00001ae4, 0xffffffff, 0x22242628, }, ++ { 0, 3, 2, 0x00001ae8, 0x0000ffff, 0x18202020, }, ++ { 1, 0, 0, 0x00000c24, 0xffffffff, 0x32323232, }, ++ { 1, 0, 0, 0x00000c28, 0xffffffff, 0x28303232, }, ++ { 1, 0, 0, 0x00000c2c, 0xffffffff, 0x32323232, }, ++ { 1, 0, 0, 0x00000c30, 0xffffffff, 0x26283032, }, ++ { 1, 0, 1, 0x00000c34, 0xffffffff, 0x30303030, }, ++ { 1, 0, 1, 0x00000c38, 0xffffffff, 0x24262830, }, ++ { 1, 0, 2, 0x00000cd8, 0xffffffff, 0x28282828, }, ++ { 1, 0, 2, 0x00000cdc, 0xffffffff, 0x22242628, }, ++ { 1, 0, 0, 0x00000c3c, 0xffffffff, 0x32323232, }, ++ { 1, 0, 0, 0x00000c40, 0xffffffff, 0x26283032, }, ++ { 1, 0, 0, 0x00000c44, 0xffffffff, 0x30302224, }, ++ { 1, 0, 1, 0x00000c48, 0xffffffff, 0x28303030, }, ++ { 1, 0, 1, 0x00000c4c, 0xffffffff, 0x20222426, }, ++ { 1, 0, 2, 0x00000ce0, 0xffffffff, 0x28282828, }, ++ { 1, 0, 2, 0x00000ce4, 0xffffffff, 0x22242628, }, ++ { 1, 0, 2, 0x00000ce8, 0x0000ffff, 0x18202020, }, ++ { 1, 1, 0, 0x00000e24, 0xffffffff, 0x32323232, }, ++ { 1, 1, 0, 0x00000e28, 0xffffffff, 0x28303232, }, ++ { 1, 1, 0, 0x00000e2c, 0xffffffff, 0x32323232, }, ++ { 1, 1, 0, 0x00000e30, 0xffffffff, 0x26283032, }, ++ { 1, 1, 1, 0x00000e34, 0xffffffff, 0x30303030, }, ++ { 1, 1, 1, 0x00000e38, 0xffffffff, 0x24262830, }, ++ { 1, 1, 2, 0x00000ed8, 0xffffffff, 0x28282828, }, ++ { 1, 1, 2, 0x00000edc, 0xffffffff, 0x22242628, }, ++ { 1, 1, 0, 0x00000e3c, 0xffffffff, 0x32323232, }, ++ { 1, 1, 0, 0x00000e40, 0xffffffff, 0x26283032, }, ++ { 1, 1, 0, 0x00000e44, 0xffffffff, 0x30302224, }, ++ { 1, 1, 1, 0x00000e48, 0xffffffff, 0x28303030, }, ++ { 1, 1, 1, 0x00000e4c, 0xffffffff, 0x20222426, }, ++ { 1, 1, 2, 0x00000ee0, 0xffffffff, 0x28282828, }, ++ { 1, 1, 2, 0x00000ee4, 0xffffffff, 0x22242628, }, ++ { 1, 1, 2, 0x00000ee8, 0x0000ffff, 0x18202020, }, ++ { 1, 2, 0, 0x00001824, 0xffffffff, 0x32323232, }, ++ { 1, 2, 0, 0x00001828, 0xffffffff, 0x28303232, }, ++ { 1, 2, 0, 0x0000182c, 0xffffffff, 0x32323232, }, ++ { 1, 2, 0, 0x00001830, 0xffffffff, 0x26283032, }, ++ { 1, 2, 1, 0x00001834, 0xffffffff, 0x30303030, }, ++ { 1, 2, 1, 0x00001838, 0xffffffff, 0x24262830, }, ++ { 1, 2, 2, 0x000018d8, 0xffffffff, 0x28282828, }, ++ { 1, 2, 2, 0x000018dc, 0xffffffff, 0x22242628, }, ++ { 1, 2, 0, 0x0000183c, 0xffffffff, 0x32323232, }, ++ { 1, 2, 0, 0x00001840, 0xffffffff, 0x26283032, }, ++ { 1, 2, 0, 0x00001844, 0xffffffff, 0x30302224, }, ++ { 1, 2, 1, 0x00001848, 0xffffffff, 0x28303030, }, ++ { 1, 2, 1, 0x0000184c, 0xffffffff, 0x20222426, }, ++ { 1, 2, 2, 0x000018e0, 0xffffffff, 0x28282828, }, ++ { 1, 2, 2, 0x000018e4, 0xffffffff, 0x22242628, }, ++ { 1, 2, 2, 0x000018e8, 0x0000ffff, 0x18202020, }, ++ { 1, 3, 0, 0x00001a24, 0xffffffff, 0x32323232, }, ++ { 1, 3, 0, 0x00001a28, 0xffffffff, 0x28303232, }, ++ { 1, 3, 0, 0x00001a2c, 0xffffffff, 0x32323232, }, ++ { 1, 3, 0, 0x00001a30, 0xffffffff, 0x26283032, }, ++ { 1, 3, 1, 0x00001a34, 0xffffffff, 0x30303030, }, ++ { 1, 3, 1, 0x00001a38, 0xffffffff, 0x24262830, }, ++ { 1, 3, 2, 0x00001ad8, 0xffffffff, 0x28282828, }, ++ { 1, 3, 2, 0x00001adc, 0xffffffff, 0x22242628, }, ++ { 1, 3, 0, 0x00001a3c, 0xffffffff, 0x32323232, }, ++ { 1, 3, 0, 0x00001a40, 0xffffffff, 0x26283032, }, ++ { 1, 3, 0, 0x00001a44, 0xffffffff, 0x30302224, }, ++ { 1, 3, 1, 0x00001a48, 0xffffffff, 0x28303030, }, ++ { 1, 3, 1, 0x00001a4c, 0xffffffff, 0x20222426, }, ++ { 1, 3, 2, 0x00001ae0, 0xffffffff, 0x28282828, }, ++ { 1, 3, 2, 0x00001ae4, 0xffffffff, 0x22242628, }, ++ { 1, 3, 2, 0x00001ae8, 0x0000ffff, 0x18202020, }, ++}; ++ ++RTW_DECL_TABLE_BB_PG(rtw8814a_bb_pg_type0); ++ ++static const struct rtw_phy_pg_cfg_pair rtw8814a_bb_pg_type2[] = { ++ { 0, 0, 0, 0x00000c20, 0xffffffff, 0x34343434, }, ++ { 0, 0, 0, 0x00000c24, 0xffffffff, 0x34343434, }, ++ { 0, 0, 0, 0x00000c28, 0xffffffff, 0x30323434, }, ++ { 0, 0, 0, 0x00000c2c, 0xffffffff, 0x34343434, }, ++ { 0, 0, 0, 0x00000c30, 0xffffffff, 0x28303234, }, ++ { 0, 0, 1, 0x00000c34, 0xffffffff, 0x32323232, }, ++ { 0, 0, 1, 0x00000c38, 0xffffffff, 0x26283032, }, ++ { 0, 0, 2, 0x00000cd8, 0xffffffff, 0x30303030, }, ++ { 0, 0, 2, 0x00000cdc, 0xffffffff, 0x24262830, }, ++ { 0, 0, 0, 0x00000c3c, 0xffffffff, 0x34343434, }, ++ { 0, 0, 0, 0x00000c40, 0xffffffff, 0x28303234, }, ++ { 0, 0, 0, 0x00000c44, 0xffffffff, 0x32322426, }, ++ { 0, 0, 1, 0x00000c48, 0xffffffff, 0x30323232, }, ++ { 0, 0, 1, 0x00000c4c, 0xffffffff, 0x22242628, }, ++ { 0, 0, 2, 0x00000ce0, 0xffffffff, 0x30303030, }, ++ { 0, 0, 2, 0x00000ce4, 0xffffffff, 0x24262830, }, ++ { 0, 0, 2, 0x00000ce8, 0x0000ffff, 0x20222222, }, ++ { 0, 1, 0, 0x00000e20, 0xffffffff, 0x34343434, }, ++ { 0, 1, 0, 0x00000e24, 0xffffffff, 0x34343434, }, ++ { 0, 1, 0, 0x00000e28, 0xffffffff, 0x30323434, }, ++ { 0, 1, 0, 0x00000e2c, 0xffffffff, 0x34343434, }, ++ { 0, 1, 0, 0x00000e30, 0xffffffff, 0x28303234, }, ++ { 0, 1, 1, 0x00000e34, 0xffffffff, 0x32323232, }, ++ { 0, 1, 1, 0x00000e38, 0xffffffff, 0x26283032, }, ++ { 0, 1, 2, 0x00000ed8, 0xffffffff, 0x30303030, }, ++ { 0, 1, 2, 0x00000edc, 0xffffffff, 0x24262830, }, ++ { 0, 1, 0, 0x00000e3c, 0xffffffff, 0x34343434, }, ++ { 0, 1, 0, 0x00000e40, 0xffffffff, 0x28303234, }, ++ { 0, 1, 0, 0x00000e44, 0xffffffff, 0x32322426, }, ++ { 0, 1, 1, 0x00000e48, 0xffffffff, 0x30323232, }, ++ { 0, 1, 1, 0x00000e4c, 0xffffffff, 0x22242628, }, ++ { 0, 1, 2, 0x00000ee0, 0xffffffff, 0x30303030, }, ++ { 0, 1, 2, 0x00000ee4, 0xffffffff, 0x24262830, }, ++ { 0, 1, 2, 0x00000ee8, 0x0000ffff, 0x20222222, }, ++ { 0, 2, 0, 0x00001820, 0xffffffff, 0x34343434, }, ++ { 0, 2, 0, 0x00001824, 0xffffffff, 0x34343434, }, ++ { 0, 2, 0, 0x00001828, 0xffffffff, 0x30323434, }, ++ { 0, 2, 0, 0x0000182c, 0xffffffff, 0x34343434, }, ++ { 0, 2, 0, 0x00001830, 0xffffffff, 0x28303234, }, ++ { 0, 2, 1, 0x00001834, 0xffffffff, 0x32323232, }, ++ { 0, 2, 1, 0x00001838, 0xffffffff, 0x26283032, }, ++ { 0, 2, 2, 0x000018d8, 0xffffffff, 0x30303030, }, ++ { 0, 2, 2, 0x000018dc, 0xffffffff, 0x24262830, }, ++ { 0, 2, 0, 0x0000183c, 0xffffffff, 0x34343434, }, ++ { 0, 2, 0, 0x00001840, 0xffffffff, 0x28303234, }, ++ { 0, 2, 0, 0x00001844, 0xffffffff, 0x32322426, }, ++ { 0, 2, 1, 0x00001848, 0xffffffff, 0x30323232, }, ++ { 0, 2, 1, 0x0000184c, 0xffffffff, 0x22242628, }, ++ { 0, 2, 2, 0x000018e0, 0xffffffff, 0x30303030, }, ++ { 0, 2, 2, 0x000018e4, 0xffffffff, 0x24262830, }, ++ { 0, 2, 2, 0x000018e8, 0x0000ffff, 0x20222222, }, ++ { 0, 3, 0, 0x00001a20, 0xffffffff, 0x34343434, }, ++ { 0, 3, 0, 0x00001a24, 0xffffffff, 0x34343434, }, ++ { 0, 3, 0, 0x00001a28, 0xffffffff, 0x30323434, }, ++ { 0, 3, 0, 0x00001a2c, 0xffffffff, 0x34343434, }, ++ { 0, 3, 0, 0x00001a30, 0xffffffff, 0x28303234, }, ++ { 0, 3, 1, 0x00001a34, 0xffffffff, 0x32323232, }, ++ { 0, 3, 1, 0x00001a38, 0xffffffff, 0x26283032, }, ++ { 0, 3, 2, 0x00001ad8, 0xffffffff, 0x30303030, }, ++ { 0, 3, 2, 0x00001adc, 0xffffffff, 0x24262830, }, ++ { 0, 3, 0, 0x00001a3c, 0xffffffff, 0x34343434, }, ++ { 0, 3, 0, 0x00001a40, 0xffffffff, 0x28303234, }, ++ { 0, 3, 0, 0x00001a44, 0xffffffff, 0x32322426, }, ++ { 0, 3, 1, 0x00001a48, 0xffffffff, 0x30323232, }, ++ { 0, 3, 1, 0x00001a4c, 0xffffffff, 0x22242628, }, ++ { 0, 3, 2, 0x00001ae0, 0xffffffff, 0x30303030, }, ++ { 0, 3, 2, 0x00001ae4, 0xffffffff, 0x24262830, }, ++ { 0, 3, 2, 0x00001ae8, 0x0000ffff, 0x20222222, }, ++ { 1, 0, 0, 0x00000c24, 0xffffffff, 0x34343434, }, ++ { 1, 0, 0, 0x00000c28, 0xffffffff, 0x30323434, }, ++ { 1, 0, 0, 0x00000c2c, 0xffffffff, 0x34343434, }, ++ { 1, 0, 0, 0x00000c30, 0xffffffff, 0x28303234, }, ++ { 1, 0, 1, 0x00000c34, 0xffffffff, 0x32323232, }, ++ { 1, 0, 1, 0x00000c38, 0xffffffff, 0x26283032, }, ++ { 1, 0, 2, 0x00000cd8, 0xffffffff, 0x30303030, }, ++ { 1, 0, 2, 0x00000cdc, 0xffffffff, 0x24262830, }, ++ { 1, 0, 0, 0x00000c3c, 0xffffffff, 0x34343434, }, ++ { 1, 0, 0, 0x00000c40, 0xffffffff, 0x28303234, }, ++ { 1, 0, 0, 0x00000c44, 0xffffffff, 0x32322426, }, ++ { 1, 0, 1, 0x00000c48, 0xffffffff, 0x30323232, }, ++ { 1, 0, 1, 0x00000c4c, 0xffffffff, 0x22242628, }, ++ { 1, 0, 2, 0x00000ce0, 0xffffffff, 0x30303030, }, ++ { 1, 0, 2, 0x00000ce4, 0xffffffff, 0x24262830, }, ++ { 1, 0, 2, 0x00000ce8, 0x0000ffff, 0x20222222, }, ++ { 1, 1, 0, 0x00000e24, 0xffffffff, 0x34343434, }, ++ { 1, 1, 0, 0x00000e28, 0xffffffff, 0x30323434, }, ++ { 1, 1, 0, 0x00000e2c, 0xffffffff, 0x34343434, }, ++ { 1, 1, 0, 0x00000e30, 0xffffffff, 0x28303234, }, ++ { 1, 1, 1, 0x00000e34, 0xffffffff, 0x32323232, }, ++ { 1, 1, 1, 0x00000e38, 0xffffffff, 0x26283032, }, ++ { 1, 1, 2, 0x00000ed8, 0xffffffff, 0x30303030, }, ++ { 1, 1, 2, 0x00000edc, 0xffffffff, 0x24262830, }, ++ { 1, 1, 0, 0x00000e3c, 0xffffffff, 0x34343434, }, ++ { 1, 1, 0, 0x00000e40, 0xffffffff, 0x28303234, }, ++ { 1, 1, 0, 0x00000e44, 0xffffffff, 0x32322426, }, ++ { 1, 1, 1, 0x00000e48, 0xffffffff, 0x30323232, }, ++ { 1, 1, 1, 0x00000e4c, 0xffffffff, 0x22242628, }, ++ { 1, 1, 2, 0x00000ee0, 0xffffffff, 0x30303030, }, ++ { 1, 1, 2, 0x00000ee4, 0xffffffff, 0x24262830, }, ++ { 1, 1, 2, 0x00000ee8, 0x0000ffff, 0x20222222, }, ++ { 1, 2, 0, 0x00001824, 0xffffffff, 0x34343434, }, ++ { 1, 2, 0, 0x00001828, 0xffffffff, 0x30323434, }, ++ { 1, 2, 0, 0x0000182c, 0xffffffff, 0x34343434, }, ++ { 1, 2, 0, 0x00001830, 0xffffffff, 0x28303234, }, ++ { 1, 2, 1, 0x00001834, 0xffffffff, 0x32323232, }, ++ { 1, 2, 1, 0x00001838, 0xffffffff, 0x26283032, }, ++ { 1, 2, 2, 0x000018d8, 0xffffffff, 0x30303030, }, ++ { 1, 2, 2, 0x000018dc, 0xffffffff, 0x24262830, }, ++ { 1, 2, 0, 0x0000183c, 0xffffffff, 0x34343434, }, ++ { 1, 2, 0, 0x00001840, 0xffffffff, 0x28303234, }, ++ { 1, 2, 0, 0x00001844, 0xffffffff, 0x32322426, }, ++ { 1, 2, 1, 0x00001848, 0xffffffff, 0x30323232, }, ++ { 1, 2, 1, 0x0000184c, 0xffffffff, 0x22242628, }, ++ { 1, 2, 2, 0x000018e0, 0xffffffff, 0x30303030, }, ++ { 1, 2, 2, 0x000018e4, 0xffffffff, 0x24262830, }, ++ { 1, 2, 2, 0x000018e8, 0x0000ffff, 0x20222222, }, ++ { 1, 3, 0, 0x00001a24, 0xffffffff, 0x34343434, }, ++ { 1, 3, 0, 0x00001a28, 0xffffffff, 0x30323434, }, ++ { 1, 3, 0, 0x00001a2c, 0xffffffff, 0x34343434, }, ++ { 1, 3, 0, 0x00001a30, 0xffffffff, 0x28303234, }, ++ { 1, 3, 1, 0x00001a34, 0xffffffff, 0x32323232, }, ++ { 1, 3, 1, 0x00001a38, 0xffffffff, 0x26283032, }, ++ { 1, 3, 2, 0x00001ad8, 0xffffffff, 0x30303030, }, ++ { 1, 3, 2, 0x00001adc, 0xffffffff, 0x24262830, }, ++ { 1, 3, 0, 0x00001a3c, 0xffffffff, 0x34343434, }, ++ { 1, 3, 0, 0x00001a40, 0xffffffff, 0x28303234, }, ++ { 1, 3, 0, 0x00001a44, 0xffffffff, 0x32322426, }, ++ { 1, 3, 1, 0x00001a48, 0xffffffff, 0x30323232, }, ++ { 1, 3, 1, 0x00001a4c, 0xffffffff, 0x22242628, }, ++ { 1, 3, 2, 0x00001ae0, 0xffffffff, 0x30303030, }, ++ { 1, 3, 2, 0x00001ae4, 0xffffffff, 0x24262830, }, ++ { 1, 3, 2, 0x00001ae8, 0x0000ffff, 0x20222222, }, ++}; ++ ++RTW_DECL_TABLE_BB_PG(rtw8814a_bb_pg_type2); ++ ++static const struct rtw_phy_pg_cfg_pair rtw8814a_bb_pg_type3[] = { ++ { 0, 0, 0, 0x00000c20, 0xffffffff, 0x48484848, }, ++ { 0, 0, 0, 0x00000c24, 0xffffffff, 0x46464646, }, ++ { 0, 0, 0, 0x00000c28, 0xffffffff, 0x44464646, }, ++ { 0, 0, 0, 0x00000c2c, 0xffffffff, 0x46464646, }, ++ { 0, 0, 0, 0x00000c30, 0xffffffff, 0x42444646, }, ++ { 0, 0, 1, 0x00000c34, 0xffffffff, 0x46464646, }, ++ { 0, 0, 1, 0x00000c38, 0xffffffff, 0x42444646, }, ++ { 0, 0, 2, 0x00000cd8, 0xffffffff, 0x46464646, }, ++ { 0, 0, 2, 0x00000cdc, 0xffffffff, 0x42444646, }, ++ { 0, 0, 0, 0x00000c3c, 0xffffffff, 0x46464646, }, ++ { 0, 0, 0, 0x00000c40, 0xffffffff, 0x42444646, }, ++ { 0, 0, 0, 0x00000c44, 0xffffffff, 0x46463840, }, ++ { 0, 0, 1, 0x00000c48, 0xffffffff, 0x46464646, }, ++ { 0, 0, 1, 0x00000c4c, 0xffffffff, 0x38404244, }, ++ { 0, 0, 2, 0x00000ce0, 0xffffffff, 0x46464646, }, ++ { 0, 0, 2, 0x00000ce4, 0xffffffff, 0x42444646, }, ++ { 0, 0, 2, 0x00000ce8, 0x0000ffff, 0x38383840, }, ++ { 0, 1, 0, 0x00000e20, 0xffffffff, 0x48484848, }, ++ { 0, 1, 0, 0x00000e24, 0xffffffff, 0x46464646, }, ++ { 0, 1, 0, 0x00000e28, 0xffffffff, 0x44464646, }, ++ { 0, 1, 0, 0x00000e2c, 0xffffffff, 0x46464646, }, ++ { 0, 1, 0, 0x00000e30, 0xffffffff, 0x42444646, }, ++ { 0, 1, 1, 0x00000e34, 0xffffffff, 0x46464646, }, ++ { 0, 1, 1, 0x00000e38, 0xffffffff, 0x42444646, }, ++ { 0, 1, 2, 0x00000ed8, 0xffffffff, 0x46464646, }, ++ { 0, 1, 2, 0x00000edc, 0xffffffff, 0x42444646, }, ++ { 0, 1, 0, 0x00000e3c, 0xffffffff, 0x46464646, }, ++ { 0, 1, 0, 0x00000e40, 0xffffffff, 0x42444646, }, ++ { 0, 1, 0, 0x00000e44, 0xffffffff, 0x46463840, }, ++ { 0, 1, 1, 0x00000e48, 0xffffffff, 0x46464646, }, ++ { 0, 1, 1, 0x00000e4c, 0xffffffff, 0x38404244, }, ++ { 0, 1, 2, 0x00000ee0, 0xffffffff, 0x46464646, }, ++ { 0, 1, 2, 0x00000ee4, 0xffffffff, 0x42444646, }, ++ { 0, 1, 2, 0x00000ee8, 0x0000ffff, 0x38383840, }, ++ { 0, 2, 0, 0x00001820, 0xffffffff, 0x48484848, }, ++ { 0, 2, 0, 0x00001824, 0xffffffff, 0x46464646, }, ++ { 0, 2, 0, 0x00001828, 0xffffffff, 0x44464646, }, ++ { 0, 2, 0, 0x0000182c, 0xffffffff, 0x46464646, }, ++ { 0, 2, 0, 0x00001830, 0xffffffff, 0x42444646, }, ++ { 0, 2, 1, 0x00001834, 0xffffffff, 0x46464646, }, ++ { 0, 2, 1, 0x00001838, 0xffffffff, 0x42444646, }, ++ { 0, 2, 2, 0x000018d8, 0xffffffff, 0x46464646, }, ++ { 0, 2, 2, 0x000018dc, 0xffffffff, 0x42444646, }, ++ { 0, 2, 0, 0x0000183c, 0xffffffff, 0x46464646, }, ++ { 0, 2, 0, 0x00001840, 0xffffffff, 0x42444646, }, ++ { 0, 2, 0, 0x00001844, 0xffffffff, 0x46463840, }, ++ { 0, 2, 1, 0x00001848, 0xffffffff, 0x46464646, }, ++ { 0, 2, 1, 0x0000184c, 0xffffffff, 0x38404244, }, ++ { 0, 2, 2, 0x000018e0, 0xffffffff, 0x46464646, }, ++ { 0, 2, 2, 0x000018e4, 0xffffffff, 0x42444646, }, ++ { 0, 2, 2, 0x000018e8, 0x0000ffff, 0x38383840, }, ++ { 0, 3, 0, 0x00001a20, 0xffffffff, 0x48484848, }, ++ { 0, 3, 0, 0x00001a24, 0xffffffff, 0x46464646, }, ++ { 0, 3, 0, 0x00001a28, 0xffffffff, 0x44464646, }, ++ { 0, 3, 0, 0x00001a2c, 0xffffffff, 0x46464646, }, ++ { 0, 3, 0, 0x00001a30, 0xffffffff, 0x42444646, }, ++ { 0, 3, 1, 0x00001a34, 0xffffffff, 0x46464646, }, ++ { 0, 3, 1, 0x00001a38, 0xffffffff, 0x42444646, }, ++ { 0, 3, 2, 0x00001ad8, 0xffffffff, 0x46464646, }, ++ { 0, 3, 2, 0x00001adc, 0xffffffff, 0x42444646, }, ++ { 0, 3, 0, 0x00001a3c, 0xffffffff, 0x46464646, }, ++ { 0, 3, 0, 0x00001a40, 0xffffffff, 0x42444646, }, ++ { 0, 3, 0, 0x00001a44, 0xffffffff, 0x46463840, }, ++ { 0, 3, 1, 0x00001a48, 0xffffffff, 0x46464646, }, ++ { 0, 3, 1, 0x00001a4c, 0xffffffff, 0x38404244, }, ++ { 0, 3, 2, 0x00001ae0, 0xffffffff, 0x46464646, }, ++ { 0, 3, 2, 0x00001ae4, 0xffffffff, 0x42444646, }, ++ { 0, 3, 2, 0x00001ae8, 0x0000ffff, 0x38383840, }, ++ { 1, 0, 0, 0x00000c24, 0xffffffff, 0x46464646, }, ++ { 1, 0, 0, 0x00000c28, 0xffffffff, 0x44464646, }, ++ { 1, 0, 0, 0x00000c2c, 0xffffffff, 0x46464646, }, ++ { 1, 0, 0, 0x00000c30, 0xffffffff, 0x42444646, }, ++ { 1, 0, 1, 0x00000c34, 0xffffffff, 0x46464646, }, ++ { 1, 0, 1, 0x00000c38, 0xffffffff, 0x42444646, }, ++ { 1, 0, 2, 0x00000cd8, 0xffffffff, 0x46464646, }, ++ { 1, 0, 2, 0x00000cdc, 0xffffffff, 0x42444646, }, ++ { 1, 0, 0, 0x00000c3c, 0xffffffff, 0x46464646, }, ++ { 1, 0, 0, 0x00000c40, 0xffffffff, 0x42444646, }, ++ { 1, 0, 0, 0x00000c44, 0xffffffff, 0x46463840, }, ++ { 1, 0, 1, 0x00000c48, 0xffffffff, 0x46464646, }, ++ { 1, 0, 1, 0x00000c4c, 0xffffffff, 0x38404244, }, ++ { 1, 0, 2, 0x00000ce0, 0xffffffff, 0x46464646, }, ++ { 1, 0, 2, 0x00000ce4, 0xffffffff, 0x42444646, }, ++ { 1, 0, 2, 0x00000ce8, 0x0000ffff, 0x38383840, }, ++ { 1, 1, 0, 0x00000e24, 0xffffffff, 0x46464646, }, ++ { 1, 1, 0, 0x00000e28, 0xffffffff, 0x44464646, }, ++ { 1, 1, 0, 0x00000e2c, 0xffffffff, 0x46464646, }, ++ { 1, 1, 0, 0x00000e30, 0xffffffff, 0x42444646, }, ++ { 1, 1, 1, 0x00000e34, 0xffffffff, 0x46464646, }, ++ { 1, 1, 1, 0x00000e38, 0xffffffff, 0x42444646, }, ++ { 1, 1, 2, 0x00000ed8, 0xffffffff, 0x46464646, }, ++ { 1, 1, 2, 0x00000edc, 0xffffffff, 0x42444646, }, ++ { 1, 1, 0, 0x00000e3c, 0xffffffff, 0x46464646, }, ++ { 1, 1, 0, 0x00000e40, 0xffffffff, 0x42444646, }, ++ { 1, 1, 0, 0x00000e44, 0xffffffff, 0x46463840, }, ++ { 1, 1, 1, 0x00000e48, 0xffffffff, 0x46464646, }, ++ { 1, 1, 1, 0x00000e4c, 0xffffffff, 0x38404244, }, ++ { 1, 1, 2, 0x00000ee0, 0xffffffff, 0x46464646, }, ++ { 1, 1, 2, 0x00000ee4, 0xffffffff, 0x42444646, }, ++ { 1, 1, 2, 0x00000ee8, 0x0000ffff, 0x38383840, }, ++ { 1, 2, 0, 0x00001824, 0xffffffff, 0x46464646, }, ++ { 1, 2, 0, 0x00001828, 0xffffffff, 0x44464646, }, ++ { 1, 2, 0, 0x0000182c, 0xffffffff, 0x46464646, }, ++ { 1, 2, 0, 0x00001830, 0xffffffff, 0x42444646, }, ++ { 1, 2, 1, 0x00001834, 0xffffffff, 0x46464646, }, ++ { 1, 2, 1, 0x00001838, 0xffffffff, 0x42444646, }, ++ { 1, 2, 2, 0x000018d8, 0xffffffff, 0x46464646, }, ++ { 1, 2, 2, 0x000018dc, 0xffffffff, 0x42444646, }, ++ { 1, 2, 0, 0x0000183c, 0xffffffff, 0x46464646, }, ++ { 1, 2, 0, 0x00001840, 0xffffffff, 0x42444646, }, ++ { 1, 2, 0, 0x00001844, 0xffffffff, 0x46463840, }, ++ { 1, 2, 1, 0x00001848, 0xffffffff, 0x46464646, }, ++ { 1, 2, 1, 0x0000184c, 0xffffffff, 0x38404244, }, ++ { 1, 2, 2, 0x000018e0, 0xffffffff, 0x46464646, }, ++ { 1, 2, 2, 0x000018e4, 0xffffffff, 0x42444646, }, ++ { 1, 2, 2, 0x000018e8, 0x0000ffff, 0x38383840, }, ++ { 1, 3, 0, 0x00001a24, 0xffffffff, 0x46464646, }, ++ { 1, 3, 0, 0x00001a28, 0xffffffff, 0x44464646, }, ++ { 1, 3, 0, 0x00001a2c, 0xffffffff, 0x46464646, }, ++ { 1, 3, 0, 0x00001a30, 0xffffffff, 0x42444646, }, ++ { 1, 3, 1, 0x00001a34, 0xffffffff, 0x46464646, }, ++ { 1, 3, 1, 0x00001a38, 0xffffffff, 0x42444646, }, ++ { 1, 3, 2, 0x00001ad8, 0xffffffff, 0x46464646, }, ++ { 1, 3, 2, 0x00001adc, 0xffffffff, 0x42444646, }, ++ { 1, 3, 0, 0x00001a3c, 0xffffffff, 0x46464646, }, ++ { 1, 3, 0, 0x00001a40, 0xffffffff, 0x42444646, }, ++ { 1, 3, 0, 0x00001a44, 0xffffffff, 0x46463840, }, ++ { 1, 3, 1, 0x00001a48, 0xffffffff, 0x46464646, }, ++ { 1, 3, 1, 0x00001a4c, 0xffffffff, 0x38404244, }, ++ { 1, 3, 2, 0x00001ae0, 0xffffffff, 0x46464646, }, ++ { 1, 3, 2, 0x00001ae4, 0xffffffff, 0x42444646, }, ++ { 1, 3, 2, 0x00001ae8, 0x0000ffff, 0x38383840, }, ++}; ++ ++RTW_DECL_TABLE_BB_PG(rtw8814a_bb_pg_type3); ++ ++static const struct rtw_phy_pg_cfg_pair rtw8814a_bb_pg_type4[] = { ++ { 0, 0, 0, 0x00000c20, 0xffffffff, 0x42424242, }, ++ { 0, 0, 0, 0x00000c24, 0xffffffff, 0x42424242, }, ++ { 0, 0, 0, 0x00000c28, 0xffffffff, 0x36384042, }, ++ { 0, 0, 0, 0x00000c2c, 0xffffffff, 0x42424242, }, ++ { 0, 0, 0, 0x00000c30, 0xffffffff, 0x34363840, }, ++ { 0, 0, 1, 0x00000c34, 0xffffffff, 0x42424242, }, ++ { 0, 0, 1, 0x00000c38, 0xffffffff, 0x34363840, }, ++ { 0, 0, 2, 0x00000cd8, 0xffffffff, 0x42424242, }, ++ { 0, 0, 2, 0x00000cdc, 0xffffffff, 0x34363840, }, ++ { 0, 0, 0, 0x00000c3c, 0xffffffff, 0x42424242, }, ++ { 0, 0, 0, 0x00000c40, 0xffffffff, 0x34363840, }, ++ { 0, 0, 0, 0x00000c44, 0xffffffff, 0x42423032, }, ++ { 0, 0, 1, 0x00000c48, 0xffffffff, 0x38404242, }, ++ { 0, 0, 1, 0x00000c4c, 0xffffffff, 0x30323436, }, ++ { 0, 0, 2, 0x00000ce0, 0xffffffff, 0x42424242, }, ++ { 0, 0, 2, 0x00000ce4, 0xffffffff, 0x34363840, }, ++ { 0, 0, 2, 0x00000ce8, 0x0000ffff, 0x30303032, }, ++ { 0, 1, 0, 0x00000e20, 0xffffffff, 0x42424242, }, ++ { 0, 1, 0, 0x00000e24, 0xffffffff, 0x42424242, }, ++ { 0, 1, 0, 0x00000e28, 0xffffffff, 0x36384042, }, ++ { 0, 1, 0, 0x00000e2c, 0xffffffff, 0x42424242, }, ++ { 0, 1, 0, 0x00000e30, 0xffffffff, 0x34363840, }, ++ { 0, 1, 1, 0x00000e34, 0xffffffff, 0x42424242, }, ++ { 0, 1, 1, 0x00000e38, 0xffffffff, 0x34363840, }, ++ { 0, 1, 2, 0x00000ed8, 0xffffffff, 0x42424242, }, ++ { 0, 1, 2, 0x00000edc, 0xffffffff, 0x34363840, }, ++ { 0, 1, 0, 0x00000e3c, 0xffffffff, 0x42424242, }, ++ { 0, 1, 0, 0x00000e40, 0xffffffff, 0x34363840, }, ++ { 0, 1, 0, 0x00000e44, 0xffffffff, 0x42423032, }, ++ { 0, 1, 1, 0x00000e48, 0xffffffff, 0x38404242, }, ++ { 0, 1, 1, 0x00000e4c, 0xffffffff, 0x30323436, }, ++ { 0, 1, 2, 0x00000ee0, 0xffffffff, 0x42424242, }, ++ { 0, 1, 2, 0x00000ee4, 0xffffffff, 0x34363840, }, ++ { 0, 1, 2, 0x00000ee8, 0x0000ffff, 0x30303032, }, ++ { 0, 2, 0, 0x00001820, 0xffffffff, 0x42424242, }, ++ { 0, 2, 0, 0x00001824, 0xffffffff, 0x42424242, }, ++ { 0, 2, 0, 0x00001828, 0xffffffff, 0x36384042, }, ++ { 0, 2, 0, 0x0000182c, 0xffffffff, 0x42424242, }, ++ { 0, 2, 0, 0x00001830, 0xffffffff, 0x34363840, }, ++ { 0, 2, 1, 0x00001834, 0xffffffff, 0x42424242, }, ++ { 0, 2, 1, 0x00001838, 0xffffffff, 0x34363840, }, ++ { 0, 2, 2, 0x000018d8, 0xffffffff, 0x42424242, }, ++ { 0, 2, 2, 0x000018dc, 0xffffffff, 0x34363840, }, ++ { 0, 2, 0, 0x0000183c, 0xffffffff, 0x42424242, }, ++ { 0, 2, 0, 0x00001840, 0xffffffff, 0x34363840, }, ++ { 0, 2, 0, 0x00001844, 0xffffffff, 0x42423032, }, ++ { 0, 2, 1, 0x00001848, 0xffffffff, 0x38404242, }, ++ { 0, 2, 1, 0x0000184c, 0xffffffff, 0x30323436, }, ++ { 0, 2, 2, 0x000018e0, 0xffffffff, 0x42424242, }, ++ { 0, 2, 2, 0x000018e4, 0xffffffff, 0x34363840, }, ++ { 0, 2, 2, 0x000018e8, 0x0000ffff, 0x30303032, }, ++ { 0, 3, 0, 0x00001a20, 0xffffffff, 0x42424242, }, ++ { 0, 3, 0, 0x00001a24, 0xffffffff, 0x42424242, }, ++ { 0, 3, 0, 0x00001a28, 0xffffffff, 0x36384042, }, ++ { 0, 3, 0, 0x00001a2c, 0xffffffff, 0x42424242, }, ++ { 0, 3, 0, 0x00001a30, 0xffffffff, 0x34363840, }, ++ { 0, 3, 1, 0x00001a34, 0xffffffff, 0x42424242, }, ++ { 0, 3, 1, 0x00001a38, 0xffffffff, 0x34363840, }, ++ { 0, 3, 2, 0x00001ad8, 0xffffffff, 0x42424242, }, ++ { 0, 3, 2, 0x00001adc, 0xffffffff, 0x34363840, }, ++ { 0, 3, 0, 0x00001a3c, 0xffffffff, 0x42424242, }, ++ { 0, 3, 0, 0x00001a40, 0xffffffff, 0x34363840, }, ++ { 0, 3, 0, 0x00001a44, 0xffffffff, 0x42423032, }, ++ { 0, 3, 1, 0x00001a48, 0xffffffff, 0x38404242, }, ++ { 0, 3, 1, 0x00001a4c, 0xffffffff, 0x30323436, }, ++ { 0, 3, 2, 0x00001ae0, 0xffffffff, 0x42424242, }, ++ { 0, 3, 2, 0x00001ae4, 0xffffffff, 0x34363840, }, ++ { 0, 3, 2, 0x00001ae8, 0x0000ffff, 0x30303032, }, ++ { 1, 0, 0, 0x00000c24, 0xffffffff, 0x42424242, }, ++ { 1, 0, 0, 0x00000c28, 0xffffffff, 0x36384042, }, ++ { 1, 0, 0, 0x00000c2c, 0xffffffff, 0x42424242, }, ++ { 1, 0, 0, 0x00000c30, 0xffffffff, 0x34363840, }, ++ { 1, 0, 1, 0x00000c34, 0xffffffff, 0x42424242, }, ++ { 1, 0, 1, 0x00000c38, 0xffffffff, 0x34363840, }, ++ { 1, 0, 2, 0x00000cd8, 0xffffffff, 0x42424242, }, ++ { 1, 0, 2, 0x00000cdc, 0xffffffff, 0x34363840, }, ++ { 1, 0, 0, 0x00000c3c, 0xffffffff, 0x42424242, }, ++ { 1, 0, 0, 0x00000c40, 0xffffffff, 0x34363840, }, ++ { 1, 0, 0, 0x00000c44, 0xffffffff, 0x42423032, }, ++ { 1, 0, 1, 0x00000c48, 0xffffffff, 0x38404242, }, ++ { 1, 0, 1, 0x00000c4c, 0xffffffff, 0x30323436, }, ++ { 1, 0, 2, 0x00000ce0, 0xffffffff, 0x42424242, }, ++ { 1, 0, 2, 0x00000ce4, 0xffffffff, 0x34363840, }, ++ { 1, 0, 2, 0x00000ce8, 0x0000ffff, 0x30303032, }, ++ { 1, 1, 0, 0x00000e24, 0xffffffff, 0x42424242, }, ++ { 1, 1, 0, 0x00000e28, 0xffffffff, 0x36384042, }, ++ { 1, 1, 0, 0x00000e2c, 0xffffffff, 0x42424242, }, ++ { 1, 1, 0, 0x00000e30, 0xffffffff, 0x34363840, }, ++ { 1, 1, 1, 0x00000e34, 0xffffffff, 0x42424242, }, ++ { 1, 1, 1, 0x00000e38, 0xffffffff, 0x34363840, }, ++ { 1, 1, 2, 0x00000ed8, 0xffffffff, 0x42424242, }, ++ { 1, 1, 2, 0x00000edc, 0xffffffff, 0x34363840, }, ++ { 1, 1, 0, 0x00000e3c, 0xffffffff, 0x42424242, }, ++ { 1, 1, 0, 0x00000e40, 0xffffffff, 0x34363840, }, ++ { 1, 1, 0, 0x00000e44, 0xffffffff, 0x42423032, }, ++ { 1, 1, 1, 0x00000e48, 0xffffffff, 0x38404242, }, ++ { 1, 1, 1, 0x00000e4c, 0xffffffff, 0x30323436, }, ++ { 1, 1, 2, 0x00000ee0, 0xffffffff, 0x42424242, }, ++ { 1, 1, 2, 0x00000ee4, 0xffffffff, 0x34363840, }, ++ { 1, 1, 2, 0x00000ee8, 0x0000ffff, 0x30303032, }, ++ { 1, 2, 0, 0x00001824, 0xffffffff, 0x42424242, }, ++ { 1, 2, 0, 0x00001828, 0xffffffff, 0x36384042, }, ++ { 1, 2, 0, 0x0000182c, 0xffffffff, 0x42424242, }, ++ { 1, 2, 0, 0x00001830, 0xffffffff, 0x34363840, }, ++ { 1, 2, 1, 0x00001834, 0xffffffff, 0x42424242, }, ++ { 1, 2, 1, 0x00001838, 0xffffffff, 0x34363840, }, ++ { 1, 2, 2, 0x000018d8, 0xffffffff, 0x42424242, }, ++ { 1, 2, 2, 0x000018dc, 0xffffffff, 0x34363840, }, ++ { 1, 2, 0, 0x0000183c, 0xffffffff, 0x42424242, }, ++ { 1, 2, 0, 0x00001840, 0xffffffff, 0x34363840, }, ++ { 1, 2, 0, 0x00001844, 0xffffffff, 0x42423032, }, ++ { 1, 2, 1, 0x00001848, 0xffffffff, 0x38404242, }, ++ { 1, 2, 1, 0x0000184c, 0xffffffff, 0x30323436, }, ++ { 1, 2, 2, 0x000018e0, 0xffffffff, 0x42424242, }, ++ { 1, 2, 2, 0x000018e4, 0xffffffff, 0x34363840, }, ++ { 1, 2, 2, 0x000018e8, 0x0000ffff, 0x30303032, }, ++ { 1, 3, 0, 0x00001a24, 0xffffffff, 0x42424242, }, ++ { 1, 3, 0, 0x00001a28, 0xffffffff, 0x36384042, }, ++ { 1, 3, 0, 0x00001a2c, 0xffffffff, 0x42424242, }, ++ { 1, 3, 0, 0x00001a30, 0xffffffff, 0x34363840, }, ++ { 1, 3, 1, 0x00001a34, 0xffffffff, 0x42424242, }, ++ { 1, 3, 1, 0x00001a38, 0xffffffff, 0x34363840, }, ++ { 1, 3, 2, 0x00001ad8, 0xffffffff, 0x42424242, }, ++ { 1, 3, 2, 0x00001adc, 0xffffffff, 0x34363840, }, ++ { 1, 3, 0, 0x00001a3c, 0xffffffff, 0x42424242, }, ++ { 1, 3, 0, 0x00001a40, 0xffffffff, 0x34363840, }, ++ { 1, 3, 0, 0x00001a44, 0xffffffff, 0x42423032, }, ++ { 1, 3, 1, 0x00001a48, 0xffffffff, 0x38404242, }, ++ { 1, 3, 1, 0x00001a4c, 0xffffffff, 0x30323436, }, ++ { 1, 3, 2, 0x00001ae0, 0xffffffff, 0x42424242, }, ++ { 1, 3, 2, 0x00001ae4, 0xffffffff, 0x34363840, }, ++ { 1, 3, 2, 0x00001ae8, 0x0000ffff, 0x30303032, }, ++}; ++ ++RTW_DECL_TABLE_BB_PG(rtw8814a_bb_pg_type4); ++ ++static const struct rtw_phy_pg_cfg_pair rtw8814a_bb_pg_type5[] = { ++ { 0, 0, 0, 0x00000c20, 0xffffffff, 0x48484848, }, ++ { 0, 0, 0, 0x00000c24, 0xffffffff, 0x46464646, }, ++ { 0, 0, 0, 0x00000c28, 0xffffffff, 0x44464646, }, ++ { 0, 0, 0, 0x00000c2c, 0xffffffff, 0x46464646, }, ++ { 0, 0, 0, 0x00000c30, 0xffffffff, 0x42444646, }, ++ { 0, 0, 1, 0x00000c34, 0xffffffff, 0x44444444, }, ++ { 0, 0, 1, 0x00000c38, 0xffffffff, 0x40424444, }, ++ { 0, 0, 2, 0x00000cd8, 0xffffffff, 0x42424242, }, ++ { 0, 0, 2, 0x00000cdc, 0xffffffff, 0x38404242, }, ++ { 0, 0, 0, 0x00000c3c, 0xffffffff, 0x46464646, }, ++ { 0, 0, 0, 0x00000c40, 0xffffffff, 0x42444646, }, ++ { 0, 0, 0, 0x00000c44, 0xffffffff, 0x44444040, }, ++ { 0, 0, 1, 0x00000c48, 0xffffffff, 0x44444444, }, ++ { 0, 0, 1, 0x00000c4c, 0xffffffff, 0x38384042, }, ++ { 0, 0, 2, 0x00000ce0, 0xffffffff, 0x42424242, }, ++ { 0, 0, 2, 0x00000ce4, 0xffffffff, 0x38404242, }, ++ { 0, 0, 2, 0x00000ce8, 0x0000ffff, 0x20203636, }, ++ { 0, 1, 0, 0x00000e20, 0xffffffff, 0x48484848, }, ++ { 0, 1, 0, 0x00000e24, 0xffffffff, 0x46464646, }, ++ { 0, 1, 0, 0x00000e28, 0xffffffff, 0x44464646, }, ++ { 0, 1, 0, 0x00000e2c, 0xffffffff, 0x46464646, }, ++ { 0, 1, 0, 0x00000e30, 0xffffffff, 0x42444646, }, ++ { 0, 1, 1, 0x00000e34, 0xffffffff, 0x44444444, }, ++ { 0, 1, 1, 0x00000e38, 0xffffffff, 0x40424444, }, ++ { 0, 1, 2, 0x00000ed8, 0xffffffff, 0x42424242, }, ++ { 0, 1, 2, 0x00000edc, 0xffffffff, 0x38404242, }, ++ { 0, 1, 0, 0x00000e3c, 0xffffffff, 0x46464646, }, ++ { 0, 1, 0, 0x00000e40, 0xffffffff, 0x42444646, }, ++ { 0, 1, 0, 0x00000e44, 0xffffffff, 0x44444040, }, ++ { 0, 1, 1, 0x00000e48, 0xffffffff, 0x44444444, }, ++ { 0, 1, 1, 0x00000e4c, 0xffffffff, 0x38384042, }, ++ { 0, 1, 2, 0x00000ee0, 0xffffffff, 0x42424242, }, ++ { 0, 1, 2, 0x00000ee4, 0xffffffff, 0x38404242, }, ++ { 0, 1, 2, 0x00000ee8, 0x0000ffff, 0x20203636, }, ++ { 0, 2, 0, 0x00001820, 0xffffffff, 0x48484848, }, ++ { 0, 2, 0, 0x00001824, 0xffffffff, 0x46464646, }, ++ { 0, 2, 0, 0x00001828, 0xffffffff, 0x44464646, }, ++ { 0, 2, 0, 0x0000182c, 0xffffffff, 0x46464646, }, ++ { 0, 2, 0, 0x00001830, 0xffffffff, 0x42444646, }, ++ { 0, 2, 1, 0x00001834, 0xffffffff, 0x44444444, }, ++ { 0, 2, 1, 0x00001838, 0xffffffff, 0x40424444, }, ++ { 0, 2, 2, 0x000018d8, 0xffffffff, 0x42424242, }, ++ { 0, 2, 2, 0x000018dc, 0xffffffff, 0x38404242, }, ++ { 0, 2, 0, 0x0000183c, 0xffffffff, 0x46464646, }, ++ { 0, 2, 0, 0x00001840, 0xffffffff, 0x42444646, }, ++ { 0, 2, 0, 0x00001844, 0xffffffff, 0x44444040, }, ++ { 0, 2, 1, 0x00001848, 0xffffffff, 0x44444444, }, ++ { 0, 2, 1, 0x0000184c, 0xffffffff, 0x38384042, }, ++ { 0, 2, 2, 0x000018e0, 0xffffffff, 0x42424242, }, ++ { 0, 2, 2, 0x000018e4, 0xffffffff, 0x38404242, }, ++ { 0, 2, 2, 0x000018e8, 0x0000ffff, 0x20203636, }, ++ { 0, 3, 0, 0x00001a20, 0xffffffff, 0x48484848, }, ++ { 0, 3, 0, 0x00001a24, 0xffffffff, 0x46464646, }, ++ { 0, 3, 0, 0x00001a28, 0xffffffff, 0x44464646, }, ++ { 0, 3, 0, 0x00001a2c, 0xffffffff, 0x46464646, }, ++ { 0, 3, 0, 0x00001a30, 0xffffffff, 0x42444646, }, ++ { 0, 3, 1, 0x00001a34, 0xffffffff, 0x44444444, }, ++ { 0, 3, 1, 0x00001a38, 0xffffffff, 0x40424444, }, ++ { 0, 3, 2, 0x00001ad8, 0xffffffff, 0x42424242, }, ++ { 0, 3, 2, 0x00001adc, 0xffffffff, 0x38404242, }, ++ { 0, 3, 0, 0x00001a3c, 0xffffffff, 0x46464646, }, ++ { 0, 3, 0, 0x00001a40, 0xffffffff, 0x42444646, }, ++ { 0, 3, 0, 0x00001a44, 0xffffffff, 0x44444040, }, ++ { 0, 3, 1, 0x00001a48, 0xffffffff, 0x44444444, }, ++ { 0, 3, 1, 0x00001a4c, 0xffffffff, 0x38384042, }, ++ { 0, 3, 2, 0x00001ae0, 0xffffffff, 0x42424242, }, ++ { 0, 3, 2, 0x00001ae4, 0xffffffff, 0x38404242, }, ++ { 0, 3, 2, 0x00001ae8, 0x0000ffff, 0x20203636, }, ++ { 1, 0, 0, 0x00000c24, 0xffffffff, 0x46464646, }, ++ { 1, 0, 0, 0x00000c28, 0xffffffff, 0x44464646, }, ++ { 1, 0, 0, 0x00000c2c, 0xffffffff, 0x46464646, }, ++ { 1, 0, 0, 0x00000c30, 0xffffffff, 0x42444646, }, ++ { 1, 0, 1, 0x00000c34, 0xffffffff, 0x44444444, }, ++ { 1, 0, 1, 0x00000c38, 0xffffffff, 0x40424444, }, ++ { 1, 0, 2, 0x00000cd8, 0xffffffff, 0x42424242, }, ++ { 1, 0, 2, 0x00000cdc, 0xffffffff, 0x38404242, }, ++ { 1, 0, 0, 0x00000c3c, 0xffffffff, 0x46464646, }, ++ { 1, 0, 0, 0x00000c40, 0xffffffff, 0x42444646, }, ++ { 1, 0, 0, 0x00000c44, 0xffffffff, 0x44443840, }, ++ { 1, 0, 1, 0x00000c48, 0xffffffff, 0x44444444, }, ++ { 1, 0, 1, 0x00000c4c, 0xffffffff, 0x36384042, }, ++ { 1, 0, 2, 0x00000ce0, 0xffffffff, 0x42424242, }, ++ { 1, 0, 2, 0x00000ce4, 0xffffffff, 0x38404242, }, ++ { 1, 0, 2, 0x00000ce8, 0x0000ffff, 0x20203436, }, ++ { 1, 1, 0, 0x00000e24, 0xffffffff, 0x46464646, }, ++ { 1, 1, 0, 0x00000e28, 0xffffffff, 0x44464646, }, ++ { 1, 1, 0, 0x00000e2c, 0xffffffff, 0x46464646, }, ++ { 1, 1, 0, 0x00000e30, 0xffffffff, 0x42444646, }, ++ { 1, 1, 1, 0x00000e34, 0xffffffff, 0x44444444, }, ++ { 1, 1, 1, 0x00000e38, 0xffffffff, 0x40424444, }, ++ { 1, 1, 2, 0x00000ed8, 0xffffffff, 0x42424242, }, ++ { 1, 1, 2, 0x00000edc, 0xffffffff, 0x38404242, }, ++ { 1, 1, 0, 0x00000e3c, 0xffffffff, 0x46464646, }, ++ { 1, 1, 0, 0x00000e40, 0xffffffff, 0x42444646, }, ++ { 1, 1, 0, 0x00000e44, 0xffffffff, 0x44443840, }, ++ { 1, 1, 1, 0x00000e48, 0xffffffff, 0x44444444, }, ++ { 1, 1, 1, 0x00000e4c, 0xffffffff, 0x36384042, }, ++ { 1, 1, 2, 0x00000ee0, 0xffffffff, 0x42424242, }, ++ { 1, 1, 2, 0x00000ee4, 0xffffffff, 0x38404242, }, ++ { 1, 1, 2, 0x00000ee8, 0x0000ffff, 0x20203436, }, ++ { 1, 2, 0, 0x00001824, 0xffffffff, 0x46464646, }, ++ { 1, 2, 0, 0x00001828, 0xffffffff, 0x44464646, }, ++ { 1, 2, 0, 0x0000182c, 0xffffffff, 0x46464646, }, ++ { 1, 2, 0, 0x00001830, 0xffffffff, 0x42444646, }, ++ { 1, 2, 1, 0x00001834, 0xffffffff, 0x44444444, }, ++ { 1, 2, 1, 0x00001838, 0xffffffff, 0x40424444, }, ++ { 1, 2, 2, 0x000018d8, 0xffffffff, 0x42424242, }, ++ { 1, 2, 2, 0x000018dc, 0xffffffff, 0x38404242, }, ++ { 1, 2, 0, 0x0000183c, 0xffffffff, 0x46464646, }, ++ { 1, 2, 0, 0x00001840, 0xffffffff, 0x42444646, }, ++ { 1, 2, 0, 0x00001844, 0xffffffff, 0x44443840, }, ++ { 1, 2, 1, 0x00001848, 0xffffffff, 0x44444444, }, ++ { 1, 2, 1, 0x0000184c, 0xffffffff, 0x36384042, }, ++ { 1, 2, 2, 0x000018e0, 0xffffffff, 0x42424242, }, ++ { 1, 2, 2, 0x000018e4, 0xffffffff, 0x38404242, }, ++ { 1, 2, 2, 0x000018e8, 0x0000ffff, 0x20203436, }, ++ { 1, 3, 0, 0x00001a24, 0xffffffff, 0x46464646, }, ++ { 1, 3, 0, 0x00001a28, 0xffffffff, 0x44464646, }, ++ { 1, 3, 0, 0x00001a2c, 0xffffffff, 0x46464646, }, ++ { 1, 3, 0, 0x00001a30, 0xffffffff, 0x42444646, }, ++ { 1, 3, 1, 0x00001a34, 0xffffffff, 0x44444444, }, ++ { 1, 3, 1, 0x00001a38, 0xffffffff, 0x40424444, }, ++ { 1, 3, 2, 0x00001ad8, 0xffffffff, 0x42424242, }, ++ { 1, 3, 2, 0x00001adc, 0xffffffff, 0x38404242, }, ++ { 1, 3, 0, 0x00001a3c, 0xffffffff, 0x46464646, }, ++ { 1, 3, 0, 0x00001a40, 0xffffffff, 0x42444646, }, ++ { 1, 3, 0, 0x00001a44, 0xffffffff, 0x44443840, }, ++ { 1, 3, 1, 0x00001a48, 0xffffffff, 0x44444444, }, ++ { 1, 3, 1, 0x00001a4c, 0xffffffff, 0x36384042, }, ++ { 1, 3, 2, 0x00001ae0, 0xffffffff, 0x42424242, }, ++ { 1, 3, 2, 0x00001ae4, 0xffffffff, 0x38404242, }, ++ { 1, 3, 2, 0x00001ae8, 0x0000ffff, 0x20203436, }, ++}; ++ ++RTW_DECL_TABLE_BB_PG(rtw8814a_bb_pg_type5); ++ ++static const struct rtw_phy_pg_cfg_pair rtw8814a_bb_pg_type7[] = { ++ { 0, 0, 0, 0x00000c20, 0xffffffff, 0x34343434, }, ++ { 0, 0, 0, 0x00000c24, 0xffffffff, 0x34343434, }, ++ { 0, 0, 0, 0x00000c28, 0xffffffff, 0x30323434, }, ++ { 0, 0, 0, 0x00000c2c, 0xffffffff, 0x34343434, }, ++ { 0, 0, 0, 0x00000c30, 0xffffffff, 0x28303234, }, ++ { 0, 0, 1, 0x00000c34, 0xffffffff, 0x34343434, }, ++ { 0, 0, 1, 0x00000c38, 0xffffffff, 0x28303234, }, ++ { 0, 0, 2, 0x00000cd8, 0xffffffff, 0x34343434, }, ++ { 0, 0, 2, 0x00000cdc, 0xffffffff, 0x28303234, }, ++ { 0, 0, 0, 0x00000c3c, 0xffffffff, 0x34343434, }, ++ { 0, 0, 0, 0x00000c40, 0xffffffff, 0x28303234, }, ++ { 0, 0, 0, 0x00000c44, 0xffffffff, 0x34342426, }, ++ { 0, 0, 1, 0x00000c48, 0xffffffff, 0x32343434, }, ++ { 0, 0, 1, 0x00000c4c, 0xffffffff, 0x24262830, }, ++ { 0, 0, 2, 0x00000ce0, 0xffffffff, 0x34343434, }, ++ { 0, 0, 2, 0x00000ce4, 0xffffffff, 0x28303234, }, ++ { 0, 0, 2, 0x00000ce8, 0x0000ffff, 0x24263434, }, ++ { 0, 1, 0, 0x00000e20, 0xffffffff, 0x34343434, }, ++ { 0, 1, 0, 0x00000e24, 0xffffffff, 0x34343434, }, ++ { 0, 1, 0, 0x00000e28, 0xffffffff, 0x30323434, }, ++ { 0, 1, 0, 0x00000e2c, 0xffffffff, 0x34343434, }, ++ { 0, 1, 0, 0x00000e30, 0xffffffff, 0x28303234, }, ++ { 0, 1, 1, 0x00000e34, 0xffffffff, 0x34343434, }, ++ { 0, 1, 1, 0x00000e38, 0xffffffff, 0x28303234, }, ++ { 0, 1, 2, 0x00000ed8, 0xffffffff, 0x34343434, }, ++ { 0, 1, 2, 0x00000edc, 0xffffffff, 0x28303234, }, ++ { 0, 1, 0, 0x00000e3c, 0xffffffff, 0x34343434, }, ++ { 0, 1, 0, 0x00000e40, 0xffffffff, 0x28303234, }, ++ { 0, 1, 0, 0x00000e44, 0xffffffff, 0x34342426, }, ++ { 0, 1, 1, 0x00000e48, 0xffffffff, 0x32343434, }, ++ { 0, 1, 1, 0x00000e4c, 0xffffffff, 0x24262830, }, ++ { 0, 1, 2, 0x00000ee0, 0xffffffff, 0x34343434, }, ++ { 0, 1, 2, 0x00000ee4, 0xffffffff, 0x28303234, }, ++ { 0, 1, 2, 0x00000ee8, 0x0000ffff, 0x24263434, }, ++ { 0, 2, 0, 0x00001820, 0xffffffff, 0x34343434, }, ++ { 0, 2, 0, 0x00001824, 0xffffffff, 0x34343434, }, ++ { 0, 2, 0, 0x00001828, 0xffffffff, 0x30323434, }, ++ { 0, 2, 0, 0x0000182c, 0xffffffff, 0x34343434, }, ++ { 0, 2, 0, 0x00001830, 0xffffffff, 0x28303234, }, ++ { 0, 2, 1, 0x00001834, 0xffffffff, 0x34343434, }, ++ { 0, 2, 1, 0x00001838, 0xffffffff, 0x28303234, }, ++ { 0, 2, 2, 0x000018d8, 0xffffffff, 0x34343434, }, ++ { 0, 2, 2, 0x000018dc, 0xffffffff, 0x28303234, }, ++ { 0, 2, 0, 0x0000183c, 0xffffffff, 0x34343434, }, ++ { 0, 2, 0, 0x00001840, 0xffffffff, 0x28303234, }, ++ { 0, 2, 0, 0x00001844, 0xffffffff, 0x34342426, }, ++ { 0, 2, 1, 0x00001848, 0xffffffff, 0x32343434, }, ++ { 0, 2, 1, 0x0000184c, 0xffffffff, 0x24262830, }, ++ { 0, 2, 2, 0x000018e0, 0xffffffff, 0x34343434, }, ++ { 0, 2, 2, 0x000018e4, 0xffffffff, 0x28303234, }, ++ { 0, 2, 2, 0x000018e8, 0x0000ffff, 0x24263434, }, ++ { 0, 3, 0, 0x00001a20, 0xffffffff, 0x34343434, }, ++ { 0, 3, 0, 0x00001a24, 0xffffffff, 0x34343434, }, ++ { 0, 3, 0, 0x00001a28, 0xffffffff, 0x30323434, }, ++ { 0, 3, 0, 0x00001a2c, 0xffffffff, 0x34343434, }, ++ { 0, 3, 0, 0x00001a30, 0xffffffff, 0x28303234, }, ++ { 0, 3, 1, 0x00001a34, 0xffffffff, 0x34343434, }, ++ { 0, 3, 1, 0x00001a38, 0xffffffff, 0x28303234, }, ++ { 0, 3, 2, 0x00001ad8, 0xffffffff, 0x34343434, }, ++ { 0, 3, 2, 0x00001adc, 0xffffffff, 0x28303234, }, ++ { 0, 3, 0, 0x00001a3c, 0xffffffff, 0x34343434, }, ++ { 0, 3, 0, 0x00001a40, 0xffffffff, 0x28303234, }, ++ { 0, 3, 0, 0x00001a44, 0xffffffff, 0x34342426, }, ++ { 0, 3, 1, 0x00001a48, 0xffffffff, 0x32343434, }, ++ { 0, 3, 1, 0x00001a4c, 0xffffffff, 0x24262830, }, ++ { 0, 3, 2, 0x00001ae0, 0xffffffff, 0x34343434, }, ++ { 0, 3, 2, 0x00001ae4, 0xffffffff, 0x28303234, }, ++ { 0, 3, 2, 0x00001ae8, 0x0000ffff, 0x24263434, }, ++ { 1, 0, 0, 0x00000c24, 0xffffffff, 0x34343434, }, ++ { 1, 0, 0, 0x00000c28, 0xffffffff, 0x30323434, }, ++ { 1, 0, 0, 0x00000c2c, 0xffffffff, 0x34343434, }, ++ { 1, 0, 0, 0x00000c30, 0xffffffff, 0x28303234, }, ++ { 1, 0, 1, 0x00000c34, 0xffffffff, 0x34343434, }, ++ { 1, 0, 1, 0x00000c38, 0xffffffff, 0x28303234, }, ++ { 1, 0, 2, 0x00000cd8, 0xffffffff, 0x34343434, }, ++ { 1, 0, 2, 0x00000cdc, 0xffffffff, 0x28303234, }, ++ { 1, 0, 0, 0x00000c3c, 0xffffffff, 0x34343434, }, ++ { 1, 0, 0, 0x00000c40, 0xffffffff, 0x28303234, }, ++ { 1, 0, 0, 0x00000c44, 0xffffffff, 0x34342426, }, ++ { 1, 0, 1, 0x00000c48, 0xffffffff, 0x32343434, }, ++ { 1, 0, 1, 0x00000c4c, 0xffffffff, 0x24262830, }, ++ { 1, 0, 2, 0x00000ce0, 0xffffffff, 0x34343434, }, ++ { 1, 0, 2, 0x00000ce4, 0xffffffff, 0x28303234, }, ++ { 1, 0, 2, 0x00000ce8, 0x0000ffff, 0x24263434, }, ++ { 1, 1, 0, 0x00000e24, 0xffffffff, 0x34343434, }, ++ { 1, 1, 0, 0x00000e28, 0xffffffff, 0x30323434, }, ++ { 1, 1, 0, 0x00000e2c, 0xffffffff, 0x34343434, }, ++ { 1, 1, 0, 0x00000e30, 0xffffffff, 0x28303234, }, ++ { 1, 1, 1, 0x00000e34, 0xffffffff, 0x34343434, }, ++ { 1, 1, 1, 0x00000e38, 0xffffffff, 0x28303234, }, ++ { 1, 1, 2, 0x00000ed8, 0xffffffff, 0x34343434, }, ++ { 1, 1, 2, 0x00000edc, 0xffffffff, 0x28303234, }, ++ { 1, 1, 0, 0x00000e3c, 0xffffffff, 0x34343434, }, ++ { 1, 1, 0, 0x00000e40, 0xffffffff, 0x28303234, }, ++ { 1, 1, 0, 0x00000e44, 0xffffffff, 0x34342426, }, ++ { 1, 1, 1, 0x00000e48, 0xffffffff, 0x32343434, }, ++ { 1, 1, 1, 0x00000e4c, 0xffffffff, 0x24262830, }, ++ { 1, 1, 2, 0x00000ee0, 0xffffffff, 0x34343434, }, ++ { 1, 1, 2, 0x00000ee4, 0xffffffff, 0x28303234, }, ++ { 1, 1, 2, 0x00000ee8, 0x0000ffff, 0x24263434, }, ++ { 1, 2, 0, 0x00001824, 0xffffffff, 0x34343434, }, ++ { 1, 2, 0, 0x00001828, 0xffffffff, 0x30323434, }, ++ { 1, 2, 0, 0x0000182c, 0xffffffff, 0x34343434, }, ++ { 1, 2, 0, 0x00001830, 0xffffffff, 0x28303234, }, ++ { 1, 2, 1, 0x00001834, 0xffffffff, 0x34343434, }, ++ { 1, 2, 1, 0x00001838, 0xffffffff, 0x28303234, }, ++ { 1, 2, 2, 0x000018d8, 0xffffffff, 0x34343434, }, ++ { 1, 2, 2, 0x000018dc, 0xffffffff, 0x28303234, }, ++ { 1, 2, 0, 0x0000183c, 0xffffffff, 0x34343434, }, ++ { 1, 2, 0, 0x00001840, 0xffffffff, 0x28303234, }, ++ { 1, 2, 0, 0x00001844, 0xffffffff, 0x34342426, }, ++ { 1, 2, 1, 0x00001848, 0xffffffff, 0x32343434, }, ++ { 1, 2, 1, 0x0000184c, 0xffffffff, 0x24262830, }, ++ { 1, 2, 2, 0x000018e0, 0xffffffff, 0x34343434, }, ++ { 1, 2, 2, 0x000018e4, 0xffffffff, 0x28303234, }, ++ { 1, 2, 2, 0x000018e8, 0x0000ffff, 0x24263434, }, ++ { 1, 3, 0, 0x00001a24, 0xffffffff, 0x34343434, }, ++ { 1, 3, 0, 0x00001a28, 0xffffffff, 0x30323434, }, ++ { 1, 3, 0, 0x00001a2c, 0xffffffff, 0x34343434, }, ++ { 1, 3, 0, 0x00001a30, 0xffffffff, 0x28303234, }, ++ { 1, 3, 1, 0x00001a34, 0xffffffff, 0x34343434, }, ++ { 1, 3, 1, 0x00001a38, 0xffffffff, 0x28303234, }, ++ { 1, 3, 2, 0x00001ad8, 0xffffffff, 0x34343434, }, ++ { 1, 3, 2, 0x00001adc, 0xffffffff, 0x28303234, }, ++ { 1, 3, 0, 0x00001a3c, 0xffffffff, 0x34343434, }, ++ { 1, 3, 0, 0x00001a40, 0xffffffff, 0x28303234, }, ++ { 1, 3, 0, 0x00001a44, 0xffffffff, 0x34342426, }, ++ { 1, 3, 1, 0x00001a48, 0xffffffff, 0x32343434, }, ++ { 1, 3, 1, 0x00001a4c, 0xffffffff, 0x24262830, }, ++ { 1, 3, 2, 0x00001ae0, 0xffffffff, 0x34343434, }, ++ { 1, 3, 2, 0x00001ae4, 0xffffffff, 0x28303234, }, ++ { 1, 3, 2, 0x00001ae8, 0x0000ffff, 0x24263434, }, ++}; ++ ++RTW_DECL_TABLE_BB_PG(rtw8814a_bb_pg_type7); ++ ++static const struct rtw_phy_pg_cfg_pair rtw8814a_bb_pg_type8[] = { ++ { 0, 0, 0, 0x00000c20, 0xffffffff, 0x43434343, }, ++ { 0, 0, 0, 0x00000c24, 0xffffffff, 0x43434343, }, ++ { 0, 0, 0, 0x00000c28, 0xffffffff, 0x35373941, }, ++ { 0, 0, 0, 0x00000c2c, 0xffffffff, 0x43434343, }, ++ { 0, 0, 0, 0x00000c30, 0xffffffff, 0x33353739, }, ++ { 0, 0, 1, 0x00000c34, 0xffffffff, 0x43434343, }, ++ { 0, 0, 1, 0x00000c38, 0xffffffff, 0x31333537, }, ++ { 0, 0, 2, 0x00000cd8, 0xffffffff, 0x43434343, }, ++ { 0, 0, 2, 0x00000cdc, 0xffffffff, 0x29313335, }, ++ { 0, 0, 0, 0x00000c3c, 0xffffffff, 0x34343434, }, ++ { 0, 0, 0, 0x00000c40, 0xffffffff, 0x28303234, }, ++ { 0, 0, 0, 0x00000c44, 0xffffffff, 0x32322426, }, ++ { 0, 0, 1, 0x00000c48, 0xffffffff, 0x30323232, }, ++ { 0, 0, 1, 0x00000c4c, 0xffffffff, 0x22242628, }, ++ { 0, 0, 2, 0x00000ce0, 0xffffffff, 0x30303030, }, ++ { 0, 0, 2, 0x00000ce4, 0xffffffff, 0x24262830, }, ++ { 0, 0, 2, 0x00000ce8, 0x0000ffff, 0x20222222, }, ++ { 0, 1, 0, 0x00000e20, 0xffffffff, 0x43434343, }, ++ { 0, 1, 0, 0x00000e24, 0xffffffff, 0x43434343, }, ++ { 0, 1, 0, 0x00000e28, 0xffffffff, 0x35373941, }, ++ { 0, 1, 0, 0x00000e2c, 0xffffffff, 0x41434343, }, ++ { 0, 1, 0, 0x00000e30, 0xffffffff, 0x33353739, }, ++ { 0, 1, 1, 0x00000e34, 0xffffffff, 0x39414141, }, ++ { 0, 1, 1, 0x00000e38, 0xffffffff, 0x31333537, }, ++ { 0, 1, 2, 0x00000ed8, 0xffffffff, 0x37393939, }, ++ { 0, 1, 2, 0x00000edc, 0xffffffff, 0x29313335, }, ++ { 0, 1, 0, 0x00000e3c, 0xffffffff, 0x34343434, }, ++ { 0, 1, 0, 0x00000e40, 0xffffffff, 0x28303234, }, ++ { 0, 1, 0, 0x00000e44, 0xffffffff, 0x32322426, }, ++ { 0, 1, 1, 0x00000e48, 0xffffffff, 0x30323232, }, ++ { 0, 1, 1, 0x00000e4c, 0xffffffff, 0x22242628, }, ++ { 0, 1, 2, 0x00000ee0, 0xffffffff, 0x30303030, }, ++ { 0, 1, 2, 0x00000ee4, 0xffffffff, 0x24262830, }, ++ { 0, 1, 2, 0x00000ee8, 0x0000ffff, 0x20222222, }, ++ { 0, 2, 0, 0x00001820, 0xffffffff, 0x43434343, }, ++ { 0, 2, 0, 0x00001824, 0xffffffff, 0x43434343, }, ++ { 0, 2, 0, 0x00001828, 0xffffffff, 0x35373941, }, ++ { 0, 2, 0, 0x0000182c, 0xffffffff, 0x41434343, }, ++ { 0, 2, 0, 0x00001830, 0xffffffff, 0x33353739, }, ++ { 0, 2, 1, 0x00001834, 0xffffffff, 0x39414141, }, ++ { 0, 2, 1, 0x00001838, 0xffffffff, 0x31333537, }, ++ { 0, 2, 2, 0x000018d8, 0xffffffff, 0x37393939, }, ++ { 0, 2, 2, 0x000018dc, 0xffffffff, 0x29313335, }, ++ { 0, 2, 0, 0x0000183c, 0xffffffff, 0x34343434, }, ++ { 0, 2, 0, 0x00001840, 0xffffffff, 0x28303234, }, ++ { 0, 2, 0, 0x00001844, 0xffffffff, 0x32322426, }, ++ { 0, 2, 1, 0x00001848, 0xffffffff, 0x30323232, }, ++ { 0, 2, 1, 0x0000184c, 0xffffffff, 0x22242628, }, ++ { 0, 2, 2, 0x000018e0, 0xffffffff, 0x30303030, }, ++ { 0, 2, 2, 0x000018e4, 0xffffffff, 0x24262830, }, ++ { 0, 2, 2, 0x000018e8, 0x0000ffff, 0x20222222, }, ++ { 0, 3, 0, 0x00001a20, 0xffffffff, 0x43434343, }, ++ { 0, 3, 0, 0x00001a24, 0xffffffff, 0x43434343, }, ++ { 0, 3, 0, 0x00001a28, 0xffffffff, 0x35373941, }, ++ { 0, 3, 0, 0x00001a2c, 0xffffffff, 0x41434343, }, ++ { 0, 3, 0, 0x00001a30, 0xffffffff, 0x33353739, }, ++ { 0, 3, 1, 0x00001a34, 0xffffffff, 0x39414141, }, ++ { 0, 3, 1, 0x00001a38, 0xffffffff, 0x31333537, }, ++ { 0, 3, 2, 0x00001ad8, 0xffffffff, 0x37393939, }, ++ { 0, 3, 2, 0x00001adc, 0xffffffff, 0x29313335, }, ++ { 0, 3, 0, 0x00001a3c, 0xffffffff, 0x34343434, }, ++ { 0, 3, 0, 0x00001a40, 0xffffffff, 0x28303234, }, ++ { 0, 3, 0, 0x00001a44, 0xffffffff, 0x32322426, }, ++ { 0, 3, 1, 0x00001a48, 0xffffffff, 0x30323232, }, ++ { 0, 3, 1, 0x00001a4c, 0xffffffff, 0x22242628, }, ++ { 0, 3, 2, 0x00001ae0, 0xffffffff, 0x30303030, }, ++ { 0, 3, 2, 0x00001ae4, 0xffffffff, 0x24262830, }, ++ { 0, 3, 2, 0x00001ae8, 0x0000ffff, 0x20222222, }, ++ { 1, 0, 0, 0x00000c24, 0xffffffff, 0x46464646, }, ++ { 1, 0, 0, 0x00000c28, 0xffffffff, 0x39414345, }, ++ { 1, 0, 0, 0x00000c2c, 0xffffffff, 0x46464646, }, ++ { 1, 0, 0, 0x00000c30, 0xffffffff, 0x38404244, }, ++ { 1, 0, 1, 0x00000c34, 0xffffffff, 0x46464646, }, ++ { 1, 0, 1, 0x00000c38, 0xffffffff, 0x36384042, }, ++ { 1, 0, 2, 0x00000cd8, 0xffffffff, 0x46464646, }, ++ { 1, 0, 2, 0x00000cdc, 0xffffffff, 0x34363840, }, ++ { 1, 0, 0, 0x00000c3c, 0xffffffff, 0x46464646, }, ++ { 1, 0, 0, 0x00000c40, 0xffffffff, 0x38404244, }, ++ { 1, 0, 0, 0x00000c44, 0xffffffff, 0x46463738, }, ++ { 1, 0, 1, 0x00000c48, 0xffffffff, 0x42444646, }, ++ { 1, 0, 1, 0x00000c4c, 0xffffffff, 0x35373840, }, ++ { 1, 0, 2, 0x00000ce0, 0xffffffff, 0x46464646, }, ++ { 1, 0, 2, 0x00000ce4, 0xffffffff, 0x37394143, }, ++ { 1, 0, 2, 0x00000ce8, 0x0000ffff, 0x33333335, }, ++ { 1, 1, 0, 0x00000e24, 0xffffffff, 0x46464646, }, ++ { 1, 1, 0, 0x00000e28, 0xffffffff, 0x39414345, }, ++ { 1, 1, 0, 0x00000e2c, 0xffffffff, 0x46464646, }, ++ { 1, 1, 0, 0x00000e30, 0xffffffff, 0x38404244, }, ++ { 1, 1, 1, 0x00000e34, 0xffffffff, 0x46464646, }, ++ { 1, 1, 1, 0x00000e38, 0xffffffff, 0x36384042, }, ++ { 1, 1, 2, 0x00000ed8, 0xffffffff, 0x46464646, }, ++ { 1, 1, 2, 0x00000edc, 0xffffffff, 0x34363840, }, ++ { 1, 1, 0, 0x00000e3c, 0xffffffff, 0x46464646, }, ++ { 1, 1, 0, 0x00000e40, 0xffffffff, 0x38404244, }, ++ { 1, 1, 0, 0x00000e44, 0xffffffff, 0x46463738, }, ++ { 1, 1, 1, 0x00000e48, 0xffffffff, 0x42444646, }, ++ { 1, 1, 1, 0x00000e4c, 0xffffffff, 0x35373840, }, ++ { 1, 1, 2, 0x00000ee0, 0xffffffff, 0x46464646, }, ++ { 1, 1, 2, 0x00000ee4, 0xffffffff, 0x37394143, }, ++ { 1, 1, 2, 0x00000ee8, 0x0000ffff, 0x33333335, }, ++ { 1, 2, 0, 0x00001824, 0xffffffff, 0x46464646, }, ++ { 1, 2, 0, 0x00001828, 0xffffffff, 0x39414345, }, ++ { 1, 2, 0, 0x0000182c, 0xffffffff, 0x46464646, }, ++ { 1, 2, 0, 0x00001830, 0xffffffff, 0x38404244, }, ++ { 1, 2, 1, 0x00001834, 0xffffffff, 0x46464646, }, ++ { 1, 2, 1, 0x00001838, 0xffffffff, 0x36384042, }, ++ { 1, 2, 2, 0x000018d8, 0xffffffff, 0x46464646, }, ++ { 1, 2, 2, 0x000018dc, 0xffffffff, 0x34363840, }, ++ { 1, 2, 0, 0x0000183c, 0xffffffff, 0x46464646, }, ++ { 1, 2, 0, 0x00001840, 0xffffffff, 0x38404244, }, ++ { 1, 2, 0, 0x00001844, 0xffffffff, 0x46463738, }, ++ { 1, 2, 1, 0x00001848, 0xffffffff, 0x42444646, }, ++ { 1, 2, 1, 0x0000184c, 0xffffffff, 0x35373840, }, ++ { 1, 2, 2, 0x000018e0, 0xffffffff, 0x46464646, }, ++ { 1, 2, 2, 0x000018e4, 0xffffffff, 0x37394143, }, ++ { 1, 2, 2, 0x000018e8, 0x0000ffff, 0x33333335, }, ++ { 1, 3, 0, 0x00001a24, 0xffffffff, 0x46464646, }, ++ { 1, 3, 0, 0x00001a28, 0xffffffff, 0x39414345, }, ++ { 1, 3, 0, 0x00001a2c, 0xffffffff, 0x46464646, }, ++ { 1, 3, 0, 0x00001a30, 0xffffffff, 0x38404244, }, ++ { 1, 3, 1, 0x00001a34, 0xffffffff, 0x46464646, }, ++ { 1, 3, 1, 0x00001a38, 0xffffffff, 0x36384042, }, ++ { 1, 3, 2, 0x00001ad8, 0xffffffff, 0x46464646, }, ++ { 1, 3, 2, 0x00001adc, 0xffffffff, 0x34363840, }, ++ { 1, 3, 0, 0x00001a3c, 0xffffffff, 0x46464646, }, ++ { 1, 3, 0, 0x00001a40, 0xffffffff, 0x38404244, }, ++ { 1, 3, 0, 0x00001a44, 0xffffffff, 0x46463738, }, ++ { 1, 3, 1, 0x00001a48, 0xffffffff, 0x42444646, }, ++ { 1, 3, 1, 0x00001a4c, 0xffffffff, 0x35373840, }, ++ { 1, 3, 2, 0x00001ae0, 0xffffffff, 0x46464646, }, ++ { 1, 3, 2, 0x00001ae4, 0xffffffff, 0x37394143, }, ++ { 1, 3, 2, 0x00001ae8, 0x0000ffff, 0x33333335, }, ++}; ++ ++RTW_DECL_TABLE_BB_PG(rtw8814a_bb_pg_type8); ++ ++static const u32 rtw8814a_rf_a[] = { ++ 0x018, 0x00013124, ++ 0x040, 0x00000C00, ++ 0x058, 0x00000F98, ++ 0x07F, 0x00068004, ++ 0x0B0, 0x000FFFFE, ++ 0x0B1, 0x0003FF48, ++ 0x0B2, 0x0006AA3F, ++ 0x0B3, 0x000FFC9A, ++ 0x0B4, 0x0000A78F, ++ 0x0B5, 0x00000A3F, ++ 0x0B6, 0x0000C09C, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x0B7, 0x00030008, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x0B7, 0x00030008, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x0B7, 0x00030008, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x0B7, 0x00030008, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x0B7, 0x00030008, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x0B7, 0x00030008, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x0B7, 0x00030008, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x0B7, 0x00030008, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x0B7, 0x00030008, ++ 0xA0000000, 0x00000000, ++ 0x0B7, 0x0003000C, ++ 0xB0000000, 0x00000000, ++ 0x0B8, 0x0007400E, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x0B9, 0x000FBF50, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x0B9, 0x000FBF50, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x0B9, 0x000FBF50, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x0B9, 0x000FBF50, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x0B9, 0x000FBF50, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x0B9, 0x000FBF50, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x0B9, 0x000FBF50, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x0B9, 0x000FBF50, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x0B9, 0x000FBF50, ++ 0xA0000000, 0x00000000, ++ 0x0B9, 0x000FBF50, ++ 0xB0000000, 0x00000000, ++ 0x0BA, 0x00050780, ++ 0x0BB, 0x00000000, ++ 0x0BC, 0x00040009, ++ 0x0BD, 0x00000000, ++ 0x0BE, 0x00000000, ++ 0x0BF, 0x00000000, ++ 0x0EF, 0x00020000, ++ 0x03E, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x03F, 0x00030000, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x03F, 0x00030000, ++ 0xA0000000, 0x00000000, ++ 0x03F, 0x00030000, ++ 0xB0000000, 0x00000000, ++ 0x03E, 0x00020000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x03F, 0x00040000, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x03F, 0x00040000, ++ 0xA0000000, 0x00000000, ++ 0x03F, 0x00040000, ++ 0xB0000000, 0x00000000, ++ 0x03E, 0x00040000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x03F, 0x00030000, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x03F, 0x00030000, ++ 0xA0000000, 0x00000000, ++ 0x03F, 0x00030000, ++ 0xB0000000, 0x00000000, ++ 0x03E, 0x00060000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x03F, 0x00030000, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x03F, 0x00030000, ++ 0xA0000000, 0x00000000, ++ 0x03F, 0x00030000, ++ 0xB0000000, 0x00000000, ++ 0x0EF, 0x00000000, ++ 0x0EF, 0x00010000, ++ 0x03E, 0x00000000, ++ 0x03F, 0x00006800, ++ 0x03E, 0x00000080, ++ 0x03F, 0x00006000, ++ 0x03E, 0x00000100, ++ 0x03F, 0x00004800, ++ 0x03E, 0x00000180, ++ 0x03F, 0x00004000, ++ 0x03E, 0x00000200, ++ 0x03F, 0x00004000, ++ 0x03E, 0x00000280, ++ 0x03F, 0x00002800, ++ 0x03E, 0x00000300, ++ 0x03F, 0x00002800, ++ 0x03E, 0x00000380, ++ 0x03F, 0x00002000, ++ 0x0EF, 0x00000000, ++ 0x0EF, 0x00040000, ++ 0x03E, 0x00000000, ++ 0x03F, 0x000000BC, ++ 0x03E, 0x00000040, ++ 0x03F, 0x00000053, ++ 0x03E, 0x00000050, ++ 0x03F, 0x00000050, ++ 0x03E, 0x00000060, ++ 0x03F, 0x00000050, ++ 0x0EF, 0x00000000, ++ 0x0EF, 0x00000400, ++ 0x03E, 0x00000006, ++ 0x041, 0x000EE080, ++ 0x03E, 0x00000008, ++ 0x041, 0x000EE0C0, ++ 0x03E, 0x0000000A, ++ 0x041, 0x000EE100, ++ 0x03E, 0x0000000C, ++ 0x041, 0x000EE100, ++ 0x0EF, 0x00000000, ++ 0x018, 0x00000006, ++ 0x80000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x086, 0x000E335A, ++ 0x087, 0x00079F80, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x086, 0x000E335A, ++ 0x087, 0x00079F80, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x086, 0x000E335A, ++ 0x087, 0x00079F80, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x086, 0x000E335A, ++ 0x087, 0x00079F80, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x086, 0x000E335A, ++ 0x087, 0x00079F80, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x086, 0x000E335A, ++ 0x087, 0x00079F80, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x086, 0x000E335A, ++ 0x087, 0x00079F80, ++ 0xA0000000, 0x00000000, ++ 0x086, 0x000E4B58, ++ 0x087, 0x00049F80, ++ 0xB0000000, 0x00000000, ++ 0x0DF, 0x00000008, ++ 0x0EF, 0x00002000, ++ 0x80000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x03B, 0x0003F19B, ++ 0x03B, 0x00037A5B, ++ 0x03B, 0x0002A433, ++ 0x03B, 0x00027BD3, ++ 0x03B, 0x0001F80B, ++ 0x03B, 0x000179C3, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x03B, 0x0003F19B, ++ 0x03B, 0x00037A5B, ++ 0x03B, 0x0002A433, ++ 0x03B, 0x00027BD3, ++ 0x03B, 0x0001F80B, ++ 0x03B, 0x000179C3, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x03B, 0x0003F19B, ++ 0x03B, 0x00037A5B, ++ 0x03B, 0x0002A433, ++ 0x03B, 0x00027BD3, ++ 0x03B, 0x0001F80B, ++ 0x03B, 0x000179C3, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x03B, 0x0003F19B, ++ 0x03B, 0x00037A5B, ++ 0x03B, 0x0002A433, ++ 0x03B, 0x00027BD3, ++ 0x03B, 0x0001F80B, ++ 0x03B, 0x000179C3, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03B, 0x0003F19B, ++ 0x03B, 0x00037A5B, ++ 0x03B, 0x0002A433, ++ 0x03B, 0x00027BD3, ++ 0x03B, 0x0001F80B, ++ 0x03B, 0x000179C3, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x03B, 0x0003F19B, ++ 0x03B, 0x00037A5B, ++ 0x03B, 0x0002A433, ++ 0x03B, 0x00027BD3, ++ 0x03B, 0x0001F80B, ++ 0x03B, 0x000179C3, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x03B, 0x0003F19B, ++ 0x03B, 0x00037A5B, ++ 0x03B, 0x0002A433, ++ 0x03B, 0x00027BD3, ++ 0x03B, 0x0001F80B, ++ 0x03B, 0x000179C3, ++ 0xA0000000, 0x00000000, ++ 0x03B, 0x0003F258, ++ 0x03B, 0x00030A58, ++ 0x03B, 0x0002FA58, ++ 0x03B, 0x00022590, ++ 0x03B, 0x0001FA50, ++ 0x03B, 0x00010248, ++ 0x03B, 0x00008240, ++ 0xB0000000, 0x00000000, ++ 0x0EF, 0x00000100, ++ 0x80000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0xA0000000, 0x00000000, ++ 0x034, 0x0000ADF6, ++ 0x034, 0x00009DF3, ++ 0x034, 0x00008DF0, ++ 0x034, 0x00007DED, ++ 0x034, 0x00006DEA, ++ 0x034, 0x00005CED, ++ 0x034, 0x00004CEA, ++ 0x034, 0x000034EA, ++ 0x034, 0x000024E7, ++ 0x034, 0x0000146A, ++ 0x034, 0x0000006B, ++ 0xB0000000, 0x00000000, ++ 0x80000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0xA0000000, 0x00000000, ++ 0x034, 0x0008ADF6, ++ 0x034, 0x00089DF3, ++ 0x034, 0x00088DF0, ++ 0x034, 0x00087DED, ++ 0x034, 0x00086DEA, ++ 0x034, 0x00085CED, ++ 0x034, 0x00084CEA, ++ 0x034, 0x000834EA, ++ 0x034, 0x000824E7, ++ 0x034, 0x0008146A, ++ 0x034, 0x0008006B, ++ 0xB0000000, 0x00000000, ++ 0x0EF, 0x00000000, ++ 0x0EF, 0x000020A2, ++ 0x0DF, 0x00000080, ++ 0x035, 0x00000192, ++ 0x035, 0x00008192, ++ 0x035, 0x00010192, ++ 0x036, 0x00000024, ++ 0x036, 0x00008024, ++ 0x036, 0x00010024, ++ 0x036, 0x00018024, ++ 0x0EF, 0x00000000, ++ 0x051, 0x00000C21, ++ 0x052, 0x000006D9, ++ 0x053, 0x000FC649, ++ 0x054, 0x0000017E, ++ 0x018, 0x0001012A, ++ 0x081, 0x0007FC00, ++ 0x089, 0x00050110, ++ 0x08A, 0x00043E50, ++ 0x08B, 0x0002E180, ++ 0x08C, 0x00093C3C, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x085, 0x000F8000, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x085, 0x000F8000, ++ 0xA0000000, 0x00000000, ++ 0x085, 0x000F8000, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x08D, 0x000FFFF0, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x08D, 0x000FFFF0, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x08D, 0x000FFFF0, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x08D, 0x000FFFF0, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x08D, 0x000FFFF0, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x08D, 0x000FFFF0, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x08D, 0x000FFFF0, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x08D, 0x000FFFF0, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x08D, 0x000FFFF0, ++ 0xA0000000, 0x00000000, ++ 0x08D, 0x000FFFF0, ++ 0xB0000000, 0x00000000, ++ 0x0EF, 0x00001000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00038023, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00024000, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00024000, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00088000, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00024000, ++ 0x90000007, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00084000, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00088000, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00088000, ++ 0xA0000000, 0x00000000, ++ 0x03C, 0x00028000, ++ 0xB0000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00030023, ++ 0x03C, 0x00048000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00028623, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00021633, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x0001C633, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00010293, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00009593, ++ 0x03C, 0x00000000, ++ 0x03A, 0x00000148, ++ 0x80000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03B, 0x0000118B, ++ 0xA0000000, 0x00000000, ++ 0x03B, 0x0000078B, ++ 0xB0000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0xA0000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00024000, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x000AC000, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00024000, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00088000, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00024000, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00024000, ++ 0x90000007, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00040000, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00088000, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00088000, ++ 0xA0000000, 0x00000000, ++ 0x03C, 0x0004C000, ++ 0xB0000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00070023, ++ 0x03C, 0x00048000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00068623, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00061633, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x0005C633, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00050293, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00049593, ++ 0x03C, 0x00000000, ++ 0x03A, 0x00000148, ++ 0x80000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03B, 0x0004138B, ++ 0xA0000000, 0x00000000, ++ 0x03B, 0x0004078B, ++ 0xB0000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0xA0000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00084000, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x0008C000, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00084000, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00084000, ++ 0x90000007, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00020000, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00060000, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00084000, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00084000, ++ 0xA0000000, 0x00000000, ++ 0x03C, 0x00004000, ++ 0xB0000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B0023, ++ 0x80000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00020000, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00020000, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00020000, ++ 0xA0000000, 0x00000000, ++ 0x03C, 0x00020000, ++ 0xB0000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000A8623, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000A1633, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x0009C633, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00090293, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00089593, ++ 0x03C, 0x00000000, ++ 0x03A, 0x00000148, ++ 0x80000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03B, 0x0008118B, ++ 0xA0000000, 0x00000000, ++ 0x03B, 0x0008078B, ++ 0xB0000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x0EF, 0x00000000, ++ 0x0EF, 0x00000800, ++ 0x03B, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000803, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000801, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000803, ++ 0x90000007, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00001003, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00001003, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00001003, ++ 0xA0000000, 0x00000000, ++ 0x03A, 0x00000803, ++ 0xB0000000, 0x00000000, ++ 0x03B, 0x00040000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00001000, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00001801, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000003, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000003, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00001000, ++ 0x90000007, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000000, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00001001, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000000, ++ 0xA0000000, 0x00000000, ++ 0x03A, 0x00001000, ++ 0xB0000000, 0x00000000, ++ 0x03B, 0x00080000, ++ 0x80000007, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00001802, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000800, ++ 0xA0000000, 0x00000000, ++ 0x03A, 0x00001002, ++ 0xB0000000, 0x00000000, ++ 0x0EF, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0xA0000000, 0x00000000, ++ 0xB0000000, 0x00000000, ++ 0x018, 0x00013124, ++ 0x0EF, 0x00000100, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0004A1AD, ++ 0x034, 0x000491AA, ++ 0x034, 0x000481A7, ++ 0x034, 0x000470AA, ++ 0x034, 0x000460A7, ++ 0x034, 0x00045049, ++ 0x034, 0x00044046, ++ 0x034, 0x00043026, ++ 0x034, 0x00042009, ++ 0x034, 0x00041006, ++ 0x034, 0x00040003, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0004A3EF, ++ 0x034, 0x000493AF, ++ 0x034, 0x000483AB, ++ 0x034, 0x0004718C, ++ 0x034, 0x00046189, ++ 0x034, 0x0004506D, ++ 0x034, 0x0004406A, ++ 0x034, 0x0004302C, ++ 0x034, 0x00042029, ++ 0x034, 0x00041026, ++ 0x034, 0x00040023, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0004A3EF, ++ 0x034, 0x000493AF, ++ 0x034, 0x000483AB, ++ 0x034, 0x0004718C, ++ 0x034, 0x00046189, ++ 0x034, 0x0004506D, ++ 0x034, 0x0004406A, ++ 0x034, 0x0004302C, ++ 0x034, 0x00042029, ++ 0x034, 0x00041026, ++ 0x034, 0x00040023, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0004A3EF, ++ 0x034, 0x000493AF, ++ 0x034, 0x000483AB, ++ 0x034, 0x0004718C, ++ 0x034, 0x00046189, ++ 0x034, 0x0004506D, ++ 0x034, 0x0004406A, ++ 0x034, 0x0004302C, ++ 0x034, 0x00042029, ++ 0x034, 0x00041026, ++ 0x034, 0x00040023, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0004A3EF, ++ 0x034, 0x000493AF, ++ 0x034, 0x000483AB, ++ 0x034, 0x0004718C, ++ 0x034, 0x00046189, ++ 0x034, 0x0004506D, ++ 0x034, 0x0004406A, ++ 0x034, 0x0004302C, ++ 0x034, 0x00042029, ++ 0x034, 0x00041026, ++ 0x034, 0x00040023, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0004A3F5, ++ 0x034, 0x000493F2, ++ 0x034, 0x000483B0, ++ 0x034, 0x00047370, ++ 0x034, 0x0004636D, ++ 0x034, 0x0004536A, ++ 0x034, 0x00044349, ++ 0x034, 0x0004316A, ++ 0x034, 0x00042167, ++ 0x034, 0x00041129, ++ 0x034, 0x00040049, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0004A3EF, ++ 0x034, 0x000493AF, ++ 0x034, 0x000483AB, ++ 0x034, 0x0004718C, ++ 0x034, 0x00046189, ++ 0x034, 0x0004506D, ++ 0x034, 0x0004406A, ++ 0x034, 0x0004302C, ++ 0x034, 0x00042029, ++ 0x034, 0x00041026, ++ 0x034, 0x00040023, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0004A3EF, ++ 0x034, 0x000493AF, ++ 0x034, 0x000483AB, ++ 0x034, 0x0004718C, ++ 0x034, 0x00046189, ++ 0x034, 0x0004506D, ++ 0x034, 0x0004406A, ++ 0x034, 0x0004302C, ++ 0x034, 0x00042029, ++ 0x034, 0x00041026, ++ 0x034, 0x00040023, ++ 0xA0000000, 0x00000000, ++ 0x034, 0x0004AFF1, ++ 0x034, 0x00049FEE, ++ 0x034, 0x00048FEB, ++ 0x034, 0x00047FE8, ++ 0x034, 0x00046DEA, ++ 0x034, 0x00045DE7, ++ 0x034, 0x00044CEA, ++ 0x034, 0x00043CE7, ++ 0x034, 0x00042C69, ++ 0x034, 0x00041C66, ++ 0x034, 0x00040C28, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0002A1AD, ++ 0x034, 0x000291AA, ++ 0x034, 0x000281A7, ++ 0x034, 0x000270AA, ++ 0x034, 0x000260A7, ++ 0x034, 0x00025049, ++ 0x034, 0x00024046, ++ 0x034, 0x00023026, ++ 0x034, 0x00022009, ++ 0x034, 0x00021006, ++ 0x034, 0x00020003, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0002A3EF, ++ 0x034, 0x000293AC, ++ 0x034, 0x0002838A, ++ 0x034, 0x0002718C, ++ 0x034, 0x00026189, ++ 0x034, 0x0002506D, ++ 0x034, 0x0002406A, ++ 0x034, 0x0002302C, ++ 0x034, 0x00022029, ++ 0x034, 0x00021026, ++ 0x034, 0x00020023, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0002A3EF, ++ 0x034, 0x000293AC, ++ 0x034, 0x0002838A, ++ 0x034, 0x0002718C, ++ 0x034, 0x00026189, ++ 0x034, 0x0002506D, ++ 0x034, 0x0002406A, ++ 0x034, 0x0002302C, ++ 0x034, 0x00022029, ++ 0x034, 0x00021026, ++ 0x034, 0x00020023, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0002A3EF, ++ 0x034, 0x000293AC, ++ 0x034, 0x0002838A, ++ 0x034, 0x0002718C, ++ 0x034, 0x00026189, ++ 0x034, 0x0002506D, ++ 0x034, 0x0002406A, ++ 0x034, 0x0002302C, ++ 0x034, 0x00022029, ++ 0x034, 0x00021026, ++ 0x034, 0x00020023, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0002A3EF, ++ 0x034, 0x000293AC, ++ 0x034, 0x0002838A, ++ 0x034, 0x0002718C, ++ 0x034, 0x00026189, ++ 0x034, 0x0002506D, ++ 0x034, 0x0002406A, ++ 0x034, 0x0002302C, ++ 0x034, 0x00022029, ++ 0x034, 0x00021026, ++ 0x034, 0x00020023, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0002A3F5, ++ 0x034, 0x000293F2, ++ 0x034, 0x000282F1, ++ 0x034, 0x000272B0, ++ 0x034, 0x000262AD, ++ 0x034, 0x000252AA, ++ 0x034, 0x000242A7, ++ 0x034, 0x000230EC, ++ 0x034, 0x000220E9, ++ 0x034, 0x0002106A, ++ 0x034, 0x00020067, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0002A3EF, ++ 0x034, 0x000293AC, ++ 0x034, 0x0002838A, ++ 0x034, 0x0002718C, ++ 0x034, 0x00026189, ++ 0x034, 0x0002506D, ++ 0x034, 0x0002406A, ++ 0x034, 0x0002302C, ++ 0x034, 0x00022029, ++ 0x034, 0x00021026, ++ 0x034, 0x00020023, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0002A3EF, ++ 0x034, 0x000293AC, ++ 0x034, 0x0002838A, ++ 0x034, 0x0002718C, ++ 0x034, 0x00026189, ++ 0x034, 0x0002506D, ++ 0x034, 0x0002406A, ++ 0x034, 0x0002302C, ++ 0x034, 0x00022029, ++ 0x034, 0x00021026, ++ 0x034, 0x00020023, ++ 0xA0000000, 0x00000000, ++ 0x034, 0x0002AFF1, ++ 0x034, 0x00029FEE, ++ 0x034, 0x00028FEB, ++ 0x034, 0x00027FE8, ++ 0x034, 0x00026DEA, ++ 0x034, 0x00025DE7, ++ 0x034, 0x00024CEA, ++ 0x034, 0x00023CE7, ++ 0x034, 0x00022C69, ++ 0x034, 0x00021C66, ++ 0x034, 0x00020C28, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A3EC, ++ 0x034, 0x0000938C, ++ 0x034, 0x000081AD, ++ 0x034, 0x000071AA, ++ 0x034, 0x000061A7, ++ 0x034, 0x000050AA, ++ 0x034, 0x000040A7, ++ 0x034, 0x0000302C, ++ 0x034, 0x00002029, ++ 0x034, 0x0000100C, ++ 0x034, 0x00000009, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A3EE, ++ 0x034, 0x000093AC, ++ 0x034, 0x0000838A, ++ 0x034, 0x0000718C, ++ 0x034, 0x00006189, ++ 0x034, 0x0000506D, ++ 0x034, 0x0000406A, ++ 0x034, 0x0000302C, ++ 0x034, 0x00002029, ++ 0x034, 0x00001026, ++ 0x034, 0x00000023, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A3EE, ++ 0x034, 0x000093AC, ++ 0x034, 0x0000838A, ++ 0x034, 0x0000718C, ++ 0x034, 0x00006189, ++ 0x034, 0x0000506D, ++ 0x034, 0x0000406A, ++ 0x034, 0x0000302C, ++ 0x034, 0x00002029, ++ 0x034, 0x00001026, ++ 0x034, 0x00000023, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A3EE, ++ 0x034, 0x000093AC, ++ 0x034, 0x0000838A, ++ 0x034, 0x0000718C, ++ 0x034, 0x00006189, ++ 0x034, 0x0000506D, ++ 0x034, 0x0000406A, ++ 0x034, 0x0000302C, ++ 0x034, 0x00002029, ++ 0x034, 0x00001026, ++ 0x034, 0x00000023, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A3EE, ++ 0x034, 0x000093AC, ++ 0x034, 0x0000838A, ++ 0x034, 0x0000718C, ++ 0x034, 0x00006189, ++ 0x034, 0x0000506D, ++ 0x034, 0x0000406A, ++ 0x034, 0x0000302C, ++ 0x034, 0x00002029, ++ 0x034, 0x00001026, ++ 0x034, 0x00000023, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A3F4, ++ 0x034, 0x000093F1, ++ 0x034, 0x000082B1, ++ 0x034, 0x000071D1, ++ 0x034, 0x000061CE, ++ 0x034, 0x000051CB, ++ 0x034, 0x000041C8, ++ 0x034, 0x000030CB, ++ 0x034, 0x000020C8, ++ 0x034, 0x00001087, ++ 0x034, 0x00000084, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A3EE, ++ 0x034, 0x000093AC, ++ 0x034, 0x0000838A, ++ 0x034, 0x0000718C, ++ 0x034, 0x00006189, ++ 0x034, 0x0000506D, ++ 0x034, 0x0000406A, ++ 0x034, 0x0000302C, ++ 0x034, 0x00002029, ++ 0x034, 0x00001026, ++ 0x034, 0x00000023, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A3EE, ++ 0x034, 0x000093AC, ++ 0x034, 0x0000838A, ++ 0x034, 0x0000718C, ++ 0x034, 0x00006189, ++ 0x034, 0x0000506D, ++ 0x034, 0x0000406A, ++ 0x034, 0x0000302C, ++ 0x034, 0x00002029, ++ 0x034, 0x00001026, ++ 0x034, 0x00000023, ++ 0xA0000000, 0x00000000, ++ 0x034, 0x0000AFF1, ++ 0x034, 0x00009FEE, ++ 0x034, 0x00008FEB, ++ 0x034, 0x00007FE8, ++ 0x034, 0x00006DEA, ++ 0x034, 0x00005DE7, ++ 0x034, 0x00004CEA, ++ 0x034, 0x00003CE7, ++ 0x034, 0x00002C69, ++ 0x034, 0x00001C66, ++ 0x034, 0x00000C28, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000CA1AD, ++ 0x034, 0x000C91AA, ++ 0x034, 0x000C81A7, ++ 0x034, 0x000C70AA, ++ 0x034, 0x000C60A7, ++ 0x034, 0x000C5049, ++ 0x034, 0x000C4046, ++ 0x034, 0x000C3026, ++ 0x034, 0x000C2009, ++ 0x034, 0x000C1006, ++ 0x034, 0x000C0003, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000CA3EF, ++ 0x034, 0x000C93AF, ++ 0x034, 0x000C83AB, ++ 0x034, 0x000C718C, ++ 0x034, 0x000C6189, ++ 0x034, 0x000C506D, ++ 0x034, 0x000C406A, ++ 0x034, 0x000C302C, ++ 0x034, 0x000C2029, ++ 0x034, 0x000C1026, ++ 0x034, 0x000C0023, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000CA3EF, ++ 0x034, 0x000C93AF, ++ 0x034, 0x000C83AB, ++ 0x034, 0x000C718C, ++ 0x034, 0x000C6189, ++ 0x034, 0x000C506D, ++ 0x034, 0x000C406A, ++ 0x034, 0x000C302C, ++ 0x034, 0x000C2029, ++ 0x034, 0x000C1026, ++ 0x034, 0x000C0023, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000CA3EF, ++ 0x034, 0x000C93AF, ++ 0x034, 0x000C83AB, ++ 0x034, 0x000C718C, ++ 0x034, 0x000C6189, ++ 0x034, 0x000C506D, ++ 0x034, 0x000C406A, ++ 0x034, 0x000C302C, ++ 0x034, 0x000C2029, ++ 0x034, 0x000C1026, ++ 0x034, 0x000C0023, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000CA3EF, ++ 0x034, 0x000C93AF, ++ 0x034, 0x000C83AB, ++ 0x034, 0x000C718C, ++ 0x034, 0x000C6189, ++ 0x034, 0x000C506D, ++ 0x034, 0x000C406A, ++ 0x034, 0x000C302C, ++ 0x034, 0x000C2029, ++ 0x034, 0x000C1026, ++ 0x034, 0x000C0023, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000CA3F5, ++ 0x034, 0x000C93F2, ++ 0x034, 0x000C83B0, ++ 0x034, 0x000C7370, ++ 0x034, 0x000C636D, ++ 0x034, 0x000C536A, ++ 0x034, 0x000C4349, ++ 0x034, 0x000C316A, ++ 0x034, 0x000C2167, ++ 0x034, 0x000C1129, ++ 0x034, 0x000C0049, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000CA3EF, ++ 0x034, 0x000C93AF, ++ 0x034, 0x000C83AB, ++ 0x034, 0x000C718C, ++ 0x034, 0x000C6189, ++ 0x034, 0x000C506D, ++ 0x034, 0x000C406A, ++ 0x034, 0x000C302C, ++ 0x034, 0x000C2029, ++ 0x034, 0x000C1026, ++ 0x034, 0x000C0023, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000CA3EF, ++ 0x034, 0x000C93AF, ++ 0x034, 0x000C83AB, ++ 0x034, 0x000C718C, ++ 0x034, 0x000C6189, ++ 0x034, 0x000C506D, ++ 0x034, 0x000C406A, ++ 0x034, 0x000C302C, ++ 0x034, 0x000C2029, ++ 0x034, 0x000C1026, ++ 0x034, 0x000C0023, ++ 0xA0000000, 0x00000000, ++ 0x034, 0x000CA794, ++ 0x034, 0x000C9791, ++ 0x034, 0x000C878E, ++ 0x034, 0x000C778B, ++ 0x034, 0x000C658D, ++ 0x034, 0x000C558A, ++ 0x034, 0x000C448D, ++ 0x034, 0x000C348A, ++ 0x034, 0x000C244C, ++ 0x034, 0x000C1449, ++ 0x034, 0x000C042B, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000AA1AD, ++ 0x034, 0x000A91AA, ++ 0x034, 0x000A81A7, ++ 0x034, 0x000A70AA, ++ 0x034, 0x000A60A7, ++ 0x034, 0x000A5049, ++ 0x034, 0x000A4046, ++ 0x034, 0x000A3026, ++ 0x034, 0x000A2009, ++ 0x034, 0x000A1006, ++ 0x034, 0x000A0003, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000AA3EF, ++ 0x034, 0x000A93AC, ++ 0x034, 0x000A838A, ++ 0x034, 0x000A718C, ++ 0x034, 0x000A6189, ++ 0x034, 0x000A506D, ++ 0x034, 0x000A406A, ++ 0x034, 0x000A302C, ++ 0x034, 0x000A2029, ++ 0x034, 0x000A1026, ++ 0x034, 0x000A0023, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000AA3EF, ++ 0x034, 0x000A93AC, ++ 0x034, 0x000A838A, ++ 0x034, 0x000A718C, ++ 0x034, 0x000A6189, ++ 0x034, 0x000A506D, ++ 0x034, 0x000A406A, ++ 0x034, 0x000A302C, ++ 0x034, 0x000A2029, ++ 0x034, 0x000A1026, ++ 0x034, 0x000A0023, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000AA3EF, ++ 0x034, 0x000A93AC, ++ 0x034, 0x000A838A, ++ 0x034, 0x000A718C, ++ 0x034, 0x000A6189, ++ 0x034, 0x000A506D, ++ 0x034, 0x000A406A, ++ 0x034, 0x000A302C, ++ 0x034, 0x000A2029, ++ 0x034, 0x000A1026, ++ 0x034, 0x000A0023, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000AA3EF, ++ 0x034, 0x000A93AC, ++ 0x034, 0x000A838A, ++ 0x034, 0x000A718C, ++ 0x034, 0x000A6189, ++ 0x034, 0x000A506D, ++ 0x034, 0x000A406A, ++ 0x034, 0x000A302C, ++ 0x034, 0x000A2029, ++ 0x034, 0x000A1026, ++ 0x034, 0x000A0023, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000AA3F5, ++ 0x034, 0x000A93F2, ++ 0x034, 0x000A82F1, ++ 0x034, 0x000A72B0, ++ 0x034, 0x000A62AD, ++ 0x034, 0x000A52AA, ++ 0x034, 0x000A42A7, ++ 0x034, 0x000A30EC, ++ 0x034, 0x000A20E9, ++ 0x034, 0x000A106A, ++ 0x034, 0x000A0067, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000AA3EF, ++ 0x034, 0x000A93AC, ++ 0x034, 0x000A838A, ++ 0x034, 0x000A718C, ++ 0x034, 0x000A6189, ++ 0x034, 0x000A506D, ++ 0x034, 0x000A406A, ++ 0x034, 0x000A302C, ++ 0x034, 0x000A2029, ++ 0x034, 0x000A1026, ++ 0x034, 0x000A0023, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000AA3EF, ++ 0x034, 0x000A93AC, ++ 0x034, 0x000A838A, ++ 0x034, 0x000A718C, ++ 0x034, 0x000A6189, ++ 0x034, 0x000A506D, ++ 0x034, 0x000A406A, ++ 0x034, 0x000A302C, ++ 0x034, 0x000A2029, ++ 0x034, 0x000A1026, ++ 0x034, 0x000A0023, ++ 0xA0000000, 0x00000000, ++ 0x034, 0x000AA794, ++ 0x034, 0x000A9791, ++ 0x034, 0x000A878E, ++ 0x034, 0x000A778B, ++ 0x034, 0x000A658D, ++ 0x034, 0x000A558A, ++ 0x034, 0x000A448D, ++ 0x034, 0x000A348A, ++ 0x034, 0x000A244C, ++ 0x034, 0x000A1449, ++ 0x034, 0x000A042B, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0008A3EC, ++ 0x034, 0x0008938C, ++ 0x034, 0x000881AD, ++ 0x034, 0x000871AA, ++ 0x034, 0x000861A7, ++ 0x034, 0x000850AA, ++ 0x034, 0x000840A7, ++ 0x034, 0x0008302C, ++ 0x034, 0x00082029, ++ 0x034, 0x0008100C, ++ 0x034, 0x00080009, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0008A3EE, ++ 0x034, 0x000893AC, ++ 0x034, 0x0008838A, ++ 0x034, 0x0008718C, ++ 0x034, 0x00086189, ++ 0x034, 0x0008506D, ++ 0x034, 0x0008406A, ++ 0x034, 0x0008302C, ++ 0x034, 0x00082029, ++ 0x034, 0x00081026, ++ 0x034, 0x00080023, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0008A3EE, ++ 0x034, 0x000893AC, ++ 0x034, 0x0008838A, ++ 0x034, 0x0008718C, ++ 0x034, 0x00086189, ++ 0x034, 0x0008506D, ++ 0x034, 0x0008406A, ++ 0x034, 0x0008302C, ++ 0x034, 0x00082029, ++ 0x034, 0x00081026, ++ 0x034, 0x00080023, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0008A3EE, ++ 0x034, 0x000893AC, ++ 0x034, 0x0008838A, ++ 0x034, 0x0008718C, ++ 0x034, 0x00086189, ++ 0x034, 0x0008506D, ++ 0x034, 0x0008406A, ++ 0x034, 0x0008302C, ++ 0x034, 0x00082029, ++ 0x034, 0x00081026, ++ 0x034, 0x00080023, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0008A3EE, ++ 0x034, 0x000893AC, ++ 0x034, 0x0008838A, ++ 0x034, 0x0008718C, ++ 0x034, 0x00086189, ++ 0x034, 0x0008506D, ++ 0x034, 0x0008406A, ++ 0x034, 0x0008302C, ++ 0x034, 0x00082029, ++ 0x034, 0x00081026, ++ 0x034, 0x00080023, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0008A3F4, ++ 0x034, 0x000893F1, ++ 0x034, 0x000882B1, ++ 0x034, 0x000871D1, ++ 0x034, 0x000861CE, ++ 0x034, 0x000851CB, ++ 0x034, 0x000841C8, ++ 0x034, 0x000830CB, ++ 0x034, 0x000820C8, ++ 0x034, 0x00081087, ++ 0x034, 0x00080084, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0008A3EE, ++ 0x034, 0x000893AC, ++ 0x034, 0x0008838A, ++ 0x034, 0x0008718C, ++ 0x034, 0x00086189, ++ 0x034, 0x0008506D, ++ 0x034, 0x0008406A, ++ 0x034, 0x0008302C, ++ 0x034, 0x00082029, ++ 0x034, 0x00081026, ++ 0x034, 0x00080023, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0008A3EE, ++ 0x034, 0x000893AC, ++ 0x034, 0x0008838A, ++ 0x034, 0x0008718C, ++ 0x034, 0x00086189, ++ 0x034, 0x0008506D, ++ 0x034, 0x0008406A, ++ 0x034, 0x0008302C, ++ 0x034, 0x00082029, ++ 0x034, 0x00081026, ++ 0x034, 0x00080023, ++ 0xA0000000, 0x00000000, ++ 0x034, 0x0008A794, ++ 0x034, 0x00089791, ++ 0x034, 0x0008878E, ++ 0x034, 0x0008778B, ++ 0x034, 0x0008658D, ++ 0x034, 0x0008558A, ++ 0x034, 0x0008448D, ++ 0x034, 0x0008348A, ++ 0x034, 0x0008244C, ++ 0x034, 0x00081449, ++ 0x034, 0x0008042B, ++ 0xB0000000, 0x00000000, ++ 0x0EF, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x018, 0x0001712A, ++ 0x0EF, 0x00000040, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x035, 0x000006CC, ++ 0x035, 0x000086CC, ++ 0x035, 0x000106CC, ++ 0x035, 0x000206CC, ++ 0x035, 0x000286CC, ++ 0x035, 0x000306CC, ++ 0x035, 0x000406CC, ++ 0x035, 0x000486CC, ++ 0x035, 0x000506CC, ++ 0x035, 0x000806CC, ++ 0x035, 0x000886CC, ++ 0x035, 0x000906CC, ++ 0x035, 0x000A06CC, ++ 0x035, 0x000A86CC, ++ 0x035, 0x000B06CC, ++ 0x035, 0x000C06CC, ++ 0x035, 0x000C86CC, ++ 0x035, 0x000D06CC, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x035, 0x000006CC, ++ 0x035, 0x000086CC, ++ 0x035, 0x000106CC, ++ 0x035, 0x000206CC, ++ 0x035, 0x000286CC, ++ 0x035, 0x000306CC, ++ 0x035, 0x000406CC, ++ 0x035, 0x000486CC, ++ 0x035, 0x000506CC, ++ 0x035, 0x000806CC, ++ 0x035, 0x000886CC, ++ 0x035, 0x000906CC, ++ 0x035, 0x000A06CC, ++ 0x035, 0x000A86CC, ++ 0x035, 0x000B06CC, ++ 0x035, 0x000C06CC, ++ 0x035, 0x000C86CC, ++ 0x035, 0x000D06CC, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x035, 0x000006CC, ++ 0x035, 0x000086CC, ++ 0x035, 0x000106CC, ++ 0x035, 0x000206CC, ++ 0x035, 0x000286CC, ++ 0x035, 0x000306CC, ++ 0x035, 0x000406CC, ++ 0x035, 0x000486CC, ++ 0x035, 0x000506CC, ++ 0x035, 0x000806CC, ++ 0x035, 0x000886CC, ++ 0x035, 0x000906CC, ++ 0x035, 0x000A06CC, ++ 0x035, 0x000A86CC, ++ 0x035, 0x000B06CC, ++ 0x035, 0x000C06CC, ++ 0x035, 0x000C86CC, ++ 0x035, 0x000D06CC, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x035, 0x000006CC, ++ 0x035, 0x000086CC, ++ 0x035, 0x000106CC, ++ 0x035, 0x000206CC, ++ 0x035, 0x000286CC, ++ 0x035, 0x000306CC, ++ 0x035, 0x000406CC, ++ 0x035, 0x000486CC, ++ 0x035, 0x000506CC, ++ 0x035, 0x000806CC, ++ 0x035, 0x000886CC, ++ 0x035, 0x000906CC, ++ 0x035, 0x000A06CC, ++ 0x035, 0x000A86CC, ++ 0x035, 0x000B06CC, ++ 0x035, 0x000C06CC, ++ 0x035, 0x000C86CC, ++ 0x035, 0x000D06CC, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x035, 0x000006CC, ++ 0x035, 0x000086CC, ++ 0x035, 0x000106CC, ++ 0x035, 0x000206CC, ++ 0x035, 0x000286CC, ++ 0x035, 0x000306CC, ++ 0x035, 0x000406CC, ++ 0x035, 0x000486CC, ++ 0x035, 0x000506CC, ++ 0x035, 0x000806CC, ++ 0x035, 0x000886CC, ++ 0x035, 0x000906CC, ++ 0x035, 0x000A06CC, ++ 0x035, 0x000A86CC, ++ 0x035, 0x000B06CC, ++ 0x035, 0x000C06CC, ++ 0x035, 0x000C86CC, ++ 0x035, 0x000D06CC, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x035, 0x000006CC, ++ 0x035, 0x000086CC, ++ 0x035, 0x000106CC, ++ 0x035, 0x000206CC, ++ 0x035, 0x000286CC, ++ 0x035, 0x000306CC, ++ 0x035, 0x000406CC, ++ 0x035, 0x000486CC, ++ 0x035, 0x000506CC, ++ 0x035, 0x000806CC, ++ 0x035, 0x000886CC, ++ 0x035, 0x000906CC, ++ 0x035, 0x000A06CC, ++ 0x035, 0x000A86CC, ++ 0x035, 0x000B06CC, ++ 0x035, 0x000C06CC, ++ 0x035, 0x000C86CC, ++ 0x035, 0x000D06CC, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x035, 0x000006CC, ++ 0x035, 0x000086CC, ++ 0x035, 0x000106CC, ++ 0x035, 0x000206CC, ++ 0x035, 0x000286CC, ++ 0x035, 0x000306CC, ++ 0x035, 0x000406CC, ++ 0x035, 0x000486CC, ++ 0x035, 0x000506CC, ++ 0x035, 0x000806CC, ++ 0x035, 0x000886CC, ++ 0x035, 0x000906CC, ++ 0x035, 0x000A06CC, ++ 0x035, 0x000A86CC, ++ 0x035, 0x000B06CC, ++ 0x035, 0x000C06CC, ++ 0x035, 0x000C86CC, ++ 0x035, 0x000D06CC, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x035, 0x000006CC, ++ 0x035, 0x000086CC, ++ 0x035, 0x000106CC, ++ 0x035, 0x000206CC, ++ 0x035, 0x000286CC, ++ 0x035, 0x000306CC, ++ 0x035, 0x000406CC, ++ 0x035, 0x000486CC, ++ 0x035, 0x000506CC, ++ 0x035, 0x000806CC, ++ 0x035, 0x000886CC, ++ 0x035, 0x000906CC, ++ 0x035, 0x000A06CC, ++ 0x035, 0x000A86CC, ++ 0x035, 0x000B06CC, ++ 0x035, 0x000C06CC, ++ 0x035, 0x000C86CC, ++ 0x035, 0x000D06CC, ++ 0xA0000000, 0x00000000, ++ 0x035, 0x00000747, ++ 0x035, 0x00008747, ++ 0x035, 0x00010747, ++ 0x035, 0x00020747, ++ 0x035, 0x00028747, ++ 0x035, 0x00030747, ++ 0x035, 0x00040747, ++ 0x035, 0x00048747, ++ 0x035, 0x00050747, ++ 0x035, 0x000805FB, ++ 0x035, 0x000885FB, ++ 0x035, 0x000905FB, ++ 0x035, 0x000A05FB, ++ 0x035, 0x000A85FB, ++ 0x035, 0x000B05FB, ++ 0x035, 0x000C05FB, ++ 0x035, 0x000C85FB, ++ 0x035, 0x000D05FB, ++ 0xB0000000, 0x00000000, ++ 0x0EF, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x018, 0x0001712A, ++ 0x0EF, 0x00000010, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x036, 0x00000473, ++ 0x036, 0x00008473, ++ 0x036, 0x00010473, ++ 0x036, 0x00020473, ++ 0x036, 0x00028473, ++ 0x036, 0x00030473, ++ 0x036, 0x00040473, ++ 0x036, 0x00048473, ++ 0x036, 0x00050473, ++ 0x036, 0x00080473, ++ 0x036, 0x00088473, ++ 0x036, 0x00090473, ++ 0x036, 0x000A0473, ++ 0x036, 0x000A8473, ++ 0x036, 0x000B0473, ++ 0x036, 0x000C0473, ++ 0x036, 0x000C8473, ++ 0x036, 0x000D0473, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x036, 0x00000475, ++ 0x036, 0x00008475, ++ 0x036, 0x00010475, ++ 0x036, 0x00020475, ++ 0x036, 0x00028475, ++ 0x036, 0x00030475, ++ 0x036, 0x00040475, ++ 0x036, 0x00048475, ++ 0x036, 0x00050475, ++ 0x036, 0x00080475, ++ 0x036, 0x00088475, ++ 0x036, 0x00090475, ++ 0x036, 0x000A0475, ++ 0x036, 0x000A8475, ++ 0x036, 0x000B0475, ++ 0x036, 0x000C0475, ++ 0x036, 0x000C8475, ++ 0x036, 0x000D0475, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x036, 0x00000475, ++ 0x036, 0x00008475, ++ 0x036, 0x00010475, ++ 0x036, 0x00020475, ++ 0x036, 0x00028475, ++ 0x036, 0x00030475, ++ 0x036, 0x00040475, ++ 0x036, 0x00048475, ++ 0x036, 0x00050475, ++ 0x036, 0x00080475, ++ 0x036, 0x00088475, ++ 0x036, 0x00090475, ++ 0x036, 0x000A0475, ++ 0x036, 0x000A8475, ++ 0x036, 0x000B0475, ++ 0x036, 0x000C0475, ++ 0x036, 0x000C8475, ++ 0x036, 0x000D0475, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x036, 0x00000475, ++ 0x036, 0x00008475, ++ 0x036, 0x00010475, ++ 0x036, 0x00020475, ++ 0x036, 0x00028475, ++ 0x036, 0x00030475, ++ 0x036, 0x00040475, ++ 0x036, 0x00048475, ++ 0x036, 0x00050475, ++ 0x036, 0x00080475, ++ 0x036, 0x00088475, ++ 0x036, 0x00090475, ++ 0x036, 0x000A0475, ++ 0x036, 0x000A8475, ++ 0x036, 0x000B0475, ++ 0x036, 0x000C0475, ++ 0x036, 0x000C8475, ++ 0x036, 0x000D0475, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x036, 0x00000475, ++ 0x036, 0x00008475, ++ 0x036, 0x00010475, ++ 0x036, 0x00020475, ++ 0x036, 0x00028475, ++ 0x036, 0x00030475, ++ 0x036, 0x00040475, ++ 0x036, 0x00048475, ++ 0x036, 0x00050475, ++ 0x036, 0x00080475, ++ 0x036, 0x00088475, ++ 0x036, 0x00090475, ++ 0x036, 0x000A0475, ++ 0x036, 0x000A8475, ++ 0x036, 0x000B0475, ++ 0x036, 0x000C0475, ++ 0x036, 0x000C8475, ++ 0x036, 0x000D0475, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x036, 0x00000475, ++ 0x036, 0x00008475, ++ 0x036, 0x00010475, ++ 0x036, 0x00020475, ++ 0x036, 0x00028475, ++ 0x036, 0x00030475, ++ 0x036, 0x00040475, ++ 0x036, 0x00048475, ++ 0x036, 0x00050475, ++ 0x036, 0x00080475, ++ 0x036, 0x00088475, ++ 0x036, 0x00090475, ++ 0x036, 0x000A0475, ++ 0x036, 0x000A8475, ++ 0x036, 0x000B0475, ++ 0x036, 0x000C0475, ++ 0x036, 0x000C8475, ++ 0x036, 0x000D0475, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x036, 0x00000475, ++ 0x036, 0x00008475, ++ 0x036, 0x00010475, ++ 0x036, 0x00020475, ++ 0x036, 0x00028475, ++ 0x036, 0x00030475, ++ 0x036, 0x00040475, ++ 0x036, 0x00048475, ++ 0x036, 0x00050475, ++ 0x036, 0x00080475, ++ 0x036, 0x00088475, ++ 0x036, 0x00090475, ++ 0x036, 0x000A0475, ++ 0x036, 0x000A8475, ++ 0x036, 0x000B0475, ++ 0x036, 0x000C0475, ++ 0x036, 0x000C8475, ++ 0x036, 0x000D0475, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x036, 0x00000475, ++ 0x036, 0x00008475, ++ 0x036, 0x00010475, ++ 0x036, 0x00020475, ++ 0x036, 0x00028475, ++ 0x036, 0x00030475, ++ 0x036, 0x00040475, ++ 0x036, 0x00048475, ++ 0x036, 0x00050475, ++ 0x036, 0x00080475, ++ 0x036, 0x00088475, ++ 0x036, 0x00090475, ++ 0x036, 0x000A0475, ++ 0x036, 0x000A8475, ++ 0x036, 0x000B0475, ++ 0x036, 0x000C0475, ++ 0x036, 0x000C8475, ++ 0x036, 0x000D0475, ++ 0xA0000000, 0x00000000, ++ 0x036, 0x00000473, ++ 0x036, 0x00008473, ++ 0x036, 0x00010473, ++ 0x036, 0x00020473, ++ 0x036, 0x00028473, ++ 0x036, 0x00030473, ++ 0x036, 0x00040473, ++ 0x036, 0x00048473, ++ 0x036, 0x00050473, ++ 0x036, 0x00080473, ++ 0x036, 0x00088473, ++ 0x036, 0x00090473, ++ 0x036, 0x000A0473, ++ 0x036, 0x000A8473, ++ 0x036, 0x000B0473, ++ 0x036, 0x000C0473, ++ 0x036, 0x000C8473, ++ 0x036, 0x000D0473, ++ 0xB0000000, 0x00000000, ++ 0x0EF, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0xA0000000, 0x00000000, ++ 0x0EF, 0x00000004, ++ 0x037, 0x00000000, ++ 0x038, 0x00005146, ++ 0x037, 0x00004000, ++ 0x038, 0x00005146, ++ 0x037, 0x00008000, ++ 0x038, 0x00005146, ++ 0x037, 0x00010000, ++ 0x038, 0x00005146, ++ 0x037, 0x00014000, ++ 0x038, 0x00005146, ++ 0x037, 0x00018000, ++ 0x038, 0x00004D4E, ++ 0x037, 0x0001C000, ++ 0x038, 0x00004D4E, ++ 0x037, 0x00020000, ++ 0x038, 0x00004D4E, ++ 0x037, 0x00024000, ++ 0x038, 0x000071C6, ++ 0x037, 0x00028000, ++ 0x038, 0x000071C6, ++ 0x037, 0x0002C000, ++ 0x038, 0x000071C6, ++ 0x037, 0x00030000, ++ 0x038, 0x000071CE, ++ 0x037, 0x00034000, ++ 0x038, 0x000071CE, ++ 0x037, 0x00038000, ++ 0x038, 0x00005126, ++ 0x037, 0x0003C000, ++ 0x038, 0x00005126, ++ 0x037, 0x00040000, ++ 0x038, 0x00005126, ++ 0x037, 0x00044000, ++ 0x038, 0x00005126, ++ 0x037, 0x00048000, ++ 0x038, 0x00005126, ++ 0x037, 0x00080000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x00084000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x00088000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x00090000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x00094000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x00098000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x0009C000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000A0000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000A4000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000A8000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000AC000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000B0000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000B4000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000B8000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000BC000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000C0000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000C4000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000C8000, ++ 0x038, 0x00005ECE, ++ 0x0EF, 0x00000000, ++ 0xB0000000, 0x00000000, ++ 0x0EF, 0x00000008, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0xA0000000, 0x00000000, ++ 0x03C, 0x0000007D, ++ 0x03C, 0x0000047D, ++ 0x03C, 0x0000087D, ++ 0x03C, 0x0000107D, ++ 0x03C, 0x0000147D, ++ 0x03C, 0x0000187D, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x0000027D, ++ 0x03C, 0x0000054A, ++ 0x03C, 0x00000821, ++ 0x03C, 0x0000127D, ++ 0x03C, 0x0000154A, ++ 0x03C, 0x00001821, ++ 0x03C, 0x0000227D, ++ 0x03C, 0x0000254A, ++ 0x03C, 0x00002821, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x0000027D, ++ 0x03C, 0x0000054A, ++ 0x03C, 0x00000821, ++ 0x03C, 0x0000127D, ++ 0x03C, 0x0000154A, ++ 0x03C, 0x00001821, ++ 0x03C, 0x0000227D, ++ 0x03C, 0x0000254A, ++ 0x03C, 0x00002821, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x0000027D, ++ 0x03C, 0x0000054A, ++ 0x03C, 0x00000821, ++ 0x03C, 0x0000127D, ++ 0x03C, 0x0000154A, ++ 0x03C, 0x00001821, ++ 0x03C, 0x0000227D, ++ 0x03C, 0x0000254A, ++ 0x03C, 0x00002821, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x0000027D, ++ 0x03C, 0x0000054A, ++ 0x03C, 0x00000821, ++ 0x03C, 0x0000127D, ++ 0x03C, 0x0000154A, ++ 0x03C, 0x00001821, ++ 0x03C, 0x0000227D, ++ 0x03C, 0x0000254A, ++ 0x03C, 0x00002821, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x0000027D, ++ 0x03C, 0x0000054A, ++ 0x03C, 0x00000821, ++ 0x03C, 0x0000127D, ++ 0x03C, 0x0000154A, ++ 0x03C, 0x00001821, ++ 0x03C, 0x0000227D, ++ 0x03C, 0x0000254A, ++ 0x03C, 0x00002821, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x0000027D, ++ 0x03C, 0x0000054A, ++ 0x03C, 0x00000821, ++ 0x03C, 0x0000127D, ++ 0x03C, 0x0000154A, ++ 0x03C, 0x00001821, ++ 0x03C, 0x0000227D, ++ 0x03C, 0x0000254A, ++ 0x03C, 0x00002821, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x0000027D, ++ 0x03C, 0x0000054A, ++ 0x03C, 0x00000821, ++ 0x03C, 0x0000127D, ++ 0x03C, 0x0000154A, ++ 0x03C, 0x00001821, ++ 0x03C, 0x0000227D, ++ 0x03C, 0x0000254A, ++ 0x03C, 0x00002821, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x0000027D, ++ 0x03C, 0x0000054A, ++ 0x03C, 0x00000821, ++ 0x03C, 0x0000127D, ++ 0x03C, 0x0000154A, ++ 0x03C, 0x00001821, ++ 0x03C, 0x0000227D, ++ 0x03C, 0x0000254A, ++ 0x03C, 0x00002821, ++ 0xA0000000, 0x00000000, ++ 0x03C, 0x0000037E, ++ 0x03C, 0x00000575, ++ 0x03C, 0x00000971, ++ 0x03C, 0x0000127E, ++ 0x03C, 0x00001575, ++ 0x03C, 0x00001871, ++ 0x03C, 0x0000217E, ++ 0x03C, 0x00002575, ++ 0x03C, 0x00002871, ++ 0xB0000000, 0x00000000, ++ 0x0EF, 0x00000000, ++ 0x061, 0x000C0D47, ++ 0x062, 0x0000133C, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x063, 0x000750E7, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x063, 0x000750E7, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x063, 0x000750E7, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x063, 0x000750E7, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x063, 0x000750E7, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x063, 0x000750E7, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x063, 0x000750E7, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x063, 0x000750E7, ++ 0xA0000000, 0x00000000, ++ 0x063, 0x0007D0E7, ++ 0xB0000000, 0x00000000, ++ 0x064, 0x00014FEC, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x065, 0x000920D0, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x065, 0x000920D0, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x065, 0x000920D0, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x065, 0x000920D0, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x065, 0x000920D0, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x065, 0x000920D0, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x065, 0x000920D0, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x065, 0x000920D0, ++ 0xA0000000, 0x00000000, ++ 0x065, 0x000933FF, ++ 0xB0000000, 0x00000000, ++ 0x066, 0x00000040, ++ 0x057, 0x00050000, ++ 0x056, 0x00051DF0, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x055, 0x00082061, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x055, 0x00082061, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x055, 0x00082061, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x055, 0x00082061, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x055, 0x00082061, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x055, 0x00082061, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x055, 0x00082061, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x055, 0x00082061, ++ 0xA0000000, 0x00000000, ++ 0x055, 0x00082060, ++ 0xB0000000, 0x00000000, ++ 0x01C, 0x000739D2, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x01F, 0x0002255C, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x01F, 0x0002255C, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x01F, 0x0002255C, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x01F, 0x0002255C, ++ 0xA0000000, 0x00000000, ++ 0x01F, 0x0002255C, ++ 0xB0000000, 0x00000000, ++ 0x0B1, 0x0007FF48, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x0C4, 0x00081700, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x0C4, 0x00081700, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x0C4, 0x00081700, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x0C4, 0x00081700, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x0C4, 0x00081700, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x0C4, 0x00081700, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x0C4, 0x00081700, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x0C4, 0x00081700, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x0C4, 0x00081700, ++ 0xA0000000, 0x00000000, ++ 0x0C4, 0x00083F00, ++ 0xB0000000, 0x00000000, ++ 0x018, 0x0001B126, ++ 0xFFE, 0x00000000, ++ 0xFFE, 0x00000000, ++ 0xFFE, 0x00000000, ++ 0x018, 0x00013126, ++ 0x018, 0x00013124, ++}; ++ ++RTW_DECL_TABLE_RF_RADIO(rtw8814a_rf_a, A); ++ ++static const u32 rtw8814a_rf_b[] = { ++ 0x018, 0x00013124, ++ 0x040, 0x00000C00, ++ 0x058, 0x00000F98, ++ 0x07F, 0x00068004, ++ 0x018, 0x00000006, ++ 0x80000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x086, 0x000E335A, ++ 0x087, 0x00079F80, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x086, 0x000E335A, ++ 0x087, 0x00079F80, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x086, 0x000E335A, ++ 0x087, 0x00079F80, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x086, 0x000E335A, ++ 0x087, 0x00079F80, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x086, 0x000E335A, ++ 0x087, 0x00079F80, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x086, 0x000E335A, ++ 0x087, 0x00079F80, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x086, 0x000E335A, ++ 0x087, 0x00079F80, ++ 0xA0000000, 0x00000000, ++ 0x086, 0x000E4B58, ++ 0x087, 0x00049F80, ++ 0xB0000000, 0x00000000, ++ 0x0DF, 0x00000008, ++ 0x0EF, 0x00002000, ++ 0x80000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x03B, 0x0003F19B, ++ 0x03B, 0x00037A5B, ++ 0x03B, 0x0002A433, ++ 0x03B, 0x00027BD3, ++ 0x03B, 0x0001F80B, ++ 0x03B, 0x00017BC3, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x03B, 0x0003F39B, ++ 0x03B, 0x00037A5B, ++ 0x03B, 0x0002A433, ++ 0x03B, 0x00027BD3, ++ 0x03B, 0x0001F80B, ++ 0x03B, 0x00017BC3, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x03B, 0x0003F19B, ++ 0x03B, 0x00037A5B, ++ 0x03B, 0x0002A433, ++ 0x03B, 0x00027BD3, ++ 0x03B, 0x0001F80B, ++ 0x03B, 0x00017BC3, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x03B, 0x0003F39B, ++ 0x03B, 0x00037A5B, ++ 0x03B, 0x0002A433, ++ 0x03B, 0x00027BD3, ++ 0x03B, 0x0001F80B, ++ 0x03B, 0x00017BC3, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03B, 0x0003F19B, ++ 0x03B, 0x00037A5B, ++ 0x03B, 0x0002A433, ++ 0x03B, 0x00027BD3, ++ 0x03B, 0x0001F80B, ++ 0x03B, 0x00017BC3, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x03B, 0x0003F19B, ++ 0x03B, 0x00037A5B, ++ 0x03B, 0x0002A433, ++ 0x03B, 0x00027BD3, ++ 0x03B, 0x0001F80B, ++ 0x03B, 0x00017BC3, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x03B, 0x0003F19B, ++ 0x03B, 0x00037A5B, ++ 0x03B, 0x0002A433, ++ 0x03B, 0x00027BD3, ++ 0x03B, 0x0001F80B, ++ 0x03B, 0x00017BC3, ++ 0xA0000000, 0x00000000, ++ 0x03B, 0x0003F258, ++ 0x03B, 0x00030A58, ++ 0x03B, 0x0002FA58, ++ 0x03B, 0x00022590, ++ 0x03B, 0x0001FA50, ++ 0x03B, 0x00010248, ++ 0x03B, 0x00008240, ++ 0xB0000000, 0x00000000, ++ 0x0EF, 0x00000100, ++ 0x80000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0xA0000000, 0x00000000, ++ 0x034, 0x0000ADF6, ++ 0x034, 0x00009DF3, ++ 0x034, 0x00008DF0, ++ 0x034, 0x00007DED, ++ 0x034, 0x00006DEA, ++ 0x034, 0x00005CED, ++ 0x034, 0x00004CEA, ++ 0x034, 0x000034EA, ++ 0x034, 0x000024E7, ++ 0x034, 0x0000146A, ++ 0x034, 0x0000006B, ++ 0xB0000000, 0x00000000, ++ 0x80000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0xA0000000, 0x00000000, ++ 0x034, 0x0008ADF6, ++ 0x034, 0x00089DF3, ++ 0x034, 0x00088DF0, ++ 0x034, 0x00087DED, ++ 0x034, 0x00086DEA, ++ 0x034, 0x00085CED, ++ 0x034, 0x00084CEA, ++ 0x034, 0x000834EA, ++ 0x034, 0x000824E7, ++ 0x034, 0x0008146A, ++ 0x034, 0x0008006B, ++ 0xB0000000, 0x00000000, ++ 0x0EF, 0x00000000, ++ 0x0EF, 0x000020A2, ++ 0x0DF, 0x00000080, ++ 0x035, 0x00000192, ++ 0x035, 0x00008192, ++ 0x035, 0x00010192, ++ 0x036, 0x00000024, ++ 0x036, 0x00008024, ++ 0x036, 0x00010024, ++ 0x036, 0x00018024, ++ 0x0EF, 0x00000000, ++ 0x051, 0x00000C21, ++ 0x052, 0x000006D9, ++ 0x053, 0x000FC649, ++ 0x054, 0x0000017E, ++ 0x018, 0x0001012A, ++ 0x081, 0x0007FC00, ++ 0x089, 0x00050110, ++ 0x08A, 0x00043E50, ++ 0x08B, 0x0002E180, ++ 0x08C, 0x00093C3C, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x085, 0x000F8000, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x085, 0x000F8000, ++ 0xA0000000, 0x00000000, ++ 0x085, 0x000F8000, ++ 0xB0000000, 0x00000000, ++ 0x08D, 0x000FFFF0, ++ 0x0EF, 0x00001000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00038023, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00088000, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00084000, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00088000, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00088000, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00088000, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00088000, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00088000, ++ 0xA0000000, 0x00000000, ++ 0x03C, 0x00040000, ++ 0xB0000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00030023, ++ 0x03C, 0x00048000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00028623, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00021633, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x0001C633, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00010293, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00009593, ++ 0x03C, 0x00000000, ++ 0x03A, 0x00000148, ++ 0x80000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03B, 0x00000F8B, ++ 0xA0000000, 0x00000000, ++ 0x03B, 0x0000078B, ++ 0xB0000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0xA0000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00020000, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00060000, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00048000, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00048000, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00020000, ++ 0x90000007, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00088000, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00048000, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00048000, ++ 0xA0000000, 0x00000000, ++ 0x03C, 0x00020000, ++ 0xB0000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00070023, ++ 0x03C, 0x00048000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00068623, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00061633, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x0005C633, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00050293, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00049593, ++ 0x03C, 0x00000000, ++ 0x03A, 0x00000148, ++ 0x03B, 0x0004078B, ++ 0x03C, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0xA0000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00048000, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00060000, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x0004C000, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00044000, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x0004C000, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00048000, ++ 0x90000007, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00020000, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00004000, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00044000, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00044000, ++ 0xA0000000, 0x00000000, ++ 0x03C, 0x00020000, ++ 0xB0000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B0023, ++ 0x80000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00020000, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00020000, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00020000, ++ 0xA0000000, 0x00000000, ++ 0x03C, 0x00020000, ++ 0xB0000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000A8623, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000A1633, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x0009C633, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00090293, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00089593, ++ 0x03C, 0x00000000, ++ 0x03A, 0x00000148, ++ 0x80000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03B, 0x0008138B, ++ 0xA0000000, 0x00000000, ++ 0x03B, 0x0008078B, ++ 0xB0000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x0EF, 0x00000000, ++ 0x0EF, 0x00000800, ++ 0x03B, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000803, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000803, ++ 0x90000007, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00001003, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00001003, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00001003, ++ 0xA0000000, 0x00000000, ++ 0x03A, 0x00000803, ++ 0xB0000000, 0x00000000, ++ 0x03B, 0x00040000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00001000, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00001001, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000803, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00001003, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00001000, ++ 0x90000007, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000000, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000800, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000800, ++ 0xA0000000, 0x00000000, ++ 0x03A, 0x00001000, ++ 0xB0000000, 0x00000000, ++ 0x03B, 0x00080000, ++ 0x80000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000000, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000000, ++ 0x90000007, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00001802, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00001802, ++ 0xA0000000, 0x00000000, ++ 0x03A, 0x00001002, ++ 0xB0000000, 0x00000000, ++ 0x0EF, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0xA0000000, 0x00000000, ++ 0xB0000000, 0x00000000, ++ 0x018, 0x00013124, ++ 0x0EF, 0x00000100, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0004A38C, ++ 0x034, 0x000491AD, ++ 0x034, 0x000481AA, ++ 0x034, 0x000471A7, ++ 0x034, 0x000460AA, ++ 0x034, 0x000450A7, ++ 0x034, 0x0004402C, ++ 0x034, 0x00043029, ++ 0x034, 0x0004200C, ++ 0x034, 0x00041009, ++ 0x034, 0x00040006, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0004A38C, ++ 0x034, 0x00049389, ++ 0x034, 0x0004816D, ++ 0x034, 0x0004716A, ++ 0x034, 0x0004606D, ++ 0x034, 0x0004506A, ++ 0x034, 0x0004402C, ++ 0x034, 0x00043029, ++ 0x034, 0x00042026, ++ 0x034, 0x00041009, ++ 0x034, 0x00040006, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0004A38B, ++ 0x034, 0x00049388, ++ 0x034, 0x0004818B, ++ 0x034, 0x00047188, ++ 0x034, 0x0004606D, ++ 0x034, 0x0004506A, ++ 0x034, 0x0004402C, ++ 0x034, 0x00043029, ++ 0x034, 0x00042026, ++ 0x034, 0x00041009, ++ 0x034, 0x00040006, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0004A38C, ++ 0x034, 0x00049389, ++ 0x034, 0x0004816D, ++ 0x034, 0x0004716A, ++ 0x034, 0x0004606D, ++ 0x034, 0x0004506A, ++ 0x034, 0x0004402C, ++ 0x034, 0x00043029, ++ 0x034, 0x00042026, ++ 0x034, 0x00041009, ++ 0x034, 0x00040006, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0004A38B, ++ 0x034, 0x00049388, ++ 0x034, 0x0004818B, ++ 0x034, 0x00047188, ++ 0x034, 0x0004606D, ++ 0x034, 0x0004506A, ++ 0x034, 0x0004402C, ++ 0x034, 0x00043029, ++ 0x034, 0x00042026, ++ 0x034, 0x00041009, ++ 0x034, 0x00040006, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0004A3F5, ++ 0x034, 0x000493F3, ++ 0x034, 0x000483B2, ++ 0x034, 0x00047390, ++ 0x034, 0x0004638D, ++ 0x034, 0x0004538A, ++ 0x034, 0x00044387, ++ 0x034, 0x0004324A, ++ 0x034, 0x00042247, ++ 0x034, 0x0004104D, ++ 0x034, 0x0004004A, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0004AFF7, ++ 0x034, 0x00049FF6, ++ 0x034, 0x00048FF3, ++ 0x034, 0x00047FF0, ++ 0x034, 0x00046FED, ++ 0x034, 0x00045FEA, ++ 0x034, 0x00044FE7, ++ 0x034, 0x00043DEA, ++ 0x034, 0x00042DE7, ++ 0x034, 0x00041DE4, ++ 0x034, 0x00040CE7, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0004A38C, ++ 0x034, 0x00049389, ++ 0x034, 0x0004816D, ++ 0x034, 0x0004716A, ++ 0x034, 0x0004606D, ++ 0x034, 0x0004506A, ++ 0x034, 0x0004402C, ++ 0x034, 0x00043029, ++ 0x034, 0x00042026, ++ 0x034, 0x00041009, ++ 0x034, 0x00040006, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0004A38C, ++ 0x034, 0x00049389, ++ 0x034, 0x0004816D, ++ 0x034, 0x0004716A, ++ 0x034, 0x0004606D, ++ 0x034, 0x0004506A, ++ 0x034, 0x0004402C, ++ 0x034, 0x00043029, ++ 0x034, 0x00042026, ++ 0x034, 0x00041009, ++ 0x034, 0x00040006, ++ 0xA0000000, 0x00000000, ++ 0x034, 0x0004AFF4, ++ 0x034, 0x00049FF1, ++ 0x034, 0x00048FEE, ++ 0x034, 0x00047FEB, ++ 0x034, 0x00046FE8, ++ 0x034, 0x00045DEA, ++ 0x034, 0x00044CED, ++ 0x034, 0x00043CEA, ++ 0x034, 0x00042C6C, ++ 0x034, 0x00041C69, ++ 0x034, 0x00040C2B, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0002A38C, ++ 0x034, 0x000291AD, ++ 0x034, 0x000281AA, ++ 0x034, 0x000271A7, ++ 0x034, 0x000260AA, ++ 0x034, 0x000250A7, ++ 0x034, 0x0002402C, ++ 0x034, 0x00023029, ++ 0x034, 0x0002200C, ++ 0x034, 0x00021009, ++ 0x034, 0x00020006, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0002A3EE, ++ 0x034, 0x000293AC, ++ 0x034, 0x00028389, ++ 0x034, 0x0002716D, ++ 0x034, 0x0002616A, ++ 0x034, 0x0002506D, ++ 0x034, 0x0002406A, ++ 0x034, 0x0002302C, ++ 0x034, 0x00022029, ++ 0x034, 0x00021026, ++ 0x034, 0x00020023, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0002A3EF, ++ 0x034, 0x000293AD, ++ 0x034, 0x0002838A, ++ 0x034, 0x0002718C, ++ 0x034, 0x00026189, ++ 0x034, 0x0002506D, ++ 0x034, 0x0002406A, ++ 0x034, 0x0002302C, ++ 0x034, 0x00022029, ++ 0x034, 0x00021026, ++ 0x034, 0x00020023, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0002A3EE, ++ 0x034, 0x000293AC, ++ 0x034, 0x00028389, ++ 0x034, 0x0002716D, ++ 0x034, 0x0002616A, ++ 0x034, 0x0002506D, ++ 0x034, 0x0002406A, ++ 0x034, 0x0002302C, ++ 0x034, 0x00022029, ++ 0x034, 0x00021026, ++ 0x034, 0x00020023, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0002A3EF, ++ 0x034, 0x000293AD, ++ 0x034, 0x0002838A, ++ 0x034, 0x0002718C, ++ 0x034, 0x00026189, ++ 0x034, 0x0002506D, ++ 0x034, 0x0002406A, ++ 0x034, 0x0002302C, ++ 0x034, 0x00022029, ++ 0x034, 0x00021026, ++ 0x034, 0x00020023, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0002A3F5, ++ 0x034, 0x000293F3, ++ 0x034, 0x000283D0, ++ 0x034, 0x00027371, ++ 0x034, 0x0002636E, ++ 0x034, 0x0002536B, ++ 0x034, 0x00024368, ++ 0x034, 0x0002332A, ++ 0x034, 0x00022327, ++ 0x034, 0x0002104C, ++ 0x034, 0x00020049, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0002AFF7, ++ 0x034, 0x00029FF6, ++ 0x034, 0x00028FF3, ++ 0x034, 0x00027FF0, ++ 0x034, 0x00026FED, ++ 0x034, 0x00025FEA, ++ 0x034, 0x00024FE7, ++ 0x034, 0x00023DEA, ++ 0x034, 0x00022DE7, ++ 0x034, 0x00021DE4, ++ 0x034, 0x00020F25, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0002A3EE, ++ 0x034, 0x000293AC, ++ 0x034, 0x00028389, ++ 0x034, 0x0002716D, ++ 0x034, 0x0002616A, ++ 0x034, 0x0002506D, ++ 0x034, 0x0002406A, ++ 0x034, 0x0002302C, ++ 0x034, 0x00022029, ++ 0x034, 0x00021026, ++ 0x034, 0x00020023, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0002A3EE, ++ 0x034, 0x000293AC, ++ 0x034, 0x00028389, ++ 0x034, 0x0002716D, ++ 0x034, 0x0002616A, ++ 0x034, 0x0002506D, ++ 0x034, 0x0002406A, ++ 0x034, 0x0002302C, ++ 0x034, 0x00022029, ++ 0x034, 0x00021026, ++ 0x034, 0x00020023, ++ 0xA0000000, 0x00000000, ++ 0x034, 0x0002AFF4, ++ 0x034, 0x00029FF1, ++ 0x034, 0x00028FEE, ++ 0x034, 0x00027FEB, ++ 0x034, 0x00026FE8, ++ 0x034, 0x00025DEA, ++ 0x034, 0x00024CED, ++ 0x034, 0x00023CEA, ++ 0x034, 0x00022C6C, ++ 0x034, 0x00021C69, ++ 0x034, 0x00020C2B, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A38C, ++ 0x034, 0x000091AD, ++ 0x034, 0x000081AA, ++ 0x034, 0x000071A7, ++ 0x034, 0x000060AA, ++ 0x034, 0x000050A7, ++ 0x034, 0x0000402C, ++ 0x034, 0x00003029, ++ 0x034, 0x00002026, ++ 0x034, 0x00001009, ++ 0x034, 0x00000006, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A3EC, ++ 0x034, 0x000093AC, ++ 0x034, 0x000081EC, ++ 0x034, 0x0000716D, ++ 0x034, 0x0000616A, ++ 0x034, 0x0000506D, ++ 0x034, 0x0000404C, ++ 0x034, 0x0000302C, ++ 0x034, 0x00002029, ++ 0x034, 0x00001026, ++ 0x034, 0x00000023, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A3EF, ++ 0x034, 0x000093AD, ++ 0x034, 0x0000838A, ++ 0x034, 0x0000718C, ++ 0x034, 0x00006189, ++ 0x034, 0x0000506D, ++ 0x034, 0x0000406A, ++ 0x034, 0x0000302C, ++ 0x034, 0x00002029, ++ 0x034, 0x00001026, ++ 0x034, 0x00000023, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A3EC, ++ 0x034, 0x000093AC, ++ 0x034, 0x000081EC, ++ 0x034, 0x0000716D, ++ 0x034, 0x0000616A, ++ 0x034, 0x0000506D, ++ 0x034, 0x0000404C, ++ 0x034, 0x0000302C, ++ 0x034, 0x00002029, ++ 0x034, 0x00001026, ++ 0x034, 0x00000023, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A3EF, ++ 0x034, 0x000093AD, ++ 0x034, 0x0000838A, ++ 0x034, 0x0000718C, ++ 0x034, 0x00006189, ++ 0x034, 0x0000506D, ++ 0x034, 0x0000406A, ++ 0x034, 0x0000302C, ++ 0x034, 0x00002029, ++ 0x034, 0x00001026, ++ 0x034, 0x00000023, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A3F4, ++ 0x034, 0x000093F0, ++ 0x034, 0x000083AE, ++ 0x034, 0x00007350, ++ 0x034, 0x0000634D, ++ 0x034, 0x0000534A, ++ 0x034, 0x00004347, ++ 0x034, 0x0000312D, ++ 0x034, 0x0000212A, ++ 0x034, 0x00001127, ++ 0x034, 0x0000002A, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000AFF7, ++ 0x034, 0x00009FF4, ++ 0x034, 0x00008FF1, ++ 0x034, 0x00007FEE, ++ 0x034, 0x00006FEB, ++ 0x034, 0x00005FE8, ++ 0x034, 0x00004DEB, ++ 0x034, 0x00003DE8, ++ 0x034, 0x00002DE5, ++ 0x034, 0x00001C8B, ++ 0x034, 0x00000C88, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A3EC, ++ 0x034, 0x000093AC, ++ 0x034, 0x000081EC, ++ 0x034, 0x0000716D, ++ 0x034, 0x0000616A, ++ 0x034, 0x0000506D, ++ 0x034, 0x0000404C, ++ 0x034, 0x0000302C, ++ 0x034, 0x00002029, ++ 0x034, 0x00001026, ++ 0x034, 0x00000023, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A3EC, ++ 0x034, 0x000093AC, ++ 0x034, 0x000081EC, ++ 0x034, 0x0000716D, ++ 0x034, 0x0000616A, ++ 0x034, 0x0000506D, ++ 0x034, 0x0000404C, ++ 0x034, 0x0000302C, ++ 0x034, 0x00002029, ++ 0x034, 0x00001026, ++ 0x034, 0x00000023, ++ 0xA0000000, 0x00000000, ++ 0x034, 0x0000AFF4, ++ 0x034, 0x00009FF1, ++ 0x034, 0x00008FEE, ++ 0x034, 0x00007FEB, ++ 0x034, 0x00006FE8, ++ 0x034, 0x00005DEA, ++ 0x034, 0x00004CED, ++ 0x034, 0x00003CEA, ++ 0x034, 0x00002C6C, ++ 0x034, 0x00001C69, ++ 0x034, 0x00000C2B, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000CA38C, ++ 0x034, 0x000C91AD, ++ 0x034, 0x000C81AA, ++ 0x034, 0x000C71A7, ++ 0x034, 0x000C60AA, ++ 0x034, 0x000C50A7, ++ 0x034, 0x000C402C, ++ 0x034, 0x000C3029, ++ 0x034, 0x000C200C, ++ 0x034, 0x000C1009, ++ 0x034, 0x000C0006, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000CA38C, ++ 0x034, 0x000C9389, ++ 0x034, 0x000C816D, ++ 0x034, 0x000C716A, ++ 0x034, 0x000C606D, ++ 0x034, 0x000C506A, ++ 0x034, 0x000C402C, ++ 0x034, 0x000C3029, ++ 0x034, 0x000C2026, ++ 0x034, 0x000C1009, ++ 0x034, 0x000C0006, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000CA38B, ++ 0x034, 0x000C9388, ++ 0x034, 0x000C818B, ++ 0x034, 0x000C7188, ++ 0x034, 0x000C606D, ++ 0x034, 0x000C506A, ++ 0x034, 0x000C402C, ++ 0x034, 0x000C3029, ++ 0x034, 0x000C2026, ++ 0x034, 0x000C1009, ++ 0x034, 0x000C0006, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000CA38C, ++ 0x034, 0x000C9389, ++ 0x034, 0x000C816D, ++ 0x034, 0x000C716A, ++ 0x034, 0x000C606D, ++ 0x034, 0x000C506A, ++ 0x034, 0x000C402C, ++ 0x034, 0x000C3029, ++ 0x034, 0x000C2026, ++ 0x034, 0x000C1009, ++ 0x034, 0x000C0006, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000CA38B, ++ 0x034, 0x000C9388, ++ 0x034, 0x000C818B, ++ 0x034, 0x000C7188, ++ 0x034, 0x000C606D, ++ 0x034, 0x000C506A, ++ 0x034, 0x000C402C, ++ 0x034, 0x000C3029, ++ 0x034, 0x000C2026, ++ 0x034, 0x000C1009, ++ 0x034, 0x000C0006, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000CA3F5, ++ 0x034, 0x000C93F3, ++ 0x034, 0x000C83B2, ++ 0x034, 0x000C7390, ++ 0x034, 0x000C638D, ++ 0x034, 0x000C538A, ++ 0x034, 0x000C4387, ++ 0x034, 0x000C324A, ++ 0x034, 0x000C2247, ++ 0x034, 0x000C104D, ++ 0x034, 0x000C004A, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000CAFF7, ++ 0x034, 0x000C9FF6, ++ 0x034, 0x000C8FF3, ++ 0x034, 0x000C7FF0, ++ 0x034, 0x000C6FED, ++ 0x034, 0x000C5FEA, ++ 0x034, 0x000C4FE7, ++ 0x034, 0x000C3DEA, ++ 0x034, 0x000C2DE7, ++ 0x034, 0x000C1DE4, ++ 0x034, 0x000C0CE7, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000CA38C, ++ 0x034, 0x000C9389, ++ 0x034, 0x000C816D, ++ 0x034, 0x000C716A, ++ 0x034, 0x000C606D, ++ 0x034, 0x000C506A, ++ 0x034, 0x000C402C, ++ 0x034, 0x000C3029, ++ 0x034, 0x000C2026, ++ 0x034, 0x000C1009, ++ 0x034, 0x000C0006, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000CA38C, ++ 0x034, 0x000C9389, ++ 0x034, 0x000C816D, ++ 0x034, 0x000C716A, ++ 0x034, 0x000C606D, ++ 0x034, 0x000C506A, ++ 0x034, 0x000C402C, ++ 0x034, 0x000C3029, ++ 0x034, 0x000C2026, ++ 0x034, 0x000C1009, ++ 0x034, 0x000C0006, ++ 0xA0000000, 0x00000000, ++ 0x034, 0x000CA794, ++ 0x034, 0x000C9791, ++ 0x034, 0x000C878E, ++ 0x034, 0x000C778B, ++ 0x034, 0x000C658D, ++ 0x034, 0x000C558A, ++ 0x034, 0x000C448D, ++ 0x034, 0x000C348A, ++ 0x034, 0x000C244C, ++ 0x034, 0x000C1449, ++ 0x034, 0x000C042B, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000AA38C, ++ 0x034, 0x000A91AD, ++ 0x034, 0x000A81AA, ++ 0x034, 0x000A71A7, ++ 0x034, 0x000A60AA, ++ 0x034, 0x000A50A7, ++ 0x034, 0x000A402C, ++ 0x034, 0x000A3029, ++ 0x034, 0x000A200C, ++ 0x034, 0x000A1009, ++ 0x034, 0x000A0006, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000AA3EE, ++ 0x034, 0x000A93AC, ++ 0x034, 0x000A8389, ++ 0x034, 0x000A716D, ++ 0x034, 0x000A616A, ++ 0x034, 0x000A506D, ++ 0x034, 0x000A406A, ++ 0x034, 0x000A302C, ++ 0x034, 0x000A2029, ++ 0x034, 0x000A1026, ++ 0x034, 0x000A0023, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000AA3EF, ++ 0x034, 0x000A93AD, ++ 0x034, 0x000A838A, ++ 0x034, 0x000A718C, ++ 0x034, 0x000A6189, ++ 0x034, 0x000A506D, ++ 0x034, 0x000A406A, ++ 0x034, 0x000A302C, ++ 0x034, 0x000A2029, ++ 0x034, 0x000A1026, ++ 0x034, 0x000A0023, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000AA3EE, ++ 0x034, 0x000A93AC, ++ 0x034, 0x000A8389, ++ 0x034, 0x000A716D, ++ 0x034, 0x000A616A, ++ 0x034, 0x000A506D, ++ 0x034, 0x000A406A, ++ 0x034, 0x000A302C, ++ 0x034, 0x000A2029, ++ 0x034, 0x000A1026, ++ 0x034, 0x000A0023, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000AA3EF, ++ 0x034, 0x000A93AD, ++ 0x034, 0x000A838A, ++ 0x034, 0x000A718C, ++ 0x034, 0x000A6189, ++ 0x034, 0x000A506D, ++ 0x034, 0x000A406A, ++ 0x034, 0x000A302C, ++ 0x034, 0x000A2029, ++ 0x034, 0x000A1026, ++ 0x034, 0x000A0023, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000AA3F5, ++ 0x034, 0x000A93F3, ++ 0x034, 0x000A83D0, ++ 0x034, 0x000A7371, ++ 0x034, 0x000A636E, ++ 0x034, 0x000A536B, ++ 0x034, 0x000A4368, ++ 0x034, 0x000A332A, ++ 0x034, 0x000A2327, ++ 0x034, 0x000A104C, ++ 0x034, 0x000A0049, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000AAFF7, ++ 0x034, 0x000A9FF6, ++ 0x034, 0x000A8FF3, ++ 0x034, 0x000A7FF0, ++ 0x034, 0x000A6FED, ++ 0x034, 0x000A5FEA, ++ 0x034, 0x000A4FE7, ++ 0x034, 0x000A3DEA, ++ 0x034, 0x000A2DE7, ++ 0x034, 0x000A1DE4, ++ 0x034, 0x000A0F25, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000AA3EE, ++ 0x034, 0x000A93AC, ++ 0x034, 0x000A8389, ++ 0x034, 0x000A716D, ++ 0x034, 0x000A616A, ++ 0x034, 0x000A506D, ++ 0x034, 0x000A406A, ++ 0x034, 0x000A302C, ++ 0x034, 0x000A2029, ++ 0x034, 0x000A1026, ++ 0x034, 0x000A0023, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000AA3EE, ++ 0x034, 0x000A93AC, ++ 0x034, 0x000A8389, ++ 0x034, 0x000A716D, ++ 0x034, 0x000A616A, ++ 0x034, 0x000A506D, ++ 0x034, 0x000A406A, ++ 0x034, 0x000A302C, ++ 0x034, 0x000A2029, ++ 0x034, 0x000A1026, ++ 0x034, 0x000A0023, ++ 0xA0000000, 0x00000000, ++ 0x034, 0x000AA794, ++ 0x034, 0x000A9791, ++ 0x034, 0x000A878E, ++ 0x034, 0x000A778B, ++ 0x034, 0x000A658D, ++ 0x034, 0x000A558A, ++ 0x034, 0x000A448D, ++ 0x034, 0x000A348A, ++ 0x034, 0x000A244C, ++ 0x034, 0x000A1449, ++ 0x034, 0x000A042B, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0008A38C, ++ 0x034, 0x000891AD, ++ 0x034, 0x000881AA, ++ 0x034, 0x000871A7, ++ 0x034, 0x000860AA, ++ 0x034, 0x000850A7, ++ 0x034, 0x0008402C, ++ 0x034, 0x00083029, ++ 0x034, 0x00082026, ++ 0x034, 0x00081009, ++ 0x034, 0x00080006, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0008A3EC, ++ 0x034, 0x000893AC, ++ 0x034, 0x000881EC, ++ 0x034, 0x0008716D, ++ 0x034, 0x0008616A, ++ 0x034, 0x0008506D, ++ 0x034, 0x0008404C, ++ 0x034, 0x0008302C, ++ 0x034, 0x00082029, ++ 0x034, 0x00081026, ++ 0x034, 0x00080023, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0008A3EF, ++ 0x034, 0x000893AD, ++ 0x034, 0x0008838A, ++ 0x034, 0x0008718C, ++ 0x034, 0x00086189, ++ 0x034, 0x0008506D, ++ 0x034, 0x0008406A, ++ 0x034, 0x0008302C, ++ 0x034, 0x00082029, ++ 0x034, 0x00081026, ++ 0x034, 0x00080023, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0008A3EC, ++ 0x034, 0x000893AC, ++ 0x034, 0x000881EC, ++ 0x034, 0x0008716D, ++ 0x034, 0x0008616A, ++ 0x034, 0x0008506D, ++ 0x034, 0x0008404C, ++ 0x034, 0x0008302C, ++ 0x034, 0x00082029, ++ 0x034, 0x00081026, ++ 0x034, 0x00080023, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0008A3EF, ++ 0x034, 0x000893AD, ++ 0x034, 0x0008838A, ++ 0x034, 0x0008718C, ++ 0x034, 0x00086189, ++ 0x034, 0x0008506D, ++ 0x034, 0x0008406A, ++ 0x034, 0x0008302C, ++ 0x034, 0x00082029, ++ 0x034, 0x00081026, ++ 0x034, 0x00080023, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0008A3F4, ++ 0x034, 0x000893F0, ++ 0x034, 0x000883AE, ++ 0x034, 0x00087350, ++ 0x034, 0x0008634D, ++ 0x034, 0x0008534A, ++ 0x034, 0x00084347, ++ 0x034, 0x0008312D, ++ 0x034, 0x0008212A, ++ 0x034, 0x00081127, ++ 0x034, 0x0008002A, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0008AFF7, ++ 0x034, 0x00089FF4, ++ 0x034, 0x00088FF1, ++ 0x034, 0x00087FEE, ++ 0x034, 0x00086FEB, ++ 0x034, 0x00085FE8, ++ 0x034, 0x00084DEB, ++ 0x034, 0x00083DE8, ++ 0x034, 0x00082DE5, ++ 0x034, 0x00081C8B, ++ 0x034, 0x00080C88, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0008A3EC, ++ 0x034, 0x000893AC, ++ 0x034, 0x000881EC, ++ 0x034, 0x0008716D, ++ 0x034, 0x0008616A, ++ 0x034, 0x0008506D, ++ 0x034, 0x0008404C, ++ 0x034, 0x0008302C, ++ 0x034, 0x00082029, ++ 0x034, 0x00081026, ++ 0x034, 0x00080023, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0008A3EC, ++ 0x034, 0x000893AC, ++ 0x034, 0x000881EC, ++ 0x034, 0x0008716D, ++ 0x034, 0x0008616A, ++ 0x034, 0x0008506D, ++ 0x034, 0x0008404C, ++ 0x034, 0x0008302C, ++ 0x034, 0x00082029, ++ 0x034, 0x00081026, ++ 0x034, 0x00080023, ++ 0xA0000000, 0x00000000, ++ 0x034, 0x0008A794, ++ 0x034, 0x00089791, ++ 0x034, 0x0008878E, ++ 0x034, 0x0008778B, ++ 0x034, 0x0008658D, ++ 0x034, 0x0008558A, ++ 0x034, 0x0008448D, ++ 0x034, 0x0008348A, ++ 0x034, 0x0008244C, ++ 0x034, 0x00081449, ++ 0x034, 0x0008042B, ++ 0xB0000000, 0x00000000, ++ 0x0EF, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0xA0000000, 0x00000000, ++ 0x0DF, 0x00000000, ++ 0xB0000000, 0x00000000, ++ 0x018, 0x0001712A, ++ 0x0EF, 0x00000040, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x035, 0x000006CC, ++ 0x035, 0x000086CC, ++ 0x035, 0x000106CC, ++ 0x035, 0x000206CC, ++ 0x035, 0x000286CC, ++ 0x035, 0x000306CC, ++ 0x035, 0x000406CC, ++ 0x035, 0x000486CC, ++ 0x035, 0x000506CC, ++ 0x035, 0x000806CC, ++ 0x035, 0x000886CC, ++ 0x035, 0x000906CC, ++ 0x035, 0x000A06CC, ++ 0x035, 0x000A86CC, ++ 0x035, 0x000B06CC, ++ 0x035, 0x000C06CC, ++ 0x035, 0x000C86CC, ++ 0x035, 0x000D06CC, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x035, 0x000006CC, ++ 0x035, 0x000086CC, ++ 0x035, 0x000106CC, ++ 0x035, 0x000206CC, ++ 0x035, 0x000286CC, ++ 0x035, 0x000306CC, ++ 0x035, 0x000406CC, ++ 0x035, 0x000486CC, ++ 0x035, 0x000506CC, ++ 0x035, 0x000806CC, ++ 0x035, 0x000886CC, ++ 0x035, 0x000906CC, ++ 0x035, 0x000A06CC, ++ 0x035, 0x000A86CC, ++ 0x035, 0x000B06CC, ++ 0x035, 0x000C06CC, ++ 0x035, 0x000C86CC, ++ 0x035, 0x000D06CC, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x035, 0x000006CC, ++ 0x035, 0x000086CC, ++ 0x035, 0x000106CC, ++ 0x035, 0x000206CC, ++ 0x035, 0x000286CC, ++ 0x035, 0x000306CC, ++ 0x035, 0x000406CC, ++ 0x035, 0x000486CC, ++ 0x035, 0x000506CC, ++ 0x035, 0x000806CC, ++ 0x035, 0x000886CC, ++ 0x035, 0x000906CC, ++ 0x035, 0x000A06CC, ++ 0x035, 0x000A86CC, ++ 0x035, 0x000B06CC, ++ 0x035, 0x000C06CC, ++ 0x035, 0x000C86CC, ++ 0x035, 0x000D06CC, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x035, 0x000006CC, ++ 0x035, 0x000086CC, ++ 0x035, 0x000106CC, ++ 0x035, 0x000206CC, ++ 0x035, 0x000286CC, ++ 0x035, 0x000306CC, ++ 0x035, 0x000406CC, ++ 0x035, 0x000486CC, ++ 0x035, 0x000506CC, ++ 0x035, 0x000806CC, ++ 0x035, 0x000886CC, ++ 0x035, 0x000906CC, ++ 0x035, 0x000A06CC, ++ 0x035, 0x000A86CC, ++ 0x035, 0x000B06CC, ++ 0x035, 0x000C06CC, ++ 0x035, 0x000C86CC, ++ 0x035, 0x000D06CC, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x035, 0x000006CC, ++ 0x035, 0x000086CC, ++ 0x035, 0x000106CC, ++ 0x035, 0x000206CC, ++ 0x035, 0x000286CC, ++ 0x035, 0x000306CC, ++ 0x035, 0x000406CC, ++ 0x035, 0x000486CC, ++ 0x035, 0x000506CC, ++ 0x035, 0x000806CC, ++ 0x035, 0x000886CC, ++ 0x035, 0x000906CC, ++ 0x035, 0x000A06CC, ++ 0x035, 0x000A86CC, ++ 0x035, 0x000B06CC, ++ 0x035, 0x000C06CC, ++ 0x035, 0x000C86CC, ++ 0x035, 0x000D06CC, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x035, 0x000006CC, ++ 0x035, 0x000086CC, ++ 0x035, 0x000106CC, ++ 0x035, 0x000206CC, ++ 0x035, 0x000286CC, ++ 0x035, 0x000306CC, ++ 0x035, 0x000406CC, ++ 0x035, 0x000486CC, ++ 0x035, 0x000506CC, ++ 0x035, 0x000806CC, ++ 0x035, 0x000886CC, ++ 0x035, 0x000906CC, ++ 0x035, 0x000A06CC, ++ 0x035, 0x000A86CC, ++ 0x035, 0x000B06CC, ++ 0x035, 0x000C06CC, ++ 0x035, 0x000C86CC, ++ 0x035, 0x000D06CC, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x035, 0x000006CC, ++ 0x035, 0x000086CC, ++ 0x035, 0x000106CC, ++ 0x035, 0x000206CC, ++ 0x035, 0x000286CC, ++ 0x035, 0x000306CC, ++ 0x035, 0x000406CC, ++ 0x035, 0x000486CC, ++ 0x035, 0x000506CC, ++ 0x035, 0x000806CC, ++ 0x035, 0x000886CC, ++ 0x035, 0x000906CC, ++ 0x035, 0x000A06CC, ++ 0x035, 0x000A86CC, ++ 0x035, 0x000B06CC, ++ 0x035, 0x000C06CC, ++ 0x035, 0x000C86CC, ++ 0x035, 0x000D06CC, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x035, 0x000006CC, ++ 0x035, 0x000086CC, ++ 0x035, 0x000106CC, ++ 0x035, 0x000206CC, ++ 0x035, 0x000286CC, ++ 0x035, 0x000306CC, ++ 0x035, 0x000406CC, ++ 0x035, 0x000486CC, ++ 0x035, 0x000506CC, ++ 0x035, 0x000806CC, ++ 0x035, 0x000886CC, ++ 0x035, 0x000906CC, ++ 0x035, 0x000A06CC, ++ 0x035, 0x000A86CC, ++ 0x035, 0x000B06CC, ++ 0x035, 0x000C06CC, ++ 0x035, 0x000C86CC, ++ 0x035, 0x000D06CC, ++ 0xA0000000, 0x00000000, ++ 0x035, 0x00000484, ++ 0x035, 0x00008484, ++ 0x035, 0x00010484, ++ 0x035, 0x00020584, ++ 0x035, 0x00028584, ++ 0x035, 0x00030584, ++ 0x035, 0x00040584, ++ 0x035, 0x00048584, ++ 0x035, 0x00050584, ++ 0x035, 0x000805FB, ++ 0x035, 0x000885FB, ++ 0x035, 0x000905FB, ++ 0x035, 0x000A05FB, ++ 0x035, 0x000A85FB, ++ 0x035, 0x000B05FB, ++ 0x035, 0x000C05FB, ++ 0x035, 0x000C85FB, ++ 0x035, 0x000D05FB, ++ 0xB0000000, 0x00000000, ++ 0x0EF, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0xA0000000, 0x00000000, ++ 0x0DF, 0x00000000, ++ 0xB0000000, 0x00000000, ++ 0x018, 0x0001712A, ++ 0x0EF, 0x00000010, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x036, 0x00000473, ++ 0x036, 0x00008473, ++ 0x036, 0x00010473, ++ 0x036, 0x00020473, ++ 0x036, 0x00028473, ++ 0x036, 0x00030473, ++ 0x036, 0x00040473, ++ 0x036, 0x00048473, ++ 0x036, 0x00050473, ++ 0x036, 0x00080473, ++ 0x036, 0x00088473, ++ 0x036, 0x00090473, ++ 0x036, 0x000A0473, ++ 0x036, 0x000A8473, ++ 0x036, 0x000B0473, ++ 0x036, 0x000C0473, ++ 0x036, 0x000C8473, ++ 0x036, 0x000D0473, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x036, 0x00000475, ++ 0x036, 0x00008475, ++ 0x036, 0x00010475, ++ 0x036, 0x00020475, ++ 0x036, 0x00028475, ++ 0x036, 0x00030475, ++ 0x036, 0x00040475, ++ 0x036, 0x00048475, ++ 0x036, 0x00050475, ++ 0x036, 0x00080475, ++ 0x036, 0x00088475, ++ 0x036, 0x00090475, ++ 0x036, 0x000A0475, ++ 0x036, 0x000A8475, ++ 0x036, 0x000B0475, ++ 0x036, 0x000C0475, ++ 0x036, 0x000C8475, ++ 0x036, 0x000D0475, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x036, 0x00000475, ++ 0x036, 0x00008475, ++ 0x036, 0x00010475, ++ 0x036, 0x00020475, ++ 0x036, 0x00028475, ++ 0x036, 0x00030475, ++ 0x036, 0x00040475, ++ 0x036, 0x00048475, ++ 0x036, 0x00050475, ++ 0x036, 0x00080475, ++ 0x036, 0x00088475, ++ 0x036, 0x00090475, ++ 0x036, 0x000A0475, ++ 0x036, 0x000A8475, ++ 0x036, 0x000B0475, ++ 0x036, 0x000C0475, ++ 0x036, 0x000C8475, ++ 0x036, 0x000D0475, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x036, 0x00000475, ++ 0x036, 0x00008475, ++ 0x036, 0x00010475, ++ 0x036, 0x00020475, ++ 0x036, 0x00028475, ++ 0x036, 0x00030475, ++ 0x036, 0x00040475, ++ 0x036, 0x00048475, ++ 0x036, 0x00050475, ++ 0x036, 0x00080475, ++ 0x036, 0x00088475, ++ 0x036, 0x00090475, ++ 0x036, 0x000A0475, ++ 0x036, 0x000A8475, ++ 0x036, 0x000B0475, ++ 0x036, 0x000C0475, ++ 0x036, 0x000C8475, ++ 0x036, 0x000D0475, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x036, 0x00000475, ++ 0x036, 0x00008475, ++ 0x036, 0x00010475, ++ 0x036, 0x00020475, ++ 0x036, 0x00028475, ++ 0x036, 0x00030475, ++ 0x036, 0x00040475, ++ 0x036, 0x00048475, ++ 0x036, 0x00050475, ++ 0x036, 0x00080475, ++ 0x036, 0x00088475, ++ 0x036, 0x00090475, ++ 0x036, 0x000A0475, ++ 0x036, 0x000A8475, ++ 0x036, 0x000B0475, ++ 0x036, 0x000C0475, ++ 0x036, 0x000C8475, ++ 0x036, 0x000D0475, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x036, 0x00000475, ++ 0x036, 0x00008475, ++ 0x036, 0x00010475, ++ 0x036, 0x00020475, ++ 0x036, 0x00028475, ++ 0x036, 0x00030475, ++ 0x036, 0x00040475, ++ 0x036, 0x00048475, ++ 0x036, 0x00050475, ++ 0x036, 0x00080475, ++ 0x036, 0x00088475, ++ 0x036, 0x00090475, ++ 0x036, 0x000A0475, ++ 0x036, 0x000A8475, ++ 0x036, 0x000B0475, ++ 0x036, 0x000C0475, ++ 0x036, 0x000C8475, ++ 0x036, 0x000D0475, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x036, 0x00000475, ++ 0x036, 0x00008475, ++ 0x036, 0x00010475, ++ 0x036, 0x00020475, ++ 0x036, 0x00028475, ++ 0x036, 0x00030475, ++ 0x036, 0x00040475, ++ 0x036, 0x00048475, ++ 0x036, 0x00050475, ++ 0x036, 0x00080475, ++ 0x036, 0x00088475, ++ 0x036, 0x00090475, ++ 0x036, 0x000A0475, ++ 0x036, 0x000A8475, ++ 0x036, 0x000B0475, ++ 0x036, 0x000C0475, ++ 0x036, 0x000C8475, ++ 0x036, 0x000D0475, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x036, 0x00000475, ++ 0x036, 0x00008475, ++ 0x036, 0x00010475, ++ 0x036, 0x00020475, ++ 0x036, 0x00028475, ++ 0x036, 0x00030475, ++ 0x036, 0x00040475, ++ 0x036, 0x00048475, ++ 0x036, 0x00050475, ++ 0x036, 0x00080475, ++ 0x036, 0x00088475, ++ 0x036, 0x00090475, ++ 0x036, 0x000A0475, ++ 0x036, 0x000A8475, ++ 0x036, 0x000B0475, ++ 0x036, 0x000C0475, ++ 0x036, 0x000C8475, ++ 0x036, 0x000D0475, ++ 0xA0000000, 0x00000000, ++ 0x036, 0x00000474, ++ 0x036, 0x00008474, ++ 0x036, 0x00010474, ++ 0x036, 0x00020474, ++ 0x036, 0x00028474, ++ 0x036, 0x00030474, ++ 0x036, 0x00040474, ++ 0x036, 0x00048474, ++ 0x036, 0x00050474, ++ 0x036, 0x00080474, ++ 0x036, 0x00088474, ++ 0x036, 0x00090474, ++ 0x036, 0x000A0474, ++ 0x036, 0x000A8474, ++ 0x036, 0x000B0474, ++ 0x036, 0x000C0474, ++ 0x036, 0x000C8474, ++ 0x036, 0x000D0474, ++ 0xB0000000, 0x00000000, ++ 0x0EF, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0xA0000000, 0x00000000, ++ 0x0EF, 0x00000004, ++ 0x037, 0x00000000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00004000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00008000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00010000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00014000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00018000, ++ 0x038, 0x0000514E, ++ 0x037, 0x0001C000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00020000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00024000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00028000, ++ 0x038, 0x0000514E, ++ 0x037, 0x0002C000, ++ 0x038, 0x0000714E, ++ 0x037, 0x00030000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00034000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00038000, ++ 0x038, 0x0000514E, ++ 0x037, 0x0003C000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00040000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00044000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00048000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00080000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x00084000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x00088000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x00090000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x00094000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x00098000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x0009C000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000A0000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000A4000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000A8000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000AC000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000B0000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000B4000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000B8000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000BC000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000C0000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000C4000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000C8000, ++ 0x038, 0x00005ECE, ++ 0x0EF, 0x00000000, ++ 0xB0000000, 0x00000000, ++ 0x0EF, 0x00000008, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0xA0000000, 0x00000000, ++ 0x03C, 0x0000007D, ++ 0x03C, 0x0000047D, ++ 0x03C, 0x0000087D, ++ 0x03C, 0x0000107D, ++ 0x03C, 0x0000147D, ++ 0x03C, 0x0000187D, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x0000027E, ++ 0x03C, 0x00000546, ++ 0x03C, 0x00000821, ++ 0x03C, 0x0000127E, ++ 0x03C, 0x00001546, ++ 0x03C, 0x00001821, ++ 0x03C, 0x0000227E, ++ 0x03C, 0x00002546, ++ 0x03C, 0x00002821, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x0000027E, ++ 0x03C, 0x00000546, ++ 0x03C, 0x00000821, ++ 0x03C, 0x0000127E, ++ 0x03C, 0x00001546, ++ 0x03C, 0x00001821, ++ 0x03C, 0x0000227E, ++ 0x03C, 0x00002546, ++ 0x03C, 0x00002821, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x0000027E, ++ 0x03C, 0x00000546, ++ 0x03C, 0x00000821, ++ 0x03C, 0x0000127E, ++ 0x03C, 0x00001546, ++ 0x03C, 0x00001821, ++ 0x03C, 0x0000227E, ++ 0x03C, 0x00002546, ++ 0x03C, 0x00002821, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x0000027E, ++ 0x03C, 0x00000546, ++ 0x03C, 0x00000821, ++ 0x03C, 0x0000127E, ++ 0x03C, 0x00001546, ++ 0x03C, 0x00001821, ++ 0x03C, 0x0000227E, ++ 0x03C, 0x00002546, ++ 0x03C, 0x00002821, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x0000027E, ++ 0x03C, 0x00000546, ++ 0x03C, 0x00000821, ++ 0x03C, 0x0000127E, ++ 0x03C, 0x00001546, ++ 0x03C, 0x00001821, ++ 0x03C, 0x0000227E, ++ 0x03C, 0x00002546, ++ 0x03C, 0x00002821, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x0000027E, ++ 0x03C, 0x00000546, ++ 0x03C, 0x00000821, ++ 0x03C, 0x0000127E, ++ 0x03C, 0x00001546, ++ 0x03C, 0x00001821, ++ 0x03C, 0x0000227E, ++ 0x03C, 0x00002546, ++ 0x03C, 0x00002821, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x0000027E, ++ 0x03C, 0x00000546, ++ 0x03C, 0x00000821, ++ 0x03C, 0x0000127E, ++ 0x03C, 0x00001546, ++ 0x03C, 0x00001821, ++ 0x03C, 0x0000227E, ++ 0x03C, 0x00002546, ++ 0x03C, 0x00002821, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x0000027E, ++ 0x03C, 0x00000546, ++ 0x03C, 0x00000821, ++ 0x03C, 0x0000127E, ++ 0x03C, 0x00001546, ++ 0x03C, 0x00001821, ++ 0x03C, 0x0000227E, ++ 0x03C, 0x00002546, ++ 0x03C, 0x00002821, ++ 0xA0000000, 0x00000000, ++ 0x03C, 0x0000037E, ++ 0x03C, 0x00000575, ++ 0x03C, 0x00000971, ++ 0x03C, 0x0000127E, ++ 0x03C, 0x00001575, ++ 0x03C, 0x00001871, ++ 0x03C, 0x0000217E, ++ 0x03C, 0x00002575, ++ 0x03C, 0x00002871, ++ 0xB0000000, 0x00000000, ++ 0x0EF, 0x00000000, ++ 0x061, 0x000C0D47, ++ 0x062, 0x0000133C, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x063, 0x000750E7, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x063, 0x000750E7, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x063, 0x000750E7, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x063, 0x000750E7, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x063, 0x000750E7, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x063, 0x000750E7, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x063, 0x000750E7, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x063, 0x000750E7, ++ 0xA0000000, 0x00000000, ++ 0x063, 0x0007D0E7, ++ 0xB0000000, 0x00000000, ++ 0x064, 0x00014FEC, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x065, 0x000920D0, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x065, 0x000920D0, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x065, 0x000920D0, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x065, 0x000920D0, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x065, 0x000920D0, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x065, 0x000920D0, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x065, 0x000920D0, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x065, 0x000920D0, ++ 0xA0000000, 0x00000000, ++ 0x065, 0x000923FF, ++ 0xB0000000, 0x00000000, ++ 0x066, 0x00000040, ++ 0x057, 0x00050000, ++ 0x056, 0x00051DF0, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0xA0000000, 0x00000000, ++ 0x055, 0x00082060, ++ 0xB0000000, 0x00000000, ++}; ++ ++RTW_DECL_TABLE_RF_RADIO(rtw8814a_rf_b, B); ++ ++static const u32 rtw8814a_rf_c[] = { ++ 0x018, 0x00013124, ++ 0x040, 0x00000C00, ++ 0x058, 0x00000F98, ++ 0x07F, 0x00068004, ++ 0x018, 0x00000006, ++ 0x80000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x086, 0x000E335A, ++ 0x087, 0x00079F80, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x086, 0x000E335A, ++ 0x087, 0x00079F80, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x086, 0x000E335A, ++ 0x087, 0x00079F80, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x086, 0x000E335A, ++ 0x087, 0x00079F80, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x086, 0x000E335A, ++ 0x087, 0x00079F80, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x086, 0x000E335A, ++ 0x087, 0x00079F80, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x086, 0x000E335A, ++ 0x087, 0x00079F80, ++ 0xA0000000, 0x00000000, ++ 0x086, 0x000E4B58, ++ 0x087, 0x00049F80, ++ 0xB0000000, 0x00000000, ++ 0x0DF, 0x00000008, ++ 0x0EF, 0x00002000, ++ 0x80000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x03B, 0x0003F19B, ++ 0x03B, 0x00037A5B, ++ 0x03B, 0x0002A433, ++ 0x03B, 0x00027BD3, ++ 0x03B, 0x0001F80B, ++ 0x03B, 0x00017823, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x03B, 0x0003F19B, ++ 0x03B, 0x00037A5B, ++ 0x03B, 0x0002A433, ++ 0x03B, 0x00027BD3, ++ 0x03B, 0x0001F80B, ++ 0x03B, 0x00017823, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x03B, 0x0003F19B, ++ 0x03B, 0x00037A5B, ++ 0x03B, 0x0002A433, ++ 0x03B, 0x00027BD3, ++ 0x03B, 0x0001F80B, ++ 0x03B, 0x00017823, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x03B, 0x0003F19B, ++ 0x03B, 0x00037A5B, ++ 0x03B, 0x0002A433, ++ 0x03B, 0x00027BD3, ++ 0x03B, 0x0001F80B, ++ 0x03B, 0x00017823, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03B, 0x0003F19B, ++ 0x03B, 0x00037A5B, ++ 0x03B, 0x0002A433, ++ 0x03B, 0x00027BD3, ++ 0x03B, 0x0001F80B, ++ 0x03B, 0x00017823, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x03B, 0x0003F19B, ++ 0x03B, 0x00037A5B, ++ 0x03B, 0x0002A433, ++ 0x03B, 0x00027BD3, ++ 0x03B, 0x0001F80B, ++ 0x03B, 0x00017823, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x03B, 0x0003F19B, ++ 0x03B, 0x00037A5B, ++ 0x03B, 0x0002A433, ++ 0x03B, 0x00027BD3, ++ 0x03B, 0x0001F80B, ++ 0x03B, 0x00017823, ++ 0xA0000000, 0x00000000, ++ 0x03B, 0x0003F258, ++ 0x03B, 0x00030A58, ++ 0x03B, 0x0002FA58, ++ 0x03B, 0x00022590, ++ 0x03B, 0x0001FA50, ++ 0x03B, 0x00010248, ++ 0x03B, 0x00008240, ++ 0xB0000000, 0x00000000, ++ 0x0EF, 0x00000100, ++ 0x80000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0xA0000000, 0x00000000, ++ 0x034, 0x0000ADF6, ++ 0x034, 0x00009DF3, ++ 0x034, 0x00008DF0, ++ 0x034, 0x00007DED, ++ 0x034, 0x00006DEA, ++ 0x034, 0x00005CED, ++ 0x034, 0x00004CEA, ++ 0x034, 0x000034EA, ++ 0x034, 0x000024E7, ++ 0x034, 0x0000146A, ++ 0x034, 0x0000006B, ++ 0xB0000000, 0x00000000, ++ 0x80000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0xA0000000, 0x00000000, ++ 0x034, 0x0008ADF6, ++ 0x034, 0x00089DF3, ++ 0x034, 0x00088DF0, ++ 0x034, 0x00087DED, ++ 0x034, 0x00086DEA, ++ 0x034, 0x00085CED, ++ 0x034, 0x00084CEA, ++ 0x034, 0x000834EA, ++ 0x034, 0x000824E7, ++ 0x034, 0x0008146A, ++ 0x034, 0x0008006B, ++ 0xB0000000, 0x00000000, ++ 0x0EF, 0x00000000, ++ 0x0EF, 0x000020A2, ++ 0x0DF, 0x00000080, ++ 0x035, 0x00000192, ++ 0x035, 0x00008192, ++ 0x035, 0x00010192, ++ 0x036, 0x00000024, ++ 0x036, 0x00008024, ++ 0x036, 0x00010024, ++ 0x036, 0x00018024, ++ 0x0EF, 0x00000000, ++ 0x051, 0x00000C21, ++ 0x052, 0x000006D9, ++ 0x053, 0x000FC649, ++ 0x054, 0x0000017E, ++ 0x018, 0x0001012A, ++ 0x081, 0x0007FC00, ++ 0x089, 0x00050110, ++ 0x08A, 0x00043E50, ++ 0x08B, 0x0002E180, ++ 0x08C, 0x00093C3C, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x085, 0x000F8000, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x085, 0x000F8000, ++ 0xA0000000, 0x00000000, ++ 0x085, 0x000F8000, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x08D, 0x000FFFF0, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x08D, 0x000FFFF0, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x08D, 0x000FFFF0, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x08D, 0x000FFFF0, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x08D, 0x000FFFF0, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x08D, 0x000FFFF0, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x08D, 0x000FFFF0, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x08D, 0x000FFFF0, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x08D, 0x000FFFF0, ++ 0xA0000000, 0x00000000, ++ 0x08D, 0x000FFFF0, ++ 0xB0000000, 0x00000000, ++ 0x0EF, 0x00001000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00038023, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x0006C000, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x000D4000, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00080000, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00088000, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x0006C000, ++ 0x90000007, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x0008C000, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00004000, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00088000, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00088000, ++ 0xA0000000, 0x00000000, ++ 0x03C, 0x000A0000, ++ 0xB0000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00030023, ++ 0x03C, 0x00048000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00028623, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00021633, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x0001C633, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00010293, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00009593, ++ 0x03C, 0x00000000, ++ 0x03A, 0x00000148, ++ 0x80000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03B, 0x0000118B, ++ 0xA0000000, 0x00000000, ++ 0x03B, 0x0000078B, ++ 0xB0000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0xA0000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x0004C000, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00084000, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00080000, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x0004C000, ++ 0x90000007, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x000D0000, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00080000, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00080000, ++ 0xA0000000, 0x00000000, ++ 0x03C, 0x00028000, ++ 0xB0000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00070023, ++ 0x03C, 0x00048000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00068623, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00061633, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x0005C633, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00050293, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00049593, ++ 0x03C, 0x00000000, ++ 0x03A, 0x00000148, ++ 0x03B, 0x0004078B, ++ 0x03C, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0xA0000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00024000, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00060000, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00080000, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00024000, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00024000, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00020000, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00024000, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00024000, ++ 0xA0000000, 0x00000000, ++ 0x03C, 0x00020000, ++ 0xB0000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B0023, ++ 0x80000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00020000, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00020000, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00020000, ++ 0xA0000000, 0x00000000, ++ 0x03C, 0x00020000, ++ 0xB0000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000A8623, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000A1633, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x0009C633, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00090293, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00089593, ++ 0x03C, 0x00000000, ++ 0x03A, 0x00000148, ++ 0x80000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03B, 0x0008128B, ++ 0xA0000000, 0x00000000, ++ 0x03B, 0x0008078B, ++ 0xB0000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x0EF, 0x00000000, ++ 0x0EF, 0x00000800, ++ 0x03B, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000803, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000000, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00001803, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00001803, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000803, ++ 0x90000007, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00001003, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00001003, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00001003, ++ 0xA0000000, 0x00000000, ++ 0x03A, 0x00000803, ++ 0xB0000000, 0x00000000, ++ 0x03B, 0x00040000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00001000, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000800, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000803, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000803, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00001000, ++ 0x90000007, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000000, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000000, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000000, ++ 0xA0000000, 0x00000000, ++ 0x03A, 0x00001000, ++ 0xB0000000, 0x00000000, ++ 0x03B, 0x00080000, ++ 0x80000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000000, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000000, ++ 0x90000007, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00001802, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00001802, ++ 0xA0000000, 0x00000000, ++ 0x03A, 0x00001002, ++ 0xB0000000, 0x00000000, ++ 0x0EF, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0xA0000000, 0x00000000, ++ 0xB0000000, 0x00000000, ++ 0x80000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x018, 0x00013124, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x018, 0x00013124, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x018, 0x00013124, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x018, 0x00013124, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x018, 0x00013124, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x018, 0x00013124, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x018, 0x00013124, ++ 0xA0000000, 0x00000000, ++ 0x018, 0x00013124, ++ 0xB0000000, 0x00000000, ++ 0x0EF, 0x00000100, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0004A38C, ++ 0x034, 0x000491AD, ++ 0x034, 0x000481AA, ++ 0x034, 0x000471A7, ++ 0x034, 0x000460AA, ++ 0x034, 0x000450A7, ++ 0x034, 0x0004402C, ++ 0x034, 0x00043029, ++ 0x034, 0x0004200C, ++ 0x034, 0x00041009, ++ 0x034, 0x00040006, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0004A3EF, ++ 0x034, 0x000493AD, ++ 0x034, 0x0004838A, ++ 0x034, 0x0004718C, ++ 0x034, 0x00046189, ++ 0x034, 0x0004506D, ++ 0x034, 0x0004404C, ++ 0x034, 0x0004302C, ++ 0x034, 0x00042029, ++ 0x034, 0x00041026, ++ 0x034, 0x00040023, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0004A3EF, ++ 0x034, 0x000493AD, ++ 0x034, 0x0004838A, ++ 0x034, 0x0004718C, ++ 0x034, 0x00046189, ++ 0x034, 0x0004506D, ++ 0x034, 0x0004404C, ++ 0x034, 0x0004302C, ++ 0x034, 0x00042029, ++ 0x034, 0x00041026, ++ 0x034, 0x00040023, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0004A3EF, ++ 0x034, 0x000493AD, ++ 0x034, 0x0004838A, ++ 0x034, 0x0004718C, ++ 0x034, 0x00046189, ++ 0x034, 0x0004506D, ++ 0x034, 0x0004404C, ++ 0x034, 0x0004302C, ++ 0x034, 0x00042029, ++ 0x034, 0x00041026, ++ 0x034, 0x00040023, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0004A3EF, ++ 0x034, 0x000493AD, ++ 0x034, 0x0004838A, ++ 0x034, 0x0004718C, ++ 0x034, 0x00046189, ++ 0x034, 0x0004506D, ++ 0x034, 0x0004404C, ++ 0x034, 0x0004302C, ++ 0x034, 0x00042029, ++ 0x034, 0x00041026, ++ 0x034, 0x00040023, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0004A3F5, ++ 0x034, 0x000493F3, ++ 0x034, 0x00048393, ++ 0x034, 0x00047390, ++ 0x034, 0x0004638D, ++ 0x034, 0x0004538A, ++ 0x034, 0x00044387, ++ 0x034, 0x000430ED, ++ 0x034, 0x000420EA, ++ 0x034, 0x000410E7, ++ 0x034, 0x0004002D, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0004AFF7, ++ 0x034, 0x00049FF6, ++ 0x034, 0x00048FF3, ++ 0x034, 0x00047FF0, ++ 0x034, 0x00046FED, ++ 0x034, 0x00045FEA, ++ 0x034, 0x00044FE7, ++ 0x034, 0x00043CD0, ++ 0x034, 0x00042CCD, ++ 0x034, 0x00041CCA, ++ 0x034, 0x00040CC7, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0004A3EF, ++ 0x034, 0x000493AD, ++ 0x034, 0x0004838A, ++ 0x034, 0x0004718C, ++ 0x034, 0x00046189, ++ 0x034, 0x0004506D, ++ 0x034, 0x0004404C, ++ 0x034, 0x0004302C, ++ 0x034, 0x00042029, ++ 0x034, 0x00041026, ++ 0x034, 0x00040023, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0004A3EF, ++ 0x034, 0x000493AD, ++ 0x034, 0x0004838A, ++ 0x034, 0x0004718C, ++ 0x034, 0x00046189, ++ 0x034, 0x0004506D, ++ 0x034, 0x0004404C, ++ 0x034, 0x0004302C, ++ 0x034, 0x00042029, ++ 0x034, 0x00041026, ++ 0x034, 0x00040023, ++ 0xA0000000, 0x00000000, ++ 0x034, 0x0004AFF4, ++ 0x034, 0x00049FF1, ++ 0x034, 0x00048FEE, ++ 0x034, 0x00047FEB, ++ 0x034, 0x00046FE8, ++ 0x034, 0x00045DEA, ++ 0x034, 0x00044CED, ++ 0x034, 0x00043CEA, ++ 0x034, 0x00042C6C, ++ 0x034, 0x00041C69, ++ 0x034, 0x00040C2B, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0002A3EC, ++ 0x034, 0x0002938C, ++ 0x034, 0x000281AD, ++ 0x034, 0x000271AA, ++ 0x034, 0x000261A7, ++ 0x034, 0x000250AA, ++ 0x034, 0x000240A7, ++ 0x034, 0x0002302C, ++ 0x034, 0x00022029, ++ 0x034, 0x0002100C, ++ 0x034, 0x00020009, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0002A3EC, ++ 0x034, 0x0002936D, ++ 0x034, 0x0002836A, ++ 0x034, 0x0002716D, ++ 0x034, 0x0002616A, ++ 0x034, 0x0002506D, ++ 0x034, 0x0002406A, ++ 0x034, 0x0002302C, ++ 0x034, 0x00022029, ++ 0x034, 0x00021026, ++ 0x034, 0x00020023, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0002A3EC, ++ 0x034, 0x000293AC, ++ 0x034, 0x0002838A, ++ 0x034, 0x0002718C, ++ 0x034, 0x00026189, ++ 0x034, 0x0002506D, ++ 0x034, 0x0002406A, ++ 0x034, 0x0002302C, ++ 0x034, 0x00022029, ++ 0x034, 0x00021026, ++ 0x034, 0x00020023, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0002A3EC, ++ 0x034, 0x0002936D, ++ 0x034, 0x0002836A, ++ 0x034, 0x0002716D, ++ 0x034, 0x0002616A, ++ 0x034, 0x0002506D, ++ 0x034, 0x0002406A, ++ 0x034, 0x0002302C, ++ 0x034, 0x00022029, ++ 0x034, 0x00021026, ++ 0x034, 0x00020023, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0002A3EC, ++ 0x034, 0x000293AC, ++ 0x034, 0x0002838A, ++ 0x034, 0x0002718C, ++ 0x034, 0x00026189, ++ 0x034, 0x0002506D, ++ 0x034, 0x0002406A, ++ 0x034, 0x0002302C, ++ 0x034, 0x00022029, ++ 0x034, 0x00021026, ++ 0x034, 0x00020023, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0002A3F5, ++ 0x034, 0x000293F3, ++ 0x034, 0x000282F2, ++ 0x034, 0x000272D0, ++ 0x034, 0x000262CD, ++ 0x034, 0x000252CA, ++ 0x034, 0x000242C7, ++ 0x034, 0x000230CD, ++ 0x034, 0x000220CA, ++ 0x034, 0x000210C7, ++ 0x034, 0x00020086, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0002AFF7, ++ 0x034, 0x00029FF6, ++ 0x034, 0x00028FF3, ++ 0x034, 0x00027FF0, ++ 0x034, 0x00026FED, ++ 0x034, 0x00025FEA, ++ 0x034, 0x00024FE7, ++ 0x034, 0x00023DEA, ++ 0x034, 0x00022DE7, ++ 0x034, 0x00021DE4, ++ 0x034, 0x00020E44, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0002A3EC, ++ 0x034, 0x0002936D, ++ 0x034, 0x0002836A, ++ 0x034, 0x0002716D, ++ 0x034, 0x0002616A, ++ 0x034, 0x0002506D, ++ 0x034, 0x0002406A, ++ 0x034, 0x0002302C, ++ 0x034, 0x00022029, ++ 0x034, 0x00021026, ++ 0x034, 0x00020023, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0002A3EC, ++ 0x034, 0x0002936D, ++ 0x034, 0x0002836A, ++ 0x034, 0x0002716D, ++ 0x034, 0x0002616A, ++ 0x034, 0x0002506D, ++ 0x034, 0x0002406A, ++ 0x034, 0x0002302C, ++ 0x034, 0x00022029, ++ 0x034, 0x00021026, ++ 0x034, 0x00020023, ++ 0xA0000000, 0x00000000, ++ 0x034, 0x0002AFF4, ++ 0x034, 0x00029FF1, ++ 0x034, 0x00028FEE, ++ 0x034, 0x00027FEB, ++ 0x034, 0x00026FE8, ++ 0x034, 0x00025DEA, ++ 0x034, 0x00024CED, ++ 0x034, 0x00023CEA, ++ 0x034, 0x00022C6C, ++ 0x034, 0x00021C69, ++ 0x034, 0x00020C2B, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A38C, ++ 0x034, 0x000091AD, ++ 0x034, 0x000081AA, ++ 0x034, 0x000071A7, ++ 0x034, 0x000060AA, ++ 0x034, 0x000050A7, ++ 0x034, 0x0000402C, ++ 0x034, 0x00003029, ++ 0x034, 0x0000200C, ++ 0x034, 0x00001009, ++ 0x034, 0x00000006, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A3EE, ++ 0x034, 0x000093AB, ++ 0x034, 0x00008389, ++ 0x034, 0x0000718C, ++ 0x034, 0x00006189, ++ 0x034, 0x0000506D, ++ 0x034, 0x0000406A, ++ 0x034, 0x0000302C, ++ 0x034, 0x00002029, ++ 0x034, 0x00001026, ++ 0x034, 0x00000023, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A3EE, ++ 0x034, 0x000093AB, ++ 0x034, 0x00008389, ++ 0x034, 0x0000718C, ++ 0x034, 0x00006189, ++ 0x034, 0x0000506D, ++ 0x034, 0x0000406A, ++ 0x034, 0x0000302C, ++ 0x034, 0x00002029, ++ 0x034, 0x00001026, ++ 0x034, 0x00000023, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A3EE, ++ 0x034, 0x000093AB, ++ 0x034, 0x00008389, ++ 0x034, 0x0000718C, ++ 0x034, 0x00006189, ++ 0x034, 0x0000506D, ++ 0x034, 0x0000406A, ++ 0x034, 0x0000302C, ++ 0x034, 0x00002029, ++ 0x034, 0x00001026, ++ 0x034, 0x00000023, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A3EE, ++ 0x034, 0x000093AB, ++ 0x034, 0x00008389, ++ 0x034, 0x0000718C, ++ 0x034, 0x00006189, ++ 0x034, 0x0000506D, ++ 0x034, 0x0000406A, ++ 0x034, 0x0000302C, ++ 0x034, 0x00002029, ++ 0x034, 0x00001026, ++ 0x034, 0x00000023, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A3F5, ++ 0x034, 0x000093F1, ++ 0x034, 0x000083B0, ++ 0x034, 0x00007370, ++ 0x034, 0x0000636D, ++ 0x034, 0x0000536A, ++ 0x034, 0x00004367, ++ 0x034, 0x0000308E, ++ 0x034, 0x0000208B, ++ 0x034, 0x00001088, ++ 0x034, 0x00000085, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000AFF7, ++ 0x034, 0x00009FF5, ++ 0x034, 0x00008FF2, ++ 0x034, 0x00007FEF, ++ 0x034, 0x00006FEC, ++ 0x034, 0x00005FE9, ++ 0x034, 0x00004EAA, ++ 0x034, 0x00003EA7, ++ 0x034, 0x00002C70, ++ 0x034, 0x00001C6D, ++ 0x034, 0x00000C6A, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A3EE, ++ 0x034, 0x000093AB, ++ 0x034, 0x00008389, ++ 0x034, 0x0000718C, ++ 0x034, 0x00006189, ++ 0x034, 0x0000506D, ++ 0x034, 0x0000406A, ++ 0x034, 0x0000302C, ++ 0x034, 0x00002029, ++ 0x034, 0x00001026, ++ 0x034, 0x00000023, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A3EE, ++ 0x034, 0x000093AB, ++ 0x034, 0x00008389, ++ 0x034, 0x0000718C, ++ 0x034, 0x00006189, ++ 0x034, 0x0000506D, ++ 0x034, 0x0000406A, ++ 0x034, 0x0000302C, ++ 0x034, 0x00002029, ++ 0x034, 0x00001026, ++ 0x034, 0x00000023, ++ 0xA0000000, 0x00000000, ++ 0x034, 0x0000AFF4, ++ 0x034, 0x00009FF1, ++ 0x034, 0x00008FEE, ++ 0x034, 0x00007FEB, ++ 0x034, 0x00006FE8, ++ 0x034, 0x00005DEA, ++ 0x034, 0x00004CED, ++ 0x034, 0x00003CEA, ++ 0x034, 0x00002C6C, ++ 0x034, 0x00001C69, ++ 0x034, 0x00000C2B, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000CA38C, ++ 0x034, 0x000C91AD, ++ 0x034, 0x000C81AA, ++ 0x034, 0x000C71A7, ++ 0x034, 0x000C60AA, ++ 0x034, 0x000C50A7, ++ 0x034, 0x000C402C, ++ 0x034, 0x000C3029, ++ 0x034, 0x000C200C, ++ 0x034, 0x000C1009, ++ 0x034, 0x000C0006, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000CA3EF, ++ 0x034, 0x000C93AD, ++ 0x034, 0x000C838A, ++ 0x034, 0x000C718C, ++ 0x034, 0x000C6189, ++ 0x034, 0x000C506D, ++ 0x034, 0x000C404C, ++ 0x034, 0x000C302C, ++ 0x034, 0x000C2029, ++ 0x034, 0x000C1026, ++ 0x034, 0x000C0023, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000CA3EF, ++ 0x034, 0x000C93AD, ++ 0x034, 0x000C838A, ++ 0x034, 0x000C718C, ++ 0x034, 0x000C6189, ++ 0x034, 0x000C506D, ++ 0x034, 0x000C404C, ++ 0x034, 0x000C302C, ++ 0x034, 0x000C2029, ++ 0x034, 0x000C1026, ++ 0x034, 0x000C0023, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000CA3EF, ++ 0x034, 0x000C93AD, ++ 0x034, 0x000C838A, ++ 0x034, 0x000C718C, ++ 0x034, 0x000C6189, ++ 0x034, 0x000C506D, ++ 0x034, 0x000C404C, ++ 0x034, 0x000C302C, ++ 0x034, 0x000C2029, ++ 0x034, 0x000C1026, ++ 0x034, 0x000C0023, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000CA3EF, ++ 0x034, 0x000C93AD, ++ 0x034, 0x000C838A, ++ 0x034, 0x000C718C, ++ 0x034, 0x000C6189, ++ 0x034, 0x000C506D, ++ 0x034, 0x000C404C, ++ 0x034, 0x000C302C, ++ 0x034, 0x000C2029, ++ 0x034, 0x000C1026, ++ 0x034, 0x000C0023, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000CA3F5, ++ 0x034, 0x000C93F3, ++ 0x034, 0x000C8393, ++ 0x034, 0x000C7390, ++ 0x034, 0x000C638D, ++ 0x034, 0x000C538A, ++ 0x034, 0x000C4387, ++ 0x034, 0x000C30ED, ++ 0x034, 0x000C20EA, ++ 0x034, 0x000C10E7, ++ 0x034, 0x000C002D, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000CAFF7, ++ 0x034, 0x000C9FF6, ++ 0x034, 0x000C8FF3, ++ 0x034, 0x000C7FF0, ++ 0x034, 0x000C6FED, ++ 0x034, 0x000C5FEA, ++ 0x034, 0x000C4FE7, ++ 0x034, 0x000C3CD0, ++ 0x034, 0x000C2CCD, ++ 0x034, 0x000C1CCA, ++ 0x034, 0x000C0CC7, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000CA3EF, ++ 0x034, 0x000C93AD, ++ 0x034, 0x000C838A, ++ 0x034, 0x000C718C, ++ 0x034, 0x000C6189, ++ 0x034, 0x000C506D, ++ 0x034, 0x000C404C, ++ 0x034, 0x000C302C, ++ 0x034, 0x000C2029, ++ 0x034, 0x000C1026, ++ 0x034, 0x000C0023, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000CA3EF, ++ 0x034, 0x000C93AD, ++ 0x034, 0x000C838A, ++ 0x034, 0x000C718C, ++ 0x034, 0x000C6189, ++ 0x034, 0x000C506D, ++ 0x034, 0x000C404C, ++ 0x034, 0x000C302C, ++ 0x034, 0x000C2029, ++ 0x034, 0x000C1026, ++ 0x034, 0x000C0023, ++ 0xA0000000, 0x00000000, ++ 0x034, 0x000CA794, ++ 0x034, 0x000C9791, ++ 0x034, 0x000C878E, ++ 0x034, 0x000C778B, ++ 0x034, 0x000C658D, ++ 0x034, 0x000C558A, ++ 0x034, 0x000C448D, ++ 0x034, 0x000C348A, ++ 0x034, 0x000C244C, ++ 0x034, 0x000C1449, ++ 0x034, 0x000C042B, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000AA3EC, ++ 0x034, 0x000A938C, ++ 0x034, 0x000A81AD, ++ 0x034, 0x000A71AA, ++ 0x034, 0x000A61A7, ++ 0x034, 0x000A50AA, ++ 0x034, 0x000A40A7, ++ 0x034, 0x000A302C, ++ 0x034, 0x000A2029, ++ 0x034, 0x000A100C, ++ 0x034, 0x000A0009, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000AA3EC, ++ 0x034, 0x000A936D, ++ 0x034, 0x000A836A, ++ 0x034, 0x000A716D, ++ 0x034, 0x000A616A, ++ 0x034, 0x000A506D, ++ 0x034, 0x000A406A, ++ 0x034, 0x000A302C, ++ 0x034, 0x000A2029, ++ 0x034, 0x000A1026, ++ 0x034, 0x000A0023, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000AA3EC, ++ 0x034, 0x000A93AC, ++ 0x034, 0x000A838A, ++ 0x034, 0x000A718C, ++ 0x034, 0x000A6189, ++ 0x034, 0x000A506D, ++ 0x034, 0x000A406A, ++ 0x034, 0x000A302C, ++ 0x034, 0x000A2029, ++ 0x034, 0x000A1026, ++ 0x034, 0x000A0023, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000AA3EC, ++ 0x034, 0x000A936D, ++ 0x034, 0x000A836A, ++ 0x034, 0x000A716D, ++ 0x034, 0x000A616A, ++ 0x034, 0x000A506D, ++ 0x034, 0x000A406A, ++ 0x034, 0x000A302C, ++ 0x034, 0x000A2029, ++ 0x034, 0x000A1026, ++ 0x034, 0x000A0023, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000AA3EC, ++ 0x034, 0x000A93AC, ++ 0x034, 0x000A838A, ++ 0x034, 0x000A718C, ++ 0x034, 0x000A6189, ++ 0x034, 0x000A506D, ++ 0x034, 0x000A406A, ++ 0x034, 0x000A302C, ++ 0x034, 0x000A2029, ++ 0x034, 0x000A1026, ++ 0x034, 0x000A0023, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000AA3F5, ++ 0x034, 0x000A93F3, ++ 0x034, 0x000A82F2, ++ 0x034, 0x000A72D0, ++ 0x034, 0x000A62CD, ++ 0x034, 0x000A52CA, ++ 0x034, 0x000A42C7, ++ 0x034, 0x000A30CD, ++ 0x034, 0x000A20CA, ++ 0x034, 0x000A10C7, ++ 0x034, 0x000A0086, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000AAFF7, ++ 0x034, 0x000A9FF6, ++ 0x034, 0x000A8FF3, ++ 0x034, 0x000A7FF0, ++ 0x034, 0x000A6FED, ++ 0x034, 0x000A5FEA, ++ 0x034, 0x000A4FE7, ++ 0x034, 0x000A3DEA, ++ 0x034, 0x000A2DE7, ++ 0x034, 0x000A1DE4, ++ 0x034, 0x000A0E44, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000AA3EC, ++ 0x034, 0x000A936D, ++ 0x034, 0x000A836A, ++ 0x034, 0x000A716D, ++ 0x034, 0x000A616A, ++ 0x034, 0x000A506D, ++ 0x034, 0x000A406A, ++ 0x034, 0x000A302C, ++ 0x034, 0x000A2029, ++ 0x034, 0x000A1026, ++ 0x034, 0x000A0023, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000AA3EC, ++ 0x034, 0x000A936D, ++ 0x034, 0x000A836A, ++ 0x034, 0x000A716D, ++ 0x034, 0x000A616A, ++ 0x034, 0x000A506D, ++ 0x034, 0x000A406A, ++ 0x034, 0x000A302C, ++ 0x034, 0x000A2029, ++ 0x034, 0x000A1026, ++ 0x034, 0x000A0023, ++ 0xA0000000, 0x00000000, ++ 0x034, 0x000AA794, ++ 0x034, 0x000A9791, ++ 0x034, 0x000A878E, ++ 0x034, 0x000A778B, ++ 0x034, 0x000A658D, ++ 0x034, 0x000A558A, ++ 0x034, 0x000A448D, ++ 0x034, 0x000A348A, ++ 0x034, 0x000A244C, ++ 0x034, 0x000A1449, ++ 0x034, 0x000A042B, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0008A38C, ++ 0x034, 0x000891AD, ++ 0x034, 0x000881AA, ++ 0x034, 0x000871A7, ++ 0x034, 0x000860AA, ++ 0x034, 0x000850A7, ++ 0x034, 0x0008402C, ++ 0x034, 0x00083029, ++ 0x034, 0x0008200C, ++ 0x034, 0x00081009, ++ 0x034, 0x00000006, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0008A3EE, ++ 0x034, 0x000893AB, ++ 0x034, 0x00088389, ++ 0x034, 0x0008718C, ++ 0x034, 0x00086189, ++ 0x034, 0x0008506D, ++ 0x034, 0x0008406A, ++ 0x034, 0x0008302C, ++ 0x034, 0x00082029, ++ 0x034, 0x00081026, ++ 0x034, 0x00080023, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0008A3EE, ++ 0x034, 0x000893AB, ++ 0x034, 0x00088389, ++ 0x034, 0x0008718C, ++ 0x034, 0x00086189, ++ 0x034, 0x0008506D, ++ 0x034, 0x0008406A, ++ 0x034, 0x0008302C, ++ 0x034, 0x00082029, ++ 0x034, 0x00081026, ++ 0x034, 0x00080023, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0008A3EE, ++ 0x034, 0x000893AB, ++ 0x034, 0x00088389, ++ 0x034, 0x0008718C, ++ 0x034, 0x00086189, ++ 0x034, 0x0008506D, ++ 0x034, 0x0008406A, ++ 0x034, 0x0008302C, ++ 0x034, 0x00082029, ++ 0x034, 0x00081026, ++ 0x034, 0x00080023, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0008A3EE, ++ 0x034, 0x000893AB, ++ 0x034, 0x00088389, ++ 0x034, 0x0008718C, ++ 0x034, 0x00086189, ++ 0x034, 0x0008506D, ++ 0x034, 0x0008406A, ++ 0x034, 0x0008302C, ++ 0x034, 0x00082029, ++ 0x034, 0x00081026, ++ 0x034, 0x00080023, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0008A3F5, ++ 0x034, 0x000893F1, ++ 0x034, 0x000883B0, ++ 0x034, 0x00087370, ++ 0x034, 0x0008636D, ++ 0x034, 0x0008536A, ++ 0x034, 0x00084367, ++ 0x034, 0x0008308E, ++ 0x034, 0x0008208B, ++ 0x034, 0x00081088, ++ 0x034, 0x00080085, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0008AFF7, ++ 0x034, 0x00089FF5, ++ 0x034, 0x00088FF2, ++ 0x034, 0x00087FEF, ++ 0x034, 0x00086FEC, ++ 0x034, 0x00085FE9, ++ 0x034, 0x00084EAA, ++ 0x034, 0x00083EA7, ++ 0x034, 0x00082C70, ++ 0x034, 0x00081C6D, ++ 0x034, 0x00080C6A, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0008A3EE, ++ 0x034, 0x000893AB, ++ 0x034, 0x00088389, ++ 0x034, 0x0008718C, ++ 0x034, 0x00086189, ++ 0x034, 0x0008506D, ++ 0x034, 0x0008406A, ++ 0x034, 0x0008302C, ++ 0x034, 0x00082029, ++ 0x034, 0x00081026, ++ 0x034, 0x00080023, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0008A3EE, ++ 0x034, 0x000893AB, ++ 0x034, 0x00088389, ++ 0x034, 0x0008718C, ++ 0x034, 0x00086189, ++ 0x034, 0x0008506D, ++ 0x034, 0x0008406A, ++ 0x034, 0x0008302C, ++ 0x034, 0x00082029, ++ 0x034, 0x00081026, ++ 0x034, 0x00080023, ++ 0xA0000000, 0x00000000, ++ 0x034, 0x0008A794, ++ 0x034, 0x00089791, ++ 0x034, 0x0008878E, ++ 0x034, 0x0008778B, ++ 0x034, 0x0008658D, ++ 0x034, 0x0008558A, ++ 0x034, 0x0008448D, ++ 0x034, 0x0008348A, ++ 0x034, 0x0008244C, ++ 0x034, 0x00081449, ++ 0x034, 0x0008042B, ++ 0xB0000000, 0x00000000, ++ 0x0EF, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0xA0000000, 0x00000000, ++ 0x0DF, 0x00000000, ++ 0xB0000000, 0x00000000, ++ 0x018, 0x0001712A, ++ 0x0EF, 0x00000040, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x035, 0x000006CC, ++ 0x035, 0x000086CC, ++ 0x035, 0x000106CC, ++ 0x035, 0x000206CC, ++ 0x035, 0x000286CC, ++ 0x035, 0x000306CC, ++ 0x035, 0x000406CC, ++ 0x035, 0x000486CC, ++ 0x035, 0x000506CC, ++ 0x035, 0x000806CC, ++ 0x035, 0x000886CC, ++ 0x035, 0x000906CC, ++ 0x035, 0x000A06CC, ++ 0x035, 0x000A86CC, ++ 0x035, 0x000B06CC, ++ 0x035, 0x000C06CC, ++ 0x035, 0x000C86CC, ++ 0x035, 0x000D06CC, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x035, 0x000006CC, ++ 0x035, 0x000086CC, ++ 0x035, 0x000106CC, ++ 0x035, 0x000206CC, ++ 0x035, 0x000286CC, ++ 0x035, 0x000306CC, ++ 0x035, 0x000406CC, ++ 0x035, 0x000486CC, ++ 0x035, 0x000506CC, ++ 0x035, 0x000806CC, ++ 0x035, 0x000886CC, ++ 0x035, 0x000906CC, ++ 0x035, 0x000A06CC, ++ 0x035, 0x000A86CC, ++ 0x035, 0x000B06CC, ++ 0x035, 0x000C06CC, ++ 0x035, 0x000C86CC, ++ 0x035, 0x000D06CC, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x035, 0x000006CC, ++ 0x035, 0x000086CC, ++ 0x035, 0x000106CC, ++ 0x035, 0x000206CC, ++ 0x035, 0x000286CC, ++ 0x035, 0x000306CC, ++ 0x035, 0x000406CC, ++ 0x035, 0x000486CC, ++ 0x035, 0x000506CC, ++ 0x035, 0x000806CC, ++ 0x035, 0x000886CC, ++ 0x035, 0x000906CC, ++ 0x035, 0x000A06CC, ++ 0x035, 0x000A86CC, ++ 0x035, 0x000B06CC, ++ 0x035, 0x000C06CC, ++ 0x035, 0x000C86CC, ++ 0x035, 0x000D06CC, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x035, 0x000006CC, ++ 0x035, 0x000086CC, ++ 0x035, 0x000106CC, ++ 0x035, 0x000206CC, ++ 0x035, 0x000286CC, ++ 0x035, 0x000306CC, ++ 0x035, 0x000406CC, ++ 0x035, 0x000486CC, ++ 0x035, 0x000506CC, ++ 0x035, 0x000806CC, ++ 0x035, 0x000886CC, ++ 0x035, 0x000906CC, ++ 0x035, 0x000A06CC, ++ 0x035, 0x000A86CC, ++ 0x035, 0x000B06CC, ++ 0x035, 0x000C06CC, ++ 0x035, 0x000C86CC, ++ 0x035, 0x000D06CC, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x035, 0x000006CC, ++ 0x035, 0x000086CC, ++ 0x035, 0x000106CC, ++ 0x035, 0x000206CC, ++ 0x035, 0x000286CC, ++ 0x035, 0x000306CC, ++ 0x035, 0x000406CC, ++ 0x035, 0x000486CC, ++ 0x035, 0x000506CC, ++ 0x035, 0x000806CC, ++ 0x035, 0x000886CC, ++ 0x035, 0x000906CC, ++ 0x035, 0x000A06CC, ++ 0x035, 0x000A86CC, ++ 0x035, 0x000B06CC, ++ 0x035, 0x000C06CC, ++ 0x035, 0x000C86CC, ++ 0x035, 0x000D06CC, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x035, 0x000006CC, ++ 0x035, 0x000086CC, ++ 0x035, 0x000106CC, ++ 0x035, 0x000206CC, ++ 0x035, 0x000286CC, ++ 0x035, 0x000306CC, ++ 0x035, 0x000406CC, ++ 0x035, 0x000486CC, ++ 0x035, 0x000506CC, ++ 0x035, 0x000806CC, ++ 0x035, 0x000886CC, ++ 0x035, 0x000906CC, ++ 0x035, 0x000A06CC, ++ 0x035, 0x000A86CC, ++ 0x035, 0x000B06CC, ++ 0x035, 0x000C06CC, ++ 0x035, 0x000C86CC, ++ 0x035, 0x000D06CC, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x035, 0x000006CC, ++ 0x035, 0x000086CC, ++ 0x035, 0x000106CC, ++ 0x035, 0x000206CC, ++ 0x035, 0x000286CC, ++ 0x035, 0x000306CC, ++ 0x035, 0x000406CC, ++ 0x035, 0x000486CC, ++ 0x035, 0x000506CC, ++ 0x035, 0x000806CC, ++ 0x035, 0x000886CC, ++ 0x035, 0x000906CC, ++ 0x035, 0x000A06CC, ++ 0x035, 0x000A86CC, ++ 0x035, 0x000B06CC, ++ 0x035, 0x000C06CC, ++ 0x035, 0x000C86CC, ++ 0x035, 0x000D06CC, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x035, 0x000006CC, ++ 0x035, 0x000086CC, ++ 0x035, 0x000106CC, ++ 0x035, 0x000206CC, ++ 0x035, 0x000286CC, ++ 0x035, 0x000306CC, ++ 0x035, 0x000406CC, ++ 0x035, 0x000486CC, ++ 0x035, 0x000506CC, ++ 0x035, 0x000806CC, ++ 0x035, 0x000886CC, ++ 0x035, 0x000906CC, ++ 0x035, 0x000A06CC, ++ 0x035, 0x000A86CC, ++ 0x035, 0x000B06CC, ++ 0x035, 0x000C06CC, ++ 0x035, 0x000C86CC, ++ 0x035, 0x000D06CC, ++ 0xA0000000, 0x00000000, ++ 0x035, 0x00000484, ++ 0x035, 0x00008484, ++ 0x035, 0x00010484, ++ 0x035, 0x00020584, ++ 0x035, 0x00028584, ++ 0x035, 0x00030584, ++ 0x035, 0x00040584, ++ 0x035, 0x00048584, ++ 0x035, 0x00050584, ++ 0x035, 0x000805FB, ++ 0x035, 0x000885FB, ++ 0x035, 0x000905FB, ++ 0x035, 0x000A05FB, ++ 0x035, 0x000A85FB, ++ 0x035, 0x000B05FB, ++ 0x035, 0x000C05FB, ++ 0x035, 0x000C85FB, ++ 0x035, 0x000D05FB, ++ 0xB0000000, 0x00000000, ++ 0x0EF, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0xA0000000, 0x00000000, ++ 0x0DF, 0x00000000, ++ 0xB0000000, 0x00000000, ++ 0x018, 0x0001712A, ++ 0x0EF, 0x00000010, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x036, 0x00000473, ++ 0x036, 0x00008473, ++ 0x036, 0x00010473, ++ 0x036, 0x00020473, ++ 0x036, 0x00028473, ++ 0x036, 0x00030473, ++ 0x036, 0x00040473, ++ 0x036, 0x00048473, ++ 0x036, 0x00050473, ++ 0x036, 0x00080473, ++ 0x036, 0x00088473, ++ 0x036, 0x00090473, ++ 0x036, 0x000A0473, ++ 0x036, 0x000A8473, ++ 0x036, 0x000B0473, ++ 0x036, 0x000C0473, ++ 0x036, 0x000C8473, ++ 0x036, 0x000D0473, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x036, 0x00000475, ++ 0x036, 0x00008475, ++ 0x036, 0x00010475, ++ 0x036, 0x00020475, ++ 0x036, 0x00028475, ++ 0x036, 0x00030475, ++ 0x036, 0x00040475, ++ 0x036, 0x00048475, ++ 0x036, 0x00050475, ++ 0x036, 0x00080475, ++ 0x036, 0x00088475, ++ 0x036, 0x00090475, ++ 0x036, 0x000A0475, ++ 0x036, 0x000A8475, ++ 0x036, 0x000B0475, ++ 0x036, 0x000C0475, ++ 0x036, 0x000C8475, ++ 0x036, 0x000D0475, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x036, 0x00000475, ++ 0x036, 0x00008475, ++ 0x036, 0x00010475, ++ 0x036, 0x00020475, ++ 0x036, 0x00028475, ++ 0x036, 0x00030475, ++ 0x036, 0x00040475, ++ 0x036, 0x00048475, ++ 0x036, 0x00050475, ++ 0x036, 0x00080475, ++ 0x036, 0x00088475, ++ 0x036, 0x00090475, ++ 0x036, 0x000A0475, ++ 0x036, 0x000A8475, ++ 0x036, 0x000B0475, ++ 0x036, 0x000C0475, ++ 0x036, 0x000C8475, ++ 0x036, 0x000D0475, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x036, 0x00000475, ++ 0x036, 0x00008475, ++ 0x036, 0x00010475, ++ 0x036, 0x00020475, ++ 0x036, 0x00028475, ++ 0x036, 0x00030475, ++ 0x036, 0x00040475, ++ 0x036, 0x00048475, ++ 0x036, 0x00050475, ++ 0x036, 0x00080475, ++ 0x036, 0x00088475, ++ 0x036, 0x00090475, ++ 0x036, 0x000A0475, ++ 0x036, 0x000A8475, ++ 0x036, 0x000B0475, ++ 0x036, 0x000C0475, ++ 0x036, 0x000C8475, ++ 0x036, 0x000D0475, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x036, 0x00000475, ++ 0x036, 0x00008475, ++ 0x036, 0x00010475, ++ 0x036, 0x00020475, ++ 0x036, 0x00028475, ++ 0x036, 0x00030475, ++ 0x036, 0x00040475, ++ 0x036, 0x00048475, ++ 0x036, 0x00050475, ++ 0x036, 0x00080475, ++ 0x036, 0x00088475, ++ 0x036, 0x00090475, ++ 0x036, 0x000A0475, ++ 0x036, 0x000A8475, ++ 0x036, 0x000B0475, ++ 0x036, 0x000C0475, ++ 0x036, 0x000C8475, ++ 0x036, 0x000D0475, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x036, 0x00000475, ++ 0x036, 0x00008475, ++ 0x036, 0x00010475, ++ 0x036, 0x00020475, ++ 0x036, 0x00028475, ++ 0x036, 0x00030475, ++ 0x036, 0x00040475, ++ 0x036, 0x00048475, ++ 0x036, 0x00050475, ++ 0x036, 0x00080475, ++ 0x036, 0x00088475, ++ 0x036, 0x00090475, ++ 0x036, 0x000A0475, ++ 0x036, 0x000A8475, ++ 0x036, 0x000B0475, ++ 0x036, 0x000C0475, ++ 0x036, 0x000C8475, ++ 0x036, 0x000D0475, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x036, 0x00000475, ++ 0x036, 0x00008475, ++ 0x036, 0x00010475, ++ 0x036, 0x00020475, ++ 0x036, 0x00028475, ++ 0x036, 0x00030475, ++ 0x036, 0x00040475, ++ 0x036, 0x00048475, ++ 0x036, 0x00050475, ++ 0x036, 0x00080475, ++ 0x036, 0x00088475, ++ 0x036, 0x00090475, ++ 0x036, 0x000A0475, ++ 0x036, 0x000A8475, ++ 0x036, 0x000B0475, ++ 0x036, 0x000C0475, ++ 0x036, 0x000C8475, ++ 0x036, 0x000D0475, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x036, 0x00000475, ++ 0x036, 0x00008475, ++ 0x036, 0x00010475, ++ 0x036, 0x00020475, ++ 0x036, 0x00028475, ++ 0x036, 0x00030475, ++ 0x036, 0x00040475, ++ 0x036, 0x00048475, ++ 0x036, 0x00050475, ++ 0x036, 0x00080475, ++ 0x036, 0x00088475, ++ 0x036, 0x00090475, ++ 0x036, 0x000A0475, ++ 0x036, 0x000A8475, ++ 0x036, 0x000B0475, ++ 0x036, 0x000C0475, ++ 0x036, 0x000C8475, ++ 0x036, 0x000D0475, ++ 0xA0000000, 0x00000000, ++ 0x036, 0x00000474, ++ 0x036, 0x00008474, ++ 0x036, 0x00010474, ++ 0x036, 0x00020474, ++ 0x036, 0x00028474, ++ 0x036, 0x00030474, ++ 0x036, 0x00040474, ++ 0x036, 0x00048474, ++ 0x036, 0x00050474, ++ 0x036, 0x00080474, ++ 0x036, 0x00088474, ++ 0x036, 0x00090474, ++ 0x036, 0x000A0474, ++ 0x036, 0x000A8474, ++ 0x036, 0x000B0474, ++ 0x036, 0x000C0474, ++ 0x036, 0x000C8474, ++ 0x036, 0x000D0474, ++ 0xB0000000, 0x00000000, ++ 0x0EF, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0xA0000000, 0x00000000, ++ 0x0EF, 0x00000004, ++ 0x037, 0x00000000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00004000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00008000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00010000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00014000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00018000, ++ 0x038, 0x0000514E, ++ 0x037, 0x0001C000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00020000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00024000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00028000, ++ 0x038, 0x0000514E, ++ 0x037, 0x0002C000, ++ 0x038, 0x0000714E, ++ 0x037, 0x00030000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00034000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00038000, ++ 0x038, 0x0000514E, ++ 0x037, 0x0003C000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00040000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00044000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00048000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00080000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x00084000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x00088000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x00090000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x00094000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x00098000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x0009C000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000A0000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000A4000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000A8000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000AC000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000B0000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000B4000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000B8000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000BC000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000C0000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000C4000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000C8000, ++ 0x038, 0x00005ECE, ++ 0x0EF, 0x00000000, ++ 0xB0000000, 0x00000000, ++ 0x0EF, 0x00000008, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0xA0000000, 0x00000000, ++ 0x03C, 0x0000007D, ++ 0x03C, 0x0000047D, ++ 0x03C, 0x0000087D, ++ 0x03C, 0x0000107D, ++ 0x03C, 0x0000147D, ++ 0x03C, 0x0000187D, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x0000027D, ++ 0x03C, 0x00000541, ++ 0x03C, 0x00000821, ++ 0x03C, 0x0000127D, ++ 0x03C, 0x00001541, ++ 0x03C, 0x00001821, ++ 0x03C, 0x0000227D, ++ 0x03C, 0x00002541, ++ 0x03C, 0x00002821, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x0000027D, ++ 0x03C, 0x00000546, ++ 0x03C, 0x00000821, ++ 0x03C, 0x0000127D, ++ 0x03C, 0x00001546, ++ 0x03C, 0x00001821, ++ 0x03C, 0x0000227D, ++ 0x03C, 0x00002546, ++ 0x03C, 0x00002821, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x0000027D, ++ 0x03C, 0x00000546, ++ 0x03C, 0x00000821, ++ 0x03C, 0x0000127D, ++ 0x03C, 0x00001546, ++ 0x03C, 0x00001821, ++ 0x03C, 0x0000227D, ++ 0x03C, 0x00002546, ++ 0x03C, 0x00002821, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x0000027D, ++ 0x03C, 0x00000546, ++ 0x03C, 0x00000821, ++ 0x03C, 0x0000127D, ++ 0x03C, 0x00001546, ++ 0x03C, 0x00001821, ++ 0x03C, 0x0000227D, ++ 0x03C, 0x00002546, ++ 0x03C, 0x00002821, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x0000027D, ++ 0x03C, 0x00000546, ++ 0x03C, 0x00000821, ++ 0x03C, 0x0000127D, ++ 0x03C, 0x00001546, ++ 0x03C, 0x00001821, ++ 0x03C, 0x0000227D, ++ 0x03C, 0x00002546, ++ 0x03C, 0x00002821, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x0000027D, ++ 0x03C, 0x00000546, ++ 0x03C, 0x00000821, ++ 0x03C, 0x0000127D, ++ 0x03C, 0x00001546, ++ 0x03C, 0x00001821, ++ 0x03C, 0x0000227D, ++ 0x03C, 0x00002546, ++ 0x03C, 0x00002821, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x0000027D, ++ 0x03C, 0x00000546, ++ 0x03C, 0x00000821, ++ 0x03C, 0x0000127D, ++ 0x03C, 0x00001546, ++ 0x03C, 0x00001821, ++ 0x03C, 0x0000227D, ++ 0x03C, 0x00002546, ++ 0x03C, 0x00002821, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x0000027D, ++ 0x03C, 0x00000546, ++ 0x03C, 0x00000821, ++ 0x03C, 0x0000127D, ++ 0x03C, 0x00001546, ++ 0x03C, 0x00001821, ++ 0x03C, 0x0000227D, ++ 0x03C, 0x00002546, ++ 0x03C, 0x00002821, ++ 0xA0000000, 0x00000000, ++ 0x03C, 0x0000037E, ++ 0x03C, 0x00000575, ++ 0x03C, 0x00000971, ++ 0x03C, 0x0000127E, ++ 0x03C, 0x00001575, ++ 0x03C, 0x00001871, ++ 0x03C, 0x0000217E, ++ 0x03C, 0x00002575, ++ 0x03C, 0x00002871, ++ 0xB0000000, 0x00000000, ++ 0x0EF, 0x00000000, ++ 0x061, 0x000C0D47, ++ 0x062, 0x0000133C, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x063, 0x000750E7, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x063, 0x000750E7, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x063, 0x000750E7, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x063, 0x000750E7, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x063, 0x000750E7, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x063, 0x000750E7, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x063, 0x000750E7, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x063, 0x000750E7, ++ 0xA0000000, 0x00000000, ++ 0x063, 0x0007D0E7, ++ 0xB0000000, 0x00000000, ++ 0x064, 0x00014FEC, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x065, 0x000920D0, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x065, 0x000920D0, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x065, 0x000920D0, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x065, 0x000920D0, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x065, 0x000920D0, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x065, 0x000920D0, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x065, 0x000920D0, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x065, 0x000920D0, ++ 0xA0000000, 0x00000000, ++ 0x065, 0x000923FF, ++ 0xB0000000, 0x00000000, ++ 0x066, 0x00000040, ++ 0x057, 0x00050000, ++ 0x056, 0x00051DF0, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0xA0000000, 0x00000000, ++ 0x055, 0x00082060, ++ 0xB0000000, 0x00000000, ++}; ++ ++RTW_DECL_TABLE_RF_RADIO(rtw8814a_rf_c, C); diff --git a/package/kernel/mac80211/patches/rtl/087-v6.15-wifi-rtw88-Add-rtw8814a_table.c-part-2-2.patch b/package/kernel/mac80211/patches/rtl/087-v6.15-wifi-rtw88-Add-rtw8814a_table.c-part-2-2.patch new file mode 100644 index 00000000000..56402a4ad36 --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/087-v6.15-wifi-rtw88-Add-rtw8814a_table.c-part-2-2.patch @@ -0,0 +1,11450 @@ +From e38246889cc9f8497c8d7413b73856ae1634322d Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Fri, 7 Mar 2025 02:24:02 +0200 +Subject: [PATCH] wifi: rtw88: Add rtw8814a_table.c (part 2/2) + +This contains various tables for initialising the RTL8814A, plus TX +power limits. + +Also add rtw8814a_table.h. + +Split into two patches because they are big. + +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/4c48e35e-1b04-42ed-940e-0e931693def6@gmail.com +--- + .../wireless/realtek/rtw88/rtw8814a_table.c | 11379 ++++++++++++++++ + .../wireless/realtek/rtw88/rtw8814a_table.h | 40 + + 2 files changed, 11419 insertions(+) + create mode 100644 drivers/net/wireless/realtek/rtw88/rtw8814a_table.h + +--- a/drivers/net/wireless/realtek/rtw88/rtw8814a_table.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8814a_table.c +@@ -12549,3 +12549,11382 @@ static const u32 rtw8814a_rf_c[] = { + }; + + RTW_DECL_TABLE_RF_RADIO(rtw8814a_rf_c, C); ++ ++static const u32 rtw8814a_rf_d[] = { ++ 0x018, 0x00013124, ++ 0x040, 0x00000C00, ++ 0x058, 0x00000F98, ++ 0x07F, 0x00068004, ++ 0x018, 0x00000006, ++ 0x80000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x086, 0x000E335A, ++ 0x087, 0x00079F80, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x086, 0x000E335A, ++ 0x087, 0x00079F80, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x086, 0x000E335A, ++ 0x087, 0x00079F80, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x086, 0x000E335A, ++ 0x087, 0x00079F80, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x086, 0x000E335A, ++ 0x087, 0x00079F80, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x086, 0x000E335A, ++ 0x087, 0x00079F80, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x086, 0x000E335A, ++ 0x087, 0x00079F80, ++ 0xA0000000, 0x00000000, ++ 0x086, 0x000E4B58, ++ 0x087, 0x00049F80, ++ 0xB0000000, 0x00000000, ++ 0x0DF, 0x00000008, ++ 0x0EF, 0x00002000, ++ 0x80000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x03B, 0x0003F19B, ++ 0x03B, 0x00037A5B, ++ 0x03B, 0x0002A433, ++ 0x03B, 0x00027BD3, ++ 0x03B, 0x0001F80B, ++ 0x03B, 0x00017803, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x03B, 0x0003F09B, ++ 0x03B, 0x00037A5B, ++ 0x03B, 0x0002A433, ++ 0x03B, 0x00027BD3, ++ 0x03B, 0x0001F80B, ++ 0x03B, 0x00017803, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x03B, 0x0003F19B, ++ 0x03B, 0x00037A5B, ++ 0x03B, 0x0002A433, ++ 0x03B, 0x00027BD3, ++ 0x03B, 0x0001F80B, ++ 0x03B, 0x00017803, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x03B, 0x0003F09B, ++ 0x03B, 0x00037A5B, ++ 0x03B, 0x0002A433, ++ 0x03B, 0x00027BD3, ++ 0x03B, 0x0001F80B, ++ 0x03B, 0x00017803, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03B, 0x0003F19B, ++ 0x03B, 0x00037A5B, ++ 0x03B, 0x0002A433, ++ 0x03B, 0x00027BD3, ++ 0x03B, 0x0001F80B, ++ 0x03B, 0x00017803, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x03B, 0x0003F19B, ++ 0x03B, 0x00037A5B, ++ 0x03B, 0x0002A433, ++ 0x03B, 0x00027BD3, ++ 0x03B, 0x0001F80B, ++ 0x03B, 0x00017803, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x03B, 0x0003F19B, ++ 0x03B, 0x00037A5B, ++ 0x03B, 0x0002A433, ++ 0x03B, 0x00027BD3, ++ 0x03B, 0x0001F80B, ++ 0x03B, 0x00017803, ++ 0xA0000000, 0x00000000, ++ 0x03B, 0x0003F258, ++ 0x03B, 0x00030A58, ++ 0x03B, 0x0002FA58, ++ 0x03B, 0x00022590, ++ 0x03B, 0x0001FA50, ++ 0x03B, 0x00010248, ++ 0x03B, 0x00008240, ++ 0xB0000000, 0x00000000, ++ 0x0EF, 0x00000100, ++ 0x80000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0xA0000000, 0x00000000, ++ 0x034, 0x0000ADF6, ++ 0x034, 0x00009DF3, ++ 0x034, 0x00008DF0, ++ 0x034, 0x00007DED, ++ 0x034, 0x00006DEA, ++ 0x034, 0x00005CED, ++ 0x034, 0x00004CEA, ++ 0x034, 0x000034EA, ++ 0x034, 0x000024E7, ++ 0x034, 0x0000146A, ++ 0x034, 0x0000006B, ++ 0xB0000000, 0x00000000, ++ 0x80000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A0D0, ++ 0x034, 0x000090CD, ++ 0x034, 0x000080CA, ++ 0x034, 0x0000704D, ++ 0x034, 0x0000604A, ++ 0x034, 0x00005047, ++ 0x034, 0x0000400A, ++ 0x034, 0x00003007, ++ 0x034, 0x00002004, ++ 0x034, 0x00001001, ++ 0x034, 0x00000001, ++ 0xA0000000, 0x00000000, ++ 0x034, 0x0008ADF6, ++ 0x034, 0x00089DF3, ++ 0x034, 0x00088DF0, ++ 0x034, 0x00087DED, ++ 0x034, 0x00086DEA, ++ 0x034, 0x00085CED, ++ 0x034, 0x00084CEA, ++ 0x034, 0x000834EA, ++ 0x034, 0x000824E7, ++ 0x034, 0x0008146A, ++ 0x034, 0x0008006B, ++ 0xB0000000, 0x00000000, ++ 0x0EF, 0x00000000, ++ 0x0EF, 0x000020A2, ++ 0x0DF, 0x00000080, ++ 0x035, 0x00000192, ++ 0x035, 0x00008192, ++ 0x035, 0x00010192, ++ 0x036, 0x00000024, ++ 0x036, 0x00008024, ++ 0x036, 0x00010024, ++ 0x036, 0x00018024, ++ 0x0EF, 0x00000000, ++ 0x051, 0x00000C21, ++ 0x052, 0x000006D9, ++ 0x053, 0x000FC649, ++ 0x054, 0x0000017E, ++ 0x018, 0x0001012A, ++ 0x081, 0x0007FC00, ++ 0x089, 0x00050110, ++ 0x08A, 0x00043E50, ++ 0x08B, 0x0002E180, ++ 0x08C, 0x00093C3C, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x085, 0x000F8000, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x085, 0x000F8000, ++ 0xA0000000, 0x00000000, ++ 0x085, 0x000F8000, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x08D, 0x000FFFF0, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x08D, 0x000FFFF0, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x08D, 0x000FFFF0, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x08D, 0x000FFFF0, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x08D, 0x000FFFF0, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x08D, 0x000FFFF0, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x08D, 0x000FFFF0, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x08D, 0x000FFFF0, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x08D, 0x000FFFF0, ++ 0xA0000000, 0x00000000, ++ 0x08D, 0x000FFFF0, ++ 0xB0000000, 0x00000000, ++ 0x0EF, 0x00001000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00038023, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00038023, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00038023, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00038023, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00038023, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00038023, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00038023, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00038023, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00038023, ++ 0xA0000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00038023, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00044000, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00048000, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00088000, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00044000, ++ 0x90000007, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00088000, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00040000, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00088000, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00088000, ++ 0xA0000000, 0x00000000, ++ 0x03C, 0x00048000, ++ 0xB0000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00030023, ++ 0x03C, 0x00048000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00028623, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00021633, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x0001C633, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00010293, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00009593, ++ 0x03C, 0x00000000, ++ 0x03A, 0x00000148, ++ 0x80000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03B, 0x00000F8B, ++ 0xA0000000, 0x00000000, ++ 0x03B, 0x0000078B, ++ 0xB0000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0xA0000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00078023, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00020000, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00020000, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00044000, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00020000, ++ 0x90000007, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00020000, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00044000, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00044000, ++ 0xA0000000, 0x00000000, ++ 0x03C, 0x00024000, ++ 0xB0000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00070023, ++ 0x03C, 0x00048000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00068623, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00061633, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x0005C633, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00050293, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00049593, ++ 0x03C, 0x00000000, ++ 0x03A, 0x00000148, ++ 0x80000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03B, 0x00040F8B, ++ 0xA0000000, 0x00000000, ++ 0x03B, 0x0004078B, ++ 0xB0000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0xA0000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B8023, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00004000, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00060000, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00024000, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00004000, ++ 0x90000007, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00060000, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00020000, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00024000, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00024000, ++ 0xA0000000, 0x00000000, ++ 0x03C, 0x00004000, ++ 0xB0000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000B0023, ++ 0x80000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00020000, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00020000, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00020000, ++ 0xA0000000, 0x00000000, ++ 0x03C, 0x00020000, ++ 0xB0000000, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000A8623, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x000A1633, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x0009C633, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00090293, ++ 0x03C, 0x00000000, ++ 0x03A, 0x0000013C, ++ 0x03B, 0x00089593, ++ 0x03C, 0x00000000, ++ 0x03A, 0x00000148, ++ 0x80000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03B, 0x0008138B, ++ 0xA0000000, 0x00000000, ++ 0x03B, 0x0008078B, ++ 0xB0000000, 0x00000000, ++ 0x03C, 0x00000000, ++ 0x0EF, 0x00000000, ++ 0x0EF, 0x00000800, ++ 0x03B, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000803, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000803, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000803, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000803, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000803, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000803, ++ 0x90000007, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00001003, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00001003, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00001803, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000803, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000803, ++ 0xA0000000, 0x00000000, ++ 0x03A, 0x00000803, ++ 0xB0000000, 0x00000000, ++ 0x03B, 0x00040000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00001000, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00001002, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000000, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00001000, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000001, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00001000, ++ 0x90000007, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000000, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000802, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00001803, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00001000, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00001000, ++ 0xA0000000, 0x00000000, ++ 0x03A, 0x00001000, ++ 0xB0000000, 0x00000000, ++ 0x03B, 0x00080000, ++ 0x80000007, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00001802, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00001000, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x03A, 0x00000802, ++ 0xA0000000, 0x00000000, ++ 0x03A, 0x00001002, ++ 0xB0000000, 0x00000000, ++ 0x0EF, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000006, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0xA0000000, 0x00000000, ++ 0xB0000000, 0x00000000, ++ 0x018, 0x00013124, ++ 0x0EF, 0x00000100, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0004A3EB, ++ 0x034, 0x0004938B, ++ 0x034, 0x000481AC, ++ 0x034, 0x000471A9, ++ 0x034, 0x000460AC, ++ 0x034, 0x000450A9, ++ 0x034, 0x0004402E, ++ 0x034, 0x0004302B, ++ 0x034, 0x00042028, ++ 0x034, 0x0004100B, ++ 0x034, 0x00040008, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0004A3AD, ++ 0x034, 0x0004938A, ++ 0x034, 0x0004818C, ++ 0x034, 0x00047189, ++ 0x034, 0x0004606D, ++ 0x034, 0x0004506A, ++ 0x034, 0x0004402C, ++ 0x034, 0x00043029, ++ 0x034, 0x00042026, ++ 0x034, 0x00041009, ++ 0x034, 0x00040006, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0004A3AD, ++ 0x034, 0x0004938A, ++ 0x034, 0x0004818C, ++ 0x034, 0x00047189, ++ 0x034, 0x0004606D, ++ 0x034, 0x0004506A, ++ 0x034, 0x0004402C, ++ 0x034, 0x00043029, ++ 0x034, 0x00042026, ++ 0x034, 0x00041009, ++ 0x034, 0x00040006, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0004A3AD, ++ 0x034, 0x0004938A, ++ 0x034, 0x0004818C, ++ 0x034, 0x00047189, ++ 0x034, 0x0004606D, ++ 0x034, 0x0004506A, ++ 0x034, 0x0004402C, ++ 0x034, 0x00043029, ++ 0x034, 0x00042026, ++ 0x034, 0x00041009, ++ 0x034, 0x00040006, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0004A3AD, ++ 0x034, 0x0004938A, ++ 0x034, 0x0004818C, ++ 0x034, 0x00047189, ++ 0x034, 0x0004606D, ++ 0x034, 0x0004506A, ++ 0x034, 0x0004402C, ++ 0x034, 0x00043029, ++ 0x034, 0x00042026, ++ 0x034, 0x00041009, ++ 0x034, 0x00040006, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0004A3F4, ++ 0x034, 0x000493D2, ++ 0x034, 0x000482D1, ++ 0x034, 0x000471F1, ++ 0x034, 0x000461EE, ++ 0x034, 0x000451EB, ++ 0x034, 0x000441E8, ++ 0x034, 0x0004314B, ++ 0x034, 0x00042148, ++ 0x034, 0x0004104B, ++ 0x034, 0x00040048, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0004AFF7, ++ 0x034, 0x00049FF6, ++ 0x034, 0x00048FF3, ++ 0x034, 0x00047FF0, ++ 0x034, 0x00046FED, ++ 0x034, 0x00045FEA, ++ 0x034, 0x00044FE7, ++ 0x034, 0x00043CB1, ++ 0x034, 0x00042CAE, ++ 0x034, 0x00041CAB, ++ 0x034, 0x00040CA8, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0004A3AD, ++ 0x034, 0x0004938A, ++ 0x034, 0x0004818C, ++ 0x034, 0x00047189, ++ 0x034, 0x0004606D, ++ 0x034, 0x0004506A, ++ 0x034, 0x0004402C, ++ 0x034, 0x00043029, ++ 0x034, 0x00042026, ++ 0x034, 0x00041009, ++ 0x034, 0x00040006, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0004A3AD, ++ 0x034, 0x0004938A, ++ 0x034, 0x0004818C, ++ 0x034, 0x00047189, ++ 0x034, 0x0004606D, ++ 0x034, 0x0004506A, ++ 0x034, 0x0004402C, ++ 0x034, 0x00043029, ++ 0x034, 0x00042026, ++ 0x034, 0x00041009, ++ 0x034, 0x00040006, ++ 0xA0000000, 0x00000000, ++ 0x034, 0x0004AFF4, ++ 0x034, 0x00049FF1, ++ 0x034, 0x00048FEE, ++ 0x034, 0x00047FEB, ++ 0x034, 0x00046FE8, ++ 0x034, 0x00045DEA, ++ 0x034, 0x00044CED, ++ 0x034, 0x00043CEA, ++ 0x034, 0x00042C6C, ++ 0x034, 0x00041C69, ++ 0x034, 0x00040C2B, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0002A3EE, ++ 0x034, 0x000293EB, ++ 0x034, 0x0002838B, ++ 0x034, 0x000271AC, ++ 0x034, 0x000261A9, ++ 0x034, 0x000250AC, ++ 0x034, 0x000240A9, ++ 0x034, 0x000230A6, ++ 0x034, 0x0002202C, ++ 0x034, 0x00021029, ++ 0x034, 0x00020026, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0002A3AD, ++ 0x034, 0x0002938A, ++ 0x034, 0x0002818C, ++ 0x034, 0x00027189, ++ 0x034, 0x0002606D, ++ 0x034, 0x0002504C, ++ 0x034, 0x0002402C, ++ 0x034, 0x00023029, ++ 0x034, 0x00022026, ++ 0x034, 0x00021023, ++ 0x034, 0x00020006, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0002A3AD, ++ 0x034, 0x0002938A, ++ 0x034, 0x0002818C, ++ 0x034, 0x00027189, ++ 0x034, 0x0002606D, ++ 0x034, 0x0002504C, ++ 0x034, 0x0002402C, ++ 0x034, 0x00023029, ++ 0x034, 0x00022026, ++ 0x034, 0x00021023, ++ 0x034, 0x00020006, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0002A3AD, ++ 0x034, 0x0002938A, ++ 0x034, 0x0002818C, ++ 0x034, 0x00027189, ++ 0x034, 0x0002606D, ++ 0x034, 0x0002504C, ++ 0x034, 0x0002402C, ++ 0x034, 0x00023029, ++ 0x034, 0x00022026, ++ 0x034, 0x00021023, ++ 0x034, 0x00020006, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0002A3AD, ++ 0x034, 0x0002938A, ++ 0x034, 0x0002818C, ++ 0x034, 0x00027189, ++ 0x034, 0x0002606D, ++ 0x034, 0x0002504C, ++ 0x034, 0x0002402C, ++ 0x034, 0x00023029, ++ 0x034, 0x00022026, ++ 0x034, 0x00021023, ++ 0x034, 0x00020006, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0002A3F5, ++ 0x034, 0x000293D2, ++ 0x034, 0x000283CE, ++ 0x034, 0x00027290, ++ 0x034, 0x0002628D, ++ 0x034, 0x0002528A, ++ 0x034, 0x00024287, ++ 0x034, 0x0002308D, ++ 0x034, 0x0002208A, ++ 0x034, 0x00021087, ++ 0x034, 0x00020048, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0002AFF7, ++ 0x034, 0x00029FF6, ++ 0x034, 0x00028FF3, ++ 0x034, 0x00027FF0, ++ 0x034, 0x00026FED, ++ 0x034, 0x00025FEA, ++ 0x034, 0x00024FE7, ++ 0x034, 0x00023DEA, ++ 0x034, 0x00022DE7, ++ 0x034, 0x00021DE4, ++ 0x034, 0x00020D48, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0002A3AD, ++ 0x034, 0x0002938A, ++ 0x034, 0x0002818C, ++ 0x034, 0x00027189, ++ 0x034, 0x0002606D, ++ 0x034, 0x0002504C, ++ 0x034, 0x0002402C, ++ 0x034, 0x00023029, ++ 0x034, 0x00022026, ++ 0x034, 0x00021023, ++ 0x034, 0x00020006, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0002A3AD, ++ 0x034, 0x0002938A, ++ 0x034, 0x0002818C, ++ 0x034, 0x00027189, ++ 0x034, 0x0002606D, ++ 0x034, 0x0002504C, ++ 0x034, 0x0002402C, ++ 0x034, 0x00023029, ++ 0x034, 0x00022026, ++ 0x034, 0x00021023, ++ 0x034, 0x00020006, ++ 0xA0000000, 0x00000000, ++ 0x034, 0x0002AFF4, ++ 0x034, 0x00029FF1, ++ 0x034, 0x00028FEE, ++ 0x034, 0x00027FEB, ++ 0x034, 0x00026FE8, ++ 0x034, 0x00025DEA, ++ 0x034, 0x00024CED, ++ 0x034, 0x00023CEA, ++ 0x034, 0x00022C6C, ++ 0x034, 0x00021C69, ++ 0x034, 0x00020C2B, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A3EF, ++ 0x034, 0x000093EC, ++ 0x034, 0x0000838C, ++ 0x034, 0x000071AD, ++ 0x034, 0x000061AA, ++ 0x034, 0x000050AD, ++ 0x034, 0x000040AA, ++ 0x034, 0x0000306A, ++ 0x034, 0x0000202D, ++ 0x034, 0x0000102A, ++ 0x034, 0x00000027, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A3EE, ++ 0x034, 0x000093AC, ++ 0x034, 0x0000838A, ++ 0x034, 0x0000718C, ++ 0x034, 0x00006189, ++ 0x034, 0x0000506D, ++ 0x034, 0x0000406A, ++ 0x034, 0x0000302C, ++ 0x034, 0x00002029, ++ 0x034, 0x00001026, ++ 0x034, 0x00000023, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A3EE, ++ 0x034, 0x000093AC, ++ 0x034, 0x0000838A, ++ 0x034, 0x0000718C, ++ 0x034, 0x00006189, ++ 0x034, 0x0000506D, ++ 0x034, 0x0000406A, ++ 0x034, 0x0000302C, ++ 0x034, 0x00002029, ++ 0x034, 0x00001026, ++ 0x034, 0x00000023, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A3EE, ++ 0x034, 0x000093AC, ++ 0x034, 0x0000838A, ++ 0x034, 0x0000718C, ++ 0x034, 0x00006189, ++ 0x034, 0x0000506D, ++ 0x034, 0x0000406A, ++ 0x034, 0x0000302C, ++ 0x034, 0x00002029, ++ 0x034, 0x00001026, ++ 0x034, 0x00000023, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A3EE, ++ 0x034, 0x000093AC, ++ 0x034, 0x0000838A, ++ 0x034, 0x0000718C, ++ 0x034, 0x00006189, ++ 0x034, 0x0000506D, ++ 0x034, 0x0000406A, ++ 0x034, 0x0000302C, ++ 0x034, 0x00002029, ++ 0x034, 0x00001026, ++ 0x034, 0x00000023, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A3F1, ++ 0x034, 0x000092B1, ++ 0x034, 0x000081CF, ++ 0x034, 0x00007170, ++ 0x034, 0x0000616D, ++ 0x034, 0x0000516A, ++ 0x034, 0x00004167, ++ 0x034, 0x0000302F, ++ 0x034, 0x0000202C, ++ 0x034, 0x00001029, ++ 0x034, 0x00000026, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000AFF7, ++ 0x034, 0x00009FF6, ++ 0x034, 0x00008FF3, ++ 0x034, 0x00007FF0, ++ 0x034, 0x00006FED, ++ 0x034, 0x00005FEA, ++ 0x034, 0x00004FE7, ++ 0x034, 0x00003EC7, ++ 0x034, 0x00002EC4, ++ 0x034, 0x00001D4B, ++ 0x034, 0x00000D48, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A3EE, ++ 0x034, 0x000093AC, ++ 0x034, 0x0000838A, ++ 0x034, 0x0000718C, ++ 0x034, 0x00006189, ++ 0x034, 0x0000506D, ++ 0x034, 0x0000406A, ++ 0x034, 0x0000302C, ++ 0x034, 0x00002029, ++ 0x034, 0x00001026, ++ 0x034, 0x00000023, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0000A3EE, ++ 0x034, 0x000093AC, ++ 0x034, 0x0000838A, ++ 0x034, 0x0000718C, ++ 0x034, 0x00006189, ++ 0x034, 0x0000506D, ++ 0x034, 0x0000406A, ++ 0x034, 0x0000302C, ++ 0x034, 0x00002029, ++ 0x034, 0x00001026, ++ 0x034, 0x00000023, ++ 0xA0000000, 0x00000000, ++ 0x034, 0x0000AFF4, ++ 0x034, 0x00009FF1, ++ 0x034, 0x00008FEE, ++ 0x034, 0x00007FEB, ++ 0x034, 0x00006FE8, ++ 0x034, 0x00005DEA, ++ 0x034, 0x00004CED, ++ 0x034, 0x00003CEA, ++ 0x034, 0x00002C6C, ++ 0x034, 0x00001C69, ++ 0x034, 0x00000C2B, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000CA3EB, ++ 0x034, 0x000C938B, ++ 0x034, 0x000C81AC, ++ 0x034, 0x000C71A9, ++ 0x034, 0x000C60AC, ++ 0x034, 0x000C50A9, ++ 0x034, 0x000C402E, ++ 0x034, 0x000C302B, ++ 0x034, 0x000C2028, ++ 0x034, 0x000C100B, ++ 0x034, 0x000C0008, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000CA3AD, ++ 0x034, 0x000C938A, ++ 0x034, 0x000C818C, ++ 0x034, 0x000C7189, ++ 0x034, 0x000C606D, ++ 0x034, 0x000C506A, ++ 0x034, 0x000C402C, ++ 0x034, 0x000C3029, ++ 0x034, 0x000C2026, ++ 0x034, 0x000C1009, ++ 0x034, 0x000C0006, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000CA3AD, ++ 0x034, 0x000C938A, ++ 0x034, 0x000C818C, ++ 0x034, 0x000C7189, ++ 0x034, 0x000C606D, ++ 0x034, 0x000C506A, ++ 0x034, 0x000C402C, ++ 0x034, 0x000C3029, ++ 0x034, 0x000C2026, ++ 0x034, 0x000C1009, ++ 0x034, 0x000C0006, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000CA3AD, ++ 0x034, 0x000C938A, ++ 0x034, 0x000C818C, ++ 0x034, 0x000C7189, ++ 0x034, 0x000C606D, ++ 0x034, 0x000C506A, ++ 0x034, 0x000C402C, ++ 0x034, 0x000C3029, ++ 0x034, 0x000C2026, ++ 0x034, 0x000C1009, ++ 0x034, 0x000C0006, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000CA3AD, ++ 0x034, 0x000C938A, ++ 0x034, 0x000C818C, ++ 0x034, 0x000C7189, ++ 0x034, 0x000C606D, ++ 0x034, 0x000C506A, ++ 0x034, 0x000C402C, ++ 0x034, 0x000C3029, ++ 0x034, 0x000C2026, ++ 0x034, 0x000C1009, ++ 0x034, 0x000C0006, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000CA3F4, ++ 0x034, 0x000C93D2, ++ 0x034, 0x000C82D1, ++ 0x034, 0x000C71F1, ++ 0x034, 0x000C61EE, ++ 0x034, 0x000C51EB, ++ 0x034, 0x000C41E8, ++ 0x034, 0x000C314B, ++ 0x034, 0x000C2148, ++ 0x034, 0x000C104B, ++ 0x034, 0x000C0048, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000CAFF7, ++ 0x034, 0x000C9FF6, ++ 0x034, 0x000C8FF3, ++ 0x034, 0x000C7FF0, ++ 0x034, 0x000C6FED, ++ 0x034, 0x000C5FEA, ++ 0x034, 0x000C4FE7, ++ 0x034, 0x000C3CB1, ++ 0x034, 0x000C2CAE, ++ 0x034, 0x000C1CAB, ++ 0x034, 0x000C0CA8, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000CA3AD, ++ 0x034, 0x000C938A, ++ 0x034, 0x000C818C, ++ 0x034, 0x000C7189, ++ 0x034, 0x000C606D, ++ 0x034, 0x000C506A, ++ 0x034, 0x000C402C, ++ 0x034, 0x000C3029, ++ 0x034, 0x000C2026, ++ 0x034, 0x000C1009, ++ 0x034, 0x000C0006, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000CA3AD, ++ 0x034, 0x000C938A, ++ 0x034, 0x000C818C, ++ 0x034, 0x000C7189, ++ 0x034, 0x000C606D, ++ 0x034, 0x000C506A, ++ 0x034, 0x000C402C, ++ 0x034, 0x000C3029, ++ 0x034, 0x000C2026, ++ 0x034, 0x000C1009, ++ 0x034, 0x000C0006, ++ 0xA0000000, 0x00000000, ++ 0x034, 0x000CA794, ++ 0x034, 0x000C9791, ++ 0x034, 0x000C878E, ++ 0x034, 0x000C778B, ++ 0x034, 0x000C658D, ++ 0x034, 0x000C558A, ++ 0x034, 0x000C448D, ++ 0x034, 0x000C348A, ++ 0x034, 0x000C244C, ++ 0x034, 0x000C1449, ++ 0x034, 0x000C042B, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000AA3EE, ++ 0x034, 0x000A93EB, ++ 0x034, 0x000A838B, ++ 0x034, 0x000A71AC, ++ 0x034, 0x000A61A9, ++ 0x034, 0x000A50AC, ++ 0x034, 0x000A40A9, ++ 0x034, 0x000A30A6, ++ 0x034, 0x000A202C, ++ 0x034, 0x000A1029, ++ 0x034, 0x000A0026, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000AA3AD, ++ 0x034, 0x000A938A, ++ 0x034, 0x000A818C, ++ 0x034, 0x000A7189, ++ 0x034, 0x000A606D, ++ 0x034, 0x000A504C, ++ 0x034, 0x000A402C, ++ 0x034, 0x000A3029, ++ 0x034, 0x000A2026, ++ 0x034, 0x000A1023, ++ 0x034, 0x000A0006, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000AA3AD, ++ 0x034, 0x000A938A, ++ 0x034, 0x000A818C, ++ 0x034, 0x000A7189, ++ 0x034, 0x000A606D, ++ 0x034, 0x000A504C, ++ 0x034, 0x000A402C, ++ 0x034, 0x000A3029, ++ 0x034, 0x000A2026, ++ 0x034, 0x000A1023, ++ 0x034, 0x000A0006, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000AA3AD, ++ 0x034, 0x000A938A, ++ 0x034, 0x000A818C, ++ 0x034, 0x000A7189, ++ 0x034, 0x000A606D, ++ 0x034, 0x000A504C, ++ 0x034, 0x000A402C, ++ 0x034, 0x000A3029, ++ 0x034, 0x000A2026, ++ 0x034, 0x000A1023, ++ 0x034, 0x000A0006, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000AA3AD, ++ 0x034, 0x000A938A, ++ 0x034, 0x000A818C, ++ 0x034, 0x000A7189, ++ 0x034, 0x000A606D, ++ 0x034, 0x000A504C, ++ 0x034, 0x000A402C, ++ 0x034, 0x000A3029, ++ 0x034, 0x000A2026, ++ 0x034, 0x000A1023, ++ 0x034, 0x000A0006, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000AA3F5, ++ 0x034, 0x000A93D2, ++ 0x034, 0x000A83CE, ++ 0x034, 0x000A7290, ++ 0x034, 0x000A628D, ++ 0x034, 0x000A528A, ++ 0x034, 0x000A4287, ++ 0x034, 0x000A308D, ++ 0x034, 0x000A208A, ++ 0x034, 0x000A1087, ++ 0x034, 0x000A0048, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000AAFF7, ++ 0x034, 0x000A9FF6, ++ 0x034, 0x000A8FF3, ++ 0x034, 0x000A7FF0, ++ 0x034, 0x000A6FED, ++ 0x034, 0x000A5FEA, ++ 0x034, 0x000A4FE7, ++ 0x034, 0x000A3DEA, ++ 0x034, 0x000A2DE7, ++ 0x034, 0x000A1DE4, ++ 0x034, 0x000A0D48, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000AA3AD, ++ 0x034, 0x000A938A, ++ 0x034, 0x000A818C, ++ 0x034, 0x000A7189, ++ 0x034, 0x000A606D, ++ 0x034, 0x000A504C, ++ 0x034, 0x000A402C, ++ 0x034, 0x000A3029, ++ 0x034, 0x000A2026, ++ 0x034, 0x000A1023, ++ 0x034, 0x000A0006, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x000AA3AD, ++ 0x034, 0x000A938A, ++ 0x034, 0x000A818C, ++ 0x034, 0x000A7189, ++ 0x034, 0x000A606D, ++ 0x034, 0x000A504C, ++ 0x034, 0x000A402C, ++ 0x034, 0x000A3029, ++ 0x034, 0x000A2026, ++ 0x034, 0x000A1023, ++ 0x034, 0x000A0006, ++ 0xA0000000, 0x00000000, ++ 0x034, 0x000AA794, ++ 0x034, 0x000A9791, ++ 0x034, 0x000A878E, ++ 0x034, 0x000A778B, ++ 0x034, 0x000A658D, ++ 0x034, 0x000A558A, ++ 0x034, 0x000A448D, ++ 0x034, 0x000A348A, ++ 0x034, 0x000A244C, ++ 0x034, 0x000A1449, ++ 0x034, 0x000A042B, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0008A3EF, ++ 0x034, 0x000893EC, ++ 0x034, 0x0008838C, ++ 0x034, 0x000871AD, ++ 0x034, 0x000861AA, ++ 0x034, 0x000850AD, ++ 0x034, 0x000840AA, ++ 0x034, 0x0008306A, ++ 0x034, 0x0008202D, ++ 0x034, 0x0008102A, ++ 0x034, 0x00080027, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0008A3EE, ++ 0x034, 0x000893AC, ++ 0x034, 0x0008838A, ++ 0x034, 0x0008718C, ++ 0x034, 0x00086189, ++ 0x034, 0x0008506D, ++ 0x034, 0x0008406A, ++ 0x034, 0x0008302C, ++ 0x034, 0x00082029, ++ 0x034, 0x00081026, ++ 0x034, 0x00080023, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0008A3EE, ++ 0x034, 0x000893AC, ++ 0x034, 0x0008838A, ++ 0x034, 0x0008718C, ++ 0x034, 0x00086189, ++ 0x034, 0x0008506D, ++ 0x034, 0x0008406A, ++ 0x034, 0x0008302C, ++ 0x034, 0x00082029, ++ 0x034, 0x00081026, ++ 0x034, 0x00080023, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0008A3EE, ++ 0x034, 0x000893AC, ++ 0x034, 0x0008838A, ++ 0x034, 0x0008718C, ++ 0x034, 0x00086189, ++ 0x034, 0x0008506D, ++ 0x034, 0x0008406A, ++ 0x034, 0x0008302C, ++ 0x034, 0x00082029, ++ 0x034, 0x00081026, ++ 0x034, 0x00080023, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0008A3EE, ++ 0x034, 0x000893AC, ++ 0x034, 0x0008838A, ++ 0x034, 0x0008718C, ++ 0x034, 0x00086189, ++ 0x034, 0x0008506D, ++ 0x034, 0x0008406A, ++ 0x034, 0x0008302C, ++ 0x034, 0x00082029, ++ 0x034, 0x00081026, ++ 0x034, 0x00080023, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0008A3F1, ++ 0x034, 0x000892B1, ++ 0x034, 0x000881CF, ++ 0x034, 0x00087170, ++ 0x034, 0x0008616D, ++ 0x034, 0x0008516A, ++ 0x034, 0x00084167, ++ 0x034, 0x0008302F, ++ 0x034, 0x0008202C, ++ 0x034, 0x00081029, ++ 0x034, 0x00080026, ++ 0x90000009, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0008AFF7, ++ 0x034, 0x00089FF6, ++ 0x034, 0x00088FF3, ++ 0x034, 0x00087FF0, ++ 0x034, 0x00086FED, ++ 0x034, 0x00085FEA, ++ 0x034, 0x00084FE7, ++ 0x034, 0x00083EC7, ++ 0x034, 0x00082EC4, ++ 0x034, 0x00081D4B, ++ 0x034, 0x00080D48, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0008A3EE, ++ 0x034, 0x000893AC, ++ 0x034, 0x0008838A, ++ 0x034, 0x0008718C, ++ 0x034, 0x00086189, ++ 0x034, 0x0008506D, ++ 0x034, 0x0008406A, ++ 0x034, 0x0008302C, ++ 0x034, 0x00082029, ++ 0x034, 0x00081026, ++ 0x034, 0x00080023, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x034, 0x0008A3EE, ++ 0x034, 0x000893AC, ++ 0x034, 0x0008838A, ++ 0x034, 0x0008718C, ++ 0x034, 0x00086189, ++ 0x034, 0x0008506D, ++ 0x034, 0x0008406A, ++ 0x034, 0x0008302C, ++ 0x034, 0x00082029, ++ 0x034, 0x00081026, ++ 0x034, 0x00080023, ++ 0xA0000000, 0x00000000, ++ 0x034, 0x0008A794, ++ 0x034, 0x00089791, ++ 0x034, 0x0008878E, ++ 0x034, 0x0008778B, ++ 0x034, 0x0008658D, ++ 0x034, 0x0008558A, ++ 0x034, 0x0008448D, ++ 0x034, 0x0008348A, ++ 0x034, 0x0008244C, ++ 0x034, 0x00081449, ++ 0x034, 0x0008042B, ++ 0xB0000000, 0x00000000, ++ 0x0EF, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0xA0000000, 0x00000000, ++ 0x0DF, 0x00000000, ++ 0xB0000000, 0x00000000, ++ 0x018, 0x0001712A, ++ 0x0EF, 0x00000040, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x035, 0x000006CC, ++ 0x035, 0x000086CC, ++ 0x035, 0x000106CC, ++ 0x035, 0x000206CC, ++ 0x035, 0x000286CC, ++ 0x035, 0x000306CC, ++ 0x035, 0x000406CC, ++ 0x035, 0x000486CC, ++ 0x035, 0x000506CC, ++ 0x035, 0x000806CC, ++ 0x035, 0x000886CC, ++ 0x035, 0x000906CC, ++ 0x035, 0x000A06CC, ++ 0x035, 0x000A86CC, ++ 0x035, 0x000B06CC, ++ 0x035, 0x000C06CC, ++ 0x035, 0x000C86CC, ++ 0x035, 0x000D06CC, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x035, 0x000006CC, ++ 0x035, 0x000086CC, ++ 0x035, 0x000106CC, ++ 0x035, 0x000206CC, ++ 0x035, 0x000286CC, ++ 0x035, 0x000306CC, ++ 0x035, 0x000406CC, ++ 0x035, 0x000486CC, ++ 0x035, 0x000506CC, ++ 0x035, 0x000806CC, ++ 0x035, 0x000886CC, ++ 0x035, 0x000906CC, ++ 0x035, 0x000A06CC, ++ 0x035, 0x000A86CC, ++ 0x035, 0x000B06CC, ++ 0x035, 0x000C06CC, ++ 0x035, 0x000C86CC, ++ 0x035, 0x000D06CC, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x035, 0x000006CC, ++ 0x035, 0x000086CC, ++ 0x035, 0x000106CC, ++ 0x035, 0x000206CC, ++ 0x035, 0x000286CC, ++ 0x035, 0x000306CC, ++ 0x035, 0x000406CC, ++ 0x035, 0x000486CC, ++ 0x035, 0x000506CC, ++ 0x035, 0x000806CC, ++ 0x035, 0x000886CC, ++ 0x035, 0x000906CC, ++ 0x035, 0x000A06CC, ++ 0x035, 0x000A86CC, ++ 0x035, 0x000B06CC, ++ 0x035, 0x000C06CC, ++ 0x035, 0x000C86CC, ++ 0x035, 0x000D06CC, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x035, 0x000006CC, ++ 0x035, 0x000086CC, ++ 0x035, 0x000106CC, ++ 0x035, 0x000206CC, ++ 0x035, 0x000286CC, ++ 0x035, 0x000306CC, ++ 0x035, 0x000406CC, ++ 0x035, 0x000486CC, ++ 0x035, 0x000506CC, ++ 0x035, 0x000806CC, ++ 0x035, 0x000886CC, ++ 0x035, 0x000906CC, ++ 0x035, 0x000A06CC, ++ 0x035, 0x000A86CC, ++ 0x035, 0x000B06CC, ++ 0x035, 0x000C06CC, ++ 0x035, 0x000C86CC, ++ 0x035, 0x000D06CC, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x035, 0x000006CC, ++ 0x035, 0x000086CC, ++ 0x035, 0x000106CC, ++ 0x035, 0x000206CC, ++ 0x035, 0x000286CC, ++ 0x035, 0x000306CC, ++ 0x035, 0x000406CC, ++ 0x035, 0x000486CC, ++ 0x035, 0x000506CC, ++ 0x035, 0x000806CC, ++ 0x035, 0x000886CC, ++ 0x035, 0x000906CC, ++ 0x035, 0x000A06CC, ++ 0x035, 0x000A86CC, ++ 0x035, 0x000B06CC, ++ 0x035, 0x000C06CC, ++ 0x035, 0x000C86CC, ++ 0x035, 0x000D06CC, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x035, 0x000006CC, ++ 0x035, 0x000086CC, ++ 0x035, 0x000106CC, ++ 0x035, 0x000206CC, ++ 0x035, 0x000286CC, ++ 0x035, 0x000306CC, ++ 0x035, 0x000406CC, ++ 0x035, 0x000486CC, ++ 0x035, 0x000506CC, ++ 0x035, 0x000806CC, ++ 0x035, 0x000886CC, ++ 0x035, 0x000906CC, ++ 0x035, 0x000A06CC, ++ 0x035, 0x000A86CC, ++ 0x035, 0x000B06CC, ++ 0x035, 0x000C06CC, ++ 0x035, 0x000C86CC, ++ 0x035, 0x000D06CC, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x035, 0x000006CC, ++ 0x035, 0x000086CC, ++ 0x035, 0x000106CC, ++ 0x035, 0x000206CC, ++ 0x035, 0x000286CC, ++ 0x035, 0x000306CC, ++ 0x035, 0x000406CC, ++ 0x035, 0x000486CC, ++ 0x035, 0x000506CC, ++ 0x035, 0x000806CC, ++ 0x035, 0x000886CC, ++ 0x035, 0x000906CC, ++ 0x035, 0x000A06CC, ++ 0x035, 0x000A86CC, ++ 0x035, 0x000B06CC, ++ 0x035, 0x000C06CC, ++ 0x035, 0x000C86CC, ++ 0x035, 0x000D06CC, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x035, 0x000006CC, ++ 0x035, 0x000086CC, ++ 0x035, 0x000106CC, ++ 0x035, 0x000206CC, ++ 0x035, 0x000286CC, ++ 0x035, 0x000306CC, ++ 0x035, 0x000406CC, ++ 0x035, 0x000486CC, ++ 0x035, 0x000506CC, ++ 0x035, 0x000806CC, ++ 0x035, 0x000886CC, ++ 0x035, 0x000906CC, ++ 0x035, 0x000A06CC, ++ 0x035, 0x000A86CC, ++ 0x035, 0x000B06CC, ++ 0x035, 0x000C06CC, ++ 0x035, 0x000C86CC, ++ 0x035, 0x000D06CC, ++ 0xA0000000, 0x00000000, ++ 0x035, 0x00000484, ++ 0x035, 0x00008484, ++ 0x035, 0x00010484, ++ 0x035, 0x00020584, ++ 0x035, 0x00028584, ++ 0x035, 0x00030584, ++ 0x035, 0x00040584, ++ 0x035, 0x00048584, ++ 0x035, 0x00050584, ++ 0x035, 0x000805FB, ++ 0x035, 0x000885FB, ++ 0x035, 0x000905FB, ++ 0x035, 0x000A05FB, ++ 0x035, 0x000A85FB, ++ 0x035, 0x000B05FB, ++ 0x035, 0x000C05FB, ++ 0x035, 0x000C85FB, ++ 0x035, 0x000D05FB, ++ 0xB0000000, 0x00000000, ++ 0x0EF, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x0DF, 0x00000001, ++ 0xA0000000, 0x00000000, ++ 0x0DF, 0x00000000, ++ 0xB0000000, 0x00000000, ++ 0x018, 0x0001712A, ++ 0x0EF, 0x00000010, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x036, 0x00000473, ++ 0x036, 0x00008473, ++ 0x036, 0x00010473, ++ 0x036, 0x00020473, ++ 0x036, 0x00028473, ++ 0x036, 0x00030473, ++ 0x036, 0x00040473, ++ 0x036, 0x00048473, ++ 0x036, 0x00050473, ++ 0x036, 0x00080473, ++ 0x036, 0x00088473, ++ 0x036, 0x00090473, ++ 0x036, 0x000A0473, ++ 0x036, 0x000A8473, ++ 0x036, 0x000B0473, ++ 0x036, 0x000C0473, ++ 0x036, 0x000C8473, ++ 0x036, 0x000D0473, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x036, 0x00000475, ++ 0x036, 0x00008475, ++ 0x036, 0x00010475, ++ 0x036, 0x00020475, ++ 0x036, 0x00028475, ++ 0x036, 0x00030475, ++ 0x036, 0x00040475, ++ 0x036, 0x00048475, ++ 0x036, 0x00050475, ++ 0x036, 0x00080475, ++ 0x036, 0x00088475, ++ 0x036, 0x00090475, ++ 0x036, 0x000A0475, ++ 0x036, 0x000A8475, ++ 0x036, 0x000B0475, ++ 0x036, 0x000C0475, ++ 0x036, 0x000C8475, ++ 0x036, 0x000D0475, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x036, 0x00000475, ++ 0x036, 0x00008475, ++ 0x036, 0x00010475, ++ 0x036, 0x00020475, ++ 0x036, 0x00028475, ++ 0x036, 0x00030475, ++ 0x036, 0x00040475, ++ 0x036, 0x00048475, ++ 0x036, 0x00050475, ++ 0x036, 0x00080475, ++ 0x036, 0x00088475, ++ 0x036, 0x00090475, ++ 0x036, 0x000A0475, ++ 0x036, 0x000A8475, ++ 0x036, 0x000B0475, ++ 0x036, 0x000C0475, ++ 0x036, 0x000C8475, ++ 0x036, 0x000D0475, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x036, 0x00000475, ++ 0x036, 0x00008475, ++ 0x036, 0x00010475, ++ 0x036, 0x00020475, ++ 0x036, 0x00028475, ++ 0x036, 0x00030475, ++ 0x036, 0x00040475, ++ 0x036, 0x00048475, ++ 0x036, 0x00050475, ++ 0x036, 0x00080475, ++ 0x036, 0x00088475, ++ 0x036, 0x00090475, ++ 0x036, 0x000A0475, ++ 0x036, 0x000A8475, ++ 0x036, 0x000B0475, ++ 0x036, 0x000C0475, ++ 0x036, 0x000C8475, ++ 0x036, 0x000D0475, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x036, 0x00000475, ++ 0x036, 0x00008475, ++ 0x036, 0x00010475, ++ 0x036, 0x00020475, ++ 0x036, 0x00028475, ++ 0x036, 0x00030475, ++ 0x036, 0x00040475, ++ 0x036, 0x00048475, ++ 0x036, 0x00050475, ++ 0x036, 0x00080475, ++ 0x036, 0x00088475, ++ 0x036, 0x00090475, ++ 0x036, 0x000A0475, ++ 0x036, 0x000A8475, ++ 0x036, 0x000B0475, ++ 0x036, 0x000C0475, ++ 0x036, 0x000C8475, ++ 0x036, 0x000D0475, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x036, 0x00000475, ++ 0x036, 0x00008475, ++ 0x036, 0x00010475, ++ 0x036, 0x00020475, ++ 0x036, 0x00028475, ++ 0x036, 0x00030475, ++ 0x036, 0x00040475, ++ 0x036, 0x00048475, ++ 0x036, 0x00050475, ++ 0x036, 0x00080475, ++ 0x036, 0x00088475, ++ 0x036, 0x00090475, ++ 0x036, 0x000A0475, ++ 0x036, 0x000A8475, ++ 0x036, 0x000B0475, ++ 0x036, 0x000C0475, ++ 0x036, 0x000C8475, ++ 0x036, 0x000D0475, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x036, 0x00000475, ++ 0x036, 0x00008475, ++ 0x036, 0x00010475, ++ 0x036, 0x00020475, ++ 0x036, 0x00028475, ++ 0x036, 0x00030475, ++ 0x036, 0x00040475, ++ 0x036, 0x00048475, ++ 0x036, 0x00050475, ++ 0x036, 0x00080475, ++ 0x036, 0x00088475, ++ 0x036, 0x00090475, ++ 0x036, 0x000A0475, ++ 0x036, 0x000A8475, ++ 0x036, 0x000B0475, ++ 0x036, 0x000C0475, ++ 0x036, 0x000C8475, ++ 0x036, 0x000D0475, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x036, 0x00000475, ++ 0x036, 0x00008475, ++ 0x036, 0x00010475, ++ 0x036, 0x00020475, ++ 0x036, 0x00028475, ++ 0x036, 0x00030475, ++ 0x036, 0x00040475, ++ 0x036, 0x00048475, ++ 0x036, 0x00050475, ++ 0x036, 0x00080475, ++ 0x036, 0x00088475, ++ 0x036, 0x00090475, ++ 0x036, 0x000A0475, ++ 0x036, 0x000A8475, ++ 0x036, 0x000B0475, ++ 0x036, 0x000C0475, ++ 0x036, 0x000C8475, ++ 0x036, 0x000D0475, ++ 0xA0000000, 0x00000000, ++ 0x036, 0x00000474, ++ 0x036, 0x00008474, ++ 0x036, 0x00010474, ++ 0x036, 0x00020474, ++ 0x036, 0x00028474, ++ 0x036, 0x00030474, ++ 0x036, 0x00040474, ++ 0x036, 0x00048474, ++ 0x036, 0x00050474, ++ 0x036, 0x00080474, ++ 0x036, 0x00088474, ++ 0x036, 0x00090474, ++ 0x036, 0x000A0474, ++ 0x036, 0x000A8474, ++ 0x036, 0x000B0474, ++ 0x036, 0x000C0474, ++ 0x036, 0x000C8474, ++ 0x036, 0x000D0474, ++ 0xB0000000, 0x00000000, ++ 0x0EF, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0xA0000000, 0x00000000, ++ 0x0EF, 0x00000004, ++ 0x037, 0x00000000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00004000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00008000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00010000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00014000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00018000, ++ 0x038, 0x0000514E, ++ 0x037, 0x0001C000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00020000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00024000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00028000, ++ 0x038, 0x0000514E, ++ 0x037, 0x0002C000, ++ 0x038, 0x0000714E, ++ 0x037, 0x00030000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00034000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00038000, ++ 0x038, 0x0000514E, ++ 0x037, 0x0003C000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00040000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00044000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00048000, ++ 0x038, 0x0000514E, ++ 0x037, 0x00080000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x00084000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x00088000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x00090000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x00094000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x00098000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x0009C000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000A0000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000A4000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000A8000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000AC000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000B0000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000B4000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000B8000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000BC000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000C0000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000C4000, ++ 0x038, 0x00005ECE, ++ 0x037, 0x000C8000, ++ 0x038, 0x00005ECE, ++ 0x0EF, 0x00000000, ++ 0xB0000000, 0x00000000, ++ 0x0EF, 0x00000008, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0xA0000000, 0x00000000, ++ 0x03C, 0x0000007D, ++ 0x03C, 0x0000047D, ++ 0x03C, 0x0000087D, ++ 0x03C, 0x0000107D, ++ 0x03C, 0x0000147D, ++ 0x03C, 0x0000187D, ++ 0xB0000000, 0x00000000, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x00000275, ++ 0x03C, 0x00000542, ++ 0x03C, 0x00000821, ++ 0x03C, 0x00001275, ++ 0x03C, 0x00001542, ++ 0x03C, 0x00001821, ++ 0x03C, 0x00002275, ++ 0x03C, 0x00002542, ++ 0x03C, 0x00002821, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x0000027F, ++ 0x03C, 0x00000542, ++ 0x03C, 0x00000821, ++ 0x03C, 0x0000127F, ++ 0x03C, 0x00001542, ++ 0x03C, 0x00001821, ++ 0x03C, 0x0000227F, ++ 0x03C, 0x00002542, ++ 0x03C, 0x00002821, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x0000027F, ++ 0x03C, 0x00000542, ++ 0x03C, 0x00000821, ++ 0x03C, 0x0000127F, ++ 0x03C, 0x00001542, ++ 0x03C, 0x00001821, ++ 0x03C, 0x0000227F, ++ 0x03C, 0x00002542, ++ 0x03C, 0x00002821, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x0000027F, ++ 0x03C, 0x00000542, ++ 0x03C, 0x00000821, ++ 0x03C, 0x0000127F, ++ 0x03C, 0x00001542, ++ 0x03C, 0x00001821, ++ 0x03C, 0x0000227F, ++ 0x03C, 0x00002542, ++ 0x03C, 0x00002821, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x0000027F, ++ 0x03C, 0x00000542, ++ 0x03C, 0x00000821, ++ 0x03C, 0x0000127F, ++ 0x03C, 0x00001542, ++ 0x03C, 0x00001821, ++ 0x03C, 0x0000227F, ++ 0x03C, 0x00002542, ++ 0x03C, 0x00002821, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x0000027F, ++ 0x03C, 0x00000542, ++ 0x03C, 0x00000821, ++ 0x03C, 0x0000127F, ++ 0x03C, 0x00001542, ++ 0x03C, 0x00001821, ++ 0x03C, 0x0000227F, ++ 0x03C, 0x00002542, ++ 0x03C, 0x00002821, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x0000027F, ++ 0x03C, 0x00000542, ++ 0x03C, 0x00000821, ++ 0x03C, 0x0000127F, ++ 0x03C, 0x00001542, ++ 0x03C, 0x00001821, ++ 0x03C, 0x0000227F, ++ 0x03C, 0x00002542, ++ 0x03C, 0x00002821, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x03C, 0x0000027F, ++ 0x03C, 0x00000542, ++ 0x03C, 0x00000821, ++ 0x03C, 0x0000127F, ++ 0x03C, 0x00001542, ++ 0x03C, 0x00001821, ++ 0x03C, 0x0000227F, ++ 0x03C, 0x00002542, ++ 0x03C, 0x00002821, ++ 0xA0000000, 0x00000000, ++ 0x03C, 0x0000037E, ++ 0x03C, 0x00000575, ++ 0x03C, 0x00000971, ++ 0x03C, 0x0000127E, ++ 0x03C, 0x00001575, ++ 0x03C, 0x00001871, ++ 0x03C, 0x0000217E, ++ 0x03C, 0x00002575, ++ 0x03C, 0x00002871, ++ 0xB0000000, 0x00000000, ++ 0x0EF, 0x00000000, ++ 0x061, 0x000C0D47, ++ 0x062, 0x0000133C, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x063, 0x000750E7, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x063, 0x000750E7, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x063, 0x000750E7, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x063, 0x000750E7, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x063, 0x000750E7, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x063, 0x000750E7, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x063, 0x000750E7, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x063, 0x000750E7, ++ 0xA0000000, 0x00000000, ++ 0x063, 0x0007D0E7, ++ 0xB0000000, 0x00000000, ++ 0x064, 0x00014FEC, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x065, 0x000920D0, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x065, 0x000920D0, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x065, 0x000920D0, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x065, 0x000920D0, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x065, 0x000920D0, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x065, 0x000920D0, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x065, 0x000920D0, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0x065, 0x000920D0, ++ 0xA0000000, 0x00000000, ++ 0x065, 0x000923FF, ++ 0xB0000000, 0x00000000, ++ 0x066, 0x00000040, ++ 0x057, 0x00050000, ++ 0x056, 0x00051DF0, ++ 0x80000001, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000002, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000003, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000004, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000005, 0x00000000, 0x40000000, 0x00000000, ++ 0x90000008, 0x00000000, 0x40000000, 0x00000000, ++ 0x9000000a, 0x00000000, 0x40000000, 0x00000000, ++ 0x9000000b, 0x00000000, 0x40000000, 0x00000000, ++ 0xA0000000, 0x00000000, ++ 0x055, 0x00082060, ++ 0xB0000000, 0x00000000, ++}; ++ ++RTW_DECL_TABLE_RF_RADIO(rtw8814a_rf_d, D); ++ ++static const struct rtw_txpwr_lmt_cfg_pair rtw8814a_txpwr_lmt[] = { ++ { 0, 0, 0, 0, 1, 36, }, ++ { 2, 0, 0, 0, 1, 32, }, ++ { 1, 0, 0, 0, 1, 32, }, ++ { 0, 0, 0, 0, 2, 36, }, ++ { 2, 0, 0, 0, 2, 32, }, ++ { 1, 0, 0, 0, 2, 32, }, ++ { 0, 0, 0, 0, 3, 36, }, ++ { 2, 0, 0, 0, 3, 32, }, ++ { 1, 0, 0, 0, 3, 32, }, ++ { 0, 0, 0, 0, 4, 36, }, ++ { 2, 0, 0, 0, 4, 32, }, ++ { 1, 0, 0, 0, 4, 32, }, ++ { 0, 0, 0, 0, 5, 36, }, ++ { 2, 0, 0, 0, 5, 32, }, ++ { 1, 0, 0, 0, 5, 32, }, ++ { 0, 0, 0, 0, 6, 36, }, ++ { 2, 0, 0, 0, 6, 32, }, ++ { 1, 0, 0, 0, 6, 32, }, ++ { 0, 0, 0, 0, 7, 36, }, ++ { 2, 0, 0, 0, 7, 32, }, ++ { 1, 0, 0, 0, 7, 32, }, ++ { 0, 0, 0, 0, 8, 36, }, ++ { 2, 0, 0, 0, 8, 32, }, ++ { 1, 0, 0, 0, 8, 32, }, ++ { 0, 0, 0, 0, 9, 36, }, ++ { 2, 0, 0, 0, 9, 32, }, ++ { 1, 0, 0, 0, 9, 32, }, ++ { 0, 0, 0, 0, 10, 36, }, ++ { 2, 0, 0, 0, 10, 32, }, ++ { 1, 0, 0, 0, 10, 32, }, ++ { 0, 0, 0, 0, 11, 36, }, ++ { 2, 0, 0, 0, 11, 32, }, ++ { 1, 0, 0, 0, 11, 32, }, ++ { 0, 0, 0, 0, 12, 63, }, ++ { 2, 0, 0, 0, 12, 32, }, ++ { 1, 0, 0, 0, 12, 32, }, ++ { 0, 0, 0, 0, 13, 63, }, ++ { 2, 0, 0, 0, 13, 32, }, ++ { 1, 0, 0, 0, 13, 32, }, ++ { 0, 0, 0, 0, 14, 63, }, ++ { 2, 0, 0, 0, 14, 63, }, ++ { 1, 0, 0, 0, 14, 32, }, ++ { 0, 0, 0, 1, 1, 34, }, ++ { 2, 0, 0, 1, 1, 32, }, ++ { 1, 0, 0, 1, 1, 32, }, ++ { 0, 0, 0, 1, 2, 36, }, ++ { 2, 0, 0, 1, 2, 32, }, ++ { 1, 0, 0, 1, 2, 32, }, ++ { 0, 0, 0, 1, 3, 36, }, ++ { 2, 0, 0, 1, 3, 32, }, ++ { 1, 0, 0, 1, 3, 32, }, ++ { 0, 0, 0, 1, 4, 36, }, ++ { 2, 0, 0, 1, 4, 32, }, ++ { 1, 0, 0, 1, 4, 32, }, ++ { 0, 0, 0, 1, 5, 36, }, ++ { 2, 0, 0, 1, 5, 32, }, ++ { 1, 0, 0, 1, 5, 32, }, ++ { 0, 0, 0, 1, 6, 36, }, ++ { 2, 0, 0, 1, 6, 32, }, ++ { 1, 0, 0, 1, 6, 32, }, ++ { 0, 0, 0, 1, 7, 36, }, ++ { 2, 0, 0, 1, 7, 32, }, ++ { 1, 0, 0, 1, 7, 32, }, ++ { 0, 0, 0, 1, 8, 36, }, ++ { 2, 0, 0, 1, 8, 32, }, ++ { 1, 0, 0, 1, 8, 32, }, ++ { 0, 0, 0, 1, 9, 36, }, ++ { 2, 0, 0, 1, 9, 32, }, ++ { 1, 0, 0, 1, 9, 32, }, ++ { 0, 0, 0, 1, 10, 36, }, ++ { 2, 0, 0, 1, 10, 32, }, ++ { 1, 0, 0, 1, 10, 32, }, ++ { 0, 0, 0, 1, 11, 32, }, ++ { 2, 0, 0, 1, 11, 32, }, ++ { 1, 0, 0, 1, 11, 32, }, ++ { 0, 0, 0, 1, 12, 63, }, ++ { 2, 0, 0, 1, 12, 32, }, ++ { 1, 0, 0, 1, 12, 32, }, ++ { 0, 0, 0, 1, 13, 63, }, ++ { 2, 0, 0, 1, 13, 32, }, ++ { 1, 0, 0, 1, 13, 32, }, ++ { 0, 0, 0, 1, 14, 63, }, ++ { 2, 0, 0, 1, 14, 63, }, ++ { 1, 0, 0, 1, 14, 63, }, ++ { 0, 0, 0, 2, 1, 34, }, ++ { 2, 0, 0, 2, 1, 32, }, ++ { 1, 0, 0, 2, 1, 32, }, ++ { 0, 0, 0, 2, 2, 36, }, ++ { 2, 0, 0, 2, 2, 32, }, ++ { 1, 0, 0, 2, 2, 32, }, ++ { 0, 0, 0, 2, 3, 36, }, ++ { 2, 0, 0, 2, 3, 32, }, ++ { 1, 0, 0, 2, 3, 32, }, ++ { 0, 0, 0, 2, 4, 36, }, ++ { 2, 0, 0, 2, 4, 32, }, ++ { 1, 0, 0, 2, 4, 32, }, ++ { 0, 0, 0, 2, 5, 36, }, ++ { 2, 0, 0, 2, 5, 32, }, ++ { 1, 0, 0, 2, 5, 32, }, ++ { 0, 0, 0, 2, 6, 36, }, ++ { 2, 0, 0, 2, 6, 32, }, ++ { 1, 0, 0, 2, 6, 32, }, ++ { 0, 0, 0, 2, 7, 36, }, ++ { 2, 0, 0, 2, 7, 32, }, ++ { 1, 0, 0, 2, 7, 32, }, ++ { 0, 0, 0, 2, 8, 36, }, ++ { 2, 0, 0, 2, 8, 32, }, ++ { 1, 0, 0, 2, 8, 32, }, ++ { 0, 0, 0, 2, 9, 36, }, ++ { 2, 0, 0, 2, 9, 32, }, ++ { 1, 0, 0, 2, 9, 32, }, ++ { 0, 0, 0, 2, 10, 36, }, ++ { 2, 0, 0, 2, 10, 32, }, ++ { 1, 0, 0, 2, 10, 32, }, ++ { 0, 0, 0, 2, 11, 32, }, ++ { 2, 0, 0, 2, 11, 32, }, ++ { 1, 0, 0, 2, 11, 32, }, ++ { 0, 0, 0, 2, 12, 63, }, ++ { 2, 0, 0, 2, 12, 32, }, ++ { 1, 0, 0, 2, 12, 32, }, ++ { 0, 0, 0, 2, 13, 63, }, ++ { 2, 0, 0, 2, 13, 32, }, ++ { 1, 0, 0, 2, 13, 32, }, ++ { 0, 0, 0, 2, 14, 63, }, ++ { 2, 0, 0, 2, 14, 63, }, ++ { 1, 0, 0, 2, 14, 63, }, ++ { 0, 0, 0, 3, 1, 32, }, ++ { 2, 0, 0, 3, 1, 30, }, ++ { 1, 0, 0, 3, 1, 30, }, ++ { 0, 0, 0, 3, 2, 34, }, ++ { 2, 0, 0, 3, 2, 30, }, ++ { 1, 0, 0, 3, 2, 30, }, ++ { 0, 0, 0, 3, 3, 34, }, ++ { 2, 0, 0, 3, 3, 30, }, ++ { 1, 0, 0, 3, 3, 30, }, ++ { 0, 0, 0, 3, 4, 34, }, ++ { 2, 0, 0, 3, 4, 30, }, ++ { 1, 0, 0, 3, 4, 30, }, ++ { 0, 0, 0, 3, 5, 34, }, ++ { 2, 0, 0, 3, 5, 30, }, ++ { 1, 0, 0, 3, 5, 30, }, ++ { 0, 0, 0, 3, 6, 34, }, ++ { 2, 0, 0, 3, 6, 30, }, ++ { 1, 0, 0, 3, 6, 30, }, ++ { 0, 0, 0, 3, 7, 34, }, ++ { 2, 0, 0, 3, 7, 30, }, ++ { 1, 0, 0, 3, 7, 30, }, ++ { 0, 0, 0, 3, 8, 34, }, ++ { 2, 0, 0, 3, 8, 30, }, ++ { 1, 0, 0, 3, 8, 30, }, ++ { 0, 0, 0, 3, 9, 34, }, ++ { 2, 0, 0, 3, 9, 30, }, ++ { 1, 0, 0, 3, 9, 30, }, ++ { 0, 0, 0, 3, 10, 34, }, ++ { 2, 0, 0, 3, 10, 30, }, ++ { 1, 0, 0, 3, 10, 30, }, ++ { 0, 0, 0, 3, 11, 30, }, ++ { 2, 0, 0, 3, 11, 30, }, ++ { 1, 0, 0, 3, 11, 30, }, ++ { 0, 0, 0, 3, 12, 63, }, ++ { 2, 0, 0, 3, 12, 30, }, ++ { 1, 0, 0, 3, 12, 30, }, ++ { 0, 0, 0, 3, 13, 63, }, ++ { 2, 0, 0, 3, 13, 30, }, ++ { 1, 0, 0, 3, 13, 30, }, ++ { 0, 0, 0, 3, 14, 63, }, ++ { 2, 0, 0, 3, 14, 63, }, ++ { 1, 0, 0, 3, 14, 63, }, ++ { 0, 0, 0, 6, 1, 30, }, ++ { 2, 0, 0, 6, 1, 28, }, ++ { 1, 0, 0, 6, 1, 28, }, ++ { 0, 0, 0, 6, 2, 32, }, ++ { 2, 0, 0, 6, 2, 28, }, ++ { 1, 0, 0, 6, 2, 28, }, ++ { 0, 0, 0, 6, 3, 32, }, ++ { 2, 0, 0, 6, 3, 28, }, ++ { 1, 0, 0, 6, 3, 28, }, ++ { 0, 0, 0, 6, 4, 32, }, ++ { 2, 0, 0, 6, 4, 28, }, ++ { 1, 0, 0, 6, 4, 28, }, ++ { 0, 0, 0, 6, 5, 32, }, ++ { 2, 0, 0, 6, 5, 28, }, ++ { 1, 0, 0, 6, 5, 28, }, ++ { 0, 0, 0, 6, 6, 32, }, ++ { 2, 0, 0, 6, 6, 28, }, ++ { 1, 0, 0, 6, 6, 28, }, ++ { 0, 0, 0, 6, 7, 32, }, ++ { 2, 0, 0, 6, 7, 28, }, ++ { 1, 0, 0, 6, 7, 28, }, ++ { 0, 0, 0, 6, 8, 32, }, ++ { 2, 0, 0, 6, 8, 28, }, ++ { 1, 0, 0, 6, 8, 28, }, ++ { 0, 0, 0, 6, 9, 32, }, ++ { 2, 0, 0, 6, 9, 28, }, ++ { 1, 0, 0, 6, 9, 28, }, ++ { 0, 0, 0, 6, 10, 32, }, ++ { 2, 0, 0, 6, 10, 28, }, ++ { 1, 0, 0, 6, 10, 28, }, ++ { 0, 0, 0, 6, 11, 28, }, ++ { 2, 0, 0, 6, 11, 28, }, ++ { 1, 0, 0, 6, 11, 28, }, ++ { 0, 0, 0, 6, 12, 63, }, ++ { 2, 0, 0, 6, 12, 28, }, ++ { 1, 0, 0, 6, 12, 28, }, ++ { 0, 0, 0, 6, 13, 63, }, ++ { 2, 0, 0, 6, 13, 28, }, ++ { 1, 0, 0, 6, 13, 28, }, ++ { 0, 0, 0, 6, 14, 63, }, ++ { 2, 0, 0, 6, 14, 63, }, ++ { 1, 0, 0, 6, 14, 63, }, ++ { 0, 0, 0, 7, 1, 28, }, ++ { 2, 0, 0, 7, 1, 26, }, ++ { 1, 0, 0, 7, 1, 26, }, ++ { 0, 0, 0, 7, 2, 30, }, ++ { 2, 0, 0, 7, 2, 26, }, ++ { 1, 0, 0, 7, 2, 26, }, ++ { 0, 0, 0, 7, 3, 30, }, ++ { 2, 0, 0, 7, 3, 26, }, ++ { 1, 0, 0, 7, 3, 26, }, ++ { 0, 0, 0, 7, 4, 30, }, ++ { 2, 0, 0, 7, 4, 26, }, ++ { 1, 0, 0, 7, 4, 26, }, ++ { 0, 0, 0, 7, 5, 30, }, ++ { 2, 0, 0, 7, 5, 26, }, ++ { 1, 0, 0, 7, 5, 26, }, ++ { 0, 0, 0, 7, 6, 30, }, ++ { 2, 0, 0, 7, 6, 26, }, ++ { 1, 0, 0, 7, 6, 26, }, ++ { 0, 0, 0, 7, 7, 30, }, ++ { 2, 0, 0, 7, 7, 26, }, ++ { 1, 0, 0, 7, 7, 26, }, ++ { 0, 0, 0, 7, 8, 30, }, ++ { 2, 0, 0, 7, 8, 26, }, ++ { 1, 0, 0, 7, 8, 26, }, ++ { 0, 0, 0, 7, 9, 30, }, ++ { 2, 0, 0, 7, 9, 26, }, ++ { 1, 0, 0, 7, 9, 26, }, ++ { 0, 0, 0, 7, 10, 30, }, ++ { 2, 0, 0, 7, 10, 26, }, ++ { 1, 0, 0, 7, 10, 26, }, ++ { 0, 0, 0, 7, 11, 26, }, ++ { 2, 0, 0, 7, 11, 26, }, ++ { 1, 0, 0, 7, 11, 26, }, ++ { 0, 0, 0, 7, 12, 63, }, ++ { 2, 0, 0, 7, 12, 26, }, ++ { 1, 0, 0, 7, 12, 26, }, ++ { 0, 0, 0, 7, 13, 63, }, ++ { 2, 0, 0, 7, 13, 26, }, ++ { 1, 0, 0, 7, 13, 26, }, ++ { 0, 0, 0, 7, 14, 63, }, ++ { 2, 0, 0, 7, 14, 63, }, ++ { 1, 0, 0, 7, 14, 63, }, ++ { 0, 0, 1, 2, 1, 63, }, ++ { 2, 0, 1, 2, 1, 63, }, ++ { 1, 0, 1, 2, 1, 63, }, ++ { 0, 0, 1, 2, 2, 63, }, ++ { 2, 0, 1, 2, 2, 63, }, ++ { 1, 0, 1, 2, 2, 63, }, ++ { 0, 0, 1, 2, 3, 32, }, ++ { 2, 0, 1, 2, 3, 32, }, ++ { 1, 0, 1, 2, 3, 32, }, ++ { 0, 0, 1, 2, 4, 36, }, ++ { 2, 0, 1, 2, 4, 32, }, ++ { 1, 0, 1, 2, 4, 32, }, ++ { 0, 0, 1, 2, 5, 36, }, ++ { 2, 0, 1, 2, 5, 32, }, ++ { 1, 0, 1, 2, 5, 32, }, ++ { 0, 0, 1, 2, 6, 36, }, ++ { 2, 0, 1, 2, 6, 32, }, ++ { 1, 0, 1, 2, 6, 32, }, ++ { 0, 0, 1, 2, 7, 36, }, ++ { 2, 0, 1, 2, 7, 32, }, ++ { 1, 0, 1, 2, 7, 32, }, ++ { 0, 0, 1, 2, 8, 36, }, ++ { 2, 0, 1, 2, 8, 32, }, ++ { 1, 0, 1, 2, 8, 32, }, ++ { 0, 0, 1, 2, 9, 36, }, ++ { 2, 0, 1, 2, 9, 32, }, ++ { 1, 0, 1, 2, 9, 32, }, ++ { 0, 0, 1, 2, 10, 36, }, ++ { 2, 0, 1, 2, 10, 32, }, ++ { 1, 0, 1, 2, 10, 32, }, ++ { 0, 0, 1, 2, 11, 32, }, ++ { 2, 0, 1, 2, 11, 32, }, ++ { 1, 0, 1, 2, 11, 32, }, ++ { 0, 0, 1, 2, 12, 63, }, ++ { 2, 0, 1, 2, 12, 32, }, ++ { 1, 0, 1, 2, 12, 32, }, ++ { 0, 0, 1, 2, 13, 63, }, ++ { 2, 0, 1, 2, 13, 32, }, ++ { 1, 0, 1, 2, 13, 32, }, ++ { 0, 0, 1, 2, 14, 63, }, ++ { 2, 0, 1, 2, 14, 63, }, ++ { 1, 0, 1, 2, 14, 63, }, ++ { 0, 0, 1, 3, 1, 63, }, ++ { 2, 0, 1, 3, 1, 63, }, ++ { 1, 0, 1, 3, 1, 63, }, ++ { 0, 0, 1, 3, 2, 63, }, ++ { 2, 0, 1, 3, 2, 63, }, ++ { 1, 0, 1, 3, 2, 63, }, ++ { 0, 0, 1, 3, 3, 30, }, ++ { 2, 0, 1, 3, 3, 30, }, ++ { 1, 0, 1, 3, 3, 30, }, ++ { 0, 0, 1, 3, 4, 34, }, ++ { 2, 0, 1, 3, 4, 30, }, ++ { 1, 0, 1, 3, 4, 30, }, ++ { 0, 0, 1, 3, 5, 34, }, ++ { 2, 0, 1, 3, 5, 30, }, ++ { 1, 0, 1, 3, 5, 30, }, ++ { 0, 0, 1, 3, 6, 34, }, ++ { 2, 0, 1, 3, 6, 30, }, ++ { 1, 0, 1, 3, 6, 30, }, ++ { 0, 0, 1, 3, 7, 34, }, ++ { 2, 0, 1, 3, 7, 30, }, ++ { 1, 0, 1, 3, 7, 30, }, ++ { 0, 0, 1, 3, 8, 34, }, ++ { 2, 0, 1, 3, 8, 30, }, ++ { 1, 0, 1, 3, 8, 30, }, ++ { 0, 0, 1, 3, 9, 34, }, ++ { 2, 0, 1, 3, 9, 30, }, ++ { 1, 0, 1, 3, 9, 30, }, ++ { 0, 0, 1, 3, 10, 34, }, ++ { 2, 0, 1, 3, 10, 30, }, ++ { 1, 0, 1, 3, 10, 30, }, ++ { 0, 0, 1, 3, 11, 30, }, ++ { 2, 0, 1, 3, 11, 30, }, ++ { 1, 0, 1, 3, 11, 30, }, ++ { 0, 0, 1, 3, 12, 63, }, ++ { 2, 0, 1, 3, 12, 30, }, ++ { 1, 0, 1, 3, 12, 30, }, ++ { 0, 0, 1, 3, 13, 63, }, ++ { 2, 0, 1, 3, 13, 30, }, ++ { 1, 0, 1, 3, 13, 30, }, ++ { 0, 0, 1, 3, 14, 63, }, ++ { 2, 0, 1, 3, 14, 63, }, ++ { 1, 0, 1, 3, 14, 63, }, ++ { 0, 0, 1, 6, 1, 63, }, ++ { 2, 0, 1, 6, 1, 63, }, ++ { 1, 0, 1, 6, 1, 63, }, ++ { 0, 0, 1, 6, 2, 63, }, ++ { 2, 0, 1, 6, 2, 63, }, ++ { 1, 0, 1, 6, 2, 63, }, ++ { 0, 0, 1, 6, 3, 28, }, ++ { 2, 0, 1, 6, 3, 28, }, ++ { 1, 0, 1, 6, 3, 28, }, ++ { 0, 0, 1, 6, 4, 32, }, ++ { 2, 0, 1, 6, 4, 28, }, ++ { 1, 0, 1, 6, 4, 28, }, ++ { 0, 0, 1, 6, 5, 32, }, ++ { 2, 0, 1, 6, 5, 28, }, ++ { 1, 0, 1, 6, 5, 28, }, ++ { 0, 0, 1, 6, 6, 32, }, ++ { 2, 0, 1, 6, 6, 28, }, ++ { 1, 0, 1, 6, 6, 28, }, ++ { 0, 0, 1, 6, 7, 32, }, ++ { 2, 0, 1, 6, 7, 28, }, ++ { 1, 0, 1, 6, 7, 28, }, ++ { 0, 0, 1, 6, 8, 32, }, ++ { 2, 0, 1, 6, 8, 28, }, ++ { 1, 0, 1, 6, 8, 28, }, ++ { 0, 0, 1, 6, 9, 32, }, ++ { 2, 0, 1, 6, 9, 28, }, ++ { 1, 0, 1, 6, 9, 28, }, ++ { 0, 0, 1, 6, 10, 32, }, ++ { 2, 0, 1, 6, 10, 28, }, ++ { 1, 0, 1, 6, 10, 28, }, ++ { 0, 0, 1, 6, 11, 28, }, ++ { 2, 0, 1, 6, 11, 28, }, ++ { 1, 0, 1, 6, 11, 28, }, ++ { 0, 0, 1, 6, 12, 63, }, ++ { 2, 0, 1, 6, 12, 28, }, ++ { 1, 0, 1, 6, 12, 28, }, ++ { 0, 0, 1, 6, 13, 63, }, ++ { 2, 0, 1, 6, 13, 28, }, ++ { 1, 0, 1, 6, 13, 28, }, ++ { 0, 0, 1, 6, 14, 63, }, ++ { 2, 0, 1, 6, 14, 63, }, ++ { 1, 0, 1, 6, 14, 63, }, ++ { 0, 0, 1, 7, 1, 63, }, ++ { 2, 0, 1, 7, 1, 63, }, ++ { 1, 0, 1, 7, 1, 63, }, ++ { 0, 0, 1, 7, 2, 63, }, ++ { 2, 0, 1, 7, 2, 63, }, ++ { 1, 0, 1, 7, 2, 63, }, ++ { 0, 0, 1, 7, 3, 26, }, ++ { 2, 0, 1, 7, 3, 26, }, ++ { 1, 0, 1, 7, 3, 26, }, ++ { 0, 0, 1, 7, 4, 30, }, ++ { 2, 0, 1, 7, 4, 26, }, ++ { 1, 0, 1, 7, 4, 26, }, ++ { 0, 0, 1, 7, 5, 30, }, ++ { 2, 0, 1, 7, 5, 26, }, ++ { 1, 0, 1, 7, 5, 26, }, ++ { 0, 0, 1, 7, 6, 30, }, ++ { 2, 0, 1, 7, 6, 26, }, ++ { 1, 0, 1, 7, 6, 26, }, ++ { 0, 0, 1, 7, 7, 30, }, ++ { 2, 0, 1, 7, 7, 26, }, ++ { 1, 0, 1, 7, 7, 26, }, ++ { 0, 0, 1, 7, 8, 30, }, ++ { 2, 0, 1, 7, 8, 26, }, ++ { 1, 0, 1, 7, 8, 26, }, ++ { 0, 0, 1, 7, 9, 30, }, ++ { 2, 0, 1, 7, 9, 26, }, ++ { 1, 0, 1, 7, 9, 26, }, ++ { 0, 0, 1, 7, 10, 30, }, ++ { 2, 0, 1, 7, 10, 26, }, ++ { 1, 0, 1, 7, 10, 26, }, ++ { 0, 0, 1, 7, 11, 26, }, ++ { 2, 0, 1, 7, 11, 26, }, ++ { 1, 0, 1, 7, 11, 26, }, ++ { 0, 0, 1, 7, 12, 63, }, ++ { 2, 0, 1, 7, 12, 26, }, ++ { 1, 0, 1, 7, 12, 26, }, ++ { 0, 0, 1, 7, 13, 63, }, ++ { 2, 0, 1, 7, 13, 26, }, ++ { 1, 0, 1, 7, 13, 26, }, ++ { 0, 0, 1, 7, 14, 63, }, ++ { 2, 0, 1, 7, 14, 63, }, ++ { 1, 0, 1, 7, 14, 63, }, ++ { 0, 1, 0, 1, 36, 30, }, ++ { 2, 1, 0, 1, 36, 32, }, ++ { 1, 1, 0, 1, 36, 32, }, ++ { 0, 1, 0, 1, 40, 30, }, ++ { 2, 1, 0, 1, 40, 32, }, ++ { 1, 1, 0, 1, 40, 32, }, ++ { 0, 1, 0, 1, 44, 30, }, ++ { 2, 1, 0, 1, 44, 32, }, ++ { 1, 1, 0, 1, 44, 32, }, ++ { 0, 1, 0, 1, 48, 30, }, ++ { 2, 1, 0, 1, 48, 32, }, ++ { 1, 1, 0, 1, 48, 32, }, ++ { 0, 1, 0, 1, 52, 36, }, ++ { 2, 1, 0, 1, 52, 32, }, ++ { 1, 1, 0, 1, 52, 32, }, ++ { 0, 1, 0, 1, 56, 34, }, ++ { 2, 1, 0, 1, 56, 32, }, ++ { 1, 1, 0, 1, 56, 32, }, ++ { 0, 1, 0, 1, 60, 32, }, ++ { 2, 1, 0, 1, 60, 32, }, ++ { 1, 1, 0, 1, 60, 32, }, ++ { 0, 1, 0, 1, 64, 28, }, ++ { 2, 1, 0, 1, 64, 32, }, ++ { 1, 1, 0, 1, 64, 32, }, ++ { 0, 1, 0, 1, 100, 30, }, ++ { 2, 1, 0, 1, 100, 32, }, ++ { 1, 1, 0, 1, 100, 32, }, ++ { 0, 1, 0, 1, 104, 30, }, ++ { 2, 1, 0, 1, 104, 32, }, ++ { 1, 1, 0, 1, 104, 32, }, ++ { 0, 1, 0, 1, 108, 32, }, ++ { 2, 1, 0, 1, 108, 32, }, ++ { 1, 1, 0, 1, 108, 32, }, ++ { 0, 1, 0, 1, 112, 34, }, ++ { 2, 1, 0, 1, 112, 32, }, ++ { 1, 1, 0, 1, 112, 32, }, ++ { 0, 1, 0, 1, 116, 34, }, ++ { 2, 1, 0, 1, 116, 32, }, ++ { 1, 1, 0, 1, 116, 32, }, ++ { 0, 1, 0, 1, 120, 36, }, ++ { 2, 1, 0, 1, 120, 32, }, ++ { 1, 1, 0, 1, 120, 32, }, ++ { 0, 1, 0, 1, 124, 34, }, ++ { 2, 1, 0, 1, 124, 32, }, ++ { 1, 1, 0, 1, 124, 32, }, ++ { 0, 1, 0, 1, 128, 32, }, ++ { 2, 1, 0, 1, 128, 32, }, ++ { 1, 1, 0, 1, 128, 32, }, ++ { 0, 1, 0, 1, 132, 30, }, ++ { 2, 1, 0, 1, 132, 32, }, ++ { 1, 1, 0, 1, 132, 32, }, ++ { 0, 1, 0, 1, 136, 30, }, ++ { 2, 1, 0, 1, 136, 32, }, ++ { 1, 1, 0, 1, 136, 32, }, ++ { 0, 1, 0, 1, 140, 28, }, ++ { 2, 1, 0, 1, 140, 32, }, ++ { 1, 1, 0, 1, 140, 32, }, ++ { 0, 1, 0, 1, 149, 36, }, ++ { 2, 1, 0, 1, 149, 32, }, ++ { 1, 1, 0, 1, 149, 63, }, ++ { 0, 1, 0, 1, 153, 36, }, ++ { 2, 1, 0, 1, 153, 32, }, ++ { 1, 1, 0, 1, 153, 63, }, ++ { 0, 1, 0, 1, 157, 36, }, ++ { 2, 1, 0, 1, 157, 32, }, ++ { 1, 1, 0, 1, 157, 63, }, ++ { 0, 1, 0, 1, 161, 36, }, ++ { 2, 1, 0, 1, 161, 32, }, ++ { 1, 1, 0, 1, 161, 63, }, ++ { 0, 1, 0, 1, 165, 36, }, ++ { 2, 1, 0, 1, 165, 32, }, ++ { 1, 1, 0, 1, 165, 63, }, ++ { 0, 1, 0, 2, 36, 30, }, ++ { 2, 1, 0, 2, 36, 32, }, ++ { 1, 1, 0, 2, 36, 32, }, ++ { 0, 1, 0, 2, 40, 30, }, ++ { 2, 1, 0, 2, 40, 32, }, ++ { 1, 1, 0, 2, 40, 32, }, ++ { 0, 1, 0, 2, 44, 30, }, ++ { 2, 1, 0, 2, 44, 32, }, ++ { 1, 1, 0, 2, 44, 32, }, ++ { 0, 1, 0, 2, 48, 30, }, ++ { 2, 1, 0, 2, 48, 32, }, ++ { 1, 1, 0, 2, 48, 32, }, ++ { 0, 1, 0, 2, 52, 36, }, ++ { 2, 1, 0, 2, 52, 32, }, ++ { 1, 1, 0, 2, 52, 32, }, ++ { 0, 1, 0, 2, 56, 34, }, ++ { 2, 1, 0, 2, 56, 32, }, ++ { 1, 1, 0, 2, 56, 32, }, ++ { 0, 1, 0, 2, 60, 32, }, ++ { 2, 1, 0, 2, 60, 32, }, ++ { 1, 1, 0, 2, 60, 32, }, ++ { 0, 1, 0, 2, 64, 28, }, ++ { 2, 1, 0, 2, 64, 32, }, ++ { 1, 1, 0, 2, 64, 32, }, ++ { 0, 1, 0, 2, 100, 30, }, ++ { 2, 1, 0, 2, 100, 32, }, ++ { 1, 1, 0, 2, 100, 32, }, ++ { 0, 1, 0, 2, 104, 30, }, ++ { 2, 1, 0, 2, 104, 32, }, ++ { 1, 1, 0, 2, 104, 32, }, ++ { 0, 1, 0, 2, 108, 32, }, ++ { 2, 1, 0, 2, 108, 32, }, ++ { 1, 1, 0, 2, 108, 32, }, ++ { 0, 1, 0, 2, 112, 34, }, ++ { 2, 1, 0, 2, 112, 32, }, ++ { 1, 1, 0, 2, 112, 32, }, ++ { 0, 1, 0, 2, 116, 34, }, ++ { 2, 1, 0, 2, 116, 32, }, ++ { 1, 1, 0, 2, 116, 32, }, ++ { 0, 1, 0, 2, 120, 36, }, ++ { 2, 1, 0, 2, 120, 32, }, ++ { 1, 1, 0, 2, 120, 32, }, ++ { 0, 1, 0, 2, 124, 34, }, ++ { 2, 1, 0, 2, 124, 32, }, ++ { 1, 1, 0, 2, 124, 32, }, ++ { 0, 1, 0, 2, 128, 32, }, ++ { 2, 1, 0, 2, 128, 32, }, ++ { 1, 1, 0, 2, 128, 32, }, ++ { 0, 1, 0, 2, 132, 30, }, ++ { 2, 1, 0, 2, 132, 32, }, ++ { 1, 1, 0, 2, 132, 32, }, ++ { 0, 1, 0, 2, 136, 30, }, ++ { 2, 1, 0, 2, 136, 32, }, ++ { 1, 1, 0, 2, 136, 32, }, ++ { 0, 1, 0, 2, 140, 28, }, ++ { 2, 1, 0, 2, 140, 32, }, ++ { 1, 1, 0, 2, 140, 32, }, ++ { 0, 1, 0, 2, 149, 36, }, ++ { 2, 1, 0, 2, 149, 32, }, ++ { 1, 1, 0, 2, 149, 63, }, ++ { 0, 1, 0, 2, 153, 36, }, ++ { 2, 1, 0, 2, 153, 32, }, ++ { 1, 1, 0, 2, 153, 63, }, ++ { 0, 1, 0, 2, 157, 36, }, ++ { 2, 1, 0, 2, 157, 32, }, ++ { 1, 1, 0, 2, 157, 63, }, ++ { 0, 1, 0, 2, 161, 36, }, ++ { 2, 1, 0, 2, 161, 32, }, ++ { 1, 1, 0, 2, 161, 63, }, ++ { 0, 1, 0, 2, 165, 36, }, ++ { 2, 1, 0, 2, 165, 32, }, ++ { 1, 1, 0, 2, 165, 63, }, ++ { 0, 1, 0, 3, 36, 28, }, ++ { 2, 1, 0, 3, 36, 30, }, ++ { 1, 1, 0, 3, 36, 30, }, ++ { 0, 1, 0, 3, 40, 28, }, ++ { 2, 1, 0, 3, 40, 30, }, ++ { 1, 1, 0, 3, 40, 30, }, ++ { 0, 1, 0, 3, 44, 28, }, ++ { 2, 1, 0, 3, 44, 30, }, ++ { 1, 1, 0, 3, 44, 30, }, ++ { 0, 1, 0, 3, 48, 28, }, ++ { 2, 1, 0, 3, 48, 30, }, ++ { 1, 1, 0, 3, 48, 30, }, ++ { 0, 1, 0, 3, 52, 34, }, ++ { 2, 1, 0, 3, 52, 30, }, ++ { 1, 1, 0, 3, 52, 30, }, ++ { 0, 1, 0, 3, 56, 32, }, ++ { 2, 1, 0, 3, 56, 30, }, ++ { 1, 1, 0, 3, 56, 30, }, ++ { 0, 1, 0, 3, 60, 30, }, ++ { 2, 1, 0, 3, 60, 30, }, ++ { 1, 1, 0, 3, 60, 30, }, ++ { 0, 1, 0, 3, 64, 26, }, ++ { 2, 1, 0, 3, 64, 30, }, ++ { 1, 1, 0, 3, 64, 30, }, ++ { 0, 1, 0, 3, 100, 28, }, ++ { 2, 1, 0, 3, 100, 30, }, ++ { 1, 1, 0, 3, 100, 30, }, ++ { 0, 1, 0, 3, 104, 28, }, ++ { 2, 1, 0, 3, 104, 30, }, ++ { 1, 1, 0, 3, 104, 30, }, ++ { 0, 1, 0, 3, 108, 30, }, ++ { 2, 1, 0, 3, 108, 30, }, ++ { 1, 1, 0, 3, 108, 30, }, ++ { 0, 1, 0, 3, 112, 32, }, ++ { 2, 1, 0, 3, 112, 30, }, ++ { 1, 1, 0, 3, 112, 30, }, ++ { 0, 1, 0, 3, 116, 32, }, ++ { 2, 1, 0, 3, 116, 30, }, ++ { 1, 1, 0, 3, 116, 30, }, ++ { 0, 1, 0, 3, 120, 34, }, ++ { 2, 1, 0, 3, 120, 30, }, ++ { 1, 1, 0, 3, 120, 30, }, ++ { 0, 1, 0, 3, 124, 32, }, ++ { 2, 1, 0, 3, 124, 30, }, ++ { 1, 1, 0, 3, 124, 30, }, ++ { 0, 1, 0, 3, 128, 30, }, ++ { 2, 1, 0, 3, 128, 30, }, ++ { 1, 1, 0, 3, 128, 30, }, ++ { 0, 1, 0, 3, 132, 28, }, ++ { 2, 1, 0, 3, 132, 30, }, ++ { 1, 1, 0, 3, 132, 30, }, ++ { 0, 1, 0, 3, 136, 28, }, ++ { 2, 1, 0, 3, 136, 30, }, ++ { 1, 1, 0, 3, 136, 30, }, ++ { 0, 1, 0, 3, 140, 26, }, ++ { 2, 1, 0, 3, 140, 30, }, ++ { 1, 1, 0, 3, 140, 30, }, ++ { 0, 1, 0, 3, 149, 34, }, ++ { 2, 1, 0, 3, 149, 30, }, ++ { 1, 1, 0, 3, 149, 63, }, ++ { 0, 1, 0, 3, 153, 34, }, ++ { 2, 1, 0, 3, 153, 30, }, ++ { 1, 1, 0, 3, 153, 63, }, ++ { 0, 1, 0, 3, 157, 34, }, ++ { 2, 1, 0, 3, 157, 30, }, ++ { 1, 1, 0, 3, 157, 63, }, ++ { 0, 1, 0, 3, 161, 34, }, ++ { 2, 1, 0, 3, 161, 30, }, ++ { 1, 1, 0, 3, 161, 63, }, ++ { 0, 1, 0, 3, 165, 34, }, ++ { 2, 1, 0, 3, 165, 30, }, ++ { 1, 1, 0, 3, 165, 63, }, ++ { 0, 1, 0, 6, 36, 26, }, ++ { 2, 1, 0, 6, 36, 28, }, ++ { 1, 1, 0, 6, 36, 28, }, ++ { 0, 1, 0, 6, 40, 26, }, ++ { 2, 1, 0, 6, 40, 28, }, ++ { 1, 1, 0, 6, 40, 28, }, ++ { 0, 1, 0, 6, 44, 26, }, ++ { 2, 1, 0, 6, 44, 28, }, ++ { 1, 1, 0, 6, 44, 28, }, ++ { 0, 1, 0, 6, 48, 26, }, ++ { 2, 1, 0, 6, 48, 28, }, ++ { 1, 1, 0, 6, 48, 28, }, ++ { 0, 1, 0, 6, 52, 32, }, ++ { 2, 1, 0, 6, 52, 28, }, ++ { 1, 1, 0, 6, 52, 28, }, ++ { 0, 1, 0, 6, 56, 30, }, ++ { 2, 1, 0, 6, 56, 28, }, ++ { 1, 1, 0, 6, 56, 28, }, ++ { 0, 1, 0, 6, 60, 28, }, ++ { 2, 1, 0, 6, 60, 28, }, ++ { 1, 1, 0, 6, 60, 28, }, ++ { 0, 1, 0, 6, 64, 24, }, ++ { 2, 1, 0, 6, 64, 28, }, ++ { 1, 1, 0, 6, 64, 28, }, ++ { 0, 1, 0, 6, 100, 26, }, ++ { 2, 1, 0, 6, 100, 28, }, ++ { 1, 1, 0, 6, 100, 28, }, ++ { 0, 1, 0, 6, 104, 26, }, ++ { 2, 1, 0, 6, 104, 28, }, ++ { 1, 1, 0, 6, 104, 28, }, ++ { 0, 1, 0, 6, 108, 28, }, ++ { 2, 1, 0, 6, 108, 28, }, ++ { 1, 1, 0, 6, 108, 28, }, ++ { 0, 1, 0, 6, 112, 30, }, ++ { 2, 1, 0, 6, 112, 28, }, ++ { 1, 1, 0, 6, 112, 28, }, ++ { 0, 1, 0, 6, 116, 30, }, ++ { 2, 1, 0, 6, 116, 28, }, ++ { 1, 1, 0, 6, 116, 28, }, ++ { 0, 1, 0, 6, 120, 32, }, ++ { 2, 1, 0, 6, 120, 28, }, ++ { 1, 1, 0, 6, 120, 28, }, ++ { 0, 1, 0, 6, 124, 30, }, ++ { 2, 1, 0, 6, 124, 28, }, ++ { 1, 1, 0, 6, 124, 28, }, ++ { 0, 1, 0, 6, 128, 28, }, ++ { 2, 1, 0, 6, 128, 28, }, ++ { 1, 1, 0, 6, 128, 28, }, ++ { 0, 1, 0, 6, 132, 26, }, ++ { 2, 1, 0, 6, 132, 28, }, ++ { 1, 1, 0, 6, 132, 28, }, ++ { 0, 1, 0, 6, 136, 26, }, ++ { 2, 1, 0, 6, 136, 28, }, ++ { 1, 1, 0, 6, 136, 28, }, ++ { 0, 1, 0, 6, 140, 24, }, ++ { 2, 1, 0, 6, 140, 28, }, ++ { 1, 1, 0, 6, 140, 28, }, ++ { 0, 1, 0, 6, 149, 32, }, ++ { 2, 1, 0, 6, 149, 28, }, ++ { 1, 1, 0, 6, 149, 63, }, ++ { 0, 1, 0, 6, 153, 32, }, ++ { 2, 1, 0, 6, 153, 28, }, ++ { 1, 1, 0, 6, 153, 63, }, ++ { 0, 1, 0, 6, 157, 32, }, ++ { 2, 1, 0, 6, 157, 28, }, ++ { 1, 1, 0, 6, 157, 63, }, ++ { 0, 1, 0, 6, 161, 32, }, ++ { 2, 1, 0, 6, 161, 28, }, ++ { 1, 1, 0, 6, 161, 63, }, ++ { 0, 1, 0, 6, 165, 32, }, ++ { 2, 1, 0, 6, 165, 28, }, ++ { 1, 1, 0, 6, 165, 63, }, ++ { 0, 1, 0, 7, 36, 24, }, ++ { 2, 1, 0, 7, 36, 26, }, ++ { 1, 1, 0, 7, 36, 26, }, ++ { 0, 1, 0, 7, 40, 24, }, ++ { 2, 1, 0, 7, 40, 26, }, ++ { 1, 1, 0, 7, 40, 26, }, ++ { 0, 1, 0, 7, 44, 24, }, ++ { 2, 1, 0, 7, 44, 26, }, ++ { 1, 1, 0, 7, 44, 26, }, ++ { 0, 1, 0, 7, 48, 24, }, ++ { 2, 1, 0, 7, 48, 26, }, ++ { 1, 1, 0, 7, 48, 26, }, ++ { 0, 1, 0, 7, 52, 30, }, ++ { 2, 1, 0, 7, 52, 26, }, ++ { 1, 1, 0, 7, 52, 26, }, ++ { 0, 1, 0, 7, 56, 28, }, ++ { 2, 1, 0, 7, 56, 26, }, ++ { 1, 1, 0, 7, 56, 26, }, ++ { 0, 1, 0, 7, 60, 26, }, ++ { 2, 1, 0, 7, 60, 26, }, ++ { 1, 1, 0, 7, 60, 26, }, ++ { 0, 1, 0, 7, 64, 22, }, ++ { 2, 1, 0, 7, 64, 26, }, ++ { 1, 1, 0, 7, 64, 26, }, ++ { 0, 1, 0, 7, 100, 24, }, ++ { 2, 1, 0, 7, 100, 26, }, ++ { 1, 1, 0, 7, 100, 26, }, ++ { 0, 1, 0, 7, 104, 24, }, ++ { 2, 1, 0, 7, 104, 26, }, ++ { 1, 1, 0, 7, 104, 26, }, ++ { 0, 1, 0, 7, 108, 26, }, ++ { 2, 1, 0, 7, 108, 26, }, ++ { 1, 1, 0, 7, 108, 26, }, ++ { 0, 1, 0, 7, 112, 28, }, ++ { 2, 1, 0, 7, 112, 26, }, ++ { 1, 1, 0, 7, 112, 26, }, ++ { 0, 1, 0, 7, 116, 28, }, ++ { 2, 1, 0, 7, 116, 26, }, ++ { 1, 1, 0, 7, 116, 26, }, ++ { 0, 1, 0, 7, 120, 30, }, ++ { 2, 1, 0, 7, 120, 26, }, ++ { 1, 1, 0, 7, 120, 26, }, ++ { 0, 1, 0, 7, 124, 28, }, ++ { 2, 1, 0, 7, 124, 26, }, ++ { 1, 1, 0, 7, 124, 26, }, ++ { 0, 1, 0, 7, 128, 26, }, ++ { 2, 1, 0, 7, 128, 26, }, ++ { 1, 1, 0, 7, 128, 26, }, ++ { 0, 1, 0, 7, 132, 24, }, ++ { 2, 1, 0, 7, 132, 26, }, ++ { 1, 1, 0, 7, 132, 26, }, ++ { 0, 1, 0, 7, 136, 24, }, ++ { 2, 1, 0, 7, 136, 26, }, ++ { 1, 1, 0, 7, 136, 26, }, ++ { 0, 1, 0, 7, 140, 22, }, ++ { 2, 1, 0, 7, 140, 26, }, ++ { 1, 1, 0, 7, 140, 26, }, ++ { 0, 1, 0, 7, 149, 30, }, ++ { 2, 1, 0, 7, 149, 26, }, ++ { 1, 1, 0, 7, 149, 63, }, ++ { 0, 1, 0, 7, 153, 30, }, ++ { 2, 1, 0, 7, 153, 26, }, ++ { 1, 1, 0, 7, 153, 63, }, ++ { 0, 1, 0, 7, 157, 30, }, ++ { 2, 1, 0, 7, 157, 26, }, ++ { 1, 1, 0, 7, 157, 63, }, ++ { 0, 1, 0, 7, 161, 30, }, ++ { 2, 1, 0, 7, 161, 26, }, ++ { 1, 1, 0, 7, 161, 63, }, ++ { 0, 1, 0, 7, 165, 30, }, ++ { 2, 1, 0, 7, 165, 26, }, ++ { 1, 1, 0, 7, 165, 63, }, ++ { 0, 1, 1, 2, 38, 30, }, ++ { 2, 1, 1, 2, 38, 32, }, ++ { 1, 1, 1, 2, 38, 32, }, ++ { 0, 1, 1, 2, 46, 30, }, ++ { 2, 1, 1, 2, 46, 32, }, ++ { 1, 1, 1, 2, 46, 32, }, ++ { 0, 1, 1, 2, 54, 32, }, ++ { 2, 1, 1, 2, 54, 32, }, ++ { 1, 1, 1, 2, 54, 32, }, ++ { 0, 1, 1, 2, 62, 32, }, ++ { 2, 1, 1, 2, 62, 32, }, ++ { 1, 1, 1, 2, 62, 32, }, ++ { 0, 1, 1, 2, 102, 28, }, ++ { 2, 1, 1, 2, 102, 32, }, ++ { 1, 1, 1, 2, 102, 32, }, ++ { 0, 1, 1, 2, 110, 32, }, ++ { 2, 1, 1, 2, 110, 32, }, ++ { 1, 1, 1, 2, 110, 32, }, ++ { 0, 1, 1, 2, 118, 36, }, ++ { 2, 1, 1, 2, 118, 32, }, ++ { 1, 1, 1, 2, 118, 32, }, ++ { 0, 1, 1, 2, 126, 34, }, ++ { 2, 1, 1, 2, 126, 32, }, ++ { 1, 1, 1, 2, 126, 32, }, ++ { 0, 1, 1, 2, 134, 32, }, ++ { 2, 1, 1, 2, 134, 32, }, ++ { 1, 1, 1, 2, 134, 32, }, ++ { 0, 1, 1, 2, 151, 36, }, ++ { 2, 1, 1, 2, 151, 32, }, ++ { 1, 1, 1, 2, 151, 63, }, ++ { 0, 1, 1, 2, 159, 36, }, ++ { 2, 1, 1, 2, 159, 32, }, ++ { 1, 1, 1, 2, 159, 63, }, ++ { 0, 1, 1, 3, 38, 28, }, ++ { 2, 1, 1, 3, 38, 30, }, ++ { 1, 1, 1, 3, 38, 30, }, ++ { 0, 1, 1, 3, 46, 28, }, ++ { 2, 1, 1, 3, 46, 30, }, ++ { 1, 1, 1, 3, 46, 30, }, ++ { 0, 1, 1, 3, 54, 30, }, ++ { 2, 1, 1, 3, 54, 30, }, ++ { 1, 1, 1, 3, 54, 30, }, ++ { 0, 1, 1, 3, 62, 30, }, ++ { 2, 1, 1, 3, 62, 30, }, ++ { 1, 1, 1, 3, 62, 30, }, ++ { 0, 1, 1, 3, 102, 26, }, ++ { 2, 1, 1, 3, 102, 30, }, ++ { 1, 1, 1, 3, 102, 30, }, ++ { 0, 1, 1, 3, 110, 30, }, ++ { 2, 1, 1, 3, 110, 30, }, ++ { 1, 1, 1, 3, 110, 30, }, ++ { 0, 1, 1, 3, 118, 34, }, ++ { 2, 1, 1, 3, 118, 30, }, ++ { 1, 1, 1, 3, 118, 30, }, ++ { 0, 1, 1, 3, 126, 32, }, ++ { 2, 1, 1, 3, 126, 30, }, ++ { 1, 1, 1, 3, 126, 30, }, ++ { 0, 1, 1, 3, 134, 30, }, ++ { 2, 1, 1, 3, 134, 30, }, ++ { 1, 1, 1, 3, 134, 30, }, ++ { 0, 1, 1, 3, 151, 34, }, ++ { 2, 1, 1, 3, 151, 30, }, ++ { 1, 1, 1, 3, 151, 63, }, ++ { 0, 1, 1, 3, 159, 34, }, ++ { 2, 1, 1, 3, 159, 30, }, ++ { 1, 1, 1, 3, 159, 63, }, ++ { 0, 1, 1, 6, 38, 26, }, ++ { 2, 1, 1, 6, 38, 28, }, ++ { 1, 1, 1, 6, 38, 28, }, ++ { 0, 1, 1, 6, 46, 26, }, ++ { 2, 1, 1, 6, 46, 28, }, ++ { 1, 1, 1, 6, 46, 28, }, ++ { 0, 1, 1, 6, 54, 28, }, ++ { 2, 1, 1, 6, 54, 28, }, ++ { 1, 1, 1, 6, 54, 28, }, ++ { 0, 1, 1, 6, 62, 28, }, ++ { 2, 1, 1, 6, 62, 28, }, ++ { 1, 1, 1, 6, 62, 28, }, ++ { 0, 1, 1, 6, 102, 24, }, ++ { 2, 1, 1, 6, 102, 28, }, ++ { 1, 1, 1, 6, 102, 28, }, ++ { 0, 1, 1, 6, 110, 28, }, ++ { 2, 1, 1, 6, 110, 28, }, ++ { 1, 1, 1, 6, 110, 28, }, ++ { 0, 1, 1, 6, 118, 32, }, ++ { 2, 1, 1, 6, 118, 28, }, ++ { 1, 1, 1, 6, 118, 28, }, ++ { 0, 1, 1, 6, 126, 30, }, ++ { 2, 1, 1, 6, 126, 28, }, ++ { 1, 1, 1, 6, 126, 28, }, ++ { 0, 1, 1, 6, 134, 28, }, ++ { 2, 1, 1, 6, 134, 28, }, ++ { 1, 1, 1, 6, 134, 28, }, ++ { 0, 1, 1, 6, 151, 32, }, ++ { 2, 1, 1, 6, 151, 28, }, ++ { 1, 1, 1, 6, 151, 63, }, ++ { 0, 1, 1, 6, 159, 32, }, ++ { 2, 1, 1, 6, 159, 28, }, ++ { 1, 1, 1, 6, 159, 63, }, ++ { 0, 1, 1, 7, 38, 24, }, ++ { 2, 1, 1, 7, 38, 26, }, ++ { 1, 1, 1, 7, 38, 26, }, ++ { 0, 1, 1, 7, 46, 24, }, ++ { 2, 1, 1, 7, 46, 26, }, ++ { 1, 1, 1, 7, 46, 26, }, ++ { 0, 1, 1, 7, 54, 26, }, ++ { 2, 1, 1, 7, 54, 26, }, ++ { 1, 1, 1, 7, 54, 26, }, ++ { 0, 1, 1, 7, 62, 26, }, ++ { 2, 1, 1, 7, 62, 26, }, ++ { 1, 1, 1, 7, 62, 26, }, ++ { 0, 1, 1, 7, 102, 22, }, ++ { 2, 1, 1, 7, 102, 26, }, ++ { 1, 1, 1, 7, 102, 26, }, ++ { 0, 1, 1, 7, 110, 26, }, ++ { 2, 1, 1, 7, 110, 26, }, ++ { 1, 1, 1, 7, 110, 26, }, ++ { 0, 1, 1, 7, 118, 30, }, ++ { 2, 1, 1, 7, 118, 26, }, ++ { 1, 1, 1, 7, 118, 26, }, ++ { 0, 1, 1, 7, 126, 28, }, ++ { 2, 1, 1, 7, 126, 26, }, ++ { 1, 1, 1, 7, 126, 26, }, ++ { 0, 1, 1, 7, 134, 26, }, ++ { 2, 1, 1, 7, 134, 26, }, ++ { 1, 1, 1, 7, 134, 26, }, ++ { 0, 1, 1, 7, 151, 30, }, ++ { 2, 1, 1, 7, 151, 26, }, ++ { 1, 1, 1, 7, 151, 63, }, ++ { 0, 1, 1, 7, 159, 30, }, ++ { 2, 1, 1, 7, 159, 26, }, ++ { 1, 1, 1, 7, 159, 63, }, ++ { 0, 1, 2, 4, 42, 30, }, ++ { 2, 1, 2, 4, 42, 32, }, ++ { 1, 1, 2, 4, 42, 32, }, ++ { 0, 1, 2, 4, 58, 28, }, ++ { 2, 1, 2, 4, 58, 32, }, ++ { 1, 1, 2, 4, 58, 32, }, ++ { 0, 1, 2, 4, 106, 30, }, ++ { 2, 1, 2, 4, 106, 32, }, ++ { 1, 1, 2, 4, 106, 32, }, ++ { 0, 1, 2, 4, 122, 34, }, ++ { 2, 1, 2, 4, 122, 32, }, ++ { 1, 1, 2, 4, 122, 32, }, ++ { 0, 1, 2, 4, 155, 36, }, ++ { 2, 1, 2, 4, 155, 32, }, ++ { 1, 1, 2, 4, 155, 63, }, ++ { 0, 1, 2, 5, 42, 28, }, ++ { 2, 1, 2, 5, 42, 30, }, ++ { 1, 1, 2, 5, 42, 30, }, ++ { 0, 1, 2, 5, 58, 26, }, ++ { 2, 1, 2, 5, 58, 30, }, ++ { 1, 1, 2, 5, 58, 30, }, ++ { 0, 1, 2, 5, 106, 28, }, ++ { 2, 1, 2, 5, 106, 30, }, ++ { 1, 1, 2, 5, 106, 30, }, ++ { 0, 1, 2, 5, 122, 32, }, ++ { 2, 1, 2, 5, 122, 30, }, ++ { 1, 1, 2, 5, 122, 30, }, ++ { 0, 1, 2, 5, 155, 34, }, ++ { 2, 1, 2, 5, 155, 30, }, ++ { 1, 1, 2, 5, 155, 63, }, ++ { 0, 1, 2, 8, 42, 26, }, ++ { 2, 1, 2, 8, 42, 28, }, ++ { 1, 1, 2, 8, 42, 28, }, ++ { 0, 1, 2, 8, 58, 24, }, ++ { 2, 1, 2, 8, 58, 28, }, ++ { 1, 1, 2, 8, 58, 28, }, ++ { 0, 1, 2, 8, 106, 26, }, ++ { 2, 1, 2, 8, 106, 28, }, ++ { 1, 1, 2, 8, 106, 28, }, ++ { 0, 1, 2, 8, 122, 30, }, ++ { 2, 1, 2, 8, 122, 28, }, ++ { 1, 1, 2, 8, 122, 28, }, ++ { 0, 1, 2, 8, 155, 32, }, ++ { 2, 1, 2, 8, 155, 28, }, ++ { 1, 1, 2, 8, 155, 63, }, ++ { 0, 1, 2, 9, 42, 24, }, ++ { 2, 1, 2, 9, 42, 26, }, ++ { 1, 1, 2, 9, 42, 26, }, ++ { 0, 1, 2, 9, 58, 22, }, ++ { 2, 1, 2, 9, 58, 26, }, ++ { 1, 1, 2, 9, 58, 26, }, ++ { 0, 1, 2, 9, 106, 24, }, ++ { 2, 1, 2, 9, 106, 26, }, ++ { 1, 1, 2, 9, 106, 26, }, ++ { 0, 1, 2, 9, 122, 28, }, ++ { 2, 1, 2, 9, 122, 26, }, ++ { 1, 1, 2, 9, 122, 26, }, ++ { 0, 1, 2, 9, 155, 30, }, ++ { 2, 1, 2, 9, 155, 26, }, ++ { 1, 1, 2, 9, 155, 63, }, ++}; ++ ++RTW_DECL_TABLE_TXPWR_LMT(rtw8814a_txpwr_lmt); ++ ++static const struct rtw_txpwr_lmt_cfg_pair rtw8814a_txpwr_lmt_type0[] = { ++ { 0, 0, 0, 0, 1, 32, }, ++ { 2, 0, 0, 0, 1, 32, }, ++ { 1, 0, 0, 0, 1, 32, }, ++ { 0, 0, 0, 0, 2, 32, }, ++ { 2, 0, 0, 0, 2, 32, }, ++ { 1, 0, 0, 0, 2, 32, }, ++ { 0, 0, 0, 0, 3, 32, }, ++ { 2, 0, 0, 0, 3, 32, }, ++ { 1, 0, 0, 0, 3, 32, }, ++ { 0, 0, 0, 0, 4, 32, }, ++ { 2, 0, 0, 0, 4, 32, }, ++ { 1, 0, 0, 0, 4, 32, }, ++ { 0, 0, 0, 0, 5, 32, }, ++ { 2, 0, 0, 0, 5, 32, }, ++ { 1, 0, 0, 0, 5, 32, }, ++ { 0, 0, 0, 0, 6, 32, }, ++ { 2, 0, 0, 0, 6, 32, }, ++ { 1, 0, 0, 0, 6, 32, }, ++ { 0, 0, 0, 0, 7, 32, }, ++ { 2, 0, 0, 0, 7, 32, }, ++ { 1, 0, 0, 0, 7, 32, }, ++ { 0, 0, 0, 0, 8, 32, }, ++ { 2, 0, 0, 0, 8, 32, }, ++ { 1, 0, 0, 0, 8, 32, }, ++ { 0, 0, 0, 0, 9, 32, }, ++ { 2, 0, 0, 0, 9, 32, }, ++ { 1, 0, 0, 0, 9, 32, }, ++ { 0, 0, 0, 0, 10, 32, }, ++ { 2, 0, 0, 0, 10, 32, }, ++ { 1, 0, 0, 0, 10, 32, }, ++ { 0, 0, 0, 0, 11, 32, }, ++ { 2, 0, 0, 0, 11, 32, }, ++ { 1, 0, 0, 0, 11, 32, }, ++ { 0, 0, 0, 0, 12, 24, }, ++ { 2, 0, 0, 0, 12, 32, }, ++ { 1, 0, 0, 0, 12, 32, }, ++ { 0, 0, 0, 0, 13, 16, }, ++ { 2, 0, 0, 0, 13, 32, }, ++ { 1, 0, 0, 0, 13, 32, }, ++ { 0, 0, 0, 0, 14, 63, }, ++ { 2, 0, 0, 0, 14, 63, }, ++ { 1, 0, 0, 0, 14, 32, }, ++ { 0, 0, 0, 1, 1, 28, }, ++ { 2, 0, 0, 1, 1, 32, }, ++ { 1, 0, 0, 1, 1, 32, }, ++ { 0, 0, 0, 1, 2, 32, }, ++ { 2, 0, 0, 1, 2, 32, }, ++ { 1, 0, 0, 1, 2, 32, }, ++ { 0, 0, 0, 1, 3, 32, }, ++ { 2, 0, 0, 1, 3, 32, }, ++ { 1, 0, 0, 1, 3, 32, }, ++ { 0, 0, 0, 1, 4, 32, }, ++ { 2, 0, 0, 1, 4, 32, }, ++ { 1, 0, 0, 1, 4, 32, }, ++ { 0, 0, 0, 1, 5, 32, }, ++ { 2, 0, 0, 1, 5, 32, }, ++ { 1, 0, 0, 1, 5, 32, }, ++ { 0, 0, 0, 1, 6, 32, }, ++ { 2, 0, 0, 1, 6, 32, }, ++ { 1, 0, 0, 1, 6, 32, }, ++ { 0, 0, 0, 1, 7, 32, }, ++ { 2, 0, 0, 1, 7, 32, }, ++ { 1, 0, 0, 1, 7, 32, }, ++ { 0, 0, 0, 1, 8, 32, }, ++ { 2, 0, 0, 1, 8, 32, }, ++ { 1, 0, 0, 1, 8, 32, }, ++ { 0, 0, 0, 1, 9, 32, }, ++ { 2, 0, 0, 1, 9, 32, }, ++ { 1, 0, 0, 1, 9, 32, }, ++ { 0, 0, 0, 1, 10, 32, }, ++ { 2, 0, 0, 1, 10, 32, }, ++ { 1, 0, 0, 1, 10, 32, }, ++ { 0, 0, 0, 1, 11, 28, }, ++ { 2, 0, 0, 1, 11, 32, }, ++ { 1, 0, 0, 1, 11, 32, }, ++ { 0, 0, 0, 1, 12, 18, }, ++ { 2, 0, 0, 1, 12, 32, }, ++ { 1, 0, 0, 1, 12, 32, }, ++ { 0, 0, 0, 1, 13, 8, }, ++ { 2, 0, 0, 1, 13, 32, }, ++ { 1, 0, 0, 1, 13, 32, }, ++ { 0, 0, 0, 1, 14, 63, }, ++ { 2, 0, 0, 1, 14, 63, }, ++ { 1, 0, 0, 1, 14, 63, }, ++ { 0, 0, 0, 2, 1, 26, }, ++ { 2, 0, 0, 2, 1, 32, }, ++ { 1, 0, 0, 2, 1, 32, }, ++ { 0, 0, 0, 2, 2, 32, }, ++ { 2, 0, 0, 2, 2, 32, }, ++ { 1, 0, 0, 2, 2, 32, }, ++ { 0, 0, 0, 2, 3, 32, }, ++ { 2, 0, 0, 2, 3, 32, }, ++ { 1, 0, 0, 2, 3, 32, }, ++ { 0, 0, 0, 2, 4, 32, }, ++ { 2, 0, 0, 2, 4, 32, }, ++ { 1, 0, 0, 2, 4, 32, }, ++ { 0, 0, 0, 2, 5, 32, }, ++ { 2, 0, 0, 2, 5, 32, }, ++ { 1, 0, 0, 2, 5, 32, }, ++ { 0, 0, 0, 2, 6, 32, }, ++ { 2, 0, 0, 2, 6, 32, }, ++ { 1, 0, 0, 2, 6, 32, }, ++ { 0, 0, 0, 2, 7, 32, }, ++ { 2, 0, 0, 2, 7, 32, }, ++ { 1, 0, 0, 2, 7, 32, }, ++ { 0, 0, 0, 2, 8, 32, }, ++ { 2, 0, 0, 2, 8, 32, }, ++ { 1, 0, 0, 2, 8, 32, }, ++ { 0, 0, 0, 2, 9, 32, }, ++ { 2, 0, 0, 2, 9, 32, }, ++ { 1, 0, 0, 2, 9, 32, }, ++ { 0, 0, 0, 2, 10, 32, }, ++ { 2, 0, 0, 2, 10, 32, }, ++ { 1, 0, 0, 2, 10, 32, }, ++ { 0, 0, 0, 2, 11, 26, }, ++ { 2, 0, 0, 2, 11, 32, }, ++ { 1, 0, 0, 2, 11, 32, }, ++ { 0, 0, 0, 2, 12, 16, }, ++ { 2, 0, 0, 2, 12, 32, }, ++ { 1, 0, 0, 2, 12, 32, }, ++ { 0, 0, 0, 2, 13, 6, }, ++ { 2, 0, 0, 2, 13, 32, }, ++ { 1, 0, 0, 2, 13, 32, }, ++ { 0, 0, 0, 2, 14, 63, }, ++ { 2, 0, 0, 2, 14, 63, }, ++ { 1, 0, 0, 2, 14, 63, }, ++ { 0, 0, 0, 3, 1, 24, }, ++ { 2, 0, 0, 3, 1, 30, }, ++ { 1, 0, 0, 3, 1, 30, }, ++ { 0, 0, 0, 3, 2, 30, }, ++ { 2, 0, 0, 3, 2, 30, }, ++ { 1, 0, 0, 3, 2, 30, }, ++ { 0, 0, 0, 3, 3, 30, }, ++ { 2, 0, 0, 3, 3, 30, }, ++ { 1, 0, 0, 3, 3, 30, }, ++ { 0, 0, 0, 3, 4, 30, }, ++ { 2, 0, 0, 3, 4, 30, }, ++ { 1, 0, 0, 3, 4, 30, }, ++ { 0, 0, 0, 3, 5, 30, }, ++ { 2, 0, 0, 3, 5, 30, }, ++ { 1, 0, 0, 3, 5, 30, }, ++ { 0, 0, 0, 3, 6, 30, }, ++ { 2, 0, 0, 3, 6, 30, }, ++ { 1, 0, 0, 3, 6, 30, }, ++ { 0, 0, 0, 3, 7, 30, }, ++ { 2, 0, 0, 3, 7, 30, }, ++ { 1, 0, 0, 3, 7, 30, }, ++ { 0, 0, 0, 3, 8, 30, }, ++ { 2, 0, 0, 3, 8, 30, }, ++ { 1, 0, 0, 3, 8, 30, }, ++ { 0, 0, 0, 3, 9, 30, }, ++ { 2, 0, 0, 3, 9, 30, }, ++ { 1, 0, 0, 3, 9, 30, }, ++ { 0, 0, 0, 3, 10, 30, }, ++ { 2, 0, 0, 3, 10, 30, }, ++ { 1, 0, 0, 3, 10, 30, }, ++ { 0, 0, 0, 3, 11, 24, }, ++ { 2, 0, 0, 3, 11, 30, }, ++ { 1, 0, 0, 3, 11, 30, }, ++ { 0, 0, 0, 3, 12, 14, }, ++ { 2, 0, 0, 3, 12, 30, }, ++ { 1, 0, 0, 3, 12, 30, }, ++ { 0, 0, 0, 3, 13, 4, }, ++ { 2, 0, 0, 3, 13, 30, }, ++ { 1, 0, 0, 3, 13, 30, }, ++ { 0, 0, 0, 3, 14, 63, }, ++ { 2, 0, 0, 3, 14, 63, }, ++ { 1, 0, 0, 3, 14, 63, }, ++ { 0, 0, 0, 6, 1, 22, }, ++ { 2, 0, 0, 6, 1, 28, }, ++ { 1, 0, 0, 6, 1, 28, }, ++ { 0, 0, 0, 6, 2, 28, }, ++ { 2, 0, 0, 6, 2, 28, }, ++ { 1, 0, 0, 6, 2, 28, }, ++ { 0, 0, 0, 6, 3, 28, }, ++ { 2, 0, 0, 6, 3, 28, }, ++ { 1, 0, 0, 6, 3, 28, }, ++ { 0, 0, 0, 6, 4, 28, }, ++ { 2, 0, 0, 6, 4, 28, }, ++ { 1, 0, 0, 6, 4, 28, }, ++ { 0, 0, 0, 6, 5, 28, }, ++ { 2, 0, 0, 6, 5, 28, }, ++ { 1, 0, 0, 6, 5, 28, }, ++ { 0, 0, 0, 6, 6, 28, }, ++ { 2, 0, 0, 6, 6, 28, }, ++ { 1, 0, 0, 6, 6, 28, }, ++ { 0, 0, 0, 6, 7, 28, }, ++ { 2, 0, 0, 6, 7, 28, }, ++ { 1, 0, 0, 6, 7, 28, }, ++ { 0, 0, 0, 6, 8, 28, }, ++ { 2, 0, 0, 6, 8, 28, }, ++ { 1, 0, 0, 6, 8, 28, }, ++ { 0, 0, 0, 6, 9, 28, }, ++ { 2, 0, 0, 6, 9, 28, }, ++ { 1, 0, 0, 6, 9, 28, }, ++ { 0, 0, 0, 6, 10, 28, }, ++ { 2, 0, 0, 6, 10, 28, }, ++ { 1, 0, 0, 6, 10, 28, }, ++ { 0, 0, 0, 6, 11, 22, }, ++ { 2, 0, 0, 6, 11, 28, }, ++ { 1, 0, 0, 6, 11, 28, }, ++ { 0, 0, 0, 6, 12, 14, }, ++ { 2, 0, 0, 6, 12, 28, }, ++ { 1, 0, 0, 6, 12, 28, }, ++ { 0, 0, 0, 6, 13, 4, }, ++ { 2, 0, 0, 6, 13, 28, }, ++ { 1, 0, 0, 6, 13, 28, }, ++ { 0, 0, 0, 6, 14, 63, }, ++ { 2, 0, 0, 6, 14, 63, }, ++ { 1, 0, 0, 6, 14, 63, }, ++ { 0, 0, 0, 7, 1, 20, }, ++ { 2, 0, 0, 7, 1, 26, }, ++ { 1, 0, 0, 7, 1, 26, }, ++ { 0, 0, 0, 7, 2, 26, }, ++ { 2, 0, 0, 7, 2, 26, }, ++ { 1, 0, 0, 7, 2, 26, }, ++ { 0, 0, 0, 7, 3, 26, }, ++ { 2, 0, 0, 7, 3, 26, }, ++ { 1, 0, 0, 7, 3, 26, }, ++ { 0, 0, 0, 7, 4, 26, }, ++ { 2, 0, 0, 7, 4, 26, }, ++ { 1, 0, 0, 7, 4, 26, }, ++ { 0, 0, 0, 7, 5, 26, }, ++ { 2, 0, 0, 7, 5, 26, }, ++ { 1, 0, 0, 7, 5, 26, }, ++ { 0, 0, 0, 7, 6, 26, }, ++ { 2, 0, 0, 7, 6, 26, }, ++ { 1, 0, 0, 7, 6, 26, }, ++ { 0, 0, 0, 7, 7, 26, }, ++ { 2, 0, 0, 7, 7, 26, }, ++ { 1, 0, 0, 7, 7, 26, }, ++ { 0, 0, 0, 7, 8, 26, }, ++ { 2, 0, 0, 7, 8, 26, }, ++ { 1, 0, 0, 7, 8, 26, }, ++ { 0, 0, 0, 7, 9, 26, }, ++ { 2, 0, 0, 7, 9, 26, }, ++ { 1, 0, 0, 7, 9, 26, }, ++ { 0, 0, 0, 7, 10, 26, }, ++ { 2, 0, 0, 7, 10, 26, }, ++ { 1, 0, 0, 7, 10, 26, }, ++ { 0, 0, 0, 7, 11, 20, }, ++ { 2, 0, 0, 7, 11, 26, }, ++ { 1, 0, 0, 7, 11, 26, }, ++ { 0, 0, 0, 7, 12, 14, }, ++ { 2, 0, 0, 7, 12, 26, }, ++ { 1, 0, 0, 7, 12, 26, }, ++ { 0, 0, 0, 7, 13, 4, }, ++ { 2, 0, 0, 7, 13, 26, }, ++ { 1, 0, 0, 7, 13, 26, }, ++ { 0, 0, 0, 7, 14, 63, }, ++ { 2, 0, 0, 7, 14, 63, }, ++ { 1, 0, 0, 7, 14, 63, }, ++ { 0, 0, 1, 2, 1, 63, }, ++ { 2, 0, 1, 2, 1, 63, }, ++ { 1, 0, 1, 2, 1, 63, }, ++ { 0, 0, 1, 2, 2, 63, }, ++ { 2, 0, 1, 2, 2, 63, }, ++ { 1, 0, 1, 2, 2, 63, }, ++ { 0, 0, 1, 2, 3, 26, }, ++ { 2, 0, 1, 2, 3, 32, }, ++ { 1, 0, 1, 2, 3, 32, }, ++ { 0, 0, 1, 2, 4, 32, }, ++ { 2, 0, 1, 2, 4, 32, }, ++ { 1, 0, 1, 2, 4, 32, }, ++ { 0, 0, 1, 2, 5, 32, }, ++ { 2, 0, 1, 2, 5, 32, }, ++ { 1, 0, 1, 2, 5, 32, }, ++ { 0, 0, 1, 2, 6, 32, }, ++ { 2, 0, 1, 2, 6, 32, }, ++ { 1, 0, 1, 2, 6, 32, }, ++ { 0, 0, 1, 2, 7, 32, }, ++ { 2, 0, 1, 2, 7, 32, }, ++ { 1, 0, 1, 2, 7, 32, }, ++ { 0, 0, 1, 2, 8, 32, }, ++ { 2, 0, 1, 2, 8, 32, }, ++ { 1, 0, 1, 2, 8, 32, }, ++ { 0, 0, 1, 2, 9, 32, }, ++ { 2, 0, 1, 2, 9, 32, }, ++ { 1, 0, 1, 2, 9, 32, }, ++ { 0, 0, 1, 2, 10, 32, }, ++ { 2, 0, 1, 2, 10, 32, }, ++ { 1, 0, 1, 2, 10, 32, }, ++ { 0, 0, 1, 2, 11, 26, }, ++ { 2, 0, 1, 2, 11, 32, }, ++ { 1, 0, 1, 2, 11, 32, }, ++ { 0, 0, 1, 2, 12, 16, }, ++ { 2, 0, 1, 2, 12, 32, }, ++ { 1, 0, 1, 2, 12, 32, }, ++ { 0, 0, 1, 2, 13, 10, }, ++ { 2, 0, 1, 2, 13, 32, }, ++ { 1, 0, 1, 2, 13, 32, }, ++ { 0, 0, 1, 2, 14, 63, }, ++ { 2, 0, 1, 2, 14, 63, }, ++ { 1, 0, 1, 2, 14, 63, }, ++ { 0, 0, 1, 3, 1, 63, }, ++ { 2, 0, 1, 3, 1, 63, }, ++ { 1, 0, 1, 3, 1, 63, }, ++ { 0, 0, 1, 3, 2, 63, }, ++ { 2, 0, 1, 3, 2, 63, }, ++ { 1, 0, 1, 3, 2, 63, }, ++ { 0, 0, 1, 3, 3, 24, }, ++ { 2, 0, 1, 3, 3, 30, }, ++ { 1, 0, 1, 3, 3, 30, }, ++ { 0, 0, 1, 3, 4, 30, }, ++ { 2, 0, 1, 3, 4, 30, }, ++ { 1, 0, 1, 3, 4, 30, }, ++ { 0, 0, 1, 3, 5, 30, }, ++ { 2, 0, 1, 3, 5, 30, }, ++ { 1, 0, 1, 3, 5, 30, }, ++ { 0, 0, 1, 3, 6, 30, }, ++ { 2, 0, 1, 3, 6, 30, }, ++ { 1, 0, 1, 3, 6, 30, }, ++ { 0, 0, 1, 3, 7, 30, }, ++ { 2, 0, 1, 3, 7, 30, }, ++ { 1, 0, 1, 3, 7, 30, }, ++ { 0, 0, 1, 3, 8, 30, }, ++ { 2, 0, 1, 3, 8, 30, }, ++ { 1, 0, 1, 3, 8, 30, }, ++ { 0, 0, 1, 3, 9, 30, }, ++ { 2, 0, 1, 3, 9, 30, }, ++ { 1, 0, 1, 3, 9, 30, }, ++ { 0, 0, 1, 3, 10, 30, }, ++ { 2, 0, 1, 3, 10, 30, }, ++ { 1, 0, 1, 3, 10, 30, }, ++ { 0, 0, 1, 3, 11, 24, }, ++ { 2, 0, 1, 3, 11, 30, }, ++ { 1, 0, 1, 3, 11, 30, }, ++ { 0, 0, 1, 3, 12, 14, }, ++ { 2, 0, 1, 3, 12, 30, }, ++ { 1, 0, 1, 3, 12, 30, }, ++ { 0, 0, 1, 3, 13, 8, }, ++ { 2, 0, 1, 3, 13, 30, }, ++ { 1, 0, 1, 3, 13, 30, }, ++ { 0, 0, 1, 3, 14, 63, }, ++ { 2, 0, 1, 3, 14, 63, }, ++ { 1, 0, 1, 3, 14, 63, }, ++ { 0, 0, 1, 6, 1, 63, }, ++ { 2, 0, 1, 6, 1, 63, }, ++ { 1, 0, 1, 6, 1, 63, }, ++ { 0, 0, 1, 6, 2, 63, }, ++ { 2, 0, 1, 6, 2, 63, }, ++ { 1, 0, 1, 6, 2, 63, }, ++ { 0, 0, 1, 6, 3, 22, }, ++ { 2, 0, 1, 6, 3, 28, }, ++ { 1, 0, 1, 6, 3, 28, }, ++ { 0, 0, 1, 6, 4, 28, }, ++ { 2, 0, 1, 6, 4, 28, }, ++ { 1, 0, 1, 6, 4, 28, }, ++ { 0, 0, 1, 6, 5, 28, }, ++ { 2, 0, 1, 6, 5, 28, }, ++ { 1, 0, 1, 6, 5, 28, }, ++ { 0, 0, 1, 6, 6, 28, }, ++ { 2, 0, 1, 6, 6, 28, }, ++ { 1, 0, 1, 6, 6, 28, }, ++ { 0, 0, 1, 6, 7, 28, }, ++ { 2, 0, 1, 6, 7, 28, }, ++ { 1, 0, 1, 6, 7, 28, }, ++ { 0, 0, 1, 6, 8, 28, }, ++ { 2, 0, 1, 6, 8, 28, }, ++ { 1, 0, 1, 6, 8, 28, }, ++ { 0, 0, 1, 6, 9, 28, }, ++ { 2, 0, 1, 6, 9, 28, }, ++ { 1, 0, 1, 6, 9, 28, }, ++ { 0, 0, 1, 6, 10, 28, }, ++ { 2, 0, 1, 6, 10, 28, }, ++ { 1, 0, 1, 6, 10, 28, }, ++ { 0, 0, 1, 6, 11, 22, }, ++ { 2, 0, 1, 6, 11, 28, }, ++ { 1, 0, 1, 6, 11, 28, }, ++ { 0, 0, 1, 6, 12, 14, }, ++ { 2, 0, 1, 6, 12, 28, }, ++ { 1, 0, 1, 6, 12, 28, }, ++ { 0, 0, 1, 6, 13, 8, }, ++ { 2, 0, 1, 6, 13, 28, }, ++ { 1, 0, 1, 6, 13, 28, }, ++ { 0, 0, 1, 6, 14, 63, }, ++ { 2, 0, 1, 6, 14, 63, }, ++ { 1, 0, 1, 6, 14, 63, }, ++ { 0, 0, 1, 7, 1, 63, }, ++ { 2, 0, 1, 7, 1, 63, }, ++ { 1, 0, 1, 7, 1, 63, }, ++ { 0, 0, 1, 7, 2, 63, }, ++ { 2, 0, 1, 7, 2, 63, }, ++ { 1, 0, 1, 7, 2, 63, }, ++ { 0, 0, 1, 7, 3, 20, }, ++ { 2, 0, 1, 7, 3, 26, }, ++ { 1, 0, 1, 7, 3, 26, }, ++ { 0, 0, 1, 7, 4, 26, }, ++ { 2, 0, 1, 7, 4, 26, }, ++ { 1, 0, 1, 7, 4, 26, }, ++ { 0, 0, 1, 7, 5, 26, }, ++ { 2, 0, 1, 7, 5, 26, }, ++ { 1, 0, 1, 7, 5, 26, }, ++ { 0, 0, 1, 7, 6, 26, }, ++ { 2, 0, 1, 7, 6, 26, }, ++ { 1, 0, 1, 7, 6, 26, }, ++ { 0, 0, 1, 7, 7, 26, }, ++ { 2, 0, 1, 7, 7, 26, }, ++ { 1, 0, 1, 7, 7, 26, }, ++ { 0, 0, 1, 7, 8, 26, }, ++ { 2, 0, 1, 7, 8, 26, }, ++ { 1, 0, 1, 7, 8, 26, }, ++ { 0, 0, 1, 7, 9, 26, }, ++ { 2, 0, 1, 7, 9, 26, }, ++ { 1, 0, 1, 7, 9, 26, }, ++ { 0, 0, 1, 7, 10, 26, }, ++ { 2, 0, 1, 7, 10, 26, }, ++ { 1, 0, 1, 7, 10, 26, }, ++ { 0, 0, 1, 7, 11, 20, }, ++ { 2, 0, 1, 7, 11, 26, }, ++ { 1, 0, 1, 7, 11, 26, }, ++ { 0, 0, 1, 7, 12, 14, }, ++ { 2, 0, 1, 7, 12, 26, }, ++ { 1, 0, 1, 7, 12, 26, }, ++ { 0, 0, 1, 7, 13, 8, }, ++ { 2, 0, 1, 7, 13, 26, }, ++ { 1, 0, 1, 7, 13, 26, }, ++ { 0, 0, 1, 7, 14, 63, }, ++ { 2, 0, 1, 7, 14, 63, }, ++ { 1, 0, 1, 7, 14, 63, }, ++ { 0, 1, 0, 1, 36, 28, }, ++ { 2, 1, 0, 1, 36, 32, }, ++ { 1, 1, 0, 1, 36, 32, }, ++ { 0, 1, 0, 1, 40, 32, }, ++ { 2, 1, 0, 1, 40, 32, }, ++ { 1, 1, 0, 1, 40, 32, }, ++ { 0, 1, 0, 1, 44, 32, }, ++ { 2, 1, 0, 1, 44, 32, }, ++ { 1, 1, 0, 1, 44, 32, }, ++ { 0, 1, 0, 1, 48, 32, }, ++ { 2, 1, 0, 1, 48, 32, }, ++ { 1, 1, 0, 1, 48, 32, }, ++ { 0, 1, 0, 1, 52, 32, }, ++ { 2, 1, 0, 1, 52, 32, }, ++ { 1, 1, 0, 1, 52, 32, }, ++ { 0, 1, 0, 1, 56, 32, }, ++ { 2, 1, 0, 1, 56, 32, }, ++ { 1, 1, 0, 1, 56, 32, }, ++ { 0, 1, 0, 1, 60, 32, }, ++ { 2, 1, 0, 1, 60, 32, }, ++ { 1, 1, 0, 1, 60, 32, }, ++ { 0, 1, 0, 1, 64, 28, }, ++ { 2, 1, 0, 1, 64, 32, }, ++ { 1, 1, 0, 1, 64, 32, }, ++ { 0, 1, 0, 1, 100, 28, }, ++ { 2, 1, 0, 1, 100, 32, }, ++ { 1, 1, 0, 1, 100, 32, }, ++ { 0, 1, 0, 1, 104, 32, }, ++ { 2, 1, 0, 1, 104, 32, }, ++ { 1, 1, 0, 1, 104, 32, }, ++ { 0, 1, 0, 1, 108, 32, }, ++ { 2, 1, 0, 1, 108, 32, }, ++ { 1, 1, 0, 1, 108, 32, }, ++ { 0, 1, 0, 1, 112, 32, }, ++ { 2, 1, 0, 1, 112, 32, }, ++ { 1, 1, 0, 1, 112, 32, }, ++ { 0, 1, 0, 1, 116, 32, }, ++ { 2, 1, 0, 1, 116, 32, }, ++ { 1, 1, 0, 1, 116, 32, }, ++ { 0, 1, 0, 1, 120, 32, }, ++ { 2, 1, 0, 1, 120, 32, }, ++ { 1, 1, 0, 1, 120, 32, }, ++ { 0, 1, 0, 1, 124, 32, }, ++ { 2, 1, 0, 1, 124, 32, }, ++ { 1, 1, 0, 1, 124, 32, }, ++ { 0, 1, 0, 1, 128, 32, }, ++ { 2, 1, 0, 1, 128, 32, }, ++ { 1, 1, 0, 1, 128, 32, }, ++ { 0, 1, 0, 1, 132, 32, }, ++ { 2, 1, 0, 1, 132, 32, }, ++ { 1, 1, 0, 1, 132, 32, }, ++ { 0, 1, 0, 1, 136, 32, }, ++ { 2, 1, 0, 1, 136, 32, }, ++ { 1, 1, 0, 1, 136, 32, }, ++ { 0, 1, 0, 1, 140, 28, }, ++ { 2, 1, 0, 1, 140, 32, }, ++ { 1, 1, 0, 1, 140, 32, }, ++ { 0, 1, 0, 1, 149, 28, }, ++ { 2, 1, 0, 1, 149, 32, }, ++ { 1, 1, 0, 1, 149, 63, }, ++ { 0, 1, 0, 1, 153, 32, }, ++ { 2, 1, 0, 1, 153, 32, }, ++ { 1, 1, 0, 1, 153, 63, }, ++ { 0, 1, 0, 1, 157, 32, }, ++ { 2, 1, 0, 1, 157, 32, }, ++ { 1, 1, 0, 1, 157, 63, }, ++ { 0, 1, 0, 1, 161, 32, }, ++ { 2, 1, 0, 1, 161, 32, }, ++ { 1, 1, 0, 1, 161, 63, }, ++ { 0, 1, 0, 1, 165, 32, }, ++ { 2, 1, 0, 1, 165, 32, }, ++ { 1, 1, 0, 1, 165, 63, }, ++ { 0, 1, 0, 2, 36, 26, }, ++ { 2, 1, 0, 2, 36, 32, }, ++ { 1, 1, 0, 2, 36, 32, }, ++ { 0, 1, 0, 2, 40, 32, }, ++ { 2, 1, 0, 2, 40, 32, }, ++ { 1, 1, 0, 2, 40, 32, }, ++ { 0, 1, 0, 2, 44, 32, }, ++ { 2, 1, 0, 2, 44, 32, }, ++ { 1, 1, 0, 2, 44, 32, }, ++ { 0, 1, 0, 2, 48, 32, }, ++ { 2, 1, 0, 2, 48, 32, }, ++ { 1, 1, 0, 2, 48, 32, }, ++ { 0, 1, 0, 2, 52, 32, }, ++ { 2, 1, 0, 2, 52, 32, }, ++ { 1, 1, 0, 2, 52, 32, }, ++ { 0, 1, 0, 2, 56, 32, }, ++ { 2, 1, 0, 2, 56, 32, }, ++ { 1, 1, 0, 2, 56, 32, }, ++ { 0, 1, 0, 2, 60, 32, }, ++ { 2, 1, 0, 2, 60, 32, }, ++ { 1, 1, 0, 2, 60, 32, }, ++ { 0, 1, 0, 2, 64, 26, }, ++ { 2, 1, 0, 2, 64, 32, }, ++ { 1, 1, 0, 2, 64, 32, }, ++ { 0, 1, 0, 2, 100, 26, }, ++ { 2, 1, 0, 2, 100, 32, }, ++ { 1, 1, 0, 2, 100, 32, }, ++ { 0, 1, 0, 2, 104, 32, }, ++ { 2, 1, 0, 2, 104, 32, }, ++ { 1, 1, 0, 2, 104, 32, }, ++ { 0, 1, 0, 2, 108, 32, }, ++ { 2, 1, 0, 2, 108, 32, }, ++ { 1, 1, 0, 2, 108, 32, }, ++ { 0, 1, 0, 2, 112, 32, }, ++ { 2, 1, 0, 2, 112, 32, }, ++ { 1, 1, 0, 2, 112, 32, }, ++ { 0, 1, 0, 2, 116, 32, }, ++ { 2, 1, 0, 2, 116, 32, }, ++ { 1, 1, 0, 2, 116, 32, }, ++ { 0, 1, 0, 2, 120, 32, }, ++ { 2, 1, 0, 2, 120, 32, }, ++ { 1, 1, 0, 2, 120, 32, }, ++ { 0, 1, 0, 2, 124, 32, }, ++ { 2, 1, 0, 2, 124, 32, }, ++ { 1, 1, 0, 2, 124, 32, }, ++ { 0, 1, 0, 2, 128, 32, }, ++ { 2, 1, 0, 2, 128, 32, }, ++ { 1, 1, 0, 2, 128, 32, }, ++ { 0, 1, 0, 2, 132, 32, }, ++ { 2, 1, 0, 2, 132, 32, }, ++ { 1, 1, 0, 2, 132, 32, }, ++ { 0, 1, 0, 2, 136, 32, }, ++ { 2, 1, 0, 2, 136, 32, }, ++ { 1, 1, 0, 2, 136, 32, }, ++ { 0, 1, 0, 2, 140, 26, }, ++ { 2, 1, 0, 2, 140, 32, }, ++ { 1, 1, 0, 2, 140, 32, }, ++ { 0, 1, 0, 2, 149, 26, }, ++ { 2, 1, 0, 2, 149, 32, }, ++ { 1, 1, 0, 2, 149, 63, }, ++ { 0, 1, 0, 2, 153, 32, }, ++ { 2, 1, 0, 2, 153, 32, }, ++ { 1, 1, 0, 2, 153, 63, }, ++ { 0, 1, 0, 2, 157, 32, }, ++ { 2, 1, 0, 2, 157, 32, }, ++ { 1, 1, 0, 2, 157, 63, }, ++ { 0, 1, 0, 2, 161, 32, }, ++ { 2, 1, 0, 2, 161, 32, }, ++ { 1, 1, 0, 2, 161, 63, }, ++ { 0, 1, 0, 2, 165, 32, }, ++ { 2, 1, 0, 2, 165, 32, }, ++ { 1, 1, 0, 2, 165, 63, }, ++ { 0, 1, 0, 3, 36, 24, }, ++ { 2, 1, 0, 3, 36, 28, }, ++ { 1, 1, 0, 3, 36, 28, }, ++ { 0, 1, 0, 3, 40, 28, }, ++ { 2, 1, 0, 3, 40, 28, }, ++ { 1, 1, 0, 3, 40, 28, }, ++ { 0, 1, 0, 3, 44, 28, }, ++ { 2, 1, 0, 3, 44, 28, }, ++ { 1, 1, 0, 3, 44, 28, }, ++ { 0, 1, 0, 3, 48, 28, }, ++ { 2, 1, 0, 3, 48, 28, }, ++ { 1, 1, 0, 3, 48, 28, }, ++ { 0, 1, 0, 3, 52, 28, }, ++ { 2, 1, 0, 3, 52, 28, }, ++ { 1, 1, 0, 3, 52, 28, }, ++ { 0, 1, 0, 3, 56, 28, }, ++ { 2, 1, 0, 3, 56, 28, }, ++ { 1, 1, 0, 3, 56, 28, }, ++ { 0, 1, 0, 3, 60, 28, }, ++ { 2, 1, 0, 3, 60, 28, }, ++ { 1, 1, 0, 3, 60, 28, }, ++ { 0, 1, 0, 3, 64, 24, }, ++ { 2, 1, 0, 3, 64, 28, }, ++ { 1, 1, 0, 3, 64, 28, }, ++ { 0, 1, 0, 3, 100, 24, }, ++ { 2, 1, 0, 3, 100, 28, }, ++ { 1, 1, 0, 3, 100, 28, }, ++ { 0, 1, 0, 3, 104, 28, }, ++ { 2, 1, 0, 3, 104, 28, }, ++ { 1, 1, 0, 3, 104, 28, }, ++ { 0, 1, 0, 3, 108, 28, }, ++ { 2, 1, 0, 3, 108, 28, }, ++ { 1, 1, 0, 3, 108, 28, }, ++ { 0, 1, 0, 3, 112, 28, }, ++ { 2, 1, 0, 3, 112, 28, }, ++ { 1, 1, 0, 3, 112, 28, }, ++ { 0, 1, 0, 3, 116, 28, }, ++ { 2, 1, 0, 3, 116, 28, }, ++ { 1, 1, 0, 3, 116, 28, }, ++ { 0, 1, 0, 3, 120, 28, }, ++ { 2, 1, 0, 3, 120, 28, }, ++ { 1, 1, 0, 3, 120, 28, }, ++ { 0, 1, 0, 3, 124, 28, }, ++ { 2, 1, 0, 3, 124, 28, }, ++ { 1, 1, 0, 3, 124, 28, }, ++ { 0, 1, 0, 3, 128, 28, }, ++ { 2, 1, 0, 3, 128, 28, }, ++ { 1, 1, 0, 3, 128, 28, }, ++ { 0, 1, 0, 3, 132, 28, }, ++ { 2, 1, 0, 3, 132, 28, }, ++ { 1, 1, 0, 3, 132, 28, }, ++ { 0, 1, 0, 3, 136, 28, }, ++ { 2, 1, 0, 3, 136, 28, }, ++ { 1, 1, 0, 3, 136, 28, }, ++ { 0, 1, 0, 3, 140, 24, }, ++ { 2, 1, 0, 3, 140, 28, }, ++ { 1, 1, 0, 3, 140, 28, }, ++ { 0, 1, 0, 3, 149, 24, }, ++ { 2, 1, 0, 3, 149, 28, }, ++ { 1, 1, 0, 3, 149, 63, }, ++ { 0, 1, 0, 3, 153, 28, }, ++ { 2, 1, 0, 3, 153, 28, }, ++ { 1, 1, 0, 3, 153, 63, }, ++ { 0, 1, 0, 3, 157, 28, }, ++ { 2, 1, 0, 3, 157, 28, }, ++ { 1, 1, 0, 3, 157, 63, }, ++ { 0, 1, 0, 3, 161, 28, }, ++ { 2, 1, 0, 3, 161, 28, }, ++ { 1, 1, 0, 3, 161, 63, }, ++ { 0, 1, 0, 3, 165, 28, }, ++ { 2, 1, 0, 3, 165, 28, }, ++ { 1, 1, 0, 3, 165, 63, }, ++ { 0, 1, 0, 6, 36, 22, }, ++ { 2, 1, 0, 6, 36, 26, }, ++ { 1, 1, 0, 6, 36, 26, }, ++ { 0, 1, 0, 6, 40, 26, }, ++ { 2, 1, 0, 6, 40, 26, }, ++ { 1, 1, 0, 6, 40, 26, }, ++ { 0, 1, 0, 6, 44, 26, }, ++ { 2, 1, 0, 6, 44, 26, }, ++ { 1, 1, 0, 6, 44, 26, }, ++ { 0, 1, 0, 6, 48, 26, }, ++ { 2, 1, 0, 6, 48, 26, }, ++ { 1, 1, 0, 6, 48, 26, }, ++ { 0, 1, 0, 6, 52, 26, }, ++ { 2, 1, 0, 6, 52, 26, }, ++ { 1, 1, 0, 6, 52, 26, }, ++ { 0, 1, 0, 6, 56, 26, }, ++ { 2, 1, 0, 6, 56, 26, }, ++ { 1, 1, 0, 6, 56, 26, }, ++ { 0, 1, 0, 6, 60, 26, }, ++ { 2, 1, 0, 6, 60, 26, }, ++ { 1, 1, 0, 6, 60, 26, }, ++ { 0, 1, 0, 6, 64, 22, }, ++ { 2, 1, 0, 6, 64, 26, }, ++ { 1, 1, 0, 6, 64, 26, }, ++ { 0, 1, 0, 6, 100, 22, }, ++ { 2, 1, 0, 6, 100, 26, }, ++ { 1, 1, 0, 6, 100, 26, }, ++ { 0, 1, 0, 6, 104, 26, }, ++ { 2, 1, 0, 6, 104, 26, }, ++ { 1, 1, 0, 6, 104, 26, }, ++ { 0, 1, 0, 6, 108, 26, }, ++ { 2, 1, 0, 6, 108, 26, }, ++ { 1, 1, 0, 6, 108, 26, }, ++ { 0, 1, 0, 6, 112, 26, }, ++ { 2, 1, 0, 6, 112, 26, }, ++ { 1, 1, 0, 6, 112, 26, }, ++ { 0, 1, 0, 6, 116, 26, }, ++ { 2, 1, 0, 6, 116, 26, }, ++ { 1, 1, 0, 6, 116, 26, }, ++ { 0, 1, 0, 6, 120, 26, }, ++ { 2, 1, 0, 6, 120, 26, }, ++ { 1, 1, 0, 6, 120, 26, }, ++ { 0, 1, 0, 6, 124, 26, }, ++ { 2, 1, 0, 6, 124, 26, }, ++ { 1, 1, 0, 6, 124, 26, }, ++ { 0, 1, 0, 6, 128, 26, }, ++ { 2, 1, 0, 6, 128, 26, }, ++ { 1, 1, 0, 6, 128, 26, }, ++ { 0, 1, 0, 6, 132, 26, }, ++ { 2, 1, 0, 6, 132, 26, }, ++ { 1, 1, 0, 6, 132, 26, }, ++ { 0, 1, 0, 6, 136, 26, }, ++ { 2, 1, 0, 6, 136, 26, }, ++ { 1, 1, 0, 6, 136, 26, }, ++ { 0, 1, 0, 6, 140, 22, }, ++ { 2, 1, 0, 6, 140, 26, }, ++ { 1, 1, 0, 6, 140, 26, }, ++ { 0, 1, 0, 6, 149, 22, }, ++ { 2, 1, 0, 6, 149, 26, }, ++ { 1, 1, 0, 6, 149, 63, }, ++ { 0, 1, 0, 6, 153, 26, }, ++ { 2, 1, 0, 6, 153, 26, }, ++ { 1, 1, 0, 6, 153, 63, }, ++ { 0, 1, 0, 6, 157, 26, }, ++ { 2, 1, 0, 6, 157, 26, }, ++ { 1, 1, 0, 6, 157, 63, }, ++ { 0, 1, 0, 6, 161, 26, }, ++ { 2, 1, 0, 6, 161, 26, }, ++ { 1, 1, 0, 6, 161, 63, }, ++ { 0, 1, 0, 6, 165, 26, }, ++ { 2, 1, 0, 6, 165, 26, }, ++ { 1, 1, 0, 6, 165, 63, }, ++ { 0, 1, 0, 7, 36, 20, }, ++ { 2, 1, 0, 7, 36, 24, }, ++ { 1, 1, 0, 7, 36, 24, }, ++ { 0, 1, 0, 7, 40, 24, }, ++ { 2, 1, 0, 7, 40, 24, }, ++ { 1, 1, 0, 7, 40, 24, }, ++ { 0, 1, 0, 7, 44, 24, }, ++ { 2, 1, 0, 7, 44, 24, }, ++ { 1, 1, 0, 7, 44, 24, }, ++ { 0, 1, 0, 7, 48, 24, }, ++ { 2, 1, 0, 7, 48, 24, }, ++ { 1, 1, 0, 7, 48, 24, }, ++ { 0, 1, 0, 7, 52, 24, }, ++ { 2, 1, 0, 7, 52, 24, }, ++ { 1, 1, 0, 7, 52, 24, }, ++ { 0, 1, 0, 7, 56, 24, }, ++ { 2, 1, 0, 7, 56, 24, }, ++ { 1, 1, 0, 7, 56, 24, }, ++ { 0, 1, 0, 7, 60, 24, }, ++ { 2, 1, 0, 7, 60, 24, }, ++ { 1, 1, 0, 7, 60, 24, }, ++ { 0, 1, 0, 7, 64, 20, }, ++ { 2, 1, 0, 7, 64, 24, }, ++ { 1, 1, 0, 7, 64, 24, }, ++ { 0, 1, 0, 7, 100, 20, }, ++ { 2, 1, 0, 7, 100, 24, }, ++ { 1, 1, 0, 7, 100, 24, }, ++ { 0, 1, 0, 7, 104, 24, }, ++ { 2, 1, 0, 7, 104, 24, }, ++ { 1, 1, 0, 7, 104, 24, }, ++ { 0, 1, 0, 7, 108, 24, }, ++ { 2, 1, 0, 7, 108, 24, }, ++ { 1, 1, 0, 7, 108, 24, }, ++ { 0, 1, 0, 7, 112, 24, }, ++ { 2, 1, 0, 7, 112, 24, }, ++ { 1, 1, 0, 7, 112, 24, }, ++ { 0, 1, 0, 7, 116, 24, }, ++ { 2, 1, 0, 7, 116, 24, }, ++ { 1, 1, 0, 7, 116, 24, }, ++ { 0, 1, 0, 7, 120, 24, }, ++ { 2, 1, 0, 7, 120, 24, }, ++ { 1, 1, 0, 7, 120, 24, }, ++ { 0, 1, 0, 7, 124, 24, }, ++ { 2, 1, 0, 7, 124, 24, }, ++ { 1, 1, 0, 7, 124, 24, }, ++ { 0, 1, 0, 7, 128, 24, }, ++ { 2, 1, 0, 7, 128, 24, }, ++ { 1, 1, 0, 7, 128, 24, }, ++ { 0, 1, 0, 7, 132, 24, }, ++ { 2, 1, 0, 7, 132, 24, }, ++ { 1, 1, 0, 7, 132, 24, }, ++ { 0, 1, 0, 7, 136, 24, }, ++ { 2, 1, 0, 7, 136, 24, }, ++ { 1, 1, 0, 7, 136, 24, }, ++ { 0, 1, 0, 7, 140, 20, }, ++ { 2, 1, 0, 7, 140, 24, }, ++ { 1, 1, 0, 7, 140, 24, }, ++ { 0, 1, 0, 7, 149, 20, }, ++ { 2, 1, 0, 7, 149, 24, }, ++ { 1, 1, 0, 7, 149, 63, }, ++ { 0, 1, 0, 7, 153, 24, }, ++ { 2, 1, 0, 7, 153, 24, }, ++ { 1, 1, 0, 7, 153, 63, }, ++ { 0, 1, 0, 7, 157, 24, }, ++ { 2, 1, 0, 7, 157, 24, }, ++ { 1, 1, 0, 7, 157, 63, }, ++ { 0, 1, 0, 7, 161, 24, }, ++ { 2, 1, 0, 7, 161, 24, }, ++ { 1, 1, 0, 7, 161, 63, }, ++ { 0, 1, 0, 7, 165, 24, }, ++ { 2, 1, 0, 7, 165, 24, }, ++ { 1, 1, 0, 7, 165, 63, }, ++ { 0, 1, 1, 2, 38, 26, }, ++ { 2, 1, 1, 2, 38, 32, }, ++ { 1, 1, 1, 2, 38, 32, }, ++ { 0, 1, 1, 2, 46, 32, }, ++ { 2, 1, 1, 2, 46, 32, }, ++ { 1, 1, 1, 2, 46, 32, }, ++ { 0, 1, 1, 2, 54, 32, }, ++ { 2, 1, 1, 2, 54, 32, }, ++ { 1, 1, 1, 2, 54, 32, }, ++ { 0, 1, 1, 2, 62, 26, }, ++ { 2, 1, 1, 2, 62, 32, }, ++ { 1, 1, 1, 2, 62, 32, }, ++ { 0, 1, 1, 2, 102, 26, }, ++ { 2, 1, 1, 2, 102, 32, }, ++ { 1, 1, 1, 2, 102, 32, }, ++ { 0, 1, 1, 2, 110, 32, }, ++ { 2, 1, 1, 2, 110, 32, }, ++ { 1, 1, 1, 2, 110, 32, }, ++ { 0, 1, 1, 2, 118, 32, }, ++ { 2, 1, 1, 2, 118, 32, }, ++ { 1, 1, 1, 2, 118, 32, }, ++ { 0, 1, 1, 2, 126, 32, }, ++ { 2, 1, 1, 2, 126, 32, }, ++ { 1, 1, 1, 2, 126, 32, }, ++ { 0, 1, 1, 2, 134, 32, }, ++ { 2, 1, 1, 2, 134, 32, }, ++ { 1, 1, 1, 2, 134, 32, }, ++ { 0, 1, 1, 2, 151, 26, }, ++ { 2, 1, 1, 2, 151, 32, }, ++ { 1, 1, 1, 2, 151, 63, }, ++ { 0, 1, 1, 2, 159, 32, }, ++ { 2, 1, 1, 2, 159, 32, }, ++ { 1, 1, 1, 2, 159, 63, }, ++ { 0, 1, 1, 3, 38, 24, }, ++ { 2, 1, 1, 3, 38, 28, }, ++ { 1, 1, 1, 3, 38, 28, }, ++ { 0, 1, 1, 3, 46, 28, }, ++ { 2, 1, 1, 3, 46, 28, }, ++ { 1, 1, 1, 3, 46, 28, }, ++ { 0, 1, 1, 3, 54, 28, }, ++ { 2, 1, 1, 3, 54, 28, }, ++ { 1, 1, 1, 3, 54, 28, }, ++ { 0, 1, 1, 3, 62, 24, }, ++ { 2, 1, 1, 3, 62, 28, }, ++ { 1, 1, 1, 3, 62, 28, }, ++ { 0, 1, 1, 3, 102, 24, }, ++ { 2, 1, 1, 3, 102, 28, }, ++ { 1, 1, 1, 3, 102, 28, }, ++ { 0, 1, 1, 3, 110, 28, }, ++ { 2, 1, 1, 3, 110, 28, }, ++ { 1, 1, 1, 3, 110, 28, }, ++ { 0, 1, 1, 3, 118, 28, }, ++ { 2, 1, 1, 3, 118, 28, }, ++ { 1, 1, 1, 3, 118, 28, }, ++ { 0, 1, 1, 3, 126, 28, }, ++ { 2, 1, 1, 3, 126, 28, }, ++ { 1, 1, 1, 3, 126, 28, }, ++ { 0, 1, 1, 3, 134, 28, }, ++ { 2, 1, 1, 3, 134, 28, }, ++ { 1, 1, 1, 3, 134, 28, }, ++ { 0, 1, 1, 3, 151, 24, }, ++ { 2, 1, 1, 3, 151, 28, }, ++ { 1, 1, 1, 3, 151, 63, }, ++ { 0, 1, 1, 3, 159, 28, }, ++ { 2, 1, 1, 3, 159, 28, }, ++ { 1, 1, 1, 3, 159, 63, }, ++ { 0, 1, 1, 6, 38, 20, }, ++ { 2, 1, 1, 6, 38, 26, }, ++ { 1, 1, 1, 6, 38, 26, }, ++ { 0, 1, 1, 6, 46, 26, }, ++ { 2, 1, 1, 6, 46, 26, }, ++ { 1, 1, 1, 6, 46, 26, }, ++ { 0, 1, 1, 6, 54, 26, }, ++ { 2, 1, 1, 6, 54, 26, }, ++ { 1, 1, 1, 6, 54, 26, }, ++ { 0, 1, 1, 6, 62, 20, }, ++ { 2, 1, 1, 6, 62, 26, }, ++ { 1, 1, 1, 6, 62, 26, }, ++ { 0, 1, 1, 6, 102, 20, }, ++ { 2, 1, 1, 6, 102, 26, }, ++ { 1, 1, 1, 6, 102, 26, }, ++ { 0, 1, 1, 6, 110, 26, }, ++ { 2, 1, 1, 6, 110, 26, }, ++ { 1, 1, 1, 6, 110, 26, }, ++ { 0, 1, 1, 6, 118, 26, }, ++ { 2, 1, 1, 6, 118, 26, }, ++ { 1, 1, 1, 6, 118, 26, }, ++ { 0, 1, 1, 6, 126, 26, }, ++ { 2, 1, 1, 6, 126, 26, }, ++ { 1, 1, 1, 6, 126, 26, }, ++ { 0, 1, 1, 6, 134, 26, }, ++ { 2, 1, 1, 6, 134, 26, }, ++ { 1, 1, 1, 6, 134, 26, }, ++ { 0, 1, 1, 6, 151, 20, }, ++ { 2, 1, 1, 6, 151, 26, }, ++ { 1, 1, 1, 6, 151, 63, }, ++ { 0, 1, 1, 6, 159, 26, }, ++ { 2, 1, 1, 6, 159, 26, }, ++ { 1, 1, 1, 6, 159, 63, }, ++ { 0, 1, 1, 7, 38, 18, }, ++ { 2, 1, 1, 7, 38, 24, }, ++ { 1, 1, 1, 7, 38, 24, }, ++ { 0, 1, 1, 7, 46, 24, }, ++ { 2, 1, 1, 7, 46, 24, }, ++ { 1, 1, 1, 7, 46, 24, }, ++ { 0, 1, 1, 7, 54, 24, }, ++ { 2, 1, 1, 7, 54, 24, }, ++ { 1, 1, 1, 7, 54, 24, }, ++ { 0, 1, 1, 7, 62, 18, }, ++ { 2, 1, 1, 7, 62, 24, }, ++ { 1, 1, 1, 7, 62, 24, }, ++ { 0, 1, 1, 7, 102, 18, }, ++ { 2, 1, 1, 7, 102, 24, }, ++ { 1, 1, 1, 7, 102, 24, }, ++ { 0, 1, 1, 7, 110, 24, }, ++ { 2, 1, 1, 7, 110, 24, }, ++ { 1, 1, 1, 7, 110, 24, }, ++ { 0, 1, 1, 7, 118, 24, }, ++ { 2, 1, 1, 7, 118, 24, }, ++ { 1, 1, 1, 7, 118, 24, }, ++ { 0, 1, 1, 7, 126, 24, }, ++ { 2, 1, 1, 7, 126, 24, }, ++ { 1, 1, 1, 7, 126, 24, }, ++ { 0, 1, 1, 7, 134, 24, }, ++ { 2, 1, 1, 7, 134, 24, }, ++ { 1, 1, 1, 7, 134, 24, }, ++ { 0, 1, 1, 7, 151, 18, }, ++ { 2, 1, 1, 7, 151, 24, }, ++ { 1, 1, 1, 7, 151, 63, }, ++ { 0, 1, 1, 7, 159, 24, }, ++ { 2, 1, 1, 7, 159, 24, }, ++ { 1, 1, 1, 7, 159, 63, }, ++ { 0, 1, 2, 4, 42, 22, }, ++ { 2, 1, 2, 4, 42, 30, }, ++ { 1, 1, 2, 4, 42, 30, }, ++ { 0, 1, 2, 4, 58, 22, }, ++ { 2, 1, 2, 4, 58, 30, }, ++ { 1, 1, 2, 4, 58, 30, }, ++ { 0, 1, 2, 4, 106, 22, }, ++ { 2, 1, 2, 4, 106, 30, }, ++ { 1, 1, 2, 4, 106, 30, }, ++ { 0, 1, 2, 4, 122, 30, }, ++ { 2, 1, 2, 4, 122, 30, }, ++ { 1, 1, 2, 4, 122, 30, }, ++ { 0, 1, 2, 4, 155, 22, }, ++ { 2, 1, 2, 4, 155, 30, }, ++ { 1, 1, 2, 4, 155, 63, }, ++ { 0, 1, 2, 5, 42, 20, }, ++ { 2, 1, 2, 5, 42, 28, }, ++ { 1, 1, 2, 5, 42, 28, }, ++ { 0, 1, 2, 5, 58, 20, }, ++ { 2, 1, 2, 5, 58, 28, }, ++ { 1, 1, 2, 5, 58, 28, }, ++ { 0, 1, 2, 5, 106, 20, }, ++ { 2, 1, 2, 5, 106, 28, }, ++ { 1, 1, 2, 5, 106, 28, }, ++ { 0, 1, 2, 5, 122, 28, }, ++ { 2, 1, 2, 5, 122, 28, }, ++ { 1, 1, 2, 5, 122, 28, }, ++ { 0, 1, 2, 5, 155, 20, }, ++ { 2, 1, 2, 5, 155, 28, }, ++ { 1, 1, 2, 5, 155, 63, }, ++ { 0, 1, 2, 8, 42, 18, }, ++ { 2, 1, 2, 8, 42, 26, }, ++ { 1, 1, 2, 8, 42, 26, }, ++ { 0, 1, 2, 8, 58, 18, }, ++ { 2, 1, 2, 8, 58, 26, }, ++ { 1, 1, 2, 8, 58, 26, }, ++ { 0, 1, 2, 8, 106, 18, }, ++ { 2, 1, 2, 8, 106, 26, }, ++ { 1, 1, 2, 8, 106, 26, }, ++ { 0, 1, 2, 8, 122, 26, }, ++ { 2, 1, 2, 8, 122, 26, }, ++ { 1, 1, 2, 8, 122, 26, }, ++ { 0, 1, 2, 8, 155, 18, }, ++ { 2, 1, 2, 8, 155, 26, }, ++ { 1, 1, 2, 8, 155, 63, }, ++ { 0, 1, 2, 9, 42, 16, }, ++ { 2, 1, 2, 9, 42, 24, }, ++ { 1, 1, 2, 9, 42, 24, }, ++ { 0, 1, 2, 9, 58, 16, }, ++ { 2, 1, 2, 9, 58, 24, }, ++ { 1, 1, 2, 9, 58, 24, }, ++ { 0, 1, 2, 9, 106, 16, }, ++ { 2, 1, 2, 9, 106, 24, }, ++ { 1, 1, 2, 9, 106, 24, }, ++ { 0, 1, 2, 9, 122, 24, }, ++ { 2, 1, 2, 9, 122, 24, }, ++ { 1, 1, 2, 9, 122, 24, }, ++ { 0, 1, 2, 9, 155, 16, }, ++ { 2, 1, 2, 9, 155, 24, }, ++ { 1, 1, 2, 9, 155, 63, }, ++}; ++ ++RTW_DECL_TABLE_TXPWR_LMT(rtw8814a_txpwr_lmt_type0); ++ ++static const struct rtw_txpwr_lmt_cfg_pair rtw8814a_txpwr_lmt_type1[] = { ++ { 0, 0, 0, 0, 1, 34, }, ++ { 2, 0, 0, 0, 1, 32, }, ++ { 1, 0, 0, 0, 1, 32, }, ++ { 0, 0, 0, 0, 2, 34, }, ++ { 2, 0, 0, 0, 2, 32, }, ++ { 1, 0, 0, 0, 2, 32, }, ++ { 0, 0, 0, 0, 3, 34, }, ++ { 2, 0, 0, 0, 3, 32, }, ++ { 1, 0, 0, 0, 3, 32, }, ++ { 0, 0, 0, 0, 4, 34, }, ++ { 2, 0, 0, 0, 4, 32, }, ++ { 1, 0, 0, 0, 4, 32, }, ++ { 0, 0, 0, 0, 5, 34, }, ++ { 2, 0, 0, 0, 5, 32, }, ++ { 1, 0, 0, 0, 5, 32, }, ++ { 0, 0, 0, 0, 6, 34, }, ++ { 2, 0, 0, 0, 6, 32, }, ++ { 1, 0, 0, 0, 6, 32, }, ++ { 0, 0, 0, 0, 7, 34, }, ++ { 2, 0, 0, 0, 7, 32, }, ++ { 1, 0, 0, 0, 7, 32, }, ++ { 0, 0, 0, 0, 8, 34, }, ++ { 2, 0, 0, 0, 8, 32, }, ++ { 1, 0, 0, 0, 8, 32, }, ++ { 0, 0, 0, 0, 9, 34, }, ++ { 2, 0, 0, 0, 9, 32, }, ++ { 1, 0, 0, 0, 9, 32, }, ++ { 0, 0, 0, 0, 10, 34, }, ++ { 2, 0, 0, 0, 10, 32, }, ++ { 1, 0, 0, 0, 10, 32, }, ++ { 0, 0, 0, 0, 11, 34, }, ++ { 2, 0, 0, 0, 11, 32, }, ++ { 1, 0, 0, 0, 11, 32, }, ++ { 0, 0, 0, 0, 12, 24, }, ++ { 2, 0, 0, 0, 12, 32, }, ++ { 1, 0, 0, 0, 12, 32, }, ++ { 0, 0, 0, 0, 13, 16, }, ++ { 2, 0, 0, 0, 13, 32, }, ++ { 1, 0, 0, 0, 13, 32, }, ++ { 0, 0, 0, 0, 14, 63, }, ++ { 2, 0, 0, 0, 14, 63, }, ++ { 1, 0, 0, 0, 14, 32, }, ++ { 0, 0, 0, 1, 1, 30, }, ++ { 2, 0, 0, 1, 1, 32, }, ++ { 1, 0, 0, 1, 1, 32, }, ++ { 0, 0, 0, 1, 2, 32, }, ++ { 2, 0, 0, 1, 2, 32, }, ++ { 1, 0, 0, 1, 2, 32, }, ++ { 0, 0, 0, 1, 3, 32, }, ++ { 2, 0, 0, 1, 3, 32, }, ++ { 1, 0, 0, 1, 3, 32, }, ++ { 0, 0, 0, 1, 4, 32, }, ++ { 2, 0, 0, 1, 4, 32, }, ++ { 1, 0, 0, 1, 4, 32, }, ++ { 0, 0, 0, 1, 5, 32, }, ++ { 2, 0, 0, 1, 5, 32, }, ++ { 1, 0, 0, 1, 5, 32, }, ++ { 0, 0, 0, 1, 6, 32, }, ++ { 2, 0, 0, 1, 6, 32, }, ++ { 1, 0, 0, 1, 6, 32, }, ++ { 0, 0, 0, 1, 7, 32, }, ++ { 2, 0, 0, 1, 7, 32, }, ++ { 1, 0, 0, 1, 7, 32, }, ++ { 0, 0, 0, 1, 8, 32, }, ++ { 2, 0, 0, 1, 8, 32, }, ++ { 1, 0, 0, 1, 8, 32, }, ++ { 0, 0, 0, 1, 9, 32, }, ++ { 2, 0, 0, 1, 9, 32, }, ++ { 1, 0, 0, 1, 9, 32, }, ++ { 0, 0, 0, 1, 10, 32, }, ++ { 2, 0, 0, 1, 10, 32, }, ++ { 1, 0, 0, 1, 10, 32, }, ++ { 0, 0, 0, 1, 11, 30, }, ++ { 2, 0, 0, 1, 11, 32, }, ++ { 1, 0, 0, 1, 11, 32, }, ++ { 0, 0, 0, 1, 12, 18, }, ++ { 2, 0, 0, 1, 12, 32, }, ++ { 1, 0, 0, 1, 12, 32, }, ++ { 0, 0, 0, 1, 13, 8, }, ++ { 2, 0, 0, 1, 13, 32, }, ++ { 1, 0, 0, 1, 13, 32, }, ++ { 0, 0, 0, 1, 14, 63, }, ++ { 2, 0, 0, 1, 14, 63, }, ++ { 1, 0, 0, 1, 14, 63, }, ++ { 0, 0, 0, 2, 1, 28, }, ++ { 2, 0, 0, 2, 1, 32, }, ++ { 1, 0, 0, 2, 1, 32, }, ++ { 0, 0, 0, 2, 2, 32, }, ++ { 2, 0, 0, 2, 2, 32, }, ++ { 1, 0, 0, 2, 2, 32, }, ++ { 0, 0, 0, 2, 3, 32, }, ++ { 2, 0, 0, 2, 3, 32, }, ++ { 1, 0, 0, 2, 3, 32, }, ++ { 0, 0, 0, 2, 4, 32, }, ++ { 2, 0, 0, 2, 4, 32, }, ++ { 1, 0, 0, 2, 4, 32, }, ++ { 0, 0, 0, 2, 5, 32, }, ++ { 2, 0, 0, 2, 5, 32, }, ++ { 1, 0, 0, 2, 5, 32, }, ++ { 0, 0, 0, 2, 6, 32, }, ++ { 2, 0, 0, 2, 6, 32, }, ++ { 1, 0, 0, 2, 6, 32, }, ++ { 0, 0, 0, 2, 7, 32, }, ++ { 2, 0, 0, 2, 7, 32, }, ++ { 1, 0, 0, 2, 7, 32, }, ++ { 0, 0, 0, 2, 8, 32, }, ++ { 2, 0, 0, 2, 8, 32, }, ++ { 1, 0, 0, 2, 8, 32, }, ++ { 0, 0, 0, 2, 9, 32, }, ++ { 2, 0, 0, 2, 9, 32, }, ++ { 1, 0, 0, 2, 9, 32, }, ++ { 0, 0, 0, 2, 10, 32, }, ++ { 2, 0, 0, 2, 10, 32, }, ++ { 1, 0, 0, 2, 10, 32, }, ++ { 0, 0, 0, 2, 11, 28, }, ++ { 2, 0, 0, 2, 11, 32, }, ++ { 1, 0, 0, 2, 11, 32, }, ++ { 0, 0, 0, 2, 12, 16, }, ++ { 2, 0, 0, 2, 12, 32, }, ++ { 1, 0, 0, 2, 12, 32, }, ++ { 0, 0, 0, 2, 13, 6, }, ++ { 2, 0, 0, 2, 13, 32, }, ++ { 1, 0, 0, 2, 13, 32, }, ++ { 0, 0, 0, 2, 14, 63, }, ++ { 2, 0, 0, 2, 14, 63, }, ++ { 1, 0, 0, 2, 14, 63, }, ++ { 0, 0, 0, 3, 1, 26, }, ++ { 2, 0, 0, 3, 1, 30, }, ++ { 1, 0, 0, 3, 1, 30, }, ++ { 0, 0, 0, 3, 2, 30, }, ++ { 2, 0, 0, 3, 2, 30, }, ++ { 1, 0, 0, 3, 2, 30, }, ++ { 0, 0, 0, 3, 3, 30, }, ++ { 2, 0, 0, 3, 3, 30, }, ++ { 1, 0, 0, 3, 3, 30, }, ++ { 0, 0, 0, 3, 4, 30, }, ++ { 2, 0, 0, 3, 4, 30, }, ++ { 1, 0, 0, 3, 4, 30, }, ++ { 0, 0, 0, 3, 5, 30, }, ++ { 2, 0, 0, 3, 5, 30, }, ++ { 1, 0, 0, 3, 5, 30, }, ++ { 0, 0, 0, 3, 6, 30, }, ++ { 2, 0, 0, 3, 6, 30, }, ++ { 1, 0, 0, 3, 6, 30, }, ++ { 0, 0, 0, 3, 7, 30, }, ++ { 2, 0, 0, 3, 7, 30, }, ++ { 1, 0, 0, 3, 7, 30, }, ++ { 0, 0, 0, 3, 8, 30, }, ++ { 2, 0, 0, 3, 8, 30, }, ++ { 1, 0, 0, 3, 8, 30, }, ++ { 0, 0, 0, 3, 9, 30, }, ++ { 2, 0, 0, 3, 9, 30, }, ++ { 1, 0, 0, 3, 9, 30, }, ++ { 0, 0, 0, 3, 10, 30, }, ++ { 2, 0, 0, 3, 10, 30, }, ++ { 1, 0, 0, 3, 10, 30, }, ++ { 0, 0, 0, 3, 11, 26, }, ++ { 2, 0, 0, 3, 11, 30, }, ++ { 1, 0, 0, 3, 11, 30, }, ++ { 0, 0, 0, 3, 12, 14, }, ++ { 2, 0, 0, 3, 12, 30, }, ++ { 1, 0, 0, 3, 12, 30, }, ++ { 0, 0, 0, 3, 13, 4, }, ++ { 2, 0, 0, 3, 13, 30, }, ++ { 1, 0, 0, 3, 13, 30, }, ++ { 0, 0, 0, 3, 14, 63, }, ++ { 2, 0, 0, 3, 14, 63, }, ++ { 1, 0, 0, 3, 14, 63, }, ++ { 0, 0, 0, 6, 1, 24, }, ++ { 2, 0, 0, 6, 1, 28, }, ++ { 1, 0, 0, 6, 1, 28, }, ++ { 0, 0, 0, 6, 2, 28, }, ++ { 2, 0, 0, 6, 2, 28, }, ++ { 1, 0, 0, 6, 2, 28, }, ++ { 0, 0, 0, 6, 3, 28, }, ++ { 2, 0, 0, 6, 3, 28, }, ++ { 1, 0, 0, 6, 3, 28, }, ++ { 0, 0, 0, 6, 4, 28, }, ++ { 2, 0, 0, 6, 4, 28, }, ++ { 1, 0, 0, 6, 4, 28, }, ++ { 0, 0, 0, 6, 5, 28, }, ++ { 2, 0, 0, 6, 5, 28, }, ++ { 1, 0, 0, 6, 5, 28, }, ++ { 0, 0, 0, 6, 6, 28, }, ++ { 2, 0, 0, 6, 6, 28, }, ++ { 1, 0, 0, 6, 6, 28, }, ++ { 0, 0, 0, 6, 7, 28, }, ++ { 2, 0, 0, 6, 7, 28, }, ++ { 1, 0, 0, 6, 7, 28, }, ++ { 0, 0, 0, 6, 8, 28, }, ++ { 2, 0, 0, 6, 8, 28, }, ++ { 1, 0, 0, 6, 8, 28, }, ++ { 0, 0, 0, 6, 9, 28, }, ++ { 2, 0, 0, 6, 9, 28, }, ++ { 1, 0, 0, 6, 9, 28, }, ++ { 0, 0, 0, 6, 10, 28, }, ++ { 2, 0, 0, 6, 10, 28, }, ++ { 1, 0, 0, 6, 10, 28, }, ++ { 0, 0, 0, 6, 11, 24, }, ++ { 2, 0, 0, 6, 11, 28, }, ++ { 1, 0, 0, 6, 11, 28, }, ++ { 0, 0, 0, 6, 12, 14, }, ++ { 2, 0, 0, 6, 12, 28, }, ++ { 1, 0, 0, 6, 12, 28, }, ++ { 0, 0, 0, 6, 13, 4, }, ++ { 2, 0, 0, 6, 13, 28, }, ++ { 1, 0, 0, 6, 13, 28, }, ++ { 0, 0, 0, 6, 14, 63, }, ++ { 2, 0, 0, 6, 14, 63, }, ++ { 1, 0, 0, 6, 14, 63, }, ++ { 0, 0, 0, 7, 1, 22, }, ++ { 2, 0, 0, 7, 1, 26, }, ++ { 1, 0, 0, 7, 1, 26, }, ++ { 0, 0, 0, 7, 2, 26, }, ++ { 2, 0, 0, 7, 2, 26, }, ++ { 1, 0, 0, 7, 2, 26, }, ++ { 0, 0, 0, 7, 3, 26, }, ++ { 2, 0, 0, 7, 3, 26, }, ++ { 1, 0, 0, 7, 3, 26, }, ++ { 0, 0, 0, 7, 4, 26, }, ++ { 2, 0, 0, 7, 4, 26, }, ++ { 1, 0, 0, 7, 4, 26, }, ++ { 0, 0, 0, 7, 5, 26, }, ++ { 2, 0, 0, 7, 5, 26, }, ++ { 1, 0, 0, 7, 5, 26, }, ++ { 0, 0, 0, 7, 6, 26, }, ++ { 2, 0, 0, 7, 6, 26, }, ++ { 1, 0, 0, 7, 6, 26, }, ++ { 0, 0, 0, 7, 7, 26, }, ++ { 2, 0, 0, 7, 7, 26, }, ++ { 1, 0, 0, 7, 7, 26, }, ++ { 0, 0, 0, 7, 8, 26, }, ++ { 2, 0, 0, 7, 8, 26, }, ++ { 1, 0, 0, 7, 8, 26, }, ++ { 0, 0, 0, 7, 9, 26, }, ++ { 2, 0, 0, 7, 9, 26, }, ++ { 1, 0, 0, 7, 9, 26, }, ++ { 0, 0, 0, 7, 10, 26, }, ++ { 2, 0, 0, 7, 10, 26, }, ++ { 1, 0, 0, 7, 10, 26, }, ++ { 0, 0, 0, 7, 11, 22, }, ++ { 2, 0, 0, 7, 11, 26, }, ++ { 1, 0, 0, 7, 11, 26, }, ++ { 0, 0, 0, 7, 12, 14, }, ++ { 2, 0, 0, 7, 12, 26, }, ++ { 1, 0, 0, 7, 12, 26, }, ++ { 0, 0, 0, 7, 13, 4, }, ++ { 2, 0, 0, 7, 13, 26, }, ++ { 1, 0, 0, 7, 13, 26, }, ++ { 0, 0, 0, 7, 14, 63, }, ++ { 2, 0, 0, 7, 14, 63, }, ++ { 1, 0, 0, 7, 14, 63, }, ++ { 0, 0, 1, 2, 1, 63, }, ++ { 2, 0, 1, 2, 1, 63, }, ++ { 1, 0, 1, 2, 1, 63, }, ++ { 0, 0, 1, 2, 2, 63, }, ++ { 2, 0, 1, 2, 2, 63, }, ++ { 1, 0, 1, 2, 2, 63, }, ++ { 0, 0, 1, 2, 3, 28, }, ++ { 2, 0, 1, 2, 3, 32, }, ++ { 1, 0, 1, 2, 3, 32, }, ++ { 0, 0, 1, 2, 4, 32, }, ++ { 2, 0, 1, 2, 4, 32, }, ++ { 1, 0, 1, 2, 4, 32, }, ++ { 0, 0, 1, 2, 5, 32, }, ++ { 2, 0, 1, 2, 5, 32, }, ++ { 1, 0, 1, 2, 5, 32, }, ++ { 0, 0, 1, 2, 6, 32, }, ++ { 2, 0, 1, 2, 6, 32, }, ++ { 1, 0, 1, 2, 6, 32, }, ++ { 0, 0, 1, 2, 7, 32, }, ++ { 2, 0, 1, 2, 7, 32, }, ++ { 1, 0, 1, 2, 7, 32, }, ++ { 0, 0, 1, 2, 8, 32, }, ++ { 2, 0, 1, 2, 8, 32, }, ++ { 1, 0, 1, 2, 8, 32, }, ++ { 0, 0, 1, 2, 9, 32, }, ++ { 2, 0, 1, 2, 9, 32, }, ++ { 1, 0, 1, 2, 9, 32, }, ++ { 0, 0, 1, 2, 10, 32, }, ++ { 2, 0, 1, 2, 10, 32, }, ++ { 1, 0, 1, 2, 10, 32, }, ++ { 0, 0, 1, 2, 11, 28, }, ++ { 2, 0, 1, 2, 11, 32, }, ++ { 1, 0, 1, 2, 11, 32, }, ++ { 0, 0, 1, 2, 12, 16, }, ++ { 2, 0, 1, 2, 12, 32, }, ++ { 1, 0, 1, 2, 12, 32, }, ++ { 0, 0, 1, 2, 13, 10, }, ++ { 2, 0, 1, 2, 13, 32, }, ++ { 1, 0, 1, 2, 13, 32, }, ++ { 0, 0, 1, 2, 14, 63, }, ++ { 2, 0, 1, 2, 14, 63, }, ++ { 1, 0, 1, 2, 14, 63, }, ++ { 0, 0, 1, 3, 1, 63, }, ++ { 2, 0, 1, 3, 1, 63, }, ++ { 1, 0, 1, 3, 1, 63, }, ++ { 0, 0, 1, 3, 2, 63, }, ++ { 2, 0, 1, 3, 2, 63, }, ++ { 1, 0, 1, 3, 2, 63, }, ++ { 0, 0, 1, 3, 3, 26, }, ++ { 2, 0, 1, 3, 3, 30, }, ++ { 1, 0, 1, 3, 3, 30, }, ++ { 0, 0, 1, 3, 4, 30, }, ++ { 2, 0, 1, 3, 4, 30, }, ++ { 1, 0, 1, 3, 4, 30, }, ++ { 0, 0, 1, 3, 5, 30, }, ++ { 2, 0, 1, 3, 5, 30, }, ++ { 1, 0, 1, 3, 5, 30, }, ++ { 0, 0, 1, 3, 6, 30, }, ++ { 2, 0, 1, 3, 6, 30, }, ++ { 1, 0, 1, 3, 6, 30, }, ++ { 0, 0, 1, 3, 7, 30, }, ++ { 2, 0, 1, 3, 7, 30, }, ++ { 1, 0, 1, 3, 7, 30, }, ++ { 0, 0, 1, 3, 8, 30, }, ++ { 2, 0, 1, 3, 8, 30, }, ++ { 1, 0, 1, 3, 8, 30, }, ++ { 0, 0, 1, 3, 9, 30, }, ++ { 2, 0, 1, 3, 9, 30, }, ++ { 1, 0, 1, 3, 9, 30, }, ++ { 0, 0, 1, 3, 10, 30, }, ++ { 2, 0, 1, 3, 10, 30, }, ++ { 1, 0, 1, 3, 10, 30, }, ++ { 0, 0, 1, 3, 11, 26, }, ++ { 2, 0, 1, 3, 11, 30, }, ++ { 1, 0, 1, 3, 11, 30, }, ++ { 0, 0, 1, 3, 12, 14, }, ++ { 2, 0, 1, 3, 12, 30, }, ++ { 1, 0, 1, 3, 12, 30, }, ++ { 0, 0, 1, 3, 13, 8, }, ++ { 2, 0, 1, 3, 13, 30, }, ++ { 1, 0, 1, 3, 13, 30, }, ++ { 0, 0, 1, 3, 14, 63, }, ++ { 2, 0, 1, 3, 14, 63, }, ++ { 1, 0, 1, 3, 14, 63, }, ++ { 0, 0, 1, 6, 1, 63, }, ++ { 2, 0, 1, 6, 1, 63, }, ++ { 1, 0, 1, 6, 1, 63, }, ++ { 0, 0, 1, 6, 2, 63, }, ++ { 2, 0, 1, 6, 2, 63, }, ++ { 1, 0, 1, 6, 2, 63, }, ++ { 0, 0, 1, 6, 3, 24, }, ++ { 2, 0, 1, 6, 3, 28, }, ++ { 1, 0, 1, 6, 3, 28, }, ++ { 0, 0, 1, 6, 4, 28, }, ++ { 2, 0, 1, 6, 4, 28, }, ++ { 1, 0, 1, 6, 4, 28, }, ++ { 0, 0, 1, 6, 5, 28, }, ++ { 2, 0, 1, 6, 5, 28, }, ++ { 1, 0, 1, 6, 5, 28, }, ++ { 0, 0, 1, 6, 6, 28, }, ++ { 2, 0, 1, 6, 6, 28, }, ++ { 1, 0, 1, 6, 6, 28, }, ++ { 0, 0, 1, 6, 7, 28, }, ++ { 2, 0, 1, 6, 7, 28, }, ++ { 1, 0, 1, 6, 7, 28, }, ++ { 0, 0, 1, 6, 8, 28, }, ++ { 2, 0, 1, 6, 8, 28, }, ++ { 1, 0, 1, 6, 8, 28, }, ++ { 0, 0, 1, 6, 9, 28, }, ++ { 2, 0, 1, 6, 9, 28, }, ++ { 1, 0, 1, 6, 9, 28, }, ++ { 0, 0, 1, 6, 10, 28, }, ++ { 2, 0, 1, 6, 10, 28, }, ++ { 1, 0, 1, 6, 10, 28, }, ++ { 0, 0, 1, 6, 11, 24, }, ++ { 2, 0, 1, 6, 11, 28, }, ++ { 1, 0, 1, 6, 11, 28, }, ++ { 0, 0, 1, 6, 12, 14, }, ++ { 2, 0, 1, 6, 12, 28, }, ++ { 1, 0, 1, 6, 12, 28, }, ++ { 0, 0, 1, 6, 13, 8, }, ++ { 2, 0, 1, 6, 13, 28, }, ++ { 1, 0, 1, 6, 13, 28, }, ++ { 0, 0, 1, 6, 14, 63, }, ++ { 2, 0, 1, 6, 14, 63, }, ++ { 1, 0, 1, 6, 14, 63, }, ++ { 0, 0, 1, 7, 1, 63, }, ++ { 2, 0, 1, 7, 1, 63, }, ++ { 1, 0, 1, 7, 1, 63, }, ++ { 0, 0, 1, 7, 2, 63, }, ++ { 2, 0, 1, 7, 2, 63, }, ++ { 1, 0, 1, 7, 2, 63, }, ++ { 0, 0, 1, 7, 3, 22, }, ++ { 2, 0, 1, 7, 3, 26, }, ++ { 1, 0, 1, 7, 3, 26, }, ++ { 0, 0, 1, 7, 4, 26, }, ++ { 2, 0, 1, 7, 4, 26, }, ++ { 1, 0, 1, 7, 4, 26, }, ++ { 0, 0, 1, 7, 5, 26, }, ++ { 2, 0, 1, 7, 5, 26, }, ++ { 1, 0, 1, 7, 5, 26, }, ++ { 0, 0, 1, 7, 6, 26, }, ++ { 2, 0, 1, 7, 6, 26, }, ++ { 1, 0, 1, 7, 6, 26, }, ++ { 0, 0, 1, 7, 7, 26, }, ++ { 2, 0, 1, 7, 7, 26, }, ++ { 1, 0, 1, 7, 7, 26, }, ++ { 0, 0, 1, 7, 8, 26, }, ++ { 2, 0, 1, 7, 8, 26, }, ++ { 1, 0, 1, 7, 8, 26, }, ++ { 0, 0, 1, 7, 9, 26, }, ++ { 2, 0, 1, 7, 9, 26, }, ++ { 1, 0, 1, 7, 9, 26, }, ++ { 0, 0, 1, 7, 10, 26, }, ++ { 2, 0, 1, 7, 10, 26, }, ++ { 1, 0, 1, 7, 10, 26, }, ++ { 0, 0, 1, 7, 11, 22, }, ++ { 2, 0, 1, 7, 11, 26, }, ++ { 1, 0, 1, 7, 11, 26, }, ++ { 0, 0, 1, 7, 12, 14, }, ++ { 2, 0, 1, 7, 12, 26, }, ++ { 1, 0, 1, 7, 12, 26, }, ++ { 0, 0, 1, 7, 13, 8, }, ++ { 2, 0, 1, 7, 13, 26, }, ++ { 1, 0, 1, 7, 13, 26, }, ++ { 0, 0, 1, 7, 14, 63, }, ++ { 2, 0, 1, 7, 14, 63, }, ++ { 1, 0, 1, 7, 14, 63, }, ++ { 0, 1, 0, 1, 36, 28, }, ++ { 2, 1, 0, 1, 36, 32, }, ++ { 1, 1, 0, 1, 36, 32, }, ++ { 0, 1, 0, 1, 40, 32, }, ++ { 2, 1, 0, 1, 40, 32, }, ++ { 1, 1, 0, 1, 40, 32, }, ++ { 0, 1, 0, 1, 44, 32, }, ++ { 2, 1, 0, 1, 44, 32, }, ++ { 1, 1, 0, 1, 44, 32, }, ++ { 0, 1, 0, 1, 48, 32, }, ++ { 2, 1, 0, 1, 48, 32, }, ++ { 1, 1, 0, 1, 48, 32, }, ++ { 0, 1, 0, 1, 52, 32, }, ++ { 2, 1, 0, 1, 52, 32, }, ++ { 1, 1, 0, 1, 52, 32, }, ++ { 0, 1, 0, 1, 56, 32, }, ++ { 2, 1, 0, 1, 56, 32, }, ++ { 1, 1, 0, 1, 56, 32, }, ++ { 0, 1, 0, 1, 60, 32, }, ++ { 2, 1, 0, 1, 60, 32, }, ++ { 1, 1, 0, 1, 60, 32, }, ++ { 0, 1, 0, 1, 64, 30, }, ++ { 2, 1, 0, 1, 64, 32, }, ++ { 1, 1, 0, 1, 64, 32, }, ++ { 0, 1, 0, 1, 100, 28, }, ++ { 2, 1, 0, 1, 100, 32, }, ++ { 1, 1, 0, 1, 100, 32, }, ++ { 0, 1, 0, 1, 104, 32, }, ++ { 2, 1, 0, 1, 104, 32, }, ++ { 1, 1, 0, 1, 104, 32, }, ++ { 0, 1, 0, 1, 108, 32, }, ++ { 2, 1, 0, 1, 108, 32, }, ++ { 1, 1, 0, 1, 108, 32, }, ++ { 0, 1, 0, 1, 112, 32, }, ++ { 2, 1, 0, 1, 112, 32, }, ++ { 1, 1, 0, 1, 112, 32, }, ++ { 0, 1, 0, 1, 116, 32, }, ++ { 2, 1, 0, 1, 116, 32, }, ++ { 1, 1, 0, 1, 116, 32, }, ++ { 0, 1, 0, 1, 120, 32, }, ++ { 2, 1, 0, 1, 120, 32, }, ++ { 1, 1, 0, 1, 120, 32, }, ++ { 0, 1, 0, 1, 124, 32, }, ++ { 2, 1, 0, 1, 124, 32, }, ++ { 1, 1, 0, 1, 124, 32, }, ++ { 0, 1, 0, 1, 128, 32, }, ++ { 2, 1, 0, 1, 128, 32, }, ++ { 1, 1, 0, 1, 128, 32, }, ++ { 0, 1, 0, 1, 132, 32, }, ++ { 2, 1, 0, 1, 132, 32, }, ++ { 1, 1, 0, 1, 132, 32, }, ++ { 0, 1, 0, 1, 136, 32, }, ++ { 2, 1, 0, 1, 136, 32, }, ++ { 1, 1, 0, 1, 136, 32, }, ++ { 0, 1, 0, 1, 140, 28, }, ++ { 2, 1, 0, 1, 140, 32, }, ++ { 1, 1, 0, 1, 140, 32, }, ++ { 0, 1, 0, 1, 149, 28, }, ++ { 2, 1, 0, 1, 149, 32, }, ++ { 1, 1, 0, 1, 149, 63, }, ++ { 0, 1, 0, 1, 153, 32, }, ++ { 2, 1, 0, 1, 153, 32, }, ++ { 1, 1, 0, 1, 153, 63, }, ++ { 0, 1, 0, 1, 157, 32, }, ++ { 2, 1, 0, 1, 157, 32, }, ++ { 1, 1, 0, 1, 157, 63, }, ++ { 0, 1, 0, 1, 161, 32, }, ++ { 2, 1, 0, 1, 161, 32, }, ++ { 1, 1, 0, 1, 161, 63, }, ++ { 0, 1, 0, 1, 165, 32, }, ++ { 2, 1, 0, 1, 165, 32, }, ++ { 1, 1, 0, 1, 165, 63, }, ++ { 0, 1, 0, 2, 36, 28, }, ++ { 2, 1, 0, 2, 36, 32, }, ++ { 1, 1, 0, 2, 36, 32, }, ++ { 0, 1, 0, 2, 40, 32, }, ++ { 2, 1, 0, 2, 40, 32, }, ++ { 1, 1, 0, 2, 40, 32, }, ++ { 0, 1, 0, 2, 44, 32, }, ++ { 2, 1, 0, 2, 44, 32, }, ++ { 1, 1, 0, 2, 44, 32, }, ++ { 0, 1, 0, 2, 48, 32, }, ++ { 2, 1, 0, 2, 48, 32, }, ++ { 1, 1, 0, 2, 48, 32, }, ++ { 0, 1, 0, 2, 52, 32, }, ++ { 2, 1, 0, 2, 52, 32, }, ++ { 1, 1, 0, 2, 52, 32, }, ++ { 0, 1, 0, 2, 56, 32, }, ++ { 2, 1, 0, 2, 56, 32, }, ++ { 1, 1, 0, 2, 56, 32, }, ++ { 0, 1, 0, 2, 60, 32, }, ++ { 2, 1, 0, 2, 60, 32, }, ++ { 1, 1, 0, 2, 60, 32, }, ++ { 0, 1, 0, 2, 64, 30, }, ++ { 2, 1, 0, 2, 64, 32, }, ++ { 1, 1, 0, 2, 64, 32, }, ++ { 0, 1, 0, 2, 100, 28, }, ++ { 2, 1, 0, 2, 100, 32, }, ++ { 1, 1, 0, 2, 100, 32, }, ++ { 0, 1, 0, 2, 104, 32, }, ++ { 2, 1, 0, 2, 104, 32, }, ++ { 1, 1, 0, 2, 104, 32, }, ++ { 0, 1, 0, 2, 108, 32, }, ++ { 2, 1, 0, 2, 108, 32, }, ++ { 1, 1, 0, 2, 108, 32, }, ++ { 0, 1, 0, 2, 112, 32, }, ++ { 2, 1, 0, 2, 112, 32, }, ++ { 1, 1, 0, 2, 112, 32, }, ++ { 0, 1, 0, 2, 116, 32, }, ++ { 2, 1, 0, 2, 116, 32, }, ++ { 1, 1, 0, 2, 116, 32, }, ++ { 0, 1, 0, 2, 120, 32, }, ++ { 2, 1, 0, 2, 120, 32, }, ++ { 1, 1, 0, 2, 120, 32, }, ++ { 0, 1, 0, 2, 124, 32, }, ++ { 2, 1, 0, 2, 124, 32, }, ++ { 1, 1, 0, 2, 124, 32, }, ++ { 0, 1, 0, 2, 128, 32, }, ++ { 2, 1, 0, 2, 128, 32, }, ++ { 1, 1, 0, 2, 128, 32, }, ++ { 0, 1, 0, 2, 132, 32, }, ++ { 2, 1, 0, 2, 132, 32, }, ++ { 1, 1, 0, 2, 132, 32, }, ++ { 0, 1, 0, 2, 136, 32, }, ++ { 2, 1, 0, 2, 136, 32, }, ++ { 1, 1, 0, 2, 136, 32, }, ++ { 0, 1, 0, 2, 140, 28, }, ++ { 2, 1, 0, 2, 140, 32, }, ++ { 1, 1, 0, 2, 140, 32, }, ++ { 0, 1, 0, 2, 149, 28, }, ++ { 2, 1, 0, 2, 149, 32, }, ++ { 1, 1, 0, 2, 149, 63, }, ++ { 0, 1, 0, 2, 153, 32, }, ++ { 2, 1, 0, 2, 153, 32, }, ++ { 1, 1, 0, 2, 153, 63, }, ++ { 0, 1, 0, 2, 157, 32, }, ++ { 2, 1, 0, 2, 157, 32, }, ++ { 1, 1, 0, 2, 157, 63, }, ++ { 0, 1, 0, 2, 161, 32, }, ++ { 2, 1, 0, 2, 161, 32, }, ++ { 1, 1, 0, 2, 161, 63, }, ++ { 0, 1, 0, 2, 165, 32, }, ++ { 2, 1, 0, 2, 165, 32, }, ++ { 1, 1, 0, 2, 165, 63, }, ++ { 0, 1, 0, 3, 36, 26, }, ++ { 2, 1, 0, 3, 36, 30, }, ++ { 1, 1, 0, 3, 36, 30, }, ++ { 0, 1, 0, 3, 40, 30, }, ++ { 2, 1, 0, 3, 40, 30, }, ++ { 1, 1, 0, 3, 40, 30, }, ++ { 0, 1, 0, 3, 44, 30, }, ++ { 2, 1, 0, 3, 44, 30, }, ++ { 1, 1, 0, 3, 44, 30, }, ++ { 0, 1, 0, 3, 48, 30, }, ++ { 2, 1, 0, 3, 48, 30, }, ++ { 1, 1, 0, 3, 48, 30, }, ++ { 0, 1, 0, 3, 52, 30, }, ++ { 2, 1, 0, 3, 52, 30, }, ++ { 1, 1, 0, 3, 52, 30, }, ++ { 0, 1, 0, 3, 56, 30, }, ++ { 2, 1, 0, 3, 56, 30, }, ++ { 1, 1, 0, 3, 56, 30, }, ++ { 0, 1, 0, 3, 60, 30, }, ++ { 2, 1, 0, 3, 60, 30, }, ++ { 1, 1, 0, 3, 60, 30, }, ++ { 0, 1, 0, 3, 64, 28, }, ++ { 2, 1, 0, 3, 64, 30, }, ++ { 1, 1, 0, 3, 64, 30, }, ++ { 0, 1, 0, 3, 100, 28, }, ++ { 2, 1, 0, 3, 100, 30, }, ++ { 1, 1, 0, 3, 100, 30, }, ++ { 0, 1, 0, 3, 104, 30, }, ++ { 2, 1, 0, 3, 104, 30, }, ++ { 1, 1, 0, 3, 104, 30, }, ++ { 0, 1, 0, 3, 108, 30, }, ++ { 2, 1, 0, 3, 108, 30, }, ++ { 1, 1, 0, 3, 108, 30, }, ++ { 0, 1, 0, 3, 112, 30, }, ++ { 2, 1, 0, 3, 112, 30, }, ++ { 1, 1, 0, 3, 112, 30, }, ++ { 0, 1, 0, 3, 116, 30, }, ++ { 2, 1, 0, 3, 116, 30, }, ++ { 1, 1, 0, 3, 116, 30, }, ++ { 0, 1, 0, 3, 120, 30, }, ++ { 2, 1, 0, 3, 120, 30, }, ++ { 1, 1, 0, 3, 120, 30, }, ++ { 0, 1, 0, 3, 124, 30, }, ++ { 2, 1, 0, 3, 124, 30, }, ++ { 1, 1, 0, 3, 124, 30, }, ++ { 0, 1, 0, 3, 128, 30, }, ++ { 2, 1, 0, 3, 128, 30, }, ++ { 1, 1, 0, 3, 128, 30, }, ++ { 0, 1, 0, 3, 132, 30, }, ++ { 2, 1, 0, 3, 132, 30, }, ++ { 1, 1, 0, 3, 132, 30, }, ++ { 0, 1, 0, 3, 136, 30, }, ++ { 2, 1, 0, 3, 136, 30, }, ++ { 1, 1, 0, 3, 136, 30, }, ++ { 0, 1, 0, 3, 140, 26, }, ++ { 2, 1, 0, 3, 140, 30, }, ++ { 1, 1, 0, 3, 140, 30, }, ++ { 0, 1, 0, 3, 149, 26, }, ++ { 2, 1, 0, 3, 149, 30, }, ++ { 1, 1, 0, 3, 149, 63, }, ++ { 0, 1, 0, 3, 153, 30, }, ++ { 2, 1, 0, 3, 153, 30, }, ++ { 1, 1, 0, 3, 153, 63, }, ++ { 0, 1, 0, 3, 157, 30, }, ++ { 2, 1, 0, 3, 157, 30, }, ++ { 1, 1, 0, 3, 157, 63, }, ++ { 0, 1, 0, 3, 161, 30, }, ++ { 2, 1, 0, 3, 161, 30, }, ++ { 1, 1, 0, 3, 161, 63, }, ++ { 0, 1, 0, 3, 165, 30, }, ++ { 2, 1, 0, 3, 165, 30, }, ++ { 1, 1, 0, 3, 165, 63, }, ++ { 0, 1, 0, 6, 36, 24, }, ++ { 2, 1, 0, 6, 36, 28, }, ++ { 1, 1, 0, 6, 36, 28, }, ++ { 0, 1, 0, 6, 40, 28, }, ++ { 2, 1, 0, 6, 40, 28, }, ++ { 1, 1, 0, 6, 40, 28, }, ++ { 0, 1, 0, 6, 44, 28, }, ++ { 2, 1, 0, 6, 44, 28, }, ++ { 1, 1, 0, 6, 44, 28, }, ++ { 0, 1, 0, 6, 48, 28, }, ++ { 2, 1, 0, 6, 48, 28, }, ++ { 1, 1, 0, 6, 48, 28, }, ++ { 0, 1, 0, 6, 52, 28, }, ++ { 2, 1, 0, 6, 52, 28, }, ++ { 1, 1, 0, 6, 52, 28, }, ++ { 0, 1, 0, 6, 56, 28, }, ++ { 2, 1, 0, 6, 56, 28, }, ++ { 1, 1, 0, 6, 56, 28, }, ++ { 0, 1, 0, 6, 60, 28, }, ++ { 2, 1, 0, 6, 60, 28, }, ++ { 1, 1, 0, 6, 60, 28, }, ++ { 0, 1, 0, 6, 64, 26, }, ++ { 2, 1, 0, 6, 64, 28, }, ++ { 1, 1, 0, 6, 64, 28, }, ++ { 0, 1, 0, 6, 100, 24, }, ++ { 2, 1, 0, 6, 100, 28, }, ++ { 1, 1, 0, 6, 100, 28, }, ++ { 0, 1, 0, 6, 104, 28, }, ++ { 2, 1, 0, 6, 104, 28, }, ++ { 1, 1, 0, 6, 104, 28, }, ++ { 0, 1, 0, 6, 108, 28, }, ++ { 2, 1, 0, 6, 108, 28, }, ++ { 1, 1, 0, 6, 108, 28, }, ++ { 0, 1, 0, 6, 112, 28, }, ++ { 2, 1, 0, 6, 112, 28, }, ++ { 1, 1, 0, 6, 112, 28, }, ++ { 0, 1, 0, 6, 116, 28, }, ++ { 2, 1, 0, 6, 116, 28, }, ++ { 1, 1, 0, 6, 116, 28, }, ++ { 0, 1, 0, 6, 120, 28, }, ++ { 2, 1, 0, 6, 120, 28, }, ++ { 1, 1, 0, 6, 120, 28, }, ++ { 0, 1, 0, 6, 124, 28, }, ++ { 2, 1, 0, 6, 124, 28, }, ++ { 1, 1, 0, 6, 124, 28, }, ++ { 0, 1, 0, 6, 128, 28, }, ++ { 2, 1, 0, 6, 128, 28, }, ++ { 1, 1, 0, 6, 128, 28, }, ++ { 0, 1, 0, 6, 132, 28, }, ++ { 2, 1, 0, 6, 132, 28, }, ++ { 1, 1, 0, 6, 132, 28, }, ++ { 0, 1, 0, 6, 136, 28, }, ++ { 2, 1, 0, 6, 136, 28, }, ++ { 1, 1, 0, 6, 136, 28, }, ++ { 0, 1, 0, 6, 140, 24, }, ++ { 2, 1, 0, 6, 140, 28, }, ++ { 1, 1, 0, 6, 140, 28, }, ++ { 0, 1, 0, 6, 149, 24, }, ++ { 2, 1, 0, 6, 149, 28, }, ++ { 1, 1, 0, 6, 149, 63, }, ++ { 0, 1, 0, 6, 153, 28, }, ++ { 2, 1, 0, 6, 153, 28, }, ++ { 1, 1, 0, 6, 153, 63, }, ++ { 0, 1, 0, 6, 157, 28, }, ++ { 2, 1, 0, 6, 157, 28, }, ++ { 1, 1, 0, 6, 157, 63, }, ++ { 0, 1, 0, 6, 161, 28, }, ++ { 2, 1, 0, 6, 161, 28, }, ++ { 1, 1, 0, 6, 161, 63, }, ++ { 0, 1, 0, 6, 165, 28, }, ++ { 2, 1, 0, 6, 165, 28, }, ++ { 1, 1, 0, 6, 165, 63, }, ++ { 0, 1, 0, 7, 36, 22, }, ++ { 2, 1, 0, 7, 36, 26, }, ++ { 1, 1, 0, 7, 36, 26, }, ++ { 0, 1, 0, 7, 40, 26, }, ++ { 2, 1, 0, 7, 40, 26, }, ++ { 1, 1, 0, 7, 40, 26, }, ++ { 0, 1, 0, 7, 44, 26, }, ++ { 2, 1, 0, 7, 44, 26, }, ++ { 1, 1, 0, 7, 44, 26, }, ++ { 0, 1, 0, 7, 48, 26, }, ++ { 2, 1, 0, 7, 48, 26, }, ++ { 1, 1, 0, 7, 48, 26, }, ++ { 0, 1, 0, 7, 52, 26, }, ++ { 2, 1, 0, 7, 52, 26, }, ++ { 1, 1, 0, 7, 52, 26, }, ++ { 0, 1, 0, 7, 56, 26, }, ++ { 2, 1, 0, 7, 56, 26, }, ++ { 1, 1, 0, 7, 56, 26, }, ++ { 0, 1, 0, 7, 60, 26, }, ++ { 2, 1, 0, 7, 60, 26, }, ++ { 1, 1, 0, 7, 60, 26, }, ++ { 0, 1, 0, 7, 64, 24, }, ++ { 2, 1, 0, 7, 64, 26, }, ++ { 1, 1, 0, 7, 64, 26, }, ++ { 0, 1, 0, 7, 100, 22, }, ++ { 2, 1, 0, 7, 100, 26, }, ++ { 1, 1, 0, 7, 100, 26, }, ++ { 0, 1, 0, 7, 104, 26, }, ++ { 2, 1, 0, 7, 104, 26, }, ++ { 1, 1, 0, 7, 104, 26, }, ++ { 0, 1, 0, 7, 108, 26, }, ++ { 2, 1, 0, 7, 108, 26, }, ++ { 1, 1, 0, 7, 108, 26, }, ++ { 0, 1, 0, 7, 112, 26, }, ++ { 2, 1, 0, 7, 112, 26, }, ++ { 1, 1, 0, 7, 112, 26, }, ++ { 0, 1, 0, 7, 116, 26, }, ++ { 2, 1, 0, 7, 116, 26, }, ++ { 1, 1, 0, 7, 116, 26, }, ++ { 0, 1, 0, 7, 120, 26, }, ++ { 2, 1, 0, 7, 120, 26, }, ++ { 1, 1, 0, 7, 120, 26, }, ++ { 0, 1, 0, 7, 124, 26, }, ++ { 2, 1, 0, 7, 124, 26, }, ++ { 1, 1, 0, 7, 124, 26, }, ++ { 0, 1, 0, 7, 128, 26, }, ++ { 2, 1, 0, 7, 128, 26, }, ++ { 1, 1, 0, 7, 128, 26, }, ++ { 0, 1, 0, 7, 132, 26, }, ++ { 2, 1, 0, 7, 132, 26, }, ++ { 1, 1, 0, 7, 132, 26, }, ++ { 0, 1, 0, 7, 136, 26, }, ++ { 2, 1, 0, 7, 136, 26, }, ++ { 1, 1, 0, 7, 136, 26, }, ++ { 0, 1, 0, 7, 140, 22, }, ++ { 2, 1, 0, 7, 140, 26, }, ++ { 1, 1, 0, 7, 140, 26, }, ++ { 0, 1, 0, 7, 149, 22, }, ++ { 2, 1, 0, 7, 149, 26, }, ++ { 1, 1, 0, 7, 149, 63, }, ++ { 0, 1, 0, 7, 153, 26, }, ++ { 2, 1, 0, 7, 153, 26, }, ++ { 1, 1, 0, 7, 153, 63, }, ++ { 0, 1, 0, 7, 157, 26, }, ++ { 2, 1, 0, 7, 157, 26, }, ++ { 1, 1, 0, 7, 157, 63, }, ++ { 0, 1, 0, 7, 161, 26, }, ++ { 2, 1, 0, 7, 161, 26, }, ++ { 1, 1, 0, 7, 161, 63, }, ++ { 0, 1, 0, 7, 165, 26, }, ++ { 2, 1, 0, 7, 165, 26, }, ++ { 1, 1, 0, 7, 165, 63, }, ++ { 0, 1, 1, 2, 38, 28, }, ++ { 2, 1, 1, 2, 38, 32, }, ++ { 1, 1, 1, 2, 38, 32, }, ++ { 0, 1, 1, 2, 46, 32, }, ++ { 2, 1, 1, 2, 46, 32, }, ++ { 1, 1, 1, 2, 46, 32, }, ++ { 0, 1, 1, 2, 54, 32, }, ++ { 2, 1, 1, 2, 54, 32, }, ++ { 1, 1, 1, 2, 54, 32, }, ++ { 0, 1, 1, 2, 62, 28, }, ++ { 2, 1, 1, 2, 62, 32, }, ++ { 1, 1, 1, 2, 62, 32, }, ++ { 0, 1, 1, 2, 102, 28, }, ++ { 2, 1, 1, 2, 102, 32, }, ++ { 1, 1, 1, 2, 102, 32, }, ++ { 0, 1, 1, 2, 110, 32, }, ++ { 2, 1, 1, 2, 110, 32, }, ++ { 1, 1, 1, 2, 110, 32, }, ++ { 0, 1, 1, 2, 118, 32, }, ++ { 2, 1, 1, 2, 118, 32, }, ++ { 1, 1, 1, 2, 118, 32, }, ++ { 0, 1, 1, 2, 126, 32, }, ++ { 2, 1, 1, 2, 126, 32, }, ++ { 1, 1, 1, 2, 126, 32, }, ++ { 0, 1, 1, 2, 134, 30, }, ++ { 2, 1, 1, 2, 134, 32, }, ++ { 1, 1, 1, 2, 134, 32, }, ++ { 0, 1, 1, 2, 151, 28, }, ++ { 2, 1, 1, 2, 151, 32, }, ++ { 1, 1, 1, 2, 151, 63, }, ++ { 0, 1, 1, 2, 159, 32, }, ++ { 2, 1, 1, 2, 159, 32, }, ++ { 1, 1, 1, 2, 159, 63, }, ++ { 0, 1, 1, 3, 38, 26, }, ++ { 2, 1, 1, 3, 38, 30, }, ++ { 1, 1, 1, 3, 38, 30, }, ++ { 0, 1, 1, 3, 46, 30, }, ++ { 2, 1, 1, 3, 46, 30, }, ++ { 1, 1, 1, 3, 46, 30, }, ++ { 0, 1, 1, 3, 54, 30, }, ++ { 2, 1, 1, 3, 54, 30, }, ++ { 1, 1, 1, 3, 54, 30, }, ++ { 0, 1, 1, 3, 62, 26, }, ++ { 2, 1, 1, 3, 62, 30, }, ++ { 1, 1, 1, 3, 62, 30, }, ++ { 0, 1, 1, 3, 102, 26, }, ++ { 2, 1, 1, 3, 102, 30, }, ++ { 1, 1, 1, 3, 102, 30, }, ++ { 0, 1, 1, 3, 110, 30, }, ++ { 2, 1, 1, 3, 110, 30, }, ++ { 1, 1, 1, 3, 110, 30, }, ++ { 0, 1, 1, 3, 118, 30, }, ++ { 2, 1, 1, 3, 118, 30, }, ++ { 1, 1, 1, 3, 118, 30, }, ++ { 0, 1, 1, 3, 126, 30, }, ++ { 2, 1, 1, 3, 126, 30, }, ++ { 1, 1, 1, 3, 126, 30, }, ++ { 0, 1, 1, 3, 134, 28, }, ++ { 2, 1, 1, 3, 134, 30, }, ++ { 1, 1, 1, 3, 134, 30, }, ++ { 0, 1, 1, 3, 151, 26, }, ++ { 2, 1, 1, 3, 151, 30, }, ++ { 1, 1, 1, 3, 151, 63, }, ++ { 0, 1, 1, 3, 159, 30, }, ++ { 2, 1, 1, 3, 159, 30, }, ++ { 1, 1, 1, 3, 159, 63, }, ++ { 0, 1, 1, 6, 38, 20, }, ++ { 2, 1, 1, 6, 38, 28, }, ++ { 1, 1, 1, 6, 38, 28, }, ++ { 0, 1, 1, 6, 46, 28, }, ++ { 2, 1, 1, 6, 46, 28, }, ++ { 1, 1, 1, 6, 46, 28, }, ++ { 0, 1, 1, 6, 54, 28, }, ++ { 2, 1, 1, 6, 54, 28, }, ++ { 1, 1, 1, 6, 54, 28, }, ++ { 0, 1, 1, 6, 62, 20, }, ++ { 2, 1, 1, 6, 62, 28, }, ++ { 1, 1, 1, 6, 62, 28, }, ++ { 0, 1, 1, 6, 102, 22, }, ++ { 2, 1, 1, 6, 102, 28, }, ++ { 1, 1, 1, 6, 102, 28, }, ++ { 0, 1, 1, 6, 110, 28, }, ++ { 2, 1, 1, 6, 110, 28, }, ++ { 1, 1, 1, 6, 110, 28, }, ++ { 0, 1, 1, 6, 118, 28, }, ++ { 2, 1, 1, 6, 118, 28, }, ++ { 1, 1, 1, 6, 118, 28, }, ++ { 0, 1, 1, 6, 126, 28, }, ++ { 2, 1, 1, 6, 126, 28, }, ++ { 1, 1, 1, 6, 126, 28, }, ++ { 0, 1, 1, 6, 134, 26, }, ++ { 2, 1, 1, 6, 134, 28, }, ++ { 1, 1, 1, 6, 134, 28, }, ++ { 0, 1, 1, 6, 151, 22, }, ++ { 2, 1, 1, 6, 151, 28, }, ++ { 1, 1, 1, 6, 151, 63, }, ++ { 0, 1, 1, 6, 159, 28, }, ++ { 2, 1, 1, 6, 159, 28, }, ++ { 1, 1, 1, 6, 159, 63, }, ++ { 0, 1, 1, 7, 38, 18, }, ++ { 2, 1, 1, 7, 38, 26, }, ++ { 1, 1, 1, 7, 38, 26, }, ++ { 0, 1, 1, 7, 46, 26, }, ++ { 2, 1, 1, 7, 46, 26, }, ++ { 1, 1, 1, 7, 46, 26, }, ++ { 0, 1, 1, 7, 54, 26, }, ++ { 2, 1, 1, 7, 54, 26, }, ++ { 1, 1, 1, 7, 54, 26, }, ++ { 0, 1, 1, 7, 62, 18, }, ++ { 2, 1, 1, 7, 62, 26, }, ++ { 1, 1, 1, 7, 62, 26, }, ++ { 0, 1, 1, 7, 102, 20, }, ++ { 2, 1, 1, 7, 102, 26, }, ++ { 1, 1, 1, 7, 102, 26, }, ++ { 0, 1, 1, 7, 110, 26, }, ++ { 2, 1, 1, 7, 110, 26, }, ++ { 1, 1, 1, 7, 110, 26, }, ++ { 0, 1, 1, 7, 118, 26, }, ++ { 2, 1, 1, 7, 118, 26, }, ++ { 1, 1, 1, 7, 118, 26, }, ++ { 0, 1, 1, 7, 126, 26, }, ++ { 2, 1, 1, 7, 126, 26, }, ++ { 1, 1, 1, 7, 126, 26, }, ++ { 0, 1, 1, 7, 134, 24, }, ++ { 2, 1, 1, 7, 134, 26, }, ++ { 1, 1, 1, 7, 134, 26, }, ++ { 0, 1, 1, 7, 151, 20, }, ++ { 2, 1, 1, 7, 151, 26, }, ++ { 1, 1, 1, 7, 151, 63, }, ++ { 0, 1, 1, 7, 159, 26, }, ++ { 2, 1, 1, 7, 159, 26, }, ++ { 1, 1, 1, 7, 159, 63, }, ++ { 0, 1, 2, 4, 42, 24, }, ++ { 2, 1, 2, 4, 42, 32, }, ++ { 1, 1, 2, 4, 42, 32, }, ++ { 0, 1, 2, 4, 58, 24, }, ++ { 2, 1, 2, 4, 58, 32, }, ++ { 1, 1, 2, 4, 58, 32, }, ++ { 0, 1, 2, 4, 106, 24, }, ++ { 2, 1, 2, 4, 106, 32, }, ++ { 1, 1, 2, 4, 106, 32, }, ++ { 0, 1, 2, 4, 122, 32, }, ++ { 2, 1, 2, 4, 122, 32, }, ++ { 1, 1, 2, 4, 122, 32, }, ++ { 0, 1, 2, 4, 155, 26, }, ++ { 2, 1, 2, 4, 155, 32, }, ++ { 1, 1, 2, 4, 155, 63, }, ++ { 0, 1, 2, 5, 42, 22, }, ++ { 2, 1, 2, 5, 42, 30, }, ++ { 1, 1, 2, 5, 42, 30, }, ++ { 0, 1, 2, 5, 58, 22, }, ++ { 2, 1, 2, 5, 58, 30, }, ++ { 1, 1, 2, 5, 58, 30, }, ++ { 0, 1, 2, 5, 106, 22, }, ++ { 2, 1, 2, 5, 106, 30, }, ++ { 1, 1, 2, 5, 106, 30, }, ++ { 0, 1, 2, 5, 122, 30, }, ++ { 2, 1, 2, 5, 122, 30, }, ++ { 1, 1, 2, 5, 122, 30, }, ++ { 0, 1, 2, 5, 155, 24, }, ++ { 2, 1, 2, 5, 155, 30, }, ++ { 1, 1, 2, 5, 155, 63, }, ++ { 0, 1, 2, 8, 42, 20, }, ++ { 2, 1, 2, 8, 42, 28, }, ++ { 1, 1, 2, 8, 42, 28, }, ++ { 0, 1, 2, 8, 58, 20, }, ++ { 2, 1, 2, 8, 58, 28, }, ++ { 1, 1, 2, 8, 58, 28, }, ++ { 0, 1, 2, 8, 106, 20, }, ++ { 2, 1, 2, 8, 106, 28, }, ++ { 1, 1, 2, 8, 106, 28, }, ++ { 0, 1, 2, 8, 122, 28, }, ++ { 2, 1, 2, 8, 122, 28, }, ++ { 1, 1, 2, 8, 122, 28, }, ++ { 0, 1, 2, 8, 155, 20, }, ++ { 2, 1, 2, 8, 155, 28, }, ++ { 1, 1, 2, 8, 155, 63, }, ++ { 0, 1, 2, 9, 42, 18, }, ++ { 2, 1, 2, 9, 42, 26, }, ++ { 1, 1, 2, 9, 42, 26, }, ++ { 0, 1, 2, 9, 58, 18, }, ++ { 2, 1, 2, 9, 58, 26, }, ++ { 1, 1, 2, 9, 58, 26, }, ++ { 0, 1, 2, 9, 106, 18, }, ++ { 2, 1, 2, 9, 106, 26, }, ++ { 1, 1, 2, 9, 106, 26, }, ++ { 0, 1, 2, 9, 122, 26, }, ++ { 2, 1, 2, 9, 122, 26, }, ++ { 1, 1, 2, 9, 122, 26, }, ++ { 0, 1, 2, 9, 155, 18, }, ++ { 2, 1, 2, 9, 155, 26, }, ++ { 1, 1, 2, 9, 155, 63, }, ++}; ++ ++RTW_DECL_TABLE_TXPWR_LMT(rtw8814a_txpwr_lmt_type1); ++ ++static const struct rtw_txpwr_lmt_cfg_pair rtw8814a_txpwr_lmt_type2[] = { ++ { 0, 0, 0, 0, 1, 42, }, ++ { 2, 0, 0, 0, 1, 42, }, ++ { 1, 0, 0, 0, 1, 42, }, ++ { 0, 0, 0, 0, 2, 50, }, ++ { 2, 0, 0, 0, 2, 42, }, ++ { 1, 0, 0, 0, 2, 42, }, ++ { 0, 0, 0, 0, 3, 50, }, ++ { 2, 0, 0, 0, 3, 42, }, ++ { 1, 0, 0, 0, 3, 42, }, ++ { 0, 0, 0, 0, 4, 50, }, ++ { 2, 0, 0, 0, 4, 42, }, ++ { 1, 0, 0, 0, 4, 42, }, ++ { 0, 0, 0, 0, 5, 50, }, ++ { 2, 0, 0, 0, 5, 42, }, ++ { 1, 0, 0, 0, 5, 42, }, ++ { 0, 0, 0, 0, 6, 50, }, ++ { 2, 0, 0, 0, 6, 42, }, ++ { 1, 0, 0, 0, 6, 42, }, ++ { 0, 0, 0, 0, 7, 50, }, ++ { 2, 0, 0, 0, 7, 42, }, ++ { 1, 0, 0, 0, 7, 42, }, ++ { 0, 0, 0, 0, 8, 50, }, ++ { 2, 0, 0, 0, 8, 42, }, ++ { 1, 0, 0, 0, 8, 42, }, ++ { 0, 0, 0, 0, 9, 50, }, ++ { 2, 0, 0, 0, 9, 42, }, ++ { 1, 0, 0, 0, 9, 42, }, ++ { 0, 0, 0, 0, 10, 50, }, ++ { 2, 0, 0, 0, 10, 42, }, ++ { 1, 0, 0, 0, 10, 42, }, ++ { 0, 0, 0, 0, 11, 44, }, ++ { 2, 0, 0, 0, 11, 42, }, ++ { 1, 0, 0, 0, 11, 42, }, ++ { 0, 0, 0, 0, 12, 63, }, ++ { 2, 0, 0, 0, 12, 42, }, ++ { 1, 0, 0, 0, 12, 42, }, ++ { 0, 0, 0, 0, 13, 63, }, ++ { 2, 0, 0, 0, 13, 42, }, ++ { 1, 0, 0, 0, 13, 42, }, ++ { 0, 0, 0, 0, 14, 63, }, ++ { 2, 0, 0, 0, 14, 63, }, ++ { 1, 0, 0, 0, 14, 42, }, ++ { 0, 0, 0, 1, 1, 32, }, ++ { 2, 0, 0, 1, 1, 42, }, ++ { 1, 0, 0, 1, 1, 42, }, ++ { 0, 0, 0, 1, 2, 42, }, ++ { 2, 0, 0, 1, 2, 42, }, ++ { 1, 0, 0, 1, 2, 42, }, ++ { 0, 0, 0, 1, 3, 42, }, ++ { 2, 0, 0, 1, 3, 42, }, ++ { 1, 0, 0, 1, 3, 42, }, ++ { 0, 0, 0, 1, 4, 42, }, ++ { 2, 0, 0, 1, 4, 42, }, ++ { 1, 0, 0, 1, 4, 42, }, ++ { 0, 0, 0, 1, 5, 42, }, ++ { 2, 0, 0, 1, 5, 42, }, ++ { 1, 0, 0, 1, 5, 42, }, ++ { 0, 0, 0, 1, 6, 42, }, ++ { 2, 0, 0, 1, 6, 42, }, ++ { 1, 0, 0, 1, 6, 42, }, ++ { 0, 0, 0, 1, 7, 42, }, ++ { 2, 0, 0, 1, 7, 42, }, ++ { 1, 0, 0, 1, 7, 42, }, ++ { 0, 0, 0, 1, 8, 42, }, ++ { 2, 0, 0, 1, 8, 42, }, ++ { 1, 0, 0, 1, 8, 42, }, ++ { 0, 0, 0, 1, 9, 42, }, ++ { 2, 0, 0, 1, 9, 42, }, ++ { 1, 0, 0, 1, 9, 42, }, ++ { 0, 0, 0, 1, 10, 42, }, ++ { 2, 0, 0, 1, 10, 42, }, ++ { 1, 0, 0, 1, 10, 42, }, ++ { 0, 0, 0, 1, 11, 32, }, ++ { 2, 0, 0, 1, 11, 42, }, ++ { 1, 0, 0, 1, 11, 42, }, ++ { 0, 0, 0, 1, 12, 63, }, ++ { 2, 0, 0, 1, 12, 42, }, ++ { 1, 0, 0, 1, 12, 42, }, ++ { 0, 0, 0, 1, 13, 63, }, ++ { 2, 0, 0, 1, 13, 42, }, ++ { 1, 0, 0, 1, 13, 42, }, ++ { 0, 0, 0, 1, 14, 63, }, ++ { 2, 0, 0, 1, 14, 63, }, ++ { 1, 0, 0, 1, 14, 63, }, ++ { 0, 0, 0, 2, 1, 32, }, ++ { 2, 0, 0, 2, 1, 42, }, ++ { 1, 0, 0, 2, 1, 42, }, ++ { 0, 0, 0, 2, 2, 40, }, ++ { 2, 0, 0, 2, 2, 42, }, ++ { 1, 0, 0, 2, 2, 42, }, ++ { 0, 0, 0, 2, 3, 40, }, ++ { 2, 0, 0, 2, 3, 42, }, ++ { 1, 0, 0, 2, 3, 42, }, ++ { 0, 0, 0, 2, 4, 40, }, ++ { 2, 0, 0, 2, 4, 42, }, ++ { 1, 0, 0, 2, 4, 42, }, ++ { 0, 0, 0, 2, 5, 40, }, ++ { 2, 0, 0, 2, 5, 42, }, ++ { 1, 0, 0, 2, 5, 42, }, ++ { 0, 0, 0, 2, 6, 40, }, ++ { 2, 0, 0, 2, 6, 42, }, ++ { 1, 0, 0, 2, 6, 42, }, ++ { 0, 0, 0, 2, 7, 40, }, ++ { 2, 0, 0, 2, 7, 42, }, ++ { 1, 0, 0, 2, 7, 42, }, ++ { 0, 0, 0, 2, 8, 40, }, ++ { 2, 0, 0, 2, 8, 42, }, ++ { 1, 0, 0, 2, 8, 42, }, ++ { 0, 0, 0, 2, 9, 40, }, ++ { 2, 0, 0, 2, 9, 42, }, ++ { 1, 0, 0, 2, 9, 42, }, ++ { 0, 0, 0, 2, 10, 40, }, ++ { 2, 0, 0, 2, 10, 42, }, ++ { 1, 0, 0, 2, 10, 42, }, ++ { 0, 0, 0, 2, 11, 28, }, ++ { 2, 0, 0, 2, 11, 42, }, ++ { 1, 0, 0, 2, 11, 42, }, ++ { 0, 0, 0, 2, 12, 63, }, ++ { 2, 0, 0, 2, 12, 42, }, ++ { 1, 0, 0, 2, 12, 42, }, ++ { 0, 0, 0, 2, 13, 63, }, ++ { 2, 0, 0, 2, 13, 42, }, ++ { 1, 0, 0, 2, 13, 42, }, ++ { 0, 0, 0, 2, 14, 63, }, ++ { 2, 0, 0, 2, 14, 63, }, ++ { 1, 0, 0, 2, 14, 63, }, ++ { 0, 0, 0, 3, 1, 32, }, ++ { 2, 0, 0, 3, 1, 40, }, ++ { 1, 0, 0, 3, 1, 40, }, ++ { 0, 0, 0, 3, 2, 40, }, ++ { 2, 0, 0, 3, 2, 40, }, ++ { 1, 0, 0, 3, 2, 40, }, ++ { 0, 0, 0, 3, 3, 40, }, ++ { 2, 0, 0, 3, 3, 40, }, ++ { 1, 0, 0, 3, 3, 40, }, ++ { 0, 0, 0, 3, 4, 40, }, ++ { 2, 0, 0, 3, 4, 40, }, ++ { 1, 0, 0, 3, 4, 40, }, ++ { 0, 0, 0, 3, 5, 40, }, ++ { 2, 0, 0, 3, 5, 40, }, ++ { 1, 0, 0, 3, 5, 40, }, ++ { 0, 0, 0, 3, 6, 40, }, ++ { 2, 0, 0, 3, 6, 40, }, ++ { 1, 0, 0, 3, 6, 40, }, ++ { 0, 0, 0, 3, 7, 40, }, ++ { 2, 0, 0, 3, 7, 40, }, ++ { 1, 0, 0, 3, 7, 40, }, ++ { 0, 0, 0, 3, 8, 40, }, ++ { 2, 0, 0, 3, 8, 40, }, ++ { 1, 0, 0, 3, 8, 40, }, ++ { 0, 0, 0, 3, 9, 40, }, ++ { 2, 0, 0, 3, 9, 40, }, ++ { 1, 0, 0, 3, 9, 40, }, ++ { 0, 0, 0, 3, 10, 40, }, ++ { 2, 0, 0, 3, 10, 40, }, ++ { 1, 0, 0, 3, 10, 40, }, ++ { 0, 0, 0, 3, 11, 28, }, ++ { 2, 0, 0, 3, 11, 40, }, ++ { 1, 0, 0, 3, 11, 40, }, ++ { 0, 0, 0, 3, 12, 63, }, ++ { 2, 0, 0, 3, 12, 40, }, ++ { 1, 0, 0, 3, 12, 40, }, ++ { 0, 0, 0, 3, 13, 63, }, ++ { 2, 0, 0, 3, 13, 40, }, ++ { 1, 0, 0, 3, 13, 40, }, ++ { 0, 0, 0, 3, 14, 63, }, ++ { 2, 0, 0, 3, 14, 63, }, ++ { 1, 0, 0, 3, 14, 63, }, ++ { 0, 0, 0, 6, 1, 32, }, ++ { 2, 0, 0, 6, 1, 40, }, ++ { 1, 0, 0, 6, 1, 40, }, ++ { 0, 0, 0, 6, 2, 40, }, ++ { 2, 0, 0, 6, 2, 40, }, ++ { 1, 0, 0, 6, 2, 40, }, ++ { 0, 0, 0, 6, 3, 40, }, ++ { 2, 0, 0, 6, 3, 40, }, ++ { 1, 0, 0, 6, 3, 40, }, ++ { 0, 0, 0, 6, 4, 40, }, ++ { 2, 0, 0, 6, 4, 40, }, ++ { 1, 0, 0, 6, 4, 40, }, ++ { 0, 0, 0, 6, 5, 40, }, ++ { 2, 0, 0, 6, 5, 40, }, ++ { 1, 0, 0, 6, 5, 40, }, ++ { 0, 0, 0, 6, 6, 40, }, ++ { 2, 0, 0, 6, 6, 40, }, ++ { 1, 0, 0, 6, 6, 40, }, ++ { 0, 0, 0, 6, 7, 40, }, ++ { 2, 0, 0, 6, 7, 40, }, ++ { 1, 0, 0, 6, 7, 40, }, ++ { 0, 0, 0, 6, 8, 40, }, ++ { 2, 0, 0, 6, 8, 40, }, ++ { 1, 0, 0, 6, 8, 40, }, ++ { 0, 0, 0, 6, 9, 40, }, ++ { 2, 0, 0, 6, 9, 40, }, ++ { 1, 0, 0, 6, 9, 40, }, ++ { 0, 0, 0, 6, 10, 40, }, ++ { 2, 0, 0, 6, 10, 40, }, ++ { 1, 0, 0, 6, 10, 40, }, ++ { 0, 0, 0, 6, 11, 28, }, ++ { 2, 0, 0, 6, 11, 40, }, ++ { 1, 0, 0, 6, 11, 40, }, ++ { 0, 0, 0, 6, 12, 63, }, ++ { 2, 0, 0, 6, 12, 40, }, ++ { 1, 0, 0, 6, 12, 40, }, ++ { 0, 0, 0, 6, 13, 63, }, ++ { 2, 0, 0, 6, 13, 40, }, ++ { 1, 0, 0, 6, 13, 40, }, ++ { 0, 0, 0, 6, 14, 63, }, ++ { 2, 0, 0, 6, 14, 63, }, ++ { 1, 0, 0, 6, 14, 63, }, ++ { 0, 0, 0, 7, 1, 32, }, ++ { 2, 0, 0, 7, 1, 40, }, ++ { 1, 0, 0, 7, 1, 40, }, ++ { 0, 0, 0, 7, 2, 40, }, ++ { 2, 0, 0, 7, 2, 40, }, ++ { 1, 0, 0, 7, 2, 40, }, ++ { 0, 0, 0, 7, 3, 40, }, ++ { 2, 0, 0, 7, 3, 40, }, ++ { 1, 0, 0, 7, 3, 40, }, ++ { 0, 0, 0, 7, 4, 40, }, ++ { 2, 0, 0, 7, 4, 40, }, ++ { 1, 0, 0, 7, 4, 40, }, ++ { 0, 0, 0, 7, 5, 40, }, ++ { 2, 0, 0, 7, 5, 40, }, ++ { 1, 0, 0, 7, 5, 40, }, ++ { 0, 0, 0, 7, 6, 40, }, ++ { 2, 0, 0, 7, 6, 40, }, ++ { 1, 0, 0, 7, 6, 40, }, ++ { 0, 0, 0, 7, 7, 40, }, ++ { 2, 0, 0, 7, 7, 40, }, ++ { 1, 0, 0, 7, 7, 40, }, ++ { 0, 0, 0, 7, 8, 40, }, ++ { 2, 0, 0, 7, 8, 40, }, ++ { 1, 0, 0, 7, 8, 40, }, ++ { 0, 0, 0, 7, 9, 40, }, ++ { 2, 0, 0, 7, 9, 40, }, ++ { 1, 0, 0, 7, 9, 40, }, ++ { 0, 0, 0, 7, 10, 40, }, ++ { 2, 0, 0, 7, 10, 40, }, ++ { 1, 0, 0, 7, 10, 40, }, ++ { 0, 0, 0, 7, 11, 28, }, ++ { 2, 0, 0, 7, 11, 40, }, ++ { 1, 0, 0, 7, 11, 40, }, ++ { 0, 0, 0, 7, 12, 63, }, ++ { 2, 0, 0, 7, 12, 40, }, ++ { 1, 0, 0, 7, 12, 40, }, ++ { 0, 0, 0, 7, 13, 63, }, ++ { 2, 0, 0, 7, 13, 40, }, ++ { 1, 0, 0, 7, 13, 40, }, ++ { 0, 0, 0, 7, 14, 63, }, ++ { 2, 0, 0, 7, 14, 63, }, ++ { 1, 0, 0, 7, 14, 63, }, ++ { 0, 0, 1, 2, 1, 63, }, ++ { 2, 0, 1, 2, 1, 63, }, ++ { 1, 0, 1, 2, 1, 63, }, ++ { 0, 0, 1, 2, 2, 63, }, ++ { 2, 0, 1, 2, 2, 63, }, ++ { 1, 0, 1, 2, 2, 63, }, ++ { 0, 0, 1, 2, 3, 30, }, ++ { 2, 0, 1, 2, 3, 34, }, ++ { 1, 0, 1, 2, 3, 34, }, ++ { 0, 0, 1, 2, 4, 34, }, ++ { 2, 0, 1, 2, 4, 34, }, ++ { 1, 0, 1, 2, 4, 34, }, ++ { 0, 0, 1, 2, 5, 34, }, ++ { 2, 0, 1, 2, 5, 34, }, ++ { 1, 0, 1, 2, 5, 34, }, ++ { 0, 0, 1, 2, 6, 34, }, ++ { 2, 0, 1, 2, 6, 34, }, ++ { 1, 0, 1, 2, 6, 34, }, ++ { 0, 0, 1, 2, 7, 34, }, ++ { 2, 0, 1, 2, 7, 34, }, ++ { 1, 0, 1, 2, 7, 34, }, ++ { 0, 0, 1, 2, 8, 34, }, ++ { 2, 0, 1, 2, 8, 34, }, ++ { 1, 0, 1, 2, 8, 34, }, ++ { 0, 0, 1, 2, 9, 34, }, ++ { 2, 0, 1, 2, 9, 34, }, ++ { 1, 0, 1, 2, 9, 34, }, ++ { 0, 0, 1, 2, 10, 34, }, ++ { 2, 0, 1, 2, 10, 34, }, ++ { 1, 0, 1, 2, 10, 34, }, ++ { 0, 0, 1, 2, 11, 28, }, ++ { 2, 0, 1, 2, 11, 34, }, ++ { 1, 0, 1, 2, 11, 34, }, ++ { 0, 0, 1, 2, 12, 63, }, ++ { 2, 0, 1, 2, 12, 34, }, ++ { 1, 0, 1, 2, 12, 34, }, ++ { 0, 0, 1, 2, 13, 63, }, ++ { 2, 0, 1, 2, 13, 34, }, ++ { 1, 0, 1, 2, 13, 34, }, ++ { 0, 0, 1, 2, 14, 63, }, ++ { 2, 0, 1, 2, 14, 63, }, ++ { 1, 0, 1, 2, 14, 63, }, ++ { 0, 0, 1, 3, 1, 63, }, ++ { 2, 0, 1, 3, 1, 63, }, ++ { 1, 0, 1, 3, 1, 63, }, ++ { 0, 0, 1, 3, 2, 63, }, ++ { 2, 0, 1, 3, 2, 63, }, ++ { 1, 0, 1, 3, 2, 63, }, ++ { 0, 0, 1, 3, 3, 30, }, ++ { 2, 0, 1, 3, 3, 34, }, ++ { 1, 0, 1, 3, 3, 34, }, ++ { 0, 0, 1, 3, 4, 34, }, ++ { 2, 0, 1, 3, 4, 34, }, ++ { 1, 0, 1, 3, 4, 34, }, ++ { 0, 0, 1, 3, 5, 34, }, ++ { 2, 0, 1, 3, 5, 34, }, ++ { 1, 0, 1, 3, 5, 34, }, ++ { 0, 0, 1, 3, 6, 34, }, ++ { 2, 0, 1, 3, 6, 34, }, ++ { 1, 0, 1, 3, 6, 34, }, ++ { 0, 0, 1, 3, 7, 34, }, ++ { 2, 0, 1, 3, 7, 34, }, ++ { 1, 0, 1, 3, 7, 34, }, ++ { 0, 0, 1, 3, 8, 34, }, ++ { 2, 0, 1, 3, 8, 34, }, ++ { 1, 0, 1, 3, 8, 34, }, ++ { 0, 0, 1, 3, 9, 34, }, ++ { 2, 0, 1, 3, 9, 34, }, ++ { 1, 0, 1, 3, 9, 34, }, ++ { 0, 0, 1, 3, 10, 34, }, ++ { 2, 0, 1, 3, 10, 34, }, ++ { 1, 0, 1, 3, 10, 34, }, ++ { 0, 0, 1, 3, 11, 28, }, ++ { 2, 0, 1, 3, 11, 34, }, ++ { 1, 0, 1, 3, 11, 34, }, ++ { 0, 0, 1, 3, 12, 63, }, ++ { 2, 0, 1, 3, 12, 34, }, ++ { 1, 0, 1, 3, 12, 34, }, ++ { 0, 0, 1, 3, 13, 63, }, ++ { 2, 0, 1, 3, 13, 34, }, ++ { 1, 0, 1, 3, 13, 34, }, ++ { 0, 0, 1, 3, 14, 63, }, ++ { 2, 0, 1, 3, 14, 63, }, ++ { 1, 0, 1, 3, 14, 63, }, ++ { 0, 0, 1, 6, 1, 63, }, ++ { 2, 0, 1, 6, 1, 63, }, ++ { 1, 0, 1, 6, 1, 63, }, ++ { 0, 0, 1, 6, 2, 63, }, ++ { 2, 0, 1, 6, 2, 63, }, ++ { 1, 0, 1, 6, 2, 63, }, ++ { 0, 0, 1, 6, 3, 30, }, ++ { 2, 0, 1, 6, 3, 34, }, ++ { 1, 0, 1, 6, 3, 34, }, ++ { 0, 0, 1, 6, 4, 34, }, ++ { 2, 0, 1, 6, 4, 34, }, ++ { 1, 0, 1, 6, 4, 34, }, ++ { 0, 0, 1, 6, 5, 34, }, ++ { 2, 0, 1, 6, 5, 34, }, ++ { 1, 0, 1, 6, 5, 34, }, ++ { 0, 0, 1, 6, 6, 34, }, ++ { 2, 0, 1, 6, 6, 34, }, ++ { 1, 0, 1, 6, 6, 34, }, ++ { 0, 0, 1, 6, 7, 34, }, ++ { 2, 0, 1, 6, 7, 34, }, ++ { 1, 0, 1, 6, 7, 34, }, ++ { 0, 0, 1, 6, 8, 34, }, ++ { 2, 0, 1, 6, 8, 34, }, ++ { 1, 0, 1, 6, 8, 34, }, ++ { 0, 0, 1, 6, 9, 34, }, ++ { 2, 0, 1, 6, 9, 34, }, ++ { 1, 0, 1, 6, 9, 34, }, ++ { 0, 0, 1, 6, 10, 34, }, ++ { 2, 0, 1, 6, 10, 34, }, ++ { 1, 0, 1, 6, 10, 34, }, ++ { 0, 0, 1, 6, 11, 28, }, ++ { 2, 0, 1, 6, 11, 34, }, ++ { 1, 0, 1, 6, 11, 34, }, ++ { 0, 0, 1, 6, 12, 63, }, ++ { 2, 0, 1, 6, 12, 34, }, ++ { 1, 0, 1, 6, 12, 34, }, ++ { 0, 0, 1, 6, 13, 63, }, ++ { 2, 0, 1, 6, 13, 34, }, ++ { 1, 0, 1, 6, 13, 34, }, ++ { 0, 0, 1, 6, 14, 63, }, ++ { 2, 0, 1, 6, 14, 63, }, ++ { 1, 0, 1, 6, 14, 63, }, ++ { 0, 0, 1, 7, 1, 63, }, ++ { 2, 0, 1, 7, 1, 63, }, ++ { 1, 0, 1, 7, 1, 63, }, ++ { 0, 0, 1, 7, 2, 63, }, ++ { 2, 0, 1, 7, 2, 63, }, ++ { 1, 0, 1, 7, 2, 63, }, ++ { 0, 0, 1, 7, 3, 30, }, ++ { 2, 0, 1, 7, 3, 34, }, ++ { 1, 0, 1, 7, 3, 34, }, ++ { 0, 0, 1, 7, 4, 34, }, ++ { 2, 0, 1, 7, 4, 34, }, ++ { 1, 0, 1, 7, 4, 34, }, ++ { 0, 0, 1, 7, 5, 34, }, ++ { 2, 0, 1, 7, 5, 34, }, ++ { 1, 0, 1, 7, 5, 34, }, ++ { 0, 0, 1, 7, 6, 34, }, ++ { 2, 0, 1, 7, 6, 34, }, ++ { 1, 0, 1, 7, 6, 34, }, ++ { 0, 0, 1, 7, 7, 34, }, ++ { 2, 0, 1, 7, 7, 34, }, ++ { 1, 0, 1, 7, 7, 34, }, ++ { 0, 0, 1, 7, 8, 34, }, ++ { 2, 0, 1, 7, 8, 34, }, ++ { 1, 0, 1, 7, 8, 34, }, ++ { 0, 0, 1, 7, 9, 34, }, ++ { 2, 0, 1, 7, 9, 34, }, ++ { 1, 0, 1, 7, 9, 34, }, ++ { 0, 0, 1, 7, 10, 34, }, ++ { 2, 0, 1, 7, 10, 34, }, ++ { 1, 0, 1, 7, 10, 34, }, ++ { 0, 0, 1, 7, 11, 28, }, ++ { 2, 0, 1, 7, 11, 34, }, ++ { 1, 0, 1, 7, 11, 34, }, ++ { 0, 0, 1, 7, 12, 63, }, ++ { 2, 0, 1, 7, 12, 34, }, ++ { 1, 0, 1, 7, 12, 34, }, ++ { 0, 0, 1, 7, 13, 63, }, ++ { 2, 0, 1, 7, 13, 34, }, ++ { 1, 0, 1, 7, 13, 34, }, ++ { 0, 0, 1, 7, 14, 63, }, ++ { 2, 0, 1, 7, 14, 63, }, ++ { 1, 0, 1, 7, 14, 63, }, ++ { 0, 1, 0, 1, 36, 42, }, ++ { 2, 1, 0, 1, 36, 42, }, ++ { 1, 1, 0, 1, 36, 42, }, ++ { 0, 1, 0, 1, 40, 42, }, ++ { 2, 1, 0, 1, 40, 42, }, ++ { 1, 1, 0, 1, 40, 42, }, ++ { 0, 1, 0, 1, 44, 42, }, ++ { 2, 1, 0, 1, 44, 42, }, ++ { 1, 1, 0, 1, 44, 42, }, ++ { 0, 1, 0, 1, 48, 42, }, ++ { 2, 1, 0, 1, 48, 42, }, ++ { 1, 1, 0, 1, 48, 42, }, ++ { 0, 1, 0, 1, 52, 42, }, ++ { 2, 1, 0, 1, 52, 42, }, ++ { 1, 1, 0, 1, 52, 42, }, ++ { 0, 1, 0, 1, 56, 42, }, ++ { 2, 1, 0, 1, 56, 42, }, ++ { 1, 1, 0, 1, 56, 42, }, ++ { 0, 1, 0, 1, 60, 42, }, ++ { 2, 1, 0, 1, 60, 42, }, ++ { 1, 1, 0, 1, 60, 42, }, ++ { 0, 1, 0, 1, 64, 42, }, ++ { 2, 1, 0, 1, 64, 42, }, ++ { 1, 1, 0, 1, 64, 42, }, ++ { 0, 1, 0, 1, 100, 42, }, ++ { 2, 1, 0, 1, 100, 42, }, ++ { 1, 1, 0, 1, 100, 42, }, ++ { 0, 1, 0, 1, 104, 42, }, ++ { 2, 1, 0, 1, 104, 42, }, ++ { 1, 1, 0, 1, 104, 42, }, ++ { 0, 1, 0, 1, 108, 42, }, ++ { 2, 1, 0, 1, 108, 42, }, ++ { 1, 1, 0, 1, 108, 42, }, ++ { 0, 1, 0, 1, 112, 42, }, ++ { 2, 1, 0, 1, 112, 42, }, ++ { 1, 1, 0, 1, 112, 42, }, ++ { 0, 1, 0, 1, 116, 42, }, ++ { 2, 1, 0, 1, 116, 42, }, ++ { 1, 1, 0, 1, 116, 42, }, ++ { 0, 1, 0, 1, 120, 42, }, ++ { 2, 1, 0, 1, 120, 42, }, ++ { 1, 1, 0, 1, 120, 42, }, ++ { 0, 1, 0, 1, 124, 42, }, ++ { 2, 1, 0, 1, 124, 42, }, ++ { 1, 1, 0, 1, 124, 42, }, ++ { 0, 1, 0, 1, 128, 42, }, ++ { 2, 1, 0, 1, 128, 42, }, ++ { 1, 1, 0, 1, 128, 42, }, ++ { 0, 1, 0, 1, 132, 42, }, ++ { 2, 1, 0, 1, 132, 42, }, ++ { 1, 1, 0, 1, 132, 42, }, ++ { 0, 1, 0, 1, 136, 42, }, ++ { 2, 1, 0, 1, 136, 42, }, ++ { 1, 1, 0, 1, 136, 42, }, ++ { 0, 1, 0, 1, 140, 40, }, ++ { 2, 1, 0, 1, 140, 40, }, ++ { 1, 1, 0, 1, 140, 40, }, ++ { 0, 1, 0, 1, 149, 44, }, ++ { 2, 1, 0, 1, 149, 44, }, ++ { 1, 1, 0, 1, 149, 63, }, ++ { 0, 1, 0, 1, 153, 44, }, ++ { 2, 1, 0, 1, 153, 44, }, ++ { 1, 1, 0, 1, 153, 63, }, ++ { 0, 1, 0, 1, 157, 44, }, ++ { 2, 1, 0, 1, 157, 44, }, ++ { 1, 1, 0, 1, 157, 63, }, ++ { 0, 1, 0, 1, 161, 44, }, ++ { 2, 1, 0, 1, 161, 44, }, ++ { 1, 1, 0, 1, 161, 63, }, ++ { 0, 1, 0, 1, 165, 44, }, ++ { 2, 1, 0, 1, 165, 44, }, ++ { 1, 1, 0, 1, 165, 63, }, ++ { 0, 1, 0, 2, 36, 32, }, ++ { 2, 1, 0, 2, 36, 32, }, ++ { 1, 1, 0, 2, 36, 32, }, ++ { 0, 1, 0, 2, 40, 32, }, ++ { 2, 1, 0, 2, 40, 32, }, ++ { 1, 1, 0, 2, 40, 32, }, ++ { 0, 1, 0, 2, 44, 32, }, ++ { 2, 1, 0, 2, 44, 32, }, ++ { 1, 1, 0, 2, 44, 32, }, ++ { 0, 1, 0, 2, 48, 36, }, ++ { 2, 1, 0, 2, 48, 36, }, ++ { 1, 1, 0, 2, 48, 36, }, ++ { 0, 1, 0, 2, 52, 36, }, ++ { 2, 1, 0, 2, 52, 36, }, ++ { 1, 1, 0, 2, 52, 36, }, ++ { 0, 1, 0, 2, 56, 32, }, ++ { 2, 1, 0, 2, 56, 32, }, ++ { 1, 1, 0, 2, 56, 32, }, ++ { 0, 1, 0, 2, 60, 32, }, ++ { 2, 1, 0, 2, 60, 32, }, ++ { 1, 1, 0, 2, 60, 32, }, ++ { 0, 1, 0, 2, 64, 32, }, ++ { 2, 1, 0, 2, 64, 32, }, ++ { 1, 1, 0, 2, 64, 32, }, ++ { 0, 1, 0, 2, 100, 32, }, ++ { 2, 1, 0, 2, 100, 32, }, ++ { 1, 1, 0, 2, 100, 32, }, ++ { 0, 1, 0, 2, 104, 32, }, ++ { 2, 1, 0, 2, 104, 32, }, ++ { 1, 1, 0, 2, 104, 32, }, ++ { 0, 1, 0, 2, 108, 32, }, ++ { 2, 1, 0, 2, 108, 32, }, ++ { 1, 1, 0, 2, 108, 32, }, ++ { 0, 1, 0, 2, 112, 32, }, ++ { 2, 1, 0, 2, 112, 32, }, ++ { 1, 1, 0, 2, 112, 32, }, ++ { 0, 1, 0, 2, 116, 32, }, ++ { 2, 1, 0, 2, 116, 32, }, ++ { 1, 1, 0, 2, 116, 32, }, ++ { 0, 1, 0, 2, 120, 32, }, ++ { 2, 1, 0, 2, 120, 32, }, ++ { 1, 1, 0, 2, 120, 32, }, ++ { 0, 1, 0, 2, 124, 32, }, ++ { 2, 1, 0, 2, 124, 32, }, ++ { 1, 1, 0, 2, 124, 32, }, ++ { 0, 1, 0, 2, 128, 32, }, ++ { 2, 1, 0, 2, 128, 32, }, ++ { 1, 1, 0, 2, 128, 32, }, ++ { 0, 1, 0, 2, 132, 32, }, ++ { 2, 1, 0, 2, 132, 32, }, ++ { 1, 1, 0, 2, 132, 32, }, ++ { 0, 1, 0, 2, 136, 32, }, ++ { 2, 1, 0, 2, 136, 32, }, ++ { 1, 1, 0, 2, 136, 32, }, ++ { 0, 1, 0, 2, 140, 30, }, ++ { 2, 1, 0, 2, 140, 30, }, ++ { 1, 1, 0, 2, 140, 30, }, ++ { 0, 1, 0, 2, 149, 40, }, ++ { 2, 1, 0, 2, 149, 40, }, ++ { 1, 1, 0, 2, 149, 63, }, ++ { 0, 1, 0, 2, 153, 40, }, ++ { 2, 1, 0, 2, 153, 40, }, ++ { 1, 1, 0, 2, 153, 63, }, ++ { 0, 1, 0, 2, 157, 40, }, ++ { 2, 1, 0, 2, 157, 40, }, ++ { 1, 1, 0, 2, 157, 63, }, ++ { 0, 1, 0, 2, 161, 40, }, ++ { 2, 1, 0, 2, 161, 40, }, ++ { 1, 1, 0, 2, 161, 63, }, ++ { 0, 1, 0, 2, 165, 42, }, ++ { 2, 1, 0, 2, 165, 42, }, ++ { 1, 1, 0, 2, 165, 63, }, ++ { 0, 1, 0, 3, 36, 32, }, ++ { 2, 1, 0, 3, 36, 32, }, ++ { 1, 1, 0, 3, 36, 32, }, ++ { 0, 1, 0, 3, 40, 32, }, ++ { 2, 1, 0, 3, 40, 32, }, ++ { 1, 1, 0, 3, 40, 32, }, ++ { 0, 1, 0, 3, 44, 32, }, ++ { 2, 1, 0, 3, 44, 32, }, ++ { 1, 1, 0, 3, 44, 32, }, ++ { 0, 1, 0, 3, 48, 36, }, ++ { 2, 1, 0, 3, 48, 36, }, ++ { 1, 1, 0, 3, 48, 36, }, ++ { 0, 1, 0, 3, 52, 36, }, ++ { 2, 1, 0, 3, 52, 36, }, ++ { 1, 1, 0, 3, 52, 36, }, ++ { 0, 1, 0, 3, 56, 32, }, ++ { 2, 1, 0, 3, 56, 32, }, ++ { 1, 1, 0, 3, 56, 32, }, ++ { 0, 1, 0, 3, 60, 32, }, ++ { 2, 1, 0, 3, 60, 32, }, ++ { 1, 1, 0, 3, 60, 32, }, ++ { 0, 1, 0, 3, 64, 32, }, ++ { 2, 1, 0, 3, 64, 32, }, ++ { 1, 1, 0, 3, 64, 32, }, ++ { 0, 1, 0, 3, 100, 32, }, ++ { 2, 1, 0, 3, 100, 32, }, ++ { 1, 1, 0, 3, 100, 32, }, ++ { 0, 1, 0, 3, 104, 32, }, ++ { 2, 1, 0, 3, 104, 32, }, ++ { 1, 1, 0, 3, 104, 32, }, ++ { 0, 1, 0, 3, 108, 32, }, ++ { 2, 1, 0, 3, 108, 32, }, ++ { 1, 1, 0, 3, 108, 32, }, ++ { 0, 1, 0, 3, 112, 32, }, ++ { 2, 1, 0, 3, 112, 32, }, ++ { 1, 1, 0, 3, 112, 32, }, ++ { 0, 1, 0, 3, 116, 32, }, ++ { 2, 1, 0, 3, 116, 32, }, ++ { 1, 1, 0, 3, 116, 32, }, ++ { 0, 1, 0, 3, 120, 32, }, ++ { 2, 1, 0, 3, 120, 32, }, ++ { 1, 1, 0, 3, 120, 32, }, ++ { 0, 1, 0, 3, 124, 32, }, ++ { 2, 1, 0, 3, 124, 32, }, ++ { 1, 1, 0, 3, 124, 32, }, ++ { 0, 1, 0, 3, 128, 32, }, ++ { 2, 1, 0, 3, 128, 32, }, ++ { 1, 1, 0, 3, 128, 32, }, ++ { 0, 1, 0, 3, 132, 32, }, ++ { 2, 1, 0, 3, 132, 32, }, ++ { 1, 1, 0, 3, 132, 32, }, ++ { 0, 1, 0, 3, 136, 32, }, ++ { 2, 1, 0, 3, 136, 32, }, ++ { 1, 1, 0, 3, 136, 32, }, ++ { 0, 1, 0, 3, 140, 30, }, ++ { 2, 1, 0, 3, 140, 30, }, ++ { 1, 1, 0, 3, 140, 30, }, ++ { 0, 1, 0, 3, 149, 40, }, ++ { 2, 1, 0, 3, 149, 40, }, ++ { 1, 1, 0, 3, 149, 63, }, ++ { 0, 1, 0, 3, 153, 40, }, ++ { 2, 1, 0, 3, 153, 40, }, ++ { 1, 1, 0, 3, 153, 63, }, ++ { 0, 1, 0, 3, 157, 40, }, ++ { 2, 1, 0, 3, 157, 40, }, ++ { 1, 1, 0, 3, 157, 63, }, ++ { 0, 1, 0, 3, 161, 40, }, ++ { 2, 1, 0, 3, 161, 40, }, ++ { 1, 1, 0, 3, 161, 63, }, ++ { 0, 1, 0, 3, 165, 42, }, ++ { 2, 1, 0, 3, 165, 42, }, ++ { 1, 1, 0, 3, 165, 63, }, ++ { 0, 1, 0, 6, 36, 32, }, ++ { 2, 1, 0, 6, 36, 32, }, ++ { 1, 1, 0, 6, 36, 32, }, ++ { 0, 1, 0, 6, 40, 32, }, ++ { 2, 1, 0, 6, 40, 32, }, ++ { 1, 1, 0, 6, 40, 32, }, ++ { 0, 1, 0, 6, 44, 32, }, ++ { 2, 1, 0, 6, 44, 32, }, ++ { 1, 1, 0, 6, 44, 32, }, ++ { 0, 1, 0, 6, 48, 36, }, ++ { 2, 1, 0, 6, 48, 36, }, ++ { 1, 1, 0, 6, 48, 36, }, ++ { 0, 1, 0, 6, 52, 36, }, ++ { 2, 1, 0, 6, 52, 36, }, ++ { 1, 1, 0, 6, 52, 36, }, ++ { 0, 1, 0, 6, 56, 32, }, ++ { 2, 1, 0, 6, 56, 32, }, ++ { 1, 1, 0, 6, 56, 32, }, ++ { 0, 1, 0, 6, 60, 32, }, ++ { 2, 1, 0, 6, 60, 32, }, ++ { 1, 1, 0, 6, 60, 32, }, ++ { 0, 1, 0, 6, 64, 32, }, ++ { 2, 1, 0, 6, 64, 32, }, ++ { 1, 1, 0, 6, 64, 32, }, ++ { 0, 1, 0, 6, 100, 32, }, ++ { 2, 1, 0, 6, 100, 32, }, ++ { 1, 1, 0, 6, 100, 32, }, ++ { 0, 1, 0, 6, 104, 32, }, ++ { 2, 1, 0, 6, 104, 32, }, ++ { 1, 1, 0, 6, 104, 32, }, ++ { 0, 1, 0, 6, 108, 32, }, ++ { 2, 1, 0, 6, 108, 32, }, ++ { 1, 1, 0, 6, 108, 32, }, ++ { 0, 1, 0, 6, 112, 32, }, ++ { 2, 1, 0, 6, 112, 32, }, ++ { 1, 1, 0, 6, 112, 32, }, ++ { 0, 1, 0, 6, 116, 32, }, ++ { 2, 1, 0, 6, 116, 32, }, ++ { 1, 1, 0, 6, 116, 32, }, ++ { 0, 1, 0, 6, 120, 32, }, ++ { 2, 1, 0, 6, 120, 32, }, ++ { 1, 1, 0, 6, 120, 32, }, ++ { 0, 1, 0, 6, 124, 32, }, ++ { 2, 1, 0, 6, 124, 32, }, ++ { 1, 1, 0, 6, 124, 32, }, ++ { 0, 1, 0, 6, 128, 32, }, ++ { 2, 1, 0, 6, 128, 32, }, ++ { 1, 1, 0, 6, 128, 32, }, ++ { 0, 1, 0, 6, 132, 32, }, ++ { 2, 1, 0, 6, 132, 32, }, ++ { 1, 1, 0, 6, 132, 32, }, ++ { 0, 1, 0, 6, 136, 32, }, ++ { 2, 1, 0, 6, 136, 32, }, ++ { 1, 1, 0, 6, 136, 32, }, ++ { 0, 1, 0, 6, 140, 30, }, ++ { 2, 1, 0, 6, 140, 30, }, ++ { 1, 1, 0, 6, 140, 30, }, ++ { 0, 1, 0, 6, 149, 40, }, ++ { 2, 1, 0, 6, 149, 40, }, ++ { 1, 1, 0, 6, 149, 63, }, ++ { 0, 1, 0, 6, 153, 40, }, ++ { 2, 1, 0, 6, 153, 40, }, ++ { 1, 1, 0, 6, 153, 63, }, ++ { 0, 1, 0, 6, 157, 40, }, ++ { 2, 1, 0, 6, 157, 40, }, ++ { 1, 1, 0, 6, 157, 63, }, ++ { 0, 1, 0, 6, 161, 40, }, ++ { 2, 1, 0, 6, 161, 40, }, ++ { 1, 1, 0, 6, 161, 63, }, ++ { 0, 1, 0, 6, 165, 42, }, ++ { 2, 1, 0, 6, 165, 42, }, ++ { 1, 1, 0, 6, 165, 63, }, ++ { 0, 1, 0, 7, 36, 32, }, ++ { 2, 1, 0, 7, 36, 32, }, ++ { 1, 1, 0, 7, 36, 32, }, ++ { 0, 1, 0, 7, 40, 32, }, ++ { 2, 1, 0, 7, 40, 32, }, ++ { 1, 1, 0, 7, 40, 32, }, ++ { 0, 1, 0, 7, 44, 32, }, ++ { 2, 1, 0, 7, 44, 32, }, ++ { 1, 1, 0, 7, 44, 32, }, ++ { 0, 1, 0, 7, 48, 36, }, ++ { 2, 1, 0, 7, 48, 36, }, ++ { 1, 1, 0, 7, 48, 36, }, ++ { 0, 1, 0, 7, 52, 36, }, ++ { 2, 1, 0, 7, 52, 36, }, ++ { 1, 1, 0, 7, 52, 36, }, ++ { 0, 1, 0, 7, 56, 32, }, ++ { 2, 1, 0, 7, 56, 32, }, ++ { 1, 1, 0, 7, 56, 32, }, ++ { 0, 1, 0, 7, 60, 32, }, ++ { 2, 1, 0, 7, 60, 32, }, ++ { 1, 1, 0, 7, 60, 32, }, ++ { 0, 1, 0, 7, 64, 32, }, ++ { 2, 1, 0, 7, 64, 32, }, ++ { 1, 1, 0, 7, 64, 32, }, ++ { 0, 1, 0, 7, 100, 32, }, ++ { 2, 1, 0, 7, 100, 32, }, ++ { 1, 1, 0, 7, 100, 32, }, ++ { 0, 1, 0, 7, 104, 32, }, ++ { 2, 1, 0, 7, 104, 32, }, ++ { 1, 1, 0, 7, 104, 32, }, ++ { 0, 1, 0, 7, 108, 32, }, ++ { 2, 1, 0, 7, 108, 32, }, ++ { 1, 1, 0, 7, 108, 32, }, ++ { 0, 1, 0, 7, 112, 32, }, ++ { 2, 1, 0, 7, 112, 32, }, ++ { 1, 1, 0, 7, 112, 32, }, ++ { 0, 1, 0, 7, 116, 32, }, ++ { 2, 1, 0, 7, 116, 32, }, ++ { 1, 1, 0, 7, 116, 32, }, ++ { 0, 1, 0, 7, 120, 32, }, ++ { 2, 1, 0, 7, 120, 32, }, ++ { 1, 1, 0, 7, 120, 32, }, ++ { 0, 1, 0, 7, 124, 32, }, ++ { 2, 1, 0, 7, 124, 32, }, ++ { 1, 1, 0, 7, 124, 32, }, ++ { 0, 1, 0, 7, 128, 32, }, ++ { 2, 1, 0, 7, 128, 32, }, ++ { 1, 1, 0, 7, 128, 32, }, ++ { 0, 1, 0, 7, 132, 32, }, ++ { 2, 1, 0, 7, 132, 32, }, ++ { 1, 1, 0, 7, 132, 32, }, ++ { 0, 1, 0, 7, 136, 32, }, ++ { 2, 1, 0, 7, 136, 32, }, ++ { 1, 1, 0, 7, 136, 32, }, ++ { 0, 1, 0, 7, 140, 30, }, ++ { 2, 1, 0, 7, 140, 30, }, ++ { 1, 1, 0, 7, 140, 30, }, ++ { 0, 1, 0, 7, 149, 40, }, ++ { 2, 1, 0, 7, 149, 40, }, ++ { 1, 1, 0, 7, 149, 63, }, ++ { 0, 1, 0, 7, 153, 40, }, ++ { 2, 1, 0, 7, 153, 40, }, ++ { 1, 1, 0, 7, 153, 63, }, ++ { 0, 1, 0, 7, 157, 40, }, ++ { 2, 1, 0, 7, 157, 40, }, ++ { 1, 1, 0, 7, 157, 63, }, ++ { 0, 1, 0, 7, 161, 40, }, ++ { 2, 1, 0, 7, 161, 40, }, ++ { 1, 1, 0, 7, 161, 63, }, ++ { 0, 1, 0, 7, 165, 42, }, ++ { 2, 1, 0, 7, 165, 42, }, ++ { 1, 1, 0, 7, 165, 63, }, ++ { 0, 1, 1, 2, 38, 32, }, ++ { 2, 1, 1, 2, 38, 32, }, ++ { 1, 1, 1, 2, 38, 32, }, ++ { 0, 1, 1, 2, 46, 36, }, ++ { 2, 1, 1, 2, 46, 36, }, ++ { 1, 1, 1, 2, 46, 36, }, ++ { 0, 1, 1, 2, 54, 36, }, ++ { 2, 1, 1, 2, 54, 36, }, ++ { 1, 1, 1, 2, 54, 36, }, ++ { 0, 1, 1, 2, 62, 32, }, ++ { 2, 1, 1, 2, 62, 32, }, ++ { 1, 1, 1, 2, 62, 32, }, ++ { 0, 1, 1, 2, 102, 30, }, ++ { 2, 1, 1, 2, 102, 30, }, ++ { 1, 1, 1, 2, 102, 30, }, ++ { 0, 1, 1, 2, 110, 32, }, ++ { 2, 1, 1, 2, 110, 32, }, ++ { 1, 1, 1, 2, 110, 32, }, ++ { 0, 1, 1, 2, 118, 32, }, ++ { 2, 1, 1, 2, 118, 32, }, ++ { 1, 1, 1, 2, 118, 32, }, ++ { 0, 1, 1, 2, 126, 32, }, ++ { 2, 1, 1, 2, 126, 32, }, ++ { 1, 1, 1, 2, 126, 32, }, ++ { 0, 1, 1, 2, 134, 36, }, ++ { 2, 1, 1, 2, 134, 36, }, ++ { 1, 1, 1, 2, 134, 36, }, ++ { 0, 1, 1, 2, 151, 36, }, ++ { 2, 1, 1, 2, 151, 36, }, ++ { 1, 1, 1, 2, 151, 63, }, ++ { 0, 1, 1, 2, 159, 40, }, ++ { 2, 1, 1, 2, 159, 40, }, ++ { 1, 1, 1, 2, 159, 63, }, ++ { 0, 1, 1, 3, 38, 32, }, ++ { 2, 1, 1, 3, 38, 32, }, ++ { 1, 1, 1, 3, 38, 32, }, ++ { 0, 1, 1, 3, 46, 36, }, ++ { 2, 1, 1, 3, 46, 36, }, ++ { 1, 1, 1, 3, 46, 36, }, ++ { 0, 1, 1, 3, 54, 36, }, ++ { 2, 1, 1, 3, 54, 36, }, ++ { 1, 1, 1, 3, 54, 36, }, ++ { 0, 1, 1, 3, 62, 32, }, ++ { 2, 1, 1, 3, 62, 32, }, ++ { 1, 1, 1, 3, 62, 32, }, ++ { 0, 1, 1, 3, 102, 30, }, ++ { 2, 1, 1, 3, 102, 30, }, ++ { 1, 1, 1, 3, 102, 30, }, ++ { 0, 1, 1, 3, 110, 32, }, ++ { 2, 1, 1, 3, 110, 32, }, ++ { 1, 1, 1, 3, 110, 32, }, ++ { 0, 1, 1, 3, 118, 32, }, ++ { 2, 1, 1, 3, 118, 32, }, ++ { 1, 1, 1, 3, 118, 32, }, ++ { 0, 1, 1, 3, 126, 32, }, ++ { 2, 1, 1, 3, 126, 32, }, ++ { 1, 1, 1, 3, 126, 32, }, ++ { 0, 1, 1, 3, 134, 36, }, ++ { 2, 1, 1, 3, 134, 36, }, ++ { 1, 1, 1, 3, 134, 36, }, ++ { 0, 1, 1, 3, 151, 36, }, ++ { 2, 1, 1, 3, 151, 36, }, ++ { 1, 1, 1, 3, 151, 63, }, ++ { 0, 1, 1, 3, 159, 40, }, ++ { 2, 1, 1, 3, 159, 40, }, ++ { 1, 1, 1, 3, 159, 63, }, ++ { 0, 1, 1, 6, 38, 32, }, ++ { 2, 1, 1, 6, 38, 32, }, ++ { 1, 1, 1, 6, 38, 32, }, ++ { 0, 1, 1, 6, 46, 36, }, ++ { 2, 1, 1, 6, 46, 36, }, ++ { 1, 1, 1, 6, 46, 36, }, ++ { 0, 1, 1, 6, 54, 36, }, ++ { 2, 1, 1, 6, 54, 36, }, ++ { 1, 1, 1, 6, 54, 36, }, ++ { 0, 1, 1, 6, 62, 32, }, ++ { 2, 1, 1, 6, 62, 32, }, ++ { 1, 1, 1, 6, 62, 32, }, ++ { 0, 1, 1, 6, 102, 30, }, ++ { 2, 1, 1, 6, 102, 30, }, ++ { 1, 1, 1, 6, 102, 30, }, ++ { 0, 1, 1, 6, 110, 32, }, ++ { 2, 1, 1, 6, 110, 32, }, ++ { 1, 1, 1, 6, 110, 32, }, ++ { 0, 1, 1, 6, 118, 32, }, ++ { 2, 1, 1, 6, 118, 32, }, ++ { 1, 1, 1, 6, 118, 32, }, ++ { 0, 1, 1, 6, 126, 32, }, ++ { 2, 1, 1, 6, 126, 32, }, ++ { 1, 1, 1, 6, 126, 32, }, ++ { 0, 1, 1, 6, 134, 36, }, ++ { 2, 1, 1, 6, 134, 36, }, ++ { 1, 1, 1, 6, 134, 36, }, ++ { 0, 1, 1, 6, 151, 36, }, ++ { 2, 1, 1, 6, 151, 36, }, ++ { 1, 1, 1, 6, 151, 63, }, ++ { 0, 1, 1, 6, 159, 40, }, ++ { 2, 1, 1, 6, 159, 40, }, ++ { 1, 1, 1, 6, 159, 63, }, ++ { 0, 1, 1, 7, 38, 32, }, ++ { 2, 1, 1, 7, 38, 32, }, ++ { 1, 1, 1, 7, 38, 32, }, ++ { 0, 1, 1, 7, 46, 36, }, ++ { 2, 1, 1, 7, 46, 36, }, ++ { 1, 1, 1, 7, 46, 36, }, ++ { 0, 1, 1, 7, 54, 36, }, ++ { 2, 1, 1, 7, 54, 36, }, ++ { 1, 1, 1, 7, 54, 36, }, ++ { 0, 1, 1, 7, 62, 32, }, ++ { 2, 1, 1, 7, 62, 32, }, ++ { 1, 1, 1, 7, 62, 32, }, ++ { 0, 1, 1, 7, 102, 30, }, ++ { 2, 1, 1, 7, 102, 30, }, ++ { 1, 1, 1, 7, 102, 30, }, ++ { 0, 1, 1, 7, 110, 32, }, ++ { 2, 1, 1, 7, 110, 32, }, ++ { 1, 1, 1, 7, 110, 32, }, ++ { 0, 1, 1, 7, 118, 32, }, ++ { 2, 1, 1, 7, 118, 32, }, ++ { 1, 1, 1, 7, 118, 32, }, ++ { 0, 1, 1, 7, 126, 32, }, ++ { 2, 1, 1, 7, 126, 32, }, ++ { 1, 1, 1, 7, 126, 32, }, ++ { 0, 1, 1, 7, 134, 36, }, ++ { 2, 1, 1, 7, 134, 36, }, ++ { 1, 1, 1, 7, 134, 36, }, ++ { 0, 1, 1, 7, 151, 36, }, ++ { 2, 1, 1, 7, 151, 36, }, ++ { 1, 1, 1, 7, 151, 63, }, ++ { 0, 1, 1, 7, 159, 40, }, ++ { 2, 1, 1, 7, 159, 40, }, ++ { 1, 1, 1, 7, 159, 63, }, ++ { 0, 1, 2, 4, 42, 34, }, ++ { 2, 1, 2, 4, 42, 34, }, ++ { 1, 1, 2, 4, 42, 34, }, ++ { 0, 1, 2, 4, 58, 34, }, ++ { 2, 1, 2, 4, 58, 34, }, ++ { 1, 1, 2, 4, 58, 34, }, ++ { 0, 1, 2, 4, 106, 32, }, ++ { 2, 1, 2, 4, 106, 32, }, ++ { 1, 1, 2, 4, 106, 32, }, ++ { 0, 1, 2, 4, 122, 34, }, ++ { 2, 1, 2, 4, 122, 34, }, ++ { 1, 1, 2, 4, 122, 34, }, ++ { 0, 1, 2, 4, 155, 34, }, ++ { 2, 1, 2, 4, 155, 34, }, ++ { 1, 1, 2, 4, 155, 63, }, ++ { 0, 1, 2, 5, 42, 34, }, ++ { 2, 1, 2, 5, 42, 34, }, ++ { 1, 1, 2, 5, 42, 34, }, ++ { 0, 1, 2, 5, 58, 34, }, ++ { 2, 1, 2, 5, 58, 34, }, ++ { 1, 1, 2, 5, 58, 34, }, ++ { 0, 1, 2, 5, 106, 32, }, ++ { 2, 1, 2, 5, 106, 32, }, ++ { 1, 1, 2, 5, 106, 32, }, ++ { 0, 1, 2, 5, 122, 34, }, ++ { 2, 1, 2, 5, 122, 34, }, ++ { 1, 1, 2, 5, 122, 34, }, ++ { 0, 1, 2, 5, 155, 34, }, ++ { 2, 1, 2, 5, 155, 34, }, ++ { 1, 1, 2, 5, 155, 63, }, ++ { 0, 1, 2, 8, 42, 34, }, ++ { 2, 1, 2, 8, 42, 34, }, ++ { 1, 1, 2, 8, 42, 34, }, ++ { 0, 1, 2, 8, 58, 34, }, ++ { 2, 1, 2, 8, 58, 34, }, ++ { 1, 1, 2, 8, 58, 34, }, ++ { 0, 1, 2, 8, 106, 32, }, ++ { 2, 1, 2, 8, 106, 32, }, ++ { 1, 1, 2, 8, 106, 32, }, ++ { 0, 1, 2, 8, 122, 34, }, ++ { 2, 1, 2, 8, 122, 34, }, ++ { 1, 1, 2, 8, 122, 34, }, ++ { 0, 1, 2, 8, 155, 34, }, ++ { 2, 1, 2, 8, 155, 34, }, ++ { 1, 1, 2, 8, 155, 63, }, ++ { 0, 1, 2, 9, 42, 34, }, ++ { 2, 1, 2, 9, 42, 34, }, ++ { 1, 1, 2, 9, 42, 34, }, ++ { 0, 1, 2, 9, 58, 34, }, ++ { 2, 1, 2, 9, 58, 34, }, ++ { 1, 1, 2, 9, 58, 34, }, ++ { 0, 1, 2, 9, 106, 32, }, ++ { 2, 1, 2, 9, 106, 32, }, ++ { 1, 1, 2, 9, 106, 32, }, ++ { 0, 1, 2, 9, 122, 34, }, ++ { 2, 1, 2, 9, 122, 34, }, ++ { 1, 1, 2, 9, 122, 34, }, ++ { 0, 1, 2, 9, 155, 34, }, ++ { 2, 1, 2, 9, 155, 34, }, ++ { 1, 1, 2, 9, 155, 63, }, ++}; ++ ++RTW_DECL_TABLE_TXPWR_LMT(rtw8814a_txpwr_lmt_type2); ++ ++static const struct rtw_txpwr_lmt_cfg_pair rtw8814a_txpwr_lmt_type3[] = { ++ { 0, 0, 0, 0, 1, 46, }, ++ { 2, 0, 0, 0, 1, 40, }, ++ { 1, 0, 0, 0, 1, 40, }, ++ { 0, 0, 0, 0, 2, 46, }, ++ { 2, 0, 0, 0, 2, 40, }, ++ { 1, 0, 0, 0, 2, 40, }, ++ { 0, 0, 0, 0, 3, 46, }, ++ { 2, 0, 0, 0, 3, 40, }, ++ { 1, 0, 0, 0, 3, 40, }, ++ { 0, 0, 0, 0, 4, 46, }, ++ { 2, 0, 0, 0, 4, 40, }, ++ { 1, 0, 0, 0, 4, 40, }, ++ { 0, 0, 0, 0, 5, 46, }, ++ { 2, 0, 0, 0, 5, 40, }, ++ { 1, 0, 0, 0, 5, 40, }, ++ { 0, 0, 0, 0, 6, 46, }, ++ { 2, 0, 0, 0, 6, 40, }, ++ { 1, 0, 0, 0, 6, 40, }, ++ { 0, 0, 0, 0, 7, 46, }, ++ { 2, 0, 0, 0, 7, 40, }, ++ { 1, 0, 0, 0, 7, 40, }, ++ { 0, 0, 0, 0, 8, 46, }, ++ { 2, 0, 0, 0, 8, 40, }, ++ { 1, 0, 0, 0, 8, 40, }, ++ { 0, 0, 0, 0, 9, 46, }, ++ { 2, 0, 0, 0, 9, 40, }, ++ { 1, 0, 0, 0, 9, 40, }, ++ { 0, 0, 0, 0, 10, 46, }, ++ { 2, 0, 0, 0, 10, 40, }, ++ { 1, 0, 0, 0, 10, 40, }, ++ { 0, 0, 0, 0, 11, 46, }, ++ { 2, 0, 0, 0, 11, 40, }, ++ { 1, 0, 0, 0, 11, 40, }, ++ { 0, 0, 0, 0, 12, 63, }, ++ { 2, 0, 0, 0, 12, 40, }, ++ { 1, 0, 0, 0, 12, 40, }, ++ { 0, 0, 0, 0, 13, 63, }, ++ { 2, 0, 0, 0, 13, 40, }, ++ { 1, 0, 0, 0, 13, 40, }, ++ { 0, 0, 0, 0, 14, 63, }, ++ { 2, 0, 0, 0, 14, 63, }, ++ { 1, 0, 0, 0, 14, 40, }, ++ { 0, 0, 0, 1, 1, 46, }, ++ { 2, 0, 0, 1, 1, 40, }, ++ { 1, 0, 0, 1, 1, 40, }, ++ { 0, 0, 0, 1, 2, 46, }, ++ { 2, 0, 0, 1, 2, 40, }, ++ { 1, 0, 0, 1, 2, 40, }, ++ { 0, 0, 0, 1, 3, 46, }, ++ { 2, 0, 0, 1, 3, 40, }, ++ { 1, 0, 0, 1, 3, 40, }, ++ { 0, 0, 0, 1, 4, 46, }, ++ { 2, 0, 0, 1, 4, 40, }, ++ { 1, 0, 0, 1, 4, 40, }, ++ { 0, 0, 0, 1, 5, 46, }, ++ { 2, 0, 0, 1, 5, 40, }, ++ { 1, 0, 0, 1, 5, 40, }, ++ { 0, 0, 0, 1, 6, 46, }, ++ { 2, 0, 0, 1, 6, 40, }, ++ { 1, 0, 0, 1, 6, 40, }, ++ { 0, 0, 0, 1, 7, 46, }, ++ { 2, 0, 0, 1, 7, 40, }, ++ { 1, 0, 0, 1, 7, 40, }, ++ { 0, 0, 0, 1, 8, 46, }, ++ { 2, 0, 0, 1, 8, 40, }, ++ { 1, 0, 0, 1, 8, 40, }, ++ { 0, 0, 0, 1, 9, 46, }, ++ { 2, 0, 0, 1, 9, 40, }, ++ { 1, 0, 0, 1, 9, 40, }, ++ { 0, 0, 0, 1, 10, 46, }, ++ { 2, 0, 0, 1, 10, 40, }, ++ { 1, 0, 0, 1, 10, 40, }, ++ { 0, 0, 0, 1, 11, 46, }, ++ { 2, 0, 0, 1, 11, 40, }, ++ { 1, 0, 0, 1, 11, 40, }, ++ { 0, 0, 0, 1, 12, 63, }, ++ { 2, 0, 0, 1, 12, 40, }, ++ { 1, 0, 0, 1, 12, 40, }, ++ { 0, 0, 0, 1, 13, 63, }, ++ { 2, 0, 0, 1, 13, 40, }, ++ { 1, 0, 0, 1, 13, 40, }, ++ { 0, 0, 0, 1, 14, 63, }, ++ { 2, 0, 0, 1, 14, 63, }, ++ { 1, 0, 0, 1, 14, 63, }, ++ { 0, 0, 0, 2, 1, 46, }, ++ { 2, 0, 0, 2, 1, 40, }, ++ { 1, 0, 0, 2, 1, 40, }, ++ { 0, 0, 0, 2, 2, 46, }, ++ { 2, 0, 0, 2, 2, 40, }, ++ { 1, 0, 0, 2, 2, 40, }, ++ { 0, 0, 0, 2, 3, 46, }, ++ { 2, 0, 0, 2, 3, 40, }, ++ { 1, 0, 0, 2, 3, 40, }, ++ { 0, 0, 0, 2, 4, 46, }, ++ { 2, 0, 0, 2, 4, 40, }, ++ { 1, 0, 0, 2, 4, 40, }, ++ { 0, 0, 0, 2, 5, 46, }, ++ { 2, 0, 0, 2, 5, 40, }, ++ { 1, 0, 0, 2, 5, 40, }, ++ { 0, 0, 0, 2, 6, 46, }, ++ { 2, 0, 0, 2, 6, 40, }, ++ { 1, 0, 0, 2, 6, 40, }, ++ { 0, 0, 0, 2, 7, 46, }, ++ { 2, 0, 0, 2, 7, 40, }, ++ { 1, 0, 0, 2, 7, 40, }, ++ { 0, 0, 0, 2, 8, 46, }, ++ { 2, 0, 0, 2, 8, 40, }, ++ { 1, 0, 0, 2, 8, 40, }, ++ { 0, 0, 0, 2, 9, 46, }, ++ { 2, 0, 0, 2, 9, 40, }, ++ { 1, 0, 0, 2, 9, 40, }, ++ { 0, 0, 0, 2, 10, 46, }, ++ { 2, 0, 0, 2, 10, 40, }, ++ { 1, 0, 0, 2, 10, 40, }, ++ { 0, 0, 0, 2, 11, 46, }, ++ { 2, 0, 0, 2, 11, 40, }, ++ { 1, 0, 0, 2, 11, 40, }, ++ { 0, 0, 0, 2, 12, 63, }, ++ { 2, 0, 0, 2, 12, 40, }, ++ { 1, 0, 0, 2, 12, 40, }, ++ { 0, 0, 0, 2, 13, 63, }, ++ { 2, 0, 0, 2, 13, 40, }, ++ { 1, 0, 0, 2, 13, 40, }, ++ { 0, 0, 0, 2, 14, 63, }, ++ { 2, 0, 0, 2, 14, 63, }, ++ { 1, 0, 0, 2, 14, 63, }, ++ { 0, 0, 0, 3, 1, 46, }, ++ { 2, 0, 0, 3, 1, 40, }, ++ { 1, 0, 0, 3, 1, 40, }, ++ { 0, 0, 0, 3, 2, 46, }, ++ { 2, 0, 0, 3, 2, 40, }, ++ { 1, 0, 0, 3, 2, 40, }, ++ { 0, 0, 0, 3, 3, 46, }, ++ { 2, 0, 0, 3, 3, 40, }, ++ { 1, 0, 0, 3, 3, 40, }, ++ { 0, 0, 0, 3, 4, 46, }, ++ { 2, 0, 0, 3, 4, 40, }, ++ { 1, 0, 0, 3, 4, 40, }, ++ { 0, 0, 0, 3, 5, 46, }, ++ { 2, 0, 0, 3, 5, 40, }, ++ { 1, 0, 0, 3, 5, 40, }, ++ { 0, 0, 0, 3, 6, 46, }, ++ { 2, 0, 0, 3, 6, 40, }, ++ { 1, 0, 0, 3, 6, 40, }, ++ { 0, 0, 0, 3, 7, 46, }, ++ { 2, 0, 0, 3, 7, 40, }, ++ { 1, 0, 0, 3, 7, 40, }, ++ { 0, 0, 0, 3, 8, 46, }, ++ { 2, 0, 0, 3, 8, 40, }, ++ { 1, 0, 0, 3, 8, 40, }, ++ { 0, 0, 0, 3, 9, 46, }, ++ { 2, 0, 0, 3, 9, 40, }, ++ { 1, 0, 0, 3, 9, 40, }, ++ { 0, 0, 0, 3, 10, 46, }, ++ { 2, 0, 0, 3, 10, 40, }, ++ { 1, 0, 0, 3, 10, 40, }, ++ { 0, 0, 0, 3, 11, 46, }, ++ { 2, 0, 0, 3, 11, 40, }, ++ { 1, 0, 0, 3, 11, 40, }, ++ { 0, 0, 0, 3, 12, 63, }, ++ { 2, 0, 0, 3, 12, 40, }, ++ { 1, 0, 0, 3, 12, 40, }, ++ { 0, 0, 0, 3, 13, 63, }, ++ { 2, 0, 0, 3, 13, 40, }, ++ { 1, 0, 0, 3, 13, 40, }, ++ { 0, 0, 0, 3, 14, 63, }, ++ { 2, 0, 0, 3, 14, 63, }, ++ { 1, 0, 0, 3, 14, 63, }, ++ { 0, 0, 0, 6, 1, 46, }, ++ { 2, 0, 0, 6, 1, 40, }, ++ { 1, 0, 0, 6, 1, 40, }, ++ { 0, 0, 0, 6, 2, 46, }, ++ { 2, 0, 0, 6, 2, 40, }, ++ { 1, 0, 0, 6, 2, 40, }, ++ { 0, 0, 0, 6, 3, 46, }, ++ { 2, 0, 0, 6, 3, 40, }, ++ { 1, 0, 0, 6, 3, 40, }, ++ { 0, 0, 0, 6, 4, 46, }, ++ { 2, 0, 0, 6, 4, 40, }, ++ { 1, 0, 0, 6, 4, 40, }, ++ { 0, 0, 0, 6, 5, 46, }, ++ { 2, 0, 0, 6, 5, 40, }, ++ { 1, 0, 0, 6, 5, 40, }, ++ { 0, 0, 0, 6, 6, 46, }, ++ { 2, 0, 0, 6, 6, 40, }, ++ { 1, 0, 0, 6, 6, 40, }, ++ { 0, 0, 0, 6, 7, 46, }, ++ { 2, 0, 0, 6, 7, 40, }, ++ { 1, 0, 0, 6, 7, 40, }, ++ { 0, 0, 0, 6, 8, 46, }, ++ { 2, 0, 0, 6, 8, 40, }, ++ { 1, 0, 0, 6, 8, 40, }, ++ { 0, 0, 0, 6, 9, 46, }, ++ { 2, 0, 0, 6, 9, 40, }, ++ { 1, 0, 0, 6, 9, 40, }, ++ { 0, 0, 0, 6, 10, 46, }, ++ { 2, 0, 0, 6, 10, 40, }, ++ { 1, 0, 0, 6, 10, 40, }, ++ { 0, 0, 0, 6, 11, 46, }, ++ { 2, 0, 0, 6, 11, 40, }, ++ { 1, 0, 0, 6, 11, 40, }, ++ { 0, 0, 0, 6, 12, 63, }, ++ { 2, 0, 0, 6, 12, 40, }, ++ { 1, 0, 0, 6, 12, 40, }, ++ { 0, 0, 0, 6, 13, 63, }, ++ { 2, 0, 0, 6, 13, 40, }, ++ { 1, 0, 0, 6, 13, 40, }, ++ { 0, 0, 0, 6, 14, 63, }, ++ { 2, 0, 0, 6, 14, 63, }, ++ { 1, 0, 0, 6, 14, 63, }, ++ { 0, 0, 0, 7, 1, 46, }, ++ { 2, 0, 0, 7, 1, 40, }, ++ { 1, 0, 0, 7, 1, 40, }, ++ { 0, 0, 0, 7, 2, 46, }, ++ { 2, 0, 0, 7, 2, 40, }, ++ { 1, 0, 0, 7, 2, 40, }, ++ { 0, 0, 0, 7, 3, 46, }, ++ { 2, 0, 0, 7, 3, 40, }, ++ { 1, 0, 0, 7, 3, 40, }, ++ { 0, 0, 0, 7, 4, 46, }, ++ { 2, 0, 0, 7, 4, 40, }, ++ { 1, 0, 0, 7, 4, 40, }, ++ { 0, 0, 0, 7, 5, 46, }, ++ { 2, 0, 0, 7, 5, 40, }, ++ { 1, 0, 0, 7, 5, 40, }, ++ { 0, 0, 0, 7, 6, 46, }, ++ { 2, 0, 0, 7, 6, 40, }, ++ { 1, 0, 0, 7, 6, 40, }, ++ { 0, 0, 0, 7, 7, 46, }, ++ { 2, 0, 0, 7, 7, 40, }, ++ { 1, 0, 0, 7, 7, 40, }, ++ { 0, 0, 0, 7, 8, 46, }, ++ { 2, 0, 0, 7, 8, 40, }, ++ { 1, 0, 0, 7, 8, 40, }, ++ { 0, 0, 0, 7, 9, 46, }, ++ { 2, 0, 0, 7, 9, 40, }, ++ { 1, 0, 0, 7, 9, 40, }, ++ { 0, 0, 0, 7, 10, 46, }, ++ { 2, 0, 0, 7, 10, 40, }, ++ { 1, 0, 0, 7, 10, 40, }, ++ { 0, 0, 0, 7, 11, 46, }, ++ { 2, 0, 0, 7, 11, 40, }, ++ { 1, 0, 0, 7, 11, 40, }, ++ { 0, 0, 0, 7, 12, 63, }, ++ { 2, 0, 0, 7, 12, 40, }, ++ { 1, 0, 0, 7, 12, 40, }, ++ { 0, 0, 0, 7, 13, 63, }, ++ { 2, 0, 0, 7, 13, 40, }, ++ { 1, 0, 0, 7, 13, 40, }, ++ { 0, 0, 0, 7, 14, 63, }, ++ { 2, 0, 0, 7, 14, 63, }, ++ { 1, 0, 0, 7, 14, 63, }, ++ { 0, 0, 1, 2, 1, 63, }, ++ { 2, 0, 1, 2, 1, 63, }, ++ { 1, 0, 1, 2, 1, 63, }, ++ { 0, 0, 1, 2, 2, 63, }, ++ { 2, 0, 1, 2, 2, 63, }, ++ { 1, 0, 1, 2, 2, 63, }, ++ { 0, 0, 1, 2, 3, 46, }, ++ { 2, 0, 1, 2, 3, 40, }, ++ { 1, 0, 1, 2, 3, 40, }, ++ { 0, 0, 1, 2, 4, 46, }, ++ { 2, 0, 1, 2, 4, 40, }, ++ { 1, 0, 1, 2, 4, 40, }, ++ { 0, 0, 1, 2, 5, 46, }, ++ { 2, 0, 1, 2, 5, 40, }, ++ { 1, 0, 1, 2, 5, 40, }, ++ { 0, 0, 1, 2, 6, 46, }, ++ { 2, 0, 1, 2, 6, 40, }, ++ { 1, 0, 1, 2, 6, 40, }, ++ { 0, 0, 1, 2, 7, 46, }, ++ { 2, 0, 1, 2, 7, 40, }, ++ { 1, 0, 1, 2, 7, 40, }, ++ { 0, 0, 1, 2, 8, 46, }, ++ { 2, 0, 1, 2, 8, 40, }, ++ { 1, 0, 1, 2, 8, 40, }, ++ { 0, 0, 1, 2, 9, 46, }, ++ { 2, 0, 1, 2, 9, 40, }, ++ { 1, 0, 1, 2, 9, 40, }, ++ { 0, 0, 1, 2, 10, 46, }, ++ { 2, 0, 1, 2, 10, 40, }, ++ { 1, 0, 1, 2, 10, 40, }, ++ { 0, 0, 1, 2, 11, 46, }, ++ { 2, 0, 1, 2, 11, 40, }, ++ { 1, 0, 1, 2, 11, 40, }, ++ { 0, 0, 1, 2, 12, 63, }, ++ { 2, 0, 1, 2, 12, 40, }, ++ { 1, 0, 1, 2, 12, 40, }, ++ { 0, 0, 1, 2, 13, 63, }, ++ { 2, 0, 1, 2, 13, 40, }, ++ { 1, 0, 1, 2, 13, 40, }, ++ { 0, 0, 1, 2, 14, 63, }, ++ { 2, 0, 1, 2, 14, 63, }, ++ { 1, 0, 1, 2, 14, 63, }, ++ { 0, 0, 1, 3, 1, 63, }, ++ { 2, 0, 1, 3, 1, 63, }, ++ { 1, 0, 1, 3, 1, 63, }, ++ { 0, 0, 1, 3, 2, 63, }, ++ { 2, 0, 1, 3, 2, 63, }, ++ { 1, 0, 1, 3, 2, 63, }, ++ { 0, 0, 1, 3, 3, 46, }, ++ { 2, 0, 1, 3, 3, 40, }, ++ { 1, 0, 1, 3, 3, 40, }, ++ { 0, 0, 1, 3, 4, 46, }, ++ { 2, 0, 1, 3, 4, 40, }, ++ { 1, 0, 1, 3, 4, 40, }, ++ { 0, 0, 1, 3, 5, 46, }, ++ { 2, 0, 1, 3, 5, 40, }, ++ { 1, 0, 1, 3, 5, 40, }, ++ { 0, 0, 1, 3, 6, 46, }, ++ { 2, 0, 1, 3, 6, 40, }, ++ { 1, 0, 1, 3, 6, 40, }, ++ { 0, 0, 1, 3, 7, 46, }, ++ { 2, 0, 1, 3, 7, 40, }, ++ { 1, 0, 1, 3, 7, 40, }, ++ { 0, 0, 1, 3, 8, 46, }, ++ { 2, 0, 1, 3, 8, 40, }, ++ { 1, 0, 1, 3, 8, 40, }, ++ { 0, 0, 1, 3, 9, 46, }, ++ { 2, 0, 1, 3, 9, 40, }, ++ { 1, 0, 1, 3, 9, 40, }, ++ { 0, 0, 1, 3, 10, 46, }, ++ { 2, 0, 1, 3, 10, 40, }, ++ { 1, 0, 1, 3, 10, 40, }, ++ { 0, 0, 1, 3, 11, 46, }, ++ { 2, 0, 1, 3, 11, 40, }, ++ { 1, 0, 1, 3, 11, 40, }, ++ { 0, 0, 1, 3, 12, 63, }, ++ { 2, 0, 1, 3, 12, 40, }, ++ { 1, 0, 1, 3, 12, 40, }, ++ { 0, 0, 1, 3, 13, 63, }, ++ { 2, 0, 1, 3, 13, 40, }, ++ { 1, 0, 1, 3, 13, 40, }, ++ { 0, 0, 1, 3, 14, 63, }, ++ { 2, 0, 1, 3, 14, 63, }, ++ { 1, 0, 1, 3, 14, 63, }, ++ { 0, 0, 1, 6, 1, 63, }, ++ { 2, 0, 1, 6, 1, 63, }, ++ { 1, 0, 1, 6, 1, 63, }, ++ { 0, 0, 1, 6, 2, 63, }, ++ { 2, 0, 1, 6, 2, 63, }, ++ { 1, 0, 1, 6, 2, 63, }, ++ { 0, 0, 1, 6, 3, 46, }, ++ { 2, 0, 1, 6, 3, 40, }, ++ { 1, 0, 1, 6, 3, 40, }, ++ { 0, 0, 1, 6, 4, 46, }, ++ { 2, 0, 1, 6, 4, 40, }, ++ { 1, 0, 1, 6, 4, 40, }, ++ { 0, 0, 1, 6, 5, 46, }, ++ { 2, 0, 1, 6, 5, 40, }, ++ { 1, 0, 1, 6, 5, 40, }, ++ { 0, 0, 1, 6, 6, 46, }, ++ { 2, 0, 1, 6, 6, 40, }, ++ { 1, 0, 1, 6, 6, 40, }, ++ { 0, 0, 1, 6, 7, 46, }, ++ { 2, 0, 1, 6, 7, 40, }, ++ { 1, 0, 1, 6, 7, 40, }, ++ { 0, 0, 1, 6, 8, 46, }, ++ { 2, 0, 1, 6, 8, 40, }, ++ { 1, 0, 1, 6, 8, 40, }, ++ { 0, 0, 1, 6, 9, 46, }, ++ { 2, 0, 1, 6, 9, 40, }, ++ { 1, 0, 1, 6, 9, 40, }, ++ { 0, 0, 1, 6, 10, 46, }, ++ { 2, 0, 1, 6, 10, 40, }, ++ { 1, 0, 1, 6, 10, 40, }, ++ { 0, 0, 1, 6, 11, 46, }, ++ { 2, 0, 1, 6, 11, 40, }, ++ { 1, 0, 1, 6, 11, 40, }, ++ { 0, 0, 1, 6, 12, 63, }, ++ { 2, 0, 1, 6, 12, 40, }, ++ { 1, 0, 1, 6, 12, 40, }, ++ { 0, 0, 1, 6, 13, 63, }, ++ { 2, 0, 1, 6, 13, 40, }, ++ { 1, 0, 1, 6, 13, 40, }, ++ { 0, 0, 1, 6, 14, 63, }, ++ { 2, 0, 1, 6, 14, 63, }, ++ { 1, 0, 1, 6, 14, 63, }, ++ { 0, 0, 1, 7, 1, 63, }, ++ { 2, 0, 1, 7, 1, 63, }, ++ { 1, 0, 1, 7, 1, 63, }, ++ { 0, 0, 1, 7, 2, 63, }, ++ { 2, 0, 1, 7, 2, 63, }, ++ { 1, 0, 1, 7, 2, 63, }, ++ { 0, 0, 1, 7, 3, 46, }, ++ { 2, 0, 1, 7, 3, 40, }, ++ { 1, 0, 1, 7, 3, 40, }, ++ { 0, 0, 1, 7, 4, 46, }, ++ { 2, 0, 1, 7, 4, 40, }, ++ { 1, 0, 1, 7, 4, 40, }, ++ { 0, 0, 1, 7, 5, 46, }, ++ { 2, 0, 1, 7, 5, 40, }, ++ { 1, 0, 1, 7, 5, 40, }, ++ { 0, 0, 1, 7, 6, 46, }, ++ { 2, 0, 1, 7, 6, 40, }, ++ { 1, 0, 1, 7, 6, 40, }, ++ { 0, 0, 1, 7, 7, 46, }, ++ { 2, 0, 1, 7, 7, 40, }, ++ { 1, 0, 1, 7, 7, 40, }, ++ { 0, 0, 1, 7, 8, 46, }, ++ { 2, 0, 1, 7, 8, 40, }, ++ { 1, 0, 1, 7, 8, 40, }, ++ { 0, 0, 1, 7, 9, 46, }, ++ { 2, 0, 1, 7, 9, 40, }, ++ { 1, 0, 1, 7, 9, 40, }, ++ { 0, 0, 1, 7, 10, 46, }, ++ { 2, 0, 1, 7, 10, 40, }, ++ { 1, 0, 1, 7, 10, 40, }, ++ { 0, 0, 1, 7, 11, 46, }, ++ { 2, 0, 1, 7, 11, 40, }, ++ { 1, 0, 1, 7, 11, 40, }, ++ { 0, 0, 1, 7, 12, 63, }, ++ { 2, 0, 1, 7, 12, 40, }, ++ { 1, 0, 1, 7, 12, 40, }, ++ { 0, 0, 1, 7, 13, 63, }, ++ { 2, 0, 1, 7, 13, 40, }, ++ { 1, 0, 1, 7, 13, 40, }, ++ { 0, 0, 1, 7, 14, 63, }, ++ { 2, 0, 1, 7, 14, 63, }, ++ { 1, 0, 1, 7, 14, 63, }, ++ { 0, 1, 0, 1, 36, 46, }, ++ { 2, 1, 0, 1, 36, 40, }, ++ { 1, 1, 0, 1, 36, 40, }, ++ { 0, 1, 0, 1, 40, 46, }, ++ { 2, 1, 0, 1, 40, 40, }, ++ { 1, 1, 0, 1, 40, 40, }, ++ { 0, 1, 0, 1, 44, 46, }, ++ { 2, 1, 0, 1, 44, 40, }, ++ { 1, 1, 0, 1, 44, 40, }, ++ { 0, 1, 0, 1, 48, 46, }, ++ { 2, 1, 0, 1, 48, 40, }, ++ { 1, 1, 0, 1, 48, 40, }, ++ { 0, 1, 0, 1, 52, 46, }, ++ { 2, 1, 0, 1, 52, 40, }, ++ { 1, 1, 0, 1, 52, 40, }, ++ { 0, 1, 0, 1, 56, 46, }, ++ { 2, 1, 0, 1, 56, 40, }, ++ { 1, 1, 0, 1, 56, 40, }, ++ { 0, 1, 0, 1, 60, 46, }, ++ { 2, 1, 0, 1, 60, 40, }, ++ { 1, 1, 0, 1, 60, 40, }, ++ { 0, 1, 0, 1, 64, 46, }, ++ { 2, 1, 0, 1, 64, 40, }, ++ { 1, 1, 0, 1, 64, 40, }, ++ { 0, 1, 0, 1, 100, 46, }, ++ { 2, 1, 0, 1, 100, 40, }, ++ { 1, 1, 0, 1, 100, 40, }, ++ { 0, 1, 0, 1, 104, 46, }, ++ { 2, 1, 0, 1, 104, 40, }, ++ { 1, 1, 0, 1, 104, 40, }, ++ { 0, 1, 0, 1, 108, 46, }, ++ { 2, 1, 0, 1, 108, 40, }, ++ { 1, 1, 0, 1, 108, 40, }, ++ { 0, 1, 0, 1, 112, 46, }, ++ { 2, 1, 0, 1, 112, 40, }, ++ { 1, 1, 0, 1, 112, 40, }, ++ { 0, 1, 0, 1, 116, 46, }, ++ { 2, 1, 0, 1, 116, 40, }, ++ { 1, 1, 0, 1, 116, 40, }, ++ { 0, 1, 0, 1, 120, 46, }, ++ { 2, 1, 0, 1, 120, 40, }, ++ { 1, 1, 0, 1, 120, 40, }, ++ { 0, 1, 0, 1, 124, 46, }, ++ { 2, 1, 0, 1, 124, 40, }, ++ { 1, 1, 0, 1, 124, 40, }, ++ { 0, 1, 0, 1, 128, 46, }, ++ { 2, 1, 0, 1, 128, 40, }, ++ { 1, 1, 0, 1, 128, 40, }, ++ { 0, 1, 0, 1, 132, 46, }, ++ { 2, 1, 0, 1, 132, 40, }, ++ { 1, 1, 0, 1, 132, 40, }, ++ { 0, 1, 0, 1, 136, 46, }, ++ { 2, 1, 0, 1, 136, 40, }, ++ { 1, 1, 0, 1, 136, 40, }, ++ { 0, 1, 0, 1, 140, 46, }, ++ { 2, 1, 0, 1, 140, 40, }, ++ { 1, 1, 0, 1, 140, 40, }, ++ { 0, 1, 0, 1, 149, 46, }, ++ { 2, 1, 0, 1, 149, 40, }, ++ { 1, 1, 0, 1, 149, 63, }, ++ { 0, 1, 0, 1, 153, 46, }, ++ { 2, 1, 0, 1, 153, 40, }, ++ { 1, 1, 0, 1, 153, 63, }, ++ { 0, 1, 0, 1, 157, 46, }, ++ { 2, 1, 0, 1, 157, 40, }, ++ { 1, 1, 0, 1, 157, 63, }, ++ { 0, 1, 0, 1, 161, 46, }, ++ { 2, 1, 0, 1, 161, 40, }, ++ { 1, 1, 0, 1, 161, 63, }, ++ { 0, 1, 0, 1, 165, 46, }, ++ { 2, 1, 0, 1, 165, 40, }, ++ { 1, 1, 0, 1, 165, 63, }, ++ { 0, 1, 0, 2, 36, 46, }, ++ { 2, 1, 0, 2, 36, 40, }, ++ { 1, 1, 0, 2, 36, 40, }, ++ { 0, 1, 0, 2, 40, 46, }, ++ { 2, 1, 0, 2, 40, 40, }, ++ { 1, 1, 0, 2, 40, 40, }, ++ { 0, 1, 0, 2, 44, 46, }, ++ { 2, 1, 0, 2, 44, 40, }, ++ { 1, 1, 0, 2, 44, 40, }, ++ { 0, 1, 0, 2, 48, 46, }, ++ { 2, 1, 0, 2, 48, 40, }, ++ { 1, 1, 0, 2, 48, 40, }, ++ { 0, 1, 0, 2, 52, 46, }, ++ { 2, 1, 0, 2, 52, 40, }, ++ { 1, 1, 0, 2, 52, 40, }, ++ { 0, 1, 0, 2, 56, 46, }, ++ { 2, 1, 0, 2, 56, 40, }, ++ { 1, 1, 0, 2, 56, 40, }, ++ { 0, 1, 0, 2, 60, 46, }, ++ { 2, 1, 0, 2, 60, 40, }, ++ { 1, 1, 0, 2, 60, 40, }, ++ { 0, 1, 0, 2, 64, 46, }, ++ { 2, 1, 0, 2, 64, 40, }, ++ { 1, 1, 0, 2, 64, 40, }, ++ { 0, 1, 0, 2, 100, 46, }, ++ { 2, 1, 0, 2, 100, 40, }, ++ { 1, 1, 0, 2, 100, 40, }, ++ { 0, 1, 0, 2, 104, 46, }, ++ { 2, 1, 0, 2, 104, 40, }, ++ { 1, 1, 0, 2, 104, 40, }, ++ { 0, 1, 0, 2, 108, 46, }, ++ { 2, 1, 0, 2, 108, 40, }, ++ { 1, 1, 0, 2, 108, 40, }, ++ { 0, 1, 0, 2, 112, 46, }, ++ { 2, 1, 0, 2, 112, 40, }, ++ { 1, 1, 0, 2, 112, 40, }, ++ { 0, 1, 0, 2, 116, 46, }, ++ { 2, 1, 0, 2, 116, 40, }, ++ { 1, 1, 0, 2, 116, 40, }, ++ { 0, 1, 0, 2, 120, 46, }, ++ { 2, 1, 0, 2, 120, 40, }, ++ { 1, 1, 0, 2, 120, 40, }, ++ { 0, 1, 0, 2, 124, 46, }, ++ { 2, 1, 0, 2, 124, 40, }, ++ { 1, 1, 0, 2, 124, 40, }, ++ { 0, 1, 0, 2, 128, 46, }, ++ { 2, 1, 0, 2, 128, 40, }, ++ { 1, 1, 0, 2, 128, 40, }, ++ { 0, 1, 0, 2, 132, 46, }, ++ { 2, 1, 0, 2, 132, 40, }, ++ { 1, 1, 0, 2, 132, 40, }, ++ { 0, 1, 0, 2, 136, 46, }, ++ { 2, 1, 0, 2, 136, 40, }, ++ { 1, 1, 0, 2, 136, 40, }, ++ { 0, 1, 0, 2, 140, 46, }, ++ { 2, 1, 0, 2, 140, 40, }, ++ { 1, 1, 0, 2, 140, 40, }, ++ { 0, 1, 0, 2, 149, 46, }, ++ { 2, 1, 0, 2, 149, 40, }, ++ { 1, 1, 0, 2, 149, 63, }, ++ { 0, 1, 0, 2, 153, 46, }, ++ { 2, 1, 0, 2, 153, 40, }, ++ { 1, 1, 0, 2, 153, 63, }, ++ { 0, 1, 0, 2, 157, 46, }, ++ { 2, 1, 0, 2, 157, 40, }, ++ { 1, 1, 0, 2, 157, 63, }, ++ { 0, 1, 0, 2, 161, 46, }, ++ { 2, 1, 0, 2, 161, 40, }, ++ { 1, 1, 0, 2, 161, 63, }, ++ { 0, 1, 0, 2, 165, 46, }, ++ { 2, 1, 0, 2, 165, 40, }, ++ { 1, 1, 0, 2, 165, 63, }, ++ { 0, 1, 0, 3, 36, 46, }, ++ { 2, 1, 0, 3, 36, 40, }, ++ { 1, 1, 0, 3, 36, 40, }, ++ { 0, 1, 0, 3, 40, 46, }, ++ { 2, 1, 0, 3, 40, 40, }, ++ { 1, 1, 0, 3, 40, 40, }, ++ { 0, 1, 0, 3, 44, 46, }, ++ { 2, 1, 0, 3, 44, 40, }, ++ { 1, 1, 0, 3, 44, 40, }, ++ { 0, 1, 0, 3, 48, 46, }, ++ { 2, 1, 0, 3, 48, 40, }, ++ { 1, 1, 0, 3, 48, 40, }, ++ { 0, 1, 0, 3, 52, 46, }, ++ { 2, 1, 0, 3, 52, 40, }, ++ { 1, 1, 0, 3, 52, 40, }, ++ { 0, 1, 0, 3, 56, 46, }, ++ { 2, 1, 0, 3, 56, 40, }, ++ { 1, 1, 0, 3, 56, 40, }, ++ { 0, 1, 0, 3, 60, 46, }, ++ { 2, 1, 0, 3, 60, 40, }, ++ { 1, 1, 0, 3, 60, 40, }, ++ { 0, 1, 0, 3, 64, 46, }, ++ { 2, 1, 0, 3, 64, 40, }, ++ { 1, 1, 0, 3, 64, 40, }, ++ { 0, 1, 0, 3, 100, 46, }, ++ { 2, 1, 0, 3, 100, 40, }, ++ { 1, 1, 0, 3, 100, 40, }, ++ { 0, 1, 0, 3, 104, 46, }, ++ { 2, 1, 0, 3, 104, 40, }, ++ { 1, 1, 0, 3, 104, 40, }, ++ { 0, 1, 0, 3, 108, 46, }, ++ { 2, 1, 0, 3, 108, 40, }, ++ { 1, 1, 0, 3, 108, 40, }, ++ { 0, 1, 0, 3, 112, 46, }, ++ { 2, 1, 0, 3, 112, 40, }, ++ { 1, 1, 0, 3, 112, 40, }, ++ { 0, 1, 0, 3, 116, 46, }, ++ { 2, 1, 0, 3, 116, 40, }, ++ { 1, 1, 0, 3, 116, 40, }, ++ { 0, 1, 0, 3, 120, 46, }, ++ { 2, 1, 0, 3, 120, 40, }, ++ { 1, 1, 0, 3, 120, 40, }, ++ { 0, 1, 0, 3, 124, 46, }, ++ { 2, 1, 0, 3, 124, 40, }, ++ { 1, 1, 0, 3, 124, 40, }, ++ { 0, 1, 0, 3, 128, 46, }, ++ { 2, 1, 0, 3, 128, 40, }, ++ { 1, 1, 0, 3, 128, 40, }, ++ { 0, 1, 0, 3, 132, 46, }, ++ { 2, 1, 0, 3, 132, 40, }, ++ { 1, 1, 0, 3, 132, 40, }, ++ { 0, 1, 0, 3, 136, 46, }, ++ { 2, 1, 0, 3, 136, 40, }, ++ { 1, 1, 0, 3, 136, 40, }, ++ { 0, 1, 0, 3, 140, 46, }, ++ { 2, 1, 0, 3, 140, 40, }, ++ { 1, 1, 0, 3, 140, 40, }, ++ { 0, 1, 0, 3, 149, 46, }, ++ { 2, 1, 0, 3, 149, 40, }, ++ { 1, 1, 0, 3, 149, 63, }, ++ { 0, 1, 0, 3, 153, 46, }, ++ { 2, 1, 0, 3, 153, 40, }, ++ { 1, 1, 0, 3, 153, 63, }, ++ { 0, 1, 0, 3, 157, 46, }, ++ { 2, 1, 0, 3, 157, 40, }, ++ { 1, 1, 0, 3, 157, 63, }, ++ { 0, 1, 0, 3, 161, 46, }, ++ { 2, 1, 0, 3, 161, 40, }, ++ { 1, 1, 0, 3, 161, 63, }, ++ { 0, 1, 0, 3, 165, 46, }, ++ { 2, 1, 0, 3, 165, 40, }, ++ { 1, 1, 0, 3, 165, 63, }, ++ { 0, 1, 0, 6, 36, 46, }, ++ { 2, 1, 0, 6, 36, 40, }, ++ { 1, 1, 0, 6, 36, 40, }, ++ { 0, 1, 0, 6, 40, 46, }, ++ { 2, 1, 0, 6, 40, 40, }, ++ { 1, 1, 0, 6, 40, 40, }, ++ { 0, 1, 0, 6, 44, 46, }, ++ { 2, 1, 0, 6, 44, 40, }, ++ { 1, 1, 0, 6, 44, 40, }, ++ { 0, 1, 0, 6, 48, 46, }, ++ { 2, 1, 0, 6, 48, 40, }, ++ { 1, 1, 0, 6, 48, 40, }, ++ { 0, 1, 0, 6, 52, 46, }, ++ { 2, 1, 0, 6, 52, 40, }, ++ { 1, 1, 0, 6, 52, 40, }, ++ { 0, 1, 0, 6, 56, 46, }, ++ { 2, 1, 0, 6, 56, 40, }, ++ { 1, 1, 0, 6, 56, 40, }, ++ { 0, 1, 0, 6, 60, 46, }, ++ { 2, 1, 0, 6, 60, 40, }, ++ { 1, 1, 0, 6, 60, 40, }, ++ { 0, 1, 0, 6, 64, 46, }, ++ { 2, 1, 0, 6, 64, 40, }, ++ { 1, 1, 0, 6, 64, 40, }, ++ { 0, 1, 0, 6, 100, 46, }, ++ { 2, 1, 0, 6, 100, 40, }, ++ { 1, 1, 0, 6, 100, 40, }, ++ { 0, 1, 0, 6, 104, 46, }, ++ { 2, 1, 0, 6, 104, 40, }, ++ { 1, 1, 0, 6, 104, 40, }, ++ { 0, 1, 0, 6, 108, 46, }, ++ { 2, 1, 0, 6, 108, 40, }, ++ { 1, 1, 0, 6, 108, 40, }, ++ { 0, 1, 0, 6, 112, 46, }, ++ { 2, 1, 0, 6, 112, 40, }, ++ { 1, 1, 0, 6, 112, 40, }, ++ { 0, 1, 0, 6, 116, 46, }, ++ { 2, 1, 0, 6, 116, 40, }, ++ { 1, 1, 0, 6, 116, 40, }, ++ { 0, 1, 0, 6, 120, 46, }, ++ { 2, 1, 0, 6, 120, 40, }, ++ { 1, 1, 0, 6, 120, 40, }, ++ { 0, 1, 0, 6, 124, 46, }, ++ { 2, 1, 0, 6, 124, 40, }, ++ { 1, 1, 0, 6, 124, 40, }, ++ { 0, 1, 0, 6, 128, 46, }, ++ { 2, 1, 0, 6, 128, 40, }, ++ { 1, 1, 0, 6, 128, 40, }, ++ { 0, 1, 0, 6, 132, 46, }, ++ { 2, 1, 0, 6, 132, 40, }, ++ { 1, 1, 0, 6, 132, 40, }, ++ { 0, 1, 0, 6, 136, 46, }, ++ { 2, 1, 0, 6, 136, 40, }, ++ { 1, 1, 0, 6, 136, 40, }, ++ { 0, 1, 0, 6, 140, 46, }, ++ { 2, 1, 0, 6, 140, 40, }, ++ { 1, 1, 0, 6, 140, 40, }, ++ { 0, 1, 0, 6, 149, 46, }, ++ { 2, 1, 0, 6, 149, 40, }, ++ { 1, 1, 0, 6, 149, 63, }, ++ { 0, 1, 0, 6, 153, 46, }, ++ { 2, 1, 0, 6, 153, 40, }, ++ { 1, 1, 0, 6, 153, 63, }, ++ { 0, 1, 0, 6, 157, 46, }, ++ { 2, 1, 0, 6, 157, 40, }, ++ { 1, 1, 0, 6, 157, 63, }, ++ { 0, 1, 0, 6, 161, 46, }, ++ { 2, 1, 0, 6, 161, 40, }, ++ { 1, 1, 0, 6, 161, 63, }, ++ { 0, 1, 0, 6, 165, 46, }, ++ { 2, 1, 0, 6, 165, 40, }, ++ { 1, 1, 0, 6, 165, 63, }, ++ { 0, 1, 0, 7, 36, 46, }, ++ { 2, 1, 0, 7, 36, 40, }, ++ { 1, 1, 0, 7, 36, 40, }, ++ { 0, 1, 0, 7, 40, 46, }, ++ { 2, 1, 0, 7, 40, 40, }, ++ { 1, 1, 0, 7, 40, 40, }, ++ { 0, 1, 0, 7, 44, 46, }, ++ { 2, 1, 0, 7, 44, 40, }, ++ { 1, 1, 0, 7, 44, 40, }, ++ { 0, 1, 0, 7, 48, 46, }, ++ { 2, 1, 0, 7, 48, 40, }, ++ { 1, 1, 0, 7, 48, 40, }, ++ { 0, 1, 0, 7, 52, 46, }, ++ { 2, 1, 0, 7, 52, 40, }, ++ { 1, 1, 0, 7, 52, 40, }, ++ { 0, 1, 0, 7, 56, 46, }, ++ { 2, 1, 0, 7, 56, 40, }, ++ { 1, 1, 0, 7, 56, 40, }, ++ { 0, 1, 0, 7, 60, 46, }, ++ { 2, 1, 0, 7, 60, 40, }, ++ { 1, 1, 0, 7, 60, 40, }, ++ { 0, 1, 0, 7, 64, 46, }, ++ { 2, 1, 0, 7, 64, 40, }, ++ { 1, 1, 0, 7, 64, 40, }, ++ { 0, 1, 0, 7, 100, 46, }, ++ { 2, 1, 0, 7, 100, 40, }, ++ { 1, 1, 0, 7, 100, 40, }, ++ { 0, 1, 0, 7, 104, 46, }, ++ { 2, 1, 0, 7, 104, 40, }, ++ { 1, 1, 0, 7, 104, 40, }, ++ { 0, 1, 0, 7, 108, 46, }, ++ { 2, 1, 0, 7, 108, 40, }, ++ { 1, 1, 0, 7, 108, 40, }, ++ { 0, 1, 0, 7, 112, 46, }, ++ { 2, 1, 0, 7, 112, 40, }, ++ { 1, 1, 0, 7, 112, 40, }, ++ { 0, 1, 0, 7, 116, 46, }, ++ { 2, 1, 0, 7, 116, 40, }, ++ { 1, 1, 0, 7, 116, 40, }, ++ { 0, 1, 0, 7, 120, 46, }, ++ { 2, 1, 0, 7, 120, 40, }, ++ { 1, 1, 0, 7, 120, 40, }, ++ { 0, 1, 0, 7, 124, 46, }, ++ { 2, 1, 0, 7, 124, 40, }, ++ { 1, 1, 0, 7, 124, 40, }, ++ { 0, 1, 0, 7, 128, 46, }, ++ { 2, 1, 0, 7, 128, 40, }, ++ { 1, 1, 0, 7, 128, 40, }, ++ { 0, 1, 0, 7, 132, 46, }, ++ { 2, 1, 0, 7, 132, 40, }, ++ { 1, 1, 0, 7, 132, 40, }, ++ { 0, 1, 0, 7, 136, 46, }, ++ { 2, 1, 0, 7, 136, 40, }, ++ { 1, 1, 0, 7, 136, 40, }, ++ { 0, 1, 0, 7, 140, 46, }, ++ { 2, 1, 0, 7, 140, 40, }, ++ { 1, 1, 0, 7, 140, 40, }, ++ { 0, 1, 0, 7, 149, 46, }, ++ { 2, 1, 0, 7, 149, 40, }, ++ { 1, 1, 0, 7, 149, 63, }, ++ { 0, 1, 0, 7, 153, 46, }, ++ { 2, 1, 0, 7, 153, 40, }, ++ { 1, 1, 0, 7, 153, 63, }, ++ { 0, 1, 0, 7, 157, 46, }, ++ { 2, 1, 0, 7, 157, 40, }, ++ { 1, 1, 0, 7, 157, 63, }, ++ { 0, 1, 0, 7, 161, 46, }, ++ { 2, 1, 0, 7, 161, 40, }, ++ { 1, 1, 0, 7, 161, 63, }, ++ { 0, 1, 0, 7, 165, 46, }, ++ { 2, 1, 0, 7, 165, 40, }, ++ { 1, 1, 0, 7, 165, 63, }, ++ { 0, 1, 1, 2, 38, 46, }, ++ { 2, 1, 1, 2, 38, 40, }, ++ { 1, 1, 1, 2, 38, 40, }, ++ { 0, 1, 1, 2, 46, 46, }, ++ { 2, 1, 1, 2, 46, 40, }, ++ { 1, 1, 1, 2, 46, 40, }, ++ { 0, 1, 1, 2, 54, 46, }, ++ { 2, 1, 1, 2, 54, 40, }, ++ { 1, 1, 1, 2, 54, 40, }, ++ { 0, 1, 1, 2, 62, 46, }, ++ { 2, 1, 1, 2, 62, 40, }, ++ { 1, 1, 1, 2, 62, 40, }, ++ { 0, 1, 1, 2, 102, 46, }, ++ { 2, 1, 1, 2, 102, 40, }, ++ { 1, 1, 1, 2, 102, 40, }, ++ { 0, 1, 1, 2, 110, 46, }, ++ { 2, 1, 1, 2, 110, 40, }, ++ { 1, 1, 1, 2, 110, 40, }, ++ { 0, 1, 1, 2, 118, 46, }, ++ { 2, 1, 1, 2, 118, 40, }, ++ { 1, 1, 1, 2, 118, 40, }, ++ { 0, 1, 1, 2, 126, 46, }, ++ { 2, 1, 1, 2, 126, 40, }, ++ { 1, 1, 1, 2, 126, 40, }, ++ { 0, 1, 1, 2, 134, 46, }, ++ { 2, 1, 1, 2, 134, 40, }, ++ { 1, 1, 1, 2, 134, 40, }, ++ { 0, 1, 1, 2, 151, 46, }, ++ { 2, 1, 1, 2, 151, 40, }, ++ { 1, 1, 1, 2, 151, 63, }, ++ { 0, 1, 1, 2, 159, 46, }, ++ { 2, 1, 1, 2, 159, 40, }, ++ { 1, 1, 1, 2, 159, 63, }, ++ { 0, 1, 1, 3, 38, 46, }, ++ { 2, 1, 1, 3, 38, 40, }, ++ { 1, 1, 1, 3, 38, 40, }, ++ { 0, 1, 1, 3, 46, 46, }, ++ { 2, 1, 1, 3, 46, 40, }, ++ { 1, 1, 1, 3, 46, 40, }, ++ { 0, 1, 1, 3, 54, 46, }, ++ { 2, 1, 1, 3, 54, 40, }, ++ { 1, 1, 1, 3, 54, 40, }, ++ { 0, 1, 1, 3, 62, 46, }, ++ { 2, 1, 1, 3, 62, 40, }, ++ { 1, 1, 1, 3, 62, 40, }, ++ { 0, 1, 1, 3, 102, 46, }, ++ { 2, 1, 1, 3, 102, 40, }, ++ { 1, 1, 1, 3, 102, 40, }, ++ { 0, 1, 1, 3, 110, 46, }, ++ { 2, 1, 1, 3, 110, 40, }, ++ { 1, 1, 1, 3, 110, 40, }, ++ { 0, 1, 1, 3, 118, 46, }, ++ { 2, 1, 1, 3, 118, 40, }, ++ { 1, 1, 1, 3, 118, 40, }, ++ { 0, 1, 1, 3, 126, 46, }, ++ { 2, 1, 1, 3, 126, 40, }, ++ { 1, 1, 1, 3, 126, 40, }, ++ { 0, 1, 1, 3, 134, 46, }, ++ { 2, 1, 1, 3, 134, 40, }, ++ { 1, 1, 1, 3, 134, 40, }, ++ { 0, 1, 1, 3, 151, 46, }, ++ { 2, 1, 1, 3, 151, 40, }, ++ { 1, 1, 1, 3, 151, 63, }, ++ { 0, 1, 1, 3, 159, 46, }, ++ { 2, 1, 1, 3, 159, 40, }, ++ { 1, 1, 1, 3, 159, 63, }, ++ { 0, 1, 1, 6, 38, 46, }, ++ { 2, 1, 1, 6, 38, 40, }, ++ { 1, 1, 1, 6, 38, 40, }, ++ { 0, 1, 1, 6, 46, 46, }, ++ { 2, 1, 1, 6, 46, 40, }, ++ { 1, 1, 1, 6, 46, 40, }, ++ { 0, 1, 1, 6, 54, 46, }, ++ { 2, 1, 1, 6, 54, 40, }, ++ { 1, 1, 1, 6, 54, 40, }, ++ { 0, 1, 1, 6, 62, 46, }, ++ { 2, 1, 1, 6, 62, 40, }, ++ { 1, 1, 1, 6, 62, 40, }, ++ { 0, 1, 1, 6, 102, 46, }, ++ { 2, 1, 1, 6, 102, 40, }, ++ { 1, 1, 1, 6, 102, 40, }, ++ { 0, 1, 1, 6, 110, 46, }, ++ { 2, 1, 1, 6, 110, 40, }, ++ { 1, 1, 1, 6, 110, 40, }, ++ { 0, 1, 1, 6, 118, 46, }, ++ { 2, 1, 1, 6, 118, 40, }, ++ { 1, 1, 1, 6, 118, 40, }, ++ { 0, 1, 1, 6, 126, 46, }, ++ { 2, 1, 1, 6, 126, 40, }, ++ { 1, 1, 1, 6, 126, 40, }, ++ { 0, 1, 1, 6, 134, 46, }, ++ { 2, 1, 1, 6, 134, 40, }, ++ { 1, 1, 1, 6, 134, 40, }, ++ { 0, 1, 1, 6, 151, 46, }, ++ { 2, 1, 1, 6, 151, 40, }, ++ { 1, 1, 1, 6, 151, 63, }, ++ { 0, 1, 1, 6, 159, 46, }, ++ { 2, 1, 1, 6, 159, 40, }, ++ { 1, 1, 1, 6, 159, 63, }, ++ { 0, 1, 1, 7, 38, 46, }, ++ { 2, 1, 1, 7, 38, 40, }, ++ { 1, 1, 1, 7, 38, 40, }, ++ { 0, 1, 1, 7, 46, 46, }, ++ { 2, 1, 1, 7, 46, 40, }, ++ { 1, 1, 1, 7, 46, 40, }, ++ { 0, 1, 1, 7, 54, 46, }, ++ { 2, 1, 1, 7, 54, 40, }, ++ { 1, 1, 1, 7, 54, 40, }, ++ { 0, 1, 1, 7, 62, 46, }, ++ { 2, 1, 1, 7, 62, 40, }, ++ { 1, 1, 1, 7, 62, 40, }, ++ { 0, 1, 1, 7, 102, 46, }, ++ { 2, 1, 1, 7, 102, 40, }, ++ { 1, 1, 1, 7, 102, 40, }, ++ { 0, 1, 1, 7, 110, 46, }, ++ { 2, 1, 1, 7, 110, 40, }, ++ { 1, 1, 1, 7, 110, 40, }, ++ { 0, 1, 1, 7, 118, 46, }, ++ { 2, 1, 1, 7, 118, 40, }, ++ { 1, 1, 1, 7, 118, 40, }, ++ { 0, 1, 1, 7, 126, 46, }, ++ { 2, 1, 1, 7, 126, 40, }, ++ { 1, 1, 1, 7, 126, 40, }, ++ { 0, 1, 1, 7, 134, 46, }, ++ { 2, 1, 1, 7, 134, 40, }, ++ { 1, 1, 1, 7, 134, 40, }, ++ { 0, 1, 1, 7, 151, 46, }, ++ { 2, 1, 1, 7, 151, 40, }, ++ { 1, 1, 1, 7, 151, 63, }, ++ { 0, 1, 1, 7, 159, 46, }, ++ { 2, 1, 1, 7, 159, 40, }, ++ { 1, 1, 1, 7, 159, 63, }, ++ { 0, 1, 2, 4, 42, 46, }, ++ { 2, 1, 2, 4, 42, 40, }, ++ { 1, 1, 2, 4, 42, 40, }, ++ { 0, 1, 2, 4, 58, 46, }, ++ { 2, 1, 2, 4, 58, 40, }, ++ { 1, 1, 2, 4, 58, 40, }, ++ { 0, 1, 2, 4, 106, 46, }, ++ { 2, 1, 2, 4, 106, 40, }, ++ { 1, 1, 2, 4, 106, 40, }, ++ { 0, 1, 2, 4, 122, 46, }, ++ { 2, 1, 2, 4, 122, 40, }, ++ { 1, 1, 2, 4, 122, 40, }, ++ { 0, 1, 2, 4, 155, 46, }, ++ { 2, 1, 2, 4, 155, 40, }, ++ { 1, 1, 2, 4, 155, 63, }, ++ { 0, 1, 2, 5, 42, 46, }, ++ { 2, 1, 2, 5, 42, 40, }, ++ { 1, 1, 2, 5, 42, 40, }, ++ { 0, 1, 2, 5, 58, 46, }, ++ { 2, 1, 2, 5, 58, 40, }, ++ { 1, 1, 2, 5, 58, 40, }, ++ { 0, 1, 2, 5, 106, 46, }, ++ { 2, 1, 2, 5, 106, 40, }, ++ { 1, 1, 2, 5, 106, 40, }, ++ { 0, 1, 2, 5, 122, 46, }, ++ { 2, 1, 2, 5, 122, 40, }, ++ { 1, 1, 2, 5, 122, 40, }, ++ { 0, 1, 2, 5, 155, 46, }, ++ { 2, 1, 2, 5, 155, 40, }, ++ { 1, 1, 2, 5, 155, 63, }, ++ { 0, 1, 2, 8, 42, 46, }, ++ { 2, 1, 2, 8, 42, 40, }, ++ { 1, 1, 2, 8, 42, 40, }, ++ { 0, 1, 2, 8, 58, 46, }, ++ { 2, 1, 2, 8, 58, 40, }, ++ { 1, 1, 2, 8, 58, 40, }, ++ { 0, 1, 2, 8, 106, 46, }, ++ { 2, 1, 2, 8, 106, 40, }, ++ { 1, 1, 2, 8, 106, 40, }, ++ { 0, 1, 2, 8, 122, 46, }, ++ { 2, 1, 2, 8, 122, 40, }, ++ { 1, 1, 2, 8, 122, 40, }, ++ { 0, 1, 2, 8, 155, 46, }, ++ { 2, 1, 2, 8, 155, 40, }, ++ { 1, 1, 2, 8, 155, 63, }, ++ { 0, 1, 2, 9, 42, 46, }, ++ { 2, 1, 2, 9, 42, 40, }, ++ { 1, 1, 2, 9, 42, 40, }, ++ { 0, 1, 2, 9, 58, 46, }, ++ { 2, 1, 2, 9, 58, 40, }, ++ { 1, 1, 2, 9, 58, 40, }, ++ { 0, 1, 2, 9, 106, 46, }, ++ { 2, 1, 2, 9, 106, 40, }, ++ { 1, 1, 2, 9, 106, 40, }, ++ { 0, 1, 2, 9, 122, 46, }, ++ { 2, 1, 2, 9, 122, 40, }, ++ { 1, 1, 2, 9, 122, 40, }, ++ { 0, 1, 2, 9, 155, 46, }, ++ { 2, 1, 2, 9, 155, 40, }, ++ { 1, 1, 2, 9, 155, 63, }, ++}; ++ ++RTW_DECL_TABLE_TXPWR_LMT(rtw8814a_txpwr_lmt_type3); ++ ++static const struct rtw_txpwr_lmt_cfg_pair rtw8814a_txpwr_lmt_type5[] = { ++ { 0, 0, 0, 0, 1, 46, }, ++ { 2, 0, 0, 0, 1, 40, }, ++ { 1, 0, 0, 0, 1, 40, }, ++ { 0, 0, 0, 0, 2, 46, }, ++ { 2, 0, 0, 0, 2, 40, }, ++ { 1, 0, 0, 0, 2, 40, }, ++ { 0, 0, 0, 0, 3, 46, }, ++ { 2, 0, 0, 0, 3, 40, }, ++ { 1, 0, 0, 0, 3, 40, }, ++ { 0, 0, 0, 0, 4, 46, }, ++ { 2, 0, 0, 0, 4, 40, }, ++ { 1, 0, 0, 0, 4, 40, }, ++ { 0, 0, 0, 0, 5, 46, }, ++ { 2, 0, 0, 0, 5, 40, }, ++ { 1, 0, 0, 0, 5, 40, }, ++ { 0, 0, 0, 0, 6, 46, }, ++ { 2, 0, 0, 0, 6, 40, }, ++ { 1, 0, 0, 0, 6, 40, }, ++ { 0, 0, 0, 0, 7, 46, }, ++ { 2, 0, 0, 0, 7, 40, }, ++ { 1, 0, 0, 0, 7, 40, }, ++ { 0, 0, 0, 0, 8, 46, }, ++ { 2, 0, 0, 0, 8, 40, }, ++ { 1, 0, 0, 0, 8, 40, }, ++ { 0, 0, 0, 0, 9, 46, }, ++ { 2, 0, 0, 0, 9, 40, }, ++ { 1, 0, 0, 0, 9, 40, }, ++ { 0, 0, 0, 0, 10, 46, }, ++ { 2, 0, 0, 0, 10, 40, }, ++ { 1, 0, 0, 0, 10, 40, }, ++ { 0, 0, 0, 0, 11, 46, }, ++ { 2, 0, 0, 0, 11, 40, }, ++ { 1, 0, 0, 0, 11, 40, }, ++ { 0, 0, 0, 0, 12, 63, }, ++ { 2, 0, 0, 0, 12, 40, }, ++ { 1, 0, 0, 0, 12, 40, }, ++ { 0, 0, 0, 0, 13, 63, }, ++ { 2, 0, 0, 0, 13, 40, }, ++ { 1, 0, 0, 0, 13, 40, }, ++ { 0, 0, 0, 0, 14, 63, }, ++ { 2, 0, 0, 0, 14, 63, }, ++ { 1, 0, 0, 0, 14, 40, }, ++ { 0, 0, 0, 1, 1, 46, }, ++ { 2, 0, 0, 1, 1, 40, }, ++ { 1, 0, 0, 1, 1, 40, }, ++ { 0, 0, 0, 1, 2, 46, }, ++ { 2, 0, 0, 1, 2, 40, }, ++ { 1, 0, 0, 1, 2, 40, }, ++ { 0, 0, 0, 1, 3, 46, }, ++ { 2, 0, 0, 1, 3, 40, }, ++ { 1, 0, 0, 1, 3, 40, }, ++ { 0, 0, 0, 1, 4, 46, }, ++ { 2, 0, 0, 1, 4, 40, }, ++ { 1, 0, 0, 1, 4, 40, }, ++ { 0, 0, 0, 1, 5, 46, }, ++ { 2, 0, 0, 1, 5, 40, }, ++ { 1, 0, 0, 1, 5, 40, }, ++ { 0, 0, 0, 1, 6, 46, }, ++ { 2, 0, 0, 1, 6, 40, }, ++ { 1, 0, 0, 1, 6, 40, }, ++ { 0, 0, 0, 1, 7, 46, }, ++ { 2, 0, 0, 1, 7, 40, }, ++ { 1, 0, 0, 1, 7, 40, }, ++ { 0, 0, 0, 1, 8, 46, }, ++ { 2, 0, 0, 1, 8, 40, }, ++ { 1, 0, 0, 1, 8, 40, }, ++ { 0, 0, 0, 1, 9, 46, }, ++ { 2, 0, 0, 1, 9, 40, }, ++ { 1, 0, 0, 1, 9, 40, }, ++ { 0, 0, 0, 1, 10, 46, }, ++ { 2, 0, 0, 1, 10, 40, }, ++ { 1, 0, 0, 1, 10, 40, }, ++ { 0, 0, 0, 1, 11, 46, }, ++ { 2, 0, 0, 1, 11, 40, }, ++ { 1, 0, 0, 1, 11, 40, }, ++ { 0, 0, 0, 1, 12, 63, }, ++ { 2, 0, 0, 1, 12, 40, }, ++ { 1, 0, 0, 1, 12, 40, }, ++ { 0, 0, 0, 1, 13, 63, }, ++ { 2, 0, 0, 1, 13, 40, }, ++ { 1, 0, 0, 1, 13, 40, }, ++ { 0, 0, 0, 1, 14, 63, }, ++ { 2, 0, 0, 1, 14, 63, }, ++ { 1, 0, 0, 1, 14, 63, }, ++ { 0, 0, 0, 2, 1, 46, }, ++ { 2, 0, 0, 2, 1, 40, }, ++ { 1, 0, 0, 2, 1, 40, }, ++ { 0, 0, 0, 2, 2, 46, }, ++ { 2, 0, 0, 2, 2, 40, }, ++ { 1, 0, 0, 2, 2, 40, }, ++ { 0, 0, 0, 2, 3, 46, }, ++ { 2, 0, 0, 2, 3, 40, }, ++ { 1, 0, 0, 2, 3, 40, }, ++ { 0, 0, 0, 2, 4, 46, }, ++ { 2, 0, 0, 2, 4, 40, }, ++ { 1, 0, 0, 2, 4, 40, }, ++ { 0, 0, 0, 2, 5, 46, }, ++ { 2, 0, 0, 2, 5, 40, }, ++ { 1, 0, 0, 2, 5, 40, }, ++ { 0, 0, 0, 2, 6, 46, }, ++ { 2, 0, 0, 2, 6, 40, }, ++ { 1, 0, 0, 2, 6, 40, }, ++ { 0, 0, 0, 2, 7, 46, }, ++ { 2, 0, 0, 2, 7, 40, }, ++ { 1, 0, 0, 2, 7, 40, }, ++ { 0, 0, 0, 2, 8, 46, }, ++ { 2, 0, 0, 2, 8, 40, }, ++ { 1, 0, 0, 2, 8, 40, }, ++ { 0, 0, 0, 2, 9, 46, }, ++ { 2, 0, 0, 2, 9, 40, }, ++ { 1, 0, 0, 2, 9, 40, }, ++ { 0, 0, 0, 2, 10, 46, }, ++ { 2, 0, 0, 2, 10, 40, }, ++ { 1, 0, 0, 2, 10, 40, }, ++ { 0, 0, 0, 2, 11, 46, }, ++ { 2, 0, 0, 2, 11, 40, }, ++ { 1, 0, 0, 2, 11, 40, }, ++ { 0, 0, 0, 2, 12, 63, }, ++ { 2, 0, 0, 2, 12, 40, }, ++ { 1, 0, 0, 2, 12, 40, }, ++ { 0, 0, 0, 2, 13, 63, }, ++ { 2, 0, 0, 2, 13, 40, }, ++ { 1, 0, 0, 2, 13, 40, }, ++ { 0, 0, 0, 2, 14, 63, }, ++ { 2, 0, 0, 2, 14, 63, }, ++ { 1, 0, 0, 2, 14, 63, }, ++ { 0, 0, 0, 3, 1, 46, }, ++ { 2, 0, 0, 3, 1, 40, }, ++ { 1, 0, 0, 3, 1, 40, }, ++ { 0, 0, 0, 3, 2, 46, }, ++ { 2, 0, 0, 3, 2, 40, }, ++ { 1, 0, 0, 3, 2, 40, }, ++ { 0, 0, 0, 3, 3, 46, }, ++ { 2, 0, 0, 3, 3, 40, }, ++ { 1, 0, 0, 3, 3, 40, }, ++ { 0, 0, 0, 3, 4, 46, }, ++ { 2, 0, 0, 3, 4, 40, }, ++ { 1, 0, 0, 3, 4, 40, }, ++ { 0, 0, 0, 3, 5, 46, }, ++ { 2, 0, 0, 3, 5, 40, }, ++ { 1, 0, 0, 3, 5, 40, }, ++ { 0, 0, 0, 3, 6, 46, }, ++ { 2, 0, 0, 3, 6, 40, }, ++ { 1, 0, 0, 3, 6, 40, }, ++ { 0, 0, 0, 3, 7, 46, }, ++ { 2, 0, 0, 3, 7, 40, }, ++ { 1, 0, 0, 3, 7, 40, }, ++ { 0, 0, 0, 3, 8, 46, }, ++ { 2, 0, 0, 3, 8, 40, }, ++ { 1, 0, 0, 3, 8, 40, }, ++ { 0, 0, 0, 3, 9, 46, }, ++ { 2, 0, 0, 3, 9, 40, }, ++ { 1, 0, 0, 3, 9, 40, }, ++ { 0, 0, 0, 3, 10, 46, }, ++ { 2, 0, 0, 3, 10, 40, }, ++ { 1, 0, 0, 3, 10, 40, }, ++ { 0, 0, 0, 3, 11, 46, }, ++ { 2, 0, 0, 3, 11, 40, }, ++ { 1, 0, 0, 3, 11, 40, }, ++ { 0, 0, 0, 3, 12, 63, }, ++ { 2, 0, 0, 3, 12, 40, }, ++ { 1, 0, 0, 3, 12, 40, }, ++ { 0, 0, 0, 3, 13, 63, }, ++ { 2, 0, 0, 3, 13, 40, }, ++ { 1, 0, 0, 3, 13, 40, }, ++ { 0, 0, 0, 3, 14, 63, }, ++ { 2, 0, 0, 3, 14, 63, }, ++ { 1, 0, 0, 3, 14, 63, }, ++ { 0, 0, 0, 6, 1, 46, }, ++ { 2, 0, 0, 6, 1, 40, }, ++ { 1, 0, 0, 6, 1, 40, }, ++ { 0, 0, 0, 6, 2, 46, }, ++ { 2, 0, 0, 6, 2, 40, }, ++ { 1, 0, 0, 6, 2, 40, }, ++ { 0, 0, 0, 6, 3, 46, }, ++ { 2, 0, 0, 6, 3, 40, }, ++ { 1, 0, 0, 6, 3, 40, }, ++ { 0, 0, 0, 6, 4, 46, }, ++ { 2, 0, 0, 6, 4, 40, }, ++ { 1, 0, 0, 6, 4, 40, }, ++ { 0, 0, 0, 6, 5, 46, }, ++ { 2, 0, 0, 6, 5, 40, }, ++ { 1, 0, 0, 6, 5, 40, }, ++ { 0, 0, 0, 6, 6, 46, }, ++ { 2, 0, 0, 6, 6, 40, }, ++ { 1, 0, 0, 6, 6, 40, }, ++ { 0, 0, 0, 6, 7, 46, }, ++ { 2, 0, 0, 6, 7, 40, }, ++ { 1, 0, 0, 6, 7, 40, }, ++ { 0, 0, 0, 6, 8, 46, }, ++ { 2, 0, 0, 6, 8, 40, }, ++ { 1, 0, 0, 6, 8, 40, }, ++ { 0, 0, 0, 6, 9, 46, }, ++ { 2, 0, 0, 6, 9, 40, }, ++ { 1, 0, 0, 6, 9, 40, }, ++ { 0, 0, 0, 6, 10, 46, }, ++ { 2, 0, 0, 6, 10, 40, }, ++ { 1, 0, 0, 6, 10, 40, }, ++ { 0, 0, 0, 6, 11, 46, }, ++ { 2, 0, 0, 6, 11, 40, }, ++ { 1, 0, 0, 6, 11, 40, }, ++ { 0, 0, 0, 6, 12, 63, }, ++ { 2, 0, 0, 6, 12, 40, }, ++ { 1, 0, 0, 6, 12, 40, }, ++ { 0, 0, 0, 6, 13, 63, }, ++ { 2, 0, 0, 6, 13, 40, }, ++ { 1, 0, 0, 6, 13, 40, }, ++ { 0, 0, 0, 6, 14, 63, }, ++ { 2, 0, 0, 6, 14, 63, }, ++ { 1, 0, 0, 6, 14, 63, }, ++ { 0, 0, 0, 7, 1, 46, }, ++ { 2, 0, 0, 7, 1, 40, }, ++ { 1, 0, 0, 7, 1, 40, }, ++ { 0, 0, 0, 7, 2, 46, }, ++ { 2, 0, 0, 7, 2, 40, }, ++ { 1, 0, 0, 7, 2, 40, }, ++ { 0, 0, 0, 7, 3, 46, }, ++ { 2, 0, 0, 7, 3, 40, }, ++ { 1, 0, 0, 7, 3, 40, }, ++ { 0, 0, 0, 7, 4, 46, }, ++ { 2, 0, 0, 7, 4, 40, }, ++ { 1, 0, 0, 7, 4, 40, }, ++ { 0, 0, 0, 7, 5, 46, }, ++ { 2, 0, 0, 7, 5, 40, }, ++ { 1, 0, 0, 7, 5, 40, }, ++ { 0, 0, 0, 7, 6, 46, }, ++ { 2, 0, 0, 7, 6, 40, }, ++ { 1, 0, 0, 7, 6, 40, }, ++ { 0, 0, 0, 7, 7, 46, }, ++ { 2, 0, 0, 7, 7, 40, }, ++ { 1, 0, 0, 7, 7, 40, }, ++ { 0, 0, 0, 7, 8, 46, }, ++ { 2, 0, 0, 7, 8, 40, }, ++ { 1, 0, 0, 7, 8, 40, }, ++ { 0, 0, 0, 7, 9, 46, }, ++ { 2, 0, 0, 7, 9, 40, }, ++ { 1, 0, 0, 7, 9, 40, }, ++ { 0, 0, 0, 7, 10, 46, }, ++ { 2, 0, 0, 7, 10, 40, }, ++ { 1, 0, 0, 7, 10, 40, }, ++ { 0, 0, 0, 7, 11, 46, }, ++ { 2, 0, 0, 7, 11, 40, }, ++ { 1, 0, 0, 7, 11, 40, }, ++ { 0, 0, 0, 7, 12, 63, }, ++ { 2, 0, 0, 7, 12, 40, }, ++ { 1, 0, 0, 7, 12, 40, }, ++ { 0, 0, 0, 7, 13, 63, }, ++ { 2, 0, 0, 7, 13, 40, }, ++ { 1, 0, 0, 7, 13, 40, }, ++ { 0, 0, 0, 7, 14, 63, }, ++ { 2, 0, 0, 7, 14, 63, }, ++ { 1, 0, 0, 7, 14, 63, }, ++ { 0, 0, 1, 2, 1, 63, }, ++ { 2, 0, 1, 2, 1, 63, }, ++ { 1, 0, 1, 2, 1, 63, }, ++ { 0, 0, 1, 2, 2, 63, }, ++ { 2, 0, 1, 2, 2, 63, }, ++ { 1, 0, 1, 2, 2, 63, }, ++ { 0, 0, 1, 2, 3, 46, }, ++ { 2, 0, 1, 2, 3, 40, }, ++ { 1, 0, 1, 2, 3, 40, }, ++ { 0, 0, 1, 2, 4, 46, }, ++ { 2, 0, 1, 2, 4, 40, }, ++ { 1, 0, 1, 2, 4, 40, }, ++ { 0, 0, 1, 2, 5, 46, }, ++ { 2, 0, 1, 2, 5, 40, }, ++ { 1, 0, 1, 2, 5, 40, }, ++ { 0, 0, 1, 2, 6, 46, }, ++ { 2, 0, 1, 2, 6, 40, }, ++ { 1, 0, 1, 2, 6, 40, }, ++ { 0, 0, 1, 2, 7, 46, }, ++ { 2, 0, 1, 2, 7, 40, }, ++ { 1, 0, 1, 2, 7, 40, }, ++ { 0, 0, 1, 2, 8, 46, }, ++ { 2, 0, 1, 2, 8, 40, }, ++ { 1, 0, 1, 2, 8, 40, }, ++ { 0, 0, 1, 2, 9, 46, }, ++ { 2, 0, 1, 2, 9, 40, }, ++ { 1, 0, 1, 2, 9, 40, }, ++ { 0, 0, 1, 2, 10, 46, }, ++ { 2, 0, 1, 2, 10, 40, }, ++ { 1, 0, 1, 2, 10, 40, }, ++ { 0, 0, 1, 2, 11, 46, }, ++ { 2, 0, 1, 2, 11, 40, }, ++ { 1, 0, 1, 2, 11, 40, }, ++ { 0, 0, 1, 2, 12, 63, }, ++ { 2, 0, 1, 2, 12, 40, }, ++ { 1, 0, 1, 2, 12, 40, }, ++ { 0, 0, 1, 2, 13, 63, }, ++ { 2, 0, 1, 2, 13, 40, }, ++ { 1, 0, 1, 2, 13, 40, }, ++ { 0, 0, 1, 2, 14, 63, }, ++ { 2, 0, 1, 2, 14, 63, }, ++ { 1, 0, 1, 2, 14, 63, }, ++ { 0, 0, 1, 3, 1, 63, }, ++ { 2, 0, 1, 3, 1, 63, }, ++ { 1, 0, 1, 3, 1, 63, }, ++ { 0, 0, 1, 3, 2, 63, }, ++ { 2, 0, 1, 3, 2, 63, }, ++ { 1, 0, 1, 3, 2, 63, }, ++ { 0, 0, 1, 3, 3, 46, }, ++ { 2, 0, 1, 3, 3, 40, }, ++ { 1, 0, 1, 3, 3, 40, }, ++ { 0, 0, 1, 3, 4, 46, }, ++ { 2, 0, 1, 3, 4, 40, }, ++ { 1, 0, 1, 3, 4, 40, }, ++ { 0, 0, 1, 3, 5, 46, }, ++ { 2, 0, 1, 3, 5, 40, }, ++ { 1, 0, 1, 3, 5, 40, }, ++ { 0, 0, 1, 3, 6, 46, }, ++ { 2, 0, 1, 3, 6, 40, }, ++ { 1, 0, 1, 3, 6, 40, }, ++ { 0, 0, 1, 3, 7, 46, }, ++ { 2, 0, 1, 3, 7, 40, }, ++ { 1, 0, 1, 3, 7, 40, }, ++ { 0, 0, 1, 3, 8, 46, }, ++ { 2, 0, 1, 3, 8, 40, }, ++ { 1, 0, 1, 3, 8, 40, }, ++ { 0, 0, 1, 3, 9, 46, }, ++ { 2, 0, 1, 3, 9, 40, }, ++ { 1, 0, 1, 3, 9, 40, }, ++ { 0, 0, 1, 3, 10, 46, }, ++ { 2, 0, 1, 3, 10, 40, }, ++ { 1, 0, 1, 3, 10, 40, }, ++ { 0, 0, 1, 3, 11, 46, }, ++ { 2, 0, 1, 3, 11, 40, }, ++ { 1, 0, 1, 3, 11, 40, }, ++ { 0, 0, 1, 3, 12, 63, }, ++ { 2, 0, 1, 3, 12, 40, }, ++ { 1, 0, 1, 3, 12, 40, }, ++ { 0, 0, 1, 3, 13, 63, }, ++ { 2, 0, 1, 3, 13, 40, }, ++ { 1, 0, 1, 3, 13, 40, }, ++ { 0, 0, 1, 3, 14, 63, }, ++ { 2, 0, 1, 3, 14, 63, }, ++ { 1, 0, 1, 3, 14, 63, }, ++ { 0, 0, 1, 6, 1, 63, }, ++ { 2, 0, 1, 6, 1, 63, }, ++ { 1, 0, 1, 6, 1, 63, }, ++ { 0, 0, 1, 6, 2, 63, }, ++ { 2, 0, 1, 6, 2, 63, }, ++ { 1, 0, 1, 6, 2, 63, }, ++ { 0, 0, 1, 6, 3, 46, }, ++ { 2, 0, 1, 6, 3, 40, }, ++ { 1, 0, 1, 6, 3, 40, }, ++ { 0, 0, 1, 6, 4, 46, }, ++ { 2, 0, 1, 6, 4, 40, }, ++ { 1, 0, 1, 6, 4, 40, }, ++ { 0, 0, 1, 6, 5, 46, }, ++ { 2, 0, 1, 6, 5, 40, }, ++ { 1, 0, 1, 6, 5, 40, }, ++ { 0, 0, 1, 6, 6, 46, }, ++ { 2, 0, 1, 6, 6, 40, }, ++ { 1, 0, 1, 6, 6, 40, }, ++ { 0, 0, 1, 6, 7, 46, }, ++ { 2, 0, 1, 6, 7, 40, }, ++ { 1, 0, 1, 6, 7, 40, }, ++ { 0, 0, 1, 6, 8, 46, }, ++ { 2, 0, 1, 6, 8, 40, }, ++ { 1, 0, 1, 6, 8, 40, }, ++ { 0, 0, 1, 6, 9, 46, }, ++ { 2, 0, 1, 6, 9, 40, }, ++ { 1, 0, 1, 6, 9, 40, }, ++ { 0, 0, 1, 6, 10, 46, }, ++ { 2, 0, 1, 6, 10, 40, }, ++ { 1, 0, 1, 6, 10, 40, }, ++ { 0, 0, 1, 6, 11, 46, }, ++ { 2, 0, 1, 6, 11, 40, }, ++ { 1, 0, 1, 6, 11, 40, }, ++ { 0, 0, 1, 6, 12, 63, }, ++ { 2, 0, 1, 6, 12, 40, }, ++ { 1, 0, 1, 6, 12, 40, }, ++ { 0, 0, 1, 6, 13, 63, }, ++ { 2, 0, 1, 6, 13, 40, }, ++ { 1, 0, 1, 6, 13, 40, }, ++ { 0, 0, 1, 6, 14, 63, }, ++ { 2, 0, 1, 6, 14, 63, }, ++ { 1, 0, 1, 6, 14, 63, }, ++ { 0, 0, 1, 7, 1, 63, }, ++ { 2, 0, 1, 7, 1, 63, }, ++ { 1, 0, 1, 7, 1, 63, }, ++ { 0, 0, 1, 7, 2, 63, }, ++ { 2, 0, 1, 7, 2, 63, }, ++ { 1, 0, 1, 7, 2, 63, }, ++ { 0, 0, 1, 7, 3, 46, }, ++ { 2, 0, 1, 7, 3, 40, }, ++ { 1, 0, 1, 7, 3, 40, }, ++ { 0, 0, 1, 7, 4, 46, }, ++ { 2, 0, 1, 7, 4, 40, }, ++ { 1, 0, 1, 7, 4, 40, }, ++ { 0, 0, 1, 7, 5, 46, }, ++ { 2, 0, 1, 7, 5, 40, }, ++ { 1, 0, 1, 7, 5, 40, }, ++ { 0, 0, 1, 7, 6, 46, }, ++ { 2, 0, 1, 7, 6, 40, }, ++ { 1, 0, 1, 7, 6, 40, }, ++ { 0, 0, 1, 7, 7, 46, }, ++ { 2, 0, 1, 7, 7, 40, }, ++ { 1, 0, 1, 7, 7, 40, }, ++ { 0, 0, 1, 7, 8, 46, }, ++ { 2, 0, 1, 7, 8, 40, }, ++ { 1, 0, 1, 7, 8, 40, }, ++ { 0, 0, 1, 7, 9, 46, }, ++ { 2, 0, 1, 7, 9, 40, }, ++ { 1, 0, 1, 7, 9, 40, }, ++ { 0, 0, 1, 7, 10, 46, }, ++ { 2, 0, 1, 7, 10, 40, }, ++ { 1, 0, 1, 7, 10, 40, }, ++ { 0, 0, 1, 7, 11, 46, }, ++ { 2, 0, 1, 7, 11, 40, }, ++ { 1, 0, 1, 7, 11, 40, }, ++ { 0, 0, 1, 7, 12, 63, }, ++ { 2, 0, 1, 7, 12, 40, }, ++ { 1, 0, 1, 7, 12, 40, }, ++ { 0, 0, 1, 7, 13, 63, }, ++ { 2, 0, 1, 7, 13, 40, }, ++ { 1, 0, 1, 7, 13, 40, }, ++ { 0, 0, 1, 7, 14, 63, }, ++ { 2, 0, 1, 7, 14, 63, }, ++ { 1, 0, 1, 7, 14, 63, }, ++ { 0, 1, 0, 1, 36, 46, }, ++ { 2, 1, 0, 1, 36, 40, }, ++ { 1, 1, 0, 1, 36, 40, }, ++ { 0, 1, 0, 1, 40, 46, }, ++ { 2, 1, 0, 1, 40, 40, }, ++ { 1, 1, 0, 1, 40, 40, }, ++ { 0, 1, 0, 1, 44, 46, }, ++ { 2, 1, 0, 1, 44, 40, }, ++ { 1, 1, 0, 1, 44, 40, }, ++ { 0, 1, 0, 1, 48, 46, }, ++ { 2, 1, 0, 1, 48, 40, }, ++ { 1, 1, 0, 1, 48, 40, }, ++ { 0, 1, 0, 1, 52, 46, }, ++ { 2, 1, 0, 1, 52, 40, }, ++ { 1, 1, 0, 1, 52, 40, }, ++ { 0, 1, 0, 1, 56, 46, }, ++ { 2, 1, 0, 1, 56, 40, }, ++ { 1, 1, 0, 1, 56, 40, }, ++ { 0, 1, 0, 1, 60, 46, }, ++ { 2, 1, 0, 1, 60, 40, }, ++ { 1, 1, 0, 1, 60, 40, }, ++ { 0, 1, 0, 1, 64, 46, }, ++ { 2, 1, 0, 1, 64, 40, }, ++ { 1, 1, 0, 1, 64, 40, }, ++ { 0, 1, 0, 1, 100, 46, }, ++ { 2, 1, 0, 1, 100, 40, }, ++ { 1, 1, 0, 1, 100, 40, }, ++ { 0, 1, 0, 1, 104, 46, }, ++ { 2, 1, 0, 1, 104, 40, }, ++ { 1, 1, 0, 1, 104, 40, }, ++ { 0, 1, 0, 1, 108, 46, }, ++ { 2, 1, 0, 1, 108, 40, }, ++ { 1, 1, 0, 1, 108, 40, }, ++ { 0, 1, 0, 1, 112, 46, }, ++ { 2, 1, 0, 1, 112, 40, }, ++ { 1, 1, 0, 1, 112, 40, }, ++ { 0, 1, 0, 1, 116, 46, }, ++ { 2, 1, 0, 1, 116, 40, }, ++ { 1, 1, 0, 1, 116, 40, }, ++ { 0, 1, 0, 1, 120, 46, }, ++ { 2, 1, 0, 1, 120, 40, }, ++ { 1, 1, 0, 1, 120, 40, }, ++ { 0, 1, 0, 1, 124, 46, }, ++ { 2, 1, 0, 1, 124, 40, }, ++ { 1, 1, 0, 1, 124, 40, }, ++ { 0, 1, 0, 1, 128, 46, }, ++ { 2, 1, 0, 1, 128, 40, }, ++ { 1, 1, 0, 1, 128, 40, }, ++ { 0, 1, 0, 1, 132, 46, }, ++ { 2, 1, 0, 1, 132, 40, }, ++ { 1, 1, 0, 1, 132, 40, }, ++ { 0, 1, 0, 1, 136, 46, }, ++ { 2, 1, 0, 1, 136, 40, }, ++ { 1, 1, 0, 1, 136, 40, }, ++ { 0, 1, 0, 1, 140, 46, }, ++ { 2, 1, 0, 1, 140, 40, }, ++ { 1, 1, 0, 1, 140, 40, }, ++ { 0, 1, 0, 1, 149, 46, }, ++ { 2, 1, 0, 1, 149, 40, }, ++ { 1, 1, 0, 1, 149, 63, }, ++ { 0, 1, 0, 1, 153, 46, }, ++ { 2, 1, 0, 1, 153, 40, }, ++ { 1, 1, 0, 1, 153, 63, }, ++ { 0, 1, 0, 1, 157, 46, }, ++ { 2, 1, 0, 1, 157, 40, }, ++ { 1, 1, 0, 1, 157, 63, }, ++ { 0, 1, 0, 1, 161, 46, }, ++ { 2, 1, 0, 1, 161, 40, }, ++ { 1, 1, 0, 1, 161, 63, }, ++ { 0, 1, 0, 1, 165, 46, }, ++ { 2, 1, 0, 1, 165, 40, }, ++ { 1, 1, 0, 1, 165, 63, }, ++ { 0, 1, 0, 2, 36, 46, }, ++ { 2, 1, 0, 2, 36, 40, }, ++ { 1, 1, 0, 2, 36, 40, }, ++ { 0, 1, 0, 2, 40, 46, }, ++ { 2, 1, 0, 2, 40, 40, }, ++ { 1, 1, 0, 2, 40, 40, }, ++ { 0, 1, 0, 2, 44, 46, }, ++ { 2, 1, 0, 2, 44, 40, }, ++ { 1, 1, 0, 2, 44, 40, }, ++ { 0, 1, 0, 2, 48, 46, }, ++ { 2, 1, 0, 2, 48, 40, }, ++ { 1, 1, 0, 2, 48, 40, }, ++ { 0, 1, 0, 2, 52, 46, }, ++ { 2, 1, 0, 2, 52, 40, }, ++ { 1, 1, 0, 2, 52, 40, }, ++ { 0, 1, 0, 2, 56, 46, }, ++ { 2, 1, 0, 2, 56, 40, }, ++ { 1, 1, 0, 2, 56, 40, }, ++ { 0, 1, 0, 2, 60, 46, }, ++ { 2, 1, 0, 2, 60, 40, }, ++ { 1, 1, 0, 2, 60, 40, }, ++ { 0, 1, 0, 2, 64, 46, }, ++ { 2, 1, 0, 2, 64, 40, }, ++ { 1, 1, 0, 2, 64, 40, }, ++ { 0, 1, 0, 2, 100, 46, }, ++ { 2, 1, 0, 2, 100, 40, }, ++ { 1, 1, 0, 2, 100, 40, }, ++ { 0, 1, 0, 2, 104, 46, }, ++ { 2, 1, 0, 2, 104, 40, }, ++ { 1, 1, 0, 2, 104, 40, }, ++ { 0, 1, 0, 2, 108, 46, }, ++ { 2, 1, 0, 2, 108, 40, }, ++ { 1, 1, 0, 2, 108, 40, }, ++ { 0, 1, 0, 2, 112, 46, }, ++ { 2, 1, 0, 2, 112, 40, }, ++ { 1, 1, 0, 2, 112, 40, }, ++ { 0, 1, 0, 2, 116, 46, }, ++ { 2, 1, 0, 2, 116, 40, }, ++ { 1, 1, 0, 2, 116, 40, }, ++ { 0, 1, 0, 2, 120, 46, }, ++ { 2, 1, 0, 2, 120, 40, }, ++ { 1, 1, 0, 2, 120, 40, }, ++ { 0, 1, 0, 2, 124, 46, }, ++ { 2, 1, 0, 2, 124, 40, }, ++ { 1, 1, 0, 2, 124, 40, }, ++ { 0, 1, 0, 2, 128, 46, }, ++ { 2, 1, 0, 2, 128, 40, }, ++ { 1, 1, 0, 2, 128, 40, }, ++ { 0, 1, 0, 2, 132, 46, }, ++ { 2, 1, 0, 2, 132, 40, }, ++ { 1, 1, 0, 2, 132, 40, }, ++ { 0, 1, 0, 2, 136, 46, }, ++ { 2, 1, 0, 2, 136, 40, }, ++ { 1, 1, 0, 2, 136, 40, }, ++ { 0, 1, 0, 2, 140, 46, }, ++ { 2, 1, 0, 2, 140, 40, }, ++ { 1, 1, 0, 2, 140, 40, }, ++ { 0, 1, 0, 2, 149, 46, }, ++ { 2, 1, 0, 2, 149, 40, }, ++ { 1, 1, 0, 2, 149, 63, }, ++ { 0, 1, 0, 2, 153, 46, }, ++ { 2, 1, 0, 2, 153, 40, }, ++ { 1, 1, 0, 2, 153, 63, }, ++ { 0, 1, 0, 2, 157, 46, }, ++ { 2, 1, 0, 2, 157, 40, }, ++ { 1, 1, 0, 2, 157, 63, }, ++ { 0, 1, 0, 2, 161, 46, }, ++ { 2, 1, 0, 2, 161, 40, }, ++ { 1, 1, 0, 2, 161, 63, }, ++ { 0, 1, 0, 2, 165, 46, }, ++ { 2, 1, 0, 2, 165, 40, }, ++ { 1, 1, 0, 2, 165, 63, }, ++ { 0, 1, 0, 3, 36, 46, }, ++ { 2, 1, 0, 3, 36, 40, }, ++ { 1, 1, 0, 3, 36, 40, }, ++ { 0, 1, 0, 3, 40, 46, }, ++ { 2, 1, 0, 3, 40, 40, }, ++ { 1, 1, 0, 3, 40, 40, }, ++ { 0, 1, 0, 3, 44, 46, }, ++ { 2, 1, 0, 3, 44, 40, }, ++ { 1, 1, 0, 3, 44, 40, }, ++ { 0, 1, 0, 3, 48, 46, }, ++ { 2, 1, 0, 3, 48, 40, }, ++ { 1, 1, 0, 3, 48, 40, }, ++ { 0, 1, 0, 3, 52, 46, }, ++ { 2, 1, 0, 3, 52, 40, }, ++ { 1, 1, 0, 3, 52, 40, }, ++ { 0, 1, 0, 3, 56, 46, }, ++ { 2, 1, 0, 3, 56, 40, }, ++ { 1, 1, 0, 3, 56, 40, }, ++ { 0, 1, 0, 3, 60, 46, }, ++ { 2, 1, 0, 3, 60, 40, }, ++ { 1, 1, 0, 3, 60, 40, }, ++ { 0, 1, 0, 3, 64, 46, }, ++ { 2, 1, 0, 3, 64, 40, }, ++ { 1, 1, 0, 3, 64, 40, }, ++ { 0, 1, 0, 3, 100, 46, }, ++ { 2, 1, 0, 3, 100, 40, }, ++ { 1, 1, 0, 3, 100, 40, }, ++ { 0, 1, 0, 3, 104, 46, }, ++ { 2, 1, 0, 3, 104, 40, }, ++ { 1, 1, 0, 3, 104, 40, }, ++ { 0, 1, 0, 3, 108, 46, }, ++ { 2, 1, 0, 3, 108, 40, }, ++ { 1, 1, 0, 3, 108, 40, }, ++ { 0, 1, 0, 3, 112, 46, }, ++ { 2, 1, 0, 3, 112, 40, }, ++ { 1, 1, 0, 3, 112, 40, }, ++ { 0, 1, 0, 3, 116, 46, }, ++ { 2, 1, 0, 3, 116, 40, }, ++ { 1, 1, 0, 3, 116, 40, }, ++ { 0, 1, 0, 3, 120, 46, }, ++ { 2, 1, 0, 3, 120, 40, }, ++ { 1, 1, 0, 3, 120, 40, }, ++ { 0, 1, 0, 3, 124, 46, }, ++ { 2, 1, 0, 3, 124, 40, }, ++ { 1, 1, 0, 3, 124, 40, }, ++ { 0, 1, 0, 3, 128, 46, }, ++ { 2, 1, 0, 3, 128, 40, }, ++ { 1, 1, 0, 3, 128, 40, }, ++ { 0, 1, 0, 3, 132, 46, }, ++ { 2, 1, 0, 3, 132, 40, }, ++ { 1, 1, 0, 3, 132, 40, }, ++ { 0, 1, 0, 3, 136, 46, }, ++ { 2, 1, 0, 3, 136, 40, }, ++ { 1, 1, 0, 3, 136, 40, }, ++ { 0, 1, 0, 3, 140, 46, }, ++ { 2, 1, 0, 3, 140, 40, }, ++ { 1, 1, 0, 3, 140, 40, }, ++ { 0, 1, 0, 3, 149, 46, }, ++ { 2, 1, 0, 3, 149, 40, }, ++ { 1, 1, 0, 3, 149, 63, }, ++ { 0, 1, 0, 3, 153, 46, }, ++ { 2, 1, 0, 3, 153, 40, }, ++ { 1, 1, 0, 3, 153, 63, }, ++ { 0, 1, 0, 3, 157, 46, }, ++ { 2, 1, 0, 3, 157, 40, }, ++ { 1, 1, 0, 3, 157, 63, }, ++ { 0, 1, 0, 3, 161, 46, }, ++ { 2, 1, 0, 3, 161, 40, }, ++ { 1, 1, 0, 3, 161, 63, }, ++ { 0, 1, 0, 3, 165, 46, }, ++ { 2, 1, 0, 3, 165, 40, }, ++ { 1, 1, 0, 3, 165, 63, }, ++ { 0, 1, 0, 6, 36, 46, }, ++ { 2, 1, 0, 6, 36, 40, }, ++ { 1, 1, 0, 6, 36, 40, }, ++ { 0, 1, 0, 6, 40, 46, }, ++ { 2, 1, 0, 6, 40, 40, }, ++ { 1, 1, 0, 6, 40, 40, }, ++ { 0, 1, 0, 6, 44, 46, }, ++ { 2, 1, 0, 6, 44, 40, }, ++ { 1, 1, 0, 6, 44, 40, }, ++ { 0, 1, 0, 6, 48, 46, }, ++ { 2, 1, 0, 6, 48, 40, }, ++ { 1, 1, 0, 6, 48, 40, }, ++ { 0, 1, 0, 6, 52, 46, }, ++ { 2, 1, 0, 6, 52, 40, }, ++ { 1, 1, 0, 6, 52, 40, }, ++ { 0, 1, 0, 6, 56, 46, }, ++ { 2, 1, 0, 6, 56, 40, }, ++ { 1, 1, 0, 6, 56, 40, }, ++ { 0, 1, 0, 6, 60, 46, }, ++ { 2, 1, 0, 6, 60, 40, }, ++ { 1, 1, 0, 6, 60, 40, }, ++ { 0, 1, 0, 6, 64, 46, }, ++ { 2, 1, 0, 6, 64, 40, }, ++ { 1, 1, 0, 6, 64, 40, }, ++ { 0, 1, 0, 6, 100, 46, }, ++ { 2, 1, 0, 6, 100, 40, }, ++ { 1, 1, 0, 6, 100, 40, }, ++ { 0, 1, 0, 6, 104, 46, }, ++ { 2, 1, 0, 6, 104, 40, }, ++ { 1, 1, 0, 6, 104, 40, }, ++ { 0, 1, 0, 6, 108, 46, }, ++ { 2, 1, 0, 6, 108, 40, }, ++ { 1, 1, 0, 6, 108, 40, }, ++ { 0, 1, 0, 6, 112, 46, }, ++ { 2, 1, 0, 6, 112, 40, }, ++ { 1, 1, 0, 6, 112, 40, }, ++ { 0, 1, 0, 6, 116, 46, }, ++ { 2, 1, 0, 6, 116, 40, }, ++ { 1, 1, 0, 6, 116, 40, }, ++ { 0, 1, 0, 6, 120, 46, }, ++ { 2, 1, 0, 6, 120, 40, }, ++ { 1, 1, 0, 6, 120, 40, }, ++ { 0, 1, 0, 6, 124, 46, }, ++ { 2, 1, 0, 6, 124, 40, }, ++ { 1, 1, 0, 6, 124, 40, }, ++ { 0, 1, 0, 6, 128, 46, }, ++ { 2, 1, 0, 6, 128, 40, }, ++ { 1, 1, 0, 6, 128, 40, }, ++ { 0, 1, 0, 6, 132, 46, }, ++ { 2, 1, 0, 6, 132, 40, }, ++ { 1, 1, 0, 6, 132, 40, }, ++ { 0, 1, 0, 6, 136, 46, }, ++ { 2, 1, 0, 6, 136, 40, }, ++ { 1, 1, 0, 6, 136, 40, }, ++ { 0, 1, 0, 6, 140, 46, }, ++ { 2, 1, 0, 6, 140, 40, }, ++ { 1, 1, 0, 6, 140, 40, }, ++ { 0, 1, 0, 6, 149, 46, }, ++ { 2, 1, 0, 6, 149, 40, }, ++ { 1, 1, 0, 6, 149, 63, }, ++ { 0, 1, 0, 6, 153, 46, }, ++ { 2, 1, 0, 6, 153, 40, }, ++ { 1, 1, 0, 6, 153, 63, }, ++ { 0, 1, 0, 6, 157, 46, }, ++ { 2, 1, 0, 6, 157, 40, }, ++ { 1, 1, 0, 6, 157, 63, }, ++ { 0, 1, 0, 6, 161, 46, }, ++ { 2, 1, 0, 6, 161, 40, }, ++ { 1, 1, 0, 6, 161, 63, }, ++ { 0, 1, 0, 6, 165, 46, }, ++ { 2, 1, 0, 6, 165, 40, }, ++ { 1, 1, 0, 6, 165, 63, }, ++ { 0, 1, 0, 7, 36, 46, }, ++ { 2, 1, 0, 7, 36, 40, }, ++ { 1, 1, 0, 7, 36, 40, }, ++ { 0, 1, 0, 7, 40, 46, }, ++ { 2, 1, 0, 7, 40, 40, }, ++ { 1, 1, 0, 7, 40, 40, }, ++ { 0, 1, 0, 7, 44, 46, }, ++ { 2, 1, 0, 7, 44, 40, }, ++ { 1, 1, 0, 7, 44, 40, }, ++ { 0, 1, 0, 7, 48, 46, }, ++ { 2, 1, 0, 7, 48, 40, }, ++ { 1, 1, 0, 7, 48, 40, }, ++ { 0, 1, 0, 7, 52, 46, }, ++ { 2, 1, 0, 7, 52, 40, }, ++ { 1, 1, 0, 7, 52, 40, }, ++ { 0, 1, 0, 7, 56, 46, }, ++ { 2, 1, 0, 7, 56, 40, }, ++ { 1, 1, 0, 7, 56, 40, }, ++ { 0, 1, 0, 7, 60, 46, }, ++ { 2, 1, 0, 7, 60, 40, }, ++ { 1, 1, 0, 7, 60, 40, }, ++ { 0, 1, 0, 7, 64, 46, }, ++ { 2, 1, 0, 7, 64, 40, }, ++ { 1, 1, 0, 7, 64, 40, }, ++ { 0, 1, 0, 7, 100, 46, }, ++ { 2, 1, 0, 7, 100, 40, }, ++ { 1, 1, 0, 7, 100, 40, }, ++ { 0, 1, 0, 7, 104, 46, }, ++ { 2, 1, 0, 7, 104, 40, }, ++ { 1, 1, 0, 7, 104, 40, }, ++ { 0, 1, 0, 7, 108, 46, }, ++ { 2, 1, 0, 7, 108, 40, }, ++ { 1, 1, 0, 7, 108, 40, }, ++ { 0, 1, 0, 7, 112, 46, }, ++ { 2, 1, 0, 7, 112, 40, }, ++ { 1, 1, 0, 7, 112, 40, }, ++ { 0, 1, 0, 7, 116, 46, }, ++ { 2, 1, 0, 7, 116, 40, }, ++ { 1, 1, 0, 7, 116, 40, }, ++ { 0, 1, 0, 7, 120, 46, }, ++ { 2, 1, 0, 7, 120, 40, }, ++ { 1, 1, 0, 7, 120, 40, }, ++ { 0, 1, 0, 7, 124, 46, }, ++ { 2, 1, 0, 7, 124, 40, }, ++ { 1, 1, 0, 7, 124, 40, }, ++ { 0, 1, 0, 7, 128, 46, }, ++ { 2, 1, 0, 7, 128, 40, }, ++ { 1, 1, 0, 7, 128, 40, }, ++ { 0, 1, 0, 7, 132, 46, }, ++ { 2, 1, 0, 7, 132, 40, }, ++ { 1, 1, 0, 7, 132, 40, }, ++ { 0, 1, 0, 7, 136, 46, }, ++ { 2, 1, 0, 7, 136, 40, }, ++ { 1, 1, 0, 7, 136, 40, }, ++ { 0, 1, 0, 7, 140, 46, }, ++ { 2, 1, 0, 7, 140, 40, }, ++ { 1, 1, 0, 7, 140, 40, }, ++ { 0, 1, 0, 7, 149, 46, }, ++ { 2, 1, 0, 7, 149, 40, }, ++ { 1, 1, 0, 7, 149, 63, }, ++ { 0, 1, 0, 7, 153, 46, }, ++ { 2, 1, 0, 7, 153, 40, }, ++ { 1, 1, 0, 7, 153, 63, }, ++ { 0, 1, 0, 7, 157, 46, }, ++ { 2, 1, 0, 7, 157, 40, }, ++ { 1, 1, 0, 7, 157, 63, }, ++ { 0, 1, 0, 7, 161, 46, }, ++ { 2, 1, 0, 7, 161, 40, }, ++ { 1, 1, 0, 7, 161, 63, }, ++ { 0, 1, 0, 7, 165, 46, }, ++ { 2, 1, 0, 7, 165, 40, }, ++ { 1, 1, 0, 7, 165, 63, }, ++ { 0, 1, 1, 2, 38, 46, }, ++ { 2, 1, 1, 2, 38, 40, }, ++ { 1, 1, 1, 2, 38, 40, }, ++ { 0, 1, 1, 2, 46, 46, }, ++ { 2, 1, 1, 2, 46, 40, }, ++ { 1, 1, 1, 2, 46, 40, }, ++ { 0, 1, 1, 2, 54, 46, }, ++ { 2, 1, 1, 2, 54, 40, }, ++ { 1, 1, 1, 2, 54, 40, }, ++ { 0, 1, 1, 2, 62, 46, }, ++ { 2, 1, 1, 2, 62, 40, }, ++ { 1, 1, 1, 2, 62, 40, }, ++ { 0, 1, 1, 2, 102, 46, }, ++ { 2, 1, 1, 2, 102, 40, }, ++ { 1, 1, 1, 2, 102, 40, }, ++ { 0, 1, 1, 2, 110, 46, }, ++ { 2, 1, 1, 2, 110, 40, }, ++ { 1, 1, 1, 2, 110, 40, }, ++ { 0, 1, 1, 2, 118, 46, }, ++ { 2, 1, 1, 2, 118, 40, }, ++ { 1, 1, 1, 2, 118, 40, }, ++ { 0, 1, 1, 2, 126, 46, }, ++ { 2, 1, 1, 2, 126, 40, }, ++ { 1, 1, 1, 2, 126, 40, }, ++ { 0, 1, 1, 2, 134, 46, }, ++ { 2, 1, 1, 2, 134, 40, }, ++ { 1, 1, 1, 2, 134, 40, }, ++ { 0, 1, 1, 2, 151, 46, }, ++ { 2, 1, 1, 2, 151, 40, }, ++ { 1, 1, 1, 2, 151, 63, }, ++ { 0, 1, 1, 2, 159, 46, }, ++ { 2, 1, 1, 2, 159, 40, }, ++ { 1, 1, 1, 2, 159, 63, }, ++ { 0, 1, 1, 3, 38, 46, }, ++ { 2, 1, 1, 3, 38, 40, }, ++ { 1, 1, 1, 3, 38, 40, }, ++ { 0, 1, 1, 3, 46, 46, }, ++ { 2, 1, 1, 3, 46, 40, }, ++ { 1, 1, 1, 3, 46, 40, }, ++ { 0, 1, 1, 3, 54, 46, }, ++ { 2, 1, 1, 3, 54, 40, }, ++ { 1, 1, 1, 3, 54, 40, }, ++ { 0, 1, 1, 3, 62, 46, }, ++ { 2, 1, 1, 3, 62, 40, }, ++ { 1, 1, 1, 3, 62, 40, }, ++ { 0, 1, 1, 3, 102, 46, }, ++ { 2, 1, 1, 3, 102, 40, }, ++ { 1, 1, 1, 3, 102, 40, }, ++ { 0, 1, 1, 3, 110, 46, }, ++ { 2, 1, 1, 3, 110, 40, }, ++ { 1, 1, 1, 3, 110, 40, }, ++ { 0, 1, 1, 3, 118, 46, }, ++ { 2, 1, 1, 3, 118, 40, }, ++ { 1, 1, 1, 3, 118, 40, }, ++ { 0, 1, 1, 3, 126, 46, }, ++ { 2, 1, 1, 3, 126, 40, }, ++ { 1, 1, 1, 3, 126, 40, }, ++ { 0, 1, 1, 3, 134, 46, }, ++ { 2, 1, 1, 3, 134, 40, }, ++ { 1, 1, 1, 3, 134, 40, }, ++ { 0, 1, 1, 3, 151, 46, }, ++ { 2, 1, 1, 3, 151, 40, }, ++ { 1, 1, 1, 3, 151, 63, }, ++ { 0, 1, 1, 3, 159, 46, }, ++ { 2, 1, 1, 3, 159, 40, }, ++ { 1, 1, 1, 3, 159, 63, }, ++ { 0, 1, 1, 6, 38, 46, }, ++ { 2, 1, 1, 6, 38, 40, }, ++ { 1, 1, 1, 6, 38, 40, }, ++ { 0, 1, 1, 6, 46, 46, }, ++ { 2, 1, 1, 6, 46, 40, }, ++ { 1, 1, 1, 6, 46, 40, }, ++ { 0, 1, 1, 6, 54, 46, }, ++ { 2, 1, 1, 6, 54, 40, }, ++ { 1, 1, 1, 6, 54, 40, }, ++ { 0, 1, 1, 6, 62, 46, }, ++ { 2, 1, 1, 6, 62, 40, }, ++ { 1, 1, 1, 6, 62, 40, }, ++ { 0, 1, 1, 6, 102, 46, }, ++ { 2, 1, 1, 6, 102, 40, }, ++ { 1, 1, 1, 6, 102, 40, }, ++ { 0, 1, 1, 6, 110, 46, }, ++ { 2, 1, 1, 6, 110, 40, }, ++ { 1, 1, 1, 6, 110, 40, }, ++ { 0, 1, 1, 6, 118, 46, }, ++ { 2, 1, 1, 6, 118, 40, }, ++ { 1, 1, 1, 6, 118, 40, }, ++ { 0, 1, 1, 6, 126, 46, }, ++ { 2, 1, 1, 6, 126, 40, }, ++ { 1, 1, 1, 6, 126, 40, }, ++ { 0, 1, 1, 6, 134, 46, }, ++ { 2, 1, 1, 6, 134, 40, }, ++ { 1, 1, 1, 6, 134, 40, }, ++ { 0, 1, 1, 6, 151, 46, }, ++ { 2, 1, 1, 6, 151, 40, }, ++ { 1, 1, 1, 6, 151, 63, }, ++ { 0, 1, 1, 6, 159, 46, }, ++ { 2, 1, 1, 6, 159, 40, }, ++ { 1, 1, 1, 6, 159, 63, }, ++ { 0, 1, 1, 7, 38, 46, }, ++ { 2, 1, 1, 7, 38, 40, }, ++ { 1, 1, 1, 7, 38, 40, }, ++ { 0, 1, 1, 7, 46, 46, }, ++ { 2, 1, 1, 7, 46, 40, }, ++ { 1, 1, 1, 7, 46, 40, }, ++ { 0, 1, 1, 7, 54, 46, }, ++ { 2, 1, 1, 7, 54, 40, }, ++ { 1, 1, 1, 7, 54, 40, }, ++ { 0, 1, 1, 7, 62, 46, }, ++ { 2, 1, 1, 7, 62, 40, }, ++ { 1, 1, 1, 7, 62, 40, }, ++ { 0, 1, 1, 7, 102, 46, }, ++ { 2, 1, 1, 7, 102, 40, }, ++ { 1, 1, 1, 7, 102, 40, }, ++ { 0, 1, 1, 7, 110, 46, }, ++ { 2, 1, 1, 7, 110, 40, }, ++ { 1, 1, 1, 7, 110, 40, }, ++ { 0, 1, 1, 7, 118, 46, }, ++ { 2, 1, 1, 7, 118, 40, }, ++ { 1, 1, 1, 7, 118, 40, }, ++ { 0, 1, 1, 7, 126, 46, }, ++ { 2, 1, 1, 7, 126, 40, }, ++ { 1, 1, 1, 7, 126, 40, }, ++ { 0, 1, 1, 7, 134, 46, }, ++ { 2, 1, 1, 7, 134, 40, }, ++ { 1, 1, 1, 7, 134, 40, }, ++ { 0, 1, 1, 7, 151, 46, }, ++ { 2, 1, 1, 7, 151, 40, }, ++ { 1, 1, 1, 7, 151, 63, }, ++ { 0, 1, 1, 7, 159, 46, }, ++ { 2, 1, 1, 7, 159, 40, }, ++ { 1, 1, 1, 7, 159, 63, }, ++ { 0, 1, 2, 4, 42, 46, }, ++ { 2, 1, 2, 4, 42, 40, }, ++ { 1, 1, 2, 4, 42, 40, }, ++ { 0, 1, 2, 4, 58, 46, }, ++ { 2, 1, 2, 4, 58, 40, }, ++ { 1, 1, 2, 4, 58, 40, }, ++ { 0, 1, 2, 4, 106, 46, }, ++ { 2, 1, 2, 4, 106, 40, }, ++ { 1, 1, 2, 4, 106, 40, }, ++ { 0, 1, 2, 4, 122, 46, }, ++ { 2, 1, 2, 4, 122, 40, }, ++ { 1, 1, 2, 4, 122, 40, }, ++ { 0, 1, 2, 4, 155, 46, }, ++ { 2, 1, 2, 4, 155, 40, }, ++ { 1, 1, 2, 4, 155, 63, }, ++ { 0, 1, 2, 5, 42, 46, }, ++ { 2, 1, 2, 5, 42, 40, }, ++ { 1, 1, 2, 5, 42, 40, }, ++ { 0, 1, 2, 5, 58, 46, }, ++ { 2, 1, 2, 5, 58, 40, }, ++ { 1, 1, 2, 5, 58, 40, }, ++ { 0, 1, 2, 5, 106, 46, }, ++ { 2, 1, 2, 5, 106, 40, }, ++ { 1, 1, 2, 5, 106, 40, }, ++ { 0, 1, 2, 5, 122, 46, }, ++ { 2, 1, 2, 5, 122, 40, }, ++ { 1, 1, 2, 5, 122, 40, }, ++ { 0, 1, 2, 5, 155, 46, }, ++ { 2, 1, 2, 5, 155, 40, }, ++ { 1, 1, 2, 5, 155, 63, }, ++ { 0, 1, 2, 8, 42, 46, }, ++ { 2, 1, 2, 8, 42, 40, }, ++ { 1, 1, 2, 8, 42, 40, }, ++ { 0, 1, 2, 8, 58, 46, }, ++ { 2, 1, 2, 8, 58, 40, }, ++ { 1, 1, 2, 8, 58, 40, }, ++ { 0, 1, 2, 8, 106, 46, }, ++ { 2, 1, 2, 8, 106, 40, }, ++ { 1, 1, 2, 8, 106, 40, }, ++ { 0, 1, 2, 8, 122, 46, }, ++ { 2, 1, 2, 8, 122, 40, }, ++ { 1, 1, 2, 8, 122, 40, }, ++ { 0, 1, 2, 8, 155, 46, }, ++ { 2, 1, 2, 8, 155, 40, }, ++ { 1, 1, 2, 8, 155, 63, }, ++ { 0, 1, 2, 9, 42, 46, }, ++ { 2, 1, 2, 9, 42, 40, }, ++ { 1, 1, 2, 9, 42, 40, }, ++ { 0, 1, 2, 9, 58, 46, }, ++ { 2, 1, 2, 9, 58, 40, }, ++ { 1, 1, 2, 9, 58, 40, }, ++ { 0, 1, 2, 9, 106, 46, }, ++ { 2, 1, 2, 9, 106, 40, }, ++ { 1, 1, 2, 9, 106, 40, }, ++ { 0, 1, 2, 9, 122, 46, }, ++ { 2, 1, 2, 9, 122, 40, }, ++ { 1, 1, 2, 9, 122, 40, }, ++ { 0, 1, 2, 9, 155, 46, }, ++ { 2, 1, 2, 9, 155, 40, }, ++ { 1, 1, 2, 9, 155, 63, }, ++}; ++ ++RTW_DECL_TABLE_TXPWR_LMT(rtw8814a_txpwr_lmt_type5); ++ ++static const struct rtw_txpwr_lmt_cfg_pair rtw8814a_txpwr_lmt_type7[] = { ++ { 0, 0, 0, 0, 1, 44, }, ++ { 2, 0, 0, 0, 1, 32, }, ++ { 1, 0, 0, 0, 1, 32, }, ++ { 0, 0, 0, 0, 2, 52, }, ++ { 2, 0, 0, 0, 2, 32, }, ++ { 1, 0, 0, 0, 2, 32, }, ++ { 0, 0, 0, 0, 3, 52, }, ++ { 2, 0, 0, 0, 3, 32, }, ++ { 1, 0, 0, 0, 3, 32, }, ++ { 0, 0, 0, 0, 4, 52, }, ++ { 2, 0, 0, 0, 4, 32, }, ++ { 1, 0, 0, 0, 4, 32, }, ++ { 0, 0, 0, 0, 5, 52, }, ++ { 2, 0, 0, 0, 5, 32, }, ++ { 1, 0, 0, 0, 5, 32, }, ++ { 0, 0, 0, 0, 6, 52, }, ++ { 2, 0, 0, 0, 6, 32, }, ++ { 1, 0, 0, 0, 6, 32, }, ++ { 0, 0, 0, 0, 7, 52, }, ++ { 2, 0, 0, 0, 7, 32, }, ++ { 1, 0, 0, 0, 7, 32, }, ++ { 0, 0, 0, 0, 8, 52, }, ++ { 2, 0, 0, 0, 8, 32, }, ++ { 1, 0, 0, 0, 8, 32, }, ++ { 0, 0, 0, 0, 9, 52, }, ++ { 2, 0, 0, 0, 9, 32, }, ++ { 1, 0, 0, 0, 9, 32, }, ++ { 0, 0, 0, 0, 10, 52, }, ++ { 2, 0, 0, 0, 10, 32, }, ++ { 1, 0, 0, 0, 10, 32, }, ++ { 0, 0, 0, 0, 11, 44, }, ++ { 2, 0, 0, 0, 11, 32, }, ++ { 1, 0, 0, 0, 11, 32, }, ++ { 0, 0, 0, 0, 12, 63, }, ++ { 2, 0, 0, 0, 12, 32, }, ++ { 1, 0, 0, 0, 12, 32, }, ++ { 0, 0, 0, 0, 13, 63, }, ++ { 2, 0, 0, 0, 13, 32, }, ++ { 1, 0, 0, 0, 13, 32, }, ++ { 0, 0, 0, 0, 14, 63, }, ++ { 2, 0, 0, 0, 14, 63, }, ++ { 1, 0, 0, 0, 14, 32, }, ++ { 0, 0, 0, 1, 1, 38, }, ++ { 2, 0, 0, 1, 1, 32, }, ++ { 1, 0, 0, 1, 1, 32, }, ++ { 0, 0, 0, 1, 2, 46, }, ++ { 2, 0, 0, 1, 2, 32, }, ++ { 1, 0, 0, 1, 2, 32, }, ++ { 0, 0, 0, 1, 3, 46, }, ++ { 2, 0, 0, 1, 3, 32, }, ++ { 1, 0, 0, 1, 3, 32, }, ++ { 0, 0, 0, 1, 4, 46, }, ++ { 2, 0, 0, 1, 4, 32, }, ++ { 1, 0, 0, 1, 4, 32, }, ++ { 0, 0, 0, 1, 5, 46, }, ++ { 2, 0, 0, 1, 5, 32, }, ++ { 1, 0, 0, 1, 5, 32, }, ++ { 0, 0, 0, 1, 6, 46, }, ++ { 2, 0, 0, 1, 6, 32, }, ++ { 1, 0, 0, 1, 6, 32, }, ++ { 0, 0, 0, 1, 7, 46, }, ++ { 2, 0, 0, 1, 7, 32, }, ++ { 1, 0, 0, 1, 7, 32, }, ++ { 0, 0, 0, 1, 8, 46, }, ++ { 2, 0, 0, 1, 8, 32, }, ++ { 1, 0, 0, 1, 8, 32, }, ++ { 0, 0, 0, 1, 9, 46, }, ++ { 2, 0, 0, 1, 9, 32, }, ++ { 1, 0, 0, 1, 9, 32, }, ++ { 0, 0, 0, 1, 10, 46, }, ++ { 2, 0, 0, 1, 10, 32, }, ++ { 1, 0, 0, 1, 10, 32, }, ++ { 0, 0, 0, 1, 11, 38, }, ++ { 2, 0, 0, 1, 11, 32, }, ++ { 1, 0, 0, 1, 11, 32, }, ++ { 0, 0, 0, 1, 12, 63, }, ++ { 2, 0, 0, 1, 12, 32, }, ++ { 1, 0, 0, 1, 12, 32, }, ++ { 0, 0, 0, 1, 13, 63, }, ++ { 2, 0, 0, 1, 13, 32, }, ++ { 1, 0, 0, 1, 13, 32, }, ++ { 0, 0, 0, 1, 14, 63, }, ++ { 2, 0, 0, 1, 14, 63, }, ++ { 1, 0, 0, 1, 14, 63, }, ++ { 0, 0, 0, 2, 1, 34, }, ++ { 2, 0, 0, 2, 1, 32, }, ++ { 1, 0, 0, 2, 1, 32, }, ++ { 0, 0, 0, 2, 2, 46, }, ++ { 2, 0, 0, 2, 2, 32, }, ++ { 1, 0, 0, 2, 2, 32, }, ++ { 0, 0, 0, 2, 3, 46, }, ++ { 2, 0, 0, 2, 3, 32, }, ++ { 1, 0, 0, 2, 3, 32, }, ++ { 0, 0, 0, 2, 4, 46, }, ++ { 2, 0, 0, 2, 4, 32, }, ++ { 1, 0, 0, 2, 4, 32, }, ++ { 0, 0, 0, 2, 5, 46, }, ++ { 2, 0, 0, 2, 5, 32, }, ++ { 1, 0, 0, 2, 5, 32, }, ++ { 0, 0, 0, 2, 6, 46, }, ++ { 2, 0, 0, 2, 6, 32, }, ++ { 1, 0, 0, 2, 6, 32, }, ++ { 0, 0, 0, 2, 7, 46, }, ++ { 2, 0, 0, 2, 7, 32, }, ++ { 1, 0, 0, 2, 7, 32, }, ++ { 0, 0, 0, 2, 8, 46, }, ++ { 2, 0, 0, 2, 8, 32, }, ++ { 1, 0, 0, 2, 8, 32, }, ++ { 0, 0, 0, 2, 9, 46, }, ++ { 2, 0, 0, 2, 9, 32, }, ++ { 1, 0, 0, 2, 9, 32, }, ++ { 0, 0, 0, 2, 10, 46, }, ++ { 2, 0, 0, 2, 10, 32, }, ++ { 1, 0, 0, 2, 10, 32, }, ++ { 0, 0, 0, 2, 11, 34, }, ++ { 2, 0, 0, 2, 11, 32, }, ++ { 1, 0, 0, 2, 11, 32, }, ++ { 0, 0, 0, 2, 12, 63, }, ++ { 2, 0, 0, 2, 12, 32, }, ++ { 1, 0, 0, 2, 12, 32, }, ++ { 0, 0, 0, 2, 13, 63, }, ++ { 2, 0, 0, 2, 13, 32, }, ++ { 1, 0, 0, 2, 13, 32, }, ++ { 0, 0, 0, 2, 14, 63, }, ++ { 2, 0, 0, 2, 14, 63, }, ++ { 1, 0, 0, 2, 14, 63, }, ++ { 0, 0, 0, 3, 1, 32, }, ++ { 2, 0, 0, 3, 1, 30, }, ++ { 1, 0, 0, 3, 1, 30, }, ++ { 0, 0, 0, 3, 2, 44, }, ++ { 2, 0, 0, 3, 2, 30, }, ++ { 1, 0, 0, 3, 2, 30, }, ++ { 0, 0, 0, 3, 3, 44, }, ++ { 2, 0, 0, 3, 3, 30, }, ++ { 1, 0, 0, 3, 3, 30, }, ++ { 0, 0, 0, 3, 4, 44, }, ++ { 2, 0, 0, 3, 4, 30, }, ++ { 1, 0, 0, 3, 4, 30, }, ++ { 0, 0, 0, 3, 5, 44, }, ++ { 2, 0, 0, 3, 5, 30, }, ++ { 1, 0, 0, 3, 5, 30, }, ++ { 0, 0, 0, 3, 6, 44, }, ++ { 2, 0, 0, 3, 6, 30, }, ++ { 1, 0, 0, 3, 6, 30, }, ++ { 0, 0, 0, 3, 7, 44, }, ++ { 2, 0, 0, 3, 7, 30, }, ++ { 1, 0, 0, 3, 7, 30, }, ++ { 0, 0, 0, 3, 8, 44, }, ++ { 2, 0, 0, 3, 8, 30, }, ++ { 1, 0, 0, 3, 8, 30, }, ++ { 0, 0, 0, 3, 9, 44, }, ++ { 2, 0, 0, 3, 9, 30, }, ++ { 1, 0, 0, 3, 9, 30, }, ++ { 0, 0, 0, 3, 10, 44, }, ++ { 2, 0, 0, 3, 10, 30, }, ++ { 1, 0, 0, 3, 10, 30, }, ++ { 0, 0, 0, 3, 11, 32, }, ++ { 2, 0, 0, 3, 11, 30, }, ++ { 1, 0, 0, 3, 11, 30, }, ++ { 0, 0, 0, 3, 12, 63, }, ++ { 2, 0, 0, 3, 12, 30, }, ++ { 1, 0, 0, 3, 12, 30, }, ++ { 0, 0, 0, 3, 13, 63, }, ++ { 2, 0, 0, 3, 13, 30, }, ++ { 1, 0, 0, 3, 13, 30, }, ++ { 0, 0, 0, 3, 14, 63, }, ++ { 2, 0, 0, 3, 14, 63, }, ++ { 1, 0, 0, 3, 14, 63, }, ++ { 0, 0, 0, 6, 1, 30, }, ++ { 2, 0, 0, 6, 1, 28, }, ++ { 1, 0, 0, 6, 1, 28, }, ++ { 0, 0, 0, 6, 2, 42, }, ++ { 2, 0, 0, 6, 2, 28, }, ++ { 1, 0, 0, 6, 2, 28, }, ++ { 0, 0, 0, 6, 3, 42, }, ++ { 2, 0, 0, 6, 3, 28, }, ++ { 1, 0, 0, 6, 3, 28, }, ++ { 0, 0, 0, 6, 4, 42, }, ++ { 2, 0, 0, 6, 4, 28, }, ++ { 1, 0, 0, 6, 4, 28, }, ++ { 0, 0, 0, 6, 5, 42, }, ++ { 2, 0, 0, 6, 5, 28, }, ++ { 1, 0, 0, 6, 5, 28, }, ++ { 0, 0, 0, 6, 6, 42, }, ++ { 2, 0, 0, 6, 6, 28, }, ++ { 1, 0, 0, 6, 6, 28, }, ++ { 0, 0, 0, 6, 7, 42, }, ++ { 2, 0, 0, 6, 7, 28, }, ++ { 1, 0, 0, 6, 7, 28, }, ++ { 0, 0, 0, 6, 8, 42, }, ++ { 2, 0, 0, 6, 8, 28, }, ++ { 1, 0, 0, 6, 8, 28, }, ++ { 0, 0, 0, 6, 9, 42, }, ++ { 2, 0, 0, 6, 9, 28, }, ++ { 1, 0, 0, 6, 9, 28, }, ++ { 0, 0, 0, 6, 10, 42, }, ++ { 2, 0, 0, 6, 10, 28, }, ++ { 1, 0, 0, 6, 10, 28, }, ++ { 0, 0, 0, 6, 11, 30, }, ++ { 2, 0, 0, 6, 11, 28, }, ++ { 1, 0, 0, 6, 11, 28, }, ++ { 0, 0, 0, 6, 12, 63, }, ++ { 2, 0, 0, 6, 12, 28, }, ++ { 1, 0, 0, 6, 12, 28, }, ++ { 0, 0, 0, 6, 13, 63, }, ++ { 2, 0, 0, 6, 13, 28, }, ++ { 1, 0, 0, 6, 13, 28, }, ++ { 0, 0, 0, 6, 14, 63, }, ++ { 2, 0, 0, 6, 14, 63, }, ++ { 1, 0, 0, 6, 14, 63, }, ++ { 0, 0, 0, 7, 1, 28, }, ++ { 2, 0, 0, 7, 1, 26, }, ++ { 1, 0, 0, 7, 1, 26, }, ++ { 0, 0, 0, 7, 2, 40, }, ++ { 2, 0, 0, 7, 2, 26, }, ++ { 1, 0, 0, 7, 2, 26, }, ++ { 0, 0, 0, 7, 3, 40, }, ++ { 2, 0, 0, 7, 3, 26, }, ++ { 1, 0, 0, 7, 3, 26, }, ++ { 0, 0, 0, 7, 4, 40, }, ++ { 2, 0, 0, 7, 4, 26, }, ++ { 1, 0, 0, 7, 4, 26, }, ++ { 0, 0, 0, 7, 5, 40, }, ++ { 2, 0, 0, 7, 5, 26, }, ++ { 1, 0, 0, 7, 5, 26, }, ++ { 0, 0, 0, 7, 6, 40, }, ++ { 2, 0, 0, 7, 6, 26, }, ++ { 1, 0, 0, 7, 6, 26, }, ++ { 0, 0, 0, 7, 7, 40, }, ++ { 2, 0, 0, 7, 7, 26, }, ++ { 1, 0, 0, 7, 7, 26, }, ++ { 0, 0, 0, 7, 8, 40, }, ++ { 2, 0, 0, 7, 8, 26, }, ++ { 1, 0, 0, 7, 8, 26, }, ++ { 0, 0, 0, 7, 9, 40, }, ++ { 2, 0, 0, 7, 9, 26, }, ++ { 1, 0, 0, 7, 9, 26, }, ++ { 0, 0, 0, 7, 10, 40, }, ++ { 2, 0, 0, 7, 10, 26, }, ++ { 1, 0, 0, 7, 10, 26, }, ++ { 0, 0, 0, 7, 11, 28, }, ++ { 2, 0, 0, 7, 11, 26, }, ++ { 1, 0, 0, 7, 11, 26, }, ++ { 0, 0, 0, 7, 12, 63, }, ++ { 2, 0, 0, 7, 12, 26, }, ++ { 1, 0, 0, 7, 12, 26, }, ++ { 0, 0, 0, 7, 13, 63, }, ++ { 2, 0, 0, 7, 13, 26, }, ++ { 1, 0, 0, 7, 13, 26, }, ++ { 0, 0, 0, 7, 14, 63, }, ++ { 2, 0, 0, 7, 14, 63, }, ++ { 1, 0, 0, 7, 14, 63, }, ++ { 0, 0, 1, 2, 1, 63, }, ++ { 2, 0, 1, 2, 1, 63, }, ++ { 1, 0, 1, 2, 1, 63, }, ++ { 0, 0, 1, 2, 2, 63, }, ++ { 2, 0, 1, 2, 2, 63, }, ++ { 1, 0, 1, 2, 2, 63, }, ++ { 0, 0, 1, 2, 3, 36, }, ++ { 2, 0, 1, 2, 3, 32, }, ++ { 1, 0, 1, 2, 3, 32, }, ++ { 0, 0, 1, 2, 4, 40, }, ++ { 2, 0, 1, 2, 4, 32, }, ++ { 1, 0, 1, 2, 4, 32, }, ++ { 0, 0, 1, 2, 5, 40, }, ++ { 2, 0, 1, 2, 5, 32, }, ++ { 1, 0, 1, 2, 5, 32, }, ++ { 0, 0, 1, 2, 6, 40, }, ++ { 2, 0, 1, 2, 6, 32, }, ++ { 1, 0, 1, 2, 6, 32, }, ++ { 0, 0, 1, 2, 7, 40, }, ++ { 2, 0, 1, 2, 7, 32, }, ++ { 1, 0, 1, 2, 7, 32, }, ++ { 0, 0, 1, 2, 8, 40, }, ++ { 2, 0, 1, 2, 8, 32, }, ++ { 1, 0, 1, 2, 8, 32, }, ++ { 0, 0, 1, 2, 9, 40, }, ++ { 2, 0, 1, 2, 9, 32, }, ++ { 1, 0, 1, 2, 9, 32, }, ++ { 0, 0, 1, 2, 10, 40, }, ++ { 2, 0, 1, 2, 10, 32, }, ++ { 1, 0, 1, 2, 10, 32, }, ++ { 0, 0, 1, 2, 11, 34, }, ++ { 2, 0, 1, 2, 11, 32, }, ++ { 1, 0, 1, 2, 11, 32, }, ++ { 0, 0, 1, 2, 12, 63, }, ++ { 2, 0, 1, 2, 12, 32, }, ++ { 1, 0, 1, 2, 12, 32, }, ++ { 0, 0, 1, 2, 13, 63, }, ++ { 2, 0, 1, 2, 13, 32, }, ++ { 1, 0, 1, 2, 13, 32, }, ++ { 0, 0, 1, 2, 14, 63, }, ++ { 2, 0, 1, 2, 14, 63, }, ++ { 1, 0, 1, 2, 14, 63, }, ++ { 0, 0, 1, 3, 1, 63, }, ++ { 2, 0, 1, 3, 1, 63, }, ++ { 1, 0, 1, 3, 1, 63, }, ++ { 0, 0, 1, 3, 2, 63, }, ++ { 2, 0, 1, 3, 2, 63, }, ++ { 1, 0, 1, 3, 2, 63, }, ++ { 0, 0, 1, 3, 3, 34, }, ++ { 2, 0, 1, 3, 3, 30, }, ++ { 1, 0, 1, 3, 3, 30, }, ++ { 0, 0, 1, 3, 4, 38, }, ++ { 2, 0, 1, 3, 4, 30, }, ++ { 1, 0, 1, 3, 4, 30, }, ++ { 0, 0, 1, 3, 5, 38, }, ++ { 2, 0, 1, 3, 5, 30, }, ++ { 1, 0, 1, 3, 5, 30, }, ++ { 0, 0, 1, 3, 6, 38, }, ++ { 2, 0, 1, 3, 6, 30, }, ++ { 1, 0, 1, 3, 6, 30, }, ++ { 0, 0, 1, 3, 7, 38, }, ++ { 2, 0, 1, 3, 7, 30, }, ++ { 1, 0, 1, 3, 7, 30, }, ++ { 0, 0, 1, 3, 8, 38, }, ++ { 2, 0, 1, 3, 8, 30, }, ++ { 1, 0, 1, 3, 8, 30, }, ++ { 0, 0, 1, 3, 9, 38, }, ++ { 2, 0, 1, 3, 9, 30, }, ++ { 1, 0, 1, 3, 9, 30, }, ++ { 0, 0, 1, 3, 10, 38, }, ++ { 2, 0, 1, 3, 10, 30, }, ++ { 1, 0, 1, 3, 10, 30, }, ++ { 0, 0, 1, 3, 11, 32, }, ++ { 2, 0, 1, 3, 11, 30, }, ++ { 1, 0, 1, 3, 11, 30, }, ++ { 0, 0, 1, 3, 12, 63, }, ++ { 2, 0, 1, 3, 12, 30, }, ++ { 1, 0, 1, 3, 12, 30, }, ++ { 0, 0, 1, 3, 13, 63, }, ++ { 2, 0, 1, 3, 13, 30, }, ++ { 1, 0, 1, 3, 13, 30, }, ++ { 0, 0, 1, 3, 14, 63, }, ++ { 2, 0, 1, 3, 14, 63, }, ++ { 1, 0, 1, 3, 14, 63, }, ++ { 0, 0, 1, 6, 1, 63, }, ++ { 2, 0, 1, 6, 1, 63, }, ++ { 1, 0, 1, 6, 1, 63, }, ++ { 0, 0, 1, 6, 2, 63, }, ++ { 2, 0, 1, 6, 2, 63, }, ++ { 1, 0, 1, 6, 2, 63, }, ++ { 0, 0, 1, 6, 3, 32, }, ++ { 2, 0, 1, 6, 3, 28, }, ++ { 1, 0, 1, 6, 3, 28, }, ++ { 0, 0, 1, 6, 4, 36, }, ++ { 2, 0, 1, 6, 4, 28, }, ++ { 1, 0, 1, 6, 4, 28, }, ++ { 0, 0, 1, 6, 5, 36, }, ++ { 2, 0, 1, 6, 5, 28, }, ++ { 1, 0, 1, 6, 5, 28, }, ++ { 0, 0, 1, 6, 6, 36, }, ++ { 2, 0, 1, 6, 6, 28, }, ++ { 1, 0, 1, 6, 6, 28, }, ++ { 0, 0, 1, 6, 7, 36, }, ++ { 2, 0, 1, 6, 7, 28, }, ++ { 1, 0, 1, 6, 7, 28, }, ++ { 0, 0, 1, 6, 8, 36, }, ++ { 2, 0, 1, 6, 8, 28, }, ++ { 1, 0, 1, 6, 8, 28, }, ++ { 0, 0, 1, 6, 9, 36, }, ++ { 2, 0, 1, 6, 9, 28, }, ++ { 1, 0, 1, 6, 9, 28, }, ++ { 0, 0, 1, 6, 10, 36, }, ++ { 2, 0, 1, 6, 10, 28, }, ++ { 1, 0, 1, 6, 10, 28, }, ++ { 0, 0, 1, 6, 11, 30, }, ++ { 2, 0, 1, 6, 11, 28, }, ++ { 1, 0, 1, 6, 11, 28, }, ++ { 0, 0, 1, 6, 12, 63, }, ++ { 2, 0, 1, 6, 12, 28, }, ++ { 1, 0, 1, 6, 12, 28, }, ++ { 0, 0, 1, 6, 13, 63, }, ++ { 2, 0, 1, 6, 13, 28, }, ++ { 1, 0, 1, 6, 13, 28, }, ++ { 0, 0, 1, 6, 14, 63, }, ++ { 2, 0, 1, 6, 14, 63, }, ++ { 1, 0, 1, 6, 14, 63, }, ++ { 0, 0, 1, 7, 1, 63, }, ++ { 2, 0, 1, 7, 1, 63, }, ++ { 1, 0, 1, 7, 1, 63, }, ++ { 0, 0, 1, 7, 2, 63, }, ++ { 2, 0, 1, 7, 2, 63, }, ++ { 1, 0, 1, 7, 2, 63, }, ++ { 0, 0, 1, 7, 3, 32, }, ++ { 2, 0, 1, 7, 3, 26, }, ++ { 1, 0, 1, 7, 3, 26, }, ++ { 0, 0, 1, 7, 4, 36, }, ++ { 2, 0, 1, 7, 4, 26, }, ++ { 1, 0, 1, 7, 4, 26, }, ++ { 0, 0, 1, 7, 5, 36, }, ++ { 2, 0, 1, 7, 5, 26, }, ++ { 1, 0, 1, 7, 5, 26, }, ++ { 0, 0, 1, 7, 6, 36, }, ++ { 2, 0, 1, 7, 6, 26, }, ++ { 1, 0, 1, 7, 6, 26, }, ++ { 0, 0, 1, 7, 7, 36, }, ++ { 2, 0, 1, 7, 7, 26, }, ++ { 1, 0, 1, 7, 7, 26, }, ++ { 0, 0, 1, 7, 8, 36, }, ++ { 2, 0, 1, 7, 8, 26, }, ++ { 1, 0, 1, 7, 8, 26, }, ++ { 0, 0, 1, 7, 9, 36, }, ++ { 2, 0, 1, 7, 9, 26, }, ++ { 1, 0, 1, 7, 9, 26, }, ++ { 0, 0, 1, 7, 10, 36, }, ++ { 2, 0, 1, 7, 10, 26, }, ++ { 1, 0, 1, 7, 10, 26, }, ++ { 0, 0, 1, 7, 11, 30, }, ++ { 2, 0, 1, 7, 11, 26, }, ++ { 1, 0, 1, 7, 11, 26, }, ++ { 0, 0, 1, 7, 12, 63, }, ++ { 2, 0, 1, 7, 12, 26, }, ++ { 1, 0, 1, 7, 12, 26, }, ++ { 0, 0, 1, 7, 13, 63, }, ++ { 2, 0, 1, 7, 13, 26, }, ++ { 1, 0, 1, 7, 13, 26, }, ++ { 0, 0, 1, 7, 14, 63, }, ++ { 2, 0, 1, 7, 14, 63, }, ++ { 1, 0, 1, 7, 14, 63, }, ++ { 0, 1, 0, 1, 36, 38, }, ++ { 2, 1, 0, 1, 36, 32, }, ++ { 1, 1, 0, 1, 36, 32, }, ++ { 0, 1, 0, 1, 40, 38, }, ++ { 2, 1, 0, 1, 40, 32, }, ++ { 1, 1, 0, 1, 40, 32, }, ++ { 0, 1, 0, 1, 44, 38, }, ++ { 2, 1, 0, 1, 44, 32, }, ++ { 1, 1, 0, 1, 44, 32, }, ++ { 0, 1, 0, 1, 48, 38, }, ++ { 2, 1, 0, 1, 48, 32, }, ++ { 1, 1, 0, 1, 48, 32, }, ++ { 0, 1, 0, 1, 52, 38, }, ++ { 2, 1, 0, 1, 52, 32, }, ++ { 1, 1, 0, 1, 52, 32, }, ++ { 0, 1, 0, 1, 56, 38, }, ++ { 2, 1, 0, 1, 56, 32, }, ++ { 1, 1, 0, 1, 56, 32, }, ++ { 0, 1, 0, 1, 60, 38, }, ++ { 2, 1, 0, 1, 60, 32, }, ++ { 1, 1, 0, 1, 60, 32, }, ++ { 0, 1, 0, 1, 64, 38, }, ++ { 2, 1, 0, 1, 64, 32, }, ++ { 1, 1, 0, 1, 64, 32, }, ++ { 0, 1, 0, 1, 100, 36, }, ++ { 2, 1, 0, 1, 100, 32, }, ++ { 1, 1, 0, 1, 100, 32, }, ++ { 0, 1, 0, 1, 104, 36, }, ++ { 2, 1, 0, 1, 104, 32, }, ++ { 1, 1, 0, 1, 104, 32, }, ++ { 0, 1, 0, 1, 108, 36, }, ++ { 2, 1, 0, 1, 108, 32, }, ++ { 1, 1, 0, 1, 108, 32, }, ++ { 0, 1, 0, 1, 112, 36, }, ++ { 2, 1, 0, 1, 112, 32, }, ++ { 1, 1, 0, 1, 112, 32, }, ++ { 0, 1, 0, 1, 116, 36, }, ++ { 2, 1, 0, 1, 116, 32, }, ++ { 1, 1, 0, 1, 116, 32, }, ++ { 0, 1, 0, 1, 120, 36, }, ++ { 2, 1, 0, 1, 120, 32, }, ++ { 1, 1, 0, 1, 120, 32, }, ++ { 0, 1, 0, 1, 124, 36, }, ++ { 2, 1, 0, 1, 124, 32, }, ++ { 1, 1, 0, 1, 124, 32, }, ++ { 0, 1, 0, 1, 128, 36, }, ++ { 2, 1, 0, 1, 128, 32, }, ++ { 1, 1, 0, 1, 128, 32, }, ++ { 0, 1, 0, 1, 132, 36, }, ++ { 2, 1, 0, 1, 132, 32, }, ++ { 1, 1, 0, 1, 132, 32, }, ++ { 0, 1, 0, 1, 136, 36, }, ++ { 2, 1, 0, 1, 136, 32, }, ++ { 1, 1, 0, 1, 136, 32, }, ++ { 0, 1, 0, 1, 140, 36, }, ++ { 2, 1, 0, 1, 140, 32, }, ++ { 1, 1, 0, 1, 140, 32, }, ++ { 0, 1, 0, 1, 149, 36, }, ++ { 2, 1, 0, 1, 149, 32, }, ++ { 1, 1, 0, 1, 149, 63, }, ++ { 0, 1, 0, 1, 153, 36, }, ++ { 2, 1, 0, 1, 153, 32, }, ++ { 1, 1, 0, 1, 153, 63, }, ++ { 0, 1, 0, 1, 157, 36, }, ++ { 2, 1, 0, 1, 157, 32, }, ++ { 1, 1, 0, 1, 157, 63, }, ++ { 0, 1, 0, 1, 161, 36, }, ++ { 2, 1, 0, 1, 161, 32, }, ++ { 1, 1, 0, 1, 161, 63, }, ++ { 0, 1, 0, 1, 165, 36, }, ++ { 2, 1, 0, 1, 165, 32, }, ++ { 1, 1, 0, 1, 165, 63, }, ++ { 0, 1, 0, 2, 36, 36, }, ++ { 2, 1, 0, 2, 36, 32, }, ++ { 1, 1, 0, 2, 36, 32, }, ++ { 0, 1, 0, 2, 40, 36, }, ++ { 2, 1, 0, 2, 40, 32, }, ++ { 1, 1, 0, 2, 40, 32, }, ++ { 0, 1, 0, 2, 44, 36, }, ++ { 2, 1, 0, 2, 44, 32, }, ++ { 1, 1, 0, 2, 44, 32, }, ++ { 0, 1, 0, 2, 48, 36, }, ++ { 2, 1, 0, 2, 48, 32, }, ++ { 1, 1, 0, 2, 48, 32, }, ++ { 0, 1, 0, 2, 52, 36, }, ++ { 2, 1, 0, 2, 52, 32, }, ++ { 1, 1, 0, 2, 52, 32, }, ++ { 0, 1, 0, 2, 56, 36, }, ++ { 2, 1, 0, 2, 56, 32, }, ++ { 1, 1, 0, 2, 56, 32, }, ++ { 0, 1, 0, 2, 60, 36, }, ++ { 2, 1, 0, 2, 60, 32, }, ++ { 1, 1, 0, 2, 60, 32, }, ++ { 0, 1, 0, 2, 64, 36, }, ++ { 2, 1, 0, 2, 64, 32, }, ++ { 1, 1, 0, 2, 64, 32, }, ++ { 0, 1, 0, 2, 100, 36, }, ++ { 2, 1, 0, 2, 100, 32, }, ++ { 1, 1, 0, 2, 100, 32, }, ++ { 0, 1, 0, 2, 104, 36, }, ++ { 2, 1, 0, 2, 104, 32, }, ++ { 1, 1, 0, 2, 104, 32, }, ++ { 0, 1, 0, 2, 108, 36, }, ++ { 2, 1, 0, 2, 108, 32, }, ++ { 1, 1, 0, 2, 108, 32, }, ++ { 0, 1, 0, 2, 112, 36, }, ++ { 2, 1, 0, 2, 112, 32, }, ++ { 1, 1, 0, 2, 112, 32, }, ++ { 0, 1, 0, 2, 116, 36, }, ++ { 2, 1, 0, 2, 116, 32, }, ++ { 1, 1, 0, 2, 116, 32, }, ++ { 0, 1, 0, 2, 120, 36, }, ++ { 2, 1, 0, 2, 120, 32, }, ++ { 1, 1, 0, 2, 120, 32, }, ++ { 0, 1, 0, 2, 124, 36, }, ++ { 2, 1, 0, 2, 124, 32, }, ++ { 1, 1, 0, 2, 124, 32, }, ++ { 0, 1, 0, 2, 128, 36, }, ++ { 2, 1, 0, 2, 128, 32, }, ++ { 1, 1, 0, 2, 128, 32, }, ++ { 0, 1, 0, 2, 132, 36, }, ++ { 2, 1, 0, 2, 132, 32, }, ++ { 1, 1, 0, 2, 132, 32, }, ++ { 0, 1, 0, 2, 136, 36, }, ++ { 2, 1, 0, 2, 136, 32, }, ++ { 1, 1, 0, 2, 136, 32, }, ++ { 0, 1, 0, 2, 140, 34, }, ++ { 2, 1, 0, 2, 140, 32, }, ++ { 1, 1, 0, 2, 140, 32, }, ++ { 0, 1, 0, 2, 149, 32, }, ++ { 2, 1, 0, 2, 149, 32, }, ++ { 1, 1, 0, 2, 149, 63, }, ++ { 0, 1, 0, 2, 153, 38, }, ++ { 2, 1, 0, 2, 153, 32, }, ++ { 1, 1, 0, 2, 153, 63, }, ++ { 0, 1, 0, 2, 157, 38, }, ++ { 2, 1, 0, 2, 157, 32, }, ++ { 1, 1, 0, 2, 157, 63, }, ++ { 0, 1, 0, 2, 161, 38, }, ++ { 2, 1, 0, 2, 161, 32, }, ++ { 1, 1, 0, 2, 161, 63, }, ++ { 0, 1, 0, 2, 165, 38, }, ++ { 2, 1, 0, 2, 165, 32, }, ++ { 1, 1, 0, 2, 165, 63, }, ++ { 0, 1, 0, 3, 36, 34, }, ++ { 2, 1, 0, 3, 36, 30, }, ++ { 1, 1, 0, 3, 36, 30, }, ++ { 0, 1, 0, 3, 40, 34, }, ++ { 2, 1, 0, 3, 40, 30, }, ++ { 1, 1, 0, 3, 40, 30, }, ++ { 0, 1, 0, 3, 44, 34, }, ++ { 2, 1, 0, 3, 44, 30, }, ++ { 1, 1, 0, 3, 44, 30, }, ++ { 0, 1, 0, 3, 48, 34, }, ++ { 2, 1, 0, 3, 48, 30, }, ++ { 1, 1, 0, 3, 48, 30, }, ++ { 0, 1, 0, 3, 52, 34, }, ++ { 2, 1, 0, 3, 52, 30, }, ++ { 1, 1, 0, 3, 52, 30, }, ++ { 0, 1, 0, 3, 56, 34, }, ++ { 2, 1, 0, 3, 56, 30, }, ++ { 1, 1, 0, 3, 56, 30, }, ++ { 0, 1, 0, 3, 60, 34, }, ++ { 2, 1, 0, 3, 60, 30, }, ++ { 1, 1, 0, 3, 60, 30, }, ++ { 0, 1, 0, 3, 64, 34, }, ++ { 2, 1, 0, 3, 64, 30, }, ++ { 1, 1, 0, 3, 64, 30, }, ++ { 0, 1, 0, 3, 100, 34, }, ++ { 2, 1, 0, 3, 100, 30, }, ++ { 1, 1, 0, 3, 100, 30, }, ++ { 0, 1, 0, 3, 104, 34, }, ++ { 2, 1, 0, 3, 104, 30, }, ++ { 1, 1, 0, 3, 104, 30, }, ++ { 0, 1, 0, 3, 108, 34, }, ++ { 2, 1, 0, 3, 108, 30, }, ++ { 1, 1, 0, 3, 108, 30, }, ++ { 0, 1, 0, 3, 112, 34, }, ++ { 2, 1, 0, 3, 112, 30, }, ++ { 1, 1, 0, 3, 112, 30, }, ++ { 0, 1, 0, 3, 116, 34, }, ++ { 2, 1, 0, 3, 116, 30, }, ++ { 1, 1, 0, 3, 116, 30, }, ++ { 0, 1, 0, 3, 120, 34, }, ++ { 2, 1, 0, 3, 120, 30, }, ++ { 1, 1, 0, 3, 120, 30, }, ++ { 0, 1, 0, 3, 124, 34, }, ++ { 2, 1, 0, 3, 124, 30, }, ++ { 1, 1, 0, 3, 124, 30, }, ++ { 0, 1, 0, 3, 128, 34, }, ++ { 2, 1, 0, 3, 128, 30, }, ++ { 1, 1, 0, 3, 128, 30, }, ++ { 0, 1, 0, 3, 132, 34, }, ++ { 2, 1, 0, 3, 132, 30, }, ++ { 1, 1, 0, 3, 132, 30, }, ++ { 0, 1, 0, 3, 136, 34, }, ++ { 2, 1, 0, 3, 136, 30, }, ++ { 1, 1, 0, 3, 136, 30, }, ++ { 0, 1, 0, 3, 140, 32, }, ++ { 2, 1, 0, 3, 140, 30, }, ++ { 1, 1, 0, 3, 140, 30, }, ++ { 0, 1, 0, 3, 149, 30, }, ++ { 2, 1, 0, 3, 149, 30, }, ++ { 1, 1, 0, 3, 149, 63, }, ++ { 0, 1, 0, 3, 153, 36, }, ++ { 2, 1, 0, 3, 153, 30, }, ++ { 1, 1, 0, 3, 153, 63, }, ++ { 0, 1, 0, 3, 157, 36, }, ++ { 2, 1, 0, 3, 157, 30, }, ++ { 1, 1, 0, 3, 157, 63, }, ++ { 0, 1, 0, 3, 161, 36, }, ++ { 2, 1, 0, 3, 161, 30, }, ++ { 1, 1, 0, 3, 161, 63, }, ++ { 0, 1, 0, 3, 165, 36, }, ++ { 2, 1, 0, 3, 165, 30, }, ++ { 1, 1, 0, 3, 165, 63, }, ++ { 0, 1, 0, 6, 36, 32, }, ++ { 2, 1, 0, 6, 36, 28, }, ++ { 1, 1, 0, 6, 36, 28, }, ++ { 0, 1, 0, 6, 40, 32, }, ++ { 2, 1, 0, 6, 40, 28, }, ++ { 1, 1, 0, 6, 40, 28, }, ++ { 0, 1, 0, 6, 44, 32, }, ++ { 2, 1, 0, 6, 44, 28, }, ++ { 1, 1, 0, 6, 44, 28, }, ++ { 0, 1, 0, 6, 48, 32, }, ++ { 2, 1, 0, 6, 48, 28, }, ++ { 1, 1, 0, 6, 48, 28, }, ++ { 0, 1, 0, 6, 52, 32, }, ++ { 2, 1, 0, 6, 52, 28, }, ++ { 1, 1, 0, 6, 52, 28, }, ++ { 0, 1, 0, 6, 56, 32, }, ++ { 2, 1, 0, 6, 56, 28, }, ++ { 1, 1, 0, 6, 56, 28, }, ++ { 0, 1, 0, 6, 60, 32, }, ++ { 2, 1, 0, 6, 60, 28, }, ++ { 1, 1, 0, 6, 60, 28, }, ++ { 0, 1, 0, 6, 64, 32, }, ++ { 2, 1, 0, 6, 64, 28, }, ++ { 1, 1, 0, 6, 64, 28, }, ++ { 0, 1, 0, 6, 100, 32, }, ++ { 2, 1, 0, 6, 100, 28, }, ++ { 1, 1, 0, 6, 100, 28, }, ++ { 0, 1, 0, 6, 104, 32, }, ++ { 2, 1, 0, 6, 104, 28, }, ++ { 1, 1, 0, 6, 104, 28, }, ++ { 0, 1, 0, 6, 108, 32, }, ++ { 2, 1, 0, 6, 108, 28, }, ++ { 1, 1, 0, 6, 108, 28, }, ++ { 0, 1, 0, 6, 112, 32, }, ++ { 2, 1, 0, 6, 112, 28, }, ++ { 1, 1, 0, 6, 112, 28, }, ++ { 0, 1, 0, 6, 116, 32, }, ++ { 2, 1, 0, 6, 116, 28, }, ++ { 1, 1, 0, 6, 116, 28, }, ++ { 0, 1, 0, 6, 120, 32, }, ++ { 2, 1, 0, 6, 120, 28, }, ++ { 1, 1, 0, 6, 120, 28, }, ++ { 0, 1, 0, 6, 124, 32, }, ++ { 2, 1, 0, 6, 124, 28, }, ++ { 1, 1, 0, 6, 124, 28, }, ++ { 0, 1, 0, 6, 128, 32, }, ++ { 2, 1, 0, 6, 128, 28, }, ++ { 1, 1, 0, 6, 128, 28, }, ++ { 0, 1, 0, 6, 132, 32, }, ++ { 2, 1, 0, 6, 132, 28, }, ++ { 1, 1, 0, 6, 132, 28, }, ++ { 0, 1, 0, 6, 136, 32, }, ++ { 2, 1, 0, 6, 136, 28, }, ++ { 1, 1, 0, 6, 136, 28, }, ++ { 0, 1, 0, 6, 140, 30, }, ++ { 2, 1, 0, 6, 140, 28, }, ++ { 1, 1, 0, 6, 140, 28, }, ++ { 0, 1, 0, 6, 149, 28, }, ++ { 2, 1, 0, 6, 149, 28, }, ++ { 1, 1, 0, 6, 149, 63, }, ++ { 0, 1, 0, 6, 153, 34, }, ++ { 2, 1, 0, 6, 153, 28, }, ++ { 1, 1, 0, 6, 153, 63, }, ++ { 0, 1, 0, 6, 157, 34, }, ++ { 2, 1, 0, 6, 157, 28, }, ++ { 1, 1, 0, 6, 157, 63, }, ++ { 0, 1, 0, 6, 161, 34, }, ++ { 2, 1, 0, 6, 161, 28, }, ++ { 1, 1, 0, 6, 161, 63, }, ++ { 0, 1, 0, 6, 165, 34, }, ++ { 2, 1, 0, 6, 165, 28, }, ++ { 1, 1, 0, 6, 165, 63, }, ++ { 0, 1, 0, 7, 36, 30, }, ++ { 2, 1, 0, 7, 36, 26, }, ++ { 1, 1, 0, 7, 36, 26, }, ++ { 0, 1, 0, 7, 40, 30, }, ++ { 2, 1, 0, 7, 40, 26, }, ++ { 1, 1, 0, 7, 40, 26, }, ++ { 0, 1, 0, 7, 44, 30, }, ++ { 2, 1, 0, 7, 44, 26, }, ++ { 1, 1, 0, 7, 44, 26, }, ++ { 0, 1, 0, 7, 48, 30, }, ++ { 2, 1, 0, 7, 48, 26, }, ++ { 1, 1, 0, 7, 48, 26, }, ++ { 0, 1, 0, 7, 52, 30, }, ++ { 2, 1, 0, 7, 52, 26, }, ++ { 1, 1, 0, 7, 52, 26, }, ++ { 0, 1, 0, 7, 56, 30, }, ++ { 2, 1, 0, 7, 56, 26, }, ++ { 1, 1, 0, 7, 56, 26, }, ++ { 0, 1, 0, 7, 60, 30, }, ++ { 2, 1, 0, 7, 60, 26, }, ++ { 1, 1, 0, 7, 60, 26, }, ++ { 0, 1, 0, 7, 64, 30, }, ++ { 2, 1, 0, 7, 64, 26, }, ++ { 1, 1, 0, 7, 64, 26, }, ++ { 0, 1, 0, 7, 100, 30, }, ++ { 2, 1, 0, 7, 100, 26, }, ++ { 1, 1, 0, 7, 100, 26, }, ++ { 0, 1, 0, 7, 104, 30, }, ++ { 2, 1, 0, 7, 104, 26, }, ++ { 1, 1, 0, 7, 104, 26, }, ++ { 0, 1, 0, 7, 108, 30, }, ++ { 2, 1, 0, 7, 108, 26, }, ++ { 1, 1, 0, 7, 108, 26, }, ++ { 0, 1, 0, 7, 112, 30, }, ++ { 2, 1, 0, 7, 112, 26, }, ++ { 1, 1, 0, 7, 112, 26, }, ++ { 0, 1, 0, 7, 116, 30, }, ++ { 2, 1, 0, 7, 116, 26, }, ++ { 1, 1, 0, 7, 116, 26, }, ++ { 0, 1, 0, 7, 120, 30, }, ++ { 2, 1, 0, 7, 120, 26, }, ++ { 1, 1, 0, 7, 120, 26, }, ++ { 0, 1, 0, 7, 124, 30, }, ++ { 2, 1, 0, 7, 124, 26, }, ++ { 1, 1, 0, 7, 124, 26, }, ++ { 0, 1, 0, 7, 128, 30, }, ++ { 2, 1, 0, 7, 128, 26, }, ++ { 1, 1, 0, 7, 128, 26, }, ++ { 0, 1, 0, 7, 132, 30, }, ++ { 2, 1, 0, 7, 132, 26, }, ++ { 1, 1, 0, 7, 132, 26, }, ++ { 0, 1, 0, 7, 136, 30, }, ++ { 2, 1, 0, 7, 136, 26, }, ++ { 1, 1, 0, 7, 136, 26, }, ++ { 0, 1, 0, 7, 140, 28, }, ++ { 2, 1, 0, 7, 140, 26, }, ++ { 1, 1, 0, 7, 140, 26, }, ++ { 0, 1, 0, 7, 149, 26, }, ++ { 2, 1, 0, 7, 149, 26, }, ++ { 1, 1, 0, 7, 149, 63, }, ++ { 0, 1, 0, 7, 153, 32, }, ++ { 2, 1, 0, 7, 153, 26, }, ++ { 1, 1, 0, 7, 153, 63, }, ++ { 0, 1, 0, 7, 157, 32, }, ++ { 2, 1, 0, 7, 157, 26, }, ++ { 1, 1, 0, 7, 157, 63, }, ++ { 0, 1, 0, 7, 161, 32, }, ++ { 2, 1, 0, 7, 161, 26, }, ++ { 1, 1, 0, 7, 161, 63, }, ++ { 0, 1, 0, 7, 165, 32, }, ++ { 2, 1, 0, 7, 165, 26, }, ++ { 1, 1, 0, 7, 165, 63, }, ++ { 0, 1, 1, 2, 38, 32, }, ++ { 2, 1, 1, 2, 38, 32, }, ++ { 1, 1, 1, 2, 38, 32, }, ++ { 0, 1, 1, 2, 46, 32, }, ++ { 2, 1, 1, 2, 46, 32, }, ++ { 1, 1, 1, 2, 46, 32, }, ++ { 0, 1, 1, 2, 54, 32, }, ++ { 2, 1, 1, 2, 54, 32, }, ++ { 1, 1, 1, 2, 54, 32, }, ++ { 0, 1, 1, 2, 62, 30, }, ++ { 2, 1, 1, 2, 62, 32, }, ++ { 1, 1, 1, 2, 62, 32, }, ++ { 0, 1, 1, 2, 102, 30, }, ++ { 2, 1, 1, 2, 102, 32, }, ++ { 1, 1, 1, 2, 102, 32, }, ++ { 0, 1, 1, 2, 110, 38, }, ++ { 2, 1, 1, 2, 110, 32, }, ++ { 1, 1, 1, 2, 110, 32, }, ++ { 0, 1, 1, 2, 118, 38, }, ++ { 2, 1, 1, 2, 118, 32, }, ++ { 1, 1, 1, 2, 118, 32, }, ++ { 0, 1, 1, 2, 126, 38, }, ++ { 2, 1, 1, 2, 126, 32, }, ++ { 1, 1, 1, 2, 126, 32, }, ++ { 0, 1, 1, 2, 134, 38, }, ++ { 2, 1, 1, 2, 134, 32, }, ++ { 1, 1, 1, 2, 134, 32, }, ++ { 0, 1, 1, 2, 151, 32, }, ++ { 2, 1, 1, 2, 151, 32, }, ++ { 1, 1, 1, 2, 151, 63, }, ++ { 0, 1, 1, 2, 159, 32, }, ++ { 2, 1, 1, 2, 159, 32, }, ++ { 1, 1, 1, 2, 159, 63, }, ++ { 0, 1, 1, 3, 38, 30, }, ++ { 2, 1, 1, 3, 38, 30, }, ++ { 1, 1, 1, 3, 38, 30, }, ++ { 0, 1, 1, 3, 46, 30, }, ++ { 2, 1, 1, 3, 46, 30, }, ++ { 1, 1, 1, 3, 46, 30, }, ++ { 0, 1, 1, 3, 54, 30, }, ++ { 2, 1, 1, 3, 54, 30, }, ++ { 1, 1, 1, 3, 54, 30, }, ++ { 0, 1, 1, 3, 62, 28, }, ++ { 2, 1, 1, 3, 62, 30, }, ++ { 1, 1, 1, 3, 62, 30, }, ++ { 0, 1, 1, 3, 102, 28, }, ++ { 2, 1, 1, 3, 102, 30, }, ++ { 1, 1, 1, 3, 102, 30, }, ++ { 0, 1, 1, 3, 110, 36, }, ++ { 2, 1, 1, 3, 110, 30, }, ++ { 1, 1, 1, 3, 110, 30, }, ++ { 0, 1, 1, 3, 118, 36, }, ++ { 2, 1, 1, 3, 118, 30, }, ++ { 1, 1, 1, 3, 118, 30, }, ++ { 0, 1, 1, 3, 126, 36, }, ++ { 2, 1, 1, 3, 126, 30, }, ++ { 1, 1, 1, 3, 126, 30, }, ++ { 0, 1, 1, 3, 134, 36, }, ++ { 2, 1, 1, 3, 134, 30, }, ++ { 1, 1, 1, 3, 134, 30, }, ++ { 0, 1, 1, 3, 151, 30, }, ++ { 2, 1, 1, 3, 151, 30, }, ++ { 1, 1, 1, 3, 151, 63, }, ++ { 0, 1, 1, 3, 159, 30, }, ++ { 2, 1, 1, 3, 159, 30, }, ++ { 1, 1, 1, 3, 159, 63, }, ++ { 0, 1, 1, 6, 38, 28, }, ++ { 2, 1, 1, 6, 38, 28, }, ++ { 1, 1, 1, 6, 38, 28, }, ++ { 0, 1, 1, 6, 46, 28, }, ++ { 2, 1, 1, 6, 46, 28, }, ++ { 1, 1, 1, 6, 46, 28, }, ++ { 0, 1, 1, 6, 54, 28, }, ++ { 2, 1, 1, 6, 54, 28, }, ++ { 1, 1, 1, 6, 54, 28, }, ++ { 0, 1, 1, 6, 62, 26, }, ++ { 2, 1, 1, 6, 62, 28, }, ++ { 1, 1, 1, 6, 62, 28, }, ++ { 0, 1, 1, 6, 102, 26, }, ++ { 2, 1, 1, 6, 102, 28, }, ++ { 1, 1, 1, 6, 102, 28, }, ++ { 0, 1, 1, 6, 110, 34, }, ++ { 2, 1, 1, 6, 110, 28, }, ++ { 1, 1, 1, 6, 110, 28, }, ++ { 0, 1, 1, 6, 118, 34, }, ++ { 2, 1, 1, 6, 118, 28, }, ++ { 1, 1, 1, 6, 118, 28, }, ++ { 0, 1, 1, 6, 126, 34, }, ++ { 2, 1, 1, 6, 126, 28, }, ++ { 1, 1, 1, 6, 126, 28, }, ++ { 0, 1, 1, 6, 134, 34, }, ++ { 2, 1, 1, 6, 134, 28, }, ++ { 1, 1, 1, 6, 134, 28, }, ++ { 0, 1, 1, 6, 151, 28, }, ++ { 2, 1, 1, 6, 151, 28, }, ++ { 1, 1, 1, 6, 151, 63, }, ++ { 0, 1, 1, 6, 159, 28, }, ++ { 2, 1, 1, 6, 159, 28, }, ++ { 1, 1, 1, 6, 159, 63, }, ++ { 0, 1, 1, 7, 38, 26, }, ++ { 2, 1, 1, 7, 38, 26, }, ++ { 1, 1, 1, 7, 38, 26, }, ++ { 0, 1, 1, 7, 46, 26, }, ++ { 2, 1, 1, 7, 46, 26, }, ++ { 1, 1, 1, 7, 46, 26, }, ++ { 0, 1, 1, 7, 54, 26, }, ++ { 2, 1, 1, 7, 54, 26, }, ++ { 1, 1, 1, 7, 54, 26, }, ++ { 0, 1, 1, 7, 62, 24, }, ++ { 2, 1, 1, 7, 62, 26, }, ++ { 1, 1, 1, 7, 62, 26, }, ++ { 0, 1, 1, 7, 102, 24, }, ++ { 2, 1, 1, 7, 102, 26, }, ++ { 1, 1, 1, 7, 102, 26, }, ++ { 0, 1, 1, 7, 110, 32, }, ++ { 2, 1, 1, 7, 110, 26, }, ++ { 1, 1, 1, 7, 110, 26, }, ++ { 0, 1, 1, 7, 118, 32, }, ++ { 2, 1, 1, 7, 118, 26, }, ++ { 1, 1, 1, 7, 118, 26, }, ++ { 0, 1, 1, 7, 126, 32, }, ++ { 2, 1, 1, 7, 126, 26, }, ++ { 1, 1, 1, 7, 126, 26, }, ++ { 0, 1, 1, 7, 134, 32, }, ++ { 2, 1, 1, 7, 134, 26, }, ++ { 1, 1, 1, 7, 134, 26, }, ++ { 0, 1, 1, 7, 151, 26, }, ++ { 2, 1, 1, 7, 151, 26, }, ++ { 1, 1, 1, 7, 151, 63, }, ++ { 0, 1, 1, 7, 159, 26, }, ++ { 2, 1, 1, 7, 159, 26, }, ++ { 1, 1, 1, 7, 159, 63, }, ++ { 0, 1, 2, 4, 42, 26, }, ++ { 2, 1, 2, 4, 42, 32, }, ++ { 1, 1, 2, 4, 42, 32, }, ++ { 0, 1, 2, 4, 58, 26, }, ++ { 2, 1, 2, 4, 58, 32, }, ++ { 1, 1, 2, 4, 58, 32, }, ++ { 0, 1, 2, 4, 106, 28, }, ++ { 2, 1, 2, 4, 106, 32, }, ++ { 1, 1, 2, 4, 106, 32, }, ++ { 0, 1, 2, 4, 122, 28, }, ++ { 2, 1, 2, 4, 122, 32, }, ++ { 1, 1, 2, 4, 122, 32, }, ++ { 0, 1, 2, 4, 155, 28, }, ++ { 2, 1, 2, 4, 155, 32, }, ++ { 1, 1, 2, 4, 155, 63, }, ++ { 0, 1, 2, 5, 42, 24, }, ++ { 2, 1, 2, 5, 42, 30, }, ++ { 1, 1, 2, 5, 42, 30, }, ++ { 0, 1, 2, 5, 58, 24, }, ++ { 2, 1, 2, 5, 58, 30, }, ++ { 1, 1, 2, 5, 58, 30, }, ++ { 0, 1, 2, 5, 106, 26, }, ++ { 2, 1, 2, 5, 106, 30, }, ++ { 1, 1, 2, 5, 106, 30, }, ++ { 0, 1, 2, 5, 122, 26, }, ++ { 2, 1, 2, 5, 122, 30, }, ++ { 1, 1, 2, 5, 122, 30, }, ++ { 0, 1, 2, 5, 155, 26, }, ++ { 2, 1, 2, 5, 155, 30, }, ++ { 1, 1, 2, 5, 155, 63, }, ++ { 0, 1, 2, 8, 42, 22, }, ++ { 2, 1, 2, 8, 42, 28, }, ++ { 1, 1, 2, 8, 42, 28, }, ++ { 0, 1, 2, 8, 58, 22, }, ++ { 2, 1, 2, 8, 58, 28, }, ++ { 1, 1, 2, 8, 58, 28, }, ++ { 0, 1, 2, 8, 106, 24, }, ++ { 2, 1, 2, 8, 106, 28, }, ++ { 1, 1, 2, 8, 106, 28, }, ++ { 0, 1, 2, 8, 122, 24, }, ++ { 2, 1, 2, 8, 122, 28, }, ++ { 1, 1, 2, 8, 122, 28, }, ++ { 0, 1, 2, 8, 155, 24, }, ++ { 2, 1, 2, 8, 155, 28, }, ++ { 1, 1, 2, 8, 155, 63, }, ++ { 0, 1, 2, 9, 42, 20, }, ++ { 2, 1, 2, 9, 42, 26, }, ++ { 1, 1, 2, 9, 42, 26, }, ++ { 0, 1, 2, 9, 58, 20, }, ++ { 2, 1, 2, 9, 58, 26, }, ++ { 1, 1, 2, 9, 58, 26, }, ++ { 0, 1, 2, 9, 106, 22, }, ++ { 2, 1, 2, 9, 106, 26, }, ++ { 1, 1, 2, 9, 106, 26, }, ++ { 0, 1, 2, 9, 122, 22, }, ++ { 2, 1, 2, 9, 122, 26, }, ++ { 1, 1, 2, 9, 122, 26, }, ++ { 0, 1, 2, 9, 155, 22, }, ++ { 2, 1, 2, 9, 155, 26, }, ++ { 1, 1, 2, 9, 155, 63, }, ++}; ++ ++RTW_DECL_TABLE_TXPWR_LMT(rtw8814a_txpwr_lmt_type7); ++ ++static const struct rtw_txpwr_lmt_cfg_pair rtw8814a_txpwr_lmt_type8[] = { ++ { 0, 0, 0, 0, 1, 46, }, ++ { 2, 0, 0, 0, 1, 46, }, ++ { 1, 0, 0, 0, 1, 46, }, ++ { 0, 0, 0, 0, 2, 46, }, ++ { 2, 0, 0, 0, 2, 46, }, ++ { 1, 0, 0, 0, 2, 46, }, ++ { 0, 0, 0, 0, 3, 46, }, ++ { 2, 0, 0, 0, 3, 46, }, ++ { 1, 0, 0, 0, 3, 46, }, ++ { 0, 0, 0, 0, 4, 46, }, ++ { 2, 0, 0, 0, 4, 46, }, ++ { 1, 0, 0, 0, 4, 46, }, ++ { 0, 0, 0, 0, 5, 46, }, ++ { 2, 0, 0, 0, 5, 46, }, ++ { 1, 0, 0, 0, 5, 46, }, ++ { 0, 0, 0, 0, 6, 46, }, ++ { 2, 0, 0, 0, 6, 46, }, ++ { 1, 0, 0, 0, 6, 46, }, ++ { 0, 0, 0, 0, 7, 46, }, ++ { 2, 0, 0, 0, 7, 46, }, ++ { 1, 0, 0, 0, 7, 46, }, ++ { 0, 0, 0, 0, 8, 46, }, ++ { 2, 0, 0, 0, 8, 46, }, ++ { 1, 0, 0, 0, 8, 46, }, ++ { 0, 0, 0, 0, 9, 46, }, ++ { 2, 0, 0, 0, 9, 46, }, ++ { 1, 0, 0, 0, 9, 46, }, ++ { 0, 0, 0, 0, 10, 46, }, ++ { 2, 0, 0, 0, 10, 46, }, ++ { 1, 0, 0, 0, 10, 46, }, ++ { 0, 0, 0, 0, 11, 46, }, ++ { 2, 0, 0, 0, 11, 46, }, ++ { 1, 0, 0, 0, 11, 46, }, ++ { 0, 0, 0, 0, 12, 63, }, ++ { 2, 0, 0, 0, 12, 46, }, ++ { 1, 0, 0, 0, 12, 46, }, ++ { 0, 0, 0, 0, 13, 63, }, ++ { 2, 0, 0, 0, 13, 46, }, ++ { 1, 0, 0, 0, 13, 46, }, ++ { 0, 0, 0, 0, 14, 63, }, ++ { 2, 0, 0, 0, 14, 63, }, ++ { 1, 0, 0, 0, 14, 46, }, ++ { 0, 0, 0, 1, 1, 46, }, ++ { 2, 0, 0, 1, 1, 46, }, ++ { 1, 0, 0, 1, 1, 46, }, ++ { 0, 0, 0, 1, 2, 46, }, ++ { 2, 0, 0, 1, 2, 46, }, ++ { 1, 0, 0, 1, 2, 46, }, ++ { 0, 0, 0, 1, 3, 46, }, ++ { 2, 0, 0, 1, 3, 46, }, ++ { 1, 0, 0, 1, 3, 46, }, ++ { 0, 0, 0, 1, 4, 46, }, ++ { 2, 0, 0, 1, 4, 46, }, ++ { 1, 0, 0, 1, 4, 46, }, ++ { 0, 0, 0, 1, 5, 46, }, ++ { 2, 0, 0, 1, 5, 46, }, ++ { 1, 0, 0, 1, 5, 46, }, ++ { 0, 0, 0, 1, 6, 46, }, ++ { 2, 0, 0, 1, 6, 46, }, ++ { 1, 0, 0, 1, 6, 46, }, ++ { 0, 0, 0, 1, 7, 46, }, ++ { 2, 0, 0, 1, 7, 46, }, ++ { 1, 0, 0, 1, 7, 46, }, ++ { 0, 0, 0, 1, 8, 46, }, ++ { 2, 0, 0, 1, 8, 46, }, ++ { 1, 0, 0, 1, 8, 46, }, ++ { 0, 0, 0, 1, 9, 46, }, ++ { 2, 0, 0, 1, 9, 46, }, ++ { 1, 0, 0, 1, 9, 46, }, ++ { 0, 0, 0, 1, 10, 46, }, ++ { 2, 0, 0, 1, 10, 46, }, ++ { 1, 0, 0, 1, 10, 46, }, ++ { 0, 0, 0, 1, 11, 46, }, ++ { 2, 0, 0, 1, 11, 46, }, ++ { 1, 0, 0, 1, 11, 46, }, ++ { 0, 0, 0, 1, 12, 63, }, ++ { 2, 0, 0, 1, 12, 46, }, ++ { 1, 0, 0, 1, 12, 46, }, ++ { 0, 0, 0, 1, 13, 63, }, ++ { 2, 0, 0, 1, 13, 46, }, ++ { 1, 0, 0, 1, 13, 46, }, ++ { 0, 0, 0, 1, 14, 63, }, ++ { 2, 0, 0, 1, 14, 63, }, ++ { 1, 0, 0, 1, 14, 46, }, ++ { 0, 0, 0, 2, 1, 46, }, ++ { 2, 0, 0, 2, 1, 46, }, ++ { 1, 0, 0, 2, 1, 46, }, ++ { 0, 0, 0, 2, 2, 46, }, ++ { 2, 0, 0, 2, 2, 46, }, ++ { 1, 0, 0, 2, 2, 46, }, ++ { 0, 0, 0, 2, 3, 46, }, ++ { 2, 0, 0, 2, 3, 46, }, ++ { 1, 0, 0, 2, 3, 46, }, ++ { 0, 0, 0, 2, 4, 46, }, ++ { 2, 0, 0, 2, 4, 46, }, ++ { 1, 0, 0, 2, 4, 46, }, ++ { 0, 0, 0, 2, 5, 46, }, ++ { 2, 0, 0, 2, 5, 46, }, ++ { 1, 0, 0, 2, 5, 46, }, ++ { 0, 0, 0, 2, 6, 46, }, ++ { 2, 0, 0, 2, 6, 46, }, ++ { 1, 0, 0, 2, 6, 46, }, ++ { 0, 0, 0, 2, 7, 46, }, ++ { 2, 0, 0, 2, 7, 46, }, ++ { 1, 0, 0, 2, 7, 46, }, ++ { 0, 0, 0, 2, 8, 46, }, ++ { 2, 0, 0, 2, 8, 46, }, ++ { 1, 0, 0, 2, 8, 46, }, ++ { 0, 0, 0, 2, 9, 46, }, ++ { 2, 0, 0, 2, 9, 46, }, ++ { 1, 0, 0, 2, 9, 46, }, ++ { 0, 0, 0, 2, 10, 46, }, ++ { 2, 0, 0, 2, 10, 46, }, ++ { 1, 0, 0, 2, 10, 46, }, ++ { 0, 0, 0, 2, 11, 46, }, ++ { 2, 0, 0, 2, 11, 46, }, ++ { 1, 0, 0, 2, 11, 46, }, ++ { 0, 0, 0, 2, 12, 63, }, ++ { 2, 0, 0, 2, 12, 46, }, ++ { 1, 0, 0, 2, 12, 46, }, ++ { 0, 0, 0, 2, 13, 63, }, ++ { 2, 0, 0, 2, 13, 46, }, ++ { 1, 0, 0, 2, 13, 46, }, ++ { 0, 0, 0, 2, 14, 63, }, ++ { 2, 0, 0, 2, 14, 63, }, ++ { 1, 0, 0, 2, 14, 46, }, ++ { 0, 0, 0, 3, 1, 46, }, ++ { 2, 0, 0, 3, 1, 46, }, ++ { 1, 0, 0, 3, 1, 46, }, ++ { 0, 0, 0, 3, 2, 46, }, ++ { 2, 0, 0, 3, 2, 46, }, ++ { 1, 0, 0, 3, 2, 46, }, ++ { 0, 0, 0, 3, 3, 46, }, ++ { 2, 0, 0, 3, 3, 46, }, ++ { 1, 0, 0, 3, 3, 46, }, ++ { 0, 0, 0, 3, 4, 46, }, ++ { 2, 0, 0, 3, 4, 46, }, ++ { 1, 0, 0, 3, 4, 46, }, ++ { 0, 0, 0, 3, 5, 46, }, ++ { 2, 0, 0, 3, 5, 46, }, ++ { 1, 0, 0, 3, 5, 46, }, ++ { 0, 0, 0, 3, 6, 46, }, ++ { 2, 0, 0, 3, 6, 46, }, ++ { 1, 0, 0, 3, 6, 46, }, ++ { 0, 0, 0, 3, 7, 46, }, ++ { 2, 0, 0, 3, 7, 46, }, ++ { 1, 0, 0, 3, 7, 46, }, ++ { 0, 0, 0, 3, 8, 46, }, ++ { 2, 0, 0, 3, 8, 46, }, ++ { 1, 0, 0, 3, 8, 46, }, ++ { 0, 0, 0, 3, 9, 46, }, ++ { 2, 0, 0, 3, 9, 46, }, ++ { 1, 0, 0, 3, 9, 46, }, ++ { 0, 0, 0, 3, 10, 46, }, ++ { 2, 0, 0, 3, 10, 46, }, ++ { 1, 0, 0, 3, 10, 46, }, ++ { 0, 0, 0, 3, 11, 46, }, ++ { 2, 0, 0, 3, 11, 46, }, ++ { 1, 0, 0, 3, 11, 46, }, ++ { 0, 0, 0, 3, 12, 63, }, ++ { 2, 0, 0, 3, 12, 46, }, ++ { 1, 0, 0, 3, 12, 46, }, ++ { 0, 0, 0, 3, 13, 63, }, ++ { 2, 0, 0, 3, 13, 46, }, ++ { 1, 0, 0, 3, 13, 46, }, ++ { 0, 0, 0, 3, 14, 63, }, ++ { 2, 0, 0, 3, 14, 63, }, ++ { 1, 0, 0, 3, 14, 46, }, ++ { 0, 0, 0, 6, 1, 46, }, ++ { 2, 0, 0, 6, 1, 46, }, ++ { 1, 0, 0, 6, 1, 46, }, ++ { 0, 0, 0, 6, 2, 46, }, ++ { 2, 0, 0, 6, 2, 46, }, ++ { 1, 0, 0, 6, 2, 46, }, ++ { 0, 0, 0, 6, 3, 46, }, ++ { 2, 0, 0, 6, 3, 46, }, ++ { 1, 0, 0, 6, 3, 46, }, ++ { 0, 0, 0, 6, 4, 46, }, ++ { 2, 0, 0, 6, 4, 46, }, ++ { 1, 0, 0, 6, 4, 46, }, ++ { 0, 0, 0, 6, 5, 46, }, ++ { 2, 0, 0, 6, 5, 46, }, ++ { 1, 0, 0, 6, 5, 46, }, ++ { 0, 0, 0, 6, 6, 46, }, ++ { 2, 0, 0, 6, 6, 46, }, ++ { 1, 0, 0, 6, 6, 46, }, ++ { 0, 0, 0, 6, 7, 46, }, ++ { 2, 0, 0, 6, 7, 46, }, ++ { 1, 0, 0, 6, 7, 46, }, ++ { 0, 0, 0, 6, 8, 46, }, ++ { 2, 0, 0, 6, 8, 46, }, ++ { 1, 0, 0, 6, 8, 46, }, ++ { 0, 0, 0, 6, 9, 46, }, ++ { 2, 0, 0, 6, 9, 46, }, ++ { 1, 0, 0, 6, 9, 46, }, ++ { 0, 0, 0, 6, 10, 46, }, ++ { 2, 0, 0, 6, 10, 46, }, ++ { 1, 0, 0, 6, 10, 46, }, ++ { 0, 0, 0, 6, 11, 46, }, ++ { 2, 0, 0, 6, 11, 46, }, ++ { 1, 0, 0, 6, 11, 46, }, ++ { 0, 0, 0, 6, 12, 63, }, ++ { 2, 0, 0, 6, 12, 46, }, ++ { 1, 0, 0, 6, 12, 46, }, ++ { 0, 0, 0, 6, 13, 63, }, ++ { 2, 0, 0, 6, 13, 46, }, ++ { 1, 0, 0, 6, 13, 46, }, ++ { 0, 0, 0, 6, 14, 63, }, ++ { 2, 0, 0, 6, 14, 63, }, ++ { 1, 0, 0, 6, 14, 46, }, ++ { 0, 0, 0, 7, 1, 46, }, ++ { 2, 0, 0, 7, 1, 46, }, ++ { 1, 0, 0, 7, 1, 46, }, ++ { 0, 0, 0, 7, 2, 46, }, ++ { 2, 0, 0, 7, 2, 46, }, ++ { 1, 0, 0, 7, 2, 46, }, ++ { 0, 0, 0, 7, 3, 46, }, ++ { 2, 0, 0, 7, 3, 46, }, ++ { 1, 0, 0, 7, 3, 46, }, ++ { 0, 0, 0, 7, 4, 46, }, ++ { 2, 0, 0, 7, 4, 46, }, ++ { 1, 0, 0, 7, 4, 46, }, ++ { 0, 0, 0, 7, 5, 46, }, ++ { 2, 0, 0, 7, 5, 46, }, ++ { 1, 0, 0, 7, 5, 46, }, ++ { 0, 0, 0, 7, 6, 46, }, ++ { 2, 0, 0, 7, 6, 46, }, ++ { 1, 0, 0, 7, 6, 46, }, ++ { 0, 0, 0, 7, 7, 46, }, ++ { 2, 0, 0, 7, 7, 46, }, ++ { 1, 0, 0, 7, 7, 46, }, ++ { 0, 0, 0, 7, 8, 46, }, ++ { 2, 0, 0, 7, 8, 46, }, ++ { 1, 0, 0, 7, 8, 46, }, ++ { 0, 0, 0, 7, 9, 46, }, ++ { 2, 0, 0, 7, 9, 46, }, ++ { 1, 0, 0, 7, 9, 46, }, ++ { 0, 0, 0, 7, 10, 46, }, ++ { 2, 0, 0, 7, 10, 46, }, ++ { 1, 0, 0, 7, 10, 46, }, ++ { 0, 0, 0, 7, 11, 46, }, ++ { 2, 0, 0, 7, 11, 46, }, ++ { 1, 0, 0, 7, 11, 46, }, ++ { 0, 0, 0, 7, 12, 63, }, ++ { 2, 0, 0, 7, 12, 46, }, ++ { 1, 0, 0, 7, 12, 46, }, ++ { 0, 0, 0, 7, 13, 63, }, ++ { 2, 0, 0, 7, 13, 46, }, ++ { 1, 0, 0, 7, 13, 46, }, ++ { 0, 0, 0, 7, 14, 63, }, ++ { 2, 0, 0, 7, 14, 63, }, ++ { 1, 0, 0, 7, 14, 46, }, ++ { 0, 0, 1, 2, 1, 63, }, ++ { 2, 0, 1, 2, 1, 63, }, ++ { 1, 0, 1, 2, 1, 63, }, ++ { 0, 0, 1, 2, 2, 63, }, ++ { 2, 0, 1, 2, 2, 63, }, ++ { 1, 0, 1, 2, 2, 63, }, ++ { 0, 0, 1, 2, 3, 30, }, ++ { 2, 0, 1, 2, 3, 34, }, ++ { 1, 0, 1, 2, 3, 34, }, ++ { 0, 0, 1, 2, 4, 34, }, ++ { 2, 0, 1, 2, 4, 34, }, ++ { 1, 0, 1, 2, 4, 34, }, ++ { 0, 0, 1, 2, 5, 34, }, ++ { 2, 0, 1, 2, 5, 34, }, ++ { 1, 0, 1, 2, 5, 34, }, ++ { 0, 0, 1, 2, 6, 34, }, ++ { 2, 0, 1, 2, 6, 34, }, ++ { 1, 0, 1, 2, 6, 34, }, ++ { 0, 0, 1, 2, 7, 34, }, ++ { 2, 0, 1, 2, 7, 34, }, ++ { 1, 0, 1, 2, 7, 34, }, ++ { 0, 0, 1, 2, 8, 34, }, ++ { 2, 0, 1, 2, 8, 34, }, ++ { 1, 0, 1, 2, 8, 34, }, ++ { 0, 0, 1, 2, 9, 34, }, ++ { 2, 0, 1, 2, 9, 34, }, ++ { 1, 0, 1, 2, 9, 34, }, ++ { 0, 0, 1, 2, 10, 34, }, ++ { 2, 0, 1, 2, 10, 34, }, ++ { 1, 0, 1, 2, 10, 34, }, ++ { 0, 0, 1, 2, 11, 28, }, ++ { 2, 0, 1, 2, 11, 34, }, ++ { 1, 0, 1, 2, 11, 34, }, ++ { 0, 0, 1, 2, 12, 63, }, ++ { 2, 0, 1, 2, 12, 34, }, ++ { 1, 0, 1, 2, 12, 34, }, ++ { 0, 0, 1, 2, 13, 63, }, ++ { 2, 0, 1, 2, 13, 34, }, ++ { 1, 0, 1, 2, 13, 34, }, ++ { 0, 0, 1, 2, 14, 63, }, ++ { 2, 0, 1, 2, 14, 63, }, ++ { 1, 0, 1, 2, 14, 63, }, ++ { 0, 0, 1, 3, 1, 63, }, ++ { 2, 0, 1, 3, 1, 63, }, ++ { 1, 0, 1, 3, 1, 63, }, ++ { 0, 0, 1, 3, 2, 63, }, ++ { 2, 0, 1, 3, 2, 63, }, ++ { 1, 0, 1, 3, 2, 63, }, ++ { 0, 0, 1, 3, 3, 30, }, ++ { 2, 0, 1, 3, 3, 34, }, ++ { 1, 0, 1, 3, 3, 34, }, ++ { 0, 0, 1, 3, 4, 34, }, ++ { 2, 0, 1, 3, 4, 34, }, ++ { 1, 0, 1, 3, 4, 34, }, ++ { 0, 0, 1, 3, 5, 34, }, ++ { 2, 0, 1, 3, 5, 34, }, ++ { 1, 0, 1, 3, 5, 34, }, ++ { 0, 0, 1, 3, 6, 34, }, ++ { 2, 0, 1, 3, 6, 34, }, ++ { 1, 0, 1, 3, 6, 34, }, ++ { 0, 0, 1, 3, 7, 34, }, ++ { 2, 0, 1, 3, 7, 34, }, ++ { 1, 0, 1, 3, 7, 34, }, ++ { 0, 0, 1, 3, 8, 34, }, ++ { 2, 0, 1, 3, 8, 34, }, ++ { 1, 0, 1, 3, 8, 34, }, ++ { 0, 0, 1, 3, 9, 34, }, ++ { 2, 0, 1, 3, 9, 34, }, ++ { 1, 0, 1, 3, 9, 34, }, ++ { 0, 0, 1, 3, 10, 34, }, ++ { 2, 0, 1, 3, 10, 34, }, ++ { 1, 0, 1, 3, 10, 34, }, ++ { 0, 0, 1, 3, 11, 28, }, ++ { 2, 0, 1, 3, 11, 34, }, ++ { 1, 0, 1, 3, 11, 34, }, ++ { 0, 0, 1, 3, 12, 63, }, ++ { 2, 0, 1, 3, 12, 34, }, ++ { 1, 0, 1, 3, 12, 34, }, ++ { 0, 0, 1, 3, 13, 63, }, ++ { 2, 0, 1, 3, 13, 34, }, ++ { 1, 0, 1, 3, 13, 34, }, ++ { 0, 0, 1, 3, 14, 63, }, ++ { 2, 0, 1, 3, 14, 63, }, ++ { 1, 0, 1, 3, 14, 63, }, ++ { 0, 0, 1, 6, 1, 63, }, ++ { 2, 0, 1, 6, 1, 63, }, ++ { 1, 0, 1, 6, 1, 63, }, ++ { 0, 0, 1, 6, 2, 63, }, ++ { 2, 0, 1, 6, 2, 63, }, ++ { 1, 0, 1, 6, 2, 63, }, ++ { 0, 0, 1, 6, 3, 30, }, ++ { 2, 0, 1, 6, 3, 34, }, ++ { 1, 0, 1, 6, 3, 34, }, ++ { 0, 0, 1, 6, 4, 34, }, ++ { 2, 0, 1, 6, 4, 34, }, ++ { 1, 0, 1, 6, 4, 34, }, ++ { 0, 0, 1, 6, 5, 34, }, ++ { 2, 0, 1, 6, 5, 34, }, ++ { 1, 0, 1, 6, 5, 34, }, ++ { 0, 0, 1, 6, 6, 34, }, ++ { 2, 0, 1, 6, 6, 34, }, ++ { 1, 0, 1, 6, 6, 34, }, ++ { 0, 0, 1, 6, 7, 34, }, ++ { 2, 0, 1, 6, 7, 34, }, ++ { 1, 0, 1, 6, 7, 34, }, ++ { 0, 0, 1, 6, 8, 34, }, ++ { 2, 0, 1, 6, 8, 34, }, ++ { 1, 0, 1, 6, 8, 34, }, ++ { 0, 0, 1, 6, 9, 34, }, ++ { 2, 0, 1, 6, 9, 34, }, ++ { 1, 0, 1, 6, 9, 34, }, ++ { 0, 0, 1, 6, 10, 34, }, ++ { 2, 0, 1, 6, 10, 34, }, ++ { 1, 0, 1, 6, 10, 34, }, ++ { 0, 0, 1, 6, 11, 28, }, ++ { 2, 0, 1, 6, 11, 34, }, ++ { 1, 0, 1, 6, 11, 34, }, ++ { 0, 0, 1, 6, 12, 63, }, ++ { 2, 0, 1, 6, 12, 34, }, ++ { 1, 0, 1, 6, 12, 34, }, ++ { 0, 0, 1, 6, 13, 63, }, ++ { 2, 0, 1, 6, 13, 34, }, ++ { 1, 0, 1, 6, 13, 34, }, ++ { 0, 0, 1, 6, 14, 63, }, ++ { 2, 0, 1, 6, 14, 63, }, ++ { 1, 0, 1, 6, 14, 63, }, ++ { 0, 0, 1, 7, 1, 63, }, ++ { 2, 0, 1, 7, 1, 63, }, ++ { 1, 0, 1, 7, 1, 63, }, ++ { 0, 0, 1, 7, 2, 63, }, ++ { 2, 0, 1, 7, 2, 63, }, ++ { 1, 0, 1, 7, 2, 63, }, ++ { 0, 0, 1, 7, 3, 30, }, ++ { 2, 0, 1, 7, 3, 34, }, ++ { 1, 0, 1, 7, 3, 34, }, ++ { 0, 0, 1, 7, 4, 34, }, ++ { 2, 0, 1, 7, 4, 34, }, ++ { 1, 0, 1, 7, 4, 34, }, ++ { 0, 0, 1, 7, 5, 34, }, ++ { 2, 0, 1, 7, 5, 34, }, ++ { 1, 0, 1, 7, 5, 34, }, ++ { 0, 0, 1, 7, 6, 34, }, ++ { 2, 0, 1, 7, 6, 34, }, ++ { 1, 0, 1, 7, 6, 34, }, ++ { 0, 0, 1, 7, 7, 34, }, ++ { 2, 0, 1, 7, 7, 34, }, ++ { 1, 0, 1, 7, 7, 34, }, ++ { 0, 0, 1, 7, 8, 34, }, ++ { 2, 0, 1, 7, 8, 34, }, ++ { 1, 0, 1, 7, 8, 34, }, ++ { 0, 0, 1, 7, 9, 34, }, ++ { 2, 0, 1, 7, 9, 34, }, ++ { 1, 0, 1, 7, 9, 34, }, ++ { 0, 0, 1, 7, 10, 34, }, ++ { 2, 0, 1, 7, 10, 34, }, ++ { 1, 0, 1, 7, 10, 34, }, ++ { 0, 0, 1, 7, 11, 28, }, ++ { 2, 0, 1, 7, 11, 34, }, ++ { 1, 0, 1, 7, 11, 34, }, ++ { 0, 0, 1, 7, 12, 63, }, ++ { 2, 0, 1, 7, 12, 34, }, ++ { 1, 0, 1, 7, 12, 34, }, ++ { 0, 0, 1, 7, 13, 63, }, ++ { 2, 0, 1, 7, 13, 34, }, ++ { 1, 0, 1, 7, 13, 34, }, ++ { 0, 0, 1, 7, 14, 63, }, ++ { 2, 0, 1, 7, 14, 63, }, ++ { 1, 0, 1, 7, 14, 63, }, ++ { 0, 1, 0, 1, 36, 46, }, ++ { 2, 1, 0, 1, 36, 46, }, ++ { 1, 1, 0, 1, 36, 46, }, ++ { 0, 1, 0, 1, 40, 46, }, ++ { 2, 1, 0, 1, 40, 46, }, ++ { 1, 1, 0, 1, 40, 46, }, ++ { 0, 1, 0, 1, 44, 46, }, ++ { 2, 1, 0, 1, 44, 46, }, ++ { 1, 1, 0, 1, 44, 46, }, ++ { 0, 1, 0, 1, 48, 46, }, ++ { 2, 1, 0, 1, 48, 46, }, ++ { 1, 1, 0, 1, 48, 46, }, ++ { 0, 1, 0, 1, 52, 46, }, ++ { 2, 1, 0, 1, 52, 46, }, ++ { 1, 1, 0, 1, 52, 46, }, ++ { 0, 1, 0, 1, 56, 46, }, ++ { 2, 1, 0, 1, 56, 46, }, ++ { 1, 1, 0, 1, 56, 46, }, ++ { 0, 1, 0, 1, 60, 46, }, ++ { 2, 1, 0, 1, 60, 46, }, ++ { 1, 1, 0, 1, 60, 46, }, ++ { 0, 1, 0, 1, 64, 46, }, ++ { 2, 1, 0, 1, 64, 46, }, ++ { 1, 1, 0, 1, 64, 46, }, ++ { 0, 1, 0, 1, 100, 46, }, ++ { 2, 1, 0, 1, 100, 46, }, ++ { 1, 1, 0, 1, 100, 46, }, ++ { 0, 1, 0, 1, 104, 46, }, ++ { 2, 1, 0, 1, 104, 46, }, ++ { 1, 1, 0, 1, 104, 46, }, ++ { 0, 1, 0, 1, 108, 46, }, ++ { 2, 1, 0, 1, 108, 46, }, ++ { 1, 1, 0, 1, 108, 46, }, ++ { 0, 1, 0, 1, 112, 46, }, ++ { 2, 1, 0, 1, 112, 46, }, ++ { 1, 1, 0, 1, 112, 46, }, ++ { 0, 1, 0, 1, 116, 46, }, ++ { 2, 1, 0, 1, 116, 46, }, ++ { 1, 1, 0, 1, 116, 46, }, ++ { 0, 1, 0, 1, 120, 46, }, ++ { 2, 1, 0, 1, 120, 46, }, ++ { 1, 1, 0, 1, 120, 46, }, ++ { 0, 1, 0, 1, 124, 46, }, ++ { 2, 1, 0, 1, 124, 46, }, ++ { 1, 1, 0, 1, 124, 46, }, ++ { 0, 1, 0, 1, 128, 46, }, ++ { 2, 1, 0, 1, 128, 46, }, ++ { 1, 1, 0, 1, 128, 46, }, ++ { 0, 1, 0, 1, 132, 46, }, ++ { 2, 1, 0, 1, 132, 46, }, ++ { 1, 1, 0, 1, 132, 46, }, ++ { 0, 1, 0, 1, 136, 46, }, ++ { 2, 1, 0, 1, 136, 46, }, ++ { 1, 1, 0, 1, 136, 46, }, ++ { 0, 1, 0, 1, 140, 46, }, ++ { 2, 1, 0, 1, 140, 46, }, ++ { 1, 1, 0, 1, 140, 46, }, ++ { 0, 1, 0, 1, 149, 46, }, ++ { 2, 1, 0, 1, 149, 46, }, ++ { 1, 1, 0, 1, 149, 63, }, ++ { 0, 1, 0, 1, 153, 46, }, ++ { 2, 1, 0, 1, 153, 46, }, ++ { 1, 1, 0, 1, 153, 63, }, ++ { 0, 1, 0, 1, 157, 46, }, ++ { 2, 1, 0, 1, 157, 46, }, ++ { 1, 1, 0, 1, 157, 63, }, ++ { 0, 1, 0, 1, 161, 46, }, ++ { 2, 1, 0, 1, 161, 46, }, ++ { 1, 1, 0, 1, 161, 63, }, ++ { 0, 1, 0, 1, 165, 46, }, ++ { 2, 1, 0, 1, 165, 46, }, ++ { 1, 1, 0, 1, 165, 63, }, ++ { 0, 1, 0, 2, 36, 46, }, ++ { 2, 1, 0, 2, 36, 46, }, ++ { 1, 1, 0, 2, 36, 46, }, ++ { 0, 1, 0, 2, 40, 46, }, ++ { 2, 1, 0, 2, 40, 46, }, ++ { 1, 1, 0, 2, 40, 46, }, ++ { 0, 1, 0, 2, 44, 46, }, ++ { 2, 1, 0, 2, 44, 46, }, ++ { 1, 1, 0, 2, 44, 46, }, ++ { 0, 1, 0, 2, 48, 46, }, ++ { 2, 1, 0, 2, 48, 46, }, ++ { 1, 1, 0, 2, 48, 46, }, ++ { 0, 1, 0, 2, 52, 46, }, ++ { 2, 1, 0, 2, 52, 46, }, ++ { 1, 1, 0, 2, 52, 46, }, ++ { 0, 1, 0, 2, 56, 46, }, ++ { 2, 1, 0, 2, 56, 46, }, ++ { 1, 1, 0, 2, 56, 46, }, ++ { 0, 1, 0, 2, 60, 46, }, ++ { 2, 1, 0, 2, 60, 46, }, ++ { 1, 1, 0, 2, 60, 46, }, ++ { 0, 1, 0, 2, 64, 46, }, ++ { 2, 1, 0, 2, 64, 46, }, ++ { 1, 1, 0, 2, 64, 46, }, ++ { 0, 1, 0, 2, 100, 46, }, ++ { 2, 1, 0, 2, 100, 46, }, ++ { 1, 1, 0, 2, 100, 46, }, ++ { 0, 1, 0, 2, 104, 46, }, ++ { 2, 1, 0, 2, 104, 46, }, ++ { 1, 1, 0, 2, 104, 46, }, ++ { 0, 1, 0, 2, 108, 46, }, ++ { 2, 1, 0, 2, 108, 46, }, ++ { 1, 1, 0, 2, 108, 46, }, ++ { 0, 1, 0, 2, 112, 46, }, ++ { 2, 1, 0, 2, 112, 46, }, ++ { 1, 1, 0, 2, 112, 46, }, ++ { 0, 1, 0, 2, 116, 46, }, ++ { 2, 1, 0, 2, 116, 46, }, ++ { 1, 1, 0, 2, 116, 46, }, ++ { 0, 1, 0, 2, 120, 46, }, ++ { 2, 1, 0, 2, 120, 46, }, ++ { 1, 1, 0, 2, 120, 46, }, ++ { 0, 1, 0, 2, 124, 46, }, ++ { 2, 1, 0, 2, 124, 46, }, ++ { 1, 1, 0, 2, 124, 46, }, ++ { 0, 1, 0, 2, 128, 46, }, ++ { 2, 1, 0, 2, 128, 46, }, ++ { 1, 1, 0, 2, 128, 46, }, ++ { 0, 1, 0, 2, 132, 46, }, ++ { 2, 1, 0, 2, 132, 46, }, ++ { 1, 1, 0, 2, 132, 46, }, ++ { 0, 1, 0, 2, 136, 46, }, ++ { 2, 1, 0, 2, 136, 46, }, ++ { 1, 1, 0, 2, 136, 46, }, ++ { 0, 1, 0, 2, 140, 46, }, ++ { 2, 1, 0, 2, 140, 46, }, ++ { 1, 1, 0, 2, 140, 46, }, ++ { 0, 1, 0, 2, 149, 46, }, ++ { 2, 1, 0, 2, 149, 46, }, ++ { 1, 1, 0, 2, 149, 63, }, ++ { 0, 1, 0, 2, 153, 46, }, ++ { 2, 1, 0, 2, 153, 46, }, ++ { 1, 1, 0, 2, 153, 63, }, ++ { 0, 1, 0, 2, 157, 46, }, ++ { 2, 1, 0, 2, 157, 46, }, ++ { 1, 1, 0, 2, 157, 63, }, ++ { 0, 1, 0, 2, 161, 46, }, ++ { 2, 1, 0, 2, 161, 46, }, ++ { 1, 1, 0, 2, 161, 63, }, ++ { 0, 1, 0, 2, 165, 46, }, ++ { 2, 1, 0, 2, 165, 46, }, ++ { 1, 1, 0, 2, 165, 63, }, ++ { 0, 1, 0, 3, 36, 46, }, ++ { 2, 1, 0, 3, 36, 46, }, ++ { 1, 1, 0, 3, 36, 46, }, ++ { 0, 1, 0, 3, 40, 46, }, ++ { 2, 1, 0, 3, 40, 46, }, ++ { 1, 1, 0, 3, 40, 46, }, ++ { 0, 1, 0, 3, 44, 46, }, ++ { 2, 1, 0, 3, 44, 46, }, ++ { 1, 1, 0, 3, 44, 46, }, ++ { 0, 1, 0, 3, 48, 46, }, ++ { 2, 1, 0, 3, 48, 46, }, ++ { 1, 1, 0, 3, 48, 46, }, ++ { 0, 1, 0, 3, 52, 46, }, ++ { 2, 1, 0, 3, 52, 46, }, ++ { 1, 1, 0, 3, 52, 46, }, ++ { 0, 1, 0, 3, 56, 46, }, ++ { 2, 1, 0, 3, 56, 46, }, ++ { 1, 1, 0, 3, 56, 46, }, ++ { 0, 1, 0, 3, 60, 46, }, ++ { 2, 1, 0, 3, 60, 46, }, ++ { 1, 1, 0, 3, 60, 46, }, ++ { 0, 1, 0, 3, 64, 46, }, ++ { 2, 1, 0, 3, 64, 46, }, ++ { 1, 1, 0, 3, 64, 46, }, ++ { 0, 1, 0, 3, 100, 46, }, ++ { 2, 1, 0, 3, 100, 46, }, ++ { 1, 1, 0, 3, 100, 46, }, ++ { 0, 1, 0, 3, 104, 46, }, ++ { 2, 1, 0, 3, 104, 46, }, ++ { 1, 1, 0, 3, 104, 46, }, ++ { 0, 1, 0, 3, 108, 46, }, ++ { 2, 1, 0, 3, 108, 46, }, ++ { 1, 1, 0, 3, 108, 46, }, ++ { 0, 1, 0, 3, 112, 46, }, ++ { 2, 1, 0, 3, 112, 46, }, ++ { 1, 1, 0, 3, 112, 46, }, ++ { 0, 1, 0, 3, 116, 46, }, ++ { 2, 1, 0, 3, 116, 46, }, ++ { 1, 1, 0, 3, 116, 46, }, ++ { 0, 1, 0, 3, 120, 46, }, ++ { 2, 1, 0, 3, 120, 46, }, ++ { 1, 1, 0, 3, 120, 46, }, ++ { 0, 1, 0, 3, 124, 46, }, ++ { 2, 1, 0, 3, 124, 46, }, ++ { 1, 1, 0, 3, 124, 46, }, ++ { 0, 1, 0, 3, 128, 46, }, ++ { 2, 1, 0, 3, 128, 46, }, ++ { 1, 1, 0, 3, 128, 46, }, ++ { 0, 1, 0, 3, 132, 46, }, ++ { 2, 1, 0, 3, 132, 46, }, ++ { 1, 1, 0, 3, 132, 46, }, ++ { 0, 1, 0, 3, 136, 46, }, ++ { 2, 1, 0, 3, 136, 46, }, ++ { 1, 1, 0, 3, 136, 46, }, ++ { 0, 1, 0, 3, 140, 46, }, ++ { 2, 1, 0, 3, 140, 46, }, ++ { 1, 1, 0, 3, 140, 46, }, ++ { 0, 1, 0, 3, 149, 46, }, ++ { 2, 1, 0, 3, 149, 46, }, ++ { 1, 1, 0, 3, 149, 63, }, ++ { 0, 1, 0, 3, 153, 46, }, ++ { 2, 1, 0, 3, 153, 46, }, ++ { 1, 1, 0, 3, 153, 63, }, ++ { 0, 1, 0, 3, 157, 46, }, ++ { 2, 1, 0, 3, 157, 46, }, ++ { 1, 1, 0, 3, 157, 63, }, ++ { 0, 1, 0, 3, 161, 46, }, ++ { 2, 1, 0, 3, 161, 46, }, ++ { 1, 1, 0, 3, 161, 63, }, ++ { 0, 1, 0, 3, 165, 46, }, ++ { 2, 1, 0, 3, 165, 46, }, ++ { 1, 1, 0, 3, 165, 63, }, ++ { 0, 1, 0, 6, 36, 46, }, ++ { 2, 1, 0, 6, 36, 46, }, ++ { 1, 1, 0, 6, 36, 46, }, ++ { 0, 1, 0, 6, 40, 46, }, ++ { 2, 1, 0, 6, 40, 46, }, ++ { 1, 1, 0, 6, 40, 46, }, ++ { 0, 1, 0, 6, 44, 46, }, ++ { 2, 1, 0, 6, 44, 46, }, ++ { 1, 1, 0, 6, 44, 46, }, ++ { 0, 1, 0, 6, 48, 46, }, ++ { 2, 1, 0, 6, 48, 46, }, ++ { 1, 1, 0, 6, 48, 46, }, ++ { 0, 1, 0, 6, 52, 46, }, ++ { 2, 1, 0, 6, 52, 46, }, ++ { 1, 1, 0, 6, 52, 46, }, ++ { 0, 1, 0, 6, 56, 46, }, ++ { 2, 1, 0, 6, 56, 46, }, ++ { 1, 1, 0, 6, 56, 46, }, ++ { 0, 1, 0, 6, 60, 46, }, ++ { 2, 1, 0, 6, 60, 46, }, ++ { 1, 1, 0, 6, 60, 46, }, ++ { 0, 1, 0, 6, 64, 46, }, ++ { 2, 1, 0, 6, 64, 46, }, ++ { 1, 1, 0, 6, 64, 46, }, ++ { 0, 1, 0, 6, 100, 46, }, ++ { 2, 1, 0, 6, 100, 46, }, ++ { 1, 1, 0, 6, 100, 46, }, ++ { 0, 1, 0, 6, 104, 46, }, ++ { 2, 1, 0, 6, 104, 46, }, ++ { 1, 1, 0, 6, 104, 46, }, ++ { 0, 1, 0, 6, 108, 46, }, ++ { 2, 1, 0, 6, 108, 46, }, ++ { 1, 1, 0, 6, 108, 46, }, ++ { 0, 1, 0, 6, 112, 46, }, ++ { 2, 1, 0, 6, 112, 46, }, ++ { 1, 1, 0, 6, 112, 46, }, ++ { 0, 1, 0, 6, 116, 46, }, ++ { 2, 1, 0, 6, 116, 46, }, ++ { 1, 1, 0, 6, 116, 46, }, ++ { 0, 1, 0, 6, 120, 46, }, ++ { 2, 1, 0, 6, 120, 46, }, ++ { 1, 1, 0, 6, 120, 46, }, ++ { 0, 1, 0, 6, 124, 46, }, ++ { 2, 1, 0, 6, 124, 46, }, ++ { 1, 1, 0, 6, 124, 46, }, ++ { 0, 1, 0, 6, 128, 46, }, ++ { 2, 1, 0, 6, 128, 46, }, ++ { 1, 1, 0, 6, 128, 46, }, ++ { 0, 1, 0, 6, 132, 46, }, ++ { 2, 1, 0, 6, 132, 46, }, ++ { 1, 1, 0, 6, 132, 46, }, ++ { 0, 1, 0, 6, 136, 46, }, ++ { 2, 1, 0, 6, 136, 46, }, ++ { 1, 1, 0, 6, 136, 46, }, ++ { 0, 1, 0, 6, 140, 46, }, ++ { 2, 1, 0, 6, 140, 46, }, ++ { 1, 1, 0, 6, 140, 46, }, ++ { 0, 1, 0, 6, 149, 46, }, ++ { 2, 1, 0, 6, 149, 46, }, ++ { 1, 1, 0, 6, 149, 63, }, ++ { 0, 1, 0, 6, 153, 46, }, ++ { 2, 1, 0, 6, 153, 46, }, ++ { 1, 1, 0, 6, 153, 63, }, ++ { 0, 1, 0, 6, 157, 46, }, ++ { 2, 1, 0, 6, 157, 46, }, ++ { 1, 1, 0, 6, 157, 63, }, ++ { 0, 1, 0, 6, 161, 46, }, ++ { 2, 1, 0, 6, 161, 46, }, ++ { 1, 1, 0, 6, 161, 63, }, ++ { 0, 1, 0, 6, 165, 46, }, ++ { 2, 1, 0, 6, 165, 46, }, ++ { 1, 1, 0, 6, 165, 63, }, ++ { 0, 1, 0, 7, 36, 46, }, ++ { 2, 1, 0, 7, 36, 46, }, ++ { 1, 1, 0, 7, 36, 46, }, ++ { 0, 1, 0, 7, 40, 46, }, ++ { 2, 1, 0, 7, 40, 46, }, ++ { 1, 1, 0, 7, 40, 46, }, ++ { 0, 1, 0, 7, 44, 46, }, ++ { 2, 1, 0, 7, 44, 46, }, ++ { 1, 1, 0, 7, 44, 46, }, ++ { 0, 1, 0, 7, 48, 46, }, ++ { 2, 1, 0, 7, 48, 46, }, ++ { 1, 1, 0, 7, 48, 46, }, ++ { 0, 1, 0, 7, 52, 46, }, ++ { 2, 1, 0, 7, 52, 46, }, ++ { 1, 1, 0, 7, 52, 46, }, ++ { 0, 1, 0, 7, 56, 46, }, ++ { 2, 1, 0, 7, 56, 46, }, ++ { 1, 1, 0, 7, 56, 46, }, ++ { 0, 1, 0, 7, 60, 46, }, ++ { 2, 1, 0, 7, 60, 46, }, ++ { 1, 1, 0, 7, 60, 46, }, ++ { 0, 1, 0, 7, 64, 46, }, ++ { 2, 1, 0, 7, 64, 46, }, ++ { 1, 1, 0, 7, 64, 46, }, ++ { 0, 1, 0, 7, 100, 46, }, ++ { 2, 1, 0, 7, 100, 46, }, ++ { 1, 1, 0, 7, 100, 46, }, ++ { 0, 1, 0, 7, 104, 46, }, ++ { 2, 1, 0, 7, 104, 46, }, ++ { 1, 1, 0, 7, 104, 46, }, ++ { 0, 1, 0, 7, 108, 46, }, ++ { 2, 1, 0, 7, 108, 46, }, ++ { 1, 1, 0, 7, 108, 46, }, ++ { 0, 1, 0, 7, 112, 46, }, ++ { 2, 1, 0, 7, 112, 46, }, ++ { 1, 1, 0, 7, 112, 46, }, ++ { 0, 1, 0, 7, 116, 46, }, ++ { 2, 1, 0, 7, 116, 46, }, ++ { 1, 1, 0, 7, 116, 46, }, ++ { 0, 1, 0, 7, 120, 46, }, ++ { 2, 1, 0, 7, 120, 46, }, ++ { 1, 1, 0, 7, 120, 46, }, ++ { 0, 1, 0, 7, 124, 46, }, ++ { 2, 1, 0, 7, 124, 46, }, ++ { 1, 1, 0, 7, 124, 46, }, ++ { 0, 1, 0, 7, 128, 46, }, ++ { 2, 1, 0, 7, 128, 46, }, ++ { 1, 1, 0, 7, 128, 46, }, ++ { 0, 1, 0, 7, 132, 46, }, ++ { 2, 1, 0, 7, 132, 46, }, ++ { 1, 1, 0, 7, 132, 46, }, ++ { 0, 1, 0, 7, 136, 46, }, ++ { 2, 1, 0, 7, 136, 46, }, ++ { 1, 1, 0, 7, 136, 46, }, ++ { 0, 1, 0, 7, 140, 46, }, ++ { 2, 1, 0, 7, 140, 46, }, ++ { 1, 1, 0, 7, 140, 46, }, ++ { 0, 1, 0, 7, 149, 46, }, ++ { 2, 1, 0, 7, 149, 46, }, ++ { 1, 1, 0, 7, 149, 63, }, ++ { 0, 1, 0, 7, 153, 46, }, ++ { 2, 1, 0, 7, 153, 46, }, ++ { 1, 1, 0, 7, 153, 63, }, ++ { 0, 1, 0, 7, 157, 46, }, ++ { 2, 1, 0, 7, 157, 46, }, ++ { 1, 1, 0, 7, 157, 63, }, ++ { 0, 1, 0, 7, 161, 46, }, ++ { 2, 1, 0, 7, 161, 46, }, ++ { 1, 1, 0, 7, 161, 63, }, ++ { 0, 1, 0, 7, 165, 46, }, ++ { 2, 1, 0, 7, 165, 46, }, ++ { 1, 1, 0, 7, 165, 63, }, ++ { 0, 1, 1, 2, 38, 46, }, ++ { 2, 1, 1, 2, 38, 46, }, ++ { 1, 1, 1, 2, 38, 46, }, ++ { 0, 1, 1, 2, 46, 46, }, ++ { 2, 1, 1, 2, 46, 46, }, ++ { 1, 1, 1, 2, 46, 46, }, ++ { 0, 1, 1, 2, 54, 46, }, ++ { 2, 1, 1, 2, 54, 46, }, ++ { 1, 1, 1, 2, 54, 46, }, ++ { 0, 1, 1, 2, 62, 46, }, ++ { 2, 1, 1, 2, 62, 46, }, ++ { 1, 1, 1, 2, 62, 46, }, ++ { 0, 1, 1, 2, 102, 46, }, ++ { 2, 1, 1, 2, 102, 46, }, ++ { 1, 1, 1, 2, 102, 46, }, ++ { 0, 1, 1, 2, 110, 46, }, ++ { 2, 1, 1, 2, 110, 46, }, ++ { 1, 1, 1, 2, 110, 46, }, ++ { 0, 1, 1, 2, 118, 46, }, ++ { 2, 1, 1, 2, 118, 46, }, ++ { 1, 1, 1, 2, 118, 46, }, ++ { 0, 1, 1, 2, 126, 46, }, ++ { 2, 1, 1, 2, 126, 46, }, ++ { 1, 1, 1, 2, 126, 46, }, ++ { 0, 1, 1, 2, 134, 46, }, ++ { 2, 1, 1, 2, 134, 46, }, ++ { 1, 1, 1, 2, 134, 46, }, ++ { 0, 1, 1, 2, 151, 46, }, ++ { 2, 1, 1, 2, 151, 46, }, ++ { 1, 1, 1, 2, 151, 63, }, ++ { 0, 1, 1, 2, 159, 46, }, ++ { 2, 1, 1, 2, 159, 46, }, ++ { 1, 1, 1, 2, 159, 63, }, ++ { 0, 1, 1, 3, 38, 46, }, ++ { 2, 1, 1, 3, 38, 46, }, ++ { 1, 1, 1, 3, 38, 46, }, ++ { 0, 1, 1, 3, 46, 46, }, ++ { 2, 1, 1, 3, 46, 46, }, ++ { 1, 1, 1, 3, 46, 46, }, ++ { 0, 1, 1, 3, 54, 46, }, ++ { 2, 1, 1, 3, 54, 46, }, ++ { 1, 1, 1, 3, 54, 46, }, ++ { 0, 1, 1, 3, 62, 46, }, ++ { 2, 1, 1, 3, 62, 46, }, ++ { 1, 1, 1, 3, 62, 46, }, ++ { 0, 1, 1, 3, 102, 46, }, ++ { 2, 1, 1, 3, 102, 46, }, ++ { 1, 1, 1, 3, 102, 46, }, ++ { 0, 1, 1, 3, 110, 46, }, ++ { 2, 1, 1, 3, 110, 46, }, ++ { 1, 1, 1, 3, 110, 46, }, ++ { 0, 1, 1, 3, 118, 46, }, ++ { 2, 1, 1, 3, 118, 46, }, ++ { 1, 1, 1, 3, 118, 46, }, ++ { 0, 1, 1, 3, 126, 46, }, ++ { 2, 1, 1, 3, 126, 46, }, ++ { 1, 1, 1, 3, 126, 46, }, ++ { 0, 1, 1, 3, 134, 46, }, ++ { 2, 1, 1, 3, 134, 46, }, ++ { 1, 1, 1, 3, 134, 46, }, ++ { 0, 1, 1, 3, 151, 46, }, ++ { 2, 1, 1, 3, 151, 46, }, ++ { 1, 1, 1, 3, 151, 63, }, ++ { 0, 1, 1, 3, 159, 46, }, ++ { 2, 1, 1, 3, 159, 46, }, ++ { 1, 1, 1, 3, 159, 63, }, ++ { 0, 1, 1, 6, 38, 46, }, ++ { 2, 1, 1, 6, 38, 46, }, ++ { 1, 1, 1, 6, 38, 46, }, ++ { 0, 1, 1, 6, 46, 46, }, ++ { 2, 1, 1, 6, 46, 46, }, ++ { 1, 1, 1, 6, 46, 46, }, ++ { 0, 1, 1, 6, 54, 46, }, ++ { 2, 1, 1, 6, 54, 46, }, ++ { 1, 1, 1, 6, 54, 46, }, ++ { 0, 1, 1, 6, 62, 46, }, ++ { 2, 1, 1, 6, 62, 46, }, ++ { 1, 1, 1, 6, 62, 46, }, ++ { 0, 1, 1, 6, 102, 46, }, ++ { 2, 1, 1, 6, 102, 46, }, ++ { 1, 1, 1, 6, 102, 46, }, ++ { 0, 1, 1, 6, 110, 46, }, ++ { 2, 1, 1, 6, 110, 46, }, ++ { 1, 1, 1, 6, 110, 46, }, ++ { 0, 1, 1, 6, 118, 46, }, ++ { 2, 1, 1, 6, 118, 46, }, ++ { 1, 1, 1, 6, 118, 46, }, ++ { 0, 1, 1, 6, 126, 46, }, ++ { 2, 1, 1, 6, 126, 46, }, ++ { 1, 1, 1, 6, 126, 46, }, ++ { 0, 1, 1, 6, 134, 46, }, ++ { 2, 1, 1, 6, 134, 46, }, ++ { 1, 1, 1, 6, 134, 46, }, ++ { 0, 1, 1, 6, 151, 46, }, ++ { 2, 1, 1, 6, 151, 46, }, ++ { 1, 1, 1, 6, 151, 63, }, ++ { 0, 1, 1, 6, 159, 46, }, ++ { 2, 1, 1, 6, 159, 46, }, ++ { 1, 1, 1, 6, 159, 63, }, ++ { 0, 1, 1, 7, 38, 46, }, ++ { 2, 1, 1, 7, 38, 46, }, ++ { 1, 1, 1, 7, 38, 46, }, ++ { 0, 1, 1, 7, 46, 46, }, ++ { 2, 1, 1, 7, 46, 46, }, ++ { 1, 1, 1, 7, 46, 46, }, ++ { 0, 1, 1, 7, 54, 46, }, ++ { 2, 1, 1, 7, 54, 46, }, ++ { 1, 1, 1, 7, 54, 46, }, ++ { 0, 1, 1, 7, 62, 46, }, ++ { 2, 1, 1, 7, 62, 46, }, ++ { 1, 1, 1, 7, 62, 46, }, ++ { 0, 1, 1, 7, 102, 46, }, ++ { 2, 1, 1, 7, 102, 46, }, ++ { 1, 1, 1, 7, 102, 46, }, ++ { 0, 1, 1, 7, 110, 46, }, ++ { 2, 1, 1, 7, 110, 46, }, ++ { 1, 1, 1, 7, 110, 46, }, ++ { 0, 1, 1, 7, 118, 46, }, ++ { 2, 1, 1, 7, 118, 46, }, ++ { 1, 1, 1, 7, 118, 46, }, ++ { 0, 1, 1, 7, 126, 46, }, ++ { 2, 1, 1, 7, 126, 46, }, ++ { 1, 1, 1, 7, 126, 46, }, ++ { 0, 1, 1, 7, 134, 46, }, ++ { 2, 1, 1, 7, 134, 46, }, ++ { 1, 1, 1, 7, 134, 46, }, ++ { 0, 1, 1, 7, 151, 46, }, ++ { 2, 1, 1, 7, 151, 46, }, ++ { 1, 1, 1, 7, 151, 63, }, ++ { 0, 1, 1, 7, 159, 46, }, ++ { 2, 1, 1, 7, 159, 46, }, ++ { 1, 1, 1, 7, 159, 63, }, ++ { 0, 1, 2, 4, 42, 46, }, ++ { 2, 1, 2, 4, 42, 46, }, ++ { 1, 1, 2, 4, 42, 46, }, ++ { 0, 1, 2, 4, 58, 46, }, ++ { 2, 1, 2, 4, 58, 46, }, ++ { 1, 1, 2, 4, 58, 46, }, ++ { 0, 1, 2, 4, 106, 46, }, ++ { 2, 1, 2, 4, 106, 46, }, ++ { 1, 1, 2, 4, 106, 46, }, ++ { 0, 1, 2, 4, 122, 46, }, ++ { 2, 1, 2, 4, 122, 46, }, ++ { 1, 1, 2, 4, 122, 46, }, ++ { 0, 1, 2, 4, 155, 46, }, ++ { 2, 1, 2, 4, 155, 46, }, ++ { 1, 1, 2, 4, 155, 63, }, ++ { 0, 1, 2, 5, 42, 46, }, ++ { 2, 1, 2, 5, 42, 46, }, ++ { 1, 1, 2, 5, 42, 46, }, ++ { 0, 1, 2, 5, 58, 46, }, ++ { 2, 1, 2, 5, 58, 46, }, ++ { 1, 1, 2, 5, 58, 46, }, ++ { 0, 1, 2, 5, 106, 46, }, ++ { 2, 1, 2, 5, 106, 46, }, ++ { 1, 1, 2, 5, 106, 46, }, ++ { 0, 1, 2, 5, 122, 46, }, ++ { 2, 1, 2, 5, 122, 46, }, ++ { 1, 1, 2, 5, 122, 46, }, ++ { 0, 1, 2, 5, 155, 46, }, ++ { 2, 1, 2, 5, 155, 46, }, ++ { 1, 1, 2, 5, 155, 63, }, ++ { 0, 1, 2, 8, 42, 46, }, ++ { 2, 1, 2, 8, 42, 46, }, ++ { 1, 1, 2, 8, 42, 46, }, ++ { 0, 1, 2, 8, 58, 46, }, ++ { 2, 1, 2, 8, 58, 46, }, ++ { 1, 1, 2, 8, 58, 46, }, ++ { 0, 1, 2, 8, 106, 46, }, ++ { 2, 1, 2, 8, 106, 46, }, ++ { 1, 1, 2, 8, 106, 46, }, ++ { 0, 1, 2, 8, 122, 46, }, ++ { 2, 1, 2, 8, 122, 46, }, ++ { 1, 1, 2, 8, 122, 46, }, ++ { 0, 1, 2, 8, 155, 46, }, ++ { 2, 1, 2, 8, 155, 46, }, ++ { 1, 1, 2, 8, 155, 63, }, ++ { 0, 1, 2, 9, 42, 46, }, ++ { 2, 1, 2, 9, 42, 46, }, ++ { 1, 1, 2, 9, 42, 46, }, ++ { 0, 1, 2, 9, 58, 46, }, ++ { 2, 1, 2, 9, 58, 46, }, ++ { 1, 1, 2, 9, 58, 46, }, ++ { 0, 1, 2, 9, 106, 46, }, ++ { 2, 1, 2, 9, 106, 46, }, ++ { 1, 1, 2, 9, 106, 46, }, ++ { 0, 1, 2, 9, 122, 46, }, ++ { 2, 1, 2, 9, 122, 46, }, ++ { 1, 1, 2, 9, 122, 46, }, ++ { 0, 1, 2, 9, 155, 46, }, ++ { 2, 1, 2, 9, 155, 46, }, ++ { 1, 1, 2, 9, 155, 63, }, ++}; ++ ++RTW_DECL_TABLE_TXPWR_LMT(rtw8814a_txpwr_lmt_type8); ++ ++static const u8 ++rtw8814a_pwrtrk_5gd_n[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 1, 1, 2, 3, 3, 4, 5, 5, 6, 7, 7, 8, 9, 9, 10, 11, ++ 11, 12, 13, 13, 14, 15, 15, 16, 17, 17, 18, 19, 19}, ++ {0, 1, 1, 2, 2, 3, 4, 4, 5, 6, 6, 7, 7, 8, 9, 9, 10, 10, ++ 11, 12, 12, 13, 13, 14, 15, 15, 16, 17, 17, 18}, ++ {0, 1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 7, 8, 8, 9, 10, 10, ++ 11, 12, 12, 13, 14, 14, 15, 16, 16, 17, 17, 18, 19}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_5gd_p[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, ++ 17, 18, 19, 20, 21, 22, 23, 24, 25, 25, 25, 25, 25}, ++ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, ++ 17, 17, 18, 19, 20, 21, 22, 23, 24, 25, 25, 25, 25}, ++ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, ++ 17, 17, 18, 19, 20, 21, 22, 23, 24, 25, 25, 25, 25}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_5gc_n[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 1, 1, 2, 2, 3, 4, 4, 5, 5, 6, 7, 7, 8, 8, 9, 10, 10, ++ 11, 12, 13, 14, 15, 15, 15, 15, 16, 16, 17, 18}, ++ {0, 1, 1, 2, 3, 3, 4, 5, 6, 6, 7, 8, 8, 9, 10, 10, 11, ++ 12, 12, 13, 14, 15, 15, 16, 17, 17, 18, 19, 19, 20}, ++ {0, 1, 1, 2, 3, 4, 4, 5, 6, 6, 7, 8, 8, 9, 10, 11, 11, ++ 12, 13, 13, 14, 14, 15, 16, 17, 18, 18, 19, 20, 20}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_5gc_p[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, ++ 16, 16, 17, 18, 19, 20, 21, 21, 22, 23, 24, 25, 25}, ++ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, ++ 17, 17, 18, 19, 20, 21, 22, 23, 24, 24, 25, 25, 25}, ++ {0, 1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, ++ 16, 16, 17, 18, 19, 20, 21, 22, 23, 23, 24, 25, 25}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_5gb_n[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 1, 1, 2, 2, 3, 4, 4, 5, 5, 6, 7, 7, 8, 8, 9, 10, 10, ++ 11, 11, 12, 13, 13, 14, 14, 15, 15, 16, 17, 17}, ++ {0, 1, 1, 2, 3, 3, 4, 5, 6, 6, 7, 8, 8, 9, 10, 10, 11, ++ 12, 12, 13, 14, 15, 15, 16, 17, 17, 18, 19, 19, 20}, ++ {0, 1, 1, 2, 3, 4, 4, 5, 6, 6, 7, 8, 8, 9, 10, 11, 11, ++ 12, 13, 13, 14, 14, 15, 16, 17, 18, 18, 19, 20, 20}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_5gb_p[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 1, 2, 3, 3, 4, 5, 6, 7, 8, 8, 9, 10, 11, 12, 13, 14, ++ 15, 15, 16, 17, 18, 18, 19, 20, 21, 22, 23, 23, 24}, ++ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, ++ 17, 18, 18, 19, 20, 21, 22, 23, 24, 25, 25, 25, 25}, ++ {0, 1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, ++ 16, 16, 17, 18, 19, 20, 20, 21, 22, 23, 24, 25, 25}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_5ga_n[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, ++ 8, 9, 9, 10, 11, 11, 11, 11, 12, 12, 13, 13, 14}, ++ {0, 1, 1, 2, 3, 4, 4, 5, 6, 6, 7, 8, 9, 9, 10, 11, 11, ++ 12, 13, 14, 14, 15, 16, 16, 17, 18, 19, 19, 20, 21}, ++ {0, 1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 7, 8, 8, 9, 10, 10, ++ 11, 12, 12, 13, 14, 14, 15, 16, 16, 17, 17, 18, 19}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_5ga_p[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 1, 2, 2, 3, 4, 5, 6, 7, 7, 8, 9, 10, 11, 12, 12, 13, ++ 14, 15, 16, 16, 17, 18, 19, 20, 21, 21, 22, 23, 24}, ++ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, ++ 17, 18, 19, 20, 21, 22, 23, 23, 24, 25, 25, 25, 25}, ++ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, ++ 17, 17, 18, 19, 20, 21, 22, 23, 24, 25, 25, 25, 25}, ++}; ++ ++static const u8 rtw8814a_pwrtrk_2gd_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6, 6, 7, ++ 7, 8, 8, 9, 9, 9, 10, 10, 11, 11, 12, 12, 12 ++}; ++ ++static const u8 rtw8814a_pwrtrk_2gd_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 4, 5, 5, 6, 6, 7, 7, ++ 8, 8, 9, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13 ++}; ++ ++static const u8 rtw8814a_pwrtrk_2gc_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 2, 3, 3, 4, 4, 5, 5, 5, 6, 6, 7, ++ 7, 7, 8, 8, 9, 9, 10, 10, 10, 11, 11, 12, 12 ++}; ++ ++static const u8 rtw8814a_pwrtrk_2gc_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 4, 5, 5, 6, 6, 7, 7, ++ 8, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 12, 13 ++}; ++ ++static const u8 rtw8814a_pwrtrk_2gb_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 3, 4, 4, 5, 5, 5, 6, 6, 7, ++ 7, 8, 8, 8, 9, 9, 10, 10, 11, 11, 11, 12, 12 ++}; ++ ++static const u8 rtw8814a_pwrtrk_2gb_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 4, 5, 5, 6, 6, 7, 7, ++ 8, 8, 9, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13 ++}; ++ ++static const u8 rtw8814a_pwrtrk_2ga_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 4, 5, 5, 6, 6, 7, 7, ++ 7, 8, 8, 9, 9, 10, 10, 11, 11, 11, 12, 12, 13 ++}; ++ ++static const u8 rtw8814a_pwrtrk_2ga_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, ++ 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14 ++}; ++ ++static const u8 rtw8814a_pwrtrk_2g_cck_d_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 3, 4, 4, 5, 5, 5, 6, 6, 7, ++ 7, 8, 8, 8, 9, 9, 10, 10, 10, 11, 11, 12, 12 ++}; ++ ++static const u8 rtw8814a_pwrtrk_2g_cck_d_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 4, 5, 5, 6, 6, 7, 7, ++ 8, 8, 9, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13 ++}; ++ ++static const u8 rtw8814a_pwrtrk_2g_cck_c_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 2, 3, 3, 4, 4, 4, 5, 5, 6, 6, 6, ++ 7, 7, 8, 8, 8, 9, 9, 10, 10, 10, 11, 11, 12 ++}; ++ ++static const u8 rtw8814a_pwrtrk_2g_cck_c_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 4, 5, 5, 6, 6, 7, 7, ++ 7, 8, 8, 9, 9, 10, 10, 11, 11, 11, 12, 12, 13 ++}; ++ ++static const u8 rtw8814a_pwrtrk_2g_cck_b_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5, 5, 5, 6, ++ 6, 6, 7, 7, 8, 8, 8, 9, 9, 10, 10, 10, 11, 11 ++}; ++ ++static const u8 rtw8814a_pwrtrk_2g_cck_b_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6, 6, 7, ++ 7, 8, 8, 9, 9, 9, 10, 10, 11, 11, 12, 12, 12 ++}; ++ ++static const u8 rtw8814a_pwrtrk_2g_cck_a_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 3, 4, 4, 5, 5, 5, 6, 6, 7, ++ 7, 8, 8, 8, 9, 9, 10, 10, 11, 11, 11, 12, 12 ++}; ++ ++static const u8 rtw8814a_pwrtrk_2g_cck_a_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 7, ++ 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14 ++}; ++ ++const struct rtw_pwr_track_tbl rtw8814a_rtw_pwrtrk_tbl = { ++ .pwrtrk_5gd_n[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_5gd_n[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5gd_n[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_5gd_n[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5gd_n[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_5gd_n[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5gd_p[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_5gd_p[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5gd_p[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_5gd_p[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5gd_p[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_5gd_p[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5gc_n[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_5gc_n[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5gc_n[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_5gc_n[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5gc_n[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_5gc_n[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5gc_p[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_5gc_p[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5gc_p[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_5gc_p[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5gc_p[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_5gc_p[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5gb_n[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_5gb_n[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5gb_n[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_5gb_n[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5gb_n[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_5gb_n[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5gb_p[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_5gb_p[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5gb_p[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_5gb_p[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5gb_p[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_5gb_p[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5ga_n[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_5ga_n[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5ga_n[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_5ga_n[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5ga_n[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_5ga_n[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5ga_p[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_5ga_p[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5ga_p[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_5ga_p[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5ga_p[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_5ga_p[RTW_PWR_TRK_5G_3], ++ .pwrtrk_2gd_n = rtw8814a_pwrtrk_2gd_n, ++ .pwrtrk_2gd_p = rtw8814a_pwrtrk_2gd_p, ++ .pwrtrk_2gc_n = rtw8814a_pwrtrk_2gc_n, ++ .pwrtrk_2gc_p = rtw8814a_pwrtrk_2gc_p, ++ .pwrtrk_2gb_n = rtw8814a_pwrtrk_2gb_n, ++ .pwrtrk_2gb_p = rtw8814a_pwrtrk_2gb_p, ++ .pwrtrk_2ga_n = rtw8814a_pwrtrk_2ga_n, ++ .pwrtrk_2ga_p = rtw8814a_pwrtrk_2ga_p, ++ .pwrtrk_2g_cckd_n = rtw8814a_pwrtrk_2g_cck_d_n, ++ .pwrtrk_2g_cckd_p = rtw8814a_pwrtrk_2g_cck_d_p, ++ .pwrtrk_2g_cckc_n = rtw8814a_pwrtrk_2g_cck_c_n, ++ .pwrtrk_2g_cckc_p = rtw8814a_pwrtrk_2g_cck_c_p, ++ .pwrtrk_2g_cckb_n = rtw8814a_pwrtrk_2g_cck_b_n, ++ .pwrtrk_2g_cckb_p = rtw8814a_pwrtrk_2g_cck_b_p, ++ .pwrtrk_2g_ccka_n = rtw8814a_pwrtrk_2g_cck_a_n, ++ .pwrtrk_2g_ccka_p = rtw8814a_pwrtrk_2g_cck_a_p, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type0_5gd_n[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, ++ 8, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, ++ {0, 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, ++ 8, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, ++ {0, 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, ++ 8, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type0_5gd_p[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 0, 1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 7, 8, 8, 9, 10, 10, ++ 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, ++ {0, 0, 1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 7, 8, 8, 9, 10, 10, ++ 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, ++ {0, 0, 1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 7, 8, 8, 9, 10, 10, ++ 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type0_5gc_n[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, ++ 8, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, ++ {0, 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, ++ 8, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, ++ {0, 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, ++ 8, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type0_5gc_p[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 0, 1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 7, 8, 8, 9, 10, 10, ++ 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, ++ {0, 0, 1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 7, 8, 8, 9, 10, 10, ++ 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, ++ {0, 0, 1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 7, 8, 8, 9, 10, 10, ++ 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type0_5gb_n[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, ++ 8, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, ++ {0, 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, ++ 8, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, ++ {0, 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, ++ 8, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type0_5gb_p[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 0, 1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 7, 8, 8, 9, 10, 10, ++ 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, ++ {0, 0, 1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 7, 8, 8, 9, 10, 10, ++ 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, ++ {0, 0, 1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 7, 8, 8, 9, 10, 10, ++ 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type0_5ga_n[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, ++ 8, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, ++ {0, 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, ++ 8, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, ++ {0, 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, ++ 8, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type0_5ga_p[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 0, 1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 7, 8, 8, 9, 10, 10, ++ 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, ++ {0, 0, 1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 7, 8, 8, 9, 10, 10, ++ 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, ++ {0, 0, 1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 7, 8, 8, 9, 10, 10, ++ 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, ++}; ++ ++static const u8 rtw8814a_pwrtrk_type0_2gd_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 5, 6, 7, 7, ++ 7, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type0_2gd_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, ++ 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type0_2gc_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 5, 6, 7, 7, ++ 7, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type0_2gc_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, ++ 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type0_2gb_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 5, 6, 7, 7, ++ 7, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type0_2gb_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, ++ 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type0_2ga_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 5, 6, 7, 7, ++ 7, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type0_2ga_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, ++ 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type0_2g_cck_d_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 5, 6, 7, 7, ++ 7, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type0_2g_cck_d_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, ++ 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type0_2g_cck_c_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 5, 6, 7, 7, ++ 7, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type0_2g_cck_c_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, ++ 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type0_2g_cck_b_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 5, 6, 7, 7, ++ 7, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type0_2g_cck_b_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, ++ 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type0_2g_cck_a_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 5, 6, 7, 7, ++ 7, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type0_2g_cck_a_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, ++ 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 ++}; ++ ++const struct rtw_pwr_track_tbl rtw8814a_rtw_pwrtrk_type0_tbl = { ++ .pwrtrk_5gd_n[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type0_5gd_n[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5gd_n[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type0_5gd_n[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5gd_n[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type0_5gd_n[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5gd_p[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type0_5gd_p[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5gd_p[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type0_5gd_p[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5gd_p[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type0_5gd_p[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5gc_n[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type0_5gc_n[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5gc_n[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type0_5gc_n[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5gc_n[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type0_5gc_n[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5gc_p[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type0_5gc_p[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5gc_p[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type0_5gc_p[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5gc_p[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type0_5gc_p[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5gb_n[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type0_5gb_n[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5gb_n[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type0_5gb_n[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5gb_n[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type0_5gb_n[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5gb_p[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type0_5gb_p[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5gb_p[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type0_5gb_p[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5gb_p[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type0_5gb_p[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5ga_n[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type0_5ga_n[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5ga_n[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type0_5ga_n[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5ga_n[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type0_5ga_n[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5ga_p[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type0_5ga_p[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5ga_p[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type0_5ga_p[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5ga_p[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type0_5ga_p[RTW_PWR_TRK_5G_3], ++ .pwrtrk_2gd_n = rtw8814a_pwrtrk_type0_2gd_n, ++ .pwrtrk_2gd_p = rtw8814a_pwrtrk_type0_2gd_p, ++ .pwrtrk_2gc_n = rtw8814a_pwrtrk_type0_2gc_n, ++ .pwrtrk_2gc_p = rtw8814a_pwrtrk_type0_2gc_p, ++ .pwrtrk_2gb_n = rtw8814a_pwrtrk_type0_2gb_n, ++ .pwrtrk_2gb_p = rtw8814a_pwrtrk_type0_2gb_p, ++ .pwrtrk_2ga_n = rtw8814a_pwrtrk_type0_2ga_n, ++ .pwrtrk_2ga_p = rtw8814a_pwrtrk_type0_2ga_p, ++ .pwrtrk_2g_cckd_n = rtw8814a_pwrtrk_type0_2g_cck_d_n, ++ .pwrtrk_2g_cckd_p = rtw8814a_pwrtrk_type0_2g_cck_d_p, ++ .pwrtrk_2g_cckc_n = rtw8814a_pwrtrk_type0_2g_cck_c_n, ++ .pwrtrk_2g_cckc_p = rtw8814a_pwrtrk_type0_2g_cck_c_p, ++ .pwrtrk_2g_cckb_n = rtw8814a_pwrtrk_type0_2g_cck_b_n, ++ .pwrtrk_2g_cckb_p = rtw8814a_pwrtrk_type0_2g_cck_b_p, ++ .pwrtrk_2g_ccka_n = rtw8814a_pwrtrk_type0_2g_cck_a_n, ++ .pwrtrk_2g_ccka_p = rtw8814a_pwrtrk_type0_2g_cck_a_p, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type2_5gd_n[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 9, 10, 10, 11, 11, 12, 12, ++ 12, 13, 14, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16}, ++ {0, 1, 2, 3, 4, 5, 5, 6, 6, 7, 8, 9, 9, 10, 10, 10, 10, ++ 11, 11, 12, 12, 13, 14, 15, 16, 16, 16, 16, 16, 16}, ++ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 10, 10, 11, 11, 11, 12, ++ 12, 13, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type2_5gd_p[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 10, 11, 12, 13, 14, ++ 15, 16, 17, 18, 19, 20, 21, 22, 22, 22, 22, 22, 22}, ++ {0, 1, 2, 3, 4, 4, 5, 6, 7, 7, 8, 9, 10, 11, 12, 13, 14, ++ 15, 16, 17, 18, 19, 20, 21, 22, 22, 22, 22, 22, 22}, ++ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, ++ 17, 18, 19, 20, 21, 22, 23, 23, 23, 23, 23, 23, 23}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type2_5gc_n[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 1, 2, 3, 3, 4, 5, 6, 7, 7, 8, 9, 10, 10, 11, 11, 12, ++ 12, 13, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15}, ++ {0, 1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 9, 10, 10, 11, 11, 12, ++ 13, 13, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15}, ++ {0, 1, 2, 3, 4, 4, 5, 6, 6, 7, 8, 8, 9, 9, 10, 11, 11, ++ 12, 12, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type2_5gc_p[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 1, 2, 3, 4, 5, 6, 6, 7, 8, 9, 10, 11, 11, 12, 13, 14, ++ 15, 16, 17, 18, 19, 20, 21, 21, 21, 21, 21, 21, 21}, ++ {0, 1, 2, 3, 4, 5, 6, 6, 7, 8, 8, 9, 10, 11, 12, 13, 14, ++ 15, 16, 17, 18, 19, 20, 20, 20, 21, 21, 21, 21, 21}, ++ {0, 1, 2, 3, 3, 4, 5, 6, 7, 7, 8, 9, 10, 11, 12, 13, 14, ++ 15, 16, 17, 18, 19, 20, 21, 21, 21, 21, 21, 21, 21}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type2_5gb_n[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 1, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 11, 12, 13, ++ 13, 13, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15}, ++ {0, 1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 9, 10, 10, 11, 11, 12, ++ 13, 13, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15}, ++ {0, 1, 2, 3, 4, 4, 5, 6, 6, 7, 8, 8, 9, 9, 10, 11, 11, ++ 12, 12, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type2_5gb_p[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 11, 12, 13, 14, 15, ++ 16, 17, 18, 19, 20, 21, 21, 21, 21, 21, 21, 21, 21}, ++ {0, 0, 1, 2, 3, 4, 5, 6, 6, 7, 8, 9, 10, 10, 11, 12, 13, ++ 14, 15, 16, 17, 18, 19, 20, 20, 20, 20, 20, 20, 20}, ++ {0, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 11, 12, 13, 14, ++ 15, 16, 17, 18, 19, 20, 21, 21, 21, 21, 21, 21, 21}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type2_5ga_n[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 1, 2, 3, 4, 5, 5, 6, 7, 7, 8, 9, 10, 10, 11, 11, 11, ++ 12, 13, 13, 13, 13, 14, 15, 15, 15, 15, 15, 15, 15}, ++ {0, 1, 2, 3, 3, 4, 5, 6, 7, 8, 8, 9, 10, 10, 11, 12, 12, ++ 12, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14}, ++ {0, 1, 2, 3, 4, 4, 5, 6, 7, 7, 8, 9, 10, 11, 11, 11, 12, ++ 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type2_5ga_p[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 10, 10, 11, 12, 13, 14, ++ 15, 15, 16, 17, 18, 18, 19, 19, 20, 20, 20, 20, 20}, ++ {0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 11, 12, 13, 14, ++ 15, 16, 16, 17, 18, 19, 20, 20, 20, 20, 20, 20, 20}, ++ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 11, 12, 13, 14, 15, ++ 15, 16, 17, 18, 19, 19, 20, 20, 20, 20, 20, 20, 20}, ++}; ++ ++static const u8 rtw8814a_pwrtrk_type2_2gd_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, ++ 6, 6, 7, 8, 9, 10, 11, 11, 11, 11, 11, 11, 11 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type2_2gd_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 6, 6, 7, 7, 8, 9, 9, 10, ++ 10, 11, 12, 12, 13, 14, 14, 14, 14, 14, 14, 14 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type2_2gc_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 1, 1, 2, 2, 3, 3, 4, 5, 6, 6, 6, 7, 7, 8, 8, 9, 10, ++ 10, 11, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type2_2gc_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 1, 1, 2, 3, 3, 4, 4, 4, 5, 5, 6, 7, 8, 8, 9, 10, 10, ++ 11, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type2_2gb_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 1, 1, 2, 2, 3, 3, 4, 5, 5, 6, 6, 7, 7, 8, 8, 8, ++ 9, 9, 10, 10, 11, 11, 12, 12, 12, 13, 14, 14, 14 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type2_2gb_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 6, 6, 7, 8, 8, 9, 9, 10, ++ 10, 11, 12, 12, 13, 13, 13, 13, 13, 14, 14, 14 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type2_2ga_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 2, 2, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 9, 9, 9, ++ 10, 11, 11, 12, 12, 13, 13, 13, 13, 13, 13, 13 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type2_2ga_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 1, 1, 2, 3, 3, 4, 4, 4, 5, 6, 6, 7, 7, 8, 8, 9, 10, ++ 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type2_2g_cck_d_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 1, 1, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 7, 8, ++ 9, 9, 9, 9, 9, 9, 10, 10, 11, 11, 12, 12, 12 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type2_2g_cck_d_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 1, 1, 1, 2, 3, 3, 4, 4, 5, 6, 6, 7, 8, 8, 9, 10, 10, ++ 10, 11, 12, 12, 13, 14, 14, 14, 14, 14, 14, 14 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type2_2g_cck_c_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 2, 2, 3, 4, 5, 5, 6, 6, 6, 6, 7, 8, 9, 9, 10, ++ 10, 11, 11, 11, 12, 13, 13, 13, 13, 13, 13, 13 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type2_2g_cck_c_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 5, 5, 6, 7, 7, 8, 9, 9, 10, ++ 10, 11, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type2_2g_cck_b_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 1, 1, 2, 2, 2, 3, 3, 4, 5, 6, 6, 7, 7, 8, 8, 9, 10, ++ 10, 10, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type2_2g_cck_b_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 1, 1, 1, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 8, 9, 9, 10, ++ 10, 11, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type2_2g_cck_a_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 1, 2, 2, 3, 4, 4, 4, 5, 5, 6, 6, 7, 8, 9, 9, 9, 9, ++ 10, 10, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type2_2g_cck_a_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 2, 2, 3, 3, 4, 5, 5, 6, 7, 8, 9, 9, 10, 10, ++ 11, 11, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13 ++}; ++ ++const struct rtw_pwr_track_tbl rtw8814a_rtw_pwrtrk_type2_tbl = { ++ .pwrtrk_5gd_n[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type2_5gd_n[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5gd_n[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type2_5gd_n[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5gd_n[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type2_5gd_n[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5gd_p[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type2_5gd_p[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5gd_p[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type2_5gd_p[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5gd_p[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type2_5gd_p[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5gc_n[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type2_5gc_n[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5gc_n[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type2_5gc_n[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5gc_n[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type2_5gc_n[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5gc_p[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type2_5gc_p[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5gc_p[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type2_5gc_p[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5gc_p[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type2_5gc_p[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5gb_n[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type2_5gb_n[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5gb_n[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type2_5gb_n[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5gb_n[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type2_5gb_n[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5gb_p[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type2_5gb_p[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5gb_p[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type2_5gb_p[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5gb_p[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type2_5gb_p[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5ga_n[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type2_5ga_n[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5ga_n[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type2_5ga_n[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5ga_n[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type2_5ga_n[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5ga_p[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type2_5ga_p[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5ga_p[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type2_5ga_p[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5ga_p[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type2_5ga_p[RTW_PWR_TRK_5G_3], ++ .pwrtrk_2gd_n = rtw8814a_pwrtrk_type2_2gd_n, ++ .pwrtrk_2gd_p = rtw8814a_pwrtrk_type2_2gd_p, ++ .pwrtrk_2gc_n = rtw8814a_pwrtrk_type2_2gc_n, ++ .pwrtrk_2gc_p = rtw8814a_pwrtrk_type2_2gc_p, ++ .pwrtrk_2gb_n = rtw8814a_pwrtrk_type2_2gb_n, ++ .pwrtrk_2gb_p = rtw8814a_pwrtrk_type2_2gb_p, ++ .pwrtrk_2ga_n = rtw8814a_pwrtrk_type2_2ga_n, ++ .pwrtrk_2ga_p = rtw8814a_pwrtrk_type2_2ga_p, ++ .pwrtrk_2g_cckd_n = rtw8814a_pwrtrk_type2_2g_cck_d_n, ++ .pwrtrk_2g_cckd_p = rtw8814a_pwrtrk_type2_2g_cck_d_p, ++ .pwrtrk_2g_cckc_n = rtw8814a_pwrtrk_type2_2g_cck_c_n, ++ .pwrtrk_2g_cckc_p = rtw8814a_pwrtrk_type2_2g_cck_c_p, ++ .pwrtrk_2g_cckb_n = rtw8814a_pwrtrk_type2_2g_cck_b_n, ++ .pwrtrk_2g_cckb_p = rtw8814a_pwrtrk_type2_2g_cck_b_p, ++ .pwrtrk_2g_ccka_n = rtw8814a_pwrtrk_type2_2g_cck_a_n, ++ .pwrtrk_2g_ccka_p = rtw8814a_pwrtrk_type2_2g_cck_a_p, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type5_5gd_n[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 3, 3, 3, 4, 6, 6, 7, 7, 8, 9, 10, 11, 12, 13, 13, 14, ++ 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15}, ++ {0, 4, 5, 6, 7, 7, 8, 7, 8, 10, 11, 12, 12, 13, 13, 14, 14, ++ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15}, ++ {0, 5, 5, 6, 7, 8, 9, 9, 10, 11, 12, 13, 13, 14, 15, 15, 16, ++ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type5_5gd_p[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 0, 0, 1, 2, 2, 3, 4, 5, 5, 6, 7, 9, 10, 10, 11, 12, ++ 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13}, ++ {0, 0, 0, 1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 11, 12, ++ 12, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14}, ++ {0, 0, 0, 1, 1, 2, 2, 3, 5, 7, 8, 9, 10, 11, 12, 13, 13, ++ 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type5_5gc_n[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 1, 1, 2, 3, 3, 4, 6, 7, 7, 8, 9, 9, 9, 10, 10, 10, ++ 10, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12}, ++ {0, 1, 2, 3, 3, 7, 7, 8, 8, 9, 11, 12, 12, 13, 14, 14, 15, ++ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15}, ++ {0, 0, 1, 2, 3, 4, 5, 7, 8, 8, 10, 11, 12, 12, 13, 13, 14, ++ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type5_5gc_p[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 0, 0, 1, 1, 2, 2, 3, 4, 5, 6, 6, 7, 8, 9, 11, 11, ++ 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 13}, ++ {0, 0, 1, 2, 3, 3, 5, 5, 6, 8, 8, 9, 10, 11, 13, 13, 13, ++ 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14}, ++ {0, 0, 1, 2, 3, 4, 4, 5, 7, 8, 9, 9, 10, 11, 12, 12, 12, ++ 12, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type5_5gb_n[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 1, 1, 2, 2, 2, 3, 4, 5, 6, 7, 9, 10, 10, 10, 10, 10, ++ 10, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12}, ++ {0, 1, 2, 3, 3, 7, 7, 8, 8, 9, 11, 12, 12, 13, 14, 14, 15, ++ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15}, ++ {0, 0, 1, 2, 3, 4, 5, 7, 8, 8, 10, 11, 12, 12, 13, 13, 14, ++ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type5_5gb_p[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 1, 1, 1, 2, 2, 4, 5, 6, 6, 7, 8, 9, 10, 11, 11, 11, ++ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, ++ {0, 0, 0, 2, 3, 4, 5, 6, 8, 8, 9, 9, 11, 12, 13, 13, 13, ++ 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14}, ++ {0, 0, 0, 1, 2, 3, 3, 4, 6, 7, 8, 9, 10, 11, 12, 12, 12, ++ 12, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type5_5ga_n[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 0, 0, 1, 2, 3, 3, 3, 4, 5, 6, 6, 7, 8, 8, 9, 10, 10, ++ 10, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12}, ++ {0, 2, 3, 4, 5, 7, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 17, ++ 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18}, ++ {0, 1, 2, 3, 3, 4, 6, 7, 8, 8, 10, 11, 11, 12, 13, 13, 13, ++ 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type5_5ga_p[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 1, 1, 3, 3, 3, 5, 5, 6, 6, 8, 8, 9, 10, 11, 11, 11, ++ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, ++ {0, 1, 2, 3, 4, 4, 5, 6, 7, 8, 8, 9, 11, 12, 13, 14, 15, ++ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15}, ++ {0, 0, 1, 3, 3, 4, 5, 5, 6, 7, 7, 8, 10, 10, 11, 11, 11, ++ 11, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13}, ++}; ++ ++static const u8 rtw8814a_pwrtrk_type5_2gd_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 1, 2, 2, 3, 4, 4, 5, 6, 6, 7, 7, 7, 8, 9, 9, 9, ++ 9, 9, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type5_2gd_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 1, 1, 2, 2, 2, 3, 4, 4, 5, 6, 6, 7, 7, 8, 8, ++ 8, 8, 8, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type5_2gc_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 1, 2, 2, 3, 4, 4, 5, 6, 6, 7, 8, 8, 9, 10, 10, 10, ++ 10, 10, 10, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type5_2gc_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 8, 8, 9, 9, 9, ++ 9, 9, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type5_2gb_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 1, 2, 2, 3, 4, 4, 5, 6, 6, 7, 7, 8, 9, 10, 10, 10, ++ 10, 10, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type5_2gb_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 8, 9, 9, 9, 9, ++ 9, 9, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type5_2ga_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 1, 2, 2, 3, 4, 5, 5, 6, 7, 7, 8, 8, 9, 10, 10, 10, ++ 10, 11, 11, 11, 11, 111, 12, 12, 12, 12, 12, 12, 12 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type5_2ga_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 6, 7, 8, 8, 9, 9, 9, ++ 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type5_2g_cck_d_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 1, 2, 2, 3, 4, 5, 5, 6, 7, 7, 8, 8, 8, 9, 9, 9, 9, ++ 10, 10, 10, 10, 10, 11, 11, 10, 11, 11, 11, 11 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type5_2g_cck_d_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 7, 8, 8, 8, ++ 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type5_2g_cck_c_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 2, 3, 4, 4, 5, 6, 6, 7, 8, 8, 8, 8, 9, 10, 10, 10, ++ 10, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type5_2g_cck_c_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 7, 8, 8, 8, ++ 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type5_2g_cck_b_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 2, 3, 4, 4, 5, 6, 6, 6, 7, 7, 8, 8, 9, 10, 10, 10, ++ 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type5_2g_cck_b_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 7, 8, 8, 8, ++ 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type5_2g_cck_a_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 1, 2, 2, 3, 4, 5, 5, 6, 7, 7, 8, 8, 9, 9, 9, 9, 10, ++ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type5_2g_cck_a_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 1, 1, 2, 2, 2, 3, 4, 4, 5, 6, 7, 8, 8, 9, 9, 9, ++ 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10 ++}; ++ ++const struct rtw_pwr_track_tbl rtw8814a_rtw_pwrtrk_type5_tbl = { ++ .pwrtrk_5gd_n[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type5_5gd_n[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5gd_n[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type5_5gd_n[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5gd_n[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type5_5gd_n[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5gd_p[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type5_5gd_p[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5gd_p[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type5_5gd_p[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5gd_p[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type5_5gd_p[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5gc_n[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type5_5gc_n[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5gc_n[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type5_5gc_n[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5gc_n[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type5_5gc_n[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5gc_p[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type5_5gc_p[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5gc_p[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type5_5gc_p[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5gc_p[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type5_5gc_p[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5gb_n[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type5_5gb_n[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5gb_n[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type5_5gb_n[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5gb_n[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type5_5gb_n[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5gb_p[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type5_5gb_p[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5gb_p[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type5_5gb_p[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5gb_p[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type5_5gb_p[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5ga_n[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type5_5ga_n[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5ga_n[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type5_5ga_n[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5ga_n[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type5_5ga_n[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5ga_p[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type5_5ga_p[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5ga_p[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type5_5ga_p[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5ga_p[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type5_5ga_p[RTW_PWR_TRK_5G_3], ++ .pwrtrk_2gd_n = rtw8814a_pwrtrk_type5_2gd_n, ++ .pwrtrk_2gd_p = rtw8814a_pwrtrk_type5_2gd_p, ++ .pwrtrk_2gc_n = rtw8814a_pwrtrk_type5_2gc_n, ++ .pwrtrk_2gc_p = rtw8814a_pwrtrk_type5_2gc_p, ++ .pwrtrk_2gb_n = rtw8814a_pwrtrk_type5_2gb_n, ++ .pwrtrk_2gb_p = rtw8814a_pwrtrk_type5_2gb_p, ++ .pwrtrk_2ga_n = rtw8814a_pwrtrk_type5_2ga_n, ++ .pwrtrk_2ga_p = rtw8814a_pwrtrk_type5_2ga_p, ++ .pwrtrk_2g_cckd_n = rtw8814a_pwrtrk_type5_2g_cck_d_n, ++ .pwrtrk_2g_cckd_p = rtw8814a_pwrtrk_type5_2g_cck_d_p, ++ .pwrtrk_2g_cckc_n = rtw8814a_pwrtrk_type5_2g_cck_c_n, ++ .pwrtrk_2g_cckc_p = rtw8814a_pwrtrk_type5_2g_cck_c_p, ++ .pwrtrk_2g_cckb_n = rtw8814a_pwrtrk_type5_2g_cck_b_n, ++ .pwrtrk_2g_cckb_p = rtw8814a_pwrtrk_type5_2g_cck_b_p, ++ .pwrtrk_2g_ccka_n = rtw8814a_pwrtrk_type5_2g_cck_a_n, ++ .pwrtrk_2g_ccka_p = rtw8814a_pwrtrk_type5_2g_cck_a_p, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type7_5gd_n[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, ++ 8, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, ++ {0, 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, ++ 8, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, ++ {0, 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, ++ 8, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type7_5gd_p[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 0, 1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 7, 8, 8, 9, 10, 10, ++ 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, ++ {0, 0, 1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 7, 8, 8, 9, 10, 10, ++ 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, ++ {0, 0, 1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 7, 8, 8, 9, 10, 10, ++ 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type7_5gc_n[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, ++ 8, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, ++ {0, 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, ++ 8, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, ++ {0, 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, ++ 8, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type7_5gc_p[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 0, 1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 7, 8, 8, 9, 10, 10, ++ 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, ++ {0, 0, 1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 7, 8, 8, 9, 10, 10, ++ 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, ++ {0, 0, 1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 7, 8, 8, 9, 10, 10, ++ 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type7_5gb_n[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, ++ 8, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, ++ {0, 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, ++ 8, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, ++ {0, 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, ++ 8, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type7_5gb_p[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 0, 1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 7, 8, 8, 9, 10, 10, ++ 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, ++ {0, 0, 1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 7, 8, 8, 9, 10, 10, ++ 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, ++ {0, 0, 1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 7, 8, 8, 9, 10, 10, ++ 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type7_5ga_n[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, ++ 8, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, ++ {0, 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, ++ 8, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, ++ {0, 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, ++ 8, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type7_5ga_p[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 0, 1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 7, 8, 8, 9, 10, 10, ++ 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, ++ {0, 0, 1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 7, 8, 8, 9, 10, 10, ++ 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, ++ {0, 0, 1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 7, 8, 8, 9, 10, 10, ++ 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, ++}; ++ ++static const u8 rtw8814a_pwrtrk_type7_2gd_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 5, 6, 7, 7, ++ 7, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type7_2gd_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, ++ 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type7_2gc_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 5, 6, 7, 7, ++ 7, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type7_2gc_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, ++ 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type7_2gb_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 5, 6, 7, 7, ++ 7, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type7_2gb_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, ++ 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type7_2ga_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 5, 6, 7, 7, ++ 7, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type7_2ga_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, ++ 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type7_2g_cck_d_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 5, 6, 7, 7, ++ 7, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type7_2g_cck_d_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, ++ 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type7_2g_cck_c_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 5, 6, 7, 7, ++ 7, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type7_2g_cck_c_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, ++ 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type7_2g_cck_b_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 5, 6, 7, 7, ++ 7, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type7_2g_cck_b_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, ++ 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type7_2g_cck_a_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 5, 6, 7, 7, ++ 7, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type7_2g_cck_a_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, ++ 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 ++}; ++ ++const struct rtw_pwr_track_tbl rtw8814a_rtw_pwrtrk_type7_tbl = { ++ .pwrtrk_5gd_n[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type7_5gd_n[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5gd_n[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type7_5gd_n[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5gd_n[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type7_5gd_n[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5gd_p[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type7_5gd_p[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5gd_p[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type7_5gd_p[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5gd_p[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type7_5gd_p[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5gc_n[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type7_5gc_n[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5gc_n[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type7_5gc_n[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5gc_n[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type7_5gc_n[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5gc_p[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type7_5gc_p[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5gc_p[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type7_5gc_p[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5gc_p[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type7_5gc_p[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5gb_n[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type7_5gb_n[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5gb_n[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type7_5gb_n[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5gb_n[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type7_5gb_n[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5gb_p[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type7_5gb_p[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5gb_p[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type7_5gb_p[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5gb_p[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type7_5gb_p[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5ga_n[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type7_5ga_n[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5ga_n[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type7_5ga_n[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5ga_n[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type7_5ga_n[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5ga_p[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type7_5ga_p[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5ga_p[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type7_5ga_p[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5ga_p[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type7_5ga_p[RTW_PWR_TRK_5G_3], ++ .pwrtrk_2gd_n = rtw8814a_pwrtrk_type7_2gd_n, ++ .pwrtrk_2gd_p = rtw8814a_pwrtrk_type7_2gd_p, ++ .pwrtrk_2gc_n = rtw8814a_pwrtrk_type7_2gc_n, ++ .pwrtrk_2gc_p = rtw8814a_pwrtrk_type7_2gc_p, ++ .pwrtrk_2gb_n = rtw8814a_pwrtrk_type7_2gb_n, ++ .pwrtrk_2gb_p = rtw8814a_pwrtrk_type7_2gb_p, ++ .pwrtrk_2ga_n = rtw8814a_pwrtrk_type7_2ga_n, ++ .pwrtrk_2ga_p = rtw8814a_pwrtrk_type7_2ga_p, ++ .pwrtrk_2g_cckd_n = rtw8814a_pwrtrk_type7_2g_cck_d_n, ++ .pwrtrk_2g_cckd_p = rtw8814a_pwrtrk_type7_2g_cck_d_p, ++ .pwrtrk_2g_cckc_n = rtw8814a_pwrtrk_type7_2g_cck_c_n, ++ .pwrtrk_2g_cckc_p = rtw8814a_pwrtrk_type7_2g_cck_c_p, ++ .pwrtrk_2g_cckb_n = rtw8814a_pwrtrk_type7_2g_cck_b_n, ++ .pwrtrk_2g_cckb_p = rtw8814a_pwrtrk_type7_2g_cck_b_p, ++ .pwrtrk_2g_ccka_n = rtw8814a_pwrtrk_type7_2g_cck_a_n, ++ .pwrtrk_2g_ccka_p = rtw8814a_pwrtrk_type7_2g_cck_a_p, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type8_5gd_n[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 1, 2, 3, 4, 4, 6, 7, 7, 8, 8, 9, 10, 10, 11, 11, 12, ++ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13}, ++ {0, 1, 2, 3, 4, 4, 6, 7, 7, 8, 9, 9, 10, 10, 11, 11, 12, ++ 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13}, ++ {0, 1, 2, 3, 4, 4, 5, 6, 6, 7, 7, 8, 8, 8, 9, 10, 10, ++ 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type8_5gd_p[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 0, 1, 2, 4, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 14, ++ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15}, ++ {0, 0, 1, 2, 3, 5, 5, 6, 6, 7, 8, 9, 10, 11, 12, 13, 14, ++ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14}, ++ {0, 0, 1, 2, 3, 4, 5, 6, 6, 7, 8, 9, 10, 11, 12, 13, 14, ++ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type8_5gc_n[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 1, 2, 4, 4, 5, 6, 7, 7, 8, 8, 9, 9, 10, 11, 11, 12, ++ 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13}, ++ {0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 9, 9, 10, 10, 10, 11, 11, ++ 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13}, ++ {0, 1, 2, 3, 4, 4, 5, 6, 7, 7, 8, 8, 9, 10, 10, 11, 11, ++ 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type8_5gc_p[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 0, 1, 2, 4, 4, 5, 6, 7, 7, 8, 9, 10, 11, 12, 13, 14, ++ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14}, ++ {0, 0, 1, 3, 4, 4, 5, 6, 7, 7, 8, 10, 11, 12, 13, 14, ++ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15}, ++ {0, 0, 1, 2, 4, 5, 5, 6, 6, 7, 7, 9, 10, 11, 12, 13, 14, ++ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type8_5gb_n[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 1, 2, 3, 4, 4, 5, 6, 7, 7, 8, 8, 9, 9, 10, 11, 11, ++ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, ++ {0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 9, 9, 10, 10, 10, 11, 11, ++ 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13}, ++ {0, 1, 2, 3, 4, 4, 5, 6, 7, 7, 8, 8, 9, 10, 10, 11, 11, ++ 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type8_5gb_p[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 0, 1, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ++ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14}, ++ {0, 0, 1, 2, 3, 4, 5, 5, 6, 7, 8, 10, 11, 11, 13, 13, ++ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14}, ++ {0, 0, 1, 2, 3, 4, 4, 5, 6, 7, 8, 10, 10, 11, 13, 13, ++ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type8_5ga_n[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 1, 2, 3, 4, 4, 5, 6, 6, 7, 8, 8, 9, 9, 10, 11, 11, ++ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, ++ {0, 1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 9, 10, 10, 10, 11, 11, ++ 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13}, ++ {0, 1, 2, 3, 4, 4, 5, 6, 7, 7, 8, 9, 10, 10, 10, 11, 12, ++ 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13}, ++}; ++ ++static const u8 ++rtw8814a_pwrtrk_type8_5ga_p[RTW_PWR_TRK_5G_NUM][RTW_PWR_TRK_TBL_SZ] = { ++ {0, 0, 1, 2, 3, 3, 4, 5, 6, 7, 7, 9, 10, 11, 12, 13, 14, ++ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14}, ++ {0, 0, 1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, ++ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14}, ++ {0, 0, 1, 2, 3, 3, 4, 4, 6, 7, 7, 9, 10, 11, 12, 13, 14, ++ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14}, ++}; ++ ++static const u8 rtw8814a_pwrtrk_type8_2gd_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, ++ 6, 6, 7, 8, 9, 10, 11, 11, 11, 11, 11, 11, 11 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type8_2gd_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 6, 6, 7, 7, 8, 9, 9, 10, ++ 10, 11, 12, 12, 13, 14, 14, 14, 14, 14, 14, 14 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type8_2gc_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 1, 1, 2, 2, 3, 3, 4, 5, 6, 6, 6, 7, 7, 8, 8, 9, 10, ++ 10, 11, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type8_2gc_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 1, 1, 2, 3, 3, 4, 4, 4, 5, 5, 6, 7, 8, 8, 9, 10, 10, ++ 11, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type8_2gb_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 1, 1, 2, 2, 3, 3, 4, 5, 5, 6, 6, 7, 7, 8, 8, 8, ++ 9, 9, 10, 10, 11, 11, 12, 12, 12, 13, 14, 14, 14 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type8_2gb_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 6, 6, 7, 8, 8, 9, 9, 10, ++ 10, 11, 12, 12, 13, 13, 13, 13, 13, 14, 14, 14 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type8_2ga_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 2, 2, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 9, 9, 9, ++ 10, 11, 11, 12, 12, 13, 13, 13, 13, 13, 13, 13 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type8_2ga_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 1, 1, 2, 3, 3, 4, 4, 4, 5, 6, 6, 7, 7, 8, 8, 9, 10, ++ 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type8_2g_cck_d_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 1, 1, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 7, 8, ++ 9, 9, 9, 9, 9, 9, 10, 10, 11, 11, 12, 12, 12 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type8_2g_cck_d_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 1, 1, 1, 2, 3, 3, 4, 4, 5, 6, 6, 7, 8, 8, 9, 10, 10, ++ 10, 11, 12, 12, 13, 14, 14, 14, 14, 14, 14, 14 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type8_2g_cck_c_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 2, 2, 3, 4, 5, 5, 6, 6, 6, 6, 7, 8, 9, 9, 10, ++ 10, 11, 11, 11, 12, 13, 13, 13, 13, 13, 13, 13 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type8_2g_cck_c_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 1, 2, 2, 3, 3, 4, 5, 5, 6, 7, 7, 8, 9, 9, 10, ++ 10, 11, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type8_2g_cck_b_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 1, 1, 2, 2, 2, 3, 3, 4, 5, 6, 6, 7, 7, 8, 8, 9, 10, ++ 10, 10, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type8_2g_cck_b_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 1, 1, 1, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 8, 9, 9, 10, ++ 10, 11, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type8_2g_cck_a_n[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 1, 2, 2, 3, 4, 4, 4, 5, 5, 6, 6, 7, 8, 9, 9, 9, 9, ++ 10, 10, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12 ++}; ++ ++static const u8 rtw8814a_pwrtrk_type8_2g_cck_a_p[RTW_PWR_TRK_TBL_SZ] = { ++ 0, 0, 1, 2, 2, 3, 3, 4, 5, 5, 6, 7, 8, 9, 9, 10, 10, ++ 11, 11, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13 ++}; ++ ++const struct rtw_pwr_track_tbl rtw8814a_rtw_pwrtrk_type8_tbl = { ++ .pwrtrk_5gd_n[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type8_5gd_n[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5gd_n[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type8_5gd_n[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5gd_n[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type8_5gd_n[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5gd_p[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type8_5gd_p[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5gd_p[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type8_5gd_p[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5gd_p[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type8_5gd_p[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5gc_n[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type8_5gc_n[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5gc_n[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type8_5gc_n[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5gc_n[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type8_5gc_n[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5gc_p[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type8_5gc_p[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5gc_p[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type8_5gc_p[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5gc_p[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type8_5gc_p[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5gb_n[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type8_5gb_n[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5gb_n[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type8_5gb_n[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5gb_n[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type8_5gb_n[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5gb_p[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type8_5gb_p[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5gb_p[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type8_5gb_p[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5gb_p[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type8_5gb_p[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5ga_n[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type8_5ga_n[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5ga_n[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type8_5ga_n[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5ga_n[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type8_5ga_n[RTW_PWR_TRK_5G_3], ++ .pwrtrk_5ga_p[RTW_PWR_TRK_5G_1] = rtw8814a_pwrtrk_type8_5ga_p[RTW_PWR_TRK_5G_1], ++ .pwrtrk_5ga_p[RTW_PWR_TRK_5G_2] = rtw8814a_pwrtrk_type8_5ga_p[RTW_PWR_TRK_5G_2], ++ .pwrtrk_5ga_p[RTW_PWR_TRK_5G_3] = rtw8814a_pwrtrk_type8_5ga_p[RTW_PWR_TRK_5G_3], ++ .pwrtrk_2gd_n = rtw8814a_pwrtrk_type8_2gd_n, ++ .pwrtrk_2gd_p = rtw8814a_pwrtrk_type8_2gd_p, ++ .pwrtrk_2gc_n = rtw8814a_pwrtrk_type8_2gc_n, ++ .pwrtrk_2gc_p = rtw8814a_pwrtrk_type8_2gc_p, ++ .pwrtrk_2gb_n = rtw8814a_pwrtrk_type8_2gb_n, ++ .pwrtrk_2gb_p = rtw8814a_pwrtrk_type8_2gb_p, ++ .pwrtrk_2ga_n = rtw8814a_pwrtrk_type8_2ga_n, ++ .pwrtrk_2ga_p = rtw8814a_pwrtrk_type8_2ga_p, ++ .pwrtrk_2g_cckd_n = rtw8814a_pwrtrk_type8_2g_cck_d_n, ++ .pwrtrk_2g_cckd_p = rtw8814a_pwrtrk_type8_2g_cck_d_p, ++ .pwrtrk_2g_cckc_n = rtw8814a_pwrtrk_type8_2g_cck_c_n, ++ .pwrtrk_2g_cckc_p = rtw8814a_pwrtrk_type8_2g_cck_c_p, ++ .pwrtrk_2g_cckb_n = rtw8814a_pwrtrk_type8_2g_cck_b_n, ++ .pwrtrk_2g_cckb_p = rtw8814a_pwrtrk_type8_2g_cck_b_p, ++ .pwrtrk_2g_ccka_n = rtw8814a_pwrtrk_type8_2g_cck_a_n, ++ .pwrtrk_2g_ccka_p = rtw8814a_pwrtrk_type8_2g_cck_a_p, ++}; ++ ++static const struct rtw_pwr_seq_cmd init_power_on_8814a[] = { ++ {0x10c2, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_USB_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, BIT(1), BIT(1)}, ++ {0xFFFF, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ 0, ++ RTW_PWR_CMD_END, 0, 0}, ++}; ++ ++static const struct rtw_pwr_seq_cmd trans_carddis_to_cardemu_8814a[] = { ++ {0x0012, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, BIT(6), BIT(6)}, ++ {0x0015, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, BIT(5), 0}, ++ {0x0015, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, BIT(6), 0}, ++ {0x0023, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, BIT(4), 0}, ++ {0x0046, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, 0xFF, 0x00}, ++ {0x0062, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, 0xFF, 0x00}, ++ {0x0005, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_PCI_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, BIT(2), 0}, ++ {0x0005, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, BIT(3), 0}, ++ {0x0301, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_PCI_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, 0xFF, 0}, ++ {0x0071, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_PCI_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, BIT(2), 0}, ++ {0xFFFF, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ 0, ++ RTW_PWR_CMD_END, 0, 0}, ++}; ++ ++static const struct rtw_pwr_seq_cmd trans_cardemu_to_act_8814a[] = { ++ {0x0005, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, BIT(2), 0}, ++ {0x0006, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_POLLING, BIT(1), BIT(1)}, ++ {0x0005, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, BIT(3), 0}, ++ {0x00F0, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, BIT(7), 0}, ++ {0x0081, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, 0x30, 0x20}, ++ {0x0005, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, BIT(0), BIT(0)}, ++ {0x0005, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_POLLING, BIT(0), 0}, ++ {0xFFFF, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ 0, ++ RTW_PWR_CMD_END, 0, 0}, ++}; ++ ++static const struct rtw_pwr_seq_cmd trans_act_to_cardemu_8814a[] = { ++ {0x0c00, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, 0xFF, 0x04}, ++ {0x0e00, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, 0xFF, 0x04}, ++ {0x1002, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, BIT(0), 0}, ++ {0x0002, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_DELAY, 1, RTW_PWR_DELAY_US}, ++ {0x1002, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_PCI_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, BIT(1), 0}, ++ {0x001F, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, 0xFF, 0}, ++ {0x0007, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, 0xFF, 0x28}, ++ {0x0008, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_USB_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, 0x02, 0}, ++ {0x0066, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_USB_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, BIT(7), 0}, ++ {0x0041, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_USB_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, BIT(4), 0}, ++ {0x0042, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_USB_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, BIT(1), 0}, ++ {0x004e, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_USB_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, BIT(5), BIT(5)}, ++ {0x0041, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_USB_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, BIT(0), 0}, ++ {0x0005, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, BIT(1), BIT(1)}, ++ {0x0005, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_POLLING, BIT(1), 0}, ++ {0xFFFF, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ 0, ++ RTW_PWR_CMD_END, 0, 0}, ++}; ++ ++static const struct rtw_pwr_seq_cmd trans_cardemu_to_carddis_8814a[] = { ++ {0x0003, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, BIT(2), 0}, ++ {0x0080, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, 0xFF, 0x01}, ++ {0x0081, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, 0xFF, 0x30}, ++ {0x0045, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, 0xFF, 0x00}, ++ {0x0046, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, 0xFF, 0xff}, ++ {0x0047, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, 0xFF, 0}, ++ {0x0015, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, BIT(6), BIT(6)}, ++ {0x0015, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, BIT(5), BIT(5)}, ++ {0x0012, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, BIT(6), 0}, ++ {0x0023, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, BIT(4), BIT(4)}, ++ {0x0008, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, BIT(1), 0}, ++ {0x0007, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, 0xFF, 0x20}, ++ {0x001f, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, BIT(1), 0}, ++ {0x0020, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, BIT(1), 0}, ++ {0x0021, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, BIT(1), 0}, ++ {0x0076, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, BIT(1), 0}, ++ {0x0091, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, 0xA0, 0xA0}, ++ {0x0070, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, BIT(3), BIT(3)}, ++ {0x0005, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ RTW_PWR_ADDR_MAC, ++ RTW_PWR_CMD_WRITE, BIT(3), BIT(3)}, ++ {0xFFFF, ++ RTW_PWR_CUT_ALL_MSK, ++ RTW_PWR_INTF_ALL_MSK, ++ 0, ++ RTW_PWR_CMD_END, 0, 0}, ++}; ++ ++const struct rtw_pwr_seq_cmd * const card_enable_flow_8814a[] = { ++ init_power_on_8814a, ++ trans_carddis_to_cardemu_8814a, ++ trans_cardemu_to_act_8814a, ++ NULL ++}; ++ ++const struct rtw_pwr_seq_cmd * const card_disable_flow_8814a[] = { ++ trans_act_to_cardemu_8814a, ++ trans_cardemu_to_carddis_8814a, ++ NULL ++}; +--- /dev/null ++++ b/drivers/net/wireless/realtek/rtw88/rtw8814a_table.h +@@ -0,0 +1,40 @@ ++/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ ++/* Copyright(c) 2025 Realtek Corporation ++ */ ++ ++#ifndef __RTW8814A_TABLE_H__ ++#define __RTW8814A_TABLE_H__ ++ ++extern const struct rtw_table rtw8814a_mac_tbl; ++extern const struct rtw_table rtw8814a_agc_tbl; ++extern const struct rtw_table rtw8814a_bb_tbl; ++extern const struct rtw_table rtw8814a_bb_pg_tbl; ++extern const struct rtw_table rtw8814a_bb_pg_type0_tbl; ++extern const struct rtw_table rtw8814a_bb_pg_type2_tbl; ++extern const struct rtw_table rtw8814a_bb_pg_type3_tbl; ++extern const struct rtw_table rtw8814a_bb_pg_type4_tbl; ++extern const struct rtw_table rtw8814a_bb_pg_type5_tbl; ++extern const struct rtw_table rtw8814a_bb_pg_type7_tbl; ++extern const struct rtw_table rtw8814a_bb_pg_type8_tbl; ++extern const struct rtw_table rtw8814a_rf_a_tbl; ++extern const struct rtw_table rtw8814a_rf_b_tbl; ++extern const struct rtw_table rtw8814a_rf_c_tbl; ++extern const struct rtw_table rtw8814a_rf_d_tbl; ++extern const struct rtw_table rtw8814a_txpwr_lmt_tbl; ++extern const struct rtw_table rtw8814a_txpwr_lmt_type0_tbl; ++extern const struct rtw_table rtw8814a_txpwr_lmt_type1_tbl; ++extern const struct rtw_table rtw8814a_txpwr_lmt_type2_tbl; ++extern const struct rtw_table rtw8814a_txpwr_lmt_type3_tbl; ++extern const struct rtw_table rtw8814a_txpwr_lmt_type5_tbl; ++extern const struct rtw_table rtw8814a_txpwr_lmt_type7_tbl; ++extern const struct rtw_table rtw8814a_txpwr_lmt_type8_tbl; ++extern const struct rtw_pwr_track_tbl rtw8814a_rtw_pwrtrk_tbl; ++extern const struct rtw_pwr_track_tbl rtw8814a_rtw_pwrtrk_type0_tbl; ++extern const struct rtw_pwr_track_tbl rtw8814a_rtw_pwrtrk_type2_tbl; ++extern const struct rtw_pwr_track_tbl rtw8814a_rtw_pwrtrk_type5_tbl; ++extern const struct rtw_pwr_track_tbl rtw8814a_rtw_pwrtrk_type7_tbl; ++extern const struct rtw_pwr_track_tbl rtw8814a_rtw_pwrtrk_type8_tbl; ++extern const struct rtw_pwr_seq_cmd * const card_disable_flow_8814a[]; ++extern const struct rtw_pwr_seq_cmd * const card_enable_flow_8814a[]; ++ ++#endif diff --git a/package/kernel/mac80211/patches/rtl/088-v6.15-wifi-rtw88-Add-rtw8814a.-c-h.patch b/package/kernel/mac80211/patches/rtl/088-v6.15-wifi-rtw88-Add-rtw8814a.-c-h.patch new file mode 100644 index 00000000000..3d8ccd8d283 --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/088-v6.15-wifi-rtw88-Add-rtw8814a.-c-h.patch @@ -0,0 +1,2343 @@ +From 1a75457846424b77978d0ba1feb836913ed60637 Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Fri, 7 Mar 2025 02:24:40 +0200 +Subject: [PATCH] wifi: rtw88: Add rtw8814a.{c,h} + +These contain all the logic for the RTL8814A chip. + +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/5d3b8c03-63c1-4f20-860a-89d424badad8@gmail.com +--- + drivers/net/wireless/realtek/rtw88/rtw8814a.c | 2257 +++++++++++++++++ + drivers/net/wireless/realtek/rtw88/rtw8814a.h | 62 + + 2 files changed, 2319 insertions(+) + create mode 100644 drivers/net/wireless/realtek/rtw88/rtw8814a.c + create mode 100644 drivers/net/wireless/realtek/rtw88/rtw8814a.h + +--- /dev/null ++++ b/drivers/net/wireless/realtek/rtw88/rtw8814a.c +@@ -0,0 +1,2257 @@ ++// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause ++/* Copyright(c) 2025 Realtek Corporation ++ */ ++ ++#include ++#include "main.h" ++#include "coex.h" ++#include "tx.h" ++#include "phy.h" ++#include "rtw8814a.h" ++#include "rtw8814a_table.h" ++#include "rtw88xxa.h" ++#include "reg.h" ++#include "debug.h" ++#include "efuse.h" ++#include "regd.h" ++#include "usb.h" ++ ++static void rtw8814a_efuse_grant(struct rtw_dev *rtwdev, bool on) ++{ ++ if (on) { ++ rtw_write8(rtwdev, REG_EFUSE_ACCESS, EFUSE_ACCESS_ON); ++ ++ rtw_write16_set(rtwdev, REG_SYS_FUNC_EN, BIT_FEN_ELDR); ++ rtw_write16_set(rtwdev, REG_SYS_CLKR, ++ BIT_LOADER_CLK_EN | BIT_ANA8M); ++ } else { ++ rtw_write8(rtwdev, REG_EFUSE_ACCESS, EFUSE_ACCESS_OFF); ++ } ++} ++ ++static void rtw8814a_read_rfe_type(struct rtw_dev *rtwdev) ++{ ++ struct rtw_efuse *efuse = &rtwdev->efuse; ++ ++ if (!(efuse->rfe_option & BIT(7))) ++ return; ++ ++ if (rtw_hci_type(rtwdev) == RTW_HCI_TYPE_PCIE) ++ efuse->rfe_option = 0; ++ else if (rtw_hci_type(rtwdev) == RTW_HCI_TYPE_USB) ++ efuse->rfe_option = 1; ++} ++ ++static void rtw8814a_read_amplifier_type(struct rtw_dev *rtwdev) ++{ ++ struct rtw_efuse *efuse = &rtwdev->efuse; ++ ++ switch (efuse->rfe_option) { ++ case 1: ++ /* Internal 2G */ ++ efuse->pa_type_2g = 0; ++ efuse->lna_type_2g = 0; ++ /* External 5G */ ++ efuse->pa_type_5g = BIT(0); ++ efuse->lna_type_5g = BIT(3); ++ break; ++ case 2 ... 5: ++ /* External everything */ ++ efuse->pa_type_2g = BIT(4); ++ efuse->lna_type_2g = BIT(3); ++ efuse->pa_type_5g = BIT(0); ++ efuse->lna_type_5g = BIT(3); ++ break; ++ case 6: ++ efuse->lna_type_5g = BIT(3); ++ break; ++ default: ++ break; ++ } ++} ++ ++static void rtw8814a_read_rf_type(struct rtw_dev *rtwdev, ++ struct rtw8814a_efuse *map) ++{ ++ struct rtw_usb *rtwusb = rtw_get_usb_priv(rtwdev); ++ struct rtw_hal *hal = &rtwdev->hal; ++ ++ switch (map->trx_antenna_option) { ++ case 0xff: /* 4T4R */ ++ case 0xee: /* 3T3R */ ++ if (rtw_hci_type(rtwdev) == RTW_HCI_TYPE_USB && ++ rtwusb->udev->speed != USB_SPEED_SUPER) ++ hal->rf_type = RF_2T2R; ++ else ++ hal->rf_type = RF_3T3R; ++ ++ break; ++ case 0x66: /* 2T2R */ ++ case 0x6f: /* 2T4R */ ++ default: ++ hal->rf_type = RF_2T2R; ++ break; ++ } ++ ++ hal->rf_path_num = 4; ++ hal->rf_phy_num = 4; ++ ++ if (hal->rf_type == RF_3T3R) { ++ hal->antenna_rx = BB_PATH_ABC; ++ hal->antenna_tx = BB_PATH_ABC; ++ } else { ++ hal->antenna_rx = BB_PATH_AB; ++ hal->antenna_tx = BB_PATH_AB; ++ } ++} ++ ++static void rtw8814a_init_hwcap(struct rtw_dev *rtwdev) ++{ ++ struct rtw_efuse *efuse = &rtwdev->efuse; ++ struct rtw_hal *hal = &rtwdev->hal; ++ ++ efuse->hw_cap.bw = BIT(RTW_CHANNEL_WIDTH_20) | ++ BIT(RTW_CHANNEL_WIDTH_40) | ++ BIT(RTW_CHANNEL_WIDTH_80); ++ efuse->hw_cap.ptcl = EFUSE_HW_CAP_PTCL_VHT; ++ ++ if (hal->rf_type == RF_3T3R) ++ efuse->hw_cap.nss = 3; ++ else ++ efuse->hw_cap.nss = 2; ++ ++ rtw_dbg(rtwdev, RTW_DBG_EFUSE, ++ "hw cap: hci=0x%02x, bw=0x%02x, ptcl=0x%02x, ant_num=%d, nss=%d\n", ++ efuse->hw_cap.hci, efuse->hw_cap.bw, efuse->hw_cap.ptcl, ++ efuse->hw_cap.ant_num, efuse->hw_cap.nss); ++} ++ ++static int rtw8814a_read_efuse(struct rtw_dev *rtwdev, u8 *log_map) ++{ ++ struct rtw_efuse *efuse = &rtwdev->efuse; ++ struct rtw8814a_efuse *map; ++ int i; ++ ++ if (rtw_dbg_is_enabled(rtwdev, RTW_DBG_EFUSE)) ++ print_hex_dump(KERN_INFO, "", DUMP_PREFIX_OFFSET, 16, 1, ++ log_map, rtwdev->chip->log_efuse_size, true); ++ ++ map = (struct rtw8814a_efuse *)log_map; ++ ++ efuse->usb_mode_switch = u8_get_bits(map->usb_mode, BIT(4)); ++ efuse->rfe_option = map->rfe_option; ++ efuse->rf_board_option = map->rf_board_option; ++ efuse->crystal_cap = map->xtal_k; ++ efuse->channel_plan = map->channel_plan; ++ efuse->country_code[0] = map->country_code[0]; ++ efuse->country_code[1] = map->country_code[1]; ++ efuse->bt_setting = map->rf_bt_setting; ++ efuse->regd = map->rf_board_option & 0x7; ++ efuse->thermal_meter[RF_PATH_A] = map->thermal_meter; ++ efuse->thermal_meter_k = map->thermal_meter; ++ efuse->tx_bb_swing_setting_2g = map->tx_bb_swing_setting_2g; ++ efuse->tx_bb_swing_setting_5g = map->tx_bb_swing_setting_5g; ++ ++ rtw8814a_read_rfe_type(rtwdev); ++ rtw8814a_read_amplifier_type(rtwdev); ++ ++ /* Override rtw_chip_parameter_setup() */ ++ rtw8814a_read_rf_type(rtwdev, map); ++ ++ rtw8814a_init_hwcap(rtwdev); ++ ++ for (i = 0; i < 4; i++) ++ efuse->txpwr_idx_table[i] = map->txpwr_idx_table[i]; ++ ++ switch (rtw_hci_type(rtwdev)) { ++ case RTW_HCI_TYPE_USB: ++ ether_addr_copy(efuse->addr, map->u.mac_addr); ++ break; ++ case RTW_HCI_TYPE_PCIE: ++ ether_addr_copy(efuse->addr, map->e.mac_addr); ++ break; ++ case RTW_HCI_TYPE_SDIO: ++ default: ++ /* unsupported now */ ++ return -EOPNOTSUPP; ++ } ++ ++ return 0; ++} ++ ++static void rtw8814a_init_rfe_reg(struct rtw_dev *rtwdev) ++{ ++ u8 rfe_option = rtwdev->efuse.rfe_option; ++ ++ if (rfe_option == 2 || rfe_option == 1) { ++ rtw_write32_mask(rtwdev, 0x1994, 0xf, 0xf); ++ rtw_write8_set(rtwdev, REG_GPIO_MUXCFG + 2, 0xf0); ++ } else if (rfe_option == 0) { ++ rtw_write32_mask(rtwdev, 0x1994, 0xf, 0xf); ++ rtw_write8_set(rtwdev, REG_GPIO_MUXCFG + 2, 0xc0); ++ } ++} ++ ++#define RTW_TXSCALE_SIZE 37 ++static const u32 rtw8814a_txscale_tbl[RTW_TXSCALE_SIZE] = { ++ 0x081, 0x088, 0x090, 0x099, 0x0a2, 0x0ac, 0x0b6, 0x0c0, 0x0cc, 0x0d8, ++ 0x0e5, 0x0f2, 0x101, 0x110, 0x120, 0x131, 0x143, 0x156, 0x16a, 0x180, ++ 0x197, 0x1af, 0x1c8, 0x1e3, 0x200, 0x21e, 0x23e, 0x261, 0x285, 0x2ab, ++ 0x2d3, 0x2fe, 0x32b, 0x35c, 0x38e, 0x3c4, 0x3fe ++}; ++ ++static u32 rtw8814a_get_bb_swing(struct rtw_dev *rtwdev, u8 band, u8 rf_path) ++{ ++ static const u32 swing2setting[4] = {0x200, 0x16a, 0x101, 0x0b6}; ++ struct rtw_efuse *efuse = &rtwdev->efuse; ++ u8 tx_bb_swing; ++ ++ if (band == RTW_BAND_2G) ++ tx_bb_swing = efuse->tx_bb_swing_setting_2g; ++ else ++ tx_bb_swing = efuse->tx_bb_swing_setting_5g; ++ ++ tx_bb_swing >>= 2 * rf_path; ++ tx_bb_swing &= 0x3; ++ ++ return swing2setting[tx_bb_swing]; ++} ++ ++static u8 rtw8814a_get_swing_index(struct rtw_dev *rtwdev) ++{ ++ u32 swing, table_value; ++ u8 i; ++ ++ swing = rtw8814a_get_bb_swing(rtwdev, rtwdev->hal.current_band_type, ++ RF_PATH_A); ++ ++ for (i = 0; i < ARRAY_SIZE(rtw8814a_txscale_tbl); i++) { ++ table_value = rtw8814a_txscale_tbl[i]; ++ if (swing == table_value) ++ return i; ++ } ++ ++ return 24; ++} ++ ++static void rtw8814a_pwrtrack_init(struct rtw_dev *rtwdev) ++{ ++ struct rtw_dm_info *dm_info = &rtwdev->dm_info; ++ u8 path; ++ ++ dm_info->default_ofdm_index = rtw8814a_get_swing_index(rtwdev); ++ ++ for (path = RF_PATH_A; path < rtwdev->hal.rf_path_num; path++) { ++ ewma_thermal_init(&dm_info->avg_thermal[path]); ++ dm_info->delta_power_index[path] = 0; ++ dm_info->delta_power_index_last[path] = 0; ++ } ++ dm_info->pwr_trk_triggered = false; ++ dm_info->pwr_trk_init_trigger = true; ++ dm_info->thermal_meter_k = rtwdev->efuse.thermal_meter_k; ++} ++ ++static void rtw8814a_config_trx_path(struct rtw_dev *rtwdev) ++{ ++ /* RX CCK disable 2R CCA */ ++ rtw_write32_clr(rtwdev, REG_CCK0_FAREPORT, ++ BIT_CCK0_2RX | BIT_CCK0_MRC); ++ /* pathB tx on, path A/C/D tx off */ ++ rtw_write32_mask(rtwdev, REG_CCK_RX, 0xf0000000, 0x4); ++ /* pathB rx */ ++ rtw_write32_mask(rtwdev, REG_CCK_RX, 0x0f000000, 0x5); ++} ++ ++static void rtw8814a_config_cck_rx_antenna_init(struct rtw_dev *rtwdev) ++{ ++ /* CCK 2R CCA parameters */ ++ ++ /* Disable Ant diversity */ ++ rtw_write32_mask(rtwdev, REG_RXSB, BIT_RXSB_ANA_DIV, 0x0); ++ /* Concurrent CCA at LSB & USB */ ++ rtw_write32_mask(rtwdev, REG_CCA, BIT_CCA_CO, 0); ++ /* RX path diversity enable */ ++ rtw_write32_mask(rtwdev, REG_ANTSEL, BIT_ANT_BYCO, 0); ++ /* r_en_mrc_antsel */ ++ rtw_write32_mask(rtwdev, REG_PRECTRL, BIT_DIS_CO_PATHSEL, 0); ++ /* MBC weighting */ ++ rtw_write32_mask(rtwdev, REG_CCA_MF, BIT_MBC_WIN, 1); ++ /* 2R CCA only */ ++ rtw_write32_mask(rtwdev, REG_CCKTX, BIT_CMB_CCA_2R, 1); ++} ++ ++static void rtw8814a_phy_set_param(struct rtw_dev *rtwdev) ++{ ++ u32 crystal_cap, val32; ++ u8 val8, rf_path; ++ ++ /* power on BB/RF domain */ ++ if (rtw_hci_type(rtwdev) == RTW_HCI_TYPE_USB) ++ rtw_write8_set(rtwdev, REG_SYS_FUNC_EN, BIT_FEN_USBA); ++ else if (rtw_hci_type(rtwdev) == RTW_HCI_TYPE_PCIE) ++ rtw_write8_set(rtwdev, REG_SYS_FUNC_EN, BIT_FEN_PCIEA); ++ ++ rtw_write8_set(rtwdev, REG_SYS_CFG3_8814A + 2, ++ BIT_FEN_BB_GLB_RST | BIT_FEN_BB_RSTB); ++ ++ /* Power on RF paths A..D */ ++ val8 = BIT_RF_EN | BIT_RF_RSTB | BIT_RF_SDM_RSTB; ++ rtw_write8(rtwdev, REG_RF_CTRL, val8); ++ rtw_write8(rtwdev, REG_RF_CTRL1, val8); ++ rtw_write8(rtwdev, REG_RF_CTRL2, val8); ++ rtw_write8(rtwdev, REG_RF_CTRL3, val8); ++ ++ rtw_load_table(rtwdev, rtwdev->chip->bb_tbl); ++ rtw_load_table(rtwdev, rtwdev->chip->agc_tbl); ++ ++ crystal_cap = rtwdev->efuse.crystal_cap & 0x3F; ++ crystal_cap |= crystal_cap << 6; ++ rtw_write32_mask(rtwdev, REG_AFE_CTRL3, 0x07ff8000, crystal_cap); ++ ++ rtw8814a_config_trx_path(rtwdev); ++ ++ for (rf_path = 0; rf_path < rtwdev->hal.rf_path_num; rf_path++) ++ rtw_load_table(rtwdev, rtwdev->chip->rf_tbl[rf_path]); ++ ++ val32 = rtw_read_rf(rtwdev, RF_PATH_A, RF_RCK1_V1, RFREG_MASK); ++ rtw_write_rf(rtwdev, RF_PATH_B, RF_RCK1_V1, RFREG_MASK, val32); ++ rtw_write_rf(rtwdev, RF_PATH_C, RF_RCK1_V1, RFREG_MASK, val32); ++ rtw_write_rf(rtwdev, RF_PATH_D, RF_RCK1_V1, RFREG_MASK, val32); ++ ++ rtw_write32_set(rtwdev, REG_RXPSEL, BIT_RX_PSEL_RST); ++ ++ rtw_write8(rtwdev, REG_HWSEQ_CTRL, 0xFF); ++ ++ rtw_write32(rtwdev, REG_BAR_MODE_CTRL, 0x0201ffff); ++ ++ rtw_write8(rtwdev, REG_MISC_CTRL, BIT_DIS_SECOND_CCA); ++ ++ rtw_write8(rtwdev, REG_NAV_CTRL + 2, 0); ++ ++ rtw_write8_clr(rtwdev, REG_GPIO_MUXCFG, BIT(5)); ++ ++ rtw8814a_config_cck_rx_antenna_init(rtwdev); ++ ++ rtw_phy_init(rtwdev); ++ rtw8814a_pwrtrack_init(rtwdev); ++ ++ rtw8814a_init_rfe_reg(rtwdev); ++ ++ rtw_write8_clr(rtwdev, REG_QUEUE_CTRL, BIT(3)); ++ ++ rtw_write8(rtwdev, REG_NAV_CTRL + 2, 235); ++ ++ /* enable Tx report. */ ++ rtw_write8(rtwdev, REG_FWHW_TXQ_CTRL + 1, 0x1F); ++ ++ if (rtw_hci_type(rtwdev) == RTW_HCI_TYPE_USB) { ++ /* Reset USB mode switch setting */ ++ rtw_write8(rtwdev, REG_SYS_SDIO_CTRL, 0x0); ++ rtw_write8(rtwdev, REG_ACLK_MON, 0x0); ++ } ++} ++ ++static void rtw8814ae_enable_rf_1_2v(struct rtw_dev *rtwdev) ++{ ++ /* This is for fullsize card, because GPIO7 there is floating. ++ * We should pull GPIO7 high to enable RF 1.2V Switch Power Supply ++ */ ++ ++ /* 1. set 0x40[1:0] to 0, BIT_GPIOSEL=0, select pin as GPIO */ ++ rtw_write8_clr(rtwdev, REG_GPIO_MUXCFG, BIT(1) | BIT(0)); ++ ++ /* 2. set 0x44[31] to 0 ++ * mode=0: data port; ++ * mode=1 and BIT_GPIO_IO_SEL=0: interrupt mode; ++ */ ++ rtw_write8_clr(rtwdev, REG_GPIO_PIN_CTRL + 3, BIT(7)); ++ ++ /* 3. data mode ++ * 3.1 set 0x44[23] to 1 ++ * sel=0: input; ++ * sel=1: output; ++ */ ++ rtw_write8_set(rtwdev, REG_GPIO_PIN_CTRL + 2, BIT(7)); ++ ++ /* 3.2 set 0x44[15] to 1 ++ * output high value; ++ */ ++ rtw_write8_set(rtwdev, REG_GPIO_PIN_CTRL + 1, BIT(7)); ++} ++ ++static int rtw8814a_mac_init(struct rtw_dev *rtwdev) ++{ ++ struct rtw_usb *rtwusb = rtw_get_usb_priv(rtwdev); ++ ++ rtw_write16(rtwdev, REG_CR, ++ MAC_TRX_ENABLE | BIT_MAC_SEC_EN | BIT_32K_CAL_TMR_EN); ++ ++ rtw_load_table(rtwdev, rtwdev->chip->mac_tbl); ++ ++ if (rtw_hci_type(rtwdev) == RTW_HCI_TYPE_USB) ++ rtw_write8(rtwdev, REG_AUTO_LLT_V1 + 3, ++ rtwdev->chip->usb_tx_agg_desc_num << 1); ++ ++ rtw_write32(rtwdev, REG_HIMR0, 0); ++ rtw_write32(rtwdev, REG_HIMR1, 0); ++ ++ rtw_write32_mask(rtwdev, REG_RRSR, 0xfffff, 0xfffff); ++ ++ rtw_write16(rtwdev, REG_RETRY_LIMIT, 0x3030); ++ ++ rtw_write16(rtwdev, REG_RXFLTMAP0, 0xffff); ++ rtw_write16(rtwdev, REG_RXFLTMAP1, 0x0400); ++ rtw_write16(rtwdev, REG_RXFLTMAP2, 0xffff); ++ ++ rtw_write8(rtwdev, REG_MAX_AGGR_NUM, 0x36); ++ rtw_write8(rtwdev, REG_MAX_AGGR_NUM + 1, 0x36); ++ ++ /* Set Spec SIFS (used in NAV) */ ++ rtw_write16(rtwdev, REG_SPEC_SIFS, 0x100a); ++ rtw_write16(rtwdev, REG_MAC_SPEC_SIFS, 0x100a); ++ ++ /* Set SIFS for CCK */ ++ rtw_write16(rtwdev, REG_SIFS, 0x100a); ++ ++ /* Set SIFS for OFDM */ ++ rtw_write16(rtwdev, REG_SIFS + 2, 0x100a); ++ ++ /* TXOP */ ++ rtw_write32(rtwdev, REG_EDCA_BE_PARAM, 0x005EA42B); ++ rtw_write32(rtwdev, REG_EDCA_BK_PARAM, 0x0000A44F); ++ rtw_write32(rtwdev, REG_EDCA_VI_PARAM, 0x005EA324); ++ rtw_write32(rtwdev, REG_EDCA_VO_PARAM, 0x002FA226); ++ ++ rtw_write8_set(rtwdev, REG_FWHW_TXQ_CTRL, BIT(7)); ++ ++ rtw_write8(rtwdev, REG_ACKTO, 0x80); ++ ++ rtw_write16(rtwdev, REG_BCN_CTRL, ++ BIT_DIS_TSF_UDT | (BIT_DIS_TSF_UDT << 8)); ++ rtw_write32_mask(rtwdev, REG_TBTT_PROHIBIT, 0xfffff, WLAN_TBTT_TIME); ++ rtw_write8(rtwdev, REG_DRVERLYINT, 0x05); ++ rtw_write8(rtwdev, REG_BCNDMATIM, WLAN_BCN_DMA_TIME); ++ rtw_write16(rtwdev, REG_BCNTCFG, 0x4413); ++ rtw_write8(rtwdev, REG_BCN_MAX_ERR, 0xFF); ++ ++ rtw_write32(rtwdev, REG_FAST_EDCA_VOVI_SETTING, 0x08070807); ++ rtw_write32(rtwdev, REG_FAST_EDCA_BEBK_SETTING, 0x08070807); ++ ++ if (rtw_hci_type(rtwdev) == RTW_HCI_TYPE_USB && ++ rtwusb->udev->speed == USB_SPEED_SUPER) { ++ /* Disable U1/U2 Mode to avoid 2.5G spur in USB3.0. */ ++ rtw_write8_clr(rtwdev, REG_USB_MOD, BIT(4) | BIT(3)); ++ /* To avoid usb 3.0 H2C fail. */ ++ rtw_write16(rtwdev, 0xf002, 0); ++ ++ rtw_write8_clr(rtwdev, REG_SW_AMPDU_BURST_MODE_CTRL, ++ BIT_PRE_TX_CMD); ++ } else if (rtw_hci_type(rtwdev) == RTW_HCI_TYPE_PCIE) { ++ rtw8814ae_enable_rf_1_2v(rtwdev); ++ ++ /* Force the antenna b to wifi. */ ++ rtw_write8_set(rtwdev, REG_PAD_CTRL1, BIT(2)); ++ rtw_write8_set(rtwdev, REG_PAD_CTRL1 + 1, BIT(0)); ++ rtw_write8_set(rtwdev, REG_LED_CFG + 3, ++ (BIT(27) | BIT_DPDT_WL_SEL) >> 24); ++ } ++ ++ return 0; ++} ++ ++static void rtw8814a_set_rfe_reg_24g(struct rtw_dev *rtwdev) ++{ ++ switch (rtwdev->efuse.rfe_option) { ++ case 2: ++ rtw_write32(rtwdev, REG_RFE_PINMUX_A, 0x72707270); ++ rtw_write32(rtwdev, REG_RFE_PINMUX_B, 0x72707270); ++ rtw_write32(rtwdev, REG_RFE_PINMUX_C, 0x72707270); ++ rtw_write32(rtwdev, REG_RFE_PINMUX_D, 0x77707770); ++ ++ rtw_write32_mask(rtwdev, REG_RFE_INVSEL_D, ++ BIT_RFE_SELSW0_D, 0x72); ++ ++ break; ++ case 1: ++ rtw_write32(rtwdev, REG_RFE_PINMUX_A, 0x77777777); ++ rtw_write32(rtwdev, REG_RFE_PINMUX_B, 0x77777777); ++ rtw_write32(rtwdev, REG_RFE_PINMUX_C, 0x77777777); ++ rtw_write32(rtwdev, REG_RFE_PINMUX_D, 0x77777777); ++ ++ rtw_write32_mask(rtwdev, REG_RFE_INVSEL_D, ++ BIT_RFE_SELSW0_D, 0x77); ++ ++ break; ++ case 0: ++ default: ++ rtw_write32(rtwdev, REG_RFE_PINMUX_A, 0x77777777); ++ rtw_write32(rtwdev, REG_RFE_PINMUX_B, 0x77777777); ++ rtw_write32(rtwdev, REG_RFE_PINMUX_C, 0x77777777); ++ /* Is it not necessary to set REG_RFE_PINMUX_D ? */ ++ ++ rtw_write32_mask(rtwdev, REG_RFE_INVSEL_D, ++ BIT_RFE_SELSW0_D, 0x77); ++ ++ break; ++ } ++} ++ ++static void rtw8814a_set_rfe_reg_5g(struct rtw_dev *rtwdev) ++{ ++ switch (rtwdev->efuse.rfe_option) { ++ case 2: ++ rtw_write32(rtwdev, REG_RFE_PINMUX_A, 0x37173717); ++ rtw_write32(rtwdev, REG_RFE_PINMUX_B, 0x37173717); ++ rtw_write32(rtwdev, REG_RFE_PINMUX_C, 0x37173717); ++ rtw_write32(rtwdev, REG_RFE_PINMUX_D, 0x77177717); ++ ++ rtw_write32_mask(rtwdev, REG_RFE_INVSEL_D, ++ BIT_RFE_SELSW0_D, 0x37); ++ ++ break; ++ case 1: ++ rtw_write32(rtwdev, REG_RFE_PINMUX_A, 0x33173317); ++ rtw_write32(rtwdev, REG_RFE_PINMUX_B, 0x33173317); ++ rtw_write32(rtwdev, REG_RFE_PINMUX_C, 0x33173317); ++ rtw_write32(rtwdev, REG_RFE_PINMUX_D, 0x77177717); ++ ++ rtw_write32_mask(rtwdev, REG_RFE_INVSEL_D, ++ BIT_RFE_SELSW0_D, 0x33); ++ ++ break; ++ case 0: ++ default: ++ rtw_write32(rtwdev, REG_RFE_PINMUX_A, 0x54775477); ++ rtw_write32(rtwdev, REG_RFE_PINMUX_B, 0x54775477); ++ rtw_write32(rtwdev, REG_RFE_PINMUX_C, 0x54775477); ++ rtw_write32(rtwdev, REG_RFE_PINMUX_D, 0x54775477); ++ ++ rtw_write32_mask(rtwdev, REG_RFE_INVSEL_D, ++ BIT_RFE_SELSW0_D, 0x54); ++ ++ break; ++ } ++} ++ ++static void rtw8814a_set_channel_bb_swing(struct rtw_dev *rtwdev, u8 band) ++{ ++ rtw_write32_mask(rtwdev, REG_TXSCALE_A, BB_SWING_MASK, ++ rtw8814a_get_bb_swing(rtwdev, band, RF_PATH_A)); ++ rtw_write32_mask(rtwdev, REG_TXSCALE_B, BB_SWING_MASK, ++ rtw8814a_get_bb_swing(rtwdev, band, RF_PATH_B)); ++ rtw_write32_mask(rtwdev, REG_TXSCALE_C, BB_SWING_MASK, ++ rtw8814a_get_bb_swing(rtwdev, band, RF_PATH_C)); ++ rtw_write32_mask(rtwdev, REG_TXSCALE_D, BB_SWING_MASK, ++ rtw8814a_get_bb_swing(rtwdev, band, RF_PATH_D)); ++ rtw8814a_pwrtrack_init(rtwdev); ++} ++ ++static void rtw8814a_set_bw_reg_adc(struct rtw_dev *rtwdev, u8 bw) ++{ ++ u32 adc = 0; ++ ++ if (bw == RTW_CHANNEL_WIDTH_20) ++ adc = 0; ++ else if (bw == RTW_CHANNEL_WIDTH_40) ++ adc = 1; ++ else if (bw == RTW_CHANNEL_WIDTH_80) ++ adc = 2; ++ ++ rtw_write32_mask(rtwdev, REG_ADCCLK, BIT(1) | BIT(0), adc); ++} ++ ++static void rtw8814a_set_bw_reg_agc(struct rtw_dev *rtwdev, u8 new_band, u8 bw) ++{ ++ u32 agc = 7; ++ ++ if (bw == RTW_CHANNEL_WIDTH_20) { ++ agc = 6; ++ } else if (bw == RTW_CHANNEL_WIDTH_40) { ++ if (new_band == RTW_BAND_5G) ++ agc = 8; ++ else ++ agc = 7; ++ } else if (bw == RTW_CHANNEL_WIDTH_80) { ++ agc = 3; ++ } ++ ++ rtw_write32_mask(rtwdev, REG_CCASEL, 0xf000, agc); ++} ++ ++static void rtw8814a_switch_band(struct rtw_dev *rtwdev, u8 new_band, u8 bw) ++{ ++ /* Clear 0x1000[16], When this bit is set to 0, CCK and OFDM ++ * are disabled, and clock are gated. Otherwise, CCK and OFDM ++ * are enabled. ++ */ ++ rtw_write8_clr(rtwdev, REG_SYS_CFG3_8814A + 2, BIT_FEN_BB_RSTB); ++ ++ if (new_band == RTW_BAND_2G) { ++ rtw_write32_mask(rtwdev, REG_AGC_TABLE, 0x1f, 0); ++ ++ rtw8814a_set_rfe_reg_24g(rtwdev); ++ ++ rtw_write32_mask(rtwdev, REG_TXPSEL, 0xf0, 0x2); ++ rtw_write32_mask(rtwdev, REG_CCK_RX, 0x0f000000, 0x5); ++ ++ rtw_write32_mask(rtwdev, REG_RXPSEL, BIT_RX_PSEL_RST, 0x3); ++ ++ rtw_write8(rtwdev, REG_CCK_CHECK, 0); ++ ++ rtw_write32_mask(rtwdev, 0xa80, BIT(18), 0); ++ } else { ++ rtw_write8(rtwdev, REG_CCK_CHECK, BIT_CHECK_CCK_EN); ++ ++ /* Enable CCK Tx function, even when CCK is off */ ++ rtw_write32_mask(rtwdev, 0xa80, BIT(18), 1); ++ ++ rtw8814a_set_rfe_reg_5g(rtwdev); ++ ++ rtw_write32_mask(rtwdev, REG_TXPSEL, 0xf0, 0x0); ++ rtw_write32_mask(rtwdev, REG_CCK_RX, 0x0f000000, 0xf); ++ ++ rtw_write32_mask(rtwdev, REG_RXPSEL, BIT_RX_PSEL_RST, 0x2); ++ } ++ ++ rtw8814a_set_channel_bb_swing(rtwdev, new_band); ++ ++ rtw8814a_set_bw_reg_adc(rtwdev, bw); ++ rtw8814a_set_bw_reg_agc(rtwdev, new_band, bw); ++ ++ rtw_write8_set(rtwdev, REG_SYS_CFG3_8814A + 2, BIT_FEN_BB_RSTB); ++} ++ ++static void rtw8814a_switch_channel(struct rtw_dev *rtwdev, u8 channel) ++{ ++ struct rtw_hal *hal = &rtwdev->hal; ++ u32 fc_area, rf_mod_ag, cfgch; ++ u8 path; ++ ++ switch (channel) { ++ case 36 ... 48: ++ fc_area = 0x494; ++ break; ++ case 50 ... 64: ++ fc_area = 0x453; ++ break; ++ case 100 ... 116: ++ fc_area = 0x452; ++ break; ++ default: ++ if (channel >= 118) ++ fc_area = 0x412; ++ else ++ fc_area = 0x96a; ++ break; ++ } ++ ++ rtw_write32_mask(rtwdev, REG_CLKTRK, 0x1ffe0000, fc_area); ++ ++ for (path = 0; path < hal->rf_path_num; path++) { ++ switch (channel) { ++ case 36 ... 64: ++ rf_mod_ag = 0x101; ++ break; ++ case 100 ... 140: ++ rf_mod_ag = 0x301; ++ break; ++ default: ++ if (channel > 140) ++ rf_mod_ag = 0x501; ++ else ++ rf_mod_ag = 0x000; ++ break; ++ } ++ ++ cfgch = (rf_mod_ag << 8) | channel; ++ ++ rtw_write_rf(rtwdev, path, RF_CFGCH, ++ RF18_RFSI_MASK | RF18_BAND_MASK | RF18_CHANNEL_MASK, cfgch); ++ } ++ ++ switch (channel) { ++ case 36 ... 64: ++ rtw_write32_mask(rtwdev, REG_AGC_TABLE, 0x1f, 1); ++ break; ++ case 100 ... 144: ++ rtw_write32_mask(rtwdev, REG_AGC_TABLE, 0x1f, 2); ++ break; ++ default: ++ if (channel >= 149) ++ rtw_write32_mask(rtwdev, REG_AGC_TABLE, 0x1f, 3); ++ ++ break; ++ } ++} ++ ++static void rtw8814a_24g_cck_tx_dfir(struct rtw_dev *rtwdev, u8 channel) ++{ ++ if (channel >= 1 && channel <= 11) { ++ rtw_write32(rtwdev, REG_CCK0_TX_FILTER1, 0x1a1b0030); ++ rtw_write32(rtwdev, REG_CCK0_TX_FILTER2, 0x090e1317); ++ rtw_write32(rtwdev, REG_CCK0_DEBUG_PORT, 0x00000204); ++ } else if (channel >= 12 && channel <= 13) { ++ rtw_write32(rtwdev, REG_CCK0_TX_FILTER1, 0x1a1b0030); ++ rtw_write32(rtwdev, REG_CCK0_TX_FILTER2, 0x090e1217); ++ rtw_write32(rtwdev, REG_CCK0_DEBUG_PORT, 0x00000305); ++ } else if (channel == 14) { ++ rtw_write32(rtwdev, REG_CCK0_TX_FILTER1, 0x1a1b0030); ++ rtw_write32(rtwdev, REG_CCK0_TX_FILTER2, 0x00000E17); ++ rtw_write32(rtwdev, REG_CCK0_DEBUG_PORT, 0x00000000); ++ } ++} ++ ++static void rtw8814a_set_bw_reg_mac(struct rtw_dev *rtwdev, u8 bw) ++{ ++ u16 val16 = rtw_read16(rtwdev, REG_WMAC_TRXPTCL_CTL); ++ ++ val16 &= ~BIT_RFMOD; ++ if (bw == RTW_CHANNEL_WIDTH_80) ++ val16 |= BIT_RFMOD_80M; ++ else if (bw == RTW_CHANNEL_WIDTH_40) ++ val16 |= BIT_RFMOD_40M; ++ ++ rtw_write16(rtwdev, REG_WMAC_TRXPTCL_CTL, val16); ++} ++ ++static void rtw8814a_set_bw_rf(struct rtw_dev *rtwdev, u8 bw) ++{ ++ u8 path; ++ ++ for (path = RF_PATH_A; path < rtwdev->hal.rf_path_num; path++) { ++ switch (bw) { ++ case RTW_CHANNEL_WIDTH_5: ++ case RTW_CHANNEL_WIDTH_10: ++ case RTW_CHANNEL_WIDTH_20: ++ default: ++ rtw_write_rf(rtwdev, path, RF_CFGCH, RF18_BW_MASK, 3); ++ break; ++ case RTW_CHANNEL_WIDTH_40: ++ rtw_write_rf(rtwdev, path, RF_CFGCH, RF18_BW_MASK, 1); ++ break; ++ case RTW_CHANNEL_WIDTH_80: ++ rtw_write_rf(rtwdev, path, RF_CFGCH, RF18_BW_MASK, 0); ++ break; ++ } ++ } ++} ++ ++static void rtw8814a_adc_clk(struct rtw_dev *rtwdev) ++{ ++ static const u32 rxiqc_reg[2][4] = { ++ { REG_RX_IQC_AB_A, REG_RX_IQC_AB_B, ++ REG_RX_IQC_AB_C, REG_RX_IQC_AB_D }, ++ { REG_RX_IQC_CD_A, REG_RX_IQC_CD_B, ++ REG_RX_IQC_CD_C, REG_RX_IQC_CD_D } ++ }; ++ u32 bb_reg_8fc, bb_reg_808, rxiqc[4]; ++ u32 i = 0, mac_active = 1; ++ u8 mac_reg_522; ++ ++ if (rtwdev->hal.cut_version != RTW_CHIP_VER_CUT_A) ++ return; ++ ++ /* 1 Step1. MAC TX pause */ ++ mac_reg_522 = rtw_read8(rtwdev, REG_TXPAUSE); ++ bb_reg_8fc = rtw_read32(rtwdev, REG_DBGSEL); ++ bb_reg_808 = rtw_read32(rtwdev, REG_RXPSEL); ++ rtw_write8(rtwdev, REG_TXPAUSE, 0x3f); ++ ++ /* 1 Step 2. Backup rxiqc & rxiqc = 0 */ ++ for (i = 0; i < 4; i++) { ++ rxiqc[i] = rtw_read32(rtwdev, rxiqc_reg[0][i]); ++ rtw_write32(rtwdev, rxiqc_reg[0][i], 0x0); ++ rtw_write32(rtwdev, rxiqc_reg[1][i], 0x0); ++ } ++ rtw_write32_mask(rtwdev, REG_PRECTRL, BIT_IQ_WGT, 0x3); ++ i = 0; ++ ++ /* 1 Step 3. Monitor MAC IDLE */ ++ rtw_write32(rtwdev, REG_DBGSEL, 0x0); ++ while (mac_active) { ++ mac_active = rtw_read32(rtwdev, REG_DBGRPT) & 0x803e0008; ++ i++; ++ if (i > 1000) ++ break; ++ } ++ ++ /* 1 Step 4. ADC clk flow */ ++ rtw_write8(rtwdev, REG_RXPSEL, 0x11); ++ rtw_write32_mask(rtwdev, REG_DAC_RSTB, BIT(13), 0x1); ++ rtw_write8_mask(rtwdev, REG_GNT_BT, BIT(2) | BIT(1), 0x3); ++ rtw_write32_mask(rtwdev, REG_CCK_RPT_FORMAT, BIT(2), 0x1); ++ ++ /* 0xc1c/0xe1c/0x181c/0x1a1c[4] must=1 to ensure table can be ++ * written when bbrstb=0 ++ * 0xc60/0xe60/0x1860/0x1a60[15] always = 1 after this line ++ * 0xc60/0xe60/0x1860/0x1a60[14] always = 0 bcz its error in A-cut ++ */ ++ ++ /* power_off/clk_off @ anapar_state=idle mode */ ++ rtw_write32(rtwdev, REG_AFE_PWR1_A, 0x15800002); ++ rtw_write32(rtwdev, REG_AFE_PWR1_A, 0x01808003); ++ rtw_write32(rtwdev, REG_AFE_PWR1_B, 0x15800002); ++ rtw_write32(rtwdev, REG_AFE_PWR1_B, 0x01808003); ++ rtw_write32(rtwdev, REG_AFE_PWR1_C, 0x15800002); ++ rtw_write32(rtwdev, REG_AFE_PWR1_C, 0x01808003); ++ rtw_write32(rtwdev, REG_AFE_PWR1_D, 0x15800002); ++ rtw_write32(rtwdev, REG_AFE_PWR1_D, 0x01808003); ++ ++ rtw_write8_mask(rtwdev, REG_GNT_BT, BIT(2), 0x0); ++ rtw_write32_mask(rtwdev, REG_CCK_RPT_FORMAT, BIT(2), 0x0); ++ /* [19] = 1 to turn off ADC */ ++ rtw_write32(rtwdev, REG_CK_MONHA, 0x0D080058); ++ rtw_write32(rtwdev, REG_CK_MONHB, 0x0D080058); ++ rtw_write32(rtwdev, REG_CK_MONHC, 0x0D080058); ++ rtw_write32(rtwdev, REG_CK_MONHD, 0x0D080058); ++ ++ /* power_on/clk_off */ ++ /* [19] = 0 to turn on ADC */ ++ rtw_write32(rtwdev, REG_CK_MONHA, 0x0D000058); ++ rtw_write32(rtwdev, REG_CK_MONHB, 0x0D000058); ++ rtw_write32(rtwdev, REG_CK_MONHC, 0x0D000058); ++ rtw_write32(rtwdev, REG_CK_MONHD, 0x0D000058); ++ ++ /* power_on/clk_on @ anapar_state=BT mode */ ++ rtw_write32(rtwdev, REG_AFE_PWR1_A, 0x05808032); ++ rtw_write32(rtwdev, REG_AFE_PWR1_B, 0x05808032); ++ rtw_write32(rtwdev, REG_AFE_PWR1_C, 0x05808032); ++ rtw_write32(rtwdev, REG_AFE_PWR1_D, 0x05808032); ++ rtw_write8_mask(rtwdev, REG_GNT_BT, BIT(2), 0x1); ++ rtw_write32_mask(rtwdev, REG_CCK_RPT_FORMAT, BIT(2), 0x1); ++ ++ /* recover original setting @ anapar_state=BT mode */ ++ rtw_write32(rtwdev, REG_AFE_PWR1_A, 0x05808032); ++ rtw_write32(rtwdev, REG_AFE_PWR1_B, 0x05808032); ++ rtw_write32(rtwdev, REG_AFE_PWR1_C, 0x05808032); ++ rtw_write32(rtwdev, REG_AFE_PWR1_D, 0x05808032); ++ ++ rtw_write32(rtwdev, REG_AFE_PWR1_A, 0x05800002); ++ rtw_write32(rtwdev, REG_AFE_PWR1_A, 0x07808003); ++ rtw_write32(rtwdev, REG_AFE_PWR1_B, 0x05800002); ++ rtw_write32(rtwdev, REG_AFE_PWR1_B, 0x07808003); ++ rtw_write32(rtwdev, REG_AFE_PWR1_C, 0x05800002); ++ rtw_write32(rtwdev, REG_AFE_PWR1_C, 0x07808003); ++ rtw_write32(rtwdev, REG_AFE_PWR1_D, 0x05800002); ++ rtw_write32(rtwdev, REG_AFE_PWR1_D, 0x07808003); ++ ++ rtw_write8_mask(rtwdev, REG_GNT_BT, BIT(2) | BIT(1), 0x0); ++ rtw_write32_mask(rtwdev, REG_CCK_RPT_FORMAT, BIT(2), 0x0); ++ rtw_write32_mask(rtwdev, REG_DAC_RSTB, BIT(13), 0x0); ++ ++ /* 1 Step 5. Recover MAC TX & IQC */ ++ rtw_write8(rtwdev, REG_TXPAUSE, mac_reg_522); ++ rtw_write32(rtwdev, REG_DBGSEL, bb_reg_8fc); ++ rtw_write32(rtwdev, REG_RXPSEL, bb_reg_808); ++ for (i = 0; i < 4; i++) { ++ rtw_write32(rtwdev, rxiqc_reg[0][i], rxiqc[i]); ++ rtw_write32(rtwdev, rxiqc_reg[1][i], 0x01000000); ++ } ++ rtw_write32_mask(rtwdev, REG_PRECTRL, BIT_IQ_WGT, 0x0); ++} ++ ++static void rtw8814a_spur_calibration_ch140(struct rtw_dev *rtwdev, u8 channel) ++{ ++ struct rtw_hal *hal = &rtwdev->hal; ++ ++ /* Add for 8814AE module ch140 MP Rx */ ++ if (channel == 140) { ++ if (hal->ch_param[0] == 0) ++ hal->ch_param[0] = rtw_read32(rtwdev, REG_CCASEL); ++ if (hal->ch_param[1] == 0) ++ hal->ch_param[1] = rtw_read32(rtwdev, REG_PDMFTH); ++ ++ rtw_write32(rtwdev, REG_CCASEL, 0x75438170); ++ rtw_write32(rtwdev, REG_PDMFTH, 0x79a18a0a); ++ } else { ++ if (rtw_read32(rtwdev, REG_CCASEL) == 0x75438170 && ++ hal->ch_param[0] != 0) ++ rtw_write32(rtwdev, REG_CCASEL, hal->ch_param[0]); ++ ++ if (rtw_read32(rtwdev, REG_PDMFTH) == 0x79a18a0a && ++ hal->ch_param[1] != 0) ++ rtw_write32(rtwdev, REG_PDMFTH, hal->ch_param[1]); ++ ++ hal->ch_param[0] = rtw_read32(rtwdev, REG_CCASEL); ++ hal->ch_param[1] = rtw_read32(rtwdev, REG_PDMFTH); ++ } ++} ++ ++static void rtw8814a_set_nbi_reg(struct rtw_dev *rtwdev, u32 tone_idx) ++{ ++ /* tone_idx X 10 */ ++ static const u32 nbi_128[] = { ++ 25, 55, 85, 115, 135, ++ 155, 185, 205, 225, 245, ++ 265, 285, 305, 335, 355, ++ 375, 395, 415, 435, 455, ++ 485, 505, 525, 555, 585, 615, 635 ++ }; ++ u32 reg_idx = 0; ++ u32 i; ++ ++ for (i = 0; i < ARRAY_SIZE(nbi_128); i++) { ++ if (tone_idx < nbi_128[i]) { ++ reg_idx = i + 1; ++ break; ++ } ++ } ++ ++ rtw_write32_mask(rtwdev, REG_NBI_SETTING, 0xfc000, reg_idx); ++} ++ ++static void rtw8814a_nbi_setting(struct rtw_dev *rtwdev, u32 ch, u32 f_intf) ++{ ++ u32 fc, int_distance, tone_idx; ++ ++ fc = 2412 + (ch - 1) * 5; ++ int_distance = abs_diff(fc, f_intf); ++ ++ /* 10 * (int_distance / 0.3125) */ ++ tone_idx = int_distance << 5; ++ ++ rtw8814a_set_nbi_reg(rtwdev, tone_idx); ++ ++ rtw_write32_mask(rtwdev, REG_NBI_SETTING, BIT_NBI_ENABLE, 1); ++} ++ ++static void rtw8814a_spur_nbi_setting(struct rtw_dev *rtwdev) ++{ ++ u8 primary_channel = rtwdev->hal.primary_channel; ++ u8 rfe_type = rtwdev->efuse.rfe_option; ++ ++ if (rfe_type != 0 && rfe_type != 1 && rfe_type != 6 && rfe_type != 7) ++ return; ++ ++ if (primary_channel == 14) ++ rtw8814a_nbi_setting(rtwdev, primary_channel, 2480); ++ else if (primary_channel >= 4 && primary_channel <= 8) ++ rtw8814a_nbi_setting(rtwdev, primary_channel, 2440); ++ else ++ rtw_write32_mask(rtwdev, REG_NBI_SETTING, BIT_NBI_ENABLE, 0); ++} ++ ++/* A workaround to eliminate the 5280 MHz & 5600 MHz & 5760 MHz spur of 8814A */ ++static void rtw8814a_spur_calibration(struct rtw_dev *rtwdev, u8 channel, u8 bw) ++{ ++ u8 rfe_type = rtwdev->efuse.rfe_option; ++ bool reset_nbi_csi = true; ++ ++ if (rfe_type == 0) { ++ switch (bw) { ++ case RTW_CHANNEL_WIDTH_40: ++ if (channel == 54 || channel == 118) { ++ rtw_write32_mask(rtwdev, REG_NBI_SETTING, ++ 0x000fe000, 0x3e >> 1); ++ rtw_write32_mask(rtwdev, REG_CSI_MASK_SETTING1, ++ BIT(0), 1); ++ rtw_write32(rtwdev, REG_CSI_FIX_MASK0, 0); ++ rtw_write32_mask(rtwdev, REG_CSI_FIX_MASK1, ++ BIT(0), 1); ++ rtw_write32(rtwdev, REG_CSI_FIX_MASK6, 0); ++ rtw_write32(rtwdev, REG_CSI_FIX_MASK7, 0); ++ ++ reset_nbi_csi = false; ++ } else if (channel == 151) { ++ rtw_write32_mask(rtwdev, REG_NBI_SETTING, ++ 0x000fe000, 0x1e >> 1); ++ rtw_write32_mask(rtwdev, REG_CSI_MASK_SETTING1, ++ BIT(0), 1); ++ rtw_write32_mask(rtwdev, REG_CSI_FIX_MASK0, ++ BIT(16), 1); ++ rtw_write32(rtwdev, REG_CSI_FIX_MASK1, 0); ++ rtw_write32(rtwdev, REG_CSI_FIX_MASK6, 0); ++ rtw_write32(rtwdev, REG_CSI_FIX_MASK7, 0); ++ ++ reset_nbi_csi = false; ++ } ++ break; ++ case RTW_CHANNEL_WIDTH_80: ++ if (channel == 58 || channel == 122) { ++ rtw_write32_mask(rtwdev, REG_NBI_SETTING, ++ 0x000fe000, 0x3a >> 1); ++ rtw_write32_mask(rtwdev, REG_CSI_MASK_SETTING1, ++ BIT(0), 1); ++ rtw_write32(rtwdev, REG_CSI_FIX_MASK0, 0); ++ rtw_write32(rtwdev, REG_CSI_FIX_MASK1, 0); ++ rtw_write32(rtwdev, REG_CSI_FIX_MASK6, 0); ++ rtw_write32_mask(rtwdev, REG_CSI_FIX_MASK7, ++ BIT(0), 1); ++ ++ reset_nbi_csi = false; ++ } else if (channel == 155) { ++ rtw_write32_mask(rtwdev, REG_NBI_SETTING, ++ 0x000fe000, 0x5a >> 1); ++ rtw_write32_mask(rtwdev, REG_CSI_MASK_SETTING1, ++ BIT(0), 1); ++ rtw_write32(rtwdev, REG_CSI_FIX_MASK0, 0); ++ rtw_write32(rtwdev, REG_CSI_FIX_MASK1, 0); ++ rtw_write32_mask(rtwdev, REG_CSI_FIX_MASK6, ++ BIT(16), 1); ++ rtw_write32(rtwdev, REG_CSI_FIX_MASK7, 0); ++ ++ reset_nbi_csi = false; ++ } ++ break; ++ case RTW_CHANNEL_WIDTH_20: ++ if (channel == 153) { ++ rtw_write32_mask(rtwdev, REG_NBI_SETTING, ++ 0x000fe000, 0x1e >> 1); ++ rtw_write32_mask(rtwdev, REG_CSI_MASK_SETTING1, ++ BIT(0), 1); ++ rtw_write32(rtwdev, REG_CSI_FIX_MASK0, 0); ++ rtw_write32(rtwdev, REG_CSI_FIX_MASK1, 0); ++ rtw_write32(rtwdev, REG_CSI_FIX_MASK6, 0); ++ rtw_write32_mask(rtwdev, REG_CSI_FIX_MASK7, ++ BIT(16), 1); ++ ++ reset_nbi_csi = false; ++ } ++ ++ rtw8814a_spur_calibration_ch140(rtwdev, channel); ++ break; ++ default: ++ break; ++ } ++ } else if (rfe_type == 1 || rfe_type == 2) { ++ switch (bw) { ++ case RTW_CHANNEL_WIDTH_20: ++ if (channel == 153) { ++ rtw_write32_mask(rtwdev, REG_NBI_SETTING, ++ 0x000fe000, 0x1E >> 1); ++ rtw_write32_mask(rtwdev, REG_CSI_MASK_SETTING1, ++ BIT(0), 1); ++ rtw_write32(rtwdev, REG_CSI_FIX_MASK0, 0); ++ rtw_write32(rtwdev, REG_CSI_FIX_MASK1, 0); ++ rtw_write32(rtwdev, REG_CSI_FIX_MASK6, 0); ++ rtw_write32_mask(rtwdev, REG_CSI_FIX_MASK7, ++ BIT(16), 1); ++ ++ reset_nbi_csi = false; ++ } ++ break; ++ case RTW_CHANNEL_WIDTH_40: ++ if (channel == 151) { ++ rtw_write32_mask(rtwdev, REG_NBI_SETTING, ++ 0x000fe000, 0x1e >> 1); ++ rtw_write32_mask(rtwdev, REG_CSI_MASK_SETTING1, ++ BIT(0), 1); ++ rtw_write32_mask(rtwdev, REG_CSI_FIX_MASK0, ++ BIT(16), 1); ++ rtw_write32(rtwdev, REG_CSI_FIX_MASK1, 0); ++ rtw_write32(rtwdev, REG_CSI_FIX_MASK6, 0); ++ rtw_write32(rtwdev, REG_CSI_FIX_MASK7, 0); ++ ++ reset_nbi_csi = false; ++ } ++ break; ++ case RTW_CHANNEL_WIDTH_80: ++ if (channel == 155) { ++ rtw_write32_mask(rtwdev, REG_NBI_SETTING, ++ 0x000fe000, 0x5a >> 1); ++ rtw_write32_mask(rtwdev, REG_CSI_MASK_SETTING1, ++ BIT(0), 1); ++ rtw_write32(rtwdev, REG_CSI_FIX_MASK0, 0); ++ rtw_write32(rtwdev, REG_CSI_FIX_MASK1, 0); ++ rtw_write32_mask(rtwdev, REG_CSI_FIX_MASK6, ++ BIT(16), 1); ++ rtw_write32(rtwdev, REG_CSI_FIX_MASK7, 0); ++ ++ reset_nbi_csi = false; ++ } ++ break; ++ default: ++ break; ++ } ++ } ++ ++ if (reset_nbi_csi) { ++ rtw_write32_mask(rtwdev, REG_NBI_SETTING, ++ 0x000fe000, 0xfc >> 1); ++ rtw_write32_mask(rtwdev, REG_CSI_MASK_SETTING1, BIT(0), 0); ++ rtw_write32(rtwdev, REG_CSI_FIX_MASK0, 0); ++ rtw_write32(rtwdev, REG_CSI_FIX_MASK1, 0); ++ rtw_write32(rtwdev, REG_CSI_FIX_MASK6, 0); ++ rtw_write32(rtwdev, REG_CSI_FIX_MASK7, 0); ++ } ++ ++ rtw8814a_spur_nbi_setting(rtwdev); ++} ++ ++static void rtw8814a_set_bw_mode(struct rtw_dev *rtwdev, u8 new_band, ++ u8 channel, u8 bw, u8 primary_chan_idx) ++{ ++ u8 txsc40 = 0, txsc20, txsc; ++ ++ rtw8814a_set_bw_reg_mac(rtwdev, bw); ++ ++ txsc20 = primary_chan_idx; ++ if (bw == RTW_CHANNEL_WIDTH_80) { ++ if (txsc20 == RTW_SC_20_UPPER || txsc20 == RTW_SC_20_UPMOST) ++ txsc40 = RTW_SC_40_UPPER; ++ else ++ txsc40 = RTW_SC_40_LOWER; ++ } ++ ++ txsc = BIT_TXSC_20M(txsc20) | BIT_TXSC_40M(txsc40); ++ rtw_write8(rtwdev, REG_DATA_SC, txsc); ++ ++ rtw8814a_set_bw_reg_adc(rtwdev, bw); ++ rtw8814a_set_bw_reg_agc(rtwdev, new_band, bw); ++ ++ if (bw == RTW_CHANNEL_WIDTH_80) { ++ rtw_write32_mask(rtwdev, REG_ADCCLK, 0x3c, txsc); ++ } else if (bw == RTW_CHANNEL_WIDTH_40) { ++ rtw_write32_mask(rtwdev, REG_ADCCLK, 0x3c, txsc); ++ ++ if (txsc == RTW_SC_20_UPPER) ++ rtw_write32_set(rtwdev, REG_RXSB, BIT(4)); ++ else ++ rtw_write32_clr(rtwdev, REG_RXSB, BIT(4)); ++ } ++ ++ rtw8814a_set_bw_rf(rtwdev, bw); ++ ++ rtw8814a_adc_clk(rtwdev); ++ ++ rtw8814a_spur_calibration(rtwdev, channel, bw); ++} ++ ++static void rtw8814a_set_channel(struct rtw_dev *rtwdev, u8 channel, u8 bw, ++ u8 primary_chan_idx) ++{ ++ u8 old_band, new_band; ++ ++ if (rtw_read8(rtwdev, REG_CCK_CHECK) & BIT_CHECK_CCK_EN) ++ old_band = RTW_BAND_5G; ++ else ++ old_band = RTW_BAND_2G; ++ ++ if (channel > 14) ++ new_band = RTW_BAND_5G; ++ else ++ new_band = RTW_BAND_2G; ++ ++ if (new_band != old_band) ++ rtw8814a_switch_band(rtwdev, new_band, bw); ++ ++ rtw8814a_switch_channel(rtwdev, channel); ++ ++ rtw8814a_24g_cck_tx_dfir(rtwdev, channel); ++ ++ rtw8814a_set_bw_mode(rtwdev, new_band, channel, bw, primary_chan_idx); ++} ++ ++static s8 rtw8814a_cck_rx_pwr(u8 lna_idx, u8 vga_idx) ++{ ++ s8 rx_pwr_all = 0; ++ ++ switch (lna_idx) { ++ case 7: ++ rx_pwr_all = -38 - 2 * vga_idx; ++ break; ++ case 5: ++ rx_pwr_all = -28 - 2 * vga_idx; ++ break; ++ case 3: ++ rx_pwr_all = -8 - 2 * vga_idx; ++ break; ++ case 2: ++ rx_pwr_all = -1 - 2 * vga_idx; ++ break; ++ default: ++ break; ++ } ++ ++ return rx_pwr_all; ++} ++ ++static void rtw8814a_query_phy_status(struct rtw_dev *rtwdev, u8 *phy_status, ++ struct rtw_rx_pkt_stat *pkt_stat) ++{ ++ struct rtw_dm_info *dm_info = &rtwdev->dm_info; ++ struct rtw_jaguar_phy_status_rpt *rpt; ++ u8 gain[RTW_RF_PATH_MAX], rssi, i; ++ s8 rx_pwr_db, middle1, middle2; ++ s8 snr[RTW_RF_PATH_MAX]; ++ s8 evm[RTW_RF_PATH_MAX]; ++ u8 rfmode, subchannel; ++ u8 lna, vga; ++ s8 cfo[2]; ++ ++ rpt = (struct rtw_jaguar_phy_status_rpt *)phy_status; ++ ++ pkt_stat->bw = RTW_CHANNEL_WIDTH_20; ++ ++ if (pkt_stat->rate <= DESC_RATE11M) { ++ lna = le32_get_bits(rpt->w1, RTW_JGRPHY_W1_AGC_RPT_LNA_IDX); ++ vga = le32_get_bits(rpt->w1, RTW_JGRPHY_W1_AGC_RPT_VGA_IDX); ++ ++ rx_pwr_db = rtw8814a_cck_rx_pwr(lna, vga); ++ ++ pkt_stat->rx_power[RF_PATH_A] = rx_pwr_db; ++ pkt_stat->rssi = rtw_phy_rf_power_2_rssi(pkt_stat->rx_power, 1); ++ dm_info->rssi[RF_PATH_A] = pkt_stat->rssi; ++ pkt_stat->signal_power = rx_pwr_db; ++ } else { /* OFDM rate */ ++ gain[RF_PATH_A] = le32_get_bits(rpt->w0, RTW_JGRPHY_W0_GAIN_A); ++ gain[RF_PATH_B] = le32_get_bits(rpt->w0, RTW_JGRPHY_W0_GAIN_B); ++ gain[RF_PATH_C] = le32_get_bits(rpt->w5, RTW_JGRPHY_W5_GAIN_C); ++ gain[RF_PATH_D] = le32_get_bits(rpt->w6, RTW_JGRPHY_W6_GAIN_D); ++ ++ snr[RF_PATH_A] = le32_get_bits(rpt->w3, RTW_JGRPHY_W3_RXSNR_A); ++ snr[RF_PATH_B] = le32_get_bits(rpt->w4, RTW_JGRPHY_W4_RXSNR_B); ++ snr[RF_PATH_C] = le32_get_bits(rpt->w5, RTW_JGRPHY_W5_RXSNR_C); ++ snr[RF_PATH_D] = le32_get_bits(rpt->w5, RTW_JGRPHY_W5_RXSNR_D); ++ ++ evm[RF_PATH_A] = le32_get_bits(rpt->w3, RTW_JGRPHY_W3_RXEVM_1); ++ evm[RF_PATH_B] = le32_get_bits(rpt->w3, RTW_JGRPHY_W3_RXEVM_2); ++ evm[RF_PATH_C] = le32_get_bits(rpt->w4, RTW_JGRPHY_W4_RXEVM_3); ++ evm[RF_PATH_D] = le32_get_bits(rpt->w5, RTW_JGRPHY_W5_RXEVM_4); ++ ++ if (pkt_stat->rate <= DESC_RATE54M) ++ evm[RF_PATH_A] = le32_get_bits(rpt->w6, ++ RTW_JGRPHY_W6_SIGEVM); ++ ++ for (i = RF_PATH_A; i < RTW_RF_PATH_MAX; i++) { ++ pkt_stat->rx_power[i] = gain[i] - 110; ++ ++ rssi = rtw_phy_rf_power_2_rssi(&pkt_stat->rx_power[i], 1); ++ dm_info->rssi[i] = rssi; ++ ++ pkt_stat->rx_snr[i] = snr[i]; ++ dm_info->rx_snr[i] = snr[i] >> 1; ++ ++ pkt_stat->rx_evm[i] = evm[i]; ++ evm[i] = max_t(s8, -127, evm[i]); ++ dm_info->rx_evm_dbm[i] = abs(evm[i]) >> 1; ++ } ++ ++ rssi = rtw_phy_rf_power_2_rssi(pkt_stat->rx_power, ++ RTW_RF_PATH_MAX); ++ pkt_stat->rssi = rssi; ++ ++ /* When power saving is enabled the hardware sometimes ++ * reports unbelievably high gain for paths A and C ++ * (e.g. one frame 64 68 68 72, the next frame 106 66 88 72, ++ * the next 66 66 68 72), so use the second lowest gain ++ * instead of the highest. ++ */ ++ middle1 = max(min(gain[RF_PATH_A], gain[RF_PATH_B]), ++ min(gain[RF_PATH_C], gain[RF_PATH_D])); ++ middle2 = min(max(gain[RF_PATH_A], gain[RF_PATH_B]), ++ max(gain[RF_PATH_C], gain[RF_PATH_D])); ++ rx_pwr_db = min(middle1, middle2); ++ rx_pwr_db -= 110; ++ pkt_stat->signal_power = rx_pwr_db; ++ ++ rfmode = le32_get_bits(rpt->w0, RTW_JGRPHY_W0_R_RFMOD); ++ subchannel = le32_get_bits(rpt->w0, RTW_JGRPHY_W0_SUB_CHNL); ++ ++ if (rfmode == 1 && subchannel == 0) { ++ pkt_stat->bw = RTW_CHANNEL_WIDTH_40; ++ } else if (rfmode == 2) { ++ if (subchannel == 0) ++ pkt_stat->bw = RTW_CHANNEL_WIDTH_80; ++ else if (subchannel == 9 || subchannel == 10) ++ pkt_stat->bw = RTW_CHANNEL_WIDTH_40; ++ } ++ ++ cfo[RF_PATH_A] = le32_get_bits(rpt->w2, RTW_JGRPHY_W2_CFO_TAIL_A); ++ cfo[RF_PATH_B] = le32_get_bits(rpt->w2, RTW_JGRPHY_W2_CFO_TAIL_B); ++ ++ for (i = RF_PATH_A; i < 2; i++) { ++ pkt_stat->cfo_tail[i] = cfo[i]; ++ dm_info->cfo_tail[i] = (cfo[i] * 5) >> 1; ++ } ++ } ++} ++ ++static void ++rtw8814a_set_tx_power_index_by_rate(struct rtw_dev *rtwdev, u8 path, u8 rs) ++{ ++ struct rtw_hal *hal = &rtwdev->hal; ++ u32 txagc_table_wd; ++ u8 rate, pwr_index; ++ int j; ++ ++ for (j = 0; j < rtw_rate_size[rs]; j++) { ++ rate = rtw_rate_section[rs][j]; ++ ++ pwr_index = hal->tx_pwr_tbl[path][rate] + 2; ++ if (pwr_index > rtwdev->chip->max_power_index) ++ pwr_index = rtwdev->chip->max_power_index; ++ ++ txagc_table_wd = 0x00801000; ++ txagc_table_wd |= (pwr_index << 24) | (path << 8) | rate; ++ ++ rtw_write32(rtwdev, REG_AGC_TBL, txagc_table_wd); ++ ++ /* first time to turn on the txagc table ++ * second to write the addr0 ++ */ ++ if (rate == DESC_RATE1M) ++ rtw_write32(rtwdev, REG_AGC_TBL, txagc_table_wd); ++ } ++} ++ ++static void rtw8814a_set_tx_power_index(struct rtw_dev *rtwdev) ++{ ++ struct rtw_hal *hal = &rtwdev->hal; ++ int path; ++ ++ for (path = 0; path < hal->rf_path_num; path++) { ++ if (hal->current_band_type == RTW_BAND_2G) ++ rtw8814a_set_tx_power_index_by_rate(rtwdev, path, ++ RTW_RATE_SECTION_CCK); ++ ++ rtw8814a_set_tx_power_index_by_rate(rtwdev, path, ++ RTW_RATE_SECTION_OFDM); ++ ++ if (test_bit(RTW_FLAG_SCANNING, rtwdev->flags)) ++ continue; ++ ++ rtw8814a_set_tx_power_index_by_rate(rtwdev, path, ++ RTW_RATE_SECTION_HT_1S); ++ rtw8814a_set_tx_power_index_by_rate(rtwdev, path, ++ RTW_RATE_SECTION_VHT_1S); ++ ++ rtw8814a_set_tx_power_index_by_rate(rtwdev, path, ++ RTW_RATE_SECTION_HT_2S); ++ rtw8814a_set_tx_power_index_by_rate(rtwdev, path, ++ RTW_RATE_SECTION_VHT_2S); ++ ++ rtw8814a_set_tx_power_index_by_rate(rtwdev, path, ++ RTW_RATE_SECTION_HT_3S); ++ rtw8814a_set_tx_power_index_by_rate(rtwdev, path, ++ RTW_RATE_SECTION_VHT_3S); ++ } ++} ++ ++static void rtw8814a_cfg_ldo25(struct rtw_dev *rtwdev, bool enable) ++{ ++} ++ ++static void rtw8814a_false_alarm_statistics(struct rtw_dev *rtwdev) ++{ ++ struct rtw_dm_info *dm_info = &rtwdev->dm_info; ++ u32 cck_fa_cnt, ofdm_fa_cnt; ++ u32 crc32_cnt, cca32_cnt; ++ u32 cck_enable; ++ ++ cck_enable = rtw_read32(rtwdev, REG_RXPSEL) & BIT(28); ++ cck_fa_cnt = rtw_read16(rtwdev, REG_FA_CCK); ++ ofdm_fa_cnt = rtw_read16(rtwdev, REG_FA_OFDM); ++ ++ dm_info->cck_fa_cnt = cck_fa_cnt; ++ dm_info->ofdm_fa_cnt = ofdm_fa_cnt; ++ dm_info->total_fa_cnt = ofdm_fa_cnt; ++ if (cck_enable) ++ dm_info->total_fa_cnt += cck_fa_cnt; ++ ++ crc32_cnt = rtw_read32(rtwdev, REG_CRC_CCK); ++ dm_info->cck_ok_cnt = u32_get_bits(crc32_cnt, MASKLWORD); ++ dm_info->cck_err_cnt = u32_get_bits(crc32_cnt, MASKHWORD); ++ ++ crc32_cnt = rtw_read32(rtwdev, REG_CRC_OFDM); ++ dm_info->ofdm_ok_cnt = u32_get_bits(crc32_cnt, MASKLWORD); ++ dm_info->ofdm_err_cnt = u32_get_bits(crc32_cnt, MASKHWORD); ++ ++ crc32_cnt = rtw_read32(rtwdev, REG_CRC_HT); ++ dm_info->ht_ok_cnt = u32_get_bits(crc32_cnt, MASKLWORD); ++ dm_info->ht_err_cnt = u32_get_bits(crc32_cnt, MASKHWORD); ++ ++ crc32_cnt = rtw_read32(rtwdev, REG_CRC_VHT); ++ dm_info->vht_ok_cnt = u32_get_bits(crc32_cnt, MASKLWORD); ++ dm_info->vht_err_cnt = u32_get_bits(crc32_cnt, MASKHWORD); ++ ++ cca32_cnt = rtw_read32(rtwdev, REG_CCA_OFDM); ++ dm_info->ofdm_cca_cnt = u32_get_bits(cca32_cnt, MASKHWORD); ++ dm_info->total_cca_cnt = dm_info->ofdm_cca_cnt; ++ if (cck_enable) { ++ cca32_cnt = rtw_read32(rtwdev, REG_CCA_CCK); ++ dm_info->cck_cca_cnt = u32_get_bits(cca32_cnt, MASKLWORD); ++ dm_info->total_cca_cnt += dm_info->cck_cca_cnt; ++ } ++ ++ rtw_write32_set(rtwdev, REG_FAS, BIT(17)); ++ rtw_write32_clr(rtwdev, REG_FAS, BIT(17)); ++ rtw_write32_clr(rtwdev, REG_CCK0_FAREPORT, BIT(15)); ++ rtw_write32_set(rtwdev, REG_CCK0_FAREPORT, BIT(15)); ++ rtw_write32_set(rtwdev, REG_CNTRST, BIT(0)); ++ rtw_write32_clr(rtwdev, REG_CNTRST, BIT(0)); ++} ++ ++#define MAC_REG_NUM_8814 2 ++#define BB_REG_NUM_8814 14 ++#define RF_REG_NUM_8814 1 ++ ++static void rtw8814a_iqk_backup_mac_bb(struct rtw_dev *rtwdev, ++ u32 *mac_backup, u32 *bb_backup, ++ const u32 *mac_regs, ++ const u32 *bb_regs) ++{ ++ u32 i; ++ ++ /* save MACBB default value */ ++ for (i = 0; i < MAC_REG_NUM_8814; i++) ++ mac_backup[i] = rtw_read32(rtwdev, mac_regs[i]); ++ ++ for (i = 0; i < BB_REG_NUM_8814; i++) ++ bb_backup[i] = rtw_read32(rtwdev, bb_regs[i]); ++} ++ ++static void rtw8814a_iqk_backup_rf(struct rtw_dev *rtwdev, ++ u32 rf_backup[][4], const u32 *rf_regs) ++{ ++ u32 i; ++ ++ /* Save RF Parameters */ ++ for (i = 0; i < RF_REG_NUM_8814; i++) { ++ rf_backup[i][RF_PATH_A] = rtw_read_rf(rtwdev, RF_PATH_A, ++ rf_regs[i], RFREG_MASK); ++ rf_backup[i][RF_PATH_B] = rtw_read_rf(rtwdev, RF_PATH_B, ++ rf_regs[i], RFREG_MASK); ++ rf_backup[i][RF_PATH_C] = rtw_read_rf(rtwdev, RF_PATH_C, ++ rf_regs[i], RFREG_MASK); ++ rf_backup[i][RF_PATH_D] = rtw_read_rf(rtwdev, RF_PATH_D, ++ rf_regs[i], RFREG_MASK); ++ } ++} ++ ++static void rtw8814a_iqk_afe_setting(struct rtw_dev *rtwdev, bool do_iqk) ++{ ++ if (do_iqk) { ++ /* IQK AFE setting RX_WAIT_CCA mode */ ++ rtw_write32(rtwdev, REG_AFE_PWR1_A, 0x0e808003); ++ rtw_write32(rtwdev, REG_AFE_PWR1_B, 0x0e808003); ++ rtw_write32(rtwdev, REG_AFE_PWR1_C, 0x0e808003); ++ rtw_write32(rtwdev, REG_AFE_PWR1_D, 0x0e808003); ++ } else { ++ rtw_write32(rtwdev, REG_AFE_PWR1_A, 0x07808003); ++ rtw_write32(rtwdev, REG_AFE_PWR1_B, 0x07808003); ++ rtw_write32(rtwdev, REG_AFE_PWR1_C, 0x07808003); ++ rtw_write32(rtwdev, REG_AFE_PWR1_D, 0x07808003); ++ } ++ ++ rtw_write32_mask(rtwdev, REG_DAC_RSTB, BIT(13), 0x1); ++ ++ rtw_write8_set(rtwdev, REG_GNT_BT, BIT(2) | BIT(1)); ++ rtw_write8_clr(rtwdev, REG_GNT_BT, BIT(2) | BIT(1)); ++ ++ rtw_write32_set(rtwdev, REG_CCK_RPT_FORMAT, BIT(2)); ++ rtw_write32_clr(rtwdev, REG_CCK_RPT_FORMAT, BIT(2)); ++} ++ ++static void rtw8814a_iqk_restore_mac_bb(struct rtw_dev *rtwdev, ++ u32 *mac_backup, u32 *bb_backup, ++ const u32 *mac_regs, ++ const u32 *bb_regs) ++{ ++ u32 i; ++ ++ /* Reload MacBB Parameters */ ++ for (i = 0; i < MAC_REG_NUM_8814; i++) ++ rtw_write32(rtwdev, mac_regs[i], mac_backup[i]); ++ ++ for (i = 0; i < BB_REG_NUM_8814; i++) ++ rtw_write32(rtwdev, bb_regs[i], bb_backup[i]); ++} ++ ++static void rtw8814a_iqk_restore_rf(struct rtw_dev *rtwdev, ++ const u32 rf_backup[][4], ++ const u32 *rf_regs) ++{ ++ u32 i; ++ ++ rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWE, RFREG_MASK, 0x0); ++ rtw_write_rf(rtwdev, RF_PATH_B, RF_LUTWE, RFREG_MASK, 0x0); ++ rtw_write_rf(rtwdev, RF_PATH_C, RF_LUTWE, RFREG_MASK, 0x0); ++ rtw_write_rf(rtwdev, RF_PATH_D, RF_LUTWE, RFREG_MASK, 0x0); ++ ++ rtw_write_rf(rtwdev, RF_PATH_A, RF_RXBB2, RFREG_MASK, 0x88001); ++ rtw_write_rf(rtwdev, RF_PATH_B, RF_RXBB2, RFREG_MASK, 0x88001); ++ rtw_write_rf(rtwdev, RF_PATH_C, RF_RXBB2, RFREG_MASK, 0x88001); ++ rtw_write_rf(rtwdev, RF_PATH_D, RF_RXBB2, RFREG_MASK, 0x88001); ++ ++ for (i = 0; i < RF_REG_NUM_8814; i++) { ++ rtw_write_rf(rtwdev, RF_PATH_A, rf_regs[i], ++ RFREG_MASK, rf_backup[i][RF_PATH_A]); ++ rtw_write_rf(rtwdev, RF_PATH_B, rf_regs[i], ++ RFREG_MASK, rf_backup[i][RF_PATH_B]); ++ rtw_write_rf(rtwdev, RF_PATH_C, rf_regs[i], ++ RFREG_MASK, rf_backup[i][RF_PATH_C]); ++ rtw_write_rf(rtwdev, RF_PATH_D, rf_regs[i], ++ RFREG_MASK, rf_backup[i][RF_PATH_D]); ++ } ++} ++ ++static void rtw8814a_iqk_reset_nctl(struct rtw_dev *rtwdev) ++{ ++ rtw_write32(rtwdev, 0x1b00, 0xf8000000); ++ rtw_write32(rtwdev, 0x1b80, 0x00000006); ++ ++ rtw_write32(rtwdev, 0x1b00, 0xf8000000); ++ rtw_write32(rtwdev, 0x1b80, 0x00000002); ++} ++ ++static void rtw8814a_iqk_configure_mac(struct rtw_dev *rtwdev) ++{ ++ rtw_write8(rtwdev, REG_TXPAUSE, 0x3f); ++ rtw_write32_clr(rtwdev, REG_BCN_CTRL, ++ (BIT_EN_BCN_FUNCTION << 8) | BIT_EN_BCN_FUNCTION); ++ ++ /* RX ante off */ ++ rtw_write8(rtwdev, REG_RXPSEL, 0x00); ++ /* CCA off */ ++ rtw_write32_mask(rtwdev, REG_CCA2ND, 0xf, 0xe); ++ /* CCK RX path off */ ++ rtw_write32_set(rtwdev, REG_PRECTRL, BIT_IQ_WGT); ++ rtw_write32(rtwdev, REG_RFE_PINMUX_A, 0x77777777); ++ rtw_write32(rtwdev, REG_RFE_PINMUX_B, 0x77777777); ++ rtw_write32(rtwdev, REG_RFE_PINMUX_C, 0x77777777); ++ rtw_write32(rtwdev, REG_RFE_PINMUX_D, 0x77777777); ++ rtw_write32_mask(rtwdev, REG_RFE_INVSEL_D, BIT_RFE_SELSW0_D, 0x77); ++ rtw_write32_mask(rtwdev, REG_PSD, BIT_PSD_INI, 0x0); ++ ++ rtw_write32_mask(rtwdev, REG_RFE_INV0, 0xf, 0x0); ++} ++ ++static void rtw8814a_lok_one_shot(struct rtw_dev *rtwdev, u8 path) ++{ ++ u32 lok_temp1, lok_temp2; ++ bool lok_ready; ++ u8 ii; ++ ++ /* ADC Clock source */ ++ rtw_write32_mask(rtwdev, REG_FAS, BIT(21) | BIT(20), path); ++ /* LOK: CMD ID = 0 ++ * {0xf8000011, 0xf8000021, 0xf8000041, 0xf8000081} ++ */ ++ rtw_write32(rtwdev, 0x1b00, 0xf8000001 | (BIT(path) << 4)); ++ ++ usleep_range(1000, 1100); ++ ++ if (read_poll_timeout(!rtw_read32_mask, lok_ready, lok_ready, ++ 1000, 10000, false, ++ rtwdev, 0x1b00, BIT(0))) { ++ rtw_dbg(rtwdev, RTW_DBG_RFK, "==>S%d LOK timed out\n", path); ++ ++ rtw8814a_iqk_reset_nctl(rtwdev); ++ ++ rtw_write_rf(rtwdev, path, RF_DTXLOK, RFREG_MASK, 0x08400); ++ ++ return; ++ } ++ ++ rtw_write32(rtwdev, 0x1b00, 0xf8000000 | (path << 1)); ++ rtw_write32(rtwdev, 0x1bd4, 0x003f0001); ++ ++ lok_temp2 = rtw_read32_mask(rtwdev, 0x1bfc, 0x003e0000); ++ lok_temp2 = (lok_temp2 + 0x10) & 0x1f; ++ ++ lok_temp1 = rtw_read32_mask(rtwdev, 0x1bfc, 0x0000003e); ++ lok_temp1 = (lok_temp1 + 0x10) & 0x1f; ++ ++ for (ii = 1; ii < 5; ii++) { ++ lok_temp1 += (lok_temp1 & BIT(4 - ii)) << (ii * 2); ++ lok_temp2 += (lok_temp2 & BIT(4 - ii)) << (ii * 2); ++ } ++ ++ rtw_dbg(rtwdev, RTW_DBG_RFK, ++ "path %d lok_temp1 = %#x, lok_temp2 = %#x\n", ++ path, lok_temp1 >> 4, lok_temp2 >> 4); ++ ++ rtw_write_rf(rtwdev, path, RF_DTXLOK, 0x07c00, lok_temp1 >> 4); ++ rtw_write_rf(rtwdev, path, RF_DTXLOK, 0xf8000, lok_temp2 >> 4); ++} ++ ++static void rtw8814a_iqk_tx_one_shot(struct rtw_dev *rtwdev, u8 path, ++ u32 *tx_matrix, bool *tx_ok) ++{ ++ u8 bw = rtwdev->hal.current_band_width; ++ u8 cal_retry; ++ u32 iqk_cmd; ++ ++ for (cal_retry = 0; cal_retry < 4; cal_retry++) { ++ rtw_write32_mask(rtwdev, REG_FAS, BIT(21) | BIT(20), path); ++ ++ iqk_cmd = 0xf8000001 | ((bw + 3) << 8) | (BIT(path) << 4); ++ ++ rtw_dbg(rtwdev, RTW_DBG_RFK, "TXK_Trigger = %#x\n", iqk_cmd); ++ ++ rtw_write32(rtwdev, 0x1b00, iqk_cmd); ++ ++ usleep_range(10000, 11000); ++ ++ if (read_poll_timeout(!rtw_read32_mask, *tx_ok, *tx_ok, ++ 1000, 20000, false, ++ rtwdev, 0x1b00, BIT(0))) { ++ rtw_dbg(rtwdev, RTW_DBG_RFK, ++ "tx iqk S%d timed out\n", path); ++ ++ rtw8814a_iqk_reset_nctl(rtwdev); ++ } else { ++ *tx_ok = !rtw_read32_mask(rtwdev, 0x1b08, BIT(26)); ++ ++ if (*tx_ok) ++ break; ++ } ++ } ++ ++ rtw_dbg(rtwdev, RTW_DBG_RFK, "S%d tx ==> 0x1b00 = 0x%x\n", ++ path, rtw_read32(rtwdev, 0x1b00)); ++ rtw_dbg(rtwdev, RTW_DBG_RFK, "S%d tx ==> 0x1b08 = 0x%x\n", ++ path, rtw_read32(rtwdev, 0x1b08)); ++ rtw_dbg(rtwdev, RTW_DBG_RFK, "S%d tx ==> cal_retry = %x\n", ++ path, cal_retry); ++ ++ rtw_write32(rtwdev, 0x1b00, 0xf8000000 | (path << 1)); ++ ++ if (*tx_ok) { ++ *tx_matrix = rtw_read32(rtwdev, 0x1b38); ++ ++ rtw_dbg(rtwdev, RTW_DBG_RFK, "S%d_IQC = 0x%x\n", ++ path, *tx_matrix); ++ } ++} ++ ++static void rtw8814a_iqk_rx_one_shot(struct rtw_dev *rtwdev, u8 path, ++ u32 *tx_matrix, bool *tx_ok) ++{ ++ static const u16 iqk_apply[RTW_RF_PATH_MAX] = { ++ REG_TXAGCIDX, REG_TX_AGC_B, REG_TX_AGC_C, REG_TX_AGC_D ++ }; ++ u8 band = rtwdev->hal.current_band_type; ++ u8 bw = rtwdev->hal.current_band_width; ++ u32 rx_matrix; ++ u8 cal_retry; ++ u32 iqk_cmd; ++ bool rx_ok; ++ ++ for (cal_retry = 0; cal_retry < 4; cal_retry++) { ++ rtw_write32_mask(rtwdev, REG_FAS, BIT(21) | BIT(20), path); ++ ++ if (band == RTW_BAND_2G) { ++ rtw_write_rf(rtwdev, path, RF_LUTDBG, BIT(11), 0x1); ++ rtw_write_rf(rtwdev, path, RF_GAINTX, 0xfffff, 0x51ce1); ++ ++ switch (path) { ++ case 0: ++ case 1: ++ rtw_write32(rtwdev, REG_RFE_PINMUX_B, ++ 0x54775477); ++ break; ++ case 2: ++ rtw_write32(rtwdev, REG_RFE_PINMUX_C, ++ 0x54775477); ++ break; ++ case 3: ++ rtw_write32(rtwdev, REG_RFE_INVSEL_D, 0x75400000); ++ rtw_write32(rtwdev, REG_RFE_PINMUX_D, ++ 0x77777777); ++ break; ++ } ++ } ++ ++ iqk_cmd = 0xf8000001 | ((9 - bw) << 8) | (BIT(path) << 4); ++ ++ rtw_dbg(rtwdev, RTW_DBG_RFK, "RXK_Trigger = 0x%x\n", iqk_cmd); ++ ++ rtw_write32(rtwdev, 0x1b00, iqk_cmd); ++ ++ usleep_range(10000, 11000); ++ ++ if (read_poll_timeout(!rtw_read32_mask, rx_ok, rx_ok, ++ 1000, 20000, false, ++ rtwdev, 0x1b00, BIT(0))) { ++ rtw_dbg(rtwdev, RTW_DBG_RFK, ++ "rx iqk S%d timed out\n", path); ++ ++ rtw8814a_iqk_reset_nctl(rtwdev); ++ } else { ++ rx_ok = !rtw_read32_mask(rtwdev, 0x1b08, BIT(26)); ++ ++ if (rx_ok) ++ break; ++ } ++ } ++ ++ rtw_dbg(rtwdev, RTW_DBG_RFK, "S%d rx ==> 0x1b00 = 0x%x\n", ++ path, rtw_read32(rtwdev, 0x1b00)); ++ rtw_dbg(rtwdev, RTW_DBG_RFK, "S%d rx ==> 0x1b08 = 0x%x\n", ++ path, rtw_read32(rtwdev, 0x1b08)); ++ rtw_dbg(rtwdev, RTW_DBG_RFK, "S%d rx ==> cal_retry = %x\n", ++ path, cal_retry); ++ ++ rtw_write32(rtwdev, 0x1b00, 0xf8000000 | (path << 1)); ++ ++ if (rx_ok) { ++ rtw_write32(rtwdev, 0x1b3c, 0x20000000); ++ rx_matrix = rtw_read32(rtwdev, 0x1b3c); ++ ++ rtw_dbg(rtwdev, RTW_DBG_RFK, "S%d_IQC = 0x%x\n", ++ path, rx_matrix); ++ } ++ ++ if (*tx_ok) ++ rtw_write32(rtwdev, 0x1b38, *tx_matrix); ++ else ++ rtw_write32_mask(rtwdev, iqk_apply[path], BIT(0), 0x0); ++ ++ if (!rx_ok) ++ rtw_write32_mask(rtwdev, iqk_apply[path], ++ BIT(11) | BIT(10), 0x0); ++ ++ if (band == RTW_BAND_2G) ++ rtw_write_rf(rtwdev, path, RF_LUTDBG, BIT(11), 0x0); ++} ++ ++static void rtw8814a_iqk(struct rtw_dev *rtwdev) ++{ ++ u8 band = rtwdev->hal.current_band_type; ++ u8 bw = rtwdev->hal.current_band_width; ++ u32 tx_matrix[RTW_RF_PATH_MAX]; ++ bool tx_ok[RTW_RF_PATH_MAX]; ++ u8 path; ++ ++ rtw_dbg(rtwdev, RTW_DBG_RFK, "IQK band = %d GHz bw = %d MHz\n", ++ band == RTW_BAND_2G ? 2 : 5, (1 << (bw + 1)) * 10); ++ ++ rtw_write_rf(rtwdev, RF_PATH_A, RF_TXMOD, BIT(19), 0x1); ++ rtw_write_rf(rtwdev, RF_PATH_B, RF_TXMOD, BIT(19), 0x1); ++ rtw_write_rf(rtwdev, RF_PATH_C, RF_TXMOD, BIT(19), 0x1); ++ rtw_write_rf(rtwdev, RF_PATH_D, RF_TXMOD, BIT(19), 0x1); ++ ++ rtw_write32_mask(rtwdev, REG_TXAGCIDX, ++ (BIT(11) | BIT(10) | BIT(0)), 0x401); ++ rtw_write32_mask(rtwdev, REG_TX_AGC_B, ++ (BIT(11) | BIT(10) | BIT(0)), 0x401); ++ rtw_write32_mask(rtwdev, REG_TX_AGC_C, ++ (BIT(11) | BIT(10) | BIT(0)), 0x401); ++ rtw_write32_mask(rtwdev, REG_TX_AGC_D, ++ (BIT(11) | BIT(10) | BIT(0)), 0x401); ++ ++ if (band == RTW_BAND_5G) ++ rtw_write32(rtwdev, 0x1b00, 0xf8000ff1); ++ else ++ rtw_write32(rtwdev, 0x1b00, 0xf8000ef1); ++ ++ usleep_range(1000, 1100); ++ ++ rtw_write32(rtwdev, 0x810, 0x20101063); ++ rtw_write32(rtwdev, REG_DAC_RSTB, 0x0B00C000); ++ ++ for (path = RF_PATH_A; path < RTW_RF_PATH_MAX; path++) ++ rtw8814a_lok_one_shot(rtwdev, path); ++ ++ for (path = RF_PATH_A; path < RTW_RF_PATH_MAX; path++) ++ rtw8814a_iqk_tx_one_shot(rtwdev, path, ++ &tx_matrix[path], &tx_ok[path]); ++ ++ for (path = RF_PATH_A; path < RTW_RF_PATH_MAX; path++) ++ rtw8814a_iqk_rx_one_shot(rtwdev, path, ++ &tx_matrix[path], &tx_ok[path]); ++} ++ ++static void rtw8814a_do_iqk(struct rtw_dev *rtwdev) ++{ ++ static const u32 backup_mac_reg[MAC_REG_NUM_8814] = {0x520, 0x550}; ++ static const u32 backup_bb_reg[BB_REG_NUM_8814] = { ++ 0xa14, 0x808, 0x838, 0x90c, 0x810, 0xcb0, 0xeb0, ++ 0x18b4, 0x1ab4, 0x1abc, 0x9a4, 0x764, 0xcbc, 0x910 ++ }; ++ static const u32 backup_rf_reg[RF_REG_NUM_8814] = {0x0}; ++ u32 rf_backup[RF_REG_NUM_8814][RTW_RF_PATH_MAX]; ++ u32 mac_backup[MAC_REG_NUM_8814]; ++ u32 bb_backup[BB_REG_NUM_8814]; ++ ++ rtw8814a_iqk_backup_mac_bb(rtwdev, mac_backup, bb_backup, ++ backup_mac_reg, backup_bb_reg); ++ rtw8814a_iqk_afe_setting(rtwdev, true); ++ rtw8814a_iqk_backup_rf(rtwdev, rf_backup, backup_rf_reg); ++ rtw8814a_iqk_configure_mac(rtwdev); ++ rtw8814a_iqk(rtwdev); ++ rtw8814a_iqk_reset_nctl(rtwdev); /* for 3-wire to BB use */ ++ rtw8814a_iqk_afe_setting(rtwdev, false); ++ rtw8814a_iqk_restore_mac_bb(rtwdev, mac_backup, bb_backup, ++ backup_mac_reg, backup_bb_reg); ++ rtw8814a_iqk_restore_rf(rtwdev, rf_backup, backup_rf_reg); ++} ++ ++static void rtw8814a_phy_calibration(struct rtw_dev *rtwdev) ++{ ++ rtw8814a_do_iqk(rtwdev); ++} ++ ++static void rtw8814a_coex_cfg_init(struct rtw_dev *rtwdev) ++{ ++} ++ ++static void rtw8814a_coex_cfg_ant_switch(struct rtw_dev *rtwdev, u8 ctrl_type, ++ u8 pos_type) ++{ ++ /* Override rtw_coex_coex_ctrl_owner(). RF path C does not ++ * function when BIT_LTE_MUX_CTRL_PATH is set. ++ */ ++ rtw_write8_clr(rtwdev, REG_SYS_SDIO_CTRL + 3, ++ BIT_LTE_MUX_CTRL_PATH >> 24); ++} ++ ++static void rtw8814a_coex_cfg_gnt_fix(struct rtw_dev *rtwdev) ++{ ++} ++ ++static void rtw8814a_coex_cfg_gnt_debug(struct rtw_dev *rtwdev) ++{ ++} ++ ++static void rtw8814a_coex_cfg_rfe_type(struct rtw_dev *rtwdev) ++{ ++ struct rtw_coex *coex = &rtwdev->coex; ++ struct rtw_coex_rfe *coex_rfe = &coex->rfe; ++ ++ /* Only needed to make rtw8814a_coex_cfg_ant_switch() run. */ ++ coex_rfe->ant_switch_exist = true; ++} ++ ++static void rtw8814a_coex_cfg_wl_tx_power(struct rtw_dev *rtwdev, u8 wl_pwr) ++{ ++} ++ ++static void rtw8814a_coex_cfg_wl_rx_gain(struct rtw_dev *rtwdev, bool low_gain) ++{ ++} ++ ++static void rtw8814a_txagc_swing_offset(struct rtw_dev *rtwdev, u8 path, ++ u8 tx_pwr_idx_offset, ++ s8 *txagc_idx, u8 *swing_idx) ++{ ++ struct rtw_dm_info *dm_info = &rtwdev->dm_info; ++ u8 swing_upper_bound = dm_info->default_ofdm_index + 10; ++ s8 delta_pwr_idx = dm_info->delta_power_index[path]; ++ u8 swing_index = dm_info->default_ofdm_index; ++ u8 max_tx_pwr_idx_offset = 0xf; ++ u8 swing_lower_bound = 0; ++ s8 agc_index = 0; ++ ++ tx_pwr_idx_offset = min_t(u8, tx_pwr_idx_offset, max_tx_pwr_idx_offset); ++ ++ if (delta_pwr_idx >= 0) { ++ if (delta_pwr_idx <= tx_pwr_idx_offset) { ++ agc_index = delta_pwr_idx; ++ swing_index = dm_info->default_ofdm_index; ++ } else if (delta_pwr_idx > tx_pwr_idx_offset) { ++ agc_index = tx_pwr_idx_offset; ++ swing_index = dm_info->default_ofdm_index + ++ delta_pwr_idx - tx_pwr_idx_offset; ++ swing_index = min_t(u8, swing_index, swing_upper_bound); ++ } ++ } else { ++ if (dm_info->default_ofdm_index > abs(delta_pwr_idx)) ++ swing_index = ++ dm_info->default_ofdm_index + delta_pwr_idx; ++ else ++ swing_index = swing_lower_bound; ++ swing_index = max_t(u8, swing_index, swing_lower_bound); ++ ++ agc_index = 0; ++ } ++ ++ if (swing_index >= RTW_TXSCALE_SIZE) { ++ rtw_warn(rtwdev, "swing index overflow\n"); ++ swing_index = RTW_TXSCALE_SIZE - 1; ++ } ++ *txagc_idx = agc_index; ++ *swing_idx = swing_index; ++} ++ ++static void rtw8814a_pwrtrack_set_pwr(struct rtw_dev *rtwdev, u8 path, ++ u8 pwr_idx_offset) ++{ ++ static const u32 txagc_reg[RTW_RF_PATH_MAX] = { ++ REG_TX_AGC_A, REG_TX_AGC_B, REG_TX_AGC_C, REG_TX_AGC_D ++ }; ++ static const u32 txscale_reg[RTW_RF_PATH_MAX] = { ++ REG_TXSCALE_A, REG_TXSCALE_B, REG_TXSCALE_C, REG_TXSCALE_D ++ }; ++ s8 txagc_idx; ++ u8 swing_idx; ++ ++ rtw8814a_txagc_swing_offset(rtwdev, path, pwr_idx_offset, ++ &txagc_idx, &swing_idx); ++ rtw_write32_mask(rtwdev, txagc_reg[path], GENMASK(29, 25), ++ txagc_idx); ++ rtw_write32_mask(rtwdev, txscale_reg[path], BB_SWING_MASK, ++ rtw8814a_txscale_tbl[swing_idx]); ++} ++ ++static void rtw8814a_pwrtrack_set(struct rtw_dev *rtwdev, u8 path) ++{ ++ u8 max_pwr_idx = rtwdev->chip->max_power_index; ++ u8 band_width = rtwdev->hal.current_band_width; ++ u8 channel = rtwdev->hal.current_channel; ++ u8 tx_rate = rtwdev->dm_info.tx_rate; ++ u8 regd = rtw_regd_get(rtwdev); ++ u8 pwr_idx_offset, tx_pwr_idx; ++ ++ tx_pwr_idx = rtw_phy_get_tx_power_index(rtwdev, path, tx_rate, ++ band_width, channel, regd); ++ ++ tx_pwr_idx = min_t(u8, tx_pwr_idx, max_pwr_idx); ++ ++ pwr_idx_offset = max_pwr_idx - tx_pwr_idx; ++ ++ rtw8814a_pwrtrack_set_pwr(rtwdev, path, pwr_idx_offset); ++} ++ ++static void rtw8814a_phy_pwrtrack_path(struct rtw_dev *rtwdev, ++ struct rtw_swing_table *swing_table, ++ u8 path) ++{ ++ struct rtw_dm_info *dm_info = &rtwdev->dm_info; ++ u8 power_idx_cur, power_idx_last; ++ u8 delta; ++ ++ /* 8814A only has one thermal meter at PATH A */ ++ delta = rtw_phy_pwrtrack_get_delta(rtwdev, RF_PATH_A); ++ ++ power_idx_last = dm_info->delta_power_index[path]; ++ power_idx_cur = rtw_phy_pwrtrack_get_pwridx(rtwdev, swing_table, ++ path, RF_PATH_A, delta); ++ ++ /* if delta of power indexes are the same, just skip */ ++ if (power_idx_cur == power_idx_last) ++ return; ++ ++ dm_info->delta_power_index[path] = power_idx_cur; ++ rtw8814a_pwrtrack_set(rtwdev, path); ++} ++ ++static void rtw8814a_phy_pwrtrack(struct rtw_dev *rtwdev) ++{ ++ struct rtw_dm_info *dm_info = &rtwdev->dm_info; ++ struct rtw_swing_table swing_table; ++ u8 thermal_value, path; ++ ++ rtw_phy_config_swing_table(rtwdev, &swing_table); ++ ++ if (rtwdev->efuse.thermal_meter[RF_PATH_A] == 0xff) ++ return; ++ ++ thermal_value = rtw_read_rf(rtwdev, RF_PATH_A, RF_T_METER, 0xfc00); ++ ++ rtw_phy_pwrtrack_avg(rtwdev, thermal_value, RF_PATH_A); ++ ++ if (dm_info->pwr_trk_init_trigger) ++ dm_info->pwr_trk_init_trigger = false; ++ else if (!rtw_phy_pwrtrack_thermal_changed(rtwdev, thermal_value, ++ RF_PATH_A)) ++ goto iqk; ++ ++ for (path = RF_PATH_A; path < rtwdev->hal.rf_path_num; path++) ++ rtw8814a_phy_pwrtrack_path(rtwdev, &swing_table, path); ++ ++iqk: ++ if (rtw_phy_pwrtrack_need_iqk(rtwdev)) ++ rtw8814a_do_iqk(rtwdev); ++} ++ ++static void rtw8814a_pwr_track(struct rtw_dev *rtwdev) ++{ ++ struct rtw_dm_info *dm_info = &rtwdev->dm_info; ++ ++ if (!dm_info->pwr_trk_triggered) { ++ rtw_write_rf(rtwdev, RF_PATH_A, RF_T_METER, ++ GENMASK(17, 16), 0x03); ++ dm_info->pwr_trk_triggered = true; ++ return; ++ } ++ ++ rtw8814a_phy_pwrtrack(rtwdev); ++ dm_info->pwr_trk_triggered = false; ++} ++ ++static void rtw8814a_phy_cck_pd_set(struct rtw_dev *rtwdev, u8 new_lvl) ++{ ++ static const u8 pd[CCK_PD_LV_MAX] = {0x40, 0x83, 0xcd, 0xdd, 0xed}; ++ struct rtw_dm_info *dm_info = &rtwdev->dm_info; ++ ++ /* Override rtw_phy_cck_pd_lv_link(). It implements something ++ * like type 2/3/4. We need type 1 here. ++ */ ++ if (rtw_is_assoc(rtwdev)) { ++ if (dm_info->min_rssi > 60) { ++ new_lvl = CCK_PD_LV3; ++ } else if (dm_info->min_rssi > 35) { ++ new_lvl = CCK_PD_LV2; ++ } else if (dm_info->min_rssi > 20) { ++ if (dm_info->cck_fa_avg > 500) ++ new_lvl = CCK_PD_LV2; ++ else if (dm_info->cck_fa_avg < 250) ++ new_lvl = CCK_PD_LV1; ++ else ++ return; ++ } else { ++ new_lvl = CCK_PD_LV1; ++ } ++ } ++ ++ rtw_dbg(rtwdev, RTW_DBG_PHY, "lv: (%d) -> (%d)\n", ++ dm_info->cck_pd_lv[RTW_CHANNEL_WIDTH_20][RF_PATH_A], new_lvl); ++ ++ if (dm_info->cck_pd_lv[RTW_CHANNEL_WIDTH_20][RF_PATH_A] == new_lvl) ++ return; ++ ++ dm_info->cck_fa_avg = CCK_FA_AVG_RESET; ++ dm_info->cck_pd_lv[RTW_CHANNEL_WIDTH_20][RF_PATH_A] = new_lvl; ++ ++ rtw_write8(rtwdev, REG_CCK_PD_TH, pd[new_lvl]); ++} ++ ++static void rtw8814a_led_set(struct led_classdev *led, ++ enum led_brightness brightness) ++{ ++ struct rtw_dev *rtwdev = container_of(led, struct rtw_dev, led_cdev); ++ u32 led_gpio_cfg; ++ ++ led_gpio_cfg = rtw_read32(rtwdev, REG_GPIO_PIN_CTRL_2); ++ led_gpio_cfg |= BIT(16) | BIT(17) | BIT(21) | BIT(22); ++ ++ if (brightness == LED_OFF) { ++ led_gpio_cfg |= BIT(8) | BIT(9) | BIT(13) | BIT(14); ++ } else { ++ led_gpio_cfg &= ~(BIT(8) | BIT(9) | BIT(13) | BIT(14)); ++ led_gpio_cfg &= ~(BIT(0) | BIT(1) | BIT(5) | BIT(6)); ++ } ++ ++ rtw_write32(rtwdev, REG_GPIO_PIN_CTRL_2, led_gpio_cfg); ++} ++ ++static void rtw8814a_fill_txdesc_checksum(struct rtw_dev *rtwdev, ++ struct rtw_tx_pkt_info *pkt_info, ++ u8 *txdesc) ++{ ++ size_t words = 32 / 2; /* calculate the first 32 bytes (16 words) */ ++ ++ fill_txdesc_checksum_common(txdesc, words); ++} ++ ++static const struct rtw_chip_ops rtw8814a_ops = { ++ .power_on = rtw_power_on, ++ .power_off = rtw_power_off, ++ .phy_set_param = rtw8814a_phy_set_param, ++ .read_efuse = rtw8814a_read_efuse, ++ .query_phy_status = rtw8814a_query_phy_status, ++ .set_channel = rtw8814a_set_channel, ++ .mac_init = rtw8814a_mac_init, ++ .read_rf = rtw_phy_read_rf, ++ .write_rf = rtw_phy_write_rf_reg_sipi, ++ .set_tx_power_index = rtw8814a_set_tx_power_index, ++ .set_antenna = NULL, ++ .cfg_ldo25 = rtw8814a_cfg_ldo25, ++ .efuse_grant = rtw8814a_efuse_grant, ++ .false_alarm_statistics = rtw8814a_false_alarm_statistics, ++ .phy_calibration = rtw8814a_phy_calibration, ++ .cck_pd_set = rtw8814a_phy_cck_pd_set, ++ .pwr_track = rtw8814a_pwr_track, ++ .config_bfee = NULL, ++ .set_gid_table = NULL, ++ .cfg_csi_rate = NULL, ++ .led_set = rtw8814a_led_set, ++ .fill_txdesc_checksum = rtw8814a_fill_txdesc_checksum, ++ ++ .coex_set_init = rtw8814a_coex_cfg_init, ++ .coex_set_ant_switch = rtw8814a_coex_cfg_ant_switch, ++ .coex_set_gnt_fix = rtw8814a_coex_cfg_gnt_fix, ++ .coex_set_gnt_debug = rtw8814a_coex_cfg_gnt_debug, ++ .coex_set_rfe_type = rtw8814a_coex_cfg_rfe_type, ++ .coex_set_wl_tx_power = rtw8814a_coex_cfg_wl_tx_power, ++ .coex_set_wl_rx_gain = rtw8814a_coex_cfg_wl_rx_gain, ++}; ++ ++static const struct rtw_rqpn rqpn_table_8814a[] = { ++ /* SDIO */ ++ {RTW_DMA_MAPPING_NORMAL, RTW_DMA_MAPPING_NORMAL, /* vo vi */ ++ RTW_DMA_MAPPING_LOW, RTW_DMA_MAPPING_LOW, /* be bk */ ++ RTW_DMA_MAPPING_EXTRA, RTW_DMA_MAPPING_HIGH}, /* mg hi */ ++ /* PCIE */ ++ {RTW_DMA_MAPPING_HIGH, RTW_DMA_MAPPING_NORMAL, ++ RTW_DMA_MAPPING_LOW, RTW_DMA_MAPPING_LOW, ++ RTW_DMA_MAPPING_HIGH, RTW_DMA_MAPPING_HIGH}, ++ /* USB, 2 bulk out */ ++ {RTW_DMA_MAPPING_HIGH, RTW_DMA_MAPPING_HIGH, ++ RTW_DMA_MAPPING_NORMAL, RTW_DMA_MAPPING_NORMAL, ++ RTW_DMA_MAPPING_HIGH, RTW_DMA_MAPPING_HIGH}, ++ /* USB, 3 bulk out */ ++ {RTW_DMA_MAPPING_HIGH, RTW_DMA_MAPPING_NORMAL, ++ RTW_DMA_MAPPING_LOW, RTW_DMA_MAPPING_LOW, ++ RTW_DMA_MAPPING_HIGH, RTW_DMA_MAPPING_HIGH}, ++ /* USB, 4 bulk out */ ++ {RTW_DMA_MAPPING_HIGH, RTW_DMA_MAPPING_NORMAL, ++ RTW_DMA_MAPPING_LOW, RTW_DMA_MAPPING_LOW, ++ RTW_DMA_MAPPING_HIGH, RTW_DMA_MAPPING_HIGH}, ++}; ++ ++static const struct rtw_prioq_addrs prioq_addrs_8814a = { ++ .prio[RTW_DMA_MAPPING_EXTRA] = { ++ .rsvd = REG_FIFOPAGE_INFO_4, .avail = REG_FIFOPAGE_INFO_4 + 2, ++ }, ++ .prio[RTW_DMA_MAPPING_LOW] = { ++ .rsvd = REG_FIFOPAGE_INFO_2, .avail = REG_FIFOPAGE_INFO_2 + 2, ++ }, ++ .prio[RTW_DMA_MAPPING_NORMAL] = { ++ .rsvd = REG_FIFOPAGE_INFO_3, .avail = REG_FIFOPAGE_INFO_3 + 2, ++ }, ++ .prio[RTW_DMA_MAPPING_HIGH] = { ++ .rsvd = REG_FIFOPAGE_INFO_1, .avail = REG_FIFOPAGE_INFO_1 + 2, ++ }, ++ .wsize = true, ++}; ++ ++static const struct rtw_page_table page_table_8814a[] = { ++ /* SDIO */ ++ {0, 0, 0, 0, 0}, /* hq nq lq exq gapq */ ++ /* PCIE */ ++ {32, 32, 32, 32, 0}, ++ /* USB, 2 bulk out */ ++ {32, 32, 32, 32, 0}, ++ /* USB, 3 bulk out */ ++ {32, 32, 32, 32, 0}, ++ /* USB, 4 bulk out */ ++ {32, 32, 32, 32, 0}, ++}; ++ ++static const struct rtw_intf_phy_para_table phy_para_table_8814a = {}; ++ ++static const struct rtw_hw_reg rtw8814a_dig[] = { ++ [0] = { .addr = 0xc50, .mask = 0x7f }, ++ [1] = { .addr = 0xe50, .mask = 0x7f }, ++ [2] = { .addr = 0x1850, .mask = 0x7f }, ++ [3] = { .addr = 0x1a50, .mask = 0x7f }, ++}; ++ ++static const struct rtw_rfe_def rtw8814a_rfe_defs[] = { ++ [0] = { .phy_pg_tbl = &rtw8814a_bb_pg_type0_tbl, ++ .txpwr_lmt_tbl = &rtw8814a_txpwr_lmt_type0_tbl, ++ .pwr_track_tbl = &rtw8814a_rtw_pwrtrk_type0_tbl }, ++ [1] = { .phy_pg_tbl = &rtw8814a_bb_pg_tbl, ++ .txpwr_lmt_tbl = &rtw8814a_txpwr_lmt_type1_tbl, ++ .pwr_track_tbl = &rtw8814a_rtw_pwrtrk_tbl }, ++}; ++ ++/* rssi in percentage % (dbm = % - 100) */ ++static const u8 wl_rssi_step_8814a[] = {60, 50, 44, 30}; ++static const u8 bt_rssi_step_8814a[] = {30, 30, 30, 30}; ++ ++/* wl_tx_dec_power, bt_tx_dec_power, wl_rx_gain, bt_rx_lna_constrain */ ++static const struct coex_rf_para rf_para_tx_8814a[] = { ++ {0, 0, false, 7}, /* for normal */ ++ {0, 16, false, 7}, /* for WL-CPT */ ++ {4, 0, true, 1}, ++ {3, 6, true, 1}, ++ {2, 9, true, 1}, ++ {1, 13, true, 1} ++}; ++ ++static const struct coex_rf_para rf_para_rx_8814a[] = { ++ {0, 0, false, 7}, /* for normal */ ++ {0, 16, false, 7}, /* for WL-CPT */ ++ {4, 0, true, 1}, ++ {3, 6, true, 1}, ++ {2, 9, true, 1}, ++ {1, 13, true, 1} ++}; ++ ++static_assert(ARRAY_SIZE(rf_para_tx_8814a) == ARRAY_SIZE(rf_para_rx_8814a)); ++ ++const struct rtw_chip_info rtw8814a_hw_spec = { ++ .ops = &rtw8814a_ops, ++ .id = RTW_CHIP_TYPE_8814A, ++ .fw_name = "rtw88/rtw8814a_fw.bin", ++ .wlan_cpu = RTW_WCPU_11AC, ++ .tx_pkt_desc_sz = 40, ++ .tx_buf_desc_sz = 16, ++ .rx_pkt_desc_sz = 24, ++ .rx_buf_desc_sz = 8, ++ .phy_efuse_size = 1024, ++ .log_efuse_size = 512, ++ .ptct_efuse_size = 0, ++ .txff_size = (2048 - 10) * TX_PAGE_SIZE, ++ .rxff_size = 23552, ++ .rsvd_drv_pg_num = 8, ++ .band = RTW_BAND_2G | RTW_BAND_5G, ++ .page_size = TX_PAGE_SIZE, ++ .csi_buf_pg_num = 0, ++ .dig_min = 0x1c, ++ .txgi_factor = 1, ++ .is_pwr_by_rate_dec = true, ++ .rx_ldpc = true, ++ .max_power_index = 0x3f, ++ .ampdu_density = IEEE80211_HT_MPDU_DENSITY_2, ++ .usb_tx_agg_desc_num = 3, ++ .hw_feature_report = false, ++ .c2h_ra_report_size = 6, ++ .old_datarate_fb_limit = false, ++ .ht_supported = true, ++ .vht_supported = true, ++ .lps_deep_mode_supported = BIT(LPS_DEEP_MODE_LCLK), ++ .sys_func_en = 0xDC, ++ .pwr_on_seq = card_enable_flow_8814a, ++ .pwr_off_seq = card_disable_flow_8814a, ++ .rqpn_table = rqpn_table_8814a, ++ .prioq_addrs = &prioq_addrs_8814a, ++ .page_table = page_table_8814a, ++ .intf_table = &phy_para_table_8814a, ++ .dig = rtw8814a_dig, ++ .dig_cck = NULL, ++ .rf_base_addr = {0x2800, 0x2c00, 0x3800, 0x3c00}, ++ .rf_sipi_addr = {0xc90, 0xe90, 0x1890, 0x1a90}, ++ .ltecoex_addr = NULL, ++ .mac_tbl = &rtw8814a_mac_tbl, ++ .agc_tbl = &rtw8814a_agc_tbl, ++ .bb_tbl = &rtw8814a_bb_tbl, ++ .rf_tbl = {&rtw8814a_rf_a_tbl, &rtw8814a_rf_b_tbl, ++ &rtw8814a_rf_c_tbl, &rtw8814a_rf_d_tbl}, ++ .rfe_defs = rtw8814a_rfe_defs, ++ .rfe_defs_size = ARRAY_SIZE(rtw8814a_rfe_defs), ++ .iqk_threshold = 8, ++ .max_scan_ie_len = IEEE80211_MAX_DATA_LEN, ++ ++ .coex_para_ver = 0, ++ .bt_desired_ver = 0, ++ .scbd_support = false, ++ .new_scbd10_def = false, ++ .ble_hid_profile_support = false, ++ .wl_mimo_ps_support = false, ++ .pstdma_type = COEX_PSTDMA_FORCE_LPSOFF, ++ .bt_rssi_type = COEX_BTRSSI_RATIO, ++ .ant_isolation = 15, ++ .rssi_tolerance = 2, ++ .wl_rssi_step = wl_rssi_step_8814a, ++ .bt_rssi_step = bt_rssi_step_8814a, ++ .table_sant_num = 0, ++ .table_sant = NULL, ++ .table_nsant_num = 0, ++ .table_nsant = NULL, ++ .tdma_sant_num = 0, ++ .tdma_sant = NULL, ++ .tdma_nsant_num = 0, ++ .tdma_nsant = NULL, ++ .wl_rf_para_num = ARRAY_SIZE(rf_para_tx_8814a), ++ .wl_rf_para_tx = rf_para_tx_8814a, ++ .wl_rf_para_rx = rf_para_rx_8814a, ++ .bt_afh_span_bw20 = 0x24, ++ .bt_afh_span_bw40 = 0x36, ++ .afh_5g_num = 0, ++ .afh_5g = NULL, ++ .coex_info_hw_regs_num = 0, ++ .coex_info_hw_regs = NULL, ++}; ++EXPORT_SYMBOL(rtw8814a_hw_spec); ++ ++MODULE_FIRMWARE("rtw88/rtw8814a_fw.bin"); ++ ++MODULE_AUTHOR("Bitterblue Smith "); ++MODULE_DESCRIPTION("Realtek 802.11ac wireless 8814a driver"); ++MODULE_LICENSE("Dual BSD/GPL"); +--- /dev/null ++++ b/drivers/net/wireless/realtek/rtw88/rtw8814a.h +@@ -0,0 +1,62 @@ ++/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ ++/* Copyright(c) 2025 Realtek Corporation ++ */ ++ ++#ifndef __RTW8814A_H__ ++#define __RTW8814A_H__ ++ ++struct rtw8814au_efuse { ++ u8 vid[2]; /* 0xd0 */ ++ u8 pid[2]; /* 0xd2 */ ++ u8 res[4]; /* 0xd4 */ ++ u8 mac_addr[ETH_ALEN]; /* 0xd8 */ ++} __packed; ++ ++struct rtw8814ae_efuse { ++ u8 mac_addr[ETH_ALEN]; /* 0xd0 */ ++ u8 vid[2]; /* 0xd6 */ ++ u8 did[2]; /* 0xd8 */ ++ u8 svid[2]; /* 0xda */ ++ u8 smid[2]; /* 0xdc */ ++} __packed; ++ ++struct rtw8814a_efuse { ++ __le16 rtl_id; ++ u8 res0[0x0c]; ++ u8 usb_mode; /* 0x0e */ ++ u8 res1; ++ ++ /* power index for four RF paths */ ++ struct rtw_txpwr_idx txpwr_idx_table[4]; ++ ++ u8 channel_plan; /* 0xb8 */ ++ u8 xtal_k; /* 0xb9 */ ++ u8 thermal_meter; /* 0xba */ ++ u8 iqk_lck; /* 0xbb */ ++ u8 pa_type; /* 0xbc */ ++ u8 lna_type_2g[2]; /* 0xbd */ ++ u8 lna_type_5g[2]; /* 0xbf */ ++ u8 rf_board_option; /* 0xc1 */ ++ u8 res2; ++ u8 rf_bt_setting; /* 0xc3 */ ++ u8 eeprom_version; /* 0xc4 */ ++ u8 eeprom_customer_id; /* 0xc5 */ ++ u8 tx_bb_swing_setting_2g; /* 0xc6 */ ++ u8 tx_bb_swing_setting_5g; /* 0xc7 */ ++ u8 res3; ++ u8 trx_antenna_option; /* 0xc9 */ ++ u8 rfe_option; /* 0xca */ ++ u8 country_code[2]; /* 0xcb */ ++ u8 res4[3]; ++ union { ++ struct rtw8814au_efuse u; ++ struct rtw8814ae_efuse e; ++ }; ++ u8 res5[0x122]; /* 0xde */ ++} __packed; ++ ++static_assert(sizeof(struct rtw8814a_efuse) == 512); ++ ++extern const struct rtw_chip_info rtw8814a_hw_spec; ++ ++#endif diff --git a/package/kernel/mac80211/patches/rtl/089-v6.15-wifi-rtw88-Add-rtw8814ae.c.patch b/package/kernel/mac80211/patches/rtl/089-v6.15-wifi-rtw88-Add-rtw8814ae.c.patch new file mode 100644 index 00000000000..0aa9a903600 --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/089-v6.15-wifi-rtw88-Add-rtw8814ae.c.patch @@ -0,0 +1,50 @@ +From dad8e879310211c1e02f09c35f169388bccbfa42 Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Fri, 7 Mar 2025 02:25:09 +0200 +Subject: [PATCH] wifi: rtw88: Add rtw8814ae.c + +This is the entry point for the new module rtw88_8814ae. + +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/74ebab2f-a23e-4d87-935f-0af2b5cba672@gmail.com +--- + .../net/wireless/realtek/rtw88/rtw8814ae.c | 31 +++++++++++++++++++ + 1 file changed, 31 insertions(+) + create mode 100644 drivers/net/wireless/realtek/rtw88/rtw8814ae.c + +--- /dev/null ++++ b/drivers/net/wireless/realtek/rtw88/rtw8814ae.c +@@ -0,0 +1,31 @@ ++// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause ++/* Copyright(c) 2025 Realtek Corporation ++ */ ++ ++#include ++#include ++#include "pci.h" ++#include "rtw8814a.h" ++ ++static const struct pci_device_id rtw_8814ae_id_table[] = { ++ { ++ PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8813), ++ .driver_data = (kernel_ulong_t)&rtw8814a_hw_spec ++ }, ++ {} ++}; ++MODULE_DEVICE_TABLE(pci, rtw_8814ae_id_table); ++ ++static struct pci_driver rtw_8814ae_driver = { ++ .name = "rtw_8814ae", ++ .id_table = rtw_8814ae_id_table, ++ .probe = rtw_pci_probe, ++ .remove = rtw_pci_remove, ++ .driver.pm = &rtw_pm_ops, ++ .shutdown = rtw_pci_shutdown, ++}; ++module_pci_driver(rtw_8814ae_driver); ++ ++MODULE_AUTHOR("Bitterblue Smith "); ++MODULE_DESCRIPTION("Realtek 802.11ac wireless 8814ae driver"); ++MODULE_LICENSE("Dual BSD/GPL"); diff --git a/package/kernel/mac80211/patches/rtl/090-v6.15-wifi-rtw88-Add-rtw8814au.c.patch b/package/kernel/mac80211/patches/rtl/090-v6.15-wifi-rtw88-Add-rtw8814au.c.patch new file mode 100644 index 00000000000..b83174d73e2 --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/090-v6.15-wifi-rtw88-Add-rtw8814au.c.patch @@ -0,0 +1,73 @@ +From bad060e8a425182809bfc2586a2e7f5ccd1a994d Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Fri, 7 Mar 2025 02:25:37 +0200 +Subject: [PATCH] wifi: rtw88: Add rtw8814au.c + +This is the entry point for the new module rtw88_8814au. + +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/71457787-5a9e-4ead-a62c-22ca44e00b89@gmail.com +--- + .../net/wireless/realtek/rtw88/rtw8814au.c | 54 +++++++++++++++++++ + 1 file changed, 54 insertions(+) + create mode 100644 drivers/net/wireless/realtek/rtw88/rtw8814au.c + +--- /dev/null ++++ b/drivers/net/wireless/realtek/rtw88/rtw8814au.c +@@ -0,0 +1,54 @@ ++// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause ++/* Copyright(c) 2025 Realtek Corporation ++ */ ++ ++#include ++#include ++#include "main.h" ++#include "rtw8814a.h" ++#include "usb.h" ++ ++static const struct usb_device_id rtw_8814au_id_table[] = { ++ { USB_DEVICE_AND_INTERFACE_INFO(RTW_USB_VENDOR_ID_REALTEK, 0x8813, 0xff, 0xff, 0xff), ++ .driver_info = (kernel_ulong_t)&(rtw8814a_hw_spec) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(0x056e, 0x400b, 0xff, 0xff, 0xff), ++ .driver_info = (kernel_ulong_t)&(rtw8814a_hw_spec) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(0x056e, 0x400d, 0xff, 0xff, 0xff), ++ .driver_info = (kernel_ulong_t)&(rtw8814a_hw_spec) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(0x0846, 0x9054, 0xff, 0xff, 0xff), ++ .driver_info = (kernel_ulong_t)&(rtw8814a_hw_spec) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(0x0b05, 0x1817, 0xff, 0xff, 0xff), ++ .driver_info = (kernel_ulong_t)&(rtw8814a_hw_spec) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(0x0b05, 0x1852, 0xff, 0xff, 0xff), ++ .driver_info = (kernel_ulong_t)&(rtw8814a_hw_spec) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(0x0b05, 0x1853, 0xff, 0xff, 0xff), ++ .driver_info = (kernel_ulong_t)&(rtw8814a_hw_spec) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(0x0e66, 0x0026, 0xff, 0xff, 0xff), ++ .driver_info = (kernel_ulong_t)&(rtw8814a_hw_spec) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x331a, 0xff, 0xff, 0xff), ++ .driver_info = (kernel_ulong_t)&(rtw8814a_hw_spec) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(0x20f4, 0x809a, 0xff, 0xff, 0xff), ++ .driver_info = (kernel_ulong_t)&(rtw8814a_hw_spec) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(0x20f4, 0x809b, 0xff, 0xff, 0xff), ++ .driver_info = (kernel_ulong_t)&(rtw8814a_hw_spec) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(0x2357, 0x0106, 0xff, 0xff, 0xff), ++ .driver_info = (kernel_ulong_t)&(rtw8814a_hw_spec) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(0x7392, 0xa834, 0xff, 0xff, 0xff), ++ .driver_info = (kernel_ulong_t)&(rtw8814a_hw_spec) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(0x7392, 0xa833, 0xff, 0xff, 0xff), ++ .driver_info = (kernel_ulong_t)&(rtw8814a_hw_spec) }, ++ {}, ++}; ++MODULE_DEVICE_TABLE(usb, rtw_8814au_id_table); ++ ++static struct usb_driver rtw_8814au_driver = { ++ .name = "rtw_8814au", ++ .id_table = rtw_8814au_id_table, ++ .probe = rtw_usb_probe, ++ .disconnect = rtw_usb_disconnect, ++}; ++module_usb_driver(rtw_8814au_driver); ++ ++MODULE_AUTHOR("Bitterblue Smith "); ++MODULE_DESCRIPTION("Realtek 802.11ac wireless 8814au driver"); ++MODULE_LICENSE("Dual BSD/GPL"); diff --git a/package/kernel/mac80211/patches/rtl/091-v6.15-wifi-rtw88-Add-__nonstring-annotations-for-untermina.patch b/package/kernel/mac80211/patches/rtl/091-v6.15-wifi-rtw88-Add-__nonstring-annotations-for-untermina.patch new file mode 100644 index 00000000000..4bb3253d507 --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/091-v6.15-wifi-rtw88-Add-__nonstring-annotations-for-untermina.patch @@ -0,0 +1,34 @@ +From d58ad77d5cc2a6d04db622a898e54d93fc7002a2 Mon Sep 17 00:00:00 2001 +From: Kees Cook +Date: Mon, 10 Mar 2025 15:22:58 -0700 +Subject: [PATCH] wifi: rtw88: Add __nonstring annotations for unterminated + strings + +When a character array without a terminating NUL character has a static +initializer, GCC 15's -Wunterminated-string-initialization will only +warn if the array lacks the "nonstring" attribute[1]. Mark the arrays +with __nonstring to and correctly identify the char array as "not a C +string" and thereby eliminate the warning. + +Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117178 [1] +Cc: Ping-Ke Shih +Cc: Johannes Berg +Cc: linux-wireless@vger.kernel.org +Signed-off-by: Kees Cook +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/20250310222257.work.866-kees@kernel.org +--- + drivers/net/wireless/realtek/rtw88/main.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/net/wireless/realtek/rtw88/main.h ++++ b/drivers/net/wireless/realtek/rtw88/main.h +@@ -835,7 +835,7 @@ struct rtw_vif { + }; + + struct rtw_regulatory { +- char alpha2[2]; ++ char alpha2[2] __nonstring; + u8 txpwr_regd_2g; + u8 txpwr_regd_5g; + }; diff --git a/package/kernel/mac80211/patches/rtl/091-v6.15wifi-rtw88-Enable-the-new-RTL8814AE-RTL8814AU-driver.patch b/package/kernel/mac80211/patches/rtl/091-v6.15wifi-rtw88-Enable-the-new-RTL8814AE-RTL8814AU-driver.patch new file mode 100644 index 00000000000..8446ad3a968 --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/091-v6.15wifi-rtw88-Enable-the-new-RTL8814AE-RTL8814AU-driver.patch @@ -0,0 +1,147 @@ +From deb3ddeb18652118956fb581a39ac299e1ee5623 Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Fri, 7 Mar 2025 02:26:25 +0200 +Subject: [PATCH] wifi: rtw88: Enable the new RTL8814AE/RTL8814AU drivers + +RTL8814A is a wifi 5 chip with 4 RF paths (chains), 3 spatial streams, +and probably no Bluetooth. + +The USB-based RTL8814AU can reach 800 Mbps in the 5 GHz band in USB 3 +mode. In USB 2 mode it only uses 2 spatial streams. + +The PCI-based RTL8814AE is not as popular and didn't get as much +testing so it's unclear how fast it goes. It's more like a bonus on top +of the RTL8814AU support. + +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/5795b0a7-511e-40b5-ac36-476b63f174c7@gmail.com +--- + drivers/net/wireless/realtek/rtw88/Kconfig | 25 +++++++++++++++++++++ + drivers/net/wireless/realtek/rtw88/Makefile | 9 ++++++++ + 2 files changed, 34 insertions(+) + +--- a/Kconfig.local ++++ b/Kconfig.local +@@ -1153,6 +1153,9 @@ config BACKPORTED_RTW88_8821A + config BACKPORTED_RTW88_8812A + tristate + default RTW88_8812A ++config BACKPORTED_RTW88_8814A ++ tristate ++ default RTW88_8814A + config BACKPORTED_RTW88_8822BE + tristate + default RTW88_8822BE +@@ -1198,12 +1201,21 @@ config BACKPORTED_RTW88_8821AU + config BACKPORTED_RTW88_8812AU + tristate + default RTW88_8812AU ++config BACKPORTED_RTW88_8814AE ++ tristate ++ default RTW88_8814AE ++config BACKPORTED_RTW88_8814AU ++ tristate ++ default RTW88_8814AU + config BACKPORTED_RTW88_DEBUG + tristate + default RTW88_DEBUG + config BACKPORTED_RTW88_DEBUGFS + tristate + default RTW88_DEBUGFS ++config BACKPORTED_RTW88_LEDS ++ tristate ++ default RTW88_LEDS + config BACKPORTED_RTW89 + tristate + default RTW89 +--- a/drivers/net/wireless/realtek/rtw88/Kconfig ++++ b/drivers/net/wireless/realtek/rtw88/Kconfig +@@ -68,6 +68,10 @@ config RTW88_8812A + depends on m + select RTW88_88XXA + ++config RTW88_8814A ++ tristate ++ depends on m ++ + config RTW88_8822BE + tristate "Realtek 8822BE PCI wireless network adapter" + depends on m +@@ -251,6 +255,30 @@ config RTW88_8812AU + + 802.11ac USB wireless network adapter + ++config RTW88_8814AE ++ tristate "Realtek 8814AE PCI wireless network adapter" ++ depends on m ++ depends on PCI ++ select RTW88_CORE ++ select RTW88_PCI ++ select RTW88_8814A ++ help ++ Select this option will enable support for 8814AE chipset ++ ++ 802.11ac PCIe wireless network adapter ++ ++config RTW88_8814AU ++ tristate "Realtek 8814AU USB wireless network adapter" ++ depends on m ++ depends on USB ++ select RTW88_CORE ++ select RTW88_USB ++ select RTW88_8814A ++ help ++ Select this option will enable support for 8814AU chipset ++ ++ 802.11ac USB wireless network adapter ++ + config RTW88_DEBUG + bool "Realtek rtw88 debug support" + depends on RTW88_CORE +--- a/drivers/net/wireless/realtek/rtw88/Makefile ++++ b/drivers/net/wireless/realtek/rtw88/Makefile +@@ -94,6 +94,15 @@ rtw88_8821au-objs := rtw8821au.o + obj-$(CPTCFG_RTW88_8812AU) += rtw88_8812au.o + rtw88_8812au-objs := rtw8812au.o + ++obj-$(CPTCFG_RTW88_8814A) += rtw88_8814a.o ++rtw88_8814a-objs := rtw8814a.o rtw8814a_table.o ++ ++obj-$(CPTCFG_RTW88_8814AE) += rtw88_8814ae.o ++rtw88_8814ae-objs := rtw8814ae.o ++ ++obj-$(CPTCFG_RTW88_8814AU) += rtw88_8814au.o ++rtw88_8814au-objs := rtw8814au.o ++ + obj-$(CPTCFG_RTW88_PCI) += rtw88_pci.o + rtw88_pci-objs := pci.o + +--- a/local-symbols ++++ b/local-symbols +@@ -377,6 +377,10 @@ RTW88_8723X= + RTW88_8703B= + RTW88_8723D= + RTW88_8821C= ++RTW88_88XXA= ++RTW88_8821A= ++RTW88_8812A= ++RTW88_8814A= + RTW88_8822BE= + RTW88_8822BS= + RTW88_8822BU= +@@ -390,8 +394,13 @@ RTW88_8723DU= + RTW88_8821CE= + RTW88_8821CS= + RTW88_8821CU= ++RTW88_8821AU= ++RTW88_8812AU= ++RTW88_8814AE= ++RTW88_8814AU= + RTW88_DEBUG= + RTW88_DEBUGFS= ++RTW88_LEDS= + RTW89= + RTW89_CORE= + RTW89_PCI= diff --git a/package/kernel/mac80211/patches/rtl/093-v6.16-wifi-rtw88-sdio-Remove-redundant-flush_workqueue-cal.patch b/package/kernel/mac80211/patches/rtl/093-v6.16-wifi-rtw88-sdio-Remove-redundant-flush_workqueue-cal.patch new file mode 100644 index 00000000000..9852bdff94b --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/093-v6.16-wifi-rtw88-sdio-Remove-redundant-flush_workqueue-cal.patch @@ -0,0 +1,36 @@ +From 5c4cf36c538bb2714e43654e365cb77b19c4a93e Mon Sep 17 00:00:00 2001 +From: Chen Ni +Date: Mon, 24 Mar 2025 15:59:10 +0800 +Subject: [PATCH] wifi: rtw88: sdio: Remove redundant 'flush_workqueue()' calls + +'destroy_workqueue()' already drains the queue before destroying it, so +there is no need to flush it explicitly. + +Remove the redundant 'flush_workqueue()' calls. + +This was generated with coccinelle: + +@@ +expression E; +@@ + +- flush_workqueue(E); + destroy_workqueue(E); + +Signed-off-by: Chen Ni +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/20250324075910.407999-1-nichen@iscas.ac.cn +--- + drivers/net/wireless/realtek/rtw88/sdio.c | 1 - + 1 file changed, 1 deletion(-) + +--- a/drivers/net/wireless/realtek/rtw88/sdio.c ++++ b/drivers/net/wireless/realtek/rtw88/sdio.c +@@ -1298,7 +1298,6 @@ static void rtw_sdio_deinit_tx(struct rt + struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv; + int i; + +- flush_workqueue(rtwsdio->txwq); + destroy_workqueue(rtwsdio->txwq); + kfree(rtwsdio->tx_handler_data); + diff --git a/package/kernel/mac80211/patches/rtl/094-v6.16-wifi-rtw88-usb-Remove-redundant-flush_workqueue-call.patch b/package/kernel/mac80211/patches/rtl/094-v6.16-wifi-rtw88-usb-Remove-redundant-flush_workqueue-call.patch new file mode 100644 index 00000000000..41e670fd115 --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/094-v6.16-wifi-rtw88-usb-Remove-redundant-flush_workqueue-call.patch @@ -0,0 +1,44 @@ +From 625fbc16524a45488f6eb8561d98b3328efe79cd Mon Sep 17 00:00:00 2001 +From: Chen Ni +Date: Mon, 24 Mar 2025 16:03:03 +0800 +Subject: [PATCH] wifi: rtw88: usb: Remove redundant 'flush_workqueue()' calls + +'destroy_workqueue()' already drains the queue before destroying it, so +there is no need to flush it explicitly. + +Remove the redundant 'flush_workqueue()' calls. + +This was generated with coccinelle: + +@@ +expression E; +@@ + +- flush_workqueue(E); + destroy_workqueue(E); + +Signed-off-by: Chen Ni +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/20250324080303.408084-1-nichen@iscas.ac.cn +--- + drivers/net/wireless/realtek/rtw88/usb.c | 2 -- + 1 file changed, 2 deletions(-) + +--- a/drivers/net/wireless/realtek/rtw88/usb.c ++++ b/drivers/net/wireless/realtek/rtw88/usb.c +@@ -901,7 +901,6 @@ static void rtw_usb_deinit_rx(struct rtw + + skb_queue_purge(&rtwusb->rx_queue); + +- flush_workqueue(rtwusb->rxwq); + destroy_workqueue(rtwusb->rxwq); + } + +@@ -928,7 +927,6 @@ static void rtw_usb_deinit_tx(struct rtw + { + struct rtw_usb *rtwusb = rtw_get_usb_priv(rtwdev); + +- flush_workqueue(rtwusb->txwq); + destroy_workqueue(rtwusb->txwq); + rtw_usb_tx_queue_purge(rtwusb); + } diff --git a/package/kernel/mac80211/patches/rtl/095-v6.16-wifi-rtw88-usb-Enable-switching-the-RTL8814AU-to-USB.patch b/package/kernel/mac80211/patches/rtl/095-v6.16-wifi-rtw88-usb-Enable-switching-the-RTL8814AU-to-USB.patch new file mode 100644 index 00000000000..edd3cd5e704 --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/095-v6.16-wifi-rtw88-usb-Enable-switching-the-RTL8814AU-to-USB.patch @@ -0,0 +1,32 @@ +From bf1103654df99d50724a022c8b9fca8908a86f50 Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Wed, 2 Apr 2025 18:30:02 +0300 +Subject: [PATCH] wifi: rtw88: usb: Enable switching the RTL8814AU to USB 3 + +The Realtek wifi 5 devices which support USB 3 are weird: when first +plugged in, they pretend to be USB 2. The driver needs to send some +commands to the device, which make it disappear and come back as a +USB 3 device. + +The method used to switch the RTL8812AU also works for the RTL8814AU. + +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/d3608f70-e04f-4f6b-987a-022c8e317165@gmail.com +--- + drivers/net/wireless/realtek/rtw88/usb.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/drivers/net/wireless/realtek/rtw88/usb.c ++++ b/drivers/net/wireless/realtek/rtw88/usb.c +@@ -1043,7 +1043,8 @@ static int rtw_usb_switch_mode_new(struc + + static bool rtw_usb3_chip_old(u8 chip_id) + { +- return chip_id == RTW_CHIP_TYPE_8812A; ++ return chip_id == RTW_CHIP_TYPE_8812A || ++ chip_id == RTW_CHIP_TYPE_8814A; + } + + static bool rtw_usb3_chip_new(u8 chip_id) diff --git a/package/kernel/mac80211/patches/rtl/096-v6.16-wifi-rtw88-usb-Enable-RX-aggregation-for-RTL8814AU.patch b/package/kernel/mac80211/patches/rtl/096-v6.16-wifi-rtw88-usb-Enable-RX-aggregation-for-RTL8814AU.patch new file mode 100644 index 00000000000..9709528e701 --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/096-v6.16-wifi-rtw88-usb-Enable-RX-aggregation-for-RTL8814AU.patch @@ -0,0 +1,28 @@ +From dcbb7bb3a364f218411761e2e5ee2f6818d9bdfc Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Wed, 2 Apr 2025 18:30:28 +0300 +Subject: [PATCH] wifi: rtw88: usb: Enable RX aggregation for RTL8814AU + +Let the chip transfer several frames in a single USB Request Block. +This is supposed to improve the RX speed. + +It can use the same code used for RTL8822CU, RTL8822BU, and RTL8821CU. + +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/672397ac-dd4d-4420-8b3e-7011578e2243@gmail.com +--- + drivers/net/wireless/realtek/rtw88/usb.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/net/wireless/realtek/rtw88/usb.c ++++ b/drivers/net/wireless/realtek/rtw88/usb.c +@@ -829,6 +829,7 @@ static void rtw_usb_dynamic_rx_agg(struc + case RTW_CHIP_TYPE_8822C: + case RTW_CHIP_TYPE_8822B: + case RTW_CHIP_TYPE_8821C: ++ case RTW_CHIP_TYPE_8814A: + rtw_usb_dynamic_rx_agg_v1(rtwdev, enable); + break; + case RTW_CHIP_TYPE_8821A: diff --git a/package/kernel/mac80211/patches/rtl/097-v6.16-wifi-rtw88-Set-AMPDU-factor-to-hardware-for-RTL8814A.patch b/package/kernel/mac80211/patches/rtl/097-v6.16-wifi-rtw88-Set-AMPDU-factor-to-hardware-for-RTL8814A.patch new file mode 100644 index 00000000000..bdac02c8c66 --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/097-v6.16-wifi-rtw88-Set-AMPDU-factor-to-hardware-for-RTL8814A.patch @@ -0,0 +1,192 @@ +From 0d2a88690e583168effb03c64fd217a323b2c444 Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Wed, 2 Apr 2025 18:31:12 +0300 +Subject: [PATCH] wifi: rtw88: Set AMPDU factor to hardware for RTL8814A + +Tell the chip the maximum AMPDU size supported by the AP. This greatly +improves the TX speed of RTL8814AU in the 2.4 GHz band. Before: ~90 +Mbps. After: ~300 Mbps. + +Signed-off-by: Bitterblue Smith +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/4edc2a63-81b3-431c-9a37-5a7d899a6cc2@gmail.com +--- + drivers/net/wireless/realtek/rtw88/mac80211.c | 2 ++ + drivers/net/wireless/realtek/rtw88/main.c | 32 +++++++++++++++++++ + drivers/net/wireless/realtek/rtw88/main.h | 3 ++ + drivers/net/wireless/realtek/rtw88/rtw8703b.c | 1 + + drivers/net/wireless/realtek/rtw88/rtw8723d.c | 1 + + drivers/net/wireless/realtek/rtw88/rtw8812a.c | 1 + + drivers/net/wireless/realtek/rtw88/rtw8814a.c | 11 +++++++ + drivers/net/wireless/realtek/rtw88/rtw8821a.c | 1 + + drivers/net/wireless/realtek/rtw88/rtw8821c.c | 1 + + drivers/net/wireless/realtek/rtw88/rtw8822b.c | 1 + + drivers/net/wireless/realtek/rtw88/rtw8822c.c | 1 + + 11 files changed, 55 insertions(+) + +--- a/drivers/net/wireless/realtek/rtw88/mac80211.c ++++ b/drivers/net/wireless/realtek/rtw88/mac80211.c +@@ -396,6 +396,8 @@ static void rtw_ops_bss_info_changed(str + if (rtw_bf_support) + rtw_bf_assoc(rtwdev, vif, conf); + ++ rtw_set_ampdu_factor(rtwdev, vif, conf); ++ + rtw_fw_beacon_filter_config(rtwdev, true, vif); + } else { + rtw_leave_lps(rtwdev); +--- a/drivers/net/wireless/realtek/rtw88/main.c ++++ b/drivers/net/wireless/realtek/rtw88/main.c +@@ -2447,6 +2447,38 @@ void rtw_core_enable_beacon(struct rtw_d + } + } + ++void rtw_set_ampdu_factor(struct rtw_dev *rtwdev, struct ieee80211_vif *vif, ++ struct ieee80211_bss_conf *bss_conf) ++{ ++ const struct rtw_chip_ops *ops = rtwdev->chip->ops; ++ struct ieee80211_sta *sta; ++ u8 factor = 0xff; ++ ++ if (!ops->set_ampdu_factor) ++ return; ++ ++ rcu_read_lock(); ++ ++ sta = ieee80211_find_sta(vif, bss_conf->bssid); ++ if (!sta) { ++ rcu_read_unlock(); ++ rtw_warn(rtwdev, "%s: failed to find station %pM\n", ++ __func__, bss_conf->bssid); ++ return; ++ } ++ ++ if (sta->deflink.vht_cap.vht_supported) ++ factor = u32_get_bits(sta->deflink.vht_cap.cap, ++ IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK); ++ else if (sta->deflink.ht_cap.ht_supported) ++ factor = sta->deflink.ht_cap.ampdu_factor; ++ ++ rcu_read_unlock(); ++ ++ if (factor != 0xff) ++ ops->set_ampdu_factor(rtwdev, factor); ++} ++ + MODULE_AUTHOR("Realtek Corporation"); + MODULE_DESCRIPTION("Realtek 802.11ac wireless core module"); + MODULE_LICENSE("Dual BSD/GPL"); +--- a/drivers/net/wireless/realtek/rtw88/main.h ++++ b/drivers/net/wireless/realtek/rtw88/main.h +@@ -878,6 +878,7 @@ struct rtw_chip_ops { + u32 antenna_rx); + void (*cfg_ldo25)(struct rtw_dev *rtwdev, bool enable); + void (*efuse_grant)(struct rtw_dev *rtwdev, bool enable); ++ void (*set_ampdu_factor)(struct rtw_dev *rtwdev, u8 factor); + void (*false_alarm_statistics)(struct rtw_dev *rtwdev); + void (*phy_calibration)(struct rtw_dev *rtwdev); + void (*dpk_track)(struct rtw_dev *rtwdev); +@@ -2272,4 +2273,6 @@ void rtw_update_channel(struct rtw_dev * + void rtw_core_port_switch(struct rtw_dev *rtwdev, struct ieee80211_vif *vif); + bool rtw_core_check_sta_active(struct rtw_dev *rtwdev); + void rtw_core_enable_beacon(struct rtw_dev *rtwdev, bool enable); ++void rtw_set_ampdu_factor(struct rtw_dev *rtwdev, struct ieee80211_vif *vif, ++ struct ieee80211_bss_conf *bss_conf); + #endif +--- a/drivers/net/wireless/realtek/rtw88/rtw8703b.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8703b.c +@@ -1904,6 +1904,7 @@ static const struct rtw_chip_ops rtw8703 + .set_antenna = NULL, + .cfg_ldo25 = rtw8723x_cfg_ldo25, + .efuse_grant = rtw8723x_efuse_grant, ++ .set_ampdu_factor = NULL, + .false_alarm_statistics = rtw8723x_false_alarm_statistics, + .phy_calibration = rtw8703b_phy_calibration, + .dpk_track = NULL, +--- a/drivers/net/wireless/realtek/rtw88/rtw8723d.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8723d.c +@@ -1404,6 +1404,7 @@ static const struct rtw_chip_ops rtw8723 + .set_antenna = NULL, + .cfg_ldo25 = rtw8723x_cfg_ldo25, + .efuse_grant = rtw8723x_efuse_grant, ++ .set_ampdu_factor = NULL, + .false_alarm_statistics = rtw8723x_false_alarm_statistics, + .phy_calibration = rtw8723d_phy_calibration, + .cck_pd_set = rtw8723d_phy_cck_pd_set, +--- a/drivers/net/wireless/realtek/rtw88/rtw8812a.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8812a.c +@@ -925,6 +925,7 @@ static const struct rtw_chip_ops rtw8812 + .set_tx_power_index = rtw88xxa_set_tx_power_index, + .cfg_ldo25 = rtw8812a_cfg_ldo25, + .efuse_grant = rtw88xxa_efuse_grant, ++ .set_ampdu_factor = NULL, + .false_alarm_statistics = rtw88xxa_false_alarm_statistics, + .phy_calibration = rtw8812a_phy_calibration, + .cck_pd_set = rtw88xxa_phy_cck_pd_set, +--- a/drivers/net/wireless/realtek/rtw88/rtw8814a.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8814a.c +@@ -1332,6 +1332,16 @@ static void rtw8814a_cfg_ldo25(struct rt + { + } + ++/* Without this RTL8814A sends too many frames and (some?) 11n AP ++ * can't handle it, resulting in low TX speed. Other chips seem fine. ++ */ ++static void rtw8814a_set_ampdu_factor(struct rtw_dev *rtwdev, u8 factor) ++{ ++ factor = min_t(u8, factor, IEEE80211_VHT_MAX_AMPDU_256K); ++ ++ rtw_write32(rtwdev, REG_AMPDU_MAX_LENGTH, (8192 << factor) - 1); ++} ++ + static void rtw8814a_false_alarm_statistics(struct rtw_dev *rtwdev) + { + struct rtw_dm_info *dm_info = &rtwdev->dm_info; +@@ -2051,6 +2061,7 @@ static const struct rtw_chip_ops rtw8814 + .set_antenna = NULL, + .cfg_ldo25 = rtw8814a_cfg_ldo25, + .efuse_grant = rtw8814a_efuse_grant, ++ .set_ampdu_factor = rtw8814a_set_ampdu_factor, + .false_alarm_statistics = rtw8814a_false_alarm_statistics, + .phy_calibration = rtw8814a_phy_calibration, + .cck_pd_set = rtw8814a_phy_cck_pd_set, +--- a/drivers/net/wireless/realtek/rtw88/rtw8821a.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8821a.c +@@ -871,6 +871,7 @@ static const struct rtw_chip_ops rtw8821 + .set_tx_power_index = rtw88xxa_set_tx_power_index, + .cfg_ldo25 = rtw8821a_cfg_ldo25, + .efuse_grant = rtw88xxa_efuse_grant, ++ .set_ampdu_factor = NULL, + .false_alarm_statistics = rtw88xxa_false_alarm_statistics, + .phy_calibration = rtw8821a_phy_calibration, + .cck_pd_set = rtw88xxa_phy_cck_pd_set, +--- a/drivers/net/wireless/realtek/rtw88/rtw8821c.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.c +@@ -1668,6 +1668,7 @@ static const struct rtw_chip_ops rtw8821 + .set_antenna = NULL, + .set_tx_power_index = rtw8821c_set_tx_power_index, + .cfg_ldo25 = rtw8821c_cfg_ldo25, ++ .set_ampdu_factor = NULL, + .false_alarm_statistics = rtw8821c_false_alarm_statistics, + .phy_calibration = rtw8821c_phy_calibration, + .cck_pd_set = rtw8821c_phy_cck_pd_set, +--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c +@@ -2158,6 +2158,7 @@ static const struct rtw_chip_ops rtw8822 + .set_tx_power_index = rtw8822b_set_tx_power_index, + .set_antenna = rtw8822b_set_antenna, + .cfg_ldo25 = rtw8822b_cfg_ldo25, ++ .set_ampdu_factor = NULL, + .false_alarm_statistics = rtw8822b_false_alarm_statistics, + .phy_calibration = rtw8822b_phy_calibration, + .pwr_track = rtw8822b_pwr_track, +--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c +@@ -4968,6 +4968,7 @@ static const struct rtw_chip_ops rtw8822 + .set_tx_power_index = rtw8822c_set_tx_power_index, + .set_antenna = rtw8822c_set_antenna, + .cfg_ldo25 = rtw8822c_cfg_ldo25, ++ .set_ampdu_factor = NULL, + .false_alarm_statistics = rtw8822c_false_alarm_statistics, + .dpk_track = rtw8822c_dpk_track, + .phy_calibration = rtw8822c_phy_calibration, diff --git a/package/kernel/mac80211/patches/rtl/098-v6.16-wifi-rtw88-Don-t-set-SUPPORTS_AMSDU_IN_AMPDU-for-RTL.patch b/package/kernel/mac80211/patches/rtl/098-v6.16-wifi-rtw88-Don-t-set-SUPPORTS_AMSDU_IN_AMPDU-for-RTL.patch new file mode 100644 index 00000000000..1b030761d32 --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/098-v6.16-wifi-rtw88-Don-t-set-SUPPORTS_AMSDU_IN_AMPDU-for-RTL.patch @@ -0,0 +1,169 @@ +From b8d49bb8d16ae7dde8e05b275d6e3b8bbf27f011 Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Wed, 2 Apr 2025 18:31:36 +0300 +Subject: [PATCH] wifi: rtw88: Don't set SUPPORTS_AMSDU_IN_AMPDU for RTL8814AU + +RTL8814AU doesn't work well with SUPPORTS_AMSDU_IN_AMPDU. The RX speed +is noticeably lower and the VHT RX statistics are strange. Typical +values with SUPPORTS_AMSDU_IN_AMPDU: + +Reverse mode, remote host 192.168.0.1 is sending +[ 5] local 192.168.0.50 port 60710 connected to 192.168.0.1 port 5201 +[ ID] Interval Transfer Bitrate +[ 5] 0.00-1.00 sec 74.6 MBytes 626 Mbits/sec +[ 5] 1.00-2.00 sec 79.2 MBytes 665 Mbits/sec +[ 5] 2.00-3.00 sec 84.9 MBytes 712 Mbits/sec +[ 5] 3.00-4.00 sec 83.8 MBytes 703 Mbits/sec +[ 5] 4.00-5.00 sec 85.9 MBytes 720 Mbits/sec +[ 5] 5.00-6.00 sec 78.9 MBytes 662 Mbits/sec +[ 5] 6.00-7.00 sec 81.2 MBytes 682 Mbits/sec +[ 5] 7.00-8.00 sec 80.5 MBytes 675 Mbits/sec +[ 5] 8.00-9.00 sec 79.4 MBytes 666 Mbits/sec +[ 5] 9.00-10.00 sec 82.2 MBytes 689 Mbits/sec +[ 5] 10.00-11.00 sec 82.0 MBytes 688 Mbits/sec +[ 5] 11.00-12.00 sec 84.2 MBytes 707 Mbits/sec +[ 5] 12.00-13.00 sec 71.0 MBytes 596 Mbits/sec +[ 5] 13.00-14.00 sec 69.4 MBytes 582 Mbits/sec +[ 5] 14.00-15.00 sec 80.2 MBytes 673 Mbits/sec +[ 5] 15.00-16.00 sec 74.5 MBytes 625 Mbits/sec + +[Rx Counter]: + * CCA (CCK, OFDM, Total) = (0, 2455, 2455) + * False Alarm (CCK, OFDM, Total) = (0, 69, 69) + * CCK cnt (ok, err) = (0, 0) + * OFDM cnt (ok, err) = (1239, 2) + * HT cnt (ok, err) = (0, 0) + * VHT cnt (ok, err) = (21, 12109) + +The "VHT ok" number is not believable. + +And without SUPPORTS_AMSDU_IN_AMPDU: + +Reverse mode, remote host 192.168.0.1 is sending +[ 5] local 192.168.0.50 port 50030 connected to 192.168.0.1 port 5201 +[ ID] Interval Transfer Bitrate +[ 5] 0.00-1.00 sec 70.5 MBytes 591 Mbits/sec +[ 5] 1.00-2.00 sec 86.9 MBytes 729 Mbits/sec +[ 5] 2.00-3.00 sec 98.6 MBytes 827 Mbits/sec +[ 5] 3.00-4.00 sec 97.4 MBytes 817 Mbits/sec +[ 5] 4.00-5.00 sec 98.6 MBytes 827 Mbits/sec +[ 5] 5.00-6.00 sec 96.9 MBytes 813 Mbits/sec +[ 5] 6.00-7.00 sec 98.2 MBytes 824 Mbits/sec +[ 5] 7.00-8.00 sec 98.0 MBytes 822 Mbits/sec +[ 5] 8.00-9.00 sec 99.9 MBytes 838 Mbits/sec +[ 5] 9.00-10.00 sec 99.2 MBytes 833 Mbits/sec +[ 5] 10.00-11.00 sec 98.0 MBytes 822 Mbits/sec +[ 5] 11.00-12.00 sec 98.1 MBytes 823 Mbits/sec +[ 5] 12.00-13.00 sec 97.0 MBytes 814 Mbits/sec +[ 5] 13.00-14.00 sec 98.2 MBytes 824 Mbits/sec +[ 5] 14.00-15.00 sec 98.5 MBytes 826 Mbits/sec +[ 5] 15.00-16.00 sec 97.4 MBytes 817 Mbits/sec + +[Rx Counter]: + * CCA (CCK, OFDM, Total) = (0, 3860, 3860) + * False Alarm (CCK, OFDM, Total) = (0, 2, 2) + * CCK cnt (ok, err) = (0, 0) + * OFDM cnt (ok, err) = (1486, 0) + * HT cnt (ok, err) = (0, 0) + * VHT cnt (ok, err) = (7399, 9118) + +Add a new member "amsdu_in_ampdu" in struct rtw_chip_info and use it +to set SUPPORTS_AMSDU_IN_AMPDU only for the other chips. + +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/6202ccfb-feb0-4107-a08d-db2699e179f0@gmail.com +--- + drivers/net/wireless/realtek/rtw88/main.c | 3 ++- + drivers/net/wireless/realtek/rtw88/main.h | 1 + + drivers/net/wireless/realtek/rtw88/rtw8812a.c | 1 + + drivers/net/wireless/realtek/rtw88/rtw8814a.c | 1 + + drivers/net/wireless/realtek/rtw88/rtw8821a.c | 1 + + drivers/net/wireless/realtek/rtw88/rtw8821c.c | 1 + + drivers/net/wireless/realtek/rtw88/rtw8822b.c | 1 + + drivers/net/wireless/realtek/rtw88/rtw8822c.c | 1 + + 8 files changed, 9 insertions(+), 1 deletion(-) + +--- a/drivers/net/wireless/realtek/rtw88/main.c ++++ b/drivers/net/wireless/realtek/rtw88/main.c +@@ -2242,7 +2242,8 @@ int rtw_register_hw(struct rtw_dev *rtwd + ieee80211_hw_set(hw, SUPPORTS_PS); + ieee80211_hw_set(hw, SUPPORTS_DYNAMIC_PS); + ieee80211_hw_set(hw, SUPPORT_FAST_XMIT); +- ieee80211_hw_set(hw, SUPPORTS_AMSDU_IN_AMPDU); ++ if (rtwdev->chip->amsdu_in_ampdu) ++ ieee80211_hw_set(hw, SUPPORTS_AMSDU_IN_AMPDU); + ieee80211_hw_set(hw, HAS_RATE_CONTROL); + ieee80211_hw_set(hw, TX_AMSDU); + ieee80211_hw_set(hw, SINGLE_SCAN_ON_ALL_BANDS); +--- a/drivers/net/wireless/realtek/rtw88/main.h ++++ b/drivers/net/wireless/realtek/rtw88/main.h +@@ -1230,6 +1230,7 @@ struct rtw_chip_info { + u16 fw_fifo_addr[RTW_FW_FIFO_MAX]; + const struct rtw_fwcd_segs *fwcd_segs; + ++ bool amsdu_in_ampdu; + u8 usb_tx_agg_desc_num; + bool hw_feature_report; + u8 c2h_ra_report_size; +--- a/drivers/net/wireless/realtek/rtw88/rtw8812a.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8812a.c +@@ -1076,6 +1076,7 @@ const struct rtw_chip_info rtw8812a_hw_s + .rfe_defs = rtw8812a_rfe_defs, + .rfe_defs_size = ARRAY_SIZE(rtw8812a_rfe_defs), + .rx_ldpc = false, ++ .amsdu_in_ampdu = true, + .hw_feature_report = false, + .c2h_ra_report_size = 4, + .old_datarate_fb_limit = true, +--- a/drivers/net/wireless/realtek/rtw88/rtw8814a.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8814a.c +@@ -2200,6 +2200,7 @@ const struct rtw_chip_info rtw8814a_hw_s + .rx_ldpc = true, + .max_power_index = 0x3f, + .ampdu_density = IEEE80211_HT_MPDU_DENSITY_2, ++ .amsdu_in_ampdu = false, /* RX speed is better without AMSDU */ + .usb_tx_agg_desc_num = 3, + .hw_feature_report = false, + .c2h_ra_report_size = 6, +--- a/drivers/net/wireless/realtek/rtw88/rtw8821a.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8821a.c +@@ -1176,6 +1176,7 @@ const struct rtw_chip_info rtw8821a_hw_s + .rfe_defs = rtw8821a_rfe_defs, + .rfe_defs_size = ARRAY_SIZE(rtw8821a_rfe_defs), + .rx_ldpc = false, ++ .amsdu_in_ampdu = true, + .hw_feature_report = false, + .c2h_ra_report_size = 4, + .old_datarate_fb_limit = true, +--- a/drivers/net/wireless/realtek/rtw88/rtw8821c.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.c +@@ -1991,6 +1991,7 @@ const struct rtw_chip_info rtw8821c_hw_s + .band = RTW_BAND_2G | RTW_BAND_5G, + .page_size = TX_PAGE_SIZE, + .dig_min = 0x1c, ++ .amsdu_in_ampdu = true, + .usb_tx_agg_desc_num = 3, + .hw_feature_report = true, + .c2h_ra_report_size = 7, +--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c +@@ -2532,6 +2532,7 @@ const struct rtw_chip_info rtw8822b_hw_s + .band = RTW_BAND_2G | RTW_BAND_5G, + .page_size = TX_PAGE_SIZE, + .dig_min = 0x1c, ++ .amsdu_in_ampdu = true, + .usb_tx_agg_desc_num = 3, + .hw_feature_report = true, + .c2h_ra_report_size = 7, +--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c +@@ -5350,6 +5350,7 @@ const struct rtw_chip_info rtw8822c_hw_s + .band = RTW_BAND_2G | RTW_BAND_5G, + .page_size = TX_PAGE_SIZE, + .dig_min = 0x20, ++ .amsdu_in_ampdu = true, + .usb_tx_agg_desc_num = 3, + .hw_feature_report = true, + .c2h_ra_report_size = 7, diff --git a/package/kernel/mac80211/patches/rtl/099-v6.16-wifi-rtw88-Fix-the-module-names-printed-in-dmesg.patch b/package/kernel/mac80211/patches/rtl/099-v6.16-wifi-rtw88-Fix-the-module-names-printed-in-dmesg.patch new file mode 100644 index 00000000000..5082d77c5ed --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/099-v6.16-wifi-rtw88-Fix-the-module-names-printed-in-dmesg.patch @@ -0,0 +1,230 @@ +From 581cf3a9cb61daae1009c2380b228f40177046d8 Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Wed, 2 Apr 2025 20:54:30 +0300 +Subject: [PATCH] wifi: rtw88: Fix the module names printed in dmesg + +The rtw88 module names all start with the "rtw88_" prefix, but the +messages in dmesg mostly use the "rtw_" prefix. The messages from +rtw88_8723cs don't even have the underscore. + +Use the KBUILD_MODNAME macro in every driver. This ensures that the +messages in dmesg will always use the module name. + +Before: + +Mar 17 15:54:19 ideapad2 kernel: rtw_8814au 2-4:1.0: Firmware version 33.6.0, H2C version 6 + +After: + +Mar 17 16:33:35 ideapad2 kernel: rtw88_8814au 2-4:1.0: Firmware version 33.6.0, H2C version 6 + +Signed-off-by: Bitterblue Smith +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/29cd29ba-bc51-4d5b-ad48-a43c6ce72d56@gmail.com +--- + drivers/net/wireless/realtek/rtw88/rtw8723cs.c | 2 +- + drivers/net/wireless/realtek/rtw88/rtw8723de.c | 2 +- + drivers/net/wireless/realtek/rtw88/rtw8723ds.c | 2 +- + drivers/net/wireless/realtek/rtw88/rtw8723du.c | 2 +- + drivers/net/wireless/realtek/rtw88/rtw8812au.c | 2 +- + drivers/net/wireless/realtek/rtw88/rtw8814ae.c | 2 +- + drivers/net/wireless/realtek/rtw88/rtw8814au.c | 2 +- + drivers/net/wireless/realtek/rtw88/rtw8821au.c | 2 +- + drivers/net/wireless/realtek/rtw88/rtw8821ce.c | 2 +- + drivers/net/wireless/realtek/rtw88/rtw8821cs.c | 2 +- + drivers/net/wireless/realtek/rtw88/rtw8821cu.c | 2 +- + drivers/net/wireless/realtek/rtw88/rtw8822be.c | 2 +- + drivers/net/wireless/realtek/rtw88/rtw8822bs.c | 2 +- + drivers/net/wireless/realtek/rtw88/rtw8822bu.c | 2 +- + drivers/net/wireless/realtek/rtw88/rtw8822ce.c | 2 +- + drivers/net/wireless/realtek/rtw88/rtw8822cs.c | 2 +- + drivers/net/wireless/realtek/rtw88/rtw8822cu.c | 2 +- + 17 files changed, 17 insertions(+), 17 deletions(-) + +--- a/drivers/net/wireless/realtek/rtw88/rtw8723cs.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8723cs.c +@@ -19,7 +19,7 @@ static const struct sdio_device_id rtw_8 + MODULE_DEVICE_TABLE(sdio, rtw_8723cs_id_table); + + static struct sdio_driver rtw_8723cs_driver = { +- .name = "rtw8723cs", ++ .name = KBUILD_MODNAME, + .id_table = rtw_8723cs_id_table, + .probe = rtw_sdio_probe, + .remove = rtw_sdio_remove, +--- a/drivers/net/wireless/realtek/rtw88/rtw8723de.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8723de.c +@@ -17,7 +17,7 @@ static const struct pci_device_id rtw_87 + MODULE_DEVICE_TABLE(pci, rtw_8723de_id_table); + + static struct pci_driver rtw_8723de_driver = { +- .name = "rtw_8723de", ++ .name = KBUILD_MODNAME, + .id_table = rtw_8723de_id_table, + .probe = rtw_pci_probe, + .remove = rtw_pci_remove, +--- a/drivers/net/wireless/realtek/rtw88/rtw8723ds.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8723ds.c +@@ -25,7 +25,7 @@ static const struct sdio_device_id rtw_8 + MODULE_DEVICE_TABLE(sdio, rtw_8723ds_id_table); + + static struct sdio_driver rtw_8723ds_driver = { +- .name = "rtw_8723ds", ++ .name = KBUILD_MODNAME, + .probe = rtw_sdio_probe, + .remove = rtw_sdio_remove, + .id_table = rtw_8723ds_id_table, +--- a/drivers/net/wireless/realtek/rtw88/rtw8723du.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8723du.c +@@ -24,7 +24,7 @@ static int rtw8723du_probe(struct usb_in + } + + static struct usb_driver rtw_8723du_driver = { +- .name = "rtw_8723du", ++ .name = KBUILD_MODNAME, + .id_table = rtw_8723du_id_table, + .probe = rtw8723du_probe, + .disconnect = rtw_usb_disconnect, +--- a/drivers/net/wireless/realtek/rtw88/rtw8812au.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8812au.c +@@ -82,7 +82,7 @@ static const struct usb_device_id rtw_88 + MODULE_DEVICE_TABLE(usb, rtw_8812au_id_table); + + static struct usb_driver rtw_8812au_driver = { +- .name = "rtw_8812au", ++ .name = KBUILD_MODNAME, + .id_table = rtw_8812au_id_table, + .probe = rtw_usb_probe, + .disconnect = rtw_usb_disconnect, +--- a/drivers/net/wireless/realtek/rtw88/rtw8814ae.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8814ae.c +@@ -17,7 +17,7 @@ static const struct pci_device_id rtw_88 + MODULE_DEVICE_TABLE(pci, rtw_8814ae_id_table); + + static struct pci_driver rtw_8814ae_driver = { +- .name = "rtw_8814ae", ++ .name = KBUILD_MODNAME, + .id_table = rtw_8814ae_id_table, + .probe = rtw_pci_probe, + .remove = rtw_pci_remove, +--- a/drivers/net/wireless/realtek/rtw88/rtw8814au.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8814au.c +@@ -42,7 +42,7 @@ static const struct usb_device_id rtw_88 + MODULE_DEVICE_TABLE(usb, rtw_8814au_id_table); + + static struct usb_driver rtw_8814au_driver = { +- .name = "rtw_8814au", ++ .name = KBUILD_MODNAME, + .id_table = rtw_8814au_id_table, + .probe = rtw_usb_probe, + .disconnect = rtw_usb_disconnect, +--- a/drivers/net/wireless/realtek/rtw88/rtw8821au.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8821au.c +@@ -66,7 +66,7 @@ static const struct usb_device_id rtw_88 + MODULE_DEVICE_TABLE(usb, rtw_8821au_id_table); + + static struct usb_driver rtw_8821au_driver = { +- .name = "rtw_8821au", ++ .name = KBUILD_MODNAME, + .id_table = rtw_8821au_id_table, + .probe = rtw_usb_probe, + .disconnect = rtw_usb_disconnect, +--- a/drivers/net/wireless/realtek/rtw88/rtw8821ce.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8821ce.c +@@ -21,7 +21,7 @@ static const struct pci_device_id rtw_88 + MODULE_DEVICE_TABLE(pci, rtw_8821ce_id_table); + + static struct pci_driver rtw_8821ce_driver = { +- .name = "rtw_8821ce", ++ .name = KBUILD_MODNAME, + .id_table = rtw_8821ce_id_table, + .probe = rtw_pci_probe, + .remove = rtw_pci_remove, +--- a/drivers/net/wireless/realtek/rtw88/rtw8821cs.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8821cs.c +@@ -20,7 +20,7 @@ static const struct sdio_device_id rtw_8 + MODULE_DEVICE_TABLE(sdio, rtw_8821cs_id_table); + + static struct sdio_driver rtw_8821cs_driver = { +- .name = "rtw_8821cs", ++ .name = KBUILD_MODNAME, + .probe = rtw_sdio_probe, + .remove = rtw_sdio_remove, + .id_table = rtw_8821cs_id_table, +--- a/drivers/net/wireless/realtek/rtw88/rtw8821cu.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8821cu.c +@@ -48,7 +48,7 @@ static int rtw_8821cu_probe(struct usb_i + } + + static struct usb_driver rtw_8821cu_driver = { +- .name = "rtw_8821cu", ++ .name = KBUILD_MODNAME, + .id_table = rtw_8821cu_id_table, + .probe = rtw_8821cu_probe, + .disconnect = rtw_usb_disconnect, +--- a/drivers/net/wireless/realtek/rtw88/rtw8822be.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8822be.c +@@ -17,7 +17,7 @@ static const struct pci_device_id rtw_88 + MODULE_DEVICE_TABLE(pci, rtw_8822be_id_table); + + static struct pci_driver rtw_8822be_driver = { +- .name = "rtw_8822be", ++ .name = KBUILD_MODNAME, + .id_table = rtw_8822be_id_table, + .probe = rtw_pci_probe, + .remove = rtw_pci_remove, +--- a/drivers/net/wireless/realtek/rtw88/rtw8822bs.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8822bs.c +@@ -20,7 +20,7 @@ static const struct sdio_device_id rtw_8 + MODULE_DEVICE_TABLE(sdio, rtw_8822bs_id_table); + + static struct sdio_driver rtw_8822bs_driver = { +- .name = "rtw_8822bs", ++ .name = KBUILD_MODNAME, + .probe = rtw_sdio_probe, + .remove = rtw_sdio_remove, + .id_table = rtw_8822bs_id_table, +--- a/drivers/net/wireless/realtek/rtw88/rtw8822bu.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8822bu.c +@@ -88,7 +88,7 @@ static int rtw8822bu_probe(struct usb_in + } + + static struct usb_driver rtw_8822bu_driver = { +- .name = "rtw_8822bu", ++ .name = KBUILD_MODNAME, + .id_table = rtw_8822bu_id_table, + .probe = rtw8822bu_probe, + .disconnect = rtw_usb_disconnect, +--- a/drivers/net/wireless/realtek/rtw88/rtw8822ce.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8822ce.c +@@ -21,7 +21,7 @@ static const struct pci_device_id rtw_88 + MODULE_DEVICE_TABLE(pci, rtw_8822ce_id_table); + + static struct pci_driver rtw_8822ce_driver = { +- .name = "rtw_8822ce", ++ .name = KBUILD_MODNAME, + .id_table = rtw_8822ce_id_table, + .probe = rtw_pci_probe, + .remove = rtw_pci_remove, +--- a/drivers/net/wireless/realtek/rtw88/rtw8822cs.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8822cs.c +@@ -20,7 +20,7 @@ static const struct sdio_device_id rtw_8 + MODULE_DEVICE_TABLE(sdio, rtw_8822cs_id_table); + + static struct sdio_driver rtw_8822cs_driver = { +- .name = "rtw_8822cs", ++ .name = KBUILD_MODNAME, + .probe = rtw_sdio_probe, + .remove = rtw_sdio_remove, + .id_table = rtw_8822cs_id_table, +--- a/drivers/net/wireless/realtek/rtw88/rtw8822cu.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8822cu.c +@@ -32,7 +32,7 @@ static int rtw8822cu_probe(struct usb_in + } + + static struct usb_driver rtw_8822cu_driver = { +- .name = "rtw_8822cu", ++ .name = KBUILD_MODNAME, + .id_table = rtw_8822cu_id_table, + .probe = rtw8822cu_probe, + .disconnect = rtw_usb_disconnect, diff --git a/package/kernel/mac80211/patches/rtl/100-v6.16-wifi-rtw88-sdio-map-mgmt-frames-to-queue-TX_DESC_QSE.patch b/package/kernel/mac80211/patches/rtl/100-v6.16-wifi-rtw88-sdio-map-mgmt-frames-to-queue-TX_DESC_QSE.patch new file mode 100644 index 00000000000..ae2d2f5cff1 --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/100-v6.16-wifi-rtw88-sdio-map-mgmt-frames-to-queue-TX_DESC_QSE.patch @@ -0,0 +1,36 @@ +From b2effcdc237979dcc533d446a792fc54fd0e1213 Mon Sep 17 00:00:00 2001 +From: Zhen XIN +Date: Thu, 10 Apr 2025 15:42:17 +0000 +Subject: [PATCH] wifi: rtw88: sdio: map mgmt frames to queue TX_DESC_QSEL_MGMT + +The rtw88-sdio do not work in AP mode due to the lack of TX status report +for management frames. + +Map the management frames to queue TX_DESC_QSEL_MGMT, which enables the +chip to generate TX reports for these frames + +Tested-on: rtl8723ds + +Fixes: 65371a3f14e7 ("wifi: rtw88: sdio: Add HCI implementation for SDIO based chipsets") +Signed-off-by: Zhen XIN +Reviewed-by: Martin Blumenstingl +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/20250410154217.1849977-3-zhen.xin@nokia-sbell.com +--- + drivers/net/wireless/realtek/rtw88/sdio.c | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +--- a/drivers/net/wireless/realtek/rtw88/sdio.c ++++ b/drivers/net/wireless/realtek/rtw88/sdio.c +@@ -718,10 +718,7 @@ static u8 rtw_sdio_get_tx_qsel(struct rt + case RTW_TX_QUEUE_H2C: + return TX_DESC_QSEL_H2C; + case RTW_TX_QUEUE_MGMT: +- if (rtw_chip_wcpu_11n(rtwdev)) +- return TX_DESC_QSEL_HIGH; +- else +- return TX_DESC_QSEL_MGMT; ++ return TX_DESC_QSEL_MGMT; + case RTW_TX_QUEUE_HI0: + return TX_DESC_QSEL_HIGH; + default: diff --git a/package/kernel/mac80211/patches/rtl/101-v6.16-wifi-rtw88-sdio-call-rtw_sdio_indicate_tx_status-unc.patch b/package/kernel/mac80211/patches/rtl/101-v6.16-wifi-rtw88-sdio-call-rtw_sdio_indicate_tx_status-unc.patch new file mode 100644 index 00000000000..aa85137ae21 --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/101-v6.16-wifi-rtw88-sdio-call-rtw_sdio_indicate_tx_status-unc.patch @@ -0,0 +1,37 @@ +From fc5f5a0ec463ae6a07850428bd3082947e01d276 Mon Sep 17 00:00:00 2001 +From: Zhen XIN +Date: Thu, 10 Apr 2025 15:42:16 +0000 +Subject: [PATCH] wifi: rtw88: sdio: call rtw_sdio_indicate_tx_status + unconditionally + +The rtw88-sdio do not work in AP mode due to the lack of TX status report +for management frames. + +Make the invocation of rtw_sdio_indicate_tx_status unconditional and cover +all packet queues + +Tested-on: rtl8723ds + +Fixes: 65371a3f14e7 ("wifi: rtw88: sdio: Add HCI implementation for SDIO based chipsets") +Signed-off-by: Zhen XIN +Reviewed-by: Martin Blumenstingl +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/20250410154217.1849977-2-zhen.xin@nokia-sbell.com +--- + drivers/net/wireless/realtek/rtw88/sdio.c | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +--- a/drivers/net/wireless/realtek/rtw88/sdio.c ++++ b/drivers/net/wireless/realtek/rtw88/sdio.c +@@ -1224,10 +1224,7 @@ static void rtw_sdio_process_tx_queue(st + return; + } + +- if (queue <= RTW_TX_QUEUE_VO) +- rtw_sdio_indicate_tx_status(rtwdev, skb); +- else +- dev_kfree_skb_any(skb); ++ rtw_sdio_indicate_tx_status(rtwdev, skb); + } + + static void rtw_sdio_tx_handler(struct work_struct *work) diff --git a/package/kernel/mac80211/patches/rtl/102-v6.16-wifi-rtw88-do-not-ignore-hardware-read-error-during-.patch b/package/kernel/mac80211/patches/rtl/102-v6.16-wifi-rtw88-do-not-ignore-hardware-read-error-during-.patch new file mode 100644 index 00000000000..87d72bf88be --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/102-v6.16-wifi-rtw88-do-not-ignore-hardware-read-error-during-.patch @@ -0,0 +1,32 @@ +From 20d3c19bd8f9b498173c198eadf54580c8caa336 Mon Sep 17 00:00:00 2001 +From: Dmitry Antipov +Date: Tue, 15 Apr 2025 12:07:20 +0300 +Subject: [PATCH] wifi: rtw88: do not ignore hardware read error during DPK + +In 'rtw8822c_dpk_cal_coef1()', do not ignore error returned +by 'check_hw_ready()' but issue a warning to denote possible +DPK issue. Compile tested only. + +Found by Linux Verification Center (linuxtesting.org) with SVACE. + +Fixes: 5227c2ee453d ("rtw88: 8822c: add SW DPK support") +Suggested-by: Ping-Ke Shih +Signed-off-by: Dmitry Antipov +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/20250415090720.194048-1-dmantipov@yandex.ru +--- + drivers/net/wireless/realtek/rtw88/rtw8822c.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c +@@ -3951,7 +3951,8 @@ static void rtw8822c_dpk_cal_coef1(struc + rtw_write32(rtwdev, REG_NCTL0, 0x00001148); + rtw_write32(rtwdev, REG_NCTL0, 0x00001149); + +- check_hw_ready(rtwdev, 0x2d9c, MASKBYTE0, 0x55); ++ if (!check_hw_ready(rtwdev, 0x2d9c, MASKBYTE0, 0x55)) ++ rtw_warn(rtwdev, "DPK stuck, performance may be suboptimal"); + + rtw_write8(rtwdev, 0x1b10, 0x0); + rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, 0x0000000c); diff --git a/package/kernel/mac80211/patches/rtl/103-v6.16-wifi-rtw88-Fix-RX-aggregation-settings-for-RTL8723DS.patch b/package/kernel/mac80211/patches/rtl/103-v6.16-wifi-rtw88-Fix-RX-aggregation-settings-for-RTL8723DS.patch new file mode 100644 index 00000000000..901e4715089 --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/103-v6.16-wifi-rtw88-Fix-RX-aggregation-settings-for-RTL8723DS.patch @@ -0,0 +1,44 @@ +From 0ffa1ba81b35ba147c9df6206a61499a156b0128 Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Fri, 2 May 2025 14:49:01 +0300 +Subject: [PATCH] wifi: rtw88: Fix RX aggregation settings for RTL8723DS + +Use the same RX aggregation size and timeout used by the out-of-tree +RTL8723DS driver. Also set mystery bit 31 of REG_RXDMA_AGG_PG_TH. This +improves the RX speed from ~44 Mbps to ~67 Mbps. + +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/4c79fdc1-54bc-4986-9931-bb3ceb418b97@gmail.com +--- + drivers/net/wireless/realtek/rtw88/sdio.c | 14 ++++++++++++-- + 1 file changed, 12 insertions(+), 2 deletions(-) + +--- a/drivers/net/wireless/realtek/rtw88/sdio.c ++++ b/drivers/net/wireless/realtek/rtw88/sdio.c +@@ -677,12 +677,22 @@ static void rtw_sdio_enable_rx_aggregati + { + u8 size, timeout; + +- if (rtw_chip_wcpu_11n(rtwdev)) { ++ switch (rtwdev->chip->id) { ++ case RTW_CHIP_TYPE_8703B: ++ case RTW_CHIP_TYPE_8821A: ++ case RTW_CHIP_TYPE_8812A: + size = 0x6; + timeout = 0x6; +- } else { ++ break; ++ case RTW_CHIP_TYPE_8723D: ++ size = 0xa; ++ timeout = 0x3; ++ rtw_write8_set(rtwdev, REG_RXDMA_AGG_PG_TH + 3, BIT(7)); ++ break; ++ default: + size = 0xff; + timeout = 0x1; ++ break; + } + + /* Make the firmware honor the size limit configured below */ diff --git a/package/kernel/mac80211/patches/rtl/104-v6.16-wifi-rtw88-Handle-RTL8723D-S-with-blank-efuse.patch b/package/kernel/mac80211/patches/rtl/104-v6.16-wifi-rtw88-Handle-RTL8723D-S-with-blank-efuse.patch new file mode 100644 index 00000000000..d994a6aa69d --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/104-v6.16-wifi-rtw88-Handle-RTL8723D-S-with-blank-efuse.patch @@ -0,0 +1,198 @@ +From 2c17afde9ff6713f3e080ed1ea1a4bd7480be9aa Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Fri, 2 May 2025 14:49:34 +0300 +Subject: [PATCH] wifi: rtw88: Handle RTL8723D(S) with blank efuse + +Some users have RTL8723DS chips with nearly blank efuse. Currently these +chips cannot connect when using rtw88, but they do work using the old +out-of-tree driver. + +Use reasonable default values for TX power, antenna configuration, and +crystal cap if the chip's efuse is missing these things. + +RTL8723D can use the same default values as RTL8703B, so simply move +the code from rtl8703b_read_efuse() to the shared function +__rtl8723x_read_efuse(). + +Link: https://github.com/lwfinger/rtw88/issues/157 +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/5734afe7-0870-40b2-acd4-5657a02d7c56@gmail.com +--- + drivers/net/wireless/realtek/rtw88/rtw8703b.c | 60 ------------------- + drivers/net/wireless/realtek/rtw88/rtw8723x.c | 59 ++++++++++++++++++ + 2 files changed, 59 insertions(+), 60 deletions(-) + +--- a/drivers/net/wireless/realtek/rtw88/rtw8703b.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8703b.c +@@ -519,15 +519,6 @@ static const struct rtw_rqpn rqpn_table_ + RTW_DMA_MAPPING_EXTRA, RTW_DMA_MAPPING_HIGH}, + }; + +-/* Default power index table for RTL8703B, used if EFUSE does not +- * contain valid data. Replaces EFUSE data from offset 0x10 (start of +- * txpwr_idx_table). +- */ +-static const u8 rtw8703b_txpwr_idx_table[] = { +- 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, +- 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x02 +-}; +- + static void try_mac_from_devicetree(struct rtw_dev *rtwdev) + { + struct device_node *node = rtwdev->dev->of_node; +@@ -544,15 +535,9 @@ static void try_mac_from_devicetree(stru + } + } + +-#define DBG_EFUSE_FIX(rtwdev, name) \ +- rtw_dbg(rtwdev, RTW_DBG_EFUSE, "Fixed invalid EFUSE value: " \ +- # name "=0x%x\n", rtwdev->efuse.name) +- + static int rtw8703b_read_efuse(struct rtw_dev *rtwdev, u8 *log_map) + { + struct rtw_efuse *efuse = &rtwdev->efuse; +- u8 *pwr = (u8 *)efuse->txpwr_idx_table; +- bool valid = false; + int ret; + + ret = rtw8723x_read_efuse(rtwdev, log_map); +@@ -562,51 +547,6 @@ static int rtw8703b_read_efuse(struct rt + if (!is_valid_ether_addr(efuse->addr)) + try_mac_from_devicetree(rtwdev); + +- /* If TX power index table in EFUSE is invalid, fall back to +- * built-in table. +- */ +- for (int i = 0; i < ARRAY_SIZE(rtw8703b_txpwr_idx_table); i++) +- if (pwr[i] != 0xff) { +- valid = true; +- break; +- } +- if (!valid) { +- for (int i = 0; i < ARRAY_SIZE(rtw8703b_txpwr_idx_table); i++) +- pwr[i] = rtw8703b_txpwr_idx_table[i]; +- rtw_dbg(rtwdev, RTW_DBG_EFUSE, +- "Replaced invalid EFUSE TX power index table."); +- rtw8723x_debug_txpwr_limit(rtwdev, +- efuse->txpwr_idx_table, 2); +- } +- +- /* Override invalid antenna settings. */ +- if (efuse->bt_setting == 0xff) { +- /* shared antenna */ +- efuse->bt_setting |= BIT(0); +- /* RF path A */ +- efuse->bt_setting &= ~BIT(6); +- DBG_EFUSE_FIX(rtwdev, bt_setting); +- } +- +- /* Override invalid board options: The coex code incorrectly +- * assumes that if bits 6 & 7 are set the board doesn't +- * support coex. Regd is also derived from rf_board_option and +- * should be 0 if there's no valid data. +- */ +- if (efuse->rf_board_option == 0xff) { +- efuse->regd = 0; +- efuse->rf_board_option &= GENMASK(5, 0); +- DBG_EFUSE_FIX(rtwdev, rf_board_option); +- } +- +- /* Override invalid crystal cap setting, default comes from +- * vendor driver. Chip specific. +- */ +- if (efuse->crystal_cap == 0xff) { +- efuse->crystal_cap = 0x20; +- DBG_EFUSE_FIX(rtwdev, crystal_cap); +- } +- + return 0; + } + +--- a/drivers/net/wireless/realtek/rtw88/rtw8723x.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8723x.c +@@ -69,6 +69,9 @@ static void __rtw8723x_lck(struct rtw_de + #define DBG_EFUSE_2BYTE(rtwdev, map, name) \ + rtw_dbg(rtwdev, RTW_DBG_EFUSE, # name "=0x%02x%02x\n", \ + (map)->name[0], (map)->name[1]) ++#define DBG_EFUSE_FIX(rtwdev, name) \ ++ rtw_dbg(rtwdev, RTW_DBG_EFUSE, "Fixed invalid EFUSE value: " \ ++ # name "=0x%x\n", rtwdev->efuse.name) + + static void rtw8723xe_efuse_debug(struct rtw_dev *rtwdev, + struct rtw8723x_efuse *map) +@@ -238,10 +241,21 @@ static void rtw8723xs_efuse_parsing(stru + ether_addr_copy(efuse->addr, map->s.mac_addr); + } + ++/* Default power index table for RTL8703B/RTL8723D, used if EFUSE does ++ * not contain valid data. Replaces EFUSE data from offset 0x10 (start ++ * of txpwr_idx_table). ++ */ ++static const u8 rtw8723x_txpwr_idx_table[] = { ++ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, ++ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x02 ++}; ++ + static int __rtw8723x_read_efuse(struct rtw_dev *rtwdev, u8 *log_map) + { + struct rtw_efuse *efuse = &rtwdev->efuse; ++ u8 *pwr = (u8 *)efuse->txpwr_idx_table; + struct rtw8723x_efuse *map; ++ bool valid = false; + int i; + + map = (struct rtw8723x_efuse *)log_map; +@@ -279,6 +293,51 @@ static int __rtw8723x_read_efuse(struct + return -EOPNOTSUPP; + } + ++ /* If TX power index table in EFUSE is invalid, fall back to ++ * built-in table. ++ */ ++ for (i = 0; i < ARRAY_SIZE(rtw8723x_txpwr_idx_table); i++) ++ if (pwr[i] != 0xff) { ++ valid = true; ++ break; ++ } ++ if (!valid) { ++ for (i = 0; i < ARRAY_SIZE(rtw8723x_txpwr_idx_table); i++) ++ pwr[i] = rtw8723x_txpwr_idx_table[i]; ++ rtw_dbg(rtwdev, RTW_DBG_EFUSE, ++ "Replaced invalid EFUSE TX power index table."); ++ rtw8723x_debug_txpwr_limit(rtwdev, ++ efuse->txpwr_idx_table, 2); ++ } ++ ++ /* Override invalid antenna settings. */ ++ if (efuse->bt_setting == 0xff) { ++ /* shared antenna */ ++ efuse->bt_setting |= BIT(0); ++ /* RF path A */ ++ efuse->bt_setting &= ~BIT(6); ++ DBG_EFUSE_FIX(rtwdev, bt_setting); ++ } ++ ++ /* Override invalid board options: The coex code incorrectly ++ * assumes that if bits 6 & 7 are set the board doesn't ++ * support coex. Regd is also derived from rf_board_option and ++ * should be 0 if there's no valid data. ++ */ ++ if (efuse->rf_board_option == 0xff) { ++ efuse->regd = 0; ++ efuse->rf_board_option &= GENMASK(5, 0); ++ DBG_EFUSE_FIX(rtwdev, rf_board_option); ++ } ++ ++ /* Override invalid crystal cap setting, default comes from ++ * vendor driver. Chip specific. ++ */ ++ if (efuse->crystal_cap == 0xff) { ++ efuse->crystal_cap = 0x20; ++ DBG_EFUSE_FIX(rtwdev, crystal_cap); ++ } ++ + return 0; + } + diff --git a/package/kernel/mac80211/patches/rtl/105-v6.16-wifi-rtw88-rtw8822bu-VID-PID-for-BUFFALO-WI-U2-866DM.patch b/package/kernel/mac80211/patches/rtl/105-v6.16-wifi-rtw88-rtw8822bu-VID-PID-for-BUFFALO-WI-U2-866DM.patch new file mode 100644 index 00000000000..8321ca8c946 --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/105-v6.16-wifi-rtw88-rtw8822bu-VID-PID-for-BUFFALO-WI-U2-866DM.patch @@ -0,0 +1,27 @@ +From b7f0cc647e52296a3d4dd727b6479dcd6d7e364e Mon Sep 17 00:00:00 2001 +From: Yuuki NAGAO +Date: Sat, 3 May 2025 09:32:27 +0900 +Subject: [PATCH] wifi: rtw88: rtw8822bu VID/PID for BUFFALO WI-U2-866DM + +Add VID/PID 0411/03d1 for recently released +BUFFALO WI-U2-866DM USB WiFi adapter. + +Signed-off-by: Yuuki NAGAO +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/20250503003227.6673-1-wf.yn386@gmail.com +--- + drivers/net/wireless/realtek/rtw88/rtw8822bu.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/drivers/net/wireless/realtek/rtw88/rtw8822bu.c ++++ b/drivers/net/wireless/realtek/rtw88/rtw8822bu.c +@@ -77,6 +77,8 @@ static const struct usb_device_id rtw_88 + .driver_info = (kernel_ulong_t)&(rtw8822b_hw_spec) }, /* Mercusys MA30N */ + { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x3322, 0xff, 0xff, 0xff), + .driver_info = (kernel_ulong_t)&(rtw8822b_hw_spec) }, /* D-Link DWA-T185 rev. A1 */ ++ { USB_DEVICE_AND_INTERFACE_INFO(0x0411, 0x03d1, 0xff, 0xff, 0xff), ++ .driver_info = (kernel_ulong_t)&(rtw8822b_hw_spec) }, /* BUFFALO WI-U2-866DM */ + {}, + }; + MODULE_DEVICE_TABLE(usb, rtw_8822bu_id_table); diff --git a/package/kernel/mac80211/patches/rtl/106-v6.16-wifi-rtw88-usb-Reduce-control-message-timeout-to-500.patch b/package/kernel/mac80211/patches/rtl/106-v6.16-wifi-rtw88-usb-Reduce-control-message-timeout-to-500.patch new file mode 100644 index 00000000000..9ed1162ab81 --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/106-v6.16-wifi-rtw88-usb-Reduce-control-message-timeout-to-500.patch @@ -0,0 +1,52 @@ +From 490340faddea461319652ce36dbc7c1b4482c35e Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Sat, 10 May 2025 15:21:25 +0300 +Subject: [PATCH] wifi: rtw88: usb: Reduce control message timeout to 500 ms + +RTL8811AU stops responding during the firmware download on some systems: + +[ 809.256440] rtw_8821au 5-2.1:1.0: Firmware version 42.4.0, H2C version 0 +[ 812.759142] rtw_8821au 5-2.1:1.0 wlp48s0f4u2u1: renamed from wlan0 +[ 837.315388] rtw_8821au 1-4:1.0: write register 0x1ef4 failed with -110 +[ 867.524259] rtw_8821au 1-4:1.0: write register 0x1ef8 failed with -110 +[ 868.930976] rtw_8821au 5-2.1:1.0 wlp48s0f4u2u1: entered promiscuous mode +[ 897.730952] rtw_8821au 1-4:1.0: write register 0x1efc failed with -110 + +Each write takes 30 seconds to fail because that's the timeout currently +used for control messages in rtw_usb_write(). + +In this scenario the firmware download takes at least 2000 seconds. +Because this is done from the USB probe function, the long delay makes +other things in the system hang. + +Reduce the timeout to 500 ms. This is the value used by the official USB +wifi drivers from Realtek. + +Of course this only makes things hang for ~30 seconds instead of ~30 +minutes. It doesn't fix the firmware download. + +Tested with RTL8822CU, RTL8812BU, RTL8811CU, RTL8814AU, RTL8811AU, +RTL8812AU, RTL8821AU, RTL8723DU. + +Cc: stable@vger.kernel.org +Fixes: a82dfd33d123 ("wifi: rtw88: Add common USB chip support") +Link: https://github.com/lwfinger/rtw88/issues/344 +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/1e35dd26-3f10-40b1-b2b4-f72184a26611@gmail.com +--- + drivers/net/wireless/realtek/rtw88/usb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/net/wireless/realtek/rtw88/usb.c ++++ b/drivers/net/wireless/realtek/rtw88/usb.c +@@ -139,7 +139,7 @@ static void rtw_usb_write(struct rtw_dev + + ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), + RTW_USB_CMD_REQ, RTW_USB_CMD_WRITE, +- addr, 0, data, len, 30000); ++ addr, 0, data, len, 500); + if (ret < 0 && ret != -ENODEV && count++ < 4) + rtw_err(rtwdev, "write register 0x%x failed with %d\n", + addr, ret); diff --git a/package/kernel/mac80211/patches/rtl/107-v6.16-wifi-rtw88-usb-Upload-the-firmware-in-bigger-chunks.patch b/package/kernel/mac80211/patches/rtl/107-v6.16-wifi-rtw88-usb-Upload-the-firmware-in-bigger-chunks.patch new file mode 100644 index 00000000000..8031e46556d --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/107-v6.16-wifi-rtw88-usb-Upload-the-firmware-in-bigger-chunks.patch @@ -0,0 +1,214 @@ +From 80fe0bc1659c0ccc79d082e426fa376be5df9c04 Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Sat, 10 May 2025 15:22:24 +0300 +Subject: [PATCH] wifi: rtw88: usb: Upload the firmware in bigger chunks + +RTL8811AU stops responding during the firmware download on some systems: + +[ 809.256440] rtw_8821au 5-2.1:1.0: Firmware version 42.4.0, H2C version 0 +[ 812.759142] rtw_8821au 5-2.1:1.0 wlp48s0f4u2u1: renamed from wlan0 +[ 837.315388] rtw_8821au 1-4:1.0: write register 0x1ef4 failed with -110 +[ 867.524259] rtw_8821au 1-4:1.0: write register 0x1ef8 failed with -110 +[ 868.930976] rtw_8821au 5-2.1:1.0 wlp48s0f4u2u1: entered promiscuous mode +[ 897.730952] rtw_8821au 1-4:1.0: write register 0x1efc failed with -110 + +Maybe it takes too long when writing the firmware 4 bytes at a time. + +Write 196 bytes at a time for RTL8821AU, RTL8811AU, and RTL8812AU, +and 254 bytes at a time for RTL8723DU. These are the sizes used in +their official drivers. Tested with all these chips. + +Cc: stable@vger.kernel.org +Link: https://github.com/lwfinger/rtw88/issues/344 +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/43f1daad-3ec0-4a3b-a50c-9cd9eb2c2f52@gmail.com +--- + drivers/net/wireless/realtek/rtw88/hci.h | 8 ++++ + drivers/net/wireless/realtek/rtw88/mac.c | 11 +++-- + drivers/net/wireless/realtek/rtw88/mac.h | 2 + + drivers/net/wireless/realtek/rtw88/pci.c | 2 + + drivers/net/wireless/realtek/rtw88/sdio.c | 2 + + drivers/net/wireless/realtek/rtw88/usb.c | 55 +++++++++++++++++++++++ + 6 files changed, 76 insertions(+), 4 deletions(-) + +--- a/drivers/net/wireless/realtek/rtw88/hci.h ++++ b/drivers/net/wireless/realtek/rtw88/hci.h +@@ -19,6 +19,8 @@ struct rtw_hci_ops { + void (*link_ps)(struct rtw_dev *rtwdev, bool enter); + void (*interface_cfg)(struct rtw_dev *rtwdev); + void (*dynamic_rx_agg)(struct rtw_dev *rtwdev, bool enable); ++ void (*write_firmware_page)(struct rtw_dev *rtwdev, u32 page, ++ const u8 *data, u32 size); + + int (*write_data_rsvd_page)(struct rtw_dev *rtwdev, u8 *buf, u32 size); + int (*write_data_h2c)(struct rtw_dev *rtwdev, u8 *buf, u32 size); +@@ -79,6 +81,12 @@ static inline void rtw_hci_dynamic_rx_ag + rtwdev->hci.ops->dynamic_rx_agg(rtwdev, enable); + } + ++static inline void rtw_hci_write_firmware_page(struct rtw_dev *rtwdev, u32 page, ++ const u8 *data, u32 size) ++{ ++ rtwdev->hci.ops->write_firmware_page(rtwdev, page, data, size); ++} ++ + static inline int + rtw_hci_write_data_rsvd_page(struct rtw_dev *rtwdev, u8 *buf, u32 size) + { +--- a/drivers/net/wireless/realtek/rtw88/mac.c ++++ b/drivers/net/wireless/realtek/rtw88/mac.c +@@ -856,8 +856,8 @@ fwdl_ready: + } + } + +-static void +-write_firmware_page(struct rtw_dev *rtwdev, u32 page, const u8 *data, u32 size) ++void rtw_write_firmware_page(struct rtw_dev *rtwdev, u32 page, ++ const u8 *data, u32 size) + { + u32 val32; + u32 block_nr; +@@ -887,6 +887,7 @@ write_firmware_page(struct rtw_dev *rtwd + rtw_write32(rtwdev, write_addr, le32_to_cpu(remain_data)); + } + } ++EXPORT_SYMBOL(rtw_write_firmware_page); + + static int + download_firmware_legacy(struct rtw_dev *rtwdev, const u8 *data, u32 size) +@@ -904,11 +905,13 @@ download_firmware_legacy(struct rtw_dev + rtw_write8_set(rtwdev, REG_MCUFW_CTRL, BIT_FWDL_CHK_RPT); + + for (page = 0; page < total_page; page++) { +- write_firmware_page(rtwdev, page, data, DLFW_PAGE_SIZE_LEGACY); ++ rtw_hci_write_firmware_page(rtwdev, page, data, ++ DLFW_PAGE_SIZE_LEGACY); + data += DLFW_PAGE_SIZE_LEGACY; + } + if (last_page_size) +- write_firmware_page(rtwdev, page, data, last_page_size); ++ rtw_hci_write_firmware_page(rtwdev, page, data, ++ last_page_size); + + if (!check_hw_ready(rtwdev, REG_MCUFW_CTRL, BIT_FWDL_CHK_RPT, 1)) { + rtw_err(rtwdev, "failed to check download firmware report\n"); +--- a/drivers/net/wireless/realtek/rtw88/mac.h ++++ b/drivers/net/wireless/realtek/rtw88/mac.h +@@ -34,6 +34,8 @@ int rtw_pwr_seq_parser(struct rtw_dev *r + const struct rtw_pwr_seq_cmd * const *cmd_seq); + int rtw_mac_power_on(struct rtw_dev *rtwdev); + void rtw_mac_power_off(struct rtw_dev *rtwdev); ++void rtw_write_firmware_page(struct rtw_dev *rtwdev, u32 page, ++ const u8 *data, u32 size); + int rtw_download_firmware(struct rtw_dev *rtwdev, struct rtw_fw_state *fw); + int rtw_mac_init(struct rtw_dev *rtwdev); + void rtw_mac_flush_queues(struct rtw_dev *rtwdev, u32 queues, bool drop); +--- a/drivers/net/wireless/realtek/rtw88/pci.c ++++ b/drivers/net/wireless/realtek/rtw88/pci.c +@@ -12,6 +12,7 @@ + #include "fw.h" + #include "ps.h" + #include "debug.h" ++#include "mac.h" + + static bool rtw_disable_msi; + static bool rtw_pci_disable_aspm; +@@ -1602,6 +1603,7 @@ static const struct rtw_hci_ops rtw_pci_ + .link_ps = rtw_pci_link_ps, + .interface_cfg = rtw_pci_interface_cfg, + .dynamic_rx_agg = NULL, ++ .write_firmware_page = rtw_write_firmware_page, + + .read8 = rtw_pci_read8, + .read16 = rtw_pci_read16, +--- a/drivers/net/wireless/realtek/rtw88/sdio.c ++++ b/drivers/net/wireless/realtek/rtw88/sdio.c +@@ -10,6 +10,7 @@ + #include + #include + #include "main.h" ++#include "mac.h" + #include "debug.h" + #include "fw.h" + #include "ps.h" +@@ -1164,6 +1165,7 @@ static const struct rtw_hci_ops rtw_sdio + .link_ps = rtw_sdio_link_ps, + .interface_cfg = rtw_sdio_interface_cfg, + .dynamic_rx_agg = NULL, ++ .write_firmware_page = rtw_write_firmware_page, + + .read8 = rtw_sdio_read8, + .read16 = rtw_sdio_read16, +--- a/drivers/net/wireless/realtek/rtw88/usb.c ++++ b/drivers/net/wireless/realtek/rtw88/usb.c +@@ -165,6 +165,60 @@ static void rtw_usb_write32(struct rtw_d + rtw_usb_write(rtwdev, addr, val, 4); + } + ++static void rtw_usb_write_firmware_page(struct rtw_dev *rtwdev, u32 page, ++ const u8 *data, u32 size) ++{ ++ struct rtw_usb *rtwusb = rtw_get_usb_priv(rtwdev); ++ struct usb_device *udev = rtwusb->udev; ++ u32 addr = FW_START_ADDR_LEGACY; ++ u8 *data_dup, *buf; ++ u32 n, block_size; ++ int ret; ++ ++ switch (rtwdev->chip->id) { ++ case RTW_CHIP_TYPE_8723D: ++ block_size = 254; ++ break; ++ default: ++ block_size = 196; ++ break; ++ } ++ ++ data_dup = kmemdup(data, size, GFP_KERNEL); ++ if (!data_dup) ++ return; ++ ++ buf = data_dup; ++ ++ rtw_write32_mask(rtwdev, REG_MCUFW_CTRL, BIT_ROM_PGE, page); ++ ++ while (size > 0) { ++ if (size >= block_size) ++ n = block_size; ++ else if (size >= 8) ++ n = 8; ++ else ++ n = 1; ++ ++ ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), ++ RTW_USB_CMD_REQ, RTW_USB_CMD_WRITE, ++ addr, 0, buf, n, 500); ++ if (ret != n) { ++ if (ret != -ENODEV) ++ rtw_err(rtwdev, ++ "write 0x%x len %d failed: %d\n", ++ addr, n, ret); ++ break; ++ } ++ ++ addr += n; ++ buf += n; ++ size -= n; ++ } ++ ++ kfree(data_dup); ++} ++ + static int dma_mapping_to_ep(enum rtw_dma_mapping dma_mapping) + { + switch (dma_mapping) { +@@ -855,6 +909,7 @@ static const struct rtw_hci_ops rtw_usb_ + .link_ps = rtw_usb_link_ps, + .interface_cfg = rtw_usb_interface_cfg, + .dynamic_rx_agg = rtw_usb_dynamic_rx_agg, ++ .write_firmware_page = rtw_usb_write_firmware_page, + + .write8 = rtw_usb_write8, + .write16 = rtw_usb_write16, diff --git a/package/kernel/mac80211/patches/rtl/108-v6.16-wifi-rtw88-Fix-the-random-error-beacon-valid-message.patch b/package/kernel/mac80211/patches/rtl/108-v6.16-wifi-rtw88-Fix-the-random-error-beacon-valid-message.patch new file mode 100644 index 00000000000..8008b58ff4d --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/108-v6.16-wifi-rtw88-Fix-the-random-error-beacon-valid-message.patch @@ -0,0 +1,73 @@ +From f24d0d8c3cd7e4237f802c4d2f3bd4ac04572948 Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Sat, 10 May 2025 16:12:34 +0300 +Subject: [PATCH] wifi: rtw88: Fix the random "error beacon valid" messages for + USB + +All the USB devices have a problem in AP mode: uploading the updated +beacon to the chip's reserved page can randomly fail: + +[34996.474304] rtw88_8723du 1-2:1.2: error beacon valid +[34996.474788] rtw88_8723du 1-2:1.2: failed to download drv rsvd page +[34999.956369] rtw88_8723du 1-2:1.2: error beacon valid +[34999.956846] rtw88_8723du 1-2:1.2: failed to download drv rsvd page +[34999.956855] rtw88_8723du 1-2:1.2: failed to download beacon +[35017.978296] rtw88_8723du 1-2:1.2: error beacon valid +[35017.978805] rtw88_8723du 1-2:1.2: failed to download drv rsvd page +[35017.978823] rtw88_8723du 1-2:1.2: failed to download beacon +[35023.200395] rtw88_8723du 1-2:1.2: error beacon valid +[35023.200869] rtw88_8723du 1-2:1.2: failed to download drv rsvd page +[35023.200875] rtw88_8723du 1-2:1.2: failed to download beacon +[35478.680547] rtw88_8723du 1-2:1.2: error beacon valid +[35478.681023] rtw88_8723du 1-2:1.2: failed to download drv rsvd page + +Disable some beacon-related hardware functions before uploading the +beacon and enable them again after. + +Tested with RTL8723DU, RTL8812BU, RTL8822CE. + +Signed-off-by: Bitterblue Smith +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/c248c40a-d432-47ed-90e0-d81ee6c32464@gmail.com +--- + drivers/net/wireless/realtek/rtw88/fw.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +--- a/drivers/net/wireless/realtek/rtw88/fw.c ++++ b/drivers/net/wireless/realtek/rtw88/fw.c +@@ -1467,7 +1467,7 @@ void rtw_add_rsvd_page_sta(struct rtw_de + int rtw_fw_write_data_rsvd_page(struct rtw_dev *rtwdev, u16 pg_addr, + u8 *buf, u32 size) + { +- u8 bckp[2]; ++ u8 bckp[3]; + u8 val; + u16 rsvd_pg_head; + u32 bcn_valid_addr; +@@ -1479,6 +1479,8 @@ int rtw_fw_write_data_rsvd_page(struct r + if (!size) + return -EINVAL; + ++ bckp[2] = rtw_read8(rtwdev, REG_BCN_CTRL); ++ + if (rtw_chip_wcpu_11n(rtwdev)) { + rtw_write32_set(rtwdev, REG_DWBCN0_CTRL, BIT_BCN_VALID); + } else { +@@ -1492,6 +1494,9 @@ int rtw_fw_write_data_rsvd_page(struct r + val |= BIT_ENSWBCN >> 8; + rtw_write8(rtwdev, REG_CR + 1, val); + ++ rtw_write8(rtwdev, REG_BCN_CTRL, ++ (bckp[2] & ~BIT_EN_BCN_FUNCTION) | BIT_DIS_TSF_UDT); ++ + if (rtw_hci_type(rtwdev) == RTW_HCI_TYPE_PCIE) { + val = rtw_read8(rtwdev, REG_FWHW_TXQ_CTRL + 2); + bckp[1] = val; +@@ -1522,6 +1527,7 @@ restore: + rsvd_pg_head = rtwdev->fifo.rsvd_boundary; + rtw_write16(rtwdev, REG_FIFOPAGE_CTRL_2, + rsvd_pg_head | BIT_BCN_VALID_V1); ++ rtw_write8(rtwdev, REG_BCN_CTRL, bckp[2]); + if (rtw_hci_type(rtwdev) == RTW_HCI_TYPE_PCIE) + rtw_write8(rtwdev, REG_FWHW_TXQ_CTRL + 2, bckp[1]); + rtw_write8(rtwdev, REG_CR + 1, bckp[0]); diff --git a/package/kernel/mac80211/patches/rtl/109-v6.16-wifi-rtw88-fix-the-para-buffer-size-to-avoid-reading.patch b/package/kernel/mac80211/patches/rtl/109-v6.16-wifi-rtw88-fix-the-para-buffer-size-to-avoid-reading.patch new file mode 100644 index 00000000000..11b73128db1 --- /dev/null +++ b/package/kernel/mac80211/patches/rtl/109-v6.16-wifi-rtw88-fix-the-para-buffer-size-to-avoid-reading.patch @@ -0,0 +1,38 @@ +From 4c2c372de2e108319236203cce6de44d70ae15cd Mon Sep 17 00:00:00 2001 +From: Alexey Kodanev +Date: Tue, 13 May 2025 12:13:04 +0000 +Subject: [PATCH] wifi: rtw88: fix the 'para' buffer size to avoid reading out + of bounds + +Set the size to 6 instead of 2, since 'para' array is passed to +'rtw_fw_bt_wifi_control(rtwdev, para[0], ¶[1])', which reads +5 bytes: + +void rtw_fw_bt_wifi_control(struct rtw_dev *rtwdev, u8 op_code, u8 *data) +{ + ... + SET_BT_WIFI_CONTROL_DATA1(h2c_pkt, *data); + SET_BT_WIFI_CONTROL_DATA2(h2c_pkt, *(data + 1)); + ... + SET_BT_WIFI_CONTROL_DATA5(h2c_pkt, *(data + 4)); + +Detected using the static analysis tool - Svace. +Fixes: 4136214f7c46 ("rtw88: add BT co-existence support") +Signed-off-by: Alexey Kodanev +Signed-off-by: Ping-Ke Shih +Link: https://patch.msgid.link/20250513121304.124141-1-aleksei.kodanev@bell-sw.com +--- + drivers/net/wireless/realtek/rtw88/coex.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/net/wireless/realtek/rtw88/coex.c ++++ b/drivers/net/wireless/realtek/rtw88/coex.c +@@ -309,7 +309,7 @@ static void rtw_coex_tdma_timer_base(str + { + struct rtw_coex *coex = &rtwdev->coex; + struct rtw_coex_stat *coex_stat = &coex->stat; +- u8 para[2] = {0}; ++ u8 para[6] = {}; + u8 times; + u16 tbtt_interval = coex_stat->wl_beacon_interval; +