| Newsgroups |
gmane.comp.lang.eiffel.gobo.general |
| Message-ID |
<[email protected]> |
--------------5CB98C8BF291E2CB1208139F
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable
Hi,
Yes, int_hbox is an external function which create the widget and return
the pointer to that widget. This pointer is stored in a HASH_TABLE with
the corresponding Eiffel object. I will see if this is a problem. But
first I need solve other problem I posted in other thread.
Regards
On 5/13/20 12:38 AM, Alexander Kogtenkov kwaxer-JGs/[email protected] [gobo-eiffel] wrote=
:
>
> I wonder how freely in-memory data is passed around in the library.
> EiffelStudio uses moving GC whereas Gobo does not. Just to give you
> some feeling about potential issues, let=E2=80=99s have a look at the ins=
truction
> =C2=A0 =C2=A0 a_hbox :=3D int_hbox (get_pointer (arg.to_c))
> `arg.to_c` returns `arg.area` that is still an object tracked by GC.
> My guess is that `get_pointer` obtains a pointer to this object.
> Pointers are not tracked by GC. Now, if int_hbox is not an external
> function, or, is an external function that could trigger a callback to
> Eiffel code (most windowing environments do =E2=80=94 this way they handl=
e
> windowing messages), when the data accessible through the pointer is
> reached, it could have been moved by the GC to some other location.
> (It could also be collected altogether, if there are no more
> references. If Gobo uses Boehm GC, it is not only non-moving, it is
> also conservative. I.e. as soon as there is any pointer to data
> somewhere, it still treats the data as reachable. Precise GC, used by
> EiffelStudio, can collect such data if there are no explicit
> references to it. Pointers are not equivalent to references, and
> having only pointers does not prevent GC from removing the data.)
> A safe solution to this issue is using MANAGED_POINTER. It allocates
> memory that is not moved by GC. And, as soon as there is a reference
> to MANAGED_POINTER object, the memory is not freed.
> A quick test whether there is a problem related to GC might be turning
> it off at the beginning of the program.
> Alexander Kogtenkov
>
> Germ=C3=A1n Arias [email protected] [gobo-eiffel]
> <[email protected]>:
>
> For example, something like this:
>
> hbox (col: ARRAY[IUP_WIDGET])
> =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0 -- Create a new horizontal box contai=
ning the list of widgets
> =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 local
> =C2=A0=C2=A0=C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0=C2=A0 i: INTEGER; arg: =
ARRAY[POINTER]; s: IUP_WIDGET;
> a_hbox: POINTER
> =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 do
> =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 i :=3D col.c=
ount
>
> =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 create arg.m=
ake(1, i + 1)
> =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 i :=3D 0
>
> =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 across
> =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=
col as ic
> =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0 =C2=A0=C2=A0 =C2=A0 loop
> =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0=C2=
=A0 i :=3D i + 1
> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =C2=A0 =
=C2=A0=C2=A0 s :=3D ic.item
> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0 arg.put(s.widget, i)
> =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0 end
>
> =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 a_hbox :=3D =
int_hbox (get_pointer(arg.to_c))
> =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 set_widget(a=
_hbox)
> =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 end
>
>=20
--------------5CB98C8BF291E2CB1208139F
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>
=20=20
=20=20
<p>Hi,</p>
<p>Yes, int_hbox is an external function which create the widget and
return the pointer to that widget. This pointer is stored in a
HASH_TABLE with the corresponding Eiffel object. I will see if
this is a problem. But first I need solve other problem I posted
in other thread.</p>
<p>Regards</p>
<div class=3D"moz-cite-prefix">On 5/13/20 12:38 AM, Alexander
Kogtenkov <a class=3D"moz-txt-link-abbreviated" href=3D"mailto:kwaxer=
@mail.ru">kwaxer-JGs/[email protected]</a> [gobo-eiffel] wrote:<br>
</div>
<blockquote type=3D"cite" cite=3D"mid:1589351938.139425756-/[email protected]=
ru">
=20=20=20=20=20=20
<span>=C2=A0</span>
=20=20=20=20=20=20
<div id=3D"ygrp-text">
<p>
</p>
<div>I wonder how freely in-memory data is passed around in
the library. EiffelStudio uses moving GC whereas Gobo does
not. Just to give you some feeling about potential issues,
let=E2=80=99s have a look at the instruction</div>
<div>=C2=A0</div>
<div>=C2=A0 =C2=A0 a_hbox :=3D int_hbox (get_pointer (arg.to_c)=
)</div>
<div>=C2=A0</div>
<div>`arg.to_c` returns `arg.area` that is still an object
tracked by GC. My guess is that `get_pointer` obtains a
pointer to this object. Pointers are not tracked by GC.
Now, if int_hbox is not an external function, or, is an
external function that could trigger a callback to Eiffel
code (most windowing environments do =E2=80=94 this way they
handle windowing messages), when the data accessible
through the pointer is reached, it could have been moved
by the GC to some other location. (It could also be
collected altogether, if there are no more references. If
Gobo uses Boehm GC, it is not only non-moving, it is also
conservative. I.e. as soon as there is any pointer to data
somewhere, it still treats the data as reachable. Precise
GC, used by EiffelStudio, can collect such data if there
are no explicit references to it. Pointers are not
equivalent to references, and having only pointers does
not prevent GC from removing the data.)</div>
<div>=C2=A0</div>
<div>A safe solution to this issue is using MANAGED_POINTER.
It allocates memory that is not moved by GC. And, as soon
as there is a reference to MANAGED_POINTER object, the
memory is not freed.</div>
<div>=C2=A0</div>
<div>A quick test whether there is a problem related to GC
might be turning it off at the beginning of the program.</div=
>
<div>=C2=A0</div>
<div data=3D"container">
<div data=3D"content">
<div>
<div>Alexander Kogtenkov</div>
</div>
</div>
</div>
<div>=C2=A0</div>
<div>=C2=A0</div>
<blockquote style=3D"border-left:1px solid
#0857A6;margin:10px;padding:0 0 0 10px;">Germ=C3=A1n Arias
<a class=3D"moz-txt-link-abbreviated" href=3D"mailto:germanan=
[email protected]">[email protected]</a> [gobo-eiffel]
<a class=3D"moz-txt-link-rfc2396E" href=3D"mailto:gobo-eiffel=
@yahoogroups.com"><[email protected]></a>:
<div id>
<div class=3D"js-helper js-readmsg-msg">
<div>
<div id=3D"style_15893203891713545890_BODY">
<div class=3D"class_1589382862">=C2=A0
<p>For example, something like this:</p>
<p>hbox (col: ARRAY[IUP_WIDGET])<br>
=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0 -- Create a new h=
orizontal box
containing the list of widgets<br>
=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 local<br>
=C2=A0=C2=A0=C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0=C2=
=A0 i: INTEGER; arg: ARRAY[POINTER];
s: IUP_WIDGET; a_hbox: POINTER<br>
=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 do<br>
=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=
=A0=C2=A0 i :=3D col.count<br>
<br>
=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=
=A0=C2=A0 create arg.make(1, i + 1)<br>
=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=
=A0=C2=A0 i :=3D 0<br>
<br>
=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=
=A0=C2=A0 across<br>
=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=
=A0=C2=A0 =C2=A0=C2=A0 col as ic<br>
=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0 =C2=A0=C2=A0 =C2=
=A0 loop<br>
=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0 =C2=
=A0 =C2=A0=C2=A0=C2=A0 i :=3D i + 1<br>
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0 =C2=A0 =C2=A0=C2=A0 s :=3D ic.item<br>
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 arg.put(s.widget, i)<br>
=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=
=A0 end<br>
<br>
=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=
=A0=C2=A0 a_hbox :=3D int_hbox
(get_pointer(arg.to_c))<br>
=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=
=A0=C2=A0 set_widget(a_hbox)<br>
=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 end</p>
</div>
</div>
</div>
</div>
</div>
</blockquote>
<div>=C2=A0</div>
</div>
=20=20=20=20=20=20=20=20=20=20
=20=20=20=20=20=20
=20=20=20=20=20=20
=20=20=20=20=20=20
<!-- end group email -->
</blockquote>
=20=20
</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=20
<div style=3D"clear:both"> </div>
<div id=3D"fromDMARC" style=3D"margin-top: 10px;">
<hr style=3D"height:2px ; border-width:0; color:#E3E3E3; background=
-color:#E3E3E3;">
Posted by: =3D?UTF-8?Q?Germ=3Dc3=3Da1n_Arias?=3D <germanandre@gm=
x.es> <hr style=3D"height:2px ; border-width:0; color:#E3E3E3; ba=
ckground-color:#E3E3E3;">
</div>
<div style=3D"clear:both"> </div>
<table cellspacing=3D4px style=3D"margin-top: 10px; margin-bottom: 10px=
; color: #2D50FD;">
<tbody>
<tr>
<td style=3D"font-size: 12px; font-family: arial; font-weight: bo=
ld; padding: 7px 5px 5px;" >
<a style=3D"text-decoration: none; color: #2D50FD=
" href=3D"https://groups.yahoo.com/neo/groups/gobo-eiffel/conversations/mes=
sages/1905;_ylc=3DX3oDMTJwdjVmYWNrBF9TAzk3MzU5NzE0BGdycElkAzE1MjIyNzAEZ3Jwc=
3BJZAMxNzA1MDA2NzY0BG1zZ0lkAzE5MDUEc2VjA2Z0cgRzbGsDcnBseQRzdGltZQMxNTg5NDA5=
MjE1?act=3Dreply&messageNum=3D1905">Reply via web post</a>
</td>
<td>•</td>
<td style=3D"font-size: 12px; font-family: arial; padding: 7px 5p=
x 5px;" >
<a href=3D"mailto:[email protected]?subject=3DRe%3A%20%5Bgobo-=
eiffel%5D%20Alternatives%20to%20NATIVE_ARRAY" style=3D"text-decoration: non=
e; color: #2D50FD;">
Reply to sender </a>
</td>
<td>•</td>
<td style=3D"font-size: 12px; font-family: arial; padding: 7px 5p=
x 5px;">
<a href=3D"mailto:[email protected]?subject=3DRe%3A%2=
0%5Bgobo-eiffel%5D%20Alternatives%20to%20NATIVE_ARRAY" style=3D"text-decora=
tion: none; color: #2D50FD">
Reply to group </a>
</td>
<td>•</td>
<td style=3D"font-size: 12px; font-family: arial; padding: 7px 5p=
x 5px;" >
<a href=3D"https://groups.yahoo.com/neo/groups/gobo-eiffel/conv=
ersations/newtopic;_ylc=3DX3oDMTJldGk2MjYzBF9TAzk3MzU5NzE0BGdycElkAzE1MjIyN=
zAEZ3Jwc3BJZAMxNzA1MDA2NzY0BHNlYwNmdHIEc2xrA250cGMEc3RpbWUDMTU4OTQwOTIxNQ--=
" style=3D"text-decoration: none; color: #2D50FD">Start a New Topic</a>
</td>
<td>•</td>
<td style=3D"font-size: 12px; font-family: arial; padding: 7px 5p=
x 5px;color: #2D50FD;" >
<a href=3D"https://groups.yahoo.com/neo/groups/=
gobo-eiffel/conversations/topics/1896;_ylc=3DX3oDMTM0amsycjc0BF9TAzk3MzU5Nz=
E0BGdycElkAzE1MjIyNzAEZ3Jwc3BJZAMxNzA1MDA2NzY0BG1zZ0lkAzE5MDUEc2VjA2Z0cgRzb=
GsDdnRwYwRzdGltZQMxNTg5NDA5MjE1BHRwY0lkAzE4OTY-" 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|**| -->
<div id=3D"ygrp-grfd" style=3D"font-family: Verdana; font-size: 12px; p=
adding: 15px 0;">
=20=20=20=20=20=20
<!-- |**|begin egp html banner|**| -->
To Post a message, send it to: [email protected]<BR=
>
To Unsubscribe, send a blank message to: gobo-eiffel-unsubscribe-B11MqFFcr06IwRZHo2/[email protected]=
m=20=20=20=20=20=20
<!-- |**|end egp html banner|**| -->
</div>
=20=20
=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/neo/groups/gobo-eiffe=
l/info;_ylc=3DX3oDMTJlYXRnM2ViBF9TAzk3MzU5NzE0BGdycElkAzE1MjIyNzAEZ3Jwc3BJZ=
AMxNzA1MDA2NzY0BHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTU4OTQwOTIxNQ--" style=3D"t=
ext-decoration: 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/neo;_ylc=3DX3oDMTJkYTdmNXVwBF9TAzk3ND=
c2NTkwBGdycElkAzE1MjIyNzAEZ3Jwc3BJZAMxNzA1MDA2NzY0BHNlYwNmdHIEc2xrA2dmcARzd=
GltZQMxNTg5NDA5MjE1" style=3D"float: left;"><img src=3D"https://s.yimg.com/=
ru/0.9.12/min/css/yahoo_en-US_f_pw_101x21.png" height=3D"21" width=3D"101" =
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:gobo-eiffel-unsubscribe@yaho=
ogroups.com?subject=3DUnsubscribe" style=3D"text-decoration: none;">Unsubsc=
ribe</a> • <a href=3D"https://info.yahoo.com/legal/us/yahoo/utos/terms=
/" style=3D"text-decoration: none;">Terms of Use</a> </div>
</div>
<br>
<!-- |**|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=3D1522270/grpspI=
d=3D1705006764/msgId=3D1905/stime=3D1589409215" width=3D"1" height=3D"1"> <=
br>
<img src=3D"http://y.analytics.yahoo.com/fpc.pl?ywarid=3D515FB27823A7407E&a=
=3D10001310322279&js=3Dno&resp=3Dimg" width=3D"1" height=3D"1">=20
<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 -->
--------------5CB98C8BF291E2CB1208139F--