Re: 2nd gen Io
"William Tanksley, Jr" <[email protected]> Sat, 8 Mar 2014 18:45:23 -0800
| Newsgroups | gmane.comp.lang.io |
|---|---|
| Message-ID | <CAFTBfO5eQAKLg8ohu0n2G6=yJWCN-=_dtdsBc0nvEowWiwANZg@mail.gmail.com> |
--047d7b873a1058389f04f4237ce3 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Intel is implementing something like this in one of their proposals for a super-protected mode -- each distinct component is kept encrypted, and parts are only decrypted as they're loaded into cache. The potential for abuse is phenomenal. But so's the potential for good. This is an excellent two-part article. http://theinvisiblethings.blogspot.com/2013/08/thoughts-on-intels-upcoming-= software.html http://theinvisiblethings.blogspot.com/2013/09/thoughts-on-intels-upcoming-= software.html -Wm On Sat, Mar 8, 2014 at 6:40 PM, William Tanksley, Jr <[email protected]>wrote: > Startup time might be manageable if the root instance seed signed an imag= e > containing a group of objects rather than one object at a time (the other > objects would be signed too, but they would be marked as trusted due to > their inclusion). > > > On Thu, Mar 6, 2014 at 11:51 PM, Scott Solmonson <[email protected]>wrote= : > >> >> >> Why stop there? >> >> Why not sign every object from a root instance seed from the initial >> Lobby? Startup time would be increased hilariously, but in the "reusable >> object" paradigm once they're up, they're up. And a chain of authorizati= on >> can then exist that effortlessly overflows across cores, systems, and >> distance automagically. >> >> -SS >> >> -- >> >> NUNQUAM NON PARATUS =E2=98=A4 INCITATUS =C3=86TERNUS =E3=83=BD(=C2=B4=E2= =97=87=EF=BD=80)=E3=83=8E >> >> V/T: 00.1.408.718.6290 >> >> Skype: Scott Solmonson >> >> >> On Thu, Mar 6, 2014 at 4:28 PM, Steve Dekorte <[email protected]> wrote: >> >>> >>> I=E2=80=99d like to make the things that tend to be re-implemented in t= ypical >>> projects part of the language - security, persistence, concurrency, >>> distribution and user interaction. All of these could be seen as mappin= g >>> problems and their solution as adding explicit mapping boundaries. >>> >>> The first idea (which was probably already done in Smalltalk in 1980s) >>> is to add a pointer to each object in the system to it=E2=80=99s =E2=80= =9Cowner=E2=80=9D and have >>> object ownership domains where the domain leader is an actor/process wh= ose >>> execution thread is used for processing all messages sent to objects wi= thin >>> it=E2=80=99s domain. Any object can become a domain of the objects belo= w it in the >>> ownership graph. Domain boundaries are used to solve the problems of >>> security (tracking and verifying authority to invoke behaviors), >>> concurrency (avoid unexpected state changes, closely associate executio= n >>> with the state it will be working on), distribution and persistence >>> (boundaries determine the state which needs to be persisted or moved). >>> >>> Part of the persistence component is to support the indexing and lazy >>> loading of individual objects and standard representations that can be >>> externally manipulated and returned and merged with an optimistic locki= ng >>> mechanism. >>> >>> The user interaction part involves extending slots to have metadata and >>> a standard set of properties which are used for the interface mapping. >>> >>> This would be a big project but hopefully there will be time in the >>> future to take a stab at it. >>> >>> Sorry for the delay in responding, >>> Steve >>> >>> On Feb 24, 2014, at 6:06 AM, [email protected] wrote: >>> > Come on Steve, there are Io fans who wanna hear about it! Let us chat= . >>> > >>> > Selon Steve Dekorte <[email protected]>: >>> >> >>> >> On Feb 19, 2014, at 1:28 AM, [email protected] wrote: >>> >>> Hi all, >>> >>> >>> >>> When there's no matching slot, the "forward" slot is activated. >>> >>> >>> >>> I have this idea about a "before" slot: >>> >>> >>> >>> If "before" doesn't exist, everything works as usual. >>> >>> >>> >>> If "before" exists, it is always activated (and it receives the >>> message) >>> >> before >>> >>> the slot lookup. Then, it produces a message (possibly the same) >>> which will >>> >> be >>> >>> treated as usual. >>> >>> >>> >>> This could be used to test whether the sender as the "right" to >>> access a >>> >>> particular slot, for example. >>> >> >>> >> Hi Julien, >>> >> >>> >> I like the idea. On my list for a 2nd gen Io is some form of support >>> for >>> >> rights on all objects. >>> >> >>> >>> Is there already a way to do this at user level? >>> >> >>> >> You can get the same effect using a proxy to forward message to the >>> real >>> >> object. >>> >> Io uses proxies for futures and supports turning all references of >>> one object >>> >> to another. >>> >> >>> >>> Also, would anybody have a little constructive criticism about Io? >>> >> >>> >> Always welcome! :) >>> >> >>> >> Steve >>> >>> >>> >>> >>> >>> ------------------------------------ >>> >>> Yahoo Groups Links >>> >>> >>> >>> >> >> >>=20 >> > > --047d7b873a1058389f04f4237ce3 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/htm= l4/strict.dtd"> <html> <head> </head> =20 <body style=3D"background-color: #fff;"> <span style=3D"display:none"> </span> <!--~-|**|PrettyHtmlStartT|**|-~--> <div id=3D"ygrp-mlmsg" style=3D"position:relative;"> <div id=3D"ygrp-msg" style=3D"z-index: 1;"> <!--~-|**|PrettyHtmlEndT|**|-~--> <div id=3D"ygrp-text" > =20=20=20=20=20=20 =20=20=20=20=20=20 <p><div dir=3D"ltr">Intel is implementing something like this in one = of their proposals for a super-protected mode -- each distinct component is= kept encrypted, and parts are only decrypted as they're loaded into ca= che.<div> <br></div><div>The potential for abuse is phenomenal. But so's the pote= ntial for good.</div><div><br></div><div>This is an excellent two-part arti= cle.</div><div><a href=3D"http://theinvisiblethings.blogspot.com/2013/08/th= oughts-on-intels-upcoming-software.html">http://theinvisiblethings.blogspot= .com/2013/08/thoughts-on-intels-upcoming-software.html</a><br> </div><div><a href=3D"http://theinvisiblethings.blogspot.com/2013/09/though= ts-on-intels-upcoming-software.html">http://theinvisiblethings.blogspot.com= /2013/09/thoughts-on-intels-upcoming-software.html</a><br></div><div><br> </div><div>-Wm</div><div><br></div></div><div class=3D"gmail_extra"><br><br= ><div class=3D"gmail_quote">On Sat, Mar 8, 2014 at 6:40 PM, William Tanksle= y, Jr <span dir=3D"ltr"><<a href=3D"mailto:[email protected]" target= =3D"_blank">[email protected]</a>></span> wrote:<br> <blockquote class=3D"gmail_quote" style=3D"border-left:1px #ccc solid;"><di= v dir=3D"ltr">Startup time might be manageable if the root instance seed si= gned an image containing a group of objects rather than one object at a tim= e (the other objects would be signed too, but they would be marked as trust= ed due to their inclusion).</div> <div class=3D"HOEnZb"><div class=3D"h5"> <div class=3D"gmail_extra"><br><br><div class=3D"gmail_quote">On Thu, Mar 6= , 2014 at 11:51 PM, Scott Solmonson <span dir=3D"ltr"><<a href=3D"mailto= :[email protected]" target=3D"_blank">[email protected]</a>></span> wrot= e:<br> <blockquote class=3D"gmail_quote" style=3D"border-left:1px #ccc solid;"> =20=20=20=20=20=20=20=20 <div> <br><br> <div dir=3D"ltr">Why stop there?<div><br></div><div>Why not sign every obje= ct from a root instance seed from the initial Lobby? Startup time would be = increased hilariously, but in the "reusable object" paradigm once= they're up, they're up. And a chain of authorization can then exis= t that effortlessly overflows across cores, systems, and distance automagic= ally.</div> <div><br></div><div>-SS</div> </div><div class=3D"gmail_extra"><br clear=3D"all"><div><div dir=3D"ltr"> <p>--</p><p>NUNQUAM NON PARATUS =E2=98=A4 INCITATUS =C3=86TERNUS =E3=83=BD(= =C2=B4=E2=97=87=EF=BD=80)=E3=83=8E</p><p>V/T: 00.1.408.718.6290</p><p>Skype= : Scott Solmonson</p></div></div><div><div> <br><br><div class=3D"gmail_quote">On Thu, Mar 6, 2014 at 4:28 PM, Steve De= korte <span dir=3D"ltr"><<a href=3D"mailto:[email protected]" target=3D"= _blank">[email protected]</a>></span> wrote:<br><blockquote class=3D"gma= il_quote" style=3D"border-left:1px #ccc solid;"> <br> I=E2=80=99d like to make the things that tend to be re-implemented in typic= al projects part of the language - security, persistence, concurrency, dist= ribution and user interaction. All of these could be seen as mapping proble= ms and their solution as adding explicit mapping boundaries.<br> <br> The first idea (which was probably already done in Smalltalk in 1980s) is t= o add a pointer to each object in the system to it=E2=80=99s =E2=80=9Cowner= =E2=80=9D and have object ownership domains where the domain leader is an a= ctor/process whose execution thread is used for processing all messages sen= t to objects within it=E2=80=99s domain. Any object can become a domain of = the objects below it in the ownership graph. Domain boundaries are used to = solve the problems of security (tracking and verifying authority to invoke = behaviors), concurrency (avoid unexpected state changes, closely associate = execution with the state it will be working on), distribution and persisten= ce (boundaries determine the state which needs to be persisted or moved).<b= r> <br> Part of the persistence component is to support the indexing and lazy loadi= ng of individual objects and standard representations that can be externall= y manipulated and returned and merged with an optimistic locking mechanism.= <br> <br> The user interaction part involves extending slots to have metadata and a s= tandard set of properties which are used for the interface mapping.<br> <br> This would be a big project but hopefully there will be time in the future = to take a stab at it.<br> <br> Sorry for the delay in responding,<br> Steve<br> <br> On Feb 24, 2014, at 6:06 AM, <a href=3D"mailto:[email protected]" targe= t=3D"_blank">[email protected]</a> wrote:<br> > Come on Steve, there are Io fans who wanna hear about it! Let us chat.= <br> ><br> > Selon Steve Dekorte <<a href=3D"mailto:[email protected]" target=3D= "_blank">[email protected]</a>>:<br> >><br> >> On Feb 19, 2014, at 1:28 AM, <a href=3D"mailto:omenvironment@free.= fr" target=3D"_blank">[email protected]</a> wrote:<br> >>> Hi all,<br> >>><br> >>> When there's no matching slot, the "forward" slo= t is activated.<br> >>><br> >>> I have this idea about a "before" slot:<br> >>><br> >>> If "before" doesn't exist, everything works as u= sual.<br> >>><br> >>> If "before" exists, it is always activated (and it r= eceives the message)<br> >> before<br> >>> the slot lookup. Then, it produces a message (possibly the sam= e) which will<br> >> be<br> >>> treated as usual.<br> >>><br> >>> This could be used to test whether the sender as the "rig= ht" to access a<br> >>> particular slot, for example.<br> >><br> >> Hi Julien,<br> >><br> >> I like the idea. On my list for a 2nd gen Io is some form of suppo= rt for<br> >> rights on all objects.<br> >><br> >>> Is there already a way to do this at user level?<br> >><br> >> You can get the same effect using a proxy to forward message to th= e real<br> >> object.<br> >> Io uses proxies for futures and supports turning all references of= one object<br> >> to another.<br> >><br> >>> Also, would anybody have a little constructive criticism about= Io?<br> >><br> >> Always welcome! :)<br> >><br> >> Steve<br> <br> <br> <br> <br> <br> ------------------------------------<br> <br> Yahoo Groups Links<br> <br> <*> To visit your group on the web, go to:<br> =C2=A0 =C2=A0 <a href=3D"http://groups.yahoo.com/group/iolanguage/" target= =3D"_blank">http://groups.yahoo.com/group/iolanguage/</a><br> <br> <*> Your email settings:<br> =C2=A0 =C2=A0 Individual Email | Traditional<br> <br> <*> To change settings online go to:<br> =C2=A0 =C2=A0 <a href=3D"http://groups.yahoo.com/group/iolanguage/join" tar= get=3D"_blank">http://groups.yahoo.com/group/iolanguage/join</a><br> =C2=A0 =C2=A0 (Yahoo! ID required)<br> <br> <*> To change settings via email:<br> =C2=A0 =C2=A0 <a href=3D"mailto:[email protected]" target= =3D"_blank">[email protected]</a><br> =C2=A0 =C2=A0 <a href=3D"mailto:[email protected]" ta= rget=3D"_blank">[email protected]</a><br> <br> <*> To unsubscribe from this group, send an email to:<br> =C2=A0 =C2=A0 <a href=3D"mailto:[email protected]" tar= get=3D"_blank">[email protected]</a><br> <br> <*> Your use of Yahoo Groups is subject to:<br> =C2=A0 =C2=A0 <a href=3D"https://info.yahoo.com/legal/us/yahoo/utos/terms/"= target=3D"_blank">https://info.yahoo.com/legal/us/yahoo/utos/terms/</a><br= > <br> </blockquote></div><br></div></div></div> <br> <br> <div width=3D"1" style=3D"color:white;"></div> </div></blockquote></div><br></div> </div></div></blockquote></div><br></div> </p> </div> =20=20=20=20=20 <!--~-|**|PrettyHtmlStart|**|-~--> <div style=3D"color: #fff; height: 0;">__._,_.___</div> =20=20=20=20=20=20=20=20=20=20 =20=20 =20=20=20=20 <div style=3D"clear:both"> </div> <table cellspacing=3D4px style=3D"margin-top: 20px; margin-bottom: 10px= ;"> <tbody> <tr> <td style=3D"font-size: 12px; font-family: arial; font-weight: bo= ld; padding: 7px 5px 5px; color: #FFF; background-color: #F2F2F2; border: 1= px solid #EAEAEA " > <a style=3D"text-decoration: none; color: #2D50FD= " href=3D"https://groups.yahoo.com/group/iolanguage/post;_ylc=3DX3oDMTJxczN= iNnA1BF9TAzk3MzU5NzE0BGdycElkAzY2Nzc0NzYEZ3Jwc3BJZAMxNzA1MDA2NzY0BG1zZ0lkAz= EzMzU3BHNlYwNmdHIEc2xrA3JwbHkEc3RpbWUDMTM5NDMzMzE1NQ--?act=3Dreply&messageN= um=3D13357">Reply via web post</a> </td> <td style=3D"font-size: 12px; font-family: arial; padding: 7px 5p= x 5px; color: #FFF; background-color: #F2F2F2; border: 1px solid #EAEAEA; "= > <a href=3D"mailto:[email protected]?subject=3DRe%3A%20%5BIo= %5D%202nd%20gen%20Io" style=3D"text-decoration: none; color: #2D50FD;"> Reply to sender </a>=20 </td> <td style=3D"font-size: 12px; font-family: arial; padding: 7px 5p= x 5px; color: #FFF; background-color: #F2F2F2; border: 1px solid #EAEAEA; "= > <a href=3D"mailto:[email protected]?subject=3DRe%3A%20= %5BIo%5D%202nd%20gen%20Io" style=3D"text-decoration: none; color: #2D50FD"> Reply to group </a>=20 </td> <td style=3D"font-size: 12px; font-family: arial; padding: 7px 5p= x 5px; color: #FFF; background-color: #F2F2F2; border: 1px solid #EAEAEA; "= > <a href=3D"https://groups.yahoo.com/group/iolanguage/post;_ylc= =3DX3oDMTJlcDRmbHZmBF9TAzk3MzU5NzE0BGdycElkAzY2Nzc0NzYEZ3Jwc3BJZAMxNzA1MDA2= NzY0BHNlYwNmdHIEc2xrA250cGMEc3RpbWUDMTM5NDMzMzE1NQ--" style=3D"text-decorat= ion: none; color: #2D50FD">Start a New Topic</a> </td> <td style=3D"font-size: 12px; font-family: arial; padding: 7px 5p= x 5px; color: #2D50FD; background-color: #F2F2F2; border: 1px solid #EAEAEA= ; " > <a href=3D"https://groups.yahoo.com/group/iolan= guage/message/13345;_ylc=3DX3oDMTM2dTk3MXRwBF9TAzk3MzU5NzE0BGdycElkAzY2Nzc0= NzYEZ3Jwc3BJZAMxNzA1MDA2NzY0BG1zZ0lkAzEzMzU3BHNlYwNmdHIEc2xrA3Z0cGMEc3RpbWU= DMTM5NDMzMzE1NQR0cGNJZAMxMzM0NQ--" style=3D"text-decoration: none; color: #= 2D50FD;">Messages in this topic</a> (9) </td> </tr> </tbody> </table> =20=20=20=20=20=20=20=20 <!------- Start Nav Bar ------> <!-- |**|begin egp html banner|**| --> <!-- |**|end egp html banner|**| --> =20 <!-- |**|begin egp html banner|**| --> <div id=3D"ygrp-vital" style=3D"background-color: #f2f2f2; font-family: Ver= dana; font-size: 10px; margin-bottom: 10px; padding: 10px;"> <span id=3D"vithd" style=3D"font-weight: bold; color: #333; text-transf= orm: uppercase; "><a href=3D"https://groups.yahoo.com/group/iolanguage;_ylc= =3DX3oDMTJlZTRoNWI0BF9TAzk3MzU5NzE0BGdycElkAzY2Nzc0NzYEZ3Jwc3BJZAMxNzA1MDA2= NzY0BHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTM5NDMzMzE1NQ--" style=3D"text-decorat= ion: none;">Visit Your Group</a></span> <ul style=3D"list-style-type: none; margin: 0; padding: 0; display: in= line;"> </ul> </div> <div id=3D"ft" style=3D"font-family: Arial; font-size: 11px; margin-top: 5p= x; padding: 0 2px 0 0; clear: both;"> <a href=3D"https://groups.yahoo.com/;_ylc=3DX3oDMTJkOW5hZWJjBF9TAzk3NDc2N= TkwBGdycElkAzY2Nzc0NzYEZ3Jwc3BJZAMxNzA1MDA2NzY0BHNlYwNmdHIEc2xrA2dmcARzdGlt= ZQMxMzk0MzMzMTU1" style=3D"float: left;"><img src=3D"http://l.yimg.com/ru/s= tatic/images/yg/img/email/new_logo/logo-groups-137x15.png" height=3D"15" wi= dth=3D"137" alt=3D"Yahoo! Groups" style=3D"border: 0;"/></a> <div style=3D"color: #747575; float: right;"> • <a href=3D"https://i= nfo.yahoo.com/privacy/us/yahoo/groups/details.html" style=3D"text-decoratio= n: none;">Privacy</a> • <a href=3D"mailto:iolanguage-unsubscribe@yahoo= groups.com?subject=3DUnsubscribe" style=3D"text-decoration: none;">Unsubscr= ibe</a> • <a href=3D"https://info.yahoo.com/legal/us/yahoo/utos/terms/= " style=3D"text-decoration: none;">Terms of Use</a> </div> </div> <!-- |**|end egp html banner|**| --> </div> <!-- ygrp-msg --> =20 <!-- Sponsor --> <!-- |**|begin egp html banner|**| --> <div id=3D"ygrp-sponsor" style=3D"width:160px; float:right; clear:none; m= argin:0 0 25px 0; background: #fff;"> <!-- Start Recommendations --> <div id=3D"ygrp-reco"> </div> <!-- End Recommendations --> </div> <!-- |**|end egp html banner|**| --> <div style=3D"clear:both; color: #FFF; font-size:1px;">.</div> </div> <img src=3D"http://geo.yahoo.com/serv?s=3D97359714/grpId=3D6677476/grpspI= d=3D1705006764/msgId=3D13357/stime=3D1394333155" width=3D"1" height=3D"1"> = <br> <div style=3D"color: #fff; height: 0;">__,_._,___</div> <!--~-|**|PrettyHtmlEnd|**|-~--> </body> <!--~-|**|PrettyHtmlStart|**|-~--> <head> <style type=3D"text/css"> <!-- #ygrp-mkp { border: 1px solid #d8d8d8; font-family: Arial; margin: 10px 0; padding: 0 10px; } #ygrp-mkp hr { border: 1px solid #d8d8d8; } #ygrp-mkp #hd { color: #628c2a; font-size: 85%; font-weight: 700; line-height: 122%; margin: 10px 0; } #ygrp-mkp #ads { margin-bottom: 10px; } #ygrp-mkp .ad { padding: 0 0; } #ygrp-mkp .ad p { margin: 0; } #ygrp-mkp .ad a { color: #0000ff; text-decoration: none; } #ygrp-sponsor #ygrp-lc { font-family: Arial; } #ygrp-sponsor #ygrp-lc #hd { margin: 10px 0px; font-weight: 700; font-size: 78%; line-height: 122%; } #ygrp-sponsor #ygrp-lc .ad { margin-bottom: 10px; padding: 0 0; } #actions { font-family: Verdana; font-size: 11px; padding: 10px 0; } #activity { background-color: #e0ecee; float: left; font-family: Verdana; font-size: 10px; padding: 10px; } #activity span { font-weight: 700; } #activity span:first-child { text-transform: uppercase; } #activity span a { color: #5085b6; text-decoration: none; } #activity span span { color: #ff7900; } #activity span .underline { text-decoration: underline; } .attach { clear: both; display: table; font-family: Arial; font-size: 12px; padding: 10px 0; width: 400px; } .attach div a { text-decoration: none; } .attach img { border: none; padding-right: 5px; } .attach label { display: block; margin-bottom: 5px; } .attach label a { text-decoration: none; } =20=20 blockquote { margin: 0 0 0 4px; } .bold { font-family: Arial; font-size: 13px; font-weight: 700; } .bold a { text-decoration: none; } dd.last p a { font-family: Verdana; font-weight: 700; } dd.last p span { margin-right: 10px; font-family: Verdana; font-weight: 700; } dd.last p span.yshortcuts { margin-right: 0; } div.attach-table div div a { text-decoration: none; } div.attach-table { width: 400px; } div.file-title a, div.file-title a:active, div.file-title a:hover, div.fi= le-title a:visited { text-decoration: none; } div.photo-title a, div.photo-title a:active, div.photo-title a:hover, div= .photo-title a:visited { text-decoration: none; } div#ygrp-mlmsg #ygrp-msg p a span.yshortcuts { font-family: Verdana; font-size: 10px; font-weight: normal; } .green { color: #628c2a; } .MsoNormal { margin: 0 0 0 0; } o { font-size: 0; } #photos div { float: left; width: 72px; } #photos div div { border: 1px solid #666666; height: 62px; overflow: hidden; width: 62px; } #photos div label { color: #666666; font-size: 10px; overflow: hidden; text-align: center; white-space: nowrap; width: 64px; } #reco-category { font-size: 77%; } #reco-desc { font-size: 77%; } .replbq { margin: 4px; } #ygrp-actbar div a:first-child { /* border-right: 0px solid #000;*/ margin-right: 2px; padding-right: 5px; } #ygrp-mlmsg { font-size: 13px; font-family: Arial, helvetica,clean, sans-serif; *font-size: small; *font: x-small; } #ygrp-mlmsg table { font-size: inherit; font: 100%; } #ygrp-mlmsg select, input, textarea { font: 99% Arial, Helvetica, clean, sans-serif; } #ygrp-mlmsg pre, code { font:115% monospace; *font-size:100%; } #ygrp-mlmsg * { line-height: 1.22em; } #ygrp-mlmsg #logo { padding-bottom: 10px; } #ygrp-msg p a { font-family: Verdana; } #ygrp-msg p#attach-count span { color: #1E66AE; font-weight: 700; } #ygrp-reco #reco-head { color: #ff7900; font-weight: 700; } #ygrp-reco { margin-bottom: 20px; padding: 0px; } #ygrp-sponsor #ov li a { font-size: 130%; text-decoration: none; } #ygrp-sponsor #ov li { font-size: 77%; list-style-type: square; padding: 6px 0; }=20 #ygrp-sponsor #ov ul { margin: 0; padding: 0 0 0 8px; } #ygrp-text { font-family: Georgia; } #ygrp-text p { margin: 0 0 1em 0; } #ygrp-text tt { font-size: 120%; } #ygrp-vital ul li:last-child { border-right: none !important;=20 }=20 --> </style> </head> <!--~-|**|PrettyHtmlEnd|**|-~--> </html> <!-- end group email --> --047d7b873a1058389f04f4237ce3--