From octave-sources-request at bevo dot che dot wisc dot edu Mon May 1 18:54:39 2000 Subject: octave sparse for 2.1.30 From: en254 at freenet dot carleton dot ca To: octave-sources at bevo dot che dot wisc dot edu Date: Mon, 1 May 2000 20:19:49 -0400 (EDT) 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-1524785817-957226789=:723 Content-Type: TEXT/PLAIN; charset=US-ASCII These are updated octave sparse functions that will work with octave 2.1.30 INSTRUCTIONS 0. Check that you have the following files: a Makefile b make_sparse.cc c make_sparse.h d sp_test.m e fem_test.m f superlu2.0patch.diff 1. Download SuperLU v2.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 in the octave sparse functions directory NOTE: do not run the SuperLU makefiles - it doesn't build the right objects into the library This makefile assumes that the SuperLU package has been unpacked in this directory. It compiles files directly from their locations in the SuperLU source. You do not need to use SuperLU makefiles. SuperLU is available from http://www.netlib.org/scalapack/prototype ftp://ftp.cs.berkeley/pub/src/lapack/SuperLU AUTHOR: Andy Adler --8323328-1524785817-957226789=:723 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=Makefile Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=Makefile IyBNYWtlZmlsZSBhbmQgUkVBRE1FIGZvciBvY3RhdmUgU3VwZXJMVSByb3V0 aW5lcw0KIyAkSWQ6IE1ha2VmaWxlLHYgMS4yIDIwMDAvMDUvMDIgMDA6MTA6 MzQgYW5keSBFeHAgYW5keSAkDQojDQojICRMb2c6IE1ha2VmaWxlLHYgJA0K IyBSZXZpc2lvbiAxLjIgIDIwMDAvMDUvMDIgMDA6MTA6MzQgIGFuZHkNCiMg bW9kcyB0byB3b3JrIHdpdGggMi4xLjMwDQojDQojDQojIElOU1RSVUNUSU9O Uw0KIw0KIyAwLiBDaGVjayB0aGF0IHlvdSBoYXZlIHRoZSBmb2xsb3dpbmcg ZmlsZXM6DQojICAgYSBNYWtlZmlsZQ0KIyAgIGIgbWFrZV9zcGFyc2UuY2MN CiMgICBjIG1ha2Vfc3BhcnNlLmgNCiMgICBkIHNwX3Rlc3QubQ0KIyAgIGUg ZmVtX3Rlc3QubQ0KIyAgIGYgc3VwZXJsdTIuMHBhdGNoLmRpZmYNCiMgICAN CiMgMS4gRG93bmxvYWQgU3VwZXJMVSBmcm9tIG9uZSBvZiB0aGUgZm9sbG93 aW5nIHNpdGVzDQojICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8v d3d3Lm5ldGxpYi5vcmcvc2NhbGFwYWNrL3Byb3RvdHlwZQ0KIyAgICAgICAg ICAgICAgICAgICAgICAgICAgZnRwOi8vZnRwLmNzLmJlcmtlbGV5L3B1Yi9z cmMvbGFwYWNrL1N1cGVyTFUNCiMgICAgICAgICAgICAgICAgICAgICAgICAg IGh0dHA6Ly93d3cubmVyc2MuZ292L354aWFveWUvU3VwZXJMVS8NCiMNCiMg Mi4gVW5wYWNrIFN1cGVyTFUgaW50byB0aGUgZGlyZWN0b3J5IHlvdSdsbCBi ZSBidWlsZGluZyB0aGUNCiMgICAgIG9jdGF2ZSBzcGFyc2UgZnVuY3Rpb25z IGZyb20NCiMNCiMgMy4gQXBwbHkgdGhlIHBhdGNoDQojICAgICAgICAgICBw YXRjaCAtcDAgPCBzdXBlcmx1Mi4wcGF0Y2guZGlmZg0KIw0KIyA0LiBCdWls ZCB0aGUgb2N0YXZlIHNwYXJzZSBmdW5jdGlvbnMNCiMgICAgICAgICAgIG1h a2UgICAgaW4gdGhlIG9jdGF2ZSBzcGFyc2UgZnVuY3Rpb25zIGRpcmVjdG9y eQ0KIyAgICAgICAgICAgTk9URTogZG8gbm90IHJ1biB0aGUgU3VwZXJMVSBt YWtlZmlsZXMgLSANCiMgICAgICAgICAgICAgICAgaXQgZG9lc24ndCBidWls ZCB0aGUgcmlnaHQgb2JqZWN0cyBpbnRvIHRoZSBsaWJyYXJ5DQojDQojIFRo aXMgbWFrZWZpbGUgYXNzdW1lcyB0aGF0IHRoZSBTdXBlckxVIHBhY2thZ2Ug aGFzIGJlZW4gdW5wYWNrZWQNCiMgIGluIHRoaXMgZGlyZWN0b3J5LiBJdCBj b21waWxlcyBmaWxlcyBkaXJlY3RseSBmcm9tIHRoZWlyIGxvY2F0aW9ucw0K IyAgaW4gdGhlIFN1cGVyTFUgc291cmNlLiBZb3UgZG8gbm90IG5lZWQgdG8g dXNlIFN1cGVyTFUgbWFrZWZpbGVzLg0KIw0KIyBTdXBlckxVIGlzIGF2YWls YWJsZSBmcm9tIGh0dHA6Ly93d3cubmV0bGliLm9yZy9zY2FsYXBhY2svcHJv dG90eXBlDQojICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRwOi8vZnRw LmNzLmJlcmtlbGV5L3B1Yi9zcmMvbGFwYWNrL1N1cGVyTFUNCiMNCiMgDQoj IEFVVEhPUjogIEFuZHkgQWRsZXIgPGVuMjU0QG5jZi5jYT4NCiMgDQojIENP UFlSSUdIVDoNCiMgQ29weXJpZ2h0IChDKSAxOTk4LTAwIEFuZHkgQWRsZXIN CiMgDQojICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCiMgbW9kaWZ5IGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YXMNCiMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247IGVpdGhlciB2ZXJzaW9uIDIgb2YNCiMgdGhlIExpY2Vuc2UsIG9yIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQojICAgIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLA0KIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KIyBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlDQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuDQojICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KIyBMaWNlbnNlIGFs b25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG cmVlIFNvZnR3YXJlDQojIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2 ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLg0KIyANCiMgDQojIFNVUEVS TFUgQ09QWVJJR0hUOg0KIyBUaGUgZm9sbG93aW5nIGNvcHlyaWdodCBpcyB0 YWtlbiBmcm9tIGFueSBvZiB0aGUNCiMgZmlsZXMgaW4gdGhlIFN1cGVyTFUv U1JDIGRpcmVjdG9yeQ0KIyANCiMgLyoNCiMgICogLS0gU3VwZXJMVSByb3V0 aW5lICh2ZXJzaW9uIDIuMCkgLS0NCiMgICogVW5pdi4gb2YgQ2FsaWZvcm5p YSBCZXJrZWxleSwgWGVyb3ggUGFsbyBBbHRvIFJlc2VhcmNoIENlbnRlciwN CiMgICogYW5kIExhd3JlbmNlIEJlcmtlbGV5IE5hdGlvbmFsIExhYi4NCiMg ICogTm92ZW1iZXIgMTUsIDE5OTcNCiMgICoNCiMgICovDQojIC8qDQojICAg Q29weXJpZ2h0IChjKSAxOTk0IGJ5IFhlcm94IENvcnBvcmF0aW9uLiAgQWxs IHJpZ2h0cyByZXNlcnZlZC4NCiMgDQojICAgVEhJUyBNQVRFUklBTCBJUyBQ Uk9WSURFRCBBUyBJUywgV0lUSCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZDQoj ICAgRVhQUkVTU0VEIE9SIElNUExJRUQuICBBTlkgVVNFIElTIEFUIFlPVVIg T1dOIFJJU0suDQojIA0KIyAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50 ZWQgdG8gdXNlIG9yIGNvcHkgdGhpcyBwcm9ncmFtIGZvciBhbnkNCiMgICBw dXJwb3NlLCBwcm92aWRlZCB0aGUgYWJvdmUgbm90aWNlcyBhcmUgcmV0YWlu ZWQgb24gYWxsIGNvcGllcy4NCiMgICBQZXJtaXNzaW9uIHRvIG1vZGlmeSB0 aGUgY29kZSBhbmQgdG8gZGlzdHJpYnV0ZSBtb2RpZmllZCBjb2RlIGlzDQoj ICAgZ3JhbnRlZCwgcHJvdmlkZWQgdGhlIGFib3ZlIG5vdGljZXMgYXJlIHJl dGFpbmVkLCBhbmQgYSBub3RpY2UgdGhhdA0KIyAgIHRoZSBjb2RlIHdhcyBt b2RpZmllZCBpcyBpbmNsdWRlZCB3aXRoIHRoZSBhYm92ZSBjb3B5cmlnaHQg bm90aWNlLg0KIyAqLyANCiMgDQojIFVTQUdFOg0KIyAgICBzcGFyc2UgZnVu Y3Rpb25zIGFyZSBwcm92aWRlZCBmb3INCiMgDQojICAgIHNwYXJzZSAtPiBj cmVhdGUgc3BhcnNlIG1hdHJpY2VzDQojICAgIGZ1bGwgICAtPiBjcmVhdGUg ZnVsbCBtYXRyaWNlcyBmcm9tIHNwYXJzZQ0KIyAgICBzcGx1ICAgLT4gc3Bh cmUgbHUgZGVjb21wb3NpdGlvbg0KIyAgICBzcGZpbmQgLT4gZmluZCBlbGVt ZW50cyBvZiBzcGFyc2UgbWF0cmljZXMNCiMgICAgbm56ICAgIC0+IG51bWJl ciBvZiBub24gemVybyBlbGVtZW50cw0KIyANCiMgICAgVW5pdGFyeSBvcGVy YXRvcnMNCiMgDQojICAgIFMnICAgIFMuJyAgIC1TICAgIH5TDQojIA0KIyAg ICBCaW5hcnkgb3BlcmF0b3JzDQojICAgID09ICArICAgLSAgICogICAuKiAg IFwgDQojIA0KIyAgICBTZWxlY3Rpb24NCiMgICAgQSggZm9ydHJhbl92ZWMg KSAsICAgQSggaWR4MSwgaWR4MiApDQojIA0KIyANCiMgTUlTU0lORyBGRUFU VVJFUyAoVE9ETyBGSUxFKQ0KIyAoVGhpcyBpcyBtb3JlIG9yIGxlc3MgaW4g dGhlIG9yZGVyIG9mIGltcG9ydGFuY2UsIGFuZA0KIyAgcHJvYmFiaWxpdHkg b2YgYWNjb21wbGlzaG1lbnQpDQojIA0KIyAwLiAgQnVnIGZpeGVzDQojIA0K IyAxLiAgU3BhcnNlIHNvbHV0aW9uOiB0aGVyZSBpcyBubyBjb2RlIGZvcg0K IyAgICAgaW52ZXJzZSggc3BhcnNlICkNCiMgICAgIHNwYXJzZSBcIHNwYXJz ZQ0KIyAgICAgc3BhcnNlKGluZGV4MSxpbmRleDIpID0gc3VibWF0cml4DQoj IA0KIyAyLiAgU3VwcG9ydCBmb3IgY29tcGxleCBzcGFyc2UgbWF0cmljZXMN CiMgDQojIDMuICBNb3JlICJzb3BoaXN0aWNhdGVkIiBtYXRyaXggb3BlcmF0 aW9ucyBvbiBzcGFyc2UNCiMgICAgIGVpZ2VudmVjdG9ycw0KIyAgICAgY2hv bA0KIyAgICAgU1ZEDQojICAgICBldGMuDQojIA0KIyBLTk9XTiBBTkQgUFJF RElDVEVEIEJVR1MgQU5EIEZFQVRVUkVTOg0KIyANCiMgMS4gIFJpZ2h0IG5v dyBvbmx5IHJlYWwgKGRvdWJsZSkgbWF0cmljZXMgYXJlIHN1cHBvcnRlZCwg U3VwZXJMVQ0KIyAgICAgaGFzIHN1cHBvcnQgZm9yIGNvbXBsZXgsIHNvIEkn bGwgYmUgYWRkaW5nIHRoYXQgaW4gYXQgc29tZSBwb2ludC4NCiMgDQojIDIu ICBJdCBwcm9iYWJseSBsZWFrcyBtZW1vcnkuIEknbGwgdHJ5IHRvIHRlc3Qg dGhpcyBtb3JlIGNhcmVmdWxseQ0KIyAgICAgYWZ0ZXIgSSBzdG9wIGFkZGlu ZyBmZWF0dXJlcy4NCiMgDQojIDMuICBJdCBkb2VzIG5vdCBzdXBwb3J0IGVt cHR5IG1hdHJpY2VzIHByb3Blcmx5LiBJdCBtYXkgZXZlbiBoYXZlDQojICAg ICBzb21lIHByb2JsZW1zIHdpdGggY29tcGxldGVseSBzcGFyc2UgKGFsbCB6 ZXJvKSBtYXRyaWNlcyBpbg0KIyAgICAgc29tZSBjYXNlcy4NCiMgDQojIDQu ICBUaGUgYXR0ZW1wdCBoZXJlIGlzIHRvIHByb3ZpZGUgY29tcGF0YWJpbGl0 eSB0byB0aGUgbWFpbiBNQVRMQUINCiMgICAgIHNwYXJzZSBtYXRyaXggZW50 cnkgcG9pbnRzLiBUaGUgU3VwZXJMVSBwcm92aWRlcyBzbGlnaHRseSBkaWZm ZXJlbnQNCiMgICAgIGZ1Y3Rpb25hbGl0eSB0byBNQVRMQUIsIGFuZCwgdGhl cmVmb3JlIHRoaXMgdG9vbGtpdCBwcm92aWRlcw0KIyAgICAgZGlmZmVyZW50 IGZlYXR1cmVzLg0KIyANCiMgICAgIEZvciBleGFtcGxlLCB0aGUgY29sdW1u IHBlcm11dGF0aW9uIGFsZ29yaXRobSAoYW5kIGFwcHJvYWNoKSBpcw0KIyAg ICAgZGlmZmVyZW50Lg0KIyANCiMgICAgIEFkZGl0aW9uYWxseSwgSSBkb24n dCBpbnRlbmQgdG8gcHJvdmlkZSByZXBsYWNlbWVudHMgZm9yIHRoZQ0KIyAg ICAgTUFUTEFCIHNwYXJzZSBmdW5jdGlvbnMgSSBjb25zaWRlciBmcmlsbHMu IGVnIHNwcmFuZC5tLCB0cmVlcGxvdC5tDQojIA0KIyA1LiAgU3VwZXJMVSBy b3V0aW5lcyBiYWlsIG91dCBvbiBlcnJvcnMuIFRoZXkgZG9uJ3QgZXZlbiBs ZXQNCiMgICAgIG9jdGF2ZSBzYXZlIGl0J3MgdmFyaWFibGVzLiBTb21lb25l IHdpbGwgaGF2ZSB0byBleHBsYWluIHRvDQojICAgICBtZSBob3cgdG8gbW9k aWZ5IHRoZSBTdXBlckxVIEFCT1JUKCkgdG8gZG8gdGhpcyByaWdodC4NCiMg DQojIDYuICBTdXBlckxVIHVzZXMgdGhlIGludCBkYXRhIHR5cGUgYXMgaW5k aWNlcy4gU2luY2UgaW50cyBhcmUgbm9ybWFsbHkNCiMgICAgIDQgYnl0ZXMg KGF0IGxlYXN0IG9uIGkzODYgbWFjaGluZXMpLCB0aGlzIGlzIG5vdCBhIGdy ZWF0IHByb2JsZW0uDQojICAgICBUaGVyZSBtYXkgYmUgc3RpbGwgYSBmZXcg cGxhY2VzIHdoZXJlIGFuIGludCBpcyB1c2VkIHRvIHJlZmVyDQojICAgICB0 byBpK2oqbSwgd2hpY2ggbWVhbnMgdGhhdCBzcGFyc2Ugb3BlcmF0aW9ucyBv biBtYXRyaWNlcyB3aGVyZQ0KIyAgICAgbSpuID4gbWF4aW50LzIgbWF5IGJl IGJ1Z2d5LiBJJ3ZlIHRyaWVkIHRvIGZpeCB0aGlzLCBidXQgdGhlcmUNCiMg ICAgIG1heSBiZSBzb21lIGxlZnQuICBFbWFpbCBtZSBpZiB5b3UgZmluZCBh bnkuDQojIA0KIyA3LiAgU3BhcnNlIHNvbHZlIGlzIGEgbGl0dGxlIGZhc3Rl ciB0aGFuIHRoZSBNQVRMQUIgZXF1aXZhbGVudCwgZXhjZXB0DQojICAgICBp dCBzZWVtcyBub3QgdG8gY2hvb3NlIHRoZSBmYWN0b3JpbmcgYXMgd2VsbC4g VXNpbmcgYSBwZXJtX2Mgc3BlYyBvZg0KIyAgICAgMiBmb3Igc3ltZXRyaWMg bWF0cmljZXMgd2lsbCBnZXQgc3BlZWQgaW1wcm92ZW1lbnRzIG9mIH4gMS41 Lg0KDQojIFRPRE86IGdldCB0aGlzIHRvIHVzZSBta29jdGZpbGVzIHNvIHRo YXQgd2UgZG9uJ3QgaGF2ZSB0bw0KIyAgICAgICBzcGVjaWZ5IE9DVEFWRV9Q UkVGSVggb3IgQ0NERUZTDQojDQojICAgICAgIEJ1aWxkIHRoZSBjb21wbGV4 IGxpYnJhcmllcyBhcyB3ZWxsDQoNCk5BTUUgICAgID0gICBtYWtlX3NwYXJz ZQ0KT0JKTElOS1MgPSAgIHNwZmluZC5vY3Qgc3BhcnNlLm9jdCBmdWxsLm9j dCBzcGx1Lm9jdCBubnoub2N0DQpTVVBFUkxVICA9ICAgU3VwZXJMVQ0KT0NU QVZFICAgPSAgIG9jdGF2ZQ0KDQpBUiAgICAgICA9ICAgYXINCkNQUCAgICAg ID0gICBjKysNCkNDICAgICAgID0gICBnY2MNClNUUklQICAgID0gIHN0cmlw DQoNClNfSU5DPSAgIC1JJChTVVBFUkxVKS9TUkMvIFwNCiAgICAgICAgIC1J JChTVVBFUkxVKS9DQkxBUw0KDQojIENDREVGUyA9ICMgLURWRVJCT1NFDQoj IENDREVGUyA9IC1EU0laRU9GX1NIT1JUPTIgLURTSVpFT0ZfSU5UPTQgLURT SVpFT0ZfTE9ORz00DQoNCg0KQ0RFRlMgID0gLURBZGRfIC1PMw0KDQpMSUJT VVBFUkxVID0gbGlic3VwZXJsdS5hDQoNClNfU1JDICA9ICQoU1VQRVJMVSkv U1JDDQpTX0NCTEFTPSAkKFNVUEVSTFUpL0NCTEFTDQoNCkFMTEFVWCA9ICQo U19TUkMpL3N1cGVybHVfdGltZXIubyAgICQoU19TUkMpL2xzYW1lLm8gXA0K ICAgICAgICAgJChTX1NSQykvdXRpbC5vICAgICAgICAgICAgJChTX1NSQykv bWVtb3J5Lm8gXA0KICAgICAgICAgJChTX1NSQykvZ2V0X3Blcm1fYy5vICAg ICAgJChTX1NSQykvbW1kLm8gXA0KICAgICAgICAgJChTX1NSQykvc3BfY29s ZXRyZWUubyAgICAgJChTX1NSQykvc3BfcHJlb3JkZXIubyBcDQogICAgICAg ICAkKFNfU1JDKS9zcF9pZW52Lm8gICAgICAgICAkKFNfU1JDKS9yZWxheF9z bm9kZS5vIFwNCiAgICAgICAgICQoU19TUkMpL3hlcmJsYS5vICAgICAgICAg ICQoU19TUkMpL2NvbGFtZC5vDQoNCkRaTEFVWCA9ICQoU19TUkMpL2RsYW1j aC5vIFwNCiAgICAgICAgICQoU19DQkxBUykvZG15YmxhczIubw0KDQpETFVT UkMgPSAkKFNfU1JDKS9kZ3Nzdi5vICAgICAgICAgICAkKFNfU1JDKS9kZ3Nz dngubyBcDQogICAgICAgICAkKFNfU1JDKS9kc3BfYmxhczIubyAgICAgICAk KFNfU1JDKS9kc3BfYmxhczMubyBcDQogICAgICAgICAkKFNfU1JDKS9kZ3Nj b24ubyAgICAgICAgICAkKFNfU1JDKS9kbGFjb24ubyBcDQogICAgICAgICAk KFNfU1JDKS9kbGFuZ3MubyAgICAgICAgICAkKFNfU1JDKS9kZ3NlcXUubyBc DQogICAgICAgICAkKFNfU1JDKS9kbGFxZ3MubyAgICAgICAgICAkKFNfU1JD KS9kcGl2b3Rncm93dGgubyBcDQogICAgICAgICAkKFNfU1JDKS9kZ3NyZnMu byAgICAgICAgICAkKFNfU1JDKS9kZ3N0cmYubyBcDQogICAgICAgICAkKFNf U1JDKS9kZ3N0cnMubyAgICAgICAgICAkKFNfU1JDKS9kY29weV90b191Y29s Lm8gXA0KICAgICAgICAgJChTX1NSQykvZHNub2RlX2Rmcy5vICAgICAgJChT X1NSQykvZHNub2RlX2Jtb2QubyBcDQogICAgICAgICAkKFNfU1JDKS9kcGFu ZWxfZGZzLm8gICAgICAkKFNfU1JDKS9kcGFuZWxfYm1vZC5vIFwNCiAgICAg ICAgICQoU19TUkMpL2RyZWFkaGIubyAgICAgICAgICQoU19TUkMpL2Rjb2x1 bW5fZGZzLm8gXA0KICAgICAgICAgJChTX1NSQykvZGNvbHVtbl9ibW9kLm8g ICAgJChTX1NSQykvZHBpdm90TC5vIFwNCiAgICAgICAgICQoU19TUkMpL2Rw cnVuZUwubyAgICAgICAgICQoU19TUkMpL2RtZW1vcnkubyBcDQogICAgICAg ICAkKFNfU1JDKS9kdXRpbC5vDQoNClNfRE9VQkxFPSAkKERMVVNSQykgJChB TExBVVgpICQoRFpMQVVYKQ0KDQphbGw6ICQoTkFNRSkub2N0ICB0ZXN0DQoN CiUubzolLmMNCgkkKENDKSAkKFNfSU5DKSAkKENERUZTKSAtYyAkPCAtbyAk QA0KDQokKExJQlNVUEVSTFUpOiAkKFNfRE9VQkxFKQ0KCSQoQVIpIC1yICQo TElCU1VQRVJMVSkgJChTX0RPVUJMRSkNCg0KJChOQU1FKS5vY3Q6ICQoTkFN RSkuY2MgJChMSUJTVVBFUkxVKQ0KCW1rb2N0ZmlsZSAtdiAkKE5BTUUpLmNj ICQoU19JTkMpICQoQ0NERUZTKSAtbHN1cGVybHUgLUwuDQoJJChTVFJJUCkg JChOQU1FKS5vY3QNCglmb3IgaSBpbiAkKE9CSkxJTktTKTsgZG8gbG4gLXNm ICQoTkFNRSkub2N0ICQkaSA7IGRvbmUNCg0KdGVzdDogDQoJQGVjaG8gOyBl Y2hvICJUZXN0aW5nIHNwYXJzZSBmdW5jdGlvbnMgLi4uIiA7IGVjaG8NCgkk KE9DVEFWRSkgLXFmIHNwX3Rlc3QubQ0KCUBlY2hvIA0KCUBlY2hvICJUZXN0 aW5nIHNwYXJzZSBzb2x1dGlvbiBmb3IgYSBGaW5pdGUgRWxlbWVudCBNb2Rl bCAuLi4iIA0KCUBlY2hvIA0KCSQoT0NUQVZFKSAtcWYgZmVtX3Rlc3QubQ0K DQpjbGVhbjoNCglybSAkKE5BTUUpLm9jdCAkKE9CSkxJTktTKQ0KDQpzdXBl cmx1Y2xlYW46DQoJcm0gJChMSUJTVVBFUkxVKSAkKFNfRE9VQkxFKSANCg0K --8323328-1524785817-957226789=:723 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 c2UuY2MsdiAxLjIgMjAwMC8wNC8yOCAwMDo0ODozOCBhbmR5IEV4cCBhbmR5 ICQNCg0KKi8NCg0KI2lmZGVmIFZFUkJPU0UNCiMgIGRlZmluZSBERUJVR01T Ryh4KSBwcmludGYoIkRFQlVHOiIgeCAiXG4iKQ0KI2Vsc2UNCiMgIGRlZmlu ZSBERUJVR01TRyh4KSANCiNlbmRpZg0KDQojaWZuZGVmIFNVUEVSTFVESVIN CiMgIGRlZmluZSBTVVBFUkxVRElSICJTdXBlckxVL1NSQyINCiNlbmRpZg0K DQojZGVmaW5lIFNQX0ZBVEFMX0VSUihzdHIpIHsgZXJyb3Ioc3RyKTsgfQ0K DQojaW5jbHVkZSAidXRpbC5oIg0KI2luY2x1ZGUgImRzcF9kZWZzLmgiDQoN Ci8vICNpbmNsdWRlIDxvY3RhdmUvY29uZmlnLmg+DQojaW5jbHVkZSA8Y29u ZmlnLmg+DQoNCiNpbmNsdWRlIDxjc3RkbGliPg0KDQojaW5jbHVkZSA8c3Ry aW5nPg0KDQpjbGFzcyBvc3RyZWFtOw0KDQojaW5jbHVkZSA8b2N0YXZlL2xv LXV0aWxzLmg+DQojaW5jbHVkZSA8b2N0YXZlL214LWJhc2UuaD4NCiNpbmNs dWRlIDxvY3RhdmUvc3RyLXZlYy5oPg0KDQojaW5jbHVkZSA8b2N0YXZlL2Rl ZnVuLWRsZC5oPg0KI2luY2x1ZGUgPG9jdGF2ZS9lcnJvci5oPg0KI2luY2x1 ZGUgPG9jdGF2ZS9ncmlwZXMuaD4NCiNpbmNsdWRlIDxvY3RhdmUvbG8tbWFw cGVycy5oPg0KI2luY2x1ZGUgPG9jdGF2ZS9vY3Qtb2JqLmg+DQojaW5jbHVk ZSA8b2N0YXZlL29wcy5oPg0KI2luY2x1ZGUgPG9jdGF2ZS9vdi1iYXNlLmg+ DQojaW5jbHVkZSA8b2N0YXZlL292LXR5cGVpbmZvLmg+DQojaW5jbHVkZSA8 b2N0YXZlL292Lmg+DQojaW5jbHVkZSA8b2N0YXZlL292LXNjYWxhci5oPg0K I2luY2x1ZGUgPG9jdGF2ZS9vdi1yZS1tYXQuaD4NCiNpbmNsdWRlIDxvY3Rh dmUvcGFnZXIuaD4NCiNpbmNsdWRlIDxvY3RhdmUvcHItb3V0cHV0Lmg+DQoj aW5jbHVkZSA8b2N0YXZlL3N5bXRhYi5oPg0KI2luY2x1ZGUgPG9jdGF2ZS92 YXJpYWJsZXMuaD4NCg0KY2xhc3MgT2N0YXZlX21hcDsNCmNsYXNzIG9jdGF2 ZV92YWx1ZV9saXN0Ow0KDQpjbGFzcyB0cmVlX3dhbGtlcjsNCg0KLy8gSW50 ZWdlciB2YWx1ZXMuDQoNCmNsYXNzDQpvY3RhdmVfc3BhcnNlIDogcHVibGlj IG9jdGF2ZV9iYXNlX3ZhbHVlDQp7DQpwdWJsaWM6DQovLyBjb25zdHJ1Y3Rv cnM6IGZvciBzb21lIHJlYXNvbiB0aGV5IGhhdmUgdG8gYmUgZGVmaW5lZCBp bnNpZGUgdGhlIGNsYXNzIC0NCi8vICB3aGljaCBtYWtlcyBmb3IgYSBiaXph cnJlICouaCBmaWxlPw0KDQogICBvY3RhdmVfc3BhcnNlIChTdXBlck1hdHJp eCBBICkgew0KICAgICAgREVCVUdNU0coInNwYXJzZSggU3VwZXJNYXRyaXgg QSkiKTsNCiAgICAgIFg9IEE7DQogICB9DQoNCiAgIG9jdGF2ZV9zcGFyc2Ug KGNvbnN0IG9jdGF2ZV9zcGFyc2UmIHMpIHsNCiAgICAgIERFQlVHTVNHKCJz cGFyc2UoIHNwYXJzZSApIik7DQogICB9IA0KDQogIH5vY3RhdmVfc3BhcnNl ICh2b2lkKSB7DQogICAgICBERUJVR01TRygic3BhcnNlIGRlc3RydWN0b3Ii KTsNCiAgICAgIERlc3Ryb3lfU3VwZXJNYXRyaXhfU3RvcmUoICZYICk7DQog ICB9DQoNCiAgIG9jdGF2ZV92YWx1ZSAqY2xvbmUgKHZvaWQpIDsNCiAgIG9j dGF2ZV9zcGFyc2Ugc3BhcnNlX3ZhbHVlIChib29sID0gZmFsc2UpIGNvbnN0 IDsNCiAgIFN1cGVyTWF0cml4IHN1cGVyX21hdHJpeCAoYm9vbCA9IGZhbHNl KSBjb25zdCA7DQoNCiAgIGludCByb3dzICAgICh2b2lkKSBjb25zdCA7DQog ICBpbnQgY29sdW1ucyAodm9pZCkgY29uc3QgOw0KICAgaW50IG5ueiAgICAg KHZvaWQpIGNvbnN0IDsNCg0KICAgYm9vbCBpc19kZWZpbmVkICh2b2lkKSBj b25zdCA7DQogICBib29sIGlzX3JlYWxfc2NhbGFyICh2b2lkKSBjb25zdCA7 DQoNCiAgIG9jdGF2ZV92YWx1ZSBhbnkgKHZvaWQpIGNvbnN0IDsNCiAgIG9j dGF2ZV92YWx1ZSBhbGwgKHZvaWQpIGNvbnN0IDsNCg0KICAgYm9vbCBpc19y ZWFsX3R5cGUgKHZvaWQpIGNvbnN0Ow0KICAgYm9vbCBpc19zY2FsYXJfdHlw ZSAodm9pZCkgY29uc3Q7DQogICBib29sIGlzX251bWVyaWNfdHlwZSAodm9p ZCkgY29uc3Q7DQogICBib29sIHZhbGlkX2FzX3NjYWxhcl9pbmRleCAodm9p ZCkgY29uc3Q7DQogICBib29sIHZhbGlkX2FzX3plcm9faW5kZXggKHZvaWQp IGNvbnN0Ow0KICAgYm9vbCBpc190cnVlICh2b2lkKSBjb25zdDsNCi8vIGRv dWJsZSBkb3VibGVfdmFsdWUgKGJvb2wgPSBmYWxzZSkgY29uc3Q7DQoNCiAg IE1hdHJpeCBtYXRyaXhfdmFsdWUgKGJvb2wgPSBmYWxzZSkgY29uc3Q7DQog ICBvY3RhdmVfdmFsdWUgdW1pbnVzICh2b2lkKSBjb25zdCA7DQogICAvKg0K Ly8gVE9ETzogZml4IHRoaXMgd2hlbiB3ZSBzdXBwb3J0IENvbXBsZXggc3Bh cnNlDQogICBvY3RhdmVfdmFsdWUgaGVybWl0aWFuICh2b2lkKSBjb25zdCA7 DQogICAqLw0KICAgb2N0YXZlX3ZhbHVlIHRyYW5zcG9zZSAodm9pZCkgY29u c3QgOw0KDQogICBvY3RhdmVfdmFsdWUgZXh0cmFjdCAoaW50IHIxLCBpbnQg YzEsIGludCByMiwgaW50IGMyKSBjb25zdCA7DQovLyBvY3RhdmVfdmFsdWUg ZG9faW5kZXhfb3AgKGludCwgY29uc3Qgb2N0YXZlX3ZhbHVlX2xpc3QmIGlk eCk7DQogICBvY3RhdmVfdmFsdWVfbGlzdCBkb19tdWx0aV9pbmRleF9vcCAo aW50LCBjb25zdCBvY3RhdmVfdmFsdWVfbGlzdCYgaWR4KTsNCg0KICAgdm9p ZCBwcmludCAob3N0cmVhbSYgb3MsIGJvb2wgcHJfYXNfcmVhZF9zeW50YXgg PSBmYWxzZSkgY29uc3QgOw0KDQpwcml2YXRlOg0KICBTdXBlck1hdHJpeCBY IDsNCiAgREVDTEFSRV9PQ1RBVkVfQUxMT0NBVE9SDQogIERFQ0xBUkVfT1Zf VFlQRUlEX0ZVTkNUSU9OU19BTkRfREFUQQ0KfTsNCg0KLy8NCi8vIE1lbW9y eSBoYW5kbGluZyBtYWNyb3MNCi8vDQoNCi8vIEhvdyBhZ2dyZXNzaXZlbHkg ZG8gd2UgdHJ5IHRvIGNvbnNlcnZlIG1lbW9yeSBhbGxvY3MNCiNkZWZpbmUg RVhQQU5EIDINCg0KLy8gQ2hlY2sgaWYgd2UndmUgZmlsbGVkIHRoZSBhbGxv Y2F0ZWQgc3BhY2UsIA0KLy8gaWYgc28gd2UgYWxsb2MgRVhQQU5EIG1vcmUg YW5kIGNvcHkNCiNkZWZpbmUgQ0hFQ0tfQk9VTkRTMShpZHgsYm91bmQscHRy MSxwdHJfdHlwZTEpIFwNCiAgICAgICAgaWYgKChpZHgpPT0oYm91bmQpKSB7 IERFQlVHTVNHKCJncm93aW5nMSIpOyBcDQogICAgICAgICAgIGludCBpaTsg XA0KICAgICAgICAgICBwdHJfdHlwZTEgKnRtcHB0cjE7IFwNCiAgICAgICAg ICAgKGJvdW5kKSo9IEVYUEFORDsgXA0KICAgICAgICAgICB0bXBwdHIxPSAo cHRyX3R5cGUxICopIG1hbGxvYygoYm91bmQpICogc2l6ZW9mKHB0cl90eXBl MSkpOyBcDQogICAgICAgICAgIGZvciggaWk9MDsgaWk8KGlkeCk7IGlpKysp IFwNCiAgICAgICAgICAgICAgdG1wcHRyMVtpaV09IHB0cjFbaWldOyBcDQog ICAgICAgICAgIGZyZWUocHRyMSk7IFwNCiAgICAgICAgICAgcHRyMT0gdG1w cHRyMTsgfQ0KDQojZGVmaW5lIENIRUNLX0JPVU5EUzIoaWR4LGJvdW5kLHB0 cjEscHRyX3R5cGUxLHB0cjIscHRyX3R5cGUyKSBcDQogICAgICAgIGlmICgo aWR4KT09KGJvdW5kKSkgeyBERUJVR01TRygiZ3Jvd2luZzIiKTsgXA0KICAg ICAgICAgICBpbnQgaWk7IFwNCiAgICAgICAgICAgcHRyX3R5cGUxICp0bXBw dHIxOyBwdHJfdHlwZTIgKnRtcHB0cjI7IFwNCiAgICAgICAgICAgKGJvdW5k KSo9IEVYUEFORDsgXA0KICAgICAgICAgICB0bXBwdHIxPSAocHRyX3R5cGUx ICopIG1hbGxvYygoYm91bmQpICogc2l6ZW9mKHB0cl90eXBlMSkpOyBcDQog ICAgICAgICAgIHRtcHB0cjI9IChwdHJfdHlwZTIgKikgbWFsbG9jKChib3Vu ZCkgKiBzaXplb2YocHRyX3R5cGUyKSk7IFwNCiAgICAgICAgICAgZm9yKCBp aT0wOyBpaTwoaWR4KTsgaWkrKykgeyBcDQogICAgICAgICAgICAgIHRtcHB0 cjFbaWldPSBwdHIxW2lpXTsgXA0KICAgICAgICAgICAgICB0bXBwdHIyW2lp XT0gcHRyMltpaV07IH0gXA0KICAgICAgICAgICBmcmVlKHB0cjEpOyBmcmVl KHB0cjIpO1wNCiAgICAgICAgICAgcHRyMT0gdG1wcHRyMTsgcHRyMj0gdG1w cHRyMjsgfQ0KDQpvY3RhdmVfdmFsdWUgKiBvY3RhdmVfc3BhcnNlOjpjbG9u ZSAodm9pZCkgew0KICAgIERFQlVHTVNHKCJzcGFyc2UgLSBjbG9uZSIpOw0K ICAgIHJldHVybiBuZXcgb2N0YXZlX3NwYXJzZSAoKnRoaXMpOw0KIH0NCg0K b2N0YXZlX3NwYXJzZSBvY3RhdmVfc3BhcnNlOjpzcGFyc2VfdmFsdWUgKGJv b2wgPSBmYWxzZSkgY29uc3Qgew0KICAgREVCVUdNU0coInNwYXJzZV92YWx1 ZSIpOw0KICAgcmV0dXJuICAoKnRoaXMpOw0KfQ0KDQpTdXBlck1hdHJpeCBv Y3RhdmVfc3BhcnNlOjpzdXBlcl9tYXRyaXggKGJvb2wgPSBmYWxzZSkgY29u c3QgeyByZXR1cm4gWDsgfQ0KDQppbnQgb2N0YXZlX3NwYXJzZTo6cm93cyAg ICAodm9pZCkgY29uc3QgeyByZXR1cm4gWC5ucm93OyB9DQppbnQgb2N0YXZl X3NwYXJzZTo6Y29sdW1ucyAodm9pZCkgY29uc3QgeyByZXR1cm4gWC5uY29s OyB9DQoNCmludCBvY3RhdmVfc3BhcnNlOjpubnogICAgICh2b2lkKSBjb25z dCB7DQogICBOQ2Zvcm1hdCAqIE5DRiAgPSAoTkNmb3JtYXQgKiApIFguU3Rv cmU7DQogICByZXR1cm4gICBOQ0YtPm5ueiA7DQp9DQoNCnN0YXRpYyBNYXRy aXggc3BhcnNlX3RvX2Z1bGwgKCBTdXBlck1hdHJpeCBYICkgew0KICAgREVC VUdNU0coInNwYXJzZSAtIHNwYXJzZV90b19mdWxsIik7DQogICBOQ2Zvcm1h dCAqIE5DRiAgPSAoTkNmb3JtYXQgKikgWC5TdG9yZTsNCiAgIGRvdWJsZSAg ICogY29lZnA9IChkb3VibGUgKikgICBOQ0YtPm56dmFsOw0KICAgaW50ICAg ICAgKiByaWR4cD0gKGludCAgICAqKSAgIE5DRi0+cm93aW5kOw0KICAgaW50 ICAgICAgKiBjaWR4cD0gKGludCAgICAqKSAgIE5DRi0+Y29scHRyOw0KLy8g aW50ICAgICAgICAgbm56ID0gTkNGLT5ubno7DQogICBpbnQgICAgICAgICAg bnIgPSBYLm5yb3c7DQogICBpbnQgICAgICAgICAgbmMgPSBYLm5jb2w7DQog ICANCiAgIE1hdHJpeCBNKCBuciwgbmMgKTsNCiAgIGZvciAoaW50IGo9MDsg ajwgbmM7IGorKykgew0KICAgLy8gSSB0aGluayBuZXcgTWF0cmljZXMgYXJl IGluaXRpYWxpemVkIHRvIHplcm8sIGhvd2V2ZXIganVzdCBpbiBjYXNlDQog ICAgICBmb3IgKGludCBpPTA7IGk8IG5yOyBpKyspIE0oaSxqKT0gMDsNCiAg IA0KICAgICAgZm9yIChpbnQgaT0gY2lkeHBbal07IGk8IGNpZHhwW2orMV07 IGkrKykgDQogICAgICAgICBNKCByaWR4cFtpXSxqKT0gY29lZnBbaV07DQog ICB9IC8vIGZvciBpDQogICByZXR1cm4gTTsNCn0gICANCg0KLy9pZHhfdmVj dG9yIGluZGV4X3ZlY3RvciAodm9pZCkgY29uc3QgeyByZXR1cm4gaWR4X3Zl Y3RvciAoKGRvdWJsZSkgaXYpOyB9DQoNCmJvb2wgb2N0YXZlX3NwYXJzZTo6 aXNfZGVmaW5lZCAgICAodm9pZCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQ0K Ym9vbCBvY3RhdmVfc3BhcnNlOjppc19yZWFsX3NjYWxhciAodm9pZCkgY29u c3QgeyByZXR1cm4gZmFsc2U7IH0NCg0Kb2N0YXZlX3ZhbHVlIG9jdGF2ZV9z cGFyc2U6OmFueSAodm9pZCkgY29uc3Qgew0KICAgREVCVUdNU0coInNwYXJz ZSAtIGFueSIpOw0KICAgTWF0cml4IE09IHNwYXJzZV90b19mdWxsKCBYICk7 DQogICByZXR1cm4gTS5hbnkoKTsNCn0NCg0Kb2N0YXZlX3ZhbHVlIG9jdGF2 ZV9zcGFyc2U6OmFsbCAodm9pZCkgY29uc3Qgew0KICAgREVCVUdNU0coInNw YXJzZSAtIGFsbCIpOw0KICAgTWF0cml4IE09IHNwYXJzZV90b19mdWxsKCBY ICk7DQogICByZXR1cm4gTS5hbGwoKTsNCn0NCg0KYm9vbCBvY3RhdmVfc3Bh cnNlOjppc19yZWFsX3R5cGUgKHZvaWQpIGNvbnN0IHsgcmV0dXJuIHRydWU7 IH0NCmJvb2wgb2N0YXZlX3NwYXJzZTo6aXNfc2NhbGFyX3R5cGUgKHZvaWQp IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9DQpib29sIG9jdGF2ZV9zcGFyc2U6 OmlzX251bWVyaWNfdHlwZSAodm9pZCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg fQ0KDQpib29sIG9jdGF2ZV9zcGFyc2U6OnZhbGlkX2FzX3NjYWxhcl9pbmRl eCAodm9pZCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0NCg0KYm9vbCBvY3Rh dmVfc3BhcnNlOjp2YWxpZF9hc196ZXJvX2luZGV4ICh2b2lkKSBjb25zdCB7 IHJldHVybiBmYWxzZTsgfQ0KDQovL0EgbWF0cml4IGlzIHRydWUgaWYgaXQg aXMgYWxsIG5vbiB6ZXJvDQpib29sIG9jdGF2ZV9zcGFyc2U6OmlzX3RydWUg KHZvaWQpIGNvbnN0IHsNCiAgIERFQlVHTVNHKCJzcGFyc2UgLSBpc190cnVl Iik7DQogICBOQ2Zvcm1hdCAqIE5DRiAgPSAoTkNmb3JtYXQgKiApIFguU3Rv cmU7DQogICByZXR1cm4gKFgubnJvdyAqIFgubmNvbCA9PSBOQ0YtPm5ueiAp Ow0KfQ0KDQoNCi8vIHJlYnVpbGQgYSBmdWxsIG1hdHJpeCBmcm9tIGEgc3Bh cnNlIG9uZQ0KLy8gdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGFjY2Vzc2VkIHRo cm91Z2ggJ2Z1bGwnDQpNYXRyaXggb2N0YXZlX3NwYXJzZTo6bWF0cml4X3Zh bHVlIChib29sID0gZmFsc2UpIGNvbnN0IHsNCiAgIERFQlVHTVNHKCJzcGFy c2UgLSBtYXRyaXhfdmFsdWUiKTsNCiAgIE1hdHJpeCBNPSBzcGFyc2VfdG9f ZnVsbCggWCApOw0KICAgcmV0dXJuIE07DQp9DQoNCi8qDQogIENvbXBsZXgg Y29tcGxleF92YWx1ZSAoYm9vbCA9IGZhbHNlKSBjb25zdCB7IHJldHVybiBp djsgfQ0KDQogIENvbXBsZXhNYXRyaXggY29tcGxleF9tYXRyaXhfdmFsdWUg KGJvb2wgPSBmYWxzZSkgY29uc3QNCiAgICB7IHJldHVybiAgQ29tcGxleE1h dHJpeCAoMSwgMSwgQ29tcGxleCAoaXYpKTsgfQ0KDQogIG9jdGF2ZV92YWx1 ZSBub3QgKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG9jdGF2ZV92YWx1ZSAoKGRv dWJsZSkgISBpdik7IH0NCg0KICB2b2lkIGluY3JlbWVudCAodm9pZCkgeyAr K2l2OyB9DQoNCiAgdm9pZCBkZWNyZW1lbnQgKHZvaWQpIHsgLS1pdjsgfQ0K ICAqLw0KDQoNClVOT1BERUNMIChub3QsIGEgKSANCnsNCiAgIERFQlVHTVNH KCJzcGFyc2UgLSBub3QiKTsNCiAgIENBU1RfVU5PUF9BUkcgKGNvbnN0IG9j dGF2ZV9zcGFyc2UmKTsgDQogICBNYXRyaXggTSA9IHYubWF0cml4X3ZhbHVl KCk7DQogICByZXR1cm4gKCFNKTsNCn0gICANCg0Kb2N0YXZlX3ZhbHVlIG9j dGF2ZV9zcGFyc2U6OnVtaW51cyAodm9pZCkgY29uc3Qgew0KICAgTkNmb3Jt YXQgKiBOQ0YgID0gKE5DZm9ybWF0ICopIFguU3RvcmU7DQogICBkb3VibGUg ICAqIGNvZWZYPSAoZG91YmxlICopICAgTkNGLT5uenZhbDsNCiAgIGludCAg ICAgICogcmlkeFg9IChpbnQgICAgKikgICBOQ0YtPnJvd2luZDsNCiAgIGlu dCAgICAgICogY2lkeFg9IChpbnQgICAgKikgICBOQ0YtPmNvbHB0cjsNCiAg IGludCAgICAgICAgICBubno9IE5DRi0+bm56Ow0KDQogICBkb3VibGUgKmNv ZWZCID0gZG91YmxlTWFsbG9jKG5ueik7DQogICBpbnQgKiAgIHJpZHhCID0g aW50TWFsbG9jKG5ueik7DQogICBpbnQgKiAgIGNpZHhCID0gaW50TWFsbG9j KFgubmNvbCsxKTsNCg0KICAgZm9yICggaW50IGk9MDsgaTw9WC5uY29sOyBp KyspIA0KICAgICAgY2lkeEJbaV09ICBjaWR4WFtpXTsNCg0KICAgZm9yICgg aW50IGk9MDsgaTwgbm56OyBpKyspIHsNCiAgICAgIGNvZWZCW2ldPSAtY29l ZlhbaV07DQogICAgICByaWR4QltpXT0gIHJpZHhYW2ldOw0KICAgfQ0KICAg DQogICBTdXBlck1hdHJpeCBCOw0KICAgZENyZWF0ZV9Db21wQ29sX01hdHJp eCgmQiwgWC5ucm93LCBYLm5jb2wsIE5DRi0+bm56LA0KICAgICAgICAgICAg ICAgICAgICAgICAgICBjb2VmQiwgcmlkeEIsIGNpZHhCLCBOQywgX0QsIEdF KTsNCiAgIHJldHVybiBuZXcgb2N0YXZlX3NwYXJzZSAoIEIgKTsNCn0gLy8g b2N0YXZlX3ZhbHVlIHVtaW51cyAodm9pZCkgY29uc3Qgew0KDQpVTk9QREVD TCAodW1pbnVzLCBhICkgDQp7IA0KICAgREVCVUdNU0coInNwYXJzZSAtIHVt aW51cyIpOw0KICAgQ0FTVF9VTk9QX0FSRyAoY29uc3Qgb2N0YXZlX3NwYXJz ZSYpOyANCiAgIHJldHVybiB2LnVtaW51cygpOw0KfSAgIA0KDQoNCm9jdGF2 ZV92YWx1ZSBvY3RhdmVfc3BhcnNlOjp0cmFuc3Bvc2UgKHZvaWQpIGNvbnN0 IHsNCiAgIE5DZm9ybWF0ICogTkNGID0gKE5DZm9ybWF0ICopIFguU3RvcmU7 DQogICBpbnQgKiBjaWR4TiAsICogcmlkeE4gOw0KICAgZG91YmxlICogY29l Zk4gOw0KICAgU3VwZXJNYXRyaXggQjsNCg0KICAgZENvbXBSb3dfdG9fQ29t cENvbCggWC5uY29sLCBYLm5yb3csIE5DRi0+bm56LA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoZG91YmxlICopIE5DRi0+bnp2YWwsDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkNGLT5yb3dp bmQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TkNGLT5jb2xwdHIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm Y29lZk4sICZyaWR4TiwgJmNpZHhOKTsNCiAgIA0KICAgZENyZWF0ZV9Db21w Q29sX01hdHJpeCgmQiwgWC5uY29sLCBYLm5yb3csIE5DRi0+bm56LA0KICAg ICAgICAgICAgICAgICAgICAgICAgICBjb2VmTiwgcmlkeE4sIGNpZHhOLCBO QywgX0QsIEdFKTsNCiAgIHJldHVybiBuZXcgb2N0YXZlX3NwYXJzZSAoIEIg KTsNCn0gLy8gb2N0YXZlX3NwYXJzZTo6dHJhbnNwb3NlICh2b2lkKSBjb25z dCB7DQoNClVOT1BERUNMICh0cmFuc3Bvc2UsIGEpDQp7DQogICBERUJVR01T Rygic3BhcnNlIC0gdHJhbnNwb3NlIik7DQogICBDQVNUX1VOT1BfQVJHIChj b25zdCBvY3RhdmVfc3BhcnNlJik7IA0KICAgcmV0dXJuIHYudHJhbnNwb3Nl KCk7DQp9IC8vIHRyYW5zcG9zZQ0KDQovLyBUT0RPOiBmaXggdGhpcyB3aGVu IHdlIHN1cHBvcnQgQ29tcGxleCBzcGFyc2UNClVOT1BERUNMIChoZXJtaXRp YW4sIGEpDQp7DQogICBERUJVR01TRygic3BhcnNlIC0gaGVybWl0aWFuIik7 DQogICBDQVNUX1VOT1BfQVJHIChjb25zdCBvY3RhdmVfc3BhcnNlJik7IA0K ICAgcmV0dXJuIHYudHJhbnNwb3NlKCk7DQp9IC8vIGhlcm1pdGlhbg0KDQp0 eXBlZGVmIHN0cnVjdCB7IGxvbmcgdmFsOw0KICAgICAgICAgICAgICAgICBs b25nIGlkeDsgfSBzb3J0X2lkeDsgICANCi8vIGNvbXBhcmlzb24gZnVuY3Rp b24gZm9yIHNvcnQgaW4gaW5kZXgNCnN0YXRpYyBpbmxpbmUgaW50DQppeHBf Y29tcChjb25zdCB2b2lkICppLGNvbnN0IHZvaWQqaiApDQp7DQogICByZXR1 cm4gKCgoc29ydF9pZHggKikgaSktPnZhbCkgLSAoKChzb3J0X2lkeCAqKSBq KS0+dmFsKTsNCn0NCg0KLy8gZ2VuZXJhdGVzIGEgc29ydCBvZiBpZHh2IHdp dGggdGhlIHNvcnQgaW5kZXgNCi8vIG5vdGUgdGhhdCBzaWR4W10gbXVzdCBo YXZlIHNwYWNlIGZvciBpZHh2Lmxlbmd0aCBlbGVtZW50cw0Kc3RhdGljIGlu bGluZSB2b2lkDQpzb3J0X3dpdGhfaWR4IChzb3J0X2lkeCAqIHNpZHgsIGNv bnN0IGlkeF92ZWN0b3ImIGlkeHYsIGxvbmcgaXhsKSANCnsNCiAgIGlmIChp ZHh2LmlzX2NvbG9uKCkgKSB7DQogICAgICBmb3IgKGludCBpPTA7IGk8IGl4 bDsgaSsrKSB7DQogICAgICAgICBzaWR4W2ldLnZhbD0gaTsNCiAgICAgICAg IHNpZHhbaV0uaWR4PSBpOw0KICAgICAgfQ0KICAgfQ0KICAgZWxzZSB7DQog ICAgICBmb3IgKGludCBpPTA7IGk8IGl4bDsgaSsrKSB7DQogICAgICAgICBz aWR4W2ldLnZhbD0gaWR4dihpKTsNCiAgICAgICAgIHNpZHhbaV0uaWR4PSBp Ow0KICAgICAgfQ0KDQogICAgICBxc29ydCggc2lkeCwgaXhsLCBzaXplb2Yo c29ydF9pZHgpLCBpeHBfY29tcCApOw0KICAgfQ0KfSAgIA0KDQpzdGF0aWMg Q29sdW1uVmVjdG9yDQpzcGFyc2VfaW5kZXhfb25laWR4ICggU3VwZXJNYXRy aXggWCwgY29uc3QgaWR4X3ZlY3RvciBpeCkgew0KICAgREVCVUdNU0coInNw YXJzZV9pbmRleF9vbmVpZHgiKTsNCi8vIFJldHVybiBhIGZ1bGwgdmVjdG9y IG91dHB1dA0KLy8gRG9lcyBpdCBtYWtlIHNlbnNlIHRvIG91dHB1dCBhIHNw YXJzZSBtYXRyaXggaGVyZT8NCiAgIE5DZm9ybWF0ICogTkNGID0gKE5DZm9y bWF0ICopIFguU3RvcmU7DQogICBkb3VibGUgICAqY29lZlg9IChkb3VibGUg KikgIE5DRi0+bnp2YWw7DQogICBpbnQgICAgICAqcmlkeFg9ICAgICAgICAg ICAgIE5DRi0+cm93aW5kOw0KICAgaW50ICAgICAgKmNpZHhYPSAgICAgICAg ICAgICBOQ0YtPmNvbHB0cjsNCiAgIGludCAgICAgICBuciAgID0gWC5ucm93 Ow0KICAgaW50ICAgICAgIG5jICAgPSBYLm5jb2w7DQogICBsb25nICAgICAg aXhsOyANCg0KICAgaWYgKGl4LmlzX2NvbG9uKCkgKSANCiAgICAgIGl4bD0g bnIqbmM7DQogICBlbHNlICANCiAgICAgIGl4bD0gaXgubGVuZ3RoKC0xKTsg DQoNCiAgIHNvcnRfaWR4IGl4cFsgaXhsIF07DQogICBzb3J0X3dpdGhfaWR4 IChpeHAsIGl4LCBpeGwpOw0KDQogICBDb2x1bW5WZWN0b3IgTyggaXhsICk7 DQogICBsb25nIGlwPSAtbnI7IC8vIHByZXZpb3VzIGNvbHVtbiBwb3NpdGlv bg0KICAgbG9uZyBqaj0wLGpsPTA7DQogICBmb3IgKGxvbmcgaz0wOyBrPCBp eGw7IGsrKykgew0KICAgICAgbG9uZyBpaSAgPSBpeHBba10udmFsOw0KICAg ICAgbG9uZyBrb3V0PSBpeHBba10uaWR4Ow0KDQogICAgICBpZiAoIGlpPDAg fHwgaWk+PW5yKm5jKSANCiAgICAgICAgIFNQX0ZBVEFMX0VSUigiaW52YWxp ZCBtYXRyaXggaW5kZXgiKTsNCiANCiAgICAgIGludCByb3duPSBpaS9ucjsN CiAgICAgIGlmICggcm93biA+IGlwL25yICkgeyAvLyB3ZSd2ZSBtb3ZlZCB0 byBhIG5ldyBjb2x1bW4NCiAgICAgICAgIGpsPSBjaWR4WFtyb3duXTsNCiAg ICAgICAgIGpqPSBjaWR4WFtyb3duKzFdOw0KICAgICAgfQ0KDQogICAgICB3 aGlsZSAoIHJpZHhYW2psXSA8IGlpJW5yICYmIGpsIDwgamogKSBqbCsrOw0K DQogICAgICBpZiAoIHJpZHhYW2psXSA9PSBpaSVuciAmJiBqbDxqaiApIA0K ICAgICAgICAgTygga291dCApID0gY29lZlhbamxdIDsNCiAgICAgIGVsc2UN CiAgICAgICAgIE8oIGtvdXQgKSA9IDAgOw0KDQogICAgICBpcD1paTsNCiAg IH0NCiAgIHJldHVybiBPOw0KfSAvLyBzcGFyc2VfaW5kZXhfb25laWR4ICgN Cg0KDQpzdGF0aWMgU3VwZXJNYXRyaXgNCnNwYXJzZV9pbmRleF90d29pZHgg KCBTdXBlck1hdHJpeCBYLA0KICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGlkeF92ZWN0b3IgaXgsDQogICAgICAgICAgICAgICAgICAgICAgY29uc3Qg aWR4X3ZlY3RvciBqeCkgew0KICAgREVCVUdNU0coInNwYXJzZV9pbmRleF90 d29pZHgiKTsNCiAgIGludCAgICAgICBuciAgID0gWC5ucm93Ow0KICAgaW50 ICAgICAgIG5jICAgPSBYLm5jb2w7DQoNCiAgIGludCBpeGwsanhsOw0KICAg aWYgKGl4LmlzX2NvbG9uKCkgKSAgICAgIGl4bD0gbnI7DQogICBlbHNlICAg ICAgICAgICAgICAgICAgICAgaXhsPSBpeC5sZW5ndGgoLTEpOyANCg0KICAg aWYgKGp4LmlzX2NvbG9uKCkgKSAgICAgIGp4bD0gbmM7DQogICBlbHNlICAg ICAgICAgICAgICAgICAgICAganhsPSBqeC5sZW5ndGgoLTEpOyANCg0KICAg c29ydF9pZHggaXhwWyBpeGwgXTsNCiAgIHNvcnRfd2l0aF9pZHggKGl4cCwg aXgsIGl4bCk7DQoNCiAgIE5DZm9ybWF0ICogTkNGID0gKE5DZm9ybWF0ICop IFguU3RvcmU7DQogICBkb3VibGUgICAqY29lZlg9IChkb3VibGUgKikgIE5D Ri0+bnp2YWw7DQogICBpbnQgICAgICAqcmlkeFg9ICAgICAgICAgICAgIE5D Ri0+cm93aW5kOw0KICAgaW50ICAgICAgKmNpZHhYPSAgICAgICAgICAgICBO Q0YtPmNvbHB0cjsNCg0KICAgLy8gZXh0aW1hdGUgdGhlIG5ueiBpbiB0aGUg b3V0cHV0IG1hdHJpeA0KICAgaW50IG5ueiA9IChpbnQpIGNlaWwoIChOQ0Yt Pm5ueikgKiAoMS4wKml4bCAvIG5yKSAqICgxLjAqanhsIC8gbmMpICk7IA0K ICAgZG91YmxlICogY29lZkIgPSBkb3VibGVNYWxsb2Mobm56KTsNCiAgIGlu dCAgICAqIHJpZHhCID0gaW50TWFsbG9jICAgKG5ueik7DQogICBpbnQgICAg KiBjaWR4QiA9IGludE1hbGxvYyAgIChqeGwrMSk7ICBjaWR4QlswXT0gMDsN Cg0KICAgZG91YmxlIHRjb2xbaXhsXTsgIC8vIGEgY29sdW1uIG9mIHRoZSBl eHRyYWN0ZWQgbWF0cml4DQoNCiAgIGludCBjeD0gMCwgbGw9MDsNCiAgIGlu dCBpcD0gLW5jOyAvLyBwcmV2aW91cyBjb2x1bW4gcG9zaXRpb24NCiAgIGZv ciAoaW50IGw9MDsgbDwganhsOyBsKyspIHsNCiAgICAgIGlmIChqeC5pc19j b2xvbigpICkgICAgbGw9IGw7DQogICAgICBlbHNlICAgICAgICAgICAgICAg ICAgIGxsPSBqeChsKTsNCg0KICAgICAgaWYgKCBsbDwwIHx8IGxsPj1uYykg DQogICAgICAgICAgICBTUF9GQVRBTF9FUlIoImludmFsaWQgbWF0cml4IGlu ZGV4ICh4IGluZGV4KSIpOw0KDQogICAgICBpbnQgamw9IGNpZHhYW2xsXTsN CiAgICAgIGludCBqaj0gY2lkeFhbbGwrMV07DQogICAgICBmb3IgKGxvbmcg az0wOyBrPCBpeGw7IGsrKykgew0KICAgICAgICAgbG9uZyBpaSAgPSBpeHBb a10udmFsOw0KICAgICAgICAgbG9uZyBrb3V0PSBpeHBba10uaWR4Ow0KICAg DQogICAgICAgICBpZiAoIGlpPDAgfHwgaWk+PW5yKSANCiAgICAgICAgICAg IFNQX0ZBVEFMX0VSUigiaW52YWxpZCBtYXRyaXggaW5kZXggKHggaW5kZXgp Iik7DQoNCiAgICAgICAgIHdoaWxlICggcmlkeFhbamxdIDwgaWkgJiYgamwg PCBqaiApIGpsKys7DQoNCg0KICAgICAgICAgaWYgKCByaWR4WFtqbF0gPT0g aWkgJiYgamw8amogKSANCiAgICAgICAgICAgIHRjb2xbIGtvdXQgXSA9IGNv ZWZYW2psXSA7DQogICAgICAgICBlbHNlDQogICAgICAgICAgICB0Y29sWyBr b3V0IF0gPSAwIDsNCg0KICAgICAgICAgaXA9aWk7DQogICANCiAgICAgIH0g Ly8gZm9yIGsNCiAgICAgIGZvciAoaW50IGo9MDsgajxpeGw7IGorKykgew0K ICAgICAgICAgaWYgKHRjb2xbal0gIT0wICkgew0KICAgICAgICAgICAgQ0hF Q0tfQk9VTkRTMiggY3gsIG5ueiwgcmlkeEIsIGludCwgY29lZkIsIGRvdWJs ZSApOyANCiAgICAgICAgICAgIHJpZHhCW2N4XT0gajsNCiAgICAgICAgICAg IGNvZWZCW2N4XT0gdGNvbFtqXTsNCiAgICAgICAgICAgIGN4Kys7DQogICAg ICAgICB9DQogICAgICB9DQogICAgICBjaWR4QltsKzFdPSBjeDsNCiAgIH0g Ly8gZm9yIGwNCg0KICAgaWYgKGN4IDwgbm56KSANCiAgICAgIGlmKCAoIE5V TEwgPT0gcmVhbGxvYyhyaWR4QiwgY3gqc2l6ZW9mKGludCAgICkpICkgfHwN CiAgICAgICAgICAoIE5VTEwgPT0gcmVhbGxvYyhjb2VmQiwgY3gqc2l6ZW9m KGRvdWJsZSkpICkgKQ0KICAgICAgICAgIFNQX0ZBVEFMX0VSUigibWVtb3J5 IGVycm9yIik7DQoNCiAgIFN1cGVyTWF0cml4IEI7DQogICBkQ3JlYXRlX0Nv bXBDb2xfTWF0cml4KCZCLCBpeGwsIGp4bCwgY3gsDQogICAgICAgICAgICAg ICAgICAgICAgIGNvZWZCLCByaWR4QiwgY2lkeEIsIE5DLCBfRCwgR0UpOw0K DQogICByZXR1cm4gQjsgICAgICAgICAgICAgICAgICAgICAgICAgIA0KfSAv LyBzcGFyc2VfaW5kZXhfdHdvaWR4ICgNCg0KLy8gaW5kZXhpbmcgb3BlcmF0 aW9ucw0KLy8gb2N0YXZlX3ZhbHVlDQovLyBvY3RhdmVfc3BhcnNlOjpkb19p bmRleF9vcCAoaW50LCBjb25zdCBvY3RhdmVfdmFsdWVfbGlzdCYgaWR4KQ0K b2N0YXZlX3ZhbHVlX2xpc3QNCm9jdGF2ZV9zcGFyc2U6OmRvX211bHRpX2lu ZGV4X29wIChpbnQsIGNvbnN0IG9jdGF2ZV92YWx1ZV9saXN0JiBpZHgpIA0K ew0KICAgREVCVUdNU0coInNwYXJzZSAtIGluZGV4IG9wIik7DQogICBvY3Rh dmVfdmFsdWUgcmV0dmFsOw0KICAgDQogICBpZiAoIGlkeC5sZW5ndGggKCkg PT0gMSkgew0KICAgICAgY29uc3QgaWR4X3ZlY3RvciBpeCA9IGlkeCAoMCku aW5kZXhfdmVjdG9yICgpOw0KICAgICAgQ29sdW1uVmVjdG9yIE89IHNwYXJz ZV9pbmRleF9vbmVpZHgoIFgsIGl4ICk7DQoNCg0KLy8gMi4xLjMwIGhhY2sg ICAgICANCmludCBWcHJlZmVyX2NvbHVtbl92ZWN0b3JzPSAxOw0KICAgICAg aWYgKFZwcmVmZXJfY29sdW1uX3ZlY3RvcnMpICByZXR2YWw9IE87DQogICAg ICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbD0gTy50cmFu c3Bvc2UoKTsNCiAgIH0gZWxzZQ0KICAgaWYgKCBpZHgubGVuZ3RoICgpID09 IDIpIHsNCiAgICAgIGNvbnN0IGlkeF92ZWN0b3IgaXggPSBpZHggKDApLmlu ZGV4X3ZlY3RvciAoKTsNCiAgICAgIGNvbnN0IGlkeF92ZWN0b3IganggPSBp ZHggKDEpLmluZGV4X3ZlY3RvciAoKTsNCg0KICAgICAgcmV0dmFsPSBuZXcg b2N0YXZlX3NwYXJzZSAoIA0KICAgICAgICAgICAgICAgICAgc3BhcnNlX2lu ZGV4X3R3b2lkeCAoIFgsIGl4LCBqeCApKTsNCiAgIH0gZWxzZQ0KICAgICAg U1BfRkFUQUxfRVJSKCJuZWVkIDEgb3IgMiBpbmRpY2VzIGZvciBzcGFyc2Ug aW5kZXhpbmcgb3BlcmF0aW9ucyIpOw0KDQogICByZXR1cm4gcmV0dmFsOw0K fSAvLyBvY3RhdmVfc3BhcnNlOjpkb19pbmRleF9vcA0KDQoNCm9jdGF2ZV92 YWx1ZQ0Kb2N0YXZlX3NwYXJzZTo6ZXh0cmFjdCAoaW50IHIxLCBpbnQgYzEs IGludCByMiwgaW50IGMyKSBjb25zdCB7DQogICBERUJVR01TRygic3BhcnNl IC0gZXh0cmFjdCIpOw0KICAgU3VwZXJNYXRyaXggQjsNCiAgIE5DZm9ybWF0 ICogTkNGID0gKE5DZm9ybWF0ICopIFguU3RvcmU7DQogICBkb3VibGUgICAq Y29lZlg9IChkb3VibGUgKikgIE5DRi0+bnp2YWw7DQogICBpbnQgICAgICAq cmlkeFg9ICAgICAgICAgICAgIE5DRi0+cm93aW5kOw0KICAgaW50ICAgICAg KmNpZHhYPSAgICAgICAgICAgICBOQ0YtPmNvbHB0cjsNCg0KLy8gZXN0aW1h dGUgdGhlIG5ueiBuZWVkZWQgaXMgdGhlIEEtPm5ueiB0aW1lcyB0aGUNCi8v ICBmcmFjdGlvbiBvZiB0aGUgbWF0cml4IHNlbGVjdGVkDQogICBpZiAocjEg PiByMikgeyBpbnQgdG1wID0gcjE7IHIxID0gcjI7IHIyID0gdG1wOyB9DQog ICBpZiAoYzEgPiBjMikgeyBpbnQgdG1wID0gYzE7IGMxID0gYzI7IGMyID0g dG1wOyB9DQogICBpbnQgbT0gcjEtcjIrMTsNCiAgIGludCBuPSBjMS1jMisx Ow0KDQogICBpbnQgbm56ID0gKGludCkgY2VpbCggKE5DRi0+bm56KSAqICgx LjAqbSAvIFgubnJvdykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICogKDEuMCpuIC8gWC5uY29sKSApOyANCg0KICAgZG91YmxlICog Y29lZkIgPSBkb3VibGVNYWxsb2Mobm56KTsNCiAgIGludCAgICAqIHJpZHhC ID0gaW50TWFsbG9jICAgKG5ueik7DQogICBpbnQgICAgKiBjaWR4QiA9IGlu dE1hbGxvYyAgIChuKzEpOyAgY2lkeEJbMF09IDA7DQoNCiAgIGludCBjeD0g MDsNCiAgIGZvciAoaW50IGk9MCwgaWk9IGMxOyBpIDwgbiA7IGkrKywgaWkr Kykgew0KICAgICAgZm9yICggaW50IGo9IGNpZHhYW2lpXTsgajwgY2lkeFhb aWkrMV07IGorKykgew0KICAgICAgICAgaW50IHJvdyA9IHJpZHhYWyBqIF07 DQogICAgICAgICBpZiAoIHJvdz49IHIxICYmIHJvdzw9cjIgJiYgY29lZlhb al0gIT0wICkgew0KICAgICAgICAgICAgQ0hFQ0tfQk9VTkRTMiggY3gsIG5u eiwgcmlkeEIsIGludCwgY29lZkIsIGRvdWJsZSApOyANCiAgICAgICAgICAg IHJpZHhCWyBjeCBdPSByb3cgLSByMTsNCiAgICAgICAgICAgIGNvZWZCWyBj eCBdPSBjb2VmWFsgaiBdOw0KICAgICAgICAgICAgY3grKzsNCiAgICAgICAg IH0gLy8gaWYgcm93DQogICAgICB9IC8vZm9yIGoNCg0KICAgICAgY2lkeFhb aSsxXSA9IGN4Ow0KICAgfSAvLyBmb3IgKCBpPTANCg0KICAgaWYgKGN4IDwg bm56KSANCiAgICAgIGlmKCAoIE5VTEwgPT0gcmVhbGxvYyhyaWR4WCwgY3gq c2l6ZW9mKGludCAgICkpICkgfHwNCiAgICAgICAgICAoIE5VTEwgPT0gcmVh bGxvYyhjb2VmWCwgY3gqc2l6ZW9mKGRvdWJsZSkpICkgKQ0KICAgICAgICAg IFNQX0ZBVEFMX0VSUigibWVtb3J5IGVycm9yIik7DQoNCiAgIGRDcmVhdGVf Q29tcENvbF9NYXRyaXgoJkIsIG0sIG4sIGN4LA0KICAgICAgICAgICAgICAg ICAgICAgICAgICBjb2VmQiwgcmlkeEIsIGNpZHhCLCBOQywgX0QsIEdFKTsN Cg0KICAgcmV0dXJuIG5ldyBvY3RhdmVfc3BhcnNlICggQiApOw0KfSAvLyBv Y3RhdmVfc3BhcnNlOjpleHRyYWN0IChpbnQgcjEsIGludCBjMSwgaW50IHIy LCBpbnQgYzIpIGNvbnN0IHsNCg0Kdm9pZCBvY3RhdmVfc3BhcnNlOjpwcmlu dCAob3N0cmVhbSYgb3MsIGJvb2wgcHJfYXNfcmVhZF9zeW50YXggKSBjb25z dA0Kew0KICAgREVCVUdNU0coInNwYXJzZSAtIHByaW50Iik7DQojaWYgMA0K Ly8gSSBmaW5kIHRoZSBTdXBlckxVIHByaW50IGZ1bmN0aW9uIHRvIGJlIHVn bHkgYW5kIGNsdW1zeQ0KICAgZFByaW50X0NvbXBDb2xfTWF0cml4KCJvY3Rh dmUgc3BhcnNlIiwgJlgpOw0KI2Vsc2UgICAgICANCiAgIE5DZm9ybWF0ICog TkNGICA9IChOQ2Zvcm1hdCAqKSBYLlN0b3JlOw0KICAgZG91YmxlICAgKiBj b2VmcD0gKGRvdWJsZSAqKSAgIE5DRi0+bnp2YWw7DQogICBpbnQgICAgICAq IHJpZHhwPSAoaW50ICAgICopICAgTkNGLT5yb3dpbmQ7DQogICBpbnQgICAg ICAqIGNpZHhwPSAoaW50ICAgICopICAgTkNGLT5jb2xwdHI7DQogICBpbnQg ICAgICAgICBubnogPSBOQ0YtPm5uejsNCiAgIGludCAgICAgICAgICBuciA9 IFgubnJvdzsNCiAgIGludCAgICAgICAgICBuYyA9IFgubmNvbDsNCiAgIA0K ICAgb3MgPDwgIkNvbXByZXNzZWQgQ29sdW1uIFNwYXJzZSAocm93cz0iIDw8 IG5yIDw8DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCBj b2xzPSIgPDwgbmMgPDwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICIsIG5uej0iIDw8IG5ueiA8PCAiKVxuIjsNCiAgIC8vIGFkZCBvbmUg dG8gdGhlIHByaW50ZWQgaW5kaWNlcyB0byBnbyBmcm9tDQogICAvLyAgemVy by1iYXNlZCB0byBvbmUtYmFzZWQgYXJyYXlzDQogICBmb3IgKGludCBqPTA7 IGo8IG5jOyBqKyspIA0KICAgICAgZm9yIChpbnQgaT0gY2lkeHBbal07IGk8 IGNpZHhwW2orMV07IGkrKykgDQogICAgICAgICBvcyA8PCAiICAoIiA8PCBy aWR4cFtpXSsxIDw8DQogICAgICAgICAgICAgICAiICwgIiAgPDwgaisxIDw8 ICIpIC0+ICIgPDwgY29lZnBbaV0gPDwgIlxuIjsNCiNlbmRpZiAgICAgICAg ICAgICAgICAgIA0KfSAvLyBwcmludA0KDQoNCkRFRkJJTk9QKCBzX2ZfYWRk LCBzcGFyc2UsIG1hdHJpeCApDQp7DQogICBERUJVR01TRygic3BhcnNlIC0g c19mX2FkZCIpOw0KICAgQ0FTVF9CSU5PUF9BUkdTIChjb25zdCBvY3RhdmVf c3BhcnNlJiwgY29uc3Qgb2N0YXZlX21hdHJpeCYpOw0KICAgcmV0dXJuIG5l dyBvY3RhdmVfbWF0cml4KCB2MS5tYXRyaXhfdmFsdWUoKSArIHYyLm1hdHJp eF92YWx1ZSgpICk7DQp9ICAgDQoNCkRFRkJJTk9QKCBmX3NfYWRkLCBtYXRy aXgsIHNwYXJzZSApDQp7DQogICBERUJVR01TRygic3BhcnNlIC0gZl9zX2Fk ZCIpOw0KICAgQ0FTVF9CSU5PUF9BUkdTICggY29uc3Qgb2N0YXZlX21hdHJp eCYsIGNvbnN0IG9jdGF2ZV9zcGFyc2UmKTsNCiAgIHJldHVybiBuZXcgb2N0 YXZlX21hdHJpeCggdjEubWF0cml4X3ZhbHVlKCkgKyB2Mi5tYXRyaXhfdmFs dWUoKSApOw0KfSAgIA0KDQpERUZCSU5PUCggc19zX2FkZCwgc3BhcnNlLCBz cGFyc2UpDQp7DQogICBERUJVR01TRygic3BhcnNlIC0gc19zX2FkZCIpOw0K ICAgQ0FTVF9CSU5PUF9BUkdTIChjb25zdCBvY3RhdmVfc3BhcnNlJiwgY29u c3Qgb2N0YXZlX3NwYXJzZSYpOw0KICAgU3VwZXJNYXRyaXggIEE9IHYxLnN1 cGVyX21hdHJpeCgpOw0KICAgU3VwZXJNYXRyaXggIEI9IHYyLnN1cGVyX21h dHJpeCgpOw0KDQogICBpbnQgbnI9IEIubnJvdzsNCiAgIGludCBuYz0gQi5u Y29sOw0KICAgDQogICBpZiAoIChuciAhPSBBLm5yb3cpIHx8IChuYyAhPSBB Lm5jb2wpICkNCiAgICAgIFNQX0ZBVEFMX0VSUigiU3BhcnNlOiBNYXRyaXgg c2l6ZSBtaXNtYXRjaCIgKTsNCiAgIA0KICAgTkNmb3JtYXQgKiBOQ0EgICA9 IChOQ2Zvcm1hdCAqKSBBLlN0b3JlOw0KICAgZG91YmxlICAgKiBjb2VmQSA9 IChkb3VibGUgKikgICBOQ0EtPm56dmFsOw0KICAgaW50ICAgICAgKiByaWR4 QSA9ICAgICAgICAgICAgICBOQ0EtPnJvd2luZDsNCiAgIGludCAgICAgICog Y2lkeEEgPSAgICAgICAgICAgICAgTkNBLT5jb2xwdHI7DQogICBOQ2Zvcm1h dCAqIE5DQiAgID0gKE5DZm9ybWF0ICopIEIuU3RvcmU7DQogICBkb3VibGUg ICAqIGNvZWZCID0gKGRvdWJsZSAqKSAgIE5DQi0+bnp2YWw7DQogICBpbnQg ICAgICAqIHJpZHhCID0gICAgICAgICAgICAgIE5DQi0+cm93aW5kOw0KICAg aW50ICAgICAgKiBjaWR4QiA9ICAgICAgICAgICAgICBOQ0ItPmNvbHB0cjsN Cg0KLy8gdGhlIG91dHB1dCBubnogPD0gbm56QSArIG5uekINCiAgIGludCBu bnogPSBOQ0EtPm5ueiArIE5DQi0+bm56IDsNCg0KICAgaW50ICogICByaWR4 WCA9IGludE1hbGxvYyAgIChubnopOw0KICAgZG91YmxlICpjb2VmWCA9IGRv dWJsZU1hbGxvYyhubnopOw0KICAgaW50ICogICBjaWR4WCA9IGludE1hbGxv YyAgIChuYysxKTsgIGNpZHhYWzBdPSAwOw0KDQovLw0KLy8gR28gdGhyb3Vn aCBlYWNoIGNvbHVtbiBhbmQgbG9vayBmb3IgZWxlbWVudHMgd2hpY2gNCi8v ICAgbWF0Y2ggYmV0d2VlbiBtYXRyaWNlcw0KLy8NCiAgIGludCBqeD0gMDsN Cg0KICAgZm9yIChpbnQgaT0gMCA7IGkgPCBuYyA7IGkrKyApIHsNCiAgICAg IGludCBqYT0gY2lkeEFbIGkgXTsNCiAgICAgIGludCBqYj0gY2lkeEJbIGkg XTsNCg0KICAgICAgd2hpbGUoIChqYSA8IGNpZHhBWyBpKzEgXSkgfHwgKGpi IDwgY2lkeEJbIGkrMSBdKSApIHsNCiAgICAgICAgIGlmKCAoamI9PWNpZHhC W2krMV0pIHx8DQogICAgICAgICAgICAoKHJpZHhBW2phXSA8IHJpZHhCW2pi XSkgJiYgKGphPGNpZHhBW2krMV0pKSApIHsNCiAgICAgICAgICAgIHJpZHhY WyBqeCBdID0gcmlkeEFbIGphIF07DQogICAgICAgICAgICBjb2VmWFsgangg XSA9IGNvZWZBWyBqYSBdOw0KICAgICAgICAgICAgamErKzsgangrKzsNCiAg ICAgICAgIH0gZWxzZQ0KICAgICAgICAgaWYoIChqYT09Y2lkeEFbaSsxXSkg fHwNCiAgICAgICAgICAgICgocmlkeEJbamJdIDwgcmlkeEFbamFdKSAmJiAo amI8Y2lkeEJbaSsxXSkpICkgew0KICAgICAgICAgICAgcmlkeFhbIGp4IF0g PSByaWR4QlsgamIgXTsNCiAgICAgICAgICAgIGNvZWZYWyBqeCBdID0gY29l ZkJbIGpiIF07DQogICAgICAgICAgICBqYisrOyBqeCsrOw0KICAgICAgICAg fSBlbHNlDQogICAgICAgICBpZiAocmlkeEFbamFdID09IHJpZHhCW2piXSAp IHsNCiAgICAgICAgICAgIHJpZHhYWyBqeCBdID0gcmlkeEFbIGphIF07DQog ICAgICAgICAgICBjb2VmWFsganggXSA9IGNvZWZBWyBqYSBdICsgY29lZkJb IGpiIF07DQogICAgICAgICAgICBqeCsrOyBqYSsrOyBqYisrOw0KICAgICAg ICAgfSBlbHNlIHsNCiAgICAgICAgICAgIERFQlVHTVNHKCJzaG91bGRuJ3Qg Z2V0IGhlcmUgLSBzX3NfYWRkIik7DQogICAgICAgICB9DQogICAgICB9IC8v IGZvciBqYQ0KDQogICAgICBjaWR4WFtpKzFdID0gang7IA0KICAgfSAvLyBm b3IoIGkNCg0KICAgaWYgKGp4IDwgbm56KSANCiAgICAgIGlmKCAoIE5VTEwg PT0gcmVhbGxvYyhyaWR4WCwgangqc2l6ZW9mKGludCAgICkpICkgfHwNCiAg ICAgICAgICAoIE5VTEwgPT0gcmVhbGxvYyhjb2VmWCwgangqc2l6ZW9mKGRv dWJsZSkpICkgKQ0KICAgICAgICAgIFNQX0ZBVEFMX0VSUigibWVtb3J5IGVy cm9yIik7DQoNCiAgIFN1cGVyTWF0cml4ICBYOw0KICAgZENyZWF0ZV9Db21w Q29sX01hdHJpeCgmWCwgbnIsIG5jLCBqeCwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgY29lZlgsIHJpZHhYLCBjaWR4WCwgTkMsIF9ELCBHRSk7DQoN CiAgIHJldHVybiBuZXcgb2N0YXZlX3NwYXJzZSAoIFggKTsNCn0gLy8gc19z X2FkZA0KDQpERUZCSU5PUCggc19mX3N1Yiwgc3BhcnNlLCBtYXRyaXggKQ0K ew0KICAgREVCVUdNU0coInNwYXJzZSAtIHNfZl9zdWIiKTsNCiAgIENBU1Rf QklOT1BfQVJHUyAoY29uc3Qgb2N0YXZlX3NwYXJzZSYsIGNvbnN0IG9jdGF2 ZV9tYXRyaXgmKTsNCiAgIHJldHVybiBuZXcgb2N0YXZlX21hdHJpeCggdjEu bWF0cml4X3ZhbHVlKCkgLSB2Mi5tYXRyaXhfdmFsdWUoKSApOw0KfSAgIA0K DQpERUZCSU5PUCggZl9zX3N1YiwgbWF0cml4LCBzcGFyc2UgKQ0Kew0KICAg REVCVUdNU0coInNwYXJzZSAtIGZfc19zdWIiKTsNCiAgIENBU1RfQklOT1Bf QVJHUyAoIGNvbnN0IG9jdGF2ZV9tYXRyaXgmLCBjb25zdCBvY3RhdmVfc3Bh cnNlJik7DQogICByZXR1cm4gbmV3IG9jdGF2ZV9tYXRyaXgoIHYxLm1hdHJp eF92YWx1ZSgpIC0gdjIubWF0cml4X3ZhbHVlKCkgKTsNCn0gICANCg0KREVG QklOT1AoIHNfc19zdWIsIHNwYXJzZSwgc3BhcnNlKQ0Kew0KICAgREVCVUdN U0coInNwYXJzZSAtIHNfc19hZGQiKTsNCiAgIENBU1RfQklOT1BfQVJHUyAo Y29uc3Qgb2N0YXZlX3NwYXJzZSYsIGNvbnN0IG9jdGF2ZV9zcGFyc2UmKTsN CiAgIFN1cGVyTWF0cml4ICBBPSB2MS5zdXBlcl9tYXRyaXgoKTsNCiAgIFN1 cGVyTWF0cml4ICBCPSB2Mi5zdXBlcl9tYXRyaXgoKTsNCiAgIFN1cGVyTWF0 cml4ICBYOw0KDQogICBpbnQgbnI9IEIubnJvdzsNCiAgIGludCBuYz0gQi5u Y29sOw0KICAgDQogICBpZiAoIChuciAhPSBBLm5yb3cpIHx8IChuYyAhPSBB Lm5jb2wpICkNCiAgICAgIFNQX0ZBVEFMX0VSUigiU3BhcnNlOiBNYXRyaXgg c2l6ZSBtaXNtYXRjaCIgKTsNCiAgIA0KICAgTkNmb3JtYXQgKiBOQ0EgICA9 IChOQ2Zvcm1hdCAqKSBBLlN0b3JlOw0KICAgZG91YmxlICAgKiBjb2VmQSA9 IChkb3VibGUgKikgICBOQ0EtPm56dmFsOw0KICAgaW50ICAgICAgKiByaWR4 QSA9ICAgICAgICAgICAgICBOQ0EtPnJvd2luZDsNCiAgIGludCAgICAgICog Y2lkeEEgPSAgICAgICAgICAgICAgTkNBLT5jb2xwdHI7DQogICBOQ2Zvcm1h dCAqIE5DQiAgID0gKE5DZm9ybWF0ICopIEIuU3RvcmU7DQogICBkb3VibGUg ICAqIGNvZWZCID0gKGRvdWJsZSAqKSAgIE5DQi0+bnp2YWw7DQogICBpbnQg ICAgICAqIHJpZHhCID0gICAgICAgICAgICAgIE5DQi0+cm93aW5kOw0KICAg aW50ICAgICAgKiBjaWR4QiA9ICAgICAgICAgICAgICBOQ0ItPmNvbHB0cjsN Cg0KLy8gdGhlIG91dHB1dCBubnogPD0gbm56QSArIG5uekINCiAgIGludCBu bnogPSBOQ0EtPm5ueiArIE5DQi0+bm56IDsNCg0KICAgaW50ICogICByaWR4 WCA9IGludE1hbGxvYyAgIChubnopOw0KICAgZG91YmxlICpjb2VmWCA9IGRv dWJsZU1hbGxvYyhubnopOw0KICAgaW50ICogICBjaWR4WCA9IGludE1hbGxv YyAgIChuYysxKTsgIGNpZHhYWzBdPSAwOw0KDQovLw0KLy8gR28gdGhyb3Vn aCBlYWNoIGNvbHVtbiBhbmQgbG9vayBmb3IgZWxlbWVudHMgd2hpY2gNCi8v ICAgbWF0Y2ggYmV0d2VlbiBtYXRyaWNlcw0KLy8NCiAgIGludCBqeD0gMDsN Cg0KICAgZm9yIChpbnQgaT0gMCA7IGkgPCBuYyA7IGkrKyApIHsNCiAgICAg IGludCBqYT0gY2lkeEFbIGkgXTsNCiAgICAgIGludCBqYj0gY2lkeEJbIGkg XTsNCg0KICAgICAgd2hpbGUoIChqYSA8IGNpZHhBWyBpKzEgXSkgfHwgKGpi IDwgY2lkeEJbIGkrMSBdKSApIHsNCiAgICAgICAgIGlmKCAoamI9PWNpZHhC W2krMV0pIHx8DQogICAgICAgICAgICAoKHJpZHhBW2phXSA8IHJpZHhCW2pi XSkgJiYgKGphPGNpZHhBW2krMV0pKSApIHsNCiAgICAgICAgICAgIHJpZHhY WyBqeCBdID0gcmlkeEFbIGphIF07DQogICAgICAgICAgICBjb2VmWFsgangg XSA9IGNvZWZBWyBqYSBdOw0KICAgICAgICAgICAgamErKzsgangrKzsNCiAg ICAgICAgIH0gZWxzZQ0KICAgICAgICAgaWYoIChqYT09Y2lkeEFbaSsxXSkg fHwNCiAgICAgICAgICAgICgocmlkeEJbamJdIDwgcmlkeEFbamFdKSAmJiAo amI8Y2lkeEJbaSsxXSkpICkgew0KICAgICAgICAgICAgcmlkeFhbIGp4IF0g PSByaWR4QlsgamIgXTsNCiAgICAgICAgICAgIGNvZWZYWyBqeCBdID0gLSBj b2VmQlsgamIgXTsNCiAgICAgICAgICAgIGpiKys7IGp4Kys7DQogICAgICAg ICB9IGVsc2UNCiAgICAgICAgIGlmIChyaWR4QVtqYV0gPT0gcmlkeEJbamJd ICkgew0KICAgICAgICAgICAgcmlkeFhbIGp4IF0gPSByaWR4QVsgamEgXTsN CiAgICAgICAgICAgIGNvZWZYWyBqeCBdID0gY29lZkFbIGphIF0gLSBjb2Vm QlsgamIgXTsNCiAgICAgICAgICAgIGp4Kys7IGphKys7IGpiKys7DQogICAg ICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgREVCVUdNU0coInNob3VsZG4n dCBnZXQgaGVyZSAtIHNfc19zdWIiKTsNCiAgICAgICAgIH0NCiAgICAgIH0g Ly8gZm9yIGphDQoNCiAgICAgIGNpZHhYW2krMV0gPSBqeDsgDQogICB9IC8v IGZvciggaQ0KDQogICBpZiAoanggPCBubnopIA0KICAgICAgaWYoICggTlVM TCA9PSByZWFsbG9jKHJpZHhYLCBqeCpzaXplb2YoaW50ICAgKSkgKSB8fA0K ICAgICAgICAgICggTlVMTCA9PSByZWFsbG9jKGNvZWZYLCBqeCpzaXplb2Yo ZG91YmxlKSkgKSApDQogICAgICAgICAgU1BfRkFUQUxfRVJSKCJtZW1vcnkg ZXJyb3IiKTsNCg0KICAgZENyZWF0ZV9Db21wQ29sX01hdHJpeCgmWCwgbnIs IG5jLCBqeCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29lZlgsIHJp ZHhYLCBjaWR4WCwgTkMsIF9ELCBHRSk7DQoNCiAgIHJldHVybiBuZXcgb2N0 YXZlX3NwYXJzZSAoIFggKTsNCn0gLy8gc19zX2FkZA0KDQovLw0KLy8gRWxl bWVudCBtdWx0aXBseSBzcGFyc2UgYnkgZnVsbCwgcmV0dXJuIGEgc3BhcnNl IG1hdHJpeA0KLy8NCi8vIHN0YXRpYyBvY3RhdmVfdmFsdWUNCi8vIHNfZl9l bF9tdWwgKGNvbnN0IG9jdGF2ZV92YWx1ZSYgYTEsIGNvbnN0IG9jdGF2ZV92 YWx1ZSYgYTIpDQpERUZCSU5PUCggc19mX2VsX211bCwgc3BhcnNlLCBtYXRy aXggKQ0Kew0KICAgREVCVUdNU0coInNwYXJzZSAtIHNfZl9lbF9tdWwiKTsN CiAgIENBU1RfQklOT1BfQVJHUyAoY29uc3Qgb2N0YXZlX3NwYXJzZSYsIGNv bnN0IG9jdGF2ZV9tYXRyaXgmKTsNCg0KICAgU3VwZXJNYXRyaXggIEE9IHYx LnN1cGVyX21hdHJpeCgpOw0KICAgY29uc3QgTWF0cml4IEI9IHYyLm1hdHJp eF92YWx1ZSgpOw0KICAgU3VwZXJNYXRyaXggIFg7DQogICANCiAgIGludCBu cj0gQi5yb3dzKCk7DQogICBpbnQgbmM9IEIuY29scygpOw0KICAgDQogICBp ZiAoIChuciAhPSBBLm5yb3cpIHx8IChuYyAhPSBBLm5jb2wpICkNCiAgICAg IFNQX0ZBVEFMX0VSUigiU3BhcnNlOiBNYXRyaXggc2l6ZSBtaXNtYXRjaCIg KTsNCiAgIA0KICAgTkNmb3JtYXQgKiBOQ0YgICA9IChOQ2Zvcm1hdCAqKSBB LlN0b3JlOw0KICAgZG91YmxlICAgKiBjb2VmQSA9IChkb3VibGUgKikgICBO Q0YtPm56dmFsOw0KICAgaW50ICAgICAgKiByaWR4QSA9ICAgICAgICAgICAg ICBOQ0YtPnJvd2luZDsNCiAgIGludCAgICAgICogY2lkeEEgPSAgICAgICAg ICAgICAgTkNGLT5jb2xwdHI7DQoNCi8vDQovLyBEZWZpbmUgaG9sZGVycyB0 aGF0IHdpbGwgYmUgYmlnIGVub3VnaCB0byB0YWtlIHRoZQ0KLy8gICBjYWxj dWxhdGVkIGluZGljZXMuIFRoZSBvdXRwdXQgbWF0cml4IGNhbid0IGJlIGxl c3MNCi8vICAgc3BhcnNlIHRoYW4gdGhlIHNwYXJzZSBpbnB1dA0KLy8gICAN CiAgIGludCAgICAqIHJpZHhYID0gaW50TWFsbG9jICAgKE5DRi0+bm56KTsN CiAgIGRvdWJsZSAqIGNvZWZYID0gZG91YmxlTWFsbG9jKE5DRi0+bm56KTsN CiAgIGludCAgICAqIGNpZHhYID0gaW50TWFsbG9jICAgKG5jKzEpOyAgY2lk eFhbMF09IDA7DQoNCiAgIGludCBjeD0gMDsNCiAgIGZvciAoaW50IGk9MDsg aSA8IG5jIDsgaSsrKSB7DQogICAgICBmb3IgKGludCBqPSBjaWR4QVtpXSAg Ow0KICAgICAgICAgICAgICAgajwgY2lkeEFbaSsxXTsgaisrKSB7DQogICAg ICAgICBpbnQgICAgcm93aWR4ID0gcmlkeEFbal07DQogICAgICAgICBkb3Vi bGUgdG1wdmFsID0gQihyb3dpZHgsaSk7DQoNCiAgICAgICAgIGlmICh0bXB2 YWwgIT0gMCkgew0KICAgICAgICAgICAgcmlkeFhbIGN4IF0gPSByb3dpZHg7 DQogICAgICAgICAgICBjb2VmWFsgY3ggXSA9IHRtcHZhbCAqIGNvZWZBWyBq IF07DQogICAgICAgICAgICBjeCsrOw0KICAgICAgICAgfQ0KICAgICAgfSAv LyBmb3IgKCBpbnQgaj0wDQogICAgICBjaWR4WFtpKzFdID0gY3g7IA0KICAg fSAvLyBmb3IgKCBpbnQgaT0wDQoNCiAgIGlmIChjeCA8IE5DRi0+bm56KSAN CiAgICAgIGlmKCAoIE5VTEwgPT0gcmVhbGxvYyhyaWR4WCwgY3gqc2l6ZW9m KGludCAgICkpICkgfHwNCiAgICAgICAgICAoIE5VTEwgPT0gcmVhbGxvYyhj b2VmWCwgY3gqc2l6ZW9mKGRvdWJsZSkpICkgKQ0KICAgICAgICAgIFNQX0ZB VEFMX0VSUigibWVtb3J5IGVycm9yIik7DQovL1RPRE86IGZpZ3VyZSBvdXQg aG93IHRvIGhhbmRsZSBtZW1vcnkgZXJyb3JzICAgICAgICAgIA0KICAgICAg ICAgIA0KICAgZENyZWF0ZV9Db21wQ29sX01hdHJpeCgmWCwgbnIsIG5jLCBj eCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29lZlgsIHJpZHhYLCBj aWR4WCwgTkMsIF9ELCBHRSk7DQoNCiAgIHJldHVybiBuZXcgb2N0YXZlX3Nw YXJzZSAoIFggKTsNCn0gLy8gc19mX2VsX211bCggT2N0YXZlX21hcCBBLCBN YXRyaXggQiApIA0KDQovLw0KLy8gRWxlbWVudCBtdWx0aXBseSBmdWxsIGJ5 IHNwYXJzZSwgcmV0dXJuIGEgc3BhcnNlIG1hdHJpeA0KLy8gICBjYWxsIHRo ZSBzcGFyc2UgYnkgZnVsbCBtdWx0aXBsaWVyDQovLw0KLy9zdGF0aWMgb2N0 YXZlX3ZhbHVlDQovL2Zfc19lbF9tdWwgKGNvbnN0IG9jdGF2ZV92YWx1ZSYg YTEsIGNvbnN0IG9jdGF2ZV92YWx1ZSYgYTIpDQpERUZCSU5PUCggZl9zX2Vs X211bCwgbWF0cml4LCBzcGFyc2UpDQp7DQogICBERUJVR01TRygic3BhcnNl IC0gZl9zX2VsX211bCIpOw0KLy8gcmV0dXJuIHNfZl9lbF9tdWwoIGEyLCBh MSApOw0KICAgcmV0dXJuIG9jdF9iaW5vcF9zX2ZfZWxfbXVsKCBhMiwgYTEg KTsNCn07DQoNCi8vDQovLyBFbGVtZW50IG11bHRpcGx5IHNwYXJzZSBieSBz cGFyc2UsIHJldHVybiBhIHNwYXJzZSBtYXRyaXgNCi8vDQovL3N0YXRpYyBv Y3RhdmVfdmFsdWUNCi8vc19zX2VsX211bCAoY29uc3Qgb2N0YXZlX3ZhbHVl JiBhMSwgY29uc3Qgb2N0YXZlX3ZhbHVlJiBhMikNCkRFRkJJTk9QKCBzX3Nf ZWxfbXVsLCBzcGFyc2UsIHNwYXJzZSkNCnsNCiAgIERFQlVHTVNHKCJzcGFy c2UgLSBmX3NfZWxfbXVsIik7DQogICBDQVNUX0JJTk9QX0FSR1MgKGNvbnN0 IG9jdGF2ZV9zcGFyc2UmLCBjb25zdCBvY3RhdmVfc3BhcnNlJik7DQogICBT dXBlck1hdHJpeCAgQT0gdjEuc3VwZXJfbWF0cml4KCk7DQogICBTdXBlck1h dHJpeCAgQj0gdjIuc3VwZXJfbWF0cml4KCk7DQogICBTdXBlck1hdHJpeCAg WDsNCg0KICAgaW50IG5yPSBCLm5yb3c7DQogICBpbnQgbmM9IEIubmNvbDsN CiAgIA0KICAgaWYgKCAobnIgIT0gQS5ucm93KSB8fCAobmMgIT0gQS5uY29s KSApDQogICAgICBTUF9GQVRBTF9FUlIoIlNwYXJzZTogTWF0cml4IHNpemUg bWlzbWF0Y2giICk7DQogICANCiAgIE5DZm9ybWF0ICogTkNBICAgPSAoTkNm b3JtYXQgKikgQS5TdG9yZTsNCiAgIGRvdWJsZSAgICogY29lZkEgPSAoZG91 YmxlICopICAgTkNBLT5uenZhbDsNCiAgIGludCAgICAgICogcmlkeEEgPSAg ICAgICAgICAgICAgTkNBLT5yb3dpbmQ7DQogICBpbnQgICAgICAqIGNpZHhB ID0gICAgICAgICAgICAgIE5DQS0+Y29scHRyOw0KICAgTkNmb3JtYXQgKiBO Q0IgICA9IChOQ2Zvcm1hdCAqKSBCLlN0b3JlOw0KICAgZG91YmxlICAgKiBj b2VmQiA9IChkb3VibGUgKikgICBOQ0ItPm56dmFsOw0KICAgaW50ICAgICAg KiByaWR4QiA9ICAgICAgICAgICAgICBOQ0ItPnJvd2luZDsNCiAgIGludCAg ICAgICogY2lkeEIgPSAgICAgICAgICAgICAgTkNCLT5jb2xwdHI7DQoNCi8v DQovLyBEZWZpbmUgaG9sZGVycyB0aGF0IHdpbGwgYmUgYmlnIGVub3VnaCB0 byB0YWtlIHRoZQ0KLy8gICBjYWxjdWxhdGVkIGluZGljZXMuIFRoZSBvdXRw dXQgbm56IGNhbnQgYmUgYmlnZ2VyIHRoYW4NCi8vICAgdGhlIHNtYWxsZXN0 IG11bHRpcGxpY2FuZCBubnoNCi8vDQogICBpbnQgbm56ID0gTkNBLT5ubnog PiBOQ0ItPm5ueiA/IE5DQi0+bm56IDogTkNBLT5ubnogOw0KDQogICBpbnQg KiAgIHJpZHhYID0gaW50TWFsbG9jICAgKG5ueik7DQogICBkb3VibGUgKmNv ZWZYID0gZG91YmxlTWFsbG9jKG5ueik7DQogICBpbnQgKiAgIGNpZHhYID0g aW50TWFsbG9jICAgKG5jKzEpOyAgY2lkeFhbMF09IDA7DQoNCi8vDQovLyBH byB0aHJvdWdoIGVhY2ggY29sdW1uIGFuZCBsb29rIGZvciBlbGVtZW50cyB3 aGljaA0KLy8gICBtYXRjaCBiZXR3ZWVuIG1hdHJpY2VzDQovLw0KICAgaW50 IGp4PSAwOw0KDQogICBmb3IgKGludCBpPSAwIDsgaSA8IG5jIDsgaSsrICkg ew0KICAgICAgaW50IGphPSBjaWR4QVsgaSBdOw0KICAgICAgaW50IGpiPSBj aWR4QlsgaSBdOw0KDQogICAgICB3aGlsZSggKGphIDwgY2lkeEFbIGkrMSBd KSAmJiAoamIgPCBjaWR4QlsgaSsxIF0pICkgew0KICAgICAgICAgaWYoIHJp ZHhBW2phXSA8IHJpZHhCW2piXSApDQogICAgICAgICAgICBqYSsrOw0KICAg ICAgICAgZWxzZSBpZiggcmlkeEFbamFdID4gcmlkeEJbamJdICkNCiAgICAg ICAgICAgIGpiKys7DQogICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgIHJp ZHhYWyBqeCBdID0gcmlkeEFbIGphIF07DQogICAgICAgICAgICBjb2VmWFsg anggXSA9IGNvZWZBWyBqYSBdICogY29lZkJbIGpiIF07DQogICAgICAgICAg ICBqeCsrOw0KICAgICAgICAgICAgamErKzsNCiAgICAgICAgICAgIGpiKys7 DQogICAgICAgICB9IC8vIGlmIGNpZHhBDQogICAgICB9IC8vIGZvciBqYQ0K DQogICAgICBjaWR4WFtpKzFdID0gang7IA0KICAgfSAvLyBmb3IoIGkNCg0K ICAgaWYgKGp4IDwgbm56KSANCiAgICAgIGlmKCAoIE5VTEwgPT0gcmVhbGxv YyhyaWR4WCwgangqc2l6ZW9mKGludCAgICkpICkgfHwNCiAgICAgICAgICAo IE5VTEwgPT0gcmVhbGxvYyhjb2VmWCwgangqc2l6ZW9mKGRvdWJsZSkpICkg KQ0KICAgICAgICAgIFNQX0ZBVEFMX0VSUigibWVtb3J5IGVycm9yIik7DQoN CiAgIGRDcmVhdGVfQ29tcENvbF9NYXRyaXgoJlgsIG5yLCBuYywgangsDQog ICAgICAgICAgICAgICAgICAgICAgICAgIGNvZWZYLCByaWR4WCwgY2lkeFgs IE5DLCBfRCwgR0UpOw0KDQogICByZXR1cm4gbmV3IG9jdGF2ZV9zcGFyc2Ug KCBYICk7DQp9IC8vIHNfc19lbF9tdWwgKGNvbnN0IG9jdGF2ZV92YWx1ZSYg YTEsIGNvbnN0IG9jdGF2ZV92YWx1ZSYgYTIpDQoNCg0KLy8NCi8vIE11bHRp cGx5IHNwYXJzZSBieSBmdWxsLCByZXR1cm4gYSBmdWxsIG1hdHJpeA0KLy8g IChJIHN1cHBvc2UgaXQncyBwb3NzaWJsZSB0aGF0IGluIHNvbWUgY2FzZXMg aXQgbWFrZXMNCi8vICAgbW9yZSBzZW5zZSB0byByZXR1cm4gYSBzcGFyc2Ug bWF0cml4LCBidXQgb2ZmaGFuZCwNCi8vICAgSSBjYW4ndCBpbWFnaW5lIGFu eSByZWFsIGV4YW1wbGVzLiBFbWFpbCBtZSBpZiB5b3UgY2FuLikNCi8vDQov L3N0YXRpYyBvY3RhdmVfdmFsdWUNCi8vc19mX211bCAoY29uc3Qgb2N0YXZl X3ZhbHVlJiBhMSwgY29uc3Qgb2N0YXZlX3ZhbHVlJiBhMikNCkRFRkJJTk9Q KCBzX2ZfbXVsLCBzcGFyc2UsIG1hdHJpeCkNCnsNCiAgIERFQlVHTVNHKCJz cGFyc2UgLSBzX2ZfbXVsIik7DQogICBDQVNUX0JJTk9QX0FSR1MgKGNvbnN0 IG9jdGF2ZV9zcGFyc2UmLCBjb25zdCBvY3RhdmVfbWF0cml4Jik7DQogICBT dXBlck1hdHJpeCAgQT0gdjEuc3VwZXJfbWF0cml4KCk7DQogICBjb25zdCBN YXRyaXggQj0gdjIubWF0cml4X3ZhbHVlKCk7DQogICANCiAgIGludCBBbnI9 IEEubnJvdzsNCiAgIGludCBBbmM9IEEubmNvbDsNCiAgIGludCBCbnI9IEIu cm93cygpOw0KICAgaW50IEJuYz0gQi5jb2xzKCk7DQogICANCiAgIGlmIChB bmMgIT0gQm5yKQ0KICAgICAgU1BfRkFUQUxfRVJSKCJNYXRyaXggc2l6ZSBt aXNtYXRjaCBBLmNvbCAhPSBCLnJvdyIgKTsNCiAgIA0KICAgTWF0cml4IEMg KEFuciAsIEJuYyk7IA0KICAgZm9yIChpbnQgaT0wOyBpPCBBbnI7IGkrKyAp DQogICAgICBmb3IgKGludCBqPTA7IGo8IEJuYzsgaisrICkNCiAgICAgICAg IEMoaSxqKT0wOw0KDQogICBOQ2Zvcm1hdCAqIE5DRiA9IChOQ2Zvcm1hdCAq KSBBLlN0b3JlOw0KICAgZG91YmxlICogY29lZkEgPSAoZG91YmxlICopIE5D Ri0+bnp2YWw7DQogICBpbnQgICAgKiByaWR4QSA9ICAgICAgICAgICAgTkNG LT5yb3dpbmQ7DQogICBpbnQgICAgKiBjaWR4QSA9ICAgICAgICAgICAgTkNG LT5jb2xwdHI7DQogICANCiAgIGZvciAoIGludCBpPTA7IGkgPCBBbmMgOyBp KyspIHsNCiAgICAgIGZvciAoIGludCBqPSBjaWR4QVtpXTsgajwgY2lkeEFb aSsxXTsgaisrKSB7DQogICAgICAgICBpbnQgICAgICAgY29sID0gcmlkeEFb al07DQogICAgICAgICBkb3VibGUgdG1wdmFsID0gY29lZkFbal07DQoNCiAg ICAgICAgIGZvciAoIGludCBrPTAgOyBrPCBCbmM7IGsrKykgew0KICAgICAg ICAgICAgQyhjb2wgLCBrKSs9IHRtcHZhbCAqIEIoaSxrKTsNCiAgICAgICAg IH0NCiAgICAgIH0gLy8gZm9yICggaW50IGo9MA0KICAgfSAvLyBmb3IgKCBp bnQgaT0wDQoNCiAgIHJldHVybiBDOw0KfSAvLyBzX2ZfbXVsDQoNCnN0YXRp YyBNYXRyaXggZl9zX211bHRpcGx5KGNvbnN0IE1hdHJpeCYgQSwgU3VwZXJN YXRyaXggQiApDQp7DQogICBpbnQgQW5yPSBBLnJvd3MoKTsNCiAgIGludCBB bmM9IEEuY29scygpOw0KICAgaW50IEJucj0gQi5ucm93Ow0KICAgaW50IEJu Yz0gQi5uY29sOw0KICAgDQogICBpZiAoQW5jICE9IEJucikNCiAgICAgIFNQ X0ZBVEFMX0VSUigiTWF0cml4IHNpemUgbWlzbWF0Y2ggQS5jb2wgIT0gQi5y b3ciICk7DQogICANCiAgIE1hdHJpeCBDIChBbnIgLCBCbmMpOyANCiAgIGZv ciAoaW50IGk9MDsgaTwgQW5yOyBpKysgKQ0KICAgICAgZm9yIChpbnQgaj0w OyBqPCBCbmM7IGorKyApDQogICAgICAgICBDKGksaik9MDsNCg0KICAgTkNm b3JtYXQgKiBOQ0YgPSAoTkNmb3JtYXQgKikgQi5TdG9yZTsNCiAgIGRvdWJs ZSAqIGNvZWZCID0gKGRvdWJsZSAqKSBOQ0YtPm56dmFsOw0KICAgaW50ICAg ICogcmlkeEIgPSAgICAgICAgICAgIE5DRi0+cm93aW5kOw0KICAgaW50ICAg ICogY2lkeEIgPSAgICAgICAgICAgIE5DRi0+Y29scHRyOw0KDQogICBmb3Ig KCBpbnQgaT0wOyBpIDwgQm5jIDsgaSsrKSB7DQogICAgICBmb3IgKCBpbnQg aj0gY2lkeEJbaV07IGo8IGNpZHhCW2krMV07IGorKykgew0KICAgICAgICAg aW50ICAgICAgIGNvbCA9IHJpZHhCW2pdOw0KICAgICAgICAgZG91YmxlIHRt cHZhbCA9IGNvZWZCW2pdOw0KDQogICAgICAgICBmb3IgKCBpbnQgaz0wIDsg azwgQW5yOyBrKyspIHsNCiAgICAgICAgICAgIEMoaywgaSkrPSBBKGssY29s KSAqIHRtcHZhbDsNCiAgICAgICAgIH0NCiAgICAgIH0gLy8gZm9yICggaW50 IGo9MA0KICAgfSAvLyBmb3IgKCBpbnQgaT0wDQoNCiAgIHJldHVybiBDOw0K fQ0KDQovLw0KLy8gTXVsdGlwbHkgZnVsbCBieSBzcGFyc2UgLCByZXR1cm4g YSBmdWxsIG1hdHJpeA0KLy8NCi8vc3RhdGljIG9jdGF2ZV92YWx1ZQ0KLy9m X3NfbXVsIChjb25zdCBvY3RhdmVfdmFsdWUmIGExLCBjb25zdCBvY3RhdmVf dmFsdWUmIGEyKQ0KREVGQklOT1AoIGZfc19tdWwsIG1hdHJpeCwgc3BhcnNl KQ0Kew0KICAgREVCVUdNU0coInNwYXJzZSAtIGZfc19tdWwiKTsNCiAgIENB U1RfQklOT1BfQVJHUyAoY29uc3Qgb2N0YXZlX21hdHJpeCYsIGNvbnN0IG9j dGF2ZV9zcGFyc2UmKTsNCiAgIGNvbnN0IE1hdHJpeCAgQT0gdjEubWF0cml4 X3ZhbHVlKCk7DQogICBTdXBlck1hdHJpeCAgIEI9IHYyLnN1cGVyX21hdHJp eCgpOw0KDQogICByZXR1cm4gZl9zX211bHRpcGx5KEEsIEIpOw0KfSAvLyBm X3NfbXVsKA0KDQovLw0KLy8gTXVsdGlwbHkgc3BhcnNlIGJ5IHNwYXJzZSwg ZWxlbWVudCBieSBlbGVtZW50DQovLyBUaGlzIGFsZ29yaXRobSBhbGxvY2F0 ZXMgYSBmdWxsIGNvbHVtbiBvZiB0aGUgb3V0cHV0DQovLyBtYXRyaXguIEhv cGVmdWxseSB0aGF0IHdvbid0IGJlIGEgc3RvcmFnZSBwcm9ibGVtLg0KLy8N Ci8vIFRPRE86IGFsbG9jYXRlIGEgcm93IG9yIGNvbHVtbiBkZXBlbmRpbmcg b24gdGhlIGxhcmdlcg0KLy8gICAgICAgZGltZW50aW9uLg0KLy8NCi8vIEkn bSBzdXJlIHRoZXJlIGFyZSBnb29kIHNwYXJzZSBtdWx0aXBsaWNhdGlvbiBh bGdvcml0aG1zDQovLyAgIGF2YWlsYWJsZSBpbiB0aGUgbGl0dGVyYXR1cmUu IEkgaW52ZW50ZWQgdGhpcyBvbmUNCi8vICAgdG8gZmlsbCBhIGdhcC4gVGVs bCBtZSBpZiB5b3Uga25vdyBvZiBiZXR0ZXIgb25lcy4NCi8vDQovL3N0YXRp YyBvY3RhdmVfdmFsdWUNCi8vc19zX211bCAoY29uc3Qgb2N0YXZlX3ZhbHVl JiBhMSwgY29uc3Qgb2N0YXZlX3ZhbHVlJiBhMikNCkRFRkJJTk9QKCBzX3Nf bXVsLCBzcGFyc2UsIHNwYXJzZSkNCnsNCiAgIERFQlVHTVNHKCJzcGFyc2Ug LSBzX3NfbXVsIik7DQoNCiAgIENBU1RfQklOT1BfQVJHUyAoY29uc3Qgb2N0 YXZlX3NwYXJzZSYsIGNvbnN0IG9jdGF2ZV9zcGFyc2UmKTsNCiAgIFN1cGVy TWF0cml4ICAgQT0gdjEuc3VwZXJfbWF0cml4KCk7DQogICBTdXBlck1hdHJp eCAgIEI9IHYyLnN1cGVyX21hdHJpeCgpOw0KICAgU3VwZXJNYXRyaXggICBY Ow0KDQogICBpbnQgQW5yPSBBLm5yb3c7DQogICBpbnQgQW5jPSBBLm5jb2w7 DQogICBpbnQgQm5yPSBCLm5yb3c7DQogICBpbnQgQm5jPSBCLm5jb2w7DQog ICANCiAgIGlmIChBbmMgIT0gQm5yKQ0KICAgICAgU1BfRkFUQUxfRVJSKCJN YXRyaXggc2l6ZSBtaXNtYXRjaCBBLmNvbCAhPSBCLnJvdyIgKTsNCg0KICAg TkNmb3JtYXQgKiBOQ0ZBPSAoTkNmb3JtYXQgKikgQS5TdG9yZTsNCiAgIGRv dWJsZSAqIGNvZWZBID0gKGRvdWJsZSAqKSBOQ0ZBLT5uenZhbDsNCiAgIGlu dCAgICAqIHJpZHhBID0gICAgICAgICAgICBOQ0ZBLT5yb3dpbmQ7DQogICBp bnQgICAgKiBjaWR4QSA9ICAgICAgICAgICAgTkNGQS0+Y29scHRyOw0KICAg TkNmb3JtYXQgKiBOQ0ZCPSAoTkNmb3JtYXQgKikgQi5TdG9yZTsNCiAgIGRv dWJsZSAqIGNvZWZCID0gKGRvdWJsZSAqKSBOQ0ZCLT5uenZhbDsNCiAgIGlu dCAgICAqIHJpZHhCID0gICAgICAgICAgICBOQ0ZCLT5yb3dpbmQ7DQogICBp bnQgICAgKiBjaWR4QiA9ICAgICAgICAgICAgTkNGQi0+Y29scHRyOw0KICAg TkNmb3JtYXQgKiBOQ0ZYPSAoTkNmb3JtYXQgKikgWC5TdG9yZTsNCiAgIGRv dWJsZSAqIGNvZWZYID0gKGRvdWJsZSAqKSBOQ0ZYLT5uenZhbDsNCiAgIGlu dCAgICAqIHJpZHhYID0gICAgICAgICAgICBOQ0ZYLT5yb3dpbmQ7DQogICBp bnQgICAgKiBjaWR4WCA9ICAgICAgICAgICAgTkNGWC0+Y29scHRyOw0KDQov LyBBIGZhaXJseSBhcmJpdHJhcnkgZXN0aW1hdGUgZm9yIHRoZSBubnogICAN CiAgIGludCBubnogPSAgTkNGQS0+bm56ICsgTkNGQi0+bm56IDsNCiAgIHJp ZHhYID0gaW50TWFsbG9jICAgKG5ueik7DQogICBjb2VmWCA9IGRvdWJsZU1h bGxvYyhubnopOw0KICAgY2lkeFggPSBpbnRNYWxsb2MgICAoQm5jKzEpOyAg Y2lkeFhbMF09IDA7DQoNCiAgIGRvdWJsZSAqIFhjb2wgPSBkb3VibGVNYWxs b2MoQW5yKTsNCg0KICAgaW50IGN4PSAwOw0KDQogICBmb3IgKCBpbnQgaT0w OyBpIDwgQm5jIDsgaSsrKSB7DQoNCi8vIENsZWFuIHVwIHRoZSBjb2x1bW4N CiAgICAgIGZvciAoaW50IGs9MDsgazxBbnI7IGsrKykNCiAgICAgICAgIFhj b2xba109IDA7DQoNCiAgICAgIGZvciAoaW50IGo9IGNpZHhCW2ldOyBqPCBj aWR4QltpKzFdOyBqKyspIHsNCiAgICAgICAgIGludCAgICAgICAgY29sPSBy aWR4QltqXTsNCiAgICAgICAgIGRvdWJsZSB0bXB2YWwgPSBjb2VmQltqXTsN Cg0KICAgICAgICAgZm9yIChpbnQgaz0gY2lkeEFbY29sXSA7IGs8IGNpZHhB W2NvbCsxXTsgaysrKSB7DQogICAgICAgICAgICBYY29sWyByaWR4QVtrXSBd Kz0gdG1wdmFsICogY29lZkFba107DQogICAgICAgICB9DQogICAgICB9IC8v IGZvciAoIGludCBqPTANCg0KLy8gTm93IHBhY2sgdGhlIGNhbGN1bGF0ZWQg Y29sdW1uIGludG8gdGhlIG91dHB1dCBtYXRyaXgNCiAgICAgIGZvciAoaW50 IGs9MDsgazxBbnI7IGsrKykgDQogICAgICAgICBpZiAoIFhjb2xba10gIT0w ICkgew0KICAgICAgICAgICAgQ0hFQ0tfQk9VTkRTMiggY3gsIG5ueiwgcmlk eFgsIGludCwgY29lZlgsIGRvdWJsZSApOyANCiAgICAgICAgICAgIHJpZHhY WyBjeCBdPSBrOw0KICAgICAgICAgICAgY29lZlhbIGN4IF09IFhjb2xba107 DQogICAgICAgICAgICBjeCsrOw0KICAgICAgICAgfSAvLyBpZiBYY29sXVsg ayBdDQoNCiAgICAgIGNpZHhYW2krMV0gPSBjeDsNCiAgIH0gLy8gZm9yICgg aW50IGk9MA0KDQogICBmcmVlKCBYY29sICk7DQoNCiAgIGlmIChjeCA8IG5u eikgDQogICAgICBpZiggKCBOVUxMID09IHJlYWxsb2MocmlkeFgsIGN4KnNp emVvZihpbnQgICApKSApIHx8DQogICAgICAgICAgKCBOVUxMID09IHJlYWxs b2MoY29lZlgsIGN4KnNpemVvZihkb3VibGUpKSApICkNCiAgICAgICAgICBT UF9GQVRBTF9FUlIoIm1lbW9yeSBlcnJvciIpOw0KDQogICBkQ3JlYXRlX0Nv bXBDb2xfTWF0cml4KCZYLCBBbnIsIEJuYywgY3gsDQogICAgICAgICAgICAg ICAgICAgICAgICAgIGNvZWZYLCByaWR4WCwgY2lkeFgsIE5DLCBfRCwgR0Up Ow0KDQogICByZXR1cm4gbmV3IG9jdGF2ZV9zcGFyc2UgKCBYICk7DQp9IC8v IHNfc19tdWwgKGNvbnN0IG9jdGF2ZV92YWx1ZSYgYTEsIGNvbnN0IG9jdGF2 ZV92YWx1ZSYgYTIpDQoNCkRFRkJJTk9QKCBmX3NfbGRpdiwgbWF0cml4LCBz cGFyc2UpIHsNCiAgIERFQlVHTVNHKCJzcGFyc2UgLSBmX3NfbGRpdiIpOw0K ICAgQ0FTVF9CSU5PUF9BUkdTICggY29uc3Qgb2N0YXZlX21hdHJpeCYsIGNv bnN0IG9jdGF2ZV9zcGFyc2UmKTsNCiAgIGNvbnN0IE1hdHJpeCAgQT0gdjEu bWF0cml4X3ZhbHVlKCk7DQogICBTdXBlck1hdHJpeCAgIEI9IHYyLnN1cGVy X21hdHJpeCgpOw0KICAgcmV0dXJuIGZfc19tdWx0aXBseShBLmludmVyc2Uo KSAsIEIpOw0KfSAvLyBmX3NfbGRpdiANCg0KLy8gVGhpcyBpcyBhIHdyYXBw ZXIgYXJvdW5kIHRoZSBTdXBlckxVIGdldF9wZXJtX2MgZnVuY3Rpb24NCi8v ICB0aGF0IGRvZXMgc29tZSBidWcgZml4ZXMgYW5kIGFsbG93cyBleHRyYSBj b25kaXRpb25zDQovLw0KLy8gR2V0IGNvbHVtbiBwZXJtdXRhdGlvbiB2ZWN0 b3IgcGVybV9jW10sIGFjY29yZGluZyB0byBwZXJtY19zcGVjOg0KLy8gICBw ZXJtY19zcGVjID0gMDogdXNlIHRoZSBuYXR1cmFsIG9yZGVyaW5nIA0KLy8g ICBwZXJtY19zcGVjID0gMTogdXNlIG1pbmltdW0gZGVncmVlIG9yZGVyaW5n IG9uIHN0cnVjdHVyZSBvZiBBJypBDQovLyAgIHBlcm1jX3NwZWMgPSAyOiB1 c2UgbWluaW11bSBkZWdyZWUgb3JkZXJpbmcgb24gc3RydWN0dXJlIG9mIEEn K0ENCi8vICAgcGVybWNfc3BlYyA9IDM6IHVzZSBjb2x1bW4gYXBwcm94aW1h dGUgbWluaW11bSBkZWdyZWUNCi8vICAgIAkNCi8vIG15IGd1ZXNzZXMgb24g dGhlIGNob2ljZSBvZiBwZXJtY19zcGVjDQovLyAgICAgICAgICAgPT0xIHRo ZSByZWNvbWVuZGVkIGNob2ljZSBmb3IgYXJiaXRyYXJ5IG1hdHJpY2VzLA0K Ly8gICAgICAgICAgID09MiBmb3IgbWF0cmljZXMgY2xvc2UgdG8gc3RydWN0 dXJhbGx5IHN5bWV0cmljYWwNCi8vICAgICAgICAgICA9PTMgd2hhdCBNYXRs YWIgc2VlbXMgdG8gdXNlIA0KLy8NCi8vIGlmIHBlcm1jX3NwZWM9PSAtMSwg dGhlbiB0aGVyZSBpcyBhIHVzZXIgc3BlY2lmaWVkIHBlcm1jIHByb3ZpZGVk DQovLw0Kc3RhdGljIHZvaWQgZG9fcGVybWMoIGludCBwZXJtY19zcGVjLCBp bnQgcGVybV9jW10sIA0KICAgICAgICAgICAgICAgICAgICAgU3VwZXJNYXRy aXggQSApIHsNCiAgIGludCBBbnI9IEEubnJvdzsNCiAgIGludCBBbmM9IEEu bmNvbDsNCg0KICAgaWYgKCBwZXJtY19zcGVjIDwgMCApIHsNCiAgICAgIFNQ X0ZBVEFMX0VSUigic3BhcnNlIHNvbHZlOiBoYXZlbid0IGltcGxlbWVudGVk IHVzZXIgc3BlY2lmaWVkIHBlcm1jIik7DQovLyAgICBwZXJtX2MgPSBwZXJt X2NfaW47DQogICB9IA0KICAgZWxzZSB7DQovLw0KLy8gS0xVREdFOiBnZXRf cGVybV9jIGJyZWFrcyAoaWUgc2VnZmF1bHRzKSBpZiB0aGUgTWF0cml4IGlz IG5vdA0KLy8gc3VmZmljaWVudGx5IHNwYXJzZS4gSXQgc2VlbXMgdGhhdCB0 aGlzIGlzIHdoZW4gbm56ID4gMC40KihtKm4pDQovLw0KLy8gU28gd2UgY2hl Y2sgZm9yIHRoaXMgY2FzZSBhbmQgc3Vic3RpdHV0ZSBhIHBlcm1fYyB3aXRo IG5vDQovLyByZW9yZGVyaW5nIChZb3UgZG9uJ3QgcmVhbGx5IHdhbnQgdG8g dXNlIFNwYXJzZSBNYXRyaWNlcyBpbg0KLy8gdGhpcyBjYXNlIGFueXdheSwg YnV0IGF0IGxlYXN0IHRoZSB0b29sIHNob3VsZG4ndCBicmVhaykNCi8vDQoj aWZkZWYgVkVSQk9TRSAgIA0KICAgcHJpbnRmKCJzcGFyc2UgcmF0aW8gJWQg OiAlZCAtPiAlZiBcbjoiLCANCiAgICAgICAgICAgKChOQ2Zvcm1hdCAqKSBB LlN0b3JlKS0+bm56ICwgKEFuYypBbnIpICAgLCAgIA0KICAoZG91YmxlKSAo KE5DZm9ybWF0ICopIEEuU3RvcmUpLT5ubnogLyAoQW5jKkFucikgKTsNCiNl bmRpZiAvLyBWRVJCT1NFICAgDQoNCiAgICAgIGlmICggKChOQ2Zvcm1hdCAq KSBBLlN0b3JlKS0+bm56ID49IDAuNDAqKEFuYypBbnIpICkgIHsNCiAgICAg ICAgIGZvciAoaW50IGk9MCA7IGk8IEFuYyA7IGkrKykNCiAgICAgICAgICAg IHBlcm1fY1tpXT0gaTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgICBnZXRf cGVybV9jKHBlcm1jX3NwZWMsICZBLCBwZXJtX2MpOw0KICAgICAgfQ0KICAg fQ0KfSAvLyBzdGF0aWMgaW50IGRvX3Blcm1jKCBpbnQgcGVybWNfc3BlYywg aW50IHBlcm1jW10sIA0KDQovLyANCi8vIFNwYXJzZSBcIEZ1bGwgc29sdmUN Ci8vIFRPRE86IFN1cGVyTWF0cml4IHByb3ZpZGVzIG1vcmUgZnVuY3Rpb25h bGl0eSBpbnRvIGEgc29sdmV4DQovLyAgICAgICByb3V0aW5lLCBidXQgaG93 IHRvIHdlIGltcGxlbWVudCB0aGlzIGluIG9jdGF2ZT8NCi8vDQovL3N0YXRp YyBvY3RhdmVfdmFsdWUNCi8vc19mX2xkaXYgKGNvbnN0IG9jdGF2ZV92YWx1 ZSYgYTEsIGNvbnN0IG9jdGF2ZV92YWx1ZSYgYTIpDQpERUZCSU5PUCggc19m X2xkaXYsIHNwYXJzZSwgbWF0cml4KQ0Kew0KICAgREVCVUdNU0coInNwYXJz ZSAtIHNfZl9sZGl2Iik7DQoNCiAgIENBU1RfQklOT1BfQVJHUyAoIGNvbnN0 IG9jdGF2ZV9zcGFyc2UmLCBjb25zdCBvY3RhdmVfbWF0cml4Jik7DQogICBT dXBlck1hdHJpeCAgIEE9IHYxLnN1cGVyX21hdHJpeCgpOw0KICAgICAgICAg TWF0cml4ICBNPSB2Mi5tYXRyaXhfdmFsdWUoKTsNCiAgIFN1cGVyTWF0cml4 IEwsVSxCOw0KDQogICBpbnQgQW5yPSBBLm5yb3c7DQogICBpbnQgQW5jPSBB Lm5jb2w7DQogICBpbnQgQm5yPSBNLnJvd3MoKTsNCiAgIGludCBCbmM9IE0u Y29scygpOw0KICAgaWYgKEFuYyAhPSBCbnIpDQogICAgICBTUF9GQVRBTF9F UlIoIk1hdHJpeCBzaXplIG1pc21hdGNoIEEuY29sICE9IEIucm93IiApOw0K DQogICBkb3VibGUgKiBjb2VmPSBNLmZvcnRyYW5fdmVjKCk7DQoNCiAgIGRD cmVhdGVfRGVuc2VfTWF0cml4KCZCLCBCbnIsIEJuYywgY29lZiwgQm5yLCBE TiwgX0QsIEdFKTsNCiAgIA0KDQogICBpbnQgcGVybWNfc3BlYyA9IDM7DQog ICBpbnQgcGVybV9jWyBBbmMgXTsNCiAgIGludCBwZXJtX3JbIEFuciBdOw0K ICAgZG9fcGVybWMoIHBlcm1jX3NwZWMsIHBlcm1fYywgQSApOw0KDQogICBp bnQgaW5mbzsNCiAgIGRnc3N2KCZBLCBwZXJtX2MsIHBlcm1fciwgJkwsICZV LCAmQiwgJmluZm8pOw0KDQogICBpZiAoaW5mbyAhPTAgKQ0KICAgICAgU1Bf RkFUQUxfRVJSKCJGYWN0b3JpemF0aW9uIHByb2JsZW06IGRnc3N2Iik7DQoN CiAgIERlc3Ryb3lfU3VwZXJNYXRyaXhfU3RvcmUoICZMICk7DQogICBEZXN0 cm95X1N1cGVyTWF0cml4X1N0b3JlKCAmVSApOw0KDQogICByZXR1cm4gTTsN Cn0NCg0Kc3RhdGljIE1hdHJpeCBtYXRyaXhfZXF1YWwgKCBjb25zdCBNYXRy aXgmIGEsIGNvbnN0IE1hdHJpeCYgYikNCnsNCiAgIERFQlVHTVNHKCJtYXRy aXhfZXF1YWwiKTsNCiAgIGlmKCggYS5jb2xzKCkgIT0gYi5jb2xzKCkpfHwg DQogICAgICAoIGEucm93cygpICE9IGIucm93cygpKSkgew0KICAgICAgU1Bf RkFUQUxfRVJSKCJvcGVyYXRvciA9PTogbm9uY29uZm9ybWFudCBvcGVyYW5k cyIpOw0KICAgICAgTWF0cml4IHJldHZhbDsgcmV0dXJuIHJldHZhbCA7IC8v IGRvIHdlIG5lZWQgdGhpcz8NCiAgIH0NCiAgIGVsc2Ugew0KICAgICBNYXRy aXggcmV0dmFsIChhLnJvd3MoKSwgYS5jb2xzKCkgKTsNCiAgICAgZm9yKCBp bnQgaT0wOyBpPGEucm93cygpOyBpKyspDQogICAgICAgIGZvciggaW50IGo9 MDsgajxhLmNvbHMoKTsgaisrKQ0KICAgICAgICAgICByZXR2YWwoaSxqKSA9 IGEoaSxqKSA9PSBiKGksaik7DQogICAgIHJldHVybiByZXR2YWw7DQogICB9 DQp9DQoNCi8vIA0KLy8gU3BhcnNlID09IFNwYXJzZSAtPiByZXR1cm4gYSBm dWxsIG1hdHJpeA0KLy8gTk9URTogdGhpcyBpcyBpbmVmZmljaWVudCBhbmQg c2hvdWxkbid0IGJlIHVzZWQgDQovLw0KLy9zdGF0aWMgb2N0YXZlX3ZhbHVl DQovL3Nfc19lcSAoY29uc3Qgb2N0YXZlX3ZhbHVlJiBhMSwgY29uc3Qgb2N0 YXZlX3ZhbHVlJiBhMikNCkRFRkJJTk9QKCBzX3NfZXEsIHNwYXJzZSwgc3Bh cnNlKSB7DQogICBERUJVR01TRygic3BhcnNlIC0gc19zX2VxIik7DQogICBD QVNUX0JJTk9QX0FSR1MgKCBjb25zdCBvY3RhdmVfc3BhcnNlJiwgY29uc3Qg b2N0YXZlX3NwYXJzZSYpOw0KICAgcmV0dXJuIG1hdHJpeF9lcXVhbCggdjEu bWF0cml4X3ZhbHVlKCksIHYyLm1hdHJpeF92YWx1ZSgpICk7DQp9IC8vIHNf c19lcSANCg0KLy8gDQovLyBTcGFyc2UgPT0gRnVsbA0KLy8NCi8vc3RhdGlj IG9jdGF2ZV92YWx1ZQ0KLy9zX2ZfZXEgKGNvbnN0IG9jdGF2ZV92YWx1ZSYg YTEsIGNvbnN0IG9jdGF2ZV92YWx1ZSYgYTIpDQpERUZCSU5PUCggc19mX2Vx LCBzcGFyc2UsIG1hdHJpeCkNCnsNCiAgIERFQlVHTVNHKCJzcGFyc2UgLSBz X2ZfZXEiKTsNCiAgIENBU1RfQklOT1BfQVJHUyAoIGNvbnN0IG9jdGF2ZV9z cGFyc2UmLCBjb25zdCBvY3RhdmVfbWF0cml4Jik7DQogICByZXR1cm4gbWF0 cml4X2VxdWFsKCB2MS5tYXRyaXhfdmFsdWUoKSwgdjIubWF0cml4X3ZhbHVl KCkgKTsNCn0gLy8gc19zX2VxIA0KDQovLw0KLy8gRnVsbCA9PSBTcGFyc2UN Ci8vDQovL3N0YXRpYyBvY3RhdmVfdmFsdWUNCi8vZl9zX2VxIChjb25zdCBv Y3RhdmVfdmFsdWUmIGExLCBjb25zdCBvY3RhdmVfdmFsdWUmIGEyKQ0KREVG QklOT1AoIGZfc19lcSwgbWF0cml4LCBzcGFyc2UpDQp7DQogICBERUJVR01T Rygic3BhcnNlIC0gZl9zX2VxIik7DQogICBDQVNUX0JJTk9QX0FSR1MgKCBj b25zdCBvY3RhdmVfbWF0cml4JiwgY29uc3Qgb2N0YXZlX3NwYXJzZSYpOw0K ICAgcmV0dXJuIG1hdHJpeF9lcXVhbCggdjEubWF0cml4X3ZhbHVlKCksIHYy Lm1hdHJpeF92YWx1ZSgpICk7DQp9Ow0KDQoNCi8vIGFzc2VtYmxlIGEgc3Bh cnNlIG1hdHJpeCBmcm9tIGZ1bGwNCi8vICAgY2FsbGVkIGJ5IG9uZSBhcmcg Zm9yIHNwYXJzZQ0Kc3RhdGljIFN1cGVyTWF0cml4IG1hdHJpeF90b19zcGFy c2UoIE1hdHJpeCAmIEEpIHsgICAgICANCiAgIERFQlVHTVNHKCJzcGFyc2Ug LSBtYXRyaXhfdG9fc3BhcnNlIik7DQogICBpbnQgbT0gQS5yb3dzKCk7DQog ICBpbnQgbj0gQS5jb2xzKCk7DQoNCi8vIENhbGN1bGF0ZSBubnoNCiAgIGlu dCBubno9MDsNCiAgIGZvciAoaW50IGo9IDA7IGo8biA7IGorKyApIA0KICAg ICAgZm9yIChpbnQgaT0gMDsgaTxtIDsgaSsrICkgDQogICAgICAgICBpZiAo QShpLGopICE9MCkgbm56Kys7DQogICAgICAgDQogICBpZiAobm56PT0wKQ0K ICAgICAgU1BfRkFUQUxfRVJSKCJzcGFyc2U6IGNhbid0IGhhbmRsZSBlbXB0 eSBzcGFyc2UgKHlldCkiKTsNCg0KICAgZG91YmxlICogY29lZiA9IG5ldyBk b3VibGVbbm56XTsNCiAgIGludCAgICAqIHJpZHggPSBuZXcgaW50ICAgW25u el07DQogICBpbnQgICAgKiBjaWR4ID0gbmV3IGludCAgIFtuKzFdOyAgIGNp ZHhbMF09IDA7DQoNCiAgIGludCBjeD0wOw0KICAgZm9yIChpbnQgaj0gMDsg ajxuIDsgaisrICkgew0KICAgICAgZm9yIChpbnQgaT0gMDsgaTxtIDsgaSsr ICkgew0KICAgICAgICAgZG91YmxlIHRtcHZhbD0gQShpLGopOw0KICAgICAg ICAgaWYgKHRtcHZhbCAhPSAwKSB7DQogICAgICAgICAgICByaWR4WyBjeCBd PSBpOw0KICAgICAgICAgICAgY29lZlsgY3ggXT0gdG1wdmFsOw0KICAgICAg ICAgICAgY3grKzsNCiAgICAgICAgIH0gLy8gaWYgdG1wdmFsDQogICAgICB9 IC8vIGZvciBpDQogICAgICBjaWR4W2orMV09IGN4Ow0KICAgfSAvLyBmb3Ig aQ0KDQogICBTdXBlck1hdHJpeCBTOw0KICAgZENyZWF0ZV9Db21wQ29sX01h dHJpeCgmUywgbSwgbiwgY3gsDQogICAgICAgICAgICAgICAgICAgICAgICAg IGNvZWYsIHJpZHgsIGNpZHgsIE5DLCBfRCwgR0UpOw0KICAgcmV0dXJuIFM7 DQp9DQoNCi8vIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIHNvcnQgaW4gbWFr ZV9zcGFyc2UNCnR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyB2YWw7 DQogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaWR4OyB9IHNvcnRf aWR4bDsgICANCg0Kc3RhdGljIGlubGluZSBpbnQNCnNpZHhsX2NvbXAoY29u c3Qgdm9pZCAqaSxjb25zdCB2b2lkKmogKQ0Kew0KICAgcmV0dXJuICgoKHNv cnRfaWR4bCAqKSBpKS0+dmFsKSAtICgoKHNvcnRfaWR4bCAqKSBqKS0+dmFs KSA7DQp9DQoNCi8vIGFzc2VtYmxlIGEgc3BhcnNlIG1hdHJpeCBmcm9tIGVs ZW1lbnRzDQovLyAgIGNhbGxlZCBieSA+IDEgYXJncyBmb3Igc3BhcnNlDQov LyBOT1RFOiBpbmRleCB2ZWN0b3JzIGFyZSAxIGJhc2VkIQ0Kc3RhdGljIFN1 cGVyTWF0cml4IGFzc2VtYmxlX3NwYXJzZSggaW50IG4sIGludCBtLA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sdW1uVmVjdG9y JiBjb2VmQSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IENvbHVtblZlY3RvciYgcmlkeEEsDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBDb2x1bW5WZWN0b3ImIGNpZHhBICkgew0KICAgREVC VUdNU0coInNwYXJzZSAtIGFzc2VtYmxlX3NwYXJzZSIpOw0KDQogICBpbnQg IG5uej0gKCByaWR4QS5sZW5ndGgoKSA+IGNpZHhBLmxlbmd0aCgpICkgPw0K ICAgICAgICAgICAgICAgcmlkeEEubGVuZ3RoKCkgOiBjaWR4QS5sZW5ndGgo KTsNCiAgIGJvb2wgcmlfc2NhbGFyID0gKHJpZHhBLmxlbmd0aCgpID09IDEp Ow0KICAgYm9vbCBjaV9zY2FsYXIgPSAoY2lkeEEubGVuZ3RoKCkgPT0gMSk7 DQogICBib29sIGNmX3NjYWxhciA9IChjb2VmQS5sZW5ndGgoKSA9PSAxKTsN Cg0KICAgc29ydF9pZHhsIGlkeFsgbm56IF07DQogICBmb3IgKGludCBpPTA7 IGk8bm56OyBpKyspIHsNCiAgICAgIGlkeFtpXS52YWwgPSAodW5zaWduZWQg bG9uZykgKA0KICAgICAgICAgICAgICAgICggcmlfc2NhbGFyID8gcmlkeEEo MCkgOiByaWR4QShpKSApIC0gMSArDQogICAgICAgICAgIG0gKiAoKCBjaV9z Y2FsYXIgPyBjaWR4QSgwKSA6IGNpZHhBKGkpICkgLSAxKSApOyANCiAgICAg IGlkeFtpXS5pZHggPSBpOw0KICAgfQ0KDQogICBxc29ydCggaWR4LCBubnos IHNpemVvZihzb3J0X2lkeGwpLCBzaWR4bF9jb21wICk7DQogICANCiAgIGRv dWJsZSAqIGNvZWZYID0gbmV3IGRvdWJsZSBbbm56XTsNCiAgIGludCAgICAq IHJpZHhYID0gbmV3IGludCAgICBbbm56XTsNCiAgIGludCAgICAqIGNpZHhY ID0gbmV3IGludCAgICBbbisxXTsgY2lkeFhbMF09IDA7DQoNCiAgIGludCBj eD0gMDsNCiAgIGZvciAoaW50IGk9MDsgaTxubno7IGkrKykgew0KICAgICAg dW5zaWduZWQgbG9uZyBpaT0gKGludCkgaWR4W2ldLmlkeDsNCiAgICAgIGNv ZWZYW2ldPSAgICAgICggY2Zfc2NhbGFyID8gY29lZkEoMCkgOiBjb2VmQShp aSkgKTsNCi8vIGJlIGNhcmVmdWwgYWJvdXQgd2hlbiB3ZSBjb252ZXJ0IHJp IHRvIGludCwNCi8vIG90aGVyd2lzZSB0aGUgbWF4aW11bSBtYXRyaXggc2l6 ZSB3aWxsIGJlIG0qbiA8IG1heGludC8yDQogICAgICBkb3VibGUgcmkgID0g ICAoIHJpX3NjYWxhciA/IHJpZHhBKDApIDogcmlkeEEoaWkpICkgLSAxIDsN CiAgICAgIHJpZHhYW2ldPSAoaW50KSAocmkgLSAoKGludCkgKHJpL20pKSpt ICkgOw0KICAgICAgaW50IGNpICA9IChpbnQpKCBjaV9zY2FsYXIgPyBjaWR4 QSgwKSA6IGNpZHhBKGlpKSApIC0gMSA7DQovLyAgICBwcmludGYoImNpPSVk LCByaT0lZCBjZj0lZiBpaT0lbGRcbiIsIGNpLHJpZHhYW2ldLGNvZWZYW2ld LGlpKTsNCiAgICAgIHdoaWxlKCBjeCA8IGNpICkgY2lkeFhbKytjeF09IGk7 DQogICB9IC8vZm9yIGkNCi8vIEZpbGwgdXAgYW55IGV4dHJhIHNwYWNlIGlu IGNpZHhYDQogICB3aGlsZSggY3ggPCBuICkgY2lkeFhbKytjeF09IG5uejsN Cg0KICAgU3VwZXJNYXRyaXggUzsNCiAgIGRDcmVhdGVfQ29tcENvbF9NYXRy aXgoJlMsIG0sIG4sIG5ueiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg Y29lZlgsIHJpZHhYLCBjaWR4WCwgTkMsIF9ELCBHRSk7DQogICByZXR1cm4g UzsNCn0gICAgICANCg0KREVGVU5fRExEIChzcGFyc2UsIGFyZ3MsICwNCiAg InNwYXJzZV92YWwgPSBzcGFyc2UgKC4uLilcblwNClNQQVJTRTogY3JlYXRl IGEgc3BhcnNlIG1hdHJpeFxuXA0KXG5cDQpzcGFyc2UgY2FuIGJlIGNhbGxl ZCBpbiB0aGUgZm9sbG93aW5nIHdheXM6XG5cDQpcblwNCjE6IFMgPSBzcGFy c2UoQSksIHdoZXJlICdBJyBpcyBhIGZ1bGwgbWF0cml4XG5cDQpcblwNCjI6 IFMgPSBzcGFyc2UoaSxqLHMsbSxuLG56bWF4KSwgd2hlcmVcblwNCiAgICAg ICAgaSxqICAgYXJlIGludGVnZXIgaW5kZXggdmVjdG9ycyAoMSB4IG5ueilc blwNCiAgICAgICAgcyAgICAgaXMgdGhlIHZlY3RvciBvZiByZWFsIG9yIGNv bXBsZXggZW50cmllcyAoMSB4IG5ueilcblwNCiAgICAgICAgbSxuICAgYXJl IHRoZSBzY2FsYXIgZGltZW50aW9ucyBvZiBTXG5cDQogICAgICAgIG56bWF4 IGlzIGlnbm9yZWQgKGZvciBjb21wYXRhYmlsaXR5IHdpdGggTWF0bGFiKVxu XA0KXG5cDQozOiBTID0gc3BhcnNlKGksaixzLG0sbiksICAgICBzYW1lIGFz ICgyKSBhYm92ZVxuXA0KXG5cDQo0OiBTPSAgc3BhcnNlKGksaixzKSwgICAg ICAgICB1c2VzIG09bWF4KGkpLCBuPW1heChqKVxuXA0KXG5cDQo1OiBTPSAg c3BhcnNlKG0sbiksICAgICAgICAgICBkb2VzIHNwYXJzZShbXSxbXSxbXSxt LG4sMClcblwNClxuXA0KcywgYW5kIGkgb3IgaiBtYXkgYmUgc2NhbGFycywg aW4gd2hpY2ggY2FzZSB0aGV5IGFyZSBleHBhbmRlZFxuXA0Kc28gdGhleSBh bGwgaGF2ZSB0aGUgc2FtZSBsZW5ndGggIikNCnsNCg0KICBzdGF0aWMgYm9v bCB0eXBlX2xvYWRlZCA9IGZhbHNlOw0KDQogIGlmICghIHR5cGVfbG9hZGVk KQ0KICAgIHsNCiAgICAgIG9jdGF2ZV9zcGFyc2U6OnJlZ2lzdGVyX3R5cGUg KCk7DQoNCiNpZmRlZiBWRVJCT1NFDQogICAgICBjb3V0IDw8ICJpbnN0YWxs aW5nIHNwYXJzZSB0eXBlIGF0IHR5cGUtaWQgPSAiDQoJICAgPDwgb2N0YXZl X3NwYXJzZTo6c3RhdGljX3R5cGVfaWQgKCkgPDwgIlxuIjsNCiNlbmRpZiAg ICAgICAgICANCg0KLyoNCiAgICAgIElOU1RBTExfQklOT1AgKGRpdiwgb2N0 YXZlX3NwYXJzZSwgb2N0YXZlX3NwYXJzZSwgZGl2KTsNCiAgICAgIElOU1RB TExfQklOT1AgKGxkaXYsIG9jdGF2ZV9zcGFyc2UsIG9jdGF2ZV9zcGFyc2Us IGxkaXYpOw0KICAgICAgSU5TVEFMTF9CSU5PUCAobHQsIG9jdGF2ZV9zcGFy c2UsIG9jdGF2ZV9zcGFyc2UsIGx0KTsNCiAgICAgIElOU1RBTExfQklOT1Ag KGxlLCBvY3RhdmVfc3BhcnNlLCBvY3RhdmVfc3BhcnNlLCBsZSk7DQogICAg ICBJTlNUQUxMX0JJTk9QIChlcSwgb2N0YXZlX3NwYXJzZSwgb2N0YXZlX3Nw YXJzZSwgZXEpOw0KICAgICAgSU5TVEFMTF9CSU5PUCAoZ2UsIG9jdGF2ZV9z cGFyc2UsIG9jdGF2ZV9zcGFyc2UsIGdlKTsNCiAgICAgIElOU1RBTExfQklO T1AgKGd0LCBvY3RhdmVfc3BhcnNlLCBvY3RhdmVfc3BhcnNlLCBndCk7DQog ICAgICBJTlNUQUxMX0JJTk9QIChuZSwgb2N0YXZlX3NwYXJzZSwgb2N0YXZl X3NwYXJzZSwgbmUpOw0KICAgICAgSU5TVEFMTF9CSU5PUCAoZWxfZGl2LCBv Y3RhdmVfc3BhcnNlLCBvY3RhdmVfc3BhcnNlLCBlbF9kaXYpOw0KICAgICAg SU5TVEFMTF9CSU5PUCAoZWxfbGRpdiwgb2N0YXZlX3NwYXJzZSwgb2N0YXZl X3NwYXJzZSwgZWxfbGRpdik7DQogICAgICBJTlNUQUxMX0JJTk9QIChlbF9h bmQsIG9jdGF2ZV9zcGFyc2UsIG9jdGF2ZV9zcGFyc2UsIGVsX2FuZCk7DQog ICAgICBJTlNUQUxMX0JJTk9QIChlbF9vciwgb2N0YXZlX3NwYXJzZSwgb2N0 YXZlX3NwYXJzZSwgZWxfb3IpOw0KICAgICAgSU5TVEFMTF9CSU5PUCAoZGl2 LCBvY3RhdmVfc3BhcnNlLCBvY3RhdmVfc2NhbGFyLCBpX3NfZGl2KTsNCg0K ICAgICAgSU5TVEFMTF9OQ1VOT1AgKGluY3IsIG9jdGF2ZV9zcGFyc2UsIGlu Y3IpOw0KICAgICAgSU5TVEFMTF9OQ1VOT1AgKGRlY3IsIG9jdGF2ZV9zcGFy c2UsIGRlY3IpOw0KKi8gICAgICANCiAgICAgIElOU1RBTExfVU5PUCAgKG9w X3RyYW5zcG9zZSwgb2N0YXZlX3NwYXJzZSwgdHJhbnNwb3NlKTsNCiAgICAg IElOU1RBTExfVU5PUCAgKG9wX2hlcm1pdGlhbiwgb2N0YXZlX3NwYXJzZSwg aGVybWl0aWFuKTsNCiAgICAgIElOU1RBTExfVU5PUCAgKG9wX3VtaW51cywg ICAgb2N0YXZlX3NwYXJzZSwgdW1pbnVzKTsNCiAgICAgIElOU1RBTExfVU5P UCAgKG9wX25vdCwgICAgICAgb2N0YXZlX3NwYXJzZSwgbm90KTsNCg0KICAg ICAgSU5TVEFMTF9CSU5PUCAob3BfZXEsICAgICAgIG9jdGF2ZV9zcGFyc2Us IG9jdGF2ZV9zcGFyc2UsIHNfc19lcSk7DQogICAgICBJTlNUQUxMX0JJTk9Q IChvcF9lcSwgICAgICAgb2N0YXZlX3NwYXJzZSwgb2N0YXZlX21hdHJpeCwg c19mX2VxKTsNCiAgICAgIElOU1RBTExfQklOT1AgKG9wX2VxLCAgICAgICBv Y3RhdmVfbWF0cml4LCBvY3RhdmVfc3BhcnNlLCBmX3NfZXEpOw0KICAgICAg SU5TVEFMTF9CSU5PUCAob3BfbGRpdiwgICAgIG9jdGF2ZV9zcGFyc2UsIG9j dGF2ZV9tYXRyaXgsIHNfZl9sZGl2KTsNCiAgICAgIElOU1RBTExfQklOT1Ag KG9wX2xkaXYsICAgICBvY3RhdmVfbWF0cml4LCBvY3RhdmVfc3BhcnNlLCBm X3NfbGRpdik7DQogICAgICBJTlNUQUxMX0JJTk9QIChvcF9hZGQsICAgICAg b2N0YXZlX3NwYXJzZSwgb2N0YXZlX3NwYXJzZSwgc19zX2FkZCk7DQogICAg ICBJTlNUQUxMX0JJTk9QIChvcF9hZGQsICAgICAgb2N0YXZlX21hdHJpeCwg b2N0YXZlX3NwYXJzZSwgZl9zX2FkZCk7DQogICAgICBJTlNUQUxMX0JJTk9Q IChvcF9hZGQsICAgICAgb2N0YXZlX3NwYXJzZSwgb2N0YXZlX21hdHJpeCwg c19mX2FkZCk7DQogICAgICBJTlNUQUxMX0JJTk9QIChvcF9zdWIsICAgICAg b2N0YXZlX3NwYXJzZSwgb2N0YXZlX3NwYXJzZSwgc19zX3N1Yik7DQogICAg ICBJTlNUQUxMX0JJTk9QIChvcF9zdWIsICAgICAgb2N0YXZlX21hdHJpeCwg b2N0YXZlX3NwYXJzZSwgZl9zX3N1Yik7DQogICAgICBJTlNUQUxMX0JJTk9Q IChvcF9zdWIsICAgICAgb2N0YXZlX3NwYXJzZSwgb2N0YXZlX21hdHJpeCwg c19mX3N1Yik7DQogICAgICBJTlNUQUxMX0JJTk9QIChvcF9lbF9tdWwsICAg b2N0YXZlX21hdHJpeCwgb2N0YXZlX3NwYXJzZSwgZl9zX2VsX211bCk7DQog ICAgICBJTlNUQUxMX0JJTk9QIChvcF9lbF9tdWwsICAgb2N0YXZlX3NwYXJz ZSwgb2N0YXZlX21hdHJpeCwgc19mX2VsX211bCk7DQogICAgICBJTlNUQUxM X0JJTk9QIChvcF9lbF9tdWwsICAgb2N0YXZlX3NwYXJzZSwgb2N0YXZlX3Nw YXJzZSwgc19zX2VsX211bCk7DQogICAgICBJTlNUQUxMX0JJTk9QIChvcF9t dWwsICAgICAgb2N0YXZlX3NwYXJzZSwgb2N0YXZlX21hdHJpeCwgc19mX211 bCk7DQogICAgICBJTlNUQUxMX0JJTk9QIChvcF9tdWwsICAgICAgb2N0YXZl X21hdHJpeCwgb2N0YXZlX3NwYXJzZSwgZl9zX211bCk7DQogICAgICBJTlNU QUxMX0JJTk9QIChvcF9tdWwsICAgICAgb2N0YXZlX3NwYXJzZSwgb2N0YXZl X3NwYXJzZSwgc19zX211bCk7DQogICB9DQoNCiAgIG9jdGF2ZV92YWx1ZSBy ZXR2YWw7DQoNCiAgIGludCBuYXJnaW49IGFyZ3MubGVuZ3RoKCk7DQogICBp ZiAobmFyZ2luIDwgMSkgew0KICAgICAgcHJpbnRfdXNhZ2UgKCJzcGFyc2Ui KTsNCiAgICAgIHJldHVybiByZXR2YWw7DQogICB9IGVsc2UNCiAgIGlmIChu YXJnaW4gPT0gMSkgew0KICAgICAgTWF0cml4IEEgPSBhcmdzKDApLm1hdHJp eF92YWx1ZSAoKTsNCiAgICAgIHJldHZhbCA9IG5ldyBvY3RhdmVfc3BhcnNl ICggbWF0cml4X3RvX3NwYXJzZSggQSApICk7DQogICB9DQogICBlbHNlIHsN CiAgICAgIGludCBtPTAsbj0wOw0KICAgICAgQ29sdW1uVmVjdG9yIGNvZWZB LCByaWR4QSwgY2lkeEE7DQoNCiAgICAgIGlmIChuYXJnaW4gPT0gMikgew0K ICAgICAgICAgbT0gKGludCkgYXJncygwKS5kb3VibGVfdmFsdWUoKTsNCiAg ICAgICAgIG49IChpbnQpIGFyZ3MoMSkuZG91YmxlX3ZhbHVlKCk7DQogICAg ICAgICBjaWR4QSA9IENvbHVtblZlY3RvciAoKTsNCiAgICAgICAgIHJpZHhB ID0gQ29sdW1uVmVjdG9yICgpOw0KICAgICAgICAgY29lZkEgPSBDb2x1bW5W ZWN0b3IgKCk7DQogICAgICB9DQogICAgICBlbHNlIHsNCi8vIA0KLy8gIEkg dXNlIHRoaXMgY2x1bXN5IGNvbnN0cnVjdGlvbiBzbyB0aGF0IHdlIGNhbiB1 c2UNCi8vICBhbnkgb3JpZW50YXRpb24gb2YgYXJncw0KLy8NCiAgICAgICAg IHsgQ29sdW1uVmVjdG9yIHgoIGFyZ3MoMCkudmVjdG9yX3ZhbHVlKCkgKTsg cmlkeEE9IHg7IH0NCiAgICAgICAgIHsgQ29sdW1uVmVjdG9yIHgoIGFyZ3Mo MSkudmVjdG9yX3ZhbHVlKCkgKTsgY2lkeEE9IHg7IH0NCiAgICAgICAgIHsg Q29sdW1uVmVjdG9yIHgoIGFyZ3MoMikudmVjdG9yX3ZhbHVlKCkgKTsgY29l ZkE9IHg7IH0NCiAgICAgICAgIGlmIChuYXJnaW4gPT0gMykgew0KICAgICAg ICAgICAgbT0gKGludCkgcmlkeEEubWF4KCk7DQogICAgICAgICAgICBuPSAo aW50KSBjaWR4QS5tYXgoKTsNCiAgICAgICAgIH0gZWxzZSB7DQogICAgICAg ICAgICBtPSAoaW50KSBhcmdzKDMpLmRvdWJsZV92YWx1ZSgpOw0KICAgICAg ICAgICAgbj0gKGludCkgYXJncyg0KS5kb3VibGVfdmFsdWUoKTsNCiAgICAg ICAgIH0NCiAgICAgIH0NCiAgICAgIHJldHZhbCA9IG5ldyBvY3RhdmVfc3Bh cnNlICgNCiAgICAgICAgICAgICAgIGFzc2VtYmxlX3NwYXJzZSggbiwgbSwg Y29lZkEsIHJpZHhBLCBjaWR4QSApICk7DQogICB9DQoNCiAgIHJldHVybiBy ZXR2YWw7DQp9DQoNCkRFRlVOX0RMRCAoZnVsbCwgYXJncywgLA0KIkZNPSBm dWxsIChTTSlcbiINCiIgcmV0dXJucyBhIGZ1bGwgc3RvcmFnZSBtYXRyaXgg ZnJvbSBhIHNwYXJzZSBvbmUiKQ0Kew0KICBvY3RhdmVfdmFsdWVfbGlzdCBy ZXR2YWw7DQoNCiAgaWYgKGFyZ3MubGVuZ3RoKCkgPCAxKSB7DQogICAgIHBy aW50X3VzYWdlICgiZnVsbCIpOw0KICAgICByZXR1cm4gcmV0dmFsOw0KICB9 DQoNCiAgaWYgKGFyZ3MoMCkudHlwZV9uYW1lICgpID09ICJzcGFyc2UiKSB7 DQogICAgIGNvbnN0IG9jdGF2ZV92YWx1ZSYgcmVwID0gYXJncygwKS5nZXRf cmVwICgpOw0KDQogICAgIE1hdHJpeCBNID0gKChjb25zdCBvY3RhdmVfc3Bh cnNlJikgcmVwKSAuIG1hdHJpeF92YWx1ZSAoKTsNCiAgICAgcmV0dmFsKDAp PSBNOw0KICB9IGVsc2UNCiAgaWYgKGFyZ3MoMCkudHlwZV9uYW1lICgpID09 ICJtYXRyaXgiKSB7DQogICAgIHJldHZhbCgwKT0gYXJncygwKS5tYXRyaXhf dmFsdWUoKTsNCiAgfSBlbHNlDQogICAgZ3JpcGVfd3JvbmdfdHlwZV9hcmcg KCJmdWxsIiwgYXJncygwKSk7DQoNCiAgcmV0dXJuIHJldHZhbDsNCn0NCg0K REVGVU5fRExEIChubnosIGFyZ3MsICwNCiJpbnQ9IG5ueiAoU00pXG4iDQoi IHJldHVybnMgbnVtYmVyIG9mIG5vbiB6ZXJvIGVsZW1lbnRzIGluIFNNIikN CnsNCiAgb2N0YXZlX3ZhbHVlX2xpc3QgcmV0dmFsOw0KDQogIGlmIChhcmdz Lmxlbmd0aCgpIDwgMSkgew0KICAgICBwcmludF91c2FnZSAoIm5ueiIpOw0K ICAgICByZXR1cm4gcmV0dmFsOw0KICB9DQoNCiAgaWYgKGFyZ3MoMCkudHlw ZV9uYW1lICgpID09ICJzcGFyc2UiKSB7DQogICAgIGNvbnN0IG9jdGF2ZV92 YWx1ZSYgcmVwID0gYXJncygwKS5nZXRfcmVwICgpOw0KDQogICAgIHJldHZh bCgwKT0gKGRvdWJsZSkgKChjb25zdCBvY3RhdmVfc3BhcnNlJikgcmVwKSAu IG5ueiAoKTsNCiAgfQ0KICBlbHNlIHsNCiAgICAgY29uc3QgTWF0cml4IE0g PSBhcmdzKDApLm1hdHJpeF92YWx1ZSgpOw0KICAgICBpbnQgbm56PSAwOw0K ICAgICBmb3IoIGludCBpPTA7IGk8IE0ucm93cygpOyBpKyspDQogICAgICAg IGZvciggaW50IGo9MDsgajwgTS5jb2xzKCk7IGorKykNCiAgICAgICAgICAg aWYgKE0oaSxqKSE9MCkgbm56Kys7DQogICAgIHJldHZhbCgwKT0gKGRvdWJs ZSkgbm56Ow0KICB9DQoNCiAgcmV0dXJuIHJldHZhbDsNCn0NCg0KLy8NCi8v IFRoaXMgcm91dGluZSBjb252ZXJ0cyBmcm9tIHRoZSBTdXBlck5vZGFsIE1h dHJpY2VzDQovLyBMLFUgdG8gdGhlIENvbXAgQ29sIGZvcm1hdC4NCi8vDQov LyBJdCBpcyBtb2RpZmllZCBmcm9tIFN1cGVyTFUvTUFUTEFCL21leHN1cGVy bHUuYw0KLy8NCg0Kc3RhdGljIHZvaWQNCkxVZXh0cmFjdChTdXBlck1hdHJp eCAqTCwgU3VwZXJNYXRyaXggKlUsIGRvdWJsZSAqTHZhbCwgaW50ICpMcm93 LA0KICAgICAgICAgIGludCAqTGNvbCwgZG91YmxlICpVdmFsLCBpbnQgKlVy b3csIGludCAqVWNvbCwgaW50ICpzbm56TCwNCiAgICAgICAgICBpbnQgKnNu bnpVKQ0Kew0KICAgREVCVUdNU0coIkxVZXh0cmFjdCIpOw0KICAgaW50ICAg ICAgICAgaSwgaiwgazsNCiAgIGludCAgICAgICAgIHVwcGVyOw0KICAgaW50 ICAgICAgICAgZnN1cGMsIGlzdGFydCwgbnN1cHI7DQogICBpbnQgICAgICAg ICBsYXN0bCA9IDAsIGxhc3R1ID0gMDsNCiAgIGRvdWJsZSAgICAgICpTTnB0 cjsNCg0KICAgU0Nmb3JtYXQgKiBMc3RvcmUgPSAoU0Nmb3JtYXQgKikgTC0+ U3RvcmU7DQogICBOQ2Zvcm1hdCAqIFVzdG9yZSA9IChOQ2Zvcm1hdCAqKSBV LT5TdG9yZTsNCiAgIExjb2xbMF0gPSAwOw0KICAgVWNvbFswXSA9IDA7DQog ICANCiAgIC8qIGZvciBlYWNoIHN1cGVybm9kZSAqLw0KICAgZm9yIChrID0g MDsgayA8PSBMc3RvcmUtPm5zdXBlcjsgKytrKSB7DQogICAgICAgDQogICAg ICAgZnN1cGMgPSBMX0ZTVF9TVVBDKGspOw0KICAgICAgIGlzdGFydCA9IExf U1VCX1NUQVJUKGZzdXBjKTsNCiAgICAgICBuc3VwciA9IExfU1VCX1NUQVJU KGZzdXBjKzEpIC0gaXN0YXJ0Ow0KICAgICAgIHVwcGVyID0gMTsNCiAgICAg ICANCiAgICAgICAvKiBmb3IgZWFjaCBjb2x1bW4gaW4gdGhlIHN1cGVybm9k ZSAqLw0KICAgICAgIGZvciAoaiA9IGZzdXBjOyBqIDwgTF9GU1RfU1VQQyhr KzEpOyArK2opIHsNCiAgICAgICAgICAgU05wdHIgPSAmKChkb3VibGUqKUxz dG9yZS0+bnp2YWwpW0xfTlpfU1RBUlQoaildOw0KDQogICAgICAgICAgIC8q IEV4dHJhY3QgVSAqLw0KICAgICAgICAgICBmb3IgKGkgPSBVX05aX1NUQVJU KGopOyBpIDwgVV9OWl9TVEFSVChqKzEpOyArK2kpIHsNCiAgICAgICAgICAg ICAgIFV2YWxbbGFzdHVdID0gKChkb3VibGUqKVVzdG9yZS0+bnp2YWwpW2ld Ow0KICAgICAgICAgICAgICAgIC8qIE1hdGxhYiBkb2Vzbid0IGxpa2UgZXhw bGljaXQgemVyby4gKi8NCiAgICAgICAgICAgICAgIGlmIChVdmFsW2xhc3R1 XSAhPSAwLjApIFVyb3dbbGFzdHUrK10gPSBVX1NVQihpKTsNCiAgICAgICAg ICAgfQ0KICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdXBwZXI7ICsraSkg eyAvKiB1cHBlciB0cmlhbmdsZSBpbiB0aGUgc3VwZXJub2RlICovDQogICAg ICAgICAgICAgICBVdmFsW2xhc3R1XSA9IFNOcHRyW2ldOw0KICAgICAgICAg ICAgICAgIC8qIE1hdGxhYiBkb2Vzbid0IGxpa2UgZXhwbGljaXQgemVyby4g Ki8NCiAgICAgICAgICAgICAgIGlmIChVdmFsW2xhc3R1XSAhPSAwLjApIFVy b3dbbGFzdHUrK10gPSBMX1NVQihpc3RhcnQraSk7DQogICAgICAgICAgIH0N CiAgICAgICAgICAgVWNvbFtqKzFdID0gbGFzdHU7DQoNCiAgICAgICAgICAg LyogRXh0cmFjdCBMICovDQogICAgICAgICAgIEx2YWxbbGFzdGxdID0gMS4w OyAvKiB1bml0IGRpYWdvbmFsICovDQogICAgICAgICAgIExyb3dbbGFzdGwr K10gPSBMX1NVQihpc3RhcnQgKyB1cHBlciAtIDEpOw0KICAgICAgICAgICBm b3IgKGkgPSB1cHBlcjsgaSA8IG5zdXByOyArK2kpIHsNCiAgICAgICAgICAg ICAgIEx2YWxbbGFzdGxdID0gU05wdHJbaV07DQogICAgICAgICAgICAgICAg LyogTWF0bGFiIGRvZXNuJ3QgbGlrZSBleHBsaWNpdCB6ZXJvLiAqLw0KICAg ICAgICAgICAgICAgaWYgKEx2YWxbbGFzdGxdICE9IDAuMCkgTHJvd1tsYXN0 bCsrXSA9IExfU1VCKGlzdGFydCtpKTsNCiAgICAgICAgICAgfQ0KICAgICAg ICAgICBMY29sW2orMV0gPSBsYXN0bDsNCg0KICAgICAgICAgICArK3VwcGVy Ow0KICAgICAgICAgICANCiAgICAgICB9IC8qIGZvciBqIC4uLiAqLw0KICAg ICAgIA0KICAgfSAvKiBmb3IgayAuLi4gKi8NCg0KICAgKnNubnpMID0gbGFz dGw7DQogICAqc25uelUgPSBsYXN0dTsNCn0NCg0Kc3RhdGljIHZvaWQNCnNw YXJzZV9MVV9mYWN0KFN1cGVyTWF0cml4IEEsDQogICAgICAgICAgICAgICBT dXBlck1hdHJpeCAqTEMsDQogICAgICAgICAgICAgICBTdXBlck1hdHJpeCAq VUMsDQogICAgICAgICAgICAgICBpbnQgKiBwZXJtX2MsDQogICAgICAgICAg ICAgICBpbnQgKiBwZXJtX3IsIA0KICAgICAgICAgICAgICAgaW50IHBlcm1j X3NwZWMgKSANCnsNCiAgIERFQlVHTVNHKCJzcGFyc2VfTFVfZmFjdCIpOw0K ICAgaW50IG0gPSBBLm5yb3c7DQogICBpbnQgbiA9IEEubmNvbDsNCiAgIGNo YXIgICByZWZhY3RbMV0gPSB7J04nfTsNCiAgIGRvdWJsZSB0aHJlc2ggICAg PSAxLjA7ICAgICAvLyBkaWFnb25hbCBwaXZvdGluZyB0aHJlc2hvbGQgDQog ICBkb3VibGUgZHJvcF90b2wgID0gMC4wOyAgICAgLy8gZHJvcCB0b2xlcmFu Y2UgcGFyYW1ldGVyIA0KICAgaW50ICAgIGluZm87DQogICBpbnQgICAgcGFu ZWxfc2l6ZSA9IHNwX2llbnYoMSk7DQogICBpbnQgICAgcmVsYXggICAgICA9 IHNwX2llbnYoMik7DQogICBpbnQgICAgZXRyZWVbbl07DQogICBTdXBlck1h dHJpeCBBYzsNCiAgIFN1cGVyTWF0cml4IEwsVTsNCg0KICAgU3RhdEluaXQo cGFuZWxfc2l6ZSwgcmVsYXgpOw0KDQogICBkb19wZXJtYyggcGVybWNfc3Bl YywgcGVybV9jLCBBKTsNCiAgIC8vIEFwcGx5IGNvbHVtbiBwZXJtIHRvIEEg YW5kIGNvbXB1dGUgZXRyZWUuDQogICBzcF9wcmVvcmRlcihyZWZhY3QsICZB LCBwZXJtX2MsIGV0cmVlLCAmQWMpOw0KDQogICBkZ3N0cmYocmVmYWN0LCAm QWMsIHRocmVzaCwgZHJvcF90b2wsIHJlbGF4LCBwYW5lbF9zaXplLCBldHJl ZSwNCiAgICAgICAgICAgTlVMTCwgMCwgcGVybV9yLCBwZXJtX2MsICZMLCAm VSwgJmluZm8pOw0KICAgaWYgKCBpbmZvIDwgMCApDQogICAgICBTUF9GQVRB TF9FUlIgKCJMVSBmYWN0b3JpemF0aW9uIGVycm9yIik7DQoNCiAgIGludCAg ICAgIHNubnpMLCBzbm56VTsNCg0KICAgaW50ICAgICAgbm56TCA9ICgoU0Nm b3JtYXQqKUwuU3RvcmUpLT5ubno7DQogICBkb3VibGUgKiBMdmFsID0gbmV3 IGRvdWJsZVtubnpMXTsNCiAgIGludCAgICAqIExyb3cgPSBuZXcgICAgaW50 W25uekxdOw0KICAgaW50ICAgICogTGNvbCA9IG5ldyAgICBpbnRbbisxIF07 DQoNCiAgIGludCAgICAgIG5uelUgPSAoKE5DZm9ybWF0KilVLlN0b3JlKS0+ bm56Ow0KICAgZG91YmxlICogVXZhbCA9IG5ldyBkb3VibGVbbm56VV07DQog ICBpbnQgICAgKiBVcm93ID0gbmV3ICAgIGludFtubnpVXTsNCiAgIGludCAg ICAqIFVjb2wgPSBuZXcgICAgaW50W24rMSBdOw0KDQogICBMVWV4dHJhY3Qo JkwsICZVLCBMdmFsLCBMcm93LCBMY29sLCBVdmFsLCBVcm93LCBVY29sLCAm c25uekwsICZzbm56VSk7DQogICBkQ3JlYXRlX0NvbXBDb2xfTWF0cml4KExD LCBtLCBuLCBubnpMLCBMdmFsLCBMcm93LCBMY29sLCBOQywgX0QsIEdFKTsN CiAgIGRDcmVhdGVfQ29tcENvbF9NYXRyaXgoVUMsIG0sIG4sIG5uelUsIFV2 YWwsIFVyb3csIFVjb2wsIE5DLCBfRCwgR0UpOw0KDQogICBEZXN0cm95X1N1 cGVyTWF0cml4X1N0b3JlKCAmTCApOw0KICAgRGVzdHJveV9TdXBlck1hdHJp eF9TdG9yZSggJlUgKTsNCiAgIERlc3Ryb3lfU3VwZXJNYXRyaXhfU3RvcmUo ICZBYyApOw0KDQp9IC8vIHNwYXJzZV9MVV9mYWN0KA0KDQpERUZVTl9ETEQg KHNwbHUsIGFyZ3MsIG5hcmdvdXQgLA0KICAiW0wsVSxQcm93LCBQY29sXSA9 IHNwbHUoIGEgLHApO1xuXA0KU1BMVSA6IFNwYXJzZSBNYXRyaXggTFUgZmFj dG9yaXphdGlvblxuXA0KXG5cDQpXaXRoIG9uZSBpbnB1dCBhbmQgdHdvIG9y IHRocmVlIG91dHB1dHMsIFNQTFUgaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyBM VSxcblwNCkV4Y2VwdCB0aGF0IHJvdyBhbmQgY29sdW1uIHBlcm11dGF0aW9u cyBhcmUgcmV0dXJuZWRcblwNClxuXA0KW0wsVSxQcixQY10gPSBzcGx1KEEp IFxuXA0KICAgICAgICAgIHJldHVybnMgdW5pdCBsb3dlciB0cmlhbmd1bGFy IEwsIHVwcGVyIHRyaWFuZ3VsYXIgVSxcblwNCiAgICAgICAgICBhbmQgcGVy bXV0YXRpb24gbWF0cmljZXMgUHIsUGMgd2l0aCBQcipBKlBjJyA9IEwqVS5c blwNCltMcCxVcF0gPSBzdXBlcmx1KEEpIHJldHVybnMgcGVybXV0ZWQgdHJp YW5ndWxhciBMIGFuZCB1cHBlciB0cmlhbmd1bGFyIFVcblwNCiAgICAgICAg ICB3aXRoIEEgPSBMKlUuXG5cDQogICAgICAgICAgaGVyZSBQcipMcCA9IEwg IGFuZCBVcCpQYyA9IFUNClxuXA0KTm90ZTogMm5kIGlucHV0IGZ1bmNpb25h bGl0eSBoYXMgbm90IGJlZW4gdmVyaWZpZWRcblwNCldpdGggYSBzZWNvbmQg aW5wdXQsIHRoZSBjb2x1bW5zIG9mIEEgYXJlIHBlcm11dGVkIGJlZm9yZSBm YWN0b3Jpbmc6XG5cDQpcblwNCltMLFUsUF0gPSBzdXBlcmx1KEEscHNwYXJz ZSkgcmV0dXJucyB0cmlhbmd1bGFyIEwgYW5kIFUgYW5kIHBlcm11dGF0aW9u XG5cDQogICAgICAgICAgcHJvdyB3aXRoIFAqQSg6LHBzcGFyc2UpID0gTCpV LlxuXA0KW0wsVV0gPSBzdXBlcmx1KEEscHNwYXJzZSkgcmV0dXJucyBwZXJt dXRlZCB0cmlhbmd1bGFyIEwgYW5kIHRyaWFuZ3VsYXIgVVxuXA0KICAgICAg ICAgIHdpdGggQSg6LHBzcGFyc2UpID0gTCpVLlxuXA0KSGVyZSBwc3BhcnNl IHdpbGwgbm9ybWFsbHkgYmUgYSB1c2VyLXN1cHBsaWVkIHBlcm11dGF0aW9u IG1hdHJpeCBvciB2ZWN0b3JcblwNCnRvIGJlIGFwcGxpZWQgdG8gdGhlIGNv bHVtbnMgb2YgQSBmb3Igc3BhcnNpdHkuIFxuXA0KICAiKQ0Kew0KICAgb2N0 YXZlX3ZhbHVlX2xpc3QgcmV0dmFsOw0KICAgb2N0YXZlX3ZhbHVlIHRtcDsN CiAgIGludCBuYXJnaW4gPSBhcmdzLmxlbmd0aCAoKTsNCg0KICAgaWYgKGFy Z3MubGVuZ3RoKCkgPCAxKSB7DQogICAgICBwcmludF91c2FnZSAoInNwbHUi KTsNCiAgICAgIHJldHVybiByZXR2YWw7DQogICB9DQogDQogICBpZiAoYXJn cygwKS50eXBlX25hbWUgKCkgPT0gInNwYXJzZSIpIHsNCiAgICAgIGNvbnN0 IG9jdGF2ZV92YWx1ZSYgcmVwID0gYXJncygwKS5nZXRfcmVwICgpOw0KIA0K ICAgICAgU3VwZXJNYXRyaXggQSA9ICgoY29uc3Qgb2N0YXZlX3NwYXJzZSYp IHJlcCkgLiBzdXBlcl9tYXRyaXggKCk7DQogICAgICBTdXBlck1hdHJpeCBM LCBVOw0KICAgICAgaW50IG0gPSBBLm5yb3c7DQogICAgICBpbnQgbiA9IEEu bmNvbDsNCiAgICAgIGlmIChtICE9IG4pDQogICAgICAgICBTUF9GQVRBTF9F UlIoIklucHV0IG1hdHJpeCBtdXN0IGJlIHNxdWFyZSIpOw0KDQogICAgICBp bnQgcGVybV9jW25dOw0KICAgICAgaW50IHBlcm1jX3NwZWM9MzsNCiAgICAg IGlmIChuYXJnaW4gPT0yKSB7DQogICAgICAgICBDb2x1bW5WZWN0b3IgcGVy bWNpZHggPSBhcmdzKDEpLmNvbHVtbl92ZWN0b3JfdmFsdWUoKTsNCiAgICAg ICAgIGZvciggaW50IGk9IDA7IGk8IG4gOyBpKysgKSANCiAgICAgICAgICAg IHBlcm1fY1tpXT0gKGludCkgcGVybWNpZHgoaSkgLSAxOw0KICAgICAgICAg cGVybWNfc3BlYz0gLTE7IC8vcGVybWMgaXMgcGVyc2VsZWN0ZWQNCiAgICAg IH0NCg0KICAgICAgaW50IHBlcm1fclttXTsNCiAgICAgIHNwYXJzZV9MVV9m YWN0KCBBLCAmTCwgJlUsIHBlcm1fYywgcGVybV9yLCBwZXJtY19zcGVjKTsN Cg0KICAgICAgb2N0YXZlX3ZhbHVlIExTPSBuZXcgb2N0YXZlX3NwYXJzZSgg TCApOw0KICAgICAgb2N0YXZlX3ZhbHVlIFVTPSBuZXcgb2N0YXZlX3NwYXJz ZSggVSApOw0KDQovLyBCdWlsZCB0aGUgcGVybXV0YXRpb24gbWF0cml4DQov LyAgcmVtZW1iZXIgdG8gYWRkIDEgYmVjYXVzZSBhc3NlbWJsZV9zcGFyc2Ug aXMgMSBiYXNlZA0KICAgICAgQ29sdW1uVmVjdG9yIHJpZHhQcihtKSwgY2lk eFByKG0pLCBjb2VmUHIobSk7DQogICAgICBmb3IgKGludCBpPTA7IGk8bTsg aSsrKSB7DQogICAgICAgICByaWR4UHIoaSk9IChkb3VibGUpIGkgKyAxOw0K ICAgICAgICAgY2lkeFByKGkpPSAoZG91YmxlKSBwZXJtX3JbaV0gKyAxOyAN CiAgICAgICAgIGNvZWZQcihpKT0gMS4wOw0KICAgICAgfQ0KDQogICAgICBD b2x1bW5WZWN0b3IgcmlkeFBjKG4pLCBjaWR4UGMobiksIGNvZWZQYyhuKTsN CiAgICAgIGZvciAoaW50IGk9MDsgaTxtOyBpKyspIHsNCiAgICAgICAgIHJp ZHhQYyhpKT0gKGRvdWJsZSkgaSArIDE7DQogICAgICAgICBjaWR4UGMoaSk9 IChkb3VibGUpIHBlcm1fY1tpXSArIDE7IA0KICAgICAgICAgY29lZlBjKGkp PSAxLjA7DQogICAgICB9DQogICAgICANCiAgICAgIGlmIChuYXJnb3V0ID09 MiApIHsNCiAgICAgICAgIG9jdGF2ZV92YWx1ZSBQclQ9IG5ldyBvY3RhdmVf c3BhcnNlICgNCiAgICAgICAgICAgICAgIGFzc2VtYmxlX3NwYXJzZSggbSwg bSwgY29lZlByLCByaWR4UHIsIGNpZHhQciApICk7DQogICAgICAgICBvY3Rh dmVfdmFsdWUgUGMgPSBuZXcgb2N0YXZlX3NwYXJzZSAoDQogICAgICAgICAg ICAgICBhc3NlbWJsZV9zcGFyc2UoIG4sIG4sIGNvZWZQYywgY2lkeFBjLCBy aWR4UGMgKSApOw0KICAgICAgICAgcmV0dmFsKDApPSBQclQqTFM7DQogICAg ICAgICByZXR2YWwoMSk9IFVTKlBjIDsNCiAgICAgIH0gZWxzZQ0KICAgICAg aWYgKG5hcmdvdXQgPjIgKSB7DQogICAgICAgICAvL2J1aWxkIFBTIGJhY2t3 YXJkcyB0byBnZXQgdGhlIHRyYW5zcG9zZQ0KICAgICAgICAgb2N0YXZlX3Zh bHVlIFByID0gbmV3IG9jdGF2ZV9zcGFyc2UgKA0KICAgICAgICAgICAgICAg YXNzZW1ibGVfc3BhcnNlKCBtLCBtLCBjb2VmUHIsIGNpZHhQciwgcmlkeFBy ICkgKTsNCiAgICAgICAgIG9jdGF2ZV92YWx1ZSBQYyA9IG5ldyBvY3RhdmVf c3BhcnNlICgNCiAgICAgICAgICAgICAgIGFzc2VtYmxlX3NwYXJzZSggbiwg biwgY29lZlBjLCBjaWR4UGMsIHJpZHhQYyApICk7DQogICAgICAgICByZXR2 YWwoMCk9IExTOw0KICAgICAgICAgcmV0dmFsKDEpPSBVUzsNCiAgICAgICAg IHJldHZhbCgyKT0gUHI7DQogICAgICAgICByZXR2YWwoMyk9IFBjOw0KICAg ICAgfQ0KICAgfQ0KICAgZWxzZQ0KICAgICBncmlwZV93cm9uZ190eXBlX2Fy ZyAoInNwbHUiLCBhcmdzKDApKTsNCg0KICAgcmV0dXJuIHJldHZhbDsNCn0N Cg0KREVGVU5fRExEIChzcGZpbmQsIGFyZ3MsIG5hcmdvdXQgLA0KICAiWy4u Ll0gPSBzcGZpbmQgKC4uLilcblwNClNQRklORDogYSBzcGFyc2UgdmVyc2lv biBvZiB0aGUgZmluZCBvcGVyYXRvclxuXA0KICAgeCA9IHNwZmluZCggYSAp ICAgICAgICAgICAgICAgICBcblwNCiAgICAgIGlzIGFuYWxhZ291cyB0byB4 PSBmaW5kKEEoOikpIFxuXA0KICAgICAgd2hlcmUgQT0gZnVsbChhKVxuXA0K ICAgW2ksai52LG5yLG5jXSA9IHNwZnVuKCBhLCAnZmluZCcpXG5cDQogICAg ICBnaXZlIGNvbHVtbiB2ZWN0b3JzIGkgaiB2IHN1Y2ggdGhhdFxuXA0KICAg ICAgYT0gc3BhcnNlKGksaix2LG5yLG5jKVxuXA0KICAiKQ0Kew0KICAgb2N0 YXZlX3ZhbHVlX2xpc3QgcmV0dmFsOw0KICAgb2N0YXZlX3ZhbHVlIHRtcDsN CiAgIGludCBuYXJnaW4gPSBhcmdzLmxlbmd0aCAoKTsNCg0KICAgaWYgKG5h cmdpbiAhPSAxKSB7DQogICAgICBwcmludF91c2FnZSAoInNwZnVsbCIpOw0K ICAgICAgcmV0dXJuIHJldHZhbDsNCiAgIH0NCiAgICAgIA0KICAgaWYgKGFy Z3MoMCkudHlwZV9uYW1lICgpID09ICJzcGFyc2UiKSB7DQogICAgICBjb25z dCBvY3RhdmVfdmFsdWUmIHJlcCA9IGFyZ3MoMCkuZ2V0X3JlcCAoKTsNCiAN CiAgICAgIFN1cGVyTWF0cml4IEEgPSAoKGNvbnN0IG9jdGF2ZV9zcGFyc2Um KSByZXApIC4gc3VwZXJfbWF0cml4ICgpOw0KDQogICAgICBpbnQgbnI9IEEu bnJvdzsNCiAgICAgIGludCBuYz0gQS5uY29sOw0KICAgICAgTkNmb3JtYXQg KiBOQ0YgPSAoTkNmb3JtYXQgKikgQS5TdG9yZTsNCiAgICAgIGRvdWJsZSAq IGNvZWYgID0gKGRvdWJsZSAqKSBOQ0YtPm56dmFsOw0KICAgICAgaW50ICAg ICogcmlkeCAgPSAgICAgICAgICAgIE5DRi0+cm93aW5kOw0KICAgICAgaW50 ICAgICogY2lkeCAgPSAgICAgICAgICAgIE5DRi0+Y29scHRyOw0KICAgICAg aW50ICAgICAgbm56ICAgPSAgICAgICAgICAgIE5DRi0+bm56Ow0KDQogICAg ICBDb2x1bW5WZWN0b3IgSSAobm56KSwgSiAobm56KSwgUyAobm56KTsNCg0K ICAgICAgaW50IGN4PTA7DQogICAgICBmb3IgKGludCBpPTA7IGk8IG5jOyBp KyspDQogICAgICAgICBmb3IgKGludCBqPSBjaWR4W2ldOyBqPCBjaWR4W2kr MV07IGorKyApIA0KICAgICAgICAgICAgaWYgKG5hcmdvdXQ8PTEpIA0KICAg ICAgICAgICAgICAgSSggY3grKyApID0gKGRvdWJsZSkgKCAocmlkeFtqXSsx KSArIGkqbnIgKTsNCiAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAg ICAgSSggY3ggKSA9IChkb3VibGUpIHJpZHhbal0rMTsNCiAgICAgICAgICAg ICAgIEooIGN4ICkgPSAoZG91YmxlKSBpKzE7DQogICAgICAgICAgICAgICBT KCBjeCApID0gICAgICAgICAgY29lZltqXTsNCiAgICAgICAgICAgICAgIGN4 Kys7DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgIGlmIChu YXJnb3V0PD0xKQ0KICAgICAgICAgcmV0dmFsKDApPSBJOw0KICAgICAgZWxz ZSB7DQogICAgICAgICByZXR2YWwoMCk9IEk7DQogICAgICAgICByZXR2YWwo MSk9IEo7DQogICAgICAgICByZXR2YWwoMik9IFM7DQogICAgICAgICByZXR2 YWwoMyk9IChkb3VibGUpIG5yOw0KICAgICAgICAgcmV0dmFsKDQpPSAoZG91 YmxlKSBuYzsNCiAgICAgIH0gLy8gaWYgbmFyZ291dA0KICAgfQ0KICAgZWxz ZQ0KICAgICBncmlwZV93cm9uZ190eXBlX2FyZyAoInNwZmluZCIsIGFyZ3Mo MCkpOw0KDQogICByZXR1cm4gcmV0dmFsOw0KfQ0KDQojaWYgMA0KLy8gY2Fs Y3VsYXRlIHRoZSBpbnZlcnNlIG9mIGEgc3BhcnNlDQovLyBpTHQgPSBpbnYo TCknDQpzdGF0aWMgU3VwZXJNYXRyaXgNCnNwX2ludl91cHBlcnRyaWFuZygg U3VwZXJNYXRyaXggTCkNCnsNCiAgIERFQlVHTVNHKCJzcF9pbnZfbG93ZXJ0 cmlhbmciKTsNCg0KICAgaW50ICAgICAgICAgbnIgPSBVLm5yb3c7DQogICBp bnQgICAgICAgICBuYyA9IFUubmNvbDsNCiAgIE5DZm9ybWF0ICpOQ0ZVID0g KE5DZm9ybWF0ICopIFUuU3RvcmU7DQogICBkb3VibGUgKiBjb2VmVSA9IChk b3VibGUgKikgTkNGVS0+bnp2YWw7DQogICBpbnQgICAgKiByaWR4VSA9ICAg ICAgICAgICAgTkNGVS0+cm93aW5kOw0KICAgaW50ICAgICogY2lkeFUgPSAg ICAgICAgICAgIE5DRlUtPmNvbHB0cjsNCg0KICAgU3VwZXJNYXRyaXggICBP Ow0KICAgTkNmb3JtYXQgKiBOQ0ZPPSAoTkNmb3JtYXQgKikgTy5TdG9yZTsN CiAgIGRvdWJsZSAqIGNvZWZPID0gKGRvdWJsZSAqKSBOQ0ZPLT5uenZhbDsN CiAgIGludCAgICAqIHJpZHhPID0gICAgICAgICAgICBOQ0ZPLT5yb3dpbmQ7 DQogICBpbnQgICAgKiBjaWR4TyA9ICAgICAgICAgICAgTkNGTy0+Y29scHRy Ow0KDQogICAvLyBlc3RpbWF0ZSBpbnZlcnNlIG5uej0gaW5wdXQgbm56DQog ICBpbnQgICAgICAgIG5ueiA9IE5DRlUtPm5uejsNCiAgIHJpZHhPID0gaW50 TWFsbG9jICAgKG5ueik7DQogICBjb2VmTyA9IGRvdWJsZU1hbGxvYyhubnop Ow0KICAgY2lkeE8gPSBpbnRNYWxsb2MgICAobmMrMSk7ICBjaWR4T1swXT0g MDsNCg0KICAgaW50IGN4PSAwOw0KDQogICBmb3IgKCBpbnQgaT0wOyBpIDwg bmMgOyBpKyspIHsNCiAgICAgIGludCBjb2xCPSBjaWR4VVtpXTsNCiAgICAg IGludCBjb2xFPSBjaWR4VVtpKzFdOw0KICAgICAgaWYgKCBjb2xCID09IGNv bEUgKSANCiAgICAgICAgIFNQX0ZBVEFMX0VSUk9SICgic3BfaW52X3VwcGVy dHJpYW5nOiBtYXRyaXggaXMgc2luZ3VsYXIiKTsNCg0KLy8gSEVSRQ0KICAg ICAgZm9yICggaW50IGo9IGNvbEI7IGo8IGNvbEU7IGorKykgew0KICAgICAg ICAgaW50ICAgIGNvbCA9IHJpZHhVW2pdOw0KICAgICAgICAgZG91YmxlIHZh bCA9IGNvZWZVW2pdOw0KDQogICAgICAgICBpZiAoIGo8IGNvbEUtMSkgew0K ICAgICAgICAgLy8gZGVhbCB3aXRoIG5vbi1kaWFnb25hbCBlbGVtZW50cw0K DQogICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgLy8gZGVhbCB3aXRoIGRp YWdvbmFsIGVsZW1lbnRzDQogICAgICAgICAgICBpZiAoIGkgIT0gY29sICkg DQogICAgICAgICAgICAgICBTUF9GQVRBTF9FUlJPUg0KICAgICAgICAgICAg ICAgICAgKCJzcF9pbnZfdXBwZXJ0cmlhbmc6IG1hdHJpeCBpcyBub24tdHJp YW5ndWxhciIpOw0KICAgICAgICAgfSAvLyBpZg0KDQogICAgICB9IC8vIGZv ciBqDQogICB9IC8vIGZvciBpDQoNCiAgIGRDcmVhdGVfQ29tcENvbF9NYXRy aXgoJk8sIG5yLCBuYywgY3gsDQogICAgICAgICAgICAgICAgICAgICAgICAg IGNvZWZPLCByaWR4TywgY2lkeE8sIE5DLCBfRCwgR0UpOw0KICAgcmV0dXJu IE87DQp9ICAgICAgICAgICAgICAgICAgIA0KDQpERUZVTl9ETEQgKHNwaW52 LCBhcmdzLCBuYXJnb3V0ICwNCiAgIltMLFUuVXRdID0gc3BpbnYoIGEgKTsg IikNCnsNCiAgIG9jdGF2ZV92YWx1ZV9saXN0IHJldHZhbDsNCiAgIG9jdGF2 ZV92YWx1ZSB0bXA7DQogICBpbnQgbmFyZ2luID0gYXJncy5sZW5ndGggKCk7 DQoNCiAgIGlmIChhcmdzLmxlbmd0aCgpIDwgMSkgew0KICAgICAgcHJpbnRf dXNhZ2UgKCJzcGludiIpOw0KICAgICAgcmV0dXJuIHJldHZhbDsNCiAgIH0N CiANCiAgIGlmIChhcmdzKDApLnR5cGVfbmFtZSAoKSA9PSAic3BhcnNlIikg ew0KICAgICAgY29uc3Qgb2N0YXZlX3ZhbHVlJiByZXAgPSBhcmdzKDApLmdl dF9yZXAgKCk7DQogDQogICAgICBTdXBlck1hdHJpeCBBID0gKChjb25zdCBv Y3RhdmVfc3BhcnNlJikgcmVwKSAuIHN1cGVyX21hdHJpeCAoKTsNCiAgICAg IFN1cGVyTWF0cml4IEwsIFU7DQogICAgICBpbnQgbSA9IEEubnJvdzsNCiAg ICAgIGludCBuID0gQS5uY29sOw0KICAgICAgaWYgKG0gIT0gbikNCiAgICAg ICAgIFNQX0ZBVEFMX0VSUigiSW5wdXQgbWF0cml4IG11c3QgYmUgc3F1YXJl Iik7DQoNCiAgICAgIGludCBwZXJtX2Nbbl07DQogICAgICBpbnQgcGVybWNf c3BlYz0zOw0KICAgICAgaWYgKG5hcmdpbiA9PTIpIHsNCiAgICAgICAgIENv bHVtblZlY3RvciBwZXJtY2lkeCA9IGFyZ3MoMSkudmVjdG9yX3ZhbHVlKCk7 DQogICAgICAgICBmb3IoIGludCBpPSAwOyBpPCBuIDsgaSsrICkgDQogICAg ICAgICAgICBwZXJtX2NbaV09IChpbnQpIHBlcm1jaWR4KGkpIC0gMTsNCiAg ICAgICAgIHBlcm1jX3NwZWM9IC0xOyAvL3Blcm1jIGlzIHBlcnNlbGVjdGVk DQogICAgICB9DQoNCiAgICAgIGludCBwZXJtX3JbbV07DQogICAgICBzcGFy c2VfTFVfZmFjdCggQSwgJkwsICZVLCBwZXJtX2MsIHBlcm1fciwgcGVybWNf c3BlYyk7DQoNCiAgICAgIFN1cGVyTWF0cml4IGlVdD0gc3BfaW52X3VwcGVy dHJpYW5nKCBVICk7DQoNCiAgICAgIHJldHZhbCgwKT0gbmV3IG9jdGF2ZV9z cGFyc2UoIEwgKTsNCiAgICAgIHJldHZhbCgxKT0gbmV3IG9jdGF2ZV9zcGFy c2UoIFUgKTsNCiAgICAgIHJldHZhbCgyKT0gbmV3IG9jdGF2ZV9zcGFyc2Uo IGlVdCApOw0KDQojaWYgMA0KLy8gQnVpbGQgdGhlIHBlcm11dGF0aW9uIG1h dHJpeA0KLy8gIHJlbWVtYmVyIHRvIGFkZCAxIGJlY2F1c2UgYXNzZW1ibGVf c3BhcnNlIGlzIDEgYmFzZWQNCiAgICAgIENvbHVtblZlY3RvciByaWR4UHIo bSksIGNpZHhQcihtKSwgY29lZlByKG0pOw0KICAgICAgZm9yIChpbnQgaT0w OyBpPG07IGkrKykgew0KICAgICAgICAgcmlkeFByKGkpPSAoZG91YmxlKSBp ICsgMTsNCiAgICAgICAgIGNpZHhQcihpKT0gKGRvdWJsZSkgcGVybV9yW2ld ICsgMTsgDQogICAgICAgICBjb2VmUHIoaSk9IDEuMDsNCiAgICAgIH0NCg0K ICAgICAgQ29sdW1uVmVjdG9yIHJpZHhQYyhuKSwgY2lkeFBjKG4pLCBjb2Vm UGMobik7DQogICAgICBmb3IgKGludCBpPTA7IGk8bTsgaSsrKSB7DQogICAg ICAgICByaWR4UGMoaSk9IChkb3VibGUpIGkgKyAxOw0KICAgICAgICAgY2lk eFBjKGkpPSAoZG91YmxlKSBwZXJtX2NbaV0gKyAxOyANCiAgICAgICAgIGNv ZWZQYyhpKT0gMS4wOw0KICAgICAgfQ0KICAgICAgDQogICAgICBvY3RhdmVf dmFsdWUgUHJUPSBuZXcgb2N0YXZlX3NwYXJzZSAoDQogICAgICAgICAgICBh c3NlbWJsZV9zcGFyc2UoIG0sIG0sIGNvZWZQciwgcmlkeFByLCBjaWR4UHIg KSApOw0KICAgICAgb2N0YXZlX3ZhbHVlIFBjID0gbmV3IG9jdGF2ZV9zcGFy c2UgKA0KICAgICAgICAgICAgYXNzZW1ibGVfc3BhcnNlKCBuLCBuLCBjb2Vm UGMsIGNpZHhQYywgcmlkeFBjICkgKTsNCiAgICAgIHJldHZhbCgwKT0gUHJU KkxTOw0KICAgICAgcmV0dmFsKDEpPSBVUypQYyA7DQojZW5kaWYNCiAgIH0N CiAgIGVsc2UNCiAgICAgZ3JpcGVfd3JvbmdfdHlwZV9hcmcgKCJzcGx1Iiwg YXJncygwKSk7DQoNCiAgIHJldHVybiByZXR2YWw7DQp9DQojZW5kaWYNCg0K DQpERUZJTkVfT0NUQVZFX0FMTE9DQVRPUiAob2N0YXZlX3NwYXJzZSk7DQoN CkRFRklORV9PVl9UWVBFSURfRlVOQ1RJT05TX0FORF9EQVRBIChvY3RhdmVf c3BhcnNlLCAic3BhcnNlIik7DQoNCi8qDQokTG9nOiBtYWtlX3NwYXJzZS5j Yyx2ICQNClJldmlzaW9uIDEuMiAgMjAwMC8wNC8yOCAwMDo0ODozOCAgYW5k eQ0KbW9kcyB0byB3b3JrIHdpdGggMi4xLjMwDQoNClJldmlzaW9uIDEuMSAg MTk5OS8xMi8xMiAwMjo0ODozOSAgYW5keQ0KSW5pdGlhbCByZXZpc2lvbg0K DQpSZXZpc2lvbiAxLjEgIDE5OTkvMTIvMDIgMTY6NDc6NTAgIGFhZGxlcg0K SW5pdGlhbCByZXZpc2lvbg0KDQpSZXZpc2lvbiAxLjExICAxOTk5LzExLzI5 IDA0OjQ5OjQ2ICBhbmR5DQphZGRlZCBzcGFyc2UgZmluZA0KDQpSZXZpc2lv biAxLjEwICAxOTk5LzExLzI5IDAzOjUzOjUxICBhbmR5DQpwcm9wZXIgMyBw YXJhbWV0ZXIgTFUNCg0KUmV2aXNpb24gMS45ICAxOTk5LzExLzI5IDAyOjAx OjQ5ICBhbmR5DQppbmRleCBtZXRob2RzIGFjY2VwdCAnOicgbm90YXRpb24N Cg0KUmV2aXNpb24gMS44ICAxOTk5LzExLzI4IDA0OjQwOjE0ICBhbmR5DQph ZGRlZCBzcGFyc2UgTFUgLSBuZWVkcyBtb2RzIGZvciBuYXJnb3V0ID09IDIN Cg0KUmV2aXNpb24gMS43ICAxOTk5LzExLzI3IDA0OjQ0OjA5ICBhbmR5DQph c3NlbWJsZSBzcGFyc2UgZnJvbSBlbGVtZW50cw0KDQpSZXZpc2lvbiAxLjYg IDE5OTkvMTEvMjcgMDM6Mjc6NTQgIGFuZHkNCmZpeGVkIHNfc19hZGQsIGFk ZGVkIG5ueg0KDQpSZXZpc2lvbiAxLjUgIDE5OTkvMTEvMjYgMDQ6MzA6MDkg IGFuZHkNCmFkZGVkIGFkZCxzdWIsYWxsLGFueQ0KDQpSZXZpc2lvbiAxLjQg IDE5OTkvMTEvMjQgMDQ6MTE6MjQgIGFuZHkNCm5ldyA9PSBkZWZpbml0aW9u DQoNClJldmlzaW9uIDEuMyAgMTk5OS8xMS8yMyAwNDoyNDoyNSAgYW5keQ0K d29ya2luZyBzcGFyc2UgaW5kZXhpbmcgd2l0aCAyZCBpbmRpY2VzDQoNClJl dmlzaW9uIDEuMiAgMTk5OS8xMS8yMiAwMzo0NzoyNCAgYW5keQ0KYWRkZWQg aW5kZXhpbmcgZnVuY3Rpb25zLCBhbHNvIHdpdGggaW5kZXggc29ydGluZw0K DQpSZXZpc2lvbiAxLjEgIDE5OTkvMTEvMTIgMDM6MTM6MTkgIGFuZHkNCklu aXRpYWwgcmV2aXNpb24NCg0KUmV2aXNpb24gMS4xMCAgMTk5OS8xMC8yNiAw Mjo0NTowNSAgYW5keQ0KZml4ZWQgYSBidWcgaW4gc19mX2VxDQoNClJldmlz aW9uIDEuOSAgMTk5OS8xMC8yNiAwMTozMjoxNSAgYW5keQ0KYWRkZWQgc3Bh cnNlIC4qIGFuZCAqIHNwYXJzZQ0KDQpSZXZpc2lvbiAxLjggIDE5OTkvMTAv MjEgMDM6MzA6MjAgIGFuZHkNCmFkZGVkID09IGZ1bmN0aW9uYWxpdHkNCg0K UmV2aXNpb24gMS43ICAxOTk5LzEwLzIwIDAzOjE0OjEzICBhbmR5DQphZGRl ZCBlbF9tdWwgYW5kIHNvbHZlIGZ1bmN0aW9uYWxpdHkNCg0KUmV2aXNpb24g MS42ICAxOTk5LzEwLzE3IDE3OjQ1OjQzICBhbmR5DQpjbGVhcm5lZCB1cCBz cGFyc2VfdmFsdWUgZnVuY3Rpb25hbGl0eQ0KDQpSZXZpc2lvbiAxLjUgIDE5 OTkvMTAvMTUgMDM6NTU6MjggIGFuZHkNCnRyYW5zcG9zZSBhbmQgZl9zIG11 bCBmdW5jdGlvbmFsaXR5DQoNClJldmlzaW9uIDEuNCAgMTk5OS8xMC8xNSAw Mjo0MDoyNiAgYW5keQ0KcHJpbnQgZnVuY3Rpb25hbGl0eQ0KDQpSZXZpc2lv biAxLjMgIDE5OTkvMTAvMTUgMDI6MTM6NTkgIGFuZHkNCnRoaXMgdmVyc2lv biBjb21waWxlcyBhbmQgaW5zdGFsbGVzIHRoZSB0eXBlDQoNClJldmlzaW9u IDEuMiAgMTk5OS8xMC8xNSAwMjoxMDoyNiAgYW5keQ0KY29tcGlsYXRpb24g YnJlYWtzIGZvciBzb21lIGJpemFycmUgcmVhc29uIC0+YWJhbmRvbmluZyB0 aGlzIHZlcnNpb24NCg0KUmV2aXNpb24gMS4xICAxOTk5LzA5LzI0IDAyOjM2 OjE1ICBhbmR5DQpJbml0aWFsIHJldmlzaW9uDQoqLw0K --8323328-1524785817-957226789=:723 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="make_sparse.h" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="make_sparse.h" LyoNCg0KQ29weXJpZ2h0IChDKSAxOTk5IEFuZHkgQWRsZXINCkNvcHlyaWdo dCAoQykgMTk5NiBKb2huIFcuIEVhdG9uDQoNClRoaXMgZmlsZSBpcyBwYXJ0 IG9mIE9jdGF2ZS4NCg0KT2N0YXZlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQNCnVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5IHRoZQ0KRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQ0KbGF0 ZXIgdmVyc2lvbi4NCg0KT2N0YXZlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUDQpBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZiBNRVJDSEFOVEFCSUxJVFkgb3INCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZQ0KZm9yIG1vcmUgZGV0YWlscy4NCg0KWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UN CmFsb25nIHdpdGggT2N0YXZlOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElm IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUNClNvZnR3YXJlIEZvdW5kYXRpb24s IDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIx MTEtMTMwNywgVVNBLg0KDQokSWQ6IG1ha2Vfc3BhcnNlLmgsdiAxLjIgMjAw MC8wNS8wMiAwMDoxMDoxOSBhbmR5IEV4cCBhbmR5ICQNCg0KJExvZzogbWFr ZV9zcGFyc2UuaCx2ICQNClJldmlzaW9uIDEuMiAgMjAwMC8wNS8wMiAwMDox MDoxOSAgYW5keQ0KbW9kcyB0byB3b3JrIHdpdGggMi4xLjMwDQoNClJldmlz aW9uIDEuMSAgMjAwMC8wNC8wMSAwMjo0MTozNiAgYW5keQ0KSW5pdGlhbCBy ZXZpc2lvbg0KDQpSZXZpc2lvbiAxLjEgIDE5OTkvMTIvMDIgMTY6NDc6NTAg IGFhZGxlcg0KSW5pdGlhbCByZXZpc2lvbg0KDQpSZXZpc2lvbiAxLjEgIDE5 OTkvMTEvMjYgMDQ6MzA6MzcgIGFuZHkNCkluaXRpYWwgcmV2aXNpb24NCg0K UmV2aXNpb24gMS4xICAxOTk5LzEwLzE5IDAyOjMxOjMyICBhbmR5DQpJbml0 aWFsIHJldmlzaW9uDQoNCg0KKi8NCg0KI2lmZGVmIFZFUkJPU0UNCiMgIGRl ZmluZSBERUJVR01TRyh4KSBwcmludGYoIkRFQlVHOiIgeCAiXG4iKQ0KI2Vs c2UNCiMgIGRlZmluZSBERUJVR01TRyh4KSANCiNlbmRpZg0KDQojaWZuZGVm IFNVUEVSTFVESVINCiMgIGRlZmluZSBTVVBFUkxVRElSICJTdXBlckxVL1NS QyINCiNlbmRpZg0KDQojaW5jbHVkZSAidXRpbC5oIg0KI2luY2x1ZGUgImRz cF9kZWZzLmgiDQoNCi8vICNpbmNsdWRlIDxvY3RhdmUvY29uZmlnLmg+DQoj aW5jbHVkZSA8Y29uZmlnLmg+DQoNCiNpbmNsdWRlIDxjc3RkbGliPg0KDQoj aW5jbHVkZSA8c3RyaW5nPg0KDQpjbGFzcyBvc3RyZWFtOw0KDQojaW5jbHVk ZSA8b2N0YXZlL2xvLXV0aWxzLmg+DQojaW5jbHVkZSA8b2N0YXZlL214LWJh c2UuaD4NCiNpbmNsdWRlIDxvY3RhdmUvc3RyLXZlYy5oPg0KDQojaW5jbHVk ZSA8b2N0YXZlL2RlZnVuLWRsZC5oPg0KI2luY2x1ZGUgPG9jdGF2ZS9lcnJv ci5oPg0KI2luY2x1ZGUgPG9jdGF2ZS9ncmlwZXMuaD4NCi8vICNpbmNsdWRl IDxvY3RhdmUvbWFwcGVycy5oPiBmb3IgMi4wLngNCiNpbmNsdWRlIDxvY3Rh dmUvbG8tbWFwcGVycy5oPg0KI2luY2x1ZGUgPG9jdGF2ZS9vY3Qtb2JqLmg+ DQojaW5jbHVkZSA8b2N0YXZlL29wcy5oPg0KI2luY2x1ZGUgPG9jdGF2ZS9v di1iYXNlLmg+DQojaW5jbHVkZSA8b2N0YXZlL292LXR5cGVpbmZvLmg+DQoj aW5jbHVkZSA8b2N0YXZlL292Lmg+DQojaW5jbHVkZSA8b2N0YXZlL292LXNj YWxhci5oPg0KI2luY2x1ZGUgPG9jdGF2ZS9vdi1yZS1tYXQuaD4NCiNpbmNs dWRlIDxvY3RhdmUvcGFnZXIuaD4NCiNpbmNsdWRlIDxvY3RhdmUvcHItb3V0 cHV0Lmg+DQojaW5jbHVkZSA8b2N0YXZlL3N5bXRhYi5oPg0KI2luY2x1ZGUg PG9jdGF2ZS92YXJpYWJsZXMuaD4NCg0KY2xhc3MgT2N0YXZlX21hcDsNCmNs YXNzIG9jdGF2ZV92YWx1ZV9saXN0Ow0KDQpjbGFzcyB0cmVlX3dhbGtlcjsN Cg0KLy8gSW50ZWdlciB2YWx1ZXMuDQoNCmNsYXNzDQpvY3RhdmVfc3BhcnNl IDogcHVibGljIG9jdGF2ZV9iYXNlX3ZhbHVlDQp7DQpwdWJsaWM6DQovLyBj b25zdHJ1Y3RvcnM6IGZvciBzb21lIHJlYXNvbiB0aGV5IGhhdmUgdG8gYmUg ZGVmaW5lZCBpbnNpZGUgdGhlIGNsYXNzIC0NCi8vICB3aGljaCBtYWtlcyBm b3IgYSBiaXphcnJlICouaCBmaWxlPw0KDQogICBvY3RhdmVfc3BhcnNlIChT dXBlck1hdHJpeCBBICkgew0KICAgICAgREVCVUdNU0coInNwYXJzZSggU3Vw ZXJNYXRyaXggQSkiKTsNCiAgICAgIFg9IEE7DQogICB9DQoNCiAgIG9jdGF2 ZV9zcGFyc2UgKGNvbnN0IG9jdGF2ZV9zcGFyc2UmIHMpIHsNCiAgICAgIERF QlVHTVNHKCJzcGFyc2UoIHNwYXJzZSApIik7DQogICB9IA0KDQogIH5vY3Rh dmVfc3BhcnNlICh2b2lkKSB7DQogICAgICBERUJVR01TRygic3BhcnNlIGRl c3RydWN0b3IiKTsNCiAgICAgIERlc3Ryb3lfU3VwZXJNYXRyaXhfU3RvcmUo ICZYICk7DQogICB9DQoNCiNpZiAwICAgDQogICBvY3RhdmVfc3BhcnNlICh2 b2lkKTogb2N0YXZlX2Jhc2VfdmFsdWUgKCkgOw0KICAgb2N0YXZlX3NwYXJz ZSAoU3VwZXJNYXRyaXggKiBBICk6IG9jdGF2ZV9iYXNlX3ZhbHVlICgpIDsN CiAgIG9jdGF2ZV9zcGFyc2UgKE1hdHJpeCAmQSApOiBvY3RhdmVfYmFzZV92 YWx1ZSAoKSA7DQogICBvY3RhdmVfc3BhcnNlIChjb25zdCBvY3RhdmVfc3Bh cnNlJiBzKSA6IG9jdGF2ZV9iYXNlX3ZhbHVlICgpIDsNCiAgfm9jdGF2ZV9z cGFyc2UgKHZvaWQpIDsNCiNlbmRpZiAgDQoNCiAgIG9jdGF2ZV92YWx1ZSAq Y2xvbmUgKHZvaWQpIDsNCiAgIG9jdGF2ZV9zcGFyc2Ugc3BhcnNlX3ZhbHVl IChib29sID0gZmFsc2UpIGNvbnN0IDsNCiAgIFN1cGVyTWF0cml4IHN1cGVy X21hdHJpeCAoYm9vbCA9IGZhbHNlKSBjb25zdCA7DQoNCiAgIGludCByb3dz ICAgICh2b2lkKSBjb25zdCA7DQogICBpbnQgY29sdW1ucyAodm9pZCkgY29u c3QgOw0KICAgaW50IG5ueiAgICAgKHZvaWQpIGNvbnN0IDsNCg0KICAgYm9v bCBpc19kZWZpbmVkICh2b2lkKSBjb25zdCA7DQogICBib29sIGlzX3JlYWxf c2NhbGFyICh2b2lkKSBjb25zdCA7DQoNCiAgIG9jdGF2ZV92YWx1ZSBhbnkg KHZvaWQpIGNvbnN0IDsNCiAgIG9jdGF2ZV92YWx1ZSBhbGwgKHZvaWQpIGNv bnN0IDsNCg0KICAgYm9vbCBpc19yZWFsX3R5cGUgKHZvaWQpIGNvbnN0Ow0K ICAgYm9vbCBpc19zY2FsYXJfdHlwZSAodm9pZCkgY29uc3Q7DQogICBib29s IGlzX251bWVyaWNfdHlwZSAodm9pZCkgY29uc3Q7DQogICBib29sIHZhbGlk X2FzX3NjYWxhcl9pbmRleCAodm9pZCkgY29uc3Q7DQogICBib29sIHZhbGlk X2FzX3plcm9faW5kZXggKHZvaWQpIGNvbnN0Ow0KICAgYm9vbCBpc190cnVl ICh2b2lkKSBjb25zdDsNCi8vIGRvdWJsZSBkb3VibGVfdmFsdWUgKGJvb2wg PSBmYWxzZSkgY29uc3Q7DQoNCiAgIE1hdHJpeCBtYXRyaXhfdmFsdWUgKGJv b2wgPSBmYWxzZSkgY29uc3Q7DQogICBvY3RhdmVfdmFsdWUgdW1pbnVzICh2 b2lkKSBjb25zdCA7DQogICAvKg0KLy8gVE9ETzogZml4IHRoaXMgd2hlbiB3 ZSBzdXBwb3J0IENvbXBsZXggc3BhcnNlDQogICBvY3RhdmVfdmFsdWUgaGVy bWl0aWFuICh2b2lkKSBjb25zdCA7DQogICAqLw0KICAgb2N0YXZlX3ZhbHVl IHRyYW5zcG9zZSAodm9pZCkgY29uc3QgOw0KDQogICBvY3RhdmVfdmFsdWUg ZXh0cmFjdCAoaW50IHIxLCBpbnQgYzEsIGludCByMiwgaW50IGMyKSBjb25z dCA7DQogICBvY3RhdmVfdmFsdWVfbGlzdCBkb19pbmRleF9vcCAoaW50LCBj b25zdCBvY3RhdmVfdmFsdWVfbGlzdCYgaWR4KTsNCi8qDQogICBSb3dWZWN0 b3IgICAgcm93ICAgIChpbnQgaSkgY29uc3Q7DQogICBDb2x1bW5WZWN0b3Ig Y29sdW1uIChpbnQgaSkgY29uc3Q7DQoNCiAgIE1hdHJpeCYgTWF0cml4Ojpm aWxsIChkb3VibGUgdmFsKQ0KICAgTWF0cml4JiBNYXRyaXg6OmZpbGwgKGRv dWJsZSB2YWwsIGludCByMSwgaW50IGMxLCBpbnQgcjIsIGludCBjMikNCiAg IE1hdHJpeCAgTWF0cml4OjphcHBlbmQgKGNvbnN0IE1hdHJpeCYgYSkgY29u c3QNCiAgIE1hdHJpeCAgTWF0cml4OjpleHRyYWN0IChpbnQgcjEsIGludCBj MSwgaW50IHIyLCBpbnQgYzIpIGNvbnN0DQogKi8gICANCg0KICAgdm9pZCBw cmludCAob3N0cmVhbSYgb3MsIGJvb2wgcHJfYXNfcmVhZF9zeW50YXggPSBm YWxzZSkgY29uc3QgOw0KDQovLyBpbnQgdHlwZV9pZCAodm9pZCkgY29uc3Qg eyByZXR1cm4gdF9pZDsgfQ0KLy8gc3RyaW5nIHR5cGVfbmFtZSAodm9pZCkg Y29uc3QgeyByZXR1cm4gdF9uYW1lOyB9DQovLyBzdGF0aWMgaW50IHN0YXRp Y190eXBlX2lkICh2b2lkKSB7IHJldHVybiB0X2lkOyB9DQovLyBzdGF0aWMg dm9pZCByZWdpc3Rlcl90eXBlICh2b2lkKSB7DQovLyAgICB0X2lkID0gb2N0 YXZlX3ZhbHVlX3R5cGVpbmZvOjpyZWdpc3Rlcl90eXBlICh0X25hbWUpOw0K Ly8gfQ0KcHJpdmF0ZToNCiAgU3VwZXJNYXRyaXggWCA7DQovL3N0YXRpYyBp bnQgdF9pZDsNCi8vc3RhdGljIGNvbnN0IHN0cmluZyB0X25hbWU7DQogIERF Q0xBUkVfT0NUQVZFX0FMTE9DQVRPUg0KICBERUNMQVJFX09WX1RZUEVJRF9G VU5DVElPTlNfQU5EX0RBVEENCn07DQoNCi8vDQovLyBNZW1vcnkgaGFuZGxp bmcgbWFjcm9zDQovLw0KDQovLyBIb3cgYWdncmVzc2l2ZWx5IGRvIHdlIHRy eSB0byBjb25zZXJ2ZSBtZW1vcnkgYWxsb2NzDQojZGVmaW5lIEVYUEFORCAy DQoNCi8vIENoZWNrIGlmIHdlJ3ZlIGZpbGxlZCB0aGUgYWxsb2NhdGVkIHNw YWNlLCANCi8vIGlmIHNvIHdlIGFsbG9jIEVYUEFORCBtb3JlIGFuZCBjb3B5 DQojZGVmaW5lIENIRUNLX0JPVU5EUzEoaWR4LGJvdW5kLHB0cjEscHRyX3R5 cGUxKSBcDQogICAgICAgIGlmICgoaWR4KT09KGJvdW5kKSkgeyBERUJVR01T RygiZ3Jvd2luZzEiKTsgXA0KICAgICAgICAgICBpbnQgaWk7IFwNCiAgICAg ICAgICAgcHRyX3R5cGUxICp0bXBwdHIxOyBcDQogICAgICAgICAgIChib3Vu ZCkqPSBFWFBBTkQ7IFwNCiAgICAgICAgICAgdG1wcHRyMT0gKHB0cl90eXBl MSAqKSBtYWxsb2MoKGJvdW5kKSAqIHNpemVvZihwdHJfdHlwZTEpKTsgXA0K ICAgICAgICAgICBmb3IoIGlpPTA7IGlpPChpZHgpOyBpaSsrKSBcDQogICAg ICAgICAgICAgIHRtcHB0cjFbaWldPSBwdHIxW2lpXTsgXA0KICAgICAgICAg ICBmcmVlKHB0cjEpOyBcDQogICAgICAgICAgIHB0cjE9IHRtcHB0cjE7IH0N Cg0KI2RlZmluZSBDSEVDS19CT1VORFMyKGlkeCxib3VuZCxwdHIxLHB0cl90 eXBlMSxwdHIyLHB0cl90eXBlMikgXA0KICAgICAgICBpZiAoKGlkeCk9PShi b3VuZCkpIHsgREVCVUdNU0coImdyb3dpbmcyIik7IFwNCiAgICAgICAgICAg aW50IGlpOyBcDQogICAgICAgICAgIHB0cl90eXBlMSAqdG1wcHRyMTsgcHRy X3R5cGUyICp0bXBwdHIyOyBcDQogICAgICAgICAgIChib3VuZCkqPSBFWFBB TkQ7IFwNCiAgICAgICAgICAgdG1wcHRyMT0gKHB0cl90eXBlMSAqKSBtYWxs b2MoKGJvdW5kKSAqIHNpemVvZihwdHJfdHlwZTEpKTsgXA0KICAgICAgICAg ICB0bXBwdHIyPSAocHRyX3R5cGUyICopIG1hbGxvYygoYm91bmQpICogc2l6 ZW9mKHB0cl90eXBlMikpOyBcDQogICAgICAgICAgIGZvciggaWk9MDsgaWk8 KGlkeCk7IGlpKyspIHsgXA0KICAgICAgICAgICAgICB0bXBwdHIxW2lpXT0g cHRyMVtpaV07IFwNCiAgICAgICAgICAgICAgdG1wcHRyMltpaV09IHB0cjJb aWldOyB9IFwNCiAgICAgICAgICAgZnJlZShwdHIxKTsgZnJlZShwdHIyKTtc DQogICAgICAgICAgIHB0cjE9IHRtcHB0cjE7IHB0cjI9IHRtcHB0cjI7IH0N Cg== --8323328-1524785817-957226789=:723 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 MzksIFVTQS4KJQolICRJZDogc3BfdGVzdC5tLHYgMS4xIDIwMDAvMDQvMDEg MDI6NDI6MDIgYW5keSBFeHAgYW5keSAkCgpPQ1RBVkU9ICBleGlzdCgnX19P Q1RBVkVfVkVSU0lPTl9fJyk7ICVub3JtYWxseSB0aGlzIHdvcmtzCk9DVEFW RT0gIGV4aXN0KCdnbnVwbG90X2NvbW1hbmRfcmVwbG90Jyk7CmRvX2ZvcnRy YW5faW5kZXhpbmc9IDE7CnByZWZlcl96ZXJvX29uZV9pbmRleGluZz0gMDsK U1o9MTA7Ck5UUklFUz0zMDA7CgpyZXM9emVyb3MoMSwxMDApOwoKZm9yIHRy aWVzID0gMTpOVFJJRVM7CiAgIGFmPXplcm9zKGNlaWwocmFuZCgxLDIpKlNa ICsgMSkpOwogICBuej0gcHJvZChzaXplKGFmKSkqcmFuZCgxKS8yKzE7CiAg IGFmKGNlaWwocmFuZChueiwxKSpwcm9kKHNpemUoYWYpKSkpPXJhbmRuKG56 LDEpOwoKICAgYmY9YWY7CiAgIG56PSBwcm9kKHNpemUoYmYpKSpyYW5kKDEp LzIrMTsKICAgYmYoY2VpbChyYW5kKG56LDEpKnByb2Qoc2l6ZShiZikpKSk9 cmFuZG4obnosMSk7CgogICBjZj16ZXJvcyhbc2l6ZShhZiwyKSBjZWlsKHJh bmQoMSkqU1ogKyAxKV0pOwogICBuej0gcHJvZChzaXplKGNmKSkqcmFuZCgx KS8yKzE7CiAgIGNmKGNlaWwocmFuZChueiwxKSpwcm9kKHNpemUoY2YpKSkp PXJhbmRuKG56LDEpOwoKICAgc2VseD0gY2VpbChyYW5kKDEsMipjZWlsKHJh bmQoMSkqU1opKSpzaXplKGFmLDIpKTsKICAgc2VseT0gY2VpbChyYW5kKDEs MipjZWlsKHJhbmQoMSkqU1opKSpzaXplKGFmLDEpKTsKICAgc2VsMT0gY2Vp bChyYW5kKDEsMipjZWlsKHJhbmQoMSkqU1opKSpwcm9kKHNpemUoYWYpKSkn OwogICB3aGlsZSAoMSkKJSBDaG9vc2UgZXllIHRvIHRyeSB0byBmb3JjZSBh IG5vbiBzaW5ndWxhciBhIAogICAgICBkZj1leWUoY2VpbChyYW5kKDEpKlNa ICsgMSkpOwogICAgICBuej0gcHJvZChzaXplKGRmKSkqcmFuZCgxKS8yOwog ICAgICBkZihjZWlsKHJhbmQobnosMSkqcHJvZChzaXplKGRmKSkpKT1yYW5k bihueiwxKTsKCiAgICAgIGlmIGFicyhkZXQoZGYpKSA+MWUtMTAgOyBicmVh ayA7IGVuZAogICBlbmQKICAgZWY9IHJhbmQoc2l6ZShkZiwxKSxjZWlsKHJh bmQoMSkqNCkpOwoKJSBnZW5lcmF0ZSBMIGFuZCBVIG1hc2tzLCBkbyB0aHJp Y2UgdG8gaGVscCBlbnN1cmUgd2UgaGF2ZSBpdAogICBbTDEsVTEsam5rXT0g bHUocmFuZChzaXplKGRmKSkpOwogICBbTDIsVTIsam5rXT0gbHUocmFuZChz aXplKGRmKSkpOwogICBbTDMsVTMsam5rXT0gbHUocmFuZChzaXplKGRmKSkp OwogICBMTD0gTDEgfCBMMiB8IEwzOwogICBVVT0gVTEgfCBVMiB8IFUzOwoK ICAgYXM9IHNwYXJzZShhZik7CiAgIGJzPSBzcGFyc2UoYmYpOwogICBjcz0g c3BhcnNlKGNmKTsKICAgZHM9IHNwYXJzZShkZik7CiAgIGVzPSBzcGFyc2Uo ZWYpOwoKICAgaT0xOwoKICAgcmVzKGkrKyk9IHJlcyhpKSAgICAgK2FsbChh bGwoIGFzID09IGFzICkpOwogICByZXMoaSsrKT0gcmVzKGkpICAgICArYWxs KGFsbCggYXMgPT0gYWYgKSk7CiAgIHJlcyhpKyspPSByZXMoaSkgICAgICth bGwoYWxsKCBhZiA9PSBhcyApKTsKICAgZGZfZWY9IGRmXGVmOwogICBtYWcg PSAgMWUtMTMqbWVhbihzdGQoIGRmX2VmICkpKnNxcnQocHJvZChzaXplKGRm X2VmKSkpOwogICByZXMoaSsrKT0gcmVzKGkpICAgICArYWxsKGFsbCggYWJz KGRzXGVmIC0gZGZfZWYpIDwgbWFnICkpOwogICBpZiAhYWxsKGFsbCggYWJz KGRzXGVmIC0gZGZfZWYpIDwgbWFnICkpCiAgICAga2V5Ym9hcmQKICAgZW5k CiAgIHJlcyhpKyspPSByZXMoaSkgICAgICthbGwoYWxsKCBhYnMoZGZcZXMg LSBkZlxlZikgPCBtYWcgKSk7CiAgICAgICAgICAgICAgCiAgIHJlcyhpKysp PSByZXMoaSkgICAgICthbGwoYWxsKCBhcyticyA9PSBhZitiZiApKTsgCiAg IHJlcyhpKyspPSByZXMoaSkgICAgICthbGwoYWxsKCBhZiticyA9PSBhZiti ZiApKTsgIAogICByZXMoaSsrKT0gcmVzKGkpICAgICArYWxsKGFsbCggYXMr YmYgPT0gYWYrYmYgKSk7ICAKICAgcmVzKGkrKyk9IHJlcyhpKSAgICAgK2Fs bChhbGwoIGFzLWJzID09IGFmLWJmICkpOyAgCiAgIHJlcyhpKyspPSByZXMo aSkgICAgICthbGwoYWxsKCBhZi1icyA9PSBhZi1iZiApKTsgIAogICByZXMo aSsrKT0gcmVzKGkpICAgICArYWxsKGFsbCggYXMtYmYgPT0gYWYtYmYgKSk7 ICAKICAgcmVzKGkrKyk9IHJlcyhpKSAgICAgK2FsbChhbGwoIGFzLipicyA9 PSBhZi4qYmYgKSk7ICAKICAgcmVzKGkrKyk9IHJlcyhpKSAgICAgK2FsbChh bGwoIGFmLipicyA9PSBhZi4qYmYgKSk7ICAKICAgcmVzKGkrKyk9IHJlcyhp KSAgICAgK2FsbChhbGwoIGFzLipiZiA9PSBhZi4qYmYgKSk7ICAKICAgICAg ICAgICAgICAgICAgICAgICAgIAogICByZXMoaSsrKT0gcmVzKGkpICAgICAr YWxsKGFsbCggYXMqY3MgPT0gYWYqY2YgKSk7ICAKICAgcmVzKGkrKyk9IHJl cyhpKSAgICAgK2FsbChhbGwoIGFmKmNzID09IGFmKmNmICkpOyAgCiAgIHJl cyhpKyspPSByZXMoaSkgICAgICthbGwoYWxsKCBhcypjZiA9PSBhZipjZiAp KTsgIAogICAgICAgICAgICAgICAgICAgICAgICAgCiAgIHJlcyhpKyspPSBy ZXMoaSkgICAgICthbGwoYWxsKCBhcy4nID09ICBhZi4nICkpOyAgCiAgIHJl cyhpKyspPSByZXMoaSkgICAgICthbGwoYWxsKCBhcycgID09ICBhZicgKSk7 ICAKICAgcmVzKGkrKyk9IHJlcyhpKSAgICAgK2FsbChhbGwoIC1hcyAgPT0g LWFmICkpOyAgCiAgIHJlcyhpKyspPSByZXMoaSkgICAgICthbGwoYWxsKCB+ YXMgID09IH5hZiApKTsgIAogICByZXMoaSsrKT0gcmVzKGkpICAgICArICAg KCAgbm56KGFzKSA9PSBubnooYWYpKTsgIAogICByZXMoaSsrKT0gcmVzKGkp ICAgICArYWxsKCBhcyhzZWwxKSA9PSBhZihzZWwxICkpOwogICByZXMoaSsr KT0gcmVzKGkpICAgICArYWxsKCBhcyg6KSA9PSBhZig6KSk7CiAgIHJlcyhp KyspPSByZXMoaSkgICAgICthbGwoYWxsKCBhcyhzZWx5LHNlbHgpID09IGFm KHNlbHksc2VseCkgKSk7CiAgIHJlcyhpKyspPSByZXMoaSkgICAgICthbGwo YWxsKCBhcyggOiAgLHNlbHgpID09IGFmKCA6ICAsc2VseCkgKSk7CiAgIHJl cyhpKyspPSByZXMoaSkgICAgICthbGwoYWxsKCBhcyhzZWx5LCA6ICApID09 IGFmKHNlbHksIDogICkgKSk7CgogICBtYWcgPSAxZS0xMzsKICAgW0xmMixV ZjJdICAgICA9ICAgbHUoIGRmICk7CiAgIFtMZjQsVWY0LFBmNF0gPSAgIGx1 KCBkZiApOwoKICAgaWYgT0NUQVZFCiAgICAgIFtMczIsVXMyXSAgICAgPSBz cGx1KCBkcyApOwogICBlbHNlCiAgICAgIFtMczIsVXMyXSAgICAgPSBsdSgg ZHMgKTsKICAgZW5kCgolIExVIGRlY29tcCBtYXkgYmUgZGlmZmVyZW50IGJ1 dCBVIG11c3QgYmUgVXBwZXIgYW5kIExVPT1kCiAgIHJlcyhpKyspPSByZXMo aSkgKyBhbGwoIFsgIAogICAgICAgICAgICAgICBhbGwoYWxsKCBhYnMoTHMy KlVzMiAtIExmMipVZjIgKTwgbWFnICkpIDsKICAgICAgICAgICAgICAgICAg ICAgIDEgXSApOwolICAgICAgICAgICAgICAgICAgICAgYWxsKGFsbCggVXMy IC4qIFVVID09IFVzMiApKSBdICk7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKICAgaWYgT0NUQVZFCiAgICAgIFtMczQsVXM0 LFBzUixQc0NdID0gc3BsdSggZHMgKTsKICAgICAgcmVzKGkrKyk9IHJlcyhp KSArIC4uLgogICAgICAgICAgICBhbGwoWyBhbGwoYWxsKGFicyggUHNSJypM czQqVXM0KlBzQyAgLSBQZjQnKkxmNCpVZjQgKTxtYWcpKSA7CiAgICAgICAg ICAgICAgICAgIGFsbChhbGwoYWJzKCBQc1InKkxzNCpVczQqUHNDICAtIGRm ICk8IG1hZykpIDsKICAgICAgICAgICAgICAgICAgYWxsKGFsbCggTHM0IC4q IExMID09IExzNCApKSA7CiAgICAgICAgICAgICAgICAgIGFsbChhbGwoIFVz NCAuKiBVVSA9PSBVczQgKSkgXSApOwogICBlbHNlCiAgICAgIFtMczQsVXM0 LFBzNF0gPSBsdSggZHMgKTsKICAgICAgcmVzKGkrKyk9IHJlcyhpKSArIC4u LgogICAgICAgICAgICBhbGwoWyBhbGwoYWxsKGFicyggUHM0JypMczQqVXM0 IC0gUGY0JypMZjQqVWY0ICk8bWFnKSkgOwogICAgICAgICAgICAgICAgICBh bGwoYWxsKGFicyggUHM0JypMczQqVXM0IC0gZGYgKTwgbWFnKSkgOwogICAg ICAgICAgICAgICAgICBhbGwoYWxsKCBMczQgLiogTEwgPT0gTHM0ICkpIDsK ICAgICAgICAgICAgICAgICAgYWxsKGFsbCggVXM0IC4qIFVVID09IFVzNCAp KSBdICk7CiAgIGVuZAoKICAgaWYgT0NUQVZFCiAgICAgIHJlcyhpKyspPSBy ZXMoaSkgICAgK2FsbCggc3BmaW5kKGFzKSA9PSBmaW5kKGFmKSApOwogICAg ICBbSSxKLFMsTixNXT0gc3BmaW5kKGFzKTsKICAgZWxzZQogICAgICByZXMo aSsrKT0gcmVzKGkpICAgICthbGwoIGZpbmQoYXMpID09IGZpbmQoYWYpICk7 CiAgICAgIFtJLEosU109IGZpbmQoYXMpOwogICAgICBbTixNXSAgPSBzaXpl KGFzKTsKICAgZW5kCiAgIGFzbmV3PSBzcGFyc2UoSSxKLFMsTixNKTsKICAg cmVzKGkrKyk9IHJlcyhpKSAgICArYWxsKCBhbGwoIGFzbmV3ID09IGFzICkp OwoKZW5kIAoKcmVzPSByZXMoMTppLTEpOwoKcHJpbnRmKCAuLi4KICAgICcl ZCBvcGVyYXRpb25zIHRlc3RlZCBzdWNlc3NmdWxseSBmb3IgJWQgaXRlcmF0 aW9uc1xuJywgLi4uCiAgICBzdW0oIHJlcz09TlRSSUVTKSAsIE5UUklFUyAp OwoKZm9yIGk9ZmluZCggcmVzfj0gTlRSSUVTKQogICBwcmludGYoIC4uLgog ICAgJ29wZXJhdGlvbiAjJWQgaW4gc3BfdGVzdC5tIGZhaWxzIHdpdGggcHJv YmFiaWxpdHkgJTUuMmYlJVxuJywgLi4uCiAgICBpLCAxMDAqKDEgLSByZXMo aSkvTlRSSUVTKSApOwplbmQgICAgICAgICAgIAoKJQolICRMb2c6IHNwX3Rl c3QubSx2ICQKJSBSZXZpc2lvbiAxLjEgIDIwMDAvMDQvMDEgMDI6NDI6MDIg IGFuZHkKJSBJbml0aWFsIHJldmlzaW9uCiUKJSBSZXZpc2lvbiAxLjEgIDE5 OTkvMTIvMDIgMTY6NDc6NTAgIGFhZGxlcgolIEluaXRpYWwgcmV2aXNpb24K JQolIFJldmlzaW9uIDEuNSAgMTk5OS8xMS8yNyAwMjo1NTo0MCAgYW5keQol IG1vZGlmaWNhdGlvbnMgZm9yIG5ldyBzcGFyc2UgcmV3cml0ZQolCiUgUmV2 aXNpb24gMS40ICAxOTk5LzEwLzI2IDAyOjQ1OjIyICBhbmR5CiUgbW9kcyBm b3IgbmV3IG1ha2Vfc3BhcnNlLmNjCiUKJSBSZXZpc2lvbiAxLjMgIDE5OTgv MTEvMjEgMjA6NTE6MDEgIGFuZHkKJSBjaGFuZ2VzIHRvIGFsbG93IGNhbGxp bmcgdGhlICJleHBlcnQiIHNvbHZlciwgc29sdmV4CiUKJSBSZXZpc2lvbiAx LjIgIDE5OTgvMTEvMjEgMDQ6MzU6MTggIGFuZHkKJSBSZXZpc2VkIHRvIGRv IGEgZ29vZCBzb2x2ZSB0ZXN0CiUKJSBSZXZpc2lvbiAxLjEgIDE5OTgvMTEv MTUgMTc6MjI6NDAgIGFuZHkKJSBJbml0aWFsIHJldmlzaW9uCiUKJQo= --8323328-1524785817-957226789=:723 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 NSgyKSwxNzAtMTc5DQolDQolICRJZDogZmVtX3Rlc3QubSx2IDEuMSAyMDAw LzA0LzAxIDAyOjQyOjM4IGFuZHkgRXhwIGFuZHkgJA0KDQolIG9jdGF2ZSBj b21tYW5kcywgYnV0IE9LIGluIG1hdGxhYiB0b28gICANCiAgIGRvX2ZvcnRy YW5faW5kZXhpbmc9IDE7DQogICBlbXB0eV9saXN0X2VsZW1lbnRzX29rID0g MTsNCg0KVEVTVFRJTUVTPSA1Ow0KZG90aGVwbG90PTA7DQoNCiVpbmNyZWFz ZSBOIGJ5IG11bHRpcGxlcyBvZiA0IHRvIGRvIGEgbGFyZ2VyIHRlc3QNCiAg ICBOPSAgODsNCiVpbmNyZWFzZSBuaXZlYXV4IHRvIGRvIGEgbGFyZ2VyIHRl c3QNCiAgICBuaXZlYXV4PSBbLS4yOi4xOi4yXScgOw0KDQogICAgcG9zX2k9 IFswIDFdOw0KICAgIGVsZWM9MTY7DQogICAgRUxFTT1bXTsNCiAgICBOT0RF PSBbMDswXTsNCiAgICBpbnQ9MTsNCiAgICBmb3Igaz0xOk4NCiAgICAgIHBo aT0gKDA6NCprLTEpKnBpLzIvazsNCiAgICAgIE5PREU9IFtOT0RFIGsvTipb c2luKHBoaSk7Y29zKHBoaSldXTsNCg0KICAgICAgZXh0PSAyKihrKmstaysx KTsNCiAgICAgIGlkeGU9WzA6ay0xOyAxOmtdOw0KICAgICAgaWR4aT1bMDpr LTFdOyANCiAgICAgIGVsZW09IFsgZXh0K2lkeGUgZXh0KzIqaytbLWlkeGUg aWR4ZV0gZXh0K3JlbSg0KmstaWR4ZSw0KmspIC4uLg0KICAgICAgICAgICAg ICBleHQraWR4ZSBleHQrMiprK1staWR4ZSBpZHhlXSBleHQrcmVtKDQqay1p ZHhlLDQqayk7DQogICAgICAgICAgICAgIGludCtpZHhpIGludCsyKihrLTEp K1staWR4aSBpZHhpXSAuLi4gDQogICAgICAgICAgICAgICAgICAgICAgICAg IGludCtyZW0oNCooay0xKS1pZHhpLCA0KihrLTEpKyhrPT0xKSApIC4uLg0K ICAgICAgICAgICAgICBleHQrNCprKzEraWR4aSBleHQrNiprK1sxLWlkeGkg MytpZHhpXSBleHQrOCprKzMtaWR4aSBdOw0KICAgICAgZm9yIGo9MTprDQog ICAgICAgIHIxPSByZW0oaitrLTEsMykrMTsNCiAgICAgICAgcjI9IHJlbShq K2ssMykrMTsNCiAgICAgICAgcjM9IDYtcjEtcjI7DQogICAgICAgIGVsZW0o W3IxIHIyIHIzXSxqK2sqKDA6NykgKT0gZWxlbSg6LGorayooMDo3KSk7DQog ICAgICBlbmQNCiAgDQogICAgICBFTEVNPVsgRUxFTSBlbGVtKDosMTooOC00 KihrPT1OKSkqaykgXTsNCiAgICAgIGludD1leHQ7DQogICAgZW5kICVmb3Ig az0xOk4NCiAgDQogICAgTUVTPSBleHQrTio0L2VsZWMqKFswOmVsZWMtMV0p Ow0KIA0KICBqPXBvc19pKDEpOyBrPWZsb29yKGopOw0KICBNRVM9W01FUygg MStyZW0oICgwOmVsZWMtMSkrayxlbGVjKSApK2Zsb29yKE1FUygxOjIpKlst MTsxXSooai1rKSk7DQogICAgICAgTUVTKCAxK3JlbSggKDE6ZWxlYykrayxl bGVjKSApK2Zsb29yKE1FUygxOjIpKlstMTsxXSooai1rKSkgXTsNCg0KICBj b3VyPSBbIE1FUygxLDopJyBNRVMoMSwxK3JlbShlbGVjKygwOmVsZWMtMSkr cG9zX2kqWy0xOzFdLGVsZWMpICknOyANCiAgICAgICAgICAgb25lcyhlbGVj LDEpKlstMSAxXSBdOw0KDQogIFFRQ2lyQz0gW3plcm9zKGV4dC0xLDEpO2Nv cygyKnBpKigwOjQvTjplbGVjLS4wMSknL2VsZWMpXTsNCiAgUVFDaXJDPSAy KlFRQ2lyQy9zdW0oYWJzKFFRQ2lyQykpOw0KICBpZiBleGlzdCgnbml2ZWF1 eCcpDQogICAgUVFDaXJDPSBRUUNpckMqKFstMSAxXSpuaXZlYXV4KFsxIGxl bmd0aChuaXZlYXV4KV0pKS9sZW5ndGgobml2ZWF1eCk7DQogIGVuZA0KICB2 b2x0PSBbMTsgemVyb3MoZWxlYywxKV07DQoNCiAgRUxTPXJlbShyZW0oMDpl bGVjXjItMSxlbGVjKS1mbG9vcigoMDplbGVjXjItMSkvZWxlYykrZWxlYyxl bGVjKSc7DQogIEVMUz1+YW55KHJlbSggZWxlYytbLTEgMCBbLTEgMF0rcG9z X2kqWy0xOzFdIF0gLGVsZWMpJyAuLi4NCgkJICAgICAqb25lcygxLGVsZWNe Mik9PW9uZXMoNCwxKSpFTFMnKSc7DQoNCg0KZD0gc2l6ZShFTEVNLDEpOyAg ICAgICAlZGltZW50aW9ucysxDQpuPSBzaXplKE5PREUsMik7ICAgICAgICAl Tk9ERXMNCmU9IHNpemUoRUxFTSwyKTsgICAgICAgICVFTEVNZW50cyAgICAg DQoNCmlmIGRvdGhlcGxvdA0KJSBvY3RhdmUgY29tbWFuZHMsIHdlIHVzZSBl dmFsIHNvIGl0IGRvZXNuJ3QgZmFpbCBpbiBNYXRsYWINCiAgIGV2YWwoJ2dz ZXQgbm9rZXk7JywnMScpOw0KICAgZmxlY2hlPSBbMS4wMiAwOzEuMDYgLjA1 OzEuMDYgLjAyOzEuMSAuMDI7IC4uLg0KCSAgMS4xIC0uMDI7IDEuMDYgLS4w MjsxLjA2IC0uMDU7MS4wMiAwXTsNCiAgIGpqaj0gLjk1Ow0KICAgaWYgfmlz ZW1wdHkoTUVTKQ0KICAgICB4eT1OT0RFKDosTUVTKDEsOikpOw0KICAgZW5k DQogICB4eHg9emVyb3MoMyxlKTsgeHh4KDopPU5PREUoMSxFTEVNKDopKTsN CiAgIHh4eD0gampqKnh4eCsgKDEtampqKSpvbmVzKDMsMSkqbWVhbih4eHgp Ow0KICAgeXl5PXplcm9zKDMsZSk7IHl5eSg6KT1OT0RFKDIsRUxFTSg6KSk7 DQogICB5eXk9IGpqaip5eXkrICgxLWpqaikqb25lcygzLDEpKm1lYW4oeXl5 KTsNCiAgIHBsb3QoW3h4eDt4eHgoMSw6KV0sW3l5eTt5eXkoMSw6KV0sJ2In LCAuLi4NCiAgICAgICAgICAgZmxlY2hlKnh5LGZsZWNoZSpbMCAxOy0xIDBd Knh5LCdyJyk7DQogICANCiAgIGF4aXMoWyBbLTEuMSAxLjFdKm1heChOT0RF KDEsOikpIFstMS4xIDEuMV0qbWF4KE5PREUoMiw6KSkgXSkNCmVuZCAlIHBs b3QgbWVzaA0KaWYgZXhpc3QoJ25pdmVhdXgnKQ0KICBub2RlPU5PREU7DQog IGVsZW09IFtFTEVNKFsxIDEgMiAzIF0sOikgLi4uDQogICAgICAgICBFTEVN KFsyIDEgMiAzXSw6KSBFTEVNKFszIDIgMSAzXSw6KV07IA0KICBOT0RFPSBb bm9kZTsgbml2ZWF1eCgxKSpvbmVzKDEsbikgXTsNCiAgRUxFTT0gW107DQog DQogIGZvciBrPTI6bGVuZ3RoKG5pdmVhdXgpOw0KICAgIE5PREU9W05PREUg LFtub2RlOyBuaXZlYXV4KGspKm9uZXMoMSxuKV0gXTsNCiAgICBFTEVNPSBb RUxFTSwoZWxlbSArIC4uLg0KICAgICAgIFtbKGstMSkqbipvbmVzKDEsZSk7 KGstMikqbipvbmVzKDMsZSldIC4uLg0KICAgICAgICBbKGstMSkqbipvbmVz KDIsZSk7KGstMikqbipvbmVzKDIsZSldIC4uLiAgDQogICAgICAgIFsoay0x KSpuKm9uZXMoMyxlKTsoay0yKSpuKm9uZXMoMSxlKV1dICkgXTsNCiAgZW5k ICVmb3Igaw0KDQogIE1FUz0gTUVTICsgZmxvb3IobGVuZ3RoKG5pdmVhdXgp LzIpKm47DQogIFFRQ2lyQz0gUVFDaXJDKm9uZXMoMSwgbGVuZ3RoKG5pdmVh dXgpKTsgUVFDaXJDPSBRUUNpckMoOik7DQogIGNvdXIoMTplbGVjLDopPSBj b3VyKDE6ZWxlYyw6KSsgZmxvb3IobGVuZ3RoKG5pdmVhdXgpLzIpKm47DQoN CmVuZCAlaWYgZXhpc3QoJ25pdmVhdXgnKQ0KDQpkPSBzaXplKEVMRU0sMSk7 ICAgICAgICVkaW1lbnRpb25zKzENCm49IHNpemUoTk9ERSwyKTsgICAgICAg ICVOT0RFcw0KZT0gc2l6ZShFTEVNLDIpOyAgICAgICAgJUVMRU1lbnRzICAg ICANCnA9IHNpemUodm9sdCwxKS0xOw0KDQpDQz0gc3BhcnNlKCgxOmQqZSks RUxFTSg6KSxvbmVzKGQqZSwxKSwgZCplLCBuKTsNCg0Kc2E9IHplcm9zKGQq ZSxkKTsNCmZvciBqPTE6ZQ0KICBhPSAgaW52KFsgb25lcyhkLDEpIE5PREUo IDosIEVMRU0oOixqKSApJyBdKTsNCiAgc2EoZCooai0xKSsxOmQqaiw6KT0g YSgyOmQsOiknKmEoMjpkLDopLyhkLTEpLyhkLTIpL2FicyhkZXQoYSkpOw0K ZW5kICVmb3Igaj0xOkVMRU1zIA0KcmlkeD0gb25lcyhkLDEpKigxOmUpKmQ7 DQpyaWR4PSByaWR4KDopKm9uZXMoMSxkKSArIG9uZXMoZCplLDEpKlstZCsx OjBdOw0KY2lkeD0gMTpkKmU7DQpTUz0gc3BhcnNlKCBjaWR4JypvbmVzKDEs ZCksIHJpZHgsIHNhLCBkKmUsIGQqZSk7DQoNClFRPXNwYXJzZShjb3VyKDE6 cCw6KSwoMTpwKScqb25lcygxLHNpemUoY291ciwyKSksIC4uLg0KICAgICAg ICAgICAgICAgICAgICAgY291cihwKzE6MipwLDopLG4scCApOw0KDQoNCmlm ICAwICVPQ1RBVkUNCiAgIENDdD0gICAgICAgc3BmdW4oQ0MsJ3RyYW5zJyk7 DQogICBDQ3RTUz0gICAgIHNwZnVuKENDdCwnbXVsJyxTUyk7DQogICBaWj0g ICAgICAgIHNwZnVuKENDdFNTLCdtdWwnLENDKTsNCiAgIFpacz0gICAgICAg c3BmdW4oWlosJ2V4dHJhY3QnLDIsbiwyLG4pOw0KICAgUUY9ICAgICAgICBm dWxsKHNwZnVuKFFRLCdleHRyYWN0JywyLG4sMSxwKSk7DQogICBmcHJpbnRm KCdTb2x2aW5nIEZpbml0ZSBFbGVtZW50IHNwYXJzZSBlcW4sIG49JWQgbm56 PSVkIGRlbnNpdHk9JWZcbicsIC4uLg0KICAgICAgICAgICAgbiwgbm56KFpa KSwgbm56KFpaKS9uXjIgKTsNCiAgIHQwPSBjbG9jazsNCiAgIGZvciBpPTE6 VEVTVFRJTUVTDQogICAgICBWVj0gICAgICAgIHNwZnVuKFpacywnc29sdmUn LFFGLDIpOw0KICAgZW5kDQogICB0YXNrdGltZT0gZXRpbWUoY2xvY2ssdDAp Ow0KZWxzZQ0KICAgWlo9ICAgICAgICBDQycqU1MqQ0M7DQogICBaWnM9ICAg ICAgIFpaKDI6biwyOm4pOw0KICAgUUY9ICAgICAgICBmdWxsKFFRKDI6biw6 KSk7DQogICBmcHJpbnRmKCdTb2x2aW5nIEZpbml0ZSBFbGVtZW50IHNwYXJz ZSBlcW4sIG49JWQgbm56PSVkIGRlbnNpdHk9JWZcbicsIC4uLg0KICAgICAg ICAgICAgbiwgbm56KFpaKSwgbm56KFpaKS9uXjIgKTsNCiAgIHQwPSBjbG9j azsNCiAgIGZvciBpPTE6VEVTVFRJTUVTDQogICAgICBWVj0gICAgICAgIFpa c1xRRjsNCiAgIGVuZA0KICAgdGFza3RpbWU9IGV0aW1lKGNsb2NrLHQwKTsN CmVuZA0KDQoNCmNoZWNrdmFsPVZWKE1FUygxLDopLDEpLVZWKE1FUygyLDop LDEpOw0KZ29sZHZhbHVlPSBbIC0wLjkxODI0MzsgIDAuNTU1Nzc5OyAgMC4x NDg0NTI7ICAwLjA3ODgyNjsNCiAgICAgICAgICAgICAgMC4wNTIxMzI7ICAw LjA0MDExNjsgIDAuMDM0MTQxOyAgMC4wMzE4NzI7DQogICAgICAgICAgICAg IDAuMDMxMjc5OyAgMC4wMzM1OTQ7ICAwLjAzOTQyOTsgIDAuMDUyMTg5Ow0K ICAgICAgICAgICAgICAwLjA3ODM3NzsgIDAuMTQ5NDI2OyAgMC41OTYxOTU7 IC0xLjAwMzU2NV07DQogICAgICAgICAgICAgIA0KcmRpZj0gc3FydChtZWFu KChjaGVja3ZhbC1nb2xkdmFsdWUpLl4yKSkgLyBzcXJ0KG1lYW4oY2hlY2t2 YWwuXjIpKTsNCmlmIHJkaWYgPiAxZS01DQogICBmcHJpbnRmKCdTcGFyc2Ug RkVNIHNvbHV0aW9uIGZhaWxzJyk7DQplbmQNCmZwcmludGYoJ1RpbWUgcGVy IGl0ZXJhdGlvbj0gJWYgc1xuJywgdGFza3RpbWUvIFRFU1RUSU1FUyk7DQpm cHJpbnRmKCdZb3VyIG1hY2hpbmUgaXMgJWYgZmFzdGVyIHRoYW4gbWluZSFc bicsIDQuNDUqVEVTVFRJTUVTL3Rhc2t0aW1lICk7DQoNCiUNCiUgJExvZzog ZmVtX3Rlc3QubSx2ICQNCiUgUmV2aXNpb24gMS4xICAyMDAwLzA0LzAxIDAy OjQyOjM4ICBhbmR5DQolIEluaXRpYWwgcmV2aXNpb24NCiUNCiUgUmV2aXNp b24gMS4xICAxOTk5LzEyLzAyIDE2OjUyOjQxICBhYWRsZXINCiUgSW5pdGlh bCByZXZpc2lvbg0KJQ0KJSBSZXZpc2lvbiAxLjIgIDE5OTgvMTEvMTcgMDM6 NDU6MjggIGFuZHkNCiUgaGFuZGxlcyAzRCBGRU0gcHJvcGVybHkNCiUNCiUg UmV2aXNpb24gMS4xICAxOTk4LzExLzE2IDA1OjAxOjA5ICBhbmR5DQolIElu aXRpYWwgcmV2aXNpb24NCiUNCiUNCg== --8323328-1524785817-957226789=:723 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-1524785817-957226789=:723-- ----------------------------------------------------------------------- Octave is freely available under the terms of the GNU GPL. Octave's home on the web: http://www.che.wisc.edu/octave/octave.html How to fund new projects: http://www.che.wisc.edu/octave/funding.html Subscription information: http://www.che.wisc.edu/octave/archive.html -----------------------------------------------------------------------