From 01a2f178be45c057eb0ee9ca3b04a15343a8c4a9 Mon Sep 17 00:00:00 2001 From: msherif1234 Date: Wed, 19 Jul 2023 21:53:55 -0400 Subject: [PATCH] NETOBSERV-588 Add IPv4/6 DSCP field to the exported flow Signed-off-by: msherif1234 --- bpf/flows.c | 5 +- bpf/types.h | 4 + bpf/utils.h | 12 +- .../server/flowlogs-dump-collector.go | 6 +- go.mod | 2 +- pkg/decode/decode_protobuf.go | 1 + pkg/decode/decode_protobuf_test.go | 12 ++ pkg/ebpf/bpf_bpfeb.go | 1 + pkg/ebpf/bpf_bpfeb.o | Bin 99424 -> 100120 bytes pkg/ebpf/bpf_bpfel.go | 1 + pkg/ebpf/bpf_bpfel.o | Bin 100704 -> 102256 bytes pkg/exporter/proto.go | 2 + pkg/flow/record.go | 4 + pkg/flow/record_test.go | 2 + pkg/pbflow/flow.pb.go | 121 ++++++++++-------- pkg/pbflow/flow_grpc.pb.go | 2 +- proto/flow.proto | 1 + 17 files changed, 112 insertions(+), 64 deletions(-) diff --git a/bpf/flows.c b/bpf/flows.c index 995c4e3c4..e51e60a8a 100644 --- a/bpf/flows.c +++ b/bpf/flows.c @@ -86,7 +86,7 @@ static inline int flow_monitor(struct __sk_buff *skb, u8 direction) { aggregate_flow->start_mono_time_ts = pkt.current_ts; } aggregate_flow->flags |= pkt.flags; - + aggregate_flow->dscp = pkt.dscp; // Does not matter the gate. Will be zero if not enabled. if (pkt.rtt > aggregate_flow->flow_rtt) { aggregate_flow->flow_rtt = pkt.rtt; @@ -109,7 +109,8 @@ static inline int flow_monitor(struct __sk_buff *skb, u8 direction) { .start_mono_time_ts = pkt.current_ts, .end_mono_time_ts = pkt.current_ts, .flags = pkt.flags, - .flow_rtt = pkt.rtt + .flow_rtt = pkt.rtt, + .dscp = pkt.dscp, }; // even if we know that the entry is new, another CPU might be concurrently inserting a flow diff --git a/bpf/types.h b/bpf/types.h index d132a34c4..6084b1490 100644 --- a/bpf/types.h +++ b/bpf/types.h @@ -51,6 +51,8 @@ typedef __u64 u64; #define ETH_P_IPV6 0x86DD #define ETH_P_ARP 0x0806 #define IPPROTO_ICMPV6 58 +#define DSCP_SHIFT 2 +#define DSCP_MASK 0x3F // according to field 61 in https://www.iana.org/assignments/ipfix/ipfix.xhtml typedef enum { @@ -75,6 +77,7 @@ typedef struct flow_metrics_t { // 0 otherwise // https://chromium.googlesource.com/chromiumos/docs/+/master/constants/errnos.md u8 errno; + u8 dscp; struct pkt_drops_t { u32 packets; u64 bytes; @@ -155,6 +158,7 @@ typedef struct pkt_info_t { u16 flags; // TCP specific void *l4_hdr; // Stores the actual l4 header u64 rtt; // rtt calculated from the flow if possible. else zero + u8 dscp; // IPv4/6 DSCP value } pkt_info; // Structure for payload metadata diff --git a/bpf/utils.h b/bpf/utils.h index f0932e131..105ca00cf 100644 --- a/bpf/utils.h +++ b/bpf/utils.h @@ -86,6 +86,14 @@ static inline void fill_l4info(void *l4_hdr_start, void *data_end, u8 protocol, } } +static inline u8 ipv4_get_dscp(const struct iphdr *iph) { + return (iph->tos >> DSCP_SHIFT) & DSCP_MASK; +} + +static inline u8 ipv6_get_dscp(const struct ipv6hdr *ipv6h) { + return ((bpf_ntohs(*(const __be16 *)ipv6h) >> 4) >> DSCP_SHIFT) & DSCP_MASK; +} + // sets flow fields from IPv4 header information static inline int fill_iphdr(struct iphdr *ip, void *data_end, pkt_info *pkt) { void *l4_hdr_start; @@ -100,7 +108,7 @@ static inline int fill_iphdr(struct iphdr *ip, void *data_end, pkt_info *pkt) { __builtin_memcpy(id->dst_ip, ip4in6, sizeof(ip4in6)); __builtin_memcpy(id->src_ip + sizeof(ip4in6), &ip->saddr, sizeof(ip->saddr)); __builtin_memcpy(id->dst_ip + sizeof(ip4in6), &ip->daddr, sizeof(ip->daddr)); - + pkt->dscp = ipv4_get_dscp(ip); /* fill l4 header which will be added to id in flow_monitor function.*/ fill_l4info(l4_hdr_start, data_end, ip->protocol, pkt); return SUBMIT; @@ -118,7 +126,7 @@ static inline int fill_ip6hdr(struct ipv6hdr *ip, void *data_end, pkt_info *pkt) /* Save the IP Address to id directly. copy once. */ __builtin_memcpy(id->src_ip, ip->saddr.in6_u.u6_addr8, IP_MAX_LEN); __builtin_memcpy(id->dst_ip, ip->daddr.in6_u.u6_addr8, IP_MAX_LEN); - + pkt->dscp = ipv6_get_dscp(ip); /* fill l4 header which will be added to id in flow_monitor function.*/ fill_l4info(l4_hdr_start, data_end, ip->nexthdr, pkt); return SUBMIT; diff --git a/examples/flowlogs-dump/server/flowlogs-dump-collector.go b/examples/flowlogs-dump/server/flowlogs-dump-collector.go index 8eb925d34..d3a5d0a74 100644 --- a/examples/flowlogs-dump/server/flowlogs-dump-collector.go +++ b/examples/flowlogs-dump/server/flowlogs-dump-collector.go @@ -72,7 +72,7 @@ func main() { for records := range receivedRecords { for _, record := range records.Entries { if record.EthProtocol == ipv6 { - log.Printf("%s: %v %s IP %s:%d > %s:%d: protocol:%s type: %d code: %d dir:%d bytes:%d packets:%d flags:%d ends: %v dnsId: %d dnsFlags: 0x%04x dnsLatency(ms): %v rtt(ns) %v DropPkts: %d DropBytes: %d DropCause %d\n", + log.Printf("%s: %v %s IP %s:%d > %s:%d: dscp: 0x%x protocol:%s type: %d code: %d dir:%d bytes:%d packets:%d flags:%d ends: %v dnsId: %d dnsFlags: 0x%04x dnsLatency(ms): %v rtt(ns) %v DropPkts: %d DropBytes: %d DropCause %d\n", ipProto[record.EthProtocol], record.TimeFlowStart.AsTime().Local().Format("15:04:05.000000"), record.Interface, @@ -80,6 +80,7 @@ func main() { record.Transport.SrcPort, net.IP(record.Network.GetDstAddr().GetIpv6()).To16(), record.Transport.DstPort, + record.Network.GetDscp(), protocolByNumber[record.Transport.Protocol], record.IcmpType, record.IcmpCode, @@ -97,7 +98,7 @@ func main() { record.GetPktDropLatestDropCause(), ) } else { - log.Printf("%s: %v %s IP %s:%d > %s:%d: protocol:%s type: %d code: %d dir:%d bytes:%d packets:%d flags:%d ends: %v dnsId: %d dnsFlags: 0x%04x dnsLatency(ms): %v rtt(ns) %v DropPkts: %d DropBytes: %d DropCause %d\n", + log.Printf("%s: %v %s IP %s:%d > %s:%d: dscp: 0x%x protocol:%s type: %d code: %d dir:%d bytes:%d packets:%d flags:%d ends: %v dnsId: %d dnsFlags: 0x%04x dnsLatency(ms): %v rtt(ns) %v DropPkts: %d DropBytes: %d DropCause %d\n", ipProto[record.EthProtocol], record.TimeFlowStart.AsTime().Local().Format("15:04:05.000000"), record.Interface, @@ -105,6 +106,7 @@ func main() { record.Transport.SrcPort, ipIntToNetIP(record.Network.GetDstAddr().GetIpv4()).String(), record.Transport.DstPort, + record.Network.GetDscp(), protocolByNumber[record.Transport.Protocol], record.IcmpType, record.IcmpCode, diff --git a/go.mod b/go.mod index 97019565b..fa696097f 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,6 @@ require ( github.com/cilium/ebpf v0.11.0 github.com/fsnotify/fsnotify v1.5.1 github.com/gavv/monotime v0.0.0-20190418164738-30dba4353424 - github.com/golang/protobuf v1.5.3 github.com/google/gopacket v1.1.19 github.com/mariomac/guara v0.0.0-20220523124851-5fc279816f1f github.com/mdlayher/ethernet v0.0.0-20220221185849-529eae5b6118 @@ -41,6 +40,7 @@ require ( github.com/go-openapi/jsonreference v0.20.2 // indirect github.com/go-openapi/swag v0.22.3 // indirect github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/protobuf v1.5.3 // indirect github.com/google/gnostic-models v0.6.8 // indirect github.com/google/go-cmp v0.5.9 // indirect github.com/google/gofuzz v1.2.0 // indirect diff --git a/pkg/decode/decode_protobuf.go b/pkg/decode/decode_protobuf.go index 633b281a4..e91797914 100644 --- a/pkg/decode/decode_protobuf.go +++ b/pkg/decode/decode_protobuf.go @@ -71,6 +71,7 @@ func PBFlowToMap(flow *pbflow.Record) config.GenericMap { out["SrcAddr"] = ipToStr(flow.Network.GetSrcAddr()) out["DstAddr"] = ipToStr(flow.Network.GetDstAddr()) out["Proto"] = flow.Transport.GetProtocol() + out["Dscp"] = flow.Network.GetDscp() proto := flow.Transport.GetProtocol() if proto == syscall.IPPROTO_ICMP || proto == syscall.IPPROTO_ICMPV6 { out["IcmpType"] = flow.GetIcmpType() diff --git a/pkg/decode/decode_protobuf_test.go b/pkg/decode/decode_protobuf_test.go index a7d5617d1..717faae54 100644 --- a/pkg/decode/decode_protobuf_test.go +++ b/pkg/decode/decode_protobuf_test.go @@ -41,6 +41,7 @@ func TestDecodeProtobuf(t *testing.T) { DstAddr: &pbflow.IP{ IpFamily: &pbflow.IP_Ipv4{Ipv4: 0x05060708}, }, + Dscp: 64, }, DataLink: &pbflow.DataLink{ DstMac: 0x112233445566, @@ -61,6 +62,7 @@ func TestDecodeProtobuf(t *testing.T) { "Bytes": uint64(456), "SrcAddr": "1.2.3.4", "DstAddr": "5.6.7.8", + "Dscp": uint32(64), "DstMac": "11:22:33:44:55:66", "SrcMac": "01:02:03:04:05:06", "Duplicate": false, @@ -93,6 +95,7 @@ func TestDecodeProtobuf(t *testing.T) { DstAddr: &pbflow.IP{ IpFamily: &pbflow.IP_Ipv4{Ipv4: 0x05060708}, }, + Dscp: 64, }, DataLink: &pbflow.DataLink{ DstMac: 0x112233445566, @@ -112,6 +115,7 @@ func TestDecodeProtobuf(t *testing.T) { "Bytes": uint64(456), "SrcAddr": "1.2.3.4", "DstAddr": "5.6.7.8", + "Dscp": uint32(64), "DstMac": "11:22:33:44:55:66", "SrcMac": "01:02:03:04:05:06", "Duplicate": false, @@ -143,6 +147,7 @@ func TestDecodeProtobuf(t *testing.T) { DstAddr: &pbflow.IP{ IpFamily: &pbflow.IP_Ipv4{Ipv4: 0x05060708}, }, + Dscp: 64, }, DataLink: &pbflow.DataLink{ DstMac: 0x112233445566, @@ -162,6 +167,7 @@ func TestDecodeProtobuf(t *testing.T) { "Bytes": uint64(456), "SrcAddr": "1.2.3.4", "DstAddr": "5.6.7.8", + "Dscp": uint32(64), "DstMac": "11:22:33:44:55:66", "SrcMac": "01:02:03:04:05:06", "Duplicate": false, @@ -193,6 +199,7 @@ func TestDecodeProtobuf(t *testing.T) { DstAddr: &pbflow.IP{ IpFamily: &pbflow.IP_Ipv6{Ipv6: []byte{11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26}}, }, + Dscp: 64, }, DataLink: &pbflow.DataLink{ DstMac: 0x112233445566, @@ -212,6 +219,7 @@ func TestDecodeProtobuf(t *testing.T) { "Bytes": uint64(456), "SrcAddr": "102:304:506:708:90a:b0c:d0e:f10", "DstAddr": "b0c:d0e:f10:1112:1314:1516:1718:191a", + "Dscp": uint32(64), "DstMac": "11:22:33:44:55:66", "SrcMac": "01:02:03:04:05:06", "Duplicate": false, @@ -288,6 +296,7 @@ func TestDecodeProtobuf(t *testing.T) { DstAddr: &pbflow.IP{ IpFamily: &pbflow.IP_Ipv4{Ipv4: 0x05060708}, }, + Dscp: 64, }, DataLink: &pbflow.DataLink{ DstMac: 0x112233445566, @@ -317,6 +326,7 @@ func TestDecodeProtobuf(t *testing.T) { "Bytes": uint64(456), "SrcAddr": "1.2.3.4", "DstAddr": "5.6.7.8", + "Dscp": uint32(64), "DstMac": "11:22:33:44:55:66", "SrcMac": "01:02:03:04:05:06", "Duplicate": false, @@ -374,6 +384,7 @@ func TestPBFlowToMap(t *testing.T) { DstAddr: &pbflow.IP{ IpFamily: &pbflow.IP_Ipv4{Ipv4: 0x05060708}, }, + Dscp: 64, }, DataLink: &pbflow.DataLink{ DstMac: 0x112233445566, @@ -407,6 +418,7 @@ func TestPBFlowToMap(t *testing.T) { "Bytes": uint64(456), "SrcAddr": "1.2.3.4", "DstAddr": "5.6.7.8", + "Dscp": uint32(64), "DstMac": "11:22:33:44:55:66", "SrcMac": "01:02:03:04:05:06", "SrcPort": uint32(23000), diff --git a/pkg/ebpf/bpf_bpfeb.go b/pkg/ebpf/bpf_bpfeb.go index 4e46df3dc..e95e7b997 100644 --- a/pkg/ebpf/bpf_bpfeb.go +++ b/pkg/ebpf/bpf_bpfeb.go @@ -53,6 +53,7 @@ type BpfFlowMetricsT struct { EndMonoTimeTs uint64 Flags uint16 Errno uint8 + Dscp uint8 PktDrops BpfPktDropsT DnsRecord BpfDnsRecordT FlowRtt uint64 diff --git a/pkg/ebpf/bpf_bpfeb.o b/pkg/ebpf/bpf_bpfeb.o index 80b5ed119b3834d11b5f8ae15f7a3a490353f9f6..670b6687a16def2f11d22b583ded9e4e3b001cfb 100644 GIT binary patch literal 100120 zcmeFa3w&MIRp)=MhRd&OIly~4T|CNl*uPF3dzzrH6; zb|*_{dFHd*b$!qvSez>9YzR|^~1 z80dFxNHz<*xFwkmcmOyTICoD=vH>`yO7Au3U4)-JYxkt??De9OWX|dUou5pGB~DfT zmE>P5{u{_YwMPDB9mwncZ!Ss&mWjWVu*)fzHM zQht22*J&Ha&_|rE_w*j8%_5{9cDmr{?>2gs?p9v6pw~O4M!m6|F3F)stmlBytCA^# z)YD<~>fi^^olZwRtt)fwFgtdy3i0jm- z-ls>gaHjVt^}R&Y`ga0AX?bio;oZTQQNsbo{G?bqheV?!@ek1(% zich=WFL*roPZRXLqAAbpRFzNVeN^dHe3kbR@yY)~g1Pd3Q1rm{p?{rUhujOsUlhh~ z`LWR-6Wx_2KMH8PI88ncECA(yQ*h$vfi^w>YgWulepPgLlkU{}=&1FS$IS-l9~PhV z;D?Wns@x=(Zjt5eGI7Iv$hdpvte5wodHs~HQtxM#es-)sty%HGDZej%=1)aYNkjF# zHLxMfSJ=nw3_V+d(AF=|vz)g6fVO#?bn6G`8J=!_3O(Iv^H*q#f5@AELN|E2`6={N zr_EoX!?=4Q_$@R|G=0o}p~JX)V$}Q?y57^xpP_?2p9p@O&!PUuN6pWD zK5eRDm#ByNKjlU}ZCvE^u<-yL^|W!4)5CfOI_hcTX5coP0%d0#FQf-Op9td!I`)J4 zGqkNMkT?H@j{Ok)x6)7M=cLDeus8u7`^n-5bnFKkpK*PKogR`syRX+h8z)othVgf6 z92YU}3@q~gs*I0yWYhR40`ude4LXjGw=+JzPxRzu^d|)~KebUpe?J|@1JK3+&{BXl zZh&S7pxFl)#`n{sW)Em z7LRbc8)ZN2y$~=Lcr9=pQ2z7)={6&3-sW0~-LDh!M&lCsFPA*!X&kG3`BA?7#Y*?` zZ=?LHMANT-ljGk4KMnlgcP=l!l}|n9pE>>lm%lJq&NAdL5j{|es~>aP#t-FKOT8S) z&sF*xZ7*@TW*nwmiwC)Kjh;vk%K5nJWgYvR;Ms?DPm+@h!u;MoH>`8ZPmS&uKd#q2 z{x?GZxcFM<=C1*34gJwr|4H%VdXW15Q8er2R|Q$0z2fj?hvyu=(iY4`@M4vV9hTm`N!86@ULp<7>Dm5uyoEAPOq>A4F z|Chw4z7>K8Q{9t>fmO*$A+6>;q^~kRP7bz+OZxg`xscY?x|4oaVwxS?VWiTR32WVL zbOL>iu!BXT8wLu&-mQU7pcgCUpe0j&d$L4mtMw}7w+BBy*k%F^1NVjfQR^Y26X!R! zhV)oZW9ueQ4|+GYdK_(E8vMTF@zHaV=y+oEYX+Yjwf>;J8o&AWE)t!!cYSiDr5ANa z-@C$i%IXXJ#?}p%uJXSu47rO1GdrzH=810IrMubL##heH7m1(MTS(@M&g`^4v2odI zvoQJBhw+%%xjoElt(%pLd_@C|(e7SPW2;3i)6YCQ)31^J0i@(g9HZG^8VPDztnD1xXR7%ni{pj$Mqc4gP?GgR?@TW$9 zM|{T3TMVvB))-u$++=WWIA0(R{DWxL2^J5i_q#?vHv0F1RqM$YtK-Xq5@Oyy`|f~D zZ8Lqpan@#2#{00*U&g7vB8ii!?iNSR2wrKuhh0)pzqVt=!o>WLcr+r;8?3*+TCYmn z3vrnGt;b#NODbDes5e=7HuOu}$4-fHlDN7+oZvCLiM}`-eLu4{h}vOhsATv;K?u@YB%0>qGxij_DiyGLG-VPmFF?0p8vM z`RYWo&on)ppHQ!jSL&Uubm&wNdX^xx#TDq8PTRPEw)vQJ8#mC?J>A9ywAKU4Z{r4f zs?&=Fp&OiD;#Vpe=Gh+k64N#`9n6`E4E} zeYw-CJ>BLD1~ zUl4k|(>7k9i%#1*5BgT8L%*#Gah14c+z^L}gKrm~^sRzbai^&|zC0)) z?N^c{*f&kAT?bR+Hw-j}^Ws+PMf|(b&WV$QW;MofOJePAHLDXB0>81<SUa=w zS`xEEHtt)JqG}o_Cf44AMlmm#^>Xu%<;v)^)k?LvG@|@(TOa%~o}(X6#Z4N@b)h{~ z{6_eucNM=0zSUgCPvM&eRs3f7rb!jQ1%6QqlncRrzP?=xZS8!$eu;7XSt})}^M0zU z?!VWWA6}6Tx;!o}j^%oJQ&^u(QhFBOSGm96AI3pkKa}qeaTGfE`~4w~LI;1pKg3b! z;P3Z`I0_y7{r(U~p@YBQAL1x<@b~*e+=LF}{r(VFp~HB;Kg3PwFy8ME^B{B>@Arpx zK!@>ue>iu54&(j)Fi$|6hti&c+6^7X`~9Mf4)L`kYk!Ep9a;NBeC^2EAL4IE*8UJ* zJF@nN_}h`S-{M-iBWu6KJ!qRZ&?m&#j;#HQr5EW_T)(TGp6v8hPFp{cf05Jmp1#oO zI;T^oWBWt=?GV@6Z}B9zUThIRw_XhM#$923$2sqdN}q7uwkqte;<_)c2Z^&GzW%?o zp39zd6s28Kc>VEHu=U!-N#S>uVRBOVZNVD*xI4v1fAfnhuKl0Bj~noP+(Btif3+F- z-ahVo`#3qm|L68`jN^BxVJB1FZGJl=IDVg2*dzY;_G#bSr^ydkH`{zle7E@)+U8qm zn@^!_K83dV7TV_9I3GaYsB)mcw@(Z9{N6q-_`|={KJBde*Z;lyw5Ozh)qd&!Py4hF zsr_tfJ}Bt>xpDh67WczSuUdcdd?ERO_{0}Ghsdoz?VKXpSNpy!w~n`cTegnB%g?uW zs5JKR@qBx?(c{mz3x2*`^z?$CuLn}k5p3TU&!?enU*_vfJx8#8+dtzug2mhOJV&s7 zUaq~i56s%TKJ4cX2L1IMp;4;8f#(Q|B^UQMaetP3j$rdeuHLJy+||0%PX&Ko6UfT* z8fy*d)z53%{dvvikiqpm-*W_;k23uVVgHwVj$r#cU-qk?Qk5M0$@y>OIYQX)w3uFM zhs|#}``SJ@XJ6YVpU1xD^SS2;WA>HU&1ynli<@!Z826FUuUgwopX7h{^Mg0P-wf*u z;=p9JAjAP3!-dPwYp$w3ucHLBA@L^E%u2XXkZkSjXhf=PXASNBkT; z#u4W?X6Jv!pm)~Kjp3Xkp2tz2d3IJ`OK4v_9~{^b&OtJNZ3*Wj*?4LR=OEd5Y76Hi zt!qNVoS!{M%g!4ux@6C53ukW&^2dt?8_JV{9jf?E@a^Kf&enIwQzLag7|utE;oK){ zZyMrAtCv5JhI60HemlasQ0wAQF735Al(n}l#KqRTJ-sc&q3F*8{o%Z-)d!}xFOBwd zxyIJ6kU#66s{?&F!=F-vpTeJ7gTEHO^#JFhGnDSE?7o*L$}_&1a};k`iG6XugfYxn<-bAF4F|Cg>G$HnUy z-=8g-J>zrR^PKY+J}*hmH$Erm@xMp7E}u7=V!00nHt%T`K5OZr-wM1hW9RUUFXQlD zj$QCmA#vP6w}=Kd3%XyW&^EsVE%J0P2!6Pso@-geM6VIiMsq4$cep0CfY6PI}ktMXp!xaV=zesH$U#FLBL3ik@Dp6_$d ze=J^l`U4?X<`47Et_hsz4XqQ8=KIJ^hhT zOQy$-v3~rqU1|8u!-B-An*?)l%lv}=J|%ute`vpGEvn*c-oCMhyq@csUslQMxt`6G zReU|yv-M~dU(fYcseJUc=NDOj`+609AF5Hm^tJVJRe93a*40&f>1*SwiZ6X_on6J3 zzV_UyiZ6Y`^QS^sN9Xjl@r=I16X|veCccRVHIEcS{$n4OJ94QS;d#W3u@FWedmjhzBVuB z^lcI!eftHg%9FnHYVf7+#WncS_o5nn>1!*zs`90;tvjmt(l@L_3Sr%o)3;IOqwk>_ z^+?~@HTcqZRt>)Nomqn~eQljrrI+-bUPE5`+By^a+H=~Rz73K`-?ke0q;FVHoGGeCdC44Zie$tN7@*UNEP>&0Of4ieIId^xaZ}FMV&X z!I!?9Yw)G-rW$_(JzVr?2jIn+$eebRzFMXN9$CWRAZJkwB zuk_s|dGxjQPfp*R;-l|c!K!@Hx2*Ps&b@nt#zIBeP@kwr0>5HAAQ>e zbNaqRH2M|=tLl-ywc?)iJy=6t`r10DsvPOtRYP9-cGloa-wyH7w_7l$?|#wfTWefN z-&*sE^zBo=D!rs{Zwy^1e=?-if&-Y4kgH9@~e zH0xROOXv^e(zOqNzv#1#x@YU*xUPQStPk_*-lAnF z?kR?K<@xi~Rp%QfpRKRXpKnrizLb2aYW96Wp-LZ>ds!~Mt}0#n+I;8v8>`YANVj#4 zr%$R%SN&!|Pj9G7ZzSE;9iE<6rB5QgA*WxlD!q>MoV}Cb?zwL7&~F94*KF&7Zd+Y( z?qaJi_Ng9!V?W08q-Wby8~fWQ!@3IC=Cs9g=p9bmIEOAeZE+RaJOSA3{M4b@5x!{# zv~~fNOntAt>hKkZFFQQv@Fj;YI()(5h{NX`KI8C=!_y8Qc6iF+LxLyY;^&1Q78T!{ zf9;|8{mo}nW54{Mfn?IjwZR|SKjePXXbJTzn(A!76zx}j^0f~sC4T>oaWU2CAb-Ie z+m$iCY?V&E@JB~q`;gZc-~XC4@JJ|!=LK$`(N|PXRlbMX7bd5~=RI_jJD!S48lnGI z2zGXRj-GS+C5JCMbbF4Dh^D?@acFU+vhWgHBXQAnmy1X*83Yu@17UN zCFesUqQki4aJEtF;}3p4`VHp{f2{QC{>9$UiC=B+XRS9le|ld3hks`9snOqe_qqEWPFw#$ zTfZZ3{RTb5)6Jiur#o$a4L!|i^GD7D8;pK5_~o;ysHEvUb}_%DoM;#GU+8ET^JC~} z7xQQ6XczNq=x7)7Z|G>3b5a1iGzro!^LNstUCh6rqg~7&p`%^Q522%7g8x?P|31u}0$ATTxf*4z)w)_;*PEd!K&I{5bkM z=jFr3f7IjEqaLru&W8^X_kKxo)p752{5y+l-N%%h`1|92{;@33Q&XFtekJyA_??ES zzs2{#|5_6MoU8%*uS64HUNOFnLcXW*)aYM|_V!F+y#I~p?nlDBi4*J-jUAQ)<^neW z*STFDz%I>7k9Mgsu4}eCt|vPDd+K~2Kg5N1tF#H{-I))D3;&99-|p+EJz z7uIg(ExTyXHA4QW`o2Lu8>;jyL_P64yP&@<1lq<4dRdSDFV<^r)C>EB@%yOz%>?#C z{uSwcypnGIgZ{Q6|6i>Cx~Ts|b|w8g(l?HCp1b_2=&I*KBmUe(Np^Yv70&htdQX3d zFFsDxpH@yBCvUdAi~GYq)$5r&a7j3q&z?756VC7B^W}kSl2n=;v^(#Oy(OI2Px!vb zTY^7j?{i!do?o=CQYrY|CE6MC8 z9t`$9ZWQO!gTbC|kH)ya#Li13pV{%65I^Gg?CF=QEj^UeFmQW#PSa}KtiKwo`YDa? z^;E}8o(G%9#eGEiWOz=M#qpE=e9Ekw8;1ko`B>cV`S@%s5BT>JPlV@c$A_hD(o{YX zo=crv5au)FRx07FubZ;*J>bu`#`2qxx42&=ulknOD5n{|*|ADKg>Uh=ioX`VS&)9Y zR^@p=wLmYn^2g49Y2Hx9yR9F?i z5&miM%V$O(6U_YK%;+aYH--E{brtS?JgnzWu5&+meDtT4(7n$0)sKhY!QuO8pAf%& zQSe{h7kpSW>!TBbwC86WKJD;~!>1fR>F`qypK$oN!=HEfZyi44@G}m7&f%vW{;b1) zbrHi!EJSr<15j$IGGwlA)0ef(wT zSG3#oU|(zX(r>0;jC;`L56F4_zD|G2_oYwyKJ_X8-NL8BxH$Y&_#Hdo^U{a&h!H`` zc}|dZ(&q(FuJQ9CpHIi?J^Eag-f!l-$i{Wj(A?q*u<1 zn%ZptGAdbJlaso)3RcaF`zAU!qJLhHJpD7`(E90h`Xk#{xm|Q#^rOlT{1Jy1AE7Od zvQM(O0Q{(>Kjpvw^_2hq*HixcUr+h(f4QF_{~?z*KZX8br!9^`|CG}fKcRop=|>#? zYljaz{0WDr9a`Kz&v}uBlp5zdAG7@ayH7rDnrQEjiGQB+B8$&8%6r1gvpAkB&*C?J zWBYNOWv}Gi?uxrFi3YytF!ZONFTxM~xj?De`SOJR@H+keX3mSOzd1*+$jrHg^*eO% z_s2s2LkE9!-CLZJUtft0y>PR$3h&+ofny(kUq!r|G4L$?X>kH>G52| z`VTsui&(!w&v1G3XXxopn_ol6a}o2$+_{MPrN`OxofnzkQckps`7d;|i}^8hw2S#O zbhL~4HFUI#`8Ra5i}`u(yvY2W^k^6JFX(6&^GE1t7xP2tXqVuB6}#BDCOz84#y51d z%W2swXBQh^G4AbcRBEE%=}m!Cs^iz5#)9gboAd99{P&lT8-E`39&z#Wev6CG#os~p zeyN-*6iuwb>(M^m);ZlD3U;m92k0Ec)?M9ZP2%f(%b(xJhjrK)U#C4C=GX2^LO+J* zI-{>HZYI`55++uH4ZchF~Qo40#jpuOE$yypDNuI>+dJC_A|YHIn8 z#d$ZLgH2?IiQ4b&(K%RHH&)wYbMUL%w|nLXy*Ch43%tPb>8`O!mekL(M)1!TmrIT;4A0F6mWB9q zFtu_UcpvH`!s0%Z_slK+WcyrypE5fycqGgV2dzDvKP(uv_|s}ph4J$CFs~gfX62h? z_WhLUA$}gTWXo^ywbe#F`QIJl=w4mbLkCT@p@ zfp>)Yy!B$w|Bg}f{OtQ69}erj)_oz}^=^#%dOI6ieY|k4wL_9_pT_vTn0p_8ZHw_! z-IK=F0F!$kd#xzO!1PfYSGjhd5kJ>%8<)9u|BR)_c7Hgm4-O8CYj(5v+j^hTvWvyn zoLwybW_DRNYVkGe_eVx8{&{TV>($tLBGCBjAz`e~I|b>txIa5!{3pZjH61=ZS`^LsghAqq*%{g( z^hQs&et{0~iP3H1vo5rr?f6u9kDYVoHu0(NQNgUe%fdc5J7-%K_Q9FG){UN)eAW3) z_Ps3jx$jhZ)qb&9y+3?VLhPsaB*}jh;;{<+f_D9avLpixHo-5_Gs3zjV z4+TddlxU=49>2K?YTsgtNE9I<}B;zRfdB`UHgP#|?oOigNTPv)d;OBRF`n!Gn zw;8Sc4-3oU%QE+iG)uR2LToqV><5&R8)qRt4VZi~@L`Xi!$zz8hlFM0be+d9vx?~# z;@2vZmtWe5%KY*XkFP!s-F}THA9>A6Xx$p}L0f-h#Mt>{na?K|gmz#DTQ6sRyDpq3{7c1&v;CnSo)hd7 z_Fy0#xa#xRnCd(xZ`?c&qbnMd-}us zz{F>>^OfyEKVMJjdr!}alUpx-S@hwj!|%q@Z!d}lz94v9wjm* z-<`)$5T-}Cw(kDM!b~I5RpT z?D(+m*zwHhFAG8cmmHpR_%(;$aQLbq>)+P|nWz6zu-Y$PZ+?2Vs9c%f);-&1WO8;& zfFBPa(K?;)V};-dubO@~4T51kpOl{Ud@;YL7bZ$~@jR&f^B{gNwrg;(Z!qm|?>O8w zly(mG^`{+!UF}2Ny$93YuH)%}p1$Mh;?C*Gc)6qfok6ZjW+HxjXQxWdq&xbK_H_1M zGn5W?mAeLyb){vr=t{eL)1gCM=^(QEj~-Z=ZbYa4n9j-LT)XwF0C z8Q@3*H!hvoJny*l`As)Uw9{8SO|$CP9KR6!4_!{c*g4y%ZR)4$zKDF)^Os)MCE$PK zcoX<{y2Kx3RreUT zoB0&Mf5!1)aOu~`X9WDSz_;-^2mX2Bt)ck3|3I1i**KQHCC_E!O)(IJmMyW#H%|(<#Hi6sYzr1bz;<2>2D?RlxrVyqczxrtvrR7T^-#yMWgKWe>*c)K3736;uB` z5MP=4UxAFhsecco?gn(%_-N2rz_tx<2ZA?9j~3v2fUAHX2Qnraei3*B@Qc9Jz&{7x zh>52I85h&gQQvEyCcCZ$-VMA7*aKV#{2&mYoAxLWnQ6ZQd>im3AZ?iTw?O=AI<`!T zKa_&IR( z^E;7w1zde}K_TFOuL1E+t5PZ7V!jj=HWIE(%=d>EWQQ5&a>fbRnD13w3T4|o|r1yEWj z967r-1~97=NZ;z3b(kCds%ut1H}$t&Xr(SC@2nF*)y*~QecXf>`RKxTl3^iqu& zqh68t#jNiK;#az6eUKY{6s{nzbS8n$S2z3UkRTT>?Ks!Cf!t_ zU--5;w2^K%`LnL?3t)CT@L<6ChhY}~6w_vR!(;5}ntd;~3qrZG5z$yuHM4)naoRik zCxoLs)y#g>`BTAv#&OI#`{x~>2L5@+r-T2N<1@g2-|?B?Uw52l&iN7pD*&OB^(@pqt$LE3*n@u1x_(_(E{XGJFyEV#lunU+MVO z;Pj2jklv`cfenJM0ZV*}@a5y^p0t6>Pf$M@2JZlhe;WJ{a6g|BaAK5|^CD1}kd^;Bj1ATBZEC zDKhl4uDQ+J93QiPj`2k0-++wO3BI<1XEBHR=V~0&UR`rF{xv4;dfSnrtwq6 zC;z!)?cJ1fj&ja7)($fksLQS%@HXWCSC2K#2X?*w_{#iWV+yT^s#Ss zFyM4uNWI6L-w%EtiV$usCj1CcF^FsKkGssEsGQ6vA-$-G6zHc5?s>r0i1lQDe*lhrLlOKHaLR3H3)@oJxnUT527KYC!5L#FKLVbDf13RXz^@3 zADp`8oCEIxf1+SZx{EYsh2vWn{ea_?b!M!}&e&}Le;&LOyb=5h zj;G+%Y5W%Om%+CnQv}!C_W<}X%N04u&x4PEqnGrb3%HndhT$o=+V~Uji{Ljo-Uhx6 z{44N>!FPe9&)n1CT000o16~G4x4F-Ne+c{&;3ME416N(=z)yoSXI}ug_-DDXR=c1G zPXDOCE*J*?kKjAON5H=bPMH@1E~b9fbzvj;AA{p#7pCBU;dl}J@4zL~#*qYd%Fgn& zd91w*?*_kK_>|!>y_L5%58H<;^4_vlB%}3WTpAq;!1Vp7m5geb=X`W#pL?YfM4=eaP+SqA@3`WzX;Uz)0%kYf#1Vv18M}hP+Qa@Ta&%{BvF=GPb||eiKQWo(JB~rzqN#^*oN7T)+#5 zDDyX6&kstTG7A7$O`r~h2}v&M;Ct{bBB6+E^C?tI1A9gbfM zJQeV0w}R@=>mxI$Uc20XXz%^^OXvTh+w&($S7T-N z6#lOPi8s3D|0izJCk6i!P-PXtf5-C@i{?i^p$NNv+M#qSfJ-;|kNSyg{q%8~wj7No!@0)N3Zj;qT2^HV7+ zdBB3}fSr7}>}*ju{kz~6*OM{2V28^SQx>$5?sl711iyn1a6uO`vaQFRH?|?ra*6<7d9vnTU z6_HU4{B_pP!@&7`o&bM{rp|W!6#DIU{9*VPJAN8m^IRwL&wyVI{sQ<2_zLjfVl550 zbPYG`Be%MAE4MFz4};(7{`pyW@{HR?UpOvp(@Js2)s$(ww2#D}zaQY<1*h`5o z7Q=_(e+vBbd`8@E$f;?WFa0~=vm#SOlKir6Y8)5-aOuxciMRDq>2!&uB$ujO;VCk| zjEoGt7W_AXXZdhl`XV>s!{EOU+#jmC^lOeY&My5^$5ZhC;dl$U`g0EQMetX_nFk9y zcxM$ zFK}gkFoMh}7}#I!zx=1b<&$mTve6UZ!{BEee+c~N94Fu9&pQ4vxco|aPlFRP3?Bji zZO6}ne;Iw$PHd6)%gg0|>ic2rjxO?{7UWVqB)bkNE1MrJp?%m)!9mk$m z>~s9TO5Sw>*cwA~1J@NLm-!E()G*3CsC&SZ|0aC8Zb_j{cb6fKUeT4)`4~xmsC4-6 z<3_(HMeqlKoqXE(#Jn1t5$~wr$v1@03bqrfYlm*G%by4*U8J+(`Zx50GhcQ&+0*+c zle=AMT*eRbg~MVv&RDzRqi&OLiBB8-N^ke}&SuzehbiCUO80OR-U9x8!2NvM_~d={ zLP!;buP)m0Krrb=;PhFdbs^WHcQ_8YNM*?9QDqT*Y-QpbHfEKU!tZrH^)5ONF8LxY z(L5%63w+I4ukhKyN7rBRX@h^Cw~_dr_i0hdU)w!d^aDWoxLqh!2SPTB6&{yu%nDB> z^!hSaeer?t5V{#x-$|AlZNEys{~bQmb=4mLy}eg`Q}TRh?^V)E_*y=?{+3Tsh&tUb zrK3_{O%D2}p7wVES{q+=Ueq5MYvV(KZ*3GlEZWnYt zi=T7+2)O1p@$sF-BaSmaE`AdB9=AxcsXLt=c9h&Y98Vy9KPj!1-ucy%KM*uQa*~m(t%I&dx5Ws2Yw$n z$#FHy&ZCAV&DfdN`bDNXP(U`0Ae$Adyk9KQWtvYrUoubUW$GdPiath}OW(tdKj}Y_ zeQXb+y3(ATTX>bIt&(>c{TgkuEN7EtAAs*RS@wgpL26Kr*@U>Fx|cl+UpjCtdkh?N z8IGSsJ1qM}aLIEm!ygJ$9shN3@1`;1NOo13RzR-pYKQpPYuOh;fTn}y8>MmOZM*D` zA23xVqkc&)3Cb<|wr~oET&8{&j(*olFX6yzXA5sK+g{s5IZC6PEDk_gnR+*XHe92n#&w=j@IBFzo|HAQ3^w_;o3HH4dq_u1HHaIo`%=U9{8q!|0qkewx^Mx#J_qXbdUuIdJFGi^)yb zP!Ii4pMqcS_-SzUA@Y;N-{N=?e3#>GK&}EYc+xQXs81+&(g-r|0w?cez)c4nPk~&8 z3*i^x6Aw*h82kh{`b|C!{s1`TOdbJ-Nkxds$``HBT70D`QAWl$Z~7>x+H6;y-3#v& zsL0Iv1~L~}5;vF8+9KyiH~j=M`1DOb>3($a1nJ))ovT2*YvsRno#$69u2KH2_jvlH zo-TFx#QNj+3U2**uSb1Yqntf|?B&QWy-mq?bGXL1@`dImcdP#w^4ZO25wA!s^YX8f zoUcij2$z#_VUN8JS|LecF|_O*<(3L}xhIhOA(v~0jojX!8cS#SR^;+^B6r5+mV3T` zTRWf4|2bbMv>-1(pb2~bo##0SNHy^r`-_KG!p!}1*kIk?EOubyAj&T2u3Tc zm29w$-h18qyDs;ZD!I4jy6ks*w}7K#;Z9%=ANsn`3VeVM{aLsR_y`~Rtf2YjOMK`TeO=$y zV%Wa0m(Rt}vhR0M9vyWR)&wY@yeBTQVBIrkswaRitl(E1tKj!6%i-7M@SAe@T@}3P zD;4~ncUJH#a(U~%TH#;TSivt$EBHMJb9i44e}4{tFo*wehIjW4C8g5(ojcdxQ`)ul z9h*wK@7b}bR7!?U_ID*m+E0|adWQzPyUIytH{T{4D(Opyf*P^o{g zZ>X=Mug7J(`+E6Z&W_TN_Ku{pJY-OGcfXMUQT=^`Lq;1iG}zu-7FH>&yW>cI$<#5d zqp!0o={`{E?(OV4ksMvM2K9A6+FR~E*xS{amJg}Kqie-qTVZz`Y9CCF-f+Fx+%s_* zz?yTUi-vZ1+nk_b;k%^eWdF$_tWX|mN4Fz=y?v#j?jv2Lp>opI+c}nTpr`#H?7_j_ zJ{s21pY$IdD(SnZ7_qlp3SY_$b@F}A}b=|juz?#RpA6W z4Ru9A^^`i=kCwY~m64Iol6Y^&$>ea?$;7@yO8@qIQSAp04t5B#nfZu|loR^AqpQ?)3{NW!wjVDYJ}}tTRVp9ek7=py@P58( zJBV>Q_$b7Gry6Y(~*Zr`=%&P^MQP-1E4ruDm8x0~>;9h)|6-MqDCYH3&NhC95F ze7+rb>@MwYZ7uD(bN#k$<4WDVVMl2L6^=^?rIj{s-L`wv&T*-GHcpUj`=;F?i#2Rq zzSiAaHtpQfx+}CbujbYX3WUFP`<9L4RUl#Kj)~OUzIDU;UAxIy+ID^E&OO_98$C{) zeVcdQS=!OMZR>`6#-&mI_SPLcTX(mPOLE)n+;I18dp2(#mu#6zcWxSQR9XAZjW^Qo zn_Ks6AK%BGzGwTUef0G18vX1No7ZpMwrA(2aaFr!x2@lB$F|nn$0aNG=56b5-&Hf^ z9h-Kx?%le5W9#0U$*tQqmNu^6y}owh-J5ovFYo5oJ2&mTeZ0cbXy@h)Z@J<68%jIY z@2#!a*6nw%-?nvQY1gK^_H5d|VS-XN?W*DZDnHA9&-R+SZ`jtlt9F^2aiZ28n`&p1 zJ+O1lA~oR7mrlOYp6$CfZ6^RsXwuECCEB}ZQ)$OeJfdbjt;lE;jZ4IPTlehV-nx_f zrtwz2ZO7))hTBQpQQCC-&P}__2TS^;jW`dR~IB7N^d*$uUAv0=xa(nKR--^TH_+r0soscn@#+qbOW zzL7@JCp9C3B6!VkO2X~Ch{Bu3k4lC8JsVng+*8`To=`Q;m>W0UU8)rU#it84j*ne3 zYiTEq7+2PI#^Lz5MCqm7IN64A^1Ig)F>22NO4_||g2b&G?wlx~`(UnZKnwTlH*Vay zY3I(?oweMOzM0Ui<6L*!*6}Uhh_7$nxqf_tm^R7YS=znz&P@!MaaJ%9jp@zn$4^8S zlDBT(y?gvH&>+I~HkLN++g+;%Eq%LrZcWv4>04L{Y}}%| zwuoGLC_ysKr1+`+!J{2R>4dAWbeZZ~n%FPVs47qgaTa%V`t4yA{wUpoAr6pLWOGnXAbNMi39yqXcd8&$5+(HRj@llAU zBpv&cQtyEdmcL!SiI#mOA?zy*9_k!4$j_!6?P8Z)E~o2hcMKRMOjr zcyhp~q`#}{a93w?2+c|d2HOuN{Re1Odk<^Pq`zN_*^?bTT}eB?&T@Iv4*WtN~U zS=+mNwD7mArV$I#qg`rO!qR(?<$pzZaDT7%EIr-)vx1(Uk`cY6YrT3b=?tGzxnr<> zsN+!B1dLh#5AF|nN+q!V_Cc+a*=6+&CeVZ32M-Mi>FGK^@zhaLbErtD)m1*6boZA! zyVSyHjUhG-N7#U|K0ab-iB=sBTbiV7I}+V1I}&Y^hC0}YmDyck)%M;F_E`zbbj-xw zP#D^D9bl(Nn}SmzAZ28aQb``DZCq3#(h1wPzQL|i=Ygd6K*`)t`j(F#IYQs`_4Sqd z4!567dRCVXwU-Yi<>LV!?>^97((n9qme|a&)~_(=R7uX# zLD`9Jo-^ontf##fSLN4xu&+B!o)>a-^d0H%=^A2xay&44*toFc#n}Bg1i!&U-}D~n z9z2rRF0r$#2j3YyY1>6Ch?!_yM^AgX+c_lpUsRXd*7)X8^%@yyaARyl?QZxp&u~GZh0|YFxIe z3^`GAfKusr<_ET|56$zQC(doe$PJtVnvZks3$Wv!YkzlZ|??_emIN9BA z``sAGY|F|fm|o}Y)D<4kZmSX3X z<->}&t4*S-_vjHZ^BZ4&2}=84q(g`ev)V8k#IWP-sHB}In}D=~!a6sN-J=<7S&-6auX@L|Dl za3YD0WB6ga<+q>jDp|m{;<`Gz6rnT5egZ>J-$A7v=o>uVK1jf_sIGFt?{hIgx{g>y zJtabRhtRCItu`hlD}d>aE+DzTucw>y6EF?;j`og2rfDAqRf;e7c6!F+;+sl3h$tDE zX)#nD@S_(cF<^4qYg$qSvRszrp(R#b9ciRndxv6=`s66bREJCGp>WwS*mo2)6;oB{!7^uHIwf>m8EpcDwq}N~3pI2iMDCD>7}vhP zM`7h~>2TLzZ^>K*f~bu}J0!2Pj2tvl)2e*J>W-~F)Xk))8eEU;bP1mHGo89vEkXBS z9|9?+5GBcy{Wctv6m$nF%WE>f!^Ol0pkSy)$vMwb;Z>}ocIHF_2D@UDnNbc9Irbkd zpOgdjsL+f6>pZAXib7pTMW^4-xG41>GN-hJaF`W@(Atd0fXI5-=5Q4=R1Rl@pyfkH zhdTR?+t3>->(meCdzdi|VFlE2II631SRu4`VkDMOTCS+96UHCxvIAKgb7o2BAMK@2 zOcV8BXoY$y9L!09t_~&#n+i%D2M1Y$=){f$21bVsP75LQdOKaC1Y6r_p=c_GVPU_c zr^GPmgEpeQD-;+++A07iE}b~iJ*3r$73eDw;e%ahXH8)}sr)QW%R_yvimdLzj-v@@ zl3IY^mL@crT3Cr>9i;>9N4k5YBon$FzY4PojF(kqRCoWeHGRD<&a9+mQimOF zc9iyWR@sT^j}Z(_SdM9kO|g`EYz=1738<=opt+@T#>fI@N2#-~cc`PU|0FZl!EW_B zGsuY$fU;Gwsaca*Q7J1&3tVMTW&Q11<5f`cD{57A(!9y>x{`eabm(|qxQ@?Zs|UQa z47JiknFJGzXMGM%nGu8 zweDVVl;UV&fiuzBdW8jH8QTXt4rOdI4P+t=D4n`%hZN_ZK*p7Ba=e|97Pehlgps?7 zWBF;CZScazWI$WD$dPfA!7=lvn!t=Wphp48i35X2;|v+#0ft9!nLg zwU=F@5AqnsjDL)!g6W_|@Cmkt<{^oq$KY`{yxBCP1_BmrV>V~-mlG4lwxv=}2qD&l zP#Rkho@aEO=;xsuPo$3avIC8Z+4}PsKPhDDWbO08Xn~>AhLYVG`RxDfky^M1hGwPi z6Ldw1&dqQh0%JXCPV$~zs($)R{DB7%b~DZ36=xhYv-ty zP^J0N!9?Y%8QRVV#ALz}up|$%C!;5|i($XZ-YcIT7NUpxdOCegYH09L-C0N_`}=rO zTDnbl%R0oy(l@E@c!OO7cyO4Fv0PWu*Dp6may}LKBgbm?Sw?z{A=Ie&kX73BbqCHhh%F#Mx^Gh1N_GB zQ5*y(ICy|Vg5)qh0SI?353~U2JL*e-fO90HU9cRmyHCTJ!g3RE%euIu(au8GxU(e9 zyxGCi(Y2f)HM1{Swv;oe6}RLzAMB5Op5{==isCldh06RouRVQ?$79XfA5ml|Ih<{U z&5`FEfBx0onLqyO?hL12*Gv5y)>>`doh#!5>#$$5GcIk8gEq{MY3Oq8rk2~>6ZTd4 z6TG8C-92Sa?@a&kYVZI)uLopKksEIa*{UsQnfx?PIWVAaFrhdq!InDETXBorC%rZ` zyt0w@8g9_je;unGVj)9tWzKSP>#h$qt0KzJ&QGwfjL|#Pcc|PPDmGocK5b;j zXL*~c#j~v)`K|CczwGYMoU*$=XVdQfiA;*;=gv0r9p~z+)5n;=j$Tz!<>ZyRqP50} z=PjmO-TkWx;W;%$zJ7Lf)p@g96O-;kJqd?iIx9_vG&!@^(zG8>Ad{h?9*(lv>nYS6 zJ;F*%6HJ*ijGGuX?kum<2)Sc8at@8b&`Y}eSK87z*Ra3{CRO3#SXyO|HE6U@XyOEg z+a#MW+!&$owg#jDN<;3cBd$QtBE6tMU zFLxsQddq@&%g4JpMo*ig(X){{e)ur?<;M?X=t+y+H@c%#hfK@lj;9=zkO?(WS5==) zs-7Uu63IfP1x{YAVGXMJd4RQTc~#P>Qy>;&N%AHAUMzPE(H`$c5xIU8`DQxO3_jkwLKQ7zYe63`J~=kT11AfDI)-K!pnbEI zHNIn%XXTilajRG6FcTTu!PSk{`*SQ3V$>9sYqq6MFy&WzEF8AWe9zsWegMrz-Dro05zb&S?W0-s6;Di9=mRKw#?x5Z^e;#uSVZ;h4SQ zX*|wvO6EF8ON4^<&SPvdgblV^5uA`&YIi4_Xg0F!U{x~gDBZ`>WRPS+FX#E3ymuyc zvd!~U_rL3NStvH7vUKd?X%?sbC3Znp+i;xJ)$wuQEeeZGJrG-yD3e{)s#dDXzfz0BHhsLIDm`Q6jazc(AFRExdTrJs zr@>skw)+lKVC+7h_9pH=-k=!M^~+Pea<*yT)?K^vW>@brzIo~P2xmHYZ#iAE1l5O9 zI=N*`533C!UUCp{xOtJC!Ka~j!vELF{x^+$kbgDv&fZ0ue6uyg>lRS!AM{ie!pqSq zXLt7IgN{$m<5yKf#9t{3b{#WH_;)~Yc-)()nYvb1+#-4)4!AtAM5V{Qd01pr_?3LY z5i5QeGQX*gwAIX#s9@;C_1o|9E`0sodtZDjI(wy>{iQu)7~=hCxh?amJ!;`Jl82t0 zas_vgn72D{!dpeKuZtywldb%@gx>E~b`Asm-J)@Y#Y2UVPN4I$0Ey9 zhBqz{pF3k)9puPO!**U%BO*DMm(7%EMO^&&DMy%um!`L*dbgS#%$>V#m;bk{yD{{w zm#xLK*5c{1SODK4$n}T3PH%wNQuuA@M&9Gv(YkYY`rh{{W>=QNm8ASA3j?h3juaNn zR%zh51&M4OR$w(xX0Y#=Hz(M|$_`bAXs%d_@`6h*O_!L~ckQ%Sm6xV(3y~nbZdr;@ zO1BT5OqX4kdHk65uJ+DSO#>{f{OypycLBo3><<}8cAck;Y-30n5wBT>3OdluYgMYh zn-|Qq6IddG)6?ZSr+~GR364!ndr!H`O;S<1yAzKJWrSc+Ns2oY1hn|97&#_XqIM-y z#T_hDbb(r;G0n@5IV+-SqdZvsHf|b^RpK(S+17jGCTo?#rC2&trY@B>;mjOlO-412 znR#l|NZmsypxLGps8q&zx>(JQZgSo(K2I4jU)*p`=xWmCd{cwcb-g)P(mQ{-!KDIZ z-evaf8aMG9>aekWZJiy;sI}@+HC&40e4VFePZH>Y5>*A0Ejke|rs*}du$ZXPrB&@x zje06n>f|P&ghvyjiqsZMN=yaE5fSpn$g#gvn9SdG}A7ZE3R#7TL?jsB8~{^oB7{E$!9D?7cHyT8z)2Y&oPC9(bj)59j7gSr4z< zdko8%Ycl4VC~41HgQ%fa5__?B4(52Rm1ZV-6{)P(kPOjF!r}efupd5j+~3Bv(ZTCE zdQW11rfh#lyWaZc3w@|7!dsE#7h&-I(U4n#hovk=d^HEKb6|Tp`>lGeJU%U1Iiz=z zwGHX+NO^~V$J>CRw5D|SoG3G{-bUOX)=uoz-Qs*)O@wQ=ecmIl8;_`wMW;a}Qfy=WN zrc0OJYerXr<}rGZZ>u<|Y#d*lwk*vA{qee0M3wC_(!fR3&=UdAf zIj&8!Co{_`%v!ClE<$IR>BpB*Vb&@_%?M{{JKRXoU_9jS)GA(QueH+L z7ILgHS;F$_&=6l12;D)sx#-F6!8g&nhz9a=?I)U}zpfCH7k}gX-)PdXjkD5ku53ng zT_?euP(`K^lw(;6&WzSlKW{eKzA+rS+W@xxg*Hs9Do^bc{Kh@;<|t0@`c_IeDedM7 zIY;`jLG7u{#I(JpCWI;~S4s*~)_Y~eHLI6aB+{F2PH(urBByRvTX>)TfPdeZ7cu&e z4*5fbkkhBnYz4DK8f5!15lc1L!dvndkjF%4e|tVoH5St|fm)$k66KX0iLC9xJ1mp> zdb@dXDd^_s82Cg!twyxYC&z8~*ciQB?`~(ui231OrXTc{tQ`X>Y?!rlZr9JovXie0 z;HAw=)5ZL^;UKwm%!$$Xg%tgkUqeC0k0pc4L z<)M{kG!0Gf=eGkRJ1{fI6UNPVH3kIYX!zmsgt*=7tGhF{qwm z^oU*=<7IZI^Yv2mUp4W_znQoipt0Dsx}{`8>x1deond zCrxz5iH>m|T_!5A`l&oe2C73PPV*7Pgvu1py9ntmx1<|)@%`joTefcAZO0y>?p(j? zj$mlKNk3$<$+k)C;f;v{ePjBhG9Bwld42+y<9k2WJV8)k(}c|{ z13^r_ST(s;TCZ7kX-Zg+^F$Law`7d_C0?&ndNiGP0N~jbFVz4 zQO1{RIKr|Q7MPK5Nmtwb&GgKge@4&v8w1PrblE#*+~~KRVD^HNy~tB}!sX|OdJQ7F znhMaB?=~%6^6OHgYj$0APCX{d=QR2awfpmw?$A=O% zN7tApX@Ux>k3Bn$18&T@CodHyDnTnqG7&i9M!hHKK}C9hWGP2LxhH26Rv0Te?+IGe zZv4@wf@IBz7P>lS3=mUhDJ;)0576~S0q&NHQ2BtvO-Jg4sq z@I@I)(SngM6i*+6_C#`R$aQyP1~mwN6$?TLGag?v+e6o)3;W(mSvED%d>t4L=36bu-`etULtlI@Zlw z>8uu2ldNNgTE`>6F%JO8c%F@3S>Lo9`{rzp9fvS1-XaVy`f#|$7@v~M7QKodHsMI;M6#$SKQo~mhYfZ3v5TeYt!el%kaS(- zg+j&{&YrNSX%rOJqM^k2>TK2PvbFPS_}Dtu@@6Hyp}dmTIx?%a=282^^=5fvL1Utt z{Ly+&sT$JJu5rZY?V3Gk3(CYSLBt%3O`3knD_xd%Aa%po)Y{{I{Hf!T@or{AHs_t% z2UVXtOC}q=x3IUXIJ3@E`F0NjIzQB9h1yc+9!m<%l&G#6QQ&osQ1gw^gZhe6;XHNR z+XB?`=0b(^8XqpQ_XHHn!o!X3-Vi&+y)-c4$wWKm%gg)8cn(vh^o?nJ8(Yhn7 zH4>>jHh~36bgr>(pE-DZ|KXoHEV73Q@{g)gYmA4n5^RrbO;r7kPqkEy7kkuJUE`}I zKGt|>QuR_xbqzHh&Cm$!7QarUIfp2KHs^R(*cHBv&?d18fhs{KyU7?+Mu zgi!t7#LD#B%J{G;o>f*}<&nh7H_&%gIYNh7I1c?)m0o4?s?_l|t_b`SZ9L)QFf~vv z#0kilQ#$c=DUCHw?k%twE<$>^kMA7zyVKEqvB5z3$_Ty zdrZ_FeS>;l8Df!>VP&r07vb?8=d$*8aPyL|jxwLByeN|^j+Z=Ia=Us}rp7J|rPgZY z8?%K9%G-lq=jiF|y=I76)HLHocg)E{vsA~GuJ+1wBfsFnH*v#4c~O;OK__icX?#4t zR7JXCVqDL>Eqh`+)|65zTB&?=Ki{;Z*JaRP2tTSe3uQ;qeoh^#u@|T;o!2)jr_Nzv zipE3y?heOb=KP7Wn87$vBZS+o7c@8Dye~HujTPb{KpHz>VkwSxO{!&G_yS#(B!x^+ z#(8y^AP#o;Q4*M|oO!7cb^rn{7< z-r#VxtH6w5KfJQC#C6~Z-#a<~w=gofybqn1xpGxd$o(zKuGH`I^3=UUzuLqXZ|&=; zLoqe+wQYXYszr2`&XW!vnS^{p<&3>@KR>Rtk~eX<5BBNQlwZmU*3!^1rR}-9sPHI1 z{xF0%_5&sMs~cMHh3{tT7m)0G!S;=Jz5vX@{~+JO(RbPX>#hEFBNgd+zJ5N;eier} zMh9t=W2AmJBYdBqZ@$}CclmyEse|7@`Q|6>C#h5a*=hZ@HJ=sVN|KfR{3<@bJFnmD zp7A`;f4e$a&;O_3ciJOe;CHld`gD%wx3Smh|5o_Vj2HObY@vlKlH`^);MM%=i#u}i zly$3qUpxLbHg)d#yBwW@^Lyc@!)b7?8DHn~oh1CEz0#m(u1E?+{a*R2PQNQDY~lCA z3(}wTcqkSqbeRooK8d`mA^b<)P|MohmZ*%$^N!=&-KN9ta za`Yw8{efP1QBrpX`_@0~^vy}#m$yNm$9<3_RF(f+PM-3oGzR+WX-VBb zLQnPfT-{FBKsQAC(@Fg#^lMlf%DeiD{EH|2ufhA{>OV>9ucrSRPK~Xv;o(sJ;>(lz zX8fn&bdJV<8qVZs{HKBT<=flf?X&zUpZ3UK7XNNizkD{dw`cL+CG{<$U#ZIfYLH(t zKdE0${%H+PuSx1}=Kr)zOP#(esb4F)=yXp~U%VW8ODJ#2$M|=Dq)pow=-B>g4+Z(e zuW7Vj`YrjRr2Z4zk$*Tx(?8Qr=V<^{+zDL=p9; z(b#*Y+vD2zC-wiR^hWaJ^q-jq`r0Rx8q zs49PdpyPO&Ib2oVLsjLSsVeUor*BLqrObgd-9F2YCX=pS&VT)B@bo7M&C8&->WC|Hf(t>nNAM z?lVcDiS}J^#>*2;`!4YIUH5xQ;h}=BJ)a7tweY`-TJA~;=R`JuLu(!QE#@)(4;G`b z+be5XC&3aOFRcr+bmR+Zpjn3%64A|0x3h#q53LI&f2C-xyS7xxp9plz!`P8=SQrld z8rNM~_i3D7>Fch-=^Ra*E1b#E#5t`4$LKqfOD8TAXrIc9>#n*(PW!s6?ggiP-BtHu zj=qF-+e?AY)?E!w$8}dzjxMr}N^|rk=w_$mx@$`=oj6y&BS#ZAvUQ%XyXuESdR$l4 zpK|$_er{~~q!y=r-8CuZ_jT7KZ(m$@O?uhOi|a1hleg#OG^E?QYCG#HZ;#PhcX@qA z-ws`@%J1#9blNxhL?|z=yQX-1;<{^UqyAP*{xn;@8x3 zfo}GBa;mq_X#8jDE4g(1r-6L(k9ak}5N-1KPlLBF&Wl8!K*i6adss^o{O(jN+R%h{y#&zhlCZ~NJIxThD*P+v}SKfc7tqtkfI&_QE z*vrb!k$+5&KL#ouiqzr(qxIvx+#}&%842 zxg1Sgo_5aZ_YsPALcfxuJD^|9(VJOUB{`b(>5Vy>{91QfeJT&*O>cJk<)rWc^OV+^ zmM)t9(>hc1^{bNPMdW8h`e>4TS#*C@`U`sYGtW8w4@vS2 z^VZCl1APOw`324zX1y?(aOJJFiD;l9qV&_XBEACuYcBaPRH~S z&;L_N;Uo0VEZ6UbNV|SF{P(1AiZhN`Q9sf2*Q}_Ir_XK-<*lBR6h20IvuUH+zj|Mi z{4(~MecI_yB*}Iu1~c0+_hfczR*6cL#%$+XYRSG^q2pi*6udO zt?SGW_$4_bQPM~rjm9<;DIUs}WXhS0I5T=-ys|{UB&Hq7p4f8CY?S3F(%95$q+w=8 z4wGmBqRBRFR%m9k2Fgu^Vvwd-Vpkt#w_bn^RP3M#y4+naI&F+DQRo9vqyQ19*g@cK z*{+K1|2gM5KG5)+9_NUzENdHZHC*TcDzl%q5(x0{(<6p+f zI?}N|aXbia;(h$cruxkwsL1xZ>hA`@jYC1OCmv4UGfe4dlWhOE*1spI>3 z7>`lip6k!3*5}4|bWO`+ySFg@qwCgzE~70?Zw8SMaeX$=IHNZ4(|2H8x8EOvF|Iu$ zpFI1F-0bIjdbjyArRMJkO1`J_K_q_|=}BAe>F))R^9Ny!uSv)JHjnv1{`O(dXkU<3 z{~Yr#uD9|x+$H_j9>#o&`}zR=H9i|eYPkOlik_u>Nqqz7GxlFlR{wPn$aA+~#d89# zdB*q#7%x-5%imD{9nN3b-nwV0uW5bq5j23AD zK%4f#+TLe0JsQ_^jK@q8_tV3k(H?p3D%*eN7eR1t3`QRDDeT)k=AY;cIj=s8^A*>x z=&X7P=RfL_`+HMf(jSFO>L1{I#~4S;>VF#q%a6k=o*#l&tpi=6IzFfV8_pMLZ->&m z*7Clq5yAaC%ANiielY$h8pP0FaTdq?8uqWeALtqFi={o|_=#maPs3Tyl0M@Zb3m-* zS?aH-U&8eo+l;MR%X9M$aa+@`2SE$t5kr4Wd&D?CW9X0AEdy9F>FYso7w7Rn+#2U+ z@Uz3P_7CT0&^ZVv?ETl%|0akYz&>=(iH*^|ft*dx;{D4}v}XYI%KhB4LqSxY>klT? zxgdHHb-DK&&x+Ar_kKg(kG+8U2D6&KjQar`KZ6(_Q{TVB`7P;1HRh+=Qh(X{IUN6M z;uT77hts#D)hBViME)%m^*_b_7H_EAL8OS|XG_a7=ASKE-}Ae0J(P5ex3uqhd@k}6 z?2|2<>Z?KUBb+~5y4LcXwT}9?Vhl|FcX7Xl`Fd;8Gmc01+&a+3y?=TZp^q?{o5W_|5XshGX`^iY}&8=llx<_>)-Z__4C@l?OD(0-}YJS&uj^za{YJD6A#KVERvq~jQWSN z>OaHzgZ(p<^DOCkwR{eT>(9`v=Us3~?dmUkmhu&AZGJGcs_AZfb7fWBcy8q07HBW6$r;P6g(9jyy+{^Z&E21(6}#Kkl6I(lI~pEUHWPx!cYPc?D(v zF@9EYJmC1+*;M~c5FM5JHaz3}miGrHzobk4w)Km0DZ=rECY$sZp9vx#0J{>NaeVAb zdPe>7{y^$8`EftIEA1Kc(=PP4moDYA>IK|7zz@0ne~RlZw*QdJ@6zjqtp0P{ zx?n!pUGt3b-Mvobb${gU1(5?dzIV56`ilrne>TJUF{GwHFC7gcDfCy~Ur7I6dNqiQ zAB464#t9fdy>#3k%lixC-@>Co9E>A6J}>}y^xxbg~y^QPs2m5iqtnGjKukn5W_YZrLnl8rmSnl6V zew16m{m~w6-^*g0zk4z^{c}ffzmDpF%?%!p5pA#Q~ z>z>j7J!|TJhU){)htXm6Pwn+#RJV5q$EIB09(Kn3C)c+}oWFzX2io(9w&#o(?RjLy z)_3L)gP+BhB_X{*oS{s8@XRO>%09)Y#L z#@Jtv>h{k5HtruV-if@He-F>$6L7`)6|`*=^G!m_8z*5MuUB%o-<9+Y&HsJe4`56Z zE%l!UL00P1_Pv69=h5Desb59gX5o*k16}qG+wwU*|MsE|*YW|MsTUa=xSg zdoyZ1zxQUn^d!>JZmBP)=j-00XPmElSFC&6t69H#E{NPh+xD(o%jW{CX#d`pXS8+i zrsiM6{Q&mo-mYiNpEv}~_Ft8BaoqYvo!|Cp{ug!r!zp0$yYx?#)NMOoJf_=6HnTjY z<=y-@hFIyZsqaZ#i*$QA9iK7u$sgabq_rFWu@t3eG+oDkEUVV>9Gmrw@f@pC`4vsq z`ERUl?dG?!HMP!fV-3#<)VJ;#^V`^lTIaX1mRjexu}!tkZ%OUHna^-OB(=Y8eoLlp zemB1*wLdTahMnJ%tD61;JHI8h{ce6sHZ@)6x1_eu%x5^?lG;8uza`r?znkCo4|~S( zvmbqy{nJZNd6x8y`ZYVh?az9~`LKV+^C+BG>-@IAq5i3z-yYZPx%ur0XPw^;IDf~^ zZwItJZhkwEvGuw6?Lf{m+Iv99)6BnU&w-+*>-=`0V(sR)168%mXXwvCt>4XW2erR$ zemkh!bMqUDnDINS^V^}6wVU4#X?Zul9n$e~^V^}4&Hw6O1d&a&|4`X8&fi1YUXw1? z_PY7*NzMO?&W}%O{$Bc~)~EB~;k-4PZI;7Y-kr~fD>mJozlU{unmssN({!Cb53f>v zYnra-@8O2}&+Yxo;g)BdzfYlJe|~r>Ztdp7r_$DLK71j<4-E^DMJL+HH{XY7a-VCQtCahmSfcNvbCz(uAdP>t@!25f=ADm26 zy0-WAui*U*j*rP|IDKkH%YQ3~$n%&f9k18_CWzccf2Le{jE~&!Ow}~M^Q!eZJWuUP zy7nJ`oH;sx{V}zn>0*r6R7;KT&BdpJU^-CW4WdIRKOI;9&mcPdFq|Z7f8Y27-mgiz zw*QUmc>aU&$z*N*H@+W4Q#gK3IsZ6_j-x-P@-`jM&!Q(I_Pek0e*6nK7gLg6#5L6! z=i{l8XSDBB#d89#ddB#jTJbF9Fz;A^oN9WO@*CJxl#v=&;2Gsl z=1p1(@|yl2TjOD?H5asMp&%bq2Fg}h?@Caz6I$zSs<`B%wn>QCW*TJkqMOa688 zhWZSyACkZ2S@O5Zo9ZigK8*a?z%%k^eJgfQJ2(iRg@q)Vd|Go&W;{|rx8)(9R8w8JkPg3#BHh~xM zJwx-1SNz0FYH5#G-{88nt8cIie~A452O*X%6}))fI&6L54TMF-%kNmF@?GSQ_O~zJ zSrEJWcCFj|<988a*8tl|Yu;zyQ9 z3orh0n;N9yk#w+U;vJ^3z{f7}jK)Oy?wY*_b>+a&DO zC!c+YU44VIuy>pecEa9LwsyzqR?t6g<+A~?J8rkOVbt%AyRA~6x4n1|3 zpC*eqY$t;2%hRu8U6!Q!yGC}Bm*b$VE+O>h4>O;l9j;xGVWfNQj$mB;^D#1G?Zzci zw&T((k8ziAbm`H!ZBNhI-k$R|{ZtP1Vv*0>{Qk&iZpPXlbDVj{^*{}UeAlgAdj{HJ z4<@bMc*tj7{&BmdqSoVf%Z7C?f5+M#$MTt!KVDmN)^7V-*I@5BjyK3nYj+%P%Z4qV zG5N>wj&<0Z4|lY!-S&nmus8n=tyuTc(H?*Q455GiaW9{d`199J*_vf;{D{9>@STNXiKVHqB3q8FW-l9OYC?0@#Y><6QcjF zA0PMn75%+_ynJufEd#&s;=TIiy5P2J<`^vy?eybEH#AbBync?$7mM*}dGYK0_}EfEen|4@5^H0{wKJ=c2nIjx#pnC+v5Q{(a6f+V zSueiQkB|BL#cO9w&PUy@+)KD+;JlmE?&p{1>TZcW)Q>m!Dw;4j z*^f_p`3Jo7cmIs51>^9a`uU$K_2Yw;etRMhYy1;v5BlKRpI-0hkA1%%FVDN(65HC3 zPp4fh!awNOAILc_O9JgVh7d`z$a7V<3`V{D-_}@sRuOw0>zZGli@IgtUwirGoRUTA zmdRY&M9aV&BD5ZJZ>H(7&3=5=?N3C-}%&>+jH02WFT|MqPBklWp)Pqg<%V-B`d-YT_RqFXW6ng!z#{TSk1 zK8==f9F%yy$9B=Op9cQYi+AHG@n81h-Tsw$>94ED+ivW~UVKuw;OZ;Gzlk5&PqNhT za|J)@$XeJ@v46dl?JxB6%lFWNQs29qSpRC@^1Y&vXJL82pxYa%V*O&@kE~djvb4wBo_r4HZ%;ng^2^KTSbqMgRoL5}d@dC%;z#$7 zd=BO3pO*f4`OV=idG$CP%3$4V?@%@Dhq_@8Ctf90K!-=$2zWEJ)gw7ygzp7Qvc(g&tqMVKbJ1``<^Gu_GB9_|4poa%JVI(f7!Dfe|~$` z$s6Q0c{6NjnqQxJ=IYfSNm6>6oF&hYXUQdUg}g#uC9jd!$s6Q0c{6P3s^9#AtK>EEI(dWKCU1sqPD5{h$A&3ANlufqhHXweum1zXl%6D~$yxFYd6rxvSI8^mRq`5noxDMAlQ+X21pVWGaG0DVr^#9J z40)DZB3H;O2lGEfYd4@boE|Dwb74j;1jl53YAh*ez zVVk!(-toV6n9`HvG&xJ2Agpuah^(ZSrQ=ay#bl|M)ODNlufqhHdWOz5Ty!n9`HvG&xJ2Agpuah^(ZSrQ= z=534DfBC%<{_(IqNlufq7Ecf4D{vC1x_)d^h zL%b>A7vpCjkVMRJ*3CD+Jx za)aC?x5yoGH*E7<-0Pow#_o@Y`5eMe&ro`foF^B_Wpb5VBiG3da+BO5cgWqacg4vG za*CWG=g4_-kz6KM$u)AF+#ol}Epmt44f~-uIYCa5GvpjOPcD+noK zkh@_I$H@tDiku&FeA$P;x6DKFgDRPFK zBj?FQa+zEu*T{8pgWM#y$Q^Pw?9n(mK~9k~*NNxNp6ulokCikuhujVO z<8g9=oFZq)IdYy{B$vrma*bRkH^@zLi`*f1!`>SwC&(#shMXhk$whLRTqW1Yb#jB; zB)7;NayRUKadLv3B4@}sa-Liym&sLfja(-;$W3yK+#z?v{zROdAg9O~a*muQ7s+LE zm0Tm&$qjOo+#+|#-LM~vlN00=IYZ8o^W-AAOso*U1fX zliVVA$lb8_$H@tDikuoKkh@_Yj*}DQ6gflAk@MstxlFE- zYvek)L2i;;*NNxNp6ulI ze4ac{{xxk$*z|fc!J^hha|*kVnY}$VbU9kk64Xk(bHeCcjJm5&1px zPsksTe@6Z=?CAmWDER>SDES5QIr1g)GWpx&cgeS5?|y6g4*7lZUGhEh{jiS?k@u0u z$tTHY$mhxP3$oIoOHbmY>9w(n9pCO+o&y#PEZ<243Z zbLT!gA(*>%;VbiVg~jFNpmgy%hxO@#cmwJ@`Q`Fo?GPszpNV%&QN=v~KDt>GJ!rM!M-OyE3dExE3rNH!M zY3{4n=dN9J)UMgFUR+pS2$n8fEzM)I!NmOhJ68)AE?rt&x(s1=nfgi#m#-}!LF?tG zaB1$H0xG;d7iddOAJH-FfWWrRk8zpIuJ!ZuBMS4EFV0;fZzO^D(ekMMHo=;dq2rFf=bf@vG1ZGdi=*yDv`8cv%Kb*d*#h^A@04JQl7Y?Cq? zPMI)Mm{i*kJvbIzzjl3T?$S})1`|vcOmMt#T*G4;PHQ-2Le!?VAsS(f4w?|PAJy8Y zrS|E92_|ijwgGx*VviS&YB*&=^iVxHt(8pKCYk_yR6D5Q2@Q{GIIZE738xD-#Ew@Z z{AF{&#FTDqQmfbSxQ6)4qUHdxA$qDt_)Dvs)aufU)>AzEufjDfsy z{r|Mce+ra)Hd)Mnkh81iHEY+iDKAb|<$bj-(U-CEfb!X*&18OWi7OzXS3dF{{DAVW zYd6jBD|t})6Iy84FN}46`_KN0@~Qua^1FXU`HYrNYUl!g`_qVgK>v&K{6Uta zdF{V=<)hy3F*45{`niH)*&^cF;nMu_A4jCyzWzUbm+kVJt_`>t4PAaP@+w|jeO$hw z`BNIYz~zS{@*c$1_n`81S5QN*eDphBdCK;ivo_*)e?|KP@AoKC@!;>}{ScNDw{6&a zb?rq&RDS<~JoEYJ5}DTHZpSJTKZYNzuQy%^#7SNJdt(rVC2~r~KRN^9cVG6#$@L%g zM?Z`B2b6ynNoHBWtCV-`^vavx0rQ~pQcjinlF6m!?o4^tRFe`&+YS zpRKJUJ1O_x|Nnme-5;I3)|y!}vu4ejHEU+?bM*F2+cwwL6_WHSB>xVcNl0@@ed}qX zN`7CE6i&4pp0poHb_i?#P_j+%0o{^h>ZuWfNfTgDK|-`HyT*9;=<%+VFQbj8G=nMx>v7(YXknq)yZ06 zdx}(=B-3*3uc7_xl>c-nUw3Mus3e(tMSz~3Or>e1$JaYFCbGVL_0f_tAFdr7e4BJc)pFqfZH+oHsapyv>NTkdJcO%v7KI{S0&TD z-b0=r+v#yS%Gu|1?1$;GdsXlshdw%H`aHiS!2`VOD|=d!5&4tUZ!}H&l*+rDW61qZ z(ZF{&{4s|=Dj4-h{)nf)-Qn9DzSZGd9Nz2j%?@qGQr^ZLXr>2zpXdLG!}mJ;VTbQ= z_(KlOjwttTr_H{g-!Hm-b?E;oALpYbr6vuP$HvUGa_Nnv-!BHrzf16Fi|$Di^nF68 zuTd~pPW9PT%%!Wo4~U=g9}>*e_v4}mR)_h>plucHc5SqJcl*(EK&@hn+V0p{-xQVAm(dtRK+9Kb#yhxuL^6JQ?O8 zbePvC$HKfmITq&i$+0l6PmYCoeR9n74!`LW80PiKVCT?g-@q_WPX>F24*u$-`>T`g zmrjlazjQL#DSW{%oeXvf9sJVCV29AbFP(J1bkhCO$+4f59^$%Rd1CBMqT~8@)VxB{ z2>sJa&&MwV^OUOfx8C%Y(ffClPW3+2xh$JI-3 z(~dtfHY)o3hw4plxw!1S70vagw^QrHg}-UB_~WVWrNJ)mDq3>s{9@r3h2_#4NPkM{ z_kMJ&Ns#te2p%Zvo;0xTtrXIFh3@39O0E_>Ks#Iw1M5Rv*c$!V9m!H<9N3||;Ev>c!BkJHk_$w)?$X`#e6C=o-Sb4J?G}=YEMK>v z=LJGq%`2OpFBF~1H4yw<>upL+(;K7Sy`9F^>q9>BnT4nF6_WYNX$|A5aWFraj>AA$ zM^n9rY8qRo2BhP}*jI(2XPXD;;p?K&@1=s7eqJUz?dSUBV#_b-j=kKGTp}bL&yuKd z`h8Ie9?wj}-fYAvca74K+eRKcTP2!x{3XHZ#SqtbJUTAkZ-{nx=!voC#257u?fKB- zV}Gc0=FJTTS0!rI4|tW@I(JoH0zA{2ipA)qaPjnw%{q7C8-?G<^9bAVq%AS z%DgIkBPQ=xPrcdFlj;3Ne+i>9d5#xDI)3FTVVB$Jp%+X4?2Z)+liyQ%jPqY%`}KLb zs(vu6Q?zd*?tEWV8@fWf$-+}M8tFb@TJ)RvS@RGXKWODLe#ln3=!XtHI#v`z^p}-K z$86?6uT^@coQ*>)hrNYyS|7%VdiENBN%y27&eKDWjoqmPm%BhYi)V zI@tZf#Oj5%m5KUI570sX3xnT>w(%n0^Z;!h2-@@ny~gV|JwRXUwCM@@I;YJ~L)*Nj zyp0QVnD2hB03H0m!r-T&%_8ByK=nXx_WCeoqc=Hi{+IlXPMd#*-r%&&Fz8#IHvb8| z-swg`=#tasKcQdiwD~>g?M|CtgudNr^Lx5BxRw>sVA^cJUW zeIWlfr-R;B1^DLonw*?3_gD@p>R21(X`>sTj_~4iqh; zVW2TFJ-6B@GJhHq)8hft8h*beF+I1M)|uZSy|LB(+CVWWsiw5Pmc;a)&ij@m=(!Zy zKVaO|`R;UMtF=l!A-~vawOD-itm?mceXz@T9&xm&RQ8{Bp+C9wM$%30TzV7f)>1CL zNV>I{OK&Eq&Dutjwk6YJ5o1V`$F3}%9ZM7$L52%qOse6@v{>4x%^_Pod zy5B~SQwEw}s-k0`2_}}}|{s;ehU)ulRfA35CZ|hLyzO?_r z|K6AOKls=C(*7@&WbjWDM84o(?@Rk1{O^5f{}(xbz4I@0y3XmM)3N`TJ1wC4&7WlA zz80lt;=a|!cSnfRIPZE+^rZ3Es<3a0@mq}R@ati{`QH?m9bXsrO+J4LXP-ZX-&a4* zPYS;$I5jDJUa-c#Y_rml-|QmwYv13GnVn_q#_TX-H)dxCO46R~7m7m8uwVF+^1r_y z`~H4Rc0fGzZNc2SIq80kdAwWv$BVjKobZ(3#Qj#m;;8TMx4ysMl6^$Kj=g<ZtnD)_l`$@q1?Z}U8JzHj@mc+SfCtnIT71a_V8n;-a3obTJd^9<+vwr|Vy*Y^g4c-{8BXVCA9V$7WHkJ~3=Kh_d3nJl=N{?vvX*eJk5Zh%sFB`G`m`G9 zMbf9&NMB33X`b`VbCmDroh{H)MaSn|x%MTmofpRUwS0UV8Am%eJY}cY)VD*m@P5$L zux`co?~b-vda*JstZ%0Vj82aB8*Hvj59f)e-r?yZ23sl(VZA%`qn`ed!L^kce!f@; z=bC$pL2t+z&K0NldE!(*N1W#8htvHzQ-eQW^7WGXW~pZEYNKFkSFiG1oq25QeL9ay zA#RBNy8Crw-LBd^63{vMR{9LhI}i|4Y|8Wi0#R+~n`ther z>Q(yO^bF_og}uA%E8L!?+cAf2Amz_hamWw)5mT zzo6GD1K1+y^RNhgou}J64*#>FbMbp4&t3P`NH3D!rgWYMcM8V&4gG_nyB7regT6`h z(?MRzVV;b1vwxs@a$re(Kzkkn+~%}BCxhPN^k#><9qx3v!=XKwgZ~Xq-{a6cF6noQ z&abn%_i`pY7t4?9sW#QZ__Y;|3+C79%=32hcb-BOY9#_Tpbnn}f1izi_ElCM<99+3e|@8%k8cCC*%S8i zu+nq(qWzxrD3`AF_WBz9dcJ0MnB&*;wQFne>-pO18tHnzwo2*9XOV=#Vc^4`jecFB|BX3dZ=yyagSD*B2&ku9ylGoOwT)O1F zq((iG*Pbip_$65|vtw47X$ zcV-QK$!l>U^4jy#jJyrvN8W=q%1Pd7HPR)o`N>@Sl6OiCe#vX`e2!o8*45ybycX{x zuf?kwdBrYyi-NiOByXuky5xOrjdaOt>sPKG$$N7Re#vX=V~$_)zDE4WyIwFO?>f=Q zYkneEPV#P1elA_|+KEFhUGmy`noF0wn`+b}c{kQbm%JO4j=Wn1GxFN{j=biFbL~jp z9pcZWOI~{plS`Mpw!Y`mCGYJu>XEz_N96b=@9V{nymts@^>5|vh`5eFG z{lOailJ|`@(j~9OS-E;7?+=I{dD{gu^4=pFd289JuN&NoS zUFNlt2Hq#NbtuH$7|Hsuj^0(W0;N5r5J#T5TwT802<0rEI&--x`Eo_d71gru0}45L zRPQC3{JLDez|U#SNn~b@(sECM)EDr@bbl6{uJ^XGUZFT{5tY8 z`c6jp-l^4hm$jM{_&%kr|J@c%an51U7W>DAsx?XCIG!>qV7zUXFfS~+!*0$E`-`p? zi_;nz-^(dh@b`wAw%!2SJl*^z^bV(Ooq{eoz1E>w1nJFA7af}3NHGM<2U#@?|VeW?<2hY(5a?C zyZ?LPfj~|mbg zXS7TD*x1YO_x9rZcT)x)3H2QMn12uJV`DF>-dwqd+7~9)66a1YDc|Rl&ZquOH2QTt zj-7V;d56zAbUluZil)6^cX+>G$H&G-1gYnkVE4l0R|Su+O03*mo5jdwt1JC!v+r>n zi{Bsje$9z`bUmc=e6IVYf%(C2@m}^9R6lg^6DP-h*J+zyDcb)jJ_c3)2R2eo*&yaeNaBO`+4PeUl9B= z=WC;)gMa2wy;1w5cYP(=4d+W=RepYa(f2b-&+Gf?ex))#PlWF!-ur})(-XdbKl6B; zmm7~U`t#?i5BO&e|Iy(;7<^*vPaOWS!!J4fBZq(J@DCiCeeu1-FFI{@2mPl`|GmS% zb7=i1|8JfC8;5`G@U+9fa%gr9|9=y_}W+=%q=Jewn?KAN6AP1s(Nb_6QyIVs;1}^%Cr_su!Erq}jCD2Ixo9K)>@|q1_*4DR^O)C3{(C?E@`zxxcb;>+ zQv3d8mCO6Rv)Fg)*Se3WH2(KPLC?A88owULH+=tm`qs+F$NpLTM{O1ouYP>&o1*bA zFIsxP?xa64_6;H4pJ~kZe-YjNNLV*9g1w^A!*akp;0EA2*9-A!;VR`vz0{c3HTxao ziH?uEpa1wP^7FGEP-96l#pS&}mG^>leGUB%sU(ch~czel;|MY+&Vn7=38ZYI$m{K0;z`DQ=Jul>vaY5CVh`6tsW z`Tr`p;ymYh+i!}_&7V!3^b5`Qds=m5KnI;{e;r- z|BnhDE$U8u^61#l2*Hnz2-4r5aQLtwapqGFf8OCI9ezR({-1XE5r;qJ@FxW+|BOTP zL(rdg`WGC2#^J9D61N<4`a^=_$7O6Z_x$)+-fo^QsZ=_yb*I{ljL%~O!M*ytHk@1S zX-oaUTgBw{7KQ72x@e#|K1XK0nF&Pu8Mx4Y7opMk8rZ)t5|+O2ah3lrLecYYNDQ0w z{jeMSeMcWx>No$?y2{EY(B??fD5_L^((Hu}WJGY+3}_@u)V4j*>-ki!QZjyOE#u;1Z9hiwk` z3K9=D2#$|~U)~$zS=U>7Zbd&$4)(LwZd@Oty+YeM0iU<;@n!W~!R7UR>JwpI;=SV| zk^}fTLCzsY1*zv5LE8hwH8 zw(h+{Fmq1yE~lpm!f#81#}Q{bCwiNgtMhWU{!njh_brxRJtw-?`B{Rjoe`&FyKfhr zIVZAlV81|q^_-}w&Cb=v#H(v+QWyNhf*%Xp;wDc6h6 ziGEDwfj{cd;uGkTMnB=dtM!EcuGSO&yIN29?`l2azpM3x|E`wX8T+btdwH`r==VDv z;*}@HKH_wUSDpyJe+Azoo*v?$CxV@l{$Wo);n3oyGn^BBP<%Dcbu6Bve;-o5&l{Z+ z{kZ5eoD)5+{2KK=rgX}GOfXZQ#gWA2whzZx?oz(%U2)d)qJhsj4CCqNilm3}e1-OK zmT`YI=S1(5Je(hxXC^-V5vPN_KN`lL{9x~o20MVR7a#oZasDu$9u0Ouewa^>hWI^m zPGojM{#-9_;{rX$X&XoAcphTo2OZBtY}}yZIg!~j^h_^rb`2fRL(CpC=OJd7PZz~~ z#&aUGTk45=G5dv%dNDhOj(V~98#?O6>>4`i#q1k8>g8bxkU1wZdnZ5Y#q0|@>c#94 zI_kyj5IX85*k4sIHm}K#da?Np9rbd;+OM9U+5EzOt-p6QDmNL!k1YgF%lofAjRom> zUdFyBv)^A!Q0XP{b!ZZ{qCUGT>Pf}>`n)B-j;4N_^Dn!)-{t*X7U=0k)7z1_{>F2#$@DRq9$c?F2Q$4+(97mv zUq?&U?zFoCyy>nH(PLxhkC?q*|8$#ZoSx0Lv9Uc56>f*TJ{PZReXFUDxz}0o-1C#M zgBk~}^c;-$A53$;?`Zjau+tXjOAap#?@tUY3x4WADBm!!Ao#Jkj~G}N)~ob;1`C3p zO80w@g!SQo^@s0;EePiVt>#^rx33H9+kukAvwY)BzfUwX_|XHFZTaSBTW$7J{!PJ8 z9%wTL)&Cx0t?fo918)w$i+P|w%{NPkzxNEkN#c5F7`P{_>#gT|`Fq0pnSMX#Jz-r< zzn@bwzQ!o8_p`Cp=MCp_JH(NGZ)uJ3^E-_%Z?W{E(T%MECig!2a!DxzGsFDK^!rJr zXZmgPGt=)+SbpsHdqSLWU__~=H}k`-?=V_=F+ZEpi}~SHFU!JtN;>Y3g!rO$sh3|6 z&T~?|JrdUOR`(MFkA(A}bllg4bD>sSbGzs;hWcHu#@1tj#$FE!BTnxW zWZc3$J2|%B(m&?k6F4ze63zb7ApXVl3~dm4qvzYWKnM6(_&x#g;a=r;JRW|>j&tTV z(X@9`FzxTMa2}POlPnA8QK`PxjhzsGZvUNrkB;v#zCro9{bVV>pL{?}oHOi6lHV2L zw0?IxtP|t?SSfeT^h~}!{O_phVO~Ejn994r$8VuhiLas^F7t6LTC(QXW5VM6htKp! zeYWmp>N}C+GyTJ7aZ!dZ%;##mEh>j!_+h~VCEd+_?YuJ1GwQK8B2!PW?`l13RgifU z>|8{sC)jx*BrxACo=E5S0=M%!JpWBT|J#gK{~s2X`j=&H7sWK+;)SRm=GhM^Co|82 ze;P3UWZ*sSKSzvK{SOLD=jl54U#1n)L-1d#j9+$XGb**qN8G>qJaqjv9)ILztD$vk zCA%&YHnX?juZqSe zKO6kj;!qCS;)!$|9trV8>)l>&qrt}b9+&&I#@2U-d_TX|`LjhtoKqiE4(HIpU#xR~ z@lp2|kGsF{-|^!d-1NbF9>G6&|Cy&dR1f_L`To0o{O;*qrFT5(e&S^6C&sTQ%X~eV zFK*L=#m%YRt_$b$|Ev5&eC}|5e|SIpfza&KQ*8k`eqn(3o($vr3jI%gKK^KbN7ApF zc#d&IFjvon^KF+SeJ&E^+S4Due-q@nyj``W@u9xI_DqJ>dHu!c{Dud%B8oE z{!e0{-ERr<{*b|=ZK9GQ^ov5=Zi}BE5kQ) z*2C`z=JkKJb>QieN~P;b-P3JGCi!zk#l!kP86OPU_B-WS`srfG2yt_={b}cm{GMN! zEZ^C)p!&~OlF#nw8XW8!EcUl|9O@b>b`JLS7dr;K+K0M(4-|X5ju!X#^c^iO?wpxS z%jR(7n$E}aUACD@%-2hj%Eh*4f!@%d zgv8DkUQ2sQTgOMMu2*f}_m~GQIokM~$47cO==c_3KcDmY9OEMwC0z6UZG5PwpmeQ# z!XE@a#D_Wy4+B5y_zB?8IsPP2Q}Y6No&t_GaO2V$$>$uGJip^giF*1o&(rGlWyjA2 z|7+(Hu;h$x)HjV&ek@|T+WCgpbs_k_INk*QA6~D@7x_fpE{2D+M5z9-0+9BuG?8YnsX!G8m&{xHUcKcXI~7CS1O z28y36?L#B@-;&^cPW2_7)UsC-(`9RhMe{&<Hj8{;#C9lK1Tz@NKlGxuE)9W#8hM7mC#5wrY0$O8X#vj+~(n9o~l)__BSt z7P^-G(3Mn|HrzhuHvb&Ip>|oTUUI9BA|Kh;YCc@1@9RKHF6;H+BYZR_Yxs=P>S334 zEp%4a*N}HFl}g7&@DBoS;=@(<6Wng*QvyHf_z1Xk$=tDeKLNaj&uP*>1uTW?>z;90 zHI$N7{9HEoZgkVD7$0I z)V~%8U;P__*l7I`AjR!}lfYXqe~vu$UjQ<1>s8-O;LAYf?iBe`e8m)v-)!Iy08!f% z%@=(Alpg~k_Z0P$c{1g9f%x_*vUmD1l`>k7rY;Ab4}3k4v7Oolr0%Kr1L^Bj=@Okx z9R)4`eg%kMo+>$*W7Dnx;v=U?_l)5*^#|WNO>z{09{?@{J_TF^d=5yNY2N}~i7TKD z&Bf`mgC)S-K<3YM>4SMY{l|g$jp?5TGB>CH0q|{msz$-vE?evA-F&18)R&0M`NE3d9a) zJPgG4X8aP6zR&m~5ZjvZKY)zwOzF1-L{@!ocjj%tTY+uB4Z!<=8-XW)n}ELt+zk8+ zAiOjGCvXcxT?B3g!kfGfcnHW?og=+$13n?axfD;yezSAgZA__VBx1z|&yf!3%Q>H# zWwt5#W_^$Wm(P5Gk1n+ruN@$xPV5XtW_<*DFL=q*@22We>Nx?8y!9pUkAXA3^&{Y) zaQp=LFM?yE^`qeGw{YxY)@L0*4X$x!4C`M6|7-C1g@8*w;f(*Re-h5uzyBHhUp*bW zn)MyWNt->*@qYuK=lH*atFO$5`j>#Zevr8Vn2inTdzn*DgUbfMRmE&-x0Q;L_O;b_$@jP&s^dG2Xgn{{T0Y;hMdV8{?^K_5p6&4dsSZ z^#IDwrv308ZE)%~yad#R%_Jj27+_r+bfaC7*v0JQz%5Dxmkl#U;R^f(>}vK86+#mH zNeTMHnYMq1G%qvzQ{dR3@%*aeBf!`;eVYB7lvUM@;F4SOh|A;_UJ@k+F8V$D3-GIX z$twOoT5+6~^|_#W_C zj^7E6z1h_OEFoqlHVlIkvh8;O=tel_plyvC{kQ9$0OrWlwUX%upfY)Cj_&v}<{#))R;Jml#Z{+yq1997Oa>G%xrk2^jST=t`S&H?`| z$8k$@zTi0BoTKp-&m8{#!ST7^%yp9!9nU4tc!XcXAx;pusCjAhwE0|cL<`QKKMWC+z;3dO2<^penU%H~6LO=Ki z93KJKSS$S@M7al?b_*v+|5ZSUtEpf;U>J1P$M+H1AHI`!-jZaJtT=-7Zfb0PjbT0_l=x1USftYu*FSqcu&L zk>`DoUR6Zo)8=ovKg6RHo3Hrgh{}QA&5iY7N(o$Zow8F#z~wU^20sC=_3@Sh`&90C7*aQGWa;C}^9{S9s4-vCDk4I|*+ zcKigYz`Ys&D7ePr=h>eC?D{X@CDJc~`UCJ0@GHRSi6!juLu8-a1O*Uuk$`CoVnWo{)^z~tC98SykB#?2>yA;(fxUU3Qk`dOW=P8{s8z0 z_`iZvzHyY$MaDv#>fZUY9WR2bkLYk-3B1|yHt^Sg|9O}P=idsBJo8SFzTNRB!S{h9 z+q|d1W#bKgsPc!Aszj*Lckz0sl1kF7Q$C{|Zi>=K{`u zmK*J!OW)7`5;*p8ZV{aN3@?HIJ-B$6f15&13v zT<|ov7l0)`UjV0`3r6@n5B`t9Q9k4+Ukjna1^*8Id*CI~WuIRMALXNdz0>gv@iQ8~ z2l?na8i3s;U&-mW0^2Ba1rS{(Bj76o)Y<5TYr%DPj_eoSDjY-oDexVRe+2xEjx+x* z>;bRibApeqckme{UF|#&)}RaD1NB;Uzc;wTBKL^zHVer$We+#@H{|UHoj2rb#DFSuOV#or8kv(ms+VAG*&TP~a0IzoPj^Navhulg4~xh7StpY)~&A>XMq z@DFi|_>*2IJhs2S&sdVCUj*LIrzF~h^)ikdU%(5!)cGqe=exyEotTyB@L8bRw#)gM zn@w?FFWLT>%=b8pWR|*={ujU>4(Ux_1-{que**qUz{lx!K4~-^^q@-o>HsR;M9idX zJeAI;=_Qw6K1>NN|2*0AZl&pR*y{A(KFm6PZ9jr zflu%$f&Ye={b}%MC&*ye&p4E98Y9Uj`#BNPFZv4-V)_fDo%Hl?dYzAQTwSR0Snfvy zPddJ2FF1#^!I%zwEQ5b6;xI~nJ_|Je9uMgYv^#;{*i8Nk(DiBOzmlOy-){h_{*voK_y`{plA-Jq?lPmA z1#g3VN@?Ktb8|f9S36!d!PXYM4*@PlMMdyO$aj?gqPs?9mm^a zkAnXh_-E;<(!T;u`RT&H3jSM|lJI{3|LqW;FOU!XJn=K>78g7Y{vbTxg%XM>&3_w?L;}@H-Ch9J>rqSqF=f$ zmQDQ%AFE%Z;Ft2@)xcb=XM@62OKs^h!e_@s z5lQl2byMfKu!oC3LL=VSi)B+5ACUfW$BW=U3y&0xPA`_+qkOn7#tsZ00sk%Vj?mP_ zzw3A->3`yQ5&X-Jw}7j@x$u|3|2z16@Ezd);`mwVWNxPRU1io2m;8$|{5kr$pt^)p$<5zpxCU~@7i7bI{2VUwtKj^s9dmSGE z=VLsh;6D~{>HZS=Cd#T`mwe9g5%8}#J_`PCw8dXigl}0$=bjW6IbNa)$s!p>0P`Fl z1z$ix^dKX@bQN$LAFfNU=k_?C5%6{JNDo`Um9Meny7Vq?jJd|_(tSYeNL5|>CfCEW z;C<=^m)09g76;@IdBdb>jVVE&25OwSQac!h=j|k*fA#;;_kuqR-UcomA)m(Y(hocS zAoxcde+c|zj#K8+p9fdj6X2So!bibn)51@Kf7biigbW$Gyi{^&>_@6Ll$?Mzr3iA# zzfnAyMm=8yQ8$s>;>q6!=eks5_C-D=KE?pRr=<9E!gKS>%1ZfueF~^{RDbjt==IXS zf!wS#@NaPYBSVu*zYDX50G`>>)9XX}Wm9c1te(rx@iFpeIG1Ttt|pQHvIW3D^)iZ;*Lzd ze2nrXLJ%X3f5SL<;y*Z_^y%XhIp*gO;7s0g- zsgLyciobMxEl}6L^C=0b*DYM)MWm4AeJqA7d#4f9`uHE77UhS>`uIa3-TEkeM6~y@ zI62Sa{q%7jtc>sC!$8T;wOINT-Uxmi=z3fHR>w=EKL9?LHrl}7<9H|d`-K6V-I{I4nD0PUH07lCaTJ4T#^fepv(SBIF&;#d%w^7SIj*s9j=%b~dpj-PK9|gb5 z@zdbz1CAKU+COu=NPMe4Q)i(Bk9@4~HrgWAE1;vo2vS|KNCup5Ekm8|mM2 zd<2>4o9d}Mf$vnGg^$AXUB^%JYMX44^m@RJ%z*-aw7v*_spBWWHHPp^QTnxxm%wjv zybZ`zp!}2(8>fViaI9>#D70x5QM7ry6>IirT8PqfN1b81f^-LWF znuLN})MxWRmDWmUIITq~nf~2)jJ6aH*i~ou!ae~iaGu$J3VOa}adVzd(HOCKNV@Tz zpp5a2?{Yi3V3PdPW?)GH8?IIUmLK)<3ns~b%JVgk)V{>Yv>(4$@Y)&P&Skah*|o&$ zDJox;aD7`h$7Qdvez08!>E9wg_`|{#(1*PKE5#Se6tIQezb&JIrx{#xN8)QS2+$4V~)MpRtMo9lV(r)H63jTEga^2mT;t%$I(mIzEu2!b7P`F!_L=i7M(KK#Pn?{z-K7IxKWmo@P2k2>F-XW&~1 z->*8~-ZStmhVM_D@18U8T>;;}Io}%s-#xQgET#s$Ap6qQz;N6eP{TK6@U0nqTNS@& zezhKzv5WOfI<|{33BNZ76u!z*11?+FRpk3(P1M7muEL4{HKv6Y$FY+_EGzsvPsi2@ ziY;_0eQiKxcZGG1t6#0)MLx(-(7LpR4>A^Z0eko`*7_>GJsV>@3wMD(!iTyGcLTr3 zXCe3x0AJ*T?h9|^b3Qowy{Cxqw6CjhQ-G5Hp62OJfUn8mTdMeF?N$7qJ2Lp48N4ln zAFJX`&sOn!?yKULEvVvke^|vY9;@Q#&aLA2yf1@)D1$$q!9SV7e>ugwdxw&8dHv3v z>+de_+Ir8X^6tBLY$}(Nq2v8s$>H{6<*weL!S1d~(%H?o9EZyKGGryuz1-ayVR*(uo-tNBMq%zo1KHT1sbXJB8itg?=5+JI-Z*a(HLxu+1dn>}Km34O< z?k}4-hIRCHb|u~W%iX=5UB{B)RcjDm_u<}3_krH7&SK@DY8+mx^tILGj)U!k$?&zS zmCQY5mjbLihr8%#hxg41Iu^d;T1oaDA3_V2p>||D+}GPz9_l{aRUWD&UA>*-6ZZGC zA0T;fu(vPiKQvU<*JIINZ>1c*CmNdLE2hctn(HJE_f(voKECX#TeT=c^t98sl&_kd zK$M}bNT`i+NBeN4E7K4K86&axb{tO*bsbOaJFN_BzgN|M;J{$l0T?>71IzbX)4>fm zHRTfRtFxh3(HPW2$ECN_7(BV+s*GA-s5`pKT}Lpm@?iVX@}d2MU0vnMp?zqS<__)S zo4KAQ?Q>dQ`odlQ&wo#>u)V@ zZ{1zqxU+S~j!hfOcW>IAC~ZUQ_Fa2!-?Y&PWtMktTEDAxyD{(Dv1!BB&0A~cmUp#o zc)eGWEw|(KyUV*-XV*4?cWvRpSiH{5yap3R#lWLu%~?VBblRocFN zl} z+;HvcYs)*<-&I?%t=sQhzisQr@~%yH?Af$^!z8tA+Ev5)RexIi?(H>Y->|K9SM54C zV??bxHq|aBeW2%>RcgYWDW7uXJ==F}+KvO5RHd6+%k+28rt*%RSVYZsTH(<+O~}N0 zTlehV-nx_friog;b;suNhTF*8QQmah&P}@}a%|mk=bDXMcdfs5TMaARzG>@iTgn^o zOuIM96elzv7?d?>Y3thNJvDq%D7BB$-<`+&-B@_sLva zf#&YlZ``78)$F=U(trL5`5nJE9bN$2&CE6l;dwKWP+cz;`CTPJ} zG^aPOpSTdo#oWGi`|jNnr-3FBrnj-YY47e@BWU^C&2npsmdW2jB(QDk?OP`bmtj&< z8(KF`^c6Xt)*ZXI5@$^4XNGP2uJYuI_3i8TCKkN54-))Uqa+J~`um7quOZ&Krkb(x znw9pquYdnFY5ckJU;<|`<>D9C2ZuX`ijziR#bs)5Y4P5q$W<=y8}9Dm$5YCOyAD^n zhMJeq=JI08@?xd?&0T%_n<1AjeNED`Zk6%Vwj%g_T?)ZEojbCImMe#-bN~LO%ZqAg z#VypJh>uD*g^D6JlnT_ zKXN94N_zWXPxc#?^mla~>gr4mB3XI=U^}7qetOm3L#&zf_bWa<-qF*QwDV&zM~G05 z5kFT5K`Y5ndv}lGeJg4b5r__Vsb2}9_aIS!m3eSqueK^Z-4!~}Q#PWPe8sCrlFslc zS2_mUhdK_9-vA_o`vQNt4A$R1s2G`zRo|d;2D=X&91_ygwV$e~zpSp%h)`>%awzHU zFL!pScTp2VY#0u+=OQ*fY-pJt9SXacq+&Y}-K!grp$_(46*g07v%R;2ZB;^ej(XS% z3PX~v{cP;$OE4xFB#87-F3a+?Ym3cCI$@XAH`rC~+@JLBFPr&E*2?hV!;DE^UthWJ zQ2X(u=eqL2_R7Jeax}oB-TS-C`njRbGMgA;{AvP&Ti(ycja^QAe`T2cj`j;im1QIy z)Sc+&C4+27dfIz2QGP@S-MX=4(?W@kzQg@JT|?|kj)sIDHY{v#QFK3sz)t}&F1`D^ z2M;HOf6&uA`^DQt94*TnX(%Y+c!PRVoSPD;+jqVSC$uq@qdF z-!(XNoY~sjHJI*#!v=V;>#+3$aeMk0afjvoN7;h54<1SrdakXe*?6&aN4xt6`wmxI z-yekQ3c_@DbqpTw7gt4_`vZf0p~Jm>5}27(>7Z<1d00QOq>h9Qc>iE`-(WZL${xDA z_a`=Lu1Jmp5<`bNx)YmU<&OSgwvrttZRjE<;9LG+Jl=DfJlZ#S$V|Iy&=WQHoohm| zT!9R$89=#wG_?cU#fR?s$m8F-I7H}e@9);u7o)(8O<0rEe`~68(RD56N8L+T`Z^93msJiGZ!V(e zm6b#CwAUF&SMTs)C1y9g{2-O~y>JKD8pziefA{`kvuEE@%x^ukNly2@(f1d*hS&11 zIyfhw%9c=%QdL*wkoY7ZlOFfLjA1571%t=R@(w9hW(wP(O*N&XukTQImss$wWl>+0x|XHFCL;TU@Q4k&Mb-{8^qK^&HObJY`mCX5Nvb=Vr} zDdVa;gr=iyt+5zc1uSz60onb1J>8s}fN8pSw09gdN&Bd%T79Lr(+eI|x{0I%h_aEX z6hoB(KXOqP6DA|QmLqu}D`i>kT4K|APb1mdJLG#bCc~Uc9V#P-TzQ{xA)yD=$r=1Z zwIr*K^+rd0URg}CB@xcSzG1|aPgSJ{Dja#~P|$G|w1p4ax*6Oq)X=fuxkDLzT>HKr zxs^lZLtTTtWiu5Byfzx`5Wn(La?nUEr?LraJNEWqHw&Ixa5>U5CekFI$<#%Z1l@yv zaHOb0lsL=w6Ll<7&>e^@t4Zw+6H__>0YfXw&RCWz&m|4pSrZ)??227xMcI$%*f(4` zE(7XOr6~c{c|fidfx6&|M!%1FQSLuzMrj%05GybtwJDDYk&dvf->PP)63zrcD+h;% zI{S{=)Elbkw2#C$vtk-Tl zhDjf!5$!`E#~{+80F1bN>~Qyxq7kdmBN5?)T}WqLA&yjeLek1m9}$tYJ=igva5AX? z1hX^-Mq#zbPxP?r$vVpW+Yfj5NJtiRJ9ZUj4Om**lu_ONN7nT9IyuQLzTTmZzW(E^TnD-}>Z~Bg zf&)sUVH2}vVpXKH9tE~4pvL;!72{P=rB}tO%A|FZ({yF~4Cv5lyl|bCldKW&+EUbN z6J;DMU#Ie;*MQex)o04<*uGckdb#*pOik*Nx&4KtS}2 zAYcd_mfSVhQB=ajNyN^A7`ltd%aVtVvK|E)!yF-68}8|;jFYLFpqjdSSpemlEzluB zx;pBbr9P3pYy!kP7#(Ft`6#wW)J33ZAv!~OR4zTR+H^B#A#u%VFwdEbM+f*vSlzu! zQI4aDInG39>eVC&E7(5RaWGA$&_K$0X+gpj_n^j9GBf={Tf;xyC{a(cf7mvn8i^#;qPN7 zW=q_Gu3lVP2rBeQ2>b2oA=Jgk_u#{EM*>INdk#^kXCPF@bnNcMZw=W7k5I*0?PYi9 zlRUaHOFu%WU@|BOKE{^NEF_Wl7(D8VH=U-`K)`}-Oy^AgN@C3Dwp{KBF2uSJYGVt+ zbBwNI{XApi0n~6WJI^SX#h*u#!$Hine?A$_F?8BgvO6=My`Mcn3-^$qRjKl+i7`GJ63cu?%hb;elF~V_b^y&_4TaQ-_w7zTVDCsH|3ol|c5|C2D2lBp)73 zRIj?BZG1qCCxn1yS&%&lJ+560`(5^4+58ZQ9_;Js^qADpV57PdNG1FFcraSNRd*{o z#KzJ$scv|KT?1HfSdGzKSJKxnGhkZMXnPM~O*?mtzbgP@7*ST6OuxT7Ny8e=PctOV zF70N*Y}A&1Fs>4Ime9xYL)?x_3=bVy9sNv1>!k0FEY4##YTeq;&-@N!92mfX{TvV^ zhp-1gxGOZ!;@>yy%YVQ*hS3gK#@F4asZ3>=#kXZ$+|6iLp=-kVkyhRGuxWTLr$)`} zNtP|;9BRcanT-c~BVVIANV2N94R#?iKM-tB9OIE#v-U<*8EOvaSz%-3B`2PFb$4cu zyt+HXiPvh0f9+apt-Et&d^R2SYId%rjd75MwXqn6TRW-cw(f*IRrb_wc&NLl!ik;9 zKT!;xwP)pk%m{M*wV_yEgI35-;8X$y`sNafV-j?!L%bEY$aIQV7Y(m&qP>M{^`Kuz zX$J{naLlYFeZzwtT_C}ipo6R;HC4?WJn7$`z$T_@#HZX8tUQrnth(!%&M$6c z+PJZtr4us8aLgP!gQAyo_ph|DIMcC^5LBwl!%?*A9DPM})LS{) z&Cz+WIVwG!sS~FU3tx8rK!%Yt-+jFsO5SB!AvZjgsJcw3$%ZO_E~$0`JK>SJN^_jN zPDA{uwRwQJwz4Ye)CmxQSW-F8%PzRqeonvPNQMUwBpi4p9Y+T_^wu^(N#*{b!Njy= z!QMC@M{_GfThU2aY&d~Of#l&5>&t&;6R(BrC}b%@boCr zduB&@v}5Os*u4IGgLZ60&-@z()Z!;hhlhqki?S`%WaoX@ht;}LhkqFhGX}MjGKg@7 zyjq4ktEK>+Q3=%l0zi{tFWy=MG)ugMSiq>Ia|9C5W% z?V{9AQ$FUlBw128qYY?yWmAl04s@9TAz7z?*v2rMQZQzOWA-wqrEzvsHq#j{;|kh4 zkFd=UHrQ@ea5`qW-JNWp*~GGYRm~(v?mj}3L9%hZoaJ-s-kI2`HqTMr{#Iv-P;JO1 zbnN0u7AO5>c0n9D^zpw%26^(_3rQ6^1PI&S$qjYQ!If1-oWWjGzKq#2-`GfmH*N{6 zuxxOz!xnshJ(Xwl@dZxvkTA;P^?s+jP>w?mH!n%K{54Nj_s%%275=9Ap_YX=7q|0L zOI%KQKefnFiamtZZq{1~kB&Lc<~ee+*Orso-|PvJj}x4K5)&o9H|UT)uZ#;oWo0-L zsL<4^<<hWb|GWFOZvm^?+yr@^W)^EQ% z_7asbX?T0}Foz_VM5VZ7i8h%g*m=MBA!w4kNyvT7MW zJZx?-@9ZncXBZF_pHRN4s;K6x(X-pvnF|En!XB0Tib`c)Uq)CPzE@MQ`gSv=vkx=R z(!K1P(lQ8b^)v0-s}8TqE);u=AB|ueoAz$qwL8uz38h)}%1p$%5Z0;5>?HlSM4CeU zm!XV}yfwZFoxVoR{?eW=4Dn91`p>#*k6Ad0?c_!ggLuBP~7pJ#B zEEK-ExRH0acC_x?U3|-1+H;IxX@EGxoPWY`Cf7nfZVw1R5J#k<-&OEj5c zi2Uu4z;^+{$L$YIvuCa&-563w#B0`}y7qVTDwW#r=A|;t#w8*+IbEJH3X)c`z_E#G z@2PaTN~%J4cVbbYj^GTcS#f6qgM!bhl4C~IdsGWm&A|#q6R5=+^Su68vdXGH%7WuM zHEtP?O=2>!+ctXH#ab1_OAGgq)=P$)R`DG@TDv)}Y**9uj#S`ML8tTi{VS^p&$VFXhAzt$1 ze1)gxNaE;%5aW$VMdOh2Qkq_23&GASkcpytB2@0<4JcMyipE0KIfvKMVKF|(&kAtW zK}zr8xNz@3AE(v`Q}J69EI)>9*#I)5m~r-H=c=(lc25)2vffnx*3g_@aH0%FK8i^h zq^$5wuas9K5f&^mSKJc(a7M0LWz9|H3Rc5*jc;12MnISi*lRUJER_2q8(lhEp-j)J zCh1tMMq(t6l~l8%RgQBsX;78fq2Os^5A*&euGJQVBbB{ijN#dXAiY)06H9xoF@5KZ z7Z&3)C<}-5vIDPE_F>$dDeJ*?dyiph;+iyZP2{xatbx@~tBJi>I|p;T(n>cIy@piL zD@cau#o+MXZP*VVJnC=Z+U(%f9K9p4FBP`Gqg`+N@+CgR72&-|vOyT>{%FXxz=KkP z5s&5ob`ESWWWPqwlqcpTD~I$Rvclo+jw0_5@Ms$_RIJIJJ|{|*t2Yt%h1iL`x-9Vs z5A}-6qGGY6=8&?qSuyrfa}_byUJ?&6SGCyWMS|hjw?=Gp(mqa=9~|PX?`A!p3J-$V<-G#FJ9)a2tvQO)-Jg+!CpeP` zlD^m^17MNjZN%p8{uQ^x5QI}`S8l$-#Gw zgVQsxWI9Du@0;;m%u?B(eKB}xb2N?>LNd#>WC%MZD{xb~0A?yxS2H{{x5=(hb%1$M z?&tj>+o6TyZJR0<$!lw}s``9PZf3%>We&acMs3x(8kY`fnB0f^=~Zo)ZfrURpe2~9 zB3Em&HLCcQpqDk*Ev@ntZ@Q^??dmG06ra+Bhytn5fMB&aVn1p|?@(bVw&frY#+u^|OiV8OoLn6MRBh1^hVYNgwB@UfbuYzB$5cgBIXuT2JCE zLziT`;|fe%943|hj8DfW?RC13In!hLGqhP&qEWDV!2l6*P5U3YIU@0OtYM~lW5yl<3oKbvLtX9Ku`Pm*PiQ6JAzJphNq||k! zoA-r@FVvE>V~SeGgMx97lEzt{&3dWLq#OTUVCsQn16(elSkmp_8|pmW>rn za56S>%5_(ewp5+s#-d(iSz?i(H8U*2di|zSaaq=YGz{Z&YtQ?MXF^LRnwd@6jCCq< z&YudJkI-VH*?SASfvPd>C;4MBOE<<_XgiF?$M%3PrA6_W!wR~11T=Ey@Gp$U;?UPf+5D$A)23- zhKNrv#WU6*`?Gj)vL#xj&o(Y5e)O4o7H5kKM~}JnB8{A1euR?sU(;__%3fw2G3@#yGRV}A5k%u2+(*cQ^$Uh9IAzrLA zxDYj5?atY(G;KRQ9=C^|X|fqm{*YWc(sc$GAeqL$P!Njn07z~zy6<=lkLdR%kwb80 zJmHVWR@IkvEc+DD|v0Gw-3dyK#Z!vh%Klp9OSUTcJvME!FKQ=PA;>RRlnH4 zLlI8k?48TzB_aMXqp7}rkg1MG=PjA-tr}Bj7lvAE_41YJLKS88!S5aPboO2~#Oh~~ z@%k`tRq-gIsDmjNdu4GWzlp(j8$*D*C?{BuNgGl+A5W^(kgk{+4f*Eunb~+%N~ox% z%J4qEyT+(Xp+OOTC}|o>4;}qPGBjharC2^MW>wD@LqLhdL;R8n2Y%)z5*0Cp@x%ew zYr9p@%sTPb%n~x5i38ta9DvEWIK(rqmUZE4NjXj`nWT<0$}mY88dDBm=&+vU+Tu0# zkh?0pWuMFDRd&w~Z$#&^dGXz|!)`m5%{%eR#u@OaY=8KN7T!UNMI9Xk6ADo;HUA5&POfZrZ3wCVFu5oXqGr-kX(p_72 z;33BBo9QcV$-U#78E~F|Wpo8~RypE!3tOs=9tB^mo~%etOXi-UE!u0$c|GyY_t}Or zuc$S6GONq9SG9Yotd_p2{6TH;>4?9<7!OPM5^X&COyaY^fP^nM+c|sU2RaFFZg=o= zUiwx7U-j*5ak$Fi>Ljxa;zfMn@Z4)1Ugsjn@95psm1VB|hxyLVnZLo3@?}?wGbXNF z6$J8CCGxJ+&lvN@LWh3siZ3kN*LsIyZsI%7?4D9v+%%sjS3Cj><%TM0^2&YuDAh{N z-?$I<$=UGhVnJK7FcaF|Sr8RogNQ$0Jo@+?xHG5YY+)B#&mKes3iF4g$XzU|)IWd*S5{emf@l+RxZe zcNhJqy59@rv*I&JvXb8kZ}<*0zaf6kuL1oxz7u{Yy+yyD9)I(j-^jo5;SA0Hthn*t zp!p4OU4@JIS$tY5@Z0?B_|5qOzaM^+esg?TlHBsB7>q3`@SFU%d^SU0%Kv3po1qti z^ZV*1%j2QUIbVYQy8raK@}Os3nG{Nr?qCxtE4Q&2z1kC*<}i18~Q{z7x0=lxVt z*oG|n{dMKf`*r^HApd`%P;&a8l0ql{Rzd%dQ2FzVN#US=bG^;!HA$fdofJj_owoO2 zpf7uGQW#SH!%qKYQh3W^=o5jyyovt@A$gw3l^^x|ZAr2Xp2D*kn*SN0|2ZIeV);7n z-{n0?vhh5|fHIfAhtE$Zbwksj>7UVm%<%C42kO>lXnq&Ju9TrSLVJG`zv}j8@>L)G zQ+>rfN!g?{TF4)nsSlDbdR=lUlz zbP4*Y47~|@)amynbx-l{66#N9@>TwY3{C!&2B-gPQumB#*U!T5Bz2z=-JHum=5)+| zHqeXSnbeKKKh?`G`m3bwbD|H1{43TbbM$s?k%D)u&mrP0O&!hZ|2B#M$^_TEJaAp*pzA341 z5?ylouB5(*Z<(B95SKXV`-%tM;vXD>z-b;UGHU;{s zpHAvWl)pC6vHqDQ&;M*v|H&QX(_htpm1xFeCTS_n|G1dh7U^3FWrIzwYm zGhfKilK-VZFI}6|myqY2hCs*q&S}i>E59Ysl6Noip0n1=_ayb((BC;F&qu$z(eF8X zJ^y`4{TAi7@yX0r{Xb&qFJAhe#G;q}LQ?;wUGSdB(AdK{t`Ez{AD#0|$Y0i!)ITTr zp3T+g`Z0dxzZmi*|7pqpQlPJ1pVU7OJqtn9zR~D=mh0o{?xg<9%5S7hM*dmFKwtf% zN%AcJ_hVK|E`P1p_j5`8ON+_h>-2Y%`tQtyKA0=tALuxrW{u?PdoWkulezky3jE8F z>#I%F|D4mqc@}J3-AI;@Qd82$Uj?bUdIKKRx*uM97PHgY*`FCOG@IToe4*V-t zC50x|!#Pi7=qBiAoxUq6T%vs1)A+CWsbosB0{SJVznn~&vYdZ0vn9|gXS4JzgMKi> ze|3^Hwv6X*92w8w==Gs?y9ha~J*$uZ4K=SJLsS2}MyEFCCtzH$1*hbG2i=l&6|@cMdd#k z^p)24RG_aJO$rYZgIY}cM96Jf1bvf*R4hE;(26U+&bp}ofnzjrO@BDlM;udV#@?ns8_LIZa{BXuPW+mFI?&C&?oRjq8IAo+e=(Df z{WMTc_7SfJ5=0w6_S4|~i|ef7O64#0b+(}t=q0|+Hth9$UuPTIJfFC22Y$WbSdM=r zm;Yd(TRxH0zkx-e0e#qf`5pF!OQBC>Xyrc>_|v%d`H-LZmByVhu62D_oQggahpInD zqYqr~xbcs1XpC!T6rJDW+8NDGdt5tXZLWMN11 z#VKx0>CMDxNrq-EpV^S1JD{5a4Vzsviu%YQD=p*8$^<9PmAr=5O`b)lJj@9*lrPm-q;hrAf_uf_3yn*T>R z>!l3c6yg%K&u=m$&mz-o@9(v5Op?!uj_tX;v$u?IfA*-;G5=Yw|G}j2UdC&-%Xe+0 zUA}97FDX34{~4SelZ``7($Qg{q`6(>lZ>%PHK)ePMLByGq#{~6DJoPYPnc+MXUw8^^?`gza)JpTev z{dvJ@?EM&%cmDs=+WiN|ah7)g-}_;hNMMPGVM+AP!+=TX7IFX%aqIDY1L`c z9<4iw7TSYxJ1V5K-)G%j=Uv(9c^eas(VmS-N{=>4`w#w#=T){N9_?%!b!<$luXH|p@(q& zcrTnZ`3^mc|NeOgjPaIo4q-m)!}088)vtPy-IyQb|AP$T#b~dWH$EK2El-&|Fn$sr z_5F8UPb*H#!J%AJC^h{^&6h|vKaeA z+B1Y}{Hs2^=os$@a^E+IFJk^jyj+jBjrfT6A1Q-HuD65u7xB3g*RPSHt*#9 za6aSxN3PeU{YMr(Z#o5Q|Bpz#T#tJi|L@o}cz=&3jE`b28^ie(^&NM^8DnG%7P&7h zI8S0pW4RCB5a%`io1V9XHpWIA<9Lfr7zdrji+rAt z@^WbFYd8;MGsZZ-yc_qzW%aYTFM;zbHfye*4!!C{<2aw}ee1wzUu?m|=kE2QJ!p^p zypcPFTk_(H#(&<6_M*-4Imc*k9Q~5(IUk>=`cPiHrt#mx_~Uqq+ww6V%t$=OOVU4h z7p@ni{3Z2!yhugd3dgU?h2vLgdmj8Ot`CrYRa4{t*^A79Uun;=DKGLG@~;qx`hlk0a$Zx?&L{?Jh`dIIIG zZJP0a=o2`#F#D*Nl97ct-An3nsffh8X2k6dpC#(f>RPtxU+(VvI@20uUaqU+I~ zF0@yCJdOQ@^5i~f+t?pnGma&FS^Xs5uW@{K&8mOhi_~#G$$iiu|DSr1>l@&@V`wf%k{U^7kD$Q{T==o-byi_ch76Q z81IqY+W+ANT%TdQyS4p+aq-r@tm$q1ietnl6Y9V7yeitC)cy^NaXppvop|&=nKphD z;VWs( zV~Nig2kk?9HfA**n)DCr`M0@Z+>Wmr+w*Vpyr!4)9sS>2 zQ|tM?dBKVI5ntE*Xs4X7o12btzNU2iJY7;r6My1$FY*GmQ(0rVuU$p^Qz%EqJ8%k~ zFn;_2FLDF>GgWeoF;C5q%f`o7%=~wUrnmFo9h$x!ziiUm`C^OKZ`-@Y=GXaei{`iU z-xjU!VI7|>v!=Xu{y8mQ$A3$e;%mls{I@Kq(GD5UElZ9uo(KxY$Clr#^_JB-zxB>JMq_*D)jGfR zE~#~X>unm_`K@7EO`E6^;@m9oZ|Ly#?Roidpx2+?Ze!x4X5!c7D5C>$CIQ zww%dt=eKPWYMtMszdIU~zNzW;{N1rk@hism{Kb?RoG)+7oAY<4 z?-=Lr&f#$Wok%C=mz@uH>i)3v;m(SQxAWo7D&uHGjqwZOalLpF=TmwioIbrs@tQv<57%&Mt>2cP z*81O}<=vYImv?VXjrnUhgYN}wed1l7w`;Tc?H)?_iKA?`Tco~zlP5z=uiKQ@ss%eaS841FRO7s zRIX?GHUE>=RgFjcfH%99AiBCm((?UUdHv<9_{~ATfL}!UfZMne+th{ zt;gq`J-$ibc3S;DFPfBiZU0kW!L1DRZ!o9v-^S-<>~H*W{a}2b`iU1!qd$jqeD>76 zXf|S=NtDl<@4SR#S>i{`=g+`6pAHorqkV@;j#KcAV~pRSvSZ0VtNtwR4@rE*aT1<$ zEalBRmiE^i1Q2F`U<(KK9B2RNk8vc($~m!^`|iZOZr8}lD&o{H zFRTZUuWcMB!L!(!PTrr6{-YNimUKyMTO(cYjJA{RoyWZB(@wg;NGJK$eGTh={Gbmq zv8>NyjU|%C%R{&q@EZZWNCs=fzv-*$39K>xcmArnjy2NXb<9}qSqJ`0b=KIwUtPlb z-*D~xqX^&Ihs=Bc)Z`BI?A4o6l#Im}K7sqRo#(g=gv8pv# zU!O3x<=r-6((nE{)>v>^5R_*fJWI9>Vc5r!b)9zD~*xahrrOZtdeXWo+w{?%7blviLBYrc03Xz#&*9aX4N_# z!Ex=Bm!R_2`Y7Ky57wrQZTV}f#sfIkWLew7i&I{39ysm0y=3C;aT5HVj7;DOw5uD} zUa~DqQhmwL%VRCafwtQ#l4oJmZTE}UfYEN-PH)-RjzdJscg_zvF2(KmvZ=rAc{0kA z_8$3dl#3;X{phwoR#t2KV^t(_j^lWOoHDlUjcb3~u4sDgzkEmK9;d6CYCTR@XN>K5 ztd{be<8Td*i;yRb+s9!u>_pkv9*1iY@AkiI0r41bTc3P~BevtS4(Y`YAHo`o-18ON z{VDf6-Slz~(@npvW^BvfUN^S+)61qkc7Ms+p0v;Uko4bak9>v^+w$ZyN+^Eb*dC{c z>J;BJe&;`6jRkMjL4KS5uy1V3Kb$kR<8ioX+|FM%KKU5dSPob5g7%#}BZBLA5lcI< z9B$%8jO!O!m5)Usvp;kAJTdzCPIrkKwbr zZO?|56W-;7quuT061G_Cjcqtm zw3palbi(7!cCZ)ylTNriZ)BI)bSFHxM%0MtjZS!?W>cg6bDi+D3!U)z7o6~BCp`AU zPPjZ*XqVVqI^jJz8;ah_w)R(^ljmvKkYE==h&AZJ+7i98-t-wcEUX; zJo>s5zS2p*3cJOY6MP2IsQ52B;i%6pF*$y;-pH~Il{MNg$I8zv2w(p*fnMa}oqoyl zG_o9ALi>+n!}hBc1P3p%U+#p<{Vcmg|GE>tI%h*sj+~ELj=O(jyPWXZPWs4icG@HN z8)S)Mf5d-FHUb9EVVEt1zuF1kxoATXF7vsj58mT6Dk}4~h6nG38XkXVC%n6;fwGbZ zjbvZS@-4HH-_eQvEw;6sq_5$!I_adhfKuDghxN$NxyTU6YfkY0gG&=U3PPp9XvPe;n8t4G;U?qx7V@$mp9>o2MxFR(s&OZL%6lghh6Ud z1m)2CQO^j%n@%}JEf3{HqevfWAL3AM~3lA z)1CP4EVkd%u{_7)$@{RDFVEeCEaf@*H~FxWKPBZm^~-Z8ZhCpH!i|^b9zrft`gzzX zU%rQT+p{f4mhznT$@k=Le)(S5t#9W{IQ`BlrC)-b@z`A=&%sW8yX&yiUise7&EH>! zo%H=x*iA3>Ngs6l<$F3e{ho9BPEb5~|24#) z!;j9#`y1Fk@Ax%rUvRvPZ5czG{wB6R*zp0GA1543f2IAJ{y-nL<@~VDU|Yt=dI;Nc zzFVKfww&*H3zFqP5ic_S)^Z&p=fCv~wnrUb#&*%MjOPa&zkuztj_0v0$D=LpD!ESn zCV7c`gWMv&5%$3zSo);>_jY4j-m9%;eB^VQ^$Bcmb1Y*c$C`~FBTLzC{51J8ybC`z z{}pWC=lCUTKk9e^+iv?7$ub^pyc|ESSHhOxqj2LRDRP>eB@dHF$P?rl@+^6dJWpOA zFOrwY%jA`?<@1l*|7ePwCTGdRmS@JM> zggil>AmS@JM>ggil>Ayi4OdcUmkY~uV&@d4ar0ULr4( zSHccH&pPveSBm1(*NNxNp6L`9(4N?d_Uy$Z@o|P8FG%CCl|>ja+zEqSIISUo!lTd z$*r(&1Ks}LmL&V+3^_;6lZ)gMxlFE*tK=HFPHvE!&Ya-G~DH_5HA zlc3vw`Mt-GeR77JBj?FQa*13fSIAXzja(-;$W3x9Y}^?R^;iB*i`)M<`Q!{aN6wRr z`6GvpjOPcD*6z`{WEcN6wRrwb9|+IiqDX90qk@MstxkN6LE95G&Ya-G~DH_5HAw}Ni}w1JVNdE|IQ@YCuhhxa-Liym&j#ugzwA?L_>a*-0lC4B-tlt$T@PJTqKvsWpagF zCD+Jxa)aC?x5C~Dy8YjoB>UtHIY-Wui{uiyOs!%2`4uU*|Mw@!J~>0qk@MstxkN6LE95G< zMy`_^vY4T*O2cn_*|-y> z7c;2Ki>#2jk=(avyn+e4KpJdhGO>bLXcnJX1RRfe&3A|KP;r zrp*sO^5_GHAH@HBKR($%E&mIBuyyR@+xi9L=SSZ^IbOIpJ?)iFjTVCcm%em%x-fR} zLa8u$;lkNVrNZd>vBIU&*y!|l;hD(`AMP(;dFI@-r(qYzKQw-E%EU=Q?f63B)ac}? zOOuju`c#SHrlv1kG~v@z?JQD$;oODuXAs#AoW3}EYP?`u)easzb8-CCbkL+JZ|wY( zZjGKkeR2FW>KxMmll}bobfGkQ>g@RRR4@Y5rwV7zBjr?^(tipX|Ct0fFO8o+WvN{=V}0?$^abykGn12r$-y({pSj>o zjh-t_q6uFA4|+u$WLKx{6hs4erep(RtNn>C$Td; z(@r@yd~ z#|zl<`lqHZPLIm^Bj)W`hh~$WD8dNj0VgqW8?N~nn7Lf3)Uz)Sfl7*jiNQ&tPd0pO3@j!LaKmB zrNLOADPfl#kW>#8f>qY6GIli(gboz;n?@ec^?qFs25U4VSfh$yoz?X|U8Ar2y-VjW zO^uHYN;%m=uo^I{1BC+t4;1!l>_D(aZcS#^C}mJf*=JfDto9Xx)qq)L%<4d4zor@3 zr+N08nu8UpGX24S=@;y?y}=qa?ls3doxA;ewU7am{6Mfqw}Umht>I>k5!QID|F5Z_ ze?W`NnBwps0S2uY4A$s^uJ;CO6tD4SjaJGB#s8lrD!<>Yzwb;XMrK|$A*+I4w0C0V zn#(Tow=Jyg-`B8lIkR!pw*k7A&%t()yte$D4Gh*1`MbZeM00qNhlk{|t1LEu5<%~R zZ&Clzq9n$jx2OlJ&Wp{Dkmyr*xkdd)mo!TSYpGw}?_{z0QGcWk-=h8}eZ*l2{+@~1 zG_N*46nOa$%1sD#pXv~M6S_qRln`O|uf$B*Z0KD)B{C9C`r z%B|{O(G0f#^7%#L(}&Z#FDfBSb}obc#Jo%-$hq1BG- z{)=Qaz^-h5I4WOC+4j>saN6!Sd)(XnHoath0xz~a&Y#i@X`4~kHa!@z*L)IntNint z&#s*O(a$2#X^%}J>(h0k&wRtI+pkW4qMt_St;S#5AE_dZ9DhCdk;T?8XKl=^+pkXj-a3TdqW%XLOpb%HlKO)Oh_QC+kNp0H|2YwiTNx3dB{HM=gS>8( d)86QZ5kbd|CXEa%o2{-I){^JF8e{8E{V(;=kh1^) diff --git a/pkg/ebpf/bpf_bpfel.go b/pkg/ebpf/bpf_bpfel.go index d8df207d3..4a84d59b4 100644 --- a/pkg/ebpf/bpf_bpfel.go +++ b/pkg/ebpf/bpf_bpfel.go @@ -53,6 +53,7 @@ type BpfFlowMetricsT struct { EndMonoTimeTs uint64 Flags uint16 Errno uint8 + Dscp uint8 PktDrops BpfPktDropsT DnsRecord BpfDnsRecordT FlowRtt uint64 diff --git a/pkg/ebpf/bpf_bpfel.o b/pkg/ebpf/bpf_bpfel.o index 637403340d4f132b801bcd0a8f1f37b8346489b7..cb818ed55cfe5d7da5c9a194d6d6a762e78a0523 100644 GIT binary patch literal 102256 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 literal 100704 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 Ky#7AUMED0v%FBfS diff --git a/pkg/exporter/proto.go b/pkg/exporter/proto.go index 4649418bb..b8d47be2f 100644 --- a/pkg/exporter/proto.go +++ b/pkg/exporter/proto.go @@ -49,6 +49,7 @@ func v4FlowToPB(fr *flow.Record) *pbflow.Record { Network: &pbflow.Network{ SrcAddr: &pbflow.IP{IpFamily: &pbflow.IP_Ipv4{Ipv4: flow.IntEncodeV4(fr.Id.SrcIp)}}, DstAddr: &pbflow.IP{IpFamily: &pbflow.IP_Ipv4{Ipv4: flow.IntEncodeV4(fr.Id.DstIp)}}, + Dscp: uint32(fr.Metrics.Dscp), }, Transport: &pbflow.Transport{ Protocol: uint32(fr.Id.TransportProtocol), @@ -97,6 +98,7 @@ func v6FlowToPB(fr *flow.Record) *pbflow.Record { Network: &pbflow.Network{ SrcAddr: &pbflow.IP{IpFamily: &pbflow.IP_Ipv6{Ipv6: fr.Id.SrcIp[:]}}, DstAddr: &pbflow.IP{IpFamily: &pbflow.IP_Ipv6{Ipv6: fr.Id.DstIp[:]}}, + Dscp: uint32(fr.Metrics.Dscp), }, Transport: &pbflow.Transport{ Protocol: uint32(fr.Id.TransportProtocol), diff --git a/pkg/flow/record.go b/pkg/flow/record.go index 9b28caab9..54461c602 100644 --- a/pkg/flow/record.go +++ b/pkg/flow/record.go @@ -111,6 +111,10 @@ func Accumulate(r *ebpf.BpfFlowMetrics, src *ebpf.BpfFlowMetrics) { if r.FlowRtt < src.FlowRtt { r.FlowRtt = src.FlowRtt } + // Accumulate DSCP + if src.Dscp != 0 { + r.Dscp = src.Dscp + } } // IP returns the net.IP equivalent object diff --git a/pkg/flow/record_test.go b/pkg/flow/record_test.go index 62f9c0ab3..8709af0b6 100644 --- a/pkg/flow/record_test.go +++ b/pkg/flow/record_test.go @@ -32,6 +32,7 @@ func TestRecordBinaryEncoding(t *testing.T) { 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, // u64 flow_end_time 0x13, 0x14, //flags 0x33, // u8 errno + 0x60, // u8 dscp // pkt_drops structure 0x10, 0x11, 0x12, 0x13, // u32 packets 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, // u64 bytes @@ -69,6 +70,7 @@ func TestRecordBinaryEncoding(t *testing.T) { EndMonoTimeTs: 0x1a19181716151413, Flags: 0x1413, Errno: 0x33, + Dscp: 0x60, PktDrops: ebpf.BpfPktDropsT{ Packets: 0x13121110, Bytes: 0x1b1a191817161514, diff --git a/pkg/pbflow/flow.pb.go b/pkg/pbflow/flow.pb.go index c2c642674..16ad2116c 100644 --- a/pkg/pbflow/flow.pb.go +++ b/pkg/pbflow/flow.pb.go @@ -1,16 +1,16 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.31.0 -// protoc v3.12.4 +// protoc v3.19.4 // source: proto/flow.proto package pbflow import ( - duration "github.com/golang/protobuf/ptypes/duration" - timestamp "github.com/golang/protobuf/ptypes/timestamp" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + durationpb "google.golang.org/protobuf/types/known/durationpb" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" reflect "reflect" sync "sync" ) @@ -163,10 +163,10 @@ type Record struct { // protocol as defined by ETH_P_* in linux/if_ether.h // https://github.com/torvalds/linux/blob/master/include/uapi/linux/if_ether.h - EthProtocol uint32 `protobuf:"varint,1,opt,name=eth_protocol,json=ethProtocol,proto3" json:"eth_protocol,omitempty"` - Direction Direction `protobuf:"varint,2,opt,name=direction,proto3,enum=pbflow.Direction" json:"direction,omitempty"` - TimeFlowStart *timestamp.Timestamp `protobuf:"bytes,3,opt,name=time_flow_start,json=timeFlowStart,proto3" json:"time_flow_start,omitempty"` - TimeFlowEnd *timestamp.Timestamp `protobuf:"bytes,4,opt,name=time_flow_end,json=timeFlowEnd,proto3" json:"time_flow_end,omitempty"` + EthProtocol uint32 `protobuf:"varint,1,opt,name=eth_protocol,json=ethProtocol,proto3" json:"eth_protocol,omitempty"` + Direction Direction `protobuf:"varint,2,opt,name=direction,proto3,enum=pbflow.Direction" json:"direction,omitempty"` + TimeFlowStart *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=time_flow_start,json=timeFlowStart,proto3" json:"time_flow_start,omitempty"` + TimeFlowEnd *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=time_flow_end,json=timeFlowEnd,proto3" json:"time_flow_end,omitempty"` // OSI-layer attributes DataLink *DataLink `protobuf:"bytes,5,opt,name=data_link,json=dataLink,proto3" json:"data_link,omitempty"` Network *Network `protobuf:"bytes,6,opt,name=network,proto3" json:"network,omitempty"` @@ -178,19 +178,19 @@ type Record struct { // From all the duplicate flows, one will set this value to false and the rest will be true. Duplicate bool `protobuf:"varint,11,opt,name=duplicate,proto3" json:"duplicate,omitempty"` // Agent IP address to help identifying the source of the flow - AgentIp *IP `protobuf:"bytes,12,opt,name=agent_ip,json=agentIp,proto3" json:"agent_ip,omitempty"` - Flags uint32 `protobuf:"varint,13,opt,name=flags,proto3" json:"flags,omitempty"` - IcmpType uint32 `protobuf:"varint,14,opt,name=icmp_type,json=icmpType,proto3" json:"icmp_type,omitempty"` - IcmpCode uint32 `protobuf:"varint,15,opt,name=icmp_code,json=icmpCode,proto3" json:"icmp_code,omitempty"` - PktDropBytes uint64 `protobuf:"varint,16,opt,name=pkt_drop_bytes,json=pktDropBytes,proto3" json:"pkt_drop_bytes,omitempty"` - PktDropPackets uint64 `protobuf:"varint,17,opt,name=pkt_drop_packets,json=pktDropPackets,proto3" json:"pkt_drop_packets,omitempty"` - PktDropLatestFlags uint32 `protobuf:"varint,18,opt,name=pkt_drop_latest_flags,json=pktDropLatestFlags,proto3" json:"pkt_drop_latest_flags,omitempty"` - PktDropLatestState uint32 `protobuf:"varint,19,opt,name=pkt_drop_latest_state,json=pktDropLatestState,proto3" json:"pkt_drop_latest_state,omitempty"` - PktDropLatestDropCause uint32 `protobuf:"varint,20,opt,name=pkt_drop_latest_drop_cause,json=pktDropLatestDropCause,proto3" json:"pkt_drop_latest_drop_cause,omitempty"` - DnsId uint32 `protobuf:"varint,21,opt,name=dns_id,json=dnsId,proto3" json:"dns_id,omitempty"` - DnsFlags uint32 `protobuf:"varint,22,opt,name=dns_flags,json=dnsFlags,proto3" json:"dns_flags,omitempty"` - DnsLatency *duration.Duration `protobuf:"bytes,23,opt,name=dns_latency,json=dnsLatency,proto3" json:"dns_latency,omitempty"` - TimeFlowRtt *duration.Duration `protobuf:"bytes,24,opt,name=time_flow_rtt,json=timeFlowRtt,proto3" json:"time_flow_rtt,omitempty"` + AgentIp *IP `protobuf:"bytes,12,opt,name=agent_ip,json=agentIp,proto3" json:"agent_ip,omitempty"` + Flags uint32 `protobuf:"varint,13,opt,name=flags,proto3" json:"flags,omitempty"` + IcmpType uint32 `protobuf:"varint,14,opt,name=icmp_type,json=icmpType,proto3" json:"icmp_type,omitempty"` + IcmpCode uint32 `protobuf:"varint,15,opt,name=icmp_code,json=icmpCode,proto3" json:"icmp_code,omitempty"` + PktDropBytes uint64 `protobuf:"varint,16,opt,name=pkt_drop_bytes,json=pktDropBytes,proto3" json:"pkt_drop_bytes,omitempty"` + PktDropPackets uint64 `protobuf:"varint,17,opt,name=pkt_drop_packets,json=pktDropPackets,proto3" json:"pkt_drop_packets,omitempty"` + PktDropLatestFlags uint32 `protobuf:"varint,18,opt,name=pkt_drop_latest_flags,json=pktDropLatestFlags,proto3" json:"pkt_drop_latest_flags,omitempty"` + PktDropLatestState uint32 `protobuf:"varint,19,opt,name=pkt_drop_latest_state,json=pktDropLatestState,proto3" json:"pkt_drop_latest_state,omitempty"` + PktDropLatestDropCause uint32 `protobuf:"varint,20,opt,name=pkt_drop_latest_drop_cause,json=pktDropLatestDropCause,proto3" json:"pkt_drop_latest_drop_cause,omitempty"` + DnsId uint32 `protobuf:"varint,21,opt,name=dns_id,json=dnsId,proto3" json:"dns_id,omitempty"` + DnsFlags uint32 `protobuf:"varint,22,opt,name=dns_flags,json=dnsFlags,proto3" json:"dns_flags,omitempty"` + DnsLatency *durationpb.Duration `protobuf:"bytes,23,opt,name=dns_latency,json=dnsLatency,proto3" json:"dns_latency,omitempty"` + TimeFlowRtt *durationpb.Duration `protobuf:"bytes,24,opt,name=time_flow_rtt,json=timeFlowRtt,proto3" json:"time_flow_rtt,omitempty"` } func (x *Record) Reset() { @@ -239,14 +239,14 @@ func (x *Record) GetDirection() Direction { return Direction_INGRESS } -func (x *Record) GetTimeFlowStart() *timestamp.Timestamp { +func (x *Record) GetTimeFlowStart() *timestamppb.Timestamp { if x != nil { return x.TimeFlowStart } return nil } -func (x *Record) GetTimeFlowEnd() *timestamp.Timestamp { +func (x *Record) GetTimeFlowEnd() *timestamppb.Timestamp { if x != nil { return x.TimeFlowEnd } @@ -379,14 +379,14 @@ func (x *Record) GetDnsFlags() uint32 { return 0 } -func (x *Record) GetDnsLatency() *duration.Duration { +func (x *Record) GetDnsLatency() *durationpb.Duration { if x != nil { return x.DnsLatency } return nil } -func (x *Record) GetTimeFlowRtt() *duration.Duration { +func (x *Record) GetTimeFlowRtt() *durationpb.Duration { if x != nil { return x.TimeFlowRtt } @@ -453,8 +453,9 @@ type Network struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - SrcAddr *IP `protobuf:"bytes,1,opt,name=src_addr,json=srcAddr,proto3" json:"src_addr,omitempty"` - DstAddr *IP `protobuf:"bytes,2,opt,name=dst_addr,json=dstAddr,proto3" json:"dst_addr,omitempty"` + SrcAddr *IP `protobuf:"bytes,1,opt,name=src_addr,json=srcAddr,proto3" json:"src_addr,omitempty"` + DstAddr *IP `protobuf:"bytes,2,opt,name=dst_addr,json=dstAddr,proto3" json:"dst_addr,omitempty"` + Dscp uint32 `protobuf:"varint,3,opt,name=dscp,proto3" json:"dscp,omitempty"` } func (x *Network) Reset() { @@ -503,6 +504,13 @@ func (x *Network) GetDstAddr() *IP { return nil } +func (x *Network) GetDscp() uint32 { + if x != nil { + return x.Dscp + } + return 0 +} + type IP struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -729,30 +737,31 @@ var file_proto_flow_proto_rawDesc = []byte{ 0x12, 0x17, 0x0a, 0x07, 0x73, 0x72, 0x63, 0x5f, 0x6d, 0x61, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x73, 0x72, 0x63, 0x4d, 0x61, 0x63, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x73, 0x74, 0x5f, 0x6d, 0x61, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x64, 0x73, 0x74, 0x4d, - 0x61, 0x63, 0x22, 0x57, 0x0a, 0x07, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x25, 0x0a, + 0x61, 0x63, 0x22, 0x6b, 0x0a, 0x07, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x25, 0x0a, 0x08, 0x73, 0x72, 0x63, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x49, 0x50, 0x52, 0x07, 0x73, 0x72, 0x63, 0x41, 0x64, 0x64, 0x72, 0x12, 0x25, 0x0a, 0x08, 0x64, 0x73, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x66, 0x6c, 0x6f, 0x77, 0x2e, - 0x49, 0x50, 0x52, 0x07, 0x64, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x22, 0x3d, 0x0a, 0x02, 0x49, - 0x50, 0x12, 0x14, 0x0a, 0x04, 0x69, 0x70, 0x76, 0x34, 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, 0x48, - 0x00, 0x52, 0x04, 0x69, 0x70, 0x76, 0x34, 0x12, 0x14, 0x0a, 0x04, 0x69, 0x70, 0x76, 0x36, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x04, 0x69, 0x70, 0x76, 0x36, 0x42, 0x0b, 0x0a, - 0x09, 0x69, 0x70, 0x5f, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x22, 0x5d, 0x0a, 0x09, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x72, 0x63, 0x5f, 0x70, - 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x73, 0x72, 0x63, 0x50, 0x6f, - 0x72, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x64, 0x73, 0x74, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x64, 0x73, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x1a, 0x0a, - 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2a, 0x24, 0x0a, 0x09, 0x44, 0x69, 0x72, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x47, 0x52, 0x45, 0x53, - 0x53, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x45, 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x01, 0x32, - 0x3e, 0x0a, 0x09, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x31, 0x0a, 0x04, - 0x53, 0x65, 0x6e, 0x64, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x52, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x73, 0x1a, 0x16, 0x2e, 0x70, 0x62, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x43, - 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x42, - 0x0a, 0x5a, 0x08, 0x2e, 0x2f, 0x70, 0x62, 0x66, 0x6c, 0x6f, 0x77, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x49, 0x50, 0x52, 0x07, 0x64, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x64, + 0x73, 0x63, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x64, 0x73, 0x63, 0x70, 0x22, + 0x3d, 0x0a, 0x02, 0x49, 0x50, 0x12, 0x14, 0x0a, 0x04, 0x69, 0x70, 0x76, 0x34, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x07, 0x48, 0x00, 0x52, 0x04, 0x69, 0x70, 0x76, 0x34, 0x12, 0x14, 0x0a, 0x04, 0x69, + 0x70, 0x76, 0x36, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x04, 0x69, 0x70, 0x76, + 0x36, 0x42, 0x0b, 0x0a, 0x09, 0x69, 0x70, 0x5f, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x22, 0x5d, + 0x0a, 0x09, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x73, + 0x72, 0x63, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x73, + 0x72, 0x63, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x64, 0x73, 0x74, 0x5f, 0x70, 0x6f, + 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x64, 0x73, 0x74, 0x50, 0x6f, 0x72, + 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2a, 0x24, 0x0a, + 0x09, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, + 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x45, 0x47, 0x52, 0x45, 0x53, + 0x53, 0x10, 0x01, 0x32, 0x3e, 0x0a, 0x09, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x12, 0x31, 0x0a, 0x04, 0x53, 0x65, 0x6e, 0x64, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x66, 0x6c, 0x6f, + 0x77, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x1a, 0x16, 0x2e, 0x70, 0x62, 0x66, 0x6c, + 0x6f, 0x77, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x70, 0x6c, + 0x79, 0x22, 0x00, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x2f, 0x70, 0x62, 0x66, 0x6c, 0x6f, 0x77, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -770,16 +779,16 @@ func file_proto_flow_proto_rawDescGZIP() []byte { var file_proto_flow_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_proto_flow_proto_msgTypes = make([]protoimpl.MessageInfo, 7) var file_proto_flow_proto_goTypes = []interface{}{ - (Direction)(0), // 0: pbflow.Direction - (*CollectorReply)(nil), // 1: pbflow.CollectorReply - (*Records)(nil), // 2: pbflow.Records - (*Record)(nil), // 3: pbflow.Record - (*DataLink)(nil), // 4: pbflow.DataLink - (*Network)(nil), // 5: pbflow.Network - (*IP)(nil), // 6: pbflow.IP - (*Transport)(nil), // 7: pbflow.Transport - (*timestamp.Timestamp)(nil), // 8: google.protobuf.Timestamp - (*duration.Duration)(nil), // 9: google.protobuf.Duration + (Direction)(0), // 0: pbflow.Direction + (*CollectorReply)(nil), // 1: pbflow.CollectorReply + (*Records)(nil), // 2: pbflow.Records + (*Record)(nil), // 3: pbflow.Record + (*DataLink)(nil), // 4: pbflow.DataLink + (*Network)(nil), // 5: pbflow.Network + (*IP)(nil), // 6: pbflow.IP + (*Transport)(nil), // 7: pbflow.Transport + (*timestamppb.Timestamp)(nil), // 8: google.protobuf.Timestamp + (*durationpb.Duration)(nil), // 9: google.protobuf.Duration } var file_proto_flow_proto_depIdxs = []int32{ 3, // 0: pbflow.Records.entries:type_name -> pbflow.Record diff --git a/pkg/pbflow/flow_grpc.pb.go b/pkg/pbflow/flow_grpc.pb.go index 8cee0c714..fccb88095 100644 --- a/pkg/pbflow/flow_grpc.pb.go +++ b/pkg/pbflow/flow_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v3.12.4 +// - protoc v3.19.4 // source: proto/flow.proto package pbflow diff --git a/proto/flow.proto b/proto/flow.proto index c818ee1b2..35803d7d6 100644 --- a/proto/flow.proto +++ b/proto/flow.proto @@ -63,6 +63,7 @@ message DataLink { message Network { IP src_addr = 1; IP dst_addr = 2; + uint32 dscp = 3; } message IP {