From owner-freebsd-embedded@FreeBSD.ORG Mon Mar 10 17:50:21 2014 Return-Path: Delivered-To: freebsd-embedded@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 89D3A362 for ; Mon, 10 Mar 2014 17:50:21 +0000 (UTC) Received: from mail-we0-x22f.google.com (mail-we0-x22f.google.com [IPv6:2a00:1450:400c:c03::22f]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id EAB1E91E for ; Mon, 10 Mar 2014 17:50:20 +0000 (UTC) Received: by mail-we0-f175.google.com with SMTP id q58so8949185wes.20 for ; Mon, 10 Mar 2014 10:50:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; bh=LqMHhqRnbOnv8ZwDd/3SrDB6i8lqen6+UGrJWoTLXm8=; b=XcHbuiUUaZyNk3GuJnnml80jUhHtNGhRUYYB/CNaUz7tbaoNW6zjAAc0Wxnb7b8T8p kcqqDc0xpdGxd74n9mrfyDg41xH8k6ok6d8pW4wJWf9zUmb2wTgPLXHq3NjnFiGpWbAa Z34uc7p768x6IPjzIsUi0/ZTbj4ofEzr8RmG4l2HMhPZE6J20Qm67OzRuiZbcFjx6uEi P8nsp1sm0OxKEP0jWJUtYrB3cgMeOm2PpVhIkHLbVvecaUJotPfrwf4/Wz8cgYDdl7fv PJzqCDt+E/Jr2mHkfvKDUEXwZ+Hq9BcQ2g5WvsCfRR4oduHNmVbMBPqOB/vEr9ZAMBug 7+Vg== MIME-Version: 1.0 X-Received: by 10.194.203.200 with SMTP id ks8mr2878977wjc.61.1394473819386; Mon, 10 Mar 2014 10:50:19 -0700 (PDT) Received: by 10.216.79.132 with HTTP; Mon, 10 Mar 2014 10:50:18 -0700 (PDT) In-Reply-To: <69CF7423-FD5B-44B3-8B90-E76BA96BB31A@gmail.com> References: <69CF7423-FD5B-44B3-8B90-E76BA96BB31A@gmail.com> Date: Mon, 10 Mar 2014 14:50:18 -0300 Message-ID: Subject: Re: [patch] LM75 kernel driver From: Luiz Otavio O Souza To: "freebsd-embedded@freebsd.org" Content-Type: multipart/mixed; boundary=047d7bb70ae4a7569804f4443c0b X-BeenThere: freebsd-embedded@freebsd.org X-Mailman-Version: 2.1.17 Precedence: list List-Id: Dedicated and Embedded Systems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Mar 2014 17:50:21 -0000 --047d7bb70ae4a7569804f4443c0b Content-Type: text/plain; charset=ISO-8859-1 On Fri, Nov 29, 2013 at 5:28 PM, Luiz Otavio O Souza wrote: > Hi, > > I've written a kernel driver for lm75 (i2c temperature sensor). > > It's a very simple, convenient and cheap way to verify an i2c bus. > > This driver provides full control of the lm75 registers (configuration bits, over temperature and hysteresis settings) and so provides basic read and write test abilities. > > The high resolution version (lm75b - 11 bits) isn't supported ATM, but i have plans to do so. The high resolution version (lm75[a/b]) is now tested and supported. This new version is tested on RSPRO (with gpioiic(4)), on BBB and RPi using both, gpioiic(4) and embedded i2c controllers. It can be used together with snmp_lm75 (http://lists.freebsd.org/pipermail/freebsd-embedded/2014-March/002281.html) to export the lm75 temperature via SNMP, it's use is quite straightforward. The updated version is attached. Luiz > > On my RPi i've added this to sys/boot/fdt/dts/rpi.dts: > > bsc0 { > > lm750 { > compatible = "lm75"; > i2c-address = <0x96>; > }; > > lm751 { > compatible = "lm75"; > i2c-address = <0x9e>; > }; > }; > > And 'device lm75' to RPI-B kernel file (after apply the attached patch). > > Here is the result: > > iichb0: mem 0x20205000-0x2020501f irq 61 on simplebus0 > iicbus1: on iichb0 > iic1: on iicbus1 > lm751: at addr 0x96 on iicbus1 > lm752: at addr 0x9e on iicbus1 > > # sysctl dev.lm75.1 > dev.lm75.1.%desc: LM75 temperature sensor > dev.lm75.1.%driver: lm75 > dev.lm75.1.%location: addr=0x96 > dev.lm75.1.%pnpinfo: name=lm750 compat=lm75 > dev.lm75.1.%parent: iicbus1 > dev.lm75.1.temperature: 30.0C > dev.lm75.1.thyst: 75.0C > dev.lm75.1.tos: 80.0C > dev.lm75.1.conf.faults: 1 > dev.lm75.1.conf.mode: comparator > dev.lm75.1.conf.polarity: active-low > dev.lm75.1.conf.shutdown: 0 > > # sysctl dev.lm75.2 > dev.lm75.2.%desc: LM75 temperature sensor > dev.lm75.2.%driver: lm75 > dev.lm75.2.%location: addr=0x9e > dev.lm75.2.%pnpinfo: name=lm751 compat=lm75 > dev.lm75.2.%parent: iicbus1 > dev.lm75.2.temperature: 29.5C > dev.lm75.2.thyst: 60.0C > dev.lm75.2.tos: 80.0C > dev.lm75.2.conf.faults: 2 > dev.lm75.2.conf.mode: interrupt > dev.lm75.2.conf.polarity: active-low > dev.lm75.2.conf.shutdown: 0 > > > I hope this may be useful for someone else. > > Luiz > > --047d7bb70ae4a7569804f4443c0b Content-Type: text/plain; charset=US-ASCII; name="lm75.diff" Content-Disposition: attachment; filename="lm75.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hsm1mtdq1 SW5kZXg6IHN5cy9jb25mL2ZpbGVzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9jb25mL2ZpbGVzCShyZXZp c2lvbiAyNjI4NjApCisrKyBzeXMvY29uZi9maWxlcwkod29ya2luZyBjb3B5KQpAQCAtMTQ0Myw2 ICsxNDQzLDcgQEAKIGRldi9paWNidXMvaWljc21iLmMJCW9wdGlvbmFsIGlpY3NtYgkJCQlcCiAJ ZGVwZW5kZW5jeQkiaWljYnVzX2lmLmgiCiBkZXYvaWljYnVzL2lpY29jLmMJCW9wdGlvbmFsIGlp Y29jCitkZXYvaWljYnVzL2xtNzUuYwkJb3B0aW9uYWwgbG03NQogZGV2L2lpY2J1cy9wY2Y4NTYz LmMJCW9wdGlvbmFsIHBjZjg1NjMKIGRldi9paWNidXMvczM1MzkwYS5jCQlvcHRpb25hbCBzMzUz OTBhCiBkZXYvaWlyL2lpci5jCQkJb3B0aW9uYWwgaWlyCkluZGV4OiBzeXMvZGV2L2lpY2J1cy9s bTc1LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gc3lzL2Rldi9paWNidXMvbG03NS5jCShyZXZpc2lvbiAwKQor Kysgc3lzL2Rldi9paWNidXMvbG03NS5jCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTU3IEBA CisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxMCBBbmRyZWFzIFRvYmxlci4KKyAqIENvcHlyaWdo dCAoYykgMjAxMyBMdWl6IE90YXZpbyBPIFNvdXphIDxsb29zQGZyZWVic2Qub3JnPi4KKyAqIEFs bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92 aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W SURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE IFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg QVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFM LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H LAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9G IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9S IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg V0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg T0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8 c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlICJvcHRfcGxh dGZvcm0uaCIKKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9idXMuaD4K KyNpbmNsdWRlIDxzeXMvZW5kaWFuLmg+CisjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPgorI2luY2x1 ZGUgPHN5cy9tb2R1bGUuaD4KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjaW5jbHVkZSA8c3lz L3N5c3RtLmg+CisKKyNpbmNsdWRlIDxtYWNoaW5lL2J1cy5oPgorCisjaW5jbHVkZSA8ZGV2L2lp Y2J1cy9paWNidXMuaD4KKyNpbmNsdWRlIDxkZXYvaWljYnVzL2lpY29uZi5oPgorCisjaWZkZWYg RkRUCisjaW5jbHVkZSA8ZGV2L29mdy9vcGVuZmlybS5oPgorI2luY2x1ZGUgPGRldi9vZncvb2Z3 X2J1cy5oPgorI2luY2x1ZGUgPGRldi9vZncvb2Z3X2J1c19zdWJyLmg+CisjZW5kaWYKKworLyog TE03NSByZWdpc3RlcnMuICovCisjZGVmaW5lCUxNNzVfVEVNUAkweDAKKyNkZWZpbmUJTE03NV9D T05GCTB4MQorI2RlZmluZQlMTTc1X0NPTkZfRlNISUZUCTMKKyNkZWZpbmUJTE03NV9DT05GX0ZB VUxUCQkweDE4CisjZGVmaW5lCUxNNzVfQ09ORl9QT0wJCTB4MDQKKyNkZWZpbmUJTE03NV9DT05G X01PREUJCTB4MDIKKyNkZWZpbmUJTE03NV9DT05GX1NIVVRECQkweDAxCisjZGVmaW5lCUxNNzVf Q09ORl9NQVNLCQkweDFmCisjZGVmaW5lCUxNNzVfVEhZU1QJMHgyCisjZGVmaW5lCUxNNzVfVE9T CTB4MworCisvKiBMTTc1IGNvbnN0YW50cy4gKi8KKyNkZWZpbmUJTE03NV9NSU5fVEVNUAktNTUK KyNkZWZpbmUJTE03NV9NQVhfVEVNUAkxMjUKKyNkZWZpbmUJTE03NV8wNTAwQwkweDgwCisjZGVm aW5lCUxNNzVfMDI1MEMJMHg0MAorI2RlZmluZQlMTTc1XzAxMjVDCTB4MjAKKyNkZWZpbmUJTE03 NV9NU0IJMHg4MDAwCisjZGVmaW5lCUxNNzVfTkVHX0JJVAlMTTc1X01TQgorI2RlZmluZQlUWl9a RVJPQwkyNzMyCisKKy8qIExNNzUgc3VwcG9ydGVkIG1vZGVscy4gKi8KKyNkZWZpbmUJSFdUWVBF X05PTkUJMAorI2RlZmluZQlIV1RZUEVfTE03NQkxCisjZGVmaW5lCUhXVFlQRV9MTTc1QQkyCisK KyNpZmRlZiBGRFQKK3N0YXRpYyBzdHJ1Y3Qgb2Z3X2NvbXBhdF9kYXRhIGNvbXBhdF9kYXRhW10g PSB7CisJeyAiZnJlZWJzZCxsbTc1IiwJSFdUWVBFX0xNNzUgfSwKKwl7ICJmcmVlYnNkLGxtNzVh IiwJSFdUWVBFX0xNNzVBIH0sCisJeyBOVUxMLAkJCUhXVFlQRV9OT05FIH0sCit9OworI2VuZGlm CisKKy8qIFJlZ3VsYXIgYnVzIGF0dGFjaG1lbnQgZnVuY3Rpb25zICovCitzdGF0aWMgaW50ICBs bTc1X3Byb2JlKGRldmljZV90KTsKK3N0YXRpYyBpbnQgIGxtNzVfYXR0YWNoKGRldmljZV90KTsK Kworc3RydWN0IGxtNzVfc29mdGMgeworCWRldmljZV90CQlzY19kZXY7CisJc3RydWN0IGludHJf Y29uZmlnX2hvb2sgZW51bV9ob29rOworCWludDMyX3QJCQlzY19od3R5cGU7CisJdWludDMyX3QJ CXNjX2FkZHI7CisJdWludDMyX3QJCXNjX2NvbmY7Cit9OworCitpbnQgbG03NV9mYXVsdHNbNF0g PSB7IDEsIDIsIDQsIDYgfTsKKworLyogVXRpbGl0eSBmdW5jdGlvbnMgKi8KK3N0YXRpYyBpbnQg IGxtNzVfY29uZl9yZWFkKHN0cnVjdCBsbTc1X3NvZnRjICopOworc3RhdGljIGludCAgbG03NV9j b25mX3dyaXRlKHN0cnVjdCBsbTc1X3NvZnRjICopOworc3RhdGljIGludCAgbG03NV90ZW1wX3Jl YWQoc3RydWN0IGxtNzVfc29mdGMgKiwgdWludDhfdCwgaW50ICopOworc3RhdGljIGludCAgbG03 NV90ZW1wX3dyaXRlKHN0cnVjdCBsbTc1X3NvZnRjICosIHVpbnQ4X3QsIGludCk7CitzdGF0aWMg dm9pZCBsbTc1X3N0YXJ0KHZvaWQgKik7CitzdGF0aWMgaW50ICBsbTc1X3JlYWQoZGV2aWNlX3Qs IHVpbnQzMl90LCB1aW50OF90LCB1aW50OF90ICosIHNpemVfdCk7CitzdGF0aWMgaW50ICBsbTc1 X3dyaXRlKGRldmljZV90LCB1aW50MzJfdCwgdWludDhfdCAqLCBzaXplX3QpOworc3RhdGljIGlu dCAgbG03NV9zdHJfbW9kZShjaGFyICopOworc3RhdGljIGludCAgbG03NV9zdHJfcG9sKGNoYXIg Kik7CitzdGF0aWMgaW50ICBsbTc1X3RlbXBfc3lzY3RsKFNZU0NUTF9IQU5ETEVSX0FSR1MpOwor c3RhdGljIGludCAgbG03NV9mYXVsdHNfc3lzY3RsKFNZU0NUTF9IQU5ETEVSX0FSR1MpOworc3Rh dGljIGludCAgbG03NV9tb2RlX3N5c2N0bChTWVNDVExfSEFORExFUl9BUkdTKTsKK3N0YXRpYyBp bnQgIGxtNzVfcG9sX3N5c2N0bChTWVNDVExfSEFORExFUl9BUkdTKTsKK3N0YXRpYyBpbnQgIGxt NzVfc2h1dGRvd25fc3lzY3RsKFNZU0NUTF9IQU5ETEVSX0FSR1MpOworCitzdGF0aWMgZGV2aWNl X21ldGhvZF90ICBsbTc1X21ldGhvZHNbXSA9IHsKKwkvKiBEZXZpY2UgaW50ZXJmYWNlICovCisJ REVWTUVUSE9EKGRldmljZV9wcm9iZSwJCWxtNzVfcHJvYmUpLAorCURFVk1FVEhPRChkZXZpY2Vf YXR0YWNoLAlsbTc1X2F0dGFjaCksCisKKwlERVZNRVRIT0RfRU5ECit9OworCitzdGF0aWMgZHJp dmVyX3QgbG03NV9kcml2ZXIgPSB7CisJImxtNzUiLAorCWxtNzVfbWV0aG9kcywKKwlzaXplb2Yo c3RydWN0IGxtNzVfc29mdGMpCit9OworCitzdGF0aWMgZGV2Y2xhc3NfdCBsbTc1X2RldmNsYXNz OworCitEUklWRVJfTU9EVUxFKGxtNzUsIGlpY2J1cywgbG03NV9kcml2ZXIsIGxtNzVfZGV2Y2xh c3MsIDAsIDApOworCitzdGF0aWMgaW50CitsbTc1X3JlYWQoZGV2aWNlX3QgZGV2LCB1aW50MzJf dCBhZGRyLCB1aW50OF90IHJlZywgdWludDhfdCAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKwlpbnQg dHJ5OworCisJc3RydWN0IGlpY19tc2cgbXNnWzJdID0geworCSAgICB7IGFkZHIsIElJQ19NX1dS IHwgSUlDX01fTk9TVE9QLCAxLCAmcmVnIH0sCisJICAgIHsgYWRkciwgSUlDX01fUkQsIGxlbiwg ZGF0YSB9LAorCX07CisKKwl0cnkgPSAwOworCWZvciAoOzspIHsKKwkJaWYgKGlpY2J1c190cmFu c2ZlcihkZXYsIG1zZywgMikgIT0gMCkKKwkJCWdvdG8gcmV0cnk7CisKKwkJcmV0dXJuICgwKTsK KwlyZXRyeToKKwkJaWYgKCsrdHJ5ID4gNSkgeworCQkJZGV2aWNlX3ByaW50ZihkZXYsICJpaWNi dXMgcmVhZCBmYWlsZWRcbiIpOworCQkJcmV0dXJuICgtMSk7CisJCX0KKwkJcGF1c2UoImxtNzVf cmVhZCIsIGh6KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK2xtNzVfd3JpdGUoZGV2aWNlX3QgZGV2 LCB1aW50MzJfdCBhZGRyLCB1aW50OF90ICpkYXRhLCBzaXplX3QgbGVuKQoreworCWludCB0cnk7 CisKKwlzdHJ1Y3QgaWljX21zZyBtc2dbMV0gPSB7CisJICAgIHsgYWRkciwgSUlDX01fV1IsIGxl biwgZGF0YSB9LAorCX07CisKKwl0cnkgPSAwOworCWZvciAoOzspIHsKKwkJaWYgKGlpY2J1c190 cmFuc2ZlcihkZXYsIG1zZywgMSkgIT0gMCkKKwkJCWdvdG8gcmV0cnk7CisKKwkJcmV0dXJuICgw KTsKKwlyZXRyeToKKwkJaWYgKCsrdHJ5ID4gNSkgeworCQkJZGV2aWNlX3ByaW50ZihkZXYsICJp aWNidXMgd3JpdGUgZmFpbGVkXG4iKTsKKwkJCXJldHVybiAoLTEpOworCQl9CisJCXBhdXNlKCJs bTc1X3dyaXRlIiwgaHopOworCX0KK30KKworc3RhdGljIGludAorbG03NV9wcm9iZShkZXZpY2Vf dCBkZXYpCit7CisJaW50IHR5cGU7CisJc3RydWN0IGxtNzVfc29mdGMgKnNjOworCisJdHlwZSA9 IDA7CisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisjaWZkZWYgRkRUCisJc2MtPnNjX2h3 dHlwZSA9IG9md19idXNfc2VhcmNoX2NvbXBhdGlibGUoZGV2LCBjb21wYXRfZGF0YSktPm9jZF9k YXRhOworCWlmIChzYy0+c2NfaHd0eXBlID09IEhXVFlQRV9OT05FKQorCQlyZXR1cm4gKEVOWElP KTsKKyNlbHNlCisJc2MtPnNjX2h3dHlwZSA9IEhXVFlQRV9MTTc1OworCWlmIChyZXNvdXJjZV9p bnRfdmFsdWUoZGV2aWNlX2dldF9uYW1lKGRldiksIGRldmljZV9nZXRfdW5pdChkZXYpLAorCSAg ICAibG03NWEiLCAmdHlwZSkgPT0gMCAmJiB0eXBlKQorCQlzYy0+c2NfaHd0eXBlID0gSFdUWVBF X0xNNzVBOworI2VuZGlmCisKKwlzd2l0Y2ggKHNjLT5zY19od3R5cGUpIHsKKwljYXNlIEhXVFlQ RV9MTTc1QToKKwkJZGV2aWNlX3NldF9kZXNjKGRldiwgIkxNNzVBIHRlbXBlcmF0dXJlIHNlbnNv ciIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZpY2Vfc2V0X2Rlc2MoZGV2LCAiTE03NSB0 ZW1wZXJhdHVyZSBzZW5zb3IiKTsKKwl9CisKKwlyZXR1cm4gKEJVU19QUk9CRV9HRU5FUklDKTsK K30KKworc3RhdGljIGludAorbG03NV9hdHRhY2goZGV2aWNlX3QgZGV2KQoreworCXN0cnVjdCBs bTc1X3NvZnRjICpzYzsKKworCXNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCXNjLT5zY19k ZXYgPSBkZXY7CisJc2MtPnNjX2FkZHIgPSBpaWNidXNfZ2V0X2FkZHIoZGV2KTsKKworCXNjLT5l bnVtX2hvb2suaWNoX2Z1bmMgPSBsbTc1X3N0YXJ0OworCXNjLT5lbnVtX2hvb2suaWNoX2FyZyA9 IGRldjsKKworCS8qCisJICogV2UgaGF2ZSB0byB3YWl0IHVudGlsIGludGVycnVwdHMgYXJlIGVu YWJsZWQuIEkyQyByZWFkIGFuZCB3cml0ZQorCSAqIG9ubHkgd29ya3MgaWYgdGhlIGludGVycnVw dHMgYXJlIGF2YWlsYWJsZS4KKwkgKi8KKwlpZiAoY29uZmlnX2ludHJob29rX2VzdGFibGlzaCgm c2MtPmVudW1faG9vaykgIT0gMCkKKwkJcmV0dXJuIChFTk9NRU0pOworCisJcmV0dXJuICgwKTsK K30KKworc3RhdGljIHZvaWQKK2xtNzVfc3RhcnQodm9pZCAqeGRldikKK3sKKwlkZXZpY2VfdCBk ZXY7CisJc3RydWN0IGxtNzVfc29mdGMgKnNjOworCXN0cnVjdCBzeXNjdGxfY3R4X2xpc3QgKmN0 eDsKKwlzdHJ1Y3Qgc3lzY3RsX29pZCAqdHJlZV9ub2RlOworCXN0cnVjdCBzeXNjdGxfb2lkX2xp c3QgKnRyZWU7CisKKwlkZXYgPSAoZGV2aWNlX3QpeGRldjsKKwlzYyA9IGRldmljZV9nZXRfc29m dGMoZGV2KTsKKwljdHggPSBkZXZpY2VfZ2V0X3N5c2N0bF9jdHgoZGV2KTsKKwl0cmVlX25vZGUg PSBkZXZpY2VfZ2V0X3N5c2N0bF90cmVlKGRldik7CisJdHJlZSA9IFNZU0NUTF9DSElMRFJFTih0 cmVlX25vZGUpOworCisJY29uZmlnX2ludHJob29rX2Rpc2VzdGFibGlzaCgmc2MtPmVudW1faG9v ayk7CisKKwkvKiBSZWFkIHRoZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLiAqLworCWlmIChsbTc1 X2NvbmZfcmVhZChzYykgIT0gMCkgeworCQlkZXZpY2VfcHJpbnRmKGRldiwgImNhbm5vdCByZWFk IHRoZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLlxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBU ZW1wZXJhdHVyZS4gKi8KKwlTWVNDVExfQUREX1BST0MoY3R4LCB0cmVlLCBPSURfQVVUTywgInRl bXBlcmF0dXJlIiwKKwkgICAgQ1RMVFlQRV9JTlQgfCBDVExGTEFHX1JEIHwgQ1RMRkxBR19NUFNB RkUsIGRldiwgTE03NV9URU1QLAorCSAgICBsbTc1X3RlbXBfc3lzY3RsLCAiSUsiLCAiQ3VycmVu dCB0ZW1wZXJhdHVyZSIpOworCVNZU0NUTF9BRERfUFJPQyhjdHgsIHRyZWUsIE9JRF9BVVRPLCAi dGh5c3QiLAorCSAgICBDVExUWVBFX0lOVCB8IENUTEZMQUdfUlcgfCBDVExGTEFHX01QU0FGRSwg ZGV2LCBMTTc1X1RIWVNULAorCSAgICBsbTc1X3RlbXBfc3lzY3RsLCAiSUsiLCAiSHlzdGVyZXNp cyB0ZW1wZXJhdHVyZSIpOworCVNZU0NUTF9BRERfUFJPQyhjdHgsIHRyZWUsIE9JRF9BVVRPLCAi dG9zIiwKKwkgICAgQ1RMVFlQRV9JTlQgfCBDVExGTEFHX1JXIHwgQ1RMRkxBR19NUFNBRkUsIGRl diwgTE03NV9UT1MsCisJICAgIGxtNzVfdGVtcF9zeXNjdGwsICJJSyIsICJPdmVydGVtcGVyYXR1 cmUiKTsKKworCS8qIENvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4gKi8KKwlTWVNDVExfQUREX1BS T0MoY3R4LCB0cmVlLCBPSURfQVVUTywgImZhdWx0cyIsCisJICAgIENUTEZMQUdfUlcgfCBDVExU WVBFX1VJTlQsIGRldiwgMCwKKwkgICAgbG03NV9mYXVsdHNfc3lzY3RsLCAiSVUiLCAiTE03NSBm YXVsdCBxdWV1ZSIpOworCVNZU0NUTF9BRERfUFJPQyhjdHgsIHRyZWUsIE9JRF9BVVRPLCAibW9k ZSIsCisJICAgIENUTEZMQUdfUlcgfCBDVExUWVBFX1NUUklORywgZGV2LCAwLAorCSAgICBsbTc1 X21vZGVfc3lzY3RsLCAiQSIsICJMTTc1IG1vZGUiKTsKKwlTWVNDVExfQUREX1BST0MoY3R4LCB0 cmVlLCBPSURfQVVUTywgInBvbGFyaXR5IiwKKwkgICAgQ1RMRkxBR19SVyB8IENUTFRZUEVfU1RS SU5HLCBkZXYsIDAsCisJICAgIGxtNzVfcG9sX3N5c2N0bCwgIkEiLCAiTE03NSBPUyBwb2xhcml0 eSIpOworCVNZU0NUTF9BRERfUFJPQyhjdHgsIHRyZWUsIE9JRF9BVVRPLCAic2h1dGRvd24iLAor CSAgICBDVExGTEFHX1JXIHwgQ1RMVFlQRV9VSU5ULCBkZXYsIDAsCisJICAgIGxtNzVfc2h1dGRv d25fc3lzY3RsLCAiSVUiLCAiTE03NSBzaHV0ZG93biIpOworfQorCitzdGF0aWMgaW50CitsbTc1 X2NvbmZfcmVhZChzdHJ1Y3QgbG03NV9zb2Z0YyAqc2MpCit7CisJdWludDhfdCBidWY4OworCisJ aWYgKGxtNzVfcmVhZChzYy0+c2NfZGV2LCBzYy0+c2NfYWRkciwgTE03NV9DT05GLCAmYnVmOCwg MSkgPCAwKQorCQlyZXR1cm4gKC0xKTsKKworCXNjLT5zY19jb25mID0gKHVpbnQzMl90KWJ1Zjg7 CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitsbTc1X2NvbmZfd3JpdGUoc3RydWN0 IGxtNzVfc29mdGMgKnNjKQoreworCXVpbnQ4X3QgYnVmOFsyXTsKKworCWJ1ZjhbMF0gPSBMTTc1 X0NPTkY7CisJYnVmOFsxXSA9ICh1aW50OF90KXNjLT5zY19jb25mICYgTE03NV9DT05GX01BU0s7 CisKKwlpZiAobG03NV93cml0ZShzYy0+c2NfZGV2LCBzYy0+c2NfYWRkciwgYnVmOCwgMikgPCAw KQorCQlyZXR1cm4gKC0xKTsKKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK2xtNzVf dGVtcF9yZWFkKHN0cnVjdCBsbTc1X3NvZnRjICpzYywgdWludDhfdCByZWcsIGludCAqdGVtcCkK K3sKKwl1aW50OF90IGJ1ZjhbMl07CisJdWludDE2X3QgYnVmOworCWludCB0OworCisJaWYgKGxt NzVfcmVhZChzYy0+c2NfZGV2LCBzYy0+c2NfYWRkciwgcmVnLCBidWY4LCAyKSA8IDApCisJCXJl dHVybiAoLTEpOworCisJYnVmID0gKGJ1ZjhbMF0gPDwgOCkgfCAoYnVmOFsxXSAmIDB4ZmYpOwor CisJLyoKKwkgKiBMTTc1IGhhcyBhIDkgYml0IEFEQyB3aXRoIHJlc29sdXRpb24gb2YgMC41IEMg cGVyIGJpdC4KKwkgKiBMTTc1QSBoYXMgYSAxMSBiaXQgQURDIHdpdGggcmVzb2x1dGlvbiBvZiAw LjEyNSBDIHBlciBiaXQuCisJICogVGVtcGVyYXR1cmUgaXMgc3RvcmVkIHdpdGggdHdvJ3MgY29t cGxlbWVudC4KKwkgKi8KKwlpZiAoYnVmICYgTE03NV9ORUdfQklUKQorCQlidWYgPSB+YnVmICsg MTsKKwkqdGVtcCA9ICgoaW50MTZfdClidWYgPj4gOCkgKiAxMDsKKwl0ID0gMDsKKwlpZiAoc2Mt PnNjX2h3dHlwZSA9PSBIV1RZUEVfTE03NUEpIHsKKwkJaWYgKGJ1ZiAmIExNNzVfMDEyNUMpCisJ CQl0ICs9IDEyNTsKKwkJaWYgKGJ1ZiAmIExNNzVfMDI1MEMpCisJCQl0ICs9IDI1MDsKKwl9CisJ aWYgKGJ1ZiAmIExNNzVfMDUwMEMpCisJCXQgKz0gNTAwOworCXQgLz0gMTAwOworCSp0ZW1wICs9 IHQ7CisJaWYgKGJ1ZiAmIExNNzVfTkVHX0JJVCkKKwkJKnRlbXAgPSAtKCp0ZW1wKTsKKwkqdGVt cCArPSBUWl9aRVJPQzsKKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK2xtNzVfdGVt cF93cml0ZShzdHJ1Y3QgbG03NV9zb2Z0YyAqc2MsIHVpbnQ4X3QgcmVnLCBpbnQgdGVtcCkKK3sK Kwl1aW50OF90IGJ1ZjhbM107CisJdWludDE2X3QgYnVmOworCisJaWYgKHRlbXAgPiBMTTc1X01B WF9URU1QKQorCQl0ZW1wID0gTE03NV9NQVhfVEVNUDsKKwlpZiAodGVtcCA8IExNNzVfTUlOX1RF TVApCisJCXRlbXAgPSBMTTc1X01JTl9URU1QOworCisJYnVmID0gKHVpbnQxNl90KXRlbXA7CisJ YnVmIDw8PSA4OworCisJYnVmOFswXSA9IHJlZzsKKwlidWY4WzFdID0gYnVmID4+IDg7CisJYnVm OFsyXSA9IGJ1ZiAmIDB4ZmY7CisKKwlpZiAobG03NV93cml0ZShzYy0+c2NfZGV2LCBzYy0+c2Nf YWRkciwgYnVmOCwgMykgPCAwKQorCQlyZXR1cm4gKC0xKTsKKworCXJldHVybiAoMCk7Cit9CisK K3N0YXRpYyBpbnQKK2xtNzVfc3RyX21vZGUoY2hhciAqYnVmKQoreworCWludCBsZW4sIHJ0cm47 CisKKwlydHJuID0gLTE7CisJbGVuID0gc3RybGVuKGJ1Zik7CisJaWYgKGxlbiA+IDIgJiYgc3Ry bmNhc2VjbXAoImludGVycnVwdCIsIGJ1ZiwgbGVuKSA9PSAwKQorCQlydHJuID0gMTsKKwllbHNl IGlmIChsZW4gPiAyICYmIHN0cm5jYXNlY21wKCJjb21wYXJhdG9yIiwgYnVmLCBsZW4pID09IDAp CisJCXJ0cm4gPSAwOworCisJcmV0dXJuIChydHJuKTsKK30KKworc3RhdGljIGludAorbG03NV9z dHJfcG9sKGNoYXIgKmJ1ZikKK3sKKwlpbnQgbGVuLCBydHJuOworCisJcnRybiA9IC0xOworCWxl biA9IHN0cmxlbihidWYpOworCWlmIChsZW4gPiAxICYmIHN0cm5jYXNlY21wKCJoaWdoIiwgYnVm LCBsZW4pID09IDApCisJCXJ0cm4gPSAxOworCWVsc2UgaWYgKGxlbiA+IDEgJiYgc3RybmNhc2Vj bXAoImxvdyIsIGJ1ZiwgbGVuKSA9PSAwKQorCQlydHJuID0gMDsKKwllbHNlIGlmIChsZW4gPiA4 ICYmIHN0cm5jYXNlY21wKCJhY3RpdmUtaGlnaCIsIGJ1ZiwgbGVuKSA9PSAwKQorCQlydHJuID0g MTsKKwllbHNlIGlmIChsZW4gPiA4ICYmIHN0cm5jYXNlY21wKCJhY3RpdmUtbG93IiwgYnVmLCBs ZW4pID09IDApCisJCXJ0cm4gPSAwOworCisJcmV0dXJuIChydHJuKTsKK30KKworc3RhdGljIGlu dAorbG03NV90ZW1wX3N5c2N0bChTWVNDVExfSEFORExFUl9BUkdTKQoreworCWRldmljZV90IGRl djsKKwlpbnQgZXJyb3IsIHRlbXA7CisJc3RydWN0IGxtNzVfc29mdGMgKnNjOworCXVpbnQ4X3Qg cmVnOworCisJZGV2ID0gYXJnMTsKKwlyZWcgPSBhcmcyOworCXNjID0gZGV2aWNlX2dldF9zb2Z0 YyhkZXYpOworCisJaWYgKGxtNzVfdGVtcF9yZWFkKHNjLCByZWcsICZ0ZW1wKSAhPSAwKQorCQly ZXR1cm4gKEVJTyk7CisKKwllcnJvciA9IHN5c2N0bF9oYW5kbGVfaW50KG9pZHAsICZ0ZW1wLCAw LCByZXEpOworCWlmIChlcnJvciAhPSAwIHx8IHJlcS0+bmV3cHRyID09IE5VTEwpCisJCXJldHVy biAoZXJyb3IpOworCisJaWYgKGxtNzVfdGVtcF93cml0ZShzYywgcmVnLCB0ZW1wKSAhPSAwKQor CQlyZXR1cm4gKEVJTyk7CisKKwlyZXR1cm4gKGVycm9yKTsKK30KKworc3RhdGljIGludAorbG03 NV9mYXVsdHNfc3lzY3RsKFNZU0NUTF9IQU5ETEVSX0FSR1MpCit7CisJZGV2aWNlX3QgZGV2Owor CWludCBlcnJvciwgZmF1bHRzLCBpLCBuZXdmLCB0bXA7CisJc3RydWN0IGxtNzVfc29mdGMgKnNj OworCisJZGV2ID0gYXJnMTsKKwlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwl0bXAgPSAo c2MtPnNjX2NvbmYgJiBMTTc1X0NPTkZfRkFVTFQpID4+IExNNzVfQ09ORl9GU0hJRlQ7CisJaWYg KHRtcCA+IG5pdGVtcyhsbTc1X2ZhdWx0cykpCisJCXRtcCA9IG5pdGVtcyhsbTc1X2ZhdWx0cyk7 CisJZmF1bHRzID0gbG03NV9mYXVsdHNbdG1wXTsKKworCWVycm9yID0gc3lzY3RsX2hhbmRsZV9p bnQob2lkcCwgJmZhdWx0cywgMCwgcmVxKTsKKwlpZiAoZXJyb3IgIT0gMCB8fCByZXEtPm5ld3B0 ciA9PSBOVUxMKQorCQlyZXR1cm4gKGVycm9yKTsKKworCWlmIChmYXVsdHMgIT0gbG03NV9mYXVs dHNbdG1wXSkgeworCQluZXdmID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IG5pdGVtcyhsbTc1X2Zh dWx0cyk7IGkrKykKKwkJCWlmIChmYXVsdHMgPj0gbG03NV9mYXVsdHNbaV0pCisJCQkJbmV3ZiA9 IGk7CisJCXNjLT5zY19jb25mICY9IH5MTTc1X0NPTkZfRkFVTFQ7CisJCXNjLT5zY19jb25mIHw9 IG5ld2YgPDwgTE03NV9DT05GX0ZTSElGVDsKKwkJaWYgKGxtNzVfY29uZl93cml0ZShzYykgIT0g MCkKKwkJCXJldHVybiAoRUlPKTsKKwl9CisKKwlyZXR1cm4gKGVycm9yKTsKK30KKworc3RhdGlj IGludAorbG03NV9tb2RlX3N5c2N0bChTWVNDVExfSEFORExFUl9BUkdTKQoreworCWNoYXIgYnVm WzE2XTsKKwlkZXZpY2VfdCBkZXY7CisJaW50IGVycm9yLCBtb2RlLCBuZXdtOworCXN0cnVjdCBs bTc1X3NvZnRjICpzYzsKKworCWRldiA9IGFyZzE7CisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRl dik7CisJaWYgKHNjLT5zY19jb25mICYgTE03NV9DT05GX01PREUpIHsKKwkJbW9kZSA9IDE7CisJ CXN0cmxjcHkoYnVmLCAiaW50ZXJydXB0Iiwgc2l6ZW9mKGJ1ZikpOworCX0gZWxzZSB7CisJCW1v ZGUgPSAwOworCQlzdHJsY3B5KGJ1ZiwgImNvbXBhcmF0b3IiLCBzaXplb2YoYnVmKSk7CisJfQor CisJZXJyb3IgPSBzeXNjdGxfaGFuZGxlX3N0cmluZyhvaWRwLCBidWYsIHNpemVvZihidWYpLCBy ZXEpOworCWlmIChlcnJvciAhPSAwIHx8IHJlcS0+bmV3cHRyID09IE5VTEwpCisJCXJldHVybiAo ZXJyb3IpOworCisJbmV3bSA9IGxtNzVfc3RyX21vZGUoYnVmKTsKKwlpZiAobmV3bSAhPSAtMSAm JiBtb2RlICE9IG5ld20pIHsKKwkJc2MtPnNjX2NvbmYgJj0gfkxNNzVfQ09ORl9NT0RFOworCQlp ZiAobmV3bSA9PSAxKQorCQkJc2MtPnNjX2NvbmYgfD0gTE03NV9DT05GX01PREU7CisJCWlmIChs bTc1X2NvbmZfd3JpdGUoc2MpICE9IDApCisJCQlyZXR1cm4gKEVJTyk7CisJfQorCisJcmV0dXJu IChlcnJvcik7Cit9CisKK3N0YXRpYyBpbnQKK2xtNzVfcG9sX3N5c2N0bChTWVNDVExfSEFORExF Ul9BUkdTKQoreworCWNoYXIgYnVmWzE2XTsKKwlkZXZpY2VfdCBkZXY7CisJaW50IGVycm9yLCBu ZXdwLCBwb2w7CisJc3RydWN0IGxtNzVfc29mdGMgKnNjOworCisJZGV2ID0gYXJnMTsKKwlzYyA9 IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwlpZiAoc2MtPnNjX2NvbmYgJiBMTTc1X0NPTkZfUE9M KSB7CisJCXBvbCA9IDE7CisJCXN0cmxjcHkoYnVmLCAiYWN0aXZlLWhpZ2giLCBzaXplb2YoYnVm KSk7CisJfSBlbHNlIHsKKwkJcG9sID0gMDsKKwkJc3RybGNweShidWYsICJhY3RpdmUtbG93Iiwg c2l6ZW9mKGJ1ZikpOworCX0KKworCWVycm9yID0gc3lzY3RsX2hhbmRsZV9zdHJpbmcob2lkcCwg YnVmLCBzaXplb2YoYnVmKSwgcmVxKTsKKwlpZiAoZXJyb3IgIT0gMCB8fCByZXEtPm5ld3B0ciA9 PSBOVUxMKQorCQlyZXR1cm4gKGVycm9yKTsKKworCW5ld3AgPSBsbTc1X3N0cl9wb2woYnVmKTsK KwlpZiAobmV3cCAhPSAtMSAmJiBwb2wgIT0gbmV3cCkgeworCQlzYy0+c2NfY29uZiAmPSB+TE03 NV9DT05GX1BPTDsKKwkJaWYgKG5ld3AgPT0gMSkKKwkJCXNjLT5zY19jb25mIHw9IExNNzVfQ09O Rl9QT0w7CisJCWlmIChsbTc1X2NvbmZfd3JpdGUoc2MpICE9IDApCisJCQlyZXR1cm4gKEVJTyk7 CisJfQorCisJcmV0dXJuIChlcnJvcik7Cit9CisKK3N0YXRpYyBpbnQKK2xtNzVfc2h1dGRvd25f c3lzY3RsKFNZU0NUTF9IQU5ETEVSX0FSR1MpCit7CisJZGV2aWNlX3QgZGV2OworCWludCBlcnJv ciwgc2h1dGRvd24sIHRtcDsKKwlzdHJ1Y3QgbG03NV9zb2Z0YyAqc2M7CisKKwlkZXYgPSBhcmcx OworCXNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCXRtcCA9IHNodXRkb3duID0gKHNjLT5z Y19jb25mICYgTE03NV9DT05GX1NIVVREKSA/IDEgOiAwOworCisJZXJyb3IgPSBzeXNjdGxfaGFu ZGxlX2ludChvaWRwLCAmc2h1dGRvd24sIDAsIHJlcSk7CisJaWYgKGVycm9yICE9IDAgfHwgcmVx LT5uZXdwdHIgPT0gTlVMTCkKKwkJcmV0dXJuIChlcnJvcik7CisKKwlpZiAoc2h1dGRvd24gIT0g dG1wKSB7CisJCXNjLT5zY19jb25mICY9IH5MTTc1X0NPTkZfU0hVVEQ7CisJCWlmIChzaHV0ZG93 bikKKwkJCXNjLT5zY19jb25mIHw9IExNNzVfQ09ORl9TSFVURDsKKwkJaWYgKGxtNzVfY29uZl93 cml0ZShzYykgIT0gMCkKKwkJCXJldHVybiAoRUlPKTsKKwl9CisKKwlyZXR1cm4gKGVycm9yKTsK K30KClByb3BlcnR5IGNoYW5nZXMgb246IHN5cy9kZXYvaWljYnVzL2xtNzUuYwpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUg YXQgZW5kIG9mIHByb3BlcnR5CkFkZGVkOiBzdm46bWltZS10eXBlCiMjIC0wLDAgKzEgIyMKK3Rl eHQvcGxhaW4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpBZGRlZDogc3ZuOmtleXdv cmRzCiMjIC0wLDAgKzEgIyMKK0ZyZWVCU0Q9JUgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9w ZXJ0eQpJbmRleDogc2hhcmUvbWFuL21hbjQvTWFrZWZpbGUKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2hhcmUv bWFuL21hbjQvTWFrZWZpbGUJKHJldmlzaW9uIDI2Mjg2MCkKKysrIHNoYXJlL21hbi9tYW40L01h a2VmaWxlCSh3b3JraW5nIGNvcHkpCkBAIC0yMjMsNiArMjIzLDcgQEAKIAlsZ2UuNCBcCiAJJHtf bGluZGV2LjR9IFwKIAkke19saW51eC40fSBcCisJbG03NS40IFwKIAlsbWMuNCBcCiAJbG8uNCBc CiAJbHAuNCBcCkluZGV4OiBzaGFyZS9tYW4vbWFuNC9sbTc1LjQKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2hh cmUvbWFuL21hbjQvbG03NS40CShyZXZpc2lvbiAwKQorKysgc2hhcmUvbWFuL21hbjQvbG03NS40 CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkyIEBACisuXCIKKy5cIiBDb3B5cmlnaHQgKGMp IDIwMTQgTHVpeiBPdGF2aW8gTyBTb3V6YSA8bG9vc0BmcmVlYnNkLm9yZz4KKy5cIiBBbGwgcmln aHRzIHJlc2VydmVkLgorLlwiCisuXCIgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisuXCIgbW9kaWZpY2F0aW9uLCBhcmUg cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisuXCIgYXJl IG1ldDoKKy5cIiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAorLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy5cIiAyLiBSZWRpc3RyaWJ1dGlvbnMg aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorLlwiICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lciBpbiB0aGUKKy5cIiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLlwiCisuXCIgVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKy5c IiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg SU1QTElFRCBXQVJSQU5USUVTCisuXCIgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKy5cIiBJTiBOTyBFVkVOVCBT SEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisuXCIg SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg KElOQ0xVRElORywgQlVUCisuXCIgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLlwiIERBVEEsIE9SIFBST0ZJ VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor LlwiIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC SUxJVFksIE9SIFRPUlQKKy5cIiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKy5cIiBUSElTIFNPRlRXQVJFLCBF VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorLlwiCisu XCIgJEZyZWVCU0QkCisuXCIKKy5EZCBNYXJjaCA3LCAyMDE0CisuRHQgTE03NSA0CisuT3MKKy5T aCBOQU1FCisuTm0gbG03NQorLk5kIGxtNzUgaTJjIGRpZ2l0YWwgdGVtcGVyYXR1cmUgc2Vuc29y IGRyaXZlcgorLlNoIFNZTk9QU0lTCisuQ2QgImRldmljZSBpaWMiCisuQ2QgImRldmljZSBpaWNi dXMiCisuQ2QgImRldmljZSBsbTc1IgorLlNoIERFU0NSSVBUSU9OCitUaGUKKy5ObQorZHJpdmVy IHByb3ZpZGVzIGFjY2VzcyB0byBzZW5zb3IgZGF0YSBhbmQgY29uZmlndXJhdGlvbiBvdmVyIHRo ZQorLlhyIGlpY2J1cyA0IC4KKy5QcAorSXQgcHJvdmlkZXMgYW4gZWFzeSBhbmQgc2ltcGxlIHdh eSB0byBjaGVjayB0aGUgZnVuY3Rpb25hbGl0eSBvZiBhbiBpMmMgYnVzCithcyBpdCBwcm92aWRl cyByZWFkIGFuZCB3cml0ZSBhY2Nlc3MgdG8gdGhlCisuTm0KK2NvbmZpZ3VyYXRpb24gcmVnaXN0 ZXIuCisuUHAKK1RoZSBhY2Nlc3MgdG8KKy5ObQorZGF0YSBpcyBtYWRlIHZpYSB0aGUKKy5YciBz eXNjdGwgOAoraW50ZXJmYWNlOgorLkJkIC1saXRlcmFsCitkZXYubG03NS4wLiVkZXNjOiBMTTc1 QSB0ZW1wZXJhdHVyZSBzZW5zb3IKK2Rldi5sbTc1LjAuJWRyaXZlcjogbG03NQorZGV2LmxtNzUu MC4lbG9jYXRpb246IGFkZHI9MHg0OQorZGV2LmxtNzUuMC4lcG5waW5mbzogbmFtZT1sbTc1MCBj b21wYXQ9ZnJlZWJzZCxsbTc1YQorZGV2LmxtNzUuMC4lcGFyZW50OiBpaWNidXMzCitkZXYubG03 NS4wLnRlbXBlcmF0dXJlOiAyNy4xQworZGV2LmxtNzUuMC50aHlzdDogNzUuMEMKK2Rldi5sbTc1 LjAudG9zOiA4MC4wQworZGV2LmxtNzUuMC5mYXVsdHM6IDEKK2Rldi5sbTc1LjAubW9kZTogY29t cGFyYXRvcgorZGV2LmxtNzUuMC5wb2xhcml0eTogYWN0aXZlLWxvdworZGV2LmxtNzUuMC5zaHV0 ZG93bjogMAorLkVkCisuQmwgLXRhZyAtd2lkdGggIi5WYSBkZXYubG03NS4lZC50ZW1wZXJhdHVy ZSIKKy5JdCBWYSBkZXYubG03NS4lZC50ZW1wZXJhdHVyZQorSXMgdGhlIHJlYWQtb25seSB2YWx1 ZSBvZiB0aGUgY3VycmVudCB0ZW1wZXJhdHVyZSByZWFkIGJ5IHRoZSBzZW5zb3IuCisuSXQgVmEg ZGV2LmxtNzUuJWQudGh5c3QKK1NldHMgdGhlIGh5c3RlcmVzaXMgdGVtcGVyYXR1cmUuCitPbmNl IHRoZSB0ZW1wZXJhdHVyZSBnZXQgb3ZlciB0aGUgb3ZlcnRlbXBlcmF0dXJlIHNodXRkb3duIHZh bHVlICh0b3MpCitpdCBuZWVkIHRvIGRyb3AgYmVsbG93IHRoZSBoeXN0ZXJlc2lzIHRlbXBlcmF0 dXJlIHRvIGRpc2FibGUgdGhlIG91dHB1dAorKGludGVycnVwdCkgcGluIGFnYWluLgorLkl0IFZh IGRldi5sbTc1LiVkLnRvcworU2V0cyB0aGUgb3ZlcnRlbXBlcmF0dXJlIHNodXRkb3duIHZhbHVl LgorT25jZSB0aGUgdGVtcGVyYXR1cmUgZ2V0IG92ZXIgdGhpcyB2YWx1ZSB0aGUgb3V0cHV0IHBp biB3aWxsIGJlIGVuYWJsZWQuCitUaGUgd2F5IHRoZSBvdXRwdXQgKGludGVycnVwdCkgcGluIHdv cmtzLCBkZXBlbmRzIG9uIHRoZSBtb2RlLgorLkl0IFZhIGRldi5sbTc1LiVkLmZhdWx0cworSXMg dGhlIG51bWJlciBvZiBmYXVsdHMgdGhhdCBtdXN0IG9jY3VyIGNvbnNlY3V0aXZlbHkgdG8gYWN0 aXZhdGUgdGhlCitpbnRlcnJ1cHQgKG91dHB1dCkgcGluLgorSXQgY2FuIGJlIHNldCB0byAxLCAy LCA0LCBhbmQgNi4KKy5JdCBWYSBkZXYubG03NS4lZC5tb2RlCitTZXQgdGhlIG9wZXJhdGlvbiBt b2RlIGZvciB0aGUgc2Vuc29yIGludGVycnVwdCBwaW4uCitJdCBjYW4gYmUgc2V0IHRvICdjb21w YXJhdG9yJyAoZGVmYXVsdCkgb3IgJ2ludGVycnVwdCcuCisuSXQgVmEgZGV2LmxtNzUuJWQucG9s YXJpdHkKK1NldCB0aGUgcG9sYXJpdHkgb2YgdGhlIHNlbnNvciBpbnRlcnJ1cHQgcGluLgorSXQg Y2FuIGJlIHNldCB0byAnYWN0aXZlLWxvdycgKGRlZmF1bHQpIG9yICdhY3RpdmUtaGlnaCcuCitQ bGVhc2Ugbm90ZSB0aGF0IHRoZSBvdXRwdXQgcGluIGlzIGFuIG9wZW4tZHJhaW4gb3V0cHV0IGFu ZCBpdCBuZWVkcyBhCitwcm9wZXIgcHVsbC11cCByZXNpc3RvciB0byB3b3JrLgorLkl0IFZhIGRl di5sbTc1LiVkLnNodXRkb3duCitXaGVuIHNldCB0byAnMScgaXQgc2h1dGRvd24gdGhlIHNlbnNv ci4KK1RoZSB0ZW1wZXJhdHVyZSBjb252ZXJ0aW9uIHN0b3BzIGJ1dCB0aGUgc2Vuc29yIHJlbWFp bnMgd2l0aCBpdHMgaTJjIGJ1cworYWN0aXZlLCBpLmUuLCBpdCBjYW4gYmUgd29rZW4gdXAgYnkg c2V0dGluZyB0aGlzIG9wdGlvbiB0byAnMCcgYWdhaW4uCisuRWwKKy5QcAorUGxlYXNlIGNoZWNr IHRoZQorLk5tCitkYXRhc2hlZXQgZm9yIG1vcmUgZGV0YWlscy4KKy5QcAorV2hlbiB1c2VkIHRv Z2V0aGVyIHdpdGgKKy5YciBzbm1wX2xtNzUgMworaXQgYWxsb3dzIHRoZSBtb25pdG9yaW5nIG9m CisuTm0KK3RlbXBlcmF0dXJlIGRhdGEgb3ZlciBTTk1QLgorLlBwCitUaGUKKy5ObQorZHJpdmVy IHN1cHBvcnRzIGJvdGggdGhlIGxvdyBhbmQgdGhlIGhpZ2ggcmVzb2x1dGlvbiBtb2RlbHMuCisu UHAKK1RoZSBsb3cgcmVzb2x1dGlvbiBtb2RlbCAobG03NSkgcHJvdmlkZXMgYSA5IGJpdCBvdXRw dXQgd2l0aCB0aGUgTFNCCityZXByZXNlbnRpbmcgMC41Qy4KKy5QcAorVGhlIGhpZ2ggcmVzb2x1 dGlvbiBtb2RlbCAobG03NWEpIHByb3ZpZGVzIGFuIDExIGJpdCBvdXRwdXQgd2l0aCB0aGUgTFNC CityZXByZXNlbnRpbmcgMC4xMjVDLgorLlBwCitPbiBhCisuWHIgZGV2aWNlLmhpbnRzIDUKK2Jh c2VkIHN5c3RlbSwgbGlrZQorLkxpIE1JUFMgLAordGhlc2UgdmFsdWVzIGFyZSBjb25maWd1cmFi bGUgZm9yIHRoZQorLk5tIDoKKy5CbCAtdGFnIC13aWR0aCAiLlZhIGhpbnQubG03NS4lZC5sbTc1 YSIKKy5JdCBWYSBoaW50LmxtNzUuJWQuYXQKK0lzIHRoZQorLlhyIGlpY2J1cyA0Cit5b3UgYXJl IGF0dGFjaGluZyB0by4KKy5JdCBWYSBoaW50LmxtNzUuJWQuYWRkcgorSXMgdGhlCisuTm0KK2ky YyBhZGRyZXNzIG9uIHRoZQorLlhyIGlpY2J1cyA0IC4KKy5JdCBWYSBoaW50LmxtNzUuJWQubG03 NWEKK1doZW4gc2V0IHRvICcxJyBlbmFibGVzIHRoZSBoaWdoIHJlc29sdXRpb24gdGVtcGVyYXR1 cmUgcmVhZGluZyBmb3IgdGhpcworc2Vuc29yLgorLkVsCisuUHAKK09uIGEKKy5YciBGRFQgNAor YmFzZWQgc3lzdGVtLCBsaWtlCisuTGkgQVJNICwKK3RoZSBEVFMgcGFydCBmb3IgYQorLk5tCitk ZXZpY2UgdXN1YWxseSBsb29rcyBsaWtlOgorLkJkIC1saXRlcmFsCitpMmMgeworCisJLi4uCisK KwlsbTc1MCB7CisJCWNvbXBhdGlibGUgPSAiZnJlZWJzZCxsbTc1IjsKKwkJaTJjLWFkZHJlc3Mg PSA8MHg0OD47CisJfTsKKworCWxtNzUxIHsKKwkJY29tcGF0aWJsZSA9ICJmcmVlYnNkLGxtNzVh IjsKKwkJaTJjLWFkZHJlc3MgPSA8MHg0OT47CisJfTsKK307CisuRWQKKy5QcAorV2hlcmU6Cisu QmwgLXRhZyAtd2lkdGggIi5WYSBpMmMtYWRkcmVzcyIKKy5JdCBWYSBjb21wYXRpYmxlCitTaG91 bGQgYmUgc2V0IHRvICJmcmVlYnNkLGxtNzUiIGZvciB0aGUgbG93IHJlc29sdXRpb24gZGV2aWNl cyBhbmQKKyJmcmVlYnNkLGxtNzVhIiBmb3IgdGhlIGhpZ2ggcmVzb2x1dGlvbiBkZXZpY2VzLgor Lkl0IFZhIGkyYy1hZGRyZXNzCitUaGUKKy5WYSBpMmMtYWRkcmVzcworcHJvcGVydHkgaW5kaWNh dGVzIHdoaWNoIGkyYyBhZGRyZXNzIHRoZQorLk5tCitpcyB3aXJlZCBhdC4KKy5ObQordGVtcGVy YXR1cmUgc2Vuc29ycyBjYW4gYmUgd2lyZWQgdG8gOCBkaWZmZXJlbnQgYWRkcmVzcywgYWxsb3dp bmcgdXAgdG8gOAorc2Vuc29ycyBvbiB0aGUgc2FtZQorLlhyIGlpY2J1cyA0IC4KKy5FbAorLlNo IFNFRSBBTFNPCisuWHIgc25tcF9sbTc1IDMgLAorLlhyIGZkdCA0ICwKKy5YciBpaWMgNCAsCisu WHIgaWljYnVzIDQgLAorLlhyIHN5c2N0bCA4CisuU2ggSElTVE9SWQorVGhlCisuTm0KK2RyaXZl ciBmaXJzdCBhcHBlYXJlZCBpbgorLkZ4IDExLjAgLgorLlNoIEFVVEhPUlMKKy5BbiAtbm9zcGxp dAorVGhlIGRyaXZlciBhbmQgdGhpcyBtYW51YWwgcGFnZSB3YXMgd3JpdHRlbiBieQorLkFuIEx1 aXogT3RhdmlvIE8gU291emEgQXEgbG9vc0BGcmVlQlNELm9yZwoKUHJvcGVydHkgY2hhbmdlcyBv bjogc2hhcmUvbWFuL21hbjQvbG03NS40Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUK IyMgLTAsMCArMSAjIwordGV4dC9wbGFpbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5 CkFkZGVkOiBzdm46a2V5d29yZHMKIyMgLTAsMCArMSAjIworRnJlZUJTRD0lSApcIE5vIG5ld2xp bmUgYXQgZW5kIG9mIHByb3BlcnR5CkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMK K25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5Cg== --047d7bb70ae4a7569804f4443c0b--