From 6b33a02f032b79e353cd9df47f88a4620f7737a0 Mon Sep 17 00:00:00 2001 From: Jing Zhang Date: Mon, 23 May 2022 08:57:35 -0700 Subject: [PATCH 01/15] draft --- doc/dualtor/active_active_hld.md | 130 +++++++++++++++++++++++++ doc/dualtor/image/cluster_topology.png | Bin 0 -> 25023 bytes doc/dualtor/image/icmp_format.png | Bin 0 -> 2149 bytes doc/dualtor/image/icmp_payload.png | Bin 0 -> 2468 bytes 4 files changed, 130 insertions(+) create mode 100644 doc/dualtor/active_active_hld.md create mode 100644 doc/dualtor/image/cluster_topology.png create mode 100644 doc/dualtor/image/icmp_format.png create mode 100644 doc/dualtor/image/icmp_payload.png diff --git a/doc/dualtor/active_active_hld.md b/doc/dualtor/active_active_hld.md new file mode 100644 index 0000000000..a55959a8cd --- /dev/null +++ b/doc/dualtor/active_active_hld.md @@ -0,0 +1,130 @@ +# Active-Active Dual ToR + +Active-active dual ToR link manager is an evolution of active-standby dual ToR link manager. Both ToRs are expected to handle traffic in normal scenarios. For consistency, we will keep using the term "standby" to refer inactive links or ToRs. + +## Revision + +| Rev | Date | Author | Change Description | +|:---:|:--------:|:---------------:|--------------------| +| 0.1 | 05/23/22 | | Initial version | + +## Scope +This document provides the high level design of SONiC dual toR solution supporting active-active setup. + +## Server Network Interface Card (NIC) Infomation +Server NIC will be deployed on Gen 9 Cluster Design. Each server will have a NIC will have 2 x 100Gbps uplinks. These uplinks will be connected to 2 different ToRs with Direct Attach Copper (DAC) Cable. + +## Top of Rack (ToR) Information +To support active-active, the ToR must be running SONiC. The hardware is a 32 or 64 port x 100G device. Note with Gen 9 Cluster, the ToR and T1 port speed will be still on 100Gbps. + +Two DAC cables will be used to connect the Server NIC and 2 ToRs. No Y-cable is needed. + + +## Cluster Topology +There are a certain number of racks in a row, each rack will have 2 ToRs, and each row will have 8 Tier One (T1s) network devices. Each server will have a NIC connected to 2 ToRs with 100 Gbps DAC cables. + +In this design: +* Both upper ToR (labeled as UT0) and lower ToR (labeled as LT0) will advertise same VLAN to upstream T1s, each T1 will see 2 available next hops for the VLAN. +* Both UT0 and LT0 are expected to carry traffic in normal scenarios. +* The software stack on server host will see 200 Gbps NIC. + +![image info](./image/cluster_topology.png) + +### Bandwidth +Each ToR will have single port-channel to each T1. The port-channel will have 2 members of 100Gbps. Therefore, each T0 will have total of 8\*2\*100 Gbps = 1.6 Tbps to all T1s. + +T1s will have 8 uplinks to T2s. Therefore, total T1s uplink will be 64. Total uplink bandwidth is 6.4Tbps. + + +## SONiC ToR Controlled Solution +### IP Routing +Normal Scenario +Both T0s are up and functioning and both the server NIC connections are up and functioning. +* Control Plane + UT0 and LT0 will advertise same VLAN (IPv4 and IPv6) to upstream T1s. Each T1 will see there are 2 available next hops for the VLAN. T1s advertise to T2 as normal. +* Data Plane + * Traffic to the server + * Traffic lands on any of the T1 by ECMP from T2s. + * T1 forwards traffic to either of the T0s by ECMP. + * T0 sends the traffic to the server. + * Traffic from the server to outside the cluster + * NIC determines which link to use and sends all the packets on a flow using the same link. + * T0 sends the traffic to the T1 by ECMP. + * Traffic from the server to within the cluster + * NIC determines which link to use and sends all the packet on a flow using the same link. + * T0 sends the traffic to destination server if T0 has learn the MAC address of the destination server. + +Server Uplink Issue +Both T0s are up and functioning and some servers NIC are only connected to 1 ToR (due to cable issue, or the cable is taken out for maintenance). +* Control Plane +No change from the normal case. +* Data Plane + * Traffic to the server + * Traffic lands on any of the T1 by ECMP from T2s. + * T1 forwards traffic to either of the T0s by ECMP. + * If T0 does not have the downlink to the server, T0 will send the traffic to the peer T0 over VxLAN encap via T1s. + * T0 sends the traffic to the server. + * Traffic from the server to outside the cluster + * T0 will signal to NIC which side to use. + * NIC determines which link to use and sends all the packets on a flow using the same link. If server NIC has only 1 connection up, all traffic will be on this connection. + * T0 sends the traffic to the T1 by ECMP + * Traffic from the server to within the cluster + * T0 will signal to NIC which side to use. + * NIC determines which link to use and sends all the packets on a flow using the same link. If Server NIC has only 1 connection up, all traffic will be on this connection + * If T0 does not have the downlink to the server, T0 will send the traffic to the peer T0 over VxLAN encap via T1s. + * T0 sends the traffic to the server. + +ToR Failure +Only 1 T0s is up and functioning and both the server NIC connections are up and functioning. +* Control Plane +Only 1 T0 will advertise the VLAN (IPv4 and v6) to upstream T1s. +* Data Plane + * Traffic to the server + * Traffic lands on any of the T1 by ECMP from T2s. + * T1 forwards traffic to either of the T0s by ECMP. If one T0 is down, T1 forwards traffic to the healthy one. + * T0 sends the traffic to the server. + * Traffic from the server to outside the cluster + * T0 will signal to NIC which side to use. + * T0 sends the traffic to the T1 by ECMP. + * Traffic from the server to within the cluster + * T0 will signal to NIC which side to use. + * T0 sends the traffic to the server. + +Highlight on the difference with Active-Standby: +1. In active-standby dual ToR design, traffic from server is duplicate to both T0s, standby ToR needs to drop the packets. In active-active, NIC will determine which link to use if both are available. +1. In active-ative design, servers have up to 2 links for traffic, T1s and above devices will see more throughput from server. + +### Linkmgrd +Linkmgrd will provide the determination of a ToR / link's readiness for use. + +### Requirement +1. Introduce active-active mode into MUX state machine. +1. Probe to determine if link is healthy or not. +1. Signal NIC if ToR is switching active or standby. +1. Rescue when peer ToR failure occures. +1. Unblock traffic when cable control channel is unreachable. + +### Solution +* Link Prober + Linkmgrd will keep the link prober design from active-standby mode for monitoring link health status. Link prober will send ICMP packets and listen to ICMP response packets. ICMP packets will contain payload information about the ToR. ICMP replies will be duplicated to both ToRs from the server, hence a ToR can monitor the health status of its peer ToR as well. + + ICMP Probing Format + The source MAC will be ToR's SVI mac address. Ethernet destination will be the well-known MAC address. Source IP will be ToR's Loopback IP, destination IP will be SoC's IP address, which will be introduced as a field in minigraph. + ![image info](./image/icmp_format.png) + Linkmgrd also adapt TLV (Type-Length-Value) as the encoding schema in payload for additional information elements, including cookie, version, ToR GUID etc. + ![image info](./image/icmp_payload.png) + + ... ... + +* Link State + When link is down, linkmgrd will receive notification based on kernel message from netlink. This notification will be used to determine if ToR is healthy. + +* Cable Control through gRPC + In active-active design, we will use gRPC to do cable control and signal NIC if ToRs is up active. SoC will run a gRPC server. Linkmgrd will determine server side forwarding sate based on link prober status and link state. Then linkmgrd can invoke transceiver daemon to update NIC if ToRs are active through gRPC calls. + +* Default gateway to T1 + If default gateway to T1 is missing, dual ToR system can suffer from northbound packet loss, hence linkmgrd also monitors defaul route state. If default route is missing, linkmgrd will stop sending ICMP probing request and fake an unhealthy status. This functionality can be disabled as well, the details is included in [default_route](./default_route.md). + + +## Network Managerment +.. ... \ No newline at end of file diff --git a/doc/dualtor/image/cluster_topology.png b/doc/dualtor/image/cluster_topology.png new file mode 100644 index 0000000000000000000000000000000000000000..a5aabad161267d991f6e4db25c1b9186dbf8200e GIT binary patch literal 25023 zcmYhic|4Tw_XixMY*~jPW8asCp_sA7AiG4ivc!;zEW=o`m3?cFwQP};-B3-&RvKpP zT5OGd#*#IrNW^pZ`99C@_58uieVcim>pJIs-sgSJbxX0fGCs?Cj`hTe6K73L3~f%F zU<^KSf+3dqG;rsRnX5hU!VqL*j66|41o;kJobuMU)IV_om%(=E&IDYu1eiDlojAeq z@!t;v$^VrnaFZw4$T8T~|5k9QJKF1nG1|+^FX*;^u&W(2@D+D;Q$zi0VXhnPf4`i! z!)!$ypNQE>icsuaoUz?2y7oBxcCH6Fna|VYeW+ z2nsy7zt}JRX}}^TX?lE0eMo!joQAHYcxn6iw7TPL+wTiT`|#(Mx(a)@#n9FF#&7h-B71s{su-UDP^|)L(Q)gYVFV z?9IP#LiT=C$TswIqLplHpz9qOl|TEZnapyK&gs(j?R3Sd-xm^$=o7Zkdwj-@m-486q?hd;{#3S$izR6Pzf*CmQxRi< z%ides2jA>*@(Yam&LOB~UQP{l4C3_uwnGoo^(DtB-&=u*{jG*x*N~n3P*js*@Nwk! z#^lM_1Jhmq+0t#D-w(HM??#0M^l;9V33BTG{IdQ*bSR7*_WR`|r|8jSy69h}h%haGGq-FkAG_ibTfI>j7of=s(Ry(YsqcD5m2hx>58|nra64Z~-SMAHNw> z(&o=kN_8CT36#xC3!F;v5@|&%c?bSPwJ2cIa6hT=j2EJ$ZbxX(_J-)+Z{LvP{<=d8 zj#&3>I95kAJo<~X5(!t7)*7g^?D4g&q`OfUJBY^VVw(l7LzLewm^>~w`{dY1ns!{; zresF`^tiMC`%FW7WA2FjUQR@RphbQJ^Yl1pOs6iXXyV%9#Og#vFRtL4Djiq%-y+g*7KOkf&WF;F zG3 z74LTgtdi!XP*&4NLPK&hMt>YiB(??)pd9kkv;v(6x{Kj?9s)g|GUo3GI_IWYQp4Q4 z$~A*^@8j0hL{afpEgCaZg(S3g3%I8Vx@WQS7D1}7*e9ivFr8F zf0FfrmvG(^nuby>tLY_8! z5;o5lDlK0fc~tqSZHTJT9_h>9{}$=+Bti>jyIFU+MI+7Y#YmJIm>@>#!^tmC`1$rB z_=%NJ(h|-zAN338#0QSwe5g>SRRnjsrN4dhvy@YH++$5Av12#YGM}agExoxUKSJ-t zG|38X!eB3{0KRl=E)iVCPY8!NEPF&j92Pw=kdFe1fkmVM5fWR2g~K%;I)JspqKtb9 z_4hXGuusqp;hP)8&yP^fn-^2ON?VdfrvD6zO4ajz$#Qx ziwEnYbE)ry`n40I&fi>7@u@hj5zd~h$?pT8O1_LOMRf}d>JTc<(?{MrGBq%1pH z_$oo)AieeFW&8aA1n``C0d-o^H_caawSIcW6Crn5p^P%dG+-hf97RJ#LB1>kE70A^ zTE?GetU}{VfxVZ5NoaO3b%mtjb@kC80K3*9(&|3|zD2&AvfT_1w8#apr-3dr&qBHT z+R!Gn)xV?Jm1L~X2fGciy<(E)B%-Z7vR`P*x$Ct(t1Sd9_c6$411Je*P$Uw;ka z!(Zs+yo$<(lDhuEU9`}wOlzw@)KIElNiJHCV9Bp6xA;Km^b1|5^b5$)?_=JMx9iR%2p?RCRW<7e3LO3$N}}La+(o58QAoMd*l7ky}7p-)PUT! z)6Jv4ima`atFA)_@&kS>BnFCnT!pI-cP|Ahk*ZTGj4*?dMI==h-7%8tJ>9qbgcO>q z#Xw(R6|x1diM_d9{oH0{^S%lh7w&7b=$Jjho{P#w?g_HqMu_QKf0IfB=RhAzv-fF> zZNz$1@DT2~yiW%q@d~2Lf$N&0HB|U+ByFEU7!j;WRXE1$5d(j%aDD6}Q&9}rzW0)c@23q+vi zKAD~$6v%IUDbW&*)5O-GVKUgoFk)uYD=Rh8FWpW5qg^6*Utmg^*~;ecF#}U{t*LKM z!N1^47Bhak;MDf)!j-($XYmXyai5Kv1b{jCSVm!#4#>vJd5dAS2I>D1zWgg*0s&G; zl5xRaOc|_x_duAUd5v{?rtLv}snV$aof4(NI2+wY(ElMqqo3pi>4*997%x)UOJ;-1 zY5iC_A_%9()I_B%@w~u3ek>jm(#w zo-yxq;?7+4+>UM16yx+-ZrgA3=u-Z%)ZiU@w2;&s<=-K#_1RXhPlbccf<37024Ey_ zFk3O5iU!gNg~vJHSjov?O8=O4#Ww8dzR|PqNC&V1f9w1LP~B!;gZlpwpcg=ZT1Ppr z!G!Lxiz!dg{@jZ*?8o@6gTO{f|HJX+ z;*7tgFBm<{m0AHsFCWnAi3 zpU$EyLVfu1%H|WcY4xQ7#bBvozLB^8DxQ;y(w%6>Q$4l2;JqQnAcqWnm<_9oXs;Iz zasx8XM_7!k#XjG`ol~s-uhJzuPo+@PLaFdH@d;dr(P}wia9=<&_@4n*dlr{fNKL9` zGh|I!9l%&i+XHoT0A3d?^8_=7V}m|$f*I)(emDP^^GoKA{K|E{w=m(YWXtR#x-Y;> z+6fG?1c;9WD4Uvpcs7R(fZGxTn%kURx4w2~onp&q z_W8{05~({xEr5z9C8N%jt<^IRpn$4|NJJHk-$`3V11h#5s*W z1>i#5qT`zpmuPQG>!;FbV34vCdn|o{Ee6hMrrTANTk!h0A8t7eUCaJmFEum=!lgEFzq7HAOlE-^W{^8 zSEYlEJLo^o{Zj}A-IZA*2@C+7t(pWvU2dB;t8EL=^s+e#Tm-w`Hwr)*Ac>HqkmF9e zRM*ww!#Rj>SfbnAg&wZp4}8Z`4Lk0XY4qpt!Pj#E*m zzsrFN2vGHKReS_c?*h{c2$xE0G1KyV@rNj_h#MWuja&l$t7p-U3%LZq)om_j=2@_!BlePwa^2C2yyoIuyw ztmqy$*z5g$Fc8-i-NeQI@wEDBxFCOl0BczU=>=P$vvSKSxDlLkGI+{xV+NU zJ(S^|?d&T;+JUiKHkJRGEW8V7=0zp!FI>^B|3if9rjG3Kw9DSpk?uu6R`gNNJ>^5< zA(`RUHd6iYIFAZm!iEJ@vUub?snPU5xipm*S;RNGG1MJw^lPbZn6wKB2JJiowx(Po>Q1&vMSFsRN}`08knlS}p0J<;ce>!7iaN)C*dd&jkZi(%)%PZJgW)r|svjJv+V(p&-T0yj0cE1S# zKhgyx*x}R?tSAKXg@1Grejleq3WVi-8T!xpwwo`?uCGLca#4jm|FqI^jj{b{FW!?j zGPxslsVIT|aEOLv-v0}WYScU7KntJ-Jq3@hI;y8hPQ0r$xlvYwb)XmI&c@sYI$a=( z_9FL;`2z2V6z&{YJi3g;-vd0%Pq=3em3%XDF=PH#H|)*GJrp$L>NWgD(Q$6gMOR2) zyP##fpU}U~r0YSv{^VDn4Pu>E2P&f3iv1$Bk_5{gc{6C#2(u{8F~W!dazrV^Yn90S zpInL6Eb|e`A561+G2+sALl3X)1R!Kw277a>Q@(;ra}i)0MUu+Dx>hLkkK2Omui-WR z|Me_HJUAMA&%oE7d3u+r!a}o*G6cw9+2Ayob2?Qi@#a?R9l)s@=NU8WUqwf)(Q)nn zRopwT_z9x^7_1%JG@r2oW79ss8z_3`^num}4}WLER++Dj}Ep zMgR~ZwmA`M3JIGJMI8X418y9jFg(XH{Z={+s5@50Y}0Rh04K?dQsuy-Dv1;x(lw)B zwKi9$$0F1JNhZxNN2Z|CD_!^Kf0ro zWWfFt$@>UlFv_QXE~A@_D%$|y7N%70!m1KtV9C{~xgeB~GVe<^N< z+$)YTSb3`fy@(7QA3NO*_~mHLpY6{7h~jX3hTjG}`r{WqWf!^JIrR3~l({jWu$o43 zK(nO1-zMwJTNOVPv2jl#1=vqEbMYR5Vpv`NXD|HfFV~pD+ls+6KEAv_LS18-Zl8@H zMjgJLW1X(@7M7El%RC(K>`*#rXlT1|P>fO@h&~wJBV>Gk`m)1g3)%I0v2Tr|wSgkr zNpE7?addShZsU&*)izOo=I950Xw=tu7>&AhG}^KLD&I}}Hv9OXamiM@pWETC`KA27 z_()eyK?AW;U{JF-K(7yU!z&+^=11$g2`LXpAH+n@OwWRk7bk{q;ip3Kg`Q`M2W7M! zOglK+dn5S^w+S>p9Xma1JMW^+k z#J_czTbI=Kt9m{DOGAIjK0&d0JZj~S?^Xu|^f6C6X!vOT?{Tp0ZmfprfNt>2;H0qe zW}v8Sq+i>w&GlT-cQTZS?;DfmR)4RD3=W32X7G-3eZ>F$TP6{`^_TXjd$ygF5|OsQ zza7(ZQEPYF0sMwK8WUu>+i|7G?V6t?G4r~9iO$~HGfkIt_HS-48}CL>17Z2mFh2F9 zIO?d*==_UHUFD2kwVgjd^0(S$S`U4UrgzcOb7^?M*=36l~u(3%ka*ViCFrPY%#kB+CV zcl%;Y&^>PWTDrs2P7_VJ5sfW)_><@5&KB7K zsv;Hg%lbsY^Z7QZ=z%*Pjz{eUA0cnj&MbiXgu3%M%=SYm%q`u2E*FujesIKV#B{SS zxwo(-z2@#mKaZa>xK+FBrwWnW_wd_}Xy_=1hb)Qz%4+kt6e#hsXH)1oNb@5BQx-O1 zs%KX4_5G~r*Lx;iGMUN5A#**Cc=qgfGIEqKX?vz@!L}%(oyW2PN1ehcVtUKDzP`68 zgwc#$cZMH`k-9+%CWBWW);T%X+VeSxJWm@%*txt5*pTR1M`80~I!yxx!WezH9^V=i z-`aF@qE*_68lMk-&vG-?W5mwrLCT|NndwDhJozO5g9<;J6UoBe@kFB&@^X};a9J6Z z>`98Z$vXcXiJ;R#xouy&$J>oc-t>wS6eu}9ASZ%p?b>0>T}xR`r~bAm3M2il9T*y~ zsW(jvpE;^Ro=3Hd^AD&kJe2*>s$g1JP8NI));t*}L&lii`5_>3<>9;tTsCo`^-=lf zCH1r0`YT*o9+m@duU`8G8f=;f9CaAIIN|w?T%_+VLwfsb;RCkxO_k-4STwB=?{6z6 zQad{!FBRu!Guj zvXhU;2>zC`@C>RU>=UA;$kSK2ck;B;ynyNFwCL3~uW$?_AITdbu#CQ^S=Q=&?Y>9?fmYR%o@Z~~37iL+(8_TS~ z8ZeI9>MgGV+DsDh4J=aHY-iG>O^3T$tI}?z4$E_I-2>dyjeKVXn`;*D>0 zk9S2h?8r>~?EY>y)ScEH_2lKMh$US}_u1EMOi(d|`i|J>a<RDLPky8{l0YwD_VH)$6sU09(QlL`t`|e3xZ_<1ajrB>G`y2nP7XHegGNXA4*m? zN>w3oQ6d*Hds!_Oy5R>s>2=`Rnp$8Q7|VCZe>TTtGJ!5;h2nF=7Nfk1r8?`5c3MHy zX-^;m%E1rnvMUN&@t62pkzyZApsmRAxhuHrkC*>lJdszs-vyY)Wac^=bcK%yQ4|DM+ zJN!_b6fEWSa1I6mv(>R9Sz(l&D@n4xA!RL=03m1tQN#rAgbkG3qm_-KoX6mb_l4m#Bf1 zl%l|9GJ;#?+zV}D9jG)mnBam!$ht?;z&7rrzuS0#ZhODu!G6Y85XC{Rz9WFx=wZ(Uh0l`F_M9)VI)RXu_mS z%|xm`Sp-$&@nx#Z2Y&kCbugqBA?ORBz$3+nmzZ47%T=UO|h_6ss(J9xc-6 zxp!~QaYOB~iO(!pgQo={bUs)QnH>y@7jIbLLh$SIf7n@;`P1g1_;JC&qAe<_>lE#9 z;{2MptQ1?9fTpJjqm9PviAVZN>;5P?L?ott z5nmOHhp3LT{Gy28%?yo`VmS0YM@b$_T| zDu4th{kdM`&W`tG_vmsgct#f9UI{8&`sDYt;mGE~u6wJJbN0Z7UdH(ld$!8=! zj*79Fju)%(-{m*(pB?#mJ|y@tNhauYi+eGbe~g*j=QhrSxCM3oEcq`+Gw7m$OAEfF zp>vBmAtsJs!qCYv^3FGl+N8~{a544t^S7J_3)&cowN5$FYKTvHpQj7CV+FHziV?th_^_Q zAnC#$1Uc5IQiqJgipWQepA8K(0v^DK7=|?VD?-COk)XjqGsdjR1m|!_7l)m1Nd0|(^FNMS5KkYdL^-NM?Exr2;}!B+&cYxV<5&- z{}%Uc$(P!1YbY8~jr9|jc1!H3pziZa<>~td>y@8h)W=edZQ7zvhkMZDJuc;@O>kxV z`@8YkZghpKkOVtT;oEbLwWk|7#0;4gNW!`?wK+!Er%O7Qze<)Veu!Vbduy}{eydYbJ06c>C!+b$XKHlFfryJWn6=A{5wvyvDG>1%&9ed4X ztxe`#iby||adrvb#D7#m^%NzUy4F&9MNZPfzJxzo37E27?+P#4{a)CFn#EvtORh{g zn$$%-e0VXYxb=boPwLb)5?< zE8N%&l=rsrrsF`3rixv6K(#eFbJ7m4l-yhC!eT41IwTzw+tPjqALNLK%M^~&bP*58 zTp3lC+tj^(CvqV%Pfs>DZV9E1Tl?GoXOr?}L zs=Q2Lit+Q<4qH4^KZv~)wc7&sMG z|J-4czos=r8R5LyWr;bGs4#hivCV=PmeQa$e&OpnF=m-HwRp&L!+Ig9;Ik7%K%8Yi zx`7LBC^_!=JNb#UrF=9L+jPfhL@(I!=5I)!Xy-&KPO} z$I*7zjpo@)M}7a=ItsjZo^G>vqq^1-WOCGghdxROh}n62a`HOaB z0m?eRR!!?J6$udwaoKT}o$udo)8R{%_!tEf+8<-&IFAgq^7Z>Qy<4{*QKVkic=A8p zIgaT5O4Xa!3-0TDetYECvjQ_U_D*pM10X?9*@FC2}nEaudj=x*N!2r88 zNIjg;Bs-&ulAr7qX*%BE+QXH$D!^ZUHB6ZbFjeB@eLGd zg959DE7lX3fttYm__ybd+Y+5dfIANjXnnwe<@@dlo z4X+XEtuJ^bOK2BtG){|quhV#fh^z|);d5Bd-e0@FSV&`)Yz|Dz1Ch&wg#+9zGQC0hmj4w?XGY5 zV4V&#n7wXt^*4MrSP-tx`wY`CHl85Ctr+A5T*)3m;wGFJoI0` zhY8CH@sW@PiMXj{$Yi(k7pSvv6okzOzWks~Lb*#>B{=HzxMh7@7t@S_9-@poefoo8hvol?3VWnPnFW~M)P zF^OMm$PUbOs)`Yiu>u+heLs~_uHt%+-UBX0;Eql3e6?N(+1r0sGXN@}fikLIw_@C% zPP%EiO-J*zY)h7zv$I`jYPvJ6smZFOH`9S>RJ>12HOk$aQ#UT;d`RjV4RyfxA)x#^ z{FfAGT$bZ{ogJpr#fjJjvk%gj2nx|fLJMP~+tzJ@m!{$9@(d1WOV2_00Z?-F27HHh zmI*HJ6vFNi`zhn6dwLSoebhdi`i9*bE9uaBLVN#JSJ`-73QYxakh^fAj;c_UK%wNb z8ghI>#{Ql%%kO6VZZ+9kT^QJc^Qd9%w55vY$zpoW=8Ka@OzT281 zL-I576&2^@>4oEE1o|t#$8)(OSuC&3cJ&PNnk}_zbm4rsL zRIqT@saq1(L|gC=@tf{m=)H@$6sP?Vjvt|#BJvA@^n_&0d>ENU@h2p0@11%8dsNC5 z!I^vx*=6a`T&)Ew=fvN>+zBF8X;E$qAG*(cK6w~LmN4<-Hus-Z=z>Df$;m(E4V*7L zz$?e6Rn~XDZ{!#ll#g<)S3AtnJ!2&JUfipen>zv}<_cF=%PV*2-+!rj`Z;%-KVd4Vw?|S_*DU)ERVX z#vM*{a*Gv87L|&(2G{`|%GSSvRNNne8zbevu+ekP)It$Vw&$jr$4qGICt0RXs7$_` zse3*#icv{S6tInK(X13}yghkdaMxDMaiDAY5evU##l!N`pfk~DP`NFtUN}WCyHp`n zU#SOb$jpU`noha}OkymI6dwH6MR6j7T>=kArBF)vgohkzYbk@H%kA^k>yr_?;7*}0 z@IqvC<4ii@iUrN_4C(VcculfQh$|ko&fCeM$!9C5m6jKE`|0o$Bx;IpQgC@%`$>0t zSK*>Skom$rtonwYfL8~Vxw_k?tm5P}%QJ)7TryngwH1r<*t~=9g z&SCMqW~hj^knn~{|NgdC{gBn4*0sw)+vMK>_XGsqo(|rLTraLusIAc&Ymv{Q_(}zz zG?;JX{E7Yk)|fYwojVq@3t7z87F7^z-XT>>O%7KKA9Sn?rL0gJ{PKVi0uK-*#VyG4RkVwyqfq-hi7 zp;9c$smLi_KECV}?6QysQ!!Pbzd%rtDLybs)YVw8Mg)>-&jfDbxc++pJJ+pI?lO>&?(W7QJH69LILb6h7-XF3O<1FFwN*HPiUm`e%GIn+nhnM z^R{-daiC~LJ2L|<>MmBTbz|NRIoo5Hd3&6~GD^Qk5WFmOM`{nAKTuk*-*sJ8dV5ZQ z6ef<<&VEjQZRi(~Ir4~$e-;Miu~V^PO~?DETL;*uTo&XvP8BDaz+Swv`FgOT^km>o z))^7=EHBv0_cp!(iS2QLK%4f29e= zl@0TUm-`aPIv*$+{Jz4QROh-_ zHio5mL#v#u5zF|h;I*D;O2x4Mr@*0Pri2nJ?j1w%m(Lt}--x8}5Pv4T()6Sh(- zv}^61EP=kuO8nW*4G&NyqI|C`Av#mD z06)w0DR=iWNqr5kbcZ*fEE#-h;sYk!@Q{u0Sj)V&?%#KcX~(h&8PWCoF{$O|WSA#b z0{wIQpxJv9ky#w=_vd)s=mwY7sf1&nSIh0&dg50MSSufjiRY4+)ZFlwB6d>_nmG@@ zShf#ciO-5$D4JwCNzbI;F3qL2Ve5p{e;OhAi0L?7N%+Bmo`mc-v9dxHkOqM_II8Wh zLD$9$aer!<^}z3ySLu@b?ockNzP@t@$vLr73g1rmb z5pj?hKcQM*Hl~tNl&p``2y}cWe~4Ne!--wJS^ERa!0+8d+Yn-1i%kezaF)0lLK%u@ z*k4nvY*Tj;kxIDK9w>g2m_<^lg!;{HcR)JZIZ;*p{;UDxOe2JVfj2u~*V=={huRPE z4QB^}ux##R>K61EUd_OkU$V6{XM;(maH-@kS|(({Hm!m_Vwjukj83a+~s6*KxIqLE_|AOpqMA zjCZm{vA`2gvGejT9tzNpcAscqHQL_abUrNkn=UBm?C?~(&tsX-rzfkNZTysnMO%uN zi@H=EPMj7pB!B`3GSBP4UH#qM(!F%ix_?B{46TA6#`_tRX(4f*p9BaujLXWu%x$c( zvF-`@ZB^tUIM;T?*n*#AG814SHP|jAKe2D}ezT(w1p?c~j65N-r8)+w9YID4Zud4o|ny(_dDYqKt!00MWht@U=K^Oo{06rxuGJ zrDBL*MFz!Fee}7uFOTkT3hjCiNB@23T+ZR?Kd@LmST}+ZKmOkKcl!qCtz&BZ-$}LI z_2HRc8PkXOZgMF0th+(wM_>R@;!Jz6ci15&nsn|Y&-C&>=R8F0chvNb7sn4*9>gag z9_MeePiy)~;~v~U_;ZuIzyzX~&6EaN!St*5uVhY~zkFo*aDJ<(^lQrpADegId&D(l zGTS(f26wlQs+5FC|`DY|M2bWkecqVgy@=%_wRrIS?5Uj(LwCos=v6# z9k_K6b#}BAm9 z^aq{v*0(6xAxOkJtf8N)xT$REB-fU%uCi~IEHGF6ZJq}7cz*|3Pd06QslB#2X|7^jb^E$=aDWm`exWBq zLPuR>_u}`iHw^k(+aJfhhshb=3-Hdl!co9@O}b5X>q{>C4+8l#={s-|vd|O0VT11b zc|P+!?D0#NdM#o`3-o`h@TgTA3B}iM`Au@UC5u%?^%YHc1J%-L^b!8)-z^90(MIxZsF0LPvv6dh$g3()7ogqNH*O4*-O*c zlBemj!FCNy=k%HU-5h>IN2N&NHkx^Ro#)y@eucL*k+)wOTCu0ZTdjwz5ssWwJ{&ZX zci;TR6-Y7wzIc{qWYHc~C7uT|U0FT6`daRHkyh0}lGKY;fUV9S13D1l=l~(k+ zUTirtQ0(L(MfW*ri$ddODp?kTwdpp*ol^7Ll8B>LG=K44PH+s;MY#IM+)b9>THY{c z3IDX5zz06(Qs+}f{)MTJe`SD_Wv#t2o}X;pcyM2tRkeG9l7FsM`aAGhkJu6GM#5^C zH5a0!a@KHh+lw0&N%XKIaot%6)E4>Br0r~%Z22{ugIe*0UpKMsa^}R9ZKjfsTi-x` znkHax>)GJTIq-_MM=obbqjuioD?uU>PR=(gbg%FrV7H`#J-`IckhQ8cWLL!1-v@Gz zQPWG`4VL;m9*%@%IGst=M7&?K1xy#zgQ%X7GB&}x0{Ezzx_Y+dc30sx5y0qft%^#EOR+*guB7O$-y zQa10|gw5^N&1b(bHA%?NzZj?94CJzztwNJnxR+zcm)l-$jyXsFDxMU&gpS&6({RrH zJ5y6nJ|eL=+-f+QyEyq$c|Y;scV(slF##7u*?aL)WWaU*$fp@xidH%Js39yT)s&W& z*ukpZ(2v9X71Z#EKfHfnqc?}YSXvA3N;aiTu@IISy1 zR~hBPwh1n2!Y-GA9mf{b6Y50R5F_2*lk7VZi`TvASbA#m=O@2JWQhftBPrK`h}$JS zU^KyP-2LELX3XCfwboVckC$%$yB2%MRhYw+FkW^Ns0=4mcdtDrx4fp*GDE`SXtfG7 znY+wvRK_E#p}${@nvat>UHgd{+ju@s*7lVA#h|_-w(k10$Xf%l8~v=v?HI}eq$wsy3B*xIrSZR-AbF9xX>J6+_~Gg{++a;e3Y?1`?N8RT+r+7 z@$k0F%(chY_*p;i6MDqX1*a2M zOvHs;$XCG)l-z+&7^I3oP%6dND^UNnO?tk>xsZ7-V!;iJc9MjdQuujv+V*2NuX$Ra zi6m}52(4YR{37$*sa`)VUPU2^#P*`K#@Z}m2#hpcv(TX*EiDEL}IF;5YlChgem=jFr8F6 zqn7VJ+%Y1Cf-BR8 z2*@iO<}{*=cp2|iu?tnL7?3W%12D!@`V5K$UaGvX+n=(^U)3sd+9xAiJ>FU2%s(Yi zFD7U2F`bSsHJeHiN8Bd)p1Lphr`I*fGA1dLkD0qDU=08(#U2dEpIwCa1~p zD8O}0urvj-U%dMK3=$Zq7bhngc<@9I6f&B=JGx2+sbJvqH$C36=L&~}IW(pU`bW4SO7X|Sv z42a%9Ze<~q(AD#Crvi?Yc4=dp9+@^OaH}Ot)~n)Y$f5pjLSc_ET7`P`fxb8w-;|;W zeyLyy7LWOX^Jk0K^Lg=WlIv1IH!%J0}llm z6vF&fO%kGd5EC_R@Y$}4~X&Lwi)|ogIeRotJQm||Zy}hm@g+?k#l<~H6Q|b(&SN+8A zi@|DAeV)8kCH^alvS(Kc7mFJl&QNY5{^1Gf6)jQ#F`)7?QvH zrG^A-rd)h{uWJyoW`;pVn(qyZp`Rryj3;6T5(&l62m0)WWiBT zOTs*Xu%E+I+6YdnjlZcD;x zrx8Zj@B)%3`r^C8U!rsKYIXZGVPfoE|Kw{bZvV8m*OBk z5sKlG+%u4Ks)q~ig_^<3SU(7=p2uM($PSF%oBt)(MP$>T3nUtJ-#eFyDpFp1_AR`g z;6mO)%+fepOtD{Gm|ydW%oM`DwpTtZ$_lcSIx7yyM3d~{{x>>M@wWhv39zT0>iXC< zQ*k3{EG0Z(Z*EQkWdyip9{i*^Z$#pLrp<5!B#aph! zqX~m6%~=vK%x5#`ySaC49#|}`5OZQ^drJXT~w+es!7vQ&s z0Pp_hhBx%bx#UVitK?mi6{6g;u#4ZvwhQbQ@YUIPvn4KhR;30ipP^zc=q5pSJ}m1} zPcOahWZcc2Xi)XehK7g%gLh2!X5xe|SvsDy6Q?ch*0(?4Ebf*mO2a~ao=TqG)}%S+ z9%f~0C#G@xcj}9bFUnGDvsHSA;ccV>^5`R5X52Zz$9!XT&wb`MUKV`nezod~D@Cqs z#A!ZxesgkTe!9x5GVD;P7YtCG=@jbjB>@%v@G0VKaft zQcN^Ul9o1Hla+laEGXgKYl+U8LWv?=HbokE|^t~Z%fkfZstX(M5ZKEglxJ~5b0IwQXytVt8hvG%EH&Oh57PeT!BqO?CwBPQzJuA z%Dz3nj;pPNtYIh+(N|?EVbhvNR_=1g99$}?&ikPtc~;Yw6>Ff2pk<6dn-~eChPHus zdd`1AgE#*@jy-euX|0)e*zqXlCNo0hXkeWP~{94 zHy!1IK!PG4x9Si6xODqi)8y1+A~pvnNkg44!Yor~VgBt35x>p=rx*)5&Bqb4CC1wx z>}4jbFc~g&S_&Iv>FoaC?3GJa=hjn8rlvR=~8C#HV*CkITPn2-FIhY6?FYT2cF8I0@JjkM( z+-y1NP~v~s+qvJW!>_FmLI!8VTUl_Vp8A|{`|7LTt)@Z=sicB|tIl%vG52>qAg4-> zD^E_s{QsZst~0EuY+YLiFp5k-G7e1w2#SP3RE(5p4ALAB9nB~~W>i3w8X_1mb9r}QU`AMG z?r+q0PH8n`|AYm?bxPx4&*tkMq=oNa3~$q!skz5CNmM=Z1Mo6w56)<#TEffv5~kp0 zW5gdjx0{inFQqtFN@g-t#}EwXY-ay<-9Q(NKh?D`D^Zf({}C+O{_aRLY|XYH>QxWn zPZn8YyZWkUgf5*S`$u_GgLg70MjS=fHp|lj`{AHS4NeeV*Pk%;cq{E`@{IpP!D(!C zcp}L3&V>`n44n-uQouIx1>gGBuf3_CTh4>8kWe;BY=yCZ~;?$p|t zgV-v%u0S}|sOqoy%ks-3JRgC@dvT~!GeWeb$Gxq?mpygmm+pS{`JImIe&*hU&nsJ%bf$erGm=LK>h5<{nwn{*Gf5h)Ts$K# zTiv?i;>u$3S{wpeZgO<`)M(|&&Sc8)HLBWXtDdsz0@XU!Pm{bA*@0tm)S6N4FM*@C zVG?ewc~HRU>umDh8Wv{#wb@hH(M#5nv`p&DijL_cFAgenCS{%~Z||^D&4KBYR2R@K zr=HMvrx%@K3}T3!$h_|&ozsid+MlvfAfkuC1AzrfnMJ>(N9JkIUY$S3NBS?a7Zl!V z(?NJisn=HT<#*Yq3zD)V9|T&N?%D-PULUXDO|rzr1z=d{tO)_8L?A zpP5)ugt6>5AFT4{O}zFk=;}yz|8(n)dim)HQ_6bwaLdttiA^!JpWMy{_UXD5K8zCQ zp1ItSJy_x)_Vr0___~~yTV_M8#j27koy9F#+&u-XmZ1?H`2)ZCO71QslJBi z^3Pb>5vkt=KVuo9we-38ZdtZ_yj4@ly?u7RElM4%^vJm^d9}wYAUHeh-YIfi8GCkr z{(a!qKVP=MWZcD2IAy3><@T%ZG9@1QF$+8y-)}GQ-C5%poU0#tSixEBOP2ZZ{|OWS zL)dN|XzIxi4WD=;3_wxi1=o9Q&h8%lG-mU$`9v#wHj872XE%YlRL>dLP`P}g|J^K#ULBW20>T0Kz zGSI<(-C-E10-J)fNk3H_(*5P@6Sg%N5g@_+XUaHi(3wUIA#Rb zp<4^GMmB_It5AkCIKvvPtMG((B2{ekdVLc1>L2FVi)HPGIGw4g`%{h~Bh7gBWTZ;Y zGNnuv13>r3!9CG{_pw(&tEDG4DCr(aXi##+Vhu0s!Wu?`M@WV^B_ObX$Wj51big2^ zn`*xVfVF^K|JFDlAR2%(DrW!9qcZx=i}@Ziy&fTBN{tFGXS-Dk^z1Gd&zZK+<@7UE zUKgxUp$aqW=%QctlqVQTX6I7evt!lHoT*s@klUB;Umo+xWi~nsR{dh8FB=s8o)*52 zJy6unqhLw02rifoeNvV%XP6@JTzAg%?}1z3NPBK(5C+^_7y!jBUrL6yupoZQAQTJj zv`+m}6gqeqgx*~`2K+#R)5r@Te38*WBI2MiQBdOIK;i%s{{Y1usSXYHixN4woY^~E zi__gZ7fa+@!Hp|*HY0zzFej~yo{$bareGCyaXP?M#nbO#9@jHN+I&PdE5UedG?XpK zT&$wmW{|)okU!YnE1tSl$^$sH7J=?xIRkiXSu zS%dE){O_iGLd}nqkYX71V5vwIDVYAP8S^a8Aor!VinGS7LbESQ?S#Oh_=X)C5c0~^ z4uk->rKk%5alRk(Citf=KPjb5=HIdEUH46({*j^U^S^ZS-B6^V)zj$`xs8D!p1P6O zK_%*HN^QIiDpXNHnwE8-a-V^+0r7AI_645qR?WVyg(jADARvq=N^4iM%|1=$@qaX1 z)xNBxfp$jyH?v*d_Tf+8!OjvawMzuU)UrdRmMysKLTWA?&yg1SOg$4C7v*kmNYcNjR2N_*a4V#@Blc_Y8QYg$rE z4#Fqj*j-yrtWkP-W~6bo2mEBw!Vg0d|Im~ znEIJ|jFI)_@znIppE{i!<%&&x8h5PB*(1}YL@^Fvd(2*d+jJ2_IT6z3-I+Sw9oAJF zK0Li%`?~mi0@aQGbYqv8tXS$%yE0x!&8lyB=sapAL3~S?Ps5-mXEfS|OERdI?<-pu z8(OamdpqJ%Rhk|wiE*hCSq@tigpEykjb>&9a75tW#F^guaO=s&4urXdUVBZbfG5%6q<%2- zrhzJ2vCKqY1r25B(qeG7di#)o=o4(K>vI3fw+)+O6ahkXo%?;I>P$3-o70Q_>y*et_2k*Ze ziBDpJKh;jz`te0>LUBOvB4FF)vJNtjT34DHTygS%Ql_E5HuKNit4um)tLO{> zU2OF4KsX-n!_r`G>l4pkW8i5xWkQU(x^0~*YfE;VTS9S;20p1c<2jStG4sL0bSSDW zdCL{Ts{^r`{G66#?&_6YX|Rqk15mnVYVd8}*X|Z{Ht*)EA492Zy>W|cd#YD6F@5+s zK`^=s`+77uD8y-`j=-;ihmLPHk6{n&=VVdz`dc_NkA%-?SEEq0!n}a{s2I&9-RezP zzP4n71N8Kqvsi&mI;>-Ts#|l4#@o>o2lpFN?@gvq5$ zrpwRz!n)8qB@D zzP#0BzkVJs-aL_w?!V3X@<{lC^QBq1C{mQw9*h<*$=i)OL5b1C#b!VS{UQQ@1-wT} zE5Zpy+@ni;>zMJ*A>*MDk>0SMiV~4qr?XE}Lb}2b7=$-Gw4d!PyoN9BD84jStqkwdyp zhFh~gc38s4ME!km#>*JX{(K=lI4j+W7hKTpGTkhEkyN%>l|^VeVyoO%MTl#^oAo40 zwm{laI*6e$PTBF3dQ;Cpb3S)9cwy8e|3iH_W$K>roko3CDfqK{3sdHXu(z4@waWd} z@UcwJwGN6PU+8c57JCiK)UJ&*r!>2ZNQJD&CSox`pe&t#I|NI2x>Hk%hBLnkJJw4O ze83>ac)|!mr#6d!Pxuq#7Z+<|wnXR=uf`(0`T|GWqliP|a~C;MJc8Z~;Sr&j(fDcf zLlQT_IOu|5&@Pmp$uZGGJ0hJOzLwNmU!KC@1#YDk4~7fx3F$k-@^^ZBT(dqsoF$yu z>0OHxX?c6D?4%wHk(4WT>J)EOFsEDcw)58@9;F}^B8sC(M#QBYh}9v%g4<+H4-1Ww zmg9F{GBTV{!BaZDn84{N<8%3lsu z_j1tfaRvG$N;Dy-{q9mrq&Ik#K)zuL4i#UP(z=S37_B+pt==6cM@+#QKrfobaPQM_ zZ+=r>tmYCp!yX;B8hUez08Ol9;H{;&-2ia=vo0wtm@ZyY zr)Xo?UzK4Tc)>7m7s}U6+3y;Zvkt*Gyh=RZl@dP6_>yi&&- z917c~P2GTCwM+fbhw3k{VJQ;PoDyuHO#J=i%ak}3^bI`S4bJ>-qXjn6T;^{rL2x@X ztoeooebU*81aen6o&m)($?4ENkg`56Z0H`S{VoRWwy`EsWSxv)uD)_?B`=U%kHsey zt>5(-%{;fAuT2#`TqH}^QS9qOeT2mGgf{SFdv}PfvSy4qfoyzKVmNW-7^Zl-O;}($ z-euVvOr6pxu+ttdG7a$DbvEqL1|lS;eo%lsNNQj%@;<%DoBymO43DA}C)Mm1C)=ve z9DU-cJ#w)4(K5)|;*t+e>2@fehe!qEW6qGJ&w&tY6fVm&hVrKOxa32%TPlcqB>{j- zEB32z74!HY4GGphwbUk{GodD96=P2HIjI-? zmyO};k%49d;2#gmQe*y*>IO$EF3GF8Tq8~0>Dm4Pki?D3jps(#7~e}!(qM;HIUyB-QjR_ z-jcSvcb8{52(?RSAgAltr`{rr&D>C{STtzWPMcYs0`d(w@S2&tX^_xqAs?EAp-(Qx!o zuSpq#ksxJgmKs_SC&fk&*iYo7!ra#c?g~IEF#jAeAU=r7P8Q?pq-^!zD_eO)aU=AC zE&#b<e{}eB2hr2nsH3Ku_`7KLi)wpjRDerMgr9tk= z#PiZdT{Yg+mk1U3Q||m}ov{5?ZqbJRy3CuKlOP?lO$|L%ZlX^sd>E^#hAGV`hjt6I zl14oeG9jy&%+D#3mdz4wd+#k~#+{&gY`yMH6poDRK~ zsET@C61JxP4G)+D-t;sW#w#YznuT51TjJ{gxCU4=FZ zKkM_O`8Qs^YFULAjE{aeFB!Vq3KU!MK+bdKz1)P^xD=ITwoVUnD?VK=$hXrvn6^kZ z*2`5OB|VjBH~R`CUa@`Tes%Br8eyYWMA(qdVVd=uUx7P?>kq{coI`v<#*Amyuq6!# zTm7IJR1&|kE-37pr9cUHkN$1yr)>%MMtU#7GS&okq0QNTcY^VxK~$+;*i`9MsCPE= zrS0VL5J@X1t%E{Aos24LbPsb5kx(YO1}BdX@hrWYLOf6>y|XtDJ_D4BvD{1IKuO0z zS{U$ypRF=WSe0U%7ui898OR~L35gO_w|3k=?LPX}-%xZp^`85cKL_kJ;Gxr5!iLsK zFREQPu`=xQFl8cm?AS_CNS8_phMS!%(W2jgRdj`Vq7sl$eMfHw=Pk$8BmI4mc)ehA zFSvy&o6u64EJ=4J{Po<6M;X3c*y`6@vAa{dTDxQ%UEoY;$ZV&GR#;;3+%!Gn1<1&< zAEAJ-v9AyG?OH?h^x9h#d@{xD;k$nRJ(#zo&Q`R;pWXQz!_BFwsGV-yh--nEPqzi) z(u3+O(Ebjcbyhwb1Op6ni)($RF*u)nziT2C6%ds%JXlfOdx-Vu$7Svl)yfvaO68KC zm0*h|?){FPdtwMWlT&OogStII;MjDad_i_{x*39rj&^(BB53tEe3kLZ#y=OOq?Lc+ zNlNMXf^zTPbNxuGNBJSG-M4U`7N)}zN5c!Wf(_dt)R-Fq2qGn@BJ zjW-ok%I`ZwKN%F(EY)K`z_%nZlM2bgnek@@?`8LZO~N6muuO7l`_)!CR>y->v{c5Z zK#sb19zM0S4%ER;9nCz*p-2$Ce%<|?kI(q?K+?#s|AdY#n zJXX`5|DE)FLs~bRR&ASC!qu1L8v1Tz9l`=^43BvFn9zU?SDEA2d~ zpjRE=4tVjK9M3PskhL(KX22v?R;#+nlp6{+esJnvw`Pb&VLm=Y34OsO1 zT_obsuk$+J`kZ-!D7B$C>Dq2-vE|?{>v-(N1Ku&BOMqOWtJ8Yo zo}?{Tx+`d~MvUCBwWK?_DpH+gl-N^&fSEz3%#q-aD}aP@5CH$d-bOBUP*R-fmu;2P zdo@sQQaNYfBL@5#q0$4LhR%}ghGp(^nYM}^mJ>8MZ2*S4LHVS8XLeX-D0pR^1HTA5 zYnAP(fUKIG*g@r`9EBSc-K8!0+;w%CxuAbjE2Hw_rJ5z;`dZlsfQlWT9k2x*JmUHm z`EOAqF!7t|VbATmb!01=tFkyF2FfASvq~!I;Pm~g>)^GN-4&)YN5pc!^BPuR!W$9k z^7tH7VRh(m-p18JC+V{R5H52c?m?V+s3oh~G-ktu?P1@QGCRP{@=YXQ8!6vOr6owL zJl$XddHnQA&*X-{xBV`g9UR;LB#S0E|Ni0s!ZIqXFq`lrt~KQ$;*M$?@T3eIy%0JB z5Iq*YwEZ5jNHpFL9;19cr3ADdsiN0Mo$i|18S*p=!Jd>x544Er9fI(WjI0BCr^dV_ b82ZM7b1CsBPJ#blVS$6KGcFJN+qwS&Tqw?H literal 0 HcmV?d00001 diff --git a/doc/dualtor/image/icmp_format.png b/doc/dualtor/image/icmp_format.png new file mode 100644 index 0000000000000000000000000000000000000000..a82cf02af2f310c5e0c91ec23ec6035b699e9b78 GIT binary patch literal 2149 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 C9u%qo literal 0 HcmV?d00001 diff --git a/doc/dualtor/image/icmp_payload.png b/doc/dualtor/image/icmp_payload.png new file mode 100644 index 0000000000000000000000000000000000000000..bcd468ec38e6a0de5ae81549f80b6078c02a0439 GIT binary patch literal 2468 zcmZvec{tnY7RN)Q4XqlqN-b?EZKqWtCA9W+kZ5OW#8zqxM*N~;4VvCAN-eQ;h=im{ z(H6Nb9aJT$wM)`8(?JnsFhA5*LW5c+?M&z1Kkgszd){-NbDsBk&bxfR>F3;>Riu5Y` z&_E`J=@)C@&kFATCbBDIp8+Z=D9vOW^?gQ5OUvB+F#DAt0ZiTgd}Mu9w4?5aDnCI_SxZW+6@onjfH-MxmgPlYNs3UWKv7TO z2xnkl%;YxE@qi(6?MidM;uj;>@innt=YR7hiC8C&@W1&2Cjtn@kR}1L!rU8_xkk%i zdn8gE@~J0IeA6zT6n)@0M+oz>XNnr~?hXmfHSp7BKGp2BkeK6_mcfeB&3tJ>8F`h< zn_`_=>NM+^+1_CTf}A*xUHp^TZh*YOes#?xY?G>jaO3agsgcRKCdsn{mISJLex>h8 zF4!>cxVZHw=iG}aZ*S-RSHic2H@3JF7F1MwvXxufQef{<%z-1YFxaaAKL2=WcHuHX$!hcky~eX%F48Q{O0mP1;i#x5ox_q zGaBf_`>E4d+RbOvA$_O*NP3G*ZPwd&B`4&?5Y1z zGo@iYI{)FnaFMumx@TSnFAL2f%6JW<_#J7qeXrlmQ*e??YlyuZ#WkrPzh^X0a_vVS zZN)!6X5wJOG=7x#pI@5mHYjk?&U3Tf)qcJysjG$Ij$EcsI+~k>IC#&UuzIU*`RQyQ z;9phDc;8=}ZHb8hJU3t%g&Nio;>lCUMJOe3F5h%JAv+;EUPuq3>1*kXMsyXP0AN8n zBL1;RZ{UIkVT&i@iQ0}yc=iuZ zTkd7(N2{Y)dLPK$0)OP^YtHK=q(*Hk(jq-y^nj%(+@DD^YRLSy~-mr%qsn#742n@O40s$g!Q?yzQ-tjnabuC~S=kCOa zFhP2-*OKlUW8uhq*hxg_EejLtfW^av6Ly6Dy1eff{1djt+0o~eNpx67>4&zNc}2%2 zy{k#Pv-^4IJj|Tg`$VI}EcLRx7L^WYe_(7Ed4U*N`t$7?Ue zZDd*QQbg&pLtpM+{i@;0D~{Xe8Ias!*`P7~=u|&la)yzB($MNgsc``kiQRqv+2*C^ z8r=HBncnl&WcomY8{aW@sTm-QEva@rjD5X*-zE>un-T|`bdEFyX9vASMG~%~4KvlE z`*w}cVuhw}DRa;Fp{UA9t;F_|0l*A4K*XuVwR`RoYxyyyW2ft>Z5%W!eSYODNj?$m~U|FM+YHhrdxVF&gNt;13OdrPu}&BWrX2f|X#zQ2sOshz2f6W&MtW_87!-Uzk=^3JxGY9S0(Aq_I zP}=>Lc%a>l>1-aOKnJjHkBU~%r}b5l20wjFxL{TQM*<~|I&=3heC3wSH}EEp;*6Ez zC9R_UX>;vw5f$;m{-Uy8n<@}!G-elcs+56ZI z;p3m*b_jFQVbQ-w|DowB>NK3`6Fjkb=`E*hq24Rl0e0~Y4H?a+_cjTI-`KUUJXNXR z=Pcz4mUmjgY;XSBb+J}$XDBPN!{DQ8d`XzadH6~$6?z&odcDvHS!UTkdU7ItC`yUf z{^V9eTJ7_pBW4~w5t@=u01v?2_$!G=l!Nc`3!mo}HoBA7%w%<2xs-SdIi_O>RZ%3l zPc(nvt`N~YBI;CC0oYnPWj&C}(6ZBOzBiihho4J1+t6taR)o(~d_TZ2Xxo#?l{LTu z?sa$kLc?@J)Cu)RROSowW~pYg%!TAG2WXtlSsurFF94#bW&(pyM-bqP{3=4_FZ@z>gna zH`-G=EOZa6+A9CTz<*GP!2^3FAXA{wH2*>C-;6vX{S~c$Gc^wS6|MiD!AGg;`wt5g zr#ps*E{G=uI&r%MSo5Th)k$kh$3E)}zc=Ui}m2+sCK? literal 0 HcmV?d00001 From 3cdbebbfd98503f4e82cc38e80440c3e2c3292be Mon Sep 17 00:00:00 2001 From: Jing Zhang Date: Mon, 23 May 2022 10:20:35 -0700 Subject: [PATCH 02/15] update --- doc/dualtor/active_active_hld.md | 60 ++++++++++++++++++----- doc/dualtor/image/active_active.png | Bin 0 -> 48288 bytes doc/dualtor/image/active_active_peer.png | Bin 0 -> 28204 bytes doc/dualtor/image/active_active_self.png | Bin 0 -> 18423 bytes 4 files changed, 47 insertions(+), 13 deletions(-) create mode 100644 doc/dualtor/image/active_active.png create mode 100644 doc/dualtor/image/active_active_peer.png create mode 100644 doc/dualtor/image/active_active_self.png diff --git a/doc/dualtor/active_active_hld.md b/doc/dualtor/active_active_hld.md index a55959a8cd..c1c77c40d9 100644 --- a/doc/dualtor/active_active_hld.md +++ b/doc/dualtor/active_active_hld.md @@ -37,8 +37,7 @@ T1s will have 8 uplinks to T2s. Therefore, total T1s uplink will be 64. Total up ## SONiC ToR Controlled Solution -### IP Routing -Normal Scenario +### Normal Scenario Both T0s are up and functioning and both the server NIC connections are up and functioning. * Control Plane UT0 and LT0 will advertise same VLAN (IPv4 and IPv6) to upstream T1s. Each T1 will see there are 2 available next hops for the VLAN. T1s advertise to T2 as normal. @@ -54,7 +53,7 @@ Both T0s are up and functioning and both the server NIC connections are up and f * NIC determines which link to use and sends all the packet on a flow using the same link. * T0 sends the traffic to destination server if T0 has learn the MAC address of the destination server. -Server Uplink Issue +### Server Uplink Issue Both T0s are up and functioning and some servers NIC are only connected to 1 ToR (due to cable issue, or the cable is taken out for maintenance). * Control Plane No change from the normal case. @@ -74,7 +73,7 @@ No change from the normal case. * If T0 does not have the downlink to the server, T0 will send the traffic to the peer T0 over VxLAN encap via T1s. * T0 sends the traffic to the server. -ToR Failure +### ToR Failure Only 1 T0s is up and functioning and both the server NIC connections are up and functioning. * Control Plane Only 1 T0 will advertise the VLAN (IPv4 and v6) to upstream T1s. @@ -94,7 +93,7 @@ Highlight on the difference with Active-Standby: 1. In active-standby dual ToR design, traffic from server is duplicate to both T0s, standby ToR needs to drop the packets. In active-active, NIC will determine which link to use if both are available. 1. In active-ative design, servers have up to 2 links for traffic, T1s and above devices will see more throughput from server. -### Linkmgrd +## Linkmgrd Linkmgrd will provide the determination of a ToR / link's readiness for use. ### Requirement @@ -108,22 +107,57 @@ Linkmgrd will provide the determination of a ToR / link's readiness for use. * Link Prober Linkmgrd will keep the link prober design from active-standby mode for monitoring link health status. Link prober will send ICMP packets and listen to ICMP response packets. ICMP packets will contain payload information about the ToR. ICMP replies will be duplicated to both ToRs from the server, hence a ToR can monitor the health status of its peer ToR as well. - ICMP Probing Format + Link Prober will report 4 possible states: + * LinkProberUnknown: Serves as initial states. This state is also reachable in the case of no ICMP reply is received. + * LinkProberActive: It indicates that LinkMgr receives ICMP replies containing ID of the current ToR. + * LinkProberPeerUnknown: It indicates that LinkMgr did not receive ICMP replies containing ID of the peer ToR. Hence, there is a chance that peer ToR’s link is currently down. + * LinkProberPeerAcitve: It indicates that LinkMgr receives ICMP replies containing ID of the peer ToR, or in other words, peer ToR’s links appear to be active. + + __ICMP Probing Format__ The source MAC will be ToR's SVI mac address. Ethernet destination will be the well-known MAC address. Source IP will be ToR's Loopback IP, destination IP will be SoC's IP address, which will be introduced as a field in minigraph. - ![image info](./image/icmp_format.png) - Linkmgrd also adapt TLV (Type-Length-Value) as the encoding schema in payload for additional information elements, including cookie, version, ToR GUID etc. - ![image info](./image/icmp_payload.png) + ![icmp_format](./image/icmp_format.png) - ... ... + Linkmgrd also adapt TLV (Type-Length-Value) as the encoding schema in payload for additional information elements, including cookie, version, ToR GUID etc. + ![icmp_payload](./image/icmp_payload.png) * Link State - When link is down, linkmgrd will receive notification based on kernel message from netlink. This notification will be used to determine if ToR is healthy. + When link is down, linkmgrd will receive notification from SWSS based on kernel message from netlink. This notification will be used to determine if ToR is healthy. + +* Admin Forwarding State + ToRs will signal NIC if the link is active / standby, we will call this active / standby state as admin forwarding state. It's up to NIC to determine which link to use if both are active, but it should never choose to use a standby link. This logic provides ToR more control over traffic forwarding. * Cable Control through gRPC In active-active design, we will use gRPC to do cable control and signal NIC if ToRs is up active. SoC will run a gRPC server. Linkmgrd will determine server side forwarding sate based on link prober status and link state. Then linkmgrd can invoke transceiver daemon to update NIC if ToRs are active through gRPC calls. - + + Current defined gRPC services between SoC and ToRs related with linkmgrd cable controlling: + * DualToRActive + 1. Query forwarding state of ports for both peer and self ToR; + 1. Query server side link state of ports for both peer and self ToR; + 1. Set forwarding states of ports for both peer and self ToR; + * GracefulRestart + 1. Shutdown / restart notification from SoC to ToR. + +* Acitve-Active State Machine + Active-acitve state transition logics are simplified compared to active-standby. In active-standby, linkmgrd makes mux toggle decisions based on y-cable direction, while for active-active, two links are more independent. Linkmgrd will only make state transition decisions based on healthy indicators. + + To be more specific, if link prober indicates active AND link state appears to be up, linkmgrd should determine link's forwarding state as active, otherwise, it should be standby. + + ![active_active_self](./image/active_active_self.png) + + Linkmgrd also provides rescue mechanism when peer can't switch to standby for some , i.e. link failures. If link prober doesn't receive peer's heartbeat response AND self ToR is in healthy active state, linkmgrd should determine peer link to be standby. + ![active_active_peer](./image/active_active_peer.png) + +### Incremental Featrues * Default gateway to T1 - If default gateway to T1 is missing, dual ToR system can suffer from northbound packet loss, hence linkmgrd also monitors defaul route state. If default route is missing, linkmgrd will stop sending ICMP probing request and fake an unhealthy status. This functionality can be disabled as well, the details is included in [default_route](./default_route.md). + If default gateway to T1 is missing, dual ToR system can suffer from northbound packet loss, hence linkmgrd also monitors defaul route state. If default route is missing, linkmgrd will stop sending ICMP probing request and fake an unhealthy status. This functionality can be disabled as well, the details is included in [default_route](https://github.com/Azure/sonic-linkmgrd/blob/master/doc/default_route.md). + +* Link Prober Packet Loss Statics + +* Supoort for Detachment + + + +### Command Line ## Network Managerment diff --git a/doc/dualtor/image/active_active.png b/doc/dualtor/image/active_active.png new file mode 100644 index 0000000000000000000000000000000000000000..f05c136a45b167d3201dadaa56c0413946f0ca09 GIT binary patch literal 48288 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 literal 0 HcmV?d00001 diff --git a/doc/dualtor/image/active_active_self.png b/doc/dualtor/image/active_active_self.png new file mode 100644 index 0000000000000000000000000000000000000000..0266c40675b8b45cdd7a54e6b334f5dfa95ce5a5 GIT binary patch literal 18423 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 z Date: Mon, 23 May 2022 11:33:01 -0700 Subject: [PATCH 03/15] update server requirements --- doc/dualtor/active_active_hld.md | 38 +++++++++++++++++------------ doc/dualtor/image/gRPC_failure.png | Bin 0 -> 38618 bytes 2 files changed, 22 insertions(+), 16 deletions(-) create mode 100644 doc/dualtor/image/gRPC_failure.png diff --git a/doc/dualtor/active_active_hld.md b/doc/dualtor/active_active_hld.md index c1c77c40d9..257aa36e15 100644 --- a/doc/dualtor/active_active_hld.md +++ b/doc/dualtor/active_active_hld.md @@ -6,18 +6,22 @@ Active-active dual ToR link manager is an evolution of active-standby dual ToR l | Rev | Date | Author | Change Description | |:---:|:--------:|:---------------:|--------------------| -| 0.1 | 05/23/22 | | Initial version | +| 0.1 | 05/23/22 | Jing Zhang | Initial version | ## Scope -This document provides the high level design of SONiC dual toR solution supporting active-active setup. +This document provides the high level design of SONiC dual toR solution, supporting active-active setup. -## Server Network Interface Card (NIC) Infomation -Server NIC will be deployed on Gen 9 Cluster Design. Each server will have a NIC will have 2 x 100Gbps uplinks. These uplinks will be connected to 2 different ToRs with Direct Attach Copper (DAC) Cable. +## Complexity on Server side +In general, the intoduction of active-active will simplify state transition logics for SONiC dual ToRs. The complexity is transferred to server side. Each server will have a Network Interface Card (NIC) connected to 2 x 100Gbps uplinks. These uplinks will be connected to 2 different ToRs with Direct Attach Copper (DAC) Cable. No Y-cable is needed. -## Top of Rack (ToR) Information -To support active-active, the ToR must be running SONiC. The hardware is a 32 or 64 port x 100G device. Note with Gen 9 Cluster, the ToR and T1 port speed will be still on 100Gbps. - -Two DAC cables will be used to connect the Server NIC and 2 ToRs. No Y-cable is needed. +For active-active setup, the requirements for server side are: +1. Server NIC is responsible to deliver traffic up the stack once receiving sourthbound (tier 0 device to server) traffic. +1. Server NIC is responsible to dispense northbound (server to tier 0) traffic between two active links. +1. Server should provide support for ToR to control traffic forwarding if needed, and follow this control when dispensing traffic. +1. Server should replicate there northbound traffic to both ToRs: + * Specified ICMP replies (for probing link health status) + * ARP + * Neighbor advertisements ## Cluster Topology @@ -127,7 +131,7 @@ Linkmgrd will provide the determination of a ToR / link's readiness for use. ToRs will signal NIC if the link is active / standby, we will call this active / standby state as admin forwarding state. It's up to NIC to determine which link to use if both are active, but it should never choose to use a standby link. This logic provides ToR more control over traffic forwarding. * Cable Control through gRPC - In active-active design, we will use gRPC to do cable control and signal NIC if ToRs is up active. SoC will run a gRPC server. Linkmgrd will determine server side forwarding sate based on link prober status and link state. Then linkmgrd can invoke transceiver daemon to update NIC if ToRs are active through gRPC calls. + In active-active design, we will use gRPC to do cable control and signal NIC if ToRs is up active. SoC will run a gRPC server. Linkmgrd will determine server side forwarding state based on link prober status and link state. Then linkmgrd can invoke transceiver daemon to update NIC if ToRs are active through gRPC calls. Current defined gRPC services between SoC and ToRs related with linkmgrd cable controlling: * DualToRActive @@ -145,20 +149,22 @@ Linkmgrd will provide the determination of a ToR / link's readiness for use. ![active_active_self](./image/active_active_self.png) Linkmgrd also provides rescue mechanism when peer can't switch to standby for some , i.e. link failures. If link prober doesn't receive peer's heartbeat response AND self ToR is in healthy active state, linkmgrd should determine peer link to be standby. - ![active_active_peer](./image/active_active_peer.png) + ![active_active_peer](./image/active_active_peer.png) + + When control channel is unreachable, ToR won't block the traffic forwarding, but it will periodically check gRPC server's healthiness. It will make sure server side's admin forwarding state aligns with linkmgrd's decision. + ![grpc_failure](./image/gRPC_failure.png) + ### Incremental Featrues * Default gateway to T1 If default gateway to T1 is missing, dual ToR system can suffer from northbound packet loss, hence linkmgrd also monitors defaul route state. If default route is missing, linkmgrd will stop sending ICMP probing request and fake an unhealthy status. This functionality can be disabled as well, the details is included in [default_route](https://github.com/Azure/sonic-linkmgrd/blob/master/doc/default_route.md). * Link Prober Packet Loss Statics - + Link prober will by default send heartbeat packet every 100 ms, the packet loss statics can be a good system healthiness measurement. An incremental feature is to collect the packet loss counts, start time and end time. The collected data is stored and updated in state db. User can check and reset through CLI. + * Supoort for Detachment - - + User can config linkmgrd to a certain mode, so it won't switch to active / standby based on health indicators. User can also config linkmgrd to a mode, so it won't modify peer's forwarding state. This support will be useful for maintenance, upgrade and testing scenarios. ### Command Line +TBD - -## Network Managerment -.. ... \ No newline at end of file diff --git a/doc/dualtor/image/gRPC_failure.png b/doc/dualtor/image/gRPC_failure.png new file mode 100644 index 0000000000000000000000000000000000000000..6da949cd60e64cb27aa7cd2ae90016cdd2c76fdc GIT binary patch literal 38618 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 EA1 Date: Mon, 23 May 2022 12:04:19 -0700 Subject: [PATCH 04/15] update per offline discussion --- doc/dualtor/active_active_hld.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/dualtor/active_active_hld.md b/doc/dualtor/active_active_hld.md index 257aa36e15..76041d6c52 100644 --- a/doc/dualtor/active_active_hld.md +++ b/doc/dualtor/active_active_hld.md @@ -11,14 +11,14 @@ Active-active dual ToR link manager is an evolution of active-standby dual ToR l ## Scope This document provides the high level design of SONiC dual toR solution, supporting active-active setup. -## Complexity on Server side -In general, the intoduction of active-active will simplify state transition logics for SONiC dual ToRs. The complexity is transferred to server side. Each server will have a Network Interface Card (NIC) connected to 2 x 100Gbps uplinks. These uplinks will be connected to 2 different ToRs with Direct Attach Copper (DAC) Cable. No Y-cable is needed. +## Server requirements +In general, the intoduction of active-active will simplify state transition logics for SONiC dual ToRs. The complexity is transferred from smart y-cable to server side. Each server will have a Network Interface Card (NIC) connected to 2 x 100Gbps uplinks. These uplinks will be connected to 2 different ToRs with Direct Attach Copper (DAC) Cable. No Y-cable is needed. For active-active setup, the requirements for server side are: 1. Server NIC is responsible to deliver traffic up the stack once receiving sourthbound (tier 0 device to server) traffic. -1. Server NIC is responsible to dispense northbound (server to tier 0) traffic between two active links. -1. Server should provide support for ToR to control traffic forwarding if needed, and follow this control when dispensing traffic. -1. Server should replicate there northbound traffic to both ToRs: +1. Server NIC is responsible to dispense northbound (server to tier 0) traffic between two active links: at IO stream (5 tuples) level. each stream will be dispatched to one of the 2 up links until link state changes. +1. Server should provide support for ToR to control traffic forwarding, and follow this control when dispensing traffic. +1. Server should replicate the northbound traffic to both ToRs: * Specified ICMP replies (for probing link health status) * ARP * Neighbor advertisements From 4e8df73ca067379ec346722b78e2be9949387ac0 Mon Sep 17 00:00:00 2001 From: Jing Zhang Date: Mon, 23 May 2022 12:16:45 -0700 Subject: [PATCH 05/15] update unclear statement --- doc/dualtor/active_active_hld.md | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/doc/dualtor/active_active_hld.md b/doc/dualtor/active_active_hld.md index 76041d6c52..e775519d35 100644 --- a/doc/dualtor/active_active_hld.md +++ b/doc/dualtor/active_active_hld.md @@ -12,11 +12,12 @@ Active-active dual ToR link manager is an evolution of active-standby dual ToR l This document provides the high level design of SONiC dual toR solution, supporting active-active setup. ## Server requirements -In general, the intoduction of active-active will simplify state transition logics for SONiC dual ToRs. The complexity is transferred from smart y-cable to server side. Each server will have a Network Interface Card (NIC) connected to 2 x 100Gbps uplinks. These uplinks will be connected to 2 different ToRs with Direct Attach Copper (DAC) Cable. No Y-cable is needed. +For active-active setup, some complexity is transferred from smart y-cable to server side. Each server will have a Network Interface Card (NIC) connected to 2 x 100Gbps uplinks. These uplinks will be connected to 2 different ToRs with Direct Attach Copper (DAC) Cable. No Y-cable is needed any more. For active-active setup, the requirements for server side are: 1. Server NIC is responsible to deliver traffic up the stack once receiving sourthbound (tier 0 device to server) traffic. -1. Server NIC is responsible to dispense northbound (server to tier 0) traffic between two active links: at IO stream (5 tuples) level. each stream will be dispatched to one of the 2 up links until link state changes. +1. Server NIC is responsible to dispense northbound (server to tier 0) traffic between two active links: at IO stream (5 tuples) level. Each stream will be dispatched to one of the 2 uplinks until link state changes. +1. Each ToR has a well-known IP. For northbound traffic, server should dispatch IO towards these IPs to the corresponding uplinks. 1. Server should provide support for ToR to control traffic forwarding, and follow this control when dispensing traffic. 1. Server should replicate the northbound traffic to both ToRs: * Specified ICMP replies (for probing link health status) @@ -44,18 +45,19 @@ T1s will have 8 uplinks to T2s. Therefore, total T1s uplink will be 64. Total up ### Normal Scenario Both T0s are up and functioning and both the server NIC connections are up and functioning. * Control Plane - UT0 and LT0 will advertise same VLAN (IPv4 and IPv6) to upstream T1s. Each T1 will see there are 2 available next hops for the VLAN. T1s advertise to T2 as normal. + UT0 and LT0 will advertise same VLAN (IPv4 and IPv6) to upstream T1s. Each T1 will see there are 2 available next hops for the VLAN. T1s advertise to T2 as normal. + * Data Plane * Traffic to the server * Traffic lands on any of the T1 by ECMP from T2s. * T1 forwards traffic to either of the T0s by ECMP. - * T0 sends the traffic to the server. + * T0 sends the traffic to the server and NIC delivers traffic up the stack. * Traffic from the server to outside the cluster * NIC determines which link to use and sends all the packets on a flow using the same link. * T0 sends the traffic to the T1 by ECMP. * Traffic from the server to within the cluster * NIC determines which link to use and sends all the packet on a flow using the same link. - * T0 sends the traffic to destination server if T0 has learn the MAC address of the destination server. + * T0 sends the traffic to destination server if T0 has learnt the MAC address of the destination server. ### Server Uplink Issue Both T0s are up and functioning and some servers NIC are only connected to 1 ToR (due to cable issue, or the cable is taken out for maintenance). @@ -65,8 +67,8 @@ No change from the normal case. * Traffic to the server * Traffic lands on any of the T1 by ECMP from T2s. * T1 forwards traffic to either of the T0s by ECMP. - * If T0 does not have the downlink to the server, T0 will send the traffic to the peer T0 over VxLAN encap via T1s. - * T0 sends the traffic to the server. + * **If T0 does not have the downlink to the server, T0 will send the traffic to the peer T0 over VxLAN encap via T1s.** + * T0 sends the traffic to the server and NIC delivers traffic up the stack. * Traffic from the server to outside the cluster * T0 will signal to NIC which side to use. * NIC determines which link to use and sends all the packets on a flow using the same link. If server NIC has only 1 connection up, all traffic will be on this connection. @@ -78,7 +80,7 @@ No change from the normal case. * T0 sends the traffic to the server. ### ToR Failure -Only 1 T0s is up and functioning and both the server NIC connections are up and functioning. +Only 1 T0s is up and functioning. * Control Plane Only 1 T0 will advertise the VLAN (IPv4 and v6) to upstream T1s. * Data Plane From f6dbda7b152a898af06fcb34887ad76ffe257f74 Mon Sep 17 00:00:00 2001 From: Jing Zhang Date: Mon, 23 May 2022 17:29:05 -0700 Subject: [PATCH 06/15] add decision table --- doc/dualtor/active_active_hld.md | 35 +++++++++++++++------------ doc/dualtor/image/decision_table.png | Bin 0 -> 19908 bytes 2 files changed, 19 insertions(+), 16 deletions(-) create mode 100644 doc/dualtor/image/decision_table.png diff --git a/doc/dualtor/active_active_hld.md b/doc/dualtor/active_active_hld.md index e775519d35..856ea91d9a 100644 --- a/doc/dualtor/active_active_hld.md +++ b/doc/dualtor/active_active_hld.md @@ -15,13 +15,14 @@ This document provides the high level design of SONiC dual toR solution, support For active-active setup, some complexity is transferred from smart y-cable to server side. Each server will have a Network Interface Card (NIC) connected to 2 x 100Gbps uplinks. These uplinks will be connected to 2 different ToRs with Direct Attach Copper (DAC) Cable. No Y-cable is needed any more. For active-active setup, the requirements for server side are: -1. Server NIC is responsible to deliver traffic up the stack once receiving sourthbound (tier 0 device to server) traffic. +1. Server NIC is responsible to deliver southbound (tier 0 device to server) traffic from either uplinks to applications running on server host. 1. Server NIC is responsible to dispense northbound (server to tier 0) traffic between two active links: at IO stream (5 tuples) level. Each stream will be dispatched to one of the 2 uplinks until link state changes. -1. Each ToR has a well-known IP. For northbound traffic, server should dispatch IO towards these IPs to the corresponding uplinks. 1. Server should provide support for ToR to control traffic forwarding, and follow this control when dispensing traffic. + * gRPC is introduced for this requirement. + * Each ToR will have a well-known IP. Server NIC should dispatch gRPC replies towards these IPs to the corresponding uplinks. 1. Server should replicate the northbound traffic to both ToRs: * Specified ICMP replies (for probing link health status) - * ARP + * ARP propagation * Neighbor advertisements @@ -130,18 +131,7 @@ Linkmgrd will provide the determination of a ToR / link's readiness for use. When link is down, linkmgrd will receive notification from SWSS based on kernel message from netlink. This notification will be used to determine if ToR is healthy. * Admin Forwarding State - ToRs will signal NIC if the link is active / standby, we will call this active / standby state as admin forwarding state. It's up to NIC to determine which link to use if both are active, but it should never choose to use a standby link. This logic provides ToR more control over traffic forwarding. - -* Cable Control through gRPC - In active-active design, we will use gRPC to do cable control and signal NIC if ToRs is up active. SoC will run a gRPC server. Linkmgrd will determine server side forwarding state based on link prober status and link state. Then linkmgrd can invoke transceiver daemon to update NIC if ToRs are active through gRPC calls. - - Current defined gRPC services between SoC and ToRs related with linkmgrd cable controlling: - * DualToRActive - 1. Query forwarding state of ports for both peer and self ToR; - 1. Query server side link state of ports for both peer and self ToR; - 1. Set forwarding states of ports for both peer and self ToR; - * GracefulRestart - 1. Shutdown / restart notification from SoC to ToR. + ToRs will signal NIC if the link is active / standby, we will call this active / standby state as admin forwarding state. It's up to NIC to determine which link to use if both are active, but it should never choose to use a standby link. This logic provides ToR more control over traffic forwarding. * Acitve-Active State Machine Active-acitve state transition logics are simplified compared to active-standby. In active-standby, linkmgrd makes mux toggle decisions based on y-cable direction, while for active-active, two links are more independent. Linkmgrd will only make state transition decisions based on healthy indicators. @@ -150,12 +140,25 @@ Linkmgrd will provide the determination of a ToR / link's readiness for use. ![active_active_self](./image/active_active_self.png) - Linkmgrd also provides rescue mechanism when peer can't switch to standby for some , i.e. link failures. If link prober doesn't receive peer's heartbeat response AND self ToR is in healthy active state, linkmgrd should determine peer link to be standby. + Linkmgrd also provides rescue mechanism when peer can't switch to standby for some reason, i.e. link failures. If link prober doesn't receive peer's heartbeat response AND self ToR is in healthy active state, linkmgrd should determine peer link to be standby. ![active_active_peer](./image/active_active_peer.png) When control channel is unreachable, ToR won't block the traffic forwarding, but it will periodically check gRPC server's healthiness. It will make sure server side's admin forwarding state aligns with linkmgrd's decision. ![grpc_failure](./image/gRPC_failure.png) +* Cable Control through gRPC + In active-active design, we will use gRPC to do cable control and signal NIC if ToRs is up active. SoC will run a gRPC server. Linkmgrd will determine server side forwarding state based on link prober status and link state. Then linkmgrd can invoke transceiver daemon to update NIC if ToRs are active through gRPC calls. + + Current defined gRPC services between SoC and ToRs related with linkmgrd cable controlling: + * DualToRActive + 1. Query forwarding state of ports for both peer and self ToR; + 1. Query server side link state of ports for both peer and self ToR; + 1. Set forwarding states of ports for both peer and self ToR; + * GracefulRestart + 1. Shutdown / restart notification from SoC to ToR. + + To summarize the state transition decision we talk about, and the corresponding gRPC action to take, we have this decision table below: + ![icmp_payload](./image/decision_table.png) ### Incremental Featrues * Default gateway to T1 diff --git a/doc/dualtor/image/decision_table.png b/doc/dualtor/image/decision_table.png new file mode 100644 index 0000000000000000000000000000000000000000..1c9c82e7646ed2ba290025a2685f72a89b940ea8 GIT binary patch literal 19908 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 YwvdIm{yeB>3qa~!H@=3ra_7 Date: Mon, 23 May 2022 18:23:33 -0700 Subject: [PATCH 07/15] mention ToRs having same IP & MAC to server view --- doc/dualtor/active_active_hld.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/dualtor/active_active_hld.md b/doc/dualtor/active_active_hld.md index 856ea91d9a..97dd1a7153 100644 --- a/doc/dualtor/active_active_hld.md +++ b/doc/dualtor/active_active_hld.md @@ -16,6 +16,7 @@ For active-active setup, some complexity is transferred from smart y-cable to se For active-active setup, the requirements for server side are: 1. Server NIC is responsible to deliver southbound (tier 0 device to server) traffic from either uplinks to applications running on server host. + * ToRs are presenting same IP, same MAC to server on both links. 1. Server NIC is responsible to dispense northbound (server to tier 0) traffic between two active links: at IO stream (5 tuples) level. Each stream will be dispatched to one of the 2 uplinks until link state changes. 1. Server should provide support for ToR to control traffic forwarding, and follow this control when dispensing traffic. * gRPC is introduced for this requirement. From 6101390938f191aac8598ef4c0258ec892918b89 Mon Sep 17 00:00:00 2001 From: Jing Zhang Date: Mon, 23 May 2022 20:29:54 -0700 Subject: [PATCH 08/15] updates: add IPinIP tunnel; add DB changes; add active-standby comparison; re-add default route in decision table; add content table; add flow diagrams. --- doc/dualtor/active_active_hld.md | 248 +++++++++++++++----- doc/dualtor/image/decision_table.png | Bin 19908 -> 27183 bytes doc/dualtor/image/difference.png | Bin 0 -> 30622 bytes doc/dualtor/image/orchagent.png | Bin 0 -> 30080 bytes doc/dualtor/image/state_transition_flow.png | Bin 0 -> 30376 bytes doc/dualtor/image/tunnel.png | Bin 0 -> 29890 bytes 6 files changed, 194 insertions(+), 54 deletions(-) create mode 100644 doc/dualtor/image/difference.png create mode 100644 doc/dualtor/image/orchagent.png create mode 100644 doc/dualtor/image/state_transition_flow.png create mode 100644 doc/dualtor/image/tunnel.png diff --git a/doc/dualtor/active_active_hld.md b/doc/dualtor/active_active_hld.md index 97dd1a7153..5f670b34c4 100644 --- a/doc/dualtor/active_active_hld.md +++ b/doc/dualtor/active_active_hld.md @@ -11,23 +11,41 @@ Active-active dual ToR link manager is an evolution of active-standby dual ToR l ## Scope This document provides the high level design of SONiC dual toR solution, supporting active-active setup. -## Server requirements -For active-active setup, some complexity is transferred from smart y-cable to server side. Each server will have a Network Interface Card (NIC) connected to 2 x 100Gbps uplinks. These uplinks will be connected to 2 different ToRs with Direct Attach Copper (DAC) Cable. No Y-cable is needed any more. - -For active-active setup, the requirements for server side are: -1. Server NIC is responsible to deliver southbound (tier 0 device to server) traffic from either uplinks to applications running on server host. - * ToRs are presenting same IP, same MAC to server on both links. -1. Server NIC is responsible to dispense northbound (server to tier 0) traffic between two active links: at IO stream (5 tuples) level. Each stream will be dispatched to one of the 2 uplinks until link state changes. -1. Server should provide support for ToR to control traffic forwarding, and follow this control when dispensing traffic. - * gRPC is introduced for this requirement. - * Each ToR will have a well-known IP. Server NIC should dispatch gRPC replies towards these IPs to the corresponding uplinks. -1. Server should replicate the northbound traffic to both ToRs: - * Specified ICMP replies (for probing link health status) - * ARP propagation - * Neighbor advertisements - - -## Cluster Topology +## Content +[1 Cluster Topology](#active_active_hld.md#1-cluster-topology) + +[2 Requrement Overview](#2-requrement-overview) + - [2.1 Server Requirements](#21-server-requirements) + - [2.2 SONiC Requirements](#22-sonic-requirements) + +[3 SONiC ToR Controlled Solution](#3-sonic-tor-controlled-solution) + - [3.1 IP Routing](#31-ip-routing) + - [3.1.1 Normal Scenario](#311-normal-scenario) + - [3.1.2 Server Uplink Issue](#312-server-uplink-issue) + - [3.1.3 ToR Failure](#313-tor-failure) + - [3.1.4 Comparison to Active-Standby ](#314-comparison-to-active-standby) + - [3.2 DB Schema Changes](#32-db-schema-changes) + - [3.2.1 Config DB](#321-config-db) + - [3.2.2 App DB](#322-app-db) + - [3.2.3 State DB](#323-state-db) + - [3.3 Linkmgrd](#33-linkmgrd) + - [3.3.1 Link Prober](#331-link-prober) + - [3.3.2 Link State](#332-link-state) + - [3.3.3 Admin Forwarding State](#333-admin-forwarding-state) + - [3.3.4 Acitve-Active State Machine](#334-acitve-active-state-machine) + - [3.3.5 Default gateway to T1](#335-default-gateway-to-t1) + - [3.3.6 Incremental Featrues](#336-incremental-featrues) + - [3.4 Orchagent](#34-orchagent) + - [3.4.1 IPinIP tunnel](#341-ipinip-tunnel) + - [3.4.2 Flow Diagram and Orch Components](#342-flow-diagram-and-orch-components) + - [3.5 Transceiver Daemon](#35-transceiver-daemon) + - [3.5.1 Cable Control through gRPC](#351-cable-control-through-grpc) + - [3.6 State Transition Flow](#36-state-transition-flow) + - [3.7 Command Line](#37-command-line) + +[4 Warm Reboot Support](#4-warm-reboot-support) + +## 1 Cluster Topology There are a certain number of racks in a row, each rack will have 2 ToRs, and each row will have 8 Tier One (T1s) network devices. Each server will have a NIC connected to 2 ToRs with 100 Gbps DAC cables. In this design: @@ -37,14 +55,77 @@ In this design: ![image info](./image/cluster_topology.png) -### Bandwidth +__Bandwidth__ Each ToR will have single port-channel to each T1. The port-channel will have 2 members of 100Gbps. Therefore, each T0 will have total of 8\*2\*100 Gbps = 1.6 Tbps to all T1s. T1s will have 8 uplinks to T2s. Therefore, total T1s uplink will be 64. Total uplink bandwidth is 6.4Tbps. +## 2 Requrement Overview +### 2.1 Server Requirements + Each server will have a Network Interface Card (NIC) connected to 2 x 100Gbps uplinks. These uplinks will be connected to 2 different ToRs with Direct Attach Copper (DAC) Cable. No Y-cable is needed any more. Hence, some complexity is transferred from smart y-cable to server side. + +For active-active setup, the requirements for server side are: +1. Server NIC is responsible to deliver southbound (tier 0 device to server) traffic from either uplinks to applications running on server host. + * ToRs are presenting same IP, same MAC to server on both links. +1. Server NIC is responsible to dispense northbound (server to tier 0) traffic between two active links: at IO stream (5 tuples) level. Each stream will be dispatched to one of the 2 uplinks until link state changes. +1. Server should provide support for ToR to control traffic forwarding, and follow this control when dispensing traffic. + * gRPC is introduced for this requirement. + * Each ToR will have a well-known IP. Server NIC should dispatch gRPC replies towards these IPs to the corresponding uplinks. +1. Server should replicate these northbound traffic to both ToRs: + * Specified ICMP replies (for probing link health status) + * ARP propagation + * IPv6 router solicitation, neighbor solicitation and neighbor advertisements + + Check pseudo code below for details of IO scheduling contract. + ``` + // gRPC Response + if (ethertype == IPv4 && DestIP == Loopback3_Port0_IPv4) or (ethertype == IPv6 && DestIP == Loopback3_Port0_IPv6) + { + if (Port 0.LinkState == Up) + Send to Port 0 + else + Drop + } + else if (ethertype == IPv4 && DestIP == Loopback3_Port1_IPv4) or (ethertype == IPv6 && DestIP == Loopback3_Port1_IPv6) + { + if (Port 1.LinkState == Up) + Send to Port 1 + else + Drop + } + + // ARP + else if (ethertype == ARP) + Duplicate to both ports + + // ICMP Heartbeat Probing + else if ((ethertype == IPv4 && DestIP == Loopback2_IPv4 && IPv4.Protocol == ICMP) or (ethertype == IPv6 && DestIP == Loopback2_IPv6 && IPv6.Protocol == ICMPv6)) + Duplicate to all active ports + + // IPv6 router solicitation, neighbor solicitation and neighbor advertisements + else if (ethertype == IPv6 && IPv6.Protocol == ICMPv6 && ICMPv6.Type in [133, 135, 136]) + Duplicate to both ports + else if (gRPC status == "Port 0 disabled" || Port0.LinkState == Down) + Send to Port 1 + else if (gRPC status == "Port 1 disabled" || Port1.LinkState == Down) + Send to Port 0 + + // Other Traffic + else + Send packet on either port + ``` + +### 2.2 SONiC Requirements +1. Introduce active-active mode into MUX state machine. +1. Probe to determine if link is healthy or not. +1. Signal NIC if ToR is switching active or standby. +1. Rescue when peer ToR failure occures. +1. Unblock traffic when cable control channel is unreachable. + +## 3 SONiC ToR Controlled Solution -## SONiC ToR Controlled Solution -### Normal Scenario +### 3.1 IP Routing +#### 3.1.1 Normal Scenario Both T0s are up and functioning and both the server NIC connections are up and functioning. * Control Plane UT0 and LT0 will advertise same VLAN (IPv4 and IPv6) to upstream T1s. Each T1 will see there are 2 available next hops for the VLAN. T1s advertise to T2 as normal. @@ -61,7 +142,7 @@ Both T0s are up and functioning and both the server NIC connections are up and f * NIC determines which link to use and sends all the packet on a flow using the same link. * T0 sends the traffic to destination server if T0 has learnt the MAC address of the destination server. -### Server Uplink Issue +#### 3.1.2 Server Uplink Issue Both T0s are up and functioning and some servers NIC are only connected to 1 ToR (due to cable issue, or the cable is taken out for maintenance). * Control Plane No change from the normal case. @@ -69,7 +150,7 @@ No change from the normal case. * Traffic to the server * Traffic lands on any of the T1 by ECMP from T2s. * T1 forwards traffic to either of the T0s by ECMP. - * **If T0 does not have the downlink to the server, T0 will send the traffic to the peer T0 over VxLAN encap via T1s.** + * **If T0 does not have the downlink to the server, T0 will send the traffic to the peer T0 over IPinIP encap via T1s.** * T0 sends the traffic to the server and NIC delivers traffic up the stack. * Traffic from the server to outside the cluster * T0 will signal to NIC which side to use. @@ -78,10 +159,10 @@ No change from the normal case. * Traffic from the server to within the cluster * T0 will signal to NIC which side to use. * NIC determines which link to use and sends all the packets on a flow using the same link. If Server NIC has only 1 connection up, all traffic will be on this connection - * If T0 does not have the downlink to the server, T0 will send the traffic to the peer T0 over VxLAN encap via T1s. + * If T0 does not have the downlink to the server, T0 will send the traffic to the peer T0 over IPinIP encap via T1s. * T0 sends the traffic to the server. -### ToR Failure +#### 3.1.3 ToR Failure Only 1 T0s is up and functioning. * Control Plane Only 1 T0 will advertise the VLAN (IPv4 and v6) to upstream T1s. @@ -97,22 +178,47 @@ Only 1 T0 will advertise the VLAN (IPv4 and v6) to upstream T1s. * T0 will signal to NIC which side to use. * T0 sends the traffic to the server. -Highlight on the difference with Active-Standby: -1. In active-standby dual ToR design, traffic from server is duplicate to both T0s, standby ToR needs to drop the packets. In active-active, NIC will determine which link to use if both are available. -1. In active-ative design, servers have up to 2 links for traffic, T1s and above devices will see more throughput from server. - -## Linkmgrd +#### 3.1.4 Comparison to Active-Standby +Highlight on the common and differences with Active-Standby: + ![comparison](./image/difference.png) + +### 3.2 DB Schema Changes +#### 3.2.1 Config DB +* New field in `MUX_CABLE` table to determine cable type +``` +MUX_CABLE|PORTNAME: + cable_type: active-standby|active-active +``` +#### 3.2.2 App DB +* New table to invoke transceiver daemon to query server side forwarding state +``` +FORWARDING_STATE_COMMAND | PORTNAME: + command: probe | set_active_self | set_standby_self | set_standby_peer +FORWARDING_STATE_RESPONSE | PORTNAME: + response: active | standby | unknown | error + response_peer: active | standby | unknown | error +``` +* New table for transceiver daemon to write peer link state to linkmgrd +``` +PORT_TABLE_PEER|PORTNAME + oper_status: up|down +``` +* New table to invoke transceiver daemon to set peer's server side forwarding state +``` +HW_FORWARDING_STATE_PEER|PORTNAME + state: active|standby|unknown +``` +#### 3.2.3 State DB +* New table for transceiver daemon to write peer's server side forwarding state to linkmgrd +``` +HW_MUX_CABLE_TABLE_PEER| PORTNAME + state: active |standby|unknown +``` + +### 3.3 Linkmgrd Linkmgrd will provide the determination of a ToR / link's readiness for use. -### Requirement -1. Introduce active-active mode into MUX state machine. -1. Probe to determine if link is healthy or not. -1. Signal NIC if ToR is switching active or standby. -1. Rescue when peer ToR failure occures. -1. Unblock traffic when cable control channel is unreachable. - -### Solution -* Link Prober +#### 3.3.1 Link Prober Linkmgrd will keep the link prober design from active-standby mode for monitoring link health status. Link prober will send ICMP packets and listen to ICMP response packets. ICMP packets will contain payload information about the ToR. ICMP replies will be duplicated to both ToRs from the server, hence a ToR can monitor the health status of its peer ToR as well. Link Prober will report 4 possible states: @@ -121,6 +227,8 @@ Linkmgrd will provide the determination of a ToR / link's readiness for use. * LinkProberPeerUnknown: It indicates that LinkMgr did not receive ICMP replies containing ID of the peer ToR. Hence, there is a chance that peer ToR’s link is currently down. * LinkProberPeerAcitve: It indicates that LinkMgr receives ICMP replies containing ID of the peer ToR, or in other words, peer ToR’s links appear to be active. + By default, the heartbeat probing interval is 100 ms. It takes 3 lost of link prober packets, to determine link is unhealthy. Server issue can also cause link prober packet loss, but ToR won't distinguish it from link issue. + __ICMP Probing Format__ The source MAC will be ToR's SVI mac address. Ethernet destination will be the well-known MAC address. Source IP will be ToR's Loopback IP, destination IP will be SoC's IP address, which will be introduced as a field in minigraph. ![icmp_format](./image/icmp_format.png) @@ -128,13 +236,13 @@ Linkmgrd will provide the determination of a ToR / link's readiness for use. Linkmgrd also adapt TLV (Type-Length-Value) as the encoding schema in payload for additional information elements, including cookie, version, ToR GUID etc. ![icmp_payload](./image/icmp_payload.png) -* Link State +#### 3.3.2 Link State When link is down, linkmgrd will receive notification from SWSS based on kernel message from netlink. This notification will be used to determine if ToR is healthy. -* Admin Forwarding State +#### 3.3.3 Admin Forwarding State ToRs will signal NIC if the link is active / standby, we will call this active / standby state as admin forwarding state. It's up to NIC to determine which link to use if both are active, but it should never choose to use a standby link. This logic provides ToR more control over traffic forwarding. -* Acitve-Active State Machine +#### 3.3.4 Acitve-Active State Machine Active-acitve state transition logics are simplified compared to active-standby. In active-standby, linkmgrd makes mux toggle decisions based on y-cable direction, while for active-active, two links are more independent. Linkmgrd will only make state transition decisions based on healthy indicators. To be more specific, if link prober indicates active AND link state appears to be up, linkmgrd should determine link's forwarding state as active, otherwise, it should be standby. @@ -147,8 +255,45 @@ Linkmgrd will provide the determination of a ToR / link's readiness for use. When control channel is unreachable, ToR won't block the traffic forwarding, but it will periodically check gRPC server's healthiness. It will make sure server side's admin forwarding state aligns with linkmgrd's decision. ![grpc_failure](./image/gRPC_failure.png) -* Cable Control through gRPC - In active-active design, we will use gRPC to do cable control and signal NIC if ToRs is up active. SoC will run a gRPC server. Linkmgrd will determine server side forwarding state based on link prober status and link state. Then linkmgrd can invoke transceiver daemon to update NIC if ToRs are active through gRPC calls. +#### 3.3.5 Default gateway to T1 + If default gateway to T1 is missing, dual ToR system can suffer from northbound packet loss, hence linkmgrd also monitors defaul route state. If default route is missing, linkmgrd will stop sending ICMP probing request and fake an unhealthy status. This functionality can be disabled as well, the details is included in [default_route](https://github.com/Azure/sonic-linkmgrd/blob/master/doc/default_route.md). + + To summarize the state transition decision we talk about, and the corresponding gRPC action to take, we have this decision table below: + ![icmp_payload](./image/decision_table.png) + +#### 3.3.6 Incremental Featrues + +* Link Prober Packet Loss Statics + Link prober will by default send heartbeat packet every 100 ms, the packet loss statics can be a good measurement of system healthiness. An incremental feature is to collect the packet loss counts, start time and end time. The collected data is stored and updated in state db. User can check and reset through CLI. + +* Supoort for Detachment + User can config linkmgrd to a certain mode, so it won't switch to active / standby based on health indicators. User can also config linkmgrd to a mode, so it won't modify peer's forwarding state. This support will be useful for maintenance, upgrade and testing scenarios. + +### 3.4 Orchagent +#### 3.4.1 IPinIP tunnel +Orchagent will create tunnel at initialization and add / remove routes to forward traffic to peer ToR via this tunnel when linkmgrd switchs state to standby / active. + +Check below for an example of config DB entry and tunnel utilization when LT0's link is having issue. + ![tunnel](./image/tunnel.png) + +#### 3.4.2 Flow Diagram and Orch Components +Major components of Orchagent for this IPinIP tunnel are MuxCfgOrch, TunnelOrch, MuxOrch. + ![tunnel](./image/orchagent.png) + +1. MuxCfgOrch +MuxCfgOrch listens to config DB entries to populate the port to server IP mapping to MuxOrch. + +1. TunnelOrch +TunnelOrch will subscribe to `MUX_TUNNEL` table and create tunnel, tunnel termination, and decap entry. This tunnel object would be created when initializing. This tunnel object would be used as nexthop object by MuxOrch for programming route via SAI_NEXT_HOP_TYPE_TUNNEL_ENCAP. + +1. MuxOrch +MuxOrch will listen to state changes from linkmgrd and does the following at a high-level: + * Enable / disable neighbor entry. + * Add / remove tunnel routes. + +### 3.5 Transceiver Daemon +#### 3.5.1 Cable Control through gRPC + In active-active design, we will use gRPC to do cable control and signal NIC if ToRs is up active. SoC will run a gRPC server. Linkmgrd will determine server side forwarding state based on link prober status and link state. Then linkmgrd can invoke transceiver daemon to update NIC wether ToRs are active or not through gRPC calls. Current defined gRPC services between SoC and ToRs related with linkmgrd cable controlling: * DualToRActive @@ -158,19 +303,14 @@ Linkmgrd will provide the determination of a ToR / link's readiness for use. * GracefulRestart 1. Shutdown / restart notification from SoC to ToR. - To summarize the state transition decision we talk about, and the corresponding gRPC action to take, we have this decision table below: - ![icmp_payload](./image/decision_table.png) +### 3.6 State Transition Flow +The following UML sequence illustrates the state transtion when linkmgrd state moves to active. The flow will be similar for moving to standby. -### Incremental Featrues -* Default gateway to T1 - If default gateway to T1 is missing, dual ToR system can suffer from northbound packet loss, hence linkmgrd also monitors defaul route state. If default route is missing, linkmgrd will stop sending ICMP probing request and fake an unhealthy status. This functionality can be disabled as well, the details is included in [default_route](https://github.com/Azure/sonic-linkmgrd/blob/master/doc/default_route.md). +![state transition flow](./image/state_transition_flow.png) -* Link Prober Packet Loss Statics - Link prober will by default send heartbeat packet every 100 ms, the packet loss statics can be a good system healthiness measurement. An incremental feature is to collect the packet loss counts, start time and end time. The collected data is stored and updated in state db. User can check and reset through CLI. - -* Supoort for Detachment - User can config linkmgrd to a certain mode, so it won't switch to active / standby based on health indicators. User can also config linkmgrd to a mode, so it won't modify peer's forwarding state. This support will be useful for maintenance, upgrade and testing scenarios. +### 3.7 Command Line +TBD -### Command Line +## 4 Warm Reboot Support TBD diff --git a/doc/dualtor/image/decision_table.png b/doc/dualtor/image/decision_table.png index 1c9c82e7646ed2ba290025a2685f72a89b940ea8..7776e9c8f2cade252c3afc34d902b071b39faf79 100644 GIT binary patch literal 27183 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 W7x)$-o!d2sA9Xr;gy3-Ir+)*zq%kD` literal 19908 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 MW8ZK2j@}pk1?VwbR{#J2 literal 0 HcmV?d00001 diff --git a/doc/dualtor/image/tunnel.png b/doc/dualtor/image/tunnel.png new file mode 100644 index 0000000000000000000000000000000000000000..d90f0d2e9d1d729241592cda35c1aba9003385c3 GIT binary patch literal 29890 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 Date: Fri, 27 May 2022 16:39:54 -0700 Subject: [PATCH 09/15] replace table images, update requirement overview --- doc/dualtor/active_active_hld.md | 129 ++++++++++++++++++++++++++- doc/dualtor/image/decision_table.png | Bin 27183 -> 0 bytes doc/dualtor/image/difference.png | Bin 30622 -> 0 bytes 3 files changed, 125 insertions(+), 4 deletions(-) delete mode 100644 doc/dualtor/image/decision_table.png delete mode 100644 doc/dualtor/image/difference.png diff --git a/doc/dualtor/active_active_hld.md b/doc/dualtor/active_active_hld.md index 5f670b34c4..c3c9ed7314 100644 --- a/doc/dualtor/active_active_hld.md +++ b/doc/dualtor/active_active_hld.md @@ -62,9 +62,10 @@ T1s will have 8 uplinks to T2s. Therefore, total T1s uplink will be 64. Total up ## 2 Requrement Overview ### 2.1 Server Requirements - Each server will have a Network Interface Card (NIC) connected to 2 x 100Gbps uplinks. These uplinks will be connected to 2 different ToRs with Direct Attach Copper (DAC) Cable. No Y-cable is needed any more. Hence, some complexity is transferred from smart y-cable to server side. +In our cluster setup, as smart y-cable is replaced, some complexity shall be transferred to server NIC. + +Note that, this complexity can be handled by active-active smart cables, or any other deployments, as long as long it meets the requirements below. -For active-active setup, the requirements for server side are: 1. Server NIC is responsible to deliver southbound (tier 0 device to server) traffic from either uplinks to applications running on server host. * ToRs are presenting same IP, same MAC to server on both links. 1. Server NIC is responsible to dispense northbound (server to tier 0) traffic between two active links: at IO stream (5 tuples) level. Each stream will be dispatched to one of the 2 uplinks until link state changes. @@ -180,7 +181,62 @@ Only 1 T0 will advertise the VLAN (IPv4 and v6) to upstream T1s. #### 3.1.4 Comparison to Active-Standby Highlight on the common and differences with Active-Standby: - ![comparison](./image/difference.png) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Active- StandbyActive-ActiveImplication
Server uplink viewSingle IP, single MAC
Standby side receive trafficForward it to active ToR through IPinIP tunnel via T1
T0 to T1 control planeAdvertise same set of routes
T1 to T0 TrafficECMP
Southbound trafficFrom either side
Northbound trafficAll is duplicated to both ToRs.NiC determines which side to forward the traffic.Orchagent doesn’t need to drop packets on standby side.
BandwidthUp to 1 linkUp to 2 linksT1 and above devices see more throughput from server.
Cable ControlI2CgRPC over DAC cablesControl plane and data plane now share the same link.
### 3.2 DB Schema Changes #### 3.2.1 Config DB @@ -259,7 +315,72 @@ Linkmgrd will provide the determination of a ToR / link's readiness for use. If default gateway to T1 is missing, dual ToR system can suffer from northbound packet loss, hence linkmgrd also monitors defaul route state. If default route is missing, linkmgrd will stop sending ICMP probing request and fake an unhealthy status. This functionality can be disabled as well, the details is included in [default_route](https://github.com/Azure/sonic-linkmgrd/blob/master/doc/default_route.md). To summarize the state transition decision we talk about, and the corresponding gRPC action to take, we have this decision table below: - ![icmp_payload](./image/decision_table.png) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
InputDecision
Default Route to T1Link ProberLink StateLink Manager StategRPC Action to Update Server-Side Admin Forwarding State
SELFPEERSELFPEER
AvailableActiveActiveUpActiveSet to ActiveNo-op
AvailableActiveUnknownSet to standby
AvailableUnknown*UpStandbySet to standbyNo-op
Available**DownStandbySet to standbyNo-op
Missing***StandbySet to standbyNo-op
#### 3.3.6 Incremental Featrues diff --git a/doc/dualtor/image/decision_table.png b/doc/dualtor/image/decision_table.png deleted file mode 100644 index 7776e9c8f2cade252c3afc34d902b071b39faf79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27183 zcmeFZ2~?76A1`WiHkUiC%-rSFE{D>s=78)5H7hkMHN~M)!yI$K8EKb|PN}JxB9-MV z=70kVl%=MoWC@6hWT+?z3ir%=%M{*3tw+cN!sqK zU+_A7-=Y0G^4_PJRxMw%!fL<&ra3sRs zwuVJ;N(V4PS4;#cre_xK8Fy^$-h?eb{uJH!UjL7mAMfv@-u&x>wR^*#pRD`!@9Wkg z_owUp^ERyq|LboX@b1!EY)7mB1h({ZLpl6w?)N31oGWPExJ2Yf(hvHc{bpIcYKaBj zfgeOYIj0U;qI(Ygf6N7b{4USMna@g|anmBLV{35*fUtij;1|VgB0G5$3YJir{Puc! zyySRA7(bW3Fy79NlSzf(M=38&OUsP>61N*$4 zs;31U^^K3l9satLy#)}_Gv|ANzKTgr8W6l_JXcl8}2|)pdK9m*2#C{jV;G& z?z;mQI@ZsJv>d1F_d;b^OeR<+V%|>U(<13`UCJ>V!m>}%DrNWqSHFVLG!9%vCVyVH zVOzq-cEt|GgmLHk;a73!_%cI^;xQCPa8k;RBuEytPBl7(s8oWh>F9X0ty{iN(Ck>Y zXS{{h@8hP5o~Hw6^W*ttp3<``_SQb{ulO~=6_$uvh_JCtT&-iOt_5j6R5E|C0j(8! z`73*VU`f}=@8ZJp?~H+kTRpTU=pi94t+3iX9V_oSrO@oCTvOn zdjV2~!b0M1#Ca$G4YG4q{+l{vJ&?N3_8Qg;RHlw9Q!im*Bcy{#^NdV(W6!&$vqgjY zImMG)<-N6c`Y}H^(Usp9y>&!p_!RQ)q!=5J1qJC{P+w9D2r$==3oNp-le^Yv$X&^G zRF1Zd4>&7B{nWT`w}WiNjUtTk2~R%LauHK83QHyg-rC}7KjpgRSOvC~SmB-6bDFl# zs#HFsoTBpw*1t*T*xK)!hp{&vlqH>{ukC;xzpJ3i{mf1;4MIL&L|#8E;(ciRz|QP7 z#Nz!S_hB24u@kAuTl`2m@mTeHqpdfUcGHd>pD~8aLDXzK3t+gQWuM$3za~5cZ0(td zRAH=*n#Jy=C_!XCHG{O-ZpG8`d+Leo`TnIxa-~;KlaH^h(70-RtTE^Wy=8ywl&lQuv&|($F#N2 zoEDSMEnaO~e@i=~x&PZfEv3Wa!Uu@10@R}OqK?$5bG;6~z%p}?!uI`h%%7C7`Pc+w z$$QS8=D~3k1sof*`Wv{}^Cka|%vkjq5fdbhI1?Y%%HH7K{z+s4=#QF-PuJPTl?(u z%gT-!(#3?2HUC@tK)(zf*XAFNTu$z_5fX6ji1}2RyqrgZCe(S89Pv++`c3`Y2!niPHJd2z#9+cRj(m?IA*1kB~Kopcgt&i_{{5XpkVeg_RA; z77+^$IN20fre_h1ml0)b+2SqiSD6SQBiPHNvTtBGw~O!SEbYUpP`OjdQiRA;N`)mivcf zS`K=>2TNxOal}o)Bf)KE)BUHB&%Vp}a*foM;HD z4{`qV+DB~lXBST1DRhJ<8&O4QQ=rJ%>9zcqf>U=I5Xog_O}7W}UE`9S3@WRphU&1# zwk{kWkuZmwa~JhA^-ENKDEMF4$T@rhQOyVrxey*-yR0WPJK2ak9LFw7$vhi^vnIS5 z3BKVw+sxN_B!;S&mQ^w9_iqbsv6gY~^)P2YF{#(JpBcD!%dYaU5Y+Dl4)hOFPmXqzq0ylcXMv+nv||?9vtvk+L)qgm+Y2IGm;pa5%V_;SE$h0|hRMa`%oDKY zj$el7uiiYad`y^~3(1zJz^XMAw$vNFQQ1>3CRGt=>0Vn|X2u__d>VJ!g>Uv7)YuR@ zlzC>(``ojy(6fz(dyo{(=CXpBiWj%oW4OmXS9RIwY|1BM@8c65m1cU6;y#KXfF5fo zd~1tGi#oYXJa$i?#I`BAyv5?0Dy`a6m{%PnkZky`WKIWDk^4W6QVuSgQ9Z<)7Ea;h{olMM-J$ZJvTb~lv$i7#b z+%>byg+lZoejbZiZTBKMegAXKbA8q+{=sw;BkHlbIu$qLz%Tk>@Sr`T3N`Oif*zdg z_hHc~QJO$(mvh^YyXpp|B@ePDKwi!|%BlM0Y1dKBnsntWY08`j+jbl7+*>W((|31p z+^Tl)o7fa7g?HW_pB zg9GhqL)odw7Y21<>CDuR-<`!P7rB2ri<&DZ7jrDr=?lfmmjZvs<&fJ=~P zt!g}icDvVQF9Eg5~U(Gp6 zB)569gTiWjy#bzj&iK=PcHeZvLRxU$JOoS&d&Q~2@i2l(EVo_gBB>Da7JuJ__^gJy zJD8mBP!~xp=<}cAG${vvg=$OYOcPl|Ki464!=`=C)QeTL(9Vs#BLhpk|NMeoH{oFRnqRbdH2>3I9%?52?_HdMfyU98!rwZgCESHh}M z{p6z9O_+)up!NpHwVdvij8|oEMD^D7)9P}PveaN`PF3TH%Hr{8x+$br9m=oypd|L(zJ>?&h~TJ#Q^eVU730RA}~r zJnuyAaa5qH3Z=?Fj(Z*qBMMe%K@!rHG5M12ML!T?{RywWdh0m536}s3jlR0!Fs5g$ zm<-MI|3EdWqMaBRp1_jg`69_sR%)KDR=SRy(%Y*eTDy<%Ys`3G*p&&xw>~X1iz3X9s=wkRj>hkM{0~F)GI#rLYwa(D7 zyD?Ej;5@I?Asbm2Q*JU}|GntJI}^_+rcOUIp*^6bFOhU?Fdf&KTrJ#u-ke%iCq zyInQ;={t3Wjm=Khi-UT!=!_0Espy=ubyOb2OFVIiNnQq7{(9@Zy>izTfB0KHG3rQq zfWxulbf=C{D?vt}G?g5v;d&xFpx0jO&=7+B+1RG9NJff8-2Pqi(FD2)^eIw-Rw zMLgYbn=KMA-brPNat~pRGXs++3;tHmuXp5LyZn%A^8}*h{_QjA;mjuQM1`Hln2uSp z!Uuzn&tIPitp0@JAq%f zcPJufp&E8|c)o*zin~fxX8$)#&-~TIZRXJx72x#)yFOdr{cq`|EI~m*+z4Crt+upT zCu`E;BXmybUrv)c*KJc4rA}f~7mOkL@{AY};7fCl?5boHf8ft;RMtv-bkD(aG19HB zZLasfD|#g1Wb6GqHR(F0+{KZBQ<~aVuy;;Z)D+CNXEIT0K0y44Cg!{@c^J^RF)T>s zm4@8zKX)vbgZ`b&%H(BwM>C%Ugd98CV5g~*cQVAR7sIc&3h(i`FP;)t9;r&BoPKn@ z7iV(+IZCW}iu0LyA)oHsaU!u7K1u)=5XE}W;EUwP7W#kZ#5q^)kvGOvGEK)%H5XD{ zRp0nW8>@)y5ljU#9FP&a_ps9!C* zLCT@^(e2)e`DyLWd#N*S3!Enp+Qv<3#vgejzLLLW@h`C&+O{Ql?QP@v#hS0y+ccqC zklz)9FG`_9Vk(JKEEL#zSHCnP93Y;2PrHT3ePwbF@1HCto@!|rc91le!Ogzc8b4=* z-#+X}S3V}Ap1n(meu%jGj5vIR-7MY}_yXo8^FDt6QTgW)?}yv8#pGLqkzS-|&*R`4 ze1?v=#LJyPrl9yodPgJp%G!%o2{K$7MCvoxIo#bK=7+)PyPPdn2w$T15ZWH0+?_cA z#52c4E^JrREI6r0s6N-dC%HW^p_Ak}Optn4re2U?nT;`drk))V11_X5_He;soCWW= z??Mc@uA@T0RYO$_Oyww8|97DpjEXL6`@ke54(a$6w7Po-s7OuDyMt?BNLk zyN?I&i%M!?TxgW^5o1*7o`NEFBbcATH=T)gbZeJ3@CJJ5AKvSGo+rK`9%3KJ`Kk}n z%e?PuFVvJ2Z&qQ8>mb9Z>cZ{59(2Uat@5qSvcQ|}S-GP_JDSS5*W88! zzc$5~>`4VFY=d+tQaWNx1fArXUeQz&cZL6_H}J7~_au&A?D*n2Fs4_Pc2`^xzc6~;-|v2z_7ptEvf^a5r?qMQc-T0>;wp%A2lM4R`XIkUkO7g%lC zLj|etJhh4QVOXu-AqmMlV+y5rO$-}yp=KQ$ydUm(#zY0q4f%bGQ~J(V4KvTU__^*t zf})LS(T;FllYj00fm>JH@x0oo$u?sH)x+`l0>W5u7>tHJd`P5xs_F@tYbiu3ZzV@k zraN~$7iH%9YyBQKC4KL^*`bU7Inb=m=p9V&LPxM%!v}_PX6o0wT{H2aQ@UkBV-}Im zas^L{?XBR6y*x`-Ve&o;rPbPn0cZ_I?vV_SUqRLbF?Op1lT!Wjp~CbWZi zilnZK%*b1)`^9|s;gOgEfy;2nL7VVLcEPy;Hr5mUF*)=WcrnfZ2BeZ@#`nDnzO^|s zI_qLh1{OD1Tv>>-M$A5G9}PaFP9F9hjf{|n zN^XouTWWU!jyQeNXfCR0Wme^0mJ|vCGhBsPsrLrjhncLH89lIqs8uc2#FNPQWS{K= z%4R=_N5B}g&lX*tmPNm%>qKnQupBKmYKR}s-QQs|5|4V5RReXgj^r5{TpY}^K?Yb) za+zm_B86^_g_8G&hhi2h?*L_ne>4oplcPD@^x8cw8{OqgMd^qk1d` zq2OU01=sX@-kzJf(7i}ypq5pRv97lGZ>P)}#DsT;)=I5MfKEUi*?32@iQ{g8@vh&U z-H3J7(%IZALAldpBiI#3?|mo6Ah}nBbPY@7p)CS?qKl}UdvrAa9fJ%ogVH_i`9Ttr z!??#z7KeePA7);#!M&jQX0B!X0b&H7nu=yN6fp}>yXy0i7O7XBcLf+@Lfq*H@~nYT zEc`^n2lx~mEg;3lcT`FoVnvs-L@~6B{3&UGTRuLEzC09FAV}@GUo-K$BM=d?H-B1P zRl_RUePYZMb;l;$ZnI}bw}R#S{gc|IjIe9k!ZLww&0CgR-RbZienu}28ci1V&*EWu z83QTkFe;fb7Z$F1Uklm5PdaGwCcRk?yrl3rW^3xE($dmdp$s_%vH_JR$=3P8x1R^p`X% zyxcBigv9Q-H}%=aBnXa%fsEaP`%vsjXqJ|{Y&$N)t?2pu*BGvUI4;SuW$aq6DILC9 zMU>|@4h`T=Z$&lv6p7uopC9skK3jmXY!jZc_^fMJV%|;;DZ@p1+vNfFnW59N`O~In z*;5lE*q-;x!gaNLTJP*kF3C+0m+K?hyIYuU;7N3W&6wo#>0THq(s*k^CvL}kNf;!J z(KqdTZgMCe>b4UUMyKq*vEIE*Kp7DiFs}*7v4%h+(W9#@LnnIJXJ^L22XBXukn46D zgjMAiSFnrq+z%Q*zfvpzv9bATYa*{gklK83&u#B6{-S1c)<=7SFsve7`PM=nBhtkZ zKW>V*vlf%d(iq#KkZ}J!j4D#{qse>-hsdxAy;XFWX|Sc9oK(-{I7upC1?)KW{GG=~ zy=G8Pip!K8Q8mHqNFiogZ_VpJ+07gkUBFrK4|;iSA6C1to50SircX4Br(<7JLg}T< zh!)Pm;ud^%Ia|bu0fIX%X=5f@wy6~p=Q$aMTw^+n^|1I{&WLy}_^nA~G1ODFmo1JH z-=VVAFsVTJYNz*#Qn{x&ECYdTn&`>ea=7OrA zN|Fv1Fg49>!c}9&4|G+f=oj5*567Tm*|=RmX;(Q$OV>%UX{>^QsYb>&5M|Fa_)ZWh4y3`?Y<}L65{y}J|-XE8>lrj9% zonBk_*qas)UUjkdC_2|Z6{@qVx>+{~WR=FphG4aMT3yzCRXM$3T{CWdi9t70udCLx zxD`UbrH*!1&f9t@kTsToQDNA~vC`Y(q9c2J!86ynN zO(**GIWZl_E$>Vyt_*^B#%0E+;2LNs#l50^#2BizN=B+BncX(2Utck%=GXErDIbyr zh4&`=CrBC`BZG0yZxi=?!F+fa5R%tf7tf0Gq1z}@CfJKmdxyfs_f~zIA1lyh7gMIAEK{gbj?3rCC+=6Qee4Eaq(&b3EyL^M zG-$#ldbg;Y<~dx}9~KPZ)Wlmd-eXmlkuS-C9^86hyi+UlMz5#sledvr#8-7QN}B-q z-~wp=7;KtzAI^4>7lxE^mmKgCu#jU&O-HHT_rg@P|5}~zg&S7$I16LoNQ=Xft!fVg zqBkRIx@ib>_QGKA+#1yEJjj9sdtT7A*;A|ie0#aRDik+B=7e{ji5QJhZy&2p2`U$U zVSC4_GC@h5P0Y|T9Ki=D_cpEu%Cu{x-iaQ=B4s)0+_AGRM%g5>D1A!2UAK#VE?haD zGW-0f%?8TszT*M7`2}8a)KQ0>$-VNwxD$OAyFdH>`AJG{)w`GsmX(#RGQ(f~JH~n2+_&MaEj_L;duwV5mfWPmFbRvdp`7}Go3C{z>IGuDv!nHQ6?}WHRr!+5?02+ge7aauAr6g|_Q9ha@)_mC zeLPS2P)wW3Vsc?6k`L2WG7#rcns2wK3orGhN-9PTn$vqnPw;f6j4HjGf^;o9C*T^P zvt<{@j8be3H<6;qnC|ZMo~EJwcgkeDoSSx(2=gjSgig-fI!uq#(&iP0*6BdM&=zc? zx_?z}Iuk#!$Tp*mQ9a$Ye9xenrUjVH&IHOCm`VW=X3K=?x8O_hePk~MmR|cXsD5i{ znE-Dr?F*ajPfh{db!_)<0|8dxF%c$s7JDAT=a{Ol8XhZNhx!A`3e3=vQ(bjaoYxXG z%Tf#a=)4NjQgDQtCjVf;sAqrGO8+-ayB$XqCeD1Xx_?~vV51m73Zot^6rQrAubmut z9rI1s+HroR>G|*I;8TmDSA)%0Zs7rxagQZJ^AUoj`RGP3YBcU0xJXp|KfG2h<@Nt) zEdZ6|g+~u&{;?JI6mLSW$#l+tLsrNsv{Eklk z@3`3G$jvN*s5{s~x&RD#%(Vi8C{`%Pt8fXY9-LnmH`{HDVlN2l3DT-FC^NWdEF1BW z9LFa)gZrZNa0N8)Z1F<8paumOkLe*qYl!gF?iXpc34A`qv!2N|q}v31q2G81GR>qC9zk|X7@qF0Q=xo8!1k1h@1}$M0@#>XOuGHW#uVcNr)3YV{7t8q zrcKZ_(2XWD7*>Yr(IuUZBX40nYTaM`l6CWHq{oq`2mWaK@CJKeP(vLe@b6M|H8&Ae zwO>6KIef9&KGI|2Nz4d7_iq)HS67iGxY*6>E1N=foH{UBU7?_doe}at%yoq76|79e zUVe2hRs*Gkn<=d7t()_n&J7 zSQE^J{bxdvI=SI`;|oT~czJ%%k9{SV@~X4VmGH}KtTT@hRDpr&Xg2mt&=Bl}Dc4r5 zbI9%)$a}$EfF%rcBUR)YpQ}mOOTaFndmqf!z@!^r$sWDmFUJJOJvnOZVCGL;Z!xIJ z6YC?an_zmc&&18UaI13qNLxjz4?}0&>QDq$v?>j~lMx9Zq(&CxJ&d_GH;E zT!{!Bqsc1lraFX>Muc%qY-*rz_9*c~N&&n2>4Fsm@yuk6@pk11@L>GF(IcgLB zEcGu}RNhck$7+fvx&jLAZIY2iRLpbxDU3^fVOeQBsbtm=t~TsbCblaQ{04ioRxbZ- z(`p#}mz`eE1)o|dQcqn?JAguI$Po%?g8pLz5F)HD;1llgm|0LRB6Lpo zXDzV}ab;4iVNr1Cy!{^lTk4dZI7u)P$k;9VsbsLCS~ zLm4B_lv<%+O8f{%$q=d#C+!W-`X8 zHfD3I&P$XyV>nJ0RM8qrI}{_7fWU(>9FK~x3MDwBS=67A4V-+#7YjW;u#LX5Qg+)9 zV{zKRQa#!q=u!2TpZMaQQu<9kyzn~$eiUwZxjwq}ua*9cG%0P-`k3=wS7fAZ@tR z^xciFyt4MfH~FYXKY-t-7FvMtUeW%ZPdYHa()`qSv=Wf3!jzF-|3AQ&?QzTZy!<{` z17rg75xGhMe-AtTxz1u)>W>yTps1Bi-RtXqj5z#y=Z{sW8-KOsfz;wAZG6?>-@{E$ zZ`!{u_yMl~n*V>Btt@#F1tAgI1EZ_0MTCVi!Xl6(IA#G;NAZi}!7?-m)yIAl9rx(z zqEPlN6(v0hZknz6lQw?)cHh6tPHR>RA%@!1A3qFmNsL_2LM$o~`Z-EMplWQqR4;w? z(Di%x1cc+W3iS~iSgUyh&XWrONMyeBh^<;K3%OsMO%HcuMMoDs)%E;% zm8Kjloni$ZtsdiFs+U{}!TmL;_GjlhixGG(V%#KMhghJ{k)<$g<@4y>*?onQiZEDA zy*(@8tczW~F7<2o`E+Jj-k#&m_QmCPWYZpNM8RV3($kd(g3WSsS$b$D*vDo{31(0^ z!&Sb7)T6|!+Gyr=Cq;zq>z@}P)SKl0jpVRv?&BC2t{U!6Wo#GLYKj%$AYA>NJRO7K zI^f#!kbsHWwQTY$>eGCio9S8BCiHaD8neOFUoD zZ~Lmj<7a)ubouMU1s3PS*$qK~JifO(4;BtB}`#a!6BZs5+O%$bsEnnwuJ=Qo`N;#i9&?6;v?+O4&!igVB(F5mwAd3Sc zd*@-%X`RpZDuYm4CZh7HQ4`7gCoS<{4p3knW{6SbX!;D{;N?uGju_3giXP6DFMTq{oqAj6+$<9 zad!m_!qIaWbkiey)i6yBfO(-V`Tma5jLvJNjQ(ewhfmg$CYu{eyk(|6HZO<=W~;to z4&Vjk)n~?F>EeElRk-xcGdM1=W!kRhL{J|p%r5+)1E08B583O#!nNwb?z{{Z8l@kt9~DPxgyV+XNbC}x`JMLYyH7nh5aP?!iKv6UR|%(N zTaljf{0jfFW^wt7s4U$28Y+jJC;bokVENA|VXifkP}=4Qe+e4Z>5J^=v;CoBL13X^5V^s{YOP^08!8K~A6>W+Xo7jm3*1xL_ z%g_6WJ;OYKX0V?eW{aZ|(Lwd7@M?{&CV%2myjhc0)3?#`>qZ+|aX%HCoQ~{?s>y%> z2*dlpIPK75jkx%M9RB(CT@a5NyA97~n)9zCI@T$SkpQa3w2W3={n$I{|&&n z@PFR=zb^X5P9vfRq>;tnLiXNqyCq|LN~d}}<^L^EcTLsJ?&G5tMVEa+LCy5ptIz%+u^Is>Dw&8jvRrji+U`|^<+w&pzTi^7`Lf2=vH%6oia=bPA7 z|B_W?QvwWAww0(5qAMyWWZ7z9Z&(*1SBOlXb7He+)$Z z$VPzsB7>_nj9)Fb-ROugXfbzNFDimNgU7lsDX;96DWAs=btT7nGWk@S9mG|_Ygmz^ z1m4!Bh#vW{V;^|8DBzsbn1PX2erlEMB6d3=K@5XZe@|x!5qU}_tY<`936DqpnQ`a< zk$DLl?JD8qcW;fV{MY%RTn~n}97oMIh+~|&@y%2N zQ`BrrE=VgNUu3&H3IqsAln_^Nde;sKOzfWRJJD%cx6o^IUwcql2m+hS%s2btxbYV# z?FG?JUD7FYVp1E+gw5DZsN{v@FXL_h*G%qeJ*}ekrQ&nUeew9+<>%?D4F`sjJ1<-0Z$CcO z)KXQix%rH9{O{Cr85;LHRdbFX=sKK?MkWn|-5bR{i|mEID8Hos1Bgd%2jzy27a0NP z3Sy8}849?1AhS*9U{{f~eM3rD6&ojPPuDr5ENI0x&R#tTho=%F;IOfLWv-`mys(?1 z`YfbL_d`dG*FCr;iW98XV^^27ZOZ}P_}yueAOExg;G55?toBL1?Fpy&NE}&g5x;zw-(2j_x){x9HugN=S_Tgr;% zP81QNxgX4}FXaNuJ$dz+`DDjrKZ9Aw4*P}9`7BB)o`^F>#ObyhKJhP%)w z<$Km+x&C~71T4$l? zcfQN&J;e-hAsV@c71k9AB80}>Zy%FPaoan#sj}mck?}?@_VeOhUP=max?O#d&O(R( zpsV_*@QUH2VqRl0X&(tzuQ*im>VXbef4F>16LU^VQr16j{Ajp&S2jD0HYZO^#7-Lw zUwX2AeA7a{f!9g?>0Z$V=SuR{=y?D5(Wa+8t5l$1q)cmuGhqGIf2^r3tiMl`CS->d zcqd+`^@1p|rUt$H{+$MR?M5;Ac|?T86X5WM8<3VdmKLU*dIlyaOoS+J5HOppp{R41A1p0oye!ug~kJ;K7wT{ZQpen=^RtRA~{YIXfH%$w+!=FfOrfhOihYOX-7^Tcq0ayappWBLI#WMF-TiBRSEVKcBPAjGJ(=)7hqA||qK>Ot3aK3t`;~F%>`?&CN&v313T7WNs6AIY7joDo7$M~jBmOoY{=`>NU;+w&+Ka&bD3xiiMDQuS=3!$a?rJAWsc z+P zVx6!`l13=MxOGxH5StZ0h6m5%}EuiFzrw`nC)+*I=p?F7h7CLjG9ZjP{-F!nb^$R1=8MG zH+a2ovnzy8y2|mfsKLNcGbPd zzx1QTXiq*lV4v$aC_XZ1LwsfUQ`OMpO25V_fF&3Emt%)9tbs0m9hv4-@AQZz9^OT& zZ`M_w%&%&!bUV&!K=a&)UM%vXbY6+T*p(5JM0*TRo?@R#M*TWa(Q{q5EaP9xY{J}s zKP8N_pA=J{|G8rEMT|_G$L@rd8=N0(3adRG!Tr5K{jDRzv8Y6OQ%8yuHFQ7R$)%H0 zIzIr(I59>=>}jIi17&QIzNon+R;#X@fS$sagm&Rw;Gi*6OeK0Kto;-J6E9Ah0$tq( zifQXQ!UK&lAL%L65Xma}xuPV;b{Gup_sg0o1$<$f5ir6*tb)4p8DR%%coShBpDAT{ z42)*|lOxT9mUrP+3$Wd6>{gH1WU?<3i+O&5;+rMuG4#r0KXxk!Ozsv!Is~R@MyMG@ znRdSZ>XbMmT-NA;W)C_v)tsmvTN$ljuutXaxg3@AsLvf7ITt4t`%fXJcPz?2REJ&7 zWw}8zUSzTRDT97@xfFw&VqCQ>=@mEve{sxo^6fe2AkT9-U?|=0m*#?=y1@yb{m~Xh ztghpo%xhx?eT@#erYO?gPMAmOVa=B_yPEJA8_=3FS#hP3)owj=#qZVmiKEB_zO zDWYpOGv)&u>$V0q6LXE2@81Wl_jqK*=BM@93&6W_DPh#g%1nQA73P3LDc?%iSFy8c zQ9ZdSs|+pXw!!L7*6r>itAA_syQI=J8TjQ<52?Cms~-X5Zs*&T;-Y1Pyn*+yOOL_z zg!FpFIGrU}lkg=hHB;^aaFpw%>?G3Dh6SNGMe|+OP$T=O5oKXVUP3Q0OY$9c*!eit zeB;3CYyR~mMvkfnBAdU3wC%m-?VLS15LDom+&)&~Alv0%5qse$=MYWCHbYWLhW1*d zLDxu#hjldVYBD+7!;2zTgL!e=$nL>?MwEhc6-+N0q?1xCCGo%dCbKaw5fvuaUoMxVn*o`c+8(*9(!)`;xD9Xh-R`7r~aydi{G4`X?!H+vhe4igWa=LJveUk=~8D@qU1fa+>~16mBena zh3D6u_K5sNnRP@x88T)XJO)ZZJ4??>`~3H8|H(C^pn0|VCG0G$Af2_#=936pc+Qh% zTIN^VBN#YH8ACT=vYez-WsuYeuUT9Sh{=ZLykP9k7!C0OxvQay+I#t0q2@G$tZ+{> zfxn^WqpGJ0?IlFvbz6B#WyAq{t*TG=-HOPh5Mb`-#nh!XX;gZ@$gr;Ys%h;@pr{^Q zOwYUFivl7S{h-JO8rBujbLj%SR&2HUFmbc+JoDx#R!ue?cbK>-DRxe~i4?0swHh-N zjONvuN=%K4@q>L(KV_%fzG=rnNRVgygkUF8odV28BIY*y3zt0?=_FY71i1m@;cj5l zNXKIKbS{RvGcg{YD%#6fPb!Ds`UddvZhDj`QzzU7XZy~O;_hNFt>(J>;dEkTgb4tL zZ^2$94%8Mfm*DE3`iigck{#!k7o7&s%bybI2S06uavnLGu(O6a2(tb;!Z@OISTX-2cJ1ku)KrOJDKv{pXb}P;Gtk5dmU`+o*J`G1BoeAw0}8?~2BeO@|4JrJgvmg(76&ChQ*bWr;Rfc&($ zihjM*tSXx$%4VXuQYmR~*QPzUxua*w9X?^|jRB5hE37e`7eAc`Mx`wX<0Xm(jB%|mQ&tnl0 zXVPd*VgrLF&dIukcYd?ieRf0QrVLM#8$U%FX2nHXR0B*j7~h$iW`KqsFgmFC2_YOU zGtB4W1yfsl+8AoonIkdrg=mpYoq6g~zx%|Svwyx`HkWC)aPn8Y*27W{-D6+Ozw@_` z8oK9T@XV;%!NHh_K_E@PpUE6KHATCa9`L7gnEeJSyFIp{sImqgVvi6455MEx6*9LF zz)bSL>D@I89ONE5v3rNrvQtNoz1i1w;wRYSy6HuYXp8TeeL^S8yMi&r-53-Wah4b0 zgOxkjRD$=zl4fjQ7bFO-0q8knfs6*y3=D|tE4BOmUl1@xa@_C-C#gFkIj+(WH zS)yu!@TaTozAjpa{W5$v_R2kuE4=bJ-WOGZKMQy9{$M2NIwij3%p}iG)x&fgiOzBO zrmLLO!s2*rV;28}hdsyq?ySXv$KVq>n&D;eq)5#vs&XP8M#l@|xCNMSjH5Gjy)d`W zv^tIDXvWPs|Glwq(|?rn=*d)QG1_kR>Sx$ZoBS$G`Efd*t27^``v2N%$l}BDeDF>j zeGTi_G*2$1LKrGG}ISyWY$m?4sZ9Z&ecg16_^q#O=ce zqlx0Y5KOEc-{pZ{t_~IpiBB7&VW3N(LPoJ3IgL?#h8dKp;r<6XWc4Pq##A$NP5YJ7 zz7V@Vp0SI~Z@K-bC4vvWeya*tOJ&`u(#>l{fnxNl%`b>0DS_xPH9`r#yvkdK1Shh9 zGyMF5nPxEkJP0i<<4iP~w{+&3gUbBcGau6;3QW91(d&p6ELpuc=TE?{{i2dD?Ph1N zn$(7z+kV5GcX8IMB)J#ls)@_1O~HLm@c9OIWy;3k>{ze&I^YPmZdlgC)EB5B1q3G% z6ZgAkX==p0xG<$Y*Gml>+skL~FekbNhi_CVGe=d3&$*Bl4$L-l#ATGBx9fPBak}yO z@vANBy6Xdw(xh(&cCq)-bWlWI&d&hUYSlIS&El+;_WRL+;dRx>K7Sa)2qWW0^`Q^m zJq$Pozp@i`y`ni|kr&)$&={+PobcclTw?o+qq>|OEoKb(m24KYXK$uYE_aW6rLwT# zRYxw+(PduD=Ow)8nd}`Jidpkv`RsLzsnmU5jT6JxYNfnVcaD8uj2g;08h_e~S1L{^ zX@^y;;&m4s_8x7Y$?e(fFRD0_AC7O>PAIbv8o}<9BFbbBP?p1|jk9S*bW8UpZDOPo z1ywwY-;+93)w+(i9Ym-tN|7#D9WEO<+Q+0;jRli}`2ACjJsSX=I&^tNHS0y_6V?&F zM*01-$eyEx=~DI)tu!E?Z*N(uRW`-A|LPcxd|?sMv^93Q!NNQ0QFo)0gMgJxEk^|o z;U-K8inK0=`6m|Seyrfwm`Q{?(d#@|P|&M8JM*O?)k7;*zf%M+WnU`6f*M z9>6K|Nd#fN#9eP$2B-V(qAI0_fUZMVgq6UiiGyL3e-}gOLsp#4#(f9EzI|eD&@|cU zHvTk2Isphm>qaVPo?2+9xdx~EkQ}NaiGgsw!~+g`oztZ9ed)d~>}#lUkt#NyNb(QY zvv#O-fg6@c2cUcxN*$P8(<6F<){6s4fZ8SoWqm2bSg&TVCmuBoDmi@VcjKmL3*`@Q z8`ESjD}!*UEHi7L#!U`p7^3Muc4K8gHh*RpVE*N5EHm3tiBBK6Squ8^;T$qe)u|c3 zvvvB#Y^#oET`C#&QIQWi%%U@TgjPbkfhS!-W-+T_+RxecqeBLMWg(G_0l@0F(;|~| zV(vT_x4++XB^4Yjf?x&#n@t7x=oQ_9%cP0RUiI_#U4{{iA{2<6AH%u+`} z0M?P4b95iW{v_fL$MjOOKk>{6TQ{{>L=4VBdojWzaXt7l3m8i5(#~Z!q9?i1wMzy- zy8UQk9L=<^06$4Icw?TI%gT1o+XM7bXH;H9z-Vd!Ab_NFZ-sNwgYNBKyK#swa1*sV zFL?cH{E!deLG}wOe5$B=NB3 z>ojqZFEt=?E|Uyzaz>$(M+~cPO^8dv@oLz3UKJy0N#R@8tTYR-{Ik$B6M2qV>eUEd zqiyDwC9eVn4*0l$1PyWB+Fke>J==s`d44K-+N^h-i$;Ge=AtZ}5e1u; zq1?!1NfDevMFB-YBt-2!WX;U`yw8XC)BAh3k9;_sbKmFO_qneBbzT4CZ}yT7e`XpR4*47#`CyJ^gE5F(-9n~|pm0MS zC)39MRO5uB`gm@}lfG_5X#5mhA;m_FJhVd14*kk^8L>y(*K`A#KaTL`RDug=wVn*lTZGzCfoeWTJPy#N&lV9uj7FHk z8emPjYIXp1y;Z!t?$!upL+_s5$cVwj4{fT;>)Kw#mzf6vIm{}-LDRl=AT^4fYMgEm zdnm+BV~Nkpj)%+bN&xL${gxS5Fy5<+OI7ysHyGhvlZTQBm7G_D6E8Y-U!RwpG^|8A zG8K?VQ%{EocrWE=DG21#@`IrH`n@YuOwLVW=E%&b)3+$xES)Jf= zkSv06pFvjaTGs4yOf3gXoJ(du@x8Bc4H>q_{t`Ca!B{3=$zKo&r69*>D;?Pn-6kaq z@K+36BoNygpt z#{#B>n^lOldl$aEt$2GOP+n_8UYPVT9_V#&7zY3D%8LI6ZlXE6^nZm(s{W0R^~P^p zEv&2j1km0vu=JZn9^fX=a~BmG8{H`SYMA>|TUx@cHV#W$2{Jmj=&J?qFLCSt5BoYL z7R9vBv+6lhSPdYUq-I0#_LUNY27DwSn51UciWG0-{jAH90WW#ubf~k&+UO9Xf7UG~ zx5LM~SaoDsygeX~#NmbfFKrLsNIBaya*DPKQ>cn%e?G|VIQ@&C&!0MJ;h#x74I$_i;^BdQ(c3-iq z?3vlkJ% zrTbOf(eSW+S>_-?VuiSp?WwPT!IMmr`kX4;Uw95=47^TFqGfOD6iMsN+6~<~;O{kvyR!bqw)k>Sf2cnSMe4`o?Cf?`ROl<)%6;qm zuEzWgjUY^N!Dw5-(8wrqBxsf_IpitK9_AmKV9W)oI&ILx_Zzo3n&Kk95 zA%67ahLu+~4y^a(!xFd6d{}cxyOQSPf-SMYxuJr~O*e}VYNg_m+zfI|e!_?jniM_! z_k^m%p52napgnC*U!gBxU8R+E6p$0#K$Fh0KpNa>IrV=4@7n)J-4N+*+qUR+;g-ZYR8^#flu%g_TTt< z+6U96I=hFA@9)7p>{w4`kFiY1{d4SSr+s?Uy$I7rNOKM)HoFxD5l!WYnri6AiD8$n zD{mDB^?1-Rn3DURBb!;m?n|wG6+BUGy%0pa1-Jm~ay(7$c0uXoW@k^Nh+q+mK1E?|qGN8@PeaOIMbgra%t}hy(8f)|U|~@gQMB zw!Kj8q(}l=QbzBdGw9e=gNtr|VyUg+KQ8HtsyGG(v0vLZLa~h%PnJDC>!hEtWpbhV zj-*C_ok-W^keM3Zb4N|e9L=JSjEA+aV|6zCOX8#AE7<_iP3XgzPWi%p&=-DGd=Q4( zAK$9v9G#;*$3*yL6t{n-J-Zj;Brd=JZRhQ_!H~*x-W;x3`mjELPUCyo#5BL(-KI%P z@jGKn7Tkmi)MXLmL!Jeb^PTPWKP!9{o*ZFyf}NW}MwPDsMpqr+?<%VmaRZUiJ`Z1l zqqAm&p}ZWH!LgZYMINmUi6SGHhdPUnR@4ab##Cv(^=se7eKVE!=W6A|UbU^F${l4F0&VxNO$E?%Gp2o;+RMGh$#v zcwmo7FKXPs#5tSciQv@gwH)5eTEH~*VPZmU6hS7bCOIb8=-xOkr**S;O({*j!Oqlb zsU{>=8TXWTao#&BoT5x&?ztkH$qHwtio}SFfs)xi^U;0U!rbZI=wryDj%%IHhk~um zD5y-R7=>(?8`D3=pQ_Pt7s=q}gh<>f$9HiOE%KdORjxA{%imPe@MK$NDPaaV>RPzI zT*F&b=)uq!>47)Oe7JkEf|A`5%|8b6LVs@Z29_H|c+N)U3p$x0*^HWjqG-mb89tou z8Dpbcbi#V``?Hm6FIIST|A-=ha@ELZbtM-7$t0|jv6Gl2iBjeH=Ascnd5bI$vOs}8 z%(T0J(sPcuSCg|#aN+(q$i9Aww(B&Ow=oAs_TSwgmAKS$(+iWxt_t+Ia!jCH|D|n# zqby%!BXd#t5;lVR#7SIQey|8K;0cHuh=$}W_=Hai{h*(^KcS+-dxB3fxgk*qI<%Rl zGjG8;!N%RvkgCz?+Nn5`_8ifR5D#G{R*YuOb}8j~fM=mSRITzIZDxBU1BR#s>>%;p z96hPm+|NL?r%X;@R43-Lto%iy7OzWY!P~wuEp>MV#f{5ko1^8GpQ|m$2tz zVSKwKD3kA@1Uzm>rW}RH)76~tsV?ovSL}eU(o9yv79d&DsC0>&2@nd=6%iy9H7TeZ z!!uM-P}qLzFwz?`GfYunT$BmoY0Yb7h;Nhsc%-rd=0dYO-Qx~byG^E3V*?H+Pd{Ac zV74y*`j-R=$=~JuYHE6u`(b3-hPua;^Nhd`YZzUt8rydAm;4g|<~tpG8q<8#S-R)k z>jc?>aM6K_lS}Yd3N>xQ15M{_SaVRBe|Q#oyAwZCtXyY)-tN-A@%lGmUc$L=z0T#CUU57Q)2K8?Rmy#J-^@3jQR{JB)lK-!K| zI}Y|PS(*G<`|~F__4th)?+faEws*^DRU4Qy*-VIv3>F&2E&z7Js;1l7)CpSFOc-Nb z_(h+!jO*!-Vwo@h6jwDt)M3cnJ-rYMecDI*RbZ**?Z`8f*-5M0ySx<)1ac6~cgxV)>OV@KeWzLu1Sx?MN9&rXqG*Rl{^u{wKaV?3in)3+xWYta ztvp*-6H#0OKXDKO63CAhLhhH*eZz^jF*}k`PikgCHUQA^;up0BvThi`KOd_KYrQ+B zyOpzzr#d!Ojpj0G{cjIrP)w6*@j{{bBOPe{Wt(1nY z_U=*Z1{^^Ev`CyRB-0ieB7&a7-_&UeRc{a_44(Wrepn(v+*3Hmpls~#K+1Q2OB_J9 zYO!+RVxrc`A1cG7a7e)|ZszusYiB`qSfni2PU(^95QUW5#{u2e{8Y-kQ``c7STZVXjApyq z@w|Wcd!}5LDq4dx^9t&52p1a^acyo!V4#%PH(9muqZjq+193!!u0bN$-d+j<*d860 z3?eW_bO4Yu5s=h}!C-^IBs6Jyn|fnZreTZ0&enu;4Ag}pK$SAd&cXCwj;-o&4}Ck< zzrnhsV=<)g$c!k!RF^`tUBN*%N{G9z(a#e1ehd7ys>VQ${kkqg2M_rAm!S#el#JXm zg(xalnCGh5JW@F40<~ChwktAf>y7s=F9Qu*Wm$~avTzs?Xy+Nxz76NW?Tur~6X}l= z5(iIKduI}D>0k_+2iU(g*UMc`Y%7y?23UZkQ7jty_d)fE z$u|A^)`WVTJ5?_chrIBVJigB$L!g;y5m7;W$C$E36Tm^mV97#EVOooH{6&aAaUgQv zmo1@kNhUK;#Nyj`RWo&4>mHW8yJCQQ|)We1Fp|dkAbo*`OD=u{LYuvw!B8zFcCPd z$yX6Mz3q=yjhfJ#Eb$@D6=cLHGl6H92Ab?d#~z)p5JqvtBf-~|$CP0T+au^golUgYfU6q&Vb#1++BqMJQe`9UR9QAqdPP!a;!6WPAf^csH4;K&6T# zFnAogCz8rOz}I@%*Y{wuFC#pLN~jhE>$?M}{|%gBEsFR2g8F0fLCMM|8U$O&@cYy~ z^ozJuz|3uqnSqXuI|kYO8E`9fT@T3e6(uOFAD3eVirt%ST)L05xdbEk8M?B66^yaw z(P`;YgH(Vke>0^B4~1q>_;072#EZ>7!63oD3~_eEZ-v3UJU3<{8E?t>5w-50DaqLQ2J~h7u&$3WZGrkx_V& zne;a}OIXFt@clGZA}4+#+S)-bM}Z`Bs*zM#Kae6PQ=X7D$|zlV{Vv}R9CvGG@*B|0qgUHUn`CCgs; z!lZEFn_NSth56`3r^r_2r|L3CA^GmHGC8qm!D5!ndErT@%AypS92H W7x)$-o!d2sA9Xr;gy3-Ir+)*zq%kD` diff --git a/doc/dualtor/image/difference.png b/doc/dualtor/image/difference.png deleted file mode 100644 index 52b08e1c5e6752d1cb97b41c807afb1fc90b51b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30622 zcmc$`2~<r`c`bwEV16q!j=8gaCnrBnpH8Ap{6X$oyTfec#{uzW2Y@H?EJhL~~c}x%=#M&fd>{ z_H(^^+Qa#quXcO|0)f79bvbqx1o~VH0{<^+0FbRe!Ik^@ooPZ1&sz%bj1oDLC?*pIH(1=4bvz z=f2wWRmGX0HO5bdzd9m}0)2D(M+o6)qm}LxNL-b55CxOg=zr|Ql@nJgzX%(R5eHFI z4Ur9p9b!c&uKF{;icdep?~-x<{u@Nx{Qt*?jL2jhPO4Q|9$mNd_Qp@YrjEyajuY#F z0)MY*`x^AY>~-!s&?~=npcfn3prH8m!=r0J7k_pC9Q5nK&q2d?#*9HNpNGwXK;|#@ zeg=B6^)t}y(FNe<&#aLk&^F&qYe2pm)_~#)mUTdf*5DmLH#d~u1%b-%fI!WsRcmi% z-Rv=ZWvAt9RYVwBIoAx+bmQcQD0QmEZmj~Q6)@_x8m?9ud2oLFr)S=#KEY&2J(xag z&|CLu*1S6PYI064*C<6e_CDABw(NARl&fKpu&YB->d;>^KmY5`$%K$zsCtPWiG&ik z>N%u#JN^v1N%Jwu7#sQ<4HP=Y|L{;yJakGvsE~iFQi*9=y9Slscd`#Stw^gTVsTm} zS3C3-?AxI?w0j$F$O83|^UNa5u%EX0;$mSZb2@={Q%|*+C5nq~nOQupSG*Ie*m6i^uB5cWHK&QL$-b z+?vXd^YSO3oYu^rq#EN?vA4!jl4H6jJ21rQNc#3|k|mp1N1O1kVqf))5%pS(&x92& z%VK|ZM`Ix3rqYCcdksUtp6Y~yft1}h*RL2(Q3FPSAEo7)pbsv)f3>n6&HQ%l;8`7V zA*D#RI#&tk8fqjYs7~P@%URbrKdIe6qg2CO!?X1Fsq?h89@Y&8F9HS}6o+0Ae7cU? zXwyI5KTcLezI`5my&|%R1@pWR;_PY(_tC@qVQ47g)KZ1G-SaVpidOLAF9d2UprZ~17lf5JCVaD^{v+2e>D*+4>&t#fu2 z)-P39RpGK;310avCoI^^Sh>d=(i11NFMgQD4>c8N8`p>sOYpht1JwG~xuqSyQUYa( zJr-q>ZrNrMQ|KAwP<)Yiw#;gD3QM9HYA+Bzg#NorY4`NvnCNxk=$Hz3pQk;4*jzD< z>}?8I{IUc8JuFoGRNz?NMNyjWeW*{!u)fTQz&ajs9rw`rIQpTe;`A(r*3~l|!(CJz zZ@26;NGXdCSQk6H7^(`}V||bIMd(X>q!CE59hd?63 zJFFJMQtqzQp+i;4=g04bGHz5c87CWY4qaY~TckE)jZ_B|e|C5je2DYsGR1x}_yiO` zx|-dfsUNA)V`)|rOfCKN=WpVUp5+1z_mC7nEJam{TT zYw3LEj%{STY(%tP)@Z=6i|)7sQ*w#??2IXvEwm6-lG$^N4| z{iKxFgMW;tte1#Y2O`UF2j#1tM{e7=hx+4aroI!cEr~vQJGkIiW?oYymHtKBb+4IG zTk5>yi@juXQC)-wmrOyC(#_31Lc4b>?fq=j#@{*q@qWi;e`60Hf$x}|OK0tn1ox`L zswY7zIXR!WvXZKRN#>-L1j)zCfuRx^6fNF1$i{6K-en zF(CmXsT<;6VN%=^y0XPcJ+$HS!PWTL%-^jSla5}uiGJc)6s0~#(KO6=s?sYo|2rYQ z_K|jPM_n7Vu(3H(bI^dw#4b`^)<*|Mbf;YEJwEZJc@C4^FrG8^?#(ZX#Y=_+ouR)O zyw;(fX%@1ImgGz-G`F2ZLQ5I`X4GumrqY^Q@%^F19L3}sUnr`w5u()W=6@czVKtES zTx1nnMb&x4Xa{pGC9*ojpL5MMSi_1tQnS%a#CNIPf>4-=^b*C3@bjdBFIMO-UpS$9gNJ+dm3#Q1v`G z@Ty|s@@R}nE?C?3m%P6lN9A`XSqR= zmN0JBwYlCiz1?w*7UDlVzq3Q8Rmg3PSa)XyRpLmas}cRAww-djOYUfQ4uZYZAi7n! zVE-}JQoGi*z2y6tgSF&q6`hjHZx({lCon>P3#ol^s4K+LqY~D{Z#313@N^{e_co@@ zk4j2dl9G12{V(2#->k;XauMB4`TC;CqdB7B4~9)ecpwt-&5MA_=7>#jfe#Z!$q9X; z{;DCr;$tI8l6Sbc-N%3H7bT8Y-RvM}L(M#p$yXzbG3W1z;9Y&~`$eIaKD?SH=j<{ zqpbnL$0FfVkSu2GGqz3Ha4mg6wvK8)a@|}Ax5^ZSh6_Q%Y2kl+5SM?1*-Hc;== zE*#zEt~^4DJ=?EFu(LCil@a)%yh6z-RLON=eRO%~(0m~#Ttj7=dfFwe>_Xf!fI1va z!{!Kjkq2UY^E;d}ZMNHI^Y%L9vqx`Ek!`G*ha0o`Rf=D7f+j8vFH_!3azE=^ZU{>p zaK^Oe(22RIt(s#RAKy-WQUrs>v7MZJC!>=lE9&zKRae)X)>NPVwIv}#FNLq{x=uAe zOj}w{TmSFu)SA@hC$<%9{SGZYC?(P~TW?ev?g)AVd8|`t+j_#xyu!qhc_6I9yT z`BI7e<23eX;tqd{iR@2-QN`vX9fdlQ8fGGRO4E4ay5W3NA+$AO2P*+{vBJ(-;6v(Z z;x9)AyyZDiGbU=riHpyoM&W+4k7B2P;h4xtBh2Hty%E3qgy@u47W6)ty}|3PBD0&a z0`167N0U$R?1f$%ba`fea_tJh(*1y$Z}-)fe@@sobPNO&S)={l7UkqZ*NSrzixqNe!KGh z_l(U-r`sEwrq(6n))i!J#5=6slyMpN=fxkY0T{2 znDJ3rUmd==M&cSyI;|262V{h@QEJTNG1%nzY{CqA)?08*VULPaV_p3`P5f6J06wu< zyK!Zz5#}2ChfJN_hUJ>cNbQ{7EV*g!!sqeF7W4{y`mFHHX@Nve;c|(^=;V)@3k!mr zr9a1rwOx(E+CM7W&wI4?24nrx^^_$bz? zFt1n%c{LJzekxb@CFK4Ebps0hK+H|e31il?22Fx|4C?7bDa&p;9!zt5@>g2Mf~(rb z#ok0})n+D~xRLBU;~O1V2Epo%)K?#$@(b`+btB^*kyC0HkOf3ZiB)TJYvlzg9G0l9 z;g0xOxyCh0%gLtH7$Miu!H<#{rapk8{^~BCYV=EG$(o6mU6eKQD-Z+jl`LyTqX^ZL zPARg9b5+8}sAJ-e&3kk?@P;NFM|8ig#(C zs+fJUI$t+!1|Nlru*=jdNY9@uN@0elCj~Uv1GX-DR~iz?Uo?!ghk9V0)a+9`PKA@>C`({hYrC{*{NrM) zaW}PLH@ux5gt~7)Mf8X`ab!-_!zH(9cfm!^E_8Wx2vm`3VEW~IC-m(qg_Cn(n0{1_5Lf3dFc8MNBR9pxr_%MrzWCC-xn?Z0=5*G7k&`XF| zJil+;FQmJ%%b8`@j!j)ThKldcsGL>~XS~+}t^f5&ou`hQD|DOL*qH48BM0=_F}4Gj zJQ?K3Smn$Mn^J1+095Y}qe8vEz{GmNt-qc*O@_Ry_rf0@@wD&0L>&(uX`~Hs7z(eT zX_{kv=xpBFqYX1dJ^7p?tz~B`EkkI?I?DM|*4G&fFMs7?ov0z8p(F;%Fv6iKG{MN- zl$mD5iP%HbdJNO0>nhV7(p-U=wrBiR6W1+&5y>BD6mjk71{uw@o%QboS61RsLE5H& zPC@f#?QY{&XczI$>wAm|sk&ZdzEhrVc)}~`&WNIVvE-q*j=O{bhRN2@XXLf{;*6wU zd#+neUMYdb9t!tavA*zSZ0jRcBk6LK$5P4M2uv~g9ie*32xjUI1wVo4#T`Z4cv*hJ8WZ2`9nz;q((-b-(n}as;Lg!c#$l#IuT!Sct+8 zTcbU!la?PYO&2fLz};73Ai?RMz%u8pN?$x(hjOv6p@WUbmJmiSN}NWY1vt3Y(~o$m z#T#u6gZI#=!f=L;SE*jf(8K(>X{IbS1G|Knd@-K$)poPewDCS7p%9yCEYF_2^ZsC> zV6u|2rWG&$W*Reup-?l!`g^fw<@qOtf?TWTMc78ETWAM(qRxyuBN%kd=&q&L&7N&- zZy;UdR`zA+DHmHW(u(b-6fX6sb8{=nAqM|XymBmGwlQqlD}U9vU(;El8*P4)2bK-` zj&O2yQD*Y@gm5E&EVGi&2pZ|N@JON#7RWjxlCKvP8h9)$Nlr=`SSx};K+9j=$n2}x ztQ`=|DzCwsLkD+Dx<%I%!J;BUXd2tDHe(aZ4pOlpJSzm&dx1H7tt&}f@sbHoLoGRU z$fEOouuPMc7!Ucc(7a#cetfs_qeal9leba)AmfVz(^DVzBpfh&iGJzU>7z*B?8KB_ z61f=B#PhGuo+Lt^pG<947Uv^=GCXJ1K)4kX4Cf~Nlpm7;L=dHg0$LKT1XXSH{W7;*Hb%tyr99P)@OK^%g4K)g@I zBFf1_v=DLK9_aNFbZ6yb!Rv`rjGR!{IA=rv?`=@<#j|N;3yQ{P#o4nCtkK@wmF@iB zSwUr^MZa`+Pa@O{oHF&EJL~L~*i}#8njE<#a!c(z>u($ZK4k1z0l8V6Us-Z%W@f%I zh~LQ4o-8w{)a}h*Ybx^Z4VTjLo*g_I38W?m9I_NElek|wL&YfkAGtFnb-TGU0?~(# ztnr756}ba(Ws&uj?eYBm#$dwZ@wth9DV%n8 zrV222=aTO~vE!uxs#Kp`d|j<~dtCu_YP&Vke9`^5Q5}5EY$4Aoq)Fyd(H=XOn*4Aj z;v8lC31s0_kU-Ht4&+YRpe1m|Y}%SS_>vDfnn{N97N$3D{5{UgoVD_p+ngW&39p;A z5u1VI&hepDHzL-&khq2ZHdLZ1=@gY}_)n7{)ZjYUAgj| zGzkPk{Y$v5T-iOVw+19#u5F_L)Y3whh}`TZLQ<4$5(BDLi6ak+s4^~2Th_Y_kYx3< zfp^#mP=`eL(wvK(F(v2`R_Y+7dqUO0Yh<^3*cMnlpQ+Z26b_yA3Vs1M_Zv|yTA|GR z0&k@)=XanG4zgkRv?18P`(H~|vCkce8{TSL@Yih=8Q;?2DSG4d?}QD%UvMc{mibnW zj9z_RFS*b+x=#}jpC+MlRS#<`VQ**HnC_-Axb}Q9j^5PT6)IZKS>$xUu(!%&<29Pp zd9*_b;|9Q=^(i9ja8%8d)mqRT0A&GpL_pRzzsyWpA3lJf%O2|JQsHw|rkKOTie(vL zNle~`ja-6{A@weD?D8w>XRHri;I&`hVow2o=a|@m;*+zoy|m zO_>J_!`)&jkMWm{Pn1h}?$0y>t&j5;Fs@`2A|HR2n;u<=tc^O4YUe)lG|jQjfaLk^ zKvZuEImN13d(miV6mI|d1$v7;q_mU&qbbg{ml{-`LhW2u8I%uNZu81}q`n@Jyc07i z7LFRR)ALxFW7(5GHqrV}pNATqQ3)cC^dsDsG_KbLvQlCZF;;nvg*8za%6#QmxHgp) z=PdH(?^gPIX-%EaPR3PF8@R(jzyzMVjMZ*CyTIaVv?E@!Zv#?WUvF9^AOtok=_0DuG~2T;5@5ST!-Q7uZx*ZRjyZEl{>w`4mopW!(%71qdB*NZ7T z_3QMN0{0r5+NMK$ap2%WC0*rCbC&|7J?n7832SiL-)ej0N zMK-u2#5H2e+|$M*ha+HyC%)@(uFoN2q3;fJ1}LPDadQ_`c*5f|DDthuG!q#8`$XIz zL2dQNZ0b~G8=0Q=FaQfbYEeGhvzZhmh)lS=Lze3}_XA2|>ClKD`!3&0-W%E%u4oL3 zi%`lvV^p0Hd03AM!xhhglL#cCA|X)Oy5!hQAzArY)^(;aA9YsdjOBB1P?8ZM(Fn{r z>^XAPTs3!vdp;FEsO+b?xs7+2^LGMneAymhRVhTX8&B?qviBN?)1T8ahzA8k}Ieb_CSPp0#bKz``rkiubnk%(VPXoK6*z!2G8kvp|;oBw{MQJP)WD6=uUl11yJRa)_?9*TMkPopRsj7$(V5@K{q zkd0&$8`9RdY-l-`Zr3LnQC4P`sN6a#iGzPv8iE|R0T~b^9VR8`eQ^IZBF|fAeL)IP zja7?6HjU_02ZMVwJzd1{UZ&FejTZSY@*l_CSBz-VJIyi0#hT#9veYV`UC3x* zN<%wAacVn`=G@WVD7B2rBL|ie1Nv#Ka;CeYVKKlLtnG}XoFaJ2?yz3+xhk=GkQpO2 z(r1esp7ZD6M6v`yX~yEt+O_Z3V5#5Lb&HZaOH|LpyPOJ_9eoh)MkbEf?kiXyx2W}X zlI2C=s9YH{yYh^Wf7hC?gEn+J^KT@2NKw)}ZyI8dBM%q}5a+Qp)+yBF5zCOnzp4f=WZr!$ta*cfEv$Chkdii#FkZ0EANvY25y;rrMMG zoH#f%%gnFpYUcCYWnZPR^hH-5i-W7X(KGx!?#y=K`xO_d^AZUmEW4jPutK^TOsqk_ zHA>s3ahEAu!HHaEkStSmn|y{PYrNHh@a&bE4FM(_N+2tOjIq{ zWCS@F?J@=jTej^fUa+Jo?3D5g*F74>?5vz=6~xyW^g>PNOhP5ofnwGiNShl``GrT^4UmRL@cj@Eb z%T3e=q}m#a5yN5z`_x)FmomNGFeq}LgXf9xaAfz1n8)eY$DvWy5wys*+J{oa=>tuS zswqyLd}~>@cOwKf7kt%59*eEP!QKi-YnE-mW`%KJ7$W9}S|XZsN7a?2Ij4Q5-Vnh5 z-g%+B5|gNs;@u$Z$(L#Gv%zy#31P(v9chXjG9i2HyAT0CljbTrti58D6>yk)zJ-oH zPHjw-R!_?hm+_|^<52w7Q#XgaU~4X;@o)US^mW_*t(I-gU7yXMp?#r2-+CY7mUYNmdS>vu&ibES$|wv$SHq{cqDE!4!6tbRDYf~ z;Jb#PJYUQyATKi87p~$drFmJGyqN ziMnwPPjlI)m(%??e;CsX_N4Car1T+fp#D;O(oV-smn~SH!k-Vs1BcL4J~e!WA^MA{ zNSJ+*n5DXJkTx!eQV~pgyAQ^JD_`V~UMj1*XB{CqBdVW?U@2+4Njhcq|TXuv5`h4-xQ5k z#Z+8$*QeE{_gW7Tn#XeIF`+wZ#?yC5x|NG~H}O^@sEzC{g2>!SEJIAlBA-(G>c)B! zhEK>{_ENBV_ImPfT*?yOTFA^bcd^!VWm95W&kUxXHthhgPa57Xs_i{)kl#^t8mFQL zd0__GP?et{W_FI>o~=#`a!bTKwlAT#$^vn>#V;-|vJn@+Cj5_6+wV;$B=&+cqj%># z&L6?_O4F?sBMb57xuKV}MmWjWbjEFUNzZJglY+bi&<$3|>zuD)FM-T0^ zMy}qpuT8UY=WTO)AS@l7+Vl6M?rK3;G;I9i3XgmmAj(>A509>1EckD#d`e%mqcPU36ne_JEQ*{((HHHCN#URnB}myPj+*0-ll$P*p^l2;V&zoqGvrBH zbki!CB><@8mFJHYj}eod>{|?`SJ?1OsVLy{Yrd;GeqM$WMhR zAhBZK+d70j=kC(wz}ui~`lYFNbA^(QwY%G(OZS_uBKVhcDg02*@e!caVE=U4hU*OY zm~i30$ME0sFjW_7{(b!-@muB1mL}XY_EXNmHp+eHnQX_%GQEpNUgA@%+8X!nsK1D_ z>Wk0N)?Qc)%@1tTP2O^fcD-7Fbkfv#a%BdImEk6J?vr0(%-PkAbX2*_6>8kdNNiXH zFQRy4O~e2}U5sqOj5u>?NQS6|bdV~5>>#Oq6KGw^v)o9DY(PNd(Nw|9VP1 z#q7zam{4%oq(yaB3{+SwdLQ0uGz^FFQMuUNX^gl8Q8`c*I4V51H^xsRrA@ zc9c;L26&Da6T{NO94f#L@=&(fHV1iCBIl7p+B6bQ5Rcd{g5~1Ynkq1yLeCTn;QLEq z%5+t4k=_W;R>}_r-ztRP0ZtLy|DVN#JX>byjJSHijIS-;2&rffF_gOqnXVX6NW~

!gGgTd+B_AW2?vf^-e(D$Ed0Ls$ie?BF8ax7LO`v<*iwxqaDFRshf4%T3|# zqNK@nUFk|l>o{FG6rPU5ZA*R2P^%}vIH$5WSc&^da>?(hiWqbzCErNtk{_g;YBY5= z6dm>nAo57Dq>CMM9chDz`b3DCLtC_UYIu`qZn%jQT35mzfYE}x(wGXnmC8=3c3&Zl zM5g~xOoz^^9A+BqU)7@bbvbbX3U)edw$SNnFT$#rpRZH@n08({^M0SH)bW)hHdOM? zK~sp_^%(PP&_MAMQ{Bt#3l%VX*h@xb?p^hTvVGhJjjo!kR7;f{fmZ{|lV!*j#HAf9 z${*x*U1%;+mJRQ%i0+pUWalGOcCtdnj3yuRC2^N?NF7HuT4L9%4l|J8hd!{YFv3y4 zCQ=+5$(le6QdnwLi7&v)7RWaK!+z@>)bQ3kvyy-T+ppE3<8ySCr2u`bLo9qtI};Wn zbMy)F5PKWf6|v7W>tWdDv8v?hYmhQHXMr?3Fw_N9=Rfg6it_n?1fF65WZawt^#R$< z?VrJ?56sEjt1Gy0Tozd*czm&?I-lfKhVnw;)+QWc`P-GaDtg0M2^V@64iI z^Op}ux*Du_-A&Hss)*&pqC!ca8jKuS$}7r`@(!J!8&+4Y%msSrdNQ3BT(rcZ9aOKZ zLE66!tr8_v^&$qU7yL+XJALO3`&Vv$h93USas7S2x!LDN{^wf6Ow}mtDhT+x#K}~y zFr2ScUmVOt1oj+>%IAHB2@I%d6f4P(xcEYui%?xT*-!};Yx)!!_SODu2XRHDlT3{f z@Ke=(a)%|EATRjq)b8=hMN?QSq}x*g#gA7;^xWY)uun}l$}T=5D7zxy1`;tUlWE9e z^j7fTQ==~FG_1A5Vzw6=2yX8S|Bc@TZIr>C@YolwoyB@#m{+c)82(M<#ICwf6ZtPz z>~!xWW-mL$O~$}9RJ32@p@BnTK_jGLV#z21IGEdzs4A50rRH(IT}p`UnVg$490Hq? zSkhTT22E|Q^q+|=uT$vmPGiYZ6)tQ~v7LVqayL<9%{wICYiCY!FSBw>m?fu<$eBId zoQR&b5clwrUPQfOd&O)4T&@SKnUW#G7sa*m)od3mQmjs=)CORh`$u+sfb1~gGsY8jh0alK<0lu9OPGrG zj{5Ve8J0X+TbM8$(N$Ljk#*eRcv2#%g;h}^`$JGBWCLQy{J$) zA=y$SyA-|!uU90bB{_7;krDmoz`38kS!!DnXGTm=2q5(4kBz=fL-BU}L4zv{JMs6W zy_*yUO!jC#X04`oF(A6&?OE0m*;PvMb7E$xCNQ|Q7tXm}#icd=QJQ}>`# zIon2-!85970h4Xg(piR>mEgUyBf$W{zKSS%fUGR3wXfZ^z{$CdY{C~~1KUtPtR?WZFqo8GMBxRDnkg4!T@z6L>~y5wY|&AP+mhsvDJ^AR-!*I>MgSTD>iu@SQ&N|&fWxbfSyiF z{NT>G^8*5><%k8(`u)GM^$k0CsPhl#J7GVk;u>z2koWI){EW9N$a071OwebJ8yYri zdy_*0^%Tk|TzVU&(CVGQISssJF5n3_0MPt`Kp*s0B)>1HPWNySU%>;E_wKM!5yxPQ z7X5*?wrQUG74zf6HmE#58JA|T>B9v;tw3vQvQ(uQVnU7RcgQtk#1AY$k_~!kxT1?j zIjSNxIROsFkNgv^Nq3@RwSN|lasPT*Z~xNMz;H6w^NXImLX17s)RLWE>}abgyzIn; z|MuC3oJQnAB+~smO{Ea&w;=`^9z8oKd+7(r!T}2nK8+l(K_WPID)Atb=;)*e1r`6#;po3% z&wn49nv63uW*Ce%yF4hL8^QHAij4>T>x3Vil;>2NnzEA6 z#uLbK!dFqju_XS)#jAK<-jzj%E&4I}aZNVzwecr_&V;yOh?~ahSxTAqvsQoO9^?hI zXMoKH{p4Q&A?pON@iE>pGvvGXt`1p!aX=ZcMSDz<+56SH&U3qea+Y0m>9CN%w{Ey% z*%Q0iyx)4_`+h6L+GUprQ;mD>&|jVAIb;i5VQc1!^FW|@*i|TLQ`cG0nKnaOfv}6?vO#% zV#3HasLP;q)4l9#;HQ_Sj~!fN?UtmD)2HwCZbfXQM7ARhcwi9C{N_gosQ8K zPQ;EMsD!5&uT+k-UH@pZBKK<=_gxhlxESv=-fOA>pP<*oetWd)YBLka2hLNuK;F(^3wO9vSVNtn-Zh_7s+xrESmAUMSVr@R(`Ji6gLZ zGPkYsaX?ylQO_0r+fvQDIBkUsjL#*A!JS%%go?bfSz0pAp)u;~vy(;qZ0-F9kz8|_ z(0<04?a%A<>(MXR#cp0Mk^MwDWJ;;RYL%@JWu+LO?#+!fQ@YSGxVLnhnFTdF77f-b z!^FEX`ReYF{EHTQw6n6Q4?L$>qm68m-U#Lg$wv#l z6v&d~H%q-+kbQ~|wh~VVR|c4@ON1Qr59eFh8`1h02^)LSbMS={LIm!rEp*cX)MEU^Ya^a`G2x2(tNDdW4+ zaBuE&R#EC9@T1sM&Oap0jYa@zq!Yh1xRwW9u;%LQ=e=%aQ_N|`r zmqm`7PeHDD94A1^OGO^q>0fe%2`(8-lF)vy@jlG_Y-kx(wzGbG;m8n!aLV{JIF;lh zrW*`!7M^)y*kqJ#gg@;Jwm-s(@YUKJG4{)K?7y71Xcf&&wZ?~AM`47q?mANNj>ICs{2VFlDpiC1)ffWqK!d@?Rm zukVo_8uGwh=NH2t#q%RcZrANMR-!AJK1rkX^g3oNjA2L|v}oiWu4H0b?MLm6jQudf z?)WgM{b(Q_|M;*d|IM2&l7e58;jVC+@@4~F8(#B>=&w4ZnnV@^BA*Q+GiD+q2hE`l z+^N4>89An$Qq1El*J}Frtq>Q(EC9IsHAk$FAMg3w{!^@U8_-t$=FaeX9b$h@x)W{h z%Yqv(dJDn5UA;-p#y^+Dm*4MH7e@`w3C=%!f*4RAFdizo=*O6BU)%{UvPDx6K^3Yl z*rbOwIP!Kx-!9E0cPU?l)s~5x7>3s+hD9;BBGq1HA`dkrmrvSnu+8DQ2Mp0Cv*blwAXHLq*EdNrW zH`zxR=!tI4jSOW}@?v|UVlFDY80zvk;p$0<{THQP0_vvMzGqQJff9uAe$4xB4diR- z$H>@yVU%>w&ZJA*7z*Z0l%sQ9Nq+meW|B|i3uszRZjvthy3I6mbQqfqCiZki@O;!Y zPo5IRI|}?Ifo+sfidIuuA_)Ur5=Yr0?~ELXsuc}p6Sy;pd)kJ?%*QGRPeaE3wA3 z$j%(d)LD3(ui}4CAWqcRytITi^+wTQ%(~w8DWKK7;5#y;6C29&Y3x`I&r)v*qTYR< z!zo)fDUIad$ytLoCish+R<=^LyE2`W=S-~%@lP?;hS017kmeJIg8I}1#_p7?s^tr| zsix-g-fV*)Rws!WeK3QP|8mud@_)n0Bt@Q;WND`NJX0@pXy!qtCajPMZ2UOLuZkNZ z;{t3d+`-Ubkc0IDRDB21^V@ISCsX!+cg1le0ybAu9U73X-nNcig*R6^fcf-=7-7^vc z7n_yB{p6*`7Ug4)a4Z3we|Za~E%A52R!qQu=!TB3D{#L1e^My?|Cp-%pHi#)g6D>P z|H^(=qK8$?-$0570T?mNVl8O-7-3<6IkHgy)atY1dI`@HpeUV>JZ3 zUjKv%nWkL%*11(idQSgjF#f{Vwk1GiBf^FL2LBB}LM@-Kz%BEOHG7+u ztC;r%rz_t!R;gpIoq`P=OmaxZ(RA7!k21|2EGP_-C)N{s z2(b0To)v6%<6|a3L+Av2-uK!$NxZ8ihvK~EIA956pC(`Yr-7+822acZP;`Fly<{($ z=(RIN7RfW)taYRY>hIIEe)B&J7G(cnZvdbJ3J*to1Nrp=04TqFelT1-|3K)y&0T>l zv^I1@pRP_pJX`qrOQj4`IxbZ$J}Adl<0m<_JsI1Ki_71gs33>?{>?PrEJ%+9{pDv_84ai#J$}z^Re_aL%dzb6%eiHXa{{(3FfLy|0FGDk zY8bJ!BI4tq4%ykDGWSQYj{rS8c>UcL>2(}d`^&&~H0|NeNJSttd)&&N;rT1A1^XESx9ot7HPT*qWAG#|nt9#zwt1O8s zcFH>KZ`_jT0eL=QTR&~f@*uM)YP+o?o(TWGg=xTxU2@4V(4xPadb}0~P2YmWMRSf~ zQzv=Ye5Y~vUWckgPeYQh*zRsk!aCkH3E_I)iF!2}Un&a8J3r^pKnSYuE{T4C&9~$S zKNTN{IcQ}_Jj3d%!ERW2kBFa9n^IX~*ExC3qgPlbYMn<&nni+VEN@yhl^(0G4(awS zL0-FjmA|~`K#!dq+DBG-#IWPQP&QOiALA*#8zhXRM5Xo)W7;);*z=PYmU-EV8H*YP3LKFLI=)d}j1V+_{Y;?+C3|2Lrd&sXZVm-E1ZCrL`)7en=a z;9OB+VK67-2sdNv)Y)qF)CYRfXMMsMhmqLScM}ak?}<&`%|JKP%FA(tcBNTNl-s|N z67H#d!Eq2ec5iXeY-5EYXHdC|I1N84E5dS~5_49u*!2TIDQN|*O4R#~P2>MqY~6>5 z(k;nWvZ4&GlQeMAV?N*FPG!k*qMId87}(;x5IIvQcSBf}$u9F-MaZZbdbk;dUD@as zm+RT<71ZsaPRr)#^@(9Trz>to4ZAHlRQ+O$0qHj5#Pv0H1# zAJLA5&v0$2>M(a2prI>oe}AzU{!*#2g~Dl@HMhhKJ3t@Se+qvG+n@zK^~__DWTXw- zq1;-E`H4>35p-4xwQniU&`Bj*d!^nU3sI(CvPVBpW9BaLv1Ub3=-M(q_X>{ZsoujM z)%1HpH>H!0(cIOG+pUbsxW+(s81bDhB<84NBfR6x40&-~5BYFyXRkplg=Z%C-44Ut(9tB>7@b2|wus!$L(3^h(TmtAQN*ufPB5;QpyI{TJy(kf~mdBrY z*`HO3K&$gG{_Sz@Gz)rQdiFKAOEbA-*83J+c_8JQD$HTcBa#OtELhk z1&!v*LINEu94Z434OsIgrgH8MX47q(dS%_^+Ust8?$^G*dWuQA*Xu^H}a;GkLcnG z?9j^{HDWgH@0j~w8;L_=T$vMI{PJG=gI3}hsHIYX3}QqinL3xr?+&6KOp&?kE$i-v zPL9b=)mNwA*3^oY_RK>0WAY+EcfIV*T>#=vRF7Z$)+Bze7@8{>h}a8zLwmQJn5c`b zBzwdXw%lXVd`Bc`m1ep1!pGsCvHxro=QuNiPzY z=$}bl59g+7_kEs+Cw>V>ARyl5y5Vs34*m!>I`y(u>Ug*V5Vp`2(TBm#BZSs0FYaKC zFApm*???($joz88h~w|PuD#rqRaqkUP~Tw|%SUga%I^esDf=#_O-{5(l*1zR;o|Wn z#Go%+bVhceD)B^e0pHZ24RxE+T`zV-XqpJorBw*5!??9W!WIWIi;>KRw+KYJK(Gs~ zga? -goC7A03vG=vEf5I~k@eS(%8^99nXJ*uuYuz-5JhSAe3afFSYEmYf zM#zYq3e*h%70El~f0}w84R1ya)>Ku9_~P$+s~%!f1=zCsa}<(VvmqsG0o4+mXgm-n zbzjHtjZf`gA_vc*G?%Nz&DS>jOQ##nid(D~cWRxN{ks=TR2O>*Rqtc@XAv~txJjV^ z?VVe~?2ov-g~YPl%6}5BKQhsxGIx=qW7wjs>`BYE@%jixEPu<80cGc*-(k7vZ}-Lt z2`TI^rXF5HcSlV)@4Fiqzh#u8Q9rWr)*L!YBsml-#S9aRLghIe8K9lH+yTy)C6p3sn9-HNk9V~V zOM7#0I&R8S)L}P`J@l*=JFRrM=Ke5z@_mqdBdp>`H5AXvK+#?YNo!(^(&i1y(GX|a zJ8AOZctbw_()Dt~ew<za$rs?UE7pFkIjj$IVrzcW_lc|CbNjPsOV2`RJChvH1BM9$SZ;RDPB z9nlf%$|w^(=kJR3uwj*28dsouC5pRNv-h1oKijX$*7`8g_g zWwNhqnD<`6URk3v+fqgN!9$CGV~XoU2g}KID2pC<25Ir0xKExloM1fHc2F#Cj(-*k zywI0UL{UWZ))u<6=x{m|nv(Y!s1R7*hBv2ISe(v{V4m0l$jscnu z>K`T=^wNO`aYm~f#SMsa<#U(&oXITNK8?Ww0fG8kbTePIBu1O1b&P}<$>KH1bqqmh z&RF~)mq^^c0-<2=g9DwmK`w&544VDqT=b@gOM}?#1i`VT5g(xyKg>Nv$ z*)KA^8QORiQ6lTRv#~Wxj>QA-C1|XdBJi5PMb0tYwjCr2QH4!E|88+a;Qez?c-K8) zxu&>vFQBv}JVsp8hZbHjfx5E%1Mz=fNpH;V$h#Wh6BVPOSBgXIzNC@H-;L()RGJcl z{TO&tTB@now4c`Z@&;~&r(XSET%r+M+LLSyPpS|`Ph)OOtu10Ieks6S&q^v>GFjZ1 zIdQ~P&$!8hYvwTW{9q2#dtr4xF$b?Yrc;b;^g^6F1dTFsm}ch2wL`^WWc`<*`bnN4ePCh%H>cU3LJ&7C8(6e7Oq(yXmKsEv~bkI(S8SbL>a~+>KRELHj^x4=?6FFa4aQiSZ{|f()>lJX~*w4T1kxUJFGNf zj?oB7qzVUd!YyO30WPlxe4}@TKga2+7-ttESnJvRX3}ZjOQ0l6lv;VFz=S6^DWZ&> z_P|Q7M~1ijM2Q*2rOf?f;;mp-=HYM}^>*i)uMIwYUeuBz`$U?>ge*;$l9Qzy1j?;*2iM%mt=@}xI#7E{dxuZ+T#V0PW9}|7dDM9?-4Kqx$>nEokWDS*eW~jLCR8`MF z_O3SyfOBky`%$M&ul9G0zqu6%s@?VO}fQ%#{u-kdpJD>`Tst zhnuJRB*{64nPF~!8A(v>3dXF9K4v>9_iYqdkrnyKY*lxksR_eD!8>wENH_e*4*anF ztG3fEgt6K6&_~=YrPBM$@1GU8DAt}+u6s-qyuZ#+qJ$mFn9(&+JJkjNr_OX4y%Pa3 zx1fgp$ku5nzNKrk{{U8tXGUOn$>DGL zm2+J6M;N;N@HxZgFdI0_eU|CCaE>O)RL$C`n5N86d*6t+v1x;2F}6@5`iJ>9=X7S`|{q zi`i`<5qp#D`Iha^%tNlt-tQeKMw%U4>(Gt){Pd)OS@CCg3YLTy*P#vNygI#;r-n-+ zIqU4R1?;7f(#-?RD;yra+$%|Bit;uRvuZ@I%{S<*mU>V=Yk9dhusPr*o>`n02hPkHmFW+$@W(l-9RZ8{PXP=NTS&B*K4cTs%t zKw6)&^UhA+o&$}< zDTGf2+~`acV3&NN`SwyK%7l7g_jg+H>tVY-xP}>oM>!{t>*BT{OK2is<9JL~M-;FI z4hbPMu2nWH`%!i6L zX?=+LVDdf2s!=aXzJueE7PfTa6FeK^w+>8Tfv#omne6GR_&4O9#TEGckArpG<`4P{ zK_7U6Tt$Uvl(_l9`tqgNmD2;X%4O*5afJ+UMxdByiO zRq9#>cfW?j%l$7=0C8e&M}$N}9?oOKO>wMvLaz;Umkj8b4R59&H^IDnkBcgSTJmRJ z!)>s8o zJsind2XHP@6rM@6${Y}T?1)EEUvW+~82me7cs(3EaNTOhqo>lIE*q3BZ}{B1Pit`n zXDg+hPAJzd*Z2jyPoAwwe`rY>%WmhIIz2Q66ak_Y`nP;QG~Py)^4eJzNP)w>qtxPb zFwUyc3ET$4<&R9GzB69CS{W{q)~7o|>4zw;Bgen%si#ilTDXjwczbjA2n9t<70>u` zW{$Z{atV~jtC3xcKEwAzlOuUeZ$u?k;Pvhx%VgDJce^k%RN}U85^tM6fcvIF6t67Z z{d9k5?q&YA^GYXUeojeN1;R)`{pz>b-v(fWJSnp@@~i}v+t<>eEMaN@WNVsNBG^mD znQdw#Q@op}@Uz~Ye7V^w#0fQJ%4k^acqqf2DMxyuKUYw9&a3PMDQ8}8gt=ahfwz`N zmYShJM&TpV!$(QDM%KDk$wEocW5I3I+900!fwg>8p=(zn#cRqv_=i3&uK`vsXqBk= zS}Nbnic4<77j~dcZC0L&f8! zosC|(d6n;59tYh5NMOENcOT>eL;sp>Z}wg!?;u!v?=Tv%*-_=#^m(=NX6U1*5CNX3 zCCY8vErELl#8ebQMw==``JlV|>7~q;UP5Nw<#mtBa0|8rrX8O1M4W?;nZ^&Ri@xW< zOpvt$=4lSKheCxzE|7q%8#pK@dOf}*{0EU2K#Q^lT2B5!p5HorfP+OUxo2V;+ z9V-2`SjB^g>|DKJuZnnhi6QBXZJJYT3~gCeail*uF)=^zfHd1yF;)O2L}ih^?)^4xX_V6$3gMaXuRb zXKxBZQOeWBZxkh()i&`m0ikj3c21TuBcDbGsEO1=$w$QmTPK#6D%z(7THMg%+k%-c zuZr?7XQ)~&ZxlyXOk}TjVtq{7=w5~^IcX@J>IAO22{#ie`h^*FchVudQJ&e`IkgVnbX&aMzW+V81lQs8)lvNg_jOtyiztE z7iT8IOq>(jFQI*q2=-Ouq&hbq%=Bi6)1u9j z8|Dw%bxx$b3w7+&>);1Ng50pVE;Ch8mHQgCM@yJqJX1CIt2I%!7G9xE@Zi(GQeC0z z0OPs<{u@#bL=7h6Q;44xV>^ zh3x)gS8Nv3#+){`HOR;^i(hNKEPpw-DY&)+@=dVvfcOI1_7W%;YW{m0@eW^rMo z#`muGuY;R79Vx>9P5Ba#IihTh-z<-AVoNq*BD)nA!HXPEF`EIX7tI#7`T1G__1@z{ z=N|02aRN{&8UXZ&{wOns?1idW?5vVedGPbxUnG$TkM#B)esEQCuf_4uzX%;c-ev>E z%cfoV$7KOygUt}05m?1dFi@K~9OyTJ zritGY00?iD8o*hBK|gLng_LA?16YAf85Wm^dgKK*mHck)U!?!mHw#&>>WGs*RR1FFt>9Rdj<(&NxcJlB74B~TnAKIJegY+& zUT;h=xlEfSunFMF(0mfty~o=?x)%y6>1EmGm@&)jE;e?%UzMYBd8VVckMhtlt^_LQ z3B!@;n@+1)Yw%=VhSABK6db)Cli^ik2g3Oz3A-zNdhZNk6TvfBRE_2Qzi!LKolJQd-u%H~u)p&&4`cZltI>ux64`Weev- z(1!RlWRc@yfPr**vs+Wp#ZHKf1j71-H*HYP;Gb0p#XAZ_H|Dd zN*HtHx2%cxnM%&6>4@@Q`m@5gFVbXL$8D_}mk`#-5{0V-hI#L&tyJ6QRKKIbW`V7* zl$&j~YoK^fhHbJ%3 zJWfr;MvLT{yugvIvu^z{0|qn&tKPF=xzwaLRklH^9?3!Yl3gUg4( zgxk%t1^?O!(UBsM`lAZ*YAD?~0&14?C{!|^DGQyb0*Atb7tA#>QcGD4AccJ3w>s%DNvYtHR)E) z6CJm08xR`rPz-0<&l%ra|0FE%K3-Hgz%OC;>t9Z8iqd~3v|VJH99fH8agXX=V8$r6 zr3#O>>5b$Egud-*BhJRA^?H`6skuAw z{{E;Vw2i4!D6l^fwumCVzQq!?rUSqW$MfvQ!#!Vx-DJhp64Q0L_vg$)!MY1dK*(~~ zjD1A^@lLuGIqE$GAqYs3t{m#kHdYJ?ILMN*Ameb=YQ8WQ@z!Cnx7Q0bm1Vs@Ktb3x zkhOfRo2Y!w4fv;g;FDK2(m<63@tz>4c^V}CzP5$uB~Kr)U!*b+J^*ize}5Io9*^HG zT56SUSegYF42X-U0G?-tnRF}u`myo!p1z2rmZ>*U{y*wD0Te&>Y|0J@in4A*xKUeiU+x%Rp$|)UWCW7(y>N`xCen*K#<`)Zc$vYt4}{_Bhf#;D?gc@b)zK z+GV`nNVGz7!X9I4v_eRcyJ`p>`ZJWrW<>{}s7QfFK|krDk`4kVMdo0Gsm7woA<1|u(St1L(Sfl(5OKU&GItMSw>qUMYZ@_d*qAJt=#1+$4X z-!~;IW6P0J05Q!9S*WB#>$hD}=y$qoYUcUiy(=f^eb0S#$h4I!LV$QzJ5X0+d(lJQ z1Zz!+8q}S~S{Vh9ImdSZ94@M}`~DLn7+xe<&mLrl1Pt&eOi*0oiMJjZ3ib@hY4(`| z-=^_GX}7c*gVI{CW=XIRkik7RGkehqO&>h(GHHvx_TYU5-*9Fn3Scv{kaZ=+0SqV@ z=hN@vSEdT8R391yLQ=EpT>O4biy6e`s5@2^-B>Nub8AB_H2{i?fA9}{qO7=iq;q#3 z%x&DXQa^UVyJ=7j7H^5RgT0Mmpk47JwjjHpbrF8D>;$_oJ$d}9%7Y|c{0@2EOO{uHrPhvIl;`tqL-FcD0dBGA8-_NBKY`Id>&wSW-WvZY^3*ff_yA9>!|PMAjR^kcmiRL1dGu)W zY#z<@SxiOyB~TNfxKq{i#Ri+?&q34GH37Aymd8i0Xwrt}XyMUG9Nup*=inbqc3fDS zU#tyNRJ>N{kv!VlN)EoaCkh0dGxqw8vb4TvY@D1b_hiq(!^?jP0Kyk>>FA@EU_O)J zGz0tbp8<&hq3QX6&f3Tt9a!Bw&LDY#q1!0#Y^8;hx+0_A)PL>CvmSb_?HVm-ei_W? zkJqIY2Y6<;bMV(L^R2-vsnj9`AX7v4LoWf^pD0ASULTZv(Lotd?>skkp6Zm8uqP^K z!5-jHBsjnK-5srOL>#(#e-9x!siAR`ipD9k5@kS?FW`-`7E~X+uZi1qy^o937rb>u z>g{xK1mM!6|L)Eb@PUq>3Rc5gPA}M=v8!si;lDS^@o)YyK%Q(9cDE6odrny3e*dOq znru1)c+TZt9<)Mzy}?kyFB7-@9_{j5r&!p#!4TP)2xrA+19d^3m$nm{Iln;atc65t zjWy8QTEC1o;s(Q;t;@Coc`KQU>sU9QuMZD-)fI2OnRLrYpPm++)LAZA5hwYQvQY&; z!2rVI&;d_Pcs~2OvBwYRMQFeC@BRY6X*WVCH&xa71?n2VWXw=u!W4p#!3MzO0GuoR`u)zdOjGd zX|(XzD%B2O&uGqoRbQfMzX)|(!EE4fs;;@3pSmqOmm{Byk5bAyTknl7T)Qb1orF|E z*7e(u?@9gdMt+pN3!1v?l*`R3h)kRo9=!dKY+?-C;^)x|b7&+Fo=kzQq_-WmZmll; zq;i>zOSoLeQb}*0Z|u+}UG+(auU&~InICK}T$!A3BV8ko)GcN8Zy1A~k>-q+YnDR= zS?l3wubf~EIVRoULB+QjQV0P87M0D2jo^P`ervx=v~0LjSn6oWjm!jN?V(yb77(1* z{9;eK#*6VYSc^Wlh(lalQWyAV1l!1x3Ga&qZ2nB6i&DMNy1Y3=Fc*12XtQpXIgvN& z9C`NL-<>qp&}+xNcLv9|XBVgdPkEgpn6ZP@+g;k8t0fhB-A69k(QnQo4Po?MIbtPq z=t^K}u4IrEAhY3QS>d?X=5iD1%Ht)P5oR5C<4zfFzOWm^ZBFF^R*oc7moNbQZQW)n z#_9k3Wc22fYcjn$ocIIIR5s=EnPZZ+E|01Q3&gxKzGgDo(UkCAG&uN)ue?b zxM*wLy7w-q<00)+xujdAW0f_sKZE3lqBFQ%&z~07<)N_<1(SXa@A4RR(se$!t1nhMA`xAw(rCTq_RywuiYrj)Cm=dFtU|$W5 zmaRPb9psX>zO_LxP-F&%4+9=^et=j|FsrgdksKA313W$-!+`_0E z$hpBQ0#)OgL~!2Dxr5X#BBOLqF7$>>_kjSZaW*rn#?H4|r>o;vwUgjHY|DCQLN0+{(F3 znp|y3@KO(`26d{h%l&;NksDT-uy=S^h3hPG!Jw&2Q7;JAc5ZrrO{mqEWk<`~BZ~RanNF5UQ-#_x! z705`GecLvh63t(?&9_7cz*(xjtMV-|vY8$6IJ>C}y-gzGe6P$YiMzOeKvllgKE7nw zH$@Kv@9FLRS_72@O7s6OiqwC*xJ0x7$RB>ydIpG?qROc-p0Q*=d`1cV>qyAJLmyf{2yASnsib8?Omn=m-+YlkV8)NA)5ybJ~};$Tq#MkYyUxFE+b8Q%e8Z|nV?AWUr0sBW z27D-#oX;*s-WWu_9bhWyDop*%Z+daGI7psO#IG`$LKh5d>{tIBYrW&j90 z$g~)NI{Kx0^70H&E7%Hb_?My3k5}e1uO1vHNK|P=yu%7u#*zol3rkjNen}#Q%9jd!SJlg8S%4!u#4zyXQN_)?O&w#`8UIpTZ~J$#2l!vh}G6AbZSd{I=W9V8@4v5 z5=&IwxkXc()8sLQgHP&K6uf@Y82*FyF6;G?NFz6~ zF>qy5^jK{Qibq2zNBuzl2y}}yR<%y+yc)YvBu?sTK*@ebCr*kqnj0?<=w#JK?bO^@ z%0UD+g;C$@lrI0Sb06e!m;4SuE$FPSov?!r_PO>Ge<%`d|A)k9dw?a(46PZI57r&w zeP=S;vp#bDLsr&GVt?;Awa#16J?khIfM4j#S)yF9I9kJMwns z$dAaO&TTJG{cDk<5PudUpQke)3@>_zeh|H}#GnVxkFr197e}Lx#6u>r`VRwM!MCnH z1|Ds27%ie{m;)#y(^DM#js33sn|?mlqT zezxaa@+EkxLP5H`VZbhj-dNJ-;)|WDqqwK7ZF=N?d>GuM)uSZe1eR{O>-=$aTfhSD zvIoZrxa#U%?gWOfzN8vP{djNz)7j#TW85B&5vz3N51J1&CmgxIq|BRwMfi+%#*YlwL z9hg*meM!xRZzBj$18J&>$D2R3+co}-zNuys(AtlA2OgOlA89sIdg=WM$gGTfa;>5P z9G-&4+u(WOtJ;T|Lqs3(;elt+k~^4yk+k{w7QeJ;t$c)6`%rX;Pu}>OB6|E_!+E|_ zqpn;D|NRm`+V@BhOgChg-~b2zn844$d|*g7L{w~8!Y^bF8@-RnJ$Bb^^A-Do)RV3v z+)CtS)ah?)O!@q4fsprIPgrB)`_O==V*z+wC{Z&>|AsF)Lhl&<=mKUD+a4x(N^y)1 zsJKbdm57m9fNXHj9D$A1xdI&RyjbYaxk_kD#;iULUHLtp+4@#cGnTgO5s*P|q1KY- z^vPw^khYM&17SI~D` z(IQo=Qs4FbI7rRwW*4fgsHe;seAFkE5) zEQkV<%bGi$pR+&UIM{PrjM{?Z1|^)ZZkyC<0Fde?vi15{9=_hn)uTFPu=?R6%GAJG zB;P}mA15*rKx&-nRr{^D*~o`Bjdn%KfS6OLg%=>YBl?N7WZHe8>74=-&xms*s?K{E zFeLz|_>0=}#S~-*XQMg;9B?5dm-x9Q=#EM9$3*vlpQ6qN?;f2g!?|K%CJN9K)uU_#60#=ojQ!{sn=(_AL{(144&6ix}(Ulzz`MiTC6O6OS7k zB$aS!oVMkd^{9tR${(D*PHHiOFkZM^e4agSdgo1w{629tM&GI>@;yMtCtLD9g%Oo&-CyzJfP-=blwKQJLscAN7o6-k5?UsNNnHL9WEgFn6YG_y=tG<6JrF3^?2S3iiESmQ^+`U(Zh1g@FC2IKo^k0D2<9B!@IA8t zC0mNBk5yvHr z^28Ubd$p*J95LAA6tJ|EXW+di$&i;4&hCzf?WggkNoXk`OLs2GdurM;f_ob*n)3F| zK=?m7*UoY`N;a#THM-a{qPG7-dgP@=^1~DW-jLIrHq?%=spbDFEps$4A1D>B|dk? zq)#w3%;Qm~AREz=K>fPrC3dqq{e}Gn%t#3;wd2fp66V_uhyi(4z;vrJUqYu%BYwHe zClH8+e|eHFM(4PkgMYk`9dBL-4o$I!Ev1R&^WruL5MzzYV6n+>sSRrWeXU`l5@mwj zB+=SmJ?WhApdGWvs{|!94Fb15fM0LwPO~3N6$*}7uybjETUwPLr)M{qGU!3vA-#P@{ z$OkB68G^`eb(FT~Xk8coNCIk|d)!lk++FXv55S$h{)^9=pJ3*&B~U}^d)bxhz(Jc> zJ&0YKdfSt>6E(gD<*UGBbSqo{wQHmJ%GuXB38=Wq1@HWz>V~?`uHWeq9(m%YB}!d3 zVZLd{H(qIey~yd`7W0&>d6KsMce+Y;U=J%=6P1aMeXHA&${m+cH32Ge6zNp*ca!wm*(6bPIN0p z$uHKY6ZW||_f*Q1)4H6x=iL5C^t>U4K+D?A2b*D8_s{eM0# zknTG3JTZNHUYX&MVwLO!muHf3CT*ZJVNrp_vqi(pvLC`GWVCx-taNt?>IpB?b* Date: Tue, 31 May 2022 13:50:05 -0700 Subject: [PATCH 10/15] adjust decision table; remove bandwidth calculation as 2 member lags are not hard requirement --- doc/dualtor/active_active_hld.md | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/doc/dualtor/active_active_hld.md b/doc/dualtor/active_active_hld.md index c3c9ed7314..a7f5cee3fa 100644 --- a/doc/dualtor/active_active_hld.md +++ b/doc/dualtor/active_active_hld.md @@ -55,11 +55,6 @@ In this design: ![image info](./image/cluster_topology.png) -__Bandwidth__ -Each ToR will have single port-channel to each T1. The port-channel will have 2 members of 100Gbps. Therefore, each T0 will have total of 8\*2\*100 Gbps = 1.6 Tbps to all T1s. - -T1s will have 8 uplinks to T2s. Therefore, total T1s uplink will be 64. Total uplink bandwidth is 6.4Tbps. - ## 2 Requrement Overview ### 2.1 Server Requirements In our cluster setup, as smart y-cable is replaced, some complexity shall be transferred to server NIC. @@ -324,8 +319,8 @@ Linkmgrd will provide the determination of a ToR / link's readiness for use. Default Route to T1 - Link Prober Link State + Link Prober Link Manager State gRPC Action to Update Server-Side Admin Forwarding State @@ -339,9 +334,9 @@ Linkmgrd will provide the determination of a ToR / link's readiness for use. Available + Up Active Active - Up Active Set to Active No-op @@ -354,18 +349,18 @@ Linkmgrd will provide the determination of a ToR / link's readiness for use. Available + Up Unknown * - Up Standby Set to standby No-op Available + Down * * - Down Standby Set to standby No-op From da2c750940e859bf60ad5639584e6b0f741181af Mon Sep 17 00:00:00 2001 From: Jing Zhang Date: Thu, 2 Jun 2022 12:37:36 -0700 Subject: [PATCH 11/15] remove default gateway referrence to avoid confusion --- doc/dualtor/active_active_hld.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/dualtor/active_active_hld.md b/doc/dualtor/active_active_hld.md index a7f5cee3fa..b3881551ef 100644 --- a/doc/dualtor/active_active_hld.md +++ b/doc/dualtor/active_active_hld.md @@ -33,7 +33,7 @@ This document provides the high level design of SONiC dual toR solution, support - [3.3.2 Link State](#332-link-state) - [3.3.3 Admin Forwarding State](#333-admin-forwarding-state) - [3.3.4 Acitve-Active State Machine](#334-acitve-active-state-machine) - - [3.3.5 Default gateway to T1](#335-default-gateway-to-t1) + - [3.3.5 Default route to T1](#335-default-route-to-t1) - [3.3.6 Incremental Featrues](#336-incremental-featrues) - [3.4 Orchagent](#34-orchagent) - [3.4.1 IPinIP tunnel](#341-ipinip-tunnel) @@ -306,8 +306,8 @@ Linkmgrd will provide the determination of a ToR / link's readiness for use. When control channel is unreachable, ToR won't block the traffic forwarding, but it will periodically check gRPC server's healthiness. It will make sure server side's admin forwarding state aligns with linkmgrd's decision. ![grpc_failure](./image/gRPC_failure.png) -#### 3.3.5 Default gateway to T1 - If default gateway to T1 is missing, dual ToR system can suffer from northbound packet loss, hence linkmgrd also monitors defaul route state. If default route is missing, linkmgrd will stop sending ICMP probing request and fake an unhealthy status. This functionality can be disabled as well, the details is included in [default_route](https://github.com/Azure/sonic-linkmgrd/blob/master/doc/default_route.md). +#### 3.3.5 Default route to T1 + If default route to T1 is missing, dual ToR system can suffer from northbound packet loss, hence linkmgrd also monitors defaul route state. If default route is missing, linkmgrd will stop sending ICMP probing request and fake an unhealthy status. This functionality can be disabled as well, the details is included in [default_route](https://github.com/Azure/sonic-linkmgrd/blob/master/doc/default_route.md). To summarize the state transition decision we talk about, and the corresponding gRPC action to take, we have this decision table below: From e8ea3bfdd00685a71b3c40557546e25bec80a7b0 Mon Sep 17 00:00:00 2001 From: Jing Zhang Date: Thu, 2 Jun 2022 12:40:57 -0700 Subject: [PATCH 12/15] update self state machine diagram --- doc/dualtor/image/active_active_self.png | Bin 18423 -> 20580 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/dualtor/image/active_active_self.png b/doc/dualtor/image/active_active_self.png index 0266c40675b8b45cdd7a54e6b334f5dfa95ce5a5..e4e44aa383affea1ea372db12bde7dcf355b9d94 100644 GIT binary patch literal 20580 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 z Date: Thu, 2 Jun 2022 15:53:29 -0700 Subject: [PATCH 13/15] add operation forwarding state --- doc/dualtor/active_active_hld.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/doc/dualtor/active_active_hld.md b/doc/dualtor/active_active_hld.md index b3881551ef..80019b573b 100644 --- a/doc/dualtor/active_active_hld.md +++ b/doc/dualtor/active_active_hld.md @@ -31,7 +31,7 @@ This document provides the high level design of SONiC dual toR solution, support - [3.3 Linkmgrd](#33-linkmgrd) - [3.3.1 Link Prober](#331-link-prober) - [3.3.2 Link State](#332-link-state) - - [3.3.3 Admin Forwarding State](#333-admin-forwarding-state) + - [3.3.3 Forwarding State](#333-forwarding-state) - [3.3.4 Acitve-Active State Machine](#334-acitve-active-state-machine) - [3.3.5 Default route to T1](#335-default-route-to-t1) - [3.3.6 Incremental Featrues](#336-incremental-featrues) @@ -67,6 +67,7 @@ Note that, this complexity can be handled by active-active smart cables, or any 1. Server should provide support for ToR to control traffic forwarding, and follow this control when dispensing traffic. * gRPC is introduced for this requirement. * Each ToR will have a well-known IP. Server NIC should dispatch gRPC replies towards these IPs to the corresponding uplinks. +1. Server NIC should avoid sending traffic through unhealthy links when detecting a link state down. 1. Server should replicate these northbound traffic to both ToRs: * Specified ICMP replies (for probing link health status) * ARP propagation @@ -290,8 +291,13 @@ Linkmgrd will provide the determination of a ToR / link's readiness for use. #### 3.3.2 Link State When link is down, linkmgrd will receive notification from SWSS based on kernel message from netlink. This notification will be used to determine if ToR is healthy. -#### 3.3.3 Admin Forwarding State - ToRs will signal NIC if the link is active / standby, we will call this active / standby state as admin forwarding state. It's up to NIC to determine which link to use if both are active, but it should never choose to use a standby link. This logic provides ToR more control over traffic forwarding. +#### 3.3.3 Forwarding State + +**Admin Forwarding State** + ToRs will signal NIC if the link is active / standby, we will call this active / standby state as **admin forwarding state**. It's up to NIC to determine which link to use if both are active, but it should never choose to use a standby link. This logic provides ToR more control over traffic forwarding. + +**Operational Forwarding State** + Server side should maintain an operational forwarding state as well. When link is down, eventually admin forwarding state will be updated to standby. But before that, if server side detects link down, it should stop sending traffic through this link even the admin state is active. In this way, we ensure the ToRs have control over traffic forwarding, and also guarantee immediate reaction when link state is down. #### 3.3.4 Acitve-Active State Machine Active-acitve state transition logics are simplified compared to active-standby. In active-standby, linkmgrd makes mux toggle decisions based on y-cable direction, while for active-active, two links are more independent. Linkmgrd will only make state transition decisions based on healthy indicators. From d71545b6dbcbd989510d0b6792ae7ae9531f1fe8 Mon Sep 17 00:00:00 2001 From: Jing Zhang Date: Wed, 8 Jun 2022 10:21:08 -0700 Subject: [PATCH 14/15] add further enhancement --- doc/dualtor/active_active_hld.md | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/doc/dualtor/active_active_hld.md b/doc/dualtor/active_active_hld.md index 80019b573b..3a3d5d44ff 100644 --- a/doc/dualtor/active_active_hld.md +++ b/doc/dualtor/active_active_hld.md @@ -41,7 +41,8 @@ This document provides the high level design of SONiC dual toR solution, support - [3.5 Transceiver Daemon](#35-transceiver-daemon) - [3.5.1 Cable Control through gRPC](#351-cable-control-through-grpc) - [3.6 State Transition Flow](#36-state-transition-flow) - - [3.7 Command Line](#37-command-line) + - [3.7 Further Enhancement](#37-further-enhancement) + - [3.8 Command Line](#38-command-line) [4 Warm Reboot Support](#4-warm-reboot-support) @@ -430,7 +431,16 @@ The following UML sequence illustrates the state transtion when linkmgrd state m ![state transition flow](./image/state_transition_flow.png) -### 3.7 Command Line +### 3.7 Further Enhancement +**Advertise updated routes to T1** +Current failover strategy can smoothly handle the link failure cases, but if one of the ToRs crashes, and if T1 still sends traffic to the crashed ToR, we will see packet loss. + +A further improvement in rescuing scenario, is when detecting peer's unhealthy status, local ToR advertises specific routes (i.e. longer prefix), so that traffic from T1 does't go to crashed ToR as all. + +**Server Servicing & ToR Upgrade** +For server graceful restart, We already have gRPC service defined in [3.5.1](#351-cable-control-through-grpc). An indicator of ongoing server servicing should be defined based on that notification, so ToR can avoid upgrades in the meantime. Vice versa, we can also define gRPC APIs to notify server when ToR upgrade is ongoing. + +### 3.8 Command Line TBD ## 4 Warm Reboot Support From f704a367bd3504b3d0277ffecde0a5bd62800940 Mon Sep 17 00:00:00 2001 From: Jing Zhang Date: Tue, 12 Jul 2022 16:56:46 -0700 Subject: [PATCH 15/15] wording change --- doc/dualtor/active_active_hld.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/dualtor/active_active_hld.md b/doc/dualtor/active_active_hld.md index 3a3d5d44ff..92144a61a0 100644 --- a/doc/dualtor/active_active_hld.md +++ b/doc/dualtor/active_active_hld.md @@ -50,7 +50,7 @@ This document provides the high level design of SONiC dual toR solution, support There are a certain number of racks in a row, each rack will have 2 ToRs, and each row will have 8 Tier One (T1s) network devices. Each server will have a NIC connected to 2 ToRs with 100 Gbps DAC cables. In this design: -* Both upper ToR (labeled as UT0) and lower ToR (labeled as LT0) will advertise same VLAN to upstream T1s, each T1 will see 2 available next hops for the VLAN. +* Both upper ToR (labeled as UT0) and lower ToR (labeled as LT0) will advertise same IP to upstream T1s, each T1 will see 2 available next hops for the VLAN. * Both UT0 and LT0 are expected to carry traffic in normal scenarios. * The software stack on server host will see 200 Gbps NIC.