From 1d5fcc22814389abfc3f461d94ca3afe3307fbfa Mon Sep 17 00:00:00 2001 From: Sean Braithwaite Date: Mon, 8 Jul 2019 19:45:52 +0200 Subject: [PATCH 1/7] adr: [43] blockchain riri-org (#3753) * [adr] First draft on adr-042 * fix diagram urls * Update docs/architecture/adr-042-blockchain-riri-org.md Co-Authored-By: Marko * Update docs/architecture/adr-042-blockchain-riri-org.md Co-Authored-By: Marko * Update docs/architecture/adr-042-blockchain-riri-org.md Co-Authored-By: Marko * add go syntax highlight * more highlighting * consistency fixes * Add references * new adr number * Fixes based on feedback * aditional state info * Add details on getSchedule * replace spaces with tabs * fixes based on feedback * add clarity around r.msgs * clarify block processing * fix off by one error * additional details on ioRoutine * Update docs/architecture/adr-043-blockchain-riri-org.md Co-Authored-By: Anca Zamfir --- .../adr-043-blockchain-riri-org.md | 391 ++++++++++++++++++ .../img/blockchain-reactor-v1.png | Bin 0 -> 124042 bytes .../img/blockchain-reactor-v2.png | Bin 0 -> 120617 bytes 3 files changed, 391 insertions(+) create mode 100644 docs/architecture/adr-043-blockchain-riri-org.md create mode 100644 docs/architecture/img/blockchain-reactor-v1.png create mode 100644 docs/architecture/img/blockchain-reactor-v2.png diff --git a/docs/architecture/adr-043-blockchain-riri-org.md b/docs/architecture/adr-043-blockchain-riri-org.md new file mode 100644 index 00000000..3cdf6e31 --- /dev/null +++ b/docs/architecture/adr-043-blockchain-riri-org.md @@ -0,0 +1,391 @@ +# ADR 043: Blockhchain Reactor Riri-Org + +## Changelog +* 18-06-2019: Initial draft +* 08-07-2019: Reviewed + +## Context + +The blockchain reactor is responsible for two high level processes:sending/receiving blocks from peers and FastSync-ing blocks to catch upnode who is far behind. The goal of [ADR-40](https://github.com/tendermint/tendermint/blob/master/docs/architecture/adr-040-blockchain-reactor-refactor.md) was to refactor these two processes by separating business logic currently wrapped up in go-channels into pure `handle*` functions. While the ADR specified what the final form of the reactor might look like it lacked guidance on intermediary steps to get there. +The following diagram illustrates the state of the [blockchain-reorg](https://github.com/tendermint/tendermint/pull/35610) reactor which will be referred to as `v1`. + +![v1 Blockchain Reactor Architecture +Diagram](https://github.com/tendermint/tendermint/blob/f9e556481654a24aeb689bdadaf5eab3ccd66829/docs/architecture/img/blockchain-reactor-v1.png) + +While `v1` of the blockchain reactor has shown significant improvements in terms of simplifying the concurrency model, the current PR has run into few roadblocks. + +* The current PR large and difficult to review. +* Block gossiping and fast sync processes are highly coupled to the shared `Pool` data structure. +* Peer communication is spread over multiple components creating complex dependency graph which must be mocked out during testing. +* Timeouts modeled as stateful tickers introduce non-determinism in tests + +This ADR is meant to specify the missing components and control necessary to achieve [ADR-40](https://github.com/tendermint/tendermint/blob/master/docs/architecture/adr-040-blockchain-reactor-refactor.md). + +## Decision + +Partition the responsibilities of the blockchain reactor into a set of components which communicate exclusively with events. Events will contain timestamps allowing each component to track time as internal state. The internal state will be mutated by a set of `handle*` which will produce event(s). The integration between components will happen in the reactor and reactor tests will then become integration tests between components. This design will be known as `v2`. + +![v2 Blockchain Reactor Architecture +Diagram](https://github.com/tendermint/tendermint/blob/f9e556481654a24aeb689bdadaf5eab3ccd66829/docs/architecture/img/blockchain-reactor-v2.png) + +### Reactor changes in detail + +The reactor will include a demultiplexing routine which will send each message to each sub routine for independent processing. Each sub routine will then select the messages it's interested in and call the handle specific function specified in [ADR-40](https://github.com/tendermint/tendermint/blob/master/docs/architecture/adr-040-blockchain-reactor-refactor.md). The demuxRoutine acts as "pacemaker" setting the time in which events are expected to be handled. + + +```go +func demuxRoutine(msgs, scheduleMsgs, processorMsgs, ioMsgs) { + timer := time.NewTicker(interval) + for { + select { + case <-timer.C: + now := evTimeCheck{time.Now()} + schedulerMsgs <- now + processorMsgs <- now + ioMsgs <- now + case msg:= <- msgs: + msg.time = time.Now() + // These channels should produce backpressure before + // being full to avoid starving each other + schedulerMsgs <- msg + processorMsgs <- msg + ioMesgs <- msg + if msg == stop { + break; + } + } + } +} + +func processRoutine(input chan Message, output chan Message) { + processor := NewProcessor(..) + for { + msg := <- input + switch msg := msg.(type) { + case bcBlockRequestMessage: + output <- processor.handleBlockRequest(msg)) + ... + case stop: + processor.stop() + break; + } +} + +func scheduleRoutine(input chan Message, output chan Message) { + schelduer = NewScheduler(...) + for { + msg := <-msgs + switch msg := input.(type) { + case bcBlockResponseMessage: + output <- scheduler.handleBlockResponse(msg) + ... + case stop: + schedule.stop() + break; + } + } +} +``` + +## Lifecycle management + +A set of routines for individual processes allow processes to run in parallel with clear lifecycle management. `Start`, `Stop`, and `AddPeer` hooks currently present in the reactor will delegate to the sub-routines allowing them to manage internal state independent without further coupling to the reactor. + +```go +func (r *BlockChainReactor) Start() { + r.msgs := make(chan Message, maxInFlight) + schedulerMsgs := make(chan Message) + processorMsgs := make(chan Message) + ioMsgs := make(chan Message) + + go processorRoutine(processorMsgs, r.msgs) + go scheduleRoutine(schedulerMsgs, r.msgs) + go ioRoutine(ioMsgs, r.msgs) + ... +} + +func (bcR *BlockchainReactor) Receive(...) { + ... + r.msgs <- msg + ... +} + +func (r *BlockchainReactor) Stop() { + ... + r.msgs <- stop + ... +} + +... +func (r *BlockchainReactor) Stop() { + ... + r.msgs <- stop + ... +} +... + +func (r *BlockchainReactor) AddPeer(peer p2p.Peer) { + ... + r.msgs <- bcAddPeerEv{peer.ID} + ... +} + +``` + +## IO handling +An io handling routine within the reactor will isolate peer communication. Message going through the ioRoutine will usually be one way, using `p2p` APIs. In the case in which the `p2p` API such as `trySend` return errors, the ioRoutine can funnel those message back to the demuxRoutine for distribution to the other routines. For instance errors from the ioRoutine can be consumed by the scheduler to inform better peer selection implementations. + +```go +func (r *BlockchainReacor) ioRoutine(ioMesgs chan Message, outMsgs chan Message) { + ... + for { + msg := <-ioMsgs + switch msg := msg.(type) { + case scBlockRequestMessage: + queued := r.sendBlockRequestToPeer(...) + if queued { + outMsgs <- ioSendQueued{...} + } + case scStatusRequestMessage + r.sendStatusRequestToPeer(...) + case bcPeerError + r.Swtich.StopPeerForError(msg.src) + ... + ... + case bcFinished + break; + } + } +} + +``` +### Processor Internals + +The processor is responsible for ordering, verifying and executing blocks. The Processor will maintain an internal cursor `height` refering to the last processed block. As a set of blocks arrive unordered, the Processor will check if it has `height+1` necessary to process the next block. The processor also maintains the map `blockPeers` of peers to height, to keep track of which peer provided the block at `height`. `blockPeers` can be used in`handleRemovePeer(...)` to reschedule all unprocessed blocks provided by a peer who has errored. + +```go +type Processor struct { + height int64 // the height cursor + state ... + blocks [height]*Block // keep a set of blocks in memory until they are processed + blockPeers [height]PeerID // keep track of which heights came from which peerID + lastTouch timestamp +} + +func (proc *Processor) handleBlockResponse(peerID, block) { + if block.height <= height || block[block.height] { + } else if blocks[block.height] { + return errDuplicateBlock{} + } else { + blocks[block.height] = block + } + + if blocks[height] && blocks[height+1] { + ... = state.Validators.VerifyCommit(...) + ... = store.SaveBlock(...) + state, err = blockExec.ApplyBlock(...) + ... + if err == nil { + delete blocks[height] + height++ + lastTouch = msg.time + return pcBlockProcessed{height-1} + } else { + ... // Delete all unprocessed block from the peer + return pcBlockProcessError{peerID, height} + } + } +} + +func (proc *Processor) handleRemovePeer(peerID) { + events = [] + // Delete all unprocessed blocks from peerID + for i = height; i < len(blocks); i++ { + if blockPeers[i] == peerID { + events = append(events, pcBlockReschedule{height}) + + delete block[height] + } + } + return events +} + +func handleTimeCheckEv(time) { + if time - lastTouch > timeout { + // Timeout the processor + ... + } +} +``` + +## Schedule + +The Schedule maintains the internal state used for scheduling blockRequestMessages based on some scheduling algorithm. The schedule needs to maintain state on: + +* The state `blockState` of every block seem up to height of maxHeight +* The set of peers and their peer state `peerState` +* which peers have which blocks +* which blocks have been requested from which peers + +```go +type blockState int + +const ( + blockStateNew = iota + blockStatePending, + blockStateReceived, + blockStateProcessed +) + +type schedule { + // a list of blocks in which blockState + blockStates map[height]blockState + + // a map of which blocks are available from which peers + blockPeers map[height]map[p2p.ID]scPeer + + // a map of peerID to schedule specific peer struct `scPeer` + peers map[p2p.ID]scPeer + + // a map of heights to the peer we are waiting for a response from + pending map[height]scPeer + + targetPending int // the number of blocks we want in blockStatePending + targetReceived int // the number of blocks we want in blockStateReceived + + peerTimeout int + peerMinSpeed int +} + +func (sc *schedule) numBlockInState(state blockState) uint32 { + num := 0 + for i := sc.minHeight(); i <= sc.maxHeight(); i++ { + if sc.blockState[i] == state { + num++ + } + } + return num +} + + +func (sc *schedule) popSchedule(maxRequest int) []scBlockRequestMessage { + // We only want to schedule requests such that we have less than sc.targetPending and sc.targetReceived + // This ensures we don't saturate the network or flood the processor with unprocessed blocks + todo := min(sc.targetPending - sc.numBlockInState(blockStatePending), sc.numBlockInState(blockStateReceived)) + events := []scBlockRequestMessage{} + for i := sc.minHeight(); i < sc.maxMaxHeight(); i++ { + if todo == 0 { + break + } + if blockStates[i] == blockStateNew { + peer = sc.selectPeer(blockPeers[i]) + sc.blockStates[i] = blockStatePending + sc.pending[i] = peer + events = append(events, scBlockRequestMessage{peerID: peer.peerID, height: i}) + todo-- + } + } + return events +} +... + +type scPeer struct { + peerID p2p.ID + numOustandingRequest int + lastTouched time.Time + monitor flow.Monitor +} + +``` + +# Scheduler +The scheduler is configured to maintain a target `n` of in flight +messages and will use feedback from `_blockResponseMessage`, +`_statusResponseMessage` and `_peerError` produce an optimal assignment +of scBlockRequestMessage at each `timeCheckEv`. + +``` + +func handleStatusResponse(peerID, height, time) { + schedule.touchPeer(peerID, time) + schedule.setPeerHeight(peerID, height) +} + +func handleBlockResponseMessage(peerID, height, block, time) { + schedule.touchPeer(peerID, time) + schedule.markReceived(peerID, height, size(block)) +} + +func handleNoBlockResponseMessage(peerID, height, time) { + schedule.touchPeer(peerID, time) + // reschedule that block, punish peer... + ... +} + +func handlePeerError(peerID) { + // Remove the peer, reschedule the requests + ... +} + +func handleTimeCheckEv(time) { + // clean peer list + + events = [] + for peerID := range schedule.peersNotTouchedSince(time) { + pending = schedule.pendingFrom(peerID) + schedule.setPeerState(peerID, timedout) + schedule.resetBlocks(pending) + events = append(events, peerTimeout{peerID}) + } + + events = append(events, schedule.popSchedule()) + + return events +} +``` + +## Peer +The Peer Stores per peer state based on messages received by the scheduler. + +```go +type Peer struct { + lastTouched timestamp + lastDownloaded timestamp + pending map[height]struct{} + height height // max height for the peer + state { + pending, // we know the peer but not the height + active, // we know the height + timeout // the peer has timed out + } +} +``` + +## Status + +Work in progress + +## Consequences + +### Positive + +* Test become deterministic +* Simulation becomes a-termporal: no need wait for a wall-time timeout +* Peer Selection can be independently tested/simulated +* Develop a general approach to refactoring reactors + +### Negative + +### Neutral + +### Implementation Path + +* Implement the scheduler, test the scheduler, review the rescheduler +* Implement the processor, test the processor, review the processor +* Implement the demuxer, write integration test, review integration tests + +## References + + +* [ADR-40](https://github.com/tendermint/tendermint/blob/master/docs/architecture/adr-040-blockchain-reactor-refactor.md): The original blockchain reactor re-org proposal +* [Blockchain re-org](https://github.com/tendermint/tendermint/pull/3561): The current blockchain reactor re-org implementation (v1) diff --git a/docs/architecture/img/blockchain-reactor-v1.png b/docs/architecture/img/blockchain-reactor-v1.png new file mode 100644 index 0000000000000000000000000000000000000000..70debcd66988635a180efbf0fde3635458c59597 GIT binary patch literal 124042 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 literal 0 HcmV?d00001 diff --git a/docs/architecture/img/blockchain-reactor-v2.png b/docs/architecture/img/blockchain-reactor-v2.png new file mode 100644 index 0000000000000000000000000000000000000000..086bf71bd88d47e02fc4f47b563ebe365695836a GIT binary patch literal 120617 zcmdqJbyrqxw?0fNpdgKupmZx;0@4iv(k0T}(j|>_hjdDpbf_R9-3>}egLLyd7vQs> zJ>Idu!28GTJz!ne88eT0%()1XmlZ=rAwYqFfkBlJ7gm6QL6C=mfrmr72Yw@K$Sey3 zgUsimq-t;BBxd{8+E~U)-@qIOMn=-cnTC6L7uz@oz~3a&Y7bdS%?(Z>1|o!(ewUSAFLM|3a2~Z zXym5+a@-+5PO`oxu#40D%c^$`lzD#>G)$Aa;B8@y;#kZV zpZrekmqKm3Vn^}!80Guu7Wz|%Htd%k+GUQPGv=GCsZGYY>+YiQnCou+Q|-J{ArU{4 zn4jylDep)TN3WfaHT+$guSEOWcZoK&5o6F>erG>2qG{I6MEok^DGsOjwrj)JSg?D0 zgc8ps)>+H5d^V|OGlbp?F(TJX&9{NxBOd-ZhpkjUc9qh|w>6`bL1cI?LLmEt;NJF( z-1NLwgsjS8GlTPAdSdt<65qo^&g;~mGV@OCU*Z~nLXTbMI`0V;{J=q>67hP|X|B}U z8g21C9jo{4@=D%lNGC@adVa#QHdzmb+N!6sNI%k(~}9;WB2WO=#fXqc5p zE`9|26-$4J#XWHk{c#VI*Q118V>jJc~^jr|0TK#z@U zxZKuY@CQaxp#*k+`q$C3XD%1ip&SvO84S&(#%HqiJaYq8O;+gHMQ4&KFO=%NMeKX& z3(t|}MBaGj%i=ic@m(sKoogd^)Yoa!QC zTKGI+uhpvWxr6pr_DK}5l<^w@2;K}oIwG|?n|fYG4NV)$pXgh^6R%POLi?TPISOt0FEP~&4u{re_dN8=Q^7RH~NgcEHt99K6j$K0`gSE62b*h8e#O>N_V z({0F5eYCjg8yvbmeTdk-&)KFa<^+CUyx`al@6%{(R?tO+iDW$&NUvN_*RuAhPIYhd zOJv`4-GJS8M0i*LSDTK+bZC!w+$Ldx0ecXC8Jiy%?mD*q^>Xc}TFC6BF#K!n5Aa*v zHCaEU@d*r71_j%mTTLfh_H{Q`%(9NVYbbo4-+!M@ZROZ(f6r0f5ZMq`g4XoJX+irn z*WYA~I<)Lfc{-`XOHL_(;p>i526#z zMmmn4u3FpJqK51!#68z!V9*?%`+e;A*U*#XJy(3p3T0a{2Z@pMK(#jKyhzCcPpe>@ z>`H`8_IA)lmGWUqX*M%^_ld!2=YtbF{^x;dfewD(Ip`BAlqlzmyc1@LqDkMFNaK7S zk&`rwXv}|yGWHCgYI%Y>It)ucUbGY6U(I}RB_Jn{Gxx_MYsL?HA3sopWm~Jjc2j8( zJ$;jkQD@Vz!c>` z*~6b522>?PbE72D8PnPC!qL)vONp=zU#Ju}=9C2m`4wcV`KpCxyg8V`#+h6o2^S^{ zpR5|G;ME(E({%BlRoA00cX6Wru9~)JQEz(SQqj;fkMh*n+;HEIron?R0l(2XzRtHc ze)*}QB$2RfPLcV`{Il?!X?v$dgu+FcQKRI|hfl*@5FZCq6B4*8u)rlVrCHGQy0~ju zTqv1v|5fux(%a2`dq6z$e5W7{RVeywk%f&bhSf*3%APJy$84oDE%9JhNzGNSF>+%e zpU1>EW*e13(Qs*RmsmIOJ;z6^;=GFAM_3=1Hk=sO=$?Pu@jWY_z^C6}E2`ww>~V}c zE8))lyTltCJ0mbk#ALhja!cRH5>aHaKE89O5glj#J57@M?DLbT`;C@)svmSkEADqr z2=|GM^TZ|uealvkIOqC=dAe1JnnYv1u=4kK1U4mMRSz@Abnfz?-C=S~1MOYhjD~LB zDeo&G5i&<{^U-%a3~!OVsbL4rJoI>#VaChj8nwPyc*OL5{6Ui&lOo`h%AHb=op!-7 z_9Ix4;g^0CrnFW|*zcmoF^P%IVyP^d5!3bH{q3%xXEYAAI9;zlb5?f`bJ>LYdFPV8 zoFSZ_DyT(ZdOCK_!Nl;YC-Ya+xXA9xW85)D)eSNt1_dXJqLLCM^)en*61jpSUwr(D zmr?wWkX-CSUriy`_|`<1J<;Xa;(GdxlY=tJ%lBLK3o_5wk5`4r5M%1dMbnOWk;+D^ z)cqrAjYNN{co9zw$P&jMO651;ee? z8ebF9Y-1sVNi+lxLoC+Ju6F7jTcv_zAgMvop*Xk5o;KHtVIELDn)}QDNrSfbCWC@r zB{xQC*D&{W!N$`D{9&v6W0s;Z+;j}@>NwUdS~6?pb+5Etx?g-i3z*fwb6n0APlap! z^}_LMyJ`UKypCm zV}|+?pv@<@nWj9F9+b~5|NFjVi)Zznn)Cu6cIZ*~*JhO>X2iN@!t*1;eVKBo*H+=@ z@4uh({@NiyQ##>r|ANZ{149ZUA^b|oNqch^Ii+{>y5q0hk$Ze~r))+brXck><0O_S z#iT*6@{xO2vlMoPzo0}^vH7HsW5rIx^`hNb|AnYw?Qx%0^ZbsxJ4v{6e&UX8-+oG+ zUCWMZ-zneW!q*S?zxl(!A(5hE!|`98WSLKYkzv$sq?U*xk8E__mkh$B@X6dxRkGcg zYht!rkyfj-&Dor)mSWUt-t02r{P745d?HG-&Q_v8AtzhA$tCKgt0TW=tQ4siw5pfD zb7Wo-FHGrP87&L}QdLBMR6wEMY}Ox`Y8BJK>`6fF#`H-F$`?5l{*&?q>ksXpPF~SKjKdy z6j$LuMU#wYB(55Ewx8-d+!*i0MrSudTE#AM`uqFErw;sH35MGhkn&+*B?V6FIKc`F zJg~&hnZtO`lD=R~zH#6Vm(>}Jr2hJ4&8Hmk0d7po^;NP751Oglr@rW?LiZ}?9zFQU zo&UA~1=1P}94tDi05S}Byf8SJ8$-I>^x8~arI;d~J&IHspS#cY8t-hqLv%8SRd=g5 zy!$L~%6vcE)^trgr_FD1U@Dhx28;oBvXaFl6|hk-Q@{h)T)0NGKkLg73eZ2<{biZF zs!pBAY=Ba4!b?B|?j;wDL$~q;|Guh*Zf_FXQ29Hta5xdO@sC4K?=;Mhh$Mee&|3}N zmLGXl(IM4kon~#WsbN}WbFwmz*J-zvH<2pgOIr{Yi+e`~>J#qJKSMcEXvI%Q1tAH8 zuX!S&r=JKVnn9QJz#YJ#zW?Zn{n{GOHG}%kIELlAKdBGuF{lYRO|08iq+zGV6SpLb z@6?kA)Wct0hYJap3U*Auh9rs5{J3}19%0KYZ!ELu)(}+{y|#GT zMymVj*#Fbgb-3Bl>_vCTt+gHkYb_e5j6s4lAM7Q&c={`VM1O54hcT_x?Q~C}-hM4T zxj9Q)`#=MSf%j~CN*1+8!l3)*o-dAs-lkK1=6)1?)6!t3z1RgQ&n9T^oBhN%(k6p}Gz;%jgk4=u~!H+D7( zhnt&mS1xX4!KnjeacUuriUH&;hESX6R;8%>ds7E{YJ74_YU@sS0g&!u>h1yE>Arxq zq(qjdAER*BCOT{E530K})G$0?sBTz_ufVCi%35RjT2a5yNgmAx993IQzqY+SYtb_S zFTL2fbRw|3S2CQ7(Bu3q5JbJ}tNKfRqJHT&X0Xwl8prGvczU~YSvAk@KmX9BQgte;dOg6)3lymS+aLv>L(9NMoj-6xpdAv>iByus>|S zwcb`yAZvD0`ru%2VkarDWC=KIE3i~b0H0NSTxQChai{=+)LRI3K?g_!J4$%{uIw`y z#2Ws?F!db!!L1(<@gOQm6{(i@#4EC&H7cq{x!lHA zbWT{fnAS-<18_o8UAV9IEclq1&pzCL6z7YK#WyznnGz8NJEAw4BOq2wC=|G(REx)D zHpmRxJ3=7XG%WR}>9`zi(xiEu6^!?joG`b%uzCmu0^Y}HX=_?Tji8p%@aCg~Pnt|<>m_%xw-?s_~Xv$3c<$F>&!_gzuY~*p#yBKf`TyJJy&kEWW1G-7UTcM6H zVv)RD<0g$7OX9Z?dT+2$+Eo2c~nIwwmk$->Uev0d89y5 zq1O5>K8xYUZ1Ko%o273%%iexpTIo$z_+qYRGMpQlEtjT!v^hye;(1XH!w5TQHb8? zQFRj5@~hh`cz1$GxJnH9FFFdsbg%y2QrGgu>3(jG1B$fptKc^>tOAqe?*fRp?K@+x zdlFd`a;5R>Tn;}YOQSvErDkeA$>cqrv7_WYJ=-XykW1yQc>Dbx6o8g`Ip$-`Co3d! zr4#krgKk_rfTx8jMXhhUIE!WL%=UX*H>964Nxooo&zhHTw#>~{&C8sa%{`#(vCriw- zE-Xa!2@Pk`p_)i}x@f9d*)Eg!)^AAB>tJ9}n&5!}A_;oyHY8S^BVlX78+1lI-COty zf4UgXufIN0ppYqytk&dGjVy>uuevMFq+Mkk>2@?}RADyGh~?!wZ?CRcs9gMnOZ0nu zy~73{cDgZAR!GB7a3~2-KNN0V#l*#@4C|14N)Q>ot`t`HQ=N2az)ZE2XVqru>MQSYg9F{4G zSBeD+6qTZq`s1N^OsNf8Lx0ZiE2bTDQR3bDC8;>DG@q(p1?+H02sMyja{r>?z19*| z7V|06sOc;EkeMOgs^ZfF7KG`eV;Afm+`6NJIlI42s z`fY(2hQCx%Mg7r;X)6tTqb4hjlGnHZ0`pjU@uPmME6wxD#0L*m*WN~r*bj5kA(~u5 zuTG~-cYQzZd!E3pqBw;?fP0E6!3G7m_Xs{~h6-ZF51;UI4t3xK)T@n>XXfoHm1=9P z^rtbkT^vN-SQb2)A%kc&sOe#9O;l(b)$UG9z*8J8NA!Hd$W&<{eETj@z8 zyF5SUQ1q$VCa5q@*gM~8;m1s0701!q&wl&e-|$R+6?f8Mb}i&;YW(xoM(LRyF^D0M zO9s{hT4qJP z=ttT4zxu8-4llXVO2f)s&(FI3_MhEBoedD`OEk)%^sw+4toI2ooio?&EdSYoGs#z5 z_1kTI#JylB0tu2oL*L4{$r=dLR`Bk86Y42vw<|3`adjuzRul?$dp93ZZH{)S^Ez;5 z`e4g_w~jnm2Z`_#EtI67+yhpD{XbV3g46h79tlM-cB?t_)GyzTN?|xA`nHj)N-L-1 zr|xX|5!lz0+71=kR}hXMb@iS3`<*!pL2P!o7~NHP1nRE?-6I%K=!b!wM**O0EWQ%j zJ`U4(tSFJDzt(1v{K8Y?a|A5yLyieppW|Tz6CM6ncKEkPCIX@4_ri}HQz!;HdH-GP z2=VYEamdViEhs41qf%xCU`E6Jf#yC-9n)JR>ctPj{zXO)WH#O~4}`yLBX49}l)kO~ zie^o9_;=YvhXmfv=8T0FHX0Tb-(86RVZ>WO-;t_uP+57cavdUbNruHpf|i1W@2zQdBUMP{UDbS?b9r z#)W=?MO$9|U!o(0f!i*z`n`Pxn;#{|)P?#*&Kcgrc8X&`MgaEK^2(aPs$0nsDA1}H z51g1Y+dg5?$=dz7H*LajX6^oe0Y9%a#LS9Z38k<@JGLelF3Yl}Zj-v`!R9zKOqAO) z$7>4+%zRuQ`!UdxQ==D$XrvRfOZ)cLH`Fh)8oPg&^V~npHjkj)>hOO7Ys}p-Zpu0C z@U+icu|LUWQ&g|6&aFUA8KlzJAyGtT{r9&>SH#l~n)UWw+1aAVwrkf!6pekw&i1?cF1;$J?KhzOFFp-~NiviEw*) z1oRVty8Ke1?@nm8j&H=CoLwmYwi^8$tJ&hA#Tub!=Pw{G9@rLwCkIO4m5(T|AKYz< zlmH?}>uTL|$kT~oJwKxVT}Hy&p?2D#ug8@<-CNEv8!wsTp)o=UY&A-Ar<96kG}wyv zTD5z9yFdyRaD+zo98pj-3d3D#X0@e_qv&I$a@q)fRw-qyv-=YV3x97{DOG^oKVW>! zgol{hK7yFXu@jW{Am}Lt@{2a8=5X0__s7sE3g>w# z<;%YUcw8z$FZM@JIuSt<1Zm>v)%0?80YnNk;lZ_J3cjHeyu65kCN?KbWAK5521JTd zT_i!Ypg-OJbDS);>O%eK3GePS8@%&VEmcPlcPng{B`2%R;x(JyxFXtrO@(8K$52Nu zb;n9c#?n$8u8+R^s_OFK*6EO(v_Jyb$WB4O75>HpV;DU8R|$t2A29!gPhw!Yn*)+D zcL9d!0eZR2?KgG019g?yS(u%N4}lZRc{1+wH=DkJ|{dC?MY{ zY&Q!y97%Z{_U&V341nAvrR34>9+!oH$6D&aws-MY1lTl_o-OS^b)x_noo;MM8+223 zw0;MB9U$F36li@3K7HIcL3n#JF;J{>X5tqh++Fe9v}I}1D6QJOjz(1%h!<|L@6A8(-VAPWWWggD z1}?=*zB>;i;+eo=B)c|MT{u##q4LFQo{>SlDgsmsl3h_01^@*_0YG9G#$~r64)}y6 zfb}8J2CCnXRn#M}6C)rKIIdgt+EFB;DN)zafRJs(g%qG{0;SvCWFX}E{5o`S^92p> zUD$5OzyJPjS7>mw;IjGc3m5<~W}`m(Puvbs0JSETEddY=7#XkeG_1No}w^|%n-)T>tk3Wn%J79&Yu+RGpX7`~m9NoEf!NzQ}~Dftk^ z?O+Or-BOcz%_#2mo8PSDA8XeKd9o;v0u*{%DPXmDk3gBV^7jV-rY@@q-vb_n@HIi; znDJA{r%eV>=kFY49sE0vCpgY^vYp7S1;Q}`0&tfy9p>(_E(>^^%=WllNIy z9&IZMw~tjJFQ;XA#r5woBY5m+LeqU4QM~YgavKA?ApQy3jFcMqs!wKO0r{=E9s%1L zAiH}A^WTmSK28KNF@c8Jn0M!15ChlZ*R!L!z4d>SAJDaQ@xbGTD(vN3!)*-#C(&+O zQu=pmZ1D4|!5$^d+gk@fVHV@=;r~CvEV$TiCh#u27hE`Z?ttJ261qGqOYE&s7Ty9G zx%`XZqzkFw)2`Z^p|_q$29!fI_)!U>Js^EuPy+>snKSy`K7Iop7Y$*?Kt(C^coSlu z{)g&ug7QH~Ldsn}K=1*ULqVOCD0!265E>xJ(Ub5(2*OSb8ed`tUDTUcUM)Ume?^uIY{VDwL+^MM${<*<%zmZqAoMJ>6De8W8}q@Y6QYkdOj{>Ye0 zGRUhKkyfRI9w4|_@SjA3;}*oBD5MK`mvOHViqC?C&~t2qe)hekg@ALRbwhvmQfolF zG#q2)z-o}FAy!*Gi0|6Z)ezBOQ1k~T*RS*~1jm&-m-7+ecgCB&+BN(-~o!1NUmL|&I z!Q5fX8^?u#3j>6%jrp*`3xo@@=cXgnU1|I+*tANW{CG>Ww>FDV(E96p00pR}Gv!t# zBAJj1JAW-8q>ugA*+|h@!RKBLk0@co?mSo> zeh-nh1lj*&cqb28Tp$nI4FwJaH~L*b8U6$yZ+o%O`mW$cM`B7R(FINfgMH(U{2)u6 z;HUijFQKC20OXv%Y6F?>0-)-G|2Puero7v$&jVw=knKZ+WJ3mcMltaJa6~8gKQD;y z-(m6c*7R2&vb7o-&`RTWL~G0AFq)}(~;@z%GU1xuZxjG7aJN-!h+QS!Q@0R z*6wzpJA=gmI~GmQ#vsEcBY{3oGAnlbjYO?uU`TX1KXVm41l1s*Xxc?XMPC0W+93cG zlJN*qt2aQk$RBxBZZX46wr(W@*&=*`6Y2^DR)9njgUkgB+KsJ*wF?%mrcWMw1KPVY zM=HLj9Z+M>Ug)(UNx!1EenU?`fQ0>27mnADO7}n$6zo2lz;!x#U`EAAX~8XC4=$>D zB5h9B$fbH-IolNgcaX{w4ZW~YOVfG>@R&k|AfnwBo7q?=q?bxFwY4_T+=~OvF>%m{ zg6hOv(S=Q4DkCH5IfG7xUaZP%KYyE zfQ3nHGn6Iv2sG<>V1rw@iN^mi*#W=_SJ8n=%VFex{Y?miza(F%f?3{M{<$}<(TSO%;+NnuKJJhLc^(jzmp2gSS5}@gA$KP zJ0^-k3V>KpNVBk^@xzITu^fO-V;qwXW56SlI6Q5qS5SosH5rTtGZQa8&(^5$U%FJC z?f}BC3$!+Rsv@yz6mBR^z#~*x{}N1OHHk8oS1i+g1vR@)>n!IzubbTdw&Sg|0Psiy zMcUIHkZz$yXs;*msy|U6)}4ZGE=191a)rhl^l!v>&)%FGY~MRAUDvHFTz#x#i0y@%Cq zfBHT}gUfVLrMW!=c$lqW)f10aiTay%W=6r->ly%Ir=9+gJRsx^T$Vgs8cf8 z?A}n`6HOJ)^&WIxzxSF86>tBVyg02wMk!<<^9cIXk&*@j@XIS4#@ z`}eX>Kr++-_Bzc@jCj)xM8X+3e9;|CX9O3y3*y?ObZv%)v6t=nkpc%Z`SbS_gQBpakfjFR(mQ0*0{ zSAU+A+c^Bm)WWO8fXZG~^5WeO){Vdz1`TC^M*a@)5wL@7(d}jhiepNrAY(;B)Np%O z(9VE5Dl09A7l1*oaJ%^1K}jEMyfIP`4cbc`7oBeiQ6mL6aIaFh&xF6HT$kKm4D&0z zB>mRCD}w+Bm`TiqdkcFY1y(@;Wcomf$UFbR?mfnJ|CFyhaKEfl*fs|ieuwj4Jsn=Kn+7$J%V9g`Glh%*CgSxuc zSC=c(86gez1enHNnaTdJ+}}jRELQW;h`BNiN&&XRf0L;pY?kg@>N=Dy(JPLFDrw(@ zPOO!sVcd%0p~Fz)&qnYYRK#NT`oWeZ_o(ZwK;=sgMkNdpz;BJRt$%%6A>w8h4YiuB zrvQ|AJp6sM1eeRJ^Bu$N;6nEL()wo5Tg!D**S;KjP0c;DY6IIHO|Q9ie{L-!1rfBQ zK{(uTv1NzA&>LVODmfF6U=f~xc$cB5Dk6}VL9g97@$us1Pnst*0+MU|()Eb-m5*fx zY;YLDWRq(R{+m4zh?3IQ4kEyTl3QQFqoU$`yHCwsv0Pj;$9!(s8SyHNh)XYbX|<(( zEijDPpgZCEYQ3;@>C^i;8!mDrRC!Q)8v5KP*2;MMA&y2SiPi8R*dMn3C5^x!4I6+t z9OoXORisd?&bB|V<9S(~D43PS#VR~lt%ydYm(%?J0T$KsFBy>7bF1jRKQZsLyF2!ZfX2W3G)!EfE! zW<|!F*f-Z)hQ{e-HuU@g<2h4+J9B_6NpQb?g06-Rnch`UKvCD z6L)nApZnBDxWNMAjOn>1*WPEv^(I~r7ZXIn-+X$l-xUQIn3m)c96+0{3Xuz>=> zUt(IuUKt@@u4<$+V7u-5UmA%{t|n2@sgykADfLGc3BhH%-ZAw89WYZ;ta=k`+uen) z0is8~SJEUD#b$%XlT{zLr<^d;dHXU!pkzFTFFdg6_7-r0k%I4gK%ehu>HJIhW7 zX*0pkz+nThX3ozdAiw-2w!CUn&si+%Fl1*+=*y?4R*J-ZLHg>uQ~*rO`=-m@3RMnlfX-(&ux?wxtWhIUpB)gpql8;R z#53q`C-~_c&X>RINZOH0WNzo3?9@sI@el8knA19)OGSwRTt|6x2Y@O#>@x`2p+ANO z4{Gh+0Cu94kW-8`i;Om7`29i9bCptUwnJo85m2GN^@-U9G}*@BA-CmRBh8uJC*@4w zMp#x=a#nMVY5-0AvGKwrSb#bXF=Pj4$XJvyP(_x)X|n{X<41_pzw)+M&u9qdR$ZRf zcNT}`4n_!xl?k)44s2}vF8C!@XZ*_kA>|2ft+{}(}S4cvN>!UfFOm5VPDN^WT0BUF!j8bCaXEg_nuGrzebh^ zD*Sp*C<3PAZb0oq3%Kb4;Lmqe0T_PAjdl>(3d+2m&?df95g}yaE%eFUU*3!^pLNbU zwX_h}?6=T&PgsPRE(NCRBq ze+G+?um&9X?JaPKpYF}eh;s!1O?tlz_SJZ!^2zqg5*M$6e)RAF5dm)^#GiLk+dB2P5x){0vt{qPNhWiMYt3R zzei&=il_;+?0v8?XF5g!9Go}i0u8Ts)SvpB(D9WXeenKcf)s#z!~i>D{v;VnKDv~d z+u*U6902cb-?}CKtGL+>6*z&RVCBT;w$F!15nn232myfcvz6Z|5dDdy2mG1T((N2E(h&I)GGvp#$0sY+t1T=%Ww`#x~@KkPGQ!P~Z8Kj~1}NX+wku zCVAd%(b6j8eJwkS%n!E=#+(ef`ypE%2N?YOw>S{=f;?s$orjB}GjGOPbU={8d084} zS!cf%by{!z%jcBa^QsYl64PZHG}R=*>}Zcl601p%3Lr`-wCe4n_}pEbR}zh+S8oP$ zIVFG1#6{mfzBf6E^H3m`}0rhyPPCScIU+3CzUhjBUG*$07sO);jL3mvP zF~s)z${p&n>h~nPPIcYp>WZO>*6&ME12o<=z)%XHd~#6pK^4wE7!hK0 z2IWpK>$4l=7Yxi#*&L_)A94T+6CeleblA^i3R7P!=oUM|YpT-1WG8E^(tsp8+_vVL zG{77Q1qApLQDUg%p6thRSZO9GeK#u>=V`DwL2TDG$EsY`st+U;ZhLW^EaM@r`y)ARmpdPa%X20H}zw z(YxTut#)v62Wa@gBprv&##nJQxQ|#cE(2|8%T+x#opR4d)wj?jW+M$Cdu3$$`~)I^ z1`yOfC~Dot2zvVTETyp$EjrNVegT5wGA4zjIH>x196?_r$mKyQfJe>e+dRO~f=-7bX<}*LMA5$aEDnr4(*qVFtirHCP}Hwf zpaJw4Nb1*|b~v|J|Mmc3QPIh55*|w9A-D`teh=`vLHoVuSrxcUG@$nqs4j1~r3_#R z2Z;ZZRQ{1!VD!7;y&N?Bv%k_C4f@|n7&K6O>{JhuIk+%9L^gQwz;T6FcQ8zaS^fbLA!R_0q4n|dGtDNKH_fLjgrGJGgS!8w<0T9Z z>m!lh{2qv%&ZK~KH-Rqo`W>@IkW>X*KjrPNhMM#}Bc^|CiSo8RH0aFPOHxKFq0YF@=e0pGw3lb1$ zDFibl1qnXW^@O#Q-kSFhFZ8CfI@ux>;I9^ zQBT6#W&(C|YA`9!ypao}=Cuz(TFU&75p-B7BXr~A`Ffv>7^GMX16`VmB{VzSvr+h4HzOhsHGwSyQ7h19Ru1HZlERc8%tR> zSil;ocK==&p`y_-vdY}<^eZn9(*WhYMsVH!EzTiNxRL|K)NhL|N7jduXVgmofpr25 zN)9^GbDr1k63Ohvg#nc$fH8x{yC_jbUSO0#ofRAnisuHl%c!2Zk}Gp>kip<)#q`{P z;!e#32)n%!0CwT#M9(+7i-D>iKgW)9SvT)MF|R71;cx<2?ngon*&kuVbkKmJ+sUth zC=gEG%YDBB8Ra#|C^xgUt!Qwv59PGvtB^?hm~H$uDG9Z0^4 zTwLkw*t*}HJ($+*dPp~!f#0Mcn%DU2Sj7vIN93v9cl@maW834omtCLeLVQ_2)5^>j zug4zku1KVejIZU*ZQ@_27Va$2*!~{jXSPlM6XJXAevpmrTv<*udpY~=K?3#GMuqFX zrbPVFn)q?@i*p_m^u292pMzeDV5MV?5SHFf~#o z^Nu0viP`1AxROs2I7~K3e_x6o_=&=J|C{D$eFsa$=l5rcvFnm{q}(PUl%`ChSeyZj|@ z9JkM;&K@SwS5kUfIudfa)vxA9Y1C|sf9J+o+Lz;x0VGud%<|#4Q{nkG*{k1*l{<-^ zeNtEB8(j~$D#d$0=SX{1YzFA`a$U{14P38d-5IXvERS8i$dJdHr1t4s_jP zTj%=5E$mUxoH6maUE-vZngzgMDNV1CsboX=hDI})&AWANtTiO4!g%s&f0DU`tzC|jao^MGs{M|mNO2MVUs|jmyYU^u}&h*kB43>yu94WV&Ny@R1=ju zQCG+nrwt`kiVL6j>~Qn!Yuw4{2S%~@gTX|;q0!#tI(4ly^02G3c_+JBmfzi$zsY3_ z(66U{Jvxo*QRK4JLT6thhbXjzs!C0~D&AkuXDV8IXf~*!EV*horyL}bOQXy6>D1Eq zP9H^Aw^+vhvD1%wdpRxHx7nX)$Dr1%>~er_b*4Y7ZlJ&0nP`a6eL}Op{5z*`DB}%$ z<$P_|{_7vb zA7ll4vq29pXBn;2;d?A_%QlCb{Ps!GspSJPhs9BTJ%`g@^6}Po`l8>=PJf5u$?w#H zH%DV^3eW&3G{VbnF@>J3n)4P6u~-5KTI<~oT1*RdURrQ~@^Cu1SLK>!Q*pA9LCIP$ zS{AKTsyWnHKAzkS+oaJQU~$&_R7+c?IWh}ThwZd`hX)=} z)NkSJ$X-`U(jc2C$=GL04vuR_(c%OrCohZ4U($=cXJX4zH)TH&j_W6(x&MeHo;$Rm z^K<(<3XM3UmmSC7BTImf3%$s6L-srzzL_$qG5A}NmUHC#X}PU=*>x4HBPfeu{?}?g&p%5pv{Xn&>zv=;WpGovH}Khv;yaN54v| zi6ZfsAtkO4eO@Y4`Ny5)t&T>MVf4W&kG3e9ITO=z@6)Fwo|LGjD$l(;l4Fyll16Bx zpXX;49ULC)_O;t?oyl}X6#CfjjEo>K7IUL9U#h^zq`G(foZQFzo{O+n2PW$+yRit; z$)z99H{N@1IxYVB4ee9+donLzk9BEw~mAmIOpu5+RO2ay$06P{Fh%=NSbe~3H$&*a2SXsFnK+k_O3LtR3pKCqc_%X8BeR1vm3m)5jzclSAzytHM zx8(KP;icnhog|K(=$2K+muF$oeOq%ZX#;TuQ-V`f`E){}9wu-x>#_3@Ms{)Wf63~_ zLuqrC_F@YS$wR^fx>T}D5=%0sy+4RiY=pe&?fu>i?5G+!2-*DID}W zSx&jQv2M?QzI*u*LvqVm!9D7;Aoo>VCQBkamVAz+7OQEp(imgvJTy0^u4oE&vP=)P zmQe(<`cHgz+6qR_ij2fMWTP9^9AwGr?y4OZ=G#7RqFx9Q;Ip66NyM|~9PAvHpI$Zk z74}kH{9FkStdbKQQBlm3+|Gvrz@8Pr4B@fWEmu!js1Df8LX86>D2Bl>|CAWUQ8kIO zRRpjKj#rhIX{ZV0Vqu?{OOu%z6{KW|Ro{wMtj3*>sx#NhnbogSgP0O>P5S~ zVBxdnGX#eU6sbUQ68w!+&6%p+@ zJnvBxL@j&pg(QB9Ah+=;V;=)#JkQqrS#i1X)Nd9$vgs^E@dO#45fOvwvr=he4pZy< zEWM-`N9%+;-P=t8!5qojM>r&Z=WE6-sIWZ>>>PqrThIb@vh(l)OcR~-+A{-IQvcAcK%5x=MS9buO3mxVmbhXN zINM&&KD#7#uK4Wg%9)c^ud=Z)*Wh`5HB@7zQ=n3s3f|Tf8OlC=zm87`-q8BbL_%4p z*D!nxZS}NdC@n>fcCl@)O!I|HBE4q4Xmjcq6TLv!g{BLQd}H&$+MK3x>7=>8`-V*M zJ?d(+MhXtAS?086%gK5TzDx5W{oaeB7>`99lUW<_3Dk-?B64v>VYD61XUJGTScd&F z#X=|xJ;AK`DogrtheEX;vefYd2!0uP?ac$OnDC?pw!4hUFsP(Ai^IB}nBPWp52x4& z{IP-ySq&DySL1_&GGb`PtAAfl!zvv0j(-!)T{VvXsZt_w;bcR$8C}0>Bkb;Q;^i2& z4k@hV@yPW;u2w&J8~AKPZBuZv*UBGOR1IX#^4uV5~K?&%b~ifdn$>oH*1Zh z)Jv5zEgdA<8A`s^Zy}RYcCdN`(C)Em?;O)A_9E;YJ=u zrIjxtwTO=E;LO5$H0i;QH-Ba}lpdlAGcOmA|NIk<`O;$`5Z`blXpWa&=d`fs+#*?; zV77P0ezpE_PH>AJ?)~b$l^Bi-<%jb2!75!SB)$xRT!z0jhr{hNWVPNKeT_=%Iis%M z?%GG3j|=6OWl?-~kgJrp*%m}RU38xQ6c}}2zMRKYxrFchxWIsf`zMdHB^8WM6?>xP zaE1u8vkk}6=cVe*qV~nnfoDmK69lilm2 z@nC5C{9UseJO!)3U;$sRx`(CU=GKN$asls+BN1^qhN*d)9*yuB!mh;YlrrT=VzY(| zhpoOB^Au}rsvDAvK6v z_1#g@{jM{=koaEKAo%;?5}Ok*awI;`?wNGtt`s~SU9XClX}P8WBe*X(688CSg!q+_^JX$$+{YpWWN|Tfk8Hp;Ks>`Mr~71cRnLSiFnFopgCES z;ewa&0sZL2h)!EmsEJ(VH8f@?Fd{QM|p-S~4 zQ!HNP!BSkd1Qz~>P7krvqV>5aphg7)*wS0I$ACV{0i*wW2g7p70?Rq^SD%!BfYJ8< zaLA;_2p10T)-B}ST|R`t3{;aJP>w{)gpcp99uUuhNdX2PN8;xj55U`J$MbT|`^xNc zx`Q(F2OCK++~zM2URS4Tj;D3hf-ID_{P#dzc{`6v?h_kFtjjyXmuKJ2ey{3%pHi_u zQ#sk%jl^0}bko9Sxj35V!#}Isy;?Hjk`ucPm6-^`+90>AFIYP3`o@$UJHW$9=?LwuoSZkZw9e?FflsJju^_(LeKF5npIw zmumILa$IOPBs`K6=09XC89f8HXxQ3lt6U>nK78G+HPu3e$D{=;oibrf_>BCSr^PLS zP&!uj!$CHc*915IayecnTc^bX>f)MVe^ekv_XVWTtBF-5d{`@RA}7Xz@Y9iYyu)E> z;-EdtS(G@>p}s}ajc!7Z{_2bOg)05AvPWGURW={iKi)v7wR$~ zxVB^>cC`aC`WYCHivjZ+$sHtlpm!*4D$9mZ76u3khbf;Z=$$X<)s@74luZ!x5UBY! zp2cy#xEz6A1WqMghyj08=v-DHZGgpchI24d91t>lvwoZ`U|Jr~CxUr5qe>|!*iXV= z_*@8p%tj?(<0zJ!23|G#q`;$cR=@)WirW2LcWETL<6$Sb|^IEOBMq#)NNzlMb zZcg6B74E{YzGsNtOCIE1mosa#HSWiN>icc=@e_A>_|JO7UILTJiX1gUgQd<$OeSq! z5}n9lGW15Eqp#CPBShf!cxX+e&> zye~~&VHLG@f5M9Krj88BQh46WLeo8 zLloyYa{(01&ilEEWA=+bP)W4?6nXw}_l*qb9G04cYnj~Zk$}EUrMCvr^K{|Eqn@y{ zswcP!?iKj1qzj+HNeUGTX$C%)RanLr9%Rr)O@PnZXnEyL1(inb ztiH!|BlauqmH_*uf#2PJk?{`^*K0A*4_5A0aUm;r=(WPWu?tit`1BiLZ^1HJl z6m9M)!^OZ60SM zxWRx(=Kp&lZTSp_N1kVb0ch#b8Pd##p3neMIG3~xzlpw}(I<^vT{q~S-Ly>A0u=u1 z#DHOD3wVrjpKB=BA_8z^asap^4Xo@eVCW?PKCwm3_FBA)HW1)W@__Z){;DkEXyxw) z7KL$G7vyU|SlJauzhc#&ul?$P3qc31>FDuNT^Q&lodF%cl#^c*+Fw5^+b=T9MB*v_ zT?GY=bDN)nfZK;gI{^Aw9@N%t4e*ieSzsirZ0ZpT92>fT_m>em0{}Ol0tj%)FnDhr z7JvYzb+Q~sM4&^R^1=9Ssscdr0{$}^j5h2MSL!q0PES}!b0A`3Ax=MGf2vRvS^rKv_9W~cL^Cg2~aKzIv_>WIG zI*oRjo{(htEi_`D%hix(YzQ9UnyVc)Rk*;*DiQ-x59XlA@V{PGCcw7xlqC*Jl~+FC zMliFCi&P-~r*mRgfVUYC;19=Rx5V&@S&Iv0lh=A?uoHjR8c_#$vHOCeCE`JItU#bS zOi*JI`1{cBho<6kDF+p)y)O559Jf>0jCfEOR+}6pp&2d!|1@R6)fRYhFQoO~k_~3Q z$^V-583I)?K@O2D00+01-B+*tVVbBQc;MtwtzxPIkn5_>E@-gOhctlr)cTtj2d=^% z5#@aT{CO~nkaL9oD?s3rfc7&8It4VkCpR{$+^ACo#s97xpZ{J0?D{za^+DgyG*AUS zK^o45Mjk+%X7g1h7MZ*}utAytg45B<0?q(1jM0H5p6tE|+M!DW3_u%Q-R~D=cY}rD zaMTa6i7AfX+2R(UhSJaG(48gX1IVa==4pK6bIhFqxdm@R)=Cj!0ZKyKh1RtVj!o|& zUN`_6bO(}lbS;yNtq&8JYt#*u{=NtVbGw1a{SoJX?EuL7JCR)|Kd9WtWYpoahTNTm zg%}5<)PS{SfR*#9i;>rZYMIl;pdwfgq1=XM#AA@A7BESeVNAQ~+HP;Ile z>HHKO@W33bi2?k>?lb^Cprr|@PZk4hSZXBv3Oh(7Fzf)tyDa@K%A2EDnb?F=$$a(8UNR zSyo67W>pFpPVEbkQ(!pt!9k6k(3q0?}>%v3#00>vD^pgPz@_!5)l-cXNl`;H@kSy0ss!Y3q(15Q{MRTcT20GT6ssIE~qEk(k9e1a> zOo&hYKX$)Wqj~7gF7D4$v+v zurBCTti=sxzp(WZQzUfXf+rHN6_@+L3@|?aix~{x4EFyDVQau;p;l+93U;qW&;{5F zE??^Zv&B+@F$jMGDKQ)#r^aHK4hrCdSXkZA)dImGV%Gl|t>RdsX$IDiST zC-L<*bMoumA>~HK@?Sv05G;dTP_-bKR58Da0dRaIJp`CH0zL=mL4V>{?HmUlt`h(X zLtrZ%tPx;MZHy5JwMK%9q;yXr(AWOtO(bH&KwW|QpFi*dm3>VPQrUJMflAEt4onG` z`3ATA5DX;X$?bV9@@dx=?5ZvPwz3wEga)v|`rU5hTdj7q|1j!Yf$mB`(N;PT#Hm50 z+mROOPl*4QPZ6WYfj}n$bq_F6;7&L>INpOz*nH(EL-jKpbWaKerv(Sx#S@5TnN|`&He~_!{^)1R3KFdTqI?3hAjqy_=zP3RzfD1dX$50< zz8#Jcxa4#s*1+P*uI>&bxewvzDu~|D=PPSxuw8=%`Ej76xsoX2dk0&AsSix=OW3JG zo;A>bA|P?m00)HAp^lqOmo<28S~gfvm7@W7qL1@xG7W&n_2##XF2-=sC?f!2BYmRG z^>D?DkEWssYo)0I-H?#mI`Oqp$5O%LA0!yqACx)M9u;?~NwFVBoXO#QOYT>uU}J``H;*h_F%RVWmB(@YTt3*k zOtpDB-)jXWAb>0h`3ZNJ7hrNKg#e&45%3mYSZToGLl3@pR#D+B_swnB%`?T8lxl(%6y6#EVZz5lbgsN$xAS^I}Us}@Lr!RzC6^r!+~71m~0 z-5%`caE_oPYU@eI;jeWP&>}Fn1OQ3fyDtR&8NLb^xc$b#+Y)Nrlm*?k3lW?JbdYfw zpq>d4Dnt(&@S3rR5#UO?K-!-4+b8g!SpVn2@GNJFUkmlJ|q?{ddP{JnyjiU%^ zIxA^;3jz4fSHKs^0VMXn2}g{g3IgoUUqQejl)&CQ;UtE*fp)7_P*7C@3vzxJ0N>5Q zL~srwnRIG=aEJc4tI&!x5DL>kH?`mhHp_@h3lOG8SZG`!bWaEl8?CM+g4CF@fU^@j za0Z?-5UBN)PI0Rs#c(6ur@{VLmljw&fv;}a57Oe+-Qjx=05SG!W+7St4ZH~iMGgh< z%?iYW;fpDZQNT7@j|(RRtVm_ZVCel4QsM;oAT&s$CJ@Y-Xhh*uy7I;Vb2=XrJURX6 zp-_(;BHra22u?_UKst~O5j*X;uV~C^C-~*((Pk*wC?)nhfB5Dcm+<^cf9t5_zZEzT>)173%_GK z&3|sdCuXqQ&jwpUSRq`G!}7+hU<{Erc`EaOvLI4q1MB{*}vuIhdkjn z`P|k(UA5qpNClSD@XM*ThPztLpbOm&KikK@jXgD=9@p1;3ugVW81xwO61}K-wPaFhub>5@Ynk^A?pa*3`-YfHlur6>yk`jH?uQL8=it@wW$6|S(5`RlbE{`y0P zcRH||{AGk&=vO>-SQM$CmWxzgE3tp&(koMccUXyML#&*py#5X{6xf51`Avv31w*|?-tnf#%~H5^ZuQGRV+@Yqa!ep!hBSj66+ zj=tNUX$c3p6SAwc!vD${-H z9Y(1Kc81g5{axx{naq95D;h~I8rT-c+j+SsDnC_N+b`k4oIH|(f4=k8W!wzc^;)~af>oq{9VXwy;{{dB-eNoMIvCOlN!qwwSV%R zvPj`=rdK9O66GmRaY|ZE7Ug-SBh}+ces%cdqjsf#cME7$^QA9-99AQka_LX+`8|({ zX_UXo-^HfB_Plt-HFr2$@$L1kRl35i_mt8fwSlz+yp&>TW$J4>} z6W<9L0XOo~{Au0uUC^1Xc8I4ED$TxL>^{YVMA;#*z|yMb(ww`s_n)gS+V$TQyp}V+ zUC2yeQWR)xe~W%Vd&gV*n_ie)z-=z3T&>`87@ODdq3VQQAxkYH={0qx7dnT((Qy<1 zwr?;mBvHLc2^y*gtpH#%YrPiaDOxn&v5!Rb*IW9_!%Dse-d6=K9hi@&I{p2@&Nr92 zHInz)@bM;SX_;2yJbQ5{P)2_;G;efavtkt!!vyS$o3Wg zqVq$A_r(s{B=7j0h3(PhfGBrQ!Kw<|kw&W%J5F*UgTV?c!=qOnFE9Ru_9sNa`%t4f z+2O(yu<7`ju1>Lr2F>4s9%2Ao%+H!R#%k|0S82fV(%U`pcGW%+xc|SU>yy%MMB6S6 zKGk?UX>+U(_a)FBbMDZ&_vfpg_f3e@cy0Rq>2yz7g(N1JGs!Kxi=N8Vzjj3TZ~FzB zSPf0Z>zbTJIwFO~?@nAc_@Kb-DIz+7`6f~XMP-H6NXLz=8E@92NQvw#a-UJ+PI;?r z-i@AKF3U2@XZ00c4{9;hR{cE zZyrUXkR@R~>#0n{Wn~f+c$%qrL(E=PbhOfZ6%Xc^RfGbCbj&~1wvlFIX_8)-#O5;5 zd)L!LC;9d_*G`*v+>8bl5p^fC+6~XujGthK0H$7GZ~?DYDB)V7Q{J%mA9m@>GwAus&ih%`zGMmgi0j5{NQi4d+&MW^o`Feu33)3urz}|<>~qJWH8P4 zbVf?j>9*aM z=8Nf(AqFUXXiOkDj=f6BIXb1gIT9@@P}<&by4!NRxFed{z#$ZDt3)N_RNooRVxo^F zPXd*-1jWwsq;pN{U&EES$uR9A@%K06gGIif3g2_>rS2ATrk#P8i$FuE5M z6ye=&)^peJ=1S+kf0@Xf!X{V!F#c=gwu~GJ zusABKe{Hw7!cET?4rxcdgK!zurSJTx9}p9J{Exq~+NR6h_~nft@IIrdT+*=g{|m--K+ z<$Cs<-xpp@wW+$+`X?XpgFzZf=i$klUtk%Ld~u6k;J1lk-d!vXMk&|r)7-Mt!ItCx z?-J?xH_oJ_Q=M^)mEzKjd^1kc4|Eq(*2mi zVyh?S`AWMwmTVrmo3^hap!>E6&6md`1H|uX+_~7>NEDLKo_PLP+%%l|aVhbTk8k7` zBW4DHCY(EM4~2_d{ro+OZtvv!7~cmzBs>pcsJAkC=-1{zcj4*YOuA~YC?{{f0F|^6 zFQ>&A6X5Lt?xixdvD$7ZWp72|)O|5Wg}id|m}*w~oa%ig=$)7KWpBw^v~ z4my9Ukq?U{{)VAkI%kJ#wFvyt{?A+_(=SY}ZWOkj9=&&7Vl0EcvgGez#FXqI7aE&w z8B{LNo`nv8%v`M9NSee~kGbs~4UNNxN0j>AsMf0B3eE-<2ll2|0CC@Q^L3|a?Zk+dGxdsQko zy>q;M`*8zIb9nK8ecuk&NIRQv;0JHVzQo^JI~iH``rj--pfHvpecyD6^ypJ;ds%?p z=3Yyq?Gz0f-^?4n5maF&?YjYH96;I*N|6qm@m|ReST#7v5xl@9}mMabEgBED8 z@=0lEeNDoi$03vUkCi_A(pFB#=bjm&&Jw8bbWEau?^j@aQwLCwX%igm?rzw>w%!w~2D9?zEX`S&yxSLeqo_PA-knb}TM z_+>Y;4qlbMEEfA7Wc(C`q|-P(AiH!*?7Vuz3XY(=MbDwisno0SkoU{%jyq0fqu&r* znedWN2zl?vGDxZ$(x_FkgneJj)6!uRFyoEOY~p3Q+=rTpwf#d9|F8xGt|rgT2%ii7 zj(G%lNXSqG&Olqp8=7{4>1{(I zbwBX#^fD(y?QEjN0s<*B!q;H|!!g67H;ayIf?*-BFqUQ&&d=JJk5)*OR z(kIxJzP>|C{{mRde}wb8tU`$f(|bE|tLJc>G+%za%?i?K_Ta&*Tr~B`CiWt#q`?L$ zjaG?T#AG=qF6~3o(j3DS4(Zn!9P;HQV&B@$YA0z!WH6NTi#aH*BnVkF8ENEFJ*>C! zxYJ-0)44qpF$qEwnGN)REIIAbLqhDh4JEyX_R9?YXh?Z}7zS1M+zsw)>__~ThRNfd z->F;(eE5cA@;J7c%IggI(EEV%NBEo=30H4uk~!N>RcOE6^B6gy;9WGzN2MXUu+R9_ zmdhovVh+bc(skB4?-6mGx6}0|Gi)gvEGD(anP5>70a1nmSOqB{l)r|jr6Fi``JQtR ztG=B;wm0MarDDIx zOUAE$y_cGFx9g(t$lDt#`AdVh5jMnJ?1m@zgNbhYC$i*`%m`P(*u$NH;^)iGkEaWfyGr4D*uIzh$$150 z@9W$e|JfGFrC?oHyz5%p);l}cMxhSO)wXYU@+gbdy1l$8s(#zZkkx$#ACurYH6&x% z+hv#A#!is!@_R#$_+F;+!E(|x%>W_u|8&(aT|ft@vRf7a4!%hyF^Qn~`>iwTaM$kq zw>hbL#2y?*%`(2C=_Ym%6m#X!_5u5~>(N8Mpuse32CrKYpS4JyEX}^rpm1Wt7Tihc z1X$#YOkvj_aY8OE=Ez^f)^AGPiwbjNgd8t1W!|NlY8oL7^u*}sjbbr;;=~|J-Gdh} zKf;X4;8Sk2uS3Lb(Ph8>lh|Aq4L+vDZ<{JKCX>;VQv?IUu=tch{JXjR880}5gPg{+i=EGwkzA} zaR&F^#=eC#3~~_?d{+G~U|DoAs{e0}tS|b#0U0^AvZYh;P)lSsGSMjCM#84#3dQ@e zLK)gOW=l*ni}0JI0L7v=&GxOszcn)c@C}44IiH!LsGmRE1$$}DpQ6tCZK6=j90&Fo zQMP76D?~5l3Wbt?t{rHz1e&K`M?QO9c)g-&VpeuQogTekBi+jSs6u70`(wdN$EVIJ&ecv+dGIBX3iuw~vyUIK zc>Sp2_dEPy5jeLF{*5L8O)H z4+E0vGMcn6SlK6-MRRP5GaV@#+}5?m!|Y%|z;YxMCsD+hrO{@0+D{M*N@c=)W)(`t zWZ0R7x4R^8aqHiRmd$1_i)&e4^rAXC=^WPGdnPhfhe)#-wMb7bC!E#&Q_L-!+w^ku@Gbf{k`rU0`ASwni7G> zHWSm2@;=-xblS|B_{29EK{p+leEZG>J^iEDP9cAVeh408^vk^OJp2rsSwLj|d&-l; zfA4zeB^{ZHgTAY!mcmMjVPiOJV0ROLDEdPd>P>|4FXzioTZw^Jn?O zw6!D5&UGEwv1(Yx@fmmVVWaa4oe!6DfIJawq@(3UUUNyqawTd<&2@why~WV}Gey&& zgyW|kI!et2RKE&#!+Mtr22!=6QHDm5Q;kTNwbXy!ca0Y_w5|)NsazkE2-Lx5X}r!( zLvyHbGPgkNyMCMU?#}$SvtkxCyTjj0B&jc_2phDr44zZo0 zqAaZ3iSr5h->HJJ*E2kk*BF~z0~(LA&&pBUd(`Vjf2ux5w@szWv3%=2uzP!R9siE4SR#Vv&L z7c%anf|6-T8@qN#bI8Pd{119~_E$=KlEwgtbGkqe9@I_O?;G4E8so#%Pfu$+T&Mr? zgBDg^%;u$i&-y5h+4X9h7h^ucD>4lxu!|hoZUs}FDrJ9kHfDTYlgUF=L5))SO1I=q z*exghP=E3e+{)30s4AlvRhZRG4%s;xpUdnVLG18?i2K&X|4gR4VdF5%=lXYALkm-_7)nx_kR37Or)9C_BYM?9g~sl^#h?` zOz)Wqu_vEYO8T45koX4w$Mg4tr2XUHTZU?77?He&-T8P*3e6w5osn_NojgvvU$nF} z$C{>BYqb@!;=1#xL;8}ALv!d<_!<)E6p^tR$;ilJGGfqK6nynI5LXTsKV+NiezA{a z;f7*M#et2s_gEf6Z(t)9rb~s(S5^${KY@Mb8_AZIrB-JYxr8Fz^PgPov$7+p)wUhi z@t)IrvWYa`^g}GuEE54MWB(xvRx`IPz398#*P`pMv}n1YVm26#@heJGuRYrD(uF*i z7-zfT>8qh1YQx~PVwT%Cx`vee1j>Kq1;;fFB<<&ajJOUg^Cw^2U!LVX+$^Wh$?j#n zL)9;hEY4V0Lab%fO3 zZKND+Y36RFIb{B9W4OgsacVf_koPfF&M&Ng>%S?c`^0gY$KdR|j}r-ElNOX~pC#-` zgMjf@PW?&B5^fgwfDQRXPF7kd8>b0_ew`Eg;p|)B3Cq0O0H3f zj}0w+)!WbA9|K?M2vH$Hi$C;+K}7MWn&D8`Ao5D6Nuu-&&n>ofE4&no#(FGM|>=N!d`Zc+fr(*afB>l{ODYA-{+Darj?T zv#km7Hdg5~&SSv=)U&ezh`6PSl6oAN45&n9*q8*ZKgnQ+K!ODn69)P`-mip5L@Ls$ zgu8~%b!4s;*L)j`A8aB4?iB+l+)WS`5J;!;sXVx>qv*OWaB-Rm(iaggYBOYcX3%im zI}<^b@mF<)NQ~SLTquIiO1P)^-8=RF({f|NRykDa}Ew)#R=hAX`xch^yB{#*?#5DiC!9Z6EDptCx*Mny?Yf zF<$r;wY6-$tf=LsEu>gYZpTD`!3+fl2nvt~#*>sErJruB&i4KbXeKT5INf=|1NL;x zD*V9n({;&SaIMYk3Apv{j|T5YKRI8$jAnQJPCIZ;gM}{u{F>?B#CNCiYCx)&b>)<< zpdrFY=fHlByYr5tT025^Q{HcOs`1@EI8;g11CN_;5gTk&>~*UP1Oian~l2x`QRqmfLjtZ0H=oBLub3KbBj% z!W$Mq7nn<-jyR7KC`XF&htoT$QG!Ai%lJh%fL?yi&EebGH6T zw;T_Wdh>{HlMZ1qBrTE_I5#8kBZHd5+gzz|2avH$^KOrK&@m2wXASjtW8cq!uz<3N`YYsiL=dAxN-p9Pm-Cg05f&Fhi2_rq zlE!Nv1HD1$M`+0`A2%dI%<^gEzqNWjHgDAA+Zw&--Q zxPjR3y2?Jhf*`}}O6R=$#<8XhG6FIh6G|;8k-@9{T>Muf+K~fRCW?Skn}|)XVdR%} zVQC(CR9L(~P>jj}DV4=QMKG>aJ7I=>Eg^=*fcG<>ObvWl2^0tjiR%S&uYbf5neIa6 z0-+G1R3si6Fgzn?bq5z~FsU$U6jS`g29KVB76`a06HppqcwduWtEu?=Eoe|gSO~M$ zk1lYLU6p-y1V26^!S6CHiX22-<}S5ZCTM$+2ZA4d022%YAQlGge^`H?hW@;0A6YXV zGolNyF6>rQG$i~^G@lz(xD_Zdy|4yBBG0^C1O-~VX;(apHf#j-q?S3f@s*-qR5EvX zT`>U$e`DrKBMHS5Q7V>qgZJm4(#TiwtAW9rz?R4Nc+ z41EJZg4*1pR+xOgcUX|%?0ga0=Al&3FB2i4$E^uIc|yh*&~i?KJs`sQl@xNI zu{cFOCIj%Abc0DV2u@P7SfWb}mVoU$NLwlfPqwVAJGv6w1s#8p!XFG*|{;H@W$RjKux9AMfc^l3u^Bq+=%CQQ~)&Bpa0 zWQ5ouQSc>Ne6Jt_W2-&Nu=1@7x0$60r5uz9f#C`m5?BnBMWT{w3LeL$VPRnzGNt*L zh^(*@$bo9jPUdaC_dHF;8rw{;uVr#TN}b2`5h2L4u|E?$5C?y!s~JnD?iSV$iChwk zVQg8ERZmblr|HvNvqc{maA}WtQ#QgDBLolN{w-((%5qxijIUd;midDy?2)2U8T*gW zw05kj8-m#~f50nGwz%4OczG?fhPw?LjViZ_mvOjF@X|2^u6SLd8+JS^V=;&$l@1Mm z37}G$F?L{pP5}%{rEgF$`F#Gp0sRnuWhf3j;co);tDcdH z7knR3(`~wdf1n!NHhHw%I#+RAr@dqCw}A3Ki46#DQzN&dYCq zJ`(?a9U^(}=jLobQ-kAmN&d=gyGdTgjantbE5CObe;kwUozBC>xVBU{_N(8AJTmEH zzHsTUf90*81mj~0+WC}Kr)_Z~0-{zj?C;CRHt+ohLXFp1q*za1EFXL?3H)=7Cp#yc zbMS#>%ii_<*lG8jX5?hKt)$C7C+g^e3#V2%!PaQ1*h2mDjP1u_>i}1WdN{r=_!0zt zyg*RXHwBqV=&dz6gpI6%8v3~#|23{#`1iG%B$r+Sbi@pB(wBX621R1@g>bn=Umh4- z-E>i`pcBm^}J+4y45oUaM5N4)Q4b`Ucp29YC1T;oz%CAV28xaD*qqDqwz(H{W5e97> zkJO-sS}rGwVB!@BW9wcx9*DB#bMp{g;4Lpf#7#NU)ZAZ_G6wNo){bqeN-l*Yw{1W-rmDfCxy<^Zc3ew*Jdq6-Y~udf3M+8G;!<+s0rdFZl~%D^y1g^Y2Cve*VQ<1k!UL=7AiIG>$uzMZ-H z6y9Ghpip~ryb!Ve*t#)2fWctcLe+9j8gsf%9e|9h4o-VdNo>Npu17!t1A(yx7X&k9 zq&_DrGJhYWC*1cuq#{V9&zD+EXbTkyV%V}p^FGwKSpNBr4~1}NDs&JPbzOhXulv5S zzvXeUUq$SDDh*gb)3bC7eBNE;t=!&y9M2a0?p|cU=YLI;P#_x(Lrq8RTllHTbrZQT ziZo*6k5HBGh3;#^#(^nT^x56lR4RC5Su_!`I0NYGBjI@rI(4{rXxR*zZo9Ltmj^Sr zbCvqoHTk}cFb>LT5RIHvY=)DS4)LF#ChJ*&ydiBbx}jd>`GL zKF7wM^H$GFAwt7y()(10Mj>8iXo{$cKGt*dWYp&L(7w}TF;o+L4U(RLahZqDf6vE` zN(^N7|L& z+a2zDRr3|I-ydW%+9)xmoH$5?#GWEp&)5c0BitCz@L@Mmd3$368_;F1(ckk zn$B>(>vdu=sO7!}NBn5?QEQXkcxJp^t2^T%J`;!ApDEcuuUsh~tyv zxICJG?UUDxYqpio0b$>S-fo|uzv-~|qmrb?S*g)-j+Aytqq`1?`tPOGnY_aH!C~L>#P!MiD zd&br|MxCUTsSzhBc;v{B!WU~5u{YSik36HkHx0X?U267y31l#t{*gbE`L6i54CmS^ z7;vpyAF%?v;XL*q_EY)1;Sy*R1MQB5LPmM3xn21LsC##(%f6r~FFoRLXZ=O5y^w(dfzHx5GWCs1Ur|16WjrYFAC&NY()6lD* zBYni6;O$&@{e!7<7e4E=(&(L{YMBqE%MrUQ0Z+?moEX2~c1hwHAfY#o7|H8wbS2@D z(Y)o;o}x(c%LOjG*-v~^`MfBuvzo&1Z|rQ)=hJyBhSsbX3&@$YD#HkI-fnD$-JGV? zs0;=n<-vdG&%LS%v|Rmx2Sm@P!t&N3W8mc`zr)D>VoR)TdOgF==ewEo##R@H+TsUa z%gYRu(}nGecn(GQUgcDRtWm)=aKo?U_fK+@9|!qR_or1s@ibhe(vcW$^MZz#l@A+dGB5|k$H(rDfk6zxvv7`rN$RX&aRaWUoG;-@(CMAUu-hms)r$^T67- zuLE1@qBg(i%x(t5bYCGyRKIWXAgtA_zvOp@ji?=uUHi-YkshSmgL9?{Sg_}72e_4_ zf)m74k8-o>wK3&;-w}PfeRP8^R6FM#LPs8UDl7} zmTuaEJBPI5h3Q|7gyK?mlUuG-2!drKT2o=ixNqZ6u8PTqpTJGmVe0>80qhGu^LbwJ z-+=(`dB=^&gplws1m~jIzKGEAA|Z$p$KgaGEg$&5zIFoE9WaxeXsaQ?Q>tF7ht5IZBJAcQ^=d^eb4>s1*O;a~#q8 zf>pRXo<;G$Bw`N^*?QP-Z|IoBv1wceRxkRm&TS&Rl+BzU&iCFdKj>#jCB2 zDuu>$BqGmUmSQO^iAcim9+cn~qO_OEb{s(K@BcaNUJ$L}gF6xo=oBAeR zoyywBNZM`0tH)*f-nHFb9 zEm_#-cL0-eoY?+UOUI5B#dqneam>nnhW8D~E1mw4l|~(3Akv37{{0cuPtHJ&`Dx!7 z0z>ay+p^uqZTUA0zG}o-bMF}w94=`<9(oLL zDF~2!4dBU!hZLw+Ql<*}l2FM+MPk{Uk)vR^*g92G3g~%K4e`OhlQbrN_kVp zd#mvergHb8Jani^r%`MBSze8Au?Ig2xgXxW0%xLyf0;%d4uzQZuO*d#5~kjM=gk^f z7hjZ7AR4WHXKp)%TTLHF-rd>T3m%@vK0jBw3rabad~&0t*W^U0tep!?Yn4AiP! zc}aYZI|5$g!g*rpZxZ+m;Lj{&IZ@9yp={j zPddZCik`h0VX@}=GkqJYDG%w*K#6_cReWxD998?FFSHozjee69XK;OeB zsEq1ryq^}Fk)v&r#5+xJ;yWFXL~o}*_1zFgV)(FGYLj1}NI7WWtK5*5xn?n>K&zsfo-6CAf7UvTvi^}$315#d%Gr9$ zQ>EF%#OH7qgUNs}zLfNHJdyf$wodIM19mh0^y`mDRU$1fmv&EKC{_M{S%Vg|eZ|jc zWhnvX6MW1D)h$h16LB;5!n`&BnCu$0(T;mOp)n7e zacXzKIDF)a3$i&caUzX;VXys#fSn3}`rGqC&)T|T>B`s)@71O7yYtn@DS_e*uUc^| z>?g_dNq0(7o<%Ol0que19YLGt6?R$5C=QZE{mZa z+qfa|ch|ES^#8D2s`*+M11spOLoVDzZ$rJ9OHWwvbGA&KlhQ@5w9!`WWk^I)!dLX< zUFX~IGu)tO5$B6~2Aj+Cym-fhUaWA)NxMJ34BFqob`jnx&qw5uEDoaD6kB$tYr66G zA@$67#tT8NY9~r8heP}FjSX43Vw8a+uWfS$ILz~<83qBzHBK?W-?Md z3e~?wrj{AeQF|S{z+0jT&wa@Ia=Z7TQR_L*htoIaw%zL%@))WZ=cCgfhH)}kKki@v z_tAJKY}R9E-k5|-nD)(Po0VMNt#6@`0PXx`9=UK`N|V5am|P`E%khC+OZmR2UY2Vw zK|_Hd@H9(-BQm>5cP#tb54l(|6QgNc!D??O)V)9Ow;Em(G;11(gsT}%9*@B1GD|`aF1T2JWJNz3=7D$K;U+}=YZ>?4PFNs$BsZiQPvae4r8 z^`$#l2Jx}pLt>z}i8d;_#_E`3snZ?dxD`XJ+2! zSitQzJpP;a<3UK3lRmg(^R;RAyK^FjQtU!NWXNYgT9786qax5HKjCnEYJFb$f>fJ4 zYRmX2JFY?;l>D)k19EFq%&!VZAo8V zCh}4m2)WBYj1d%tlB<-jeqE-KlM)rQ+hOo$`$k{hYeB$XMapqaBds`wjNUT92rI!TM;x^%8oOH&^O5~ef z{q^6{{ib`>F-kXU%*M^NI0Sy#yrFtH3ybI4mHC$b-We8I)7}ev=G)h|o4u348(P2g zmhD#CBBcKQT6gy7B*!P)aJjzL!yVj+@uj!>Pw9TcI&RrcUtulc{z6*a0M8W~?BwLA zuT$nzV8d)$s`_VW-WV$DdVju#(|lK0!JjB?bA_=y^)8#*Bv(4;&71bDAkH@zlJ-Ke zL^B4&vB{aP1(QNuR)&?37<~_hem;yuuR8nBq+x8P-Ni6zn+@KA$_8@oD%bW7(I$Ee zry!UuN2mG&gG$Z|XokK59=hk-Sg~f`i?pV0&dIF&*2h!F+QcAz#zD!tpe0QtT&8>F zJCgn?$6B*Wd3Uk}JD@y&_xp{l(_q!vOSQgWSl>`I88YCH`MxJtG8XRdcyY~kw9t~| zMQi^_SCkyJ^s>;$eZ26b?l?@N=UXOkA<(^%4U?_X_C&^f>-gc2vy0lfy@nuIq)Sb1 z@0V=$m$Bw`e9_XjMm@qUtlabz^tFA0*EHc_#>8JOq z(kP6=%g^izvnK+Sp>KXOlqHYhn5GB&%&iiKSgx(D%Y+rgPHXQel6&QmFK#r`zA3Wr`F)8O!F9eG$z7ni~o(guF8qhf;4HWfB8HJT2@fZH*V z8-P&j&)B2}79G19LZiKra$c&RW*ZBe@s)9LJz&9+bkI=8Cj$wpxTACjd`v{Bu*kgo zx)J=?C0_Cp*bJApzPIPi#gLL5(+&9et>~Y=@vP`Blpc3m@jv=@X!10ExE^zM6MXsf z>%j^;V@Wjd{CL$ro=)6DHD_XN?rY8zZ)!S7ylMg^93fi@8>29REyOEG?6eJ|2yQDj$ySuvu zM7mqL1?ldTP9?s<=h^$)?=L;nLsrdNGjpH!dC^Y~w=H|DXNriYWEVRRBWRZJ*f1-_ zFIu6zd>`shSasW8>4<=eOeBbnTu6`7S(~O*H0%$z)-JdBK2xr(LO+<~FVM?4sFNhJ zLC%e)+2s1f3F7{22iS0zJI}k)^EgULWV7Bt(Tr(QHw1wv8kg9+v9!1lWk3;I_akn& zL(mPyt^MAIoLKQ-Hw4Ug*;k5_6pC&l8^THwB7d35AOTL&to;1Tf^+jHlpcl&o3}+M zt>SnVU-SUl36ebq;|J{nIap84P6v!XP8NP(XNJN7nSnL>{K;zRvr!N@da%kpyjmyd5QW)8V9DF?4`NL++wFsMuc z$n{k=_pBlPNS!6r-{^m_gN<*(Dq4!GWjy+5q|1~nJOTpnKAVfmZuzEk&hBmL)Mt6+X*Qb=bNAH{MIJ!hR z@EQ)O`x7E+`pBpV5O^9Ebh(wqHxhMtKEsWQ@4JV(PX6=I_kYJBDWGMZOp=H z66YNai9b6FmeJw=U4dklEFZ0Oxa-*DaxcHL(%@>keYl=mGoG-JHymxFjUjob0UOUz z9Ckz8X$D}A2AcQfIXj}{x1(Y4R0+J9m6=Rxxm5+}4F?R$RFcBLIUCN0<+MiF+6JP8zC-Uaa|SQrUBNOXaUz+1h`pmE(r-gu_!V1Z zoQiq8_9F<(B9VG%xtEQni+LzxVqYG5HsQL6V1Vo3F}rCReaAG~`RV_1BX+slS>ZUV zlg2W;H2JlJGRcM&*^b`Or2-&8mFd*k`pI8}K z(VF81nL@bPTk1IoL!)@oT+y^qBvcM#phS+3fGyZZ^x6-+NX3y8U2XLW+$w+JvD>qR zCo`2ai*6@fP+u1PDEgbzw<4p!!Cxh;<-RO5q4tD4*T^ghJk5l}eoo7;USSH}L086O57Ny!8?9jY5S>xtye z3n`N_wdbl%xg4X>OcNwi{q8biLw$}_nT6qciJAPO^=;l+3Pq-@mlyD%HnRX8x{3n9 zm>Z1;bhs`b^6YoogNEYg&+fArM)S!Y_thyUtC9;fCQ2nAh_Cj4QdTX%9Q*|zP}}b1 zs-wX9&ux+k#+0^ZDu@nX|8@w`L7hg?-^oBRZ2<$WqL0su&xEZ*Q-Y z$;7eRVe?HwbZa)Msha)$jAh^c;v5I{Yq}2SBb+y%=Y8!qyd`kaPOv9;6QB_h0wXmY zyKYyBl}wO{*fq6D(&`E`6mkR-Ke~z=dKDE8DZlHznR;FJH%==3z z=dnX7?14_4J}3169Y$qmw(8#}dOb3Q;%UEeOm83Mb-xLwV>rF5#9CF4XVm15SHo!L z5B!GKDCWp;D$-U@A3%k1=P1arBoNR2`3A*sAS`6=yKWDqEjjW{It{Ijijz3UXupO?vI$m(6(uvYOv{J;#^H}#)wjy&3^H`2NLNk(Du zztX+yb~V8+ywzdBZN>NRtbkka1#Up2E?)@IIFs1zJn3Avd8*faRH^PJbX$A>d7n7J zG*c-08*3`1?UU(a_&ESTI1q_cH*#|_8ILx|h68jsp;^n%S+m*_=Bs3TJKZCtNOXwx zG57bYB2z^W7LqveL(_eKx;nrD@swLC&b6kO7G+Ny)`8!^G>2pt+fg)+>I$uiPm&la zP%4}V#wukZg*zD<5i5*}=4ou|;cmSBZDTBz`@8ckZmJd?@24vzcswhR8ht(d^RM7* zPvpoCI}})#Mfou&lE~O{hC6Gv!YZ7rW?!OI>ms$Bg|<1xHD0&yy?RK42kx8Qh2y%X^*!W+lmWYw7kl=p+p?1=sz|M<;Z$ zjr1SDUQqH?1oec#mp>|-d2ViQFT%p)Hp5%9(J_UxN4Hl}t{%Ydc+{aB`z-P+*?H+X zR}pO4X3&I-An-G(eh{Vv7ck%VBRuqL$Vy`}7}X3_p=i-{U_mL>tfc|V-hgIDAMMLs zxuLiW1v5)m5ob*f+cHu}>fAk@$J6CVb@~Ip9_nF=k8jW_bUAR@pCXyN=b#e6D}mnu znGil;veava04@&#O*(R;Yn1)@G`{rvr+S7LWC?6w!I;dx+1VMqxA+J{{1C4k`xi!_ zj(!jYIy@jGi-85399?jV^=?P_lk=-zkVN4gLU`$imaxifB8A~~5Pl;mtP!A{9+R34 zBwG?XR6R3VTF>;~Egx*vSw`)iRT6`o0cW>K|v<)<2VFcmhuOpL%aR>(C%?P`CU&K z$Pvdaw2C6NN`9xKE3r#|76NsC4Dmh-!i`Y&&)@rj;YiES24vU4gPfsib#~KB)k{td zeKhW%mWzj9hlRkCLQTmb+|@HPeK z?$}}(ARkqX*}bb|J$( z+F!i?oYn#5)JqN{i-CCXFvK2Ylp1t6l2d$HJ~*RSnf%U(;ChIF%xJ?Ln{LEuZu&VczXd4wQ7`3=>Ux5BIRrI63_^% zbEcvUKkpB~j~6WCg|p(t_5<`rK2V{hzOhb^r30{(7y%^kQNGyYbXqh48**^+F$s+V zdS4gxR;_&l)lV3uN(RCgJf;+VzR{MH-}NLifmQ)lHJKqtF&O;cVwxf4yA06U2oTx( z&ij)P9UUDn=A=>u@WTTopn=9H3@|XwPSY-@tIUYltaqOP9JzV0 zSiKJUdLn#NYwHWaAd@51{&7}8b-4M3dUCvtDa#Tg`$bXZc5WCJ|3UT&0F>g)sAU^@ zP%og@2H5&wS<%3x%g)Yz36Fl?D6XnYj*boA=JTv;6S_rz3y2aWP;<&1RNKjWq0Jy5 z1u`S>IcWfsgazIFl}U^c5Gx4Qf|ZNq=ynd!ZXPSZMzmE)^VkHds5~$X9mX=>0kqElm2F}R@XWmD zNr8R`Zod8AIPrgOI$0@(+vA`5&$9sh2>=1td4S#%)d?I{0E|@?Cd6w04?bC#(szgu zR_NfuahrcNdx7y<$-34PfEz&^T!UU6=|28yq)~>Cv{Eml>xHGonqylpixaT`)P>Dj z2l3gDLxg{aU9IGHDGdT_w_CPAfMz?zn-4xg2cAj6ZqF$R#rHEI%4-9H7E2ygO zLB8!6ctDTkb@>u0$BsuK9sT)~LiGvYYQDnI4K^zbHqO8aq&`mvT_N@l{A!#i!=3p7 z&JiQ^S9NSXK*hxAAi;{XD-?s0&3;pYodgVLLNTqf^dj^sWQbL0a1UWdNL;2$WO9L$ z4;gsAoTdoMECDD8=Lb+&0}wK+(d=o`rA%1IdXkmXc`tlc*)#(m`^FgiH(?SY{!61q*fCHR6PcGo>MFX%D};rz#9+7 zLhMcCG)m8+j(o(RLk;-!8rvV8*ZB}T7>zUPu)$p+*?)Oi^ zZpJd(^Zu$9d60fad#B_cg?a#{WAIo)AON5Y?S7zsMGq*YcDXsds< zxXRBDAtE3a+#V!;m6WG&zozi(8CwHhtqON}!E*5AzXBsThltJY31C=C81$AZbkLtg z0A~5dw^+9t4?LC{$Vnb-bl~B6rfpXbrR7ZT2v5P?~?St>X= z8@0oQUu>bI-~Q~{)|`F;V{2ZuYWunjJmt7z^}sG_K2!FZLLzjXVMhI01scFD1y#WBtN%&ifPgP zq7yd{e#B7}r+QhnID8_A)n30I!3Avx*^CAShn8^AiGId#idjq}z{G3t^l+cbV@rZZ zmE2FV^MFAqYFRLkph!*erMMzAXYwJe4xk#&79+4pcKQ=8fe3_ZBnX6WnBuA4hk;@qxw`IN z6UOdOalK3-Z|EXM6}ab4K%mh54=AE(O`!fGn)#^e?>sk^T;{JGsp@i;UKThfHkH&8 z&>zm!4bs&Wo9qnOPk>IE6q(z;gCfcA$m)1-!ZPC)q_stOaK5z?V9j!)}JR!Hl)6jhH)H z9CHc?4!3K;=S#VSUsFrlSr?Z3rTa1&ZFI7#q&{4PuWHYBG*buWP zB*yn`V`YJQNpX|+4(7#chUl9W*e*c}#6(cZR<(5Rsda~=JoI$65v8~-oNut_HkCi` z$*JDdzq?x)jAInul_w419@*PkYCL^`gkIRPAtTto?kBU?jBbB#xIw=fgFA~J@5k`9 zNbmn)0YYJt^VEe=J-|lMsZOf{#!iHB_mCAUI=iy5cDoY^;GhCdSC$5|I^qAI6358I z70BRE(;^Rmx<@RNq~-R1O2<-wHdOlRhRUSTJ}qN+w)URqL^=@OXMgwh{D)^G@v6EC zmD2L^q~khX;kyiodPeM?1Zgxy5PRcvB8V;NP%N?lf&dyt*i|ZY6%IwI#~b9!tN*u< z-0oqOl+dWpzWYuSocpF$t|o8uEALQ(+8TP)THx#W-&4Rc;m}0Np9y+9k+K{1iva|1 z>8itH=o-WBS4$Z@_CU;Qk~_9Xkaq0H@Q~xv!T(6GQEE>_N0xPF!p)jh^-)YQ>E*Uc z{HGlZ)>OfY-LEIc?R@zwyZx*Kz%=loJQ^gwI;bjr`(TvF5{qHNpeCL435DHxnN7fZ zpRtlQp$!&cL%Gb0dz)1oviagQj(E-iD2AIWmm^!w+6FtQT8?yP{J(WQ8RU4R;tBRn zbymIHwJL;ov=PvlCD?L^gt?y3mu7IQ%I1N3t$c# z^Y6@mR=$0g_%+Z1OKN@RvLuz?hj}pn`tTRBcw2D<#B_r!3O0ipVgW6y2q4PV9q$qH zr6S1hFV@U#I&fU6+aF}^GWqSH1^>kO-#+Q!aW}!;{8{eWy=G+d95x@-ZGZtLT2e%l z_u)g1Y6icX36Y$;$f{lWD>y%KA(+kmnRUU?qBb~<0C zFIDYqZnAe6^LRXjiPrVnHWP0)A2&umS%CoUh+;FJvR%HbE8?t|I?pV;v4nM1FXKKR zVZHma!@1e75NPu#HAp_%cUkf?Pm}prz@d+(>0Z9`VSPklJBV_{-%O6k5Aas9-yP*!KK>rSMK6tE*7~<~I9UHfWCqIoA1bBmcAWXYK+X?fsFlh`0oAmkU#AW}SimVlZA1SB*I>;B|zV5rBR#;Fn@~K8j_w{UHKR zJ!KE6Pp)-}_eCRkEa4Z7qD2+}3uEKWNgLA-s|KB~Tjh{2<7*yrXdj^?SJuui0Jldn*_7#uOY zlBD?Yf9iWSrE>PJGeNvf!uruH&tSFzB0_mwPL_c_&Sh{Jm?P^RUZjIRXYB7UKx61e zf0gb|{=Cb2TLmSTcYE+n@_n=2^#^iq6c)eTuG$xj>)kbnyZy#0+!m$w$Oz6ba^+Aq zGe4~7+E2xISi+gHOOZb$A$I`uh{tXaO-GLsCUG8RmD0DPfqvReT?EV&jV7JPo@ zAO6#wlV*KCD5S~ZzHJ2_Te=yB5t4d71-<0^t38tfhqTzYUj#Bc|E`w(nTpQj_r@a; zJnPGt`yR_B$pE&*d3ylOhfMDQl$ z=2T(=RbH{&o6~(R5pM(5_wY3XyPKtKz4XjtHUuW!3#SOYnUX*ARE44Z;sFd>u!N@L z>)~n{T%tgNV6n+vi2DK*_t%qG3$=c!EKvP1yuWA$z5mqH`*DqvHu^~-*X!@CUZE_y zZlqI#IBTa&Tz)Pnl^!p(qu_IxhzAt^RxCC|5hf)0k?;BYyi7j-!xNtk7V`X4NGEAu4t1Kl3QoeBl#eIBCg5^QpwHXcW?< zWK3H`Iphh2kt6ox#jo(#mA<)9{<57?TfX0S7~~GONt9EWbw6DS^8$hodju-Y_g@c3 zWea*G*`-e&@>R&I^$+>ytK8v6vjqsY%vcg0STY5}0L}-$P`>v^8YbKae2E*Zm30=U z+t*~sU16`xBLISpAUa;tT*>x(sa`cS+irt$(AD5?vU6&?Q!U-jl{WX-4v%fWTZJw^ zE{JWH(3waU+ion?!+61C)34G3xoDfkQ^U^Kj1vGKcSaS+9N{k#1<6^X$)`S3yp}rkw0;){TW|m|fdJfW zU&W9vW=6$Cto`7}+*11r_**ERL_W;y>2>({juildjQ58)^n-pzW4ieD@fS z(>ZP)dbgi$r3h^C(+y_=Lf+`4&fek7z{VzxL2HLpc;h z1;i!nh8ac}eSRF4#G5LijMn=SyylIx72-8(mE#k?h(jckJF3%xl2+?Jc$6dTBUS*` zbky%uuZ(&nwfPazB8X*KxS{ zJ)A!y-Wt1>v-PS#qjsTAp;N{m--Pnh`@1OStZ{?6lGsU4Hs z(n;y;_>X6SSE&n8Mti9Hh-v_3cD&di8cF@`s@V^8n`-e?)U^;16n)x>u!@0w zqE{~ZQRST#g=rq`H!8bQ*vV7zsX|MLhxXHuD(_H(vl$5k9h6teH5~U?83-B2ZR49WW|?_fp!=h-^fr~84>*ZHXEyq4;-RR9tiONU zPXG;y_p6o}l+_qDNZ+=RQo=bUbVXbjI z-b^cc1@2~uOkR)N3epPNByTFsn(e^=UE+*&K*-k&O@Abar<)szIdW*F;bt>iP`g`g zjrzcRXt;4mTq9~K_f_8W1Eop&6y~R`KM29a^~p3(OwZt>wIU=lW9yO;dIW5% zk^84L*Rcz%XI7F_p9g&D2)u;RlKePJ2~6mRS!7~P@y3TWAGF(PZ7}DwQ~+|M>Cf~= z@O(YqyBnk1?BZ3R3uh80sIsRH4U<-u297-utV6WlA0uz}d3#+RQme6M(01DX>?i>w zj5jN7Bta;C#O#Q?*YAuOv7wqIFb_1-;W38t6H`SR8Ux7MP$Ms!O}B?**s$uiX78&> z5;-D48ErR!7y1k7q=SAE56oM6+sJrhhE(RSqvyz)4*KS6(Qen9lD>{3BDwRM*@W0g zbp`$Qioa&kF4(9Q`L7B5o2LiJ4SNUo`Ruq5ahR!9sWpG+_)=+(jQ#kNMH~A@+|)hV z60@wP8P&ylx(n@ol=q9SxaY=ISbtrB!ckp(Fdpx?=an(c!%GttW$%u->5o0`q@6QI7bC;tn4y!LS= zfS~=-#%?*~wLKA!r<;H)6Nwd%5ko2{@w|a`uHJDa?4N%_KoLPYgZ8kV!l3sWwA;kZ z6VwZ8&JHpJOB!``?1xl${O5uv#T`Ny?||0)sNi z+~sC>l>e3>?Vm;w$UowxCJl$lTcw0SC>R>)$24quaJeiR^3|7VQ_xNoPB6jRg4O-x zw`ZA!E;(Wz6&Y%(wMJ`55-`CV+@bC!=7wAKyNvKI#V>>OV2K(U$Kt8I_!ymBm#hLB~maUc=)%GK(~ zw%;g2s^-LhKRdevI#YRFPcmbv9{AiZr~rH%3feone*Ay}As%920sq>-khw}tfE3+N zjADLo3Tpv+3MTl(V|DK&0^&VSLh#t)dkY_1-2iBW70E?83Xk8zLHSb6UK_|jU%}L! z6_L!eC;hXZY>5gGxcCZqB?@?c;46gqQ~$7M%W>NmC_Ju3N3LT^ent9i3jZ|EsWuNl zA2C5R?b*0Qi|lTY-MzwF53*f*O2X5Om_13JYZl${u!;ti|L-Y!scZ(5)sn<~eT9pG zyvpYTr%67zBn%2}{1ftTW`Y0@8*FwNoyudB`I*S=mA*Bf%CULUgwV_nAK;guNaJZj zKL0BMV_Ms=;xuBG>+(FLbX3-kfNhiS;-=^CS(7-`TUO*?w4a(bUu%@$Re};i)cdF7 zlz5>nP9zWIeB^uQ=E$BxliNvMreO@g;UKdK4Ra@N)}@BfeX}#z%Y6QzWR)HT%RvT( zfBi2NXVg~P)dX|YeC~h@zJsTaZ|x87Fwzv{>bOaS&LpR2b({v^(ae*_GicaXQ%f0g z{b|S?rbKe>3QG58EB3Oj`W#CCmj3S$MW@RY*7kgRP2{iRW7~E7)u`(B4yD;#G{Scq zg8KK-+eX{m&qe7D7NR%W_q~1DVSzRD_sb=Yj=k?=;p+*wa2;||2$+_to=f(W`%ud9 zNn@>QaE8Y2$6Fk|&4%N}hdThU`p4NijDmUuLFotIS!P7>VvJNM^DN&1C?FGecgX3$a6>*u0s zOQnsK7w|AQ@mmhtxTOEP!gl$$!iI@Dp^7w#XA#GVQ%56yi*&$gniS)h!vZqYyu}PG z1|~EZ{E%5Q-%|Gu0`(mF+YbV5-q)BU?nnkzb6n@@yJFm)hZ=I}waRa7|69X7I~9H= zv+dr@?*Qhp?@Ygf_vmcDt9InZvIBHK3Y>~8@~dIX>%$Vs+*kusrntVN8+i6En8bd8 zqp@ki?_ZHjeu#3I=}$B?x&IC?wK6}BFQV}i<6~R#aU(?Cs{g#ygb1gwmW0L7{&0tp zo0kac%wCUsj1F$wxZEhR1O&&u3D3n!GBAi(InNIVSjiP@jL&b->6qpg9j=Cjy{~dv zo^Z#rF*`3(ShIgn+KL{pRKqNx>0xpJIg4a2?`)gL?Fn%y18}+WgVcv`fKB=KBKWu! z*#Y1EOS~DdF5`pj8%dBeMWofOsQXC-I{cZeMmvLdt=Z+8@QsqcUB-K=k2EpF6js#} zNhQ2Hj`OAFTVWJB_Q|Z7LAR%?WNODvp(K|RuMn^+uYo@<98z-PdSboD@n)9r>uTfa zTJNN_VtrE+;nbI0_mzu$1}>_~f&giSgfV6v*L|t(-aE=D%fzYWZG3I;(VZQMX-tY+ zrf#07{|dl)^O@?#%u-7XI(618teT9*?4;2IwO@2&N9yR1)M}Y-YANE^!007FKJ%kf ztorl*TPJ@nt5mnmcd80Q4yrE`QzqWwu6iE7c*^UXCcE2!b18;JXeYic-Uxu>UnN;^ z5WPulIkT(P$TNQfEWzR(eZZ_!-Fo*nMgWEyDW2^cfm&QDkB7}5l_HRfMuIhr(RB7l zLsB+--Ni$kioO1kKNe%oi?RaLdkB133TLcY!pz;b*SnCa`ZhoFN38wi1lY>->H`;= zC1+y%L^Qd~!e>sJMXP(?S`xuY>SWQQfxR_L6wG5el_jODu?*~b_(9OGgW(X=z=(!= zzmjVhgUe#~`|31Z{I=;c-({#3no-G%9CB0d-si)qKR^Xytl~%8&Vf@*)x0=tSdxTD zx$lERn&rEe6ZZ3U{gbO|OfMZqAxc>?K{1!p@v)Z%8lXp9ym#m59r$|0T5Y_lB0Oxl z*a7-^!j+ZFiCVS~;(iY)7vpHH&TPF5GUUM^=@$>@8}MBO90v;*va(FTuk{>TjpI_- zdr`~Y^V(Mq20QfIz}(RHywYg}hbz}ll6O8dt@I9>p4E(ENc2a>OLcu`x=)HxxlQ+x z>3+WYg+cO<$bM!N#n+7mXwAn@{JX;+R{`HMiPNBAchBmk$&7BgU@@hc;o4D;aMR z0XJVz!r21*eHTFSK)l@Ij0C#rq(KlCSj{08%B5j~s-#ppmqqLw>rW5o12NN7N&aYl zU|C0R6oLoxAE9tBWr7M)NJhd4b@<(82(Y$7W4mGtB@sLG2 zc_`D+&l`Cw!~0^W8VIVP8uv#Bb^(BZmHHQS4@;bp<@P~Y1w-;Gjo2KmQ(3GJG8WAGQXw7uPy2(VBbR@qE>splMK3cJ6jkeaM;J<0ZS zvaXhjs}pDIgP{?&oDe=07w;-G!JTEy4dyKZpR`buzI@t|jv^7q^m2?DPa^H_*qa&XP4S80H8=n@!>{jU{ZbnPZrHb}E3u zqTPmE|LX2_*=(GEn@H{7(vJq#2P!_Pw*8Ku->n#H9V0>%fl%?WOj50N54P{H z>=^}^aRjE{0mr^RA{K=%aX<^%dmg^k@j2w{WLHA zRN%VZ-|bP;l(W7=a#yZ4T> zp~-w9{$=C2?ptq!@I#ZM;~jvy;oS#w06V`03UQe0@uFI?9*TTDFZ*il0bm$yfi297 z%ZGbM0nZyb?`)wj;lPzn22u_~Nri=g`PmmJQz(@3CG1>Xaf8B?6EzmayDzmxpb=4Y zvWYmP;F7GhjfzKgn5+3*Y?jF81{~#*SW+>p8i+9{OzwOuHCnvC)2*kv`Om*dQ9B>7 zX}#K_So}tf{wCLNE{Yj7NCvzEwW16->W#h6ny>RnE_v&4|gyJ-})kDDu-$ z@Zs#K9em7o$YpP6zVR0*-WcP(aVhSt(9evqEV?w@%Klg*N*PvTacV&x|J6{S>aXp> z_Cd2{!|9?Pk1*_{;DMt?C3&&v2Uh|HwX$EIL+cQFBHpV2TU_9)VkESr5GM?B1PLA# zOjYnoW+C^uo@Io4ek{>^y0u+%IyXaRB4Jakm(4jIrWPn1uZYpT{{+!OTwl4U<<}#R zZTqJj2;M$_!rM-@9Qd9i9N}-cQ2ZE*#pBoeMnBd)00|9B*TJZ7TECwymCGZxX}iPc zc^tUFDxtQb*`pD898`+Yk1U-Dj#|jUtgOxRFF~JUQGaNdW1l3;f0jv9*|XYv%)!NT zc!cnYev~Eq(HKy=5p%zBVB{yF<$=RjsMc{LQ6z6u5^Q8-GlFSXwcrvuk$VP%Vksl4sks z^n1Vj*QBv2vgUE4PSg4V%RWq9Q0!(Sz!TJp z@}aHFHoKW^GYZQOMrA1 z?6e&(%B3XAG)xJW2JJKP_nQNze~Y=BJok#}l-vkxc;y>#0@igyWmRHh$wa$Jp$tSX z{Cz0Xx=G^+srY1EVz1UGfO9I+7=8%jX_9OmO%{uWp&}Fobl)ZT34@m3x4<$%D~v%Q zfi4Me6bmXMvfjX41j)n01JpY5-au;`oyu-BtN_AA(Sc_?CsAv5voae^7aEd6kq*oI za<{&;tqGy9F4Zxr@{7Pqi|60s&*yrgu1USJ30u#DkXc}y$AofZGtO18vJ;!5PYL#b=Q{%x4|&q_nWa}@Kl*=_c>B#y2P-|CrRtvA zoerX#8Eo(_0Jz3r^%k?2%q5h{3T8GLKjVsLc=fIai{=AlzY4jZn6qDYd9ki{B(5Z7 zYG7YZ^;T$jEbmm8jdE*66Y_6<2N)A1Gj>cmPMWCRM0Rlra&gQ7kz6*Ku=*W4!AXXk z%5;xAv)e&NKXF+ib~QvJSH;TlX@&NSda0U%SygFtI+*ap#8iC+5+RWg5-6pC+9a;D z?e)bSBq}od!#aF6i*W{lFBgh$=z@F4G^dQ|`yO+hf)0U)RC!@XvmmjwmRD%sM!>q8 zzgr7DlmIKYDcqgNq_ZEE>A33*8c=T3ceH8yl22?!MYfK42D@Z2@m=#3NAj!gh8p768CArd6bpm@82ki44(NyR%M$ukrf1^8J+2 z#j>i{2ey?qZ~U2&?H> zueAQ?5S}c(Dpr$4JHV8?xw?6D#K^+>koR{4@B}+IF!7kM{$O2;C-zAqia^y{##ADj zNYh)!A@-Q;06h2zJp#zv@L`x*Lxp64swO+z@ESGeRC!&wUsUkyIIYv^%%TA$ow=Gu zgGt@tYD1pqsVv->b&mhc;&&BLQa#w_?trTn+I}W1D1G67!v8cf<@i_&?eXr%i@6R0 zzMx6+`V#SS$71u+OyOsfsl~!Jdz$0SuaTJhWk7dVdKH%^SmZ~1eXfBjYpvf&Wz<9R zS#6NumZ&plhqkr(WYiaJM1?ZCVfx9{v$DK+M}s38sz>GYG+4{6Qs@sH)$awLr)^j^`U`Hq@rp+ulUoRe{-{m z>?2e_ShFjrY5!JzULT$l$&GCSUAS<-&=3cb!Y~pf4f+ZtMW(zpJ1yCRZw~0#9nH5M zE>Am4l}f6$AtsF93Ax(N$=EO=kqQZfCo-`%ZYuh9^D-7sFsBL2a|)4#;RwcSMTi(= zV!>9f0K4U^|C^|?&E*3uF_(e&v5GP(!6=jACL7sQ&FFMs5o!CU@cjo+<2*Y)z>>@8 z#Q8dH@{3wgM&qz=bdr)oo;8pxxsm`>H};AE&uS%!NW25Oa-6Per|USXkk}O_S@k-Y zM3wQGu0c#Xroc5w*Az3J%%TQaTbrw5Jh&~blkGvmP60~iBAKRifo0+Ij$8Q3zQ!Wz zA0ep=>qfNSx?N5he;0KiriH5gh{EYJ<3jZzez|NH&PAubj?FU~SXTR{{*>;C;Xne; zfgFju>$!~zLE0qgnK0oBUZw>tem(kl_Xew4rb2GWY`RSrFXGR+Phr!6qsKYKSlnpx z6_TuIeAbJb@v`Yz11A~12DxM0c}~#cU4$+9uZT1Q`UUICs9DU)=^X5#tYa6fYaIed0Y-)|AxavKnwQvpA`Te4y(4c zX-WZoRylbtvbOpW`&`-g0%UFOXdNr^b#aBmp@B^e&6-C<%-8qN_Ya+aoY&c>Y|zJrpZ_-BIfvglf@X({ zJKx&sdOIroSHSJG*VFVQ>wejByp+uDYF{amRG0*uXo6q?=yo#zq+>quFP0B-z6dhX zzCrQ_^A6*k2za$s2b-JzRaIoWuxF4sH)a3;&>rp( zl6`R5Ugsmw(saH2mv?U=FcksX7J!7y^6+Swrv1|YkjZN=MpM6I$pHcW(YC0sp~LZf zHPljrwYZ83c11GxUxLjDR|>pby8?kyqu!QF0_mYzMw}PuivO5W?v%^MkeNQg)DWy9Ma@l z$gA;Ov{b@3pI^ZU{GRju&c=baZw;k^jMCb3RnT@b|^S3YGPR!6reo#ApIr zK!6y7($muek}%=@)%I35jS{&uU+}45lpIWmC0y)nn@_#>x51q^v zi+h@%{Vv0ldkYxW`R$FBj661|cvoP#@&%Y19}afQ>dtPft&5=1(dK zl6X$KL5Qy*vjU9`3=AfJZ}(G2f{TW*)u&GD4}KHo+usNdQy=@~)(d&@g7|P#w%WW<3 zRK7PU*YV$gG#i93xA`(@dq(Hy`h4<@?&A~b_Lv@>?((5-2}6Qt`_fi#+@nkyLsAo! zYMBb%XI^g_#*F)i#zUMr9$wP6ZCeT ztoWnbf$?J~!zuG($O9dsgMQhB${Jg@yw45@Hc*ANDTRlA+gcA98vhb+51 zNbH4C9skGz?FPk=k{xd*`0qH9_L^efe=8#Cbl8YZ^td3BM-=S1wT0e(BdsZNuN8CA zNgL!l4voE*6cKo4x3NsG-GLt3f|6kro&YyhEFS_&XZo9i5KWGpc=dST-X-8v2$Or_@(`ttCKhgOmA%5}VuUg}-F zR7jaP9t9Ey4h$oCEl;gRl*!F+H{PpYFFGIkiK1cw%)F*BlCu6JY3YahH>q<;IT3lt zwkB09Y`tVUNM&I?_XnCXtvecS1Q|i^nTp^F)-67Uqm${s!z0$wHNN?`;_qf(|4Q@S zCNdvIM|ck>^jgVU({$U4>|b)n-?-h z)-;+Odb-xp?f4rtX-B&SJ(T;JSEbi<*LU2osRGhbc`43wQt1U>#axGXu?cV#op{tD^Nh0) zfq|uo`4TI0XwfKO?cEh2FJ^<_(t2mcM38DPplPePyQF*h?t#7W1MyqnC;MW*+iL*y zK%YVhYFFA~S#A0e&)<%_7YBZt^Id(x@yhnwNnpOaOo&_>Cab&qKHyy~f@EpA<^DJ1M~ z)9yQGh^q}RfG|hhF_=ZmO0wJ<1R2D{X4}t8-uuvPG)Z^$dr@1X0XWaZw&yC;@D1b> zm_0wtUw@9Mo%_+(sq=8k)Q@%=0c9q(E@YcN<#)wE2}F4Y-7YCqz)C>Axn_jqp3KIs{$++@0c?b$W;0evW9!+FW1vpRZwgNds=>_MxG$X_@)yV=Irr zN`ny1cq&?_>ia7Di32x2MRd>?j%MgD?&EZ15|LLxWQ0IzyViy|%LuSO5wM%z*Hu^3 za9{3Q)8&rX;T497L-F>__kg9$p&sI5$=30F zY{X+ZVn|%`c|DbwnwO|?HV0($;SwSCf7Y0<&qDSC*(W~2~3*ybZ5!i zThX{O@szueSE;_$Og8WL6j-wxhvI1mVoukTDva@+e)GM`^1PbUIGv

Ah*9Vo97=Fg^|9GhFQ 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 literal 0 HcmV?d00001 From f2ada0a604b4c0763bda2f64fac53d506d3beca7 Mon Sep 17 00:00:00 2001 From: Marko Date: Mon, 8 Jul 2019 19:54:24 +0200 Subject: [PATCH 2/7] docs: quick link fixes throughout docs and repo (#3776) * Quick link fixes throughout docs and repo - used markdown link tester to find broken links Signed-off-by: Marko Baricevic * minor change remove slash * pr comments * minor fix * remove docker.develop * remove master tag --- DOCKER/Dockerfile.develop | 34 --------------- DOCKER/README.md | 21 ++++----- docs/DOCS_README.md | 10 ++--- docs/app-dev/abci-cli.md | 6 +-- docs/app-dev/app-development.md | 4 +- docs/architecture/adr-018-ABCI-Validators.md | 9 ++-- docs/introduction/install.md | 4 +- docs/introduction/introduction.md | 4 +- docs/introduction/what-is-tendermint.md | 4 +- docs/networks/docker-compose.md | 6 +-- docs/networks/terraform-and-ansible.md | 2 +- docs/spec/abci/README.md | 4 +- docs/spec/abci/abci.md | 45 ++++++++++---------- docs/spec/abci/client-server.md | 11 +++-- docs/spec/blockchain/encoding.md | 26 +++++------ docs/spec/consensus/consensus.md | 2 +- docs/spec/reactors/mempool/reactor.md | 2 +- docs/spec/software/wal.md | 2 +- docs/tendermint-core/configuration.md | 5 +-- docs/tendermint-core/how-to-read-logs.md | 2 +- docs/tendermint-core/rpc.md | 2 +- 21 files changed, 80 insertions(+), 125 deletions(-) delete mode 100644 DOCKER/Dockerfile.develop diff --git a/DOCKER/Dockerfile.develop b/DOCKER/Dockerfile.develop deleted file mode 100644 index 943b2129..00000000 --- a/DOCKER/Dockerfile.develop +++ /dev/null @@ -1,34 +0,0 @@ -FROM alpine:3.7 - -ENV DATA_ROOT /tendermint -ENV TMHOME $DATA_ROOT - -RUN addgroup tmuser && \ - adduser -S -G tmuser tmuser - -RUN mkdir -p $DATA_ROOT && \ - chown -R tmuser:tmuser $DATA_ROOT - -RUN apk add --no-cache bash curl jq - -ENV GOPATH /go -ENV PATH "$PATH:/go/bin" -RUN mkdir -p /go/src/github.com/tendermint/tendermint && \ - apk add --no-cache go build-base git && \ - cd /go/src/github.com/tendermint/tendermint && \ - git clone https://github.com/tendermint/tendermint . && \ - git checkout develop && \ - make get_tools && \ - make install && \ - cd - && \ - rm -rf /go/src/github.com/tendermint/tendermint && \ - apk del go build-base git - -VOLUME $DATA_ROOT - -EXPOSE 26656 -EXPOSE 26657 - -ENTRYPOINT ["tendermint"] - -CMD ["node", "--moniker=`hostname`", "--proxy_app=kvstore"] diff --git a/DOCKER/README.md b/DOCKER/README.md index 43edce0f..57e631aa 100644 --- a/DOCKER/README.md +++ b/DOCKER/README.md @@ -12,28 +12,25 @@ - `0.9.1`, `0.9`, [(Dockerfile)](https://github.com/tendermint/tendermint/blob/809e0e8c5933604ba8b2d096803ada7c5ec4dfd3/DOCKER/Dockerfile) - `0.9.0` [(Dockerfile)](https://github.com/tendermint/tendermint/blob/d474baeeea6c22b289e7402449572f7c89ee21da/DOCKER/Dockerfile) - `0.8.0`, `0.8` [(Dockerfile)](https://github.com/tendermint/tendermint/blob/bf64dd21fdb193e54d8addaaaa2ecf7ac371de8c/DOCKER/Dockerfile) -- `develop` [(Dockerfile)](https://github.com/tendermint/tendermint/blob/master/DOCKER/Dockerfile.develop) - -`develop` tag points to the [develop](https://github.com/tendermint/tendermint/tree/develop) branch. ## Quick reference -* **Where to get help:** - https://cosmos.network/community +- **Where to get help:** + [cosmos.network/ecosystem](https://cosmos.network/ecosystem) -* **Where to file issues:** - https://github.com/tendermint/tendermint/issues +- **Where to file issues:** + [Tendermint Issues](https://github.com/tendermint/tendermint/issues) -* **Supported Docker versions:** +- **Supported Docker versions:** [the latest release](https://github.com/moby/moby/releases) (down to 1.6 on a best-effort basis) ## Tendermint Tendermint Core is Byzantine Fault Tolerant (BFT) middleware that takes a state transition machine, written in any programming language, and securely replicates it on many machines. -For more background, see the [introduction](https://tendermint.readthedocs.io/en/master/introduction.html). +For more background, see the [the docs](https://tendermint.com/docs/introduction/#quick-start). -To get started developing applications, see the [application developers guide](https://tendermint.readthedocs.io/en/master/getting-started.html). +To get started developing applications, see the [application developers guide](https://tendermint.com/docs/introduction/quick-start.html). ## How to use this image @@ -48,7 +45,7 @@ docker run -it --rm -v "/tmp:/tendermint" tendermint/tendermint node --proxy_app ## Local cluster -To run a 4-node network, see the `Makefile` in the root of [the repo](https://github.com/tendermint/tendermint/master/Makefile) and run: +To run a 4-node network, see the `Makefile` in the root of [the repo](https://github.com/tendermint/tendermint/blob/master/Makefile) and run: ``` make build-linux @@ -60,7 +57,7 @@ Note that this will build and use a different image than the ones provided here. ## License -- Tendermint's license is [Apache 2.0](https://github.com/tendermint/tendermint/master/LICENSE). +- Tendermint's license is [Apache 2.0](https://github.com/tendermint/tendermint/blob/master/LICENSE). ## Contributing diff --git a/docs/DOCS_README.md b/docs/DOCS_README.md index 49c2030a..5b743cfa 100644 --- a/docs/DOCS_README.md +++ b/docs/DOCS_README.md @@ -6,14 +6,12 @@ The documentation for Tendermint Core is hosted at: - https://tendermint-staging.interblock.io/docs/ built from the files in this (`/docs`) directory for -[master](https://github.com/tendermint/tendermint/tree/master/docs) -and [develop](https://github.com/tendermint/tendermint/tree/develop/docs), -respectively. +[master](https://github.com/tendermint/tendermint/tree/master/docs) respectively. ## How It Works There is a CircleCI job listening for changes in the `/docs` directory, on both -the `master` and `develop` branches. Any updates to files in this directory +the `master` branch. Any updates to files in this directory on those branches will automatically trigger a website deployment. Under the hood, the private website repository has a `make build-docs` target consumed by a CircleCI job in that repo. @@ -35,7 +33,7 @@ of the sidebar. **NOTE:** Strongly consider the existing links - both within this directory and to the website docs - when moving or deleting files. -Links to directories *MUST* end in a `/`. +Links to directories _MUST_ end in a `/`. Relative links should be used nearly everywhere, having discovered and weighed the following: @@ -101,4 +99,4 @@ We are using [Algolia](https://www.algolia.com) to power full-text search. This ## Consistency Because the build processes are identical (as is the information contained herein), this file should be kept in sync as -much as possible with its [counterpart in the Cosmos SDK repo](https://github.com/cosmos/cosmos-sdk/blob/develop/docs/DOCS_README.md). +much as possible with its [counterpart in the Cosmos SDK repo](https://github.com/cosmos/cosmos-sdk/blob/master/docs/DOCS_README.md). diff --git a/docs/app-dev/abci-cli.md b/docs/app-dev/abci-cli.md index 7e9db91b..4b21a4b2 100644 --- a/docs/app-dev/abci-cli.md +++ b/docs/app-dev/abci-cli.md @@ -62,7 +62,7 @@ as `abci-cli` above. The kvstore just stores transactions in a merkle tree. Its code can be found -[here](https://github.com/tendermint/tendermint/blob/develop/abci/cmd/abci-cli/abci-cli.go) +[here](https://github.com/tendermint/tendermint/blob/master/abci/cmd/abci-cli/abci-cli.go) and looks like: ``` @@ -137,7 +137,7 @@ response. The server may be generic for a particular language, and we provide a [reference implementation in -Golang](https://github.com/tendermint/tendermint/tree/develop/abci/server). See the +Golang](https://github.com/tendermint/tendermint/tree/master/abci/server). See the [list of other ABCI implementations](./ecosystem.md) for servers in other languages. @@ -324,7 +324,7 @@ But the ultimate flexibility comes from being able to write the application easily in any language. We have implemented the counter in a number of languages [see the -example directory](https://github.com/tendermint/tendermint/tree/develop/abci/example). +example directory](https://github.com/tendermint/tendermint/tree/master/abci/example). To run the Node.js version, fist download & install [the Javascript ABCI server](https://github.com/tendermint/js-abci): diff --git a/docs/app-dev/app-development.md b/docs/app-dev/app-development.md index c9983bea..ba21d3a3 100644 --- a/docs/app-dev/app-development.md +++ b/docs/app-dev/app-development.md @@ -48,9 +48,9 @@ open ABCI connection with the application, which hosts an ABCI server. Shown are the request and response types sent on each connection. Most of the examples below are from [kvstore -application](https://github.com/tendermint/tendermint/blob/develop/abci/example/kvstore/kvstore.go), +application](https://github.com/tendermint/tendermint/blob/master/abci/example/kvstore/kvstore.go), which is a part of the abci repo. [persistent_kvstore -application](https://github.com/tendermint/tendermint/blob/develop/abci/example/kvstore/persistent_kvstore.go) +application](https://github.com/tendermint/tendermint/blob/master/abci/example/kvstore/persistent_kvstore.go) is used to show `BeginBlock`, `EndBlock` and `InitChain` example implementations. diff --git a/docs/architecture/adr-018-ABCI-Validators.md b/docs/architecture/adr-018-ABCI-Validators.md index b632da85..f40efca1 100644 --- a/docs/architecture/adr-018-ABCI-Validators.md +++ b/docs/architecture/adr-018-ABCI-Validators.md @@ -2,10 +2,7 @@ ## Changelog -016-08-2018: Follow up from review: - - Revert changes to commit round - - Remind about justification for removing pubkey - - Update pros/cons +016-08-2018: Follow up from review: - Revert changes to commit round - Remind about justification for removing pubkey - Update pros/cons 05-08-2018: Initial draft ## Context @@ -35,11 +32,11 @@ message ValidatorUpdate { } ``` -As noted in ADR-009[https://github.com/tendermint/tendermint/blob/develop/docs/architecture/adr-009-ABCI-design.md], +As noted in ADR-009[https://github.com/tendermint/tendermint/blob/master/docs/architecture/adr-009-ABCI-design.md], the `Validator` does not contain a pubkey because quantum public keys are quite large and it would be wasteful to send them all over ABCI with every block. Thus, applications that want to take advantage of the information in BeginBlock -are *required* to store pubkeys in state (or use much less efficient lazy means +are _required_ to store pubkeys in state (or use much less efficient lazy means of verifying BeginBlock data). ### RequestBeginBlock diff --git a/docs/introduction/install.md b/docs/introduction/install.md index 00e04fa0..0a013bed 100644 --- a/docs/introduction/install.md +++ b/docs/introduction/install.md @@ -1,9 +1,9 @@ # Install Tendermint The fastest and easiest way to install the `tendermint` binary -is to run [this script](https://github.com/tendermint/tendermint/blob/develop/scripts/install/install_tendermint_ubuntu.sh) on +is to run [this script](https://github.com/tendermint/tendermint/blob/master/scripts/install/install_tendermint_ubuntu.sh) on a fresh Ubuntu instance, -or [this script](https://github.com/tendermint/tendermint/blob/develop/scripts/install/install_tendermint_bsd.sh) +or [this script](https://github.com/tendermint/tendermint/blob/master/scripts/install/install_tendermint_bsd.sh) on a fresh FreeBSD instance. Read the comments / instructions carefully (i.e., reset your terminal after running the script, make sure you are okay with the network connections being made). diff --git a/docs/introduction/introduction.md b/docs/introduction/introduction.md index f80a159c..4f435bbf 100644 --- a/docs/introduction/introduction.md +++ b/docs/introduction/introduction.md @@ -122,7 +122,7 @@ consensus engine, and provides a particular application state. ## ABCI Overview The [Application BlockChain Interface -(ABCI)](https://github.com/tendermint/tendermint/tree/develop/abci) +(ABCI)](https://github.com/tendermint/tendermint/tree/master/abci) allows for Byzantine Fault Tolerant replication of applications written in any programming language. @@ -190,7 +190,7 @@ core to the application. The application replies with corresponding response messages. The messages are specified here: [ABCI Message -Types](https://github.com/tendermint/tendermint/blob/develop/abci/README.md#message-types). +Types](https://github.com/tendermint/tendermint/blob/master/abci/README.md#message-types). The **DeliverTx** message is the work horse of the application. Each transaction in the blockchain is delivered with this message. The diff --git a/docs/introduction/what-is-tendermint.md b/docs/introduction/what-is-tendermint.md index a35dd9ec..0371afc6 100644 --- a/docs/introduction/what-is-tendermint.md +++ b/docs/introduction/what-is-tendermint.md @@ -116,7 +116,7 @@ consensus engine, and provides a particular application state. ## ABCI Overview The [Application BlockChain Interface -(ABCI)](https://github.com/tendermint/tendermint/tree/develop/abci) +(ABCI)](https://github.com/tendermint/tendermint/tree/master/abci) allows for Byzantine Fault Tolerant replication of applications written in any programming language. @@ -184,7 +184,7 @@ core to the application. The application replies with corresponding response messages. The messages are specified here: [ABCI Message -Types](https://github.com/tendermint/tendermint/blob/develop/abci/README.md#message-types). +Types](https://github.com/tendermint/tendermint/blob/master/abci/README.md#message-types). The **DeliverTx** message is the work horse of the application. Each transaction in the blockchain is delivered with this message. The diff --git a/docs/networks/docker-compose.md b/docs/networks/docker-compose.md index 8db49af5..37b53faf 100644 --- a/docs/networks/docker-compose.md +++ b/docs/networks/docker-compose.md @@ -78,9 +78,9 @@ cd $GOPATH/src/github.com/tendermint/tendermint rm -rf ./build/node* ``` -## Configuring abci containers +## Configuring abci containers -To use your own abci applications with 4-node setup edit the [docker-compose.yaml](https://github.com/tendermint/tendermint/blob/develop/docker-compose.yml) file and add image to your abci application. +To use your own abci applications with 4-node setup edit the [docker-compose.yaml](https://github.com/tendermint/tendermint/blob/master/docker-compose.yml) file and add image to your abci application. ``` abci0: @@ -129,7 +129,7 @@ To use your own abci applications with 4-node setup edit the [docker-compose.yam ``` -Override the [command](https://github.com/tendermint/tendermint/blob/master/networks/local/localnode/Dockerfile#L12) in each node to connect to it's abci. +Override the [command](https://github.com/tendermint/tendermint/blob/master/networks/local/localnode/Dockerfile#L12) in each node to connect to it's abci. ``` node0: diff --git a/docs/networks/terraform-and-ansible.md b/docs/networks/terraform-and-ansible.md index 122591be..3ef6056a 100644 --- a/docs/networks/terraform-and-ansible.md +++ b/docs/networks/terraform-and-ansible.md @@ -8,7 +8,7 @@ testnets on those servers. ## Install NOTE: see the [integration bash -script](https://github.com/tendermint/tendermint/blob/develop/networks/remote/integration.sh) +script](https://github.com/tendermint/tendermint/blob/master/networks/remote/integration.sh) that can be run on a fresh DO droplet and will automatically spin up a 4 node testnet. The script more or less does everything described below. diff --git a/docs/spec/abci/README.md b/docs/spec/abci/README.md index bb1c38b6..56d5e8aa 100644 --- a/docs/spec/abci/README.md +++ b/docs/spec/abci/README.md @@ -2,11 +2,11 @@ ABCI is the interface between Tendermint (a state-machine replication engine) and your application (the actual state machine). It consists of a set of -*methods*, where each method has a corresponding `Request` and `Response` +_methods_, where each method has a corresponding `Request` and `Response` message type. Tendermint calls the ABCI methods on the ABCI application by sending the `Request*` messages and receiving the `Response*` messages in return. -All message types are defined in a [protobuf file](https://github.com/tendermint/tendermint/blob/develop/abci/types/types.proto). +All message types are defined in a [protobuf file](https://github.com/tendermint/tendermint/blob/master/abci/types/types.proto). This allows Tendermint to run applications written in any programming language. This specification is split as follows: diff --git a/docs/spec/abci/abci.md b/docs/spec/abci/abci.md index abab7f54..31ac85ab 100644 --- a/docs/spec/abci/abci.md +++ b/docs/spec/abci/abci.md @@ -3,9 +3,9 @@ ## Overview The ABCI message types are defined in a [protobuf -file](https://github.com/tendermint/tendermint/blob/develop/abci/types/types.proto). +file](https://github.com/tendermint/tendermint/blob/master/abci/types/types.proto). -ABCI methods are split across 3 separate ABCI *connections*: +ABCI methods are split across 3 separate ABCI _connections_: - `Consensus Connection`: `InitChain, BeginBlock, DeliverTx, EndBlock, Commit` - `Mempool Connection`: `CheckTx` @@ -85,7 +85,7 @@ Example: cmn.KVPair{Key: []byte("amount"), Value: []byte("...")}, cmn.KVPair{Key: []byte("reason"), Value: []byte("...")}, }, - }, + }, // ... }, } @@ -115,19 +115,19 @@ non-determinism must be fixed and the nodes restarted. Sources of non-determinism in applications may include: - Hardware failures - - Cosmic rays, overheating, etc. + - Cosmic rays, overheating, etc. - Node-dependent state - - Random numbers - - Time + - Random numbers + - Time - Underspecification - - Library version changes - - Race conditions - - Floating point numbers - - JSON serialization - - Iterating through hash-tables/maps/dictionaries + - Library version changes + - Race conditions + - Floating point numbers + - JSON serialization + - Iterating through hash-tables/maps/dictionaries - External Sources - - Filesystem - - Network calls (eg. some external REST API service) + - Filesystem + - Network calls (eg. some external REST API service) See [#56](https://github.com/tendermint/abci/issues/56) for original discussion. @@ -240,9 +240,9 @@ Commit are included in the header of the next block. - `Path (string)`: Path of request, like an HTTP GET path. Can be used with or in liue of Data. - Apps MUST interpret '/store' as a query by key on the - underlying store. The key SHOULD be specified in the Data field. + underlying store. The key SHOULD be specified in the Data field. - Apps SHOULD allow queries over specific types like - '/accounts/...' or '/votes/...' + '/accounts/...' or '/votes/...' - `Height (int64)`: The block height for which you want the query (default=0 returns data for the latest committed block). Note that this is the height of the block containing the @@ -269,7 +269,7 @@ Commit are included in the header of the next block. - Query for data from the application at current or past height. - Optionally return Merkle proof. - Merkle proof includes self-describing `type` field to support many types - of Merkle trees and encoding formats. + of Merkle trees and encoding formats. ### BeginBlock @@ -486,7 +486,7 @@ Commit are included in the header of the next block. - `Votes ([]VoteInfo)`: List of validators addresses in the last validator set with their voting power and whether or not they signed a vote. -### ConsensusParams +### ConsensusParams - **Fields**: - `Block (BlockParams)`: Parameters limiting the size of a block and time between consecutive blocks. @@ -500,17 +500,17 @@ Commit are included in the header of the next block. - `MaxBytes (int64)`: Max size of a block, in bytes. - `MaxGas (int64)`: Max sum of `GasWanted` in a proposed block. - NOTE: blocks that violate this may be committed if there are Byzantine proposers. - It's the application's responsibility to handle this when processing a - block! + It's the application's responsibility to handle this when processing a + block! ### EvidenceParams - **Fields**: - `MaxAge (int64)`: Max age of evidence, in blocks. Evidence older than this is considered stale and ignored. - - This should correspond with an app's "unbonding period" or other - similar mechanism for handling Nothing-At-Stake attacks. - - NOTE: this should change to time (instead of blocks)! + - This should correspond with an app's "unbonding period" or other + similar mechanism for handling Nothing-At-Stake attacks. + - NOTE: this should change to time (instead of blocks)! ### ValidatorParams @@ -532,4 +532,3 @@ Commit are included in the header of the next block. - `Type (string)`: Type of Merkle proof and how it's encoded. - `Key ([]byte)`: Key in the Merkle tree that this proof is for. - `Data ([]byte)`: Encoded Merkle proof for the key. - diff --git a/docs/spec/abci/client-server.md b/docs/spec/abci/client-server.md index 5ac7b3eb..94485f0d 100644 --- a/docs/spec/abci/client-server.md +++ b/docs/spec/abci/client-server.md @@ -9,7 +9,7 @@ Applications](./apps.md). ## Message Protocol The message protocol consists of pairs of requests and responses defined in the -[protobuf file](https://github.com/tendermint/tendermint/blob/develop/abci/types/types.proto). +[protobuf file](https://github.com/tendermint/tendermint/blob/master/abci/types/types.proto). Some messages have no fields, while others may include byte-arrays, strings, integers, or custom protobuf types. @@ -33,9 +33,9 @@ The latter two can be tested using the `abci-cli` by setting the `--abci` flag appropriately (ie. to `socket` or `grpc`). See examples, in various stages of maintenance, in -[Go](https://github.com/tendermint/tendermint/tree/develop/abci/server), +[Go](https://github.com/tendermint/tendermint/tree/master/abci/server), [JavaScript](https://github.com/tendermint/js-abci), -[Python](https://github.com/tendermint/tendermint/tree/develop/abci/example/python3/abci), +[Python](https://github.com/tendermint/tendermint/tree/master/abci/example/python3/abci), [C++](https://github.com/mdyring/cpp-tmsp), and [Java](https://github.com/jTendermint/jabci). @@ -44,14 +44,13 @@ See examples, in various stages of maintenance, in The simplest implementation uses function calls within Golang. This means ABCI applications written in Golang can be compiled with TendermintCore and run as a single binary. - ### GRPC If GRPC is available in your language, this is the easiest approach, though it will have significant performance overhead. To get started with GRPC, copy in the [protobuf -file](https://github.com/tendermint/tendermint/blob/develop/abci/types/types.proto) +file](https://github.com/tendermint/tendermint/blob/master/abci/types/types.proto) and compile it using the GRPC plugin for your language. For instance, for golang, the command is `protoc --go_out=plugins=grpc:. types.proto`. See the [grpc documentation for more details](http://www.grpc.io/docs/). @@ -107,4 +106,4 @@ received or a block is committed. It is unlikely that you will need to implement a client. For details of our client, see -[here](https://github.com/tendermint/tendermint/tree/develop/abci/client). +[here](https://github.com/tendermint/tendermint/tree/master/abci/client). diff --git a/docs/spec/blockchain/encoding.md b/docs/spec/blockchain/encoding.md index 14d0e786..170e9160 100644 --- a/docs/spec/blockchain/encoding.md +++ b/docs/spec/blockchain/encoding.md @@ -59,20 +59,20 @@ familiar with amino encoding. You can simply use below table and concatenate Prefix || Length (of raw bytes) || raw bytes ( while || stands for byte concatenation here). -| Type | Name | Prefix | Length | Notes | -| ------------------ | ----------------------------- | ---------- | -------- | ----- | -| PubKeyEd25519 | tendermint/PubKeyEd25519 | 0x1624DE64 | 0x20 | | -| PubKeySecp256k1 | tendermint/PubKeySecp256k1 | 0xEB5AE987 | 0x21 | | -| PrivKeyEd25519 | tendermint/PrivKeyEd25519 | 0xA3288910 | 0x40 | | -| PrivKeySecp256k1 | tendermint/PrivKeySecp256k1 | 0xE1B0F79B | 0x20 | | -| PubKeyMultisigThreshold | tendermint/PubKeyMultisigThreshold | 0x22C1F7E2 | variable | | +| Type | Name | Prefix | Length | Notes | +| ----------------------- | ---------------------------------- | ---------- | -------- | ----- | +| PubKeyEd25519 | tendermint/PubKeyEd25519 | 0x1624DE64 | 0x20 | | +| PubKeySecp256k1 | tendermint/PubKeySecp256k1 | 0xEB5AE987 | 0x21 | | +| PrivKeyEd25519 | tendermint/PrivKeyEd25519 | 0xA3288910 | 0x40 | | +| PrivKeySecp256k1 | tendermint/PrivKeySecp256k1 | 0xE1B0F79B | 0x20 | | +| PubKeyMultisigThreshold | tendermint/PubKeyMultisigThreshold | 0x22C1F7E2 | variable | | ### Example For example, the 33-byte (or 0x21-byte in hex) Secp256k1 pubkey - `020BD40F225A57ED383B440CF073BC5539D0341F5767D2BF2D78406D00475A2EE9` - would be encoded as - `EB5AE98721020BD40F225A57ED383B440CF073BC5539D0341F5767D2BF2D78406D00475A2EE9` +`020BD40F225A57ED383B440CF073BC5539D0341F5767D2BF2D78406D00475A2EE9` +would be encoded as +`EB5AE98721020BD40F225A57ED383B440CF073BC5539D0341F5767D2BF2D78406D00475A2EE9` ### Key Types @@ -170,11 +170,11 @@ We use the RFC 6962 specification of a merkle tree, with sha256 as the hash func Merkle trees are used throughout Tendermint to compute a cryptographic digest of a data structure. The differences between RFC 6962 and the simplest form a merkle tree are that: -1) leaf nodes and inner nodes have different hashes. +1. leaf nodes and inner nodes have different hashes. This is for "second pre-image resistance", to prevent the proof to an inner node being valid as the proof of a leaf. The leaf nodes are `SHA256(0x00 || leaf_data)`, and inner nodes are `SHA256(0x01 || left_hash || right_hash)`. -2) When the number of items isn't a power of two, the left half of the tree is as big as it could be. +2. When the number of items isn't a power of two, the left half of the tree is as big as it could be. (The largest power of two less than the number of items) This allows new leaves to be added with less recomputation. For example: @@ -290,7 +290,7 @@ func computeHashFromAunts(index, total int, leafHash []byte, innerHashes [][]byt ### IAVL+ Tree -Because Tendermint only uses a Simple Merkle Tree, application developers are expect to use their own Merkle tree in their applications. For example, the IAVL+ Tree - an immutable self-balancing binary tree for persisting application state is used by the [Cosmos SDK](https://github.com/cosmos/cosmos-sdk/blob/develop/docs/sdk/core/multistore.md) +Because Tendermint only uses a Simple Merkle Tree, application developers are expect to use their own Merkle tree in their applications. For example, the IAVL+ Tree - an immutable self-balancing binary tree for persisting application state is used by the [Cosmos SDK](https://github.com/cosmos/cosmos-sdk/blob/master/docs/clients/lite/specification.md) ## JSON diff --git a/docs/spec/consensus/consensus.md b/docs/spec/consensus/consensus.md index acd07397..ec6659c9 100644 --- a/docs/spec/consensus/consensus.md +++ b/docs/spec/consensus/consensus.md @@ -120,7 +120,7 @@ A proposal is signed and published by the designated proposer at each round. The proposer is chosen by a deterministic and non-choking round robin selection algorithm that selects proposers in proportion to their voting power (see -[implementation](https://github.com/tendermint/tendermint/blob/develop/types/validator_set.go)). +[implementation](https://github.com/tendermint/tendermint/blob/master/types/validator_set.go)). A proposal at `(H,R)` is composed of a block and an optional latest `PoLC-Round < R` which is included iff the proposer knows of one. This diff --git a/docs/spec/reactors/mempool/reactor.md b/docs/spec/reactors/mempool/reactor.md index d349fc7c..7e9a2d8f 100644 --- a/docs/spec/reactors/mempool/reactor.md +++ b/docs/spec/reactors/mempool/reactor.md @@ -7,7 +7,7 @@ See [this issue](https://github.com/tendermint/tendermint/issues/1503) Mempool maintains a cache of the last 10000 transactions to prevent replaying old transactions (plus transactions coming from other validators, who are continually exchanging transactions). Read [Replay -Protection](../../../../app-development.md#replay-protection) +Protection](../../../app-dev/app-development.md#replay-protection) for details. Sending incorrectly encoded data or data exceeding `maxMsgSize` will result diff --git a/docs/spec/software/wal.md b/docs/spec/software/wal.md index 1f5d712c..889ce486 100644 --- a/docs/spec/software/wal.md +++ b/docs/spec/software/wal.md @@ -28,5 +28,5 @@ WAL. Then it will go to precommit, and that time it will work because the private validator contains the `LastSignBytes` and then we’ll replay the precommit from the WAL. -Make sure to read about [WAL corruption](../../../tendermint-core/running-in-production.md#wal-corruption) +Make sure to read about [WAL corruption](../../tendermint-core/running-in-production.md#wal-corruption) and recovery strategies. diff --git a/docs/tendermint-core/configuration.md b/docs/tendermint-core/configuration.md index df05f7c5..b9f78459 100644 --- a/docs/tendermint-core/configuration.md +++ b/docs/tendermint-core/configuration.md @@ -315,8 +315,7 @@ namespace = "tendermint" If `create_empty_blocks` is set to `true` in your config, blocks will be created ~ every second (with default consensus parameters). You can regulate -the delay between blocks by changing the `timeout_commit`. E.g. `timeout_commit -= "10s"` should result in ~ 10 second blocks. +the delay between blocks by changing the `timeout_commit`. E.g. `timeout_commit = "10s"` should result in ~ 10 second blocks. **create_empty_blocks = false** @@ -342,7 +341,7 @@ Tendermint will only create blocks if there are transactions, or after waiting ## Consensus timeouts explained There's a variety of information about timeouts in [Running in -production](./running-in-production.html) +production](./running-in-production.md) You can also find more detailed technical explanation in the spec: [The latest gossip on BFT consensus](https://arxiv.org/abs/1807.04938). diff --git a/docs/tendermint-core/how-to-read-logs.md b/docs/tendermint-core/how-to-read-logs.md index 54c2c8a3..e852298b 100644 --- a/docs/tendermint-core/how-to-read-logs.md +++ b/docs/tendermint-core/how-to-read-logs.md @@ -115,7 +115,7 @@ little overview what they do. - `abci-client` As mentioned in [Application Development Guide](../app-dev/app-development.md), Tendermint acts as an ABCI client with respect to the application and maintains 3 connections: mempool, consensus and query. The code used by Tendermint Core can - be found [here](https://github.com/tendermint/tendermint/tree/develop/abci/client). + be found [here](https://github.com/tendermint/tendermint/tree/master/abci/client). - `blockchain` Provides storage, pool (a group of peers), and reactor for both storing and exchanging blocks between peers. - `consensus` The heart of Tendermint core, which is the diff --git a/docs/tendermint-core/rpc.md b/docs/tendermint-core/rpc.md index 4ea5ab0d..1b8e2442 100644 --- a/docs/tendermint-core/rpc.md +++ b/docs/tendermint-core/rpc.md @@ -4,4 +4,4 @@ The RPC documentation is hosted here: - [https://tendermint.com/rpc/](https://tendermint.com/rpc/) -To update the documentation, edit the relevant `godoc` comments in the [rpc/core directory](https://github.com/tendermint/tendermint/tree/develop/rpc/core). +To update the documentation, edit the relevant `godoc` comments in the [rpc/core directory](https://github.com/tendermint/tendermint/tree/master/rpc/core). From ddee2d641f864d62212bc3ab318f5ff7b64d9aa3 Mon Sep 17 00:00:00 2001 From: Alessio Treglia Date: Wed, 10 Jul 2019 09:48:31 +0100 Subject: [PATCH 3/7] infrastructure for reproducible builds (#3770) * Add deterministic buildsystem * Update CircleCI config * Enable build on all branches for testing purposes * Revert "Enable build on all branches for testing purposes" This reverts commit bf5cf66da94bf9c23787b42995b0409492805f03. * Remove develop from branch filters * Remove dangling reference to develop * Upload binaries too * Build for stable branches too --- .circleci/config.yml | 35 ++- scripts/gitian-build.sh | 201 ++++++++++++++++++ scripts/gitian-descriptors/gitian-darwin.yml | 111 ++++++++++ scripts/gitian-descriptors/gitian-linux.yml | 110 ++++++++++ scripts/gitian-descriptors/gitian-windows.yml | 111 ++++++++++ scripts/gitian-keys/README.md | 29 +++ scripts/gitian-keys/keys.txt | 1 + 7 files changed, 597 insertions(+), 1 deletion(-) create mode 100755 scripts/gitian-build.sh create mode 100644 scripts/gitian-descriptors/gitian-darwin.yml create mode 100644 scripts/gitian-descriptors/gitian-linux.yml create mode 100644 scripts/gitian-descriptors/gitian-windows.yml create mode 100644 scripts/gitian-keys/README.md create mode 100644 scripts/gitian-keys/keys.txt diff --git a/.circleci/config.yml b/.circleci/config.yml index 5836b454..539dd7ee 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -331,6 +331,34 @@ jobs: docker push "tendermint/tendermint" docker logout + reproducible_builds: + <<: *defaults + steps: + - attach_workspace: + at: /tmp/workspace + - checkout + - setup_remote_docker: + docker_layer_caching: true + - run: + name: Build tendermint + no_output_timeout: 20m + command: | + sudo apt-get install -y ruby + bash -x ./scripts/gitian-build.sh all + for os in darwin linux windows; do + cp gitian-build-${os}/result/tendermint-${os}-res.yml . + cp gitian-build-${os}/build/out/tendermint-*.tar.gz . + rm -rf gitian-build-${os}/ + done + - store_artifacts: + path: /go/src/github.com/tendermint/tendermint/tendermint-darwin-res.yml + - store_artifacts: + path: /go/src/github.com/tendermint/tendermint/tendermint-linux-res.yml + - store_artifacts: + path: /go/src/github.com/tendermint/tendermint/tendermint-windows-res.yml + - store_artifacts: + path: /go/src/github.com/tendermint/tendermint/tendermint-*.tar.gz + workflows: version: 2 test-suite: @@ -340,7 +368,6 @@ workflows: branches: only: - master - - develop - setup_dependencies - test_abci_apps: requires: @@ -364,6 +391,12 @@ workflows: - upload_coverage: requires: - test_cover + - reproducible_builds: + filters: + branches: + only: + - master + - /v[0-9]+\.[0-9]+/ release: jobs: - prepare_build diff --git a/scripts/gitian-build.sh b/scripts/gitian-build.sh new file mode 100755 index 00000000..a7a6acec --- /dev/null +++ b/scripts/gitian-build.sh @@ -0,0 +1,201 @@ +#!/bin/bash + +# symbol prefixes: +# g_ -> global +# l_ - local variable +# f_ -> function + +set -euo pipefail + +GITIAN_CACHE_DIRNAME='.gitian-builder-cache' +GO_DEBIAN_RELEASE='1.12.5-1' +GO_TARBALL="golang-debian-${GO_DEBIAN_RELEASE}.tar.gz" +GO_TARBALL_URL="https://salsa.debian.org/go-team/compiler/golang/-/archive/debian/${GO_DEBIAN_RELEASE}/${GO_TARBALL}" + +# Defaults + +DEFAULT_SIGN_COMMAND='gpg --detach-sign' +DEFAULT_TENDERMINT_SIGS=${TENDERMINT_SIGS:-'tendermint.sigs'} +DEFAULT_GITIAN_REPO='https://github.com/devrandom/gitian-builder' +DEFAULT_GBUILD_FLAGS='' +DEFAULT_SIGS_REPO='https://github.com/tendermint/tendermint.sigs' + +# Overrides + +SIGN_COMMAND=${SIGN_COMMAND:-${DEFAULT_SIGN_COMMAND}} +GITIAN_REPO=${GITIAN_REPO:-${DEFAULT_GITIAN_REPO}} +GBUILD_FLAGS=${GBUILD_FLAGS:-${DEFAULT_GBUILD_FLAGS}} + +# Globals + +g_workdir='' +g_gitian_cache='' +g_cached_gitian='' +g_cached_go_tarball='' +g_sign_identity='' +g_sigs_dir='' +g_flag_commit='' + + +f_help() { + cat >&2 <&2 + mkdir "${l_builddir}/inputs/" + cp -v "${g_cached_go_tarball}" "${l_builddir}/inputs/" + done +} + +f_build() { + local l_descriptor + + l_descriptor=$1 + + bin/gbuild --commit tendermint="$g_commit" ${GBUILD_FLAGS} "$l_descriptor" + libexec/stop-target || f_echo_stderr "warning: couldn't stop target" +} + +f_sign_verify() { + local l_descriptor + + l_descriptor=$1 + + bin/gsign -p "${SIGN_COMMAND}" -s "${g_sign_identity}" --destination="${g_sigs_dir}" --release=${g_release} ${l_descriptor} + bin/gverify --destination="${g_sigs_dir}" --release="${g_release}" ${l_descriptor} +} + +f_commit_sig() { + local l_release_name + + l_release_name=$1 + + pushd "${g_sigs_dir}" + git add . || echo "git add failed" >&2 + git commit -m "Add ${l_release_name} reproducible build" || echo "git commit failed" >&2 + popd +} + +f_prep_docker_image() { + pushd $1 + bin/make-base-vm --docker --suite bionic --arch amd64 + popd +} + +f_ensure_cache() { + g_gitian_cache="${g_workdir}/${GITIAN_CACHE_DIRNAME}" + [ -d "${g_gitian_cache}" ] || mkdir "${g_gitian_cache}" + + g_cached_go_tarball="${g_gitian_cache}/${GO_TARBALL}" + if [ ! -f "${g_cached_go_tarball}" ]; then + f_echo_stderr "${g_cached_go_tarball}: cache miss, caching..." + curl -L "${GO_TARBALL_URL}" --output "${g_cached_go_tarball}" + fi + + g_cached_gitian="${g_gitian_cache}/gitian-builder" + if [ ! -d "${g_cached_gitian}" ]; then + f_echo_stderr "${g_cached_gitian}: cache miss, caching..." + git clone ${GITIAN_REPO} "${g_cached_gitian}" + fi +} + +f_demangle_platforms() { + case "${1}" in + all) + printf '%s' 'darwin linux windows' ;; + linux|darwin|windows) + printf '%s' "${1}" ;; + *) + echo "invalid platform -- ${1}" + exit 1 + esac +} + +f_echo_stderr() { + echo $@ >&2 +} + + +while getopts ":cs:h" opt; do + case "${opt}" in + h) f_help ; exit 0 ;; + c) g_flag_commit=y ;; + s) g_sign_identity="${OPTARG}" ;; + esac +done + +shift "$((OPTIND-1))" + +g_platforms=$(f_demangle_platforms "${1}") +g_workdir="$(pwd)" +g_commit="$(git rev-parse HEAD)" +g_sigs_dir=${TENDERMINT_SIGS:-"${g_workdir}/${DEFAULT_TENDERMINT_SIGS}"} + +f_ensure_cache + +f_prep_docker_image "${g_cached_gitian}" + +f_prep_build "${g_platforms}" + +export USE_DOCKER=1 +for g_os in ${g_platforms}; do + g_release="$(git describe --tags --abbrev=9 | sed 's/^v//')-${g_os}" + g_descriptor="${g_workdir}/scripts/gitian-descriptors/gitian-${g_os}.yml" + [ -f ${g_descriptor} ] + g_builddir="$(f_builddir ${g_os})" + + pushd "${g_builddir}" + f_build "${g_descriptor}" + if [ -n "${g_sign_identity}" ]; then + f_sign_verify "${g_descriptor}" + fi + popd + + if [ -n "${g_sign_identity}" -a -n "${g_flag_commit}" ]; then + [ -d "${g_sigs_dir}/.git/" ] && f_commit_sig ${g_release} || f_echo_stderr "couldn't commit, ${g_sigs_dir} is not a git clone" + fi +done + +exit 0 diff --git a/scripts/gitian-descriptors/gitian-darwin.yml b/scripts/gitian-descriptors/gitian-darwin.yml new file mode 100644 index 00000000..03ba1f1a --- /dev/null +++ b/scripts/gitian-descriptors/gitian-darwin.yml @@ -0,0 +1,111 @@ +--- +name: "tendermint-darwin" +enable_cache: true +distro: "ubuntu" +suites: +- "bionic" +architectures: +- "amd64" +packages: +- "bsdmainutils" +- "build-essential" +- "ca-certificates" +- "curl" +- "debhelper" +- "dpkg-dev" +- "devscripts" +- "fakeroot" +- "git" +- "golang-any" +- "xxd" +- "quilt" +remotes: +- "url": "https://github.com/tendermint/tendermint.git" + "dir": "tendermint" +files: +- "golang-debian-1.12.5-1.tar.gz" +script: | + set -e -o pipefail + + GO_SRC_RELEASE=golang-debian-1.12.5-1 + GO_SRC_TARBALL="${GO_SRC_RELEASE}.tar.gz" + # Compile go and configure the environment + export TAR_OPTIONS="--mtime="$REFERENCE_DATE\\\ $REFERENCE_TIME"" + export BUILD_DIR=`pwd` + tar xf "${GO_SRC_TARBALL}" + rm -f "${GO_SRC_TARBALL}" + [ -d "${GO_SRC_RELEASE}/" ] + mv "${GO_SRC_RELEASE}/" go/ + pushd go/ + QUILT_PATCHES=debian/patches quilt push -a + fakeroot debian/rules build RUN_TESTS=false GOCACHE=/tmp/go-cache + popd + + export GOOS=darwin + export GOROOT=${BUILD_DIR}/go + export GOPATH=${BUILD_DIR}/gopath + mkdir -p ${GOPATH}/bin + + export PATH_orig=${PATH} + export PATH=$GOPATH/bin:$GOROOT/bin:$PATH + + export ARCHS='386 amd64' + export GO111MODULE=on + + # Make release tarball + pushd tendermint + VERSION=$(git describe --tags | sed 's/^v//') + COMMIT=$(git rev-parse --short=8 HEAD) + DISTNAME=tendermint-${VERSION} + git archive --format tar.gz --prefix ${DISTNAME}/ -o ${DISTNAME}.tar.gz HEAD + SOURCEDIST=`pwd`/`echo tendermint-*.tar.gz` + popd + + # Correct tar file order + mkdir -p temp + pushd temp + tar xf $SOURCEDIST + rm $SOURCEDIST + find tendermint-* | sort | tar --no-recursion --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 -c -T - | gzip -9n > $SOURCEDIST + popd + + # Prepare GOPATH and install deps + distsrc=${GOPATH}/src/github.com/tendermint/tendermint + mkdir -p ${distsrc} + pushd ${distsrc} + tar --strip-components=1 -xf $SOURCEDIST + go mod download + popd + + # Configure LDFLAGS for reproducible builds + LDFLAGS="-extldflags=-static -buildid=${VERSION} -s -w \ + -X github.com/tendermint/tendermint/version.GitCommit=${COMMIT}" + + # Extract release tarball and build + for arch in ${ARCHS}; do + INSTALLPATH=`pwd`/installed/${DISTNAME}-${arch} + mkdir -p ${INSTALLPATH} + + # Build tendermint binary + pushd ${distsrc} + GOARCH=${arch} GOROOT_FINAL=${GOROOT} go build -a \ + -gcflags=all=-trimpath=${GOPATH} \ + -asmflags=all=-trimpath=${GOPATH} \ + -mod=readonly -tags "tendermint" \ + -ldflags="${LDFLAGS}" \ + -o ${INSTALLPATH}/tendermint ./cmd/tendermint/ + + popd # ${distsrc} + + pushd ${INSTALLPATH} + find -type f | sort | tar \ + --no-recursion --mode='u+rw,go+r-w,a+X' \ + --numeric-owner --sort=name \ + --owner=0 --group=0 -c -T - | gzip -9n > ${OUTDIR}/${DISTNAME}-darwin-${arch}.tar.gz + popd # installed + done + + rm -rf ${distsrc} + + mkdir -p $OUTDIR/src + mv $SOURCEDIST $OUTDIR/src diff --git a/scripts/gitian-descriptors/gitian-linux.yml b/scripts/gitian-descriptors/gitian-linux.yml new file mode 100644 index 00000000..f1c31c40 --- /dev/null +++ b/scripts/gitian-descriptors/gitian-linux.yml @@ -0,0 +1,110 @@ +--- +name: "tendermint-linux" +enable_cache: true +distro: "ubuntu" +suites: +- "bionic" +architectures: +- "amd64" +packages: +- "bsdmainutils" +- "build-essential" +- "ca-certificates" +- "curl" +- "debhelper" +- "dpkg-dev" +- "devscripts" +- "fakeroot" +- "git" +- "golang-any" +- "xxd" +- "quilt" +remotes: +- "url": "https://github.com/tendermint/tendermint.git" + "dir": "tendermint" +files: +- "golang-debian-1.12.5-1.tar.gz" +script: | + set -e -o pipefail + + GO_SRC_RELEASE=golang-debian-1.12.5-1 + GO_SRC_TARBALL="${GO_SRC_RELEASE}.tar.gz" + # Compile go and configure the environment + export TAR_OPTIONS="--mtime="$REFERENCE_DATE\\\ $REFERENCE_TIME"" + export BUILD_DIR=`pwd` + tar xf "${GO_SRC_TARBALL}" + rm -f "${GO_SRC_TARBALL}" + [ -d "${GO_SRC_RELEASE}/" ] + mv "${GO_SRC_RELEASE}/" go/ + pushd go/ + QUILT_PATCHES=debian/patches quilt push -a + fakeroot debian/rules build RUN_TESTS=false GOCACHE=/tmp/go-cache + popd + + export GOROOT=${BUILD_DIR}/go + export GOPATH=${BUILD_DIR}/gopath + mkdir -p ${GOPATH}/bin + + export PATH_orig=${PATH} + export PATH=$GOPATH/bin:$GOROOT/bin:$PATH + + export ARCHS='386 amd64 arm arm64' + export GO111MODULE=on + + # Make release tarball + pushd tendermint + VERSION=$(git describe --tags | sed 's/^v//') + COMMIT=$(git rev-parse --short=8 HEAD) + DISTNAME=tendermint-${VERSION} + git archive --format tar.gz --prefix ${DISTNAME}/ -o ${DISTNAME}.tar.gz HEAD + SOURCEDIST=`pwd`/`echo tendermint-*.tar.gz` + popd + + # Correct tar file order + mkdir -p temp + pushd temp + tar xf $SOURCEDIST + rm $SOURCEDIST + find tendermint-* | sort | tar --no-recursion --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 -c -T - | gzip -9n > $SOURCEDIST + popd + + # Prepare GOPATH and install deps + distsrc=${GOPATH}/src/github.com/tendermint/tendermint + mkdir -p ${distsrc} + pushd ${distsrc} + tar --strip-components=1 -xf $SOURCEDIST + go mod download + popd + + # Configure LDFLAGS for reproducible builds + LDFLAGS="-extldflags=-static -buildid=${VERSION} -s -w \ + -X github.com/tendermint/tendermint/version.GitCommit=${COMMIT}" + + # Extract release tarball and build + for arch in ${ARCHS}; do + INSTALLPATH=`pwd`/installed/${DISTNAME}-${arch} + mkdir -p ${INSTALLPATH} + + # Build tendermint binary + pushd ${distsrc} + GOARCH=${arch} GOROOT_FINAL=${GOROOT} go build -a \ + -gcflags=all=-trimpath=${GOPATH} \ + -asmflags=all=-trimpath=${GOPATH} \ + -mod=readonly -tags "tendermint" \ + -ldflags="${LDFLAGS}" \ + -o ${INSTALLPATH}/tendermint ./cmd/tendermint/ + + popd # ${distsrc} + + pushd ${INSTALLPATH} + find -type f | sort | tar \ + --no-recursion --mode='u+rw,go+r-w,a+X' \ + --numeric-owner --sort=name \ + --owner=0 --group=0 -c -T - | gzip -9n > ${OUTDIR}/${DISTNAME}-linux-${arch}.tar.gz + popd # installed + done + + rm -rf ${distsrc} + + mkdir -p $OUTDIR/src + mv $SOURCEDIST $OUTDIR/src diff --git a/scripts/gitian-descriptors/gitian-windows.yml b/scripts/gitian-descriptors/gitian-windows.yml new file mode 100644 index 00000000..80b2e60d --- /dev/null +++ b/scripts/gitian-descriptors/gitian-windows.yml @@ -0,0 +1,111 @@ +--- +name: "tendermint-windows" +enable_cache: true +distro: "ubuntu" +suites: +- "bionic" +architectures: +- "amd64" +packages: +- "bsdmainutils" +- "build-essential" +- "ca-certificates" +- "curl" +- "debhelper" +- "dpkg-dev" +- "devscripts" +- "fakeroot" +- "git" +- "golang-any" +- "xxd" +- "quilt" +remotes: +- "url": "https://github.com/tendermint/tendermint.git" + "dir": "tendermint" +files: +- "golang-debian-1.12.5-1.tar.gz" +script: | + set -e -o pipefail + + GO_SRC_RELEASE=golang-debian-1.12.5-1 + GO_SRC_TARBALL="${GO_SRC_RELEASE}.tar.gz" + # Compile go and configure the environment + export TAR_OPTIONS="--mtime="$REFERENCE_DATE\\\ $REFERENCE_TIME"" + export BUILD_DIR=`pwd` + tar xf "${GO_SRC_TARBALL}" + rm -f "${GO_SRC_TARBALL}" + [ -d "${GO_SRC_RELEASE}/" ] + mv "${GO_SRC_RELEASE}/" go/ + pushd go/ + QUILT_PATCHES=debian/patches quilt push -a + fakeroot debian/rules build RUN_TESTS=false GOCACHE=/tmp/go-cache + popd + + export GOOS=windows + export GOROOT=${BUILD_DIR}/go + export GOPATH=${BUILD_DIR}/gopath + mkdir -p ${GOPATH}/bin + + export PATH_orig=${PATH} + export PATH=$GOPATH/bin:$GOROOT/bin:$PATH + + export ARCHS='386 amd64' + export GO111MODULE=on + + # Make release tarball + pushd tendermint + VERSION=$(git describe --tags | sed 's/^v//') + COMMIT=$(git rev-parse --short=8 HEAD) + DISTNAME=tendermint-${VERSION} + git archive --format tar.gz --prefix ${DISTNAME}/ -o ${DISTNAME}.tar.gz HEAD + SOURCEDIST=`pwd`/`echo tendermint-*.tar.gz` + popd + + # Correct tar file order + mkdir -p temp + pushd temp + tar xf $SOURCEDIST + rm $SOURCEDIST + find tendermint-* | sort | tar --no-recursion --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 -c -T - | gzip -9n > $SOURCEDIST + popd + + # Prepare GOPATH and install deps + distsrc=${GOPATH}/src/github.com/tendermint/tendermint + mkdir -p ${distsrc} + pushd ${distsrc} + tar --strip-components=1 -xf $SOURCEDIST + go mod download + popd + + # Configure LDFLAGS for reproducible builds + LDFLAGS="-extldflags=-static -buildid=${VERSION} -s -w \ + -X github.com/tendermint/tendermint/version.GitCommit=${COMMIT}" + + # Extract release tarball and build + for arch in ${ARCHS}; do + INSTALLPATH=`pwd`/installed/${DISTNAME}-${arch} + mkdir -p ${INSTALLPATH} + + # Build tendermint binary + pushd ${distsrc} + GOARCH=${arch} GOROOT_FINAL=${GOROOT} go build -a \ + -gcflags=all=-trimpath=${GOPATH} \ + -asmflags=all=-trimpath=${GOPATH} \ + -mod=readonly -tags "tendermint" \ + -ldflags="${LDFLAGS}" \ + -o ${INSTALLPATH}/tendermint.exe ./cmd/tendermint/ + + popd # ${distsrc} + + pushd ${INSTALLPATH} + find -type f | sort | tar \ + --no-recursion --mode='u+rw,go+r-w,a+X' \ + --numeric-owner --sort=name \ + --owner=0 --group=0 -c -T - | gzip -9n > ${OUTDIR}/${DISTNAME}-windows-${arch}.tar.gz + popd # installed + done + + rm -rf ${distsrc} + + mkdir -p $OUTDIR/src + mv $SOURCEDIST $OUTDIR/src diff --git a/scripts/gitian-keys/README.md b/scripts/gitian-keys/README.md new file mode 100644 index 00000000..f4ad711a --- /dev/null +++ b/scripts/gitian-keys/README.md @@ -0,0 +1,29 @@ +## PGP keys of Gitian builders and Tendermint Developers + +The file `keys.txt` contains fingerprints of the public keys of Gitian builders +and active developers. + +The associated keys are mainly used to sign git commits or the build results +of Gitian builds. + +The most recent version of each pgp key can be found on most PGP key servers. + +Fetch the latest version from the key server to see if any key was revoked in +the meantime. +To fetch the latest version of all pgp keys in your gpg homedir, + +```sh +gpg --refresh-keys +``` + +To fetch keys of Gitian builders and active core developers, feed the list of +fingerprints of the primary keys into gpg: + +```sh +while read fingerprint keyholder_name; \ +do gpg --keyserver hkp://subset.pool.sks-keyservers.net \ +--recv-keys ${fingerprint}; done < ./keys.txt +``` + +Add your key to the list if you are a Tendermint core developer or you have +provided Gitian signatures for two major or minor releases of Tendermint. diff --git a/scripts/gitian-keys/keys.txt b/scripts/gitian-keys/keys.txt new file mode 100644 index 00000000..91330ae0 --- /dev/null +++ b/scripts/gitian-keys/keys.txt @@ -0,0 +1 @@ +04160004A8276E40BB9890FBE8A48AE5311D765A Alessio Treglia From fc1eb46587644452e3e0ba495679a7f1d37f85b3 Mon Sep 17 00:00:00 2001 From: Marko Date: Wed, 10 Jul 2019 11:06:03 +0200 Subject: [PATCH 4/7] libs/common: remove heap.go (#3780) * Remove file heap.go - cmn.Heap is not being used in cosmos-sdk, iavl nor tendermint repo. Signed-off-by: Marko Baricevic * changelog entry * Update CHANGELOG_PENDING.md closes #2432 --- CHANGELOG_PENDING.md | 22 ++++---- libs/common/heap.go | 125 ------------------------------------------- 2 files changed, 13 insertions(+), 134 deletions(-) delete mode 100644 libs/common/heap.go diff --git a/CHANGELOG_PENDING.md b/CHANGELOG_PENDING.md index 9c4c8b68..cda247cb 100644 --- a/CHANGELOG_PENDING.md +++ b/CHANGELOG_PENDING.md @@ -1,6 +1,6 @@ ## v0.32.1 -** +\*\* Special thanks to external contributors on this release: @@ -9,33 +9,37 @@ program](https://hackerone.com/tendermint). ### BREAKING CHANGES: -* CLI/RPC/Config +- CLI/RPC/Config -* Apps +- Apps + +- Go API -* Go API - [abci] \#2127 ABCI / mempool: Add a "Recheck Tx" indicator. Breaks the ABCI client interface (`abcicli.Client`) to allow for supplying the ABCI `types.RequestCheckTx` and `types.RequestDeliverTx` structs, and lets the mempool indicate to the ABCI app whether a CheckTx request is a recheck or not. - [libs] Remove unused `db/debugDB` and `common/colors.go` & `errors/errors.go` files (@marbar3778) + - [libs] \#2432 Remove unused `common/heap.go` file (@marbar3778) -* Blockchain Protocol +- Blockchain Protocol -* P2P Protocol +- P2P Protocol ### FEATURES: + - [node] Refactor `NewNode` to use functional options to make it more flexible and extensible in the future. -- [node] [\#3730](https://github.com/tendermint/tendermint/pull/3730) Add `CustomReactors` option to `NewNode` allowing caller to pass +- [node][\#3730](https://github.com/tendermint/tendermint/pull/3730) Add `CustomReactors` option to `NewNode` allowing caller to pass custom reactors to run inside Tendermint node (@ParthDesai) ### IMPROVEMENTS: - - [rpc] \#3700 Make possible to set absolute paths for TLS cert and key (@climber73) + +- [rpc] \#3700 Make possible to set absolute paths for TLS cert and key (@climber73) ### BUG FIXES: + - [p2p] \#3338 Prevent "sent next PEX request too soon" errors by not calling ensurePeers outside of ensurePeersRoutine - [behaviour] Return correct reason in MessageOutOfOrder (@jim380) - diff --git a/libs/common/heap.go b/libs/common/heap.go deleted file mode 100644 index b3bcb9db..00000000 --- a/libs/common/heap.go +++ /dev/null @@ -1,125 +0,0 @@ -package common - -import ( - "bytes" - "container/heap" -) - -/* - Example usage: - - ``` - h := NewHeap() - - h.Push("msg1", 1) - h.Push("msg3", 3) - h.Push("msg2", 2) - - fmt.Println(h.Pop()) // msg1 - fmt.Println(h.Pop()) // msg2 - fmt.Println(h.Pop()) // msg3 - ``` -*/ -type Heap struct { - pq priorityQueue -} - -func NewHeap() *Heap { - return &Heap{pq: make([]*pqItem, 0)} -} - -func (h *Heap) Len() int64 { - return int64(len(h.pq)) -} - -func (h *Heap) Push(value interface{}, priority int) { - heap.Push(&h.pq, &pqItem{value: value, priority: cmpInt(priority)}) -} - -func (h *Heap) PushBytes(value interface{}, priority []byte) { - heap.Push(&h.pq, &pqItem{value: value, priority: cmpBytes(priority)}) -} - -func (h *Heap) PushComparable(value interface{}, priority Comparable) { - heap.Push(&h.pq, &pqItem{value: value, priority: priority}) -} - -func (h *Heap) Peek() interface{} { - if len(h.pq) == 0 { - return nil - } - return h.pq[0].value -} - -func (h *Heap) Update(value interface{}, priority Comparable) { - h.pq.Update(h.pq[0], value, priority) -} - -func (h *Heap) Pop() interface{} { - item := heap.Pop(&h.pq).(*pqItem) - return item.value -} - -//----------------------------------------------------------------------------- -// From: http://golang.org/pkg/container/heap/#example__priorityQueue - -type pqItem struct { - value interface{} - priority Comparable - index int -} - -type priorityQueue []*pqItem - -func (pq priorityQueue) Len() int { return len(pq) } - -func (pq priorityQueue) Less(i, j int) bool { - return pq[i].priority.Less(pq[j].priority) -} - -func (pq priorityQueue) Swap(i, j int) { - pq[i], pq[j] = pq[j], pq[i] - pq[i].index = i - pq[j].index = j -} - -func (pq *priorityQueue) Push(x interface{}) { - n := len(*pq) - item := x.(*pqItem) - item.index = n - *pq = append(*pq, item) -} - -func (pq *priorityQueue) Pop() interface{} { - old := *pq - n := len(old) - item := old[n-1] - item.index = -1 // for safety - *pq = old[0 : n-1] - return item -} - -func (pq *priorityQueue) Update(item *pqItem, value interface{}, priority Comparable) { - item.value = value - item.priority = priority - heap.Fix(pq, item.index) -} - -//-------------------------------------------------------------------------------- -// Comparable - -type Comparable interface { - Less(o interface{}) bool -} - -type cmpInt int - -func (i cmpInt) Less(o interface{}) bool { - return int(i) < int(o.(cmpInt)) -} - -type cmpBytes []byte - -func (bz cmpBytes) Less(o interface{}) bool { - return bytes.Compare([]byte(bz), []byte(o.(cmpBytes))) < 0 -} From d70871f41b8b4279b4a18505e3b2d49c3962be3e Mon Sep 17 00:00:00 2001 From: Ashley Vega <48948661+ashleyvega@users.noreply.github.com> Date: Wed, 10 Jul 2019 10:27:17 +0100 Subject: [PATCH 5/7] testnet: add consensus_params to testnet config generation (#3781) Also, document time_iota_ms. Closes #3723 Commits: * config: Add ConsensusParams when generating testnet config (#3723) * docs: Add explanation of time_iota_ms (#3723) * Update changelog_pending (#3723) --- CHANGELOG_PENDING.md | 1 + cmd/tendermint/commands/testnet.go | 7 ++++--- docs/tendermint-core/using-tendermint.md | 10 ++++++++-- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/CHANGELOG_PENDING.md b/CHANGELOG_PENDING.md index cda247cb..01b1bfab 100644 --- a/CHANGELOG_PENDING.md +++ b/CHANGELOG_PENDING.md @@ -43,3 +43,4 @@ program](https://hackerone.com/tendermint). - [p2p] \#3338 Prevent "sent next PEX request too soon" errors by not calling ensurePeers outside of ensurePeersRoutine - [behaviour] Return correct reason in MessageOutOfOrder (@jim380) +- [config] \#3723 Add consensus_params to testnet config generation; document time_iota_ms (@ashleyvega) diff --git a/cmd/tendermint/commands/testnet.go b/cmd/tendermint/commands/testnet.go index f1dd6f16..5e2dc1a3 100644 --- a/cmd/tendermint/commands/testnet.go +++ b/cmd/tendermint/commands/testnet.go @@ -161,9 +161,10 @@ func testnetFiles(cmd *cobra.Command, args []string) error { // Generate genesis doc from generated validators genDoc := &types.GenesisDoc{ - GenesisTime: tmtime.Now(), - ChainID: "chain-" + cmn.RandStr(6), - Validators: genVals, + ChainID: "chain-" + cmn.RandStr(6), + ConsensusParams: types.DefaultConsensusParams(), + GenesisTime: tmtime.Now(), + Validators: genVals, } // Write genesis file. diff --git a/docs/tendermint-core/using-tendermint.md b/docs/tendermint-core/using-tendermint.md index 05d481b2..8c2fa1e0 100644 --- a/docs/tendermint-core/using-tendermint.md +++ b/docs/tendermint-core/using-tendermint.md @@ -43,6 +43,11 @@ definition](https://github.com/tendermint/tendermint/blob/master/types/genesis.g - `chain_id`: ID of the blockchain. This must be unique for every blockchain. If your testnet blockchains do not have unique chain IDs, you will have a bad time. The ChainID must be less than 50 symbols. +- `consensus_params` + - `block` + - `time_iota_ms`: Minimum time increment between consecutive blocks (in + milliseconds). If the block header timestamp is ahead of the system clock, + decrease this value. - `validators`: List of initial validators. Note this may be overridden entirely by the application, and may be left empty to make explicit that the application will initialize the validator set with ResponseInitChain. @@ -63,9 +68,10 @@ definition](https://github.com/tendermint/tendermint/blob/master/types/genesis.g "genesis_time": "2018-11-13T18:11:50.277637Z", "chain_id": "test-chain-s4ui7D", "consensus_params": { - "block_size": { + "block": { "max_bytes": "22020096", - "max_gas": "-1" + "max_gas": "-1", + "time_iota_ms": "1000" }, "evidence": { "max_age": "100000" From f05c2a95586cdad1940e3ee2869b213a4bdd3bde Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Wed, 10 Jul 2019 13:36:48 +0400 Subject: [PATCH 6/7] p2p: extract ID validation into a separate func (#3754) * p2p: extract ID validation into a separate func - NewNetAddress panics if ID is invalid - NetAddress#Valid returns an error - remove ErrAddrBookInvalidAddrNoID Fixes #2722 * p2p: remove repetitive check in ReceiveAddrs * fix netaddress test --- p2p/netaddress.go | 58 +++++++++++++++++++++++++++--------------- p2p/netaddress_test.go | 15 ++++++++--- p2p/pex/addrbook.go | 8 ++---- p2p/pex/errors.go | 13 +++------- p2p/pex/pex_reactor.go | 16 +----------- 5 files changed, 56 insertions(+), 54 deletions(-) diff --git a/p2p/netaddress.go b/p2p/netaddress.go index d1150452..f39a6054 100644 --- a/p2p/netaddress.go +++ b/p2p/netaddress.go @@ -13,7 +13,7 @@ import ( "strings" "time" - "errors" + "github.com/pkg/errors" ) // NetAddress defines information about a peer on the network @@ -40,7 +40,7 @@ func IDAddressString(id ID, protocolHostPort string) string { // NewNetAddress returns a new NetAddress using the provided TCP // address. When testing, other net.Addr (except TCP) will result in // using 0.0.0.0:0. When normal run, other net.Addr (except TCP) will -// panic. +// panic. Panics if ID is invalid. // TODO: socks proxies? func NewNetAddress(id ID, addr net.Addr) *NetAddress { tcpAddr, ok := addr.(*net.TCPAddr) @@ -53,6 +53,11 @@ func NewNetAddress(id ID, addr net.Addr) *NetAddress { return netAddr } } + + if err := validateID(id); err != nil { + panic(fmt.Sprintf("Invalid ID %v: %v (addr: %v)", id, err, addr)) + } + ip := tcpAddr.IP port := uint16(tcpAddr.Port) na := NewNetAddressIPPort(ip, port) @@ -72,18 +77,11 @@ func NewNetAddressString(addr string) (*NetAddress, error) { } // get ID - idStr := spl[0] - idBytes, err := hex.DecodeString(idStr) - if err != nil { + if err := validateID(ID(spl[0])); err != nil { return nil, ErrNetAddressInvalid{addrWithoutProtocol, err} } - if len(idBytes) != IDByteLength { - return nil, ErrNetAddressInvalid{ - addrWithoutProtocol, - fmt.Errorf("invalid hex length - got %d, expected %d", len(idBytes), IDByteLength)} - } var id ID - id, addrWithoutProtocol = ID(idStr), spl[1] + id, addrWithoutProtocol = ID(spl[0]), spl[1] // get host and port host, portStr, err := net.SplitHostPort(addrWithoutProtocol) @@ -207,22 +205,28 @@ func (na *NetAddress) DialTimeout(timeout time.Duration) (net.Conn, error) { // Routable returns true if the address is routable. func (na *NetAddress) Routable() bool { + if err := na.Valid(); err != nil { + return false + } // TODO(oga) bitcoind doesn't include RFC3849 here, but should we? - return na.Valid() && !(na.RFC1918() || na.RFC3927() || na.RFC4862() || + return !(na.RFC1918() || na.RFC3927() || na.RFC4862() || na.RFC4193() || na.RFC4843() || na.Local()) } // For IPv4 these are either a 0 or all bits set address. For IPv6 a zero // address or one that matches the RFC3849 documentation address format. -func (na *NetAddress) Valid() bool { - if string(na.ID) != "" { - data, err := hex.DecodeString(string(na.ID)) - if err != nil || len(data) != IDByteLength { - return false - } +func (na *NetAddress) Valid() error { + if err := validateID(na.ID); err != nil { + return errors.Wrap(err, "invalid ID") } - return na.IP != nil && !(na.IP.IsUnspecified() || na.RFC3849() || - na.IP.Equal(net.IPv4bcast)) + + if na.IP == nil { + return errors.New("no IP") + } + if na.IP.IsUnspecified() || na.RFC3849() || na.IP.Equal(net.IPv4bcast) { + return errors.New("invalid IP") + } + return nil } // HasID returns true if the address has an ID. @@ -329,3 +333,17 @@ func removeProtocolIfDefined(addr string) string { return addr } + +func validateID(id ID) error { + if len(id) == 0 { + return errors.New("no ID") + } + idBytes, err := hex.DecodeString(string(id)) + if err != nil { + return err + } + if len(idBytes) != IDByteLength { + return fmt.Errorf("invalid hex length - got %d, expected %d", len(idBytes), IDByteLength) + } + return nil +} diff --git a/p2p/netaddress_test.go b/p2p/netaddress_test.go index 7afcab13..e7d82cd7 100644 --- a/p2p/netaddress_test.go +++ b/p2p/netaddress_test.go @@ -11,9 +11,13 @@ import ( func TestNewNetAddress(t *testing.T) { tcpAddr, err := net.ResolveTCPAddr("tcp", "127.0.0.1:8080") require.Nil(t, err) - addr := NewNetAddress("", tcpAddr) - assert.Equal(t, "127.0.0.1:8080", addr.String()) + assert.Panics(t, func() { + NewNetAddress("", tcpAddr) + }) + + addr := NewNetAddress("deadbeefdeadbeefdeadbeefdeadbeefdeadbeef", tcpAddr) + assert.Equal(t, "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef@127.0.0.1:8080", addr.String()) assert.NotPanics(t, func() { NewNetAddress("", &net.UDPAddr{IP: net.ParseIP("127.0.0.1"), Port: 8000}) @@ -106,7 +110,12 @@ func TestNetAddressProperties(t *testing.T) { addr, err := NewNetAddressString(tc.addr) require.Nil(t, err) - assert.Equal(t, tc.valid, addr.Valid()) + err = addr.Valid() + if tc.valid { + assert.NoError(t, err) + } else { + assert.Error(t, err) + } assert.Equal(t, tc.local, addr.Local()) assert.Equal(t, tc.routable, addr.Routable()) } diff --git a/p2p/pex/addrbook.go b/p2p/pex/addrbook.go index 85dd0524..cfe2569b 100644 --- a/p2p/pex/addrbook.go +++ b/p2p/pex/addrbook.go @@ -586,8 +586,8 @@ func (a *addrBook) addAddress(addr, src *p2p.NetAddress) error { return ErrAddrBookNilAddr{addr, src} } - if !addr.HasID() { - return ErrAddrBookInvalidAddrNoID{addr} + if err := addr.Valid(); err != nil { + return ErrAddrBookInvalidAddr{Addr: addr, AddrErr: err} } if _, ok := a.privateIDs[addr.ID]; ok { @@ -607,10 +607,6 @@ func (a *addrBook) addAddress(addr, src *p2p.NetAddress) error { return ErrAddrBookNonRoutable{addr} } - if !addr.Valid() { - return ErrAddrBookInvalidAddr{addr} - } - ka := a.addrLookup[addr.ID] if ka != nil { // If its already old and the addr is the same, ignore it. diff --git a/p2p/pex/errors.go b/p2p/pex/errors.go index 543056af..911389a9 100644 --- a/p2p/pex/errors.go +++ b/p2p/pex/errors.go @@ -56,17 +56,10 @@ func (err ErrAddrBookNilAddr) Error() string { } type ErrAddrBookInvalidAddr struct { - Addr *p2p.NetAddress + Addr *p2p.NetAddress + AddrErr error } func (err ErrAddrBookInvalidAddr) Error() string { - return fmt.Sprintf("Cannot add invalid address %v", err.Addr) -} - -type ErrAddrBookInvalidAddrNoID struct { - Addr *p2p.NetAddress -} - -func (err ErrAddrBookInvalidAddrNoID) Error() string { - return fmt.Sprintf("Cannot add address with no ID %v", err.Addr) + return fmt.Sprintf("Cannot add invalid address %v: %v", err.Addr, err.AddrErr) } diff --git a/p2p/pex/pex_reactor.go b/p2p/pex/pex_reactor.go index 20862d32..557e7ca7 100644 --- a/p2p/pex/pex_reactor.go +++ b/p2p/pex/pex_reactor.go @@ -350,22 +350,8 @@ func (r *PEXReactor) ReceiveAddrs(addrs []*p2p.NetAddress, src Peer) error { } for _, netAddr := range addrs { - // Validate netAddr. Disconnect from a peer if it sends us invalid data. - if netAddr == nil { - return errors.New("nil address in pexAddrsMessage") - } - // TODO: extract validating logic from NewNetAddressString - // and put it in netAddr#Valid (#2722) - na, err := p2p.NewNetAddressString(netAddr.String()) - if err != nil { - return fmt.Errorf("%s address in pexAddrsMessage is invalid: %v", - netAddr.String(), - err, - ) - } - // NOTE: we check netAddr validity and routability in book#AddAddress. - err = r.book.AddAddress(na, srcAddr) + err = r.book.AddAddress(netAddr, srcAddr) if err != nil { r.logErrAddrBook(err) // XXX: should we be strict about incoming data and disconnect from a From e9c9c558d7a347b37c9ac6ca770107f84ad24696 Mon Sep 17 00:00:00 2001 From: Marko Date: Wed, 10 Jul 2019 16:40:21 +0200 Subject: [PATCH 7/7] libs/common: remove unused functions (#3784) - The removed functions are not used in Iavl, Cosmos-sdk and tendermint repos - Code-hygenie `whoop whoop` Signed-off-by: Marko Baricevic --- CHANGELOG_PENDING.md | 1 + libs/common/date.go | 43 ----------------------- libs/common/date_test.go | 46 ------------------------- libs/common/io.go | 74 ---------------------------------------- libs/common/os.go | 61 --------------------------------- libs/common/os_test.go | 46 ------------------------- 6 files changed, 1 insertion(+), 270 deletions(-) delete mode 100644 libs/common/date.go delete mode 100644 libs/common/date_test.go delete mode 100644 libs/common/io.go delete mode 100644 libs/common/os_test.go diff --git a/CHANGELOG_PENDING.md b/CHANGELOG_PENDING.md index 01b1bfab..d387f9ec 100644 --- a/CHANGELOG_PENDING.md +++ b/CHANGELOG_PENDING.md @@ -22,6 +22,7 @@ program](https://hackerone.com/tendermint). not. - [libs] Remove unused `db/debugDB` and `common/colors.go` & `errors/errors.go` files (@marbar3778) - [libs] \#2432 Remove unused `common/heap.go` file (@marbar3778) + - [libs] Remove unused `date.go`, `io.go`. Remove `GoPath()`, `Prompt()` and `IsDirEmpty()` functions from `os.go` (@marbar3778) - Blockchain Protocol diff --git a/libs/common/date.go b/libs/common/date.go deleted file mode 100644 index e017a4b4..00000000 --- a/libs/common/date.go +++ /dev/null @@ -1,43 +0,0 @@ -package common - -import ( - "strings" - "time" - - "github.com/pkg/errors" -) - -// TimeLayout helps to parse a date string of the format YYYY-MM-DD -// Intended to be used with the following function: -// time.Parse(TimeLayout, date) -var TimeLayout = "2006-01-02" //this represents YYYY-MM-DD - -// ParseDateRange parses a date range string of the format start:end -// where the start and end date are of the format YYYY-MM-DD. -// The parsed dates are time.Time and will return the zero time for -// unbounded dates, ex: -// unbounded start: :2000-12-31 -// unbounded end: 2000-12-31: -func ParseDateRange(dateRange string) (startDate, endDate time.Time, err error) { - dates := strings.Split(dateRange, ":") - if len(dates) != 2 { - err = errors.New("bad date range, must be in format date:date") - return - } - parseDate := func(date string) (out time.Time, err error) { - if len(date) == 0 { - return - } - out, err = time.Parse(TimeLayout, date) - return - } - startDate, err = parseDate(dates[0]) - if err != nil { - return - } - endDate, err = parseDate(dates[1]) - if err != nil { - return - } - return -} diff --git a/libs/common/date_test.go b/libs/common/date_test.go deleted file mode 100644 index 2c063247..00000000 --- a/libs/common/date_test.go +++ /dev/null @@ -1,46 +0,0 @@ -package common - -import ( - "testing" - "time" - - "github.com/stretchr/testify/assert" -) - -var ( - date = time.Date(2015, time.Month(12), 31, 0, 0, 0, 0, time.UTC) - date2 = time.Date(2016, time.Month(12), 31, 0, 0, 0, 0, time.UTC) - zero time.Time -) - -func TestParseDateRange(t *testing.T) { - assert := assert.New(t) - - var testDates = []struct { - dateStr string - start time.Time - end time.Time - errNil bool - }{ - {"2015-12-31:2016-12-31", date, date2, true}, - {"2015-12-31:", date, zero, true}, - {":2016-12-31", zero, date2, true}, - {"2016-12-31", zero, zero, false}, - {"2016-31-12:", zero, zero, false}, - {":2016-31-12", zero, zero, false}, - } - - for _, test := range testDates { - start, end, err := ParseDateRange(test.dateStr) - if test.errNil { - assert.Nil(err) - testPtr := func(want, have time.Time) { - assert.True(have.Equal(want)) - } - testPtr(test.start, start) - testPtr(test.end, end) - } else { - assert.NotNil(err) - } - } -} diff --git a/libs/common/io.go b/libs/common/io.go deleted file mode 100644 index fa0443e0..00000000 --- a/libs/common/io.go +++ /dev/null @@ -1,74 +0,0 @@ -package common - -import ( - "bytes" - "errors" - "io" -) - -type PrefixedReader struct { - Prefix []byte - reader io.Reader -} - -func NewPrefixedReader(prefix []byte, reader io.Reader) *PrefixedReader { - return &PrefixedReader{prefix, reader} -} - -func (pr *PrefixedReader) Read(p []byte) (n int, err error) { - if len(pr.Prefix) > 0 { - read := copy(p, pr.Prefix) - pr.Prefix = pr.Prefix[read:] - return read, nil - } - return pr.reader.Read(p) -} - -// NOTE: Not goroutine safe -type BufferCloser struct { - bytes.Buffer - Closed bool -} - -func NewBufferCloser(buf []byte) *BufferCloser { - return &BufferCloser{ - *bytes.NewBuffer(buf), - false, - } -} - -func (bc *BufferCloser) Close() error { - if bc.Closed { - return errors.New("BufferCloser already closed") - } - bc.Closed = true - return nil -} - -func (bc *BufferCloser) Write(p []byte) (n int, err error) { - if bc.Closed { - return 0, errors.New("Cannot write to closed BufferCloser") - } - return bc.Buffer.Write(p) -} - -func (bc *BufferCloser) WriteByte(c byte) error { - if bc.Closed { - return errors.New("Cannot write to closed BufferCloser") - } - return bc.Buffer.WriteByte(c) -} - -func (bc *BufferCloser) WriteRune(r rune) (n int, err error) { - if bc.Closed { - return 0, errors.New("Cannot write to closed BufferCloser") - } - return bc.Buffer.WriteRune(r) -} - -func (bc *BufferCloser) WriteString(s string) (n int, err error) { - if bc.Closed { - return 0, errors.New("Cannot write to closed BufferCloser") - } - return bc.Buffer.WriteString(s) -} diff --git a/libs/common/os.go b/libs/common/os.go index 7c3fad7e..0e35524c 100644 --- a/libs/common/os.go +++ b/libs/common/os.go @@ -1,39 +1,13 @@ package common import ( - "bufio" "fmt" - "io" "io/ioutil" "os" - "os/exec" "os/signal" - "strings" "syscall" ) -var gopath string - -// GoPath returns GOPATH env variable value. If it is not set, this function -// will try to call `go env GOPATH` subcommand. -func GoPath() string { - if gopath != "" { - return gopath - } - - path := os.Getenv("GOPATH") - if len(path) == 0 { - goCmd := exec.Command("go", "env", "GOPATH") - out, err := goCmd.Output() - if err != nil { - panic(fmt.Sprintf("failed to determine gopath: %v", err)) - } - path = string(out) - } - gopath = path - return path -} - type logger interface { Info(msg string, keyvals ...interface{}) } @@ -78,25 +52,6 @@ func EnsureDir(dir string, mode os.FileMode) error { return nil } -func IsDirEmpty(name string) (bool, error) { - f, err := os.Open(name) - if err != nil { - if os.IsNotExist(err) { - return true, err - } - // Otherwise perhaps a permission - // error or some other error. - return false, err - } - defer f.Close() - - _, err = f.Readdirnames(1) // Or f.Readdir(1) - if err == io.EOF { - return true, nil - } - return false, err // Either not empty or error, suits both cases -} - func FileExists(filePath string) bool { _, err := os.Stat(filePath) return !os.IsNotExist(err) @@ -125,19 +80,3 @@ func MustWriteFile(filePath string, contents []byte, mode os.FileMode) { Exit(fmt.Sprintf("MustWriteFile failed: %v", err)) } } - -//-------------------------------------------------------------------------------- - -func Prompt(prompt string, defaultValue string) (string, error) { - fmt.Print(prompt) - reader := bufio.NewReader(os.Stdin) - line, err := reader.ReadString('\n') - if err != nil { - return defaultValue, err - } - line = strings.TrimSpace(line) - if line == "" { - return defaultValue, nil - } - return line, nil -} diff --git a/libs/common/os_test.go b/libs/common/os_test.go deleted file mode 100644 index e8a23ebd..00000000 --- a/libs/common/os_test.go +++ /dev/null @@ -1,46 +0,0 @@ -package common - -import ( - "os" - "testing" -) - -func TestOSGoPath(t *testing.T) { - // restore original gopath upon exit - path := os.Getenv("GOPATH") - defer func() { - _ = os.Setenv("GOPATH", path) - }() - - err := os.Setenv("GOPATH", "~/testgopath") - if err != nil { - t.Fatal(err) - } - path = GoPath() - if path != "~/testgopath" { - t.Fatalf("should get GOPATH env var value, got %v", path) - } - os.Unsetenv("GOPATH") - - path = GoPath() - if path != "~/testgopath" { - t.Fatalf("subsequent calls should return the same value, got %v", path) - } -} - -func TestOSGoPathWithoutEnvVar(t *testing.T) { - // restore original gopath upon exit - path := os.Getenv("GOPATH") - defer func() { - _ = os.Setenv("GOPATH", path) - }() - - os.Unsetenv("GOPATH") - // reset cache - gopath = "" - - path = GoPath() - if path == "" || path == "~/testgopath" { - t.Fatalf("should get nonempty result of calling go env GOPATH, got %v", path) - } -}