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: Wed, 24 Jun 2015 12:29:16 +0200 Message-ID: <20150624102916.GC25769@phenom.ffwll.local> References: <1434393394-21002-1-git-send-email-david.s.gordon@intel.com> <1434393394-21002-3-git-send-email-david.s.gordon@intel.com> <20150617120533.GR23637@phenom.ffwll.local> <5582B576.8050505@intel.com> <20150618144949.GD7752@phenom.ffwll.local> <5583D61F.7060104@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wg0-f52.google.com (mail-wg0-f52.google.com [74.125.82.52]) by gabe.freedesktop.org (Postfix) with ESMTP id 94CAB6E8B8 for ; Wed, 24 Jun 2015 03:26:31 -0700 (PDT) Received: by wgbhy7 with SMTP id hy7so32218351wgb.2 for ; Wed, 24 Jun 2015 03:26:30 -0700 (PDT) Content-Disposition: inline In-Reply-To: <5583D61F.7060104@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 T24gRnJpLCBKdW4gMTksIDIwMTUgYXQgMDk6NDM6MTFBTSArMDEwMCwgRGF2ZSBHb3Jkb24gd3Jv dGU6Cj4gT24gMTgvMDYvMTUgMTU6NDksIERhbmllbCBWZXR0ZXIgd3JvdGU6Cj4gPiBPbiBUaHUs IEp1biAxOCwgMjAxNSBhdCAwMToxMTozNFBNICswMTAwLCBEYXZlIEdvcmRvbiB3cm90ZToKPiA+ PiBPbiAxNy8wNi8xNSAxMzowNSwgRGFuaWVsIFZldHRlciB3cm90ZToKPiA+Pj4gT24gTW9uLCBK dW4gMTUsIDIwMTUgYXQgMDc6MzY6MjBQTSArMDEwMCwgRGF2ZSBHb3Jkb24gd3JvdGU6Cj4gPj4+ PiBDdXJyZW50IGRldmljZXMgbWF5IGNvbnRhaW4gb25lIG9yIG1vcmUgcHJvZ3JhbW1hYmxlIG1p Y3JvY29udHJvbGxlcnMKPiA+Pj4+IHRoYXQgbmVlZCB0byBoYXZlIGEgZmlybXdhcmUgaW1hZ2Ug KGFrYSAiYmluYXJ5IGJsb2IiKSBsb2FkZWQgZnJvbSBhbgo+ID4+Pj4gZXh0ZXJuYWwgbWVkaXVt IGFuZCB0cmFuc2ZlcnJlZCB0byB0aGUgZGV2aWNlJ3MgbWVtb3J5Lgo+ID4+Pj4KPiA+Pj4+IFRo aXMgZmlsZSBwcm92aWRlcyBnZW5lcmljIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBkb2luZyB0aGlz OyB0aGV5IGNhbgo+ID4+Pj4gdGhlbiBiZSB1c2VkIGJ5IGVhY2ggdUMtc3BlY2lmaWMgbG9hZGVy LCB0aHVzIHJlZHVjaW5nIGNvZGUgZHVwbGljYXRpb24KPiA+Pj4+IGFuZCB0ZXN0aW5nIGVmZm9y dC4KPiA+Pj4+Cj4gPj4+PiBTaWduZWQtb2ZmLWJ5OiBEYXZlIEdvcmRvbiA8ZGF2aWQucy5nb3Jk b25AaW50ZWwuY29tPgo+ID4+Pj4gU2lnbmVkLW9mZi1ieTogQWxleCBEYWkgPHl1LmRhaUBpbnRl bC5jb20+Cj4gPj4+Cj4gPj4+IEdpdmVuIHRoYXQgSSdtIGp1c3Qgc2hyZWRkaW5nIHRoZSBzeW5j aHJvbml6YXRpb24gdXNlZCBieSB0aGUgZG1jIGxvYWRlcgo+ID4+PiBJJ20gbm90IGNvbnZpbmNl ZCB0aGlzIGlzIGEgZ29vZCBpZGVhLiBBYnN0cmFjdGlvbiBoYXMgY29zdCwgYW5kIGEgYml0IG9m Cj4gPj4+IGNvcHktcGFzdGUgZm9yIHNpbWlsYXIgc291bmRpbmcgYnV0IHNsaWdodGx5IGRpZmZl cmVudCB0aGluZ3MgZG9lc24ndAo+ID4+PiBzb3VuZCBhd2Z1bCB0byBtZS4gQW5kIHRoZSBjcml0 aWNhbCBiaXQgaW4gYWxsIHRoZSBmaXJtd2FyZSBsb2FkaW5nIEkndmUKPiA+Pj4gc2VlbiB0aHVz IGZhciBpcyBpbiBzeW5jaHJvbml6aW5nIHRoZSBsb2FkaW5nIHdpdGggb3RoZXIgb3BlcmF0aW9u cywKPiA+Pj4gaGlkaW5nIHRoYXQgaXNuJ3QgYSBnb29kIGlkZWEuIFdvcnNlIGlmIHdlIGVuZm9y Y2Ugc3R1ZmYgbGlrZSByZXF1aXJpbmcKPiA+Pj4gZGV2LT5zdHJ1Y3RfbXV0ZXguCj4gPj4+IC1E YW5pZWwKPiA+Pgo+ID4+IEl0J3MgcHJlY2lzZWx5IGJlY2F1c2UgaXQncyBpbiBzb21lIHNlbnNl ICJ0cml2aWFsLWJ1dC10cmlja3kiIHRoYXQgd2UKPiA+PiBzaG91bGQgd3JpdGUgaXQgb25jZSwg Z2V0IGl0IHJpZ2h0LCBhbmQgdXNlIGl0IGV2ZXJ5d2hlcmUuIENvcHlwYXN0ZQo+ID4+IC9kb2Vz LyBzb3VuZCBhd2Z1bDsgSSd2ZSBzZWVuIGhvdyB0aGUgY29kZSB0aGlzIHdhcyBkZXJpdmVkIGZy b20gaGFkCj4gPj4gYWxyZWFkeSBiZWVuIGNsb25lZCBpbnRvIHRocmVlIGZsYXZvdXJzLCBhbGwg ZGlmZmVyZW50IGFuZCBhbGwgd3JvbmcuCj4gPj4KPiA+PiBJdCdzIGEgdmVyeSBzaW1wbGUgYWJz dHJhY3Rpb246IG9uZSBlYXJseSBjYWxsIHRvIGtpY2sgdGhpbmdzIG9mZiBhcwo+ID4+IGVhcmx5 IGFzIHBvc3NpYmxlLCBubyBsb2NraW5nIHJlcXVpcmVkLiBPbmUgbGF0ZSBjYWxsIHdpdGggdGhl Cj4gPj4gc3RydWN0X211dGV4IGhlbGQgdG8gY29tcGxldGUgdGhlIHN5bmNocm9uaXNhdGlvbiBh bmQgYWN0dWFsbHkgZG8gdGhlCj4gPj4gd29yaywgdGh1cyBndWFyYW50ZWVpbmcgdGhhdCB0aGUg dHJhbnNmZXIgdG8gdGhlIHRhcmdldCB1QyBpcyBkb25lIGluIGEKPiA+PiBjb250cm9sbGVkIGZh c2hpb24sIGF0IGEgdGltZSBvZiB0aGUgY2FsbGVyJ3MgY2hvaWNlLCBhbmQgYnkgdGhlCj4gPj4g ZHJpdmVyJ3MgbWFpbmxpbmUgdGhyZWFkLCBOT1QgYnkgYW4gYXN5bmNocm9ub3VzIHRocmVhZCBy YWNpbmcgd2l0aAo+ID4+IG90aGVyIGFjdGl2aXR5ICh3aGljaCB3YXMgb25lIG9mIHRoZSB0aGlu Z3Mgd3Jvbmcgd2l0aCB0aGUgb3JpZ2luYWwKPiA+PiB2ZXJzaW9uKS4KPiA+IAo+ID4gWWVhaCBJ J3ZlIHNlZW4gdGhlIG9yaWdpbnMgb2YgdGhpcyBpbiB0aGUgZGlzcGxheSBjb2RlLCBhbmQgdGhh dCBjb2RlIGdldHMKPiA+IHRoZSBzeW5jaW5nIHdyb25nLiBUaGUgb25seSB0aGluZyB0aGF0IG9u ZSBoYXMgZG8gdG8gaXMgZ3JhYiBhIHJ1bnRpbWUgcG0KPiA+IHJlZmVyZW5jZSBmb3IgdGhlIGFw cHJvcHJpYXRlIHBvd2VyIHdlbGwgdG8gcHJldmVudCBkYzUgZW50cnksIGFuZCByZWxlYXNlCj4g PiBpdCB3aGVuIHRoZSBmaXJtd2FyZSBpcyBsb2FkZWQgYW5kIGluaXRpYWxpemVkLgo+IAo+IEFn cmVlZC4KPiAKPiA+IFdoaWNoIG1lYW5zIGFueSBraW5kIG9mIGZpcm13YXJlIGxvYWRlciB3aGlj aCByZXF1aXJlcy91c2VzCj4gPiBkZXYtPnN0cnVjdF9tdXRleCBnZXQgc3R1ZmYgd3JvbmcgYW5k IGlzIG5vdCBhcHByb3ByaWF0ZSBldmVyeXdoZXJlLgo+IAo+IEJVVCwgdGhlIGxvYWRpbmcgb2Yg dGhlIGZpcm13YXJlIGludG8gYW55IHVDIE1VU1QgYmUgZG9uZSBpbiBhCj4gY29udHJvbGxlZCBt YW5uZXIgaS5lLiBhdCBhIHRpbWUgd2hlbiBubyBvdGhlciB0aHJlYWQgaXMgdG91Y2hpbmcgdGhl Cj4gaC93LiBPdGhlcndpc2UgdGhlIGYvdyBsb2FkIGFuZCB3aGF0ZXZlciBlbHNlIGlzIGNvbmN1 cnJlbnRseSBhY2Nlc3NpbmcKPiB0aGUgaC93IGNvdWxkIGluIHNvbWUgY2FzZXMgaW50ZXJmZXJl IGRpc2FzdHJvdXNseS4gRXhhbXBsZXMgb2YKPiBpbnRlcmZlcmVuY2UgbWlnaHQgYmU6Cj4gCj4g KiBpbnRlcmxlYXZlZCBhY2Nlc3NlcyB0byB0aGUgRUxTUCAoaW4gdGhlIGNhc2Ugb2YgdGhlIEd1 QykKPiAqIGluY29ycmVjdCBoYW5kb3ZlciBvZiBwb3dlciBtYW5hZ2VtZW50IChETUMsIEd1QykK PiAqIGVycm9uZW91cyBtYW5hZ2VtZW50IG9mIGZvcmNld2FrZSBzdGF0ZQo+IAo+IEluIGdlbmVy YWwgdGhlIGYvdyB0aGF0IGlzIGp1c3Qgc3RhcnRpbmcgb24gdGhlIHVDIG1heSBoYXZlIGNlcnRh aW4KPiBleHBlY3RhdGlvbnMgYWJvdXQgdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIGgvdywgd2hp Y2ggbWF5IG5vdCBiZSBtZXQgaWYKPiBvdGhlciB0aHJlYWRzIGFyZSBhY2Nlc3NpbmcgdmFyaW91 cyBiaXRzIG9mIGgvdyB3aGlsZSB0aGUgdUMgaXMgYm9vdGluZyB1cC4KPiAKPiBTbyB3ZSBhYnNv bHV0ZWx5IG5lZWQgdG8gZ3VhcmFudGVlIHRoYXQgdGhlIGYvdyBsb2FkIGlzIGRvbmUgYnkgYSB0 aHJlYWQKPiB3aGljaCBoYXMgZXhjbHVzaXZlIG93bmVyc2hpcCBvZiBhbnkgYml0IG9mIHRoZSBo L3cgdGhhdCB0aGUgZi93IGlzCj4gZ29pbmcgdG8gbWFrZSBhc3N1bXB0aW9ucyBhYm91dC4gV2l0 aCB0aGUgY3VycmVudCBsb2NraW5nIHN0cnVjdHVyZSBvZgo+IHRoZSBkcml2ZXIsIHRoYXQgbWVh bnMgaG9sZGluZyB0aGUgc3RydWN0X211dGV4IChpdCBzaG91bGRuJ3QgcmVhbGx5LAo+IHRoZXJl IHNob3VsZCBiZSBhIHNlcGFyYXRlIG11dGV4IGZvciBoL3cgcmVnaXN0ZXIgYWNjZXNzIHZzLgo+ IGRyaXZlci1wcml2YXRlIGRhdGEgc3RydWN0dXJlcywgYnV0IHRoZXJlIGlzbid0KS4KCklmIHlv dSByZWFsbHkgbmVlZCB0aGlzIGd1YXJhbnRlZSAoYW5kIEkgc2VyaW91c2x5IGhvcGUgbm90KSB0 aGVuIHRoZSBvbmx5Cm9wdGlvbiBpcyBhIHN5bmNocm9ub3VzIGZpcm13YXJlIGxvYWQgYXQgZHJp dmVyIGluaXQgX2JlZm9yZV8gd2UgbGF1bmNoCmFueSBvZiB0aGUgYXN5bmNocm9ub3VzIHNldHVw IGNvZGUuIEFuZCB0aGVyZSBpcyBhbHJlYWR5IGEgbG90IG9mIHRoYXQsCmFuZCB3ZSdyZSBhZGRp bmcgbW9yZSBhbGwgdGhlIHRpbWUuCgpXaGF0IEkgZXhwZWN0IHdlIG5lZWQgaXMgc3luY2hyb25p emF0aW9uIG9mIGp1c3QgdGhlIHJldmVsYW50IHBhcnQgd2l0aAp0aGUgZmlybXdhcmUgbG9hZGlu Zywgd2hpY2ggbmVjZXNzYXJpbHkgbmVlZHMgdG8gYmUgc29tZXdoYXQgYXN5bmMgdG8gYmUKYWJs ZSB0byBzdXBwb3J0IGNyb3MvYW5kcm9pZCByZXF1aXJlbWVudHMuIEFuZCB5ZXMgdGhhdCBuZWVk cyB0byBiZSBkb25lCmluIGEgY29udHJvbGxlZCBtYW5uZXIsIGJ1dCBtb3N0IGxpa2VseSB3ZSBu ZWVkIHZlcnkgc3BlY2lmaWMgc29sdXRpb25zCmZvciB0aGUgcHJvYmxlbSBhdCBoYW5kLiBVbmNv bmRpdGlvbmFsbHkgaG9sZGluZyBkZXYtPnN0cnVjdF9tdXRleCBpc24ndAp0aGF0IHNvbHV0aW9u LgoKVGhlIG90aGVyIHByb2JsZW0gd2l0aCBkZXYtPnN0cnVjdF9tdXRleCBpcyB0aGF0IGl0J3Mg YSBnaWFudGljIGxvY2sgd2l0aAppbGwgZGVmaW5lZCBjb3ZlcmFnZSBhbmQgc2VtYW50aWNzLiBJ dCdzIGltbyB0aGUgYmlnZ2VzdCBwaWVjZSBvZgp0ZWNobmljYWwgZGVidCB3ZSBjYXJyeSBhcm91 bmQgaW4gaTkxNS5rbywgYW5kIHdlIHBheSB0aGUgcHJpY2UgZm9yIHRoYXQKZGVhcmx5JmRhaWx5 LiBXaGljaCBtZWFucyB0aGF0IHNpbmNlIGEgZmV3IHllYXJzIGFueSBraW5kIG9mIGNvZGUKd2hp Y2ggZXh0ZW5kZWQgZGV2LT5zdHJ1Y3RfbXV0ZXggdG8gYW55dGhpbmcgbm90IGNsZWFybHkgY29y ZSBnZW0gZGF0YQpzdHJ1Y3R1cmVzIHdhcyByZWplY3RlZC4KCj4gPj4gV2Ugc2hvdWxkIGNvbnZl cnQgdGhlIERNQyBsb2FkZXIgdG8gdXNlIHRoaXMgdG9vLCBzbyB0aGVyZSBuZWVkIGJlIG9ubHkK PiA+PiBvbmUgYml0IG9mIGNvZGUgaW4gdGhlIHdob2xlIGRyaXZlciB0aGF0IG5lZWRzIHRvIHVu ZGVyc3RhbmQgaG93IHRvIHVzZQo+ID4+IGNvbXBsZXRpb25zIHRvIGdldCBjb3JyZWN0IGhhbmRv dmVyIGZyb20gYSBmcmVlLXJ1bm5pbmcgbm8tbG9ja3MtaGVsZAo+ID4+IHRocmVhZCB0byB0aGUg cHJvcGVybHkgZGlzY2lwbGluZWQgZW52aXJvbm1lbnQgb2YgZHJpdmVyIG1haW5saW5lIGZvcgo+ ID4+IHB1cnBvc2VzIG9mIHByb2dyYW1taW5nIHRoZSBoL3cuCj4gPiAKPiA+IE5hY2sgb24gdXNp bmcgdGhpcyBmb3IgZG1jLCBzaW5jZSBJIHdhbnQgdGhlbSB0byBjb252ZXJ0IGl0IHRvIHRoZSBh Ym92ZQo+ID4gc3luY2hyb25pemF0aW9uLCBzaW5jZSB0aGF0J3MgaG93IGFsbCB0aGUgb3RoZXIg YXN5bmMgcG93ZXIgaW5pdGlhbGl6YXRpb24KPiA+IGlzIGRvbmUuCj4gPiAKPiA+IEd1YyBpcyBk aWZmZXJlbnQgc2luY2Ugd2UgcmVhbGx5IG11c3QgaGF2ZSBpdCByZWFkeSBmb3IgZXhlY2J1Ziwg YW5kIGZvcgo+ID4gdGhhdCB1c2VjYXNlIGEgY29tcGxldGlvbiBhdCBkcm1fb3BlbiB0aW1lIHNv dW5kcyBsaWtlIHRoZSByaWdodCB0aGluZy4KPiA+IAo+ID4gQXMgYSBydWxlIG9mIHRodW1iIGZv ciByZWZhY3RvcmluZyBhbmQgc2hhcmUgaW5mYXN0cnVjdHVyZSB3ZSB1c2UgdGhlCj4gPiBmb2xs b3dpbmcgcmVjaXBlIGluIGRybToKPiA+IC0gZmlyc3QgZHJpdmVyIGltcGxlbWVudHMgdGhpbmdz IGFzIHN0cmFpZ2h0Zm9yd2FyZCBhcyBwb3NzaWJsZQo+ID4gLSAybmQgdXNlciBjb3B5cGFzdGVz Cj4gPiAtIDNyZCBvbmUgaGFzIHRoZSBkdXR5IHRvIGZpZ3VyZSBvdXQgd2hldGhlciBzb21lIHJl ZmFjdG9yaW5nIGlzIGluIG9yZGVyCj4gPiAgIG9yIG5vdC4KPiA+IEltbyB0aGF0IGFwcHJvYWNo IGxlYWRzIGEgcmVhbGx5IGdvb2QgYmFsYW5jZSBiZXR3ZWVuIGF2b2lkaW5nCj4gPiBvdmVyZW5n aW5lZXJpbmcgYW5kIGhhdmluZyBtYWludGFpbmFibGUgY29kZS4KPiAKPiBXZSd2ZSBhbHJlYWR5 IGJlZW4gdGhyb3VnaCB0aGVzZSBwaGFzZXM7IHRoZSBjb2RlIGhhcyBhbHJlYWR5IGJlZW4KPiBj bG9uZWQgdHdpY2UgKGFuZCB0aGVuIGNoYW5nZWQsIGJ1dCBub3QgZW5vdWdoIHRvIGZpeCB0aGUg cHJvYmxlbXMgd2l0aAo+IHRoZSBvcmlnaW5hbCkgYW5kIHRoZW4gd2hlbiBJIGZvdW5kIHRoZSBp c3N1ZXMgd2l0aCB0aGUgR3VDIGxvYWRlciBhbmQKPiBub3RpY2VkIHRoZSBoaWxhcmlvdXMgb3du ZXJzaGlwIGRhbmNlIGl0IHdhcyBkb2luZyBkdXJpbmcgaGFuZG92ZXIgSQo+IHJlYWxpc2VkIGl0 IHdhcyB0aW1lIHRvIGZpeCBpdCBpbiBvbmUgcGxhY2UgcmF0aGVyIHRoYW4gc2V2ZXJhbCwgYW5k Cj4gcG9zdGVkIGEgcGF0Y2hzZXQgdG8gdGhlIGludGVybmFsIG1haWxpbmcgbGlzdCBvbiAyMDE1 LTAyLTI0IHdpdGggdGhpcwo+IGNvbW1lbnRhcnk6Cj4gCj4gPiBUaGUgR3VDIGxvYWRlciB1c2Vz IGFuIGFzeW5jaHJvbm91cyB0aHJlYWQgdG8gZmV0Y2ggdGhlIGZpcm13YXJlIGltYWdlCj4gPiAo YWthICJiaW5hcnkgYmxvYiIpIGZyb20gYSBmaWxlIGFuZCBsb2FkIGl0IGludG8gdGhlIEd1Qydz IG1lbW9yeS4KPiA+IFVuZm9ydHVuYXRlbHkgdGhlIEd1QyBsb2FkaW5nIG9jY3VycyAqYWZ0ZXIq IHRoZSBpbnRlcm5hbGx5LWdlbmVyYXRlZAo+ID4gYmF0Y2hlcyB1c2VkIHRvIGluaXRpYWxpc2Ug Y29udGV4dHMgaGF2ZSBhbHJlYWR5IGJlZW4gc3VibWl0dGVkIHVzaW5nCj4gPiBkaXJlY3QgYWNj ZXNzIHRvIHRoZSBFTFNQLiAgQWxzbywgdGhlIGZpcm13YXJlIGVuZHMgdXAgYmVpbmcgbG9hZGVk IGF0Cj4gPiBhbiBpbmRldGVybWluYXRlIHRpbWUsIHdpdGggY29uc2VxdWVudCBwb3RlbnRpYWwg Zm9yIGNvbmZ1c2lvbiBpbiB0aGUKPiA+IHN3aXRjaG92ZXIgZnJvbSBFTFNQLSB0byBHdUMtYmFz ZWQgc3VibWlzc2lvbi4KPiA+IAo+ID4gVGhpcyBwYXRjaCBzZXJpZXMgdGhlcmVmb3JlIHJlb3Jn YW5pc2VzIHRoZSBHdUMgbG9hZGVyIHRvIGVuc3VyZSB0aGF0Cj4gPiB0aGUgbG9hZGluZyBwcm9j ZXNzIG9jY3VycyBib3RoIGVhcmx5IGVub3VnaCBhbmQgYXQgYSB3ZWxsLWRlZmluZWQKPiA+IHBv aW50IGluIHRoZSBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGR1cmluZyBkcml2ZXIgaW5pdGlhbGlz YXRpb24sCj4gPiBzcGVjaWZpY2FsbHkgKmJlZm9yZSogYW55IGJhdGNoZXMgYXJlIHN1Ym1pdHRl ZCB0byBoYXJkd2FyZS4KPiA+IAo+ID4gW1BBVENIIDEvM10gR3VDOiByZW9yZ2FuaXNlIHNvdXJj ZSBiZWZvcmUgcmV3cml0aW5nIHRoaXMgY29kZQo+ID4gW1BBVENIIDIvM10gR3VDOiBsb2FkIGZp cm13YXJlIGltYWdlIGZyb20gbWFpbiB0aHJlYWQKPiA+IFtQQVRDSCAzLzNdIEd1QzogdXBkYXRl IG5hbWVzICYgY29tbWVudHMgKCJsb2FkIiA9PiAiZmV0Y2giKQo+IAo+IGZvbGxvd2VkIGJ5IFtQ QVRDSCAwLzJdIHVuaWZ5IGFuZCB0aWR5IGZpcm13YXJlIGxvYWRpbmcgY29kZQo+IG9uIDIwMTUt MDMtMDIuCj4gCj4gRm9yIHRoZSBETUMgbW9kdWxlLCB0aGUgYmFzaWMgY29udmVyc2lvbiBwcm9j ZXNzIGlzIHRvIHNlcGFyYXRlCj4gaW50ZWxfY3NyX2xvYWRfcHJvZ3JhbSgpIGZyb20gZmluaXNo X2Nzcl9sb2FkKCkuIFRoZSBsYXR0ZXIgd291bGQgcmVtYWluCj4gYXMgdGhlIGNhbGxiYWNrIGlu IHRoZSBhc3luYyB0aHJlYWQgbG9hZGluZyBwcm9jZXNzIHRoYXQgaGFzIHRvIHZhbGlkYXRlCj4g dGhlIGxvYWRlZCBpbWFnZTsgdGhlIGZvcm1lciB3b3VsZCB0aGVuIGJlY29tZSB0aGUgY2FsbGJh Y2sgZm9yIHRoZQo+IHN5bmNocm9ub3VzIHBvc3QtaGFuZG92ZXIgdHJhbnNmZXIgb2YgdGhlIGlt YWdlIHRvIHRoZSBoL3cuCj4gCj4gQlRXLCB0aGUgZXhpc3RpbmcgRE1DIGxvYWRlciBwcm9iYWJs eSB3b24ndCB3b3JrIG9uIEFuZHJvaWQgOigKClllYWggSSBjb21wbGV0ZWx5IG1pc3NlZCBvdXQg b24gdGhpcyBmdW4gc2luY2UgSSBwcmVzdW1lZCB0aGF0IGZpcm13YXJlCmxvYWRpbmcgaXMgZWFz eSBhbmQgc2ltcGxlLiBBbmQgaWYgeW91IGxvb2sgYXJvdW5kIG9uIG90aGVyIGRybSBkcml2ZXJz IGl0CmluZGVlZCBpcywgdGhleSBhbGwgdXNlIGEgc3luY2hyb25vdXMgcmVxdWVzdF9maXJtd2Fy ZSBhbmQgaWYgdGhlIGZpcm13YXJlCmlzbid0IHRoZXJlLCB0aGV5IGp1c3QgZmFsbCBvdmVyIChm dWxseSBpbiB0aGUgY2FzZSBvZiByYWRlb24ua28sCnBhcnRpYWxseSBpbiB0aGUgY2FzZSBvZiBu b3V2ZWF1LmtvIHNpbmNlIHRoZXkgaGF2ZSBhbGwgdGhlIHN1cHBvcnQgaW4KcGxhY2UgZm9yIGhh bmRsaW5nIGEga21zLW9ubHkgYWNjZWwtbGVzcyBncHUgaW4gdXNlcnNwYWNlIGFueXdheSwgbGlr ZSB3ZQpkbykuIEJ1dCBmb3IgYSBidW5jaCBvZiByZWFzb25zIChhZmFpayBpdCdzICJ5b3UgY2Fu J3QgaW5jbHVkZSBhIGJsb2IgaW4gYQpncGwtZWQga2VybmVsIGltYWdlIiB3ZSBuZWVkIGFzeW5j IGZpcm13YXJlIGxvYWRpbmcgZm9yIGNyb3MmYW5kcm9pZCkuCgpUaGF0IGxlYXZlcyB1cyB3aXRo IGEgc2l0dWF0aW9uIHdoZXJlIHdlIHNob3VsZCBoYXZlIGRvbmUgYSBzcGVjaWFsIGRlc2lnbgpk aXNjdXNzaW9uIGFib3V0IGFzeW5jaHJvbm91cyBmaXJtd2FyZSwgYnV0IHNvbWVob3cgZmFpbGVk IGRvIHRvIHRoYXQuCldoaWNoIGxlYXZlcyB1cyBpbiBhIHZlcnkgdWdseSBwb3NpdGlvbi4KCkkg dGFsa2VkIHdpdGggYSBidW5jaCBvZiBwZW9wbGUgb3ZlciB0aGUgcGFzdCBmZXcgZGF5cyB0byBm aWd1cmUgb3V0IGhvdwp0aGlzIGlzIHN1cHBvc2VkIHRvIHdvcmsgYW5kIGFsc28gZmlndXJlIG91 dCB3aHkgaXQncyBiZWluZyBkb25lIGxpa2UgdGhhdAp0b2RheS4gSSB0aGluayBJIGhhdmUgYSBy ZWFzb25hYmxlIGdvb2QgcGxhbiBmb3IgbW92aW5nIGZvcndhcmQgdG9vLiBJJ2xsCnN0YXJ0IGEg bmV3IHRvcC1sZXZlbCB0aHJlYWQgaGVyZSB0byBkaXNjdXNzIHRoaXMuCgpUaGFua3MsIERhbmVp bAotLSAKRGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24K aHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9p bnRlbC1nZngK