From octave-sources-request at bevo dot che dot wisc dot edu Wed Nov 29 07:06:07 2000 Subject: gcvspl spline approximation From: JOERG SPECHT To: octave-sources at bevo dot che dot wisc dot edu Date: Wed, 29 Nov 2000 14:05:29 +0100 (MET) --tFRabnnboX Content-Type: text/plain; charset=us-ascii Content-Description: message body text Content-Transfer-Encoding: 7bit Hello, I took gcvspl.for from www.netlib.org and wrote an octave wrapper gcvspl.cc. It calculates the smoothing parameter p by "generalized cross validation" (gcv) and performs spline approximation of the data points. Alternative p could be given, even 0 to perform "exact" spline interpolation. The degree of the spline could be given (only odd degrees). Output consists of the approximated y-values or/and their n-th derivates. I hope that gcvspl.for (renamed to gcvsplf.f) is free software, as I got it from netlib, gcvspl.cc is free. Octave wrapper gcvspl.cc: --tFRabnnboX Content-Type: application/octet-stream Content-Disposition: attachment; filename="gcvspl.cc" Content-Transfer-Encoding: base64 Ly8gdXNlOiBta29jdGZpbGUgZ2N2c3BsLmNjIGdjdnNwbGYuZgojZGVmaW5lIE5ERUJVRwoK I2luY2x1ZGUgPG9jdGF2ZS9jb25maWcuaD4KI2luY2x1ZGUgPG9jdGF2ZS9kZWZ1bi1kbGQu aD4KI2luY2x1ZGUgPG9jdGF2ZS9lcnJvci5oPgojaW5jbHVkZSA8b2N0YXZlL2hlbHAuaD4K I2luY2x1ZGUgPG9jdGF2ZS9vY3Qtb2JqLmg+CiNpbmNsdWRlIDxvY3RhdmUvcGFnZXIuaD4K I2luY2x1ZGUgPG9jdGF2ZS9zeW10YWIuaD4KI2luY2x1ZGUgPG9jdGF2ZS92YXJpYWJsZXMu aD4KCmV4dGVybiAiQyIgewogIC8qIGJ5IGYyYyAtQSAuLi46ICovCiAgZXh0ZXJuIGludCBn Y3ZzcGxfKGRvdWJsZSAqeCwgZG91YmxlICp5LCBpbnQgKm55LCAKCQkgICAgIGRvdWJsZSAq d3gsIGRvdWJsZSAqd3ksIGludCAqbSwgaW50ICpuLAoJCSAgICAgaW50ICprLCBpbnQgKm1k LCBkb3VibGUgKnZhbCwgZG91YmxlICpjLAoJCSAgICAgaW50ICpuYywgZG91YmxlICp3aywg aW50ICppZXIpOwogIGV4dGVybiBkb3VibGUgc3BsZGVyXyhpbnQgKmlkZXIsIGludCAqbSwg aW50ICpuLCBkb3VibGUgKnQsIAoJCQlkb3VibGUgKngsIGRvdWJsZSAqYywgaW50ICpsLCBk b3VibGUgKnEpOwp9CgojaWZuZGVmIE5ERUJVRwojaWZuZGVmIERFQlVHTEVWRUwKI2RlZmlu ZSBERUJVR0xFVkVMCTI1NQojZW5kaWYKc3RhdGljIGludCBkb19kZWJ1Zyhjb25zdCBjaGFy ICpmbXQsIC4uLikgewogIHZhX2xpc3QgYXJnczsKICBmcHJpbnRmKHN0ZGVyciwgImRlYnVn OiAiKTsKICB2YV9zdGFydChhcmdzLCBmbXQpOwogIHZmcHJpbnRmKHN0ZGVyciwgZm10LCBh cmdzKTsKICB2YV9lbmQoYXJncyk7CiAgZnByaW50ZihzdGRlcnIsICJcbiIpOwogIGZmbHVz aChOVUxMKTsKICByZXR1cm4gMTsKfQojZGVmaW5lIERFQlVHKGxldmVsLCBmbXRldGMpCSgo bGV2ZWwpICYgREVCVUdMRVZFTCkgJiYgZG9fZGVidWcgZm10ZXRjCiNlbHNlCiNkZWZpbmUg REVCVUcobGV2ZWwsIGZtdGV0YykKI2VuZGlmCgojZGVmaW5lIEFTU0VSVCh3aGF0KQkJCQkJ XAoJaWYoISh3aGF0KSkgewkJCQkJXAoJCSgqY3VycmVudF9saWJvY3RhdmVfZXJyb3JfaGFu ZGxlcikoCVwKCQkJImFzc2VydGlvbiBmYWlsZWQ6ICIjd2hhdCk7CVwKCQlyZXR1cm4gcmV0 dmFsOwkJCQlcCgl9CgpERUZVTl9ETEQoZ2N2c3BsLCBhcmdzLCBuYXJnb3V0LAoiW3lmLHdr XT1nY3ZzcGwoeChuLDEpLHkobixrKSwgeGYobmYsMSk9eCwgd3gobiwxKT1bXSx3eSgxLGsp PVtdLCBtPTIsbWQ9Mix2YWw9MSwgaWRlcj1bMF0pXG5cClxuXAp1c2VzICBHQ1ZTUEwuRk9S LCAxOTg2LTA1LTEyXG5cCmZyb20gIGh0dHA6Ly93d3cubmV0bGliLm9yZy9nY3YvaW5kZXgu aHRtbFxuXApmb3IgICBCLXNwbGluZSBkYXRhIHNtb290aGluZyB1c2luZyBnZW5lcmFsaXpl ZCBjcm9zcy12YWxpZGF0aW9uXG5cCiAgICAgIGFuZCBtZWFuIHNxdWFyZWQgcHJlZGljdGlv biBvciBleHBsaWNpdCB1c2VyIHNtb290aGluZ1xuXApieSAgICBILkouIFdvbHRyaW5nLCAg VW5pdmVyc2l0eSBvZiBOaWptZWdlbixcblwKICAgICAgUGhpbGlwcyBNZWRpY2FsIFN5c3Rl bXMsIEVpbmRob3ZlbiAoVGhlIE5ldGhlcmxhbmRzKVxuXApcblwKUHVycG9zZTpcblwKICAg ICAgTmF0dXJhbCBCLXNwbGluZSBkYXRhIHNtb290aGluZyBzdWJyb3V0aW5lLCB1c2luZyB0 aGUgR2VuZXJhbGktXG5cCiAgICAgIHplZCBDcm9zcy1WYWxpZGF0aW9uIGFuZCBNZWFuLVNx dWFyZWQgUHJlZGljdGlvbiBFcnJvciBDcml0ZXJpYVxuXAogICAgICBvZiBDcmF2ZW4gJiBX YWhiYSAoMTk3OSkuIEFsdGVybmF0aXZlbHksIHRoZSBhbW91bnQgb2Ygc21vb3RoaW5nXG5c CiAgICAgIGNhbiBiZSBnaXZlbiBleHBsaWNpdGx5LCBvciBpdCBjYW4gYmUgYmFzZWQgb24g dGhlIGVmZmVjdGl2ZVxuXAogICAgICBudW1iZXIgb2YgZGVncmVlcyBvZiBmcmVlZG9tIGlu IHRoZSBzbW9vdGhpbmcgcHJvY2VzcyBhcyBkZWZpbmVkXG5cCiAgICAgIGJ5IFdhaGJhICgx OTgwKS4gVGhlIG1vZGVsIGFzc3VtZXMgdW5jb3JyZWxhdGVkLCBhZGRpdGl2ZSBub2lzZVxu XAogICAgICBhbmQgZXNzZW50aWFsbHkgc21vb3RoLCB1bmRlcmx5aW5nIGZ1bmN0aW9ucy4g VGhlIG5vaXNlIG1heSBiZVxuXAogICAgICBub24tc3RhdGlvbmFyeSwgYW5kIHRoZSBpbmRl cGVuZGVudCBjby1vcmRpbmF0ZXMgbWF5IGJlIHNwYWNlZFxuXAogICAgICBub24tZXF1aWRp c3RhbnRseS4gTXVsdGlwbGUgZGF0YXNldHMsIHdpdGggY29tbW9uIGluZGVwZW5kZW50XG5c CiAgICAgIHZhcmlhYmxlcyBhbmQgd2VpZ2h0IGZhY3RvcnMgYXJlIGFjY29tb2RhdGVkLlxu XAogICAgICBBIGZ1bGwgZGVzY3JpcHRpb24gb2YgdGhlIHBhY2thZ2UgaXMgcHJvdmlkZWQg aW46XG5cCiAgICAgIEguSi4gV29sdHJpbmcgKDE5ODYpLCBBIEZPUlRSQU4gcGFja2FnZSBm b3IgZ2VuZXJhbGl6ZWQsXG5cCiAgICAgIGNyb3NzLXZhbGlkYXRvcnkgc3BsaW5lIHNtb290 aGluZyBhbmQgZGlmZmVyZW50aWF0aW9uLlxuXAogICAgICBBZHZhbmNlcyBpbiBFbmdpbmVl cmluZyBTb2Z0d2FyZSA4KDIpOjEwNC0xMTNcblwKXG5cCk1lYW5pbmcgb2YgcGFyYW1ldGVy czpcblwKICAgICAgWChOLDEpICBJbmRlcGVuZGVudCB2YXJpYWJsZXM6IHN0cmljdGx5IGlu Y3JlYXNpbmcga25vdFxuXAogICAgICAgICAgICAgIHNlcXVlbmNlLCB3aXRoIFgoSS0xKS5s dC5YKEkpLCBJPTIsLi4uLE4uXG5cCiAgICAgIFkoTixLKSAgSW5wdXQgZGF0YSB0byBiZSBz bW9vdGhlZCAob3IgaW50ZXJwb2xhdGVkKS5cblwKICAgICAgWEYoTkYsMSlQb2ludHMgd2hl cmUgdGhlIGZ1bmN0aW9uIHNob3VsZCBiZSBhcHByb3hpbWF0ZWQuXG5cCiAgICAgIFdYKE4s MSkgV2VpZ2h0IGZhY3RvciBhcnJheTsgV1goSSkgY29ycmVzcG9uZHMgd2l0aFxuXAogICAg ICAgICAgICAgIHRoZSByZWxhdGl2ZSBpbnZlcnNlIHZhcmlhbmNlIG9mIHBvaW50IFkoSSwq KS5cblwKICAgICAgICAgICAgICBJZiBubyByZWxhdGl2ZSB3ZWlnaHRpbmcgaW5mb3JtYXRp b24gaXNcblwKICAgICAgICAgICAgICBhdmFpbGFibGUsIHRoZSBXWChJKSBzaG91bGQgYmUg c2V0IHRvIE9ORS5cblwKICAgICAgICAgICAgICBBbGwgV1goSSkuZ3QuWkVSTywgST0xLC4u LixOLlxuXAogICAgICBXWSgxLEspIFdlaWdodCBmYWN0b3IgYXJyYXk7IFdZKEopIGNvcnJl c3BvbmRzIHdpdGhcblwKICAgICAgICAgICAgICB0aGUgcmVsYXRpdmUgaW52ZXJzZSB2YXJp YW5jZSBvZiBwb2ludCBZKCosSikuXG5cCiAgICAgICAgICAgICAgSWYgbm8gcmVsYXRpdmUg d2VpZ2h0aW5nIGluZm9ybWF0aW9uIGlzXG5cCiAgICAgICAgICAgICAgYXZhaWxhYmxlLCB0 aGUgV1koSikgc2hvdWxkIGJlIHNldCB0byBPTkUuXG5cCiAgICAgICAgICAgICAgQWxsIFdZ KEopLmd0LlpFUk8sIEo9MSwuLi4sSy5cblwKICAgICAgICAgICAgICBOQjogVGhlIGVmZmVj dGl2ZSB3ZWlnaHQgZm9yIHBvaW50IFkoSSxKKSBpc1xuXAogICAgICAgICAgICAgIGVxdWFs IHRvIFdYKEkpKldZKEopLlxuXAogICAgICBNICAgICAgIEhhbGYgb3JkZXIgb2YgdGhlIHJl cXVpcmVkIEItc3BsaW5lcyAoc3BsaW5lXG5cCiAgICAgICAgICAgICAgZGVncmVlIDIqTS0x KSwgd2l0aCBNLmd0LjAuIFRoZSB2YWx1ZXMgTSA9XG5cCiAgICAgICAgICAgICAgMSwyLDMs NCBjb3JyZXNwb25kIHRvIGxpbmVhciwgY3ViaWMsIHF1aW50aWMsXG5cCiAgICAgICAgICAg ICAgYW5kIGhlcHRpYyBzcGxpbmVzLCByZXNwZWN0aXZlbHkuIE4uZ2UuMipNLlxuXAogICAg ICBNRCAgICAgIE9wdGltaXphdGlvbiBtb2RlIHN3aXRjaDpcblwKICAgICAgICAgICAgICB8 TUR8ID0gMTogUHJpb3IgZ2l2ZW4gdmFsdWUgZm9yIHAgaW4gVkFMXG5cCiAgICAgICAgICAg ICAgICAgICAgICAgIChWQUwuZ2UuWkVSTykuIFRoaXMgaXMgdGhlIGZhc3Rlc3RcblwKICAg ICAgICAgICAgICAgICAgICAgICAgdXNlIG9mIEdDVlNQTCwgc2luY2Ugbm8gaXRlcmF0aW9u XG5cCiAgICAgICAgICAgICAgICAgICAgICAgIGlzIHBlcmZvcm1lZCBpbiBwLlxuXAogICAg ICAgICAgICAgIHxNRHwgPSAyOiBHZW5lcmFsaXplZCBjcm9zcyB2YWxpZGF0aW9uLlxuXAog ICAgICAgICAgICAgIHxNRHwgPSAzOiBUcnVlIHByZWRpY3RlZCBtZWFuLXNxdWFyZWQgZXJy b3IsXG5cCiAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggcHJpb3IgZ2l2ZW4gdmFyaWFu Y2UgaW4gVkFMLlxuXAogICAgICAgICAgICAgIHxNRHwgPSA0OiBQcmlvciBnaXZlbiBudW1i ZXIgb2YgZGVncmVlcyBvZlxuXAogICAgICAgICAgICAgICAgICAgICAgICBmcmVlZG9tIGlu IFZBTCAoWkVSTy5sZS5WQUwubGUuTi1NKS5cblwKICAgICAgICAgICAgICBBZnRlciByZXR1 cm4gZnJvbSBNRC5uZS4xLCB0aGUgc2FtZSBudW1iZXIgb2ZcblwKICAgICAgICAgICAgICBk ZWdyZWVzIG9mIGZyZWVkb20gY2FuIGJlIG9idGFpbmVkLCBmb3IgaWRlbnRpY2FsXG5cCiAg ICAgICAgICAgICAgd2VpZ2h0IGZhY3RvcnMgYW5kIGtub3QgcG9zaXRpb25zLCBieSBzZWxl Y3RpbmdcblwKICAgICAgICAgICAgICB8TUR8PTEsIGFuZCBieSBjb3B5aW5nIHRoZSB2YWx1 ZSBvZiBwIGZyb20gV0soNClcblwKICAgICAgICAgICAgICBpbnRvIFZBTC4gSW4gdGhpcyB3 YXksIG5vIGl0ZXJhdGl2ZSBvcHRpbWl6YXRpb25cblwKICAgICAgICAgICAgICBpcyByZXF1 aXJlZCB3aGVuIHByb2Nlc3Npbmcgb3RoZXIgZGF0YSBpbiBZLlxuXAogICAgICBWQUwgICAg IE1vZGUgdmFsdWUsIGFzIGRlc2NyaWJlZCBhYm92ZSB1bmRlciBNRC5cblwKICAgICAgSURF UiAgICBEZXJpdmF0aXZlIG9yZGVyIHJlcXVpcmVkLCB3aXRoIDAubGUuSURFUlxuXAogICAg ICAgICAgICAgIGFuZCBJREVSLmxlLjIqTS4gSWYgSURFUi5lcS4wLCB0aGUgZnVuY3Rpb25c blwKICAgICAgICAgICAgICB2YWx1ZSBpcyByZXR1cm5lZDsgb3RoZXJ3aXNlLCB0aGUgSURF Ui10aFxuXAogICAgICAgICAgICAgIGRlcml2YXRpdmUgb2YgdGhlIHNwbGluZSBpcyByZXR1 cm5lZC5cblwKXG5cClJldHVybiB2YWx1ZXM6XG5cCiAgICAgIFlGKE5GLDEpQXBwcm94aW1h dGVkIHZhbHVlcyBhdCBYRi5cblwKICAgICAgV0soSVdLKSBPbiBub3JtYWwgZXhpdCwgdGhl IGZpcnN0IDYgdmFsdWVzIG9mIFdLIGFyZVxuXAogICAgICAgICAgICAgIGFzc2lnbmVkIGFz IGZvbGxvd3M6XG5cCiAgICAgICAgICAgICAgV0soMSkgPSBHZW5lcmFsaXplZCBDcm9zcyBW YWxpZGF0aW9uIHZhbHVlXG5cCiAgICAgICAgICAgICAgV0soMikgPSBNZWFuIFNxdWFyZWQg UmVzaWR1YWwuXG5cCiAgICAgICAgICAgICAgV0soMykgPSBFc3RpbWF0ZSBvZiB0aGUgbnVt YmVyIG9mIGRlZ3JlZXMgb2ZcblwKICAgICAgICAgICAgICAgICAgICAgIGZyZWVkb20gb2Yg dGhlIHJlc2lkdWFsIHN1bSBvZiBzcXVhcmVzXG5cCiAgICAgICAgICAgICAgICAgICAgICBw ZXIgZGF0YXNldCwgd2l0aCAwLmx0LldLKDMpLmx0Lk4tTS5cblwKICAgICAgICAgICAgICBX Syg0KSA9IFNtb290aGluZyBwYXJhbWV0ZXIgcCwgbXVsdGlwbGljYXRpdmVcblwKICAgICAg ICAgICAgICAgICAgICAgIHdpdGggdGhlIHNwbGluZXMnIGRlcml2YXRpdmUgY29uc3RyYWlu dC5cblwKICAgICAgICAgICAgICBXSyg1KSA9IEVzdGltYXRlIG9mIHRoZSB0cnVlIG1lYW4g c3F1YXJlZCBlcnJvclxuXAogICAgICAgICAgICAgICAgICAgICAgKGRpZmZlcmVudCBmb3Jt dWxhIGZvciB8TUR8ID0gMykuXG5cCiAgICAgICAgICAgICAgV0soNikgPSBHYXVzcy1NYXJr b3YgZXJyb3IgdmFyaWFuY2UuXG5cClxuXAogICAgICAgICAgICAgIElmIFdLKDQpIC0tPiAg MCAsIFdLKDMpIC0tPiAgMCAsIGFuZCBhbiBpbnRlci1cblwKICAgICAgICAgICAgICBwb2xh dGluZyBzcGxpbmUgaXMgZml0dGVkIHRvIHRoZSBkYXRhIChwIC0tPiAwKS5cblwKICAgICAg ICAgICAgICBBIHZlcnkgc21hbGwgdmFsdWUgPiAwIGlzIHVzZWQgZm9yIHAsIGluIG9yZGVy XG5cCiAgICAgICAgICAgICAgdG8gYXZvaWQgZGl2aXNpb24gYnkgemVybyBpbiB0aGUgR0NW IGZ1bmN0aW9uLlxuXApcblwKICAgICAgICAgICAgICBJZiBXSyg0KSAtLT4gaW5mLCBXSygz KSAtLT4gTi1NLCBhbmQgYSBsZWFzdC1cblwKICAgICAgICAgICAgICBzcXVhcmVzIHBvbHlu b21pYWwgb2Ygb3JkZXIgTSAoZGVncmVlIE0tMSkgaXNcblwKICAgICAgICAgICAgICBmaXR0 ZWQgdG8gdGhlIGRhdGEgKHAgLS0+IGluZikuIEZvciBudW1lcmljYWxcblwKICAgICAgICAg ICAgICByZWFzb25zLCBhIHZlcnkgaGlnaCB2YWx1ZSBpcyB1c2VkIGZvciBwLlxuXApcblwK ICAgICAgICAgICAgICBVcG9uIHJldHVybiwgdGhlIGNvbnRlbnRzIG9mIFdLIGNhbiBiZSB1 c2VkIGZvclxuXAogICAgICAgICAgICAgIGNvdmFyaWFuY2UgcHJvcGFnYXRpb24gaW4gdGVy bXMgb2YgdGhlIG1hdHJpY2VzXG5cCiAgICAgICAgICAgICAgQiBhbmQgV0U6IHNlZSB0aGUg c291cmNlIGxpc3RpbmdzLiBUaGUgdmFyaWFuY2VcblwKICAgICAgICAgICAgICBlc3RpbWF0 ZSBmb3IgZGF0YXNldCBKIGZvbGxvd3MgYXMgV0soNikvV1koSikuXG5cClxuXApSZW1hcmtz OlxuXAogICAgICAoMSkgR0NWU1BMIGNhbGN1bGF0ZXMgYSBuYXR1cmFsIHNwbGluZSBvZiBv cmRlciAyKk0gKGRlZ3JlZVxuXAogICAgICAyKk0tMSkgd2hpY2ggc21vb3RoZXMgb3IgaW50 ZXJwb2xhdGVzIGEgZ2l2ZW4gc2V0IG9mIGRhdGFcblwKICAgICAgcG9pbnRzLCB1c2luZyBz dGF0aXN0aWNhbCBjb25zaWRlcmF0aW9ucyB0byBkZXRlcm1pbmUgdGhlXG5cCiAgICAgIGFt b3VudCBvZiBzbW9vdGhpbmcgcmVxdWlyZWQgKENyYXZlbiAmIFdhaGJhLCAxOTc5KS4gSWYg dGhlXG5cCiAgICAgIGVycm9yIHZhcmlhbmNlIGlzIGEgcHJpb3JpIGtub3duLCBpdCBzaG91 bGQgYmUgc3VwcGxpZWQgdG9cblwKICAgICAgdGhlIHJvdXRpbmUgaW4gVkFMLCBmb3IgfE1E fD0zLiBUaGUgZGVncmVlIG9mIHNtb290aGluZyBpc1xuXAogICAgICB0aGVuIGRldGVybWlu ZWQgdG8gbWluaW1pemUgYW4gdW5iaWFzZWQgZXN0aW1hdGUgb2YgdGhlIHRydWVcblwKICAg ICAgbWVhbiBzcXVhcmVkIGVycm9yLiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgdGhlIGVycm9y IHZhcmlhbmNlXG5cCiAgICAgIGlzIG5vdCBrbm93biwgb25lIG1heSBzZWxlY3QgfE1EfD0y LiBUaGUgcm91dGluZSB0aGVuIGRldGVyLVxuXAogICAgICBtaW5lcyB0aGUgZGVncmVlIG9m IHNtb290aGluZyB0byBtaW5pbWl6ZSB0aGUgZ2VuZXJhbGl6ZWRcblwKICAgICAgY3Jvc3Mg dmFsaWRhdGlvbiBmdW5jdGlvbi4gVGhpcyBpcyBhc3ltcHRvdGljYWxseSB0aGUgc2FtZVxu XAogICAgICBhcyBtaW5pbWl6aW5nIHRoZSB0cnVlIHByZWRpY3RlZCBtZWFuIHNxdWFyZWQg ZXJyb3IgKENyYXZlbiAmXG5cCiAgICAgIFdhaGJhLCAxOTc5KS4gSWYgdGhlIGVzdGltYXRl cyBmcm9tIHxNRHw9MiBvciAzIGRvIG5vdCBhcHBlYXJcblwKICAgICAgc3VpdGFibGUgdG8g dGhlIHVzZXIgKGFzIGFwcGFyZW50IGZyb20gdGhlIHNtb290aG5lc3Mgb2YgdGhlXG5cCiAg ICAgIE0tdGggZGVyaXZhdGl2ZSBvciBmcm9tIHRoZSBlZmZlY3RpdmUgbnVtYmVyIG9mIGRl Z3JlZXMgb2ZcblwKICAgICAgZnJlZWRvbSByZXR1cm5lZCBpbiBXSygzKSApLCB0aGUgdXNl ciBtYXkgc2VsZWN0IGFuIG90aGVyXG5cCiAgICAgIHZhbHVlIGZvciB0aGUgbm9pc2UgdmFy aWFuY2UgaWYgfE1EfD0zLCBvciBhIHJlYXNvbmFibHkgbGFyZ2VcblwKICAgICAgbnVtYmVy IG9mIGRlZ3JlZXMgb2YgZnJlZWRvbSBpZiB8TUR8PTQuIElmIHxNRHw9MSwgdGhlIHByb2Nl LVxuXAogICAgICBkdXJlIGlzIG5vbi1pdGVyYXRpdmUsIGFuZCByZXR1cm5zIGEgc3BsaW5l IGZvciB0aGUgZ2l2ZW5cblwKICAgICAgdmFsdWUgb2YgdGhlIHNtb290aGluZyBwYXJhbWV0 ZXIgcCBhcyBlbnRlcmVkIGluIFZBTC5cblwKXG5cCiAgICAgICgyKSBUaGUgbnVtYmVyIG9m IGFyaXRobWV0aWMgb3BlcmF0aW9ucyBhbmQgdGhlIGFtb3VudCBvZlxuXAogICAgICBzdG9y YWdlIHJlcXVpcmVkIGFyZSBib3RoIHByb3BvcnRpb25hbCB0byBOLCBzbyB2ZXJ5IGxhcmdl XG5cCiAgICAgIGRhdGFzZXRzIG1heSBiZSBhY2NvbW9kYXRlZC4gVGhlIGRhdGEgcG9pbnRz IGRvIG5vdCBoYXZlXG5cCiAgICAgIHRvIGJlIGVxdWlkaXN0YW50IGluIHRoZSBpbmRlcGVu ZGFudCB2YXJpYWJsZSBYIG9yIHVuaWZvcm1seVxuXAogICAgICB3ZWlnaHRlZCBpbiB0aGUg ZGVwZW5kYW50IHZhcmlhYmxlIFkuIEhvd2V2ZXIsIHRoZSBkYXRhXG5cCiAgICAgIHBvaW50 cyBpbiBYIG11c3QgYmUgc3RyaWN0bHkgaW5jcmVhc2luZy4gTXVsdGlwbGUgZGF0YXNldFxu XAogICAgICBwcm9jZXNzaW5nIChLLmd0LjEpIGlzIG51bWVyaWNhbGx5IG1vcmUgZWZmaWNp ZW50IGRhblxuXAogICAgICBzZXBhcmF0ZSBwcm9jZXNzaW5nIG9mIHRoZSBpbmRpdmlkdWFs IGRhdGFzZXRzIChLLmVxLjEpLlxuXApcblwKICAgICAgKDMpIElmIHxNRHw9MyAoYSBwcmlv cmkga25vd24gbm9pc2UgdmFyaWFuY2UpLCBhbnkgdmFsdWUgb2ZcblwKICAgICAgTi5nZS4y Kk0gaXMgYWNjZXB0YWJsZS4gSG93ZXZlciwgaXQgaXMgYWR2aXNhYmxlIGZvciBOLTIqTVxu XAogICAgICBiZSByYXRoZXIgbGFyZ2UgKGF0IGxlYXN0IDIwKSBpZiB8TUR8PTIgKEdDViku XG5cClxuXAogICAgICAoNCkgRm9yIHxNRHwgPiAxLCBHQ1ZTUEwgdHJpZXMgdG8gaXRlcmF0 aXZlbHkgbWluaW1pemUgdGhlXG5cCiAgICAgIHNlbGVjdGVkIGNyaXRlcmlvbiBmdW5jdGlv bi4gVGhpcyBtaW5pbXVtIGlzIHVuaXF1ZSBmb3IgfE1EfFxuXAogICAgICA9IDQsIGJ1dCBu b3QgbmVjZXNzYXJpbHkgZm9yIHxNRHwgPSAyIG9yIDMuIENvbnNlcXVlbnRseSwgXG5cCiAg ICAgIGxvY2FsIG9wdGltYSByYXRoZXIgdGhhdCB0aGUgZ2xvYmFsIG9wdGltdW0gbWlnaHQg YmUgZm91bmQsXG5cCiAgICAgIGFuZCBzb21lIGFjdHVhbCBmaW5kaW5ncyBzdWdnZXN0IHRo YXQgbG9jYWwgb3B0aW1hIG1pZ2h0XG5cCiAgICAgIHlpZWxkIG1vcmUgbWVhbmluZ2Z1bCBy ZXN1bHRzIHRoYW4gdGhlIGdsb2JhbCBvcHRpbXVtIGlmIE5cblwKICAgICAgaXMgc21hbGwu IFRoZXJlZm9yZSwgdGhlIHVzZXIgaGFzIHNvbWUgY29udHJvbCBvdmVyIHRoZVxuXAogICAg ICBzZWFyY2ggcHJvY2VkdXJlLiBJZiBNRCA+IDEsIHRoZSBpdGVyYXRpdmUgc2VhcmNoIHN0 YXJ0c1xuXAogICAgICBmcm9tIGEgdmFsdWUgd2hpY2ggeWllbGRzIGEgbnVtYmVyIG9mIGRl Z3JlZXMgb2YgZnJlZWRvbVxuXAogICAgICB3aGljaCBpcyBhcHByb3hpbWF0ZWx5IGVxdWFs IHRvIE4vMiwgdW50aWwgdGhlIGZpcnN0IChsb2NhbClcblwKICAgICAgbWluaW11bSBpcyBm b3VuZCB2aWEgYSBnb2xkZW4gc2VjdGlvbiBzZWFyY2ggcHJvY2VkdXJlXG5cCiAgICAgIChV dHJlcmFzLCAxOTgwKS4gSWYgTUQgPCAtMSwgdGhlIHZhbHVlIGZvciBwIGNvbnRhaW5lZCBp blxuXAogICAgICBXSyg0KSBpcyB1c2VkIGluc3RlYWQuIFRodXMsIGlmIE1EID0gMiBvciAz IHlpZWxkIHRvbyBub2lzeVxuXAogICAgICBhbiBlc3RpbWF0ZSwgdGhlIHVzZXIgbWlnaHQg dHJ5IHxNRHwgPSAxIG9yIDQsIGZvciBzdWl0YWJseVxuXAogICAgICBzZWxlY3RlZCB2YWx1 ZXMgZm9yIHAgb3IgZm9yIHRoZSBudW1iZXIgb2YgZGVncmVlcyBvZlxuXAogICAgICBmcmVl ZG9tLCBhbmQgdGhlbiBydW4gR0NWU1BMIHdpdGggTUQgPSAtMiBvciAtMy4gVGhlIGNvbi1c blwKICAgICAgdGVudHMgb2YgTiwgTSwgSywgWCwgV1gsIFdZLCBhbmQgV0sgYXJlIGFzc3Vt ZWQgdW5jaGFuZ2VkXG5cCiAgICAgIGlmIE1EIDwgMC5cblwKXG5cCiAgICAgICg1KSBHQ1ZT UEwgY2FsY3VsYXRlcyB0aGUgc3BsaW5lIGNvZWZmaWNpZW50IGFycmF5IEMoTixLKTtcblwK ICAgICAgdGhpcyBhcnJheSBjYW4gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIHNwbGluZSBm dW5jdGlvblxuXAogICAgICB2YWx1ZSBhbmQgYW55IG9mIGl0cyBkZXJpdmF0aXZlcyB1cCB0 byB0aGUgZGVncmVlIDIqTS0xXG5cCiAgICAgIGF0IGFueSBhcmd1bWVudCBUIHdpdGhpbiB0 aGUga25vdCByYW5nZSwgdXNpbmcgc3Vicm91LVxuXAogICAgICB0aW5lcyBTUExERVIgYW5k IFNFQVJDSCwgYW5kIHRoZSBrbm90IGFycmF5IFgoTikuIFNpbmNlXG5cCiAgICAgIHRoZSBz cGxpbmVzIGFyZSBjb25zdHJhaW5lZCBhdCB0aGVpciBNdGggZGVyaXZhdGl2ZSwgb25seVxu XAogICAgICB0aGUgbG93ZXIgc3BsaW5lIGRlcml2YXRpdmVzIHdpbGwgdGVuZCB0byBiZSBy ZWxpYWJsZVxuXAogICAgICBlc3RpbWF0ZXMgb2YgdGhlIHVuZGVybHlpbmcsIHRydWUgc2ln bmFsIGRlcml2YXRpdmVzLlxuXApcblwKICAgICAgKDYpIEdDVlNQTCBjb21iaW5lcyBlbGVt ZW50cyBvZiBzdWJyb3V0aW5lIENSVk81IGJ5IFV0cmUtXG5cCiAgICAgIHJhcyAoMTk4MCks IHN1YnJvdXRpbmUgU01PT1RIIGJ5IEx5Y2hlIGV0IGFsLiAoMTk4MyksIGFuZFxuXAogICAg ICBzdWJyb3V0aW5lIENVQkdDViBieSBIdXRjaGluc29uICgxOTg1KS4gVGhlIHRyYWNlIG9m IHRoZVxuXAogICAgICBpbmZsdWVuY2UgbWF0cml4IGlzIGFzc2Vzc2VkIGluIGEgc2ltaWxh ciB3YXkgYXMgZGVzY3JpYmVkXG5cCiAgICAgIGJ5IEh1dGNoaW5zb24gJiBkZSBIb29nICgx OTg1KS4gVGhlIG1ham9yIGRpZmZlcmVuY2UgaXNcblwKICAgICAgdGhhdCB0aGUgcHJlc2Vu dCBhcHByb2FjaCB1dGlsaXplcyBub24tc3ltbWV0cmljYWwgQi1zcGxpbmVcblwKICAgICAg ZGVzaWduIG1hdHJpY2VzIGFzIGRlc2NyaWJlZCBieSBMeWNoZSBldCBhbC4gKDE5ODMpOyB0 aGVyZS1cblwKICAgICAgZm9yZSwgdGhlIG9yaWdpbmFsIGFsZ29yaXRobSBieSBFcmlzbWFu ICYgVGlubmV5ICgxOTc1KSBoYXNcblwKICAgICAgYmVlbiB1c2VkLCByYXRoZXIgdGhhbiB0 aGUgc3ltbWV0cmljYWwgdmVyc2lvbiBhZG9wdGVkIGJ5XG5cCiAgICAgIEh1dGNoaW5zb24g JiBkZSBIb29nLlxuXApcblwKUmVmZXJlbmNlczpcblwKICAgICAgUC4gQ3JhdmVuICYgRy4g V2FoYmEgKDE5NzkpLCBTbW9vdGhpbmcgbm9pc3kgZGF0YSB3aXRoXG5cCiAgICAgIHNwbGlu ZSBmdW5jdGlvbnMuIE51bWVyaXNjaGUgTWF0aGVtYXRpayAzMSwgMzc3LTQwMy5cblwKXG5c CiAgICAgIEEuTS4gRXJpc21hbiAmIFcuRi4gVGlubmV5ICgxOTc1KSwgT24gY29tcHV0aW5n IGNlcnRhaW5cblwKICAgICAgZWxlbWVudHMgb2YgdGhlIGludmVyc2Ugb2YgYSBzcGFyc2Ug bWF0cml4LiBDb21tdW5pY2F0aW9uc1xuXAogICAgICBvZiB0aGUgQUNNIDE4KDMpLCAxNzct MTc5LlxuXApcblwKICAgICAgTS5GLiBIdXRjaGluc29uICYgRi5SLiBkZSBIb29nICgxOTg1 KSwgU21vb3RoaW5nIG5vaXN5IGRhdGFcblwKICAgICAgd2l0aCBzcGxpbmUgZnVuY3Rpb25z LiBOdW1lcmlzY2hlIE1hdGhlbWF0aWsgNDcoMSksIDk5LTEwNi5cblwKXG5cCiAgICAgIE0u Ri4gSHV0Y2hpbnNvbiAoMTk4NSksIFN1YnJvdXRpbmUgQ1VCR0NWLiBDU0lSTyBEaXZpc2lv biBvZlxuXAogICAgICBNYXRoZW1hdGljcyBhbmQgU3RhdGlzdGljcywgUC5PLiBCb3ggMTk2 NSwgQ2FuYmVycmEsIEFDVCAyNjAxLFxuXAogICAgICBBdXN0cmFsaWEuXG5cClxuXAogICAg ICBULiBMeWNoZSwgTC5MLiBTY2h1bWFrZXIsICYgSy4gU2VwZWhybm9vcmkgKDE5ODMpLCBG b3J0cmFuXG5cCiAgICAgIHN1YnJvdXRpbmVzIGZvciBjb21wdXRpbmcgc21vb3RoaW5nIGFu ZCBpbnRlcnBvbGF0aW5nIG5hdHVyYWxcblwKICAgICAgc3BsaW5lcy4gQWR2YW5jZXMgaW4g RW5naW5lZXJpbmcgU29mdHdhcmUgNSgxKSwgMi01LlxuXApcblwKICAgICAgRi4gVXRyZXJh cyAoMTk4MCksIFVuIHBhcXVldGUgZGUgcHJvZ3JhbWFzIHBhcmEgYWp1c3RhciBjdXJ2YXNc blwKICAgICAgbWVkaWFudGUgZnVuY2lvbmVzIHNwbGluZS4gSW5mb3JtZSBUZWNuaWNvIE1B LTgwLUItMjA5LCBEZXBhci1cblwKICAgICAgdGFtZW50byBkZSBNYXRlbWF0aWNhcywgRmFj dWxkYWQgZGUgQ2llbmNpYXMgRmlzaWNhcyB5IE1hdGVtYS1cblwKICAgICAgdGljYXMsIFVu aXZlcnNpZGFkIGRlIENoaWxlLCBTYW50aWFnby5cblwKXG5cCiAgICAgIFdhaGJhLCBHLiAo MTk4MCkuIE51bWVyaWNhbCBhbmQgc3RhdGlzdGljYWwgbWV0aG9kcyBmb3IgbWlsZGx5LFxu XAogICAgICBtb2RlcmF0ZWx5IGFuZCBzZXZlcmVseSBpbGwtcG9zZWQgcHJvYmxlbXMgd2l0 aCBub2lzeSBkYXRhLlxuXAogICAgICBUZWNobmljYWwgcmVwb3J0IG5yLiA1OTUgKEZlYnJ1 YXJ5IDE5ODApLiBEZXBhcnRtZW50IG9mIFN0YXRpcy1cblwKICAgICAgdGljcywgVW5pdmVy c2l0eSBvZiBNYWRpc29uIChXSSksIFUuUy5BLlwKIikKewogIG9jdGF2ZV92YWx1ZV9saXN0 IHJldHZhbDsKICBERUJVRygxLCAoIkEiKSk7CiAgaW50IG5hcmdzID0gYXJncy5sZW5ndGgo KTsKICBBU1NFUlQobmFyZ3MgPj0gMiAmJiBuYXJncyA8PSA5KTsKICBNYXRyaXggeD1hcmdz KDApLm1hdHJpeF92YWx1ZSgpOwogIE1hdHJpeCB5PWFyZ3MoMSkubWF0cml4X3ZhbHVlKCk7 CiAgTWF0cml4IHhfdGFyZ2V0ID0gbmFyZ3MgPiAyID8gYXJncygyKS5tYXRyaXhfdmFsdWUo KSA6IHg7CiAgLy8gaW50IG55PXkucm93cygpOyAtLT4gbnk9bgogIEFTU0VSVCghZXJyb3Jf c3RhdGUpOwogIGludCBuPXgucm93cygpOwogIGludCBrPXkuY29sdW1ucygpOwogIE1hdHJp eCB3eCA9IChuYXJncyA+IDMgJiYgIWFyZ3MoMykuaXNfemVyb19ieV96ZXJvKCkpCiAgICA/ IGFyZ3MoMykubWF0cml4X3ZhbHVlKCkgOiBNYXRyaXgobiwxLDEuMCk7CiAgTWF0cml4IHd5 ID0gKG5hcmdzID4gNCAmJiAhYXJncyg0KS5pc196ZXJvX2J5X3plcm8oKSkKICAgID8gYXJn cyg0KS5tYXRyaXhfdmFsdWUoKSA6IE1hdHJpeCgxLGssMS4wKTsKICBpbnQgbSA9IG5hcmdz ID4gNSA/IChpbnQpcmludChhcmdzKDUpLmRvdWJsZV92YWx1ZSgpKSA6IDI7CiAgaW50IG1k ID0gbmFyZ3MgPiA2ID8gKGludClyaW50KGFyZ3MoNikuZG91YmxlX3ZhbHVlKCkpIDogMjsK ICBkb3VibGUgdmFsID0gbmFyZ3MgPiA3ID8gYXJncyg3KS5kb3VibGVfdmFsdWUoKSA6IDEu MDsKICBNYXRyaXggbWlkZXIgPSBuYXJncyA+IDggPyBhcmdzKDgpLm1hdHJpeF92YWx1ZSgp IDogTWF0cml4KDEsMSwwLjApOwoKICAvLyBpbnQgbmM9bjsKICBkb3VibGUgY1tuKmtdOwkv LyBNYXRyaXggYyhuLGspOwogIGRvdWJsZSB3a1s2KihuKm0rMSkrbl07Ly8gd29yayBhcnJh eSwgcmV0dXJuIHN0YXR1cwogIGludCBpZXI7CgogIERFQlVHKDEsICgiQiIpKTsKICBBU1NF UlQoIWVycm9yX3N0YXRlKTsKICBBU1NFUlQoeC5jb2x1bW5zKCkgPT0gMSk7CiAgQVNTRVJU KHkucm93cygpID09IG4pOwogIEFTU0VSVCh3eC5yb3dzKCkgPT0gbiAmJiB3eC5jb2x1bW5z KCkgPT0gMSk7CiAgQVNTRVJUKHd5LnJvd3MoKSA9PSAxICYmIHd5LmNvbHVtbnMoKSA9PSBr KTsKICBBU1NFUlQobSA+IDApOwogIEFTU0VSVChuID49IDIqbSk7CiAgQVNTRVJUKGsgPj0g MSk7CiAgQVNTRVJUKG1kID49IDEgJiYgbWQgPD0gNCk7CiAgQVNTRVJUKHZhbCA+PSAwKTsK ICBBU1NFUlQobWlkZXIucm93cygpID09IDEpOwogIGludCBuaWRlciA9IG1pZGVyLmNvbHVt bnMoKTsKICBpbnQgaWRlcltuaWRlcl07CiAgZm9yKGludCBpPTA7IGk8bmlkZXI7IGkrKykg ewogICAgaWRlcltpXSA9IChpbnQpcmludChtaWRlci54ZWxlbSgwLGkpKTsKICAgIEFTU0VS VCgwIDw9IGlkZXJbaV0gJiYgaWRlcltpXSA8PSAyKm0pOwogIH0KCiAgREVCVUcoMiwKCSgi Z2N2c3BsXyh4LHksbnk9JWQsd3gsd3ksbT0lZCxuPSVkLGs9JWQsbWQ9JWQsdmFsPSVnLGMs bmM9JWQsd2ssaWVyKSIsCgkgbiwgbSwgbiwgaywgbWQsIHZhbCwgbikpOwogIGRvdWJsZSAq eF9mb3J0cmFuID0geC5mb3J0cmFuX3ZlYygpOwogIGdjdnNwbF8oeF9mb3J0cmFuLCB5LmZv cnRyYW5fdmVjKCksICZuLAoJICB3eC5mb3J0cmFuX3ZlYygpLCB3eS5mb3J0cmFuX3ZlYygp LCAmbSwgJm4sICZrLAoJICAmbWQsICZ2YWwsIGMsICZuLCB3aywgJmllcik7CgogIGlmKGll ciAhPSAwKSB7CiAgICAoKmN1cnJlbnRfbGlib2N0YXZlX2Vycm9yX2hhbmRsZXIpCiAgICAg IChpZXI9PTEgPyAiTTw9MCB8fCBOPDIqTSIKICAgICAgIDogaWVyPT0yID8gImtub3RzIG5v dCBzb3J0ZWQgb3IgbmVnYXRpdmUgd2VpZ2h0IgogICAgICAgOiBpZXI9PTMgPyAid3Jvbmcg bW9kZSBwYXJhbWV0ZXIgb3IgdmFsdWUiCiAgICAgICA6ICJ1bmtub3duIGVycm9yIik7CiAg ICByZXR1cm4gcmV0dmFsOwogIH0KCiAgREVCVUcoMSwgKCJEIikpOwogIGludCBsPTA7CS8v IGluZGV4IGluIHgsIGp1c3Qgc2ltcGxpZmllcyBzZWFyY2gKICBkb3VibGUgcVsyKm1dOy8v IHdvcmsgYXJyYXkKICBpbnQgbnh0PXhfdGFyZ2V0LnJvd3MoKTsKICBBU1NFUlQoeF90YXJn ZXQuY29sdW1ucygpID09IDEpOwogIE1hdHJpeCB5X3RhcmdldChueHQsaypuaWRlcik7CiAg REVCVUcoMSwgKCJFIikpOwogIGRvdWJsZSAqeGY9eF90YXJnZXQuZm9ydHJhbl92ZWMoKTsK ICBkb3VibGUgKnlmPXlfdGFyZ2V0LmZvcnRyYW5fdmVjKCk7CiAgZm9yKGludCBpPTA7IGk8 bnh0OyBpKyspIHsJCS8vIG5leHQgcG9pbnQKICAgIGRvdWJsZSB4dD14ZltpXTsKICAgIGZv cihpbnQgaj0wOyBqPGs7IGorKykJCS8vIG5leHQgY3VydmUKICAgICAgZm9yKGludCBvPTA7 IG88bmlkZXI7IG8rKykJLy8gbmV4dCBkZXJpdmF0ZQoJeWZbbnh0KihuaWRlcipqK28pK2ld ID0gc3BsZGVyXygmaWRlcltvXSwgJm0sICZuLCAmeHQsIHhfZm9ydHJhbiwgYytuKmosICZs LCBxKTsKICB9CgogIERFQlVHKDEsICgiRiIpKTsKICBERUJVRygyLCAoIm5hcmdvdXQ9JWQi LCBuYXJnb3V0KSk7CiAgcmV0dmFsKDApID0geV90YXJnZXQ7CiAgaWYobmFyZ291dCA+IDEp IHsKICAgIERFQlVHKDEsICgiRyIpKTsKICAgIFJvd1ZlY3RvciB3a3YoNik7CiAgICBkb3Vi bGUgKndrdmY9d2t2LmZvcnRyYW5fdmVjKCk7CiAgICBmb3IoaW50IGk9MDsgaTw2OyBpKysp CiAgICAgIHdrdmZbaV0gPSB3a1tpXTsKICAgIHJldHZhbCgxKSA9IHdrdjsKICB9CiAgREVC VUcoMSwgKCJIIikpOwogIHJldHVybiByZXR2YWw7Cn0K --tFRabnnboX Content-Type: text/plain; charset=us-ascii Content-Description: message body text Content-Transfer-Encoding: 7bit Fortran code from netlib: --tFRabnnboX Content-Type: application/octet-stream Content-Disposition: attachment; filename="gcvsplf.f" Content-Transfer-Encoding: base64 QyBmcm9tOiBodHRwOi8vd3d3Lm5ldGxpYi5vcmcvZ2N2L2luZGV4Lmh0bWwKQyAiZm9yICAg ICBCLXNwbGluZSBkYXRhIHNtb290aGluZyB1c2luZyBnZW5lcmFsaXplZCBjcm9zcy12YWxp ZGF0aW9uCkMgICAgICAgICAgYW5kIG1lYW4gc3F1YXJlZCBwcmVkaWN0aW9uIG9yIGV4cGxp Y2l0IHVzZXIgc21vb3RoaW5nIgpDICJieSAgICAgIEguSi4gV29sdHJpbmcsICBVbml2ZXJz aXR5IG9mIE5pam1lZ2VuLApDICAgICAgICAgIFBoaWxpcHMgTWVkaWNhbCBTeXN0ZW1zLCBF aW5kaG92ZW4gKFRoZSBOZXRoZXJsYW5kcykiCkMKQyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkMKQyBH Q1ZTUEwuRk9SLCAxOTg2LTA1LTEyCkMKQyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkMKQyBTVUJST1VU SU5FIEdDVlNQTCAoUkVBTCo4KQpDCkMgUHVycG9zZToKQyAqKioqKioqCkMKQyAgICAgICBO YXR1cmFsIEItc3BsaW5lIGRhdGEgc21vb3RoaW5nIHN1YnJvdXRpbmUsIHVzaW5nIHRoZSBH ZW5lcmFsaS0KQyAgICAgICB6ZWQgQ3Jvc3MtVmFsaWRhdGlvbiBhbmQgTWVhbi1TcXVhcmVk IFByZWRpY3Rpb24gRXJyb3IgQ3JpdGVyaWEKQyAgICAgICBvZiBDcmF2ZW4gJiBXYWhiYSAo MTk3OSkuIEFsdGVybmF0aXZlbHksIHRoZSBhbW91bnQgb2Ygc21vb3RoaW5nCkMgICAgICAg Y2FuIGJlIGdpdmVuIGV4cGxpY2l0bHksIG9yIGl0IGNhbiBiZSBiYXNlZCBvbiB0aGUgZWZm ZWN0aXZlCkMgICAgICAgbnVtYmVyIG9mIGRlZ3JlZXMgb2YgZnJlZWRvbSBpbiB0aGUgc21v b3RoaW5nIHByb2Nlc3MgYXMgZGVmaW5lZApDICAgICAgIGJ5IFdhaGJhICgxOTgwKS4gVGhl IG1vZGVsIGFzc3VtZXMgdW5jb3JyZWxhdGVkLCBhZGRpdGl2ZSBub2lzZQpDICAgICAgIGFu ZCBlc3NlbnRpYWxseSBzbW9vdGgsIHVuZGVybHlpbmcgZnVuY3Rpb25zLiBUaGUgbm9pc2Ug bWF5IGJlCkMgICAgICAgbm9uLXN0YXRpb25hcnksIGFuZCB0aGUgaW5kZXBlbmRlbnQgY28t b3JkaW5hdGVzIG1heSBiZSBzcGFjZWQKQyAgICAgICBub24tZXF1aWRpc3RhbnRseS4gTXVs dGlwbGUgZGF0YXNldHMsIHdpdGggY29tbW9uIGluZGVwZW5kZW50CkMgICAgICAgdmFyaWFi bGVzIGFuZCB3ZWlnaHQgZmFjdG9ycyBhcmUgYWNjb21vZGF0ZWQuCkMKQwpDIENhbGxpbmcg Y29udmVudGlvbjoKQyAqKioqKioqKioqKioqKioqKioKQwpDICAgICAgIENBTEwgR0NWU1BM ICggWCwgWSwgTlksIFdYLCBXWSwgTSwgTiwgSywgTUQsIFZBTCwgQywgTkMsIFdLLCBJRVIg KQpDCkMgTWVhbmluZyBvZiBwYXJhbWV0ZXJzOgpDICoqKioqKioqKioqKioqKioqKioqKgpD CkMgICAgICAgWChOKSAgICAoIEkgKSAgIEluZGVwZW5kZW50IHZhcmlhYmxlczogc3RyaWN0 bHkgaW5jcmVhc2luZyBrbm90CkMgICAgICAgICAgICAgICAgICAgICAgIHNlcXVlbmNlLCB3 aXRoIFgoSS0xKS5sdC5YKEkpLCBJPTIsLi4uLE4uCkMgICAgICAgWShOWSxLKSAoIEkgKSAg IElucHV0IGRhdGEgdG8gYmUgc21vb3RoZWQgKG9yIGludGVycG9sYXRlZCkuCkMgICAgICAg TlkgICAgICAoIEkgKSAgIEZpcnN0IGRpbWVuc2lvbiBvZiBhcnJheSBZKE5ZLEspLCB3aXRo IE5ZLmdlLk4uCkMgICAgICAgV1goTikgICAoIEkgKSAgIFdlaWdodCBmYWN0b3IgYXJyYXk7 IFdYKEkpIGNvcnJlc3BvbmRzIHdpdGgKQyAgICAgICAgICAgICAgICAgICAgICAgdGhlIHJl bGF0aXZlIGludmVyc2UgdmFyaWFuY2Ugb2YgcG9pbnQgWShJLCopLgpDICAgICAgICAgICAg ICAgICAgICAgICBJZiBubyByZWxhdGl2ZSB3ZWlnaHRpbmcgaW5mb3JtYXRpb24gaXMKQyAg ICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlLCB0aGUgV1goSSkgc2hvdWxkIGJlIHNl dCB0byBPTkUuCkMgICAgICAgICAgICAgICAgICAgICAgIEFsbCBXWChJKS5ndC5aRVJPLCBJ PTEsLi4uLE4uCkMgICAgICAgV1koSykgICAoIEkgKSAgIFdlaWdodCBmYWN0b3IgYXJyYXk7 IFdZKEopIGNvcnJlc3BvbmRzIHdpdGgKQyAgICAgICAgICAgICAgICAgICAgICAgdGhlIHJl bGF0aXZlIGludmVyc2UgdmFyaWFuY2Ugb2YgcG9pbnQgWSgqLEopLgpDICAgICAgICAgICAg ICAgICAgICAgICBJZiBubyByZWxhdGl2ZSB3ZWlnaHRpbmcgaW5mb3JtYXRpb24gaXMKQyAg ICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlLCB0aGUgV1koSikgc2hvdWxkIGJlIHNl dCB0byBPTkUuCkMgICAgICAgICAgICAgICAgICAgICAgIEFsbCBXWShKKS5ndC5aRVJPLCBK PTEsLi4uLEsuCkMgICAgICAgICAgICAgICAgICAgICAgIE5COiBUaGUgZWZmZWN0aXZlIHdl aWdodCBmb3IgcG9pbnQgWShJLEopIGlzCkMgICAgICAgICAgICAgICAgICAgICAgIGVxdWFs IHRvIFdYKEkpKldZKEopLgpDICAgICAgIE0gICAgICAgKCBJICkgICBIYWxmIG9yZGVyIG9m IHRoZSByZXF1aXJlZCBCLXNwbGluZXMgKHNwbGluZQpDICAgICAgICAgICAgICAgICAgICAg ICBkZWdyZWUgMipNLTEpLCB3aXRoIE0uZ3QuMC4gVGhlIHZhbHVlcyBNID0KQyAgICAgICAg ICAgICAgICAgICAgICAgMSwyLDMsNCBjb3JyZXNwb25kIHRvIGxpbmVhciwgY3ViaWMsIHF1 aW50aWMsCkMgICAgICAgICAgICAgICAgICAgICAgIGFuZCBoZXB0aWMgc3BsaW5lcywgcmVz cGVjdGl2ZWx5LgpDICAgICAgIE4gICAgICAgKCBJICkgICBOdW1iZXIgb2Ygb2JzZXJ2YXRp b25zIHBlciBkYXRhc2V0LCB3aXRoIE4uZ2UuMipNLgpDICAgICAgIEsgICAgICAgKCBJICkg ICBOdW1iZXIgb2YgZGF0YXNldHMsIHdpdGggSy5nZS4xLgpDICAgICAgIE1EICAgICAgKCBJ ICkgICBPcHRpbWl6YXRpb24gbW9kZSBzd2l0Y2g6CkMgICAgICAgICAgICAgICAgICAgICAg IHxNRHwgPSAxOiBQcmlvciBnaXZlbiB2YWx1ZSBmb3IgcCBpbiBWQUwKQyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChWQUwuZ2UuWkVSTykuIFRoaXMgaXMgdGhlIGZhc3Rl c3QKQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZSBvZiBHQ1ZTUEwsIHNp bmNlIG5vIGl0ZXJhdGlvbgpDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMg cGVyZm9ybWVkIGluIHAuCkMgICAgICAgICAgICAgICAgICAgICAgIHxNRHwgPSAyOiBHZW5l cmFsaXplZCBjcm9zcyB2YWxpZGF0aW9uLgpDICAgICAgICAgICAgICAgICAgICAgICB8TUR8 ID0gMzogVHJ1ZSBwcmVkaWN0ZWQgbWVhbi1zcXVhcmVkIGVycm9yLApDICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgd2l0aCBwcmlvciBnaXZlbiB2YXJpYW5jZSBpbiBWQUwu CkMgICAgICAgICAgICAgICAgICAgICAgIHxNRHwgPSA0OiBQcmlvciBnaXZlbiBudW1iZXIg b2YgZGVncmVlcyBvZgpDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZWRv bSBpbiBWQUwgKFpFUk8ubGUuVkFMLmxlLk4tTSkuCkMgICAgICAgICAgICAgICAgICAgICAg ICBNRCAgPCAwOiBJdCBpcyBhc3N1bWVkIHRoYXQgdGhlIGNvbnRlbnRzIG9mCkMgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBYLCBXLCBNLCBOLCBhbmQgV0sgaGF2ZSBub3Qg YmVlbgpDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZWQgc2luY2Ug dGhlIHByZXZpb3VzIGludm9jYS0KQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRpb24gb2YgR0NWU1BMLiBJZiBNRCA8IC0xLCBXSyg0KQpDICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaXMgdXNlZCBhcyBhbiBpbml0aWFsIGVzdGltYXRlIGZvcgpDICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNtb290aGluZyBwYXJhbWV0ZXIg cC4KQyAgICAgICAgICAgICAgICAgICAgICAgT3RoZXIgdmFsdWVzIGZvciB8TUR8LCBhbmQg aW5hcHByb3ByaWF0ZSB2YWx1ZXMKQyAgICAgICAgICAgICAgICAgICAgICAgZm9yIFZBTCB3 aWxsIHJlc3VsdCBpbiBhbiBlcnJvciBjb25kaXRpb24sIG9yCkMgICAgICAgICAgICAgICAg ICAgICAgIGNhdXNlIGEgZGVmYXVsdCB2YWx1ZSBmb3IgVkFMIHRvIGJlIHNlbGVjdGVkLgpD ICAgICAgICAgICAgICAgICAgICAgICBBZnRlciByZXR1cm4gZnJvbSBNRC5uZS4xLCB0aGUg c2FtZSBudW1iZXIgb2YKQyAgICAgICAgICAgICAgICAgICAgICAgZGVncmVlcyBvZiBmcmVl ZG9tIGNhbiBiZSBvYnRhaW5lZCwgZm9yIGlkZW50aWNhbApDICAgICAgICAgICAgICAgICAg ICAgICB3ZWlnaHQgZmFjdG9ycyBhbmQga25vdCBwb3NpdGlvbnMsIGJ5IHNlbGVjdGluZwpD ICAgICAgICAgICAgICAgICAgICAgICB8TUR8PTEsIGFuZCBieSBjb3B5aW5nIHRoZSB2YWx1 ZSBvZiBwIGZyb20gV0soNCkKQyAgICAgICAgICAgICAgICAgICAgICAgaW50byBWQUwuIElu IHRoaXMgd2F5LCBubyBpdGVyYXRpdmUgb3B0aW1pemF0aW9uCkMgICAgICAgICAgICAgICAg ICAgICAgIGlzIHJlcXVpcmVkIHdoZW4gcHJvY2Vzc2luZyBvdGhlciBkYXRhIGluIFkuCkMg ICAgICAgVkFMICAgICAoIEkgKSAgIE1vZGUgdmFsdWUsIGFzIGRlc2NyaWJlZCBhYm92ZSB1 bmRlciBNRC4KQyAgICAgICBDKE5DLEspICggTyApICAgU3BsaW5lIGNvZWZmaWNpZW50cywg dG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbgpDICAgICAgICAgICAgICAgICAgICAgICB3aXRo IGZ1bmN0aW9uIFNQTERFUi4gTkI6IHRoZSBkaW1lbnNpb25zIG9mIEMKQyAgICAgICAgICAg ICAgICAgICAgICAgaW4gR0NWU1BMIGFuZCBpbiBTUExERVIgYXJlIGRpZmZlcmVudApDICAg ICAgICAgICAgICAgICAgICAgICBvbmx5IGEgc2luZ2xlIGNvbHVtbiBvZiBDKE4sSykgaXMg bmVlZGVkLCBhbmQgdGhlCkMgICAgICAgICAgICAgICAgICAgICAgIHByb3BlciBjb2x1bW4g QygxLEopLCB3aXRoIEo9MS4uLksgc2hvdWxkIGJlIHVzZWQKQyAgICAgICAgICAgICAgICAg ICAgICAgd2hlbiBjYWxsaW5nIFNQTERFUi4KQyAgICAgICBOQyAgICAgICAoIEkgKSAgRmly c3QgZGltZW5zaW9uIG9mIGFycmF5IEMoTkMsSyksIE5DLmdlLk4uCkMgICAgICAgV0soSVdL KSAoSS9XL08pIFdvcmsgdmVjdG9yLCB3aXRoIGxlbmd0aCBJV0suZ2UuNiooTipNKzEpK04u CkMgICAgICAgICAgICAgICAgICAgICAgIE9uIG5vcm1hbCBleGl0LCB0aGUgZmlyc3QgNiB2 YWx1ZXMgb2YgV0sgYXJlCkMgICAgICAgICAgICAgICAgICAgICAgIGFzc2lnbmVkIGFzIGZv bGxvd3M6CkMKQyAgICAgICAgICAgICAgICAgICAgICAgV0soMSkgPSBHZW5lcmFsaXplZCBD cm9zcyBWYWxpZGF0aW9uIHZhbHVlCkMgICAgICAgICAgICAgICAgICAgICAgIFdLKDIpID0g TWVhbiBTcXVhcmVkIFJlc2lkdWFsLgpDICAgICAgICAgICAgICAgICAgICAgICBXSygzKSA9 IEVzdGltYXRlIG9mIHRoZSBudW1iZXIgb2YgZGVncmVlcyBvZgpDICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGZyZWVkb20gb2YgdGhlIHJlc2lkdWFsIHN1bSBvZiBzcXVhcmVz CkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyIGRhdGFzZXQsIHdpdGggMC5s dC5XSygzKS5sdC5OLU0uCkMgICAgICAgICAgICAgICAgICAgICAgIFdLKDQpID0gU21vb3Ro aW5nIHBhcmFtZXRlciBwLCBtdWx0aXBsaWNhdGl2ZQpDICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHdpdGggdGhlIHNwbGluZXMnIGRlcml2YXRpdmUgY29uc3RyYWludC4KQyAg ICAgICAgICAgICAgICAgICAgICAgV0soNSkgPSBFc3RpbWF0ZSBvZiB0aGUgdHJ1ZSBtZWFu IHNxdWFyZWQgZXJyb3IKQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGlmZmVy ZW50IGZvcm11bGEgZm9yIHxNRHwgPSAzKS4KQyAgICAgICAgICAgICAgICAgICAgICAgV0so NikgPSBHYXVzcy1NYXJrb3YgZXJyb3IgdmFyaWFuY2UuCkMKQyAgICAgICAgICAgICAgICAg ICAgICAgSWYgV0soNCkgLS0+ICAwICwgV0soMykgLS0+ICAwICwgYW5kIGFuIGludGVyLQpD ICAgICAgICAgICAgICAgICAgICAgICBwb2xhdGluZyBzcGxpbmUgaXMgZml0dGVkIHRvIHRo ZSBkYXRhIChwIC0tPiAwKS4KQyAgICAgICAgICAgICAgICAgICAgICAgQSB2ZXJ5IHNtYWxs IHZhbHVlID4gMCBpcyB1c2VkIGZvciBwLCBpbiBvcmRlcgpDICAgICAgICAgICAgICAgICAg ICAgICB0byBhdm9pZCBkaXZpc2lvbiBieSB6ZXJvIGluIHRoZSBHQ1YgZnVuY3Rpb24uCkMK QyAgICAgICAgICAgICAgICAgICAgICAgSWYgV0soNCkgLS0+IGluZiwgV0soMykgLS0+IE4t TSwgYW5kIGEgbGVhc3QtCkMgICAgICAgICAgICAgICAgICAgICAgIHNxdWFyZXMgcG9seW5v bWlhbCBvZiBvcmRlciBNIChkZWdyZWUgTS0xKSBpcwpDICAgICAgICAgICAgICAgICAgICAg ICBmaXR0ZWQgdG8gdGhlIGRhdGEgKHAgLS0+IGluZikuIEZvciBudW1lcmljYWwKQyAgICAg ICAgICAgICAgICAgICAgICAgcmVhc29ucywgYSB2ZXJ5IGhpZ2ggdmFsdWUgaXMgdXNlZCBm b3IgcC4KQwpDICAgICAgICAgICAgICAgICAgICAgICBVcG9uIHJldHVybiwgdGhlIGNvbnRl bnRzIG9mIFdLIGNhbiBiZSB1c2VkIGZvcgpDICAgICAgICAgICAgICAgICAgICAgICBjb3Zh cmlhbmNlIHByb3BhZ2F0aW9uIGluIHRlcm1zIG9mIHRoZSBtYXRyaWNlcwpDICAgICAgICAg ICAgICAgICAgICAgICBCIGFuZCBXRTogc2VlIHRoZSBzb3VyY2UgbGlzdGluZ3MuIFRoZSB2 YXJpYW5jZQpDICAgICAgICAgICAgICAgICAgICAgICBlc3RpbWF0ZSBmb3IgZGF0YXNldCBK IGZvbGxvd3MgYXMgV0soNikvV1koSikuCkMKQyAgICAgICBJRVIgICAgICggTyApICAgRXJy b3IgcGFyYW1ldGVyOgpDCkMgICAgICAgICAgICAgICAgICAgICAgIElFUiA9IDA6ICAgICAg ICBOb3JtYWwgZXhpdApDICAgICAgICAgICAgICAgICAgICAgICBJRVIgPSAxOiAgICAgICAg TS5sZS4wIC5vci4gTi5sdC4yKk0KQyAgICAgICAgICAgICAgICAgICAgICAgSUVSID0gMjog ICAgICAgIEtub3Qgc2VxdWVuY2UgaXMgbm90IHN0cmljdGx5CkMgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbmNyZWFzaW5nLCBvciBzb21lIHdlaWdodApDICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yIGlzIG5vdCBwb3Np dGl2ZS4KQyAgICAgICAgICAgICAgICAgICAgICAgSUVSID0gMzogICAgICAgIFdyb25nIG1v ZGUgIHBhcmFtZXRlciBvciB2YWx1ZS4KQwpDIFJlbWFya3M6CkMgKioqKioqKgpDCkMgICAg ICAgKDEpIEdDVlNQTCBjYWxjdWxhdGVzIGEgbmF0dXJhbCBzcGxpbmUgb2Ygb3JkZXIgMipN IChkZWdyZWUKQyAgICAgICAyKk0tMSkgd2hpY2ggc21vb3RoZXMgb3IgaW50ZXJwb2xhdGVz IGEgZ2l2ZW4gc2V0IG9mIGRhdGEKQyAgICAgICBwb2ludHMsIHVzaW5nIHN0YXRpc3RpY2Fs IGNvbnNpZGVyYXRpb25zIHRvIGRldGVybWluZSB0aGUKQyAgICAgICBhbW91bnQgb2Ygc21v b3RoaW5nIHJlcXVpcmVkIChDcmF2ZW4gJiBXYWhiYSwgMTk3OSkuIElmIHRoZQpDICAgICAg IGVycm9yIHZhcmlhbmNlIGlzIGEgcHJpb3JpIGtub3duLCBpdCBzaG91bGQgYmUgc3VwcGxp ZWQgdG8KQyAgICAgICB0aGUgcm91dGluZSBpbiBWQUwsIGZvciB8TUR8PTMuIFRoZSBkZWdy ZWUgb2Ygc21vb3RoaW5nIGlzCkMgICAgICAgdGhlbiBkZXRlcm1pbmVkIHRvIG1pbmltaXpl IGFuIHVuYmlhc2VkIGVzdGltYXRlIG9mIHRoZSB0cnVlCkMgICAgICAgbWVhbiBzcXVhcmVk IGVycm9yLiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgdGhlIGVycm9yIHZhcmlhbmNlCkMgICAg ICAgaXMgbm90IGtub3duLCBvbmUgbWF5IHNlbGVjdCB8TUR8PTIuIFRoZSByb3V0aW5lIHRo ZW4gZGV0ZXItCkMgICAgICAgbWluZXMgdGhlIGRlZ3JlZSBvZiBzbW9vdGhpbmcgdG8gbWlu aW1pemUgdGhlIGdlbmVyYWxpemVkCkMgICAgICAgY3Jvc3MgdmFsaWRhdGlvbiBmdW5jdGlv bi4gVGhpcyBpcyBhc3ltcHRvdGljYWxseSB0aGUgc2FtZQpDICAgICAgIGFzIG1pbmltaXpp bmcgdGhlIHRydWUgcHJlZGljdGVkIG1lYW4gc3F1YXJlZCBlcnJvciAoQ3JhdmVuICYKQyAg ICAgICBXYWhiYSwgMTk3OSkuIElmIHRoZSBlc3RpbWF0ZXMgZnJvbSB8TUR8PTIgb3IgMyBk byBub3QgYXBwZWFyCkMgICAgICAgc3VpdGFibGUgdG8gdGhlIHVzZXIgKGFzIGFwcGFyZW50 IGZyb20gdGhlIHNtb290aG5lc3Mgb2YgdGhlCkMgICAgICAgTS10aCBkZXJpdmF0aXZlIG9y IGZyb20gdGhlIGVmZmVjdGl2ZSBudW1iZXIgb2YgZGVncmVlcyBvZgpDICAgICAgIGZyZWVk b20gcmV0dXJuZWQgaW4gV0soMykgKSwgdGhlIHVzZXIgbWF5IHNlbGVjdCBhbiBvdGhlcgpD ICAgICAgIHZhbHVlIGZvciB0aGUgbm9pc2UgdmFyaWFuY2UgaWYgfE1EfD0zLCBvciBhIHJl YXNvbmFibHkgbGFyZ2UKQyAgICAgICBudW1iZXIgb2YgZGVncmVlcyBvZiBmcmVlZG9tIGlm IHxNRHw9NC4gSWYgfE1EfD0xLCB0aGUgcHJvY2UtCkMgICAgICAgZHVyZSBpcyBub24taXRl cmF0aXZlLCBhbmQgcmV0dXJucyBhIHNwbGluZSBmb3IgdGhlIGdpdmVuCkMgICAgICAgdmFs dWUgb2YgdGhlIHNtb290aGluZyBwYXJhbWV0ZXIgcCBhcyBlbnRlcmVkIGluIFZBTC4KQwpD ICAgICAgICgyKSBUaGUgbnVtYmVyIG9mIGFyaXRobWV0aWMgb3BlcmF0aW9ucyBhbmQgdGhl IGFtb3VudCBvZgpDICAgICAgIHN0b3JhZ2UgcmVxdWlyZWQgYXJlIGJvdGggcHJvcG9ydGlv bmFsIHRvIE4sIHNvIHZlcnkgbGFyZ2UKQyAgICAgICBkYXRhc2V0cyBtYXkgYmUgYWNjb21v ZGF0ZWQuIFRoZSBkYXRhIHBvaW50cyBkbyBub3QgaGF2ZQpDICAgICAgIHRvIGJlIGVxdWlk aXN0YW50IGluIHRoZSBpbmRlcGVuZGFudCB2YXJpYWJsZSBYIG9yIHVuaWZvcm1seQpDICAg ICAgIHdlaWdodGVkIGluIHRoZSBkZXBlbmRhbnQgdmFyaWFibGUgWS4gSG93ZXZlciwgdGhl IGRhdGEKQyAgICAgICBwb2ludHMgaW4gWCBtdXN0IGJlIHN0cmljdGx5IGluY3JlYXNpbmcu IE11bHRpcGxlIGRhdGFzZXQKQyAgICAgICBwcm9jZXNzaW5nIChLLmd0LjEpIGlzIG51bWVy aWNhbGx5IG1vcmUgZWZmaWNpZW50IGRhbgpDICAgICAgIHNlcGFyYXRlIHByb2Nlc3Npbmcg b2YgdGhlIGluZGl2aWR1YWwgZGF0YXNldHMgKEsuZXEuMSkuCkMKQyAgICAgICAoMykgSWYg fE1EfD0zIChhIHByaW9yaSBrbm93biBub2lzZSB2YXJpYW5jZSksIGFueSB2YWx1ZSBvZgpD ICAgICAgIE4uZ2UuMipNIGlzIGFjY2VwdGFibGUuIEhvd2V2ZXIsIGl0IGlzIGFkdmlzYWJs ZSBmb3IgTi0yKk0KQyAgICAgICBiZSByYXRoZXIgbGFyZ2UgKGF0IGxlYXN0IDIwKSBpZiB8 TUR8PTIgKEdDVikuCkMKQyAgICAgICAoNCkgRm9yIHxNRHwgPiAxLCBHQ1ZTUEwgdHJpZXMg dG8gaXRlcmF0aXZlbHkgbWluaW1pemUgdGhlCkMgICAgICAgc2VsZWN0ZWQgY3JpdGVyaW9u IGZ1bmN0aW9uLiBUaGlzIG1pbmltdW0gaXMgdW5pcXVlIGZvciB8TUR8CkMgICAgICAgPSA0 LCBidXQgbm90IG5lY2Vzc2FyaWx5IGZvciB8TUR8ID0gMiBvciAzLiBDb25zZXF1ZW50bHks IApDICAgICAgIGxvY2FsIG9wdGltYSByYXRoZXIgdGhhdCB0aGUgZ2xvYmFsIG9wdGltdW0g bWlnaHQgYmUgZm91bmQsCkMgICAgICAgYW5kIHNvbWUgYWN0dWFsIGZpbmRpbmdzIHN1Z2dl c3QgdGhhdCBsb2NhbCBvcHRpbWEgbWlnaHQKQyAgICAgICB5aWVsZCBtb3JlIG1lYW5pbmdm dWwgcmVzdWx0cyB0aGFuIHRoZSBnbG9iYWwgb3B0aW11bSBpZiBOCkMgICAgICAgaXMgc21h bGwuIFRoZXJlZm9yZSwgdGhlIHVzZXIgaGFzIHNvbWUgY29udHJvbCBvdmVyIHRoZQpDICAg ICAgIHNlYXJjaCBwcm9jZWR1cmUuIElmIE1EID4gMSwgdGhlIGl0ZXJhdGl2ZSBzZWFyY2gg c3RhcnRzCkMgICAgICAgZnJvbSBhIHZhbHVlIHdoaWNoIHlpZWxkcyBhIG51bWJlciBvZiBk ZWdyZWVzIG9mIGZyZWVkb20KQyAgICAgICB3aGljaCBpcyBhcHByb3hpbWF0ZWx5IGVxdWFs IHRvIE4vMiwgdW50aWwgdGhlIGZpcnN0IChsb2NhbCkKQyAgICAgICBtaW5pbXVtIGlzIGZv dW5kIHZpYSBhIGdvbGRlbiBzZWN0aW9uIHNlYXJjaCBwcm9jZWR1cmUKQyAgICAgICAoVXRy ZXJhcywgMTk4MCkuIElmIE1EIDwgLTEsIHRoZSB2YWx1ZSBmb3IgcCBjb250YWluZWQgaW4K QyAgICAgICBXSyg0KSBpcyB1c2VkIGluc3RlYWQuIFRodXMsIGlmIE1EID0gMiBvciAzIHlp ZWxkIHRvbyBub2lzeQpDICAgICAgIGFuIGVzdGltYXRlLCB0aGUgdXNlciBtaWdodCB0cnkg fE1EfCA9IDEgb3IgNCwgZm9yIHN1aXRhYmx5CkMgICAgICAgc2VsZWN0ZWQgdmFsdWVzIGZv ciBwIG9yIGZvciB0aGUgbnVtYmVyIG9mIGRlZ3JlZXMgb2YKQyAgICAgICBmcmVlZG9tLCBh bmQgdGhlbiBydW4gR0NWU1BMIHdpdGggTUQgPSAtMiBvciAtMy4gVGhlIGNvbi0KQyAgICAg ICB0ZW50cyBvZiBOLCBNLCBLLCBYLCBXWCwgV1ksIGFuZCBXSyBhcmUgYXNzdW1lZCB1bmNo YW5nZWQKQyAgICAgICBpZiBNRCA8IDAuCkMKQyAgICAgICAoNSkgR0NWU1BMIGNhbGN1bGF0 ZXMgdGhlIHNwbGluZSBjb2VmZmljaWVudCBhcnJheSBDKE4sSyk7CkMgICAgICAgdGhpcyBh cnJheSBjYW4gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIHNwbGluZSBmdW5jdGlvbgpDICAg ICAgIHZhbHVlIGFuZCBhbnkgb2YgaXRzIGRlcml2YXRpdmVzIHVwIHRvIHRoZSBkZWdyZWUg MipNLTEKQyAgICAgICBhdCBhbnkgYXJndW1lbnQgVCB3aXRoaW4gdGhlIGtub3QgcmFuZ2Us IHVzaW5nIHN1YnJvdS0KQyAgICAgICB0aW5lcyBTUExERVIgYW5kIFNFQVJDSCwgYW5kIHRo ZSBrbm90IGFycmF5IFgoTikuIFNpbmNlCkMgICAgICAgdGhlIHNwbGluZXMgYXJlIGNvbnN0 cmFpbmVkIGF0IHRoZWlyIE10aCBkZXJpdmF0aXZlLCBvbmx5CkMgICAgICAgdGhlIGxvd2Vy IHNwbGluZSBkZXJpdmF0aXZlcyB3aWxsIHRlbmQgdG8gYmUgcmVsaWFibGUKQyAgICAgICBl c3RpbWF0ZXMgb2YgdGhlIHVuZGVybHlpbmcsIHRydWUgc2lnbmFsIGRlcml2YXRpdmVzLgpD CkMgICAgICAgKDYpIEdDVlNQTCBjb21iaW5lcyBlbGVtZW50cyBvZiBzdWJyb3V0aW5lIENS Vk81IGJ5IFV0cmUtCkMgICAgICAgcmFzICgxOTgwKSwgc3Vicm91dGluZSBTTU9PVEggYnkg THljaGUgZXQgYWwuICgxOTgzKSwgYW5kCkMgICAgICAgc3Vicm91dGluZSBDVUJHQ1YgYnkg SHV0Y2hpbnNvbiAoMTk4NSkuIFRoZSB0cmFjZSBvZiB0aGUKQyAgICAgICBpbmZsdWVuY2Ug bWF0cml4IGlzIGFzc2Vzc2VkIGluIGEgc2ltaWxhciB3YXkgYXMgZGVzY3JpYmVkCkMgICAg ICAgYnkgSHV0Y2hpbnNvbiAmIGRlIEhvb2cgKDE5ODUpLiBUaGUgbWFqb3IgZGlmZmVyZW5j ZSBpcwpDICAgICAgIHRoYXQgdGhlIHByZXNlbnQgYXBwcm9hY2ggdXRpbGl6ZXMgbm9uLXN5 bW1ldHJpY2FsIEItc3BsaW5lCkMgICAgICAgZGVzaWduIG1hdHJpY2VzIGFzIGRlc2NyaWJl ZCBieSBMeWNoZSBldCBhbC4gKDE5ODMpOyB0aGVyZS0KQyAgICAgICBmb3JlLCB0aGUgb3Jp Z2luYWwgYWxnb3JpdGhtIGJ5IEVyaXNtYW4gJiBUaW5uZXkgKDE5NzUpIGhhcwpDICAgICAg IGJlZW4gdXNlZCwgcmF0aGVyIHRoYW4gdGhlIHN5bW1ldHJpY2FsIHZlcnNpb24gYWRvcHRl ZCBieQpDICAgICAgIEh1dGNoaW5zb24gJiBkZSBIb29nLgpDCkMgUmVmZXJlbmNlczoKQyAq KioqKioqKioqCkMKQyAgICAgICBQLiBDcmF2ZW4gJiBHLiBXYWhiYSAoMTk3OSksIFNtb290 aGluZyBub2lzeSBkYXRhIHdpdGgKQyAgICAgICBzcGxpbmUgZnVuY3Rpb25zLiBOdW1lcmlz Y2hlIE1hdGhlbWF0aWsgMzEsIDM3Ny00MDMuCkMKQyAgICAgICBBLk0uIEVyaXNtYW4gJiBX LkYuIFRpbm5leSAoMTk3NSksIE9uIGNvbXB1dGluZyBjZXJ0YWluCkMgICAgICAgZWxlbWVu dHMgb2YgdGhlIGludmVyc2Ugb2YgYSBzcGFyc2UgbWF0cml4LiBDb21tdW5pY2F0aW9ucwpD ICAgICAgIG9mIHRoZSBBQ00gMTgoMyksIDE3Ny0xNzkuCkMKQyAgICAgICBNLkYuIEh1dGNo aW5zb24gJiBGLlIuIGRlIEhvb2cgKDE5ODUpLCBTbW9vdGhpbmcgbm9pc3kgZGF0YQpDICAg ICAgIHdpdGggc3BsaW5lIGZ1bmN0aW9ucy4gTnVtZXJpc2NoZSBNYXRoZW1hdGlrIDQ3KDEp LCA5OS0xMDYuCkMKQyAgICAgICBNLkYuIEh1dGNoaW5zb24gKDE5ODUpLCBTdWJyb3V0aW5l IENVQkdDVi4gQ1NJUk8gRGl2aXNpb24gb2YKQyAgICAgICBNYXRoZW1hdGljcyBhbmQgU3Rh dGlzdGljcywgUC5PLiBCb3ggMTk2NSwgQ2FuYmVycmEsIEFDVCAyNjAxLApDICAgICAgIEF1 c3RyYWxpYS4KQwpDICAgICAgIFQuIEx5Y2hlLCBMLkwuIFNjaHVtYWtlciwgJiBLLiBTZXBl aHJub29yaSAoMTk4MyksIEZvcnRyYW4KQyAgICAgICBzdWJyb3V0aW5lcyBmb3IgY29tcHV0 aW5nIHNtb290aGluZyBhbmQgaW50ZXJwb2xhdGluZyBuYXR1cmFsCkMgICAgICAgc3BsaW5l cy4gQWR2YW5jZXMgaW4gRW5naW5lZXJpbmcgU29mdHdhcmUgNSgxKSwgMi01LgpDCkMgICAg ICAgRi4gVXRyZXJhcyAoMTk4MCksIFVuIHBhcXVldGUgZGUgcHJvZ3JhbWFzIHBhcmEgYWp1 c3RhciBjdXJ2YXMKQyAgICAgICBtZWRpYW50ZSBmdW5jaW9uZXMgc3BsaW5lLiBJbmZvcm1l IFRlY25pY28gTUEtODAtQi0yMDksIERlcGFyLQpDICAgICAgIHRhbWVudG8gZGUgTWF0ZW1h dGljYXMsIEZhY3VsZGFkIGRlIENpZW5jaWFzIEZpc2ljYXMgeSBNYXRlbWEtCkMgICAgICAg dGljYXMsIFVuaXZlcnNpZGFkIGRlIENoaWxlLCBTYW50aWFnby4KQwpDICAgICAgIFdhaGJh LCBHLiAoMTk4MCkuIE51bWVyaWNhbCBhbmQgc3RhdGlzdGljYWwgbWV0aG9kcyBmb3IgbWls ZGx5LApDICAgICAgIG1vZGVyYXRlbHkgYW5kIHNldmVyZWx5IGlsbC1wb3NlZCBwcm9ibGVt cyB3aXRoIG5vaXN5IGRhdGEuCkMgICAgICAgVGVjaG5pY2FsIHJlcG9ydCBuci4gNTk1IChG ZWJydWFyeSAxOTgwKS4gRGVwYXJ0bWVudCBvZiBTdGF0aXMtCkMgICAgICAgdGljcywgVW5p dmVyc2l0eSBvZiBNYWRpc29uIChXSSksIFUuUy5BLgpDCkMgU3VicHJvZ3JhbXMgcmVxdWly ZWQ6CkMgKioqKioqKioqKioqKioqKioqKioKQwpDICAgICAgIEJBU0lTLCBQUkVQLCBTUExD LCBCQU5ERVQsIEJBTlNPTCwgVFJJTlYKQwpDKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQwogICAgICBT VUJST1VUSU5FIEdDVlNQTCAoIFgsIFksIE5ZLCBXWCwgV1ksIE0sIE4sIEssIE1ELCBWQUws IEMsIE5DLAogICAgIDEgICAgICAgICAgICAgICAgICAgV0ssIElFUiApCkMKICAgICAgSU1Q TElDSVQgUkVBTCo4IChBLUgsTy1aKQogICAgICBQQVJBTUVURVIgKCBSQVRJTz0yRDAsIFRB VT0xLjYxODAzMzk4M0QwLCBJQldFPTcsCiAgICAgMSAgICAgICAgICAgWkVSTz0wRDAsIEhB TEY9NUQtMSAsIE9ORT0xRDAsIFRPTD0xRC02LAogICAgIDIgICAgICAgICAgIEVQUz0xRC0x NSwgRVBTSU5WPU9ORS9FUFMgKQogICAgICBESU1FTlNJT04gWChOKSwgWShOWSxLKSwgV1go TiksIFdZKEspLCBDKE5DLEspLCBXSyhOKzYqKE4qTSsxKSkKICAgICAgU0FWRSBNMiwgTk0x LCBFTAogICAgICBEQVRBIE0yLCBOTTEsIEVMIC8gMiowLCAwRDAgLwpDCkMqKiogIFBhcmFt ZXRlciBjaGVjayBhbmQgd29yayBhcnJheSBpbml0aWFsaXphdGlvbgpDCiAgICAgIElFUiA9 IDAKQyoqKiAgQ2hlY2sgb24gbW9kZSBwYXJhbWV0ZXIKICAgICAgSUYgKChJQUJTKE1EKS5H VC40KSAuT1IuKCAgTUQuRVEuIDAgICkgLk9SLgogICAgIDEgICgoSUFCUyhNRCkuRVEuMSku QU5ELiggVkFMLkxULlpFUk8pKS5PUi4KICAgICAyICAoKElBQlMoTUQpLkVRLjMpLkFORC4o IFZBTC5MVC5aRVJPKSkuT1IuCiAgICAgMyAgKChJQUJTKE1EKS5FUS40KS5BTkQuKChWQUwu TFQuWkVSTykgLk9SLihWQUwuR1QuTi1NKSkpKSBUSEVOCiAgICAgICAgIElFUiA9IDMgICAg ICAKICAgICAgICAgUkVUVVJOCiAgICAgIEVORElGCkMqKiogIENoZWNrIG9uIE0gYW5kIE4K ICAgICAgSUYgKE1ELkdULjApIFRIRU4KICAgICAgICAgTTIgID0gMiAqIE0KICAgICAgICAg Tk0xID0gTiAtIDEKICAgICAgRUxTRQogICAgICAgICBJRiAoKE0yLk5FLjIqTSkuT1IuKE5N MS5ORS5OLTEpKSBUSEVOCiAgICAgICAgICAgIElFUiA9IDMgICAgICAKICAgICAgICAgICAg UkVUVVJOCiAgICAgICAgIEVORElGCiAgICAgIEVORElGCiAgICAgIElGICgoTS5MRS4wKS5P Ui4oTi5MVC5NMikpIFRIRU4KICAgICAgICAgSUVSID0gMSAgICAgIAogICAgICAgICBSRVRV Uk4KICAgICAgRU5ESUYKQyoqKiAgQ2hlY2sgb24ga25vdCBzZXF1ZW5jZSBhbmQgd2VpZ2h0 cwogICAgICBJRiAoV1goMSkuTEUuWkVSTykgSUVSID0gMgogICAgICBETyAxMCBJPTIsTgog ICAgICAgICBJRiAoKFdYKEkpLkxFLlpFUk8pLk9SLihYKEktMSkuR0UuWChJKSkpIElFUiA9 IDIKICAgICAgICAgSUYgKElFUi5ORS4wKSBSRVRVUk4KICAgMTAgQ09OVElOVUUKICAgICAg RE8gMTUgSj0xLEsKICAgICAgICAgSUYgKFdZKEopLkxFLlpFUk8pIElFUiA9IDIKICAgICAg ICAgSUYgKElFUi5ORS4wKSBSRVRVUk4KICAgMTUgQ09OVElOVUUKQwpDKioqICBXb3JrIGFy cmF5IHBhcmFtZXRlcnMgKGFkZHJlc3MgaW5mb3JtYXRpb24gZm9yIGNvdmFyaWFuY2UgCkMq KiogIHByb3BhZ2F0aW9uIGJ5IG1lYW5zIG9mIHRoZSBtYXRyaWNlcyBTVEFULCBCLCBhbmQg V0UpLiBOQjoKQyoqKiAgQldFIGNhbm5vdCBiZSB1c2VkIHNpbmNlIGl0IGlzIG1vZGlmaWVk IGJ5IGZ1bmN0aW9uIFRSSU5WLgpDCiAgICAgIE5NMlAxID0gTiooTTIrMSkKICAgICAgTk0y TTEgPSBOKihNMi0xKQpDICAgICBJU1RBVCA9IDEgICAgICAgICAgICAKQyAgICAgSUJXRSAg PSBJU1RBVCArIDYgICAgICAKICAgICAgSUIgICAgPSBJQldFICArIE5NMlAxICAgICAgCiAg ICAgIElXRSAgID0gSUIgICAgKyBOTTJNMSAgICAgIApDICAgICBJV0sgICA9IElXRSAgICsg Tk0yUDEgICAgICAKQwpDKioqICBDb21wdXRlIHRoZSBkZXNpZ24gbWF0cmljZXMgQiBhbmQg V0UsIHRoZSByYXRpbwpDKioqICBvZiB0aGVpciBMMS1ub3JtcywgYW5kIGNoZWNrIGZvciBp dGVyYXRpdmUgbW9kZS4KQwogICAgICBJRiAoTUQuR1QuMCkgVEhFTgogICAgICAgICBDQUxM IEJBU0lTICggTSwgTiwgWCwgV0soSUIpLCBSMSwgV0soSUJXRSkgKQogICAgICAgICBDQUxM IFBSRVAgICggTSwgTiwgWCwgV1gsIFdLKElXRSksIEVMICkKICAgICAgICAgRUwgPSBFTCAv IFIxICAgICAgCiAgICAgIEVORElGCiAgICAgIElGIChJQUJTKE1EKS5ORS4xKSBHTyBUTyAy MApDKioqICAgICBQcmlvciBnaXZlbiB2YWx1ZSBmb3IgcAogICAgICAgICBSMSA9IFZBTAog ICAgICAgICBHTyBUTyAxMDAKQwpDKioqICBJdGVyYXRlIHRvIG1pbmltaXplIHRoZSBHQ1Yg ZnVuY3Rpb24gKHxNRHw9MiksCkMqKiogIHRoZSBNU0UgZnVuY3Rpb24gKHxNRHw9MyksIG9y IHRvIG9idGFpbiB0aGUgcHJpb3IKQyoqKiAgZ2l2ZW4gbnVtYmVyIG9mIGRlZ3JlZXMgb2Yg ZnJlZWRvbSAofE1EfD00KS4KQwogICAyMCBJRiAoTUQuTFQuLTEpIFRIRU4KICAgICAgICAg UjEgPSBXSyg0KSAgICAgIAogICAgICBFTFNFCiAgICAgICAgIFIxID0gT05FIC8gRUwgICAg ICAKICAgICAgRU5ESUYgICAgICAKICAgICAgUjIgPSBSMSAqIFJBVElPCiAgICAgIEdGMiA9 IFNQTEMoTSxOLEssWSxOWSxXWCxXWSxNRCxWQUwsUjIsRVBTLEMsTkMsCiAgICAgMSAgICAg ICAgICBXSyxXSyhJQiksV0soSVdFKSxFTCxXSyhJQldFKSkKICAgNDAgR0YxID0gU1BMQyhN LE4sSyxZLE5ZLFdYLFdZLE1ELFZBTCxSMSxFUFMsQyxOQywKICAgICAxICAgICAgICAgIFdL LFdLKElCKSxXSyhJV0UpLEVMLFdLKElCV0UpKQogICAgICBJRiAoR0YxLkdULkdGMikgR08g VE8gNTAKICAgICAgICAgSUYgKFdLKDQpLkxFLlpFUk8pIEdPIFRPIDEwMCAgICAgICAgICAg IAogICAgICAgICBSMiAgPSBSMQogICAgICAgICBHRjIgPSBHRjEKICAgICAgICAgUjEgID0g UjEgLyBSQVRJTwogICAgICAgICBHTyBUTyA0MAogICA1MCBSMyA9IFIyICogUkFUSU8KICAg NjAgR0YzID0gU1BMQyhNLE4sSyxZLE5ZLFdYLFdZLE1ELFZBTCxSMyxFUFMsQyxOQywKICAg ICAxICAgICAgICAgIFdLLFdLKElCKSxXSyhJV0UpLEVMLFdLKElCV0UpKQogICAgICBJRiAo R0YzLkdULkdGMikgR08gVE8gNzAKICAgICAgICAgSUYgKFdLKDQpLkdFLkVQU0lOVikgR08g VE8gMTAwICAgICAgCiAgICAgICAgIFIyICA9IFIzICAgICAgCiAgICAgICAgIEdGMiA9IEdG MwogICAgICAgICBSMyAgPSBSMyAqIFJBVElPCiAgICAgICAgIEdPIFRPIDYwCiAgIDcwIFIy ICA9IFIzCiAgICAgIEdGMiA9IEdGMwogICAgICBBTFBIQSA9IChSMi1SMSkgLyBUQVUKICAg ICAgUjQgPSBSMSArIEFMUEhBCiAgICAgIFIzID0gUjIgLSBBTFBIQQogICAgICBHRjMgPSBT UExDKE0sTixLLFksTlksV1gsV1ksTUQsVkFMLFIzLEVQUyxDLE5DLAogICAgIDEgICAgICAg ICAgV0ssV0soSUIpLFdLKElXRSksRUwsV0soSUJXRSkpCiAgICAgIEdGNCA9IFNQTEMoTSxO LEssWSxOWSxXWCxXWSxNRCxWQUwsUjQsRVBTLEMsTkMsCiAgICAgMSAgICAgICAgICBXSyxX SyhJQiksV0soSVdFKSxFTCxXSyhJQldFKSkKICAgODAgSUYgKEdGMy5MRS5HRjQpIFRIRU4K ICAgICAgICAgUjIgID0gUjQKICAgICAgICAgR0YyID0gR0Y0CiAgICAgICAgIEVSUiA9IChS Mi1SMSkgLyAoUjErUjIpCiAgICAgICAgIElGICgoRVJSKkVSUitPTkUuRVEuT05FKS5PUi4o RVJSLkxFLlRPTCkpIEdPIFRPIDkwCiAgICAgICAgIFI0ICA9IFIzCiAgICAgICAgIEdGNCA9 IEdGMwogICAgICAgICBBTFBIQSA9IEFMUEhBIC8gVEFVCiAgICAgICAgIFIzICA9IFIyIC0g QUxQSEEKICAgICAgICAgR0YzID0gU1BMQyhNLE4sSyxZLE5ZLFdYLFdZLE1ELFZBTCxSMyxF UFMsQyxOQywKICAgICAxICAgICAgICAgICAgIFdLLFdLKElCKSxXSyhJV0UpLEVMLFdLKElC V0UpKQogICAgICBFTFNFCiAgICAgICAgIFIxICA9IFIzCiAgICAgICAgIEdGMSA9IEdGMwog ICAgICAgICBFUlIgPSAoUjItUjEpIC8gKFIxK1IyKQogICAgICAgICBJRiAoKEVSUipFUlIr T05FLkVRLk9ORSkuT1IuKEVSUi5MRS5UT0wpKSBHTyBUTyA5MAogICAgICAgICBSMyAgPSBS NAogICAgICAgICBHRjMgPSBHRjQKICAgICAgICAgQUxQSEEgPSBBTFBIQSAvIFRBVQogICAg ICAgICBSNCA9IFIxICsgQUxQSEEKICAgICAgICAgR0Y0ID0gU1BMQyhNLE4sSyxZLE5ZLFdY LFdZLE1ELFZBTCxSNCxFUFMsQyxOQywKICAgICAxICAgICAgICAgICAgIFdLLFdLKElCKSxX SyhJV0UpLEVMLFdLKElCV0UpKQogICAgICBFTkRJRgogICAgICBHTyBUTyA4MAogICA5MCBS MSA9IEhBTEYgKiAoUjErUjIpCkMKQyoqKiAgQ2FsY3VsYXRlIGZpbmFsIHNwbGluZSBjb2Vm ZmljaWVudHMKQwogIDEwMCBHRjEgPSBTUExDKE0sTixLLFksTlksV1gsV1ksTUQsVkFMLFIx LEVQUyxDLE5DLAogICAgIDEgICAgICAgICAgV0ssV0soSUIpLFdLKElXRSksRUwsV0soSUJX RSkpCkMKQyoqKiAgUmVhZHkKQwogICAgICBSRVRVUk4KICAgICAgRU5ECkMgQkFTSVMuRk9S LCAxOTg1LTA2LTAzCkMKQyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkMKQyBTVUJST1VUSU5FIEJBU0lT IChSRUFMKjgpCkMKQyBQdXJwb3NlOgpDICoqKioqKioKQwpDICAgICAgIFN1YnJvdXRpbmUg dG8gYXNzZXNzIGEgQi1zcGxpbmUgdGFibGVhdSwgc3RvcmVkIGluIHZlY3Rvcml6ZWQKQyAg ICAgICBmb3JtLgpDCkMgQ2FsbGluZyBjb252ZW50aW9uOgpDICoqKioqKioqKioqKioqKioq KgpDCkMgICAgICAgQ0FMTCBCQVNJUyAoIE0sIE4sIFgsIEIsIEJMLCBRICkKQwpDIE1lYW5p bmcgb2YgcGFyYW1ldGVyczoKQyAqKioqKioqKioqKioqKioqKioqKioKQwpDICAgICAgIE0g ICAgICAgICAgICAgICAoIEkgKSAgIEhhbGYgb3JkZXIgb2YgdGhlIHNwbGluZSAoZGVncmVl IDIqTS0xKSwKQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNID4gMC4KQyAgICAg ICBOICAgICAgICAgICAgICAgKCBJICkgICBOdW1iZXIgb2Yga25vdHMsIE4gPj0gMipNLgpD ICAgICAgIFgoTikgICAgICAgICAgICAoIEkgKSAgIEtub3Qgc2VxdWVuY2UsIFgoSS0xKSA8 IFgoSSksIEk9MixOLgpDICAgICAgIEIoMS1NOk0tMSxOKSAgICAoIE8gKSAgIE91dHB1dCB0 YWJsZWF1LiBFbGVtZW50IEIoSixJKSBvZiBhcnJheQpDICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEIgY29ycmVzcG9uZHMgd2l0aCBlbGVtZW50IGIoaSxpK2opIG9mCkMgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHRhYmxlYXUgbWF0cml4IEIuCkMgICAg ICAgQkwgICAgICAgICAgICAgICggTyApICAgTDEtbm9ybSBvZiBCLgpDICAgICAgIFEoMS1N Ok0pICAgICAgICAoIFcgKSAgIEludGVybmFsIHdvcmsgYXJyYXkuCkMKQyBSZW1hcms6CkMg KioqKioqCkMKQyAgICAgICBUaGlzIHN1YnJvdXRpbmUgaXMgYW4gYWRhcHRhdGlvbiBvZiBz dWJyb3V0aW5lIEJBU0lTIGZyb20gdGhlCkMgICAgICAgcGFwZXIgYnkgTHljaGUgZXQgYWwu ICgxOTgzKS4gTm8gY2hlY2tpbmcgaXMgcGVyZm9ybWVkIG9uIHRoZQpDICAgICAgIHZhbGlk aXR5IG9mIE0gYW5kIE4uIElmIHRoZSBrbm90IHNlcXVlbmNlIGlzIG5vdCBzdHJpY3RseSBp bi0KQyAgICAgICBjcmVhc2luZywgZGl2aXNpb24gYnkgemVybyBtYXkgb2NjdXIuCkMKQyBS ZWZlcmVuY2U6CkMgKioqKioqKioqCkMKQyAgICAgICBULiBMeWNoZSwgTC5MLiBTY2h1bWFr ZXIsICYgSy4gU2VwZWhybm9vcmksIEZvcnRyYW4gc3Vicm91dGluZXMKQyAgICAgICBmb3Ig Y29tcHV0aW5nIHNtb290aGluZyBhbmQgaW50ZXJwb2xhdGluZyBuYXR1cmFsIHNwbGluZXMu CkMgICAgICAgQWR2YW5jZXMgaW4gRW5naW5lZXJpbmcgU29mdHdhcmUgNSgxOTgzKTEsIHBw LiAyLTUuCkMKQyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqCkMKICAgICAgU1VCUk9VVElORSBCQVNJUyAo IE0sIE4sIFgsIEIsIEJMLCBRICkKQwogICAgICBJTVBMSUNJVCBSRUFMKjggKEEtSCxPLVop CiAgICAgIFBBUkFNRVRFUiAoIFpFUk89MEQwLCBPTkU9MUQwICkKICAgICAgRElNRU5TSU9O IFgoTiksIEIoMS1NOk0tMSxOKSwgUSgxLU06TSkKQwogICAgICBJRiAoTS5FUS4xKSBUSEVO CkMqKiogICAgICAgICBMaW5lYXIgc3BsaW5lCiAgICAgICAgIERPIDMgST0xLE4KICAgICAg ICAgICAgQigwLEkpID0gT05FCiAgICAzICAgIENPTlRJTlVFCiAgICAgICAgIEJMID0gT05F CiAgICAgICAgIFJFVFVSTgogICAgICBFTkRJRgpDCkMqKiogIEdlbmVyYWwgc3BsaW5lcwpD CiAgICAgIE1NMSA9IE0gLSAxCiAgICAgIE1QMSA9IE0gKyAxCiAgICAgIE0yICA9IDIgKiBN CiAgICAgIERPIDE1IEw9MSxOCkMqKiogICAgIDFzdCByb3cKICAgICAgICAgRE8gNSBKPS1N TTEsTQogICAgICAgICAgICBRKEopID0gWkVSTwogICAgNSAgICBDT05USU5VRQogICAgICAg ICBRKE1NMSkgPSBPTkUKICAgICAgICAgSUYgKChMLk5FLjEpLkFORC4oTC5ORS5OKSkKICAg ICAxICAgICAgUShNTTEpID0gT05FIC8gKCBYKEwrMSkgLSBYKEwtMSkgKQpDKioqICAgICBT dWNjZXNzaXZlIHJvd3MKICAgICAgICAgQVJHID0gWChMKQogICAgICAgICBETyAxMyBJPTMs TTIKICAgICAgICAgICAgSVIgPSBNUDEgLSBJCiAgICAgICAgICAgIFYgID0gUShJUikKICAg ICAgICAgICAgSUYgKEwuTFQuSSkgVEhFTgpDKioqICAgICAgICAgICAgICAgTGVmdC1oYW5k IEItc3BsaW5lcwogICAgICAgICAgICAgICBETyA2IEo9TCsxLEkKICAgICAgICAgICAgICAg ICAgVSAgICAgPSBWCiAgICAgICAgICAgICAgICAgIFYgICAgID0gUShJUisxKQogICAgICAg ICAgICAgICAgICBRKElSKSA9IFUgKyAoWChKKS1BUkcpKlYKICAgICAgICAgICAgICAgICAg SVIgICAgPSBJUiArIDEKICAgIDYgICAgICAgICAgQ09OVElOVUUKICAgICAgICAgICAgRU5E SUYKICAgICAgICAgICAgSjEgPSBNQVgwKEwtSSsxLDEpCiAgICAgICAgICAgIEoyID0gTUlO MChMLTEsTi1JKQogICAgICAgICAgICBJRiAoSjEuTEUuSjIpIFRIRU4KQyoqKiAgICAgICAg ICAgICAgIE9yZGluYXJ5IEItc3BsaW5lcwogICAgICAgICAgICAgICBJRiAoSS5MVC5NMikg VEhFTgogICAgICAgICAgICAgICAgICBETyA4IEo9SjEsSjIKICAgICAgICAgICAgICAgICAg ICAgWSAgICAgPSBYKEkrSikKICAgICAgICAgICAgICAgICAgICAgVSAgICAgPSBWCiAgICAg ICAgICAgICAgICAgICAgIFYgICAgID0gUShJUisxKQogICAgICAgICAgICAgICAgICAgICBR KElSKSA9IFUgKyAoVi1VKSooWS1BUkcpLyhZLVgoSikpCiAgICAgICAgICAgICAgICAgICAg IElSID0gSVIgKyAxCiAgICA4ICAgICAgICAgICAgIENPTlRJTlVFCiAgICAgICAgICAgICAg IEVMU0UKICAgICAgICAgICAgICAgICAgRE8gMTAgSj1KMSxKMgogICAgICAgICAgICAgICAg ICAgICBVICAgICA9IFYKICAgICAgICAgICAgICAgICAgICAgViAgICAgPSBRKElSKzEpCiAg ICAgICAgICAgICAgICAgICAgIFEoSVIpID0gKEFSRy1YKEopKSpVICsgKFgoSStKKS1BUkcp KlYKICAgICAgICAgICAgICAgICAgICAgSVIgICAgPSBJUiArIDEKICAgMTAgICAgICAgICAg ICAgQ09OVElOVUUKICAgICAgICAgICAgICAgRU5ESUYKICAgICAgICAgICAgRU5ESUYKICAg ICAgICAgICAgTk1JUDEgPSBOIC0gSSArIDEKICAgICAgICAgICAgSUYgKE5NSVAxLkxULkwp IFRIRU4KQyoqKiAgICAgICAgICAgUmlnaHQtaGFuZCBCLXNwbGluZXMKICAgICAgICAgICAg ICAgRE8gMTIgSj1OTUlQMSxMLTEKICAgICAgICAgICAgICAgICAgVSAgICAgPSBWCiAgICAg ICAgICAgICAgICAgIFYgICAgID0gUShJUisxKQogICAgICAgICAgICAgICAgICBRKElSKSA9 IChBUkctWChKKSkqVSArIFYKICAgICAgICAgICAgICAgICAgSVIgICAgPSBJUiArIDEKICAg MTIgICAgICAgICAgQ09OVElOVUUKICAgICAgICAgICAgRU5ESUYKICAgMTMgICAgQ09OVElO VUUKICAgICAgICAgRE8gMTQgSj0tTU0xLE1NMQogICAgICAgICAgICBCKEosTCkgPSBRKEop CiAgIDE0ICAgIENPTlRJTlVFCiAgIDE1IENPTlRJTlVFCkMKQyoqKiAgWmVybyB1bnVzZWQg cGFydHMgb2YgQgpDCiAgICAgIERPIDE3IEk9MSxNTTEKICAgICAgICAgRE8gMTYgSz1JLE1N MQogICAgICAgICAgICBCKC1LLCAgICBJKSA9IFpFUk8KICAgICAgICAgICAgQiggSyxOKzEt SSkgPSBaRVJPCiAgIDE2ICAgIENPTlRJTlVFCiAgIDE3IENPTlRJTlVFCkMKQyoqKiAgQXNz ZXNzIEwxLW5vcm0gb2YgQgpDCiAgICAgIEJMID0gMEQwCiAgICAgIERPIDE5IEk9MSxOCiAg ICAgICAgIERPIDE4IEs9LU1NMSxNTTEKICAgICAgICAgICAgQkwgPSBCTCArIEFCUyhCKEss SSkpCiAgIDE4ICAgIENPTlRJTlVFCiAgIDE5IENPTlRJTlVFCiAgICAgIEJMID0gQkwgLyBO CkMKQyoqKiAgUmVhZHkKQwogICAgICBSRVRVUk4KICAgICAgRU5ECkMgUFJFUC5GT1IsIDE5 ODUtMDctMDQKQwpDKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQwpDIFNVQlJPVVRJTkUgUFJFUCAoUkVB TCo4KQpDCkMgUHVycG9zZToKQyAqKioqKioqCkMKQyAgICAgICBUbyBjb21wdXRlIHRoZSBt YXRyaXggV0Ugb2Ygd2VpZ2h0ZWQgZGl2aWRlZCBkaWZmZXJlbmNlIGNvZWZmaS0KQyAgICAg ICBjaWVudHMgbmVlZGVkIHRvIHNldCB1cCBhIGxpbmVhciBzeXN0ZW0gb2YgZXF1YXRpb25z IGZvciBzb2wtCkMgICAgICAgdmluZyBCLXNwbGluZSBzbW9vdGhpbmcgcHJvYmxlbXMsIGFu ZCBpdHMgTDEtbm9ybSBFTC4gVGhlIG1hdHJpeApDICAgICAgIFdFIGlzIHN0b3JlZCBpbiB2 ZWN0b3JpemVkIGZvcm0uCkMKQyBDYWxsaW5nIGNvbnZlbnRpb246CkMgKioqKioqKioqKioq KioqKioqCkMKQyAgICAgICBDQUxMIFBSRVAgKCBNLCBOLCBYLCBXLCBXRSwgRUwgKQpDCkMg TWVhbmluZyBvZiBwYXJhbWV0ZXJzOgpDICoqKioqKioqKioqKioqKioqKioqKgpDCkMgICAg ICAgTSAgICAgICAgICAgICAgICggSSApICAgSGFsZiBvcmRlciBvZiB0aGUgQi1zcGxpbmUg KGRlZ3JlZQpDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIqTS0xKSwgd2l0aCBN ID4gMC4KQyAgICAgICBOICAgICAgICAgICAgICAgKCBJICkgICBOdW1iZXIgb2Yga25vdHMs IHdpdGggTiA+PSAyKk0uCkMgICAgICAgWChOKSAgICAgICAgICAgICggSSApICAgU3RyaWN0 bHkgaW5jcmVhc2luZyBrbm90IGFycmF5LCB3aXRoCkMgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgWChJLTEpIDwgWChJKSwgST0yLE4uCkMgICAgICAgVyhOKSAgICAgICAgICAg ICggSSApICAgV2VpZ2h0IG1hdHJpeCAoZGlhZ29uYWwpLCB3aXRoCkMgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVyhJKS5ndC4wLjAsIEk9MSxOLgpDICAgICAgIFdFKC1NOk0s TikgICAgICAoIE8gKSAgIEFycmF5IGNvbnRhaW5pbmcgdGhlIHdlaWdodGVkIGRpdmlkZWQK QyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlIHRlcm1zIGluIHZl Y3Rvcml6ZWQgZm9ybWF0LgpDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1l bnQgV0UoSixJKSBvZiBhcnJheSBFIGNvcnJlc3BvbmRzCkMgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgd2l0aCBlbGVtZW50IGUoaSxpK2opIG9mIHRoZSBtYXRyaXgKQyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBXKiotMSAqIEUuCkMgICAgICAgRUwgICAgICAg ICAgICAgICggTyApICAgTDEtbm9ybSBvZiBXRS4KQwpDIFJlbWFyazoKQyAqKioqKioKQwpD ICAgICAgIFRoaXMgc3Vicm91dGluZSBpcyBhbiBhZGFwdGF0aW9uIG9mIHN1YnJvdXRpbmUg UFJFUCBmcm9tIHRoZSBwYXBlcgpDICAgICAgIGJ5IEx5Y2hlIGV0IGFsLiAoMTk4MykuIE5v IGNoZWNraW5nIGlzIHBlcmZvcm1lZCBvbiB0aGUgdmFsaWRpdHkKQyAgICAgICBvZiBNIGFu ZCBOLiBEaXZpc2lvbiBieSB6ZXJvIG1heSBvY2N1ciBpZiB0aGUga25vdCBzZXF1ZW5jZSBp cwpDICAgICAgIG5vdCBzdHJpY3RseSBpbmNyZWFzaW5nLgpDCkMgUmVmZXJlbmNlOgpDICoq KioqKioqKgpDCkMgICAgICAgVC4gTHljaGUsIEwuTC4gU2NodW1ha2VyLCAmIEsuIFNlcGVo cm5vb3JpLCBGb3J0cmFuIHN1YnJvdXRpbmVzCkMgICAgICAgZm9yIGNvbXB1dGluZyBzbW9v dGhpbmcgYW5kIGludGVycG9sYXRpbmcgbmF0dXJhbCBzcGxpbmVzLgpDICAgICAgIEFkdmFu Y2VzIGluIEVuZ2luZWVyaW5nIFNvZnR3YXJlIDUoMTk4MykxLCBwcC4gMi01LgpDCkMqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgpDCiAgICAgIFNVQlJPVVRJTkUgUFJFUCAoIE0sIE4sIFgsIFcsIFdF LCBFTCApCkMKICAgICAgSU1QTElDSVQgUkVBTCo4IChBLUgsTy1aKQogICAgICBQQVJBTUVU RVIgKCBaRVJPPTBEMCwgT05FPTFEMCApCiAgICAgIERJTUVOU0lPTiBYKE4pLCBXKE4pLCBX RSgoMipNKzEpKk4pICAgICAgCkMKQyoqKiAgQ2FsY3VsYXRlIHRoZSBmYWN0b3IgRjEKQwog ICAgICBNMiAgID0gMiAqIE0KICAgICAgTVAxICA9IE0gKyAxCiAgICAgIE0yTTEgPSBNMiAt IDEKICAgICAgTTJQMSA9IE0yICsgMQogICAgICBOTSAgID0gTiAtIE0KICAgICAgRjEgICA9 IC1PTkUKICAgICAgSUYgKE0uTkUuMSkgVEhFTgogICAgICAgICBETyA1IEk9MixNCiAgICAg ICAgICAgIEYxID0gLUYxICogSQogICAgNSAgICBDT05USU5VRQogICAgICAgICBETyA2IEk9 TVAxLE0yTTEKICAgICAgICAgICAgRjEgPSBGMSAqIEkKICAgIDYgICAgQ09OVElOVUUKICAg ICAgRU5EIElGCkMKQyoqKiAgQ29sdW1ud2lzZSBldmFsdWF0aW9uIG9mIHRoZSB1bndlaWdo dGVkIGRlc2lnbiBtYXRyaXggRQpDCiAgICAgIEkxID0gMQogICAgICBJMiA9IE0KICAgICAg Sk0gPSBNUDEKICAgICAgRE8gMTcgSj0xLE4KICAgICAgICAgSU5DID0gTTJQMQogICAgICAg ICBJRiAoSi5HVC5OTSkgVEhFTgogICAgICAgICAgICBGMSA9IC1GMQogICAgICAgICAgICBG ICA9ICBGMQogICAgICAgICBFTFNFCiAgICAgICAgICAgIElGIChKLkxULk1QMSkgVEhFTgog ICAgICAgICAgICAgICAgSU5DID0gMQogICAgICAgICAgICAgICAgRiAgID0gRjEKICAgICAg ICAgICAgRUxTRQogICAgICAgICAgICAgICAgRiAgID0gRjEgKiAoWChKK00pLVgoSi1NKSkK ICAgICAgICAgICAgRU5EIElGCiAgICAgICAgIEVORCBJRgogICAgICAgICBJRiAoIEouR1Qu TVAxKSBJMSA9IEkxICsgMQogICAgICAgICBJRiAoSTIuTFQuICBOKSBJMiA9IEkyICsgMQog ICAgICAgICBKSiA9IEpNCkMqKiogICAgIExvb3AgZm9yIGRpdmlkZWQgZGlmZmVyZW5jZSBj b2VmZmljaWVudHMKICAgICAgICAgRkYgPSBGCiAgICAgICAgIFkgPSBYKEkxKQogICAgICAg ICBJMVAxID0gSTEgKyAxCiAgICAgICAgIERPIDExIEk9STFQMSxJMgogICAgICAgICAgICBG RiA9IEZGIC8gKFktWChJKSkKICAgMTEgICAgQ09OVElOVUUKICAgICAgICAgV0UoSkopID0g RkYKICAgICAgICAgSkogPSBKSiArIE0yCiAgICAgICAgIEkyTTEgPSBJMiAtIDEKICAgICAg ICAgSUYgKEkxUDEuTEUuSTJNMSkgVEhFTgogICAgICAgICAgICBETyAxNCBMPUkxUDEsSTJN MQogICAgICAgICAgICAgICBGRiA9IEYKICAgICAgICAgICAgICAgWSAgPSBYKEwpCiAgICAg ICAgICAgICAgIERPIDEyIEk9STEsTC0xCiAgICAgICAgICAgICAgICAgIEZGID0gRkYgLyAo WS1YKEkpKQogICAxMiAgICAgICAgICBDT05USU5VRQogICAgICAgICAgICAgICBETyAxMyBJ PUwrMSxJMgogICAgICAgICAgICAgICAgICBGRiA9IEZGIC8gKFktWChJKSkKICAgMTMgICAg ICAgICAgQ09OVElOVUUKICAgICAgICAgICAgICAgV0UoSkopID0gRkYKICAgICAgICAgICAg ICAgSkogPSBKSiArIE0yCiAgIDE0ICAgICAgIENPTlRJTlVFCiAgICAgICAgIEVORCBJRgog ICAgICAgICBGRiA9IEYKICAgICAgICAgWSA9IFgoSTIpCiAgICAgICAgIERPIDE2IEk9STEs STJNMQogICAgICAgICAgICBGRiA9IEZGIC8gKFktWChJKSkKICAgMTYgICAgQ09OVElOVUUK ICAgICAgICAgV0UoSkopID0gRkYKICAgICAgICAgSkogPSBKSiArIE0yCiAgICAgICAgIEpN ID0gSk0gKyBJTkMKICAgMTcgQ09OVElOVUUKQwpDKioqICBaZXJvIHRoZSB1cHBlciBsZWZ0 IGFuZCBsb3dlciByaWdodCBjb3JuZXJzIG9mIEUKQwogICAgICBLTCA9IDEKICAgICAgTjJN ID0gTTJQMSpOICsgMQogICAgICBETyAxOSBJPTEsTQogICAgICAgICBLVSA9IEtMICsgTSAt IEkKICAgICAgICAgRE8gMTggSz1LTCxLVQogICAgICAgICAgICBXRSggICAgSykgPSBaRVJP CiAgICAgICAgICAgIFdFKE4yTS1LKSA9IFpFUk8KICAgMTggICAgQ09OVElOVUUKICAgICAg ICAgS0wgPSBLTCArIE0yUDEKICAgMTkgQ09OVElOVUUKQwpDKioqICBXZWlnaHRlZCBtYXRy aXggV0UgPSBXKiotMSAqIEUgYW5kIGl0cyBMMS1ub3JtCkMKICAgMjAgSkogPSAwCiAgICAg IEVMID0gMEQwCiAgICAgIERPIDIyIEk9MSxOCiAgICAgICAgIFdJID0gVyhJKQogICAgICAg ICBETyAyMSBKPTEsTTJQMQogICAgICAgICAgICBKSiAgICAgPSBKSiArIDEKICAgICAgICAg ICAgV0UoSkopID0gV0UoSkopIC8gV0kKICAgICAgICAgICAgRUwgICAgID0gRUwgKyBBQlMo V0UoSkopKQogICAyMSAgICBDT05USU5VRQogICAyMiBDT05USU5VRQogICAgICBFTCA9IEVM IC8gTgpDCkMqKiogIFJlYWR5CkMKICAgICAgUkVUVVJOCiAgICAgIEVORApDIFNQTEMuRk9S LCAxOTg1LTEyLTEyCkMKQyBBdXRob3I6IEguSi4gV29sdHJpbmcKQwpDIE9yZ2FuaXphdGlv bnM6IFVuaXZlcnNpdHkgb2YgTmlqbWVnZW4sIGFuZApDICAgICAgICAgICAgICAgIFBoaWxp cHMgTWVkaWNhbCBTeXN0ZW1zLCBFaW5kaG92ZW4KQyAgICAgICAgICAgICAgICAoVGhlIE5l dGhlcmxhbmRzKQpDCkMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpDCkMgRlVOQ1RJT04gU1BMQyAoUkVB TCo4KQpDCkMgUHVycG9zZToKQyAqKioqKioqCkMKQyAgICAgICBUbyBhc3Nlc3MgdGhlIGNv ZWZmaWNpZW50cyBvZiBhIEItc3BsaW5lIGFuZCB2YXJpb3VzIHN0YXRpc3RpY2FsCkMgICAg ICAgcGFyYW1ldGVycywgZm9yIGEgZ2l2ZW4gdmFsdWUgb2YgdGhlIHJlZ3VsYXJpemF0aW9u IHBhcmFtZXRlciBwLgpDCkMgQ2FsbGluZyBjb252ZW50aW9uOgpDICoqKioqKioqKioqKioq KioqKgpDCkMgICAgICAgRlYgPSBTUExDICggTSwgTiwgSywgWSwgTlksIFdYLCBXWSwgTU9E RSwgVkFMLCBQLCBFUFMsIEMsIE5DLApDICAgICAgIDEgICAgICAgICAgIFNUQVQsIEIsIFdF LCBFTCwgQldFKQpDCkMgTWVhbmluZyBvZiBwYXJhbWV0ZXJzOgpDICoqKioqKioqKioqKioq KioqKioqKgpDCkMgICAgICAgU1BMQyAgICAgICAgICAgICggTyApICAgR0NWIGZ1bmN0aW9u IHZhbHVlIGlmIHxNT0RFfC5lcS4yLApDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE1TRSB2YWx1ZSBpZiB8TU9ERXwuZXEuMywgYW5kIGFic29sdXRlCkMgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZSB3aXRoIHRoZSBwcmlvciBnaXZlbiBudW1i ZXIgb2YKQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWdyZWVzIG9mIGZyZWVk b20gaWYgfE1PREV8LmVxLjQuCkMgICAgICAgTSAgICAgICAgICAgICAgICggSSApICAgSGFs ZiBvcmRlciBvZiB0aGUgQi1zcGxpbmUgKGRlZ3JlZSAyKk0tMSksCkMgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgd2l0aCBNID4gMC4KQyAgICAgICBOICAgICAgICAgICAgICAg KCBJICkgICBOdW1iZXIgb2Ygb2JzZXJ2YXRpb25zLCB3aXRoIE4gPj0gMipNLgpDICAgICAg IEsgICAgICAgICAgICAgICAoIEkgKSAgIE51bWJlciBvZiBkYXRhc2V0cywgd2l0aCBLID49 IDEuCkMgICAgICAgWShOWSxLKSAgICAgICAgICggSSApICAgT2JzZXJ2ZWQgbWVhc3VyZW1l bnRzLgpDICAgICAgIE5ZICAgICAgICAgICAgICAoIEkgKSAgIEZpcnN0IGRpbWVuc2lvbiBv ZiBZKE5ZLEspLCB3aXRoIE5ZLmdlLk4uCkMgICAgICAgV1goTikgICAgICAgICAgICggSSAp ICAgV2VpZ2h0IGZhY3RvcnMsIGNvcnJlc3BvbmRpbmcgdG8gdGhlCkMgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcmVsYXRpdmUgaW52ZXJzZSB2YXJpYW5jZSBvZiBlYWNoIG1l YXN1cmUtCkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVudCwgd2l0aCBXWChJ KSA+IDAuMC4KQyAgICAgICBXWShLKSAgICAgICAgICAgKCBJICkgICBXZWlnaHQgZmFjdG9y cywgY29ycmVzcG9uZGluZyB0byB0aGUKQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZWxhdGl2ZSBpbnZlcnNlIHZhcmlhbmNlIG9mIGVhY2ggZGF0YXNldCwKQyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB3aXRoIFdZKEopID4gMC4wLgpDICAgICAgIE1PREUg ICAgICAgICAgICAoIEkgKSAgIE1vZGUgc3dpdGNoLCBhcyBkZXNjcmliZWQgaW4gR0NWU1BM LgpDICAgICAgIFZBTCAgICAgICAgICAgICAoIEkgKSAgIFByaW9yIHZhcmlhbmNlIGlmIHxN T0RFfC5lcS4zLCBhbmQKQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmlvciBu dW1iZXIgb2YgZGVncmVlcyBvZiBmcmVlZG9tIGlmCkMgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfE1PREV8LmVxLjQuIEZvciBvdGhlciB2YWx1ZXMgb2YgTU9ERSwKQyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBWQUwgaXMgbm90IHVzZWQuCkMgICAgICAgUCAg ICAgICAgICAgICAgICggSSApICAgU21vb3RoaW5nIHBhcmFtZXRlciwgd2l0aCBQID49IDAu MC4gSWYKQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQLmVxLjAuMCwgYW4gaW50 ZXJwb2xhdGluZyBzcGxpbmUgaXMKQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj YWxjdWxhdGVkLgpDICAgICAgIEVQUyAgICAgICAgICAgICAoIEkgKSAgIFJlbGF0aXZlIHJv dW5kaW5nIHRvbGVyYW5jZSoxMC4wLiBFUFMgaXMKQyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0aGUgc21hbGxlc3QgcG9zaXRpdmUgbnVtYmVyIHN1Y2ggdGhhdApDICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEVQUy8xMC4wICsgMS4wIC5uZS4gMS4wLgpDICAg ICAgIEMoTkMsSykgICAgICAgICAoIE8gKSAgIENhbGN1bGF0ZWQgc3BsaW5lIGNvZWZmaWNp ZW50IGFycmF5cy4gTkI6CkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGRp bWVuc2lvbnMgb2YgaW4gR0NWU1BMIGFuZCBpbiBTUExERVIKQyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBhcmUgZGlmZmVyZW50CkMgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29sdW1uIG9mIEMoTixLKSBpcyBuZWVkZWQsIGFuZCB0aGUgcHJvcGVyCkMgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uIEMoMSxKKSwgd2l0aCBKPTEuLi5L LCBzaG91bGQgYmUgdXNlZApDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4g Y2FsbGluZyBTUExERVIuCkMgICAgICAgTkMgICAgICAgICAgICAgICggSSApICAgRmlyc3Qg ZGltZW5zaW9uIG9mIEMoTkMsSyksIHdpdGggTkMuZ2UuTi4KQyAgICAgICBTVEFUKDYpICAg ICAgICAgKCBPICkgICBTdGF0aXN0aWNzIGFycmF5LiBTZWUgdGhlIGRlc2NyaXB0aW9uIGlu CkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vicm91dGluZSBHQ1ZTUEwuCkMg ICAgICAgQiAoMS1NOk0tMSxOKSAgICggSSApICAgQi1zcGxpbmUgdGFibGVhdSBhcyBldmFs dWF0ZWQgYnkgc3Vicm91dGluZQpDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJB U0lTLgpDICAgICAgIFdFKCAtTTpNICAsTikgICAoIEkgKSAgIFdlaWdodGVkIEItc3BsaW5l IHRhYmxlYXUgKFcqKi0xICogRSkgYXMKQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBldmFsdWF0ZWQgYnkgc3Vicm91dGluZSBQUkVQLgpDICAgICAgIEVMICAgICAgICAgICAg ICAoIEkgKSAgIEwxLW5vcm0gb2YgdGhlIG1hdHJpeCBXRSBhcyBldmFsdWF0ZWQgYnkKQyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyb3V0aW5lIFBSRVAuCkMgICAgICAg QldFKC1NOk0sTikgICAgICggTyApICAgQ2VudHJhbCAyKk0rMSBiYW5kcyBvZiB0aGUgaW52 ZXJ0ZWQKQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXggKCBCICArICBw ICogVyoqLTEgKiBFICkqKi0xCkMKQyBSZW1hcmtzOgpDICoqKioqKioKQwpDICAgICAgIFRo aXMgc3Vicm91dGluZSBjb21iaW5lcyBlbGVtZW50cyBvZiBzdWJyb3V0aW5lIFNQTEMwIGZy b20gdGhlCkMgICAgICAgcGFwZXIgYnkgTHljaGUgZXQgYWwuICgxOTgzKSwgYW5kIG9mIHN1 YnJvdXRpbmUgU1BGSVQxIGJ5CkMgICAgICAgSHV0Y2hpbnNvbiAoMTk4NSkuCkMKQyBSZWZl cmVuY2VzOgpDICoqKioqKioqKioKQwpDICAgICAgIE0uRi4gSHV0Y2hpbnNvbiAoMTk4NSks IFN1YnJvdXRpbmUgQ1VCR0NWLiBDU0lSTyBkaXZpc2lvbiBvZgpDICAgICAgIE1hdGhlbWF0 aWNzIGFuZCBTdGF0aXN0aWNzLCBQLk8uIEJveCAxOTY1LCBDYW5iZXJyYSwgQUNUIDI2MDEs CkMgICAgICAgQXVzdHJhbGlhLgpDCkMgICAgICAgVC4gTHljaGUsIEwuTC4gU2NodW1ha2Vy LCAmIEsuIFNlcGVocm5vb3JpLCBGb3J0cmFuIHN1YnJvdXRpbmVzCkMgICAgICAgZm9yIGNv bXB1dGluZyBzbW9vdGhpbmcgYW5kIGludGVycG9sYXRpbmcgbmF0dXJhbCBzcGxpbmVzLgpD ICAgICAgIEFkdmFuY2VzIGluIEVuZ2luZWVyaW5nIFNvZnR3YXJlIDUoMTk4MykxLCBwcC4g Mi01LgpDCkMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKgpDCiAgICAgIEZVTkNUSU9OIFNQTEMoIE0sIE4s IEssIFksIE5ZLCBXWCwgV1ksIE1PREUsIFZBTCwgUCwgRVBTLCBDLCBOQywKICAgICAxICAg ICAgICAgICAgICBTVEFULCBCLCBXRSwgRUwsIEJXRSkKQwogICAgICBJTVBMSUNJVCBSRUFM KjggKEEtSCxPLVopCiAgICAgIFBBUkFNRVRFUiAoIFpFUk89MEQwLCBPTkU9MUQwLCBUV089 MkQwICkKICAgICAgRElNRU5TSU9OIFkoTlksSyksIFdYKE4pLCBXWShLKSwgQyhOQyxLKSwg U1RBVCg2KSwKICAgICAxICAgICAgICAgQigxLU06TS0xLE4pLCBXRSgtTTpNLE4pLCBCV0Uo LU06TSxOKQpDCkMqKiogIENoZWNrIG9uIHAtdmFsdWUKQwogICAgICBEUCA9IFAKICAgICAg U1RBVCg0KSA9IFAKICAgICAgUEVMID0gUCAqIEVMCkMqKiogIFBzZXVkby1pbnRlcnBvbGF0 aW9uIGlmIHAgaXMgdG9vIHNtYWxsCiAgICAgIElGIChQRUwuTFQuRVBTKSBUSEVOCiAgICAg ICAgIERQID0gRVBTIC8gRUwKICAgICAgICAgU1RBVCg0KSA9IFpFUk8KICAgICAgRU5ESUYK QyoqKiAgUHNldWRvIGxlYXN0LXNxdWFyZXMgcG9seW5vbWlhbCBpZiBwIGlzIHRvbyBsYXJn ZQogICAgICBJRiAoUEVMKkVQUy5HVC5PTkUpIFRIRU4KICAgICAgICAgRFAgPSBPTkUgLyAo RUwqRVBTKQogICAgICAgICBTVEFUKDQpID0gRFAKICAgICAgRU5ESUYKQwpDKioqICBDYWxj dWxhdGUgIEJXRSAgPSAgQiAgKyAgcCAqIFcqKi0xICogRQpDCiAgICAgIERPIDQwIEk9MSxO CiAgICAgICAgIEtNID0gLU1JTjAoTSxJLTEpCiAgICAgICAgIEtQID0gIE1JTjAoTSxOLUkp CiAgICAgICAgIERPIDMwIEw9S00sS1AKICAgICAgICAgICAgSUYgKElBQlMoTCkuRVEuTSkg VEhFTgogICAgICAgICAgICAgICBCV0UoTCxJKSA9ICAgICAgICAgIERQICogV0UoTCxJKQog ICAgICAgICAgICBFTFNFCiAgICAgICAgICAgICAgIEJXRShMLEkpID0gQihMLEkpICsgRFAg KiBXRShMLEkpCiAgICAgICAgICAgIEVORElGCiAgIDMwICAgIENPTlRJTlVFCiAgIDQwIENP TlRJTlVFCkMKQyoqKiAgU29sdmUgQldFICogQyA9IFksIGFuZCBhc3Nlc3MgVFJBQ0UgWyBC ICogQldFKiotMSBdCkMKICAgICAgQ0FMTCBCQU5ERVQgKCBCV0UsIE0sIE4gKQogICAgICBD QUxMIEJBTlNPTCAoIEJXRSwgWSwgTlksIEMsIE5DLCBNLCBOLCBLICkKICAgICAgU1RBVCgz KSA9IFRSSU5WICggV0UsIEJXRSwgTSwgTiApICogRFAgICAgICAKICAgICAgVFJOID0gU1RB VCgzKSAvIE4KQwpDKioqICBDb21wdXRlIG1lYW4tc3F1YXJlZCB3ZWlnaHRlZCByZXNpZHVh bApDCiAgICAgIEVTTiA9IFpFUk8KICAgICAgRE8gNzAgSj0xLEsKICAgICAgICAgRE8gNjAg ST0xLE4KICAgICAgICAgICAgRFQgPSAtWShJLEopCiAgICAgICAgICAgIEtNID0gLU1JTjAo TS0xLEktMSkKICAgICAgICAgICAgS1AgPSAgTUlOMChNLTEsTi1JKQogICAgICAgICAgICBE TyA1MCBMPUtNLEtQCiAgICAgICAgICAgICAgIERUID0gRFQgKyBCKEwsSSkqQyhJK0wsSikK ICAgNTAgICAgICAgQ09OVElOVUUKICAgICAgICAgICAgRVNOID0gRVNOICsgRFQqRFQqV1go SSkqV1koSikKICAgNjAgICAgQ09OVElOVUUKICAgNzAgQ09OVElOVUUKICAgICAgRVNOID0g RVNOIC8gKE4qSykKQwpDKioqICBDYWxjdWxhdGUgc3RhdGlzdGljcyBhbmQgZnVuY3Rpb24g dmFsdWUKQwogICAgICBTVEFUKDYpID0gRVNOIC8gVFJOICAgICAgICAgICAgIAogICAgICBT VEFUKDEpID0gU1RBVCg2KSAvIFRSTiAgICAgICAgIAogICAgICBTVEFUKDIpID0gRVNOICAg ICAgICAgICAgICAgICAgIApDICAgICBTVEFUKDMpID0gdHJhY2UgW3AqQiAqIEJXRSoqLTFd IApDICAgICBTVEFUKDQpID0gUCAgICAgICAgICAgICAgICAgICAgIAogICAgICBJRiAoSUFC UyhNT0RFKS5ORS4zKSBUSEVOCkMqKiogICAgIFVua25vd24gdmFyaWFuY2U6IEdDVgogICAg ICAgICBTVEFUKDUpID0gU1RBVCg2KSAtIEVTTgogICAgICAgICBJRiAoSUFCUyhNT0RFKS5F US4xKSBTUExDID0gWkVSTwogICAgICAgICBJRiAoSUFCUyhNT0RFKS5FUS4yKSBTUExDID0g U1RBVCgxKQogICAgICAgICBJRiAoSUFCUyhNT0RFKS5FUS40KSBTUExDID0gREFCUyggU1RB VCgzKSAtIFZBTCApCiAgICAgIEVMU0UKQyoqKiAgICAgS25vd24gdmFyaWFuY2U6IGVzdGlt YXRlZCBtZWFuIHNxdWFyZWQgZXJyb3IKICAgICAgICAgU1RBVCg1KSA9IEVTTiAtIFZBTCoo VFdPKlRSTiAtIE9ORSkKICAgICAgICAgU1BMQyA9IFNUQVQoNSkKICAgICAgRU5ESUYKQwog ICAgICBSRVRVUk4KICAgICAgRU5ECkMgQkFOREVULkZPUiwgMTk4NS0wNi0wMwpDCkMqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgpDCkMgU1VCUk9VVElORSBCQU5ERVQgKFJFQUwqOCkKQwpDIFB1cnBv c2U6CkMgKioqKioqKgpDCkMgICAgICAgVGhpcyBzdWJyb3V0aW5lIGNvbXB1dGVzIHRoZSBM VSBkZWNvbXBvc2l0aW9uIG9mIGFuIE4qTiBtYXRyaXgKQyAgICAgICBFLiBJdCBpcyBhc3N1 bWVkIHRoYXQgRSBoYXMgTSBiYW5kcyBhYm92ZSBhbmQgTSBiYW5kcyBiZWxvdyB0aGUKQyAg ICAgICBkaWFnb25hbC4gVGhlIGRlY29tcG9zaXRpb24gaXMgcmV0dXJuZWQgaW4gRS4gSXQg aXMgYXNzdW1lZCB0aGF0CkMgICAgICAgRSBjYW4gYmUgZGVjb21wb3NlZCB3aXRob3V0IHBp dm90aW5nLiBUaGUgbWF0cml4IEUgaXMgc3RvcmVkIGluCkMgICAgICAgdmVjdG9yaXplZCBm b3JtIGluIHRoZSBhcnJheSBFKC1NOk0sTiksIHdoZXJlIGVsZW1lbnQgRShKLEkpIG9mCkMg ICAgICAgdGhlIGFycmF5IEUgY29ycmVzcG9uZHMgd2l0aCBlbGVtZW50IGUoaSxpK2opIG9m IHRoZSBtYXRyaXggRS4KQwpDIENhbGxpbmcgY29udmVudGlvbjoKQyAqKioqKioqKioqKioq KioqKioKQwpDICAgICAgIENBTEwgQkFOREVUICggRSwgTSwgTiApCkMKQyBNZWFuaW5nIG9m IHBhcmFtZXRlcnM6CkMgKioqKioqKioqKioqKioqKioqKioqCkMKQyAgICAgICBFKC1NOk0s TikgICAgICAgKEkvTykgICBNYXRyaXggdG8gYmUgZGVjb21wb3NlZC4KQyAgICAgICBNLCBO ICAgICAgICAgICAgKCBJICkgICBNYXRyaXggZGltZW5zaW9uaW5nIHBhcmFtZXRlcnMsCkMg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTSA+PSAwLCBOID49IDIqTS4KQwpDIFJl bWFyazoKQyAqKioqKioKQwpDICAgICAgIE5vIGNoZWNraW5nIG9uIHRoZSB2YWxpZGl0eSBv ZiB0aGUgaW5wdXQgZGF0YSBpcyBwZXJmb3JtZWQuCkMgICAgICAgSWYgKE0ubGUuMCksIG5v IGFjdGlvbiBpcyB0YWtlbi4KQwpDKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQwogICAgICBTVUJST1VU SU5FIEJBTkRFVCAoIEUsIE0sIE4gKQpDCiAgICAgIElNUExJQ0lUIFJFQUwqOCAoQS1ILE8t WikKICAgICAgRElNRU5TSU9OIEUoLU06TSxOKQpDCiAgICAgIElGIChNLkxFLjApIFJFVFVS TgogICAgICBETyA0MCBJPTEsTgogICAgICAgICBESSA9IEUoMCxJKQogICAgICAgICBNSSA9 IE1JTjAoTSxJLTEpCiAgICAgICAgIElGIChNSS5HRS4xKSBUSEVOCiAgICAgICAgICAgIERP IDEwIEs9MSxNSQogICAgICAgICAgICAgICBESSA9IERJIC0gRSgtSyxJKSpFKEssSS1LKQog ICAxMCAgICAgICBDT05USU5VRQogICAgICAgICAgICBFKDAsSSkgPSBESQogICAgICAgICBF TkRJRgogICAgICAgICBMTSA9IE1JTjAoTSxOLUkpCiAgICAgICAgIElGIChMTS5HRS4xKSBU SEVOCiAgICAgICAgICAgIERPIDMwIEw9MSxMTQogICAgICAgICAgICAgICBETCA9IEUoLUws SStMKQogICAgICAgICAgICAgICBLTSA9IE1JTjAoTS1MLEktMSkKICAgICAgICAgICAgICAg SUYgKEtNLkdFLjEpIFRIRU4KICAgICAgICAgICAgICAgICAgRFUgPSBFKEwsSSkKICAgICAg ICAgICAgICAgICAgRE8gMjAgSz0xLEtNCiAgICAgICAgICAgICAgICAgICAgIERVID0gRFUg LSBFKCAgLUssICBJKSpFKEwrSyxJLUspCiAgICAgICAgICAgICAgICAgICAgIERMID0gREwg LSBFKC1MLUssTCtJKSpFKCAgSyxJLUspCiAgIDIwICAgICAgICAgICAgIENPTlRJTlVFCiAg ICAgICAgICAgICAgICAgIEUoTCxJKSA9IERVCiAgICAgICAgICAgICAgIEVORElGCiAgICAg ICAgICAgICAgIEUoLUwsSStMKSA9IERMIC8gREkKICAgMzAgICAgICAgQ09OVElOVUUKICAg ICAgICAgRU5ESUYKICAgNDAgQ09OVElOVUUKQwpDKioqICBSZWFkeQpDCiAgICAgIFJFVFVS TgogICAgICBFTkQKQyBCQU5TT0wuRk9SLCAxOTg1LTEyLTEyCkMKQyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqCkMKQyBTVUJST1VUSU5FIEJBTlNPTCAoUkVBTCo4KQpDCkMgUHVycG9zZToKQyAqKioq KioqCkMKQyAgICAgICBUaGlzIHN1YnJvdXRpbmUgc29sdmVzIHN5c3RlbXMgb2YgbGluZWFy IGVxdWF0aW9ucyBnaXZlbiBhbiBMVQpDICAgICAgIGRlY29tcG9zaXRpb24gb2YgdGhlIGRl c2lnbiBtYXRyaXguIFN1Y2ggYSBkZWNvbXBvc2l0aW9uIGlzIHByby0KQyAgICAgICB2aWRl ZCBieSBzdWJyb3V0aW5lIEJBTkRFVCwgaW4gdmVjdG9yaXplZCBmb3JtLiBJdCBpcyBhc3N1 bWVkCkMgICAgICAgdGhhdCB0aGUgZGVzaWduIG1hdHJpeCBpcyBub3Qgc2luZ3VsYXIuIApD CkMgQ2FsbGluZyBjb252ZW50aW9uOgpDICoqKioqKioqKioqKioqKioqKgpDCkMgICAgICAg Q0FMTCBCQU5TT0wgKCBFLCBZLCBOWSwgQywgTkMsIE0sIE4sIEsgKQpDCkMgTWVhbmluZyBv ZiBwYXJhbWV0ZXJzOgpDICoqKioqKioqKioqKioqKioqKioqKgpDCkMgICAgICAgRSgtTTpN LE4pICAgICAgICggSSApICAgSW5wdXQgZGVzaWduIG1hdHJpeCwgaW4gTFUtZGVjb21wb3Nl ZCwKQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3JpemVkIGZvcm0uIEVs ZW1lbnQgRShKLEkpIG9mIHRoZQpDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFy cmF5IEUgY29ycmVzcG9uZHMgd2l0aCBlbGVtZW50CkMgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZShpLGkraikgb2YgdGhlIE4qTiBkZXNpZ24gbWF0cml4IEUuCkMgICAgICAg WShOWSxLKSAgICAgICAgICggSSApICAgUmlnaHQgaGFuZCBzaWRlIHZlY3RvcnMuCkMgICAg ICAgQyhOQyxLKSAgICAgICAgICggTyApICAgU29sdXRpb24gdmVjdG9ycy4KQyAgICAgICBO WSwgTkMsIE0sIE4sIEsgKCBJICkgICBEaW1lbnNpb25pbmcgcGFyYW1ldGVycywgd2l0aCBN ID49IDAsCkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTiA+IDIqTSwgYW5kIEsg Pj0gMS4KQwpDIFJlbWFyazoKQyAqKioqKioKQwpDICAgICAgIFRoaXMgc3Vicm91dGluZSBp cyBhbiBhZGFwdGF0aW9uIG9mIHN1YnJvdXRpbmUgQkFOU09MIGZyb20gdGhlCkMgICAgICAg cGFwZXIgYnkgTHljaGUgZXQgYWwuICgxOTgzKS4gTm8gY2hlY2tpbmcgaXMgcGVyZm9ybWVk IG9uIHRoZQpDICAgICAgIHZhbGlkaXR5IG9mIHRoZSBpbnB1dCBwYXJhbWV0ZXJzIGFuZCBk YXRhLiBEaXZpc2lvbiBieSB6ZXJvIG1heQpDICAgICAgIG9jY3VyIGlmIHRoZSBzeXN0ZW0g aXMgc2luZ3VsYXIuCkMKQyBSZWZlcmVuY2U6CkMgKioqKioqKioqCkMKQyAgICAgICBULiBM eWNoZSwgTC5MLiBTY2h1bWFrZXIsICYgSy4gU2VwZWhybm9vcmksIEZvcnRyYW4gc3Vicm91 dGluZXMKQyAgICAgICBmb3IgY29tcHV0aW5nIHNtb290aGluZyBhbmQgaW50ZXJwb2xhdGlu ZyBuYXR1cmFsIHNwbGluZXMuCkMgICAgICAgQWR2YW5jZXMgaW4gRW5naW5lZXJpbmcgU29m dHdhcmUgNSgxOTgzKTEsIHBwLiAyLTUuCkMKQyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkMKICAgICAg U1VCUk9VVElORSBCQU5TT0wgKCBFLCBZLCBOWSwgQywgTkMsIE0sIE4sIEsgKQpDCiAgICAg IElNUExJQ0lUIFJFQUwqOCAoQS1ILE8tWikKICAgICAgRElNRU5TSU9OIEUoLU06TSxOKSwg WShOWSxLKSwgQyhOQyxLKQpDCkMqKiogIENoZWNrIG9uIHNwZWNpYWwgY2FzZXM6IE09MCwg TT0xLCBNPjEKQwogICAgICBOTTEgPSBOIC0gMQogICAgICBJRiAoTS0xKSAxMCw0MCw4MApD CkMqKiogIE0gPSAwOiBEaWFnb25hbCBzeXN0ZW0KQwogICAxMCBETyAzMCBJPTEsTgogICAg ICAgICBETyAyMCBKPTEsSwogICAgICAgICAgICBDKEksSikgPSBZKEksSikgLyBFKDAsSSkK ICAgMjAgICAgQ09OVElOVUUKICAgMzAgQ09OVElOVUUKICAgICAgUkVUVVJOCkMKQyoqKiAg TSA9IDE6IFRyaWRpYWdvbmFsIHN5c3RlbQpDCiAgIDQwIERPIDcwIEo9MSxLCiAgICAgICAg IEMoMSxKKSA9IFkoMSxKKQogICAgICAgICBETyA1MCBJPTIsTiAgICAgICAgICAgIAogICAg ICAgICAgICBDKEksSikgPSAgWShJLEopIC0gRSgtMSxJKSpDKEktMSxKKQogICA1MCAgICAg IENPTlRJTlVFCiAgICAgICAgIEMoTixKKSA9IEMoTixKKSAvIEUoMCxOKQogICAgICAgICBE TyA2MCBJPU5NMSwxLC0xICAgICAgCiAgICAgICAgICAgIEMoSSxKKSA9IChDKEksSikgLSBF KCAxLEkpKkMoSSsxLEopKSAvIEUoMCxJKQogICA2MCAgICBDT05USU5VRQogICA3MCBDT05U SU5VRQogICAgICBSRVRVUk4KQwpDKioqICBNID4gMTogR2VuZXJhbCBzeXN0ZW0KQwogICA4 MCBETyAxMzAgSj0xLEsKICAgICAgICAgQygxLEopID0gWSgxLEopCiAgICAgICAgIERPIDEw MCBJPTIsTiAgICAgICAgICAgIAogICAgICAgICAgICBNSSA9IE1JTjAoTSxJLTEpCiAgICAg ICAgICAgIEQgID0gWShJLEopCiAgICAgICAgICAgIERPIDkwIEw9MSxNSQogICAgICAgICAg ICAgICBEID0gRCAtIEUoLUwsSSkqQyhJLUwsSikKICAgOTAgICAgICAgQ09OVElOVUUKICAg ICAgICAgICAgQyhJLEopID0gRAogIDEwMCAgICBDT05USU5VRQogICAgICAgICBDKE4sSikg PSBDKE4sSikgLyBFKDAsTikKICAgICAgICAgRE8gMTIwIEk9Tk0xLDEsLTEgICAgICAKICAg ICAgICAgICAgTUkgPSBNSU4wKE0sTi1JKQogICAgICAgICAgICBEICA9IEMoSSxKKQogICAg ICAgICAgICBETyAxMTAgTD0xLE1JCiAgICAgICAgICAgICAgIEQgPSBEIC0gRSggTCxJKSpD KEkrTCxKKQogIDExMCAgICAgICBDT05USU5VRQogICAgICAgICAgICBDKEksSikgPSBEIC8g RSgwLEkpCiAgMTIwICAgIENPTlRJTlVFCiAgMTMwIENPTlRJTlVFCiAgICAgIFJFVFVSTgpD CiAgICAgIEVORApDIFRSSU5WLkZPUiwgMTk4NS0wNi0wMwpDCkMqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KgpDCkMgRlVOQ1RJT04gVFJJTlYgKFJFQUwqOCkKQwpDIFB1cnBvc2U6CkMgKioqKioqKgpD CkMgICAgICAgVG8gY2FsY3VsYXRlIFRSQUNFIFsgQiAqIEUqKi0xIF0sIHdoZXJlIEIgYW5k IEUgYXJlIE4gKiBOCkMgICAgICAgbWF0cmljZXMgd2l0aCBiYW5kd2lkdGggMipNKzEsIGFu ZCB3aGVyZSBFIGlzIGEgcmVndWxhciBtYXRyaXgKQyAgICAgICBpbiBMVS1kZWNvbXBvc2Vk IGZvcm0uIEIgYW5kIEUgYXJlIHN0b3JlZCBpbiB2ZWN0b3JpemVkIGZvcm0sCkMgICAgICAg Y29tcGF0aWJsZSB3aXRoIHN1YnJvdXRpbmVzIEJBTkRFVCBhbmQgQkFOU09MLgpDCkMgQ2Fs bGluZyBjb252ZW50aW9uOgpDICoqKioqKioqKioqKioqKioqKgpDCkMgICAgICAgVFJBQ0Ug PSBUUklOViAoIEIsIEUsIE0sIE4gKQpDCkMgTWVhbmluZyBvZiBwYXJhbWV0ZXJzOgpDICoq KioqKioqKioqKioqKioqKioqKgpDCkMgICAgICAgQigtTTpNLE4pICAgICAgICggSSApIElu cHV0IGFycmF5IGZvciBtYXRyaXggQi4gRWxlbWVudCBCKEosSSkKQyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29ycmVzcG9uZHMgd2l0aCBlbGVtZW50IGIoaSxpK2opIG9mIHRo ZQpDICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXggQi4KQyAgICAgICBFKC1N Ok0sTikgICAgICAgKEkvTykgSW5wdXQgYXJyYXkgZm9yIG1hdHJpeCBFLiBFbGVtZW50IEUo SixJKQpDICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kcyB3aXRoIGVs ZW1lbnQgZShpLGkraikgb2YgdGhlCkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h dHJpeCBFLiBUaGlzIG1hdHJpeCBpcyBzdG9yZWQgaW4gTFUtCkMgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRlY29tcG9zZWQgZm9ybSwgd2l0aCBMIHVuaXQgbG93ZXIgdHJpLQpD ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmd1bGFyLCBhbmQgVSB1cHBlciB0cmlh bmd1bGFyLiBUaGUgdW5pdApDICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWFnb25h bCBvZiBMIGlzIG5vdCBzdG9yZWQuIFVwb24gcmV0dXJuLApDICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0aGUgYXJyYXkgRSBob2xkcyB0aGUgY2VudHJhbCAyKk0rMSBiYW5kcwpD ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgaW52ZXJzZSBFKiotMSwgaW4g c2ltaWxhciBvcmRlcmluZy4KQyAgICAgICBNLCBOICAgICAgICAgICAgKCBJICkgQXJyYXkg YW5kIG1hdHJpeCBkaW1lbnNpb25pbmcgcGFyYW1ldGVycwpDICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoTS5ndC4wLCBOLmdlLjIqTSsxKS4KQyAgICAgICBUUklOViAgICAgICAg ICAgKCBPICkgT3V0cHV0IGZ1bmN0aW9uIHZhbHVlIFRSQUNFIFsgQiAqIEUqKi0xIF0KQwpD IFJlZmVyZW5jZToKQyAqKioqKioqKioKQwpDICAgICAgIEEuTS4gRXJpc21hbiAmIFcuRi4g VGlubmV5LCBPbiBjb21wdXRpbmcgY2VydGFpbiBlbGVtZW50cyBvZiB0aGUKQyAgICAgICBp bnZlcnNlIG9mIGEgc3BhcnNlIG1hdHJpeC4gQ29tbXVuaWNhdGlvbnMgb2YgdGhlIEFDTSAx OCgxOTc1KSwKQyAgICAgICBuci4gMywgcHAuIDE3Ny0xNzkuCkMKQyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqCkMKICAgICAgUkVBTCo4IEZVTkNUSU9OIFRSSU5WICggQiwgRSwgTSwgTiApCkMKICAg ICAgSU1QTElDSVQgUkVBTCo4IChBLUgsTy1aKQogICAgICBQQVJBTUVURVIgKCBaRVJPPTBE MCwgT05FPTFEMCApCiAgICAgIERJTUVOU0lPTiBCKC1NOk0sTiksIEUoLU06TSxOKQpDCkMq KiogIEFzc2VzcyBjZW50cmFsIDIqTSsxIGJhbmRzIG9mIEUqKi0xIGFuZCBzdG9yZSBpbiBh cnJheSBFCkMKICAgICAgRSgwLE4pID0gT05FIC8gRSgwLE4pICAgICAgCiAgICAgIERPIDQw IEk9Ti0xLDEsLTEKICAgICAgICAgTUkgPSBNSU4wKE0sTi1JKQogICAgICAgICBERCAgPSBP TkUgLyBFKDAsSSkgICAgICAKQyoqKiAgICAgU2F2ZSBJdGggY29sdW1uIG9mIEwgYW5kIEl0 aCByb3cgb2YgVSwgYW5kIG5vcm1hbGl6ZSBVIHJvdwogICAgICAgICBETyAxMCBLPTEsTUkK ICAgICAgICAgICAgRSggSyxOKSA9IEUoIEssICBJKSAqIEREICAgICAgCiAgICAgICAgICAg IEUoLUssMSkgPSBFKC1LLEsrSSkgICAgICAKICAgMTAgICAgQ09OVElOVUUKICAgICAgICAg REQgPSBERCArIERECkMqKiogICAgIEludmVydCBhcm91bmQgSXRoIHBpdm90CiAgICAgICAg IERPIDMwIEo9TUksMSwtMQogICAgICAgICAgICBEVSA9IFpFUk8KICAgICAgICAgICAgREwg PSBaRVJPCiAgICAgICAgICAgIERPIDIwIEs9MSxNSQogICAgICAgICAgICAgICBEVSA9IERV IC0gRSggSyxOKSpFKEotSyxJK0spCiAgICAgICAgICAgICAgIERMID0gREwgLSBFKC1LLDEp KkUoSy1KLEkrSikKICAgMjAgICAgICAgQ09OVElOVUUKICAgICAgICAgICAgRSggSiwgIEkp ID0gRFUKICAgICAgICAgICAgRSgtSixKK0kpID0gREwKICAgICAgICAgICAgREQgPSBERCAt IChFKEosTikqREwgKyBFKC1KLDEpKkRVKQogICAzMCAgICBDT05USU5VRQogICAgICAgICBF KDAsSSkgPSA1RC0xICogREQKICAgNDAgQ09OVElOVUUKQwpDKioqICBBc3Nlc3MgVFJBQ0Ug WyBCICogRSoqLTEgXSBhbmQgY2xlYXIgd29ya2luZyBzdG9yYWdlCkMKICAgICAgREQgPSBa RVJPCiAgICAgIERPIDYwIEk9MSxOCiAgICAgICAgIE1OID0gLU1JTjAoTSxJLTEpCiAgICAg ICAgIE1QID0gIE1JTjAoTSxOLUkpCiAgICAgICAgIERPIDUwIEs9TU4sTVAKICAgICAgICAg ICAgREQgPSBERCArIEIoSyxJKSpFKC1LLEsrSSkKICAgNTAgICAgQ09OVElOVUUKICAgNjAg Q09OVElOVUUKICAgICAgVFJJTlYgPSBERAogICAgICBETyA3MCBLPTEsTQogICAgICAgICBF KCBLLE4pID0gWkVSTwogICAgICAgICBFKC1LLDEpID0gWkVSTwogICA3MCBDT05USU5VRQpD CkMqKiogIFJlYWR5CkMKICAgICAgUkVUVVJOCiAgICAgIEVORApDIFNQTERFUi5GT1IsIDE5 ODUtMDYtMTEKQwpDKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQwpDIEZVTkNUSU9OIFNQTERFUiAoUkVB TCo4KQpDCkMgUHVycG9zZToKQyAqKioqKioqCkMKQyAgICAgICBUbyBwcm9kdWNlIHRoZSB2 YWx1ZSBvZiB0aGUgZnVuY3Rpb24gKElERVIuZXEuMCkgb3Igb2YgdGhlCkMgICAgICAgSURF UnRoIGRlcml2YXRpdmUgKElERVIuZ3QuMCkgb2YgYSAyTS10aCBvcmRlciBCLXNwbGluZSBh dApDICAgICAgIHRoZSBwb2ludCBULiBUaGUgc3BsaW5lIGlzIGRlc2NyaWJlZCBpbiB0ZXJt cyBvZiB0aGUgaGFsZgpDICAgICAgIG9yZGVyIE0sIHRoZSBrbm90IHNlcXVlbmNlIFgoTiks IE4uZ2UuMipNLCBhbmQgdGhlIHNwbGluZQpDICAgICAgIGNvZWZmaWNpZW50cyBDKE4pLgpD CkMgQ2FsbGluZyBjb252ZW50aW9uOgpDICoqKioqKioqKioqKioqKioqKgpDCkMgICAgICAg U1ZJREVSID0gU1BMREVSICggSURFUiwgTSwgTiwgVCwgWCwgQywgTCwgUSApCkMKQyBNZWFu aW5nIG9mIHBhcmFtZXRlcnM6CkMgKioqKioqKioqKioqKioqKioqKioqCkMKQyAgICAgICBT UExERVIgICggTyApICAgRnVuY3Rpb24gb3IgZGVyaXZhdGl2ZSB2YWx1ZS4KQyAgICAgICBJ REVSICAgICggSSApICAgRGVyaXZhdGl2ZSBvcmRlciByZXF1aXJlZCwgd2l0aCAwLmxlLklE RVIKQyAgICAgICAgICAgICAgICAgICAgICAgYW5kIElERVIubGUuMipNLiBJZiBJREVSLmVx LjAsIHRoZSBmdW5jdGlvbgpDICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBpcyByZXR1 cm5lZDsgb3RoZXJ3aXNlLCB0aGUgSURFUi10aApDICAgICAgICAgICAgICAgICAgICAgICBk ZXJpdmF0aXZlIG9mIHRoZSBzcGxpbmUgaXMgcmV0dXJuZWQuCkMgICAgICAgTSAgICAgICAo IEkgKSAgIEhhbGYgb3JkZXIgb2YgdGhlIHNwbGluZSwgd2l0aCBNLmd0LjAuCkMgICAgICAg TiAgICAgICAoIEkgKSAgIE51bWJlciBvZiBrbm90cyBhbmQgc3BsaW5lIGNvZWZmaWNpZW50 cywKQyAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBOLmdlLjIqTS4KQyAgICAgICBUICAg ICAgICggSSApICAgQXJndW1lbnQgYXQgd2hpY2ggdGhlIHNwbGluZSBvciBpdHMgZGVyaS0K QyAgICAgICAgICAgICAgICAgICAgICAgdmF0aXZlIGlzIHRvIGJlIGV2YWx1YXRlZCwgd2l0 aCBYKDEpLmxlLlQKQyAgICAgICAgICAgICAgICAgICAgICAgYW5kIFQubGUuWChOKS4KQyAg ICAgICBYKE4pICAgICggSSApICAgU3RyaWN0bHkgaW5jcmVhc2luZyBrbm90IHNlcXVlbmNl IGFycmF5LApDICAgICAgICAgICAgICAgICAgICAgICBYKEktMSkubHQuWChJKSwgST0yLC4u LixOLgpDICAgICAgIEMoTikgICAgKCBJICkgICBTcGxpbmUgY29lZmZpY2llbnRzLCBhcyBl dmFsdWF0ZWQgYnkKQyAgICAgICAgICAgICAgICAgICAgICAgc3Vicm91dGluZSBHVkNTUEwu CkMgICAgICAgTCAgICAgICAoSS9PKSAgIEwgY29udGFpbnMgYW4gaW50ZWdlciBzdWNoIHRo YXQ6CkMgICAgICAgICAgICAgICAgICAgICAgIFgoTCkubGUuVCBhbmQgVC5sdC5YKEwrMSkg aWYgVCBpcyB3aXRoaW4KQyAgICAgICAgICAgICAgICAgICAgICAgdGhlIHJhbmdlIFgoMSku bGUuVCBhbmQgVC5sdC5YKE4pLiBJZgpDICAgICAgICAgICAgICAgICAgICAgICBULmx0Llgo MSksIEwgaXMgc2V0IHRvIDAsIGFuZCBpZiBULmdlLlgoTiksCkMgICAgICAgICAgICAgICAg ICAgICAgIEwgaXMgc2V0IHRvIE4uIFRoZSBzZWFyY2ggZm9yIEwgaXMgZmFjaWxpLQpDICAg ICAgICAgICAgICAgICAgICAgICB0YXRlZCBpZiBMIGhhcyBhcHByb3hpbWF0ZWx5IHRoZSBy aWdodApDICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBvbiBlbnRyeS4KQyAgICAgICBR KDIqTSkgICggVyApICAgSW50ZXJuYWwgd29yayBhcnJheS4KQwpDIFJlbWFyazoKQyAqKioq KioKQwpDICAgICAgIFRoaXMgc3Vicm91dGluZSBpcyBhbiBhZGFwdGF0aW9uIG9mIHN1YnJv dXRpbmUgU1BMREVSIG9mCkMgICAgICAgdGhlIHBhcGVyIGJ5IEx5Y2hlIGV0IGFsLiAoMTk4 MykuIE5vIGNoZWNraW5nIGlzIHBlcmZvcm1lZApDICAgICAgIG9uIHRoZSB2YWxpZGl0eSBv ZiB0aGUgaW5wdXQgcGFyYW1ldGVycy4KQwpDIFJlZmVyZW5jZToKQyAqKioqKioqKioKQwpD ICAgICAgIFQuIEx5Y2hlLCBMLkwuIFNjaHVtYWtlciwgJiBLLiBTZXBlaHJub29yaSwgRm9y dHJhbiBzdWJyb3V0aW5lcwpDICAgICAgIGZvciBjb21wdXRpbmcgc21vb3RoaW5nIGFuZCBp bnRlcnBvbGF0aW5nIG5hdHVyYWwgc3BsaW5lcy4KQyAgICAgICBBZHZhbmNlcyBpbiBFbmdp bmVlcmluZyBTb2Z0d2FyZSA1KDE5ODMpMSwgcHAuIDItNS4KQwpDKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioKQwogICAgICBSRUFMKjggRlVOQ1RJT04gU1BMREVSICggSURFUiwgTSwgTiwgVCwgWCwg QywgTCwgUSApCkMKICAgICAgSU1QTElDSVQgUkVBTCo4IChBLUgsTy1aKQogICAgICBQQVJB TUVURVIgKCBaRVJPPTBEMCwgT05FPTFEMCApCiAgICAgIERJTUVOU0lPTiBYKE4pLCBDKE4p LCBRKDIqTSkKQwpDKioqICBEZXJpdmF0aXZlcyBvZiBJREVSLmdlLjIqTSBhcmUgYWx3YXkg emVybwpDCiAgICAgIE0yID0gIDIgKiBNCiAgICAgIEsgID0gTTIgLSBJREVSCiAgICAgIElG IChLLkxULjEpIFRIRU4KICAgICAgICAgU1BMREVSID0gWkVSTwogICAgICAgICBSRVRVUk4K ICAgICAgRU5ESUYKQwpDKioqICBTZWFyY2ggZm9yIHRoZSBpbnRlcnZhbCB2YWx1ZSBMCkMK ICAgICAgQ0FMTCBTRUFSQ0ggKCBOLCBYLCBULCBMICkKQwpDKioqICBJbml0aWFsaXplIHBh cmFtZXRlcnMgYW5kIHRoZSAxc3Qgcm93IG9mIHRoZSBCLXNwbGluZQpDKioqICBjb2VmZmlj aWVudHMgdGFibGVhdQpDCiAgICAgIFRUICAgPSBUCiAgICAgIE1QMSAgPSAgTSArIDEKICAg ICAgTlBNICA9ICBOICsgTQogICAgICBNMk0xID0gTTIgLSAxCiAgICAgIEsxICAgPSAgSyAt IDEKICAgICAgTksgICA9ICBOIC0gSwogICAgICBMSyAgID0gIEwgLSBLCiAgICAgIExLMSAg PSBMSyArIDEKICAgICAgTE0gICA9ICBMIC0gTQogICAgICBKTCAgID0gIEwgKyAxCiAgICAg IEpVICAgPSAgTCArIE0yCiAgICAgIElJICAgPSAgTiAtIE0yCiAgICAgIE1MICAgPSAtTAog ICAgICBETyAyIEo9SkwsSlUKICAgICAgICAgSUYgKChKLkdFLk1QMSkuQU5ELihKLkxFLk5Q TSkpIFRIRU4KICAgICAgICAgICAgUShKK01MKSA9IEMoSi1NKQogICAgICAgICBFTFNFCiAg ICAgICAgICAgIFEoSitNTCkgPSBaRVJPCiAgICAgICAgIEVORElGCiAgICAyIENPTlRJTlVF CkMKQyoqKiAgVGhlIGZvbGxvd2luZyBsb29wIGNvbXB1dGVzIGRpZmZlcmVuY2VzIG9mIHRo ZSBCLXNwbGluZQpDKioqICBjb2VmZmljaWVudHMuIElmIHRoZSB2YWx1ZSBvZiB0aGUgc3Bs aW5lIGlzIHJlcXVpcmVkLApDKioqICBkaWZmZXJlbmNpbmcgaXMgbm90IG5lY2Vzc2FyeS4K QwogICAgICBJRiAoSURFUi5HVC4wKSBUSEVOCiAgICAgICAgIEpMID0gSkwgLSBNMgogICAg ICAgICBNTCA9IE1MICsgTTIKICAgICAgICAgRE8gNiBJPTEsSURFUgogICAgICAgICAgICBK TCA9IEpMICsgMQogICAgICAgICAgICBJSSA9IElJICsgMQogICAgICAgICAgICBKMSA9IE1B WDAoMSxKTCkKICAgICAgICAgICAgSjIgPSBNSU4wKEwsSUkpCiAgICAgICAgICAgIE1JID0g TTIgLSBJCiAgICAgICAgICAgIEogID0gSjIgKyAxCiAgICAgICAgICAgIElGIChKMS5MRS5K MikgVEhFTgogICAgICAgICAgICAgICBETyAzIEpJTj1KMSxKMgogICAgICAgICAgICAgICAg ICBKICA9ICBKIC0gMQogICAgICAgICAgICAgICAgICBKTSA9IE1MICsgSgogICAgICAgICAg ICAgICAgICBRKEpNKSA9IChRKEpNKSAtIFEoSk0tMSkpIC8gKFgoSitNSSkgLSBYKEopKQog ICAgMyAgICAgICAgICBDT05USU5VRQogICAgICAgICAgICBFTkRJRgogICAgICAgICAgICBJ RiAoSkwuR0UuMSkgR08gVE8gNgogICAgICAgICAgICAgICBJMSA9ICBJICsgMQogICAgICAg ICAgICAgICBKICA9IE1MICsgMQogICAgICAgICAgICAgICBJRiAoSTEuTEUuTUwpIFRIRU4K ICAgICAgICAgICAgICAgICAgRE8gNSBKSU49STEsTUwKICAgICAgICAgICAgICAgICAgICAg SiAgICA9ICBKIC0gMQogICAgICAgICAgICAgICAgICAgICBRKEopID0gLVEoSi0xKQogICAg NSAgICAgICAgICAgICBDT05USU5VRQogICAgICAgICAgICAgICBFTkRJRgogICAgNiAgICBD T05USU5VRQogICAgICAgICBETyA3IEo9MSxLCiAgICAgICAgICAgIFEoSikgPSBRKEorSURF UikKICAgIDcgICAgQ09OVElOVUUKICAgICAgRU5ESUYKQwpDKioqICBDb21wdXRlIGxvd2Vy IGhhbGYgb2YgdGhlIGV2YWx1YXRpb24gdGFibGVhdQpDCiAgICAgIElGIChLMS5HRS4xKSBU SEVOICAgICAgCiAgICAgICAgIERPIDE0IEk9MSxLMQogICAgICAgICAgICBOS0kgID0gIE5L ICsgSQogICAgICAgICAgICBJUiAgID0gICBLCiAgICAgICAgICAgIEpKICAgPSAgIEwKICAg ICAgICAgICAgS0kgICA9ICAgSyAtIEkKICAgICAgICAgICAgTktJMSA9IE5LSSArIDEKQyoq KiAgICAgICAgUmlnaHQtaGFuZCBCLXNwbGluZXMKICAgICAgICAgICAgSUYgKEwuR0UuTktJ MSkgVEhFTgogICAgICAgICAgICAgICBETyA5IEo9TktJMSxMCiAgICAgICAgICAgICAgICAg IFEoSVIpID0gUShJUi0xKSArIChUVC1YKEpKKSkqUShJUikKICAgICAgICAgICAgICAgICAg SkogICAgPSBKSiAtIDEKICAgICAgICAgICAgICAgICAgSVIgICAgPSBJUiAtIDEKICAgIDkg ICAgICAgICAgQ09OVElOVUUKICAgICAgICAgICAgRU5ESUYKQyoqKiAgICAgICAgTWlkZGxl IEItc3BsaW5lcwogICAgICAgICAgICBMSzFJID0gTEsxICsgSQogICAgICAgICAgICBKMSA9 IE1BWDAoMSxMSzFJKQogICAgICAgICAgICBKMiA9IE1JTjAoTCwgTktJKQogICAgICAgICAg ICBJRiAoSjEuTEUuSjIpIFRIRU4KICAgICAgICAgICAgICAgRE8gMTEgSj1KMSxKMgogICAg ICAgICAgICAgICAgICBYSktJICA9IFgoSkorS0kpCiAgICAgICAgICAgICAgICAgIFogICAg ID0gUShJUikKICAgICAgICAgICAgICAgICAgUShJUikgPSBaICsgKFhKS0ktVFQpKihRKElS LTEpLVopLyhYSktJLVgoSkopKQogICAgICAgICAgICAgICAgICBJUiAgICA9IElSIC0gMQog ICAgICAgICAgICAgICAgICBKSiAgICA9IEpKIC0gMQogICAxMSAgICAgICAgICBDT05USU5V RQogICAgICAgICAgICBFTkRJRgpDKioqICAgICAgICBMZWZ0LWhhbmQgQi1zcGxpbmVzCiAg ICAgICAgICAgIElGIChMSzFJLkxFLjApIFRIRU4KICAgICAgICAgICAgICAgSkogICAgPSBL SQogICAgICAgICAgICAgICBMSzFJMSA9ICAxIC0gTEsxSQogICAgICAgICAgICAgICBETyAx MyBKPTEsTEsxSTEKICAgICAgICAgICAgICAgICAgUShJUikgPSBRKElSKSArIChYKEpKKS1U VCkqUShJUi0xKQogICAgICAgICAgICAgICAgICBKSiAgICA9IEpKIC0gMQogICAgICAgICAg ICAgICAgICBJUiAgICA9IElSIC0gMQogICAxMyAgICAgICAgICBDT05USU5VRQogICAgICAg ICAgICBFTkRJRgogICAxNCAgICBDT05USU5VRQogICAgICBFTkRJRgpDCkMqKiogIENvbXB1 dGUgdGhlIHJldHVybiB2YWx1ZQpDCiAgICAgIFogPSBRKEspCkMqKiogIE11bHRpcGx5IHdp dGggZmFjdG9yaWFsIGlmIElERVIuZ3QuMAogICAgICBJRiAoSURFUi5HVC4wKSBUSEVOCiAg ICAgICAgIERPIDE2IEo9SyxNMk0xCiAgICAgICAgICAgIFogPSBaICogSgogICAxNiAgICBD T05USU5VRQogICAgICBFTkRJRgogICAgICBTUExERVIgPSBaCkMKQyoqKiAgUmVhZHkKQwog ICAgICBSRVRVUk4KICAgICAgRU5ECkMgU0VBUkNILkZPUiwgMTk4NS0wNi0wMwpDCkMqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgpDCkMgU1VCUk9VVElORSBTRUFSQ0ggKFJFQUwqOCkKQwpDIFB1cnBv c2U6CkMgKioqKioqKgpDCkMgICAgICAgR2l2ZW4gYSBzdHJpY3RseSBpbmNyZWFzaW5nIGtu b3Qgc2VxdWVuY2UgWCgxKSA8IC4uLiA8IFgoTiksCkMgICAgICAgd2hlcmUgTiA+PSAxLCBh bmQgYSByZWFsIG51bWJlciBULCB0aGlzIHN1YnJvdXRpbmUgZmluZHMgdGhlCkMgICAgICAg dmFsdWUgTCBzdWNoIHRoYXQgWChMKSA8PSBUIDwgWChMKzEpLiAgSWYgVCA8IFgoMSksIEwg PSAwOwpDICAgICAgIGlmIFgoTikgPD0gVCwgTCA9IE4uCkMKQyBDYWxsaW5nIGNvbnZlbnRp b246CkMgKioqKioqKioqKioqKioqKioqCkMKQyAgICAgICBDQUxMIFNFQVJDSCAoIE4sIFgs IFQsIEwgKQpDCkMgTWVhbmluZyBvZiBwYXJhbWV0ZXJzOgpDICoqKioqKioqKioqKioqKioq KioqKgpDCkMgICAgICAgTiAgICAgICAoIEkgKSAgIEtub3QgYXJyYXkgZGltZW5zaW9uaW5n IHBhcmFtZXRlci4KQyAgICAgICBYKE4pICAgICggSSApICAgU3RyaWNseSBpbmNyZWFzaW5n IGtub3QgYXJyYXkuCkMgICAgICAgVCAgICAgICAoIEkgKSAgIElucHV0IGFyZ3VtZW50IHdo b3NlIGtub3QgaW50ZXJ2YWwgaXMgdG8KQyAgICAgICAgICAgICAgICAgICAgICAgYmUgZm91 bmQuCkMgICAgICAgTCAgICAgICAoSS9PKSAgIEtub3QgaW50ZXJ2YWwgcGFyYW1ldGVyLiBU aGUgc2VhcmNoIHByb2NlZHVyZQpDICAgICAgICAgICAgICAgICAgICAgICBpcyBmYWNpbGl0 YXRlZCBpZiBMIGhhcyBhcHByb3hpbWF0ZWx5IHRoZQpDICAgICAgICAgICAgICAgICAgICAg ICByaWdodCB2YWx1ZSBvbiBlbnRyeS4KQwpDIFJlbWFyazoKQyAqKioqKioKQwpDICAgICAg IFRoaXMgc3Vicm91dGluZSBpcyBhbiBhZGFwdGF0aW9uIG9mIHN1YnJvdXRpbmUgU0VBUkNI IGZyb20KQyAgICAgICB0aGUgcGFwZXIgYnkgTHljaGUgZXQgYWwuICgxOTgzKS4gTm8gY2hl Y2tpbmcgaXMgcGVyZm9ybWVkCkMgICAgICAgb24gdGhlIGlucHV0IHBhcmFtZXRlcnMgYW5k IGRhdGE7IHRoZSBhbGdvcml0aG0gbWF5IGZhaWwgaWYKQyAgICAgICB0aGUgaW5wdXQgc2Vx dWVuY2UgaXMgbm90IHN0cmljdGx5IGluY3JlYXNpbmcuCkMKQyBSZWZlcmVuY2U6CkMgKioq KioqKioqCkMKQyAgICAgICBULiBMeWNoZSwgTC5MLiBTY2h1bWFrZXIsICYgSy4gU2VwZWhy bm9vcmksIEZvcnRyYW4gc3Vicm91dGluZXMKQyAgICAgICBmb3IgY29tcHV0aW5nIHNtb290 aGluZyBhbmQgaW50ZXJwb2xhdGluZyBuYXR1cmFsIHNwbGluZXMuCkMgICAgICAgQWR2YW5j ZXMgaW4gRW5naW5lZXJpbmcgU29mdHdhcmUgNSgxOTgzKTEsIHBwLiAyLTUuCkMKQyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqCkMKICAgICAgU1VCUk9VVElORSBTRUFSQ0ggKCBOLCBYLCBULCBMICkK QwogICAgICBJTVBMSUNJVCBSRUFMKjggKEEtSCxPLVopCiAgICAgIERJTUVOU0lPTiBYKE4p CkMKICAgICAgSUYgKFQuTFQuWCgxKSkgVEhFTgpDKioqICAgICBPdXQgb2YgcmFuZ2UgdG8g dGhlIGxlZnQKICAgICAgICAgTCA9IDAKICAgICAgICAgUkVUVVJOCiAgICAgIEVORElGCiAg ICAgIElGIChULkdFLlgoTikpIFRIRU4KQyoqKiAgICAgT3V0IG9mIHJhbmdlIHRvIHRoZSBy aWdodAogICAgICAgICBMID0gTgogICAgICAgICBSRVRVUk4KICAgICAgRU5ESUYKQyoqKiAg VmFsaWRhdGUgaW5wdXQgdmFsdWUgb2YgTAogICAgICBMID0gTUFYMChMLDEpCiAgICAgIElG IChMLkdFLk4pIEwgPSBOLTEKQwpDKioqICBPZnRlbiBMIHdpbGwgYmUgaW4gYW4gaW50ZXJ2 YWwgYWRqb2luaW5nIHRoZSBpbnRlcnZhbCBmb3VuZApDKioqICBpbiBhIHByZXZpb3VzIGNh bGwgdG8gc2VhcmNoCkMKICAgICAgSUYgKFQuR0UuWChMKSkgR08gVE8gNQogICAgICBMID0g TCAtIDEKICAgICAgSUYgKFQuR0UuWChMKSkgUkVUVVJOCkMKQyoqKiAgUGVyZm9ybSBiaXNl Y3Rpb24KQwogICAgICBJTCA9IDEKICAgIDMgSVUgPSBMCiAgICA0IEwgPSAoSUwrSVUpIC8g MgogICAgICBJRiAoSVUtSUwuTEUuMSkgUkVUVVJOCiAgICAgIElGIChULkxULlgoTCkpIEdP IFRPIDMKICAgICAgSUwgPSBMCiAgICAgIEdPIFRPIDQKICAgIDUgSUYgKFQuTFQuWChMKzEp KSBSRVRVUk4KICAgICAgTCA9IEwgKyAxCiAgICAgIElGIChULkxULlgoTCsxKSkgUkVUVVJO CiAgICAgIElMID0gTCArIDEKICAgICAgSVUgPSBOCiAgICAgIEdPIFRPIDQKQwogICAgICBF TkQK --tFRabnnboX Content-Type: text/plain; charset=us-ascii Content-Description: message body text Content-Transfer-Encoding: 7bit Simplified function for spline interpolation: --tFRabnnboX Content-Type: application/octet-stream Content-Disposition: attachment; filename="spline.m" Content-Transfer-Encoding: base64 ZnVuY3Rpb24geWY9c3BsaW5lKHgseSx4ZixtKQogICMjIHlmPXNwbGluZSh4LHkseGZbLG09 Ml0pCiAgIyMgc3BsaW5lLWludGVycG9sYXRpb24KICAjIyBmcm9tIHk9Zih4KQogICMjIHRv IHlmPWYoeGYpCiAgIyMgZGVncmVlIG9mIHNwbGluZTogMiptLTEKCiAgaWYobmFyZ2luIDwg NCkKICAgIG0gPSAyOwogIGVuZGlmCgogIFt4LGldID0gc29ydCh4KTsKICB5ID0geShpLDop OwoKICB5ZiA9IGdjdnNwbCh4LHkseGYsW10sW10sbSwxLDApOwplbmRmdW5jdGlvbgo= --tFRabnnboX Content-Type: text/plain; charset=us-ascii Content-Description: message body text Content-Transfer-Encoding: 7bit Simplified function for data smoothing: --tFRabnnboX Content-Type: application/octet-stream Content-Disposition: attachment; filename="smooth.m" Content-Transfer-Encoding: base64 ZnVuY3Rpb24gW3lmLHBdPXNtb290aCh4LHkseGYscCkKICAjIyBbeWYscF09c21vb3RoKHgs eVsseGY9eF1bLHA9Li4uXSkKICAjIyBjdWJpYyBzcGxpbmUtYXBwcm94aW1hdGlvbgogICMj IGZyb20geT1mKHgpCiAgIyMgdG8geWY9Zih4ZikKICAjIyBzbW9vdGhpbmcgcGFyYW1ldGVy IHAgYXV0b21hdGljIG9yIGdpdmVuLAogICMjIHA9MCBkaXNhYmxlcyBzbW9vdGgsIHAtPklu ZiBmb3IgbWF4aW1hbCBzbW9vdGgsCiAgIyMgcCByZXR1cm5zIGFjdHVhbGx5IHVzZWQgb25l LgoKICBpZihuYXJnaW4gPT0gMikKICAgIHhmID0geDsKICAgIG1kID0gMjsKICAgIHAgPSAw OwogIGVsc2VpZihuYXJnaW4gPT0gMykKICAgIGlmKGlzX3NjYWxhcih4ZikpCiAgICAgIG1k ID0gMTsKICAgICAgcCA9IHhmOwogICAgICB4ZiA9IHg7CiAgICBlbHNlCiAgICAgIG1kID0g MjsKICAgICAgcCA9IDA7CiAgICBlbmRpZgogIGVsc2UKICAgIG1kID0gMTsKICAgIGlmKGlz X3NjYWxhcih4ZikpCiAgICAgIF9wID0geGY7CiAgICAgIHhmID0gcDsKICAgICAgcCA9IF9w OwogICAgZW5kaWYKICBlbmRpZgogICAgCiAgW3gsaV0gPSBzb3J0KHgpOwogIHkgPSB5KGks Oik7CgogIFt5Zix3a10gPSBnY3ZzcGwoeCx5LHhmLFtdLFtdLDIsbWQscCk7CiAgcCA9IHdr KDQpOwoKZW5kZnVuY3Rpb24K --tFRabnnboX Content-Type: text/plain; charset=iso-8859-1 Content-Description: message body text Content-Transfer-Encoding: quoted-printable Have much fun =09=09J=F6rg Specht --tFRabnnboX-- ------------------------------------------------------------- Octave is freely available under the terms of the GNU GPL. Octave's home on the web: http://www.octave.org How to fund new projects: http://www.octave.org/funding.html Subscription information: http://www.octave.org/archive.html -------------------------------------------------------------