From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH i-g-t 1/3] lib/igt_kms migrate existing documentation to header file. Date: Mon, 21 Dec 2015 17:09:51 +0100 Message-ID: <20151221160951.GI30437@phenom.ffwll.local> References: <1450696045-6405-1-git-send-email-marius.c.vlad@intel.com> <1450696045-6405-2-git-send-email-marius.c.vlad@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-f48.google.com (mail-wm0-f48.google.com [74.125.82.48]) by gabe.freedesktop.org (Postfix) with ESMTPS id DBFEB7206E for ; Mon, 21 Dec 2015 08:09:51 -0800 (PST) Received: by mail-wm0-f48.google.com with SMTP id l126so75614753wml.0 for ; Mon, 21 Dec 2015 08:09:51 -0800 (PST) Content-Disposition: inline In-Reply-To: <1450696045-6405-2-git-send-email-marius.c.vlad@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Marius Vlad Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCBEZWMgMjEsIDIwMTUgYXQgMDE6MDc6MjNQTSArMDIwMCwgTWFyaXVzIFZsYWQgd3Jv dGU6Cj4gU2lnbmVkLW9mZi1ieTogTWFyaXVzIFZsYWQgPG1hcml1cy5jLnZsYWRAaW50ZWwuY29t PgoKSG0sIHdoeSB0aGF0PyBHaXZlbiB0aGF0IHRoaXMgaXMgYWdhaW5zdCB0aGUgdXN1YWwgc3R5 bGUgaW4gaWd0IHRoaXMgbmVlZHMKc29tZSBqdXN0aWZpY2F0aW9uLCBub3QgYW4gZW1wdHkgY29t bWl0IG1lc3NhZ2UuCgpUaGFua3MsIERhbmllbAoKPiAtLS0KPiAgbGliL2lndF9rbXMuYyB8IDMy MSArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICBsaWIvaWd0X2ttcy5o IHwgNDg2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyst LS0tLS0tLS0KPiAgMiBmaWxlcyBjaGFuZ2VkLCA0MTggaW5zZXJ0aW9ucygrKSwgMzg5IGRlbGV0 aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9saWIvaWd0X2ttcy5jIGIvbGliL2lndF9rbXMuYwo+ IGluZGV4IDVkNWE5NWMuLjNkYzU1OWQgMTAwNjQ0Cj4gLS0tIGEvbGliL2lndF9rbXMuYwo+ICsr KyBiL2xpYi9pZ3Rfa21zLmMKPiBAQCAtODgsMjMgKzg4LDcgQEAgc3RhdGljIHZvaWQgdXBkYXRl X2VkaWRfY3N1bSh1bnNpZ25lZCBjaGFyICplZGlkKQo+ICAjZGVmaW5lIEVESURfTkFNRSBiYXNl X2VkaWQKPiAgI2luY2x1ZGUgImlndF9lZGlkX3RlbXBsYXRlLmgiCj4gIAo+IC0vKioKPiAtICog aWd0X2ttc19nZXRfYmFzZV9lZGlkOgo+IC0gKgo+IC0gKiBHZXQgdGhlIGJhc2UgZWRpZCBibG9j aywgd2hpY2ggaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBtb2RlczoKPiAtICoKPiAtICogIC0gMTky MHgxMDgwIDYwSHoKPiAtICogIC0gMTI4MHg3MjAgNjBIego+IC0gKiAgLSAxMDI0eDc2OCA2MEh6 Cj4gLSAqICAtIDgwMHg2MDAgNjBIego+IC0gKiAgLSA2NDB4NDgwIDYwSHoKPiAtICoKPiAtICog VGhpcyBjYW4gYmUgZXh0ZW5kZWQgd2l0aCBmdXJ0aGVyIGZlYXR1cmVzIHVzaW5nIGZ1bmN0aW9u cyBzdWNoIGFzCj4gLSAqICNrbXN0ZXN0X2VkaWRfYWRkXzNkLgo+IC0gKgo+IC0gKiBSZXR1cm5z OiBhIGJhc2ljIGVkaWQgYmxvY2sKPiAtICovCj4gLWNvbnN0IHVuc2lnbmVkIGNoYXIqIGlndF9r bXNfZ2V0X2Jhc2VfZWRpZCh2b2lkKQo+ICtjb25zdCB1bnNpZ25lZCBjaGFyICppZ3Rfa21zX2dl dF9iYXNlX2VkaWQodm9pZCkKPiAgewo+ICAJdXBkYXRlX2VkaWRfY3N1bShiYXNlX2VkaWQpOwo+ ICAKPiBAQCAtMTI4LDU5ICsxMTIsMTMgQEAgY29uc3QgdW5zaWduZWQgY2hhciogaWd0X2ttc19n ZXRfYmFzZV9lZGlkKHZvaWQpCj4gICNkZWZpbmUgRURJRF9OQU1FIGFsdF9lZGlkCj4gICNpbmNs dWRlICJpZ3RfZWRpZF90ZW1wbGF0ZS5oIgo+ICAKPiAtLyoqCj4gLSAqIGlndF9rbXNfZ2V0X2Fs dF9lZGlkOgo+IC0gKgo+IC0gKiBHZXQgYW4gYWx0ZXJuYXRlIGVkaWQgYmxvY2ssIHdoaWNoIGlu Y2x1ZGVzIHRoZSBmb2xsb3dpbmcgbW9kZXM6Cj4gLSAqCj4gLSAqICAtIDE0MDB4MTA1MCA2MEh6 Cj4gLSAqICAtIDE5MjB4MTA4MCA2MEh6Cj4gLSAqICAtIDEyODB4NzIwIDYwSHoKPiAtICogIC0g MTAyNHg3NjggNjBIego+IC0gKiAgLSA4MDB4NjAwIDYwSHoKPiAtICogIC0gNjQweDQ4MCA2MEh6 Cj4gLSAqCj4gLSAqIFRoaXMgY2FuIGJlIGV4dGVuZGVkIHdpdGggZnVydGhlciBmZWF0dXJlcyB1 c2luZyBmdW5jdGlvbnMgc3VjaCBhcwo+IC0gKiAja21zdGVzdF9lZGlkX2FkZF8zZC4KPiAtICoK PiAtICogUmV0dXJuczogYW4gYWx0ZXJuYXRlIGVkaWQgYmxvY2sKPiAtICovCj4gLWNvbnN0IHVu c2lnbmVkIGNoYXIqIGlndF9rbXNfZ2V0X2FsdF9lZGlkKHZvaWQpCj4gK2NvbnN0IHVuc2lnbmVk IGNoYXIgKmlndF9rbXNfZ2V0X2FsdF9lZGlkKHZvaWQpCj4gIHsKPiAgCXVwZGF0ZV9lZGlkX2Nz dW0oYWx0X2VkaWQpOwo+ICAKPiAgCXJldHVybiBhbHRfZWRpZDsKPiAgfQo+ICAKPiAtLyoqCj4g LSAqIFNFQ1RJT046aWd0X2ttcwo+IC0gKiBAc2hvcnRfZGVzY3JpcHRpb246IEtlcm5lbCBtb2Rl c2V0dGluZyBzdXBwb3J0IGxpYnJhcnkKPiAtICogQHRpdGxlOiBLTVMKPiAtICogQGluY2x1ZGU6 IGlndC5oCj4gLSAqCj4gLSAqIFRoaXMgbGlicmFyeSBwcm92aWRlcyBzdXBwb3J0IHRvIGVudW1l cmF0ZSBhbmQgc2V0IG1vZGVzZXQgY29uZmlndXJhdGlvbnMuCj4gLSAqCj4gLSAqIFRoZXJlIGFy ZSB0d28gcGFydHMgaW4gdGhpcyBsaWJyYXJ5OiBGaXJzdCB0aGUgbG93IGxldmVsIGhlbHBlciBm dW5jdGlvbgo+IC0gKiB3aGljaCBkaXJlY3RseSBidWlsZCBvbiB0b3Agb2YgcmF3IGlvY3RscyBv ciB0aGUgaW50ZXJmYWNlcyBwcm92aWRlZCBieQo+IC0gKiBsaWJkcm0uIFRob3NlIGZ1bmN0aW9u cyBhbGwgaGF2ZSBhIGttc3Rlc3RfIHByZWZpeC4KPiAtICoKPiAtICogVGhlIHNlY29uZCBwYXJ0 IGlzIGEgaGlnaC1sZXZlbCBsaWJyYXJ5IHRvIG1hbmFnZSBtb2Rlc2V0IGNvbmZpZ3VyYXRpb25z Cj4gLSAqIHdoaWNoIGFic3RyYWN0cyBhd2F5IHNvbWUgb2YgdGhlIGxvdy1sZXZlbCBkZXRhaWxz IGxpa2UgdGhlIGRpZmZlcmVuY2UKPiAtICogYmV0d2VlbiBsZWdhY3kgYW5kIHVuaXZlcnNhbCBw bGFuZSBzdXBwb3J0IGZvciBzZXR0aW5nIGN1cnNvcnMgb3IgaW4gdGhlCj4gLSAqIGZ1dHVyZSB0 aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGxlZ2FjeSBhbmQgYXRvbWljIGNvbW1pdC4gVGhlc2UgaGln aC1sZXZlbAo+IC0gKiBmdW5jdGlvbnMgaGF2ZSBhbGwgaWd0XyBwcmVmaXhlcy4gVGhpcyBwYXJ0 IGlzIHN0aWxsIHZlcnkgbXVjaCB3b3JrIGluCj4gLSAqIHByb2dyZXNzIGFuZCBzbyBhbHNvIGxh Y2tzIGEgYml0IGRvY3VtZW50YXRpb24gZm9yIHRoZSBpbmRpdmlkdWFsIGZ1bmN0aW9ucy4KPiAt ICoKPiAtICogTm90ZSB0aGF0IHRoaXMgbGlicmFyeSdzIGhlYWRlciBwdWxscyBpbiB0aGUgW2kt Zy10IGZyYW1lYnVmZmVyXShpbnRlbC1ncHUtdG9vbHMtaS1nLXQtZnJhbWVidWZmZXIuaHRtbCkK PiAtICogbGlicmFyeSBhcyBhIGRlcGVuZGVuY3kuCj4gLSAqLwo+IC0KPiAtLyoqCj4gLSAqIGtt c3Rlc3RfcGlwZV9uYW1lOgo+IC0gKiBAcGlwZTogZGlzcGxheSBwaXBlCj4gLSAqCj4gLSAqIFJl dHVybnM6IFN0cmluZyByZXByZXNudGluZyBAcGlwZSwgZS5nLiAiQSIuCj4gLSAqLwo+ICBjb25z dCBjaGFyICprbXN0ZXN0X3BpcGVfbmFtZShlbnVtIHBpcGUgcGlwZSkKPiAgewo+ICAJY29uc3Qg Y2hhciAqc3RyW10gPSB7ICJBIiwgIkIiLCAiQyIgfTsKPiBAQCAtMTkxLDEyICsxMjksNiBAQCBj b25zdCBjaGFyICprbXN0ZXN0X3BpcGVfbmFtZShlbnVtIHBpcGUgcGlwZSkKPiAgCXJldHVybiBz dHJbcGlwZV07Cj4gIH0KPiAgCj4gLS8qKgo+IC0gKiBrbXN0ZXN0X3BsYW5lX25hbWU6Cj4gLSAq IEBwbGFuZTogZGlzcGxheSBwbGFuZQo+IC0gKgo+IC0gKiBSZXR1cm5zOiBTdHJpbmcgcmVwcmVz bnRpbmcgQHBpcGUsIGUuZy4gInBsYW5lMSIuCj4gLSAqLwo+ICBjb25zdCBjaGFyICprbXN0ZXN0 X3BsYW5lX25hbWUoZW51bSBpZ3RfcGxhbmUgcGxhbmUpCj4gIHsKPiAgCXN0YXRpYyBjb25zdCBj aGFyICpuYW1lc1tdID0gewo+IEBAIC0yMzUsMTIgKzE2Nyw2IEBAIHN0YXRpYyBjb25zdCBjaGFy ICptb2RlX3N0ZXJlb19uYW1lKGNvbnN0IGRybU1vZGVNb2RlSW5mbyAqbW9kZSkKPiAgCX0KPiAg fQo+ICAKPiAtLyoqCj4gLSAqIGttc3Rlc3RfZHVtcF9tb2RlOgo+IC0gKiBAbW9kZTogbGliZHJt IG1vZGUgc3RydWN0dXJlCj4gLSAqCj4gLSAqIFByaW50cyBAbW9kZSB0byBzdGRvdXQgaW4gYSBo dW1hLXJlYWRhYmxlIGZvcm0uCj4gLSAqLwo+ICB2b2lkIGttc3Rlc3RfZHVtcF9tb2RlKGRybU1v ZGVNb2RlSW5mbyAqbW9kZSkKPiAgewo+ICAJY29uc3QgY2hhciAqc3RlcmVvID0gbW9kZV9zdGVy ZW9fbmFtZShtb2RlKTsKPiBAQCAtMjU2LDE0ICsxODIsNiBAQCB2b2lkIGttc3Rlc3RfZHVtcF9t b2RlKGRybU1vZGVNb2RlSW5mbyAqbW9kZSkKPiAgCQkgc3RlcmVvID8gc3RlcmVvIDogIiIsIHN0 ZXJlbyA/ICIpIiA6ICIiKTsKPiAgfQo+ICAKPiAtLyoqCj4gLSAqIGttc3Rlc3RfZ2V0X3BpcGVf ZnJvbV9jcnRjX2lkOgo+IC0gKiBAZmQ6IERSTSBmZAo+IC0gKiBAY3J0Y19pZDogRFJNIENSVEMg aWQKPiAtICoKPiAtICogUmV0dXJuczogVGhlIHBpcGUgbnVtYmVyIGZvciB0aGUgZ2l2ZW4gRFJN IENSVEMgQGNydGNfaWQuIFRoaXMgbWFwcyBkaXJlY3RseQo+IC0gKiB0byBhbiBlbnVtIHBpcGUg dmFsdWUgdXNlZCBpbiBvdGhlciBoZWxwZXIgZnVuY3Rpb25zLgo+IC0gKi8KPiAgaW50IGttc3Rl c3RfZ2V0X3BpcGVfZnJvbV9jcnRjX2lkKGludCBmZCwgaW50IGNydGNfaWQpCj4gIHsKPiAgCXN0 cnVjdCBkcm1faTkxNV9nZXRfcGlwZV9mcm9tX2NydGNfaWQgcGZjaTsKPiBAQCAtMzE3LDExICsy MzUsNiBAQCBlcnI6Cj4gIAo+ICBzdGF0aWMgdW5zaWduZWQgbG9uZyBvcmlnX3Z0X21vZGUgPSAt MVVMOwo+ICAKPiAtLyoqCj4gLSAqIGttc3Rlc3RfcmVzdG9yZV92dF9tb2RlOgo+IC0gKgo+IC0g KiBSZXN0b3JlIHRoZSBWVCBtb2RlIGluIHVzZSBiZWZvcmUgI2ttc3Rlc3Rfc2V0X3Z0X2dyYXBo aWNzX21vZGUgd2FzIGNhbGxlZC4KPiAtICovCj4gIHZvaWQga21zdGVzdF9yZXN0b3JlX3Z0X21v ZGUodm9pZCkKPiAgewo+ICAJbG9uZyByZXQ7Cj4gQEAgLTMzNSwxNiArMjQ4LDYgQEAgdm9pZCBr bXN0ZXN0X3Jlc3RvcmVfdnRfbW9kZSh2b2lkKQo+ICAJfQo+ICB9Cj4gIAo+IC0vKioKPiAtICog a21zdGVzdF9zZXRfdnRfZ3JhcGhpY3NfbW9kZToKPiAtICoKPiAtICogU2V0cyB0aGUgY29udHJv bGxpbmcgVlQgKGlmIGF2YWlsYWJsZSkgaW50byBncmFwaGljcy9yYXcgbW9kZSBhbmQgaW5zdGFs bHMKPiAtICogYW4gaWd0IGV4aXQgaGFuZGxlciB0byBzZXQgdGhlIFZUIGJhY2sgdG8gdGV4dCBt b2RlIG9uIGV4aXQuIFVzZQo+IC0gKiAja21zdGVzdF9yZXN0b3JlX3Z0X21vZGUgdG8gcmVzdG9y ZSB0aGUgcHJldmlvdXMgVlQgbW9kZSBtYW51YWxseS4KPiAtICoKPiAtICogQWxsIGttcyB0ZXN0 cyBtdXN0IGNhbGwgdGhpcyBmdW5jdGlvbiB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZmJjb24gZG9l c24ndAo+IC0gKiBpbnRlcmZlcmUgYnkgZS5nLiBibGFua2luZyB0aGUgc2NyZWVuLgo+IC0gKi8K PiAgdm9pZCBrbXN0ZXN0X3NldF92dF9ncmFwaGljc19tb2RlKHZvaWQpCj4gIHsKPiAgCWxvbmcg cmV0Owo+IEBAIC0zNjcsMTYgKzI3MCw2IEBAIHN0YXRpYyB2b2lkIHJlc2V0X2Nvbm5lY3RvcnNf YXRfZXhpdChpbnQgc2lnKQo+ICAJaWd0X3Jlc2V0X2Nvbm5lY3RvcnMoKTsKPiAgfQo+ICAKPiAt LyoqCj4gLSAqIGttc3Rlc3RfZm9yY2VfY29ubmVjdG9yOgo+IC0gKiBAZmQ6IGRybSBmaWxlIGRl c2NyaXB0b3IKPiAtICogQGNvbm5lY3RvcjogY29ubmVjdG9yCj4gLSAqIEBzdGF0ZTogc3RhdGUg dG8gZm9yY2Ugb24gQGNvbm5lY3Rvcgo+IC0gKgo+IC0gKiBGb3JjZSB0aGUgc3BlY2lmaWVkIHN0 YXRlIG9uIHRoZSBzcGVjaWZpZWQgY29ubmVjdG9yLgo+IC0gKgo+IC0gKiBSZXR1cm5zOiB0cnVl IG9uIHN1Y2Nlc3MKPiAtICovCj4gIGJvb2wga21zdGVzdF9mb3JjZV9jb25uZWN0b3IoaW50IGRy bV9mZCwgZHJtTW9kZUNvbm5lY3RvciAqY29ubmVjdG9yLAo+ICAJCQkgICAgIGVudW0ga21zdGVz dF9mb3JjZV9jb25uZWN0b3Jfc3RhdGUgc3RhdGUpCj4gIHsKPiBAQCAtNDU5LDE4ICszNTIsNiBA QCBib29sIGttc3Rlc3RfZm9yY2VfY29ubmVjdG9yKGludCBkcm1fZmQsIGRybU1vZGVDb25uZWN0 b3IgKmNvbm5lY3RvciwKPiAgCXJldHVybiAocmV0ID09IC0xKSA/IGZhbHNlIDogdHJ1ZTsKPiAg fQo+ICAKPiAtLyoqCj4gLSAqIGttc3Rlc3RfZm9yY2VfZWRpZDoKPiAtICogQGRybV9mZDogZHJt IGZpbGUgZGVzY3JpcHRvcgo+IC0gKiBAY29ubmVjdG9yOiBjb25uZWN0b3IgdG8gc2V0IEBlZGlk IG9uCj4gLSAqIEBlZGlkOiBBbiBFRElEIGRhdGEgYmxvY2sKPiAtICogQGxlbmd0aDogbGVuZ3Ro IG9mIHRoZSBFRElEIGRhdGEuICNFRElEX0xFTkdUSCBkZWZpbmVzIHRoZSBzdGFuZGFyZCBFRElE Cj4gLSAqIGxlbmd0aAo+IC0gKgo+IC0gKiBTZXQgdGhlIEVESUQgZGF0YSBvbiBAY29ubmVjdG9y IHRvIEBlZGlkLiBTZWUgYWxzbyAjaWd0X2ttc19nZXRfYmFzZV9lZGlkLgo+IC0gKgo+IC0gKiBJ ZiBAbGVuZ3RoIGlzIHplcm8sIHRoZSBmb3JjZWQgRURJRCB3aWxsIGJlIHJlbW92ZWQuCj4gLSAq Lwo+ICB2b2lkIGttc3Rlc3RfZm9yY2VfZWRpZChpbnQgZHJtX2ZkLCBkcm1Nb2RlQ29ubmVjdG9y ICpjb25uZWN0b3IsCj4gIAkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVkaWQsIHNpemVfdCBsZW5n dGgpCj4gIHsKPiBAQCAtNDk5LDE2ICszODAsNiBAQCB2b2lkIGttc3Rlc3RfZm9yY2VfZWRpZChp bnQgZHJtX2ZkLCBkcm1Nb2RlQ29ubmVjdG9yICpjb25uZWN0b3IsCj4gIAlpZ3RfYXNzZXJ0KHJl dCAhPSAtMSk7Cj4gIH0KPiAgCj4gLS8qKgo+IC0gKiBrbXN0ZXN0X2dldF9jb25uZWN0b3JfZGVm YXVsdF9tb2RlOgo+IC0gKiBAZHJtX2ZkOiBEUk0gZmQKPiAtICogQGNvbm5lY3RvcjogbGliZHJt IGNvbm5lY3Rvcgo+IC0gKiBAbW9kZTogbGliZHJtIG1vZGUKPiAtICoKPiAtICogUmV0cmlldmVz IHRoZSBkZWZhdWx0IG1vZGUgZm9yIEBjb25uZWN0b3IgYW5kIHN0b3JlcyBpdCBpbiBAbW9kZS4K PiAtICoKPiAtICogUmV0dXJuczogdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvbiBmYWlsdXJlCj4g LSAqLwo+ICBib29sIGttc3Rlc3RfZ2V0X2Nvbm5lY3Rvcl9kZWZhdWx0X21vZGUoaW50IGRybV9m ZCwgZHJtTW9kZUNvbm5lY3RvciAqY29ubmVjdG9yLAo+ICAJCQkJCWRybU1vZGVNb2RlSW5mbyAq bW9kZSkKPiAgewo+IEBAIC01MzIsMTYgKzQwMyw2IEBAIGJvb2wga21zdGVzdF9nZXRfY29ubmVj dG9yX2RlZmF1bHRfbW9kZShpbnQgZHJtX2ZkLCBkcm1Nb2RlQ29ubmVjdG9yICpjb25uZWN0b3Is Cj4gIAlyZXR1cm4gdHJ1ZTsKPiAgfQo+ICAKPiAtLyoqCj4gLSAqIGttc3Rlc3RfZ2V0X2Nvbm5l Y3Rvcl9jb25maWc6Cj4gLSAqIEBkcm1fZmQ6IERSTSBmZAo+IC0gKiBAY29ubmVjdG9yX2lkOiBE Uk0gY29ubmVjdG9yIGlkCj4gLSAqIEBjcnRjX2lkeF9tYXNrOiBtYXNrIG9mIGFsbG93ZWQgRFJN IENSVEMgaW5kaWNlcwo+IC0gKiBAY29uZmlnOiBzdHJ1Y3R1cmUgZmlsbGVkIHdpdGggdGhlIHBv c3NpYmxlIGNvbmZpZ3VyYXRpb24KPiAtICoKPiAtICogVGhpcyB0cmllcyB0byBmaW5kIGEgc3Vp dGFibGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGdpdmVuIGNvbm5lY3RvciBhbmQgQ1JUQwo+IC0g KiBjb25zdHJhaW50IGFuZCBmaWxscyBpdCBpbnRvIEBjb25maWcuCj4gLSAqLwo+ICBib29sIGtt c3Rlc3RfZ2V0X2Nvbm5lY3Rvcl9jb25maWcoaW50IGRybV9mZCwgdWludDMyX3QgY29ubmVjdG9y X2lkLAo+ICAJCQkJICB1bnNpZ25lZCBsb25nIGNydGNfaWR4X21hc2ssCj4gIAkJCQkgIHN0cnVj dCBrbXN0ZXN0X2Nvbm5lY3Rvcl9jb25maWcgKmNvbmZpZykKPiBAQCAtNjMzLDEyICs0OTQsNiBA QCBlcnIxOgo+ICAJcmV0dXJuIGZhbHNlOwo+ICB9Cj4gIAo+IC0vKioKPiAtICoga21zdGVzdF9m cmVlX2Nvbm5lY3Rvcl9jb25maWc6Cj4gLSAqIEBjb25maWc6IGNvbm5lY3RvciBjb25maWd1cmF0 aW9uIHN0cnVjdHVyZQo+IC0gKgo+IC0gKiBGcmVlIGFueSByZXNvdXJjZXMgaW4gQGNvbmZpZyBh bGxvY2F0ZWQgaW4ga21zdGVzdF9nZXRfY29ubmVjdG9yX2NvbmZpZygpLgo+IC0gKi8KPiAgdm9p ZCBrbXN0ZXN0X2ZyZWVfY29ubmVjdG9yX2NvbmZpZyhzdHJ1Y3Qga21zdGVzdF9jb25uZWN0b3Jf Y29uZmlnICpjb25maWcpCj4gIHsKPiAgCWRybU1vZGVGcmVlQ3J0Yyhjb25maWctPmNydGMpOwo+ IEBAIC02NDYsMTQgKzUwMSw2IEBAIHZvaWQga21zdGVzdF9mcmVlX2Nvbm5lY3Rvcl9jb25maWco c3RydWN0IGttc3Rlc3RfY29ubmVjdG9yX2NvbmZpZyAqY29uZmlnKQo+ICAJZHJtTW9kZUZyZWVD b25uZWN0b3IoY29uZmlnLT5jb25uZWN0b3IpOwo+ICB9Cj4gIAo+IC0vKioKPiAtICoga21zdGVz dF9zZXRfY29ubmVjdG9yX2RwbXM6Cj4gLSAqIEBmZDogRFJNIGZkCj4gLSAqIEBjb25uZWN0b3I6 IGxpYmRybSBjb25uZWN0b3IKPiAtICogQG1vZGU6IERSTSBEUE1TIHZhbHVlCj4gLSAqCj4gLSAq IFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgRFBNUyBzZXR0aW5nIG9mIEBjb25uZWN0b3IgdG8gQG1v ZGUuCj4gLSAqLwo+ICB2b2lkIGttc3Rlc3Rfc2V0X2Nvbm5lY3Rvcl9kcG1zKGludCBmZCwgZHJt TW9kZUNvbm5lY3RvciAqY29ubmVjdG9yLCBpbnQgbW9kZSkKPiAgewo+ICAJaW50IGksIGRwbXMg PSAwOwo+IEBAIC02ODIsMjEgKzUyOSw2IEBAIHZvaWQga21zdGVzdF9zZXRfY29ubmVjdG9yX2Rw bXMoaW50IGZkLCBkcm1Nb2RlQ29ubmVjdG9yICpjb25uZWN0b3IsIGludCBtb2RlKQo+ICAJCQkJ CSAgICAgICBkcG1zLCBtb2RlKSA9PSAwKTsKPiAgfQo+ICAKPiAtLyoqCj4gLSAqIGttc3Rlc3Rf Z2V0X3Byb3BlcnR5Ogo+IC0gKiBAZHJtX2ZkOiBkcm0gZmlsZSBkZXNjcmlwdG9yCj4gLSAqIEBv YmplY3RfaWQ6IG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIHdlJ3JlIGdvaW5nIHRvIGdldAo+IC0g KiBAb2JqZWN0X3R5cGU6IHR5cGUgb2Ygb2JqX2lkIChEUk1fTU9ERV9PQkpFQ1RfKikKPiAtICog QG5hbWU6IG5hbWUgb2YgdGhlIHByb3BlcnR5IHdlJ3JlIGdvaW5nIHRvIGdldAo+IC0gKiBAcHJv cF9pZDogaWYgbm90IE5VTEwsIHJldHVybnMgdGhlIHByb3BlcnR5IGlkCj4gLSAqIEB2YWx1ZTog aWYgbm90IE5VTEwsIHJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlCj4gLSAqIEBwcm9wOiBpZiBu b3QgTlVMTCwgcmV0dXJucyB0aGUgcHJvcGVydHksIGFuZCB0aGUgY2FsbGVyIHdpbGwgaGF2ZSB0 byBmcmVlCj4gLSAqICAgICAgICBpdCBtYW51YWxseS4KPiAtICoKPiAtICogRmluZHMgYSBwcm9w ZXJ0eSB3aXRoIHRoZSBnaXZlbiBuYW1lIG9uIHRoZSBnaXZlbiBvYmplY3QuCj4gLSAqCj4gLSAq IFJldHVybnM6IHRydWUgaW4gY2FzZSB3ZSBmb3VuZCBzb21ldGhpbmcuCj4gLSAqLwo+ICBib29s Cj4gIGttc3Rlc3RfZ2V0X3Byb3BlcnR5KGludCBkcm1fZmQsIHVpbnQzMl90IG9iamVjdF9pZCwg dWludDMyX3Qgb2JqZWN0X3R5cGUsCj4gIAkJICAgICBjb25zdCBjaGFyICpuYW1lLCB1aW50MzJf dCAqcHJvcF9pZCAvKiBvdXQgKi8sCj4gQEAgLTczNCwxNiArNTY2LDYgQEAga21zdGVzdF9nZXRf cHJvcGVydHkoaW50IGRybV9mZCwgdWludDMyX3Qgb2JqZWN0X2lkLCB1aW50MzJfdCBvYmplY3Rf dHlwZSwKPiAgCXJldHVybiBmb3VuZDsKPiAgfQo+ICAKPiAtLyoqCj4gLSAqIGttc3Rlc3RfZWRp ZF9hZGRfM2Q6Cj4gLSAqIEBlZGlkOiBhbiBleGlzdGluZyB2YWxpZCBlZGlkIGJsb2NrCj4gLSAq IEBsZW5ndGg6IGxlbmd0aCBvZiBAZWRpZAo+IC0gKiBAbmV3X2VkaWRfcHRyOiBwb2ludGVyIHRv IHdoZXJlIHRoZSBuZXcgZWRpZCB3aWxsIGJlIHBsYWNlZAo+IC0gKiBAbmV3X2xlbmd0aDogcG9p bnRlciB0byB0aGUgc2l6ZSBvZiB0aGUgbmV3IGVkaWQKPiAtICoKPiAtICogTWFrZXMgYSBjb3B5 IG9mIGFuIGV4aXN0aW5nIGVkaWQgYmxvY2sgYW5kIGFkZHMgYW4gZXh0ZW5zaW9uIGluZGljYXRp bmcKPiAtICogc3RlcmVvIDNEIGNhcGFiaWxpdGllcy4KPiAtICovCj4gIHZvaWQga21zdGVzdF9l ZGlkX2FkZF8zZChjb25zdCB1bnNpZ25lZCBjaGFyICplZGlkLCBzaXplX3QgbGVuZ3RoLAo+ICAJ CQkgdW5zaWduZWQgY2hhciAqbmV3X2VkaWRfcHRyW10sIHNpemVfdCAqbmV3X2xlbmd0aCkKPiAg ewo+IEBAIC04MTQsMTMgKzYzNiw2IEBAIHZvaWQga21zdGVzdF9lZGlkX2FkZF8zZChjb25zdCB1 bnNpZ25lZCBjaGFyICplZGlkLCBzaXplX3QgbGVuZ3RoLAo+ICAJbmV3X2VkaWRbbGVuZ3RoICsg MTI3XSA9IDI1NiAtIHN1bTsKPiAgfQo+ICAKPiAtLyoqCj4gLSAqIGttc3Rlc3RfdW5zZXRfYWxs X2NydGNzOgo+IC0gKiBAZHJtX2ZkOiB0aGUgRFJNIGZkCj4gLSAqIEByZXNvdXJjZXM6IGxpYmRy bSByZXNvdXJjZXMgcG9pbnRlcgo+IC0gKgo+IC0gKiBEaXNhYmxlcyBhbGwgdGhlIHNjcmVlbnMu Cj4gLSAqLwo+ICB2b2lkIGttc3Rlc3RfdW5zZXRfYWxsX2NydGNzKGludCBkcm1fZmQsIGRybU1v ZGVSZXNQdHIgcmVzb3VyY2VzKQo+ICB7Cj4gIAlpbnQgaSwgcmM7Cj4gQEAgLTk2NCwxNSArNzc5 LDYgQEAgc3RhdGljIGludCBnZXRfZHJtX3BsYW5lX3R5cGUoaW50IGRybV9mZCwgdWludDMyX3Qg cGxhbmVfaWQpCj4gIAlyZXR1cm4gRFJNX1BMQU5FX1RZUEVfT1ZFUkxBWTsKPiAgfQo+ICAKPiAt LyoqCj4gLSAqIGlndF9kaXNwbGF5X2luaXQ6Cj4gLSAqIEBkaXNwbGF5OiBhIHBvaW50ZXIgdG8g YW4gI2lndF9kaXNwbGF5X3Qgc3RydWN0dXJlCj4gLSAqIEBkcm1fZmQ6IGEgZHJtIGZpbGUgZGVz Y3JpcHRvcgo+IC0gKgo+IC0gKiBJbml0aWFsaXplIEBkaXNwbGF5IGFuZCBhbGxvY2F0ZSB0aGUg dmFyaW91cyByZXNvdXJjZXMgcmVxdWlyZWQuIFVzZQo+IC0gKiAjaWd0X2Rpc3BsYXlfZmluaSB0 byByZWxlYXNlIHRoZSByZXNvdXJjZXMgd2hlbiB0aGV5IGFyZSBubyBsb25nZXIgcmVxdWlyZWQu Cj4gLSAqCj4gLSAqLwo+ICB2b2lkIGlndF9kaXNwbGF5X2luaXQoaWd0X2Rpc3BsYXlfdCAqZGlz cGxheSwgaW50IGRybV9mZCkKPiAgewo+ICAJZHJtTW9kZVJlcyAqcmVzb3VyY2VzOwo+IEBAIC0x MTcxLDEzICs5NzcsNiBAQCBzdGF0aWMgdm9pZCBpZ3Rfb3V0cHV0X2ZpbmkoaWd0X291dHB1dF90 ICpvdXRwdXQpCj4gIAlmcmVlKG91dHB1dC0+bmFtZSk7Cj4gIH0KPiAgCj4gLS8qKgo+IC0gKiBp Z3RfZGlzcGxheV9maW5pOgo+IC0gKiBAZGlzcGxheTogYSBwb2ludGVyIHRvIGFuICNpZ3RfZGlz cGxheV90IHN0cnVjdHVyZQo+IC0gKgo+IC0gKiBSZWxlYXNlIGFueSByZXNvdXJjZXMgYXNzb2Np YXRlZCB3aXRoIEBkaXNwbGF5LiBUaGlzIGRvZXMgbm90IGZyZWUgQGRpc3BsYXkKPiAtICogaXRz ZWxmLgo+IC0gKi8KPiAgdm9pZCBpZ3RfZGlzcGxheV9maW5pKGlndF9kaXNwbGF5X3QgKmRpc3Bs YXkpCj4gIHsKPiAgCWludCBpOwo+IEBAIC0xNjQ4LDI0ICsxNDQ3LDYgQEAgc3RhdGljIGludCBk b19kaXNwbGF5X2NvbW1pdChpZ3RfZGlzcGxheV90ICpkaXNwbGF5LAo+ICAJcmV0dXJuIDA7Cj4g IH0KPiAgCj4gLS8qKgo+IC0gKiBpZ3RfZGlzcGxheV9jb21taXQyOgo+IC0gKiBAZGlzcGxheTog RFJNIGRldmljZSBoYW5kbGUKPiAtICogQHM6IENvbW1pdCBzdHlsZQo+IC0gKgo+IC0gKiBDb21t aXRzIGZyYW1lYnVmZmVyIGFuZCBwb3NpdGlvbmluZyBjaGFuZ2VzIHRvIGFsbCBwbGFuZXMgb2Yg ZWFjaCBkaXNwbGF5Cj4gLSAqIHBpcGUsIHVzaW5nIGEgc3BlY2lmaWMgQVBJIHRvIHBlcmZvcm0g dGhlIHByb2dyYW1taW5nLiAgVGhpcyBmdW5jdGlvbiBzaG91bGQKPiAtICogYmUgdXNlZCB0byBl eGVyY2lzZSBhIHNwZWNpZmljIGRyaXZlciBwcm9ncmFtbWluZyBBUEk7IGlndF9kaXNwbGF5X2Nv bW1pdAo+IC0gKiBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIGlmIHRoZSBBUEkgdXNlZCBpcyB1bmlt cG9ydGFudCB0byB0aGUgdGVzdCBiZWluZyBydW4uCj4gLSAqCj4gLSAqIFRoaXMgZnVuY3Rpb24g c2hvdWxkIG9ubHkgYmUgdXNlZCB0byBjb21taXQgY2hhbmdlcyB0aGF0IGFyZSBleHBlY3RlZCB0 bwo+IC0gKiBzdWNjZWVkLCBzaW5jZSBhbnkgZmFpbHVyZSBkdXJpbmcgdGhlIGNvbW1pdCBwcm9j ZXNzIHdpbGwgY2F1c2UgdGhlIElHVAo+IC0gKiBzdWJ0ZXN0IHRvIGZhaWwuICBUbyBjb21taXQg Y2hhbmdlcyB0aGF0IGFyZSBleHBlY3RlZCB0byBmYWlsLCB1c2UKPiAtICogQGlndF90cnlfZGlz cGxheV9jb21taXQyIGluc3RlYWQuCj4gLSAqCj4gLSAqIFJldHVybnM6IDAgdXBvbiBzdWNjZXNz LiAgVGhpcyBmdW5jdGlvbiB3aWxsIG5ldmVyIHJldHVybiB1cG9uIGZhaWx1cmUKPiAtICogc2lu Y2UgaWd0X2ZhaWwoKSBhdCBsb3dlciBsZXZlbHMgd2lsbCBsb25nam1wIG91dCBvZiBpdC4KPiAt ICovCj4gIGludCBpZ3RfZGlzcGxheV9jb21taXQyKGlndF9kaXNwbGF5X3QgKmRpc3BsYXksCj4g IAkJICAgICAgIGVudW0gaWd0X2NvbW1pdF9zdHlsZSBzKQo+ICB7Cj4gQEAgLTE2NzQsNDAgKzE0 NTUsMTEgQEAgaW50IGlndF9kaXNwbGF5X2NvbW1pdDIoaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwK PiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+IC0vKioKPiAtICogaWd0X2Rpc3BsYXlfdHJ5X2NvbW1p dDI6Cj4gLSAqIEBkaXNwbGF5OiBEUk0gZGV2aWNlIGhhbmRsZQo+IC0gKiBAczogQ29tbWl0IHN0 eWxlCj4gLSAqCj4gLSAqIEF0dGVtcHRzIHRvIGNvbW1pdCBmcmFtZWJ1ZmZlciBhbmQgcG9zaXRp b25pbmcgY2hhbmdlcyB0byBhbGwgcGxhbmVzIG9mIGVhY2gKPiAtICogZGlzcGxheSBwaXBlLiAg VGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgdXNlZCB0byBjb21taXQgY2hhbmdlcyB0aGF0IGFyZQo+ IC0gKiBleHBlY3RlZCB0byBmYWlsLCBzbyB0aGF0IHRoZSBlcnJvciBjb2RlIGNhbiBiZSBjaGVj a2VkIGZvciBjb3JyZWN0bmVzcy4KPiAtICogRm9yIGNoYW5nZXMgdGhhdCBhcmUgZXhwZWN0ZWQg dG8gc3VjY2VlZCwgdXNlIEBpZ3RfZGlzcGxheV9jb21taXQgaW5zdGVhZC4KPiAtICoKPiAtICog Tm90ZSB0aGF0IGluIG5vbi1hdG9taWMgY29tbWl0IHN0eWxlcywgbm8gZGlzcGxheSBwcm9ncmFt bWluZyB3aWxsIGJlCj4gLSAqIHBlcmZvcm1lZCBhZnRlciB0aGUgZmlyc3QgZmFpbHVyZSBpcyBl bmNvdW50ZXJlZCwgc28gb25seSBzb21lIG9mIHRoZQo+IC0gKiBvcGVyYXRpb25zIHJlcXVlc3Rl ZCBieSBhIHRlc3QgbWF5IGhhdmUgYmVlbiBjb21wbGV0ZWQuICBUZXN0cyB0aGF0IGNhdGNoCj4g LSAqIGVycm9ycyByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uIHNob3VsZCB0YWtlIGNhcmUgdG8g cmVzdG9yZSB0aGUgZGlzcGxheSB0bwo+IC0gKiBhIHNhbmUgc3RhdGUgYWZ0ZXIgYSBmYWlsdXJl IGlzIGRldGVjdGVkLgo+IC0gKgo+IC0gKiBSZXR1cm5zOiAwIHVwb24gc3VjY2Vzcywgb3RoZXJ3 aXNlIHRoZSBlcnJvciBjb2RlIG9mIHRoZSBmaXJzdCBlcnJvcgo+IC0gKiBlbmNvdW50ZXJlZC4K PiAtICovCj4gIGludCBpZ3RfZGlzcGxheV90cnlfY29tbWl0MihpZ3RfZGlzcGxheV90ICpkaXNw bGF5LCBlbnVtIGlndF9jb21taXRfc3R5bGUgcykKPiAgewo+ICAJcmV0dXJuIGRvX2Rpc3BsYXlf Y29tbWl0KGRpc3BsYXksIHMsIGZhbHNlKTsKPiAgfQo+ICAKPiAtLyoqCj4gLSAqIGlndF9kaXNw bGF5X2NvbW1pdDoKPiAtICogQGRpc3BsYXk6IERSTSBkZXZpY2UgaGFuZGxlCj4gLSAqCj4gLSAq IENvbW1pdHMgZnJhbWVidWZmZXIgYW5kIHBvc2l0aW9uaW5nIGNoYW5nZXMgdG8gYWxsIHBsYW5l cyBvZiBlYWNoIGRpc3BsYXkKPiAtICogcGlwZS4KPiAtICoKPiAtICogUmV0dXJuczogMCB1cG9u IHN1Y2Nlc3MuICBUaGlzIGZ1bmN0aW9uIHdpbGwgbmV2ZXIgcmV0dXJuIHVwb24gZmFpbHVyZQo+ IC0gKiBzaW5jZSBpZ3RfZmFpbCgpIGF0IGxvd2VyIGxldmVscyB3aWxsIGxvbmdqbXAgb3V0IG9m IGl0Lgo+IC0gKi8KPiAgaW50IGlndF9kaXNwbGF5X2NvbW1pdChpZ3RfZGlzcGxheV90ICpkaXNw bGF5KQo+ICB7Cj4gIAlyZXR1cm4gaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRf TEVHQUNZKTsKPiBAQCAtMTcyMywxNSArMTQ3NSw2IEBAIGRybU1vZGVNb2RlSW5mbyAqaWd0X291 dHB1dF9nZXRfbW9kZShpZ3Rfb3V0cHV0X3QgKm91dHB1dCkKPiAgCXJldHVybiAmb3V0cHV0LT5j b25maWcuZGVmYXVsdF9tb2RlOwo+ICB9Cj4gIAo+IC0vKioKPiAtICogaWd0X291dHB1dF9vdmVy cmlkZV9tb2RlOgo+IC0gKiBAb3V0cHV0OiBPdXRwdXQgb2Ygd2hpY2ggdGhlIG1vZGUgd2lsbCBi ZSBvdmVycmlkZGVuCj4gLSAqIEBtb2RlOiBOZXcgbW9kZQo+IC0gKgo+IC0gKiBPdmVycmlkZXMg dGhlIG91dHB1dCdzIG1vZGUgd2l0aCBAbW9kZSwgc28gdGhhdCBpdCBpcyB1c2VkIGluc3RlYWQg b2YgdGhlCj4gLSAqIG1vZGUgb2J0YWluZWQgd2l0aCBnZXQgY29ubmVjdG9ycy4gTm90ZSB0aGF0 IHRoZSBtb2RlIGlzIHVzZWQgd2l0aG91dAo+IC0gKiBjaGVja2luZyBpZiB0aGUgb3V0cHV0IHN1 cHBvcnRzIGl0LCBzbyB0aGlzIG1pZ2h0IGxlYWQgdG8gdW5leHBlY3RlZCByZXN1bHRzLgo+IC0g Ki8KPiAgdm9pZCBpZ3Rfb3V0cHV0X292ZXJyaWRlX21vZGUoaWd0X291dHB1dF90ICpvdXRwdXQs IGRybU1vZGVNb2RlSW5mbyAqbW9kZSkKPiAgewo+ICAJb3V0cHV0LT5vdmVycmlkZV9tb2RlID0g Km1vZGU7Cj4gQEAgLTE4MDMsMTYgKzE1NDYsNiBAQCB2b2lkIGlndF9wbGFuZV9zZXRfcG9zaXRp b24oaWd0X3BsYW5lX3QgKnBsYW5lLCBpbnQgeCwgaW50IHkpCj4gIAlwbGFuZS0+cG9zaXRpb25f Y2hhbmdlZCA9IHRydWU7Cj4gIH0KPiAgCj4gLS8qKgo+IC0gKiBpZ3RfcGxhbmVfc2V0X3NpemU6 Cj4gLSAqIEBwbGFuZTogcGxhbmUgcG9pbnRlciBmb3Igd2hpY2ggc2l6ZSB0byBiZSBzZXQKPiAt ICogQHc6IHdpZHRoCj4gLSAqIEBoOiBoZWlnaHQKPiAtICoKPiAtICogVGhpcyBmdW5jdGlvbiBz ZXRzIHdpZHRoIGFuZCBoZWlnaHQgZm9yIHJlcXVlc3RlZCBwbGFuZS4KPiAtICogTmV3IHNpemUg d2lsbCBiZSBjb21taXR0ZWQgYXQgcGxhbmUgY29tbWl0IHRpbWUgdmlhCj4gLSAqIGRybU1vZGVT ZXRQbGFuZSgpLgo+IC0gKi8KPiAgdm9pZCBpZ3RfcGxhbmVfc2V0X3NpemUoaWd0X3BsYW5lX3Qg KnBsYW5lLCBpbnQgdywgaW50IGgpCj4gIHsKPiAgCWlndF9waXBlX3QgKnBpcGUgPSBwbGFuZS0+ cGlwZTsKPiBAQCAtMTgyNywxNiArMTU2MCw2IEBAIHZvaWQgaWd0X3BsYW5lX3NldF9zaXplKGln dF9wbGFuZV90ICpwbGFuZSwgaW50IHcsIGludCBoKQo+ICAJcGxhbmUtPnNpemVfY2hhbmdlZCA9 IHRydWU7Cj4gIH0KPiAgCj4gLS8qKgo+IC0gKiBpZ3RfZmJfc2V0X3Bvc2l0aW9uOgo+IC0gKiBA ZmI6IGZyYW1lYnVmZmVyIHBvaW50ZXIKPiAtICogQHBsYW5lOiBwbGFuZQo+IC0gKiBAeDogWCBw b3NpdGlvbgo+IC0gKiBAeTogWSBwb3NpdGlvbgo+IC0gKgo+IC0gKiBUaGlzIGZ1bmN0aW9uIHNl dHMgcG9zaXRpb24gZm9yIHJlcXVlc3RlZCBmcmFtZWJ1ZmZlciBhcyBzcmMgdG8gcGxhbmUuCj4g LSAqIE5ldyBwb3NpdGlvbiB3aWxsIGJlIGNvbW1pdHRlZCBhdCBwbGFuZSBjb21taXQgdGltZSB2 aWEgZHJtTW9kZVNldFBsYW5lKCkuCj4gLSAqLwo+ICB2b2lkIGlndF9mYl9zZXRfcG9zaXRpb24o c3RydWN0IGlndF9mYiAqZmIsIGlndF9wbGFuZV90ICpwbGFuZSwKPiAgCXVpbnQzMl90IHgsIHVp bnQzMl90IHkpCj4gIHsKPiBAQCAtMTg1MiwxNyArMTU3NSw2IEBAIHZvaWQgaWd0X2ZiX3NldF9w b3NpdGlvbihzdHJ1Y3QgaWd0X2ZiICpmYiwgaWd0X3BsYW5lX3QgKnBsYW5lLAo+ICAJcGxhbmUt PmZiX2NoYW5nZWQgPSB0cnVlOwo+ICB9Cj4gIAo+IC0vKioKPiAtICogaWd0X2ZiX3NldF9zaXpl Ogo+IC0gKiBAZmI6IGZyYW1lYnVmZmVyIHBvaW50ZXIKPiAtICogQHBsYW5lOiBwbGFuZQo+IC0g KiBAdzogd2lkdGgKPiAtICogQGg6IGhlaWdodAo+IC0gKgo+IC0gKiBUaGlzIGZ1bmN0aW9uIHNl dHMgZmV0Y2ggcmVjdCBzaXplIGZyb20gcmVxdWVzdGVkIGZyYW1lYnVmZmVyIGFzIHNyYwo+IC0g KiB0byBwbGFuZS4gTmV3IHNpemUgd2lsbCBiZSBjb21taXR0ZWQgYXQgcGxhbmUgY29tbWl0IHRp bWUgdmlhCj4gLSAqIGRybU1vZGVTZXRQbGFuZSgpLgo+IC0gKi8KPiAgdm9pZCBpZ3RfZmJfc2V0 X3NpemUoc3RydWN0IGlndF9mYiAqZmIsIGlndF9wbGFuZV90ICpwbGFuZSwKPiAgCXVpbnQzMl90 IHcsIHVpbnQzMl90IGgpCj4gIHsKPiBAQCAtMTkyMywxNiArMTYzNSw2IEBAIHZvaWQgaWd0X3Bs YW5lX3NldF9yb3RhdGlvbihpZ3RfcGxhbmVfdCAqcGxhbmUsIGlndF9yb3RhdGlvbl90IHJvdGF0 aW9uKQo+ICAJcGxhbmUtPnJvdGF0aW9uX2NoYW5nZWQgPSB0cnVlOwo+ICB9Cj4gIAo+IC0vKioK PiAtICogaWd0X2NydGNfc2V0X2JhY2tncm91bmQ6Cj4gLSAqIEBwaXBlOiBwaXBlIHBvaW50ZXIg dG8gd2hpY2ggYmFja2dyb3VuZCBjb2xvciB0byBiZSBzZXQKPiAtICogQGJhY2tncm91bmQ6IGJh Y2tncm91bmQgY29sb3IgdmFsdWUgaW4gQkdSIDE2YnBjCj4gLSAqCj4gLSAqIFNldHMgYmFja2dy b3VuZCBjb2xvciBmb3IgcmVxdWVzdGVkIHBpcGUuIENvbG9yIHZhbHVlIHByb3ZpZGVkIGhlcmUK PiAtICogd2lsbCBiZSBhY3R1YWxseSBzdWJtaXR0ZWQgYXQgb3V0cHV0IGNvbW1pdCB0aW1lIHZp YSAiYmFja2dyb3VuZF9jb2xvciIKPiAtICogcHJvcGVydHkuCj4gLSAqIEZvciBleGFtcGxlIHRv IGdldCByZWQgYXMgYmFja2dyb3VuZCwgc2V0IGJhY2tncm91bmQgPSAweDAwMDAwMDAwRkZGRi4K PiAtICovCj4gIHZvaWQgaWd0X2NydGNfc2V0X2JhY2tncm91bmQoaWd0X3BpcGVfdCAqcGlwZSwg dWludDY0X3QgYmFja2dyb3VuZCkKPiAgewo+ICAJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9IHBp cGUtPmRpc3BsYXk7Cj4gQEAgLTE5NDYsNyArMTY0OCw2IEBAIHZvaWQgaWd0X2NydGNfc2V0X2Jh Y2tncm91bmQoaWd0X3BpcGVfdCAqcGlwZSwgdWludDY0X3QgYmFja2dyb3VuZCkKPiAgCXBpcGUt PmJhY2tncm91bmRfY2hhbmdlZCA9IHRydWU7Cj4gIH0KPiAgCj4gLQo+ICB2b2lkIGlndF93YWl0 X2Zvcl92YmxhbmsoaW50IGRybV9mZCwgZW51bSBwaXBlIHBpcGUpCj4gIHsKPiAgCWRybVZCbGFu ayB3YWl0X3ZibDsKPiBAQCAtMTk2MCwxNSArMTY2MSw2IEBAIHZvaWQgaWd0X3dhaXRfZm9yX3Zi bGFuayhpbnQgZHJtX2ZkLCBlbnVtIHBpcGUgcGlwZSkKPiAgCWlndF9hc3NlcnQoZHJtV2FpdFZC bGFuayhkcm1fZmQsICZ3YWl0X3ZibCkgPT0gMCk7Cj4gIH0KPiAgCj4gLS8qKgo+IC0gKiBpZ3Rf ZW5hYmxlX2Nvbm5lY3RvcnM6Cj4gLSAqCj4gLSAqIEZvcmNlIGNvbm5lY3RvcnMgdG8gYmUgZW5h YmxlZCB3aGVyZSB0aGlzIGlzIGtub3duIHRvIHdvcmsgd2VsbC4gVXNlCj4gLSAqICNpZ3RfcmVz ZXRfY29ubmVjdG9ycyB0byByZXZlcnQgdGhlIGNoYW5nZXMuCj4gLSAqCj4gLSAqIEFuIGV4aXQg aGFuZGxlciBpcyBpbnN0YWxsZWQgdG8gZW5zdXJlIGNvbm5lY3RvcnMgYXJlIHJlc2V0IHdoZW4g dGhlIHRlc3QKPiAtICogZXhpdHMuCj4gLSAqLwo+ICB2b2lkIGlndF9lbmFibGVfY29ubmVjdG9y cyh2b2lkKQo+ICB7Cj4gIAlkcm1Nb2RlUmVzICpyZXM7Cj4gQEAgLTE5ODMsOCArMTY3NSw4IEBA IHZvaWQgaWd0X2VuYWJsZV9jb25uZWN0b3JzKHZvaWQpCj4gIAo+ICAJCWMgPSBkcm1Nb2RlR2V0 Q29ubmVjdG9yQ3VycmVudChkcm1fZmQsIHJlcy0+Y29ubmVjdG9yc1tpXSk7Cj4gIAo+IC0JCS8q IGRvbid0IGF0dGVtcHQgdG8gZm9yY2UgY29ubmVjdG9ycyB0aGF0IGFyZSBhbHJlYWR5IGNvbm5l Y3RlZAo+IC0JCSAqLwo+ICsJCS8qIGRvbid0IGF0dGVtcHQgdG8gZm9yY2UgY29ubmVjdG9ycyB0 aGF0Cj4gKwkJICogYXJlIGFscmVhZHkgY29ubmVjdGVkICovCj4gIAkJaWYgKGMtPmNvbm5lY3Rp b24gPT0gRFJNX01PREVfQ09OTkVDVEVEKQo+ICAJCQljb250aW51ZTsKPiAgCj4gQEAgLTIwMDEs MTEgKzE2OTMsNiBAQCB2b2lkIGlndF9lbmFibGVfY29ubmVjdG9ycyh2b2lkKQo+ICAJY2xvc2Uo ZHJtX2ZkKTsKPiAgfQo+ICAKPiAtLyoqCj4gLSAqIGlndF9yZXNldF9jb25uZWN0b3JzOgo+IC0g Kgo+IC0gKiBSZW1vdmUgYW55IGZvcmNlZCBzdGF0ZSBmcm9tIHRoZSBjb25uZWN0b3JzLgo+IC0g Ki8KPiAgdm9pZCBpZ3RfcmVzZXRfY29ubmVjdG9ycyh2b2lkKQo+ICB7Cj4gIAljaGFyICoqdG1w Owo+IGRpZmYgLS1naXQgYS9saWIvaWd0X2ttcy5oIGIvbGliL2lndF9rbXMuaAo+IGluZGV4IDk0 ZjMxNWYuLjJjYzhhM2IgMTAwNjQ0Cj4gLS0tIGEvbGliL2lndF9rbXMuaAo+ICsrKyBiL2xpYi9p Z3Rfa21zLmgKPiBAQCAtMjUsNiArMjUsMzAgQEAKPiAgICogCURhbWllbiBMZXNwaWF1IDxkYW1p ZW4ubGVzcGlhdUBpbnRlbC5jb20+Cj4gICAqLwo+ICAKPiArLyoqCj4gKyAqIFNFQ1RJT046aWd0 X2ttcwo+ICsgKiBAc2hvcnRfZGVzY3JpcHRpb246IEtlcm5lbCBtb2Rlc2V0dGluZyBzdXBwb3J0 IGxpYnJhcnkKPiArICogQHRpdGxlOiBLTVMKPiArICogQGluY2x1ZGU6IGlndC5oCj4gKyAqCj4g KyAqIFRoaXMgbGlicmFyeSBwcm92aWRlcyBzdXBwb3J0IHRvIGVudW1lcmF0ZSBhbmQgc2V0IG1v ZGVzZXQgY29uZmlndXJhdGlvbnMuCj4gKyAqCj4gKyAqIFRoZXJlIGFyZSB0d28gcGFydHMgaW4g dGhpcyBsaWJyYXJ5OiBGaXJzdCB0aGUgbG93IGxldmVsIGhlbHBlciBmdW5jdGlvbgo+ICsgKiB3 aGljaCBkaXJlY3RseSBidWlsZCBvbiB0b3Agb2YgcmF3IGlvY3RscyBvciB0aGUgaW50ZXJmYWNl cyBwcm92aWRlZCBieQo+ICsgKiBsaWJkcm0uIFRob3NlIGZ1bmN0aW9ucyBhbGwgaGF2ZSBhIGtt c3Rlc3RfIHByZWZpeC4KPiArICoKPiArICogVGhlIHNlY29uZCBwYXJ0IGlzIGEgaGlnaC1sZXZl bCBsaWJyYXJ5IHRvIG1hbmFnZSBtb2Rlc2V0IGNvbmZpZ3VyYXRpb25zCj4gKyAqIHdoaWNoIGFi c3RyYWN0cyBhd2F5IHNvbWUgb2YgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIGxpa2UgdGhlIGRpZmZl cmVuY2UKPiArICogYmV0d2VlbiBsZWdhY3kgYW5kIHVuaXZlcnNhbCBwbGFuZSBzdXBwb3J0IGZv ciBzZXR0aW5nIGN1cnNvcnMgb3IgaW4gdGhlCj4gKyAqIGZ1dHVyZSB0aGUgZGlmZmVyZW5jZSBi ZXR3ZWVuIGxlZ2FjeSBhbmQgYXRvbWljIGNvbW1pdC4gVGhlc2UgaGlnaC1sZXZlbAo+ICsgKiBm dW5jdGlvbnMgaGF2ZSBhbGwgaWd0XyBwcmVmaXhlcy4gVGhpcyBwYXJ0IGlzIHN0aWxsIHZlcnkg bXVjaCB3b3JrIGluCj4gKyAqIHByb2dyZXNzIGFuZCBzbyBhbHNvIGxhY2tzIGEgYml0IGRvY3Vt ZW50YXRpb24gZm9yIHRoZSBpbmRpdmlkdWFsIGZ1bmN0aW9ucy4KPiArICoKPiArICogTm90ZSB0 aGF0IHRoaXMgbGlicmFyeSdzIGhlYWRlciBwdWxscyBpbiB0aGUgW2ktZy10Cj4gKyAqIGZyYW1l YnVmZmVyXShpbnRlbC1ncHUtdG9vbHMtRnJhbWVidWZmZXIuaHRtbCkgbGlicmFyeSBhcyBhCj4g KyAqIGRlcGVuZGVuY3kuCj4gKyAqLwo+ICsKPiAgI2lmbmRlZiBfX0lHVF9LTVNfSF9fCj4gICNk ZWZpbmUgX19JR1RfS01TX0hfXwo+ICAKPiBAQCAtMzcsNyArNjEsNiBAQAo+ICAjaW5jbHVkZSAi aWd0X2ZiLmgiCj4gICNpbmNsdWRlICJpb2N0bF93cmFwcGVycy5oIgo+ICAKPiAtLyogTG93LWxl dmVsIGhlbHBlcnMgd2l0aCBrbXN0ZXN0XyBwcmVmaXggKi8KPiAgCj4gIGVudW0gcGlwZSB7Cj4g ICAgICAgICAgUElQRV9BTlkgPSAtMSwKPiBAQCAtNDYsNyArNjksNiBAQCBlbnVtIHBpcGUgewo+ ICAgICAgICAgIFBJUEVfQywKPiAgICAgICAgICBJOTE1X01BWF9QSVBFUwo+ICB9Owo+IC1jb25z dCBjaGFyICprbXN0ZXN0X3BpcGVfbmFtZShlbnVtIHBpcGUgcGlwZSk7Cj4gIAo+ICAvKiBXZSBu YW1lc3BhY2UgdGhpcyBlbnVtIHRvIG5vdCBjb25mbGljdCB3aXRoIHRoZSBBbmRyb2lkIGk5MTVf ZHJtLmggKi8KPiAgZW51bSBpZ3RfcGxhbmUgewo+IEBAIC01Nyw4ICs3OSw2IEBAIGVudW0gaWd0 X3BsYW5lIHsKPiAgICAgICAgICBJR1RfUExBTkVfQ1VSU09SLAo+ICB9Owo+ICAKPiAtY29uc3Qg Y2hhciAqa21zdGVzdF9wbGFuZV9uYW1lKGVudW0gaWd0X3BsYW5lIHBsYW5lKTsKPiAtCj4gIGVu dW0gcG9ydCB7Cj4gICAgICAgICAgUE9SVF9BID0gMCwKPiAgICAgICAgICBQT1JUX0IsCj4gQEAg LTY4LDQ0ICs4OCw2IEBAIGVudW0gcG9ydCB7Cj4gICAgICAgICAgSTkxNV9NQVhfUE9SVFMKPiAg fTsKPiAgCj4gLS8qKgo+IC0gKiBrbXN0ZXN0X3BvcnRfbmFtZToKPiAtICogQHBvcnQ6IGRpc3Bs YXkgcGxhbmUKPiAtICoKPiAtICogUmV0dXJuczogU3RyaW5nIHJlcHJlc2VudGluZyBAcG9ydCwg ZS5nLiAiQSIuCj4gLSAqLwo+IC0jZGVmaW5lIGttc3Rlc3RfcG9ydF9uYW1lKHBvcnQpICgocG9y dCkgKyAnQScpCj4gLQo+IC0vKioKPiAtICoga21zdGVzdF9lbmNvZGVyX3R5cGVfc3RyOgo+IC0g KiBAdHlwZTogRFJNX01PREVfRU5DT0RFUl8qIGVudW1lcmF0aW9uIHZhbHVlCj4gLSAqCj4gLSAq IFJldHVybnM6IEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZHJtIGVuY29kZXIgQHR5cGUuCj4g LSAqLwo+IC1jb25zdCBjaGFyICprbXN0ZXN0X2VuY29kZXJfdHlwZV9zdHIoaW50IHR5cGUpOwo+ IC0KPiAtLyoqCj4gLSAqIGttc3Rlc3RfY29ubmVjdG9yX3N0YXR1c19zdHI6Cj4gLSAqIEBzdGF0 dXM6IERSTV9NT0RFXyogY29ubmVjdG9yIHN0YXR1cyB2YWx1ZQo+IC0gKgo+IC0gKiBSZXR1cm5z OiBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGRybSBjb25uZWN0b3Igc3RhdHVzIEBzdGF0dXMu Cj4gLSAqLwo+IC1jb25zdCBjaGFyICprbXN0ZXN0X2Nvbm5lY3Rvcl9zdGF0dXNfc3RyKGludCBz dGF0dXMpOwo+IC0KPiAtLyoqCj4gLSAqIGttc3Rlc3RfY29ubmVjdG9yX3R5cGVfc3RyOgo+IC0g KiBAdHlwZTogRFJNX01PREVfQ09OTkVDVE9SXyogZW51bWVyYXRpb24gdmFsdWUKPiAtICoKPiAt ICogUmV0dXJuczogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBkcm0gY29ubmVjdG9yIEB0eXBl Lgo+IC0gKi8KPiAtY29uc3QgY2hhciAqa21zdGVzdF9jb25uZWN0b3JfdHlwZV9zdHIoaW50IHR5 cGUpOwo+IC0KPiAtdm9pZCBrbXN0ZXN0X2R1bXBfbW9kZShkcm1Nb2RlTW9kZUluZm8gKm1vZGUp Owo+IC0KPiAtaW50IGttc3Rlc3RfZ2V0X3BpcGVfZnJvbV9jcnRjX2lkKGludCBmZCwgaW50IGNy dGNfaWQpOwo+IC12b2lkIGttc3Rlc3Rfc2V0X3Z0X2dyYXBoaWNzX21vZGUodm9pZCk7Cj4gLXZv aWQga21zdGVzdF9yZXN0b3JlX3Z0X21vZGUodm9pZCk7Cj4gLQo+ICBzdHJ1Y3Qga21zdGVzdF9j b25uZWN0b3JfY29uZmlnIHsKPiAgCWRybU1vZGVDcnRjICpjcnRjOwo+ICAJZHJtTW9kZUNvbm5l Y3RvciAqY29ubmVjdG9yOwo+IEBAIC0xMjksMjUgKzExMSw2IEBAIGVudW0ga21zdGVzdF9mb3Jj ZV9jb25uZWN0b3Jfc3RhdGUgewo+ICAJRk9SQ0VfQ09OTkVDVE9SX09GRgo+ICB9Owo+ICAKPiAt Ym9vbCBrbXN0ZXN0X2ZvcmNlX2Nvbm5lY3RvcihpbnQgZmQsIGRybU1vZGVDb25uZWN0b3IgKmNv bm5lY3RvciwKPiAtCQkJICAgICBlbnVtIGttc3Rlc3RfZm9yY2VfY29ubmVjdG9yX3N0YXRlIHN0 YXRlKTsKPiAtdm9pZCBrbXN0ZXN0X2VkaWRfYWRkXzNkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVk aWQsIHNpemVfdCBsZW5ndGgsIHVuc2lnbmVkIGNoYXIgKm5ld19lZGlkX3B0cltdLCBzaXplX3Qg Km5ld19sZW5ndGgpOwo+IC12b2lkIGttc3Rlc3RfZm9yY2VfZWRpZChpbnQgZHJtX2ZkLCBkcm1N b2RlQ29ubmVjdG9yICpjb25uZWN0b3IsCj4gLQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVkaWQs IHNpemVfdCBsZW5ndGgpOwo+IC0KPiAtYm9vbCBrbXN0ZXN0X2dldF9jb25uZWN0b3JfZGVmYXVs dF9tb2RlKGludCBkcm1fZmQsIGRybU1vZGVDb25uZWN0b3IgKmNvbm5lY3RvciwKPiAtCQkJCQlk cm1Nb2RlTW9kZUluZm8gKm1vZGUpOwo+IC1ib29sIGttc3Rlc3RfZ2V0X2Nvbm5lY3Rvcl9jb25m aWcoaW50IGRybV9mZCwgdWludDMyX3QgY29ubmVjdG9yX2lkLAo+IC0JCQkJICB1bnNpZ25lZCBs b25nIGNydGNfaWR4X21hc2ssCj4gLQkJCQkgIHN0cnVjdCBrbXN0ZXN0X2Nvbm5lY3Rvcl9jb25m aWcgKmNvbmZpZyk7Cj4gLXZvaWQga21zdGVzdF9mcmVlX2Nvbm5lY3Rvcl9jb25maWcoc3RydWN0 IGttc3Rlc3RfY29ubmVjdG9yX2NvbmZpZyAqY29uZmlnKTsKPiAtCj4gLXZvaWQga21zdGVzdF9z ZXRfY29ubmVjdG9yX2RwbXMoaW50IGZkLCBkcm1Nb2RlQ29ubmVjdG9yICpjb25uZWN0b3IsIGlu dCBtb2RlKTsKPiAtYm9vbCBrbXN0ZXN0X2dldF9wcm9wZXJ0eShpbnQgZHJtX2ZkLCB1aW50MzJf dCBvYmplY3RfaWQsIHVpbnQzMl90IG9iamVjdF90eXBlLAo+IC0JCQkgIGNvbnN0IGNoYXIgKm5h bWUsIHVpbnQzMl90ICpwcm9wX2lkLCB1aW50NjRfdCAqdmFsdWUsCj4gLQkJCSAgZHJtTW9kZVBy b3BlcnR5UHRyICpwcm9wKTsKPiAtdm9pZCBrbXN0ZXN0X3Vuc2V0X2FsbF9jcnRjcyhpbnQgZHJt X2ZkLCBkcm1Nb2RlUmVzUHRyIHJlc291cmNlcyk7Cj4gLQo+ICAvKgo+ICAgKiBBIHNtYWxsIG1v ZGVzZXQgQVBJCj4gICAqLwo+IEBAIC0xNjAsOCArMTIzLDggQEAgZW51bSBpZ3RfY29tbWl0X3N0 eWxlIHsKPiAgfTsKPiAgCj4gIHR5cGVkZWYgc3RydWN0IGlndF9kaXNwbGF5IGlndF9kaXNwbGF5 X3Q7Cj4gLXR5cGVkZWYgc3RydWN0IGlndF9waXBlIGlndF9waXBlX3Q7Cj4gIHR5cGVkZWYgdWlu dDMyX3QgaWd0X2ZpeGVkX3Q7CQkJLyogMTYuMTYgZml4ZWQgcG9pbnQgKi8KPiArdHlwZWRlZiBz dHJ1Y3QgaWd0X3BpcGUgaWd0X3BpcGVfdDsKPiAgCj4gIHR5cGVkZWYgZW51bSB7Cj4gIAkvKiB0 aGlzIG1hcHMgdG8gdGhlIGtlcm5lbCBBUEkgKi8KPiBAQCAtMjM3LDE3ICsyMDAsMzAwIEBAIHN0 cnVjdCBpZ3RfZGlzcGxheSB7Cj4gIAlib29sIGhhc191bml2ZXJzYWxfcGxhbmVzOwo+ICB9Owo+ ICAKPiArLyogTG93LWxldmVsIGhlbHBlcnMgd2l0aCBrbXN0ZXN0XyBwcmVmaXggKi8KPiArCj4g Ky8qKgo+ICsgKiBrbXN0ZXN0X3BvcnRfbmFtZToKPiArICogQHBvcnQ6IGRpc3BsYXkgcGxhbmUK PiArICoKPiArICogUmV0dXJuczogU3RyaW5nIHJlcHJlc2VudGluZyBAcG9ydCwgZS5nLiAiQSIu Cj4gKyAqLwo+ICsjZGVmaW5lIGttc3Rlc3RfcG9ydF9uYW1lKHBvcnQpICgocG9ydCkgKyAnQScp Cj4gKwo+ICsvKioKPiArICoga21zdGVzdF9waXBlX25hbWU6Cj4gKyAqIEBwaXBlOiBkaXNwbGF5 IHBpcGUKPiArICoKPiArICogUmV0dXJuczogU3RyaW5nIHJlcHJlc250aW5nIEBwaXBlLCBlLmcu ICJBIi4KPiArICovCj4gK2NvbnN0IGNoYXIgKmttc3Rlc3RfcGlwZV9uYW1lKGVudW0gcGlwZSBw aXBlKTsKPiArCj4gKy8qKgo+ICsgKiBrbXN0ZXN0X3BsYW5lX25hbWU6Cj4gKyAqIEBwbGFuZTog ZGlzcGxheSBwbGFuZQo+ICsgKgo+ICsgKiBSZXR1cm5zOiBTdHJpbmcgcmVwcmVzbnRpbmcgQHBp cGUsIGUuZy4gInBsYW5lMSIuCj4gKyAqLwo+ICtjb25zdCBjaGFyICprbXN0ZXN0X3BsYW5lX25h bWUoZW51bSBpZ3RfcGxhbmUgcGxhbmUpOwo+ICsKPiArCj4gKy8qKgo+ICsgKiBrbXN0ZXN0X2Vu Y29kZXJfdHlwZV9zdHI6Cj4gKyAqIEB0eXBlOiBEUk1fTU9ERV9FTkNPREVSXyogZW51bWVyYXRp b24gdmFsdWUKPiArICoKPiArICogUmV0dXJuczogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBk cm0gZW5jb2RlciBAdHlwZS4KPiArICovCj4gK2NvbnN0IGNoYXIgKmttc3Rlc3RfZW5jb2Rlcl90 eXBlX3N0cihpbnQgdHlwZSk7Cj4gKwo+ICsvKioKPiArICoga21zdGVzdF9jb25uZWN0b3Jfc3Rh dHVzX3N0cjoKPiArICogQHN0YXR1czogRFJNX01PREVfKiBjb25uZWN0b3Igc3RhdHVzIHZhbHVl Cj4gKyAqCj4gKyAqIFJldHVybnM6IEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZHJtIGNvbm5l Y3RvciBzdGF0dXMgQHN0YXR1cy4KPiArICovCj4gK2NvbnN0IGNoYXIgKmttc3Rlc3RfY29ubmVj dG9yX3N0YXR1c19zdHIoaW50IHN0YXR1cyk7Cj4gKwo+ICsvKioKPiArICoga21zdGVzdF9jb25u ZWN0b3JfdHlwZV9zdHI6Cj4gKyAqIEB0eXBlOiBEUk1fTU9ERV9DT05ORUNUT1JfKiBlbnVtZXJh dGlvbiB2YWx1ZQo+ICsgKgo+ICsgKiBSZXR1cm5zOiBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhl IGRybSBjb25uZWN0b3IgQHR5cGUuCj4gKyAqLwo+ICtjb25zdCBjaGFyICprbXN0ZXN0X2Nvbm5l Y3Rvcl90eXBlX3N0cihpbnQgdHlwZSk7Cj4gKwo+ICsvKioKPiArICoga21zdGVzdF9kdW1wX21v ZGU6Cj4gKyAqIEBtb2RlOiBsaWJkcm0gbW9kZSBzdHJ1Y3R1cmUKPiArICoKPiArICogUHJpbnRz IEBtb2RlIHRvIHN0ZG91dCBpbiBhIGh1bWEtcmVhZGFibGUgZm9ybS4KPiArICovCj4gK3ZvaWQg a21zdGVzdF9kdW1wX21vZGUoZHJtTW9kZU1vZGVJbmZvICptb2RlKTsKPiArCj4gKy8qKgo+ICsg KiBrbXN0ZXN0X2dldF9waXBlX2Zyb21fY3J0Y19pZDoKPiArICogQGZkOiBEUk0gZmQKPiArICog QGNydGNfaWQ6IERSTSBDUlRDIGlkCj4gKyAqCj4gKyAqIFJldHVybnM6IFRoZSBwaXBlIG51bWJl ciBmb3IgdGhlIGdpdmVuIERSTSBDUlRDIEBjcnRjX2lkLiBUaGlzIG1hcHMgZGlyZWN0bHkKPiAr ICogdG8gYW4gZW51bSBwaXBlIHZhbHVlIHVzZWQgaW4gb3RoZXIgaGVscGVyIGZ1bmN0aW9ucy4K PiArICovCj4gK2ludCBrbXN0ZXN0X2dldF9waXBlX2Zyb21fY3J0Y19pZChpbnQgZmQsIGludCBj cnRjX2lkKTsKPiArCj4gKy8qKgo+ICsgKiBrbXN0ZXN0X3NldF92dF9ncmFwaGljc19tb2RlOgo+ ICsgKgo+ICsgKiBTZXRzIHRoZSBjb250cm9sbGluZyBWVCAoaWYgYXZhaWxhYmxlKSBpbnRvIGdy YXBoaWNzL3JhdyBtb2RlIGFuZCBpbnN0YWxscwo+ICsgKiBhbiBpZ3QgZXhpdCBoYW5kbGVyIHRv IHNldCB0aGUgVlQgYmFjayB0byB0ZXh0IG1vZGUgb24gZXhpdC4gVXNlCj4gKyAqICNrbXN0ZXN0 X3Jlc3RvcmVfdnRfbW9kZSB0byByZXN0b3JlIHRoZSBwcmV2aW91cyBWVCBtb2RlIG1hbnVhbGx5 Lgo+ICsgKgo+ICsgKiBBbGwga21zIHRlc3RzIG11c3QgY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIG1h a2Ugc3VyZSB0aGF0IHRoZSBmYmNvbiBkb2Vzbid0Cj4gKyAqIGludGVyZmVyZSBieSBlLmcuIGJs YW5raW5nIHRoZSBzY3JlZW4uCj4gKyAqLwo+ICt2b2lkIGttc3Rlc3Rfc2V0X3Z0X2dyYXBoaWNz X21vZGUodm9pZCk7Cj4gKwo+ICsvKioKPiArICoga21zdGVzdF9yZXN0b3JlX3Z0X21vZGU6Cj4g KyAqCj4gKyAqIFJlc3RvcmUgdGhlIFZUIG1vZGUgaW4gdXNlIGJlZm9yZSAja21zdGVzdF9zZXRf dnRfZ3JhcGhpY3NfbW9kZSB3YXMgY2FsbGVkLgo+ICsgKi8KPiArdm9pZCBrbXN0ZXN0X3Jlc3Rv cmVfdnRfbW9kZSh2b2lkKTsKPiArCj4gKy8qKgo+ICsgKiBrbXN0ZXN0X2ZvcmNlX2Nvbm5lY3Rv cjoKPiArICogQGZkOiBkcm0gZmlsZSBkZXNjcmlwdG9yCj4gKyAqIEBjb25uZWN0b3I6IGNvbm5l Y3Rvcgo+ICsgKiBAc3RhdGU6IHN0YXRlIHRvIGZvcmNlIG9uIEBjb25uZWN0b3IKPiArICoKPiAr ICogRm9yY2UgdGhlIHNwZWNpZmllZCBzdGF0ZSBvbiB0aGUgc3BlY2lmaWVkIGNvbm5lY3Rvci4K PiArICoKPiArICogUmV0dXJuczogdHJ1ZSBvbiBzdWNjZXNzCj4gKyAqLwo+ICtib29sIGttc3Rl c3RfZm9yY2VfY29ubmVjdG9yKGludCBmZCwgZHJtTW9kZUNvbm5lY3RvciAqY29ubmVjdG9yLAo+ ICsJCQkgICAgIGVudW0ga21zdGVzdF9mb3JjZV9jb25uZWN0b3Jfc3RhdGUgc3RhdGUpOwo+ICsK PiArLyoqCj4gKyAqIGttc3Rlc3RfZWRpZF9hZGRfM2Q6Cj4gKyAqIEBlZGlkOiBhbiBleGlzdGlu ZyB2YWxpZCBlZGlkIGJsb2NrCj4gKyAqIEBsZW5ndGg6IGxlbmd0aCBvZiBAZWRpZAo+ICsgKiBA bmV3X2VkaWRfcHRyOiBwb2ludGVyIHRvIHdoZXJlIHRoZSBuZXcgZWRpZCB3aWxsIGJlIHBsYWNl ZAo+ICsgKiBAbmV3X2xlbmd0aDogcG9pbnRlciB0byB0aGUgc2l6ZSBvZiB0aGUgbmV3IGVkaWQK PiArICoKPiArICogTWFrZXMgYSBjb3B5IG9mIGFuIGV4aXN0aW5nIGVkaWQgYmxvY2sgYW5kIGFk ZHMgYW4gZXh0ZW5zaW9uIGluZGljYXRpbmcKPiArICogc3RlcmVvIDNEIGNhcGFiaWxpdGllcy4K PiArICovCj4gK3ZvaWQga21zdGVzdF9lZGlkX2FkZF8zZChjb25zdCB1bnNpZ25lZCBjaGFyICpl ZGlkLCBzaXplX3QgbGVuZ3RoLAo+ICsJCQkgdW5zaWduZWQgY2hhciAqbmV3X2VkaWRfcHRyW10s IHNpemVfdCAqbmV3X2xlbmd0aCk7Cj4gKwo+ICsvKioKPiArICoga21zdGVzdF9mb3JjZV9lZGlk Ogo+ICsgKiBAZHJtX2ZkOiBkcm0gZmlsZSBkZXNjcmlwdG9yCj4gKyAqIEBjb25uZWN0b3I6IGNv bm5lY3RvciB0byBzZXQgQGVkaWQgb24KPiArICogQGVkaWQ6IEFuIEVESUQgZGF0YSBibG9jawo+ ICsgKiBAbGVuZ3RoOiBsZW5ndGggb2YgdGhlIEVESUQgZGF0YS4gI0VESURfTEVOR1RIIGRlZmlu ZXMgdGhlIHN0YW5kYXJkIEVESUQKPiArICogbGVuZ3RoCj4gKyAqCj4gKyAqIFNldCB0aGUgRURJ RCBkYXRhIG9uIEBjb25uZWN0b3IgdG8gQGVkaWQuIFNlZSBhbHNvICNpZ3Rfa21zX2dldF9iYXNl X2VkaWQuCj4gKyAqCj4gKyAqIElmIEBsZW5ndGggaXMgemVybywgdGhlIGZvcmNlZCBFRElEIHdp bGwgYmUgcmVtb3ZlZC4KPiArICovCj4gK3ZvaWQga21zdGVzdF9mb3JjZV9lZGlkKGludCBkcm1f ZmQsIGRybU1vZGVDb25uZWN0b3IgKmNvbm5lY3RvciwKPiArCQkJY29uc3QgdW5zaWduZWQgY2hh ciAqZWRpZCwgc2l6ZV90IGxlbmd0aCk7Cj4gKwo+ICsvKioKPiArICoga21zdGVzdF9nZXRfY29u bmVjdG9yX2RlZmF1bHRfbW9kZToKPiArICogQGRybV9mZDogRFJNIGZkCj4gKyAqIEBjb25uZWN0 b3I6IGxpYmRybSBjb25uZWN0b3IKPiArICogQG1vZGU6IGxpYmRybSBtb2RlCj4gKyAqCj4gKyAq IFJldHJpZXZlcyB0aGUgZGVmYXVsdCBtb2RlIGZvciBAY29ubmVjdG9yIGFuZCBzdG9yZXMgaXQg aW4gQG1vZGUuCj4gKyAqCj4gKyAqIFJldHVybnM6IHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb24g ZmFpbHVyZQo+ICsgKi8KPiArYm9vbCBrbXN0ZXN0X2dldF9jb25uZWN0b3JfZGVmYXVsdF9tb2Rl KGludCBkcm1fZmQsIGRybU1vZGVDb25uZWN0b3IgKmNvbm5lY3RvciwKPiArCQkJCQlkcm1Nb2Rl TW9kZUluZm8gKm1vZGUpOwo+ICsKPiArLyoqCj4gKyAqIGttc3Rlc3RfZ2V0X2Nvbm5lY3Rvcl9j b25maWc6Cj4gKyAqIEBkcm1fZmQ6IERSTSBmZAo+ICsgKiBAY29ubmVjdG9yX2lkOiBEUk0gY29u bmVjdG9yIGlkCj4gKyAqIEBjcnRjX2lkeF9tYXNrOiBtYXNrIG9mIGFsbG93ZWQgRFJNIENSVEMg aW5kaWNlcwo+ICsgKiBAY29uZmlnOiBzdHJ1Y3R1cmUgZmlsbGVkIHdpdGggdGhlIHBvc3NpYmxl IGNvbmZpZ3VyYXRpb24KPiArICoKPiArICogVGhpcyB0cmllcyB0byBmaW5kIGEgc3VpdGFibGUg Y29uZmlndXJhdGlvbiBmb3IgdGhlIGdpdmVuIGNvbm5lY3RvciBhbmQgQ1JUQwo+ICsgKiBjb25z dHJhaW50IGFuZCBmaWxscyBpdCBpbnRvIEBjb25maWcuCj4gKyAqLwo+ICtib29sIGttc3Rlc3Rf Z2V0X2Nvbm5lY3Rvcl9jb25maWcoaW50IGRybV9mZCwgdWludDMyX3QgY29ubmVjdG9yX2lkLAo+ ICsJCQkJICB1bnNpZ25lZCBsb25nIGNydGNfaWR4X21hc2ssCj4gKwkJCQkgIHN0cnVjdCBrbXN0 ZXN0X2Nvbm5lY3Rvcl9jb25maWcgKmNvbmZpZyk7Cj4gKwo+ICsvKioKPiArICoga21zdGVzdF9m cmVlX2Nvbm5lY3Rvcl9jb25maWc6Cj4gKyAqIEBjb25maWc6IGNvbm5lY3RvciBjb25maWd1cmF0 aW9uIHN0cnVjdHVyZQo+ICsgKgo+ICsgKiBGcmVlIGFueSByZXNvdXJjZXMgaW4gQGNvbmZpZyBh bGxvY2F0ZWQgaW4ga21zdGVzdF9nZXRfY29ubmVjdG9yX2NvbmZpZygpLgo+ICsgKi8KPiArdm9p ZCBrbXN0ZXN0X2ZyZWVfY29ubmVjdG9yX2NvbmZpZyhzdHJ1Y3Qga21zdGVzdF9jb25uZWN0b3Jf Y29uZmlnICpjb25maWcpOwo+ICsKPiArLyoqCj4gKyAqIGttc3Rlc3Rfc2V0X2Nvbm5lY3Rvcl9k cG1zOgo+ICsgKiBAZmQ6IERSTSBmZAo+ICsgKiBAY29ubmVjdG9yOiBsaWJkcm0gY29ubmVjdG9y Cj4gKyAqIEBtb2RlOiBEUk0gRFBNUyB2YWx1ZQo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIHNl dHMgdGhlIERQTVMgc2V0dGluZyBvZiBAY29ubmVjdG9yIHRvIEBtb2RlLgo+ICsgKi8KPiArdm9p ZCBrbXN0ZXN0X3NldF9jb25uZWN0b3JfZHBtcyhpbnQgZmQsIGRybU1vZGVDb25uZWN0b3IgKmNv bm5lY3RvciwgaW50IG1vZGUpOwo+ICsKPiArLyoqCj4gKyAqIGttc3Rlc3RfZ2V0X3Byb3BlcnR5 Ogo+ICsgKiBAZHJtX2ZkOiBkcm0gZmlsZSBkZXNjcmlwdG9yCj4gKyAqIEBvYmplY3RfaWQ6IG9i amVjdCB3aG9zZSBwcm9wZXJ0aWVzIHdlJ3JlIGdvaW5nIHRvIGdldAo+ICsgKiBAb2JqZWN0X3R5 cGU6IHR5cGUgb2Ygb2JqX2lkIChEUk1fTU9ERV9PQkpFQ1RfKikKPiArICogQG5hbWU6IG5hbWUg b2YgdGhlIHByb3BlcnR5IHdlJ3JlIGdvaW5nIHRvIGdldAo+ICsgKiBAcHJvcF9pZDogaWYgbm90 IE5VTEwsIHJldHVybnMgdGhlIHByb3BlcnR5IGlkCj4gKyAqIEB2YWx1ZTogaWYgbm90IE5VTEws IHJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlCj4gKyAqIEBwcm9wOiBpZiBub3QgTlVMTCwgcmV0 dXJucyB0aGUgcHJvcGVydHksIGFuZCB0aGUgY2FsbGVyIHdpbGwgaGF2ZSB0byBmcmVlCj4gKyAq ICAgICAgICBpdCBtYW51YWxseS4KPiArICoKPiArICogRmluZHMgYSBwcm9wZXJ0eSB3aXRoIHRo ZSBnaXZlbiBuYW1lIG9uIHRoZSBnaXZlbiBvYmplY3QuCj4gKyAqCj4gKyAqIFJldHVybnM6IHRy dWUgaW4gY2FzZSB3ZSBmb3VuZCBzb21ldGhpbmcuCj4gKyAqLwo+ICtib29sIGttc3Rlc3RfZ2V0 X3Byb3BlcnR5KGludCBkcm1fZmQsIHVpbnQzMl90IG9iamVjdF9pZCwgdWludDMyX3Qgb2JqZWN0 X3R5cGUsCj4gKwkJCSAgY29uc3QgY2hhciAqbmFtZSwgdWludDMyX3QgKnByb3BfaWQsIHVpbnQ2 NF90ICp2YWx1ZSwKPiArCQkJICBkcm1Nb2RlUHJvcGVydHlQdHIgKnByb3ApOwo+ICsKPiArLyoq Cj4gKyAqIGttc3Rlc3RfdW5zZXRfYWxsX2NydGNzOgo+ICsgKiBAZHJtX2ZkOiB0aGUgRFJNIGZk Cj4gKyAqIEByZXNvdXJjZXM6IGxpYmRybSByZXNvdXJjZXMgcG9pbnRlcgo+ICsgKgo+ICsgKiBE aXNhYmxlcyBhbGwgdGhlIHNjcmVlbnMuCj4gKyAqLwo+ICt2b2lkIGttc3Rlc3RfdW5zZXRfYWxs X2NydGNzKGludCBkcm1fZmQsIGRybU1vZGVSZXNQdHIgcmVzb3VyY2VzKTsKPiArCj4gKwo+ICsv KioKPiArICogaWd0X2Rpc3BsYXlfaW5pdDoKPiArICogQGRpc3BsYXk6IGEgcG9pbnRlciB0byBh biAjaWd0X2Rpc3BsYXlfdCBzdHJ1Y3R1cmUKPiArICogQGRybV9mZDogYSBkcm0gZmlsZSBkZXNj cmlwdG9yCj4gKyAqCj4gKyAqIEluaXRpYWxpemUgQGRpc3BsYXkgYW5kIGFsbG9jYXRlIHRoZSB2 YXJpb3VzIHJlc291cmNlcyByZXF1aXJlZC4gVXNlCj4gKyAqICNpZ3RfZGlzcGxheV9maW5pIHRv IHJlbGVhc2UgdGhlIHJlc291cmNlcyB3aGVuIHRoZXkgYXJlIG5vIGxvbmdlciByZXF1aXJlZC4K PiArICoKPiArICovCj4gIHZvaWQgaWd0X2Rpc3BsYXlfaW5pdChpZ3RfZGlzcGxheV90ICpkaXNw bGF5LCBpbnQgZHJtX2ZkKTsKPiArCj4gKy8qKgo+ICsgKiBpZ3RfZGlzcGxheV9maW5pOgo+ICsg KiBAZGlzcGxheTogYSBwb2ludGVyIHRvIGFuICNpZ3RfZGlzcGxheV90IHN0cnVjdHVyZQo+ICsg Kgo+ICsgKiBSZWxlYXNlIGFueSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIEBkaXNwbGF5LiBU aGlzIGRvZXMgbm90IGZyZWUgQGRpc3BsYXkKPiArICogaXRzZWxmLgo+ICsgKi8KPiAgdm9pZCBp Z3RfZGlzcGxheV9maW5pKGlndF9kaXNwbGF5X3QgKmRpc3BsYXkpOwo+IC1pbnQgIGlndF9kaXNw bGF5X2NvbW1pdDIoaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwgZW51bSBpZ3RfY29tbWl0X3N0eWxl IHMpOwo+IC1pbnQgIGlndF9kaXNwbGF5X2NvbW1pdChpZ3RfZGlzcGxheV90ICpkaXNwbGF5KTsK PiAtaW50ICBpZ3RfZGlzcGxheV90cnlfY29tbWl0MihpZ3RfZGlzcGxheV90ICpkaXNwbGF5LCBl bnVtIGlndF9jb21taXRfc3R5bGUgcyk7Cj4gLWludCAgaWd0X2Rpc3BsYXlfZ2V0X25fcGlwZXMo aWd0X2Rpc3BsYXlfdCAqZGlzcGxheSk7Cj4gKwo+ICsvKioKPiArICogaWd0X2Rpc3BsYXlfY29t bWl0MjoKPiArICogQGRpc3BsYXk6IERSTSBkZXZpY2UgaGFuZGxlCj4gKyAqIEBzOiBDb21taXQg c3R5bGUKPiArICoKPiArICogQ29tbWl0cyBmcmFtZWJ1ZmZlciBhbmQgcG9zaXRpb25pbmcgY2hh bmdlcyB0byBhbGwgcGxhbmVzIG9mIGVhY2ggZGlzcGxheQo+ICsgKiBwaXBlLCB1c2luZyBhIHNw ZWNpZmljIEFQSSB0byBwZXJmb3JtIHRoZSBwcm9ncmFtbWluZy4gIFRoaXMgZnVuY3Rpb24gc2hv dWxkCj4gKyAqIGJlIHVzZWQgdG8gZXhlcmNpc2UgYSBzcGVjaWZpYyBkcml2ZXIgcHJvZ3JhbW1p bmcgQVBJOyBpZ3RfZGlzcGxheV9jb21taXQKPiArICogc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBp ZiB0aGUgQVBJIHVzZWQgaXMgdW5pbXBvcnRhbnQgdG8gdGhlIHRlc3QgYmVpbmcgcnVuLgo+ICsg Kgo+ICsgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIHVzZWQgdG8gY29tbWl0IGNoYW5n ZXMgdGhhdCBhcmUgZXhwZWN0ZWQgdG8KPiArICogc3VjY2VlZCwgc2luY2UgYW55IGZhaWx1cmUg ZHVyaW5nIHRoZSBjb21taXQgcHJvY2VzcyB3aWxsIGNhdXNlIHRoZSBJR1QKPiArICogc3VidGVz dCB0byBmYWlsLiAgVG8gY29tbWl0IGNoYW5nZXMgdGhhdCBhcmUgZXhwZWN0ZWQgdG8gZmFpbCwg dXNlCj4gKyAqIEBpZ3RfdHJ5X2Rpc3BsYXlfY29tbWl0MiBpbnN0ZWFkLgo+ICsgKgo+ICsgKiBS ZXR1cm5zOiAwIHVwb24gc3VjY2Vzcy4gIFRoaXMgZnVuY3Rpb24gd2lsbCBuZXZlciByZXR1cm4g dXBvbiBmYWlsdXJlCj4gKyAqIHNpbmNlIGlndF9mYWlsKCkgYXQgbG93ZXIgbGV2ZWxzIHdpbGwg bG9uZ2ptcCBvdXQgb2YgaXQuCj4gKyAqLwo+ICtpbnQgaWd0X2Rpc3BsYXlfY29tbWl0MihpZ3Rf ZGlzcGxheV90ICpkaXNwbGF5LCBlbnVtIGlndF9jb21taXRfc3R5bGUgcyk7Cj4gKwo+ICsvKioK PiArICogaWd0X2Rpc3BsYXlfY29tbWl0Ogo+ICsgKiBAZGlzcGxheTogRFJNIGRldmljZSBoYW5k bGUKPiArICoKPiArICogQ29tbWl0cyBmcmFtZWJ1ZmZlciBhbmQgcG9zaXRpb25pbmcgY2hhbmdl cyB0byBhbGwgcGxhbmVzIG9mIGVhY2ggZGlzcGxheQo+ICsgKiBwaXBlLgo+ICsgKgo+ICsgKiBS ZXR1cm5zOiAwIHVwb24gc3VjY2Vzcy4gIFRoaXMgZnVuY3Rpb24gd2lsbCBuZXZlciByZXR1cm4g dXBvbiBmYWlsdXJlCj4gKyAqIHNpbmNlIGlndF9mYWlsKCkgYXQgbG93ZXIgbGV2ZWxzIHdpbGwg bG9uZ2ptcCBvdXQgb2YgaXQuCj4gKyAqLwo+ICtpbnQgaWd0X2Rpc3BsYXlfY29tbWl0KGlndF9k aXNwbGF5X3QgKmRpc3BsYXkpOwo+ICsKPiArLyoqCj4gKyAqIGlndF9kaXNwbGF5X3RyeV9jb21t aXQyOgo+ICsgKiBAZGlzcGxheTogRFJNIGRldmljZSBoYW5kbGUKPiArICogQHM6IENvbW1pdCBz dHlsZQo+ICsgKgo+ICsgKiBBdHRlbXB0cyB0byBjb21taXQgZnJhbWVidWZmZXIgYW5kIHBvc2l0 aW9uaW5nIGNoYW5nZXMgdG8gYWxsIHBsYW5lcyBvZiBlYWNoCj4gKyAqIGRpc3BsYXkgcGlwZS4g IFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQgdG8gY29tbWl0IGNoYW5nZXMgdGhhdCBhcmUK PiArICogZXhwZWN0ZWQgdG8gZmFpbCwgc28gdGhhdCB0aGUgZXJyb3IgY29kZSBjYW4gYmUgY2hl Y2tlZCBmb3IgY29ycmVjdG5lc3MuCj4gKyAqIEZvciBjaGFuZ2VzIHRoYXQgYXJlIGV4cGVjdGVk IHRvIHN1Y2NlZWQsIHVzZSBAaWd0X2Rpc3BsYXlfY29tbWl0IGluc3RlYWQuCj4gKyAqCj4gKyAq IE5vdGUgdGhhdCBpbiBub24tYXRvbWljIGNvbW1pdCBzdHlsZXMsIG5vIGRpc3BsYXkgcHJvZ3Jh bW1pbmcgd2lsbCBiZQo+ICsgKiBwZXJmb3JtZWQgYWZ0ZXIgdGhlIGZpcnN0IGZhaWx1cmUgaXMg ZW5jb3VudGVyZWQsIHNvIG9ubHkgc29tZSBvZiB0aGUKPiArICogb3BlcmF0aW9ucyByZXF1ZXN0 ZWQgYnkgYSB0ZXN0IG1heSBoYXZlIGJlZW4gY29tcGxldGVkLiAgVGVzdHMgdGhhdCBjYXRjaAo+ ICsgKiBlcnJvcnMgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiBzaG91bGQgdGFrZSBjYXJlIHRv IHJlc3RvcmUgdGhlIGRpc3BsYXkgdG8KPiArICogYSBzYW5lIHN0YXRlIGFmdGVyIGEgZmFpbHVy ZSBpcyBkZXRlY3RlZC4KPiArICoKPiArICogUmV0dXJuczogMCB1cG9uIHN1Y2Nlc3MsIG90aGVy d2lzZSB0aGUgZXJyb3IgY29kZSBvZiB0aGUgZmlyc3QgZXJyb3IKPiArICogZW5jb3VudGVyZWQu Cj4gKyAqLwo+ICtpbnQgaWd0X2Rpc3BsYXlfdHJ5X2NvbW1pdDIoaWd0X2Rpc3BsYXlfdCAqZGlz cGxheSwgZW51bSBpZ3RfY29tbWl0X3N0eWxlIHMpOwo+ICsKPiAraW50IGlndF9kaXNwbGF5X2dl dF9uX3BpcGVzKGlndF9kaXNwbGF5X3QgKmRpc3BsYXkpOwo+ICAKPiAgY29uc3QgY2hhciAqaWd0 X291dHB1dF9uYW1lKGlndF9vdXRwdXRfdCAqb3V0cHV0KTsKPiAgZHJtTW9kZU1vZGVJbmZvICpp Z3Rfb3V0cHV0X2dldF9tb2RlKGlndF9vdXRwdXRfdCAqb3V0cHV0KTsKPiArCj4gKy8qKgo+ICsg KiBpZ3Rfb3V0cHV0X292ZXJyaWRlX21vZGU6Cj4gKyAqIEBvdXRwdXQ6IE91dHB1dCBvZiB3aGlj aCB0aGUgbW9kZSB3aWxsIGJlIG92ZXJyaWRkZW4KPiArICogQG1vZGU6IE5ldyBtb2RlCj4gKyAq Cj4gKyAqIE92ZXJyaWRlcyB0aGUgb3V0cHV0J3MgbW9kZSB3aXRoIEBtb2RlLCBzbyB0aGF0IGl0 IGlzIHVzZWQgaW5zdGVhZCBvZiB0aGUKPiArICogbW9kZSBvYnRhaW5lZCB3aXRoIGdldCBjb25u ZWN0b3JzLiBOb3RlIHRoYXQgdGhlIG1vZGUgaXMgdXNlZCB3aXRob3V0Cj4gKyAqIGNoZWNraW5n IGlmIHRoZSBvdXRwdXQgc3VwcG9ydHMgaXQsIHNvIHRoaXMgbWlnaHQgbGVhZCB0byB1bmV4cGVj dGVkIHJlc3VsdHMuCj4gKyAqLwo+ICB2b2lkIGlndF9vdXRwdXRfb3ZlcnJpZGVfbW9kZShpZ3Rf b3V0cHV0X3QgKm91dHB1dCwgZHJtTW9kZU1vZGVJbmZvICptb2RlKTsKPiArCj4gIHZvaWQgaWd0 X291dHB1dF9zZXRfcGlwZShpZ3Rfb3V0cHV0X3QgKm91dHB1dCwgZW51bSBwaXBlIHBpcGUpOwo+ ICsKPiAgaWd0X3BsYW5lX3QgKmlndF9vdXRwdXRfZ2V0X3BsYW5lKGlndF9vdXRwdXRfdCAqb3V0 cHV0LCBlbnVtIGlndF9wbGFuZSBwbGFuZSk7Cj4gIAo+ICBzdGF0aWMgaW5saW5lIGJvb2wgaWd0 X3BsYW5lX3N1cHBvcnRzX3JvdGF0aW9uKGlndF9wbGFuZV90ICpwbGFuZSkKPiBAQCAtMjU2LDE1 ICs1MDIsNjEgQEAgc3RhdGljIGlubGluZSBib29sIGlndF9wbGFuZV9zdXBwb3J0c19yb3RhdGlv bihpZ3RfcGxhbmVfdCAqcGxhbmUpCj4gIH0KPiAgCj4gIHZvaWQgaWd0X3BsYW5lX3NldF9mYihp Z3RfcGxhbmVfdCAqcGxhbmUsIHN0cnVjdCBpZ3RfZmIgKmZiKTsKPiArCj4gIHZvaWQgaWd0X3Bs YW5lX3NldF9wb3NpdGlvbihpZ3RfcGxhbmVfdCAqcGxhbmUsIGludCB4LCBpbnQgeSk7Cj4gKwo+ ICsvKioKPiArICogaWd0X3BsYW5lX3NldF9zaXplOgo+ICsgKiBAcGxhbmU6IHBsYW5lIHBvaW50 ZXIgZm9yIHdoaWNoIHNpemUgdG8gYmUgc2V0Cj4gKyAqIEB3OiB3aWR0aAo+ICsgKiBAaDogaGVp Z2h0Cj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB3aWR0aCBhbmQgaGVpZ2h0IGZvciBy ZXF1ZXN0ZWQgcGxhbmUuCj4gKyAqIE5ldyBzaXplIHdpbGwgYmUgY29tbWl0dGVkIGF0IHBsYW5l IGNvbW1pdCB0aW1lIHZpYQo+ICsgKiBkcm1Nb2RlU2V0UGxhbmUoKS4KPiArICovCj4gIHZvaWQg aWd0X3BsYW5lX3NldF9zaXplKGlndF9wbGFuZV90ICpwbGFuZSwgaW50IHcsIGludCBoKTsKPiAr Cj4gIHZvaWQgaWd0X3BsYW5lX3NldF9wYW5uaW5nKGlndF9wbGFuZV90ICpwbGFuZSwgaW50IHgs IGludCB5KTsKPiArCj4gIHZvaWQgaWd0X3BsYW5lX3NldF9yb3RhdGlvbihpZ3RfcGxhbmVfdCAq cGxhbmUsIGlndF9yb3RhdGlvbl90IHJvdGF0aW9uKTsKPiArCj4gKy8qKgo+ICsgKiBpZ3RfY3J0 Y19zZXRfYmFja2dyb3VuZDoKPiArICogQHBpcGU6IHBpcGUgcG9pbnRlciB0byB3aGljaCBiYWNr Z3JvdW5kIGNvbG9yIHRvIGJlIHNldAo+ICsgKiBAYmFja2dyb3VuZDogYmFja2dyb3VuZCBjb2xv ciB2YWx1ZSBpbiBCR1IgMTZicGMKPiArICoKPiArICogU2V0cyBiYWNrZ3JvdW5kIGNvbG9yIGZv ciByZXF1ZXN0ZWQgcGlwZS4gQ29sb3IgdmFsdWUgcHJvdmlkZWQgaGVyZQo+ICsgKiB3aWxsIGJl IGFjdHVhbGx5IHN1Ym1pdHRlZCBhdCBvdXRwdXQgY29tbWl0IHRpbWUgdmlhICJiYWNrZ3JvdW5k X2NvbG9yIgo+ICsgKiBwcm9wZXJ0eS4KPiArICogRm9yIGV4YW1wbGUgdG8gZ2V0IHJlZCBhcyBi YWNrZ3JvdW5kLCBzZXQgYmFja2dyb3VuZCA9IDB4MDAwMDAwMDBGRkZGLgo+ICsgKi8KPiAgdm9p ZCBpZ3RfY3J0Y19zZXRfYmFja2dyb3VuZChpZ3RfcGlwZV90ICpwaXBlLCB1aW50NjRfdCBiYWNr Z3JvdW5kKTsKPiAtdm9pZCBpZ3RfZmJfc2V0X3Bvc2l0aW9uKHN0cnVjdCBpZ3RfZmIgKmZiLCBp Z3RfcGxhbmVfdCAqcGxhbmUsCj4gLQl1aW50MzJfdCB4LCB1aW50MzJfdCB5KTsKPiAtdm9pZCBp Z3RfZmJfc2V0X3NpemUoc3RydWN0IGlndF9mYiAqZmIsIGlndF9wbGFuZV90ICpwbGFuZSwKPiAt CXVpbnQzMl90IHcsIHVpbnQzMl90IGgpOwo+ICsKPiArLyoqCj4gKyAqIGlndF9mYl9zZXRfcG9z aXRpb246Cj4gKyAqIEBmYjogZnJhbWVidWZmZXIgcG9pbnRlcgo+ICsgKiBAcGxhbmU6IHBsYW5l Cj4gKyAqIEB4OiBYIHBvc2l0aW9uCj4gKyAqIEB5OiBZIHBvc2l0aW9uCj4gKyAqCj4gKyAqIFRo aXMgZnVuY3Rpb24gc2V0cyBwb3NpdGlvbiBmb3IgcmVxdWVzdGVkIGZyYW1lYnVmZmVyIGFzIHNy YyB0byBwbGFuZS4KPiArICogTmV3IHBvc2l0aW9uIHdpbGwgYmUgY29tbWl0dGVkIGF0IHBsYW5l IGNvbW1pdCB0aW1lIHZpYSBkcm1Nb2RlU2V0UGxhbmUoKS4KPiArICovCj4gK3ZvaWQgaWd0X2Zi X3NldF9wb3NpdGlvbihzdHJ1Y3QgaWd0X2ZiICpmYiwgaWd0X3BsYW5lX3QgKnBsYW5lLCB1aW50 MzJfdCB4LCB1aW50MzJfdCB5KTsKPiArCj4gKy8qKgo+ICsgKiBpZ3RfZmJfc2V0X3NpemU6Cj4g KyAqIEBmYjogZnJhbWVidWZmZXIgcG9pbnRlcgo+ICsgKiBAcGxhbmU6IHBsYW5lCj4gKyAqIEB3 OiB3aWR0aAo+ICsgKiBAaDogaGVpZ2h0Cj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyBm ZXRjaCByZWN0IHNpemUgZnJvbSByZXF1ZXN0ZWQgZnJhbWVidWZmZXIgYXMgc3JjCj4gKyAqIHRv IHBsYW5lLiBOZXcgc2l6ZSB3aWxsIGJlIGNvbW1pdHRlZCBhdCBwbGFuZSBjb21taXQgdGltZSB2 aWEKPiArICogZHJtTW9kZVNldFBsYW5lKCkuCj4gKyAqLwo+ICt2b2lkIGlndF9mYl9zZXRfc2l6 ZShzdHJ1Y3QgaWd0X2ZiICpmYiwgaWd0X3BsYW5lX3QgKnBsYW5lLCB1aW50MzJfdCB3LCB1aW50 MzJfdCBoKTsKPiAgCj4gIHZvaWQgaWd0X3dhaXRfZm9yX3ZibGFuayhpbnQgZHJtX2ZkLCBlbnVt IHBpcGUgcGlwZSk7Cj4gIAo+IEBAIC0yODEsMTIgKzU3Myw2MiBAQCB2b2lkIGlndF93YWl0X2Zv cl92YmxhbmsoaW50IGRybV9mZCwgZW51bSBwaXBlIHBpcGUpOwo+ICAKPiAgI2RlZmluZSBJR1Rf RklYRUQoaSxmKQkoKGkpIDw8IDE2IHwgKGYpKQo+ICAKPiArLyoqCj4gKyAqIGlndF9lbmFibGVf Y29ubmVjdG9yczoKPiArICoKPiArICogRm9yY2UgY29ubmVjdG9ycyB0byBiZSBlbmFibGVkIHdo ZXJlIHRoaXMgaXMga25vd24gdG8gd29yayB3ZWxsLiBVc2UKPiArICogI2lndF9yZXNldF9jb25u ZWN0b3JzIHRvIHJldmVydCB0aGUgY2hhbmdlcy4KPiArICoKPiArICogQW4gZXhpdCBoYW5kbGVy IGlzIGluc3RhbGxlZCB0byBlbnN1cmUgY29ubmVjdG9ycyBhcmUgcmVzZXQgd2hlbiB0aGUgdGVz dAo+ICsgKiBleGl0cy4KPiArICovCj4gIHZvaWQgaWd0X2VuYWJsZV9jb25uZWN0b3JzKHZvaWQp Owo+ICsKPiArLyoqCj4gKyAqIGlndF9yZXNldF9jb25uZWN0b3JzOgo+ICsgKgo+ICsgKiBSZW1v dmUgYW55IGZvcmNlZCBzdGF0ZSBmcm9tIHRoZSBjb25uZWN0b3JzLgo+ICsgKi8KPiAgdm9pZCBp Z3RfcmVzZXRfY29ubmVjdG9ycyh2b2lkKTsKPiAgCj4gICNkZWZpbmUgRURJRF9MRU5HVEggMTI4 Cj4gLWNvbnN0IHVuc2lnbmVkIGNoYXIqIGlndF9rbXNfZ2V0X2Jhc2VfZWRpZCh2b2lkKTsKPiAt Y29uc3QgdW5zaWduZWQgY2hhciogaWd0X2ttc19nZXRfYWx0X2VkaWQodm9pZCk7Cj4gKwo+ICsv KioKPiArICogaWd0X2ttc19nZXRfYmFzZV9lZGlkOgo+ICsgKgo+ICsgKiBHZXQgdGhlIGJhc2Ug ZWRpZCBibG9jaywgd2hpY2ggaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBtb2RlczoKPiArICoKPiAr ICogIC0gMTkyMHgxMDgwIDYwSHoKPiArICogIC0gMTI4MHg3MjAgNjBIego+ICsgKiAgLSAxMDI0 eDc2OCA2MEh6Cj4gKyAqICAtIDgwMHg2MDAgNjBIego+ICsgKiAgLSA2NDB4NDgwIDYwSHoKPiAr ICoKPiArICogVGhpcyBjYW4gYmUgZXh0ZW5kZWQgd2l0aCBmdXJ0aGVyIGZlYXR1cmVzIHVzaW5n IGZ1bmN0aW9ucyBzdWNoIGFzCj4gKyAqICNrbXN0ZXN0X2VkaWRfYWRkXzNkLgo+ICsgKgo+ICsg KiBSZXR1cm5zOiBhIGJhc2ljIGVkaWQgYmxvY2sKPiArICovCj4gK2NvbnN0IHVuc2lnbmVkIGNo YXIgKmlndF9rbXNfZ2V0X2Jhc2VfZWRpZCh2b2lkKTsKPiArCj4gKy8qKgo+ICsgKiBpZ3Rfa21z X2dldF9hbHRfZWRpZDoKPiArICoKPiArICogR2V0IGFuIGFsdGVybmF0ZSBlZGlkIGJsb2NrLCB3 aGljaCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIG1vZGVzOgo+ICsgKgo+ICsgKiAgLSAxNDAweDEw NTAgNjBIego+ICsgKiAgLSAxOTIweDEwODAgNjBIego+ICsgKiAgLSAxMjgweDcyMCA2MEh6Cj4g KyAqICAtIDEwMjR4NzY4IDYwSHoKPiArICogIC0gODAweDYwMCA2MEh6Cj4gKyAqICAtIDY0MHg0 ODAgNjBIego+ICsgKgo+ICsgKiBUaGlzIGNhbiBiZSBleHRlbmRlZCB3aXRoIGZ1cnRoZXIgZmVh dHVyZXMgdXNpbmcgZnVuY3Rpb25zIHN1Y2ggYXMKPiArICogI2ttc3Rlc3RfZWRpZF9hZGRfM2Qu Cj4gKyAqCj4gKyAqIFJldHVybnM6IGFuIGFsdGVybmF0ZSBlZGlkIGJsb2NrCj4gKyAqLwo+ICtj b25zdCB1bnNpZ25lZCBjaGFyICppZ3Rfa21zX2dldF9hbHRfZWRpZCh2b2lkKTsKPiAgCj4gIAo+ ICAjZW5kaWYgLyogX19JR1RfS01TX0hfXyAqLwo+IC0tIAo+IDIuNi4yCj4gCgotLSAKRGFuaWVs IFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cu ZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K SW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK