From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============4900796960655473493==" MIME-Version: 1.0 From: Shahar Salzman Subject: Re: [SPDK] SPDK + user space appliance Date: Wed, 09 May 2018 07:48:37 +0000 Message-ID: In-Reply-To: 1525800619.2784.26.camel@intel.com List-ID: To: spdk@lists.01.org --===============4900796960655473493== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Hi Ben, To answer your question first, the main reason to have a generic spdk IO AP= I for storage appliance is being able to maintain functionality over versio= ns. We started with our module in version 17.07, but when we started integratin= g it into 17.07.01, and the 18.X version we started running into issues. Si= nce the bdev layer is internal to spdk, it makes sense that it will change = both in functionality and in interface from time to time especially in NVMe= F where the specifications are so young, which is the reason that we would = like to have an API which is more stable over versions. As a storage appliance, the requirements are fairly stable, and at least in= the case of SCSI, a thin "glue API" had been enough to get the core applia= nce work with multiple frontend targets (e.g. both SCSI and internal replic= ation). I believe that the same method can be applied to NVMEF. In addition, I think that our use case is not unique to the way we are inte= grating spdk, which means that the work we put in can benefit other users, = and hopefully via their experience, the code can become more robust and use= ful. Shahar ________________________________ From: SPDK on behalf of Walker, Benjamin Sent: Tuesday, May 8, 2018 8:30:20 PM To: spdk(a)lists.01.org Subject: Re: [SPDK] SPDK + user space appliance On Tue, 2018-05-08 at 07:36 +0000, Shahar Salzman wrote: > Hi Jim and Ben, > > For the threading issue, I agree that there is something not very clean i= n the > interface, as there is an assumption on how the user implements it. As I = did > in the bdev_user_example, we also use a ring in order to place all the > incoming IO without delaying the reactor, and then use multiple pollers to > actually handle the IO (deduplication, compression, HA etc.). This is why > there are 2 distinct interfaces - submit_io callback, and > the bdev_user_submit_completion interface which (normally) is called on > another thread (not the original poller), and passed back to the reactor = via > the completion queue on the bdev_user_io_channel, and the registered poll= er > thread which takes from the user completion queue. > Do you think that a cleaner interface would be modifying the submit_io > callback to a poll_io interface which checks a bdev_user internal ring fo= r IO? > Or do you think that the current interface is OK provided good documentat= ion? > > Regarding the spdk_call_unaffinitized, I am currently using spdk_event_ca= ll in > order to register my volumes, I don't really like this since it forces me= to > (eventually) add another async callback in my app to verify that device > registration was successful (and this just adds more conditions, futures = etc. > in the application). Is there a way to call spdk interfaces directly with= a > "non-spdk" thread (i.e. TLS is not initialized)? I'm not so much concerned yet with the interface you've defined, but rather understanding the whole approach at a high level. The SPDK bdev layer is designed for custom bdev modules to be added, so my primary question is why write a generic bdev_user module as opposed to writing a "your custom stora= ge backend" module? I think this is the key piece, and understanding the proce= ss you went through as you designed this will probably yield a whole bunch of = good improvements to the current bdev module system. Thanks, Ben > > Hope this answers the questions, > Shahar > From: SPDK on behalf of Harris, James R > > Sent: Monday, May 7, 2018 9:18:20 PM > To: Storage Performance Development Kit > Subject: Re: [SPDK] SPDK + user space appliance > > There are also calls such as spdk_call_unaffinitized() and > spdk_unaffinitize_thread() which have been added to enable cases where a = bdev > module may need to spawn non-polling threads and don=E2=80=99t want those= threads to > inherit the affinity of the calling thread. The SPDK rbd module currently > uses these (see git commit fa5206c4) since rbd_open is a blocking call. = (Note > that librbd does now support rbd_aio_open which is better suited for SPDK= .) > > -Jim > > > On 5/7/18, 11:02 AM, "SPDK on behalf of Walker, Benjamin" 01.org on behalf of benjamin.walker(a)intel.com> wrote: > > Hi Shahar, > > Thank you for submitting the patch. I've looked through it in detail = and I > think > I understand the purpose of this code, but I'm going to explain it ba= ck to > you > so you can correct me where I'm wrong. > > I think this code solves two distinct problems: > > 1) You need to forward I/O out of the bdev layer to some custom backe= nd, > and you > want the code that does that to live outside of the SPDK repository. > > 2) Your custom back-end library isn't suitable for use in a run-to- > completion > model. By that I mean that you can't just call your library directly = on > the > thread that originally receives the spdk_bdev_io request because your > library > either blocks or generally takes too long to return from the submissi= on > call > (maybe it is doing inline compression or something). Instead, you nee= d to > shuttle those requests off to separate threads for handling. > > As far as point #1, today the SPDK build system does not nicely > accommodate bdev > modules whose code lives outside of SPDK. SPDK expects them to be in > lib/bdev/. However, that's a fairly straightforward chan= ge to > the > build system and it's one we've been intending to make for some time. > > For point #2, this is likely the case for a large number of storage b= ack- > ends, > but I think the proper way to solve it is probably back-end specific = and > not > general purpose. As a counter-point, SPDK already integrates with a n= umber > of > third-party storage back-ends today (Ceph RBD, libiscsi, libaio, etc.= ) and > none > of those ended up needing to pass messages to other threads. They all > support > asynchronous operations, though. I could imagine writing a bdev module > that > ultimately makes POSIX preadv calls, for instance. That would need to= be > implemented with a thread pool and each bdev_io gets funneled off to a > thread in > the pool to perform the blocking operation. > > Ok - I explained what I think I'm understanding. Now tell me where I = went > wrong > :) > > Thanks, > Ben > > On Sun, 2018-05-06 at 10:32 +0000, Shahar Salzman wrote: > > Hi, > > > > I pushed the code for review, thanks Daniel for the help. > > > > In a nutshell: > > - bdev_user - an API for a user appliance to use spdk as an iSCSI/N= VMeF > target > > - bdev_user_example - reference application > > - The API relies on rings in order to submit/complete IOs > > - User appliance registers callbacks for submit_io (should we have > > read/write/other instead?) > > - User appliance registers its devices so that they may be added to= an > > existing namespace (I am using RPC to do the management) > > > > Thanks, > > Shahar > > > > > > From: SPDK on behalf of Verkamp, Dani= el > > rkamp(a)intel.com> > > Sent: Thursday, May 3, 2018 8:50 PM > > To: Storage Performance Development Kit > > Subject: Re: [SPDK] SPDK + user space appliance > > > > Hi Shahar, > > > > The target branch for the push should be =E2=80=98refs/for/master= =E2=80=99, not =E2=80=98master=E2=80=99 > =E2=80=93 if > > you configured a remote as specified in http://www.spdk.io/developm= ent/ > it > > should look like: > > > > [remote "review"] > > url =3D https://review.gerrithub.io/spdk/spdk > > push =3D HEAD:refs/for/master > > > > From: SPDK [mailto:spdk-bounces(a)lists.01.org] On Behalf Of Shahar > Salzman > > Sent: Thursday, May 3, 2018 1:00 AM > > To: Storage Performance Development Kit > > Subject: Re: [SPDK] SPDK + user space appliance > > > > Hi Ben, > > > > I have the code ready for review (spdk/master on dpdk/18.02), but I= do > not > > have push rights for gerrithub: > > shahar.salzman(a)shahars-vm:~/Kaminario/git/spdk$ git push spdk-rev= iew > > HEAD:master > > Password for 'https://ShaharSalzman-K(a)review.gerrithub.io': > > Counting objects: 109, done. > > Compressing objects: 100% (22/22), done. > > Writing objects: 100% (22/22), 8.70 KiB | 0 bytes/s, done. > > Total 22 (delta 14), reused 0 (delta 0) > > remote: Resolving deltas: 100% (14/14) > > remote: Branch refs/heads/master: > > remote: You are not allowed to perform this operation. > > remote: To push into this reference you need 'Push' rights. > > remote: User: ShaharSalzman-K > > remote: Please read the documentation and contact an administrator > > remote: if you feel the configuration is incorrect > > remote: Processing changes: refs: 1, done > > To https://ShaharSalzman-K(a)review.gerrithub.io/a/spdk/spdk > > ! [remote rejected] HEAD -> master (prohibited by Gerrit: ref upda= te > access > > denied) > > error: failed to push some refs to 'https://ShaharSalzman-K(a)revie= w.gerri > thub.i > > o/a/spdk/spdk' > > > > Am I doing something incorrect, or is this just a permission issue? > > > > Thanks, > > Shahar > > From: SPDK on behalf of Shahar Salzman > > zman(a)kaminario.com> > > Sent: Wednesday, April 25, 2018 9:02:38 AM > > To: Storage Performance Development Kit > > Subject: Re: [SPDK] SPDK + user space appliance > > > > Hi Ben, > > > > The code is currently working on v17.07, we are planning on bumping= the > > version to one of the latest stable versions (18.01?) + master. > > It will take me (hopefully) a few days to update the code and have = our > > internal CI start running on this version, not sure it would be use= ful, > but I > > can get our working 17.07 code (+ reference application) for review= much > > faster. > > What is the best course of action? > > > > Shahar > > From: SPDK on behalf of Walker, Benja= min > > .walker(a)intel.com> > > Sent: Tuesday, April 24, 2018 7:19:12 PM > > To: Storage Performance Development Kit > > Subject: Re: [SPDK] SPDK + user space appliance > > > > Hi Shahar, > > > > Would you be willing to submit your bdev module as a patch on Gerri= tHub? > That > > way everyone can take a look and provide feedback. If you don=E2=80= =99t want it > to run > > the tests, you can put [RFC] and the beginning of the commit messag= e. > > > > Thanks, > > Ben > > > > From: SPDK [mailto:spdk-bounces(a)lists.01.org] On Behalf Of Shahar > Salzman > > Sent: Monday, April 23, 2018 8:45 AM > > To: spdk(a)lists.01.org > > Subject: Re: [SPDK] SPDK + user space appliance > > > > Hi Ben, > > > > Bumping this thread since I've been having some new thoughts on the > issue now > > that we are starting integration with newer spdk versions. > > Unfortunately the merge isn't as smooth as I'd like it to be since = the > bdev > > module is pretty tightly integrated into spdk, perhaps we made some > false > > assumptions writing the module, but it seems some of the newer spdk > features > > are complicating the integration. > > My question is, if this passthrough module is useful, wouldn't it be > better to > > maintain it as part of spdk so that we can catch issues as soon as = they > show > > up? > > We would be happy to help with maintaining this module, the module = with > is > > currently part of our CI with our "frozen" spdk version, but once > integrated > > into the newer version we choose, I'll add it to the CI our CI as w= ell. > > > > Shahar > > From: SPDK on behalf of Walker, Benja= min > > .walker(a)intel.com> > > Sent: Friday, February 2, 2018 11:43:58 PM > > To: spdk(a)lists.01.org > > Subject: Re: [SPDK] SPDK + user space appliance > > > > On Thu, 2018-02-01 at 08:29 +0000, Shahar Salzman wrote: > > > Hi Ben, > > > > > > Would you also like to take a look at the bdev_user module? > > > It still needs some patching (as some of the stuff is still hard > coded), but > > I > > > think we can get most of it cleaned up in a couple of days. > > > > > > In any case, is it the intention that the user write his own bdev > module, or > > > would this user appliance glue be a useful generic module? > > > > For existing storage stacks that serve block I/O, like the internal= s of > a SAN, > > the idea is that you write your own bdev module to forward I/O comi= ng > out of > > the > > SPDK bdev layer. Then you can use the SPDK iSCSI/NVMe-oF/vhost targ= ets > mostly > > as-is. > > > > In some cases, the actual iSCSI/NVMe-oF/vhost target applications w= on't > > integrate nicely directly into an existing storage application beca= use > they > > spawn their own threads and allocate their own memory. To support t= hat, > the > > libraries may be consumed directly instead of the applications > (lib/iscsi, > > lib/scsi, lib/nvmf, etc.). The libraries don't spawn any of their o= wn > threads, > > but instead rely on SPDK's abstractions in include/spdk/io_channel.= h. > See > > > > http://www.spdk.io/doc/concurrency.html > > > > We don't currently have a way to write a custom bdev module that re= sides > > outside > > of the SPDK source tree, but it's very possible to add support for = that. > But > > beyond that inconvenience (just drop your module in lib/bdev for no= w), > writing > > a > > bdev module is the recommended way of interacting with the bottom e= nd of > the > > SPDK bdev layer. I think that's what you really want to be doing in= your > code, > > from what I can tell. > > > > I hope that helps! > > _______________________________________________ > > SPDK mailing list > > SPDK(a)lists.01.org > > https://lists.01.org/mailman/listinfo/spdk > > > > _______________________________________________ > > SPDK mailing list > > SPDK(a)lists.01.org > > https://lists.01.org/mailman/listinfo/spdk > _______________________________________________ > SPDK mailing list > SPDK(a)lists.01.org > https://lists.01.org/mailman/listinfo/spdk > > > _______________________________________________ > SPDK mailing list > SPDK(a)lists.01.org > https://lists.01.org/mailman/listinfo/spdk > _______________________________________________ > SPDK mailing list > SPDK(a)lists.01.org > https://lists.01.org/mailman/listinfo/spdk _______________________________________________ SPDK mailing list SPDK(a)lists.01.org https://lists.01.org/mailman/listinfo/spdk --===============4900796960655473493== Content-Type: text/html MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.html" PGh0bWw+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRl eHQvaHRtbDsgY2hhcnNldD1XaW5kb3dzLTEyNTIiPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiIHN0 eWxlPSJkaXNwbGF5Om5vbmU7Ij48IS0tIFAge21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjA7 fSAtLT48L3N0eWxlPgo8L2hlYWQ+Cjxib2R5IGRpcj0ibHRyIj4KPGRpdiBpZD0iZGl2dGFnZGVm YXVsdHdyYXBwZXIiIHN0eWxlPSJmb250LXNpemU6MTJwdDtjb2xvcjojMDAwMDAwO2ZvbnQtZmFt aWx5OkNhbGlicmksSGVsdmV0aWNhLHNhbnMtc2VyaWY7IiBkaXI9Imx0ciI+CjxwIHN0eWxlPSJt YXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowIj5IaSBCZW4sPC9wPgo8cCBzdHlsZT0ibWFyZ2lu LXRvcDowO21hcmdpbi1ib3R0b206MCI+PGJyPgo8L3A+CjxwIHN0eWxlPSJtYXJnaW4tdG9wOjA7 bWFyZ2luLWJvdHRvbTowIj5UbyBhbnN3ZXIgeW91ciBxdWVzdGlvbiBmaXJzdCwgdGhlIG1haW4m bmJzcDtyZWFzb24gdG8gaGF2ZSBhIGdlbmVyaWMgc3BkayBJTyZuYnNwO0FQSSBmb3Igc3RvcmFn ZSBhcHBsaWFuY2UgaXMgYmVpbmcgYWJsZSB0byBtYWludGFpbiBmdW5jdGlvbmFsaXR5IG92ZXIg dmVyc2lvbnMuPC9wPgo8cCBzdHlsZT0ibWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206MCI+V2Ug c3RhcnRlZCB3aXRoIG91ciBtb2R1bGUgaW4gdmVyc2lvbiAxNy4wNywgYnV0IHdoZW4gd2Ugc3Rh cnRlZCBpbnRlZ3JhdGluZyBpdCBpbnRvIDE3LjA3LjAxLCBhbmQgdGhlIDE4LlggdmVyc2lvbiB3 ZSBzdGFydGVkIHJ1bm5pbmcgaW50byBpc3N1ZXMuIFNpbmNlIHRoZSBiZGV2IGxheWVyIGlzIGlu dGVybmFsIHRvIHNwZGssIGl0IG1ha2VzIHNlbnNlIHRoYXQgaXQgd2lsbAogY2hhbmdlIGJvdGgg aW4gZnVuY3Rpb25hbGl0eSBhbmQgaW4gaW50ZXJmYWNlIGZyb20gdGltZSB0byB0aW1lIGVzcGVj aWFsbHkgaW4gTlZNZUYgd2hlcmUgdGhlIHNwZWNpZmljYXRpb25zIGFyZSBzbyB5b3VuZywgd2hp Y2ggaXMgdGhlIHJlYXNvbiB0aGF0IHdlIHdvdWxkIGxpa2UgdG8gaGF2ZSBhbiBBUEkgd2hpY2gg aXMgbW9yZSBzdGFibGUgb3ZlciB2ZXJzaW9ucy48L3A+CjxwIHN0eWxlPSJtYXJnaW4tdG9wOjA7 bWFyZ2luLWJvdHRvbTowIj5BcyBhIHN0b3JhZ2UgYXBwbGlhbmNlLCB0aGUgcmVxdWlyZW1lbnRz IGFyZSBmYWlybHkgc3RhYmxlLCBhbmQgYXQgbGVhc3QgaW4gdGhlIGNhc2Ugb2YgU0NTSSwgYSB0 aGluICZxdW90O2dsdWUgQVBJJnF1b3Q7IGhhZCBiZWVuIGVub3VnaCB0byBnZXQgdGhlIGNvcmUg YXBwbGlhbmNlIHdvcmsgd2l0aCBtdWx0aXBsZSBmcm9udGVuZCB0YXJnZXRzIChlLmcuIGJvdGgg U0NTSSBhbmQgaW50ZXJuYWwKIHJlcGxpY2F0aW9uKS4gSSBiZWxpZXZlIHRoYXQgdGhlIHNhbWUg bWV0aG9kIGNhbiBiZSBhcHBsaWVkIHRvIE5WTUVGLjwvcD4KPHAgc3R5bGU9Im1hcmdpbi10b3A6 MDttYXJnaW4tYm90dG9tOjAiPkluIGFkZGl0aW9uLCBJIHRoaW5rIHRoYXQgb3VyIHVzZSBjYXNl IGlzIG5vdCB1bmlxdWUgdG8gdGhlIHdheSB3ZSBhcmUgaW50ZWdyYXRpbmcgc3Bkaywgd2hpY2gg bWVhbnMgdGhhdCB0aGUgd29yayB3ZSBwdXQgaW4gY2FuIGJlbmVmaXQgb3RoZXIgdXNlcnMsIGFu ZCBob3BlZnVsbHkgdmlhIHRoZWlyIGV4cGVyaWVuY2UsIHRoZSBjb2RlIGNhbiBiZWNvbWUgbW9y ZSByb2J1c3QKIGFuZCB1c2VmdWwuPC9wPgo8cCBzdHlsZT0ibWFyZ2luLXRvcDowO21hcmdpbi1i b3R0b206MCI+PGJyPgo8L3A+CjxwIHN0eWxlPSJtYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTow Ij5TaGFoYXI8L3A+CjwvZGl2Pgo8aHIgc3R5bGU9ImRpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRo Ojk4JSIgdGFiaW5kZXg9Ii0xIj4KPGRpdiBpZD0iZGl2UnBseUZ3ZE1zZyIgZGlyPSJsdHIiPjxm b250IGZhY2U9IkNhbGlicmksIHNhbnMtc2VyaWYiIHN0eWxlPSJmb250LXNpemU6MTFwdCIgY29s b3I9IiMwMDAwMDAiPjxiPkZyb206PC9iPiBTUERLICZsdDtzcGRrLWJvdW5jZXNAbGlzdHMuMDEu b3JnJmd0OyBvbiBiZWhhbGYgb2YgV2Fsa2VyLCBCZW5qYW1pbiAmbHQ7YmVuamFtaW4ud2Fsa2Vy QGludGVsLmNvbSZndDs8YnI+CjxiPlNlbnQ6PC9iPiBUdWVzZGF5LCBNYXkgOCwgMjAxOCA4OjMw OjIwIFBNPGJyPgo8Yj5Ubzo8L2I+IHNwZGtAbGlzdHMuMDEub3JnPGJyPgo8Yj5TdWJqZWN0Ojwv Yj4gUmU6IFtTUERLXSBTUERLICYjNDM7IHVzZXIgc3BhY2UgYXBwbGlhbmNlPC9mb250Pgo8ZGl2 PiZuYnNwOzwvZGl2Pgo8L2Rpdj4KPGRpdiBjbGFzcz0iQm9keUZyYWdtZW50Ij48Zm9udCBzaXpl PSIyIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExcHQ7Ij4KPGRpdiBjbGFzcz0iUGxhaW5UZXh0 Ij5PbiBUdWUsIDIwMTgtMDUtMDggYXQgMDc6MzYgJiM0MzswMDAwLCBTaGFoYXIgU2Fsem1hbiB3 cm90ZTo8YnI+CiZndDsgSGkgSmltIGFuZCBCZW4sPGJyPgomZ3Q7IDxicj4KJmd0OyBGb3IgdGhl IHRocmVhZGluZyBpc3N1ZSwgSSBhZ3JlZSB0aGF0IHRoZXJlIGlzIHNvbWV0aGluZyBub3QgdmVy eSBjbGVhbiBpbiB0aGU8YnI+CiZndDsgaW50ZXJmYWNlLCBhcyB0aGVyZSBpcyBhbiBhc3N1bXB0 aW9uIG9uIGhvdyB0aGUgdXNlciBpbXBsZW1lbnRzIGl0LiBBcyBJIGRpZDxicj4KJmd0OyBpbiB0 aGUgYmRldl91c2VyX2V4YW1wbGUsIHdlIGFsc28gdXNlIGEgcmluZyBpbiBvcmRlciB0byBwbGFj ZSBhbGwgdGhlPGJyPgomZ3Q7IGluY29taW5nIElPIHdpdGhvdXQgZGVsYXlpbmcgdGhlIHJlYWN0 b3IsIGFuZCB0aGVuIHVzZSBtdWx0aXBsZSBwb2xsZXJzIHRvPGJyPgomZ3Q7IGFjdHVhbGx5IGhh bmRsZSB0aGUgSU8gKGRlZHVwbGljYXRpb24sIGNvbXByZXNzaW9uLCBIQSBldGMuKS4gVGhpcyBp cyB3aHk8YnI+CiZndDsgdGhlcmUgYXJlIDIgZGlzdGluY3QgaW50ZXJmYWNlcyAtIHN1Ym1pdF9p byBjYWxsYmFjaywgYW5kPGJyPgomZ3Q7IHRoZSBiZGV2X3VzZXJfc3VibWl0X2NvbXBsZXRpb24g aW50ZXJmYWNlIHdoaWNoIChub3JtYWxseSkgaXMgY2FsbGVkIG9uPGJyPgomZ3Q7IGFub3RoZXIg dGhyZWFkIChub3QgdGhlIG9yaWdpbmFsIHBvbGxlciksIGFuZCBwYXNzZWQgYmFjayB0byB0aGUg cmVhY3RvciB2aWE8YnI+CiZndDsgdGhlIGNvbXBsZXRpb24gcXVldWUgb24gdGhlIGJkZXZfdXNl cl9pb19jaGFubmVsLCBhbmQgdGhlIHJlZ2lzdGVyZWQgcG9sbGVyPGJyPgomZ3Q7IHRocmVhZCB3 aGljaCB0YWtlcyBmcm9tIHRoZSB1c2VyIGNvbXBsZXRpb24gcXVldWUuPGJyPgomZ3Q7IERvIHlv dSB0aGluayB0aGF0IGEgY2xlYW5lciBpbnRlcmZhY2Ugd291bGQgYmUgbW9kaWZ5aW5nIHRoZSBz dWJtaXRfaW88YnI+CiZndDsgY2FsbGJhY2sgdG8gYSBwb2xsX2lvIGludGVyZmFjZSB3aGljaCBj aGVja3MgYSBiZGV2X3VzZXIgaW50ZXJuYWwgcmluZyBmb3IgSU8/PGJyPgomZ3Q7IE9yIGRvIHlv dSB0aGluayB0aGF0IHRoZSBjdXJyZW50IGludGVyZmFjZSBpcyBPSyBwcm92aWRlZCBnb29kIGRv Y3VtZW50YXRpb24/PGJyPgomZ3Q7IDxicj4KJmd0OyBSZWdhcmRpbmcgdGhlIHNwZGtfY2FsbF91 bmFmZmluaXRpemVkLCBJIGFtIGN1cnJlbnRseSB1c2luZyBzcGRrX2V2ZW50X2NhbGwgaW48YnI+ CiZndDsgb3JkZXIgdG8gcmVnaXN0ZXIgbXkgdm9sdW1lcywgSSBkb24ndCByZWFsbHkgbGlrZSB0 aGlzIHNpbmNlIGl0IGZvcmNlcyBtZSB0bzxicj4KJmd0OyAoZXZlbnR1YWxseSkgYWRkIGFub3Ro ZXIgYXN5bmMgY2FsbGJhY2sgaW4gbXkgYXBwIHRvIHZlcmlmeSB0aGF0IGRldmljZTxicj4KJmd0 OyByZWdpc3RyYXRpb24gd2FzIHN1Y2Nlc3NmdWwgKGFuZCB0aGlzIGp1c3QgYWRkcyBtb3JlIGNv bmRpdGlvbnMsIGZ1dHVyZXMgZXRjLjxicj4KJmd0OyBpbiB0aGUgYXBwbGljYXRpb24pLiBJcyB0 aGVyZSBhIHdheSB0byBjYWxsIHNwZGsgaW50ZXJmYWNlcyBkaXJlY3RseSB3aXRoIGE8YnI+CiZn dDsgJnF1b3Q7bm9uLXNwZGsmcXVvdDsgdGhyZWFkIChpLmUuIFRMUyBpcyBub3QgaW5pdGlhbGl6 ZWQpPzxicj4KPGJyPgpJJ20gbm90IHNvIG11Y2ggY29uY2VybmVkIHlldCB3aXRoIHRoZSBpbnRl cmZhY2UgeW91J3ZlIGRlZmluZWQsIGJ1dCByYXRoZXI8YnI+CnVuZGVyc3RhbmRpbmcgdGhlIHdo b2xlIGFwcHJvYWNoIGF0IGEgaGlnaCBsZXZlbC4gVGhlIFNQREsgYmRldiBsYXllciBpczxicj4K ZGVzaWduZWQgZm9yIGN1c3RvbSBiZGV2IG1vZHVsZXMgdG8gYmUgYWRkZWQsIHNvIG15IHByaW1h cnkgcXVlc3Rpb24gaXMgd2h5PGJyPgp3cml0ZSBhIGdlbmVyaWMgYmRldl91c2VyIG1vZHVsZSBh cyBvcHBvc2VkIHRvIHdyaXRpbmcgYSAmcXVvdDt5b3VyIGN1c3RvbSBzdG9yYWdlPGJyPgpiYWNr ZW5kJnF1b3Q7IG1vZHVsZT8gSSB0aGluayB0aGlzIGlzIHRoZSBrZXkgcGllY2UsIGFuZCB1bmRl cnN0YW5kaW5nIHRoZSBwcm9jZXNzPGJyPgp5b3Ugd2VudCB0aHJvdWdoIGFzIHlvdSBkZXNpZ25l ZCB0aGlzIHdpbGwgcHJvYmFibHkgeWllbGQgYSB3aG9sZSBidW5jaCBvZiBnb29kPGJyPgppbXBy b3ZlbWVudHMgdG8gdGhlIGN1cnJlbnQgYmRldiBtb2R1bGUgc3lzdGVtLjxicj4KPGJyPgpUaGFu a3MsPGJyPgpCZW48YnI+Cjxicj4KPGJyPgomZ3Q7IDxicj4KJmd0OyBIb3BlIHRoaXMgYW5zd2Vy cyB0aGUgcXVlc3Rpb25zLDxicj4KJmd0OyBTaGFoYXI8YnI+Cjxicj4KPGJyPgo8YnI+CiZndDsg RnJvbTogU1BESyAmbHQ7c3Bkay1ib3VuY2VzQGxpc3RzLjAxLm9yZyZndDsgb24gYmVoYWxmIG9m IEhhcnJpcywgSmFtZXMgUjxicj4KJmd0OyAmbHQ7amFtZXMuci5oYXJyaXNAaW50ZWwuY29tJmd0 Ozxicj4KJmd0OyBTZW50OiBNb25kYXksIE1heSA3LCAyMDE4IDk6MTg6MjAgUE08YnI+CiZndDsg VG86IFN0b3JhZ2UgUGVyZm9ybWFuY2UgRGV2ZWxvcG1lbnQgS2l0PGJyPgomZ3Q7IFN1YmplY3Q6 IFJlOiBbU1BES10gU1BESyAmIzQzOyB1c2VyIHNwYWNlIGFwcGxpYW5jZTxicj4KJmd0OyZuYnNw OyA8YnI+CiZndDsgVGhlcmUgYXJlIGFsc28gY2FsbHMgc3VjaCBhcyBzcGRrX2NhbGxfdW5hZmZp bml0aXplZCgpIGFuZDxicj4KJmd0OyBzcGRrX3VuYWZmaW5pdGl6ZV90aHJlYWQoKSB3aGljaCBo YXZlIGJlZW4gYWRkZWQgdG8gZW5hYmxlIGNhc2VzIHdoZXJlIGEgYmRldjxicj4KJmd0OyBtb2R1 bGUgbWF5IG5lZWQgdG8gc3Bhd24gbm9uLXBvbGxpbmcgdGhyZWFkcyBhbmQgZG9uknQgd2FudCB0 aG9zZSB0aHJlYWRzIHRvPGJyPgomZ3Q7IGluaGVyaXQgdGhlIGFmZmluaXR5IG9mIHRoZSBjYWxs aW5nIHRocmVhZC4mbmJzcDsgVGhlIFNQREsgcmJkIG1vZHVsZSBjdXJyZW50bHk8YnI+CiZndDsg dXNlcyB0aGVzZSAoc2VlIGdpdCBjb21taXQgZmE1MjA2YzQpIHNpbmNlIHJiZF9vcGVuIGlzIGEg YmxvY2tpbmcgY2FsbC4mbmJzcDsgKE5vdGU8YnI+CiZndDsgdGhhdCBsaWJyYmQgZG9lcyBub3cg c3VwcG9ydCByYmRfYWlvX29wZW4gd2hpY2ggaXMgYmV0dGVyIHN1aXRlZCBmb3IgU1BESy4pPGJy PgomZ3Q7IDxicj4KJmd0OyAtSmltPGJyPgomZ3Q7IDxicj4KJmd0OyA8YnI+CiZndDsgT24gNS83 LzE4LCAxMTowMiBBTSwgJnF1b3Q7U1BESyBvbiBiZWhhbGYgb2YgV2Fsa2VyLCBCZW5qYW1pbiZx dW90OyAmbHQ7c3Bkay1ib3VuY2VzQGxpc3RzLjxicj4KJmd0OyAwMS5vcmcgb24gYmVoYWxmIG9m IGJlbmphbWluLndhbGtlckBpbnRlbC5jb20mZ3Q7IHdyb3RlOjxicj4KJmd0OyA8YnI+CiZndDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgSGkgU2hhaGFyLDxicj4KJmd0OyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyA8YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgVGhhbmsgeW91IGZv ciBzdWJtaXR0aW5nIHRoZSBwYXRjaC4gSSd2ZSBsb29rZWQgdGhyb3VnaCBpdCBpbiBkZXRhaWwg YW5kIEk8YnI+CiZndDsgdGhpbms8YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgSSB1 bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIHRoaXMgY29kZSwgYnV0IEknbSBnb2luZyB0byBleHBs YWluIGl0IGJhY2sgdG88YnI+CiZndDsgeW91PGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7IHNvIHlvdSBjYW4gY29ycmVjdCBtZSB3aGVyZSBJJ20gd3JvbmcuPGJyPgomZ3Q7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7IDxicj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBJIHRo aW5rIHRoaXMgY29kZSBzb2x2ZXMgdHdvIGRpc3RpbmN0IHByb2JsZW1zOjxicj4KJmd0OyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyA8YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgMSkg WW91IG5lZWQgdG8gZm9yd2FyZCBJL08gb3V0IG9mIHRoZSBiZGV2IGxheWVyIHRvIHNvbWUgY3Vz dG9tIGJhY2tlbmQsPGJyPgomZ3Q7IGFuZCB5b3U8YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsgd2FudCB0aGUgY29kZSB0aGF0IGRvZXMgdGhhdCB0byBsaXZlIG91dHNpZGUgb2YgdGhl IFNQREsgcmVwb3NpdG9yeS48YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgPGJyPgom Z3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IDIpIFlvdXIgY3VzdG9tIGJhY2stZW5kIGxpYnJh cnkgaXNuJ3Qgc3VpdGFibGUgZm9yIHVzZSBpbiBhIHJ1bi10by08YnI+CiZndDsgY29tcGxldGlv bjxicj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBtb2RlbC4gQnkgdGhhdCBJIG1lYW4g dGhhdCB5b3UgY2FuJ3QganVzdCBjYWxsIHlvdXIgbGlicmFyeSBkaXJlY3RseSBvbjxicj4KJmd0 OyB0aGU8YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgdGhyZWFkIHRoYXQgb3JpZ2lu YWxseSByZWNlaXZlcyB0aGUgc3Bka19iZGV2X2lvIHJlcXVlc3QgYmVjYXVzZSB5b3VyPGJyPgom Z3Q7IGxpYnJhcnk8YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgZWl0aGVyIGJsb2Nr cyBvciBnZW5lcmFsbHkgdGFrZXMgdG9vIGxvbmcgdG8gcmV0dXJuIGZyb20gdGhlIHN1Ym1pc3Np b248YnI+CiZndDsgY2FsbDxicj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAobWF5YmUg aXQgaXMgZG9pbmcgaW5saW5lIGNvbXByZXNzaW9uIG9yIHNvbWV0aGluZykuIEluc3RlYWQsIHlv dSBuZWVkIHRvPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHNodXR0bGUgdGhvc2Ug cmVxdWVzdHMgb2ZmIHRvIHNlcGFyYXRlIHRocmVhZHMgZm9yIGhhbmRsaW5nLjxicj4KJmd0OyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyA8YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsg QXMgZmFyIGFzIHBvaW50ICMxLCB0b2RheSB0aGUgU1BESyBidWlsZCBzeXN0ZW0gZG9lcyBub3Qg bmljZWx5PGJyPgomZ3Q7IGFjY29tbW9kYXRlIGJkZXY8YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsgbW9kdWxlcyB3aG9zZSBjb2RlIGxpdmVzIG91dHNpZGUgb2YgU1BESy4gU1BESyBl eHBlY3RzIHRoZW0gdG8gYmUgaW48YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgbGli L2JkZXYvJmx0O21vZHVsZV9uYW1lJmd0Oy4gSG93ZXZlciwgdGhhdCdzIGEgZmFpcmx5IHN0cmFp Z2h0Zm9yd2FyZCBjaGFuZ2UgdG88YnI+CiZndDsgdGhlPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7IGJ1aWxkIHN5c3RlbSBhbmQgaXQncyBvbmUgd2UndmUgYmVlbiBpbnRlbmRpbmcg dG8gbWFrZSBmb3Igc29tZSB0aW1lLjxicj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyA8 YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgRm9yIHBvaW50ICMyLCB0aGlzIGlzIGxp a2VseSB0aGUgY2FzZSBmb3IgYSBsYXJnZSBudW1iZXIgb2Ygc3RvcmFnZSBiYWNrLTxicj4KJmd0 OyBlbmRzLDxicj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBidXQgSSB0aGluayB0aGUg cHJvcGVyIHdheSB0byBzb2x2ZSBpdCBpcyBwcm9iYWJseSBiYWNrLWVuZCBzcGVjaWZpYyBhbmQ8 YnI+CiZndDsgbm90PGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGdlbmVyYWwgcHVy cG9zZS4gQXMgYSBjb3VudGVyLXBvaW50LCBTUERLIGFscmVhZHkgaW50ZWdyYXRlcyB3aXRoIGEg bnVtYmVyPGJyPgomZ3Q7IG9mPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHRoaXJk LXBhcnR5IHN0b3JhZ2UgYmFjay1lbmRzIHRvZGF5IChDZXBoIFJCRCwgbGliaXNjc2ksIGxpYmFp bywgZXRjLikgYW5kPGJyPgomZ3Q7IG5vbmU8YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsgb2YgdGhvc2UgZW5kZWQgdXAgbmVlZGluZyB0byBwYXNzIG1lc3NhZ2VzIHRvIG90aGVyIHRo cmVhZHMuIFRoZXkgYWxsPGJyPgomZ3Q7IHN1cHBvcnQ8YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMsIHRob3VnaC4gSSBjb3VsZCBpbWFnaW5l IHdyaXRpbmcgYSBiZGV2IG1vZHVsZTxicj4KJmd0OyB0aGF0PGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7IHVsdGltYXRlbHkgbWFrZXMgUE9TSVggcHJlYWR2IGNhbGxzLCBmb3IgaW5z dGFuY2UuIFRoYXQgd291bGQgbmVlZCB0byBiZTxicj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyBpbXBsZW1lbnRlZCB3aXRoIGEgdGhyZWFkIHBvb2wgYW5kIGVhY2ggYmRldl9pbyBnZXRz IGZ1bm5lbGVkIG9mZiB0byBhPGJyPgomZ3Q7IHRocmVhZCBpbjxicj4KJmd0OyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyB0aGUgcG9vbCB0byBwZXJmb3JtIHRoZSBibG9ja2luZyBvcGVyYXRpb24u PGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IDxicj4KJmd0OyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyBPayAtIEkgZXhwbGFpbmVkIHdoYXQgSSB0aGluayBJJ20gdW5kZXJzdGFuZGlu Zy4gTm93IHRlbGwgbWUgd2hlcmUgSSB3ZW50PGJyPgomZ3Q7IHdyb25nPGJyPgomZ3Q7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7IDopPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IDxi cj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBUaGFua3MsPGJyPgomZ3Q7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7IEJlbjxicj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyA8YnI+ CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgT24gU3VuLCAyMDE4LTA1LTA2IGF0IDEwOjMy ICYjNDM7MDAwMCwgU2hhaGFyIFNhbHptYW4gd3JvdGU6PGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7ICZndDsgSGksPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsg PGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgSSBwdXNoZWQgdGhlIGNvZGUg Zm9yIHJldmlldywgdGhhbmtzIERhbmllbCBmb3IgdGhlIGhlbHAuPGJyPgomZ3Q7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7ICZndDsgPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZn dDsgSW4gYSBudXRzaGVsbDo8YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJmd0OyAt IGJkZXZfdXNlciAtIGFuIEFQSSBmb3IgYSB1c2VyIGFwcGxpYW5jZSB0byB1c2Ugc3BkayBhcyBh biBpU0NTSS9OVk1lRjxicj4KJmd0OyB0YXJnZXQ8YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsgJmd0OyAtIGJkZXZfdXNlcl9leGFtcGxlIC0gcmVmZXJlbmNlIGFwcGxpY2F0aW9uPGJy PgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgLSBUaGUgQVBJIHJlbGllcyBvbiBy aW5ncyBpbiBvcmRlciB0byBzdWJtaXQvY29tcGxldGUgSU9zPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7ICZndDsgLSBVc2VyIGFwcGxpYW5jZSByZWdpc3RlcnMgY2FsbGJhY2tzIGZv ciBzdWJtaXRfaW8gKHNob3VsZCB3ZSBoYXZlPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7ICZndDsgcmVhZC93cml0ZS9vdGhlciBpbnN0ZWFkPyk8YnI+CiZndDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsgJmd0OyAtIFVzZXIgYXBwbGlhbmNlIHJlZ2lzdGVycyBpdHMgZGV2aWNlcyBz byB0aGF0IHRoZXkgbWF5IGJlIGFkZGVkIHRvIGFuPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7ICZndDsgZXhpc3RpbmcgbmFtZXNwYWNlIChJIGFtIHVzaW5nIFJQQyB0byBkbyB0aGUg bWFuYWdlbWVudCk8YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJmd0OyA8YnI+CiZn dDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJmd0OyBUaGFua3MsPGJyPgomZ3Q7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7ICZndDsgU2hhaGFyPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7ICZndDsgPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgPGJyPgomZ3Q7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgRnJvbTogU1BESyAmbHQ7c3Bkay1ib3VuY2Vz QGxpc3RzLjAxLm9yZyZndDsgb24gYmVoYWxmIG9mIFZlcmthbXAsIERhbmllbDxicj4KJmd0OyAm bHQ7ZGFuaWVsLnZlPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgcmthbXBA aW50ZWwuY29tJmd0Ozxicj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmZ3Q7IFNlbnQ6 IFRodXJzZGF5LCBNYXkgMywgMjAxOCA4OjUwIFBNPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7ICZndDsgVG86IFN0b3JhZ2UgUGVyZm9ybWFuY2UgRGV2ZWxvcG1lbnQgS2l0PGJyPgom Z3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgU3ViamVjdDogUmU6IFtTUERLXSBTUERL ICYjNDM7IHVzZXIgc3BhY2UgYXBwbGlhbmNlPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7ICZndDsmbmJzcDsgPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgSGkg U2hhaGFyLDxicj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmZ3Q7Jm5ic3A7IDxicj4K Jmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmZ3Q7IFRoZSB0YXJnZXQgYnJhbmNoIGZvciB0 aGUgcHVzaCBzaG91bGQgYmUgkXJlZnMvZm9yL21hc3RlcpIsIG5vdCCRbWFzdGVykjxicj4KJmd0 OyCWIGlmPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgeW91IGNvbmZpZ3Vy ZWQgYSByZW1vdGUgYXMgc3BlY2lmaWVkIGluIDxhIGhyZWY9Imh0dHA6Ly93d3cuc3Bkay5pby9k ZXZlbG9wbWVudC8iPgpodHRwOi8vd3d3LnNwZGsuaW8vZGV2ZWxvcG1lbnQvPC9hPjxicj4KJmd0 OyBpdDxicj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmZ3Q7IHNob3VsZCBsb29rIGxp a2U6PGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsmbmJzcDsgPGJyPgomZ3Q7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgW3JlbW90ZSAmcXVvdDtyZXZpZXcmcXVvdDtd PGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsmbmJzcDsmbmJzcDsgdXJsID0g PGEgaHJlZj0iaHR0cHM6Ly9yZXZpZXcuZ2Vycml0aHViLmlvL3NwZGsvc3BkayI+aHR0cHM6Ly9y ZXZpZXcuZ2Vycml0aHViLmlvL3NwZGsvc3BkazwvYT48YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsgJmd0OyZuYnNwOyZuYnNwOyBwdXNoID0gSEVBRDpyZWZzL2Zvci9tYXN0ZXI8YnI+ CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJmd0OyZuYnNwOyA8YnI+CiZndDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsgJmd0OyBGcm9tOiBTUERLIFs8YSBocmVmPSJtYWlsdG86c3Bkay1i b3VuY2VzQGxpc3RzLjAxLm9yZyI+bWFpbHRvOnNwZGstYm91bmNlc0BsaXN0cy4wMS5vcmc8L2E+ XSBPbiBCZWhhbGYgT2YgU2hhaGFyPGJyPgomZ3Q7IFNhbHptYW48YnI+CiZndDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsgJmd0OyBTZW50OiBUaHVyc2RheSwgTWF5IDMsIDIwMTggMTowMCBBTTxi cj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmZ3Q7IFRvOiBTdG9yYWdlIFBlcmZvcm1h bmNlIERldmVsb3BtZW50IEtpdCAmbHQ7c3Bka0BsaXN0cy4wMS5vcmcmZ3Q7PGJyPgomZ3Q7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgU3ViamVjdDogUmU6IFtTUERLXSBTUERLICYjNDM7 IHVzZXIgc3BhY2UgYXBwbGlhbmNlPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZn dDsmbmJzcDsgPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgSGkgQmVuLDxi cj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmZ3Q7Jm5ic3A7IDxicj4KJmd0OyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyAmZ3Q7IEkgaGF2ZSB0aGUgY29kZSByZWFkeSBmb3IgcmV2aWV3 IChzcGRrL21hc3RlciBvbiBkcGRrLzE4LjAyKSwgYnV0IEkgZG88YnI+CiZndDsgbm90PGJyPgom Z3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgaGF2ZSBwdXNoIHJpZ2h0cyBmb3IgZ2Vy cml0aHViOjxicj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmZ3Q7IHNoYWhhci5zYWx6 bWFuQHNoYWhhcnMtdm06fi9LYW1pbmFyaW8vZ2l0L3NwZGskIGdpdCBwdXNoIHNwZGstcmV2aWV3 PGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgSEVBRDptYXN0ZXI8YnI+CiZn dDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJmd0OyBQYXNzd29yZCBmb3IgJzxhIGhyZWY9Imh0 dHBzOi8vU2hhaGFyU2Fsem1hbi1LQHJldmlldy5nZXJyaXRodWIuaW8iPmh0dHBzOi8vU2hhaGFy U2Fsem1hbi1LQHJldmlldy5nZXJyaXRodWIuaW88L2E+JzoKPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7ICZndDsgQ291bnRpbmcgb2JqZWN0czogMTA5LCBkb25lLjxicj4KJmd0OyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmZ3Q7IENvbXByZXNzaW5nIG9iamVjdHM6IDEwMCUgKDIy LzIyKSwgZG9uZS48YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJmd0OyBXcml0aW5n IG9iamVjdHM6IDEwMCUgKDIyLzIyKSwgOC43MCBLaUIgfCAwIGJ5dGVzL3MsIGRvbmUuPGJyPgom Z3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgVG90YWwgMjIgKGRlbHRhIDE0KSwgcmV1 c2VkIDAgKGRlbHRhIDApPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgcmVt b3RlOiBSZXNvbHZpbmcgZGVsdGFzOiAxMDAlICgxNC8xNCk8YnI+CiZndDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsgJmd0OyByZW1vdGU6IEJyYW5jaCByZWZzL2hlYWRzL21hc3Rlcjo8YnI+CiZn dDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJmd0OyByZW1vdGU6IFlvdSBhcmUgbm90IGFsbG93 ZWQgdG8gcGVyZm9ybSB0aGlzIG9wZXJhdGlvbi48YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsgJmd0OyByZW1vdGU6IFRvIHB1c2ggaW50byB0aGlzIHJlZmVyZW5jZSB5b3UgbmVlZCAn UHVzaCcgcmlnaHRzLjxicj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmZ3Q7IHJlbW90 ZTogVXNlcjogU2hhaGFyU2Fsem1hbi1LPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 ICZndDsgcmVtb3RlOiBQbGVhc2UgcmVhZCB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgY29udGFjdCBh biBhZG1pbmlzdHJhdG9yPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgcmVt b3RlOiBpZiB5b3UgZmVlbCB0aGUgY29uZmlndXJhdGlvbiBpcyBpbmNvcnJlY3Q8YnI+CiZndDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJmd0OyByZW1vdGU6IFByb2Nlc3NpbmcgY2hhbmdlczog cmVmczogMSwgZG9uZSZuYnNwOyZuYnNwOyZuYnNwOyA8YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsgJmd0OyBUbyA8YSBocmVmPSJodHRwczovL1NoYWhhclNhbHptYW4tS0ByZXZpZXcu Z2Vycml0aHViLmlvL2Evc3Bkay9zcGRrIj5odHRwczovL1NoYWhhclNhbHptYW4tS0ByZXZpZXcu Z2Vycml0aHViLmlvL2Evc3Bkay9zcGRrPC9hPjxicj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyAmZ3Q7Jm5ic3A7ICEgW3JlbW90ZSByZWplY3RlZF0gSEVBRCAtJmd0OyBtYXN0ZXIgKHBy b2hpYml0ZWQgYnkgR2Vycml0OiByZWYgdXBkYXRlPGJyPgomZ3Q7IGFjY2Vzczxicj4KJmd0OyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmZ3Q7IGRlbmllZCk8YnI+CiZndDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsgJmd0OyBlcnJvcjogZmFpbGVkIHRvIHB1c2ggc29tZSByZWZzIHRvICc8YSBo cmVmPSIiPjwvYT5odHRwczovL1NoYWhhclNhbHptYW4tS0ByZXZpZXcuZ2Vycmk8YnI+CiZndDsg dGh1Yi5pPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgby9hL3NwZGsvc3Bk ayc8YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJmd0OyZuYnNwOyA8YnI+CiZndDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJmd0OyBBbSBJIGRvaW5nIHNvbWV0aGluZyBpbmNvcnJl Y3QsIG9yIGlzIHRoaXMganVzdCBhIHBlcm1pc3Npb24gaXNzdWU/PGJyPgomZ3Q7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7ICZndDsmbmJzcDsgPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7ICZndDsgVGhhbmtzLDxicj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmZ3Q7IFNo YWhhcjxicj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmZ3Q7IEZyb206IFNQREsgJmx0 O3NwZGstYm91bmNlc0BsaXN0cy4wMS5vcmcmZ3Q7IG9uIGJlaGFsZiBvZiBTaGFoYXIgU2Fsem1h bjxicj4KJmd0OyAmbHQ7c2hhaGFyLnNhbDxicj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyAmZ3Q7IHptYW5Aa2FtaW5hcmlvLmNvbSZndDs8YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsgJmd0OyBTZW50OiBXZWRuZXNkYXksIEFwcmlsIDI1LCAyMDE4IDk6MDI6MzggQU08YnI+ CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJmd0OyBUbzogU3RvcmFnZSBQZXJmb3JtYW5j ZSBEZXZlbG9wbWVudCBLaXQ8YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJmd0OyBT dWJqZWN0OiBSZTogW1NQREtdIFNQREsgJiM0MzsgdXNlciBzcGFjZSBhcHBsaWFuY2U8YnI+CiZn dDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJmd0OyZuYnNwOyA8YnI+CiZndDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsgJmd0OyBIaSBCZW4sPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7ICZndDsmbmJzcDsgPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgVGhl IGNvZGUgaXMgY3VycmVudGx5IHdvcmtpbmcgb24gdjE3LjA3LCB3ZSBhcmUgcGxhbm5pbmcgb24g YnVtcGluZyB0aGU8YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJmd0OyB2ZXJzaW9u IHRvIG9uZSBvZiB0aGUgbGF0ZXN0IHN0YWJsZSB2ZXJzaW9ucyAoMTguMDE/KSAmIzQzOyBtYXN0 ZXIuPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgSXQgd2lsbCB0YWtlIG1l IChob3BlZnVsbHkpIGEgZmV3IGRheXMgdG8gdXBkYXRlIHRoZSBjb2RlIGFuZCBoYXZlIG91cjxi cj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmZ3Q7IGludGVybmFsIENJIHN0YXJ0IHJ1 bm5pbmcgb24gdGhpcyB2ZXJzaW9uLCBub3Qgc3VyZSBpdCB3b3VsZCBiZSB1c2VmdWwsPGJyPgom Z3Q7IGJ1dCBJPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgY2FuIGdldCBv dXIgd29ya2luZyAxNy4wNyBjb2RlICgmIzQzOyByZWZlcmVuY2UgYXBwbGljYXRpb24pIGZvciBy ZXZpZXcgbXVjaDxicj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmZ3Q7IGZhc3Rlci48 YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJmd0OyBXaGF0IGlzIHRoZSBiZXN0IGNv dXJzZSBvZiBhY3Rpb24/PGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsmbmJz cDsgPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgU2hhaGFyPGJyPgomZ3Q7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgRnJvbTogU1BESyAmbHQ7c3Bkay1ib3VuY2Vz QGxpc3RzLjAxLm9yZyZndDsgb24gYmVoYWxmIG9mIFdhbGtlciwgQmVuamFtaW48YnI+CiZndDsg Jmx0O2JlbmphbWluPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgLndhbGtl ckBpbnRlbC5jb20mZ3Q7PGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgU2Vu dDogVHVlc2RheSwgQXByaWwgMjQsIDIwMTggNzoxOToxMiBQTTxicj4KJmd0OyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyAmZ3Q7IFRvOiBTdG9yYWdlIFBlcmZvcm1hbmNlIERldmVsb3BtZW50IEtp dDxicj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmZ3Q7IFN1YmplY3Q6IFJlOiBbU1BE S10gU1BESyAmIzQzOyB1c2VyIHNwYWNlIGFwcGxpYW5jZTxicj4KJmd0OyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyAmZ3Q7Jm5ic3A7IDxicj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAm Z3Q7IEhpIFNoYWhhciw8YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJmd0OyZuYnNw OyA8YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJmd0OyBXb3VsZCB5b3UgYmUgd2ls bGluZyB0byBzdWJtaXQgeW91ciBiZGV2IG1vZHVsZSBhcyBhIHBhdGNoIG9uIEdlcnJpdEh1Yj88 YnI+CiZndDsgVGhhdDxicj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmZ3Q7IHdheSBl dmVyeW9uZSBjYW4gdGFrZSBhIGxvb2sgYW5kIHByb3ZpZGUgZmVlZGJhY2suIElmIHlvdSBkb26S dCB3YW50IGl0PGJyPgomZ3Q7IHRvIHJ1bjxicj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyAmZ3Q7IHRoZSB0ZXN0cywgeW91IGNhbiBwdXQgW1JGQ10gYW5kIHRoZSBiZWdpbm5pbmcgb2Yg dGhlIGNvbW1pdCBtZXNzYWdlLjxicj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmZ3Q7 Jm5ic3A7IDxicj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmZ3Q7IFRoYW5rcyw8YnI+ CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJmd0OyBCZW48YnI+CiZndDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsgJmd0OyZuYnNwOyA8YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsgJmd0OyBGcm9tOiBTUERLIFs8YSBocmVmPSJtYWlsdG86c3Bkay1ib3VuY2VzQGxpc3RzLjAx Lm9yZyI+bWFpbHRvOnNwZGstYm91bmNlc0BsaXN0cy4wMS5vcmc8L2E+XSBPbiBCZWhhbGYgT2Yg U2hhaGFyPGJyPgomZ3Q7IFNhbHptYW48YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsg Jmd0OyBTZW50OiBNb25kYXksIEFwcmlsIDIzLCAyMDE4IDg6NDUgQU08YnI+CiZndDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsgJmd0OyBUbzogc3Bka0BsaXN0cy4wMS5vcmc8YnI+CiZndDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsgJmd0OyBTdWJqZWN0OiBSZTogW1NQREtdIFNQREsgJiM0Mzsg dXNlciBzcGFjZSBhcHBsaWFuY2U8YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJmd0 OyZuYnNwOyA8YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJmd0OyBIaSBCZW4sPGJy PgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsmbmJzcDsgPGJyPgomZ3Q7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgQnVtcGluZyB0aGlzIHRocmVhZCBzaW5jZSBJJ3ZlIGJl ZW4gaGF2aW5nIHNvbWUgbmV3IHRob3VnaHRzIG9uIHRoZTxicj4KJmd0OyBpc3N1ZSBub3c8YnI+ CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJmd0OyB0aGF0IHdlIGFyZSBzdGFydGluZyBp bnRlZ3JhdGlvbiB3aXRoIG5ld2VyIHNwZGsgdmVyc2lvbnMuPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7ICZndDsgVW5mb3J0dW5hdGVseSB0aGUgbWVyZ2UgaXNuJ3QgYXMgc21vb3Ro IGFzIEknZCBsaWtlIGl0IHRvIGJlIHNpbmNlIHRoZTxicj4KJmd0OyBiZGV2PGJyPgomZ3Q7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgbW9kdWxlIGlzIHByZXR0eSB0aWdodGx5IGludGVn cmF0ZWQgaW50byBzcGRrLCBwZXJoYXBzIHdlIG1hZGUgc29tZTxicj4KJmd0OyBmYWxzZTxicj4K Jmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmZ3Q7IGFzc3VtcHRpb25zIHdyaXRpbmcgdGhl IG1vZHVsZSwgYnV0IGl0IHNlZW1zIHNvbWUgb2YgdGhlIG5ld2VyIHNwZGs8YnI+CiZndDsgZmVh dHVyZXM8YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJmd0OyBhcmUgY29tcGxpY2F0 aW5nIHRoZSBpbnRlZ3JhdGlvbi48YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJmd0 OyBNeSBxdWVzdGlvbiBpcywgaWYgdGhpcyBwYXNzdGhyb3VnaCBtb2R1bGUgaXMgdXNlZnVsLCB3 b3VsZG4ndCBpdCBiZTxicj4KJmd0OyBiZXR0ZXIgdG88YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsgJmd0OyBtYWludGFpbiBpdCBhcyBwYXJ0IG9mIHNwZGsgc28gdGhhdCB3ZSBjYW4g Y2F0Y2ggaXNzdWVzIGFzIHNvb24gYXMgdGhleTxicj4KJmd0OyBzaG93PGJyPgomZ3Q7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgdXA/PGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7ICZndDsgV2Ugd291bGQgYmUgaGFwcHkgdG8gaGVscCB3aXRoIG1haW50YWluaW5nIHRoaXMg bW9kdWxlLCB0aGUgbW9kdWxlIHdpdGg8YnI+CiZndDsgaXM8YnI+CiZndDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsgJmd0OyBjdXJyZW50bHkgcGFydCBvZiBvdXIgQ0kgd2l0aCBvdXIgJnF1b3Q7 ZnJvemVuJnF1b3Q7IHNwZGsgdmVyc2lvbiwgYnV0IG9uY2U8YnI+CiZndDsgaW50ZWdyYXRlZDxi cj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmZ3Q7IGludG8gdGhlIG5ld2VyIHZlcnNp b24gd2UgY2hvb3NlLCBJJ2xsIGFkZCBpdCB0byB0aGUgQ0kgb3VyIENJIGFzIHdlbGwuPGJyPgom Z3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsmbmJzcDsgPGJyPgomZ3Q7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7ICZndDsgU2hhaGFyPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7ICZndDsgRnJvbTogU1BESyAmbHQ7c3Bkay1ib3VuY2VzQGxpc3RzLjAxLm9yZyZndDsgb24g YmVoYWxmIG9mIFdhbGtlciwgQmVuamFtaW48YnI+CiZndDsgJmx0O2JlbmphbWluPGJyPgomZ3Q7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgLndhbGtlckBpbnRlbC5jb20mZ3Q7PGJyPgom Z3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgU2VudDogRnJpZGF5LCBGZWJydWFyeSAy LCAyMDE4IDExOjQzOjU4IFBNPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsg VG86IHNwZGtAbGlzdHMuMDEub3JnPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZn dDsgU3ViamVjdDogUmU6IFtTUERLXSBTUERLICYjNDM7IHVzZXIgc3BhY2UgYXBwbGlhbmNlPGJy PgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsmbmJzcDsgPGJyPgomZ3Q7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgT24gVGh1LCAyMDE4LTAyLTAxIGF0IDA4OjI5ICYjNDM7 MDAwMCwgU2hhaGFyIFNhbHptYW4gd3JvdGU6PGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7ICZndDsgJmd0OyBIaSBCZW4sPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZn dDsgJmd0OyA8YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJmd0OyAmZ3Q7IFdvdWxk IHlvdSBhbHNvIGxpa2UgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGJkZXZfdXNlciBtb2R1bGU/PGJy PgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgJmd0OyBJdCBzdGlsbCBuZWVkcyBz b21lIHBhdGNoaW5nIChhcyBzb21lIG9mIHRoZSBzdHVmZiBpcyBzdGlsbCBoYXJkPGJyPgomZ3Q7 IGNvZGVkKSwgYnV0PGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgSTxicj4K Jmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmZ3Q7ICZndDsgdGhpbmsgd2UgY2FuIGdldCBt b3N0IG9mIGl0IGNsZWFuZWQgdXAgaW4gYSBjb3VwbGUgb2YgZGF5cy48YnI+CiZndDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsgJmd0OyAmZ3Q7IDxicj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyAmZ3Q7ICZndDsgSW4gYW55IGNhc2UsIGlzIGl0IHRoZSBpbnRlbnRpb24gdGhhdCB0aGUg dXNlciB3cml0ZSBoaXMgb3duIGJkZXY8YnI+CiZndDsgbW9kdWxlLCBvcjxicj4KJmd0OyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyAmZ3Q7ICZndDsgd291bGQgdGhpcyB1c2VyIGFwcGxpYW5jZSBn bHVlIGJlIGEgdXNlZnVsIGdlbmVyaWMgbW9kdWxlPzxicj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyAmZ3Q7IDxicj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmZ3Q7IEZvciBl eGlzdGluZyBzdG9yYWdlIHN0YWNrcyB0aGF0IHNlcnZlIGJsb2NrIEkvTywgbGlrZSB0aGUgaW50 ZXJuYWxzIG9mPGJyPgomZ3Q7IGEgU0FOLDxicj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyAmZ3Q7IHRoZSBpZGVhIGlzIHRoYXQgeW91IHdyaXRlIHlvdXIgb3duIGJkZXYgbW9kdWxlIHRv IGZvcndhcmQgSS9PIGNvbWluZzxicj4KJmd0OyBvdXQgb2Y8YnI+CiZndDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsgJmd0OyB0aGU8YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJmd0 OyBTUERLIGJkZXYgbGF5ZXIuIFRoZW4geW91IGNhbiB1c2UgdGhlIFNQREsgaVNDU0kvTlZNZS1v Ri92aG9zdCB0YXJnZXRzPGJyPgomZ3Q7IG1vc3RseTxicj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyAmZ3Q7IGFzLWlzLjxicj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmZ3Q7 IDxicj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmZ3Q7IEluIHNvbWUgY2FzZXMsIHRo ZSBhY3R1YWwgaVNDU0kvTlZNZS1vRi92aG9zdCB0YXJnZXQgYXBwbGljYXRpb25zIHdvbid0PGJy PgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgaW50ZWdyYXRlIG5pY2VseSBkaXJl Y3RseSBpbnRvIGFuIGV4aXN0aW5nIHN0b3JhZ2UgYXBwbGljYXRpb24gYmVjYXVzZTxicj4KJmd0 OyB0aGV5PGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgc3Bhd24gdGhlaXIg b3duIHRocmVhZHMgYW5kIGFsbG9jYXRlIHRoZWlyIG93biBtZW1vcnkuIFRvIHN1cHBvcnQgdGhh dCw8YnI+CiZndDsgdGhlPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgbGli cmFyaWVzIG1heSBiZSBjb25zdW1lZCBkaXJlY3RseSBpbnN0ZWFkIG9mIHRoZSBhcHBsaWNhdGlv bnM8YnI+CiZndDsgKGxpYi9pc2NzaSw8YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsg Jmd0OyBsaWIvc2NzaSwgbGliL252bWYsIGV0Yy4pLiBUaGUgbGlicmFyaWVzIGRvbid0IHNwYXdu IGFueSBvZiB0aGVpciBvd248YnI+CiZndDsgdGhyZWFkcyw8YnI+CiZndDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsgJmd0OyBidXQgaW5zdGVhZCByZWx5IG9uIFNQREsncyBhYnN0cmFjdGlvbnMg aW4gaW5jbHVkZS9zcGRrL2lvX2NoYW5uZWwuaC48YnI+CiZndDsgU2VlPGJyPgomZ3Q7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 ICZndDsgPGEgaHJlZj0iaHR0cDovL3d3dy5zcGRrLmlvL2RvYy9jb25jdXJyZW5jeS5odG1sIj5o dHRwOi8vd3d3LnNwZGsuaW8vZG9jL2NvbmN1cnJlbmN5Lmh0bWw8L2E+PGJyPgomZ3Q7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 ICZndDsgV2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSB3YXkgdG8gd3JpdGUgYSBjdXN0b20gYmRl diBtb2R1bGUgdGhhdCByZXNpZGVzPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZn dDsgb3V0c2lkZTxicj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmZ3Q7IG9mIHRoZSBT UERLIHNvdXJjZSB0cmVlLCBidXQgaXQncyB2ZXJ5IHBvc3NpYmxlIHRvIGFkZCBzdXBwb3J0IGZv ciB0aGF0Ljxicj4KJmd0OyBCdXQ8YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJmd0 OyBiZXlvbmQgdGhhdCBpbmNvbnZlbmllbmNlIChqdXN0IGRyb3AgeW91ciBtb2R1bGUgaW4gbGli L2JkZXYgZm9yIG5vdyksPGJyPgomZ3Q7IHdyaXRpbmc8YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsgJmd0OyBhPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgYmRl diBtb2R1bGUgaXMgdGhlIHJlY29tbWVuZGVkIHdheSBvZiBpbnRlcmFjdGluZyB3aXRoIHRoZSBi b3R0b20gZW5kIG9mPGJyPgomZ3Q7IHRoZTxicj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyAmZ3Q7IFNQREsgYmRldiBsYXllci4gSSB0aGluayB0aGF0J3Mgd2hhdCB5b3UgcmVhbGx5IHdh bnQgdG8gYmUgZG9pbmcgaW4geW91cjxicj4KJmd0OyBjb2RlLDxicj4KJmd0OyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyAmZ3Q7IGZyb20gd2hhdCBJIGNhbiB0ZWxsLjxicj4KJmd0OyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyAmZ3Q7IDxicj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAm Z3Q7IEkgaG9wZSB0aGF0IGhlbHBzITxicj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAm Z3Q7IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fPGJyPgom Z3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZndDsgU1BESyBtYWlsaW5nIGxpc3Q8YnI+CiZn dDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJmd0OyBTUERLQGxpc3RzLjAxLm9yZzxicj4KJmd0 OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmZ3Q7IDxhIGhyZWY9Imh0dHBzOi8vbGlzdHMuMDEu b3JnL21haWxtYW4vbGlzdGluZm8vc3BkayI+aHR0cHM6Ly9saXN0cy4wMS5vcmcvbWFpbG1hbi9s aXN0aW5mby9zcGRrPC9hPjxicj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmZ3Q7IDxi cj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmZ3Q7IF9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fPGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7ICZndDsgU1BESyBtYWlsaW5nIGxpc3Q8YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsgJmd0OyBTUERLQGxpc3RzLjAxLm9yZzxicj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyAmZ3Q7IDxhIGhyZWY9Imh0dHBzOi8vbGlzdHMuMDEub3JnL21haWxtYW4vbGlzdGluZm8vc3Bk ayI+aHR0cHM6Ly9saXN0cy4wMS5vcmcvbWFpbG1hbi9saXN0aW5mby9zcGRrPC9hPjxicj4KJmd0 OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXzxicj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBTUERLIG1h aWxpbmcgbGlzdDxicj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBTUERLQGxpc3RzLjAx Lm9yZzxicj4KJmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyA8YSBocmVmPSJodHRwczovL2xp c3RzLjAxLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3NwZGsiPmh0dHBzOi8vbGlzdHMuMDEub3JnL21h aWxtYW4vbGlzdGluZm8vc3BkazwvYT48YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsg PGJyPgomZ3Q7IDxicj4KJmd0OyBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXzxicj4KJmd0OyBTUERLIG1haWxpbmcgbGlzdDxicj4KJmd0OyBTUERLQGxpc3Rz LjAxLm9yZzxicj4KJmd0OyA8YSBocmVmPSJodHRwczovL2xpc3RzLjAxLm9yZy9tYWlsbWFuL2xp c3RpbmZvL3NwZGsiPmh0dHBzOi8vbGlzdHMuMDEub3JnL21haWxtYW4vbGlzdGluZm8vc3Bkazwv YT48YnI+CiZndDsgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X188YnI+CiZndDsgU1BESyBtYWlsaW5nIGxpc3Q8YnI+CiZndDsgU1BES0BsaXN0cy4wMS5vcmc8 YnI+CiZndDsgPGEgaHJlZj0iaHR0cHM6Ly9saXN0cy4wMS5vcmcvbWFpbG1hbi9saXN0aW5mby9z cGRrIj5odHRwczovL2xpc3RzLjAxLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3NwZGs8L2E+PGJyPgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzxicj4KU1BESyBt YWlsaW5nIGxpc3Q8YnI+ClNQREtAbGlzdHMuMDEub3JnPGJyPgo8YSBocmVmPSJodHRwczovL2xp c3RzLjAxLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3NwZGsiPmh0dHBzOi8vbGlzdHMuMDEub3JnL21h aWxtYW4vbGlzdGluZm8vc3BkazwvYT48YnI+CjwvZGl2Pgo8L3NwYW4+PC9mb250PjwvZGl2Pgo8 L2JvZHk+CjwvaHRtbD4K --===============4900796960655473493==--