From mboxrd@z Thu Jan 1 00:00:00 1970 From: Manasi Navare Subject: Re: [PATCH v5 20/28] drm/i915/dp: Configure i915 Picture parameter Set registers during DSC enabling Date: Tue, 16 Oct 2018 14:02:47 -0700 Message-ID: <20181016210247.GE8224@intel.com> References: <20181005232306.31133-1-manasi.d.navare@intel.com> <20181005232306.31133-21-manasi.d.navare@intel.com> <83F5C7385F545743AD4FB2A62F75B07347F774C3@ORSMSX108.amr.corp.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <83F5C7385F545743AD4FB2A62F75B07347F774C3@ORSMSX108.amr.corp.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: "Srivatsa, Anusha" Cc: "intel-gfx@lists.freedesktop.org" , "dri-devel@lists.freedesktop.org" List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBPY3QgMTYsIDIwMTggYXQgMTI6NTg6MjRQTSAtMDcwMCwgU3JpdmF0c2EsIEFudXNo YSB3cm90ZToKPiAKPiAKPiA+LS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0KPiA+RnJvbTogTmF2 YXJlLCBNYW5hc2kgRAo+ID5TZW50OiBGcmlkYXksIE9jdG9iZXIgNSwgMjAxOCA0OjIzIFBNCj4g PlRvOiBpbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnOyBkcmktZGV2ZWxAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCj4gPkNjOiBOYXZhcmUsIE1hbmFzaSBEIDxtYW5hc2kuZC5uYXZhcmVAaW50 ZWwuY29tPjsgSmFuaSBOaWt1bGEKPiA+PGphbmkubmlrdWxhQGxpbnV4LmludGVsLmNvbT47IFZp bGxlIFN5cmphbGEgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPjsKPiA+U3JpdmF0c2Es IEFudXNoYSA8YW51c2hhLnNyaXZhdHNhQGludGVsLmNvbT4KPiA+U3ViamVjdDogW1BBVENIIHY1 IDIwLzI4XSBkcm0vaTkxNS9kcDogQ29uZmlndXJlIGk5MTUgUGljdHVyZSBwYXJhbWV0ZXIgU2V0 Cj4gPnJlZ2lzdGVycyBkdXJpbmcgRFNDIGVuYWJsaW5nCj4gPgo+ID5BZnRlciBlbmNvZGVyLT5w cmVfZW5hYmxlKCkgaG9vaywgYWZ0ZXIgbGluayB0cmFpbmluZyBzZXF1ZW5jZSBpcyBjb21wbGV0 ZWQsIFBQUwo+ID5yZWdpc3RlcnMgZm9yIERTQyBlbmNvZGVyIGFyZSBjb25maWd1cmVkIHVzaW5n IHRoZSBEU0Mgc3RhdGUgcGFyYW1ldGVycyBpbgo+ID5pbnRlbF9jcnRjX3N0YXRlIGFzIHBhcnQg b2YgRFNDIGVuYWJsaW5nIHJvdXRpbmUgaW4gdGhlIHNvdXJjZS4gRFNDIGVuYWJsaW5nCj4gPnJv dXRpbmUgaXMgY2FsbGVkIGFmdGVyCj4gPmVuY29kZXItPnByZV9lbmFibGUoKSBiZWZvcmUgZW5i YWxpbmcgdGhlIHBpcGUgYW5kIGFmdGVyCj4gPmNvbXByZXNzaW9uIGlzIGVuYWJsZWQgb24gdGhl IHNpbmsuCj4gPgo+ID52MzoKPiA+KiBDb25maWd1cmUgUGljX3dpZHRoLzIgZm9yIGVhY2ggVkRT QyBlbmdpbmUgd2hlbiB0d28gVkRTQyBlbmdpbmVzIHBlciBwaXBlCj4gPmFyZSB1c2VkIChNYW5h c2kpCj4gPiogQWRkIERTQyBzbGljZV9yb3dfcGVyX2ZyYW1lIGluIFBQUzE2IChNYW5hc2kpCj4g Pgo+ID52MjoKPiA+KiBFbmFibGUgUEcyIHBvd2VyIHdlbGwgZm9yIFZEU0Mgb24gZURQCj4gPgo+ ID5DYzogSmFuaSBOaWt1bGEgPGphbmkubmlrdWxhQGxpbnV4LmludGVsLmNvbT4KPiA+Q2M6IFZp bGxlIFN5cmphbGEgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgo+ID5DYzogQW51c2hh IFNyaXZhdHNhIDxhbnVzaGEuc3JpdmF0c2FAaW50ZWwuY29tPgo+ID5TaWduZWQtb2ZmLWJ5OiBN YW5hc2kgTmF2YXJlIDxtYW5hc2kuZC5uYXZhcmVAaW50ZWwuY29tPgo+IAo+IAo+ID4tLS0KPiA+ IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICB8ICAgMiArCj4gPiBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgfCAgIDYgKwo+ID4gZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfdmRzYy5jICAgIHwgNDE4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ ID4gMyBmaWxlcyBjaGFuZ2VkLCA0MjYgaW5zZXJ0aW9ucygrKQo+ID4KPiA+ZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2Rydi5oCj4gPmluZGV4IDkzZTU3YjI3MWQzYi4uYjQ5OTg1ZjVkMDhjIDEwMDY0NAo+ID4t LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gPisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiA+QEAgLTM1MDYsNiArMzUwNiw4IEBAIGV4dGVybiB2b2lk IGludGVsX3Jwc19tYXJrX2ludGVyYWN0aXZlKHN0cnVjdAo+ID5kcm1faTkxNV9wcml2YXRlICpp OTE1LAo+ID4gCQkJCSAgICAgICBib29sIGludGVyYWN0aXZlKTsKPiA+IGV4dGVybiBib29sIGlu dGVsX3NldF9tZW1vcnlfY3hzcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4g PiAJCQkJICBib29sIGVuYWJsZSk7Cj4gPitleHRlcm4gdm9pZCBpbnRlbF9kc2NfZW5hYmxlKHN0 cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ID4rCQkJICAgICBzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7Cj4gPgo+ID4gaW50IGk5MTVfcmVnX3JlYWRfaW9jdGwoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiA+IAkJCXN0cnVjdCBkcm1fZmlsZSAq ZmlsZSk7Cj4gPmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5 LmMKPiA+Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiA+aW5kZXggNGVi ZjdjODMwODVjLi5mN2NiNDE3NzVjNTcgMTAwNjQ0Cj4gPi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2Rpc3BsYXkuYwo+ID4rKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k aXNwbGF5LmMKPiA+QEAgLTU0ODAsNiArNTQ4MCwxMiBAQCBzdGF0aWMgdm9pZCBpbnRlbF9lbmNv ZGVyc19wcmVfZW5hYmxlKHN0cnVjdAo+ID5kcm1fY3J0YyAqY3J0YywKPiA+Cj4gPiAJCWlmIChl bmNvZGVyLT5wcmVfZW5hYmxlKQo+ID4gCQkJZW5jb2Rlci0+cHJlX2VuYWJsZShlbmNvZGVyLCBj cnRjX3N0YXRlLCBjb25uX3N0YXRlKTsKPiA+Kwo+ID4rCQkvKgo+ID4rCQkgKiBFbmFibGUgYW5k IENvbmZpZ3VyZSBEaXNwbGF5IFN0cmVhbSBDb21wcmVzc2lvbiBpbiB0aGUKPiA+c291cmNlCj4g PisJCSAqIGlmIGVuYWJsZWQgaW4gaW50ZWxfY3J0Y19zdGF0ZS4KPiA+KwkJICovCj4gPisJCWlu dGVsX2RzY19lbmFibGUoZW5jb2RlciwgY3J0Y19zdGF0ZSk7Cj4gPiAJfQo+ID4gfQo+ID4KPiA+ ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Zkc2MuYwo+ID5iL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX3Zkc2MuYwo+ID5pbmRleCA1OTQxOTZhOWQwZjQuLjFmMmI1 ZGM4MmYxNiAxMDA2NDQKPiA+LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdmRzYy5j Cj4gPisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Zkc2MuYwo+ID5AQCAtNTgwLDMg KzU4MCw0MjEgQEAgaW50IGludGVsX2RwX2NvbXB1dGVfZHNjX3BhcmFtcyhzdHJ1Y3QgaW50ZWxf ZHAKPiA+KmludGVsX2RwLAo+ID4KPiA+IAlyZXR1cm4gMDsKPiA+IH0KPiA+Kwo+ID4rc3RhdGlj IHZvaWQgaW50ZWxfY29uZmlndXJlX3Bwc19mb3JfZHNjX2VuY29kZXIoc3RydWN0IGludGVsX2Vu Y29kZXIgKmVuY29kZXIsCj4gPisJCQkJCQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZQo+ID4qY3J0 Y19zdGF0ZSkgewo+ID4rCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0Yyhj cnRjX3N0YXRlLT5iYXNlLmNydGMpOwo+ID4rCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IHRvX2k5MTUoZW5jb2Rlci0+YmFzZS5kZXYpOwo+ID4rCXN0cnVjdCBkcm1fZHNjX2Nv bmZpZyAqdmRzY19jZmcgPSAmY3J0Y19zdGF0ZS0+ZHBfZHNjX2NmZzsKPiA+KwllbnVtIHBpcGUg cGlwZSA9IGNydGMtPnBpcGU7Cj4gPisJdTMyIHBwc192YWwgPSAwOwo+ID4rCXUzMiByY19idWZf dGhyZXNoX2R3b3JkWzRdOwo+ID4rCXUzMiByY19yYW5nZV9wYXJhbXNfZHdvcmRbOF07Cj4gPisJ dTggbnVtX3Zkc2NfaW5zdGFuY2VzID0gKGNydGNfc3RhdGUtPmRzY19wYXJhbXMuZHNjX3NwbGl0 KSA/IDIgOiAxOwo+ID4rCWludCBpID0gMDsKPiA+Kwo+ID4rCS8qIFBvcHVsYXRlIFBJQ1RVUkVf UEFSQU1FVEVSX1NFVF8wIHJlZ2lzdGVycyAqLwo+ID4rCXBwc192YWwgPSBEU0NfVkVSX01BSiB8 IHZkc2NfY2ZnLT5kc2NfdmVyc2lvbl9taW5vciA8PAo+ID4rCQlEU0NfVkVSX01JTl9TSElGVCB8 Cj4gPisJCXZkc2NfY2ZnLT5iaXRzX3Blcl9jb21wb25lbnQgPDwgRFNDX0JQQ19TSElGVCB8Cj4g PisJCXZkc2NfY2ZnLT5saW5lX2J1Zl9kZXB0aCA8PCBEU0NfTElORV9CVUZfREVQVEhfU0hJRlQ7 Cj4gPisJaWYgKHZkc2NfY2ZnLT5ibG9ja19wcmVkX2VuYWJsZSkKPiA+KwkJcHBzX3ZhbCB8PSBE U0NfQkxPQ0tfUFJFRElDVElPTjsKPiA+KwllbHNlCj4gPisJCXBwc192YWwgJj0gfkRTQ19CTE9D S19QUkVESUNUSU9OOwo+ID4rCWlmICh2ZHNjX2NmZy0+Y29udmVydF9yZ2IpCj4gPisJCXBwc192 YWwgfD0gRFNDX0NPTE9SX1NQQUNFX0NPTlZFUlNJT047Cj4gPisJZWxzZQo+ID4rCQlwcHNfdmFs ICY9IH5EU0NfQ09MT1JfU1BBQ0VfQ09OVkVSU0lPTjsKPiA+KwlpZiAodmRzY19jZmctPmVuYWJs ZTQyMikKPiA+KwkJcHBzX3ZhbCB8PSBEU0NfNDIyX0VOQUJMRTsKPiA+KwllbHNlCj4gPisJCXBw c192YWwgJj0gfkRTQ180MjJfRU5BQkxFOwo+ID4rCWlmICh2ZHNjX2NmZy0+dmJyX2VuYWJsZSkK PiA+KwkJcHBzX3ZhbCB8PSBEU0NfVkJSX0VOQUJMRTsKPiA+KwllbHNlCj4gPisJCXBwc192YWwg Jj0gfkRTQ19WQlJfRU5BQkxFOwo+ID4rCj4gPisJRFJNX0lORk8oIlBQUzAgPSAweCUwOHhcbiIs IHBwc192YWwpOwo+ID4rCWlmIChlbmNvZGVyLT50eXBlID09IElOVEVMX09VVFBVVF9FRFApIHsK PiA+KwkJSTkxNV9XUklURShEU0NBX1BJQ1RVUkVfUEFSQU1FVEVSX1NFVF8wLCBwcHNfdmFsKTsK PiA+KwkJLyoKPiA+KwkJICogSWYgMiBWRFNDIGluc3RhbmNlcyBhcmUgbmVlZGVkLCBjb25maWd1 cmUgUFBTIGZvciBzZWNvbmQKPiA+KwkJICogVkRTQwo+ID4rCQkgKi8KPiA+KwkJaWYgKGNydGNf c3RhdGUtPmRzY19wYXJhbXMuZHNjX3NwbGl0KQo+ID4rCQkJSTkxNV9XUklURShEU0NDX1BJQ1RV UkVfUEFSQU1FVEVSX1NFVF8wLAo+ID5wcHNfdmFsKTsKPiA+Kwl9IGVsc2Ugewo+ID4rCQlJOTE1 X1dSSVRFKElDTF9EU0MwX1BJQ1RVUkVfUEFSQU1FVEVSX1NFVF8wKHBpcGUpLAo+ID5wcHNfdmFs KTsKPiA+KwkJaWYgKGNydGNfc3RhdGUtPmRzY19wYXJhbXMuZHNjX3NwbGl0KQo+ID4rCj4gPglJ OTE1X1dSSVRFKElDTF9EU0MxX1BJQ1RVUkVfUEFSQU1FVEVSX1NFVF8wKHBpcGUpLAo+ID4rCQkJ CSAgIHBwc192YWwpOwo+ID4rCX0KPiA+Kwo+ID4rCS8qIFBvcHVsYXRlIFBJQ1RVUkVfUEFSQU1F VEVSX1NFVF8xIHJlZ2lzdGVycyAqLwo+ID4rCXBwc192YWwgPSAwOwo+ID4rCXBwc192YWwgfD0g RFNDX0JQUCh2ZHNjX2NmZy0+Yml0c19wZXJfcGl4ZWwpOwo+ID4rCURSTV9JTkZPKCJQUFMxID0g MHglMDh4XG4iLCBwcHNfdmFsKTsKPiA+KwlpZiAoZW5jb2Rlci0+dHlwZSA9PSBJTlRFTF9PVVRQ VVRfRURQKSB7Cj4gPisJCUk5MTVfV1JJVEUoRFNDQV9QSUNUVVJFX1BBUkFNRVRFUl9TRVRfMSwg cHBzX3ZhbCk7Cj4gPisJCS8qCj4gPisJCSAqIElmIDIgVkRTQyBpbnN0YW5jZXMgYXJlIG5lZWRl ZCwgY29uZmlndXJlIFBQUyBmb3Igc2Vjb25kCj4gPisJCSAqIFZEU0MKPiA+KwkJICovCj4gPisJ CWlmIChjcnRjX3N0YXRlLT5kc2NfcGFyYW1zLmRzY19zcGxpdCkKPiA+KwkJCUk5MTVfV1JJVEUo RFNDQ19QSUNUVVJFX1BBUkFNRVRFUl9TRVRfMSwKPiA+cHBzX3ZhbCk7Cj4gPisJfSBlbHNlIHsK PiA+KwkJSTkxNV9XUklURShJQ0xfRFNDMF9QSUNUVVJFX1BBUkFNRVRFUl9TRVRfMShwaXBlKSwK PiA+cHBzX3ZhbCk7Cj4gPisJCWlmIChjcnRjX3N0YXRlLT5kc2NfcGFyYW1zLmRzY19zcGxpdCkK PiA+Kwo+ID4JSTkxNV9XUklURShJQ0xfRFNDMV9QSUNUVVJFX1BBUkFNRVRFUl9TRVRfMShwaXBl KSwKPiA+KwkJCQkgICBwcHNfdmFsKTsKPiA+Kwl9Cj4gPisKPiA+KwkvKiBQb3B1bGF0ZSBQSUNU VVJFX1BBUkFNRVRFUl9TRVRfMiByZWdpc3RlcnMgKi8KPiA+KwlwcHNfdmFsID0gMDsKPiA+Kwlw cHNfdmFsIHw9IERTQ19QSUNfSEVJR0hUKHZkc2NfY2ZnLT5waWNfaGVpZ2h0KSB8Cj4gPisJCURT Q19QSUNfV0lEVEgodmRzY19jZmctPnBpY193aWR0aCAvIG51bV92ZHNjX2luc3RhbmNlcyk7Cj4g PisJRFJNX0lORk8oIlBQUzIgPSAweCUwOHhcbiIsIHBwc192YWwpOwo+ID4rCWlmIChlbmNvZGVy LT50eXBlID09IElOVEVMX09VVFBVVF9FRFApIHsKPiA+KwkJSTkxNV9XUklURShEU0NBX1BJQ1RV UkVfUEFSQU1FVEVSX1NFVF8yLCBwcHNfdmFsKTsKPiA+KwkJLyoKPiA+KwkJICogSWYgMiBWRFND IGluc3RhbmNlcyBhcmUgbmVlZGVkLCBjb25maWd1cmUgUFBTIGZvciBzZWNvbmQKPiA+KwkJICog VkRTQwo+ID4rCQkgKi8KPiA+KwkJaWYgKGNydGNfc3RhdGUtPmRzY19wYXJhbXMuZHNjX3NwbGl0 KQo+ID4rCQkJSTkxNV9XUklURShEU0NDX1BJQ1RVUkVfUEFSQU1FVEVSX1NFVF8yLAo+ID5wcHNf dmFsKTsKPiA+Kwl9IGVsc2Ugewo+ID4rCQlJOTE1X1dSSVRFKElDTF9EU0MwX1BJQ1RVUkVfUEFS QU1FVEVSX1NFVF8yKHBpcGUpLAo+ID5wcHNfdmFsKTsKPiA+KwkJaWYgKGNydGNfc3RhdGUtPmRz Y19wYXJhbXMuZHNjX3NwbGl0KQo+ID4rCj4gPglJOTE1X1dSSVRFKElDTF9EU0MxX1BJQ1RVUkVf UEFSQU1FVEVSX1NFVF8yKHBpcGUpLAo+ID4rCQkJCSAgIHBwc192YWwpOwo+ID4rCX0KPiA+Kwo+ ID4rCS8qIFBvcHVsYXRlIFBJQ1RVUkVfUEFSQU1FVEVSX1NFVF8zIHJlZ2lzdGVycyAqLwo+ID4r CXBwc192YWwgPSAwOwo+ID4rCXBwc192YWwgfD0gRFNDX1NMSUNFX0hFSUdIVCh2ZHNjX2NmZy0+ c2xpY2VfaGVpZ2h0KSB8Cj4gPisJCURTQ19TTElDRV9XSURUSCh2ZHNjX2NmZy0+c2xpY2Vfd2lk dGgpOwo+ID4rCURSTV9JTkZPKCJQUFMzID0gMHglMDh4XG4iLCBwcHNfdmFsKTsKPiA+KwlpZiAo ZW5jb2Rlci0+dHlwZSA9PSBJTlRFTF9PVVRQVVRfRURQKSB7Cj4gPisJCUk5MTVfV1JJVEUoRFND QV9QSUNUVVJFX1BBUkFNRVRFUl9TRVRfMywgcHBzX3ZhbCk7Cj4gPisJCS8qCj4gPisJCSAqIElm IDIgVkRTQyBpbnN0YW5jZXMgYXJlIG5lZWRlZCwgY29uZmlndXJlIFBQUyBmb3Igc2Vjb25kCj4g PisJCSAqIFZEU0MKPiA+KwkJICovCj4gPisJCWlmIChjcnRjX3N0YXRlLT5kc2NfcGFyYW1zLmRz Y19zcGxpdCkKPiA+KwkJCUk5MTVfV1JJVEUoRFNDQ19QSUNUVVJFX1BBUkFNRVRFUl9TRVRfMywK PiA+cHBzX3ZhbCk7Cj4gPisJfSBlbHNlIHsKPiA+KwkJSTkxNV9XUklURShJQ0xfRFNDMF9QSUNU VVJFX1BBUkFNRVRFUl9TRVRfMyhwaXBlKSwKPiA+cHBzX3ZhbCk7Cj4gPisJCWlmIChjcnRjX3N0 YXRlLT5kc2NfcGFyYW1zLmRzY19zcGxpdCkKPiA+Kwo+ID4JSTkxNV9XUklURShJQ0xfRFNDMV9Q SUNUVVJFX1BBUkFNRVRFUl9TRVRfMyhwaXBlKSwKPiA+KwkJCQkgICBwcHNfdmFsKTsKPiA+Kwl9 Cj4gPisKPiA+KwkvKiBQb3B1bGF0ZSBQSUNUVVJFX1BBUkFNRVRFUl9TRVRfNCByZWdpc3RlcnMg Ki8KPiA+KwlwcHNfdmFsID0gMDsKPiA+KwlwcHNfdmFsIHw9IERTQ19JTklUSUFMX1hNSVRfREVM QVkodmRzY19jZmctPmluaXRpYWxfeG1pdF9kZWxheSkgfAo+ID4rCQlEU0NfSU5JVElBTF9ERUNf REVMQVkodmRzY19jZmctPmluaXRpYWxfZGVjX2RlbGF5KTsKPiA+KwlEUk1fSU5GTygiUFBTNCA9 IDB4JTA4eFxuIiwgcHBzX3ZhbCk7Cj4gPisJaWYgKGVuY29kZXItPnR5cGUgPT0gSU5URUxfT1VU UFVUX0VEUCkgewo+ID4rCQlJOTE1X1dSSVRFKERTQ0FfUElDVFVSRV9QQVJBTUVURVJfU0VUXzQs IHBwc192YWwpOwo+ID4rCQkvKgo+ID4rCQkgKiBJZiAyIFZEU0MgaW5zdGFuY2VzIGFyZSBuZWVk ZWQsIGNvbmZpZ3VyZSBQUFMgZm9yIHNlY29uZAo+ID4rCQkgKiBWRFNDCj4gPisJCSAqLwo+ID4r CQlpZiAoY3J0Y19zdGF0ZS0+ZHNjX3BhcmFtcy5kc2Nfc3BsaXQpCj4gPisJCQlJOTE1X1dSSVRF KERTQ0NfUElDVFVSRV9QQVJBTUVURVJfU0VUXzQsCj4gPnBwc192YWwpOwo+ID4rCX0gZWxzZSB7 Cj4gPisJCUk5MTVfV1JJVEUoSUNMX0RTQzBfUElDVFVSRV9QQVJBTUVURVJfU0VUXzQocGlwZSks Cj4gPnBwc192YWwpOwo+ID4rCQlpZiAoY3J0Y19zdGF0ZS0+ZHNjX3BhcmFtcy5kc2Nfc3BsaXQp Cj4gPisKPiA+CUk5MTVfV1JJVEUoSUNMX0RTQzFfUElDVFVSRV9QQVJBTUVURVJfU0VUXzQocGlw ZSksCj4gPisJCQkJICAgcHBzX3ZhbCk7Cj4gPisJfQo+ID4rCj4gPisJLyogUG9wdWxhdGUgUElD VFVSRV9QQVJBTUVURVJfU0VUXzUgcmVnaXN0ZXJzICovCj4gPisJcHBzX3ZhbCA9IDA7Cj4gPisJ cHBzX3ZhbCB8PSBEU0NfU0NBTEVfSU5DX0lOVCh2ZHNjX2NmZy0+c2NhbGVfaW5jcmVtZW50X2lu dGVydmFsKSB8Cj4gPisJCURTQ19TQ0FMRV9ERUNfSU5UKHZkc2NfY2ZnLT5zY2FsZV9kZWNyZW1l bnRfaW50ZXJ2YWwpOwo+ID4rCURSTV9JTkZPKCJQUFM1ID0gMHglMDh4XG4iLCBwcHNfdmFsKTsK PiA+KwlpZiAoZW5jb2Rlci0+dHlwZSA9PSBJTlRFTF9PVVRQVVRfRURQKSB7Cj4gPisJCUk5MTVf V1JJVEUoRFNDQV9QSUNUVVJFX1BBUkFNRVRFUl9TRVRfNSwgcHBzX3ZhbCk7Cj4gPisJCS8qCj4g PisJCSAqIElmIDIgVkRTQyBpbnN0YW5jZXMgYXJlIG5lZWRlZCwgY29uZmlndXJlIFBQUyBmb3Ig c2Vjb25kCj4gPisJCSAqIFZEU0MKPiA+KwkJICovCj4gPisJCWlmIChjcnRjX3N0YXRlLT5kc2Nf cGFyYW1zLmRzY19zcGxpdCkKPiA+KwkJCUk5MTVfV1JJVEUoRFNDQ19QSUNUVVJFX1BBUkFNRVRF Ul9TRVRfNSwKPiA+cHBzX3ZhbCk7Cj4gPisJfSBlbHNlIHsKPiA+KwkJSTkxNV9XUklURShJQ0xf RFNDMF9QSUNUVVJFX1BBUkFNRVRFUl9TRVRfNShwaXBlKSwKPiA+cHBzX3ZhbCk7Cj4gPisJCWlm IChjcnRjX3N0YXRlLT5kc2NfcGFyYW1zLmRzY19zcGxpdCkKPiA+Kwo+ID4JSTkxNV9XUklURShJ Q0xfRFNDMV9QSUNUVVJFX1BBUkFNRVRFUl9TRVRfNShwaXBlKSwKPiA+KwkJCQkgICBwcHNfdmFs KTsKPiA+Kwl9Cj4gPisKPiA+KwkvKiBQb3B1bGF0ZSBQSUNUVVJFX1BBUkFNRVRFUl9TRVRfNiBy ZWdpc3RlcnMgKi8KPiA+KwlwcHNfdmFsID0gMDsKPiA+KwlwcHNfdmFsIHw9IERTQ19JTklUSUFM X1NDQUxFX1ZBTFVFKHZkc2NfY2ZnLT5pbml0aWFsX3NjYWxlX3ZhbHVlKSB8Cj4gPisJCURTQ19G SVJTVF9MSU5FX0JQR19PRkZTRVQodmRzY19jZmctPmZpcnN0X2xpbmVfYnBnX29mZnNldCkKPiA+ fAo+ID4rCQlEU0NfRkxBVE5FU1NfTUlOX1FQKHZkc2NfY2ZnLT5mbGF0bmVzc19taW5fcXApIHwK PiA+KwkJRFNDX0ZMQVRORVNTX01BWF9RUCh2ZHNjX2NmZy0+ZmxhdG5lc3NfbWF4X3FwKTsKPiA+ KwlEUk1fSU5GTygiUFBTNiA9IDB4JTA4eFxuIiwgcHBzX3ZhbCk7Cj4gPisJaWYgKGVuY29kZXIt PnR5cGUgPT0gSU5URUxfT1VUUFVUX0VEUCkgewo+ID4rCQlJOTE1X1dSSVRFKERTQ0FfUElDVFVS RV9QQVJBTUVURVJfU0VUXzYsIHBwc192YWwpOwo+ID4rCQkvKgo+ID4rCQkgKiBJZiAyIFZEU0Mg aW5zdGFuY2VzIGFyZSBuZWVkZWQsIGNvbmZpZ3VyZSBQUFMgZm9yIHNlY29uZAo+ID4rCQkgKiBW RFNDCj4gPisJCSAqLwo+ID4rCQlpZiAoY3J0Y19zdGF0ZS0+ZHNjX3BhcmFtcy5kc2Nfc3BsaXQp Cj4gPisJCQlJOTE1X1dSSVRFKERTQ0NfUElDVFVSRV9QQVJBTUVURVJfU0VUXzYsCj4gPnBwc192 YWwpOwo+ID4rCX0gZWxzZSB7Cj4gPisJCUk5MTVfV1JJVEUoSUNMX0RTQzBfUElDVFVSRV9QQVJB TUVURVJfU0VUXzYocGlwZSksCj4gPnBwc192YWwpOwo+ID4rCQlpZiAoY3J0Y19zdGF0ZS0+ZHNj X3BhcmFtcy5kc2Nfc3BsaXQpCj4gPisKPiA+CUk5MTVfV1JJVEUoSUNMX0RTQzFfUElDVFVSRV9Q QVJBTUVURVJfU0VUXzYocGlwZSksCj4gPisJCQkJICAgcHBzX3ZhbCk7Cj4gPisJfQo+ID4rCj4g PisJLyogUG9wdWxhdGUgUElDVFVSRV9QQVJBTUVURVJfU0VUXzcgcmVnaXN0ZXJzICovCj4gPisJ cHBzX3ZhbCA9IDA7Cj4gPisJcHBzX3ZhbCB8PSBEU0NfU0xJQ0VfQlBHX09GRlNFVCh2ZHNjX2Nm Zy0+c2xpY2VfYnBnX29mZnNldCkgfAo+ID4rCQlEU0NfTkZMX0JQR19PRkZTRVQodmRzY19jZmct Pm5mbF9icGdfb2Zmc2V0KTsKPiA+KwlEUk1fSU5GTygiUFBTNyA9IDB4JTA4eFxuIiwgcHBzX3Zh bCk7Cj4gPisJaWYgKGVuY29kZXItPnR5cGUgPT0gSU5URUxfT1VUUFVUX0VEUCkgewo+ID4rCQlJ OTE1X1dSSVRFKERTQ0FfUElDVFVSRV9QQVJBTUVURVJfU0VUXzcsIHBwc192YWwpOwo+ID4rCQkv Kgo+ID4rCQkgKiBJZiAyIFZEU0MgaW5zdGFuY2VzIGFyZSBuZWVkZWQsIGNvbmZpZ3VyZSBQUFMg Zm9yIHNlY29uZAo+ID4rCQkgKiBWRFNDCj4gPisJCSAqLwo+ID4rCQlpZiAoY3J0Y19zdGF0ZS0+ ZHNjX3BhcmFtcy5kc2Nfc3BsaXQpCj4gPisJCQlJOTE1X1dSSVRFKERTQ0NfUElDVFVSRV9QQVJB TUVURVJfU0VUXzcsCj4gPnBwc192YWwpOwo+ID4rCX0gZWxzZSB7Cj4gPisJCUk5MTVfV1JJVEUo SUNMX0RTQzBfUElDVFVSRV9QQVJBTUVURVJfU0VUXzcocGlwZSksCj4gPnBwc192YWwpOwo+ID4r CQlpZiAoY3J0Y19zdGF0ZS0+ZHNjX3BhcmFtcy5kc2Nfc3BsaXQpCj4gPisKPiA+CUk5MTVfV1JJ VEUoSUNMX0RTQzFfUElDVFVSRV9QQVJBTUVURVJfU0VUXzcocGlwZSksCj4gPisJCQkJICAgcHBz X3ZhbCk7Cj4gPisJfQo+ID4rCj4gPisJLyogUG9wdWxhdGUgUElDVFVSRV9QQVJBTUVURVJfU0VU XzggcmVnaXN0ZXJzICovCj4gPisJcHBzX3ZhbCA9IDA7Cj4gPisJcHBzX3ZhbCB8PSBEU0NfRklO QUxfT0ZGU0VUKHZkc2NfY2ZnLT5maW5hbF9vZmZzZXQpIHwKPiA+KwkJRFNDX0lOSVRJQUxfT0ZG U0VUKHZkc2NfY2ZnLT5pbml0aWFsX29mZnNldCk7Cj4gPisJRFJNX0lORk8oIlBQUzggPSAweCUw OHhcbiIsIHBwc192YWwpOwo+ID4rCWlmIChlbmNvZGVyLT50eXBlID09IElOVEVMX09VVFBVVF9F RFApIHsKPiA+KwkJSTkxNV9XUklURShEU0NBX1BJQ1RVUkVfUEFSQU1FVEVSX1NFVF84LCBwcHNf dmFsKTsKPiA+KwkJLyoKPiA+KwkJICogSWYgMiBWRFNDIGluc3RhbmNlcyBhcmUgbmVlZGVkLCBj b25maWd1cmUgUFBTIGZvciBzZWNvbmQKPiA+KwkJICogVkRTQwo+ID4rCQkgKi8KPiA+KwkJaWYg KGNydGNfc3RhdGUtPmRzY19wYXJhbXMuZHNjX3NwbGl0KQo+ID4rCQkJSTkxNV9XUklURShEU0ND X1BJQ1RVUkVfUEFSQU1FVEVSX1NFVF84LAo+ID5wcHNfdmFsKTsKPiA+Kwl9IGVsc2Ugewo+ID4r CQlJOTE1X1dSSVRFKElDTF9EU0MwX1BJQ1RVUkVfUEFSQU1FVEVSX1NFVF84KHBpcGUpLAo+ID5w cHNfdmFsKTsKPiA+KwkJaWYgKGNydGNfc3RhdGUtPmRzY19wYXJhbXMuZHNjX3NwbGl0KQo+ID4r Cj4gPglJOTE1X1dSSVRFKElDTF9EU0MxX1BJQ1RVUkVfUEFSQU1FVEVSX1NFVF84KHBpcGUpLAo+ ID4rCQkJCSAgIHBwc192YWwpOwo+ID4rCX0KPiA+Kwo+ID4rCS8qIFBvcHVsYXRlIFBJQ1RVUkVf UEFSQU1FVEVSX1NFVF85IHJlZ2lzdGVycyAqLwo+ID4rCXBwc192YWwgPSAwOwo+ID4rCXBwc192 YWwgfD0gRFNDX1JDX01PREVMX1NJWkUoRFNDX1JDX01PREVMX1NJWkVfQ09OU1QpIHwKPiA+KwkJ RFNDX1JDX0VER0VfRkFDVE9SKERTQ19SQ19FREdFX0ZBQ1RPUl9DT05TVCk7Cj4gPisJRFJNX0lO Rk8oIlBQUzkgPSAweCUwOHhcbiIsIHBwc192YWwpOwo+ID4rCWlmIChlbmNvZGVyLT50eXBlID09 IElOVEVMX09VVFBVVF9FRFApIHsKPiA+KwkJSTkxNV9XUklURShEU0NBX1BJQ1RVUkVfUEFSQU1F VEVSX1NFVF85LCBwcHNfdmFsKTsKPiA+KwkJLyoKPiA+KwkJICogSWYgMiBWRFNDIGluc3RhbmNl cyBhcmUgbmVlZGVkLCBjb25maWd1cmUgUFBTIGZvciBzZWNvbmQKPiA+KwkJICogVkRTQwo+ID4r CQkgKi8KPiA+KwkJaWYgKGNydGNfc3RhdGUtPmRzY19wYXJhbXMuZHNjX3NwbGl0KQo+ID4rCQkJ STkxNV9XUklURShEU0NDX1BJQ1RVUkVfUEFSQU1FVEVSX1NFVF85LAo+ID5wcHNfdmFsKTsKPiA+ Kwl9IGVsc2Ugewo+ID4rCQlJOTE1X1dSSVRFKElDTF9EU0MwX1BJQ1RVUkVfUEFSQU1FVEVSX1NF VF85KHBpcGUpLAo+ID5wcHNfdmFsKTsKPiA+KwkJaWYgKGNydGNfc3RhdGUtPmRzY19wYXJhbXMu ZHNjX3NwbGl0KQo+ID4rCj4gPglJOTE1X1dSSVRFKElDTF9EU0MxX1BJQ1RVUkVfUEFSQU1FVEVS X1NFVF85KHBpcGUpLAo+ID4rCQkJCSAgIHBwc192YWwpOwo+ID4rCX0KPiA+Kwo+ID4rCS8qIFBv cHVsYXRlIFBJQ1RVUkVfUEFSQU1FVEVSX1NFVF8xMCByZWdpc3RlcnMgKi8KPiA+KwlwcHNfdmFs ID0gMDsKPiA+KwlwcHNfdmFsIHw9IERTQ19SQ19RVUFOVF9JTkNfTElNSVQwKHZkc2NfY2ZnLQo+ ID4+cmNfcXVhbnRfaW5jcl9saW1pdDApIHwKPiA+KwkJRFNDX1JDX1FVQU5UX0lOQ19MSU1JVDEo dmRzY19jZmctPnJjX3F1YW50X2luY3JfbGltaXQxKSB8Cj4gPisJCURTQ19SQ19UQVJHRVRfT0ZG X0hJR0goRFNDX1JDX1RHVF9PRkZTRVRfSElfQ09OU1QpIHwKPiA+KwkJRFNDX1JDX1RBUkdFVF9P RkZfTE9XKERTQ19SQ19UR1RfT0ZGU0VUX0xPX0NPTlNUKTsKPiA+KwlEUk1fSU5GTygiUFBTMTAg PSAweCUwOHhcbiIsIHBwc192YWwpOwo+ID4rCWlmIChlbmNvZGVyLT50eXBlID09IElOVEVMX09V VFBVVF9FRFApIHsKPiA+KwkJSTkxNV9XUklURShEU0NBX1BJQ1RVUkVfUEFSQU1FVEVSX1NFVF8x MCwgcHBzX3ZhbCk7Cj4gPisJCS8qCj4gPisJCSAqIElmIDIgVkRTQyBpbnN0YW5jZXMgYXJlIG5l ZWRlZCwgY29uZmlndXJlIFBQUyBmb3Igc2Vjb25kCj4gPisJCSAqIFZEU0MKPiA+KwkJICovCj4g PisJCWlmIChjcnRjX3N0YXRlLT5kc2NfcGFyYW1zLmRzY19zcGxpdCkKPiA+KwkJCUk5MTVfV1JJ VEUoRFNDQ19QSUNUVVJFX1BBUkFNRVRFUl9TRVRfMTAsCj4gPnBwc192YWwpOwo+ID4rCX0gZWxz ZSB7Cj4gPisJCUk5MTVfV1JJVEUoSUNMX0RTQzBfUElDVFVSRV9QQVJBTUVURVJfU0VUXzEwKHBp cGUpLAo+ID5wcHNfdmFsKTsKPiA+KwkJaWYgKGNydGNfc3RhdGUtPmRzY19wYXJhbXMuZHNjX3Nw bGl0KQo+ID4rCj4gPglJOTE1X1dSSVRFKElDTF9EU0MxX1BJQ1RVUkVfUEFSQU1FVEVSX1NFVF8x MChwaXBlKSwKPiA+KwkJCQkgICBwcHNfdmFsKTsKPiA+Kwl9Cj4gPisKPiA+KwkvKiBQb3B1bGF0 ZSB0aGUgUkNfQlVGX1RIUkVTSCByZWdpc3RlcnMgKi8KPiA+KwltZW1zZXQocmNfYnVmX3RocmVz aF9kd29yZCwgMCwgc2l6ZW9mKHJjX2J1Zl90aHJlc2hfZHdvcmQpKTsKPiA+Kwlmb3IgKGkgPSAw OyBpIDwgRFNDX05VTV9CVUZfUkFOR0VTIC0gMTsgaSsrKSB7Cj4gPisJCXJjX2J1Zl90aHJlc2hf ZHdvcmRbaS80XSB8PSAodTMyKSh2ZHNjX2NmZy0+cmNfYnVmX3RocmVzaFtpXSA8PAo+ID4rCQkJ CQkJICBCSVRTX1BFUl9CWVRFICogKGkgJSA0KSk7Cj4gPisJCURSTV9JTkZPKCIgUkNfQlVGX1RI UkVTSCVkID0gMHglMDh4XG4iLCBpLAo+ID4rCQkJIHJjX2J1Zl90aHJlc2hfZHdvcmRbaS80XSk7 Cj4gPisJfQo+ID4rCWlmIChlbmNvZGVyLT50eXBlID09IElOVEVMX09VVFBVVF9FRFApIHsKPiA+ KwkJSTkxNV9XUklURShEU0NBX1JDX0JVRl9USFJFU0hfMCwKPiA+cmNfYnVmX3RocmVzaF9kd29y ZFswXSk7Cj4gPisJCUk5MTVfV1JJVEUoRFNDQV9SQ19CVUZfVEhSRVNIXzBfVURXLAo+ID5yY19i dWZfdGhyZXNoX2R3b3JkWzFdKTsKPiA+KwkJSTkxNV9XUklURShEU0NBX1JDX0JVRl9USFJFU0hf MSwKPiA+cmNfYnVmX3RocmVzaF9kd29yZFsyXSk7Cj4gPisJCUk5MTVfV1JJVEUoRFNDQV9SQ19C VUZfVEhSRVNIXzFfVURXLAo+ID5yY19idWZfdGhyZXNoX2R3b3JkWzNdKTsKPiA+KwkJaWYgKGNy dGNfc3RhdGUtPmRzY19wYXJhbXMuZHNjX3NwbGl0KSB7Cj4gPisJCQlJOTE1X1dSSVRFKERTQ0Nf UkNfQlVGX1RIUkVTSF8wLAo+ID4rCQkJCSAgIHJjX2J1Zl90aHJlc2hfZHdvcmRbMF0pOwo+ID4r CQkJSTkxNV9XUklURShEU0NDX1JDX0JVRl9USFJFU0hfMF9VRFcsCj4gPisJCQkJICAgcmNfYnVm X3RocmVzaF9kd29yZFsxXSk7Cj4gPisJCQlJOTE1X1dSSVRFKERTQ0NfUkNfQlVGX1RIUkVTSF8x LAo+ID4rCQkJCSAgIHJjX2J1Zl90aHJlc2hfZHdvcmRbMl0pOwo+ID4rCQkJSTkxNV9XUklURShE U0NDX1JDX0JVRl9USFJFU0hfMV9VRFcsCj4gPisJCQkJICAgcmNfYnVmX3RocmVzaF9kd29yZFsz XSk7Cj4gPisJCX0KPiA+Kwl9IGVsc2Ugewo+ID4rCQlJOTE1X1dSSVRFKElDTF9EU0MwX1JDX0JV Rl9USFJFU0hfMChwaXBlKSwKPiA+KwkJCSAgIHJjX2J1Zl90aHJlc2hfZHdvcmRbMF0pOwo+ID4r CQlJOTE1X1dSSVRFKElDTF9EU0MwX1JDX0JVRl9USFJFU0hfMF9VRFcocGlwZSksCj4gPisJCQkg ICByY19idWZfdGhyZXNoX2R3b3JkWzFdKTsKPiA+KwkJSTkxNV9XUklURShJQ0xfRFNDMF9SQ19C VUZfVEhSRVNIXzEocGlwZSksCj4gPisJCQkgICByY19idWZfdGhyZXNoX2R3b3JkWzJdKTsKPiA+ KwkJSTkxNV9XUklURShJQ0xfRFNDMF9SQ19CVUZfVEhSRVNIXzFfVURXKHBpcGUpLAo+ID4rCQkJ ICAgcmNfYnVmX3RocmVzaF9kd29yZFszXSk7Cj4gPisJCWlmIChjcnRjX3N0YXRlLT5kc2NfcGFy YW1zLmRzY19zcGxpdCkgewo+ID4rCQkJSTkxNV9XUklURShJQ0xfRFNDMV9SQ19CVUZfVEhSRVNI XzAocGlwZSksCj4gPisJCQkJICAgcmNfYnVmX3RocmVzaF9kd29yZFswXSk7Cj4gPisJCQlJOTE1 X1dSSVRFKElDTF9EU0MxX1JDX0JVRl9USFJFU0hfMF9VRFcocGlwZSksCj4gPisJCQkJICAgcmNf YnVmX3RocmVzaF9kd29yZFsxXSk7Cj4gPisJCQlJOTE1X1dSSVRFKElDTF9EU0MxX1JDX0JVRl9U SFJFU0hfMShwaXBlKSwKPiA+KwkJCQkgICByY19idWZfdGhyZXNoX2R3b3JkWzJdKTsKPiA+KwkJ CUk5MTVfV1JJVEUoSUNMX0RTQzFfUkNfQlVGX1RIUkVTSF8xX1VEVyhwaXBlKSwKPiA+KwkJCQkg ICByY19idWZfdGhyZXNoX2R3b3JkWzNdKTsKPiA+KwkJfQo+ID4rCX0KPiA+Kwo+ID4rCS8qIFBv cHVsYXRlIHRoZSBSQ19SQU5HRV9QQVJBTUVURVJTIHJlZ2lzdGVycyAqLwo+ID4rCW1lbXNldChy Y19yYW5nZV9wYXJhbXNfZHdvcmQsIDAsIHNpemVvZihyY19yYW5nZV9wYXJhbXNfZHdvcmQpKTsK PiA+Kwlmb3IgKGkgPSAwOyBpIDwgRFNDX05VTV9CVUZfUkFOR0VTOyBpKyspIHsKPiA+KwkJcmNf cmFuZ2VfcGFyYW1zX2R3b3JkW2kvMl0gfD0gKHUzMikoKCh2ZHNjX2NmZy0KPiA+PnJjX3Jhbmdl X3BhcmFtc1tpXS5yYW5nZV9icGdfb2Zmc2V0IDw8Cj4gPisJCQkJCQkgICAgICBSQ19CUEdfT0ZG U0VUX1NISUZUKSB8Cj4gPisJCQkJCQkgICAgICh2ZHNjX2NmZy0KPiA+PnJjX3JhbmdlX3BhcmFt c1tpXS5yYW5nZV9tYXhfcXAgPDwKPiA+KwkJCQkJCSAgICAgIFJDX01BWF9RUF9TSElGVCkgfAo+ ID4rCQkJCQkJICAgICAodmRzY19jZmctCj4gPj5yY19yYW5nZV9wYXJhbXNbaV0ucmFuZ2VfbWlu X3FwIDw8Cj4gPisJCQkJCQkgICAgICBSQ19NSU5fUVBfU0hJRlQpKSA8PCAxNiAqCj4gPihpICUg MikpOwo+ID4rCQlEUk1fSU5GTygiIFJDX1JBTkdFX1BBUkFNXyVkID0gMHglMDh4XG4iLCBpLAo+ ID4rCQkJIHJjX3JhbmdlX3BhcmFtc19kd29yZFtpLzJdKTsKPiA+Kwl9Cj4gPisJaWYgKGVuY29k ZXItPnR5cGUgPT0gSU5URUxfT1VUUFVUX0VEUCkgewo+ID4rCQlJOTE1X1dSSVRFKERTQ0FfUkNf UkFOR0VfUEFSQU1FVEVSU18wLAo+ID4rCQkJICAgcmNfcmFuZ2VfcGFyYW1zX2R3b3JkWzBdKTsK PiA+KwkJSTkxNV9XUklURShEU0NBX1JDX1JBTkdFX1BBUkFNRVRFUlNfMF9VRFcsCj4gPisJCQkg ICByY19yYW5nZV9wYXJhbXNfZHdvcmRbMV0pOwo+ID4rCQlJOTE1X1dSSVRFKERTQ0FfUkNfUkFO R0VfUEFSQU1FVEVSU18xLAo+ID4rCQkJICAgcmNfcmFuZ2VfcGFyYW1zX2R3b3JkWzJdKTsKPiA+ KwkJSTkxNV9XUklURShEU0NBX1JDX1JBTkdFX1BBUkFNRVRFUlNfMV9VRFcsCj4gPisJCQkgICBy Y19yYW5nZV9wYXJhbXNfZHdvcmRbM10pOwo+ID4rCQlJOTE1X1dSSVRFKERTQ0FfUkNfUkFOR0Vf UEFSQU1FVEVSU18yLAo+ID4rCQkJICAgcmNfcmFuZ2VfcGFyYW1zX2R3b3JkWzRdKTsKPiA+KwkJ STkxNV9XUklURShEU0NBX1JDX1JBTkdFX1BBUkFNRVRFUlNfMl9VRFcsCj4gPisJCQkgICByY19y YW5nZV9wYXJhbXNfZHdvcmRbNV0pOwo+ID4rCQlJOTE1X1dSSVRFKERTQ0FfUkNfUkFOR0VfUEFS QU1FVEVSU18zLAo+ID4rCQkJICAgcmNfcmFuZ2VfcGFyYW1zX2R3b3JkWzZdKTsKPiA+KwkJSTkx NV9XUklURShEU0NBX1JDX1JBTkdFX1BBUkFNRVRFUlNfM19VRFcsCj4gPisJCQkgICByY19yYW5n ZV9wYXJhbXNfZHdvcmRbN10pOwo+ID4rCQlpZiAoY3J0Y19zdGF0ZS0+ZHNjX3BhcmFtcy5kc2Nf c3BsaXQpIHsKPiA+KwkJCUk5MTVfV1JJVEUoRFNDQ19SQ19SQU5HRV9QQVJBTUVURVJTXzAsCj4g PisJCQkJICAgcmNfcmFuZ2VfcGFyYW1zX2R3b3JkWzBdKTsKPiA+KwkJCUk5MTVfV1JJVEUoRFND Q19SQ19SQU5HRV9QQVJBTUVURVJTXzBfVURXLAo+ID4rCQkJCSAgIHJjX3JhbmdlX3BhcmFtc19k d29yZFsxXSk7Cj4gPisJCQlJOTE1X1dSSVRFKERTQ0NfUkNfUkFOR0VfUEFSQU1FVEVSU18xLAo+ ID4rCQkJCSAgIHJjX3JhbmdlX3BhcmFtc19kd29yZFsyXSk7Cj4gPisJCQlJOTE1X1dSSVRFKERT Q0NfUkNfUkFOR0VfUEFSQU1FVEVSU18xX1VEVywKPiA+KwkJCQkgICByY19yYW5nZV9wYXJhbXNf ZHdvcmRbM10pOwo+ID4rCQkJSTkxNV9XUklURShEU0NDX1JDX1JBTkdFX1BBUkFNRVRFUlNfMiwK PiA+KwkJCQkgICByY19yYW5nZV9wYXJhbXNfZHdvcmRbNF0pOwo+ID4rCQkJSTkxNV9XUklURShE U0NDX1JDX1JBTkdFX1BBUkFNRVRFUlNfMl9VRFcsCj4gPisJCQkJICAgcmNfcmFuZ2VfcGFyYW1z X2R3b3JkWzVdKTsKPiA+KwkJCUk5MTVfV1JJVEUoRFNDQ19SQ19SQU5HRV9QQVJBTUVURVJTXzMs Cj4gPisJCQkJICAgcmNfcmFuZ2VfcGFyYW1zX2R3b3JkWzZdKTsKPiA+KwkJCUk5MTVfV1JJVEUo RFNDQ19SQ19SQU5HRV9QQVJBTUVURVJTXzNfVURXLAo+ID4rCQkJCSAgIHJjX3JhbmdlX3BhcmFt c19kd29yZFs3XSk7Cj4gPisJCX0KPiA+Kwl9IGVsc2Ugewo+ID4rCQlJOTE1X1dSSVRFKElDTF9E U0MwX1JDX1JBTkdFX1BBUkFNRVRFUlNfMChwaXBlKSwKPiA+KwkJCSAgIHJjX3JhbmdlX3BhcmFt c19kd29yZFswXSk7Cj4gPisJCUk5MTVfV1JJVEUoSUNMX0RTQzBfUkNfUkFOR0VfUEFSQU1FVEVS U18wX1VEVyhwaXBlKSwKPiA+KwkJCSAgIHJjX3JhbmdlX3BhcmFtc19kd29yZFsxXSk7Cj4gPisJ CUk5MTVfV1JJVEUoSUNMX0RTQzBfUkNfUkFOR0VfUEFSQU1FVEVSU18xKHBpcGUpLAo+ID4rCQkJ ICAgcmNfcmFuZ2VfcGFyYW1zX2R3b3JkWzJdKTsKPiA+KwkJSTkxNV9XUklURShJQ0xfRFNDMF9S Q19SQU5HRV9QQVJBTUVURVJTXzFfVURXKHBpcGUpLAo+ID4rCQkJICAgcmNfcmFuZ2VfcGFyYW1z X2R3b3JkWzNdKTsKPiA+KwkJSTkxNV9XUklURShJQ0xfRFNDMF9SQ19SQU5HRV9QQVJBTUVURVJT XzIocGlwZSksCj4gPisJCQkgICByY19yYW5nZV9wYXJhbXNfZHdvcmRbNF0pOwo+ID4rCQlJOTE1 X1dSSVRFKElDTF9EU0MwX1JDX1JBTkdFX1BBUkFNRVRFUlNfMl9VRFcocGlwZSksCj4gPisJCQkg ICByY19yYW5nZV9wYXJhbXNfZHdvcmRbNV0pOwo+ID4rCQlJOTE1X1dSSVRFKElDTF9EU0MwX1JD X1JBTkdFX1BBUkFNRVRFUlNfMyhwaXBlKSwKPiA+KwkJCSAgIHJjX3JhbmdlX3BhcmFtc19kd29y ZFs2XSk7Cj4gPisJCUk5MTVfV1JJVEUoSUNMX0RTQzBfUkNfUkFOR0VfUEFSQU1FVEVSU18zX1VE VyhwaXBlKSwKPiA+KwkJCSAgIHJjX3JhbmdlX3BhcmFtc19kd29yZFs3XSk7Cj4gPisJCWlmIChj cnRjX3N0YXRlLT5kc2NfcGFyYW1zLmRzY19zcGxpdCkgewo+ID4rCj4gPglJOTE1X1dSSVRFKElD TF9EU0MxX1JDX1JBTkdFX1BBUkFNRVRFUlNfMChwaXBlKSwKPiA+KwkJCQkgICByY19yYW5nZV9w YXJhbXNfZHdvcmRbMF0pOwo+ID4rCj4gPglJOTE1X1dSSVRFKElDTF9EU0MxX1JDX1JBTkdFX1BB UkFNRVRFUlNfMF9VRFcocGlwZSksCj4gPisJCQkJICAgcmNfcmFuZ2VfcGFyYW1zX2R3b3JkWzFd KTsKPiA+Kwo+ID4JSTkxNV9XUklURShJQ0xfRFNDMV9SQ19SQU5HRV9QQVJBTUVURVJTXzEocGlw ZSksCj4gPisJCQkJICAgcmNfcmFuZ2VfcGFyYW1zX2R3b3JkWzJdKTsKPiA+Kwo+ID4JSTkxNV9X UklURShJQ0xfRFNDMV9SQ19SQU5HRV9QQVJBTUVURVJTXzFfVURXKHBpcGUpLAo+ID4rCQkJCSAg IHJjX3JhbmdlX3BhcmFtc19kd29yZFszXSk7Cj4gPisKPiA+CUk5MTVfV1JJVEUoSUNMX0RTQzFf UkNfUkFOR0VfUEFSQU1FVEVSU18yKHBpcGUpLAo+ID4rCQkJCSAgIHJjX3JhbmdlX3BhcmFtc19k d29yZFs0XSk7Cj4gPisKPiA+CUk5MTVfV1JJVEUoSUNMX0RTQzFfUkNfUkFOR0VfUEFSQU1FVEVS U18yX1VEVyhwaXBlKSwKPiA+KwkJCQkgICByY19yYW5nZV9wYXJhbXNfZHdvcmRbNV0pOwo+ID4r Cj4gPglJOTE1X1dSSVRFKElDTF9EU0MxX1JDX1JBTkdFX1BBUkFNRVRFUlNfMyhwaXBlKSwKPiA+ KwkJCQkgICByY19yYW5nZV9wYXJhbXNfZHdvcmRbNl0pOwo+ID4rCj4gPglJOTE1X1dSSVRFKElD TF9EU0MxX1JDX1JBTkdFX1BBUkFNRVRFUlNfM19VRFcocGlwZSksCj4gPisJCQkJICAgcmNfcmFu Z2VfcGFyYW1zX2R3b3JkWzddKTsKPiA+KwkJfQo+ID4rCX0KPiAKPiBBbnkgc3BlY2lmaWMgcmVh c29uIGZvciBQUFMxNiB0byBiZSBhZnRlciBSQ19SQU5HRV9QQVJBTUVURVJTIGFuZCBSQ19CVUZf VEhSRVNIPwo+IAo+IEFudXNoYQoKVGhhdHMganVzdCBob3cgaXRzIG9yZGVyZWQgaW4gdGhlIGJz cGVjLgoKTWFuYXNpCgo+ID4rCS8qIFBvcHVsYXRlIFBpY3R1cmUgcGFyYW1ldGVyIHNldCAxNiAq Lwo+ID4rCXBwc192YWwgPSAwOwo+ID4rCXBwc192YWwgfD0gRFNDX1NMSUNFX0NIVU5LX1NJWkUo dmRzY19jZmctPnNsaWNlX2NodW5rX3NpemUpIHwKPiA+KwkJRFNDX1NMSUNFX1BFUl9MSU5FKCh2 ZHNjX2NmZy0+cGljX3dpZHRoIC8KPiA+bnVtX3Zkc2NfaW5zdGFuY2VzKSAvCj4gPisJCQkJICAg dmRzY19jZmctPnNsaWNlX3dpZHRoKSB8Cj4gPisJCURTQ19TTElDRV9ST1dfUEVSX0ZSQU1FKHZk c2NfY2ZnLT5waWNfaGVpZ2h0IC8KPiA+KwkJCQkJdmRzY19jZmctPnNsaWNlX2hlaWdodCk7Cj4g PisJRFJNX0lORk8oIlBQUzE2ID0gMHglMDh4XG4iLCBwcHNfdmFsKTsKPiA+KwlpZiAoZW5jb2Rl ci0+dHlwZSA9PSBJTlRFTF9PVVRQVVRfRURQKSB7Cj4gPisJCUk5MTVfV1JJVEUoRFNDQV9QSUNU VVJFX1BBUkFNRVRFUl9TRVRfMTYsIHBwc192YWwpOwo+ID4rCQkvKgo+ID4rCQkgKiBJZiAyIFZE U0MgaW5zdGFuY2VzIGFyZSBuZWVkZWQsIGNvbmZpZ3VyZSBQUFMgZm9yIHNlY29uZAo+ID4rCQkg KiBWRFNDCj4gPisJCSAqLwo+ID4rCQlpZiAoY3J0Y19zdGF0ZS0+ZHNjX3BhcmFtcy5kc2Nfc3Bs aXQpCj4gPisJCQlJOTE1X1dSSVRFKERTQ0NfUElDVFVSRV9QQVJBTUVURVJfU0VUXzE2LAo+ID5w cHNfdmFsKTsKPiA+Kwl9IGVsc2Ugewo+ID4rCQlJOTE1X1dSSVRFKElDTF9EU0MwX1BJQ1RVUkVf UEFSQU1FVEVSX1NFVF8xNihwaXBlKSwKPiA+cHBzX3ZhbCk7Cj4gPisJCWlmIChjcnRjX3N0YXRl LT5kc2NfcGFyYW1zLmRzY19zcGxpdCkKPiA+Kwo+ID4JSTkxNV9XUklURShJQ0xfRFNDMV9QSUNU VVJFX1BBUkFNRVRFUl9TRVRfMTYocGlwZSksCj4gPisJCQkJICAgcHBzX3ZhbCk7Cj4gPisJfQo+ ID4rfQo+ID4rCj4gPit2b2lkIGludGVsX2RzY19lbmFibGUoc3RydWN0IGludGVsX2VuY29kZXIg KmVuY29kZXIsCj4gPisJCSAgICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRl KSB7Cj4gPisKPiA+KwlpZiAoIWNydGNfc3RhdGUtPmRzY19wYXJhbXMuY29tcHJlc3Npb25fZW5h YmxlKQo+ID4rCQlyZXR1cm47Cj4gPisKPiA+KwlpbnRlbF9jb25maWd1cmVfcHBzX2Zvcl9kc2Nf ZW5jb2RlcihlbmNvZGVyLCBjcnRjX3N0YXRlKTsKPiA+Kwo+ID4rCXJldHVybjsKPiA+K30KPiA+ LS0KPiA+Mi4xOC4wCj4gCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1k ZXZlbAo=