From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jitao Shi Subject: Re: [PATCH] drm/mediatek: add mipi_tx driver for mt8183 Date: Sun, 17 Feb 2019 21:29:27 +0800 Message-ID: <1550410167.5194.1.camel@mszsdaap41> References: <20190212061901.116564-1-jitao.shi@mediatek.com> <151323a2-2b44-74b9-3a8d-b53b79a06aee@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <151323a2-2b44-74b9-3a8d-b53b79a06aee@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Matthias Brugger Cc: Mark Rutland , devicetree@vger.kernel.org, David Airlie , stonea168@163.com, dri-devel@lists.freedesktop.org, yingjoe.chen@mediatek.com, Ajay Kumar , Vincent Palatin , cawa.cheng@mediatek.com, Russell King , Thierry Reding , linux-pwm@vger.kernel.org, Sascha Hauer , Pawel Moll , Ian Campbell , Rob Herring , linux-mediatek@lists.infradead.org, Andy Yan , eddie.huang@mediatek.com, linux-arm-kernel@lists.infradead.org, Rahul Sharma , srv_heupstream@mediatek.com, linux-kernel@vger.kernel.org, Kumar Gala , Sean Paul List-Id: devicetree@vger.kernel.org T24gVHVlLCAyMDE5LTAyLTEyIGF0IDEwOjI4ICswMTAwLCBNYXR0aGlhcyBCcnVnZ2VyIHdyb3Rl Ogo+IAo+IE9uIDEyLzAyLzIwMTkgMDc6MTksIEppdGFvIFNoaSB3cm90ZToKPiA+IFRoaXMgcGF0 Y2ggYWRkcyBtaXBpIHR4IGRyaXZlciBzdXBwb3J0IGZvciBtdDgxODMuCj4gPiAKPiA+IE1pcGlf dHggb2YgbXQ4MTgzIGlzIHZlcnkgZGlmZmVyZW50IHRvIG10ODE3My4KPiA+IDEuU2VwYXJhdGUg bWlwaSB0eCBzZXR0aW5nIHRvIG10a19tdDgxNzNfbWlwaV90eC5jIGZvciBtdDgxNzMKPiA+IDIu U2VwYXJhdGUgbWlwaSB0eCBzZXR0aW5nIHRvIG10a19tdDgxODNfbWlwaV90eC5jIGZvciBtdDgx ODMKPiA+IDMuVG8gcmV1c2UgdGhlIGNvbW1vbiBjb2RlLCBtYWtlIHRoZSBjb21tb24gZnVuY3Rp b25zIGluIG10a19taXBpX3R4LmMKPiA+IAo+IAo+IEkgaGFkbid0IGEgbG9vayBvbiB0aGUgY29k ZSwgYnV0IHRoaXMgY29tbWl0IG1lc3NhZ2UgYWxyZWFkeSBpbmRpY2F0ZXMsIHRoYXQgeW91Cj4g c2hvdWxkIHNwbGl0IHRoaXMgdXAgaW4gc2V2ZXJhbCBwYXRjaGVzLgo+IFNvbWV0aGluZyBsaWtl IHRoaXM6Cj4gMS4gcGF0Y2g6IGNhcnZlIG91dCBjb21tb24gZnVuY3Rpb25zIHRvIG10a19taXBp X3R4LmMgYXQgdGhpcyBwb2ludCBvbmx5IHVzZWQgYnkKPiBtdDgxNzMKPiAyLiBwYXRjaDogYWRk IHN1cHBvcnQgZm9yIG10ODE4Mwo+IAo+IFJlZ2FyZHMsCj4gTWF0dGhpYXMKPiAKClRoYW5rcyBm b3IgeW91ciBhZHZpY2UuIEknbGwgc3BsaXQgaXQgdG8gc2V2ZXJhbCBwYXRjaGVzLgoKQmVzdCBS ZWdhcmRzCkppdGFvCgo+ID4gU2lnbmVkLW9mZi1ieTogSml0YW8gU2hpIDxqaXRhby5zaGlAbWVk aWF0ZWsuY29tPgo+ID4gLS0tCj4gPiAgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxl ICAgICAgICAgICAgIHwgICAyICsKPiA+ICBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX21p cGlfdHguYyAgICAgICAgfCAzNTIgKystLS0tLS0tLS0tLS0tLS0tCj4gPiAgZHJpdmVycy9ncHUv ZHJtL21lZGlhdGVrL210a19taXBpX3R4LmggICAgICAgIHwgIDUyICsrKwo+ID4gIGRyaXZlcnMv Z3B1L2RybS9tZWRpYXRlay9tdGtfbXQ4MTczX21pcGlfdHguYyB8IDI5MCArKysrKysrKysrKysr KysKPiA+ICBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX210ODE4M19taXBpX3R4LmMgfCAx NjggKysrKysrKysrCj4gPiAgNSBmaWxlcyBjaGFuZ2VkLCA1NDkgaW5zZXJ0aW9ucygrKSwgMzE1 IGRlbGV0aW9ucygtKQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVk aWF0ZWsvbXRrX21pcGlfdHguaAo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvbXRrX210ODE3M19taXBpX3R4LmMKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19tdDgxODNfbWlwaV90eC5jCj4gPiAKPiA+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUgYi9kcml2ZXJzL2dw dS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKPiA+IGluZGV4IDgyYWU0OWM2NDIyMS4uODA2N2E0YmU4 MzExIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCj4g PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKPiA+IEBAIC0xMiw2ICsx Miw4IEBAIG1lZGlhdGVrLWRybS15IDo9IG10a19kaXNwX2NvbG9yLm8gXAo+ID4gIAkJICBtdGtf ZHJtX3BsYW5lLm8gXAo+ID4gIAkJICBtdGtfZHNpLm8gXAo+ID4gIAkJICBtdGtfbWlwaV90eC5v IFwKPiA+ICsJCSAgbXRrX210ODE3M19taXBpX3R4Lm8gXAo+ID4gKwkJICBtdGtfbXQ4MTgzX21p cGlfdHgubyBcCj4gPiAgCQkgIG10a19kcGkubwo+ID4gIAo+ID4gIG9iai0kKENPTkZJR19EUk1f TUVESUFURUspICs9IG1lZGlhdGVrLWRybS5vCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL21lZGlhdGVrL210a19taXBpX3R4LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr X21pcGlfdHguYwo+ID4gaW5kZXggOTBlOTEzMTA4OTUwLi43NTkxYTM4Y2E1NjUgMTAwNjQ0Cj4g PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX21pcGlfdHguYwo+ID4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19taXBpX3R4LmMKPiA+IEBAIC0xMSwyOTIgKzEx LDQ1IEBACj4gPiAgICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KPiA+ICAgKi8KPiA+ICAKPiA+IC0jaW5jbHVkZSA8bGludXgvY2xrLmg+Cj4gPiAtI2luY2x1 ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgo+ID4gLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgo+ ID4gLSNpbmNsdWRlIDxsaW51eC9pby5oPgo+ID4gLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4K PiA+IC0jaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Cj4gPiAtI2luY2x1ZGUgPGxpbnV4L3Bs YXRmb3JtX2RldmljZS5oPgo+ID4gLSNpbmNsdWRlIDxsaW51eC9waHkvcGh5Lmg+Cj4gPiAtCj4g PiAtI2RlZmluZSBNSVBJVFhfRFNJX0NPTgkJMHgwMAo+ID4gLSNkZWZpbmUgUkdfRFNJX0xET0NP UkVfRU4JCUJJVCgwKQo+ID4gLSNkZWZpbmUgUkdfRFNJX0NLR19MRE9PVVRfRU4JCUJJVCgxKQo+ ID4gLSNkZWZpbmUgUkdfRFNJX0JDTEtfU0VMCQkJKDMgPDwgMikKPiA+IC0jZGVmaW5lIFJHX0RT SV9MRF9JRFhfU0VMCQkoNyA8PCA0KQo+ID4gLSNkZWZpbmUgUkdfRFNJX1BIWUNMS19TRUwJCSgy IDw8IDgpCj4gPiAtI2RlZmluZSBSR19EU0lfRFNJQ0xLX0ZSRVFfU0VMCQlCSVQoMTApCj4gPiAt I2RlZmluZSBSR19EU0lfTFBUWF9DTE1QX0VOCQlCSVQoMTEpCj4gPiAtCj4gPiAtI2RlZmluZSBN SVBJVFhfRFNJX0NMT0NLX0xBTkUJMHgwNAo+ID4gLSNkZWZpbmUgTUlQSVRYX0RTSV9EQVRBX0xB TkUwCTB4MDgKPiA+IC0jZGVmaW5lIE1JUElUWF9EU0lfREFUQV9MQU5FMQkweDBjCj4gPiAtI2Rl ZmluZSBNSVBJVFhfRFNJX0RBVEFfTEFORTIJMHgxMAo+ID4gLSNkZWZpbmUgTUlQSVRYX0RTSV9E QVRBX0xBTkUzCTB4MTQKPiA+IC0jZGVmaW5lIFJHX0RTSV9MTlR4X0xET09VVF9FTgkJQklUKDAp Cj4gPiAtI2RlZmluZSBSR19EU0lfTE5UeF9DS0xBTkVfRU4JCUJJVCgxKQo+ID4gLSNkZWZpbmUg UkdfRFNJX0xOVHhfTFBUWF9JUExVUzEJCUJJVCgyKQo+ID4gLSNkZWZpbmUgUkdfRFNJX0xOVHhf TFBUWF9JUExVUzIJCUJJVCgzKQo+ID4gLSNkZWZpbmUgUkdfRFNJX0xOVHhfTFBUWF9JTUlOVVMJ CUJJVCg0KQo+ID4gLSNkZWZpbmUgUkdfRFNJX0xOVHhfTFBDRF9JUExVUwkJQklUKDUpCj4gPiAt I2RlZmluZSBSR19EU0lfTE5UeF9MUENEX0lNSU5VUwkJQklUKDYpCj4gPiAtI2RlZmluZSBSR19E U0lfTE5UeF9SVF9DT0RFCQkoMHhmIDw8IDgpCj4gPiAtCj4gPiAtI2RlZmluZSBNSVBJVFhfRFNJ X1RPUF9DT04JMHg0MAo+ID4gLSNkZWZpbmUgUkdfRFNJX0xOVF9JTlRSX0VOCQlCSVQoMCkKPiA+ IC0jZGVmaW5lIFJHX0RTSV9MTlRfSFNfQklBU19FTgkJQklUKDEpCj4gPiAtI2RlZmluZSBSR19E U0lfTE5UX0lNUF9DQUxfRU4JCUJJVCgyKQo+ID4gLSNkZWZpbmUgUkdfRFNJX0xOVF9URVNUTU9E RV9FTgkJQklUKDMpCj4gPiAtI2RlZmluZSBSR19EU0lfTE5UX0lNUF9DQUxfQ09ERQkJKDB4ZiA8 PCA0KQo+ID4gLSNkZWZpbmUgUkdfRFNJX0xOVF9BSU9fU0VMCQkoNyA8PCA4KQo+ID4gLSNkZWZp bmUgUkdfRFNJX1BBRF9USUVfTE9XX0VOCQlCSVQoMTEpCj4gPiAtI2RlZmluZSBSR19EU0lfREVC VUdfSU5QVVRfRU4JCUJJVCgxMikKPiA+IC0jZGVmaW5lIFJHX0RTSV9QUkVTRVJWRQkJCSg3IDw8 IDEzKQo+ID4gLQo+ID4gLSNkZWZpbmUgTUlQSVRYX0RTSV9CR19DT04JMHg0NAo+ID4gLSNkZWZp bmUgUkdfRFNJX0JHX0NPUkVfRU4JCUJJVCgwKQo+ID4gLSNkZWZpbmUgUkdfRFNJX0JHX0NLRU4J CQlCSVQoMSkKPiA+IC0jZGVmaW5lIFJHX0RTSV9CR19ESVYJCQkoMHgzIDw8IDIpCj4gPiAtI2Rl ZmluZSBSR19EU0lfQkdfRkFTVF9DSEFSR0UJCUJJVCg0KQo+ID4gLSNkZWZpbmUgUkdfRFNJX1ZP VVRfTVNLCQkJKDB4M2ZmZmYgPDwgNSkKPiA+IC0jZGVmaW5lIFJHX0RTSV9WMTJfU0VMCQkJKDcg PDwgNSkKPiA+IC0jZGVmaW5lIFJHX0RTSV9WMTBfU0VMCQkJKDcgPDwgOCkKPiA+IC0jZGVmaW5l IFJHX0RTSV9WMDcyX1NFTAkJCSg3IDw8IDExKQo+ID4gLSNkZWZpbmUgUkdfRFNJX1YwNF9TRUwJ CQkoNyA8PCAxNCkKPiA+IC0jZGVmaW5lIFJHX0RTSV9WMDMyX1NFTAkJCSg3IDw8IDE3KQo+ID4g LSNkZWZpbmUgUkdfRFNJX1YwMl9TRUwJCQkoNyA8PCAyMCkKPiA+IC0jZGVmaW5lIFJHX0RTSV9C R19SMV9UUklNCQkoMHhmIDw8IDI0KQo+ID4gLSNkZWZpbmUgUkdfRFNJX0JHX1IyX1RSSU0JCSgw eGYgPDwgMjgpCj4gPiAtCj4gPiAtI2RlZmluZSBNSVBJVFhfRFNJX1BMTF9DT04wCTB4NTAKPiA+ IC0jZGVmaW5lIFJHX0RTSV9NUFBMTF9QTExfRU4JCUJJVCgwKQo+ID4gLSNkZWZpbmUgUkdfRFNJ X01QUExMX0RJVl9NU0sJCSgweDFmZiA8PCAxKQo+ID4gLSNkZWZpbmUgUkdfRFNJX01QUExMX1BS RURJVgkJKDMgPDwgMSkKPiA+IC0jZGVmaW5lIFJHX0RTSV9NUFBMTF9UWERJVjAJCSgzIDw8IDMp Cj4gPiAtI2RlZmluZSBSR19EU0lfTVBQTExfVFhESVYxCQkoMyA8PCA1KQo+ID4gLSNkZWZpbmUg UkdfRFNJX01QUExMX1BPU0RJVgkJKDcgPDwgNykKPiA+IC0jZGVmaW5lIFJHX0RTSV9NUFBMTF9N T05WQ19FTgkJQklUKDEwKQo+ID4gLSNkZWZpbmUgUkdfRFNJX01QUExMX01PTlJFRl9FTgkJQklU KDExKQo+ID4gLSNkZWZpbmUgUkdfRFNJX01QUExMX1ZPRF9FTgkJQklUKDEyKQo+ID4gLQo+ID4g LSNkZWZpbmUgTUlQSVRYX0RTSV9QTExfQ09OMQkweDU0Cj4gPiAtI2RlZmluZSBSR19EU0lfTVBQ TExfU0RNX0ZSQV9FTgkJQklUKDApCj4gPiAtI2RlZmluZSBSR19EU0lfTVBQTExfU0RNX1NTQ19Q SF9JTklUCUJJVCgxKQo+ID4gLSNkZWZpbmUgUkdfRFNJX01QUExMX1NETV9TU0NfRU4JCUJJVCgy KQo+ID4gLSNkZWZpbmUgUkdfRFNJX01QUExMX1NETV9TU0NfUFJECSgweGZmZmYgPDwgMTYpCj4g PiAtCj4gPiAtI2RlZmluZSBNSVBJVFhfRFNJX1BMTF9DT04yCTB4NTgKPiA+IC0KPiA+IC0jZGVm aW5lIE1JUElUWF9EU0lfUExMX1RPUAkweDY0Cj4gPiAtI2RlZmluZSBSR19EU0lfTVBQTExfUFJF U0VSVkUJCSgweGZmIDw8IDgpCj4gPiAtCj4gPiAtI2RlZmluZSBNSVBJVFhfRFNJX1BMTF9QV1IJ MHg2OAo+ID4gLSNkZWZpbmUgUkdfRFNJX01QUExMX1NETV9QV1JfT04JCUJJVCgwKQo+ID4gLSNk ZWZpbmUgUkdfRFNJX01QUExMX1NETV9JU09fRU4JCUJJVCgxKQo+ID4gLSNkZWZpbmUgUkdfRFNJ X01QUExMX1NETV9QV1JfQUNLCUJJVCg4KQo+ID4gLQo+ID4gLSNkZWZpbmUgTUlQSVRYX0RTSV9T V19DVFJMCTB4ODAKPiA+IC0jZGVmaW5lIFNXX0NUUkxfRU4JCQlCSVQoMCkKPiA+IC0KPiA+IC0j ZGVmaW5lIE1JUElUWF9EU0lfU1dfQ1RSTF9DT04wCTB4ODQKPiA+IC0jZGVmaW5lIFNXX0xOVENf TFBUWF9QUkVfT0UJCUJJVCgwKQo+ID4gLSNkZWZpbmUgU1dfTE5UQ19MUFRYX09FCQkJQklUKDEp Cj4gPiAtI2RlZmluZSBTV19MTlRDX0xQVFhfUAkJCUJJVCgyKQo+ID4gLSNkZWZpbmUgU1dfTE5U Q19MUFRYX04JCQlCSVQoMykKPiA+IC0jZGVmaW5lIFNXX0xOVENfSFNUWF9QUkVfT0UJCUJJVCg0 KQo+ID4gLSNkZWZpbmUgU1dfTE5UQ19IU1RYX09FCQkJQklUKDUpCj4gPiAtI2RlZmluZSBTV19M TlRDX0hTVFhfWkVST0NMSwkJQklUKDYpCj4gPiAtI2RlZmluZSBTV19MTlQwX0xQVFhfUFJFX09F CQlCSVQoNykKPiA+IC0jZGVmaW5lIFNXX0xOVDBfTFBUWF9PRQkJCUJJVCg4KQo+ID4gLSNkZWZp bmUgU1dfTE5UMF9MUFRYX1AJCQlCSVQoOSkKPiA+IC0jZGVmaW5lIFNXX0xOVDBfTFBUWF9OCQkJ QklUKDEwKQo+ID4gLSNkZWZpbmUgU1dfTE5UMF9IU1RYX1BSRV9PRQkJQklUKDExKQo+ID4gLSNk ZWZpbmUgU1dfTE5UMF9IU1RYX09FCQkJQklUKDEyKQo+ID4gLSNkZWZpbmUgU1dfTE5UMF9MUFJY X0VOCQkJQklUKDEzKQo+ID4gLSNkZWZpbmUgU1dfTE5UMV9MUFRYX1BSRV9PRQkJQklUKDE0KQo+ ID4gLSNkZWZpbmUgU1dfTE5UMV9MUFRYX09FCQkJQklUKDE1KQo+ID4gLSNkZWZpbmUgU1dfTE5U MV9MUFRYX1AJCQlCSVQoMTYpCj4gPiAtI2RlZmluZSBTV19MTlQxX0xQVFhfTgkJCUJJVCgxNykK PiA+IC0jZGVmaW5lIFNXX0xOVDFfSFNUWF9QUkVfT0UJCUJJVCgxOCkKPiA+IC0jZGVmaW5lIFNX X0xOVDFfSFNUWF9PRQkJCUJJVCgxOSkKPiA+IC0jZGVmaW5lIFNXX0xOVDJfTFBUWF9QUkVfT0UJ CUJJVCgyMCkKPiA+IC0jZGVmaW5lIFNXX0xOVDJfTFBUWF9PRQkJCUJJVCgyMSkKPiA+IC0jZGVm aW5lIFNXX0xOVDJfTFBUWF9QCQkJQklUKDIyKQo+ID4gLSNkZWZpbmUgU1dfTE5UMl9MUFRYX04J CQlCSVQoMjMpCj4gPiAtI2RlZmluZSBTV19MTlQyX0hTVFhfUFJFX09FCQlCSVQoMjQpCj4gPiAt I2RlZmluZSBTV19MTlQyX0hTVFhfT0UJCQlCSVQoMjUpCj4gPiAtCj4gPiAtc3RydWN0IG10a19t aXBpdHhfZGF0YSB7Cj4gPiAtCWNvbnN0IHUzMiBtcHBsbF9wcmVzZXJ2ZTsKPiA+IC19Owo+ID4g LQo+ID4gLXN0cnVjdCBtdGtfbWlwaV90eCB7Cj4gPiAtCXN0cnVjdCBkZXZpY2UgKmRldjsKPiA+ IC0Jdm9pZCBfX2lvbWVtICpyZWdzOwo+ID4gLQl1MzIgZGF0YV9yYXRlOwo+ID4gLQljb25zdCBz dHJ1Y3QgbXRrX21pcGl0eF9kYXRhICpkcml2ZXJfZGF0YTsKPiA+IC0Jc3RydWN0IGNsa19odyBw bGxfaHc7Cj4gPiAtCXN0cnVjdCBjbGsgKnBsbDsKPiA+IC19Owo+ID4gKyNpbmNsdWRlICJtdGtf bWlwaV90eC5oIgo+ID4gIAo+ID4gLXN0YXRpYyBpbmxpbmUgc3RydWN0IG10a19taXBpX3R4ICpt dGtfbWlwaV90eF9mcm9tX2Nsa19odyhzdHJ1Y3QgY2xrX2h3ICpodykKPiA+ICtpbmxpbmUgc3Ry dWN0IG10a19taXBpX3R4ICptdGtfbWlwaV90eF9mcm9tX2Nsa19odyhzdHJ1Y3QgY2xrX2h3ICpo dykKPiA+ICB7Cj4gPiAgCXJldHVybiBjb250YWluZXJfb2YoaHcsIHN0cnVjdCBtdGtfbWlwaV90 eCwgcGxsX2h3KTsKPiA+ICB9Cj4gPiAgCj4gPiAtc3RhdGljIHZvaWQgbXRrX21pcGlfdHhfY2xl YXJfYml0cyhzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHgsIHUzMiBvZmZzZXQsCj4gPiAtCQkJ CSAgIHUzMiBiaXRzKQo+ID4gK3ZvaWQgbXRrX21pcGlfdHhfY2xlYXJfYml0cyhzdHJ1Y3QgbXRr X21pcGlfdHggKm1pcGlfdHgsIHUzMiBvZmZzZXQsCj4gPiArCQkJICAgIHUzMiBiaXRzKQo+ID4g IHsKPiA+ICAJdTMyIHRlbXAgPSByZWFkbChtaXBpX3R4LT5yZWdzICsgb2Zmc2V0KTsKPiA+ICAK PiA+ICAJd3JpdGVsKHRlbXAgJiB+Yml0cywgbWlwaV90eC0+cmVncyArIG9mZnNldCk7Cj4gPiAg fQo+ID4gIAo+ID4gLXN0YXRpYyB2b2lkIG10a19taXBpX3R4X3NldF9iaXRzKHN0cnVjdCBtdGtf bWlwaV90eCAqbWlwaV90eCwgdTMyIG9mZnNldCwKPiA+IC0JCQkJIHUzMiBiaXRzKQo+ID4gK3Zv aWQgbXRrX21pcGlfdHhfc2V0X2JpdHMoc3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4LCB1MzIg b2Zmc2V0LAo+ID4gKwkJCSAgdTMyIGJpdHMpCj4gPiAgewo+ID4gIAl1MzIgdGVtcCA9IHJlYWRs KG1pcGlfdHgtPnJlZ3MgKyBvZmZzZXQpOwo+ID4gIAo+ID4gIAl3cml0ZWwodGVtcCB8IGJpdHMs IG1pcGlfdHgtPnJlZ3MgKyBvZmZzZXQpOwo+ID4gIH0KPiA+ICAKPiA+IC1zdGF0aWMgdm9pZCBt dGtfbWlwaV90eF91cGRhdGVfYml0cyhzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHgsIHUzMiBv ZmZzZXQsCj4gPiAtCQkJCSAgICB1MzIgbWFzaywgdTMyIGRhdGEpCj4gPiArdm9pZCBtdGtfbWlw aV90eF91cGRhdGVfYml0cyhzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHgsIHUzMiBvZmZzZXQs Cj4gPiArCQkJICAgICB1MzIgbWFzaywgdTMyIGRhdGEpCj4gPiAgewo+ID4gIAl1MzIgdGVtcCA9 IHJlYWRsKG1pcGlfdHgtPnJlZ3MgKyBvZmZzZXQpOwo+ID4gIAo+ID4gIAl3cml0ZWwoKHRlbXAg JiB+bWFzaykgfCAoZGF0YSAmIG1hc2spLCBtaXBpX3R4LT5yZWdzICsgb2Zmc2V0KTsKPiA+ICB9 Cj4gPiAgCj4gPiAtc3RhdGljIGludCBtdGtfbWlwaV90eF9wbGxfcHJlcGFyZShzdHJ1Y3QgY2xr X2h3ICpodykKPiA+IC17Cj4gPiAtCXN0cnVjdCBtdGtfbWlwaV90eCAqbWlwaV90eCA9IG10a19t aXBpX3R4X2Zyb21fY2xrX2h3KGh3KTsKPiA+IC0JdTggdHhkaXYsIHR4ZGl2MCwgdHhkaXYxOwo+ ID4gLQl1NjQgcGN3Owo+ID4gLQo+ID4gLQlkZXZfZGJnKG1pcGlfdHgtPmRldiwgInByZXBhcmU6 ICV1IEh6XG4iLCBtaXBpX3R4LT5kYXRhX3JhdGUpOwo+ID4gLQo+ID4gLQlpZiAobWlwaV90eC0+ ZGF0YV9yYXRlID49IDUwMDAwMDAwMCkgewo+ID4gLQkJdHhkaXYgPSAxOwo+ID4gLQkJdHhkaXYw ID0gMDsKPiA+IC0JCXR4ZGl2MSA9IDA7Cj4gPiAtCX0gZWxzZSBpZiAobWlwaV90eC0+ZGF0YV9y YXRlID49IDI1MDAwMDAwMCkgewo+ID4gLQkJdHhkaXYgPSAyOwo+ID4gLQkJdHhkaXYwID0gMTsK PiA+IC0JCXR4ZGl2MSA9IDA7Cj4gPiAtCX0gZWxzZSBpZiAobWlwaV90eC0+ZGF0YV9yYXRlID49 IDEyNTAwMDAwMCkgewo+ID4gLQkJdHhkaXYgPSA0Owo+ID4gLQkJdHhkaXYwID0gMjsKPiA+IC0J CXR4ZGl2MSA9IDA7Cj4gPiAtCX0gZWxzZSBpZiAobWlwaV90eC0+ZGF0YV9yYXRlID4gNjIwMDAw MDApIHsKPiA+IC0JCXR4ZGl2ID0gODsKPiA+IC0JCXR4ZGl2MCA9IDI7Cj4gPiAtCQl0eGRpdjEg PSAxOwo+ID4gLQl9IGVsc2UgaWYgKG1pcGlfdHgtPmRhdGFfcmF0ZSA+PSA1MDAwMDAwMCkgewo+ ID4gLQkJdHhkaXYgPSAxNjsKPiA+IC0JCXR4ZGl2MCA9IDI7Cj4gPiAtCQl0eGRpdjEgPSAyOwo+ ID4gLQl9IGVsc2Ugewo+ID4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gPiAtCX0KPiA+IC0KPiA+IC0J bXRrX21pcGlfdHhfdXBkYXRlX2JpdHMobWlwaV90eCwgTUlQSVRYX0RTSV9CR19DT04sCj4gPiAt CQkJCVJHX0RTSV9WT1VUX01TSyB8Cj4gPiAtCQkJCVJHX0RTSV9CR19DS0VOIHwgUkdfRFNJX0JH X0NPUkVfRU4sCj4gPiAtCQkJCSg0IDw8IDIwKSB8ICg0IDw8IDE3KSB8ICg0IDw8IDE0KSB8Cj4g PiAtCQkJCSg0IDw8IDExKSB8ICg0IDw8IDgpIHwgKDQgPDwgNSkgfAo+ID4gLQkJCQlSR19EU0lf QkdfQ0tFTiB8IFJHX0RTSV9CR19DT1JFX0VOKTsKPiA+IC0KPiA+IC0JdXNsZWVwX3JhbmdlKDMw LCAxMDApOwo+ID4gLQo+ID4gLQltdGtfbWlwaV90eF91cGRhdGVfYml0cyhtaXBpX3R4LCBNSVBJ VFhfRFNJX1RPUF9DT04sCj4gPiAtCQkJCVJHX0RTSV9MTlRfSU1QX0NBTF9DT0RFIHwgUkdfRFNJ X0xOVF9IU19CSUFTX0VOLAo+ID4gLQkJCQkoOCA8PCA0KSB8IFJHX0RTSV9MTlRfSFNfQklBU19F Tik7Cj4gPiAtCj4gPiAtCW10a19taXBpX3R4X3NldF9iaXRzKG1pcGlfdHgsIE1JUElUWF9EU0lf Q09OLAo+ID4gLQkJCSAgICAgUkdfRFNJX0NLR19MRE9PVVRfRU4gfCBSR19EU0lfTERPQ09SRV9F Tik7Cj4gPiAtCj4gPiAtCW10a19taXBpX3R4X3VwZGF0ZV9iaXRzKG1pcGlfdHgsIE1JUElUWF9E U0lfUExMX1BXUiwKPiA+IC0JCQkJUkdfRFNJX01QUExMX1NETV9QV1JfT04gfAo+ID4gLQkJCQlS R19EU0lfTVBQTExfU0RNX0lTT19FTiwKPiA+IC0JCQkJUkdfRFNJX01QUExMX1NETV9QV1JfT04p Owo+ID4gLQo+ID4gLQltdGtfbWlwaV90eF9jbGVhcl9iaXRzKG1pcGlfdHgsIE1JUElUWF9EU0lf UExMX0NPTjAsCj4gPiAtCQkJICAgICAgIFJHX0RTSV9NUFBMTF9QTExfRU4pOwo+ID4gLQo+ID4g LQltdGtfbWlwaV90eF91cGRhdGVfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9DT04wLAo+ ID4gLQkJCQlSR19EU0lfTVBQTExfVFhESVYwIHwgUkdfRFNJX01QUExMX1RYRElWMSB8Cj4gPiAt CQkJCVJHX0RTSV9NUFBMTF9QUkVESVYsCj4gPiAtCQkJCSh0eGRpdjAgPDwgMykgfCAodHhkaXYx IDw8IDUpKTsKPiA+IC0KPiA+IC0JLyoKPiA+IC0JICogUExMIFBDVyBjb25maWcKPiA+IC0JICog UENXIGJpdCAyNH4zMCA9IGludGVnZXIgcGFydCBvZiBwY3cKPiA+IC0JICogUENXIGJpdCAwfjIz ID0gZnJhY3Rpb25hbCBwYXJ0IG9mIHBjdwo+ID4gLQkgKiBwY3cgPSBkYXRhX1JhdGUqNCp0eGRp di8oUmVmX2NsayoyKTsKPiA+IC0JICogUG9zdCBESVYgPTQsIHNvIG5lZWQgZGF0YV9SYXRlKjQK PiA+IC0JICogUmVmX2NsayBpcyAyNk1Iego+ID4gLQkgKi8KPiA+IC0JcGN3ID0gZGl2X3U2NCgo KHU2NCltaXBpX3R4LT5kYXRhX3JhdGUgKiAyICogdHhkaXYpIDw8IDI0LAo+ID4gLQkJICAgICAg MjYwMDAwMDApOwo+ID4gLQl3cml0ZWwocGN3LCBtaXBpX3R4LT5yZWdzICsgTUlQSVRYX0RTSV9Q TExfQ09OMik7Cj4gPiAtCj4gPiAtCW10a19taXBpX3R4X3NldF9iaXRzKG1pcGlfdHgsIE1JUElU WF9EU0lfUExMX0NPTjEsCj4gPiAtCQkJICAgICBSR19EU0lfTVBQTExfU0RNX0ZSQV9FTik7Cj4g PiAtCj4gPiAtCW10a19taXBpX3R4X3NldF9iaXRzKG1pcGlfdHgsIE1JUElUWF9EU0lfUExMX0NP TjAsIFJHX0RTSV9NUFBMTF9QTExfRU4pOwo+ID4gLQo+ID4gLQl1c2xlZXBfcmFuZ2UoMjAsIDEw MCk7Cj4gPiAtCj4gPiAtCW10a19taXBpX3R4X2NsZWFyX2JpdHMobWlwaV90eCwgTUlQSVRYX0RT SV9QTExfQ09OMSwKPiA+IC0JCQkgICAgICAgUkdfRFNJX01QUExMX1NETV9TU0NfRU4pOwo+ID4g LQo+ID4gLQltdGtfbWlwaV90eF91cGRhdGVfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9U T1AsCj4gPiAtCQkJCVJHX0RTSV9NUFBMTF9QUkVTRVJWRSwKPiA+IC0JCQkJbWlwaV90eC0+ZHJp dmVyX2RhdGEtPm1wcGxsX3ByZXNlcnZlKTsKPiA+IC0KPiA+IC0JcmV0dXJuIDA7Cj4gPiAtfQo+ ID4gLQo+ID4gLXN0YXRpYyB2b2lkIG10a19taXBpX3R4X3BsbF91bnByZXBhcmUoc3RydWN0IGNs a19odyAqaHcpCj4gPiAtewo+ID4gLQlzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHggPSBtdGtf bWlwaV90eF9mcm9tX2Nsa19odyhodyk7Cj4gPiAtCj4gPiAtCWRldl9kYmcobWlwaV90eC0+ZGV2 LCAidW5wcmVwYXJlXG4iKTsKPiA+IC0KPiA+IC0JbXRrX21pcGlfdHhfY2xlYXJfYml0cyhtaXBp X3R4LCBNSVBJVFhfRFNJX1BMTF9DT04wLAo+ID4gLQkJCSAgICAgICBSR19EU0lfTVBQTExfUExM X0VOKTsKPiA+IC0KPiA+IC0JbXRrX21pcGlfdHhfdXBkYXRlX2JpdHMobWlwaV90eCwgTUlQSVRY X0RTSV9QTExfVE9QLAo+ID4gLQkJCQlSR19EU0lfTVBQTExfUFJFU0VSVkUsIDApOwo+ID4gLQo+ ID4gLQltdGtfbWlwaV90eF91cGRhdGVfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9QV1Is Cj4gPiAtCQkJCVJHX0RTSV9NUFBMTF9TRE1fSVNPX0VOIHwKPiA+IC0JCQkJUkdfRFNJX01QUExM X1NETV9QV1JfT04sCj4gPiAtCQkJCVJHX0RTSV9NUFBMTF9TRE1fSVNPX0VOKTsKPiA+IC0KPiA+ IC0JbXRrX21pcGlfdHhfY2xlYXJfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJX1RPUF9DT04sCj4g PiAtCQkJICAgICAgIFJHX0RTSV9MTlRfSFNfQklBU19FTik7Cj4gPiAtCj4gPiAtCW10a19taXBp X3R4X2NsZWFyX2JpdHMobWlwaV90eCwgTUlQSVRYX0RTSV9DT04sCj4gPiAtCQkJICAgICAgIFJH X0RTSV9DS0dfTERPT1VUX0VOIHwgUkdfRFNJX0xET0NPUkVfRU4pOwo+ID4gLQo+ID4gLQltdGtf bWlwaV90eF9jbGVhcl9iaXRzKG1pcGlfdHgsIE1JUElUWF9EU0lfQkdfQ09OLAo+ID4gLQkJCSAg ICAgICBSR19EU0lfQkdfQ0tFTiB8IFJHX0RTSV9CR19DT1JFX0VOKTsKPiA+IC0KPiA+IC0JbXRr X21pcGlfdHhfY2xlYXJfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9DT04wLAo+ID4gLQkJ CSAgICAgICBSR19EU0lfTVBQTExfRElWX01TSyk7Cj4gPiAtfQo+ID4gLQo+ID4gLXN0YXRpYyBs b25nIG10a19taXBpX3R4X3BsbF9yb3VuZF9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25l ZCBsb25nIHJhdGUsCj4gPiAtCQkJCSAgICAgICB1bnNpZ25lZCBsb25nICpwcmF0ZSkKPiA+ICts b25nIG10a19taXBpX3R4X3BsbF9yb3VuZF9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25l ZCBsb25nIHJhdGUsCj4gPiArCQkJCXVuc2lnbmVkIGxvbmcgKnByYXRlKQo+ID4gIHsKPiA+ICAJ cmV0dXJuIGNsYW1wX3ZhbChyYXRlLCA1MDAwMDAwMCwgMTI1MDAwMDAwMCk7Cj4gPiAgfQo+ID4g IAo+ID4gLXN0YXRpYyBpbnQgbXRrX21pcGlfdHhfcGxsX3NldF9yYXRlKHN0cnVjdCBjbGtfaHcg Kmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCj4gPiAtCQkJCSAgICB1bnNpZ25lZCBsb25nIHBhcmVu dF9yYXRlKQo+ID4gK2ludCBtdGtfbWlwaV90eF9wbGxfc2V0X3JhdGUoc3RydWN0IGNsa19odyAq aHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKPiA+ICsJCQkgICAgIHVuc2lnbmVkIGxvbmcgcGFyZW50 X3JhdGUpCj4gPiAgewo+ID4gIAlzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHggPSBtdGtfbWlw aV90eF9mcm9tX2Nsa19odyhodyk7Cj4gPiAgCj4gPiBAQCAtMzA3LDM3ICs2MCwxNCBAQCBzdGF0 aWMgaW50IG10a19taXBpX3R4X3BsbF9zZXRfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWdu ZWQgbG9uZyByYXRlLAo+ID4gIAlyZXR1cm4gMDsKPiA+ICB9Cj4gPiAgCj4gPiAtc3RhdGljIHVu c2lnbmVkIGxvbmcgbXRrX21pcGlfdHhfcGxsX3JlY2FsY19yYXRlKHN0cnVjdCBjbGtfaHcgKmh3 LAo+ID4gLQkJCQkJCSB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQo+ID4gK3Vuc2lnbmVkIGxv bmcgbXRrX21pcGlfdHhfcGxsX3JlY2FsY19yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LAo+ID4gKwkJ CQkJICB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQo+ID4gIHsKPiA+ICAJc3RydWN0IG10a19t aXBpX3R4ICptaXBpX3R4ID0gbXRrX21pcGlfdHhfZnJvbV9jbGtfaHcoaHcpOwo+ID4gIAo+ID4g IAlyZXR1cm4gbWlwaV90eC0+ZGF0YV9yYXRlOwo+ID4gIH0KPiA+ICAKPiA+IC1zdGF0aWMgY29u c3Qgc3RydWN0IGNsa19vcHMgbXRrX21pcGlfdHhfcGxsX29wcyA9IHsKPiA+IC0JLnByZXBhcmUg PSBtdGtfbWlwaV90eF9wbGxfcHJlcGFyZSwKPiA+IC0JLnVucHJlcGFyZSA9IG10a19taXBpX3R4 X3BsbF91bnByZXBhcmUsCj4gPiAtCS5yb3VuZF9yYXRlID0gbXRrX21pcGlfdHhfcGxsX3JvdW5k X3JhdGUsCj4gPiAtCS5zZXRfcmF0ZSA9IG10a19taXBpX3R4X3BsbF9zZXRfcmF0ZSwKPiA+IC0J LnJlY2FsY19yYXRlID0gbXRrX21pcGlfdHhfcGxsX3JlY2FsY19yYXRlLAo+ID4gLX07Cj4gPiAt Cj4gPiAtc3RhdGljIGludCBtdGtfbWlwaV90eF9wb3dlcl9vbl9zaWduYWwoc3RydWN0IHBoeSAq cGh5KQo+ID4gLXsKPiA+IC0Jc3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4ID0gcGh5X2dldF9k cnZkYXRhKHBoeSk7Cj4gPiAtCXUzMiByZWc7Cj4gPiAtCj4gPiAtCWZvciAocmVnID0gTUlQSVRY X0RTSV9DTE9DS19MQU5FOwo+ID4gLQkgICAgIHJlZyA8PSBNSVBJVFhfRFNJX0RBVEFfTEFORTM7 IHJlZyArPSA0KQo+ID4gLQkJbXRrX21pcGlfdHhfc2V0X2JpdHMobWlwaV90eCwgcmVnLCBSR19E U0lfTE5UeF9MRE9PVVRfRU4pOwo+ID4gLQo+ID4gLQltdGtfbWlwaV90eF9jbGVhcl9iaXRzKG1p cGlfdHgsIE1JUElUWF9EU0lfVE9QX0NPTiwKPiA+IC0JCQkgICAgICAgUkdfRFNJX1BBRF9USUVf TE9XX0VOKTsKPiA+IC0KPiA+IC0JcmV0dXJuIDA7Cj4gPiAtfQo+ID4gLQo+ID4gIHN0YXRpYyBp bnQgbXRrX21pcGlfdHhfcG93ZXJfb24oc3RydWN0IHBoeSAqcGh5KQo+ID4gIHsKPiA+ICAJc3Ry dWN0IG10a19taXBpX3R4ICptaXBpX3R4ID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7Cj4gPiBAQCAt MzQ5LDMwICs3OSwxNiBAQCBzdGF0aWMgaW50IG10a19taXBpX3R4X3Bvd2VyX29uKHN0cnVjdCBw aHkgKnBoeSkKPiA+ICAJCXJldHVybiByZXQ7Cj4gPiAgCj4gPiAgCS8qIEVuYWJsZSBEU0kgTGFu ZSBMRE8gb3V0cHV0cywgZGlzYWJsZSBwYWQgdGllIGxvdyAqLwo+ID4gLQltdGtfbWlwaV90eF9w b3dlcl9vbl9zaWduYWwocGh5KTsKPiA+IC0KPiA+ICsJbWlwaV90eC0+ZHJpdmVyX2RhdGEtPm1p cGlfdHhfZW5hYmxlX3NpZ25hbChwaHkpOwo+ID4gIAlyZXR1cm4gMDsKPiA+ICB9Cj4gPiAgCj4g PiAtc3RhdGljIHZvaWQgbXRrX21pcGlfdHhfcG93ZXJfb2ZmX3NpZ25hbChzdHJ1Y3QgcGh5ICpw aHkpCj4gPiAtewo+ID4gLQlzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHggPSBwaHlfZ2V0X2Ry dmRhdGEocGh5KTsKPiA+IC0JdTMyIHJlZzsKPiA+IC0KPiA+IC0JbXRrX21pcGlfdHhfc2V0X2Jp dHMobWlwaV90eCwgTUlQSVRYX0RTSV9UT1BfQ09OLAo+ID4gLQkJCSAgICAgUkdfRFNJX1BBRF9U SUVfTE9XX0VOKTsKPiA+IC0KPiA+IC0JZm9yIChyZWcgPSBNSVBJVFhfRFNJX0NMT0NLX0xBTkU7 Cj4gPiAtCSAgICAgcmVnIDw9IE1JUElUWF9EU0lfREFUQV9MQU5FMzsgcmVnICs9IDQpCj4gPiAt CQltdGtfbWlwaV90eF9jbGVhcl9iaXRzKG1pcGlfdHgsIHJlZywgUkdfRFNJX0xOVHhfTERPT1VU X0VOKTsKPiA+IC19Cj4gPiAtCj4gPiAgc3RhdGljIGludCBtdGtfbWlwaV90eF9wb3dlcl9vZmYo c3RydWN0IHBoeSAqcGh5KQo+ID4gIHsKPiA+ICAJc3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4 ID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7Cj4gPiAgCj4gPiAgCS8qIEVuYWJsZSBwYWQgdGllIGxv dywgZGlzYWJsZSBEU0kgTGFuZSBMRE8gb3V0cHV0cyAqLwo+ID4gLQltdGtfbWlwaV90eF9wb3dl cl9vZmZfc2lnbmFsKHBoeSk7Cj4gPiArCW1pcGlfdHgtPmRyaXZlcl9kYXRhLT5taXBpX3R4X2Rp c2FibGVfc2lnbmFsKHBoeSk7Cj4gPiAgCj4gPiAgCS8qIERpc2FibGUgUExMIGFuZCBwb3dlciBk b3duIGNvcmUgKi8KPiA+ICAJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKG1pcGlfdHgtPnBsbCk7Cj4g PiBAQCAtMzg2LDE1ICsxMDIsMjMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlfb3BzIG10a19t aXBpX3R4X29wcyA9IHsKPiA+ICAJLm93bmVyID0gVEhJU19NT0RVTEUsCj4gPiAgfTsKPiA+ICAK PiA+ICtzdGF0aWMgdm9pZCBtdGtfbWlwaV90eF9jbGtfZ2V0X29wcyhzdHJ1Y3QgbXRrX21pcGlf dHggKm1pcGlfdHgsCj4gPiArCQkJCSAgICBjb25zdCBzdHJ1Y3QgY2xrX29wcyAqKm9wcykKPiA+ ICt7Cj4gPiArCWlmIChtaXBpX3R4ICYmIG1pcGlfdHgtPmRyaXZlcl9kYXRhICYmCj4gPiArCSAg ICBtaXBpX3R4LT5kcml2ZXJfZGF0YS0+bWlwaV90eF9jbGtfb3BzKQo+ID4gKwkJKm9wcyA9IG1p cGlfdHgtPmRyaXZlcl9kYXRhLT5taXBpX3R4X2Nsa19vcHM7Cj4gPiArCWVsc2UKPiA+ICsJCWRl dl9lcnIobWlwaV90eC0+ZGV2LCAiRmFpbGVkIHRvIGdldCBjbGsgb3BzIG9mIHBoeVxuIik7Cj4g PiArfQo+ID4gKwo+ID4gIHN0YXRpYyBpbnQgbXRrX21pcGlfdHhfcHJvYmUoc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldikKPiA+ICB7Cj4gPiAgCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2 LT5kZXY7Cj4gPiAgCXN0cnVjdCBtdGtfbWlwaV90eCAqbWlwaV90eDsKPiA+ICAJc3RydWN0IHJl c291cmNlICptZW07Cj4gPiAtCXN0cnVjdCBjbGsgKnJlZl9jbGs7Cj4gPiAgCWNvbnN0IGNoYXIg KnJlZl9jbGtfbmFtZTsKPiA+ICAJc3RydWN0IGNsa19pbml0X2RhdGEgY2xrX2luaXQgPSB7Cj4g PiAtCQkub3BzID0gJm10a19taXBpX3R4X3BsbF9vcHMsCj4gPiAgCQkubnVtX3BhcmVudHMgPSAx LAo+ID4gIAkJLnBhcmVudF9uYW1lcyA9IChjb25zdCBjaGFyICogY29uc3QgKikmcmVmX2Nsa19u YW1lLAo+ID4gIAkJLmZsYWdzID0gQ0xLX1NFVF9SQVRFX0dBVEUsCj4gPiBAQCAtNDA4LDYgKzEz Miw3IEBAIHN0YXRpYyBpbnQgbXRrX21pcGlfdHhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldikKPiA+ICAJCXJldHVybiAtRU5PTUVNOwo+ID4gIAo+ID4gIAltaXBpX3R4LT5kcml2 ZXJfZGF0YSA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpOwo+ID4gKwo+ID4gIAltZW0g PSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwo+ID4gIAlt aXBpX3R4LT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgbWVtKTsKPiA+ICAJaWYg KElTX0VSUihtaXBpX3R4LT5yZWdzKSkgewo+ID4gQEAgLTQxNiwxMyArMTQxLDE0IEBAIHN0YXRp YyBpbnQgbXRrX21pcGlfdHhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiA+ ICAJCXJldHVybiByZXQ7Cj4gPiAgCX0KPiA+ICAKPiA+IC0JcmVmX2NsayA9IGRldm1fY2xrX2dl dChkZXYsIE5VTEwpOwo+ID4gLQlpZiAoSVNfRVJSKHJlZl9jbGspKSB7Cj4gPiAtCQlyZXQgPSBQ VFJfRVJSKHJlZl9jbGspOwo+ID4gKwltaXBpX3R4LT5yZWZfY2xrID0gZGV2bV9jbGtfZ2V0KGRl diwgInJlZl9jbGsiKTsKPiA+ICsJaWYgKElTX0VSUihtaXBpX3R4LT5yZWZfY2xrKSkgewo+ID4g KwkJcmV0ID0gUFRSX0VSUihtaXBpX3R4LT5yZWZfY2xrKTsKPiA+ICAJCWRldl9lcnIoZGV2LCAi RmFpbGVkIHRvIGdldCByZWZlcmVuY2UgY2xvY2s6ICVkXG4iLCByZXQpOwo+ID4gIAkJcmV0dXJu IHJldDsKPiA+ICAJfQo+ID4gLQlyZWZfY2xrX25hbWUgPSBfX2Nsa19nZXRfbmFtZShyZWZfY2xr KTsKPiA+ICsKPiA+ICsJcmVmX2Nsa19uYW1lID0gX19jbGtfZ2V0X25hbWUobWlwaV90eC0+cmVm X2Nsayk7Cj4gPiAgCj4gPiAgCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKGRldi0+b2Zf bm9kZSwgImNsb2NrLW91dHB1dC1uYW1lcyIsCj4gPiAgCQkJCSAgICAgICZjbGtfaW5pdC5uYW1l KTsKPiA+IEBAIC00MzEsNiArMTU3LDggQEAgc3RhdGljIGludCBtdGtfbWlwaV90eF9wcm9iZShz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ID4gIAkJcmV0dXJuIHJldDsKPiA+ICAJfQo+ ID4gIAo+ID4gKwltdGtfbWlwaV90eF9jbGtfZ2V0X29wcyhtaXBpX3R4LCAmY2xrX2luaXQub3Bz KTsKPiA+ICsKPiA+ICAJbWlwaV90eC0+cGxsX2h3LmluaXQgPSAmY2xrX2luaXQ7Cj4gPiAgCW1p cGlfdHgtPnBsbCA9IGRldm1fY2xrX3JlZ2lzdGVyKGRldiwgJm1pcGlfdHgtPnBsbF9odyk7Cj4g PiAgCWlmIChJU19FUlIobWlwaV90eC0+cGxsKSkgewo+ID4gQEAgLTQ2NSwyMCArMTkzLDE0IEBA IHN0YXRpYyBpbnQgbXRrX21pcGlfdHhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpCj4gPiAgCXJldHVybiAwOwo+ID4gIH0KPiA+ICAKPiA+IC1zdGF0aWMgY29uc3Qgc3RydWN0 IG10a19taXBpdHhfZGF0YSBtdDI3MDFfbWlwaXR4X2RhdGEgPSB7Cj4gPiAtCS5tcHBsbF9wcmVz ZXJ2ZSA9ICgzIDw8IDgpCj4gPiAtfTsKPiA+IC0KPiA+IC1zdGF0aWMgY29uc3Qgc3RydWN0IG10 a19taXBpdHhfZGF0YSBtdDgxNzNfbWlwaXR4X2RhdGEgPSB7Cj4gPiAtCS5tcHBsbF9wcmVzZXJ2 ZSA9ICgwIDw8IDgpCj4gPiAtfTsKPiA+IC0KPiA+ICBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2Rl dmljZV9pZCBtdGtfbWlwaV90eF9tYXRjaFtdID0gewo+ID4gIAl7IC5jb21wYXRpYmxlID0gIm1l ZGlhdGVrLG10MjcwMS1taXBpLXR4IiwKPiA+ICAJICAuZGF0YSA9ICZtdDI3MDFfbWlwaXR4X2Rh dGEgfSwKPiA+ICAJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtbWlwaS10eCIsCj4g PiAgCSAgLmRhdGEgPSAmbXQ4MTczX21pcGl0eF9kYXRhIH0sCj4gPiAtCXt9LAo+ID4gKwl7IC5j b21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE4My1taXBpLXR4IiwKPiA+ICsJICAuZGF0YSA9ICZt dDgxODNfbWlwaXR4X2RhdGEgfSwKPiA+ICsJeyB9LAo+ID4gIH07Cj4gPiAgCj4gPiAgc3RydWN0 IHBsYXRmb3JtX2RyaXZlciBtdGtfbWlwaV90eF9kcml2ZXIgPSB7Cj4gPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19taXBpX3R4LmggYi9kcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvbXRrX21pcGlfdHguaAo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4 IDAwMDAwMDAwMDAwMC4uYWY4MzAyM2U4MWNmCj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX21pcGlfdHguaAo+ID4gQEAgLTAsMCArMSw1MiBA QAo+ID4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCj4gPiArLyoKPiA+ ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTkgTWVkaWFUZWsgSW5jLgo+ID4gKyAqIEF1dGhvcjogSml0 YW8gU2hpIDxqaXRhby5zaGlAbWVkaWF0ZWsuY29tPgo+ID4gKyAqLwo+ID4gKwo+ID4gKyNpZm5k ZWYgX01US19NSVBJX1RYX0gKPiA+ICsjZGVmaW5lIF9NVEtfTUlQSV9UWF9ICj4gPiArCj4gPiAr I2luY2x1ZGUgPGxpbnV4L2Nsay5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIu aD4KPiA+ICsjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvaW8u aD4KPiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L29m X2RldmljZS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPiA+ICsj aW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPgo+ID4gKwo+ID4gK3N0cnVjdCBtdGtfbWlwaXR4X2Rh dGEgewo+ID4gKwljb25zdCB1MzIgbXBwbGxfcHJlc2VydmU7Cj4gPiArCWNvbnN0IHN0cnVjdCBj bGtfb3BzICptaXBpX3R4X2Nsa19vcHM7Cj4gPiArCXZvaWQgKCptaXBpX3R4X2VuYWJsZV9zaWdu YWwpKHN0cnVjdCBwaHkgKnBoeSk7Cj4gPiArCXZvaWQgKCptaXBpX3R4X2Rpc2FibGVfc2lnbmFs KShzdHJ1Y3QgcGh5ICpwaHkpOwo+ID4gK307Cj4gPiArCj4gPiArc3RydWN0IG10a19taXBpX3R4 IHsKPiA+ICsJc3RydWN0IGRldmljZSAqZGV2Owo+ID4gKwl2b2lkIF9faW9tZW0gKnJlZ3M7Cj4g PiArCXUzMiBkYXRhX3JhdGU7Cj4gPiArCXN0cnVjdCBjbGsgKnJlZl9jbGs7Cj4gPiArCWNvbnN0 IHN0cnVjdCBtdGtfbWlwaXR4X2RhdGEgKmRyaXZlcl9kYXRhOwo+ID4gKwlzdHJ1Y3QgY2xrX2h3 IHBsbF9odzsKPiA+ICsJc3RydWN0IGNsayAqcGxsOwo+ID4gK307Cj4gPiArCj4gPiArc3RydWN0 IG10a19taXBpX3R4ICptdGtfbWlwaV90eF9mcm9tX2Nsa19odyhzdHJ1Y3QgY2xrX2h3ICpodyk7 Cj4gPiArdm9pZCBtdGtfbWlwaV90eF9jbGVhcl9iaXRzKHN0cnVjdCBtdGtfbWlwaV90eCAqbWlw aV90eCwgdTMyIG9mZnNldCwgdTMyIGJpdHMpOwo+ID4gK3ZvaWQgbXRrX21pcGlfdHhfc2V0X2Jp dHMoc3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4LCB1MzIgb2Zmc2V0LCB1MzIgYml0cyk7Cj4g PiArdm9pZCBtdGtfbWlwaV90eF91cGRhdGVfYml0cyhzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlf dHgsIHUzMiBvZmZzZXQsIHUzMiBtYXNrLAo+ID4gKwkJCSAgICAgdTMyIGRhdGEpOwo+ID4gK2xv bmcgbXRrX21pcGlfdHhfcGxsX3JvdW5kX3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVk IGxvbmcgcmF0ZSwKPiA+ICsJCQkJdW5zaWduZWQgbG9uZyAqcHJhdGUpOwo+ID4gK2ludCBtdGtf bWlwaV90eF9wbGxfc2V0X3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0 ZSwKPiA+ICsJCQkgICAgIHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpOwo+ID4gK3Vuc2lnbmVk IGxvbmcgbXRrX21pcGlfdHhfcGxsX3JlY2FsY19yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LAo+ID4g KwkJCQkJICB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKTsKPiA+ICsKPiA+ICtleHRlcm4gY29u c3Qgc3RydWN0IG10a19taXBpdHhfZGF0YSBtdDI3MDFfbWlwaXR4X2RhdGE7Cj4gPiArZXh0ZXJu IGNvbnN0IHN0cnVjdCBtdGtfbWlwaXR4X2RhdGEgbXQ4MTczX21pcGl0eF9kYXRhOwo+ID4gK2V4 dGVybiBjb25zdCBzdHJ1Y3QgbXRrX21pcGl0eF9kYXRhIG10ODE4M19taXBpdHhfZGF0YTsKPiA+ ICsKPiA+ICsjZW5kaWYKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX210ODE3M19taXBpX3R4LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX210ODE3 M19taXBpX3R4LmMKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwMDAw MDAuLjhlNTdjZGY4NWIwNgo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL21lZGlhdGVrL210a19tdDgxNzNfbWlwaV90eC5jCj4gPiBAQCAtMCwwICsxLDI5MCBAQAo+ ID4gKy8qCj4gPiArICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KPiA+ICsgKgo+ ID4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKPiA+ICsgKiBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiA+ICsgKgo+ID4gKyAqIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ID4g KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCj4gPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ID4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCj4gPiArICovCj4gPiArCj4gPiArI2luY2x1ZGUgIm10a19taXBp X3R4LmgiCj4gPiArCj4gPiArI2RlZmluZSBNSVBJVFhfRFNJX0NPTgkJMHgwMAo+ID4gKyNkZWZp bmUgUkdfRFNJX0xET0NPUkVfRU4JCUJJVCgwKQo+ID4gKyNkZWZpbmUgUkdfRFNJX0NLR19MRE9P VVRfRU4JCUJJVCgxKQo+ID4gKyNkZWZpbmUgUkdfRFNJX0JDTEtfU0VMCQkJKDMgPDwgMikKPiA+ ICsjZGVmaW5lIFJHX0RTSV9MRF9JRFhfU0VMCQkoNyA8PCA0KQo+ID4gKyNkZWZpbmUgUkdfRFNJ X1BIWUNMS19TRUwJCSgyIDw8IDgpCj4gPiArI2RlZmluZSBSR19EU0lfRFNJQ0xLX0ZSRVFfU0VM CQlCSVQoMTApCj4gPiArI2RlZmluZSBSR19EU0lfTFBUWF9DTE1QX0VOCQlCSVQoMTEpCj4gPiAr Cj4gPiArI2RlZmluZSBNSVBJVFhfRFNJX0NMT0NLX0xBTkUJMHgwNAo+ID4gKyNkZWZpbmUgTUlQ SVRYX0RTSV9EQVRBX0xBTkUwCTB4MDgKPiA+ICsjZGVmaW5lIE1JUElUWF9EU0lfREFUQV9MQU5F MQkweDBjCj4gPiArI2RlZmluZSBNSVBJVFhfRFNJX0RBVEFfTEFORTIJMHgxMAo+ID4gKyNkZWZp bmUgTUlQSVRYX0RTSV9EQVRBX0xBTkUzCTB4MTQKPiA+ICsjZGVmaW5lIFJHX0RTSV9MTlR4X0xE T09VVF9FTgkJQklUKDApCj4gPiArI2RlZmluZSBSR19EU0lfTE5UeF9DS0xBTkVfRU4JCUJJVCgx KQo+ID4gKyNkZWZpbmUgUkdfRFNJX0xOVHhfTFBUWF9JUExVUzEJCUJJVCgyKQo+ID4gKyNkZWZp bmUgUkdfRFNJX0xOVHhfTFBUWF9JUExVUzIJCUJJVCgzKQo+ID4gKyNkZWZpbmUgUkdfRFNJX0xO VHhfTFBUWF9JTUlOVVMJCUJJVCg0KQo+ID4gKyNkZWZpbmUgUkdfRFNJX0xOVHhfTFBDRF9JUExV UwkJQklUKDUpCj4gPiArI2RlZmluZSBSR19EU0lfTE5UeF9MUENEX0lNSU5VUwkJQklUKDYpCj4g PiArI2RlZmluZSBSR19EU0lfTE5UeF9SVF9DT0RFCQkoMHhmIDw8IDgpCj4gPiArCj4gPiArI2Rl ZmluZSBNSVBJVFhfRFNJX1RPUF9DT04JMHg0MAo+ID4gKyNkZWZpbmUgUkdfRFNJX0xOVF9JTlRS X0VOCQlCSVQoMCkKPiA+ICsjZGVmaW5lIFJHX0RTSV9MTlRfSFNfQklBU19FTgkJQklUKDEpCj4g PiArI2RlZmluZSBSR19EU0lfTE5UX0lNUF9DQUxfRU4JCUJJVCgyKQo+ID4gKyNkZWZpbmUgUkdf RFNJX0xOVF9URVNUTU9ERV9FTgkJQklUKDMpCj4gPiArI2RlZmluZSBSR19EU0lfTE5UX0lNUF9D QUxfQ09ERQkJKDB4ZiA8PCA0KQo+ID4gKyNkZWZpbmUgUkdfRFNJX0xOVF9BSU9fU0VMCQkoNyA8 PCA4KQo+ID4gKyNkZWZpbmUgUkdfRFNJX1BBRF9USUVfTE9XX0VOCQlCSVQoMTEpCj4gPiArI2Rl ZmluZSBSR19EU0lfREVCVUdfSU5QVVRfRU4JCUJJVCgxMikKPiA+ICsjZGVmaW5lIFJHX0RTSV9Q UkVTRVJWRQkJCSg3IDw8IDEzKQo+ID4gKwo+ID4gKyNkZWZpbmUgTUlQSVRYX0RTSV9CR19DT04J MHg0NAo+ID4gKyNkZWZpbmUgUkdfRFNJX0JHX0NPUkVfRU4JCUJJVCgwKQo+ID4gKyNkZWZpbmUg UkdfRFNJX0JHX0NLRU4JCQlCSVQoMSkKPiA+ICsjZGVmaW5lIFJHX0RTSV9CR19ESVYJCQkoMHgz IDw8IDIpCj4gPiArI2RlZmluZSBSR19EU0lfQkdfRkFTVF9DSEFSR0UJCUJJVCg0KQo+ID4gKyNk ZWZpbmUgUkdfRFNJX1ZPVVRfTVNLCQkJKDB4M2ZmZmYgPDwgNSkKPiA+ICsjZGVmaW5lIFJHX0RT SV9WMTJfU0VMCQkJKDcgPDwgNSkKPiA+ICsjZGVmaW5lIFJHX0RTSV9WMTBfU0VMCQkJKDcgPDwg OCkKPiA+ICsjZGVmaW5lIFJHX0RTSV9WMDcyX1NFTAkJCSg3IDw8IDExKQo+ID4gKyNkZWZpbmUg UkdfRFNJX1YwNF9TRUwJCQkoNyA8PCAxNCkKPiA+ICsjZGVmaW5lIFJHX0RTSV9WMDMyX1NFTAkJ CSg3IDw8IDE3KQo+ID4gKyNkZWZpbmUgUkdfRFNJX1YwMl9TRUwJCQkoNyA8PCAyMCkKPiA+ICsj ZGVmaW5lIFJHX0RTSV9CR19SMV9UUklNCQkoMHhmIDw8IDI0KQo+ID4gKyNkZWZpbmUgUkdfRFNJ X0JHX1IyX1RSSU0JCSgweGYgPDwgMjgpCj4gPiArCj4gPiArI2RlZmluZSBNSVBJVFhfRFNJX1BM TF9DT04wCTB4NTAKPiA+ICsjZGVmaW5lIFJHX0RTSV9NUFBMTF9QTExfRU4JCUJJVCgwKQo+ID4g KyNkZWZpbmUgUkdfRFNJX01QUExMX0RJVl9NU0sJCSgweDFmZiA8PCAxKQo+ID4gKyNkZWZpbmUg UkdfRFNJX01QUExMX1BSRURJVgkJKDMgPDwgMSkKPiA+ICsjZGVmaW5lIFJHX0RTSV9NUFBMTF9U WERJVjAJCSgzIDw8IDMpCj4gPiArI2RlZmluZSBSR19EU0lfTVBQTExfVFhESVYxCQkoMyA8PCA1 KQo+ID4gKyNkZWZpbmUgUkdfRFNJX01QUExMX1BPU0RJVgkJKDcgPDwgNykKPiA+ICsjZGVmaW5l IFJHX0RTSV9NUFBMTF9NT05WQ19FTgkJQklUKDEwKQo+ID4gKyNkZWZpbmUgUkdfRFNJX01QUExM X01PTlJFRl9FTgkJQklUKDExKQo+ID4gKyNkZWZpbmUgUkdfRFNJX01QUExMX1ZPRF9FTgkJQklU KDEyKQo+ID4gKwo+ID4gKyNkZWZpbmUgTUlQSVRYX0RTSV9QTExfQ09OMQkweDU0Cj4gPiArI2Rl ZmluZSBSR19EU0lfTVBQTExfU0RNX0ZSQV9FTgkJQklUKDApCj4gPiArI2RlZmluZSBSR19EU0lf TVBQTExfU0RNX1NTQ19QSF9JTklUCUJJVCgxKQo+ID4gKyNkZWZpbmUgUkdfRFNJX01QUExMX1NE TV9TU0NfRU4JCUJJVCgyKQo+ID4gKyNkZWZpbmUgUkdfRFNJX01QUExMX1NETV9TU0NfUFJECSgw eGZmZmYgPDwgMTYpCj4gPiArCj4gPiArI2RlZmluZSBNSVBJVFhfRFNJX1BMTF9DT04yCTB4NTgK PiA+ICsKPiA+ICsjZGVmaW5lIE1JUElUWF9EU0lfUExMX1RPUAkweDY0Cj4gPiArI2RlZmluZSBS R19EU0lfTVBQTExfUFJFU0VSVkUJCSgweGZmIDw8IDgpCj4gPiArCj4gPiArI2RlZmluZSBNSVBJ VFhfRFNJX1BMTF9QV1IJMHg2OAo+ID4gKyNkZWZpbmUgUkdfRFNJX01QUExMX1NETV9QV1JfT04J CUJJVCgwKQo+ID4gKyNkZWZpbmUgUkdfRFNJX01QUExMX1NETV9JU09fRU4JCUJJVCgxKQo+ID4g KyNkZWZpbmUgUkdfRFNJX01QUExMX1NETV9QV1JfQUNLCUJJVCg4KQo+ID4gKwo+ID4gKyNkZWZp bmUgTUlQSVRYX0RTSV9TV19DVFJMCTB4ODAKPiA+ICsjZGVmaW5lIFNXX0NUUkxfRU4JCQlCSVQo MCkKPiA+ICsKPiA+ICsjZGVmaW5lIE1JUElUWF9EU0lfU1dfQ1RSTF9DT04wCTB4ODQKPiA+ICsj ZGVmaW5lIFNXX0xOVENfTFBUWF9QUkVfT0UJCUJJVCgwKQo+ID4gKyNkZWZpbmUgU1dfTE5UQ19M UFRYX09FCQkJQklUKDEpCj4gPiArI2RlZmluZSBTV19MTlRDX0xQVFhfUAkJCUJJVCgyKQo+ID4g KyNkZWZpbmUgU1dfTE5UQ19MUFRYX04JCQlCSVQoMykKPiA+ICsjZGVmaW5lIFNXX0xOVENfSFNU WF9QUkVfT0UJCUJJVCg0KQo+ID4gKyNkZWZpbmUgU1dfTE5UQ19IU1RYX09FCQkJQklUKDUpCj4g PiArI2RlZmluZSBTV19MTlRDX0hTVFhfWkVST0NMSwkJQklUKDYpCj4gPiArI2RlZmluZSBTV19M TlQwX0xQVFhfUFJFX09FCQlCSVQoNykKPiA+ICsjZGVmaW5lIFNXX0xOVDBfTFBUWF9PRQkJCUJJ VCg4KQo+ID4gKyNkZWZpbmUgU1dfTE5UMF9MUFRYX1AJCQlCSVQoOSkKPiA+ICsjZGVmaW5lIFNX X0xOVDBfTFBUWF9OCQkJQklUKDEwKQo+ID4gKyNkZWZpbmUgU1dfTE5UMF9IU1RYX1BSRV9PRQkJ QklUKDExKQo+ID4gKyNkZWZpbmUgU1dfTE5UMF9IU1RYX09FCQkJQklUKDEyKQo+ID4gKyNkZWZp bmUgU1dfTE5UMF9MUFJYX0VOCQkJQklUKDEzKQo+ID4gKyNkZWZpbmUgU1dfTE5UMV9MUFRYX1BS RV9PRQkJQklUKDE0KQo+ID4gKyNkZWZpbmUgU1dfTE5UMV9MUFRYX09FCQkJQklUKDE1KQo+ID4g KyNkZWZpbmUgU1dfTE5UMV9MUFRYX1AJCQlCSVQoMTYpCj4gPiArI2RlZmluZSBTV19MTlQxX0xQ VFhfTgkJCUJJVCgxNykKPiA+ICsjZGVmaW5lIFNXX0xOVDFfSFNUWF9QUkVfT0UJCUJJVCgxOCkK PiA+ICsjZGVmaW5lIFNXX0xOVDFfSFNUWF9PRQkJCUJJVCgxOSkKPiA+ICsjZGVmaW5lIFNXX0xO VDJfTFBUWF9QUkVfT0UJCUJJVCgyMCkKPiA+ICsjZGVmaW5lIFNXX0xOVDJfTFBUWF9PRQkJCUJJ VCgyMSkKPiA+ICsjZGVmaW5lIFNXX0xOVDJfTFBUWF9QCQkJQklUKDIyKQo+ID4gKyNkZWZpbmUg U1dfTE5UMl9MUFRYX04JCQlCSVQoMjMpCj4gPiArI2RlZmluZSBTV19MTlQyX0hTVFhfUFJFX09F CQlCSVQoMjQpCj4gPiArI2RlZmluZSBTV19MTlQyX0hTVFhfT0UJCQlCSVQoMjUpCj4gPiArCj4g PiArc3RhdGljIGludCBtdGtfbWlwaV90eF9wbGxfcHJlcGFyZShzdHJ1Y3QgY2xrX2h3ICpodykK PiA+ICt7Cj4gPiArCXN0cnVjdCBtdGtfbWlwaV90eCAqbWlwaV90eCA9IG10a19taXBpX3R4X2Zy b21fY2xrX2h3KGh3KTsKPiA+ICsJdTggdHhkaXYsIHR4ZGl2MCwgdHhkaXYxOwo+ID4gKwl1NjQg cGN3Owo+ID4gKwo+ID4gKwlkZXZfZGJnKG1pcGlfdHgtPmRldiwgInByZXBhcmU6ICV1IEh6XG4i LCBtaXBpX3R4LT5kYXRhX3JhdGUpOwo+ID4gKwo+ID4gKwlpZiAobWlwaV90eC0+ZGF0YV9yYXRl ID49IDUwMDAwMDAwMCkgewo+ID4gKwkJdHhkaXYgPSAxOwo+ID4gKwkJdHhkaXYwID0gMDsKPiA+ ICsJCXR4ZGl2MSA9IDA7Cj4gPiArCX0gZWxzZSBpZiAobWlwaV90eC0+ZGF0YV9yYXRlID49IDI1 MDAwMDAwMCkgewo+ID4gKwkJdHhkaXYgPSAyOwo+ID4gKwkJdHhkaXYwID0gMTsKPiA+ICsJCXR4 ZGl2MSA9IDA7Cj4gPiArCX0gZWxzZSBpZiAobWlwaV90eC0+ZGF0YV9yYXRlID49IDEyNTAwMDAw MCkgewo+ID4gKwkJdHhkaXYgPSA0Owo+ID4gKwkJdHhkaXYwID0gMjsKPiA+ICsJCXR4ZGl2MSA9 IDA7Cj4gPiArCX0gZWxzZSBpZiAobWlwaV90eC0+ZGF0YV9yYXRlID4gNjIwMDAwMDApIHsKPiA+ ICsJCXR4ZGl2ID0gODsKPiA+ICsJCXR4ZGl2MCA9IDI7Cj4gPiArCQl0eGRpdjEgPSAxOwo+ID4g Kwl9IGVsc2UgaWYgKG1pcGlfdHgtPmRhdGFfcmF0ZSA+PSA1MDAwMDAwMCkgewo+ID4gKwkJdHhk aXYgPSAxNjsKPiA+ICsJCXR4ZGl2MCA9IDI7Cj4gPiArCQl0eGRpdjEgPSAyOwo+ID4gKwl9IGVs c2Ugewo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiArCX0KPiA+ICsKPiA+ICsJbXRrX21pcGlf dHhfdXBkYXRlX2JpdHMobWlwaV90eCwgTUlQSVRYX0RTSV9CR19DT04sCj4gPiArCQkJCVJHX0RT SV9WT1VUX01TSyB8Cj4gPiArCQkJCVJHX0RTSV9CR19DS0VOIHwgUkdfRFNJX0JHX0NPUkVfRU4s Cj4gPiArCQkJCSg0IDw8IDIwKSB8ICg0IDw8IDE3KSB8ICg0IDw8IDE0KSB8Cj4gPiArCQkJCSg0 IDw8IDExKSB8ICg0IDw8IDgpIHwgKDQgPDwgNSkgfAo+ID4gKwkJCQlSR19EU0lfQkdfQ0tFTiB8 IFJHX0RTSV9CR19DT1JFX0VOKTsKPiA+ICsKPiA+ICsJdXNsZWVwX3JhbmdlKDMwLCAxMDApOwo+ ID4gKwo+ID4gKwltdGtfbWlwaV90eF91cGRhdGVfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJX1RP UF9DT04sCj4gPiArCQkJCVJHX0RTSV9MTlRfSU1QX0NBTF9DT0RFIHwgUkdfRFNJX0xOVF9IU19C SUFTX0VOLAo+ID4gKwkJCQkoOCA8PCA0KSB8IFJHX0RTSV9MTlRfSFNfQklBU19FTik7Cj4gPiAr Cj4gPiArCW10a19taXBpX3R4X3NldF9iaXRzKG1pcGlfdHgsIE1JUElUWF9EU0lfQ09OLAo+ID4g KwkJCSAgICAgUkdfRFNJX0NLR19MRE9PVVRfRU4gfCBSR19EU0lfTERPQ09SRV9FTik7Cj4gPiAr Cj4gPiArCW10a19taXBpX3R4X3VwZGF0ZV9iaXRzKG1pcGlfdHgsIE1JUElUWF9EU0lfUExMX1BX UiwKPiA+ICsJCQkJUkdfRFNJX01QUExMX1NETV9QV1JfT04gfAo+ID4gKwkJCQlSR19EU0lfTVBQ TExfU0RNX0lTT19FTiwKPiA+ICsJCQkJUkdfRFNJX01QUExMX1NETV9QV1JfT04pOwo+ID4gKwo+ ID4gKwltdGtfbWlwaV90eF9jbGVhcl9iaXRzKG1pcGlfdHgsIE1JUElUWF9EU0lfUExMX0NPTjAs Cj4gPiArCQkJICAgICAgIFJHX0RTSV9NUFBMTF9QTExfRU4pOwo+ID4gKwo+ID4gKwltdGtfbWlw aV90eF91cGRhdGVfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9DT04wLAo+ID4gKwkJCQlS R19EU0lfTVBQTExfVFhESVYwIHwgUkdfRFNJX01QUExMX1RYRElWMSB8Cj4gPiArCQkJCVJHX0RT SV9NUFBMTF9QUkVESVYsCj4gPiArCQkJCSh0eGRpdjAgPDwgMykgfCAodHhkaXYxIDw8IDUpKTsK PiA+ICsKPiA+ICsJLyoKPiA+ICsJICogUExMIFBDVyBjb25maWcKPiA+ICsJICogUENXIGJpdCAy NH4zMCA9IGludGVnZXIgcGFydCBvZiBwY3cKPiA+ICsJICogUENXIGJpdCAwfjIzID0gZnJhY3Rp b25hbCBwYXJ0IG9mIHBjdwo+ID4gKwkgKiBwY3cgPSBkYXRhX1JhdGUqNCp0eGRpdi8oUmVmX2Ns ayoyKTsKPiA+ICsJICogUG9zdCBESVYgPTQsIHNvIG5lZWQgZGF0YV9SYXRlKjQKPiA+ICsJICog UmVmX2NsayBpcyAyNk1Iego+ID4gKwkgKi8KPiA+ICsJcGN3ID0gZGl2X3U2NCgoKHU2NCltaXBp X3R4LT5kYXRhX3JhdGUgKiAyICogdHhkaXYpIDw8IDI0LAo+ID4gKwkJICAgICAgMjYwMDAwMDAp Owo+ID4gKwl3cml0ZWwocGN3LCBtaXBpX3R4LT5yZWdzICsgTUlQSVRYX0RTSV9QTExfQ09OMik7 Cj4gPiArCj4gPiArCW10a19taXBpX3R4X3NldF9iaXRzKG1pcGlfdHgsIE1JUElUWF9EU0lfUExM X0NPTjEsCj4gPiArCQkJICAgICBSR19EU0lfTVBQTExfU0RNX0ZSQV9FTik7Cj4gPiArCj4gPiAr CW10a19taXBpX3R4X3NldF9iaXRzKG1pcGlfdHgsIE1JUElUWF9EU0lfUExMX0NPTjAsIFJHX0RT SV9NUFBMTF9QTExfRU4pOwo+ID4gKwo+ID4gKwl1c2xlZXBfcmFuZ2UoMjAsIDEwMCk7Cj4gPiAr Cj4gPiArCW10a19taXBpX3R4X2NsZWFyX2JpdHMobWlwaV90eCwgTUlQSVRYX0RTSV9QTExfQ09O MSwKPiA+ICsJCQkgICAgICAgUkdfRFNJX01QUExMX1NETV9TU0NfRU4pOwo+ID4gKwo+ID4gKwlt dGtfbWlwaV90eF91cGRhdGVfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9UT1AsCj4gPiAr CQkJCVJHX0RTSV9NUFBMTF9QUkVTRVJWRSwKPiA+ICsJCQkJbWlwaV90eC0+ZHJpdmVyX2RhdGEt Pm1wcGxsX3ByZXNlcnZlKTsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4g K3N0YXRpYyB2b2lkIG10a19taXBpX3R4X3BsbF91bnByZXBhcmUoc3RydWN0IGNsa19odyAqaHcp Cj4gPiArewo+ID4gKwlzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHggPSBtdGtfbWlwaV90eF9m cm9tX2Nsa19odyhodyk7Cj4gPiArCj4gPiArCWRldl9kYmcobWlwaV90eC0+ZGV2LCAidW5wcmVw YXJlXG4iKTsKPiA+ICsKPiA+ICsJbXRrX21pcGlfdHhfY2xlYXJfYml0cyhtaXBpX3R4LCBNSVBJ VFhfRFNJX1BMTF9DT04wLAo+ID4gKwkJCSAgICAgICBSR19EU0lfTVBQTExfUExMX0VOKTsKPiA+ ICsKPiA+ICsJbXRrX21pcGlfdHhfdXBkYXRlX2JpdHMobWlwaV90eCwgTUlQSVRYX0RTSV9QTExf VE9QLAo+ID4gKwkJCQlSR19EU0lfTVBQTExfUFJFU0VSVkUsIDApOwo+ID4gKwo+ID4gKwltdGtf bWlwaV90eF91cGRhdGVfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9QV1IsCj4gPiArCQkJ CVJHX0RTSV9NUFBMTF9TRE1fSVNPX0VOIHwKPiA+ICsJCQkJUkdfRFNJX01QUExMX1NETV9QV1Jf T04sCj4gPiArCQkJCVJHX0RTSV9NUFBMTF9TRE1fSVNPX0VOKTsKPiA+ICsKPiA+ICsJbXRrX21p cGlfdHhfY2xlYXJfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJX1RPUF9DT04sCj4gPiArCQkJICAg ICAgIFJHX0RTSV9MTlRfSFNfQklBU19FTik7Cj4gPiArCj4gPiArCW10a19taXBpX3R4X2NsZWFy X2JpdHMobWlwaV90eCwgTUlQSVRYX0RTSV9DT04sCj4gPiArCQkJICAgICAgIFJHX0RTSV9DS0df TERPT1VUX0VOIHwgUkdfRFNJX0xET0NPUkVfRU4pOwo+ID4gKwo+ID4gKwltdGtfbWlwaV90eF9j bGVhcl9iaXRzKG1pcGlfdHgsIE1JUElUWF9EU0lfQkdfQ09OLAo+ID4gKwkJCSAgICAgICBSR19E U0lfQkdfQ0tFTiB8IFJHX0RTSV9CR19DT1JFX0VOKTsKPiA+ICsKPiA+ICsJbXRrX21pcGlfdHhf Y2xlYXJfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9DT04wLAo+ID4gKwkJCSAgICAgICBS R19EU0lfTVBQTExfRElWX01TSyk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgY2xrX29wcyBtdGtfbWlwaV90eF9wbGxfb3BzID0gewo+ID4gKwkucHJlcGFyZSA9IG10a19t aXBpX3R4X3BsbF9wcmVwYXJlLAo+ID4gKwkudW5wcmVwYXJlID0gbXRrX21pcGlfdHhfcGxsX3Vu cHJlcGFyZSwKPiA+ICsJLnJvdW5kX3JhdGUgPSBtdGtfbWlwaV90eF9wbGxfcm91bmRfcmF0ZSwK PiA+ICsJLnNldF9yYXRlID0gbXRrX21pcGlfdHhfcGxsX3NldF9yYXRlLAo+ID4gKwkucmVjYWxj X3JhdGUgPSBtdGtfbWlwaV90eF9wbGxfcmVjYWxjX3JhdGUsCj4gPiArfTsKPiA+ICsKPiA+ICtz dGF0aWMgdm9pZCBtdGtfbWlwaV90eF9wb3dlcl9vbl9zaWduYWwoc3RydWN0IHBoeSAqcGh5KQo+ ID4gK3sKPiA+ICsJc3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4ID0gcGh5X2dldF9kcnZkYXRh KHBoeSk7Cj4gPiArCXUzMiByZWc7Cj4gPiArCj4gPiArCWZvciAocmVnID0gTUlQSVRYX0RTSV9D TE9DS19MQU5FOwo+ID4gKwkgICAgIHJlZyA8PSBNSVBJVFhfRFNJX0RBVEFfTEFORTM7IHJlZyAr PSA0KQo+ID4gKwkJbXRrX21pcGlfdHhfc2V0X2JpdHMobWlwaV90eCwgcmVnLCBSR19EU0lfTE5U eF9MRE9PVVRfRU4pOwo+ID4gKwo+ID4gKwltdGtfbWlwaV90eF9jbGVhcl9iaXRzKG1pcGlfdHgs IE1JUElUWF9EU0lfVE9QX0NPTiwKPiA+ICsJCQkgICAgICAgUkdfRFNJX1BBRF9USUVfTE9XX0VO KTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgbXRrX21pcGlfdHhfcG93ZXJfb2ZmX3Np Z25hbChzdHJ1Y3QgcGh5ICpwaHkpCj4gPiArewo+ID4gKwlzdHJ1Y3QgbXRrX21pcGlfdHggKm1p cGlfdHggPSBwaHlfZ2V0X2RydmRhdGEocGh5KTsKPiA+ICsJdTMyIHJlZzsKPiA+ICsKPiA+ICsJ bXRrX21pcGlfdHhfc2V0X2JpdHMobWlwaV90eCwgTUlQSVRYX0RTSV9UT1BfQ09OLAo+ID4gKwkJ CSAgICAgUkdfRFNJX1BBRF9USUVfTE9XX0VOKTsKPiA+ICsKPiA+ICsJZm9yIChyZWcgPSBNSVBJ VFhfRFNJX0NMT0NLX0xBTkU7Cj4gPiArCSAgICAgcmVnIDw9IE1JUElUWF9EU0lfREFUQV9MQU5F MzsgcmVnICs9IDQpCj4gPiArCQltdGtfbWlwaV90eF9jbGVhcl9iaXRzKG1pcGlfdHgsIHJlZywg UkdfRFNJX0xOVHhfTERPT1VUX0VOKTsKPiA+ICt9Cj4gPiArCj4gPiArY29uc3Qgc3RydWN0IG10 a19taXBpdHhfZGF0YSBtdDI3MDFfbWlwaXR4X2RhdGEgPSB7Cj4gPiArCS5tcHBsbF9wcmVzZXJ2 ZSA9ICgzIDw8IDgpLAo+ID4gKwkubWlwaV90eF9jbGtfb3BzID0gJm10a19taXBpX3R4X3BsbF9v cHMsCj4gPiArCS5taXBpX3R4X2VuYWJsZV9zaWduYWwgPSBtdGtfbWlwaV90eF9wb3dlcl9vbl9z aWduYWwsCj4gPiArCS5taXBpX3R4X2Rpc2FibGVfc2lnbmFsID0gbXRrX21pcGlfdHhfcG93ZXJf b2ZmX3NpZ25hbCwKPiA+ICt9Owo+ID4gKwo+ID4gK2NvbnN0IHN0cnVjdCBtdGtfbWlwaXR4X2Rh dGEgbXQ4MTczX21pcGl0eF9kYXRhID0gewo+ID4gKwkubXBwbGxfcHJlc2VydmUgPSAoMCA8PCA4 KSwKPiA+ICsJLm1pcGlfdHhfY2xrX29wcyA9ICZtdGtfbWlwaV90eF9wbGxfb3BzLAo+ID4gKwku bWlwaV90eF9lbmFibGVfc2lnbmFsID0gbXRrX21pcGlfdHhfcG93ZXJfb25fc2lnbmFsLAo+ID4g KwkubWlwaV90eF9kaXNhYmxlX3NpZ25hbCA9IG10a19taXBpX3R4X3Bvd2VyX29mZl9zaWduYWws Cj4gPiArfTsKPiA+ICsKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX210ODE4M19taXBpX3R4LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX210ODE4 M19taXBpX3R4LmMKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwMDAw MDAuLjA3ZjcwYTNjYWQxMwo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL21lZGlhdGVrL210a19tdDgxODNfbWlwaV90eC5jCj4gPiBAQCAtMCwwICsxLDE2OCBAQAo+ ID4gKy8qCj4gPiArICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KPiA+ICsgKgo+ ID4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKPiA+ICsgKiBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiA+ICsgKgo+ID4gKyAqIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ID4g KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCj4gPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ID4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCj4gPiArICovCj4gPiArCj4gPiArI2luY2x1ZGUgIm10a19taXBp X3R4LmgiCj4gPiArCj4gPiArI2RlZmluZSBNSVBJVFhfTEFORV9DT04JCTB4MDAwYwo+ID4gKyNk ZWZpbmUgUkdfRFNJX0NQSFlfVDFEUlZfRU4JQklUKDApCj4gPiArI2RlZmluZSBSR19EU0lfQU5B X0NLX1NFTAlCSVQoMSkKPiA+ICsjZGVmaW5lIFJHX0RTSV9QSFlfQ0tfU0VMCUJJVCgyKQo+ID4g KyNkZWZpbmUgUkdfRFNJX0NQSFlfRU4JQklUKDMpCj4gPiArI2RlZmluZSBSR19EU0lfUEhZQ0tf SU5WX0VOCUJJVCg0KQo+ID4gKyNkZWZpbmUgUkdfRFNJX1BXUjA0X0VOCUJJVCg1KQo+ID4gKyNk ZWZpbmUgUkdfRFNJX0JHX0xQRl9FTglCSVQoNikKPiA+ICsjZGVmaW5lIFJHX0RTSV9CR19DT1JF X0VOCUJJVCg3KQo+ID4gKyNkZWZpbmUgUkdfRFNJX1BBRF9USUVMX1NFTAlCSVQoOCkKPiA+ICsK PiA+ICsjZGVmaW5lIE1JUElUWF9QTExfUFdSCQkweDAwMjgKPiA+ICsjZGVmaW5lIE1JUElUWF9Q TExfQ09OMAkJMHgwMDJjCj4gPiArI2RlZmluZSBNSVBJVFhfUExMX0NPTjEJCTB4MDAzMAo+ID4g KyNkZWZpbmUgTUlQSVRYX1BMTF9DT04yCQkweDAwMzQKPiA+ICsjZGVmaW5lIE1JUElUWF9QTExf Q09OMwkJMHgwMDM4Cj4gPiArI2RlZmluZSBNSVBJVFhfUExMX0NPTjQJCTB4MDAzYwo+ID4gKyNk ZWZpbmUgUkdfRFNJX1BMTF9JQklBUwkoMyA8PCAxMCkKPiA+ICsKPiA+ICsjZGVmaW5lIE1JUElU WF9EMl9TV19DVExfRU4JMHgwMTQ0Cj4gPiArI2RlZmluZSBNSVBJVFhfRDBfU1dfQ1RMX0VOCTB4 MDI0NAo+ID4gKyNkZWZpbmUgTUlQSVRYX0NLX0NLTU9ERV9FTgkweDAzMjgKPiA+ICsjZGVmaW5l IERTSV9DS19DS01PREVfRU4JQklUKDApCj4gPiArI2RlZmluZSBNSVBJVFhfQ0tfU1dfQ1RMX0VO CTB4MDM0NAo+ID4gKyNkZWZpbmUgTUlQSVRYX0QxX1NXX0NUTF9FTgkweDA0NDQKPiA+ICsjZGVm aW5lIE1JUElUWF9EM19TV19DVExfRU4JMHgwNTQ0Cj4gPiArI2RlZmluZSBEU0lfU1dfQ1RMX0VO CQlCSVQoMCkKPiA+ICsjZGVmaW5lIEFEX0RTSV9QTExfU0RNX1BXUl9PTglCSVQoMCkKPiA+ICsj ZGVmaW5lIEFEX0RTSV9QTExfU0RNX0lTT19FTglCSVQoMSkKPiA+ICsKPiA+ICsjZGVmaW5lIFJH X0RTSV9QTExfRU4JCUJJVCg0KQo+ID4gKyNkZWZpbmUgUkdfRFNJX1BMTF9QT1NESVYJKDB4NyA8 PCA4KQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgbXRrX21pcGlfdHhfcGxsX3ByZXBhcmUoc3RydWN0 IGNsa19odyAqaHcpCj4gPiArewo+ID4gKwlzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHggPSBt dGtfbWlwaV90eF9mcm9tX2Nsa19odyhodyk7Cj4gPiArCXVuc2lnbmVkIGludCB0eGRpdiwgdHhk aXYwLCB0eGRpdjE7Cj4gPiArCXU2NCBwY3c7Cj4gPiArCWludCByZXQ7Cj4gPiArCj4gPiArCWRl dl9kYmcobWlwaV90eC0+ZGV2LCAicHJlcGFyZTogJXUgYnBzXG4iLCBtaXBpX3R4LT5kYXRhX3Jh dGUpOwo+ID4gKwo+ID4gKwlpZiAobWlwaV90eC0+ZGF0YV9yYXRlID49IDIwMDAwMDAwMDApIHsK PiA+ICsJCXR4ZGl2ID0gMTsKPiA+ICsJCXR4ZGl2MCA9IDA7Cj4gPiArCQl0eGRpdjEgPSAwOwo+ ID4gKwl9IGVsc2UgaWYgKG1pcGlfdHgtPmRhdGFfcmF0ZSA+PSAxMDAwMDAwMDAwKSB7Cj4gPiAr CQl0eGRpdiA9IDI7Cj4gPiArCQl0eGRpdjAgPSAxOwo+ID4gKwkJdHhkaXYxID0gMDsKPiA+ICsJ fSBlbHNlIGlmIChtaXBpX3R4LT5kYXRhX3JhdGUgPj0gNTAwMDAwMDAwKSB7Cj4gPiArCQl0eGRp diA9IDQ7Cj4gPiArCQl0eGRpdjAgPSAyOwo+ID4gKwkJdHhkaXYxID0gMDsKPiA+ICsJfSBlbHNl IGlmIChtaXBpX3R4LT5kYXRhX3JhdGUgPiAyNTAwMDAwMDApIHsKPiA+ICsJCXR4ZGl2ID0gODsK PiA+ICsJCXR4ZGl2MCA9IDM7Cj4gPiArCQl0eGRpdjEgPSAwOwo+ID4gKwl9IGVsc2UgaWYgKG1p cGlfdHgtPmRhdGFfcmF0ZSA+PSAxMjUwMDAwMDApIHsKPiA+ICsJCXR4ZGl2ID0gMTY7Cj4gPiAr CQl0eGRpdjAgPSA0Owo+ID4gKwkJdHhkaXYxID0gMDsKPiA+ICsJfSBlbHNlIHsKPiA+ICsJCXJl dHVybiAtRUlOVkFMOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJldCA9IGNsa19wcmVwYXJlX2VuYWJs ZShtaXBpX3R4LT5yZWZfY2xrKTsKPiA+ICsJaWYgKHJldCA8IDApIHsKPiA+ICsJCWRldl9lcnIo bWlwaV90eC0+ZGV2LCAiY2FuJ3QgbWlwaV90eCByZWZfY2xrICVkXG4iLCByZXQpOwo+ID4gKwkJ cmV0dXJuIHJldDsKPiA+ICsJfQo+ID4gKwo+ID4gKwltdGtfbWlwaV90eF9jbGVhcl9iaXRzKG1p cGlfdHgsIE1JUElUWF9QTExfQ09ONCwgUkdfRFNJX1BMTF9JQklBUyk7Cj4gPiArCj4gPiArCW10 a19taXBpX3R4X3NldF9iaXRzKG1pcGlfdHgsIE1JUElUWF9QTExfUFdSLCBBRF9EU0lfUExMX1NE TV9QV1JfT04pOwo+ID4gKwl1c2xlZXBfcmFuZ2UoMzAsIDEwMCk7Cj4gPiArCW10a19taXBpX3R4 X2NsZWFyX2JpdHMobWlwaV90eCwgTUlQSVRYX1BMTF9QV1IsIEFEX0RTSV9QTExfU0RNX0lTT19F Tik7Cj4gPiArCXBjdyA9IGRpdl91NjQoKCh1NjQpbWlwaV90eC0+ZGF0YV9yYXRlICogdHhkaXYp IDw8IDI0LCAyNjAwMDAwMCk7Cj4gPiArCXdyaXRlbChwY3csIG1pcGlfdHgtPnJlZ3MgKyBNSVBJ VFhfUExMX0NPTjApOwo+ID4gKwltdGtfbWlwaV90eF91cGRhdGVfYml0cyhtaXBpX3R4LCBNSVBJ VFhfUExMX0NPTjEsIFJHX0RTSV9QTExfUE9TRElWLAo+ID4gKwkJCQl0eGRpdjAgPDwgOCk7Cj4g PiArCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsKPiA+ICsJbXRrX21pcGlfdHhfc2V0X2JpdHMo bWlwaV90eCwgTUlQSVRYX1BMTF9DT04xLCBSR19EU0lfUExMX0VOKTsKPiA+ICsKPiA+ICsJcmV0 dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIG10a19taXBpX3R4X3BsbF91bnBy ZXBhcmUoc3RydWN0IGNsa19odyAqaHcpCj4gPiArewo+ID4gKwlzdHJ1Y3QgbXRrX21pcGlfdHgg Km1pcGlfdHggPSBtdGtfbWlwaV90eF9mcm9tX2Nsa19odyhodyk7Cj4gPiArCj4gPiArCWRldl9k YmcobWlwaV90eC0+ZGV2LCAidW5wcmVwYXJlXG4iKTsKPiA+ICsKPiA+ICsJbXRrX21pcGlfdHhf Y2xlYXJfYml0cyhtaXBpX3R4LCBNSVBJVFhfUExMX0NPTjEsIFJHX0RTSV9QTExfRU4pOwo+ID4g KwkvKiBzdGVwIDE6IFNETV9SV1JfT04gLyBTRE1fSVNPX0VOICovCj4gPiArCj4gPiArCW10a19t aXBpX3R4X3NldF9iaXRzKG1pcGlfdHgsIE1JUElUWF9QTExfUFdSLCBBRF9EU0lfUExMX1NETV9J U09fRU4pOwo+ID4gKwltdGtfbWlwaV90eF9jbGVhcl9iaXRzKG1pcGlfdHgsIE1JUElUWF9QTExf UFdSLCBBRF9EU0lfUExMX1NETV9QV1JfT04pOwo+ID4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUo bWlwaV90eC0+cmVmX2Nsayk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg Y2xrX29wcyBtdGtfbWlwaV90eF9wbGxfb3BzID0gewo+ID4gKwkucHJlcGFyZSA9IG10a19taXBp X3R4X3BsbF9wcmVwYXJlLAo+ID4gKwkudW5wcmVwYXJlID0gbXRrX21pcGlfdHhfcGxsX3VucHJl cGFyZSwKPiA+ICsJLnJvdW5kX3JhdGUgPSBtdGtfbWlwaV90eF9wbGxfcm91bmRfcmF0ZSwKPiA+ ICsJLnNldF9yYXRlID0gbXRrX21pcGlfdHhfcGxsX3NldF9yYXRlLAo+ID4gKwkucmVjYWxjX3Jh dGUgPSBtdGtfbWlwaV90eF9wbGxfcmVjYWxjX3JhdGUsCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0 aWMgdm9pZCBtdGtfbWlwaV90eF9wb3dlcl9vbl9zaWduYWwoc3RydWN0IHBoeSAqcGh5KQo+ID4g K3sKPiA+ICsJc3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4ID0gcGh5X2dldF9kcnZkYXRhKHBo eSk7Cj4gPiArCj4gPiArCS8qIEJHX0xQRl9FTiAvIEJHX0NPUkVfRU4gKi8KPiA+ICsJd3JpdGVs KFJHX0RTSV9QQURfVElFTF9TRUwgfCBSR19EU0lfQkdfQ09SRV9FTiwKPiA+ICsJICAgICAgIG1p cGlfdHgtPnJlZ3MgKyBNSVBJVFhfTEFORV9DT04pOwo+ID4gKwl1c2xlZXBfcmFuZ2UoMzAsIDEw MCk7Cj4gPiArCXdyaXRlbChSR19EU0lfQkdfQ09SRV9FTiB8IFJHX0RTSV9CR19MUEZfRU4sCj4g PiArCSAgICAgICBtaXBpX3R4LT5yZWdzICsgTUlQSVRYX0xBTkVfQ09OKTsKPiA+ICsKPiA+ICsJ LyogU3dpdGNoIE9GRiBlYWNoIExhbmUgKi8KPiA+ICsJbXRrX21pcGlfdHhfY2xlYXJfYml0cyht aXBpX3R4LCBNSVBJVFhfRDBfU1dfQ1RMX0VOLCBEU0lfU1dfQ1RMX0VOKTsKPiA+ICsJbXRrX21p cGlfdHhfY2xlYXJfYml0cyhtaXBpX3R4LCBNSVBJVFhfRDFfU1dfQ1RMX0VOLCBEU0lfU1dfQ1RM X0VOKTsKPiA+ICsJbXRrX21pcGlfdHhfY2xlYXJfYml0cyhtaXBpX3R4LCBNSVBJVFhfRDJfU1df Q1RMX0VOLCBEU0lfU1dfQ1RMX0VOKTsKPiA+ICsJbXRrX21pcGlfdHhfY2xlYXJfYml0cyhtaXBp X3R4LCBNSVBJVFhfRDNfU1dfQ1RMX0VOLCBEU0lfU1dfQ1RMX0VOKTsKPiA+ICsJbXRrX21pcGlf dHhfY2xlYXJfYml0cyhtaXBpX3R4LCBNSVBJVFhfQ0tfU1dfQ1RMX0VOLCBEU0lfU1dfQ1RMX0VO KTsKPiA+ICsKPiA+ICsJbXRrX21pcGlfdHhfc2V0X2JpdHMobWlwaV90eCwgTUlQSVRYX0NLX0NL TU9ERV9FTiwgRFNJX0NLX0NLTU9ERV9FTik7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lk IG10a19taXBpX3R4X3Bvd2VyX29mZl9zaWduYWwoc3RydWN0IHBoeSAqcGh5KQo+ID4gK3sKPiA+ ICsJc3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4ID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7Cj4g PiArCj4gPiArCS8qIFN3aXRjaCBPTiBlYWNoIExhbmUgKi8KPiA+ICsJbXRrX21pcGlfdHhfc2V0 X2JpdHMobWlwaV90eCwgTUlQSVRYX0QwX1NXX0NUTF9FTiwgRFNJX1NXX0NUTF9FTik7Cj4gPiAr CW10a19taXBpX3R4X3NldF9iaXRzKG1pcGlfdHgsIE1JUElUWF9EMV9TV19DVExfRU4sIERTSV9T V19DVExfRU4pOwo+ID4gKwltdGtfbWlwaV90eF9zZXRfYml0cyhtaXBpX3R4LCBNSVBJVFhfRDJf U1dfQ1RMX0VOLCBEU0lfU1dfQ1RMX0VOKTsKPiA+ICsJbXRrX21pcGlfdHhfc2V0X2JpdHMobWlw aV90eCwgTUlQSVRYX0QzX1NXX0NUTF9FTiwgRFNJX1NXX0NUTF9FTik7Cj4gPiArCW10a19taXBp X3R4X3NldF9iaXRzKG1pcGlfdHgsIE1JUElUWF9DS19TV19DVExfRU4sIERTSV9TV19DVExfRU4p Owo+ID4gKwo+ID4gKwkvKiBzdGVwIDIgKi8KPiA+ICsJd3JpdGVsKFJHX0RTSV9QQURfVElFTF9T RUwgfCBSR19EU0lfQkdfQ09SRV9FTiwKPiA+ICsJICAgICAgIG1pcGlfdHgtPnJlZ3MgKyBNSVBJ VFhfTEFORV9DT04pOwo+ID4gKwl3cml0ZWwoUkdfRFNJX1BBRF9USUVMX1NFTCwgbWlwaV90eC0+ cmVncyArIE1JUElUWF9MQU5FX0NPTik7Cj4gPiArfQo+ID4gKwo+ID4gK2NvbnN0IHN0cnVjdCBt dGtfbWlwaXR4X2RhdGEgbXQ4MTgzX21pcGl0eF9kYXRhID0gewo+ID4gKwkubWlwaV90eF9jbGtf b3BzID0gJm10a19taXBpX3R4X3BsbF9vcHMsCj4gPiArCS5taXBpX3R4X2VuYWJsZV9zaWduYWwg PSBtdGtfbWlwaV90eF9wb3dlcl9vbl9zaWduYWwsCj4gPiArCS5taXBpX3R4X2Rpc2FibGVfc2ln bmFsID0gbXRrX21pcGlfdHhfcG93ZXJfb2ZmX3NpZ25hbCwKPiA+ICt9Owo+ID4gKwo+ID4gCgoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVs IG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs