From mboxrd@z Thu Jan 1 00:00:00 1970 From: James Jones Subject: Re: [PATCH] drm: Generalized NV Block Linear DRM format mod Date: Wed, 16 Oct 2019 10:24:19 -0700 Message-ID: <408fff0a-5e99-ba63-0657-d40bd3d398b0@nvidia.com> References: <20191014221321.8163-1-jajones@nvidia.com> <20191014221321.8163-2-jajones@nvidia.com> <20191015141913.GO11828@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: nouveau-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Nouveau" To: Daniel Vetter Cc: David Airlie , Nouveau Dev , Ben Skeggs , dri-devel List-Id: nouveau.vger.kernel.org T24gMTAvMTUvMTkgODo0MiBBTSwgRGFuaWVsIFZldHRlciB3cm90ZToKPiBPbiBUdWUsIE9jdCAx NSwgMjAxOSBhdCA1OjE0IFBNIEphbWVzIEpvbmVzIDxqYWpvbmVzQG52aWRpYS5jb20+IHdyb3Rl Ogo+Pgo+PiBPbiAxMC8xNS8xOSA3OjE5IEFNLCBEYW5pZWwgVmV0dGVyIHdyb3RlOgo+Pj4gT24g TW9uLCBPY3QgMTQsIDIwMTkgYXQgMDM6MTM6MjFQTSAtMDcwMCwgSmFtZXMgSm9uZXMgd3JvdGU6 Cj4+Pj4gQnVpbGRzIHVwb24gdGhlIGV4aXN0aW5nIE5WSURJQSAxNkJ4MiBibG9jayBsaW5lYXIK Pj4+PiBmb3JtYXQgbW9kaWZpZXJzIGJ5IGFkZGluZyBtb3JlICJmaWVsZHMiIHRvIHRoZQo+Pj4+ IGV4aXN0aW5nIHBhcmFtZXRlcml6ZWQKPj4+PiBEUk1fRk9STUFUX01PRF9OVklESUFfMTZCWDJf QkxPQ0sgZm9ybWF0IG1vZGlmaWVyCj4+Pj4gbWFjcm8gdGhhdCBhbGxvdyBmdWxseSBkZWZpbmlu ZyBhIHVuaXF1ZS1hY3Jvc3MtCj4+Pj4gYWxsLU5WSURJQS1oYXJkd2FyZSBiaXQgbGF5b3V0IHVz aW5nIGEgbWluaW1hbAo+Pj4+IHNldCBvZiBmaWVsZHMgYW5kIHZhbHVlcy4gIFRoZSBuZXcgbW9k aWZpZXIgbWFjcm8KPj4+PiBEUk1fRk9STUFUX01PRF9OVklESUFfQkxPQ0tfTElORUFSXzJEIGlz Cj4+Pj4gZWZmZWN0aXZlbHkgYmFja3dhcmRzIGNvbXBhdGlibGUgd2l0aCB0aGUgZXhpc3RpbmcK Pj4+PiBtYWNybywgaW50cm9kdWNpbmcgYSBzdXBlcnNldCBvZiB0aGUgcHJldmlvdXNseQo+Pj4+ IGRlZmluYWJsZSBmb3JtYXQgbW9kaWZpZXJzLgo+Pj4+Cj4+Pj4gQmFja3dhcmRzIGNvbXBhdGli aWxpdHkgaGFzIHR3byBxdWlya3MuICBGaXJzdCwKPj4+PiB0aGUgemVybyB2YWx1ZSBmb3IgdGhl ICJraW5kIiBmaWVsZCwgd2hpY2ggaXMKPj4+PiBpbXBsaWVkIGJ5IHRoZSBEUk1fRk9STUFUX01P RF9OVklESUFfMTZCWDJfQkxPQ0sKPj4+PiBtYWNybywgbXVzdCBiZSBzcGVjaWFsIGNhc2VkIGlu IGRyaXZlcnMgYW5kCj4+Pj4gYXNzdW1lZCB0byBtYXAgdG8gdGhlIHByZS1UdXJpbmcgZ2VuZXJp YyBraW5kIG9mCj4+Pj4gMHhmZSwgc2luY2UgYSBraW5kIG9mICJ6ZXJvIiBpcyByZXNlcnZlZCBm b3IKPj4+PiBsaW5lYXIgYnVmZmVyIGxheW91dHMgb24gYWxsIEdQVXMuCj4+Pj4KPj4+PiBTZWNv bmQsIGl0IGlzIGFzc3VtZWQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKPj4+PiBpcyBvbmx5IG5l ZWRlZCB3aGVuIHJ1bm5pbmcgb24gVGVncmEgR1BVcywgYW5kCj4+Pj4gc3BlY2lmaWNhbGx5IFRl Z3JhIEdQVXMgcHJpb3IgdG8gWGF2aWVyLiAgVGhpcwo+Pj4+IGlzIGJhc2VkIG9uIHR3byBhc3Nl cnRpb25zOgo+Pj4+Cj4+Pj4gLVRlZ3JhIEdQVXMgcHJpb3IgdG8gWGF2aWVyIHVzZWQgYSBzbGln aHRseQo+Pj4+ICAgIGRpZmZlcmVudCByYXcgYml0IGxheW91dCB0aGFuIGRlc2t0b3AgR1BVcywK Pj4+PiAgICBtYWtpbmcgaXQgaW1wb3NzaWJsZSB0byBkaXJlY3RseSBzaGFyZSBibG9jawo+Pj4+ ICAgIGxpbmVhciBidWZmZXJzIGJldHdlZW4gdGhlIHR3by4KPj4+Pgo+Pj4+IC1TdXBwb3J0IGZv ciB0aGUgZXhpc3RpbmcgYmxvY2sgbGluZWFyIG1vZGlmaWVycwo+Pj4+ICAgIHdhcyBpbmNvbXBs ZXRlLCBtYWtpbmcgdGhlbSB1c2VmdWwgb25seSBmb3IKPj4+PiAgICBleHBvcnRpbmcgYnVmZmVy cyBjcmVhdGVkIGJ5IG5vdXZlYXUgYW5kCj4+Pj4gICAgaW1wb3J0aW5nIHRoZW0gdG8gVGVncmEg RFJNIGFzIGZyYW1lYnVmZmVycyBmb3IKPj4+PiAgICBzY2FuIG91dC4gIFRoZXJlIHdhcyBubyBz dXBwb3J0IGZvciBhZGRpbmcKPj4+PiAgICBmcmFtZWJ1ZmZlcnMgdXNpbmcgZm9ybWF0IG1vZGlm aWVycyBpbiBub3V2ZWF1LAo+Pj4+ICAgIG5vciBpbXBvcnRpbmcgZG1hLWJ1Zi9QUklNRSBHRU0g b2JqZWN0cyBpbnRvCj4+Pj4gICAgbm91dmVhdSB1c2Vyc3BhY2UgZHJpdmVycyB3aXRoIG1vZGlm aWVycyBpbiBNZXNhLgo+Pj4+Cj4+Pj4gSGVuY2UgaXQgaXMgYXNzdW1lZCB0aGUgcHJpb3IgbW9k aWZpZXJzIHdlcmUgbm90Cj4+Pj4gaW50ZW5kZWQgZm9yIHVzZSBvbiBkZXNrdG9wIEdQVXMsIGFu ZCBhcyBhCj4+Pj4gY29ycm9sYXJ5LCB3ZXJlIG5vdCBpbnRlbmRlZCB0byBzdXBwb3J0IHNoYXJp bmcKPj4+PiBibG9jayBsaW5lYXIgYnVmZmVycyBhY3Jvc3MgdHdvIGRpZmZlcmVudCBOVklESUEK Pj4+PiBHUFVzLgo+Pj4+Cj4+Pj4gU2lnbmVkLW9mZi1ieTogSmFtZXMgSm9uZXMgPGpham9uZXNA bnZpZGlhLmNvbT4KPj4+PiAtLS0KPj4+PiAgICBpbmNsdWRlL3VhcGkvZHJtL2RybV9mb3VyY2Mu aCB8IDEwOCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tCj4+Pj4gICAgMSBmaWxl IGNoYW5nZWQsIDEwMCBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQo+Pj4+Cj4+Pj4gZGlm ZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0vZHJtX2ZvdXJjYy5oIGIvaW5jbHVkZS91YXBpL2Ry bS9kcm1fZm91cmNjLmgKPj4+PiBpbmRleCAzZmVlYWEzZjk4N2EuLmNjOTg1M2Q0MmEyNCAxMDA2 NDQKPj4+PiAtLS0gYS9pbmNsdWRlL3VhcGkvZHJtL2RybV9mb3VyY2MuaAo+Pj4+ICsrKyBiL2lu Y2x1ZGUvdWFwaS9kcm0vZHJtX2ZvdXJjYy5oCj4+Pj4gQEAgLTQ5Nyw3ICs0OTcsOTkgQEAgZXh0 ZXJuICJDIiB7Cj4+Pj4gICAgI2RlZmluZSBEUk1fRk9STUFUX01PRF9OVklESUFfVEVHUkFfVElM RUQgZm91cmNjX21vZF9jb2RlKE5WSURJQSwgMSkKPj4+Pgo+Pj4+ICAgIC8qCj4+Pj4gLSAqIDE2 QngyIEJsb2NrIExpbmVhciBsYXlvdXQsIHVzZWQgYnkgZGVza3RvcCBHUFVzLCBhbmQgVGVncmEg SzEgYW5kIGxhdGVyCj4+Pj4gKyAqIEdlbmVyYWxpemVkIEJsb2NrIExpbmVhciBsYXlvdXQsIHVz ZWQgYnkgZGVza3RvcCBHUFVzIHN0YXJ0aW5nIHdpdGggTlY1MC9HODAsCj4+Pj4gKyAqIGFuZCBU ZWdyYSBHUFVzIHN0YXJ0aW5nIHdpdGggVGVncmEgSzEuCj4+Pj4gKyAqCj4+Pj4gKyAqIFBpeGVs cyBhcmUgYXJyYW5nZWQgaW4gR3JvdXBzIG9mIEJ5dGVzIChHT0JzKS4gIEdPQiBzaXplIGFuZCBs YXlvdXQgdmFyaWVzCj4+Pj4gKyAqIGJhc2VkIG9uIHRoZSBhcmNoaXRlY3R1cmUgZ2VuZXJhdGlv bi4gIEdPQnMgdGhlbXNlbHZlcyBhcmUgdGhlbiBhcnJhbmdlZCBpbgo+Pj4+ICsgKiAzRCBibG9j a3MsIHdpdGggdGhlIGJsb2NrIGRpbWVuc2lvbnMgKGluIHRlcm1zIG9mIEdPQnMpIGFsd2F5cyBi ZWluZyBhIHBvd2VyCj4+Pj4gKyAqIG9mIHR3bywgYW5kIGhlbmNlIGV4cHJlc3NpYmxlIGFzIHRo ZWlyIGxvZzIgZXF1aXZhbGVudCAoRS5nLiwgIjIiIHJlcHJlc2VudHMKPj4+PiArICogYSBibG9j ayBkZXB0aCBvciBoZWlnaHQgb2YgIjQiKS4KPj4+PiArICoKPj4+PiArICogQ2hhcHRlciAyMCAi UGl4ZWwgTWVtb3J5IEZvcm1hdHMiIG9mIHRoZSBUZWdyYSBYMSBUUk0gZGVzY3JpYmVzIHRoaXMg Zm9ybWF0Cj4+Pj4gKyAqIGluIGZ1bGwgZGV0YWlsLgo+Pj4+ICsgKgo+Pj4+ICsgKiAgICAgICBN YWNybwo+Pj4+ICsgKiBCaXRzICBQYXJhbSBEZXNjcmlwdGlvbgo+Pj4+ICsgKiAtLS0tICAtLS0t LSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQo+Pj4+ICsgKgo+Pj4+ICsgKiAgMzowICBoICAgICBsb2cyKGhlaWdodCkgb2Yg ZWFjaCBibG9jaywgaW4gR09Ccy4gIFBsYWNlZCBoZXJlIGZvcgo+Pj4+ICsgKiAgICAgICAgICAg ICBjb21wYXRpYmlsaXR5IHdpdGggdGhlIGV4aXN0aW5nCj4+Pj4gKyAqICAgICAgICAgICAgIERS TV9GT1JNQVRfTU9EX05WSURJQV8xNkJYMl9CTE9DSygpLWJhc2VkIG1vZGlmaWVycy4KPj4+PiAr ICoKPj4+PiArICogIDQ6NCAgLSAgICAgTXVzdCBiZSAxLCB0byBpbmRpY2F0ZSBibG9jay1saW5l YXIgbGF5b3V0LiAgTmVjZXNzYXJ5IGZvcgo+Pj4+ICsgKiAgICAgICAgICAgICBjb21wYXRpYmls aXR5IHdpdGggdGhlIGV4aXN0aW5nCj4+Pj4gKyAqICAgICAgICAgICAgIERSTV9GT1JNQVRfTU9E X05WSURJQV8xNkJYMl9CTE9DSygpLWJhc2VkIG1vZGlmaWVycy4KPj4+PiArICoKPj4+PiArICog IDg6NSAgLSAgICAgUmVzZXJ2ZWQgKFRvIHN1cHBvcnQgM0Qtc3VyZmFjZXMgd2l0aCB2YXJpYWJs ZSBsb2cyKGRlcHRoKSBibG9jawo+Pj4+ICsgKiAgICAgICAgICAgICBzaXplKS4gIE11c3QgYmUg emVyby4KPj4+PiArICoKPj4+PiArICogICAgICAgICAgICAgTm90ZSB0aGVyZSBpcyBubyBsb2cy KHdpZHRoKSBwYXJhbWV0ZXIuICBTb21lIHBvcnRpb25zIG9mIHRoZQo+Pj4+ICsgKiAgICAgICAg ICAgICBoYXJkd2FyZSBzdXBwb3J0IGEgYmxvY2sgd2lkdGggb2YgdHdvIGdvYnMsIGJ1dCBpdCBp cyBpbXByYWN0aWNhbAo+Pj4+ICsgKiAgICAgICAgICAgICB0byB1c2UgZHVlIHRvIGxhY2sgb2Yg c3VwcG9ydCBlbHNld2hlcmUsIGFuZCBoYXMgbm8ga25vd24KPj4+PiArICogICAgICAgICAgICAg YmVuZWZpdHMuCj4+Pj4gKyAqCj4+Pj4gKyAqIDExOjkgIC0gICAgIFJlc2VydmVkIChUbyBzdXBw b3J0IDJELWFycmF5IHRleHR1cmVzIHdpdGggdmFyaWFibGUgYXJyYXkgc3RyaWRlCj4+Pj4gKyAq ICAgICAgICAgICAgIGluIGJsb2Nrcywgc3BlY2lmaWVkIHZpYSBsb2cyKHRpbGUgd2lkdGggaW4g YmxvY2tzKSkuICBNdXN0IGJlCj4+Pj4gKyAqICAgICAgICAgICAgIHplcm8uCj4+Pj4gKyAqCj4+ Pj4gKyAqIDE5OjEyIGsgICAgIFBhZ2UgS2luZC4gIFRoaXMgdmFsdWUgZGlyZWN0bHkgbWFwcyB0 byBhIGZpZWxkIGluIHRoZSBwYWdlCj4+Pj4gKyAqICAgICAgICAgICAgIHRhYmxlcyBvZiBhbGwg R1BVcyA+PSBOVjUwLiAgSXQgYWZmZWN0cyB0aGUgZXhhY3QgbGF5b3V0IG9mIGJpdHMKPj4+PiAr ICogICAgICAgICAgICAgaW4gbWVtb3J5IGFuZCBjYW4gYmUgZGVyaXZlZCBmcm9tIHRoZSB0dXBs ZQo+Pj4+ICsgKgo+Pj4+ICsgKiAgICAgICAgICAgICAgIChmb3JtYXQsIEdQVSBtb2RlbCwgY29t cHJlc3Npb24gdHlwZSwgc2FtcGxlcyBwZXIgcGl4ZWwpCj4+Pj4gKyAqCj4+Pj4gKyAqICAgICAg ICAgICAgIFdoZXJlIGNvbXByZXNzaW9uIHR5cGUgaXMgZGVmaW5lZCBiZWxvdy4gIElmIEdQVSBt b2RlbCB3ZXJlCj4+Pj4gKyAqICAgICAgICAgICAgIGltcGxpZWQgYnkgdGhlIGZvcm1hdCBtb2Rp ZmllciwgZm9ybWF0LCBvciBtZW1vcnkgYnVmZmVyLCBwYWdlCj4+Pj4gKyAqICAgICAgICAgICAg IGtpbmQgd291bGQgbm90IG5lZWQgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIG1vZGlmaWVyIGl0c2Vs ZiwgYnV0Cj4+Pj4gKyAqICAgICAgICAgICAgIHNpbmNlIHRoZSBtb2RpZmllciBzaG91bGQgZGVm aW5lIHRoZSBsYXlvdXQgb2YgdGhlIGFzc29jaWF0ZWQKPj4+PiArICogICAgICAgICAgICAgbWVt b3J5IGJ1ZmZlciBpbmRlcGVuZGVudCBmcm9tIGFueSBkZXZpY2Ugb3Igb3RoZXIgY29udGV4dCwg aXQKPj4+PiArICogICAgICAgICAgICAgbXVzdCBiZSBpbmNsdWRlZCBoZXJlLgo+Pj4+ICsgKgo+ Pj4+ICsgKiAgICAgICAgICAgICBUbyBncmFuZGZhdGhlciBpbiBwcmlvciBibG9jayBsaW5lYXIg Zm9ybWF0IG1vZGlmaWVycyB0byB0aGlzCj4+Pj4gKyAqICAgICAgICAgICAgIGxheW91dCwgdGhl IHBhZ2Uga2luZCAiMCIsIHdoaWNoIGNvcnJlc3BvbmRzIHRvICJwaXRjaC9saW5lYXIiCj4+Pj4g KyAqICAgICAgICAgICAgIGFuZCBoZW5jZSBpcyB1bnVzYWJsZSB3aXRoIGJsb2NrLWxpbmVhciBs YXlvdXRzLCBpcyByZW1hcHBlZAo+Pj4+ICsgKiAgICAgICAgICAgICB3aXRoaW4gZHJpdmVycyB0 byB0aGUgdmFsdWUgMHhmZSwgd2hpY2ggY29ycmVzcG9uZHMgdG8gdGhlCj4+Pj4gKyAqICAgICAg ICAgICAgICJnZW5lcmljIiBraW5kIHVzZWQgZm9yIHNpbXBsZSBzaW5nbGUtc2FtcGxlIGNvbG9y IGZvcm1hdHMgb24KPj4+PiArICogICAgICAgICAgICAgcHJlLVR1cmluZyBHUFVzLgo+Pj4KPj4+ IEhtLCBtYXliZSBhIHRpbnkgc3RhdGljIGlubGluZSBmdW5jdGlvbiB3aGljaCBjYW5vbml6YWxp emVzIG1vZGlmaWVycz8KPj4+IFNvbWV0aGluZyBsaWtlCj4+Pgo+Pj4gc3RhdGljIGlubGluZSB1 NjQKPj4+IGRybV9mb3VyY2NfY2Fub25pY2FsaXplX252aWRpYV9ibG9ja19saW5lYXJfMmQodTY0 IG1vZGlmZXIsIGJvb2wKPj4+IGlzX3ByZV90dXJpbmcpCj4+PiB7Cj4+PiB9Cj4+Pgo+Pj4gV291 bGQgdGhlbiBnaXZlIHlvdSBhIG5pY2UgcGxhY2UgdG8gc3RpY2sgdGhpcyBiYWNrd2FyZCBjb21w YXQgbm90ZSBhbmQKPj4+IG1ha2UgaXQgcmVhbGx5IGNsZWFyIHdoYXQgc2hvdWxkIGJlIGRvbmUu IEkgdGhpbmsgZXN0YWJsaXNoaW5nIHRoaXMgYXMgYQo+Pj4gcGF0dGVybiB3b3VsZCBhbHNvIGJl IG5pY2UsIHNpbmNlIEknbSBzdXJlIHdlJ2xsIGhhdmUgYSBwaWxlIG1vcmUgb2YgdGhlc2UKPj4+ IGNhc2VzIHdoZXJlIG1vZGlmaWVycyB0dXJuIG91dCB0byBhc3N1bWUgYSBmZXcgdG9vIG1hbnkg dGhpbmdzIGFib3V0IHRoZQo+Pj4gcGxhdGZvcm0gdGhleSdyZSB1c2VkIG9uICh3ZSBoYXZlIGEg c2ltaWxhciBjYXNlIG9uIHRoZSBpbnRlbCBzaWRlIHRvbykuCj4+Cj4+IFRvIG1ha2Ugc3VyZSBJ J20gY2xlYXIsIGl0IHdvdWxkIGJlaGF2ZSBsaWtlIHRoaXM/Cj4+Cj4+ICAgICBmaXhlZF9tb2Qg PSBjYW5vbmljYWxpemUob2xkX3N0eWxlX3ZhbGlkX21vZCwgdHJ1ZSk7Cj4+ICAgICBhc3NlcnQo Zml4ZWRfbW9kID09IG9sZF9zdHlsZV92YWxpZF9tb2QgfCAoMHhmZSA8PCAxMikpOwo+PiAgICAg Zml4ZWRfbW9kID0gY2Fub25pY2FsaXplKG5ld19zdHlsZV92YWxpZF9tb2QsIFtmYWxzZSx0cnVl XSk7Cj4+ICAgICBhc3NlcnQoZml4ZWRfbW9kID09IG5ld19zdHlsZV92YWxpZF9tb2QpOwo+Pgo+ PiBJJ20gdW5jbGVhciB3aGF0IGl0IHNob3VsZCBkbyBpbiB0aGlzIGNhc2UgdGhvdWdoOgo+Pgo+ PiAgICAgZml4ZWRfbW9kID0gY2Fub25pY2FsaXplKG9sZF9zdHlsZV92YWxpZF9tb2QsIGZhbHNl KTsKPj4KPj4gU2luY2UgdGhlcmUncyBubyBjb2RlIG91dCB0aGVyZSB1c2luZyB0aGUgb2xkIHN0 eWxlIG1vZGlmaWVycyB3aXRoCj4+IFR1cmluZysgeWV0LCBhbmQgSSBkb24ndCB3YW50IHRvIHRy eSB0byBzdXBwb3J0IHN1Y2ggdXNhZ2UuICBNYXliZSBqdXN0Cj4+IGRyb3AgdGhlICJpc19wcmVf dHVyaW5nIiBwYXJhbWV0ZXIgYW5kIGFsd2F5cyBjYW5vbmljYWxpemUgYnkgbWFwcGluZyAwCj4+ IC0+IDB4ZmUgYXMgdGhlIGNvbW1lbnQgYWJvdmUgc3RhdGVzLCBhbmQgbm90IHRvdWNoaW5nIG90 aGVyIHZhbHVlcz8gIE9yCj4+IHNob3VsZCBhbnkgaW52YWxpZCBtb2RpZmllciwgaW5jbHVkaW5n IHRoaXMgY2FzZSwgcmV0dXJuCj4+IERSTV9GT1JNQVRfTU9EX0lOVkFMSUQ/ICBUaGlzIGxhdHRl ciBpZGVhIHNlZW1zIHJpc2t5IGJlY2F1c2UgaXQgd291bGQKPj4gY2F1c2Ugc29mdHdhcmUgY29t cGlsZWQgYWdhaW5zdCBvbGQgZHJtX2ZvdXJjYy5oIHRvIHBvdGVudGlhbGx5IHJlamVjdAo+PiBm b3JtYXQgbW9kaWZpZXJzIGZyb20gbmV3ZXIga2VybmVscyBvciBsaWJyYXJpZXMgd2l0aCBhbiBl eHBhbmRlZAo+PiByZXByZXNlbnRhdGlvbiwgYnV0IG1heWJlIHRoYXQncyB3aGF0IHdlIHdhbnQg aWYgb25seSBkcml2ZXIgY29tcG9uZW50cwo+PiBhcmUgc3VwcG9zZWQgdG8gY2FsbCB0aGlzIGZ1 bmN0aW9uLgo+IAo+IFRoYXQncyB3aGVyZSBJJ20gc2hvd2luZyB0aGF0IEkgaGF2ZSBubyBjbHVl IGFib3V0IG52aWRpYSBidWZmZXIKPiBmb3JtYXRzIEkgZ3Vlc3MgOi0pCj4gCj4gSWYgMCBuZXZl ciBtYWtlcyBzZW5zZSwgdGhlbiB5ZWFoIEkgZ3Vlc3MgeW91IGNvdWxkIGp1c3QKPiB1bmNvbmRp dGlvbmFsbHkgY2Fub25pY2FsaXplLiBNYXliZSB5b3Ugd2FudCB0byByZWplY3QgdGhlIG9sZC9s ZWdhY3kKPiBzdHlsZSBvbiB0dXJpbmcrIHBsdXMsIGJ1dCB0aGF0J3MgYSB0cmFkZW9mZiB1cCB0 byB5b3UgZ3V5cyAtIGFzIGxvbmcKPiBhcyBpdCdzIGNvbnNpc3RlbnQgYWNyb3NzIGFsbCBpbnZv bHZlZCBkcml2ZXJzLiBOb3QgcmVqZWN0aW5nIGl0IHdvdWxkCj4gZXNzZW50aWFsbHkgbWFrZSAw IGFuIGFsaWFzIGZvciAweGZlIGV2ZXJ5d2hlcmUsIHBvc3QgYW5kIHByZS10dXJpbmcuCj4gTW9y ZSByZWFzb25zIGZvciBoYXZpbmcgYSBzaGFyZWQgY2Fub25pY2FsaXplIGZ1bmN0aW9uIHdoaWNo IGVuZm9yY2VzCj4gdGhlIHNhbWUgYmVoYXZpb3VyICh3aGljaGV2ZXIgeW91IHBpY2spIGV2ZXJ5 d2hlcmUgSSB0aGluay4KPiAKPiBBbmQgeWVhaCB0aGUgY2Fub25pY2FsaXplIGZ1bmN0aW9uIHdv dWxkIG9ubHkgYmUgY2FsbGVkIGJ5IGRyaXZlcnMsCj4gbm90IGJ5IGNsaWVudHMuCj4gLURhbmll bAoKSSB3cm90ZSB1cCBhIHZhcmlhbnQgb2YgdGhpcyB0aGF0IGNhbm9uaWNhbGl6ZXMgYW55IE5W IGZvcm1hdCBtb2QgdG8gCm1ha2UgaXQgZWFzaWVyIHRvIHVzZSwgYW5kIHJlYmFzZWQgbXkgcGF0 Y2hlcyBvbiB0b3Agb2YgaXQuICBJIG9ubHkgCmVuZGVkIHVwIHdpdGggb25lIGNhbGxlciwgYnV0 IEkgZG8gbGlrZSB0aGUgZGVzaWduLiAgU2VudCBvdXQgYXMgdjIuCgpUaGFua3MsCi1KYW1lcwoK PiAKPj4gVGhhbmtzLAo+PiAtSmFtZXMKPj4KPj4+IEp1c3QgYSBkcml2ZS1ieSBpZGVhLCBmZWVs IGZyZWUgdG8gaWdub3JlLgo+Pj4KPj4+IENoZWVycywgRGFuaWVsCj4+Pgo+Pj4+ICsgKgo+Pj4+ ICsgKiAyMToyMCBnICAgICBHT0IgSGVpZ2h0IGFuZCBQYWdlIEtpbmQgR2VuZXJhdGlvbi4gIFRo ZSBoZWlnaHQgb2YgYSBHT0IgY2hhbmdlZAo+Pj4+ICsgKiAgICAgICAgICAgICBzdGFydGluZyB3 aXRoIEZlcm1pIEdQVXMuICBBZGRpdGlvbmFsbHksIHRoZSBtYXBwaW5nIGJldHdlZW4gcGFnZQo+ Pj4+ICsgKiAgICAgICAgICAgICBraW5kIGFuZCBiaXQgbGF5b3V0IGhhcyBjaGFuZ2VkIGF0IHZh cmlvdXMgcG9pbnRzLgo+Pj4+ICsgKgo+Pj4+ICsgKiAgICAgICAgICAgICAgIDAgPSBHb2IgSGVp Z2h0IDgsIEZlcm1pIC0gVm9sdGEsIFRlZ3JhIEsxKyBQYWdlIEtpbmQgbWFwcGluZwo+Pj4+ICsg KiAgICAgICAgICAgICAgIDEgPSBHb2IgSGVpZ2h0IDQsIEc4MCAtIEdUMlhYIFBhZ2UgS2luZCBt YXBwaW5nCj4+Pj4gKyAqICAgICAgICAgICAgICAgMiA9IEdvYiBIZWlnaHQgOCwgVHVyaW5nKyBQ YWdlIEtpbmQgbWFwcGluZwo+Pj4+ICsgKiAgICAgICAgICAgICAgIDMgPSBSZXNlcnZlZCBmb3Ig ZnV0dXJlIHVzZS4KPj4+PiArICoKPj4+PiArICogMjI6MjIgcyAgICAgU2VjdG9yIGxheW91dC4g IE9uIFRlZ3JhIEdQVXMgcHJpb3IgdG8gWGF2aWVyLCB0aGVyZSBpcyBhIGZ1cnRoZXIKPj4+PiAr ICogICAgICAgICAgICAgYml0IHJlbWFwcGluZyBzdGVwIHRoYXQgb2NjdXJzIGF0IGFuIGV2ZW4g bG93ZXIgbGV2ZWwgdGhhbiB0aGUKPj4+PiArICogICAgICAgICAgICAgcGFnZSBraW5kIGFuZCBi bG9jayBsaW5lYXIgc3dpenpsZXMuICBUaGlzIGNhdXNlcyB0aGUgbGF5b3V0IG9mCj4+Pj4gKyAq ICAgICAgICAgICAgIHN1cmZhY2VzIG1hcHBlZCBpbiB0aG9zZSBTT0MncyBHUFVzIHRvIGJlIGlu Y29tcGF0aWJsZSB3aXRoIHRoZQo+Pj4+ICsgKiAgICAgICAgICAgICBlcXVpdmFsZW50IG1hcHBp bmcgb24gb3RoZXIgR1BVcyBpbiB0aGUgc2FtZSBzeXN0ZW0uCj4+Pj4gKyAqCj4+Pj4gKyAqICAg ICAgICAgICAgICAgMCA9IFRlZ3JhIEsxIC0gVGVncmEgUGFya2VyL1RYMiBMYXlvdXQuCj4+Pj4g KyAqICAgICAgICAgICAgICAgMSA9IERlc2t0b3AgR1BVIGFuZCBUZWdyYSBYYXZpZXIrIExheW91 dAo+Pj4+ICsgKgo+Pj4+ICsgKiAyNDoyMyBjICAgICBMb3NzbGVzcyBGcmFtZWJ1ZmZlciBDb21w cmVzc2lvbiB0eXBlLgo+Pj4+ICsgKgo+Pj4+ICsgKiAgICAgICAgICAgICAgIDAgPSBub25lCj4+ Pj4gKyAqICAgICAgICAgICAgICAgMSA9IFJPUC8zRCwgYWN0dWFsIGNvbXByZXNzaW9uIGltcGxp ZWQgYnkgdGhlIFBhZ2UgS2luZCBmaWVsZAo+Pj4+ICsgKiAgICAgICAgICAgICAgIDIgPSBDREUg aG9yaXpvbnRhbAo+Pj4+ICsgKiAgICAgICAgICAgICAgIDMgPSBDREUgdmVydGljYWwKPj4+PiAr ICoKPj4+PiArICogNTU6MjUgLSAgICAgUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuICBNdXN0IGJl IHplcm8uCj4+Pj4gKyAqLwo+Pj4+ICsjZGVmaW5lIERSTV9GT1JNQVRfTU9EX05WSURJQV9CTE9D S19MSU5FQVJfMkQoYywgcywgZywgaywgaCkgXAo+Pj4+ICsgICAgZm91cmNjX21vZF9jb2RlKE5W SURJQSwgKDB4MTAgfCBcCj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChoKSAm IDB4ZikgfCBcCj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaykgJiAweGZm KSA8PCAxMikgfCBcCj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoZykgJiAw eDMpIDw8IDIwKSB8IFwKPj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChzKSAm IDB4MSkgPDwgMjIpIHwgXAo+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGMp ICYgMHgzKSA8PCAyMykpKQo+Pj4+ICsKPj4+PiArLyoKPj4+PiArICogMTZCeDIgQmxvY2sgTGlu ZWFyIGxheW91dCwgdXNlZCBieSBUZWdyYSBLMSBhbmQgbGF0ZXIKPj4+PiAgICAgKgo+Pj4+ICAg ICAqIFBpeGVscyBhcmUgYXJyYW5nZWQgaW4gNjR4OCBHcm91cHMgT2YgQnl0ZXMgKEdPQnMpLiBH T0JzIGFyZSB0aGVuIHN0YWNrZWQKPj4+PiAgICAgKiB2ZXJ0aWNhbGx5IGJ5IGEgcG93ZXIgb2Yg MiAoMSB0byAzMiBHT0JzKSB0byBmb3JtIGEgYmxvY2suCj4+Pj4gQEAgLTUxOCwyMCArNjEwLDIw IEBAIGV4dGVybiAiQyIgewo+Pj4+ICAgICAqIGluIGZ1bGwgZGV0YWlsLgo+Pj4+ICAgICAqLwo+ Pj4+ICAgICNkZWZpbmUgRFJNX0ZPUk1BVF9NT0RfTlZJRElBXzE2QlgyX0JMT0NLKHYpIFwKPj4+ PiAtICAgIGZvdXJjY19tb2RfY29kZShOVklESUEsIDB4MTAgfCAoKHYpICYgMHhmKSkKPj4+PiAr ICAgIERSTV9GT1JNQVRfTU9EX05WSURJQV9CTE9DS19MSU5FQVJfMkQoMCwgMCwgMCwgMCwgKHYp KQo+Pj4+Cj4+Pj4gICAgI2RlZmluZSBEUk1fRk9STUFUX01PRF9OVklESUFfMTZCWDJfQkxPQ0tf T05FX0dPQiBcCj4+Pj4gLSAgICBmb3VyY2NfbW9kX2NvZGUoTlZJRElBLCAweDEwKQo+Pj4+ICsg ICAgRFJNX0ZPUk1BVF9NT0RfTlZJRElBXzE2QlgyX0JMT0NLKDApCj4+Pj4gICAgI2RlZmluZSBE Uk1fRk9STUFUX01PRF9OVklESUFfMTZCWDJfQkxPQ0tfVFdPX0dPQiBcCj4+Pj4gLSAgICBmb3Vy Y2NfbW9kX2NvZGUoTlZJRElBLCAweDExKQo+Pj4+ICsgICAgRFJNX0ZPUk1BVF9NT0RfTlZJRElB XzE2QlgyX0JMT0NLKDEpCj4+Pj4gICAgI2RlZmluZSBEUk1fRk9STUFUX01PRF9OVklESUFfMTZC WDJfQkxPQ0tfRk9VUl9HT0IgXAo+Pj4+IC0gICAgZm91cmNjX21vZF9jb2RlKE5WSURJQSwgMHgx MikKPj4+PiArICAgIERSTV9GT1JNQVRfTU9EX05WSURJQV8xNkJYMl9CTE9DSygyKQo+Pj4+ICAg ICNkZWZpbmUgRFJNX0ZPUk1BVF9NT0RfTlZJRElBXzE2QlgyX0JMT0NLX0VJR0hUX0dPQiBcCj4+ Pj4gLSAgICBmb3VyY2NfbW9kX2NvZGUoTlZJRElBLCAweDEzKQo+Pj4+ICsgICAgRFJNX0ZPUk1B VF9NT0RfTlZJRElBXzE2QlgyX0JMT0NLKDMpCj4+Pj4gICAgI2RlZmluZSBEUk1fRk9STUFUX01P RF9OVklESUFfMTZCWDJfQkxPQ0tfU0lYVEVFTl9HT0IgXAo+Pj4+IC0gICAgZm91cmNjX21vZF9j b2RlKE5WSURJQSwgMHgxNCkKPj4+PiArICAgIERSTV9GT1JNQVRfTU9EX05WSURJQV8xNkJYMl9C TE9DSyg0KQo+Pj4+ICAgICNkZWZpbmUgRFJNX0ZPUk1BVF9NT0RfTlZJRElBXzE2QlgyX0JMT0NL X1RISVJUWVRXT19HT0IgXAo+Pj4+IC0gICAgZm91cmNjX21vZF9jb2RlKE5WSURJQSwgMHgxNSkK Pj4+PiArICAgIERSTV9GT1JNQVRfTU9EX05WSURJQV8xNkJYMl9CTE9DSyg1KQo+Pj4+Cj4+Pj4g ICAgLyoKPj4+PiAgICAgKiBTb21lIEJyb2FkY29tIG1vZGlmaWVycyB0YWtlIHBhcmFtZXRlcnMs IGZvciBleGFtcGxlIHRoZSBudW1iZXIgb2YKPj4+PiAtLQo+Pj4+IDIuMTcuMQo+Pj4+Cj4+Pgo+ IAo+IAo+IApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpO b3V2ZWF1IG1haWxpbmcgbGlzdApOb3V2ZWF1QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL25vdXZlYXU=