--------------040003010707040608020100
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

Jupp wrote:
> My opinion is that one should post the code.

You have made a number of good points in support of that opinion.

I've attached the code I linked to (or tried to link to) earlier to this
mail.

Cheers,
Dave

--------------040003010707040608020100
Content-Type: application/binary;
 nameeak_hash.rb"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filenameeak_hash.rb"

IyBXZWFrSGFzaA0KIw0KIyBBIEhhc2ggdGhhdCBhbGxvd3MgaXRzIHZhbHVlcyB0byBiZSBn
YXJiYWdlLWNvbGxlY3RlZC4NCiMNCiMgT3JpZ2luYWwgY29kZSBieSBNYXVyaWNpbyBGZXJu
YW5kZXo6DQojICAgaHR0cDovL2VpZ2VuY2xhc3Mub3JnL2hpa2kucmI/Y21kPXZpZXcmcD13
ZWFraGFzaCthbmQrd2Vha3JlZg0KIw0KIyBNb2RpZmllZCBzbGlnaHRseSBieSBEYXZlIEJ1
cnQsIDMgSnVseSAyMDA2DQoNCmNsYXNzIFdlYWtIYXNoDQogIGF0dHJfcmVhZGVyIDpjYWNo
ZQ0KICBkZWYgaW5pdGlhbGl6ZSggY2FjaGUgPSBIYXNoLm5ldyApDQogICAgQGNhY2hlID0g
Y2FjaGUNCiAgICBAa2V5X21hcCA9IHt9DQogICAgQHJldl9jYWNoZSA9IEhhc2gubmV3e3xo
LGt8IGhba10gPSB7fX0NCiAgZW5kDQoNCiAgZGVmIFtdKCBrZXkgKQ0KICAgIHZhbHVlX2lk
ID0gQGNhY2hlW2tleV0NCiAgICBPYmplY3RTcGFjZS5faWQycmVmKHZhbHVlX2lkKSB1bmxl
c3MgdmFsdWVfaWQubmlsPw0KICBlbmQNCg0KICBkZWYgW109KCBrZXksIHZhbHVlICkNCiAg
ICBjYXNlIGtleQ0KICAgIHdoZW4gRml4bnVtLCBTeW1ib2wsIHRydWUsIGZhbHNlLCBuaWws
IEJpZ251bQ0KICAgICAga2V5MiA9IGtleQ0KICAgIGVsc2UNCiAgICAgIGtleTIgPSBrZXku
ZHVwDQogICAgZW5kDQogICAgQHJldl9jYWNoZVt2YWx1ZS5vYmplY3RfaWRdW2tleTJdID0g
dHJ1ZQ0KICAgIEBjYWNoZVtrZXkyXSA9IHZhbHVlLm9iamVjdF9pZA0KICAgIEBrZXlfbWFw
W2tleS5vYmplY3RfaWRdID0ga2V5Mg0KDQogICAgT2JqZWN0U3BhY2UuZGVmaW5lX2ZpbmFs
aXplcih2YWx1ZSwgbWV0aG9kKDpyZWNsYWltX3ZhbHVlKSkNCiAgICBPYmplY3RTcGFjZS5k
ZWZpbmVfZmluYWxpemVyKGtleSwgbWV0aG9kKDpyZWNsYWltX2tleSkpDQogIGVuZA0KDQog
IHByaXZhdGUNCiAgICBkZWYgcmVjbGFpbV92YWx1ZSh2YWx1ZV9pZCkNCiAgICAgIGlmIEBy
ZXZfY2FjaGUuaGFzX2tleT8gdmFsdWVfaWQNCiAgICAgICAgQHJldl9jYWNoZVt2YWx1ZV9p
ZF0uZWFjaF9rZXl7fGtleXwgQGNhY2hlLmRlbGV0ZSBrZXl9DQogICAgICAgIEByZXZfY2Fj
aGUuZGVsZXRlIHZhbHVlX2lkDQogICAgICBlbmQNCiAgICBlbmQNCiAgICBkZWYgcmVjbGFp
bV9rZXkoa2V5X2lkKQ0KICAgICAgaWYgQGtleV9tYXAuaGFzX2tleT8ga2V5X2lkDQogICAg
ICAgIEBjYWNoZS5kZWxldGUgQGtleV9tYXBba2V5X2lkXQ0KICAgICAgZW5kDQogICAgZW5k
DQplbmQNCg--------------040003010707040608020100
Content-Type: application/binary;
 nameixed_width_int.rb"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filenameixed_width_int.rb"

Iw0KIyBDLVN0eWxlIEludHMNCiMNCiMgQSByZXNwb25zZSB0byBSdWJ5IFF1aXogIzg1IFty
dWJ5LXRhbGs6MTk5NzIzXQ0KIw0KIyBGaXhlZFdpZHRoSW50IGlzIHRoZSBwYXJlbnQgY2xh
c3Mgb2YgYW4gYXJiaXRyYXJ5IHNldCBvZiBjLXN0eWxlIGludGVnZXINCiMgY2xhc3Nlcy4g
VGhlc2Ugc3ViY2xhc3NlcyBhcmUgYWNjZXNzZWQgbGlrZSBzbzoNCiMNCiMgICBVSW50MzIg
PSBGaXhlZFdpZHRoSW50LnR5cGUoOnVuc2lnbmVkLCAzMikNCiMNCiMgVGhlc2UgY2xhc3Nl
cyB3aWxsIGdpdmUgdXAgaW5zdGFuY2VzIGxpa2Ugc286DQojDQojICAgbiA9IFVJbnQzMi5n
ZXQoNDIpICAjPT4gIzxVSW50MzIgNDI+DQojDQojIEFsdGVybmF0aXZlbHksIHlvdSBjYW4g
Y29udmVydCBmcm9tIG90aGVyIE51bWVyaWMgdHlwZXM6DQojDQojICAgeCA9IDI1NS50b19m
aXhlZF93aWR0aF9pbnQoOnVuc2lnbmVkLCAzMikgICM9PiAjPFVJbnQzMiAyNTU+DQojDQoj
IE92ZXJmbG93cyBhcmUgaWdub3JlZC4NCiMNCiMgQXV0aG9yOiBkYXZlIGF0IGJ1cnQuaWQu
YXUNCiMgQ3JlYXRlZDogMiBKdWwgMjAwNg0KIyBMYXN0IG1vZGlmaWVkOiAzIEp1bCAyMDA2
DQojDQoNCnJlcXVpcmUgJ3dlYWtfaGFzaCcNCg0KY2xhc3MgRml4ZWRXaWR0aEludCA8IE51
bWVyaWMNCg0KICBERUZBVUxUX1NJR05FRCA9IDpzaWduZWQNCiAgREVGQVVMVF9TSVpFID0g
MzENCg0KICBhdHRyX2FjY2Vzc29yIDp2YWx1ZQ0KICBhbGlhc19tZXRob2QgOnRvX2ludCwg
OnZhbHVlDQogIGFsaWFzX21ldGhvZCA6dG9faSwgOnZhbHVlDQoNCiAgZGVmIGluaXRpYWxp
emUNCiAgICByYWlzZSBUeXBlRXJyb3IsICJDYW4ndCBpbnN0YW50aWF0ZSBhYnN0cmFjdCBi
YXNlIGNsYXNzICN7c2VsZi5jbGFzc30iDQogIGVuZA0KDQogIGNsYXNzIDw8IHNlbGYNCg0K
ICAgIGRlZiB0eXBlKHNpZ25lZCA9IERFRkFVTFRfU0lHTkVELCBzaXplID0gREVGQVVMVF9T
SVpFKQ0KDQogICAgICBzaWduZWQgPSBjYXNlIHNpZ25lZA0KICAgICAgICAgICAgICAgd2hl
biA6c2lnbmVkLCB0cnVlOiB0cnVlDQogICAgICAgICAgICAgICB3aGVuIDp1bnNpZ25lZCwg
ZmFsc2U6IGZhbHNlDQogICAgICAgICAgICAgICBlbHNlIHJhaXNlIEFyZ3VtZW50RXhjZXB0
aW9uLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgOnNpZ25lZCwgOnVu
c2lnbmVkLCB0cnVlIG9yIGZhbHNlIg0KICAgICAgICAgICAgICAgZW5kDQoNCiAgICAgIHNp
emUgPSBzaXplLnRvX2ludA0KICAgICAgcmFpc2UgUmFuZ2VFcnJvciwgInNpemUgbXVzdCBi
ZSBncmVhdGVyIHRoYW4gemVybyIgaWYgc2l6ZSA8PSAwDQoNCiAgICAgIEB0eXBlcyB8fD0g
e30NCiAgICAgIEB0eXBlc1tbc2lnbmVkLCBzaXplXV0gfHw9IENsYXNzLm5ldyhzZWxmKSBk
bw0KDQogICAgICAgIEBzaWduZWQsIEBzaXplID0gc2lnbmVkLCBzaXplDQoNCiAgICAgICAg
ZGVmIGluaXRpYWxpemUodmFsdWUpDQoNCiAgICAgICAgICAjIHRydW5jYXRlIGV4Y2VzcyBi
aXRzIHVzaW5nIGEgbWFzaw0KICAgICAgICAgIEB2YWx1ZSA9IHZhbHVlICYgKCgxIDw8IHNl
bGYuY2xhc3Muc2l6ZSkgLSAxKQ0KDQogICAgICAgICAgIyBhIHNpZ25lZCB3aG9zZSBoaWdo
IGJpdCBpcyBzZXQgaXMgbmVnYXRpdmUNCiAgICAgICAgICBpZiBzZWxmLmNsYXNzLnNpZ25l
ZD8gJiYgQHZhbHVlID49ICgxIDw8IChzZWxmLmNsYXNzLnNpemUgLSAxKSkNCiAgICAgICAg
ICAgIEB2YWx1ZSAtPSAoMSA8PCBzZWxmLmNsYXNzLnNpemUpIA0KICAgICAgICAgIGVuZA0K
ICAgICAgICBlbmQNCg0KICAgICAgICBjbGFzcyA8PCBzZWxmICAjIGNsYXNzIG1ldGhvZHMg
b2YgRml4ZWRXaWR0aEludCdzIHN1YmNsYXNzZXMNCg0KICAgICAgICAgIGRlZiBzaWduZWQ/
KCkgQHNpZ25lZCBlbmQNCiAgICAgICAgICBkZWYgc2l6ZSgpIEBzaXplIGVuZA0KDQogICAg
ICAgICAgZGVmIGdldCh2YWx1ZSA9IDApDQogICAgICAgICAgICBAaW5zdGFuY2VzIHx8PSBX
ZWFrSGFzaC5uZXcNCiAgICAgICAgICAgIEBpbnN0YW5jZXNbdmFsdWVdIHx8PSBuZXcodmFs
dWUpDQogICAgICAgICAgZW5kDQoNCiAgICAgICAgICBkZWYgaW5zcGVjdA0KICAgICAgICAg
ICAgaWYgIW5hbWUgfHwgbmFtZS5lbXB0eT8NCiAgICAgICAgICAgICAgIiM8I3tzdXBlcmNs
YXNzLm5hbWV9ICN7c2lnbmVkbmVzc30gI3tzaXplfS1iaXQ+Ig0KICAgICAgICAgICAgZWxz
ZQ0KICAgICAgICAgICAgICBuYW1lDQogICAgICAgICAgICBlbmQNCiAgICAgICAgICBlbmQN
Cg0KICAgICAgICAgIHByaXZhdGUNCiAgICAgICAgICAgIGRlZiBzaWduZWRuZXNzDQogICAg
ICAgICAgICAgIHNpZ25lZD8gPyAnc2lnbmVkJyA6ICd1bnNpZ25lZCcNCiAgICAgICAgICAg
IGVuZA0KICAgICAgICBlbmQNCiAgICAgIGVuZA0KICAgIGVuZA0KDQogICAgcHJpdmF0ZSA6
bmV3DQogICAgZGVmIGdldChzaWduZWQgPSBERUZBVUxUX1NJR05FRCwgc2l6ZSA9IERFRkFV
TFRfU0laRSwgdmFsdWUgPSAwKQ0KICAgICAgRml4ZWRXaWR0aEludC50eXBlKHNpZ25lZCwg
c2l6ZSkuZ2V0KHZhbHVlKQ0KICAgIGVuZA0KICBlbmQNCg0KICBkZWYgY29lcmNlKG90aGVy
KQ0KICAgIFtzZWxmLmNsYXNzLmdldChvdGhlciksIHNlbGZdDQogIGVuZA0KDQogIGRlZiBp
bnNwZWN0DQogICAgIiM8I3tzZWxmLmNsYXNzLmluc3BlY3R9ICNAdmFsdWU+Ig0KICBlbmQN
CiAgZGVmIHRvX3MNCiAgICBAdmFsdWUudG9fcw0KICBlbmQNCg0KICBkZWYgPT0ob3RoZXIp
DQogICAgb3RoZXIgPT0gdG9faQ0KICBlbmQNCiAgZGVmIDw9PihvdGhlcikNCiAgICBvdGhl
ciA8PT4gdG9faQ0KICBlbmQNCg0KICAjIGRlbGVnYXRlIGluc3RhbmNlIG1ldGhvZHMgdG8g
dW5kZXJseWluZyBpbnRlZ2VyIHZhbHVlDQogIGRlZiBtZXRob2RfbWlzc2luZyhtZXRoLCAq
YXJncykNCiAgICB1bmxlc3MgQHZhbHVlLnJlc3BvbmRfdG8/IG1ldGgNCiAgICAgIHJhaXNl
IE5hbWVFcnJvciwgInVuZGVmaW5lZCBtZXRob2QgYCN7bWV0aH0nIGZvciAje3NlbGZ9OiN7
c2VsZi5jbGFzc30iDQogICAgZW5kDQogICAgcmVzdWx0ID0gQHZhbHVlLnNlbmQobWV0aCwg
KmFyZ3MubWFwIHt8YXJnfA0KICAgICAgYXJnLmNsYXNzID09IHNlbGYuY2xhc3MgPyBhcmcu
dG9faSA6IGFyZyB9KQ0KICAgIGNhc2UgcmVzdWx0DQogICAgd2hlbiBJbnRlZ2VyDQogICAg
ICBzZWxmLmNsYXNzLmdldChyZXN1bHQpDQogICAgd2hlbiBFbnVtZXJhYmxlICMgZS5nLiBk
aXZtb2QNCiAgICAgIHJlc3VsdC5tYXAgZG8gfGVsZW1lbnR8DQogICAgICAgIGVsZW1lbnQu
a2luZF9vZj8oSW50ZWdlcikgPyBzZWxmLmNsYXNzLmdldChlbGVtZW50KSA6IGVsZW1lbnQN
CiAgICAgIGVuZA0KICAgIGVsc2UNCiAgICAgIHJlc3VsdA0KICAgIGVuZA0KICBlbmQNCmVu
ZA0KDQpjbGFzcyBOdW1lcmljDQogIGRlZiB0b19maXhlZF93aWR0aF9pbnQoc2lnbmVkID0g
Rml4ZWRXaWR0aEludDo6REVGQVVMVF9TSUdORUQsDQogICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZSA9IEZpeGVkV2lkdGhJbnQ6OkRFRkFVTFRfU0laRSkNCiAgICBGaXhlZFdpZHRo
SW50LnR5cGUoc2lnbmVkLCBzaXplKS5nZXQodG9faSkNCiAgZW5kDQplbmQNCg0KIyBib251
cyBtb2R1bGVzIGZvciBjb21wYXRpYmlsaXR5IHdpdGggZXhhbXBsZXMgaW4gdGhlIHF1aXoN
Cm1vZHVsZSBTaWduZWRGaXhlZFdpZHRoSW50DQogIGRlZiBzZWxmLm5ldyh2YWx1ZSwgc2l6
ZSkNCiAgICBGaXhlZFdpZHRoSW50LnR5cGUoOnNpZ25lZCwgc2l6ZSkuZ2V0KHZhbHVlKS5l
eHRlbmQoc2VsZikNCiAgZW5kDQplbmQNCm1vZHVsZSBVbnNpZ25lZEZpeGVkV2lkdGhJbnQN
CiAgZGVmIHNlbGYubmV3KHZhbHVlLCBzaXplKQ0KICAgIEZpeGVkV2lkdGhJbnQudHlwZSg6
dW5zaWduZWQsIHNpemUpLmdldCh2YWx1ZSkuZXh0ZW5kKHNlbGYpDQogIGVuZA0KZW5kDQoj
IGFuZCBhIGNvdXBsZSBtb3JlIGNsYXNzZXMgdG8gc3VpdCBTYW5kZXIgTGFuZCdzIHRlc3Qg
Y2FzZXMNClNpZ25lZEZXSSA9IFNpZ25lZEZpeGVkV2lkdGhJbnQNClVuc2lnbmVkRldJID0g
VW5zaWduZWRGaXhlZFdpZHRoSW50DQoNCmlmICQwID09IF9fRklMRV9fDQoNCiAgVUludDMy
ID0gRml4ZWRXaWR0aEludC50eXBlKDp1bnNpZ25lZCwgMzIpICAjIGRlZmluZSBhIG5ldyBp
bnRlZ2VyIHR5cGUNCiAgaSA9IFVJbnQzMi5nZXQoNDIpICAgICAgICAgICAgICAgICAgICAg
ICAgICAjIGdldCBpbnN0YW5jZSBvZiB0aGUgdHlwZQ0KICBpID09IDQyICM9PiB0cnVlDQoN
CiAgaiA9IEZpeGVkV2lkdGhJbnQuZ2V0KDp1bnNpZ25lZCwgMzIsIDg2KSAgIyBubyBleHBs
aWNpdCB0eXBlIHVzZWQgaW4gdGhlIGNhbGwNCiAgai5raW5kX29mPyBVSW50MzIgIz0+IHRy
dWUgICAgICAgICAgICAgICAgIyBidXQgdGhlIHJlc3VsdCdzIHR5cGUgaXMgdGhlIHNhbWUN
Cg0KICBrID0gVW5zaWduZWRGaXhlZFdpZHRoSW50Lm5ldygweEZGMDBGRjAwLCAzMikgIyBx
dWl6IGNvbXBhdGlibGUgc3ludGF4DQogIGsua2luZF9vZj8gVW5zaWduZWRGaXhlZFdpZHRo
SW50ICM9PiB0cnVlDQogIGsua2luZF9vZj8gVUludDMyICM9PiB0cnVlDQoNCmVuZA0K
--------------040003010707040608020100--