From octave-sources-request at bevo dot che dot wisc dot edu Sat Dec 11 23:15:22 1999 Subject: sparse functions for octave 2.1.x From: A+A Adler To: octave-sources at bevo dot che dot wisc dot edu Date: Sun, 12 Dec 1999 00:29:00 -0500 (EST) This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime at docserver dot cac dot washington dot edu for more info. --8323328-339823619-944976540=:4712 Content-Type: TEXT/PLAIN; charset=US-ASCII Calling beta testers. Here is a version of my sparse functions for octave 2.1.x. Most of the functionality is now in place, and I'd be happy to get test results from anyone who'd like to try it. Details are in the Makefile, but here are the instructions in brief. Make sure you have these files: superlu_2.0.tar.gz <- you need to download this Makefile fem_test.m make_sparse.cc sp_test.m superlu2.0patch.diff INSTRUCTIONS 1. Download SuperLU version 2.0 from one of the following sites http://www.netlib.org/scalapack/prototype ftp://ftp.cs.berkeley/pub/src/lapack/SuperLU http://www.nersc.gov/~xiaoye/SuperLU/ 2. Unpack SuperLU into the directory you'll be building the octave sparse functions from 3. Apply the patch patch -p0 < superlu2.0patch.diff 4. Build the octave sparse functions make NOTE: do not run the SuperLU makefiles - it doesn't build the right objects into the library enjoy ______________________________________________________________ Andy Adler, adler at mondenet dot com --8323328-339823619-944976540=:4712 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=Makefile Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=Makefile IyBNYWtlZmlsZSBhbmQgUkVBRE1FIGZvciBvY3RhdmUgU3VwZXJMVSByb3V0 aW5lcw0KIyAkSWQ6IE1ha2VmaWxlLHYgMS4xIDE5OTkvMTIvMTIgMDU6MTA6 MjEgYW5keSBFeHAgYW5keSAkDQojDQojIElOU1RSVUNUSU9OUw0KIyAxLiBE b3dubG9hZCBTdXBlckxVIGZyb20gb25lIG9mIHRoZSBmb2xsb3dpbmcgc2l0 ZXMNCiMgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cubmV0 bGliLm9yZy9zY2FsYXBhY2svcHJvdG90eXBlDQojICAgICAgICAgICAgICAg ICAgICAgICAgICBmdHA6Ly9mdHAuY3MuYmVya2VsZXkvcHViL3NyYy9sYXBh Y2svU3VwZXJMVQ0KIyAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDov L3d3dy5uZXJzYy5nb3YvfnhpYW95ZS9TdXBlckxVLw0KIw0KIyAyLiBVbnBh Y2sgU3VwZXJMVSBpbnRvIHRoZSBkaXJlY3RvcnkgeW91J2xsIGJlIGJ1aWxk aW5nIHRoZQ0KIyAgICAgb2N0YXZlIHNwYXJzZSBmdW5jdGlvbnMgZnJvbQ0K Iw0KIyAzLiBBcHBseSB0aGUgcGF0Y2gNCiMgICAgICAgICAgIHBhdGNoIC1w MCA8IHN1cGVybHUyLjBwYXRjaC5kaWZmDQojDQojIDQuIEJ1aWxkIHRoZSBv Y3RhdmUgc3BhcnNlIGZ1bmN0aW9ucw0KIyAgICAgICAgICAgbWFrZSAgICBp biB0aGUgb2N0YXZlIHNwYXJzZSBmdW5jdGlvbnMgZGlyZWN0b3J5DQojICAg ICAgICAgICBOT1RFOiBkbyBub3QgcnVuIHRoZSBTdXBlckxVIG1ha2VmaWxl cyAtIA0KIyAgICAgICAgICAgICAgICBpdCBkb2Vzbid0IGJ1aWxkIHRoZSBy aWdodCBvYmplY3RzIGludG8gdGhlIGxpYnJhcnkNCiMNCiMgVGhpcyBtYWtl ZmlsZSBhc3N1bWVzIHRoYXQgdGhlIFN1cGVyTFUgcGFja2FnZSBoYXMgYmVl biB1bnBhY2tlZA0KIyAgaW4gdGhpcyBkaXJlY3RvcnkuIEl0IGNvbXBpbGVz IGZpbGVzIGRpcmVjdGx5IGZyb20gdGhlaXIgbG9jYXRpb25zDQojICBpbiB0 aGUgU3VwZXJMVSBzb3VyY2UuIFlvdSBkbyBub3QgbmVlZCB0byB1c2UgU3Vw ZXJMVSBtYWtlZmlsZXMuDQojDQojIFN1cGVyTFUgaXMgYXZhaWxhYmxlIGZy b20gaHR0cDovL3d3dy5uZXRsaWIub3JnL3NjYWxhcGFjay9wcm90b3R5cGUN CiMgICAgICAgICAgICAgICAgICAgICAgICAgICBmdHA6Ly9mdHAuY3MuYmVy a2VsZXkvcHViL3NyYy9sYXBhY2svU3VwZXJMVQ0KIw0KIyBUaGUgb2N0YXZl IHNwZnVuIGlzIGF2YWlsYWJsZSBhdDoNCiMgICAgICAgICAgICAgIGh0dHA6 Ly93d3cubW9uZGVuZXQuY29tL35hZGxlci9vY3RhdmUvc3BhcnNlL3NwZnVu LnRhci5neg0KIw0KIyANCiMgQVVUSE9SOiAgQW5keSBBZGxlciA8YWRsZXJA bW9uZGVuZXQuY29tPg0KIyANCiMgQ09QWVJJR0hUOg0KIyBDb3B5cmlnaHQg KEMpIDE5OTgtOTkgQW5keSBBZGxlcg0KIyANCiMgICAgVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vcg0KIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcw0KIyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBv Zg0KIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0 ZXIgdmVyc2lvbi4NCiMgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQojIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mDQojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCiMgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMgICAgWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljDQojIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07 IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCiMgRm91bmRh dGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5 LCBVU0EuDQojIA0KIyANCiMgU1VQRVJMVSBDT1BZUklHSFQ6DQojIFRoZSBm b2xsb3dpbmcgY29weXJpZ2h0IGlzIHRha2VuIGZyb20gYW55IG9mIHRoZQ0K IyBmaWxlcyBpbiB0aGUgU3VwZXJMVS9TUkMgZGlyZWN0b3J5DQojIA0KIyAv Kg0KIyAgKiAtLSBTdXBlckxVIHJvdXRpbmUgKHZlcnNpb24gMi4wKSAtLQ0K IyAgKiBVbml2LiBvZiBDYWxpZm9ybmlhIEJlcmtlbGV5LCBYZXJveCBQYWxv IEFsdG8gUmVzZWFyY2ggQ2VudGVyLA0KIyAgKiBhbmQgTGF3cmVuY2UgQmVy a2VsZXkgTmF0aW9uYWwgTGFiLg0KIyAgKiBOb3ZlbWJlciAxNSwgMTk5Nw0K IyAgKg0KIyAgKi8NCiMgLyoNCiMgICBDb3B5cmlnaHQgKGMpIDE5OTQgYnkg WGVyb3ggQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLg0KIyAN CiMgICBUSElTIE1BVEVSSUFMIElTIFBST1ZJREVEIEFTIElTLCBXSVRIIEFC U09MVVRFTFkgTk8gV0FSUkFOVFkNCiMgICBFWFBSRVNTRUQgT1IgSU1QTElF RC4gIEFOWSBVU0UgSVMgQVQgWU9VUiBPV04gUklTSy4NCiMgDQojICAgUGVy bWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byB1c2Ugb3IgY29weSB0aGlz IHByb2dyYW0gZm9yIGFueQ0KIyAgIHB1cnBvc2UsIHByb3ZpZGVkIHRoZSBh Ym92ZSBub3RpY2VzIGFyZSByZXRhaW5lZCBvbiBhbGwgY29waWVzLg0KIyAg IFBlcm1pc3Npb24gdG8gbW9kaWZ5IHRoZSBjb2RlIGFuZCB0byBkaXN0cmli dXRlIG1vZGlmaWVkIGNvZGUgaXMNCiMgICBncmFudGVkLCBwcm92aWRlZCB0 aGUgYWJvdmUgbm90aWNlcyBhcmUgcmV0YWluZWQsIGFuZCBhIG5vdGljZSB0 aGF0DQojICAgdGhlIGNvZGUgd2FzIG1vZGlmaWVkIGlzIGluY2x1ZGVkIHdp dGggdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UuDQojICovIA0KIyANCiMg VVNBR0U6DQojICAgIHNwYXJzZSBmdW5jdGlvbnMgYXJlIHByb3ZpZGVkIGZv cg0KIyANCiMgICAgc3BhcnNlIC0+IGNyZWF0ZSBzcGFyc2UgbWF0cmljZXMN CiMgICAgZnVsbCAgIC0+IGNyZWF0ZSBmdWxsIG1hdHJpY2VzIGZyb20gc3Bh cnNlDQojICAgIHNwbHUgICAtPiBzcGFyZSBsdSBkZWNvbXBvc2l0aW9uDQoj ICAgIHNwZmluZCAtPiBmaW5kIGVsZW1lbnRzIG9mIHNwYXJzZSBtYXRyaWNl cw0KIyAgICBubnogICAgLT4gbnVtYmVyIG9mIG5vbiB6ZXJvIGVsZW1lbnRz DQojIA0KIyAgICBVbml0YXJ5IG9wZXJhdG9ycw0KIyANCiMgICAgUycgICAg Uy4nICAgLVMgICAgflMNCiMgDQojICAgIEJpbmFyeSBvcGVyYXRvcnMNCiMg ICAgPT0gICsgICAtICAgKiAgIC4qICAgXCANCiMgDQojICAgIFNlbGVjdGlv bg0KIyAgICBBKCBmb3J0cmFuX3ZlYyApICwgICBBKCBpZHgxLCBpZHgyICkN CiMgDQojIA0KIyBNSVNTSU5HIEZFQVRVUkVTIChUT0RPIEZJTEUpDQojIChU aGlzIGlzIG1vcmUgb3IgbGVzcyBpbiB0aGUgb3JkZXIgb2YgaW1wb3J0YW5j ZSwgYW5kDQojICBwcm9iYWJpbGl0eSBvZiBhY2NvbXBsaXNobWVudCkNCiMg DQojIDAuICBCdWcgZml4ZXMNCiMgDQojIDEuICBTcGFyc2Ugc29sdXRpb246 IHRoZXJlIGlzIG5vIGNvZGUgZm9yDQojICAgICBpbnZlcnNlKCBzcGFyc2Ug KQ0KIyAgICAgc3BhcnNlIFwgc3BhcnNlDQojICAgICBzcGFyc2UoaW5kZXgx LGluZGV4MikgPSBzdWJtYXRyaXgNCiMgDQojIDIuICBTdXBwb3J0IGZvciBj b21wbGV4IHNwYXJzZSBtYXRyaWNlcw0KIyANCiMgMy4gIE1vcmUgInNvcGhp c3RpY2F0ZWQiIG1hdHJpeCBvcGVyYXRpb25zIG9uIHNwYXJzZQ0KIyAgICAg ZWlnZW52ZWN0b3JzDQojICAgICBjaG9sDQojICAgICBTVkQNCiMgICAgIGV0 Yy4NCiMgDQojIEtOT1dOIEFORCBQUkVESUNURUQgQlVHUyBBTkQgRkVBVFVS RVM6DQojIA0KIyAxLiAgUmlnaHQgbm93IG9ubHkgcmVhbCAoZG91YmxlKSBt YXRyaWNlcyBhcmUgc3VwcG9ydGVkLCBTdXBlckxVDQojICAgICBoYXMgc3Vw cG9ydCBmb3IgY29tcGxleCwgc28gSSdsbCBiZSBhZGRpbmcgdGhhdCBpbiBh dCBzb21lIHBvaW50Lg0KIyANCiMgMi4gIEl0IHByb2JhYmx5IGxlYWtzIG1l bW9yeS4gSSdsbCB0cnkgdG8gdGVzdCB0aGlzIG1vcmUgY2FyZWZ1bGx5DQoj ICAgICBhZnRlciBJIHN0b3AgYWRkaW5nIGZlYXR1cmVzLg0KIyANCiMgMy4g IEl0IGRvZXMgbm90IHN1cHBvcnQgZW1wdHkgbWF0cmljZXMgcHJvcGVybHku IEl0IG1heSBldmVuIGhhdmUNCiMgICAgIHNvbWUgcHJvYmxlbXMgd2l0aCBj b21wbGV0ZWx5IHNwYXJzZSAoYWxsIHplcm8pIG1hdHJpY2VzIGluDQojICAg ICBzb21lIGNhc2VzLg0KIyANCiMgNC4gIFRoZSBhdHRlbXB0IGhlcmUgaXMg dG8gcHJvdmlkZSBjb21wYXRhYmlsaXR5IHRvIHRoZSBtYWluIE1BVExBQg0K IyAgICAgc3BhcnNlIG1hdHJpeCBlbnRyeSBwb2ludHMuIFRoZSBTdXBlckxV IHByb3ZpZGVzIHNsaWdodGx5IGRpZmZlcmVudA0KIyAgICAgZnVjdGlvbmFs aXR5IHRvIE1BVExBQiwgYW5kLCB0aGVyZWZvcmUgdGhpcyB0b29sa2l0IHBy b3ZpZGVzDQojICAgICBkaWZmZXJlbnQgZmVhdHVyZXMuDQojIA0KIyAgICAg Rm9yIGV4YW1wbGUsIHRoZSBjb2x1bW4gcGVybXV0YXRpb24gYWxnb3JpdGht IChhbmQgYXBwcm9hY2gpIGlzDQojICAgICBkaWZmZXJlbnQuDQojIA0KIyAg ICAgQWRkaXRpb25hbGx5LCBJIGRvbid0IGludGVuZCB0byBwcm92aWRlIHJl cGxhY2VtZW50cyBmb3IgdGhlDQojICAgICBNQVRMQUIgc3BhcnNlIGZ1bmN0 aW9ucyBJIGNvbnNpZGVyIGZyaWxscy4gZWcgc3ByYW5kLm0sIHRyZWVwbG90 Lm0NCiMgDQojIDUuICBTdXBlckxVIHJvdXRpbmVzIGJhaWwgb3V0IG9uIGVy cm9ycy4gVGhleSBkb24ndCBldmVuIGxldA0KIyAgICAgb2N0YXZlIHNhdmUg aXQncyB2YXJpYWJsZXMuIFNvbWVvbmUgd2lsbCBoYXZlIHRvIGV4cGxhaW4g dG8NCiMgICAgIG1lIGhvdyB0byBtb2RpZnkgdGhlIFN1cGVyTFUgQUJPUlQo KSB0byBkbyB0aGlzIHJpZ2h0Lg0KIyANCiMgNi4gIFN1cGVyTFUgdXNlcyB0 aGUgaW50IGRhdGEgdHlwZSBhcyBpbmRpY2VzLiBTaW5jZSBpbnRzIGFyZSBu b3JtYWxseQ0KIyAgICAgNCBieXRlcyAoYXQgbGVhc3Qgb24gaTM4NiBtYWNo aW5lcyksIHRoaXMgaXMgbm90IGEgZ3JlYXQgcHJvYmxlbS4NCiMgICAgIFRo ZXJlIG1heSBiZSBzdGlsbCBhIGZldyBwbGFjZXMgd2hlcmUgYW4gaW50IGlz IHVzZWQgdG8gcmVmZXINCiMgICAgIHRvIGkraiptLCB3aGljaCBtZWFucyB0 aGF0IHNwYXJzZSBvcGVyYXRpb25zIG9uIG1hdHJpY2VzIHdoZXJlDQojICAg ICBtKm4gPiBtYXhpbnQvMiBtYXkgYmUgYnVnZ3kuIEkndmUgdHJpZWQgdG8g Zml4IHRoaXMsIGJ1dCB0aGVyZQ0KIyAgICAgbWF5IGJlIHNvbWUgbGVmdC4g IEVtYWlsIG1lIGlmIHlvdSBmaW5kIGFueS4NCiMgDQojIDcuICBTcGFyc2Ug c29sdmUgaXMgYSBsaXR0bGUgZmFzdGVyIHRoYW4gdGhlIE1BVExBQiBlcXVp dmFsZW50LCBleGNlcHQNCiMgICAgIGl0IHNlZW1zIG5vdCB0byBjaG9vc2Ug dGhlIGZhY3RvcmluZyBhcyB3ZWxsLiBVc2luZyBhIHBlcm1fYyBzcGVjIG9m DQojICAgICAyIGZvciBzeW1ldHJpYyBtYXRyaWNlcyB3aWxsIGdldCBzcGVl ZCBpbXByb3ZlbWVudHMgb2YgfiAxLjUuDQoNCiMgVE9ETzogZ2V0IHRoaXMg dG8gdXNlIG1rb2N0ZmlsZXMgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvDQoj ICAgICAgIHNwZWNpZnkgT0NUQVZFX1BSRUZJWCBvciBDQ0RFRlMNCiMNCiMg ICAgICAgQnVpbGQgdGhlIGNvbXBsZXggbGlicmFyaWVzIGFzIHdlbGwNCg0K TkFNRSAgICAgPSAgIG1ha2Vfc3BhcnNlDQpPQkpMSU5LUyA9ICAgc3BmaW5k Lm9jdCBzcGFyc2Uub2N0IGZ1bGwub2N0IHNwbHUub2N0IG5uei5vY3QNClNV UEVSTFUgID0gICBTdXBlckxVDQpPQ1RBVkUgICA9ICAgb2N0YXZlDQoNCkFS ICAgICAgID0gICBhcg0KQ1BQICAgICAgPSAgIGMrKw0KQ0MgICAgICAgPSAg IGdjYw0KU1RSSVAgICAgPSAgc3RyaXANCg0KU19JTkM9ICAgLUkkKFNVUEVS TFUpL1NSQy8gXA0KICAgICAgICAgLUkkKFNVUEVSTFUpL0NCTEFTDQoNCkND REVGUyA9ICMgLURWRVJCT1NFDQoNCkNERUZTICA9IC1EQWRkXyAtTzMNCg0K TElCU1VQRVJMVSA9IGxpYnN1cGVybHUuYQ0KDQpTX1NSQyAgPSAkKFNVUEVS TFUpL1NSQw0KU19DQkxBUz0gJChTVVBFUkxVKS9DQkxBUw0KDQpBTExBVVgg PSAkKFNfU1JDKS9zdXBlcmx1X3RpbWVyLm8gICAkKFNfU1JDKS9sc2FtZS5v IFwNCiAgICAgICAgICQoU19TUkMpL3V0aWwubyAgICAgICAgICAgICQoU19T UkMpL21lbW9yeS5vIFwNCiAgICAgICAgICQoU19TUkMpL2dldF9wZXJtX2Mu byAgICAgICQoU19TUkMpL21tZC5vIFwNCiAgICAgICAgICQoU19TUkMpL3Nw X2NvbGV0cmVlLm8gICAgICQoU19TUkMpL3NwX3ByZW9yZGVyLm8gXA0KICAg ICAgICAgJChTX1NSQykvc3BfaWVudi5vICAgICAgICAgJChTX1NSQykvcmVs YXhfc25vZGUubyBcDQogICAgICAgICAkKFNfU1JDKS94ZXJibGEubyAgICAg ICAgICAkKFNfU1JDKS9jb2xhbWQubw0KDQpEWkxBVVggPSAkKFNfU1JDKS9k bGFtY2gubyBcDQogICAgICAgICAkKFNfQ0JMQVMpL2RteWJsYXMyLm8NCg0K RExVU1JDID0gJChTX1NSQykvZGdzc3YubyAgICAgICAgICAgJChTX1NSQykv ZGdzc3Z4Lm8gXA0KICAgICAgICAgJChTX1NSQykvZHNwX2JsYXMyLm8gICAg ICAgJChTX1NSQykvZHNwX2JsYXMzLm8gXA0KICAgICAgICAgJChTX1NSQykv ZGdzY29uLm8gICAgICAgICAgJChTX1NSQykvZGxhY29uLm8gXA0KICAgICAg ICAgJChTX1NSQykvZGxhbmdzLm8gICAgICAgICAgJChTX1NSQykvZGdzZXF1 Lm8gXA0KICAgICAgICAgJChTX1NSQykvZGxhcWdzLm8gICAgICAgICAgJChT X1NSQykvZHBpdm90Z3Jvd3RoLm8gXA0KICAgICAgICAgJChTX1NSQykvZGdz cmZzLm8gICAgICAgICAgJChTX1NSQykvZGdzdHJmLm8gXA0KICAgICAgICAg JChTX1NSQykvZGdzdHJzLm8gICAgICAgICAgJChTX1NSQykvZGNvcHlfdG9f dWNvbC5vIFwNCiAgICAgICAgICQoU19TUkMpL2Rzbm9kZV9kZnMubyAgICAg ICQoU19TUkMpL2Rzbm9kZV9ibW9kLm8gXA0KICAgICAgICAgJChTX1NSQykv ZHBhbmVsX2Rmcy5vICAgICAgJChTX1NSQykvZHBhbmVsX2Jtb2QubyBcDQog ICAgICAgICAkKFNfU1JDKS9kcmVhZGhiLm8gICAgICAgICAkKFNfU1JDKS9k Y29sdW1uX2Rmcy5vIFwNCiAgICAgICAgICQoU19TUkMpL2Rjb2x1bW5fYm1v ZC5vICAgICQoU19TUkMpL2RwaXZvdEwubyBcDQogICAgICAgICAkKFNfU1JD KS9kcHJ1bmVMLm8gICAgICAgICAkKFNfU1JDKS9kbWVtb3J5Lm8gXA0KICAg ICAgICAgJChTX1NSQykvZHV0aWwubw0KDQpTX0RPVUJMRT0gJChETFVTUkMp ICQoQUxMQVVYKSAkKERaTEFVWCkNCg0KYWxsOiAkKE5BTUUpLm9jdCB0ZXN0 DQoNCiUubzolLmMNCgkkKENDKSAkKFNfSU5DKSAkKENERUZTKSAtYyAkPCAt byAkQA0KDQokKExJQlNVUEVSTFUpOiAkKFNfRE9VQkxFKQ0KCSQoQVIpIC1y ICQoTElCU1VQRVJMVSkgJChTX0RPVUJMRSkNCg0KJChOQU1FKS5vY3Q6ICQo TkFNRSkuY2MgJChMSUJTVVBFUkxVKQ0KCW1rb2N0ZmlsZSAtdiAkKE5BTUUp LmNjICQoU19JTkMpICQoQ0NERUZTKSAtbHN1cGVybHUgLUwuDQoJJChTVFJJ UCkgJChOQU1FKS5vY3QNCglmb3IgaSBpbiAkKE9CSkxJTktTKTsgZG8gbG4g LXNmICQoTkFNRSkub2N0ICQkaSA7IGRvbmUNCg0KdGVzdDogDQoJQGVjaG8g OyBlY2hvICJUZXN0aW5nIHNwYXJzZSBmdW5jdGlvbnMgLi4uIiA7IGVjaG8N CgkkKE9DVEFWRSkgLXFmIHNwX3Rlc3QubQ0KCUBlY2hvIA0KCUBlY2hvICJU ZXN0aW5nIHNwYXJzZSBzb2x1dGlvbiBmb3IgYSBGaW5pdGUgRWxlbWVudCBN b2RlbCAuLi4iIA0KCUBlY2hvIA0KCSQoT0NUQVZFKSAtcWYgZmVtX3Rlc3Qu bQ0KDQpjbGVhbjoNCglybSAkKE5BTUUpLm9jdCAkKE9CSkxJTktTKQ0KDQpz dXBlcmx1Y2xlYW46DQoJcm0gJChMSUJTVVBFUkxVKSAkKFNfRE9VQkxFKSAN Cg0K --8323328-339823619-944976540=:4712 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="make_sparse.cc" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="make_sparse.cc" LyoNClNwYXJzZSBtYXRyaXggZnVuY3Rpb25hbGl0eSBmb3Igb2N0YXZlLCBi YXNlZCBvbiB0aGUNCiAgIFN1cGVyTFUgcGFja2FnZSAgDQpDb3B5cmlnaHQg KEMpIDE5OTgtOTkgQW5keSBBZGxlcg0KDQogICBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y DQptb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcw0KcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YNCnRoZSBM aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u Lg0KICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQpidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0K TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQ0KR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4NCiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KTGljZW5zZSBh bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUg RnJlZSBTb2Z0d2FyZQ0KRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZl LCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuDQoNCiRJZDogbWFrZV9zcGFy c2UuY2MsdiAxLjEgMTk5OS8xMi8xMiAwMjo0ODozOSBhbmR5IEV4cCBhbmR5 ICQNCg0KKi8NCg0KI2lmZGVmIFZFUkJPU0UNCiMgIGRlZmluZSBERUJVR01T Ryh4KSBwcmludGYoIkRFQlVHOiIgeCAiXG4iKQ0KI2Vsc2UNCiMgIGRlZmlu ZSBERUJVR01TRyh4KSANCiNlbmRpZg0KDQojaWZuZGVmIFNVUEVSTFVESVIN CiMgIGRlZmluZSBTVVBFUkxVRElSICJTdXBlckxVL1NSQyINCiNlbmRpZg0K DQojaW5jbHVkZSAidXRpbC5oIg0KI2luY2x1ZGUgImRzcF9kZWZzLmgiDQoN CiNpbmNsdWRlIDxvY3RhdmUvY29uZmlnLmg+DQoNCiNpbmNsdWRlIDxjc3Rk bGliPg0KDQojaW5jbHVkZSA8c3RyaW5nPg0KDQpjbGFzcyBvc3RyZWFtOw0K DQojaW5jbHVkZSA8b2N0YXZlL2xvLXV0aWxzLmg+DQojaW5jbHVkZSA8b2N0 YXZlL214LWJhc2UuaD4NCiNpbmNsdWRlIDxvY3RhdmUvc3RyLXZlYy5oPg0K DQojaW5jbHVkZSA8b2N0YXZlL2RlZnVuLWRsZC5oPg0KI2luY2x1ZGUgPG9j dGF2ZS9lcnJvci5oPg0KI2luY2x1ZGUgPG9jdGF2ZS9ncmlwZXMuaD4NCiNp bmNsdWRlIDxvY3RhdmUvbG8tbWFwcGVycy5oPg0KI2luY2x1ZGUgPG9jdGF2 ZS9vY3Qtb2JqLmg+DQojaW5jbHVkZSA8b2N0YXZlL29wcy5oPg0KI2luY2x1 ZGUgPG9jdGF2ZS9vdi1iYXNlLmg+DQojaW5jbHVkZSA8b2N0YXZlL292LXR5 cGVpbmZvLmg+DQojaW5jbHVkZSA8b2N0YXZlL292Lmg+DQojaW5jbHVkZSA8 b2N0YXZlL292LXNjYWxhci5oPg0KI2luY2x1ZGUgPG9jdGF2ZS9vdi1yZS1t YXQuaD4NCiNpbmNsdWRlIDxvY3RhdmUvcGFnZXIuaD4NCiNpbmNsdWRlIDxv Y3RhdmUvcHItb3V0cHV0Lmg+DQojaW5jbHVkZSA8b2N0YXZlL3N5bXRhYi5o Pg0KI2luY2x1ZGUgPG9jdGF2ZS92YXJpYWJsZXMuaD4NCg0KY2xhc3MgT2N0 YXZlX21hcDsNCmNsYXNzIG9jdGF2ZV92YWx1ZV9saXN0Ow0KDQpjbGFzcyB0 cmVlX3dhbGtlcjsNCg0KLy8gSW50ZWdlciB2YWx1ZXMuDQoNCmNsYXNzDQpv Y3RhdmVfc3BhcnNlIDogcHVibGljIG9jdGF2ZV9iYXNlX3ZhbHVlDQp7DQpw dWJsaWM6DQovLyBjb25zdHJ1Y3RvcnM6IGZvciBzb21lIHJlYXNvbiB0aGV5 IGhhdmUgdG8gYmUgZGVmaW5lZCBpbnNpZGUgdGhlIGNsYXNzIC0NCi8vICB3 aGljaCBtYWtlcyBmb3IgYSBiaXphcnJlICouaCBmaWxlPw0KDQogICBvY3Rh dmVfc3BhcnNlIChTdXBlck1hdHJpeCBBICkgew0KICAgICAgREVCVUdNU0co InNwYXJzZSggU3VwZXJNYXRyaXggQSkiKTsNCiAgICAgIFg9IEE7DQogICB9 DQoNCiAgIG9jdGF2ZV9zcGFyc2UgKGNvbnN0IG9jdGF2ZV9zcGFyc2UmIHMp IHsNCiAgICAgIERFQlVHTVNHKCJzcGFyc2UoIHNwYXJzZSApIik7DQogICB9 IA0KDQogIH5vY3RhdmVfc3BhcnNlICh2b2lkKSB7DQogICAgICBERUJVR01T Rygic3BhcnNlIGRlc3RydWN0b3IiKTsNCiAgICAgIERlc3Ryb3lfU3VwZXJN YXRyaXhfU3RvcmUoICZYICk7DQogICB9DQoNCiAgIG9jdGF2ZV92YWx1ZSAq Y2xvbmUgKHZvaWQpIDsNCiAgIG9jdGF2ZV9zcGFyc2Ugc3BhcnNlX3ZhbHVl IChib29sID0gZmFsc2UpIGNvbnN0IDsNCiAgIFN1cGVyTWF0cml4IHN1cGVy X21hdHJpeCAoYm9vbCA9IGZhbHNlKSBjb25zdCA7DQoNCiAgIGludCByb3dz ICAgICh2b2lkKSBjb25zdCA7DQogICBpbnQgY29sdW1ucyAodm9pZCkgY29u c3QgOw0KICAgaW50IG5ueiAgICAgKHZvaWQpIGNvbnN0IDsNCg0KICAgYm9v bCBpc19kZWZpbmVkICh2b2lkKSBjb25zdCA7DQogICBib29sIGlzX3JlYWxf c2NhbGFyICh2b2lkKSBjb25zdCA7DQoNCiAgIG9jdGF2ZV92YWx1ZSBhbnkg KHZvaWQpIGNvbnN0IDsNCiAgIG9jdGF2ZV92YWx1ZSBhbGwgKHZvaWQpIGNv bnN0IDsNCg0KICAgYm9vbCBpc19yZWFsX3R5cGUgKHZvaWQpIGNvbnN0Ow0K ICAgYm9vbCBpc19zY2FsYXJfdHlwZSAodm9pZCkgY29uc3Q7DQogICBib29s IGlzX251bWVyaWNfdHlwZSAodm9pZCkgY29uc3Q7DQogICBib29sIHZhbGlk X2FzX3NjYWxhcl9pbmRleCAodm9pZCkgY29uc3Q7DQogICBib29sIHZhbGlk X2FzX3plcm9faW5kZXggKHZvaWQpIGNvbnN0Ow0KICAgYm9vbCBpc190cnVl ICh2b2lkKSBjb25zdDsNCi8vIGRvdWJsZSBkb3VibGVfdmFsdWUgKGJvb2wg PSBmYWxzZSkgY29uc3Q7DQoNCiAgIE1hdHJpeCBtYXRyaXhfdmFsdWUgKGJv b2wgPSBmYWxzZSkgY29uc3Q7DQogICBvY3RhdmVfdmFsdWUgdW1pbnVzICh2 b2lkKSBjb25zdCA7DQogICAvKg0KLy8gVE9ETzogZml4IHRoaXMgd2hlbiB3 ZSBzdXBwb3J0IENvbXBsZXggc3BhcnNlDQogICBvY3RhdmVfdmFsdWUgaGVy bWl0aWFuICh2b2lkKSBjb25zdCA7DQogICAqLw0KICAgb2N0YXZlX3ZhbHVl IHRyYW5zcG9zZSAodm9pZCkgY29uc3QgOw0KDQogICBvY3RhdmVfdmFsdWUg ZXh0cmFjdCAoaW50IHIxLCBpbnQgYzEsIGludCByMiwgaW50IGMyKSBjb25z dCA7DQogICBvY3RhdmVfdmFsdWVfbGlzdCBkb19pbmRleF9vcCAoaW50LCBj b25zdCBvY3RhdmVfdmFsdWVfbGlzdCYgaWR4KTsNCg0KICAgdm9pZCBwcmlu dCAob3N0cmVhbSYgb3MsIGJvb2wgcHJfYXNfcmVhZF9zeW50YXggPSBmYWxz ZSkgY29uc3QgOw0KDQpwcml2YXRlOg0KICBTdXBlck1hdHJpeCBYIDsNCiAg REVDTEFSRV9PQ1RBVkVfQUxMT0NBVE9SDQogIERFQ0xBUkVfT1ZfVFlQRUlE X0ZVTkNUSU9OU19BTkRfREFUQQ0KfTsNCg0KLy8NCi8vIE1lbW9yeSBoYW5k bGluZyBtYWNyb3MNCi8vDQoNCi8vIEhvdyBhZ2dyZXNzaXZlbHkgZG8gd2Ug dHJ5IHRvIGNvbnNlcnZlIG1lbW9yeSBhbGxvY3MNCiNkZWZpbmUgRVhQQU5E IDINCg0KLy8gQ2hlY2sgaWYgd2UndmUgZmlsbGVkIHRoZSBhbGxvY2F0ZWQg c3BhY2UsIA0KLy8gaWYgc28gd2UgYWxsb2MgRVhQQU5EIG1vcmUgYW5kIGNv cHkNCiNkZWZpbmUgQ0hFQ0tfQk9VTkRTMShpZHgsYm91bmQscHRyMSxwdHJf dHlwZTEpIFwNCiAgICAgICAgaWYgKChpZHgpPT0oYm91bmQpKSB7IERFQlVH TVNHKCJncm93aW5nMSIpOyBcDQogICAgICAgICAgIGludCBpaTsgXA0KICAg ICAgICAgICBwdHJfdHlwZTEgKnRtcHB0cjE7IFwNCiAgICAgICAgICAgKGJv dW5kKSo9IEVYUEFORDsgXA0KICAgICAgICAgICB0bXBwdHIxPSAocHRyX3R5 cGUxICopIG1hbGxvYygoYm91bmQpICogc2l6ZW9mKHB0cl90eXBlMSkpOyBc DQogICAgICAgICAgIGZvciggaWk9MDsgaWk8KGlkeCk7IGlpKyspIFwNCiAg ICAgICAgICAgICAgdG1wcHRyMVtpaV09IHB0cjFbaWldOyBcDQogICAgICAg ICAgIGZyZWUocHRyMSk7IFwNCiAgICAgICAgICAgcHRyMT0gdG1wcHRyMTsg fQ0KDQojZGVmaW5lIENIRUNLX0JPVU5EUzIoaWR4LGJvdW5kLHB0cjEscHRy X3R5cGUxLHB0cjIscHRyX3R5cGUyKSBcDQogICAgICAgIGlmICgoaWR4KT09 KGJvdW5kKSkgeyBERUJVR01TRygiZ3Jvd2luZzIiKTsgXA0KICAgICAgICAg ICBpbnQgaWk7IFwNCiAgICAgICAgICAgcHRyX3R5cGUxICp0bXBwdHIxOyBw dHJfdHlwZTIgKnRtcHB0cjI7IFwNCiAgICAgICAgICAgKGJvdW5kKSo9IEVY UEFORDsgXA0KICAgICAgICAgICB0bXBwdHIxPSAocHRyX3R5cGUxICopIG1h bGxvYygoYm91bmQpICogc2l6ZW9mKHB0cl90eXBlMSkpOyBcDQogICAgICAg ICAgIHRtcHB0cjI9IChwdHJfdHlwZTIgKikgbWFsbG9jKChib3VuZCkgKiBz aXplb2YocHRyX3R5cGUyKSk7IFwNCiAgICAgICAgICAgZm9yKCBpaT0wOyBp aTwoaWR4KTsgaWkrKykgeyBcDQogICAgICAgICAgICAgIHRtcHB0cjFbaWld PSBwdHIxW2lpXTsgXA0KICAgICAgICAgICAgICB0bXBwdHIyW2lpXT0gcHRy MltpaV07IH0gXA0KICAgICAgICAgICBmcmVlKHB0cjEpOyBmcmVlKHB0cjIp O1wNCiAgICAgICAgICAgcHRyMT0gdG1wcHRyMTsgcHRyMj0gdG1wcHRyMjsg fQ0KDQpvY3RhdmVfdmFsdWUgKiBvY3RhdmVfc3BhcnNlOjpjbG9uZSAodm9p ZCkgew0KICAgIERFQlVHTVNHKCJzcGFyc2UgLSBjbG9uZSIpOw0KICAgIHJl dHVybiBuZXcgb2N0YXZlX3NwYXJzZSAoKnRoaXMpOw0KIH0NCg0Kb2N0YXZl X3NwYXJzZSBvY3RhdmVfc3BhcnNlOjpzcGFyc2VfdmFsdWUgKGJvb2wgPSBm YWxzZSkgY29uc3Qgew0KICAgREVCVUdNU0coInNwYXJzZV92YWx1ZSIpOw0K ICAgcmV0dXJuICAoKnRoaXMpOw0KfQ0KDQpTdXBlck1hdHJpeCBvY3RhdmVf c3BhcnNlOjpzdXBlcl9tYXRyaXggKGJvb2wgPSBmYWxzZSkgY29uc3QgeyBy ZXR1cm4gWDsgfQ0KDQppbnQgb2N0YXZlX3NwYXJzZTo6cm93cyAgICAodm9p ZCkgY29uc3QgeyByZXR1cm4gWC5ucm93OyB9DQppbnQgb2N0YXZlX3NwYXJz ZTo6Y29sdW1ucyAodm9pZCkgY29uc3QgeyByZXR1cm4gWC5uY29sOyB9DQoN CmludCBvY3RhdmVfc3BhcnNlOjpubnogICAgICh2b2lkKSBjb25zdCB7DQog ICBOQ2Zvcm1hdCAqIE5DRiAgPSAoTkNmb3JtYXQgKiApIFguU3RvcmU7DQog ICByZXR1cm4gICBOQ0YtPm5ueiA7DQp9DQoNCnN0YXRpYyBNYXRyaXggc3Bh cnNlX3RvX2Z1bGwgKCBTdXBlck1hdHJpeCBYICkgew0KICAgREVCVUdNU0co InNwYXJzZSAtIHNwYXJzZV90b19mdWxsIik7DQogICBOQ2Zvcm1hdCAqIE5D RiAgPSAoTkNmb3JtYXQgKikgWC5TdG9yZTsNCiAgIGRvdWJsZSAgICogY29l ZnA9IChkb3VibGUgKikgICBOQ0YtPm56dmFsOw0KICAgaW50ICAgICAgKiBy aWR4cD0gKGludCAgICAqKSAgIE5DRi0+cm93aW5kOw0KICAgaW50ICAgICAg KiBjaWR4cD0gKGludCAgICAqKSAgIE5DRi0+Y29scHRyOw0KLy8gaW50ICAg ICAgICAgbm56ID0gTkNGLT5ubno7DQogICBpbnQgICAgICAgICAgbnIgPSBY Lm5yb3c7DQogICBpbnQgICAgICAgICAgbmMgPSBYLm5jb2w7DQogICANCiAg IE1hdHJpeCBNKCBuciwgbmMgKTsNCiAgIGZvciAoaW50IGo9MDsgajwgbmM7 IGorKykgew0KICAgLy8gSSB0aGluayBuZXcgTWF0cmljZXMgYXJlIGluaXRp YWxpemVkIHRvIHplcm8sIGhvd2V2ZXIganVzdCBpbiBjYXNlDQogICAgICBm b3IgKGludCBpPTA7IGk8IG5yOyBpKyspIE0oaSxqKT0gMDsNCiAgIA0KICAg ICAgZm9yIChpbnQgaT0gY2lkeHBbal07IGk8IGNpZHhwW2orMV07IGkrKykg DQogICAgICAgICBNKCByaWR4cFtpXSxqKT0gY29lZnBbaV07DQogICB9IC8v IGZvciBpDQogICByZXR1cm4gTTsNCn0gICANCg0KLy9pZHhfdmVjdG9yIGlu ZGV4X3ZlY3RvciAodm9pZCkgY29uc3QgeyByZXR1cm4gaWR4X3ZlY3RvciAo KGRvdWJsZSkgaXYpOyB9DQoNCmJvb2wgb2N0YXZlX3NwYXJzZTo6aXNfZGVm aW5lZCAgICAodm9pZCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQ0KYm9vbCBv Y3RhdmVfc3BhcnNlOjppc19yZWFsX3NjYWxhciAodm9pZCkgY29uc3QgeyBy ZXR1cm4gZmFsc2U7IH0NCg0Kb2N0YXZlX3ZhbHVlIG9jdGF2ZV9zcGFyc2U6 OmFueSAodm9pZCkgY29uc3Qgew0KICAgREVCVUdNU0coInNwYXJzZSAtIGFu eSIpOw0KICAgTWF0cml4IE09IHNwYXJzZV90b19mdWxsKCBYICk7DQogICBy ZXR1cm4gTS5hbnkoKTsNCn0NCg0Kb2N0YXZlX3ZhbHVlIG9jdGF2ZV9zcGFy c2U6OmFsbCAodm9pZCkgY29uc3Qgew0KICAgREVCVUdNU0coInNwYXJzZSAt IGFsbCIpOw0KICAgTWF0cml4IE09IHNwYXJzZV90b19mdWxsKCBYICk7DQog ICByZXR1cm4gTS5hbGwoKTsNCn0NCg0KYm9vbCBvY3RhdmVfc3BhcnNlOjpp c19yZWFsX3R5cGUgKHZvaWQpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0NCmJv b2wgb2N0YXZlX3NwYXJzZTo6aXNfc2NhbGFyX3R5cGUgKHZvaWQpIGNvbnN0 IHsgcmV0dXJuIGZhbHNlOyB9DQpib29sIG9jdGF2ZV9zcGFyc2U6OmlzX251 bWVyaWNfdHlwZSAodm9pZCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQ0KDQpi b29sIG9jdGF2ZV9zcGFyc2U6OnZhbGlkX2FzX3NjYWxhcl9pbmRleCAodm9p ZCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0NCg0KYm9vbCBvY3RhdmVfc3Bh cnNlOjp2YWxpZF9hc196ZXJvX2luZGV4ICh2b2lkKSBjb25zdCB7IHJldHVy biBmYWxzZTsgfQ0KDQovL0EgbWF0cml4IGlzIHRydWUgaWYgaXQgaXMgYWxs IG5vbiB6ZXJvDQpib29sIG9jdGF2ZV9zcGFyc2U6OmlzX3RydWUgKHZvaWQp IGNvbnN0IHsNCiAgIERFQlVHTVNHKCJzcGFyc2UgLSBpc190cnVlIik7DQog ICBOQ2Zvcm1hdCAqIE5DRiAgPSAoTkNmb3JtYXQgKiApIFguU3RvcmU7DQog ICByZXR1cm4gKFgubnJvdyAqIFgubmNvbCA9PSBOQ0YtPm5ueiApOw0KfQ0K DQoNCi8vIHJlYnVpbGQgYSBmdWxsIG1hdHJpeCBmcm9tIGEgc3BhcnNlIG9u ZQ0KLy8gdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGFjY2Vzc2VkIHRocm91Z2gg J2Z1bGwnDQpNYXRyaXggb2N0YXZlX3NwYXJzZTo6bWF0cml4X3ZhbHVlIChi b29sID0gZmFsc2UpIGNvbnN0IHsNCiAgIERFQlVHTVNHKCJzcGFyc2UgLSBt YXRyaXhfdmFsdWUiKTsNCiAgIE1hdHJpeCBNPSBzcGFyc2VfdG9fZnVsbCgg WCApOw0KICAgcmV0dXJuIE07DQp9DQoNCi8qDQogIENvbXBsZXggY29tcGxl eF92YWx1ZSAoYm9vbCA9IGZhbHNlKSBjb25zdCB7IHJldHVybiBpdjsgfQ0K DQogIENvbXBsZXhNYXRyaXggY29tcGxleF9tYXRyaXhfdmFsdWUgKGJvb2wg PSBmYWxzZSkgY29uc3QNCiAgICB7IHJldHVybiAgQ29tcGxleE1hdHJpeCAo MSwgMSwgQ29tcGxleCAoaXYpKTsgfQ0KDQogIG9jdGF2ZV92YWx1ZSBub3Qg KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG9jdGF2ZV92YWx1ZSAoKGRvdWJsZSkg ISBpdik7IH0NCg0KICB2b2lkIGluY3JlbWVudCAodm9pZCkgeyArK2l2OyB9 DQoNCiAgdm9pZCBkZWNyZW1lbnQgKHZvaWQpIHsgLS1pdjsgfQ0KICAqLw0K DQoNClVOT1BERUNMIChub3QsIGEgKSANCnsNCiAgIERFQlVHTVNHKCJzcGFy c2UgLSBub3QiKTsNCiAgIENBU1RfVU5PUF9BUkcgKGNvbnN0IG9jdGF2ZV9z cGFyc2UmKTsgDQogICBNYXRyaXggTSA9IHYubWF0cml4X3ZhbHVlKCk7DQog ICByZXR1cm4gKCFNKTsNCn0gICANCg0Kb2N0YXZlX3ZhbHVlIG9jdGF2ZV9z cGFyc2U6OnVtaW51cyAodm9pZCkgY29uc3Qgew0KICAgTkNmb3JtYXQgKiBO Q0YgID0gKE5DZm9ybWF0ICopIFguU3RvcmU7DQogICBkb3VibGUgICAqIGNv ZWZYPSAoZG91YmxlICopICAgTkNGLT5uenZhbDsNCiAgIGludCAgICAgICog cmlkeFg9IChpbnQgICAgKikgICBOQ0YtPnJvd2luZDsNCiAgIGludCAgICAg ICogY2lkeFg9IChpbnQgICAgKikgICBOQ0YtPmNvbHB0cjsNCiAgIGludCAg ICAgICAgICBubno9IE5DRi0+bm56Ow0KDQogICBkb3VibGUgKmNvZWZCID0g ZG91YmxlTWFsbG9jKG5ueik7DQogICBpbnQgKiAgIHJpZHhCID0gaW50TWFs bG9jKG5ueik7DQogICBpbnQgKiAgIGNpZHhCID0gaW50TWFsbG9jKFgubmNv bCsxKTsNCg0KICAgZm9yICggaW50IGk9MDsgaTw9WC5uY29sOyBpKyspIA0K ICAgICAgY2lkeEJbaV09ICBjaWR4WFtpXTsNCg0KICAgZm9yICggaW50IGk9 MDsgaTwgbm56OyBpKyspIHsNCiAgICAgIGNvZWZCW2ldPSAtY29lZlhbaV07 DQogICAgICByaWR4QltpXT0gIHJpZHhYW2ldOw0KICAgfQ0KICAgDQogICBT dXBlck1hdHJpeCBCOw0KICAgZENyZWF0ZV9Db21wQ29sX01hdHJpeCgmQiwg WC5ucm93LCBYLm5jb2wsIE5DRi0+bm56LA0KICAgICAgICAgICAgICAgICAg ICAgICAgICBjb2VmQiwgcmlkeEIsIGNpZHhCLCBOQywgX0QsIEdFKTsNCiAg IHJldHVybiBuZXcgb2N0YXZlX3NwYXJzZSAoIEIgKTsNCn0gLy8gb2N0YXZl X3ZhbHVlIHVtaW51cyAodm9pZCkgY29uc3Qgew0KDQpVTk9QREVDTCAodW1p bnVzLCBhICkgDQp7IA0KICAgREVCVUdNU0coInNwYXJzZSAtIHVtaW51cyIp Ow0KICAgQ0FTVF9VTk9QX0FSRyAoY29uc3Qgb2N0YXZlX3NwYXJzZSYpOyAN CiAgIHJldHVybiB2LnVtaW51cygpOw0KfSAgIA0KDQoNCm9jdGF2ZV92YWx1 ZSBvY3RhdmVfc3BhcnNlOjp0cmFuc3Bvc2UgKHZvaWQpIGNvbnN0IHsNCiAg IE5DZm9ybWF0ICogTkNGID0gKE5DZm9ybWF0ICopIFguU3RvcmU7DQogICBp bnQgKiBjaWR4TiAsICogcmlkeE4gOw0KICAgZG91YmxlICogY29lZk4gOw0K ICAgU3VwZXJNYXRyaXggQjsNCg0KICAgZENvbXBSb3dfdG9fQ29tcENvbCgg WC5uY29sLCBYLm5yb3csIE5DRi0+bm56LA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoZG91YmxlICopIE5DRi0+bnp2YWwsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkNGLT5yb3dpbmQsDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkNGLT5j b2xwdHIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29lZk4s ICZyaWR4TiwgJmNpZHhOKTsNCiAgIA0KICAgZENyZWF0ZV9Db21wQ29sX01h dHJpeCgmQiwgWC5uY29sLCBYLm5yb3csIE5DRi0+bm56LA0KICAgICAgICAg ICAgICAgICAgICAgICAgICBjb2VmTiwgcmlkeE4sIGNpZHhOLCBOQywgX0Qs IEdFKTsNCiAgIHJldHVybiBuZXcgb2N0YXZlX3NwYXJzZSAoIEIgKTsNCn0g Ly8gb2N0YXZlX3NwYXJzZTo6dHJhbnNwb3NlICh2b2lkKSBjb25zdCB7DQoN ClVOT1BERUNMICh0cmFuc3Bvc2UsIGEpDQp7DQogICBERUJVR01TRygic3Bh cnNlIC0gdHJhbnNwb3NlIik7DQogICBDQVNUX1VOT1BfQVJHIChjb25zdCBv Y3RhdmVfc3BhcnNlJik7IA0KICAgcmV0dXJuIHYudHJhbnNwb3NlKCk7DQp9 IC8vIHRyYW5zcG9zZQ0KDQovLyBUT0RPOiBmaXggdGhpcyB3aGVuIHdlIHN1 cHBvcnQgQ29tcGxleCBzcGFyc2UNClVOT1BERUNMIChoZXJtaXRpYW4sIGEp DQp7DQogICBERUJVR01TRygic3BhcnNlIC0gaGVybWl0aWFuIik7DQogICBD QVNUX1VOT1BfQVJHIChjb25zdCBvY3RhdmVfc3BhcnNlJik7IA0KICAgcmV0 dXJuIHYudHJhbnNwb3NlKCk7DQp9IC8vIGhlcm1pdGlhbg0KDQp0eXBlZGVm IHN0cnVjdCB7IGxvbmcgdmFsOw0KICAgICAgICAgICAgICAgICBsb25nIGlk eDsgfSBzb3J0X2lkeDsgICANCi8vIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9y IHNvcnQgaW4gaW5kZXgNCnN0YXRpYyBpbmxpbmUgaW50DQppeHBfY29tcChj b25zdCB2b2lkICppLGNvbnN0IHZvaWQqaiApDQp7DQogICByZXR1cm4gKCgo c29ydF9pZHggKikgaSktPnZhbCkgLSAoKChzb3J0X2lkeCAqKSBqKS0+dmFs KTsNCn0NCg0KLy8gZ2VuZXJhdGVzIGEgc29ydCBvZiBpZHh2IHdpdGggdGhl IHNvcnQgaW5kZXgNCi8vIG5vdGUgdGhhdCBzaWR4W10gbXVzdCBoYXZlIHNw YWNlIGZvciBpZHh2Lmxlbmd0aCBlbGVtZW50cw0Kc3RhdGljIGlubGluZSB2 b2lkDQpzb3J0X3dpdGhfaWR4IChzb3J0X2lkeCAqIHNpZHgsIGNvbnN0IGlk eF92ZWN0b3ImIGlkeHYsIGxvbmcgaXhsKSANCnsNCiAgIGlmIChpZHh2Lmlz X2NvbG9uKCkgKSB7DQogICAgICBmb3IgKGludCBpPTA7IGk8IGl4bDsgaSsr KSB7DQogICAgICAgICBzaWR4W2ldLnZhbD0gaTsNCiAgICAgICAgIHNpZHhb aV0uaWR4PSBpOw0KICAgICAgfQ0KICAgfQ0KICAgZWxzZSB7DQogICAgICBm b3IgKGludCBpPTA7IGk8IGl4bDsgaSsrKSB7DQogICAgICAgICBzaWR4W2ld LnZhbD0gaWR4dihpKTsNCiAgICAgICAgIHNpZHhbaV0uaWR4PSBpOw0KICAg ICAgfQ0KDQogICAgICBxc29ydCggc2lkeCwgaXhsLCBzaXplb2Yoc29ydF9p ZHgpLCBpeHBfY29tcCApOw0KICAgfQ0KfSAgIA0KDQpzdGF0aWMgQ29sdW1u VmVjdG9yDQpzcGFyc2VfaW5kZXhfb25laWR4ICggU3VwZXJNYXRyaXggWCwg Y29uc3QgaWR4X3ZlY3RvciBpeCkgew0KICAgREVCVUdNU0coInNwYXJzZV9p bmRleF9vbmVpZHgiKTsNCi8vIFJldHVybiBhIGZ1bGwgdmVjdG9yIG91dHB1 dA0KLy8gRG9lcyBpdCBtYWtlIHNlbnNlIHRvIG91dHB1dCBhIHNwYXJzZSBt YXRyaXggaGVyZT8NCiAgIE5DZm9ybWF0ICogTkNGID0gKE5DZm9ybWF0ICop IFguU3RvcmU7DQogICBkb3VibGUgICAqY29lZlg9IChkb3VibGUgKikgIE5D Ri0+bnp2YWw7DQogICBpbnQgICAgICAqcmlkeFg9ICAgICAgICAgICAgIE5D Ri0+cm93aW5kOw0KICAgaW50ICAgICAgKmNpZHhYPSAgICAgICAgICAgICBO Q0YtPmNvbHB0cjsNCiAgIGludCAgICAgICBuciAgID0gWC5ucm93Ow0KICAg aW50ICAgICAgIG5jICAgPSBYLm5jb2w7DQogICBsb25nICAgICAgaXhsOyAN Cg0KICAgaWYgKGl4LmlzX2NvbG9uKCkgKSANCiAgICAgIGl4bD0gbnIqbmM7 DQogICBlbHNlICANCiAgICAgIGl4bD0gaXgubGVuZ3RoKC0xKTsgDQoNCiAg IHNvcnRfaWR4IGl4cFsgaXhsIF07DQogICBzb3J0X3dpdGhfaWR4IChpeHAs IGl4LCBpeGwpOw0KDQogICBDb2x1bW5WZWN0b3IgTyggaXhsICk7DQogICBs b25nIGlwPSAtbnI7IC8vIHByZXZpb3VzIGNvbHVtbiBwb3NpdGlvbg0KICAg bG9uZyBqaj0wLGpsPTA7DQogICBmb3IgKGxvbmcgaz0wOyBrPCBpeGw7IGsr Kykgew0KICAgICAgbG9uZyBpaSAgPSBpeHBba10udmFsOw0KICAgICAgbG9u ZyBrb3V0PSBpeHBba10uaWR4Ow0KDQogICAgICBpZiAoIGlpPDAgfHwgaWk+ PW5yKm5jKSANCiAgICAgICAgIGVycm9yKCJpbnZhbGlkIG1hdHJpeCBpbmRl eCIpOw0KIA0KICAgICAgaW50IHJvd249IGlpL25yOw0KICAgICAgaWYgKCBy b3duID4gaXAvbnIgKSB7IC8vIHdlJ3ZlIG1vdmVkIHRvIGEgbmV3IGNvbHVt bg0KICAgICAgICAgamw9IGNpZHhYW3Jvd25dOw0KICAgICAgICAgamo9IGNp ZHhYW3Jvd24rMV07DQogICAgICB9DQoNCiAgICAgIHdoaWxlICggcmlkeFhb amxdIDwgaWklbnIgJiYgamwgPCBqaiApIGpsKys7DQoNCiAgICAgIGlmICgg cmlkeFhbamxdID09IGlpJW5yICYmIGpsPGpqICkgDQogICAgICAgICBPKCBr b3V0ICkgPSBjb2VmWFtqbF0gOw0KICAgICAgZWxzZQ0KICAgICAgICAgTygg a291dCApID0gMCA7DQoNCiAgICAgIGlwPWlpOw0KICAgfQ0KICAgcmV0dXJu IE87DQp9IC8vIHNwYXJzZV9pbmRleF9vbmVpZHggKA0KDQoNCnN0YXRpYyBT dXBlck1hdHJpeA0Kc3BhcnNlX2luZGV4X3R3b2lkeCAoIFN1cGVyTWF0cml4 IFgsDQogICAgICAgICAgICAgICAgICAgICAgY29uc3QgaWR4X3ZlY3RvciBp eCwNCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpZHhfdmVjdG9yIGp4 KSB7DQogICBERUJVR01TRygic3BhcnNlX2luZGV4X3R3b2lkeCIpOw0KICAg aW50ICAgICAgIG5yICAgPSBYLm5yb3c7DQogICBpbnQgICAgICAgbmMgICA9 IFgubmNvbDsNCg0KICAgaW50IGl4bCxqeGw7DQogICBpZiAoaXguaXNfY29s b24oKSApICAgICAgaXhsPSBucjsNCiAgIGVsc2UgICAgICAgICAgICAgICAg ICAgICBpeGw9IGl4Lmxlbmd0aCgtMSk7IA0KDQogICBpZiAoanguaXNfY29s b24oKSApICAgICAganhsPSBuYzsNCiAgIGVsc2UgICAgICAgICAgICAgICAg ICAgICBqeGw9IGp4Lmxlbmd0aCgtMSk7IA0KDQogICBzb3J0X2lkeCBpeHBb IGl4bCBdOw0KICAgc29ydF93aXRoX2lkeCAoaXhwLCBpeCwgaXhsKTsNCg0K ICAgTkNmb3JtYXQgKiBOQ0YgPSAoTkNmb3JtYXQgKikgWC5TdG9yZTsNCiAg IGRvdWJsZSAgICpjb2VmWD0gKGRvdWJsZSAqKSAgTkNGLT5uenZhbDsNCiAg IGludCAgICAgICpyaWR4WD0gICAgICAgICAgICAgTkNGLT5yb3dpbmQ7DQog ICBpbnQgICAgICAqY2lkeFg9ICAgICAgICAgICAgIE5DRi0+Y29scHRyOw0K DQogICAvLyBleHRpbWF0ZSB0aGUgbm56IGluIHRoZSBvdXRwdXQgbWF0cml4 DQogICBpbnQgbm56ID0gKGludCkgY2VpbCggKE5DRi0+bm56KSAqICgxLjAq aXhsIC8gbnIpICogKDEuMCpqeGwgLyBuYykgKTsgDQogICBkb3VibGUgKiBj b2VmQiA9IGRvdWJsZU1hbGxvYyhubnopOw0KICAgaW50ICAgICogcmlkeEIg PSBpbnRNYWxsb2MgICAobm56KTsNCiAgIGludCAgICAqIGNpZHhCID0gaW50 TWFsbG9jICAgKGp4bCsxKTsgIGNpZHhCWzBdPSAwOw0KDQogICBkb3VibGUg dGNvbFtpeGxdOyAgLy8gYSBjb2x1bW4gb2YgdGhlIGV4dHJhY3RlZCBtYXRy aXgNCg0KICAgaW50IGN4PSAwLCBsbD0wOw0KICAgaW50IGlwPSAtbmM7IC8v IHByZXZpb3VzIGNvbHVtbiBwb3NpdGlvbg0KICAgZm9yIChpbnQgbD0wOyBs PCBqeGw7IGwrKykgew0KICAgICAgaWYgKGp4LmlzX2NvbG9uKCkgKSAgICBs bD0gbDsNCiAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgbGw9IGp4KGwp Ow0KDQogICAgICBpZiAoIGxsPDAgfHwgbGw+PW5jKSANCiAgICAgICAgICAg IGVycm9yKCJpbnZhbGlkIG1hdHJpeCBpbmRleCAoeCBpbmRleCkiKTsNCg0K ICAgICAgaW50IGpsPSBjaWR4WFtsbF07DQogICAgICBpbnQgamo9IGNpZHhY W2xsKzFdOw0KICAgICAgZm9yIChsb25nIGs9MDsgazwgaXhsOyBrKyspIHsN CiAgICAgICAgIGxvbmcgaWkgID0gaXhwW2tdLnZhbDsNCiAgICAgICAgIGxv bmcga291dD0gaXhwW2tdLmlkeDsNCiAgIA0KICAgICAgICAgaWYgKCBpaTww IHx8IGlpPj1ucikgDQogICAgICAgICAgICBlcnJvcigiaW52YWxpZCBtYXRy aXggaW5kZXggKHggaW5kZXgpIik7DQoNCiAgICAgICAgIHdoaWxlICggcmlk eFhbamxdIDwgaWkgJiYgamwgPCBqaiApIGpsKys7DQoNCg0KICAgICAgICAg aWYgKCByaWR4WFtqbF0gPT0gaWkgJiYgamw8amogKSANCiAgICAgICAgICAg IHRjb2xbIGtvdXQgXSA9IGNvZWZYW2psXSA7DQogICAgICAgICBlbHNlDQog ICAgICAgICAgICB0Y29sWyBrb3V0IF0gPSAwIDsNCg0KICAgICAgICAgaXA9 aWk7DQogICANCiAgICAgIH0gLy8gZm9yIGsNCiAgICAgIGZvciAoaW50IGo9 MDsgajxpeGw7IGorKykgew0KICAgICAgICAgaWYgKHRjb2xbal0gIT0wICkg ew0KICAgICAgICAgICAgQ0hFQ0tfQk9VTkRTMiggY3gsIG5ueiwgcmlkeEIs IGludCwgY29lZkIsIGRvdWJsZSApOyANCiAgICAgICAgICAgIHJpZHhCW2N4 XT0gajsNCiAgICAgICAgICAgIGNvZWZCW2N4XT0gdGNvbFtqXTsNCiAgICAg ICAgICAgIGN4Kys7DQogICAgICAgICB9DQogICAgICB9DQogICAgICBjaWR4 QltsKzFdPSBjeDsNCiAgIH0gLy8gZm9yIGwNCg0KICAgaWYgKGN4IDwgbm56 KSANCiAgICAgIGlmKCAoIE5VTEwgPT0gcmVhbGxvYyhyaWR4QiwgY3gqc2l6 ZW9mKGludCAgICkpICkgfHwNCiAgICAgICAgICAoIE5VTEwgPT0gcmVhbGxv Yyhjb2VmQiwgY3gqc2l6ZW9mKGRvdWJsZSkpICkgKQ0KICAgICAgICAgIGVy cm9yKCJtZW1vcnkgZXJyb3IiKTsNCg0KICAgU3VwZXJNYXRyaXggQjsNCiAg IGRDcmVhdGVfQ29tcENvbF9NYXRyaXgoJkIsIGl4bCwganhsLCBjeCwNCiAg ICAgICAgICAgICAgICAgICAgICAgY29lZkIsIHJpZHhCLCBjaWR4QiwgTkMs IF9ELCBHRSk7DQoNCiAgIHJldHVybiBCOyAgICAgICAgICAgICAgICAgICAg ICAgICAgDQp9IC8vIHNwYXJzZV9pbmRleF90d29pZHggKA0KDQovLyBpbmRl eGluZyBvcGVyYXRpb25zDQpvY3RhdmVfdmFsdWVfbGlzdA0Kb2N0YXZlX3Nw YXJzZTo6ZG9faW5kZXhfb3AgKGludCwgY29uc3Qgb2N0YXZlX3ZhbHVlX2xp c3QmIGlkeCkNCnsNCiAgIERFQlVHTVNHKCJzcGFyc2UgLSBpbmRleCBvcCIp Ow0KICAgb2N0YXZlX3ZhbHVlIHJldHZhbDsNCiAgIA0KICAgaWYgKCBpZHgu bGVuZ3RoICgpID09IDEpIHsNCiAgICAgIGNvbnN0IGlkeF92ZWN0b3IgaXgg PSBpZHggKDApLmluZGV4X3ZlY3RvciAoKTsNCiAgICAgIENvbHVtblZlY3Rv ciBPPSBzcGFyc2VfaW5kZXhfb25laWR4KCBYLCBpeCApOw0KDQogICAgICBp ZiAoVnByZWZlcl9jb2x1bW5fdmVjdG9ycykgIHJldHZhbD0gTzsNCiAgICAg IGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsPSBPLnRyYW5z cG9zZSgpOw0KICAgfSBlbHNlDQogICBpZiAoIGlkeC5sZW5ndGggKCkgPT0g Mikgew0KICAgICAgY29uc3QgaWR4X3ZlY3RvciBpeCA9IGlkeCAoMCkuaW5k ZXhfdmVjdG9yICgpOw0KICAgICAgY29uc3QgaWR4X3ZlY3RvciBqeCA9IGlk eCAoMSkuaW5kZXhfdmVjdG9yICgpOw0KDQogICAgICByZXR2YWw9IG5ldyBv Y3RhdmVfc3BhcnNlICggDQogICAgICAgICAgICAgICAgICBzcGFyc2VfaW5k ZXhfdHdvaWR4ICggWCwgaXgsIGp4ICkpOw0KICAgfSBlbHNlDQogICAgICBl cnJvcigibmVlZCAxIG9yIDIgaW5kaWNlcyBmb3Igc3BhcnNlIGluZGV4aW5n IG9wZXJhdGlvbnMiKTsNCg0KICAgcmV0dXJuIHJldHZhbDsNCn0gLy8gb2N0 YXZlX3NwYXJzZTo6ZG9faW5kZXhfb3ANCg0KDQpvY3RhdmVfdmFsdWUNCm9j dGF2ZV9zcGFyc2U6OmV4dHJhY3QgKGludCByMSwgaW50IGMxLCBpbnQgcjIs IGludCBjMikgY29uc3Qgew0KICAgREVCVUdNU0coInNwYXJzZSAtIGV4dHJh Y3QiKTsNCiAgIFN1cGVyTWF0cml4IEI7DQogICBOQ2Zvcm1hdCAqIE5DRiA9 IChOQ2Zvcm1hdCAqKSBYLlN0b3JlOw0KICAgZG91YmxlICAgKmNvZWZYPSAo ZG91YmxlICopICBOQ0YtPm56dmFsOw0KICAgaW50ICAgICAgKnJpZHhYPSAg ICAgICAgICAgICBOQ0YtPnJvd2luZDsNCiAgIGludCAgICAgICpjaWR4WD0g ICAgICAgICAgICAgTkNGLT5jb2xwdHI7DQoNCi8vIGVzdGltYXRlIHRoZSBu bnogbmVlZGVkIGlzIHRoZSBBLT5ubnogdGltZXMgdGhlDQovLyAgZnJhY3Rp b24gb2YgdGhlIG1hdHJpeCBzZWxlY3RlZA0KICAgaWYgKHIxID4gcjIpIHsg aW50IHRtcCA9IHIxOyByMSA9IHIyOyByMiA9IHRtcDsgfQ0KICAgaWYgKGMx ID4gYzIpIHsgaW50IHRtcCA9IGMxOyBjMSA9IGMyOyBjMiA9IHRtcDsgfQ0K ICAgaW50IG09IHIxLXIyKzE7DQogICBpbnQgbj0gYzEtYzIrMTsNCg0KICAg aW50IG5ueiA9IChpbnQpIGNlaWwoIChOQ0YtPm5ueikgKiAoMS4wKm0gLyBY Lm5yb3cpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq ICgxLjAqbiAvIFgubmNvbCkgKTsgDQoNCiAgIGRvdWJsZSAqIGNvZWZCID0g ZG91YmxlTWFsbG9jKG5ueik7DQogICBpbnQgICAgKiByaWR4QiA9IGludE1h bGxvYyAgIChubnopOw0KICAgaW50ICAgICogY2lkeEIgPSBpbnRNYWxsb2Mg ICAobisxKTsgIGNpZHhCWzBdPSAwOw0KDQogICBpbnQgY3g9IDA7DQogICBm b3IgKGludCBpPTAsIGlpPSBjMTsgaSA8IG4gOyBpKyssIGlpKyspIHsNCiAg ICAgIGZvciAoIGludCBqPSBjaWR4WFtpaV07IGo8IGNpZHhYW2lpKzFdOyBq KyspIHsNCiAgICAgICAgIGludCByb3cgPSByaWR4WFsgaiBdOw0KICAgICAg ICAgaWYgKCByb3c+PSByMSAmJiByb3c8PXIyICYmIGNvZWZYW2pdICE9MCAp IHsNCiAgICAgICAgICAgIENIRUNLX0JPVU5EUzIoIGN4LCBubnosIHJpZHhC LCBpbnQsIGNvZWZCLCBkb3VibGUgKTsgDQogICAgICAgICAgICByaWR4Qlsg Y3ggXT0gcm93IC0gcjE7DQogICAgICAgICAgICBjb2VmQlsgY3ggXT0gY29l ZlhbIGogXTsNCiAgICAgICAgICAgIGN4Kys7DQogICAgICAgICB9IC8vIGlm IHJvdw0KICAgICAgfSAvL2ZvciBqDQoNCiAgICAgIGNpZHhYW2krMV0gPSBj eDsNCiAgIH0gLy8gZm9yICggaT0wDQoNCiAgIGlmIChjeCA8IG5ueikgDQog ICAgICBpZiggKCBOVUxMID09IHJlYWxsb2MocmlkeFgsIGN4KnNpemVvZihp bnQgICApKSApIHx8DQogICAgICAgICAgKCBOVUxMID09IHJlYWxsb2MoY29l ZlgsIGN4KnNpemVvZihkb3VibGUpKSApICkNCiAgICAgICAgICBlcnJvcigi bWVtb3J5IGVycm9yIik7DQoNCiAgIGRDcmVhdGVfQ29tcENvbF9NYXRyaXgo JkIsIG0sIG4sIGN4LA0KICAgICAgICAgICAgICAgICAgICAgICAgICBjb2Vm QiwgcmlkeEIsIGNpZHhCLCBOQywgX0QsIEdFKTsNCg0KICAgcmV0dXJuIG5l dyBvY3RhdmVfc3BhcnNlICggQiApOw0KfSAvLyBvY3RhdmVfc3BhcnNlOjpl eHRyYWN0IChpbnQgcjEsIGludCBjMSwgaW50IHIyLCBpbnQgYzIpIGNvbnN0 IHsNCg0Kdm9pZCBvY3RhdmVfc3BhcnNlOjpwcmludCAob3N0cmVhbSYgb3Ms IGJvb2wgcHJfYXNfcmVhZF9zeW50YXggKSBjb25zdA0Kew0KICAgREVCVUdN U0coInNwYXJzZSAtIHByaW50Iik7DQojaWYgMA0KLy8gSSBmaW5kIHRoZSBT dXBlckxVIHByaW50IGZ1bmN0aW9uIHRvIGJlIHVnbHkgYW5kIGNsdW1zeQ0K ICAgZFByaW50X0NvbXBDb2xfTWF0cml4KCJvY3RhdmUgc3BhcnNlIiwgJlgp Ow0KI2Vsc2UgICAgICANCiAgIE5DZm9ybWF0ICogTkNGICA9IChOQ2Zvcm1h dCAqKSBYLlN0b3JlOw0KICAgZG91YmxlICAgKiBjb2VmcD0gKGRvdWJsZSAq KSAgIE5DRi0+bnp2YWw7DQogICBpbnQgICAgICAqIHJpZHhwPSAoaW50ICAg ICopICAgTkNGLT5yb3dpbmQ7DQogICBpbnQgICAgICAqIGNpZHhwPSAoaW50 ICAgICopICAgTkNGLT5jb2xwdHI7DQogICBpbnQgICAgICAgICBubnogPSBO Q0YtPm5uejsNCiAgIGludCAgICAgICAgICBuciA9IFgubnJvdzsNCiAgIGlu dCAgICAgICAgICBuYyA9IFgubmNvbDsNCiAgIA0KICAgb3MgPDwgIkNvbXBy ZXNzZWQgQ29sdW1uIFNwYXJzZSAocm93cz0iIDw8IG5yIDw8DQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiLCBjb2xzPSIgPDwgbmMgPDwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsIG5uej0iIDw8 IG5ueiA8PCAiKVxuIjsNCiAgIC8vIGFkZCBvbmUgdG8gdGhlIHByaW50ZWQg aW5kaWNlcyB0byBnbyBmcm9tDQogICAvLyAgemVyby1iYXNlZCB0byBvbmUt YmFzZWQgYXJyYXlzDQogICBmb3IgKGludCBqPTA7IGo8IG5jOyBqKyspIA0K ICAgICAgZm9yIChpbnQgaT0gY2lkeHBbal07IGk8IGNpZHhwW2orMV07IGkr KykgDQogICAgICAgICBvcyA8PCAiICAoIiA8PCByaWR4cFtpXSsxIDw8DQog ICAgICAgICAgICAgICAiICwgIiAgPDwgaisxIDw8ICIpIC0+ICIgPDwgY29l ZnBbaV0gPDwgIlxuIjsNCiNlbmRpZiAgICAgICAgICAgICAgICAgIA0KfSAv LyBwcmludA0KDQoNCkRFRkJJTk9QKCBzX2ZfYWRkLCBzcGFyc2UsIG1hdHJp eCApDQp7DQogICBERUJVR01TRygic3BhcnNlIC0gc19mX2FkZCIpOw0KICAg Q0FTVF9CSU5PUF9BUkdTIChjb25zdCBvY3RhdmVfc3BhcnNlJiwgY29uc3Qg b2N0YXZlX21hdHJpeCYpOw0KICAgcmV0dXJuIG5ldyBvY3RhdmVfbWF0cml4 KCB2MS5tYXRyaXhfdmFsdWUoKSArIHYyLm1hdHJpeF92YWx1ZSgpICk7DQp9 ICAgDQoNCkRFRkJJTk9QKCBmX3NfYWRkLCBtYXRyaXgsIHNwYXJzZSApDQp7 DQogICBERUJVR01TRygic3BhcnNlIC0gZl9zX2FkZCIpOw0KICAgQ0FTVF9C SU5PUF9BUkdTICggY29uc3Qgb2N0YXZlX21hdHJpeCYsIGNvbnN0IG9jdGF2 ZV9zcGFyc2UmKTsNCiAgIHJldHVybiBuZXcgb2N0YXZlX21hdHJpeCggdjEu bWF0cml4X3ZhbHVlKCkgKyB2Mi5tYXRyaXhfdmFsdWUoKSApOw0KfSAgIA0K DQpERUZCSU5PUCggc19zX2FkZCwgc3BhcnNlLCBzcGFyc2UpDQp7DQogICBE RUJVR01TRygic3BhcnNlIC0gc19zX2FkZCIpOw0KICAgQ0FTVF9CSU5PUF9B UkdTIChjb25zdCBvY3RhdmVfc3BhcnNlJiwgY29uc3Qgb2N0YXZlX3NwYXJz ZSYpOw0KICAgU3VwZXJNYXRyaXggIEE9IHYxLnN1cGVyX21hdHJpeCgpOw0K ICAgU3VwZXJNYXRyaXggIEI9IHYyLnN1cGVyX21hdHJpeCgpOw0KDQogICBp bnQgbnI9IEIubnJvdzsNCiAgIGludCBuYz0gQi5uY29sOw0KICAgDQogICBp ZiAoIChuciAhPSBBLm5yb3cpIHx8IChuYyAhPSBBLm5jb2wpICkNCiAgICAg IGVycm9yKCJTcGFyc2U6IE1hdHJpeCBzaXplIG1pc21hdGNoIiApOw0KICAg DQogICBOQ2Zvcm1hdCAqIE5DQSAgID0gKE5DZm9ybWF0ICopIEEuU3RvcmU7 DQogICBkb3VibGUgICAqIGNvZWZBID0gKGRvdWJsZSAqKSAgIE5DQS0+bnp2 YWw7DQogICBpbnQgICAgICAqIHJpZHhBID0gICAgICAgICAgICAgIE5DQS0+ cm93aW5kOw0KICAgaW50ICAgICAgKiBjaWR4QSA9ICAgICAgICAgICAgICBO Q0EtPmNvbHB0cjsNCiAgIE5DZm9ybWF0ICogTkNCICAgPSAoTkNmb3JtYXQg KikgQi5TdG9yZTsNCiAgIGRvdWJsZSAgICogY29lZkIgPSAoZG91YmxlICop ICAgTkNCLT5uenZhbDsNCiAgIGludCAgICAgICogcmlkeEIgPSAgICAgICAg ICAgICAgTkNCLT5yb3dpbmQ7DQogICBpbnQgICAgICAqIGNpZHhCID0gICAg ICAgICAgICAgIE5DQi0+Y29scHRyOw0KDQovLyB0aGUgb3V0cHV0IG5ueiA8 PSBubnpBICsgbm56Qg0KICAgaW50IG5ueiA9IE5DQS0+bm56ICsgTkNCLT5u bnogOw0KDQogICBpbnQgKiAgIHJpZHhYID0gaW50TWFsbG9jICAgKG5ueik7 DQogICBkb3VibGUgKmNvZWZYID0gZG91YmxlTWFsbG9jKG5ueik7DQogICBp bnQgKiAgIGNpZHhYID0gaW50TWFsbG9jICAgKG5jKzEpOyAgY2lkeFhbMF09 IDA7DQoNCi8vDQovLyBHbyB0aHJvdWdoIGVhY2ggY29sdW1uIGFuZCBsb29r IGZvciBlbGVtZW50cyB3aGljaA0KLy8gICBtYXRjaCBiZXR3ZWVuIG1hdHJp Y2VzDQovLw0KICAgaW50IGp4PSAwOw0KDQogICBmb3IgKGludCBpPSAwIDsg aSA8IG5jIDsgaSsrICkgew0KICAgICAgaW50IGphPSBjaWR4QVsgaSBdOw0K ICAgICAgaW50IGpiPSBjaWR4QlsgaSBdOw0KDQogICAgICB3aGlsZSggKGph IDwgY2lkeEFbIGkrMSBdKSB8fCAoamIgPCBjaWR4QlsgaSsxIF0pICkgew0K ICAgICAgICAgaWYoIChqYj09Y2lkeEJbaSsxXSkgfHwNCiAgICAgICAgICAg ICgocmlkeEFbamFdIDwgcmlkeEJbamJdKSAmJiAoamE8Y2lkeEFbaSsxXSkp ICkgew0KICAgICAgICAgICAgcmlkeFhbIGp4IF0gPSByaWR4QVsgamEgXTsN CiAgICAgICAgICAgIGNvZWZYWyBqeCBdID0gY29lZkFbIGphIF07DQogICAg ICAgICAgICBqYSsrOyBqeCsrOw0KICAgICAgICAgfSBlbHNlDQogICAgICAg ICBpZiggKGphPT1jaWR4QVtpKzFdKSB8fA0KICAgICAgICAgICAgKChyaWR4 QltqYl0gPCByaWR4QVtqYV0pICYmIChqYjxjaWR4QltpKzFdKSkgKSB7DQog ICAgICAgICAgICByaWR4WFsganggXSA9IHJpZHhCWyBqYiBdOw0KICAgICAg ICAgICAgY29lZlhbIGp4IF0gPSBjb2VmQlsgamIgXTsNCiAgICAgICAgICAg IGpiKys7IGp4Kys7DQogICAgICAgICB9IGVsc2UNCiAgICAgICAgIGlmIChy aWR4QVtqYV0gPT0gcmlkeEJbamJdICkgew0KICAgICAgICAgICAgcmlkeFhb IGp4IF0gPSByaWR4QVsgamEgXTsNCiAgICAgICAgICAgIGNvZWZYWyBqeCBd ID0gY29lZkFbIGphIF0gKyBjb2VmQlsgamIgXTsNCiAgICAgICAgICAgIGp4 Kys7IGphKys7IGpiKys7DQogICAgICAgICB9IGVsc2Ugew0KICAgICAgICAg ICAgREVCVUdNU0coInNob3VsZG4ndCBnZXQgaGVyZSAtIHNfc19hZGQiKTsN CiAgICAgICAgIH0NCiAgICAgIH0gLy8gZm9yIGphDQoNCiAgICAgIGNpZHhY W2krMV0gPSBqeDsgDQogICB9IC8vIGZvciggaQ0KDQogICBpZiAoanggPCBu bnopIA0KICAgICAgaWYoICggTlVMTCA9PSByZWFsbG9jKHJpZHhYLCBqeCpz aXplb2YoaW50ICAgKSkgKSB8fA0KICAgICAgICAgICggTlVMTCA9PSByZWFs bG9jKGNvZWZYLCBqeCpzaXplb2YoZG91YmxlKSkgKSApDQogICAgICAgICAg ZXJyb3IoIm1lbW9yeSBlcnJvciIpOw0KDQogICBTdXBlck1hdHJpeCAgWDsN CiAgIGRDcmVhdGVfQ29tcENvbF9NYXRyaXgoJlgsIG5yLCBuYywgangsDQog ICAgICAgICAgICAgICAgICAgICAgICAgIGNvZWZYLCByaWR4WCwgY2lkeFgs IE5DLCBfRCwgR0UpOw0KDQogICByZXR1cm4gbmV3IG9jdGF2ZV9zcGFyc2Ug KCBYICk7DQp9IC8vIHNfc19hZGQNCg0KREVGQklOT1AoIHNfZl9zdWIsIHNw YXJzZSwgbWF0cml4ICkNCnsNCiAgIERFQlVHTVNHKCJzcGFyc2UgLSBzX2Zf c3ViIik7DQogICBDQVNUX0JJTk9QX0FSR1MgKGNvbnN0IG9jdGF2ZV9zcGFy c2UmLCBjb25zdCBvY3RhdmVfbWF0cml4Jik7DQogICByZXR1cm4gbmV3IG9j dGF2ZV9tYXRyaXgoIHYxLm1hdHJpeF92YWx1ZSgpIC0gdjIubWF0cml4X3Zh bHVlKCkgKTsNCn0gICANCg0KREVGQklOT1AoIGZfc19zdWIsIG1hdHJpeCwg c3BhcnNlICkNCnsNCiAgIERFQlVHTVNHKCJzcGFyc2UgLSBmX3Nfc3ViIik7 DQogICBDQVNUX0JJTk9QX0FSR1MgKCBjb25zdCBvY3RhdmVfbWF0cml4Jiwg Y29uc3Qgb2N0YXZlX3NwYXJzZSYpOw0KICAgcmV0dXJuIG5ldyBvY3RhdmVf bWF0cml4KCB2MS5tYXRyaXhfdmFsdWUoKSAtIHYyLm1hdHJpeF92YWx1ZSgp ICk7DQp9ICAgDQoNCkRFRkJJTk9QKCBzX3Nfc3ViLCBzcGFyc2UsIHNwYXJz ZSkNCnsNCiAgIERFQlVHTVNHKCJzcGFyc2UgLSBzX3NfYWRkIik7DQogICBD QVNUX0JJTk9QX0FSR1MgKGNvbnN0IG9jdGF2ZV9zcGFyc2UmLCBjb25zdCBv Y3RhdmVfc3BhcnNlJik7DQogICBTdXBlck1hdHJpeCAgQT0gdjEuc3VwZXJf bWF0cml4KCk7DQogICBTdXBlck1hdHJpeCAgQj0gdjIuc3VwZXJfbWF0cml4 KCk7DQogICBTdXBlck1hdHJpeCAgWDsNCg0KICAgaW50IG5yPSBCLm5yb3c7 DQogICBpbnQgbmM9IEIubmNvbDsNCiAgIA0KICAgaWYgKCAobnIgIT0gQS5u cm93KSB8fCAobmMgIT0gQS5uY29sKSApDQogICAgICBlcnJvcigiU3BhcnNl OiBNYXRyaXggc2l6ZSBtaXNtYXRjaCIgKTsNCiAgIA0KICAgTkNmb3JtYXQg KiBOQ0EgICA9IChOQ2Zvcm1hdCAqKSBBLlN0b3JlOw0KICAgZG91YmxlICAg KiBjb2VmQSA9IChkb3VibGUgKikgICBOQ0EtPm56dmFsOw0KICAgaW50ICAg ICAgKiByaWR4QSA9ICAgICAgICAgICAgICBOQ0EtPnJvd2luZDsNCiAgIGlu dCAgICAgICogY2lkeEEgPSAgICAgICAgICAgICAgTkNBLT5jb2xwdHI7DQog ICBOQ2Zvcm1hdCAqIE5DQiAgID0gKE5DZm9ybWF0ICopIEIuU3RvcmU7DQog ICBkb3VibGUgICAqIGNvZWZCID0gKGRvdWJsZSAqKSAgIE5DQi0+bnp2YWw7 DQogICBpbnQgICAgICAqIHJpZHhCID0gICAgICAgICAgICAgIE5DQi0+cm93 aW5kOw0KICAgaW50ICAgICAgKiBjaWR4QiA9ICAgICAgICAgICAgICBOQ0It PmNvbHB0cjsNCg0KLy8gdGhlIG91dHB1dCBubnogPD0gbm56QSArIG5uekIN CiAgIGludCBubnogPSBOQ0EtPm5ueiArIE5DQi0+bm56IDsNCg0KICAgaW50 ICogICByaWR4WCA9IGludE1hbGxvYyAgIChubnopOw0KICAgZG91YmxlICpj b2VmWCA9IGRvdWJsZU1hbGxvYyhubnopOw0KICAgaW50ICogICBjaWR4WCA9 IGludE1hbGxvYyAgIChuYysxKTsgIGNpZHhYWzBdPSAwOw0KDQovLw0KLy8g R28gdGhyb3VnaCBlYWNoIGNvbHVtbiBhbmQgbG9vayBmb3IgZWxlbWVudHMg d2hpY2gNCi8vICAgbWF0Y2ggYmV0d2VlbiBtYXRyaWNlcw0KLy8NCiAgIGlu dCBqeD0gMDsNCg0KICAgZm9yIChpbnQgaT0gMCA7IGkgPCBuYyA7IGkrKyAp IHsNCiAgICAgIGludCBqYT0gY2lkeEFbIGkgXTsNCiAgICAgIGludCBqYj0g Y2lkeEJbIGkgXTsNCg0KICAgICAgd2hpbGUoIChqYSA8IGNpZHhBWyBpKzEg XSkgfHwgKGpiIDwgY2lkeEJbIGkrMSBdKSApIHsNCiAgICAgICAgIGlmKCAo amI9PWNpZHhCW2krMV0pIHx8DQogICAgICAgICAgICAoKHJpZHhBW2phXSA8 IHJpZHhCW2piXSkgJiYgKGphPGNpZHhBW2krMV0pKSApIHsNCiAgICAgICAg ICAgIHJpZHhYWyBqeCBdID0gcmlkeEFbIGphIF07DQogICAgICAgICAgICBj b2VmWFsganggXSA9IGNvZWZBWyBqYSBdOw0KICAgICAgICAgICAgamErKzsg angrKzsNCiAgICAgICAgIH0gZWxzZQ0KICAgICAgICAgaWYoIChqYT09Y2lk eEFbaSsxXSkgfHwNCiAgICAgICAgICAgICgocmlkeEJbamJdIDwgcmlkeEFb amFdKSAmJiAoamI8Y2lkeEJbaSsxXSkpICkgew0KICAgICAgICAgICAgcmlk eFhbIGp4IF0gPSByaWR4QlsgamIgXTsNCiAgICAgICAgICAgIGNvZWZYWyBq eCBdID0gLSBjb2VmQlsgamIgXTsNCiAgICAgICAgICAgIGpiKys7IGp4Kys7 DQogICAgICAgICB9IGVsc2UNCiAgICAgICAgIGlmIChyaWR4QVtqYV0gPT0g cmlkeEJbamJdICkgew0KICAgICAgICAgICAgcmlkeFhbIGp4IF0gPSByaWR4 QVsgamEgXTsNCiAgICAgICAgICAgIGNvZWZYWyBqeCBdID0gY29lZkFbIGph IF0gLSBjb2VmQlsgamIgXTsNCiAgICAgICAgICAgIGp4Kys7IGphKys7IGpi Kys7DQogICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgREVCVUdNU0co InNob3VsZG4ndCBnZXQgaGVyZSAtIHNfc19zdWIiKTsNCiAgICAgICAgIH0N CiAgICAgIH0gLy8gZm9yIGphDQoNCiAgICAgIGNpZHhYW2krMV0gPSBqeDsg DQogICB9IC8vIGZvciggaQ0KDQogICBpZiAoanggPCBubnopIA0KICAgICAg aWYoICggTlVMTCA9PSByZWFsbG9jKHJpZHhYLCBqeCpzaXplb2YoaW50ICAg KSkgKSB8fA0KICAgICAgICAgICggTlVMTCA9PSByZWFsbG9jKGNvZWZYLCBq eCpzaXplb2YoZG91YmxlKSkgKSApDQogICAgICAgICAgZXJyb3IoIm1lbW9y eSBlcnJvciIpOw0KDQogICBkQ3JlYXRlX0NvbXBDb2xfTWF0cml4KCZYLCBu ciwgbmMsIGp4LA0KICAgICAgICAgICAgICAgICAgICAgICAgICBjb2VmWCwg cmlkeFgsIGNpZHhYLCBOQywgX0QsIEdFKTsNCg0KICAgcmV0dXJuIG5ldyBv Y3RhdmVfc3BhcnNlICggWCApOw0KfSAvLyBzX3NfYWRkDQoNCi8vDQovLyBF bGVtZW50IG11bHRpcGx5IHNwYXJzZSBieSBmdWxsLCByZXR1cm4gYSBzcGFy c2UgbWF0cml4DQovLw0KLy8gc3RhdGljIG9jdGF2ZV92YWx1ZQ0KLy8gc19m X2VsX211bCAoY29uc3Qgb2N0YXZlX3ZhbHVlJiBhMSwgY29uc3Qgb2N0YXZl X3ZhbHVlJiBhMikNCkRFRkJJTk9QKCBzX2ZfZWxfbXVsLCBzcGFyc2UsIG1h dHJpeCApDQp7DQogICBERUJVR01TRygic3BhcnNlIC0gc19mX2VsX211bCIp Ow0KICAgQ0FTVF9CSU5PUF9BUkdTIChjb25zdCBvY3RhdmVfc3BhcnNlJiwg Y29uc3Qgb2N0YXZlX21hdHJpeCYpOw0KDQogICBTdXBlck1hdHJpeCAgQT0g djEuc3VwZXJfbWF0cml4KCk7DQogICBjb25zdCBNYXRyaXggQj0gdjIubWF0 cml4X3ZhbHVlKCk7DQogICBTdXBlck1hdHJpeCAgWDsNCiAgIA0KICAgaW50 IG5yPSBCLnJvd3MoKTsNCiAgIGludCBuYz0gQi5jb2xzKCk7DQogICANCiAg IGlmICggKG5yICE9IEEubnJvdykgfHwgKG5jICE9IEEubmNvbCkgKQ0KICAg ICAgZXJyb3IoIlNwYXJzZTogTWF0cml4IHNpemUgbWlzbWF0Y2giICk7DQog ICANCiAgIE5DZm9ybWF0ICogTkNGICAgPSAoTkNmb3JtYXQgKikgQS5TdG9y ZTsNCiAgIGRvdWJsZSAgICogY29lZkEgPSAoZG91YmxlICopICAgTkNGLT5u enZhbDsNCiAgIGludCAgICAgICogcmlkeEEgPSAgICAgICAgICAgICAgTkNG LT5yb3dpbmQ7DQogICBpbnQgICAgICAqIGNpZHhBID0gICAgICAgICAgICAg IE5DRi0+Y29scHRyOw0KDQovLw0KLy8gRGVmaW5lIGhvbGRlcnMgdGhhdCB3 aWxsIGJlIGJpZyBlbm91Z2ggdG8gdGFrZSB0aGUNCi8vICAgY2FsY3VsYXRl ZCBpbmRpY2VzLiBUaGUgb3V0cHV0IG1hdHJpeCBjYW4ndCBiZSBsZXNzDQov LyAgIHNwYXJzZSB0aGFuIHRoZSBzcGFyc2UgaW5wdXQNCi8vICAgDQogICBp bnQgICAgKiByaWR4WCA9IGludE1hbGxvYyAgIChOQ0YtPm5ueik7DQogICBk b3VibGUgKiBjb2VmWCA9IGRvdWJsZU1hbGxvYyhOQ0YtPm5ueik7DQogICBp bnQgICAgKiBjaWR4WCA9IGludE1hbGxvYyAgIChuYysxKTsgIGNpZHhYWzBd PSAwOw0KDQogICBpbnQgY3g9IDA7DQogICBmb3IgKGludCBpPTA7IGkgPCBu YyA7IGkrKykgew0KICAgICAgZm9yIChpbnQgaj0gY2lkeEFbaV0gIDsNCiAg ICAgICAgICAgICAgIGo8IGNpZHhBW2krMV07IGorKykgew0KICAgICAgICAg aW50ICAgIHJvd2lkeCA9IHJpZHhBW2pdOw0KICAgICAgICAgZG91YmxlIHRt cHZhbCA9IEIocm93aWR4LGkpOw0KDQogICAgICAgICBpZiAodG1wdmFsICE9 IDApIHsNCiAgICAgICAgICAgIHJpZHhYWyBjeCBdID0gcm93aWR4Ow0KICAg ICAgICAgICAgY29lZlhbIGN4IF0gPSB0bXB2YWwgKiBjb2VmQVsgaiBdOw0K ICAgICAgICAgICAgY3grKzsNCiAgICAgICAgIH0NCiAgICAgIH0gLy8gZm9y ICggaW50IGo9MA0KICAgICAgY2lkeFhbaSsxXSA9IGN4OyANCiAgIH0gLy8g Zm9yICggaW50IGk9MA0KDQogICBpZiAoY3ggPCBOQ0YtPm5ueikgDQogICAg ICBpZiggKCBOVUxMID09IHJlYWxsb2MocmlkeFgsIGN4KnNpemVvZihpbnQg ICApKSApIHx8DQogICAgICAgICAgKCBOVUxMID09IHJlYWxsb2MoY29lZlgs IGN4KnNpemVvZihkb3VibGUpKSApICkNCiAgICAgICAgICBlcnJvcigibWVt b3J5IGVycm9yIik7DQovL1RPRE86IGZpZ3VyZSBvdXQgaG93IHRvIGhhbmRs ZSBtZW1vcnkgZXJyb3JzICAgICAgICAgIA0KICAgICAgICAgIA0KICAgZENy ZWF0ZV9Db21wQ29sX01hdHJpeCgmWCwgbnIsIG5jLCBjeCwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgY29lZlgsIHJpZHhYLCBjaWR4WCwgTkMsIF9E LCBHRSk7DQoNCiAgIHJldHVybiBuZXcgb2N0YXZlX3NwYXJzZSAoIFggKTsN Cn0gLy8gc19mX2VsX211bCggT2N0YXZlX21hcCBBLCBNYXRyaXggQiApIA0K DQovLw0KLy8gRWxlbWVudCBtdWx0aXBseSBmdWxsIGJ5IHNwYXJzZSwgcmV0 dXJuIGEgc3BhcnNlIG1hdHJpeA0KLy8gICBjYWxsIHRoZSBzcGFyc2UgYnkg ZnVsbCBtdWx0aXBsaWVyDQovLw0KLy9zdGF0aWMgb2N0YXZlX3ZhbHVlDQov L2Zfc19lbF9tdWwgKGNvbnN0IG9jdGF2ZV92YWx1ZSYgYTEsIGNvbnN0IG9j dGF2ZV92YWx1ZSYgYTIpDQpERUZCSU5PUCggZl9zX2VsX211bCwgbWF0cml4 LCBzcGFyc2UpDQp7DQogICBERUJVR01TRygic3BhcnNlIC0gZl9zX2VsX211 bCIpOw0KLy8gcmV0dXJuIHNfZl9lbF9tdWwoIGEyLCBhMSApOw0KICAgcmV0 dXJuIG9jdF9iaW5vcF9zX2ZfZWxfbXVsKCBhMiwgYTEgKTsNCn07DQoNCi8v DQovLyBFbGVtZW50IG11bHRpcGx5IHNwYXJzZSBieSBzcGFyc2UsIHJldHVy biBhIHNwYXJzZSBtYXRyaXgNCi8vDQovL3N0YXRpYyBvY3RhdmVfdmFsdWUN Ci8vc19zX2VsX211bCAoY29uc3Qgb2N0YXZlX3ZhbHVlJiBhMSwgY29uc3Qg b2N0YXZlX3ZhbHVlJiBhMikNCkRFRkJJTk9QKCBzX3NfZWxfbXVsLCBzcGFy c2UsIHNwYXJzZSkNCnsNCiAgIERFQlVHTVNHKCJzcGFyc2UgLSBmX3NfZWxf bXVsIik7DQogICBDQVNUX0JJTk9QX0FSR1MgKGNvbnN0IG9jdGF2ZV9zcGFy c2UmLCBjb25zdCBvY3RhdmVfc3BhcnNlJik7DQogICBTdXBlck1hdHJpeCAg QT0gdjEuc3VwZXJfbWF0cml4KCk7DQogICBTdXBlck1hdHJpeCAgQj0gdjIu c3VwZXJfbWF0cml4KCk7DQogICBTdXBlck1hdHJpeCAgWDsNCg0KICAgaW50 IG5yPSBCLm5yb3c7DQogICBpbnQgbmM9IEIubmNvbDsNCiAgIA0KICAgaWYg KCAobnIgIT0gQS5ucm93KSB8fCAobmMgIT0gQS5uY29sKSApDQogICAgICBl cnJvcigiU3BhcnNlOiBNYXRyaXggc2l6ZSBtaXNtYXRjaCIgKTsNCiAgIA0K ICAgTkNmb3JtYXQgKiBOQ0EgICA9IChOQ2Zvcm1hdCAqKSBBLlN0b3JlOw0K ICAgZG91YmxlICAgKiBjb2VmQSA9IChkb3VibGUgKikgICBOQ0EtPm56dmFs Ow0KICAgaW50ICAgICAgKiByaWR4QSA9ICAgICAgICAgICAgICBOQ0EtPnJv d2luZDsNCiAgIGludCAgICAgICogY2lkeEEgPSAgICAgICAgICAgICAgTkNB LT5jb2xwdHI7DQogICBOQ2Zvcm1hdCAqIE5DQiAgID0gKE5DZm9ybWF0ICop IEIuU3RvcmU7DQogICBkb3VibGUgICAqIGNvZWZCID0gKGRvdWJsZSAqKSAg IE5DQi0+bnp2YWw7DQogICBpbnQgICAgICAqIHJpZHhCID0gICAgICAgICAg ICAgIE5DQi0+cm93aW5kOw0KICAgaW50ICAgICAgKiBjaWR4QiA9ICAgICAg ICAgICAgICBOQ0ItPmNvbHB0cjsNCg0KLy8NCi8vIERlZmluZSBob2xkZXJz IHRoYXQgd2lsbCBiZSBiaWcgZW5vdWdoIHRvIHRha2UgdGhlDQovLyAgIGNh bGN1bGF0ZWQgaW5kaWNlcy4gVGhlIG91dHB1dCBubnogY2FudCBiZSBiaWdn ZXIgdGhhbg0KLy8gICB0aGUgc21hbGxlc3QgbXVsdGlwbGljYW5kIG5ueg0K Ly8NCiAgIGludCBubnogPSBOQ0EtPm5ueiA+IE5DQi0+bm56ID8gTkNCLT5u bnogOiBOQ0EtPm5ueiA7DQoNCiAgIGludCAqICAgcmlkeFggPSBpbnRNYWxs b2MgICAobm56KTsNCiAgIGRvdWJsZSAqY29lZlggPSBkb3VibGVNYWxsb2Mo bm56KTsNCiAgIGludCAqICAgY2lkeFggPSBpbnRNYWxsb2MgICAobmMrMSk7 ICBjaWR4WFswXT0gMDsNCg0KLy8NCi8vIEdvIHRocm91Z2ggZWFjaCBjb2x1 bW4gYW5kIGxvb2sgZm9yIGVsZW1lbnRzIHdoaWNoDQovLyAgIG1hdGNoIGJl dHdlZW4gbWF0cmljZXMNCi8vDQogICBpbnQgang9IDA7DQoNCiAgIGZvciAo aW50IGk9IDAgOyBpIDwgbmMgOyBpKysgKSB7DQogICAgICBpbnQgamE9IGNp ZHhBWyBpIF07DQogICAgICBpbnQgamI9IGNpZHhCWyBpIF07DQoNCiAgICAg IHdoaWxlKCAoamEgPCBjaWR4QVsgaSsxIF0pICYmIChqYiA8IGNpZHhCWyBp KzEgXSkgKSB7DQogICAgICAgICBpZiggcmlkeEFbamFdIDwgcmlkeEJbamJd ICkNCiAgICAgICAgICAgIGphKys7DQogICAgICAgICBlbHNlIGlmKCByaWR4 QVtqYV0gPiByaWR4QltqYl0gKQ0KICAgICAgICAgICAgamIrKzsNCiAgICAg ICAgIGVsc2Ugew0KICAgICAgICAgICAgcmlkeFhbIGp4IF0gPSByaWR4QVsg amEgXTsNCiAgICAgICAgICAgIGNvZWZYWyBqeCBdID0gY29lZkFbIGphIF0g KiBjb2VmQlsgamIgXTsNCiAgICAgICAgICAgIGp4Kys7DQogICAgICAgICAg ICBqYSsrOw0KICAgICAgICAgICAgamIrKzsNCiAgICAgICAgIH0gLy8gaWYg Y2lkeEENCiAgICAgIH0gLy8gZm9yIGphDQoNCiAgICAgIGNpZHhYW2krMV0g PSBqeDsgDQogICB9IC8vIGZvciggaQ0KDQogICBpZiAoanggPCBubnopIA0K ICAgICAgaWYoICggTlVMTCA9PSByZWFsbG9jKHJpZHhYLCBqeCpzaXplb2Yo aW50ICAgKSkgKSB8fA0KICAgICAgICAgICggTlVMTCA9PSByZWFsbG9jKGNv ZWZYLCBqeCpzaXplb2YoZG91YmxlKSkgKSApDQogICAgICAgICAgZXJyb3Io Im1lbW9yeSBlcnJvciIpOw0KDQogICBkQ3JlYXRlX0NvbXBDb2xfTWF0cml4 KCZYLCBuciwgbmMsIGp4LA0KICAgICAgICAgICAgICAgICAgICAgICAgICBj b2VmWCwgcmlkeFgsIGNpZHhYLCBOQywgX0QsIEdFKTsNCg0KICAgcmV0dXJu IG5ldyBvY3RhdmVfc3BhcnNlICggWCApOw0KfSAvLyBzX3NfZWxfbXVsIChj b25zdCBvY3RhdmVfdmFsdWUmIGExLCBjb25zdCBvY3RhdmVfdmFsdWUmIGEy KQ0KDQoNCi8vDQovLyBNdWx0aXBseSBzcGFyc2UgYnkgZnVsbCwgcmV0dXJu IGEgZnVsbCBtYXRyaXgNCi8vICAoSSBzdXBwb3NlIGl0J3MgcG9zc2libGUg dGhhdCBpbiBzb21lIGNhc2VzIGl0IG1ha2VzDQovLyAgIG1vcmUgc2Vuc2Ug dG8gcmV0dXJuIGEgc3BhcnNlIG1hdHJpeCwgYnV0IG9mZmhhbmQsDQovLyAg IEkgY2FuJ3QgaW1hZ2luZSBhbnkgcmVhbCBleGFtcGxlcy4gRW1haWwgbWUg aWYgeW91IGNhbi4pDQovLw0KLy9zdGF0aWMgb2N0YXZlX3ZhbHVlDQovL3Nf Zl9tdWwgKGNvbnN0IG9jdGF2ZV92YWx1ZSYgYTEsIGNvbnN0IG9jdGF2ZV92 YWx1ZSYgYTIpDQpERUZCSU5PUCggc19mX211bCwgc3BhcnNlLCBtYXRyaXgp DQp7DQogICBERUJVR01TRygic3BhcnNlIC0gc19mX211bCIpOw0KICAgQ0FT VF9CSU5PUF9BUkdTIChjb25zdCBvY3RhdmVfc3BhcnNlJiwgY29uc3Qgb2N0 YXZlX21hdHJpeCYpOw0KICAgU3VwZXJNYXRyaXggIEE9IHYxLnN1cGVyX21h dHJpeCgpOw0KICAgY29uc3QgTWF0cml4IEI9IHYyLm1hdHJpeF92YWx1ZSgp Ow0KICAgDQogICBpbnQgQW5yPSBBLm5yb3c7DQogICBpbnQgQW5jPSBBLm5j b2w7DQogICBpbnQgQm5yPSBCLnJvd3MoKTsNCiAgIGludCBCbmM9IEIuY29s cygpOw0KICAgDQogICBpZiAoQW5jICE9IEJucikNCiAgICAgIGVycm9yKCJN YXRyaXggc2l6ZSBtaXNtYXRjaCBBLmNvbCAhPSBCLnJvdyIgKTsNCiAgIA0K ICAgTWF0cml4IEMgKEFuciAsIEJuYyk7IA0KICAgZm9yIChpbnQgaT0wOyBp PCBBbnI7IGkrKyApDQogICAgICBmb3IgKGludCBqPTA7IGo8IEJuYzsgaisr ICkNCiAgICAgICAgIEMoaSxqKT0wOw0KDQogICBOQ2Zvcm1hdCAqIE5DRiA9 IChOQ2Zvcm1hdCAqKSBBLlN0b3JlOw0KICAgZG91YmxlICogY29lZkEgPSAo ZG91YmxlICopIE5DRi0+bnp2YWw7DQogICBpbnQgICAgKiByaWR4QSA9ICAg ICAgICAgICAgTkNGLT5yb3dpbmQ7DQogICBpbnQgICAgKiBjaWR4QSA9ICAg ICAgICAgICAgTkNGLT5jb2xwdHI7DQogICANCiAgIGZvciAoIGludCBpPTA7 IGkgPCBBbmMgOyBpKyspIHsNCiAgICAgIGZvciAoIGludCBqPSBjaWR4QVtp XTsgajwgY2lkeEFbaSsxXTsgaisrKSB7DQogICAgICAgICBpbnQgICAgICAg Y29sID0gcmlkeEFbal07DQogICAgICAgICBkb3VibGUgdG1wdmFsID0gY29l ZkFbal07DQoNCiAgICAgICAgIGZvciAoIGludCBrPTAgOyBrPCBCbmM7IGsr Kykgew0KICAgICAgICAgICAgQyhjb2wgLCBrKSs9IHRtcHZhbCAqIEIoaSxr KTsNCiAgICAgICAgIH0NCiAgICAgIH0gLy8gZm9yICggaW50IGo9MA0KICAg fSAvLyBmb3IgKCBpbnQgaT0wDQoNCiAgIHJldHVybiBDOw0KfSAvLyBzX2Zf bXVsDQoNCnN0YXRpYyBNYXRyaXggZl9zX211bHRpcGx5KGNvbnN0IE1hdHJp eCYgQSwgU3VwZXJNYXRyaXggQiApDQp7DQogICBpbnQgQW5yPSBBLnJvd3Mo KTsNCiAgIGludCBBbmM9IEEuY29scygpOw0KICAgaW50IEJucj0gQi5ucm93 Ow0KICAgaW50IEJuYz0gQi5uY29sOw0KICAgDQogICBpZiAoQW5jICE9IEJu cikNCiAgICAgIGVycm9yKCJNYXRyaXggc2l6ZSBtaXNtYXRjaCBBLmNvbCAh PSBCLnJvdyIgKTsNCiAgIA0KICAgTWF0cml4IEMgKEFuciAsIEJuYyk7IA0K ICAgZm9yIChpbnQgaT0wOyBpPCBBbnI7IGkrKyApDQogICAgICBmb3IgKGlu dCBqPTA7IGo8IEJuYzsgaisrICkNCiAgICAgICAgIEMoaSxqKT0wOw0KDQog ICBOQ2Zvcm1hdCAqIE5DRiA9IChOQ2Zvcm1hdCAqKSBCLlN0b3JlOw0KICAg ZG91YmxlICogY29lZkIgPSAoZG91YmxlICopIE5DRi0+bnp2YWw7DQogICBp bnQgICAgKiByaWR4QiA9ICAgICAgICAgICAgTkNGLT5yb3dpbmQ7DQogICBp bnQgICAgKiBjaWR4QiA9ICAgICAgICAgICAgTkNGLT5jb2xwdHI7DQoNCiAg IGZvciAoIGludCBpPTA7IGkgPCBCbmMgOyBpKyspIHsNCiAgICAgIGZvciAo IGludCBqPSBjaWR4QltpXTsgajwgY2lkeEJbaSsxXTsgaisrKSB7DQogICAg ICAgICBpbnQgICAgICAgY29sID0gcmlkeEJbal07DQogICAgICAgICBkb3Vi bGUgdG1wdmFsID0gY29lZkJbal07DQoNCiAgICAgICAgIGZvciAoIGludCBr PTAgOyBrPCBBbnI7IGsrKykgew0KICAgICAgICAgICAgQyhrLCBpKSs9IEEo ayxjb2wpICogdG1wdmFsOw0KICAgICAgICAgfQ0KICAgICAgfSAvLyBmb3Ig KCBpbnQgaj0wDQogICB9IC8vIGZvciAoIGludCBpPTANCg0KICAgcmV0dXJu IEM7DQp9DQoNCi8vDQovLyBNdWx0aXBseSBmdWxsIGJ5IHNwYXJzZSAsIHJl dHVybiBhIGZ1bGwgbWF0cml4DQovLw0KLy9zdGF0aWMgb2N0YXZlX3ZhbHVl DQovL2Zfc19tdWwgKGNvbnN0IG9jdGF2ZV92YWx1ZSYgYTEsIGNvbnN0IG9j dGF2ZV92YWx1ZSYgYTIpDQpERUZCSU5PUCggZl9zX211bCwgbWF0cml4LCBz cGFyc2UpDQp7DQogICBERUJVR01TRygic3BhcnNlIC0gZl9zX211bCIpOw0K ICAgQ0FTVF9CSU5PUF9BUkdTIChjb25zdCBvY3RhdmVfbWF0cml4JiwgY29u c3Qgb2N0YXZlX3NwYXJzZSYpOw0KICAgY29uc3QgTWF0cml4ICBBPSB2MS5t YXRyaXhfdmFsdWUoKTsNCiAgIFN1cGVyTWF0cml4ICAgQj0gdjIuc3VwZXJf bWF0cml4KCk7DQoNCiAgIHJldHVybiBmX3NfbXVsdGlwbHkoQSwgQik7DQp9 IC8vIGZfc19tdWwoDQoNCi8vDQovLyBNdWx0aXBseSBzcGFyc2UgYnkgc3Bh cnNlLCBlbGVtZW50IGJ5IGVsZW1lbnQNCi8vIFRoaXMgYWxnb3JpdGhtIGFs bG9jYXRlcyBhIGZ1bGwgY29sdW1uIG9mIHRoZSBvdXRwdXQNCi8vIG1hdHJp eC4gSG9wZWZ1bGx5IHRoYXQgd29uJ3QgYmUgYSBzdG9yYWdlIHByb2JsZW0u DQovLw0KLy8gVE9ETzogYWxsb2NhdGUgYSByb3cgb3IgY29sdW1uIGRlcGVu ZGluZyBvbiB0aGUgbGFyZ2VyDQovLyAgICAgICBkaW1lbnRpb24uDQovLw0K Ly8gSSdtIHN1cmUgdGhlcmUgYXJlIGdvb2Qgc3BhcnNlIG11bHRpcGxpY2F0 aW9uIGFsZ29yaXRobXMNCi8vICAgYXZhaWxhYmxlIGluIHRoZSBsaXR0ZXJh dHVyZS4gSSBpbnZlbnRlZCB0aGlzIG9uZQ0KLy8gICB0byBmaWxsIGEgZ2Fw LiBUZWxsIG1lIGlmIHlvdSBrbm93IG9mIGJldHRlciBvbmVzLg0KLy8NCi8v c3RhdGljIG9jdGF2ZV92YWx1ZQ0KLy9zX3NfbXVsIChjb25zdCBvY3RhdmVf dmFsdWUmIGExLCBjb25zdCBvY3RhdmVfdmFsdWUmIGEyKQ0KREVGQklOT1Ao IHNfc19tdWwsIHNwYXJzZSwgc3BhcnNlKQ0Kew0KICAgREVCVUdNU0coInNw YXJzZSAtIHNfc19tdWwiKTsNCg0KICAgQ0FTVF9CSU5PUF9BUkdTIChjb25z dCBvY3RhdmVfc3BhcnNlJiwgY29uc3Qgb2N0YXZlX3NwYXJzZSYpOw0KICAg U3VwZXJNYXRyaXggICBBPSB2MS5zdXBlcl9tYXRyaXgoKTsNCiAgIFN1cGVy TWF0cml4ICAgQj0gdjIuc3VwZXJfbWF0cml4KCk7DQogICBTdXBlck1hdHJp eCAgIFg7DQoNCiAgIGludCBBbnI9IEEubnJvdzsNCiAgIGludCBBbmM9IEEu bmNvbDsNCiAgIGludCBCbnI9IEIubnJvdzsNCiAgIGludCBCbmM9IEIubmNv bDsNCiAgIA0KICAgaWYgKEFuYyAhPSBCbnIpDQogICAgICBlcnJvcigiTWF0 cml4IHNpemUgbWlzbWF0Y2ggQS5jb2wgIT0gQi5yb3ciICk7DQoNCiAgIE5D Zm9ybWF0ICogTkNGQT0gKE5DZm9ybWF0ICopIEEuU3RvcmU7DQogICBkb3Vi bGUgKiBjb2VmQSA9IChkb3VibGUgKikgTkNGQS0+bnp2YWw7DQogICBpbnQg ICAgKiByaWR4QSA9ICAgICAgICAgICAgTkNGQS0+cm93aW5kOw0KICAgaW50 ICAgICogY2lkeEEgPSAgICAgICAgICAgIE5DRkEtPmNvbHB0cjsNCiAgIE5D Zm9ybWF0ICogTkNGQj0gKE5DZm9ybWF0ICopIEIuU3RvcmU7DQogICBkb3Vi bGUgKiBjb2VmQiA9IChkb3VibGUgKikgTkNGQi0+bnp2YWw7DQogICBpbnQg ICAgKiByaWR4QiA9ICAgICAgICAgICAgTkNGQi0+cm93aW5kOw0KICAgaW50 ICAgICogY2lkeEIgPSAgICAgICAgICAgIE5DRkItPmNvbHB0cjsNCiAgIE5D Zm9ybWF0ICogTkNGWD0gKE5DZm9ybWF0ICopIFguU3RvcmU7DQogICBkb3Vi bGUgKiBjb2VmWCA9IChkb3VibGUgKikgTkNGWC0+bnp2YWw7DQogICBpbnQg ICAgKiByaWR4WCA9ICAgICAgICAgICAgTkNGWC0+cm93aW5kOw0KICAgaW50 ICAgICogY2lkeFggPSAgICAgICAgICAgIE5DRlgtPmNvbHB0cjsNCg0KLy8g QSBmYWlybHkgYXJiaXRyYXJ5IGVzdGltYXRlIGZvciB0aGUgbm56ICAgDQog ICBpbnQgbm56ID0gIE5DRkEtPm5ueiArIE5DRkItPm5ueiA7DQogICByaWR4 WCA9IGludE1hbGxvYyAgIChubnopOw0KICAgY29lZlggPSBkb3VibGVNYWxs b2Mobm56KTsNCiAgIGNpZHhYID0gaW50TWFsbG9jICAgKEJuYysxKTsgIGNp ZHhYWzBdPSAwOw0KDQogICBkb3VibGUgKiBYY29sID0gZG91YmxlTWFsbG9j KEFucik7DQoNCiAgIGludCBjeD0gMDsNCg0KICAgZm9yICggaW50IGk9MDsg aSA8IEJuYyA7IGkrKykgew0KDQovLyBDbGVhbiB1cCB0aGUgY29sdW1uDQog ICAgICBmb3IgKGludCBrPTA7IGs8QW5yOyBrKyspDQogICAgICAgICBYY29s W2tdPSAwOw0KDQogICAgICBmb3IgKGludCBqPSBjaWR4QltpXTsgajwgY2lk eEJbaSsxXTsgaisrKSB7DQogICAgICAgICBpbnQgICAgICAgIGNvbD0gcmlk eEJbal07DQogICAgICAgICBkb3VibGUgdG1wdmFsID0gY29lZkJbal07DQoN CiAgICAgICAgIGZvciAoaW50IGs9IGNpZHhBW2NvbF0gOyBrPCBjaWR4QVtj b2wrMV07IGsrKykgew0KICAgICAgICAgICAgWGNvbFsgcmlkeEFba10gXSs9 IHRtcHZhbCAqIGNvZWZBW2tdOw0KICAgICAgICAgfQ0KICAgICAgfSAvLyBm b3IgKCBpbnQgaj0wDQoNCi8vIE5vdyBwYWNrIHRoZSBjYWxjdWxhdGVkIGNv bHVtbiBpbnRvIHRoZSBvdXRwdXQgbWF0cml4DQogICAgICBmb3IgKGludCBr PTA7IGs8QW5yOyBrKyspIA0KICAgICAgICAgaWYgKCBYY29sW2tdICE9MCAp IHsNCiAgICAgICAgICAgIENIRUNLX0JPVU5EUzIoIGN4LCBubnosIHJpZHhY LCBpbnQsIGNvZWZYLCBkb3VibGUgKTsgDQogICAgICAgICAgICByaWR4WFsg Y3ggXT0gazsNCiAgICAgICAgICAgIGNvZWZYWyBjeCBdPSBYY29sW2tdOw0K ICAgICAgICAgICAgY3grKzsNCiAgICAgICAgIH0gLy8gaWYgWGNvbF1bIGsg XQ0KDQogICAgICBjaWR4WFtpKzFdID0gY3g7DQogICB9IC8vIGZvciAoIGlu dCBpPTANCg0KICAgZnJlZSggWGNvbCApOw0KDQogICBpZiAoY3ggPCBubnop IA0KICAgICAgaWYoICggTlVMTCA9PSByZWFsbG9jKHJpZHhYLCBjeCpzaXpl b2YoaW50ICAgKSkgKSB8fA0KICAgICAgICAgICggTlVMTCA9PSByZWFsbG9j KGNvZWZYLCBjeCpzaXplb2YoZG91YmxlKSkgKSApDQogICAgICAgICAgZXJy b3IoIm1lbW9yeSBlcnJvciIpOw0KDQogICBkQ3JlYXRlX0NvbXBDb2xfTWF0 cml4KCZYLCBBbnIsIEJuYywgY3gsDQogICAgICAgICAgICAgICAgICAgICAg ICAgIGNvZWZYLCByaWR4WCwgY2lkeFgsIE5DLCBfRCwgR0UpOw0KDQogICBy ZXR1cm4gbmV3IG9jdGF2ZV9zcGFyc2UgKCBYICk7DQp9IC8vIHNfc19tdWwg KGNvbnN0IG9jdGF2ZV92YWx1ZSYgYTEsIGNvbnN0IG9jdGF2ZV92YWx1ZSYg YTIpDQoNCkRFRkJJTk9QKCBmX3NfbGRpdiwgbWF0cml4LCBzcGFyc2UpIHsN CiAgIERFQlVHTVNHKCJzcGFyc2UgLSBmX3NfbGRpdiIpOw0KICAgQ0FTVF9C SU5PUF9BUkdTICggY29uc3Qgb2N0YXZlX21hdHJpeCYsIGNvbnN0IG9jdGF2 ZV9zcGFyc2UmKTsNCiAgIGNvbnN0IE1hdHJpeCAgQT0gdjEubWF0cml4X3Zh bHVlKCk7DQogICBTdXBlck1hdHJpeCAgIEI9IHYyLnN1cGVyX21hdHJpeCgp Ow0KICAgcmV0dXJuIGZfc19tdWx0aXBseShBLmludmVyc2UoKSAsIEIpOw0K fSAvLyBmX3NfbGRpdiANCg0KLy8gVGhpcyBpcyBhIHdyYXBwZXIgYXJvdW5k IHRoZSBTdXBlckxVIGdldF9wZXJtX2MgZnVuY3Rpb24NCi8vICB0aGF0IGRv ZXMgc29tZSBidWcgZml4ZXMgYW5kIGFsbG93cyBleHRyYSBjb25kaXRpb25z DQovLw0KLy8gR2V0IGNvbHVtbiBwZXJtdXRhdGlvbiB2ZWN0b3IgcGVybV9j W10sIGFjY29yZGluZyB0byBwZXJtY19zcGVjOg0KLy8gICBwZXJtY19zcGVj ID0gMDogdXNlIHRoZSBuYXR1cmFsIG9yZGVyaW5nIA0KLy8gICBwZXJtY19z cGVjID0gMTogdXNlIG1pbmltdW0gZGVncmVlIG9yZGVyaW5nIG9uIHN0cnVj dHVyZSBvZiBBJypBDQovLyAgIHBlcm1jX3NwZWMgPSAyOiB1c2UgbWluaW11 bSBkZWdyZWUgb3JkZXJpbmcgb24gc3RydWN0dXJlIG9mIEEnK0ENCi8vICAg cGVybWNfc3BlYyA9IDM6IHVzZSBjb2x1bW4gYXBwcm94aW1hdGUgbWluaW11 bSBkZWdyZWUNCi8vICAgIAkNCi8vIG15IGd1ZXNzZXMgb24gdGhlIGNob2lj ZSBvZiBwZXJtY19zcGVjDQovLyAgICAgICAgICAgPT0xIHRoZSByZWNvbWVu ZGVkIGNob2ljZSBmb3IgYXJiaXRyYXJ5IG1hdHJpY2VzLA0KLy8gICAgICAg ICAgID09MiBmb3IgbWF0cmljZXMgY2xvc2UgdG8gc3RydWN0dXJhbGx5IHN5 bWV0cmljYWwNCi8vICAgICAgICAgICA9PTMgd2hhdCBNYXRsYWIgc2VlbXMg dG8gdXNlIA0KLy8NCi8vIGlmIHBlcm1jX3NwZWM9PSAtMSwgdGhlbiB0aGVy ZSBpcyBhIHVzZXIgc3BlY2lmaWVkIHBlcm1jIHByb3ZpZGVkDQovLw0Kc3Rh dGljIHZvaWQgZG9fcGVybWMoIGludCBwZXJtY19zcGVjLCBpbnQgcGVybV9j W10sIA0KICAgICAgICAgICAgICAgICAgICAgU3VwZXJNYXRyaXggQSApIHsN CiAgIGludCBBbnI9IEEubnJvdzsNCiAgIGludCBBbmM9IEEubmNvbDsNCg0K ICAgaWYgKCBwZXJtY19zcGVjIDwgMCApIHsNCiAgICAgIGVycm9yKCJzcGFy c2Ugc29sdmU6IGhhdmVuJ3QgaW1wbGVtZW50ZWQgdXNlciBzcGVjaWZpZWQg cGVybWMiKTsNCi8vICAgIHBlcm1fYyA9IHBlcm1fY19pbjsNCiAgIH0gDQog ICBlbHNlIHsNCi8vDQovLyBLTFVER0U6IGdldF9wZXJtX2MgYnJlYWtzIChp ZSBzZWdmYXVsdHMpIGlmIHRoZSBNYXRyaXggaXMgbm90DQovLyBzdWZmaWNp ZW50bHkgc3BhcnNlLiBJdCBzZWVtcyB0aGF0IHRoaXMgaXMgd2hlbiBubnog PiAwLjQqKG0qbikNCi8vDQovLyBTbyB3ZSBjaGVjayBmb3IgdGhpcyBjYXNl IGFuZCBzdWJzdGl0dXRlIGEgcGVybV9jIHdpdGggbm8NCi8vIHJlb3JkZXJp bmcgKFlvdSBkb24ndCByZWFsbHkgd2FudCB0byB1c2UgU3BhcnNlIE1hdHJp Y2VzIGluDQovLyB0aGlzIGNhc2UgYW55d2F5LCBidXQgYXQgbGVhc3QgdGhl IHRvb2wgc2hvdWxkbid0IGJyZWFrKQ0KLy8NCiNpZmRlZiBWRVJCT1NFICAg DQogICBwcmludGYoInNwYXJzZSByYXRpbyAlZCA6ICVkIC0+ICVmIFxuOiIs IA0KICAgICAgICAgICAoKE5DZm9ybWF0ICopIEEuU3RvcmUpLT5ubnogLCAo QW5jKkFucikgICAsICAgDQogIChkb3VibGUpICgoTkNmb3JtYXQgKikgQS5T dG9yZSktPm5ueiAvIChBbmMqQW5yKSApOw0KI2VuZGlmIC8vIFZFUkJPU0Ug ICANCg0KICAgICAgaWYgKCAoKE5DZm9ybWF0ICopIEEuU3RvcmUpLT5ubnog Pj0gMC40MCooQW5jKkFucikgKSAgew0KICAgICAgICAgZm9yIChpbnQgaT0w IDsgaTwgQW5jIDsgaSsrKQ0KICAgICAgICAgICAgcGVybV9jW2ldPSBpOw0K ICAgICAgfSBlbHNlIHsNCiAgICAgICAgIGdldF9wZXJtX2MocGVybWNfc3Bl YywgJkEsIHBlcm1fYyk7DQogICAgICB9DQogICB9DQp9IC8vIHN0YXRpYyBp bnQgZG9fcGVybWMoIGludCBwZXJtY19zcGVjLCBpbnQgcGVybWNbXSwgDQoN Ci8vIA0KLy8gU3BhcnNlIFwgRnVsbCBzb2x2ZQ0KLy8gVE9ETzogU3VwZXJN YXRyaXggcHJvdmlkZXMgbW9yZSBmdW5jdGlvbmFsaXR5IGludG8gYSBzb2x2 ZXgNCi8vICAgICAgIHJvdXRpbmUsIGJ1dCBob3cgdG8gd2UgaW1wbGVtZW50 IHRoaXMgaW4gb2N0YXZlPw0KLy8NCi8vc3RhdGljIG9jdGF2ZV92YWx1ZQ0K Ly9zX2ZfbGRpdiAoY29uc3Qgb2N0YXZlX3ZhbHVlJiBhMSwgY29uc3Qgb2N0 YXZlX3ZhbHVlJiBhMikNCkRFRkJJTk9QKCBzX2ZfbGRpdiwgc3BhcnNlLCBt YXRyaXgpDQp7DQogICBERUJVR01TRygic3BhcnNlIC0gc19mX2xkaXYiKTsN Cg0KICAgQ0FTVF9CSU5PUF9BUkdTICggY29uc3Qgb2N0YXZlX3NwYXJzZSYs IGNvbnN0IG9jdGF2ZV9tYXRyaXgmKTsNCiAgIFN1cGVyTWF0cml4ICAgQT0g djEuc3VwZXJfbWF0cml4KCk7DQogICAgICAgICBNYXRyaXggIE09IHYyLm1h dHJpeF92YWx1ZSgpOw0KICAgU3VwZXJNYXRyaXggTCxVLEI7DQoNCiAgIGlu dCBBbnI9IEEubnJvdzsNCiAgIGludCBBbmM9IEEubmNvbDsNCiAgIGludCBC bnI9IE0ucm93cygpOw0KICAgaW50IEJuYz0gTS5jb2xzKCk7DQogICBpZiAo QW5jICE9IEJucikNCiAgICAgIGVycm9yKCJNYXRyaXggc2l6ZSBtaXNtYXRj aCBBLmNvbCAhPSBCLnJvdyIgKTsNCg0KICAgZG91YmxlICogY29lZj0gTS5m b3J0cmFuX3ZlYygpOw0KDQogICBkQ3JlYXRlX0RlbnNlX01hdHJpeCgmQiwg Qm5yLCBCbmMsIGNvZWYsIEJuciwgRE4sIF9ELCBHRSk7DQogICANCg0KICAg aW50IHBlcm1jX3NwZWMgPSAzOw0KICAgaW50IHBlcm1fY1sgQW5jIF07DQog ICBpbnQgcGVybV9yWyBBbnIgXTsNCiAgIGRvX3Blcm1jKCBwZXJtY19zcGVj LCBwZXJtX2MsIEEgKTsNCg0KICAgaW50IGluZm87DQogICBkZ3NzdigmQSwg cGVybV9jLCBwZXJtX3IsICZMLCAmVSwgJkIsICZpbmZvKTsNCg0KICAgaWYg KGluZm8gIT0wICkNCiAgICAgIGVycm9yKCJGYWN0b3JpemF0aW9uIHByb2Js ZW06IGRnc3N2Iik7DQoNCiAgIERlc3Ryb3lfU3VwZXJNYXRyaXhfU3RvcmUo ICZMICk7DQogICBEZXN0cm95X1N1cGVyTWF0cml4X1N0b3JlKCAmVSApOw0K DQogICByZXR1cm4gTTsNCn0NCg0Kc3RhdGljIE1hdHJpeCBtYXRyaXhfZXF1 YWwgKCBjb25zdCBNYXRyaXgmIGEsIGNvbnN0IE1hdHJpeCYgYikNCnsNCiAg IERFQlVHTVNHKCJtYXRyaXhfZXF1YWwiKTsNCiAgIGlmKCggYS5jb2xzKCkg IT0gYi5jb2xzKCkpfHwgDQogICAgICAoIGEucm93cygpICE9IGIucm93cygp KSkgew0KICAgICAgZXJyb3IoIm9wZXJhdG9yID09OiBub25jb25mb3JtYW50 IG9wZXJhbmRzIik7DQogICAgICBNYXRyaXggcmV0dmFsOyByZXR1cm4gcmV0 dmFsIDsgLy8gZG8gd2UgbmVlZCB0aGlzPw0KICAgfQ0KICAgZWxzZSB7DQog ICAgIE1hdHJpeCByZXR2YWwgKGEucm93cygpLCBhLmNvbHMoKSApOw0KICAg ICBmb3IoIGludCBpPTA7IGk8YS5yb3dzKCk7IGkrKykNCiAgICAgICAgZm9y KCBpbnQgaj0wOyBqPGEuY29scygpOyBqKyspDQogICAgICAgICAgIHJldHZh bChpLGopID0gYShpLGopID09IGIoaSxqKTsNCiAgICAgcmV0dXJuIHJldHZh bDsNCiAgIH0NCn0NCg0KLy8gDQovLyBTcGFyc2UgPT0gU3BhcnNlIC0+IHJl dHVybiBhIGZ1bGwgbWF0cml4DQovLyBOT1RFOiB0aGlzIGlzIGluZWZmaWNp ZW50IGFuZCBzaG91bGRuJ3QgYmUgdXNlZCANCi8vDQovL3N0YXRpYyBvY3Rh dmVfdmFsdWUNCi8vc19zX2VxIChjb25zdCBvY3RhdmVfdmFsdWUmIGExLCBj b25zdCBvY3RhdmVfdmFsdWUmIGEyKQ0KREVGQklOT1AoIHNfc19lcSwgc3Bh cnNlLCBzcGFyc2UpIHsNCiAgIERFQlVHTVNHKCJzcGFyc2UgLSBzX3NfZXEi KTsNCiAgIENBU1RfQklOT1BfQVJHUyAoIGNvbnN0IG9jdGF2ZV9zcGFyc2Um LCBjb25zdCBvY3RhdmVfc3BhcnNlJik7DQogICByZXR1cm4gbWF0cml4X2Vx dWFsKCB2MS5tYXRyaXhfdmFsdWUoKSwgdjIubWF0cml4X3ZhbHVlKCkgKTsN Cn0gLy8gc19zX2VxIA0KDQovLyANCi8vIFNwYXJzZSA9PSBGdWxsDQovLw0K Ly9zdGF0aWMgb2N0YXZlX3ZhbHVlDQovL3NfZl9lcSAoY29uc3Qgb2N0YXZl X3ZhbHVlJiBhMSwgY29uc3Qgb2N0YXZlX3ZhbHVlJiBhMikNCkRFRkJJTk9Q KCBzX2ZfZXEsIHNwYXJzZSwgbWF0cml4KQ0Kew0KICAgREVCVUdNU0coInNw YXJzZSAtIHNfZl9lcSIpOw0KICAgQ0FTVF9CSU5PUF9BUkdTICggY29uc3Qg b2N0YXZlX3NwYXJzZSYsIGNvbnN0IG9jdGF2ZV9tYXRyaXgmKTsNCiAgIHJl dHVybiBtYXRyaXhfZXF1YWwoIHYxLm1hdHJpeF92YWx1ZSgpLCB2Mi5tYXRy aXhfdmFsdWUoKSApOw0KfSAvLyBzX3NfZXEgDQoNCi8vDQovLyBGdWxsID09 IFNwYXJzZQ0KLy8NCi8vc3RhdGljIG9jdGF2ZV92YWx1ZQ0KLy9mX3NfZXEg KGNvbnN0IG9jdGF2ZV92YWx1ZSYgYTEsIGNvbnN0IG9jdGF2ZV92YWx1ZSYg YTIpDQpERUZCSU5PUCggZl9zX2VxLCBtYXRyaXgsIHNwYXJzZSkNCnsNCiAg IERFQlVHTVNHKCJzcGFyc2UgLSBmX3NfZXEiKTsNCiAgIENBU1RfQklOT1Bf QVJHUyAoIGNvbnN0IG9jdGF2ZV9tYXRyaXgmLCBjb25zdCBvY3RhdmVfc3Bh cnNlJik7DQogICByZXR1cm4gbWF0cml4X2VxdWFsKCB2MS5tYXRyaXhfdmFs dWUoKSwgdjIubWF0cml4X3ZhbHVlKCkgKTsNCn07DQoNCg0KLy8gYXNzZW1i bGUgYSBzcGFyc2UgbWF0cml4IGZyb20gZnVsbA0KLy8gICBjYWxsZWQgYnkg b25lIGFyZyBmb3Igc3BhcnNlDQpzdGF0aWMgU3VwZXJNYXRyaXggbWF0cml4 X3RvX3NwYXJzZSggTWF0cml4ICYgQSkgeyAgICAgIA0KICAgREVCVUdNU0co InNwYXJzZSAtIG1hdHJpeF90b19zcGFyc2UiKTsNCiAgIGludCBtPSBBLnJv d3MoKTsNCiAgIGludCBuPSBBLmNvbHMoKTsNCg0KLy8gQ2FsY3VsYXRlIG5u eg0KICAgaW50IG5uej0wOw0KICAgZm9yIChpbnQgaj0gMDsgajxuIDsgaisr ICkgDQogICAgICBmb3IgKGludCBpPSAwOyBpPG0gOyBpKysgKSANCiAgICAg ICAgIGlmIChBKGksaikgIT0wKSBubnorKzsNCiAgICAgICANCiAgIGlmIChu bno9PTApIGVycm9yKCJzcGFyc2U6IGNhbid0IGhhbmRsZSBlbXB0eSBzcGFy c2UgKHlldCkiKTsNCg0KICAgZG91YmxlICogY29lZiA9IG5ldyBkb3VibGVb bm56XTsNCiAgIGludCAgICAqIHJpZHggPSBuZXcgaW50ICAgW25uel07DQog ICBpbnQgICAgKiBjaWR4ID0gbmV3IGludCAgIFtuKzFdOyAgIGNpZHhbMF09 IDA7DQoNCiAgIGludCBjeD0wOw0KICAgZm9yIChpbnQgaj0gMDsgajxuIDsg aisrICkgew0KICAgICAgZm9yIChpbnQgaT0gMDsgaTxtIDsgaSsrICkgew0K ICAgICAgICAgZG91YmxlIHRtcHZhbD0gQShpLGopOw0KICAgICAgICAgaWYg KHRtcHZhbCAhPSAwKSB7DQogICAgICAgICAgICByaWR4WyBjeCBdPSBpOw0K ICAgICAgICAgICAgY29lZlsgY3ggXT0gdG1wdmFsOw0KICAgICAgICAgICAg Y3grKzsNCiAgICAgICAgIH0gLy8gaWYgdG1wdmFsDQogICAgICB9IC8vIGZv ciBpDQogICAgICBjaWR4W2orMV09IGN4Ow0KICAgfSAvLyBmb3IgaQ0KDQog ICBTdXBlck1hdHJpeCBTOw0KICAgZENyZWF0ZV9Db21wQ29sX01hdHJpeCgm UywgbSwgbiwgY3gsDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvZWYs IHJpZHgsIGNpZHgsIE5DLCBfRCwgR0UpOw0KICAgcmV0dXJuIFM7DQp9DQoN Ci8vIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIHNvcnQgaW4gbWFrZV9zcGFy c2UNCnR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyB2YWw7DQogICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaWR4OyB9IHNvcnRfaWR4bDsg ICANCnN0YXRpYyBpbmxpbmUgaW50DQpzaWR4bF9jb21wKGNvbnN0IHZvaWQg KmksY29uc3Qgdm9pZCpqICkNCnsNCiAgIHJldHVybiAoKChzb3J0X2lkeGwg KikgaSktPnZhbCkgLSAoKChzb3J0X2lkeGwgKikgaiktPnZhbCkgOw0KfQ0K DQovLyBhc3NlbWJsZSBhIHNwYXJzZSBtYXRyaXggZnJvbSBlbGVtZW50cw0K Ly8gICBjYWxsZWQgYnkgPiAxIGFyZ3MgZm9yIHNwYXJzZQ0KLy8gTk9URTog aW5kZXggdmVjdG9ycyBhcmUgMSBiYXNlZCENCnN0YXRpYyBTdXBlck1hdHJp eCBhc3NlbWJsZV9zcGFyc2UoIGludCBuLCBpbnQgbSwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIENvbHVtblZlY3RvciYgY29lZkEs DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2x1bW5W ZWN0b3ImIHJpZHhBLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQ29sdW1uVmVjdG9yJiBjaWR4QSApIHsNCiAgIERFQlVHTVNHKCJz cGFyc2UgLSBhc3NlbWJsZV9zcGFyc2UiKTsNCg0KICAgaW50ICBubno9ICgg cmlkeEEubGVuZ3RoKCkgPiBjaWR4QS5sZW5ndGgoKSApID8NCiAgICAgICAg ICAgICAgIHJpZHhBLmxlbmd0aCgpIDogY2lkeEEubGVuZ3RoKCk7DQogICBi b29sIHJpX3NjYWxhciA9IChyaWR4QS5sZW5ndGgoKSA9PSAxKTsNCiAgIGJv b2wgY2lfc2NhbGFyID0gKGNpZHhBLmxlbmd0aCgpID09IDEpOw0KICAgYm9v bCBjZl9zY2FsYXIgPSAoY29lZkEubGVuZ3RoKCkgPT0gMSk7DQoNCiAgIHNv cnRfaWR4bCBpZHhbIG5ueiBdOw0KICAgZm9yIChpbnQgaT0wOyBpPG5uejsg aSsrKSB7DQogICAgICBpZHhbaV0udmFsID0gKHVuc2lnbmVkIGxvbmcpICgN CiAgICAgICAgICAgICAgICAoIHJpX3NjYWxhciA/IHJpZHhBKDApIDogcmlk eEEoaSkgKSAtIDEgKw0KICAgICAgICAgICBtICogKCggY2lfc2NhbGFyID8g Y2lkeEEoMCkgOiBjaWR4QShpKSApIC0gMSkgKTsgDQogICAgICBpZHhbaV0u aWR4ID0gaTsNCiAgIH0NCg0KICAgcXNvcnQoIGlkeCwgbm56LCBzaXplb2Yo c29ydF9pZHhsKSwgc2lkeGxfY29tcCApOw0KICAgDQogICBkb3VibGUgKiBj b2VmWCA9IG5ldyBkb3VibGUgW25uel07DQogICBpbnQgICAgKiByaWR4WCA9 IG5ldyBpbnQgICAgW25uel07DQogICBpbnQgICAgKiBjaWR4WCA9IG5ldyBp bnQgICAgW24rMV07IGNpZHhYWzBdPSAwOw0KDQogICBpbnQgY3g9IDA7DQog ICBmb3IgKGludCBpPTA7IGk8bm56OyBpKyspIHsNCiAgICAgIHVuc2lnbmVk IGxvbmcgaWk9IChpbnQpIGlkeFtpXS5pZHg7DQogICAgICBjb2VmWFtpXT0g ICAgICAoIGNmX3NjYWxhciA/IGNvZWZBKDApIDogY29lZkEoaWkpICk7DQov LyBiZSBjYXJlZnVsIGFib3V0IHdoZW4gd2UgY29udmVydCByaSB0byBpbnQs DQovLyBvdGhlcndpc2UgdGhlIG1heGltdW0gbWF0cml4IHNpemUgd2lsbCBi ZSBtKm4gPCBtYXhpbnQvMg0KICAgICAgZG91YmxlIHJpICA9ICAgKCByaV9z Y2FsYXIgPyByaWR4QSgwKSA6IHJpZHhBKGlpKSApIC0gMSA7DQogICAgICBy aWR4WFtpXT0gKGludCkgKHJpIC0gKChpbnQpIChyaS9tKSkqbSApIDsNCiAg ICAgIGludCBjaSAgPSAoaW50KSggY2lfc2NhbGFyID8gY2lkeEEoMCkgOiBj aWR4QShpaSkgKSAtIDEgOw0KLy8gICAgcHJpbnRmKCJjaT0lZCwgcmk9JWQg Y2Y9JWYgaWk9JWxkXG4iLCBjaSxyaWR4WFtpXSxjb2VmWFtpXSxpaSk7DQog ICAgICB3aGlsZSggY3ggPCBjaSApIGNpZHhYWysrY3hdPSBpOw0KICAgfSAv L2ZvciBpDQovLyBGaWxsIHVwIGFueSBleHRyYSBzcGFjZSBpbiBjaWR4WA0K ICAgd2hpbGUoIGN4IDwgbiApIGNpZHhYWysrY3hdPSBubno7DQoNCiAgIFN1 cGVyTWF0cml4IFM7DQogICBkQ3JlYXRlX0NvbXBDb2xfTWF0cml4KCZTLCBt LCBuLCBubnosDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvZWZYLCBy aWR4WCwgY2lkeFgsIE5DLCBfRCwgR0UpOw0KICAgcmV0dXJuIFM7DQp9ICAg ICAgDQoNCkRFRlVOX0RMRCAoc3BhcnNlLCBhcmdzLCAsDQogICJzcGFyc2Vf dmFsID0gc3BhcnNlICguLi4pXG5cDQpTUEFSU0U6IGNyZWF0ZSBhIHNwYXJz ZSBtYXRyaXhcblwNClxuXA0Kc3BhcnNlIGNhbiBiZSBjYWxsZWQgaW4gdGhl IGZvbGxvd2luZyB3YXlzOlxuXA0KXG5cDQoxOiBTID0gc3BhcnNlKEEpLCB3 aGVyZSAnQScgaXMgYSBmdWxsIG1hdHJpeFxuXA0KXG5cDQoyOiBTID0gc3Bh cnNlKGksaixzLG0sbixuem1heCksIHdoZXJlXG5cDQogICAgICAgIGksaiAg IGFyZSBpbnRlZ2VyIGluZGV4IHZlY3RvcnMgKDEgeCBubnopXG5cDQogICAg ICAgIHMgICAgIGlzIHRoZSB2ZWN0b3Igb2YgcmVhbCBvciBjb21wbGV4IGVu dHJpZXMgKDEgeCBubnopXG5cDQogICAgICAgIG0sbiAgIGFyZSB0aGUgc2Nh bGFyIGRpbWVudGlvbnMgb2YgU1xuXA0KICAgICAgICBuem1heCBpcyBpZ25v cmVkIChmb3IgY29tcGF0YWJpbGl0eSB3aXRoIE1hdGxhYilcblwNClxuXA0K MzogUyA9IHNwYXJzZShpLGoscyxtLG4pLCAgICAgc2FtZSBhcyAoMikgYWJv dmVcblwNClxuXA0KNDogUz0gIHNwYXJzZShpLGoscyksICAgICAgICAgdXNl cyBtPW1heChpKSwgbj1tYXgoailcblwNClxuXA0KNTogUz0gIHNwYXJzZSht LG4pLCAgICAgICAgICAgZG9lcyBzcGFyc2UoW10sW10sW10sbSxuLDApXG5c DQpcblwNCnMsIGFuZCBpIG9yIGogbWF5IGJlIHNjYWxhcnMsIGluIHdoaWNo IGNhc2UgdGhleSBhcmUgZXhwYW5kZWRcblwNCnNvIHRoZXkgYWxsIGhhdmUg dGhlIHNhbWUgbGVuZ3RoICIpDQp7DQoNCiAgc3RhdGljIGJvb2wgdHlwZV9s b2FkZWQgPSBmYWxzZTsNCg0KICBpZiAoISB0eXBlX2xvYWRlZCkNCiAgICB7 DQogICAgICBvY3RhdmVfc3BhcnNlOjpyZWdpc3Rlcl90eXBlICgpOw0KDQoj aWZkZWYgVkVSQk9TRQ0KICAgICAgY291dCA8PCAiaW5zdGFsbGluZyBzcGFy c2UgdHlwZSBhdCB0eXBlLWlkID0gIg0KCSAgIDw8IG9jdGF2ZV9zcGFyc2U6 OnN0YXRpY190eXBlX2lkICgpIDw8ICJcbiI7DQojZW5kaWYgICAgICAgICAg DQoNCi8qDQogICAgICBJTlNUQUxMX0JJTk9QIChkaXYsIG9jdGF2ZV9zcGFy c2UsIG9jdGF2ZV9zcGFyc2UsIGRpdik7DQogICAgICBJTlNUQUxMX0JJTk9Q IChsZGl2LCBvY3RhdmVfc3BhcnNlLCBvY3RhdmVfc3BhcnNlLCBsZGl2KTsN CiAgICAgIElOU1RBTExfQklOT1AgKGx0LCBvY3RhdmVfc3BhcnNlLCBvY3Rh dmVfc3BhcnNlLCBsdCk7DQogICAgICBJTlNUQUxMX0JJTk9QIChsZSwgb2N0 YXZlX3NwYXJzZSwgb2N0YXZlX3NwYXJzZSwgbGUpOw0KICAgICAgSU5TVEFM TF9CSU5PUCAoZXEsIG9jdGF2ZV9zcGFyc2UsIG9jdGF2ZV9zcGFyc2UsIGVx KTsNCiAgICAgIElOU1RBTExfQklOT1AgKGdlLCBvY3RhdmVfc3BhcnNlLCBv Y3RhdmVfc3BhcnNlLCBnZSk7DQogICAgICBJTlNUQUxMX0JJTk9QIChndCwg b2N0YXZlX3NwYXJzZSwgb2N0YXZlX3NwYXJzZSwgZ3QpOw0KICAgICAgSU5T VEFMTF9CSU5PUCAobmUsIG9jdGF2ZV9zcGFyc2UsIG9jdGF2ZV9zcGFyc2Us IG5lKTsNCiAgICAgIElOU1RBTExfQklOT1AgKGVsX2Rpdiwgb2N0YXZlX3Nw YXJzZSwgb2N0YXZlX3NwYXJzZSwgZWxfZGl2KTsNCiAgICAgIElOU1RBTExf QklOT1AgKGVsX2xkaXYsIG9jdGF2ZV9zcGFyc2UsIG9jdGF2ZV9zcGFyc2Us IGVsX2xkaXYpOw0KICAgICAgSU5TVEFMTF9CSU5PUCAoZWxfYW5kLCBvY3Rh dmVfc3BhcnNlLCBvY3RhdmVfc3BhcnNlLCBlbF9hbmQpOw0KICAgICAgSU5T VEFMTF9CSU5PUCAoZWxfb3IsIG9jdGF2ZV9zcGFyc2UsIG9jdGF2ZV9zcGFy c2UsIGVsX29yKTsNCiAgICAgIElOU1RBTExfQklOT1AgKGRpdiwgb2N0YXZl X3NwYXJzZSwgb2N0YXZlX3NjYWxhciwgaV9zX2Rpdik7DQoNCiAgICAgIElO U1RBTExfTkNVTk9QIChpbmNyLCBvY3RhdmVfc3BhcnNlLCBpbmNyKTsNCiAg ICAgIElOU1RBTExfTkNVTk9QIChkZWNyLCBvY3RhdmVfc3BhcnNlLCBkZWNy KTsNCiovICAgICAgDQogICAgICBJTlNUQUxMX1VOT1AgICAodHJhbnNwb3Nl LCBvY3RhdmVfc3BhcnNlLCB0cmFuc3Bvc2UpOw0KICAgICAgSU5TVEFMTF9V Tk9QICAgKGhlcm1pdGlhbiwgb2N0YXZlX3NwYXJzZSwgaGVybWl0aWFuKTsN CiAgICAgIElOU1RBTExfVU5PUCAgICh1bWludXMsICAgIG9jdGF2ZV9zcGFy c2UsIHVtaW51cyk7DQogICAgICBJTlNUQUxMX1VOT1AgICAobm90LCAgICAg ICBvY3RhdmVfc3BhcnNlLCBub3QpOw0KDQogICAgICBJTlNUQUxMX0JJTk9Q IChlcSwgICAgICAgb2N0YXZlX3NwYXJzZSwgb2N0YXZlX3NwYXJzZSwgc19z X2VxKTsNCiAgICAgIElOU1RBTExfQklOT1AgKGVxLCAgICAgICBvY3RhdmVf c3BhcnNlLCBvY3RhdmVfbWF0cml4LCBzX2ZfZXEpOw0KICAgICAgSU5TVEFM TF9CSU5PUCAoZXEsICAgICAgIG9jdGF2ZV9tYXRyaXgsIG9jdGF2ZV9zcGFy c2UsIGZfc19lcSk7DQogICAgICBJTlNUQUxMX0JJTk9QIChsZGl2LCAgICAg b2N0YXZlX3NwYXJzZSwgb2N0YXZlX21hdHJpeCwgc19mX2xkaXYpOw0KICAg ICAgSU5TVEFMTF9CSU5PUCAobGRpdiwgICAgIG9jdGF2ZV9tYXRyaXgsIG9j dGF2ZV9zcGFyc2UsIGZfc19sZGl2KTsNCiAgICAgIElOU1RBTExfQklOT1Ag KGFkZCwgICAgICBvY3RhdmVfc3BhcnNlLCBvY3RhdmVfc3BhcnNlLCBzX3Nf YWRkKTsNCiAgICAgIElOU1RBTExfQklOT1AgKGFkZCwgICAgICBvY3RhdmVf bWF0cml4LCBvY3RhdmVfc3BhcnNlLCBmX3NfYWRkKTsNCiAgICAgIElOU1RB TExfQklOT1AgKGFkZCwgICAgICBvY3RhdmVfc3BhcnNlLCBvY3RhdmVfbWF0 cml4LCBzX2ZfYWRkKTsNCiAgICAgIElOU1RBTExfQklOT1AgKHN1YiwgICAg ICBvY3RhdmVfc3BhcnNlLCBvY3RhdmVfc3BhcnNlLCBzX3Nfc3ViKTsNCiAg ICAgIElOU1RBTExfQklOT1AgKHN1YiwgICAgICBvY3RhdmVfbWF0cml4LCBv Y3RhdmVfc3BhcnNlLCBmX3Nfc3ViKTsNCiAgICAgIElOU1RBTExfQklOT1Ag KHN1YiwgICAgICBvY3RhdmVfc3BhcnNlLCBvY3RhdmVfbWF0cml4LCBzX2Zf c3ViKTsNCiAgICAgIElOU1RBTExfQklOT1AgKGVsX211bCwgICBvY3RhdmVf bWF0cml4LCBvY3RhdmVfc3BhcnNlLCBmX3NfZWxfbXVsKTsNCiAgICAgIElO U1RBTExfQklOT1AgKGVsX211bCwgICBvY3RhdmVfc3BhcnNlLCBvY3RhdmVf bWF0cml4LCBzX2ZfZWxfbXVsKTsNCiAgICAgIElOU1RBTExfQklOT1AgKGVs X211bCwgICBvY3RhdmVfc3BhcnNlLCBvY3RhdmVfc3BhcnNlLCBzX3NfZWxf bXVsKTsNCiAgICAgIElOU1RBTExfQklOT1AgKG11bCwgICAgICBvY3RhdmVf c3BhcnNlLCBvY3RhdmVfbWF0cml4LCBzX2ZfbXVsKTsNCiAgICAgIElOU1RB TExfQklOT1AgKG11bCwgICAgICBvY3RhdmVfbWF0cml4LCBvY3RhdmVfc3Bh cnNlLCBmX3NfbXVsKTsNCiAgICAgIElOU1RBTExfQklOT1AgKG11bCwgICAg ICBvY3RhdmVfc3BhcnNlLCBvY3RhdmVfc3BhcnNlLCBzX3NfbXVsKTsNCiAg IH0NCg0KICAgb2N0YXZlX3ZhbHVlIHJldHZhbDsNCg0KICAgaW50IG5hcmdp bj0gYXJncy5sZW5ndGgoKTsNCiAgIGlmIChuYXJnaW4gPCAxKSB7DQogICAg ICBwcmludF91c2FnZSAoInNwYXJzZSIpOw0KICAgICAgcmV0dXJuIHJldHZh bDsNCiAgIH0gZWxzZQ0KICAgaWYgKG5hcmdpbiA9PSAxKSB7DQogICAgICBN YXRyaXggQSA9IGFyZ3MoMCkubWF0cml4X3ZhbHVlICgpOw0KICAgICAgcmV0 dmFsID0gbmV3IG9jdGF2ZV9zcGFyc2UgKCBtYXRyaXhfdG9fc3BhcnNlKCBB ICkgKTsNCiAgIH0NCiAgIGVsc2Ugew0KICAgICAgaW50IG09MCxuPTA7DQog ICAgICBDb2x1bW5WZWN0b3IgY29lZkEsIHJpZHhBLCBjaWR4QTsNCg0KICAg ICAgaWYgKG5hcmdpbiA9PSAyKSB7DQogICAgICAgICBtPSAoaW50KSBhcmdz KDApLmRvdWJsZV92YWx1ZSgpOw0KICAgICAgICAgbj0gKGludCkgYXJncygx KS5kb3VibGVfdmFsdWUoKTsNCiAgICAgICAgIGNpZHhBID0gQ29sdW1uVmVj dG9yICgpOw0KICAgICAgICAgcmlkeEEgPSBDb2x1bW5WZWN0b3IgKCk7DQog ICAgICAgICBjb2VmQSA9IENvbHVtblZlY3RvciAoKTsNCiAgICAgIH0NCiAg ICAgIGVsc2Ugew0KICAgICAgICAgcmlkeEE9IGFyZ3MoMCkudmVjdG9yX3Zh bHVlKCk7DQogICAgICAgICBjaWR4QT0gYXJncygxKS52ZWN0b3JfdmFsdWUo KTsNCiAgICAgICAgIGNvZWZBPSBhcmdzKDIpLnZlY3Rvcl92YWx1ZSgpOw0K ICAgICAgICAgaWYgKG5hcmdpbiA9PSAzKSB7DQogICAgICAgICAgICBtPSAo aW50KSByaWR4QS5tYXgoKTsNCiAgICAgICAgICAgIG49IChpbnQpIGNpZHhB Lm1heCgpOw0KICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIG09IChp bnQpIGFyZ3MoMykuZG91YmxlX3ZhbHVlKCk7DQogICAgICAgICAgICBuPSAo aW50KSBhcmdzKDQpLmRvdWJsZV92YWx1ZSgpOw0KICAgICAgICAgfQ0KICAg ICAgfQ0KICAgICAgcmV0dmFsID0gbmV3IG9jdGF2ZV9zcGFyc2UgKA0KICAg ICAgICAgICAgICAgYXNzZW1ibGVfc3BhcnNlKCBuLCBtLCBjb2VmQSwgcmlk eEEsIGNpZHhBICkgKTsNCiAgIH0NCg0KICAgcmV0dXJuIHJldHZhbDsNCn0N Cg0KREVGVU5fRExEIChmdWxsLCBhcmdzLCAsDQoiRk09IGZ1bGwgKFNNKVxu Ig0KIiByZXR1cm5zIGEgZnVsbCBzdG9yYWdlIG1hdHJpeCBmcm9tIGEgc3Bh cnNlIG9uZSIpDQp7DQogIG9jdGF2ZV92YWx1ZV9saXN0IHJldHZhbDsNCg0K ICBpZiAoYXJncy5sZW5ndGgoKSA8IDEpIHsNCiAgICAgcHJpbnRfdXNhZ2Ug KCJmdWxsIik7DQogICAgIHJldHVybiByZXR2YWw7DQogIH0NCg0KICBpZiAo YXJncygwKS50eXBlX25hbWUgKCkgPT0gInNwYXJzZSIpIHsNCiAgICAgY29u c3Qgb2N0YXZlX3ZhbHVlJiByZXAgPSBhcmdzKDApLmdldF9yZXAgKCk7DQoN CiAgICAgTWF0cml4IE0gPSAoKGNvbnN0IG9jdGF2ZV9zcGFyc2UmKSByZXAp IC4gbWF0cml4X3ZhbHVlICgpOw0KICAgICByZXR2YWwoMCk9IE07DQogIH0g ZWxzZQ0KICBpZiAoYXJncygwKS50eXBlX25hbWUgKCkgPT0gIm1hdHJpeCIp IHsNCiAgICAgcmV0dmFsKDApPSBhcmdzKDApLm1hdHJpeF92YWx1ZSgpOw0K ICB9IGVsc2UNCiAgICBncmlwZV93cm9uZ190eXBlX2FyZyAoImZ1bGwiLCBh cmdzKDApKTsNCg0KICByZXR1cm4gcmV0dmFsOw0KfQ0KDQpERUZVTl9ETEQg KG5ueiwgYXJncywgLA0KImludD0gbm56IChTTSlcbiINCiIgcmV0dXJucyBu dW1iZXIgb2Ygbm9uIHplcm8gZWxlbWVudHMgaW4gU00iKQ0Kew0KICBvY3Rh dmVfdmFsdWVfbGlzdCByZXR2YWw7DQoNCiAgaWYgKGFyZ3MubGVuZ3RoKCkg PCAxKSB7DQogICAgIHByaW50X3VzYWdlICgibm56Iik7DQogICAgIHJldHVy biByZXR2YWw7DQogIH0NCg0KICBpZiAoYXJncygwKS50eXBlX25hbWUgKCkg PT0gInNwYXJzZSIpIHsNCiAgICAgY29uc3Qgb2N0YXZlX3ZhbHVlJiByZXAg PSBhcmdzKDApLmdldF9yZXAgKCk7DQoNCiAgICAgcmV0dmFsKDApPSAoZG91 YmxlKSAoKGNvbnN0IG9jdGF2ZV9zcGFyc2UmKSByZXApIC4gbm56ICgpOw0K ICB9DQogIGVsc2Ugew0KICAgICBjb25zdCBNYXRyaXggTSA9IGFyZ3MoMCku bWF0cml4X3ZhbHVlKCk7DQogICAgIGludCBubno9IDA7DQogICAgIGZvcigg aW50IGk9MDsgaTwgTS5yb3dzKCk7IGkrKykNCiAgICAgICAgZm9yKCBpbnQg aj0wOyBqPCBNLmNvbHMoKTsgaisrKQ0KICAgICAgICAgICBpZiAoTShpLGop IT0wKSBubnorKzsNCiAgICAgcmV0dmFsKDApPSAoZG91YmxlKSBubno7DQog IH0NCg0KICByZXR1cm4gcmV0dmFsOw0KfQ0KDQovLw0KLy8gVGhpcyByb3V0 aW5lIGNvbnZlcnRzIGZyb20gdGhlIFN1cGVyTm9kYWwgTWF0cmljZXMNCi8v IEwsVSB0byB0aGUgQ29tcCBDb2wgZm9ybWF0Lg0KLy8NCi8vIEl0IGlzIG1v ZGlmaWVkIGZyb20gU3VwZXJMVS9NQVRMQUIvbWV4c3VwZXJsdS5jDQovLw0K DQpzdGF0aWMgdm9pZA0KTFVleHRyYWN0KFN1cGVyTWF0cml4ICpMLCBTdXBl ck1hdHJpeCAqVSwgZG91YmxlICpMdmFsLCBpbnQgKkxyb3csDQogICAgICAg ICAgaW50ICpMY29sLCBkb3VibGUgKlV2YWwsIGludCAqVXJvdywgaW50ICpV Y29sLCBpbnQgKnNubnpMLA0KICAgICAgICAgIGludCAqc25uelUpDQp7DQog ICBERUJVR01TRygiTFVleHRyYWN0Iik7DQogICBpbnQgICAgICAgICBpLCBq LCBrOw0KICAgaW50ICAgICAgICAgdXBwZXI7DQogICBpbnQgICAgICAgICBm c3VwYywgaXN0YXJ0LCBuc3VwcjsNCiAgIGludCAgICAgICAgIGxhc3RsID0g MCwgbGFzdHUgPSAwOw0KICAgZG91YmxlICAgICAgKlNOcHRyOw0KDQogICBT Q2Zvcm1hdCAqIExzdG9yZSA9IChTQ2Zvcm1hdCAqKSBMLT5TdG9yZTsNCiAg IE5DZm9ybWF0ICogVXN0b3JlID0gKE5DZm9ybWF0ICopIFUtPlN0b3JlOw0K ICAgTGNvbFswXSA9IDA7DQogICBVY29sWzBdID0gMDsNCiAgIA0KICAgLyog Zm9yIGVhY2ggc3VwZXJub2RlICovDQogICBmb3IgKGsgPSAwOyBrIDw9IExz dG9yZS0+bnN1cGVyOyArK2spIHsNCiAgICAgICANCiAgICAgICBmc3VwYyA9 IExfRlNUX1NVUEMoayk7DQogICAgICAgaXN0YXJ0ID0gTF9TVUJfU1RBUlQo ZnN1cGMpOw0KICAgICAgIG5zdXByID0gTF9TVUJfU1RBUlQoZnN1cGMrMSkg LSBpc3RhcnQ7DQogICAgICAgdXBwZXIgPSAxOw0KICAgICAgIA0KICAgICAg IC8qIGZvciBlYWNoIGNvbHVtbiBpbiB0aGUgc3VwZXJub2RlICovDQogICAg ICAgZm9yIChqID0gZnN1cGM7IGogPCBMX0ZTVF9TVVBDKGsrMSk7ICsraikg ew0KICAgICAgICAgICBTTnB0ciA9ICYoKGRvdWJsZSopTHN0b3JlLT5uenZh bClbTF9OWl9TVEFSVChqKV07DQoNCiAgICAgICAgICAgLyogRXh0cmFjdCBV ICovDQogICAgICAgICAgIGZvciAoaSA9IFVfTlpfU1RBUlQoaik7IGkgPCBV X05aX1NUQVJUKGorMSk7ICsraSkgew0KICAgICAgICAgICAgICAgVXZhbFts YXN0dV0gPSAoKGRvdWJsZSopVXN0b3JlLT5uenZhbClbaV07DQogICAgICAg ICAgICAgICAgLyogTWF0bGFiIGRvZXNuJ3QgbGlrZSBleHBsaWNpdCB6ZXJv LiAqLw0KICAgICAgICAgICAgICAgaWYgKFV2YWxbbGFzdHVdICE9IDAuMCkg VXJvd1tsYXN0dSsrXSA9IFVfU1VCKGkpOw0KICAgICAgICAgICB9DQogICAg ICAgICAgIGZvciAoaSA9IDA7IGkgPCB1cHBlcjsgKytpKSB7IC8qIHVwcGVy IHRyaWFuZ2xlIGluIHRoZSBzdXBlcm5vZGUgKi8NCiAgICAgICAgICAgICAg IFV2YWxbbGFzdHVdID0gU05wdHJbaV07DQogICAgICAgICAgICAgICAgLyog TWF0bGFiIGRvZXNuJ3QgbGlrZSBleHBsaWNpdCB6ZXJvLiAqLw0KICAgICAg ICAgICAgICAgaWYgKFV2YWxbbGFzdHVdICE9IDAuMCkgVXJvd1tsYXN0dSsr XSA9IExfU1VCKGlzdGFydCtpKTsNCiAgICAgICAgICAgfQ0KICAgICAgICAg ICBVY29sW2orMV0gPSBsYXN0dTsNCg0KICAgICAgICAgICAvKiBFeHRyYWN0 IEwgKi8NCiAgICAgICAgICAgTHZhbFtsYXN0bF0gPSAxLjA7IC8qIHVuaXQg ZGlhZ29uYWwgKi8NCiAgICAgICAgICAgTHJvd1tsYXN0bCsrXSA9IExfU1VC KGlzdGFydCArIHVwcGVyIC0gMSk7DQogICAgICAgICAgIGZvciAoaSA9IHVw cGVyOyBpIDwgbnN1cHI7ICsraSkgew0KICAgICAgICAgICAgICAgTHZhbFts YXN0bF0gPSBTTnB0cltpXTsNCiAgICAgICAgICAgICAgICAvKiBNYXRsYWIg ZG9lc24ndCBsaWtlIGV4cGxpY2l0IHplcm8uICovDQogICAgICAgICAgICAg ICBpZiAoTHZhbFtsYXN0bF0gIT0gMC4wKSBMcm93W2xhc3RsKytdID0gTF9T VUIoaXN0YXJ0K2kpOw0KICAgICAgICAgICB9DQogICAgICAgICAgIExjb2xb aisxXSA9IGxhc3RsOw0KDQogICAgICAgICAgICsrdXBwZXI7DQogICAgICAg ICAgIA0KICAgICAgIH0gLyogZm9yIGogLi4uICovDQogICAgICAgDQogICB9 IC8qIGZvciBrIC4uLiAqLw0KDQogICAqc25uekwgPSBsYXN0bDsNCiAgICpz bm56VSA9IGxhc3R1Ow0KfQ0KDQpzdGF0aWMgdm9pZA0Kc3BhcnNlX0xVX2Zh Y3QoU3VwZXJNYXRyaXggQSwNCiAgICAgICAgICAgICAgIFN1cGVyTWF0cml4 ICpMQywNCiAgICAgICAgICAgICAgIFN1cGVyTWF0cml4ICpVQywNCiAgICAg ICAgICAgICAgIGludCAqIHBlcm1fYywNCiAgICAgICAgICAgICAgIGludCAq IHBlcm1fciwgDQogICAgICAgICAgICAgICBpbnQgcGVybWNfc3BlYyApIA0K ew0KICAgREVCVUdNU0coInNwYXJzZV9MVV9mYWN0Iik7DQogICBpbnQgbSA9 IEEubnJvdzsNCiAgIGludCBuID0gQS5uY29sOw0KICAgY2hhciAgIHJlZmFj dFsxXSA9IHsnTid9Ow0KICAgZG91YmxlIHRocmVzaCAgICA9IDEuMDsgICAg IC8vIGRpYWdvbmFsIHBpdm90aW5nIHRocmVzaG9sZCANCiAgIGRvdWJsZSBk cm9wX3RvbCAgPSAwLjA7ICAgICAvLyBkcm9wIHRvbGVyYW5jZSBwYXJhbWV0 ZXIgDQogICBpbnQgICAgaW5mbzsNCiAgIGludCAgICBwYW5lbF9zaXplID0g c3BfaWVudigxKTsNCiAgIGludCAgICByZWxheCAgICAgID0gc3BfaWVudigy KTsNCiAgIGludCAgICBldHJlZVtuXTsNCiAgIFN1cGVyTWF0cml4IEFjOw0K ICAgU3VwZXJNYXRyaXggTCxVOw0KDQogICBTdGF0SW5pdChwYW5lbF9zaXpl LCByZWxheCk7DQoNCiAgIGRvX3Blcm1jKCBwZXJtY19zcGVjLCBwZXJtX2Ms IEEpOw0KICAgLy8gQXBwbHkgY29sdW1uIHBlcm0gdG8gQSBhbmQgY29tcHV0 ZSBldHJlZS4NCiAgIHNwX3ByZW9yZGVyKHJlZmFjdCwgJkEsIHBlcm1fYywg ZXRyZWUsICZBYyk7DQoNCiAgIGRnc3RyZihyZWZhY3QsICZBYywgdGhyZXNo LCBkcm9wX3RvbCwgcmVsYXgsIHBhbmVsX3NpemUsIGV0cmVlLA0KICAgICAg ICAgICBOVUxMLCAwLCBwZXJtX3IsIHBlcm1fYywgJkwsICZVLCAmaW5mbyk7 DQogICBpZiAoIGluZm8gPCAwICkNCiAgICAgIGVycm9yICgiTFUgZmFjdG9y aXphdGlvbiBlcnJvciIpOw0KDQogICBpbnQgICAgICBzbm56TCwgc25uelU7 DQoNCiAgIGludCAgICAgIG5uekwgPSAoKFNDZm9ybWF0KilMLlN0b3JlKS0+ bm56Ow0KICAgZG91YmxlICogTHZhbCA9IG5ldyBkb3VibGVbbm56TF07DQog ICBpbnQgICAgKiBMcm93ID0gbmV3ICAgIGludFtubnpMXTsNCiAgIGludCAg ICAqIExjb2wgPSBuZXcgICAgaW50W24rMSBdOw0KDQogICBpbnQgICAgICBu bnpVID0gKChOQ2Zvcm1hdCopVS5TdG9yZSktPm5uejsNCiAgIGRvdWJsZSAq IFV2YWwgPSBuZXcgZG91YmxlW25uelVdOw0KICAgaW50ICAgICogVXJvdyA9 IG5ldyAgICBpbnRbbm56VV07DQogICBpbnQgICAgKiBVY29sID0gbmV3ICAg IGludFtuKzEgXTsNCg0KICAgTFVleHRyYWN0KCZMLCAmVSwgTHZhbCwgTHJv dywgTGNvbCwgVXZhbCwgVXJvdywgVWNvbCwgJnNubnpMLCAmc25uelUpOw0K ICAgZENyZWF0ZV9Db21wQ29sX01hdHJpeChMQywgbSwgbiwgbm56TCwgTHZh bCwgTHJvdywgTGNvbCwgTkMsIF9ELCBHRSk7DQogICBkQ3JlYXRlX0NvbXBD b2xfTWF0cml4KFVDLCBtLCBuLCBubnpVLCBVdmFsLCBVcm93LCBVY29sLCBO QywgX0QsIEdFKTsNCg0KICAgRGVzdHJveV9TdXBlck1hdHJpeF9TdG9yZSgg JkwgKTsNCiAgIERlc3Ryb3lfU3VwZXJNYXRyaXhfU3RvcmUoICZVICk7DQog ICBEZXN0cm95X1N1cGVyTWF0cml4X1N0b3JlKCAmQWMgKTsNCg0KfSAvLyBz cGFyc2VfTFVfZmFjdCgNCg0KREVGVU5fRExEIChzcGx1LCBhcmdzLCBuYXJn b3V0ICwNCiAgIltMLFUsUHJvdywgUGNvbF0gPSBzcGx1KCBhICxwKTtcblwN ClNQTFUgOiBTcGFyc2UgTWF0cml4IExVIGZhY3Rvcml6YXRpb25cblwNClxu XA0KV2l0aCBvbmUgaW5wdXQgYW5kIHR3byBvciB0aHJlZSBvdXRwdXRzLCBT UExVIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgTFUsXG5cDQpFeGNlcHQgdGhh dCByb3cgYW5kIGNvbHVtbiBwZXJtdXRhdGlvbnMgYXJlIHJldHVybmVkXG5c DQpcblwNCltMLFUsUHIsUGNdID0gc3BsdShBKSBcblwNCiAgICAgICAgICBy ZXR1cm5zIHVuaXQgbG93ZXIgdHJpYW5ndWxhciBMLCB1cHBlciB0cmlhbmd1 bGFyIFUsXG5cDQogICAgICAgICAgYW5kIHBlcm11dGF0aW9uIG1hdHJpY2Vz IFByLFBjIHdpdGggUHIqQSpQYycgPSBMKlUuXG5cDQpbTHAsVXBdID0gc3Vw ZXJsdShBKSByZXR1cm5zIHBlcm11dGVkIHRyaWFuZ3VsYXIgTCBhbmQgdXBw ZXIgdHJpYW5ndWxhciBVXG5cDQogICAgICAgICAgd2l0aCBBID0gTCpVLlxu XA0KICAgICAgICAgIGhlcmUgUHIqTHAgPSBMICBhbmQgVXAqUGMgPSBVDQpc blwNCk5vdGU6IDJuZCBpbnB1dCBmdW5jaW9uYWxpdHkgaGFzIG5vdCBiZWVu IHZlcmlmaWVkXG5cDQpXaXRoIGEgc2Vjb25kIGlucHV0LCB0aGUgY29sdW1u cyBvZiBBIGFyZSBwZXJtdXRlZCBiZWZvcmUgZmFjdG9yaW5nOlxuXA0KXG5c DQpbTCxVLFBdID0gc3VwZXJsdShBLHBzcGFyc2UpIHJldHVybnMgdHJpYW5n dWxhciBMIGFuZCBVIGFuZCBwZXJtdXRhdGlvblxuXA0KICAgICAgICAgIHBy b3cgd2l0aCBQKkEoOixwc3BhcnNlKSA9IEwqVS5cblwNCltMLFVdID0gc3Vw ZXJsdShBLHBzcGFyc2UpIHJldHVybnMgcGVybXV0ZWQgdHJpYW5ndWxhciBM IGFuZCB0cmlhbmd1bGFyIFVcblwNCiAgICAgICAgICB3aXRoIEEoOixwc3Bh cnNlKSA9IEwqVS5cblwNCkhlcmUgcHNwYXJzZSB3aWxsIG5vcm1hbGx5IGJl IGEgdXNlci1zdXBwbGllZCBwZXJtdXRhdGlvbiBtYXRyaXggb3IgdmVjdG9y XG5cDQp0byBiZSBhcHBsaWVkIHRvIHRoZSBjb2x1bW5zIG9mIEEgZm9yIHNw YXJzaXR5LiBcblwNCiAgIikNCnsNCiAgIG9jdGF2ZV92YWx1ZV9saXN0IHJl dHZhbDsNCiAgIG9jdGF2ZV92YWx1ZSB0bXA7DQogICBpbnQgbmFyZ2luID0g YXJncy5sZW5ndGggKCk7DQoNCiAgIGlmIChhcmdzLmxlbmd0aCgpIDwgMSkg ew0KICAgICAgcHJpbnRfdXNhZ2UgKCJzcGx1Iik7DQogICAgICByZXR1cm4g cmV0dmFsOw0KICAgfQ0KIA0KICAgaWYgKGFyZ3MoMCkudHlwZV9uYW1lICgp ID09ICJzcGFyc2UiKSB7DQogICAgICBjb25zdCBvY3RhdmVfdmFsdWUmIHJl cCA9IGFyZ3MoMCkuZ2V0X3JlcCAoKTsNCiANCiAgICAgIFN1cGVyTWF0cml4 IEEgPSAoKGNvbnN0IG9jdGF2ZV9zcGFyc2UmKSByZXApIC4gc3VwZXJfbWF0 cml4ICgpOw0KICAgICAgU3VwZXJNYXRyaXggTCwgVTsNCiAgICAgIGludCBt ID0gQS5ucm93Ow0KICAgICAgaW50IG4gPSBBLm5jb2w7DQogICAgICBpZiAo bSAhPSBuKQ0KICAgICAgICAgZXJyb3IoIklucHV0IG1hdHJpeCBtdXN0IGJl IHNxdWFyZSIpOw0KDQogICAgICBpbnQgcGVybV9jW25dOw0KICAgICAgaW50 IHBlcm1jX3NwZWM9MzsNCiAgICAgIGlmIChuYXJnaW4gPT0yKSB7DQogICAg ICAgICBDb2x1bW5WZWN0b3IgcGVybWNpZHggPSBhcmdzKDEpLnZlY3Rvcl92 YWx1ZSgpOw0KICAgICAgICAgZm9yKCBpbnQgaT0gMDsgaTwgbiA7IGkrKyAp IA0KICAgICAgICAgICAgcGVybV9jW2ldPSAoaW50KSBwZXJtY2lkeChpKSAt IDE7DQogICAgICAgICBwZXJtY19zcGVjPSAtMTsgLy9wZXJtYyBpcyBwZXJz ZWxlY3RlZA0KICAgICAgfQ0KDQogICAgICBpbnQgcGVybV9yW21dOw0KICAg ICAgc3BhcnNlX0xVX2ZhY3QoIEEsICZMLCAmVSwgcGVybV9jLCBwZXJtX3Is IHBlcm1jX3NwZWMpOw0KDQogICAgICBvY3RhdmVfdmFsdWUgTFM9IG5ldyBv Y3RhdmVfc3BhcnNlKCBMICk7DQogICAgICBvY3RhdmVfdmFsdWUgVVM9IG5l dyBvY3RhdmVfc3BhcnNlKCBVICk7DQoNCi8vIEJ1aWxkIHRoZSBwZXJtdXRh dGlvbiBtYXRyaXgNCi8vICByZW1lbWJlciB0byBhZGQgMSBiZWNhdXNlIGFz c2VtYmxlX3NwYXJzZSBpcyAxIGJhc2VkDQogICAgICBDb2x1bW5WZWN0b3Ig cmlkeFByKG0pLCBjaWR4UHIobSksIGNvZWZQcihtKTsNCiAgICAgIGZvciAo aW50IGk9MDsgaTxtOyBpKyspIHsNCiAgICAgICAgIHJpZHhQcihpKT0gKGRv dWJsZSkgaSArIDE7DQogICAgICAgICBjaWR4UHIoaSk9IChkb3VibGUpIHBl cm1fcltpXSArIDE7IA0KICAgICAgICAgY29lZlByKGkpPSAxLjA7DQogICAg ICB9DQoNCiAgICAgIENvbHVtblZlY3RvciByaWR4UGMobiksIGNpZHhQYyhu KSwgY29lZlBjKG4pOw0KICAgICAgZm9yIChpbnQgaT0wOyBpPG07IGkrKykg ew0KICAgICAgICAgcmlkeFBjKGkpPSAoZG91YmxlKSBpICsgMTsNCiAgICAg ICAgIGNpZHhQYyhpKT0gKGRvdWJsZSkgcGVybV9jW2ldICsgMTsgDQogICAg ICAgICBjb2VmUGMoaSk9IDEuMDsNCiAgICAgIH0NCiAgICAgIA0KICAgICAg aWYgKG5hcmdvdXQgPT0yICkgew0KICAgICAgICAgb2N0YXZlX3ZhbHVlIFBy VD0gbmV3IG9jdGF2ZV9zcGFyc2UgKA0KICAgICAgICAgICAgICAgYXNzZW1i bGVfc3BhcnNlKCBtLCBtLCBjb2VmUHIsIHJpZHhQciwgY2lkeFByICkgKTsN CiAgICAgICAgIG9jdGF2ZV92YWx1ZSBQYyA9IG5ldyBvY3RhdmVfc3BhcnNl ICgNCiAgICAgICAgICAgICAgIGFzc2VtYmxlX3NwYXJzZSggbiwgbiwgY29l ZlBjLCBjaWR4UGMsIHJpZHhQYyApICk7DQogICAgICAgICByZXR2YWwoMCk9 IFByVCpMUzsNCiAgICAgICAgIHJldHZhbCgxKT0gVVMqUGMgOw0KICAgICAg fSBlbHNlDQogICAgICBpZiAobmFyZ291dCA+MiApIHsNCiAgICAgICAgIC8v YnVpbGQgUFMgYmFja3dhcmRzIHRvIGdldCB0aGUgdHJhbnNwb3NlDQogICAg ICAgICBvY3RhdmVfdmFsdWUgUHIgPSBuZXcgb2N0YXZlX3NwYXJzZSAoDQog ICAgICAgICAgICAgICBhc3NlbWJsZV9zcGFyc2UoIG0sIG0sIGNvZWZQciwg Y2lkeFByLCByaWR4UHIgKSApOw0KICAgICAgICAgb2N0YXZlX3ZhbHVlIFBj ID0gbmV3IG9jdGF2ZV9zcGFyc2UgKA0KICAgICAgICAgICAgICAgYXNzZW1i bGVfc3BhcnNlKCBuLCBuLCBjb2VmUGMsIGNpZHhQYywgcmlkeFBjICkgKTsN CiAgICAgICAgIHJldHZhbCgwKT0gTFM7DQogICAgICAgICByZXR2YWwoMSk9 IFVTOw0KICAgICAgICAgcmV0dmFsKDIpPSBQcjsNCiAgICAgICAgIHJldHZh bCgzKT0gUGM7DQogICAgICB9DQogICB9DQogICBlbHNlDQogICAgIGdyaXBl X3dyb25nX3R5cGVfYXJnICgic3BsdSIsIGFyZ3MoMCkpOw0KDQogICByZXR1 cm4gcmV0dmFsOw0KfQ0KDQpERUZVTl9ETEQgKHNwZmluZCwgYXJncywgbmFy Z291dCAsDQogICJbLi4uXSA9IHNwZmluZCAoLi4uKVxuXA0KU1BGSU5EOiBh IHNwYXJzZSB2ZXJzaW9uIG9mIHRoZSBmaW5kIG9wZXJhdG9yXG5cDQogICB4 ID0gc3BmaW5kKCBhICkgICAgICAgICAgICAgICAgIFxuXA0KICAgICAgaXMg YW5hbGFnb3VzIHRvIHg9IGZpbmQoQSg6KSkgXG5cDQogICAgICB3aGVyZSBB PSBmdWxsKGEpXG5cDQogICBbaSxqLnYsbnIsbmNdID0gc3BmdW4oIGEsICdm aW5kJylcblwNCiAgICAgIGdpdmUgY29sdW1uIHZlY3RvcnMgaSBqIHYgc3Vj aCB0aGF0XG5cDQogICAgICBhPSBzcGFyc2UoaSxqLHYsbnIsbmMpXG5cDQog ICIpDQp7DQogICBvY3RhdmVfdmFsdWVfbGlzdCByZXR2YWw7DQogICBvY3Rh dmVfdmFsdWUgdG1wOw0KICAgaW50IG5hcmdpbiA9IGFyZ3MubGVuZ3RoICgp Ow0KDQogICBpZiAobmFyZ2luICE9IDEpIHsNCiAgICAgIHByaW50X3VzYWdl ICgic3BmdWxsIik7DQogICAgICByZXR1cm4gcmV0dmFsOw0KICAgfQ0KICAg ICAgDQogICBpZiAoYXJncygwKS50eXBlX25hbWUgKCkgPT0gInNwYXJzZSIp IHsNCiAgICAgIGNvbnN0IG9jdGF2ZV92YWx1ZSYgcmVwID0gYXJncygwKS5n ZXRfcmVwICgpOw0KIA0KICAgICAgU3VwZXJNYXRyaXggQSA9ICgoY29uc3Qg b2N0YXZlX3NwYXJzZSYpIHJlcCkgLiBzdXBlcl9tYXRyaXggKCk7DQoNCiAg ICAgIGludCBucj0gQS5ucm93Ow0KICAgICAgaW50IG5jPSBBLm5jb2w7DQog ICAgICBOQ2Zvcm1hdCAqIE5DRiA9IChOQ2Zvcm1hdCAqKSBBLlN0b3JlOw0K ICAgICAgZG91YmxlICogY29lZiAgPSAoZG91YmxlICopIE5DRi0+bnp2YWw7 DQogICAgICBpbnQgICAgKiByaWR4ICA9ICAgICAgICAgICAgTkNGLT5yb3dp bmQ7DQogICAgICBpbnQgICAgKiBjaWR4ICA9ICAgICAgICAgICAgTkNGLT5j b2xwdHI7DQogICAgICBpbnQgICAgICBubnogICA9ICAgICAgICAgICAgTkNG LT5ubno7DQoNCiAgICAgIENvbHVtblZlY3RvciBJIChubnopLCBKIChubnop LCBTIChubnopOw0KDQogICAgICBpbnQgY3g9MDsNCiAgICAgIGZvciAoaW50 IGk9MDsgaTwgbmM7IGkrKykNCiAgICAgICAgIGZvciAoaW50IGo9IGNpZHhb aV07IGo8IGNpZHhbaSsxXTsgaisrICkgDQogICAgICAgICAgICBpZiAobmFy Z291dDw9MSkgDQogICAgICAgICAgICAgICBJKCBjeCsrICkgPSAoZG91Ymxl KSAoIChyaWR4W2pdKzEpICsgaSpuciApOw0KICAgICAgICAgICAgZWxzZSB7 DQogICAgICAgICAgICAgICBJKCBjeCApID0gKGRvdWJsZSkgcmlkeFtqXSsx Ow0KICAgICAgICAgICAgICAgSiggY3ggKSA9IChkb3VibGUpIGkrMTsNCiAg ICAgICAgICAgICAgIFMoIGN4ICkgPSAgICAgICAgICBjb2VmW2pdOw0KICAg ICAgICAgICAgICAgY3grKzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAg IA0KICAgICAgaWYgKG5hcmdvdXQ8PTEpDQogICAgICAgICByZXR2YWwoMCk9 IEk7DQogICAgICBlbHNlIHsNCiAgICAgICAgIHJldHZhbCgwKT0gSTsNCiAg ICAgICAgIHJldHZhbCgxKT0gSjsNCiAgICAgICAgIHJldHZhbCgyKT0gUzsN CiAgICAgICAgIHJldHZhbCgzKT0gKGRvdWJsZSkgbnI7DQogICAgICAgICBy ZXR2YWwoNCk9IChkb3VibGUpIG5jOw0KICAgICAgfSAvLyBpZiBuYXJnb3V0 DQogICB9DQogICBlbHNlDQogICAgIGdyaXBlX3dyb25nX3R5cGVfYXJnICgi c3BmaW5kIiwgYXJncygwKSk7DQoNCiAgIHJldHVybiByZXR2YWw7DQp9DQpE RUZJTkVfT0NUQVZFX0FMTE9DQVRPUiAob2N0YXZlX3NwYXJzZSk7DQoNCkRF RklORV9PVl9UWVBFSURfRlVOQ1RJT05TX0FORF9EQVRBIChvY3RhdmVfc3Bh cnNlLCAic3BhcnNlIik7DQoNCg== --8323328-339823619-944976540=:4712 Content-Type: APPLICATION/PostScript; name="sp_test.m" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="sp_test.m" JSEvdXNyL2xvY2FsL2Jpbi9vY3RhdmUgLXFmIAolIFRlc3Qgc2NyaXB0IGZv ciB0aGUgYnVpbGQgb2YgdGhlIG9jdGF2ZSBzcGFyc2UgZnVuY3Rpb25zCiUK JSBDb3B5cmlnaHQgKEMpIDE5OTgsMTk5OSBBbmR5IEFkbGVyCiUgCiUgICAg VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vcgolIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCiUgcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2 ZXJzaW9uIDIgb2YKJSB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KJSAgICBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK JSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgolIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKJSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgolICAg IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYwolIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dy YW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKJSBGb3Vu ZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIx MzksIFVTQS4KJQolICRJZDogc3BfdGVzdC5tLHYgMS4xIDE5OTkvMTIvMDIg MTY6NDc6NTAgYWFkbGVyIEV4cCBhYWRsZXIgJAoKT0NUQVZFPSAgZXhpc3Qo J19fT0NUQVZFX1ZFUlNJT05fXycpOyAlbm9ybWFsbHkgdGhpcyB3b3JrcwpP Q1RBVkU9ICBleGlzdCgnZ251cGxvdF9jb21tYW5kX3JlcGxvdCcpOwpkb19m b3J0cmFuX2luZGV4aW5nPSAxOwpwcmVmZXJfemVyb19vbmVfaW5kZXhpbmc9 IDA7ClNaPTEwOwpOVFJJRVM9MTAwOwoKcmVzPXplcm9zKDEsMTAwKTsKCmZv ciBpID0gMTpOVFJJRVM7CiAgIGFmPXplcm9zKGNlaWwocmFuZCgxLDIpKlNa ICsgMSkpOwogICBhZihjZWlsKHJhbmQoMTAsMSkqcHJvZChzaXplKGFmKSkp KT1yYW5kKDEwLDEpKnByb2Qoc2l6ZShhZikpOwogICBiZj1hZjsKICAgYmYo Y2VpbChyYW5kKDEwLDEpKnByb2Qoc2l6ZShhZikpKSk9cmFuZCgxMCwxKSpw cm9kKHNpemUoYWYpKTsKICAgY2Y9emVyb3MoW3NpemUoYWYsMikgY2VpbChy YW5kKDEpKlNaICsgMSldKTsKICAgY2YoY2VpbChyYW5kKDEwLDEpKnByb2Qo c2l6ZShjZikpKSk9cmFuZCgxMCwxKSpwcm9kKHNpemUoYmYpKTsKCiAgIHNl bHg9IGNlaWwocmFuZCgxLDIqY2VpbChyYW5kKDEpKlNaKSkqc2l6ZShhZiwy KSk7CiAgIHNlbHk9IGNlaWwocmFuZCgxLDIqY2VpbChyYW5kKDEpKlNaKSkq c2l6ZShhZiwxKSk7CiAgIHNlbDE9IGNlaWwocmFuZCgxLDIqY2VpbChyYW5k KDEpKlNaKSkqcHJvZChzaXplKGFmKSkpJzsKICAgd2hpbGUgKDEpCiUgQ2hv b3NlIGV5ZSB0byB0cnkgdG8gZm9yY2UgYSBub24gc2luZ3VsYXIgYSAKICAg ICAgZGY9ZXllKGNlaWwocmFuZCgxKSpTWiArIDEpKTsKICAgICAgZGYoY2Vp bChyYW5kKDEwLDEpKnByb2Qoc2l6ZShkZikpKSk9cmFuZCgxMCwxKSpwcm9k KHNpemUoZGYpKTsKCiAgICAgIGlmIGFicyhkZXQoZGYpKSA+MWUtMTAgOyBi cmVhayA7IGVuZAogICBlbmQKICAgZWY9IHJhbmQoc2l6ZShkZiwxKSxjZWls KHJhbmQoMSkqNCkpOwoKJSBnZW5lcmF0ZSBMIGFuZCBVIG1hc2tzLCBkbyB0 aHJpY2UgdG8gaGVscCBlbnN1cmUgd2UgaGF2ZSBpdAogICBbTDEsVTEsam5r XT0gbHUocmFuZChzaXplKGRmKSkpOwogICBbTDIsVTIsam5rXT0gbHUocmFu ZChzaXplKGRmKSkpOwogICBbTDMsVTMsam5rXT0gbHUocmFuZChzaXplKGRm KSkpOwogICBMTD0gTDEgfCBMMiB8IEwzOwogICBVVT0gVTEgfCBVMiB8IFUz OwoKICAgYXM9IHNwYXJzZShhZik7CiAgIGJzPSBzcGFyc2UoYmYpOwogICBj cz0gc3BhcnNlKGNmKTsKICAgZHM9IHNwYXJzZShkZik7CiAgIGVzPSBzcGFy c2UoZWYpOwoKICAgaT0xOwoKICAgcmVzKGkrKyk9IHJlcyhpKSAgICAgK2Fs bChhbGwoIGFzID09IGFzICkpOwogICByZXMoaSsrKT0gcmVzKGkpICAgICAr YWxsKGFsbCggYXMgPT0gYWYgKSk7CiAgIHJlcyhpKyspPSByZXMoaSkgICAg ICthbGwoYWxsKCBhZiA9PSBhcyApKTsKICAgbWFnID0gIDFlLTEyKm1lYW4o c3RkKCBkZlxlZiApKTsKICAgcmVzKGkrKyk9IHJlcyhpKSAgICAgK2FsbChh bGwoIGFicyhkc1xlZiAtIGRmXGVmKSA8IG1hZyApKTsKICAgcmVzKGkrKyk9 IHJlcyhpKSAgICAgK2FsbChhbGwoIGFicyhkZlxlcyAtIGRmXGVmKSA8IG1h ZyApKTsKICAgICAgICAgICAgICAKICAgcmVzKGkrKyk9IHJlcyhpKSAgICAg K2FsbChhbGwoIGFzK2JzID09IGFmK2JmICkpOyAKICAgcmVzKGkrKyk9IHJl cyhpKSAgICAgK2FsbChhbGwoIGFmK2JzID09IGFmK2JmICkpOyAgCiAgIHJl cyhpKyspPSByZXMoaSkgICAgICthbGwoYWxsKCBhcytiZiA9PSBhZitiZiAp KTsgIAogICByZXMoaSsrKT0gcmVzKGkpICAgICArYWxsKGFsbCggYXMtYnMg PT0gYWYtYmYgKSk7ICAKICAgcmVzKGkrKyk9IHJlcyhpKSAgICAgK2FsbChh bGwoIGFmLWJzID09IGFmLWJmICkpOyAgCiAgIHJlcyhpKyspPSByZXMoaSkg ICAgICthbGwoYWxsKCBhcy1iZiA9PSBhZi1iZiApKTsgIAogICByZXMoaSsr KT0gcmVzKGkpICAgICArYWxsKGFsbCggYXMuKmJzID09IGFmLipiZiApKTsg IAogICByZXMoaSsrKT0gcmVzKGkpICAgICArYWxsKGFsbCggYWYuKmJzID09 IGFmLipiZiApKTsgIAogICByZXMoaSsrKT0gcmVzKGkpICAgICArYWxsKGFs bCggYXMuKmJmID09IGFmLipiZiApKTsgIAogICAgICAgICAgICAgICAgICAg ICAgICAgCiAgIHJlcyhpKyspPSByZXMoaSkgICAgICthbGwoYWxsKCBhcypj cyA9PSBhZipjZiApKTsgIAogICByZXMoaSsrKT0gcmVzKGkpICAgICArYWxs KGFsbCggYWYqY3MgPT0gYWYqY2YgKSk7ICAKICAgcmVzKGkrKyk9IHJlcyhp KSAgICAgK2FsbChhbGwoIGFzKmNmID09IGFmKmNmICkpOyAgCiAgICAgICAg ICAgICAgICAgICAgICAgICAKICAgcmVzKGkrKyk9IHJlcyhpKSAgICAgK2Fs bChhbGwoIGFzLicgPT0gIGFmLicgKSk7ICAKICAgcmVzKGkrKyk9IHJlcyhp KSAgICAgK2FsbChhbGwoIGFzJyAgPT0gIGFmJyApKTsgIAogICByZXMoaSsr KT0gcmVzKGkpICAgICArYWxsKGFsbCggLWFzICA9PSAtYWYgKSk7ICAKICAg cmVzKGkrKyk9IHJlcyhpKSAgICAgK2FsbChhbGwoIH5hcyAgPT0gfmFmICkp OyAgCiAgIHJlcyhpKyspPSByZXMoaSkgICAgICsgICAoICBubnooYXMpID09 IG5ueihhZikpOyAgCiAgIHJlcyhpKyspPSByZXMoaSkgICAgICthbGwoIGFz KHNlbDEpID09IGFmKHNlbDEgKSk7CiAgIHJlcyhpKyspPSByZXMoaSkgICAg ICthbGwoIGFzKDopID09IGFmKDopKTsKICAgcmVzKGkrKyk9IHJlcyhpKSAg ICAgK2FsbChhbGwoIGFzKHNlbHksc2VseCkgPT0gYWYoc2VseSxzZWx4KSAp KTsKICAgcmVzKGkrKyk9IHJlcyhpKSAgICAgK2FsbChhbGwoIGFzKCA6ICAs c2VseCkgPT0gYWYoIDogICxzZWx4KSApKTsKICAgcmVzKGkrKyk9IHJlcyhp KSAgICAgK2FsbChhbGwoIGFzKHNlbHksIDogICkgPT0gYWYoc2VseSwgOiAg KSApKTsKCiAgIG1hZyA9IDFlLTEzOwogICBbTGYyLFVmMl0gICAgID0gICBs dSggZGYgKTsKICAgW0xmNCxVZjQsUGY0XSA9ICAgbHUoIGRmICk7CgogICBp ZiBPQ1RBVkUKICAgICAgW0xzMixVczJdICAgICA9IHNwbHUoIGRzICk7CiAg IGVsc2UKICAgICAgW0xzMixVczJdICAgICA9IGx1KCBkcyApOwogICBlbmQK CiUgTFUgZGVjb21wIG1heSBiZSBkaWZmZXJlbnQgYnV0IFUgbXVzdCBiZSBV cHBlciBhbmQgTFU9PWQKICAgcmVzKGkrKyk9IHJlcyhpKSArIGFsbCggWyAg CiAgICAgICAgICAgICAgIGFsbChhbGwoIGFicyhMczIqVXMyIC0gTGYyKlVm MiApPCBtYWcgKSkgOwogICAgICAgICAgICAgICAgICAgICAgMSBdICk7CiUg ICAgICAgICAgICAgICAgICAgICBhbGwoYWxsKCBVczIgLiogVVUgPT0gVXMy ICkpIF0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAogICBpZiBPQ1RBVkUKICAgICAgW0xzNCxVczQsUHNSLFBzQ10gPSBz cGx1KCBkcyApOwogICAgICByZXMoaSsrKT0gcmVzKGkpICsgLi4uCiAgICAg ICAgICAgIGFsbChbIGFsbChhbGwoYWJzKCBQc1InKkxzNCpVczQqUHNDICAt IFBmNCcqTGY0KlVmNCApPG1hZykpIDsKICAgICAgICAgICAgICAgICAgYWxs KGFsbChhYnMoIFBzUicqTHM0KlVzNCpQc0MgIC0gZGYgKTwgbWFnKSkgOwog ICAgICAgICAgICAgICAgICBhbGwoYWxsKCBMczQgLiogTEwgPT0gTHM0ICkp IDsKICAgICAgICAgICAgICAgICAgYWxsKGFsbCggVXM0IC4qIFVVID09IFVz NCApKSBdICk7CiAgIGVsc2UKICAgICAgW0xzNCxVczQsUHM0XSA9IGx1KCBk cyApOwogICAgICByZXMoaSsrKT0gcmVzKGkpICsgLi4uCiAgICAgICAgICAg IGFsbChbIGFsbChhbGwoYWJzKCBQczQnKkxzNCpVczQgLSBQZjQnKkxmNCpV ZjQgKTxtYWcpKSA7CiAgICAgICAgICAgICAgICAgIGFsbChhbGwoYWJzKCBQ czQnKkxzNCpVczQgLSBkZiApPCBtYWcpKSA7CiAgICAgICAgICAgICAgICAg IGFsbChhbGwoIExzNCAuKiBMTCA9PSBMczQgKSkgOwogICAgICAgICAgICAg ICAgICBhbGwoYWxsKCBVczQgLiogVVUgPT0gVXM0ICkpIF0gKTsKICAgZW5k CgogICBpZiBPQ1RBVkUKICAgICAgcmVzKGkrKyk9IHJlcyhpKSAgICArYWxs KCBzcGZpbmQoYXMpID09IGZpbmQoYWYpICk7CiAgICAgIFtJLEosUyxOLE1d PSBzcGZpbmQoYXMpOwogICBlbHNlCiAgICAgIHJlcyhpKyspPSByZXMoaSkg ICAgK2FsbCggZmluZChhcykgPT0gZmluZChhZikgKTsKICAgICAgW0ksSixT XT0gZmluZChhcyk7CiAgICAgIFtOLE1dICA9IHNpemUoYXMpOwogICBlbmQK ICAgYXNuZXc9IHNwYXJzZShJLEosUyxOLE0pOwogICByZXMoaSsrKT0gcmVz KGkpICAgICthbGwoIGFsbCggYXNuZXcgPT0gYXMgKSk7CgplbmQgCgpyZXM9 IHJlcygxOmktMSk7CmZvciBpPWZpbmQoIHJlc349IE5UUklFUykKICAgcHJp bnRmKCAuLi4KICAgICdvcGVyYXRpb24gIyVkIGluIHNwX3Rlc3QubSBmYWls cyB3aXRoIHByb2JhYmlsaXR5ICU1LjJmJSVcbicsIC4uLgogICAgaSwgMTAw KigxIC0gcmVzKGkpL05UUklFUykgKTsKZW5kICAgICAgICAgICAKCiUKJSAk TG9nOiBzcF90ZXN0Lm0sdiAkCiUgUmV2aXNpb24gMS4xICAxOTk5LzEyLzAy IDE2OjQ3OjUwICBhYWRsZXIKJSBJbml0aWFsIHJldmlzaW9uCiUKJSBSZXZp c2lvbiAxLjUgIDE5OTkvMTEvMjcgMDI6NTU6NDAgIGFuZHkKJSBtb2RpZmlj YXRpb25zIGZvciBuZXcgc3BhcnNlIHJld3JpdGUKJQolIFJldmlzaW9uIDEu NCAgMTk5OS8xMC8yNiAwMjo0NToyMiAgYW5keQolIG1vZHMgZm9yIG5ldyBt YWtlX3NwYXJzZS5jYwolCiUgUmV2aXNpb24gMS4zICAxOTk4LzExLzIxIDIw OjUxOjAxICBhbmR5CiUgY2hhbmdlcyB0byBhbGxvdyBjYWxsaW5nIHRoZSAi ZXhwZXJ0IiBzb2x2ZXIsIHNvbHZleAolCiUgUmV2aXNpb24gMS4yICAxOTk4 LzExLzIxIDA0OjM1OjE4ICBhbmR5CiUgUmV2aXNlZCB0byBkbyBhIGdvb2Qg c29sdmUgdGVzdAolCiUgUmV2aXNpb24gMS4xICAxOTk4LzExLzE1IDE3OjIy OjQwICBhbmR5CiUgSW5pdGlhbCByZXZpc2lvbgolCiUK --8323328-339823619-944976540=:4712 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="fem_test.m" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="fem_test.m" JSBTcGFyc2UgZnVuY3Rpb24gdGVzdCByb3V0aW5nDQolIENvcHlyaWdodCAo QykgMTk5OCBBbmR5IEFkbGVyLg0KJSBUaGlzIGNvZGUgaGFzIG5vIHdhcnJh bnR5IHdoYXRzb2V2ZXIuDQolIFlvdSBtYXkgZG8gd2hhdCB5b3UgbGlrZSB3 aXRoIHRoaXMgY29kZSBhcyBsb25nIGFzIHlvdSBsZWF2ZSB0aGlzIGNvcHly aWdodA0KJSBpbiBwbGFjZS4gIElmIHlvdSBtb2RpZnkgdGhlIGNvZGUgdGhl biBpbmNsdWRlIGEgbm90aWNlIHNheWluZyBzby4NCiUNCiUgVGhpcyBjb2Rl IGNvbWVzIGZyb20gbXkgdGhlc2lzIHdvcmsuIEl0cyBhIGZpbml0ZSBlbGVt ZW50IG1vZGVsDQolICBvZiB0aGUgdm9sdGFnZSBkaXN0cmlidXRpb24gaW4g YSBjeWxpbmRyaWNhbCBib2R5IHdpdGggY3VycmVudCBhcHBsaWVkDQolICBh dCB0aGUgYm91bmRhcnkuIFRoZSBjb21wbGV0ZSBtb2RlbCB3YXMgcHVibGlz aGVkIGluDQolICAiRWxlY3RyaWNhbCBJbXBlZGFuY2UgVG9tb2dyYXBoeTog UmVndWxhcml6ZWQgSW1hZ2luZyBhbmQgQ29udHJhc3QNCiUgICBEZXRlY3Rp b24iLCBBLkFkbGVyLCBSLkd1YXJkbywgSUVFRSBUcmFucyBNZWQgSW1nLCAx NSgyKSwxNzAtMTc5DQolDQolICRJZDogZmVtX3Rlc3QubSx2IDEuMSAxOTk5 LzEyLzAyIDE2OjUyOjQxIGFhZGxlciBFeHAgYWFkbGVyICQNCg0KJSBvY3Rh dmUgY29tbWFuZHMsIGJ1dCBPSyBpbiBtYXRsYWIgdG9vICAgDQogICBkb19m b3J0cmFuX2luZGV4aW5nPSAxOw0KICAgZW1wdHlfbGlzdF9lbGVtZW50c19v ayA9IDE7DQoNClRFU1RUSU1FUz0gNTsNCmRvdGhlcGxvdD0wOw0KDQolaW5j cmVhc2UgTiBieSBtdWx0aXBsZXMgb2YgNCB0byBkbyBhIGxhcmdlciB0ZXN0 DQogICAgTj0gIDg7DQolaW5jcmVhc2Ugbml2ZWF1eCB0byBkbyBhIGxhcmdl ciB0ZXN0DQogICAgbml2ZWF1eD0gWy0uMjouMTouMl0nIDsNCg0KICAgIHBv c19pPSBbMCAxXTsNCiAgICBlbGVjPTE2Ow0KICAgIEVMRU09W107DQogICAg Tk9ERT0gWzA7MF07DQogICAgaW50PTE7DQogICAgZm9yIGs9MTpODQogICAg ICBwaGk9ICgwOjQqay0xKSpwaS8yL2s7DQogICAgICBOT0RFPSBbTk9ERSBr L04qW3NpbihwaGkpO2NvcyhwaGkpXV07DQoNCiAgICAgIGV4dD0gMiooaypr LWsrMSk7DQogICAgICBpZHhlPVswOmstMTsgMTprXTsNCiAgICAgIGlkeGk9 WzA6ay0xXTsgDQogICAgICBlbGVtPSBbIGV4dCtpZHhlIGV4dCsyKmsrWy1p ZHhlIGlkeGVdIGV4dCtyZW0oNCprLWlkeGUsNCprKSAuLi4NCiAgICAgICAg ICAgICAgZXh0K2lkeGUgZXh0KzIqaytbLWlkeGUgaWR4ZV0gZXh0K3JlbSg0 KmstaWR4ZSw0KmspOw0KICAgICAgICAgICAgICBpbnQraWR4aSBpbnQrMioo ay0xKStbLWlkeGkgaWR4aV0gLi4uIA0KICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQrcmVtKDQqKGstMSktaWR4aSwgNCooay0xKSsoaz09MSkgKSAu Li4NCiAgICAgICAgICAgICAgZXh0KzQqaysxK2lkeGkgZXh0KzYqaytbMS1p ZHhpIDMraWR4aV0gZXh0KzgqayszLWlkeGkgXTsNCiAgICAgIGZvciBqPTE6 aw0KICAgICAgICByMT0gcmVtKGoray0xLDMpKzE7DQogICAgICAgIHIyPSBy ZW0oaitrLDMpKzE7DQogICAgICAgIHIzPSA2LXIxLXIyOw0KICAgICAgICBl bGVtKFtyMSByMiByM10saitrKigwOjcpICk9IGVsZW0oOixqK2sqKDA6Nykp Ow0KICAgICAgZW5kDQogIA0KICAgICAgRUxFTT1bIEVMRU0gZWxlbSg6LDE6 KDgtNCooaz09TikpKmspIF07DQogICAgICBpbnQ9ZXh0Ow0KICAgIGVuZCAl Zm9yIGs9MTpODQogIA0KICAgIE1FUz0gZXh0K04qNC9lbGVjKihbMDplbGVj LTFdKTsNCiANCiAgaj1wb3NfaSgxKTsgaz1mbG9vcihqKTsNCiAgTUVTPVtN RVMoIDErcmVtKCAoMDplbGVjLTEpK2ssZWxlYykgKStmbG9vcihNRVMoMToy KSpbLTE7MV0qKGotaykpOw0KICAgICAgIE1FUyggMStyZW0oICgxOmVsZWMp K2ssZWxlYykgKStmbG9vcihNRVMoMToyKSpbLTE7MV0qKGotaykpIF07DQoN CiAgY291cj0gWyBNRVMoMSw6KScgTUVTKDEsMStyZW0oZWxlYysoMDplbGVj LTEpK3Bvc19pKlstMTsxXSxlbGVjKSApJzsgDQogICAgICAgICAgIG9uZXMo ZWxlYywxKSpbLTEgMV0gXTsNCg0KICBRUUNpckM9IFt6ZXJvcyhleHQtMSwx KTtjb3MoMipwaSooMDo0L046ZWxlYy0uMDEpJy9lbGVjKV07DQogIFFRQ2ly Qz0gMipRUUNpckMvc3VtKGFicyhRUUNpckMpKTsNCiAgaWYgZXhpc3QoJ25p dmVhdXgnKQ0KICAgIFFRQ2lyQz0gUVFDaXJDKihbLTEgMV0qbml2ZWF1eChb MSBsZW5ndGgobml2ZWF1eCldKSkvbGVuZ3RoKG5pdmVhdXgpOw0KICBlbmQN CiAgdm9sdD0gWzE7IHplcm9zKGVsZWMsMSldOw0KDQogIEVMUz1yZW0ocmVt KDA6ZWxlY14yLTEsZWxlYyktZmxvb3IoKDA6ZWxlY14yLTEpL2VsZWMpK2Vs ZWMsZWxlYyknOw0KICBFTFM9fmFueShyZW0oIGVsZWMrWy0xIDAgWy0xIDBd K3Bvc19pKlstMTsxXSBdICxlbGVjKScgLi4uDQoJCSAgICAgKm9uZXMoMSxl bGVjXjIpPT1vbmVzKDQsMSkqRUxTJyknOw0KDQoNCmQ9IHNpemUoRUxFTSwx KTsgICAgICAgJWRpbWVudGlvbnMrMQ0Kbj0gc2l6ZShOT0RFLDIpOyAgICAg ICAgJU5PREVzDQplPSBzaXplKEVMRU0sMik7ICAgICAgICAlRUxFTWVudHMg ICAgIA0KDQppZiBkb3RoZXBsb3QNCiUgb2N0YXZlIGNvbW1hbmRzLCB3ZSB1 c2UgZXZhbCBzbyBpdCBkb2Vzbid0IGZhaWwgaW4gTWF0bGFiDQogICBldmFs KCdnc2V0IG5va2V5OycsJzEnKTsNCiAgIGZsZWNoZT0gWzEuMDIgMDsxLjA2 IC4wNTsxLjA2IC4wMjsxLjEgLjAyOyAuLi4NCgkgIDEuMSAtLjAyOyAxLjA2 IC0uMDI7MS4wNiAtLjA1OzEuMDIgMF07DQogICBqamo9IC45NTsNCiAgIGlm IH5pc2VtcHR5KE1FUykNCiAgICAgeHk9Tk9ERSg6LE1FUygxLDopKTsNCiAg IGVuZA0KICAgeHh4PXplcm9zKDMsZSk7IHh4eCg6KT1OT0RFKDEsRUxFTSg6 KSk7DQogICB4eHg9IGpqaip4eHgrICgxLWpqaikqb25lcygzLDEpKm1lYW4o eHh4KTsNCiAgIHl5eT16ZXJvcygzLGUpOyB5eXkoOik9Tk9ERSgyLEVMRU0o OikpOw0KICAgeXl5PSBqamoqeXl5KyAoMS1qamopKm9uZXMoMywxKSptZWFu KHl5eSk7DQogICBwbG90KFt4eHg7eHh4KDEsOildLFt5eXk7eXl5KDEsOild LCdiJywgLi4uDQogICAgICAgICAgIGZsZWNoZSp4eSxmbGVjaGUqWzAgMTst MSAwXSp4eSwncicpOw0KICAgDQogICBheGlzKFsgWy0xLjEgMS4xXSptYXgo Tk9ERSgxLDopKSBbLTEuMSAxLjFdKm1heChOT0RFKDIsOikpIF0pDQplbmQg JSBwbG90IG1lc2gNCmlmIGV4aXN0KCduaXZlYXV4JykNCiAgbm9kZT1OT0RF Ow0KICBlbGVtPSBbRUxFTShbMSAxIDIgMyBdLDopIC4uLg0KICAgICAgICAg RUxFTShbMiAxIDIgM10sOikgRUxFTShbMyAyIDEgM10sOildOyANCiAgTk9E RT0gW25vZGU7IG5pdmVhdXgoMSkqb25lcygxLG4pIF07DQogIEVMRU09IFtd Ow0KIA0KICBmb3Igaz0yOmxlbmd0aChuaXZlYXV4KTsNCiAgICBOT0RFPVtO T0RFICxbbm9kZTsgbml2ZWF1eChrKSpvbmVzKDEsbildIF07DQogICAgRUxF TT0gW0VMRU0sKGVsZW0gKyAuLi4NCiAgICAgICBbWyhrLTEpKm4qb25lcygx LGUpOyhrLTIpKm4qb25lcygzLGUpXSAuLi4NCiAgICAgICAgWyhrLTEpKm4q b25lcygyLGUpOyhrLTIpKm4qb25lcygyLGUpXSAuLi4gIA0KICAgICAgICBb KGstMSkqbipvbmVzKDMsZSk7KGstMikqbipvbmVzKDEsZSldXSApIF07DQog IGVuZCAlZm9yIGsNCg0KICBNRVM9IE1FUyArIGZsb29yKGxlbmd0aChuaXZl YXV4KS8yKSpuOw0KICBRUUNpckM9IFFRQ2lyQypvbmVzKDEsIGxlbmd0aChu aXZlYXV4KSk7IFFRQ2lyQz0gUVFDaXJDKDopOw0KICBjb3VyKDE6ZWxlYyw6 KT0gY291cigxOmVsZWMsOikrIGZsb29yKGxlbmd0aChuaXZlYXV4KS8yKSpu Ow0KDQplbmQgJWlmIGV4aXN0KCduaXZlYXV4JykNCg0KZD0gc2l6ZShFTEVN LDEpOyAgICAgICAlZGltZW50aW9ucysxDQpuPSBzaXplKE5PREUsMik7ICAg ICAgICAlTk9ERXMNCmU9IHNpemUoRUxFTSwyKTsgICAgICAgICVFTEVNZW50 cyAgICAgDQpwPSBzaXplKHZvbHQsMSktMTsNCg0KQ0M9IHNwYXJzZSgoMTpk KmUpLEVMRU0oOiksb25lcyhkKmUsMSksIGQqZSwgbik7DQoNCnNhPSB6ZXJv cyhkKmUsZCk7DQpmb3Igaj0xOmUNCiAgYT0gIGludihbIG9uZXMoZCwxKSBO T0RFKCA6LCBFTEVNKDosaikgKScgXSk7DQogIHNhKGQqKGotMSkrMTpkKmos Oik9IGEoMjpkLDopJyphKDI6ZCw6KS8oZC0xKS8oZC0yKS9hYnMoZGV0KGEp KTsNCmVuZCAlZm9yIGo9MTpFTEVNcyANCnJpZHg9IG9uZXMoZCwxKSooMTpl KSpkOw0KcmlkeD0gcmlkeCg6KSpvbmVzKDEsZCkgKyBvbmVzKGQqZSwxKSpb LWQrMTowXTsNCmNpZHg9IDE6ZCplOw0KU1M9IHNwYXJzZSggY2lkeCcqb25l cygxLGQpLCByaWR4LCBzYSwgZCplLCBkKmUpOw0KDQpRUT1zcGFyc2UoY291 cigxOnAsOiksKDE6cCknKm9uZXMoMSxzaXplKGNvdXIsMikpLCAuLi4NCiAg ICAgICAgICAgICAgICAgICAgIGNvdXIocCsxOjIqcCw6KSxuLHAgKTsNCg0K DQppZiAgMCAlT0NUQVZFDQogICBDQ3Q9ICAgICAgIHNwZnVuKENDLCd0cmFu cycpOw0KICAgQ0N0U1M9ICAgICBzcGZ1bihDQ3QsJ211bCcsU1MpOw0KICAg Wlo9ICAgICAgICBzcGZ1bihDQ3RTUywnbXVsJyxDQyk7DQogICBaWnM9ICAg ICAgIHNwZnVuKFpaLCdleHRyYWN0JywyLG4sMixuKTsNCiAgIFFGPSAgICAg ICAgZnVsbChzcGZ1bihRUSwnZXh0cmFjdCcsMixuLDEscCkpOw0KICAgZnBy aW50ZignU29sdmluZyBGaW5pdGUgRWxlbWVudCBzcGFyc2UgZXFuLCBuPSVk IG5uej0lZCBkZW5zaXR5PSVmXG4nLCAuLi4NCiAgICAgICAgICAgIG4sIG5u eihaWiksIG5ueihaWikvbl4yICk7DQogICB0MD0gY2xvY2s7DQogICBmb3Ig aT0xOlRFU1RUSU1FUw0KICAgICAgVlY9ICAgICAgICBzcGZ1bihaWnMsJ3Nv bHZlJyxRRiwyKTsNCiAgIGVuZA0KICAgdGFza3RpbWU9IGV0aW1lKGNsb2Nr LHQwKTsNCmVsc2UNCiAgIFpaPSAgICAgICAgQ0MnKlNTKkNDOw0KICAgWlpz PSAgICAgICBaWigyOm4sMjpuKTsNCiAgIFFGPSAgICAgICAgZnVsbChRUSgy Om4sOikpOw0KICAgZnByaW50ZignU29sdmluZyBGaW5pdGUgRWxlbWVudCBz cGFyc2UgZXFuLCBuPSVkIG5uej0lZCBkZW5zaXR5PSVmXG4nLCAuLi4NCiAg ICAgICAgICAgIG4sIG5ueihaWiksIG5ueihaWikvbl4yICk7DQogICB0MD0g Y2xvY2s7DQogICBmb3IgaT0xOlRFU1RUSU1FUw0KICAgICAgVlY9ICAgICAg ICBaWnNcUUY7DQogICBlbmQNCiAgIHRhc2t0aW1lPSBldGltZShjbG9jayx0 MCk7DQplbmQNCg0KDQpjaGVja3ZhbD1WVihNRVMoMSw6KSwxKS1WVihNRVMo Miw6KSwxKTsNCmdvbGR2YWx1ZT0gWyAtMC45MTgyNDM7ICAwLjU1NTc3OTsg IDAuMTQ4NDUyOyAgMC4wNzg4MjY7DQogICAgICAgICAgICAgIDAuMDUyMTMy OyAgMC4wNDAxMTY7ICAwLjAzNDE0MTsgIDAuMDMxODcyOw0KICAgICAgICAg ICAgICAwLjAzMTI3OTsgIDAuMDMzNTk0OyAgMC4wMzk0Mjk7ICAwLjA1MjE4 OTsNCiAgICAgICAgICAgICAgMC4wNzgzNzc7ICAwLjE0OTQyNjsgIDAuNTk2 MTk1OyAtMS4wMDM1NjVdOw0KICAgICAgICAgICAgICANCnJkaWY9IHNxcnQo bWVhbigoY2hlY2t2YWwtZ29sZHZhbHVlKS5eMikpIC8gc3FydChtZWFuKGNo ZWNrdmFsLl4yKSk7DQppZiByZGlmID4gMWUtNQ0KICAgZnByaW50ZignU3Bh cnNlIEZFTSBzb2x1dGlvbiBmYWlscycpOw0KZW5kDQpmcHJpbnRmKCdUaW1l IHBlciBpdGVyYXRpb249ICVmIHNcbicsIHRhc2t0aW1lLyBURVNUVElNRVMp Ow0KZnByaW50ZignWW91ciBtYWNoaW5lIGlzICVmIGZhc3RlciB0aGFuIG1p bmUhXG4nLCA0LjQ1KlRFU1RUSU1FUy90YXNrdGltZSApOw0KDQolDQolICRM b2c6IGZlbV90ZXN0Lm0sdiAkDQolIFJldmlzaW9uIDEuMSAgMTk5OS8xMi8w MiAxNjo1Mjo0MSAgYWFkbGVyDQolIEluaXRpYWwgcmV2aXNpb24NCiUNCiUg UmV2aXNpb24gMS4yICAxOTk4LzExLzE3IDAzOjQ1OjI4ICBhbmR5DQolIGhh bmRsZXMgM0QgRkVNIHByb3Blcmx5DQolDQolIFJldmlzaW9uIDEuMSAgMTk5 OC8xMS8xNiAwNTowMTowOSAgYW5keQ0KJSBJbml0aWFsIHJldmlzaW9uDQol DQolDQo= --8323328-339823619-944976540=:4712 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="superlu2.0patch.diff" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="superlu2.0patch.diff" IyBQYXRjaCBmb3IgU3VwZXJMVSB2ZXJzaW9uIDIuMCBmb3IgdGhlIG9jdGF2 ZSBzcGFyZSBmdW5jdGlvbnMNCiMgJElkOiBzdXBlcmx1Mi4wcGF0Y2guZGlm Zix2IDEuMiAxOTk5LzEyLzEyIDAyOjE2OjE3IGFuZHkgRXhwIGFuZHkgJA0K Iw0KIyBJbnN0cnVjdGlvbnM6DQojDQojIDEuIERvd25sb2FkIFN1cGVyTFUg ZnJvbSBvbmUgb2YgdGhlIGZvbGxvd2luZyBzaXRlcw0KIyAgICAgICAgICAg ICAgICAgICAgICAgICAgaHR0cDovL3d3dy5uZXRsaWIub3JnL3NjYWxhcGFj ay9wcm90b3R5cGUNCiMgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0cDov L2Z0cC5jcy5iZXJrZWxleS9wdWIvc3JjL2xhcGFjay9TdXBlckxVDQojICAg ICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3Lm5lcnNjLmdvdi9+ eGlhb3llL1N1cGVyTFUvDQojDQojIDIuIFVucGFjayBTdXBlckxVIGludG8g dGhlIGRpcmVjdG9yeSB5b3UnbGwgYmUgYnVpbGRpbmcgdGhlDQojICAgICBv Y3RhdmUgc3BhcnNlIGZ1bmN0aW9ucyBmcm9tDQojDQojIDMuIEFwcGx5IHRo ZSBwYXRjaA0KIyAgICAgICAgICAgcGF0Y2ggLXAwIDwgc3VwZXJsdTIuMHBh dGNoLmRpZmYNCiMNCiMgNC4gQnVpbGQgdGhlIG9jdGF2ZSBzcGFyc2UgZnVu Y3Rpb25zDQojICAgICAgICAgICBydW4gbWFrZSBpbiB0aGUgb2N0YXZlIHNw YXJzZSBmdW5jdGlvbnMgZGlyZWN0b3J5DQojICAgICAgICAgICBOT1RFOiBk byBub3QgcnVuIHRoZSBTdXBlckxVIG1ha2VmaWxlcyAtIA0KIyAgICAgICAg ICAgICAgICBpdCBkb2Vzbid0IGJ1aWxkIHRoZSByaWdodCBvYmplY3RzIGlu dG8gdGhlIGxpYnJhcnkNCiMNCmRpZmYgLU5hdXIgU3VwZXJMVS12Mi4wL1NS Qy9nZXRfcGVybV9jLmMgU3VwZXJMVS9TUkMvZ2V0X3Blcm1fYy5jDQotLS0g U3VwZXJMVS12Mi4wL1NSQy9nZXRfcGVybV9jLmMJV2VkIEF1ZyAxMSAxMzo0 ODoxNSAxOTk5DQorKysgU3VwZXJMVS9TUkMvZ2V0X3Blcm1fYy5jCVNhdCBE ZWMgMTEgMjE6MTA6NTMgMTk5OQ0KQEAgLTM3MywxMiArMzczLDE2IEBADQog ICAgIHN3aXRjaCAoIGlzcGVjICkgew0KICAgICAgICAgY2FzZSAwOiAvKiBO YXR1cmFsIG9yZGVyaW5nICovDQogCSAgICAgIGZvciAoaSA9IDA7IGkgPCBu OyArK2kpIHBlcm1fY1tpXSA9IGk7DQorI2lmZGVmIFZFUkJPU0UgICAgICAg ICAgICAgICAgICAgICANCiAJICAgICAgcHJpbnRmKCJVc2UgbmF0dXJhbCBj b2x1bW4gb3JkZXJpbmcuXG4iKTsNCisjZW5kaWYgICAgICAgICAgICAgIA0K IAkgICAgICByZXR1cm47DQogICAgICAgICBjYXNlIDE6IC8qIE1pbmltdW0g ZGVncmVlIG9yZGVyaW5nIG9uIEEnKkEgKi8NCiAJICAgICAgZ2V0YXRhKG0s IG4sIEFzdG9yZS0+bm56LCBBc3RvcmUtPmNvbHB0ciwgQXN0b3JlLT5yb3dp bmQsDQogCQkgICAgICZibnosICZiX2NvbHB0ciwgJmJfcm93aW5kKTsNCisj aWZkZWYgVkVSQk9TRSAgICAgICAgICAgICAgICAgICAgIA0KIAkgICAgICBw cmludGYoIlVzZSBtaW5pbXVtIGRlZ3JlZSBvcmRlcmluZyBvbiBBJypBLlxu Iik7DQorI2VuZGlmICAgICAgICAgICAgICANCiAJICAgICAgdCA9IFN1cGVy TFVfdGltZXJfKCkgLSB0Ow0KIAkgICAgICAvKnByaW50ZigiRm9ybSBBJypB IHRpbWUgPSAlOC4zZlxuIiwgdCk7Ki8NCiAJICAgICAgYnJlYWs7DQpAQCAt Mzg2LDE0ICszOTAsMTggQEANCiAJICAgICAgaWYgKCBtICE9IG4gKSBBQk9S VCgiTWF0cml4IGlzIG5vdCBzcXVhcmUiKTsNCiAJICAgICAgYV9wbHVzX2F0 KG4sIEFzdG9yZS0+bm56LCBBc3RvcmUtPmNvbHB0ciwgQXN0b3JlLT5yb3dp bmQsDQogCQkJJmJueiwgJmJfY29scHRyLCAmYl9yb3dpbmQpOw0KKyNpZmRl ZiBWRVJCT1NFICAgICAgICAgICAgICAgICAgICAgDQogCSAgICAgIHByaW50 ZigiVXNlIG1pbmltdW0gZGVncmVlIG9yZGVyaW5nIG9uIEEnK0EuXG4iKTsN CisjZW5kaWYNCiAJICAgICAgdCA9IFN1cGVyTFVfdGltZXJfKCkgLSB0Ow0K IAkgICAgICAvKnByaW50ZigiRm9ybSBBJytBIHRpbWUgPSAlOC4zZlxuIiwg dCk7Ki8NCiAJICAgICAgYnJlYWs7DQogICAgICAgICBjYXNlIDM6IC8qIEFw cHJveGltYXRlIG1pbmltdW0gZGVncmVlIGNvbHVtbiBvcmRlcmluZy4gKi8N CiAJICAgICAgZ2V0X2NvbGFtZChtLCBuLCBBc3RvcmUtPm5ueiwgQXN0b3Jl LT5jb2xwdHIsIEFzdG9yZS0+cm93aW5kLA0KIAkJCSBwZXJtX2MpOw0KKyNp ZmRlZiBWRVJCT1NFICAgICAgICAgICAgICAgICAgICAgDQogCSAgICAgIHBy aW50ZigiLi4gVXNlIGFwcHJveGltYXRlIG1pbmltdW0gZGVncmVlIGNvbHVt biBvcmRlcmluZy5cbiIpOw0KKyNlbmRpZiAgICAgICAgICAgICAgDQogCSAg ICAgIHJldHVybjsgDQogICAgICAgICBkZWZhdWx0Og0KIAkgICAgICBBQk9S VCgiSW52YWxpZCBJU1BFQyIpOw0KZGlmZiAtTmF1ciBTdXBlckxVLXYyLjAv U1JDL3V0aWwuYyBTdXBlckxVL1NSQy91dGlsLmMNCi0tLSBTdXBlckxVLXYy LjAvU1JDL3V0aWwuYwlUaHUgQXVnICA1IDE1OjIzOjExIDE5OTkNCisrKyBT dXBlckxVL1NSQy91dGlsLmMJU2F0IERlYyAxMSAxNjoxMToyNiAxOTk5DQpA QCAtMjI5LDYgKzIyOSw4IEBADQogdm9pZA0KIFByaW50U3RhdChTdXBlckxV U3RhdF90ICpTdXBlckxVU3RhdCkNCiB7DQorLyogbW9kcyBieSBhYWRsZXIs IGRlYyA5OSovDQorI2lmZGVmIFZFUkJPU0UNCiAgICAgZG91YmxlICAgICAg ICAgKnV0aW1lOw0KICAgICBmbG9wc190ICAgICAgICAqb3BzOw0KIA0KQEAg LTI0Myw3ICsyNDUsNyBAQA0KICAgICBpZiAoIHV0aW1lW1NPTFZFXSAhPSAw LjAgKQ0KICAgICAgIHByaW50ZigiU29sdmUgZmxvcHMgPSAlZVx0TWZsb3Bz ID0gJTguMmZcbiIsIG9wc1tTT0xWRV0sDQogCSAgICAgb3BzW1NPTFZFXSox ZS02L3V0aW1lW1NPTFZFXSk7DQotDQorI2VuZGlmIC8vIFZFUkJPU0UNCiB9 DQogDQogDQo= --8323328-339823619-944976540=:4712--