[Idea] NuLaw - 60 NBT bounty!

I was hoping to have more time for this but I have some obligations to B&C with continued issues to work out for the Nu 2.1.1 release. I’ve created a staging area to start going through all of the existing motions and tacking them as time allows. I’m determined to make NuLaw a thing. Even if I have to do it all myself.

4 Likes

I want to help with interpretation of motions, i think i have a good memory of the context for a lot of them, such as the minimum offset motion. I’m not sure how to help, the github code is just hashes and names right?

For now I’m just putting all of the motions texts, hashes, dates, and other data into a single JSON file with their original thread title as the key. Just so we have everything verified in one place that’s easy to work with programmatically. I don’t think we’re at the interpretation point quite yet.

I’m actually having trouble generating the hashes from some of the older motions before we had Assistant bot, so it’s going to be fun trying to pull the correct raw text to put together the hash :frowning:. Once I had all of the verified information for every motion in the file I was going to start working out the structure defined by @jgeewax above.

I’m still a bit fuzzy on how to put it all together but I think the important part right now is to have all the information from existing motions verified and available.

1 Like

Can you link a few troublesome motions?

I’ve marked two of them so far in the link I posted above.

1 Like

Okay this is moving along. Major problem though. I’m unable to produce the hashes for 6 motions. Meaning I can’t figure out the original text used to produce it. Most of them are from way back before @woolly_sammoth built assistant to standardize the process. If we can’t figure out the raw text to produce the hashes this is going to be really broken.

You can find the compiled list I was able to complete here: https://github.com/CoinGame/NuLawPrep

This is the list of hashes I could not reproduce from the original forum text:

3 Likes

I can confirm that at least two of these motions cannot be verified with http://hash.online-convert.com/ripemd160-generator which most of us used at the time. This may be caused by forum or browser upgrades changing hidden codes.

I think they will need to be re-hashed in the same thread with the question to the community whether they can confirm the new hash. Probably best to repost the proposal into a new post in the same thread with the new hash.

1 Like

The problem comes into play when we build the verification script to run through previous motions. We would probably have to hard code it to ignore certain hashes because we can’t offer up the text. Which I think is dirty, but that seems to be the only choice.

But that’s a problem for another day. So I guess the next step is to re-create the text for those 6 hashes somewhere and have shareholders re-vote on them.

Maybe it can be one motion basically with 6 new verifiable hashes for each proposal referring to the original threads?

I suppose that works. You know I was thinking more about this. Maybe even the python verification script should be part of the NuLaw repo. Like, changes to the script need to be voted on as well, because the script will need to be hard coded to ignore some hashes that are shown in the client. Maybe any scripts or changes to scripts that manage NuLaw itself need to be voted upon.

Just a thought. I dunno if it’s over-complicating the process. I suppose if the script follows the text of a given motion in how it operates then it should be fine to hard code some values to ignore. I would like to spend a little more time trying to recreate the old hashes. It may seem like just a wrinkle to the process but for me it feels like a lot more.

1 Like

Won’t be easy, maybe indeed going back to an old Firefox version as a first step? Going back to an old Discourse version with an old backup will be a bit harder.

I don’t think we should hardcode to ignore. I suspect they will be read into a database or such and than considered to be invalid. By re-creating motions with correct hashes the system would recognise those new motions as being the only ones correct. The date stamping would be read from the blockchain anyway as it is not part of the text of the motion. Maybe a submission date should be added to motion texts, in order to reduce the risk of some types of fraud in the future.

As with any code some people will need to verify it ensuring it does what it says it does, whether that is an independent audit or a number of Shareholders approving changes is up for discussion and may change when the stakes will become higher.

I’m not sure why I can’t recreate the hash for the open source motion, it’s frustrating me because I know that it would have been confirmed multiple times when it was released by more than just myself.

I have a couple of local files on another machine that I can check to see if I can find the originally formatted Markdown that I’ll review when I get back to my house later this morning.

Slightly off-topic again, but figured this was worth looking at: https://medium.com/@PaxDirectory/codex-a-legal-scripting-language-e3723cc76662#.zfvtsfabg

2 Likes

Posting a link here for tracking purposes.

Am I correct in my impression that the validation script will go through the blockchain looking for passed motion hashes and match them up with the ones in motions.json, calculating the hash of … Base64-decoded content-b64? Is hash-content equal to the decoded content-b64?

Good questions. I didn’t clarify those points. I’m not even sure this is the right way to go about the process, but all of the needed information to perform various functions is contained in a format that is easy to work with programatically. That was really my initial goal here.

So, the hash-content field won’t produce the hash. I included it simply to have a plain english version of the text for reading. It has been converted from the original raw text to play nicely within JSON (characters escaped, single lined). The content-b64 is produced using the original raw text. Once decoded it can be passed to a ripemd160 hash function and should produce the hash.

I guess I shouldn’t call that field hash-content… it sounds like you can produce the hash from it but that’s not the case.

So how does this all work within the scheme of the validation script? We’ll produce individual files like every other motion using the new source content for these motions. They will be included in the NuLaws process the same as every other motion. The difference being that when the script tries to validate these individual files (by producing a hash and looking to see if it passed in the blockchain) there will be a condition that looks for the old hash in the blockchain instead of the new one. The purposes of my motion above is to receive consensus from shareholders that this is an acceptable modification to the process.

Other option could be to vote on each of these new hashes all over again, and completely ignore all of the older hashes. Though I think acknowledging this historical change in the code through a single motion is cleaner even if we have to create a special condition in the script for these five motions. The idea being that we won’t ever have to make such a condition again and it will only need to be coded once and left that way.

1 Like

BASE64 of Motion to make the nu source code available:

V2l0aCB0aGUgc3VjY2Vzc2Z1bCBwYXNzYWdlIG9mIHRoaXMgbW90aW9uLCB0aGUgTnUgU2hhcmVo b2xkZXJzWzFdICgiU2hhcmVob2xkZXJzIikgaGF2ZSBpbnN0cnVjdGVkIHRoZSBOdSBEZXZlbG9w bWVudCBUZWFtWzJdICgiRGV2ZWxvcGVycyIpIHRvIG1ha2UgdGhlIE51IHNvdXJjZSBjb2RlIGF2 YWlsYWJsZSB0byB0aGUgZ2VuZXJhbCBwdWJsaWMuIFRoZSB1cGRhdGVkIGxpY2Vuc2Ugd2lsbCBh bGxvdyBmcmVlLCBwZXJtaXNzaXZlIHVzZSBvZiB0aGUgc291cmNlIGNvZGUgaW4gTnUtcmVsYXRl ZCBhbmQgZGVyaXZhdGl2ZSBwcm9qZWN0cy4NCg0KVGhlIE51IHNvdXJjZSBjb2RlIChpbmNsdWRp bmcgdGhlIGNvZGUgdGhhdCBkZXNjcmliZXMgdGhlIHVuZGVybHlpbmcgTnUgbmV0d29yayBwcm90 b2NvbCwgdGhlIGRhZW1vbnMsIHRoZSBHVUlzLCBhbmQgdGhlIGFzc29jaWF0ZWQgc3VwcG9ydCBz eXN0ZW1zIGZvciB0ZXN0aW5nLCBkaXN0cmlidXRpb24sIGFuZCBkZXBsb3ltZW50KSB3aWxsIGlu Y2x1ZGUgYSB0ZXh0IGZpbGUsIENPUFlJTkcsIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUg cHJvamVjdC4NCg0KQ29weXJpZ2h0IChjKSB7WUVBUlszXX0gTnUgRGV2ZWxvcGVycw0KQ29weXJp Z2h0IChjKSAyMDEzLTIwMTQgUGVlcnNoYXJlcyBEZXZlbG9wZXJzDQpDb3B5cmlnaHQgKGMpIDIw MTEtMjAxNCBQZWVyY29pbiAoUFBDb2luKSBEZXZlbG9wZXJzDQpDb3B5cmlnaHQgKGMpIDIwMDkt MjAxMiBCaXRjb2luIERldmVsb3BlcnMNCg0KUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQ0Kb2YgdGhpcyBz b2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJl IiksIHRvIGRlYWwNCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRp bmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMNCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBt ZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwNCmNvcGll cyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0 d2FyZSBpcw0KZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9uczoNCg0KVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lv biBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4NCmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwg cG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLg0KDQpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFT IElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUg0KSU1QTElFRCwg SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFksDQpGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUNCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMg QkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVINCkxJQUJJTElUWSwgV0hF VEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5H IEZST00sDQpPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUg VVNFIE9SIE9USEVSIERFQUxJTkdTIElODQpUSEUgU09GVFdBUkUuDQpFeGlzdGluZyBjb3B5cmln aHRzIGhlbGQgYnkgb3V0c2lkZSBwZXJzb25zIG9yIG9yZ2FuaXphdGlvbnMgZm9yIGNvZGUgaW50 ZWdyYXRlZCBpbnRvLCBvciBhZGFwdGVkIGZvciB1c2Ugd2l0aGluIE51LCB3aWxsIGJlIHJldGFp bmVkIHdpdGhpbiB0aGUgc291cmNlIGNvZGUgYXMgcmVxdWlyZWQgYnkgdGhlaXIgcmVzcGVjdGl2 ZSBsaWNlbnNlcy4gVGhlIGxpY2Vuc2UgdGV4dCBmb2xsb3dzIHRoZSBtb2RlbCBlc3RhYmxpc2hl ZCBieSBCaXRjb2luWzRdIChhbmQgdGhlbiBjb250aW51ZWQgYnkgdGhlIFBlZXJjb2luWzVdIGFu ZCBQZWVyc2hhcmVzWzZdIHNvZnR3YXJlIGZvcmtzKS4NCg0KQWRkaXRpb25hbGx5LCB0aGUgU2hh cmVob2xkZXJzIGdyYW50IHRoZSBEZXZlbG9wZXJzIHRoZSBhYmlsaXR5IHRvIGRldGVybWluZSBh IGxvY2F0aW9uIGZvciB0aGUgY29kZSByZXBvc2l0b3J5IChCaXRCdWNrZXQsIEdpdGh1YiwgZXRj Likgd2hlcmUgdGhlIHNvdXJjZSBjb2RlIHdpbGwgYmUgYXZhaWxhYmxlIHRvIHZpZXcgYW5kIGRv d25sb2FkLiBUaGUgRGV2ZWxvcGVycyB3aWxsIGFjdCBpbiB0aGUgYmVzdCBpbnRlcmVzdHMgb2Yg U2hhcmVob2xkZXJzIHdoZW4gc2VsZWN0aW5nIHRoZSBwZXJzb24ocykgZ3JhbnRlZCBwZXJtaXNz aW9ucyB0byByZXZpZXcsIGFwcHJvdmUsIGFuZCBtZXJnZSBwcm9wb3NlZCBtb2RpZmljYXRpb25z IHRvIHRoZSBOdSBzb3VyY2UgY29kZS4NCg0KRmluYWxseSwgdGhlIFNoYXJlaG9sZGVycyBncmFu dCB0aGUgRGV2ZWxvcGVycyBkaXNjcmV0aW9uIHdoZW4gZGV0ZXJtaW5pbmcgd2hpY2ggZmVhdHVy ZXMsIHN1Ym1pdHRlZCB0byB0aGUgcHJvamVjdCdzIGNvZGUgcmVwb3NpdG9yeSBmcm9tIGluZGl2 aWR1YWwgY29udHJpYnV0b3JzIGJ5IHdheSBvZiAicHVsbCByZXF1ZXN0cywiIGFyZSBtZXJnZWQg aW50byB0aGUgTnUgc291cmNlIGNvZGUuIE1lbWJlcnMgb2YgdGhlIE51IENvbW11bml0eSBhdC1s YXJnZSBhcmUgYWxsIGVtcG93ZXJlZCB0byBpbnRyb2R1Y2UgbW90aW9ucyB0byBpZGVudGlmeSB0 aGUgInJvYWRtYXAiIHRoYXQgY29yZSBkZXZlbG9wbWVudCB3aWxsIGZvbGxvdy4NCg0KT25jZSB0 aGlzIG1vdGlvbiBoYXMgYmVlbiBwYXNzZWQsIHRoZSBEZXZlbG9wZXJzIHdpbGwgaGF2ZSBmb3J0 eS1maXZlICg0NSkgZGF5cyB0byBpbmZvcm0gU2hhcmVob2xkZXJzIG9mIHRoZSBzdGVwcyByZXF1 aXJlZCB0byBvcGVuIHRoZSBOdSBzb3VyY2UgY29kZSB0byB0aGUgcHVibGljLCBhbmQgdG8gdGFr ZSB0aG9zZSBzdGVwcy4gVGhlIGZpbmFsIGFjdGlvbiByZXF1aXJlZCBieSB0aGUgcGFzc2FnZSBv ZiB0aGlzIG1vdGlvbiB3aWxsIGJlIHRvIHJlbGVhc2UgYSBuZXcgdmVyc2lvbiBvZiB0aGUgTnUg Y2xpZW50cyAoZGFlbW9uIGFuZCBHVUksIGZvciBXaW5kb3dzLCBPUyBYLCBhbmQgTGludXgpIHRo YXQgaW5jbHVkZXMgdGhlIHVwZGF0ZWQgc29mdHdhcmUgbGljZW5zZS4gVGhpcyByZWxlYXNlIHdp bGwgYmUgdGFnZ2VkICJ2MS4wLjAiIHdpdGhpbiB0aGUgdmVyc2lvbiBjb250cm9sIHN5c3RlbS4g QWZ0ZXIgbWVldGluZyB0aGUgcmVxdWlyZW1lbnRzLCB0aGlzIG1vdGlvbidzIHB1cnBvc2UgaXMg Y29tcGxldGUsIHdpdGggbm8gZnVydGhlciBhY3Rpb24gcmVxdWlyZWQgYnkgdGhlIFNoYXJlaG9s ZGVycyBvciB0aGUgRGV2ZWxvcGVycy4NCg0KLi4uLi4NCg0KWzFdICJOdSBTaGFyZWhvbGRlcnMi IGFyZSBwZXJzb25zIHdpdGggbGVnaXRpbWF0ZSBhY2Nlc3MgdG8gZW5vdWdoIE5TUiB0byBjYXN0 IGEgdm90ZSBmb3IgdGhpcyBtb3Rpb24gYnkgbWludGluZyBhIHZhbGlkIE51IGJsb2NrLg0KDQpb Ml0gIk51IERldmVsb3BtZW50IFRlYW0iIGFyZSB0aGUgcGVyc29uKHMpIHVsdGltYXRlbHkgcmVz cG9uc2libGUgZm9yIHNvZnR3YXJlIGRldmVsb3BtZW50IG9mIHRoZSBOdSBuZXR3b3JrLCBhbmQg d2hvIGhhdmUgdW5yZXN0cmljdGVkIGFjY2VzcyB0byBOdSBzb3VyY2UgY29kZSB3aGVuIHRoaXMg bW90aW9uIHBhc3Nlcy4NCg0KWzNdIFRoZSBkYXRlIG9mIHRoZSBjb3B5cmlnaHQgbGlzdGVkIGlu IENPUFlJTkcgd2lsbCBtYXRjaCB0aGUgeWVhciB0aGF0IHRoaXMgbW90aW9uIGlzIHBhc3NlZCwg YW5kIHdpbGwgYmUgYmFjay1kYXRlZCB0byAyMDE0IGlmIG5lZWRlZC4gRm9yIGV4YW1wbGUsICdD b3B5cmlnaHQgKGMpIDIwMTQtMjAxNSBOdSBEZXZlbG9wZXJzJyBpZiB0aGUgbW90aW9uIHBhc3Nl cyB0aGlzIHllYXIsIG9yICdDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNiBOdSBEZXZlbG9wZXJzJyBp ZiB0aGUgbW90aW9uIGRvZXMgbm90IHBhc3MgdW50aWwgMjAxNi4NCg0KWzRdIGh0dHBzOi8vZ2l0 aHViLmNvbS9iaXRjb2luL2JpdGNvaW4vYmxvYi9tYXN0ZXIvQ09QWUlORw0KDQpbNV0gaHR0cHM6 Ly9naXRodWIuY29tL3BwY29pbi9wcGNvaW4vYmxvYi9tYXN0ZXIvQ09QWUlORw0KDQpbNl0gaHR0 cHM6Ly9naXRodWIuY29tL1BlZXJzaGFyZXMvUGVlcnNoYXJlcy9ibG9iL21hc3Rlci9DT1BZSU5H

1 Like

BASE64 of Motion to modify terms of custodian grant:

UGFzc2FnZSBvZiB0aGlzIG1vdGlvbiB3aWxsIGFtZW5kIFByb3Bvc2FsIHRvIFByb3ZpZGUgRHVh bC1TaWRlL1NlbGwtU2lkZSBMaXF1aWRpdHkgYW5kIFNoYXJlaG9sZGVyIERpdmlkZW5kcyAoYW1l bmRlZCksIFJldmlzaW9uIDAuMS4xLCBieSBKYW1pZSBNaWxsZXIgKGh0dHBzOi8vZ2lzdC5naXRo dWIuY29tL2ptaWxsZXI5OS84MjczMjE5NDI5ZGVlYzJmMDM4MSkgaW4gdGhlIGZvbGxvd2luZyB3 YXlzOg0KDQogICAgVGhlIGdyYW50IHdpbGwgY29udGludWUgdG8gcHJvdmlkZSBkdWFsLXNpZGUg bGlxdWlkaXR5IHRvIHRoZSBOdSBuZXR3b3JrIHVudGlsIDAxLU9jdC0yMDE1LCBhdCB3aGljaCBw b2ludCB0aGUgZnVuZHMgd2lsbCBiZSByZW1vdmVkIGZyb20gZXhjaGFuZ2UgYW5kIHNlY3VyZWQg dW50aWwgZnVydGhlciBkaXJlY3RlZCBieSBzaGFyZWhvbGRlciBtb3Rpb24uDQoNCiAgICBDdXN0 b2RpYW4gYWRkcmVzc2VzIGFyZSBvbmx5IGFibGUgdG8gc3VibWl0IGxpcXVpZGl0eSBpbmZvIHRv IHRoZSBOdSBjbGllbnQgZm9yIGEgcGVyaW9kIG9mIDI2MCwwMDAgYmxvY2tzLCBvciBhcHByb3hp bWF0ZWx5IHNpeCAoNikgbW9udGhzLiBUaGVyZWZvcmUsIG9uIDIwLUZlYi0yMDE1LCB0aGUgZ3Jh bnQgb3BlcmF0b3Igd2lsbCByZXF1ZXN0IHRoYXQgYSBuZXcgZ3JhbnQgYWRkcmVzcyBhbmQgYW1v dW50IG9mIDEgTkJUIGJlIHZvdGVkIGZvci4gVXBvbiBwYXNzYWdlIG9mIHRoaXMgYWRkcmVzcywg Y29udGludWluZyBncmFudCBvcGVyYXRpb24gd2lsbCBwcm92aWRlIGxpcXVpZGl0eSBpbmZvIHRo cm91Z2ggdGhhdCBhZGRyZXNzLg0KDQogICAgRGl2aWRlbmQgZGlzdHJpYnV0aW9uIHdpbGwgYmUg cmVtb3ZlZCBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgZ3JhbnQuIFRoaXMgYXBwbGllcyB0 byBjdXJyZW50bHkgaGVsZCBmdW5kcyBhcyB3ZWxsIGFzIGFueSBhZGRpdGlvbmFsIGZ1bmRzIGFj Y2VwdGVkIGZyb20gb3RoZXIgTnUgY3VzdG9kaWFucy4gUmVsZWFzZSBvZiBhbnkgZnVuZHMgYmVp bmcgc3RvcmVkIG9yIG9wZXJhdGVkIHVuZGVyIHRoaXMgZ3JhbnQgd2lsbCBvY2N1ciBvbmx5IGlm IG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCg0KICAgICAgICBhKSBU aGUgZ3JhbnQgb3BlcmF0b3IgaXMgcmVxdWVzdGVkIGJ5IHNoYXJlaG9sZGVyIG1vdGlvbiB0aGF0 IHNvbWUgb3IgYWxsIGZ1bmRzIGJlIHBlcm1hbmVudGx5IGRlc3Ryb3llZCAoYnVybmVkIHdpdGgg bm8gY29tcGVuc2F0aW9uIHRvIHNoYXJlaG9sZGVycyBvciBjdXN0b2RpYW4pDQogICAgICAgIGIp IFRoZSBncmFudCBvcGVyYXRvciBpcyByZXF1ZXN0ZWQgYnkgc2hhcmVob2xkZXIgbW90aW9uIHRv IHRyYW5zZmVyIHNvbWUgb3IgYWxsIGZ1bmRzIHRvIGEgZGlmZmVyZW50IGN1c3RvZGlhbg0K

1 Like

After a lot of experiments:

BASE64 of Motion to adjust the dividend distribution structure of custodian grant

UHJvcG9zYWwgU3VtbWFyeToKClRoZSBzdWNjZXNzZnVsIHBhc3NhZ2Ugb2YgdGhpcyBtb3Rpb24g d2lsbCBhbHRlciB0aGUgY29udHJhY3QgYmV0d2VlbiB0aGUgY3VzdG9kaWFuIG9mIEdyYW50IEI3 bW1WZFZRMVNOTmNUOXp1UVJLMUIzQ2J2bzh2SGVvQjEgKCJHcmFudCBLVE0iIC0gMSw4MDAsMDAw IE5CVCArIGZlZXMpIGFuZCB0aGUgTnUgU2hhcmVob2xkZXJzIHJlZ2FyZGluZyBob3cgZGl2aWRl bmRzIG9uIHRoZSBzYWxlIG9mIGdyYW50ZWQgTkJUIHdpbGwgYmUgcGFpZCBvdXQuCgpUaGUgcHJv cG9zZWQgc3RydWN0dXJlIG9mIGRpdmlkZW5kIHBheW91dHMgd2lsbCBhZGp1c3QgZnJvbSB0aGUg Y3VycmVudCAicGVyaW9kIHNhbGVzIGdvYWwiIHN5c3RlbSBvZiB2YXJpYWJsZSBsZW5ndGggYW5k IGZpeGVkIHBlcmNlbnRhZ2UsIHRvIHRoYXQgb2YgYSBtb250aGx5LCBmaXhlZCBwZXJjZW50YWdl IHN5c3RlbSBiYXNlZCBvbiB0aGUgdG90YWwgYW1vdW50IG9mIGJ1eS1zaWRlIGxpcXVpZGl0eSBh dmFpbGFibGUgdG8gdGhlIE51IG5ldHdvcmsuCgpSYXRpb25hbGUgZm9yIFByb3Bvc2FsCgpNYW55 IGFzc3VtcHRpb25zIHdlcmUgbWFkZSB3aGVuIEdyYW50IEtUTSB3YXMgaW5pdGlhbGx5IGludHJv ZHVjZWQgYnkgS2lhcmEgVGFtbSBhbmQgcGFzc2VkIGJ5IHRoZSBOdSBTaGFyZWhvbGRlcnMuIFR3 byBpbXBvcnRhbnQgYXNzdW1wdGlvbnMgdHVybmVkIG91dCB0byBiZSBpbmNvcnJlY3Q6CgpUaGUg YmVsaWVmIHRoYXQgaW4gYWRkaXRpb24gdG8gR3JhbnQgS1RNLCB0aGUgTnUgbmV0d29yayB3b3Vs ZCBoYXZlIGFjY2VzcyB0byBhIHNpZ25pZmljYW50IGFtb3VudCBvZiBsaXF1aWRpdHkgZnJvbSBM UENzLiBUaGlzIGFkZGl0aW9uYWwgYnV5LXNpZGUgc3VwcG9ydCB3b3VsZCBiZSBhIGJhY2tzdG9w IHRoYXQgd291bGQgYWxsb3cgdGhlIHBheW1lbnQgb2YgZGl2aWRlbmRzIHRvIHNoYXJlaG9sZGVy cyBvbiB0aGUgc2NoZWR1bGUgYXMgcHJvcG9zZWQ7CgpUaGF0IHRoZSBtYWluIG1hcmtldCB0aGF0 IEdyYW50IEtUTSB3b3VsZCBiZSBvcGVyYXRpbmcgb24gd291bGQgYmUgTkJUL1VTRCwgcmF0aGVy IHRoYW4gdmFyaW91cyBOQlQvY3J5cHRvIG1hcmtldHMuCgpUaGUgaW5hYmlsaXR5IHRvIGZvcmVj YXN0IHRob3NlIHR3byBjb25kaXRpb25zIGhhcyBtYWRlIGl0IGJvdGggZGlmZmljdWx0IGFuZCBk YW5nZXJvdXMgZm9yIEdyYW50IEtUTSB0byBiZSBvcGVyYXRlZCBpbiBhY2NvcmRhbmNlIHdpdGgg YWxsIG9mIHRoZSBjb25kaXRpb25zIG9mIHRoZSBvcmlnaW5hbCBwcm9wb3NhbC4gVGhpcyBtb3Rp b24gaXMgYW4gYXR0ZW1wdCB0byBjb3Vyc2UtY29ycmVjdCB0aGUgZ3JhbnQncyBvcGVyYXRpb25z IGFuZCBwcm92aWRlIHNoYXJlaG9sZGVycyB3aXRoIHRoZWlyIGV4cGVjdGVkIGRpdmlkZW5kcywg aW4gZnVsbCwgd2hpbGUgc2ltdWx0YW5lb3VzbHkgYXR0ZW1wdGluZyB0byBjb250aW51ZSB0byBz dGFiaWxpemUgdGhlIE51IGxpcXVpZGl0eSBwb29sIGFzIHRoZSBuZXR3b3JrIGdyb3dzLgoKTGlr ZSBhbnkgc3VjY2Vzc2Z1bCB2ZW50dXJlLCBncm93aW5nIHRoZSBidXNpbmVzcyBpcyB0aGUgc3Vy ZXN0IHdheSB0byBzdXBwb3J0IHRoZSBkaXN0cmlidXRpb24gb2YgcHJvZml0cyB0byBzaGFyZWhv bGRlcnMuIFNpbXBsaWZ5aW5nIHRoZSBkaXZpZGVuZCBkaXN0cmlidXRpb24gcHJvY2VzcyBhbmQg bWFraW5nIGl0IHByZWRpY3RhYmxlIHRvIGFsbCBzaGFyZWhvbGRlcnMgcHJvdmlkZXMgYW4gaW1w cm92ZW1lbnQgdG8gYSBzeXN0ZW0gdGhhdCBoYXMgcHJvdmVuIHRvIGJlIGV4dHJlbWVseSB2YXJp YWJsZSBhbmQgbmVlZGxlc3NseSBjb21wbGV4IGFuZCBkaWZmaWN1bHQgdG8gbWFuYWdlLgoKQnkg dHlpbmcgZGl2aWRlbmQgZGlzdHJpYnV0aW9ucyB0byB0aGUgc2l6ZSBhbmQgc3VjY2VzcyBvZiB0 aGUgTnUgbmV0d29yayByYXRoZXIgdGhhbiB0byB0aGUgcHJldmlvdXMgc2NoZWR1bGUsIGl0IGlz IHRoZSBpbnRlbnQgb2YgdGhpcyBwcm9wb3NhbCB0byBncmFjZWZ1bGx5IGFuZCBhcHByb3ByaWF0 ZWx5IGNvbXBlbnNhdGUgc2hhcmVob2xkZXJzIGZvciB0aGUgZXhwYW5zaW9uIG9mIHRoZSBuZXR3 b3JrLiBBdCB0aGUgc2FtZSB0aW1lLCBzaG91bGQgdGhlcmUgYmUgc2xvdyBvciBzdGFnbmFudCBn cm93dGgsIHRoZSBjdXN0b2RpYW4gaXMgYWJsZSB0byBwcm90ZWN0aW5nIHRoZSBOdSBuZXR3b3Jr J3MgTkJUIGhvbGRlcnMnIGludGVyZXN0cyBieSBtYWtpbmcgc3VyZSB0aGF0IGEgc3RlYWR5IHN1 cHBseSBvZiBidXktc2lkZSBsaXF1aWRpdHkgaXMgYXZhaWxhYmxlIGZvciBOQlQgcmVwdXJjaGFz ZSBhbmQgdGhhdCBpdCBpc24ndCBkYW5nZXJvdXNseSByZWR1Y2VkIGJ5IGNvbnRyYWN0dWFsbHkg b2JsaWdhdGVkIGRpdmlkZW5kIGRpc3RyaWJ1dGlvbiBzY2hlZHVsZXMuCgpBZGp1c3RlZCBPcGVy YXRpb24gRGV0YWlscwoKSWYgcGFzc2VkLCB0aGUgZGl2aWRlbmQgcGF5b3V0IHNjaGVkdWxlIHBy ZXZpb3VzbHkgYXBwcm92ZWQgd2lsbCBiZSBtb2RpZmllZCBhcyBzdWNoOgoKVGhlICJQZXJpb2Qg MDAxIiBkaXZpZGVuZCdzIHJlbWFpbmRlciAoMjAsMDAwIE5CVCBvZiBQUEMpIHdpbGwgYmUgcGFp ZCB3aXRoaW4gNzIgaG91cnMgb2YgdGhlIHBhc3NhZ2Ugb2YgdGhpcyBwcm9wb3NhbCB0byBzYXRp c2Z5IHRoZSBwcmV2aW91c2x5IHZvdGVkIG9uIG1vdGlvbi4gVGhlIGNvbXBsZXRpb24gb2YgdGhp cyBkaXN0cmlidXRpb24gd2lsbCBzYXRpc2Z5IHRoZSBvcmlnaW5hbCAiUGVyaW9kIDAwMSIgZGl2 aWRlbmQgdGFyZ2V0IG9mIDcwLDAwMCBOQlQuIE9uY2UgdGhpcyBkaXZpZGVuZCBoYXMgYmVlbiBk aXN0cmlidXRlZCwgIlBlcmlvZCAwMDEiIHdpbGwgYmUgdGhlIGxhc3Qgb2YgInNhbGVzIGdvYWwi LWJhc2VkIGRpdmlkZW5kIGN5Y2xlcy4KRGVjbGFyYXRpb24gRGF0ZSAtIE1vdmluZyBmb3J3YXJk LCB0aGUgY3VzdG9kaWFuIHdpbGwgcGF5IGRpdmlkZW5kcyBldmVyeSB0aGlydHkgKDMwKSBkYXlz LCB3aXRoIHRoZSBmaXJzdCBkaXN0cmlidXRpb24gdG8gY29tbWVuY2UgdGhpcnR5ICgzNCkgZGF5 cyBhZnRlciB0aGlzIG1vdGlvbiBoYXMgcGFzc2VkLiBUaGUgZm91ciAoNCkgZGF5cyB3aWxsIGJl IHVzZWQgdG8gc2F0aXNmeSB0aGUgZmlyc3QgY3JpdGVyaWEgKGZpbmFsIGRpc3RyaWJ1dGlvbiBm b3IgIlBlcmlvZCAwMDEiKSBhbmQgdG8gYmVnaW4gdGhlIGNvbGxlY3Rpb24gb2YgTnUgbmV0d29y ayBsaXF1aWRpdHkgZGF0YS4KVGhlIGFtb3VudCBvZiB0aGUgZGl2aWRlbmQgdG8gYmUgcGFpZCBv dXQgd2lsbCBiZSBwcm9wb3J0aW9uYXRlIHRvIDIuNSUgb2YgdGhlIGF2ZXJhZ2UgYW1vdW50IG9m IGxpcXVpZGl0eSBhdmFpbGFibGUgdG8gdGhlIE51IG5ldHdvcmsgKHN1bSBvZiBidXktc2lkZSBw bHVzIHNlbGwtc2lkZSBsaXF1aWRpdHkpIGR1cmluZyB0aGUgdGhpcnR5ICgzMCkgZGF5cyBwcmVj ZWRpbmcgdGhlIGRhdGUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KRGF0YSB3aWxsIGJlIG1hZGUgYXZh aWxhYmxlIHRvIHRoZSBTaGFyZWhvbGRlcnMgZm9yIHJldmlldyBhbmQgdmFsaWRhdGlvbiB0aGF0 IHRoZSBkaXZpZGVuZCBkaXN0cmlidXRpb24gaXMgYXBwcm9wcmlhdGUgZ2l2ZW4gdGhlIGF2ZXJh Z2UgbGlxdWlkaXR5IG9mIHRoZSBuZXR3b3JrLiBUaGUgdG9vbCB0byByZXBvcnQgdGhpcyBpcyBz dGlsbCBiZWluZyBzZWxlY3RlZCwgYnV0IHRoZSBjdXN0b2RpYW4gaXMgbGVhbmluZyBoZWF2aWx5 IHRvd2FyZHMgdXNpbmcgQHdvb2xseV9zYW1tb3RoJ3Mgb3BlbiBzb3VyY2UgcHJvamVjdCwgTnUg RGF0YSAoaHR0cHM6Ly9iaXRidWNrZXQub3JnL21qMnAvbnUtZGF0YSkuIFRoaXMgd2F5LCBTaGFy ZWhvbGRlcnMgY2FuIGFsc28gZ2VuZXJhdGUgdGhlIHNhbWUgcmVwb3J0cyB0byBpbmRlcGVuZGVu dGx5IGNvbmZpcm0gd2hhdCBpcyBiZWluZyByZXBvcnRlZCBhbmQgdG8gYWN0IGFzIGEgYmFjay11 cCBzb3VyY2Ugb2YgZGF0YSBzaG91bGQgdGhlcmUgYmUgYW4gdW5leHBlY3RlZCBhbmQgY2F0YXN0 cm9waGljIHRlY2huaWNhbCBpc3N1ZSB3aXRoIHRoZSBjdXN0b2RpYW4ncyB2ZXJzaW9uIG9mIHRo ZSB0b29sLgpIb2xkZXIgb2YgUmVjb3JkIERhdGUgLSBEaXZpZGVuZHMgd2lsbCBiZSBkaXN0cmli dXRlZCB0byBzaGFyZXMgaGVsZCBhcyBvZiAwMDowMSBHTVQgb24gdGhlIGRlY2xhcmF0aW9uIGRh dGUuCkRpc3RyaWJ1dGlvbiBEYXRlIC0gVGhlIGRpc3RyaWJ1dGlvbiBkYXRlIHdpbGwgYmUgbm8g bW9yZSB0aGFuIDcyIGhvdXJzIGFmdGVyIHRoZSBkZWNsYXJhdGlvbiBkYXRlLgpTaG91bGQgdGhl IGNhbGN1bGF0ZWQgYW1vdW50IG9mIGRpdmlkZW5kIGRpc3RyaWJ1dGlvbiBleGNlZWQgdGhlIGF2 YWlsYWJsZSBhbW91bnQgb2YgYnV5LXNpZGUgbGlxdWlkaXR5IHRoYXQgR3JhbnQgS1RNIGNvbnRy b2xzLCBzZWxsLXNpZGUgTkJUIHdpbGwgYmUgdXNlZCB0byBwdXJjaGFzZSB0aGUgcmVtYWluZGVy IGZyb20gb3RoZXIgTnUgY3VzdG9kaWFuJ3MgYnV5LXNpZGUgaG9sZGluZ3MgYXQgdGhlIHRoZW4t ZXN0YWJsaXNoZWQgbWFya2V0IHJhdGUuIEV4aXN0aW5nIGJ1eS1zaWRlIGZ1bmRzIGhlbGQgaW4g UFBDIHdpbGwgYmUgdXNlZCBmaXJzdCB0byBzYXRpc2Z5IHRoZSBkaXZpZGVuZC4KSWYgYWRkaXRp b25hbCBkaXZpZGVuZCBjdXN0b2RpYW5zIGFyZSBpbiBvcGVyYXRpb24gY29uY3VycmVudCB0byBH cmFudCBLVE0gdGhlIHBlcmNlbnRhZ2UgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGRpdmlkZW5kIGRp c3RyaWJ1dGlvbiB3aWxsIGJlIHJldmlld2VkLiBJZiBpdCBpcyBpbiB0aGUgYmVzdCBpbnRlcmVz dHMgb2YgdGhlIE51IG5ldHdvcmssIHRoZSBwZXJjZW50YWdlIG1heSBiZSBhZGp1c3RlZCBieSB0 aGUgY3VzdG9kaWFuIHdpdGhvdXQgdGhlIHJlcXVpcmVtZW50IG9mIGFuIGFkZGl0aW9uYWwgbW90 aW9uIGJlaW5nIHBhc3NlZC4KQnkgYXBwcm92aW5nIHRoaXMgbW90aW9uLCB0aGUgU2hhcmVob2xk ZXJzIGdyYW50IHRoZSBDdXN0b2RpYW4gdGhlIHJpZ2h0IHRvIGRldGVybWluZSBpZiB0aGVyZSBp cyBzdWZmaWNpZW50IGNhdXNlIHRvIHdpdGhob2xkIGRpdmlkZW5kcyBmb3IgYSB0aW1lIHBlcmlv ZC4gRm9yIGluc3RhbmNlLCBpZiB0aGUgdmFsdWUgb2YgaG9sZGluZ3MgaGFzIGRlY2xpbmVkIHNp Z25pZmljYW50bHkgZHVlIHRvIGV4dGVybmFsIGZhY3RvcnMsIHRoZXJlIG1heSBiZSBjYXVzZSB0 byBzdXNwZW5kIGEgcGVyaW9kJ3MgdXBjb21pbmcgZGlzdHJpYnV0aW9uLiBTaG91bGQgYSBzaXR1 YXRpb24gZGV2ZWxvcHMgdGhhdCBjb3VsZCByZXN1bHQgaW4gYSBwZXJpb2QncyBkaXN0cmlidXRp b24gYmVpbmcgd2l0aGhlbGQgdGhlIEN1c3RvZGlhbiB3aWxsIG5vdGlmeSB0aGUgTnUgU2hhcmVo b2xkZXJzIGluIGFkdmFuY2Ugb2YgdGhlIGRlY2lzaW9uIGJlaW5nIGZpbmFsaXplZC4KVGhlIEN1 c3RvZGlhbiBhbHNvIHJlc2VydmVzIHRoZSByaWdodCB0byBpbmNyZWFzZSB0aGUgZGl2aWRlbmQg ZGlzdHJpYnV0aW9uIHBlcmNlbnRhZ2UgYmV5b25kIHRoZSBiYXNlIDIuNSUgaW4gdGltZXMgb2Yg ZXh0ZXJuYWxseS1pbmZsdWVuY2VkIGhvbGRpbmdzIGFwcHJlY2lhdGlvbi4gQnkgZG9pbmcgdGhp cywgdGhlIEN1c3RvZGlhbiBjYW4gZGlzc2VtaW5hdGUgbmV0d29yayBwcm9maXRzIHRvIHRoZSBT aGFyZWhvbGRlcnMgYXQgdGhlIHRpbWUgdGhhdCB0aGV5IG9jY3VycmVkLCByYXRoZXIgdGhhbiBo b2xkaW5nIHRoZSBmdW5kcyBhbmQgcmlza2luZyBhIHJldmVyc2FsLgpUaGUgZHVyYXRpb24gb2Yg R3JhbnQgS1RNJ3Mgb3BlcmF0aW9uIGlzIGltcG9zc2libGUgdG8gcHJvamVjdDsgaXQgd2lsbCBk ZXBlbmQgb24gdGhlIHJhdGUgdGhhdCB0aGUgTnUgbmV0d29yayBncm93cy4gRm9yIG5vdyBpdCBp cyBleHBlY3RlZCB0aGF0IG9wZXJhdGluZyBjb3N0cyBmb3IgdGhlIG5pbmUgKDkpIG1vbnRocyB3 aWxsIGJlIG1hbmFnZWFibGUgd2l0aGluIHRoZSBvcmlnaW5hbCBncmFudCdzIGZlZS4gSW4gQXVn dXN0LCAyMDE1LCB0aGUgQ3VzdG9kaWFuIHdpbGwgZXZhbHVhdGUgdGhlIHNpdHVhdGlvbiBhbmQg cmV2aWV3IHRoZSBjb3N0IG9mIG9wZXJhdGlvbnMgdG8gc2VlIGlmIHRoaXMgaXMgc3RpbGwgdGhl IGNhc2UuIElmIGFkZGl0aW9uYWwgZmVlcyBhcmUgcmVxdWlyZWQgaW4gdGhlIGZ1dHVyZSBmb3Ig YW55IHJlYXNvbiwgYSBuZXcgZ3JhbnQgcHJvcG9zYWwgd2lsbCBiZSBzdWJtaXR0ZWQgdG8gdGhl IFNoYXJlaG9sZGVycyBhbmQgdGhleSBjYW4gZGVjaWRlIGhvdyBHcmFudCBLVE0ncyBvcGVyYXRp b25zIHdpbGwgbW92ZSBmb3J3YXJkLgpPbmNlIHRoZSBmdW5kcyBoZWxkIGJ5IEdyYW50IEtUTSBo YXZlIGJlZW4gZXhoYXVzdGVkIHRocm91Z2ggZGl2aWRlbmQgZGlzdHJpYnV0aW9ucyB0aGUgb3Bl cmF0aW9ucyB3aWxsIGJlIGNvbnNpZGVyZWQgY29uY2x1ZGVkIGFuZCBhIHBvc3Qtb3BlcmF0aW9u cyByZXBvcnQgd2lsbCBiZSBwcmVwYXJlZCBmb3IgdGhlIE51IFNoYXJlaG9sZGVyLgpFeGFtcGxl IFBlcmlvZCBEaXZpZGVuZHMKClBlcmlvZDogMTUtSkFOIHRvIDE0LUZFQgpBdmcuIEJ1eS1zaWRl IExpcXVpZGl0eTogMTgwLDAwMCBOQlQKQXZnLiBTZWxsLXNpZGUgTGlxdWlkaXR5OiAxODIsMDAw IE5CVApEZWNsYXJhdGlvbiBEYXRlOiAxNC1GRUIgCkhvbGRlciBvZiBSZWNvcmQgRGF0ZTogMDA6 MDEgR01UIG9uIDE0LUZFQgpEaXN0cmlidXRpb24gRGF0ZSAoYXBwcm94Lik6IDE0LUZFQiB0byAx Ni1GRUIgCkRpdmlkZW5kIChhdCAyLjUlKTogOSwwNTAgTkJUCgpQZXJpb2Q6IDE0LUZFQiB0byAx Ni1NQVIKQXZnLiBCdXktc2lkZSBMaXF1aWRpdHk6IDI5MSwwMDAgTkJUCkF2Zy4gU2VsbC1zaWRl IExpcXVpZGl0eTogMjQyLDAwMCBOQlQKRGVjbGFyYXRpb24gRGF0ZTogMTYtTUFSCkhvbGRlciBv ZiBSZWNvcmQgRGF0ZTogMDA6MDEgR01UIG9uIDE2LU1BUgpEaXN0cmlidXRpb24gRGF0ZSAoYXBw cm94Lik6IDE2LU1BUiB0byAxOC1NQVIgCkRpdmlkZW5kIChhdCAyLjUlKTogMTMsMzI1IE5CVAoK UGVyaW9kOiAxNi1NQVIgdG8gMTUtQVBSCkF2Zy4gQnV5LXNpZGUgTGlxdWlkaXR5OiA0MDAsMDAw IE5CVApBdmcuIFNlbGwtc2lkZSBMaXF1aWRpdHk6IDM5MiwwMDAgTkJUCkRlY2xhcmF0aW9uIERh dGU6IDE1LUFQUgpIb2xkZXIgb2YgUmVjb3JkIERhdGU6IDAwOjAxIEdNVCBvbiAxNS1BUFIKRGlz dHJpYnV0aW9uIERhdGUgKGFwcHJveC4pOiAxNS1BUFIgdG8gMTctQVBSIApEaXZpZGVuZCAoYXQg Mi41JSk6IDE5LDgwMCBOQlQKClBlcmlvZDogMTUtQVBSIHRvIDE1LU1BWQpBdmcuIEJ1eS1zaWRl IExpcXVpZGl0eTogNzAwLDAwMCBOQlQKQXZnLiBTZWxsLXNpZGUgTGlxdWlkaXR5OiA4MDAsMDAw IE5CVApEZWNsYXJhdGlvbiBEYXRlOiAxNS1NQVkKSG9sZGVyIG9mIFJlY29yZCBEYXRlOiAwMDow MSBHTVQgb24gMTUtTUFZCkRpc3RyaWJ1dGlvbiBEYXRlIChhcHByb3guKTogMTUtTUFZIHRvIDE3 LU1BWSAKRGl2aWRlbmQgKGF0IDIuNSUpOiAzNyw1MDAgTkJU

@CoinGame

2 Likes

Sweet! Great job! :heart_eyes:

base64 -D 6f361693a7b248730b41d4292f89dc6f6f166bc8.base64 | openssl rmd160
6f361693a7b248730b41d4292f89dc6f6f166bc8

All three verify. Only two remain. Would be lovely if we could avoid hardcoding anything.