From sources-request at octave dot org Tue Nov 22 19:54:48 2005 Subject: Gateway routines to NetLibs ODE.f From: "John Weatherwax" To: octave-sources at octave dot org Date: Tue, 22 Nov 2005 19:25:44 -0600 This is a multi-part message in MIME format. ------=_NextPart_000_75e7_4db_3ae4 Content-Type: text/plain; format=flowed Hello, As practice writting gateway routines in C++ to existing FORTRAN code I have written routines that call the Netlib ordinary differential equations solver code: ode.f. The user can pass in a simple octave function to be integrated and let the existing FORTRAN code to the actual integration. Please let me know of any comments about code/style etc anyone may have. I know that octave has a very good existing ODE solver but for practice I worked on these... Thanks, John Weatherwax _________________________________________________________________ Don’t just search. Find. Check out the new MSN Search! http://search.msn.click-url.com/go/onm00200636ave/direct/01/ ------=_NextPart_000_75e7_4db_3ae4 Content-Type: application/octet-stream; name="F.m" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="F.m" ZnVuY3Rpb24gWyByZXMgXSA9IEYodCx4KQogIAolcmVzID0gMTsgCiVyZXMg PSBzaW4odCk7IApyZXMgPSBzaW4oeCk7IAolcmVzID0gWyB4KDEpKnNpbih4 KDIpKnQpOyB4KDIpKmNvcyh0KSBdOyAKCg== ------=_NextPart_000_75e7_4db_3ae4 Content-Type: application/octet-stream; name="mkODE" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="mkODE" IyEvYmluL3NoCgpta29jdGZpbGUgb2RlZy5jYyBvZGUuZgo= ------=_NextPart_000_75e7_4db_3ae4 Content-Type: application/octet-stream; name="ode.f" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="ode.f" ICAgICAgc3Vicm91dGluZSBvZGUoZixuZXFuLHksdCx0b3V0LHJlbGVycixh YnNlcnIsaWZsYWcsd29yayxpd29yaykKICAgICAgaW1wbGljaXQgcmVhbCo4 KGEtaCxvLXopCmMKYyAgIGRvdWJsZSBwcmVjaXNpb24gc3Vicm91dGluZSBv ZGUgaW50ZWdyYXRlcyBhIHN5c3RlbSBvZiBuZXFuCmMgICBmaXJzdCBvcmRl ciBvcmRpbmFyeSBkaWZmZXJlbnRpYWwgZXF1YXRpb25zIG9mIHRoZSBmb3Jt OgpjICAgICAgICAgICAgIGR5KGkpL2R0ID0gZih0LHkoMSkseSgyKSwuLi4s eShuZXFuKSkKYyAgICAgICAgICAgICB5KGkpIGdpdmVuIGF0ICB0IC4KYyAg IHRoZSBzdWJyb3V0aW5lIGludGVncmF0ZXMgZnJvbSAgdCAgdG8gIHRvdXQg LiAgb24gcmV0dXJuIHRoZQpjICAgcGFyYW1ldGVycyBpbiB0aGUgY2FsbCBs aXN0IGFyZSBzZXQgZm9yIGNvbnRpbnVpbmcgdGhlIGludGVncmF0aW9uLgpj ICAgdGhlIHVzZXIgaGFzIG9ubHkgdG8gZGVmaW5lIGEgbmV3IHZhbHVlICB0 b3V0ICBhbmQgY2FsbCAgb2RlICBhZ2Fpbi4KYwpjICAgdGhlIGRpZmZlcmVu dGlhbCBlcXVhdGlvbnMgYXJlIGFjdHVhbGx5IHNvbHZlZCBieSBhIHN1aXRl IG9mIGNvZGVzCmMgICBkZSAsICBzdGVwICwgYW5kICBpbnRycCAuICBvZGUg IGFsbG9jYXRlcyB2aXJ0dWFsIHN0b3JhZ2UgaW4gdGhlCmMgICBhcnJheXMg IHdvcmsgIGFuZCAgaXdvcmsgIGFuZCBjYWxscyAgZGUgLiAgZGUgIGlzIGEg c3VwZXJ2aXNvciB3aGljaApjICAgZGlyZWN0cyB0aGUgc29sdXRpb24uICBp dCBjYWxscyBvbiB0aGUgcm91dGluZXMgIHN0ZXAgIGFuZCAgaW50cnAKYyAg IHRvIGFkdmFuY2UgdGhlIGludGVncmF0aW9uIGFuZCB0byBpbnRlcnBvbGF0 ZSBhdCBvdXRwdXQgcG9pbnRzLgpjICAgc3RlcCAgdXNlcyBhIG1vZGlmaWVk IGRpdmlkZWQgZGlmZmVyZW5jZSBmb3JtIG9mIHRoZSBhZGFtcyBwZWNlCmMg ICBmb3JtdWxhcyBhbmQgbG9jYWwgZXh0cmFwb2xhdGlvbi4gIGl0IGFkanVz dHMgdGhlIG9yZGVyIGFuZCBzdGVwCmMgICBzaXplIHRvIGNvbnRyb2wgdGhl IGxvY2FsIGVycm9yIHBlciB1bml0IHN0ZXAgaW4gYSBnZW5lcmFsaXplZApj ICAgc2Vuc2UuICBub3JtYWxseSBlYWNoIGNhbGwgdG8gIHN0ZXAgIGFkdmFu Y2VzIHRoZSBzb2x1dGlvbiBvbmUgc3RlcApjICAgaW4gdGhlIGRpcmVjdGlv biBvZiAgdG91dCAuICBmb3IgcmVhc29ucyBvZiBlZmZpY2llbmN5ICBkZQpj ICAgaW50ZWdyYXRlcyBiZXlvbmQgIHRvdXQgIGludGVybmFsbHksIHRob3Vn aCBuZXZlciBiZXlvbmQKYyAgIHQrMTAqKHRvdXQtdCksIGFuZCBjYWxscyAg aW50cnAgIHRvIGludGVycG9sYXRlIHRoZSBzb2x1dGlvbiBhdApjICAgdG91 dCAuICBhbiBvcHRpb24gaXMgcHJvdmlkZWQgdG8gc3RvcCB0aGUgaW50ZWdy YXRpb24gYXQgIHRvdXQgIGJ1dApjICAgaXQgc2hvdWxkIGJlIHVzZWQgb25s eSBpZiBpdCBpcyBpbXBvc3NpYmxlIHRvIGNvbnRpbnVlIHRoZQpjICAgaW50 ZWdyYXRpb24gYmV5b25kICB0b3V0IC4KYwpjICAgdGhpcyBjb2RlIGlzIGNv bXBsZXRlbHkgZXhwbGFpbmVkIGFuZCBkb2N1bWVudGVkIGluIHRoZSB0ZXh0 LApjICAgY29tcHV0ZXIgc29sdXRpb24gb2Ygb3JkaW5hcnkgZGlmZmVyZW50 aWFsIGVxdWF0aW9uczogIHRoZSBpbml0aWFsCmMgICB2YWx1ZSBwcm9ibGVt ICBieSBsLiBmLiBzaGFtcGluZSBhbmQgbS4gay4gZ29yZG9uLgpjCmMgICB0 aGUgcGFyYW1ldGVycyByZXByZXNlbnQ6CmMgICAgICBmIC0tIGRvdWJsZSBw cmVjaXNpb24gc3Vicm91dGluZSBmKHQseSx5cCkgdG8gZXZhbHVhdGUKYyAg ICAgICAgICAgICAgICBkZXJpdmF0aXZlcyB5cChpKT1keShpKS9kdApjICAg ICAgbmVxbiAtLSBudW1iZXIgb2YgZXF1YXRpb25zIHRvIGJlIGludGVncmF0 ZWQgKGludGVnZXIqNCkKYyAgICAgIHkoKikgLS0gc29sdXRpb24gdmVjdG9y IGF0IHQgICAgICAgICAgICAgICAgIChyZWFsKjgpCmMgICAgICB0IC0tIGlu ZGVwZW5kZW50IHZhcmlhYmxlICAgICAgICAgICAgICAgICAgICAocmVhbCo4 KQpjICAgICAgdG91dCAtLSBwb2ludCBhdCB3aGljaCBzb2x1dGlvbiBpcyBk ZXNpcmVkICAgKHJlYWwqOCkKYyAgICAgIHJlbGVycixhYnNlcnIgLS0gcmVs YXRpdmUgYW5kIGFic29sdXRlIGVycm9yIHRvbGVyYW5jZXMgZm9yIGxvY2Fs CmMgICAgICAgICAgIGVycm9yIHRlc3QgKHJlYWwqOCkuICBhdCBlYWNoIHN0 ZXAgdGhlIGNvZGUgcmVxdWlyZXMKYyAgICAgICAgICAgICBkYWJzKGxvY2Fs IGVycm9yKSAubGUuIGRhYnMoeSkqcmVsZXJyICsgYWJzZXJyCmMgICAgICAg ICAgIGZvciBlYWNoIGNvbXBvbmVudCBvZiB0aGUgbG9jYWwgZXJyb3IgYW5k IHNvbHV0aW9uIHZlY3RvcnMKYyAgICAgIGlmbGFnIC0tIGluZGljYXRlcyBz dGF0dXMgb2YgaW50ZWdyYXRpb24gICAgIChpbnRlZ2VyKjQpCmMgICAgICB3 b3JrKCopICAocmVhbCo4KSAgLS0gYXJyYXlzIHRvIGhvbGQgaW5mb3JtYXRp b24gaW50ZXJuYWwgdG8KYyAgICAgIGl3b3JrKCopIChpbnRlZ2VyKjQpICAg IHdoaWNoIGlzIG5lY2Vzc2FyeSBmb3Igc3Vic2VxdWVudCBjYWxscwpjCmMg ICBmaXJzdCBjYWxsIHRvIG9kZSAtLQpjCmMgICB0aGUgdXNlciBtdXN0IHBy b3ZpZGUgc3RvcmFnZSBpbiBoaXMgY2FsbGluZyBwcm9ncmFtIGZvciB0aGUg YXJyYXlzCmMgICBpbiB0aGUgY2FsbCBsaXN0LApjICAgICAgeShuZXFuKSwg d29yaygxMDArMjEqbmVxbiksIGl3b3JrKDUpLApjICAgZGVjbGFyZSAgZiAg aW4gYW4gZXh0ZXJuYWwgc3RhdGVtZW50LCBzdXBwbHkgdGhlIGRvdWJsZSBw cmVjaXNpb24KYyAgIHN1YnJvdXRpbmUgZih0LHkseXApICB0byBldmFsdWF0 ZQpjICAgICAgZHkoaSkvZHQgPSB5cChpKSA9IGYodCx5KDEpLHkoMiksLi4u LHkobmVxbikpCmMgICBhbmQgaW5pdGlhbGl6ZSB0aGUgcGFyYW1ldGVyczoK YyAgICAgIG5lcW4gLS0gbnVtYmVyIG9mIGVxdWF0aW9ucyB0byBiZSBpbnRl Z3JhdGVkCmMgICAgICB5KCopIC0tIHZlY3RvciBvZiBpbml0aWFsIGNvbmRp dGlvbnMKYyAgICAgIHQgLS0gc3RhcnRpbmcgcG9pbnQgb2YgaW50ZWdyYXRp b24KYyAgICAgIHRvdXQgLS0gcG9pbnQgYXQgd2hpY2ggc29sdXRpb24gaXMg ZGVzaXJlZApjICAgICAgcmVsZXJyLGFic2VyciAtLSByZWxhdGl2ZSBhbmQg YWJzb2x1dGUgbG9jYWwgZXJyb3IgdG9sZXJhbmNlcwpjICAgICAgaWZsYWcg LS0gKzEsLTEuICBpbmRpY2F0b3IgdG8gaW5pdGlhbGl6ZSB0aGUgY29kZS4g IG5vcm1hbCBpbnB1dApjICAgICAgICAgICBpcyArMS4gIHRoZSB1c2VyIHNo b3VsZCBzZXQgaWZsYWc9LTEgb25seSBpZiBpdCBpcwpjICAgICAgICAgICBp bXBvc3NpYmxlIHRvIGNvbnRpbnVlIHRoZSBpbnRlZ3JhdGlvbiBiZXlvbmQg IHRvdXQgLgpjICAgYWxsIHBhcmFtZXRlcnMgZXhjZXB0ICBmICwgIG5lcW4g IGFuZCAgdG91dCAgbWF5IGJlIGFsdGVyZWQgYnkgdGhlCmMgICBjb2RlIG9u IG91dHB1dCBzbyBtdXN0IGJlIHZhcmlhYmxlcyBpbiB0aGUgY2FsbGluZyBw cm9ncmFtLgpjCmMgICBvdXRwdXQgZnJvbSAgb2RlICAtLQpjCmMgICAgICBu ZXFuIC0tIHVuY2hhbmdlZApjICAgICAgeSgqKSAtLSBzb2x1dGlvbiBhdCAg dApjICAgICAgdCAtLSBsYXN0IHBvaW50IHJlYWNoZWQgaW4gaW50ZWdyYXRp b24uICBub3JtYWwgcmV0dXJuIGhhcwpjICAgICAgICAgICB0ID0gdG91dCAu CmMgICAgICB0b3V0IC0tIHVuY2hhbmdlZApjICAgICAgcmVsZXJyLGFic2Vy ciAtLSBub3JtYWwgcmV0dXJuIGhhcyB0b2xlcmFuY2VzIHVuY2hhbmdlZC4g IGlmbGFnPTMKYyAgICAgICAgICAgc2lnbmFscyB0b2xlcmFuY2VzIGluY3Jl YXNlZApjICAgICAgaWZsYWcgPSAyIC0tIG5vcm1hbCByZXR1cm4uICBpbnRl Z3JhdGlvbiByZWFjaGVkICB0b3V0CmMgICAgICAgICAgICA9IDMgLS0gaW50 ZWdyYXRpb24gZGlkIG5vdCByZWFjaCAgdG91dCAgYmVjYXVzZSBlcnJvcgpj ICAgICAgICAgICAgICAgICAgIHRvbGVyYW5jZXMgdG9vIHNtYWxsLiAgcmVs ZXJyICwgIGFic2VyciAgaW5jcmVhc2VkCmMgICAgICAgICAgICAgICAgICAg YXBwcm9wcmlhdGVseSBmb3IgY29udGludWluZwpjICAgICAgICAgICAgPSA0 IC0tIGludGVncmF0aW9uIGRpZCBub3QgcmVhY2ggIHRvdXQgIGJlY2F1c2Ug bW9yZSB0aGFuCmMgICAgICAgICAgICAgICAgICAgNTAwIHN0ZXBzIG5lZWRl ZApjICAgICAgICAgICAgPSA1IC0tIGludGVncmF0aW9uIGRpZCBub3QgcmVh Y2ggIHRvdXQgIGJlY2F1c2UgZXF1YXRpb25zCmMgICAgICAgICAgICAgICAg ICAgYXBwZWFyIHRvIGJlIHN0aWZmCmMgICAgICAgICAgICA9IDYgLS0gaW52 YWxpZCBpbnB1dCBwYXJhbWV0ZXJzIChmYXRhbCBlcnJvcikKYyAgICAgICAg ICAgdGhlIHZhbHVlIG9mICBpZmxhZyAgaXMgcmV0dXJuZWQgbmVnYXRpdmUg d2hlbiB0aGUgaW5wdXQKYyAgICAgICAgICAgdmFsdWUgaXMgbmVnYXRpdmUg YW5kIHRoZSBpbnRlZ3JhdGlvbiBkb2VzIG5vdCByZWFjaCAgdG91dCAsCmMg ICAgICAgICAgIGkuZS4sIC0zLCAtNCwgLTUuCmMgICAgICB3b3JrKCopLGl3 b3JrKCopIC0tIGluZm9ybWF0aW9uIGdlbmVyYWxseSBvZiBubyBpbnRlcmVz dCB0byB0aGUKYyAgICAgICAgICAgdXNlciBidXQgbmVjZXNzYXJ5IGZvciBz dWJzZXF1ZW50IGNhbGxzLgpjCmMgICBzdWJzZXF1ZW50IGNhbGxzIHRvICBv ZGUgLS0KYwpjICAgc3Vicm91dGluZSAgb2RlICByZXR1cm5zIHdpdGggYWxs IGluZm9ybWF0aW9uIG5lZWRlZCB0byBjb250aW51ZQpjICAgdGhlIGludGVn cmF0aW9uLiAgaWYgdGhlIGludGVncmF0aW9uIHJlYWNoZWQgIHRvdXQgLCB0 aGUgdXNlciBuZWVkCmMgICBvbmx5IGRlZmluZSBhIG5ldyAgdG91dCAgYW5k IGNhbGwgYWdhaW4uICBpZiB0aGUgaW50ZWdyYXRpb24gZGlkIG5vdApjICAg cmVhY2ggIHRvdXQgIGFuZCB0aGUgdXNlciB3YW50cyB0byBjb250aW51ZSwg aGUganVzdCBjYWxscyBhZ2Fpbi4KYyAgIHRoZSBvdXRwdXQgdmFsdWUgb2Yg IGlmbGFnICBpcyB0aGUgYXBwcm9wcmlhdGUgaW5wdXQgdmFsdWUgZm9yCmMg ICBzdWJzZXF1ZW50IGNhbGxzLiAgdGhlIG9ubHkgc2l0dWF0aW9uIGluIHdo aWNoIGl0IHNob3VsZCBiZSBhbHRlcmVkCmMgICBpcyB0byBzdG9wIHRoZSBp bnRlZ3JhdGlvbiBpbnRlcm5hbGx5IGF0IHRoZSBuZXcgIHRvdXQgLCBpLmUu LApjICAgY2hhbmdlIG91dHB1dCAgaWZsYWc9MiAgdG8gaW5wdXQgIGlmbGFn PS0yIC4gIGVycm9yIHRvbGVyYW5jZXMgbWF5CmMgICBiZSBjaGFuZ2VkIGJ5 IHRoZSB1c2VyIGJlZm9yZSBjb250aW51aW5nLiAgYWxsIG90aGVyIHBhcmFt ZXRlcnMgbXVzdApjICAgcmVtYWluIHVuY2hhbmdlZC4KYwpjKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioKYyogIHN1YnJvdXRpbmVzICBkZSAgYW5kICBz dGVwICBjb250YWluIG1hY2hpbmUgZGVwZW5kZW50IGNvbnN0YW50cy4gKgpj KiAgYmUgc3VyZSB0aGV5IGFyZSBzZXQgYmVmb3JlIHVzaW5nICBvZGUgLiAg ICAgICAgICAgICAgICAgICAgICAgICAgKgpjKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKYwogICAgICBsb2dpY2FsIHN0YXJ0LHBoYXNlMSxub3JuZAog ICAgICBkaW1lbnNpb24geShuZXFuKSx3b3JrKDEpLGl3b3JrKDUpCiAgICAg IGV4dGVybmFsIGYKICAgICAgZGF0YSBpYWxwaGEsaWJldGEsaXNpZyxpdixp dyxpZyxpcGhhc2UsaXBzaSxpeCxpaCxpaG9sZCxpc3RhcnQsCiAgICAgMSAg aXRvbGQsaWRlbHNuLzEsMTMsMjUsMzgsNTAsNjIsNzUsNzYsODgsODksOTAs OTEsOTIsOTMvCiAgICAgIGl5eSA9IDEwMAogICAgICBpd3QgPSBpeXkgKyBu ZXFuCiAgICAgIGlwID0gaXd0ICsgbmVxbgogICAgICBpeXAgPSBpcCArIG5l cW4KICAgICAgaXlwb3V0ID0gaXlwICsgbmVxbgogICAgICBpcGhpID0gaXlw b3V0ICsgbmVxbgogICAgICBpZihpYWJzKGlmbGFnKSAuZXEuIDEpIGdvIHRv IDEKICAgICAgc3RhcnQgPSB3b3JrKGlzdGFydCkgLmd0LiAwLjBkMAogICAg ICBwaGFzZTEgPSB3b3JrKGlwaGFzZSkgLmd0LiAwLjBkMAogICAgICBub3Ju ZCA9IGl3b3JrKDIpIC5uZS4gLTEKICAgIDEgY2FsbCBkZShmLG5lcW4seSx0 LHRvdXQscmVsZXJyLGFic2VycixpZmxhZyx3b3JrKGl5eSksCiAgICAgMSAg d29yayhpd3QpLHdvcmsoaXApLHdvcmsoaXlwKSx3b3JrKGl5cG91dCksd29y ayhpcGhpKSwKICAgICAyICB3b3JrKGlhbHBoYSksd29yayhpYmV0YSksd29y ayhpc2lnKSx3b3JrKGl2KSx3b3JrKGl3KSx3b3JrKGlnKSwKICAgICAzICBw aGFzZTEsd29yayhpcHNpKSx3b3JrKGl4KSx3b3JrKGloKSx3b3JrKGlob2xk KSxzdGFydCwKICAgICA0ICB3b3JrKGl0b2xkKSx3b3JrKGlkZWxzbiksaXdv cmsoMSksbm9ybmQsaXdvcmsoMyksaXdvcmsoNCksCiAgICAgNSAgaXdvcmso NSkpCiAgICAgIHdvcmsoaXN0YXJ0KSA9IC0xLjBkMAogICAgICBpZihzdGFy dCkgd29yayhpc3RhcnQpID0gMS4wZDAKICAgICAgd29yayhpcGhhc2UpID0g LTEuMGQwCiAgICAgIGlmKHBoYXNlMSkgd29yayhpcGhhc2UpID0gMS4wZDAK ICAgICAgaXdvcmsoMikgPSAtMQogICAgICBpZihub3JuZCkgaXdvcmsoMikg PSAxCiAgICAgIHJldHVybgogICAgICBlbmQKICAgICAgc3Vicm91dGluZSBk ZShmLG5lcW4seSx0LHRvdXQscmVsZXJyLGFic2VycixpZmxhZywKICAgICAx ICB5eSx3dCxwLHlwLHlwb3V0LHBoaSxhbHBoYSxiZXRhLHNpZyx2LHcsZyxw aGFzZTEscHNpLHgsaCxob2xkLAogICAgIDIgIHN0YXJ0LHRvbGQsZGVsc2du LG5zLG5vcm5kLGssa29sZCxpc25vbGQpCiAgICAgIGltcGxpY2l0IHJlYWwq OChhLWgsby16KQpjCmMgICBvZGUgIG1lcmVseSBhbGxvY2F0ZXMgc3RvcmFn ZSBmb3IgIGRlICB0byByZWxpZXZlIHRoZSB1c2VyIG9mIHRoZQpjICAgaW5j b252ZW5pZW5jZSBvZiBhIGxvbmcgY2FsbCBsaXN0LiAgY29uc2VxdWVudGx5 ICBkZSAgaXMgdXNlZCBhcwpjICAgZGVzY3JpYmVkIGluIHRoZSBjb21tZW50 cyBmb3IgIG9kZSAuCmMKYyAgIHRoaXMgY29kZSBpcyBjb21wbGV0ZWx5IGV4 cGxhaW5lZCBhbmQgZG9jdW1lbnRlZCBpbiB0aGUgdGV4dCwKYyAgIGNvbXB1 dGVyIHNvbHV0aW9uIG9mIG9yZGluYXJ5IGRpZmZlcmVudGlhbCBlcXVhdGlv bnM6ICB0aGUgaW5pdGlhbApjICAgdmFsdWUgcHJvYmxlbSAgYnkgbC4gZi4g c2hhbXBpbmUgYW5kIG0uIGsuIGdvcmRvbi4KYwogICAgICBsb2dpY2FsIHN0 aWZmLGNyYXNoLHN0YXJ0LHBoYXNlMSxub3JuZAogICAgICBkaW1lbnNpb24g eShuZXFuKSx5eShuZXFuKSx3dChuZXFuKSxwaGkobmVxbiwxNikscChuZXFu KSx5cChuZXFuKSwKICAgICAxICB5cG91dChuZXFuKSxwc2koMTIpLGFscGhh KDEyKSxiZXRhKDEyKSxzaWcoMTMpLHYoMTIpLHcoMTIpLGcoMTMpCiAgICAg IGV4dGVybmFsIGYKYwpjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKYyog IHRoZSBvbmx5IG1hY2hpbmUgZGVwZW5kZW50IGNvbnN0YW50IGlzIGJhc2Vk IG9uIHRoZSBtYWNoaW5lIHVuaXQgICAqCmMqICByb3VuZG9mZiBlcnJvciAg dSAgd2hpY2ggaXMgdGhlIHNtYWxsZXN0IHBvc2l0aXZlIG51bWJlciBzdWNo IHRoYXQgKgpjKiAgMS4wK3UgLmd0LiAxLjAgLiAgdSAgbXVzdCBiZSBjYWxj dWxhdGVkIGFuZCAgZm91cnU9NC4wKnUgIGluc2VydGVkICoKYyogIGluIHRo ZSBmb2xsb3dpbmcgZGF0YSBzdGF0ZW1lbnQgYmVmb3JlIHVzaW5nICBkZSAu ICB0aGUgcm91dGluZSAgICAqCmMqICBtYWNoaW4gIGNhbGN1bGF0ZXMgIHUg LiAgZm91cnUgIGFuZCAgdHdvdT0yLjAqdSAgbXVzdCBhbHNvIGJlICAgICAg KgpjKiAgaW5zZXJ0ZWQgaW4gc3Vicm91dGluZSAgc3RlcCAgYmVmb3JlIGNh bGxpbmcgIGRlIC4gICAgICAgICAgICAgICAgICoKYyAgICAgZGF0YSBmb3Vy dS8uODg4ZC0xNS8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKioqCmMqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpj CmMgICB0aGUgY29uc3RhbnQgIG1heG51bSAgaXMgdGhlIG1heGltdW0gbnVt YmVyIG9mIHN0ZXBzIGFsbG93ZWQgaW4gb25lCmMgICBjYWxsIHRvICBkZSAu ICB0aGUgdXNlciBtYXkgY2hhbmdlIHRoaXMgbGltaXQgYnkgYWx0ZXJpbmcg dGhlCmMgICBmb2xsb3dpbmcgc3RhdGVtZW50CiAgICAgIGRhdGEgbWF4bnVt LzUwMC8KYwpjICAgICAgICAgICAgKioqICAgICAgICAgICAgKioqICAgICAg ICAgICAgKioqCmMgICB0ZXN0IGZvciBpbXByb3BlciBwYXJhbWV0ZXJzCmMK ICAgICAgZm91cnUgPSA0LjAgKiBkMW1hY2goNCkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCiAgICAgIGlmKG5lcW4g Lmx0LiAxKSBnbyB0byAxMAogICAgICBpZih0IC5lcS4gdG91dCkgZ28gdG8g MTAKICAgICAgaWYocmVsZXJyIC5sdC4gMC4wZDAgIC5vci4gIGFic2VyciAu bGUuIDAuMGQwKSBnbyB0byAxMAogICAgICBlcHMgPSBkbWF4MShyZWxlcnIs YWJzZXJyKQogICAgICBpZihlcHMgLmxlLiAwLjBkMCkgZ28gdG8gMTAKICAg ICAgaWYoaWZsYWcgLmVxLiAwKSBnbyB0byAxMAogICAgICBpc24gPSBpc2ln bigxLGlmbGFnKQogICAgICBpZmxhZyA9IGlhYnMoaWZsYWcpCiAgICAgIGlm KGlmbGFnIC5lcS4gMSkgZ28gdG8gMjAKICAgICAgaWYodCAubmUuIHRvbGQp IGdvIHRvIDEwCiAgICAgIGlmKGlmbGFnIC5nZS4gMiAgLmFuZC4gIGlmbGFn IC5sZS4gNSkgZ28gdG8gMjAKICAgMTAgaWZsYWcgPSA2CiAgICAgIHJldHVy bgpjCmMgICBvbiBlYWNoIGNhbGwgc2V0IGludGVydmFsIG9mIGludGVncmF0 aW9uIGFuZCBjb3VudGVyIGZvciBudW1iZXIgb2YKYyAgIHN0ZXBzLiAgYWRq dXN0IGlucHV0IGVycm9yIHRvbGVyYW5jZXMgdG8gZGVmaW5lIHdlaWdodCB2 ZWN0b3IgZm9yCmMgICBzdWJyb3V0aW5lICBzdGVwCmMKICAgMjAgZGVsID0g dG91dCAtIHQKICAgICAgYWJzZGVsID0gZGFicyhkZWwpCiAgICAgIHRlbmQg PSB0ICsgMTAuMGQwKmRlbAogICAgICBpZihpc24gLmx0LiAwKSB0ZW5kID0g dG91dAogICAgICBub3N0ZXAgPSAwCiAgICAgIGtsZTQgPSAwCiAgICAgIHN0 aWZmID0gLmZhbHNlLgogICAgICByZWxlcHMgPSByZWxlcnIvZXBzCiAgICAg IGFic2VwcyA9IGFic2Vyci9lcHMKICAgICAgaWYoaWZsYWcgLmVxLiAxKSBn byB0byAzMAogICAgICBpZihpc25vbGQgLmx0LiAwKSBnbyB0byAzMAogICAg ICBpZihkZWxzZ24qZGVsIC5ndC4gMC4wZDApIGdvIHRvIDUwCmMKYyAgIG9u IHN0YXJ0IGFuZCByZXN0YXJ0IGFsc28gc2V0IHdvcmsgdmFyaWFibGVzIHgg YW5kIHl5KCopLCBzdG9yZSB0aGUKYyAgIGRpcmVjdGlvbiBvZiBpbnRlZ3Jh dGlvbiBhbmQgaW5pdGlhbGl6ZSB0aGUgc3RlcCBzaXplCmMKICAgMzAgc3Rh cnQgPSAudHJ1ZS4KICAgICAgeCA9IHQKICAgICAgZG8gNDAgbCA9IDEsbmVx bgogICA0MCAgIHl5KGwpID0geShsKQogICAgICBkZWxzZ24gPSBkc2lnbigx LjBkMCxkZWwpCiAgICAgIGggPSBkc2lnbihkbWF4MShkYWJzKHRvdXQteCks Zm91cnUqZGFicyh4KSksdG91dC14KQpjCmMgICBpZiBhbHJlYWR5IHBhc3Qg b3V0cHV0IHBvaW50LCBpbnRlcnBvbGF0ZSBhbmQgcmV0dXJuCmMKICAgNTAg aWYoZGFicyh4LXQpIC5sdC4gYWJzZGVsKSBnbyB0byA2MAogICAgICBjYWxs IGludHJwKHgseXksdG91dCx5LHlwb3V0LG5lcW4sa29sZCxwaGkscHNpKQog ICAgICBpZmxhZyA9IDIKICAgICAgdCA9IHRvdXQKICAgICAgdG9sZCA9IHQK ICAgICAgaXNub2xkID0gaXNuCiAgICAgIHJldHVybgpjCmMgICBpZiBjYW5u b3QgZ28gcGFzdCBvdXRwdXQgcG9pbnQgYW5kIHN1ZmZpY2llbnRseSBjbG9z ZSwKYyAgIGV4dHJhcG9sYXRlIGFuZCByZXR1cm4KYwogICA2MCBpZihpc24g Lmd0LiAwICAub3IuICBkYWJzKHRvdXQteCkgLmdlLiBmb3VydSpkYWJzKHgp KSBnbyB0byA4MAogICAgICBoID0gdG91dCAtIHgKICAgICAgY2FsbCBmKHgs eXkseXApCiAgICAgIGRvIDcwIGwgPSAxLG5lcW4KICAgNzAgICB5KGwpID0g eXkobCkgKyBoKnlwKGwpCiAgICAgIGlmbGFnID0gMgogICAgICB0ID0gdG91 dAogICAgICB0b2xkID0gdAogICAgICBpc25vbGQgPSBpc24KICAgICAgcmV0 dXJuCmMKYyAgIHRlc3QgZm9yIHRvbyBtYW55IHN0ZXBzCmMKICAgODAgaWYo bm9zdGVwIC5sdC4gbWF4bnVtKSBnbyB0byAxMDAKICAgICAgaWZsYWcgPSBp c24qNAogICAgICBpZihzdGlmZikgaWZsYWcgPSBpc24qNQogICAgICBkbyA5 MCBsID0gMSxuZXFuCiAgIDkwICAgeShsKSA9IHl5KGwpCiAgICAgIHQgPSB4 CiAgICAgIHRvbGQgPSB0CiAgICAgIGlzbm9sZCA9IDEKICAgICAgcmV0dXJu CmMKYyAgIGxpbWl0IHN0ZXAgc2l6ZSwgc2V0IHdlaWdodCB2ZWN0b3IgYW5k IHRha2UgYSBzdGVwCmMKICAxMDAgaCA9IGRzaWduKGRtaW4xKGRhYnMoaCks ZGFicyh0ZW5kLXgpKSxoKQogICAgICBkbyAxMTAgbCA9IDEsbmVxbgogIDEx MCAgIHd0KGwpID0gcmVsZXBzKmRhYnMoeXkobCkpICsgYWJzZXBzCiAgICAg IGNhbGwgc3RlcCh4LHl5LGYsbmVxbixoLGVwcyx3dCxzdGFydCwKICAgICAx ICBob2xkLGssa29sZCxjcmFzaCxwaGkscCx5cCxwc2ksCiAgICAgMiAgYWxw aGEsYmV0YSxzaWcsdix3LGcscGhhc2UxLG5zLG5vcm5kKQpjCmMgICB0ZXN0 IGZvciB0b2xlcmFuY2VzIHRvbyBzbWFsbApjCiAgICAgIGlmKC5ub3QuY3Jh c2gpIGdvIHRvIDEzMAogICAgICBpZmxhZyA9IGlzbiozCiAgICAgIHJlbGVy ciA9IGVwcypyZWxlcHMKICAgICAgYWJzZXJyID0gZXBzKmFic2VwcwogICAg ICBkbyAxMjAgbCA9IDEsbmVxbgogIDEyMCAgIHkobCkgPSB5eShsKQogICAg ICB0ID0geAogICAgICB0b2xkID0gdAogICAgICBpc25vbGQgPSAxCiAgICAg IHJldHVybgpjCmMgICBhdWdtZW50IGNvdW50ZXIgb24gbnVtYmVyIG9mIHN0 ZXBzIGFuZCB0ZXN0IGZvciBzdGlmZm5lc3MKYwogIDEzMCBub3N0ZXAgPSBu b3N0ZXAgKyAxCiAgICAgIGtsZTQgPSBrbGU0ICsgMQogICAgICBpZihrb2xk IC5ndC4gNCkga2xlNCA9IDAKICAgICAgaWYoa2xlNCAuZ2UuIDUwKSBzdGlm ZiA9IC50cnVlLgogICAgICBnbyB0byA1MAogICAgICBlbmQKICAgICAgc3Vi cm91dGluZSBzdGVwKHgseSxmLG5lcW4saCxlcHMsd3Qsc3RhcnQsCmMgICAg MSAgaG9sZCxrLGtvbGQsY3Jhc2gscGhpLHAseXAscHNpKQogICAgIDEgIGhv bGQsayxrb2xkLGNyYXNoLHBoaSxwLHlwLHBzaSwKICAgICAyICBhbHBoYSxi ZXRhLHNpZyx2LHcsZyxwaGFzZTEsbnMsbm9ybmQpCiAgICAgIGltcGxpY2l0 IHJlYWwqOChhLWgsby16KQpjCmMgICBkb3VibGUgcHJlY2lzaW9uIHN1YnJv dXRpbmUgIHN0ZXAKYyAgIGludGVncmF0ZXMgYSBzeXN0ZW0gb2YgZmlyc3Qg b3JkZXIgb3JkaW5hcnkKYyAgIGRpZmZlcmVudGlhbCBlcXVhdGlvbnMgb25l IHN0ZXAsIG5vcm1hbGx5IGZyb20geCB0byB4K2gsIHVzaW5nIGEKYyAgIG1v ZGlmaWVkIGRpdmlkZWQgZGlmZmVyZW5jZSBmb3JtIG9mIHRoZSBhZGFtcyBw ZWNlIGZvcm11bGFzLiAgbG9jYWwKYyAgIGV4dHJhcG9sYXRpb24gaXMgdXNl ZCB0byBpbXByb3ZlIGFic29sdXRlIHN0YWJpbGl0eSBhbmQgYWNjdXJhY3ku CmMgICB0aGUgY29kZSBhZGp1c3RzIGl0cyBvcmRlciBhbmQgc3RlcCBzaXpl IHRvIGNvbnRyb2wgdGhlIGxvY2FsIGVycm9yCmMgICBwZXIgdW5pdCBzdGVw IGluIGEgZ2VuZXJhbGl6ZWQgc2Vuc2UuICBzcGVjaWFsIGRldmljZXMgYXJl IGluY2x1ZGVkCmMgICB0byBjb250cm9sIHJvdW5kb2ZmIGVycm9yIGFuZCB0 byBkZXRlY3Qgd2hlbiB0aGUgdXNlciBpcyByZXF1ZXN0aW5nCmMgICB0b28g bXVjaCBhY2N1cmFjeS4KYwpjICAgdGhpcyBjb2RlIGlzIGNvbXBsZXRlbHkg ZXhwbGFpbmVkIGFuZCBkb2N1bWVudGVkIGluIHRoZSB0ZXh0LApjICAgY29t cHV0ZXIgc29sdXRpb24gb2Ygb3JkaW5hcnkgZGlmZmVyZW50aWFsIGVxdWF0 aW9uczogIHRoZSBpbml0aWFsCmMgICB2YWx1ZSBwcm9ibGVtICBieSBsLiBm LiBzaGFtcGluZSBhbmQgbS4gay4gZ29yZG9uLgpjCmMKYyAgIHRoZSBwYXJh bWV0ZXJzIHJlcHJlc2VudDoKYyAgICAgIHggLS0gaW5kZXBlbmRlbnQgdmFy aWFibGUgICAgICAgICAgICAgKHJlYWwqOCkKYyAgICAgIHkoKikgLS0gc29s dXRpb24gdmVjdG9yIGF0IHggICAgICAgICAgKHJlYWwqOCkKYyAgICAgIHlw KCopIC0tIGRlcml2YXRpdmUgb2Ygc29sdXRpb24gdmVjdG9yIGF0ICB4ICBh ZnRlciBzdWNjZXNzZnVsCmMgICAgICAgICAgIHN0ZXAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChyZWFsKjgpCmMgICAgICBuZXFuIC0tIG51bWJl ciBvZiBlcXVhdGlvbnMgdG8gYmUgaW50ZWdyYXRlZCAoaW50ZWdlcio0KQpj ICAgICAgaCAtLSBhcHByb3ByaWF0ZSBzdGVwIHNpemUgZm9yIG5leHQgc3Rl cC4gIG5vcm1hbGx5IGRldGVybWluZWQgYnkKYyAgICAgICAgICAgY29kZSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlYWwqOCkKYyAgICAgIGVw cyAtLSBsb2NhbCBlcnJvciB0b2xlcmFuY2UuICBtdXN0IGJlIHZhcmlhYmxl ICAocmVhbCo4KQpjICAgICAgd3QoKikgLS0gdmVjdG9yIG9mIHdlaWdodHMg Zm9yIGVycm9yIGNyaXRlcmlvbiAgIChyZWFsKjgpCmMgICAgICBzdGFydCAt LSBsb2dpY2FsIHZhcmlhYmxlIHNldCAudHJ1ZS4gZm9yIGZpcnN0IHN0ZXAs ICAuZmFsc2UuCmMgICAgICAgICAgIG90aGVyd2lzZSAgICAgICAgICAgICAg ICAgICAgICAgIChsb2dpY2FsKjQpCmMgICAgICBob2xkIC0tIHN0ZXAgc2l6 ZSB1c2VkIGZvciBsYXN0IHN1Y2Nlc3NmdWwgc3RlcCAgKHJlYWwqOCkKYyAg ICAgIGsgLS0gYXBwcm9wcmlhdGUgb3JkZXIgZm9yIG5leHQgc3RlcCAoZGV0 ZXJtaW5lZCBieSBjb2RlKQpjICAgICAga29sZCAtLSBvcmRlciB1c2VkIGZv ciBsYXN0IHN1Y2Nlc3NmdWwgc3RlcApjICAgICAgY3Jhc2ggLS0gbG9naWNh bCB2YXJpYWJsZSBzZXQgLnRydWUuIHdoZW4gbm8gc3RlcCBjYW4gYmUgdGFr ZW4sCmMgICAgICAgICAgIC5mYWxzZS4gb3RoZXJ3aXNlLgpjICAgdGhlIGFy cmF5cyAgcGhpLCBwc2kgIGFyZSByZXF1aXJlZCBmb3IgdGhlIGludGVycG9s YXRpb24gc3Vicm91dGluZQpjICAgaW50cnAuICB0aGUgYXJyYXkgcCBpcyBp bnRlcm5hbCB0byB0aGUgY29kZS4gIGFsbCBhcmUgcmVhbCo4CmMKYyAgIGlu cHV0IHRvICBzdGVwCmMKYyAgICAgIGZpcnN0IGNhbGwgLS0KYwpjICAgdGhl IHVzZXIgbXVzdCBwcm92aWRlIHN0b3JhZ2UgaW4gaGlzIGRyaXZlciBwcm9n cmFtIGZvciBhbGwgYXJyYXlzCmMgICBpbiB0aGUgY2FsbCBsaXN0LCBuYW1l bHkKYwpjICAgICBkaW1lbnNpb24geShuZXFuKSx3dChuZXFuKSxwaGkobmVx biwxNikscChuZXFuKSx5cChuZXFuKSxwc2koMTIpCmMKYyAgIHRoZSB1c2Vy IG11c3QgYWxzbyBkZWNsYXJlICBzdGFydCAgYW5kICBjcmFzaCAgbG9naWNh bCB2YXJpYWJsZXMKYyAgIGFuZCAgZiAgYW4gZXh0ZXJuYWwgc3Vicm91dGlu ZSwgc3VwcGx5IHRoZSBzdWJyb3V0aW5lICBmKHgseSx5cCkKYyAgIHRvIGV2 YWx1YXRlCmMgICAgICBkeShpKS9keCA9IHlwKGkpID0gZih4LHkoMSkseSgy KSwuLi4seShuZXFuKSkKYyAgIGFuZCBpbml0aWFsaXplIG9ubHkgdGhlIGZv bGxvd2luZyBwYXJhbWV0ZXJzOgpjICAgICAgeCAtLSBpbml0aWFsIHZhbHVl IG9mIHRoZSBpbmRlcGVuZGVudCB2YXJpYWJsZQpjICAgICAgeSgqKSAtLSB2 ZWN0b3Igb2YgaW5pdGlhbCB2YWx1ZXMgb2YgZGVwZW5kZW50IHZhcmlhYmxl cwpjICAgICAgbmVxbiAtLSBudW1iZXIgb2YgZXF1YXRpb25zIHRvIGJlIGlu dGVncmF0ZWQKYyAgICAgIGggLS0gbm9taW5hbCBzdGVwIHNpemUgaW5kaWNh dGluZyBkaXJlY3Rpb24gb2YgaW50ZWdyYXRpb24KYyAgICAgICAgICAgYW5k IG1heGltdW0gc2l6ZSBvZiBzdGVwLiAgbXVzdCBiZSB2YXJpYWJsZQpjICAg ICAgZXBzIC0tIGxvY2FsIGVycm9yIHRvbGVyYW5jZSBwZXIgc3RlcC4gIG11 c3QgYmUgdmFyaWFibGUKYyAgICAgIHd0KCopIC0tIHZlY3RvciBvZiBub24t emVybyB3ZWlnaHRzIGZvciBlcnJvciBjcml0ZXJpb24KYyAgICAgIHN0YXJ0 IC0tIC50cnVlLgpjCmMgICBzdGVwICByZXF1aXJlcyB0aGUgbDIgbm9ybSBv ZiB0aGUgdmVjdG9yIHdpdGggY29tcG9uZW50cwpjICAgbG9jYWwgZXJyb3Io bCkvd3QobCkgIGJlIGxlc3MgdGhhbiAgZXBzICBmb3IgYSBzdWNjZXNzZnVs IHN0ZXAuICB0aGUKYyAgIGFycmF5ICB3dCAgYWxsb3dzIHRoZSB1c2VyIHRv IHNwZWNpZnkgYW4gZXJyb3IgdGVzdCBhcHByb3ByaWF0ZQpjICAgZm9yIGhp cyBwcm9ibGVtLiAgZm9yIGV4YW1wbGUsCmMgICAgICB3dChsKSA9IDEuMCAg c3BlY2lmaWVzIGFic29sdXRlIGVycm9yLApjICAgICAgICAgICAgPSBkYWJz KHkobCkpICBlcnJvciByZWxhdGl2ZSB0byB0aGUgbW9zdCByZWNlbnQgdmFs dWUgb2YKYyAgICAgICAgICAgICAgICAgdGhlIGwtdGggY29tcG9uZW50IG9m IHRoZSBzb2x1dGlvbiwKYyAgICAgICAgICAgID0gZGFicyh5cChsKSkgIGVy cm9yIHJlbGF0aXZlIHRvIHRoZSBtb3N0IHJlY2VudCB2YWx1ZSBvZgpjICAg ICAgICAgICAgICAgICB0aGUgbC10aCBjb21wb25lbnQgb2YgdGhlIGRlcml2 YXRpdmUsCmMgICAgICAgICAgICA9IGRtYXgxKHd0KGwpLGRhYnMoeShsKSkp ICBlcnJvciByZWxhdGl2ZSB0byB0aGUgbGFyZ2VzdApjICAgICAgICAgICAg ICAgICBtYWduaXR1ZGUgb2YgbC10aCBjb21wb25lbnQgb2J0YWluZWQgc28g ZmFyLApjICAgICAgICAgICAgPSBkYWJzKHkobCkpKnJlbGVyci9lcHMgKyBh YnNlcnIvZXBzICBzcGVjaWZpZXMgYSBtaXhlZApjICAgICAgICAgICAgICAg ICByZWxhdGl2ZS1hYnNvbHV0ZSB0ZXN0IHdoZXJlICByZWxlcnIgIGlzIHJl bGF0aXZlCmMgICAgICAgICAgICAgICAgIGVycm9yLCAgYWJzZXJyICBpcyBh YnNvbHV0ZSBlcnJvciBhbmQgIGVwcyA9CmMgICAgICAgICAgICAgICAgIGRt YXgxKHJlbGVycixhYnNlcnIpIC4KYwpjICAgICAgc3Vic2VxdWVudCBjYWxs cyAtLQpjCmMgICBzdWJyb3V0aW5lICBzdGVwICBpcyBkZXNpZ25lZCBzbyB0 aGF0IGFsbCBpbmZvcm1hdGlvbiBuZWVkZWQgdG8KYyAgIGNvbnRpbnVlIHRo ZSBpbnRlZ3JhdGlvbiwgaW5jbHVkaW5nIHRoZSBzdGVwIHNpemUgIGggIGFu ZCB0aGUgb3JkZXIKYyAgIGsgLCBpcyByZXR1cm5lZCB3aXRoIGVhY2ggc3Rl cC4gIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgc3RlcApjICAgc2l6ZSwg dGhlIGVycm9yIHRvbGVyYW5jZSwgYW5kIHRoZSB3ZWlnaHRzLCBub25lIG9m IHRoZSBwYXJhbWV0ZXJzCmMgICBzaG91bGQgYmUgYWx0ZXJlZC4gIHRoZSBh cnJheSAgd3QgIG11c3QgYmUgdXBkYXRlZCBhZnRlciBlYWNoIHN0ZXAKYyAg IHRvIG1haW50YWluIHJlbGF0aXZlIGVycm9yIHRlc3RzIGxpa2UgdGhvc2Ug YWJvdmUuICBub3JtYWxseSB0aGUKYyAgIGludGVncmF0aW9uIGlzIGNvbnRp bnVlZCBqdXN0IGJleW9uZCB0aGUgZGVzaXJlZCBlbmRwb2ludCBhbmQgdGhl CmMgICBzb2x1dGlvbiBpbnRlcnBvbGF0ZWQgdGhlcmUgd2l0aCBzdWJyb3V0 aW5lICBpbnRycCAuICBpZiBpdCBpcwpjICAgaW1wb3NzaWJsZSB0byBpbnRl Z3JhdGUgYmV5b25kIHRoZSBlbmRwb2ludCwgdGhlIHN0ZXAgc2l6ZSBtYXkg YmUKYyAgIHJlZHVjZWQgdG8gaGl0IHRoZSBlbmRwb2ludCBzaW5jZSB0aGUg Y29kZSB3aWxsIG5vdCB0YWtlIGEgc3RlcApjICAgbGFyZ2VyIHRoYW4gdGhl ICBoICBpbnB1dC4gIGNoYW5naW5nIHRoZSBkaXJlY3Rpb24gb2YgaW50ZWdy YXRpb24sCmMgICBpLmUuLCB0aGUgc2lnbiBvZiAgaCAsIHJlcXVpcmVzIHRo ZSB1c2VyIHNldCAgc3RhcnQgPSAudHJ1ZS4gYmVmb3JlCmMgICBjYWxsaW5n ICBzdGVwICBhZ2Fpbi4gIHRoaXMgaXMgdGhlIG9ubHkgc2l0dWF0aW9uIGlu IHdoaWNoICBzdGFydApjICAgc2hvdWxkIGJlIGFsdGVyZWQuCmMKYyAgIG91 dHB1dCBmcm9tICBzdGVwCmMKYyAgICAgIHN1Y2Nlc3NmdWwgc3RlcCAtLQpj CmMgICB0aGUgc3Vicm91dGluZSByZXR1cm5zIGFmdGVyIGVhY2ggc3VjY2Vz c2Z1bCBzdGVwIHdpdGggIHN0YXJ0ICBhbmQKYyAgIGNyYXNoICBzZXQgLmZh bHNlLiAuICB4ICByZXByZXNlbnRzIHRoZSBpbmRlcGVuZGVudCB2YXJpYWJs ZQpjICAgYWR2YW5jZWQgb25lIHN0ZXAgb2YgbGVuZ3RoICBob2xkICBmcm9t IGl0cyB2YWx1ZSBvbiBpbnB1dCBhbmQgIHkKYyAgIHRoZSBzb2x1dGlvbiB2 ZWN0b3IgYXQgdGhlIG5ldyB2YWx1ZSBvZiAgeCAuICBhbGwgb3RoZXIgcGFy YW1ldGVycwpjICAgcmVwcmVzZW50IGluZm9ybWF0aW9uIGNvcnJlc3BvbmRp bmcgdG8gdGhlIG5ldyAgeCAgbmVlZGVkIHRvCmMgICBjb250aW51ZSB0aGUg aW50ZWdyYXRpb24uCmMKYyAgICAgIHVuc3VjY2Vzc2Z1bCBzdGVwIC0tCmMK YyAgIHdoZW4gdGhlIGVycm9yIHRvbGVyYW5jZSBpcyB0b28gc21hbGwgZm9y IHRoZSBtYWNoaW5lIHByZWNpc2lvbiwKYyAgIHRoZSBzdWJyb3V0aW5lIHJl dHVybnMgd2l0aG91dCB0YWtpbmcgYSBzdGVwIGFuZCAgY3Jhc2ggPSAudHJ1 ZS4gLgpjICAgYW4gYXBwcm9wcmlhdGUgc3RlcCBzaXplIGFuZCBlcnJvciB0 b2xlcmFuY2UgZm9yIGNvbnRpbnVpbmcgYXJlCmMgICBlc3RpbWF0ZWQgYW5k IGFsbCBvdGhlciBpbmZvcm1hdGlvbiBpcyByZXN0b3JlZCBhcyB1cG9uIGlu cHV0CmMgICBiZWZvcmUgcmV0dXJuaW5nLiAgdG8gY29udGludWUgd2l0aCB0 aGUgbGFyZ2VyIHRvbGVyYW5jZSwgdGhlIHVzZXIKYyAgIGp1c3QgY2FsbHMg dGhlIGNvZGUgYWdhaW4uICBhIHJlc3RhcnQgaXMgbmVpdGhlciByZXF1aXJl ZCBub3IKYyAgIGRlc2lyYWJsZS4KYwogICAgICBsb2dpY2FsIHN0YXJ0LGNy YXNoLHBoYXNlMSxub3JuZAogICAgICBkaW1lbnNpb24geShuZXFuKSx3dChu ZXFuKSxwaGkobmVxbiwxNikscChuZXFuKSx5cChuZXFuKSxwc2koMTIpCiAg ICAgIGRpbWVuc2lvbiBhbHBoYSgxMiksYmV0YSgxMiksc2lnKDEzKSx3KDEy KSx2KDEyKSxnKDEzKSwKICAgICAxICBnc3RyKDEzKSx0d28oMTMpCiAgICAg IGV4dGVybmFsIGYKYyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmMqICB0 aGUgb25seSBtYWNoaW5lIGRlcGVuZGVudCBjb25zdGFudHMgYXJlIGJhc2Vk IG9uIHRoZSBtYWNoaW5lIHVuaXQgKgpjKiAgcm91bmRvZmYgZXJyb3IgIHUg IHdoaWNoIGlzIHRoZSBzbWFsbGVzdCBwb3NpdGl2ZSBudW1iZXIgc3VjaCB0 aGF0ICoKYyogIDEuMCt1IC5ndC4gMS4wICAuICB0aGUgdXNlciBtdXN0IGNh bGN1bGF0ZSAgdSAgYW5kIGluc2VydCAgICAgICAgICAqCmMqICB0d291PTIu MCp1ICBhbmQgIGZvdXJ1PTQuMCp1ICBpbiB0aGUgZGF0YSBzdGF0ZW1lbnQg YmVmb3JlIGNhbGxpbmcgKgpjKiAgdGhlIGNvZGUuICB0aGUgcm91dGluZSAg bWFjaGluICBjYWxjdWxhdGVzICB1IC4gICAgICAgICAgICAgICAgICAgICoK YyAgICAgZGF0YSB0d291LGZvdXJ1Ly40NDRkLTE1LC44ODhkLTE1LyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCmMqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgogICAgICBkYXRhIHR3by8yLjBkMCw0LjBkMCw4LjBk MCwxNi4wZDAsMzIuMGQwLDY0LjBkMCwxMjguMGQwLDI1Ni4wZDAsCiAgICAg MSAgNTEyLjBkMCwxMDI0LjBkMCwyMDQ4LjBkMCw0MDk2LjBkMCw4MTkyLjBk MC8KICAgICAgZGF0YSBnc3RyLzAuNTAwZDAsMC4wODMzZDAsMC4wNDE3ZDAs MC4wMjY0ZDAsMC4wMTg4ZDAsMC4wMTQzZDAsCiAgICAgMSAgMC4wMTE0ZDAs MC4wMDkzNmQwLDAuMDA3ODlkMCwwLjAwNjc5ZDAsMC4wMDU5MmQwLDAuMDA1 MjRkMCwKICAgICAyICAwLjAwNDY4ZDAvCmMgICAgIGRhdGEgZygxKSxnKDIp LzEuMCwwLjUvLHNpZygxKS8xLjAvCmMKYwogICAgICB0d291ID0gMi4wICog ZDFtYWNoKDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqKioKICAgICAgZm91cnUgPSAyLjAgKiB0d291ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCmMg ICAgICAgKioqICAgICBiZWdpbiBibG9jayAwICAgICAqKioKYyAgIGNoZWNr IGlmIHN0ZXAgc2l6ZSBvciBlcnJvciB0b2xlcmFuY2UgaXMgdG9vIHNtYWxs IGZvciBtYWNoaW5lCmMgICBwcmVjaXNpb24uICBpZiBmaXJzdCBzdGVwLCBp bml0aWFsaXplIHBoaSBhcnJheSBhbmQgZXN0aW1hdGUgYQpjICAgc3RhcnRp bmcgc3RlcCBzaXplLgpjICAgICAgICAgICAgICAgICAgICoqKgpjCmMgICBp ZiBzdGVwIHNpemUgaXMgdG9vIHNtYWxsLCBkZXRlcm1pbmUgYW4gYWNjZXB0 YWJsZSBvbmUKYwogICAgICBjcmFzaCA9IC50cnVlLgogICAgICBpZihkYWJz KGgpIC5nZS4gZm91cnUqZGFicyh4KSkgZ28gdG8gNQogICAgICBoID0gZHNp Z24oZm91cnUqZGFicyh4KSxoKQogICAgICByZXR1cm4KICAgIDUgcDVlcHMg PSAwLjVkMCplcHMKYwpjICAgaWYgZXJyb3IgdG9sZXJhbmNlIGlzIHRvbyBz bWFsbCwgaW5jcmVhc2UgaXQgdG8gYW4gYWNjZXB0YWJsZSB2YWx1ZQpjCiAg ICAgIHJvdW5kID0gMC4wZDAKICAgICAgZG8gMTAgbCA9IDEsbmVxbgogICAx MCAgIHJvdW5kID0gcm91bmQgKyAoeShsKS93dChsKSkqKjIKICAgICAgcm91 bmQgPSB0d291KmRzcXJ0KHJvdW5kKQogICAgICBpZihwNWVwcyAuZ2UuIHJv dW5kKSBnbyB0byAxNQogICAgICBlcHMgPSAyLjAqcm91bmQqKDEuMGQwICsg Zm91cnUpCiAgICAgIHJldHVybgogICAxNSBjcmFzaCA9IC5mYWxzZS4KICAg ICAgZygxKT0xLjBkMAogICAgICBnKDIpPTAuNWQwCiAgICAgIHNpZygxKT0x LjBkMAogICAgICBpZigubm90LnN0YXJ0KSBnbyB0byA5OQpjCmMgICBpbml0 aWFsaXplLiAgY29tcHV0ZSBhcHByb3ByaWF0ZSBzdGVwIHNpemUgZm9yIGZp cnN0IHN0ZXAKYwogICAgICBjYWxsIGYoeCx5LHlwKQogICAgICBzdW0gPSAw LjBkMAogICAgICBkbyAyMCBsID0gMSxuZXFuCiAgICAgICAgcGhpKGwsMSkg PSB5cChsKQogICAgICAgIHBoaShsLDIpID0gMC4wZDAKICAgMjAgICBzdW0g PSBzdW0gKyAoeXAobCkvd3QobCkpKioyCiAgICAgIHN1bSA9IGRzcXJ0KHN1 bSkKICAgICAgYWJzaCA9IGRhYnMoaCkKICAgICAgaWYoZXBzIC5sdC4gMTYu MGQwKnN1bSpoKmgpIGFic2ggPSAwLjI1ZDAqZHNxcnQoZXBzL3N1bSkKICAg ICAgaCA9IGRzaWduKGRtYXgxKGFic2gsZm91cnUqZGFicyh4KSksaCkKICAg ICAgaG9sZCA9IDAuMGQwCiAgICAgIGsgPSAxCiAgICAgIGtvbGQgPSAwCiAg ICAgIHN0YXJ0ID0gLmZhbHNlLgogICAgICBwaGFzZTEgPSAudHJ1ZS4KICAg ICAgbm9ybmQgPSAudHJ1ZS4KICAgICAgaWYocDVlcHMgLmd0LiAxMDAuMGQw KnJvdW5kKSBnbyB0byA5OQogICAgICBub3JuZCA9IC5mYWxzZS4KICAgICAg ZG8gMjUgbCA9IDEsbmVxbgogICAyNSAgIHBoaShsLDE1KSA9IDAuMGQwCiAg IDk5IGlmYWlsID0gMApjICAgICAgICoqKiAgICAgZW5kIGJsb2NrIDAgICAg ICoqKgpjCmMgICAgICAgKioqICAgICBiZWdpbiBibG9jayAxICAgICAqKioK YyAgIGNvbXB1dGUgY29lZmZpY2llbnRzIG9mIGZvcm11bGFzIGZvciB0aGlz IHN0ZXAuICBhdm9pZCBjb21wdXRpbmcKYyAgIHRob3NlIHF1YW50aXRpZXMg bm90IGNoYW5nZWQgd2hlbiBzdGVwIHNpemUgaXMgbm90IGNoYW5nZWQuCmMg ICAgICAgICAgICAgICAgICAgKioqCmMKICAxMDAga3AxID0gaysxCiAgICAg IGtwMiA9IGsrMgogICAgICBrbTEgPSBrLTEKICAgICAga20yID0gay0yCmMK YyAgIG5zIGlzIHRoZSBudW1iZXIgb2Ygc3RlcHMgdGFrZW4gd2l0aCBzaXpl IGgsIGluY2x1ZGluZyB0aGUgY3VycmVudApjICAgb25lLiAgd2hlbiBrLmx0 Lm5zLCBubyBjb2VmZmljaWVudHMgY2hhbmdlCmMKICAgICAgaWYoaCAubmUu IGhvbGQpIG5zID0gMAogICAgICBpZihucy5sZS5rb2xkKSAgIG5zPW5zKzEK ICAgICAgbnNwMSA9IG5zKzEKICAgICAgaWYgKGsgLmx0LiBucykgZ28gdG8g MTk5CmMKYyAgIGNvbXB1dGUgdGhvc2UgY29tcG9uZW50cyBvZiBhbHBoYSgq KSxiZXRhKCopLHBzaSgqKSxzaWcoKikgd2hpY2gKYyAgIGFyZSBjaGFuZ2Vk CmMKICAgICAgYmV0YShucykgPSAxLjBkMAogICAgICByZWFsbnMgPSBucwog ICAgICBhbHBoYShucykgPSAxLjBkMC9yZWFsbnMKICAgICAgdGVtcDEgPSBo KnJlYWxucwogICAgICBzaWcobnNwMSkgPSAxLjBkMAogICAgICBpZihrIC5s dC4gbnNwMSkgZ28gdG8gMTEwCiAgICAgIGRvIDEwNSBpID0gbnNwMSxrCiAg ICAgICAgaW0xID0gaS0xCiAgICAgICAgdGVtcDIgPSBwc2koaW0xKQogICAg ICAgIHBzaShpbTEpID0gdGVtcDEKICAgICAgICBiZXRhKGkpID0gYmV0YShp bTEpKnBzaShpbTEpL3RlbXAyCiAgICAgICAgdGVtcDEgPSB0ZW1wMiArIGgK ICAgICAgICBhbHBoYShpKSA9IGgvdGVtcDEKICAgICAgICByZWFsaSA9IGkK ICAxMDUgICBzaWcoaSsxKSA9IHJlYWxpKmFscGhhKGkpKnNpZyhpKQogIDEx MCBwc2koaykgPSB0ZW1wMQpjCmMgICBjb21wdXRlIGNvZWZmaWNpZW50cyBn KCopCmMKYyAgIGluaXRpYWxpemUgdigqKSBhbmQgc2V0IHcoKikuICBnKDIp IGlzIHNldCBpbiBkYXRhIHN0YXRlbWVudApjCiAgICAgIGlmKG5zIC5ndC4g MSkgZ28gdG8gMTIwCiAgICAgIGRvIDExNSBpcSA9IDEsawogICAgICAgIHRl bXAzID0gaXEqKGlxKzEpCiAgICAgICAgdihpcSkgPSAxLjBkMC90ZW1wMwog IDExNSAgIHcoaXEpID0gdihpcSkKICAgICAgZ28gdG8gMTQwCmMKYyAgIGlm IG9yZGVyIHdhcyByYWlzZWQsIHVwZGF0ZSBkaWFnb25hbCBwYXJ0IG9mIHYo KikKYwogIDEyMCBpZihrIC5sZS4ga29sZCkgZ28gdG8gMTMwCiAgICAgIHRl bXA0ID0gayprcDEKICAgICAgdihrKSA9IDEuMGQwL3RlbXA0CiAgICAgIG5z bTIgPSBucy0yCiAgICAgIGlmKG5zbTIgLmx0LiAxKSBnbyB0byAxMzAKICAg ICAgZG8gMTI1IGogPSAxLG5zbTIKICAgICAgICBpID0gay1qCiAgMTI1ICAg dihpKSA9IHYoaSkgLSBhbHBoYShqKzEpKnYoaSsxKQpjCmMgICB1cGRhdGUg digqKSBhbmQgc2V0IHcoKikKYwogIDEzMCBsaW1pdDEgPSBrcDEgLSBucwog ICAgICB0ZW1wNSA9IGFscGhhKG5zKQogICAgICBkbyAxMzUgaXEgPSAxLGxp bWl0MQogICAgICAgIHYoaXEpID0gdihpcSkgLSB0ZW1wNSp2KGlxKzEpCiAg MTM1ICAgdyhpcSkgPSB2KGlxKQogICAgICBnKG5zcDEpID0gdygxKQpjCmMg ICBjb21wdXRlIHRoZSBnKCopIGluIHRoZSB3b3JrIHZlY3RvciB3KCopCmMK ICAxNDAgbnNwMiA9IG5zICsgMgogICAgICBpZihrcDEgLmx0LiBuc3AyKSBn byB0byAxOTkKICAgICAgZG8gMTUwIGkgPSBuc3AyLGtwMQogICAgICAgIGxp bWl0MiA9IGtwMiAtIGkKICAgICAgICB0ZW1wNiA9IGFscGhhKGktMSkKICAg ICAgICBkbyAxNDUgaXEgPSAxLGxpbWl0MgogIDE0NSAgICAgdyhpcSkgPSB3 KGlxKSAtIHRlbXA2KncoaXErMSkKICAxNTAgICBnKGkpID0gdygxKQogIDE5 OSAgIGNvbnRpbnVlCmMgICAgICAgKioqICAgICBlbmQgYmxvY2sgMSAgICAg KioqCmMKYyAgICAgICAqKiogICAgIGJlZ2luIGJsb2NrIDIgICAgICoqKgpj ICAgcHJlZGljdCBhIHNvbHV0aW9uIHAoKiksIGV2YWx1YXRlIGRlcml2YXRp dmVzIHVzaW5nIHByZWRpY3RlZApjICAgc29sdXRpb24sIGVzdGltYXRlIGxv Y2FsIGVycm9yIGF0IG9yZGVyIGsgYW5kIGVycm9ycyBhdCBvcmRlcnMgaywK YyAgIGstMSwgay0yIGFzIGlmIGNvbnN0YW50IHN0ZXAgc2l6ZSB3ZXJlIHVz ZWQuCmMgICAgICAgICAgICAgICAgICAgKioqCmMKYyAgIGNoYW5nZSBwaGkg dG8gcGhpIHN0YXIKYwogICAgICBpZihrIC5sdC4gbnNwMSkgZ28gdG8gMjE1 CiAgICAgIGRvIDIxMCBpID0gbnNwMSxrCiAgICAgICAgdGVtcDEgPSBiZXRh KGkpCiAgICAgICAgZG8gMjA1IGwgPSAxLG5lcW4KICAyMDUgICAgIHBoaShs LGkpID0gdGVtcDEqcGhpKGwsaSkKICAyMTAgICBjb250aW51ZQpjCmMgICBw cmVkaWN0IHNvbHV0aW9uIGFuZCBkaWZmZXJlbmNlcwpjCiAgMjE1IGRvIDIy MCBsID0gMSxuZXFuCiAgICAgICAgcGhpKGwsa3AyKSA9IHBoaShsLGtwMSkK ICAgICAgICBwaGkobCxrcDEpID0gMC4wZDAKICAyMjAgICBwKGwpID0gMC4w ZDAKICAgICAgZG8gMjMwIGogPSAxLGsKICAgICAgICBpID0ga3AxIC0gagog ICAgICAgIGlwMSA9IGkrMQogICAgICAgIHRlbXAyID0gZyhpKQogICAgICAg IGRvIDIyNSBsID0gMSxuZXFuCiAgICAgICAgICBwKGwpID0gcChsKSArIHRl bXAyKnBoaShsLGkpCiAgMjI1ICAgICBwaGkobCxpKSA9IHBoaShsLGkpICsg cGhpKGwsaXAxKQogIDIzMCAgIGNvbnRpbnVlCiAgICAgIGlmKG5vcm5kKSBn byB0byAyNDAKICAgICAgZG8gMjM1IGwgPSAxLG5lcW4KICAgICAgICB0YXUg PSBoKnAobCkgLSBwaGkobCwxNSkKICAgICAgICBwKGwpID0geShsKSArIHRh dQogIDIzNSAgIHBoaShsLDE2KSA9IChwKGwpIC0geShsKSkgLSB0YXUKICAg ICAgZ28gdG8gMjUwCiAgMjQwIGRvIDI0NSBsID0gMSxuZXFuCiAgMjQ1ICAg cChsKSA9IHkobCkgKyBoKnAobCkKICAyNTAgeG9sZCA9IHgKICAgICAgeCA9 IHggKyBoCiAgICAgIGFic2ggPSBkYWJzKGgpCiAgICAgIGNhbGwgZih4LHAs eXApCmMKYyAgIGVzdGltYXRlIGVycm9ycyBhdCBvcmRlcnMgayxrLTEsay0y CmMKICAgICAgZXJrbTIgPSAwLjBkMAogICAgICBlcmttMSA9IDAuMGQwCiAg ICAgIGVyayA9IDAuMGQwCiAgICAgIGRvIDI2NSBsID0gMSxuZXFuCiAgICAg ICAgdGVtcDMgPSAxLjBkMC93dChsKQogICAgICAgIHRlbXA0ID0geXAobCkg LSBwaGkobCwxKQogICAgICAgIGlmKGttMikyNjUsMjYwLDI1NQogIDI1NSAg IGVya20yID0gZXJrbTIgKyAoKHBoaShsLGttMSkrdGVtcDQpKnRlbXAzKSoq MgogIDI2MCAgIGVya20xID0gZXJrbTEgKyAoKHBoaShsLGspK3RlbXA0KSp0 ZW1wMykqKjIKICAyNjUgICBlcmsgPSBlcmsgKyAodGVtcDQqdGVtcDMpKioy CiAgICAgIGlmKGttMikyODAsMjc1LDI3MAogIDI3MCBlcmttMiA9IGFic2gq c2lnKGttMSkqZ3N0cihrbTIpKmRzcXJ0KGVya20yKQogIDI3NSBlcmttMSA9 IGFic2gqc2lnKGspKmdzdHIoa20xKSpkc3FydChlcmttMSkKICAyODAgdGVt cDUgPSBhYnNoKmRzcXJ0KGVyaykKICAgICAgZXJyID0gdGVtcDUqKGcoaykt ZyhrcDEpKQogICAgICBlcmsgPSB0ZW1wNSpzaWcoa3AxKSpnc3RyKGspCiAg ICAgIGtuZXcgPSBrCmMKYyAgIHRlc3QgaWYgb3JkZXIgc2hvdWxkIGJlIGxv d2VyZWQKYwogICAgICBpZihrbTIpMjk5LDI5MCwyODUKICAyODUgaWYoZG1h eDEoZXJrbTEsZXJrbTIpIC5sZS4gZXJrKSBrbmV3ID0ga20xCiAgICAgIGdv IHRvIDI5OQogIDI5MCBpZihlcmttMSAubGUuIDAuNWQwKmVyaykga25ldyA9 IGttMQpjCmMgICB0ZXN0IGlmIHN0ZXAgc3VjY2Vzc2Z1bApjCiAgMjk5IGlm KGVyciAubGUuIGVwcykgZ28gdG8gNDAwCmMgICAgICAgKioqICAgICBlbmQg YmxvY2sgMiAgICAgKioqCmMKYyAgICAgICAqKiogICAgIGJlZ2luIGJsb2Nr IDMgICAgICoqKgpjICAgdGhlIHN0ZXAgaXMgdW5zdWNjZXNzZnVsLiAgcmVz dG9yZSAgeCwgcGhpKCosKiksIHBzaSgqKSAuCmMgICBpZiB0aGlyZCBjb25z ZWN1dGl2ZSBmYWlsdXJlLCBzZXQgb3JkZXIgdG8gb25lLiAgaWYgc3RlcCBm YWlscyBtb3JlCmMgICB0aGFuIHRocmVlIHRpbWVzLCBjb25zaWRlciBhbiBv cHRpbWFsIHN0ZXAgc2l6ZS4gIGRvdWJsZSBlcnJvcgpjICAgdG9sZXJhbmNl IGFuZCByZXR1cm4gaWYgZXN0aW1hdGVkIHN0ZXAgc2l6ZSBpcyB0b28gc21h bGwgZm9yIG1hY2hpbmUKYyAgIHByZWNpc2lvbi4KYyAgICAgICAgICAgICAg ICAgICAqKioKYwpjICAgcmVzdG9yZSB4LCBwaGkoKiwqKSBhbmQgcHNpKCop CmMKICAgICAgcGhhc2UxID0gLmZhbHNlLgogICAgICB4ID0geG9sZAogICAg ICBkbyAzMTAgaSA9IDEsawogICAgICAgIHRlbXAxID0gMS4wZDAvYmV0YShp KQogICAgICAgIGlwMSA9IGkrMQogICAgICAgIGRvIDMwNSBsID0gMSxuZXFu CiAgMzA1ICAgICBwaGkobCxpKSA9IHRlbXAxKihwaGkobCxpKSAtIHBoaShs LGlwMSkpCiAgMzEwICAgY29udGludWUKICAgICAgaWYoayAubHQuIDIpIGdv IHRvIDMyMAogICAgICBkbyAzMTUgaSA9IDIsawogIDMxNSAgIHBzaShpLTEp ID0gcHNpKGkpIC0gaApjCmMgICBvbiB0aGlyZCBmYWlsdXJlLCBzZXQgb3Jk ZXIgdG8gb25lLiAgdGhlcmVhZnRlciwgdXNlIG9wdGltYWwgc3RlcApjICAg c2l6ZQpjCiAgMzIwIGlmYWlsID0gaWZhaWwgKyAxCiAgICAgIHRlbXAyID0g MC41ZDAKICAgICAgaWYoaWZhaWwgLSAzKSAzMzUsMzMwLDMyNQogIDMyNSBp ZihwNWVwcyAubHQuIDAuMjVkMCplcmspIHRlbXAyID0gZHNxcnQocDVlcHMv ZXJrKQogIDMzMCBrbmV3ID0gMQogIDMzNSBoID0gdGVtcDIqaAogICAgICBr ID0ga25ldwogICAgICBpZihkYWJzKGgpIC5nZS4gZm91cnUqZGFicyh4KSkg Z28gdG8gMzQwCiAgICAgIGNyYXNoID0gLnRydWUuCiAgICAgIGggPSBkc2ln bihmb3VydSpkYWJzKHgpLGgpCiAgICAgIGVwcyA9IGVwcyArIGVwcwogICAg ICByZXR1cm4KICAzNDAgZ28gdG8gMTAwCmMgICAgICAgKioqICAgICBlbmQg YmxvY2sgMyAgICAgKioqCmMKYyAgICAgICAqKiogICAgIGJlZ2luIGJsb2Nr IDQgICAgICoqKgpjICAgdGhlIHN0ZXAgaXMgc3VjY2Vzc2Z1bC4gIGNvcnJl Y3QgdGhlIHByZWRpY3RlZCBzb2x1dGlvbiwgZXZhbHVhdGUKYyAgIHRoZSBk ZXJpdmF0aXZlcyB1c2luZyB0aGUgY29ycmVjdGVkIHNvbHV0aW9uIGFuZCB1 cGRhdGUgdGhlCmMgICBkaWZmZXJlbmNlcy4gIGRldGVybWluZSBiZXN0IG9y ZGVyIGFuZCBzdGVwIHNpemUgZm9yIG5leHQgc3RlcC4KYyAgICAgICAgICAg ICAgICAgICAqKioKICA0MDAga29sZCA9IGsKICAgICAgaG9sZCA9IGgKYwpj ICAgY29ycmVjdCBhbmQgZXZhbHVhdGUKYwogICAgICB0ZW1wMSA9IGgqZyhr cDEpCiAgICAgIGlmKG5vcm5kKSBnbyB0byA0MTAKICAgICAgZG8gNDA1IGwg PSAxLG5lcW4KICAgICAgICByaG8gPSB0ZW1wMSooeXAobCkgLSBwaGkobCwx KSkgLSBwaGkobCwxNikKICAgICAgICB5KGwpID0gcChsKSArIHJobwogIDQw NSAgIHBoaShsLDE1KSA9ICh5KGwpIC0gcChsKSkgLSByaG8KICAgICAgZ28g dG8gNDIwCiAgNDEwIGRvIDQxNSBsID0gMSxuZXFuCiAgNDE1ICAgeShsKSA9 IHAobCkgKyB0ZW1wMSooeXAobCkgLSBwaGkobCwxKSkKICA0MjAgY2FsbCBm KHgseSx5cCkKYwpjICAgdXBkYXRlIGRpZmZlcmVuY2VzIGZvciBuZXh0IHN0 ZXAKYwogICAgICBkbyA0MjUgbCA9IDEsbmVxbgogICAgICAgIHBoaShsLGtw MSkgPSB5cChsKSAtIHBoaShsLDEpCiAgNDI1ICAgcGhpKGwsa3AyKSA9IHBo aShsLGtwMSkgLSBwaGkobCxrcDIpCiAgICAgIGRvIDQzNSBpID0gMSxrCiAg ICAgICAgZG8gNDMwIGwgPSAxLG5lcW4KICA0MzAgICAgIHBoaShsLGkpID0g cGhpKGwsaSkgKyBwaGkobCxrcDEpCiAgNDM1ICAgY29udGludWUKYwpjICAg ZXN0aW1hdGUgZXJyb3IgYXQgb3JkZXIgaysxIHVubGVzczoKYyAgICAgaW4g Zmlyc3QgcGhhc2Ugd2hlbiBhbHdheXMgcmFpc2Ugb3JkZXIsCmMgICAgIGFs cmVhZHkgZGVjaWRlZCB0byBsb3dlciBvcmRlciwKYyAgICAgc3RlcCBzaXpl IG5vdCBjb25zdGFudCBzbyBlc3RpbWF0ZSB1bnJlbGlhYmxlCmMKICAgICAg ZXJrcDEgPSAwLjBkMAogICAgICBpZihrbmV3IC5lcS4ga20xICAub3IuICBr IC5lcS4gMTIpIHBoYXNlMSA9IC5mYWxzZS4KICAgICAgaWYocGhhc2UxKSBn byB0byA0NTAKICAgICAgaWYoa25ldyAuZXEuIGttMSkgZ28gdG8gNDU1CiAg ICAgIGlmKGtwMSAuZ3QuIG5zKSBnbyB0byA0NjAKICAgICAgZG8gNDQwIGwg PSAxLG5lcW4KICA0NDAgICBlcmtwMSA9IGVya3AxICsgKHBoaShsLGtwMikv d3QobCkpKioyCiAgICAgIGVya3AxID0gYWJzaCpnc3RyKGtwMSkqZHNxcnQo ZXJrcDEpCmMKYyAgIHVzaW5nIGVzdGltYXRlZCBlcnJvciBhdCBvcmRlciBr KzEsIGRldGVybWluZSBhcHByb3ByaWF0ZSBvcmRlcgpjICAgZm9yIG5leHQg c3RlcApjCiAgICAgIGlmKGsgLmd0LiAxKSBnbyB0byA0NDUKICAgICAgaWYo ZXJrcDEgLmdlLiAwLjVkMCplcmspIGdvIHRvIDQ2MAogICAgICBnbyB0byA0 NTAKICA0NDUgaWYoZXJrbTEgLmxlLiBkbWluMShlcmssZXJrcDEpKSBnbyB0 byA0NTUKICAgICAgaWYoZXJrcDEgLmdlLiBlcmsgIC5vci4gIGsgLmVxLiAx MikgZ28gdG8gNDYwCmMKYyAgIGhlcmUgZXJrcDEgLmx0LiBlcmsgLmx0LiBk bWF4MShlcmttMSxlcmttMikgZWxzZSBvcmRlciB3b3VsZCBoYXZlCmMgICBi ZWVuIGxvd2VyZWQgaW4gYmxvY2sgMi4gIHRodXMgb3JkZXIgaXMgdG8gYmUg cmFpc2VkCmMKYyAgIHJhaXNlIG9yZGVyCmMKICA0NTAgayA9IGtwMQogICAg ICBlcmsgPSBlcmtwMQogICAgICBnbyB0byA0NjAKYwpjICAgbG93ZXIgb3Jk ZXIKYwogIDQ1NSBrID0ga20xCiAgICAgIGVyayA9IGVya20xCmMKYyAgIHdp dGggbmV3IG9yZGVyIGRldGVybWluZSBhcHByb3ByaWF0ZSBzdGVwIHNpemUg Zm9yIG5leHQgc3RlcApjCiAgNDYwIGhuZXcgPSBoICsgaAogICAgICBpZihw aGFzZTEpIGdvIHRvIDQ2NQogICAgICBpZihwNWVwcyAuZ2UuIGVyayp0d28o aysxKSkgZ28gdG8gNDY1CiAgICAgIGhuZXcgPSBoCiAgICAgIGlmKHA1ZXBz IC5nZS4gZXJrKSBnbyB0byA0NjUKICAgICAgdGVtcDIgPSBrKzEKICAgICAg ciA9IChwNWVwcy9lcmspKiooMS4wZDAvdGVtcDIpCiAgICAgIGhuZXcgPSBh YnNoKmRtYXgxKDAuNWQwLGRtaW4xKDAuOWQwLHIpKQogICAgICBobmV3ID0g ZHNpZ24oZG1heDEoaG5ldyxmb3VydSpkYWJzKHgpKSxoKQogIDQ2NSBoID0g aG5ldwogICAgICByZXR1cm4KYyAgICAgICAqKiogICAgIGVuZCBibG9jayA0 ICAgICAqKioKICAgICAgZW5kCiAgICAgIHN1YnJvdXRpbmUgaW50cnAoeCx5 LHhvdXQseW91dCx5cG91dCxuZXFuLGtvbGQscGhpLHBzaSkKICAgICAgaW1w bGljaXQgcmVhbCo4KGEtaCxvLXopCmMKYyAgIHRoZSBtZXRob2RzIGluIHN1 YnJvdXRpbmUgIHN0ZXAgIGFwcHJveGltYXRlIHRoZSBzb2x1dGlvbiBuZWFy ICB4CmMgICBieSBhIHBvbHlub21pYWwuICBzdWJyb3V0aW5lICBpbnRycCAg YXBwcm94aW1hdGVzIHRoZSBzb2x1dGlvbiBhdApjICAgeG91dCAgYnkgZXZh bHVhdGluZyB0aGUgcG9seW5vbWlhbCB0aGVyZS4gIGluZm9ybWF0aW9uIGRl ZmluaW5nIHRoaXMKYyAgIHBvbHlub21pYWwgaXMgcGFzc2VkIGZyb20gIHN0 ZXAgIHNvICBpbnRycCAgY2Fubm90IGJlIHVzZWQgYWxvbmUuCmMKYyAgIHRo aXMgY29kZSBpcyBjb21wbGV0ZWx5IGV4cGxhaW5lZCBhbmQgZG9jdW1lbnRl ZCBpbiB0aGUgdGV4dCwKYyAgIGNvbXB1dGVyIHNvbHV0aW9uIG9mIG9yZGlu YXJ5IGRpZmZlcmVudGlhbCBlcXVhdGlvbnM6ICB0aGUgaW5pdGlhbApjICAg dmFsdWUgcHJvYmxlbSAgYnkgbC4gZi4gc2hhbXBpbmUgYW5kIG0uIGsuIGdv cmRvbi4KYwpjICAgaW5wdXQgdG8gaW50cnAgLS0KYwpjICAgYWxsIGZsb2F0 aW5nIHBvaW50IHZhcmlhYmxlcyBhcmUgZG91YmxlIHByZWNpc2lvbgpjICAg dGhlIHVzZXIgcHJvdmlkZXMgc3RvcmFnZSBpbiB0aGUgY2FsbGluZyBwcm9n cmFtIGZvciB0aGUgYXJyYXlzIGluCmMgICB0aGUgY2FsbCBsaXN0CiAgICAg ICBkaW1lbnNpb24geShuZXFuKSx5b3V0KG5lcW4pLHlwb3V0KG5lcW4pLHBo aShuZXFuLDE2KSxwc2koMTIpCmMgICBhbmQgZGVmaW5lcwpjICAgICAgeG91 dCAtLSBwb2ludCBhdCB3aGljaCBzb2x1dGlvbiBpcyBkZXNpcmVkLgpjICAg dGhlIHJlbWFpbmluZyBwYXJhbWV0ZXJzIGFyZSBkZWZpbmVkIGluICBzdGVw ICBhbmQgcGFzc2VkIHRvICBpbnRycApjICAgZnJvbSB0aGF0IHN1YnJvdXRp bmUKYwpjICAgb3V0cHV0IGZyb20gIGludHJwIC0tCmMKYyAgICAgIHlvdXQo KikgLS0gc29sdXRpb24gYXQgIHhvdXQKYyAgICAgIHlwb3V0KCopIC0tIGRl cml2YXRpdmUgb2Ygc29sdXRpb24gYXQgIHhvdXQKYyAgIHRoZSByZW1haW5p bmcgcGFyYW1ldGVycyBhcmUgcmV0dXJuZWQgdW5hbHRlcmVkIGZyb20gdGhl aXIgaW5wdXQKYyAgIHZhbHVlcy4gIGludGVncmF0aW9uIHdpdGggIHN0ZXAg IG1heSBiZSBjb250aW51ZWQuCmMKICAgICAgZGltZW5zaW9uIGcoMTMpLHco MTMpLHJobygxMykKICAgICAgZGF0YSBnKDEpLzEuMGQwLyxyaG8oMSkvMS4w ZDAvCmMKICAgICAgaGkgPSB4b3V0IC0geAogICAgICBraSA9IGtvbGQgKyAx CiAgICAgIGtpcDEgPSBraSArIDEKYwpjICAgaW5pdGlhbGl6ZSB3KCopIGZv ciBjb21wdXRpbmcgZygqKQpjCiAgICAgIGRvIDUgaSA9IDEsa2kKICAgICAg ICB0ZW1wMSA9IGkKICAgIDUgICB3KGkpID0gMS4wZDAvdGVtcDEKICAgICAg dGVybSA9IDAuMGQwCmMKYyAgIGNvbXB1dGUgZygqKQpjCiAgICAgIGRvIDE1 IGogPSAyLGtpCiAgICAgICAgam0xID0gaiAtIDEKICAgICAgICBwc2lqbTEg PSBwc2koam0xKQogICAgICAgIGdhbW1hID0gKGhpICsgdGVybSkvcHNpam0x CiAgICAgICAgZXRhID0gaGkvcHNpam0xCiAgICAgICAgbGltaXQxID0ga2lw MSAtIGoKICAgICAgICBkbyAxMCBpID0gMSxsaW1pdDEKICAgMTAgICAgIHco aSkgPSBnYW1tYSp3KGkpIC0gZXRhKncoaSsxKQogICAgICAgIGcoaikgPSB3 KDEpCiAgICAgICAgcmhvKGopID0gZ2FtbWEqcmhvKGptMSkKICAgMTUgICB0 ZXJtID0gcHNpam0xCmMKYyAgIGludGVycG9sYXRlCmMKICAgICAgZG8gMjAg bCA9IDEsbmVxbgogICAgICAgIHlwb3V0KGwpID0gMC4wZDAKICAgMjAgICB5 b3V0KGwpID0gMC4wZDAKICAgICAgZG8gMzAgaiA9IDEsa2kKICAgICAgICBp ID0ga2lwMSAtIGoKICAgICAgICB0ZW1wMiA9IGcoaSkKICAgICAgICB0ZW1w MyA9IHJobyhpKQogICAgICAgIGRvIDI1IGwgPSAxLG5lcW4KICAgICAgICAg IHlvdXQobCkgPSB5b3V0KGwpICsgdGVtcDIqcGhpKGwsaSkKICAgMjUgICAg IHlwb3V0KGwpID0geXBvdXQobCkgKyB0ZW1wMypwaGkobCxpKQogICAzMCAg IGNvbnRpbnVlCiAgICAgIGRvIDM1IGwgPSAxLG5lcW4KICAgMzUgICB5b3V0 KGwpID0geShsKSArIGhpKnlvdXQobCkKICAgICAgcmV0dXJuCiAgICAgIGVu ZAo= ------=_NextPart_000_75e7_4db_3ae4 Content-Type: application/octet-stream; name="odeg.cc" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="odeg.cc" I2luY2x1ZGUgPG9jdGF2ZS9vY3QuaD4KI2luY2x1ZGUgPG9jdGF2ZS9wYXJz ZS5oPgojaW5jbHVkZSA8b2N0YXZlL2Y3Ny1mY24uaD4KCi8qIAoKQW4gb2N0 YXZlIGdhdGV3YXkgcm91dGluZSB0byB0aGUgRk9SVFJBTiBjb2RlIG9kZS5m LiAgRGVzY3JpYmVkIGluIAoKQ29tcHV0ZXIgU29sdXRpb24gb2YgT3JkaW5h cnkgRGlmZmVyZW50aWFsIEVxdWF0aW9uczogClRoZSBJbml0aWFsIFZhbHVl IFByb2JsZW0gIApieSBMLiBGLiBTaGFtcGluZSBhbmQgTS4gSy4gR29yZG9u LgoKVGhlIGNvZGUgY2FuIGJlIGZvdW5kIGF0CgpodHRwOi8vY20uYmVsbC1s YWJzLmNvbS9uZXRsaWIvb2RlLwoKV3JpdHRlbiBieToKLS0gCkpvaG4gTC4g V2VhdGhlcndheCAgICAgICAgICAgICAgICAyMDA1LTEwLTI5CgplbWFpbDog d2F4QGFsdW0ubWl0LmVkdQoKUGxlYXNlIHNlbmQgY29tbWVudHMgYW5kIGVz cGVjaWFsbHkgYnVnIHJlcG9ydHMgdG8gdGhlCmFib3ZlIGVtYWlsIGFkZHJl c3MuCgotLS0tLQoqLyAKCnR5cGVkZWYgRjc3X1JFVF9UICgqZm9ydF9mY25f cHRyX2RlYykgKGNvbnN0IGRvdWJsZSYsZG91YmxlKiwgZG91YmxlKik7Cgpl eHRlcm4gIkMiCnsKICBGNzdfUkVUX1QgRjc3X0ZVTkMob2RlLE9ERSkoZm9y dF9mY25fcHRyX2RlYywgY29uc3QgaW50JiwgZG91YmxlKiwgCgkJCSAgICAg IGRvdWJsZSYsIGRvdWJsZSYsIAoJCQkgICAgICBjb25zdCBkb3VibGUmLCBj b25zdCBkb3VibGUmLCAKCQkJICAgICAgaW50JiwgZG91YmxlKiwgaW50KiAp Owp9CgpzdGF0aWMgb2N0YXZlX2Z1bmN0aW9uICpvZGVnX29jdF9mY247CnN0 YXRpYyBpbnQgTkVRTjsgCgpzdGF0aWMgRjc3X1JFVF9UCm9kZWdfZl9mY24o Y29uc3QgZG91YmxlJiB0LCBkb3VibGUqIHgsIGRvdWJsZSogeHApCnsKICBS b3dWZWN0b3IgcnZfeChORVFOKTsgCiAgZm9yKCBpbnQgaWk9MDsgaWkgPCBO RVFOOyBpaSsrICkgcnZfeChpaSk9eFtpaV07CgogIG9jdGF2ZV92YWx1ZV9s aXN0IGFyZ3M7CiAgYXJncygwKSA9IHQ7IGFyZ3MoMSkgPSBydl94OyAKICBp bnQgbmFyZ291dCA9IDE7CgogIG9jdGF2ZV92YWx1ZV9saXN0IHJldHZhbCA9 IGZldmFsKG9kZWdfb2N0X2ZjbiwgYXJncywgbmFyZ291dCk7CgogIGlmICgh IGVycm9yX3N0YXRlICYmIHJldHZhbC5sZW5ndGggKCkgPT0gMSkKICAgIHsK ICAgICAgTWF0cml4IG1feHAgPSByZXR2YWwoMCkubWF0cml4X3ZhbHVlKCk7 CiAgICAgIGZvciAoaW50IGlpID0gMDsgaWkgPCBORVFOOyBpaSsrKXsKCXhw W2lpXSA9IG1feHAoaWkpOwogICAgICB9CgogICAgICBpZiAoZXJyb3Jfc3Rh dGUpCgllcnJvciAoImZhaWx1cmUgZXZhbHVhdGluZyB1c2VyLXN1cHBsaWVk IGZ1bmN0aW9uIik7CiAgICB9CiAgZWxzZQogICAgZXJyb3IgKCJmYWlsdXJl IGV2YWx1YXRpbmcgdXNlci1zdXBwbGllZCBmdW5jdGlvbiIpOwoKICBGNzdf UkVUVVJOKDApOwp9CgovLyBDKysgb2N0YXZlIEFQSSBjYWxscyBvZiB0aGUg dXNlcidzIGlucHV0IGZ1bmN0aW9uOgovLwpDb2x1bW5WZWN0b3IKb2RlX2Zf ZnVuY3Rpb24oZG91YmxlIHQsIGNvbnN0IENvbHVtblZlY3RvciYgeCkKewog IENvbHVtblZlY3RvciByZXR2YWw7CgogIG9jdGF2ZV92YWx1ZV9saXN0IGFy Z3M7CiAgYXJncygwKSA9IHQ7IGFyZ3MoMSkgPSB4OwoKICBpZiAob2RlZ19v Y3RfZmNuKQogICAgewogICAgICBvY3RhdmVfdmFsdWVfbGlzdCB0bXAgPSBv ZGVnX29jdF9mY24tPmRvX211bHRpX2luZGV4X29wICgxLCBhcmdzKTsKCiAg ICAgIGlmIChlcnJvcl9zdGF0ZSkKCXsKCSAgZ3JpcGVfdXNlcl9zdXBwbGll ZF9ldmFsICgib2RlZ19vY3RfZmNuIik7CgkgIHJldHVybiByZXR2YWw7Cgl9 CgogICAgICBpZiAodG1wLmxlbmd0aCAoKSA+IDAgJiYgdG1wKDApLmlzX2Rl ZmluZWQgKCkpCgl7CgkgIHJldHZhbCA9IENvbHVtblZlY3RvciAodG1wKDAp LnZlY3Rvcl92YWx1ZSAoKSk7CgoJICBpZiAoZXJyb3Jfc3RhdGUgfHwgcmV0 dmFsLmxlbmd0aCAoKSA9PSAwKQoJICAgIGdyaXBlX3VzZXJfc3VwcGxpZWRf ZXZhbCAoIm9kZWdfb2N0X2ZjbiIpOwoJfQogICAgICBlbHNlCglncmlwZV91 c2VyX3N1cHBsaWVkX2V2YWwgKCJvZGVnX29jdF9mY24iKTsKICAgIH0KCiAg cmV0dXJuIHJldHZhbDsKfQoKCkRFRlVOX0RMRCAob2RlZywgYXJncywgbmFy Z291dCwKICAieF90ID0gb2RlZyhmY24sIHRzcGFuLCB4XzApOiBJbnRlZ3Jh dGVzIGR4L2R0ID0gZmNuIGZyb20gdHNwYW4oMSlcblwKICAgdG8gdHNwYW4o ZW5kKS4gIFRoZSBhcnJheSB0c3BhbiBjYW4gYmUgZWl0aGVyIGEgdHdvIGVs ZW1lbnQgaW4gc2l6ZVxuXAogICBvciBoYXZlIG11bHRpcGxlIGVsbWVudHMs IGVpdGhlciB3YXkgdGhlIG91dHB1dCB4X3QgcmVwcmVzZW50cyB0aGVcblwK ICAgc29sdXRpb24gaW50ZWdyYXRlZCB0byBlYWNoIGVsZW1lbnQgaW4gdHNw YW4iKQp7CiAgb2N0YXZlX3ZhbHVlX2xpc3QgcmV0dmFsOwoKICBpZiggYXJn cy5sZW5ndGgoKSAhPSAzICl7IHByaW50X3VzYWdlKCJvZGVnIik7IHJldHVy biByZXR2YWw7IH0KICBpZiggbmFyZ291dCA+IDEgKSB7IHByaW50X3VzYWdl KCJvZGVnIik7IHJldHVybiByZXR2YWw7IH0KCiAgLy8gRXh0cmFjdCB0aGUg dXNlciBpbnB1dDoKICAvLwogIG9kZWdfb2N0X2ZjbiA9IGV4dHJhY3RfZnVu Y3Rpb24oYXJncygwKSwgIm9kZWciLCAiX19vZGVnX29jdF9mY25fXyIsCgkg ICAgICJmdW5jdGlvbiBGID0gX19vZGVnX29jdF9mY25fXyAodCwgeCkgIiwg IjsgZW5kZnVuY3Rpb24iKTsKICBpZihlcnJvcl9zdGF0ZSl7CiAgICBlcnJv ciggIm9kZWc6IGV4cGVjdGluZyBhIGZ1bmN0aW9uIGZvciB0aGUgZmlyc3Qg YXJndW1lbnQiICk7IAogIH0gCiAgQ29sdW1uVmVjdG9yIFRTUEFOKCBhcmdz KDEpLnZlY3Rvcl92YWx1ZSgpICk7CiAgaWYoZXJyb3Jfc3RhdGUpewogICAg ZXJyb3IoIm9kZWc6IGV4cGVjdGluZyBhIHZlY3RvciBvZiBvdXRwdXQgdGlt ZXMgZm9yIHRoZSBzZWNvbmQgYXJndW1lbnQiICk7IAogIH0KICBpbnQgbm91 dHMgPSBUU1BBTi5sZW5ndGgoKTsKICBDb2x1bW5WZWN0b3IgeF8wKCBhcmdz KDIpLnZlY3Rvcl92YWx1ZSgpICk7CiAgaWYoZXJyb3Jfc3RhdGUpewogICAg ZXJyb3IoIm9kZWc6IGV4cGVjdGluZyBhbiBpbml0aWFsIGNvbmRpdGlvbiB2 ZWN0b3IgZm9yIHRoZSB0aGlyZCBhcmd1bWVudCIgKTsgCiAgfQogIE5FUU4g PSB4XzAubGVuZ3RoKCk7CgogIC8vIEZPUlRSQU4gdmFyaWFibGVzOgogIGRv dWJsZSBSRUxFUlIgPSAxLmUtMzsKICBkb3VibGUgQUJTRVJSID0gMS5lLTY7 CiAgLy8gIGRvdWJsZSBSRUxFUlIgPSAxLmUtOTsKICAvLyAgZG91YmxlIEFC U0VSUiA9IDEuZS02OwogIGludCBJRkxBRyA9ICsxOyAKCiAgLy8gQ2hlY2sg c29tZSBpbnB1dHM6CiAgaWYoIEFCU0VSUjw9MCApewogICAgb2N0YXZlX3N0 ZG91dCA8PCAiQUJTRVJSIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8iIDw8 ICJcbiI7IAogICAgcmV0dXJuIHJldHZhbDsgCiAgfQoKICAvLyBDcmVhdGUg dGhlIHdvcmsvaXdvcmsgdmVjdG9yczogCiAgaW50IE5XT1JLID0gMTAwKzIx Kk5FUU47CiAgT0NUQVZFX0xPQ0FMX0JVRkZFUiggZG91YmxlLCBXT1JLUCwg TldPUksgKTsgCiAgaW50IE5JV09SSyA9IDU7CiAgT0NUQVZFX0xPQ0FMX0JV RkZFUiggaW50LCBJV09SS1AsIE5JV09SSyApOwogIE9DVEFWRV9MT0NBTF9C VUZGRVIoIGRvdWJsZSwgWFAsIE5FUU4gKTsgCiAgZm9yKCBpbnQgaWk9MDsg aWkgPCBORVFOOyBpaSsrICkgWFBbaWldPXhfMChpaSk7CgogIC8vIENyZWF0 ZSBvY3RhdmUgb3V0cHV0IG1hdHJpeDogCiAgTWF0cml4IHlfb3V0KE5FUU4s bm91dHMpOwogIGZvciggaW50IGlpPTA7IGlpIDwgTkVRTjsgaWkrKyApIHlf b3V0KGlpLDApPXhfMChpaSk7CgogIGZvciggaW50IGlpdD0xOyBpaXQgPCBu b3V0czsgaWl0KysgKXsgLy8gUGVyZm9ybSBlYWNoIGludGVncmF0aW9uIHN0 ZXA6CiAgICBkb3VibGUgVD1UU1BBTihpaXQtMSk7CiAgICBkb3VibGUgVE9V VCA9IFRTUEFOKGlpdCk7CiAgICBGNzdfRlVOQyhvZGUsT0RFKShvZGVnX2Zf ZmNuLE5FUU4sWFAsVCxUT1VULFwKCQkgICAgICBSRUxFUlIsQUJTRVJSLElG TEFHLFdPUktQLElXT1JLUCk7CiAgICBpZiggSUZMQUcgPT0gNiApeyAvLyBU T0RPOiBmaWd1cmUgb3V0IGhvdyB0byBzZW5kIHRoaXMgcGFyYW1ldGVyIChp ZmxhZykgb3V0IG9mIHRoaXMgcm91dGluZS4uLgogICAgICBvY3RhdmVfc3Rk b3V0IDw8ICJpZmxhZyA9IDYgLS0gaW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJz LCBjYW4ndCBjb250aW51ZSBpbnRlZ3JhdGlvbiIgPDwgIlxuIjsgCiAgICAg IGJyZWFrOyAKICAgIH0KCiAgICBDb2x1bW5WZWN0b3IgeF9vdXQoTkVRTik7 IAogICAgZm9yKCBpbnQgaWk9MDsgaWkgPCBORVFOOyBpaSsrICl7CiAgICAg IHlfb3V0KGlpLGlpdCkgPSBYUFtpaV07CiAgICB9CiAgfQoKICByZXR2YWwu YXBwZW5kKHlfb3V0KTsgCiAgcmV0dXJuIHJldHZhbDsKfQo= ------=_NextPart_000_75e7_4db_3ae4 Content-Type: application/octet-stream; name="orbit.m" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="orbit.m" ZnVuY3Rpb24gWyByZXMgXSA9IG9yYml0KHQseCkKJSAKJSBBIHRlc3QgYW5k IHZlcmlmaWNhdGlvbiBvZiB0aGUgcm91dGluZSBya2Y0NSBmcm9tIHRoZSBi b29rIAolIAolIENvbXB1dGVyIE1ldGhvZHMgZm9yIE1hdGhlbWF0aWNhbCBD b21wdXRhdGlvbnMKJSBieSBHZW9yZ2UgRS4gRm9yc3l0aGUsIE1pY2hhZWwg QS4gTWFsY29sbSwgYW5kIENsZXZlIEIuIE1vbGVyLgolIAolIG9uIHBhZ2Ug MTMzCiUgCiUgV3JpdHRlbiBieToKJSAtLSAKJSBKb2huIEwuIFdlYXRoZXJ3 YXggICAgICAgICAgICAgICAgMjAwNS0xMC0yOQolIAolIGVtYWlsOiB3YXhA YWx1bS5taXQuZWR1CiUgCiUgUGxlYXNlIHNlbmQgY29tbWVudHMgYW5kIGVz cGVjaWFsbHkgYnVnIHJlcG9ydHMgdG8gdGhlCiUgYWJvdmUgZW1haWwgYWRk cmVzcy4KJSAKJS0tLS0tCgphbHBoYSA9IHBpLzQ7IAphbHBoYXNxID0gYWxw aGFeMjsgClIgPSB4KDEpKngoMSkgKyB4KDIpKngoMik7ClIgPSBSKnNxcnQo UikvYWxwaGFzcTsKCnJlcyA9IFsgeCgzKTsgeCg0KTsgLXgoMSkvUjsgLXgo MikvUiBdOyAK ------=_NextPart_000_75e7_4db_3ae4 Content-Type: application/octet-stream; name="test_odeg.m" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="test_odeg.m" JSAKJSBBIHRlc3QgYW5kIHZlcmlmaWNhdGlvbiBvZiB0aGUgcm91dGluZSBv ZGVnIGZyb20gdGhlIGJvb2sgCiUgCiUgQ29tcHV0ZXIgTWV0aG9kcyBmb3Ig TWF0aGVtYXRpY2FsIENvbXB1dGF0aW9ucwolIGJ5IEdlb3JnZSBFLiBGb3Jz eXRoZSwgTWljaGFlbCBBLiBNYWxjb2xtLCBhbmQgQ2xldmUgQi4gTW9sZXIu CiUgCiUgb24gcGFnZSAxMzMKJSAKJSBXcml0dGVuIGJ5OgolIC0tIAolIEpv aG4gTC4gV2VhdGhlcndheCAgICAgICAgICAgICAgICAyMDA1LTEwLTI5CiUg CiUgZW1haWw6IHdheEBhbHVtLm1pdC5lZHUKJSAKJSBQbGVhc2Ugc2VuZCBj b21tZW50cyBhbmQgZXNwZWNpYWxseSBidWcgcmVwb3J0cyB0byB0aGUKJSBh Ym92ZSBlbWFpbCBhZGRyZXNzLgolIAolLS0tLS0KCmFscGhhID0gcGkvNDsg CmVjYyA9IDAuMjU7IAp4XzAgPSBbIDEtZWNjOyAwOyAwOyBhbHBoYSpzcXJ0 KCAoMStlY2MpLygxLWVjYykgKSBdOyAKCnlvdXQgPSBvZGVnKCAib3JiaXQi LCBbIDA6MC41OjEyLjAgXSwgeF8wICk7IApmb3JtYXQgbG9uZzsgCnlvdXQo MToyLDopLicKZm9ybWF0IHNob3J0OyAKCg== ------=_NextPart_000_75e7_4db_3ae4--