From eab1787b7a602745ef1dcab0c33af91fdff9eb5c Mon Sep 17 00:00:00 2001
From: guide
Date: Sat, 17 Oct 2020 10:09:09 +0800
Subject: [PATCH 1/2] =?UTF-8?q?[feat]cap=E7=90=86=E8=AE=BA=E8=A1=A5?=
=?UTF-8?q?=E5=85=85=E5=AE=8C=E5=96=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 14 +++--
.../BASE\347\220\206\350\256\272.md" | 0
.../CAP\347\220\206\350\256\272.md" | 59 ++++++++++++++++++
.../high-availability/images/cap/cap.png | Bin 0 -> 56966 bytes
.../images/cap/dubbo-architecture.png | Bin 0 -> 15546 bytes
...33\345\234\260\346\226\271\357\274\237.md" | 0
6 files changed, 68 insertions(+), 5 deletions(-)
create mode 100644 "docs/system-design/high-availability/BASE\347\220\206\350\256\272.md"
create mode 100644 "docs/system-design/high-availability/CAP\347\220\206\350\256\272.md"
create mode 100644 docs/system-design/high-availability/images/cap/cap.png
create mode 100644 docs/system-design/high-availability/images/cap/dubbo-architecture.png
rename "docs/system-design/website-architecture/\345\246\202\344\275\225\350\256\276\350\256\241\344\270\200\344\270\252\351\253\230\345\217\257\347\224\250\347\263\273\347\273\237\357\274\237\350\246\201\350\200\203\350\231\221\345\223\252\344\272\233\345\234\260\346\226\271\357\274\237.md" => "docs/system-design/high-availability/\345\246\202\344\275\225\350\256\276\350\256\241\344\270\200\344\270\252\351\253\230\345\217\257\347\224\250\347\263\273\347\273\237\357\274\237\350\246\201\350\200\203\350\231\221\345\223\252\344\272\233\345\234\260\346\226\271\357\274\237.md" (100%)
diff --git a/README.md b/README.md
index 9cfabc72754..aec6f64d0ee 100644
--- a/README.md
+++ b/README.md
@@ -224,17 +224,17 @@
如果你没有接触过 Java Web 开发的话,可以先看一下我总结的 [《J2EE 基础知识》](docs/java/J2EE基础知识.md) 。虽然,这篇文章中的很多内容已经淘汰,但是可以让你对 Java 后台技术发展有更深的认识。
-#### Spring/SpringBoot
+#### Spring/SpringBoot (必看 :+1:)
-**知识点/面试题:** (必看 :+1:)
+**知识点/面试题:**
1. **[Spring 常见问题总结](docs/system-design/framework/spring/SpringInterviewQuestions.md)**
2. **[SpringBoot 指南/常见面试题总结](https://github.com/Snailclimb/springboot-guide)**
**重要知识点详解:**
-1. **[Spring/Spring 常用注解总结!安排!](./docs/system-design/framework/spring/SpringBoot+Spring常用注解总结.md)** (必看 :+1:)
-2. **[Spring 事务总结](docs/system-design/framework/spring/spring-transaction.md)** (必看 :+1:)
+1. **[Spring/Spring 常用注解总结!安排!](./docs/system-design/framework/spring/SpringBoot+Spring常用注解总结.md)**
+2. **[Spring 事务总结](docs/system-design/framework/spring/spring-transaction.md)**
3. [Spring 中都用到了那些设计模式?](docs/system-design/framework/spring/Spring-Design-Patterns.md)
#### MyBatis
@@ -332,12 +332,16 @@ RPC 让调用远程服务调用像调用本地方法那样简单。
### 高可用
-高可用描述的是一个系统在大部分时间都是可用的,可以为我们提供服务的。高可用代表系统即使在发生硬件故障或者系统升级的时候,服务仍然是可用的 。相关阅读: **《[如何设计一个高可用系统?要考虑哪些地方?](docs/system-design/website-architecture/如何设计一个高可用系统?要考虑哪些地方?.md)》** 。
+高可用描述的是一个系统在大部分时间都是可用的,可以为我们提供服务的。高可用代表系统即使在发生硬件故障或者系统升级的时候,服务仍然是可用的 。
+
+相关阅读: **《[如何设计一个高可用系统?要考虑哪些地方?](docs/system-design/high-availability/如何设计一个高可用系统?要考虑哪些地方?.md)》** 。
#### CAP 理论
CAP 也就是 Consistency(一致性)、Availability(可用性)、Partition Tolerance(分区容错性) 这三个单词首字母组合。
+关于 CAP 的详细解读请看:[《CAP理论解读》](docs/system-design/high-availability/CAP理论.md)。
+
#### BASE 理论
**BASE** 是 **Basically Available(基本可用)** 、**Soft-state(软状态)** 和 **Eventually Consistent(最终一致性)** 三个短语的缩写。BASE 理论是对 CAP 中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的总结,是基于 CAP 定理逐步演化而来的,它大大降低了我们对系统的要求。
diff --git "a/docs/system-design/high-availability/BASE\347\220\206\350\256\272.md" "b/docs/system-design/high-availability/BASE\347\220\206\350\256\272.md"
new file mode 100644
index 00000000000..e69de29bb2d
diff --git "a/docs/system-design/high-availability/CAP\347\220\206\350\256\272.md" "b/docs/system-design/high-availability/CAP\347\220\206\350\256\272.md"
new file mode 100644
index 00000000000..381cda57ed7
--- /dev/null
+++ "b/docs/system-design/high-availability/CAP\347\220\206\350\256\272.md"
@@ -0,0 +1,59 @@
+
+
+## 简介
+
+**CAP** 也就是 **Consistency(一致性)**、**Availability(可用性)**、**Partition Tolerance(分区容错性)** 这三个单词首字母组合。
+
+CAP 理论的提出者布鲁尔在提出 CAP 猜想的时候,并没有详细定义 Consistency、Availability、Partition Tolerance 三个单词的明确定义。
+
+因此,对于 CAP 的民间解读有很多,一般比较被大家推荐的是下面 👇 这种版本的解。
+
+在理论计算机科学中,CAP 定理(CAP theorem),又被称作 **布鲁尔定理(Brewer’s theorem)**,它指出对于一个分布式系统来说,当设计读写操作时,只能能同时满足以下三点中的两个:
+
+- **一致性(Consistence)** : 所有节点访问同一份最新的数据副本
+- **可用性(Availability)**: 非故障的节点在合理的时间内返回合理的响应(不是错误和超时的响应)。
+- **分区容错性(Partition tolerance)** : 分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供服务。
+
+CAP 仅适用于原子读写的 NOSQL 场景中,并不适合数据库系统。现在的分布式系统具有更多特性比如扩展性、可用性等等,在进行系统设计和开发时,我们不应该仅仅局限在 CAP 问题上。
+
+## 不是所谓的“3 选 2”
+
+大部分人解释这一定律时,常常简单的表述为:“一致性、可用性、分区容忍性三者你只能同时达到其中两个,不可能同时达到”。实际上这是一个非常具有误导性质的说法,而且在 CAP 理论诞生 12 年之后,CAP 之父也在 2012 年重写了之前的论文。
+
+> **当发生网络分区的时候,如果我们要继续服务,那么强一致性和可用性只能 2 选 1。也就是说当网络分区之后 P 是前提,决定了 P 之后才有 C 和 A 的选择。也就是说分区容错性(Partition tolerance)我们是必须要实现的。**
+
+因此,**分布式系统理论上不可能选择 CA 架构,只能选择 CP 或者 AP 架构。**
+
+**为啥无同时保证 CA 呢?**
+
+举个例子:若系统出现“分区”,系统中的某个节点在进行写操作。为了保证 C, 必须要禁止其他节点的读写操作,这就和 A 发生冲突了。如果为了保证 A,其他节点的读写操作正常的话,那就和 C 发生冲突了。
+
+**选择的关键在于当前的业务场景,没有定论,比如对于需要确保强一致性的场景如银行一般会选择保证 CP 。**
+
+## CAP 实际应用案例
+
+我这里以注册中心来探讨一下 CAP 的实际应用。考虑到很多小伙伴不知道注册中心是干嘛的,这里简单以 Dubbo 为例说一说。
+
+下图是 Dubbo 的架构图。**注册中心 Registry 在其中扮演了什么角色呢?提供了什么服务呢?**
+
+注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小。
+
+
+
+常见的可以作为注册中心的组件有:ZooKeeper、Eureka、Nacos...。
+
+1. **ZooKeeper 保证的是 CP。** 任何时刻对 ZooKeeper 的读请求都能得到一致性的结果,但是, ZooKeeper 不保证每次请求的可用性比如在 Leader 选举过程中或者半数以上的机器不可用的时候服务就是不可用的。
+2. **Eureka 保证的则是 AP。** Eureka 在设计的时候就是优先保证 A (可用性)。在 Eureka 中不存在什么 Leader 节点,每个节点都是一样的、平等的。因此 Eureka 不会像 ZooKeeper 那样出现选举过程中或者半数以上的机器不可用的时候服务就是不可用的情况。 Eureka 保证即使大部分节点挂掉也不会影响正常提供服务,只要有一个节点是可用的就行了。只不过这个节点上的数据可能并不是最新的。
+3. **Nacos 不仅支持 CP 也支持 AP。**
+
+## 总结
+
+在系统发生“分区”的情况下,CAP 理论只能满足 CP 或者 AP。要注意的是,这里的前提是系统发生了“分区”
+
+如果系统没有发生“分区”的话,节点间的网络连接通信正常的话,也就不存在 P 了。这个时候,我们就可以同时保证 C 和 A 了。因此,**如果系统发生“分区”,我们要考虑选择 CP 还是 AP。如果系统没有发生“分区”的话,我们要思考如何保证 CA 。**
+
+## 推荐阅读
+
+1. [CAP 定理简化](https://medium.com/@ravindraprasad/cap-theorem-simplified-28499a67eab4) (英文,有趣的案例)
+2. [神一样的 CAP 理论被应用在何方](https://juejin.im/post/6844903936718012430) (中文,列举了很多实际的例子)
+3. [请停止呼叫数据库 CP 或 AP ](https://martin.kleppmann.com/2015/05/11/please-stop-calling-databases-cp-or-ap.html) (英文,带给你不一样的思考)
\ No newline at end of file
diff --git a/docs/system-design/high-availability/images/cap/cap.png b/docs/system-design/high-availability/images/cap/cap.png
new file mode 100644
index 0000000000000000000000000000000000000000..4ac6504d1a09e6dfbdc59ba9ec6dc7d48713aef4
GIT binary patch
literal 56966
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%0AU@34=70Oq&dG?)
zF|Y~(^u|7!3doPjLlmyX%R%>HuR0*TS5n;!K05gAhq4{pazKE6T?P>P2{ru1P%hVskA4>|Y
zq;K?hHdy%gYu;5QO(dDIdo+;n*@|f5tt*uO=u(rDO)x)&@Rb!Yvv275I3iG&UM=CZ
z!5#T931m5)`o{Q}h6sr}Bh&9O46`SiTD@Jbu<}VX#@l$rIC=929eIC5fBh5=}D=AtTk-vU*Tr7^_v~}#%*=h?bLPx0r>c4QJ@vOR$jEfKjY5iu^T)XN
zGjA#JM((lWxm;D=dwwTwPE}4?AVjU8Q{!va+eq^-oBnu%mCMkb80XgOwG&QiTNkf~
zo@D>LCl;wenD-#GJ+v6$z9bS`&iq3YbgvY1gCn<
z-w2}KJK(~3YZ_@7zRhQib!B4xmwS3T<`d5R*QB?mSVMAWn(0fjnuSOwb6!@vewyMa3fy2j_l*@g)7L6vp)Ckv*BaM
zDfC(&iKqvksh2?-!a4OW_mw)K2urfv($Fb>{bTKrlHed^Qiz+j9#f#$PdjSpPl%5N
z+LnFHpCR_EYbJWlWb+{r;VXTbD;Jc|<^FEN_a~rvZq5tBPqpOxA$05V|845<3+!q*v2>_FQXDCSW?s$-xgM2{cKzS%m_ZEr%T8D
zMnQ?ktl|iBTAIfhT)s(q6Uw)%Y+i{2$3CkF)z^^SZ+g;pVsnaB4D4jQ1
zqWZUuwx}HKE~K}hx$;-$wc}Dl`7@nk(x=*c$>TrYUESM}2x-
zZNdoW;&O7d%zcr&CMA~Cdd4oVly)nOuPR<70rUf6)dw}-S{JT&K
zwL+4^e?3H+Us0*|sue`kG&^9gE!6
zO8rHQ_Q2uoBPT12p5O1FQ=h{nmnj{!w-|@w-;aQ_sr#90P%(hi2`9=o+*9b1zc)1=
zSd2T4zuCk!7^0)-zd9dGpIi|yu=%4Z#qS(DL%~JtG}_px;&6^lu`Wu~aScj}m-YC<
zi@~ONev)0?)ek5ne`M~$>*&^3{&7~7GOE`wh_XH4KLa}}Ajc)`pa2Pm9{h8K9&i`s
zr$ec(ftirVckgz6rO204UoBaO6Yun1<1ArKS-|{-
z#$w2LSIua*)raXSwSt$DX)l$YQNV>t8MqJrqXRH$Cz3&)VTkQb-
z4zxk$c)F^HI;vlt7HYacD*UNlK{N`0oY#x&te*~=6cJi;A6*8jKyWuGH5fR8u&J%y8
zo2r$~otNaZa3o-2ibH4-lMPNGTC`Qyr(J<-r=h3(e-VXld5U&>*E6kog(!Y0#{pck
z{iZLnZoczKTHlBm^N!GKYUmBmjmzVRxBwVd1`X8oL#ac%l5Jk#uBK0W=Q=-sDduD+*T1bQ>aUQn
zwMme9`P;_iT2bA}ITCX2b?y)z;f=;YK4za+7FvBko0aL8ua~vB$cZWLvVxv_KzZ1m
zCEB=YzsZMV;k&U&b`o9Y<0!^TkIc7u!RcQ%*x(nEgut^8W`rD0Uw
zw^CYGOhEs95AxJSRlxq|d8``poYg~2*DiMfR%_Dh&us!KyVcA+kme|;+wblrRl4N6hRS=DCgEm4vwE@_EDZct083fSUvVn%{#DBSm&J|
zSmm#3pbmYd`zz>HGXj_)iD$^L8U~EMp^y!sXvt9wJ#Rt!XuD&k|BUG9yOETcFqZn=
z%1ddp8}KD`m6F|A<2<+e7pWOovy(R~MA<
z_yl_*c2rVWq=vcaSl)0tla3_{unZ95g?^i^9OPF!J2|
z)5m(y4KJ4Kl3UIdC483GySCtSR27S%=J;hckA56mSAnBWv-R=$YRQDFl{PML;GXq9
zSvuB?YQoM~@E`3k6o97gudj-4h~b2+gJ6_YXHHm)j#1>_>^?@2=Wi#R9iG}ZWgfpC
z@T^xpc(k}{Uz!t9`}X@csNGG?XF9}w{*9R*EM1^C(TQzdbLGR&pp~Fcwd2X*9S2G{
zv_cFP%+#TKqhxFZqp>+-W%hl}WG<
z{@_7!!M4DUHbHs_h$%6Dj?sI#c7-@MN_}sH2Qt#F;095>JZBiFlnyReLI+2+IjyoQ
zI-BYo66M_9!XUJG5vfNQ!;rduw5Z^Ttdk@jm5X$;@Zv#fmdhY@y*T-vru%!6YSwp@O1*?4Yh>$sdQYf|`3$)w
zG6#K<@%zT?U3R6_|fmDUuD{PkeC*npIgYuFLFcUG2w}Eeo`ms
zUPY_51{2vKn-=xmy|!Y_aaL#?)GvtCAJ2+$pcL~Y?KpMu2`u}p+to0ysiC(6W8
z!=0$2a&vPX((#!`wi)t|+)Ue95&uZxHX&;t53(;MbJjruX|W-HxX{KN1@TV#Cd~V>
zGl{?dS`qP;&Ey=Rb6uXVH+h0fRU%iX_7P^i0-Kw#b3N4AreB*n?hd|
z-)}l!+6UoqlcU($aJRGmG&qqiLj=jS9<^iO|eqV&FeKj*>PG!4v{>I(juRB~gxEtkX=`=Z&6+lYQMQVyRbsXI&1GMAVs
zT<|sfseY28+&7+3oTFD;Cyx$)VwI+i^zp~^X|uXKH~nAC;OJ{wyZ;g@Fx<{Ro)&)a
zZNK_ieNZ7IxdMM!?!?>?Bt-+ec&g{O|5UZ?-m&NC_;%m(!zQ78bN9Mw4fbAuwQ=f4
zE|!yWjT$A<$!9{%!HpYfqB>6mr#da$$+qkOSbyilG_k}GIv_iTe~eWnO-C&XS}YH*
zYNTzi3Fd0JEH;RUZAO>XlY}aEsiv#RF?`kT!2Le@=HD*VqOY%NpOx+8oGkG>z=ez`
zWW<6;xKu-9tBM^-_9(gNr%`6=X$lYh*rEk&Vn3%ID1OBe6Hc|B=>mz3oUB^u)6&Cn
zLww%HJbnm{g+uXY1qvZ+KMsbfw@uwVk!#t;2MPu=`o|8|rStRj!oc`3yzjF1$2XR2
zpL5g%@Hq*eY}5AnW6VG40ttK(B2$$k6-5tv*bCujP}D?O8rQ6<_8k+08c$@~{(^&7
z5zpSa8H&@r7z!~B(Ko5AaV#^G(Bjr85Yu@&N_>&wF=MsQhA%#nuJ>AJg;YNIzl>7*
zY8}kp<2ot{@u9hMv5yF}yXIf8C893oTWjYiw``JP+`65Bp2{RuFF#FrC*aapPkLsz
z`%BW{Smm>U*?*D0@FZAEE*tdQ&7tge7OF~O^7t65v5E_IfV~W<4rRtqRF(TggX~?z
zr=PY5a!)#XS7i2{iwRt6M_2;GE2xC+IiUt?GnD@zzvJ2@b{U>?Damv1f=6YBNX~Lh
zoxO8}5pnXQnyAh`CMhservm>rXFrd(~ry#28A&&p{
zFnArL{?Rf{;Lz{aj(q`7kS*o1)5pkp$^%}qm;7ksb4Q@i5%KT@`}MB}pZXT8{CG3`
zVLi;df1E+(3Q0*Kc<8&fk)a@Dpf@R`yk^K--S%jP;-gayNBXMin8orQ}OlrM_IB
z_tA6xCVY~NBcwJ2`q6dufn=lA>$BQiOJ5mCtZ!WE9KHm7)$eeG@%}5q9r#xkO#Q@C
zZ*&fBfi>7t$nfipiV__^X;8;SJ$m$mYKaL2^bKU#;Wi>H
zvw4PN!-%T`C>l_WF%t;I7WdiE7pud0)vdQiWv1rPWgZaWpf~ZX7Ls$_8ss#-Z-TUk
z)?9;C^=XOf+qYONO6NzxEp{*a3$z5(x866s9=!U&j(Awc&)5+z{znLAR7e^Ug1y~{
z{m)`E93DvDn4WJoS&u+h=@5YTqI?fjFqc1}5G`~8zJ$_lPb+_3$Pw@427
z0K(IO`dyS0!l4&Q&;N7v8Gjq}Asp9Ek3RH1c!MT|jPO7>QUmYfm-3O?-Flg%EUSKn
zjeJDvza0q(dX7GZ?XQEmdrrUs{n2MOP5<3Q
z%^Apo%bd4|0P9zZ#Xgn3GamBw8R1ASY1Rz1HaDxzNnu*@ey3;}}v&DkGq>tZpiEcwXn3#f772U=-uKY!iP3lQE7^G6jXar`NOTo>@T
zoWaOe#Wgc?_?SxqCNC-6rB0-A3H?zG)
zuAhIec4|Qqs~Pi99SN<7N^3PB9{1S_4KfW`~
zO2jjf@ru7u9hz1(m3cvB$U>WTtgcIvN1d5*?tC;p;m_eB9QKR-pV7H$i
z>SEOKYl1m_89i2H?%zsdtSq~Lnrx%ZPrr|r(Z>=hKv`ccDcaR2#TJM^lX>eJgUPpp
z*&;xPF{5FboUw0Sh0z5bWof{HtLB7cbP8O?YYEA#GhXQoYF?AT_s!zB%OKC$)B8K;
z6GMNF-V($V-8r1*W4=-8M=3jvRiDHC$(sbb0M9}cv~xZSzR65W75U+)95wl=vTIG5
zm&F3vBIJDfhe13+#@LcaST)&DydLI{lt0KAq0}sHix)@Mu=}bnetqLn73b#*x;+D0
z0?Dn4eT!_$D)hLj%mzLApT0n7IfuCAwVzH8gt{@CQ=2&90^%WDrDk+rQn??}b2C}6
zR#Cw9FUW^JaMlF+XSLi0)C59-iMq!a)vn$wSl7KQy?q$fmVOIK^<}i;yhC_&IasOYB
zn}*b3=AROI3dyCi26(*Tzs#VkuS}4N*)h(Qdc8fGBUEW3f{c2H?akG%zmGr$byF%=
z8YG{+w
zMH|JAai)YAa_B|4$H4xRkl}$3l&2I;y&9!HlN9cWJ3#pu_OleV7!4Pru;6rAUJSbd
z$@M%@*5Ga|cqHcDP1)2ldDPUH(%VzQu$fe4NCr3a>%OEwO>G|P;Byc==yW7*dS@Da
z)+gWiM;%0#y%*IZ+?;{7%Zx4GJOZF)V`tAnp#FmdC40j67>y#J@^>{zyatEC%7P)@
zk(l)w-M>O@;md0w?>g!vn2~*rYHbISvy`yqn?_Kwh
zSNAAw|LD$!3ccX>eQD8U(1&JAEAzD*o%}T}wTewx+Ii$z-3_8Huu*c(P52?sy$V
zMANq}(42x)Otz<<+}vJL*jIfxuKs^2*W)-9;ad^@plCn%xJCN!qVdIG1GGDJHSJTv
zPK+gf=gaS7e7`C;mpY))SW9g)UkZIo0mr%e*N;wU>VwR@kFOA
zd%+i4@yirtMTw9V8ZmyFt0FPYmwbKy0j;}Jo0g*SP6(uGSK4F`MM;5gEXv)VEd`a&
z-HP}m2FsaEHiG$hi+?cy!RkY62h
zo$S~%tgZ!f$OOwY{L8ZlP_w_Gj9#+z!2iDPGL{%y7S{)!xmHfh4MD-m*d6`G{m3s8
zeb5`N9-{%<`3Ra%zv4_nR5U1XhYiH6jtZMV=+L%+&gV$#3Mgv^wH`xCh#_
zN;{D_+2OiZEzp~InBy>De_q1*`~dnX=gDG+qUan=Cpi@(27K-p_1`!{ZEcI>x#SeZ
zu)%1q_v?8nSa`HU8W%;bFg@+&!1a-(TT~zO^1TWfWb{!{V{Y`O;4FT0GuOV~Bf=MT
za<4w9R__*{wRzAa2hOr`a0fmIFIVX
z_F*{+)}wlJm^YGkJhfo@f%}A4NBLY&-dd~yK<3AN@@@A>#xHsxrvl`ILrBULwdP7y!i+MWx+deQw$+K8*AJ!ungopq>s;C2rNshWXoWs?}xT#WaNC`2_hLNAPZ1
zOxM8pB(rNPKZiP~DS+T}A)^&jV!IgyF;U80QHBTd)c>G4yG00PTmJp{Ic-l9P#e8#
zoi>*&r%zsWQr{ZK@{JGKr92e4#7O*o5zbg4Uc>qagVAf*bLl+_U{UwnCPJs#FJnb)
z?_mXtHIy0gh?q>7*Fj}fEdS*9vl~b=IzD`o`x2#=BI8(&^yXA>W
zgZ>pL++dvc`Li@?Zes{_^XMo(4RwP9+_x3lxj`Bf2R{-};6n5lojIB{qp)>ncMqMT5`y;PqMPm>z;)|WWOu`)j>iXHb+Wwel2^q%ZxPA1KB
zseo^%K)STIfAbEMYi5tsU7k;id-xzl*~_`~guedspxI9x^NjTz=Tj{UvpYB~P}9WCW8WO1L;Aw{h!a45vQyF$uT~pR;R1Csk#h^}V`a8>
zX$_3Zhe(-lVjjW9Vx3NS9Fp#0@_6Hqg>B2uH5z8oe4>j&%-0a*C`+72xwAZ
zMT_w^RK!Gw$FfG)>oYl6gm_&u>(euBXRBC$)@n##Y(;e}i4OjY?6rL*Q703STK{L>
z{vT%N?VPf%R^3rRjaod5M9H=;r_?O8=F~@ahsW|vzyD}BG_Ii&S}WxsxC!E5x>oK{
zL7b1eCYCy^sLm7lD~9i46=$RlP0DyDScx?v_fxyceWEp+3SuRb0?7pg>X+XGPwrrS
zrc<0L8mYUK9Jmq!M4ZhBiS9x95Smh5tNRMyFz00vUH<4ce^|No&nf!yG<3+NFTw14zch-Gu)9aO${q`=GfJan~(}xA?>(C_JUb$#{86
zMTF;5AB)Xt#)KB%}-E7qnz#|8bk8N06BDYhdcEg7AP-!<&
z(+1;ph}ZK%oA$D&q5=Qey|iE(HdRo7CkN;4O3ie2&QZj8S!|`2$L*CLh5%c
zn8u!p{$2!qC;K$nRX6k4)!6%|fvKb^N8;G!x_Y&6{XI-XcphJFwLg8>gI!Ssr
zGK5Q)V@$P{9C3=6@&==Q>-`3cp4Ra%P=%-HzEa|vLU_Wol%8>_>0qkGOz{Zk4|hd@
zwr4}Vz3|o}%0mUNp=Y3lOnjt|PrnaFF#N3oE)a!ju}Q>-0=4tzywrWi&VME@zuO3F
z^9Esj&nHawpoCU7wy3Lnd?H1xSfT9v-i-v7Mz(4k6B&W;sd`oJ|7&MysA6*RppHm}
z<3xR`gntr8%_Sd01XsRmx8F>If`8zS85gLvODYZd|J5>kE8}6lh;5Lny){7`mXF|i
zdI{<-B1x_VpgPh|gR0}7xO*oihP=})kKH;yDUO&5{crqvmx&4aM
zqD{_cw^B>d;qS}$d$h26(phf%m~1u7y+oR;$2?d;3l~s&nIx*kH9{h%r-^DZ@)>2C
zx1*e{i_!~Eo8w+v#zAMcF!1M^i{ON*s-gQa)J=O8WRNEf5YWe)R-QHEfhl0V`UOABrFbWRuDdaR&j
znQmE$=qo{4a!YBay}Gd%uY;z0)7a!|iz(y^8gEiQ3MUs$&2lDhR&0Jam3D%0H->DQ
zf1oR%@~;w_bQQuw_31~~!EvAmFmrLNMcYgO55lj_^unPT$r57))l2OkP}$k#&SeW-
zs1FPBx}NV9O+RBpU)FxWQ2?U7CPUzQjL&TUqhf-_
zY@&2yfwa)$J&tEZkF&V?Up_>K8pJb*akW$#AFiD^PIZ1_X&&Z;Mm%}`mDfdqx7~uw
zw+M;I5rR>HvGQ3vK$F#mQW(X{lAyr3o&R&(H_6b?EAsdFgxm%GXgEL59UuJ_SNTVF
z{8-9b*y`}2LTki1g^AOyW0xaQ4Z1f<2+c-sb-81{d;Mt53%k7N_
zD6UClMMr&tTCU_HIm@#mRtVCM9QX_LcVC?T;nDJqa@N%ne*>&2WfvW3EW4zyU-t3j
z%jYW*Nf=5B)DA(RSz|vCx$vm@*0DiI{MQJKHbPSaZcgpQVYN9XSaDuNzK3jJj6!Hh
zCiC!~PF^{vpB{BM0mUA^$bvF*Vw!-q+cSOHJQP!z{>wCcvox&vA0rkvI^92_%!Z0{
zTXFO#-#XD|ySlco3MPDHN_FHq!%UQ}oAP)T#9s6G0jBHoh*o)3cwj|(-$c&-Sl9(s
z2$TN)YLbbcJCnYcNTh_>**7v5qtBsxwM;bnSk=pN|1dp!kk8B(EBv$C6tKId1G3kh
z2xada`uUF+)e~qG3$*E*Z-MMhVq#GEqweVYx{Qg!?JdQE8i$eS37F?N5&;Tb6yVdr
z#k;eai>5_8LAl7n4*rBsjH&Yd7?{xFX%16#ob-f0#1Do0d?#yVEJfFw9K)pz_aIxW
zJYn~`JRQU{$#y2(gQme<+$8m}ztz*A;C`ZxB%_!4)bA+aC8rejZNpsOe&fx9k)A#N{%
zTcFc(tr%d#kk~ghHf&_z&<(f6+VgHL#={$Hij{V1A?b=_?^6Ab64s+?6uV{rUHU>`
z?cf2*7o{F*T4XY=Bux+ABMOF!^Lh<=#zArWGaz4iEz4~w+r3CAV11$WNyNCVF6uZR
zzw484pJ27i=is95U+=n`&>kvPwi)u@A2HJC!Ha0ei9X9bol$D$i6%?3KM7DmXRPct
z>5`d~o$eSZ{kZn7P>wu7H@Fwm7Kni84q=yrcr)i^pRpvD+%t1~NSyk87$>
z%}7RwGY{|wRfu?v?<7g?y@rm
zI*Ls3yC{Nz{DhMFD6gyTWBy8|A3eI?xdv$Uwla5n1CT$Dp{bHYycxYyE@cB4g6IX?
z5I^~|_vy_c(Q9tfn>v-juXVj|qf#^hA?_Nu?j)6+DUM)Ln5m{xy5_OJLald+oY-rr
zTEfMUhevxrZ21-ppreHh&9aTDg)md>q1eg@^u^{WS|oI$_QcD|7n`NsU+9n>PX&Vu
zNG>bC2ek8D
zjuRl^ZXJ&N;5wXWVdoX(EL1V!$^1to#GQeWB?KwIsyz4g=M80wpw6>26zti%gZ&WL
z8OYd2cNC^AVkY?el3Glar1@<;EM}RUv+Y*wRj;N+_xY8AWyiCAwKIfYWoro4B
z;=jbU?x{&vEuk?~qZX=QYD@)yeW+$DaO;gQ%p^n<*Uo@~{n01Xi`ZPp{Or1$kj9HT
zP5reAQ@tyqvRzjLsMjWMI(%tXVPv-MZdHg@VbhO1XJ_7c-4G4<#Q>oD2eaHRVE3K8x3FM>;WN8ubvvOt2ZF0{60#{c&zN?l#r?%U?)!
z(7ZvPw=E+M1}fA@LXU?q-?k9Rz5bIC^261_n-KpKyHUtTVXOv9#(cad!J6v`cBoN%
z*nJ}WzT3zM`t613-OkzODD2JE@F;A&>JV(mwE#8`O%UQx2$8XS*2erX`~E!^gR)tZ
z@k6@RBV`vl#z~C<5n@AyC!-qo?Y}c{!!u@u$?fm&Md2E?
zWta?Whz?zV^BEh834w`WlZ?Ewj2IX4L-~5@3%2a@zjjq^?`Tzdh56p6FuOn{j)YL?Y7YY
z#GAMrQTG680IzFuCN_$x%_F4zL3(1@;-}L8^06W0+&TrZ2ECP~dl~@z1t|DRmR%7k
z@;(DOUvCf~)J;KpAb@(^I-tbfk{W=2ZcMtIXia#jubmp3(~*PE&be{^ci8LK@HrTL0|p%NtqX@
z#jZGrH@lU7o!{9e`(WP`B6cBaG`es2<6kaDvw+I&zedY*h341}*o0d>`iFTl=1Ax)
z60EfOoV5z@9Z48}_80U$>P$exJq^*Rqk=>{uD~~sCSOa0_S*VXIzPGL5*N@9&|}w4
zmSx{fc|mw1`?UDQq{nc*nu*9v?X~Qt=u3t$M~R}sH;j`8n{E>Y#6i)+
z5Bz(I3R~;$?=BstWQPK?+aiTXwGNE!iy@f>NlCMkJn3&oYZon_%$)uL!#d>%0)XPv
z(>H^{zRe$8Zs%v0fqYn@`HJU=yCfvW^mZk5)#rni8uI!`!0h2j@r=Kb$T!9yfJ5flsGP+^8m||VS#rZ~G
zXqK8bODw?o!mvTfa86izK;G1aho)L>vKn!?{AtE%2ROGey%`0Ly5igl5?PX?rQt`?
z%aUV=``V9Zq)$^3?Sm`#3AeWsTZ&%>=HyJ_t6r;h`XY_}?sykJ$*B;;G=(AmvgZ`U
zWC#k@s_DEIz0I+GHDh%OJ~&OzOm5@r%*ZS^=>v`k0?)3cpnD9Bni>Ta2Z+(drspO1
zpevg|Xt)>s#~#_{72|=c34@Uh$I}D0TNjC&o9NZr*X+_h7w#a_qT-B((=enqSZh~Z
zddo$EMb(EtX#)3d14C4B%Td5B?#;&z;8B98zC?6rS34nuDffw*1|osNm%ktTHK^h
zb!Ua}nCW7kY*ZN_F0Z2FOuC)#m&9)|5UL;oM(1~3xU7$m2A0{oz!%ZUkbN1f5gwEK
zs_-9GXb*B!6NgVQ={wf*saNjdE9@}?i5pZXEGqnb7ix4odT}JGYNM5K>CakHXLF}H
z-d!!giPtKuPz2hT=K?bfqL&Oj%xS$1md$e)bpa-4!5fv*@YQcs{nM+NYHYQo7Qga%
zsaHW4#U#@AIABp>sk(GFw9l`4Dzov-1?^eK7FM!}e~0#VAa({=Btl$UVI?yzXuQa=
z-8+&%w9zZdG-)Z>j+JeL>a-_ufa5HB?~P*Z;S-Cv97;n2c5Yfn(9L)es_T*0LJUNb
zGByHFZdOojR%lXiqPSbq3u0n8wKi28<8~gdE5#T@(Q0POPh@nLS!@Np9bL3sBww9#
zfOiwFNnkS>y8P7*m-@+HSVlgkB+@{^!7>9SxL?xIw_J`mA4MMOi1CD7NSZ2d-3K4|
zaB3OUZU2IJ!7m1LU_njOrAW0#k8MDGiz|QbH(I16B!pVcjPy)R`xXOFi@dIRIpIai
z8|^S7&|Z#Tw)bv}#wU%DH-+Pqlc$5g{$=D9MA!i8Vj?A&gvmYhPqW(FzvMuTGbH3j
z+yfOE07}?jY7xB9YdEnEb3B+`y{!zqmvjl&5*np%=DTVzg^mEXHx#|SsZOd4VbG2)
z#kR{VHq+~pdl&bi93w|lf@z0Lg32VVSfLw-uLe1v6j!d>c`IFFSS%7SS1wcjeirWv
z_JPSMHD%lt3-K4)CC^&xF7+AM=Xdcf5k0gB6>aZ~qvib$8Mn>yAgYqWz{`$m$
zAJ&Eud6ABTe6a@}jHXLL4eqxNwK69D-Ou|&DX>LBxF5Ql*-r9sWK!pQU!@Dyz_#%v*e6ZfS&(eHQ(8FXFZ<(K(>`}$^
za2~0|Y$;IIdm!SmjQys$Lau`%7;+a(7_Oy@YBBzkwpw-h=e}ue$`Ouj5|SV>)c+sM
zyp460Kr~fytMC~A_Ny7id!zFrH$45Qt(z}ae+l^20PK%KkLjUX(KLSBOZ{72oK~;P
zeQieK{kI&X@5U|r@aZLmBx~00Q^{rL>+5WO-j4+@1IPOCTa{x;(npaME7Tx&i#r%S
zbgF-@_TX+^X*YZ42v!bUl~(KoT%8jHoW#TT=T6UK#EIJew8?=0khJ&yMUO_{9eq-#
zwxW8aclLZ!CkO@s`s#Uwtc-+jvw^diDqB*j?QLvC6phkKi|X*`x_2qDSXTO7#;l$d
z&KlHT{#l;{ou*YbBgVX^)nr3f*B%L^bpwDj+}}vJ^=t9YP7FQlh9XYFtzL&qZdNPm
zrW6EyDGe0Pc2`tT{8+n%7YlTOfN2QmJg+aFR$4^B$UyaswrOZZQqt>i-lOk0d$#Qi
z4)enAwpcIKXBryf_J<~#`a(~lw2I%&Z)f@4!#5XK=2jOqOT<>aPpU@!j}KOX@yQxD
z9IcY$k)^y))ay1gU=(~RbbmZ&orYmp#gO+!`8J(+3^!2zK@tgZJW2{DrP+UCNEOfs
z2O`jP-mqJXY&u1m?_Rg=uKgwu1exnG5?CtQPeN5SWzMN@UYJ`$tSfoGkk
zi4;=T;gN5zODKRDzrag41)V{H68Ls(69kRoeGA`71>eC;Vc|J<{eAG`Yv9@@1wKYE
zb#}4N%q9&_HH8n^fPGpipv4*>>pf}Ez6Y=0KtLpJ*Ueo6JrEl2|8CC{2Hcb@!h57)
zRY^_(hl!>)=NiD~7CvG)|9U)l1HBSjMZv9i<~gU^J19m3@jC*8pJn4r_)NV-y<+tyyz!amkQ@adXm4lv;bx^7s3@6&@t
zs2