From nobody Tue Sep 01 21:44:40 2026 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4hZKBw3yJ9z6q3Mx for ; Tue, 01 Sep 2026 21:44:40 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "YR2" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hZKBw368rz478N for ; Tue, 01 Sep 2026 21:44:40 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1788299080; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=NHVmZEbMPYLF78Ab1T7qV0fOzr5n2prODLOpybYKh0k=; b=hOoNZ4sC9JDIvSJ7MT/Q8Xm5xQNPu9DqPz6sHYtIQV1T6sxy0/Icvv/iaTw5GFI1QPWJKF ssoO+HU/ifJdi/i5DrAfAHGkOjKgOEih3gos9XzYRMB6kuY8SqXQzyKSJwVcPxJLd3IW8R GCAqzodYc3+F6WwhxmyJgwP6y/uTKMf5pSUwqrr5HQ2g19vvBlToip/xpLDBS6WsJ6L6qq g6PrWBEK4zTCEJoeDpaxV7KznoZXXLII+A7zbTVQdOBtVFEmjJ06wtV7bwiquF6Y2nXFyy 42jR0jjho/O+CXKn1EYv7zOgKdAiMTxj8abW21bwfPZQyahi+vy3U1HRovAsHA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1788299080; a=rsa-sha256; cv=none; b=erFQqjrtAsGDuqk6egLLPntZWw1uPrDRZ0znIkT1cj3/Yw4FWsjiQApFbIA/eSr5t0DFMB MeHLHKYw+Ptfc6yYWlYDwFoe8mO/dXNZFXFjVsWxkbpUIeT7eCWPg6QDJSddBnssbNlv/W pP9I9DHAb7GYRGRANJl/YNIOq2pmP/emeIpZqC4aBXBidB0709LMdQmKdK2C6kVUEpxtEJ kpI1dwcbzxSdXz/GQAWOJzZlYa6VOsADJenheWAr3DO8Q3kcdyk+jihUph1bdnHrW1CIVm TfB2jxC+vPp5liVHVnXWamLxZDpZyt7/K6ziKe2NhDFrPF1Qe2KzFJt9z+SpNQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1788299080; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=NHVmZEbMPYLF78Ab1T7qV0fOzr5n2prODLOpybYKh0k=; b=fDnE0Ztcg0zgsis5KWop53uTHwD2UdSc001xVFvjajOzZw5xwy9HCUxiXJ3g1tYpkjFIGJ jaYw2q9ShWEA7ezSWBAbqohia8hNXoQGpo0czi0DWVNJVESlA0i7tsiDMMWmmfPAVkQ/kG YlwY0AhvO2ywfLiyctctTk8IJnf+vIkF9lA6ynA0PkVxR3b4T/0sPfyHcrJ/xKgAOSj0zU 5OlOlcP5P2yNWyyN7RZgTZj/rBW6WSeIyHa5sQuwdVQ49Qeag8TMYWL7uAdO525Nx05AY0 yCMHSLB1XFnxV96CToxDeuwUNleZPWYkslZNXttd7t/E9urpNHm+2nDrWhiZoQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hZKBw1WK4z1Pw for ; Tue, 01 Sep 2026 21:44:40 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 26361 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 01 Sep 2026 21:44:40 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Ahmad Khalifa Subject: git: 551b7c5e12bf - main - rtwn: add support for the RTL8723BU List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: vexeduxr X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 551b7c5e12bfea623a47edf97ad5689732a1233f Auto-Submitted: auto-generated Date: Tue, 01 Sep 2026 21:44:40 +0000 Message-Id: <6a974748.26361.11f11283@gitrepo.freebsd.org> The branch main has been updated by vexeduxr: URL: https://cgit.FreeBSD.org/src/commit/?id=551b7c5e12bfea623a47edf97ad5689732a1233f commit 551b7c5e12bfea623a47edf97ad5689732a1233f Author: Ahmad Khalifa AuthorDate: 2026-09-01 21:07:59 +0000 Commit: Ahmad Khalifa CommitDate: 2026-09-01 21:41:04 +0000 rtwn: add support for the RTL8723BU Pushed using the RTL8723BU. Reviewed by: ziaee, avos, adrian Relnotes: yes Differential Revision: https://reviews.freebsd.org/D59205 --- share/man/man4/rtwn.4 | 8 +- share/man/man4/rtwn_usb.4 | 5 +- sys/conf/files | 11 + sys/contrib/dev/rtwn/rtwn-rtl8723bufw.fw.uu | 717 ++++++++++++++++++++++++++++ sys/dev/rtwn/rtl8723b/r23b.h | 59 +++ sys/dev/rtwn/rtl8723b/r23b_calib.c | 620 ++++++++++++++++++++++++ sys/dev/rtwn/rtl8723b/r23b_fw.c | 81 ++++ sys/dev/rtwn/rtl8723b/r23b_fw_cmd.h | 55 +++ sys/dev/rtwn/rtl8723b/r23b_init.c | 235 +++++++++ sys/dev/rtwn/rtl8723b/r23b_led.c | 45 ++ sys/dev/rtwn/rtl8723b/r23b_priv.h | 211 ++++++++ sys/dev/rtwn/rtl8723b/r23b_reg.h | 63 +++ sys/dev/rtwn/rtl8723b/r23b_rf.c | 87 ++++ sys/dev/rtwn/rtl8723b/r23b_rom.c | 133 ++++++ sys/dev/rtwn/rtl8723b/r23b_rom_defs.h | 17 + sys/dev/rtwn/rtl8723b/r23b_rom_image.h | 80 ++++ sys/dev/rtwn/rtl8723b/r23b_rx.c | 64 +++ sys/dev/rtwn/rtl8723b/r23b_var.h | 18 + sys/dev/rtwn/rtl8723b/usb/r23bu.h | 22 + sys/dev/rtwn/rtl8723b/usb/r23bu_attach.c | 197 ++++++++ sys/dev/rtwn/rtl8723b/usb/r23bu_init.c | 364 ++++++++++++++ sys/dev/rtwn/rtl8723b/usb/r23bu_rom.c | 43 ++ sys/dev/rtwn/rtl8812a/r12a_tx_desc.h | 6 + sys/dev/rtwn/usb/rtwn_usb_attach.h | 11 + sys/modules/rtwn/Makefile | 5 + sys/modules/rtwn_usb/Makefile | 3 + sys/modules/rtwnfw/Makefile | 2 +- sys/modules/rtwnfw/rtwnrtl8723bu/Makefile | 4 + 28 files changed, 3162 insertions(+), 4 deletions(-) diff --git a/share/man/man4/rtwn.4 b/share/man/man4/rtwn.4 index 06761fdcde4e..45a699d854ac 100644 --- a/share/man/man4/rtwn.4 +++ b/share/man/man4/rtwn.4 @@ -19,7 +19,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd November 10, 2024 +.Dd September 1, 2026 .Dt RTWN 4 .Os .Sh NAME @@ -93,6 +93,8 @@ Realtek 802.11n wireless 8192c (RTL8192C) .It Realtek 802.11n wireless 8192e (RTL8192E) .It +Realtek 802.11n wireless 8723b (RTL8723B) +.It Realtek 802.11ac wireless 8812a (RTL8812A) .It Realtek 802.11ac wireless 8821a (RTL8821A) @@ -122,6 +124,7 @@ which are loaded when an interface is brought up: .It Pa /boot/kernel/rtwn-rtl8192cfwT.ko .It Pa /boot/kernel/rtwn-rtl8192cfwU.ko .It Pa /boot/kernel/rtwn-rtl8192eufw.ko +.It Pa /boot/kernel/rtwn-rtl8723bufw.ko .It Pa /boot/kernel/rtwn-rtl8812aufw.ko .It Pa /boot/kernel/rtwn-rtl8821aufw.ko .El @@ -266,3 +269,6 @@ driver written by The .Nm driver currently does not implement firmware-based rate control. +The RTL8723BU seems to depend on some firmware commands for antenna +setup. +Hence, it does not work without firmware. diff --git a/share/man/man4/rtwn_usb.4 b/share/man/man4/rtwn_usb.4 index 3a584d18014f..4c7d903b6566 100644 --- a/share/man/man4/rtwn_usb.4 +++ b/share/man/man4/rtwn_usb.4 @@ -29,7 +29,7 @@ .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF .\" THE POSSIBILITY OF SUCH DAMAGES. .\" -.Dd November 10, 2024 +.Dd September 1, 2026 .Dt RTWN_USB 4 .Os .Sh NAME @@ -59,7 +59,7 @@ driver. The .Nm driver supports USB wireless network adapters based on certain -Realtek RTL 8188/8192/8812 and 8821 chipsets, including: +Realtek RTL 8188/8192/8723/8812 and 8821 chipsets, including: .Pp .Bl -column -compact "Belkin F7D1102 Surf Wireless Micro" "RTL8188CUS" "USB 2.0" .It Em Card Ta Em Chip Ta Em Bus @@ -97,6 +97,7 @@ Realtek RTL 8188/8192/8812 and 8821 chipsets, including: .It "Netgear WNA1000M" Ta RTL8188CUS Ta USB 2.0 .It "Mercusys MW150US" Ta RTL8188EU Ta USB 2.0 .It "Planex GW-900D" Ta RTL8812AU Ta USB 3.0 +.It "Realtek RTL8723BU" Ta RTL8723BU Ta USB 2.0 .It "Realtek RTL8192CU" Ta RTL8192CU Ta USB 2.0 .It "Realtek RTL8188CUS" Ta RTL8188CUS Ta USB 2.0 .It "Sitecom WLA-7100" Ta RTL8812AU Ta USB 3.0 diff --git a/sys/conf/files b/sys/conf/files index 44cb551d7fe7..e6f996812a8f 100644 --- a/sys/conf/files +++ b/sys/conf/files @@ -2990,6 +2990,17 @@ dev/rtwn/rtl8192e/r92e_rom.c optional rtwn dev/rtwn/rtl8192e/r92e_rx.c optional rtwn dev/rtwn/rtl8192e/usb/r92eu_attach.c optional rtwn_usb dev/rtwn/rtl8192e/usb/r92eu_init.c optional rtwn_usb +# RTL8723B +dev/rtwn/rtl8723b/r23b_calib.c optional rtwn +dev/rtwn/rtl8723b/r23b_fw.c optional rtwn +dev/rtwn/rtl8723b/r23b_init.c optional rtwn +dev/rtwn/rtl8723b/r23b_led.c optional rtwn +dev/rtwn/rtl8723b/r23b_rf.c optional rtwn +dev/rtwn/rtl8723b/r23b_rom.c optional rtwn +dev/rtwn/rtl8723b/r23b_rx.c optional rtwn +dev/rtwn/rtl8723b/usb/r23bu_attach.c optional rtwn_usb +dev/rtwn/rtl8723b/usb/r23bu_init.c optional rtwn_usb +dev/rtwn/rtl8723b/usb/r23bu_rom.c optional rtwn_usb # RTL8812A dev/rtwn/rtl8812a/r12a_beacon.c optional rtwn dev/rtwn/rtl8812a/r12a_calib.c optional rtwn diff --git a/sys/contrib/dev/rtwn/rtwn-rtl8723bufw.fw.uu b/sys/contrib/dev/rtwn/rtwn-rtl8723bufw.fw.uu new file mode 100644 index 000000000000..6d6d864d5ec5 --- /dev/null +++ b/sys/contrib/dev/rtwn/rtwn-rtl8723bufw.fw.uu @@ -0,0 +1,717 @@ +begin 644 rtwn-rtl8723bufw.fw.uu +M`5,0`",````#)A0U3'T``.4<```````````````````"1%```,!7P_P\````5\`\`````!?#_#P````7P#P`````0 +M\/\/````$/`/`````/4/``````#P#P``````#0```````````````````"0F +M*@```!\A)20-X@!;F"'`+PJ_F,.$#1!CVTJ\(V>WJB]`B +MY0S_(R2!^`\("+\#!'\`>('F,.3R`.4,PY]0(`4,=(8E#/CF_::!".:N#+X" +M`G3_S?CH;6#@".;`X(#VY0S3GT`GY0PDA_CFK@R^`@)T__T8YLWXY8%M8`;0 +MX/88@/7E#"2&R/85#(#3Y0PC)('X?P3"K^8PX`,0X@Q_`##A!S#C!'\(5/14 +M?,;2KU2`0@(:F@70"8`;_"';_W_M_`^1X@/8(]@C?^GB!=C"01G%T`9/` +MX.23P.!#B0%UBF!UC'G2C-*O(@+OTY0"0`-__R)T@2\O^.8@Y?3"K^9$,/;2 +MKZX,[L.?4"$.=(8N^.;Y".88O@("=/_][6E@"0GG&1GW"0F`\Q86@-KNTY]` +M!`6!!8'NTY]`(G2&+O@(YOGNM0P"J8$8!@;F_>UI8`D9&><)"?<9@/,>@-GO +M)(;XY@3X[R\$D$9QD_8([R^3]G\`(N_3E`)``W__(N\C)('XYC#E],*OYE2, +M]M*OY0RU!PITAB_XYO6!`D+=4"YTAR_XYK\"`G3__1CF^72&+_C[YOSI;&`( +MJ`7G]AT9@/2H`Z8%'^4,M0?C?P`B=(;W@/3E#+4'WHF!?P`B[].4`D`#?_\B[R,D@?C"K^8PY04P +MX`+2Y-+BQM*O?P`PX@$/`D+Q(_"+KG_7PZIY"\.F=0O#HG$7P(N#\H^#]H^#^H^#_(N#X +MH^#YH^#ZH^#[(J0E@O6"Y?`U@_6#(N#[H^#ZH^#Y(NOPH^KPH^GP(M"#T(+X +MY)-P$G0!DW`-HZ.3^'0!D_6"B(/D!@J$"XY).C^N23 +MH_CDDZ/(Q8+(RL6#RO"CR,6"R,K%@\K?Z=[G@+Y!HNP`0:+M`$&B[@!!HO(` +M`6X`0:+S`$&B]`!!HQH``%_^9_1O\7\"T:OO1`']?P+1C7\"T:OO5/[]?P+3 +M$*\!P\#0CX)U@P#M$KR[T-"2KR)_2'X)$CA%?V33$*\!P\#0CX)U@P#@D*,/ +M$KR[D*,/X/_0T)*O(M,0KP'#P-"0HL#O\)"BPNOP[6`"X7"0!V[@1`CP$J[3 +MD*+"X'`\\=20HL#@<"T2O*EP$A(W3N3_=`+^[/'.T:+O5/Z`$1(W3N3^=(#_ +MY.SQSM&B[T0!_7]DT8U_3A)XM^&[\=20HL#@!$`?U_3]&-$KP]=&;_[/'.?S!^"1(X11*HJU3\_^]$`?_L\` +M5)`';N!4]_`2KMN0HL#@<#B0HL+@8`GQU!):X^3_@!Y_9]&K[U3?\=L2O*EP +M"Q(W3N1T@/]T`H`%$C=.Y/_^[/'.?TA^"1(X11*\H/'@5/[]?T_1C=#0DJ\B +MD**(L7*0JKD""&U_9]&K[T0@_7]GP8W]?T[1C7]/T:OO(M,0KP'#P-`25U71 +M@]%WT7>0`0!T/_"CX%3]\)`%4^!$(!*)UC#@!7\!$H@R$H_6$S#@-Y"@C.!@ +M")"C!W0!\(`%Y)"C!_#OQ!-4!S#@!^20HPCP@`:0HPAT`O"0HP?@_Z/@_1%B +M?P$2B#*0H#K@8`+D\-#0DJ\BTQ"O`0H$T27]\PX`(A69"@C>!P +M6^4F9`)@)^4G<",Q7N4FD**(M`$%$D5R@`@2O3+N1`+^[#%L$D?)?TA^"1(X +M1>4G9`)P`B%9Y2=P`B%9,5Z0H(S@D**(8`42O3*`!Q)%]4?TW_D*!.\.Y4`?[O5/Z1W_'>_Y"@3O#N +M5`+^[U3]D=\2;^C_D*!.$KN:3O"0G]G@0H$MT`X`,\8^0H$N`!9"@2W0J\"0*D*!\\/&E +M_\.4*E`2[\.4`Y"@3%`%=`/P@`KO\(`&D*!,="KP$E_<,.`]D*!+X'7P`X20 +MH%/PX,,3H_"0H$S@=?`#A)"@5?"0H$O@PQ.0H%;PD*!,X,,3D*!7\)`!/G0( +M\/U_`A)F)>20H(KPD2[$$Q-4`R#@-9"@2N##$R#@!?'1,.`G$@:)$Q,35!\P +MX`B0H(S@8`B`"Y"@C.!@!751`8`#Y/51?0*O41%BD*!*X,14#S#@%1*'V%0' +M,.`'?01_`A)AQA*]&G01\!*\#Y"@4N"T`0B0H%UT`?"`*)"@4N"T!`B0H%UT +M!/"`&9"@4N"T!@B0H%UT`O"`"I"@4N"T!P,2A+SDD*!2\(!5D2X2:PLPX`5U +M4@*`$1(&B1)K%C#@!752`8`#Y/52$J"TD*"KX##@!'VL@`)]+']`$D:-D2X3 +M$Q-4'S#@!'\#@`)_`1*(,JU2?P(18A)F.A*]&G1#\!*\EY"@7/#QSC#@"9"@ +M?>!$`O"`#'\!$H_=D*!]X%3]\'\#$HH2D*!*X"#@!Y"@3N!4O_#0T)*O(N#_ +MD*'/$D66D``#`@:BD*'/$D6?$@:)]5$DD9'7X%2:0HM#@_Q*T_*'FD*+0 +MX"01D>W@^^3]_]$A=?`$T2X3$U0#^PWD_]$A=?`$T2[QTOL-Y/_1(77P!-$N +MQ%0#^PWD_]$A=?`$\?W@^^3]#]$A=?`$D)82T1MU\`3QAL035`'[#7\!T2%U +M\`3QAE0?T1]U\`B0B0`2O#31(77P")")`=$;=?`(D(D"T1MU\`B0B0/1&W7P +M")")!!*\--$A=?`(D(D%T1MU\`B0B0;1&W7P"!*\^OL-L?=_CQ)&J^\PX`,2 +MM5?0T)*O(N]P!'3P@!;OM`$$=/2`#N^T`@1T^(`&[[0#"'3\+1*P*^OP(A)% +MBN#[#;'WD*+0X"+_=?`$Y5&0EA0218K@(G5`_W5!075"VW5#`WL!>IYYF_&< +M=4%!=4+>=4,#>P%ZGGF>\9QU04%U0N%U0Q1[`7J>>:'QG'5!075"]75#%'L! +M>IYYM1(U)N3_Y/YTD2^1U^!4_O!U\!#OD($`O@,.$D6*Y8(N$GI5=(#P@`L2 +M18KE@BX2>E7D\'7P".\2?&`N$GI5Y/`.OA###[^`O>20K>+P_^3^=?`*[Q)_ +MJ'7P`N[QE?`.O@7N=)$O$KM1=!/P=!$O$G5%Y/!T`2\2=2UTP/!T$2_U@N0T +MGO6#Y!*TX.3Q^'03$I54Y/!U\`3O\894X$0)\'7P!._1+E3S\'7P!._1+E3\ +M\'7P!._QAD0@\'7P!._1+E3/\'7P!._1+D1`\'7P!._1+E1_$I54X/YU\!#O +M$G6.[O!TD2^1U^3P#^]D@&`"P&0H/82;4V0H/?P(I"@3>#$$Q,35`$B__`2!HG^ +M5`3][U3[32)_+'X)`CA%_^R0HHP""&V!]?!U\`3OD)81`D6*X$0"\.20HJOP +MD*`WX)"BK/#D^_U_5'X!TQ"O`N*.CHW0%\-#0DJ\BY)"A_/"0H*[@(.`"(7N0H+#@M!0+?P%1&N]@`B%[ +M(78Q@Q)WU9"A^O!@!^!D`F`"(3V0H+#@<#3QXU0',.`"(2T2O&%]3G]OD<8Q +M@_$<>P1]`9%QOP$.,8-1#T0!\)"@L'0!\"(2N[!]3X!LD*"PX&0!<'$Q@U$/ +M_S#@")"A_'0!\(`5[\,3(.`/D*'\=`'P$KQA?5!_;Y'&D*'\X&!&D*$YX&0& +M8#/@!/#@TY0!0`B0H?UT!/"`!>20H?WP,8/Q')"A_>"1;K\!"?'5=`,2HW@! +M&Q*[L'U1@<;DD*$Y,7Q1#U3[\)"@L.!D!7!&_U$:[W!`@#F0H?K@9`-P-I"@ +ML.!D!7`N\>-4!R#@%#&#!/^CX+4'`N3_=?`+[_'+[Q$3,8/]?P*1T>3_41KO +M<`5_!A*?<2+PD*"P=`7PD*"NX,,35`!@&.20H0#P +MH_`!2)"A`/'<,8-1#U3]\!)F.B)U\`N0H.(218K@(I"A_N_P\57O<`+_(C&# +MD*#\\!*ZJ[4'!.Y4\?`Q@Y"A__"0H?[@D*"P<`/P@`-T%/`2O&H2O/(PX$(2 +MNUDD!?6"Y#2A]8/@_G7P"^^0H-L218KN\)"A_^#_)"@2NUP$\!*[6?^0H03@ +M_N^U!@^0H?_@)"CU@N0TH?6#Y/"0H?\2G]'\D*#\$I_1;&`3D*'_X'7P"Q*U +MU)"A_^!U\`NQ21*\:I"@XQ)%BN`$\)"A_N!P))"@_N#^Q!-4!R#@&'7P"^\2 +M=]C_8`._`@N0H?_@\1SD^_V1<9"A_^#]?P&1T9"@_A*)Y+\"!>3_$I]Q?P$B +M$KJKM0<$[E3Q\#&#$KK,$1/DD*"P\/%5$KK"\?G@^A*FV?Q4`_WL$Q-4!_ON +MQ%0/D*+?\*\"$K7S,8-U\`Z0H+*Q3#&#_W7P#I"@O!)%BN`$\'7P#N^1M#&# +M_7\!TQ"O`!@)9`%(N"0HJ;P?13Q4>]D`7`%$H3\@`1_`(`1 +MD**FX/]]%9'&@`,2A/P2O$;0T)*O(I"@O1)%BN#_?@#D^_V1<>3]_Y`%(N_P +MD)Z6[?`BTQ"O`0````%_ +M`'X(\182"'D````!D*(Q$@AY`````?$2$@AY````$)"C"Q)=0>]4`__D>`$2 +M"$=X!!*[R7X*\182"'D```P`D*,+$EU![U0#_^1X"A*[R7X-\182"'D,```` +MD*,,$EU![U0#_^1X&A((6I"B,1((;7\8?@CQ%A((>0``#`"0HC$2"'D````` +M$KOY$@AY```,`)"B'Q((>0``!`"`69`&`^!$!/"0HBT2"'D````!D*(Q$@AY +M`````'\`?@CQ%A((>0````&0HC$2"'D`````\1(2"'D```P`D*(Q$@AY```, +M`!*[^1((>0``#`"0HA\2"'D```P`?1A\`.3_$K5>T-"2KR+3$*\!P\#0D*(K +M[O"C[_`2-TZ0HC42"&V0HBT217(2"#J0HC42MG3`!,`%P`;`!Y"B+1)%#_?4B!QI"@ +MN0)%BOUU\`Z0H+$"18I_]!)&J^\@Y0Y_]!)&J^]_`2#D!7\"(G\#(A$#D)Z8 +M[_`2L&60`61T`?"0!"/@1(#P$8]$!/U_%Q)&C7\6$:I$0/U_%A)&C1*WD^]D +M`7`PD*&_X%0'\.#_9`=@!>]D!'`>$K`S[V0!#_ +MH^#]HQ)%EA*5>'\!@`Y_`5'0?P*`!G\"4=!_`]#0DJ\BD/UHX/^0_6#@D*(( +M\.\@X`)!SY"B[N!P&G\N$D:KD*"([_!_+1)&JY"@B>_PD*+N=`'PD*((X&05 +M<%B0_6+@_S#F$?14/P3^D0+#GG'Z0!+D\(`.D0+^[U0_+G'Z0`-T/_"0H@?@ +M_U0PQ%0/_N\EX"7@3I"B!?#@_7\N$D:-D*('X,14\/^0H(G@5`]/_7\M$D:- +MD*((X+0A#)#]8N#_$I@K?P11U)"B"."T(P1_`5'JD*((X+0G!'\"4>J0H@C@ +MM#`,Y/O]?P$2F1=_!%'4D*((X&0T8`)!;I#]8N`PX%J0H&_@_\,3,.`"06Z0 +MH$WQWS#@&E'CD*!P[O"C[_!1X^3__NP21\Y_2'X)$CA%D0M]`1)&R)"B!70! +M\/MZHGD%_7\T$;&0H)/@1`'PD`2=Y/#@1`'P$JZB@#V1"^3]$D;(D*!-$FL* +M,.`A4>/D^_KM^>SXD*!PX/ZCX/_D_/T215021\Y_2'X)$CA%\>:0!)W@5/[P +M$J[CD*((X/VT-0>0H%'@1`'P[;0V(I#]8>"0H@7PD/UBX)"B!O"0H@C@_Y"B +M!>#]>P%ZHGD&$;&0H@C@M#<#$JPSD*((X+1`%)#]8N`PX`B0H&UT`?"`!>20 +MH&WPD/UHX$0!\")1\'\$CV]_`A)$MY">DN!%;_`B?TA^"0(W3G$5?P2`Y-,0 +MKP'#P-"0HEMT%?"0HFET`?"0HEWO\'L!>J)Y6W&;T-"2KR*0HCUT"?"0HDMT +M!_"0HC_O\'`QD*!CX&`:H^!@`H`,D`=PX'`&D`=TX&`(D*)`=`'P@`7DD*)` +M\.20HD'PH_"C\*.`.9#]8N"0HD#PD/UCX)"B0?"0_63@D*)"\)#]9>"0HD/P +MD/UFX)"B1/"0_6?@D*)%\)"B0.!4`9"@8_"C\'L!>J)Y/=,0KP'#P-"0G[C@ +M_W`&H^!D"6`*[Q3_D)^YX+4'!'\!@`)_`.]@"9`!P>!$`O"`*L`!D)^YX!*> +MRZ@!_'T!T`%^`'\/$@9CD)^Y$G_@M`H"?P'O8`7DD)^Y\-#0DJ\BD*('\-.4 +M/R*0H(C@$Q-4/R*0H$W@Q!,35`'_D*"-X/N0H(S@D*+#\"*0H&7@,.`%$JR) +M@`,2H,J0H)/@,.`$H^`$\)"@E.!D"'`7D*"3X##@"Y$+Y/T21LCQYH`%Y)"@ +ME/#QW##@$Y"@E>`$\."T%`F0!)SD\)"@E?"0G\_@,.`&D)_1=`'PD)_9X'`" +MH1*0G_#@!+$G$D54P`3`!<`&P`>0!6*Q07@0$@A:T`/0`M`!T``2153`!,`% +MP`;`!Z.Q07@8$@A:T`/0`M`!T``21520H"02"&V0G]7@5'_PH^`PX`P2J\!T +M!?`2JKP2J]&0G]42B=HPX`F0`3O@,.0"\:^0HQ+@!/#@PY2`0`N0`9C@5/[P +MX$0!\'\!4=20H#W@,.`)D`$[X##D`O&O(O"0!6'@_^3\_?YX"!((6J@$J06J +M!JL'D`5@X/_D_/W^(A*E&?]4#_54[\14#V0/<#F0H*[@5/[_\.545`53)`'YY#52A5%`]4&)0G5#!-`!T`(2-2:K4:I2 +MJ5/QQE2`$D_2_W7P"^54$KSR5/Y/\'7P"^54D*#>$D6*X%3W\!(&B<14#Q1E +M5&`"X:Z0G]G@<`>0G\_@,.`%?P4"GW&K4:I2J5,2!HG$5`^0H*_QQ?]4#\14 +M\/Z0H*[@5`].\.]4$"7@_Y"@_N!4WT__\<548,14#_[O5/E.D*#^\)"@KN!4 +M\?`2O`^0H*[@1`'QU&0#<$F0!2?@1!+PY)"AS_"0H<_@__W#=.N=_70%E`"- +M@O6#X/[O_7P`PW0#G?ODG!*[='0'G?_DG/YTT"_U@G2A/O6#Y/',X+0$Q8!8 +M$J<`Y)"AS_"0H<_@^<.4!%!&X/_]?`##=(>=^W0%G(N"]8/@_N_[PW0#F_OD +ME``2NW1TBYW_=`6=_>2<_'30+?6"=*$\]8/O\CL4%X&!((6M`#T`+0`=`` +M$D54D*$K$@AMD*'5L4$2NXR0H=2Q01)%5,`$P`7`!L`'D*'6L4%X$!((6M`# +MT`+0`=``$D54P`3`!<`&P`>CL4%X&!((6M`#T`+0`=``$D54D*$O$@AM(GT" +M?P+QN7T!?P)T%1*].O[V=#`"9A;PD``&`@:B\)"AS^`$\"+PD*#>X%0'(I"@ +M3N#$$Q-4`R*0H)/@5/[PY*/P(GT!?QY)"@1^"0`3'PD*!(X)`!,O"0H$G@D`$S\)"@0N"0 +M`3CPD*!%X)`!.Y%Y?P%1/GX`?V)]`'L!>I]YU!((JA*[HQ((JI"?V'0"\)"? +MWQ3PH_"C=`KPD)_EY/"C=`+P43#P$KF[Y/W_,<9]#'\",<8QPI">F."T`0B0 +MG^1TW?"`$I">F."0G^2T`P5TU/"``W1`\']Y$D:K[U0#_[\"#W\H$D:K[S#B +M!I"?]G0"\!*M0E$P\)"@0>!4_O"0`3C@D*!"\)`!.>"0H$/PD`$ZX)"@1/"0 +M`3O@D*!%\)`!,."0H$;PD`$QX)"@1_"0`3+@D*!(\)`!,^"0H$GP?P$2JHT2 +MO`]^`/]]`'L!>J!Y.A((JA*\RQ*\P]$ZY)"@//`BX%1_\'T,?P'3$*\!P\#0 +MD*,5[_`48!448!DD`G`:[50!_Y"?U.!4_D_P@`R0G]SM\(`%D)_;[?!_CQ)& +MJ^\PY"R0HQ7@%&`'%&`8)`)P'I"?U.`2O%C_D)_]P`F$6)/YP`F%/)/Y@1R3\<`)ABB3\8`)AG>ZT#@)QX)"?W.!P +M!'\!43Z0G]S@M`8"D0&0G]S@M`0-D*,7X/]@!/&P@`+12)"?W.!D"&`"89W1 +M+6&=D)_/"C=`+P?7C_ +MD81]`G\#D820!@K@1`<2J^'D_]&,OP$1$FPM\)"?W.`@X@A]`7\$05K1`2+3 +M$*\!P\#0[V0!`+. +MPQ/.$]CY_Y"AZ>[PH^_P\:A@`J'UD)_9X'`"H?42NX-D`7`BD`:KX)"?X/"0 +M!JK@D)_?\*/@_W`(D)_?X/[_@`"0G^#O\!*HRN20G^(2J^$2IQ@2IT)4[_`2 +MNX,D_5`"@`^0G\_@,.`%$J'!@`,2H702:Q(PX%COQ!,35`,@X"(2O.)O<$F0 +MG]7@1$#P$KSJL0O1)1)?M1*\TY"?X.`4\(`MD)_7X,14#V0!<"(2O.+^;V`; +MD`5SX/_N;V`2D)_5$H3),.`)[U2_L0O1#9%ZT0&0G\_@PQ,@X`+1`2*0G]7@ +M1`3P(GT@Y/]T'1*].O[V=#@O]8+D-`'U@^[P(GT#?P)T'2_XYDV`Y=$X,<*0 +MG]-T#/`BT;CD_?\"5,;1.I%4\>Q!3Q*\R]$Z?0Q_`2'&[W`T?7A_`A)?N7T" +M?P,27[E]R'\"T0T2IQCPY/_1C.]P"M&L5+_P5'_P@`9]`7\,45K1L`*\PX&0 +M$KOM$I%^X/U\`!*3*X`%PS/.,\[8^1*]$G\`8`)_`2+1N-%(D)_4X%3W\"+3 +M$*\!P\#0D`$!X$0"\)`!`'3_\)`&MW0)\)`&M'2&$HG6,.`%?P,2B#*0H&7@ +M(.`X$H_6$S#@,9"@C.!@!^20HP7P@`:0HP5T`?#OQ!-4!Y"C!C#@!70!\(`# +M=`+PD*,%X/^CX/T22&)_`A*>GG\"$D:-T-"2KR*+48I2B5,23X__]542!HG^ +MPQ,PX`<23Z7U5H`"CU:%553E5-.55E`FJU&J4JE3$@:)5`']KU02D4*O5-&, +M[Z]4<`42L`:``Q*P`@54@-/E57`._]&,[W`(T:Q4O_!4?_`BT3B0G])T`?`B +MD*`_X)`!/R+1.O'L@.OD_]&,[V0!(N]@,O&H<"Z0G]7@5/[P?2M_#Q)4QI`& +M!.!4O_`2HW&_`1.0G]3@1$#P?09_`3'&D)_3=`;P(M$Z@*F`IY`%)^!$0/`B +MY)"AP?"0H<'@9`'P)/20`<3P=&>C\!(^1+\!`Q(Q_,*OD)_9X&`.D)_@$D_V$D+=@*^0G\_@ +MD)_;,.`%X/\"N,_@_WT!`F):TQ"O`39"?S[%N +M$D_9_Y"?SQ*[FG$]\>C_D)_/$IZF<3W^5$#][U2_39"?S_#NPQ,@X`(A,.`P +MX'(29B%U5"%1_C#@!W$I0U0(@`WDD)_0\*/P?4#_$E^YD)_/<14PX`-#5!+O +MQ%0/,.`#0U04D)_/X,035`%Q!S#@!'\$@`MQ'>]@!'\!@`)_`C'A(:)U5`$QVI"?TN!D!&`"(=7_,>$A +MU9"?S^`PX',29B%#5#%1_C#@!W$I0U0(@`=]0.3_$E^YD)_/<14PX`-#5`+O +MQ%0/,.`#0U0$,=IQ!S#@"Q*BZ&`QY/U_`H`>$F?LD)_3X+0"&1)F0'$=OP$) +MD)_;X/]]`8`#Y/W_$F):@`B0G]S@D)_3\)`%0'0B\(`K=50!,=J0G]/@M`(& +M?0%_!(`+D)_3X+0(!WT!?PP28EH2HIJ0G]L161*X'M#0DJ\BD`4GY53P(M,0 +MKP'#P-"0G]+@D*,4\&]P`D'Y[Q1@1A1@=!1P`D&?%'`"0B0?F0HQ3@M`(%$F>10?F0HQ3@M`,%$F?F0?F0HQ3@8`)! +M^1)GZD'YD*,4X+0$!1*XDH!]D*,4X+0!!1*X!4^R(2IWA`,9"?\^`$\)"@->#_D)_SX-.?4!Z0G^O@!!*/JY"?\O#[ +MD)_KX/^CX/V0HN=T!/`2JKPBL502!HG_5'^0G]GP[Q)/TJ,23X[_5/#$5`_^ +MD)_7X%3P3O`23#14`27@_I"?U.!4_4[P[U0/Q%3P_[%G$D^CD)_8$DSA_7\" +M$F'&L5JQ3O]4`?Z0H#NQ;O^Q31)/WO^0H#L2NYI._[%-\>C_D*`[$IZF3O^Q +M31*:VDZ0H#OP<0H@X"GOPQ,@X`MU4@&0H(S@8`N`#N3U4I"@C.!@!>3U48`# +M=5$!K5*O41)(8K%:D*'2$D6?$KCMD)_9X/\29E.0G]G@8!R0H=(219823X]4 +M#_\23Z7]$KD2$JO`=`'P$JJ\(O"0``4"!J*0H<\219^0H<\"19:0G]W@1`'P +MD)_7X%0/(N!4_D[^\.]4`O_N5/U/(K%4$@:)D*"6$D^.D*"7$D^DD*"8\)"@ +MR0H]-_Y"AT^"T`0>CX!*T.._P(GT??V\25,:0!2?@5+_P +MD)_2=`3P(GTE@.G^5!#][U3O32+D^_K]?P$21-Z0H52\+%BX%3\_Y"AU.!4 +M`T__L6+O\*$8KU$29HSO<`*A&!).*1)/TC#@`J$8D*'8\<+@_7P`D*'9$I,I +M@`7#,\XSSMCY$KT28`*A&!*[/^#^H^!.<`QTD251$K3TX'`"H1CE41*[99"A +MSA)%GQ*[/^#U5J/@]5=TD251$K3TX/^0H='D\*/O\'7P!.51$D_]X)"AT_#] +M$DXI_A,35`.QA>#U4E1_]5/3G4`6D*'3X/53Y5(PYP?E4T2`_X`"KU./4N53 +MD$$]DQ),Z.##GT`+=*$E4_6"Y#2>@`ETM253]8+D-)[U@^#_$KL?D*'+$D6? +ML1W@PY0%0`)!VJU8KU,2LQB/6.52,.<$!5@%6.58TY0:KUA``G\:$KL?D*'+ +M$D6?P^57E`_E5I0`4'.Q5O^0H=+@+_^0H='@-?#^$KT*_^XU\/Z0``02!ZLO +M_>XU\!*\!-/MG^R>0`42DS-!TY"ASA)%EA('@&57<`3E\&56=?`$<",23X02 +M:PO^[U0__^X$5`/^Q#,S5,!/\.3]KU$2D>=U\`2``!)/A%0_\$'3Y5%P1+%6 +M_Z[P$KT*_>7P/A*\!,/MG^R>4`B0GI%T`?"`)K%6^ZKPY5>N5G@#SL,3SA/8 +M^?]\`'T%$@<#T^N?ZIY`!>20GI'PJUBM4:]7KE82E'V.5(]5$KL#PQ*\(%`) +M?0&O41*1YX`,$KL1TQ*\($`+$I,SL37U@^3P@#:Q-?6#X`3PL37U@^##E`5` +M);$U]8/D\!*[$1*7S!*[`W0!DR__Y),^PQ/^[Q/_Y5$2E'/QY/#D]53U58'Y +ML1W@^60%8`)AFW7P$.51D($!\=OU6Q),Z>##E#!`$A),T^`@X@L23BG$$Q-4 +M`S#@#^3U6[$=L3_D\+%YY/"`"ZU3KU$2LDFQ>>_PL7G@9`%P9[%MX/\D!?WD +M,_P23.G@_L,2JX-0"Q*[3>#]Y5/#G4`;Y5MP!75;`8`-Y5NT`05U6P.``W5; +M!;%M[H`?$DSIX"0%_>0S_,/O$JN#4`:Q0>"T"@X23.G@_[%M[[%`Y/"`![$= +ML3_@!/`2NTWE4_"!X.ED!F`"@?GU5/55=?`0Y5&0@0'QV_5;KU>N5A*SH8]9 +MY5C3E!-`'Y"ARQ)%EA)M3OU\`.57KE:H!PB`!<[#$\X3V/G_@!GE5ZY6J%D( +M@`7.PQ/.$]CY_Y!!VN23_7P`$@<#D*'5[O"C[_#D]5KE6-.4$T`>$KKLJ%D( +M@`7.PQ/.$]CY_Y"ARQ)%EH5:@A*5##$_[OQ#-4X"[^L2GN\+$IX,.4 +MP$`%L2ETP/"Q*>`D'__D,_[O>`;.HN<3SA/8^"7@_W`$]5N`!.\4]5O3D*'2 +MX)0#D*'1X)0`4`D23.G@PY0P4`/D]5MU\!#E4?'-5/B0H=?P15O_\'7P$.51 +M$KQ\L1W@TY0%=!%0![$?X`3P@`2Q'^3P=5P!?0&O41*TB051`4LB=!$E4?6" +MY#2<]8,B=`$E4?6"Y#23]8,B=!$E4?6"Y#28(N3P=!$E4?6"Y#2;]8,BTJ_" +MKY">DN`BD*'.$D66D``(`@>K=?`0Y5&0@04"18IT`251]8+D-)3U@R)TD251 +M]8+D-)KU@R*0H=3P=?`0Y5&0@0`"18KD]6.0G\W@_^5CPY]``L%,KV,29HSO +M<`+!2.5C$Q,35!__Y6-4!_YT@2_QQ>#]KP82DRN`!<,SSC/.V/G_[UU@#3E`%`"Z]C$I+@T4WD\(`:=?`0 +MY6.QCN#]=?`$Y6,23BX2?]E[`:]CT5D%8Z&7(G01)6/U@N0TG?6#(M,0KP'# +MP-"/9XUHBVGDD**=\.5G$Q,35!^0HICPY6=4!Y"BFO!U\!#O\5I<#GE9V`%PY0$0`>M:*]G$K1@D**9 +MX/\2NQ/DD_QT`9/][Q*[!70!DRW_Y),\PQ/^[Q/_Y6<2E'/QY/"0HI[@_Y"B +MF>#^TY]`"^5H5(#][TWU:(`,D**?X/_NPY]0`H]H$KR%Y6A4@)"BG/#E:7`G +MD**8\<+`@\""X/^0HIH2NS>``L,SV/ST7]""T(/PD**;X%1_\(!"D**8\<+` +M@\""X/^0HIH2NS>``L,SV/Q/T(+0@_!U\!#E9Y"!`?';_Y"BF_"0HIG@D$&M +MD_XS,S-4^$^0HIOP1(#P=?`0Y6>QCN5H\.5G<`:0`Q9^!4_/_E:E0#3_]U\!#E9[%G[_!]`:]G$K2)T-"2KR+@)('U +M@N0TE/6#(I"!`1)%BN`B=?`+D*#>$D6*X%0'(J&4]8/N\*/O(L#@P(/`@L#0 +M==``P`7`!WWKD`'$[?!T=Q$2T`?0!=#0T(+0@]#@,O^C\.T$D`'$\*/O\"+` +MX,"#P(+`T'70`,`%P`=]'Y`!Q.WP='@1$M`'T`70T-""T(/0X#+`X,#PP(/` +M@L#0==``P`#``<`"P`/`!,`%P`;`!Y`!Q'1&\'1XH_`1ON44,.<"$9QT1@20 +M`<3P='BC\-`'T`;0!=`$T`/0`M`!T`#0T-""T(/0\-#@,G\!?@`2/<)_\A)& +MJ^\@Y@I_!1&W_7\%$D:-(A)&J^]$@")_5!)&J^4-7_41?U421JOE#E_U$G]6 +M$D:KY0]?]1-_5Q)&J^407_44K1%_5!)&C:T2?U421HVM$W]6$D:-K11_5Q)& +MC5.1[R+`X,#PP(/`@L#0==``P`#``<`"P`/`!,`%P`;`!Y`!Q'0&\'1YH_`2 +ML8;E&3#A`C'#Y1DPY`+QKN49,.4#$K$`Y1DPY@,2L>/E&S#@`Q*GA.4;,.$# +M$EPCY1LPX@,2H[CE&S#C`Q*G6N4;,.0#$J4< +M,.$#$J+OY1PPY`+QI.4<,.4#$G?B=`8$D`'$\'1YH_#0!]`&T`70!-`#T`+0 +M`=``T-#0@M"#T/#0X#+D_Y"AZ>_PD`1^X/5DH^#U965D8&N0H>IT`_"0H?AT +M"/#E9014#_5FY/5CY69U\`BD)`#U@N0T@/6#Y8(E8U%5X/]T["5C]8+D-*'U +M@^_P!6/E8[0(U7L!>J%YZA);F^5E!%0/]66T#P/D]660!'_E9?"0H>G@?P1P +M`P):U!*7X2+_D*+8X'7P")")`!)%BN6"+_6"Y#6#]8,BTQ"O`D)/[U@N0T0/6#Y8(E:U%5Y)/\[ER0HMOP +M=?`$[1).+E0#_[\""^5K<`>0HMO@5/#PD*+;X/^1625K457O\`5KY6MD!W"I +MD*+8X'7P!!).+O_$5`/]Y)"BV?!U;`;E;+0&!U%$X%0/@`>1625L457@D*+: +M\)"BVN!@,'5K!]%=@`7#,\XSSMCYT6Y@%=%ED*+9\.U@(N#3E`M`'.`D(/"` +M%A5KY6O#E`!0T^5L8`D5;.5LPY0`4*;D_/5LY6RT!@=11.!4#X`'D5DE;%%5 +MX)"BVO"0HMK@8"OD]6O178`%PS/.,\[8^=%N8!+19?SM8!OLTY0+0!5T("S\ +M@`\%:^5KM`C8!6SE;&0'<+"0HMG@_Y"BV.#^=?`$$D_][_!U\`3N$I59[/!U +M\!#N$G6.X/Y4?_5M[E2`_N5MTY]`"9"BV>!.]6V`#.5MPYQ0!J\&[$_U;9"B +MV.#_))$2NU'E;?!U\`3O$DXN\=F0HMC@_^3[K6T2=EF0HMC@_W7P$/&4Y/"0 +MHMG@_L.4#$`'D6ET`O"`&>[#E`20HMC@0`DDD9%L=`'P@`8DD9%LY/#0T)*O +M(I"BV.!U\`B0B0`218KE@B)TD2_U@N0TE?6#(A(&B51_]5$23X__5!_U4^]4 +M@!)/TO52$D^E_U0#]53O5##$5`_U5Q)/I?]40,03$U0#]57O5(`23]+U5A)/ +MI?]4"/X3$Q-4'_59[U0$$Q-4/_5:Y582O%@23BA4?T_PY542D2$23BA4OT_P +MY5EP9^535!\23X!4X$_PY514`Q).*%3\3_#O)>`EX!).*%3S3_#E4E0!Q#-4 +MX!)/@%3?3_#E5U0#Q%3P$DXH5,]/\.3U6(58@G6#`*.CHQ(&HO]U\`CE49%@ +M)5A15>_P!5CE6+0$WZ]145TBD`',X%0/D*,#\)"C`^#]<`+!4Y"?(.#_<`:C +MX&0)8`KO%/^0GR'@M0<$?P&``G\`[V`(D`'!X$0!\"*0HO,2DRF`!<,SSC/. +MV/G_[UUP`L$VY)"C!/"0HP3@^<.4!%!`T56D_^G]?``O_^PU\/YTT-&#$J^M +MY8(I457OT52D+?_L-?#^=/#1@W7P")">U!)%BN6"*5%5[_"0HP3@!/"`MI"C +M`^#_D*+S$KLW@`+#,]C\]%^0HP/PD*+SX/]T`:@'"(`"PS/8_)`!S/"0HO/@ +M!/#@5`/PD)\A\>"T"@)_`>]P`J%5Y)"?(?"A59`!P.!$`O"0HO/@1("0`(K1 +M5)`!T!)%BN"0``BD*$\[_"0G\W@D*&^\.20 +MH3WPD*&^X/Z0H3W@_\.>4"S@_O&:Y/!U\!#N\93@,.<)=($O\;SD\(`+\;60 +MH3W@\9IT`?"0H3W@!/"`QG\,?@`2/E#DD*$]\)"AON#_D*$]X/[#GT`"X8]T +M/B[QG.!P`N&'=?`0[I"!!O'$[I"!!_'-_!*[0>[PH^_P=?`0[)"!"O'$[)"! +M"_'-=?`*\:CN\*/O\'\!D*$]X/YU\!"0@0M13^#]=?`*[O&H=?`"[Q)/E>WP +M#^^T!=V0H3W@_W7P$)"!"1)%BN#^$K3Q[O"0H3W@_Y"A/.#]$K2)D*$]X"2! +M\;QT`?"0H3W@!/#!ZB)U\!#OD($#`D6*)#[U@N0TH?6#(N3_P9*0C0$"18JQ +M2W\"`EK4\9#@1$#P(O6"Y#23]8,B$D6*X/UU\!`B$D6*X/[M_Y"A/>`B$Q-4 +M`_5J(N`$\.!_`"+`X,#PP(/`@L#0==``P`#``<`"P`/`!,`%P`;`!Y`!Q'3G +M\'1_H_`2L;/E(3#A`Q*Q\.4A,.(#$J/:Y2$PY0(1I>4B,.`#$JN,Y2,PX0,2 +MI%[E(S#@`Q*C#N4C,.0"\=?E(S#B"A*Q_Y`'C^!$$/#E)##A!7\$$EK4Y20P +MY`(1O>4D,.4#$FM#Y20PY@,2:W3E)##G`Q*+S73G!)`!Q/!T?Z/PT`?0!M`% +MT`30`]`"T`'0`-#0T(+0@]#PT.`RD*"MX##@$!)F">20H+`248(2NLP24!,B +M$HXS$F2`$>.0H#W@,.`6$KQ/D*!`X&`%%/`"N=(2GL'D_Q)DR2*0H$K@,.`$ +MY/\1[R+3$*\!P\#0D**\[_"C=`+PY/^1PS#@`Q)FN)"@3N`PX`1_`8`WD*!* +M$E_?,.`$?PV`*I"@3>#_Q%0/,.`0[Q,35#\PX`1_"8`3?P.`#Y"@3>##$S#@ +M!'\#@`)_"1*(,I"BO.!D`W!G$E_<,.!,PX`V0HKS@<#_]_Q)4QH`XD*!*X,14#S#@&I"@4.!$(/"0H#S@ +M8`1]`8`8$F8Z?0%_#(`1D**\X+0##9"?V>!@!^3]?P028EJ0H#S@8!B0HKS@ +M<`1]!(`*D**\X&0#<#!]"W]O@">0HKS@<`3]_X`=D**\X+0#&1*A#U0'(.`+ +M[Q,35#\PX`,2H1?D_?\25,823\XPX`5_`1*/W9"@3N##$S#@#I`&S>!$$/"0 +M!L_@1!#PT-"2KR+@PY__$E?5[_#D^_U_;'X!`E`;X/]1NY"@7>`$\"(27]P@ +MX`*!KI"@4N!D`7`ND`:2X"#B!I`$X^!@')&UD*!?X`3PD*!6X'7P`X3_D*!? +MX+4'`H`"@9GQS@3P(I"@4N!D!'`KD`:2X"#B!I`$X^!@&)&UD*!?X`3PD*!5 +MX/^0H%_@M0<"@`*!F?'.=`3P(I"@4N!D!F`"@1V1T%`(D*!@X)0#0!KQKI"@ +M73#@!70%\(`#=`+PY)"@4O"0H&#P(I"@49'),.`[\<;QKC#@"Y"@;^`@X`*! +M3H%!D=!`"Y"@;^`PX`*!08%.D*!OX##@#)&OY)"@7_"0HNV!5Y"@770"\"*0 +MH%'@1`+PD*!@X`3P?P-1NY'04`J0H&#@E`-0`H&ND)[+X/^0HM=T"O![`7T! +MT1:M!ZP&Y/^Q+A*Z1:/@5/WPD*!1X%3]\%3[$F13?P,2B#*0!2+@1!#_?0,2 +M5,:0!)S@!/`BD*!2X&0'<#60H&#@M`0$D;R`8Y"@49'),.`8\<:0H&_@,.`- +MD:_DD*!?\)"B[02`"8!LL7&0H&#@!/"`/Y"@4N!D"7!,D*!1X##@"I&\D*!1 +MX%3^\"*0!I+@,.(C=`3PD*!?X`3PX+0"$O&^8`5T!?"``W0"\.20H%+P(G\# +M0;OQOF`%=`7P@`-T`O#DD*!2\"*0H%)T"?"0!I)T!/`BD*!==`7P(A**$I"@ +M3N#_$Q-4/R*0H&#@_Y"@7^`O_^0S_GP`?0,2!P.0H$O@+__L/OZ0H'S@_Y4/_#O8##1^D00\-'N1(#P\=A4!S#@*1*-15`,[R7@ +M)>#_="LM`J!%="LM]8+D-/SU@W1_\"+1^E3O\-'N1$#P(I"@4>!$`O!]"'\! +MTQ"O``@X!:`$A)?W##@#M'$(.`)D*"MX"#@ +M`O$&D**VX/]])Q)4QA*YZH`1$KGJT<0@X`F0H*W@(.`"\0:0H$K@,.`.$E_< +M,.`($KS:?2@25,82O$;0T)*O(M,0KP'#P-"0HM7M\*/K\)"BU._PY/W\$KJ7 +M?`"M!Y"BU."0!"7PD*+5X&`&$KOA1(#PKP5T("_U@N0T_/6#X%3`\!*[X53` +M\)"BU^#_K@5T&"[U@N0T_/6#[_!T$B[Q<.!4`?^0HM;@)>`EX/[O1`)._ZX% +M=!(N\7#O\'01+O&V=/_P="DNT?U4]_"0H$K@,.`-$KO51(#PD`42Y/"`!A*[ +MU51_\*X$KP70T)*O(I">R^#_D**SX/N0HM=T"O!]`=$6D**T[O#\H^_P_9"B +MLN#_L2Z0H*[@(G0)+?6"Y#3\]8/@(G0I+?6"Y#3\]8/@(I"BM.#^H^#_D($` +MX%0/_:P'\8!$`?#Q@%3[\*P'=!(L\7#@1/KP=!$L\;;@1!_PK`=T!BSU@N0T +M_/6#X$0.\)`$I^3PD`2F\)`$I73_\)`$I'3]\'04+/%XX%3`3?UT%"_Q>.WP +M(O!T$B_U@N0T_/6#(O6"Y#3\]8,B=`TL]8+D-/SU@^`BD)[,X/^0HM=T"_![ +M"'T!T1:0HNGN\/RC[_#]D*+HX/^A+I"@3>#$5`\B]8+D-/SU@R*0HNW@D*!= +M(N]4^_#DH_`BY)"@4O"0H%TB(I"@3N#$$R+`X,#PP(/`@L#0==``P`#``<`" +MP`/`!,`%P`;`!Y`!Q'3?\'2'H_`26/=3D;]TWP20`<3P=(>C\-`'T`;0!=`$ +MT`/0`M`!T`#0T-""T(/0\-#@,I"@;S':,.`'D`=X=`GP(I"@J^`PX!WO)/U@ +M#B3Z8`XD_&`.)`Q_`H`*?P.`!G\+@`)_#I`'>._P(JT'[7`9$?5P`H`7O`$" +M@!D1];P"`H`;[&0#<"&`&Q']<`1_`8`5O`$$?P.`#A']O`($?PF`!;P#!'\- +M$3*0H)G@Q!-4!S#@.NUP&Z/@$Q-4/S#@!^20H?GP@`(1[I"A^>#]Y/^`&9"@ +MFA)?WS#@!^20H?GP@`(1[I"A^>#]?P$22&(BD*'Y=`'P(I"@FN!4`_PBD*": +MX,14`_PBTQ"O`0H?G@M`$*D*'[X/\2NEB`%I"A^>"T`@^C +MX+0!"I"@I^#^H^#_L4Z0H)DQVB#@"Y"A^N!P!?W_$E3&(O"0H#O@$Q,35!\B +MD*"9X,,35`/_(I"@I>#^H^#_K0?N_Y`!;^3PCS6O!8\V^_U_;'X!$CRQD`%O +M=`7P(M,0KP'#P-#O9`-P#I"@31)?WY`&S##@.H`MD*!.X,14#S#@$.^0!LQP +M!N!4_/"`!.!$`_"0H)G@,.`;Q%0/,.`.[Y`&S'`&X%3\\(`)@`.0!LS@1`/P +MT-"2KR*0H?GO\)"A^W0"\'\!$H3#,.`BD*'YX+0"!'T'@`F0H?G@M`4'?0U_ +M_Q)4QA)75;\!`Q)'ZY"@3A)/T3#@!'\#@`)_`1$RD*'YX+0"#9"@2^`D`_^0 +MH%H2@K>0H$K@PQ,PX`?DD*'Z\(`&D*'Z=`'P$KRR(.`3D*",X&`(D*'[=`'P +M@`7DD*'[\)"A^^#_D*'ZX/T22&+DD*!<\)"A^>#_M`(%$H+.@`GOM`4%Y)"@ +M7?"QXS#@%Y"A^>"T`@1]"(!3D*'YX&0%<%!]#H!'D*!*X,14#S#@(1*'V%0' +M(.`"<;*0H?G@M`($?0F`*)"A^>!D!7`E?0^`')"?V>!@&W&RD*'YX+0"!'T* +M@`F0H?G@M`4'?1!_;Q)4QI"@3>`PX`,29CH23\XPX`3D__'=D*!.X,,3,.`. +MD`;-X%3O\)`&S^!4[_`BD)_;X/_D_0)B6GT2?_\25,9_`1$R$JO9`DABD*!E +MX##@!'&\@`)QY)"@F>`PX`(Q!B*0H$K@,.`V$H+5D*!=X/^T`0*`'9"@7>#_ +MM`("@!V0H%W@_[0#`P*`[Y"@7>#_M`0"@`N0H%W@_[0%`E%M(I"A^>_P?P,2 +M@KL2AZZ0H%TPX`5T!?"``^`$\)"@3N#_Q!-4!R#@">\3$Q-4'S#@.!*'KC#@ +M"I"@2^#_D*!;@"&0H?G@_+0!#9"@2^#^D*!:X,.>@`_LM`0/D*!,X/^0H%K@ +MPY^0H&'PL>,PX",2A]A4!R#@`J$>L450"N\EX"7@^^3]@`5[?WW_Y/\2H$^` +M;)"@2N#$5`\PX$D2O)?]?P028EH27]PPX#J0H%'@1`+P5/OPY)"@8/"0H%WP +MD*'YX/^T`0B0H%)T!O"`"N^T!`:0H%)T!_"0H#S@8`>0H%'@1`3PD*'YX+0! +M!'T&@`F0H?G@M`0'?0Q_;Q)4QI"@3C':,.`4L450"N]_`"7@)>#^@`1__WY_ +ML4Z0H$W@,.`#$F8Z(I"@8>#_PY0@(M,0KP'#P-"0HK?N\*/O\)`$'>!@'I`% +M(N"0HKOP?3825U&_`0*QEI"BN^#_?3<25,:``K&6$KS:?3@25,:0!!]T(/#0 +MT)*O(I">SN#_D*+7=`SPY/M]`1*&%I"BN>[PH^_PD**WX/RCX/W3$*\!P\#0 +MJP>0HQGM\.SYX/^N`W0J+A*@.W0K+O6"Y#3\]8/I\-#0DJ\BD*!*X,035`0H&_@5/=/\#':D`=E,.`$=!CP(N3P(O'6$S#@(>\3$Q-4'R#@ +M&!*'KC#@!'\#@`P2K98PX`1_#8`"?PD1,B+DD*'Y\)"?V>!P`L',$F>H8`+! +MS!*\ZA)=)Q)%5,`$P`7`!L`'D`5B$EU!>!`2"%K0`]`"T`'0`!)%5,`$P`7` +M!L`'HQ)=07@8$@A:T`/0`M`!T`#QQ1'NY)"?X/"0G\_@,.`6D)_3X+0"!>20 +MH?GP$FL=[W`$D*'Y\)"A^>!@&?&]Y)"BJ_"0G^$24`^0G]S@(.(#$F)6T0LB +MY/5CD)_9X'`"X:H29ZA@`N&J$ETH$D54P`3`!<`&P`>0!6(274%X$!((6M`# +MT`+0`=``$D54P`3`!<`&P`>C$EU!>!@2"%K0`]`"T`'0`/'%$KN#8"(D_F`# +M!'`>D)_@X!3PX/]@!I"?XN!@#N]P")"?W^"C\(``=6,!D)_/X##@$I"?T^"T +M`@/D]6,2:QWO<`+U8^5C8$7QO9"?XN!@!&0!7T2"*H2KD"0H(0217*0H(`2"&V0GIC@_V0"<"(Q&C#@`GX!D*",[O`Q&C#A +M`GX!D*"-[O"0_8#@D`+[\(`Z[V0!J!Y2A((JI"@2W0+\*-T"/"0GIC@_&0"!4OT[P(NQD`7`)$;,PX@)_`8`/D)Z8X&0#!4 +MOT_P(I#]@.!^`")4`<0S,U3`(C$_$J^V$DXV$K@>$F#/,=D2ITL"C_[D_?\2 +MN^WM@`\Q?L"#P((Q=H`"PS/8_$[0@M"#\#&) +MD)_-[_`BX/YT`:@'"")TO2[U@N0TG_6#(M,0KP'#P-!]$.T4^22],8'@8#1\ +M".P4D*,1\'2]*3&!X/MZ`)"C$7$I@`7#,\XSSMCY,=]@#^EU\`BD_Y"C$>`O +M!/^`!MS.W5>5(#U7W7P!.P23_W@]6%U\`3L$DXNQ%0#]6+I$KL%\W3E6%03^VQ2NP2 +M>DS@^WH`[50'<2J`!<,SSC/.V/DQWV`&J06)7H`L#8#4Z65A(.<=Z42`]5Z`"G21+%'8Y6'P]5ZO!(5@:JM=K5X2=EDB=)$O +M]8+D-)WU@R)U\`3O$DXN_A,35`/\$D_YX/M1U>!4?_UD+'`8[E0#_NS3GE`/ +M[&`,'.RQ7^\23BY4\T[P[=.;0`*M`U'5X%2`0@6,:N3[`G99X/]T`7X`J`<( +M(GT!KU&J!ZL%=?`0ZA)UCN#U751_]5]U\`3JL5G@D*'<\'7P!.H23_W@_W7P +M!.H23BX3$U0#]5[E7Q*[$^23_'0!D_WJD7/U@^SPH^WP=?`$ZA).+O[$5`.0 +MH=KP=)$J4=CE7_!TD2JQ0N5>\.5?TY]`!(]?CUWK<`*!9J\#CV#E73#G!85? +M715@Y6!P`H%FY5]D+'`FY5[3E`!`'^5>TY0"4!@57N5>5`,EX"7@_W7P!.H2 +M3BY4\T_P%6#E8&!TD*':N3[ +MK5T"=EG@)>`DD?6"Y#24(I"AVO'`D*'`2NR*C$D6? +ML3K_$K.ACV&CD7+U@^#U7:/@]5[D]6*0H>$2199U\`+E8A*Z]ZAA"(`%SL,3 +MSA/8^?^0H=X219:%8H*Q]5[N-5WU705BY6*T!<>0H=X21982;4[] +M?`"Q.JAA"(`%SL,3SA/8^?\2!P..7X]@T^5>E6#E795?0`SE7I5@_^5=E5_^ +M@`1^`'\`CEV/7I"AW)%R]8/E7?"CY5[P(I"AVN#^H^`B]8+D-)OU@R(3$Q-4 +M'_]U\`@B\'7P!.^0EA("18I4`R7@)>#^=?`$(I"B[Q)%EHZ"=8,``@:BD*+O +M$D6?Y/Z0_5#O\&0P8".C[?#NPYU0#+%J_W12L<7O\`Z`[^[#E`90&W12L<7D +M\`Z`\>[#E`=0#+%J_W11L<7O\`Z`[I#]6'0!\"(N]8+D-/WU@R*0H<\219^0 +M!"3@]5'D_Q)M6H^"L7(E4?[QU!)%BN[PCX*Q"0H=+P=?`$Y502 +M3B[]$Q-4`Y"AT_#M$D_2H_!U\`3E5!).+O_$5`.0H=7P=?`$Y5023_W@D*'6 +M\'7P!.54L5G@D*'7\'7P!.54$D^&_<035`&0H=CP[50?H^$`\;9T#?!U\`CE +M5)")`!)%BN"0H=+P=?`(Y520B0$218K@D*'3\'7P".54D(D"$D6*X)"AU/!U +M\`CE5)")`Q)%BN"0H=7P=?`(Y520B00218K@D*'6\'7P".54D(D%$D6*X)"A +MU_!U\`CE5)")!A)%BN"0H=CP=?`(Y502O/J0H=GQ!?'<(O![`7JA><\B\09_ +M]7X!$C3!OP$&D*'/X*/P\09_]GX!$C3!OP$(D*'/X)"AT?#Q!G_T?@$2-,&_ +M`0B0H<_@D*'2\/$&?_-^`1(TP;\!")"AS^"0H=/P\09_\GX!$C3!OP$(D*'/ +MX)"AU/"0H=#@_Z/@_:/@^Z/@D*'8\)"AU."0H=GPD*':=!+PD*'H=`7PD*'< +M\<.0H=C@D*'?\)"AV>"0H>#P>P%ZH7G:$EN;?P2`*Y"AW70)\)"AT2+N\*/O +M\*/M\*/K\"+DD_YT`9/_(G7P#N^0H+TB$EN;?P20HQ#O\'\"$D2WD)Z2X/^0 +MHQ#@_N].D)Z2\"+D>P%ZH'F6$2*T`AF0HNS@9`1@#']`$I?AD*+LX`3P(N20 +MHNSP(GT#?Q$26+'O(I"B"70(\)"B%W0!\)"B"^_P>P%ZHGD)`EN;D*'/=`KP +MD*'==`;P$@:)D*'1$D^.D*'2$D^DD*'3\!),-)"AU!),X9"AU1)M39"AUA*7 +M!0);FQ(&B?51$D^/]5023Z7U51),-/56$DSB]5<2;4[U6!)?QO59Y5$21:B8 +MO0"8Q0&8S0*8U0.8W028Y068[08``)D$=5("=5,I@$5U4@9U4RJ`/752`753 +M,8`U=5(!=5,R@"UU4@9U4S.`)7L`>@!Y5`%%D*".Y53PH^55\*/E5O"CY5?P +MH^58\")U4@%U4_][`'H`>52M4J]3`EBQD*),=`OPD*):=`?PD*).[_!@,I#] +M8^"0HD_PD/UAX)"B4/"0_63@D*)1\)#]9>"0HE+PD/UFX)"B4_"0_6?@D*)4 +M\(`-D*)/[?"CZ_#DHQ)@J)Y3`);F],0KP'#P-`2!HF0H<\23XZ0H=`2 +M3Z20H='P$DPTD*'2$DSAD*'3,?*0H'+@1$#PD*'0X+0,!N5N<`Z``!*7!GT' +M?S`26+&/49"AT."T#0[E460!8`5U;@&``^3U;N51M`$%=5(!@`/D]5*0H<_@ +M^ZU2Y/\Q%W\$$I?AT-"2KR+O\.2C\*/P(M%-D*"9X%3^3O[P[U0&_^Y4^4__ +M\!(&B?Y4"/WO5/=-_Y"@F1)K-=&H3I"@F1)/CO]4`_Z0H)K@5/Q._O#O5`3_ +M[E3[3_\23X[^5##][U3/3?^0H)I1V$X23Z20H)OP$DPTD*"<$DSAD*"=\)"@ +MFU'-[W@%SL,3SA/8^?^0H*/N\*/O\)"@G%'-[W@%SL,3SA/8^?^0H*7N\*/O +M\)"@G5'-D*"G[O"C[_"0H)G@,.`3D*">=`'PH_"C,?*0!X/@1"#P(N20H)X2 +M8'.C\)`'@^!4W_`BX/]^`'P!?4`"!P/P[E1`_N]4OR+3$*\!P\#0D*+$[O"C +M,?&0HL31N.!@),.0HL?@E.B0HL;@E`-`"Y`!P.!$@/!_`(`,D*+&$E?!_`##G`G\!D*+XX&]@-<.0HOK@E(B0HOG@E!-` +M")`!P.!$$/`BD*+Y$E?'O8$N0`1?@_I`!%M&O +M_N\D`?_D/OZ0HL_O\.[_D/T1\)"BS^#]D`*4\*/O\)"BS+',)`+_Y#/^D9R0 +MHL_@)!C_D*+,$D66L5J0`I9T`?#0T)*O(N3\[2PD`)'MY/`,[+08\W0`+9'M +M[_#N5#__=`$M]8+D-/OU@^_P=`(M]8+D-/OU@^!4\/!T`RWU@N0T^_6#X$2` +M\'0++?6"Y#3[]8/@1!#P(O6"Y#3[]8,BTQ"O`]@,I"?N.`$\."T"@*``G\`[V`%Y)"? +MN/"0G[G@_Y"?N."U!P1_`8`"?P#O<`>0GI+@1`3PT-"2KR*0HLCO\*,219^0 +MHO3@_@3PD``![A(&X70`+_GD-/OZ>P'``\`"P`&0HLD219:+0(I!B4)U0P+0 +M`=`"T`,2-2:0HLC@)`+YY#3[^GL!P`/``L`!HQ)%ENDD`OGD.HM`]4&)0I"B +MR;',]4/0`=`"T`,"-28219:0``X"!J)_%'X``CY0Y)"AO_"C\-$M[V0!8#S# +MD*'`X)2(D*&_X)030`^0`<'@1!#PD`''=/WP@!Z0H;\25]RQU=.0H<#@E#*0 +MH;_@E`!`Q)`!QN`PX[V0`<=T_O`BD`&:X%3`1`O119`!F.!4P'\`M$`"?P$B +M\'\*?@`"/E`2!HG_5`'^(M%-D*`]$FUN$D^.D*`^$D^DD*`_\-'!D*`]X%0! +M_P)DR=%-D*!!X%3^3O#O5`+1EY"?U.!4[T_PD*!!X%0!_P)@>S,S,U3X_R(2 +M1JOO1`'](O#N5"#^[U3?(N!\`"0`_^P^(N#^H^#U@HZ#(I"@/N`4D*!`\")U +M\`^D)"+Y=)\U\"*0G]+@9`)_`6`"?P`BD*!&X)`!,/"0H$/@D`$Y\)"@1."0 +M`3KP(I`!`>!$!/"0`9K@5,#119`!F>!$P/"0`9MT@/`BD`'$=!KP=)^C\'^0 +M$D:K[R#@]W0:!)`!Q/!TGZ/P(I"@/>##$R#@(I`"A^!P)I`!`.!D/W`>D`*6 +MX'`8D`*&X##A$9`"AN`@XPJ0H)/@(.`#?P$B?P`BTQ"O`#^D`5@X'H`)`#_ZC[^D*)Y=!?PD**'=`;PD*)[Z1)1@O'2 +MD*)\\*L'H^OP[J/PKP6C[_"N!.ZC\'L!>J)Y>1);F]#0DJ\BX'7P"Y"@VQ)% +MBN`BD*(![!*7Q)"B`>#\H^#]$H4ND*(!H^#__20-$H>#1(#P=`TM$H>#5.\2 +MAVS@1`(2AVS@5`/PD*(#X/^0H@&CX/XD*A$[D*($X/]T*RX1170L+O6"Y#3\ +M]8/@)`+P(O6"Y#3\]8/O\"+U@N0T_/6#[_`BD*'Z$I?#D`0=X&`CD`4BX)"A +M__!]`1)74>]D`7`%$8H2G]V0H?_@_WT"$E3&@`41BA*?W9`$'W0@\"*0GLW@ +M_Y"BUW0!\'L(_1*&%I"A_>[P_*/O\/V0H?K@_Z/@^Z/@D*($\")^`'\*?0![ +M`7J@>7(2"*J0H%YT`O`BY/^0H$K@,.`[HQ*"MY"@770!\.20H%+PD*!?\*/P +MD*!!D`7`1$FU@9`)@ +M!#$7@`8Q8H`",;GE8Y"?W3#G!1)0`X!XX%3]\"*0G]W@5/[P(I`&J>"0H>OP +MX/U4P'`$,;F`5>TPYC^0G]G@9`)P*)"?U.#_PQ,@X`F0G]W@1`'P@!P2;6=D +M`7`?D)_=X$0$\'\!$KI8@!$2;6!D`F`$,1>`!C%B@`(QN9"AZ^"0G]TPYP42 +M4`.`!>!4_?`BD)_4X$0$\"*0G]02B=HPX`60`5OD\)`&DG0"\)`!/'0$\.20 +MHJOPD*`XX,,35'^0HJQQ>!)0&Y"?U.!$"/`BD*!*X"#@()"?V>!D`7`8$HX+ +M$FUG8`=1DQ)F.H"KD)_!D`F`, +M$FUG8`=1M^]P`E&4(I`$&N#T8`-_`"*0!!O@5`=D!W\!8`)_`"(2:PU.<"7O +MPQ,PX`1Q_(`;4="0G]/@M`@&Y/U_#(`)D)_3X'`&_7\$$F):D*"NX/\PX!/# +M$U0'$G?5_G&9[F`#M`(#$E!((GT(Y/\"A7SPY/O]?UA^`2+D_Q)FC+\!#Y"? +MV>!@"3&Y5`=P`Q)H2B(248,24@\@X`S#$S#@$)"@L'0%\"(248,24@]$!/`B +MD)_/X/\PX`11Z&`5D)_9X'`$[S#@"Y"?W.!D`F`#$F46(I"?V>!@$9`&DN`P +MX011-(`&$F:P$FA*D*"PX+0!`Q)02"+3$*\!P\#0D)_.X+0!!'\$@`P2:QV_ +M`01_`8`"?P(2:>'0T)*O(M,0KP'#P-"Q&?^0G\[POP$)$D^/9`%@'X`;JU&J +M4JE3$D^/9`%@$)"?S^`@X`?D_Q)IX8`"U.<";OPQ,PX`1Q_(`W`@\"" +MD*'3X-""T(-U\`,218KO\*]7(J]4T6&0H<_O\"*Q[*M1JE(B=?`.[9"@LA)% +MBN`B_Q(&B50/_2)U\`[KD*"U`D6*=?`.D*"S`D6*?2#D_P)F)1-4!_]U\`XB +M\.3[_7]4?@$BD`%7Y/"0`3QT`B(29ZAP%I"?V>!@$/$8\)"?U.#Q0%0'<`,2 +M:$HB[U3[\)"?W>!4_?`B?@!_C7T`>P%ZH'FM`@BJ$F>H<`N0G]G@8`7Q&!)0 +M!B*0G^+@!/"0G]W@5._PD*`VX/^0G^+@TY\BD)_/X##@$*-T`?"0G\_@_\,3 +M,.`"1_@/X1F'`UD*!K +M\*,$\(`L$:M4`A&T8`B0H&MT`?"`!>20H&OP?S`1K50!$;1@!^20H&SP@`:0 +MH&QT`?"0H&7@1`'P?1%__Q)4QA)'ZY`'>."0H&KP<=D22&*0H@K@_7`"@!SM +MM`$&$:1$(/`BD*(*X/VT`@81I$1@\"+MM`,#$:3P(GX"_?R0H@L217[#`D5A +MD*!EX%0?(G\L?@D2-T[O(O_D_OW\D*(+$@AMD*(+$D5R[$U.3R+DD*'K\*/P +MHQ)=)Q)%5,`$P`7`!L`'D`5B$EU!>!`2"%K0`]`"T`'0`!)%5,`$P`7`!L`' +MHQ)=07@8$@A:T`/0`M`!T``21520H"@2"&V0H"P217*0H"@1G4`_D)_4X)"@ +M+##@#U%PD)_VX"0$+_^0H#"`!5%PD*`QX/[#[YZ0H>SPD*'LX/_#E"U0#G3W +M+U&TX`3PD)_OX`3PD)_OX/_3D*`SX)^0H#+@E`!``D$\44Y115`<45B0H>W@ +MTY]`"I"AZ^"0H>[P@`B0H>O@!/"`X%%.4450+%%8PY"@,^"?_Y"@,N"4`/Z0 +MH>W@TY_DGD`*D*'KX)"A[_"`")"AZ^`$\(#0D*'NX)"?]/"0H>_@D)_U43V4 +M"D`*[R3VD)_L\.2`">20G^Q1/70*GY"?Z_"0G_3@_Z/@PY^0G_+PD)_4X##@ +M!9"@,(`#D*`QX/^0G_+@+P3PD)_RX,.4"E`#=`KPD)_RX"0"\''`=`/P4;SD +M_U&-(O"0G_3@_\,BD*'KX/_#E"TBY)"A[?"0H>OP(G3W+_6"Y#2?]8/@_Y"A +M[>`O\)"@-.#_(A)%?I"@*!)%+_\BY/YT]RY1 +MM.3P#NZT+?3DD)_P\)"?[_"0G_/P[[0!!Z-T+?#DH_`B]8+D-)_U@R+3$*\! +MP\#0K`>0G]423]$PX`)A=9"?U.`PX!:0G_;@)`20G^[PD)_VX"0#D)_M\(`- +MD)_N=`+PD)_M%/`+"Y"?[>#ZD)_LX-.:4`Z0G^'K\)"?[N##G2R`$0S_)"?X7&!0`3O)"/PD)_QX/]^`)"?Y>[PH^_PD`58X&]P`>1@`G'B<=&` +M!Y"?UN!$`?#0T)*O(N#3G>QD@/AT@)@B<>R0H?GO\##@!7T!Y(`"Y/W_$F'& +MD*'YX##F$9`!+^`PYP3D\(`&D`$O=(#P<0H?K@_[4&`2+#D*'\X)1DD*'[X)0`0`V0`<#@1$#PD*'Z +MX/\BD*'[$E?<@,*0H$T27]\@X!Z0_6+@,.`7X)"B"3#A!70!\(`#=`+PD*() +MX/\2I\DBD*!EX%3^\%3A\)"@:N#_$H@RD*!KX/^CX/T22&*0G]G@<`J0H#W@ +M(.`#$F8X(A*+O)"@9>#_Q!-4!_[OPQ-4#\.>0`*`NI"@9>#_PQ-4#_[O5.'_ +M[@14#R7@3_`BD`()X/51$@:))5&0GLD23XXE49">RA)/I"51D)[+\!),-"51 +MD)[,$DSA)5&0GLT2;4TE49">SA)?Q251D)[/\"(2!HG_D)^\\+\!"!*7#>20 +MG[SP(A(&B50!_Y"A.^!4_D_P(A)/I?\PX!\2!HF0H#823XZ0H#?P[U3^_Z/@ +M5`%/\!),-)"@.?`BD*`V=`+PHW0/\*/@5`%$*/"C=`?P(A(&B9"?Y/`B$@:) +MD*`\\&`LD*!*X"#@)>3]?P028EH2C]83,.`7[Q,3$U0?(.`.L98PX`1_#8`" +M?PD2B#(BD*`[X!,35#\BD*!RX$0$\'T!?R,26+&/4>51M`,*Y/\26Q5_!!*7 +MX2*0H'+@1!#P?0%_&Q)8L9"AS^_P(M,0KP'#P-"0H'/@1`'P?0%_*+'*T-"2 +MKR*0H<\219^0HO+@<`C10)"B\G0!\!)M6A(&B?_DCU3U4_52]5&0H(0217+L +M5,'\P`3`!<`&P`>O5*Y3K5*L47@9$@A:T`/0`M`!T``21520H(`""&U_@'X( +M$C=.D*"$`@AM$@:)D*",$D^.D*"-\"(2!HE4`=&J5/U/\.##$_]4`9`!YO"C +MX%3^\.\PX"D26)AD!'`@D*"3X##@`H`9D/UBX+2M#J/@M#4)T:*0`>5TW_`B +M@`"`09`!Y^!4_O`B)>#_D*!OX"(2!HE4`27@T:I4^T_PX!,35#\PX`*`$I"@ +MD^`@X`+1TR*0!V7@5.?P(I`'9>!$&/`BD`'GX$0!\"(2!HE4`?^0H*O@5/Y/ +M\##@59``0.!4OT2@_7]`$D:-D`!!X$0$_7]!$D:-D`!JX%3[_7]J$D:-D`=N +M=%7PHW02\)`'>.!4\D0"\)`&S.!$`_"0!V7@5/7PD`4CX%1_\.3]?V821HTB +MTQ"O`#_D)\@X+4'!'\!@`)_`.]P.I"?(.#^\:W@_>YU\`BD)-'Y +M=)XU\/I[`:\%$FVGD)\@$G_@M`H"?P'O8`7DD)\@\!)]2Y">DN!$`O#0T)*O +M(G7P")">T`)%BN20G[CPH_"0GR#PH_`BTQ"O`_PH^WP?4025\60 +MHP+@D*,!M`$-X'7P$!)U9^!$!/"`"^!U\!`2=6?@5/OP$F8ZT-"2KR+D_8"^ +M?0&`NI"B]1)%G^3_D*+U$D66CX(2E7+^=/`O$2ON\`_OM!#H(O6"Y#0"]8,B +MD`#QX%3PQ%0/_R*0`3`28'*0`3@28'/]?U`21HWD_7]1$D:-Y/U_4A)&C>3] +M?U,"1HT1/A'7$9,1LN3U#?4.]0]U$("M#7]0$D:-K0Y_41)&C:T/?U(21HVM +M$']3`D:-=142Y/46=1<'=1@RD`$PY17PH^46\*/E%_"CY1CP(G4=!G4>`74? +M`W4@8D,@@$,?!)`!..4=\*/E'O"CY1_PH^4@\"*0`31T_Q)@GPX/\PX`>0`<_@5/[P +M[S#E(I`!S^!4W_"0`31T(/#D]:CUZ!$^D``#X%3[_7\#$D:-@/XBD`&4X$0! +M\)`!Q^3P(GT"D`'$=$CP=+&C\)"@K.#_[<.?4!#M)>`D@?CF,.0#?P`B#8#F +M=$@$D`'$\'2QH_!_`2*0`>1T(_"CY/`BD`$TX%45]1FCX%46]1JCX%47]1NC +MX%48]1R0`33E&?"CY1KPH^4;\*/E'/`BD`$\X%4=]2&CX%4>]2*CX%4?]2.C +MX%4@]220`3SE(?"CY2+PH^4C\*/E)/!3D=\BD)_/X##@!>2C\*/P(I"?V>!@ +M`Q)KTA)4#0)02-,0KP'#P-"0H)G@,.`AD*">X+0!#:/@M`$5=`+P$HGK@`V0 +MH)[@M`(&=`/P$HD&T-"2KR+OD`*&8`;@1`3P@`3@5/OPD)Z7[?`BY/5=$GQI +MX/ZT`@CMPY010"*`&.ZT`0CMPY0*0!:`#!)\:>!P"^W#E`-`"'5=`8`#Y/5= +MKUTBCU*-4XM4=?`$[Q).+L14`Y"AU/"0H=)@"70R\*-T+_"`!W01\*-T#_#E +M4].4+4`*=?`$Y5(23_V`(.53TY0>0`60H=*`%.53TY040`60H=.`"'7P!.52 +M$I59X/V%5&KD^Z]2`G99[V038`3OM`L%D*"0@!_O9!)@!.^T"@60H)&`$>]D +M$6`$[[0)!9"@DH`#D*"/X/5?KU\BC5V0H([@8$11Y8]>Y5[#E(!0)^5>E!M` +M`H`2[25>_^0S_M/OE!ON9("4@$`%=5T;@!KE7B5=]5V`$L/DE5[U7NW3E5Y` +M!N5=E5[U7:]=(M,0KP'#P-"0!#`2E\.0HI/@D`0S\)"BE."0!#3PD**5X)`$ +M-?"0HI;@D`0V\)"BE^"0!#?PT-"2KR+3[Y3H[I0#0`-_!2+3[Y3([I0`?P!` +M`G\"(N20H>3PD*'DX/_#E`-07G2>+_6"Y#2>]8/@_].4"E`"@`)_"JX'[R0" +MD*'C\)"AU70.\)"AUW0!\)$ID*'8\.3_[\.>4!:1*2^1..#]=-DO]8+D-*'U +M@^WP#X#E>P%ZH7G5$I?F?#E46`&_:]2$I8&(M,0KP'#P-"0HFSM +M\*/O\)"B:G0,\)"B>'0"\'L!>J)Y:A*7W-#0DJ\BTQ"O`0HPKP +MD*,*X/V0HPG@=?`0$G6.Y8(M$GI5X/OD_Q)-]Y"C"N`$\.##E!!`V'^/$D:K +M[S#@`K%7T-"2KR+D_7^-`D:-TQ"O`SPH^WPD*(8[_"CH^#]$CX" +MD*(C$@AMD*(;$D5R$@@ZD*(CT73`!,`%P`;`!Y"B&Q)%0```/^0HMS@_]%E?P&Q7M#0 +MDJ\BY/^Q7I"B&R+D_/W^D*(?$@AM?1A\`"(217X"14>/59`%(N"0H=CP$E=/ +M[V0!<$9U\`OE51*?U?QU\`OE5;'4=?`+Y54254D25^-4!R#@''7P"^55$G?8 +M_V`#OP(.=?`+Y5425Q_D^_T25'&M57\!$E31?P$BD*'8X/]]21)4QG\`(M,0 +MKP'#P-"0HQ/M\.3^_>^T`0WKM`(##8`&Z[0!`GT"KP;OQ%3P3?_0T)*O(N3^ +M[U3@Q!-4!_WO5!__[6`L%&`>)/U@#R3^<"KO)>#_PW3>G_Z`'^\EX/_#=/*? +M_H`4[R7@_\-T!I_^@`GO)>#_PW00G_ZO!B+3[V2`E!Q`!^]D@)240`-_`"+# +M[V2`E(!``W]D(N\D9/\B\9._`1:0H;_@5##_OR`'D*$Z=`'P(N20H3KP(GL! +M>J%YOW_[?@$"-,'3$*\!P\#0?P!^"!(W3I"APA((;7\`?@D2-TZ0H<82"&V0 +MH<(2N!%@&9"APA*X")"APA((;9"APA)'S'\`?@@2.$60H<82N!%@&9"AQA*X +M")"AQA((;9"AQA)'S'\`?@D2.$70T)*O(A)%<\2"*J0G\_@5/WPY!)@=*-T#/`B$53DD)_2\"(29Z*` +M\Q)GD8#N$F?F@.F0!2?@5+_P(GTN?V\25,9]`G\!$F'&$520G]-T`O`B?2`1 +M@'0"\"(29^J`\W__$E3&$D?KD)_2(A&%=`+P(A)G['TC$8!T`O`B?2%__Q)4 +MQI"?TG0#\"(29^J`[1)FN(#O?2)__Q)4QA)G[(#C$F?J`F_/$F:X?20";]&N +M!Q)K';\!$Y"?SQ)?WR#@"J\&?0$28EI_`2)_`"*0G]3@5/OPY)"?XO"C\)"? +MW?"0G]7@5/?P5+\29'E]$'\#`F8-[R3^8`L$<"20G]]T`O"`$^UP!I"@.>"` +M`NT4D)_?\)"?W^"C\)"?U>!$"/`BTQ"O`0H%S@<&&0G]O@ +MTY0`4%B0H#S@8$Z`4!*BM^]D`7!(D)_=X/]4`W`_D)_;X/[DPYY`->\@XC&0 +MG]W@(.0JD)_5X!,35#\PX!^0H#S@,D*+KX/]]*A)4QH`#$H>,D`0?="#P +MT-"2KR+D_N_#$_WO,.`"?H"0_1#M\*\&(I"@KN#_PQ/^[U3Q_^X$5``D>?6" +MY#1!]8,BCUCO=?`&I"1<^71`-?#Z>_\B=?`#$D6*X/YT`:@&""+E427@)`'U +M@N0TDO6#(G21)5'U@N0TG/6#(G0H+_6"Y#2A]8/@(G7P"J0D`?ETC37P^GL! +M(OITT"OU@G2A.O6#[O##(I"?U^#_Q%0/(G@($@A:J`2I!:H&JPP%ZH'D](I"@_N!$$/"0H?O@_R(218K@_*/@]8*,@R(2"%J0 +MHC$2"&U_`")T!2[U@N0T_/6#X")T(2_U@N0T_/6#X"+O$Q,35!_^[U0'_R)_ +MA'X($E:PD*(;(OSE5L,3_N57$_\BD`58=`+P(I"BX^#_D*+AX")T`9.55>23 +ME50B_E0@_>]4WTW_(A)%BN#[Y/T/(G\P?@D2-T[D(I`$'W0@\'\!(I"@/^"0 +M!7/P(E0!Q#,S,U2`(I`%(N"0H?OP(I"A_^#_=?`+(G7P#N54D*"R(I"!`1)% +MBN_P(N5H5'^0HIGP(O"0!.#@D)_5(I"@4.!4W_#D(G].$D:K[U1_(I"BP^!_ +M2'X)(I"@3>#$$U0'(O!_$'X``CY0D`8*X%3X\"*0!@3@5'_P(GT"?P("7[F0 +M!2+@5&__(I"?W^#_H^`BD)_?X)`%(A)&J^]$0/TB1,<` +` +end diff --git a/sys/dev/rtwn/rtl8723b/r23b.h b/sys/dev/rtwn/rtl8723b/r23b.h new file mode 100644 index 000000000000..f2d36913c1d8 --- /dev/null +++ b/sys/dev/rtwn/rtl8723b/r23b.h @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2026 Ahmad Khalifa + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#ifndef RTL8723B_H +#define RTL8723B_H + +/* + * Global definitions. + */ +#define R23B_PUBQ_NPAGES 231 +#define R23B_HPQ_NPAGES 12 +#define R23B_LPQ_NPAGES 2 +#define R23B_NPQ_NPAGES 2 + +#define R23B_TX_PAGE_COUNT 247 + +#define R23B_RX_DMA_BUFFER_SIZE 0x3f80 + +#define R23B_CALIB_THRESHOLD 7 + +/* + * Function declarations. + */ + +/* r23b_calib.c */ +void r23b_iq_calib(struct rtwn_softc *); +void r23b_lc_calib(struct rtwn_softc *); +void r23b_temp_measure(struct rtwn_softc *); + +/* r23b_fw.c */ +#ifndef RTWN_WITHOUT_UCODE +void r23b_fw_download_enable(struct rtwn_softc *, int); +void r23b_fw_reset(struct rtwn_softc *, int); +#endif + +/* r23b_init.c */ +void r23b_init_antsel(struct rtwn_softc *); +void r23b_init_bb_common(struct rtwn_softc *); +void r23b_init_rf(struct rtwn_softc *); +void r23b_post_init(struct rtwn_softc *); +int r23b_set_page_size(struct rtwn_softc *); + +/* r23b_led.c */ +void r23b_set_led(struct rtwn_softc *, int, int); + +/* r23b_rf.c */ +void r23b_rf_write(struct rtwn_softc *, int, uint8_t, uint32_t); + +/* r23b_rom.c */ +int r23b_efuse_preread(struct rtwn_softc *); +void r23b_parse_rom(struct rtwn_softc *, uint8_t *); + +/* r23b_rx.c */ +int8_t r23b_get_rssi_cck(struct rtwn_softc *, void *); + +#endif /* RTL8723B_H */ diff --git a/sys/dev/rtwn/rtl8723b/r23b_calib.c b/sys/dev/rtwn/rtl8723b/r23b_calib.c new file mode 100644 index 000000000000..6bac28e48ccc --- /dev/null +++ b/sys/dev/rtwn/rtl8723b/r23b_calib.c @@ -0,0 +1,620 @@ +/* + * Copyright (c) 2026 Ahmad Khalifa + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include +#include + +#include + +#include +#include + +#include + +#include + +#include +#include +#include +#include + +struct r23b_iqk_reg_vals { + uint32_t adaa[16]; + uint32_t iqk_bb[9]; + uint8_t txpause; + uint8_t bcn_ctrl[2]; + uint8_t gpio_muxcfg; +}; + +struct r23b_iqk_result { + int32_t iqk_before; + int32_t iqk_after; +}; *** 2485 LINES SKIPPED ***