----boundary-LibPST-iamunique-677103892_-_-
Content-type: text/plain
??? Thanks for clarifying how it can be done, but I'm with Wojtek Skulski on this one. First, it is much longer than my example, and therefore harder to read.
More importantly, in your example I had a real problem figuring out that procedure Area used procedure ValueOf. This crucial information is not presented in the interface--you have to look inside the procedure. In my example, the procedural variable is clearly passed to the function (i.e., procedure), and this fact can be seen from a glance at the parameters. My example is also type-safe and robust.
I'm not sure we're making any progress with fancy programming.
Sincerely,
Rex Couture
At 11:47 AM 11/17/2004 -0800, Stan Warford wrote:
>With object-orientation, procedure types are redundant and should
>be eliminated, IMHO. You should design your numerical processing
>server as an abstract class, and specify to the client what your server
>needs to provide its service. Namely it needs a function of one real
>variable that returns a real value. You also specify the service your
>module is to provide. Namely you will provide an integration function.
>Here is your server:
>
>=====================================================
>MODULE NumericalProcessor;
> IMPORT Math;
>
> TYPE
> NumProcessor* = POINTER TO ABSTRACT RECORD END;
>
> PROCEDURE (n: NumProcessor) ValueOf* (x: REAL): REAL, NEW, ABSTRACT;
>
> PROCEDURE (n: NumProcessor) Area* (min, max, tol: REAL): REAL, NEW;
> BEGIN
> RETURN n.ValueOf (min) + n.ValueOf (max)
> END Area;
>
>END NumericalProcessor.
>=====================================================
>
>To use your service, the client is obliged to implement the function
>that you require. Inheritance is the mechanism. Here is a client:
>
>=====================================================
>MODULE NumericalApplication;
> IMPORT NumericalProcessor, Math, StdLog;
>
> TYPE
> MyApplication* = POINTER TO RECORD NumericalProcessor.NumProcessor)
>END;
> PROCEDURE (m: MyApplication) ValueOf* (x: REAL): REAL;
> BEGIN
> RETURN x * x
> END ValueOf;
>
> PROCEDURE Do*;
> VAR
> m: MyApplication;
> BEGIN
> NEW(m);
> StdLog.Ln;
> StdLog.Real( m.Area(3, 4, 0.001));
> StdLog.Ln
> END Do;
>
>END NumericalApplication.
>=====================================================
>
>The server "programs to the abstraction". Type checking of the parameter
>list is strong. The interface of the server module is crisp. I think it
>is a big
>conceptual improvement over procedure types.
>
>Stan
>
>J. Stanley Warford
>Professor of Computer Science
>Pepperdine University
>Malibu, CA 90263
>Stan.Warford{([at]})nowhere.xy>310-506-4332
>
>On Nov 17, 2004, at 10:21 AM, skulski{([at]})nowhere.xy>
>> How about the following. I typed this right now so not sure if this is
>> all
>> correct, but gives you a flavor. IMHO this is an illustration why
>> procedure types should *not* be dropped from the language. Purists will
>> say procedure types are not needed, but then purists probably have
>> never
>> calculated any integrals anyway. The bottom line: do not break away
>> from
>> 50 years of tradition unless you can convincingly argue there is no
>> other
>> way. Or, if you break away for puristic reasons, then do not complain
>> people do not want to use the language anymore.
>>
>> MODULE Integrand;
>> TYPE
>> FnType * = POINTER TO RECORD
>> END;
>> PROCEDURE (f: FnType) Calculate * (x: REAL), NEW;
>> BEGIN
>> RETURN x*x (*just an example*)
>> END Calculate;
>> END Integrand.
>>
>> MODULE Integrate;
>> IMPORT Integrand;
>>
>> PROCEDURE Integ (
>> func: Integrand.FnType;
>> xMin, xMax, tol: REAL
>> ): REAL;
>> BEGIN
>> (* call func like this: func.Calculate (x) *)
>> END Integrate;
>>
>>> If procedure types are obsolete, how do I write a library
>>> procedure that *requires* a functional parameter? Example:
>>>
>>> TYPE
>>> FnType = FUNCTION(x: REAL): REAL;
>>>
>>> FUNCTION integral( integrand: FnType; xMin, xMax, tol: REAL): REAL
>>>
>>> Sincerely,
>>> Rex Couture, Ph. D.
>>> Dept. of Earth and Planetary Sciences
>>> Campus Box 1169
>>> Washington University in St. Louis
>>> 1 Brookings Dr.
>>> St. Louis MO 63130
>>>
>>> Voice: (314) 935-4194
>>> Fax: (314) 935-7361
>>> rex{([at]})nowhere.xy--------------------------------------------
To unsubscribe from this mailing list, send a message containing the word "unsubscribe" to:
blackbox-request{([at]})nowhere.xy
To get a list of valid e-mail commands and instructions on their usage, send a message containing the word "help" to the above address.
Send any problem reports or questions related to this email list to the list owner at
owner-blackbox{([at]})nowhere.xy
Current posting policy:
a) To post you should use the same address by which you are subscribed to the mailing list. That way, the list server will recognize you as subscriber and forward your posting immediately, without creating any overhead.
b) If, for some reason, you cannot post from the address, by which you are subscribed, your message will be moderated to avoid spam. Please understand that moderation will often cause some delay, in particular over weekends or holydays.
----boundary-LibPST-iamunique-677103892_-_-
Content-type: application/rtf
Content-transfer-encoding: base64
Content-Disposition: attachment; filename="rtf-body.rtf"
e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZnJvbXRleHQgXGRlZmYwe1xmb250dGJsDQp7XGYwXGZz
d2lzcyBBcmlhbDt9DQp7XGYxXGZtb2Rlcm4gQ291cmllciBOZXc7fQ0Ke1xmMlxmbmlsXGZjaGFy
c2V0MiBTeW1ib2w7fQ0Ke1xmM1xmbW9kZXJuXGZjaGFyc2V0MCBDb3VyaWVyIE5ldzt9fQ0Ke1xj
b2xvcnRibFxyZWQwXGdyZWVuMFxibHVlMDtccmVkMFxncmVlbjBcYmx1ZTI1NTt9DQpcdWMxXHBh
cmRccGxhaW5cZGVmdGFiMzYwIFxmMFxmczIwICAgICAgICAgPz8/ICBUaGFua3MgZm9yIGNsYXJp
ZnlpbmcgaG93IGl0IGNhbiBiZSBkb25lLCBidXQgSSdtIHdpdGggV29qdGVrIFNrdWxza2kgb24g
dGhpcyBvbmUuICBGaXJzdCwgaXQgaXMgbXVjaCBsb25nZXIgdGhhbiBteSBleGFtcGxlLCBhbmQg
dGhlcmVmb3JlIGhhcmRlciB0byByZWFkLlxwYXINClxwYXINCiAgICAgICAgTW9yZSBpbXBvcnRh
bnRseSwgaW4geW91ciBleGFtcGxlIEkgaGFkIGEgcmVhbCBwcm9ibGVtIGZpZ3VyaW5nIG91dCB0
aGF0IHByb2NlZHVyZSBBcmVhIHVzZWQgcHJvY2VkdXJlIFZhbHVlT2YuICBUaGlzIGNydWNpYWwg
aW5mb3JtYXRpb24gaXMgbm90IHByZXNlbnRlZCBpbiB0aGUgaW50ZXJmYWNlLS15b3UgaGF2ZSB0
byBsb29rIGluc2lkZSB0aGUgcHJvY2VkdXJlLiAgSW4gbXkgZXhhbXBsZSwgdGhlIHByb2NlZHVy
YWwgdmFyaWFibGUgaXMgY2xlYXJseSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uIChpLmUuLCBwcm9j
ZWR1cmUpLCBhbmQgdGhpcyBmYWN0IGNhbiBiZSBzZWVuIGZyb20gYSBnbGFuY2UgYXQgdGhlIHBh
cmFtZXRlcnMuICBNeSBleGFtcGxlIGlzIGFsc28gdHlwZS1zYWZlIGFuZCByb2J1c3QuXHBhcg0K
XHBhcg0KICAgICAgICBJJ20gbm90IHN1cmUgd2UncmUgbWFraW5nIGFueSBwcm9ncmVzcyB3aXRo
IGZhbmN5IHByb2dyYW1taW5nLlxwYXINClxwYXINClNpbmNlcmVseSxccGFyDQpSZXggQ291dHVy
ZVxwYXINClxwYXINClxwYXINCkF0IDExOjQ3IEFNIDExLzE3LzIwMDQgLTA4MDAsIFN0YW4gV2Fy
Zm9yZCB3cm90ZTpccGFyDQo+V2l0aCBvYmplY3Qtb3JpZW50YXRpb24sIHByb2NlZHVyZSB0eXBl
cyBhcmUgcmVkdW5kYW50IGFuZCBzaG91bGRccGFyDQo+YmUgZWxpbWluYXRlZCwgSU1ITy4gWW91
IHNob3VsZCBkZXNpZ24geW91ciBudW1lcmljYWwgcHJvY2Vzc2luZ1xwYXINCj5zZXJ2ZXIgYXMg
YW4gYWJzdHJhY3QgY2xhc3MsIGFuZCBzcGVjaWZ5IHRvIHRoZSBjbGllbnQgd2hhdCB5b3VyIHNl
cnZlclxwYXINCj5uZWVkcyB0byBwcm92aWRlIGl0cyBzZXJ2aWNlLiBOYW1lbHkgaXQgbmVlZHMg
YSBmdW5jdGlvbiBvZiBvbmUgcmVhbFxwYXINCj52YXJpYWJsZSB0aGF0IHJldHVybnMgYSByZWFs
IHZhbHVlLiBZb3UgYWxzbyBzcGVjaWZ5IHRoZSBzZXJ2aWNlIHlvdXJccGFyDQo+bW9kdWxlIGlz
IHRvIHByb3ZpZGUuIE5hbWVseSB5b3Ugd2lsbCBwcm92aWRlIGFuIGludGVncmF0aW9uIGZ1bmN0
aW9uLlxwYXINCj5IZXJlIGlzIHlvdXIgc2VydmVyOlxwYXINCj5ccGFyDQo+PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1ccGFyDQo+TU9EVUxFICBO
dW1lcmljYWxQcm9jZXNzb3I7XHBhcg0KPlx0YWIgSU1QT1JUIE1hdGg7XHBhcg0KPlxwYXINCj5c
dGFiIFRZUEVccGFyDQo+XHRhYiBcdGFiIE51bVByb2Nlc3NvciogPSBQT0lOVEVSIFRPIEFCU1RS
QUNUIFJFQ09SRCBFTkQ7XHBhcg0KPlxwYXINCj5cdGFiIFBST0NFRFVSRSAobjogTnVtUHJvY2Vz
c29yKSBWYWx1ZU9mKiAoeDogUkVBTCk6IFJFQUwsIE5FVywgQUJTVFJBQ1Q7XHBhcg0KPlxwYXIN
Cj5cdGFiIFBST0NFRFVSRSAobjogTnVtUHJvY2Vzc29yKSBBcmVhKiAobWluLCBtYXgsIHRvbDog
UkVBTCk6IFJFQUwsIE5FVztccGFyDQo+XHRhYiBCRUdJTlxwYXINCj5cdGFiIFx0YWIgUkVUVVJO
IG4uVmFsdWVPZiAobWluKSArIG4uVmFsdWVPZiAobWF4KVxwYXINCj5cdGFiIEVORCBBcmVhO1xw
YXINCj5ccGFyDQo+RU5EIE51bWVyaWNhbFByb2Nlc3Nvci5ccGFyDQo+PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1ccGFyDQo+XHBhcg0KPlRvIHVz
ZSB5b3VyIHNlcnZpY2UsIHRoZSBjbGllbnQgaXMgb2JsaWdlZCB0byBpbXBsZW1lbnQgdGhlIGZ1
bmN0aW9uXHBhcg0KPnRoYXQgeW91IHJlcXVpcmUuIEluaGVyaXRhbmNlIGlzIHRoZSBtZWNoYW5p
c20uIEhlcmUgaXMgYSBjbGllbnQ6XHBhcg0KPlxwYXINCj49PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxwYXINCj5NT0RVTEUgIE51bWVyaWNhbEFw
cGxpY2F0aW9uO1xwYXINCj5cdGFiIElNUE9SVCBOdW1lcmljYWxQcm9jZXNzb3IsIE1hdGgsIFN0
ZExvZztccGFyDQo+XHBhcg0KPlx0YWIgVFlQRVxwYXINCj5cdGFiIFx0YWIgTXlBcHBsaWNhdGlv
biogPSBQT0lOVEVSIFRPIFJFQ09SRCBOdW1lcmljYWxQcm9jZXNzb3IuTnVtUHJvY2Vzc29yKSBc
cGFyDQo+RU5EO1xwYXINCj5cdGFiIFBST0NFRFVSRSAobTogTXlBcHBsaWNhdGlvbikgVmFsdWVP
ZiogKHg6IFJFQUwpOiBSRUFMO1xwYXINCj5cdGFiIEJFR0lOXHBhcg0KPlx0YWIgXHRhYiBSRVRV
Uk4geCAqIHhccGFyDQo+XHRhYiBFTkQgVmFsdWVPZjtccGFyDQo+XHBhcg0KPlx0YWIgUFJPQ0VE
VVJFIERvKjtccGFyDQo+XHRhYiBWQVJccGFyDQo+XHRhYiBcdGFiIG06IE15QXBwbGljYXRpb247
XHBhcg0KPlx0YWIgQkVHSU5ccGFyDQo+XHRhYiBcdGFiIE5FVyhtKTtccGFyDQo+XHRhYiBcdGFi
IFN0ZExvZy5MbjtccGFyDQo+XHRhYiBcdGFiIFN0ZExvZy5SZWFsKCBtLkFyZWEoMywgNCwgMC4w
MDEpKTtccGFyDQo+XHRhYiBcdGFiIFN0ZExvZy5MblxwYXINCj5cdGFiIEVORCBEbztccGFyDQo+
XHBhcg0KPkVORCBOdW1lcmljYWxBcHBsaWNhdGlvbi5ccGFyDQo+PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1ccGFyDQo+XHBhcg0KPlRoZSBzZXJ2
ZXIgInByb2dyYW1zIHRvIHRoZSBhYnN0cmFjdGlvbiIuIFR5cGUgY2hlY2tpbmcgb2YgdGhlIHBh
cmFtZXRlclxwYXINCj5saXN0IGlzIHN0cm9uZy4gVGhlIGludGVyZmFjZSBvZiB0aGUgc2VydmVy
IG1vZHVsZSBpcyBjcmlzcC4gSSB0aGluayBpdCBccGFyDQo+aXMgYSBiaWdccGFyDQo+Y29uY2Vw
dHVhbCBpbXByb3ZlbWVudCBvdmVyIHByb2NlZHVyZSB0eXBlcy5ccGFyDQo+XHBhcg0KPlN0YW5c
cGFyDQo+XHBhcg0KPkouIFN0YW5sZXkgV2FyZm9yZFxwYXINCj5Qcm9mZXNzb3Igb2YgQ29tcHV0
ZXIgU2NpZW5jZVxwYXINCj5QZXBwZXJkaW5lIFVuaXZlcnNpdHlccGFyDQo+TWFsaWJ1LCBDQSA5
MDI2M1xwYXINCj5TdGFuLldhcmZvcmRAcGVwcGVyZGluZS5lZHVccGFyDQo+MzEwLTUwNi00MzMy
XHBhcg0KPlxwYXINCj5PbiBOb3YgMTcsIDIwMDQsIGF0IDEwOjIxIEFNLCBza3Vsc2tpQHBhcy5y
b2NoZXN0ZXIuZWR1IHdyb3RlOlxwYXINCj5ccGFyDQo+PiBIb3cgYWJvdXQgdGhlIGZvbGxvd2lu
Zy4gSSB0eXBlZCB0aGlzIHJpZ2h0IG5vdyBzbyBub3Qgc3VyZSBpZiB0aGlzIGlzIFxwYXINCj4+
IGFsbFxwYXINCj4+IGNvcnJlY3QsIGJ1dCBnaXZlcyB5b3UgYSBmbGF2b3IuIElNSE8gdGhpcyBp
cyBhbiBpbGx1c3RyYXRpb24gd2h5XHBhcg0KPj4gcHJvY2VkdXJlIHR5cGVzIHNob3VsZCAqbm90
KiBiZSBkcm9wcGVkIGZyb20gdGhlIGxhbmd1YWdlLiBQdXJpc3RzIHdpbGxccGFyDQo+PiBzYXkg
cHJvY2VkdXJlIHR5cGVzIGFyZSBub3QgbmVlZGVkLCBidXQgdGhlbiBwdXJpc3RzIHByb2JhYmx5
IGhhdmUgXHBhcg0KPj4gbmV2ZXJccGFyDQo+PiBjYWxjdWxhdGVkIGFueSBpbnRlZ3JhbHMgYW55
d2F5LiBUaGUgYm90dG9tIGxpbmU6IGRvIG5vdCBicmVhayBhd2F5IFxwYXINCj4+IGZyb21ccGFy
DQo+PiA1MCB5ZWFycyBvZiB0cmFkaXRpb24gdW5sZXNzIHlvdSBjYW4gY29udmluY2luZ2x5IGFy
Z3VlIHRoZXJlIGlzIG5vIFxwYXINCj4+IG90aGVyXHBhcg0KPj4gd2F5LiBPciwgaWYgeW91IGJy
ZWFrIGF3YXkgZm9yIHB1cmlzdGljIHJlYXNvbnMsIHRoZW4gZG8gbm90IGNvbXBsYWluXHBhcg0K
Pj4gcGVvcGxlIGRvIG5vdCB3YW50IHRvIHVzZSB0aGUgbGFuZ3VhZ2UgYW55bW9yZS5ccGFyDQo+
PlxwYXINCj4+IE1PRFVMRSBJbnRlZ3JhbmQ7XHBhcg0KPj4gVFlQRVxwYXINCj4+ICAgRm5UeXBl
ICogPSBQT0lOVEVSIFRPIFJFQ09SRFxwYXINCj4+ICAgRU5EO1xwYXINCj4+IFBST0NFRFVSRSAo
ZjogRm5UeXBlKSBDYWxjdWxhdGUgKiAoeDogUkVBTCksIE5FVztccGFyDQo+PiBCRUdJTlxwYXIN
Cj4+ICAgIFJFVFVSTiB4KnggICAoKmp1c3QgYW4gZXhhbXBsZSopXHBhcg0KPj4gRU5EIENhbGN1
bGF0ZTtccGFyDQo+PiBFTkQgSW50ZWdyYW5kLlxwYXINCj4+XHBhcg0KPj4gTU9EVUxFIEludGVn
cmF0ZTtccGFyDQo+PiBJTVBPUlQgSW50ZWdyYW5kO1xwYXINCj4+XHBhcg0KPj4gUFJPQ0VEVVJF
IEludGVnIChccGFyDQo+PiAgICAgICAgZnVuYzogSW50ZWdyYW5kLkZuVHlwZTtccGFyDQo+PiAg
ICAgICAgeE1pbiwgeE1heCwgdG9sOiBSRUFMXHBhcg0KPj4gICAgICk6IFJFQUw7XHBhcg0KPj4g
QkVHSU5ccGFyDQo+PiAgICAoKiBjYWxsIGZ1bmMgbGlrZSB0aGlzOiBmdW5jLkNhbGN1bGF0ZSAo
eCkgKilccGFyDQo+PiBFTkQgSW50ZWdyYXRlO1xwYXINCj4+XHBhcg0KPj4+ICAgICAgICAgSWYg
cHJvY2VkdXJlIHR5cGVzIGFyZSBvYnNvbGV0ZSwgaG93IGRvIEkgd3JpdGUgYSBsaWJyYXJ5XHBh
cg0KPj4+IHByb2NlZHVyZSB0aGF0ICpyZXF1aXJlcyogYSBmdW5jdGlvbmFsIHBhcmFtZXRlcj8g
IEV4YW1wbGU6XHBhcg0KPj4+XHBhcg0KPj4+IFRZUEVccGFyDQo+Pj4gICAgICAgICBGblR5cGUg
PSBGVU5DVElPTih4OiBSRUFMKTogUkVBTDtccGFyDQo+Pj5ccGFyDQo+Pj4gRlVOQ1RJT04gaW50
ZWdyYWwoIGludGVncmFuZDogRm5UeXBlOyB4TWluLCB4TWF4LCB0b2w6IFJFQUwpOiBSRUFMXHBh
cg0KPj4+XHBhcg0KPj4+IFNpbmNlcmVseSxccGFyDQo+Pj4gUmV4IENvdXR1cmUsIFBoLiBELlxw
YXINCj4+PiBEZXB0LiBvZiBFYXJ0aCBhbmQgUGxhbmV0YXJ5IFNjaWVuY2VzXHBhcg0KPj4+IENh
bXB1cyBCb3ggMTE2OVxwYXINCj4+PiBXYXNoaW5ndG9uIFVuaXZlcnNpdHkgaW4gU3QuIExvdWlz
XHBhcg0KPj4+IDEgQnJvb2tpbmdzIERyLlxwYXINCj4+PiBTdC4gTG91aXMgTU8gNjMxMzBccGFy
DQo+Pj5ccGFyDQo+Pj4gVm9pY2U6ICAoMzE0KSA5MzUtNDE5NFxwYXINCj4+PiBGYXg6ICAoMzE0
KSA5MzUtNzM2MVxwYXINCj4+PiByZXhAbGV2ZWUud3VzdGwuZWR1XHBhcg0KLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1ccGFyDQpccGFyDQpUbyB1bnN1YnNjcmli
ZSBmcm9tIHRoaXMgbWFpbGluZyBsaXN0LCBzZW5kIGEgbWVzc2FnZSBjb250YWluaW5nIHRoZSB3
b3JkICJ1bnN1YnNjcmliZSIgdG86XHBhcg0KICAgYmxhY2tib3gtcmVxdWVzdEBvYmVyb24uY2hc
cGFyDQpccGFyDQpUbyBnZXQgYSBsaXN0IG9mIHZhbGlkIGUtbWFpbCBjb21tYW5kcyBhbmQgaW5z
dHJ1Y3Rpb25zIG9uIHRoZWlyIHVzYWdlLCBzZW5kIGEgbWVzc2FnZSBjb250YWluaW5nIHRoZSB3
b3JkICJoZWxwIiB0byB0aGUgYWJvdmUgYWRkcmVzcy5ccGFyDQpccGFyDQpTZW5kIGFueSBwcm9i
bGVtIHJlcG9ydHMgb3IgcXVlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyBlbWFpbCBsaXN0IHRvIHRo
ZSBsaXN0IG93bmVyIGF0XHBhcg0KICAgb3duZXItYmxhY2tib3hAb2Jlcm9uLmNoXHBhcg0KXHBh
cg0KQ3VycmVudCBwb3N0aW5nIHBvbGljeTpccGFyDQpccGFyDQphKSBUbyBwb3N0IHlvdSBzaG91
bGQgdXNlIHRoZSBzYW1lIGFkZHJlc3MgYnkgd2hpY2ggeW91IGFyZSBzdWJzY3JpYmVkIHRvIHRo
ZSBtYWlsaW5nIGxpc3QuIFRoYXQgd2F5LCB0aGUgbGlzdCBzZXJ2ZXIgd2lsbCByZWNvZ25pemUg
eW91IGFzIHN1YnNjcmliZXIgYW5kIGZvcndhcmQgeW91ciBwb3N0aW5nIGltbWVkaWF0ZWx5LCB3
aXRob3V0IGNyZWF0aW5nIGFueSBvdmVyaGVhZC5ccGFyDQpccGFyDQpiKSBJZiwgZm9yIHNvbWUg
cmVhc29uLCB5b3UgY2Fubm90IHBvc3QgZnJvbSB0aGUgYWRkcmVzcywgYnkgd2hpY2ggeW91IGFy
ZSBzdWJzY3JpYmVkLCB5b3VyIG1lc3NhZ2Ugd2lsbCBiZSBtb2RlcmF0ZWQgdG8gYXZvaWQgc3Bh
bS4gUGxlYXNlIHVuZGVyc3RhbmQgdGhhdCBtb2RlcmF0aW9uIHdpbGwgb2Z0ZW4gY2F1c2Ugc29t
ZSBkZWxheSwgaW4gcGFydGljdWxhciBvdmVyIHdlZWtlbmRzIG9yIGhvbHlkYXlzLlxwYXINCn0=
----boundary-LibPST-iamunique-677103892_-_---
Received on Wed Nov 17 2004 - 22:40:23 UTC