From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 02/15] drm/i915: Embedded microcontroller (uC) firmware loading support Date: Mon, 6 Jul 2015 16:06:30 +0200 Message-ID: <20150706140630.GE2156@phenom.ffwll.local> References: <1435926637-30892-1-git-send-email-david.s.gordon@intel.com> <1435926637-30892-3-git-send-email-david.s.gordon@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wg0-f45.google.com (mail-wg0-f45.google.com [74.125.82.45]) by gabe.freedesktop.org (Postfix) with ESMTPS id 84EF56E8B6 for ; Mon, 6 Jul 2015 07:03:43 -0700 (PDT) Received: by wgck11 with SMTP id k11so141353473wgc.0 for ; Mon, 06 Jul 2015 07:03:42 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1435926637-30892-3-git-send-email-david.s.gordon@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Dave Gordon Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCBKdWwgMDMsIDIwMTUgYXQgMDE6MzA6MjRQTSArMDEwMCwgRGF2ZSBHb3Jkb24gd3Jv dGU6Cj4gQ3VycmVudCBkZXZpY2VzIG1heSBjb250YWluIG9uZSBvciBtb3JlIHByb2dyYW1tYWJs ZSBtaWNyb2NvbnRyb2xsZXJzCj4gdGhhdCBuZWVkIHRvIGhhdmUgYSBmaXJtd2FyZSBpbWFnZSAo YWthICJiaW5hcnkgYmxvYiIpIGxvYWRlZCBmcm9tIGFuCj4gZXh0ZXJuYWwgbWVkaXVtIGFuZCB0 cmFuc2ZlcnJlZCB0byB0aGUgZGV2aWNlJ3MgbWVtb3J5Lgo+IAo+IFRoaXMgZmlsZSBwcm92aWRl cyBjb21tb24gc3VwcG9ydCBmdW5jdGlvbnMgZm9yIGRvaW5nIHRoaXM7IHRoZXkgY2FuCj4gdGhl biBiZSB1c2VkIGJ5IGVhY2ggdUMtc3BlY2lmaWMgbG9hZGVyLCB0aHVzIHJlZHVjaW5nIGNvZGUg ZHVwbGljYXRpb24KPiBhbmQgdGVzdGluZyBlZmZvcnQuCj4gCj4gdjI6Cj4gICAgIExvY2FsIGZ1 bmN0aW9ucyBzaG91bGQgcGFzcyBkZXZfcHJpdiByYXRoZXIgdGhhbiBkZXYgW0NocmlzIFdpbHNv bl0KPiAgICAgVmFyaW91cyBvdGhlciBpbXByb3ZlbWVudHMgcGVyIENocmlzIFdpbHNvbidzIHJl dmlldyBjb21tZW50cwo+IAo+IHYzOgo+ICAgICBEZWZlYXR1cmVkIHZlcnNpb24gd2l0aG91dCBh c3luYyBwcmVmZXRjaCBbRGFuaWVsIFZldHRlcl0KPiAKPiBTaWduZWQtb2ZmLWJ5OiBEYXZlIEdv cmRvbiA8ZGF2aWQucy5nb3Jkb25AaW50ZWwuY29tPgo+IFNpZ25lZC1vZmYtYnk6IEFsZXggRGFp IDx5dS5kYWlAaW50ZWwuY29tPgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmls ZSAgICAgICAgICB8ICAgMyArCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjX2xvYWRl ci5jIHwgMzEwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF91Y19sb2FkZXIuaCB8ICA5MiArKysrKysrKysrCj4gIDMgZmlsZXMg Y2hhbmdlZCwgNDA1IGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX3VjX2xvYWRlci5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Y19sb2FkZXIuaAo+IAo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxl Cj4gaW5kZXggZGUyMTk2NS4uZjFmODBmYyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gQEAg LTM5LDYgKzM5LDkgQEAgaTkxNS15ICs9IGk5MTVfY21kX3BhcnNlci5vIFwKPiAgCSAgaW50ZWxf cmluZ2J1ZmZlci5vIFwKPiAgCSAgaW50ZWxfdW5jb3JlLm8KPiAgCj4gKyMgZ2VuZXJpYyBhbmNp bGxpYXJ5IG1pY3JvY29udHJvbGxlciBzdXBwb3J0Cj4gK2k5MTUteSArPSBpbnRlbF91Y19sb2Fk ZXIubwo+ICsKPiAgIyBhdXRvZ2VuZXJhdGVkIG51bGwgcmVuZGVyIHN0YXRlCj4gIGk5MTUteSAr PSBpbnRlbF9yZW5kZXJzdGF0ZV9nZW42Lm8gXAo+ICAJICBpbnRlbF9yZW5kZXJzdGF0ZV9nZW43 Lm8gXAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Y19sb2FkZXIu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjX2xvYWRlci5jCj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5hOGZjMWRkCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjX2xvYWRlci5jCj4gQEAgLTAsMCArMSwzMTAg QEAKPiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KPiArICoK PiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFu eSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3Nv Y2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVh bCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQg bGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwg cHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVz IG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAq IFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0 aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBo KSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25z IG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJ REVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiAr ICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF IEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9S UyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBP UiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNU LCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09O TkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4g KyAqIElOIFRIRSBTT0ZUV0FSRS4KPiArICoKPiArICogQXV0aG9yOgo+ICsgKglEYXZlIEdvcmRv biA8ZGF2aWQucy5nb3Jkb25AaW50ZWwuY29tPgo+ICsgKi8KPiArI2luY2x1ZGUgPGxpbnV4L2Zp cm13YXJlLmg+Cj4gKyNpbmNsdWRlICJpOTE1X2Rydi5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfdWNf bG9hZGVyLmgiCj4gKwo+ICsvKioKPiArICogRE9DOiBDb21tb24gZnVuY3Rpb25zIGZvciBlbWJl ZGRlZCBtaWNyb2NvbnRyb2xsZXIgKHVDKSBmaXJtd2FyZSBsb2FkaW5nCj4gKyAqCj4gKyAqIFRo ZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIHByb3ZpZGUgY29tbW9uIHN1cHBvcnQgY29kZSBmb3Ig bG9hZGluZyB0aGUKPiArICogZmlybXdhcmUgdGhhdCBtYXkgYmUgcmVxdWlyZWQgYnkgYW4gZW1i ZWRkZWQgbWljcm9jb250cm9sbGVyICh1QykuCj4gKyAqCj4gKyAqIFRoZSBmdW5jdGlvbiBpbnRl bF91Y19md19pbml0KCkgc2hvdWxkIGJlIGNhbGxlZCBmaXJzdDsgaXQgcmVxdWlyZXMgbm8KPiAr ICogbG9ja2luZywgYW5kIGNhbiBiZSBjYWxsZWQgZXZlbiBiZWZvcmUgR0VNIGhhcyBiZWVuIGlu aXRpYWxpc2VkLiBJdCBqdXN0Cj4gKyAqIGluaXRpYWxpc2VzIHRoZSB0cmFja2luZyBkYXRhIGFu ZCBzdG9yZXMgaXRzIHBhcmFtZXRlcnMgZm9yIHRoZSBzdWJzZXF1ZW50Cj4gKyAqIGNhbGwgdG8g aW50ZWxfdWNfZndfZmV0Y2goKS4KPiArICoKPiArICogQXQgc29tZSBjb252ZW5pZW50IHBvaW50 IGFmdGVyIEdFTSBpbml0aWFsaXNhdGlvbiwgdGhlIGRyaXZlciBzaG91bGQgY2FsbAo+ICsgKiBp bnRlbF91Y19md19mZXRjaCgpLiBUaGUgZmlyc3QgdGltZSwgdGhpcyB3aWxsIHVzZSB0aGUgTGlu dXgga2VybmVsJ3MKPiArICogcmVxdWVzdF9maXJtd2FyZSgpIGNhbGwgdG8gb3BlbiBhbmQgcmVh ZCB0aGUgZmlybXdhcmUgaW1hZ2UgaW50byBtZW1vcnkuCj4gKyAqIChPbiBzdWJzZXF1ZW50IGNh bGxzLCB0aGlzIGlzIHNraXBwZWQsIGFzIGVpdGhlciB0aGUgZmlybXdhcmUgaGFzIGFscmVhZHkK PiArICogYmVlbiBmZXRjaGVkIGludG8gbWVtb3J5LCBvciBpdCBpcyBhbHJlYWR5IGtub3duIHRo YXQgbm8gdmFsaWQgZmlybXdhcmUKPiArICogaW1hZ2UgY291bGQgYmUgZm91bmQpLgo+ICsgKgo+ ICsgKiBUaGUgY2FsbGJhY2soKSBmdW5jdGlvbiBwYXNzZWQgdG8gaW50ZWxfdWNfZndfZmV0Y2go KSBjYW4gZnVydGhlciBjaGVjawo+ICsgKiB0aGUgZmlybXdhcmUgaW1hZ2UgYmVmb3JlIGl0IGlz IHNhdmVkLiBUaGlzIGZ1bmN0aW9uIGNhbiByZWplY3QgdGhlIGltYWdlCj4gKyAqIGJ5IHJldHVy bmluZyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgKGUuZy4gLUVOT0VYRUMpLCBvciBhY2NlcHQgaXQu IEluIHRoZQo+ICsgKiBsYXR0ZXIgY2FzZSwgaXQgY2FuIHJldHVybiBJTlRFTF9VQ19GV19HT09E ICh3aGljaCBpcyBhbHNvIHRoZSBkZWZhdWx0IGlmCj4gKyAqIG5vIGNhbGxiYWNrKCkgaXMgc3Vw cGxpZWQpLCBhbmQgdGhlIGNvbW1vbiBjb2RlIGhlcmUgd2lsbCBzYXZlIHRoZSB3aG9sZQo+ICsg KiBvZiB0aGUgZmlybXdhcmUgaW1hZ2UgaW4gYSAocGFnZWFibGUsIHNobWZzLWJhY2tlZCkgR0VN IG9iamVjdC4KPiArICoKPiArICogSWYgc2F2aW5nIHRoZSB3aG9sZSBpbWFnZSB1bm1vZGlmaWVk IGlzIG5vdCBhcHByb3ByaWF0ZSAoZm9yIGV4YW1wbGUsIGlmCj4gKyAqIG9ubHkgYSBzbWFsbCBw YXJ0IG9mIHRoZSBpbWFnZSBpcyBuZWVkZWQgbGF0ZXIsIG9yIHRoZSBkYXRhIG5lZWRzIHRvIGJl Cj4gKyAqIHJlb3JnYW5pc2VkIGJlZm9yZSBzYXZpbmcpLCB0aGUgY2FsbGJhY2soKSBmdW5jdGlv biBjYW4gaW5zdGVhZCBtYWtlIGl0cwo+ICsgKiBvd24gYXJyYW5nZW1lbnRzIGZvciBzYXZpbmcg dGhlIHJlcXVpcmVkIGRhdGEgaW4gYSBHRU0gb2JqZWN0IG9yIG90aGVyd2lzZQo+ICsgKiBhbmQg dGhlbiByZXR1cm4gSU5URUxfVUNfRldfU0FWRUQuCj4gKyAqCj4gKyAqIChJZiBzdWNoIGEgY2Fs bGJhY2sgZG9lcyBzdGFzaCAoc29tZSBvZikgdGhlIGltYWdlIGRhdGEgaW4gYSBHRU0gb2JqZWN0 LAo+ICsgKiBpdCBjYW4gdXNlIHRoZSB1Y19md19vYmogYW5kIHVjX2Z3X3NpemUgZmllbGRzOyB0 aGUgY29tbW9uIGZyYW1ld29yayB3aWxsCj4gKyAqIHRoZW4gaGFuZGxlIGRlYWxsb2NhdGluZyB0 aGUgb2JqZWN0IG9uIGZhaWx1cmUgb3IgZmluYWxpc2F0aW9uLiBPdGhlcndpc2UKPiArICogYW55 IGFsbG9jYXRlZCByZXNvdXJjZXMgd2lsbCBoYXZlIHRvIGJlIG1hbmFnZWQgYnkgdGhlIHVDLXNw ZWNpZmljIGNvZGUpLgo+ICsgKgo+ICsgKiBBZnRlciBhIHN1Y2Nlc3NmdWwgY2FsbCB0byBpbnRl bF91Y19md19mZXRjaCgpLCB0aGUgdUMtc3BlY2lmaWMgY29kZSBjYW4KPiArICogdHJhbnNmZXIg dGhlIGRhdGEgaW4gdGhlIEdFTSBvYmplY3QgKG9yIGl0cyBvd24gYWx0ZXJuYXRpdmUpIHRvIHRo ZSB1QydzCj4gKyAqIG1lbW9yeSAoaW4gc29tZSB1Qy1zcGVjaWZpYyB3YXksIG5vdCBoYW5kbGVk IGhlcmUpLgo+ICsgKgo+ICsgKiBEdXJpbmcgZHJpdmVyIHNodXRkb3duLCBvciBpZiBkcml2ZXIg bG9hZCBpcyBhYm9ydGVkLCBpbnRlbF91Y19md19maW5pKCkKPiArICogc2hvdWxkIGJlIGNhbGxl ZCB0byByZWxlYXNlIGFueSByZW1haW5pbmcgcmVzb3VyY2VzLgo+ICsgKi8KPiArCj4gKy8qIFVz ZXItZnJpZW5kbHkgcmVwcmVzZW50YXRpb24gb2YgYW4gZW51bSAqLwo+ICtjb25zdCBjaGFyICpp bnRlbF91Y19md19zdGF0dXNfcmVwcihlbnVtIGludGVsX3VjX2Z3X3N0YXR1cyBzdGF0dXMpCj4g K3sKPiArCXN3aXRjaCAoc3RhdHVzKSB7Cj4gKwljYXNlIElOVEVMX1VDX0ZJUk1XQVJFX0ZBSUw6 Cj4gKwkJcmV0dXJuICJGQUlMIjsKPiArCWNhc2UgSU5URUxfVUNfRklSTVdBUkVfTk9ORToKPiAr CQlyZXR1cm4gIk5PTkUiOwo+ICsJY2FzZSBJTlRFTF9VQ19GSVJNV0FSRV9QRU5ESU5HOgo+ICsJ CXJldHVybiAiUEVORElORyI7Cj4gKwljYXNlIElOVEVMX1VDX0ZJUk1XQVJFX1NVQ0NFU1M6Cj4g KwkJcmV0dXJuICJTVUNDRVNTIjsKPiArCWRlZmF1bHQ6Cj4gKwkJcmV0dXJuICJVTktOT1dOISI7 Cj4gKwl9Cj4gK307Cj4gKwo+ICsvKgo+ICsgKiBDYWxsZWQgb25jZSBwZXIgdUMsIGxhdGUgaW4g ZHJpdmVyIGluaXRpYWxpc2F0aW9uLCBhZnRlciBHRU0gaXMgc2V0IHVwLgo+ICsgKiBGaXJzdCwg d2UgZmV0Y2ggdGhlIGZpcm13YXJlIGltYWdlIHVzaW5nIHJlcXVlc3RfZmlybXdhcmUoKSwgdGhl biBhbGxvdwo+ICsgKiB0aGUgb3B0aW9uYWwgY2FsbGJhY2soKSBmdW5jdGlvbiB0byBjaGVjayBp dC4gSWYgaXQncyBnb29kLCBhbmQgY2FsbGJhY2soKQo+ICsgKiBkb2Vzbid0IHNheSBpdCdzIGFs cmVhZHkgc2F2ZWQgdGhlIGltYWdlLCB3ZSB3aWxsIHNhdmUgaXQgaGVyZSBieSBjb3B5aW5nCj4g KyAqIHRoZSB3aG9sZSB0aGluZyBpbnRvIGEgKHBhZ2VhYmxlLCBzaG1mcy1iYWNrZWQpIEdFTSBv YmplY3QsCj4gKyAqLwo+ICtzdGF0aWMgdm9pZAo+ICt1Y19md19mZXRjaChzdHJ1Y3QgaW50ZWxf dWNfZncgKnVjX2Z3LAo+ICsJICAgIGludCBjYWxsYmFjayhzdHJ1Y3QgaW50ZWxfdWNfZncgKikp Cj4gK3sKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSB1Y19mdy0+dWNfZGV2Owo+ICsJc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKPiArCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAq Znc7Cj4gKwlpbnQgY2Jfc3RhdHVzID0gSU5URUxfVUNfRldfR09PRDsKPiArCj4gKwlEUk1fREVC VUdfRFJJVkVSKCJiZWZvcmUgd2FpdGluZzogJXMgZncgZmV0Y2ggc3RhdHVzICVzLCBmdyAlcFxu IiwKPiArCQl1Y19mdy0+dWNfbmFtZSwKPiArCQlpbnRlbF91Y19md19zdGF0dXNfcmVwcih1Y19m dy0+dWNfZndfZmV0Y2hfc3RhdHVzKSwKPiArCQl1Y19mdy0+dWNfZndfYmxvYik7Cj4gKwo+ICsJ V0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZkZXYtPnN0cnVjdF9tdXRleCkpOwo+ICsJV0FSTl9P Tih1Y19mdy0+dWNfZndfZmV0Y2hfc3RhdHVzICE9IElOVEVMX1VDX0ZJUk1XQVJFX1BFTkRJTkcp Owo+ICsKPiArCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmdywgdWNfZnctPnVjX2Z3X3BhdGgsICZk ZXYtPnBkZXYtPmRldikpCj4gKwkJZ290byBmYWlsOwo+ICsJaWYgKCFmdykKPiArCQlnb3RvIGZh aWw7Cj4gKwo+ICsJRFJNX0RFQlVHX0RSSVZFUigiZmV0Y2ggJXMgZncgZnJvbSAlcyBzdWNjZWVk ZWQsIGZ3ICVwXG4iLAo+ICsJCXVjX2Z3LT51Y19uYW1lLCB1Y19mdy0+dWNfZndfcGF0aCwgZncp Owo+ICsJdWNfZnctPnVjX2Z3X2Jsb2IgPSBmdzsKPiArCj4gKwkvKiBDYWxsYmFjayB0byB0aGUg b3B0aW9uYWwgdUMtc3BlY2lmaWMgZnVuY3Rpb24sIGlmIHN1cHBsaWVkICovCj4gKwlpZiAoY2Fs bGJhY2spCj4gKwkJY2Jfc3RhdHVzID0gY2FsbGJhY2sodWNfZncpOwo+ICsJaWYgKGNiX3N0YXR1 cyA8IDApCj4gKwkJZ290byBmYWlsOwo+ICsJc3dpdGNoIChjYl9zdGF0dXMpIHsKPiArCWRlZmF1 bHQ6Cj4gKwkJV0FSTigxLCAiSW52YWxpZCBzdGF0dXMgJWQgZnJvbSBmdyBjaGVja2luZyBjYWxs YmFjayAlcGZcbiIsCj4gKwkJCQljYl9zdGF0dXMsIGNhbGxiYWNrKTsKPiArCQlnb3RvIGZhaWw7 Cj4gKwo+ICsJY2FzZSBJTlRFTF9VQ19GV19TQVZFRDoKPiArCQkvLyBHb29kLCBhbHJlYWR5IHNh dmVkLCBub3RoaW5nIHRvIGRvCj4gKwkJYnJlYWs7Cj4gKwo+ICsJY2FzZSBJTlRFTF9VQ19GV19H T09EOgo+ICsJCS8vIEdvb2QsIHNhdmUgaW4gR0VNIG9iamVjdAo+ICsJCW9iaiA9IGk5MTVfZ2Vt X29iamVjdF9jcmVhdGVfZnJvbV9kYXRhKGRldiwgZnctPmRhdGEsIGZ3LT5zaXplKTsKPiArCQlp ZiAoIW9iaikKPiArCQkJZ290byBmYWlsOwo+ICsKPiArCQl1Y19mdy0+dWNfZndfb2JqID0gb2Jq Owo+ICsJCXVjX2Z3LT51Y19md19zaXplID0gZnctPnNpemU7Cj4gKwl9Cj4gKwo+ICsJRFJNX0RF QlVHX0RSSVZFUigiJXMgZncgZmV0Y2ggc3RhdHVzIFNVQ0NFU1MsIGNiICVkLCBvYmogJXBcbiIs Cj4gKwkJCXVjX2Z3LT51Y19uYW1lLCBjYl9zdGF0dXMsIHVjX2Z3LT51Y19md19vYmopOwo+ICsK PiArCXJlbGVhc2VfZmlybXdhcmUoZncpOwo+ICsJdWNfZnctPnVjX2Z3X2Jsb2IgPSBOVUxMOwo+ ICsJdWNfZnctPnVjX2Z3X2ZldGNoX3N0YXR1cyA9IElOVEVMX1VDX0ZJUk1XQVJFX1NVQ0NFU1M7 Cj4gKwlyZXR1cm47Cj4gKwo+ICtmYWlsOgo+ICsJRFJNX0RFQlVHX0RSSVZFUigiJXMgZncgZmV0 Y2ggc3RhdHVzIEZBSUw7IGZ3ICVwLCBvYmogJXBcbiIsCj4gKwkJdWNfZnctPnVjX25hbWUsIGZ3 LCB1Y19mdy0+dWNfZndfb2JqKTsKPiArCURSTV9FUlJPUigiRmFpbGVkIHRvIGZldGNoICVzIGZp cm13YXJlIGZyb20gJXNcbiIsCj4gKwkJICB1Y19mdy0+dWNfbmFtZSwgdWNfZnctPnVjX2Z3X3Bh dGgpOwo+ICsKPiArCW9iaiA9IHVjX2Z3LT51Y19md19vYmo7Cj4gKwlpZiAob2JqKQo+ICsJCWRy bV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZvYmotPmJhc2UpOwo+ICsJdWNfZnctPnVjX2Z3X29i aiA9IE5VTEw7Cj4gKwo+ICsJcmVsZWFzZV9maXJtd2FyZShmdyk7CQkvKiBPSyBldmVuIGlmIGZ3 IGlzIE5VTEwgKi8KPiArCXVjX2Z3LT51Y19md19ibG9iID0gTlVMTDsKPiArCXVjX2Z3LT51Y19m d19mZXRjaF9zdGF0dXMgPSBJTlRFTF9VQ19GSVJNV0FSRV9GQUlMOwo+ICt9CgpTbyBsb29raW5n IGF0IHRoaXMgdGhlIGVudGlyZSBsaWJyYXJ5IG5vdyBib2lscyBkb3duIHRvIGEgZ2xvcmlmaWVk CnZlcnNpb24gb2YKCglpZiAocmVxdWVzdF9maXJtd2FyZSAhPSAwKSB7CgkJRFJNX0RFQlVHX0dF TSgiZ3VjIGZpcm13YXJlIGxvYWRpbmcgZmFpbGVkXG4iKTsKCQlyZXR1cm4gZmFpbDsKCX0KCgln ZW1fb2JqX2NyZWF0ZV9mcm9tX2RhdGUoZncpCglyZWxhc2VfZmlybXdhcmUKCkNhbiBJIGhhdmUg dGhhdCBpbmxpbmVkIChvciBhcyBhIHNpbXBsZSBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uKSBpbnRv IHRoZQpjYWxsc2l0ZSBwbGVhc2U/IFllcyB0aGF0IHVuZm9ydHVuYXRlbHkgbWVhbnMgSSBhc2sg eW91IHRvIGNhbiB0aGUgcmVhbGx5CmdyZWF0IGtlcm5lbGRvYyB5b3UndmUgZG9uZSAoSSdkIHJl YWxseSBsaWtlIGFsbCBwYXRjaGVzIHRvIGxvb2sgdGhpcwpncmVhdCB3cnQgZG9jcyksIGJ1dCBJ IGFsc28gdGhpbmsgdGhhdCB0aGUgYWJzdHJhY3Rpb24gcmVhbGx5IGRvZXNuJ3QgcGF5Cm9mZi4g RmlybXdhcmUtbG9hZGluZyB1c2luZyByZXF1ZXN0X2Zpcm13YXJlIGlzIG5vdCBzb21ldGhpbmcg dHJpY2t5CmVub3VnaCB0byBqdXN0aWZ5IGFkZGVkIGFic3RyYWN0aW9uLiBZZXMgdGhlcmUgd2Fz IHRoZQpzeW5jaHJvbml6YXRpb24vY29tcGxldGlvbiBzdHVmZiBpbiB0aGVyZSBiZWZvcmUsIGJ1 dCBhcyBleHBsYWluZWQgaW4gdGhlCnByZXZpb3VzIGRpc2N1c3Npb24gSSBkb24ndCBleHBlY3Qg dXMgdG8gYmUgYWJsZSB0byBzaGFyZSB0aGF0IHBhcnQgYXQKYWxsLCBhbmQgSSdkIGxpa2UgYW55 IGtpbmQgb2Ygc3luY2hyb25pemF0aW9uIHRvIGJlIG9wZW4tY29kZWQgdXNpbmcKbm9ybWFsIGtl cm5lbCBwcmltaXRpdmVzIChsaWtlIGZsdXNoX3dvcmsgb3Igc2ltaWxhcikgdG8gbWFrZSBpdCBy ZWFsbHkKc3RpY2sgb3V0IHRvIHJldmlld2Vycy4KClRoYW5rcywgRGFuaWVsCgoKPiArCj4gKy8q Kgo+ICsgKiBpbnRlbF91Y19md19mZXRjaCgpIC0gZmV0Y2ggdGhlIGZpcm13YXJlIGltYWdlCj4g KyAqIEB1Y19mdzoJaW50ZWxfdWNfZncgc3RydWN0dXJlCj4gKyAqIEBjYWxsYmFjazoJb3B0aW9u YWwgY2FsbGJhY2sgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYW5kL29yIHNhdmUgdGhlIGltYWdlCj4g KyAqCj4gKyAqIElmIHRoZSBmZXRjaCBpcyBub3QgUEVORElORyAoaS5lLiBvbiB0aGUgc2Vjb25k IGFuZCBzdWJzZXF1ZW50IGNhbGxzKSwgdGhpcwo+ICsgKiBmdW5jdGlvbiB3aWxsIGp1c3QgcmV0 dXJuIGFuIGFwcHJvcmlhdGUgZXJybm8sIGJhc2VkIG9uIHRoZSBwcmV2aW91c2x5LXNldAo+ICsg KiBzdGF0dXMuCj4gKyAqCj4gKyAqIE9uIHRoZSBmaXJzdCBjYWxsIG9ubHksIGl0IHdpbGwgdHJ5 IHRvIHJldHJpZXZlIHRoZSBmaXJtYXdhcmUgaW1hZ2UgdXNpbmcKPiArICogdGhlIHBhcmFtZXRl cnMgc2V0IGVhcmxpZXIuIElmIGFuIGltYWdlIGlzIGZvdW5kLCB0aGUgb3B0aW9uYWwgQGNhbGxi YWNrKCkKPiArICogd2lsbCBiZSBjYWxsZWQgdG8gZnVydGhlciB2YWxpZGF0ZSBpdC4KPiArICoK PiArICogV2hlbiBpdCBpcyBjYWxsZWQsIEB1Y19mdy0+dWNfZndfYmxvYiByZWZlcnMgdG8gdGhl IGZldGNoZWQgZmlybXdhcmUgaW1hZ2UsCj4gKyAqIGFuZCBAdWNfZnctPnVjX2Z3X29iaiBpcyBO VUxMLiBUaGUgQGNhbGxiYWNrKCkgZnVuY3Rpb24gY2FuIHJldHVybiBhbiBlcnJvcgo+ICsgKiBj b2RlIChhbnkgbmVnYXRpdmUgdmFsdWUpLCBpbiB3aGljaCBjYXNlIHRoZSBpbWFnZSB3aWxsIGJl IHJlamVjdGVkLiAgVGhlCj4gKyAqIGZldGNoIHN0YXR1cyB3aWxsIGJlIHNldCB0byBGQUlMLCBh bmQgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiAtRUlPLgo+ICsgKgo+ICsgKiBPciwgQGNhbGxi YWNrKCkgY2FuIHJldHVybiBJTlRFTF9VQ19GV19HT09ELiBUaGUgaW1hZ2UgaXMgY29uc2lkZXJl ZCBnb29kLAo+ICsgKiBhbmQgaXQgd2lsbCBiZSBzYXZlZCBpbiBhIEdFTSBvYmplY3QgYXMgZGVz Y3JpYmVkIGFib3ZlLiBJbiB0aGlzIGNhc2UsCj4gKyAqIEB1Y19mdy0+dWNfZndfb2JqIHdpbGwg YmUgc2V0IHRvIHBvaW50IHRvIHRoZSBHRU0gb2JqZWN0LCBhbmQgdGhlIHNpemUgb2YKPiArICog dGhlIGltYWdlIHdpbGwgYmUgaW4gQHVjX2Z3LT51Y19md19zaXplLiBUaGlzIGlzIGFsc28gdGhl IGRlZmF1bHQgaWYgbm8KPiArICogQGNhbGxiYWNrKCkgaXMgc3VwcGxpZWQuCj4gKyAqCj4gKyAq IEZpbmFsbHksIEBjYWxsYmFjaygpIGNhbiByZXR1cm4gSU5URUxfVUNfRldfU0FWRUQuIFRoZSBp bWFnZSBpcyBjb25zaWRlcmVkCj4gKyAqIGdvb2QsIGJ1dCBAY2FsbGJhY2soKSBoYXMgYWxyZWFk eSBkZWFsIHdpdGggc2F2aW5nIHRoZSBjb250ZW50LCBzbyB0aGlzCj4gKyAqIGNvbW1vbiBjb2Rl IHdpbGwgbm90IGFsbG9jYXRlIGFuZCBmaWxsIGEgR0VNIG9iamVjdC4gQGNhbGxiYWNrKCkgbWF5 IHVzZQo+ICsgKiBAdWNfZnctPnVjX2Z3X29iaiB0byBob2xkIGEgcmVmZXJlbmNlIHRvIGl0cyBv d24gR0VNIG9iamVjdCwgaWYgaXQgaGFzCj4gKyAqIGFsbG9jYXRlZCBvbmUsIGFuZCBpbiB0aGlz IGNhc2UgdGhlIGNvbW1vbiBjb2RlIHdpbGwgZGVhbCB3aXRoIGRpc3Bvc2luZwo+ICsgKiBvZiBp dCBvbiBlcnJvciBvciBmaW5hbGlzYXRpb247IG90aGVyd2lzZSBpdCBjYW4gbWFrZSBpdHMgb3du IGFycmFnZW1lbnRzLgo+ICsgKgo+ICsgKiBBZnRlciB0aGlzIGNhbGwsIEB1Y19mdy0+dWNfZndf ZmV0Y2hfc3RhdHVzIHdpbGwgc2hvdyB3aGV0aGVyIHRoZSBmaXJtd2FyZQo+ICsgKiBpbWFnZSB3 YXMgc3VjY2Vzc2Z1bGx5IGZldGNoZWQgYW5kIHNhdmVkLgo+ICsgKgo+ICsgKiBJbiBhbGwgY2Fz ZXMgdGhlIGZpcm13YXJlIGJsb2IgaXMgcmVsZWFzZWQgYmVmb3JlIHRoaXMgZnVuY3Rpb24gcmV0 dXJucy4KPiArICoKPiArICogUmV0dXJuOglub24temVybyBjb2RlIG9uIGVycm9yCj4gKyAqLwo+ ICtpbnQKPiAraW50ZWxfdWNfZndfZmV0Y2goc3RydWN0IGludGVsX3VjX2Z3ICp1Y19mdywKPiAr CQkgIGludCBjYWxsYmFjayhzdHJ1Y3QgaW50ZWxfdWNfZncgKikpCj4gK3sKPiArCVdBUk5fT04o IW11dGV4X2lzX2xvY2tlZCgmdWNfZnctPnVjX2Rldi0+c3RydWN0X211dGV4KSk7Cj4gKwo+ICsJ aWYgKHVjX2Z3LT51Y19md19mZXRjaF9zdGF0dXMgPT0gSU5URUxfVUNfRklSTVdBUkVfUEVORElO Rykgewo+ICsJCS8qIFdlIG9ubHkgY29tZSBoZXJlIG9uY2UgKi8KPiArCQl1Y19md19mZXRjaCh1 Y19mdywgY2FsbGJhY2spOwo+ICsJCS8qIHN0YXR1cyBtdXN0IG5vdyBiZSBGQUlMIG9yIFNVQ0NF U1MgKi8KPiArCX0KPiArCj4gKwlEUk1fREVCVUdfRFJJVkVSKCIlcyBmdyBmZXRjaCBzdGF0dXMg JXNcbiIsIHVjX2Z3LT51Y19uYW1lLAo+ICsJCWludGVsX3VjX2Z3X3N0YXR1c19yZXByKHVjX2Z3 LT51Y19md19mZXRjaF9zdGF0dXMpKTsKPiArCj4gKwlzd2l0Y2ggKHVjX2Z3LT51Y19md19mZXRj aF9zdGF0dXMpIHsKPiArCWNhc2UgSU5URUxfVUNfRklSTVdBUkVfRkFJTDoKPiArCQkvKiBzb21l dGhpbmcgd2VudCB3cm9uZyA6KCAqLwo+ICsJCXJldHVybiAtRUlPOwo+ICsKPiArCWNhc2UgSU5U RUxfVUNfRklSTVdBUkVfTk9ORToKPiArCQkvKiBubyBmaXJtd2FyZSwgbm90aGluZyB0byBkbyAo bm90IGFuIGVycm9yKSAqLwo+ICsJCXJldHVybiAwOwo+ICsKPiArCWNhc2UgSU5URUxfVUNfRklS TVdBUkVfUEVORElORzoKPiArCWRlZmF1bHQ6Cj4gKwkJLyogImNhbid0IGhhcHBlbiIgKi8KPiAr CQlXQVJOX09OQ0UoMSwgIiVzIGZ3ICVzIGludmFsaWQgdWNfZndfZmV0Y2hfc3RhdHVzICVzIFsl ZF1cbiIsCj4gKwkJCXVjX2Z3LT51Y19uYW1lLCB1Y19mdy0+dWNfZndfcGF0aCwKPiArCQkJaW50 ZWxfdWNfZndfc3RhdHVzX3JlcHIodWNfZnctPnVjX2Z3X2ZldGNoX3N0YXR1cyksCj4gKwkJCXVj X2Z3LT51Y19md19mZXRjaF9zdGF0dXMpOwo+ICsJCXJldHVybiAtRU5YSU87Cj4gKwo+ICsJY2Fz ZSBJTlRFTF9VQ19GSVJNV0FSRV9TVUNDRVNTOgo+ICsJCXJldHVybiAwOwo+ICsJfQo+ICt9Cj4g Kwo+ICsvKioKPiArICogaW50ZWxfdWNfZndfaW5pdCgpIC0gZGVmaW5lIHBhcmFtZXRlcnMgZm9y IGZldGNoaW5nIGZpcm13YXJlCj4gKyAqIEBkZXY6CWRybSBkZXZpY2UKPiArICogQHVjX2Z3Oglp bnRlbF91Y19mdyBzdHJ1Y3R1cmUKPiArICogQG5hbWU6CWh1bWFuLXJlYWRhYmxlIGRldmljZSBu YW1lIChlLmcuICJHdUMiKSBmb3IgbWVzc2FnZXMKPiArICogQGZ3X3BhdGg6CSh0cmFpbGluZyBw YXJ0cyBvZikgcGF0aCB0byBmaXJtd2FyZSAoZS5nLiAiaTkxNS9ndWNfZncuYmluIikKPiArICog CQlAZndfcGF0aCA9PSBOVUxMIG1lYW5zICJubyBmaXJtd2FyZSBleHBlY3RlZCIgKG5vdCBhbiBl cnJvciksCj4gKyAqIAkJQGZ3X3BhdGggPT0gIiIgKGVtcHR5IHN0cmluZykgbWVhbnMgImZpcm13 YXJlIHVua25vd24iIGkuZS4KPiArICogCQl0aGUgdUMgcmVxdWlyZXMgZmlybXdhcmUsIGJ1dCB0 aGUgZHJpdmVyIGRvZXNuJ3Qga25vdyB3aGVyZQo+ICsgKiAJCXRvIGZpbmQgdGhlIHByb3BlciB2 ZXJzaW9uLiBUaGlzIHdpbGwgYmUgbG9nZ2VkIGFzIGFuIGVycm9yLgo+ICsgKgo+ICsgKiBUaGlz IGlzIGNhbGxlZCBqdXN0IG9uY2UgcGVyIHVDLCBkdXJpbmcgZHJpdmVyIGxvYWRpbmcuIEl0IGlz IHRoZXJlZm9yZQo+ICsgKiBhdXRvbWF0aWNhbGx5IHNpbmdsZS10aHJlYWRlZCBhbmQgZG9lcyBu b3QgbmVlZCB0byBhY3F1aXJlIGFueSBtdXRleGVzCj4gKyAqIG9yIHNwaW5sb2Nrcy4gT1RPSCwg R0VNIGlzIG5vdCB5ZXQgZnVsbHkgaW5pdGlhbGlzZWQsIHNvIHdlIGNhbid0IGRvCj4gKyAqIHZl cnkgbXVjaCBoZXJlLgo+ICsgKgo+ICsgKiBUaGUgbWFpbiB0YXNrIGhlcmUgaXMgdG8gc2F2ZSB0 aGUgcGFyYW1ldGVycyBmb3IgbGF0ZXIuIFRoZSBhY3R1YWwgZmV0Y2hpbmcKPiArICogd2lsbCBo YXBwZW4gd2hlbiBpbnRlbF91Y19md19pbml0KCkgaXMgY2FsbGVkLCBhZnRlciBHRU0gaW5pdGlh bGlzYXRpb24gaXMKPiArICogY29tcGxldGUuCj4gKyAqLwo+ICt2b2lkCj4gK2ludGVsX3VjX2Z3 X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGludGVsX3VjX2Z3ICp1Y19mdywK PiArCQkgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZndfcGF0aCkKPiArewo+ICsJdWNf ZnctPnVjX2RldiA9IGRldjsKPiArCXVjX2Z3LT51Y19uYW1lID0gbmFtZTsKPiArCXVjX2Z3LT51 Y19md19wYXRoID0gZndfcGF0aDsKPiArCXVjX2Z3LT51Y19md19mZXRjaF9zdGF0dXMgPSBJTlRF TF9VQ19GSVJNV0FSRV9OT05FOwo+ICsJdWNfZnctPnVjX2Z3X2xvYWRfc3RhdHVzID0gSU5URUxf VUNfRklSTVdBUkVfTk9ORTsKPiArCj4gKwlpZiAoZndfcGF0aCA9PSBOVUxMKQo+ICsJCXJldHVy bjsKPiArCj4gKwlpZiAoKmZ3X3BhdGggPT0gJ1wwJykgewo+ICsJCURSTV9FUlJPUigiTm8gJXMg ZmlybXdhcmUga25vd24gZm9yIHRoaXMgcGxhdGZvcm1cbiIsIG5hbWUpOwo+ICsJCXVjX2Z3LT51 Y19md19mZXRjaF9zdGF0dXMgPSBJTlRFTF9VQ19GSVJNV0FSRV9GQUlMOwo+ICsJCXJldHVybjsK PiArCX0KPiArCj4gKwl1Y19mdy0+dWNfZndfZmV0Y2hfc3RhdHVzID0gSU5URUxfVUNfRklSTVdB UkVfUEVORElORzsKPiArCURSTV9ERUJVR19EUklWRVIoIiVzIGZpcm13YXJlIHBlbmRpbmcsIHBh dGggJXNcbiIsCj4gKwkJbmFtZSwgZndfcGF0aCk7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBpbnRl bF91Y19md19maW5pKCkgLSBjbGVhbiB1cCBhbGwgdUMgZmlybXdhcmUtcmVsYXRlZCBkYXRhCj4g KyAqIEB1Y19mdzoJaW50ZWxfdWNfZncgc3RydWN0dXJlCj4gKyAqLwo+ICt2b2lkCj4gK2ludGVs X3VjX2Z3X2Zpbmkoc3RydWN0IGludGVsX3VjX2Z3ICp1Y19mdykKPiArewo+ICsJV0FSTl9PTigh bXV0ZXhfaXNfbG9ja2VkKCZ1Y19mdy0+dWNfZGV2LT5zdHJ1Y3RfbXV0ZXgpKTsKPiArCj4gKwlp ZiAodWNfZnctPnVjX2Z3X29iaikKPiArCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmdWNf ZnctPnVjX2Z3X29iai0+YmFzZSk7Cj4gKwl1Y19mdy0+dWNfZndfb2JqID0gTlVMTDsKPiArCj4g KwlyZWxlYXNlX2Zpcm13YXJlKHVjX2Z3LT51Y19md19ibG9iKTsJLyogT0sgZXZlbiBpZiBOVUxM ICovCj4gKwl1Y19mdy0+dWNfZndfYmxvYiA9IE5VTEw7Cj4gKwo+ICsJdWNfZnctPnVjX2Z3X2Zl dGNoX3N0YXR1cyA9IElOVEVMX1VDX0ZJUk1XQVJFX05PTkU7Cj4gK30KPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdWNfbG9hZGVyLmggYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF91Y19sb2FkZXIuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAw MDAwMC4uYjcxMDQwNgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF91Y19sb2FkZXIuaAo+IEBAIC0wLDAgKzEsOTIgQEAKPiArLyoKPiArICogQ29weXJp Z2h0IMKpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBo ZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEK PiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24g ZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0 aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUg cmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwg c3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5k IHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hl ZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4g KyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl IChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBp biBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2Fy ZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQg V0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVESU5H IEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4g KyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQu ICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVS UyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwg QVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZU V0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4K PiArICoKPiArICogQXV0aG9yOgo+ICsgKglEYXZlIEdvcmRvbiA8ZGF2aWQucy5nb3Jkb25AaW50 ZWwuY29tPgo+ICsgKi8KPiArI2lmbmRlZiBfSU5URUxfVUNfTE9BREVSX0gKPiArI2RlZmluZSBf SU5URUxfVUNfTE9BREVSX0gKPiArCj4gKy8qCj4gKyAqIE1pY3JvY29udHJvbGxlciAodUMpIGZp cm13YXJlIGxvYWRpbmcgc3VwcG9ydAo+ICsgKi8KPiArCj4gKy8qCj4gKyAqIFRoZXNlIHZhbHVl cyBhcmUgdXNlZCB0byB0cmFjayB0aGUgc3RhZ2VzIG9mIGdldHRpbmcgdGhlIHJlcXVpcmVkIGZp cm13YXJlCj4gKyAqIGludG8gYW4gb25ib2FyZCBtaWNyb2NvbnRyb2xsZXIuIFRoZSBjb21tb24g Y29kZSB0cmFja3MgdGhlIHBoYXNlcyBvZgo+ICsgKiBmZXRjaGluZyB0aGUgZmlybXdhcmUgKGFr YSAiYmluYXJ5IGJsb2IiKSBmcm9tIGFuIGV4dGVybmFsIGZpbGUgaW50byBhIEdFTQo+ICsgKiBv YmplY3QgaW4gdGhlICd1Y19md19mZXRjaF9zdGF0dXMnIGZpZWxkIGJlbG93OyB0aGUgdUMtc3Bl Y2lmaWMgRE1BIGNvZGUKPiArICogdXNlcyB0aGUgJ3VjX2Z3X2xvYWRfc3RhdHVzJyBmaWVsZCB0 byB0cmFjayB0aGUgdHJhbnNmZXIgZnJvbSBHRU0gb2JqZWN0Cj4gKyAqIHRvIHVDIG1lbW9yeS4K PiArICoKPiArICogRm9yIHRoZSBmaXJzdCAoZmV0Y2gpIHN0YWdlLCB0aGUgaW50ZXJwcmV0YXRp b24gb2YgdGhlIHZhbHVlcyBpczoKPiArICogTk9ORSAtIG5vIGZpcm13YXJlIGlzIGJlaW5nIGZl dGNoZWQgZS5nLiBiZWNhdXNlIHRoZXJlIGlzIG5vIHVDCj4gKyAqIFBFTkRJTkcgLSBwYXJhbWV0 ZXJzIGluaXRpYWxpc2VkLCBwZW5kaW5nIGNhbGwgdG8gaW50ZWxfdWNfZndfZmV0Y2goKQo+ICsg KiBTVUNDRVNTIC0gdUMgZmlybXdhcmUgZmV0Y2hlZCBpbnRvIGEgR0VNIG9iamVjdCBhbmQgcmVh ZHkgZm9yIHVzZQo+ICsgKiBGQUlMIC0gc29tZXRoaW5nIHdlbnQgd3Jvbmc7IHVDIGZpcm13YXJl IGlzIG5vdCBhdmFpbGFibGUKPiArICoKPiArICogVGhlIHNlY29uZCAobG9hZCkgc3RhZ2UgaXMg c2ltaWxhcjoKPiArICogTk9ORSAtIG5vIGZpcm13YXJlIGlzIGJlaW5nIGxvYWRlZCBlLmcuIGJl Y2F1c2UgdGhlcmUgaXMgbm8gdUMKPiArICogUEVORElORyAtIGZpcm13YXJlIERNQSBsb2FkIGlu IHByb2dyZXNzCj4gKyAqIFNVQ0NFU1MgLSB1QyBmaXJtd2FyZSBsb2FkZWQgaW50byB1QyBtZW1v cnkgYW5kIHJlYWR5IGZvciB1c2UKPiArICogRkFJTCAtIHNvbWV0aGluZyB3ZW50IHdyb25nOyB1 QyBmaXJtd2FyZSBpcyBub3QgYXZhaWxhYmxlCj4gKyAqCj4gKyAqIFRoZSBmdW5jdGlvbiBpbnRl bF91Y19md19zdGF0dXNfcmVwcigpIHdpbGwgY29udmVydCB0aGlzIGVudW0gdG8gYQo+ICsgKiBz dHJpbmcgcmVwcmVzZW50YXRpb24gc3VpdGFibGUgZm9yIHVzZSBpbiBsb2cgbWVzc2FnZXMuCj4g KyAqLwo+ICtlbnVtIGludGVsX3VjX2Z3X3N0YXR1cyB7Cj4gKwlJTlRFTF9VQ19GSVJNV0FSRV9G QUlMID0gLTEsCj4gKwlJTlRFTF9VQ19GSVJNV0FSRV9OT05FID0gMCwKPiArCUlOVEVMX1VDX0ZJ Uk1XQVJFX1BFTkRJTkcsCj4gKwlJTlRFTF9VQ19GSVJNV0FSRV9TVUNDRVNTCj4gK307Cj4gK2Nv bnN0IGNoYXIgKmludGVsX3VjX2Z3X3N0YXR1c19yZXByKGVudW0gaW50ZWxfdWNfZndfc3RhdHVz IHN0YXR1cyk7Cj4gKwo+ICsvKgo+ICsgKiBUaGlzIHN0cnVjdHVyZSBlbmNhcHN1bGF0ZXMgYWxs IHRoZSBkYXRhIG5lZWRlZCBkdXJpbmcgdGhlIHByb2Nlc3Mgb2YKPiArICogZmV0Y2hpbmcsIGNh Y2hpbmcsIGFuZCBsb2FkaW5nIHRoZSBmaXJtd2FyZSBpbWFnZSBpbnRvIHRoZSB1Qy4KPiArICov Cj4gK3N0cnVjdCBpbnRlbF91Y19mdyB7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqCQl1Y19kZXY7 Cj4gKwljb25zdCBjaGFyICoJCQl1Y19uYW1lOwo+ICsJY29uc3QgY2hhciAqCQkJdWNfZndfcGF0 aDsKPiArCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqCQl1Y19md19ibG9iOwo+ICsJc2l6ZV90CQkJ CXVjX2Z3X3NpemU7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqCXVjX2Z3X29iajsK PiArCWVudW0gaW50ZWxfdWNfZndfc3RhdHVzCQl1Y19md19mZXRjaF9zdGF0dXM7Cj4gKwllbnVt IGludGVsX3VjX2Z3X3N0YXR1cwkJdWNfZndfbG9hZF9zdGF0dXM7Cj4gK307Cj4gKwo+ICt2b2lk IGludGVsX3VjX2Z3X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGludGVsX3Vj X2Z3ICp1Y19mdywKPiArCQljb25zdCBjaGFyICp1Y19uYW1lLCBjb25zdCBjaGFyICpmd19wYXRo KTsKPiAraW50IGludGVsX3VjX2Z3X2ZldGNoKHN0cnVjdCBpbnRlbF91Y19mdyAqdWNfZncsCj4g KwkJaW50IGNhbGxiYWNrKHN0cnVjdCBpbnRlbF91Y19mdyAqKSk7Cj4gK3ZvaWQgaW50ZWxfdWNf ZndfZmluaShzdHJ1Y3QgaW50ZWxfdWNfZncgKnVjX2Z3KTsKPiArCj4gKy8qCj4gKyAqIFRoZSBj YWxsYmFjaygpIGZ1bmN0aW9uIHBhc3NlZCB0byBpbnRlbF91Y19md19mZXRjaCgpIGFib3ZlIGNh biByZXR1cm4KPiArICogYSBuZWdhdGl2ZSBudW1iZXIgKGEgc3RhbmRhcmQgZXJyb3IgY29kZSks IG9yIG9uZSBvZiB0aGUgdmFsdWVzIGJlbG93Ogo+ICsgKi8KPiArI2RlZmluZQlJTlRFTF9VQ19G V19HT09ECTEJLyogZi93IGdvb2QsIHNhdmUgaW4gR0VNIG9iamVjdAkqLwo+ICsjZGVmaW5lCUlO VEVMX1VDX0ZXX1NBVkVECTIJLyogZi93IGdvb2QsIGFscmVhZHkgc2F2ZWQJKi8KPiArCj4gKyNl bmRpZgo+IC0tIAo+IDEuOS4xCj4gCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KPiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4gSW50ZWwtZ2Z4QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwo+IGh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9pbnRlbC1nZngKCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJ bnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVs LWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=