From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrzej Hajda Subject: Re: [PATCH v8 2/3] drm/panel: Add support for S6E3HA2 panel driver on TM2 board Date: Tue, 07 Feb 2017 10:53:17 +0100 Message-ID: References: <1484116439-7275-1-git-send-email-hoegeun.kwon@samsung.com> <1484116439-7275-3-git-send-email-hoegeun.kwon@samsung.com> <08c5d94b-c76f-af14-c08f-478e26a34a7c@samsung.com> <588FD3C3.7080508@samsung.com> <20170131085449.GA19348@ulmo.ba.sec> <20170202175817.GC9055@ulmo.ba.sec> <74940581-911f-ecdb-e503-6ec2ef8a5177@samsung.com> <20170206103916.GG27607@ulmo.ba.sec> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-reply-to: <20170206103916.GG27607@ulmo.ba.sec> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Thierry Reding Cc: linux-samsung-soc@vger.kernel.org, andi.shyti@samsung.com, devicetree@vger.kernel.org, Donghwa Lee , jh80.chung@samsung.com, linux-kernel@vger.kernel.org, Krzysztof Kozlowski , cw00.choi@samsung.com, kgene@kernel.org, dri-devel@lists.freedesktop.org, Hyungwon Hwang , Hoegeun Kwon List-Id: devicetree@vger.kernel.org T24gMDYuMDIuMjAxNyAxMTozOSwgVGhpZXJyeSBSZWRpbmcgd3JvdGU6Cj4gT24gRnJpLCBGZWIg MDMsIDIwMTcgYXQgMDk6NTQ6NDJBTSArMDEwMCwgQW5kcnplaiBIYWpkYSB3cm90ZToKPj4gSGkg VGhpZXJyeSwKPj4KPj4gRmluYWxseSBzb21ldGhpbmcgdGVjaG5pY2FsIDopCj4+Cj4+IE9uIDAy LjAyLjIwMTcgMTg6NTgsIFRoaWVycnkgUmVkaW5nIHdyb3RlOgo+Pj4gT24gVHVlLCBKYW4gMzEs IDIwMTcgYXQgMDE6MDU6MjBQTSArMDEwMCwgQW5kcnplaiBIYWpkYSB3cm90ZToKPj4+PiBPbiAz MS4wMS4yMDE3IDA5OjU0LCBUaGllcnJ5IFJlZGluZyB3cm90ZToKPj4+Pj4gT24gVHVlLCBKYW4g MzEsIDIwMTcgYXQgMDk6MDE6MDdBTSArMDkwMCwgSW5raSBEYWUgd3JvdGU6Cj4+Pj4+PiAyMDE3 64WEIDAx7JuUIDI07J28IDEwOjUw7JeQIEhvZWdldW4gS3dvbiDsnbQo6rCAKSDsk7Qg6riAOgo+ Pj4+Pj4+IERlYXIgVGhpZXJyeSwKPj4+Pj4+Pgo+Pj4+Pj4+IENvdWxkIHlvdSBwbGVhc2UgcmV2 aWV3IHRoaXMgcGF0Y2g/Cj4+Pj4+PiBUaGllcnJ5LCBJIHRoaW5rIHRoaXMgcGF0Y2ggaGFzIGJl ZW4gcmV2aWV3ZWQgZW5vdWdoIGJ1dCBubyBjb21tZW50Cj4+Pj4+PiBmcm9tIHlvdS4gU2VlbXMg eW91IGFyZSBidXN5LiBJIHdpbGwgcGljayB1cCB0aGlzLgo+Pj4+PiBTb3JyeSwgYnV0IHRoYXQn cyBub3QgaG93IGl0IHdvcmtzLiBUaGlzIHBhdGNoIGhhcyBnb25lIHRocm91Z2ggOAo+Pj4+PiBy ZXZpc2lvbnMgd2l0aGluIDQgd2Vla3MsIGFuZCBJIHRlbmQgdG8gaWdub3JlIHBhdGNoZXMgbGlr ZSB0aGF0IHVudGlsCj4+Pj4+IHRoZSBkdXN0IHNldHRsZXMuCj4+Pj4+Cj4+Pj4+IE90aGVyIHRo YW4gdGhhdCwgdGhpcyBjb250aW51ZXMgdGhlIHNhbWUgbWFkbmVzcyB0aGF0IEkndmUgcmVwZWF0 ZWRseQo+Pj4+PiBjb21wbGFpbmVkIGFib3V0IGluIHRoZSBwYXN0LiBUaGUgd2hvbGUgbWVjaGFu aXNtIG9mIHJ1bm5pbmcgdGhyb3VnaCBhCj4+Pj4+IHNlcmllcyBvZiB3cml0ZXMgYW5kIG5vdCBj YXJpbmcgYWJvdXQgZXJyb3JzIHVudGlsIHRoZSB2ZXJ5IGVuZCBpcwo+Pj4+PiBzb21ldGhpbmcg d2UndmUgZGlzY3Vzc2VkIGF0IGxlbmd0aCBpbiB0aGUgcGFzdC4gCj4+Pj4gWWVzLCB3ZSBoYXZl IGRpc2N1c3NlZCB0aGUgcGF0dGVybiwgYnV0IHdpdGhvdXQgYW55IGNvbmNsdXNpb24uIFRoZQo+ Pj4+IHBhdHRlcm4gaXMgY29ycmVjdCwgdXNlZCBpbiBkaWZmZXJlbnQgcGxhY2VzIGluIGtlcm5l bCAoc2VlIGJlbG93IGZvcgo+Pj4+IGV4YW1wbGVzKSBhbmQgc2lnbmlmaWNhbnRseSBkZWNyZWFz ZXMgc291cmNlIGNvZGUgc2l6ZS4gRGlzYWxsb3dpbmcgaXQKPj4+PiBpbiBwYW5lbHMgc3Vic3lz dGVtIGp1c3QgYmVjYXVzZSBvZiBwZXJzb25hbCBwcmVmZXJlbmNlcyBvZiB0aGUKPj4+PiBtYWlu dGFpbmVyIGRvZXMgbm90IHNlZW0gdG8gYmUgcHJvcGVyLgo+Pj4+Cj4+Pj4+IEl0IGFsc28gaW4g bGFyZ2UgcGFydHMKPj4+Pj4gZHVwbGljYXRlcyBhIGJ1bmNoIG9mIGZ1bmN0aW9ucyBmcm9tIG90 aGVyIFNhbXN1bmcgcGFuZWwgZHJpdmVycyB0aGF0IEkKPj4+Pj4gYWxyZWFkeSBzYWlkIHNob3Vs ZCBldmVudHVhbGx5IGJlIG1vdmVkIHRvIHNvbWV0aGluZyBzYW5lci4KPj4+PiBDdXJyZW50bHkg dGhlcmUgYXJlIHR3byBTYW1zdW5nIHBhbmVsIGRyaXZlcnMsIG9uZSBpcyBvbiBTUEkgYnVzLAo+ Pj4+IGFub3RoZXIgb25lIGlzIG9uIERTSS4KPj4+PiBJIGFtIChjby0pYXV0aG9yIG9mIGJvdGgg ZHJpdmVycywgdGhleSBoYXZlIHNvbWUgc2ltaWxhcml0aWVzIGJ1dCBJIGRpZAo+Pj4+IG5vdCBz ZWUgYW55IGdhaW4gaW4gbWFraW5nIGFkZGl0aW9uYWwgYWJzdHJhY3Rpb25zIG92ZXIgdHJhbnNw b3J0IGxheWVyCj4+Pj4ganVzdCB0byBtYWtlIG9uZSBvciB0d28gc21hbGwgZnVuY3Rpb25zIGNv bW1vbi4KPj4+PiBDb3VsZCB5b3UgYmUgbW9yZSBwcmVjaXNlIHdoYXQgYXJlIHlvdSB0YWxraW5n IGFib3V0LCBvciBjb3VsZCB5b3UgZ2l2ZQo+Pj4+IGEgbGluayB0byB0aGUgbWFpbCB3aGVyZSB5 b3Ugc2FpZCBpdC4gQW55dGhpbmcgSSByZW1lbWJlciB3YXMgYQo+Pj4+IGRpc2N1c3Npb24gYWJv dXQgdWdseSBtYWdpYyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXMgZHVlIHRvIHBvb3IKPj4+PiBk b2N1bWVudGF0aW9uLgo+Pj4+Cj4+Pj4gQW5kIGJlbG93IHByb21pc2VkIGV4YW1wbGVzIG9mIHRo ZSBlcnJvciBwYXR0ZXJuLCBpdCB3YXMgdGltZSBjb25zdW1pbmcKPj4+PiB0byBmaW5kIHRoZW0s IHNvIHBsZWFzZSBhdCBsZWFzdCByZWFkIHRoZW0gOikKPj4+IEkndmUgZG9uZSBiZXR0ZXIsIGJl bG93IGlzIHdoYXQgSSBob3BlIGEgbGlzdCBvZiBnb29kIGFyZ3VtZW50cyB3aHkgdGhlCj4+PiBw YXR0ZXJuIGlzIGEgYmFkIGlkZWEsIGFuZCB3aHkgaW4gc29tZSBjYXNlcyBpdCBjYW4gYmUganVz dGlmaWVkLgo+Pj4KPj4+PiBBbG1vc3QgZXhhY3RseSB0aGUgc2FtZSBwYXR0ZXJucyBmb3IgdGhl IHNhbWUgcHVycG9zZToKPj4+Pgo+Pj4+IDEuIGh0dHA6Ly9seHIuZnJlZS1lbGVjdHJvbnMuY29t L3NvdXJjZS9kcml2ZXJzL25ldC9pZWVlODAyMTU0L2F0dXNiLmMjTDYzCj4+Pj4gICAgIENpdGF0 aW9uIGZyb20gdGhlIGNvZGU6Cj4+Pj4gICAgIFRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGVycm9y IGNoZWNrcyBpbiB0aGUgY29kZSwgd2UgcmVjb3JkIHRoZQo+Pj4+IGZpcnN0IGVycm9yCj4+Pj4g ICAgIGluIGF0dXNiLT5lcnIgYW5kIHJlamVjdCBhbGwgc3Vic2VxdWVudCByZXF1ZXN0cyB1bnRp bCB0aGUgZXJyb3IgaXMKPj4+PiBjbGVhcmVkLgo+Pj4gVGhhdCdzIGFib3V0IHRoZSB3b3JzdCBl eGFtcGxlIHlvdSBjb3VsZCd2ZSB1c2VkLiBIYXZlIHlvdSBldmVuIGxvb2tlZAo+Pj4gYXQgdGhl IGNvZGUgdGhhdCB1c2VzIHRoaXM/IEl0J3MgY29tcGxldGVseSBjcmF6eS4gU28gaGVyZSB3ZSBo YXZlIHRoZQo+Pj4gYXR1c2JfY29udHJvbF9tc2coKSBmdW5jdGlvbiB0aGF0IHN0b3JlcyB0aGlz IGVycm9yLCBidXQgdGhlbiBhbHNvCj4+PiBwcm9wYWdhdGVzIGl0IHRvIGl0cyBjYWxsZXIuIE9u ZSBvZiB0aGVzZSBjYWxsZXJzIGlzIGF0dXNiX3JlYWRfcmVnKCksCj4+PiB3aGljaCBhbHNvIHBy b3BhZ2F0ZXMgdGhlIGVycm9yIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyIHZhbHVlIGlmIHRoZQo+ Pj4gcmVhZCB3YXMgc3VjY2Vzc2Z1bC4KPj4+Cj4+PiBOb3cgdGhlIHJlYWxseSBpbnNhbmUgcGFy dCBpcyBob3cgdGhpcyBpcyB0aGVuIHVzZWQgaW4gc29tZXRoaW5nIGxpa2UKPj4+IGF0dXNiX3dy aXRlX3N1YnJlZygpOgo+Pj4KPj4+IAlvcmlnID0gYXR1c2JfcmVhZF9yZWcoYXR1c2IsIHJlZyk7 Cj4+PiAJdG1wID0gb3JpZyAmIH5tYXNrOwo+Pj4gCXRtcCB8PSAodmFsdWUgPDwgc2hpZnQpICYg bWFzazsKPj4+IAkKPj4+IAlpZiAodG1wICE9IG9yaWcpCj4+PiAJCXJldCA9IGF0dXNiX3dyaXRl X3JlZyhhdHVzYiwgcmVnLCB0bXApOwo+Pj4KPj4+IFNvIGxldCdzIGFzc3VtZSB0aGF0IGF0dXNi X2NvbnRyb2xfbXNnKCkgZmFpbHMgaW4gdGhlIGNhbGwgdG8KPj4+IGF0dXNiX3JlYWRfcmVnKCku IFlvdSdsbCBiZSByZXR1cm5pbmcgYW4gZXJyb3IgY29kZSwgbWFzayBvdXQgc29tZSBiaXRzLAo+ Pj4gT1IgaW4gbmV3IG9uZXMgYW5kIHdyaXRlIHRoZSByZXN1bHQgdG8gdGhlIHJlZ2lzdGVyLiBT byBub3Qgb25seSBkb2VzCj4+PiB0aGUgY29kZSBub3QgYm90aGVyIHRvIGNoZWNrIGZvciBlcnJv cnMsIGJ1dCBpdCB3aWxsIGFsc28gaGFwcGlseSBnbyBhbmQKPj4+IGNvcnJ1cHQgcmVnaXN0ZXJz IHdoZW4gYW4gZXJyb3IgaGFzIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcuCj4+IE5vdCB0cnVlLCBp biBjYXNlIG9mIGVycm9yIGluIGF0dXNiX3JlYWRfcmVnIGF0dXNiX3dyaXRlX3JlZyB3aWxsIGRv Cj4+IG5vdGhpbmcgYmVjYXVzZSBhdHVzYi0+ZXJyIGlzIHNldCAhCj4+IEFuZCB0aGlzIGlzIHN0 cm9uZyBwb2ludCBvZiB0aGUgaWRpb20gLSB5b3Ugd2lsbCBub3QgYmUgYWJsZSB0byBwZXJmb3Jt Cj4+IHRyYW5zZmVyIHVudGlsIHRoZSBlcnJvciBpcyBleHBsaWNpdGx5IGNsZWFyZWQuCj4gWWVz LCBJIHNlZSBub3cgdGhhdCB0aGVyZSdzIGFuIGFkZGl0aW9uYWwgY2hlY2sgYmVmb3JlIGZ1cnRo ZXIgYWNjZXNzZXMKPiBjYW4gYmUgbWFkZS4gU28gSSBoYXZlIHRvIGFwb2xvZ2l6ZSB0byB0aGUg YXV0aG9yIGFuZCBpdCB0dXJucyBvdXQgdGhhdAo+IHRoZSBjb2RlIGlzbid0IGNyYXp5LiBJIHN1 cHBvc2UgaXQncyBtZSB0aGF0J3MgdG9vIHN0dXBpZCB0byB1bmRlcnN0YW5kCj4gaG93IHRoaXMg d29ya3MuCj4KPiBJIHdvdWxkbid0IGhhdmUgYmVlbiBjb25mdXNlZCBpZiB0aGlzIHdhcyB1c2lu ZyBhIG1vcmUgaWRpb21hdGljIHdheSBvZgo+IGRvaW5nIHRoaW5ncy4gVGhlIG1lcmUgZmFjdCB0 aGF0IGNvZGUgd2lsbCByZWFkL21vZGlmeS93cml0ZSByZWdpc3RlcnMKPiB1bmNvbmRpdGlvbmFs bHkgc3VnZ2VzdHMgdGhhdCB0aGVyZSdzIG5vIGVycm9yIGNoZWNraW5nIGdvaW5nIG9uLiBFdmVu Cj4gaWYgdGhlIGNvZGUgZG9lc24ndCBhY3R1YWxseSBjb3JydXB0IHJlZ2lzdGVycywgaXQgZG9l cyBoYXZlIHRoZSBlZmZlY3QKPiBvZiBleGVjdXRpbmcgYSBidW5jaCBvZiBpbnN0cnVjdGlvbnMg Y29tcGxldGVseSB1bm5lY2Vzc2FyaWx5LgoKSWYgdGhlcmUgYXJlIHJlYWxseSB0aW1lIGNvbnN1 bWluZyB0YXNrcyB5b3UgY2FuIGFkZCBhbHdheXMgZXJyb3IgY2hlY2sKYmVmb3JlLCBhcyBJIHNo b3dlZCBiZWxvdy4gQW55d2F5IHRoaXMgaXMgZXJyb3IgcGF0aCBzbyB0aGUgZGVsYXkKYmVjYXVz ZSBvZiB0aGUgaWRpb20gd2lsbCBiZSB1c3VhbGx5IGluc2lnbmlmaWNhbnQgY29tcGFyaW5nIHRv IHRpbWUgb2YKaHcgZXJyb3IgaGFuZGxpbmcvcmVjb3ZlcnkvdGltZW91dHMgZXRjLgoKPgo+IFRv IGFkZCB0byB0aGUgY29uZnVzaW9uIHRoZXJlIGFyZSBvdGhlciBwYXJ0cyBpbiB0aGUgZHJpdmVy IHRoYXQgZG9uJ3QKPiBzZWVtIGNvbWZvcnRhYmxlIHVzaW5nIHRoZSBpZGlvbSBhbmQgeW91J2xs IGFjdHVhbGx5IHNlZSB0aGluZ3MgbGlrZToKPgo+IAlyZXQgPSBhdHVzYl93cml0ZV9zdWJyZWco Li4uKTsKPiAJaWYgKHJldCkKPiAJCXJldHVybiByZXQ7Cj4KPiBJZiB5b3UgYXNrIG1lLCB0aGF0 J3MgYm91bmQgdG8gbGVhZCB0byBtaXN0YWtlcyBhdCBzb21lIHBvaW50LgoKSSBhZ3JlZSBwcm9w YWdhdGluZyBlcnJvciBpbiB0d28gd2F5cyBjYW4gYmUgbWlzbGVhZGluZywgaG93ZXZlciBJIGd1 ZXNzCmluIHNvbWUgY2FzZXMgaXQgY2FuIGJlIGNvbnZlbmllbnQsIGFueXdheSB0aGlzIGlzIHNt YWxsIGRldGFpbC4KSSBndWVzcyBpdCBpcyBzdGlsbCBlYXNpZXIgdG8gZm9yZ290IGFib3V0IGVy cm9yIGhhbmRsaW5nIHdpdGggY2xhc3NpY2FsCmFwcHJvYWNoLCBoZXJlIHlvdSBhZGQgY2hlY2tz IG9ubHkgYmVmb3JlIGFjdGlvbnMgd2l0aCBzaWRlIGVmZmVjdHMsIGluCmNsYXNzaWNhbCBhcHBy b2FjaCB5b3UgYXJlIG9ibGlnZWQgdG8gcHV0IGNoZWNrcyBldmVyeXdoZXJlLCB0byBhY2hpZXZl CnRoZSBzYW1lIGdvYWwuCgo+Cj4+IFdpdGggdGhpcyBpZGlvbSBpdCBpcyBlbm91Z2ggdG8gcHV0 IGd1YXJkcyBvbmx5IGluIG9uZS90d28vZmV3IHBsYWNlcywKPj4gaW4gdHJhZGl0aW9uYWwgZXJy b3IgaGFuZGxpbmcgeW91IGp1c3QgbmVlZCB0byBwdXQgY2hlY2tzIGFmdGVyIGV2ZXJ5Cj4+IGZ1 bmN0aW9uIGNhbGwgYW5kIGl0IGlzIHF1aXRlIGNvbW1vbiBzaXR1YXRpb24gdGhhdCBkZXZlbG9w ZXJzIGZvcmdvdCB0bwo+PiBkbyB0aGF0LCBmb3IgZXhhbXBsZSBsb29rIGF0IG1pcGkgY2FsbHMg aGVyZSBbMV0gOikKPj4gWzFdOgo+PiBodHRwOi8vbHhyLmZyZWUtZWxlY3Ryb25zLmNvbS9zb3Vy Y2UvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHNpX3BhbmVsX3ZidC5jI0wxNjAKPj4KPj4g U28gdGhlIGZ1bmN0aW9uIGlzIGNvcnJlY3QsIGJ1dCB0byBhdm9pZCBmb29saW5nIHVuYXdhcmUg cmVhZGVycyBJIHdvdWxkCj4+IGFkZCBlcnJvciBjaGVja2luZyBhZnRlciByZWFkOgo+Pgo+PiAg ICAgb3JpZyA9IGF0dXNiX3JlYWRfcmVnKGF0dXNiLCByZWcpOwo+PiAgICAgaWYgKGF0dXNiLT5l cnIpCj4+ICAgICAgICAgcmV0dXJuIGVycjsKPiBCdXQgdGhlbiB3aGF0J3MgdGhlIHBvaW50IG9m IHN0b3JpbmcgdGhlIGVycm9yIHNvbWV3aGVyZSBpbiB0aGUgZmlyc3QKPiBwbGFjZT8KCkJlY2F1 c2UgeW91IGhhdmUgc3RpbGwgbXVsdGlwbGUgcGxhY2VzIHdoZXJlIHlvdSBkbyBub3QgbmVlZCB0 byBhZGQgY2hlY2tzLgpBbmQgcGxhY2luZyBjaGVjayBoZXJlIHdpbGwgc2F2ZSBmZXcgY3B1IGNs b2NrcywgYnV0IG9mIGNvdXJzZSB3aXRob3V0Cml0IHRoZSBjb2RlIGlzIHN0aWxsIGNvcnJlY3Qs IGl0IGlzIGp1c3QgbWF0dGVyIG9mIHRhc3RlIGFuZCBiYWxhbmNlCmJldHdlZW4gc2hvcnQgY29k ZSB2cyBxdWljayBlcnJvciBwYXRocy4KCgo+Cj4+Pj4gMi4gaHR0cDovL2x4ci5mcmVlLWVsZWN0 cm9ucy5jb20vc291cmNlL2RyaXZlcnMvbWQvZG0tdGhpbi5jP3Y9NC40I0w5MTcKPj4+IFRoaXMg aXMgY29tcGxldGVseSBkaWZmZXJlbnQgZnJvbSB0aGUgcGFuZWwgZHJpdmVyIGJlY2F1c2UgaXQn cyB1c2VkIHRvCj4+PiBzdG9yZSBhIHZhbHVlIGZyb20gd2l0aGluIGNhbGxiYWNrcyB0aGF0IGNh bid0IHJldHVybiBvbmUuCj4+IFRoaXMgaXMgaW50ZXJuYWwgZnJhbWV3b3JrIG9mIHRoZSBkcml2 ZXIsIHNvIG5vdGhpbmcgcHJldmVudHMgZGV2ZWxvcGVyCj4+IGZyb20gaW1wbGVtZW50aW5nIGNh bGxiYWNrcyB0aGF0IHJldHVybiB2YWx1ZS4KPj4gQXBwYXJlbnRseSBzdG9yaW5nIGVycm9yIGlu IHRoZSBvYmplY3Qoc3RydWN0IGRtX3RoaW5fbmV3X21hcHBpbmcpIGlzCj4+IGdvb2QgYW5kIGNv bnZlbmllbnQgIDopCj4gTm8sIEkgdGhpbmsgdGhpcyBjb21lcyBmcm9tIHRoZSBmYWN0IHRoYXQg dGhlIGRldmljZSBtYXBwZXIgYW5kIGJsb2NrCj4gSS9PIGZyYW1ld29ya3MgaGF2ZSBpbmZyYXN0 cnVjdHVyZSB0aGF0IGRvZXNuJ3QgYWxsb3cgdGhlIGVycm9yIGNvZGUgdG8KPiBiZSBkaXJlY3Rs eSBwcm9wYWdhdGVkIChzZWUgdGhlIGNvcHlfY29tcGxldGUoKSBhbmQgb3ZlcndyaXRlX2VuZGlv KCkKPiBjYWxsYmFja3MpLgo+Cj4+Pj4gMy4gaHR0cDovL2x4ci5mcmVlLWVsZWN0cm9ucy5jb20v c291cmNlL25ldC85cC90cmFuc19mZC5jP3Y9My4xOCNMMjk3Cj4+PiBFc3NlbnRpYWxseSB0aGUg c2FtZSB0aGluZy4KPj4gVGhlIHNhbWUgaGVyZS4KPiBZZXMsIHRoaXMgc2VlbXMgbGlrZSBpdCBj b3VsZCBlYXNpbHkgYmUgZG9uZSB1c2luZyBwcm9wYWdhdGVkIGVycm9yCj4gY29kZXMuCj4KPj4+ PiA0Lgo+Pj4+IGh0dHA6Ly9seHIuZnJlZS1lbGVjdHJvbnMuY29tL3NvdXJjZS9kcml2ZXJzL21l ZGlhL3Y0bDItY29yZS92NGwyLWN0cmxzLmMjTDIyMzQKPj4+IExvb2tzIGxpa2UgdGhpcyBjb3Vs ZCBiZSByZXBsYWNlZCBieSB0aGUgbW9yZSBpZGlvbWF0aWMgdXNlIG9mIEVSUl9QVFIoKQo+Pj4g ZW5jb2RpbmcgZXJyb3IgY29kZXMuIEJ1dCB0aGUgbW9zdCBzaWduaWZpY2FudCBkaWZmZXJlbmNl IGhlcmUgaXMgdGhhdAo+Pj4gZWFjaCB1c2Ugb2YgdGhlIGhhbmRsZXJfc2V0X2VycigpIGZ1bmN0 aW9uIGlzIGZvbGxvd2VkIGJ5IGEgcmV0dXJuLiBTbwo+Pj4gaW5zdGVhZCBvZiBpZ25vcmluZyBl cnJvcnMgbGlrZSB5b3UgZG8gaW4gdGhlIHBhbmVsIGRyaXZlcnMsIHRoaXMgZG9lcwo+Pj4gcmVj b2duaXplIHRoZW0gYW5kIGFib3J0cyBlYXJseSwgcmF0aGVyIHRoYW4gdHJ5aW5nIHRvIGdvIHRo cm91Z2ggdGhlCj4+PiByZW1haW5kZXIgb2YgdGhlIGNvZGUsIGlycmVzcGVjdGl2ZSBvZiBob3cg c21hbGwgdGhlIGNoYW5jZXMgYXJlIG9mIGl0Cj4+PiBzdWNjZWVkaW5nLiBPciBpZ25vcmluZyB0 aGF0IC9ldmVuIGlmLyB0aGUgcmVtYWluZGVyIGRpZG4ndCBmYWlsLCB0aGUKPj4+IG9uZSBvcGVy YXRpb24gdGhhdCBmYWlsIG1pZ2h0IGhhdmUgYmVlbiBlc3NlbnRpYWwgdG8gdGhlIG9wZXJhdGlv biBvZgo+Pj4gdGhlIGRldmljZS4KPj4gSSBoYXZlIGFuIGltcHJlc3Npb24gdGhhdCB5b3UgZG8g bm90IHVuZGVyc3RhbmQgdGhlIGlkaW9tLiBJdCBkb2VzIG5vdAo+PiBhbGxvdyB0byBpZ25vcmUg ZXJyb3IgLSBhcyBzb29uIGFzIHRoZSBlcnJvciBpcyBkZXRlY3RlZCwgZ3VhcmQgaXMgc2V0Cj4+ IGFuZCBubyBmdXJ0aGVyIGhhcm0gY2FuIGJlIGRvbmUuCj4+IEdvaW5nIGJhY2sgdG8gVjRMMiwg bG9vayBhdCB0aGUgdXNhZ2Ugb2YgdGhlIGlkaW9tIFsyXToKPj4gICAgICAgICAgICAgICAgICB2 NGwyX2N0cmxfYWRkX2hhbmRsZXIoaGRsX3ZpZF9jYXAsIGhkbF91c2VyX2dlbiwgTlVMTCk7Cj4+ ICAgICAgICAgICAgICAgICAgdjRsMl9jdHJsX2FkZF9oYW5kbGVyKGhkbF92aWRfY2FwLCBoZGxf dXNlcl92aWQsIE5VTEwpOwo+PiAgICAgICAgICAgICAgICAgIHY0bDJfY3RybF9hZGRfaGFuZGxl cihoZGxfdmlkX2NhcCwgaGRsX3VzZXJfYXVkLCBOVUxMKTsKPj4gICAgICAgICAgICAgICAgICB2 NGwyX2N0cmxfYWRkX2hhbmRsZXIoaGRsX3ZpZF9jYXAsIGhkbF9zdHJlYW1pbmcsIE5VTEwpOwo+ PiAgICAgICAgICAgICAgICAgIHY0bDJfY3RybF9hZGRfaGFuZGxlcihoZGxfdmlkX2NhcCwgaGRs X3NkdHZfY2FwLCBOVUxMKTsKPj4gICAgICAgICAgICAgICAgICB2NGwyX2N0cmxfYWRkX2hhbmRs ZXIoaGRsX3ZpZF9jYXAsIGhkbF9sb29wX2NhcCwgTlVMTCk7Cj4+ICAgICAgICAgICAgICAgICAg aWYgKGhkbF92aWRfY2FwLT5lcnJvcikKPj4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biBoZGxfdmlkX2NhcC0+ZXJyb3I7Cj4+Cj4+IEFnYWluLCB0aGUgcG9pbnQgaXMgeW91IGRvIG5v dCBuZWVkIHRvIHVzZSBvbGQgY29uc3RydWN0LCB3aGljaCBlbmxhcmdlcwo+PiB0aGUgY29kZSBh Ym91dCB0aHJlZSB0aW1lczoKPj4gICAgIGVyciA9IGZ1bmMob2JqLC4uLik7Cj4+ICAgICBpZiAo ZXJyIDwgMCkKPj4gICAgICAgICByZXR1cm4gZXJyOwo+Pgo+PiBJbnN0ZWFkIHlvdSBqdXN0IGNh bGwgZnVuYyhvYmosLi4uKSwgYW5kIHRoZSBidXJkZW4gb2YgZXJyb3IgY2hlY2tpbmcgaXMKPj4g cHV0IGludG8gdGhlIGZ1bmN0aW9uLCBidXQgZm9yIHRoaXMgZXJyIG11c3QgYmUgc3RvcmVkIGlu IG9iamVjdC4KPj4KPj4gWzJdOgo+PiBodHRwOi8vbHhyLmZyZWUtZWxlY3Ryb25zLmNvbS9zb3Vy Y2UvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92aXZpZC92aXZpZC1jdHJscy5jI0wxNjMwCj4gVGhl cmUgYXJlIGEgY291cGxlIG9mIHBpdGZhbGxzIGhlcmU6IGZvciBleGFtcGxlIHdoYXQgZG8geW91 IGRvIGlmIHRoZQo+IGZpcnN0IHR3byBjYWxscyBmYWlsLCBidXQgdGhlIHRoaXJkIHN1Y2NlZWRz LiAKCk5vIHdheSwgYXQgdGhlIGJlZ2lubmluZyBvZiB2NGwyX2N0cmxfYWRkX2hhbmRsZXIgdGhl cmUgaXMgY2hlY2s6CgogICAgICAgICBpZiAoaGRsLT5lcnJvciA8aHR0cDovL2x4ci5mcmVlLWVs ZWN0cm9ucy5jb20vaWRlbnQ/aT1lcnJvcj4pCiAgICAgICAgICAgICAgICAgcmV0dXJuIGhkbC0+ ZXJyb3IgPGh0dHA6Ly9seHIuZnJlZS1lbGVjdHJvbnMuY29tL2lkZW50P2k9ZXJyb3I+OwoKSW4g ZmFjdCB0aGlzIGNoZWNrIGlzIGFsc28gaW4gb3RoZXIgZnVuY3Rpb25zOiBoYW5kbGVyX25ld19y ZWYsCnY0bDJfY3RybF9uZXcsIGhhbmRsZXJfbmV3X3JlZi4KV2l0aCB0aGlzIGNoZWNrIGFmdGVy IGZpcnN0IGVycm9yIG5vIGZ1cnRoZXIgY29kZSBpcyBleGVjdXRlZC4KCj4gVGhlIGVuZCByZXN1 bHQgd2lsbCBiZQo+IHRoYXQgdGhlIHdob2xlIG9wZXJhdGlvbiBmYWlscy4gV2hhdCBkbyB5b3Ug ZG8gaWYgb25lIG9mIHRoZSBvcGVyYXRpb25zCj4gaGFzIHNpZGUtZWZmZWN0cyB0aGF0IHlvdSBu ZWVkIHRvIHVuZG8/IElmIHlvdSBkb24ndCBrbm93IHdoaWNoIG9uZSBpdAo+IHdhcywgaG93IHdp bGwgeW91IGtub3c/CgpZb3UgY2FuIGFsd2F5cyBhZGQgZXhwbGljaXQgY2hlY2sgYWZ0ZXIgdGhl IG9wZXJhdGlvbiB3aGljaCByZXF1aXJlcwpzcGVjaWFsIGhhbmRsaW5nLCBsaWtlIGluIHRyYWRp dGlvbmFsIGFwcHJvYWNoLiBUaGUgcG9pbnQgaXMgeW91IGRvIG5vdApuZWVkIHRvIGFkZCBjaGVj a3Mgd2hpY2gganVzdCBwcm9wYWdhdGUgdGhlIGVycm9yOiAiaWYgKGVyciA8IDApIHJldHVybgpl cnI7Ii4KClRoZSBsYXN0IHNlbnRlbmNlIGNsZWFybHkgc3VnZ2VzdHMgd2hlcmUgdGhlIGlkaW9t IGlzIG1vc3Qgc3VpdGFibGUgLQp0aGUgb2JqZWN0IG9uIHdoaWNoIHlvdSBzaG91bGQgcGVyZm9y bSBidW5jaCBvZiBvcGVyYXRpb25zIGFuZCB5b3UgYXJlCm1haW5seSBpbnRlcmVzdGVkIGlmIGFs bCBvcGVyYXRpb25zIHN1Y2NlZWRlZC4gVGhpcyBpcyBmb3IgZXhhbXBsZQpjcmVhdGlvbiBvZiBW NEwyIGNvbnRyb2wgaGFuZGxlciAtIHdlIGFyZSBub3QgaW50ZXJlc3RlZCBpbiBoYW5kbGVyIHdp dGgKc29tZSBjb250cm9scyBicm9rZW4sIHdlIHdhbnQgZnVsbHkgd29ya2luZyBoYW5kbGVyIHdp dGggYWxsIGNvbnRyb2xzIG9yCm5vdGhpbmcuIEFub3RoZXIgZXhhbXBsZSBhcmUgZGV2aWNlcyBh dHRhY2hlZCB0byBzb21lIGJ1cyB3aGljaCBjYW4KZmFpbCwgaWYgd2UgaW5pdGlhbGl6ZSBpdCB3 ZSB3YW50IHRvIHBlcmZvcm0gYnVuY2ggb2Ygd3JpdGVzLCBpZiBhbnkgb2YKd3JpdGUgZmFpbHMg d2hvbGUgaW5pdGlhbGl6YXRpb24gZmFpbHMgYWxzby4KCj4KPiBBbmQgeWVzLCB0aGlzIGRvZXMg YWxsb3cgeW91IHRvIGlnbm9yZSBlcnJvcnMuIFRoZSBmdW5jdGlvbiBjYWxscyBiZWZvcmUKPiB0 aGUgYWN0dWFsIGVycm9yIGhhbmRsaW5nIHdpbGwgYmUgZXhlY3V0ZWQgcmVnYXJkbGVzcyBvZiBl cnJvcnMgdGhhdCBhcmUKPiBzdG9yZWQuIFdoaWxlIGluIG1hbnkgY2FzZXMgdGhlIGNvZGUgc2Vl bXMgdG8gY29ycmVjdGx5IHNob3J0Y3V0IGlmIHRoZQo+IGd1YXJkIGlzIHNldCwgaXQgYWxzbyBl bmNvZGVzIG1hbnkgYXNzdW1wdGlvbnMsIG5vdCBhbGwgb2Ygd2hpY2ggbWF5IGJlCj4gdW5kZXJz dG9vZCBieSBtb3JvbnMgbGlrZSBtZS4KPgo+IFRoZSBlbmQgcmVzdWx0IGlzIHRoYXQgdGhlIGNv ZGUgYmVjb21lcyBtb3JlIHZ1bG5lcmFibGUgdG8gYWNjaWRlbnRhbAo+IG1pc3Rha2VzLiBUaGVz ZSB3aWxsIGJlIGhhcmQgdG8gc3BvdCBkdXJpbmcgcmV2aWV3LiBLZWVwaW5nIGNvZGUgbGluZWFy Cj4gYW5kIHNpbXBsZSBtYWtlcyBpdCBtdWNoIG1vcmUgZGlmZmljdWx0IHRvIGludHJvZHVjZSBi dWdzLgoKVGhpcyBpcyB2ZXJ5IGRpc3B1dGFibGUsIGVycm9yIHBhdGhzIGFyZSB0aGUgbW9zdCBl cnJvciBwcm9uZSBwaWVjZXMgb2YKY29kZSA6KSBUaGVyZSBhcmUgbWFueSBwbGFjZXMgd2hlcmUg dGhlc2UgZXJyb3JzIGFyZSBub3QgcHJvcGFnYXRlZCwgb3IKYXJlIHByb3BhZ2F0ZWQgaW5jb3Jy ZWN0bHksIEkgc3VwcG9zZSBpdCBpcyBtYWlubHkgZHVlIHRvIGZhY3QgaXQgc2hvdWxkCmJlIHB1 dCBldmVyeXdoZXJlLgoKPgo+Pj4+IDUuIGh0dHA6Ly9seHIuZnJlZS1lbGVjdHJvbnMuY29tL3Nv dXJjZS9kcml2ZXJzL21lZGlhL2kyYy9zNWs1YmFmLmMjTDQ1MQo+Pj4gVGhhdCdzIGEgcGFydGlj dWxhcmx5IGdvb2QgZXhhbXBsZSBvZiB3aHkgeW91IHNob3VsZG4ndCBiZSBkb2luZyB0aGlzCj4+ PiBraW5kIG9mIHRoaW5nLiBDb25zaWRlciB3aGF0IHdvdWxkIGhhcHBlbiBpbiB0aGVzZSBjYXNl cyBpZiBmb3IgZXhhbXBsZQo+Pj4gdGhlcmUgd2FzIGEgcHJvYmxlbSB3aXRoIHRoZSBJMkMgaW50 ZXJmYWNlLiBUaGVyZSdzIGEgYnVuY2ggb2YgcmVhZCBhbmQKPj4+IHdyaXRlIHNlcXVlbmNlcyBp biB0aGF0IGRyaXZlciB0aGF0IGdvIGNvbXBsZXRlbHkgd2l0aG91dCBjaGVja2luZyBmb3IKPj4+ IGVycm9ycy4gCj4+IE5vdCB0cnVlLCBubyBmdXJ0aGVyIHRyYW5zZmVyIHdpbGwgYmUgcGVyZm9y bWVkLgo+IEluZGVlZC4gQ2xlYXJseSBJIHdhc24ndCBsb29raW5nIGNsb3NlbHkgZW5vdWdoLiBI b3cgYWJvdXQga25vd2luZwo+IHdoZXRoZXIgb3Igbm90IHJlYWRzIG9yIHdyaXRlcyBzdWNjZWVk PyBUbyBkbyBzbyB5b3Ugd291bGQgaGF2ZSB0bwo+IGV4cGxpY2l0bHkgY2hlY2sgdGhlIGVycm9y IGNvZGUgYWdhaW4uCgpJZiB5b3UgbmVlZCB0aGlzIGluZm9ybWF0aW9uIHlvdSBjYW4gY2hlY2ss IGlmIGRvbid0IHlvdSBkb24ndCA6KQoKPgo+Pj4gSW1hZ2luZSBob3cgdGhhdCB3aWxsIGxvb2sg dG8gYSB1c2VyIHdoZW4gdGhlIGNvbW11bmljYXRpb24gdG8gYQo+Pj4gY2hpcCBkb2Vzbid0IHdv cmsuIFRoZXknbGwgZ2V0IGEgbG9hZCBvZiBlcnJvciBtZXNzYWdlcyBhbGwgc2F5aW5nIHRoYXQK Pj4+IGNvbW11bmljYXRpb24gdGltZWQgb3V0LCBvciB0aGF0IHRoZSBzbGF2ZSBpc24ndCByZXNw b25kaW5nIG9yIHdoYXQgbm90Lgo+Pj4gQW5kIHdvcnNlIHN0aWxsLCBmb3IgdGltZW91dHMgeW91 J3JlIGFsc28gZ29pbmcgdG8gaW50cm9kdWNlIGEgYnVuY2ggb2YKPj4+IGVycm9yIG1lc3NhZ2Vz IGludGVybGVhdmVkIHdpdGggcG90ZW50aWFsbHkgb3RoZXIgdXNlZnVsIG1lc3NhZ2VzIGZyb20K Pj4+IG90aGVyIGRyaXZlcnMgb3IgdGhlIGNvcmUuIERlcGVuZGluZyBvbiB0aGUgbnVtYmVyIG9m IGFjY2VzcyB5b3UgaGF2ZSBpdAo+Pj4gbWlnaHQgdGFrZSBzZWNvbmRzIGZvciBhbGwgb2YgdGhl IGVycm9yIG1lc3NhZ2VzIHRvIGRyYWluIGJlZm9yZSB5b3UKPj4+IG5vdGljZSBzb21ld2hlcmUg YXQgdGhlIGVuZCBvZiB0aGUgY29kZSB0aGF0IHNvbWV0aGluZyB3ZW50IHdyb25nIGFuZAo+Pj4g ZGVjaWRlIHRvIGFib3J0IHdoYXRldmVyIHlvdSB3ZXJlIHRyeWluZyB0byBkby4KPj4gQWdhaW4s IG5vdCB0cnVlIGF0IGFsbC4KPiBTbyBhZnRlciBsb29raW5nIGF0IHRoaXMgaXMgbW9yZSBkZXRh aWwsIEknbGwgZ3JhbnQgeW91IHRoYXQgaXQgZ2l2ZXMKPiB5b3UgYSB3YXkgdG8gYXZvaWQgY2hl Y2tpbmcgZm9yIGVycm9ycyBhdCBldmVyeSBzdGVwIG9mIHRoZSB3YXkuIFRoZXJlCj4gaXMgYSBk aXNhZHZhbnRhZ2UgYmVjYXVzZSB5b3Uga2VlcCBleGVjdXRpbmcgYSBsb3Qgb2YgY29kZQo+IHVu bmVjZXNzYXJpbHksIGFuZCB5b3UgbWFrZSB0aGUgY29kZSBzdXNjZXB0aWJsZSB0byBtaXN0YWtl cyBiZWNhdXNlCj4gaXQgY29udGFpbnMgYSBub24tb2J2aW91cyBhc3N1bXB0aW9uIHRoYXQgY29u dHJpYnV0b3JzIHRvIHlvdXIgY29kZSBtYXkKPiBub3QgYmUgYXdhcmUgb2YuCj4KPj4+PiAgICAg VGhpcyBpcyBteSBkcml2ZXIsIEkgbWVudGlvbiBpdCBoZXJlIGp1c3QgdG8gc2hvdyBpdCB3YXMg bm90IGEKPj4+PiBwcm9ibGVtIHRvIG1lcmdlIGl0IHRvIG1lZGlhIHN1YnN5c3RlbS4KPj4+IFRo YXQganVzdCBzaG93cyB3aGF0IGV2ZXJ5Ym9keSBrbm93czogdGhhdCBtYWludGFpbmVycyBjYXJl IGFib3V0Cj4+PiBkaWZmZXJlbnQgdGhpbmdzIGF0IGRpZmZlcmVudCBsZXZlbHMuCj4+Pgo+Pj4+ IFNpbWlsYXIgcGF0dGVybnM6Cj4+Pj4KPj4+PiA2LiBodHRwOi8vbHhyLmZyZWUtZWxlY3Ryb25z LmNvbS9zb3VyY2UvZnMvc2VxX2ZpbGUuYyNMMzk4Cj4+Pj4gICAgIERvIG5vdCBwcm9jZXNzIG9i amVjdCBpZiBidWZmZXIgaXMgZnVsbCwgaXQgYWxsb3dzIHRvIGRvIG5vdCBjaGVjawo+Pj4+IGJ1 ZmZlciBzaXplIGFmdGVyIGV2ZXJ5IHdyaXRlLCBmb3IgZXhhbXBsZToKPj4+Pj4gICAgIHNlcV9w cmludGYobSwgIiBoYXJkaXJxLXNhZmUgbG9ja3M6ICAgICAgICAgICAgJTExbHVcbiIsCj4+Pj4+ ICAgICAgICAgICAgIG5yX2hhcmRpcnFfc2FmZSk7Cj4+Pj4+ICAgICBzZXFfcHJpbnRmKG0sICIg aGFyZGlycS11bnNhZmUgbG9ja3M6ICAgICAgICAgICUxMWx1XG4iLAo+Pj4+PiAgICAgICAgICAg ICBucl9oYXJkaXJxX3Vuc2FmZSk7Cj4+Pj4+ICAgICBzZXFfcHJpbnRmKG0sICIgc29mdGlycS1z YWZlIGxvY2tzOiAgICAgICAgICAgICUxMWx1XG4iLAo+Pj4+PiAgICAgICAgICAgICBucl9zb2Z0 aXJxX3NhZmUpOwo+Pj4+PiAgICAgc2VxX3ByaW50ZihtLCAiIHNvZnRpcnEtdW5zYWZlIGxvY2tz OiAgICAgICAgICAlMTFsdVxuIiwKPj4+Pj4gICAgICAgICAgICAgbnJfc29mdGlycV91bnNhZmUp Owo+Pj4+PiAgICAgc2VxX3ByaW50ZihtLCAiIGlycS1zYWZlIGxvY2tzOiAgICAgICAgICAgICAg ICAlMTFsdVxuIiwKPj4+Pj4gICAgICAgICAgICAgbnJfaXJxX3NhZmUpOwo+Pj4+PiAgICAgc2Vx X3ByaW50ZihtLCAiIGlycS11bnNhZmUgbG9ja3M6ICAgICAgICAgICAgICAlMTFsdVxuIiwKPj4+ Pj4gICAgICAgICAgICAgbnJfaXJxX3Vuc2FmZSk7Cj4+Pj4+Cj4+Pj4+ICAgICBzZXFfcHJpbnRm KG0sICIgaGFyZGlycS1yZWFkLXNhZmUgbG9ja3M6ICAgICAgICUxMWx1XG4iLAo+Pj4+PiAgICAg ICAgICAgICBucl9oYXJkaXJxX3JlYWRfc2FmZSk7Cj4+Pj4+ICAgICBzZXFfcHJpbnRmKG0sICIg aGFyZGlycS1yZWFkLXVuc2FmZSBsb2NrczogICAgICUxMWx1XG4iLAo+Pj4+PiAgICAgICAgICAg ICBucl9oYXJkaXJxX3JlYWRfdW5zYWZlKTsKPj4+Pj4gICAgIHNlcV9wcmludGYobSwgIiBzb2Z0 aXJxLXJlYWQtc2FmZSBsb2NrczogICAgICAgJTExbHVcbiIsCj4+Pj4+ICAgICAgICAgICAgIG5y X3NvZnRpcnFfcmVhZF9zYWZlKTsKPj4+Pj4gICAgIHNlcV9wcmludGYobSwgIiBzb2Z0aXJxLXJl YWQtdW5zYWZlIGxvY2tzOiAgICAgJTExbHVcbiIsCj4+Pj4+ICAgICAgICAgICAgIG5yX3NvZnRp cnFfcmVhZF91bnNhZmUpOwo+Pj4+PiAgICAgc2VxX3ByaW50ZihtLCAiIGlycS1yZWFkLXNhZmUg bG9ja3M6ICAgICAgICAgICAlMTFsdVxuIiwKPj4+Pj4gICAgICAgICAgICAgbnJfaXJxX3JlYWRf c2FmZSk7Cj4+Pj4+ICAgICBzZXFfcHJpbnRmKG0sICIgaXJxLXJlYWQtdW5zYWZlIGxvY2tzOiAg ICAgICAgICUxMWx1XG4iLAo+Pj4+PiAgICAgICAgICAgICBucl9pcnFfcmVhZF91bnNhZmUpOwo+ Pj4+Pgo+Pj4+PiAgICAgc2VxX3ByaW50ZihtLCAiIHVuY2F0ZWdvcml6ZWQgbG9ja3M6ICAgICAg ICAgICAlMTFsdVxuIiwKPj4+Pj4gICAgICAgICAgICAgbnJfdW5jYXRlZ29yaXplZCk7Cj4+Pj4+ ICAgICBzZXFfcHJpbnRmKG0sICIgdW51c2VkIGxvY2tzOiAgICAgICAgICAgICAgICAgICUxMWx1 XG4iLAo+Pj4+PiAgICAgICAgICAgICBucl91bnVzZWQpOwo+Pj4+PiAgICAgc2VxX3ByaW50Ziht LCAiIG1heCBsb2NraW5nIGRlcHRoOiAgICAgICAgICAgICAlMTF1XG4iLAo+Pj4+PiAgICAgICAg ICAgICBtYXhfbG9ja2RlcF9kZXB0aCk7Cj4+Pj4gTm93IHRyeSB0byBpbWFnaW5lIGhvdyBpdCB3 b3VsZCBsb29rIGxpa2UgaWYgeW91IGFkZCBlcnJvciBjaGVja2luZwo+Pj4+IGFmdGVyIGVhY2gg Y2FsbC4KPj4+IEkgdGhpbmsgdGhhdCdzIGEgZmFpcmx5IHNhbmUgdXNlLWNhc2UgZm9yIHRoaXMg a2luZCBvZiBwYXR0ZXJuLiBUaGUgYmlnCj4+PiBkaWZmZXJlbmNlIGlzIHRoYXQgdGhpcyBjb25k aXRpb24gaXMgY2hlY2tlZCBpbiBzdWJzZXF1ZW50IGFjY2Vzc2VzIHRvCj4+PiBzaG9ydGN1dCBm YWlsdXJlIHBhdGhzLiBJdCdzIGFsc28gdmVyeSBkaWZmZXJlbnQgaW4gdGhhdCBpdCBwZXJmb3Jt cwo+Pj4gd3JpdGVzIHRvIG1lbW9yeSBhbmQgdGhvc2UgYXJlbid0IGdvaW5nIHRvIGZhaWwuIFRo ZSByb290IGNhdXNlIG9mIHRoaXMKPj4+IG92ZXJmbG93IHdvdWxkIGJlIHN0YXRpYyBpbiBuYXR1 cmUgYW5kIGxpa2VseSBmb3VuZCBkb2luZyBiYXNpYyB0ZXN0aW5nCj4+PiBhbmQgZml4ZWQgYnkg bWFraW5nIHRoZSBidWZmZXIgbGFyZ2VyLgo+Pj4KPj4+IFRoYXQncyBjb250cmFyeSB0byBhIGRy aXZlciBkb2luZyBJL08gKEkyQywgU1BJLCBEU0ksIC4uLikgdGhhdCBjYW4gZmFpbAo+Pj4gdW5l eHBlY3RlZGx5IGZvciBhbnkgbnVtYmVyIG9mIHJlYXNvbnMuCj4+IFRoZSBpZGlvbSBpcyBzdGls bCB0aGUgc2FtZSAtIHN0b3JpbmcgZXJyb3Igc3RhdGUgaW4gdGhlIG9iamVjdCBhbGxvd3MKPj4g dG8gbW92ZSBlcnJvciBjaGVja2luZyBpbnNpZGUgY2FsbGVkIGZ1bmN0aW9ucywgcmVtb3Zpbmcg bXVjaCBvZgo+PiByZWR1bmRhbnQgY29kZSBmcm9tIGNhbGxlci4KPiBZZXMsIHRoZSBpZGlvbSBp cyB0aGUgc2FtZSwgYnV0IHRoZSB1c2UtY2FzZSBpcyBhbHNvIGNvbXBsZXRlbHkKPiBkaWZmZXJl bnQsIHNvIEkgZG9uJ3QgdGhpbmsgeW91IGNhbiBhcHBseSB0aGUgc2FtZSBydWxlcy4gSWYgeW91 J3ZlIGdvdAo+IGNvbW11bmljYXRpb24gd2l0aCBhbiBleHRlcm5hbCBwZXJpcGhlcmFsLCBsaWtl IGluIHRoZSBjYXNlIG9mIFNQSSwgSTJDCj4gb3IgRFNJLCBJIHRoaW5rIHRoZSBiZXN0IHRoaW5n IHRvIGRvIGlzIGFib3J0IGFzIGVhcmx5IGFzIHBvc3NpYmxlIG9uCj4gZmFpbHVyZS4gVGhlIG1v c3QgbGlrZWx5IHJlYXNvbiBmb3IgZmFpbHVyZSB3b3VsZCBiZSBhIHBlcnNpc3RlbnQgY2F1c2UK PiBvbiB0aGUgYnVzLCBpbiB3aGljaCBjYXNlIG5vbmUgb2YgeW91ciBhY2Nlc3NlcyB3aWxsIHN1 Y2NlZWQuIElmIHNvIEkKPiB0aGluayBpdCBtYWtlcyBzZW5zZSB0byBsZXQgdGhlIHVzZXIga25v dyB3aGF0IGV4YWN0bHkgd2VudCB3cm9uZyBhbmQKPiBsZWF2ZSBpdCBhdCB0aGF0LiBDb250aW51 aW5nIHRvIGV4ZWN1dGUgY29kZSwgZXZlbiBpZiBubyBwaHlzaWNhbCBhY2Nlc3MKPiB0byB0aGUg aGFyZHdhcmUgaGFwcGVucyBhbnltb3JlLCBpcyBhIHdhc3RlIG9mIHRpbWUuCj4KPiBGYWlsdXJl cyBvbiBzdWNoIGJ1c3NlcyBjYW4gaGFwcGVuIGZvciBhbnkgbnVtYmVyIG9mIHJlYXNvbnMsIGFu ZCB0aGV5Cj4gY2FuIGhhcHBlbiBzcG9yYWRpY2FsbHksIHNvIGl0J3MgaW1wb3J0YW50IHRvIGNh dGNoIGVycm9ycy4gRm9yIHNlcV9idWYKPiBpbiBwYXJ0aWN1bGFyIHlvdSBoYXZlIGEgc3RhdGlj IGZhaWx1cmUgY2FzZSwgd2hpY2ggaXMgaWYgc29tZWJvZHkgd2VyZQo+IHRyeWluZyB0byBhZGQg bW9yZSBjaGFyYWN0ZXJzIHRvIHRoZSBidWZmZXIgdGhhbiB3b3VsZCBmaXQuIEJ1dCBjYWxsZXJz Cj4gd2lsbCwgbW9zdCBvZiB0aGUgdGltZSwgcHV0IGV4YWN0bHkgdGhlIHNhbWUgbnVtYmVyIG9m IGNoYXJhY3RlcnMgaW50bwo+IHRoYXQgYnVmZmVyLiBTbyBpZiB0aGVyZSB3YXMgYSBmYWlsdXJl IG9uY2UgdGhleSdkIG5vdGljZSBxdWlja2x5IGFuZAo+IHRoZSBpc3N1ZSB3b3VsZCBnZXQgZml4 ZWQsIGF0IHdoaWNoIHBvaW50IGl0IGJlY29tZXMgdmVyeSB1bmxpa2VseSB0bwo+IGV2ZXIgaGFw cGVuIGFnYWluLgo+Cj4gU28gc2VxX2J1ZiBpcyBub3QgZXhwZWN0ZWQgdG8gZmFpbCwgd2hlcmVh cyB3aXRoIHBlcmlwaGVyYWwgYnVzc2VzIHlvdQo+IGNhbid0IG1ha2UgdGhhdCBhc3N1bXB0aW9u LgoKVGhlIGVycm9yIGlzIGxvZ2dlZCBhcyBzb29uIGFzIGl0IGhhcHBlbnMsIHlvdSBjYW4gZWFz aWx5IGNoZWNrIHRoYXQKZXZlcnkgdGltZSBlcnJvciBpcyBzZXQsIGl0IGlzIGFsc28gbG9nZ2Vk LgpUaGlzIGlzIGFub3RoZXIgYWR2YW50YWdlIG9mIHRoZSBpZGlvbSAtIHlvdSBkbyBub3QgbmVl ZCB0byBhbmFseXplLCBpZgp0aGUgZXJyb3Igc29tZSBmdW5jdGlvbiBoYXMgcmV0dXJuZWQgd2Fz IGxvZ2dlZCBhbHJlYWR5LCBvciB5b3Ugc2hvdWxkCmRvIGl0IGluIHRoZSBjYWxsZXIuCldpdGgg dGhlIGlkaW9tIHlvdSBjYW4gbG9nIGVycm9yIGluIGV2ZXJ5IHBsYWNlIHRoZSBlcnJvciBpcyBz ZXQsIHRvIGJlCnN1cmUgdGhhdCBpdCB3aWxsIG5vdCBiZSBzaWxlbnRseSBvbWl0dGVkLCBvZiBj b3Vyc2Ugc29tZXRpbWVzIHlvdSBjYW4Kd2FudCB0byBsb2cgaW4gd2lkZXIgY29udGV4dCwgdGhl IGlkaW9tIG9mIGNvdXJzZSBhbGxvd3MgaXQuCgo+Cj4+Pj4gNy4gaHR0cDovL2x4ci5mcmVlLWVs ZWN0cm9ucy5jb20vc291cmNlL2xpYi9kZXZyZXMuYyNMMTI5Cj4+Pj4gICAgIFBvc3Rwb25lZCBl cnJvciBjaGVjazoKPj4+Pj4gKi9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9S RVNPVVJDRV9NRU0sIDApOy8qCj4+Pj4+IC8qYiovKi9hc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3Vy Y2UoJnBkZXYtPmRldiwgcmVzKTsvKgo+Pj4+PiAqL2lmIChJU19FUlIoYmFzZSkpLyoKPj4+Pj4g LyoqLyovcmV0dXJuIFBUUl9FUlIoYmFzZSk7LyoKPj4+IEhlaCwgSSB3cm90ZSB0aGF0ID0pCj4+ Pgo+Pj4gVGhpcyBpcyBhbHNvIHF1aXRlIGRpZmZlcmVudCBmcm9tIHlvdXIgdXNhZ2UgaW4gdGhl IHBhbmVsIGRyaXZlci4gV2UgZG8KPj4+IG5vdCBzaW1wbHkgaWdub3JlIGZhaWx1cmUgZnJvbSBw bGF0Zm9ybV9nZXRfcmVzb3VyY2UoKSwgaW5zdGVhZCB3ZSBsZWF2ZQo+Pj4gaXQgdXAgdG8gZGV2 bV9pb3JlbWFwX3Jlc291cmNlKCkgdG8gdHVybiBpdCBpbnRvIGEgbWVhbmluZ2Z1bCBlcnJvciBj b2RlCj4+PiBhbmQgbWVzc2FnZS4gVGhlIGZ1bmN0aW9uIGRvZXMgdGhpcyB2ZXJ5IGVhcmx5IG9u LCBzbyB0aGUgZXJyb3IKPj4+IGNvbmRpdGlvbiBpcyBub3QgaWdub3JlZCwgYXMgaXQgaXMgaW4g dGhlIHBhbmVsIGRyaXZlci4KPj4gQ2xhaW1zIGFib3V0IHRoZSBwYW5lbCBhZ2FpbiBub3QgdHJ1 ZSwgcmVhc29ucyBkZXNjcmliZWQgYWJvdmUuCj4+Cj4+IFRoZSBzaW1pbGFyaXR5IGhlcmUgaXMg dGhhdCB5b3UgZG8gbm90IHBlcmZvcm0gZXJyb3IgY2hlY2tpbmcgaW4gdGhlCj4+IGNhbGxlciwg eW91IGp1c3QgYmxpbmRseSBwYXNzIHRoZSAnb2JqZWN0JyB0byB0aGUgbmV4dCBmdW5jdGlvbiwg YW5kCj4+IHN0aWxsIGV2ZXJ5dGhpbmcgaXMgaGFuZGxlZCBjb3JyZWN0bHkuCj4gQnV0IHdlJ3Jl IG5vdCBwYXNzaW5nIGFueSBvYmplY3QgdG8gdGhlIG5leHQgZnVuY3Rpb24uIFdlJ3JlIHBhc3Np bmcgdGhlCj4gcmV0dXJuIHZhbHVlIGZyb20gYW4gZWFybGllciBjYWxsLCBvbmUgbGluZSBhYm92 ZS4gV2UncmUgbm90IGhpZGluZyBhbgo+IGVycm9yIGNvZGUgaW4gc29tZSBkcml2ZXItc3BlY2lm aWMgc3RydWN0dXJlLiBTbyB0aGUgY29kZSBpcyBjb21wbGV0ZWx5Cj4gZXhwbGljaXQuCj4KPiBN YXliZSBJIHNob3VsZCBzYXkgYSBmZXcgd29yZHMgYWJvdXQgd2h5IHRoaXMgaXMgaW1wb3J0YW50 IHRvIG1lIGJlY2F1c2UKPiB5b3UgbWF5IHRoaW5rIHRoaXMgdG8gYmUgc29tZXdoYXQgcGVkYW50 aWMuIFRoaXMgaXMgZnVuZGFtZW50YWxseSBjYXVzZWQKPiBieSB0aGUgZmFjdCB0aGF0IG9uY2Ug SSBtZXJnZSBjb2RlIGludG8gYSB0cmVlIHRoYXQgSSBtYWludGFpbiwgdGhlbiB0aGUKPiByZXNw b25zaWJpbGl0eSBmb3IgdGhhdCBjb2RlIGJlY29tZXMgbWluZS4gVGhhdCBtZWFucyBJIHdpbGwg bm90IG9ubHkgYmUKPiBoZWxkIGFjY291bnRhYmxlIGlmIGl0IGRvZXNuJ3Qgd29yaywgYnJlYWtz IG9yIHVwc2V0cyBidWlsZCBmYXJtcyBhbGwKPiBvdmVyIHRoZSB3b3JsZC4gSXQgYWxzbyBtZWFu cyB0aGF0IEkgYW0gdGhlIG9uZSB0aGF0IHdpbGwgbmVlZCB0byBtYWtlCj4gY2hhbmdlcyB0byBp dCBhbG9uZyB0aGUgd2F5LiBJZiB0aGUgY29kZSBpcyBkaWZmaWN1bHQgZm9yIG1lIHRvCj4gdW5k ZXJzdGFuZCBiZWNhdXNlIGl0IGRvZXNuJ3QgYmVoYXZlIHRoZSB3YXkgSSdtIHVzZWQgdG8sIHRo ZW4gdGhhdAo+IG1ha2VzIG15IGxpZmUgaGFyZGVyLgo+Cj4gU29tZXRpbWVzIGF1dGhvcnMgZG8g c3RpY2sgYXJvdW5kIGFuZCBjYXJlIGFib3V0IHRoZWlyIGRyaXZlcnMsIGJ1dAo+IG9mdGVuIHRo ZXknbGwganVzdCBkaXNhcHBlYXIsIG9yIGlnbm9yZSBwYXRjaGVzIGFuZCBidWcgcmVwb3J0cyBh Ym91dAo+IHRoZWlyIGRyaXZlcnMuIFNvIGlmIHdvcnN0IGNvbWVzIHRvIHdvcnN0IHBlb3BsZSB3 aWxsIGxvb2sgdG8gbWUgdG8gZml4Cj4gdGhlaXIgcHJvYmxlbXMuIFRoYXQncyB3aHkgSSB3YW50 IGl0IHRvIGJlIGVhc3kgdG8gcmVhZCBhbmQgbW9kaWZ5IHRoZQo+IGNvZGUgdGhhdCBJIG1haW50 YWluLCBiZWNhdXNlIHRoYXQgd2F5IHdoZW4gdXNlcnMgc2hvdyB1cCBhbmQgY29tcGxhaW4KPiBh Ym91dCBkcml2ZXJzIEkgZG9uJ3QgaGF2ZSB0byBzcGVuZCBob3VycyB0cnlpbmcgdG8gdW5kZXJz dGFuZCB3aGF0IHRoZQo+IG9yaWdpbmFsIGF1dGhvciB3YXMgdHJ5aW5nIHRvIGFjaGlldmUuCgpC dXQgdGhpcyBpcyBjb21tb24gcHJvYmxlbSBvZiBhbGwgc3Vic3lzdGVtcywgdGhlcmUgaXMgbm90 aGluZyBzcGVjaWFsCmFib3V0IHBhbmVscy4KCj4KPiBUaGUgYWJvdmUgaXMgYSB2YXJpYW50IG9m IHdoYXQgb3RoZXJzIGhhdmUgdGVybWVkICJvYnZpb3VzbHkgY29ycmVjdCIuCj4gT25lIGdvb2Qg d2F5IHRvIG1ha2UgY29kZSBvYnZpb3VzbHkgY29ycmVjdCBpcyB0byBtYWtlIGl0IHNpbXBsZS4K PgoKSSB1bmRlcnN0YW5kIHdoYXQgeW91IHdhbnQgdG8gc2F5LCBidXQgSSBjYW5ub3QgZnVsbHkg YWdyZWUgd2l0aCBpdC4KV2l0aCBzdWNoIGNvbnNlcnZhdGl2ZSBhcHByb2FjaCBMaW51eCB3b3Vs ZCBub3QgZXZvbHZlIGF0IGFsbCA6KQpXZSBuZWVkIHNvbWUgYmFsYW5jZSBiZXR3ZWVuICJjb2Rl IGV4YWN0bHkgYXMgbWFpbnRhaW5lciBzYXlzLCBvdGhlcndpc2UKeW91IHdpbGwgYmUgbmFja2Vk IiBhbmQgImRvIHdoYXRldmVyIHlvdSB3YW50IiwKYnV0IEkgdGhpbmsgaW4gY2FzZSBvZiBwYW5l bCBzdWJzeXN0ZW0gcmVxdWlyZW1lbnRzIGFyZSB1bm5lY2Vzc2FyaWx5CnZlcnkgc3RyaWN0LgoK T2ssIHRoaXMgcGFydCBvZiB0aGUgZGlzY3Vzc2lvbiBpcyBsZXNzIHRlY2huaWNhbCwgSSBndWVz cyBpdCB3b3VsZCBiZQpnb29kIHRvIGhhdmUgb3BpbmlvbnMgb2Ygb3RoZXIgbWFpbnRhaW5lcnMg YWJvdXQgdGhlIHN1YmplY3QuCgpSZWdhcmRzCkFuZHJ6ZWoKCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1k ZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK