From lincolnbaxter at gmail.com Sun Aug 16 04:45:24 2020 Content-Type: multipart/mixed; boundary="===============6417363846580963527==" MIME-Version: 1.0 From: Lincoln Baxter, III To: jsr-314-open-mirror at lists.jboss.org Subject: Re: [jsr-314-open] binding vs. ui:repeat Date: Wed, 09 Sep 2009 00:33:13 -0400 Message-ID: <1252470793.22703.41.camel@quadshark> In-Reply-To: 4AA68D5F.60809@sun.com --===============6417363846580963527== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable One more issue I'd like to bring up: it appears that when using the value of the object provided has not yet been updated in the model, hence, the value is the old value, not the new value. When using on the button submitting the values, the new value is populated into the model instead... which is the behavior I would expect. Pardon the probably obvious question... Is there an contract with valueChangeListeners that states they fire before model updates? I see in the spec that it fires: "when a new local value has been created, and has passed all validations," but nothing about if the model has been updated or not. --Lincoln On Tue, 2009-09-08 at 09:59 -0700, Ryan Lubke wrote: > On 9/7/09 6:06 PM, Andy Schwartz wrote: > > Thanks Lincoln. I haven't had time to debug this, but I have a theory = > > about what might be happening. In your sample: > > > >> >> rendered=3D"#{!cc.attrs.disabled}"> > >> * >> action=3D"#{taskController.saveTaskAjax(cc.attrs.story, = > >> cc.attrs.task)}" /> * > >> > > > > We expect "cc" to resolve to the containing composite component (ie. = > > to the component). I wouldn't be surprised if = > > what is actually happening is that "cc" is being resolved to the = > > composite component instead. > Yep, that's what is happening. > > One reason why I suspect this might be happening is that I know that = > > Ryan has investigated/resolved similar problems not too long ago. > The problem we resolved was the passing of #{cc.attrs} attributes = > between nested composite components. > For this case, the spec recommends using cc.parent.attrs.story and = > cc.parent.attrs.task, where parent resolves > to the nearest composite component parent of the current composite = > component. > > Another reason why I am suspicious about this is because we have faced = > > similar issues in our own (ADF Faces) declarative component solution. = > > This stuff can get tricky. :-) > > > > Hey Ryan - > > > > Does this problem look familiar? Any thoughts on this? > > > > Andy > > > > Lincoln Baxter, III wrote: > >> Hey Andy, here you go: > >> > >> In the mean time I'm going to sign up for the dev lists. > >> > >> ---------------------------------------------------------------------- > >> Using: > >> >> action=3D"*#{taskController.saveTaskAjax(cc.attrs.story, = > >> cc.attrs.task)}*" /> > >> > >> *#{taskController.saveTaskAjax(cc.attrs.story, cc.attrs.task)}* = =3D > >> null values passed to method > >> *#{taskController.saveTaskAjax(currentStoryBean.story, task)}* =3D > >> correct values resolved, assuming currentStoryBean.story and task > >> are both in the EL/page scope somewhere. > >> > >> > >> ---------------------------------------------------------------------- > >> *CC Impl:* > >> > >> > >> >> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> > >> >> xmlns:h=3D"http://java.sun.com/jsf/html" > >> xmlns:f=3D"http://java.sun.com/jsf/core" > >> xmlns:a=3D"http://java.sun.com/jsf/composite/ajax" > >> xmlns:cc=3D"http://java.sun.com/jsf/composite"> > >> > >> > >> > >> >> default=3D"false" /> > >> > >> > >> > >> > >> > >> >> #{cc.attrs.styleClass} taskBlock_#{cc.attrs.task.status}" = > >> style=3D"#{cc.attrs.style}"> > >> > >>
> >> >> rendered=3D"#{cc.attrs.disabled}"/> > >> >> rendered=3D"#{!cc.attrs.disabled}"> > >> * >> action=3D"#{taskController.saveTaskAjax(cc.attrs.story, = > >> cc.attrs.task)}" /> * > >> > >>
> >>
> >> > >> > >> > >> ---------------------------------------------------------------------- > >> *consuming page code:* <-- this is where task is defined in the = > >> UI:Repeat, so it is in scope > >> > >> >> PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" > >> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> > >> >> xmlns:c=3D"http://java.sun.com/jsp/jstl/core" > >> xmlns:f=3D"http://java.sun.com/jsf/core" > >> xmlns:h=3D"http://java.sun.com/jsf/html" > >> xmlns:socialpm=3D"http://java.sun.com/jsf/composite/socialpm" > >> xmlns:pretty=3D"http://ocpsoft.com/prettyfaces" > >> xmlns:ui=3D"http://java.sun.com/jsf/facelets" xml:lang=3D"en" lang=3D"= en"> > >> > >> > >> > >> > >>
This story has no tasks. That could be a problem = > >> later...
> >>
> >> > >> > >> >> members=3D"#{currentProjectBean.project.activeMembers}" > >> disabled=3D"#{!authorizationBean.isMember or = > >> !currentStoryBean.story.open}" > >> deletable=3D"true" styleClass=3D"m5t" refreshOnSave=3D"false" /> > >> > >>
> >>
> >> > >> > >> > >> > >> > >> On Sat, 2009-09-05 at 15:23 -0400, Andy Schwartz wrote: > >>> Hey Lincoln - > >>> > >>> Lincoln Baxter, III wrote: > >>> > First, please let me know if there is a better place to ask JSF = > >>> Dev > related questions. > >>> > > >>> > >>> I suppose the Mojarra dev list might be the right place for = > >>> implementation questions: > >>> > >>> https://javaserverfaces.dev.java.net/mailinglists.html > >>> > >>> Though personally I am fine with you asking here. :-) > >>> > >>> Could you send along your composite component implementation (and = > >>> perhaps a snippet from the consuming page)? Just want to make sure = > >>> I understand the use case. > >>> > >>> Andy > >>> > >>> > >> -- = > >> *Lincoln Baxter, III* > >> Co-Founder of OcpSoft > >> Author of PrettyFaces URL Rewriting = > >> for JSF > >> > >> > > > = -- Lincoln Baxter, III Co-Founder of OcpSoft Author of PrettyFaces URL Rewriting for JSF --===============6417363846580963527== Content-Type: text/html MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.html" PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUUkFOU0lUSU9OQUwv L0VOIj4KPEhUTUw+CjxIRUFEPgogIDxNRVRBIEhUVFAtRVFVSVY9IkNvbnRlbnQtVHlwZSIgQ09O VEVOVD0idGV4dC9odG1sOyBDSEFSU0VUPVVURi04Ij4KICA8TUVUQSBOQU1FPSJHRU5FUkFUT1Ii IENPTlRFTlQ9Ikd0a0hUTUwvMy4yNi4wIj4KPC9IRUFEPgo8Qk9EWT4KT25lIG1vcmUgaXNzdWUg SSdkIGxpa2UgdG8gYnJpbmcgdXA6IGl0IGFwcGVhcnMgdGhhdCB3aGVuIHVzaW5nICZsdDtmOnZh bHVlQ2hhbmdlTGlzdGVuZXIgYWN0aW9uPSZxdW90Oy4uLiZxdW90OyAvJmd0OyB0aGUgdmFsdWUg b2YgdGhlIG9iamVjdCBwcm92aWRlZCBoYXMgbm90IHlldCBiZWVuIHVwZGF0ZWQgaW4gdGhlIG1v ZGVsLCBoZW5jZSwgdGhlIHZhbHVlIGlzIHRoZSBvbGQgdmFsdWUsIG5vdCB0aGUgbmV3IHZhbHVl LjxCUj4KPEJSPgpXaGVuIHVzaW5nICZsdDtmOmFjdGlvbkxpc3RlbmVyJmd0OyBvbiB0aGUgYnV0 dG9uIHN1Ym1pdHRpbmcgdGhlIHZhbHVlcywgdGhlIG5ldyB2YWx1ZSBpcyBwb3B1bGF0ZWQgaW50 byB0aGUgbW9kZWwgaW5zdGVhZC4uLiB3aGljaCBpcyB0aGUgYmVoYXZpb3IgSSB3b3VsZCBleHBl Y3QuPEJSPgo8QlI+ClBhcmRvbiB0aGUgcHJvYmFibHkgb2J2aW91cyBxdWVzdGlvbi4uLjxCUj4K PEJSPgpJcyB0aGVyZSBhbiBjb250cmFjdCB3aXRoIHZhbHVlQ2hhbmdlTGlzdGVuZXJzIHRoYXQg c3RhdGVzIHRoZXkgZmlyZSBiZWZvcmUgbW9kZWwgdXBkYXRlcz8gSSBzZWUgaW4gdGhlIHNwZWMg dGhhdCBpdCBmaXJlczogJnF1b3Q7d2hlbiBhIG5ldyBsb2NhbCB2YWx1ZSBoYXMgYmVlbiBjcmVh dGVkLCBhbmQgaGFzIHBhc3NlZCBhbGwgdmFsaWRhdGlvbnMsJnF1b3Q7IGJ1dCBub3RoaW5nIGFi b3V0IGlmIHRoZSBtb2RlbCBoYXMgYmVlbiB1cGRhdGVkIG9yIG5vdC48QlI+CjxCUj4KLS1MaW5j b2xuPEJSPgo8QlI+Ck9uIFR1ZSwgMjAwOS0wOS0wOCBhdCAwOTo1OSAtMDcwMCwgUnlhbiBMdWJr ZSB3cm90ZToKPEJMT0NLUVVPVEUgVFlQRT1DSVRFPgo8UFJFPgpPbiA5LzcvMDkgNjowNiBQTSwg QW5keSBTY2h3YXJ0eiB3cm90ZToKJmd0OyBUaGFua3MgTGluY29sbi4gIEkgaGF2ZW4ndCBoYWQg dGltZSB0byBkZWJ1ZyB0aGlzLCBidXQgSSBoYXZlIGEgdGhlb3J5IAomZ3Q7IGFib3V0IHdoYXQg bWlnaHQgYmUgaGFwcGVuaW5nLiAgSW4geW91ciBzYW1wbGU6CiZndDsKJmd0OyZndDsgJmx0O2E6 ZWRpdFRleHQgdmFsdWU9JnF1b3Q7I3tjYy5hdHRycy50YXNrLnRleHR9JnF1b3Q7IAomZ3Q7Jmd0 OyByZW5kZXJlZD0mcXVvdDsjeyFjYy5hdHRycy5kaXNhYmxlZH0mcXVvdDsmZ3Q7CiZndDsmZ3Q7 ICombHQ7ZjphY3Rpb25MaXN0ZW5lciBmb3I9JnF1b3Q7c3VibWl0JnF1b3Q7IAomZ3Q7Jmd0OyBh Y3Rpb249JnF1b3Q7I3t0YXNrQ29udHJvbGxlci5zYXZlVGFza0FqYXgoY2MuYXR0cnMuc3Rvcnks IAomZ3Q7Jmd0OyBjYy5hdHRycy50YXNrKX0mcXVvdDsgLyZndDsgKgomZ3Q7Jmd0OyAmbHQ7L2E6 ZWRpdFRleHQmZ3Q7CiZndDsKJmd0OyBXZSBleHBlY3QgJnF1b3Q7Y2MmcXVvdDsgdG8gcmVzb2x2 ZSB0byB0aGUgY29udGFpbmluZyBjb21wb3NpdGUgY29tcG9uZW50IChpZS4gCiZndDsgdG8gdGhl ICZsdDtzb2NpYWxwbTp0YXNrQmxvY2smZ3Q7IGNvbXBvbmVudCkuICBJIHdvdWxkbid0IGJlIHN1 cnByaXNlZCBpZiAKJmd0OyB3aGF0IGlzIGFjdHVhbGx5IGhhcHBlbmluZyBpcyB0aGF0ICZxdW90 O2NjJnF1b3Q7IGlzICBiZWluZyByZXNvbHZlZCB0byB0aGUgCiZndDsgJmx0O2E6ZWRpdFRleHQm Z3Q7IGNvbXBvc2l0ZSBjb21wb25lbnQgaW5zdGVhZC4KWWVwLCB0aGF0J3Mgd2hhdCBpcyBoYXBw ZW5pbmcuCiZndDsgT25lIHJlYXNvbiB3aHkgSSBzdXNwZWN0IHRoaXMgbWlnaHQgYmUgaGFwcGVu aW5nIGlzIHRoYXQgSSBrbm93IHRoYXQgCiZndDsgUnlhbiBoYXMgaW52ZXN0aWdhdGVkL3Jlc29s dmVkIHNpbWlsYXIgcHJvYmxlbXMgbm90IHRvbyBsb25nIGFnby4KVGhlIHByb2JsZW0gd2UgcmVz b2x2ZWQgd2FzIHRoZSBwYXNzaW5nIG9mICN7Y2MuYXR0cnN9IGF0dHJpYnV0ZXMgCmJldHdlZW4g bmVzdGVkIGNvbXBvc2l0ZSBjb21wb25lbnRzLgpGb3IgdGhpcyBjYXNlLCB0aGUgc3BlYyByZWNv bW1lbmRzIHVzaW5nIGNjLnBhcmVudC5hdHRycy5zdG9yeSBhbmQgCmNjLnBhcmVudC5hdHRycy50 YXNrLCB3aGVyZSBwYXJlbnQgcmVzb2x2ZXMKdG8gdGhlIG5lYXJlc3QgY29tcG9zaXRlIGNvbXBv bmVudCBwYXJlbnQgb2YgdGhlIGN1cnJlbnQgY29tcG9zaXRlIApjb21wb25lbnQuCiZndDsgQW5v dGhlciByZWFzb24gd2h5IEkgYW0gc3VzcGljaW91cyBhYm91dCB0aGlzIGlzIGJlY2F1c2Ugd2Ug aGF2ZSBmYWNlZCAKJmd0OyBzaW1pbGFyIGlzc3VlcyBpbiBvdXIgb3duIChBREYgRmFjZXMpIGRl Y2xhcmF0aXZlIGNvbXBvbmVudCBzb2x1dGlvbi4gIAomZ3Q7IFRoaXMgc3R1ZmYgY2FuIGdldCB0 cmlja3kuIDotKQomZ3Q7CiZndDsgSGV5IFJ5YW4gLQomZ3Q7CiZndDsgRG9lcyB0aGlzIHByb2Js ZW0gbG9vayBmYW1pbGlhcj8gIEFueSB0aG91Z2h0cyBvbiB0aGlzPwomZ3Q7CiZndDsgQW5keQom Z3Q7CiZndDsgTGluY29sbiBCYXh0ZXIsIElJSSB3cm90ZToKJmd0OyZndDsgSGV5IEFuZHksIGhl cmUgeW91IGdvOgomZ3Q7Jmd0OwomZ3Q7Jmd0OyBJbiB0aGUgbWVhbiB0aW1lIEknbSBnb2luZyB0 byBzaWduIHVwIGZvciB0aGUgZGV2IGxpc3RzLgomZ3Q7Jmd0OwomZ3Q7Jmd0OyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCiZndDsmZ3Q7IFVzaW5nOgomZ3Q7Jmd0OyAmbHQ7ZjphY3Rpb25MaXN0ZW5lciBmb3I9JnF1 b3Q7c3VibWl0JnF1b3Q7IAomZ3Q7Jmd0OyBhY3Rpb249JnF1b3Q7KiN7dGFza0NvbnRyb2xsZXIu c2F2ZVRhc2tBamF4KGNjLmF0dHJzLnN0b3J5LCAKJmd0OyZndDsgY2MuYXR0cnMudGFzayl9KiZx dW90OyAvJmd0OwomZ3Q7Jmd0OwomZ3Q7Jmd0OyAgICAgKiN7dGFza0NvbnRyb2xsZXIuc2F2ZVRh c2tBamF4KGNjLmF0dHJzLnN0b3J5LCBjYy5hdHRycy50YXNrKX0qID0KJmd0OyZndDsgICAgIG51 bGwgdmFsdWVzIHBhc3NlZCB0byBtZXRob2QKJmd0OyZndDsgICAgICoje3Rhc2tDb250cm9sbGVy LnNhdmVUYXNrQWpheChjdXJyZW50U3RvcnlCZWFuLnN0b3J5LCB0YXNrKX0qID0KJmd0OyZndDsg ICAgIGNvcnJlY3QgdmFsdWVzIHJlc29sdmVkLCBhc3N1bWluZyBjdXJyZW50U3RvcnlCZWFuLnN0 b3J5IGFuZCB0YXNrCiZndDsmZ3Q7ICAgICBhcmUgYm90aCBpbiB0aGUgRUwvcGFnZSBzY29wZSBz b21ld2hlcmUuCiZndDsmZ3Q7CiZndDsmZ3Q7CiZndDsmZ3Q7IC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJmd0OyZn dDsgKkNDIEltcGw6KgomZ3Q7Jmd0OwomZ3Q7Jmd0OwomZ3Q7Jmd0OyAmbHQ7IURPQ1RZUEUgaHRt bCBQVUJMSUMgJnF1b3Q7LS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4mcXVv dDsKJmd0OyZndDsgICAgICAgICAmcXVvdDs8QSBIUkVGPSJodHRwOi8vd3d3LnczLm9yZy9UUi94 aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj5odHRwOi8vd3d3LnczLm9yZy9UUi94 aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkPC9BPiZxdW90OyZndDsKJmd0OyZndDsg Jmx0O2h0bWwgeG1sbnM9JnF1b3Q7PEEgSFJFRj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRt bCI+aHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbDwvQT4mcXVvdDsKJmd0OyZndDsgeG1sbnM6 aD0mcXVvdDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2pzZi9odG1sIj5odHRwOi8vamF2 YS5zdW4uY29tL2pzZi9odG1sPC9BPiZxdW90OwomZ3Q7Jmd0OyB4bWxuczpmPSZxdW90OzxBIEhS RUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vanNmL2NvcmUiPmh0dHA6Ly9qYXZhLnN1bi5jb20vanNm L2NvcmU8L0E+JnF1b3Q7CiZndDsmZ3Q7IHhtbG5zOmE9JnF1b3Q7PEEgSFJFRj0iaHR0cDovL2ph dmEuc3VuLmNvbS9qc2YvY29tcG9zaXRlL2FqYXgiPmh0dHA6Ly9qYXZhLnN1bi5jb20vanNmL2Nv bXBvc2l0ZS9hamF4PC9BPiZxdW90OwomZ3Q7Jmd0OyB4bWxuczpjYz0mcXVvdDs8QSBIUkVGPSJo dHRwOi8vamF2YS5zdW4uY29tL2pzZi9jb21wb3NpdGUiPmh0dHA6Ly9qYXZhLnN1bi5jb20vanNm L2NvbXBvc2l0ZTwvQT4mcXVvdDsmZ3Q7CiZndDsmZ3Q7ICZsdDtjYzppbnRlcmZhY2UmZ3Q7CiZn dDsmZ3Q7ICZsdDtjYzphdHRyaWJ1dGUgbmFtZT0mcXVvdDtzdG9yeSZxdW90OyByZXF1aXJlZD0m cXVvdDt0cnVlJnF1b3Q7IHR5cGU9JnF1b3Q7T2JqZWN0JnF1b3Q7IC8mZ3Q7CiZndDsmZ3Q7ICZs dDtjYzphdHRyaWJ1dGUgbmFtZT0mcXVvdDt0YXNrJnF1b3Q7IHJlcXVpcmVkPSZxdW90O3RydWUm cXVvdDsgdHlwZT0mcXVvdDtPYmplY3QmcXVvdDsgLyZndDsKJmd0OyZndDsgJmx0O2NjOmF0dHJp YnV0ZSBuYW1lPSZxdW90O2Rpc2FibGVkJnF1b3Q7IHJlcXVpcmVkPSZxdW90O2ZhbHNlJnF1b3Q7 IHR5cGU9JnF1b3Q7Qm9vbGVhbiZxdW90OyAKJmd0OyZndDsgZGVmYXVsdD0mcXVvdDtmYWxzZSZx dW90OyAvJmd0OwomZ3Q7Jmd0OyAmbHQ7Y2M6aW5zZXJ0Q2hpbGRyZW4gLyZndDsKJmd0OyZndDsg Jmx0Oy9jYzppbnRlcmZhY2UmZ3Q7CiZndDsmZ3Q7CiZndDsmZ3Q7ICZsdDtjYzppbXBsZW1lbnRh dGlvbiZndDsKJmd0OyZndDsgJmx0O2g6b3V0cHV0U3R5bGVzaGVldCBuYW1lPSZxdW90O3NvY2lh bHBtL3NvY2lhbHBtLmNzcyZxdW90OyAvJmd0OwomZ3Q7Jmd0OyAmbHQ7aDpwYW5lbEdyb3VwIGlk PSZxdW90O3Rhc2tCbG9jayZxdW90OyBsYXlvdXQ9JnF1b3Q7YmxvY2smcXVvdDsgY2xhc3M9JnF1 b3Q7Ym94LWJvcmRlcmVkIHA1IAomZ3Q7Jmd0OyAje2NjLmF0dHJzLnN0eWxlQ2xhc3N9IHRhc2tC bG9ja18je2NjLmF0dHJzLnRhc2suc3RhdHVzfSZxdW90OyAKJmd0OyZndDsgc3R5bGU9JnF1b3Q7 I3tjYy5hdHRycy5zdHlsZX0mcXVvdDsmZ3Q7CiZndDsmZ3Q7CiZndDsmZ3Q7ICZsdDtkaXYgY2xh c3M9JnF1b3Q7bTVsJnF1b3Q7IHN0eWxlPSZxdW90O21hcmdpbi1yaWdodDogMjVweDsmcXVvdDsg Jmd0OwomZ3Q7Jmd0OyAmbHQ7aDpvdXRwdXRUZXh0IHZhbHVlPSZxdW90OyN7Y2MuYXR0cnMudGFz ay50ZXh0fSZxdW90OyAKJmd0OyZndDsgcmVuZGVyZWQ9JnF1b3Q7I3tjYy5hdHRycy5kaXNhYmxl ZH0mcXVvdDsvJmd0OwomZ3Q7Jmd0OyAmbHQ7YTplZGl0VGV4dCB2YWx1ZT0mcXVvdDsje2NjLmF0 dHJzLnRhc2sudGV4dH0mcXVvdDsgCiZndDsmZ3Q7IHJlbmRlcmVkPSZxdW90OyN7IWNjLmF0dHJz LmRpc2FibGVkfSZxdW90OyZndDsKJmd0OyZndDsgKiZsdDtmOmFjdGlvbkxpc3RlbmVyIGZvcj0m cXVvdDtzdWJtaXQmcXVvdDsgCiZndDsmZ3Q7IGFjdGlvbj0mcXVvdDsje3Rhc2tDb250cm9sbGVy LnNhdmVUYXNrQWpheChjYy5hdHRycy5zdG9yeSwgCiZndDsmZ3Q7IGNjLmF0dHJzLnRhc2spfSZx dW90OyAvJmd0OyAqCiZndDsmZ3Q7ICZsdDsvYTplZGl0VGV4dCZndDsKJmd0OyZndDsgJmx0Oy9k aXYmZ3Q7CiZndDsmZ3Q7ICZsdDsvY2M6aW1wbGVtZW50YXRpb24mZ3Q7CiZndDsmZ3Q7ICZsdDsv aHRtbCZndDsKJmd0OyZndDsKJmd0OyZndDsKJmd0OyZndDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomZ3Q7Jmd0 OyAqY29uc3VtaW5nIHBhZ2UgY29kZToqICZsdDstLSB0aGlzIGlzIHdoZXJlIHRhc2sgaXMgZGVm aW5lZCBpbiB0aGUgCiZndDsmZ3Q7IFVJOlJlcGVhdCwgc28gaXQgaXMgaW4gc2NvcGUKJmd0OyZn dDsKJmd0OyZndDsgJmx0OyFET0NUWVBFIGh0bWwKJmd0OyZndDsgICAgICAgUFVCTElDICZxdW90 Oy0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOJnF1b3Q7CiZndDsmZ3Q7ICAg ICAgICZxdW90OzxBIEhSRUY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwx LXRyYW5zaXRpb25hbC5kdGQiPmh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwx LXRyYW5zaXRpb25hbC5kdGQ8L0E+JnF1b3Q7Jmd0OwomZ3Q7Jmd0OyAmbHQ7aHRtbCB4bWxucz0m cXVvdDs8QSBIUkVGPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj5odHRwOi8vd3d3Lncz Lm9yZy8xOTk5L3hodG1sPC9BPiZxdW90OwomZ3Q7Jmd0OyB4bWxuczpjPSZxdW90OzxBIEhSRUY9 Imh0dHA6Ly9qYXZhLnN1bi5jb20vanNwL2pzdGwvY29yZSI+aHR0cDovL2phdmEuc3VuLmNvbS9q c3AvanN0bC9jb3JlPC9BPiZxdW90OwomZ3Q7Jmd0OyB4bWxuczpmPSZxdW90OzxBIEhSRUY9Imh0 dHA6Ly9qYXZhLnN1bi5jb20vanNmL2NvcmUiPmh0dHA6Ly9qYXZhLnN1bi5jb20vanNmL2NvcmU8 L0E+JnF1b3Q7CiZndDsmZ3Q7IHhtbG5zOmg9JnF1b3Q7PEEgSFJFRj0iaHR0cDovL2phdmEuc3Vu LmNvbS9qc2YvaHRtbCI+aHR0cDovL2phdmEuc3VuLmNvbS9qc2YvaHRtbDwvQT4mcXVvdDsKJmd0 OyZndDsgeG1sbnM6c29jaWFscG09JnF1b3Q7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9q c2YvY29tcG9zaXRlL3NvY2lhbHBtIj5odHRwOi8vamF2YS5zdW4uY29tL2pzZi9jb21wb3NpdGUv c29jaWFscG08L0E+JnF1b3Q7CiZndDsmZ3Q7IHhtbG5zOnByZXR0eT0mcXVvdDs8QSBIUkVGPSJo dHRwOi8vb2Nwc29mdC5jb20vcHJldHR5ZmFjZXMiPmh0dHA6Ly9vY3Bzb2Z0LmNvbS9wcmV0dHlm YWNlczwvQT4mcXVvdDsKJmd0OyZndDsgeG1sbnM6dWk9JnF1b3Q7PEEgSFJFRj0iaHR0cDovL2ph dmEuc3VuLmNvbS9qc2YvZmFjZWxldHMiPmh0dHA6Ly9qYXZhLnN1bi5jb20vanNmL2ZhY2VsZXRz PC9BPiZxdW90OyB4bWw6bGFuZz0mcXVvdDtlbiZxdW90OyBsYW5nPSZxdW90O2VuJnF1b3Q7Jmd0 OwomZ3Q7Jmd0OwomZ3Q7Jmd0OyAmbHQ7dWk6Y29tcG9zaXRpb24mZ3Q7CiZndDsmZ3Q7ICZsdDto OmZvcm0gaWQ9JnF1b3Q7dGFza3NGb3JtJnF1b3Q7Jmd0OwomZ3Q7Jmd0OyAmbHQ7YzppZiB0ZXN0 PSZxdW90OyN7ZW1wdHkgY3VycmVudFN0b3J5QmVhbi5zdG9yeS50YXNrc30mcXVvdDsmZ3Q7CiZn dDsmZ3Q7ICZsdDtkaXYgY2xhc3M9JnF1b3Q7bTUmcXVvdDsmZ3Q7VGhpcyBzdG9yeSBoYXMgbm8g dGFza3MuIFRoYXQgY291bGQgYmUgYSBwcm9ibGVtIAomZ3Q7Jmd0OyBsYXRlci4uLiZsdDsvZGl2 Jmd0OwomZ3Q7Jmd0OyAmbHQ7L2M6aWYmZ3Q7CiZndDsmZ3Q7CiZndDsmZ3Q7ICZsdDt1aTpyZXBl YXQgdmFsdWU9JnF1b3Q7I3tjdXJyZW50U3RvcnlCZWFuLnN0b3J5LnRhc2tzfSZxdW90OyB2YXI9 JnF1b3Q7dGFzayZxdW90OyZndDsKJmd0OyZndDsgJmx0O3NvY2lhbHBtOnRhc2tCbG9jayB0YXNr PSZxdW90OyN7dGFza30mcXVvdDsgc3Rvcnk9JnF1b3Q7I3tjdXJyZW50U3RvcnlCZWFuLnN0b3J5 fSZxdW90OwomZ3Q7Jmd0OyBtZW1iZXJzPSZxdW90OyN7Y3VycmVudFByb2plY3RCZWFuLnByb2pl Y3QuYWN0aXZlTWVtYmVyc30mcXVvdDsKJmd0OyZndDsgZGlzYWJsZWQ9JnF1b3Q7I3shYXV0aG9y aXphdGlvbkJlYW4uaXNNZW1iZXIgb3IgCiZndDsmZ3Q7ICFjdXJyZW50U3RvcnlCZWFuLnN0b3J5 Lm9wZW59JnF1b3Q7CiZndDsmZ3Q7IGRlbGV0YWJsZT0mcXVvdDt0cnVlJnF1b3Q7IHN0eWxlQ2xh c3M9JnF1b3Q7bTV0JnF1b3Q7IHJlZnJlc2hPblNhdmU9JnF1b3Q7ZmFsc2UmcXVvdDsgLyZndDsK Jmd0OyZndDsgJmx0Oy91aTpyZXBlYXQmZ3Q7CiZndDsmZ3Q7ICZsdDsvaDpmb3JtJmd0OwomZ3Q7 Jmd0OyAmbHQ7L3VpOmNvbXBvc2l0aW9uJmd0OwomZ3Q7Jmd0OyAmbHQ7L2h0bWwmZ3Q7CiZndDsm Z3Q7CiZndDsmZ3Q7CiZndDsmZ3Q7CiZndDsmZ3Q7CiZndDsmZ3Q7IE9uIFNhdCwgMjAwOS0wOS0w NSBhdCAxNToyMyAtMDQwMCwgQW5keSBTY2h3YXJ0eiB3cm90ZToKJmd0OyZndDsmZ3Q7IEhleSBM aW5jb2xuIC0KJmd0OyZndDsmZ3Q7CiZndDsmZ3Q7Jmd0OyBMaW5jb2xuIEJheHRlciwgSUlJIHdy b3RlOgomZ3Q7Jmd0OyZndDsgJmd0OyBGaXJzdCwgcGxlYXNlIGxldCBtZSBrbm93IGlmIHRoZXJl IGlzIGEgYmV0dGVyIHBsYWNlIHRvIGFzayBKU0YgCiZndDsmZ3Q7Jmd0OyBEZXYgJmd0OyByZWxh dGVkIHF1ZXN0aW9ucy4KJmd0OyZndDsmZ3Q7ICZndDsKJmd0OyZndDsmZ3Q7CiZndDsmZ3Q7Jmd0 OyBJIHN1cHBvc2UgdGhlIE1vamFycmEgZGV2IGxpc3QgbWlnaHQgYmUgdGhlIHJpZ2h0IHBsYWNl IGZvciAKJmd0OyZndDsmZ3Q7IGltcGxlbWVudGF0aW9uIHF1ZXN0aW9uczoKJmd0OyZndDsmZ3Q7 CiZndDsmZ3Q7Jmd0OyA8QSBIUkVGPSJodHRwczovL2phdmFzZXJ2ZXJmYWNlcy5kZXYuamF2YS5u ZXQvbWFpbGluZ2xpc3RzLmh0bWwiPmh0dHBzOi8vamF2YXNlcnZlcmZhY2VzLmRldi5qYXZhLm5l dC9tYWlsaW5nbGlzdHMuaHRtbDwvQT4KJmd0OyZndDsmZ3Q7CiZndDsmZ3Q7Jmd0OyBUaG91Z2gg cGVyc29uYWxseSBJIGFtIGZpbmUgd2l0aCB5b3UgYXNraW5nIGhlcmUuIDotKQomZ3Q7Jmd0OyZn dDsKJmd0OyZndDsmZ3Q7IENvdWxkIHlvdSBzZW5kIGFsb25nIHlvdXIgY29tcG9zaXRlIGNvbXBv bmVudCBpbXBsZW1lbnRhdGlvbiAoYW5kIAomZ3Q7Jmd0OyZndDsgcGVyaGFwcyBhIHNuaXBwZXQg ZnJvbSB0aGUgY29uc3VtaW5nIHBhZ2UpPyAgSnVzdCB3YW50IHRvIG1ha2Ugc3VyZSAKJmd0OyZn dDsmZ3Q7IEkgdW5kZXJzdGFuZCB0aGUgdXNlIGNhc2UuCiZndDsmZ3Q7Jmd0OwomZ3Q7Jmd0OyZn dDsgQW5keQomZ3Q7Jmd0OyZndDsKJmd0OyZndDsmZ3Q7CiZndDsmZ3Q7IC0tIAomZ3Q7Jmd0OyAq TGluY29sbiBCYXh0ZXIsIElJSSoKJmd0OyZndDsgQ28tRm91bmRlciBvZiBPY3BTb2Z0ICZsdDs8 QSBIUkVGPSJodHRwOi8vb2Nwc29mdC5jb20iPmh0dHA6Ly9vY3Bzb2Z0LmNvbTwvQT4mZ3Q7CiZn dDsmZ3Q7IEF1dGhvciBvZiBQcmV0dHlGYWNlcyAmbHQ7PEEgSFJFRj0iaHR0cDovL29jcHNvZnQu Y29tL3ByZXR0eWZhY2VzIj5odHRwOi8vb2Nwc29mdC5jb20vcHJldHR5ZmFjZXM8L0E+Jmd0OyBV UkwgUmV3cml0aW5nIAomZ3Q7Jmd0OyBmb3IgSlNGCiZndDsmZ3Q7CiZndDsmZ3Q7CiZndDsKCjwv UFJFPgo8L0JMT0NLUVVPVEU+CjxUQUJMRSBDRUxMU1BBQ0lORz0iMCIgQ0VMTFBBRERJTkc9IjAi IFdJRFRIPSIxMDAlIj4KPFRSPgo8VEQ+Ci0tPEJSPgo8Qj5MaW5jb2xuIEJheHRlciwgSUlJPC9C PjxCUj4KQ28tRm91bmRlciBvZiA8QSBIUkVGPSJodHRwOi8vb2Nwc29mdC5jb20iPk9jcFNvZnQ8 L0E+PEJSPgpBdXRob3Igb2YgPEEgSFJFRj0iaHR0cDovL29jcHNvZnQuY29tL3ByZXR0eWZhY2Vz Ij5QcmV0dHlGYWNlczwvQT4gVVJMIFJld3JpdGluZyBmb3IgSlNGPEJSPgo8QlI+CjxCUj4KPC9U RD4KPC9UUj4KPC9UQUJMRT4KPC9CT0RZPgo8L0hUTUw+Cg== --===============6417363846580963527==--