Gateway routines to NetLibs ODE.f

"John Weatherwax" <[email protected]> Tue, 22 Nov 2005 19:25:44 -0600
Newsgroups gmane.comp.gnu.octave.sources
Message-ID <[email protected]>
This is a multi-part message in MIME format.

------=_NextPart_000_75e7_4db_3ae4
Content-Type: text/plain; format=flowed
Content-Transfer-Encoding: quoted-printable
X-MIME-Autoconverted: from 8bit to quoted-printable by bevo.che.wisc.edu id jAN1sUdo026551

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=92t just search. Find. Check out the new MSN Search!=20
http://search.msn.click-url.com/go/onm00200636ave/direct/01/

------=_NextPart_000_75e7_4db_3ae4
Content-Type: application/octet-stream; name="F.m"
Content-Disposition: attachment; filename="F.m"
Content-Transfer-Encoding: base64

ZnVuY3Rpb24gWyByZXMgXSA9IEYodCx4KQogIAolcmVzID0gMTsgCiVyZXMg
PSBzaW4odCk7IApyZXMgPSBzaW4oeCk7IAolcmVzID0gWyB4KDEpKnNpbih4
KDIpKnQpOyB4KDIpKmNvcyh0KSBdOyAKCg==


------=_NextPart_000_75e7_4db_3ae4
Content-Type: application/octet-stream; name="mkODE"
Content-Disposition: attachment; filename="mkODE"
Content-Transfer-Encoding: base64

IyEvYmluL3NoCgpta29jdGZpbGUgb2RlZy5jYyBvZGUuZgo=


------=_NextPart_000_75e7_4db_3ae4
Content-Type: application/octet-stream; name="ode.f"
Content-Disposition: attachment; filename="ode.f"
Content-Transfer-Encoding: base64

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-Disposition: attachment; filename="odeg.cc"
Content-Transfer-Encoding: base64

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-Disposition: attachment; filename="orbit.m"
Content-Transfer-Encoding: base64

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-Disposition: attachment; filename="test_odeg.m"
Content-Transfer-Encoding: base64

JSAKJSBBIHRlc3QgYW5kIHZlcmlmaWNhdGlvbiBvZiB0aGUgcm91dGluZSBv
ZGVnIGZyb20gdGhlIGJvb2sgCiUgCiUgQ29tcHV0ZXIgTWV0aG9kcyBmb3Ig
TWF0aGVtYXRpY2FsIENvbXB1dGF0aW9ucwolIGJ5IEdlb3JnZSBFLiBGb3Jz
eXRoZSwgTWljaGFlbCBBLiBNYWxjb2xtLCBhbmQgQ2xldmUgQi4gTW9sZXIu
CiUgCiUgb24gcGFnZSAxMzMKJSAKJSBXcml0dGVuIGJ5OgolIC0tIAolIEpv
aG4gTC4gV2VhdGhlcndheCAgICAgICAgICAgICAgICAyMDA1LTEwLTI5CiUg
CiUgZW1haWw6IHdheEBhbHVtLm1pdC5lZHUKJSAKJSBQbGVhc2Ugc2VuZCBj
b21tZW50cyBhbmQgZXNwZWNpYWxseSBidWcgcmVwb3J0cyB0byB0aGUKJSBh
Ym92ZSBlbWFpbCBhZGRyZXNzLgolIAolLS0tLS0KCmFscGhhID0gcGkvNDsg
CmVjYyA9IDAuMjU7IAp4XzAgPSBbIDEtZWNjOyAwOyAwOyBhbHBoYSpzcXJ0
KCAoMStlY2MpLygxLWVjYykgKSBdOyAKCnlvdXQgPSBvZGVnKCAib3JiaXQi
LCBbIDA6MC41OjEyLjAgXSwgeF8wICk7IApmb3JtYXQgbG9uZzsgCnlvdXQo
MToyLDopLicKZm9ybWF0IHNob3J0OyAKCg==


------=_NextPart_000_75e7_4db_3ae4--