From afitzsim at redhat.com Wed Aug 19 15:23:28 2015 Content-Type: multipart/mixed; boundary="===============1968945227974555115==" MIME-Version: 1.0 From: Andrew Fitzsimon To: aeolus-devel at lists.fedorahosted.org Subject: Re: Conductor UI - some ideas for a better conductor Date: Mon, 30 Jan 2012 18:48:04 +1000 Message-ID: <7C7F94FC-8264-43A1-82E5-08BF846F8612@redhat.com> In-Reply-To: 2B4CAECF-6B24-4F5D-8CD0-4B164EE44B01@redhat.com --===============1968945227974555115== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Some source can be found in my fork of the UI proposal. = https://github.com/andyfitz/aeolus-ux-designs/tree/master/UI%20Proposal As mentioned, I'll be working on updating the playground mock. Andy On 30/01/2012, at 3:51 PM, Andy Fitzsimon wrote: > Hi all, > = > I've spent quite some time thinking about global UI improvements we can m= ake to conductor for a future release. > Now it's time for me to share a small summary of those ideas and hopefull= y get some feedback. > = > I'll be updating http://ndftz.com/playground/ with much the stuff mention= ed below but as of right now it is not a representation of the functionalit= y described; so if you have seen it before, please disregard everything asi= de from the responsiveness and the vector icons aspects. I'll now switch g= ears to get the mock interface up to speed with all the client side feature= s described. > = > (attached is a formatted copy in-case you don't like reading markdown) > = > .. so here we go.. > = > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > = > #Goals for a better UI > = > = >> This is a plan to evolve the conductor UI into a lean, adaptive, beautif= ul and considered experience. > = > = > ### Specifically, we hope to address: > * Navigating and issuing tasks quickly = > * Without unnecessary http-roundtrips just to check on a view. > * Without having to learn new components in every view > * Without having to refer to documentation to be assisted in core tasks. > = > * Keeping the =E2=80=98big 6=E2=80=99 consistent: = > * Consistent aesthetic > * Consistent behaviour > * Consistent notification = > * Consistent messaging = > * Consistent help > * Consistent referencing > = > * Address as many media types as we can get *for free* > * __Mobile__ - 480px and up via minor accommodations in our UI > * __Workstation__ 640px-1280px - our default view > * __Section 508__ compliance including screen readers > * __Printable__ - As a read-only inventory manifest of a users entire ac= cess. > = > * Feel like a 2012 client app = > * Cutting edge UI conventions > * Swiss style visual metaphors & elements of typographic style > * Baseline grid aligned typography consisting of 2 weights with single l= eading. > * Use only vector graphics > * Blazingly fast client side render times > = > = > # Glossary of terms / explanation of features. > = > = > = > ## Views > = > One distinct category of content. > = > ### explained > = > =E2=80=9Cthe users view=E2=80=9D or =E2=80=9Cthe providers view=E2=80=9D. > A views name can even be as specific as =E2=80=9CuserXX-provider-permissi= ons view=E2=80=9D or =E2=80=9Cadmin-provider-permissions-userXX view=E2=80= =9D > = > For more information on how we implement views, see 'View anchors' below > = > ****** > = > = > ## Classes > = > Think HTML/CSS/JS classes > = > Classes track status or content type but not display. > = > = > online` >
Ec2=E2=80=A6<= /div> > = > ### Classing convention > = > = > #### Reserved classes > = > .active = > is reserved for navigating views > = > .enabling .disabling .verifying .deleting .requesting > are action classes reserved for client side action confirmation > = > .enabled .disabled .verified .complete .building > are action classes reserved for server events > = > .warning .note .info .tip .caution > are reserved for assistive content > = > .static-reference .assist-reference > reserved for anchored clones of content via static and assistive referenc= ing (see section) > = > .progress .loading .building .compiling .altering > are progress classed to be used in conjunction with a numerical class > = > .50 .10 .20 .25 .75 .100 .30 etc=E2=80=A6 > are percentage classes to be used in conjunction with a value > = > e.g.: `75% of 300gb or better: `225gb of 300gb = > .usage .progress .load .capacity > are **status** classes reserved for identifying the **type** of measureme= nt > = > .instance .provider .user .pool .group > are object classes to be used on any object = > = > ### Lack of classes for layout > We will __NOT__ use classes for defining grid layout e.g. `.span-12` or `= .left-120/` > = > All layouts will be defined in CSS via a combination of their parent view= and the relevant media query. > = > = > for example we will use the CSS = > #admin #providers .account .summary{width:33.333%} > rather than relying on injecting style logic into the html like this `` > = > ****** > = > ## Graceful degradation > = > Support for all core functionality in as many scenarios as possible > = > * New browser features (subtle animation, gradients etc) > * Older browsers lacking features = > * Browsers with javascript turned off > * Screen readers (section 508, we=E2=80=99re going there) > = > ****** > = > = > ## Responsive design > = > Support for viewing from various media eg cellphones, touchscreen device= s, kiosks, tv=E2=80=99s, even print. > = > = > ### Explained > = > 1. We collapse tables into record views for narrow screens. > 2. We Grow fonts and icons for tremendously high resolutions or touchable= large screens. > 3. We use only vector graphics (css /webfonts) for adaptive scaling and t= hemeing. > Anchor referencing with js inlining means repeated content is printed onl= y once. a print version would read like an infrastructure status report fr= om the users perspective. > = > ****** > = > = > ## Visual Metaphors & Vector Graphics > = > Visual metaphors are graphics symbolic of the function they perform. > Vector graphics are a resolution independent implementation. > = > ### Explained = > All icons, visual indicators and ornamental graphics are implemented lik= e this: > = > * Vector glyphs are encoded into a woff webfont = > * The woff font is base64 encoded in the stylesheet to minimise http requ= ests (the current set of 30 icons is ~5k) so this is very acceptable. > * We fallback to url linked images supplies for legacy browsers (no .WOFF= support) by using [modernizr](http://www.modernizr.com/) classes `.no-webf= onts` and `.webfonts` to discriminate our implementation through css > = > = > ****** > = > ## View anchors - or 'single page app' > = > View anchors are portions of our design implemented within the one DOM us= ing basic anchoring functionality. > = > ### Explained > In the proposed change, the entire conductor is one page for all default = views, = > = > 1. Link anchors will activate the specific view or sub-view. = > = > 2. Anchors that do not resolve will initiate a "cannot find" message whic= h will most commonly occur when a user does not have access to an object an= d has manually entered a custom # URL. the two exceptions to this will be = ~/# and ~/#top which will initiate the default app view. > = > ### In action > = > For example: = > = >> The URL below should open the admin > providers > ec2eastcoast > connect= ivity view. > = > https://conductor/#ec2eastcoast-connectivity > ^ ^ ^ > Server ObjectID ChildView > = > = > #### What the html does > e.g. the `
` representing admin > providers > ec2eastcoast would look= like = > = >
.. ec2 east coast information goes here > = > = > and the connectivity tab which exists inside the ec2eastcoast provider wo= uld look like = > = >
> ^ ^ > objectID ChildViewname > = > Why? > Because the provider _ec2eastcoast_ lives natively within the _admin > pr= ovider_ section, it does not need to be referenced in the ID.. it simply ha= s to be unique. But because the connectivity tab is only unique because of= the provider it is associated with, it needs to be prefixed with the objec= tID = > = > = > All direct links to the provider view would look like `EC2 East Coast which would activate the provider tab. > = > = > #### what JS does > = > 1. JS hides all non active views except for the default view (classed as = active by the js) > 2. = > 3. when an ID is requested the object and all parent views get classed `.= active` = > 4. [hashchange for old browsers](http://benalman.com/projects/jquery-hash= change-plugin/) to preserve browsing history > = > #### what the CSS does > The body class `.nojs` is removed once Javascript is loaded so the CSS sp= ecifies that only views be visible when they are classed as `.active` = > = > = > .js div{display:none} // Hiding all views > .js div.active{display:block} // Showing active views > .nojs div{display:block} // All views are shown when tabs don't w= ork. > = > ****** > = > = > ## Referenced content > = >> Referenced content is a live-copy of any existing part of the applicatio= n. It can be implemented with static references or assistive references = > = >> See [this JS Fiddle demo](http://jsfiddle.net/andyfitz/hRqGa/191/) = > = > #### example > = > 1. Global help content can be referenced from many places at once so as t= o avoid redundancy and annoying ajax requests.. if the section the help com= es from is loaded, so is the help. > 2. Inspecting an object via a link can call the objects entire content in= to view. > = > ****** > = > ### Static-references > = > Where an anchor link to another section has been replaced with a live cop= y of the section it links to. > = > .static-reference > = >> An example would be any monitoring view that requires various metrics al= ready rendered elsewhere be included. > = > = > ****** > = > ### Assist-references > = > like a static reference but with the link-text preserved and the section = only visible when the link-text has focus (has been clicked). > = > .assist-reference > = >> An example would be a permissions editor referencing the objects that a = user has permissions to by name and allowing the user to inspect that obje= ct in-place with a single click, without having to visit the object in ques= tions default view. > = > ****** > = > = > ## Help & content > = > Written content to help describe a feature or scenario. = > Combined with admonition classes = > = > .warning .note .info .tip .caution > = > Often implemented via one of the following methods = > = > * Included in the view relevant to its description > * As static-references where the help content can be dismissed (via an X = in the top right corner) > * As assist-references where the help content can be revealed upon clicki= ng a referring link > = > = > = > = > Practically speaking this is text that can be placed inline with a view t= hat it represents or hidden in a non displayed useful content area to be st= atic or assist-referenced by many places. > = > = > ### Explained > = > For example: _=E2=80=9Cdon=E2=80=99t be silly=E2=80=9C_ is a generic tip= that may apply to an enormous variety of contexts. This is useful to be p= laced in the "generic tips" area and linked to via `now please r= emember..` which means it wil be rendered inline of where it is referen= ced. > = > ****** > = > = > ##Client-side status polling > = > All objects relevant to a view are classed with the viewname > On any action inside the view, a status classname is added to the view as= well as any objects that reference it regardless of where they are display= ed = > = > = > link = >
UserXX View
. > = > We watch the referenced views classes and mimic them on all referencing l= inks always as they can contain or be updated with new event styles (for ex= ample: failed, warning, upgraded, admin-only etc) > = > ****** > = > ## Server status events *investigating* > = > Right now we can use ajax calls to update each view but in future it woul= d make sense to use eventSource for more advanced monitoring: [eventSource:= server sent events](http://html5doctor.com/server-sent-events/) = > = > ****** > = > ## Client verification / fast feedback > = > Interactive assurance that an action has been requested without the verif= ication that the server has performed the action. > = > For example a user clicks the enable button.. we immediately apply =E2=80= =9Cenabling=E2=80=9D status to the button but wait for the server to return= with the =E2=80=9Cenabled=E2=80=9D confirmation... > = > ### How it works > = >> **Assumption** intermittent states like verifying, enabling and disablin= g states are safe for client side validation. > = >> They confirm an action has been requested but not applied. > = > As a rule, all elements are given the status of the objects they represen= t as well as classed with the object ID.. e.g.: all buttons with `class=3D= "providerid12451-*"` get the additional class of their intermittent state `= `"enabling/disabling/verifying/whatever"`` When a functional object relate= d to them has been actioned. > = > 1. On the client javascript side, we set the actioning classname to all e= lements with the same object objectid class. > = > 2. Once the action has been done an ajax call confirm the change and refr= eshes the class to "enabled/disabled/done/whatever" and removes the interme= diary state > = > ****** > = > ## Important action certification > = > [JS Fiddle demo](http://jsfiddle.net/andyfitz/mvdST/) > = > = > Requiring the user to certify that they understand the action before allo= wing it to take place. > for example: = > = >> =E2=80=9CDo you understand what you are doing?[yes] okay, here=E2=80=99s= the button [click]=E2=80=9D > = > ###explained > = >> Enabling and disabling providers, deleting users etc = > = > We will use three methods to verify that a user has accepted the severity= of the task they are about to perform: > = > 1. CSS physical obfuscation. = > Where the confirmation toggle sits physically on top of the action toggle= so that an action can not be clicked without clicking the confirmation tog= gle first. this helps simplify the component to one physical space part of= the same consideration set. > = > 2. javascript validation. = > The action button beneath is disabled until the confirmation toggle has b= een clicked > 3. final server verification. = > the submitted action is not accepted by the system unless the post contai= ns both the verification enabled and the action. the server then pushes the= update > = > = > ****** > = > ##Global status and system notification stack. = > = > Important information about the entire system or a current process, displ= ayed prominently. > ###explained > = > Using the referenced content heavily, we throw system, warning and notifi= cation content to the top of the page in a collapsing, growl-style notifica= tion system=E2=80=9D > = >
>

System Messages

> = >

you should to install aeolus-a= ll to properly use conductor

> = >

> href=3D=E2=80=9Dprovider123-build-status=E2=80=9D = > class=3D=E2=80=9Dreflink 50=E2=80=9D> > building provider123 50% Complete > >

> = >
> = > = > ****** > = > ## Printable manifest > = > Because our content is not replicated, and all enabled views are included= in the DOM; = > our app can actually print as if it were a manifest for the authenticated= user. > = > We get this feature for free by proxy of our method for referencing views= and content. > = > Having the ability to produce a hard copy infrastructure report may be a = gimmick, but it's an easy way to show how conductor can help respond an IT = audit situation. > = > ### example print stylesheet changes > = > @media print { > = > a:after { > content: " ("attr(href)") ";} > = > div:before{ > content: " ("attr(id)") ";}} > = > } > = > This will preserve all references and links throughout the UI. > = > Also, we can manually define sections to be printed. > = > @media print { > = > div{display:none} > = > #providers, #instances, #users, #global-tips {display:block !important} > = > } > = > Which means only sections we desire to be included in the manifest get pr= inted > = > also = > = > @media print { > = > .tabs:before{ > page-break-before: always; > content:"This section contains the following:"; > .tabs li a:after{content:""} > .tabs { font-size: 2em;page-break-after: always;} > .tabs li{display:list} > } > = > Which will convert our tabs into whole page section summaries. > = >> remember, this feature is free because we are designing conductor to gra= cefully degrade. Very little effort goes into preserving this feature so lo= ng as our standards are maintained. > = > = > # Existing conductor paradigms > = > These changes don't create any changes to terminology, or have much impac= t for pre-existing views for components already built into conductor. It i= s likely that the majority of what has already been done will be preserved = and only undergo minor changes to the HAML/SASS so that features may be int= egrated into the global view. > = > This has been written purely to start discussion on how we evolve Conduct= or going forward and I'd love to hear your thoughts: [andy.fitzsimon(a)redh= at.com ](mailto:andy.fitzsimon(a)redhat.com) > --===============1968945227974555115== Content-Type: text/html MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.html" PGh0bWw+PGhlYWQ+PC9oZWFkPjxib2R5IHN0eWxlPSJ3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7IC13 ZWJraXQtbmJzcC1tb2RlOiBzcGFjZTsgLXdlYmtpdC1saW5lLWJyZWFrOiBhZnRlci13aGl0ZS1z cGFjZTsgIj48ZGl2PlNvbWUgc291cmNlIGNhbiBiZSBmb3VuZCBpbiBteSBmb3JrIG9mIHRoZSBV SSBwcm9wb3NhbC4mbmJzcDs8L2Rpdj48ZGl2PjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9h bmR5Zml0ei9hZW9sdXMtdXgtZGVzaWducy90cmVlL21hc3Rlci9VSSBQcm9wb3NhbCI+aHR0cHM6 Ly9naXRodWIuY29tL2FuZHlmaXR6L2Flb2x1cy11eC1kZXNpZ25zL3RyZWUvbWFzdGVyL1VJJTIw UHJvcG9zYWw8L2E+PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5BcyBtZW50aW9uZWQsIEknbGwg YmUgd29ya2luZyBvbiB1cGRhdGluZyB0aGUgcGxheWdyb3VuZCBtb2NrLjwvZGl2PjxkaXY+PGJy PjwvZGl2PjxkaXY+QW5keTwvZGl2PjxkaXY+PGJyPjxkaXY+PGRpdj5PbiAzMC8wMS8yMDEyLCBh dCAzOjUxIFBNLCBBbmR5IEZpdHpzaW1vbiB3cm90ZTo8L2Rpdj48YnIgY2xhc3M9IkFwcGxlLWlu dGVyY2hhbmdlLW5ld2xpbmUiPjxibG9ja3F1b3RlIHR5cGU9ImNpdGUiPjxkaXY+SGkgYWxsLDxi cj48YnI+SSd2ZSBzcGVudCBxdWl0ZSBzb21lIHRpbWUgdGhpbmtpbmcgYWJvdXQgZ2xvYmFsIFVJ IGltcHJvdmVtZW50cyB3ZSBjYW4gbWFrZSB0byBjb25kdWN0b3IgZm9yIGEgZnV0dXJlIHJlbGVh c2UuPGJyPk5vdyBpdCdzIHRpbWUgZm9yIG1lIHRvIHNoYXJlIGEgc21hbGwgc3VtbWFyeSBvZiB0 aG9zZSBpZGVhcyBhbmQgaG9wZWZ1bGx5IGdldCBzb21lIGZlZWRiYWNrLjxicj48YnI+SSdsbCBi ZSB1cGRhdGluZyA8YSBocmVmPSJodHRwOi8vbmRmdHouY29tL3BsYXlncm91bmQvIj5odHRwOi8v bmRmdHouY29tL3BsYXlncm91bmQvPC9hPiB3aXRoIG11Y2ggdGhlIHN0dWZmIG1lbnRpb25lZCBi ZWxvdyBidXQgYXMgb2YgcmlnaHQgbm93IGl0IGlzIG5vdCBhIHJlcHJlc2VudGF0aW9uIG9mIHRo ZSBmdW5jdGlvbmFsaXR5IGRlc2NyaWJlZDsgc28gaWYgeW91IGhhdmUgc2VlbiBpdCBiZWZvcmUs IHBsZWFzZSBkaXNyZWdhcmQgZXZlcnl0aGluZyBhc2lkZSBmcm9tIHRoZSByZXNwb25zaXZlbmVz cyBhbmQgdGhlIHZlY3RvciBpY29ucyBhc3BlY3RzLiAmbmJzcDtJJ2xsIG5vdyBzd2l0Y2ggZ2Vh cnMgdG8gZ2V0IHRoZSBtb2NrIGludGVyZmFjZSB1cCB0byBzcGVlZCB3aXRoIGFsbCB0aGUgY2xp ZW50IHNpZGUgZmVhdHVyZXMgZGVzY3JpYmVkLjxicj48YnI+KGF0dGFjaGVkIGlzIGEgZm9ybWF0 dGVkIGNvcHkgaW4tY2FzZSB5b3UgZG9uJ3QgbGlrZSByZWFkaW5nIG1hcmtkb3duKTxicj48YnI+ IC4uIHNvIGhlcmUgd2UgZ28uLjxicj48YnI+PT09PT09PT09PT09PT09PT09PT09PTxicj48YnI+ I0dvYWxzIGZvciBhIGJldHRlciBVSTxicj48YnI+PGJyPjxibG9ja3F1b3RlIHR5cGU9ImNpdGUi PlRoaXMgaXMgYSBwbGFuIHRvIGV2b2x2ZSB0aGUgY29uZHVjdG9yIFVJIGludG8gYSBsZWFuLCBh ZGFwdGl2ZSwgYmVhdXRpZnVsIGFuZCBjb25zaWRlcmVkIGV4cGVyaWVuY2UuPGJyPjwvYmxvY2tx dW90ZT48YnI+PGJyPiMjIyBTcGVjaWZpY2FsbHksIHdlIGhvcGUgdG8gYWRkcmVzczo8YnI+KiBO YXZpZ2F0aW5nIGFuZCBpc3N1aW5nIHRhc2tzIHF1aWNrbHkgPGJyPiAmbmJzcDsqIFdpdGhvdXQg dW5uZWNlc3NhcnkgaHR0cC1yb3VuZHRyaXBzIGp1c3QgdG8gY2hlY2sgb24gYSB2aWV3Ljxicj4g Jm5ic3A7KiBXaXRob3V0IGhhdmluZyB0byBsZWFybiBuZXcgY29tcG9uZW50cyBpbiBldmVyeSB2 aWV3PGJyPiAmbmJzcDsqIFdpdGhvdXQgaGF2aW5nIHRvIHJlZmVyIHRvIGRvY3VtZW50YXRpb24g dG8gYmUgYXNzaXN0ZWQgaW4gY29yZSB0YXNrcy48YnI+PGJyPiogS2VlcGluZyB0aGUgkWJpZyA2 kiBjb25zaXN0ZW50OiAmbmJzcDs8YnI+ICZuYnNwOyogQ29uc2lzdGVudCBhZXN0aGV0aWM8YnI+ ICZuYnNwOyogQ29uc2lzdGVudCBiZWhhdmlvdXI8YnI+ICZuYnNwOyogQ29uc2lzdGVudCBub3Rp ZmljYXRpb24gPGJyPiAmbmJzcDsqIENvbnNpc3RlbnQgbWVzc2FnaW5nIDxicj4gJm5ic3A7KiBD b25zaXN0ZW50IGhlbHA8YnI+ICZuYnNwOyogQ29uc2lzdGVudCByZWZlcmVuY2luZzxicj48YnI+ KiBBZGRyZXNzIGFzIG1hbnkgbWVkaWEgdHlwZXMgYXMgd2UgY2FuIGdldCAqZm9yIGZyZWUqPGJy PiAmbmJzcDsqIF9fTW9iaWxlX18gLSA0ODBweCBhbmQgdXAgdmlhIG1pbm9yIGFjY29tbW9kYXRp b25zIGluIG91ciBVSTxicj4gJm5ic3A7KiBfX1dvcmtzdGF0aW9uX18gNjQwcHgtMTI4MHB4IC0g b3VyIGRlZmF1bHQgdmlldzxicj4gJm5ic3A7KiBfX1NlY3Rpb24gNTA4X18gY29tcGxpYW5jZSBp bmNsdWRpbmcgc2NyZWVuIHJlYWRlcnM8YnI+ICZuYnNwOyogX19QcmludGFibGVfXyAtIEFzIGEg cmVhZC1vbmx5IGludmVudG9yeSBtYW5pZmVzdCBvZiBhIHVzZXJzIGVudGlyZSBhY2Nlc3MuPGJy Pjxicj4qIEZlZWwgbGlrZSBhIDIwMTIgY2xpZW50IGFwcCA8YnI+ICZuYnNwOyogQ3V0dGluZyBl ZGdlIFVJIGNvbnZlbnRpb25zPGJyPiAmbmJzcDsqIFN3aXNzIHN0eWxlIHZpc3VhbCBtZXRhcGhv cnMgJmFtcDsgZWxlbWVudHMgb2YgdHlwb2dyYXBoaWMgc3R5bGU8YnI+ICZuYnNwOyogQmFzZWxp bmUgZ3JpZCBhbGlnbmVkIHR5cG9ncmFwaHkgY29uc2lzdGluZyBvZiAyIHdlaWdodHMgd2l0aCBz aW5nbGUgbGVhZGluZy48YnI+ICZuYnNwOyogVXNlIG9ubHkgdmVjdG9yIGdyYXBoaWNzPGJyPiAm bmJzcDsqIEJsYXppbmdseSBmYXN0IGNsaWVudCBzaWRlIHJlbmRlciB0aW1lczxicj48YnI+PGJy PiMgR2xvc3Nhcnkgb2YgdGVybXMgLyBleHBsYW5hdGlvbiBvZiBmZWF0dXJlcy48YnI+PGJyPjxi cj48YnI+IyMgVmlld3M8YnI+PGJyPk9uZSBkaXN0aW5jdCBjYXRlZ29yeSBvZiBjb250ZW50Ljxi cj48YnI+IyMjIGV4cGxhaW5lZDxicj48YnI+k3RoZSB1c2VycyB2aWV3lCBvciCTdGhlIHByb3Zp ZGVycyB2aWV3lC48YnI+QSB2aWV3cyBuYW1lIGNhbiBldmVuIGJlIGFzIHNwZWNpZmljIGFzIJN1 c2VyWFgtcHJvdmlkZXItcGVybWlzc2lvbnMgdmlld5QgJm5ic3A7b3Igk2FkbWluLXByb3ZpZGVy LXBlcm1pc3Npb25zLXVzZXJYWCB2aWV3lDxicj48YnI+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24g aG93IHdlIGltcGxlbWVudCB2aWV3cywgc2VlICdWaWV3IGFuY2hvcnMnIGJlbG93PGJyPjxicj4q KioqKio8YnI+PGJyPjxicj4jIyBDbGFzc2VzPGJyPjxicj5UaGluayBIVE1ML0NTUy9KUyBjbGFz c2VzPGJyPjxicj5DbGFzc2VzIHRyYWNrIHN0YXR1cyBvciBjb250ZW50IHR5cGUgYnV0IG5vdCBk aXNwbGF5Ljxicj48YnI+PGJyPiAmbmJzcDsmbmJzcDsmbmJzcDsmbHQ7YSBocmVmPSIjcHJvdmlk ZXIyMyIgY2xhc3M9InByb3ZpZGVyMjMgZW5hYmxpbmcgZWMyIiAmZ3Q7b25saW5lJmx0Oy9hJmd0 O2A8YnI+ICZuYnNwOyZuYnNwOyZuYnNwOyZsdDtkaXYgaWQ9InByb3ZpZGVyMjMiIGNsYXNzPSJw cm92aWRlcjIzIGVuYWJsaW5nIGVjMiImZ3Q7RWMyhSZsdDsvZGl2Jmd0Ozxicj48YnI+IyMjIENs YXNzaW5nIGNvbnZlbnRpb248YnI+PGJyPjxicj4jIyMjIFJlc2VydmVkIGNsYXNzZXM8YnI+PGJy PiAmbmJzcDsmbmJzcDsmbmJzcDsuYWN0aXZlIDxicj5pcyByZXNlcnZlZCBmb3IgbmF2aWdhdGlu ZyB2aWV3czxicj48YnI+ICZuYnNwOyZuYnNwOyZuYnNwOy5lbmFibGluZyAuZGlzYWJsaW5nIC52 ZXJpZnlpbmcgLmRlbGV0aW5nIC5yZXF1ZXN0aW5nPGJyPmFyZSBhY3Rpb24gY2xhc3NlcyByZXNl cnZlZCBmb3IgY2xpZW50IHNpZGUgYWN0aW9uIGNvbmZpcm1hdGlvbjxicj48YnI+ICZuYnNwOyZu YnNwOyZuYnNwOy5lbmFibGVkIC5kaXNhYmxlZCAudmVyaWZpZWQgLmNvbXBsZXRlIC5idWlsZGlu Zzxicj5hcmUgYWN0aW9uIGNsYXNzZXMgcmVzZXJ2ZWQgZm9yIHNlcnZlciBldmVudHM8YnI+PGJy PiAmbmJzcDsmbmJzcDsmbmJzcDsud2FybmluZyAubm90ZSAuaW5mbyAudGlwIC5jYXV0aW9uPGJy PmFyZSByZXNlcnZlZCBmb3IgYXNzaXN0aXZlIGNvbnRlbnQ8YnI+PGJyPiAmbmJzcDsmbmJzcDsm bmJzcDsuc3RhdGljLXJlZmVyZW5jZSAuYXNzaXN0LXJlZmVyZW5jZTxicj5yZXNlcnZlZCBmb3Ig YW5jaG9yZWQgY2xvbmVzIG9mIGNvbnRlbnQgdmlhIHN0YXRpYyBhbmQgYXNzaXN0aXZlIHJlZmVy ZW5jaW5nIChzZWUgc2VjdGlvbik8YnI+PGJyPiAmbmJzcDsmbmJzcDsmbmJzcDsucHJvZ3Jlc3Mg LmxvYWRpbmcgLmJ1aWxkaW5nIC5jb21waWxpbmcgLmFsdGVyaW5nPGJyPmFyZSBwcm9ncmVzcyBj bGFzc2VkIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBhIG51bWVyaWNhbCBjbGFzczxi cj48YnI+ICZuYnNwOyZuYnNwOyZuYnNwOy41MCAuMTAgLjIwIC4yNSAuNzUgLjEwMCAuMzAgZXRj hTxicj5hcmUgcGVyY2VudGFnZSBjbGFzc2VzIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0 aCBhIHZhbHVlPGJyPjxicj5lLmcuOiBgJmx0O3NwYW4gY2xhc3M9Ijc1IHVzYWdlIiZndDs3NSUg b2YgMzAwZ2IgJmx0Oy8uLi5gIDxicj5vciBiZXR0ZXI6IGAmbHQ7c3BhbiBjbGFzcz0iNzUgdXNh Z2UiJmd0OzIyNWdiIG9mIDMwMGdiICZsdDsvLi4uYDxicj48YnI+ICZuYnNwOyZuYnNwOyZuYnNw Oy51c2FnZSAucHJvZ3Jlc3MgLmxvYWQgLmNhcGFjaXR5PGJyPmFyZSAqKnN0YXR1cyoqIGNsYXNz ZXMgcmVzZXJ2ZWQgZm9yIGlkZW50aWZ5aW5nIHRoZSAqKnR5cGUqKiBvZiBtZWFzdXJlbWVudDxi cj48YnI+ICZuYnNwOyZuYnNwOyZuYnNwOy5pbnN0YW5jZSAucHJvdmlkZXIgLnVzZXIgLnBvb2wg Lmdyb3VwPGJyPmFyZSBvYmplY3QgY2xhc3NlcyB0byBiZSB1c2VkIG9uIGFueSBvYmplY3QgPGJy Pjxicj4jIyMgJm5ic3A7TGFjayBvZiBjbGFzc2VzIGZvciBsYXlvdXQ8YnI+V2Ugd2lsbCBfX05P VF9fIHVzZSBjbGFzc2VzIGZvciBkZWZpbmluZyBncmlkIGxheW91dCBlLmcuIGAuc3Bhbi0xMmAg b3IgYC5sZWZ0LTEyMC9gPGJyPjxicj5BbGwgbGF5b3V0cyB3aWxsIGJlIGRlZmluZWQgaW4gQ1NT IHZpYSBhIGNvbWJpbmF0aW9uIG9mIHRoZWlyIHBhcmVudCB2aWV3IGFuZCB0aGUgcmVsZXZhbnQg bWVkaWEgcXVlcnkuPGJyPjxicj48YnI+Zm9yIGV4YW1wbGUgd2Ugd2lsbCB1c2UgdGhlIENTUyA8 YnI+ICZuYnNwOyZuYnNwOyZuYnNwOyNhZG1pbiAjcHJvdmlkZXJzIC5hY2NvdW50IC5zdW1tYXJ5 e3dpZHRoOjMzLjMzMyV9PGJyPnJhdGhlciB0aGFuIHJlbHlpbmcgb24gaW5qZWN0aW5nIHN0eWxl IGxvZ2ljIGludG8gdGhlIGh0bWwgbGlrZSB0aGlzIGAmbHQ7Y2xhc3M9InN1bW1hcnkgc3Bhbi00 IiZndDtgPGJyPjxicj4qKioqKio8YnI+PGJyPiMjIEdyYWNlZnVsIGRlZ3JhZGF0aW9uPGJyPjxi cj5TdXBwb3J0IGZvciBhbGwgY29yZSBmdW5jdGlvbmFsaXR5IGluIGFzIG1hbnkgc2NlbmFyaW9z IGFzIHBvc3NpYmxlPGJyPjxicj4gKiBOZXcgYnJvd3NlciBmZWF0dXJlcyAoc3VidGxlIGFuaW1h dGlvbiwgZ3JhZGllbnRzIGV0Yyk8YnI+ICogT2xkZXIgYnJvd3NlcnMgbGFja2luZyBmZWF0dXJl cyA8YnI+ICogQnJvd3NlcnMgd2l0aCBqYXZhc2NyaXB0IHR1cm5lZCBvZmY8YnI+ICogU2NyZWVu IHJlYWRlcnMgKHNlY3Rpb24gNTA4LCB3ZZJyZSBnb2luZyB0aGVyZSk8YnI+PGJyPioqKioqKjxi cj48YnI+PGJyPiMjIFJlc3BvbnNpdmUgZGVzaWduPGJyPjxicj5TdXBwb3J0IGZvciB2aWV3aW5n IGZyb20gdmFyaW91cyBtZWRpYSBlZyAmbmJzcDtjZWxscGhvbmVzLCB0b3VjaHNjcmVlbiBkZXZp Y2VzLCBraW9za3MsIHR2knMsIGV2ZW4gcHJpbnQuPGJyPjxicj48YnI+IyMjIEV4cGxhaW5lZDxi cj48YnI+IDEuIFdlIGNvbGxhcHNlIHRhYmxlcyBpbnRvIHJlY29yZCB2aWV3cyBmb3IgbmFycm93 IHNjcmVlbnMuPGJyPiAyLiBXZSBHcm93IGZvbnRzIGFuZCBpY29ucyBmb3IgdHJlbWVuZG91c2x5 IGhpZ2ggcmVzb2x1dGlvbnMgb3IgdG91Y2hhYmxlIGxhcmdlIHNjcmVlbnMuPGJyPiAzLiBXZSB1 c2Ugb25seSB2ZWN0b3IgZ3JhcGhpY3MgKGNzcyAvd2ViZm9udHMpIGZvciBhZGFwdGl2ZSBzY2Fs aW5nIGFuZCB0aGVtZWluZy48YnI+QW5jaG9yIHJlZmVyZW5jaW5nIHdpdGgganMgaW5saW5pbmcg bWVhbnMgcmVwZWF0ZWQgY29udGVudCBpcyBwcmludGVkIG9ubHkgb25jZS4gJm5ic3A7YSBwcmlu dCB2ZXJzaW9uIHdvdWxkIHJlYWQgbGlrZSBhbiBpbmZyYXN0cnVjdHVyZSBzdGF0dXMgcmVwb3J0 IGZyb20gdGhlIHVzZXJzIHBlcnNwZWN0aXZlLjxicj48YnI+KioqKioqPGJyPjxicj48YnI+IyMg VmlzdWFsIE1ldGFwaG9ycyAmYW1wOyBWZWN0b3IgR3JhcGhpY3M8YnI+PGJyPlZpc3VhbCBtZXRh cGhvcnMgYXJlIGdyYXBoaWNzIHN5bWJvbGljIG9mIHRoZSBmdW5jdGlvbiB0aGV5IHBlcmZvcm0u PGJyPlZlY3RvciBncmFwaGljcyBhcmUgYSByZXNvbHV0aW9uIGluZGVwZW5kZW50IGltcGxlbWVu dGF0aW9uLjxicj48YnI+IyMjIEV4cGxhaW5lZCA8YnI+QWxsIGljb25zLCB2aXN1YWwgaW5kaWNh dG9ycyBhbmQgb3JuYW1lbnRhbCBncmFwaGljcyAmbmJzcDthcmUgaW1wbGVtZW50ZWQgbGlrZSB0 aGlzOjxicj48YnI+ICogVmVjdG9yIGdseXBocyBhcmUgZW5jb2RlZCBpbnRvIGEgd29mZiB3ZWJm b250IDxicj4gKiBUaGUgd29mZiBmb250IGlzIGJhc2U2NCBlbmNvZGVkIGluIHRoZSBzdHlsZXNo ZWV0IHRvIG1pbmltaXNlIGh0dHAgcmVxdWVzdHMgKHRoZSBjdXJyZW50IHNldCBvZiAzMCBpY29u cyBpcyB+NWspIHNvIHRoaXMgaXMgdmVyeSBhY2NlcHRhYmxlLjxicj4gKiBXZSBmYWxsYmFjayB0 byB1cmwgbGlua2VkIGltYWdlcyBzdXBwbGllcyBmb3IgbGVnYWN5IGJyb3dzZXJzIChubyAuV09G RiBzdXBwb3J0KSBieSB1c2luZyBbbW9kZXJuaXpyXSg8YSBocmVmPSJodHRwOi8vd3d3Lm1vZGVy bml6ci5jb20vIj5odHRwOi8vd3d3Lm1vZGVybml6ci5jb20vPC9hPikgY2xhc3NlcyBgLm5vLXdl YmZvbnRzYCBhbmQgYC53ZWJmb250c2AgdG8gZGlzY3JpbWluYXRlIG91ciBpbXBsZW1lbnRhdGlv biB0aHJvdWdoIGNzczxicj48YnI+PGJyPioqKioqKjxicj48YnI+IyMgVmlldyBhbmNob3JzIC0g b3IgJ3NpbmdsZSBwYWdlIGFwcCc8YnI+PGJyPlZpZXcgYW5jaG9ycyBhcmUgcG9ydGlvbnMgb2Yg b3VyIGRlc2lnbiBpbXBsZW1lbnRlZCB3aXRoaW4gdGhlIG9uZSBET00gdXNpbmcgYmFzaWMgYW5j aG9yaW5nIGZ1bmN0aW9uYWxpdHkuPGJyPjxicj4jIyMgRXhwbGFpbmVkPGJyPkluIHRoZSBwcm9w b3NlZCBjaGFuZ2UsIHRoZSBlbnRpcmUgY29uZHVjdG9yIGlzIG9uZSBwYWdlIGZvciBhbGwgZGVm YXVsdCB2aWV3cywgPGJyPjxicj4xLiBMaW5rIGFuY2hvcnMgd2lsbCBhY3RpdmF0ZSB0aGUgc3Bl Y2lmaWMgdmlldyBvciBzdWItdmlldy4gJm5ic3A7PGJyPjxicj4yLiBBbmNob3JzIHRoYXQgZG8g bm90IHJlc29sdmUgd2lsbCBpbml0aWF0ZSBhICJjYW5ub3QgZmluZCIgbWVzc2FnZSB3aGljaCB3 aWxsIG1vc3QgY29tbW9ubHkgb2NjdXIgd2hlbiBhIHVzZXIgZG9lcyBub3QgaGF2ZSBhY2Nlc3Mg dG8gYW4gb2JqZWN0IGFuZCBoYXMgbWFudWFsbHkgZW50ZXJlZCBhIGN1c3RvbSAjIFVSTC4gJm5i c3A7dGhlIHR3byBleGNlcHRpb25zIHRvIHRoaXMgd2lsbCBiZSB+LyMgYW5kIH4vI3RvcCB3aGlj aCB3aWxsIGluaXRpYXRlIHRoZSBkZWZhdWx0IGFwcCB2aWV3Ljxicj48YnI+IyMjIEluIGFjdGlv bjxicj48YnI+Rm9yIGV4YW1wbGU6IDxicj48YnI+PGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSI+VGhl IFVSTCBiZWxvdyBzaG91bGQgb3BlbiB0aGUgYWRtaW4gJmd0OyBwcm92aWRlcnMgJmd0OyBlYzJl YXN0Y29hc3QgJmd0OyBjb25uZWN0aXZpdHkgdmlldy48YnI+PC9ibG9ja3F1b3RlPjxicj4gJm5i c3A7Jm5ic3A7Jm5ic3A7PGEgaHJlZj0iaHR0cHM6Ly9jb25kdWN0b3IvI2VjMmVhc3Rjb2FzdC1j b25uZWN0aXZpdHkiPmh0dHBzOi8vY29uZHVjdG9yLyNlYzJlYXN0Y29hc3QtY29ubmVjdGl2aXR5 PC9hPjxicj4gJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7XiAmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDteICZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwO148YnI+ICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NlcnZlciAmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDtPYmplY3RJRCAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDaGlsZFZpZXc8 YnI+PGJyPjxicj4jIyMjIFdoYXQgdGhlIGh0bWwgZG9lczxicj5lLmcuIHRoZSBgJmx0O2RpdiZn dDtgIHJlcHJlc2VudGluZyBhZG1pbiAmZ3Q7IHByb3ZpZGVycyAmZ3Q7IGVjMmVhc3Rjb2FzdCB3 b3VsZCBsb29rIGxpa2UgPGJyPjxicj4gJm5ic3A7Jm5ic3A7Jm5ic3A7Jmx0O2RpdiBpZD0iZWMy ZWFzdGNvYXN0IiZndDsuLiBlYzIgZWFzdCBjb2FzdCBpbmZvcm1hdGlvbiBnb2VzIGhlcmU8YnI+ PGJyPjxicj5hbmQgdGhlIGNvbm5lY3Rpdml0eSB0YWIgd2hpY2ggZXhpc3RzIGluc2lkZSB0aGUg ZWMyZWFzdGNvYXN0IHByb3ZpZGVyIHdvdWxkIGxvb2sgbGlrZSA8YnI+PGJyPiAmbmJzcDsmbmJz cDsmbmJzcDsmbHQ7ZGl2IGlkPSJlYzJlYXN0Y29hc3QtY29ubmVjdGl2aXR5IiZndDs8YnI+ICZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO14gJm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Xjxi cj4gJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7b2JqZWN0SUQgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Q2hpbGRWaWV3bmFtZTxicj48YnI+V2h5Pzxicj5CZWNhdXNlIHRoZSBwcm92aWRlciBf ZWMyZWFzdGNvYXN0XyBsaXZlcyBuYXRpdmVseSB3aXRoaW4gdGhlIF9hZG1pbiAmZ3Q7IHByb3Zp ZGVyXyBzZWN0aW9uLCBpdCBkb2VzIG5vdCBuZWVkIHRvIGJlIHJlZmVyZW5jZWQgaW4gdGhlIElE Li4gaXQgc2ltcGx5IGhhcyB0byBiZSB1bmlxdWUuICZuYnNwO0J1dCBiZWNhdXNlIHRoZSBjb25u ZWN0aXZpdHkgdGFiIGlzIG9ubHkgdW5pcXVlIGJlY2F1c2Ugb2YgdGhlIHByb3ZpZGVyIGl0IGlz IGFzc29jaWF0ZWQgd2l0aCwgaXQgbmVlZHMgdG8gYmUgcHJlZml4ZWQgd2l0aCB0aGUgb2JqZWN0 SUQgPGJyPjxicj48YnI+QWxsIGRpcmVjdCBsaW5rcyB0byB0aGUgcHJvdmlkZXIgdmlldyB3b3Vs ZCBsb29rIGxpa2UgYCZsdDthIGhyZWY9I2VjMmVhc3Rjb2FzdCZndDtFQzIgRWFzdCBDb2FzdCZs dDsvYSZndDsgd2hpY2ggd291bGQgYWN0aXZhdGUgdGhlIHByb3ZpZGVyIHRhYi48YnI+PGJyPjxi cj4jIyMjIHdoYXQgSlMgZG9lczxicj48YnI+MS4gSlMgaGlkZXMgYWxsIG5vbiBhY3RpdmUgdmll d3MgZXhjZXB0IGZvciB0aGUgZGVmYXVsdCB2aWV3IChjbGFzc2VkIGFzIGFjdGl2ZSBieSB0aGUg anMpPGJyPjIuIDxicj4zLiB3aGVuIGFuIElEIGlzIHJlcXVlc3RlZCB0aGUgb2JqZWN0IGFuZCBh bGwgcGFyZW50IHZpZXdzIGdldCBjbGFzc2VkIGAuYWN0aXZlYCA8YnI+NC4gW2hhc2hjaGFuZ2Ug Zm9yIG9sZCBicm93c2Vyc10oPGEgaHJlZj0iaHR0cDovL2JlbmFsbWFuLmNvbS9wcm9qZWN0cy9q cXVlcnktaGFzaGNoYW5nZS1wbHVnaW4vIj5odHRwOi8vYmVuYWxtYW4uY29tL3Byb2plY3RzL2px dWVyeS1oYXNoY2hhbmdlLXBsdWdpbi88L2E+KSAmbmJzcDt0byBwcmVzZXJ2ZSBicm93c2luZyBo aXN0b3J5PGJyPjxicj4jIyMjIHdoYXQgdGhlIENTUyBkb2VzPGJyPlRoZSBib2R5IGNsYXNzIGAu bm9qc2AgaXMgcmVtb3ZlZCBvbmNlIEphdmFzY3JpcHQgaXMgbG9hZGVkIHNvIHRoZSBDU1Mgc3Bl Y2lmaWVzIHRoYXQgb25seSB2aWV3cyBiZSB2aXNpYmxlIHdoZW4gdGhleSBhcmUgY2xhc3NlZCBh cyBgLmFjdGl2ZWAgPGJyPjxicj48YnI+ICZuYnNwOyZuYnNwOyZuYnNwOy5qcyBkaXZ7ZGlzcGxh eTpub25lfSAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsv LyBIaWRpbmcgYWxsIHZpZXdzPGJyPiAmbmJzcDsmbmJzcDsmbmJzcDsuanMgZGl2LmFjdGl2ZXtk aXNwbGF5OmJsb2NrfSAvLyBTaG93aW5nIGFjdGl2ZSB2aWV3czxicj4gJm5ic3A7Jm5ic3A7Jm5i c3A7Lm5vanMgZGl2e2Rpc3BsYXk6YmxvY2t9ICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw Oy8vIEFsbCB2aWV3cyBhcmUgc2hvd24gd2hlbiB0YWJzIGRvbid0IHdvcmsuPGJyPjxicj4qKioq Kio8YnI+PGJyPjxicj4jIyBSZWZlcmVuY2VkIGNvbnRlbnQ8YnI+PGJyPjxibG9ja3F1b3RlIHR5 cGU9ImNpdGUiPlJlZmVyZW5jZWQgY29udGVudCBpcyBhIGxpdmUtY29weSBvZiBhbnkgZXhpc3Rp bmcgcGFydCBvZiB0aGUgYXBwbGljYXRpb24uIEl0IGNhbiBiZSBpbXBsZW1lbnRlZCB3aXRoIHN0 YXRpYyByZWZlcmVuY2VzIG9yIGFzc2lzdGl2ZSByZWZlcmVuY2VzIDxicj48L2Jsb2NrcXVvdGU+ PGJyPjxibG9ja3F1b3RlIHR5cGU9ImNpdGUiPlNlZSBbdGhpcyBKUyBGaWRkbGUgZGVtb10oPGEg aHJlZj0iaHR0cDovL2pzZmlkZGxlLm5ldC9hbmR5Zml0ei9oUnFHYS8xOTEvIj5odHRwOi8vanNm aWRkbGUubmV0L2FuZHlmaXR6L2hScUdhLzE5MS88L2E+KSA8YnI+PC9ibG9ja3F1b3RlPjxicj4j IyMjIGV4YW1wbGU8YnI+PGJyPjEuIEdsb2JhbCBoZWxwIGNvbnRlbnQgY2FuIGJlIHJlZmVyZW5j ZWQgZnJvbSBtYW55IHBsYWNlcyBhdCBvbmNlIHNvIGFzIHRvIGF2b2lkIHJlZHVuZGFuY3kgYW5k IGFubm95aW5nIGFqYXggcmVxdWVzdHMuLiBpZiB0aGUgc2VjdGlvbiB0aGUgaGVscCBjb21lcyBm cm9tIGlzIGxvYWRlZCwgc28gaXMgdGhlIGhlbHAuPGJyPjIuIEluc3BlY3RpbmcgYW4gb2JqZWN0 IHZpYSBhIGxpbmsgY2FuIGNhbGwgdGhlIG9iamVjdHMgZW50aXJlIGNvbnRlbnQgaW50byB2aWV3 Ljxicj48YnI+KioqKioqPGJyPjxicj4jIyMgU3RhdGljLXJlZmVyZW5jZXM8YnI+PGJyPldoZXJl IGFuIGFuY2hvciBsaW5rIHRvIGFub3RoZXIgc2VjdGlvbiBoYXMgYmVlbiByZXBsYWNlZCB3aXRo IGEgbGl2ZSBjb3B5IG9mIHRoZSBzZWN0aW9uIGl0IGxpbmtzIHRvLjxicj48YnI+ICZuYnNwOyZu YnNwOyZuYnNwOy5zdGF0aWMtcmVmZXJlbmNlPGJyPjxicj48YmxvY2txdW90ZSB0eXBlPSJjaXRl Ij5BbiBleGFtcGxlIHdvdWxkIGJlIGFueSBtb25pdG9yaW5nIHZpZXcgdGhhdCByZXF1aXJlcyB2 YXJpb3VzIG1ldHJpY3MgYWxyZWFkeSByZW5kZXJlZCBlbHNld2hlcmUgYmUgaW5jbHVkZWQuPGJy PjwvYmxvY2txdW90ZT48YnI+PGJyPioqKioqKjxicj48YnI+IyMjIEFzc2lzdC1yZWZlcmVuY2Vz PGJyPjxicj5saWtlIGEgc3RhdGljIHJlZmVyZW5jZSBidXQgd2l0aCB0aGUgbGluay10ZXh0IHBy ZXNlcnZlZCBhbmQgdGhlIHNlY3Rpb24gb25seSB2aXNpYmxlIHdoZW4gdGhlIGxpbmstdGV4dCBo YXMgZm9jdXMgKGhhcyBiZWVuIGNsaWNrZWQpLjxicj48YnI+ICZuYnNwOyZuYnNwOyZuYnNwOy5h c3Npc3QtcmVmZXJlbmNlPGJyPjxicj48YmxvY2txdW90ZSB0eXBlPSJjaXRlIj5BbiBleGFtcGxl IHdvdWxkIGJlIGEgcGVybWlzc2lvbnMgZWRpdG9yIHJlZmVyZW5jaW5nIHRoZSBvYmplY3RzIHRo YXQgYSB1c2VyIGhhcyBwZXJtaXNzaW9ucyB0byBieSBuYW1lICZuYnNwO2FuZCBhbGxvd2luZyB0 aGUgdXNlciB0byBpbnNwZWN0IHRoYXQgb2JqZWN0IGluLXBsYWNlIHdpdGggYSBzaW5nbGUgY2xp Y2ssIHdpdGhvdXQgaGF2aW5nIHRvIHZpc2l0IHRoZSBvYmplY3QgaW4gcXVlc3Rpb25zIGRlZmF1 bHQgdmlldy48YnI+PC9ibG9ja3F1b3RlPjxicj4qKioqKio8YnI+PGJyPjxicj4jIyBIZWxwICZh bXA7IGNvbnRlbnQ8YnI+PGJyPldyaXR0ZW4gY29udGVudCB0byBoZWxwIGRlc2NyaWJlIGEgZmVh dHVyZSBvciBzY2VuYXJpby4gPGJyPkNvbWJpbmVkIHdpdGggYWRtb25pdGlvbiBjbGFzc2VzIDxi cj48YnI+ICZuYnNwOyZuYnNwOyZuYnNwOy53YXJuaW5nIC5ub3RlIC5pbmZvIC50aXAgLmNhdXRp b248YnI+PGJyPk9mdGVuIGltcGxlbWVudGVkIHZpYSBvbmUgb2YgdGhlIGZvbGxvd2luZyBtZXRo b2RzIDxicj48YnI+ICogSW5jbHVkZWQgaW4gdGhlIHZpZXcgcmVsZXZhbnQgdG8gaXRzIGRlc2Ny aXB0aW9uPGJyPiAqIEFzIHN0YXRpYy1yZWZlcmVuY2VzIHdoZXJlIHRoZSBoZWxwIGNvbnRlbnQg Y2FuIGJlIGRpc21pc3NlZCAodmlhIGFuIFggaW4gdGhlIHRvcCByaWdodCBjb3JuZXIpPGJyPiAq IEFzIGFzc2lzdC1yZWZlcmVuY2VzIHdoZXJlIHRoZSBoZWxwIGNvbnRlbnQgY2FuIGJlIHJldmVh bGVkIHVwb24gY2xpY2tpbmcgYSByZWZlcnJpbmcgbGluazxicj48YnI+PGJyPjxicj48YnI+UHJh Y3RpY2FsbHkgc3BlYWtpbmcgdGhpcyBpcyB0ZXh0IHRoYXQgY2FuIGJlIHBsYWNlZCBpbmxpbmUg d2l0aCBhIHZpZXcgdGhhdCBpdCByZXByZXNlbnRzIG9yIGhpZGRlbiBpbiBhIG5vbiBkaXNwbGF5 ZWQgdXNlZnVsIGNvbnRlbnQgYXJlYSB0byBiZSBzdGF0aWMgb3IgYXNzaXN0LXJlZmVyZW5jZWQg YnkgbWFueSBwbGFjZXMuPGJyPjxicj48YnI+IyMjIEV4cGxhaW5lZDxicj48YnI+Rm9yIGV4YW1w bGU6ICZuYnNwO1+TZG9uknQgYmUgc2lsbHmTXyBpcyBhIGdlbmVyaWMgdGlwIHRoYXQgbWF5IGFw cGx5IHRvIGFuIGVub3Jtb3VzIHZhcmlldHkgb2YgY29udGV4dHMuICZuYnNwO1RoaXMgaXMgdXNl ZnVsIHRvIGJlIHBsYWNlZCBpbiB0aGUgImdlbmVyaWMgdGlwcyIgYXJlYSBhbmQgbGlua2VkIHRv IHZpYSBgJmx0O2EgaHJlZj2UI2RvbnQgYmUtc2lsbHmUIGNsYXNzPZRhc3Npc3QtcmVmZXJlbmNl lCZndDtub3cgcGxlYXNlIHJlbWVtYmVyLi4mbHQ7L2EmZ3Q7YCB3aGljaCBtZWFucyBpdCB3aWwg YmUgcmVuZGVyZWQgaW5saW5lIG9mIHdoZXJlIGl0IGlzIHJlZmVyZW5jZWQuPGJyPjxicj4qKioq Kio8YnI+PGJyPjxicj4jI0NsaWVudC1zaWRlIHN0YXR1cyBwb2xsaW5nPGJyPjxicj5BbGwgb2Jq ZWN0cyByZWxldmFudCB0byBhIHZpZXcgYXJlIGNsYXNzZWQgd2l0aCB0aGUgdmlld25hbWU8YnI+ T24gYW55IGFjdGlvbiBpbnNpZGUgdGhlIHZpZXcsIGEgc3RhdHVzIGNsYXNzbmFtZSBpcyBhZGRl ZCB0byB0aGUgdmlldyBhcyB3ZWxsIGFzIGFueSBvYmplY3RzIHRoYXQgcmVmZXJlbmNlIGl0IHJl Z2FyZGxlc3Mgb2Ygd2hlcmUgdGhleSBhcmUgZGlzcGxheWVkICZuYnNwOzxicj48YnI+PGJyPiAm bmJzcDsmbmJzcDsmbmJzcDsmbHQ7YSBocmVmPSN1c2VyIGNsYXNzPZR1c2VyWFggZW5hYmxpbmeU Jmd0O2xpbmsmbHQ7L2EmZ3Q7IDxicj4gJm5ic3A7Jm5ic3A7Jm5ic3A7Jmx0O2RpdiBpZD0jlHVz ZXJYWJQgY2xhc3M9lHVzZXJYWCBlbmFibGluZ5QgJmd0O1VzZXJYWCBWaWV3Jmx0Oy9kaXYmZ3Q7 Ljxicj48YnI+V2Ugd2F0Y2ggdGhlIHJlZmVyZW5jZWQgdmlld3MgY2xhc3NlcyBhbmQgbWltaWMg dGhlbSBvbiBhbGwgcmVmZXJlbmNpbmcgbGlua3MgYWx3YXlzIGFzIHRoZXkgY2FuIGNvbnRhaW4g b3IgYmUgdXBkYXRlZCB3aXRoIG5ldyBldmVudCBzdHlsZXMgKGZvciBleGFtcGxlOiBmYWlsZWQs IHdhcm5pbmcsIHVwZ3JhZGVkLCBhZG1pbi1vbmx5IGV0Yyk8YnI+PGJyPioqKioqKjxicj48YnI+ IyMgU2VydmVyIHN0YXR1cyBldmVudHMgKmludmVzdGlnYXRpbmcqPGJyPjxicj5SaWdodCBub3cg d2UgY2FuIHVzZSBhamF4IGNhbGxzIHRvIHVwZGF0ZSBlYWNoIHZpZXcgYnV0IGluIGZ1dHVyZSBp dCB3b3VsZCBtYWtlIHNlbnNlIHRvIHVzZSBldmVudFNvdXJjZSBmb3IgbW9yZSBhZHZhbmNlZCBt b25pdG9yaW5nOiBbZXZlbnRTb3VyY2U6IHNlcnZlciBzZW50IGV2ZW50c10oPGEgaHJlZj0iaHR0 cDovL2h0bWw1ZG9jdG9yLmNvbS9zZXJ2ZXItc2VudC1ldmVudHMvIj5odHRwOi8vaHRtbDVkb2N0 b3IuY29tL3NlcnZlci1zZW50LWV2ZW50cy88L2E+KSA8YnI+PGJyPioqKioqKjxicj48YnI+IyMg Q2xpZW50IHZlcmlmaWNhdGlvbiAvIGZhc3QgZmVlZGJhY2s8YnI+PGJyPkludGVyYWN0aXZlIGFz c3VyYW5jZSB0aGF0IGFuIGFjdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQgd2l0aG91dCB0aGUgdmVy aWZpY2F0aW9uIHRoYXQgdGhlIHNlcnZlciBoYXMgcGVyZm9ybWVkIHRoZSBhY3Rpb24uPGJyPjxi cj5Gb3IgZXhhbXBsZSBhIHVzZXIgY2xpY2tzIHRoZSBlbmFibGUgYnV0dG9uLi4gd2UgaW1tZWRp YXRlbHkgYXBwbHkgk2VuYWJsaW5nlCBzdGF0dXMgdG8gdGhlIGJ1dHRvbiBidXQgd2FpdCBmb3Ig dGhlIHNlcnZlciB0byByZXR1cm4gd2l0aCB0aGUgk2VuYWJsZWSUIGNvbmZpcm1hdGlvbi4uLjxi cj48YnI+IyMjIEhvdyBpdCB3b3Jrczxicj48YnI+PGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSI+KipB c3N1bXB0aW9uKiogaW50ZXJtaXR0ZW50IHN0YXRlcyBsaWtlIHZlcmlmeWluZywgZW5hYmxpbmcg YW5kIGRpc2FibGluZyBzdGF0ZXMgYXJlIHNhZmUgZm9yIGNsaWVudCBzaWRlIHZhbGlkYXRpb24u PGJyPjwvYmxvY2txdW90ZT48YnI+PGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSI+VGhleSBjb25maXJt IGFuIGFjdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQgYnV0IG5vdCBhcHBsaWVkLjxicj48L2Jsb2Nr cXVvdGU+PGJyPkFzIGEgcnVsZSwgYWxsIGVsZW1lbnRzIGFyZSBnaXZlbiB0aGUgc3RhdHVzIG9m IHRoZSBvYmplY3RzIHRoZXkgcmVwcmVzZW50IGFzIHdlbGwgYXMgY2xhc3NlZCB3aXRoIHRoZSBv YmplY3QgSUQuLiAmbmJzcDtlLmcuOiBhbGwgYnV0dG9ucyB3aXRoIGBjbGFzcz0icHJvdmlkZXJp ZDEyNDUxLSoiYCBnZXQgdGhlIGFkZGl0aW9uYWwgY2xhc3Mgb2YgdGhlaXIgaW50ZXJtaXR0ZW50 IHN0YXRlIGBgImVuYWJsaW5nL2Rpc2FibGluZy92ZXJpZnlpbmcvd2hhdGV2ZXIiYGAgJm5ic3A7 V2hlbiBhIGZ1bmN0aW9uYWwgb2JqZWN0IHJlbGF0ZWQgdG8gdGhlbSBoYXMgYmVlbiBhY3Rpb25l ZC48YnI+PGJyPiAxLiBPbiB0aGUgY2xpZW50IGphdmFzY3JpcHQgc2lkZSwgd2Ugc2V0IHRoZSBh Y3Rpb25pbmcgY2xhc3NuYW1lIHRvIGFsbCBlbGVtZW50cyB3aXRoIHRoZSBzYW1lIG9iamVjdCBv YmplY3RpZCBjbGFzcy48YnI+PGJyPiAyLiBPbmNlIHRoZSBhY3Rpb24gaGFzIGJlZW4gZG9uZSBh biBhamF4IGNhbGwgY29uZmlybSB0aGUgY2hhbmdlIGFuZCByZWZyZXNoZXMgdGhlIGNsYXNzIHRv ICJlbmFibGVkL2Rpc2FibGVkL2RvbmUvd2hhdGV2ZXIiIGFuZCByZW1vdmVzIHRoZSBpbnRlcm1l ZGlhcnkgc3RhdGU8YnI+PGJyPioqKioqKjxicj48YnI+IyMgSW1wb3J0YW50IGFjdGlvbiBjZXJ0 aWZpY2F0aW9uPGJyPjxicj5bSlMgRmlkZGxlIGRlbW9dKDxhIGhyZWY9Imh0dHA6Ly9qc2ZpZGRs ZS5uZXQvYW5keWZpdHovbXZkU1QvIj5odHRwOi8vanNmaWRkbGUubmV0L2FuZHlmaXR6L212ZFNU LzwvYT4pPGJyPjxicj48YnI+UmVxdWlyaW5nIHRoZSB1c2VyIHRvIGNlcnRpZnkgdGhhdCB0aGV5 IHVuZGVyc3RhbmQgdGhlIGFjdGlvbiBiZWZvcmUgYWxsb3dpbmcgaXQgdG8gdGFrZSBwbGFjZS48 YnI+Zm9yIGV4YW1wbGU6ICZuYnNwOzxicj48YnI+PGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSI+k0Rv IHlvdSB1bmRlcnN0YW5kIHdoYXQgeW91IGFyZSBkb2luZz9beWVzXSBva2F5LCBoZXJlknMgdGhl IGJ1dHRvbiBbY2xpY2tdlDxicj48L2Jsb2NrcXVvdGU+PGJyPiMjI2V4cGxhaW5lZDxicj48YnI+ PGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSI+RW5hYmxpbmcgYW5kIGRpc2FibGluZyBwcm92aWRlcnMs ICZuYnNwO2RlbGV0aW5nIHVzZXJzIGV0YyA8YnI+PC9ibG9ja3F1b3RlPjxicj5XZSB3aWxsIHVz ZSB0aHJlZSBtZXRob2RzIHRvIHZlcmlmeSB0aGF0IGEgdXNlciBoYXMgYWNjZXB0ZWQgdGhlIHNl dmVyaXR5IG9mIHRoZSB0YXNrIHRoZXkgYXJlIGFib3V0IHRvIHBlcmZvcm06PGJyPjxicj4gMS4g Q1NTIHBoeXNpY2FsIG9iZnVzY2F0aW9uLiA8YnI+V2hlcmUgdGhlIGNvbmZpcm1hdGlvbiB0b2dn bGUgc2l0cyBwaHlzaWNhbGx5IG9uIHRvcCBvZiB0aGUgYWN0aW9uIHRvZ2dsZSBzbyB0aGF0IGFu IGFjdGlvbiBjYW4gbm90IGJlIGNsaWNrZWQgd2l0aG91dCBjbGlja2luZyB0aGUgY29uZmlybWF0 aW9uIHRvZ2dsZSBmaXJzdC4gJm5ic3A7dGhpcyBoZWxwcyBzaW1wbGlmeSB0aGUgY29tcG9uZW50 IHRvIG9uZSBwaHlzaWNhbCBzcGFjZSBwYXJ0IG9mIHRoZSBzYW1lIGNvbnNpZGVyYXRpb24gc2V0 Ljxicj48YnI+IDIuIGphdmFzY3JpcHQgdmFsaWRhdGlvbi4gJm5ic3A7PGJyPlRoZSBhY3Rpb24g YnV0dG9uIGJlbmVhdGggaXMgZGlzYWJsZWQgdW50aWwgdGhlIGNvbmZpcm1hdGlvbiB0b2dnbGUg aGFzIGJlZW4gY2xpY2tlZDxicj4gMy4gZmluYWwgc2VydmVyIHZlcmlmaWNhdGlvbi4gJm5ic3A7 PGJyPnRoZSBzdWJtaXR0ZWQgYWN0aW9uIGlzIG5vdCBhY2NlcHRlZCBieSB0aGUgc3lzdGVtIHVu bGVzcyB0aGUgcG9zdCBjb250YWlucyBib3RoIHRoZSB2ZXJpZmljYXRpb24gZW5hYmxlZCBhbmQg dGhlIGFjdGlvbi4gdGhlIHNlcnZlciB0aGVuIHB1c2hlcyB0aGUgdXBkYXRlPGJyPjxicj48YnI+ KioqKioqPGJyPjxicj4jI0dsb2JhbCBzdGF0dXMgYW5kIHN5c3RlbSBub3RpZmljYXRpb24gc3Rh Y2suIDxicj48YnI+SW1wb3J0YW50IGluZm9ybWF0aW9uIGFib3V0IHRoZSBlbnRpcmUgc3lzdGVt IG9yIGEgY3VycmVudCBwcm9jZXNzLCBkaXNwbGF5ZWQgcHJvbWluZW50bHkuPGJyPiMjI2V4cGxh aW5lZDxicj48YnI+VXNpbmcgdGhlIHJlZmVyZW5jZWQgY29udGVudCBoZWF2aWx5LCB3ZSB0aHJv dyBzeXN0ZW0sIHdhcm5pbmcgYW5kIG5vdGlmaWNhdGlvbiBjb250ZW50IHRvIHRoZSB0b3Agb2Yg dGhlIHBhZ2UgaW4gYSBjb2xsYXBzaW5nLCBncm93bC1zdHlsZSBub3RpZmljYXRpb24gc3lzdGVt lDxicj48YnI+ICZuYnNwOyZuYnNwOyZuYnNwOyZsdDtkaXYgaWQ9Im5vdGlmaWNhdGlvbnMiJmd0 Ozxicj4gJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jmx0O2gxJmd0 O1N5c3RlbSBNZXNzYWdlcyZsdDsvaDEmZ3Q7PGJyPjxicj4gJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jmx0O3AgY2xhc3M9lHN5c3RlbZQmZ3Q7eW91IHNob3VsZCB0 byBpbnN0YWxsIGFlb2x1cy1hbGwgdG8gcHJvcGVybHkgdXNlIGNvbmR1Y3RvciZsdDsvcCZndDs8 YnI+PGJyPiAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbHQ7cCBj bGFzcz2Uc3RhdHVzIHByb3ZpZGVyMTIzIGJ1aWxklCZndDs8YnI+ICZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZsdDthIDxicj4gJm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7aHJlZj2UcHJvdmlkZXIxMjMtYnVpbGQtc3RhdHVzlCA8YnI+ICZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw O2NsYXNzPZRyZWZsaW5rIDUwlCZndDs8YnI+ICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO2J1aWxkaW5nIHByb3ZpZGVyMTIz ICZsdDtzcGFuJmd0OzUwJSBDb21wbGV0ZSZsdDsvc3BhbiZndDs8YnI+ICZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZsdDsvYSZndDs8YnI+ICZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZsdDsvcCZndDs8YnI+PGJy PiAmbmJzcDsmbmJzcDsmbmJzcDsmbHQ7L2RpdiZndDs8YnI+PGJyPjxicj4qKioqKio8YnI+PGJy PiMjIFByaW50YWJsZSBtYW5pZmVzdDxicj48YnI+QmVjYXVzZSBvdXIgY29udGVudCBpcyBub3Qg cmVwbGljYXRlZCwgYW5kIGFsbCBlbmFibGVkIHZpZXdzIGFyZSBpbmNsdWRlZCBpbiB0aGUgRE9N OyA8YnI+b3VyIGFwcCBjYW4gYWN0dWFsbHkgcHJpbnQgYXMgaWYgaXQgd2VyZSBhIG1hbmlmZXN0 IGZvciB0aGUgYXV0aGVudGljYXRlZCB1c2VyLjxicj48YnI+V2UgZ2V0IHRoaXMgZmVhdHVyZSBm b3IgZnJlZSBieSBwcm94eSBvZiBvdXIgbWV0aG9kIGZvciByZWZlcmVuY2luZyB2aWV3cyBhbmQg Y29udGVudC48YnI+PGJyPkhhdmluZyB0aGUgYWJpbGl0eSB0byBwcm9kdWNlIGEgaGFyZCBjb3B5 IGluZnJhc3RydWN0dXJlIHJlcG9ydCBtYXkgYmUgYSBnaW1taWNrLCBidXQgaXQncyBhbiBlYXN5 IHdheSB0byBzaG93IGhvdyBjb25kdWN0b3IgY2FuIGhlbHAgcmVzcG9uZCBhbiBJVCBhdWRpdCBz aXR1YXRpb24uPGJyPjxicj4jIyMgZXhhbXBsZSBwcmludCBzdHlsZXNoZWV0IGNoYW5nZXM8YnI+ PGJyPiAmbmJzcDsmbmJzcDsmbmJzcDtAbWVkaWEgcHJpbnQgezxicj48YnI+ICZuYnNwOyZuYnNw OyZuYnNwO2E6YWZ0ZXIgezxicj4gJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Y29udGVudDogIiAoImF0dHIoaHJlZikiKSAiO308YnI+PGJyPiAmbmJzcDsmbmJzcDsm bmJzcDtkaXY6YmVmb3Jlezxicj4gJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Y29udGVudDogIiAoImF0dHIoaWQpIikgIjt9fTxicj48YnI+ICZuYnNwOyZuYnNwOyZu YnNwO308YnI+PGJyPlRoaXMgd2lsbCBwcmVzZXJ2ZSBhbGwgcmVmZXJlbmNlcyBhbmQgbGlua3Mg dGhyb3VnaG91dCB0aGUgVUkuPGJyPjxicj5BbHNvLCB3ZSBjYW4gbWFudWFsbHkgZGVmaW5lIHNl Y3Rpb25zIHRvIGJlIHByaW50ZWQuPGJyPjxicj4gJm5ic3A7Jm5ic3A7Jm5ic3A7QG1lZGlhIHBy aW50IHs8YnI+PGJyPiAmbmJzcDsmbmJzcDsmbmJzcDtkaXZ7ZGlzcGxheTpub25lfTxicj48YnI+ ICZuYnNwOyZuYnNwOyZuYnNwOyNwcm92aWRlcnMsICNpbnN0YW5jZXMsICN1c2VycywgI2dsb2Jh bC10aXBzIHtkaXNwbGF5OmJsb2NrICFpbXBvcnRhbnR9PGJyPjxicj4gJm5ic3A7Jm5ic3A7fTxi cj48YnI+V2hpY2ggbWVhbnMgb25seSBzZWN0aW9ucyB3ZSBkZXNpcmUgdG8gYmUgaW5jbHVkZWQg aW4gdGhlIG1hbmlmZXN0IGdldCBwcmludGVkPGJyPjxicj5hbHNvIDxicj48YnI+ICZuYnNwOyZu YnNwOyZuYnNwO0BtZWRpYSBwcmludCB7PGJyPjxicj4gJm5ic3A7Jm5ic3A7Jm5ic3A7LnRhYnM6 YmVmb3Jlezxicj4gJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7cGFnZS1icmVh ay1iZWZvcmU6IGFsd2F5czs8YnI+ICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw O2NvbnRlbnQ6IlRoaXMgc2VjdGlvbiBjb250YWlucyB0aGUgZm9sbG93aW5nOiI7PGJyPiAmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsudGFicyBsaSBhOmFmdGVye2NvbnRlbnQ6IiJ9PGJyPiAmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsudGFicyB7IGZvbnQtc2l6ZTogMmVtO3BhZ2UtYnJlYWstYWZ0 ZXI6IGFsd2F5czt9PGJyPiAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsudGFicyBsaXtkaXNwbGF5 Omxpc3R9PGJyPiAmbmJzcDsmbmJzcDsmbmJzcDt9PGJyPjxicj5XaGljaCB3aWxsIGNvbnZlcnQg b3VyIHRhYnMgaW50byB3aG9sZSBwYWdlIHNlY3Rpb24gc3VtbWFyaWVzLjxicj48YnI+PGJsb2Nr cXVvdGUgdHlwZT0iY2l0ZSI+cmVtZW1iZXIsIHRoaXMgZmVhdHVyZSBpcyBmcmVlIGJlY2F1c2Ug d2UgYXJlIGRlc2lnbmluZyBjb25kdWN0b3IgdG8gZ3JhY2VmdWxseSBkZWdyYWRlLiBWZXJ5IGxp dHRsZSBlZmZvcnQgZ29lcyBpbnRvIHByZXNlcnZpbmcgdGhpcyBmZWF0dXJlIHNvIGxvbmcgYXMg b3VyIHN0YW5kYXJkcyBhcmUgbWFpbnRhaW5lZC48YnI+PC9ibG9ja3F1b3RlPjxicj48YnI+IyBF eGlzdGluZyBjb25kdWN0b3IgcGFyYWRpZ21zPGJyPjxicj5UaGVzZSBjaGFuZ2VzIGRvbid0IGNy ZWF0ZSBhbnkgY2hhbmdlcyB0byB0ZXJtaW5vbG9neSwgb3IgaGF2ZSBtdWNoIGltcGFjdCBmb3Ig cHJlLWV4aXN0aW5nIHZpZXdzIGZvciBjb21wb25lbnRzIGFscmVhZHkgYnVpbHQgaW50byBjb25k dWN0b3IuICZuYnNwO0l0IGlzIGxpa2VseSB0aGF0IHRoZSBtYWpvcml0eSBvZiB3aGF0IGhhcyBh bHJlYWR5IGJlZW4gZG9uZSB3aWxsIGJlIHByZXNlcnZlZCBhbmQgb25seSB1bmRlcmdvIG1pbm9y IGNoYW5nZXMgdG8gdGhlIEhBTUwvU0FTUyBzbyB0aGF0IGZlYXR1cmVzIG1heSBiZSBpbnRlZ3Jh dGVkIGludG8gdGhlIGdsb2JhbCB2aWV3Ljxicj48YnI+VGhpcyBoYXMgYmVlbiB3cml0dGVuIHB1 cmVseSB0byBzdGFydCBkaXNjdXNzaW9uIG9uIGhvdyB3ZSBldm9sdmUgQ29uZHVjdG9yIGdvaW5n IGZvcndhcmQgYW5kIEknZCBsb3ZlIHRvIGhlYXIgeW91ciB0aG91Z2h0czogWzxhIGhyZWY9Im1h aWx0bzphbmR5LmZpdHpzaW1vbkByZWRoYXQuY29tIj5hbmR5LmZpdHpzaW1vbkByZWRoYXQuY29t PC9hPiBdKDxhIGhyZWY9Im1haWx0bzphbmR5LmZpdHpzaW1vbkByZWRoYXQuY29tIj5tYWlsdG86 YW5keS5maXR6c2ltb25AcmVkaGF0LmNvbTwvYT4pPGJyPjxzcGFuPiZsdDt1aS1yZWFkbWUuaHRt bCZndDs8L3NwYW4+PC9kaXY+PC9ibG9ja3F1b3RlPjwvZGl2Pjxicj48L2Rpdj48L2JvZHk+PC9o dG1sPg== --===============1968945227974555115==--