From mboxrd@z Thu Jan 1 00:00:00 1970 From: Takashi Sakamoto Subject: Re: [PATCH 09/13] bebob: add support for M-Audio Firewire series Date: Sun, 24 Nov 2013 15:34:23 +0900 Message-ID: <52919DEF.5080909@sakamocchi.jp> References: <1385186965-8303-1-git-send-email-o-takashi@sakamocchi.jp> <1385186965-8303-10-git-send-email-o-takashi@sakamocchi.jp> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from smtp302.phy.lolipop.jp (smtp302.phy.lolipop.jp [210.157.22.85]) by alsa0.perex.cz (Postfix) with ESMTP id 9E9F12615C0 for ; Sun, 24 Nov 2013 07:34:33 +0100 (CET) In-Reply-To: <1385186965-8303-10-git-send-email-o-takashi@sakamocchi.jp> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org To: clemens@ladisch.de, tiwai@suse.de, perex@perex.cz Cc: alsa-devel@alsa-project.org, linux1394-devel@lists.sourceforge.net, ffado-devel@lists.sourceforge.net List-Id: alsa-devel@alsa-project.org SGksCgpJIGZvdW5kIHRoaXMgY29tbWl0IGluY2x1ZGVzIGEgYnVnLi4uCgpUaGUgJ3NuZF9iZWJv Yl9wcm9iZScgZG8gc25kX2JlYm9iX3N0cmVhbV9kaXNjb3ZlcigpIHR3byB0aW1lcy4gVGhpcyBi dWcgCmRvdWJsZXMgdGhlIG51bWJlciBvZiBjaGFubmVscyBmb3IgZWFjaCBBTURUUCBzdHJlYW1z LiBQbGVhc2UgcmVtb3ZlIAp0aGVzZSBsaW5lcyBiZWxvdyBhZnRlciB5b3UgYXBwbHkgcGF0Y2gg OS4KCkBAIC0yMDMsMTAgKzI0OSw2IEBAIHNuZF9iZWJvYl9wcm9iZShzdHJ1Y3QgZndfdW5pdCAq dW5pdCwKCiAgICAgICAgIHNuZF9iZWJvYl9wcm9jX2luaXQoYmVib2IpOwoKLSAgICAgICBlcnIg PSBzbmRfYmVib2Jfc3RyZWFtX2Rpc2NvdmVyKGJlYm9iKTsKLSAgICAgICBpZiAoZXJyIDwgMCkK LSAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0KICAgICAgICAgZXJyID0gc25kX2JlYm9iX3N0 cmVhbV9pbml0X2R1cGxleChiZWJvYik7CiAgICAgICAgIGlmIChlcnIgPCAwKQogICAgICAgICAg ICAgICAgIGdvdG8gZXJyb3I7CgoKUmVnYXJkcwoKVGFrYXNoaSBTYWthbW90bwoKKDIwMTPlubQx MeaciDIz5pelIDE1OjA5KSwgVGFrYXNoaSBTYWthbW90byB3cm90ZToKPiBUaGlzIGNvbW1pdCBh bGxvd3MgdGhpcyBkcml2ZXIgdG8gc3VwcG9ydCBhbGwgb2YgbW9kZWxzIHdoaWNoIE0tQXVkaW8g cHJvZHVjZXMKPiB3aXRoIEJlQm9CIGNoaXBzZXQuIFRoZXkgYXJlOgo+ICAgLSBGaXJld2lyZSBT b2xvCj4gICAtIEZpcmV3aXJlIEF1ZGlvUGhpbGUKPiAgIC0gRmlyZXdpcmUgNDEwCj4gICAtIEZp cmV3aXJlIDE4MTQKPiAgIC0gT3pvbmljCj4gICAtIE5SVjEwCj4gICAtIFByb2plY3RNaXggSS9P Cj4gICAtIEZpcmV3aXJlTGlnaHRCcmlkZ2UKPgo+IFRoaXMgY29tbWl0IGFkZHMgTS1BdWRpbyBz cGVjaWZpYyBvcGVyYXRpb25zLCBxdWlya3MgYW5kIGZ1bmN0aW9uYWxpdGllcy4gVGhleQo+IGFy ZSBjYXRlZ29yaXplZCB0byB0aHJlZSBwYXJ0cy4KPgo+IDEuIHNlbmQgY3VlIHRvIGxvYWQgZmly bXdhcmUKPiBUaGlzIGlzIGZvciAnRmlyZXdpcmUgQXVkaW9waGlsZScsICdGaXJld2lyZTQxMCcs ICdGaXJld2lyZTE4MTQnIGFuZAo+ICdQcm9qZWN0TWl4IEkvTycuIFdpdGggZmlybXdhcmUgdmVy c2lvbiA1MDU4IG9yIGxhdGVyLCB0aGV5IHdhaXQgdG8gcmVjZWl2ZSBhCj4gY3VlIHRvIGxvYWQg ZmlybXdhcmUganVzdCBhZnRlciBwb3dlcmluZyBvbi4gV2l0aCBsZXNzIGZpcm13YXJlIHZlcnNp b24sIHRoZXkKPiB3YWl0IHRvIHVwbG9hZCBmaXJtd2FyZSBiaW5hcnkgYmxvYiBzbyB0aGlzIGRy aXZlciBjYW4ndCBoYW5kbGUgdGhpcyB2ZXJzaW9ucy4KPiBUaGlzIGZ1bmN0aW9uYWxpdHkgY2Fu IGJlIGltcGxlbWVudGVkIGluIHVzZXIgbGFuZCBidXQgY3VycmVudGx5IGluIGtlcm5lbCBsYW5k Cj4gZm9yIG15IGNvbnZpbmllbmNlLgo+Cj4gMi4gc3dpdGNoaW5nIHNvdXJjZSBvZiBjbG9jawo+ IFRoaXMgaWYgZm9yICdGaXJld2lyZSBTb2xvJywgJ0ZpcmV3aXJlIEF1ZGlvcGhpbGUnLCAnRmly ZXdpcmU0MTAnLAo+ICdGaXJld2lyZTE4MTQnIGFuZCdQcm9qZWN0TWl4IEkvTycuIFRoZXkgY2Fu IHN3aXRjaCBzb3VyY2Ugb2YgY2xvY2sgd2l0aCBzaWduYWwKPiBzb3VyY2UgY29tbWFuZCBidXQg dGhlIHZhbHVlIG9mIHBhcmFtZXRlcnMgaXMgYSBiaXQgZGlmZmVyZW50Lgo+Cj4gMy4gaGFuZGxp bmcgbWV0ZXJpbmcgaW5mb3JtYXRpb24KPiBUaGlzIGlzIGFsbCBvZiBtb2RlbHMsIG1haW5seSBm b3IgbXkgZGVidWdnaW5nLiBUaGlzIGluZm9ybWF0aW9uIGluY2x1ZGVzCj4gaW5mb3JtYXRpb24g Zm9yIGNsb2NrIHN5bmNocm9uaXphdGlvbi4KPgo+IEZpcmV3aXJlMTgxNCBhbmQgUHJvamVjdE1p eCBJL08gaGFzIGhlYXZpbHkgY3VzdG9taXplZCBCZUJvQiBjaGlwc2V0LiBUaGUgdXN1YWwKPiBv cGVyYXRpb24gdG8gaGFuZGxlIEJlQm9CIGNoaXBzZXQgY2Fubm90IGJlIGFwcGxpZWQgZm9yIHRo ZW0uIEZvciB0aGlzIHJlYXNvbiwKPiB0aGlzIGNvbW1pdCBhZGQgc29tZSBtb2RlbCBzcGVjaWZp YyBtZW1iZXJzIGluICdzdHJ1Y3Qgc25kX2JlYm9iJyBhbmQgbW9kZWwKPiBzcGVjaWZpYyBmdW5j dGlvbnMuCj4KPiBTaWduZWQtb2ZmLWJ5OiBUYWthc2hpIFNha2Ftb3RvIDxvLXRha2FzaGlAc2Fr YW1vY2NoaS5qcD4KPiAtLS0KPiAgIHNvdW5kL2ZpcmV3aXJlL0tjb25maWcgICAgICAgICAgICAg ICB8ICAgMiArCj4gICBzb3VuZC9maXJld2lyZS9iZWJvYi9NYWtlZmlsZSAgICAgICAgfCAgIDEg Kwo+ICAgc291bmQvZmlyZXdpcmUvYmVib2IvYmVib2IuYyAgICAgICAgIHwgIDc1ICsrKwo+ICAg c291bmQvZmlyZXdpcmUvYmVib2IvYmVib2IuaCAgICAgICAgIHwgIDIxICsKPiAgIHNvdW5kL2Zp cmV3aXJlL2JlYm9iL2JlYm9iX2NvbnRyb2wuYyB8ICAgMyArCj4gICBzb3VuZC9maXJld2lyZS9i ZWJvYi9iZWJvYl9tYXVkaW8uYyAgfCA5MTAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKPiAgIHNvdW5kL2ZpcmV3aXJlL2JlYm9iL2JlYm9iX3N0cmVhbS5jICB8ICAyMiArLQo+ ICAgNyBmaWxlcyBjaGFuZ2VkLCAxMDMxIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCj4g ICBjcmVhdGUgbW9kZSAxMDA2NDQgc291bmQvZmlyZXdpcmUvYmVib2IvYmVib2JfbWF1ZGlvLmMK Pgo+IGRpZmYgLS1naXQgYS9zb3VuZC9maXJld2lyZS9LY29uZmlnIGIvc291bmQvZmlyZXdpcmUv S2NvbmZpZwo+IGluZGV4IGM0NjU3OGUuLjQyN2RlZjcgMTAwNjQ0Cj4gLS0tIGEvc291bmQvZmly ZXdpcmUvS2NvbmZpZwo+ICsrKyBiL3NvdW5kL2ZpcmV3aXJlL0tjb25maWcKPiBAQCAtODAsNiAr ODAsOCBAQCBjb25maWcgU05EX0JFQk9CCj4gICAJICAqIENNRSBNYXRyaXhLRlcKPiAgIAkgICog UGhvbmljIEhCMjRVCj4gICAJICAqIEJyaWRnZUNvIFJEQXVkaW8xL0F1ZGlvNQo+ICsJICAqIE0t QXVkaW8gRmlyZXdpcmU0MTAvQXVkaW9QaGlsZS9Tb2xvL096b25pYy9OUlYxMAo+ICsJICAqIE0t QXVkaW8gRmlyZXdpcmUxODE0L1Byb2plY3RNaXggSU8vUHJvZmlyZUxpZ2h0QnJpZGdlCj4KPiAg ICAgICAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBo ZXJlOiB0aGUgbW9kdWxlCj4gICAgICAgICAgICAgd2lsbCBiZSBjYWxsZWQgc25kLWZpcmV3b3Jr cy4KPiBkaWZmIC0tZ2l0IGEvc291bmQvZmlyZXdpcmUvYmVib2IvTWFrZWZpbGUgYi9zb3VuZC9m aXJld2lyZS9iZWJvYi9NYWtlZmlsZQo+IGluZGV4IDgxZTE0ZmEuLjJlODdkMDIgMTAwNjQ0Cj4g LS0tIGEvc291bmQvZmlyZXdpcmUvYmVib2IvTWFrZWZpbGUKPiArKysgYi9zb3VuZC9maXJld2ly ZS9iZWJvYi9NYWtlZmlsZQo+IEBAIC0xLDQgKzEsNSBAQAo+ICAgc25kLWJlYm9iLW9ianMgOj0g YmVib2JfY29tbWFuZC5vIGJlYm9iX3N0cmVhbS5vIGJlYm9iX3Byb2MubyBiZWJvYl9jb250cm9s Lm8gXAo+ICAgCQkgIGJlYm9iX21pZGkubyBiZWJvYl9wY20ubyBiZWJvYl9od2RlcC5vIFwKPiAr CQkgIGJlYm9iX21hdWRpby5vIFwKPiAgIAkJICBiZWJvYi5vCj4gICBvYmotbSArPSBzbmQtYmVi b2Iubwo+IGRpZmYgLS1naXQgYS9zb3VuZC9maXJld2lyZS9iZWJvYi9iZWJvYi5jIGIvc291bmQv ZmlyZXdpcmUvYmVib2IvYmVib2IuYwo+IGluZGV4IDdjM2YxYjMuLjU3NmQ4MDEgMTAwNjQ0Cj4g LS0tIGEvc291bmQvZmlyZXdpcmUvYmVib2IvYmVib2IuYwo+ICsrKyBiL3NvdW5kL2ZpcmV3aXJl L2JlYm9iL2JlYm9iLmMKPiBAQCAtNTAsNiArNTAsMTIgQEAgc3RhdGljIHVuc2lnbmVkIGludCBk ZXZpY2VzX3VzZWQ7Cj4gICAjZGVmaW5lIFZFTl9BQ09VU1RJQwkweDAwMDAwMDAyCj4gICAjZGVm aW5lIFZFTl9DTUUJCTB4MDAwMDAwMGEKPiAgICNkZWZpbmUgVkVOX1BIT05JQwkweDAwMDAxNDk2 Cj4gKyNkZWZpbmUgVkVOX01BVURJTzEJMHgwMDAwMGQ2Ywo+ICsjZGVmaW5lIFZFTl9NQVVESU8y CTB4MDAwMDA3ZjUKPiArCj4gKyNkZWZpbmUgTU9ERUxfTUFVRElPX0FVRElPUEhJTEVfQk9USAkw eDAwMDEwMDYwCj4gKyNkZWZpbmUgTU9ERUxfTUFVRElPX0ZXMTgxNAkJMHgwMDAxMDA3MQo+ICsj ZGVmaW5lIE1PREVMX01BVURJT19QUk9KRUNUTUlYCQkweDAwMDEwMDkxCj4KPiAgIHN0YXRpYyBp bnQKPiAgIG5hbWVfZGV2aWNlKHN0cnVjdCBzbmRfYmVib2IgKmJlYm9iLCB1bnNpZ25lZCBpbnQg dmVuZG9yX2lkKQo+IEBAIC04Miw2ICs4OCw4IEBAIG5hbWVfZGV2aWNlKHN0cnVjdCBzbmRfYmVi b2IgKmJlYm9iLCB1bnNpZ25lZCBpbnQgdmVuZG9yX2lkKQo+ICAgCQlzdHJjcHkodmVuZG9yLCAi Q01FIik7Cj4gICAJZWxzZSBpZiAodmVuZG9yX2lkID09IFZFTl9QSE9OSUMpCj4gICAJCXN0cmNw eSh2ZW5kb3IsICJQaG9uaWMiKTsKPiArCWVsc2UgaWYgKCh2ZW5kb3JfaWQgPT0gVkVOX01BVURJ TzEpIHx8ICh2ZW5kb3JfaWQgPT0gVkVOX01BVURJTzIpKQo+ICsJCXN0cmNweSh2ZW5kb3IsICJN LUF1ZGlvIik7Cj4KPiAgIAkvKiBnZXQgbW9kZWwgbmFtZSAqLwo+ICAgCWVyciA9IGZ3X2Nzcl9z dHJpbmcoYmVib2ItPnVuaXQtPmRpcmVjdG9yeSwgQ1NSX01PREVMLAo+IEBAIC0xMzUsNiArMTQz LDIwIEBAIHNuZF9iZWJvYl9jYXJkX2ZyZWUoc3RydWN0IHNuZF9jYXJkICpjYXJkKQo+ICAgCXJl dHVybjsKPiAgIH0KPgo+ICtzdGF0aWMgYm9vbAo+ICtjaGVja19hdWRpb3BoaWxlX2Jvb3RlZChz dHJ1Y3QgZndfdW5pdCAqdW5pdCkKPiArewo+ICsJY2hhciBuYW1lWzI0XSA9IHswfTsKPiArCj4g KwlpZiAoZndfY3NyX3N0cmluZyh1bml0LT5kaXJlY3RvcnksIENTUl9NT0RFTCwgbmFtZSwgc2l6 ZW9mKG5hbWUpKSA8IDApCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCWlmIChzdHJuY21wKG5h bWUsICJGVyBBdWRpb3BoaWxlIEJvb3Rsb2FkZXIiLCAxNSkgPT0gMCkKPiArCQlyZXR1cm4gZmFs c2U7Cj4gKwllbHNlCj4gKwkJcmV0dXJuIHRydWU7Cj4gK30KPiArCj4gICBzdGF0aWMgaW50Cj4g ICBzbmRfYmVib2JfcHJvYmUoc3RydWN0IGZ3X3VuaXQgKnVuaXQsCj4gICAJCWNvbnN0IHN0cnVj dCBpZWVlMTM5NF9kZXZpY2VfaWQgKmVudHJ5KQo+IEBAIC0xNTksNiArMTgxLDE4IEBAIHNuZF9i ZWJvYl9wcm9iZShzdHJ1Y3QgZndfdW5pdCAqdW5pdCwKPgo+ICAgCXNwZWMgPSAoY29uc3Qgc3Ry dWN0IHNuZF9iZWJvYl9zcGVjICopZW50cnktPmRyaXZlcl9kYXRhOwo+Cj4gKwkvKiBpZiBuZWVk ZWQsIGxvYWQgZmlybXdhcmUgYW5kIGV4aXQgKi8KPiArCWlmICgoc3BlYy0+bG9hZCkgJiYKPiAr CSAgICAoKGVudHJ5LT5tb2RlbF9pZCAhPSBNT0RFTF9NQVVESU9fQVVESU9QSElMRV9CT1RIKSB8 fAo+ICsJICAgICAoIWNoZWNrX2F1ZGlvcGhpbGVfYm9vdGVkKHVuaXQpKSkpIHsKPiArCQlzcGVj LT5sb2FkKHVuaXQsIGVudHJ5KTsKPiArCQlkZXZfaW5mbygmdW5pdC0+ZGV2aWNlLAo+ICsJCQkg ImxvYWRpbmcgZmlybXdhcmUgZm9yIDB4JTA4WDoweCUwOFhcbiIsCj4gKwkJCSBlbnRyeS0+dmVu ZG9yX2lkLCBlbnRyeS0+bW9kZWxfaWQpOwo+ICsJCWVyciA9IDA7Cj4gKwkJZ290byBlbmQ7Cj4g Kwl9Cj4gKwo+ICAgCS8qIGNyZWF0ZSBjYXJkICovCj4gICAJZXJyID0gc25kX2NhcmRfY3JlYXRl KGluZGV4W2NhcmRfaW5kZXhdLCBpZFtjYXJkX2luZGV4XSwKPiAgIAkJCVRISVNfTU9EVUxFLCBz aXplb2Yoc3RydWN0IHNuZF9iZWJvYiksICZjYXJkKTsKPiBAQCAtMTc3LDYgKzIxMSwxNiBAQCBz bmRfYmVib2JfcHJvYmUoc3RydWN0IGZ3X3VuaXQgKnVuaXQsCj4gICAJc3Bpbl9sb2NrX2luaXQo JmJlYm9iLT5sb2NrKTsKPiAgIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZiZWJvYi0+aHdkZXBfd2Fp dCk7Cj4KPiArCS8qIGRpc2NvdmVyICovCj4gKwlpZiAoZW50cnktPm1vZGVsX2lkID09IE1PREVM X01BVURJT19GVzE4MTQpCj4gKwkJZXJyID0gc25kX2JlYm9iX21hdWRpb19zcGVjaWFsX2Rpc2Nv dmVyKGJlYm9iLCB0cnVlKTsKPiArCWVsc2UgaWYgKGVudHJ5LT5tb2RlbF9pZCA9PSBNT0RFTF9N QVVESU9fUFJPSkVDVE1JWCkKPiArCQllcnIgPSBzbmRfYmVib2JfbWF1ZGlvX3NwZWNpYWxfZGlz Y292ZXIoYmVib2IsIGZhbHNlKTsKPiArCWVsc2UKPiArCQllcnIgPSBzbmRfYmVib2Jfc3RyZWFt X2Rpc2NvdmVyKGJlYm9iKTsKPiArCWlmIChlcnIgPCAwKQo+ICsJCWdvdG8gZXJyb3I7Cj4gKwo+ ICAgCS8qIG5hbWUgZGV2aWNlIHdpdGggY29tbXVuaWNhdGlvbiAqLwo+ICAgCWVyciA9IG5hbWVf ZGV2aWNlKGJlYm9iLCBlbnRyeS0+dmVuZG9yX2lkKTsKPiAgIAlpZiAoZXJyIDwgMCkKPiBAQCAt MjM3LDYgKzI4MSwxMSBAQCBzdGF0aWMgdm9pZAo+ICAgc25kX2JlYm9iX3VwZGF0ZShzdHJ1Y3Qg ZndfdW5pdCAqdW5pdCkKPiAgIHsKPiAgIAlzdHJ1Y3Qgc25kX2JlYm9iICpiZWJvYiA9IGRldl9n ZXRfZHJ2ZGF0YSgmdW5pdC0+ZGV2aWNlKTsKPiArCj4gKwkvKiB0aGlzIGlzIGZvciBmaXJtd2Fy ZSBib290bG9hZGVyICovCj4gKwlpZiAoYmVib2IgPT0gTlVMTCkKPiArCQlyZXR1cm47Cj4gKwo+ ICAgCWZjcF9idXNfcmVzZXQoYmVib2ItPnVuaXQpOwo+ICAgCXNuZF9iZWJvYl9zdHJlYW1fdXBk YXRlX2R1cGxleChiZWJvYik7Cj4gICB9Cj4gQEAgLTI0NSw2ICsyOTQsMTEgQEAgc25kX2JlYm9i X3VwZGF0ZShzdHJ1Y3QgZndfdW5pdCAqdW5pdCkKPiAgIHN0YXRpYyB2b2lkIHNuZF9iZWJvYl9y ZW1vdmUoc3RydWN0IGZ3X3VuaXQgKnVuaXQpCj4gICB7Cj4gICAJc3RydWN0IHNuZF9iZWJvYiAq YmVib2IgPSBkZXZfZ2V0X2RydmRhdGEoJnVuaXQtPmRldmljZSk7Cj4gKwo+ICsJLyogdGhpcyBp cyBmb3IgZmlybXdhcmUgYm9vdGxvYWRlciAqLwo+ICsJaWYgKGJlYm9iID09IE5VTEwpCj4gKwkJ cmV0dXJuOwo+ICsKPiAgIAlzbmRfYmVib2Jfc3RyZWFtX2Rlc3Ryb3lfZHVwbGV4KGJlYm9iKTsK PiAgIAlzbmRfY2FyZF9kaXNjb25uZWN0KGJlYm9iLT5jYXJkKTsKPiAgIAlzbmRfY2FyZF9mcmVl X3doZW5fY2xvc2VkKGJlYm9iLT5jYXJkKTsKPiBAQCAtMjg3LDYgKzM0MSwyNyBAQCBzdGF0aWMg Y29uc3Qgc3RydWN0IGllZWUxMzk0X2RldmljZV9pZCBzbmRfYmVib2JfaWRfdGFibGVbXSA9IHsK PiAgIAlTTkRfQkVCT0JfREVWX0VOVFJZKFZFTl9DTUUsIDB4MDAwMzAwMDAsIHNwZWNfbm9ybWFs KSwKPiAgIAkvKiBQaG9uaWMsIEhCMjRVICovCj4gICAJU05EX0JFQk9CX0RFVl9FTlRSWShWRU5f UEhPTklDLCAweDAwMDAwMDAwLCBzcGVjX25vcm1hbCksCj4gKwkvKiBNLUF1ZGlvLCBPem9uaWMg Ki8KPiArCVNORF9CRUJPQl9ERVZfRU5UUlkoVkVOX01BVURJTzEsIDB4MDAwMDAwMGEsIG1hdWRp b19vem9uaWNfc3BlYyksCj4gKwkvKiBNLUF1ZGlvLCBGaXJld2lyZSA0MTAuICAqLwo+ICsJU05E X0JFQk9CX0RFVl9FTlRSWShWRU5fTUFVRElPMiwgMHgwMDAxMDA1OCwgbWF1ZGlvX2Jvb3Rsb2Fk ZXJfc3BlYyksCj4gKwlTTkRfQkVCT0JfREVWX0VOVFJZKFZFTl9NQVVESU8yLCAweDAwMDEwMDQ2 LCBtYXVkaW9fZnc0MTBfc3BlYyksCj4gKwkvKiBNLUF1ZGlvLCBGaXJld2lyZSBBdWRpb3BoaWxl LCBib3RoIG9mIGJvb3Rsb2FkZXIgYW5kIGZpcm13YXJlICovCj4gKwlTTkRfQkVCT0JfREVWX0VO VFJZKFZFTl9NQVVESU8xLCBNT0RFTF9NQVVESU9fQVVESU9QSElMRV9CT1RILAo+ICsJCQkJCQlt YXVkaW9fYXVkaW9waGlsZV9zcGVjKSwKPiArCS8qIE0tQXVkaW8sIEZpcmV3aXJlIFNvbG8gKi8K PiArCVNORF9CRUJPQl9ERVZfRU5UUlkoVkVOX01BVURJTzEsIDB4MDAwMTAwNjIsIG1hdWRpb19z b2xvX3NwZWMpLAo+ICsJLyogTS1BdWRpbyBOUlYxMCAqLwo+ICsJU05EX0JFQk9CX0RFVl9FTlRS WShWRU5fTUFVRElPMSwgMHgwMDAxMDA4MSwgbWF1ZGlvX25ydjEwX3NwZWMpLAo+ICsJLyogRmly ZXdpcmUgMTgxNCAqLwo+ICsJU05EX0JFQk9CX0RFVl9FTlRSWShWRU5fTUFVRElPMSwgMHgwMDAx MDA3MCwgbWF1ZGlvX2Jvb3Rsb2FkZXJfc3BlYyksCj4gKwlTTkRfQkVCT0JfREVWX0VOVFJZKFZF Tl9NQVVESU8xLCBNT0RFTF9NQVVESU9fRlcxODE0LAo+ICsJCQkJCQltYXVkaW9fc3BlY2lhbF9z cGVjKSwKPiArCS8qIE0tQXVkaW8gUHJvamVjdE1peCAqLwo+ICsJU05EX0JFQk9CX0RFVl9FTlRS WShWRU5fTUFVRElPMSwgTU9ERUxfTUFVRElPX1BST0pFQ1RNSVgsCj4gKwkJCQkJCW1hdWRpb19z cGVjaWFsX3NwZWMpLAo+ICsJLyogTS1BdWRpbywgUHJvRmlyZUxpZ2h0YnJpZGdlICovCj4gKwlT TkRfQkVCT0JfREVWX0VOVFJZKFZFTl9NQVVESU8xLCAweDAwMDEwMGExLCBzcGVjX25vcm1hbCks Cj4gICAJe30KPiAgIH07Cj4gICBNT0RVTEVfREVWSUNFX1RBQkxFKGllZWUxMzk0LCBzbmRfYmVi b2JfaWRfdGFibGUpOwo+IGRpZmYgLS1naXQgYS9zb3VuZC9maXJld2lyZS9iZWJvYi9iZWJvYi5o IGIvc291bmQvZmlyZXdpcmUvYmVib2IvYmVib2IuaAo+IGluZGV4IGIzNWZjNTIuLmZiOWQ5OWQg MTAwNjQ0Cj4gLS0tIGEvc291bmQvZmlyZXdpcmUvYmVib2IvYmVib2IuaAo+ICsrKyBiL3NvdW5k L2ZpcmV3aXJlL2JlYm9iL2JlYm9iLmgKPiBAQCAtMTEzLDYgKzExMywxNSBAQCBzdHJ1Y3Qgc25k X2JlYm9iIHsKPiAgICAgICAgICAgaW50IGRldl9sb2NrX2NvdW50Owo+ICAgICAgICAgICBib29s IGRldl9sb2NrX2NoYW5nZWQ7Cj4gICAgICAgICAgIHdhaXRfcXVldWVfaGVhZF90IGh3ZGVwX3dh aXQ7Cj4gKwo+ICsJLyogZm9yIE0tQXVkaW8gc3BlY2lhbCBkZXZpY2VzICovCj4gKwlib29sIG1h dWRpb19zcGVjaWFsX3F1aXJrOwo+ICsJYm9vbCBtYXVkaW9faXMxODE0Owo+ICsJdW5zaWduZWQg aW50IGNsa19zcmM7Cj4gKwl1bnNpZ25lZCBpbnQgZGlnX2luX2lmYWNlOwo+ICsJdW5zaWduZWQg aW50IGRpZ19pbl9mbXQ7Cj4gKwl1bnNpZ25lZCBpbnQgZGlnX291dF9mbXQ7Cj4gKwl1bnNpZ25l ZCBpbnQgY2xrX2xvY2s7Cj4gICB9Owo+Cj4gICBzdGF0aWMgaW5saW5lIGludAo+IEBAIC0yMTQs NiArMjIzLDE4IEBAIGludCBzbmRfYmVib2JfY3JlYXRlX3BjbV9kZXZpY2VzKHN0cnVjdCBzbmRf YmVib2IgKmJlYm9iKTsKPgo+ICAgaW50IHNuZF9iZWJvYl9jcmVhdGVfaHdkZXBfZGV2aWNlKHN0 cnVjdCBzbmRfYmVib2IgKmJlYm9iKTsKPgo+ICsvKiBkZXZpY2Ugc3BlY2lmaWMgb3BlcmF0aW9u cyAqLwo+ICtpbnQgc25kX2JlYm9iX21hdWRpb19zcGVjaWFsX2Rpc2NvdmVyKHN0cnVjdCBzbmRf YmVib2IgKmJlYm9iLCBib29sIGlzMTgxNCk7Cj4gK2ludCBzbmRfYmVib2JfbWF1ZGlvX3NwZWNp YWxfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfYmVib2IgKmJlYm9iKTsKPiArCj4gK2V4dGVybiBz dHJ1Y3Qgc25kX2JlYm9iX3NwZWMgbWF1ZGlvX2Jvb3Rsb2FkZXJfc3BlYzsKPiArZXh0ZXJuIHN0 cnVjdCBzbmRfYmVib2Jfc3BlYyBtYXVkaW9fc3BlY2lhbF9zcGVjOwo+ICtleHRlcm4gc3RydWN0 IHNuZF9iZWJvYl9zcGVjIG1hdWRpb19ucnYxMF9zcGVjOwo+ICtleHRlcm4gc3RydWN0IHNuZF9i ZWJvYl9zcGVjIG1hdWRpb19mdzQxMF9zcGVjOwo+ICtleHRlcm4gc3RydWN0IHNuZF9iZWJvYl9z cGVjIG1hdWRpb19hdWRpb3BoaWxlX3NwZWM7Cj4gK2V4dGVybiBzdHJ1Y3Qgc25kX2JlYm9iX3Nw ZWMgbWF1ZGlvX3NvbG9fc3BlYzsKPiArZXh0ZXJuIHN0cnVjdCBzbmRfYmVib2Jfc3BlYyBtYXVk aW9fb3pvbmljX3NwZWM7Cj4gKwo+ICAgI2RlZmluZSBTTkRfQkVCT0JfREVWX0VOVFJZKHZlbmRv ciwgbW9kZWwsIHByaXZhdGVfZGF0YSkgXAo+ICAgeyBcCj4gICAJLm1hdGNoX2ZsYWdzCT0gSUVF RTEzOTRfTUFUQ0hfVkVORE9SX0lEIHwgXAo+IGRpZmYgLS1naXQgYS9zb3VuZC9maXJld2lyZS9i ZWJvYi9iZWJvYl9jb250cm9sLmMgYi9zb3VuZC9maXJld2lyZS9iZWJvYi9iZWJvYl9jb250cm9s LmMKPiBpbmRleCAzYjMxMWMzLi44N2M1MGEzNyAxMDA2NDQKPiAtLS0gYS9zb3VuZC9maXJld2ly ZS9iZWJvYi9iZWJvYl9jb250cm9sLmMKPiArKysgYi9zb3VuZC9maXJld2lyZS9iZWJvYi9iZWJv Yl9jb250cm9sLmMKPiBAQCAtMzIzLDYgKzMyMyw5IEBAIGludCBzbmRfYmVib2JfY3JlYXRlX2Nv bnRyb2xfZGV2aWNlcyhzdHJ1Y3Qgc25kX2JlYm9iICpiZWJvYikKPiAgIAkJaWYgKGVyciA8IDAp Cj4gICAJCQlnb3RvIGVuZDsKPiAgIAl9Cj4gKwo+ICsJaWYgKGJlYm9iLT5tYXVkaW9fc3BlY2lh bF9xdWlyaykKPiArCQllcnIgPSBzbmRfYmVib2JfbWF1ZGlvX3NwZWNpYWxfYWRkX2NvbnRyb2xz KGJlYm9iKTsKPiAgIGVuZDoKPiAgIAlyZXR1cm4gZXJyOwo+ICAgfQo+IGRpZmYgLS1naXQgYS9z b3VuZC9maXJld2lyZS9iZWJvYi9iZWJvYl9tYXVkaW8uYyBiL3NvdW5kL2ZpcmV3aXJlL2JlYm9i L2JlYm9iX21hdWRpby5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi44 YWZjODM1Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL3NvdW5kL2ZpcmV3aXJlL2JlYm9iL2JlYm9i X21hdWRpby5jCj4gQEAgLTAsMCArMSw5MTAgQEAKPiArLyoKPiArICogYmVib2JfbWF1ZGlvLmMg LSBhIHBhcnQgb2YgZHJpdmVyIGZvciBCZUJvQiBiYXNlZCBkZXZpY2VzCj4gKyAqCj4gKyAqIENv cHlyaWdodCAoYykgMjAxMyBUYWthc2hpIFNha2Ftb3RvCj4gKyAqCj4gKyAqIFRoaXMgZHJpdmVy IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK PiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSwgdmVyc2lvbiAyLgo+ICsgKgo+ICsgKiBUaGlzIGRyaXZlciBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4g KyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gKyAqCj4g KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCj4gKyAqIGFsb25nIHdpdGggdGhpcyBkcml2ZXI7IGlmIG5vdCwgc2VlIDxo dHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KPiArICovCj4gKwo+ICsjaW5jbHVkZSAiLi9i ZWJvYi5oIgo+ICsKPiArLyoKPiArICogTk9URToKPiArICogRm9yIEZpcmV3aXJlIDQxMCBhbmQg RmlyZXdpcmUgQXVkaW9waGlsZSwgdGhpcyBtb2R1bGUgcmVxdWVzdHMgZmlybXdhcmUKPiArICog dmVyc2lvbiA1MDU4IG9yIGxhdGVyLiBXaXRoIGZvcm1lciB2ZXJzaW9uLCBCZUJvQiBjaGlwc2V0 IG5lZWRzIGRvd25sb2FkaW5nCj4gKyAqIGZpcm13YXJlIGFuZCB0aGUgZHJpdmVyIHNob3VsZCBk byB0aGlzLiBUbyBkbyB0aGlzIHdpdGggQUxTQSwgSSBuZWVkIHRvCj4gKyAqIGV4YW1pbmF0ZSB3 aGV0aGVyIGl0J3MgT0sgb3Igbm90IHRvIGluY2x1ZGUgZmlybXdhcmUgYmluYXJ5IGJsb2IgdG8K PiArICogYWxzYS1maXJtd2FyZSBwYWNrYWdlLiBXaXRoIGxhdGVyIHZlcnNpb24sIHRoZSBmaXJt d2FyZSBpcyBpbiBST00gb2YgY2hpcHNldAo+ICsgKiBhbmQgdGhlIGRyaXZlciBqdXN0IHNlbmQg YSBjdWUgdG8gbG9hZCBpdCB3aGVuIHByb2JpbmcgdGhlIGRldmljZS4gVGhpcyBjdWUKPiArICog aXMgc2VudCBqdXN0IG9uY2UuCj4gKyAqCj4gKyAqIEZvciBzdHJlYW1pbmcsIGJvdGggb2Ygb3V0 cHV0IGFuZCBpbnB1dCBzdHJlYW1zIGFyZSBuZWVkZWQgZm9yIEZpcmV3aXJlIDQxMAo+ICsgKiBh bmQgT3pvbmljLiBUaGUgc2luZ2xlIHN0cmVhbSBpcyBPSyBmb3IgdGhlIG90aGVyIGRldmljZXMg ZXZlbiBpZiB0aGUgY2xvY2sKPiArICogc291cmNlIGlzIG5vdCBTWVQtTWF0Y2ggKEkgbm90ZSBu byBkZXZpY2VzIHVzZSBTWVQtTWF0Y2gpLgo+ICsgKgo+ICsgKiBXaXRob3V0IHN0cmVhbWluZywg dGhlIGRldmljZXMgZXhjZXB0IGZvciBGaXJld2lyZSBBdWRpb3BoaWxlIGNhbiBtaXggYW55Cj4g KyAqIGlucHV0IGFuZCBvdXRwdXQuIEZvciB0aGlzIHB1cnBvc2UsIHVzZSBmZmFkby1taXhlci4g QXVkaW9waGlsZSBuZWVkIHRvCj4gKyAqIGFueSBzdHJlYW0gZm9yIHRoaXMgcHVycG9zZS4KPiAr ICoKPiArICogRmlyZXdpcmUgMTgxNCBhbmQgUHJvamVjdE1peCBJL08gdXNlcyBzcGVjaWFsIGZp cm13YXJlLiBJdCB3aWxsIGJlIGZyZWV6ZWQKPiArICogaWYgcmVjZWl2aW5nIGFueSBjb21tYW5k cyB3aGljaCB0aGUgZmlybXdhcmUgY2FuJ3QgdW5kZXJzdGFuZC4gVGhlc2UgZGV2aWNlcwo+ICsg KiB1dGlsaXplIGNvbXBsZXRlbHkgZGlmZmVyZW50IHN5c3RlbSB0byBjb250cm9sLiBJdCBpcyB3 cml0ZSB0cmFuc2FjdGlvbgo+ICsgKiBkaXJlY3RseSBpbnRvIGEgY2VydGFpbiBhZGRyZXNzLiBB bGwgb2YgYWRkcmVzc2VzIGZvciBtaXhlciBmdW5jdGlvbmFsaXR5IGlzCj4gKyAqIGJldHdlZW4g MHhmZmM3MDA3MDAwMDAgdG8gMHhmZmM3MDA3MDAwOWMuCj4gKyAqLwo+ICsKPiArI2RlZmluZSBN QVVESU9fQk9PVExPQURFUl9DVUUxCTB4MDEwMDAwMDAKPiArI2RlZmluZSBNQVVESU9fQk9PVExP QURFUl9DVUUyCTB4MDAwMDExMDEKPiArI2RlZmluZSBNQVVESU9fQk9PVExPQURFUl9DVUUzCTB4 MDAwMDAwMDAKPiArCj4gKyNkZWZpbmUgTUFVRElPX1NQRUNJRklDX0FERFJFU1MJMHhmZmM3MDAw MDAwMDAKPiArCj4gKyNkZWZpbmUgTUVURVJfT0ZGU0VUCQkweDAwNjAwMDAwCj4gKwo+ICsvKiBz b21lIGRldmljZSBoYXMgc3luYyBpbmZvIGFmdGVyIG1ldGVyaW5nIGRhdGEgKi8KPiArI2RlZmlu ZSBNRVRFUl9TSVpFX1NQRUNJQUwJODQJLyogd2l0aCBzeW5jIGluZm8gKi8KPiArI2RlZmluZSBN RVRFUl9TSVpFX0ZXNDEwCTc2CS8qIHdpdGggc3luYyBpbmZvICovCj4gKyNkZWZpbmUgTUVURVJf U0laRV9BVURJT1BISUxFCTYwCS8qIHdpdGggc3luYyBpbmZvICovCj4gKyNkZWZpbmUgTUVURVJf U0laRV9TT0xPCQk1MgkvKiB3aXRoIHN5bmMgaW5mbyAqLwo+ICsjZGVmaW5lIE1FVEVSX1NJWkVf T1pPTklDCTQ4Cj4gKyNkZWZpbmUgTUVURVJfU0laRV9OUlYxMAk4MAo+ICsKPiArLyogbGFiZWxz IGZvciBtZXRlcmluZyAqLwo+ICsjZGVmaW5lIEFOQV9JTgkJIkFuYWxvZyBJbiIKPiArI2RlZmlu ZSBBTkFfT1VUCQkiQW5hbG9nIE91dCIKPiArI2RlZmluZSBESUdfSU4JCSJEaWdpdGFsIEluIgo+ ICsjZGVmaW5lIFNQRElGX0lOCSJTL1BESUYgSW4iCj4gKyNkZWZpbmUgQURBVF9JTgkJIkFEQVQg SW4iCj4gKyNkZWZpbmUgRElHX09VVAkJIkRpZ2l0YWwgT3V0Igo+ICsjZGVmaW5lIFNQRElGX09V VAkiUy9QRElGIE91dCIKPiArI2RlZmluZSBBREFUX09VVAkiQURBVCBPdXQiCj4gKyNkZWZpbmUg U1RSTV9JTgkJIlN0cmVhbSBJbiIKPiArI2RlZmluZSBBVVhfT1VUCQkiQXV4IE91dCIKPiArI2Rl ZmluZSBIUF9PVVQJCSJIUCBPdXQiCj4gKy8qIGZvciBOUlYgKi8KPiArI2RlZmluZSBVTktOT1dO X01FVEVSCSJVbmtub3duIgo+ICsKPiArLyoKPiArICogRlcxODE0L1Byb2plY3RNaXggZG9uJ3Qg dXNlIEFWQyBmb3IgY29udHJvbC4gVGhlIGRyaXZlciBjYW5ub3QgcmVmZXIgdG8KPiArICogY3Vy cmVudCBwYXJhbWV0ZXJzIGJ5IGFzeW5jaHJvbm91cyB0cmFuc2FjdGlvbi4gVGhlIGRyaXZlciBp cyBhbGxvd2VkIHRvCj4gKyAqIHdyaXRlIHRyYW5zYWN0aW9uIHNvIE1VU1QgcmVtZW1iZXIgdGhl IGN1cnJlbnQgdmFsdWVzLgo+ICsgKi8KPiArI2RlZmluZQlNQVVESU9fQ09OVFJPTF9PRkZTRVQJ MHgwMDcwMDAwMAo+ICsKPiArLyogSWYgd2UgbWFrZSBhbnkgdHJhbnNhY3Rpb24gdG8gbG9hZCBm aXJtd2FyZSwgdGhlIG9wZXJhdGlvbiBtYXkgZmFpbGVkLiAqLwo+ICsvKiBUT0RPOiBjaGFuZ2Ug c25kLWZpcmV3aXJlLWxpYiBhbmQgdXNlIGl0ICovCj4gK3N0YXRpYyBpbnQKPiArcnVuX2FfdHJh bnNhY3Rpb24oc3RydWN0IGZ3X3VuaXQgKnVuaXQsIGludCB0Y29kZSwKPiArCQkgIHU2NCBvZmZz ZXQsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCkKPiArewo+ICsJc3RydWN0IGZ3X2Rldmlj ZSAqZGV2aWNlID0gZndfcGFyZW50X2RldmljZSh1bml0KTsKPiArCWludCBnZW5lcmF0aW9uLCBy Y29kZTsKPiArCj4gKwlnZW5lcmF0aW9uID0gZGV2aWNlLT5nZW5lcmF0aW9uOwo+ICsJc21wX3Jt YigpOwkvKiBub2RlIGlkIHZzLiBnZW5lcmF0aW9uKi8KPiArCXJjb2RlID0gZndfcnVuX3RyYW5z YWN0aW9uKGRldmljZS0+Y2FyZCwgdGNvZGUsCj4gKwkJCQkgICBkZXZpY2UtPm5vZGVfaWQsIGdl bmVyYXRpb24sCj4gKwkJCQkgICBkZXZpY2UtPm1heF9zcGVlZCwgb2Zmc2V0LAo+ICsJCQkJICAg YnVmZmVyLCBsZW5ndGgpOwo+ICsJaWYgKHJjb2RlID09IFJDT0RFX0NPTVBMRVRFKQo+ICsJCXJl dHVybiAwOwo+ICsKPiArCWRldl9lcnIoJnVuaXQtPmRldmljZSwgIkZhaWxlZCB0byBzZW5kIGEg cXVldWUgdG8gbG9hZCBmaXJtd2FyZVxuIik7Cj4gKwlyZXR1cm4gLUVJTzsKPiArfQo+ICsKPiAr LyoKPiArICogRm9yIHNvbWUgTS1BdWRpbyBkZXZpY2VzLCB0aGlzIG1vZHVsZSBqdXN0IHNlbmQg Y3VlIHRvIGxvYWQKPiArICogZmlybXdhcmUuIEFmdGVyIGxvYWRpbmcsIHRoZSBkZXZpY2UgZ2Vu ZXJhdGVzIGJ1cyByZXNldCBhbmQKPiArICogbmV3bHkgZGV0ZWN0ZWQuCj4gKyAqLwo+ICtzdGF0 aWMgaW50Cj4gK2Zpcm13YXJlX2xvYWQoc3RydWN0IGZ3X3VuaXQgKnVuaXQsIGNvbnN0IHN0cnVj dCBpZWVlMTM5NF9kZXZpY2VfaWQgKmVudHJ5KQo+ICt7Cj4gKwlfX2JlMzIgY3Vlc1szXTsKPiAr Cj4gKwljdWVzWzBdID0gY3B1X3RvX2JlMzIoTUFVRElPX0JPT1RMT0FERVJfQ1VFMSk7Cj4gKwlj dWVzWzFdID0gY3B1X3RvX2JlMzIoTUFVRElPX0JPT1RMT0FERVJfQ1VFMik7Cj4gKwljdWVzWzJd ID0gY3B1X3RvX2JlMzIoTUFVRElPX0JPT1RMT0FERVJfQ1VFMyk7Cj4gKwo+ICsJcmV0dXJuIHJ1 bl9hX3RyYW5zYWN0aW9uKHVuaXQsIFRDT0RFX1dSSVRFX0JMT0NLX1JFUVVFU1QsCj4gKwkJCQkg QkVCT0JfQUREUl9SRUdfUkVRLCBjdWVzLCBzaXplb2YoY3VlcykpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW5saW5lIGludAo+ICtnZXRfbWV0ZXIoc3RydWN0IHNuZF9iZWJvYiAqYmVib2IsIHZvaWQg KmJ1ZiwgdW5zaWduZWQgaW50IHNpemUpCj4gK3sKPiArCXJldHVybiBzbmRfZndfdHJhbnNhY3Rp b24oYmVib2ItPnVuaXQsIFRDT0RFX1JFQURfQkxPQ0tfUkVRVUVTVCwKPiArCQkJCSAgTUFVRElP X1NQRUNJRklDX0FERFJFU1MgKyBNRVRFUl9PRkZTRVQsCj4gKwkJCQkgIGJ1Ziwgc2l6ZSwgMCk7 Cj4gK30KPiArCj4gKy8qCj4gKyAqIEJlQm9CIGRvbid0IHRlbGwgZHJpdmVycyB0byBkZXRlY3Qg ZGlnaXRhbCBpbnB1dCwganVzdCBzaG93IGNsb2NrIHN5bmMgb3Igbm90Lgo+ICsgKi8KPiArc3Rh dGljIGludAo+ICtjaGVja19jbGtfc3luYyhzdHJ1Y3Qgc25kX2JlYm9iICpiZWJvYiwgdW5zaWdu ZWQgaW50IHNpemUsIGJvb2wgKnN5bmMpCj4gK3sKPiArCWludCBlcnI7Cj4gKwl1OCAqYnVmOwo+ ICsKPiArCWJ1ZiA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoYnVmID09IE5V TEwpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJZXJyID0gZ2V0X21ldGVyKGJlYm9iLCBi dWYsIHNpemUpOwo+ICsJaWYgKGVyciA8IDApCj4gKwkJZ290byBlbmQ7Cj4gKwo+ICsJLyogaWYg c3luY2VkLCB0aGlzIHZhbHVlIGlzIHRoZSBzYW1lIG9mIFNGQyBvZiBGREYgaW4gQ0lQIGhlYWRl ciAqLwo+ICsJKnN5bmMgPSAoYnVmW3NpemUgLSAyXSAhPSAweGZmKTsKPiArCWVyciA9IDA7Cj4g K2VuZDoKPiArCWtmcmVlKGJ1Zik7Cj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICsvKgo+ICsg KiBkaWdfZm10OiAweDAwOlMvUERJRiwgMHgwMTpBREFUCj4gKyAqIGNsa19sb2NrOiAweDAwOnVu bG9jaywgMHgwMTpsb2NrCj4gKyAqLwo+ICtzdGF0aWMgaW50Cj4gK3NwZWNpYWxfY2xrX3NldF9w YXJhbXMoc3RydWN0IHNuZF9iZWJvYiAqYmVib2IsIHVuc2lnbmVkIGludCBjbGtfc3JjLAo+ICsJ CSAgICAgICB1bnNpZ25lZCBpbnQgZGlnX2luX2ZtdCwgdW5zaWduZWQgaW50IGRpZ19vdXRfZm10 LAo+ICsJCSAgICAgICB1bnNpZ25lZCBpbnQgY2xrX2xvY2spCj4gK3sKPiArCWludCBlcnI7Cj4g Kwl1OCAqYnVmOwo+ICsKPiArCWJ1ZiA9IGttYWxsb2MoMTIsIEdGUF9LRVJORUwpOwo+ICsJaWYg KGJ1ZiA9PSBOVUxMKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWJ1ZlswXSAgPSAweDAw OwkJLyogQ09OVFJPTCAqLwo+ICsJYnVmWzFdICA9IDB4ZmY7CQkvKiBVTklUICovCj4gKwlidWZb Ml0gID0gMHgwMDsJCS8qIHZlbmRvciBkZXBlbmRlbnQgKi8KPiArCWJ1ZlszXSAgPSAweDA0OwkJ LyogY29tcGFueSBJRCBoaWdoICovCj4gKwlidWZbNF0gID0gMHgwMDsJCS8qIGNvbXBhbnkgSUQg bWlkZGxlICovCj4gKwlidWZbNV0gID0gMHgwNDsJCS8qIGNvbXBhbnkgSUQgbG93ICovCj4gKwli dWZbNl0gID0gMHhmZiAmIGNsa19zcmM7CS8qIGNsb2NrIHNvdXJjZSAqLwo+ICsJYnVmWzddICA9 IDB4ZmYgJiBkaWdfaW5fZm10OwkvKiBpbnB1dCBkaWdpdGFsIGZvcm1hdCAqLwo+ICsJYnVmWzhd ICA9IDB4ZmYgJiBkaWdfb3V0X2ZtdDsJLyogb3V0cHV0IGRpZ2l0YWwgZm9ybWF0ICovCj4gKwli dWZbOV0gID0gMHhmZiAmIGNsa19sb2NrOwkvKiBsb2NrIHRoZXNlIHNldHRpbmdzICovCj4gKwli dWZbMTBdID0gMHgwMDsJCS8qIHBhZGRpbmcgICovCj4gKwlidWZbMTFdID0gMHgwMDsJCS8qIHBh ZGRpbmcgKi8KPiArCj4gKwkvKiBkbyB0cmFuc2FjdGlvbiBhbmQgY2hlY2sgYnVmWzEtOV0gYXJl IHRoZSBzYW1lIGFnYWluc3QgY29tbWFuZCAqLwo+ICsJZXJyID0gZmNwX2F2Y190cmFuc2FjdGlv bihiZWJvYi0+dW5pdCwgYnVmLCAxMiwgYnVmLCAxMiwKPiArCQkJCSAgQklUKDEpIHwgQklUKDIp IHwgQklUKDMpIHwgQklUKDQpIHwKPiArCQkJCSAgQklUKDUpIHwgQklUKDYpIHwgQklUKDcpIHwg QklUKDgpIHwKPiArCQkJCSAgQklUKDkpKTsKPiArCWlmIChlcnIgPCAwKQo+ICsJCWdvdG8gZW5k Owo+ICsJaWYgKChlcnIgPCA2KSB8fCAoYnVmWzBdICE9IDB4MDkpKSB7Cj4gKwkJZGV2X2Vycigm YmVib2ItPnVuaXQtPmRldmljZSwKPiArCQkJImZhaWxlZCB0byBzZXQgY2xvY2sgcGFyYW1zXG4i KTsKPiArCQllcnIgPSAtRUlPOwo+ICsJCWdvdG8gZW5kOwo+ICsJfQo+ICsKPiArCWJlYm9iLT5j bGtfc3JjCQk9IGJ1Zls2XTsKPiArCS8qIGhhbmRsZSBib3RoIG9mIGlucHV0IGFuZCBvdXRwdXQg aW4gdGhpcyBtZW1iZXIgKi8KPiArCWJlYm9iLT5kaWdfaW5fZm10CT0gYnVmWzddOwo+ICsJYmVi b2ItPmRpZ19vdXRfZm10CT0gYnVmWzhdOwo+ICsJYmVib2ItPmNsa19sb2NrCQk9IGJ1Zls5XTsK PiArCj4gKwllcnIgPSAwOwo+ICtlbmQ6Cj4gKwlrZnJlZShidWYpOwo+ICsJcmV0dXJuIGVycjsK PiArfQo+ICsvKgo+ICsgKiBGb3Igc3BlY2lhbCBjdXN0b21pemVkIGRldmljZXMuCj4gKyAqIFRo ZSBkcml2ZXIgY2FuJ3QgcmVjZWl2ZSByZXNwb25zZSBmcm9tIHRoaXMgZmlybXdhcmUgZnJlcXVl bnRseS4KPiArICogU28gbmVlZCB0byByZWR1Y2UgZXhlY3V0aW9uIG9mIGNvbW1hbmQuCj4gKyAq Lwo+ICtzdGF0aWMgdm9pZAo+ICtzcGVjaWFsX3N0cmVhbV9mb3JtYXRpb25fc2V0KHN0cnVjdCBz bmRfYmVib2IgKmJlYm9iKQo+ICt7Cj4gKwl1bnNpZ25lZCBpbnQgaTsKPiArCj4gKwkvKgo+ICsJ ICogdGhlIHN0cmVhbSBmb3JtYXRpb24gaXMgZGlmZmVyZW50IGRlcGVuZGluZyBvbiBkaWdpdGFs IGludGVyZmFjZQo+ICsJICovCj4gKwlpZiAoYmVib2ItPmRpZ19pbl9mbXQ9PSAweDAxKSB7Cj4g KwkJYmVib2ItPnR4X3N0cmVhbV9mb3JtYXRpb25zWzNdLnBjbSA9IDE2Owo+ICsJCWJlYm9iLT50 eF9zdHJlYW1fZm9ybWF0aW9uc1s0XS5wY20gPSAxNjsKPiArCQliZWJvYi0+dHhfc3RyZWFtX2Zv cm1hdGlvbnNbNV0ucGNtID0gMTI7Cj4gKwkJYmVib2ItPnR4X3N0cmVhbV9mb3JtYXRpb25zWzZd LnBjbSA9IDEyOwo+ICsJCWlmIChiZWJvYi0+bWF1ZGlvX2lzMTgxNCkgewo+ICsJCQliZWJvYi0+ dHhfc3RyZWFtX2Zvcm1hdGlvbnNbN10ucGNtID0gMjsKPiArCQkJYmVib2ItPnR4X3N0cmVhbV9m b3JtYXRpb25zWzhdLnBjbSA9IDI7Cj4gKwkJfQo+ICsJfSBlbHNlIHsKPiArCQliZWJvYi0+dHhf c3RyZWFtX2Zvcm1hdGlvbnNbM10ucGNtID0gMTA7Cj4gKwkJYmVib2ItPnR4X3N0cmVhbV9mb3Jt YXRpb25zWzRdLnBjbSA9IDEwOwo+ICsJCWJlYm9iLT50eF9zdHJlYW1fZm9ybWF0aW9uc1s1XS5w Y20gPSAxMDsKPiArCQliZWJvYi0+dHhfc3RyZWFtX2Zvcm1hdGlvbnNbNl0ucGNtID0gMTA7Cj4g KwkJaWYgKGJlYm9iLT5tYXVkaW9faXMxODE0KSB7Cj4gKwkJCWJlYm9iLT50eF9zdHJlYW1fZm9y bWF0aW9uc1s3XS5wY20gPSAyOwo+ICsJCQliZWJvYi0+dHhfc3RyZWFtX2Zvcm1hdGlvbnNbOF0u cGNtID0gMjsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJaWYgKGJlYm9iLT5kaWdfb3V0X2ZtdCA9PSAw eDAxKSB7Cj4gKwkJYmVib2ItPnJ4X3N0cmVhbV9mb3JtYXRpb25zWzNdLnBjbSA9IDEyOwo+ICsJ CWJlYm9iLT5yeF9zdHJlYW1fZm9ybWF0aW9uc1s0XS5wY20gPSAxMjsKPiArCQliZWJvYi0+cnhf c3RyZWFtX2Zvcm1hdGlvbnNbNV0ucGNtID0gODsKPiArCQliZWJvYi0+cnhfc3RyZWFtX2Zvcm1h dGlvbnNbNl0ucGNtID0gODsKPiArCQlpZiAoYmVib2ItPm1hdWRpb19pczE4MTQpIHsKPiArCQkJ YmVib2ItPnJ4X3N0cmVhbV9mb3JtYXRpb25zWzddLnBjbSA9IDQ7Cj4gKwkJCWJlYm9iLT5yeF9z dHJlYW1fZm9ybWF0aW9uc1s4XS5wY20gPSA0Owo+ICsJCX0KPiArCX0gZWxzZSB7Cj4gKwkJYmVi b2ItPnJ4X3N0cmVhbV9mb3JtYXRpb25zWzNdLnBjbSA9IDY7Cj4gKwkJYmVib2ItPnJ4X3N0cmVh bV9mb3JtYXRpb25zWzRdLnBjbSA9IDY7Cj4gKwkJYmVib2ItPnJ4X3N0cmVhbV9mb3JtYXRpb25z WzVdLnBjbSA9IDY7Cj4gKwkJYmVib2ItPnJ4X3N0cmVhbV9mb3JtYXRpb25zWzZdLnBjbSA9IDY7 Cj4gKwkJaWYgKGJlYm9iLT5tYXVkaW9faXMxODE0KSB7Cj4gKwkJCWJlYm9iLT5yeF9zdHJlYW1f Zm9ybWF0aW9uc1s3XS5wY20gPSA0Owo+ICsJCQliZWJvYi0+cnhfc3RyZWFtX2Zvcm1hdGlvbnNb OF0ucGNtID0gNDsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJZm9yIChpID0gMzsgaSA8IFNORF9CRUJP Ql9TVFJNX0ZNVF9FTlRSSUVTOyBpKyspIHsKPiArCQliZWJvYi0+dHhfc3RyZWFtX2Zvcm1hdGlv bnNbaV0ubWlkaSA9IDE7Cj4gKwkJYmVib2ItPnJ4X3N0cmVhbV9mb3JtYXRpb25zW2ldLm1pZGkg PSAxOwo+ICsJCWlmICgoaSA+IDcpICYmIChiZWJvYi0+bWF1ZGlvX2lzMTgxNCkpCj4gKwkJCWJy ZWFrOwo+ICsJfQo+ICt9Cj4gKwo+ICtpbnQKPiArc25kX2JlYm9iX21hdWRpb19zcGVjaWFsX2Rp c2NvdmVyKHN0cnVjdCBzbmRfYmVib2IgKmJlYm9iLCBib29sIGlzMTgxNCkKPiArewo+ICsJaW50 IGVycjsKPiArCj4gKwliZWJvYi0+bWF1ZGlvX2lzMTgxNCA9IGlzMTgxNDsKPiArCj4gKwkvKiBp bml0aWFsaXplIHRoZXNlIHBhcmFtZXRlcnMgYmVjYXVzZSBkb2Vzbid0IGFsbG93IGRyaXZlciB0 byBhc2sgKi8KPiArCWVyciA9IHNwZWNpYWxfY2xrX3NldF9wYXJhbXMoYmVib2IsIDB4MDMsIDB4 MDAsIDB4MDAsIDB4MDApOwo+ICsJaWYgKGVyciA8IDApIHsKPiArCQlkZXZfZXJyKCZiZWJvYi0+ dW5pdC0+ZGV2aWNlLAo+ICsJCQkiZmFpbGVkIHRvIGluaXRpYWxpemUgY2xvY2sgcGFyYW1zXG4i KTsKPiArCX0KPiArCj4gKwllcnIgPSBhdmNfYXVkaW9fZ2V0X3NlbGVjdG9yKGJlYm9iLT51bml0 LCAweDAwLCAweDA0LAo+ICsJCQkJICAgICAmYmVib2ItPmRpZ19pbl9pZmFjZSk7Cj4gKwlpZiAo ZXJyIDwgMCkgewo+ICsJCWRldl9lcnIoJmJlYm9iLT51bml0LT5kZXZpY2UsCj4gKwkJCSJmYWls ZWQgdG8gZ2V0IGN1cnJlbnQgZGlnIGlmYWNlLiIpOwo+ICsJfQo+ICsKPiArCXNwZWNpYWxfc3Ry ZWFtX2Zvcm1hdGlvbl9zZXQoYmVib2IpOwo+ICsKPiArCWlmIChiZWJvYi0+bWF1ZGlvX2lzMTgx NCkgewo+ICsJCWJlYm9iLT5taWRpX2lucHV0X3BvcnRzID0gMTsKPiArCQliZWJvYi0+bWlkaV9v dXRwdXRfcG9ydHMgPSAxOwo+ICsJfSBlbHNlIHsKPiArCQliZWJvYi0+bWlkaV9pbnB1dF9wb3J0 cyA9IDI7Cj4gKwkJYmVib2ItPm1pZGlfb3V0cHV0X3BvcnRzID0gMjsKPiArCX0KPiArCj4gKwli ZWJvYi0+bWF1ZGlvX3NwZWNpYWxfcXVpcmsgPSB0cnVlOwo+ICsKPiArCXJldHVybiAwOwo+ICt9 Cj4gKy8qCj4gKyAqIElucHV0IHBsdWcgc2hvd3MgYWN0dWFsIHJhdGUuIE91dHB1dCBwbHVnIGlz IG5lZWRsZXNzIGZvciB0aGlzIHB1cnBvc2UuCj4gKyAqLwo+ICtzdGF0aWMgaW50IHNwZWNpYWxf Y2xrX2dldF9mcmVxKHN0cnVjdCBzbmRfYmVib2IgKmJlYm9iLCB1bnNpZ25lZCBpbnQgKnJhdGUp Cj4gK3sKPiArCXJldHVybiBzbmRfYmVib2JfZ2V0X3JhdGUoYmVib2IsIHJhdGUsIEFWQ19HRU5F UkFMX1BMVUdfRElSX0lOKTsKPiArfQo+ICtzdGF0aWMgY2hhciAqc3BlY2lhbF9jbGtfc3JjX2xh YmVsc1tdID0gewo+ICsJU05EX0JFQk9CX0NMT0NLX0lOVEVSTkFMICIgd2l0aCBEaWdpdGFsIE11 dGUiLCAiRGlnaXRhbCIsCj4gKwkiV29yZCBDbG9jayIsIFNORF9CRUJPQl9DTE9DS19JTlRFUk5B TH07Cj4gK3N0YXRpYyBpbnQKPiArc3BlY2lhbF9jbGtfc3JjX2dldChzdHJ1Y3Qgc25kX2JlYm9i ICpiZWJvYiwgdW5zaWduZWQgaW50ICppZCkKPiArewo+ICsJKmlkID0gYmVib2ItPmNsa19zcmM7 Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICtzdGF0aWMgaW50Cj4gK3NwZWNpYWxfY2xrX3NyY19zZXQo c3RydWN0IHNuZF9iZWJvYiAqYmVib2IsIHVuc2lnbmVkIGludCBpZCkKPiArewo+ICsJcmV0dXJu IHNwZWNpYWxfY2xrX3NldF9wYXJhbXMoYmVib2IsIGlkLAo+ICsJCQkJICAgICAgYmVib2ItPmRp Z19pbl9mbXQsIGJlYm9iLT5kaWdfb3V0X2ZtdCwKPiArCQkJCSAgICAgIGJlYm9iLT5jbGtfbG9j ayk7Cj4gK30KPiArc3RhdGljIGludAo+ICtzcGVjaWFsX2Nsa19zeW5jZWQoc3RydWN0IHNuZF9i ZWJvYiAqYmVib2IsIGJvb2wgKnN5bmNlZCkKPiArewo+ICsJcmV0dXJuIGNoZWNrX2Nsa19zeW5j KGJlYm9iLCBNRVRFUl9TSVpFX1NQRUNJQUwsIHN5bmNlZCk7Cj4gK30KPiArCj4gK3N0YXRpYyBj aGFyICpzcGVjaWFsX21ldGVyX2xhYmVsc1tdID0gewo+ICsJQU5BX0lOLCBBTkFfSU4sIEFOQV9J TiwgQU5BX0lOLAo+ICsJU1BESUZfSU4sCj4gKwlBREFUX0lOLCBBREFUX0lOLCBBREFUX0lOLCBB REFUX0lOLAo+ICsJQU5BX09VVCwgQU5BX09VVCwKPiArCVNQRElGX09VVCwKPiArCUFEQVRfT1VU LCBBREFUX09VVCwgQURBVF9PVVQsIEFEQVRfT1VULAo+ICsJSFBfT1VULCBIUF9PVVQsCj4gKwlB VVhfT1VUCj4gK307Cj4gK3N0YXRpYyBpbnQKPiArc3BlY2lhbF9tZXRlcl9nZXQoc3RydWN0IHNu ZF9iZWJvYiAqYmVib2IsIHUzMiAqdGFyZ2V0LCB1bnNpZ25lZCBpbnQgc2l6ZSkKPiArewo+ICsJ dTE2ICpidWY7Cj4gKwl1bnNpZ25lZCBpbnQgaSwgYywgY2hhbm5lbHM7Cj4gKwlpbnQgZXJyOwo+ ICsKPiArCWNoYW5uZWxzID0gQVJSQVlfU0laRShzcGVjaWFsX21ldGVyX2xhYmVscykgKiAyOwo+ ICsJaWYgKHNpemUgPCBjaGFubmVscyAqIHNpemVvZih1MzIpKQo+ICsJCXJldHVybiAtRUlOVkFM Owo+ICsKPiArCS8qIG9taXQgbGFzdCA1IGJ5dGVzIGJlY2F1c2UgaXQncyBjbG9jayBpbmZvLiAq Lwo+ICsJYnVmID0ga21hbGxvYyhNRVRFUl9TSVpFX1NQRUNJQUwgLSA0LCBHRlBfS0VSTkVMKTsK PiArCWlmIChidWYgPT0gTlVMTCkKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwllcnIgPSBn ZXRfbWV0ZXIoYmVib2IsICh2b2lkICopYnVmLCBNRVRFUl9TSVpFX1NQRUNJQUwgLSA0KTsKPiAr CWlmIChlcnIgPCAwKQo+ICsJCWdvdG8gZW5kOwo+ICsKPiArCS8qIHNvbWUgY2hhbm5lbHMgYXJl IG5vdCB1c2VkIGFuZCBjb252ZXJ0IHUxNiB0byB1MzIgKi8KPiArCWZvciAoaSA9IDAsIGMgPSAy OyBjIDwgY2hhbm5lbHMgKyAyOyBjKyspCj4gKwkJdGFyZ2V0W2krK10gPSBiZTE2X3RvX2NwdShi dWZbY10pIDw8IDg7Cj4gK2VuZDoKPiArCWtmcmVlKGJ1Zik7Cj4gKwlyZXR1cm4gZXJyOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgY2hhciAqc3BlY2lhbF9kaWdfaWZhY2VfbGFiZWxzW10gPSB7Cj4gKwki IiJTL1BESUYgT3B0aWNhbCIsICJTL1BESUYgQ29heGlhbCIsICJBREFUIE9wdGljYWwiCj4gK307 Cj4gK3N0YXRpYyBpbnQgc3BlY2lhbF9kaWdfaW5faWZhY2VfaW5mbyhzdHJ1Y3Qgc25kX2tjb250 cm9sICprY3RsLAo+ICsJCQkJICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICplaW5mKQo+ ICt7Cj4gKwllaW5mLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOwo+ICsJ ZWluZi0+Y291bnQgPSAxOwo+ICsJZWluZi0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IEFSUkFZ X1NJWkUoc3BlY2lhbF9kaWdfaWZhY2VfbGFiZWxzKTsKPiArCj4gKwlpZiAoZWluZi0+dmFsdWUu ZW51bWVyYXRlZC5pdGVtID49IGVpbmYtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMpCj4gKwkJZWlu Zi0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gZWluZi0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyAt IDE7Cj4gKwo+ICsJc3RyY3B5KGVpbmYtPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwKPiArCSAgICAg ICBzcGVjaWFsX2RpZ19pZmFjZV9sYWJlbHNbZWluZi0+dmFsdWUuZW51bWVyYXRlZC5pdGVtXSk7 Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArc3RhdGljIGludCBzcGVjaWFsX2RpZ19pbl9pZmFj ZV9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bCwKPiArCQkJCSAgICAgc3RydWN0IHNuZF9j dGxfZWxlbV92YWx1ZSAqdXZhbCkKPiArewo+ICsJc3RydWN0IHNuZF9iZWJvYiAqYmVib2IgPSBz bmRfa2NvbnRyb2xfY2hpcChrY3RsKTsKPiArCj4gKwkvKiBlbmNvZGVkIGlkIGZvciB1c2VyIHZh bHVlICovCj4gKwl1dmFsLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPQo+ICsJCShiZWJvYi0+ ZGlnX2luX2ZtdCA8PCAxKSB8IChiZWJvYi0+ZGlnX2luX2lmYWNlICYgMHgwMSk7Cj4gKwo+ICsJ cmV0dXJuIDA7Cj4gK30KPiArc3RhdGljIGludCBzcGVjaWFsX2RpZ19pbl9pZmFjZV9zZXQoc3Ry dWN0IHNuZF9rY29udHJvbCAqa2N0bCwKPiArCQkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92 YWx1ZSAqdXZhbCkKPiArewo+ICsJc3RydWN0IHNuZF9iZWJvYiAqYmVib2IgPSBzbmRfa2NvbnRy b2xfY2hpcChrY3RsKTsKPiArCXVuc2lnbmVkIGludCBpZCwgZGlnX2luX2ZtdCwgZGlnX2luX2lm YWNlOwo+ICsJaW50IGVycjsKPiArCj4gKwlpZCA9IHV2YWwtPnZhbHVlLmVudW1lcmF0ZWQuaXRl bVswXTsKPiArCj4gKwkvKiBkZWNvZGUgdXNlciB2YWx1ZSAqLwo+ICsJZGlnX2luX2ZtdCA9IChp ZCA+PiAxKSAmIDB4MDE7Cj4gKwlkaWdfaW5faWZhY2UgPSBpZCAmIDB4MDE7Cj4gKwo+ICsJZXJy ID0gc3BlY2lhbF9jbGtfc2V0X3BhcmFtcyhiZWJvYiwgYmVib2ItPmNsa19zcmMsIGRpZ19pbl9m bXQsCj4gKwkJCQkgICAgIGJlYm9iLT5kaWdfb3V0X2ZtdCwgYmVib2ItPmNsa19sb2NrKTsKPiAr CWlmICgoZXJyIDwgMCkgfHwgKGJlYm9iLT5kaWdfaW5fZm10ID4gMCkpIC8qIEFEQVQgKi8KPiAr CQlnb3RvIGVuZDsKPiArCj4gKwllcnIgPSBhdmNfYXVkaW9fc2V0X3NlbGVjdG9yKGJlYm9iLT51 bml0LCAweDAwLCAweDA0LCBkaWdfaW5faWZhY2UpOwo+ICsJaWYgKGVyciA8IDApCj4gKwkJZ290 byBlbmQ7Cj4gKwo+ICsJYmVib2ItPmRpZ19pbl9pZmFjZSA9IGRpZ19pbl9pZmFjZTsKPiArZW5k Ogo+ICsJc3BlY2lhbF9zdHJlYW1fZm9ybWF0aW9uX3NldChiZWJvYik7Cj4gKwlyZXR1cm4gZXJy Owo+ICt9Cj4gK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzcGVjaWFsX2RpZ19pbl9p ZmFjZSA9IHsKPiArCS5uYW1lCT0gIkRpZ2l0YWwgSW5wdXQgSW50ZXJmYWNlIiwKPiArCS5pZmFj ZQk9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAo+ICsJLmFjY2Vzcwk9IFNORFJWX0NUTF9F TEVNX0FDQ0VTU19SRUFEV1JJVEUsCj4gKwkuaW5mbwk9IHNwZWNpYWxfZGlnX2luX2lmYWNlX2lu Zm8sCj4gKwkuZ2V0CT0gc3BlY2lhbF9kaWdfaW5faWZhY2VfZ2V0LAo+ICsJLnB1dAk9IHNwZWNp YWxfZGlnX2luX2lmYWNlX3NldAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBzcGVjaWFsX2RpZ19v dXRfaWZhY2VfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsLAo+ICsJCQkJICAgICAgc3Ry dWN0IHNuZF9jdGxfZWxlbV9pbmZvICplaW5mKQo+ICt7Cj4gKwllaW5mLT50eXBlID0gU05EUlZf Q1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOwo+ICsJZWluZi0+Y291bnQgPSAxOwo+ICsJZWluZi0+ dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IEFSUkFZX1NJWkUoc3BlY2lhbF9kaWdfaWZhY2VfbGFi ZWxzKSAtIDE7Cj4gKwo+ICsJaWYgKGVpbmYtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA+PSBlaW5m LT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zKQo+ICsJCWVpbmYtPnZhbHVlLmVudW1lcmF0ZWQuaXRl bSA9IGVpbmYtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgLSAxOwo+ICsKPiArCXN0cmNweShlaW5m LT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsCj4gKwkgICAgICAgc3BlY2lhbF9kaWdfaWZhY2VfbGFi ZWxzW2VpbmYtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSArIDFdKTsKPiArCj4gKwlyZXR1cm4gMDsK PiArfQo+ICtzdGF0aWMgaW50IHNwZWNpYWxfZGlnX291dF9pZmFjZV9nZXQoc3RydWN0IHNuZF9r Y29udHJvbCAqa2N0bCwKPiArCQkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdXZh bCkKPiArewo+ICsJc3RydWN0IHNuZF9iZWJvYiAqYmVib2IgPSBzbmRfa2NvbnRyb2xfY2hpcChr Y3RsKTsKPiArCXV2YWwtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IGJlYm9iLT5kaWdfb3V0 X2ZtdDsKPiArCXJldHVybiAwOwo+ICt9Cj4gK3N0YXRpYyBpbnQgc3BlY2lhbF9kaWdfb3V0X2lm YWNlX3NldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsLAo+ICsJCQkJICAgICBzdHJ1Y3Qgc25k X2N0bF9lbGVtX3ZhbHVlICp1dmFsKQo+ICt7Cj4gKwlzdHJ1Y3Qgc25kX2JlYm9iICpiZWJvYiA9 IHNuZF9rY29udHJvbF9jaGlwKGtjdGwpOwo+ICsJdW5zaWduZWQgaW50IGlkOwo+ICsJaW50IGVy cjsKPiArCj4gKwlpZCA9IHV2YWwtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXTsKPiArCj4gKwll cnIgPSBzcGVjaWFsX2Nsa19zZXRfcGFyYW1zKGJlYm9iLCBiZWJvYi0+Y2xrX3NyYywgYmVib2It PmRpZ19pbl9mbXQsCj4gKwkJCQkgICAgIGlkLCBiZWJvYi0+Y2xrX2xvY2spOwo+ICsJaWYgKGVy ciA8IDApCj4gKwkJZ290byBlbmQ7Cj4gKwo+ICsJc3BlY2lhbF9zdHJlYW1fZm9ybWF0aW9uX3Nl dChiZWJvYik7Cj4gK2VuZDoKPiArCXJldHVybiBlcnI7Cj4gK30KPiArc3RhdGljIHN0cnVjdCBz bmRfa2NvbnRyb2xfbmV3IHNwZWNpYWxfZGlnX291dF9pZmFjZSA9IHsKPiArCS5uYW1lCT0gIkRp Z2l0YWwgT3V0cHV0IEludGVyZmFjZSIsCj4gKwkuaWZhY2UJPSBTTkRSVl9DVExfRUxFTV9JRkFD RV9NSVhFUiwKPiArCS5hY2Nlc3MJPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFLAo+ ICsJLmluZm8JPSBzcGVjaWFsX2RpZ19vdXRfaWZhY2VfaW5mbywKPiArCS5nZXQJPSBzcGVjaWFs X2RpZ19vdXRfaWZhY2VfZ2V0LAo+ICsJLnB1dAk9IHNwZWNpYWxfZGlnX291dF9pZmFjZV9zZXQK PiArfTsKPiArCj4gK2ludCBzbmRfYmVib2JfbWF1ZGlvX3NwZWNpYWxfYWRkX2NvbnRyb2xzKHN0 cnVjdCBzbmRfYmVib2IgKmJlYm9iKQo+ICt7Cj4gKwlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3Rs Owo+ICsJaW50IGVycjsKPiArCj4gKwlrY3RsID0gc25kX2N0bF9uZXcxKCZzcGVjaWFsX2RpZ19p bl9pZmFjZSwgYmVib2IpOwo+ICsJZXJyID0gc25kX2N0bF9hZGQoYmVib2ItPmNhcmQsIGtjdGwp Owo+ICsJaWYgKGVyciA8IDApCj4gKwkJZ290byBlbmQ7Cj4gKwo+ICsJa2N0bCA9IHNuZF9jdGxf bmV3MSgmc3BlY2lhbF9kaWdfb3V0X2lmYWNlLCBiZWJvYik7Cj4gKwllcnIgPSBzbmRfY3RsX2Fk ZChiZWJvYi0+Y2FyZCwga2N0bCk7Cj4gK2VuZDoKPiArCXJldHVybiBlcnI7Cj4gK30KPiArCj4g Ky8qIEZpcmV3aXJlIDQxMCBzcGVjaWZpYyBjb250cm9scyAqLwo+ICtzdGF0aWMgY2hhciAqZnc0 MTBfY2xrX3NyY19sYWJlbHNbXSA9IHsKPiArCVNORF9CRUJPQl9DTE9DS19JTlRFUk5BTCwgIkRp Z2l0YWwgT3B0aWNhbCIsICJEaWdpdGFsIENvYXhpYWwiCj4gK307Cj4gK3N0YXRpYyBpbnQKPiAr Znc0MTBfY2xrX3NyY19nZXQoc3RydWN0IHNuZF9iZWJvYiAqYmVib2IsIHVuc2lnbmVkIGludCAq aWQpCj4gK3sKPiArCWludCBlcnI7Cj4gKwl1bnNpZ25lZCBpbnQgc3R5cGUsIHNpZCwgcGlkOwo+ ICsKPiArCWVyciA9IGF2Y19jY21fZ2V0X3NpZ19zcmMoYmVib2ItPnVuaXQsCj4gKwkJCQkgICZz dHlwZSwgJnNpZCwgJnBpZCwgMHgwYywgMHgwMCwgMHgwMSk7Cj4gKwlpZiAoZXJyIDwgMCkKPiAr CQlnb3RvIGVuZDsKPiArCj4gKwkqaWQgPSAwOwo+ICsJaWYgKChzdHlwZSA9PSAweDFmKSAmJiAo c2lkID09IDB4MDcpKSB7Cj4gKwkJaWYgKHBpZCA9PSAweDgyKQo+ICsJCQkqaWQgPSAyOwo+ICsJ CWVsc2UgaWYgKHBpZCA9PSAweDgzKQo+ICsJCQkqaWQgPSAxOwo+ICsJfQo+ICtlbmQ6Cj4gKwly ZXR1cm4gZXJyOwo+ICt9Cj4gK3N0YXRpYyBpbnQKPiArZnc0MTBfY2xrX3NyY19zZXQoc3RydWN0 IHNuZF9iZWJvYiAqYmVib2IsIHVuc2lnbmVkIGludCBpZCkKPiArewo+ICsJdW5zaWduZWQgaW50 IHN0eXBlLCBzaWQsIHBpZDsKPiArCj4gKwlpZiAoaWQgPT0gMCkgewo+ICsJCXN0eXBlID0gMHgw YzsKPiArCQlzaWQgPSAweDAwOwo+ICsJCXBpZCA9IDB4MDE7Cj4gKwl9IGVsc2UgaWYgKGlkID09 IDEpIHsKPiArCQlzdHlwZSA9IDB4MWY7Cj4gKwkJc2lkID0gMHgwNzsKPiArCQlwaWQgPSAweDgz Owo+ICsJfSBlbHNlIHsKPiArCQlzdHlwZSA9IDB4MWY7Cj4gKwkJc2lkID0gMHgwNzsKPiArCQlw aWQgPSAweDgyOwo+ICsJfQo+ICsKPiArCXJldHVybiBhdmNfY2NtX3NldF9zaWdfc3JjKGJlYm9i LT51bml0LAo+ICsJCQkJICAgc3R5cGUsIHNpZCwgcGlkLCAweDBjLCAweDAwLCAweDAxKTsKPiAr fQo+ICtzdGF0aWMgaW50Cj4gK2Z3NDEwX2Nsa19zeW5jZWQoc3RydWN0IHNuZF9iZWJvYiAqYmVi b2IsIGJvb2wgKnN5bmNlZCkKPiArewo+ICsJcmV0dXJuIGNoZWNrX2Nsa19zeW5jKGJlYm9iLCBN RVRFUl9TSVpFX0ZXNDEwLCBzeW5jZWQpOwo+ICt9Cj4gK3N0YXRpYyBjaGFyICpmdzQxMF9tZXRl cl9sYWJlbHNbXSA9IHsKPiArCUFOQV9JTiwgRElHX0lOLAo+ICsJQU5BX09VVCwgQU5BX09VVCwg QU5BX09VVCwgQU5BX09VVCwgRElHX09VVCwKPiArCUhQX09VVAo+ICt9Owo+ICtzdGF0aWMgaW50 Cj4gK2Z3NDEwX21ldGVyX2dldChzdHJ1Y3Qgc25kX2JlYm9iICpiZWJvYiwgdTMyICpidWYsIHVu c2lnbmVkIGludCBzaXplKQo+ICt7Cj4gKwo+ICsJdW5zaWduZWQgaW50IGMsIGNoYW5uZWxzOwo+ ICsJaW50IGVycjsKPiArCj4gKwljaGFubmVscyA9IEFSUkFZX1NJWkUoZnc0MTBfbWV0ZXJfbGFi ZWxzKSAqIDI7Cj4gKwlpZiAoc2l6ZSA8IGNoYW5uZWxzICogc2l6ZW9mKHUzMikpCj4gKwkJcmV0 dXJuIC1FSU5WQUw7Cj4gKwo+ICsJLyogb21pdCBsYXN0IDQgYnl0ZXMgYmVjYXVzZSBpdCdzIGNs b2NrIGluZm8uICovCj4gKwllcnIgPSBnZXRfbWV0ZXIoYmVib2IsICh2b2lkICopYnVmLCBzaXpl KTsKPiArCWlmIChlcnIgPCAwKQo+ICsJCWdvdG8gZW5kOwo+ICsKPiArCWZvciAoYyA9IDA7IGMg PCBjaGFubmVsczsgYysrKQo+ICsJCWJ1ZltjXSA9IGJlMzJfdG9fY3B1KGJ1ZltjXSk7Cj4gK2Vu ZDoKPiArCXJldHVybiBlcnI7Cj4gK30KPiArCj4gKy8qIEZpcmV3aXJlIEF1ZGlvcGhpbGUgc3Bl Y2lmaWMgY29udHJvbHMgKi8KPiArc3RhdGljIGNoYXIgKmF1ZGlvcGhpbGVfY2xrX3NyY19sYWJl bHNbXSA9IHsKPiArCVNORF9CRUJPQl9DTE9DS19JTlRFUk5BTCwgIkRpZ2l0YWwgQ29heGlhbCIK PiArfTsKPiArc3RhdGljIGludAo+ICthdWRpb3BoaWxlX2Nsa19zcmNfZ2V0KHN0cnVjdCBzbmRf YmVib2IgKmJlYm9iLCB1bnNpZ25lZCBpbnQgKmlkKQo+ICt7Cj4gKwl1bnNpZ25lZCBpbnQgc3R5 cGUsIHNpZCwgcGlkOwo+ICsJaW50IGVycjsKPiArCj4gKwllcnIgPSBhdmNfY2NtX2dldF9zaWdf c3JjKGJlYm9iLT51bml0LAo+ICsJCQkJICAmc3R5cGUsICZzaWQsICZwaWQsIDB4MGMsIDB4MDAs IDB4MDEpOwo+ICsJaWYgKGVyciA8IDApCj4gKwkJZ290byBlbmQ7Cj4gKwo+ICsJaWYgKChzdHlw ZSA9PSAweDFmKSAmJiAoc2lkID09IDB4MDcpICYmIChwaWQgPT0gMHg4MikpCj4gKwkJKmlkID0g MTsKPiArCWVsc2UKPiArCQkqaWQgPSAwOwo+ICtlbmQ6Cj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4g K3N0YXRpYyBpbnQKPiArYXVkaW9waGlsZV9jbGtfc3JjX3NldChzdHJ1Y3Qgc25kX2JlYm9iICpi ZWJvYiwgdW5zaWduZWQgaW50IGlkKQo+ICt7Cj4gKwl1bnNpZ25lZCBpbnQgc3R5cGUsIHNpZCwg cGlkOwo+ICsKPiArCWlmIChpZCA9PSAwKSB7Cj4gKwkJc3R5cGUgPSAweDBjOwo+ICsJCXNpZCA9 IDB4MDA7Cj4gKwkJcGlkID0gMHgwMTsKPiArCX0gZWxzZSB7Cj4gKwkJc3R5cGUgPSAweDFmOwo+ ICsJCXNpZCA9IDB4MDc7Cj4gKwkJcGlkID0gMHg4MjsKPiArCX0KPiArCj4gKwlyZXR1cm4gYXZj X2NjbV9zZXRfc2lnX3NyYyhiZWJvYi0+dW5pdCwKPiArCQkJCSAgIHN0eXBlLCBzaWQsIHBpZCwg MHgwYywgMHgwMCwgMHgwMSk7Cj4gK30KPiArc3RhdGljIGludAo+ICthdWRpb3BoaWxlX2Nsa19z eW5jZWQoc3RydWN0IHNuZF9iZWJvYiAqYmVib2IsIGJvb2wgKnN5bmNlZCkKPiArewo+ICsJcmV0 dXJuIGNoZWNrX2Nsa19zeW5jKGJlYm9iLCBNRVRFUl9TSVpFX0FVRElPUEhJTEUsIHN5bmNlZCk7 Cj4gK30KPiArc3RhdGljIGNoYXIgKmF1ZGlvcGhpbGVfbWV0ZXJfbGFiZWxzW10gPSB7Cj4gKwlB TkFfSU4sIERJR19JTiwKPiArCUFOQV9PVVQsIEFOQV9PVVQsIERJR19PVVQsCj4gKwlIUF9PVVQs IEFVWF9PVVQsCj4gK307Cj4gK3N0YXRpYyBpbnQKPiArYXVkaW9waGlsZV9tZXRlcl9nZXQoc3Ry dWN0IHNuZF9iZWJvYiAqYmVib2IsIHUzMiAqYnVmLCB1bnNpZ25lZCBpbnQgc2l6ZSkKPiArewo+ ICsJdW5zaWduZWQgaW50IGMsIGNoYW5uZWxzOwo+ICsJaW50IGVycjsKPiArCj4gKwljaGFubmVs cyA9IEFSUkFZX1NJWkUoYXVkaW9waGlsZV9tZXRlcl9sYWJlbHMpICogMjsKPiArCWlmIChzaXpl IDwgY2hhbm5lbHMgKiBzaXplb2YodTMyKSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwkv KiBvbWl0IGxhc3QgNCBieXRlcyBiZWNhdXNlIGl0J3MgY2xvY2sgaW5mby4gKi8KPiArCWVyciA9 IGdldF9tZXRlcihiZWJvYiwgKHZvaWQgKilidWYsIHNpemUpOwo+ICsJaWYgKGVyciA8IDApCj4g KwkJZ290byBlbmQ7Cj4gKwo+ICsJZm9yIChjID0gMDsgYyA8IGNoYW5uZWxzOyBjKyspCj4gKwkJ YnVmW2NdID0gYmUzMl90b19jcHUoYnVmW2NdKTsKPiArZW5kOgo+ICsJcmV0dXJuIGVycjsKPiAr fQo+ICsKPiArLyogRmlyZXdpcmUgU29sbyBzcGVjaWZpYyBjb250cm9scyAqLwo+ICtzdGF0aWMg Y2hhciAqc29sb19jbGtfc3JjX2xhYmVsc1tdID0gewo+ICsJU05EX0JFQk9CX0NMT0NLX0lOVEVS TkFMLCAiRGlnaXRhbCBDb2F4aWFsIgo+ICt9Owo+ICtzdGF0aWMgaW50Cj4gK3NvbG9fY2xrX3Ny Y19nZXQoc3RydWN0IHNuZF9iZWJvYiAqYmVib2IsIHVuc2lnbmVkIGludCAqaWQpCj4gK3sKPiAr CXVuc2lnbmVkIGludCBzdHlwZSwgc2lkLCBwaWQ7Cj4gKwlpbnQgZXJyOwo+ICsKPiArCWVyciA9 IGF2Y19jY21fZ2V0X3NpZ19zcmMoYmVib2ItPnVuaXQsCj4gKwkJCQkgICZzdHlwZSwgJnNpZCwg JnBpZCwgMHgwYywgMHgwMCwgMHgwMSk7Cj4gKwlpZiAoZXJyIDwgMCkKPiArCQlnb3RvIGVuZDsK PiArCj4gKwlpZiAoKHN0eXBlID09IDB4MWYpICYmIChzaWQgPSAweDA3KSAmJiAocGlkPT0gMHg4 MSkpCj4gKwkJKmlkID0gMTsKPiArCWVsc2UKPiArCQkqaWQgPSAwOwo+ICtlbmQ6Cj4gKwlyZXR1 cm4gZXJyOwo+ICt9Cj4gK3N0YXRpYyBpbnQKPiArc29sb19jbGtfc3JjX3NldChzdHJ1Y3Qgc25k X2JlYm9iICpiZWJvYiwgdW5zaWduZWQgaW50IGlkKQo+ICt7Cj4gKwl1bnNpZ25lZCBpbnQgc3R5 cGUsIHNpZCwgcGlkOwo+ICsKPiArCWlmIChpZCA9PSAwKSB7Cj4gKwkJc3R5cGUgPSAweDBjOwo+ ICsJCXNpZCA9IDB4MDA7Cj4gKwkJcGlkID0gMHgwMTsKPiArCX0gZWxzZSB7Cj4gKwkJc3R5cGUg PSAweDFmOwo+ICsJCXNpZCA9IDB4MDc7Cj4gKwkJcGlkID0gMHg4MTsKPiArCX0KPiArCj4gKwly ZXR1cm4gYXZjX2NjbV9zZXRfc2lnX3NyYyhiZWJvYi0+dW5pdCwKPiArCQkJCSAgIHN0eXBlLCBz aWQsIHBpZCwgMHgwYywgMHgwMCwgMHgwMSk7Cj4gK30KPiArc3RhdGljIGludAo+ICtzb2xvX2Ns a19zeW5jZWQoc3RydWN0IHNuZF9iZWJvYiAqYmVib2IsIGJvb2wgKnN5bmNlZCkKPiArewo+ICsJ cmV0dXJuIGNoZWNrX2Nsa19zeW5jKGJlYm9iLCBNRVRFUl9TSVpFX1NPTE8sIHN5bmNlZCk7Cj4g K30KPiArc3RhdGljIGNoYXIgKnNvbG9fbWV0ZXJfbGFiZWxzW10gPSB7Cj4gKwlBTkFfSU4sIERJ R19JTiwKPiArCVNUUk1fSU4sIFNUUk1fSU4sCj4gKwlBTkFfT1VULCBESUdfT1VUCj4gK307Cj4g K3N0YXRpYyBpbnQKPiArc29sb19tZXRlcl9nZXQoc3RydWN0IHNuZF9iZWJvYiAqYmVib2IsIHUz MiAqYnVmLCB1bnNpZ25lZCBpbnQgc2l6ZSkKPiArewo+ICsJdW5zaWduZWQgaW50IGM7Cj4gKwlp bnQgZXJyOwo+ICsJdTMyIHRtcDsKPiArCj4gKwlpZiAoc2l6ZSA8IEFSUkFZX1NJWkUoc29sb19t ZXRlcl9sYWJlbHMpICogMiAqIHNpemVvZih1MzIpKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsK PiArCS8qIG9taXQgbGFzdCA0IGJ5dGVzIGJlY2F1c2UgaXQncyBjbG9jayBpbmZvLiAqLwo+ICsJ ZXJyID0gZ2V0X21ldGVyKGJlYm9iLCAodm9pZCAqKWJ1Ziwgc2l6ZSk7Cj4gKwlpZiAoZXJyIDwg MCkKPiArCQlnb3RvIGVuZDsKPiArCj4gKwljID0gMDsKPiArCWRvCj4gKwkJYnVmW2NdID0gYmUz Ml90b19jcHUoYnVmW2NdKTsKPiArCXdoaWxlICgrK2MgPCA0KTsKPiArCj4gKwkvKiBzd2FwIHN0 cmVhbSBjaGFubmVscyBiZWNhdXNlIGludmVydGVkICovCj4gKwl0bXAgPSBiZTMyX3RvX2NwdShi dWZbY10pOwo+ICsJYnVmW2NdID0gYmUzMl90b19jcHUoYnVmW2MgKyAyXSk7Cj4gKwlidWZbYyAr IDJdID0gdG1wOwo+ICsJdG1wID0gYmUzMl90b19jcHUoYnVmW2MgKyAxXSk7Cj4gKwlidWZbYyAr IDFdID0gYmUzMl90b19jcHUoYnVmW2MgKyAzXSk7Cj4gKwlidWZbYyArIDNdID0gdG1wOwo+ICsK PiArCWMgKz0gNDsKPiArCWRvCj4gKwkJYnVmW2NdID0gYmUzMl90b19jcHUoYnVmW2NdKTsKPiAr CXdoaWxlICgrK2MgPCAxMik7Cj4gK2VuZDoKPiArCXJldHVybiBlcnI7Cj4gK30KPiArCj4gKy8q IE96b25pYyBzcGVjaWZpYyBjb250cm9scyAqLwo+ICtzdGF0aWMgY2hhciAqb3pvbmljX21ldGVy X2xhYmVsc1tdID0gewo+ICsJQU5BX0lOLCBBTkFfSU4sCj4gKwlTVFJNX0lOLCBTVFJNX0lOLAo+ ICsJQU5BX09VVCwgQU5BX09VVAo+ICt9Owo+ICtzdGF0aWMgaW50Cj4gK296b25pY19tZXRlcl9n ZXQoc3RydWN0IHNuZF9iZWJvYiAqYmVib2IsIHUzMiAqYnVmLCB1bnNpZ25lZCBpbnQgc2l6ZSkK PiArewo+ICsJdW5zaWduZWQgaW50IGMsIGNoYW5uZWxzOwo+ICsJaW50IGVycjsKPiArCj4gKwlj aGFubmVscyA9IEFSUkFZX1NJWkUob3pvbmljX21ldGVyX2xhYmVscykgKiAyOwo+ICsJaWYgKHNp emUgPCBjaGFubmVscyAqIHNpemVvZih1MzIpKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiAr CWVyciA9IGdldF9tZXRlcihiZWJvYiwgKHZvaWQgKilidWYsIHNpemUpOwo+ICsJaWYgKGVyciA8 IDApCj4gKwkJZ290byBlbmQ7Cj4gKwo+ICsJZm9yIChjID0gMDsgYyA8IGNoYW5uZWxzOyBjKysp Cj4gKwkJYnVmW2NdID0gYmUzMl90b19jcHUoYnVmW2NdKTsKPiArZW5kOgo+ICsJcmV0dXJuIGVy cjsKPiArfQo+ICsKPiArLyogTlJWMTAgc3BlY2lmaWMgY29udHJvbHMgKi8KPiArLyogVE9ETzog bmVlZCB0ZXN0ZXJzLiB0aGlzIGlzIGJhc2VkIG9uIG15IGFzc3VtcHRpb24gKi8KPiArc3RhdGlj IGNoYXIgKm5ydjEwX21ldGVyX2xhYmVsc1tdID0gewo+ICsJQU5BX0lOLCBBTkFfSU4sIEFOQV9J TiwgQU5BX0lOLAo+ICsJRElHX0lOLAo+ICsJQU5BX09VVCwgQU5BX09VVCwgQU5BX09VVCwgQU5B X09VVCwKPiArCURJR19JTgo+ICt9Owo+ICtzdGF0aWMgaW50Cj4gK25ydjEwX21ldGVyX2dldChz dHJ1Y3Qgc25kX2JlYm9iICpiZWJvYiwgdTMyICpidWYsIHVuc2lnbmVkIGludCBzaXplKQo+ICt7 Cj4gKwl1bnNpZ25lZCBpbnQgYywgY2hhbm5lbHM7Cj4gKwlpbnQgZXJyOwo+ICsKPiArCWNoYW5u ZWxzID0gQVJSQVlfU0laRShucnYxMF9tZXRlcl9sYWJlbHMpICogMjsKPiArCWlmIChzaXplIDwg Y2hhbm5lbHMgKiBzaXplb2YodTMyKSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwllcnIg PSBnZXRfbWV0ZXIoYmVib2IsICh2b2lkICopYnVmLCBzaXplKTsKPiArCWlmIChlcnIgPCAwKQo+ ICsJCWdvdG8gZW5kOwo+ICsKPiArCWZvciAoYyA9IDA7IGMgPCBjaGFubmVsczsgYysrKQo+ICsJ CWJ1ZltjXSA9IGJlMzJfdG9fY3B1KGJ1ZltjXSk7Cj4gK2VuZDoKPiArCXJldHVybiBlcnI7Cj4g K30KPiArCj4gKwo+ICsvKiBCZUJvQiBib290bG9hZGVyIHNwZWNpZmljYXRpb24gKi8KPiArc3Ry dWN0IHNuZF9iZWJvYl9zcGVjIG1hdWRpb19ib290bG9hZGVyX3NwZWMgPSB7Cj4gKwkubG9hZAkJ PSAmZmlybXdhcmVfbG9hZCwKPiArCS5jbG9jawkJPSBOVUxMLAo+ICt9Owo+ICsKPiArLyogZm9y IHNwZWNpYWwgY3VzdG9taXplZCBkZXZpY2VzICovCj4gK3N0YXRpYyBzdHJ1Y3Qgc25kX2JlYm9i X2Nsb2NrX3NwZWMgc3BlY2lhbF9jbGtfc3BlYyA9IHsKPiArCS5udW0JCT0gQVJSQVlfU0laRShz cGVjaWFsX2Nsa19zcmNfbGFiZWxzKSwKPiArCS5sYWJlbHMJCT0gc3BlY2lhbF9jbGtfc3JjX2xh YmVscywKPiArCS5nZXRfc3JjCT0gJnNwZWNpYWxfY2xrX3NyY19nZXQsCj4gKwkuc2V0X3NyYwk9 ICZzcGVjaWFsX2Nsa19zcmNfc2V0LAo+ICsJLmdldF9mcmVxCT0gJnNwZWNpYWxfY2xrX2dldF9m cmVxLAo+ICsJLnNldF9mcmVxCT0gJnNuZF9iZWJvYl9zdHJlYW1fc2V0X3JhdGUsCj4gKwkuc3lu Y2VkCQk9ICZzcGVjaWFsX2Nsa19zeW5jZWQKPiArfTsKPiArc3RhdGljIHN0cnVjdCBzbmRfYmVi b2JfbWV0ZXJfc3BlYyBzcGVjaWFsX21ldGVyX3NwZWMgPSB7Cj4gKwkubnVtCT0gQVJSQVlfU0la RShzcGVjaWFsX21ldGVyX2xhYmVscyksCj4gKwkubGFiZWxzCT0gc3BlY2lhbF9tZXRlcl9sYWJl bHMsCj4gKwkuZ2V0CT0gJnNwZWNpYWxfbWV0ZXJfZ2V0Cj4gK307Cj4gK3N0cnVjdCBzbmRfYmVi b2Jfc3BlYyBtYXVkaW9fc3BlY2lhbF9zcGVjID0gewo+ICsJLmxvYWQJCT0gTlVMTCwKPiArCS5j bG9jawkJPSAmc3BlY2lhbF9jbGtfc3BlYywKPiArCS5tZXRlcgkJPSAmc3BlY2lhbF9tZXRlcl9z cGVjCj4gK307Cj4gKwo+ICsvKiBGaXJld2lyZSA0MTAgc3BlY2lmaWNhdGlvbiAqLwo+ICtzdGF0 aWMgc3RydWN0IHNuZF9iZWJvYl9jbG9ja19zcGVjIGZ3NDEwX2Nsa19zcGVjID0gewo+ICsJLm51 bQkJPSBBUlJBWV9TSVpFKGZ3NDEwX2Nsa19zcmNfbGFiZWxzKSwKPiArCS5sYWJlbHMJCT0gZnc0 MTBfY2xrX3NyY19sYWJlbHMsCj4gKwkuZ2V0X3NyYwk9ICZmdzQxMF9jbGtfc3JjX2dldCwKPiAr CS5zZXRfc3JjCT0gJmZ3NDEwX2Nsa19zcmNfc2V0LAo+ICsJLmdldF9mcmVxCT0gJnNuZF9iZWJv Yl9zdHJlYW1fZ2V0X3JhdGUsCj4gKwkuc2V0X2ZyZXEJPSAmc25kX2JlYm9iX3N0cmVhbV9zZXRf cmF0ZSwKPiArCS5zeW5jZWQJCT0gJmZ3NDEwX2Nsa19zeW5jZWQKPiArfTsKPiArc3RhdGljIHN0 cnVjdCBzbmRfYmVib2JfbWV0ZXJfc3BlYyBmdzQxMF9tZXRlcl9zcGVjID0gewo+ICsJLm51bQk9 IEFSUkFZX1NJWkUoZnc0MTBfbWV0ZXJfbGFiZWxzKSwKPiArCS5sYWJlbHMJPSBmdzQxMF9tZXRl cl9sYWJlbHMsCj4gKwkuZ2V0CT0gJmZ3NDEwX21ldGVyX2dldAo+ICt9Owo+ICtzdHJ1Y3Qgc25k X2JlYm9iX3NwZWMgbWF1ZGlvX2Z3NDEwX3NwZWMgPSB7Cj4gKwkubG9hZAk9IE5VTEwsCj4gKwku Y2xvY2sJPSAmZnc0MTBfY2xrX3NwZWMsCj4gKwkubWV0ZXIJPSAmZnc0MTBfbWV0ZXJfc3BlYwo+ ICt9Owo+ICsKPiArLyogRmlyZXdpcmUgQXVkaW9waGlsZSBzcGVjaWZpY2F0aW9uICovCj4gK3N0 YXRpYyBzdHJ1Y3Qgc25kX2JlYm9iX2Nsb2NrX3NwZWMgYXVkaW9waGlsZV9jbGtfc3BlYyA9IHsK PiArCS5udW0JCT0gQVJSQVlfU0laRShhdWRpb3BoaWxlX2Nsa19zcmNfbGFiZWxzKSwKPiArCS5s YWJlbHMJCT0gYXVkaW9waGlsZV9jbGtfc3JjX2xhYmVscywKPiArCS5nZXRfc3JjCT0gJmF1ZGlv cGhpbGVfY2xrX3NyY19nZXQsCj4gKwkuc2V0X3NyYwk9ICZhdWRpb3BoaWxlX2Nsa19zcmNfc2V0 LAo+ICsJLmdldF9mcmVxCT0gJnNuZF9iZWJvYl9zdHJlYW1fZ2V0X3JhdGUsCj4gKwkuc2V0X2Zy ZXEJPSAmc25kX2JlYm9iX3N0cmVhbV9zZXRfcmF0ZSwKPiArCS5zeW5jZWQJCT0gJmF1ZGlvcGhp bGVfY2xrX3N5bmNlZAo+ICt9Owo+ICtzdGF0aWMgc3RydWN0IHNuZF9iZWJvYl9tZXRlcl9zcGVj IGF1ZGlvcGhpbGVfbWV0ZXJfc3BlYyA9IHsKPiArCS5udW0JPSBBUlJBWV9TSVpFKGF1ZGlvcGhp bGVfbWV0ZXJfbGFiZWxzKSwKPiArCS5sYWJlbHMJPSBhdWRpb3BoaWxlX21ldGVyX2xhYmVscywK PiArCS5nZXQJPSAmYXVkaW9waGlsZV9tZXRlcl9nZXQKPiArfTsKPiArc3RydWN0IHNuZF9iZWJv Yl9zcGVjIG1hdWRpb19hdWRpb3BoaWxlX3NwZWMgPSB7Cj4gKwkubG9hZAk9ICZmaXJtd2FyZV9s b2FkLAo+ICsJLmNsb2NrCT0gJmF1ZGlvcGhpbGVfY2xrX3NwZWMsCj4gKwkubWV0ZXIJPSAmYXVk aW9waGlsZV9tZXRlcl9zcGVjCj4gK307Cj4gKwo+ICsvKiBGaXJld2lyZSBTb2xvIHNwZWNpZmlj YXRpb24gKi8KPiArc3RhdGljIHN0cnVjdCBzbmRfYmVib2JfY2xvY2tfc3BlYyBzb2xvX2Nsa19z cGVjID0gewo+ICsJLm51bQkJPSBBUlJBWV9TSVpFKHNvbG9fY2xrX3NyY19sYWJlbHMpLAo+ICsJ LmxhYmVscwkJPSBzb2xvX2Nsa19zcmNfbGFiZWxzLAo+ICsJLmdldF9zcmMJPSAmc29sb19jbGtf c3JjX2dldCwKPiArCS5zZXRfc3JjCT0gJnNvbG9fY2xrX3NyY19zZXQsCj4gKwkuZ2V0X2ZyZXEJ PSAmc25kX2JlYm9iX3N0cmVhbV9nZXRfcmF0ZSwKPiArCS5zZXRfZnJlcQk9ICZzbmRfYmVib2Jf c3RyZWFtX3NldF9yYXRlLAo+ICsJLnN5bmNlZAkJPSAmc29sb19jbGtfc3luY2VkCj4gK307Cj4g K3N0YXRpYyBzdHJ1Y3Qgc25kX2JlYm9iX21ldGVyX3NwZWMgc29sb19tZXRlcl9zcGVjID0gewo+ ICsJLm51bQk9IEFSUkFZX1NJWkUoc29sb19tZXRlcl9sYWJlbHMpLAo+ICsJLmxhYmVscwk9IHNv bG9fbWV0ZXJfbGFiZWxzLAo+ICsJLmdldAk9ICZzb2xvX21ldGVyX2dldAo+ICt9Owo+ICtzdHJ1 Y3Qgc25kX2JlYm9iX3NwZWMgbWF1ZGlvX3NvbG9fc3BlYyA9IHsKPiArCS5sb2FkCT0gTlVMTCwK PiArCS5jbG9jawk9ICZzb2xvX2Nsa19zcGVjLAo+ICsJLm1ldGVyCT0gJnNvbG9fbWV0ZXJfc3Bl Ywo+ICt9Owo+ICsKPiArLyogT3pvbmljIHNwZWNpZmljYXRpb24gKi8KPiArc3RydWN0IHNuZF9i ZWJvYl9jbG9ja19zcGVjIHVzdWFsX2Nsa19zcGVjID0gewo+ICsJLmdldF9mcmVxCT0gJnNuZF9i ZWJvYl9zdHJlYW1fZ2V0X3JhdGUsCj4gKwkuc2V0X2ZyZXEJPSAmc25kX2JlYm9iX3N0cmVhbV9z ZXRfcmF0ZQo+ICt9Owo+ICtzdGF0aWMgc3RydWN0IHNuZF9iZWJvYl9tZXRlcl9zcGVjIG96b25p Y19tZXRlcl9zcGVjID0gewo+ICsJLm51bQk9IEFSUkFZX1NJWkUob3pvbmljX21ldGVyX2xhYmVs cyksCj4gKwkubGFiZWxzCT0gb3pvbmljX21ldGVyX2xhYmVscywKPiArCS5nZXQJPSAmb3pvbmlj X21ldGVyX2dldAo+ICt9Owo+ICtzdHJ1Y3Qgc25kX2JlYm9iX3NwZWMgbWF1ZGlvX296b25pY19z cGVjID0gewo+ICsJLmxvYWQJPSBOVUxMLAo+ICsJLmNsb2NrCT0gJnVzdWFsX2Nsa19zcGVjLAo+ ICsJLm1ldGVyCT0gJm96b25pY19tZXRlcl9zcGVjCj4gK307Cj4gKwo+ICsvKiBOUlYxMCBzcGVj aWZpY2F0aW9uICovCj4gK3N0YXRpYyBzdHJ1Y3Qgc25kX2JlYm9iX21ldGVyX3NwZWMgbnJ2MTBf bWV0ZXJfc3BlYyA9IHsKPiArCS5udW0JPSBBUlJBWV9TSVpFKG5ydjEwX21ldGVyX2xhYmVscyks Cj4gKwkubGFiZWxzCT0gbnJ2MTBfbWV0ZXJfbGFiZWxzLAo+ICsJLmdldAk9ICZucnYxMF9tZXRl cl9nZXQKPiArfTsKPiArc3RydWN0IHNuZF9iZWJvYl9zcGVjIG1hdWRpb19ucnYxMF9zcGVjID0g ewo+ICsJLmxvYWQJPSBOVUxMLAo+ICsJLmNsb2NrCT0gJnVzdWFsX2Nsa19zcGVjLAo+ICsJLm1l dGVyCT0gJm5ydjEwX21ldGVyX3NwZWMKPiArfTsKPiBkaWZmIC0tZ2l0IGEvc291bmQvZmlyZXdp cmUvYmVib2IvYmVib2Jfc3RyZWFtLmMgYi9zb3VuZC9maXJld2lyZS9iZWJvYi9iZWJvYl9zdHJl YW0uYwo+IGluZGV4IGZhYTIzNWUuLjA3OGRlMDggMTAwNjQ0Cj4gLS0tIGEvc291bmQvZmlyZXdp cmUvYmVib2IvYmVib2Jfc3RyZWFtLmMKPiArKysgYi9zb3VuZC9maXJld2lyZS9iZWJvYi9iZWJv Yl9zdHJlYW0uYwo+IEBAIC0yNjEsOSArMjYxLDExIEBAIHN0YXJ0X3N0cmVhbShzdHJ1Y3Qgc25k X2JlYm9iICpiZWJvYiwgc3RydWN0IGFtZHRwX3N0cmVhbSAqc3RyZWFtLAo+ICAgCQljb25uID0g JmJlYm9iLT5vdXRfY29ubjsKPgo+ICAgCS8qIGNoYW5uZWwgbWFwcGluZyAqLwo+IC0JZXJyID0g c25kX2JlYm9iX3N0cmVhbV9tYXAoYmVib2IsIHN0cmVhbSk7Cj4gLQlpZiAoZXJyIDwgMCkKPiAt CQlnb3RvIGVuZDsKPiArCWlmICghYmVib2ItPm1hdWRpb19zcGVjaWFsX3F1aXJrKSB7Cj4gKwkJ ZXJyID0gc25kX2JlYm9iX3N0cmVhbV9tYXAoYmVib2IsIHN0cmVhbSk7Cj4gKwkJaWYgKGVyciA8 IDApCj4gKwkJCWdvdG8gZW5kOwo+ICsJfQo+Cj4gICAJLyogc3RhcnQgYW1kdHAgc3RyZWFtICov Cj4gICAJZXJyID0gYW1kdHBfc3RyZWFtX3N0YXJ0KHN0cmVhbSwKPiBAQCAtMzg0LDYgKzM4Niwy MCBAQCBpbnQgc25kX2JlYm9iX3N0cmVhbV9zdGFydF9kdXBsZXgoc3RydWN0IHNuZF9iZWJvYiAq YmVib2IsCj4gICAJCQlnb3RvIGVuZDsKPiAgIAkJfQo+Cj4gKwkJLyoKPiArCQkgKiBOT1RFOgo+ ICsJCSAqIFRoZSBmaXJtd2FyZSBjdXN0b21pemVkIGJ5IE0tQXVkaW8gdXNlcyB0aGlzIGN1ZSB0 byBzdGFydAo+ICsJCSAqIHRyYW5zbWl0IHN0cmVhbS4gVGhpcyBpcyBub3QgaW4gc3BlY2lmaWNh dGlvbi4KPiArCQkgKi8KPiArCQlpZiAoYmVib2ItPm1hdWRpb19zcGVjaWFsX3F1aXJrKSB7Cj4g KwkJCWVyciA9IHNwZWMtPnNldF9mcmVxKGJlYm9iLCByYXRlKTsKPiArCQkJaWYgKGVyciA8IDAp IHsKPiArCQkJCWFtZHRwX3N0cmVhbV9zdG9wKG1hc3Rlcik7Cj4gKwkJCQlicmVha19ib3RoX2Nv bm5lY3Rpb25zKGJlYm9iKTsKPiArCQkJCWdvdG8gZW5kOwo+ICsJCQl9Cj4gKwkJfQo+ICsKPiAg IAkJLyogd2FpdCBmaXJzdCBjYWxsYmFjayAqLwo+ICAgCQlpZiAoIWFtZHRwX3N0cmVhbV93YWl0 X2NhbGxiYWNrKG1hc3RlcikpIHsKPiAgIAkJCWFtZHRwX3N0cmVhbV9zdG9wKG1hc3Rlcik7Cj4K Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFsc2EtZGV2 ZWwgbWFpbGluZyBsaXN0CkFsc2EtZGV2ZWxAYWxzYS1wcm9qZWN0Lm9yZwpodHRwOi8vbWFpbG1h bi5hbHNhLXByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vYWxzYS1kZXZlbAo=