From 255aab0176c4b0e907bf5bcf842fa921a8b91ed2 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Sun, 18 Mar 2018 11:43:15 +0800 Subject: [PATCH] auto commit --- notes/数据库系统原理.md | 399 +++++++++--------- pics/0b304499-0d7c-49cc-b784-3e7a805c9fba.jpg | Bin 0 -> 36864 bytes pics/4f4deaf4-8487-4de2-9d62-5ad017ee9589.png | Bin 0 -> 11264 bytes pics/d0175e0c-859e-4991-b263-8378e52f7ee5.jpg | Bin 0 -> 73728 bytes pics/d1ab24fa-1a25-4804-aa91-513df55cbaa6.jpg | Bin 0 -> 71680 bytes pics/d589eca6-c7cf-49c5-ac96-8e4ca0cccadd.jpg | Bin 0 -> 65536 bytes 6 files changed, 208 insertions(+), 191 deletions(-) create mode 100644 pics/0b304499-0d7c-49cc-b784-3e7a805c9fba.jpg create mode 100644 pics/4f4deaf4-8487-4de2-9d62-5ad017ee9589.png create mode 100644 pics/d0175e0c-859e-4991-b263-8378e52f7ee5.jpg create mode 100644 pics/d1ab24fa-1a25-4804-aa91-513df55cbaa6.jpg create mode 100644 pics/d589eca6-c7cf-49c5-ac96-8e4ca0cccadd.jpg diff --git a/notes/数据库系统原理.md b/notes/数据库系统原理.md index ff62cbff..c3d569b0 100644 --- a/notes/数据库系统原理.md +++ b/notes/数据库系统原理.md @@ -1,118 +1,99 @@ -* [一、事务四大特性](#一事务四大特性) - * [原子性(Atomicity)](#原子性atomicity) - * [一致性(Consistency)](#一致性consistency) - * [隔离性(Isolation)](#隔离性isolation) - * [持久性(Durability)](#持久性durability) -* [二、数据不一致](#二数据不一致) - * [丢失修改](#丢失修改) - * [读脏数据](#读脏数据) - * [不可重复读](#不可重复读) -* [三、隔离级别](#三隔离级别) - * [未提交读(READ UNCOMMITTED)](#未提交读read-uncommitted) - * [提交读(READ COMMITTED)](#提交读read-committed) - * [可重复读(REPEATABLE READ)](#可重复读repeatable-read) - * [可串行化(SERIALIXABLE)](#可串行化serialixable) -* [四、可串行化调度](#四可串行化调度) -* [五、封锁类型](#五封锁类型) -* [六、封锁粒度](#六封锁粒度) -* [七、封锁协议](#七封锁协议) - * [三级封锁协议](#三级封锁协议) - * [两段锁协议](#两段锁协议) -* [八、乐观锁和悲观锁](#八乐观锁和悲观锁) - * [悲观锁](#悲观锁) - * [乐观锁](#乐观锁) - * [MySQL 隐式和显示锁定](#mysql-隐式和显示锁定) -* [九、范式](#九范式) - * [第一范式 (1NF)](#第一范式-1nf) - * [第二范式 (2NF)](#第二范式-2nf) - * [第三范式 (3NF)](#第三范式-3nf) - * [BC 范式(BCNF)](#bc-范式bcnf) -* [十、约束](#十约束) - * [键码](#键码) - * [单值约束](#单值约束) - * [引用完整性约束](#引用完整性约束) - * [域约束](#域约束) - * [一般约束](#一般约束) -* [十一、数据库的三层模式和两层映像](#十一数据库的三层模式和两层映像) - * [外模式](#外模式) - * [模式](#模式) - * [内模式](#内模式) - * [外模式/模式映像](#外模式模式映像) - * [模式/内模式映像](#模式内模式映像) -* [十二、ER 图](#十二er-图) - * [实体的三种联系](#实体的三种联系) - * [表示出现多次的关系](#表示出现多次的关系) - * [联系的多向性](#联系的多向性) - * [表示子类](#表示子类) -* [十三、一些概念](#十三一些概念) - * [数据模型](#数据模型) - * [数据库系统](#数据库系统) +* [一、事务](#一事务) + * [概念](#概念) + * [四大特性](#四大特性) +* [二、并发一致性问题](#二并发一致性问题) + * [问题](#问题) + * [解决方法](#解决方法) +* [三、封锁](#三封锁) + * [封锁类型](#封锁类型) + * [封锁粒度](#封锁粒度) + * [封锁协议](#封锁协议) + * [乐观锁和悲观锁](#乐观锁和悲观锁) +* [四、隔离级别](#四隔离级别) +* [五、数据库系统概述](#五数据库系统概述) + * [基本术语](#基本术语) + * [数据库的三层模式和两层映像](#数据库的三层模式和两层映像) +* [六、关系数据库建模](#六关系数据库建模) + * [ER 图](#er-图) + * [约束](#约束) +* [七、关系数据库设计理论](#七关系数据库设计理论) + * [函数依赖](#函数依赖) + * [异常](#异常) + * [范式](#范式) * [十四、参考资料](#十四参考资料) -# 一、事务四大特性 + + +# 一、事务 + +## 概念 + +
h^^OK;m0wu=0p|(@V^IqazQ$;o@e91l2(}xy=T5ygyA^FB5F`SdGyB$v(YqYoheyRO2 z6+;}cqS6U<;1MMLqyREjiSr_J_JI+jObyuX3^WNSf(QQH0}&Jq -v%GlgH`1z8nSHmMQ`hEMytDKpp`yP=kAWSg$I?xBGTw8Gk6U8b z@#fF}0!WMxmVX*;OVZ-}Y3w muOUAdf JTN5KK4tlm0J=WhLhP}a1JMkfY z>|A>N4$u1PP_kRYuj`tUrsyAB($z^pBtOLY&COUb@`?(ZEQeW(=N_+MF=(##haAlH z{!!*X{XAZp&M3+FVf|b1b78Z*{q|R^->mO#=#=4KWJ-cob9{hG$l}m?4y-kd7UDRj z5DGU)hbJ#_r{B$1JMbwb2vF(>Dfq$$%mCQTUbC99I{}{Dz(G8n!SY;9-1P@t#;U}E z&l!q!ZjMH|Rc_bVb5!Q?tbjvsB>CIP@||!7Lc4TxP+$f78f7`Btf%8kMXT#<+uD3- zEX)UpAfs}dZ3D>8o=ygAXWyLcvuTmRBat!k#_#!%z<&M7EuB ojPfR*}=;)uBxM051Z0x|dEynNX!91tT^hl2E|UWON$af&-R&x;1Fkc`PZ zfIqrHc5I|5rMn?Pn)SUSq99AGokCNKR8iqgE`E%6EZ6Z_UbV$A@6K#TkM5n)AXB5s zURT4mr04Mj=s%8s@;_VH6aaKTp>NT~e*siLymGAf()*V2Ls23!m68Rq1*fHlVR)xn zvLEO4)a~B)qhi02jT0t8rLipHk)j7`y|>&mod|Bs`-30)EO3rgR^6Y^sc3lcPkGwi zXR~W$Dk{!Wi#k6!JGT)OIUZCRVjYkyR!v-~?6&(~X1;!TCY8L+w+#|~PT_~ gsLAQi)MM d3xupwY~!` z9eh<-O;ijAP2lXT89I79-B2u>=c6H;wsVgCTR#g47!({sLSCETvf_1Rf-JpY7kiv5>U_HuJFU77u9No8LBlicyFR z7buwPczCT=dpiP_-T@A)vDhe5n+RpMM6(pT%iUGiuOOL7h6pG}!Q!spX1ztx{4%T2 zn3sDs*H@;VG)^8mTMp)JA*^ k>La~qxOUL{d;UvoHY?ky8zNGEUd!9{c6nI zRrX5`@jta0FQuws^zK`Nwj{tvwVIQBlH2@U6}c(P1yvsJpvUs*W5nA1*&4nU^-R4{ z3m(9een&IR4ln%yA_{!E-N_6jEx?w&`f`(nrXE-6{Vah%dEL?zG7%;wnh9Pzc3@y} zZSO?K?$2YrpaO^@@rG5Z=~EioWaVrTkL4$z7lS{GHI3)8uy*~XpjoJ1@wE v7wkviwS2-MOaFmRo-Dk0)+Vwp2fO&gBI-Db`gCyD3@}NIz>15!DTU zjhqfVxSJ~ ClaFz_-XHP+Snr37d=V)G4VE3!6m6Tq4*WJ@B;k zK&b758PkAd4&|%6T~61uG+l-VbKy>?q{UGaolT^G=0VHH=S3->!#Y&hzVPC&KcgIJ zvZ@H+T!%4i-vZGc-(lN#6K{Sp*Dw9SW!}q454YuE{c0TajvbWfl}%W|uJ+=pQsHW0 zLFgvERVG&6q{Hl&vW#@7zqQ`JU{922F`7FCC|_i>!~A2Q!N^FDl6n0z(F2^p?w!?O z>8HHB|Ar9U%0gkIg<*cz|3%bWxHZ|nf51afL}E(!q)|%g4v_{2A|W*qX#wd0BSgAG zKv4-PX~`k6NrOnkkdfOIq&Flc^}P4 j9H#~j++6~4<+ zYI8@C ga$yD6>a!!&>n5Q %pI6FiM1>Z{2b>OJ_V>)c zEJzMubA! 5H$ty^Vs$SLO$D4CWc5iFHCvnO a-bj!qR&oN%;!>;j9G9$*UEQbwi zx@mKmtGGr2HHff`mPOsVw^0ENtFT*mys)^q@kdK8cISH@o4*dfpb2M|c4Pm0S4Eq1 zK}?H1BRJN7#WPQ7s$?3uqQ8Ir>(%|>C&a!BS&DD-7t;=$7lY*Zs%7oKig~z*X`V6K zB|YrhWQ_O_o8U`SEkf B}Zna`V;*M_uM=HQ|;Ic9@Qt-@mnL( z +i)<=XxVR*Y~DagC@}p8&i6Wv=twaPEPT zk**nENa@wKMLmCq*sw@BREfKHZoRm<_ll^-Z6^#W^t`?Kw96LASCDuvXyiHEX 4bvoVc1UXdfS0>n+S2Y*dZn?7^S z9`N+X&7Y|+bI+!|9+4fs^)^}{_hC#WyYEE7M-&UmCAoBooNP_X8F-V23{rkY_V`sa z;dL>%_BJT-8Y%*DsJMoDcb**3G0s4qCRnBi!jXRSTSvoRZt9yhG^Yp6m@?CO{Z=uR zPb1*jb{vZkcj6y)k`&@ptt#9@5qQ>_Lf!Ya>JKPsuI&tjZ!(`(7thqzmQO`+k@w7^ z{W%_+-+LoGCl)^p3HH1)ULglui!IKr$oexg&o78bfTxiHYkEINC{;cFJ9<>cLAUW< zX^5a|1tFpb0F{14qACqZ1WL{+-iVMUDIt@sh|R1Q#tIX+UZ{>0egDKpbwGJ38rr3* zg-?dkk{$N!XYRKi$z#^mUhqj9aK6kk{3N()mA$FajLD|%_o0J3LF4GHdh=J}*GP1s zhh^V7Bkn1PgVgTO2N$Tfkn9g@%;4?^saaylWf*{@fAWY}Y;Cm`j*dlG@V*NUDKRQ{ zZx4l6o#N21QJ!LhYV%)m9|<*He=-14qbUMU7sjEPnjy&!O!0l{+*wAc^6tEf`PTXT z-{T8P%7StTfE2Zp3%^IXNmI6Ia}g{2((7r%JUP;&@s1j5Ss`BB`qgH*=MT~UYs5>% z*(&=btlG5sp34uI1|jX91r~vCkrZ}l%HWasvh|pY-oRkba<^>H_OV)Ts*E4n>`$vs z4OHGa;e4~335xYfg-7^_fE_2>t{GW-H#jesqLeH!P7IdVC%7;^VIP7Ieg{{u?AQ10 zT^q02(%_Wz?li~qSm{me)JxIY&%eR9q2+fIP%c-TboeY7v|Lmz!z Hr+h%oEc z;?hw^FD~~z{K&WvIIHmz|4K{9W=YbuUm6AoU;K{Y2+q3?dNaV%wPx<&14D rbGew&hQLQs%J>mTH_@o{AP?B3I6>+<=wZsC1-g(qCuk0Rvk zm$z0LUXq@Av=_$tNFXGUlXb~(QtIBd?R)bhqKaEE^@yp0o0v0S;=TQzKMvD}OVq~G z#ZsOXFg?^74mA8lDmN0A&CD3?ekyy009>lHk=Hl<;SYSkZt_;q(@<2{>rAP6|FxXk zAr_8Ny*K}Cn2?}5Tp=INtT1N+J~)m&r^y;ebhdf6S!+v7O^l?Bc#@(Brc>`owTToN zcNS9N<_GUlk)o80r@}a}ed&nXHJAA${Z~czH~!&Bl)>q2U&If~+IsRILcpZ%^q|wn z4f*d?6qLu``c{ehyv-B`k2G4!))RzD+?;GtyXARW9k#c2Tj(7IFr#J8V~j5E7=j%m z?DjpU*2u*QaR|x^a{Pde#9F5RE#APocTB*19Lo5FKIeD?b{X+t0#A~ER}FX7neg6| z>)^36$_l*r+R&_zwKQOfAyqX9F&BK1JC5wz;t53Ea9D6>Yt3advj(f}@kvW|L%tVX zy5n2mM)@rg*L8NQa>d=Cm<;Pz9xJRouQKv7
M;|;U#9%2tDVI zzfZcR+*{{p9VI`|HSm}EsYk;5a~60!r!^cuTyi0QSmm)9Ti6cugBz}?wB%WwY8wwY zT kCT z30Kb?Z3wr*JwmAB585Z7DyXK1ms9rz4{5DF@T0rskvcnB3zzD7YGnB(_KsYt*;|9u z$c_94yUf|>bX*a*o-eSFfm?C&+6iYtm355uN9zX?JzxpV3vOS_-~U%d{zY2qq-(&& zR&Nm2WKX;gmz^7OnTr%qz&sOBnQzCgdKwlh!1c`JTcph)rzmCrHef*}m7H;P5QDPu zp64=_U2p4mRrNTZ;ysahqao~}tcnX8{g27!M3=qpWue(KE4;)Da&o`&hvuN{C2@7* zJ6}KCV3QcW$ut^zE(C(h0+LrF@E|q$O@Zvoy0uo$XIM}7S0nO?VvSK3J}X>*6}KKQ z%bdSQI8~n+kl2#WG)T%Y@JOw#Q2lGHp`Bc_2Lr3Tq@uW%IyyF-#YmHvqUK^;xzqB3 zsvS^5){D#S(L4^1=Bge#`z?3%TUBnZT!wSn;?IJEcGvBZ^E@KDpO>qV^q|ZM4`GA> z?f?gJ?kv>< PNQLm%oG5*O?z=;cr`W5n#5XPV}OS;d-RCb)h~mE z7)58O^ruBAQw~+L9p18y Ls~{ zI>#tr!?XimxVYwT21!3txP3i*``S5MX%Ss51D;?y z@02O^TKY>3$8pvby<&Id30 4lwQUK1*K#tzCp1D$qS99=8T-*PU+ST5XyI(T?0IGg?U;=z9Y}@|CbqBH|G51)X z#QMHH@Mr#7NeEB-H^>bGzwHmo&;0EMcld~N*5u4joB5D yOdZUlKsV0? z%=@&+Z){}F?LoNbrlAdpyfRSOu!DLF%-Nm~CTd%F{KoHh>B||!mHoP{+uE<%KL%cg z^bT#nfJmp+l~`4vR_yTh^si4#l}RsZfBJUp;Hcg)TzAYn(@a4^WuD%FuRjLzW&(U} zs25iJJMHBRCYEPSc^$Jg{6ZwO0!?EN-RyYUO4D9HkS$_5(*nEX;D(JzuW@_f=06$| zDDH22+mO4xif^2f$8)RQ1{61HFTVOX= %c1|B6@I18LvP6i(7VprmCA zOoRwRpD6d5s11G 35jDbXiLvv|YxP_dt7*;X#<^Yy1TJPyF03Q3jT^UO&Wviq>#lBl8)r6~ z^$F;TKtxr2=juFvw~O9hA5)hmhm$l0&{(29Sr0e!l*D`WkmFabQQ5<*bo#BT7joap zY^xgmK5=OJ11Sc0q!HOmvZ8cBkIH5V|6r=&Ax(tDpr8yxSM`>Ss37n#2~POh +FlybdMxCVuzj>2x{pF{x9$ZDV3%fQMFW<@XB3nFvk_1oa87`|ZG&49i-# z$@$1OM^PG5U}@UN<}Nc`7H*;gLJ)}PZVmQ5l>8_`BjE ocm$ud59S)t+LL;L6juaTw;S#&cVF%q?MI1j6dfTd8*}R z>LfO>=W$Yy0+?h*V08b0T)@{?0F08!J3`c?ctt7^HR$y;|9Y-aYZ^u*?N&7M?(iSF z%TC9kbB}#b6_(+zaFUs;CRT&kpRKJ-E?)PRViXiU`=7q08K&fBdY^w>WeECfWqqD6 zx5Xpr1BM&*0DtzKGclHq?h3h+MXnYwyJhCQqtf%Aho3GeFUB;kM_k`jXKj8)WZcL{ znD~5hu(35cFAn5-h7%O+@ZE!1J)EGH!4+Qp0k UYq01_rP(ta$?R!x9>Hkk3 zx_%(ngU};4lprMHO)h5Hj^}J%uQ)d~O?#yrGpW<^RDm@q);cOd&z^+d7==RySLn&n zkOVYCrz7r@SBn=^CpW;0761F*@m f#y4cd} z;=StW{1|GkI&S31iKJ_|(+hM*h|V^9nt<&|;_VWJ3xSEU)=nAL_x-FQj_n#i8P&O8 zRjp#qtlOry1EKK|!k^nGTYO$=5Ht0JK9t9@8!#R{>~?m6gd=)>zT6shLRe2Ad zC2umBSbnDYZtXlY7k<)^6>@Y42!4KsLyw4F0s|Rt(`5b=BP~2lv-_Te_vH~iZoT!k z{Sy0Mnmb5R1)TEe=jXXjdqPL8CFW3-qhd({^~%?&blJ`XA&`DNg~()~MgQUu$p7nU zM=lJ+MY4O&0T|_TK9X#Kz-)7Qy6Hb4D=#legZ6Pv(?eM_^_f>4;97}{4dfBu;N*En zW?=F;FBS2Gr{rY`BAKLWvdYf~qX9$l!Ji&=u~rf?{&`@Rl8?krJ+rc2xVK|w %N_ixG=Y2#O#FH*%mvRecIQI)YKrgx12jPg20laK-6+py6S$bmsTB}5 cAKMg zAVj5${FWHm!z(u9^|Y}IBReGJ63wC7r<+N6oq@VG!k;W=i=25jDYdgB{0iCz0L01* z!#B))AV=EtjT946zN6uUQ{IxnQ>n8%3>WSfUz_>5^j^0Wfu91M`@bDLr9gi^jtB_t z 0Tyo3tuI&W>Zx6&dp=j+9FYUZcq3Fd~h+gi^UUw?l# zNBM&K71H;pK8*YtnZBwP5^%bZs(dhS?AYF7IyKNE&zBMGt$5rY;R3g^YmV=UxHILY z`k=iov22XAfn-a_MKTTx>Qwmo=6cOj0j$V0`V!jPOQDZQrqm&|G-Ks!@$|QC_jWvA zQL#SQ5KXyx{^yR!B14!JCRzIX4MO(a_bkpzmeea<5snexLLa>P cVbk11}M8u;?mNE^r|Wq#ZZ z;l^nmR*oC4pE=^%RGo2N+V?x!3NW-oHf*`eP{~Ksson9$z!j&?eco}uK!eneDlXo% zQs->U8=YWy_he7*{IyQj8nNj*N 9#W3PK<0cJ+ZIb18OCM(#t&8*J|gmD3R z8e)Prc6E#@mD=bfs-FZTkPn(vK+)dRPOdG7!FShwAQY#(Y67H$*&W@B3fRl;8X$AI zKHuH32XD8K7{Wb|-V?F*9yV=VFq&b8T88?oG54)T+>SD%oB-X!q!8C5iivABI)MGQ zZO7=p=tIB4>t~MstF_X!3otO?-3t-iHz~;e74qihhn3C%p02PtD{FQ6c!#zL5h(qr zt4}pIdnww|EnYy0cHDS^I;s2A78*>TEu`rNkTWKD9A?S8qCux=h1vK;P2ZvysPLZW z42p$3_n3r NXYeTMn*gD(tsW)UU_r+hc;p~iiM_=(#%1NH# z%Xi6BO Yk`-?hP>|-fuKV z^% z{GI=RoYBdgEB!vyo5+HjGtJebHe=^IzwCvV@$5T9iv5Lgou_(rVvE&3p=1#}*5)_* z#`aFVQ>XleKz48*MS_#hw@djayZ=coqg}*u1wo4JiW>DSYT7rieV?a9tD%5y+$U87 zI4;UFU0xOxIkHlGi*7E<_~b)=P0(b9>iYLKo##;sH?j*2NlOYxXR`0vKYqh4tIC z;VCciqR&YQO)Ux&Ej7z}%>6ft>HQ}kV+^=&Xq`B><5X>n^$eY{Nvmd=9cb|3b4{&b zT$HGM*qLy)!M+-Bn?6LME>Hdo!6zX 2jiFZ5T #c0Oo7bulJn+hzXlJ%kW>1Q@ v_3*KQrC@919Gf(V^s|p1t0c>khO#_jNwOt3t$U z0~3wxoQ7V$mo5m79&J0lwvS%mWN(S&LU?o- *?I^oD=>?k;UPP)|z8c6{3Yh-ynWdu{jaciCgBZ?KH!C|4{h=?f_@{fvz`HfTO0 zD+c3)Cz^-jf9GAoTuw<{7<}(P-71FLOE9W|j}7*rSWsCKO0u@KtZQ2jX9C}rzASm4 zXc1kYXr1u4jXLQx5+D1kYp$DX BktLfyo>4bSlgdpfeJHH4)gJu>Ap~M zp%kgG*{<&U2lU+MdVPGP>mF0b54}(Qk=&uSgVNsjZ4(~~2!M4MY>CVig{$@H7Xt01 zU-dBvXPh-cF7lJRt3^Xw6Z$m3i!r5rIL1DOTCIC0e;hcSoxm&g;pLm=WQVoEubcy) z0_>&w>4VbOm##dcD27N^ODobry*2Tj)vM^}3bFuc!GPF5m*7NNeutO1qRmBskce`ivqznZ&(4hdfv z@%f8n$_kr7GeppmeQ>oOh|@O<@SCS@9bGfRVTt7y>=xpEABtYEl?9(tt7eadPFM+W z$Wq`VAm>>Tyl%>)Ewe2xXYF1&Kl9THi$~$>(8jhP@hLq9&9ODXD?=QLmzq@_Po>EU z1Arp2WqzQ#!odTBpEJK0o)K&@`aQ^=^C;?p;^H0O AjZEFi<)!0!xuZ zw%1n+um5)7o)(yPo}BJ&_^WJz$-5ivsecrEyN=<7=K5T%x0}Y*GZkDR#W0Ru9*dvT zduwMrVb?w?qp=c{9kf5#;VOr1_SkBP!|iFNS^-L>HGpEd0Kv^yhfy#(tq`xvKU2jg z?O-O#xgvs5yPCu6Ne4M!pMt&?)rIBTfNcK#{+^-zNjy! Xy<#zDsb&Iy9hF1II2K~NLY2)4(b_71({I0T#Z^~npfJaz)FS%vQ#Hyzq z8LxqZOv{qR`yOI#Wn{dbs2dL$U^RycYGNA`)xV-%{Cu%E)t+n0b(7nFV@H!az6Tb6 z_e_)=`H^fnc0@31na1tsu5F; Voxzo+?Q?K<{n zrd0CMP@!g*Ulx*=q~0*?#t$kURWr|;e(6_^x`Xg_s@-(p=xin)l`v#h8(-26Q&o3M z7RjZ}%uWF!wrdf4fY{UP6C8HGeY%s91TiJzVKfYt^oON3sV(2@82;Y(YANy0?m?+l zZz@^&5rYZ_r#@QPrB)9buh(~h5NKk>kw3YEI5pV2%$tl)OVxOFP=59EAg+ODx=%VN zBwg&~xF1b_xb{^nNbuJKg-H0xbWYAp^gPwhL0JIrW6;il`fJe9*mN3$Vx9lM1rwBu z41G8;dXC9OPBhbpRG{-@L%4Ii2apAUW1~Nm7B+@CN`Im3cGUhXno 9Ld^~jifD?UlI+vs3y @zva zr4QJbwoO2A sJab|7ndEiqJbrD+FZN>R6hE9~hgj6Z2@ z2=gU?uak>5g=}3~R3BtqzjNOsvktp!@ARa5XyJX7T9q5|J3H?pxc(ndRg_@4@=Fd# zK$!VP{qX|>h#?4fApp=x4#J;}0IIeQOzZ7)@UC$CSNog#@Yq5RWbre{ZO`~AV5qZ& zTqT>^wGfY! rksgiNfL))D=sCt2rN#D{Hn% D(%@Jdm`s;b%`43)X967WAa*GbQNSem0Q==mc`J8U@OF@cz3@?UONtY z_BhX%V)*NG--Gj8RzH 6x4 bIaUQU?I5( RtzXZ*5rxm$u z;@lAoO?Cnh`Pr8EelWA$?@)HPQXRvObR!!Op_ycJpV^}+VFahKc7j@zGp{6i}q zA|f*3TNvp9`l4f*=9=>WV@lx4ySby*Z(a01>$oVW%4Q(h5l=5qcrde#LpQW(b7PLL z@(7y$c!jB(@l&~F+F_uUSj3>vt#KIvCa$@=5clG?59WW`r%K0#Tw7NORuTkWW il1!EIA25zZ-tsVIp`ZP-L z8XG%%zw+C*J<2RFlKJHSSWeN8850yIbFTqz?@Kk=s=t7Rm>w6fV4~d@!53m95V4(M z+sl}nrMob4of>rGu-?)ITOs#nd`G;1tAzvwTo2Gb1qWslU2v9UX7wQ3+iQ2V+m*Bk zPIO7209eZ-Y-EoH3q0O>f>nwc?rE;fvzti;tgZ0uG1Y4s8cOX;_?kI^nd==-z2NI4 z$NH|KIe)h*d)J&;&u*7b3%RDjUz+~b_Tw<3`!k9-TrIr1u^%y}!FFawSlBWAqf63D zbU~Xu6mu~`A`=NoG%?nzl-GTCY+;w07si<)rn1Pr7mORK7PvhIxX<>j>aL sGB#nVoL!*_-y%%6} z`?)l<+aB{g{9WJCGA%J2ofuGfwMP*1D}U!>zTR!S-shJx?0|%tq2FS?sw$`2a9TXL zpBBck6 l$;$=B7RJ9OW|5o};3__+@;Fy{@izAm0ZdOz~1_oK{JKfir=X zKQRH;NguG$!{A(g;NQTsM-g=R_Y>vxnLDX>;N-9{rh;r${QKlXZd1hvOTy#1(wyfz zPrmX&^P=sdp$@a!U(wAK34CNQUMi7SX 2IKUTu3(15s)Mt8;xC2@c}3hoT5r(QizsUpF@<_(WnjhxYT|)ok$ ^;QjW-Uqi!8tUt^$amy-lgp*bc?~no0*I% z_7tYHwJ%pA?!p^K2 P)MYeB7&yDuX0S1oYd| zOHu_U1@Rj*Kh;vCT#%(W=Ec|k38;8vmU54hXAtu*p&Hgn9wn?WA`D4;@dz=TXYiz| z3ipdhcMrc27uPmtVY3@QzMaCmH(;83d_w})t^`{Rz?y^OJJs;?VSr0G%1bgZGLf@+ zG%zgKC+y}cJ-xpv`x!y?+*Cz$=vRf@>N4)=OM&Sukx$(Vq>#-s-h`%8%M$)2M#$3v zUsjBT(}%u#-VdHz8ZpYqq{EeXPM&{2sm-VKQhjr*xZRzA;e6{G=_WNH8)-`2yP bW =7uRmH3!06%Mc+XbNq37gfP6 |a&X`h9!f4QLJFbI;9CG8J%?tL%sTJcXuS5O4?G|U00ae;>i==@f zNZ#K$Ba$n=t{P{eiy73ORpoN`|CRS8xi9~n=2l@xvy{^oOd(>V{ZS}nr-UTgE!!oc zYmVzu%3aX;P| B81NG%J zYJw&=asZ4q@3V4XYM%5tgO(ZK-<(-g04c9A%tkK~pRJ$UWhvf%_Jn=)MkW?jL)IWQ zX_CJ%w95vd5>++)k7z69L_5ou*_3Y1^ R?s5%dwPU)W&e6XIgIF;2~t)Cw`GH)c8`MV$OcpuH1oX^C(wUv2&qdWrtbNy13 zIsw)$eb>mWTQr~jr-Q}Jo$hg1=zp>F?E4`hg1%`jfVzTH)fevrS}1RF493-}^tOK1 zKR#~XcrELC`})m$3QT_xT~PLVQ|HA#NJkP0obEsoKM*?b8i~5xMq0|!k>7HRWWK&o zn9VS>-LY_5>dFlyA`bgS%tF{DB9uiEB|Fu4-xkTI2xeg%WxnP{-@CjKCI4&qf@gm4 z7qCraOoJ&fJpqYbTCN~~uaXNe0ZE>s2 8=GrcR>^FmjHDIaul1y}<1b-1kDu%kqvA{6v@>!^*~LIB63xEflBt?~Xr zK1*49mdF6u=daY?NxP2icHxuJG&?W>_ed_)NcGCHAGYM=hb~PmsBH5IYzS|Npuv=A zK6F{EZs+@oz{^3FgTgar71MBy)!l?)(KIK#*rn7qNnh#rV4J_{yKbEjVCfVo^&(Ap zN@%9}(6i4u;kLLW^@@P6xHeBr)FV^snZky#E)v9UMy`HG=rfe+9yHh6$6GS+a{Fc^ z#*hp>GLSo*MdY1=bb>#@75WPV+gjv 6WL@YH$Nov}9-UVp;~x$)i7xKv-djr!ju9=nBCG~6U22Z3X;SXI;Q)sjEa zeS4*tXE*gz%Y@&qxu^OB&DU{C(pvL{3c}^x*OS~r*E0A*PXy kJu36L?=N_2zhMhnu4){oS!Hswv zrV^jZU@%Zzx$K_%+epy$SNwNxCXwtcz>ag9Tt+&z!E{O$xxt9Jc4TB9D@t}6I6esV z#*~dsSxtfK$sK9K{+}w`Cr=nYTr`tKNYf_dSywzwz`2y!6#v8?w#Q|bMO&umZzF}` zKOoh)fdUp1rU8#mD&Qgq !N$reN^mcVy3;v=sq++91jhsyPO^u9#HMf+fuGYsCFzg>{aFWrs4QcjTMXwD5 z4xX 0+UY_BQWE46qv^LkS-BKP+ )=Q^!!q!NTQKs#?-_PfwBW-~MB|tV>e^{S1app&od`DQa;qv5){0z_((3y)- z`q3HFhTunI2Fsv9j?qx59YXcS3GCGcmxt~*d&@|&QH?j_Hw;7?|LeYAM%CSIWfDvQ z_#L5&xIh!#Js?C~SOV5(c{z~Qh{Gn3*c`KC`{jG&ZA57 U=*Dk-6N9W}zId|oVmpn&Vf%-P#rn)GdFZv1l1G>`w*eIp+sKRDwOeYILD$S<+ z3*O}3=5i$K-KO-RFYiWTXE`3}{aRD?RsvRaAS+gMDjzQ_eO)Ljkjs_78Ep}#)qN!Q zhix0_TCsv~I4|l(B40}-Cq31lZAjq%b`etliID1K$_y%c0#dvb1t@9$6TLZvlTHV) z=-$E@V0!>>tcz5Oz54K4v~*c?X37`JPg;5E#Q@@WrPKeYRb9j<>OwfaM}FGDqj8Ya zz{lfVMb?i|&P6Jo@z)Mfs)SW^|2UI9LjUtb_JBN^F@US RR@PDRYxq%)MU*Vjuh=;H?44KY^8meC8%s*`~-h4h0$YO<#ukq*U1PIblq z*z+N@G&vg?1r+Fp)Bek%{LWvX z-{CK4qW_^G7DSci_9yOv7W;Z3)CN@P^bzas+Z<#`oG+2zmmtvO?mkeS{l$KATrT@Y z5mX@az>@9@GidW)OjXyum$^A+l}VGE=eQek)ngd|n1YH+7CbmdXRB-sgzz*O{O?n% z=0P)nvHmgu#`lqaNbJSRetzyvKp{OnonL0TjhQt@xl#q!9hP7Fp~`fuC9rm4Zu5)z zW0nGP$)s1L-1qMURZ^RsIiR`W&tGzl#rw1osChi!O{jB_{d-#TOF4Dl(!ZP)$_kq= zfpoTI-7{)JKJ**pCM~ec%!WuY@^`o0_8q1anHE{d2NBfS&Uh!)naM(DVr6gZngOlw zPg}f@yDCPg*LO&1P_4STp)ua1DGswN8@J3t!)^A-LWlb@C;;@xvc09{u&piHB6lhA zl7(Y)hVR)XwiTEEAG!>jhCsdy|8*|+!~PK652v@!q#D~Wu5HAKysD9EhnDjZkKC=m zQ_QB`+xHPHTlevmFwb004>9{C?dP0YjDN?N{0ov~fOTF4aDgLWn_X{Yg7RSUnL?RX zDQq+Mj{BblY*E^x-i@c%ioR0qZtd8wB*@;VcSD8-V|T?b_nF*iYkEB>8^ZqWjw ev21Gq064z}=b!lVZ;Vzh$rV2h_P>!)$+6B}U-WNgk4j5R z!R}RW8{xulSr+ua(rQ!IDKQ_MYHU1m8 eh*)2@(fOvBxL>&Gzky2beyHywaS*x2z?bZ^>ILkC1 L^`dNK9 gt+&T&;J}AQ{c4}3*3pmWYZxYxtH$Y^t3KmKTyI2nvnS$!? zW#I(I@K>%p&}ZjufnG4uD`hk;FMK|F8#xdKv=mebYNB3mB%_DTaU4R!{o`h6)Pk>2 z(K9{B;kXL5dX!ZW#xfqCD%FSC^DSLo*p&aaCL>o<%^%NWb@Py=`v2-2o!g%d>dSF5 zb`0r6uCMKqEj62ya8HxAnZU5}&dx6#tp?9Ru5QvYh)uY6kP2TD6h}cXmbuAdIH{}T zQ&Un}da12@`*N{Mu7b3!NNzf3D{h}bW_Yb#;|APeyboBC^)AQ-SbHX%n2&Ld(=ng( zET*eiyzXh}IaFI5QXZHj_;5!sM$`h7WuO+tJffz%V%n01$2@C`zRxI_`I+za!Oas> z>dUyj`90u1jXk>&j-%J;IikgF5hE5nWg|T88#bppoIjwkPfY?MXo xAosdPM_ztI^NJpHp}o8_R#puk9>xb!M*37A?+>fj|t#O3VZN{`^r)<3Y4r^$)G z9_i=JCMq&h#Nzg1BG`ziYJAtdUgI>CbY|lwkB-KX7nU00m%v_Ku_4VGpX |vth|7M8^3QnJdXcj$Z}XZnwnjmIOc?o=Dv_VN`W7e}Tuk+djrZnstq=YC zyw5^E?ANYjYVRBl_$PrzNRhouw1fFHlYt#qcMrBJtq07q-G{K>w55z+=yC9Dg6YmA zfTbu0Mjs&eh!=0mHvChJ+ m%#wIh8vtI`%||7jnZ}Y?wd2JfJY4K z*=9Pq`?wy(OOO7%_es!y_8nzb_+}sWHS4~(pK@v1g4yFJsjniC^%l{Yn|~~s_-TGT z)9LgUnByp7@abNmJyTg#(}tlZ1Aaf>lUrDu38Z0$tUUO7X$ihz@Abb% &;v_Q=3(FEFF~1YB`GAJL*!4=1F;Z z)v0Zjo7;aB6w(wi;UF~`K}E(Wwa|vGFv5fT<9iAh2AFSmm)%1e7d>AT$dSIAI$uY? z4W4ox6pGWiUC*&U>sR`@->-mztWb%NJ%4)!<2jDD zwVUbGtAf@p!A*8!QkngRK MFBiL=%3Ip?+spcl)(jh)Zr!{NOq~P% zcIklh7eGDU^+9Vq0C&6zqz`i4!!QrKR_4Wsb;oFp@x@CON|;J% 7uT~gui;dHf&r^*?M z+=q3&NAJnd5EA8TOg`&NH%U4A+eT`7&<1RgF{VlHcK@Fzm+pt@!q=kiM7n%%GN0`< z!s`Jwr~supt@_Ex#)M(GrcVERiu9Em={G|;PXK!C9f)#*G#0+KhJF>nF?(h~I(|%! z1;_eya^U{Ty2%c $bI<0 ZSlM3PnDXygC> dzOqNi?Qa>p;k*8 zO}!3K;;Y_l2YA<6u Kc4i#iP|anFvy!&kV_f+`J02osxU_g=i)tV)Mzzj4RUi6qJ98 zzz*jhE~MeT1BJ~}X{vIS >zpox zhTNHoJ0FR9l-k<@4BIBFg$cZ}B)! nkbZuU*HnlpfBK=OumOQ9p5Qnr%VoR4MUF2rZFB z*#@ ?X0myH=N8#t|oJM}|YHQc!%4DeW0nNn=Bif-Ju z8QC3f8$Sw0ZXDaEAu5bWPa(D%H~1Ac57D(}bC{@84fIH+A4ufh^mb{Jc`f`1_9ml3 zNr0K+gq~NmWxzKbzxAN%B>bmM4iGgAUei|f qm;}pvuLy;4) z-NrP&K ^hXkP?4E9Vxj{%^=^$<}Zc=19=&h;3SU7_(%mz@UK-11->OJNPL`VE|4q3TxsU`5mbttX z)6b^mPEBZaPXjzZi4T9-lYWuAdB>0EGq|BXrPc!BOn51=QzM_h7x$#2r7LM{NT|Ts z`BZpY*oehI+PB;0 j2Az?$a3VqkP zJRW`jg6|LC^TX%y`RVh+`}6p`-#@(GpV#v(R{BkOIMQ%(uiprB a|Sy*cLOuUTy zJ)q|qE_=gTO0|1aLp1dosMOXfNrP#2q@uZ3t95g8KDo~?X*#Rjur# beo$4~opPY&qeq`x1`+!?x>(`dCpCD<9fM&K!YJdZ%B+eE!u zj!id+m94Tn5TIZE`AEFPUTKSMy4WMxy44uHoP2ofX*&j!y^lK)bjn#8vx@UJHJ_D= zdT6)X6roJTe^`NtA&IWlycU~Sc@e~?XaXL*Xc>5w6RsV-*F!rj+0fz9`qYxSAkCe9 zIO2k&s6>dXt7Ip`fA|PPFHIsj(F@RP4djVY`HUwU>K}dD5%OXDl{WZcW~wlMreA?U z7UfB7Cy$y0F`*x)z{Ck&V?jnZ#9bi}ax9~5+b&ico6jWZ3~wUNqmncDW5{3`78O)( zF%DIa*97#GUGJ1g8-acHvbcSBGf52dy36BQ!iUWc%5k_(u{DmmcwD(tLRrl7je6=> z%8LvYf!q>8U>l@V6LmXPyS$2dpNlH6^N%C_YFzLeEq;BJ7@n%pDXPCG%Ae`XqwDqZ zrj!uDVwZvk5`wQkSVg;qhApA{A_+%360cwUrN~}icNy23MN1Nihj@Un^VkavoBF;- z@sWn(QQ8_`B#zJ&l@;Tq41&OYiL?<;upWQp@;c%Y+t_nX De8h=mIe4p z?(pVPW)XP$&Y^8H?AnYlpI2&H>p~ixuj;cuYcv|&+itM8#AMHE&igE JZp`uktfbPR%4n_w2LeSM~YJ#W7P_8?svFI;dAt9zX09Hqq=)Dv&?O5j?K?cZ7Q< z7~6!gNe(*)x4*|Kc=9jgiHE*MFE)doKEb;-4OW#HS^uce zz{}sUs12y_W7D$jBWB?XMa}6N;Qny{M)#-N>iR?h3m_&Jk^T#DH3y-Yut%o*vpI~E zOa>hOVdX#Fub#GhyU8@Rxmk7^Dg|){;`NwyhJv~~N@ctIm z#6;>MPd>8owIjqhqkCI#X!Eon_Cz6%+fiLLFKjkFcx{>;L&7vaJ##ZG_a*e|Y_lNC zQww{PNdU5v<_|xPd4$N-XwA}I@jUM!jL3rNxIcY1-=lJ>O*Xg!o0CFyd9|%3VlW{f zyFD|wbTy@muypgYf{B-^>${I-FfHmpSBh~VYeg@F4-hW=iY37PMS@;a{&S(pB3) xicYWX`G#+NhKMEXanOC+ zF)t%y2}#G<4=etE@+ib!6oBS(Nq)>5xwmqyq22?I- !;jN2y>saHSX2+9ES^9p%D1KO6_@yA2aC9XF) z;~mN=4Lufe38)D3@s^L)Z!28>sG}-k;MpM;?xmcZwcZFMU316`(~JT;O#XYKJF=Jo z@`2(hmNoTJ`cfK0ZOw2(OJcp#8R>xfc9h~qrZM!onw9jYL_hPbUH$DP$JwRiKo?wi zvU(N@cRRuDatLMDG&@%Xa0^KsJH0@ub_$hg$vpbze2G Iztz$*N#rfh<>_c7$jYt+Th)H;99;b(L30?} z`lY&*zE*l<;=DC8iRL90D)Y0GgjN#Rfc4kSiUWHUwiPdSsGI)q>cBo$g^!03_JbNc zH*O!oIR9UxFI9=P&Zc|HE*h+R0o+`tU0^DJax&7QgnC=Zaa%4@_d9p_8i-QU{jfg{ zS#Zt|lTtXr32+AXzTh6H0m+oI2rWk5SrYe}eQAlu?Jxq;YK~p0YXJ2dh@6v|;nIye zR@R*Y#ZcttqQdrfN rRlZ@nZ4~SW$bzM;T?t~rv&H?LQvOxjh+y^y@WJdUIM35o$@s5jb@0!Nd zo6BO%!vdE)VY07q`$60AcU%>~o!BY{(ronwN^5s7zJL@GqoWm;S1lem-MHLk)Mvw@ zdC3?gi8PKDbD)K)>QE^Hi*iOf!6+Lm#tdThyC^sRY<~RR1ab3hM4ltcQiF@Dzlrnf oJNmj*mA!gz9Ex`lt9`I<#EicW{||S$FJu4Y|3CTvf0h6L0h$ t{SIF2bu% 4^Y&o{00y;IF}-70C _C@Q}62Q9v&{Ae| z1GR|*73cerrcMhQ{