------ art_39070_6019893.1156962070620 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline I sent this before with a big zipfile attachment including rdoc, and I think that the mailing list rejected it due to the size of the attachment. So I'm sending it again with just the source files. After solving the basic problem in a few minutes, doing the "simplest thing which could possibly work," I've spent my spare time over the last 4 or 5 days letting features, well, creep. I've noticed that there are two major styles of quiz respondants, some go for brief code, others go for well-documented code sometimes with lots of new features. I guess I fall into the latter camp. I really used this as an exercise to explore implementing rails-like options parameters. The code is documented, and I've included the html output of rdoc in the attached zip file. There's also a test script. So here's my solution. A few goodies I've added. 1) Rails style options can be used on new, to_s and a few more. 2) Option to select when the week starts, the ranges produced in to_s will never span over a week boundary. I just realized that I really should let you specify the start of the week as either a number or a name, but it's time to lay my cards on the table, so names will have to wait until the next 'release' <G>. 3) Option to select a language. English and French are built-in. 4) Support for ad-hoc languages, and adding new languages via a class method, see the rdoc and testcases for examples of how to do this. 5) A DayRange is enumerable and should act like an array containing the day numbers with the week-start fixed as Monday extension to add options are on the 'roadmap' <G> 6) Probably some other things I'm overlooking as I type this note. -- Rick DeNatale My blog on Ruby http://talklikeaduck.denhaven2.com/ ------ art_39070_6019893.1156962070620 Content-Type: application/x-ruby; name="day_range.rb" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="day_range.rb" X-Attachment-Id: f_eri1bfai IyBUaGlzIGNsYXNzIHdhcyB3cml0dGVuIGFzIGFuIGFuc3dlciB0byBSdWJ5UXVpejkyLgojCiMg VGhlIERheVJhbmdlLm5ldyBtZXRob2QgdGFrZXMgb25lIG9yIG1vcmUgZGF5IHNwZWNpZmljYXRp b25zIGFzIGVpdGhlciBpbnRlZ2VycyBvciBuYXR1cmFsIGxhbmd1YWdlCiMgc3RyaW5ncyByZXBy ZXNlbnRpbmcgZGF5IG5hbWVzLiAgQW4gaW5zdGFuY2Ugd2lsbCByZXNwb25kIHRvIHRvX3Mgd2l0 aCBhIHN0cmluZyByZXByZXNlbnRpbmcKIyB0aGUgbGlzdCBvZiBkYXlzIHdpdGggY29uc2VjdXRp dmUgZGF5cyBjb2xsYXBzZWQgdG8gYSBmb3JtIGxpa2UgJ01vbi1GcmknCiMKIyBTZXZlcmFsIG1l dGhvZHMgdGFrZSAiUmFpbHMtc3R5bGUiIG9wdGlvbnMsIG9uZSBvciBtb3JlIGFzc29jaWF0aW9u cyBhZnRlciBhbnkgbm9ybWFsIHBhcmFtZXRlcnMuCiMgVGhlIGtleXMgb2YgdGhlc2UgYXNzb2Np YXRpb25zIGNhbiBiZSBTdHJpbmdzIG9yIHN5bWJvbHMgd2hpY2ggd2lsbCBiZSBjb252ZXJ0ZWQg dXNpbmcgdG9fc3ltLgojCiMgRmVhdHVyZXMgbm90IGNhbGxlZCBmb3IgaW4gdGhlIHF1aXogaW5j bHVkZToKIyAgIAojICAgKiBBIG51bWJlciBmb3IgdGhlIHN0YXJ0IG9mIHRoZSB3ZWVrIG1heSBi ZSBzcGVjaWZpZWQuICBUaGlzIHdpbGwgYWZmZWN0IHRoZSBvdXRwdXQgb2YKIyAgICAgdG9fcy4g Rm9yIGV4YW1wbGUsIDp3ZWVrX3N0YXJ0ID0+IDcsIGluZGljYXRlcyB0aGF0IHRoZSB3ZWVrIHN0 YXJ0cyBvbiBTdW5kYXksIGFuZAojICAgICAgICBEYXlSYW5nZS5uZXcoJ1NhdCcsICdTdW4nLCAn TW9uJywgOndlZWtfc3RhcnQgPT4gNykudG9fcyA9PiAiU3VuLU1vbiwgU2F0IgojCiMgICAqIFN1 cHBvcnQgaXMgcHJvdmlkZWQgZm9yIGxhbmd1YWdlcyBvdGhlciB0aGFuIEVuZ2xpc2gsIEZyZW5j aCBpcyBidWlsdCBpbiwgYnV0IGFkZGl0aW9uYWwKIyAgICAgbGFuZ3VhZ2VzIGNhbiBiZSBhZGRl ZCwgZWl0aGVyIG9uIHRoZSBuZXcgY2FsbCwgb3IgYnkgYSBjbGFzcyBtZXRob2QgRGF5UmFuZ2Uu YWRkX2xhbmd1YWdlIAojCiMgICAqIERheVJhbmdlcyBhcmUgZW51bWVyYWJsZSBhbmQgcHJvZHVj ZSB0aGUgbnVtYmVycyBvZiB0aGUgZGF5IHRoZXkgY29udGFpbiwgaW4gTW9uZGF5LVN1bmRheQoj ICAgICBvcmRlci4KIwojICAgKiBUd28gRGF5cmFuZ2VzIGFyZSA9PSBpZiB0aGV5IGNvbnRhaW4g dGhlIHNhbWUgZGF5cwojICAgCiMgQXV0aG9yOiBSaWNrIERlTmF0YWxlICBodHRwOi8vdGFsa2xp a2VhZHVjay5kZW5oYXZlbjIuY29tCiMKIyBUZXN0IGNhc2VzIGFyZSBpbiB0aGUgZmlsZSB0ZXN0 ZGF5cmFuZ2UucmIKIwojIFRoZSBjb2RlIHdoaWNoIGRvZXMgbW9zdCBvZiB0aGUgd29yayBpbiBk ZXRlY3Rpbmcgc3ViLXJhbmdlcyBpcyBpbiB0aGUgZmlsZSBzdWJyYW5nZXMucmIKIyBUaGlzIGFk ZHMgYSBtZXRob2QgdG8gRW51bWVyYWJsZSB3aGljaCBwcm9kdWNlcyBhbiBhcnJheSBvZiByYW5n ZXMgd2hpY2ggY292ZXIgdGhlIHNhbWUgY29udGVudHMKIyBhcyB0aGUgRW51bWVyYXRpb24uICAK CnJlcXVpcmUgJ3N1YnJhbmdlcycKIyAKY2xhc3MgRGF5UmFuZ2UKCglpbmNsdWRlIEVudW1lcmFi bGUKCgkjIFN0cmluZ1N5bUhhc2ggZXh0ZW5kcyBIYXNoIHNvIHRoYXQgc3ltYm9sIGFuZCBzdHJp bmcga2V5cyBhcmUgZXF1aXZhbGVudCBhIGxhIFJhaWxzCgkjIE5vcm1hbGx5IEkgZG9uJ3QgbGlr ZSBpbXBsZW1lbnRpbmcgdGhpbmdzIGxpa2UgdGhpcyB2aWEgc3ViLWNsYXNzaW5nIGJ1dC4uLgoJ Y2xhc3MgU3RyaW5nU3ltSGFzaCA8IEhhc2gKCgkJZGVmIFtdKGtleSkKCQkJc3VwZXIoa2V5LnRv X3N5bSkKCQllbmQKCgkJZGVmIFtdPShrZXksdmFsdWUpCgkJCXN1cGVyKGtleS50b19zeW0sIHZh bHVlKQoJCWVuZAoKCQlkZWYgU3RyaW5nU3ltSGFzaC5bXShoYXNoKQoJCQlzc2ggPSBTdHJpbmdT eW1IYXNoLm5ldwoJCQloYXNoLmVhY2ggeyB8aywgdnwgc3NoW2tdID0gdn0KCQkJc3NoCgkJZW5k CgllbmQKCgkjIG1hcHMgYW5kIG5hbWVzIGZvciBFbmdsaXNoIGFuZCBGcmVuY2gKCUBAZGF5X21h cHMgPSBTdHJpbmdTeW1IYXNoWyA6RW5nbGlzaCA9PiAgeyAKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJ01vbmRheScgPT4gMSwgJ01vbicgPT4gMSwgJ1R1ZXNk YXknID0+IDIsICdUdWUnID0+IDIsCgkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnV2Vk bmVzZGF5JyA9PiAzLCAnV2VkJyA9PiAzLCAnVGh1cnNkYXknID0+IDQsICdUaHUnID0+IDQsCgkJ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRnJpZGF5JyA9PiA1LCAnRnJpJyA9PiA1LCAn U2F0dXJkYXknID0+IDYsICdTYXQnID0+IDYsCgkJICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAnU3VuZGF5JyA9PiA3LCAnU3VuJyA9PiA3IH0sIAoJCQkJICAgICA6RnJlbmNoID0+IHsgCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdMdW5kaScgPT4gMSwg J0x1bicgPT4gMSwgJ01hcmRpJyA9PiAyLCAnTWFyJyA9PiAyLAoJCSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJ01lcmNyZWRpJyA9PiAzLCAnTWVyJyA9PiAzLCAnSmV1ZGknID0+IDQsICdK ZXUnID0+IDQsCgkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVmVuZHJlZGknID0+IDUs ICdWZW4nID0+IDUsICdTYW1lZGknID0+IDYsICdTYW0nID0+IDYsCgkJICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnRGltYW5jaGUnID0+IDcsICdEaW0nID0+IDcgfSBdCglAQGRheV9uYW1l cyA9IFN0cmluZ1N5bUhhc2hbCQoJCTpFbmdsaXNoID0+IFtuaWwsICdNb24nLCAnVHVlJywgJ1dl ZCcsICdUaHUnLCAnRnJpJywgJ1NhdCcsICdTdW4nXSwKCQk6RnJlbmNoID0+IFtuaWwsICdMdW4n LCAnTWFyJywgJ01lcicsICdKZXUnLCAnVmVuJywgJ1NhbScsICdEaW0nXSwKCV0KCgkjIEFkZCBh IGxhbmd1YWdlIHRvIHRob3NlIHN1cHBvcnRlZCBieSB0aGUgRGF5UmFuZ2UgY2xhc3MKCSMKCSMg OmNhbGwtc2VxOgoJIyAgICBEYXlSYW5nZS5hZGRfbGFuZ3VhZ2UobGFuZ19uYW1lLCBkYXlfbWFw WywgZGF5X25hbWVzXSkKCSMKCSMgVGhlIDxlbT5sYW5nX25hbWVfIHBhcmFtZXRlcjwvZW0+IGlz IHRoZSBuYW1lIG9mIHRoZSBsYW5ndWFnZS4gSXQgd2lsbCBiZSBpbnRlcm5hbGx5IGNvbnZlcnRl ZAoJIyB0byBhIHN5bWJvbC4gU28sIGZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZToKCSMKCSMgICAg IERheVJhbmdlLmFkZF9sYW5ndWFnZSgnRXNwZXJhbnRvJywgLi4uKQoJIwoJIyB0aGVuIG9uZSBj b3VsZCBhc2sgZm9yIGEgRGF5UmFuZ2UgaW4gRXNwZXJhbnRvIHdpdGg6CgkjICAgICAKCSMgICAg IERheVJhbmdlLm5ldygxLCAzLCA6TGFuZ3VhZ2UgPT4gOkVzcGVyYW50bykKCSMgICAgIAoJIyBU aGUgPGVtPmRheV9tYXA8L2VtPiBwYXJhbWV0ZXIgc2hvdWxkIGJlIGEgSGFzaCB3aGljaCBtYXBz IGRheSBuYW1lcyB0byBpbnRlZ2VycyBpbiAKCSMgdGhlIHJhbmdlICgxLi43KS4gIE1vcmUgdGhh biBvbmUgbmFtZSBtYXkgbWFwIHRvIGEgcGFydGljdWxhciBkYXlfbnVtYmVyLgoJIwoJIyBUaGUg X2RheV9uYW1lc18gcGFyYW1ldGVyIG11c3QgYmUgZHVjay10eXBlYWJsZSB0byBhIDctZWxlbWVu dCBhcnJheSBvciBTdHJpbmdzLCB3aXRoIHRoZQoJIyBmaXJzdCBlbGVtZW50IGNvbnRhaW5pbmcg dGhlIG5hbWUgd2hpY2ggd2lsbCBiZSB1c2VkIGZvciBNb25kYXkgZm9yIG91dHB1dCAoZS5nLiBm b3IgdG9fcyksCgkjIGFuZCB0aGUgbGFzdCBmb3IgU3VuZGF5LgoJIwoJIyBJZiBfZGF5X25hbWVz XyBpcyBvbWl0dGVkLCB0aGVuIGl0IHdpbGwgYmUgY29uc3RydWN0ZWQgYnkgZmluZGluZyBhIG5h bWUgZm9yIGVhY2ggZGF5X251bWJlcgoJIyBhcyBsZWFzdCBhcyBzaG9ydCBhcyBhbnkgb3RoZXIg bmFtZSB3aGljaCBtYXBzIHRvIHRoYXQgZGF5X251bWJlciBpbiBfZGF5X21hcF8KCWRlZiBEYXlS YW5nZS5hZGRfbGFuZ3VhZ2UobGFuZ19uYW1lLCBkYXlfbWFwLCBkYXlfbmFtZXMgPSBuaWwpCgkJ I0hBQ0sgLSBpZiB1c2VyIHN1cHBsaWVkIGRheV9uYW1lcyBwcmUtcGVuZCBhbiBlbGVtZW50IHNv IHRoYXQgd2UgY2FuIHVzZQoJCSMgcHNldWRvIDEtb3JpZ2luIGluZGV4aW5nCgoJCWRheV9uYW1l cyA9IGRheV9uYW1lcy5kdXAudW5zaGlmdCgnJykgaWYgZGF5X25hbWVzCgkJQEBkYXlfbmFtZXNb bGFuZ19uYW1lLnRvX3NdID0gdmFsaWRhdGVkX2RheV9uYW1lcyhkYXlfbmFtZXMgfHwgZGF5X25h bWVzX2Zyb21fZGF5X21hcChkYXlfbWFwKSkKCQlAQGRheV9tYXBzW2xhbmdfbmFtZS50b19zXSA9 IGRheV9tYXAuZHVwCgllbmQKCgkjIFJlbW92ZSB0aGUgbGFuZ3VhZ2UgX2xhbmdfbmFtZV8KCSMg RG8gbm90aGluZyBzaWxlbnRseSBpZiBfbGFuZ19uYW1lXyBpcyBub3QgcHJlc2VudAoJIwoJIyA6 Y2FsbC1zZXE6CgkjICAgIERheVJhbmdlLnJlbW92ZV9sYW5ndWFnZShsYW5nX25hbWUpCgkjCglk ZWYgRGF5UmFuZ2UucmVtb3ZlX2xhbmd1YWdlKGxhbmdfbmFtZSkKCQlAQGRheV9uYW1lcy5kZWxl dGUobGFuZ19uYW1lKQoJCUBAZGF5X21hcHMuZGVsZXRlKGxhbmdfbmFtZSkKCWVuZAoKCWRlZiBE YXlSYW5nZS5kYXlfbmFtZXNfZnJvbV9kYXlfbWFwKGRheV9tYXApICM6bm9kb2M6CgkJIyBzZXQg ZWFjaCBkYXlzIG5hbWUgdG8gdGhlIHNob3J0ZXN0IG5hbWUKCQkjIGluIHRoZSBuYW1lIG1hcHBp bmcKCQkjIHB1dHMoIkRlYnVnLSBEYXlSYW5nZS5kYXlfbmFtZXNfZnJvbV9kYXlfbWFwKCN7ZGF5 X21hcH0pIikKCQlkYXlfbmFtZXMgPSBBcnJheS5uZXcoOCkKCQlkYXlfbWFwLmVhY2ggZG8gfG5h bWUgLG51bWJlcnwKCQkJY3VycmVudF9uYW1lID0gZGF5X25hbWVzW251bWJlcl0gfHwgZGF5X25h bWVzW251bWJlcl0gPSBuYW1lCgkJCWRheV9uYW1lc1tudW1iZXJdID0gbmFtZSBpZiBuYW1lLmxl bmd0aCA8IGN1cnJlbnRfbmFtZS5sZW5ndGgKCQllbmQKCQl2YWxpZGF0ZWRfZGF5X25hbWVzKGRh eV9uYW1lcykKCWVuZAoKCWRlZiBEYXlSYW5nZS52YWxpZGF0ZWRfZGF5X25hbWVzKGRheV9uYW1l cykgIzpub2RvYzoKCQkoMS4uNykuZWFjaCBkbyB8aXwKCQkJY2hlY2tfYXJnKGRheV9uYW1lc1tp XSwgIk5vIG5hbWUgZm9yIGRheSBudW1iZXIgI3tpfSIpCgkJZW5kCgkJZGF5X25hbWVzCgllbmQK CglkZWYgRGF5UmFuZ2UuY2hlY2tfYXJnKGFzc2VydGlvbiwgbXNnKSAjIDpub2RvYzoKCQlyYWlz ZSBBcmd1bWVudEVycm9yLm5ldyggbXNnKSB1bmxlc3MgYXNzZXJ0aW9uCgllbmQKCglkZWYgRGF5 UmFuZ2UuZGF5X25hbWVzX2Zyb21fb3B0aW9ucyhvcHRpb25zLCBkYXlfbWFwKSAjIDpub2RvYzoK CQkjIHB1dHMgIkRlYnVnLSBEYXlSYW5nZS5kYXlfbmFtZXNfZnJvbV9vcHRpb25zKG9wdGlvbnM9 I3tvcHRpb25zLmluc3BlY3R9LCIKCQkjIHB1dHMgIiBkYXlfbWFwPSN7ZGF5X21hcC5pbnNwZWN0 fSkiCgkJcmV0dXJuIG9wdGlvbnNbOmRheV9uYW1lc10gaWYgb3B0aW9ucy5rZXk/KDpkYXlfbmFt ZXMpCgkJcmV0dXJuIERheVJhbmdlLmRheV9uYW1lc19mcm9tX2RheV9tYXAoZGF5X21hcCkKCWVu ZAoKCWRlZiBEYXlSYW5nZS5sYW5ndWFnZV9mcm9tX29wdGlvbnMob3B0aW9ucykgIyA6bm9kb2M6 CgkJZ2V0X29wdGlvbig6bGFuZ3VhZ2UsIG9wdGlvbnMsIDpFbmdsaXNoKQoJZW5kCgoJZGVmIERh eVJhbmdlLmdldF9vcHRpb24ob3B0aW9uLCBvcHRpb25zLCBkZWZhdWx0KSAjIDpub2RvYzoKCQlv cHRpb25zLmtleT8ob3B0aW9uKSA/IG9wdGlvbnNbb3B0aW9uXSA6IGRlZmF1bHQKCWVuZAoKCSMg UmV0dXJucyBhIG5ldyBEYXlSYW5nZSAod2hpY2ggY29udGFpbnMgb25lIG9yIG1vcmUgZGF5cyBv ZiB0aGUgd2VlaykKCSMKCSMgOmNhbGwtc2VxOgoJIyAgICAgRGF5UmFuZ2UubmV3KGRheSogWywg b3B0aW9uc10pCgkjCgkjIDxlbT5kYXk8L2VtPiBhcmd1bWVudHMgY2FuIGJlIGVpdGhlciBudW1i ZXJzIGluIHRoZSByYW5nZQoJIyAoMS4uNykgb3IgbmFtZXMgaW4gdGhlIDxlbT5kYXlfbWFwcGlu ZzwvZW0+IChzZWUgPGI+OmRheV9tYXBwaW5nPC9iPiBvcHRpb24pLgoJIwoJIyBPcHRpb25zOgoJ IwoJIyBbKjpsYW5ndWFnZSogPT4gc3ltYm9sXSBTcGVjaWZpZXMgdGhlIGxhbmd1YWdlIHRvIGJl IHVzZWQgdG8KCSMgaW50ZXJwcmV0IHRoZSBfZGF5X3Mgd2hpY2ggYXJlIFN0cmluZ3MsIGFuZCBm b3IgdGhlIGRlZmF1bHQgb3B0aW9ucyBmb3Igb3V0cHV0IHZpYSBEYXlOYW1lI3RvX3MKCSMgVGhl IHBvc3NpYmxlIHZhbHVlcyBmb3IgdGhlIHN5bWJvbCBhcmUgOkVuZ2xpc2gsIGFuZCA6RnJlbmNo LAoJIyBhZGRpdGlvbmFsIGxhbmd1YWdlcyBjYW4gYmUgYWRkZWQgdmlhIHRoZSBEYXlSYW5nZS5h ZGRMYW5ndWFnZSAKCSMgbWV0aG9kLiBJZiB0aGlzIG9wdGlvbiBpcyBub3Qgc3BlY2lmaWVkLCA6 RW5nbGlzaCB3aWxsIGJlIHVzZWQuCgkjIAoJIyBbKjpkYXlfX21hcCogPT4gaGFzaCBdIFRoZSB2 YWx1ZSBfaGFzaF8gc2hvdWxkIGJlIGEgaGFzaCB3aGljaCBtYXBzIHRoZSBuYW1lcwoJIyBvZiBk YXlzIHRvIHRoZSBudW1iZXIgb2YgdGhlIGRheSwgd2l0aCAxIGJlaW5nIHRoZSBmaXJzdAoJIyBk YXkgb2YgdGhlIHdlZWsgKG5vcm1hbGx5IE1vbmRheSksIHVwIHRvIDcgZm9yIHRoZSBsYXN0IGRh eSAKCSMgb2YgdGhlIHdlZWsgKG5vcm1hbGx5IFN1bmRheSkuCgkjIE1vcmUgdGhhbiBvbmUgbmFt ZSBtYXkgbWFwIHRvIHRoZSBzYW1lIGRheS4gSWYgbm90IHNwZWNpZmllZCwKCSMgdGhlIGRheV9t YXBwaW5nIGZvciB0aGUgc2VsZWN0ZWQgbGFuZ3VhZ2UgaXMgdXNlZC4KCSMKCSMgWyo6ZGF5X25h bWVzKiA9PiBhcnJheV0gVGhlIHZhbHVlIF9hcnJheV8gbXVzdCBiZSBkdWNrLXR5cGVhYmxlIHRv IGEgNy1lbGVtZW50IGFycmF5LgoJIyBUaGUgZWxlbWVudHMgYXJlIHRoZSBuYW1lcyBvZiB0aGUg ZGF5cyB0byBiZSB1c2VkIGJ5IGRlZmF1bHQgZm9yCgkjIG91dHB1dCAoZS5nLiB3aXRoIERheVJh bmdlI3RvX3MuICBJZiBub3Qgc3BlY2lmaWVkLCB0aGVuIHRoZSBkYXlfbmFtZXMgZm9yIHRoZSBz ZWxlY3RlZAoJIyBsYW5ndWFnZSB3aWxsIGJlIHVzZWQsIHVubGVzcyAqOmRheV9tYXAqIGlzIHNw ZWNpZmllZCBpbiB3aGljaCBjYXNlCgkjICo6ZGF5X25hbWVzKiB3aWxsIGJlIGNvbXB1dGVkIGZy b20gb25lIG9mIHRoZSBzb3J0ZXN0IG5hbWVzIGluIHRoZSBtYXAgZm9yIGVhY2ggCgkjIGRheS4K CSMKCSMgWyo6d2Vla19zdGFydCogPT4gaW50XSAgVGhlIHZhbHVlIF9pbnRfIG11c3QgYmUgaW4g dGhlIHJhbmdlICgxLCA3KS4gCgkjIEl0IGlzIHVzZWQgdG8gc2hpZnQgdGhlIHN0YXJ0IG9mIHRo ZSB3ZWVrLiBGb3IgZXhhbXBsZSB0byBjcmVhdGUgYQoJIyBEYXlSYW5nZSBmb3IgYSB3ZWVrIHdo aWNoIHN0YXJ0cyBvbiBTdW5kYXkgcmF0aGVyIHRoYW4gTW9uZGF5LAoJIyBzcGVjaWZ5IGEgd2Vl a19zdGFydCBvZiA3LiAgQWx0aG91Z2ggaXQgaXMgYWxzbyBwb3NzaWJsZSB0bwoJIyBhY2hpZXZl IHRoZSBzYW1lIGVmZmVjdCBieSBjaGFuZ2luZyB0aGUgbnVtYmVycyBpbiBkYXlfbWFwcGluZywK CSMgdXNpbmcgd2Vla19zdGFydCBhbGxvd3MgdGhlIHNhbWUgZGF5X21hcHBpbmcgdG8gYmUgdXNl ZCBmb3Igd2Vla3MKCSMgc3RhcnRpbmcgb24gZGlmZmVyZW50IGRheXMuIAoJZGVmIGluaXRpYWxp emUoICpkYXlzICkgIzpkb2M6CgkJb3B0aW9ucyA9IGV4dHJhY3Rfb3B0aW9uc19mcm9tX2FyZ3Mh KGRheXMpCgkJIyBwdXRzICJEZWJ1Zzogb3B0aW9ucyA9ICN7b3B0aW9ucy5pbnNwZWN0fSIKCQlk YXlfbWFwID0gZGF5X21hcF9mcm9tX29wdGlvbnMob3B0aW9ucykKCQlkYXlfbWFwLmVhY2ggZG8g fG5hbWUsIG51bWJlcnwKCQkJRGF5UmFuZ2UuY2hlY2tfYXJnKCgxLi43KSA9PT0gbnVtYmVyLCAK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInI3tudW1iZXJ9JyBp cyBub3QgYW4gYWNjZXB0YWJsZSBkYXkgZm9yICN7bmFtZS50b19zfS4iKQoJCWVuZAoJCSMgcHV0 cyAiICAgICAgIGRheV9tYXAgPSAje2RheV9tYXAuaW5zcGVjdH0iCgkJQGxhbmd1YWdlID0gRGF5 UmFuZ2UubGFuZ3VhZ2VfZnJvbV9vcHRpb25zKG9wdGlvbnMpCgkJIyBwdXRzICIgICAgICAgbGFu Z3VhZ2UgPSAje0BsYW5ndWFnZX0iCgkJQGRheV9uYW1lcyA9IERheVJhbmdlLmRheV9uYW1lc19m cm9tX29wdGlvbnMob3B0aW9ucyxkYXlfbWFwKQoJCSMgcHV0cyAiICAgICAgIEBkYXlfbmFtZXMg I3tAZGF5X25hbWVzLmluc3BlY3R9IgoJCUB3ZWVrX3N0YXJ0ID0gd2Vla19zdGFydF9mcm9tX29w dGlvbnMob3B0aW9ucykKCQkjIHB1dHMgIiAgICAgICBAd2Vla19zdGFydCA9ICN7QHdlZWtfc3Rh cnR9IgoJCUBkYXlfbnVtYmVycyA9IGRheXMubWFwIGRvIHwgZGF5IHwKCQkJbnVtYmVyID0gZGF5 X21hcFtkYXldIHx8IGRheQoJCQlEYXlSYW5nZS5jaGVja19hcmcoKDEuLjcpID09PSBudW1iZXIs ICInI3tudW1iZXJ9JyBpcyBub3QgYW4gYWNjZXB0YWJsZSBkYXkuIikKCQkJbnVtYmVyCgkJZW5k CgkJQGRheV9udW1iZXJzLnNvcnQhCgllbmQKCgkjIFJldHVybiBhbiBhcnJheSBvZiBzdWJyYW5n ZXMgb2YgQGRheV9udW1iZXJzIGFkanVzdGVkIGZvciB0aGUgd2Vla19zdGFydAoJZGVmIGFkanVz dGVkX3JhbmdlcwoJCShAd2Vla19zdGFydCA9PSAxID8gQGRheV9udW1iZXJzIDogQGRheV9udW1i ZXJzLm1hcCB7IHxlbGVtfCB3c19hZGooZWxlbSkgfSkuc3VicmFuZ2VzCgllbmQKCgkjIFR3byBE YXlSYW5nZXMgYXJlID09IGlmIHRoZXkgY29udGFpbiB0aGUgc2FtZSBkYXkgbnVtYmVycwoJZGVm ID09KG90aGVyKQoJCWZhbHNlIHVubGVzcyBvdGhlci5raW5kX29mPyBEYXlSYW5nZQoJCXNlbGYu dG9fYSA9PSBvdGhlci50b19hCgllbmQKCQkKCgkjIENhbGwgX2Jsb2NrXyBvbmNlIGZvciBlYWNo IGRheSBudW1iZXIgaW4gX2RheV9yYW5nZV8gcGFzc2luZyB0aGUgZGF5IG51bWJlciB0byB0aGUg YmxvY2suCgkjIFRoZSBvcmRlciBzaG91bGQgYmUgdGhlIHNhbWUgcmVnYXJkbGVzcyBvZiB3ZWVr IHN0YXJ0LCBpLmUuIE1vbmRheSBzaG91bGQgYWx3YXlzIGNvbWUgZmlyc3QKCSMgdGhlbiBUdWVz ZGF5LCBldGMuCgkjIAoJIyA6Y2FsbC1zZXE6CgkjICAgICAgIGRheV9yYW5nZS5lYWNoIHt8ZGF5 X251bWJlcnwgYmxvY2sgfSAtPiBfZGF5X3JhbmdlXwoJZGVmIGVhY2goKQoJCUBkYXlfbnVtYmVy cy5lYWNoIHsgfCBlbGVtIHwgeWllbGQgZWxlbSB9CgllbmQKCgkjIENvbnZlcnQgX2RheV9yYW5n ZV8gdG8gYW4gYXJyYXksIGVsZW1lbnRzIHdpbGwgYmUgaW4gb3JkZXIgc28gdGhhdCBNb25kYXks IGlmIGl0IGlzIHRoZSByYW5nZQoJIyB3aWxsIGJlIGZpcnN0IHRoZW4gVHVlc2RheSwgZXRjLiAg aS5lLiB0aGUgZWZmZWN0IG9mIHdlZWtzdGFydCB3aWxsIGJlIHJlbW92ZWQKCSMgOmNhbGwtc2Vx OgoJIyAgICAgIGRheV9yYW5nZS50b19hCglkZWYgdG9fYQoJCUBkYXlfbnVtYmVycy5kdXAKCWVu ZAoKCSMgQ2FsbCBfYmxvY2tfIG9uY2UgZm9yIGVhY2ggZGF5IG5hbWUgaW4gX2RheV9yYW5nZV8s IHBhc3NpbmcgdGhhdCBuYW1lIHRvIHRoZSBibG9jayAKCSMKCSMgOmNhbGwtc2VxOgoJIyAgICAg ZGF5X3JhbmdlLmVhY2hfbmFtZSBbKG9wdGlvbnMpXSB7IHxkYXlfbmFtZXwgYmxvY2sgfSAtPiBf ZGF5X3JhbmdlXyAKCSMKCSMgKk9wdGlvbnMqCgkjCgkjIE9wdGlvbnMgYXJlIHNwZWNpZmllZCBS YWlscyBzdHlsZSwgYXMgb25lIG9yIG1vcmUgYXNzb2NpYXRpb25zIGF0IHRoZSBlbmQgb2YgdGhl IGFyZ3VtZW50CgkjIGxpc3QuCgkjCgkjIFsqOmxhbmd1YWdlKiA9PiBzeW1ib2xdIFNwZWNpZmll cyB0aGUgbGFuZ3VhZ2UgdG8gYmUgdXNlZCBmb3IgdGhlIG5hbWVzCgkjIFRoZSBwb3NzaWJsZSB2 YWx1ZXMgZm9yIHRoZSBfc3ltYm9sXyBhcmUgOkVuZ2xpc2gsIGFuZCA6RnJlbmNoLAoJIyBhZGRp dGlvbmFsIGxhbmd1YWdlcyBjYW4gYmUgYWRkZWQgdmlhIHRoZSBEYXlSYW5nZS5hZGRMYW5ndWFn ZSAKCSMgbWV0aG9kLiBJZiB0aGlzIG9wdGlvbiBpcyBub3Qgc3BlY2lmaWVkLCA6RW5nbGlzaCB3 aWxsIGJlIHVzZWQuCgkjIAoJIyBbKjpkYXlfbmFtZXMqID0+IGFycmF5XSBUaGUgX2FycmF5XyBt dXN0IGJlIDctZWxlbWVudCBhcnJheS4KCSMgVGhlIGVsZW1lbnRzIGFyZSB0aGUgbmFtZXMgb2Yg dGhlIGRheXMgdG8gYmUgdXNlZCBieSBkZWZhdWx0IGZvcgoJIyBvdXRwdXQgdmlhIHRvX3MuICBJ ZiBub3Qgc3BlY2lmaWVkLCB0aGVuIHRoZSBkYXlfbmFtZSBmb3IgdGhlIHNlbGVjdGVkCgkjIGxh bmd1YWdlIHdpbGwgYmUgdXNlZC4KCSMKCWRlZiBlYWNoX25hbWUob3B0aW9ucz17fSkKCQluYW1l cyA9IGdldF9uYW1lc19vdmVycmlkZShvcHRpb25zKQoJCXRvX2EuZWFjaCB7IHwgZGF5X251bWJl ciB8IHlpZWxkIG5hbWVzW2RheV9udW1iZXJdIH0KCWVuZAoKCWRlZiBnZXRfbmFtZXNfb3ZlcnJp ZGUob3B0aW9ucykKCQlyZXR1cm4gb3B0aW9uc1s6ZGF5X25hbWVzXS5kdXAudW5zaGlmdCgnJykg aWYgb3B0aW9ucy5rZXk/KDpkYXlfbmFtZXMpCgkJbGFuZ3VhZ2UgPSBvcHRpb25zWzpsYW5ndWFn ZV0KCQlyZXR1cm4gQEBkYXlfbmFtZXNbbGFuZ3VhZ2VdIGlmIGxhbmd1YWdlCgkJQGRheV9uYW1l cwoJZW5kCgkJCgoKCSMgUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIERheVJhbmdl LCBPcHRpb25zIGNhbiBiZSBzcGVjaWZpZWQuCgkjCgkjIDpjYWxsLXNlcToKCSMgICAgIGRheV9y YW5nZS50b19zIFsob3B0aW9ucyldCgkjCgkjIE9wdGlvbnM6CgkjCgkjIFsqOmxhbmd1YWdlKiA9 PiBzeW1ib2xdIFNwZWNpZmllcyB0aGUgbGFuZ3VhZ2UgdG8gYmUgdXNlZCBmb3Igb3V0cHV0Cgkj IFRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIF9zeW1ib2xfIGFyZSA6RW5nbGlzaCwgYW5kIDpGcmVu Y2gsCgkjIGFkZGl0aW9uYWwgbGFuZ3VhZ2VzIGNhbiBiZSBhZGRlZCB2aWEgdGhlIERheVJhbmdl LmFkZExhbmd1YWdlIAoJIyBtZXRob2QuIElmIHRoaXMgb3B0aW9uIGlzIG5vdCBzcGVjaWZpZWQs IHRoZSBsYW5ndWFnZSB1c2VkIHdoZW4gdGhlIERheVJhbmdlCgkjIHdhcyBjcmVhdGVkICB3aWxs IGJlIHVzZWQuCgkjIAoJIyBbKjpkYXlfbmFtZXMqID0+IGFycmF5XSBUaGUgX2FycmF5XyBtdXN0 IGJlIGR1Y2stdHlwZWFibGUgdG8gYSA3LWVsZW1lbnQgYXJyYXkuCgkjIFRoZSBlbGVtZW50cyBh cmUgdGhlIG5hbWVzIG9mIHRoZSBkYXlzIHRvIGJlIHVzZWQgYnkgZGVmYXVsdCBmb3IKCSMgb3V0 cHV0IHZpYSB0b19zLiAgSWYgbm90IHNwZWNpZmllZCwgdGhlbiB0aGUgZGF5X25hbWVzIGZvciB0 aGUgc2VsZWN0ZWQKCSMgbGFuZ3VhZ2Ugd2lsbCBiZSB1c2VkLgoJIwoJZGVmIHRvX3Mob3B0aW9u cz17fSkKCQluYW1lcyA9IGdldF9uYW1lc19vdmVycmlkZShvcHRpb25zKQoJCSNwdXRzICJEZWJ1 ZzogQGRheV9uYW1lcz0je0BkYXlfbmFtZXMuaW5zcGVjdH0sIG5hbWVzPSN7bmFtZXN9IgoJCXJl c3VsdCA9ICIiCgkJYWRqdXN0ZWRfcmFuZ2VzLm1hcCB7fHJhbmdlfCAKCQkJcmFuZ2UuZmlyc3Qg PT0gcmFuZ2UubGFzdCA/ICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIje25hbWVz W3dzX3VuYWRqKHJhbmdlLmZpcnN0KV19IiA6IAoJCQkgICAgICAgIiN7bmFtZXNbd3NfdW5hZGoo cmFuZ2UuZmlyc3QpXX0tI3tuYW1lc1t3c191bmFkaihyYW5nZS5sYXN0KV19IgoJCX0uam9pbigi LCAiKQoJZW5kCgoJcHJpdmF0ZQogICAgICAgICMgY29udmVydCBhIG51bWJlciB3aGVyZSAxID0g TW9uLi4gNyA9IFN1bmRheSB0byB0aGUgZXF1aXZhbGVudAoJIyB3aGVuIHRoZSB3ZWVrIHN0YXJ0 cyBvbiBkYXkgbnVtYmVyCglkZWYgd3NfYWRqKG51bWJlcikKCQkoKG51bWJlciAtIEB3ZWVrX3N0 YXJ0KSAlIDcpICsgMQoJZW5kCgkKCSMgY29udmVydCBhIG51bWJlciBiYWNrIHRvIHRoZSBvcmln aW5hbCBmb3JtCglkZWYgd3NfdW5hZGoobnVtYmVyKQoJCSgobnVtYmVyICsgQHdlZWtfc3RhcnQg KyA1KSAlIDcpICsgMQoJZW5kCgoJZGVmIGV4dHJhY3Rfb3B0aW9uc19mcm9tX2FyZ3MhKGFyZ3Mp CgkJI3B1dHMgIkRlYnVnIC0gZXh0cmFjdF9vcHRpb25zX2Zyb21fYXJncyEoI3thcmdzLmluc3Bl Y3R9KSIKCQkjcHV0cyAiICAgICAgICN7YXJncy5sYXN0LmNsYXNzfSIKCQlTdHJpbmdTeW1IYXNo W2FyZ3MubGFzdC5raW5kX29mPyhIYXNoKSA/IGFyZ3MucG9wIDoge31dCgllbmQKCglkZWYgZGF5 X21hcF9mcm9tX29wdGlvbnMob3B0aW9ucykKCQkjcHV0cyAiRGVidWc6IGxhbmd1YWdlPSN7RGF5 UmFuZ2UubGFuZ3VhZ2VfZnJvbV9vcHRpb25zKG9wdGlvbnMpfSIKCSAgICAgICAgI3B1dHMgIglt YXA9I3tAQGRheV9tYXBzW0RheVJhbmdlLmxhbmd1YWdlX2Zyb21fb3B0aW9ucyhvcHRpb25zKV19 IgoJCURheVJhbmdlLmdldF9vcHRpb24oOmRheV9tYXAsIG9wdGlvbnMsIEBAZGF5X21hcHNbRGF5 UmFuZ2UubGFuZ3VhZ2VfZnJvbV9vcHRpb25zKG9wdGlvbnMpXSkKCWVuZAoKCWRlZiB3ZWVrX3N0 YXJ0X2Zyb21fb3B0aW9ucyhvcHRpb25zKQoJCXdlZWtfc3RhcnQgPSBEYXlSYW5nZS5nZXRfb3B0 aW9uKDp3ZWVrX3N0YXJ0LCBvcHRpb25zLCAxKQoJCURheVJhbmdlLmNoZWNrX2FyZygoMS4uNykg PT09IHdlZWtfc3RhcnQsIjp3ZWVrX3N0YXJ0IG11c3QgYmUgaW4gdGhlIHJhbmdlICgxLi43KSIp CgkJd2Vla19zdGFydAoJZW5kCgplbmQK ------ art_39070_6019893.1156962070620 Content-Type: application/x-ruby; name="subranges.rb" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="subranges.rb" X-Attachment-Id: f_eri1buy7 bW9kdWxlIEVudW1lcmFibGUKCgkjIFJldHVybiBhbiBhcnJheSBjb250YWluaW5nIHRoZSBzdWIt cmFuZ2VzIG9mIHNvcnRlZCBjb250ZW50cyBvZiB0aGUgcmVjZWl2ZXIKCSMgRWFjaCBlbGVtZW50 IG11c3QgYmUgY29tcGFyYWJsZSwgYW5kIG11c3QgcmVzcG9uZCB0byBzdWNjCglkZWYgc3VicmFu Z2VzCgkJcmFuZ2Vfc3RhcnQgPSByYW5nZV9lbmQgPSBuaWwKCQlzdWJyYW5nZXMgPSBbXQoJCXNl bGYuc29ydC5lYWNoIGRvIHxlbGVtfAoJCQlpZiByYW5nZV9zdGFydC5uaWw/CgkJCQlyYW5nZV9z dGFydCA9IHJhbmdlX2VuZCA9IGVsZW0KCQkJZWxzZQoJCQkJaWYgcmFuZ2VfZW5kLnN1Y2MgPT0g ZWxlbQoJCQkJCXJhbmdlX2VuZCA9IGVsZW0KCQkJCWVsc2UKCQkJCQlzdWJyYW5nZXMgPDwgKHJh bmdlX3N0YXJ0Li5yYW5nZV9lbmQpCgkJCQkJcmFuZ2Vfc3RhcnQgPSByYW5nZV9lbmQgPSBlbGVt CgkJCQllbmQKCQkJZW5kCgkJZW5kCgkJc3VicmFuZ2VzIDw8IChyYW5nZV9zdGFydC4ucmFuZ2Vf ZW5kKSB1bmxlc3MgcmFuZ2Vfc3RhcnQubmlsPwoJCXN1YnJhbmdlcwoJZW5kCgplbmQKCg ------ art_39070_6019893.1156962070620 Content-Type: application/x-ruby; name="testdayrange.rb" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="testdayrange.rb" X-Attachment-Id: f_eri1c7de cmVxdWlyZSAnZGF5X3JhbmdlLnJiJwpyZXF1aXJlICd0ZXN0L3VuaXQnCgpjbGFzcyBUZXN0RGF5 UmFuZ2UgPCBUZXN0OjpVbml0OjpUZXN0Q2FzZQoKCUVzcGVyYW50b01hcCA9IHsiTHVuZG8iID0+ IDEsICJMdW4iID0+IDEsICJNYXJkbyIgPT4gMiwgIk1hciIgPT4gMiwgIk1lcmtyZWRvIiA9PiAz LCAiTWVyIiA9PiAzLCAKCQkJIkpoYXVkbyIgPT4gNCwgIkpoYSIgPT4gNCwgIlZlbmRyZWRvIiA9 PiA1LCAiVmVuIiA9PiA1LCAiU2FiYXRvIiA9PiA2LCAiU2FiIiA9PiA2LAoJCQkiRGltYW5jaG8i ID0+IDcsICJEaW0iID0+IDd9CgoJRXNwZXJhbnRvTmFtZXMgPSBbIkx1biIsICJNYXIiLCAiTWVy IiwgIkpoYSIsICJWZW4iLCAiU2FiIiwiRGltIl0KCglHZXJtYW5NYXAgPSB7ICJNb250YWciID0+ IDEsICJNb24iID0+IDEsICJEaWVuc3RhZyIgPT4gMiwgIkRpZSIgPT4gMiwgIk1pdHR3b2NoIiA9 PiAzLCAiTWl0dCIgPT4gMywKCQkgICAgICAiRG9ubmVyc3RhZyIgPT4gNCwgIkRvbiIgPT4gNCwg IkZyZWl0YWciID0+IDUsICJGcmVpIiA9PiA1LCAiU2Ftc3RhZyIgPT4gNiwgIlNhbSIgPT4gNiwK CQkgICAgICAiU29ubnRhZyIgPT4gNywgIlNvbm4iID0+IDcgfQoJR2VybWFuTmFtZXMgPSBbIk1v biIsICJEaWUiLCAiTWl0dCIsICJEb24iLCAiRnJlaSIsICJTYW0iLCAiU29ubiJdCgoJZGVmIHRl c3RfZXF1YWxfMQoJCWRyMSA9ICBEYXlSYW5nZS5uZXcoMSwyLDQsNSkKCQlkcjIgPSAgRGF5UmFu Z2UubmV3KDEsMiw0LDUpCgkJZHIzID0gRGF5UmFuZ2UubmV3KDIsNSw0LDEpCgkJYXNzZXJ0X2Vx dWFsKGRyMSxkcjIpCgkJYXNzZXJ0X2VxdWFsKGRyMSxkcjMpCgllbmQKCglkZWYgdGVzdF93ZWVr c3RhcnRfMQoJCWRyMSA9IERheVJhbmdlLm5ldygnTW9uJywgJ1R1ZXNkYXknLCAnVGh1cnNkYXkn LCAnRnJpZGF5JywgOndlZWtfc3RhcnQgPT4gMikKCQlhc3NlcnRfZXF1YWwoIlR1ZSwgVGh1LUZy aSwgTW9uIixkcjEudG9fcykKCWVuZAoKCWRlZiB0ZXN0X2VxdWFsXzIKCQlkcjEgPSAgRGF5UmFu Z2UubmV3KDEsMiw0LDUpCgkJZHIyID0gRGF5UmFuZ2UubmV3KCdNb25kYXknLCAnVHVlc2RheScs ICdUaHVyc2RheScsICdGcmlkYXknKQoJCWFzc2VydF9lcXVhbChkcjEsZHIyKQoJZW5kCgoJZGVm IHRlc3RfdG9fc19udW1iZXJzCgkJZHIgPSAgRGF5UmFuZ2UubmV3KDEsMiw0LDUpCgkJYXNzZXJ0 X2VxdWFsKCJNb24tVHVlLCBUaHUtRnJpIixkci50b19zKQoJZW5kCgoJZGVmIHRlc3RfdG9fc19u YW1lcwoJCWRyID0gRGF5UmFuZ2UubmV3KCdNb25kYXknLCAnVHVlc2RheScsICdUaHVyc2RheScs ICdGcmlkYXknKQoJCWFzc2VydF9lcXVhbCgiTW9uLVR1ZSwgVGh1LUZyaSIsZHIudG9fcykKCWVu ZAoKCWRlZiB0ZXN0X3RvX3Nfb3B0aW9ucwoJCWRyID0gRGF5UmFuZ2UubmV3KCdNb25kYXknLCAn VHVlc2RheScsICdUaHVyc2RheScsICdGcmlkYXknKQoJCWFzc2VydF9lcXVhbCgiTHVuLU1hciwg SmV1LVZlbiIsIGRyLnRvX3MoOmxhbmd1YWdlID0+IDpGcmVuY2gpKQoJCWFzc2VydF9lcXVhbCgi TWVyY3VyeS1WZW51cywgTWFycy1TYXR1cm4iLCAKCQkJICAgICBkci50b19zKDpkYXlfbmFtZXMg PT4gJXdbTWVyY3VyeSBWZW51cyBFYXJ0aCBNYXJzIFNhdHVybiBKdXBpdGVyIFVyYW51c10pCgkJ CSAgICApCgllbmQKCWRlZiB0ZXN0X3RyYW5zbGF0ZV90b19mcmVuY2gKCQlkciA9ICBEYXlSYW5n ZS5uZXcoMSwyLDQsNSkKCQlhc3NlcnRfZXF1YWwoIkx1bi1NYXIsIEpldS1WZW4iLGRyLnRvX3Mo Omxhbmd1YWdlID0+ICdGcmVuY2gnKSkKCWVuZAoKCWRlZiB0ZXN0X25ld19mcmVuY2gKCQlkcjFG ID0gRGF5UmFuZ2UubmV3KDEsMiw0LDUsIDpsYW5ndWFnZSA9PiAnRnJlbmNoJykKCQlkcjEgPSAg RGF5UmFuZ2UubmV3KDEsMiw0LDUpCgkJYXNzZXJ0X2VxdWFsKGRyMSwgZHIxRikKCQlhc3NlcnRf ZXF1YWwoIkx1bi1NYXIsIEpldS1WZW4iLGRyMUYudG9fcykKCQlhc3NlcnRfZXF1YWwoIk1vbi1U dWUsIFRodS1GcmkiLGRyMUYudG9fcyg6bGFuZ3VhZ2UgPT4gJ0VuZ2xpc2gnKSkKCWVuZAoKCWRl ZiB0ZXN0X25ld19lc3BlcmFudG8KCQlkcjFFc3AgPSBEYXlSYW5nZS5uZXcoMSwyLDQsNSwgOmRh eV9tYXAgPT4gRXNwZXJhbnRvTWFwKQoJCWRyMSA9ICBEYXlSYW5nZS5uZXcoMSwyLDQsNSkKCQlh c3NlcnRfZXF1YWwoZHIxLCBkcjFFc3ApCgkJYXNzZXJ0X2VxdWFsKCJMdW4tTWFyLCBKaGEtVmVu IiwgZHIxRXNwLnRvX3MpCgllbmQKCglkZWYgdGVzdF9iYWRfZGF5cwoJCWFzc2VydF9yYWlzZShB cmd1bWVudEVycm9yKSB7RGF5UmFuZ2UubmV3KDEsMiw4KX0KCQlhc3NlcnRfcmFpc2UoQXJndW1l bnRFcnJvcikge0RheVJhbmdlLm5ldygxLCA6ZGF5X21hcCA9PiB7J01vbicgPT4gMSwgIlR1ZSIg PT4gOX0pfQoJZW5kCgoJZGVmIHRlc3RfYWRkX2dlcm1hbgoJCURheVJhbmdlLnJlbW92ZV9sYW5n dWFnZSg6R2VybWFuKQoJCURheVJhbmdlLmFkZF9sYW5ndWFnZSg6R2VybWFuLCBHZXJtYW5NYXAs IEdlcm1hbk5hbWVzKQoJCWFzc2VydF9lcXVhbCgiRGllLCBEb24sIFNhbS1Tb25uIiwgRGF5UmFu Z2UubmV3KDIsNCw2LDcsIDpsYW5ndWFnZSA9PiAnR2VybWFuJykudG9fcykKCQkKCQlEYXlSYW5n ZS5yZW1vdmVfbGFuZ3VhZ2UoOkdlcm1hbikKCQlEYXlSYW5nZS5hZGRfbGFuZ3VhZ2UoOkdlcm1h biwgR2VybWFuTWFwKQoJCWFzc2VydF9lcXVhbCgiRGllLCBEb24sIFNhbS1Tb25uIiwgRGF5UmFu Z2UubmV3KDIsNCw2LDcsIDpsYW5ndWFnZSA9PiAnR2VybWFuJykudG9fcykKCWVuZAoKCWRlZiB0 ZXN0X2VhY2hfbmFtZQoJCWRyID0gRGF5UmFuZ2UubmV3KDEsMiwgNSwgNikKCQlleHBlY3RlZCA9 IFsnTW9uJywgJ1R1ZScsICdGcmknLCAnU2F0J10KCQlkci5lYWNoX25hbWUgeyB8bmFtZXwgYXNz ZXJ0X2VxdWFsKGV4cGVjdGVkLnNoaWZ0LCBuYW1lKX0KCQlhc3NlcnQoZXhwZWN0ZWQuZW1wdHk/ LCAiTWlzc2luZyByZXN1bHRzICN7ZXhwZWN0ZWQuaW5zcGVjdH0iKQoJCWV4cGVjdGVkID0gWydE b2MnLCAnR3J1bXB5JywgJ0Jhc2hmdWwnLCAnU2xlZXB5J10KCQlkd2FydmVzID0gWydEb2MnLCAn R3J1bXB5JywgJ0hhcHB5JywgJ1NuZWV6eScsJ0Jhc2hmdWwnLCAnU2xlZXB5JywgJ0RvcGV5J10K CQlkci5lYWNoX25hbWUoOmRheV9uYW1lcyA9PiBkd2FydmVzKSB7IHxuYW1lfCBhc3NlcnRfZXF1 YWwoZXhwZWN0ZWQuc2hpZnQsIG5hbWUpfQoJCWFzc2VydChleHBlY3RlZC5lbXB0eT8sICJNaXNz aW5nIHJlc3VsdHMgI3tleHBlY3RlZC5pbnNwZWN0fSIpCgkJZXhwZWN0ZWQgPSBbJ0x1bicsICdN YXInLCAnVmVuJywgJ1NhbSddCgkJZHIuZWFjaF9uYW1lKDpsYW5ndWFnZSA9PiAnRnJlbmNoJykg eyB8bmFtZXwgYXNzZXJ0X2VxdWFsKGV4cGVjdGVkLnNoaWZ0LCBuYW1lKX0KCQlhc3NlcnQoZXhw ZWN0ZWQuZW1wdHk/LCAiTWlzc2luZyByZXN1bHRzICN7ZXhwZWN0ZWQuaW5zcGVjdH0iKQoJZW5k CmVuZAo------ art_39070_6019893.1156962070620--