Re: Computing with sed: a compiler from python to sed

"Daniel Goldman [email protected] [sed-users]" <[email protected]> Mon, 29 Oct 2018 12:12:08 -0700
Newsgroups gmane.editors.sed.user
Message-ID <[email protected]>
--URJe9Z4dWpY3Wk5wfx-bKiQrjRKn4-qZP9BZhEA
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit

The https://github.com/GillesArcas/numsed web page has a pretty detailed 
description. IMO, this is pretty incredible programming. You must have 
great knowledge of both python and sed to do this.

I take it PythonSed is a sed implementation written in the python 
language, that you previously wrote. Is that correct? What was it like 
programming sed in python? Any new insights into sed result for you?

For numsed, here is a simple example from the website (input python 
script, intermediate opcodes, output sed script), that I think makes it 
a little more clear.

********** python - add.py (5 lines)

# assign add
m = 42
n = 5
p = m + n
print(p)

*********** opcodes - add.opc (97 lines)

Complete listing is in:
https://github.com/GillesArcas/numsed/blob/master/examples/add.opc

STARTUP
LOAD_CONST        print.func
MAKE_FUNCTION     0
STORE_NAME        print
LOAD_CONST        signed_add.func
MAKE_FUNCTION     0
STORE_NAME        signed_add
LOAD_CONST        42
STORE_NAME        m
....
:signed_add.func
MAKE_CONTEXT
STORE_FAST        y
STORE_FAST        x
LOAD_FAST         x
IS_POSITIVE
POP_JUMP_IF_FALSE 85
....
:print.func
PRINT_ITEMS
PRINT_NEWLINE
LOAD_CONST        0
RETURN_VALUE

*********** sed add.sed (1185 lines)

Complete listing is in:
https://github.com/GillesArcas/numsed/blob/master/examples/add.sed

x
s/.*/end_of_script;@/
x
bL71
:end_of_script
q
:NameError
....
:L40
s/.*;x;([^;]*)[^|]*$/\1;&/     # PS: x;?;v;x?  HS: ?;v;x?
tL41
s/.*/x/; b NameError           # branch to error if var undefined

:L60                           # if invalid subtraction
s/^[0-9]*;[0-9]*;[0-9]*;/NAN/  # PS: NAN*
....
:.L73                          # PS: label
s/^R0$//;t R0
s/^R1$//;t R1
s/^end_of_script$//;t end_of_script
b UnknownLabel

How did you get inspired to do this? Is the intention to produce 
something practical, or just a fascinating exploration (nothing wrong 
with that)? Any reason called numsed?

Thanks,
Daniel

On 10/28/2018 5:28 AM, [email protected] [sed-users] wrote:
> After my full implementation of sed in python (PythonSed https://github.com/GillesArcas/PythonSed), I present to you my compiler from python to sed: numsed https://github.com/GillesArcas/numsed.
>
>
>   OK, a small subset of python but sufficient to express any integer calculation: all operations, assignments, conditionals, loops, functions (recursion is supported) and printing. A lot of testing, including with examples from Project Euler. Testing is done by running the original python script and the resulting sed script and comparing their results.
>
>
>   A lot of improvements are possible, either by completing the compiled features (for instance strings or arrays), or by making the generated sed code more efficient. Note that the digit addition, subtraction and multiplication are borrowed from dc from Greg Ubben and improvements on these operations seems difficult. Anyway, suggestions will be very welcome.
>
>
>
>
>
> [Non-text portions of this message have been removed]
>
>
>
> ------------------------------------
> Posted by: [email protected]
> ------------------------------------
>

--URJe9Z4dWpY3Wk5wfx-bKiQrjRKn4-qZP9BZhEA
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 7bit




<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
</head>






 
<body style="background-color: #fff;">
<span style="display:none">&nbsp;</span>

<!--~-|**|PrettyHtmlStartT|**|-~-->
<div id="ygrp-mlmsg" style="position:relative;">
  <div id="ygrp-msg" style="z-index: 1;">
<!--~-|**|PrettyHtmlEndT|**|-~-->

    <div id="ygrp-text" >
      
      
      <p>The https://github.com/GillesArcas/numsed web page has a pretty detailed <br>
description. IMO, this is pretty incredible programming. You must have <br>
great knowledge of both python and sed to do this.<br>
<br>
I take it PythonSed is a sed implementation written in the python <br>
language, that you previously wrote. Is that correct? What was it like <br>
programming sed in python? Any new insights into sed result for you?<br>
<br>
For numsed, here is a simple example from the website (input python <br>
script, intermediate opcodes, output sed script), that I think makes it <br>
a little more clear.<br>
<br>
********** python - add.py (5 lines)<br>
<br>
# assign add<br>
m = 42<br>
n = 5<br>
p = m + n<br>
print(p)<br>
<br>
*********** opcodes - add.opc (97 lines)<br>
<br>
Complete listing is in:<br>
https://github.com/GillesArcas/numsed/blob/master/examples/add.opc<br>
<br>
STARTUP<br>
LOAD_CONST        print.func<br>
MAKE_FUNCTION     0<br>
STORE_NAME        print<br>
LOAD_CONST        signed_add.func<br>
MAKE_FUNCTION     0<br>
STORE_NAME        signed_add<br>
LOAD_CONST        42<br>
STORE_NAME        m<br>
....<br>
:signed_add.func<br>
MAKE_CONTEXT<br>
STORE_FAST        y<br>
STORE_FAST        x<br>
LOAD_FAST         x<br>
IS_POSITIVE<br>
POP_JUMP_IF_FALSE 85<br>
....<br>
:print.func<br>
PRINT_ITEMS<br>
PRINT_NEWLINE<br>
LOAD_CONST        0<br>
RETURN_VALUE<br>
<br>
*********** sed add.sed (1185 lines)<br>
<br>
Complete listing is in:<br>
https://github.com/GillesArcas/numsed/blob/master/examples/add.sed<br>
<br>
x<br>
s/.*/end_of_script;@/<br>
x<br>
bL71<br>
:end_of_script<br>
q<br>
:NameError<br>
....<br>
:L40<br>
s/.*;x;([^;]*)[^|]*$/&#92;1;&/     # PS: x;?;v;x?  HS: ?;v;x?<br>
tL41<br>
s/.*/x/; b NameError           # branch to error if var undefined<br>
<br>
:L60                           # if invalid subtraction<br>
s/^[0-9]*;[0-9]*;[0-9]*;/NAN/  # PS: NAN*<br>
....<br>
:.L73                          # PS: label<br>
s/^R0$//;t R0<br>
s/^R1$//;t R1<br>
s/^end_of_script$//;t end_of_script<br>
b UnknownLabel<br>
<br>
How did you get inspired to do this? Is the intention to produce <br>
something practical, or just a fascinating exploration (nothing wrong <br>
with that)? Any reason called numsed?<br>
<br>
Thanks,<br>
Daniel<br>
<br>
On 10/28/2018 5:28 AM, [email protected] [sed-users] wrote:<br>
&gt; After my full implementation of sed in python (PythonSed https://github.com/GillesArcas/PythonSed), I present to you my compiler from python to sed: numsed https://github.com/GillesArcas/numsed.<br>
&gt;<br>
&gt;<br>
&gt;   OK, a small subset of python but sufficient to express any integer calculation: all operations, assignments, conditionals, loops, functions (recursion is supported) and printing. A lot of testing, including with examples from Project Euler. Testing is done by running the original python script and the resulting sed script and comparing their results.<br>
&gt;<br>
&gt;<br>
&gt;   A lot of improvements are possible, either by completing the compiled features (for instance strings or arrays), or by making the generated sed code more efficient. Note that the digit addition, subtraction and multiplication are borrowed from dc from Greg Ubben and improvements on these operations seems difficult. Anyway, suggestions will be very welcome.<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; [Non-text portions of this message have been removed]<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; ------------------------------------<br>
&gt; Posted by: [email protected]<br>
&gt; ------------------------------------<br>
&gt;<br>
</p>

    </div>
     

    <!--~-|**|PrettyHtmlStart|**|-~-->
    <div style="color: #fff; height: 0;">__._,_.___</div>

          
  
 

    
    <div style="clear:both"> </div>

    <div id="fromDMARC" style="margin-top: 10px;">
        <hr style="height:2px ; border-width:0; color:#E3E3E3; background-color:#E3E3E3;">
        Posted by: Daniel Goldman &lt;[email protected]&gt;        <hr style="height:2px ; border-width:0; color:#E3E3E3; background-color:#E3E3E3;">
     </div>
    <div style="clear:both"> </div>

    <table cellspacing=4px style="margin-top: 10px; margin-bottom: 10px; color: #2D50FD;">
      <tbody>
        <tr>
          <td style="font-size: 12px; font-family: arial; font-weight: bold; padding: 7px 5px 5px;"  >
                          <a style="text-decoration: none; color: #2D50FD" href="https://groups.yahoo.com/neo/groups/sed-users/conversations/messages/9962;_ylc=X3oDMTJwdmY0aGYyBF9TAzk3MzU5NzE0BGdycElkAzI0ODk2MzkEZ3Jwc3BJZAMxNzA5MzM1MDAyBG1zZ0lkAzk5NjIEc2VjA2Z0cgRzbGsDcnBseQRzdGltZQMxNTQwODQ4NzQy?act=reply&messageNum=9962">Reply via web post</a>
                      </td>
          <td>&bull;</td>
          <td style="font-size: 12px; font-family: arial; padding: 7px 5px 5px;" >
            <a href="mailto:[email protected]?subject=Re%3A%20Computing%20with%20sed%3A%20a%20compiler%20from%20python%20to%20sed" style="text-decoration: none; color: #2D50FD;">
               Reply to sender            </a>
          </td>
          <td>&bull;</td>
          <td style="font-size: 12px; font-family: arial; padding: 7px 5px 5px;">
            <a href="mailto:[email protected]?subject=Re%3A%20Computing%20with%20sed%3A%20a%20compiler%20from%20python%20to%20sed" style="text-decoration: none; color: #2D50FD">
              Reply to group            </a>
          </td>
          <td>&bull;</td>
          <td style="font-size: 12px; font-family: arial; padding: 7px 5px 5px;" >
            <a href="https://groups.yahoo.com/neo/groups/sed-users/conversations/newtopic;_ylc=X3oDMTJlNmtyaGNqBF9TAzk3MzU5NzE0BGdycElkAzI0ODk2MzkEZ3Jwc3BJZAMxNzA5MzM1MDAyBHNlYwNmdHIEc2xrA250cGMEc3RpbWUDMTU0MDg0ODc0Mg--" style="text-decoration: none; color: #2D50FD">Start a New Topic</a>
          </td>
          <td>&bull;</td>
          <td style="font-size: 12px; font-family: arial; padding: 7px 5px 5px;color: #2D50FD;" >
                            <a href="https://groups.yahoo.com/neo/groups/sed-users/conversations/topics/9959;_ylc=X3oDMTM0djNjMnZnBF9TAzk3MzU5NzE0BGdycElkAzI0ODk2MzkEZ3Jwc3BJZAMxNzA5MzM1MDAyBG1zZ0lkAzk5NjIEc2VjA2Z0cgRzbGsDdnRwYwRzdGltZQMxNTQwODQ4NzQyBHRwY0lkAzk5NTk-" style="text-decoration: none; color: #2D50FD;">Messages in this topic</a>
                (4)
                      </td>
        </tr>
      </tbody>
    </table>

        
<div id="megaphoneModule">
            <hr style="height:2px ; border-width:0; color:#E3E3E3; background-color:#E3E3E3;">
        <div>
	     <div class="stream" style="margin-bottom:10px;">
        <div style="background-color:white;">
            <div class="sn-img" style="display:inline;"><img name="tn_file" style="padding:0px 10px;vertical-align:top;margin-top:5px;" src="https://s.yimg.com/ru/static/images/yg/img/megaphone/1464031581_phpFA8bON" height="82" width="82"></div>
            <div class="mod-txt" style="display:inline-block;">
                <a rel="nofollow" name="sub_url" target="_blank" href="https://yho.com/1wwmgg" style="color:#0000FF;display:block;margin-left:5px;text-decoration:none;"><span style="font-size:15px;">Have you tried the highest rated email app?</span></a>
                <div style="max-width:530px;padding:2px 5px;">With 4.5 stars in iTunes, the Yahoo Mail app is the highest rated email app on the market. What are you waiting for? Now you can access all your inboxes (Gmail, Outlook, AOL and more) in one place. Never delete an email again with 1000GB of free cloud storage.</div>
            </div>
        </div>
    </div>        </div>  
     
    <hr style="height:2px ; border-width:0; color:#E3E3E3; background-color:#E3E3E3;">
</div>

<!------- Start Nav Bar ------>


    <div id="ygrp-grfd" style="font-family: Verdana; font-size: 12px; padding: 15px 0;">
      
<!-- |**|begin egp html banner|**| -->

      -- <BR>
      
<!-- |**|end egp html banner|**| -->

    </div>
  

 

<!-- |**|begin egp html banner|**| -->
<div id="ygrp-vital" style="background-color: #f2f2f2; font-family: Verdana; font-size: 10px; margin-bottom: 10px; padding: 10px;">

    <span id="vithd" style="font-weight: bold; color: #333; text-transform: uppercase; "><a href="https://groups.yahoo.com/neo/groups/sed-users/info;_ylc=X3oDMTJlZTEwNnZvBF9TAzk3MzU5NzE0BGdycElkAzI0ODk2MzkEZ3Jwc3BJZAMxNzA5MzM1MDAyBHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTU0MDg0ODc0Mg--" style="text-decoration: none;">Visit Your Group</a></span>

     <ul style="list-style-type: none; margin: 0; padding: 0; display: inline;">
            <li style="border-right: 1px solid #000; font-weight: 700; display: inline; padding: 0 5px; margin-left: 0;">
      <span class="cat"><a href="https://groups.yahoo.com/neo/groups/sed-users/members/all;_ylc=X3oDMTJmZWc2ZjU3BF9TAzk3MzU5NzE0BGdycElkAzI0ODk2MzkEZ3Jwc3BJZAMxNzA5MzM1MDAyBHNlYwN2dGwEc2xrA3ZtYnJzBHN0aW1lAzE1NDA4NDg3NDI-" style="text-decoration: none;">New Members</a></span>
      <span class="ct" style="color: #ff7900;">1</span>
    </li>
                                              </ul>
  </div>


<div id="ft" style="font-family: Arial; font-size: 11px; margin-top: 5px; padding: 0 2px 0 0; clear: both;">
  <a href="https://groups.yahoo.com/neo;_ylc=X3oDMTJkNmIxN2lkBF9TAzk3MzU5NzE0BGdycElkAzI0ODk2MzkEZ3Jwc3BJZAMxNzA5MzM1MDAyBHNlYwNmdHIEc2xrA2dmcARzdGltZQMxNTQwODQ4NzQy" style="float: left;"><img src="http://l.yimg.com/ru/static/images/yg/img/email/new_logo/logo-groups-137x15.png" height="15" width="137" alt="Yahoo! Groups" style="border: 0;"/></a>
  <div style="color: #747575; float: right;"> &bull; <a href="https://info.yahoo.com/privacy/us/yahoo/groups/details.html" style="text-decoration: none;">Privacy</a> &bull; <a href="mailto:[email protected]?subject=Unsubscribe" style="text-decoration: none;">Unsubscribe</a> &bull; <a href="https://info.yahoo.com/legal/us/yahoo/utos/terms/" style="text-decoration: none;">Terms of Use</a> </div>
</div>
<br>

<!-- |**|end egp html banner|**| -->

  </div> <!-- ygrp-msg -->

 
  <!-- Sponsor -->
  <!-- |**|begin egp html banner|**| -->
  <div id="ygrp-sponsor" style="width:160px; float:right; clear:none; margin:0 0 25px 0; background: #fff;">

<!-- Start Recommendations -->
<div id="ygrp-reco">
     </div>
<!-- End Recommendations -->

          
<!-- |**|begin egp html banner|**| -->

    <div id="ygrp-lc">
      <div id="hd">SPONSORED LINKS</div>
      <div id="lc">
        <div class="ad" style="color:#628C2A; font-family:Arial; font-weight:bold;">
                      <script type='text/javascript'>document.write('<a href="https://us.y.atwola.com/?adlink|5113.1|221794|0|16|AdId=-3;BnId=0;itime=848741790;kvmn=y100000;kvssp=brxd;kvpgcolo=bf1;kvadtc%5Fdvmktname=unknown;kvadtc%5Fdvosplt=unknown;kvadtc%5Fdvbrand=unknown;kvadtc%5Fdvtype=unknown;kvadtc%5Fdvmodel=unknown;kvrepo%5Fdvosplt=unknown;kvadtc%5Fdvosversion=UNKNOWN;kvadtc%5Fcrbrand=wifi%5Fus;kvadtc%5Fcrcountry=us;kvadtc%5Fcontype=wifi;gdpr=0;adclntid=1004;spaceid=1709335002;" target=_top><img src="https://aka-cdn.adtechus.com/images/ATCollapse.gif" border=0 alt="AOL Ad" width="1" height="1" ></a>');
  
</script>
<!--Pointguard Diagnostic Start {"FAC3.0":{
"FAC IP" : "98.139.229.163",
"AdPosition Name" : "LC1",
"sapyECPM" : "0",
"gemniECPM" : "0",
"oneMobileECPM" : "0",
"gd2NetCpm" : "0",
"issapyEmpty" : "true",
"SapyAdSize" : "",
"SapyCustomSection" : "",
"SapyUrl" : "",
" SapyFedStatus" : "federation is not configured for ad slot",
" FedStatus" : "federation is not configured for ad slot"
}-->                          <img alt="" width=1 height=1 src="http://us.adserver.yahoo.com/l?M=#26/D=yahoo/S=:LC1/A=1234567/rand=916803761">
                              </div>
        <div class="ad" style="color:#628C2A; font-family:Arial; font-weight:bold;">
                      <script type='text/javascript'>document.write('<a href="https://us.y.atwola.com/?adlink|5113.1|221794|0|16|AdId=-3;BnId=0;itime=848741795;kvmn=y100000;kvssp=brxd;kvpgcolo=bf1;kvadtc%5Fdvmktname=unknown;kvadtc%5Fdvosplt=unknown;kvadtc%5Fdvbrand=unknown;kvadtc%5Fdvtype=unknown;kvadtc%5Fdvmodel=unknown;kvrepo%5Fdvosplt=unknown;kvadtc%5Fdvosversion=UNKNOWN;kvadtc%5Fcrbrand=wifi%5Fus;kvadtc%5Fcrcountry=us;kvadtc%5Fcontype=wifi;gdpr=0;adclntid=1004;spaceid=1709335002;" target=_top><img src="https://aka-cdn.adtechus.com/images/ATCollapse.gif" border=0 alt="AOL Ad" width="1" height="1" ></a>');
  
</script>
<!--Pointguard Diagnostic Start {"FAC3.0":{
"FAC IP" : "98.139.229.163",
"AdPosition Name" : "LC2",
"sapyECPM" : "0",
"gemniECPM" : "0",
"oneMobileECPM" : "0",
"gd2NetCpm" : "0",
"issapyEmpty" : "true",
"SapyAdSize" : "",
"SapyCustomSection" : "",
"SapyUrl" : "",
" SapyFedStatus" : "federation is not configured for ad slot",
" FedStatus" : "federation is not configured for ad slot"
}-->                          <img alt="" width=1 height=1 src="http://us.adserver.yahoo.com/l?M=#26/D=yahoo/S=:LC2/A=1234567/rand=481250573">
                              </div>
        <div class="ad" style="color:#628C2A; font-family:Arial; font-weight:bold;">
                      <script type='text/javascript'>document.write('<a href="https://us.y.atwola.com/?adlink|5113.1|221794|0|16|AdId=-3;BnId=0;itime=848741798;kvmn=y100000;kvssp=brxd;kvpgcolo=bf1;kvadtc%5Fdvmktname=unknown;kvadtc%5Fdvosplt=unknown;kvadtc%5Fdvbrand=unknown;kvadtc%5Fdvtype=unknown;kvadtc%5Fdvmodel=unknown;kvrepo%5Fdvosplt=unknown;kvadtc%5Fdvosversion=UNKNOWN;kvadtc%5Fcrbrand=wifi%5Fus;kvadtc%5Fcrcountry=us;kvadtc%5Fcontype=wifi;gdpr=0;adclntid=1004;spaceid=1709335002;" target=_top><img src="https://aka-cdn.adtechus.com/images/ATCollapse.gif" border=0 alt="AOL Ad" width="1" height="1" ></a>');
  
</script>
<!--Pointguard Diagnostic Start {"FAC3.0":{
"FAC IP" : "98.139.229.163",
"AdPosition Name" : "LC3",
"sapyECPM" : "0",
"gemniECPM" : "0",
"oneMobileECPM" : "0",
"gd2NetCpm" : "0",
"issapyEmpty" : "true",
"SapyAdSize" : "",
"SapyCustomSection" : "",
"SapyUrl" : "",
" SapyFedStatus" : "federation is not configured for ad slot",
" FedStatus" : "federation is not configured for ad slot"
}-->                          <img alt="" width=1 height=1 src="http://us.adserver.yahoo.com/l?M=#26/D=yahoo/S=:LC3/A=1234567/rand=741216400">
                              </div>
      </div>
    </div>
    
<!-- |**|end egp html banner|**| -->

  

  </div>   <!-- |**|end egp html banner|**| -->

  <div style="clear:both; color: #FFF; font-size:1px;">.</div>
</div>

  <img src="http://geo.yahoo.com/serv?s=97359714/grpId=2489639/grpspId=1709335002/msgId=9962/stime=1540848742/nc1=1234567/nc2=2/nc3=3" width="1" height="1"> <br>

<img src="http://y.analytics.yahoo.com/fpc.pl?ywarid=515FB27823A7407E&a=10001310322279&js=no&resp=img&cf12=CP" width="1" height="1"> 

<div style="color: #fff; height: 0;">__,_._,___</div>
<!--~-|**|PrettyHtmlEnd|**|-~-->

</body>

<!--~-|**|PrettyHtmlStart|**|-~-->
<head>
  <style type="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;
  }
  
  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.file-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;
  } 

  #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; 
  } 
  -->
  </style>
</head>

<!--~-|**|PrettyHtmlEnd|**|-~-->
</html>
<!-- end group email -->


--URJe9Z4dWpY3Wk5wfx-bKiQrjRKn4-qZP9BZhEA--