From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============2599084613881809709==" MIME-Version: 1.0 From: Luse, Paul E Subject: Re: [SPDK] Building spdk on CentOS6 Date: Wed, 09 May 2018 12:51:23 +0000 Message-ID: <82C9F782B054C94B9FC04A331649C77AA6F71A61@fmsmsx104.amr.corp.intel.com> In-Reply-To: AM3PR04MB37071D960F141098AFC256889990@AM3PR04MB370.eurprd04.prod.outlook.com List-ID: To: spdk@lists.01.org --===============2599084613881809709== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Thanks for doing that! I put my 2 cents on the review, one more data point = for the maintainers might help - help long do you believe your team will be= on CentOS6? Don't need a specific date but are we talking months, years, i= ndefinitely? I think the other implication of accepting this in the community would be t= o spin up a CentOS6 VM for some basic testing for as long as we hold that p= atch in our DPDK fork which is not a huge thing but want to make sure that'= s clear as well. If nothing else we'll know if something else breaks it soo= ner than later and will need to decide, again, at that time if we pull it o= r if it's a high enough priority for anyone to dig in and find a potential = solution like you did here. Assuming, of course, that this one is accepted= :) Thanks, Paul From: SPDK [mailto:spdk-bounces(a)lists.01.org] On Behalf Of Shahar Salzman Sent: Wednesday, May 9, 2018 2:01 AM To: spdk(a)lists.01.org Subject: Re: [SPDK] Building spdk on CentOS6 Hi Ben, Pushed the fix to gerrithub - https://review.gerrithub.io/#/c/spdk/dpdk/+/4= 10559/ We are currently using a "frozen" dpdk tree based version 16.07, but I am p= ushing to using the spdk fork and performing regular updates so if things b= reak, I will attempt to fix them, and post on the list. The above fixes a blunt gcc API issue, but there are more subtle inner modu= le issues which I have not investigated, simply removed the modules all tog= ether as they are not needed by spdk. I can set up a howto for users who may need CentOS6 support or we can modif= y the config (as these modules are not really needed for spdk). For the sak= e of clarity here are the modules "configed out" (as I mentioned they are n= ot used by spdk): +CONFIG_RTE_LIBRTE_PMD_BOND=3Dn +CONFIG_RTE_LIBRTE_CRYPTODEV=3Dn +CONFIG_RTE_LIBRTE_SECURITY=3Dn +CONFIG_RTE_LIBRTE_PMD_SW_EVENTDEV=3Dn +CONFIG_RTE_LIBRTE_PMD_OCTEONTX_SSOVF=3Dn +CONFIG_RTE_LIBRTE_LPM=3Dn +CONFIG_RTE_LIBRTE_FLOW_CLASSIFY=3Dn +CONFIG_RTE_LIBRTE_TABLE=3Dn +CONFIG_RTE_LIBRTE_PIPELINE=3Dn +CONFIG_RTE_TEST_PMD=3Dn +CONFIG_RTE_LIBRTE_PMD_TAP=3Dn +CONFIG_RTE_LIBRTE_AVP_PMD=3Dn Regarding the -fn-strict-aliasing issue, I'll see if I can do the same tric= k I did for the gcc alias in the Makefile, and push the fix for review. Shahar ________________________________ From: SPDK = > on behalf of Walker, Benjamin > Sent: Tuesday, May 8, 2018 7:49:44 PM To: spdk(a)lists.01.org Subject: Re: [SPDK] Building spdk on CentOS6 On Tue, 2018-05-08 at 14:34 +0000, Shahar Salzman wrote: > Got it. > > I was tracking the dpdk project, and focused on the branch that Daniel to= ld me > to work on. > So would the correct process be to push the patch to the spdk/dpdk gerrit= hub > and discuss the commit, or the other way around? Yes - go ahead and push to spdk/dpdk on GerritHub so we can all review it. = The SPDK project has never written out a policy on which versions of DPDK are supported for any given SPDK release. The code is always tested using the l= atest released DPDK, and then attempts to support older versions of DPDK are done= in an ad hoc manner. Similarly, the project never explicitly states which oper= ating systems are supported. Instead, we indicate which operating systems the cod= e is regularly tested on (Fedora N and N-1, Ubuntu latest, Ubuntu LTS, CentOS 7, FreeBSD 11). I see that CentOS 6 is no longer receiving full updates and is in maintenan= ce only mode. It will stop receiving even maintenance updates in 2020. I think= that is indicative of the level of support SPDK should provide here. Given the above, if this patch can be applied to the DPDK fork and doesn't = have any additional impact, I'm not opposed to applying it. That wouldn't, in my mind, mean that SPDK is committed to supporting CentOS 6 indefinitely. But certainly that support could continue while it is relatively easy and convenient. > > From: SPDK > on behalf of Luse, Paul E > intel.com> > Sent: Tuesday, May 8, 2018 5:14:10 PM > To: Storage Performance Development Kit > Subject: Re: [SPDK] Building spdk on CentOS6 > > Sure, I understand that. SPDK maintains a fork of dpdk in github at http= s://g > ithub.com/spdk/dpdk for the purpose of temporarily putting things in that= we > need that can't make it upstream yet for whatever reason - this is the > submodule in the SPDK repo. I'm not saying that it makes sense for your = patch > to land there permanently but it does make sense to talk about it. > > No problem on not being on the call, we'll get some input from the mainta= iners > and others I'm sure... > > Thx > Paul > > From: SPDK [mailto:spdk-bounces(a)lists.01.org] On Behalf Of Shahar Salzm= an > Sent: Tuesday, May 8, 2018 7:04 AM > To: Storage Performance Development Kit > > Subject: Re: [SPDK] Building spdk on CentOS6 > > Hey Paul, > > The problem is that the patch is in dpdk and not in spdk, and this is the > reason I offered to support it. > The patch (bellow) is only a few lines long modifying the deprecated attr= ibute > definition, a modification to the config, and an extra compilation flag. > All of the above are required in order to build dpdk 18.01 on CentOS6, th= ere > are no problems building spdk on CentOS6. > > I understood that you are already applying minor patches to dpdk, so ques= tion > is, whether this patch can be added? > > Unfortunately due to some personal issues, I am unable to participate in > today's meeting. > > Thanks, > Shahar > From: SPDK > on behalf of Luse, Paul E > intel.com> > Sent: Tuesday, May 8, 2018 4:25:29 PM > To: Storage Performance Development Kit > Subject: Re: [SPDK] Building spdk on CentOS6 > > Hi Shahar, > > Couple of quick things: > > * thanks for putting all this time and effort into trying to make this wo= rk! > * in the community model, patches aren't accepted based on one individual= 's > ability/desire to support them so appreciate the offer but in general any > patch that is accepted becomes the responsibly of the community (mostly t= he > maintainers) to support it long term. Otherwise we'd have what I like to= call > "the flea market model" where there's a bunch of separate individuals > supporting their own things with very little cohesiveness across everythi= ng J > > So, wrt next steps, if the patch isn't a tremendous amount of effort I wo= uld > suggest you go ahead and submit it. That's the best way to get everyone o= n the > same page wrt exactly what we're talking about. If it is some significant > effort then, as Pawel states, you can call into a community meeting (see = email > I sent out last night) or you can explain more details on this list. > > Thanks again!! > Paul > > From: SPDK [mailto:spdk-bounces(a)lists.01.org] On Behalf Of Wodkowski, P= awelX > Sent: Tuesday, May 8, 2018 5:57 AM > To: Storage Performance Development Kit > > Subject: Re: [SPDK] Building spdk on CentOS6 > > I think someone will answer you on this mailing list but there is communi= ty > meeting today too. You can raise this if you wish. > > Pawel > > From: SPDK [mailto:spdk-bounces(a)lists.01.org] On Behalf Of Shahar Salzm= an > Sent: Tuesday, May 8, 2018 2:23 PM > To: Storage Performance Development Kit > > Subject: Re: [SPDK] Building spdk on CentOS6 > > Hi, > > I attempted to push the gcc support patch to dpdk, and got rejected since= they > do not wish to support CentOS6. > Would it be possible to manually add the patch to the supported dpdk vers= ion > (currently 18.01). > I would be happy to support CentOS6 issues. > > Thanks, > Shahar > > From: Shahar Salzman > Sent: Tuesday, April 24, 2018 3:40:51 PM > To: Storage Performance Development Kit > Cc: Ilan Steinberg; Ido Benda; Yael Shavit > Subject: Re: Building spdk on CentOS6 > > OK, got everything to work. > > For DPDK, I had to to do the following: > add a patch to make the new __rte_experimental attribute to work > remove a bunch of modules via config which had some gnarly compilation er= rors, > and are not needed for spdk > use -fno-strict-aliasing in the EXTRA_CFLAGS to avoid a ton of strict ali= asing > errors. > > I tried spdk 18.01, and ran into some issues with the shared library buil= d. As > I saw that Daniel had already dealt with them, I tried cherry picking, but > eventually used the master branch. > I got these type of warnings: > > /usr/bin/ld: warning: librte_mbuf.so.3.1, needed by > /khome/shahar.salzman/Kaminario/git/dpdk/x86_64-native-linuxapp- > gcc/lib/librte_bus_pci.so, not found (try using -rpath or -rpath-link) > /usr/bin/ld: warning: librte_ethdev.so.8.1, needed by > /khome/shahar.salzman/Kaminario/git/dpdk/x86_64-native-linuxapp- > gcc/lib/librte_bus_pci.so, not found (try using -rpath or -rpath-link) > > I added the following patch bellow to make them go away. > > I'll approach the dpdk community on the mailing list in order to get the > __rte_experimental stuff to work. > My final configuration is: > CenrOS6.4 > gcc 4.4.7-17 > dpdk v18.02 > spdk master > > What are the next steps? > > Shahar > > P.S. Here is the patch to remove the warnings above. > commit d4ef744de1cc4928972b7042d1c90aff12db7867 > Author: shahar salzman > > Date: Tue Apr 24 14:31:52 2018 +0300 > > lib/env_dpdk: add required libraries > > diff --git a/lib/env_dpdk/env.mk b/lib/env_dpdk/env.mk > index 450043c..b46bfed 100644 > --- a/lib/env_dpdk/env.mk > +++ b/lib/env_dpdk/env.mk > @@ -68,6 +68,18 @@ ifneq ($(wildcard $(DPDK_ABS_DIR)/lib/librte_malloc.*)= ,) > DPDK_LIB_LIST +=3D rte_malloc > endif > > +ifneq (, $(wildcard $(DPDK_ABS_DIR)/lib/librte_mbuf.*)) > +DPDK_LIB_LIST +=3D rte_mbuf > +endif > + > +ifneq (, $(wildcard $(DPDK_ABS_DIR)/lib/librte_net.*)) > +DPDK_LIB_LIST +=3D rte_net > +endif > + > +ifneq (, $(wildcard $(DPDK_ABS_DIR)/lib/librte_ethdev.*)) > +DPDK_LIB_LIST +=3D rte_ethdev > +endif > + > # librte_pci and librte_bus_pci were added in DPDK 17.11. Link these > libraries conditionally > # based on their existence to maintain backward compatibility. > ifneq (, $(wildcard $(DPDK_ABS_DIR)/lib/librte_pci.*)) > > > > From: SPDK > on behalf of Shahar Salzman zman(a)kaminario.com> > Sent: Tuesday, April 24, 2018 9:57 AM > To: Storage Performance Development Kit > Subject: Re: [SPDK] Building spdk on CentOS6 > > Great, and thanks! > > I have been running into issues compiling dpdk 17.11 on CentOS6 (there se= ems > to be a gcc issue that does not exist in other versions), I'll focus my > efforts on dpdk 18.02. > From: SPDK > on behalf of Verkamp, Daniel rkamp(a)intel.com> > Sent: Monday, April 23, 2018 9:40:36 PM > To: Storage Performance Development Kit > Subject: Re: [SPDK] Building spdk on CentOS6 > > Hi Shahar, > > I've pushed a patch for the SPDK master branch that should allow it to co= mpile > with DPDK 16.07: https://review.gerrithub.io/#/c/spdk/spdk/+/408743/ > > Gerrit Code Review > > review.gerrithub.io > > Keep in touch. Copyright (c) 2017 | GerritForge Ltd. info(a)gerritforge.c= om > www.gerritforge.com > > > However, DPDK 16.07 is no longer supported upstream; I highly recommend t= hat > you update to a newer version. SPDK is currently tested with DPDK 18.02. > > The VFIO issue you mention has also been fixed on SPDK master, and it wil= l be > part of the SPDK v18.04 release. > > Thanks, > -- Daniel > > From: SPDK [mailto:spdk-bounces(a)lists.01.org] On Behalf Of Shahar Salzm= an > Sent: Sunday, April 22, 2018 6:41 AM > To: Storage Performance Development Kit > > Subject: [SPDK] Building spdk on CentOS6 > > Hi, > > Finally got to looking at support of spdk build on CentOS6, things look g= ood, > except for one issue. > spdk is latest 18.01.x version, dpdk is 16.07 (+3 dpdk patches to allow > compilation) and some minor patches (mainly some memory configuration stu= ff), > kernel is a patched 4.9.6. > > build succeeded except for the usage of the dpdk function pci_vfio_is_ena= bled. > I had to apply the patch bellow, removing the usage of this function and = then > compilation completed without any issues. > > It seems that I am missing some sort of dpdk configuration as I see that = the > function is built, but not packaged into the generated archive. > > I went back to square one and ran the instructions in http://www.spdk.io/= doc/g > etting_started.html, but I see no mention of dpdk there. Actually the > ./configure requires it. > > My next step is to use a more recent dpdk, but shouldn't this work with my > version? Am I missing some dpdk configuration? > BTW, as we are not using vhost, on our 17.07 version we simply use > CONFIG_VHOST=3Dn in order to skip this, but I would be happier if we used= a > better solution. > > Shahar > > P.S. Here is the patch to remove use of this function: > diff --git a/lib/env_dpdk/vtophys.c b/lib/env_dpdk/vtophys.c > index 92aa256..f38929f 100644 > --- a/lib/env_dpdk/vtophys.c > +++ b/lib/env_dpdk/vtophys.c > @@ -53,8 +53,10 @@ > #define SPDK_VFIO_ENABLED 1 > #include > > +#if 0 > /* Internal DPDK function forward declaration */ > int pci_vfio_is_enabled(void); > +#endif > > struct spdk_vfio_dma_map { > struct vfio_iommu_type1_dma_map map; > @@ -341,9 +343,11 @@ spdk_vtophys_iommu_init(void) > DIR *dir; > struct dirent *d; > > +#if 0 > if (!pci_vfio_is_enabled()) { > return; > } > +#endif > > dir =3D opendir("/proc/self/fd"); > if (!dir) { > > > _______________________________________________ > 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 --===============2599084613881809709== Content-Type: text/html MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.html" PGh0bWwgeG1sbnM6dj0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiIHhtbG5zOm89InVy bjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIgeG1sbnM6dz0idXJuOnNjaGVt YXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIgeG1sbnM6bT0iaHR0cDovL3NjaGVtYXMubWlj cm9zb2Z0LmNvbS9vZmZpY2UvMjAwNC8xMi9vbW1sIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv VFIvUkVDLWh0bWw0MCI+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNv bnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSI+CjxtZXRhIG5hbWU9IkdlbmVyYXRv ciIgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgMTUgKGZpbHRlcmVkIG1lZGl1bSkiPgo8IS0tW2lm ICFtc29dPjxzdHlsZT52XDoqIHtiZWhhdmlvcjp1cmwoI2RlZmF1bHQjVk1MKTt9Cm9cOioge2Jl aGF2aW9yOnVybCgjZGVmYXVsdCNWTUwpO30Kd1w6KiB7YmVoYXZpb3I6dXJsKCNkZWZhdWx0I1ZN TCk7fQouc2hhcGUge2JlaGF2aW9yOnVybCgjZGVmYXVsdCNWTUwpO30KPC9zdHlsZT48IVtlbmRp Zl0tLT48c3R5bGU+PCEtLQovKiBGb250IERlZmluaXRpb25zICovCkBmb250LWZhY2UKCXtmb250 LWZhbWlseTpXaW5nZGluZ3M7CglwYW5vc2UtMTo1IDAgMCAwIDAgMCAwIDAgMCAwO30KQGZvbnQt ZmFjZQoJe2ZvbnQtZmFtaWx5OiJDYW1icmlhIE1hdGgiOwoJcGFub3NlLTE6MiA0IDUgMyA1IDQg NiAzIDIgNDt9CkBmb250LWZhY2UKCXtmb250LWZhbWlseTpDYWxpYnJpOwoJcGFub3NlLTE6MiAx NSA1IDIgMiAyIDQgMyAyIDQ7fQovKiBTdHlsZSBEZWZpbml0aW9ucyAqLwpwLk1zb05vcm1hbCwg bGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCgl7bWFyZ2luOjBpbjsKCW1hcmdpbi1ib3R0b206 LjAwMDFwdDsKCWZvbnQtc2l6ZToxMi4wcHQ7Cglmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFu IixzZXJpZjt9CmE6bGluaywgc3Bhbi5Nc29IeXBlcmxpbmsKCXttc28tc3R5bGUtcHJpb3JpdHk6 OTk7Cgljb2xvcjpibHVlOwoJdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9CmE6dmlzaXRlZCwg c3Bhbi5Nc29IeXBlcmxpbmtGb2xsb3dlZAoJe21zby1zdHlsZS1wcmlvcml0eTo5OTsKCWNvbG9y OnB1cnBsZTsKCXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fQpwCgl7bXNvLXN0eWxlLXByaW9y aXR5Ojk5OwoJbWFyZ2luOjBpbjsKCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKCWZvbnQtc2l6ZTox Mi4wcHQ7Cglmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIixzZXJpZjt9CnNwYW4uRW1haWxT dHlsZTE4Cgl7bXNvLXN0eWxlLXR5cGU6cGVyc29uYWwtcmVwbHk7Cglmb250LWZhbWlseToiQ2Fs aWJyaSIsc2Fucy1zZXJpZjsKCWNvbG9yOiMxRjQ5N0Q7fQouTXNvQ2hwRGVmYXVsdAoJe21zby1z dHlsZS10eXBlOmV4cG9ydC1vbmx5OwoJZm9udC1zaXplOjEwLjBwdDt9CkBwYWdlIFdvcmRTZWN0 aW9uMQoJe3NpemU6OC41aW4gMTEuMGluOwoJbWFyZ2luOjEuMGluIDEuMGluIDEuMGluIDEuMGlu O30KZGl2LldvcmRTZWN0aW9uMQoJe3BhZ2U6V29yZFNlY3Rpb24xO30KLS0+PC9zdHlsZT48IS0t W2lmIGd0ZSBtc28gOV0+PHhtbD4KPG86c2hhcGVkZWZhdWx0cyB2OmV4dD0iZWRpdCIgc3BpZG1h eD0iMTAyNiIgLz4KPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Cjxv OnNoYXBlbGF5b3V0IHY6ZXh0PSJlZGl0Ij4KPG86aWRtYXAgdjpleHQ9ImVkaXQiIGRhdGE9IjEi IC8+CjwvbzpzaGFwZWxheW91dD48L3htbD48IVtlbmRpZl0tLT4KPC9oZWFkPgo8Ym9keSBsYW5n PSJFTi1VUyIgbGluaz0iYmx1ZSIgdmxpbms9InB1cnBsZSI+CjxkaXYgY2xhc3M9IldvcmRTZWN0 aW9uMSI+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0 O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjtjb2xvcjojMUY0OTdE Ij5UaGFua3MgZm9yIGRvaW5nIHRoYXQhIEkgcHV0IG15IDIgY2VudHMgb24gdGhlIHJldmlldywg b25lIG1vcmUgZGF0YSBwb2ludCBmb3IgdGhlIG1haW50YWluZXJzIG1pZ2h0IGhlbHAgJiM4MjEx OyBoZWxwIGxvbmcgZG8geW91IGJlbGlldmUgeW91ciB0ZWFtIHdpbGwgYmUgb24gQ2VudE9TNj8K IERvbiYjODIxNzt0IG5lZWQgYSBzcGVjaWZpYyBkYXRlIGJ1dCBhcmUgd2UgdGFsa2luZyBtb250 aHMsIHllYXJzLCBpbmRlZmluaXRlbHk/PG86cD48L286cD48L3NwYW4+PC9wPgo8cCBjbGFzcz0i TXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVv dDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFGNDk3RCI+PG86cD4mbmJzcDs8L286 cD48L3NwYW4+PC9wPgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXpl OjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6 IzFGNDk3RCI+SSB0aGluayB0aGUgb3RoZXIgaW1wbGljYXRpb24gb2YgYWNjZXB0aW5nIHRoaXMg aW4gdGhlIGNvbW11bml0eSB3b3VsZCBiZSB0byBzcGluIHVwIGEgQ2VudE9TNiBWTSBmb3Igc29t ZSBiYXNpYyB0ZXN0aW5nIGZvciBhcyBsb25nIGFzIHdlIGhvbGQgdGhhdCBwYXRjaCBpbgogb3Vy IERQREsgZm9yayB3aGljaCBpcyBub3QgYSBodWdlIHRoaW5nIGJ1dCB3YW50IHRvIG1ha2Ugc3Vy ZSB0aGF0JiM4MjE3O3MgY2xlYXIgYXMgd2VsbC4gSWYgbm90aGluZyBlbHNlIHdlJiM4MjE3O2xs IGtub3cgaWYgc29tZXRoaW5nIGVsc2UgYnJlYWtzIGl0IHNvb25lciB0aGFuIGxhdGVyIGFuZCB3 aWxsIG5lZWQgdG8gZGVjaWRlLCBhZ2FpbiwgYXQgdGhhdCB0aW1lIGlmIHdlIHB1bGwgaXQgb3Ig aWYgaXQmIzgyMTc7cyBhIGhpZ2ggZW5vdWdoIHByaW9yaXR5IGZvciBhbnlvbmUKIHRvIGRpZyBp biBhbmQgZmluZCBhIHBvdGVudGlhbCBzb2x1dGlvbiBsaWtlIHlvdSBkaWQgaGVyZS4mbmJzcDsg QXNzdW1pbmcsIG9mIGNvdXJzZSwgdGhhdCB0aGlzIG9uZSBpcyBhY2NlcHRlZAo8L3NwYW4+PHNw YW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6V2luZ2RpbmdzO2NvbG9yOiMx RjQ5N0QiPko8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6 JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmO2NvbG9yOiMxRjQ5N0QiPjxvOnA+PC9vOnA+ PC9zcGFuPjwvcD4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTox MS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmO2NvbG9yOiMx RjQ5N0QiPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+ PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZx dW90OyxzYW5zLXNlcmlmO2NvbG9yOiMxRjQ5N0QiPlRoYW5rcyw8bzpwPjwvbzpwPjwvc3Bhbj48 L3A+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2Zv bnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjtjb2xvcjojMUY0OTdEIj5Q YXVsPG86cD48L286cD48L3NwYW4+PC9wPgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48YSBuYW1lPSJf TWFpbEVuZENvbXBvc2UiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5 OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjtjb2xvcjojMUY0OTdEIj48bzpwPiZuYnNw OzwvbzpwPjwvc3Bhbj48L2E+PC9wPgo8ZGl2Pgo8ZGl2IHN0eWxlPSJib3JkZXI6bm9uZTtib3Jk ZXItdG9wOnNvbGlkICNFMUUxRTEgMS4wcHQ7cGFkZGluZzozLjBwdCAwaW4gMGluIDBpbiI+Cjxw IGNsYXNzPSJNc29Ob3JtYWwiPjxhIG5hbWU9Il9fX19fcmVwbHlzZXBhcmF0b3IiPjwvYT48Yj48 c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1 b3Q7LHNhbnMtc2VyaWYiPkZyb206PC9zcGFuPjwvYj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEx LjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWYiPiBTUERLIFtt YWlsdG86c3Bkay1ib3VuY2VzQGxpc3RzLjAxLm9yZ10KPGI+T24gQmVoYWxmIE9mIDwvYj5TaGFo YXIgU2Fsem1hbjxicj4KPGI+U2VudDo8L2I+IFdlZG5lc2RheSwgTWF5IDksIDIwMTggMjowMSBB TTxicj4KPGI+VG86PC9iPiBzcGRrQGxpc3RzLjAxLm9yZzxicj4KPGI+U3ViamVjdDo8L2I+IFJl OiBbU1BES10gQnVpbGRpbmcgc3BkayBvbiBDZW50T1M2PG86cD48L286cD48L3NwYW4+PC9wPgo8 L2Rpdj4KPC9kaXY+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPgo8 ZGl2IGlkPSJkaXZ0YWdkZWZhdWx0d3JhcHBlciI+CjxkaXYgaWQ9ImRpdnRhZ2RlZmF1bHR3cmFw cGVyIj4KPHA+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fu cy1zZXJpZjtjb2xvcjpibGFjayI+SGkgQmVuLDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4KPHA+PHNw YW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjtjb2xv cjpibGFjayI+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPgo8cD48c3BhbiBzdHlsZT0iZm9u dC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmO2NvbG9yOmJsYWNrIj5QdXNo ZWQgdGhlIGZpeCB0byBnZXJyaXRodWIgLSZuYnNwOzxhIGhyZWY9Imh0dHBzOi8vcmV2aWV3Lmdl cnJpdGh1Yi5pby8jL2Mvc3Bkay9kcGRrLyYjNDM7LzQxMDU1OS8iIGlkPSJMUGxuazIwMTI4MyI+ aHR0cHM6Ly9yZXZpZXcuZ2Vycml0aHViLmlvLyMvYy9zcGRrL2RwZGsvJiM0MzsvNDEwNTU5Lzwv YT48bzpwPjwvbzpwPjwvc3Bhbj48L3A+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxl PSJmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6YmxhY2si PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4KPHA+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5 OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjtjb2xvcjpibGFjayI+V2UgYXJlIGN1cnJl bnRseSB1c2luZyBhICZxdW90O2Zyb3plbiZxdW90OyBkcGRrIHRyZWUgYmFzZWQgdmVyc2lvbiAx Ni4wNywgYnV0IEkgYW0gcHVzaGluZyB0byB1c2luZyB0aGUgc3BkayBmb3JrIGFuZCBwZXJmb3Jt aW5nIHJlZ3VsYXIgdXBkYXRlcyBzbyBpZiB0aGluZ3MgYnJlYWssIEkgd2lsbCBhdHRlbXB0IHRv IGZpeCB0aGVtLCBhbmQgcG9zdCBvbgogdGhlIGxpc3QuPG86cD48L286cD48L3NwYW4+PC9wPgo8 cD48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlm O2NvbG9yOmJsYWNrIj48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+CjxwPjxzcGFuIHN0eWxl PSJmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6YmxhY2si PlRoZSBhYm92ZSBmaXhlcyBhIGJsdW50IGdjYyZuYnNwO0FQSSBpc3N1ZSwgYnV0IHRoZXJlIGFy ZSBtb3JlIHN1YnRsZSBpbm5lciBtb2R1bGUgaXNzdWVzIHdoaWNoIEkgaGF2ZSBub3QgaW52ZXN0 aWdhdGVkLCBzaW1wbHkgcmVtb3ZlZCB0aGUgbW9kdWxlcyBhbGwgdG9nZXRoZXIgYXMgdGhleSBh cmUgbm90IG5lZWRlZCBieSBzcGRrLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4KPHA+PHNwYW4gc3R5 bGU9ImZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjtjb2xvcjpibGFj ayI+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPgo8cD48c3BhbiBzdHlsZT0iZm9udC1mYW1p bHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmO2NvbG9yOmJsYWNrIj5JIGNhbiBzZXQg dXAgYSBob3d0byBmb3IgdXNlcnMgd2hvIG1heSBuZWVkIENlbnRPUzYgc3VwcG9ydCBvciB3ZSBj YW4gbW9kaWZ5IHRoZSBjb25maWcgKGFzIHRoZXNlIG1vZHVsZXMgYXJlIG5vdCByZWFsbHkgbmVl ZGVkIGZvciBzcGRrKS4gRm9yIHRoZSBzYWtlIG9mIGNsYXJpdHkgaGVyZSBhcmUgdGhlIG1vZHVs ZXMgJnF1b3Q7Y29uZmlnZWQgb3V0JnF1b3Q7CiAoYXMgSSBtZW50aW9uZWQgdGhleSBhcmUgbm90 IHVzZWQgYnkgc3Bkayk6PG86cD48L286cD48L3NwYW4+PC9wPgo8ZGl2Pgo8cCBjbGFzcz0iTXNv Tm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5z LXNlcmlmO2NvbG9yOmJsYWNrIj4mIzQzO0NPTkZJR19SVEVfTElCUlRFX1BNRF9CT05EPW48bzpw PjwvbzpwPjwvc3Bhbj48L3A+CjwvZGl2Pgo8ZGl2Pgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3Bh biBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmO2NvbG9y OmJsYWNrIj4mIzQzO0NPTkZJR19SVEVfTElCUlRFX0NSWVBUT0RFVj1uPG86cD48L286cD48L3Nw YW4+PC9wPgo8L2Rpdj4KPGRpdj4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZv bnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjtjb2xvcjpibGFjayI+JiM0 MztDT05GSUdfUlRFX0xJQlJURV9TRUNVUklUWT1uPG86cD48L286cD48L3NwYW4+PC9wPgo8L2Rp dj4KPGRpdj4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZx dW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjtjb2xvcjpibGFjayI+JiM0MztDT05GSUdfUlRF X0xJQlJURV9QTURfU1dfRVZFTlRERVY9bjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4KPC9kaXY+Cjxk aXY+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtD YWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6YmxhY2siPiYjNDM7Q09ORklHX1JURV9MSUJS VEVfUE1EX09DVEVPTlRYX1NTT1ZGPW48bzpwPjwvbzpwPjwvc3Bhbj48L3A+CjwvZGl2Pgo8ZGl2 Pgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7Q2Fs aWJyaSZxdW90OyxzYW5zLXNlcmlmO2NvbG9yOmJsYWNrIj4mIzQzO0NPTkZJR19SVEVfTElCUlRF X0xQTT1uPG86cD48L286cD48L3NwYW4+PC9wPgo8L2Rpdj4KPGRpdj4KPHAgY2xhc3M9Ik1zb05v cm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1z ZXJpZjtjb2xvcjpibGFjayI+JiM0MztDT05GSUdfUlRFX0xJQlJURV9GTE9XX0NMQVNTSUZZPW48 bzpwPjwvbzpwPjwvc3Bhbj48L3A+CjwvZGl2Pgo8ZGl2Pgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48 c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmO2Nv bG9yOmJsYWNrIj4mIzQzO0NPTkZJR19SVEVfTElCUlRFX1RBQkxFPW48bzpwPjwvbzpwPjwvc3Bh bj48L3A+CjwvZGl2Pgo8ZGl2Pgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9u dC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmO2NvbG9yOmJsYWNrIj4mIzQz O0NPTkZJR19SVEVfTElCUlRFX1BJUEVMSU5FPW48bzpwPjwvbzpwPjwvc3Bhbj48L3A+CjwvZGl2 Pgo8ZGl2Pgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1 b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmO2NvbG9yOmJsYWNrIj4mIzQzO0NPTkZJR19SVEVf VEVTVF9QTUQ9bjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4KPC9kaXY+CjxkaXY+CjxwIGNsYXNzPSJN c29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNh bnMtc2VyaWY7Y29sb3I6YmxhY2siPiYjNDM7Q09ORklHX1JURV9MSUJSVEVfUE1EX1RBUD1uPG86 cD48L286cD48L3NwYW4+PC9wPgo8L2Rpdj4KPGRpdj4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNw YW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjtjb2xv cjpibGFjayI+JiM0MztDT05GSUdfUlRFX0xJQlJURV9BVlBfUE1EPW48bzpwPjwvbzpwPjwvc3Bh bj48L3A+CjwvZGl2Pgo8ZGl2Pgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9u dC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmO2NvbG9yOmJsYWNrIj48bzpw PiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+CjwvZGl2Pgo8ZGl2Pgo8cCBjbGFzcz0iTXNvTm9ybWFs Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlm O2NvbG9yOmJsYWNrIj5SZWdhcmRpbmcgdGhlIC1mbi1zdHJpY3QtYWxpYXNpbmcgaXNzdWUsIEkn bGwgc2VlIGlmIEkgY2FuIGRvIHRoZSBzYW1lIHRyaWNrIEkgZGlkIGZvciB0aGUgZ2NjIGFsaWFz IGluIHRoZSBNYWtlZmlsZSwgYW5kIHB1c2ggdGhlIGZpeCBmb3IgcmV2aWV3LjxvOnA+PC9vOnA+ PC9zcGFuPjwvcD4KPC9kaXY+CjxkaXY+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxl PSJmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6YmxhY2si PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4KPC9kaXY+CjxwPjxzcGFuIHN0eWxlPSJmb250 LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6YmxhY2siPlNoYWhh cjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4KPHA+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90 O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjtjb2xvcjpibGFjayI+PG86cD4mbmJzcDs8L286cD48 L3NwYW4+PC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0iTXNvTm9ybWFsIiBhbGlnbj0iY2VudGVyIiBz dHlsZT0idGV4dC1hbGlnbjpjZW50ZXIiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtD YWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6YmxhY2siPgo8aHIgc2l6ZT0iNCIgd2lkdGg9 Ijk4JSIgYWxpZ249ImNlbnRlciI+Cjwvc3Bhbj48L2Rpdj4KPGRpdiBpZD0iZGl2UnBseUZ3ZE1z ZyI+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0 O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjtjb2xvcjpibGFjayI+ RnJvbTo8L3NwYW4+PC9iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5 OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjtjb2xvcjpibGFjayI+IFNQREsgJmx0Ozxh IGhyZWY9Im1haWx0bzpzcGRrLWJvdW5jZXNAbGlzdHMuMDEub3JnIj5zcGRrLWJvdW5jZXNAbGlz dHMuMDEub3JnPC9hPiZndDsKIG9uIGJlaGFsZiBvZiBXYWxrZXIsIEJlbmphbWluICZsdDs8YSBo cmVmPSJtYWlsdG86YmVuamFtaW4ud2Fsa2VyQGludGVsLmNvbSI+YmVuamFtaW4ud2Fsa2VyQGlu dGVsLmNvbTwvYT4mZ3Q7PGJyPgo8Yj5TZW50OjwvYj4gVHVlc2RheSwgTWF5IDgsIDIwMTggNzo0 OTo0NCBQTTxicj4KPGI+VG86PC9iPiA8YSBocmVmPSJtYWlsdG86c3Bka0BsaXN0cy4wMS5vcmci PnNwZGtAbGlzdHMuMDEub3JnPC9hPjxicj4KPGI+U3ViamVjdDo8L2I+IFJlOiBbU1BES10gQnVp bGRpbmcgc3BkayBvbiBDZW50T1M2PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVv dDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6YmxhY2siPgo8bzpwPjwvbzpwPjwvc3Bh bj48L3A+CjxkaXY+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LWZhbWls eTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6YmxhY2siPiZuYnNwOzxvOnA+ PC9vOnA+PC9zcGFuPjwvcD4KPC9kaXY+CjwvZGl2Pgo8ZGl2Pgo8ZGl2Pgo8cCBjbGFzcz0iTXNv Tm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtD YWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6YmxhY2siPk9uIFR1ZSwgMjAxOC0wNS0wOCBh dCAxNDozNCAmIzQzOzAwMDAsIFNoYWhhciBTYWx6bWFuIHdyb3RlOjxicj4KJmd0OyBHb3QgaXQu PGJyPgomZ3Q7IDxicj4KJmd0OyBJIHdhcyB0cmFja2luZyB0aGUgZHBkayBwcm9qZWN0LCBhbmQg Zm9jdXNlZCBvbiB0aGUgYnJhbmNoIHRoYXQgRGFuaWVsIHRvbGQgbWU8YnI+CiZndDsgdG8gd29y ayBvbi48YnI+CiZndDsgU28gd291bGQgdGhlIGNvcnJlY3QgcHJvY2VzcyBiZSB0byBwdXNoIHRo ZSBwYXRjaCB0byB0aGUgc3Bkay9kcGRrIGdlcnJpdGh1Yjxicj4KJmd0OyBhbmQgZGlzY3VzcyB0 aGUgY29tbWl0LCBvciB0aGUgb3RoZXIgd2F5IGFyb3VuZD88YnI+Cjxicj4KWWVzIC0gZ28gYWhl YWQgYW5kIHB1c2ggdG8gc3Bkay9kcGRrIG9uIEdlcnJpdEh1YiBzbyB3ZSBjYW4gYWxsIHJldmll dyBpdC4gVGhlPGJyPgpTUERLIHByb2plY3QgaGFzIG5ldmVyIHdyaXR0ZW4gb3V0IGEgcG9saWN5 IG9uIHdoaWNoIHZlcnNpb25zIG9mIERQREsgYXJlPGJyPgpzdXBwb3J0ZWQgZm9yIGFueSBnaXZl biBTUERLIHJlbGVhc2UuIFRoZSBjb2RlIGlzIGFsd2F5cyB0ZXN0ZWQgdXNpbmcgdGhlIGxhdGVz dDxicj4KcmVsZWFzZWQgRFBESywgYW5kIHRoZW4gYXR0ZW1wdHMgdG8gc3VwcG9ydCBvbGRlciB2 ZXJzaW9ucyBvZiBEUERLIGFyZSBkb25lIGluPGJyPgphbiBhZCBob2MgbWFubmVyLiBTaW1pbGFy bHksIHRoZSBwcm9qZWN0IG5ldmVyIGV4cGxpY2l0bHkgc3RhdGVzIHdoaWNoIG9wZXJhdGluZzxi cj4Kc3lzdGVtcyBhcmUgc3VwcG9ydGVkLiBJbnN0ZWFkLCB3ZSBpbmRpY2F0ZSB3aGljaCBvcGVy YXRpbmcgc3lzdGVtcyB0aGUgY29kZSBpczxicj4KcmVndWxhcmx5IHRlc3RlZCBvbiAoRmVkb3Jh IE4gYW5kIE4tMSwgVWJ1bnR1IGxhdGVzdCwgVWJ1bnR1IExUUywgQ2VudE9TIDcsPGJyPgpGcmVl QlNEIDExKS48YnI+Cjxicj4KSSBzZWUgdGhhdCBDZW50T1MgNiBpcyBubyBsb25nZXIgcmVjZWl2 aW5nIGZ1bGwgdXBkYXRlcyBhbmQgaXMgaW4gbWFpbnRlbmFuY2U8YnI+Cm9ubHkgbW9kZS4gSXQg d2lsbCBzdG9wIHJlY2VpdmluZyBldmVuIG1haW50ZW5hbmNlIHVwZGF0ZXMgaW4gMjAyMC4gSSB0 aGluayB0aGF0PGJyPgppcyBpbmRpY2F0aXZlIG9mIHRoZSBsZXZlbCBvZiBzdXBwb3J0IFNQREsg c2hvdWxkIHByb3ZpZGUgaGVyZS48YnI+Cjxicj4KR2l2ZW4gdGhlIGFib3ZlLCBpZiB0aGlzIHBh dGNoIGNhbiBiZSBhcHBsaWVkIHRvIHRoZSBEUERLIGZvcmsgYW5kIGRvZXNuJ3QgaGF2ZTxicj4K YW55IGFkZGl0aW9uYWwgaW1wYWN0LCBJJ20gbm90IG9wcG9zZWQgdG8gYXBwbHlpbmcgaXQuIFRo YXQgd291bGRuJ3QsIGluIG15PGJyPgptaW5kLCBtZWFuIHRoYXQgU1BESyBpcyBjb21taXR0ZWQg dG8gc3VwcG9ydGluZyBDZW50T1MgNiBpbmRlZmluaXRlbHkuIEJ1dDxicj4KY2VydGFpbmx5IHRo YXQgc3VwcG9ydCBjb3VsZCBjb250aW51ZSB3aGlsZSBpdCBpcyByZWxhdGl2ZWx5IGVhc3kgYW5k PGJyPgpjb252ZW5pZW50Ljxicj4KPGJyPgomZ3Q7IDxicj4KJmd0OyBGcm9tOiBTUERLICZsdDs8 YSBocmVmPSJtYWlsdG86c3Bkay1ib3VuY2VzQGxpc3RzLjAxLm9yZyI+c3Bkay1ib3VuY2VzQGxp c3RzLjAxLm9yZzwvYT4mZ3Q7IG9uIGJlaGFsZiBvZiBMdXNlLCBQYXVsIEUgJmx0OzxhIGhyZWY9 Im1haWx0bzpwYXVsLmUubHVzZUAlMGIiPnBhdWwuZS5sdXNlQDxicj4KPC9hPiZndDsgaW50ZWwu Y29tJmd0Ozxicj4KJmd0OyBTZW50OiBUdWVzZGF5LCBNYXkgOCwgMjAxOCA1OjE0OjEwIFBNPGJy PgomZ3Q7IFRvOiBTdG9yYWdlIFBlcmZvcm1hbmNlIERldmVsb3BtZW50IEtpdDxicj4KJmd0OyBT dWJqZWN0OiBSZTogW1NQREtdIEJ1aWxkaW5nIHNwZGsgb24gQ2VudE9TNjxicj4KJmd0OyZuYnNw OyA8YnI+CiZndDsgU3VyZSwgSSB1bmRlcnN0YW5kIHRoYXQuJm5ic3A7IFNQREsgbWFpbnRhaW5z IGEgZm9yayBvZiBkcGRrIGluIGdpdGh1YiBhdCA8YSBocmVmPSJodHRwczovL2ciPgpodHRwczov L2c8L2E+PGJyPgomZ3Q7IGl0aHViLmNvbS9zcGRrL2RwZGsgZm9yIHRoZSBwdXJwb3NlIG9mIHRl bXBvcmFyaWx5IHB1dHRpbmcgdGhpbmdzIGluIHRoYXQgd2U8YnI+CiZndDsgbmVlZCB0aGF0IGNh biYjODIxNzt0IG1ha2UgaXQgdXBzdHJlYW0geWV0IGZvciB3aGF0ZXZlciByZWFzb24gJiM4MjEx OyB0aGlzIGlzIHRoZTxicj4KJmd0OyBzdWJtb2R1bGUgaW4gdGhlIFNQREsgcmVwby4mbmJzcDsg SSYjODIxNzttIG5vdCBzYXlpbmcgdGhhdCBpdCBtYWtlcyBzZW5zZSBmb3IgeW91ciBwYXRjaDxi cj4KJmd0OyB0byBsYW5kIHRoZXJlIHBlcm1hbmVudGx5IGJ1dCBpdCBkb2VzIG1ha2Ugc2Vuc2Ug dG8gdGFsayBhYm91dCBpdC48YnI+CiZndDsmbmJzcDsgPGJyPgomZ3Q7IE5vIHByb2JsZW0gb24g bm90IGJlaW5nIG9uIHRoZSBjYWxsLCB3ZSYjODIxNztsbCBnZXQgc29tZSBpbnB1dCBmcm9tIHRo ZSBtYWludGFpbmVyczxicj4KJmd0OyBhbmQgb3RoZXJzIEkmIzgyMTc7bSBzdXJlJiM4MjMwOzxi cj4KJmd0OyZuYnNwOyA8YnI+CiZndDsgVGh4PGJyPgomZ3Q7IFBhdWw8YnI+CiZndDsmbmJzcDsg PGJyPgomZ3Q7IEZyb206IFNQREsgWzxhIGhyZWY9Im1haWx0bzpzcGRrLWJvdW5jZXNAbGlzdHMu MDEub3JnIiBpZD0iTFBsbmszNDA1NzYiPm1haWx0bzpzcGRrLWJvdW5jZXNAbGlzdHMuMDEub3Jn PC9hPl0gT24gQmVoYWxmIE9mIFNoYWhhciBTYWx6bWFuPGJyPgomZ3Q7IFNlbnQ6IFR1ZXNkYXks IE1heSA4LCAyMDE4IDc6MDQgQU08YnI+CiZndDsgVG86IFN0b3JhZ2UgUGVyZm9ybWFuY2UgRGV2 ZWxvcG1lbnQgS2l0ICZsdDs8YSBocmVmPSJtYWlsdG86c3Bka0BsaXN0cy4wMS5vcmciPnNwZGtA bGlzdHMuMDEub3JnPC9hPiZndDs8YnI+CiZndDsgU3ViamVjdDogUmU6IFtTUERLXSBCdWlsZGlu ZyBzcGRrIG9uIENlbnRPUzY8YnI+CiZndDsmbmJzcDsgPGJyPgomZ3Q7IEhleSBQYXVsLDxicj4K Jmd0OyZuYnNwOyA8YnI+CiZndDsgVGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgcGF0Y2ggaXMgaW4g ZHBkayBhbmQgbm90IGluIHNwZGssIGFuZCB0aGlzIGlzIHRoZTxicj4KJmd0OyByZWFzb24gSSBv ZmZlcmVkIHRvIHN1cHBvcnQgaXQuPGJyPgomZ3Q7IFRoZSBwYXRjaCAoYmVsbG93KSBpcyBvbmx5 IGEgZmV3IGxpbmVzIGxvbmcgbW9kaWZ5aW5nIHRoZSBkZXByZWNhdGVkIGF0dHJpYnV0ZTxicj4K Jmd0OyBkZWZpbml0aW9uLCBhIG1vZGlmaWNhdGlvbiB0byB0aGUgY29uZmlnLCBhbmQgYW4gZXh0 cmEgY29tcGlsYXRpb24gZmxhZy48YnI+CiZndDsgQWxsIG9mIHRoZSBhYm92ZSBhcmUgcmVxdWly ZWQgaW4gb3JkZXIgdG8gYnVpbGQgZHBkayAxOC4wMSBvbiBDZW50T1M2LCB0aGVyZTxicj4KJmd0 OyBhcmUgbm8gcHJvYmxlbXMgYnVpbGRpbmcgc3BkayBvbiBDZW50T1M2Ljxicj4KJmd0OyZuYnNw OyA8YnI+CiZndDsgSSB1bmRlcnN0b29kIHRoYXQgeW91IGFyZSBhbHJlYWR5IGFwcGx5aW5nIG1p bm9yIHBhdGNoZXMgdG8gZHBkaywgc28gcXVlc3Rpb248YnI+CiZndDsgaXMsIHdoZXRoZXIgdGhp cyBwYXRjaCBjYW4gYmUgYWRkZWQ/PGJyPgomZ3Q7Jm5ic3A7IDxicj4KJmd0OyBVbmZvcnR1bmF0 ZWx5IGR1ZSB0byBzb21lIHBlcnNvbmFsIGlzc3VlcywgSSBhbSB1bmFibGUgdG8gcGFydGljaXBh dGUgaW48YnI+CiZndDsgdG9kYXkncyBtZWV0aW5nLjxicj4KJmd0OyZuYnNwOyA8YnI+CiZndDsg VGhhbmtzLDxicj4KJmd0OyBTaGFoYXI8YnI+CiZndDsgRnJvbTogU1BESyAmbHQ7PGEgaHJlZj0i bWFpbHRvOnNwZGstYm91bmNlc0BsaXN0cy4wMS5vcmciPnNwZGstYm91bmNlc0BsaXN0cy4wMS5v cmc8L2E+Jmd0OyBvbiBiZWhhbGYgb2YgTHVzZSwgUGF1bCBFICZsdDs8YSBocmVmPSJtYWlsdG86 cGF1bC5lLmx1c2VAJTBiIj5wYXVsLmUubHVzZUA8YnI+CjwvYT4mZ3Q7IGludGVsLmNvbSZndDs8 YnI+CiZndDsgU2VudDogVHVlc2RheSwgTWF5IDgsIDIwMTggNDoyNToyOSBQTTxicj4KJmd0OyBU bzogU3RvcmFnZSBQZXJmb3JtYW5jZSBEZXZlbG9wbWVudCBLaXQ8YnI+CiZndDsgU3ViamVjdDog UmU6IFtTUERLXSBCdWlsZGluZyBzcGRrIG9uIENlbnRPUzY8YnI+CiZndDsmbmJzcDsgPGJyPgom Z3Q7IEhpIFNoYWhhciw8YnI+CiZndDsmbmJzcDsgPGJyPgomZ3Q7IENvdXBsZSBvZiBxdWljayB0 aGluZ3M6PGJyPgomZ3Q7Jm5ic3A7IDxicj4KJmd0OyAqIHRoYW5rcyBmb3IgcHV0dGluZyBhbGwg dGhpcyB0aW1lIGFuZCBlZmZvcnQgaW50byB0cnlpbmcgdG8gbWFrZSB0aGlzIHdvcmshPGJyPgom Z3Q7ICogaW4gdGhlIGNvbW11bml0eSBtb2RlbCwgcGF0Y2hlcyBhcmVuJiM4MjE3O3QgYWNjZXB0 ZWQgYmFzZWQgb24gb25lIGluZGl2aWR1YWwmIzgyMTc7czxicj4KJmd0OyBhYmlsaXR5L2Rlc2ly ZSB0byBzdXBwb3J0IHRoZW0gc28gYXBwcmVjaWF0ZSB0aGUgb2ZmZXIgYnV0IGluIGdlbmVyYWwg YW55PGJyPgomZ3Q7IHBhdGNoIHRoYXQgaXMgYWNjZXB0ZWQgYmVjb21lcyB0aGUgcmVzcG9uc2li bHkgb2YgdGhlIGNvbW11bml0eSAobW9zdGx5IHRoZTxicj4KJmd0OyBtYWludGFpbmVycykgdG8g c3VwcG9ydCBpdCBsb25nIHRlcm0uJm5ic3A7IE90aGVyd2lzZSB3ZSYjODIxNztkIGhhdmUgd2hh dCBJIGxpa2UgdG8gY2FsbDxicj4KJmd0OyAmIzgyMjA7dGhlIGZsZWEgbWFya2V0IG1vZGVsJiM4 MjIxOyB3aGVyZSB0aGVyZSYjODIxNztzIGEgYnVuY2ggb2Ygc2VwYXJhdGUgaW5kaXZpZHVhbHM8 YnI+CiZndDsgc3VwcG9ydGluZyB0aGVpciBvd24gdGhpbmdzIHdpdGggdmVyeSBsaXR0bGUgY29o ZXNpdmVuZXNzIGFjcm9zcyBldmVyeXRoaW5nIEo8YnI+CiZndDsmbmJzcDsgPGJyPgomZ3Q7IFNv LCB3cnQgbmV4dCBzdGVwcywgaWYgdGhlIHBhdGNoIGlzbiYjODIxNzt0IGEgdHJlbWVuZG91cyBh bW91bnQgb2YgZWZmb3J0IEkgd291bGQ8YnI+CiZndDsgc3VnZ2VzdCB5b3UgZ28gYWhlYWQgYW5k IHN1Ym1pdCBpdC4gVGhhdCYjODIxNztzIHRoZSBiZXN0IHdheSB0byBnZXQgZXZlcnlvbmUgb24g dGhlPGJyPgomZ3Q7IHNhbWUgcGFnZSB3cnQgZXhhY3RseSB3aGF0IHdlJiM4MjE3O3JlIHRhbGtp bmcgYWJvdXQuJm5ic3A7IElmIGl0IGlzIHNvbWUgc2lnbmlmaWNhbnQ8YnI+CiZndDsgZWZmb3J0 IHRoZW4sIGFzIFBhd2VsIHN0YXRlcywgeW91IGNhbiBjYWxsIGludG8gYSBjb21tdW5pdHkgbWVl dGluZyAoc2VlIGVtYWlsPGJyPgomZ3Q7IEkgc2VudCBvdXQgbGFzdCBuaWdodCkgb3IgeW91IGNh biBleHBsYWluIG1vcmUgZGV0YWlscyBvbiB0aGlzIGxpc3QuPGJyPgomZ3Q7Jm5ic3A7IDxicj4K Jmd0OyBUaGFua3MgYWdhaW4hITxicj4KJmd0OyBQYXVsPGJyPgomZ3Q7Jm5ic3A7IDxicj4KJmd0 OyBGcm9tOiBTUERLIFs8YSBocmVmPSJtYWlsdG86c3Bkay1ib3VuY2VzQGxpc3RzLjAxLm9yZyIg aWQ9IkxQbG5rMjcwMDA3Ij5tYWlsdG86c3Bkay1ib3VuY2VzQGxpc3RzLjAxLm9yZzwvYT5dIE9u IEJlaGFsZiBPZiBXb2Rrb3dza2ksIFBhd2VsWDxicj4KJmd0OyBTZW50OiBUdWVzZGF5LCBNYXkg OCwgMjAxOCA1OjU3IEFNPGJyPgomZ3Q7IFRvOiBTdG9yYWdlIFBlcmZvcm1hbmNlIERldmVsb3Bt ZW50IEtpdCAmbHQ7PGEgaHJlZj0ibWFpbHRvOnNwZGtAbGlzdHMuMDEub3JnIj5zcGRrQGxpc3Rz LjAxLm9yZzwvYT4mZ3Q7PGJyPgomZ3Q7IFN1YmplY3Q6IFJlOiBbU1BES10gQnVpbGRpbmcgc3Bk ayBvbiBDZW50T1M2PGJyPgomZ3Q7Jm5ic3A7IDxicj4KJmd0OyBJIHRoaW5rIHNvbWVvbmUgd2ls bCBhbnN3ZXIgeW91IG9uIHRoaXMgbWFpbGluZyBsaXN0IGJ1dCB0aGVyZSBpcyBjb21tdW5pdHk8 YnI+CiZndDsgbWVldGluZyB0b2RheSB0b28uIFlvdSBjYW4gcmFpc2UgdGhpcyBpZiB5b3Ugd2lz aC48YnI+CiZndDsmbmJzcDsgPGJyPgomZ3Q7IFBhd2VsPGJyPgomZ3Q7Jm5ic3A7IDxicj4KJmd0 OyBGcm9tOiBTUERLIFs8YSBocmVmPSJtYWlsdG86c3Bkay1ib3VuY2VzQGxpc3RzLjAxLm9yZyIg aWQ9IkxQbG5rMjIzNDQzIj5tYWlsdG86c3Bkay1ib3VuY2VzQGxpc3RzLjAxLm9yZzwvYT5dIE9u IEJlaGFsZiBPZiBTaGFoYXIgU2Fsem1hbjxicj4KJmd0OyBTZW50OiBUdWVzZGF5LCBNYXkgOCwg MjAxOCAyOjIzIFBNPGJyPgomZ3Q7IFRvOiBTdG9yYWdlIFBlcmZvcm1hbmNlIERldmVsb3BtZW50 IEtpdCAmbHQ7PGEgaHJlZj0ibWFpbHRvOnNwZGtAbGlzdHMuMDEub3JnIj5zcGRrQGxpc3RzLjAx Lm9yZzwvYT4mZ3Q7PGJyPgomZ3Q7IFN1YmplY3Q6IFJlOiBbU1BES10gQnVpbGRpbmcgc3BkayBv biBDZW50T1M2PGJyPgomZ3Q7Jm5ic3A7IDxicj4KJmd0OyBIaSw8YnI+CiZndDsmbmJzcDsgPGJy PgomZ3Q7IEkgYXR0ZW1wdGVkIHRvIHB1c2ggdGhlIGdjYyBzdXBwb3J0IHBhdGNoIHRvIGRwZGss IGFuZCBnb3QgcmVqZWN0ZWQgc2luY2UgdGhleTxicj4KJmd0OyBkbyBub3Qgd2lzaCB0byBzdXBw b3J0IENlbnRPUzYuPGJyPgomZ3Q7IFdvdWxkIGl0IGJlIHBvc3NpYmxlIHRvIG1hbnVhbGx5IGFk ZCB0aGUgcGF0Y2ggdG8gdGhlIHN1cHBvcnRlZCBkcGRrIHZlcnNpb248YnI+CiZndDsgKGN1cnJl bnRseSAxOC4wMSkuPGJyPgomZ3Q7IEkgd291bGQgYmUgaGFwcHkgdG8gc3VwcG9ydCBDZW50T1M2 IGlzc3Vlcy48YnI+CiZndDsmbmJzcDsgPGJyPgomZ3Q7IFRoYW5rcyw8YnI+CiZndDsgU2hhaGFy PGJyPgomZ3Q7Jm5ic3A7IDxicj4KJmd0OyBGcm9tOiBTaGFoYXIgU2Fsem1hbjxicj4KJmd0OyBT ZW50OiBUdWVzZGF5LCBBcHJpbCAyNCwgMjAxOCAzOjQwOjUxIFBNPGJyPgomZ3Q7IFRvOiBTdG9y YWdlIFBlcmZvcm1hbmNlIERldmVsb3BtZW50IEtpdDxicj4KJmd0OyBDYzogSWxhbiBTdGVpbmJl cmc7IElkbyBCZW5kYTsgWWFlbCBTaGF2aXQ8YnI+CiZndDsgU3ViamVjdDogUmU6IEJ1aWxkaW5n IHNwZGsgb24gQ2VudE9TNjxicj4KJmd0OyZuYnNwOyA8YnI+CiZndDsgT0ssIGdvdCBldmVyeXRo aW5nIHRvIHdvcmsuPGJyPgomZ3Q7Jm5ic3A7IDxicj4KJmd0OyBGb3IgRFBESywgSSBoYWQgdG8g dG8gZG8gdGhlIGZvbGxvd2luZzo8YnI+CiZndDsgYWRkIGEgcGF0Y2ggdG8gbWFrZSB0aGUgbmV3 IF9fcnRlX2V4cGVyaW1lbnRhbCBhdHRyaWJ1dGUgdG8gd29yazxicj4KJmd0OyByZW1vdmUgYSBi dW5jaCBvZiBtb2R1bGVzIHZpYSBjb25maWcgd2hpY2ggaGFkIHNvbWUgZ25hcmx5IGNvbXBpbGF0 aW9uIGVycm9ycyw8YnI+CiZndDsgYW5kIGFyZSBub3QgbmVlZGVkIGZvciBzcGRrPGJyPgomZ3Q7 IHVzZSAtZm5vLXN0cmljdC1hbGlhc2luZyBpbiB0aGUgRVhUUkFfQ0ZMQUdTIHRvIGF2b2lkIGEg dG9uIG9mIHN0cmljdCBhbGlhc2luZzxicj4KJmd0OyBlcnJvcnMuPGJyPgomZ3Q7Jm5ic3A7IDxi cj4KJmd0OyBJIHRyaWVkIHNwZGsgMTguMDEsIGFuZCByYW4gaW50byBzb21lIGlzc3VlcyB3aXRo IHRoZSBzaGFyZWQgbGlicmFyeSBidWlsZC4gQXM8YnI+CiZndDsgSSBzYXcgdGhhdCBEYW5pZWwg aGFkIGFscmVhZHkgZGVhbHQgd2l0aCB0aGVtLCBJIHRyaWVkIGNoZXJyeSBwaWNraW5nLCBidXQ8 YnI+CiZndDsgZXZlbnR1YWxseSB1c2VkIHRoZSBtYXN0ZXIgYnJhbmNoLjxicj4KJmd0OyBJIGdv dCB0aGVzZSB0eXBlIG9mIHdhcm5pbmdzOjxicj4KJmd0OyZuYnNwOyA8YnI+CiZndDsgL3Vzci9i aW4vbGQ6IHdhcm5pbmc6IGxpYnJ0ZV9tYnVmLnNvLjMuMSwgbmVlZGVkIGJ5PGJyPgomZ3Q7IC9r aG9tZS9zaGFoYXIuc2Fsem1hbi9LYW1pbmFyaW8vZ2l0L2RwZGsveDg2XzY0LW5hdGl2ZS1saW51 eGFwcC08YnI+CiZndDsgZ2NjL2xpYi9saWJydGVfYnVzX3BjaS5zbywgbm90IGZvdW5kICh0cnkg dXNpbmcgLXJwYXRoIG9yIC1ycGF0aC1saW5rKTxicj4KJmd0OyAvdXNyL2Jpbi9sZDogd2Fybmlu ZzogbGlicnRlX2V0aGRldi5zby44LjEsIG5lZWRlZCBieTxicj4KJmd0OyAva2hvbWUvc2hhaGFy LnNhbHptYW4vS2FtaW5hcmlvL2dpdC9kcGRrL3g4Nl82NC1uYXRpdmUtbGludXhhcHAtPGJyPgom Z3Q7IGdjYy9saWIvbGlicnRlX2J1c19wY2kuc28sIG5vdCBmb3VuZCAodHJ5IHVzaW5nIC1ycGF0 aCBvciAtcnBhdGgtbGluayk8YnI+CiZndDsmbmJzcDsgPGJyPgomZ3Q7IEkgYWRkZWQgdGhlIGZv bGxvd2luZyBwYXRjaCBiZWxsb3cgdG8gbWFrZSB0aGVtIGdvIGF3YXkuPGJyPgomZ3Q7Jm5ic3A7 IDxicj4KJmd0OyBJJ2xsIGFwcHJvYWNoIHRoZSBkcGRrIGNvbW11bml0eSBvbiB0aGUgbWFpbGlu ZyBsaXN0IGluIG9yZGVyIHRvIGdldCB0aGU8YnI+CiZndDsgX19ydGVfZXhwZXJpbWVudGFsIHN0 dWZmIHRvIHdvcmsuPGJyPgomZ3Q7IE15IGZpbmFsIGNvbmZpZ3VyYXRpb24gaXM6PGJyPgomZ3Q7 IENlbnJPUzYuNDxicj4KJmd0OyBnY2MgNC40LjctMTc8YnI+CiZndDsgZHBkayB2MTguMDI8YnI+ CiZndDsgc3BkayBtYXN0ZXI8YnI+CiZndDsmbmJzcDsgPGJyPgomZ3Q7IFdoYXQgYXJlIHRoZSBu ZXh0IHN0ZXBzPzxicj4KJmd0OyZuYnNwOyA8YnI+CiZndDsgU2hhaGFyPGJyPgomZ3Q7Jm5ic3A7 IDxicj4KJmd0OyBQLlMuIEhlcmUgaXMgdGhlIHBhdGNoIHRvIHJlbW92ZSB0aGUgd2FybmluZ3Mg YWJvdmUuPGJyPgomZ3Q7IGNvbW1pdCBkNGVmNzQ0ZGUxY2M0OTI4OTcyYjcwNDJkMWM5MGFmZjEy ZGI3ODY3PGJyPgomZ3Q7IEF1dGhvcjogc2hhaGFyIHNhbHptYW4gJmx0OzxhIGhyZWY9Im1haWx0 bzpzaGFoYXIuc2Fsem1hbkBrYW1pbmFyaW8uY29tIj5zaGFoYXIuc2Fsem1hbkBrYW1pbmFyaW8u Y29tPC9hPiZndDs8YnI+CiZndDsgRGF0ZTombmJzcDsmbmJzcDsgVHVlIEFwciAyNCAxNDozMTo1 MiAyMDE4ICYjNDM7MDMwMDxicj4KJmd0OyZuYnNwOyA8YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsgbGliL2Vudl9kcGRrOiBhZGQgcmVxdWlyZWQgbGlicmFyaWVzPGJyPgomZ3Q7Jm5i c3A7IDxicj4KJmd0OyBkaWZmIC0tZ2l0IGEvbGliL2Vudl9kcGRrL2Vudi5tayBiL2xpYi9lbnZf ZHBkay9lbnYubWs8YnI+CiZndDsgaW5kZXggNDUwMDQzYy4uYjQ2YmZlZCAxMDA2NDQ8YnI+CiZn dDsgLS0tIGEvbGliL2Vudl9kcGRrL2Vudi5tazxicj4KJmd0OyAmIzQzOyYjNDM7JiM0MzsgYi9s aWIvZW52X2RwZGsvZW52Lm1rPGJyPgomZ3Q7IEBAIC02OCw2ICYjNDM7NjgsMTggQEAgaWZuZXEg KCQod2lsZGNhcmQgJChEUERLX0FCU19ESVIpL2xpYi9saWJydGVfbWFsbG9jLiopLCk8YnI+CiZn dDsmbmJzcDsgRFBES19MSUJfTElTVCAmIzQzOz0gcnRlX21hbGxvYzxicj4KJmd0OyZuYnNwOyBl bmRpZjxicj4KJmd0OyZuYnNwOyA8YnI+CiZndDsgJiM0MztpZm5lcSAoLCAkKHdpbGRjYXJkICQo RFBES19BQlNfRElSKS9saWIvbGlicnRlX21idWYuKikpPGJyPgomZ3Q7ICYjNDM7RFBES19MSUJf TElTVCAmIzQzOz0gcnRlX21idWY8YnI+CiZndDsgJiM0MztlbmRpZjxicj4KJmd0OyAmIzQzOzxi cj4KJmd0OyAmIzQzO2lmbmVxICgsICQod2lsZGNhcmQgJChEUERLX0FCU19ESVIpL2xpYi9saWJy dGVfbmV0LiopKTxicj4KJmd0OyAmIzQzO0RQREtfTElCX0xJU1QgJiM0Mzs9IHJ0ZV9uZXQ8YnI+ CiZndDsgJiM0MztlbmRpZjxicj4KJmd0OyAmIzQzOzxicj4KJmd0OyAmIzQzO2lmbmVxICgsICQo d2lsZGNhcmQgJChEUERLX0FCU19ESVIpL2xpYi9saWJydGVfZXRoZGV2LiopKTxicj4KJmd0OyAm IzQzO0RQREtfTElCX0xJU1QgJiM0Mzs9IHJ0ZV9ldGhkZXY8YnI+CiZndDsgJiM0MztlbmRpZjxi cj4KJmd0OyAmIzQzOzxicj4KJmd0OyZuYnNwOyAjIGxpYnJ0ZV9wY2kgYW5kIGxpYnJ0ZV9idXNf cGNpIHdlcmUgYWRkZWQgaW4gRFBESyAxNy4xMS4gTGluayB0aGVzZTxicj4KJmd0OyBsaWJyYXJp ZXMgY29uZGl0aW9uYWxseTxicj4KJmd0OyZuYnNwOyAjIGJhc2VkIG9uIHRoZWlyIGV4aXN0ZW5j ZSB0byBtYWludGFpbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5Ljxicj4KJmd0OyZuYnNwOyBpZm5l cSAoLCAkKHdpbGRjYXJkICQoRFBES19BQlNfRElSKS9saWIvbGlicnRlX3BjaS4qKSk8YnI+CiZn dDsmbmJzcDsgPGJyPgomZ3Q7Jm5ic3A7IDxicj4KJmd0OyZuYnNwOyA8YnI+CiZndDsgRnJvbTog U1BESyAmbHQ7PGEgaHJlZj0ibWFpbHRvOnNwZGstYm91bmNlc0BsaXN0cy4wMS5vcmciPnNwZGst Ym91bmNlc0BsaXN0cy4wMS5vcmc8L2E+Jmd0OyBvbiBiZWhhbGYgb2YgU2hhaGFyIFNhbHptYW4g Jmx0O3NoYWhhci5zYWw8YnI+CiZndDsgPGEgaHJlZj0ibWFpbHRvOnptYW5Aa2FtaW5hcmlvLmNv bSI+em1hbkBrYW1pbmFyaW8uY29tPC9hPiZndDs8YnI+CiZndDsgU2VudDogVHVlc2RheSwgQXBy aWwgMjQsIDIwMTggOTo1NyBBTTxicj4KJmd0OyBUbzogU3RvcmFnZSBQZXJmb3JtYW5jZSBEZXZl bG9wbWVudCBLaXQ8YnI+CiZndDsgU3ViamVjdDogUmU6IFtTUERLXSBCdWlsZGluZyBzcGRrIG9u IENlbnRPUzY8YnI+CiZndDsmbmJzcDsgPGJyPgomZ3Q7IEdyZWF0LCBhbmQgdGhhbmtzITxicj4K Jmd0OyZuYnNwOyA8YnI+CiZndDsgSSBoYXZlIGJlZW4gcnVubmluZyBpbnRvIGlzc3VlcyBjb21w aWxpbmcgZHBkayAxNy4xMSBvbiBDZW50T1M2ICh0aGVyZSBzZWVtczxicj4KJmd0OyB0byBiZSBh IGdjYyBpc3N1ZSB0aGF0IGRvZXMgbm90IGV4aXN0IGluIG90aGVyIHZlcnNpb25zKSwgSSdsbCBm b2N1cyBteTxicj4KJmd0OyBlZmZvcnRzIG9uIGRwZGsgMTguMDIuPGJyPgomZ3Q7IEZyb206IFNQ REsgJmx0OzxhIGhyZWY9Im1haWx0bzpzcGRrLWJvdW5jZXNAbGlzdHMuMDEub3JnIj5zcGRrLWJv dW5jZXNAbGlzdHMuMDEub3JnPC9hPiZndDsgb24gYmVoYWxmIG9mIFZlcmthbXAsIERhbmllbCAm bHQ7ZGFuaWVsLnZlPGJyPgomZ3Q7IDxhIGhyZWY9Im1haWx0bzpya2FtcEBpbnRlbC5jb20iPnJr YW1wQGludGVsLmNvbTwvYT4mZ3Q7PGJyPgomZ3Q7IFNlbnQ6IE1vbmRheSwgQXByaWwgMjMsIDIw MTggOTo0MDozNiBQTTxicj4KJmd0OyBUbzogU3RvcmFnZSBQZXJmb3JtYW5jZSBEZXZlbG9wbWVu dCBLaXQ8YnI+CiZndDsgU3ViamVjdDogUmU6IFtTUERLXSBCdWlsZGluZyBzcGRrIG9uIENlbnRP UzY8YnI+CiZndDsmbmJzcDsgPGJyPgomZ3Q7IEhpIFNoYWhhciw8YnI+CiZndDsmbmJzcDsgPGJy PgomZ3Q7IEkmIzgyMTc7dmUgcHVzaGVkIGEgcGF0Y2ggZm9yIHRoZSBTUERLIG1hc3RlciBicmFu Y2ggdGhhdCBzaG91bGQgYWxsb3cgaXQgdG8gY29tcGlsZTxicj4KJmd0OyB3aXRoIERQREsgMTYu MDc6IDxhIGhyZWY9Imh0dHBzOi8vcmV2aWV3LmdlcnJpdGh1Yi5pby8jL2Mvc3Bkay9zcGRrLyYj NDM7LzQwODc0My8iIGlkPSJMUGxuazU3MjcxMiI+Cmh0dHBzOi8vcmV2aWV3LmdlcnJpdGh1Yi5p by8jL2Mvc3Bkay9zcGRrLyYjNDM7LzQwODc0My88L2E+PGJyPgomZ3Q7Jm5ic3A7IDxicj4KJmd0 OyBHZXJyaXQgQ29kZSBSZXZpZXc8YnI+CiZndDsmbmJzcDsgPGJyPgomZ3Q7IHJldmlldy5nZXJy aXRodWIuaW88YnI+CiZndDsmbmJzcDsgPGJyPgomZ3Q7IEtlZXAgaW4gdG91Y2guIENvcHlyaWdo dCAmY29weTsgMjAxNyB8IEdlcnJpdEZvcmdlIEx0ZC4gPGEgaHJlZj0ibWFpbHRvOmluZm9AZ2Vy cml0Zm9yZ2UuY29tIj4KaW5mb0BnZXJyaXRmb3JnZS5jb208L2E+PGJyPgomZ3Q7IDxhIGhyZWY9 Imh0dHA6Ly93d3cuZ2Vycml0Zm9yZ2UuY29tIiBpZD0iTFBsbmszMDYzMiI+d3d3LmdlcnJpdGZv cmdlLmNvbTwvYT48YnI+CiZndDsmbmJzcDsgPGJyPgomZ3Q7Jm5ic3A7IDxicj4KJmd0OyBIb3dl dmVyLCBEUERLIDE2LjA3IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQgdXBzdHJlYW07IEkgaGlnaGx5 IHJlY29tbWVuZCB0aGF0PGJyPgomZ3Q7IHlvdSB1cGRhdGUgdG8gYSBuZXdlciB2ZXJzaW9uLiBT UERLIGlzIGN1cnJlbnRseSB0ZXN0ZWQgd2l0aCBEUERLIDE4LjAyLjxicj4KJmd0OyZuYnNwOyA8 YnI+CiZndDsgVGhlIFZGSU8gaXNzdWUgeW91IG1lbnRpb24gaGFzIGFsc28gYmVlbiBmaXhlZCBv biBTUERLIG1hc3RlciwgYW5kIGl0IHdpbGwgYmU8YnI+CiZndDsgcGFydCBvZiB0aGUgU1BESyB2 MTguMDQgcmVsZWFzZS48YnI+CiZndDsmbmJzcDsgPGJyPgomZ3Q7IFRoYW5rcyw8YnI+CiZndDsg LS0gRGFuaWVsPGJyPgomZ3Q7Jm5ic3A7IDxicj4KJmd0OyBGcm9tOiBTUERLIFs8YSBocmVmPSJt YWlsdG86c3Bkay1ib3VuY2VzQGxpc3RzLjAxLm9yZyIgaWQ9IkxQbG5rODI5MTAwIj5tYWlsdG86 c3Bkay1ib3VuY2VzQGxpc3RzLjAxLm9yZzwvYT5dIE9uIEJlaGFsZiBPZiBTaGFoYXIgU2Fsem1h bjxicj4KJmd0OyBTZW50OiBTdW5kYXksIEFwcmlsIDIyLCAyMDE4IDY6NDEgQU08YnI+CiZndDsg VG86IFN0b3JhZ2UgUGVyZm9ybWFuY2UgRGV2ZWxvcG1lbnQgS2l0ICZsdDs8YSBocmVmPSJtYWls dG86c3Bka0BsaXN0cy4wMS5vcmciPnNwZGtAbGlzdHMuMDEub3JnPC9hPiZndDs8YnI+CiZndDsg U3ViamVjdDogW1NQREtdIEJ1aWxkaW5nIHNwZGsgb24gQ2VudE9TNjxicj4KJmd0OyZuYnNwOyA8 YnI+CiZndDsgSGksPGJyPgomZ3Q7Jm5ic3A7IDxicj4KJmd0OyBGaW5hbGx5IGdvdCB0byBsb29r aW5nIGF0IHN1cHBvcnQgb2Ygc3BkayBidWlsZCBvbiBDZW50T1M2LCB0aGluZ3MgbG9vayBnb29k LDxicj4KJmd0OyBleGNlcHQgZm9yIG9uZSBpc3N1ZS48YnI+CiZndDsgc3BkayBpcyBsYXRlc3Qg MTguMDEueCB2ZXJzaW9uLCBkcGRrIGlzIDE2LjA3ICgmIzQzOzMgZHBkayBwYXRjaGVzIHRvIGFs bG93PGJyPgomZ3Q7IGNvbXBpbGF0aW9uKSBhbmQgc29tZSBtaW5vciBwYXRjaGVzIChtYWlubHkg c29tZSBtZW1vcnkgY29uZmlndXJhdGlvbiBzdHVmZiksPGJyPgomZ3Q7IGtlcm5lbCBpcyBhIHBh dGNoZWQgNC45LjYuPGJyPgomZ3Q7Jm5ic3A7IDxicj4KJmd0OyBidWlsZCBzdWNjZWVkZWQgZXhj ZXB0IGZvciB0aGUgdXNhZ2Ugb2YgdGhlIGRwZGsgZnVuY3Rpb24gcGNpX3ZmaW9faXNfZW5hYmxl ZC48YnI+CiZndDsgSSBoYWQgdG8gYXBwbHkgdGhlIHBhdGNoIGJlbGxvdywgcmVtb3ZpbmcgdGhl IHVzYWdlIG9mIHRoaXMgZnVuY3Rpb24gYW5kIHRoZW48YnI+CiZndDsgY29tcGlsYXRpb24gY29t cGxldGVkIHdpdGhvdXQgYW55IGlzc3Vlcy48YnI+CiZndDsmbmJzcDsgPGJyPgomZ3Q7IEl0IHNl ZW1zIHRoYXQgSSBhbSBtaXNzaW5nIHNvbWUgc29ydCBvZiBkcGRrIGNvbmZpZ3VyYXRpb24gYXMg SSBzZWUgdGhhdCB0aGU8YnI+CiZndDsgZnVuY3Rpb24gaXMgYnVpbHQsIGJ1dCBub3QgcGFja2Fn ZWQgaW50byB0aGUgZ2VuZXJhdGVkIGFyY2hpdmUuPGJyPgomZ3Q7Jm5ic3A7IDxicj4KJmd0OyBJ IHdlbnQgYmFjayB0byBzcXVhcmUgb25lIGFuZCByYW4gdGhlIGluc3RydWN0aW9ucyBpbiA8YSBo cmVmPSJodHRwOi8vd3d3LnNwZGsuaW8vZG9jL2ciIGlkPSJMUGxuazI5MzMwMSI+Cmh0dHA6Ly93 d3cuc3Bkay5pby9kb2MvZzwvYT48YnI+CiZndDsgZXR0aW5nX3N0YXJ0ZWQuaHRtbCwgYnV0IEkg c2VlIG5vIG1lbnRpb24gb2YgZHBkayB0aGVyZS4gQWN0dWFsbHkgdGhlPGJyPgomZ3Q7IC4vY29u ZmlndXJlIHJlcXVpcmVzIGl0Ljxicj4KJmd0OyZuYnNwOyA8YnI+CiZndDsgTXkgbmV4dCBzdGVw IGlzIHRvIHVzZSBhIG1vcmUgcmVjZW50IGRwZGssIGJ1dCBzaG91bGRuJ3QgdGhpcyB3b3JrIHdp dGggbXk8YnI+CiZndDsgdmVyc2lvbj8gQW0gSSBtaXNzaW5nIHNvbWUgZHBkayBjb25maWd1cmF0 aW9uPzxicj4KJmd0OyBCVFcsIGFzIHdlIGFyZSBub3QgdXNpbmcgdmhvc3QsIG9uIG91ciAxNy4w NyB2ZXJzaW9uIHdlIHNpbXBseSB1c2U8YnI+CiZndDsgQ09ORklHX1ZIT1NUPW4gaW4gb3JkZXIg dG8gc2tpcCB0aGlzLCBidXQgSSB3b3VsZCBiZSBoYXBwaWVyIGlmIHdlIHVzZWQgYTxicj4KJmd0 OyBiZXR0ZXIgc29sdXRpb24uPGJyPgomZ3Q7Jm5ic3A7IDxicj4KJmd0OyBTaGFoYXI8YnI+CiZn dDsmbmJzcDsgPGJyPgomZ3Q7IFAuUy4gSGVyZSBpcyB0aGUgcGF0Y2ggdG8gcmVtb3ZlIHVzZSBv ZiB0aGlzIGZ1bmN0aW9uOjxicj4KJmd0OyBkaWZmIC0tZ2l0IGEvbGliL2Vudl9kcGRrL3Z0b3Bo eXMuYyBiL2xpYi9lbnZfZHBkay92dG9waHlzLmM8YnI+CiZndDsgaW5kZXggOTJhYTI1Ni4uZjM4 OTI5ZiAxMDA2NDQ8YnI+CiZndDsgLS0tIGEvbGliL2Vudl9kcGRrL3Z0b3BoeXMuYzxicj4KJmd0 OyAmIzQzOyYjNDM7JiM0MzsgYi9saWIvZW52X2RwZGsvdnRvcGh5cy5jPGJyPgomZ3Q7IEBAIC01 Myw4ICYjNDM7NTMsMTAgQEA8YnI+CiZndDsmbmJzcDsgI2RlZmluZSBTUERLX1ZGSU9fRU5BQkxF RCAxPGJyPgomZ3Q7Jm5ic3A7ICNpbmNsdWRlICZsdDtsaW51eC92ZmlvLmgmZ3Q7PGJyPgomZ3Q7 Jm5ic3A7IDxicj4KJmd0OyAmIzQzOyNpZiAwPGJyPgomZ3Q7Jm5ic3A7IC8qIEludGVybmFsIERQ REsgZnVuY3Rpb24gZm9yd2FyZCBkZWNsYXJhdGlvbiAqLzxicj4KJmd0OyZuYnNwOyBpbnQgcGNp X3ZmaW9faXNfZW5hYmxlZCh2b2lkKTs8YnI+CiZndDsgJiM0MzsjZW5kaWY8YnI+CiZndDsmbmJz cDsgPGJyPgomZ3Q7Jm5ic3A7IHN0cnVjdCBzcGRrX3ZmaW9fZG1hX21hcCB7PGJyPgomZ3Q7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHN0cnVjdCB2Zmlv X2lvbW11X3R5cGUxX2RtYV9tYXAgbWFwOzxicj4KJmd0OyBAQCAtMzQxLDkgJiM0MzszNDMsMTEg QEAgc3Bka192dG9waHlzX2lvbW11X2luaXQodm9pZCk8YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgRElSICpkaXI7PGJyPgomZ3Q7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHN0cnVjdCBkaXJlbnQg KmQ7PGJyPgomZ3Q7Jm5ic3A7IDxicj4KJmd0OyAmIzQzOyNpZiAwPGJyPgomZ3Q7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGlmICghcGNpX3ZmaW9faXNf ZW5hYmxlZCgpKSB7PGJyPgomZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7IHJldHVybjs8YnI+CiZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsgfTxicj4KJmd0OyAmIzQzOyNlbmRpZjxicj4KJmd0OyZuYnNwOyA8YnI+CiZn dDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgZGlyID0g b3BlbmRpcigmcXVvdDsvcHJvYy9zZWxmL2ZkJnF1b3Q7KTs8YnI+CiZndDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgaWYgKCFkaXIpIHs8YnI+CiZndDsm bmJzcDsgPGJyPgomZ3Q7Jm5ic3A7IDxicj4KJmd0OyBfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXzxicj4KJmd0OyBTUERLIG1haWxpbmcgbGlzdDxicj4KJmd0 OyA8YSBocmVmPSJtYWlsdG86U1BES0BsaXN0cy4wMS5vcmciPlNQREtAbGlzdHMuMDEub3JnPC9h Pjxicj4KJmd0OyA8YSBocmVmPSJodHRwczovL2xpc3RzLjAxLm9yZy9tYWlsbWFuL2xpc3RpbmZv L3NwZGsiIGlkPSJMUGxuazY2MTM0MiI+aHR0cHM6Ly9saXN0cy4wMS5vcmcvbWFpbG1hbi9saXN0 aW5mby9zcGRrPC9hPjxicj4KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX188YnI+ClNQREsgbWFpbGluZyBsaXN0PGJyPgo8YSBocmVmPSJtYWlsdG86U1BES0Bs aXN0cy4wMS5vcmciPlNQREtAbGlzdHMuMDEub3JnPC9hPjxicj4KPGEgaHJlZj0iaHR0cHM6Ly9s aXN0cy4wMS5vcmcvbWFpbG1hbi9saXN0aW5mby9zcGRrIiBpZD0iTFBsbms1ODkyODEiPmh0dHBz Oi8vbGlzdHMuMDEub3JnL21haWxtYW4vbGlzdGluZm8vc3BkazwvYT48bzpwPjwvbzpwPjwvc3Bh bj48L3A+CjwvZGl2Pgo8L2Rpdj4KPC9kaXY+CjwvZGl2Pgo8L2JvZHk+CjwvaHRtbD4K --===============2599084613881809709==--