From nobody Fri Jun 30 16:32:08 2023 X-Original-To: freebsd-transport@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4Qt17W2Lfwz4kL5x for ; Fri, 30 Jun 2023 16:32:23 +0000 (UTC) (envelope-from ccfreebsd@gmail.com) Received: from mail-oo1-f49.google.com (mail-oo1-f49.google.com [209.85.161.49]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Qt17V64w0z3N5K; Fri, 30 Jun 2023 16:32:22 +0000 (UTC) (envelope-from ccfreebsd@gmail.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-oo1-f49.google.com with SMTP id 006d021491bc7-5636425bf98so1222207eaf.1; Fri, 30 Jun 2023 09:32:22 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1688142741; x=1690734741; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=equMdtkC/tM+aozNsnL8YTIziCHoRqd7CL+9IXiwaN8=; b=Ob3E1xlGsIwfrQzm34odb26laCm2tdsNt9vei0e+qxsJdniAekmj/DaAXW4H65Z8jZ birhb4Axh+hMQkRxSdME+q6enwwtfuiigZU8gK2PesC88sNdKF6WVVsaEbfdz0SVkpIR C1sxtBzigkK7XJ4YNmp32ZVmFGovlMWp2f7+4V1Jl1nWl0INqTrLxtHC1Z/alGjVyT4f oL7gg6TZK/1aNT2vPTfcnjYz0wTy3bKqsh8rYNcIxHxRBqRvHii3if9vqrABvJ8IA8bm RnzhnnqzPauuDkW8NNhjtQbXEZKQxHxkWqiK/31Iz+w2Y+6j0V8hD6Z4NHV8AlB6NJdc vVQA== X-Gm-Message-State: AC+VfDyxsAIw5tRIpq+9KWcPmBMSfOESmK7Ozzextx3KuXv0iKgdE2Jk a01DPabIW4yBiANoXIk3sBtR6gqR+G4= X-Google-Smtp-Source: ACHHUZ5tqgiSY0dePtEA0OhT6mFFBLpzKCj2/BFUJEc7BAX5fHq3qFPuFrW3eqelVeON5vS1Tvm06g== X-Received: by 2002:a4a:2c04:0:b0:563:516e:ae3d with SMTP id o4-20020a4a2c04000000b00563516eae3dmr2551536ooo.6.1688142740841; Fri, 30 Jun 2023 09:32:20 -0700 (PDT) Received: from mail-oa1-f50.google.com (mail-oa1-f50.google.com. [209.85.160.50]) by smtp.gmail.com with ESMTPSA id bd20-20020a4aee14000000b0051134f333d3sm2111873oob.16.2023.06.30.09.32.20 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 30 Jun 2023 09:32:20 -0700 (PDT) Received: by mail-oa1-f50.google.com with SMTP id 586e51a60fabf-1b055510c9dso1575454fac.0; Fri, 30 Jun 2023 09:32:20 -0700 (PDT) X-Received: by 2002:a05:6870:b506:b0:1b0:60ff:b745 with SMTP id v6-20020a056870b50600b001b060ffb745mr3336068oap.48.1688142739897; Fri, 30 Jun 2023 09:32:19 -0700 (PDT) List-Id: Discussions List-Archive: https://lists.freebsd.org/archives/freebsd-transport List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-transport@freebsd.org X-BeenThere: freebsd-transport@freebsd.org MIME-Version: 1.0 References: <53aff274-b1a8-0730-6971-2755c7e7b688@freebsd.org> In-Reply-To: From: Cheng Cui Date: Fri, 30 Jun 2023 12:32:08 -0400 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: FreeBSD TCP (with iperf3) comparison with Linux To: Murali Krishnamurthy Cc: "Scheffenegger, Richard" , FreeBSD Transport Content-Type: multipart/alternative; boundary="00000000000057840405ff5b5cdc" X-Rspamd-Queue-Id: 4Qt17V64w0z3N5K X-Spamd-Bar: ---- X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:209.85.128.0/17, country:US] X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-ThisMailContainsUnwantedMimeParts: N --00000000000057840405ff5b5cdc Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable I used an emulation testbed from Emulab.net with Dummynet traffic shaper adding 100ms RTT between two nodes, the link capacity is 1Gbps and both nodes are using freebsd13.2. cc@s1:~ % ping -c 3 r1 PING r1-link1 (10.1.1.3): 56 data bytes 64 bytes from 10.1.1.3: icmp_seq=3D0 ttl=3D64 time=3D100.091 ms 64 bytes from 10.1.1.3: icmp_seq=3D1 ttl=3D64 time=3D99.995 ms 64 bytes from 10.1.1.3: icmp_seq=3D2 ttl=3D64 time=3D99.979 ms --- r1-link1 ping statistics --- 3 packets transmitted, 3 packets received, 0.0% packet loss round-trip min/avg/max/stddev =3D 99.979/100.022/100.091/0.049 ms cc@s1:~ % iperf3 -c r1 -t 10 -i 1 -C cubic Connecting to host r1, port 5201 [ 5] local 10.1.1.2 port 56089 connected to 10.1.1.3 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 4.19 MBytes 35.2 Mbits/sec 0 1.24 MBytes [ 5] 1.00-2.00 sec 56.5 MBytes 474 Mbits/sec 6 2.41 MBytes [ 5] 2.00-3.00 sec 58.6 MBytes 492 Mbits/sec 18 7.17 MBytes [ 5] 3.00-4.00 sec 65.6 MBytes 550 Mbits/sec 14 606 KBytes [ 5] 4.00-5.00 sec 60.8 MBytes 510 Mbits/sec 18 7.22 MBytes [ 5] 5.00-6.00 sec 62.1 MBytes 521 Mbits/sec 12 7.86 MBytes [ 5] 6.00-7.00 sec 60.9 MBytes 512 Mbits/sec 14 3.43 MBytes [ 5] 7.00-8.00 sec 62.8 MBytes 527 Mbits/sec 16 372 KBytes [ 5] 8.00-9.00 sec 59.3 MBytes 497 Mbits/sec 14 1.77 MBytes [ 5] 9.00-10.00 sec 57.0 MBytes 477 Mbits/sec 18 7.13 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-10.00 sec 548 MBytes 459 Mbits/sec 130 sende= r [ 5] 0.00-10.10 sec 540 MBytes 449 Mbits/sec receiver iperf Done. cc@s1:~ % ifconfig bce4 bce4: flags=3D8843 metric 0 mtu 150= 0 options=3Dc01bb ether 00:10:18:56:94:d4 inet 10.1.1.2 netmask 0xffffff00 broadcast 10.1.1.255 media: Ethernet 1000baseT status: active nd6 options=3D29 I believe the default values for bce tx/rx pages are 2. And I happened to find this problem before that when the tx queue was full, it would not enqueue packets and started return errors. And this error was misunderstood by the TCP layer as retransmission. After adding hw.bce.tx_pages=3D4 and hw.bce.rx_pages=3D4 in /boot/loader.co= nf and reboot: cc@s1:~ % iperf3 -c r1 -t 10 -i 1 -C cubic Connecting to host r1, port 5201 [ 5] local 10.1.1.2 port 20478 connected to 10.1.1.3 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 4.15 MBytes 34.8 Mbits/sec 0 1.17 MBytes [ 5] 1.00-2.00 sec 83.1 MBytes 697 Mbits/sec 0 12.2 MBytes [ 5] 2.00-3.00 sec 112 MBytes 939 Mbits/sec 0 12.2 MBytes [ 5] 3.00-4.00 sec 113 MBytes 944 Mbits/sec 0 12.2 MBytes [ 5] 4.00-5.00 sec 112 MBytes 940 Mbits/sec 0 12.2 MBytes [ 5] 5.00-6.00 sec 112 MBytes 942 Mbits/sec 0 12.2 MBytes [ 5] 6.00-7.00 sec 112 MBytes 938 Mbits/sec 0 12.2 MBytes [ 5] 7.00-8.00 sec 113 MBytes 944 Mbits/sec 0 12.2 MBytes [ 5] 8.00-9.00 sec 112 MBytes 938 Mbits/sec 0 12.2 MBytes [ 5] 9.00-10.00 sec 113 MBytes 947 Mbits/sec 0 12.2 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-10.00 sec 985 MBytes 826 Mbits/sec 0 sende= r [ 5] 0.00-10.11 sec 982 MBytes 815 Mbits/sec receiver iperf Done. Best Regards, Cheng Cui On Fri, Jun 30, 2023 at 12:26=E2=80=AFPM Murali Krishnamurthy wrote: > Richard, > > > > Appreciate the useful inputs you have shared so far. Will try to figure > out regarding packet drops. > > > > Regarding HyStart, I see even BSD code base has support for this. May I > know by when can we see that in an release, if not already available ? > > > > Regarding this point : *=E2=80=9C**Switching to other cc modules may give= some > more insights. But again, I suspect that momentary (microsecond) burstine= ss > of BSD may be causing this significantly higher loss rate.**=E2=80=9D* > > Is there some info somewhere where I can understand more on this in detai= l? > > > > Regards > > Murali > > > > > > On 30/06/23, 9:35 PM, "owner-freebsd-transport@freebsd.org" < > owner-freebsd-transport@freebsd.org> wrote: > > > > Hi Murali, > > > > > Q. Since you mention two hypervisors - what is the phyiscal network > topology in between these two servers? What theoretical link rates would = be > attainable? > > > > > > Here is the topology > > > > > > Iperf end points are on 2 different hypervisors. > > > > > > =E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80= =94=E2=80=94=E2=80=94=E2=80=94 =E2=80=94=E2=80=94=E2=80=94=E2=80=94= =E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2= =80=94=E2=80=94=E2=80=94=E2=80=94 > =E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94 =E2= =80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94-=E2=80=94 > > > | Linux VM1 | | BSD 13 VM > 1 | > | Linux VM2 | | BSD 13 VM 2 | > > > |___________| |_ ____ ____ ___ > | = |___________ > | |_ ____ ____ ___ | > > > | | > | > | | > > > > | | > | | > > > > =E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94= =E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94 = =E2= =80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80= =94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94 > > > | ESX Hypervisor 1 | 10G link connected vi= a > L2 Switch | ESX Hypervisor 2 | > > > | > |=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94= =E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2= =80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94 > | | > > > |=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80= =94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94 > | > |=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94= =E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94| > > > > > > > > > Nic is of 10G capacity on both ESX server and it has below config. > > > > > > So, when both VMs run on the same Hypervisor, maybe with another VM to > simulate the 100ms delay, can you attain a lossless baseline scenario? > > > > > > > BDP for 16MB Socket buffer: 16 MB * (1000 ms * 100ms latency) * 8 bits/ > 1024 =3D 1.25 Gbps > > > > > > So theoretically we should see close to 1.25Gbps of Bitrate and we see > Linux reaching close to this number. > > > > Under no loss, yes. > > > > > > > But BSD is not able to do that. > > > > > > > > > Q. Did you run iperf3? Did the transmitting endpoint report any > retransmissions between Linux or FBSD hosts? > > > > > > Yes, we used iper3. I see Linux doing less number retransmissions > compared to BSD. > > > On BSD, the best performance was around 600 Mbps bitrate and the number > of retransmissions for this number seen is around 32K > > > On Linux, the best performance was around 1.15 Gbps bitrate and the > number of retransmissions for this number seen is only 2K. > > > So as you pointed the number of retransmissions in BSD could be the rea= l > issue here. > > > > There are other cc modules available; but I believe one major deviation i= s > that Linux can perform mechanisms like hystart; ACKing every packet when > the client detects slow start; perform pacing to achieve more uniform > packet transmissions. > > > > I think the next step would be to find out, at which queue those packet > discards are coming from (external switch? delay generator? Vswitch? Eth > stack inside the VM?) > > > > Or alternatively, provide your ESX hypervisors with vastly more link > speed, to rule out any L2 induced packet drops - provided your delay > generator is not the source when momentarily overloaded. > > > > > Is there a way to reduce this packet loss by fine tuning some parameter= s > w.r.t ring buffer or any other areas? > > > > Finding where these arise (looking at queue and port counters) would be > the next step. But this is not really my specific area of expertise beyon= d > the high level, vendor independent observations. > > > > Switching to other cc modules may give some more insights. But again, I > suspect that momentary (microsecond) burstiness of BSD may be causing thi= s > significantly higher loss rate. > > > > TCP RACK would be another option. That stack has pacing, more fine-graine= d > timing, the RACK loss recovery mechanisms etc. Maybe that helps reduce th= e > observed packet drops by iperf, and consequently, yield a higher overall > throuhgput. > > > > > > > > > --00000000000057840405ff5b5cdc Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: base64 PGRpdiBkaXI9Imx0ciI+SSB1c2VkIGFuIGVtdWxhdGlvbiB0ZXN0YmVkIGZyb20gRW11bGFiLm5l dCB3aXRoIER1bW15bmV0IHRyYWZmaWMgc2hhcGVyIGFkZGluZyAxMDBtcyBSVFQ8YnI+YmV0d2Vl biB0d28gbm9kZXMsIHRoZSBsaW5rIGNhcGFjaXR5IGlzIDFHYnBzIGFuZCBib3RoIG5vZGVzIGFy ZSB1c2luZyBmcmVlYnNkMTMuMi48YnI+PGJyPmNjQHMxOn4gJSBwaW5nIC1jIDMgcjE8YnI+UElO RyByMS1saW5rMSAoMTAuMS4xLjMpOiA1NiBkYXRhIGJ5dGVzPGJyPjY0IGJ5dGVzIGZyb20gPGEg aHJlZj0iaHR0cDovLzEwLjEuMS4zIj4xMC4xLjEuMzwvYT46IGljbXBfc2VxPTAgdHRsPTY0IHRp bWU9MTAwLjA5MSBtczxicj42NCBieXRlcyBmcm9tIDxhIGhyZWY9Imh0dHA6Ly8xMC4xLjEuMyI+ MTAuMS4xLjM8L2E+OiBpY21wX3NlcT0xIHR0bD02NCB0aW1lPTk5Ljk5NSBtczxicj42NCBieXRl cyBmcm9tIDxhIGhyZWY9Imh0dHA6Ly8xMC4xLjEuMyI+MTAuMS4xLjM8L2E+OiBpY21wX3NlcT0y IHR0bD02NCB0aW1lPTk5Ljk3OSBtczxicj48YnI+LS0tIHIxLWxpbmsxIHBpbmcgc3RhdGlzdGlj cyAtLS08YnI+MyBwYWNrZXRzIHRyYW5zbWl0dGVkLCAzIHBhY2tldHMgcmVjZWl2ZWQsIDAuMCUg cGFja2V0IGxvc3M8YnI+cm91bmQtdHJpcCBtaW4vYXZnL21heC9zdGRkZXYgPSA5OS45NzkvMTAw LjAyMi8xMDAuMDkxLzAuMDQ5IG1zPGJyPjxicj48YnI+Y2NAczE6fiAlIGlwZXJmMyAtYyByMSAt dCAxMCAtaSAxIC1DIGN1YmljPGJyPkNvbm5lY3RpbmcgdG8gaG9zdCByMSwgcG9ydCA1MjAxPGJy PlsgwqA1XSBsb2NhbCAxMC4xLjEuMiBwb3J0IDU2MDg5IGNvbm5lY3RlZCB0byAxMC4xLjEuMyBw b3J0IDUyMDE8YnI+WyBJRF0gSW50ZXJ2YWwgwqAgwqAgwqAgwqAgwqAgVHJhbnNmZXIgwqAgwqAg Qml0cmF0ZSDCoCDCoCDCoCDCoCBSZXRyIMKgQ3duZDxicj5bIMKgNV0gwqAgMC4wMC0xLjAwIMKg IHNlYyDCoDQuMTkgTUJ5dGVzIMKgMzUuMiBNYml0cy9zZWMgwqAgwqAwIMKgIDEuMjQgTUJ5dGVz IMKgIMKgIMKgIDxicj5bIMKgNV0gwqAgMS4wMC0yLjAwIMKgIHNlYyDCoDU2LjUgTUJ5dGVzIMKg IDQ3NCBNYml0cy9zZWMgwqAgwqA2IMKgIDIuNDEgTUJ5dGVzIMKgIMKgIMKgIDxicj5bIMKgNV0g wqAgMi4wMC0zLjAwIMKgIHNlYyDCoDU4LjYgTUJ5dGVzIMKgIDQ5MiBNYml0cy9zZWMgwqAgMTgg wqAgNy4xNyBNQnl0ZXMgwqAgwqAgwqAgPGJyPlsgwqA1XSDCoCAzLjAwLTQuMDAgwqAgc2VjIMKg NjUuNiBNQnl0ZXMgwqAgNTUwIE1iaXRzL3NlYyDCoCAxNCDCoCDCoDYwNiBLQnl0ZXMgwqAgwqAg wqAgPGJyPlsgwqA1XSDCoCA0LjAwLTUuMDAgwqAgc2VjIMKgNjAuOCBNQnl0ZXMgwqAgNTEwIE1i aXRzL3NlYyDCoCAxOCDCoCA3LjIyIE1CeXRlcyDCoCDCoCDCoCA8YnI+WyDCoDVdIMKgIDUuMDAt Ni4wMCDCoCBzZWMgwqA2Mi4xIE1CeXRlcyDCoCA1MjEgTWJpdHMvc2VjIMKgIDEyIMKgIDcuODYg TUJ5dGVzIMKgIMKgIMKgIDxicj5bIMKgNV0gwqAgNi4wMC03LjAwIMKgIHNlYyDCoDYwLjkgTUJ5 dGVzIMKgIDUxMiBNYml0cy9zZWMgwqAgMTQgwqAgMy40MyBNQnl0ZXMgwqAgwqAgwqAgPGJyPlsg wqA1XSDCoCA3LjAwLTguMDAgwqAgc2VjIMKgNjIuOCBNQnl0ZXMgwqAgNTI3IE1iaXRzL3NlYyDC oCAxNiDCoCDCoDM3MiBLQnl0ZXMgwqAgwqAgwqAgPGJyPlsgwqA1XSDCoCA4LjAwLTkuMDAgwqAg c2VjIMKgNTkuMyBNQnl0ZXMgwqAgNDk3IE1iaXRzL3NlYyDCoCAxNCDCoCAxLjc3IE1CeXRlcyDC oCDCoCDCoCA8YnI+WyDCoDVdIMKgIDkuMDAtMTAuMDAgwqBzZWMgwqA1Ny4wIE1CeXRlcyDCoCA0 NzcgTWJpdHMvc2VjIMKgIDE4IMKgIDcuMTMgTUJ5dGVzIMKgIMKgIMKgIDxicj4tIC0gLSAtIC0g LSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtPGJyPlsgSURdIEludGVydmFs IMKgIMKgIMKgIMKgIMKgIFRyYW5zZmVyIMKgIMKgIEJpdHJhdGUgwqAgwqAgwqAgwqAgUmV0cjxi cj5bIMKgNV0gwqAgMC4wMC0xMC4wMCDCoHNlYyDCoCA1NDggTUJ5dGVzIMKgIDQ1OSBNYml0cy9z ZWMgwqAxMzAgwqAgwqAgwqAgwqAgwqAgwqAgc2VuZGVyPGJyPlsgwqA1XSDCoCAwLjAwLTEwLjEw IMKgc2VjIMKgIDU0MCBNQnl0ZXMgwqAgNDQ5IE1iaXRzL3NlYyDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoHJlY2VpdmVyPGJyPjxicj5pcGVyZiBEb25lLjxicj48YnI+Y2NAczE6fiAlIGlmY29u ZmlnIGJjZTQ8YnI+YmNlNDogZmxhZ3M9ODg0MyZsdDtVUCxCUk9BRENBU1QsUlVOTklORyxTSU1Q TEVYLE1VTFRJQ0FTVCZndDsgbWV0cmljIDAgbXR1IDE1MDA8YnI+CW9wdGlvbnM9YzAxYmImbHQ7 UlhDU1VNLFRYQ1NVTSxWTEFOX01UVSxWTEFOX0hXVEFHR0lORyxKVU1CT19NVFUsVkxBTl9IV0NT VU0sVFNPNCxWTEFOX0hXVFNPLExJTktTVEFURSZndDs8YnI+CWV0aGVyIDAwOjEwOjE4OjU2Ojk0 OmQ0PGJyPglpbmV0IDEwLjEuMS4yIG5ldG1hc2sgMHhmZmZmZmYwMCBicm9hZGNhc3QgMTAuMS4x LjI1NTxicj4JbWVkaWE6IEV0aGVybmV0IDEwMDBiYXNlVCAmbHQ7ZnVsbC1kdXBsZXgmZ3Q7PGJy PglzdGF0dXM6IGFjdGl2ZTxicj4JbmQ2IG9wdGlvbnM9MjkmbHQ7UEVSRk9STU5VRCxJRkRJU0FC TEVELEFVVE9fTElOS0xPQ0FMJmd0Ozxicj48YnI+SSBiZWxpZXZlIHRoZSBkZWZhdWx0IHZhbHVl cyBmb3IgYmNlIHR4L3J4IHBhZ2VzIGFyZSAyLiBBbmQgSSBoYXBwZW5lZCB0byBmaW5kPGJyPnRo aXMgcHJvYmxlbSBiZWZvcmUgdGhhdCB3aGVuIHRoZSB0eCBxdWV1ZSB3YXMgZnVsbCwgaXQgd291 bGQgbm90IGVucXVldWUgcGFja2V0czxicj5hbmQgc3RhcnRlZCByZXR1cm4gZXJyb3JzLjxicj5B bmQgdGhpcyBlcnJvciB3YXMgbWlzdW5kZXJzdG9vZCBieSB0aGUgVENQIGxheWVyIGFzIHJldHJh bnNtaXNzaW9uLjxicj48YnI+QWZ0ZXIgYWRkaW5nIGh3LmJjZS50eF9wYWdlcz00IGFuZCBody5i Y2UucnhfcGFnZXM9NCBpbiAvYm9vdC9sb2FkZXIuY29uZiBhbmQgcmVib290Ojxicj48YnI+Y2NA czE6fiAlIGlwZXJmMyAtYyByMSAtdCAxMCAtaSAxIC1DIGN1YmljPGJyPkNvbm5lY3RpbmcgdG8g aG9zdCByMSwgcG9ydCA1MjAxPGJyPlsgwqA1XSBsb2NhbCAxMC4xLjEuMiBwb3J0IDIwNDc4IGNv bm5lY3RlZCB0byAxMC4xLjEuMyBwb3J0IDUyMDE8YnI+WyBJRF0gSW50ZXJ2YWwgwqAgwqAgwqAg wqAgwqAgVHJhbnNmZXIgwqAgwqAgQml0cmF0ZSDCoCDCoCDCoCDCoCBSZXRyIMKgQ3duZDxicj5b IMKgNV0gwqAgMC4wMC0xLjAwIMKgIHNlYyDCoDQuMTUgTUJ5dGVzIMKgMzQuOCBNYml0cy9zZWMg wqAgwqAwIMKgIDEuMTcgTUJ5dGVzIMKgIMKgIMKgIDxicj5bIMKgNV0gwqAgMS4wMC0yLjAwIMKg IHNlYyDCoDgzLjEgTUJ5dGVzIMKgIDY5NyBNYml0cy9zZWMgwqAgwqAwIMKgIDEyLjIgTUJ5dGVz IMKgIMKgIMKgIDxicj5bIMKgNV0gwqAgMi4wMC0zLjAwIMKgIHNlYyDCoCAxMTIgTUJ5dGVzIMKg IDkzOSBNYml0cy9zZWMgwqAgwqAwIMKgIDEyLjIgTUJ5dGVzIMKgIMKgIMKgIDxicj5bIMKgNV0g wqAgMy4wMC00LjAwIMKgIHNlYyDCoCAxMTMgTUJ5dGVzIMKgIDk0NCBNYml0cy9zZWMgwqAgwqAw IMKgIDEyLjIgTUJ5dGVzIMKgIMKgIMKgIDxicj5bIMKgNV0gwqAgNC4wMC01LjAwIMKgIHNlYyDC oCAxMTIgTUJ5dGVzIMKgIDk0MCBNYml0cy9zZWMgwqAgwqAwIMKgIDEyLjIgTUJ5dGVzIMKgIMKg IMKgIDxicj5bIMKgNV0gwqAgNS4wMC02LjAwIMKgIHNlYyDCoCAxMTIgTUJ5dGVzIMKgIDk0MiBN Yml0cy9zZWMgwqAgwqAwIMKgIDEyLjIgTUJ5dGVzIMKgIMKgIMKgIDxicj5bIMKgNV0gwqAgNi4w MC03LjAwIMKgIHNlYyDCoCAxMTIgTUJ5dGVzIMKgIDkzOCBNYml0cy9zZWMgwqAgwqAwIMKgIDEy LjIgTUJ5dGVzIMKgIMKgIMKgIDxicj5bIMKgNV0gwqAgNy4wMC04LjAwIMKgIHNlYyDCoCAxMTMg TUJ5dGVzIMKgIDk0NCBNYml0cy9zZWMgwqAgwqAwIMKgIDEyLjIgTUJ5dGVzIMKgIMKgIMKgIDxi cj5bIMKgNV0gwqAgOC4wMC05LjAwIMKgIHNlYyDCoCAxMTIgTUJ5dGVzIMKgIDkzOCBNYml0cy9z ZWMgwqAgwqAwIMKgIDEyLjIgTUJ5dGVzIMKgIMKgIMKgIDxicj5bIMKgNV0gwqAgOS4wMC0xMC4w MCDCoHNlYyDCoCAxMTMgTUJ5dGVzIMKgIDk0NyBNYml0cy9zZWMgwqAgwqAwIMKgIDEyLjIgTUJ5 dGVzIMKgIMKgIMKgIDxicj4tIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g LSAtIC0gLSAtPGJyPlsgSURdIEludGVydmFsIMKgIMKgIMKgIMKgIMKgIFRyYW5zZmVyIMKgIMKg IEJpdHJhdGUgwqAgwqAgwqAgwqAgUmV0cjxicj5bIMKgNV0gwqAgMC4wMC0xMC4wMCDCoHNlYyDC oCA5ODUgTUJ5dGVzIMKgIDgyNiBNYml0cy9zZWMgwqAgwqAwIMKgIMKgIMKgIMKgIMKgIMKgIHNl bmRlcjxicj5bIMKgNV0gwqAgMC4wMC0xMC4xMSDCoHNlYyDCoCA5ODIgTUJ5dGVzIMKgIDgxNSBN Yml0cy9zZWMgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqByZWNlaXZlcjxicj48YnI+aXBlcmYg RG9uZS48ZGl2PjxkaXYgZGlyPSJsdHIiIGNsYXNzPSJnbWFpbF9zaWduYXR1cmUiIGRhdGEtc21h cnRtYWlsPSJnbWFpbF9zaWduYXR1cmUiPjxkaXYgZGlyPSJsdHIiPjxkaXY+PGJyPjwvZGl2PkJl c3QgUmVnYXJkcyw8ZGl2PkNoZW5nIEN1aTwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2Pjxicj48L2Rp dj48YnI+PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUiPjxkaXYgZGlyPSJsdHIiIGNsYXNzPSJnbWFp bF9hdHRyIj5PbiBGcmksIEp1biAzMCwgMjAyMyBhdCAxMjoyNuKAr1BNIE11cmFsaSBLcmlzaG5h bXVydGh5ICZsdDs8YSBocmVmPSJtYWlsdG86bXVyYWxpazFAdm13YXJlLmNvbSI+bXVyYWxpazFA dm13YXJlLmNvbTwvYT4mZ3Q7IHdyb3RlOjxicj48L2Rpdj48YmxvY2txdW90ZSBjbGFzcz0iZ21h aWxfcXVvdGUiIHN0eWxlPSJtYXJnaW46MHB4IDBweCAwcHggMC44ZXg7Ym9yZGVyLWxlZnQ6MXB4 IHNvbGlkIHJnYigyMDQsMjA0LDIwNCk7cGFkZGluZy1sZWZ0OjFleCI+PGRpdiBjbGFzcz0ibXNn NzI3Njc4OTg1Nzg1NDI4NDgzMiI+DQoNCg0KDQoNCg0KPGRpdiBzdHlsZT0ib3ZlcmZsb3ctd3Jh cDogYnJlYWstd29yZDsiIGxhbmc9IkVOLUlOIj4NCjxkaXYgY2xhc3M9Im1fLTg5MzUxNjA5MzAz MjkzMzM4NTdXb3JkU2VjdGlvbjEiPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4+UmljaGFy ZCw8dT48L3U+PHU+PC91Pjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3Bhbj48 dT48L3U+wqA8dT48L3U+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuPkFw cHJlY2lhdGUgdGhlIHVzZWZ1bCBpbnB1dHMgeW91IGhhdmUgc2hhcmVkIHNvIGZhci4gV2lsbCB0 cnkgdG8gZmlndXJlIG91dCByZWdhcmRpbmcgcGFja2V0IGRyb3BzLjx1PjwvdT48dT48L3U+PC9z cGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuPjx1PjwvdT7CoDx1PjwvdT48L3Nw YW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4+UmVnYXJkaW5nIEh5U3RhcnQsIEkg c2VlIGV2ZW4gQlNEIGNvZGUgYmFzZSBoYXMgc3VwcG9ydCBmb3IgdGhpcy4gTWF5IEkga25vdyBi eSB3aGVuIGNhbiB3ZSBzZWUgdGhhdCBpbiBhbiByZWxlYXNlLCBpZiBub3QgYWxyZWFkeSBhdmFp bGFibGUgPzx1PjwvdT48dT48L3U+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxz cGFuPjx1PjwvdT7CoDx1PjwvdT48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNw YW4+UmVnYXJkaW5nIHRoaXMgcG9pbnQgOg0KPGk+4oCcPC9pPjwvc3Bhbj48aT5Td2l0Y2hpbmcg dG8gb3RoZXIgY2MgbW9kdWxlcyBtYXkgZ2l2ZSBzb21lIG1vcmUgaW5zaWdodHMuIEJ1dCBhZ2Fp biwgSSBzdXNwZWN0IHRoYXQgbW9tZW50YXJ5IChtaWNyb3NlY29uZCkgYnVyc3RpbmVzcyBvZiBC U0QgbWF5IGJlIGNhdXNpbmcgdGhpcyBzaWduaWZpY2FudGx5IGhpZ2hlciBsb3NzIHJhdGUuPC9p PjxpPjxzcGFuPuKAnTwvc3Bhbj48L2k+PHNwYW4+PHU+PC91Pjx1PjwvdT48L3NwYW4+PC9wPg0K PHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4+SXMgdGhlcmUgc29tZSBpbmZvIHNvbWV3aGVyZSB3 aGVyZSBJIGNhbiB1bmRlcnN0YW5kIG1vcmUgb24gdGhpcyBpbiBkZXRhaWw/PC9zcGFuPjx1Pjwv dT48dT48L3U+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4+PHU+PC91PsKgPHU+PC91 Pjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3Bhbj5SZWdhcmRzPHU+PC91Pjx1 PjwvdT48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4+TXVyYWxpPHU+PC91 Pjx1PjwvdT48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4+PHU+PC91PsKg PHU+PC91Pjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3Bhbj48dT48L3U+wqA8 dT48L3U+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tYm90 dG9tOjEycHQiPk9uIDMwLzA2LzIzLCA5OjM1IFBNLCAmcXVvdDs8YSBocmVmPSJtYWlsdG86b3du ZXItZnJlZWJzZC10cmFuc3BvcnRAZnJlZWJzZC5vcmciIHRhcmdldD0iX2JsYW5rIj5vd25lci1m cmVlYnNkLXRyYW5zcG9ydEBmcmVlYnNkLm9yZzwvYT4mcXVvdDsgJmx0OzxhIGhyZWY9Im1haWx0 bzpvd25lci1mcmVlYnNkLXRyYW5zcG9ydEBmcmVlYnNkLm9yZyIgdGFyZ2V0PSJfYmxhbmsiPm93 bmVyLWZyZWVic2QtdHJhbnNwb3J0QGZyZWVic2Qub3JnPC9hPiZndDsgd3JvdGU6PHU+PC91Pjx1 PjwvdT48L3A+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHU+PC91PsKgPHU+PC91Pjwv cD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPkhpIE11cmFsaSw8dT48L3U+ PHU+PC91PjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjx1PjwvdT7C oDx1PjwvdT48L3A+DQo8L2Rpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj4mZ3Q7IFEu IFNpbmNlIHlvdSBtZW50aW9uIHR3byBoeXBlcnZpc29ycyAtIHdoYXQgaXMgdGhlIHBoeWlzY2Fs IG5ldHdvcmsgdG9wb2xvZ3kgaW4gYmV0d2VlbiB0aGVzZSB0d28gc2VydmVycz8gV2hhdCB0aGVv cmV0aWNhbCBsaW5rIHJhdGVzIHdvdWxkIGJlIGF0dGFpbmFibGU/PHU+PC91Pjx1PjwvdT48L3A+ DQo8L2Rpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj4mZ3Q7wqDCoDx1PjwvdT48dT48 L3U+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+Jmd0OyBIZXJlIGlz IHRoZSB0b3BvbG9neTx1PjwvdT48dT48L3U+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9 Ik1zb05vcm1hbCI+Jmd0OyA8dT48L3U+PHU+PC91PjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNs YXNzPSJNc29Ob3JtYWwiPiZndDsgSXBlcmYgZW5kIHBvaW50cyBhcmUgb24gMiBkaWZmZXJlbnQg aHlwZXJ2aXNvcnMuIDx1PjwvdT48dT48L3U+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9 Ik1zb05vcm1hbCI+Jmd0OyA8dT48L3U+PHU+PC91PjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNs YXNzPSJNc29Ob3JtYWwiPiZndDvCoMKg4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU wqDCoMKgwqDCoMKgwqDCoOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKA lOKAlOKAlMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg4oCU 4oCU4oCU4oCU4oCU4oCUwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDigJTigJTigJTi gJTigJTigJQt4oCUwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgPHU+PC91Pjx1PjwvdT48L3A+DQo8 L2Rpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj4mZ3Q7IHwgTGludXggVk0xIHzCoMKg wqDCoMKgwqB8wqDCoEJTRCAxMyBWTSAxwqDCoHzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgTGludXggVk0ywqDCoHzCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHzCoMKgQlNEIDEzIFZNIDLCoMKgfDx1PjwvdT48dT48L3U+PC9wPg0KPC9k aXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+Jmd0OyB8X19fX19fX19fX198wqDCoMKg wqDCoMKgfF8gX19fXyBfX19fIF9fXyB8wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqB8X19fX19fX19fX18gfMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgfF8gX19fXyBfX19fIF9fXyB8PHU+PC91Pjx1PjwvdT48L3A+DQo8L2Rpdj4NCjxkaXY+ DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj4mZ3Q7IHzCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8PHU+PC91Pjx1PjwvdT48 L3A+DQo8L2Rpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj4mZ3Q7wqDCoMKgwqDCoMKg wqDCoMKgwqAgfMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB8wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHw8dT48L3U+PHU+PC91PjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3Jt YWwiPiZndDsg4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCUwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDigJTigJTigJTi gJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJQ8dT48L3U+PHU+PC91PjwvcD4NCjwv ZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPiZndDsgfMKgwqDCoMKgwqDCoMKgwqDC oMKgIEVTWCBIeXBlcnZpc29yIDHCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgwqDCoMKgwqDCoMKg wqDCoCAxMEcgbGluayBjb25uZWN0ZWQgdmlhIEwyIFN3aXRjaMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqDCoMKgwqDCoMKgwqDCoMKgIEVTWCBIeXBlcnZp c29ywqDCoDLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8PHU+PC91Pjx1PjwvdT48L3A+DQo8L2Rp dj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj4mZ3Q7IHzCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB84oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU 4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCUwqDCoCB8wqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgfDx1PjwvdT48dT48L3U+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0K PHAgY2xhc3M9Ik1zb05vcm1hbCI+Jmd0OyB84oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU 4oCU4oCU4oCU4oCUIHzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB84oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCUfDx1Pjwv dT48dT48L3U+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+Jmd0OyA8 dT48L3U+PHU+PC91PjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPiZn dDsgPHU+PC91Pjx1PjwvdT48L3A+DQo8L2Rpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFs Ij4mZ3Q7IE5pYyBpcyBvZiAxMEcgY2FwYWNpdHkgb24gYm90aCBFU1ggc2VydmVyIGFuZCBpdCBo YXMgYmVsb3cgY29uZmlnLjx1PjwvdT48dT48L3U+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xh c3M9Ik1zb05vcm1hbCI+PHU+PC91PsKgPHU+PC91PjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNs YXNzPSJNc29Ob3JtYWwiPjx1PjwvdT7CoDx1PjwvdT48L3A+DQo8L2Rpdj4NCjxkaXY+DQo8cCBj bGFzcz0iTXNvTm9ybWFsIj5Tbywgd2hlbiBib3RoIFZNcyBydW4gb24gdGhlIHNhbWUgSHlwZXJ2 aXNvciwgbWF5YmUgd2l0aCBhbm90aGVyIFZNIHRvIHNpbXVsYXRlIHRoZSAxMDBtcyBkZWxheSwg Y2FuIHlvdSBhdHRhaW4gYSBsb3NzbGVzcyBiYXNlbGluZSBzY2VuYXJpbz88dT48L3U+PHU+PC91 PjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjx1PjwvdT7CoDx1Pjwv dT48L3A+DQo8L2Rpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48dT48L3U+wqA8dT48 L3U+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+Jmd0OyBCRFAgZm9y IDE2TUIgU29ja2V0IGJ1ZmZlcjogMTYgTUIgKiAoMTAwMCBtcyAqIDEwMG1zIGxhdGVuY3kpICog OCBiaXRzLyAxMDI0ID0gMS4yNSBHYnBzPHU+PC91Pjx1PjwvdT48L3A+DQo8L2Rpdj4NCjxkaXY+ DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj4mZ3Q7IDx1PjwvdT48dT48L3U+PC9wPg0KPC9kaXY+DQo8 ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+Jmd0OyBTbyB0aGVvcmV0aWNhbGx5IHdlIHNob3Vs ZCBzZWUgY2xvc2UgdG8gMS4yNUdicHMgb2YgQml0cmF0ZSBhbmQgd2Ugc2VlIExpbnV4IHJlYWNo aW5nIGNsb3NlIHRvIHRoaXMgbnVtYmVyLjx1PjwvdT48dT48L3U+PC9wPg0KPC9kaXY+DQo8ZGl2 Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHU+PC91PsKgPHU+PC91PjwvcD4NCjwvZGl2Pg0KPGRp dj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPlVuZGVyIG5vIGxvc3MsIHllcy48dT48L3U+PHU+PC91 PjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjx1PjwvdT7CoDx1Pjwv dT48L3A+DQo8L2Rpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48dT48L3U+wqA8dT48 L3U+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+Jmd0OyBCdXQgQlNE IGlzIG5vdCBhYmxlIHRvIGRvIHRoYXQuPHU+PC91Pjx1PjwvdT48L3A+DQo8L2Rpdj4NCjxkaXY+ DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj4mZ3Q7IDx1PjwvdT48dT48L3U+PC9wPg0KPC9kaXY+DQo8 ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+Jmd0OyA8dT48L3U+PHU+PC91PjwvcD4NCjwvZGl2 Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPiZndDsgUS4gRGlkIHlvdSBydW4gaXBlcmYz PyBEaWQgdGhlIHRyYW5zbWl0dGluZyBlbmRwb2ludCByZXBvcnQgYW55IHJldHJhbnNtaXNzaW9u cyBiZXR3ZWVuIExpbnV4IG9yIEZCU0QgaG9zdHM/PHU+PC91Pjx1PjwvdT48L3A+DQo8L2Rpdj4N CjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj4mZ3Q7IDx1PjwvdT48dT48L3U+PC9wPg0KPC9k aXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+Jmd0OyBZZXMsIHdlIHVzZWQgaXBlcjMu IEkgc2VlIExpbnV4IGRvaW5nIGxlc3MgbnVtYmVyIHJldHJhbnNtaXNzaW9ucyBjb21wYXJlZCB0 byBCU0QuDQo8dT48L3U+PHU+PC91PjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29O b3JtYWwiPiZndDsgT24gQlNELCB0aGUgYmVzdCBwZXJmb3JtYW5jZSB3YXMgYXJvdW5kIDYwMCBN YnBzIGJpdHJhdGUgYW5kIHRoZSBudW1iZXIgb2YgcmV0cmFuc21pc3Npb25zIGZvciB0aGlzIG51 bWJlciBzZWVuIGlzIGFyb3VuZCAzMks8dT48L3U+PHU+PC91PjwvcD4NCjwvZGl2Pg0KPGRpdj4N CjxwIGNsYXNzPSJNc29Ob3JtYWwiPiZndDsgT24gTGludXgsIHRoZSBiZXN0IHBlcmZvcm1hbmNl IHdhcyBhcm91bmQgMS4xNSBHYnBzIGJpdHJhdGUgYW5kIHRoZSBudW1iZXIgb2YgcmV0cmFuc21p c3Npb25zIGZvciB0aGlzIG51bWJlciBzZWVuIGlzIG9ubHkgMksuDQo8dT48L3U+PHU+PC91Pjwv cD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPiZndDsgU28gYXMgeW91IHBv aW50ZWQgdGhlIG51bWJlciBvZiByZXRyYW5zbWlzc2lvbnMgaW4gQlNEIGNvdWxkIGJlIHRoZSBy ZWFsIGlzc3VlIGhlcmUuPHU+PC91Pjx1PjwvdT48L3A+DQo8L2Rpdj4NCjxkaXY+DQo8cCBjbGFz cz0iTXNvTm9ybWFsIj48dT48L3U+wqA8dT48L3U+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xh c3M9Ik1zb05vcm1hbCI+VGhlcmUgYXJlIG90aGVyIGNjIG1vZHVsZXMgYXZhaWxhYmxlOyBidXQg SSBiZWxpZXZlIG9uZSBtYWpvciBkZXZpYXRpb24gaXMgdGhhdCBMaW51eCBjYW4gcGVyZm9ybSBt ZWNoYW5pc21zIGxpa2UgaHlzdGFydDsgQUNLaW5nIGV2ZXJ5IHBhY2tldCB3aGVuIHRoZSBjbGll bnQgZGV0ZWN0cyBzbG93IHN0YXJ0OyBwZXJmb3JtIHBhY2luZyB0byBhY2hpZXZlIG1vcmUgdW5p Zm9ybSBwYWNrZXQgdHJhbnNtaXNzaW9ucy48dT48L3U+PHU+PC91PjwvcD4NCjwvZGl2Pg0KPGRp dj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjx1PjwvdT7CoDx1PjwvdT48L3A+DQo8L2Rpdj4NCjxk aXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj5JIHRoaW5rIHRoZSBuZXh0IHN0ZXAgd291bGQgYmUg dG8gZmluZCBvdXQsIGF0IHdoaWNoIHF1ZXVlIHRob3NlIHBhY2tldCBkaXNjYXJkcyBhcmUgY29t aW5nIGZyb20gKGV4dGVybmFsIHN3aXRjaD8gZGVsYXkgZ2VuZXJhdG9yPyBWc3dpdGNoPyBFdGgg c3RhY2sgaW5zaWRlIHRoZSBWTT8pPHU+PC91Pjx1PjwvdT48L3A+DQo8L2Rpdj4NCjxkaXY+DQo8 cCBjbGFzcz0iTXNvTm9ybWFsIj48dT48L3U+wqA8dT48L3U+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0K PHAgY2xhc3M9Ik1zb05vcm1hbCI+T3IgYWx0ZXJuYXRpdmVseSwgcHJvdmlkZSB5b3VyIEVTWCBo eXBlcnZpc29ycyB3aXRoIHZhc3RseSBtb3JlIGxpbmsgc3BlZWQsIHRvIHJ1bGUgb3V0IGFueSBM MiBpbmR1Y2VkIHBhY2tldCBkcm9wcyAtIHByb3ZpZGVkIHlvdXIgZGVsYXkgZ2VuZXJhdG9yIGlz IG5vdCB0aGUgc291cmNlIHdoZW4gbW9tZW50YXJpbHkgb3ZlcmxvYWRlZC48dT48L3U+PHU+PC91 PjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjx1PjwvdT7CoDx1Pjwv dT48L3A+DQo8L2Rpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj4mZ3Q7IElzIHRoZXJl IGEgd2F5IHRvIHJlZHVjZSB0aGlzIHBhY2tldCBsb3NzIGJ5IGZpbmUgdHVuaW5nIHNvbWUgcGFy YW1ldGVycyB3LnIudCByaW5nIGJ1ZmZlciBvciBhbnkgb3RoZXIgYXJlYXM/DQo8dT48L3U+PHU+ PC91PjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjx1PjwvdT7CoDx1 PjwvdT48L3A+DQo8L2Rpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj5GaW5kaW5nIHdo ZXJlIHRoZXNlIGFyaXNlIChsb29raW5nIGF0IHF1ZXVlIGFuZCBwb3J0IGNvdW50ZXJzKSB3b3Vs ZCBiZSB0aGUgbmV4dCBzdGVwLiBCdXQgdGhpcyBpcyBub3QgcmVhbGx5IG15IHNwZWNpZmljIGFy ZWEgb2YgZXhwZXJ0aXNlIGJleW9uZCB0aGUgaGlnaCBsZXZlbCwgdmVuZG9yIGluZGVwZW5kZW50 IG9ic2VydmF0aW9ucy48dT48L3U+PHU+PC91PjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNz PSJNc29Ob3JtYWwiPjx1PjwvdT7CoDx1PjwvdT48L3A+DQo8L2Rpdj4NCjxkaXY+DQo8cCBjbGFz cz0iTXNvTm9ybWFsIj5Td2l0Y2hpbmcgdG8gb3RoZXIgY2MgbW9kdWxlcyBtYXkgZ2l2ZSBzb21l IG1vcmUgaW5zaWdodHMuIEJ1dCBhZ2FpbiwgSSBzdXNwZWN0IHRoYXQgbW9tZW50YXJ5IChtaWNy b3NlY29uZCkgYnVyc3RpbmVzcyBvZiBCU0QgbWF5IGJlIGNhdXNpbmcgdGhpcyBzaWduaWZpY2Fu dGx5IGhpZ2hlciBsb3NzIHJhdGUuPHU+PC91Pjx1PjwvdT48L3A+DQo8L2Rpdj4NCjxkaXY+DQo8 cCBjbGFzcz0iTXNvTm9ybWFsIj48dT48L3U+wqA8dT48L3U+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0K PHAgY2xhc3M9Ik1zb05vcm1hbCI+VENQIFJBQ0sgd291bGQgYmUgYW5vdGhlciBvcHRpb24uIFRo YXQgc3RhY2sgaGFzIHBhY2luZywgbW9yZSBmaW5lLWdyYWluZWQgdGltaW5nLCB0aGUgUkFDSyBs b3NzIHJlY292ZXJ5IG1lY2hhbmlzbXMgZXRjLiBNYXliZSB0aGF0IGhlbHBzIHJlZHVjZSB0aGUg b2JzZXJ2ZWQgcGFja2V0IGRyb3BzIGJ5IGlwZXJmLCBhbmQgY29uc2VxdWVudGx5LCB5aWVsZCBh IGhpZ2hlciBvdmVyYWxsIHRocm91aGdwdXQuPHU+PC91Pjx1PjwvdT48L3A+DQo8L2Rpdj4NCjxk aXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48dT48L3U+wqA8dT48L3U+PC9wPg0KPC9kaXY+DQo8 ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHU+PC91PsKgPHU+PC91PjwvcD4NCjwvZGl2Pg0K PGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjx1PjwvdT7CoDx1PjwvdT48L3A+DQo8L2Rpdj4N CjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48dT48L3U+wqA8dT48L3U+PC9wPg0KPC9kaXY+ DQo8L2Rpdj4NCjwvZGl2Pg0KDQo8L2Rpdj48L2Jsb2NrcXVvdGU+PC9kaXY+DQo= --00000000000057840405ff5b5cdc--