This is a multi-part message in MIME format. --------------050405090302020802040809 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Sorry I am late on this. PICLIST hasn't posted in 2 days- finally got to see my own posting.... I'ts uploaded as an RTF file. It also contains a simple TP5 DOS Pascal file that can be easily ported over to Delphi (if you can unlock the parallel port IO using Winsoft's IOPORT component). Needs just ONE active pin on the parallel port, but I once wrote a program that monitored 8 PIC products at a time by picking up all 8 products' diagnostic pins. -- The PIC is pumping out a simple diagnostic signal on a single pin. It is sent slowly so that any host (PC, PDA, or PIC) can be used to pick it up without missing a bit through Windows overhead. I usually set it up to send a bit every 4-5ms, but have have set it as fast as 50uS (PIC-to-PIC) and as long as 20ms per bit (very long diagnostic cable), and it works just fine. The PIC is setup to send a 48-bit bit stream, which is 6 8-bit bytes. This is usually enough data to identify local faults. Data is sent Bit7 first. After the 48 bits are sent, another zero bit is sent as a dummy**. After I send 49 bits, I turn off the transmitter for about 16bits, so that the receiver has processed the last 6-byte frame and stored it, and is waiting for the beginning of the next frame. A bit is the period between two RISING EDGES. A bit begins as a 1, which drops to 0 before the next bit starts. If the width of that ONE pulse is more than half the distance to the next bit edge, that bit is a ONE, otherwise that bit is a ZERO. That's all there is folks. ** Why? because a bit is defined as the duration from the BEGINNING of this bit to the BEGINNING of the next one. In order to have a next one, a dummy 48th bit is required (and its data ignored). The receiver simply times (1) the interval between bits and (2) the length of time the pulse stays HIGH, and captures the decision by shifting into registers. If you are doing long-term burnin tests, you should capture the data on a log file that you can examine later. Normally, I use the 1-pin diagnostic by holding a point low on powerup, and when the PIC sees that stick, it hangs until that point is clear, then the diagnostic program is entered. USES Best use of this is in identifying stuck pins. Just manipulate the pins so that the results are read; stucj pins will not provide an appropriate response, which you can interpret with a failure code. Hopefully the stuck pin ISN'T your diagnostic pin! Next-best use of this is in ADC calibration. Example: suppose the PIC is supposed to make a battery charge judgement ('Level 1 to 10'). On a test fixture, you could apply a "battery" of a very precise voltage for each "battery level" decision. Since the PIC's ADC and the components are not overly accurate in combination, the converted value could be sent out over the diagnostic channel, and these values installed into the EEROM for use by the program later (you could reprogram the PIC with those values installed directly into the EEROM), making the battery meter VERY accurate. Build a lookup table for the battery levels. My clients, always looking to prevent losses due to "warranty repair abuse" (people swap a good card with a bad card and send it back under "warranty"), use it with a simple PDA at incoming inspection to determine the date of manufacture (written into the chip on the day it was first programmed). No I didn't write the PDA program, sorry. Finally, it is a great program debugging tool, especially if the debugger runs all the time in the background. For this application, I like to drive PA4, which is usually open collector (no wasted current, PC Host has pullups on the parallel port). When debugging, place the several bytes in strategic paths, and send a copy out the debugger. I'm including two versions, one that is mainline code (no interrupts), and one that is background (called from a 1-2ms interrupt.) --Bob Charles Linquist wrote: > I would like a copy of your routine. > > > Charles Linquist > > -----Original Message----- > From: pic microcontroller discussion list [mailto:PICLIST@MITVMA.MIT.EDU] On > Behalf Of Bob Axtell > Sent: Saturday, June 19, 2004 1:19 PM > To: PICLIST@MITVMA.MIT.EDU > Subject: [PIC]: The Read / Modify / Write stuff > > Actually, the way Microchip handles the READ/MODIFY/WRITE is the correct > one. For one thing it allows the PIC to know when a bit is stuck. 99% of > manufacturing faults on PCBs are shorts to other signals, to GND or to > VCC. Doing an xor of a port and NOT getting back the correct data is a > great, quick way to testing for shorts. > > On powerup, the PIC can execute a tiny routine to test its own signals > and greatly assist the production tech. I do this by dedicating one PIC > pin (usually either the PGM DATA or PGM CLK pin) to sending a manchester > mark diagnostic signal (usually about 48 bits of info). > > Anybody wants the routine, I'd be glad to email it or even post it. > > --Bob > > -- > > Replier: Most attachments rejected > -------------- > Bob Axtell > PIC Hardware & Firmware Dev > http://beam.to/baxtell > 1-520-219-2363 > > -- > http://www.piclist.com hint: To leave the PICList > mailto:piclist-unsubscribe-request@mitvma.mit.edu > > -- > http://www.piclist.com hint: To leave the PICList > mailto:piclist-unsubscribe-request@mitvma.mit.edu > -- Replier: Most attachments rejected -------------- Bob Axtell PIC Hardware & Firmware Dev http://beam.to/baxtell 1-520-219-2363 -- http://www.piclist.com hint: The PICList is archived three different ways. See http://www.piclist.com/#archives for details. --------------050405090302020802040809 Content-Type: application/msword; name="1PDiag.RTF" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="1PDiag.RTF" e1xydGYxXGFuc2lcZGVmZjB7XGZvbnR0Ymx7XGYwXGZtb2Rlcm5cZnBycTFcZmNoYXJzZXQw IENvdXJpZXIgTmV3O319DQp7XGNvbG9ydGJsIDtccmVkMFxncmVlbjBcYmx1ZTA7fQ0KXHZp ZXdraW5kNFx1YzFccGFyZFxjZjFcbGFuZzEwMzNcZjBcZnMyNCBUaGlzIGRpYWdub3N0aWMg aXMganVtcGVkIHRvIHdoZW4gYSBjZXJ0YWluIHBpblxwYXINCmlzIGhlbGQgdG8gZ3JvdW5k IGJ5IGEgdGVzdCBmaXh0dXJlLiBXaGVuIGtleSBpc1xwYXINCnJlbGVhc2VkLCB0aGUgUElD IGp1bXBzIHRvIHRoaXMgcm91dGluZS5ccGFyDQpccGFyDQpUaGlzIHJvdXRpbmUgcG9zdHMg ZGlwIHN3aXRjaCBzZXR0aW5ncyBhcyB3ZWxsIGFzIG1mZ1xwYXINCmNvZGUsIGJhdHRlcnkg QURDIGRhdGEsIGFuZCBwb3J0Qi4gSXQgbG9vcHMgZW5kbGVzc2x5XHBhcg0KdW50aWwgcG93 ZXJlZCBkb3duLlRoaXMgb25lIHN0YXJ0cyB3aXRoIHByZWFtYmxlICcxMTAnXHBhcg0KYmVm b3JlIHRoZSBkYXRhIGJpdHMuXHBhcg0KXHBhcg0KVGhpcyBpcyBhIHRvdGFsbHkgZGlmZmVy ZW50IHdheSBvZiBnZW5lcmF0aW5nIHRoZSBvdXRwdXRccGFyDQpidXQgZG9lbid0IG5lZWQg dG8gdXNlIGFuIGludGVycnVwdC4gICBccGFyDQpccGFyDQo7IE5PIElOVEVSUlVQVFMgQVJF IFJVTk5JTkcgSU4gVEhJUyBST1VUSU5FXHBhcg0KOyBwcm9kdWN0aW9uIHRlc3QgcGF0dGVy bnNccGFyDQo7IGJlZ2luIHdpdGggJzExMCcgYml0cyBmb2xsb3dlZCBieSAyOSBiaXRzIHRo ZW4gYSBnYXBccGFyDQo7IG9mIGJpdHMgb2YgYWxsIDBzXHBhcg0KOyBBNyBpcyBkYXRhXHBh cg0KcHJvdGVzdDpiY2YgICAgIHBvcnRiLDBccGFyDQogICAgICAgIGJzZiAgICAgcG9ydGIs MVxwYXINCiAgICAgICAgYnNmICAgICBwb3J0YiwyXHBhcg0KdGVzdDI6ICBjYWxsICAgIHJk X3N3ICAgICAgICBccGFyDQogICAgICAgIGJ0ZnNzICAgdG1wLDVccGFyDQogICAgICAgIGdv dG8gICAgdGVzdDJccGFyDQp0ZXN0MTogIGNhbGwgICAgcmRfc3dccGFyDQogICAgICAgIGJh bmsxXHBhcg0KICAgICAgICBiY2YgICAgIHRyaXNiLDRccGFyDQogICAgICAgIGJhbmswXHBh cg0KICAgICAgICBjYWxsICAgIGNvbnZlcnQgICAgICAgO3RtcCBoYXMgYmF0dCBkYXRhXHBh cg0KICAgICAgICBtb3ZmICAgIGZsYWdzLHdccGFyDQogICAgICAgIGFuZGx3ICAgNyAgICAg ICAgICAgICA7MyBiaXRzXHBhcg0KICAgICAgICBidGZzYyAgIHBvcnRhLDRccGFyDQogICAg ICAgIGlvcmx3ICAgOCAgXHBhcg0KICAgICAgICBpb3JsdyAgIGInMTEwMDAwMDAnXHBhcg0K ICAgICAgICBtb3Z3ZiAgIGl0bXAxICAgICAgICAgO0xTIDYgYml0cyBvbmx5LCBoYXMgRElQ IFNXICYgU2VsIFNXXHBhcg0KICAgICAgICBtb3ZsdyAgIG1mZ1xwYXINCiAgICAgICAgbW92 d2YgICBpdG1wMiAgICAgICAgIDttZmcgY29kZSBccGFyDQogICAgICAgIG1vdmx3ICAgZCcz MidccGFyDQogICAgICAgIG1vdndmICAgaXRtcDQgICAgICAgICAgO2NvdW50ZXJccGFyDQog ICAgICAgIG1vdmYgICAgcG9ydGIsd1xwYXINCiAgICAgICAgeG9ybHcgICBiJzAwMDEwMDAw J1xwYXINCiAgICAgICAgbW92d2YgICBwb3J0YlxwYXINCiAgICAgICAgbW92d2YgICBpdG1w NFxwYXINCmRiZG8wOiAgYnNmICAgICBzdGF0dXMsY1xwYXINCiAgICAgICAgcmxmICAgICBp dG1wNCxmICAgICAgO3BvcnRiXHBhcg0KICAgICAgICBybGYgICAgIHRtcCxmICAgICAgICA7 YmF0dCBkYXRhXHBhcg0KICAgICAgICBybGYgICAgIGl0bXAyLGYgICAgICA7bWZnIGNvZGVc cGFyDQogICAgICAgIHJsZiAgICAgaXRtcDEsZiAgICAgIDtkaXAgc3cgLyBzZWwgc3dccGFy DQogICAgICAgIGJ0ZnNjICAgc3RhdHVzLGNccGFyDQogICAgICAgIGdvdG8gICAgZGJkbzAx XHBhcg0KICAgICAgICBjYWxsICAgIGRibG93XHBhcg0KICAgICAgICBnb3RvICAgIGRiZG8x XHBhcg0KZGJkbzAxOiBjYWxsICAgIGRib25lXHBhcg0KZGJkbzE6ICBkZWNmc3ogIHRtcDQs ZlxwYXINCiAgICAgICAgZ290byAgICBkYmRvMFxwYXINCiAgICAgICAgY2FsbCAgICBkYm9u ZSAgICAgICA7YWRkaXRpb25hbCBmYWtlIGJpdCBzdGFydCBccGFyDQogICAgICAgIGNhbGwg ICAgZGVsYXkgICAgICAgOzI1NlxwYXINCiAgICAgICAgZ290byAgICB0ZXN0MVxwYXINCjsg ZG8gYSAxXHBhcg0KZGJvbmU6ICBic2YgICAgIHBvcnRiLDBccGFyDQogICAgICAgIG1vdmx3 ICAgZCc0MicgOyogXHBhcg0KICAgICAgICBjYWxsICAgIHdhaXRccGFyDQogICAgICAgIGJj ZiAgICAgcG9ydGIsMFxwYXINCiAgICAgICAgbW92bHcgICBkJzE1JyA7KlxwYXINCiAgICAg ICAgZ290byAgICB3YWl0XHBhcg0KOyBkbyBhIDBccGFyDQpkYmxvdzogIGJzZiAgICAgcG9y dGIsMFxwYXINCiAgICAgICAgbW92bHcgICBkJzEyJyA7KlxwYXINCiAgICAgICAgY2FsbCAg ICB3YWl0XHBhcg0KICAgICAgICBiY2YgICAgIHBvcnRiLDBccGFyDQp3YWl0NDU6IG1vdmx3 ICAgZCc0NScgOypccGFyDQogICAgICAgIGdvdG8gICAgd2FpdFxwYXINCndhaXQ6ICAgbW92 d2YgICB0bXAzXHBhcg0KOyB3YWl0PSA9IC41bXMvY291bnRccGFyDQpkZWxheTogIGNscndk dCAgICAgICAgICAgICAgO2RlbGF5XHBhcg0KXHRhYiAgICBub3BccGFyDQogICAgICAgIGRl Y2ZzeiAgdG1wMyxmXHBhcg0KXHRhYiAgICBnb3RvXHRhYiAgIGRlbGF5XHBhcg0KICAgICAg ICByZXR1cm4gICAgICAgIFxwYXINCjsgXHBhcg0KXHBhcg0KLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS1ccGFyDQpccGFyDQpUaGUgZm9sbG93aW5nIGlzIGEgcm91dGluZSBlbWJlZGRlZCBp bnRvIGEgMm1zXHBhcg0KaW50ZXJydXB0IHZpYSB0bXIwLCAxLCBvciAyIHJvdXRpbmUuXHBh cg0KXHBhcg0KOyB0bXIwIGhhbmRsZXIsIGV2ZXJ5IDJtc1xwYXINCjsgZGlhZ25vc3RpYyBy b3V0aW5lICBlYWNoIGJpdCBoYXMgNCBjeWNsZXNccGFyDQppbnR2M2E6XHRhYiBtb3ZmICAg IGR0aWNrLHdccGFyDQogICAgICAgIGFuZGx3ICAgM1xwYXINCiAgICAgICAgYWRkd2YgICBw Y2wsZlxwYXINCiAgICAgICAgZ290byAgICBpbnR2MDEwICAgO2JlZ2lubmluZyBvZiBiaXQg IFxwYXINCiAgICAgICAgZ290byAgICBpbnR2MDExICAgOyAxLzQgb2YgYml0IGRvbmUgIDEv NFxwYXINCiAgICAgICAgZ290byAgICBpbnR2MTQgICAgOyBjYW4gYmUgaWdub3JlZCAgIDEv MlxwYXINCiAgICAgICAgZ290byAgICBpbnR2MDEzICAgO2hhcyB0byBiZSB0dXJuZWQgb2Zm IG5vdyAzLzRccGFyDQppbnR2MDExOm1vdmZcdGFiIHBvcnRiLHdccGFyDQpcdGFiIGFuZGx3 XHRhYiBiJzExMDExMTExJ1xwYXINCiAgICAgICAgYnRmc3MgICBkaWFnMCw3ICAgIDsgdXNl ZCBmb3IgMSAmIDIgYm90aFxwYXINClx0YWIgaW9ybHdcdGFiIGInMDAxMDAwMDAnIDtvdXRw dXQgd2FzIG9uIFBCNVxwYXINClx0YWIgbW92d2ZcdGFiIHBvcnRiXHBhcg0KICAgICAgICBn b3RvICAgIGludHYxNFxwYXINCmludHYwMTA6YnNmICAgICBwb3J0Yiw1ICAgOyAxIGlmIHJp c2luZyBlZGdlIG9mIGJpdCBccGFyDQogICAgICAgIGdvdG8gICAgaW50djE0XHBhcg0KaW50 djAxM2E6YmNmICAgIHBvcnRiLDVccGFyDQogICAgICAgIGJ0ZnNzICAgc3RhdHVzLHogIDtp cyBkdGljayBhbmQgMyA9IDA/XHBhcg0KICAgICAgICBnb3RvICAgIGludF9leFxwYXINCiAg ICAgICAgZ290byAgICBpbnR2MDE0XHBhcg0KaW50djAxMzpiY2ZcdGFiIHN0YXR1cyxjXHBh cg0KICAgICAgICBybGYgICAgIGRpYWc2LGYgICA7d2l0aCA3Ynl0ZXMsIDcqOCo0KzIgPSAy MjYgY3ljbGVzXHBhcg0KICAgICAgICBybGYgICAgIGRpYWc1LGYgICA7IHRoZSByZW1haW5k ZXIgaXMgYSBnYXAgXHBhcg0KICAgICAgICBybGYgICAgIGRpYWc0LGZccGFyDQogICAgICAg IHJsZiAgICAgZGlhZzMsZlxwYXINCiAgICAgICAgcmxmICAgICBkaWFnMixmXHBhcg0KICAg ICAgICBybGYgICAgIGRpYWcxLGZccGFyDQogICAgICAgIHJsZiAgICAgZGlhZzAsZlxwYXIN CiAgICAgICAgYmNmICAgICBwb3J0Yiw1XHBhcg0KaW50djE0OiBpbmNmc3pcdGFiIGR0aWNr LGYgICBccGFyDQpcdGFiIGdvdG9cdGFiIGludF9leFxwYXINCjtccGFyDQo7IGR1cmluZyB0 aGUgZ2FwLCB0aGUgZGlhZyB0ZW1wIHJlZ2lzdGVycyBhcmUgcmVsb2FkZWQuXHRhYlx0YWJc cGFyDQpccGFyDQpccGFyDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxwYXINClxwYXIN ClRoZSBmb2xsb3dpbmcgaXMgb25lIG9mIG1hbnkgcHJvZHVjdGlvbiB0b29sc1xwYXINCm9u IGEgRE9TIFBDIHRvIHJlYWQgdGhlIE9uZS1QaW4gRGlhZ25vc3RpYy5ccGFyDQpUaGlzIGNh biBiZSBjb252ZXJ0ZWQgdG8gYmUgdXNlZCBpbiBhIERlbHBoaVxwYXINCihXaW4zMikgYXBw bGljYXRpb24gd2l0aCBhIHByb3BlciBJL08gY29tcG9uZW50LlxwYXINClxwYXINCi0tLS0t LVxwYXINClxwYXINClxwYXINClx7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKlx9XHBhcg0KXHsgICBEZWJ1ZyBNb25pdG9yIEZvciAxLXBpbiBEaWFn bm9zdGljIFNpZ25hbCAgXH1ccGFyDQpceyAgIFtvcGVyYXRlcyBmcm9tIHBhcmFsbGVsIHBv cnQgQUNLIHBpbl0gICAgICBcfVxwYXINClx7ICAgd3JpdHRlbiBmb3IgRE9TIFR1cmJvIFBh c2NhbCA1LjAgLSA1LjUgICAgIFx9XHBhcg0KXHsgIFRISVMgb25lLXBpbiBWRVJTSU9OIFNF TkRTIEEgNC1CSVQgUFJFQU1CTEUgXH0gIFxwYXINClx7KioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKlx9XHBhcg0KUHJvZ3JhbSBQMURJQUc7XHBhcg0K XHBhcg0KdXNlcyBET1MsQ1JULE1pc2NUVFQ7ICBce21vZHVsZSBNSVNDVFRUIGp1c3QgaGFz IHNvbWUgXHBhcg0KXHRhYlx0YWJcdGFiXHRhYlx0YWIgQ09OVkVSU0lPTiBST1VUSU5FUywg Tk9USElORyBJTVBPUlRBTlRcfVxwYXINClxwYXINCnR5cGVccGFyDQogICAgbmliYmxlPSBz dHJpbmdbMl07XHBhcg0KXHBhcg0KY29uc3RccGFyDQogICAgZXNjOiAgY2hhciA9ICMyNztc cGFyDQpccGFyDQp2YXJccGFyDQogICAgZXhpdHNhdmUgOiBwb2ludGVyO1xwYXINCiAgICBl cnIsbiAgICA6IGludGVnZXI7XHBhcg0KICAgIHksXHBhcg0KICAgIHBwb3J0LHcgIDogd29y ZDtccGFyDQogICAgcyxzMSxzMiAgOiBzdHJpbmc7XHBhcg0KICAgIGZ4ICAgICAgIDogdGV4 dDtccGFyDQogICAgY2h4LGNoMSxccGFyDQogICAgY2gscHQgICA6IGNoYXI7XHBhcg0KICAg IGRpYWcwLGRpYWcxLGRpYWcyLGRpYWczLGRpYWc0LGRpYWc1LFxwYXINCiAgICBkaWFnNixk aWFnNyxccGFyDQogICAgaSxkLGYgIDogYnl0ZTtccGFyDQogICAgcmVjZWl2ZWQsXHBhcg0K ICAgIGRlYnVnX21vZGU6IGJvb2xlYW47XHBhcg0KICAgIHBwICAgICAgIDogYXJyYXlbMS4u NF0gb2Ygd29yZCBhYnNvbHV0ZSAkNDA6MDg7XHBhcg0KXHBhcg0KcHJvY2VkdXJlIElPQyh3 aDogaW50ZWdlcik7XHBhcg0KXHsgVGhpcyByb3V0aW5lIHNldHMgSU9FcnIgZXF1YWwgdG8g SU9yZXN1bHQgdGhlbiBzZXRzXHBhcg0KICBJT0ZsYWcgYWNjb3JkaW5nbHksIHByaW50cyBt c2cuIFx9XHBhcg0KdmFyXHBhcg0KICAgIGlvdmFsOiBpbnRlZ2VyO1xwYXINCiAgICBzdDog c3RyaW5nWzI4XTtccGFyDQpiZWdpblxwYXINCiAgSU9WYWw6PSBJT3Jlc3VsdDtccGFyDQog IGlmIElPdmFsIDw+IDAgdGhlbiBiZWdpblxwYXINCiAgICBjYXNlIElPVmFsIG9mXHBhcg0K ICAgICAgMSAgOiBzdDo9J0ludiBET1MgRnVuY3Rpb24nO1xwYXINCiAgICAgIDIgIDogc3Q6 PSdGaWxlIE5vbmV4aXN0ZW50JztccGFyDQogICAgICAzICA6IHN0Oj0nUGF0aCBub3QgZm91 bmQnO1xwYXINCiAgICAgIDQgIDogc3Q6PSdNYXggb3BlbiBmaWxlcyc7XHBhcg0KICAgICAg NSAgOiBzdDo9J0ZpbGUgYWNjZXNzIGRlbmllZCc7XHBhcg0KICAgICAgNiAgOiBzdDo9J0lu diBmaWxlIGhhbmRsZSc7XHBhcg0KICAgICAgMTIgOiBzdDo9J0ludiBmaWxlIGFjY2VzcyBj b2RlJztccGFyDQogICAgICAxNSA6IHN0Oj0nSW52IGRyaXZlIG51bWJlcic7XHBhcg0KICAg ICAgMTcgOiBzdDo9J0lsbCByZW5hbWUgYWNyb3NzIGRydic7XHBhcg0KICAgICAgMTAwOiBz dDo9J0Rpc2sgcmVhZCBlcnJvcic7XHBhcg0KICAgICAgMTAxOiBzdDo9J0Rpc2sgd3JpdGUg ZXJyb3InO1xwYXINCiAgICAgIDEwMjogc3Q6PSdGaWxlIHVuYXNzaWduZWQnO1xwYXINCiAg ICAgIDEwMzogc3Q6PSdGaWxlIG5vdCBvcGVuJztccGFyDQogICAgICAxMDQ6IHN0Oj0nRmls ZSBub3Qgb3BlbiBmb3IgaW5wdXQnO1xwYXINCiAgICAgIDEwNTogc3Q6PSdGaWxlIG5vdCBv cGVuIGZvciBvdXRwdXQnO1xwYXINCiAgICAgIDEwNjogc3Q6PSdJbnZhbGlkIG51bWVyaWMg Zm9ybWF0JztccGFyDQogICAgICAxNDQ6IHN0Oj0nUmVjIExlbmd0aCBtaXNtYXRjaCc7XHBh cg0KICAgICAgMTQ1OiBzdDo9J1NlZWsgYmV5b25kIEVPRic7XHBhcg0KICAgICAgMTUwOiBz dDo9J0Rpc2sgaXMgd3JpdGUgcHJvdCc7XHBhcg0KICAgICAgMTUxOiBzdDo9J1Vua25vd24g dW5pdCc7XHBhcg0KICAgICAgMTUyOiBzdDo9J0RyaXZlIG5vdCByZWFkeSc7XHBhcg0KICAg ICAgMTUzOiBzdDo9J1VuZXhwZWN0ZWQgRU9GJztccGFyDQogICAgICAxNTQ6IHN0Oj0nQ1JD IGVycm9yIGluIGRhdGEnO1xwYXINCiAgICAgIDE1NTogc3Q6PSdCYWQgZHJ2IHJlcSBzdHJ1 Y3QgbG5ndGgnO1xwYXINCiAgICAgIDE1Njogc3Q6PSdEaXNrIHNlZWsgZXJyb3InO1xwYXIN CiAgICAgIDE1Nzogc3Q6PSdVbmtub3duIG1lZGlhIHR5cGUnO1xwYXINCiAgICAgIDE1ODog c3Q6PSdTZWN0b3Igbm90IGZvdW5kJztccGFyDQogICAgICAxNTk6IHN0Oj0nUHRyIG91dCBv ZiBwYXBlcic7XHBhcg0KICAgICAgMTYwOiBzdDo9J0RldmljZSB3cml0ZSBmYXVsdCc7XHBh cg0KICAgICAgMTYxOiBzdDo9J0RldmljZSByZWFkIGZhdWx0JztccGFyDQogICAgICAxNjI6 IHN0Oj0nSGFyZHdhcmUgZmFpbHVyZSc7XHBhcg0KICAgICAgMjAwOiBzdDo9J0RpdiBieSAw IGlsbGVnYWwnO1xwYXINCiAgICAgIDIwMjogc3Q6PSdTdGFjayBvdmVyZmxvdyc7XHBhcg0K ICAgICAgMjAzOiBzdDo9J0hlYXAgb3ZlcmZsb3cnO1xwYXINCiAgICAgIDI0MDogc3Q6PSdE aXNrIHdyaXRlIGVycm9yJztccGFyDQogICAgICAyNDE6IHN0Oj0nRGlyZWN0b3J5IGlzIGZ1 bGwnO1xwYXINCiAgICAgIDI0Mjogc3Q6PSdGaWxlIHNpemUgb3ZlcmZsb3cnO1xwYXINCiAg ICAgIDI0Mzogc3Q6PSdUb28gbWFueSBvcGVuIGZpbGVzJztccGFyDQogICAgICAyNTU6IHN0 Oj0nRmlsZSBkaXNhcHBlYXJlZCc7XHBhcg0KICAgIGVuZDtccGFyDQogICAgc3RyKHdoLHMp O1xwYXINCiAgICB3cml0ZShzdCsnIEF0IExvY2F0aW9uICcrcyk7XHBhcg0KICAgIGhhbHQo MClccGFyDQogIGVuZFxwYXINCmVuZDsgXHsgb2YgcHJvYyBJT0NoZWNrIFx9XHBhcg0KXHBh cg0KXHskRitcfVxwYXINCnByb2NlZHVyZSBteWV4aXQ7XHBhcg0KYmVnaW5ccGFyDQogZXhp dHByb2M6PSBleGl0c2F2ZTtccGFyDQogY2xvc2UoZngpO1xwYXINCiBpb2MoOTkpO1xwYXIN CmVuZDtccGFyDQpceyRGLVx9XHBhcg0KXHBhcg0KZnVuY3Rpb24gZ2V0a2V5OiBjaGFyO1xw YXINCnZhciBjaDE6IGNoYXI7XHBhcg0KYmVnaW5ccGFyDQogY2gxOj0gcmVhZGtleTtccGFy DQogaWYgY2gxID0gIzAgdGhlbiBiZWdpblxwYXINCiAgY2gxOj0gcmVhZGtleTtccGFyDQog IGNoMTo9IGNocihvcmQoY2gxKSsxMjgpO1xwYXINCiBlbmQ7XHBhcg0KIGNoeDo9IHVwY2Fz ZShjaDEpO1xwYXINCiBnZXRrZXk6PSBjaHg7XHBhcg0KZW5kO1xwYXINClxwYXINCmZ1bmN0 aW9uIGhleGl6ZSh6OiBieXRlKTogbmliYmxlO1xwYXINCnZhciBhLGI6Ynl0ZTtccGFyDQpi ZWdpblxwYXINCiBhOj0gKHogc2hyIDQpKzQ4O1xwYXINCiBpZiBhID4gJDM5IHRoZW4gYTo9 IGEgKyA3O1xwYXINCiBiOj0gKHogYW5kICRmKSs0ODtccGFyDQogaWYgYiA+ICQzOSB0aGVu IGI6PSBiICsgNztccGFyDQogaGV4aXplOj0gY2hyKGEpICsgY2hyKGIpO1xwYXINCmVuZDtc cGFyDQpccGFyDQpmdW5jdGlvbiBnZXRieXRlKGk6IGJ5dGUpOiBieXRlO1xwYXINCnZhciB4 OiBieXRlO1xwYXINCmJlZ2luXHBhcg0KIGk6PSAoaSBzaGwgMykgKyAxO1xwYXINCiB4Oj0g MDtccGFyDQogaWYgc1tpKzddPScxJyB0aGVuIHg6PSB4KzE7XHBhcg0KIGlmIHNbaSs2XT0n MScgdGhlbiB4Oj0geCsyO1xwYXINCiBpZiBzW2krNV09JzEnIHRoZW4geDo9IHgrNDtccGFy DQogaWYgc1tpKzRdPScxJyB0aGVuIHg6PSB4Kzg7XHBhcg0KIGlmIHNbaSszXT0nMScgdGhl biB4Oj0geCsxNjtccGFyDQogaWYgc1tpKzJdPScxJyB0aGVuIHg6PSB4KzMyO1xwYXINCiBp ZiBzW2krMV09JzEnIHRoZW4geDo9IHgrNjQ7XHBhcg0KIGlmIHNbaSswXT0nMScgdGhlbiB4 Oj0geCsxMjg7XHBhcg0KIGdldGJ5dGU6PSB4XHBhcg0KZW5kO1xwYXINClxwYXINCnByb2Nl ZHVyZSBzY3JlZW5fdXBkYXRlO1xwYXINCmJlZ2luXHBhcg0KIGNscnNjcjtccGFyDQogZ290 b3h5KDEsMSk7XHBhcg0KICAoKlxwYXINCiAgICAgICAgY2FsbCAgICByZXYgICAgICAgICAg ICAgIHRha3JlbiBmcm9tIHdoYXQgSSB3YXMgZG9pbmcgaW4gdGhlIFBJQ1xwYXINCiAgICAg ICAgbW92d2YgICB0bXBccGFyDQogICAgICAgIHN3YXBmICAgdG1wLFdccGFyDQogICAgICAg IGFuZGx3ICAgaCcwZidccGFyDQogICAgICAgIGlvcmx3ICAgYicxMTAwMDAwMCdccGFyDQog ICAgICAgIG1vdndmICAgZGlhZzBccGFyDQogICAgICAgIHN3YXBmICAgdG1wLFdccGFyDQog ICAgICAgIGFuZGx3ICAgaCdmMCdccGFyDQogICAgICAgIG1vdndmICAgZGlhZzFccGFyDQog ICAgICAgIG1vdmYgICAgc3dmbGcyLFdccGFyDQogICAgICAgIGFuZGx3ICAgaCdmJ1xwYXIN CiAgICAgICAgaW9yd2YgICBkaWFnMSxmXHBhcg0KICAgICopXHBhcg0KXHBhcg0KIHMxOj0g aGV4aXplKChkaWFnMSBhbmQgJGYwKSBzaHIgNCkrJy4nK2hleGl6ZShkaWFnMCBhbmQgJGYp O1xwYXINCiB3cml0ZWxuKCcgIE9uZS1QaW4gRGlhZyBUb29sIFYxLjEgKEMpMjAwMyBCb2Ig QXh0ZWxsICBSZXY6JytzMSsnLCA8TFBUJytwdCsnPicpO1xwYXINCiB3cml0ZWxuKCcgJyk7 XHBhcg0KIHdyaXRlbG4oZngsJyAgT25lLVBpbiBEaWFnIFRvb2wgVjEuMSAoQykyMDAzIEJv YiBBeHRlbGwgUmV2OicrczErJywgPExQVCcrcHQrJz4nKTtccGFyDQogaW9jKDQpO1xwYXIN CiB3cml0ZWxuKGZ4LCcgJyk7XHBhcg0KIGlvYyg1KTtccGFyDQogICAgKCpccGFyDQogICAg ICAgIG1vdmYgICAgc3dmbGcyLFdccGFyDQogICAgICAgIGFuZGx3ICAgaCdmJ1xwYXINCiAg ICAgICAgaW9yd2YgICBkaWFnMSxmXHBhcg0KXHBhcg0KICAgICAgICBtb3ZmICAgIHN3Zmxn MSxXXHBhcg0KICAgICAgICBtb3Z3ZiAgIGRpYWcyXHBhcg0KICAgICopXHBhcg0KIHdyaXRl bG4oJyAgU3dpdGNoIFJlZ2lzdGVycy0gU1czOiAnK2hleGl6ZShkaWFnMSBhbmQgJGYpK1xw YXINCiAgJyAgICAgU1cyOiAnK2hleGl6ZSgoZGlhZzIgYW5kICRmMCkgc2hyIDQpKycgICAg IFNXMTogJytoZXhpemUoZGlhZzIgYW5kICRmKSk7XHBhcg0KIHdyaXRlbG4oJyAnKTtccGFy DQogd3JpdGVsbihmeCwnICBTd2l0Y2ggUmVnaXN0ZXJzLSBTVzM6ICcraGV4aXplKGRpYWcx IGFuZCAkZikrXHBhcg0KICAnICAgICBTVzI6ICcraGV4aXplKChkaWFnMiBhbmQgJGYwKSBz aHIgNCkrJyAgICAgU1cxOiAnK2hleGl6ZShkaWFnMiBhbmQgJGYpKTtccGFyDQogaW9jKDYp O1xwYXINCiB3cml0ZWxuKGZ4LCcgJyk7XHBhcg0KIGlvYyg3KTtccGFyDQogICAgICgqXHBh cg0KICAgICAgICBtb3ZmICAgIExDRGFkaixXXHBhcg0KICAgICAgICBtb3Z3ZiAgIGRpYWcz XHBhcg0KXHBhcg0KICAgICAgICBzd2FwZiAgIGxlZDFwLHdccGFyDQogICAgICAgIG1vdndm ICAgdG1wXHBhcg0KICAgICAgICBybGYgICAgIHRtcCxXXHBhcg0KICAgICAgICBhbmRsdyAg IGInMTExMDAwMDAnXHBhcg0KICAgICAgICBtb3Z3ZiAgIGRpYWc0XHBhcg0KICAgICAgICBt b3ZmICAgIFBPUlRBLFdccGFyDQpcdGFiIGFuZGx3ICAgaCcxZidccGFyDQogICAgICAgIGlv cndmICAgZGlhZzQsZlxwYXINClxwYXINCiAgICAgICAgbW92ZiAgICBQT1JUQixXXHBhcg0K ICAgICAgICBtb3Z3ZiAgIGRpYWc3ICAgICA7YTAgYml0IG1heSBiZSBmdW5reVxwYXINClxw YXINCiAgICAgKilccGFyDQogd3JpdGVsbignICBMQ0RhZGo6ICcraGV4aXplKGRpYWczKSsn ICAgICBQdEE6ICcraGV4aXplKGRpYWc0IGFuZCAkMWYpKycgICAgIFB0QjogJytoZXhpemUo ZGlhZzcgYW5kICRmZSkpO1xwYXINCiAgd3JpdGVsbignICcpO1xwYXINCiB3cml0ZWxuKGZ4 LCcgIExDRGFkajogJytoZXhpemUoZGlhZzMpKycgICAgIFB0QTogJytoZXhpemUoZGlhZzQg YW5kICQxZikrJyAgICAgUHRCOiAnK2hleGl6ZShkaWFnNyBhbmQgJGZlKSk7XHBhcg0KICBp b2MoOSk7XHBhcg0KICB3cml0ZWxuKGZ4LCcgJyk7XHBhcg0KICBpb2MoMTApO1xwYXINCiAg ICAoKlxwYXINCiAgICAgICAgbW92ZiAgICBFRURBVEEsV1xwYXINCiAgICAgICAgbW92d2Yg ICBkaWFnNVxwYXINClxwYXINCiAgICAgICAgbW92ZiAgICBkZWJ1ZzAsVyAgO2xhc3QgY29t bWFuZCBzZW50XHBhcg0KICAgICAgICBtb3Z3ZiAgIGRpYWc2XHBhcg0KXHBhcg0KICAgICAg ICBtb3ZmICAgIGxlZDFwLFcgICA7c2VlIFBPUlRBIGFib3ZlXHBhcg0KXHBhcg0KICAgICAq KVxwYXINCiAgd3JpdGVsbignICBDb21tYW5kIEluOiAnK2hleGl6ZShkaWFnNikrJyAgIFBh dHRlcm46ICcraGV4aXplKGRpYWc0IHNociA1KSsnICAgRUVEQVRBOiAnK2hleGl6ZShkaWFn NSkpO1xwYXINCiAgd3JpdGVsbignICcpO1xwYXINCiAgd3JpdGVsbihmeCwnICBDb21tYW5k IEluOiAnK2hleGl6ZShkaWFnNikrJyAgIFBhdHRlcm46ICcraGV4aXplKGRpYWc0IHNociA1 KSsnICAgRUVEQVRBOiAnK2hleGl6ZShkaWFnNSkpO1xwYXINCiAgaW9jKDEyKTtccGFyDQog IHdyaXRlbG4oZngsJyAnKTtccGFyDQogIGlvYygxMyk7XHBhcg0KICB3cml0ZWxuKGZ4LCcg ICcrcyk7XHBhcg0KICBpb2MoMTQpO1xwYXINCiAgd3JpdGVsbihmeCwnICAgICAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICcpO1xwYXINCiAgaW9jKDE1KTtccGFy DQogIHdyaXRlbG4oZngsJyAnKTtccGFyDQogIGlvYygxNik7XHBhcg0KICB3cml0ZWxuKGZ4 LCcgJyk7XHBhcg0KICBpb2MoMTcpO1xwYXINCmVuZDtccGFyDQpccGFyDQpmdW5jdGlvbiBy ZWFkaXQ6IHN0cmluZzsgIFx7cmVhZCB0aGUgZGF0YSBpbiBhbmQgcHJvY2VzcyBpdFx9XHBh cg0KdmFyICAgcyxzMSxzMjogc3RyaW5nO1xwYXINCiAgICAgIGk6IHdvcmQ7XHBhcg0KICAg IHgsejogd29yZDtccGFyDQogICAgY2gxOiBjaGFyO1xwYXINClxwYXINCmZ1bmN0aW9uIHJl YWRiaXQ6IGNoYXI7XHBhcg0KYmVnaW5ccGFyDQogeDo9IDA7XHBhcg0KIHk6PSAwO1xwYXIN CiB3aGlsZSAoeCA8ICQ2ZmYpIGFuZCAocG9ydFtwcG9ydCsxXSBhbmQgNjQgPSA2NCkgZG8g YmVnaW5ccGFyDQogIGlmIGtleXByZXNzZWQgdGhlbiBiZWdpblxwYXINCiAgIGNoMTo9IGdl dGtleTtccGFyDQogICBpZiBjaDEgPSAjMyB0aGVuIGhhbHQ7XHBhcg0KICBlbmQ7XHBhcg0K ICBpbmMoeCk7XHBhcg0KIGVuZDtccGFyDQppZiAoeCA9ICQ2ZmYpIHRoZW4gcmVhZGJpdDo9 ICdYJyBlbHNlIGJlZ2luXHBhcg0KICB3aGlsZSAoeSA8ICQ2ZmYpIGFuZCAocG9ydFtwcG9y dCsxXSBhbmQgNjQgPD4gNjQpIGRvIGJlZ2luXHBhcg0KICAgaWYga2V5cHJlc3NlZCB0aGVu IGJlZ2luXHBhcg0KICAgIGNoMTo9IGdldGtleTtccGFyDQogICAgaWYgY2gxID0gIzMgdGhl biBoYWx0O1xwYXINCiAgIGVuZDtccGFyDQogICBpbmMoeSk7XHBhcg0KICBlbmQ7XHBhcg0K ICBpZiAoeSA9ICQ2ZmYpIHRoZW4gcmVhZGJpdDo9ICdZJyBlbHNlIGJlZ2luXHBhcg0KICAg aWYgeCA8IHkgdGhlbiByZWFkYml0Oj0gJzAnIGVsc2UgcmVhZGJpdDo9ICcxJztccGFyDQog IGVuZDtccGFyDQogZW5kO1xwYXINCmVuZDtccGFyDQpccGFyDQpiZWdpblxwYXINCiBzOj0g Jyc7XHBhcg0KIHJlcGVhdFxwYXINCiAgY2gxOj0gcmVhZGJpdDtccGFyDQogIHM6PSBzK2No MTtccGFyDQogdW50aWwgKGNoMSA9ICdZJykgb3IgKGxlbmd0aChzKSA9IDYzKTtccGFyDQog cmVjZWl2ZWQ6PSBzIDw+ICcnO1xwYXINCiBzOj0gcysnMCc7XHBhcg0KIHJlYWRpdDo9IHNc cGFyDQplbmQ7XHBhcg0KXHBhcg0KYmVnaW5ccGFyDQogZXhpdHNhdmU6PSBleGl0cHJvYztc cGFyDQogZXhpdHByb2M6PSBAbXlleGl0O1xwYXINCiBzOj0gcGFyYW1zdHIoMSkrcGFyYW1z dHIoMik7XHBhcg0KIG46PSBwb3MoJy8nLHMpO1xwYXINCiBkOj0gMTtccGFyDQogaWYgbiA8 PiAwIHRoZW4gYmVnaW5ccGFyDQogIGNoOj0gc1tuKzFdO1xwYXINCiAgaWYgY2ggaW4gWycx Jy4uJzQnXSB0aGVuIGQ6PSBvcmQoY2gpLSQzMFxwYXINCiBlbmQ7XHBhcg0KIHRleHRjb2xv cih5ZWxsb3cpO1xwYXINCiB0ZXh0YmFja2dyb3VuZChibGFjayk7XHBhcg0KIGlmIGV4aXN0 KCdQMUxPRy5UWFQnKSB0aGVuIGJlZ2luXHBhcg0KICBhc3NpZ24oZngsJ1AxTE9HLlRYVCcp O1xwYXINCiAgYXBwZW5kKGZ4KTtccGFyDQogIGlvYygyKVxwYXINCiBlbmQgZWxzZSBiZWdp blxwYXINCiAgYXNzaWduKGZ4LCdQMUxPRy5UWFQnKTtccGFyDQogIHJld3JpdGUoZngpO1xw YXINCiAgaW9jKDMpO1xwYXINCiBlbmQ7XHBhcg0KIHB0Oj0gY2hyKGQrJDMwKTtccGFyDQog aWYgKHBwW2RdID0gMCkgdGhlbiBiZWdpblxwYXINCiAgc3RyKGVycixzKTtccGFyDQogIHdy aXRlbG4oJ09uZS1QaW46JytzKycsIFVuYWJsZSB0byBvcGVuIExQVCcrcHQrJyBwb3J0Jysj Nyk7XHBhcg0KICBoYWx0O1xwYXINCiBlbmQ7XHBhcg0KIHBwb3J0Oj0gcHBbZF07XHBhcg0K IGRpYWcwOj0gMDtccGFyDQogZGlhZzE6PSAwO1xwYXINCiBkaWFnMjo9IDA7XHBhcg0KIGRp YWczOj0gMDtccGFyDQogZGlhZzQ6PSAwO1xwYXINCiBkaWFnNTo9IDA7XHBhcg0KIGRpYWc2 Oj0gMDtccGFyDQogZGlhZzc6PSAwO1xwYXINCiByZXBlYXQgaWYga2V5cHJlc3NlZCB0aGVu IGNoOj0gZ2V0a2V5IHVudGlsIG5vdCBrZXlwcmVzc2VkO1xwYXINCiBDSFg6PSAjJEZGO1xw YXINCiBjbHJzY3I7XHBhcg0KIHJlcGVhdFxwYXINCiAgaWYgKChwb3J0W3Bwb3J0KzFdIGFu ZCA2NCkgPSA2NCkgdGhlbiBiZWdpblxwYXINCiAgIHM6PSByZWFkaXQ7XHBhcg0KICAgaWYg cmVjZWl2ZWQgYW5kIChsZW5ndGgocykgPSA2NCkgYW5kIChjb3B5KHMsMSw0KT0gJzExMDAn KSB0aGVuIGJlZ2luXHBhcg0KICAgIHNvdW5kKDIwMDApO1xwYXINCiAgICBkaWFnMDo9IGdl dGJ5dGUoMCk7XHBhcg0KICAgIGRpYWcxOj0gZ2V0Ynl0ZSgxKTtccGFyDQogICAgZGlhZzI6 PSBnZXRieXRlKDIpO1xwYXINCiAgICBkaWFnMzo9IGdldGJ5dGUoMyk7XHBhcg0KICAgIGRp YWc0Oj0gZ2V0Ynl0ZSg0KTtccGFyDQogICAgZGlhZzU6PSBnZXRieXRlKDUpO1xwYXINCiAg ICBkaWFnNjo9IGdldGJ5dGUoNik7XHBhcg0KICAgIGRpYWc3Oj0gZ2V0Ynl0ZSg3KTtccGFy DQogICAgc2NyZWVuX3VwZGF0ZTtccGFyDQogICAgbm9zb3VuZDtccGFyDQogICAgd3JpdGVs bihzKTtccGFyDQogICAgZGVsYXkoMjAwKVxwYXINCiAgIGVuZCBlbHNlIGJlZ2luXHBhcg0K ICAgIGdvdG94eSgxLDkpO1xwYXINCiAgICBpZiBrZXlwcmVzc2VkIHRoZW4gY2h4Oj0gZ2V0 a2V5O1xwYXINCiAgIGVuZDtccGFyDQogIGVuZDtccGFyDQogIGlmIGtleXByZXNzZWQgdGhl biBjaHg6PSBnZXRrZXk7XHBhcg0KIHVudGlsIChjaHggaW4gWyMyNywjMTk1XSk7XHBhcg0K IGhhbHQ7XHBhcg0KZW5kLlxwYXINClxwYXINCn0NCgA= --------------050405090302020802040809--