From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dave Airlie Subject: [PATCH] amdgpu/dc: drop dml display_mode_support.c (v2) Date: Thu, 28 Sep 2017 12:29:53 +1000 Message-ID: <20170928022953.29877-1-airlied@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org RnJvbTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KClRoaXMgY29kZSBpc24ndCB1 c2VkLCBhbmQgdGhpcyBmdW5jdGlvbiBpcyBodWdlLCByZWltcG9ydCBsYXRlciBpZgpnb2luZyB0 byBiZSB1c2VkLgoKU2lnbmVkLW9mZi1ieTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNv bT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZG1sL01ha2VmaWxlICAgICAg ICB8ICAgIDQgKy0KIC4uLi9kcm0vYW1kL2Rpc3BsYXkvZGMvZG1sL2Rpc3BsYXlfbW9kZV9zdXBw b3J0LmMgIHwgMjMyNyAtLS0tLS0tLS0tLS0tLS0tLS0tLQogLi4uL2RybS9hbWQvZGlzcGxheS9k Yy9kbWwvZGlzcGxheV9tb2RlX3N1cHBvcnQuaCAgfCAgICA1IC0KIDMgZmlsZXMgY2hhbmdlZCwg MSBpbnNlcnRpb24oKyksIDIzMzUgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RtbC9kaXNwbGF5X21vZGVfc3VwcG9ydC5jCgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RtbC9NYWtlZmlsZSBi L2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kbWwvTWFrZWZpbGUKaW5kZXggYTZiZjM2 NC4uZWM3MTJkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2Rt bC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZG1sL01ha2Vm aWxlCkBAIC0xMCwxMiArMTAsMTAgQEAgQ0ZMQUdTX2Rpc3BsYXlfcnFfZGxnX2hlbHBlcnMubyA6 PSAtbWhhcmQtZmxvYXQgLW1zc2UgLW1wcmVmZXJyZWQtc3RhY2stYm91bmRhcnkKIENGTEFHU19k aXNwbGF5X3dhdGVybWFyay5vIDo9IC1taGFyZC1mbG9hdCAtbXNzZSAtbXByZWZlcnJlZC1zdGFj ay1ib3VuZGFyeT00CiBDRkxBR1Nfc29jX2JvdW5kaW5nX2JveC5vIDo9IC1taGFyZC1mbG9hdCAt bXNzZSAtbXByZWZlcnJlZC1zdGFjay1ib3VuZGFyeT00CiBDRkxBR1NfZG1sX2NvbW1vbl9kZWZz Lm8gOj0gLW1oYXJkLWZsb2F0IC1tc3NlIC1tcHJlZmVycmVkLXN0YWNrLWJvdW5kYXJ5PTQKLUNG TEFHU19kaXNwbGF5X21vZGVfc3VwcG9ydC5vIDo9IC1taGFyZC1mbG9hdCAtbXNzZSAtbXByZWZl cnJlZC1zdGFjay1ib3VuZGFyeT00Ci0KIAogRE1MID0gZGlzcGxheV9tb2RlX2xpYi5vIGRpc3Bs YXlfcnFfZGxnX2NhbGMubyBcCiAJICBkaXNwbGF5X3JxX2RsZ19oZWxwZXJzLm8gZGlzcGxheV93 YXRlcm1hcmsubyBcCi0JICBzb2NfYm91bmRpbmdfYm94Lm8gZG1sX2NvbW1vbl9kZWZzLm8gZGlz cGxheV9tb2RlX3N1cHBvcnQubworCSAgc29jX2JvdW5kaW5nX2JveC5vIGRtbF9jb21tb25fZGVm cy5vCiAKIEFNRF9EQUxfRE1MID0gJChhZGRwcmVmaXggJChBTUREQUxQQVRIKS9kYy9kbWwvLCQo RE1MKSkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RtbC9k aXNwbGF5X21vZGVfc3VwcG9ydC5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2Rt bC9kaXNwbGF5X21vZGVfc3VwcG9ydC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBh YzU3MzU2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kbWwv ZGlzcGxheV9tb2RlX3N1cHBvcnQuYworKysgL2Rldi9udWxsCkBAIC0xLDIzMjcgKzAsMCBAQAot LyoKLSAqIENvcHlyaWdodCAyMDE3IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KLSAqCi0g KiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBl cnNvbiBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVk IGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhl IFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRp b24KLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBk aXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0 d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBm dXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgot ICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90 aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBv cnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQg IkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1Q TElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9O SU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFRIRSBDT1BZUklHSFQgSE9MREVS KFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgotICog T1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBP UiBPVEhFUldJU0UsCi0gKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJ VEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKLSAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBT T0ZUV0FSRS4KLSAqCi0gKiBBdXRob3JzOiBBTUQKLSAqCi0gKi8KLQotI2luY2x1ZGUgImRpc3Bs YXlfbW9kZV9zdXBwb3J0LmgiCi0jaW5jbHVkZSAiZGlzcGxheV9tb2RlX2xpYi5oIgotCi0jaW5j bHVkZSAiZG1sX2lubGluZV9kZWZzLmgiCi1pbnQgZG1sX21zX2NoZWNrKAotCQlzdHJ1Y3QgZGlz cGxheV9tb2RlX2xpYiAqbW9kZV9saWIsCi0JCXN0cnVjdCBfdmNzX2RwaV9kaXNwbGF5X2UyZV9w aXBlX3BhcmFtc19zdCAqZTJlLAotCQlpbnQgbnVtX3BpcGVzKQotewotCXN0cnVjdCBfdmNzX2Rw aV9pcF9wYXJhbXNfc3QgKmlwOwotCXN0cnVjdCBfdmNzX2RwaV9zb2NfYm91bmRpbmdfYm94X3N0 ICpzb2M7Ci0Jc3RydWN0IF92Y3NfZHBpX21vZGVfZXZhbHVhdGlvbl9zdCAqbWU7Ci0Jc3RydWN0 IGRtbF9tc19pbnRlcm5hbF92YXJzICp2OwotCWludCBudW1fcGxhbmVzLCBpLCBqLCBpaiwgaywg aWprOwotCi0JaXAgPSAmKG1vZGVfbGliLT5pcCk7Ci0Jc29jID0gJihtb2RlX2xpYi0+c29jKTsK LQltZSA9ICYobW9kZV9saWItPm1lKTsKLQl2ID0gJihtb2RlX2xpYi0+dmFycyk7Ci0JbnVtX3Bs YW5lcyA9IGRtbF93bV9lMmVfdG9fd20obW9kZV9saWIsIGUyZSwgbnVtX3BpcGVzLCB2LT5wbGFu ZXMpOwotCi0JLy9pbnN0YW50aWF0aW5nIHZhcmlhYmxlcyB0byB6ZXJvCi0Jdi0+TWFjcm9UaWxl QmxvY2tXaWR0aEMgPSAwOwotCXYtPlN3YXRoV2lkdGhHcmFudWxhcml0eUMgPSAwOwotCi0Jdi0+ RENGQ0xLUGVyU3RhdGVbNV0gPSAwOwotCXYtPkRDRkNMS1BlclN0YXRlWzRdID0gMDsKLQl2LT5E Q0ZDTEtQZXJTdGF0ZVszXSA9IDA7Ci0Jdi0+RENGQ0xLUGVyU3RhdGVbMl0gPSAwOwotCXYtPkRD RkNMS1BlclN0YXRlWzFdID0gMDsKLQl2LT5EQ0ZDTEtQZXJTdGF0ZVswXSA9IDA7Ci0KLQlpZiAo c29jLT52bWluLmRjZmNsa19taHogPiAwKSB7Ci0JCXYtPkRDRkNMS1BlclN0YXRlWzVdID0gc29j LT52bWluLmRjZmNsa19taHo7Ci0JCXYtPkRDRkNMS1BlclN0YXRlWzRdID0gc29jLT52bWluLmRj ZmNsa19taHo7Ci0JCXYtPkRDRkNMS1BlclN0YXRlWzNdID0gc29jLT52bWluLmRjZmNsa19taHo7 Ci0JCXYtPkRDRkNMS1BlclN0YXRlWzJdID0gc29jLT52bWluLmRjZmNsa19taHo7Ci0JCXYtPkRD RkNMS1BlclN0YXRlWzFdID0gc29jLT52bWluLmRjZmNsa19taHo7Ci0JCXYtPkRDRkNMS1BlclN0 YXRlWzBdID0gc29jLT52bWluLmRjZmNsa19taHo7Ci0JfQotCi0JaWYgKHNvYy0+dm1pZC5kY2Zj bGtfbWh6ID4gMCkgewotCQl2LT5EQ0ZDTEtQZXJTdGF0ZVs1XSA9IHNvYy0+dm1pZC5kY2ZjbGtf bWh6OwotCQl2LT5EQ0ZDTEtQZXJTdGF0ZVs0XSA9IHNvYy0+dm1pZC5kY2ZjbGtfbWh6OwotCQl2 LT5EQ0ZDTEtQZXJTdGF0ZVszXSA9IHNvYy0+dm1pZC5kY2ZjbGtfbWh6OwotCQl2LT5EQ0ZDTEtQ ZXJTdGF0ZVsyXSA9IHNvYy0+dm1pZC5kY2ZjbGtfbWh6OwotCQl2LT5EQ0ZDTEtQZXJTdGF0ZVsx XSA9IHNvYy0+dm1pZC5kY2ZjbGtfbWh6OwotCX0KLQotCWlmIChzb2MtPnZub20uZGNmY2xrX21o eiA+IDApIHsKLQkJdi0+RENGQ0xLUGVyU3RhdGVbNV0gPSBzb2MtPnZub20uZGNmY2xrX21oejsK LQkJdi0+RENGQ0xLUGVyU3RhdGVbNF0gPSBzb2MtPnZub20uZGNmY2xrX21oejsKLQkJdi0+RENG Q0xLUGVyU3RhdGVbM10gPSBzb2MtPnZub20uZGNmY2xrX21oejsKLQkJdi0+RENGQ0xLUGVyU3Rh dGVbMl0gPSBzb2MtPnZub20uZGNmY2xrX21oejsKLQl9Ci0KLQlpZiAoc29jLT52bWF4LmRjZmNs a19taHogPiAwKSB7Ci0JCXYtPkRDRkNMS1BlclN0YXRlWzVdID0gc29jLT52bWF4LmRjZmNsa19t aHo7Ci0JCXYtPkRDRkNMS1BlclN0YXRlWzRdID0gc29jLT52bWF4LmRjZmNsa19taHo7Ci0JCXYt PkRDRkNMS1BlclN0YXRlWzNdID0gc29jLT52bWF4LmRjZmNsa19taHo7Ci0JfQotCi0Jdi0+RmFi cmljQW5kRFJBTUJhbmR3aWR0aFBlclN0YXRlWzVdID0gMDsKLQl2LT5GYWJyaWNBbmREUkFNQmFu ZHdpZHRoUGVyU3RhdGVbNF0gPSAwOwotCXYtPkZhYnJpY0FuZERSQU1CYW5kd2lkdGhQZXJTdGF0 ZVszXSA9IDA7Ci0Jdi0+RmFicmljQW5kRFJBTUJhbmR3aWR0aFBlclN0YXRlWzJdID0gMDsKLQl2 LT5GYWJyaWNBbmREUkFNQmFuZHdpZHRoUGVyU3RhdGVbMV0gPSAwOwotCXYtPkZhYnJpY0FuZERS QU1CYW5kd2lkdGhQZXJTdGF0ZVswXSA9IDA7Ci0KLQlpZiAoc29jLT52bWluLmRyYW1fYndfcGVy X2NoYW5fZ2JwcyA+IDApIHsKLQkJdi0+RmFicmljQW5kRFJBTUJhbmR3aWR0aFBlclN0YXRlWzVd ID0gc29jLT52bWluLmRyYW1fYndfcGVyX2NoYW5fZ2JwczsKLQkJdi0+RmFicmljQW5kRFJBTUJh bmR3aWR0aFBlclN0YXRlWzRdID0gc29jLT52bWluLmRyYW1fYndfcGVyX2NoYW5fZ2JwczsKLQkJ di0+RmFicmljQW5kRFJBTUJhbmR3aWR0aFBlclN0YXRlWzNdID0gc29jLT52bWluLmRyYW1fYndf cGVyX2NoYW5fZ2JwczsKLQkJdi0+RmFicmljQW5kRFJBTUJhbmR3aWR0aFBlclN0YXRlWzJdID0g c29jLT52bWluLmRyYW1fYndfcGVyX2NoYW5fZ2JwczsKLQkJdi0+RmFicmljQW5kRFJBTUJhbmR3 aWR0aFBlclN0YXRlWzFdID0gc29jLT52bWluLmRyYW1fYndfcGVyX2NoYW5fZ2JwczsKLQkJdi0+ RmFicmljQW5kRFJBTUJhbmR3aWR0aFBlclN0YXRlWzBdID0gc29jLT52bWluLmRyYW1fYndfcGVy X2NoYW5fZ2JwczsKLQl9Ci0KLQlpZiAoc29jLT52bWlkLmRyYW1fYndfcGVyX2NoYW5fZ2JwcyA+ IDApIHsKLQkJdi0+RmFicmljQW5kRFJBTUJhbmR3aWR0aFBlclN0YXRlWzVdID0gc29jLT52bWlk LmRyYW1fYndfcGVyX2NoYW5fZ2JwczsKLQkJdi0+RmFicmljQW5kRFJBTUJhbmR3aWR0aFBlclN0 YXRlWzRdID0gc29jLT52bWlkLmRyYW1fYndfcGVyX2NoYW5fZ2JwczsKLQkJdi0+RmFicmljQW5k RFJBTUJhbmR3aWR0aFBlclN0YXRlWzNdID0gc29jLT52bWlkLmRyYW1fYndfcGVyX2NoYW5fZ2Jw czsKLQkJdi0+RmFicmljQW5kRFJBTUJhbmR3aWR0aFBlclN0YXRlWzJdID0gc29jLT52bWlkLmRy YW1fYndfcGVyX2NoYW5fZ2JwczsKLQkJdi0+RmFicmljQW5kRFJBTUJhbmR3aWR0aFBlclN0YXRl WzFdID0gc29jLT52bWlkLmRyYW1fYndfcGVyX2NoYW5fZ2JwczsKLQl9Ci0KLQlpZiAoc29jLT52 bm9tLmRyYW1fYndfcGVyX2NoYW5fZ2JwcyA+IDApIHsKLQkJdi0+RmFicmljQW5kRFJBTUJhbmR3 aWR0aFBlclN0YXRlWzVdID0gc29jLT52bm9tLmRyYW1fYndfcGVyX2NoYW5fZ2JwczsKLQkJdi0+ RmFicmljQW5kRFJBTUJhbmR3aWR0aFBlclN0YXRlWzRdID0gc29jLT52bm9tLmRyYW1fYndfcGVy X2NoYW5fZ2JwczsKLQkJdi0+RmFicmljQW5kRFJBTUJhbmR3aWR0aFBlclN0YXRlWzNdID0gc29j LT52bm9tLmRyYW1fYndfcGVyX2NoYW5fZ2JwczsKLQkJdi0+RmFicmljQW5kRFJBTUJhbmR3aWR0 aFBlclN0YXRlWzJdID0gc29jLT52bm9tLmRyYW1fYndfcGVyX2NoYW5fZ2JwczsKLQl9Ci0KLQlp ZiAoc29jLT52bWF4LmRyYW1fYndfcGVyX2NoYW5fZ2JwcyA+IDApIHsKLQkJdi0+RmFicmljQW5k RFJBTUJhbmR3aWR0aFBlclN0YXRlWzVdID0gc29jLT52bWF4LmRyYW1fYndfcGVyX2NoYW5fZ2Jw czsKLQkJdi0+RmFicmljQW5kRFJBTUJhbmR3aWR0aFBlclN0YXRlWzRdID0gc29jLT52bWF4LmRy YW1fYndfcGVyX2NoYW5fZ2JwczsKLQkJdi0+RmFicmljQW5kRFJBTUJhbmR3aWR0aFBlclN0YXRl WzNdID0gc29jLT52bWF4LmRyYW1fYndfcGVyX2NoYW5fZ2JwczsKLQl9Ci0KLQl2LT5QSFlDTEtQ ZXJTdGF0ZVs1XSA9IDA7Ci0Jdi0+UEhZQ0xLUGVyU3RhdGVbNF0gPSAwOwotCXYtPlBIWUNMS1Bl clN0YXRlWzNdID0gMDsKLQl2LT5QSFlDTEtQZXJTdGF0ZVsyXSA9IDA7Ci0Jdi0+UEhZQ0xLUGVy U3RhdGVbMV0gPSAwOwotCXYtPlBIWUNMS1BlclN0YXRlWzBdID0gMDsKLQotCWlmIChzb2MtPnZt aW4ucGh5Y2xrX21oeiA+IDApIHsKLQkJdi0+UEhZQ0xLUGVyU3RhdGVbNV0gPSBzb2MtPnZtaW4u cGh5Y2xrX21oejsKLQkJdi0+UEhZQ0xLUGVyU3RhdGVbNF0gPSBzb2MtPnZtaW4ucGh5Y2xrX21o ejsKLQkJdi0+UEhZQ0xLUGVyU3RhdGVbM10gPSBzb2MtPnZtaW4ucGh5Y2xrX21oejsKLQkJdi0+ UEhZQ0xLUGVyU3RhdGVbMl0gPSBzb2MtPnZtaW4ucGh5Y2xrX21oejsKLQkJdi0+UEhZQ0xLUGVy U3RhdGVbMV0gPSBzb2MtPnZtaW4ucGh5Y2xrX21oejsKLQkJdi0+UEhZQ0xLUGVyU3RhdGVbMF0g PSBzb2MtPnZtaW4ucGh5Y2xrX21oejsKLQl9Ci0KLQlpZiAoc29jLT52bWlkLnBoeWNsa19taHog PiAwKSB7Ci0JCXYtPlBIWUNMS1BlclN0YXRlWzVdID0gc29jLT52bWlkLnBoeWNsa19taHo7Ci0J CXYtPlBIWUNMS1BlclN0YXRlWzRdID0gc29jLT52bWlkLnBoeWNsa19taHo7Ci0JCXYtPlBIWUNM S1BlclN0YXRlWzNdID0gc29jLT52bWlkLnBoeWNsa19taHo7Ci0JCXYtPlBIWUNMS1BlclN0YXRl WzJdID0gc29jLT52bWlkLnBoeWNsa19taHo7Ci0JCXYtPlBIWUNMS1BlclN0YXRlWzFdID0gc29j LT52bWlkLnBoeWNsa19taHo7Ci0JfQotCi0JaWYgKHNvYy0+dm5vbS5waHljbGtfbWh6ID4gMCkg ewotCQl2LT5QSFlDTEtQZXJTdGF0ZVs1XSA9IHNvYy0+dm5vbS5waHljbGtfbWh6OwotCQl2LT5Q SFlDTEtQZXJTdGF0ZVs0XSA9IHNvYy0+dm5vbS5waHljbGtfbWh6OwotCQl2LT5QSFlDTEtQZXJT dGF0ZVszXSA9IHNvYy0+dm5vbS5waHljbGtfbWh6OwotCQl2LT5QSFlDTEtQZXJTdGF0ZVsyXSA9 IHNvYy0+dm5vbS5waHljbGtfbWh6OwotCX0KLQotCWlmIChzb2MtPnZtYXgucGh5Y2xrX21oeiA+ IDApIHsKLQkJdi0+UEhZQ0xLUGVyU3RhdGVbNV0gPSBzb2MtPnZtYXgucGh5Y2xrX21oejsKLQkJ di0+UEhZQ0xLUGVyU3RhdGVbNF0gPSBzb2MtPnZtYXgucGh5Y2xrX21oejsKLQkJdi0+UEhZQ0xL UGVyU3RhdGVbM10gPSBzb2MtPnZtYXgucGh5Y2xrX21oejsKLQl9Ci0KLQl2LT5NYXhEaXNwY2xr WzVdID0gMDsKLQl2LT5NYXhEaXNwY2xrWzRdID0gMDsKLQl2LT5NYXhEaXNwY2xrWzNdID0gMDsK LQl2LT5NYXhEaXNwY2xrWzJdID0gMDsKLQl2LT5NYXhEaXNwY2xrWzFdID0gMDsKLQl2LT5NYXhE aXNwY2xrWzBdID0gMDsKLQotCWlmIChzb2MtPnZtaW4uZGlzcGNsa19taHogPiAwKSB7Ci0JCXYt Pk1heERpc3BjbGtbNV0gPSBzb2MtPnZtaW4uZGlzcGNsa19taHo7Ci0JCXYtPk1heERpc3BjbGtb NF0gPSBzb2MtPnZtaW4uZGlzcGNsa19taHo7Ci0JCXYtPk1heERpc3BjbGtbM10gPSBzb2MtPnZt aW4uZGlzcGNsa19taHo7Ci0JCXYtPk1heERpc3BjbGtbMl0gPSBzb2MtPnZtaW4uZGlzcGNsa19t aHo7Ci0JCXYtPk1heERpc3BjbGtbMV0gPSBzb2MtPnZtaW4uZGlzcGNsa19taHo7Ci0JCXYtPk1h eERpc3BjbGtbMF0gPSBzb2MtPnZtaW4uZGlzcGNsa19taHo7Ci0JfQotCi0JaWYgKHNvYy0+dm1p ZC5kaXNwY2xrX21oeiA+IDApIHsKLQkJdi0+TWF4RGlzcGNsa1s1XSA9IHNvYy0+dm1pZC5kaXNw Y2xrX21oejsKLQkJdi0+TWF4RGlzcGNsa1s0XSA9IHNvYy0+dm1pZC5kaXNwY2xrX21oejsKLQkJ di0+TWF4RGlzcGNsa1szXSA9IHNvYy0+dm1pZC5kaXNwY2xrX21oejsKLQkJdi0+TWF4RGlzcGNs a1syXSA9IHNvYy0+dm1pZC5kaXNwY2xrX21oejsKLQkJdi0+TWF4RGlzcGNsa1sxXSA9IHNvYy0+ dm1pZC5kaXNwY2xrX21oejsKLQl9Ci0KLQlpZiAoc29jLT52bm9tLmRpc3BjbGtfbWh6ID4gMCkg ewotCQl2LT5NYXhEaXNwY2xrWzVdID0gc29jLT52bm9tLmRpc3BjbGtfbWh6OwotCQl2LT5NYXhE aXNwY2xrWzRdID0gc29jLT52bm9tLmRpc3BjbGtfbWh6OwotCQl2LT5NYXhEaXNwY2xrWzNdID0g c29jLT52bm9tLmRpc3BjbGtfbWh6OwotCQl2LT5NYXhEaXNwY2xrWzJdID0gc29jLT52bm9tLmRp c3BjbGtfbWh6OwotCX0KLQotCWlmIChzb2MtPnZtYXguZGlzcGNsa19taHogPiAwKSB7Ci0JCXYt Pk1heERpc3BjbGtbNV0gPSBzb2MtPnZtYXguZGlzcGNsa19taHo7Ci0JCXYtPk1heERpc3BjbGtb NF0gPSBzb2MtPnZtYXguZGlzcGNsa19taHo7Ci0JCXYtPk1heERpc3BjbGtbM10gPSBzb2MtPnZt YXguZGlzcGNsa19taHo7Ci0JfQotCi0Jdi0+TWF4RHBwY2xrWzVdID0gMDsKLQl2LT5NYXhEcHBj bGtbNF0gPSAwOwotCXYtPk1heERwcGNsa1szXSA9IDA7Ci0Jdi0+TWF4RHBwY2xrWzJdID0gMDsK LQl2LT5NYXhEcHBjbGtbMV0gPSAwOwotCXYtPk1heERwcGNsa1swXSA9IDA7Ci0KLQlpZiAoc29j LT52bWluLmRwcGNsa19taHogPiAwKSB7Ci0JCXYtPk1heERwcGNsa1s1XSA9IHNvYy0+dm1pbi5k cHBjbGtfbWh6OwotCQl2LT5NYXhEcHBjbGtbNF0gPSBzb2MtPnZtaW4uZHBwY2xrX21oejsKLQkJ di0+TWF4RHBwY2xrWzNdID0gc29jLT52bWluLmRwcGNsa19taHo7Ci0JCXYtPk1heERwcGNsa1sy XSA9IHNvYy0+dm1pbi5kcHBjbGtfbWh6OwotCQl2LT5NYXhEcHBjbGtbMV0gPSBzb2MtPnZtaW4u ZHBwY2xrX21oejsKLQkJdi0+TWF4RHBwY2xrWzBdID0gc29jLT52bWluLmRwcGNsa19taHo7Ci0J fQotCi0JaWYgKHNvYy0+dm1pZC5kcHBjbGtfbWh6ID4gMCkgewotCQl2LT5NYXhEcHBjbGtbNV0g PSBzb2MtPnZtaWQuZHBwY2xrX21oejsKLQkJdi0+TWF4RHBwY2xrWzRdID0gc29jLT52bWlkLmRw cGNsa19taHo7Ci0JCXYtPk1heERwcGNsa1szXSA9IHNvYy0+dm1pZC5kcHBjbGtfbWh6OwotCQl2 LT5NYXhEcHBjbGtbMl0gPSBzb2MtPnZtaWQuZHBwY2xrX21oejsKLQkJdi0+TWF4RHBwY2xrWzFd ID0gc29jLT52bWlkLmRwcGNsa19taHo7Ci0JfQotCi0JaWYgKHNvYy0+dm5vbS5kcHBjbGtfbWh6 ID4gMCkgewotCQl2LT5NYXhEcHBjbGtbNV0gPSBzb2MtPnZub20uZHBwY2xrX21oejsKLQkJdi0+ TWF4RHBwY2xrWzRdID0gc29jLT52bm9tLmRwcGNsa19taHo7Ci0JCXYtPk1heERwcGNsa1szXSA9 IHNvYy0+dm5vbS5kcHBjbGtfbWh6OwotCQl2LT5NYXhEcHBjbGtbMl0gPSBzb2MtPnZub20uZHBw Y2xrX21oejsKLQl9Ci0KLQlpZiAoc29jLT52bWF4LmRwcGNsa19taHogPiAwKSB7Ci0JCXYtPk1h eERwcGNsa1s1XSA9IHNvYy0+dm1heC5kcHBjbGtfbWh6OwotCQl2LT5NYXhEcHBjbGtbNF0gPSBz b2MtPnZtYXguZHBwY2xrX21oejsKLQkJdi0+TWF4RHBwY2xrWzNdID0gc29jLT52bWF4LmRwcGNs a19taHo7Ci0JfQotCi0JaWYgKG1lLT52b2x0YWdlX292ZXJyaWRlID09IGRtX3ZtYXgpIHsKLQkJ di0+Vm9sdGFnZU92ZXJyaWRlTGV2ZWwgPSBOdW1iZXJPZlN0YXRlcyAtIDE7Ci0JfSBlbHNlIGlm IChtZS0+dm9sdGFnZV9vdmVycmlkZSA9PSBkbV92bm9tKSB7Ci0JCXYtPlZvbHRhZ2VPdmVycmlk ZUxldmVsID0gTnVtYmVyT2ZTdGF0ZXMgLSAyOwotCX0gZWxzZSBpZiAobWUtPnZvbHRhZ2Vfb3Zl cnJpZGUgPT0gZG1fdm1pZCkgewotCQl2LT5Wb2x0YWdlT3ZlcnJpZGVMZXZlbCA9IE51bWJlck9m U3RhdGVzIC0gMzsKLQl9IGVsc2UgewotCQl2LT5Wb2x0YWdlT3ZlcnJpZGVMZXZlbCA9IDA7Ci0J fQotCi0JLy8gU2NhbGUgUmF0aW8gU3VwcG9ydCBDaGVjawotCi0Jdi0+U2NhbGVSYXRpb1N1cHBv cnQgPSAxOwotCi0JZm9yIChrID0gMDsgayA8IG51bV9wbGFuZXM7IGsrKykgewotCQlzdHJ1Y3Qg X3Zjc19kcGlfc2NhbGVyX3JhdGlvX2RlcHRoX3N0IHNjYWxlX3JhdGlvX2RlcHRoID0KLQkJCQll MmVbdi0+cGxhbmVzW2tdLmUyZV9pbmRleF0ucGlwZS5zY2FsZV9yYXRpb19kZXB0aDsKLQkJc3Ry dWN0IF92Y3NfZHBpX3NjYWxlcl90YXBzX3N0IHNjYWxlX3RhcHMgPQotCQkJCWUyZVt2LT5wbGFu ZXNba10uZTJlX2luZGV4XS5waXBlLnNjYWxlX3RhcHM7Ci0JCXN0cnVjdCBfdmNzX2RwaV9kaXNw bGF5X3BpcGVfc291cmNlX3BhcmFtc19zdCBzcmMgPQotCQkJCWUyZVt2LT5wbGFuZXNba10uZTJl X2luZGV4XS5waXBlLnNyYzsKLQotCQlpZiAoc2NhbGVfcmF0aW9fZGVwdGguaHNjbF9yYXRpbyA+ IGlwLT5tYXhfaHNjbF9yYXRpbwotCQkJCXx8IHNjYWxlX3JhdGlvX2RlcHRoLnZzY2xfcmF0aW8g PiBpcC0+bWF4X3ZzY2xfcmF0aW8KLQkJCQl8fCBzY2FsZV9yYXRpb19kZXB0aC5oc2NsX3JhdGlv ID4gc2NhbGVfdGFwcy5odGFwcwotCQkJCXx8IHNjYWxlX3JhdGlvX2RlcHRoLnZzY2xfcmF0aW8g PiBzY2FsZV90YXBzLnZ0YXBzCi0JCQkJfHwgKHNyYy5zb3VyY2VfZm9ybWF0ICE9IGRtXzQ0NF82 NCAmJiBzcmMuc291cmNlX2Zvcm1hdCAhPSBkbV80NDRfMzIKLQkJCQkJCSYmIHNyYy5zb3VyY2Vf Zm9ybWF0ICE9IGRtXzQ0NF8xNgotCQkJCQkJJiYgKChzY2FsZV9yYXRpb19kZXB0aC5oc2NsX3Jh dGlvIC8gMgotCQkJCQkJCQk+IHNjYWxlX3RhcHMuaHRhcHNfYykKLQkJCQkJCQkJfHwgKHNjYWxl X3JhdGlvX2RlcHRoLnZzY2xfcmF0aW8gLyAyCi0JCQkJCQkJCQkJPiBzY2FsZV90YXBzLnZ0YXBz X2MpKSkpCi0KLQkJCQl7Ci0JCQl2LT5TY2FsZVJhdGlvU3VwcG9ydCA9IDA7Ci0JCX0KLQl9Ci0K LQkvLyBTb3VyY2UgRm9ybWF0LCBQaXhlbCBGb3JtYXQgYW5kIFNjYW4gU3VwcG9ydCBDaGVjawot Ci0Jdi0+U291cmNlRm9ybWF0UGl4ZWxBbmRTY2FuU3VwcG9ydCA9IDE7Ci0KLQlmb3IgKGsgPSAw OyBrIDwgbnVtX3BsYW5lczsgaysrKSB7Ci0JCXN0cnVjdCBfdmNzX2RwaV9kaXNwbGF5X3BpcGVf c291cmNlX3BhcmFtc19zdCBzcmMgPQotCQkJCWUyZVt2LT5wbGFuZXNba10uZTJlX2luZGV4XS5w aXBlLnNyYzsKLQotCQlpZiAoKHNyYy5zd19tb2RlID09IGRtX3N3X2xpbmVhciAmJiBzcmMuc291 cmNlX3NjYW4gIT0gZG1faG9yeikKLQkJCQl8fCAoKHNyYy5zd19tb2RlID09IGRtX3N3XzRrYl9k IHx8IHNyYy5zd19tb2RlID09IGRtX3N3XzRrYl9kX3gKLQkJCQkJCXx8IHNyYy5zd19tb2RlID09 IGRtX3N3XzY0a2JfZAotCQkJCQkJfHwgc3JjLnN3X21vZGUgPT0gZG1fc3dfNjRrYl9kX3QKLQkJ CQkJCXx8IHNyYy5zd19tb2RlID09IGRtX3N3XzY0a2JfZF94Ci0JCQkJCQl8fCBzcmMuc3dfbW9k ZSA9PSBkbV9zd192YXJfZAotCQkJCQkJfHwgc3JjLnN3X21vZGUgPT0gZG1fc3dfdmFyX2RfeCkK LQkJCQkJCSYmIChzcmMuc291cmNlX2Zvcm1hdCAhPSBkbV80NDRfNjQpKSkgewotCQkJdi0+U291 cmNlRm9ybWF0UGl4ZWxBbmRTY2FuU3VwcG9ydCA9IDA7Ci0JCX0KLQl9Ci0KLQkvLyBCYW5kd2lk dGggU3VwcG9ydCBDaGVjawotCi0JZm9yIChrID0gMDsgayA8IG51bV9wbGFuZXM7IGsrKykgewot CQlzdHJ1Y3QgX3Zjc19kcGlfZGlzcGxheV9waXBlX3NvdXJjZV9wYXJhbXNfc3Qgc3JjID0KLQkJ CQllMmVbdi0+cGxhbmVzW2tdLmUyZV9pbmRleF0ucGlwZS5zcmM7Ci0KLQkJaWYgKHNyYy5zb3Vy Y2Vfc2NhbiA9PSBkbV9ob3J6KSB7Ci0JCQl2LT5Td2F0aFdpZHRoWVNpbmdsZURQUFtrXSA9IHNy Yy52aWV3cG9ydF93aWR0aDsKLQkJfSBlbHNlIHsKLQkJCXYtPlN3YXRoV2lkdGhZU2luZ2xlRFBQ W2tdID0gc3JjLnZpZXdwb3J0X2hlaWdodDsKLQkJfQotCi0JCWlmIChzcmMuc291cmNlX2Zvcm1h dCA9PSBkbV80NDRfNjQpIHsKLQkJCXYtPkJ5dGVQZXJQaXhlbEluREVUWVtrXSA9IDg7Ci0JCQl2 LT5CeXRlUGVyUGl4ZWxJbkRFVENba10gPSAwOwotCQl9IGVsc2UgaWYgKHNyYy5zb3VyY2VfZm9y bWF0ID09IGRtXzQ0NF8zMikgewotCQkJdi0+Qnl0ZVBlclBpeGVsSW5ERVRZW2tdID0gNDsKLQkJ CXYtPkJ5dGVQZXJQaXhlbEluREVUQ1trXSA9IDA7Ci0JCX0gZWxzZSBpZiAoc3JjLnNvdXJjZV9m b3JtYXQgPT0gZG1fNDQ0XzE2KSB7Ci0JCQl2LT5CeXRlUGVyUGl4ZWxJbkRFVFlba10gPSAyOwot CQkJdi0+Qnl0ZVBlclBpeGVsSW5ERVRDW2tdID0gMDsKLQkJfSBlbHNlIGlmIChzcmMuc291cmNl X2Zvcm1hdCA9PSBkbV80MjBfOCkgewotCQkJdi0+Qnl0ZVBlclBpeGVsSW5ERVRZW2tdID0gMTsK LQkJCXYtPkJ5dGVQZXJQaXhlbEluREVUQ1trXSA9IDI7Ci0JCX0gZWxzZSB7Ci0JCQl2LT5CeXRl UGVyUGl4ZWxJbkRFVFlba10gPSA0LjAwIC8gMy4wMDsKLQkJCXYtPkJ5dGVQZXJQaXhlbEluREVU Q1trXSA9IDguMDAgLyAzLjAwOwotCQl9Ci0JfQotCi0Jdi0+VG90YWxSZWFkQmFuZHdpZHRoQ29u c3VtZWRHQnl0ZVBlclNlY29uZCA9IDA7Ci0KLQlmb3IgKGsgPSAwOyBrIDwgbnVtX3BsYW5lczsg aysrKSB7Ci0JCXN0cnVjdCBfdmNzX2RwaV9kaXNwbGF5X3BpcGVfc291cmNlX3BhcmFtc19zdCBz cmMgPQotCQkJCWUyZVt2LT5wbGFuZXNba10uZTJlX2luZGV4XS5waXBlLnNyYzsKLQkJc3RydWN0 IF92Y3NfZHBpX2Rpc3BsYXlfcGlwZV9kZXN0X3BhcmFtc19zdCBkZXN0ID0KLQkJCQllMmVbdi0+ cGxhbmVzW2tdLmUyZV9pbmRleF0ucGlwZS5kZXN0OwotCQlzdHJ1Y3QgX3Zjc19kcGlfc2NhbGVy X3JhdGlvX2RlcHRoX3N0IHNjYWxlX3JhdGlvX2RlcHRoID0KLQkJCQllMmVbdi0+cGxhbmVzW2td LmUyZV9pbmRleF0ucGlwZS5zY2FsZV9yYXRpb19kZXB0aDsKLQotCQl2LT5SZWFkQmFuZHdpZHRo W2tdID0KLQkJCQl2LT5Td2F0aFdpZHRoWVNpbmdsZURQUFtrXQotCQkJCQkJKiAoZG1sX2NlaWxf ZXgodi0+Qnl0ZVBlclBpeGVsSW5ERVRZW2tdLCAxKQotCQkJCQkJCQkqIHNjYWxlX3JhdGlvX2Rl cHRoLnZzY2xfcmF0aW8KLQkJCQkJCQkJKyAoZG1sX2NlaWxfZXgoCi0JCQkJCQkJCQkJdi0+Qnl0 ZVBlclBpeGVsSW5ERVRDW2tdLAotCQkJCQkJCQkJCTIpIC8gMikKLQkJCQkJCQkJCQkqIChzY2Fs ZV9yYXRpb19kZXB0aC52c2NsX3JhdGlvCi0JCQkJCQkJCQkJCQkvIDIpKQotCQkJCQkJLyAoZGVz dC5odG90YWwgLyBkZXN0LnBpeGVsX3JhdGVfbWh6KTsKLQotCQlpZiAoc3JjLmRjYyA9PSAxKSB7 Ci0JCQl2LT5SZWFkQmFuZHdpZHRoW2tdID0gdi0+UmVhZEJhbmR3aWR0aFtrXSAqICgxICsgMSAv IDI1Nik7Ci0JCX0KLQotCQlpZiAoaXAtPnB0ZV9lbmFibGUgPT0gMSAmJiBzcmMuc291cmNlX3Nj YW4gIT0gZG1faG9yegotCQkJCSYmIChzcmMuc3dfbW9kZSA9PSBkbV9zd180a2JfcyB8fCBzcmMu c3dfbW9kZSA9PSBkbV9zd180a2Jfc194Ci0JCQkJCQl8fCBzcmMuc3dfbW9kZSA9PSBkbV9zd180 a2JfZAotCQkJCQkJfHwgc3JjLnN3X21vZGUgPT0gZG1fc3dfNGtiX2RfeCkpIHsKLQkJCXYtPlJl YWRCYW5kd2lkdGhba10gPSB2LT5SZWFkQmFuZHdpZHRoW2tdICogKDEgKyAxIC8gNjQpOwotCQl9 IGVsc2UgaWYgKGlwLT5wdGVfZW5hYmxlID09IDEgJiYgc3JjLnNvdXJjZV9zY2FuID09IGRtX2hv cnoKLQkJCQkmJiAoc3JjLnNvdXJjZV9mb3JtYXQgPT0gZG1fNDQ0XzY0IHx8IHNyYy5zb3VyY2Vf Zm9ybWF0ID09IGRtXzQ0NF8zMikKLQkJCQkmJiAoc3JjLnN3X21vZGUgPT0gZG1fc3dfNjRrYl9z IHx8IHNyYy5zd19tb2RlID09IGRtX3N3XzY0a2Jfc190Ci0JCQkJCQl8fCBzcmMuc3dfbW9kZSA9 PSBkbV9zd182NGtiX3NfeAotCQkJCQkJfHwgc3JjLnN3X21vZGUgPT0gZG1fc3dfNjRrYl9kCi0J CQkJCQl8fCBzcmMuc3dfbW9kZSA9PSBkbV9zd182NGtiX2RfdAotCQkJCQkJfHwgc3JjLnN3X21v ZGUgPT0gZG1fc3dfNjRrYl9kX3gpKSB7Ci0JCQl2LT5SZWFkQmFuZHdpZHRoW2tdID0gdi0+UmVh ZEJhbmR3aWR0aFtrXSAqICgxICsgMSAvIDI1Nik7Ci0JCX0gZWxzZSBpZiAoaXAtPnB0ZV9lbmFi bGUgPT0gMSkgewotCQkJdi0+UmVhZEJhbmR3aWR0aFtrXSA9IHYtPlJlYWRCYW5kd2lkdGhba10g KiAoMSArIDEgLyA1MTIpOwotCQl9Ci0KLQkJdi0+VG90YWxSZWFkQmFuZHdpZHRoQ29uc3VtZWRH Qnl0ZVBlclNlY29uZCA9Ci0JCQkJdi0+VG90YWxSZWFkQmFuZHdpZHRoQ29uc3VtZWRHQnl0ZVBl clNlY29uZAotCQkJCQkJKyB2LT5SZWFkQmFuZHdpZHRoW2tdIC8gMTAwMDsKLQl9Ci0KLQl2LT5U b3RhbFdyaXRlQmFuZHdpZHRoQ29uc3VtZWRHQnl0ZVBlclNlY29uZCA9IDA7Ci0KLQlmb3IgKGsg PSAwOyBrIDwgbnVtX3BsYW5lczsgaysrKSB7Ci0JCXN0cnVjdCBfdmNzX2RwaV9kaXNwbGF5X3Bp cGVfZGVzdF9wYXJhbXNfc3QgZGVzdCA9Ci0JCQkJZTJlW3YtPnBsYW5lc1trXS5lMmVfaW5kZXhd LnBpcGUuZGVzdDsKLQkJc3RydWN0IF92Y3NfZHBpX2Rpc3BsYXlfb3V0cHV0X3BhcmFtc19zdCBk b3V0ID0gZTJlW3YtPnBsYW5lc1trXS5lMmVfaW5kZXhdLmRvdXQ7Ci0KLQkJaWYgKGRvdXQub3V0 cHV0X3R5cGUgPT0gZG1fd2IgJiYgZG91dC5vdXRwdXRfZm9ybWF0ID09IGRtXzQ0NCkgewotCQkJ di0+V3JpdGVCYW5kd2lkdGhba10gPSBkZXN0LnJlY291dF93aWR0aAotCQkJCQkvIChkZXN0Lmh0 b3RhbCAvIGRlc3QucGl4ZWxfcmF0ZV9taHopICogNDsKLQkJfSBlbHNlIGlmIChkb3V0Lm91dHB1 dF90eXBlID09IGRtX3diKSB7Ci0JCQl2LT5Xcml0ZUJhbmR3aWR0aFtrXSA9IGRlc3QucmVjb3V0 X3dpZHRoCi0JCQkJCS8gKGRlc3QuaHRvdGFsIC8gZGVzdC5waXhlbF9yYXRlX21oeikgKiAxLjU7 Ci0JCX0gZWxzZSB7Ci0JCQl2LT5Xcml0ZUJhbmR3aWR0aFtrXSA9IDA7Ci0JCX0KLQotCQl2LT5U b3RhbFdyaXRlQmFuZHdpZHRoQ29uc3VtZWRHQnl0ZVBlclNlY29uZCA9Ci0JCQkJdi0+VG90YWxX cml0ZUJhbmR3aWR0aENvbnN1bWVkR0J5dGVQZXJTZWNvbmQKLQkJCQkJCSsgdi0+V3JpdGVCYW5k d2lkdGhba10gLyAxMDAwOwotCX0KLQotCXYtPlRvdGFsQmFuZHdpZHRoQ29uc3VtZWRHQnl0ZVBl clNlY29uZCA9IHYtPlRvdGFsUmVhZEJhbmR3aWR0aENvbnN1bWVkR0J5dGVQZXJTZWNvbmQKLQkJ CSsgdi0+VG90YWxXcml0ZUJhbmR3aWR0aENvbnN1bWVkR0J5dGVQZXJTZWNvbmQ7Ci0KLQl2LT5E Q0NFbmFibGVkSW5BbnlQbGFuZSA9IDA7Ci0KLQlmb3IgKGsgPSAwOyBrIDwgbnVtX3BsYW5lczsg aysrKSB7Ci0JCXN0cnVjdCBfdmNzX2RwaV9kaXNwbGF5X3BpcGVfc291cmNlX3BhcmFtc19zdCBz cmMgPQotCQkJCWUyZVt2LT5wbGFuZXNba10uZTJlX2luZGV4XS5waXBlLnNyYzsKLQotCQlpZiAo c3JjLmRjYyA9PSAxKSB7Ci0JCQl2LT5EQ0NFbmFibGVkSW5BbnlQbGFuZSA9IDE7Ci0JCX0KLQl9 Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTnVtYmVyT2ZTdGF0ZXNQbHVzVHdvOyBpKyspIHsKLQkJdi0+ UmV0dXJuQldUb0RDTlBlclN0YXRlID0gZG1sX21pbigKLQkJCQlzb2MtPnJldHVybl9idXNfd2lk dGhfYnl0ZXMgKiB2LT5EQ0ZDTEtQZXJTdGF0ZVtpXSwKLQkJCQl2LT5GYWJyaWNBbmREUkFNQmFu ZHdpZHRoUGVyU3RhdGVbaV0gKiAxMDAwCi0JCQkJCQkqIHNvYy0+aWRlYWxfZHJhbV9id19hZnRl cl91cmdlbnRfcGVyY2VudCAvIDEwMCk7Ci0KLQkJdi0+UmV0dXJuQldQZXJTdGF0ZVtpXSA9IHYt PlJldHVybkJXVG9EQ05QZXJTdGF0ZTsKLQotCQlpZiAodi0+RENDRW5hYmxlZEluQW55UGxhbmUg PT0gMQotCQkJCSYmIHYtPlJldHVybkJXVG9EQ05QZXJTdGF0ZQotCQkJCQkJPiAodi0+RENGQ0xL UGVyU3RhdGVbaV0KLQkJCQkJCQkJKiBzb2MtPnJldHVybl9idXNfd2lkdGhfYnl0ZXMgLyA0KSkg ewotCQkJdi0+UmV0dXJuQldQZXJTdGF0ZVtpXSA9Ci0JCQkJCWRtbF9taW4oCi0JCQkJCQkJdi0+ UmV0dXJuQldQZXJTdGF0ZVtpXSwKLQkJCQkJCQl2LT5SZXR1cm5CV1RvRENOUGVyU3RhdGUgKiA0 Ci0JCQkJCQkJCQkqICgxCi0JCQkJCQkJCQkJCS0gc29jLT51cmdlbnRfbGF0ZW5jeV91cwotCQkJ CQkJCQkJCQkJCS8gKChpcC0+cm9iX2J1ZmZlcl9zaXplX2tieXRlcwotCQkJCQkJCQkJCQkJCQkJ LSBpcC0+cGl4ZWxfY2h1bmtfc2l6ZV9rYnl0ZXMpCi0JCQkJCQkJCQkJCQkJCQkqIDEwMjQKLQkJ CQkJCQkJCQkJCQkJCS8gKHYtPlJldHVybkJXVG9EQ05QZXJTdGF0ZQotCQkJCQkJCQkJCQkJCQkJ CQktIHYtPkRDRkNMS1BlclN0YXRlW2ldCi0JCQkJCQkJCQkJCQkJCQkJCQkJKiBzb2MtPnJldHVy bl9idXNfd2lkdGhfYnl0ZXMKLQkJCQkJCQkJCQkJCQkJCQkJCQkvIDQpCi0JCQkJCQkJCQkJCQkJ CQkrIHNvYy0+dXJnZW50X2xhdGVuY3lfdXMpKSk7Ci0JCX0KLQotCQl2LT5Dcml0aWNhbFBvaW50 ID0gMiAqIHNvYy0+cmV0dXJuX2J1c193aWR0aF9ieXRlcyAqIHYtPkRDRkNMS1BlclN0YXRlW2ld Ci0JCQkJKiBzb2MtPnVyZ2VudF9sYXRlbmN5X3VzCi0JCQkJLyAodi0+UmV0dXJuQldUb0RDTlBl clN0YXRlICogc29jLT51cmdlbnRfbGF0ZW5jeV91cwotCQkJCQkJKyAoaXAtPnJvYl9idWZmZXJf c2l6ZV9rYnl0ZXMKLQkJCQkJCQkJLSBpcC0+cGl4ZWxfY2h1bmtfc2l6ZV9rYnl0ZXMpCi0JCQkJ CQkJCSogMTAyNCk7Ci0KLQkJaWYgKHYtPkRDQ0VuYWJsZWRJbkFueVBsYW5lID09IDEgJiYgdi0+ Q3JpdGljYWxQb2ludCA+IDEgJiYgdi0+Q3JpdGljYWxQb2ludCA8IDQpIHsKLQkJCXYtPlJldHVy bkJXUGVyU3RhdGVbaV0gPQotCQkJCQlkbWxfbWluKAotCQkJCQkJCXYtPlJldHVybkJXUGVyU3Rh dGVbaV0sCi0JCQkJCQkJNCAqIHYtPlJldHVybkJXVG9EQ05QZXJTdGF0ZQotCQkJCQkJCQkJKiAo aXAtPnJvYl9idWZmZXJfc2l6ZV9rYnl0ZXMKLQkJCQkJCQkJCQkJLSBpcC0+cGl4ZWxfY2h1bmtf c2l6ZV9rYnl0ZXMpCi0JCQkJCQkJCQkqIDEwMjQKLQkJCQkJCQkJCSogc29jLT5yZXR1cm5fYnVz X3dpZHRoX2J5dGVzCi0JCQkJCQkJCQkqIHYtPkRDRkNMS1BlclN0YXRlW2ldCi0JCQkJCQkJCQkq IHNvYy0+dXJnZW50X2xhdGVuY3lfdXMKLQkJCQkJCQkJCS8gZG1sX3BvdygKLQkJCQkJCQkJCQkJ KHYtPlJldHVybkJXVG9EQ05QZXJTdGF0ZQotCQkJCQkJCQkJCQkJCSogc29jLT51cmdlbnRfbGF0 ZW5jeV91cwotCQkJCQkJCQkJCQkJCSsgKGlwLT5yb2JfYnVmZmVyX3NpemVfa2J5dGVzCi0JCQkJ CQkJCQkJCQkJCQktIGlwLT5waXhlbF9jaHVua19zaXplX2tieXRlcykKLQkJCQkJCQkJCQkJCQkJ CSogMTAyNCksCi0JCQkJCQkJCQkJCTIpKTsKLQkJfQotCi0JCXYtPlJldHVybkJXVG9EQ05QZXJT dGF0ZSA9IGRtbF9taW4oCi0JCQkJc29jLT5yZXR1cm5fYnVzX3dpZHRoX2J5dGVzICogdi0+RENG Q0xLUGVyU3RhdGVbaV0sCi0JCQkJdi0+RmFicmljQW5kRFJBTUJhbmR3aWR0aFBlclN0YXRlW2ld ICogMTAwMCk7Ci0KLQkJaWYgKHYtPkRDQ0VuYWJsZWRJbkFueVBsYW5lID09IDEKLQkJCQkmJiB2 LT5SZXR1cm5CV1RvRENOUGVyU3RhdGUKLQkJCQkJCT4gKHYtPkRDRkNMS1BlclN0YXRlW2ldCi0J CQkJCQkJCSogc29jLT5yZXR1cm5fYnVzX3dpZHRoX2J5dGVzIC8gNCkpIHsKLQkJCXYtPlJldHVy bkJXUGVyU3RhdGVbaV0gPQotCQkJCQlkbWxfbWluKAotCQkJCQkJCXYtPlJldHVybkJXUGVyU3Rh dGVbaV0sCi0JCQkJCQkJdi0+UmV0dXJuQldUb0RDTlBlclN0YXRlICogNAotCQkJCQkJCQkJKiAo MQotCQkJCQkJCQkJCQktIHNvYy0+dXJnZW50X2xhdGVuY3lfdXMKLQkJCQkJCQkJCQkJCQkvICgo aXAtPnJvYl9idWZmZXJfc2l6ZV9rYnl0ZXMKLQkJCQkJCQkJCQkJCQkJCS0gaXAtPnBpeGVsX2No dW5rX3NpemVfa2J5dGVzKQotCQkJCQkJCQkJCQkJCQkJKiAxMDI0Ci0JCQkJCQkJCQkJCQkJCQkv ICh2LT5SZXR1cm5CV1RvRENOUGVyU3RhdGUKLQkJCQkJCQkJCQkJCQkJCQkJLSB2LT5EQ0ZDTEtQ ZXJTdGF0ZVtpXQotCQkJCQkJCQkJCQkJCQkJCQkJCSogc29jLT5yZXR1cm5fYnVzX3dpZHRoX2J5 dGVzCi0JCQkJCQkJCQkJCQkJCQkJCQkJLyA0KQotCQkJCQkJCQkJCQkJCQkJKyBzb2MtPnVyZ2Vu dF9sYXRlbmN5X3VzKSkpOwotCQl9Ci0KLQkJdi0+Q3JpdGljYWxQb2ludCA9IDIgKiBzb2MtPnJl dHVybl9idXNfd2lkdGhfYnl0ZXMgKiB2LT5EQ0ZDTEtQZXJTdGF0ZVtpXQotCQkJCSogc29jLT51 cmdlbnRfbGF0ZW5jeV91cwotCQkJCS8gKHYtPlJldHVybkJXVG9EQ05QZXJTdGF0ZSAqIHNvYy0+ dXJnZW50X2xhdGVuY3lfdXMKLQkJCQkJCSsgKGlwLT5yb2JfYnVmZmVyX3NpemVfa2J5dGVzCi0J CQkJCQkJCS0gaXAtPnBpeGVsX2NodW5rX3NpemVfa2J5dGVzKQotCQkJCQkJCQkqIDEwMjQpOwot Ci0JCWlmICh2LT5EQ0NFbmFibGVkSW5BbnlQbGFuZSA9PSAxICYmIHYtPkNyaXRpY2FsUG9pbnQg PiAxICYmIHYtPkNyaXRpY2FsUG9pbnQgPCA0KSB7Ci0JCQl2LT5SZXR1cm5CV1BlclN0YXRlW2ld ID0KLQkJCQkJZG1sX21pbigKLQkJCQkJCQl2LT5SZXR1cm5CV1BlclN0YXRlW2ldLAotCQkJCQkJ CTQgKiB2LT5SZXR1cm5CV1RvRENOUGVyU3RhdGUKLQkJCQkJCQkJCSogKGlwLT5yb2JfYnVmZmVy X3NpemVfa2J5dGVzCi0JCQkJCQkJCQkJCS0gaXAtPnBpeGVsX2NodW5rX3NpemVfa2J5dGVzKQot CQkJCQkJCQkJKiAxMDI0Ci0JCQkJCQkJCQkqIHNvYy0+cmV0dXJuX2J1c193aWR0aF9ieXRlcwot CQkJCQkJCQkJKiB2LT5EQ0ZDTEtQZXJTdGF0ZVtpXQotCQkJCQkJCQkJKiBzb2MtPnVyZ2VudF9s YXRlbmN5X3VzCi0JCQkJCQkJCQkvIGRtbF9wb3coCi0JCQkJCQkJCQkJCSh2LT5SZXR1cm5CV1Rv RENOUGVyU3RhdGUKLQkJCQkJCQkJCQkJCQkqIHNvYy0+dXJnZW50X2xhdGVuY3lfdXMKLQkJCQkJ CQkJCQkJCQkrIChpcC0+cm9iX2J1ZmZlcl9zaXplX2tieXRlcwotCQkJCQkJCQkJCQkJCQkJLSBp cC0+cGl4ZWxfY2h1bmtfc2l6ZV9rYnl0ZXMpCi0JCQkJCQkJCQkJCQkJCQkqIDEwMjQpLAotCQkJ CQkJCQkJCQkyKSk7Ci0JCX0KLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTnVtYmVyT2ZTdGF0ZXNQ bHVzVHdvOyBpKyspIHsKLQkJaWYgKCh2LT5Ub3RhbFJlYWRCYW5kd2lkdGhDb25zdW1lZEdCeXRl UGVyU2Vjb25kICogMTAwMCA8PSB2LT5SZXR1cm5CV1BlclN0YXRlW2ldKQotCQkJCSYmICh2LT5U b3RhbEJhbmR3aWR0aENvbnN1bWVkR0J5dGVQZXJTZWNvbmQgKiAxMDAwCi0JCQkJCQk8PSB2LT5G YWJyaWNBbmREUkFNQmFuZHdpZHRoUGVyU3RhdGVbaV0gKiAxMDAwCi0JCQkJCQkJCSogc29jLT5p ZGVhbF9kcmFtX2J3X2FmdGVyX3VyZ2VudF9wZXJjZW50Ci0JCQkJCQkJCS8gMTAwKSkgewotCQkJ di0+QmFuZHdpZHRoU3VwcG9ydFtpXSA9IDE7Ci0JCX0gZWxzZSB7Ci0JCQl2LT5CYW5kd2lkdGhT dXBwb3J0W2ldID0gMDsKLQkJfQotCX0KLQotCS8vIFdyaXRlYmFjayBMYXRlbmN5IHN1cHBvcnQg Y2hlY2sKLQotCXYtPldyaXRlYmFja0xhdGVuY3lTdXBwb3J0ID0gMTsKLQotCWZvciAoayA9IDA7 IGsgPCBudW1fcGxhbmVzOyBrKyspIHsKLQkJc3RydWN0IF92Y3NfZHBpX2Rpc3BsYXlfcGlwZV9k ZXN0X3BhcmFtc19zdCBkZXN0ID0KLQkJCQllMmVbdi0+cGxhbmVzW2tdLmUyZV9pbmRleF0ucGlw ZS5kZXN0OwotCQlzdHJ1Y3QgX3Zjc19kcGlfZGlzcGxheV9vdXRwdXRfcGFyYW1zX3N0IGRvdXQg PSBlMmVbdi0+cGxhbmVzW2tdLmUyZV9pbmRleF0uZG91dDsKLQotCQlpZiAoZG91dC5vdXRwdXRf dHlwZSA9PSBkbV93YiAmJiBkb3V0Lm91dHB1dF9mb3JtYXQgPT0gZG1fNDQ0Ci0JCQkJJiYgKGRl c3QucmVjb3V0X3dpZHRoIC8gKGRlc3QuaHRvdGFsIC8gZGVzdC5waXhlbF9yYXRlX21oeikgKiA0 KQotCQkJCQkJPiAoKGlwLT53cml0ZWJhY2tfbHVtYV9idWZmZXJfc2l6ZV9rYnl0ZXMKLQkJCQkJ CQkJKyBpcC0+d3JpdGViYWNrX2Nocm9tYV9idWZmZXJfc2l6ZV9rYnl0ZXMpCi0JCQkJCQkJCSog MTAyNCAvIHNvYy0+d3JpdGViYWNrX2xhdGVuY3lfdXMpKSB7Ci0JCQl2LT5Xcml0ZWJhY2tMYXRl bmN5U3VwcG9ydCA9IDA7Ci0JCX0gZWxzZSBpZiAoZG91dC5vdXRwdXRfdHlwZSA9PSBkbV93Ygot CQkJCSYmIChkZXN0LnJlY291dF93aWR0aCAvIChkZXN0Lmh0b3RhbCAvIGRlc3QucGl4ZWxfcmF0 ZV9taHopKQotCQkJCQkJPiAoZG1sX21pbigKLQkJCQkJCQkJaXAtPndyaXRlYmFja19sdW1hX2J1 ZmZlcl9zaXplX2tieXRlcywKLQkJCQkJCQkJMgotCQkJCQkJCQkJCSogaXAtPndyaXRlYmFja19j aHJvbWFfYnVmZmVyX3NpemVfa2J5dGVzKQotCQkJCQkJCQkqIDEwMjQgLyBzb2MtPndyaXRlYmFj a19sYXRlbmN5X3VzKSkgewotCQkJdi0+V3JpdGViYWNrTGF0ZW5jeVN1cHBvcnQgPSAwOwotCQl9 Ci0JfQotCi0JLy8gUmUtb3JkZXJpbmcgQnVmZmVyIFN1cHBvcnQgQ2hlY2sKLQotCWZvciAoaSA9 IDA7IGkgPCBOdW1iZXJPZlN0YXRlc1BsdXNUd287IGkrKykgewotCQl2LT5VcmdlbnRSb3VuZFRy aXBBbmRPdXRPZk9yZGVyTGF0ZW5jeVBlclN0YXRlW2ldID0KLQkJCQkoc29jLT5yb3VuZF90cmlw X3BpbmdfbGF0ZW5jeV9kY2ZjbGtfY3ljbGVzICsgMzIpCi0JCQkJCQkvIHYtPkRDRkNMS1BlclN0 YXRlW2ldCi0JCQkJCQkrIHNvYy0+dXJnZW50X291dF9vZl9vcmRlcl9yZXR1cm5fcGVyX2NoYW5u ZWxfYnl0ZXMKLQkJCQkJCQkJKiBzb2MtPm51bV9jaGFucwotCQkJCQkJCQkvIHYtPlJldHVybkJX UGVyU3RhdGVbaV07Ci0KLQkJaWYgKChpcC0+cm9iX2J1ZmZlcl9zaXplX2tieXRlcyAtIGlwLT5w aXhlbF9jaHVua19zaXplX2tieXRlcykgKiAxMDI0Ci0JCQkJLyB2LT5SZXR1cm5CV1BlclN0YXRl W2ldCi0JCQkJPiB2LT5VcmdlbnRSb3VuZFRyaXBBbmRPdXRPZk9yZGVyTGF0ZW5jeVBlclN0YXRl W2ldKSB7Ci0JCQl2LT5ST0JTdXBwb3J0W2ldID0gMTsKLQkJfSBlbHNlIHsKLQkJCXYtPlJPQlN1 cHBvcnRbaV0gPSAwOwotCQl9Ci0JfQotCi0JLy8gRGlzcGxheSBJTyBTdXBwb3J0IENoZWNrCi0K LQlmb3IgKGsgPSAwOyBrIDwgbnVtX3BsYW5lczsgaysrKSB7Ci0JCXN0cnVjdCBfdmNzX2RwaV9k aXNwbGF5X3BpcGVfZGVzdF9wYXJhbXNfc3QgZGVzdCA9Ci0JCQkJZTJlW3YtPnBsYW5lc1trXS5l MmVfaW5kZXhdLnBpcGUuZGVzdDsKLQkJc3RydWN0IF92Y3NfZHBpX2Rpc3BsYXlfb3V0cHV0X3Bh cmFtc19zdCBkb3V0ID0gZTJlW3YtPnBsYW5lc1trXS5lMmVfaW5kZXhdLmRvdXQ7Ci0KLQkJaWYg KGRvdXQub3V0cHV0X2Zvcm1hdCA9PSBkbV80MjApIHsKLQkJCXYtPlJlcXVpcmVkT3V0cHV0Qlcg PSBkZXN0LnBpeGVsX3JhdGVfbWh6ICogMyAvIDI7Ci0JCX0gZWxzZSB7Ci0JCQl2LT5SZXF1aXJl ZE91dHB1dEJXID0gZGVzdC5waXhlbF9yYXRlX21oeiAqIDM7Ci0JCX0KLQotCQlpZiAoZG91dC5v dXRwdXRfdHlwZSA9PSBkbV9oZG1pKSB7Ci0JCQl2LT5SZXF1aXJlZFBIWUNMS1trXSA9IHYtPlJl cXVpcmVkT3V0cHV0QlcgLyAzOwotCQl9IGVsc2UgaWYgKGRvdXQub3V0cHV0X3R5cGUgPT0gZG1f ZHApIHsKLQkJCXYtPlJlcXVpcmVkUEhZQ0xLW2tdID0gdi0+UmVxdWlyZWRPdXRwdXRCVyAvIDQ7 Ci0JCX0gZWxzZSB7Ci0JCQl2LT5SZXF1aXJlZFBIWUNMS1trXSA9IDA7Ci0JCX0KLQl9Ci0KLQlm b3IgKGkgPSAwOyBpIDwgTnVtYmVyT2ZTdGF0ZXNQbHVzVHdvOyBpKyspIHsKLQkJdi0+RElPU3Vw cG9ydFtpXSA9IDE7Ci0KLQkJZm9yIChrID0gMDsgayA8IG51bV9wbGFuZXM7IGsrKykgewotCQkJ c3RydWN0IF92Y3NfZHBpX2Rpc3BsYXlfb3V0cHV0X3BhcmFtc19zdCBkb3V0ID0KLQkJCQkJZTJl W3YtPnBsYW5lc1trXS5lMmVfaW5kZXhdLmRvdXQ7Ci0KLQkJCWlmICgodi0+UmVxdWlyZWRQSFlD TEtba10gPiB2LT5QSFlDTEtQZXJTdGF0ZVtpXSkKLQkJCQkJfHwgKGRvdXQub3V0cHV0X3R5cGUg PT0gZG1faGRtaQotCQkJCQkJCSYmIHYtPlJlcXVpcmVkUEhZQ0xLW2tdID4gNjAwKSkgewotCQkJ CXYtPkRJT1N1cHBvcnRbaV0gPSAwOwotCQkJfQotCQl9Ci0JfQotCi0JLy8gVG90YWwgQXZhaWxh YmxlIFdyaXRlYmFjayBTdXBwb3J0IENoZWNrCi0KLQl2LT5Ub3RhbE51bWJlck9mQWN0aXZlV3Jp dGViYWNrID0gMDsKLQotCWZvciAoayA9IDA7IGsgPCBudW1fcGxhbmVzOyBrKyspIHsKLQkJc3Ry dWN0IF92Y3NfZHBpX2Rpc3BsYXlfb3V0cHV0X3BhcmFtc19zdCBkb3V0ID0gZTJlW3YtPnBsYW5l c1trXS5lMmVfaW5kZXhdLmRvdXQ7Ci0KLQkJaWYgKGRvdXQub3V0cHV0X3R5cGUgPT0gZG1fd2Ip IHsKLQkJCXYtPlRvdGFsTnVtYmVyT2ZBY3RpdmVXcml0ZWJhY2sgPSB2LT5Ub3RhbE51bWJlck9m QWN0aXZlV3JpdGViYWNrICsgMTsKLQkJfQotCX0KLQotCWlmICh2LT5Ub3RhbE51bWJlck9mQWN0 aXZlV3JpdGViYWNrIDw9IGlwLT5tYXhfbnVtX3diKSB7Ci0JCXYtPlRvdGFsQXZhaWxhYmxlV3Jp dGViYWNrU3VwcG9ydCA9IDE7Ci0JfSBlbHNlIHsKLQkJdi0+VG90YWxBdmFpbGFibGVXcml0ZWJh Y2tTdXBwb3J0ID0gMDsKLQl9Ci0KLQkvLyBNYXhpbXVtIERJU1BDTEsvRFBQQ0xLIFN1cHBvcnQg Y2hlY2sKLQotCWZvciAoayA9IDA7IGsgPCBudW1fcGxhbmVzOyBrKyspIHsKLQkJc3RydWN0IF92 Y3NfZHBpX2Rpc3BsYXlfcGlwZV9kZXN0X3BhcmFtc19zdCBkZXN0ID0KLQkJCQllMmVbdi0+cGxh bmVzW2tdLmUyZV9pbmRleF0ucGlwZS5kZXN0OwotCQlzdHJ1Y3QgX3Zjc19kcGlfc2NhbGVyX3Jh dGlvX2RlcHRoX3N0IHNjYWxlX3JhdGlvX2RlcHRoID0KLQkJCQllMmVbdi0+cGxhbmVzW2tdLmUy ZV9pbmRleF0ucGlwZS5zY2FsZV9yYXRpb19kZXB0aDsKLQkJc3RydWN0IF92Y3NfZHBpX3NjYWxl cl90YXBzX3N0IHNjYWxlX3RhcHMgPQotCQkJCWUyZVt2LT5wbGFuZXNba10uZTJlX2luZGV4XS5w aXBlLnNjYWxlX3RhcHM7Ci0KLQkJaWYgKHNjYWxlX3JhdGlvX2RlcHRoLmhzY2xfcmF0aW8gPiAx KSB7Ci0JCQl2LT5QU0NMX0ZBQ1RPUltrXSA9IGRtbF9taW4oCi0JCQkJCWlwLT5tYXhfZGNodWJf cHNjbF9id19waXhfcGVyX2NsaywKLQkJCQkJaXAtPm1heF9wc2NsX2xiX2J3X3BpeF9wZXJfY2xr Ci0JCQkJCQkJKiBzY2FsZV9yYXRpb19kZXB0aC5oc2NsX3JhdGlvCi0JCQkJCQkJLyBkbWxfY2Vp bF9leChzY2FsZV90YXBzLmh0YXBzIC8gNiwgMSkpOwotCQl9IGVsc2UgewotCQkJdi0+UFNDTF9G QUNUT1Jba10gPSBkbWxfbWluKAotCQkJCQlpcC0+bWF4X2RjaHViX3BzY2xfYndfcGl4X3Blcl9j bGssCi0JCQkJCWlwLT5tYXhfcHNjbF9sYl9id19waXhfcGVyX2Nsayk7Ci0JCX0KLQotCQlpZiAo di0+Qnl0ZVBlclBpeGVsSW5ERVRDW2tdID09IDApIHsKLQkJCXYtPlBTQ0xfRkFDVE9SX0NIUk9N QVtrXSA9IDA7Ci0JCQl2LT5NaW5EUFBDTEtVc2luZ1NpbmdsZURQUFtrXSA9Ci0JCQkJCWRlc3Qu cGl4ZWxfcmF0ZV9taHoKLQkJCQkJCQkqIGRtbF9tYXgoCi0JCQkJCQkJCQlzY2FsZV90YXBzLnZ0 YXBzIC8gNgotCQkJCQkJCQkJCQkqIGRtbF9taW4oCi0JCQkJCQkJCQkJCQkJMSwKLQkJCQkJCQkJ CQkJCQlzY2FsZV9yYXRpb19kZXB0aC5oc2NsX3JhdGlvKSwKLQkJCQkJCQkJCWRtbF9tYXgoCi0J CQkJCQkJCQkJCXNjYWxlX3JhdGlvX2RlcHRoLmhzY2xfcmF0aW8KLQkJCQkJCQkJCQkJCQkqIHNj YWxlX3JhdGlvX2RlcHRoLnZzY2xfcmF0aW8KLQkJCQkJCQkJCQkJCQkvIHYtPlBTQ0xfRkFDVE9S W2tdLAotCQkJCQkJCQkJCQkxKSk7Ci0KLQkJfSBlbHNlIHsKLQkJCWlmIChzY2FsZV9yYXRpb19k ZXB0aC5oc2NsX3JhdGlvIC8gMiA+IDEpIHsKLQkJCQl2LT5QU0NMX0ZBQ1RPUl9DSFJPTUFba10g PSBkbWxfbWluKAotCQkJCQkJaXAtPm1heF9kY2h1Yl9wc2NsX2J3X3BpeF9wZXJfY2xrLAotCQkJ CQkJaXAtPm1heF9wc2NsX2xiX2J3X3BpeF9wZXJfY2xrCi0JCQkJCQkJCSogc2NhbGVfcmF0aW9f ZGVwdGguaHNjbF9yYXRpbyAvIDIKLQkJCQkJCQkJLyBkbWxfY2VpbF9leCgKLQkJCQkJCQkJCQlz Y2FsZV90YXBzLmh0YXBzX2MKLQkJCQkJCQkJCQkJCS8gNiwKLQkJCQkJCQkJCQkxKSk7Ci0JCQl9 IGVsc2UgewotCQkJCXYtPlBTQ0xfRkFDVE9SX0NIUk9NQVtrXSA9IGRtbF9taW4oCi0JCQkJCQlp cC0+bWF4X2RjaHViX3BzY2xfYndfcGl4X3Blcl9jbGssCi0JCQkJCQlpcC0+bWF4X3BzY2xfbGJf YndfcGl4X3Blcl9jbGspOwotCQkJfQotCQkJdi0+TWluRFBQQ0xLVXNpbmdTaW5nbGVEUFBba10g PQotCQkJCQlkZXN0LnBpeGVsX3JhdGVfbWh6Ci0JCQkJCQkJKiBkbWxfbWF4KAotCQkJCQkJCQkJ ZG1sX21heCgKLQkJCQkJCQkJCQkJc2NhbGVfdGFwcy52dGFwcwotCQkJCQkJCQkJCQkJCS8gNgot CQkJCQkJCQkJCQkJCSogZG1sX21pbigKLQkJCQkJCQkJCQkJCQkJCTEsCi0JCQkJCQkJCQkJCQkJ CQlzY2FsZV9yYXRpb19kZXB0aC5oc2NsX3JhdGlvKSwKLQkJCQkJCQkJCQkJc2NhbGVfcmF0aW9f ZGVwdGguaHNjbF9yYXRpbwotCQkJCQkJCQkJCQkJCSogc2NhbGVfcmF0aW9fZGVwdGgudnNjbF9y YXRpbwotCQkJCQkJCQkJCQkJCS8gdi0+UFNDTF9GQUNUT1Jba10pLAotCQkJCQkJCQkJZG1sX21h eCgKLQkJCQkJCQkJCQkJZG1sX21heCgKLQkJCQkJCQkJCQkJCQlzY2FsZV90YXBzLnZ0YXBzX2MK LQkJCQkJCQkJCQkJCQkJCS8gNgotCQkJCQkJCQkJCQkJCQkJKiBkbWxfbWluKAotCQkJCQkJCQkJ CQkJCQkJCQkxLAotCQkJCQkJCQkJCQkJCQkJCQlzY2FsZV9yYXRpb19kZXB0aC5oc2NsX3JhdGlv Ci0JCQkJCQkJCQkJCQkJCQkJCQkJLyAyKSwKLQkJCQkJCQkJCQkJCQlzY2FsZV9yYXRpb19kZXB0 aC5oc2NsX3JhdGlvCi0JCQkJCQkJCQkJCQkJCQkqIHNjYWxlX3JhdGlvX2RlcHRoLnZzY2xfcmF0 aW8KLQkJCQkJCQkJCQkJCQkJCS8gNAotCQkJCQkJCQkJCQkJCQkJLyB2LT5QU0NMX0ZBQ1RPUl9D SFJPTUFba10pLAotCQkJCQkJCQkJCQkxKSk7Ci0KLQkJfQotCX0KLQotCWZvciAoayA9IDA7IGsg PCBudW1fcGxhbmVzOyBrKyspIHsKLQkJc3RydWN0IF92Y3NfZHBpX2Rpc3BsYXlfcGlwZV9zb3Vy Y2VfcGFyYW1zX3N0IHNyYyA9Ci0JCQkJZTJlW3YtPnBsYW5lc1trXS5lMmVfaW5kZXhdLnBpcGUu c3JjOwotCQlzdHJ1Y3QgX3Zjc19kcGlfc2NhbGVyX3JhdGlvX2RlcHRoX3N0IHNjYWxlX3JhdGlv X2RlcHRoID0KLQkJCQllMmVbdi0+cGxhbmVzW2tdLmUyZV9pbmRleF0ucGlwZS5zY2FsZV9yYXRp b19kZXB0aDsKLQkJc3RydWN0IF92Y3NfZHBpX3NjYWxlcl90YXBzX3N0IHNjYWxlX3RhcHMgPQot CQkJCWUyZVt2LT5wbGFuZXNba10uZTJlX2luZGV4XS5waXBlLnNjYWxlX3RhcHM7Ci0KLQkJaWYg KHNyYy5zb3VyY2VfZm9ybWF0ID09IGRtXzQ0NF82NCB8fCBzcmMuc291cmNlX2Zvcm1hdCA9PSBk bV80NDRfMzIKLQkJCQl8fCBzcmMuc291cmNlX2Zvcm1hdCA9PSBkbV80NDRfMTYpIHsKLQkJCWlm IChzcmMuc3dfbW9kZSA9PSBkbV9zd19saW5lYXIpIHsKLQkJCQl2LT5SZWFkMjU2QmxvY2tIZWln aHRZW2tdID0gMTsKLQkJCX0gZWxzZSBpZiAoc3JjLnNvdXJjZV9mb3JtYXQgPT0gZG1fNDQ0XzY0 KSB7Ci0JCQkJdi0+UmVhZDI1NkJsb2NrSGVpZ2h0WVtrXSA9IDQ7Ci0JCQl9IGVsc2UgewotCQkJ CXYtPlJlYWQyNTZCbG9ja0hlaWdodFlba10gPSA4OwotCQkJfQotCi0JCQl2LT5SZWFkMjU2Qmxv Y2tXaWR0aFlba10gPSAyNTYgLyBkbWxfY2VpbF9leCh2LT5CeXRlUGVyUGl4ZWxJbkRFVFlba10s IDEpCi0JCQkJCS8gdi0+UmVhZDI1NkJsb2NrSGVpZ2h0WVtrXTsKLQkJCXYtPlJlYWQyNTZCbG9j a0hlaWdodENba10gPSAwOwotCQkJdi0+UmVhZDI1NkJsb2NrV2lkdGhDW2tdID0gMDsKLQkJfSBl bHNlIHsKLQkJCWlmIChzcmMuc3dfbW9kZSA9PSBkbV9zd19saW5lYXIpIHsKLQkJCQl2LT5SZWFk MjU2QmxvY2tIZWlnaHRZW2tdID0gMTsKLQkJCQl2LT5SZWFkMjU2QmxvY2tIZWlnaHRDW2tdID0g MTsKLQkJCX0gZWxzZSBpZiAoc3JjLnNvdXJjZV9mb3JtYXQgPT0gZG1fNDIwXzgpIHsKLQkJCQl2 LT5SZWFkMjU2QmxvY2tIZWlnaHRZW2tdID0gMTY7Ci0JCQkJdi0+UmVhZDI1NkJsb2NrSGVpZ2h0 Q1trXSA9IDg7Ci0JCQl9IGVsc2UgewotCQkJCXYtPlJlYWQyNTZCbG9ja0hlaWdodFlba10gPSA4 OwotCQkJCXYtPlJlYWQyNTZCbG9ja0hlaWdodENba10gPSA4OwotCQkJfQotCi0JCQl2LT5SZWFk MjU2QmxvY2tXaWR0aFlba10gPSAyNTYgLyBkbWxfY2VpbF9leCh2LT5CeXRlUGVyUGl4ZWxJbkRF VFlba10sIDEpCi0JCQkJCS8gdi0+UmVhZDI1NkJsb2NrSGVpZ2h0WVtrXTsKLQkJCXYtPlJlYWQy NTZCbG9ja1dpZHRoQ1trXSA9IDI1NiAvIGRtbF9jZWlsX2V4KHYtPkJ5dGVQZXJQaXhlbEluREVU Q1trXSwgMikKLQkJCQkJLyB2LT5SZWFkMjU2QmxvY2tIZWlnaHRDW2tdOwotCQl9Ci0KLQkJaWYg KHNyYy5zb3VyY2Vfc2NhbiA9PSBkbV9ob3J6KSB7Ci0JCQl2LT5NYXhTd2F0aEhlaWdodFlba10g PSB2LT5SZWFkMjU2QmxvY2tIZWlnaHRZW2tdOwotCQkJdi0+TWF4U3dhdGhIZWlnaHRDW2tdID0g di0+UmVhZDI1NkJsb2NrSGVpZ2h0Q1trXTsKLQkJfSBlbHNlIHsKLQkJCXYtPk1heFN3YXRoSGVp Z2h0WVtrXSA9IHYtPlJlYWQyNTZCbG9ja1dpZHRoWVtrXTsKLQkJCXYtPk1heFN3YXRoSGVpZ2h0 Q1trXSA9IHYtPlJlYWQyNTZCbG9ja1dpZHRoQ1trXTsKLQkJfQotCi0JCWlmIChzcmMuc291cmNl X2Zvcm1hdCA9PSBkbV80NDRfNjQgfHwgc3JjLnNvdXJjZV9mb3JtYXQgPT0gZG1fNDQ0XzMyCi0J CQkJfHwgc3JjLnNvdXJjZV9mb3JtYXQgPT0gZG1fNDQ0XzE2KSB7Ci0JCQlpZiAoc3JjLnN3X21v ZGUgPT0gZG1fc3dfbGluZWFyCi0JCQkJCXx8IChzcmMuc291cmNlX2Zvcm1hdCA9PSBkbV80NDRf NjQKLQkJCQkJCQkmJiAoc3JjLnN3X21vZGUgPT0gZG1fc3dfNGtiX3MKLQkJCQkJCQkJCXx8IHNy Yy5zd19tb2RlCi0JCQkJCQkJCQkJCT09IGRtX3N3XzRrYl9zX3gKLQkJCQkJCQkJCXx8IHNyYy5z d19tb2RlCi0JCQkJCQkJCQkJCT09IGRtX3N3XzY0a2JfcwotCQkJCQkJCQkJfHwgc3JjLnN3X21v ZGUKLQkJCQkJCQkJCQkJPT0gZG1fc3dfNjRrYl9zX3QKLQkJCQkJCQkJCXx8IHNyYy5zd19tb2Rl Ci0JCQkJCQkJCQkJCT09IGRtX3N3XzY0a2Jfc194Ci0JCQkJCQkJCQl8fCBzcmMuc3dfbW9kZQot CQkJCQkJCQkJCQk9PSBkbV9zd192YXJfcwotCQkJCQkJCQkJfHwgc3JjLnN3X21vZGUKLQkJCQkJ CQkJCQkJPT0gZG1fc3dfdmFyX3NfeCkKLQkJCQkJCQkmJiBzcmMuc291cmNlX3NjYW4gPT0gZG1f aG9yeikpIHsKLQkJCQl2LT5NaW5Td2F0aEhlaWdodFlba10gPSB2LT5NYXhTd2F0aEhlaWdodFlb a107Ci0JCQl9IGVsc2UgewotCQkJCXYtPk1pblN3YXRoSGVpZ2h0WVtrXSA9IHYtPk1heFN3YXRo SGVpZ2h0WVtrXSAvIDI7Ci0JCQl9Ci0JCQl2LT5NaW5Td2F0aEhlaWdodENba10gPSB2LT5NYXhT d2F0aEhlaWdodENba107Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoc3JjLnN3X21vZGUgPT0gZG1fc3df bGluZWFyKSB7Ci0JCQkJdi0+TWluU3dhdGhIZWlnaHRZW2tdID0gdi0+TWF4U3dhdGhIZWlnaHRZ W2tdOwotCQkJCXYtPk1pblN3YXRoSGVpZ2h0Q1trXSA9IHYtPk1heFN3YXRoSGVpZ2h0Q1trXTsK LQkJCX0gZWxzZSBpZiAoc3JjLnNvdXJjZV9mb3JtYXQgPT0gZG1fNDIwXzggJiYgc3JjLnNvdXJj ZV9zY2FuID09IGRtX2hvcnopIHsKLQkJCQl2LT5NaW5Td2F0aEhlaWdodFlba10gPSB2LT5NYXhT d2F0aEhlaWdodFlba10gLyAyOwotCQkJCWlmIChpcC0+YnVnX2ZvcmNpbmdfTENfcmVxX3NhbWVf c2l6ZV9maXhlZCA9PSAxKSB7Ci0JCQkJCXYtPk1pblN3YXRoSGVpZ2h0Q1trXSA9IHYtPk1heFN3 YXRoSGVpZ2h0Q1trXTsKLQkJCQl9IGVsc2UgewotCQkJCQl2LT5NaW5Td2F0aEhlaWdodENba10g PSB2LT5NYXhTd2F0aEhlaWdodENba10gLyAyOwotCQkJCX0KLQkJCX0gZWxzZSBpZiAoc3JjLnNv dXJjZV9mb3JtYXQgPT0gZG1fNDIwXzEwICYmIHNyYy5zb3VyY2Vfc2NhbiA9PSBkbV9ob3J6KSB7 Ci0JCQkJdi0+TWluU3dhdGhIZWlnaHRDW2tdID0gdi0+TWF4U3dhdGhIZWlnaHRDW2tdIC8gMjsK LQkJCQlpZiAoaXAtPmJ1Z19mb3JjaW5nX0xDX3JlcV9zYW1lX3NpemVfZml4ZWQgPT0gMSkgewot CQkJCQl2LT5NaW5Td2F0aEhlaWdodFlba10gPSB2LT5NYXhTd2F0aEhlaWdodFlba107Ci0JCQkJ fSBlbHNlIHsKLQkJCQkJdi0+TWluU3dhdGhIZWlnaHRZW2tdID0gdi0+TWF4U3dhdGhIZWlnaHRZ W2tdIC8gMjsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCXYtPk1pblN3YXRoSGVpZ2h0WVtrXSA9 IHYtPk1heFN3YXRoSGVpZ2h0WVtrXTsKLQkJCQl2LT5NaW5Td2F0aEhlaWdodENba10gPSB2LT5N YXhTd2F0aEhlaWdodENba107Ci0JCQl9Ci0JCX0KLQotCQlpZiAoc3JjLnN3X21vZGUgPT0gZG1f c3dfbGluZWFyKSB7Ci0JCQl2LT5NYXhpbXVtU3dhdGhXaWR0aCA9IDgxOTI7Ci0JCX0gZWxzZSB7 Ci0JCQl2LT5NYXhpbXVtU3dhdGhXaWR0aCA9IDUxMjA7Ci0JCX0KLQotCQl2LT5OdW1iZXJPZkRQ UFJlcXVpcmVkRm9yREVUU2l6ZSA9Ci0JCQkJZG1sX2NlaWxfZXgoCi0JCQkJCQl2LT5Td2F0aFdp ZHRoWVNpbmdsZURQUFtrXQotCQkJCQkJCQkvIGRtbF9taW4oCi0JCQkJCQkJCQkJdi0+TWF4aW11 bVN3YXRoV2lkdGgsCi0JCQkJCQkJCQkJaXAtPmRldF9idWZmZXJfc2l6ZV9rYnl0ZXMKLQkJCQkJ CQkJCQkJCSogMTAyNAotCQkJCQkJCQkJCQkJLyAyCi0JCQkJCQkJCQkJCQkvICh2LT5CeXRlUGVy UGl4ZWxJbkRFVFlba10KLQkJCQkJCQkJCQkJCQkJKiB2LT5NaW5Td2F0aEhlaWdodFlba10KLQkJ CQkJCQkJCQkJCQkJKyB2LT5CeXRlUGVyUGl4ZWxJbkRFVENba10KLQkJCQkJCQkJCQkJCQkJCQkv IDIKLQkJCQkJCQkJCQkJCQkJCQkqIHYtPk1pblN3YXRoSGVpZ2h0Q1trXSkpLAotCQkJCQkJMSk7 Ci0KLQkJaWYgKHYtPkJ5dGVQZXJQaXhlbEluREVUQ1trXSA9PSAwKSB7Ci0JCQl2LT5OdW1iZXJP ZkRQUFJlcXVpcmVkRm9yTEJTaXplID0KLQkJCQkJZG1sX2NlaWxfZXgoCi0JCQkJCQkJKHNjYWxl X3RhcHMudnRhcHMKLQkJCQkJCQkJCSsgZG1sX21heCgKLQkJCQkJCQkJCQkJZG1sX2NlaWxfZXgo Ci0JCQkJCQkJCQkJCQkJc2NhbGVfcmF0aW9fZGVwdGgudnNjbF9yYXRpbywKLQkJCQkJCQkJCQkJ CQkxKQotCQkJCQkJCQkJCQkJCS0gMiwKLQkJCQkJCQkJCQkJMCkpCi0JCQkJCQkJCQkqIHYtPlN3 YXRoV2lkdGhZU2luZ2xlRFBQW2tdCi0JCQkJCQkJCQkvIGRtbF9tYXgoCi0JCQkJCQkJCQkJCXNj YWxlX3JhdGlvX2RlcHRoLmhzY2xfcmF0aW8sCi0JCQkJCQkJCQkJCTEpCi0JCQkJCQkJCQkqIHNj YWxlX3JhdGlvX2RlcHRoLmxiX2RlcHRoCi0JCQkJCQkJCQkvIGlwLT5saW5lX2J1ZmZlcl9zaXpl X2JpdHMsCi0JCQkJCQkJMSk7Ci0JCX0gZWxzZSB7Ci0JCQl2LT5OdW1iZXJPZkRQUFJlcXVpcmVk Rm9yTEJTaXplID0KLQkJCQkJZG1sX21heCgKLQkJCQkJCQlkbWxfY2VpbF9leCgKLQkJCQkJCQkJ CShzY2FsZV90YXBzLnZ0YXBzCi0JCQkJCQkJCQkJCSsgZG1sX21heCgKLQkJCQkJCQkJCQkJCQlk bWxfY2VpbF9leCgKLQkJCQkJCQkJCQkJCQkJCXNjYWxlX3JhdGlvX2RlcHRoLnZzY2xfcmF0aW8s Ci0JCQkJCQkJCQkJCQkJCQkxKQotCQkJCQkJCQkJCQkJCQkJLSAyLAotCQkJCQkJCQkJCQkJCTAp KQotCQkJCQkJCQkJCQkqIHYtPlN3YXRoV2lkdGhZU2luZ2xlRFBQW2tdCi0JCQkJCQkJCQkJCS8g ZG1sX21heCgKLQkJCQkJCQkJCQkJCQlzY2FsZV9yYXRpb19kZXB0aC5oc2NsX3JhdGlvLAotCQkJ CQkJCQkJCQkJCTEpCi0JCQkJCQkJCQkJCSogc2NhbGVfcmF0aW9fZGVwdGgubGJfZGVwdGgKLQkJ CQkJCQkJCQkJLyBpcC0+bGluZV9idWZmZXJfc2l6ZV9iaXRzLAotCQkJCQkJCQkJMSksCi0JCQkJ CQkJZG1sX2NlaWxfZXgoCi0JCQkJCQkJCQkoc2NhbGVfdGFwcy52dGFwc19jCi0JCQkJCQkJCQkJ CSsgZG1sX21heCgKLQkJCQkJCQkJCQkJCQlkbWxfY2VpbF9leCgKLQkJCQkJCQkJCQkJCQkJCXNj YWxlX3JhdGlvX2RlcHRoLnZzY2xfcmF0aW8KLQkJCQkJCQkJCQkJCQkJCQkJLyAyLAotCQkJCQkJ CQkJCQkJCQkJMSkKLQkJCQkJCQkJCQkJCQkJCS0gMiwKLQkJCQkJCQkJCQkJCQkwKSkKLQkJCQkJ CQkJCQkJKiB2LT5Td2F0aFdpZHRoWVNpbmdsZURQUFtrXQotCQkJCQkJCQkJCQkvIDIKLQkJCQkJ CQkJCQkJLyBkbWxfbWF4KAotCQkJCQkJCQkJCQkJCXNjYWxlX3JhdGlvX2RlcHRoLmhzY2xfcmF0 aW8KLQkJCQkJCQkJCQkJCQkJCS8gMiwKLQkJCQkJCQkJCQkJCQkxKQotCQkJCQkJCQkJCQkqIHNj YWxlX3JhdGlvX2RlcHRoLmxiX2RlcHRoCi0JCQkJCQkJCQkJCS8gaXAtPmxpbmVfYnVmZmVyX3Np emVfYml0cywKLQkJCQkJCQkJCTEpKTsKLQkJfQotCi0JCXYtPk51bWJlck9mRFBQUmVxdWlyZWRG b3JERVRBbmRMQlNpemVba10gPSBkbWxfbWF4KAotCQkJCXYtPk51bWJlck9mRFBQUmVxdWlyZWRG b3JERVRTaXplLAotCQkJCXYtPk51bWJlck9mRFBQUmVxdWlyZWRGb3JMQlNpemUpOwotCi0JfQot Ci0JZm9yIChpID0gMDsgaSA8IE51bWJlck9mU3RhdGVzUGx1c1R3bzsgaSsrKSB7Ci0JCWZvciAo aiA9IDA7IGogPCAyOyBqKyspIHsKLQkJCXYtPlRvdGFsTnVtYmVyT2ZBY3RpdmVEUFBbaiAqIE51 bWJlck9mU3RhdGVzUGx1c1R3byArIGldID0gMDsKLQkJCXYtPlJlcXVpcmVkRElTUENMS1tqICog TnVtYmVyT2ZTdGF0ZXNQbHVzVHdvICsgaV0gPSAwOwotCQkJdi0+RElTUENMS19EUFBDTEtfU3Vw cG9ydFtqICogTnVtYmVyT2ZTdGF0ZXNQbHVzVHdvICsgaV0gPSAxOwotCi0JCQlmb3IgKGsgPSAw OyBrIDwgbnVtX3BsYW5lczsgaysrKSB7Ci0JCQkJc3RydWN0IF92Y3NfZHBpX2Rpc3BsYXlfcGlw ZV9kZXN0X3BhcmFtc19zdCBkZXN0ID0KLQkJCQkJCWUyZVt2LT5wbGFuZXNba10uZTJlX2luZGV4 XS5waXBlLmRlc3Q7Ci0JCQkJaWprID0gayAqIDIgKiBOdW1iZXJPZlN0YXRlc1BsdXNUd28gKyBq ICogTnVtYmVyT2ZTdGF0ZXNQbHVzVHdvICsgaTsKLQotCQkJCXYtPk1pbkRpc3BjbGtVc2luZ1Np bmdsZURQUCA9IGRtbF9tYXgoCi0JCQkJCQlkZXN0LnBpeGVsX3JhdGVfbWh6LAotCQkJCQkJdi0+ TWluRFBQQ0xLVXNpbmdTaW5nbGVEUFBba10gKiAoaiArIDEpKQotCQkJCQkJKiAoMSArIHNvYy0+ ZG93bnNwcmVhZF9wZXJjZW50IC8gMTAwKTsKLQkJCQl2LT5NaW5EaXNwY2xrVXNpbmdEdWFsRFBQ ID0gZG1sX21heCgKLQkJCQkJCWRlc3QucGl4ZWxfcmF0ZV9taHosCi0JCQkJCQl2LT5NaW5EUFBD TEtVc2luZ1NpbmdsZURQUFtrXSAvIDIgKiAoaiArIDEpKQotCQkJCQkJKiAoMSArIHNvYy0+ZG93 bnNwcmVhZF9wZXJjZW50IC8gMTAwKTsKLQotCQkJCWlmIChpIDwgTnVtYmVyT2ZTdGF0ZXMpIHsK LQkJCQkJdi0+TWluRGlzcGNsa1VzaW5nU2luZ2xlRFBQID0KLQkJCQkJCQl2LT5NaW5EaXNwY2xr VXNpbmdTaW5nbGVEUFAKLQkJCQkJCQkJCSogKDEKLQkJCQkJCQkJCQkJKyBpcC0+ZGlzcGNsa19y YW1wX21hcmdpbl9wZXJjZW50Ci0JCQkJCQkJCQkJCQkJLyAxMDApOwotCQkJCQl2LT5NaW5EaXNw Y2xrVXNpbmdEdWFsRFBQID0KLQkJCQkJCQl2LT5NaW5EaXNwY2xrVXNpbmdEdWFsRFBQCi0JCQkJ CQkJCQkqICgxCi0JCQkJCQkJCQkJCSsgaXAtPmRpc3BjbGtfcmFtcF9tYXJnaW5fcGVyY2VudAot CQkJCQkJCQkJCQkJCS8gMTAwKTsKLQkJCQl9Ci0KLQkJCQlpZiAodi0+TWluRGlzcGNsa1VzaW5n U2luZ2xlRFBQCi0JCQkJCQk8PSBkbWxfbWluKAotCQkJCQkJCQl2LT5NYXhEaXNwY2xrW2ldLAot CQkJCQkJCQkoaiArIDEpICogdi0+TWF4RHBwY2xrW2ldKQotCQkJCQkJJiYgdi0+TnVtYmVyT2ZE UFBSZXF1aXJlZEZvckRFVEFuZExCU2l6ZVtrXSA8PSAxKSB7Ci0JCQkJCXYtPk5vT2ZEUFBbaWpr XSA9IDE7Ci0JCQkJCXYtPlJlcXVpcmVkRElTUENMS1tqICogTnVtYmVyT2ZTdGF0ZXNQbHVzVHdv ICsgaV0gPSBkbWxfbWF4KAotCQkJCQkJCXYtPlJlcXVpcmVkRElTUENMS1tqICogTnVtYmVyT2ZT dGF0ZXNQbHVzVHdvCi0JCQkJCQkJCQkrIGldLAotCQkJCQkJCXYtPk1pbkRpc3BjbGtVc2luZ1Np bmdsZURQUCk7Ci0JCQkJfSBlbHNlIGlmICh2LT5NaW5EaXNwY2xrVXNpbmdEdWFsRFBQCi0JCQkJ CQk8PSBkbWxfbWluKAotCQkJCQkJCQl2LT5NYXhEaXNwY2xrW2ldLAotCQkJCQkJCQkoaiArIDEp ICogdi0+TWF4RHBwY2xrW2ldKSkgewotCQkJCQl2LT5Ob09mRFBQW2lqa10gPSAyOwotCQkJCQl2 LT5SZXF1aXJlZERJU1BDTEtbaiAqIE51bWJlck9mU3RhdGVzUGx1c1R3byArIGldID0gZG1sX21h eCgKLQkJCQkJCQl2LT5SZXF1aXJlZERJU1BDTEtbaiAqIE51bWJlck9mU3RhdGVzUGx1c1R3bwot CQkJCQkJCQkJKyBpXSwKLQkJCQkJCQl2LT5NaW5EaXNwY2xrVXNpbmdEdWFsRFBQKTsKLQkJCQl9 IGVsc2UgewotCQkJCQl2LT5Ob09mRFBQW2lqa10gPSAyOwotCQkJCQl2LT5SZXF1aXJlZERJU1BD TEtbaiAqIE51bWJlck9mU3RhdGVzUGx1c1R3byArIGldID0gZG1sX21heCgKLQkJCQkJCQl2LT5S ZXF1aXJlZERJU1BDTEtbaiAqIE51bWJlck9mU3RhdGVzUGx1c1R3bwotCQkJCQkJCQkJKyBpXSwK LQkJCQkJCQl2LT5NaW5EaXNwY2xrVXNpbmdEdWFsRFBQKTsKLQkJCQkJdi0+RElTUENMS19EUFBD TEtfU3VwcG9ydFtqICogTnVtYmVyT2ZTdGF0ZXNQbHVzVHdvICsgaV0gPQotCQkJCQkJCTA7Ci0J CQkJfQotCi0JCQkJdi0+VG90YWxOdW1iZXJPZkFjdGl2ZURQUFtqICogTnVtYmVyT2ZTdGF0ZXNQ bHVzVHdvICsgaV0gPQotCQkJCQkJdi0+VG90YWxOdW1iZXJPZkFjdGl2ZURQUFtqICogTnVtYmVy T2ZTdGF0ZXNQbHVzVHdvCi0JCQkJCQkJCSsgaV0gKyB2LT5Ob09mRFBQW2lqa107Ci0JCQl9Ci0K LQkJCWlmICh2LT5Ub3RhbE51bWJlck9mQWN0aXZlRFBQW2ogKiBOdW1iZXJPZlN0YXRlc1BsdXNU d28gKyBpXQotCQkJCQk+IGlwLT5tYXhfbnVtX2RwcCkgewotCQkJCXYtPlRvdGFsTnVtYmVyT2ZB Y3RpdmVEUFBbaiAqIE51bWJlck9mU3RhdGVzUGx1c1R3byArIGldID0gMDsKLQkJCQl2LT5SZXF1 aXJlZERJU1BDTEtbaiAqIE51bWJlck9mU3RhdGVzUGx1c1R3byArIGldID0gMDsKLQkJCQl2LT5E SVNQQ0xLX0RQUENMS19TdXBwb3J0W2ogKiBOdW1iZXJPZlN0YXRlc1BsdXNUd28gKyBpXSA9IDE7 Ci0KLQkJCQlmb3IgKGsgPSAwOyBrIDwgbnVtX3BsYW5lczsgaysrKSB7Ci0JCQkJCXN0cnVjdCBf dmNzX2RwaV9kaXNwbGF5X3BpcGVfZGVzdF9wYXJhbXNfc3QgZGVzdCA9Ci0JCQkJCQkJZTJlW3Yt PnBsYW5lc1trXS5lMmVfaW5kZXhdLnBpcGUuZGVzdDsKLQkJCQkJaWprID0gayAqIDIgKiBOdW1i ZXJPZlN0YXRlc1BsdXNUd28KLQkJCQkJCQkrIGogKiBOdW1iZXJPZlN0YXRlc1BsdXNUd28gKyBp OwotCi0JCQkJCXYtPk1pbkRpc3BjbGtVc2luZ1NpbmdsZURQUCA9IGRtbF9tYXgoCi0JCQkJCQkJ ZGVzdC5waXhlbF9yYXRlX21oeiwKLQkJCQkJCQl2LT5NaW5EUFBDTEtVc2luZ1NpbmdsZURQUFtr XSAqIChqICsgMSkpCi0JCQkJCQkJKiAoMSArIHNvYy0+ZG93bnNwcmVhZF9wZXJjZW50IC8gMTAw KTsKLQkJCQkJdi0+TWluRGlzcGNsa1VzaW5nRHVhbERQUCA9IGRtbF9tYXgoCi0JCQkJCQkJZGVz dC5waXhlbF9yYXRlX21oeiwKLQkJCQkJCQl2LT5NaW5EUFBDTEtVc2luZ1NpbmdsZURQUFtrXSAv IDIgKiAoaiArIDEpKQotCQkJCQkJCSogKDEgKyBzb2MtPmRvd25zcHJlYWRfcGVyY2VudCAvIDEw MCk7Ci0KLQkJCQkJaWYgKGkgPCBOdW1iZXJPZlN0YXRlcykgewotCQkJCQkJdi0+TWluRGlzcGNs a1VzaW5nU2luZ2xlRFBQID0KLQkJCQkJCQkJdi0+TWluRGlzcGNsa1VzaW5nU2luZ2xlRFBQCi0J CQkJCQkJCQkJKiAoMQotCQkJCQkJCQkJCQkJKyBpcC0+ZGlzcGNsa19yYW1wX21hcmdpbl9wZXJj ZW50Ci0JCQkJCQkJCQkJCQkJCS8gMTAwKTsKLQkJCQkJCXYtPk1pbkRpc3BjbGtVc2luZ0R1YWxE UFAgPQotCQkJCQkJCQl2LT5NaW5EaXNwY2xrVXNpbmdEdWFsRFBQCi0JCQkJCQkJCQkJKiAoMQot CQkJCQkJCQkJCQkJKyBpcC0+ZGlzcGNsa19yYW1wX21hcmdpbl9wZXJjZW50Ci0JCQkJCQkJCQkJ CQkJCS8gMTAwKTsKLQkJCQkJfQotCi0JCQkJCWlmICh2LT5OdW1iZXJPZkRQUFJlcXVpcmVkRm9y REVUQW5kTEJTaXplW2tdIDw9IDEpIHsKLQkJCQkJCXYtPk5vT2ZEUFBbaWprXSA9IDE7Ci0JCQkJ CQl2LT5SZXF1aXJlZERJU1BDTEtbaiAqIE51bWJlck9mU3RhdGVzUGx1c1R3byArIGldID0KLQkJ CQkJCQkJZG1sX21heCgKLQkJCQkJCQkJCQl2LT5SZXF1aXJlZERJU1BDTEtbagotCQkJCQkJCQkJ CQkJKiBOdW1iZXJPZlN0YXRlc1BsdXNUd28KLQkJCQkJCQkJCQkJCSsgaV0sCi0JCQkJCQkJCQkJ di0+TWluRGlzcGNsa1VzaW5nU2luZ2xlRFBQKTsKLQkJCQkJCWlmICh2LT5NaW5EaXNwY2xrVXNp bmdTaW5nbGVEUFAKLQkJCQkJCQkJPiBkbWxfbWluKAotCQkJCQkJCQkJCXYtPk1heERpc3BjbGtb aV0sCi0JCQkJCQkJCQkJKGogKyAxKQotCQkJCQkJCQkJCQkJKiB2LT5NYXhEcHBjbGtbaV0pKSB7 Ci0JCQkJCQkJdi0+RElTUENMS19EUFBDTEtfU3VwcG9ydFtqCi0JCQkJCQkJCQkqIE51bWJlck9m U3RhdGVzUGx1c1R3byArIGldID0KLQkJCQkJCQkJCTA7Ci0JCQkJCQl9Ci0JCQkJCX0gZWxzZSB7 Ci0JCQkJCQl2LT5Ob09mRFBQW2lqa10gPSAyOwotCQkJCQkJdi0+UmVxdWlyZWRESVNQQ0xLW2og KiBOdW1iZXJPZlN0YXRlc1BsdXNUd28gKyBpXSA9Ci0JCQkJCQkJCWRtbF9tYXgoCi0JCQkJCQkJ CQkJdi0+UmVxdWlyZWRESVNQQ0xLW2oKLQkJCQkJCQkJCQkJCSogTnVtYmVyT2ZTdGF0ZXNQbHVz VHdvCi0JCQkJCQkJCQkJCQkrIGldLAotCQkJCQkJCQkJCXYtPk1pbkRpc3BjbGtVc2luZ0R1YWxE UFApOwotCQkJCQkJaWYgKHYtPk1pbkRpc3BjbGtVc2luZ0R1YWxEUFAKLQkJCQkJCQkJPiBkbWxf bWluKAotCQkJCQkJCQkJCXYtPk1heERpc3BjbGtbaV0sCi0JCQkJCQkJCQkJKGogKyAxKQotCQkJ CQkJCQkJCQkJKiB2LT5NYXhEcHBjbGtbaV0pKSB7Ci0JCQkJCQkJdi0+RElTUENMS19EUFBDTEtf U3VwcG9ydFtqCi0JCQkJCQkJCQkqIE51bWJlck9mU3RhdGVzUGx1c1R3byArIGldID0KLQkJCQkJ CQkJCTA7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJdi0+VG90YWxOdW1iZXJPZkFjdGl2ZURQUFtq ICogTnVtYmVyT2ZTdGF0ZXNQbHVzVHdvICsgaV0gPQotCQkJCQkJCXYtPlRvdGFsTnVtYmVyT2ZB Y3RpdmVEUFBbagotCQkJCQkJCQkJKiBOdW1iZXJPZlN0YXRlc1BsdXNUd28gKyBpXQotCQkJCQkJ CQkJKyB2LT5Ob09mRFBQW2lqa107Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JLy8gVmlld3Bv cnQgU2l6ZSBDaGVjawotCi0Jdi0+Vmlld3BvcnRTaXplU3VwcG9ydCA9IDE7Ci0KLQlmb3IgKGsg PSAwOyBrIDwgbnVtX3BsYW5lczsgaysrKSB7Ci0JCWlmICh2LT5OdW1iZXJPZkRQUFJlcXVpcmVk Rm9yREVUQW5kTEJTaXplW2tdID4gMikgewotCQkJdi0+Vmlld3BvcnRTaXplU3VwcG9ydCA9IDA7 Ci0JCX0KLQl9Ci0KLQkvLyBUb3RhbCBBdmFpbGFibGUgUGlwZXMgU3VwcG9ydCBDaGVjawotCi0J Zm9yIChpID0gMDsgaSA8IE51bWJlck9mU3RhdGVzUGx1c1R3bzsgaSsrKSB7Ci0JCWZvciAoaiA9 IDA7IGogPCAyOyBqKyspIHsKLQkJCWlmICh2LT5Ub3RhbE51bWJlck9mQWN0aXZlRFBQW2ogKiBO dW1iZXJPZlN0YXRlc1BsdXNUd28gKyBpXQotCQkJCQk8PSBpcC0+bWF4X251bV9kcHApIHsKLQkJ CQl2LT5Ub3RhbEF2YWlsYWJsZVBpcGVzU3VwcG9ydFtqICogTnVtYmVyT2ZTdGF0ZXNQbHVzVHdv ICsgaV0gPSAxOwotCQkJfSBlbHNlIHsKLQkJCQl2LT5Ub3RhbEF2YWlsYWJsZVBpcGVzU3VwcG9y dFtqICogTnVtYmVyT2ZTdGF0ZXNQbHVzVHdvICsgaV0gPSAwOwotCQkJfQotCQl9Ci0JfQotCi0J Ly8gVXJnZW50IExhdGVuY3kgU3VwcG9ydCBDaGVjawotCi0JZm9yIChqID0gMDsgaiA8IDI7IGor KykgewotCQlmb3IgKGkgPSAwOyBpIDwgTnVtYmVyT2ZTdGF0ZXNQbHVzVHdvOyBpKyspIHsKLQkJ CWlqID0gaiAqIE51bWJlck9mU3RhdGVzUGx1c1R3byArIGk7Ci0JCQlmb3IgKGsgPSAwOyBrIDwg bnVtX3BsYW5lczsgaysrKSB7Ci0JCQkJc3RydWN0IF92Y3NfZHBpX2Rpc3BsYXlfcGlwZV9zb3Vy Y2VfcGFyYW1zX3N0IHNyYyA9Ci0JCQkJCQllMmVbdi0+cGxhbmVzW2tdLmUyZV9pbmRleF0ucGlw ZS5zcmM7Ci0JCQkJc3RydWN0IF92Y3NfZHBpX2Rpc3BsYXlfcGlwZV9kZXN0X3BhcmFtc19zdCBk ZXN0ID0KLQkJCQkJCWUyZVt2LT5wbGFuZXNba10uZTJlX2luZGV4XS5waXBlLmRlc3Q7Ci0JCQkJ c3RydWN0IF92Y3NfZHBpX3NjYWxlcl9yYXRpb19kZXB0aF9zdCBzY2FsZV9yYXRpb19kZXB0aCA9 Ci0JCQkJCQllMmVbdi0+cGxhbmVzW2tdLmUyZV9pbmRleF0ucGlwZS5zY2FsZV9yYXRpb19kZXB0 aDsKLQkJCQlzdHJ1Y3QgX3Zjc19kcGlfc2NhbGVyX3RhcHNfc3Qgc2NhbGVfdGFwcyA9Ci0JCQkJ CQllMmVbdi0+cGxhbmVzW2tdLmUyZV9pbmRleF0ucGlwZS5zY2FsZV90YXBzOwotCQkJCWlqayA9 IGsgKiAyICogTnVtYmVyT2ZTdGF0ZXNQbHVzVHdvICsgaiAqIE51bWJlck9mU3RhdGVzUGx1c1R3 byArIGk7Ci0KLQkJCQl2LT5Td2F0aFdpZHRoWVBlclN0YXRlW2lqa10gPSB2LT5Td2F0aFdpZHRo WVNpbmdsZURQUFtrXQotCQkJCQkJLyB2LT5Ob09mRFBQW2lqa107Ci0KLQkJCQl2LT5Td2F0aFdp ZHRoR3JhbnVsYXJpdHlZID0gMjU2Ci0JCQkJCQkvIGRtbF9jZWlsX2V4KHYtPkJ5dGVQZXJQaXhl bEluREVUWVtrXSwgMSkKLQkJCQkJCS8gdi0+TWF4U3dhdGhIZWlnaHRZW2tdOwotCQkJCXYtPlJv dW5kZWRVcE1heFN3YXRoU2l6ZUJ5dGVzWSA9IChkbWxfY2VpbF9leCgKLQkJCQkJCXYtPlN3YXRo V2lkdGhZUGVyU3RhdGVbaWprXSAtIDEsCi0JCQkJCQl2LT5Td2F0aFdpZHRoR3JhbnVsYXJpdHlZ KQotCQkJCQkJKyB2LT5Td2F0aFdpZHRoR3JhbnVsYXJpdHlZKQotCQkJCQkJKiB2LT5CeXRlUGVy UGl4ZWxJbkRFVFlba10gKiB2LT5NYXhTd2F0aEhlaWdodFlba107Ci0JCQkJaWYgKHNyYy5zb3Vy Y2VfZm9ybWF0ID09IGRtXzQyMF8xMCkgewotCQkJCQl2LT5Sb3VuZGVkVXBNYXhTd2F0aFNpemVC eXRlc1kgPSBkbWxfY2VpbF9leCgKLQkJCQkJCQl2LT5Sb3VuZGVkVXBNYXhTd2F0aFNpemVCeXRl c1ksCi0JCQkJCQkJMjU2KSArIDI1NjsKLQkJCQl9Ci0JCQkJaWYgKHYtPk1heFN3YXRoSGVpZ2h0 Q1trXSA+IDApIHsKLQkJCQkJdi0+U3dhdGhXaWR0aEdyYW51bGFyaXR5QyA9IDI1NgotCQkJCQkJ CS8gZG1sX2NlaWxfZXgodi0+Qnl0ZVBlclBpeGVsSW5ERVRDW2tdLCAyKQotCQkJCQkJCS8gdi0+ TWF4U3dhdGhIZWlnaHRDW2tdOwotCQkJCX0KLQkJCQl2LT5Sb3VuZGVkVXBNYXhTd2F0aFNpemVC eXRlc0MgPSAoZG1sX2NlaWxfZXgoCi0JCQkJCQl2LT5Td2F0aFdpZHRoWVBlclN0YXRlW2lqa10g LyAyIC0gMSwKLQkJCQkJCXYtPlN3YXRoV2lkdGhHcmFudWxhcml0eUMpCi0JCQkJCQkrIHYtPlN3 YXRoV2lkdGhHcmFudWxhcml0eUMpCi0JCQkJCQkqIHYtPkJ5dGVQZXJQaXhlbEluREVUQ1trXSAq IHYtPk1heFN3YXRoSGVpZ2h0Q1trXTsKLQkJCQlpZiAoc3JjLnNvdXJjZV9mb3JtYXQgPT0gZG1f NDIwXzEwKSB7Ci0JCQkJCXYtPlJvdW5kZWRVcE1heFN3YXRoU2l6ZUJ5dGVzQyA9IGRtbF9jZWls X2V4KAotCQkJCQkJCXYtPlJvdW5kZWRVcE1heFN3YXRoU2l6ZUJ5dGVzQywKLQkJCQkJCQkyNTYp ICsgMjU2OwotCQkJCX0KLQotCQkJCWlmICh2LT5Sb3VuZGVkVXBNYXhTd2F0aFNpemVCeXRlc1kg KyB2LT5Sb3VuZGVkVXBNYXhTd2F0aFNpemVCeXRlc0MKLQkJCQkJCTw9IGlwLT5kZXRfYnVmZmVy X3NpemVfa2J5dGVzICogMTAyNCAvIDIpIHsKLQkJCQkJdi0+U3dhdGhIZWlnaHRZUGVyU3RhdGVb aWprXSA9IHYtPk1heFN3YXRoSGVpZ2h0WVtrXTsKLQkJCQkJdi0+U3dhdGhIZWlnaHRDUGVyU3Rh dGVbaWprXSA9IHYtPk1heFN3YXRoSGVpZ2h0Q1trXTsKLQkJCQl9IGVsc2UgewotCQkJCQl2LT5T d2F0aEhlaWdodFlQZXJTdGF0ZVtpamtdID0gdi0+TWluU3dhdGhIZWlnaHRZW2tdOwotCQkJCQl2 LT5Td2F0aEhlaWdodENQZXJTdGF0ZVtpamtdID0gdi0+TWluU3dhdGhIZWlnaHRDW2tdOwotCQkJ CX0KLQotCQkJCWlmICh2LT5CeXRlUGVyUGl4ZWxJbkRFVENba10gPT0gMCkgewotCQkJCQl2LT5M aW5lc0luREVUTHVtYSA9IGlwLT5kZXRfYnVmZmVyX3NpemVfa2J5dGVzICogMTAyNAotCQkJCQkJ CS8gdi0+Qnl0ZVBlclBpeGVsSW5ERVRZW2tdCi0JCQkJCQkJLyB2LT5Td2F0aFdpZHRoWVBlclN0 YXRlW2lqa107Ci0KLQkJCQkJdi0+TGluZXNJbkRFVENocm9tYSA9IDA7Ci0JCQkJfSBlbHNlIGlm ICh2LT5Td2F0aEhlaWdodFlQZXJTdGF0ZVtpamtdCi0JCQkJCQk8PSB2LT5Td2F0aEhlaWdodENQ ZXJTdGF0ZVtpamtdKSB7Ci0JCQkJCXYtPkxpbmVzSW5ERVRMdW1hID0gaXAtPmRldF9idWZmZXJf c2l6ZV9rYnl0ZXMgKiAxMDI0IC8gMgotCQkJCQkJCS8gdi0+Qnl0ZVBlclBpeGVsSW5ERVRZW2td Ci0JCQkJCQkJLyB2LT5Td2F0aFdpZHRoWVBlclN0YXRlW2lqa107Ci0JCQkJCXYtPkxpbmVzSW5E RVRDaHJvbWEgPSBpcC0+ZGV0X2J1ZmZlcl9zaXplX2tieXRlcyAqIDEwMjQgLyAyCi0JCQkJCQkJ LyB2LT5CeXRlUGVyUGl4ZWxJbkRFVENba10KLQkJCQkJCQkvICh2LT5Td2F0aFdpZHRoWVBlclN0 YXRlW2lqa10gLyAyKTsKLQkJCQl9IGVsc2UgewotCQkJCQl2LT5MaW5lc0luREVUTHVtYSA9IGlw LT5kZXRfYnVmZmVyX3NpemVfa2J5dGVzICogMTAyNCAqIDIKLQkJCQkJCQkvIDMgLyB2LT5CeXRl UGVyUGl4ZWxJbkRFVFlba10KLQkJCQkJCQkvIHYtPlN3YXRoV2lkdGhZUGVyU3RhdGVbaWprXTsK LQkJCQkJdi0+TGluZXNJbkRFVENocm9tYSA9IGlwLT5kZXRfYnVmZmVyX3NpemVfa2J5dGVzICog MTAyNCAvIDMKLQkJCQkJCQkvIHYtPkJ5dGVQZXJQaXhlbEluREVUWVtrXQotCQkJCQkJCS8gKHYt PlN3YXRoV2lkdGhZUGVyU3RhdGVbaWprXSAvIDIpOwotCQkJCX0KLQotCQkJCXYtPkVmZmVjdGl2 ZUxCTGF0ZW5jeUhpZGluZ1NvdXJjZUxpbmVzTHVtYSA9Ci0JCQkJCQlkbWxfbWluKAotCQkJCQkJ CQlpcC0+bWF4X2xpbmVfYnVmZmVyX2xpbmVzLAotCQkJCQkJCQlkbWxfZmxvb3JfZXgoCi0JCQkJ CQkJCQkJaXAtPmxpbmVfYnVmZmVyX3NpemVfYml0cwotCQkJCQkJCQkJCQkJLyBzY2FsZV9yYXRp b19kZXB0aC5sYl9kZXB0aAotCQkJCQkJCQkJCQkJLyAodi0+U3dhdGhXaWR0aFlQZXJTdGF0ZVtp amtdCi0JCQkJCQkJCQkJCQkJCS8gZG1sX21heCgKLQkJCQkJCQkJCQkJCQkJCQlzY2FsZV9yYXRp b19kZXB0aC5oc2NsX3JhdGlvLAotCQkJCQkJCQkJCQkJCQkJCTEpKSwKLQkJCQkJCQkJCQkxKSkK LQkJCQkJCQkJLSAoc2NhbGVfdGFwcy52dGFwcyAtIDEpOwotCi0JCQkJdi0+RWZmZWN0aXZlTEJM YXRlbmN5SGlkaW5nU291cmNlTGluZXNDaHJvbWEgPQotCQkJCQkJZG1sX21pbigKLQkJCQkJCQkJ aXAtPm1heF9saW5lX2J1ZmZlcl9saW5lcywKLQkJCQkJCQkJZG1sX2Zsb29yX2V4KAotCQkJCQkJ CQkJCWlwLT5saW5lX2J1ZmZlcl9zaXplX2JpdHMKLQkJCQkJCQkJCQkJCS8gc2NhbGVfcmF0aW9f ZGVwdGgubGJfZGVwdGgKLQkJCQkJCQkJCQkJCS8gKHYtPlN3YXRoV2lkdGhZUGVyU3RhdGVbaWpr XQotCQkJCQkJCQkJCQkJCQkvIDIKLQkJCQkJCQkJCQkJCQkJLyBkbWxfbWF4KAotCQkJCQkJCQkJ CQkJCQkJCXNjYWxlX3JhdGlvX2RlcHRoLmhzY2xfcmF0aW8KLQkJCQkJCQkJCQkJCQkJCQkJCS8g MiwKLQkJCQkJCQkJCQkJCQkJCQkxKSksCi0JCQkJCQkJCQkJMSkpCi0JCQkJCQkJCS0gKHNjYWxl X3RhcHMudnRhcHNfYyAtIDEpOwotCi0JCQkJdi0+RWZmZWN0aXZlREVUTEJMaW5lc0x1bWEgPQot CQkJCQkJZG1sX2Zsb29yX2V4KAotCQkJCQkJCQl2LT5MaW5lc0luREVUTHVtYQotCQkJCQkJCQkJ CSsgZG1sX21pbigKLQkJCQkJCQkJCQkJCXYtPkxpbmVzSW5ERVRMdW1hCi0JCQkJCQkJCQkJCQkJ CSogdi0+UmVxdWlyZWRESVNQQ0xLW2lqXQotCQkJCQkJCQkJCQkJCQkqIHYtPkJ5dGVQZXJQaXhl bEluREVUWVtrXQotCQkJCQkJCQkJCQkJCQkqIHYtPlBTQ0xfRkFDVE9SW2tdCi0JCQkJCQkJCQkJ CQkJCS8gdi0+UmV0dXJuQldQZXJTdGF0ZVtpXSwKLQkJCQkJCQkJCQkJCXYtPkVmZmVjdGl2ZUxC TGF0ZW5jeUhpZGluZ1NvdXJjZUxpbmVzTHVtYSksCi0JCQkJCQkJCXYtPlN3YXRoSGVpZ2h0WVBl clN0YXRlW2lqa10pOwotCi0JCQkJdi0+RWZmZWN0aXZlREVUTEJMaW5lc0Nocm9tYSA9Ci0JCQkJ CQlkbWxfZmxvb3JfZXgoCi0JCQkJCQkJCXYtPkxpbmVzSW5ERVRDaHJvbWEKLQkJCQkJCQkJCQkr IGRtbF9taW4oCi0JCQkJCQkJCQkJCQl2LT5MaW5lc0luREVUQ2hyb21hCi0JCQkJCQkJCQkJCQkJ CSogdi0+UmVxdWlyZWRESVNQQ0xLW2lqXQotCQkJCQkJCQkJCQkJCQkqIHYtPkJ5dGVQZXJQaXhl bEluREVUQ1trXQotCQkJCQkJCQkJCQkJCQkqIHYtPlBTQ0xfRkFDVE9SX0NIUk9NQVtrXQotCQkJ CQkJCQkJCQkJCQkvIHYtPlJldHVybkJXUGVyU3RhdGVbaV0sCi0JCQkJCQkJCQkJCQl2LT5FZmZl Y3RpdmVMQkxhdGVuY3lIaWRpbmdTb3VyY2VMaW5lc0Nocm9tYSksCi0JCQkJCQkJCXYtPlN3YXRo SGVpZ2h0Q1BlclN0YXRlW2lqa10pOwotCi0JCQkJaWYgKHYtPkJ5dGVQZXJQaXhlbEluREVUQ1tr XSA9PSAwKSB7Ci0JCQkJCXYtPlVyZ2VudExhdGVuY3lTdXBwb3J0VXNQZXJTdGF0ZVtpamtdID0K LQkJCQkJCQl2LT5FZmZlY3RpdmVERVRMQkxpbmVzTHVtYQotCQkJCQkJCQkJKiAoZGVzdC5odG90 YWwKLQkJCQkJCQkJCQkJLyBkZXN0LnBpeGVsX3JhdGVfbWh6KQotCQkJCQkJCQkJLyBzY2FsZV9y YXRpb19kZXB0aC52c2NsX3JhdGlvCi0JCQkJCQkJCQktIHYtPkVmZmVjdGl2ZURFVExCTGluZXNM dW1hCi0JCQkJCQkJCQkJCSogdi0+U3dhdGhXaWR0aFlQZXJTdGF0ZVtpamtdCi0JCQkJCQkJCQkJ CSogZG1sX2NlaWxfZXgoCi0JCQkJCQkJCQkJCQkJdi0+Qnl0ZVBlclBpeGVsSW5ERVRZW2tdLAot CQkJCQkJCQkJCQkJCTEpCi0JCQkJCQkJCQkJCS8gKHYtPlJldHVybkJXUGVyU3RhdGVbaV0KLQkJ CQkJCQkJCQkJCQkvIHYtPk5vT2ZEUFBbaWprXSk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJdi0+VXJn ZW50TGF0ZW5jeVN1cHBvcnRVc1BlclN0YXRlW2lqa10gPQotCQkJCQkJCWRtbF9taW4oCi0JCQkJ CQkJCQl2LT5FZmZlY3RpdmVERVRMQkxpbmVzTHVtYQotCQkJCQkJCQkJCQkqIChkZXN0Lmh0b3Rh bAotCQkJCQkJCQkJCQkJCS8gZGVzdC5waXhlbF9yYXRlX21oeikKLQkJCQkJCQkJCQkJLyBzY2Fs ZV9yYXRpb19kZXB0aC52c2NsX3JhdGlvCi0JCQkJCQkJCQkJCS0gdi0+RWZmZWN0aXZlREVUTEJM aW5lc0x1bWEKLQkJCQkJCQkJCQkJCQkqIHYtPlN3YXRoV2lkdGhZUGVyU3RhdGVbaWprXQotCQkJ CQkJCQkJCQkJCSogZG1sX2NlaWxfZXgoCi0JCQkJCQkJCQkJCQkJCQl2LT5CeXRlUGVyUGl4ZWxJ bkRFVFlba10sCi0JCQkJCQkJCQkJCQkJCQkxKQotCQkJCQkJCQkJCQkJCS8gKHYtPlJldHVybkJX UGVyU3RhdGVbaV0KLQkJCQkJCQkJCQkJCQkJCS8gdi0+Tm9PZkRQUFtpamtdKSwKLQkJCQkJCQkJ CXYtPkVmZmVjdGl2ZURFVExCTGluZXNDaHJvbWEKLQkJCQkJCQkJCQkJKiAoZGVzdC5odG90YWwK LQkJCQkJCQkJCQkJCQkvIGRlc3QucGl4ZWxfcmF0ZV9taHopCi0JCQkJCQkJCQkJCS8gKHNjYWxl X3JhdGlvX2RlcHRoLnZzY2xfcmF0aW8KLQkJCQkJCQkJCQkJCQkvIDIpCi0JCQkJCQkJCQkJCS0g di0+RWZmZWN0aXZlREVUTEJMaW5lc0Nocm9tYQotCQkJCQkJCQkJCQkJCSogdi0+U3dhdGhXaWR0 aFlQZXJTdGF0ZVtpamtdCi0JCQkJCQkJCQkJCQkJLyAyCi0JCQkJCQkJCQkJCQkJKiBkbWxfY2Vp bF9leCgKLQkJCQkJCQkJCQkJCQkJCXYtPkJ5dGVQZXJQaXhlbEluREVUQ1trXSwKLQkJCQkJCQkJ CQkJCQkJCTIpCi0JCQkJCQkJCQkJCQkJLyAodi0+UmV0dXJuQldQZXJTdGF0ZVtpXQotCQkJCQkJ CQkJCQkJCQkJLyB2LT5Ob09mRFBQW2lqa10pKTsKLQkJCQl9Ci0KLQkJCX0KLQkJfQotCX0KLQot CWZvciAoaSA9IDA7IGkgPCBOdW1iZXJPZlN0YXRlc1BsdXNUd287IGkrKykgewotCQlmb3IgKGog PSAwOyBqIDwgMjsgaisrKSB7Ci0JCQlpaiA9IGogKiBOdW1iZXJPZlN0YXRlc1BsdXNUd28gKyBp OwotCi0JCQl2LT5VcmdlbnRMYXRlbmN5U3VwcG9ydFtpal0gPSAxOwotCQkJZm9yIChrID0gMDsg ayA8IG51bV9wbGFuZXM7IGsrKykgewotCQkJCWlqayA9IGsgKiAyICogTnVtYmVyT2ZTdGF0ZXNQ bHVzVHdvICsgaiAqIE51bWJlck9mU3RhdGVzUGx1c1R3byArIGk7Ci0KLQkJCQlpZiAodi0+VXJn ZW50TGF0ZW5jeVN1cHBvcnRVc1BlclN0YXRlW2lqa10KLQkJCQkJCTwgc29jLT51cmdlbnRfbGF0 ZW5jeV91cyAvIDEpIHsKLQkJCQkJdi0+VXJnZW50TGF0ZW5jeVN1cHBvcnRbaWpdID0gMDsKLQkJ CQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvLyBQcmVmZXRjaCBDaGVjawotCi0JZm9yIChpID0gMDsg aSA8IE51bWJlck9mU3RhdGVzUGx1c1R3bzsgaSsrKSB7Ci0JCWZvciAoaiA9IDA7IGogPCAyOyBq KyspIHsKLQkJCWlqID0gaiAqIE51bWJlck9mU3RhdGVzUGx1c1R3byArIGk7Ci0KLQkJCXYtPlRv dGFsTnVtYmVyT2ZEQ0NBY3RpdmVEUFBbaWpdID0gMDsKLQkJCWZvciAoayA9IDA7IGsgPCBudW1f cGxhbmVzOyBrKyspIHsKLQkJCQlzdHJ1Y3QgX3Zjc19kcGlfZGlzcGxheV9waXBlX3NvdXJjZV9w YXJhbXNfc3Qgc3JjID0KLQkJCQkJCWUyZVt2LT5wbGFuZXNba10uZTJlX2luZGV4XS5waXBlLnNy YzsKLQkJCQlpamsgPSBrICogMiAqIE51bWJlck9mU3RhdGVzUGx1c1R3byArIGogKiBOdW1iZXJP ZlN0YXRlc1BsdXNUd28gKyBpOwotCi0JCQkJaWYgKHNyYy5kY2MgPT0gMSkgewotCQkJCQl2LT5U b3RhbE51bWJlck9mRENDQWN0aXZlRFBQW2lqXSA9Ci0JCQkJCQkJdi0+VG90YWxOdW1iZXJPZkRD Q0FjdGl2ZURQUFtpal0KLQkJCQkJCQkJCSsgdi0+Tm9PZkRQUFtpamtdOwotCQkJCX0KLQkJCX0K LQkJfQotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBOdW1iZXJPZlN0YXRlc1BsdXNUd287IGkrKykg ewotCQlmb3IgKGogPSAwOyBqIDwgMjsgaisrKSB7Ci0JCQlpaiA9IGogKiBOdW1iZXJPZlN0YXRl c1BsdXNUd28gKyBpOwotCi0JCQl2LT5Qcm9qZWN0ZWREQ0ZDTEtEZWVwU2xlZXAgPSA4OwotCi0J CQlmb3IgKGsgPSAwOyBrIDwgbnVtX3BsYW5lczsgaysrKSB7Ci0JCQkJc3RydWN0IF92Y3NfZHBp X2Rpc3BsYXlfcGlwZV9kZXN0X3BhcmFtc19zdCBkZXN0ID0KLQkJCQkJCWUyZVt2LT5wbGFuZXNb a10uZTJlX2luZGV4XS5waXBlLmRlc3Q7Ci0JCQkJc3RydWN0IF92Y3NfZHBpX3NjYWxlcl9yYXRp b19kZXB0aF9zdCBzY2FsZV9yYXRpb19kZXB0aCA9Ci0JCQkJCQllMmVbdi0+cGxhbmVzW2tdLmUy ZV9pbmRleF0ucGlwZS5zY2FsZV9yYXRpb19kZXB0aDsKLQkJCQlpamsgPSBrICogMiAqIE51bWJl ck9mU3RhdGVzUGx1c1R3byArIGogKiBOdW1iZXJPZlN0YXRlc1BsdXNUd28gKyBpOwotCi0JCQkJ di0+UHJvamVjdGVkRENGQ0xLRGVlcFNsZWVwID0gZG1sX21heCgKLQkJCQkJCXYtPlByb2plY3Rl ZERDRkNMS0RlZXBTbGVlcCwKLQkJCQkJCWRlc3QucGl4ZWxfcmF0ZV9taHogLyAxNik7Ci0JCQkJ aWYgKHYtPkJ5dGVQZXJQaXhlbEluREVUQ1trXSA9PSAwKSB7Ci0JCQkJCWlmIChzY2FsZV9yYXRp b19kZXB0aC52c2NsX3JhdGlvIDw9IDEpIHsKLQkJCQkJCXYtPlByb2plY3RlZERDRkNMS0RlZXBT bGVlcCA9Ci0JCQkJCQkJCWRtbF9tYXgoCi0JCQkJCQkJCQkJdi0+UHJvamVjdGVkRENGQ0xLRGVl cFNsZWVwLAotCQkJCQkJCQkJCTEuMQotCQkJCQkJCQkJCQkJKiBkbWxfY2VpbF9leCgKLQkJCQkJ CQkJCQkJCQkJdi0+Qnl0ZVBlclBpeGVsSW5ERVRZW2tdLAotCQkJCQkJCQkJCQkJCQkxKQotCQkJ CQkJCQkJCQkJLyA2NAotCQkJCQkJCQkJCQkJKiBzY2FsZV9yYXRpb19kZXB0aC5oc2NsX3JhdGlv Ci0JCQkJCQkJCQkJCQkqIGRlc3QucGl4ZWxfcmF0ZV9taHoKLQkJCQkJCQkJCQkJCS8gdi0+Tm9P ZkRQUFtpamtdKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXYtPlByb2plY3RlZERDRkNMS0RlZXBT bGVlcCA9Ci0JCQkJCQkJCWRtbF9tYXgoCi0JCQkJCQkJCQkJdi0+UHJvamVjdGVkRENGQ0xLRGVl cFNsZWVwLAotCQkJCQkJCQkJCTEuMQotCQkJCQkJCQkJCQkJKiBkbWxfY2VpbF9leCgKLQkJCQkJ CQkJCQkJCQkJdi0+Qnl0ZVBlclBpeGVsSW5ERVRZW2tdLAotCQkJCQkJCQkJCQkJCQkxKQotCQkJ CQkJCQkJCQkJLyA2NAotCQkJCQkJCQkJCQkJKiB2LT5QU0NMX0ZBQ1RPUltrXQotCQkJCQkJCQkJ CQkJKiB2LT5SZXF1aXJlZERJU1BDTEtbaWpdCi0JCQkJCQkJCQkJCQkvICgxCi0JCQkJCQkJCQkJ CQkJCSsgaikpOwotCQkJCQl9Ci0KLQkJCQl9IGVsc2UgewotCQkJCQlpZiAoc2NhbGVfcmF0aW9f ZGVwdGgudnNjbF9yYXRpbyA8PSAxKSB7Ci0JCQkJCQl2LT5Qcm9qZWN0ZWREQ0ZDTEtEZWVwU2xl ZXAgPQotCQkJCQkJCQlkbWxfbWF4KAotCQkJCQkJCQkJCXYtPlByb2plY3RlZERDRkNMS0RlZXBT bGVlcCwKLQkJCQkJCQkJCQkxLjEKLQkJCQkJCQkJCQkJCSogZG1sX2NlaWxfZXgoCi0JCQkJCQkJ CQkJCQkJCXYtPkJ5dGVQZXJQaXhlbEluREVUWVtrXSwKLQkJCQkJCQkJCQkJCQkJMSkKLQkJCQkJ CQkJCQkJCS8gMzIKLQkJCQkJCQkJCQkJCSogc2NhbGVfcmF0aW9fZGVwdGguaHNjbF9yYXRpbwot CQkJCQkJCQkJCQkJKiBkZXN0LnBpeGVsX3JhdGVfbWh6Ci0JCQkJCQkJCQkJCQkvIHYtPk5vT2ZE UFBbaWprXSk7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQl2LT5Qcm9qZWN0ZWREQ0ZDTEtEZWVwU2xl ZXAgPQotCQkJCQkJCQlkbWxfbWF4KAotCQkJCQkJCQkJCXYtPlByb2plY3RlZERDRkNMS0RlZXBT bGVlcCwKLQkJCQkJCQkJCQkxLjEKLQkJCQkJCQkJCQkJCSogZG1sX2NlaWxfZXgoCi0JCQkJCQkJ CQkJCQkJCXYtPkJ5dGVQZXJQaXhlbEluREVUWVtrXSwKLQkJCQkJCQkJCQkJCQkJMSkKLQkJCQkJ CQkJCQkJCS8gMzIKLQkJCQkJCQkJCQkJCSogdi0+UFNDTF9GQUNUT1Jba10KLQkJCQkJCQkJCQkJ CSogdi0+UmVxdWlyZWRESVNQQ0xLW2lqXQotCQkJCQkJCQkJCQkJLyAoMQotCQkJCQkJCQkJCQkJ CQkrIGopKTsKLQkJCQkJfQotCQkJCQlpZiAoKHNjYWxlX3JhdGlvX2RlcHRoLnZzY2xfcmF0aW8g LyAyKSA8PSAxKSB7Ci0JCQkJCQl2LT5Qcm9qZWN0ZWREQ0ZDTEtEZWVwU2xlZXAgPQotCQkJCQkJ CQlkbWxfbWF4KAotCQkJCQkJCQkJCXYtPlByb2plY3RlZERDRkNMS0RlZXBTbGVlcCwKLQkJCQkJ CQkJCQkxLjEKLQkJCQkJCQkJCQkJCSogZG1sX2NlaWxfZXgoCi0JCQkJCQkJCQkJCQkJCXYtPkJ5 dGVQZXJQaXhlbEluREVUQ1trXSwKLQkJCQkJCQkJCQkJCQkJMikKLQkJCQkJCQkJCQkJCS8gMzIK LQkJCQkJCQkJCQkJCSogc2NhbGVfcmF0aW9fZGVwdGguaHNjbF9yYXRpbwotCQkJCQkJCQkJCQkJ LyAyCi0JCQkJCQkJCQkJCQkqIGRlc3QucGl4ZWxfcmF0ZV9taHoKLQkJCQkJCQkJCQkJCS8gdi0+ Tm9PZkRQUFtpamtdKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXYtPlByb2plY3RlZERDRkNMS0Rl ZXBTbGVlcCA9Ci0JCQkJCQkJCWRtbF9tYXgoCi0JCQkJCQkJCQkJdi0+UHJvamVjdGVkRENGQ0xL RGVlcFNsZWVwLAotCQkJCQkJCQkJCTEuMQotCQkJCQkJCQkJCQkJKiBkbWxfY2VpbF9leCgKLQkJ CQkJCQkJCQkJCQkJdi0+Qnl0ZVBlclBpeGVsSW5ERVRDW2tdLAotCQkJCQkJCQkJCQkJCQkyKQot CQkJCQkJCQkJCQkJLyAzMgotCQkJCQkJCQkJCQkJKiB2LT5QU0NMX0ZBQ1RPUl9DSFJPTUFba10K LQkJCQkJCQkJCQkJCSogdi0+UmVxdWlyZWRESVNQQ0xLW2lqXQotCQkJCQkJCQkJCQkJLyAoMQot CQkJCQkJCQkJCQkJCQkrIGopKTsKLQkJCQkJfQotCi0JCQkJfQotCQkJfQotCi0JCQlmb3IgKGsg PSAwOyBrIDwgbnVtX3BsYW5lczsgaysrKSB7Ci0JCQkJc3RydWN0IF92Y3NfZHBpX2Rpc3BsYXlf cGlwZV9zb3VyY2VfcGFyYW1zX3N0IHNyYyA9Ci0JCQkJCQllMmVbdi0+cGxhbmVzW2tdLmUyZV9p bmRleF0ucGlwZS5zcmM7Ci0JCQkJc3RydWN0IF92Y3NfZHBpX2Rpc3BsYXlfcGlwZV9kZXN0X3Bh cmFtc19zdCBkZXN0ID0KLQkJCQkJCWUyZVt2LT5wbGFuZXNba10uZTJlX2luZGV4XS5waXBlLmRl c3Q7Ci0JCQkJc3RydWN0IF92Y3NfZHBpX3NjYWxlcl9yYXRpb19kZXB0aF9zdCBzY2FsZV9yYXRp b19kZXB0aCA9Ci0JCQkJCQllMmVbdi0+cGxhbmVzW2tdLmUyZV9pbmRleF0ucGlwZS5zY2FsZV9y YXRpb19kZXB0aDsKLQkJCQlzdHJ1Y3QgX3Zjc19kcGlfc2NhbGVyX3RhcHNfc3Qgc2NhbGVfdGFw cyA9Ci0JCQkJCQllMmVbdi0+cGxhbmVzW2tdLmUyZV9pbmRleF0ucGlwZS5zY2FsZV90YXBzOwot CQkJCXN0cnVjdCBfdmNzX2RwaV9kaXNwbGF5X291dHB1dF9wYXJhbXNfc3QgZG91dCA9Ci0JCQkJ CQllMmVbdi0+cGxhbmVzW2tdLmUyZV9pbmRleF0uZG91dDsKLQkJCQlpamsgPSBrICogMiAqIE51 bWJlck9mU3RhdGVzUGx1c1R3byArIGogKiBOdW1iZXJPZlN0YXRlc1BsdXNUd28gKyBpOwotCi0J CQkJaWYgKHNyYy5kY2MgPT0gMSkgewotCQkJCQl2LT5NZXRhUmVxSGVpZ2h0WSA9IDggKiB2LT5S ZWFkMjU2QmxvY2tIZWlnaHRZW2tdOwotCQkJCQl2LT5NZXRhUmVxV2lkdGhZID0gNjQgKiAyNTYK LQkJCQkJCQkvIGRtbF9jZWlsX2V4KHYtPkJ5dGVQZXJQaXhlbEluREVUWVtrXSwgMSkKLQkJCQkJ CQkvIHYtPk1ldGFSZXFIZWlnaHRZOwotCQkJCQl2LT5NZXRhU3VyZmFjZVdpZHRoWSA9IGRtbF9j ZWlsX2V4KAotCQkJCQkJCXNyYy52aWV3cG9ydF93aWR0aCAvIHYtPk5vT2ZEUFBbaWprXSAtIDEs Ci0JCQkJCQkJdi0+TWV0YVJlcVdpZHRoWSkgKyB2LT5NZXRhUmVxV2lkdGhZOwotCQkJCQl2LT5N ZXRhU3VyZmFjZUhlaWdodFkgPSBkbWxfY2VpbF9leCgKLQkJCQkJCQlzcmMudmlld3BvcnRfaGVp Z2h0IC0gMSwKLQkJCQkJCQl2LT5NZXRhUmVxSGVpZ2h0WSkgKyB2LT5NZXRhUmVxSGVpZ2h0WTsK LQkJCQkJaWYgKGlwLT5wdGVfZW5hYmxlID09IDEpIHsKLQkJCQkJCXYtPk1ldGFQdGVCeXRlc1Bl ckZyYW1lWSA9Ci0JCQkJCQkJCShkbWxfY2VpbF9leCgKLQkJCQkJCQkJCQkodi0+TWV0YVN1cmZh Y2VXaWR0aFkKLQkJCQkJCQkJCQkJCSogdi0+TWV0YVN1cmZhY2VIZWlnaHRZCi0JCQkJCQkJCQkJ CQkqIGRtbF9jZWlsX2V4KAotCQkJCQkJCQkJCQkJCQl2LT5CeXRlUGVyUGl4ZWxJbkRFVFlba10s Ci0JCQkJCQkJCQkJCQkJCTEpCi0JCQkJCQkJCQkJCQkvIDI1Ni4wCi0JCQkJCQkJCQkJCQktIDQw OTYpCi0JCQkJCQkJCQkJCQkvIDgKLQkJCQkJCQkJCQkJCS8gNDA5NiwKLQkJCQkJCQkJCQkxKSAr IDEpICogNjQ7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQl2LT5NZXRhUHRlQnl0ZXNQZXJGcmFtZVkg PSAwOwotCQkJCQl9Ci0JCQkJCWlmIChzcmMuc291cmNlX3NjYW4gPT0gZG1faG9yeikgewotCQkJ CQkJdi0+TWV0YVJvd0J5dGVzWSA9Ci0JCQkJCQkJCXYtPk1ldGFTdXJmYWNlV2lkdGhZCi0JCQkJ CQkJCQkJKiB2LT5NZXRhUmVxSGVpZ2h0WQotCQkJCQkJCQkJCSogZG1sX2NlaWxfZXgoCi0JCQkJ CQkJCQkJCQl2LT5CeXRlUGVyUGl4ZWxJbkRFVFlba10sCi0JCQkJCQkJCQkJCQkxKQotCQkJCQkJ CQkJCS8gMjU2OwotCQkJCQl9IGVsc2UgewotCQkJCQkJdi0+TWV0YVJvd0J5dGVzWSA9Ci0JCQkJ CQkJCXYtPk1ldGFTdXJmYWNlSGVpZ2h0WQotCQkJCQkJCQkJCSogdi0+TWV0YVJlcVdpZHRoWQot CQkJCQkJCQkJCSogZG1sX2NlaWxfZXgoCi0JCQkJCQkJCQkJCQl2LT5CeXRlUGVyUGl4ZWxJbkRF VFlba10sCi0JCQkJCQkJCQkJCQkxKQotCQkJCQkJCQkJCS8gMjU2OwotCQkJCQl9Ci0JCQkJfSBl bHNlIHsKLQkJCQkJdi0+TWV0YVB0ZUJ5dGVzUGVyRnJhbWVZID0gMDsKLQkJCQkJdi0+TWV0YVJv d0J5dGVzWSA9IDA7Ci0JCQkJfQotCi0JCQkJaWYgKGlwLT5wdGVfZW5hYmxlID09IDEpIHsKLQkJ CQkJaWYgKHNyYy5zd19tb2RlID09IGRtX3N3X2xpbmVhcikgewotCQkJCQkJdi0+TWFjcm9UaWxl QmxvY2tTaXplQnl0ZXNZID0gMjU2OwotCQkJCQkJdi0+TWFjcm9UaWxlQmxvY2tIZWlnaHRZID0g MTsKLQkJCQkJfSBlbHNlIGlmIChzcmMuc3dfbW9kZSA9PSBkbV9zd180a2JfcwotCQkJCQkJCXx8 IHNyYy5zd19tb2RlID09IGRtX3N3XzRrYl9zX3gKLQkJCQkJCQl8fCBzcmMuc3dfbW9kZSA9PSBk bV9zd180a2JfZAotCQkJCQkJCXx8IHNyYy5zd19tb2RlID09IGRtX3N3XzRrYl9kX3gpIHsKLQkJ CQkJCXYtPk1hY3JvVGlsZUJsb2NrU2l6ZUJ5dGVzWSA9IDQwOTY7Ci0JCQkJCQl2LT5NYWNyb1Rp bGVCbG9ja0hlaWdodFkgPSA0Ci0JCQkJCQkJCSogdi0+UmVhZDI1NkJsb2NrSGVpZ2h0WVtrXTsK LQkJCQkJfSBlbHNlIGlmIChzcmMuc3dfbW9kZSA9PSBkbV9zd182NGtiX3MKLQkJCQkJCQl8fCBz cmMuc3dfbW9kZSA9PSBkbV9zd182NGtiX3NfdAotCQkJCQkJCXx8IHNyYy5zd19tb2RlID09IGRt X3N3XzY0a2Jfc194Ci0JCQkJCQkJfHwgc3JjLnN3X21vZGUgPT0gZG1fc3dfNjRrYl9kCi0JCQkJ CQkJfHwgc3JjLnN3X21vZGUgPT0gZG1fc3dfNjRrYl9kX3QKLQkJCQkJCQl8fCBzcmMuc3dfbW9k ZSA9PSBkbV9zd182NGtiX2RfeCkgewotCQkJCQkJdi0+TWFjcm9UaWxlQmxvY2tTaXplQnl0ZXNZ ID0gNjQgKiAxMDI0OwotCQkJCQkJdi0+TWFjcm9UaWxlQmxvY2tIZWlnaHRZID0gMTYKLQkJCQkJ CQkJKiB2LT5SZWFkMjU2QmxvY2tIZWlnaHRZW2tdOwotCQkJCQl9IGVsc2UgewotCQkJCQkJdi0+ TWFjcm9UaWxlQmxvY2tTaXplQnl0ZXNZID0gMjU2ICogMTAyNDsKLQkJCQkJCXYtPk1hY3JvVGls ZUJsb2NrSGVpZ2h0WSA9IDMyCi0JCQkJCQkJCSogdi0+UmVhZDI1NkJsb2NrSGVpZ2h0WVtrXTsK LQkJCQkJfQotCQkJCQlpZiAodi0+TWFjcm9UaWxlQmxvY2tTaXplQnl0ZXNZIDw9IDY1NTM2KSB7 Ci0JCQkJCQl2LT5EYXRhUFRFUmVxSGVpZ2h0WSA9IHYtPk1hY3JvVGlsZUJsb2NrSGVpZ2h0WTsK LQkJCQkJfSBlbHNlIHsKLQkJCQkJCXYtPkRhdGFQVEVSZXFIZWlnaHRZID0gMTYKLQkJCQkJCQkJ KiB2LT5SZWFkMjU2QmxvY2tIZWlnaHRZW2tdOwotCQkJCQl9Ci0JCQkJCXYtPkRhdGFQVEVSZXFX aWR0aFkgPSA0MDk2Ci0JCQkJCQkJLyBkbWxfY2VpbF9leCh2LT5CeXRlUGVyUGl4ZWxJbkRFVFlb a10sIDEpCi0JCQkJCQkJLyB2LT5EYXRhUFRFUmVxSGVpZ2h0WSAqIDg7Ci0JCQkJCWlmIChzcmMu c3dfbW9kZSA9PSBkbV9zd19saW5lYXIpIHsKLQkJCQkJCXYtPkRQVEVCeXRlc1BlclJvd1kgPQot CQkJCQkJCQk2NAotCQkJCQkJCQkJCSogKGRtbF9jZWlsX2V4KAotCQkJCQkJCQkJCQkJKHNyYy52 aWV3cG9ydF93aWR0aAotCQkJCQkJCQkJCQkJCQkvIHYtPk5vT2ZEUFBbaWprXQotCQkJCQkJCQkJ CQkJCQkqIGRtbF9taW4oCi0JCQkJCQkJCQkJCQkJCQkJMTI4LAotCQkJCQkJCQkJCQkJCQkJCWRt bF9wb3coCi0JCQkJCQkJCQkJCQkJCQkJCQkyLAotCQkJCQkJCQkJCQkJCQkJCQkJZG1sX2Zsb29y X2V4KAotCQkJCQkJCQkJCQkJCQkJCQkJCQlkbWxfbG9nKAotCQkJCQkJCQkJCQkJCQkJCQkJCQkJ CWlwLT5kcHRlX2J1ZmZlcl9zaXplX2luX3B0ZV9yZXFzCi0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJ CQkqIHYtPkRhdGFQVEVSZXFXaWR0aFkKLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCS8gKHNyYy52 aWV3cG9ydF93aWR0aAotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkvIHYtPk5vT2ZEUFBbaWpr XSksCi0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJMiksCi0JCQkJCQkJCQkJCQkJCQkJCQkJCTEpKSkK LQkJCQkJCQkJCQkJCQkJLSAxKQotCQkJCQkJCQkJCQkJCQkvIHYtPkRhdGFQVEVSZXFXaWR0aFks Ci0JCQkJCQkJCQkJCQkxKQotCQkJCQkJCQkJCQkJKyAxKTsKLQkJCQkJfSBlbHNlIGlmIChzcmMu c291cmNlX3NjYW4gPT0gZG1faG9yeikgewotCQkJCQkJdi0+RFBURUJ5dGVzUGVyUm93WSA9Ci0J CQkJCQkJCTY0Ci0JCQkJCQkJCQkJKiAoZG1sX2NlaWxfZXgoCi0JCQkJCQkJCQkJCQkoc3JjLnZp ZXdwb3J0X3dpZHRoCi0JCQkJCQkJCQkJCQkJCS8gdi0+Tm9PZkRQUFtpamtdCi0JCQkJCQkJCQkJ CQkJCS0gMSkKLQkJCQkJCQkJCQkJCQkJLyB2LT5EYXRhUFRFUmVxV2lkdGhZLAotCQkJCQkJCQkJ CQkJMSkKLQkJCQkJCQkJCQkJCSsgMSk7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQl2LT5EUFRFQnl0 ZXNQZXJSb3dZID0KLQkJCQkJCQkJNjQKLQkJCQkJCQkJCQkqIChkbWxfY2VpbF9leCgKLQkJCQkJ CQkJCQkJCShzcmMudmlld3BvcnRfaGVpZ2h0Ci0JCQkJCQkJCQkJCQkJCS0gMSkKLQkJCQkJCQkJ CQkJCQkJLyB2LT5EYXRhUFRFUmVxSGVpZ2h0WSwKLQkJCQkJCQkJCQkJCTEpCi0JCQkJCQkJCQkJ CQkrIDEpOwotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJdi0+RFBURUJ5dGVzUGVyUm93WSA9 IDA7Ci0JCQkJfQotCi0JCQkJaWYgKHNyYy5zb3VyY2VfZm9ybWF0ICE9IGRtXzQ0NF82NCAmJiBz cmMuc291cmNlX2Zvcm1hdCAhPSBkbV80NDRfMzIKLQkJCQkJCSYmIHNyYy5zb3VyY2VfZm9ybWF0 ICE9IGRtXzQ0NF8xNikgewotCQkJCQlpZiAoc3JjLmRjYyA9PSAxKSB7Ci0JCQkJCQl2LT5NZXRh UmVxSGVpZ2h0QyA9IDggKiB2LT5SZWFkMjU2QmxvY2tIZWlnaHRDW2tdOwotCQkJCQkJdi0+TWV0 YVJlcVdpZHRoQyA9Ci0JCQkJCQkJCTY0ICogMjU2Ci0JCQkJCQkJCQkJLyBkbWxfY2VpbF9leCgK LQkJCQkJCQkJCQkJCXYtPkJ5dGVQZXJQaXhlbEluREVUQ1trXSwKLQkJCQkJCQkJCQkJCTIpCi0J CQkJCQkJCQkJLyB2LT5NZXRhUmVxSGVpZ2h0QzsKLQkJCQkJCXYtPk1ldGFTdXJmYWNlV2lkdGhD ID0gZG1sX2NlaWxfZXgoCi0JCQkJCQkJCXNyYy52aWV3cG9ydF93aWR0aCAvIHYtPk5vT2ZEUFBb aWprXQotCQkJCQkJCQkJCS8gMiAtIDEsCi0JCQkJCQkJCXYtPk1ldGFSZXFXaWR0aEMpCi0JCQkJ CQkJCSsgdi0+TWV0YVJlcVdpZHRoQzsKLQkJCQkJCXYtPk1ldGFTdXJmYWNlSGVpZ2h0QyA9IGRt bF9jZWlsX2V4KAotCQkJCQkJCQlzcmMudmlld3BvcnRfaGVpZ2h0IC8gMiAtIDEsCi0JCQkJCQkJ CXYtPk1ldGFSZXFIZWlnaHRDKQotCQkJCQkJCQkrIHYtPk1ldGFSZXFIZWlnaHRDOwotCQkJCQkJ aWYgKGlwLT5wdGVfZW5hYmxlID09IDEpIHsKLQkJCQkJCQl2LT5NZXRhUHRlQnl0ZXNQZXJGcmFt ZUMgPQotCQkJCQkJCQkJKGRtbF9jZWlsX2V4KAotCQkJCQkJCQkJCQkodi0+TWV0YVN1cmZhY2VX aWR0aEMKLQkJCQkJCQkJCQkJCQkqIHYtPk1ldGFTdXJmYWNlSGVpZ2h0QwotCQkJCQkJCQkJCQkJ CSogZG1sX2NlaWxfZXgoCi0JCQkJCQkJCQkJCQkJCQl2LT5CeXRlUGVyUGl4ZWxJbkRFVENba10s Ci0JCQkJCQkJCQkJCQkJCQkyKQotCQkJCQkJCQkJCQkJCS8gMjU2LjAKLQkJCQkJCQkJCQkJCQkt IDQwOTYpCi0JCQkJCQkJCQkJCQkJLyA4Ci0JCQkJCQkJCQkJCQkJLyA0MDk2LAotCQkJCQkJCQkJ CQkxKSArIDEpCi0JCQkJCQkJCQkJCSogNjQ7Ci0JCQkJCQl9IGVsc2UgewotCQkJCQkJCXYtPk1l dGFQdGVCeXRlc1BlckZyYW1lQyA9IDA7Ci0JCQkJCQl9Ci0JCQkJCQlpZiAoc3JjLnNvdXJjZV9z Y2FuID09IGRtX2hvcnopIHsKLQkJCQkJCQl2LT5NZXRhUm93Qnl0ZXNDID0KLQkJCQkJCQkJCXYt Pk1ldGFTdXJmYWNlV2lkdGhDCi0JCQkJCQkJCQkJCSogdi0+TWV0YVJlcUhlaWdodEMKLQkJCQkJ CQkJCQkJKiBkbWxfY2VpbF9leCgKLQkJCQkJCQkJCQkJCQl2LT5CeXRlUGVyUGl4ZWxJbkRFVENb a10sCi0JCQkJCQkJCQkJCQkJMikKLQkJCQkJCQkJCQkJLyAyNTY7Ci0JCQkJCQl9IGVsc2Ugewot CQkJCQkJCXYtPk1ldGFSb3dCeXRlc0MgPQotCQkJCQkJCQkJdi0+TWV0YVN1cmZhY2VIZWlnaHRD Ci0JCQkJCQkJCQkJCSogdi0+TWV0YVJlcVdpZHRoQwotCQkJCQkJCQkJCQkqIGRtbF9jZWlsX2V4 KAotCQkJCQkJCQkJCQkJCXYtPkJ5dGVQZXJQaXhlbEluREVUQ1trXSwKLQkJCQkJCQkJCQkJCQky KQotCQkJCQkJCQkJCQkvIDI1NjsKLQkJCQkJCX0KLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXYtPk1l dGFQdGVCeXRlc1BlckZyYW1lQyA9IDA7Ci0JCQkJCQl2LT5NZXRhUm93Qnl0ZXNDID0gMDsKLQkJ CQkJfQotCi0JCQkJCWlmIChpcC0+cHRlX2VuYWJsZSA9PSAxKSB7Ci0JCQkJCQlpZiAoc3JjLnN3 X21vZGUgPT0gZG1fc3dfbGluZWFyKSB7Ci0JCQkJCQkJdi0+TWFjcm9UaWxlQmxvY2tTaXplQnl0 ZXNDID0gMjU2OwotCQkJCQkJCXYtPk1hY3JvVGlsZUJsb2NrSGVpZ2h0QyA9IDE7Ci0JCQkJCQl9 IGVsc2UgaWYgKHNyYy5zd19tb2RlID09IGRtX3N3XzRrYl9zCi0JCQkJCQkJCXx8IHNyYy5zd19t b2RlID09IGRtX3N3XzRrYl9zX3gKLQkJCQkJCQkJfHwgc3JjLnN3X21vZGUgPT0gZG1fc3dfNGti X2QKLQkJCQkJCQkJfHwgc3JjLnN3X21vZGUgPT0gZG1fc3dfNGtiX2RfeCkgewotCQkJCQkJCXYt Pk1hY3JvVGlsZUJsb2NrU2l6ZUJ5dGVzQyA9IDQwOTY7Ci0JCQkJCQkJdi0+TWFjcm9UaWxlQmxv Y2tIZWlnaHRDID0gNAotCQkJCQkJCQkJKiB2LT5SZWFkMjU2QmxvY2tIZWlnaHRDW2tdOwotCQkJ CQkJfSBlbHNlIGlmIChzcmMuc3dfbW9kZSA9PSBkbV9zd182NGtiX3MKLQkJCQkJCQkJfHwgc3Jj LnN3X21vZGUgPT0gZG1fc3dfNjRrYl9zX3QKLQkJCQkJCQkJfHwgc3JjLnN3X21vZGUgPT0gZG1f c3dfNjRrYl9zX3gKLQkJCQkJCQkJfHwgc3JjLnN3X21vZGUgPT0gZG1fc3dfNjRrYl9kCi0JCQkJ CQkJCXx8IHNyYy5zd19tb2RlID09IGRtX3N3XzY0a2JfZF90Ci0JCQkJCQkJCXx8IHNyYy5zd19t b2RlID09IGRtX3N3XzY0a2JfZF94KSB7Ci0JCQkJCQkJdi0+TWFjcm9UaWxlQmxvY2tTaXplQnl0 ZXNDID0gNjQgKiAxMDI0OwotCQkJCQkJCXYtPk1hY3JvVGlsZUJsb2NrSGVpZ2h0QyA9IDE2Ci0J CQkJCQkJCQkqIHYtPlJlYWQyNTZCbG9ja0hlaWdodENba107Ci0JCQkJCQl9IGVsc2UgewotCQkJ CQkJCXYtPk1hY3JvVGlsZUJsb2NrU2l6ZUJ5dGVzQyA9IDI1NiAqIDEwMjQ7Ci0JCQkJCQkJdi0+ TWFjcm9UaWxlQmxvY2tIZWlnaHRDID0gMzIKLQkJCQkJCQkJCSogdi0+UmVhZDI1NkJsb2NrSGVp Z2h0Q1trXTsKLQkJCQkJCX0KLQkJCQkJCXYtPk1hY3JvVGlsZUJsb2NrV2lkdGhDID0KLQkJCQkJ CQkJdi0+TWFjcm9UaWxlQmxvY2tTaXplQnl0ZXNDCi0JCQkJCQkJCQkJLyBkbWxfY2VpbF9leCgK LQkJCQkJCQkJCQkJCXYtPkJ5dGVQZXJQaXhlbEluREVUQ1trXSwKLQkJCQkJCQkJCQkJCTIpCi0J CQkJCQkJCQkJLyB2LT5NYWNyb1RpbGVCbG9ja0hlaWdodEM7Ci0JCQkJCQlpZiAodi0+TWFjcm9U aWxlQmxvY2tTaXplQnl0ZXNDIDw9IDY1NTM2KSB7Ci0JCQkJCQkJdi0+RGF0YVBURVJlcUhlaWdo dEMgPQotCQkJCQkJCQkJdi0+TWFjcm9UaWxlQmxvY2tIZWlnaHRDOwotCQkJCQkJfSBlbHNlIHsK LQkJCQkJCQl2LT5EYXRhUFRFUmVxSGVpZ2h0QyA9IDE2Ci0JCQkJCQkJCQkqIHYtPlJlYWQyNTZC bG9ja0hlaWdodENba107Ci0JCQkJCQl9Ci0JCQkJCQl2LT5EYXRhUFRFUmVxV2lkdGhDID0KLQkJ CQkJCQkJNDA5NgotCQkJCQkJCQkJCS8gZG1sX2NlaWxfZXgoCi0JCQkJCQkJCQkJCQl2LT5CeXRl UGVyUGl4ZWxJbkRFVENba10sCi0JCQkJCQkJCQkJCQkyKQotCQkJCQkJCQkJCS8gdi0+RGF0YVBU RVJlcUhlaWdodEMKLQkJCQkJCQkJCQkqIDg7Ci0JCQkJCQlpZiAoc3JjLnN3X21vZGUgPT0gZG1f c3dfbGluZWFyKSB7Ci0JCQkJCQkJdi0+RFBURUJ5dGVzUGVyUm93QyA9Ci0JCQkJCQkJCQk2NAot CQkJCQkJCQkJCQkqIChkbWxfY2VpbF9leCgKLQkJCQkJCQkJCQkJCQkoc3JjLnZpZXdwb3J0X3dp ZHRoCi0JCQkJCQkJCQkJCQkJCQkvIHYtPk5vT2ZEUFBbaWprXQotCQkJCQkJCQkJCQkJCQkJLyAy Ci0JCQkJCQkJCQkJCQkJCQkqIGRtbF9taW4oCi0JCQkJCQkJCQkJCQkJCQkJCTEyOCwKLQkJCQkJ CQkJCQkJCQkJCQkJZG1sX3BvdygKLQkJCQkJCQkJCQkJCQkJCQkJCQkyLAotCQkJCQkJCQkJCQkJ CQkJCQkJCWRtbF9mbG9vcl9leCgKLQkJCQkJCQkJCQkJCQkJCQkJCQkJCWRtbF9sb2coCi0JCQkJ CQkJCQkJCQkJCQkJCQkJCQkJCWlwLT5kcHRlX2J1ZmZlcl9zaXplX2luX3B0ZV9yZXFzCi0JCQkJ CQkJCQkJCQkJCQkJCQkJCQkJCQkJKiB2LT5EYXRhUFRFUmVxV2lkdGhDCi0JCQkJCQkJCQkJCQkJ CQkJCQkJCQkJCQkJLyAoc3JjLnZpZXdwb3J0X3dpZHRoCi0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJ CQkJCQkvIHYtPk5vT2ZEUFBbaWprXQotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJLyAyKSwK LQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJMiksCi0JCQkJCQkJCQkJCQkJCQkJCQkJCQkxKSkpCi0J CQkJCQkJCQkJCQkJCQktIDEpCi0JCQkJCQkJCQkJCQkJCQkvIHYtPkRhdGFQVEVSZXFXaWR0aEMs Ci0JCQkJCQkJCQkJCQkJMSkKLQkJCQkJCQkJCQkJCQkrIDEpOwotCQkJCQkJfSBlbHNlIGlmIChz cmMuc291cmNlX3NjYW4gPT0gZG1faG9yeikgewotCQkJCQkJCXYtPkRQVEVCeXRlc1BlclJvd0Mg PQotCQkJCQkJCQkJNjQKLQkJCQkJCQkJCQkJKiAoZG1sX2NlaWxfZXgoCi0JCQkJCQkJCQkJCQkJ KHNyYy52aWV3cG9ydF93aWR0aAotCQkJCQkJCQkJCQkJCQkJLyB2LT5Ob09mRFBQW2lqa10KLQkJ CQkJCQkJCQkJCQkJCS8gMgotCQkJCQkJCQkJCQkJCQkJLSAxKQotCQkJCQkJCQkJCQkJCQkJLyB2 LT5EYXRhUFRFUmVxV2lkdGhDLAotCQkJCQkJCQkJCQkJCTEpCi0JCQkJCQkJCQkJCQkJKyAxKTsK LQkJCQkJCX0gZWxzZSB7Ci0JCQkJCQkJdi0+RFBURUJ5dGVzUGVyUm93QyA9Ci0JCQkJCQkJCQk2 NAotCQkJCQkJCQkJCQkqIChkbWxfY2VpbF9leCgKLQkJCQkJCQkJCQkJCQkoc3JjLnZpZXdwb3J0 X2hlaWdodAotCQkJCQkJCQkJCQkJCQkJLyAyCi0JCQkJCQkJCQkJCQkJCQktIDEpCi0JCQkJCQkJ CQkJCQkJCQkvIHYtPkRhdGFQVEVSZXFIZWlnaHRDLAotCQkJCQkJCQkJCQkJCTEpCi0JCQkJCQkJ CQkJCQkJKyAxKTsKLQkJCQkJCX0KLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXYtPkRQVEVCeXRlc1Bl clJvd0MgPSAwOwotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJdi0+RFBURUJ5dGVzUGVyUm93 QyA9IDA7Ci0JCQkJCXYtPk1ldGFQdGVCeXRlc1BlckZyYW1lQyA9IDA7Ci0JCQkJCXYtPk1ldGFS b3dCeXRlc0MgPSAwOwotCQkJCX0KLQotCQkJCXYtPkRQVEVCeXRlc1BlclJvd1trXSA9IHYtPkRQ VEVCeXRlc1BlclJvd1kgKyB2LT5EUFRFQnl0ZXNQZXJSb3dDOwotCQkJCXYtPk1ldGFQVEVCeXRl c1BlckZyYW1lW2tdID0gdi0+TWV0YVB0ZUJ5dGVzUGVyRnJhbWVZCi0JCQkJCQkrIHYtPk1ldGFQ dGVCeXRlc1BlckZyYW1lQzsKLQkJCQl2LT5NZXRhUm93Qnl0ZXNba10gPSB2LT5NZXRhUm93Qnl0 ZXNZICsgdi0+TWV0YVJvd0J5dGVzQzsKLQotCQkJCXYtPlZJbml0WSA9IChzY2FsZV9yYXRpb19k ZXB0aC52c2NsX3JhdGlvICsgc2NhbGVfdGFwcy52dGFwcyArIDEKLQkJCQkJCSsgZGVzdC5pbnRl cmxhY2VkICogMC41Ci0JCQkJCQkJCSogc2NhbGVfcmF0aW9fZGVwdGgudnNjbF9yYXRpbykKLQkJ CQkJCS8gMi4wOwotCQkJCXYtPlByZWZpbGxZW2tdID0gZG1sX2Zsb29yX2V4KHYtPlZJbml0WSwg MSk7Ci0JCQkJdi0+TWF4TnVtU3dZW2tdID0gZG1sX2NlaWxfZXgoCi0JCQkJCQkodi0+UHJlZmls bFlba10gLSAxLjApCi0JCQkJCQkJCS8gdi0+U3dhdGhIZWlnaHRZUGVyU3RhdGVbaWprXSwKLQkJ CQkJCTEpICsgMS4wOwotCi0JCQkJaWYgKHYtPlByZWZpbGxZW2tdID4gMSkgewotCQkJCQl2LT5N YXhQYXJ0aWFsU3dZID0gKChpbnQpICh2LT5QcmVmaWxsWVtrXSAtIDIpKQotCQkJCQkJCSUgKChp bnQpIHYtPlN3YXRoSGVpZ2h0WVBlclN0YXRlW2lqa10pOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXYt Pk1heFBhcnRpYWxTd1kgPSAoKGludCkgKHYtPlByZWZpbGxZW2tdCi0JCQkJCQkJKyB2LT5Td2F0 aEhlaWdodFlQZXJTdGF0ZVtpamtdIC0gMikpCi0JCQkJCQkJJSAoKGludCkgdi0+U3dhdGhIZWln aHRZUGVyU3RhdGVbaWprXSk7Ci0JCQkJfQotCQkJCXYtPk1heFBhcnRpYWxTd1kgPSBkbWxfbWF4 KDEsIHYtPk1heFBhcnRpYWxTd1kpOwotCi0JCQkJdi0+UHJlZmV0Y2hMaW5lc1lba10gPSB2LT5N YXhOdW1Td1lba10KLQkJCQkJCSogdi0+U3dhdGhIZWlnaHRZUGVyU3RhdGVbaWprXSArIHYtPk1h eFBhcnRpYWxTd1k7Ci0KLQkJCQlpZiAoc3JjLnNvdXJjZV9mb3JtYXQgIT0gZG1fNDQ0XzY0ICYm IHNyYy5zb3VyY2VfZm9ybWF0ICE9IGRtXzQ0NF8zMgotCQkJCQkJJiYgc3JjLnNvdXJjZV9mb3Jt YXQgIT0gZG1fNDQ0XzE2KSB7Ci0JCQkJCXYtPlZJbml0QyA9Ci0JCQkJCQkJKHNjYWxlX3JhdGlv X2RlcHRoLnZzY2xfcmF0aW8gLyAyCi0JCQkJCQkJCQkrIHNjYWxlX3RhcHMudnRhcHMgKyAxCi0J CQkJCQkJCQkrIGRlc3QuaW50ZXJsYWNlZCAqIDAuNQotCQkJCQkJCQkJCQkqIHNjYWxlX3JhdGlv X2RlcHRoLnZzY2xfcmF0aW8KLQkJCQkJCQkJCQkJLyAyKSAvIDIuMDsKLQkJCQkJdi0+UHJlZmls bENba10gPSBkbWxfZmxvb3JfZXgodi0+VkluaXRDLCAxKTsKLQkJCQkJdi0+TWF4TnVtU3dDW2td ID0KLQkJCQkJCQlkbWxfY2VpbF9leCgKLQkJCQkJCQkJCSh2LT5QcmVmaWxsQ1trXSAtIDEuMCkK LQkJCQkJCQkJCQkJLyB2LT5Td2F0aEhlaWdodENQZXJTdGF0ZVtpamtdLAotCQkJCQkJCQkJMSkg KyAxLjA7Ci0JCQkJCWlmICh2LT5QcmVmaWxsQ1trXSA+IDEpIHsKLQkJCQkJCXYtPk1heFBhcnRp YWxTd0MgPQotCQkJCQkJCQkoKGludCkgKHYtPlByZWZpbGxDW2tdIC0gMikpCi0JCQkJCQkJCQkJ JSAoKGludCkgdi0+U3dhdGhIZWlnaHRDUGVyU3RhdGVbaWprXSk7Ci0JCQkJCX0gZWxzZSB7Ci0J CQkJCQl2LT5NYXhQYXJ0aWFsU3dDID0KLQkJCQkJCQkJKChpbnQpICh2LT5QcmVmaWxsQ1trXQot CQkJCQkJCQkJCSsgdi0+U3dhdGhIZWlnaHRDUGVyU3RhdGVbaWprXQotCQkJCQkJCQkJCS0gMikp Ci0JCQkJCQkJCQkJJSAoKGludCkgdi0+U3dhdGhIZWlnaHRDUGVyU3RhdGVbaWprXSk7Ci0JCQkJ CX0KLQkJCQkJdi0+TWF4UGFydGlhbFN3QyA9IGRtbF9tYXgoMSwgdi0+TWF4UGFydGlhbFN3Qyk7 Ci0KLQkJCQkJdi0+UHJlZmV0Y2hMaW5lc0Nba10gPSB2LT5NYXhOdW1Td0Nba10KLQkJCQkJCQkq IHYtPlN3YXRoSGVpZ2h0Q1BlclN0YXRlW2lqa10KLQkJCQkJCQkrIHYtPk1heFBhcnRpYWxTd0M7 Ci0JCQkJfSBlbHNlIHsKLQkJCQkJdi0+UHJlZmV0Y2hMaW5lc0Nba10gPSAwOwotCQkJCX0KLQot CQkJCXYtPmRzdF94X2FmdGVyX3NjYWxlciA9IDkwICogZGVzdC5waXhlbF9yYXRlX21oegotCQkJ CQkJLyAodi0+UmVxdWlyZWRESVNQQ0xLW2lqXSAvIChqICsgMSkpCi0JCQkJCQkrIDQyICogZGVz dC5waXhlbF9yYXRlX21oeiAvIHYtPlJlcXVpcmVkRElTUENMS1tpal07Ci0JCQkJaWYgKHYtPk5v T2ZEUFBbaWprXSA+IDEpIHsKLQkJCQkJdi0+ZHN0X3hfYWZ0ZXJfc2NhbGVyID0gdi0+ZHN0X3hf YWZ0ZXJfc2NhbGVyCi0JCQkJCQkJKyBkZXN0LnJlY291dF93aWR0aCAvIDIuMDsKLQkJCQl9Ci0K LQkJCQlpZiAoZG91dC5vdXRwdXRfZm9ybWF0ID09IGRtXzQyMCkgewotCQkJCQl2LT5kc3RfeV9h ZnRlcl9zY2FsZXIgPSAxOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXYtPmRzdF95X2FmdGVyX3NjYWxl ciA9IDA7Ci0JCQkJfQotCi0JCQkJdi0+VGltZUNhbGMgPSAyNCAvIHYtPlByb2plY3RlZERDRkNM S0RlZXBTbGVlcDsKLQotCQkJCXYtPlZVcGRhdGVPZmZzZXQgPSBkbWxfY2VpbF9leChkZXN0Lmh0 b3RhbCAvIDQsIDEpOwotCQkJCXYtPlRvdGFsUmVwZWF0ZXJEZWxheSA9IGlwLT5tYXhfaW50ZXJf ZGNuX3RpbGVfcmVwZWF0ZXJzCi0JCQkJCQkqICgyIC8gKHYtPlJlcXVpcmVkRElTUENMS1tpal0g LyAoaiArIDEpKQotCQkJCQkJCQkrIDMgLyB2LT5SZXF1aXJlZERJU1BDTEtbaWpdKTsKLQkJCQl2 LT5WVXBkYXRlV2lkdGggPSAoMTQgLyB2LT5Qcm9qZWN0ZWREQ0ZDTEtEZWVwU2xlZXAKLQkJCQkJ CSsgMTIgLyAodi0+UmVxdWlyZWRESVNQQ0xLW2lqXSAvIChqICsgMSkpCi0JCQkJCQkrIHYtPlRv dGFsUmVwZWF0ZXJEZWxheSkgKiBkZXN0LnBpeGVsX3JhdGVfbWh6OwotCQkJCXYtPlZSZWFkeU9m ZnNldCA9Ci0JCQkJCQlkbWxfbWF4KAotCQkJCQkJCQkxNTAKLQkJCQkJCQkJCQkvICh2LT5SZXF1 aXJlZERJU1BDTEtbaWpdCi0JCQkJCQkJCQkJCQkvIChqCi0JCQkJCQkJCQkJCQkJCSsgMSkpLAot CQkJCQkJCQl2LT5Ub3RhbFJlcGVhdGVyRGVsYXkKLQkJCQkJCQkJCQkrIDIwCi0JCQkJCQkJCQkJ CQkvIHYtPlByb2plY3RlZERDRkNMS0RlZXBTbGVlcAotCQkJCQkJCQkJCSsgMTAKLQkJCQkJCQkJ CQkJCS8gKHYtPlJlcXVpcmVkRElTUENMS1tpal0KLQkJCQkJCQkJCQkJCQkJLyAoagotCQkJCQkJ CQkJCQkJCQkJCSsgMSkpKQotCQkJCQkJCQkqIGRlc3QucGl4ZWxfcmF0ZV9taHo7Ci0KLQkJCQl2 LT5UaW1lU2V0dXAgPQotCQkJCQkJKHYtPlZVcGRhdGVPZmZzZXQgKyB2LT5WVXBkYXRlV2lkdGgK LQkJCQkJCQkJKyB2LT5WUmVhZHlPZmZzZXQpCi0JCQkJCQkJCS8gZGVzdC5waXhlbF9yYXRlX21o ejsKLQotCQkJCXYtPkV4dHJhTGF0ZW5jeSA9Ci0JCQkJCQl2LT5VcmdlbnRSb3VuZFRyaXBBbmRP dXRPZk9yZGVyTGF0ZW5jeVBlclN0YXRlW2ldCi0JCQkJCQkJCSsgKHYtPlRvdGFsTnVtYmVyT2ZB Y3RpdmVEUFBbaWpdCi0JCQkJCQkJCQkJKiBpcC0+cGl4ZWxfY2h1bmtfc2l6ZV9rYnl0ZXMKLQkJ CQkJCQkJCQkrIHYtPlRvdGFsTnVtYmVyT2ZEQ0NBY3RpdmVEUFBbaWpdCi0JCQkJCQkJCQkJCQkq IGlwLT5tZXRhX2NodW5rX3NpemVfa2J5dGVzKQotCQkJCQkJCQkJCSogMTAyNAotCQkJCQkJCQkJ CS8gdi0+UmV0dXJuQldQZXJTdGF0ZVtpXTsKLQotCQkJCWlmIChpcC0+cHRlX2VuYWJsZSA9PSAx KSB7Ci0JCQkJCXYtPkV4dHJhTGF0ZW5jeSA9IHYtPkV4dHJhTGF0ZW5jeQotCQkJCQkJCSsgdi0+ VG90YWxOdW1iZXJPZkFjdGl2ZURQUFtpal0KLQkJCQkJCQkJCSogaXAtPnB0ZV9jaHVua19zaXpl X2tieXRlcwotCQkJCQkJCQkJKiAxMDI0Ci0JCQkJCQkJCQkvIHYtPlJldHVybkJXUGVyU3RhdGVb aV07Ci0JCQkJfQotCi0JCQkJaWYgKGlwLT5jYW5fdnN0YXJ0dXBfbGluZXNfZXhjZWVkX3ZzeW5j X3BsdXNfYmFja19wb3JjaF9saW5lc19taW51c19vbmUKLQkJCQkJCT09IDEpIHsKLQkJCQkJdi0+ TWF4aW11bVZTdGFydHVwID0gZGVzdC52dG90YWwgLSBkZXN0LnZhY3RpdmUgLSAxOwotCQkJCX0g ZWxzZSB7Ci0JCQkJCXYtPk1heGltdW1WU3RhcnR1cCA9IGRlc3QudnN5bmNfcGx1c19iYWNrX3Bv cmNoIC0gMTsKLQkJCQl9Ci0KLQkJCQl2LT5MaW5lVGltZXNGb3JQcmVmZXRjaFtrXSA9Ci0JCQkJ CQl2LT5NYXhpbXVtVlN0YXJ0dXAKLQkJCQkJCQkJLSBzb2MtPnVyZ2VudF9sYXRlbmN5X3VzCi0J CQkJCQkJCQkJLyAoZGVzdC5odG90YWwKLQkJCQkJCQkJCQkJCS8gZGVzdC5waXhlbF9yYXRlX21o eikKLQkJCQkJCQkJLSAodi0+VGltZUNhbGMgKyB2LT5UaW1lU2V0dXApCi0JCQkJCQkJCQkJLyAo ZGVzdC5odG90YWwKLQkJCQkJCQkJCQkJCS8gZGVzdC5waXhlbF9yYXRlX21oeikKLQkJCQkJCQkJ LSAodi0+ZHN0X3lfYWZ0ZXJfc2NhbGVyCi0JCQkJCQkJCQkJKyB2LT5kc3RfeF9hZnRlcl9zY2Fs ZXIKLQkJCQkJCQkJCQkJCS8gZGVzdC5odG90YWwpOwotCi0JCQkJdi0+TGluZVRpbWVzRm9yUHJl ZmV0Y2hba10gPSBkbWxfZmxvb3JfZXgoCi0JCQkJCQk0LjAgKiAodi0+TGluZVRpbWVzRm9yUHJl ZmV0Y2hba10gKyAwLjEyNSksCi0JCQkJCQkxKSAvIDQ7Ci0KLQkJCQl2LT5QcmVmZXRjaEJXW2td ID0KLQkJCQkJCSh2LT5NZXRhUFRFQnl0ZXNQZXJGcmFtZVtrXSArIDIgKiB2LT5NZXRhUm93Qnl0 ZXNba10KLQkJCQkJCQkJKyAyICogdi0+RFBURUJ5dGVzUGVyUm93W2tdCi0JCQkJCQkJCSsgdi0+ UHJlZmV0Y2hMaW5lc1lba10KLQkJCQkJCQkJCQkqIHYtPlN3YXRoV2lkdGhZUGVyU3RhdGVbaWpr XQotCQkJCQkJCQkJCSogZG1sX2NlaWxfZXgoCi0JCQkJCQkJCQkJCQl2LT5CeXRlUGVyUGl4ZWxJ bkRFVFlba10sCi0JCQkJCQkJCQkJCQkxKQotCQkJCQkJCQkrIHYtPlByZWZldGNoTGluZXNDW2td Ci0JCQkJCQkJCQkJKiB2LT5Td2F0aFdpZHRoWVBlclN0YXRlW2lqa10KLQkJCQkJCQkJCQkvIDIK LQkJCQkJCQkJCQkqIGRtbF9jZWlsX2V4KAotCQkJCQkJCQkJCQkJdi0+Qnl0ZVBlclBpeGVsSW5E RVRDW2tdLAotCQkJCQkJCQkJCQkJMikpCi0JCQkJCQkJCS8gKHYtPkxpbmVUaW1lc0ZvclByZWZl dGNoW2tdCi0JCQkJCQkJCQkJKiBkZXN0Lmh0b3RhbAotCQkJCQkJCQkJCS8gZGVzdC5waXhlbF9y YXRlX21oeik7Ci0JCQl9Ci0KLQkJCXYtPkJXQXZhaWxhYmxlRm9ySW1tZWRpYXRlRmxpcCA9IHYt PlJldHVybkJXUGVyU3RhdGVbaV07Ci0KLQkJCWZvciAoayA9IDA7IGsgPCBudW1fcGxhbmVzOyBr KyspIHsKLQkJCQl2LT5CV0F2YWlsYWJsZUZvckltbWVkaWF0ZUZsaXAgPSB2LT5CV0F2YWlsYWJs ZUZvckltbWVkaWF0ZUZsaXAKLQkJCQkJCS0gZG1sX21heCh2LT5SZWFkQmFuZHdpZHRoW2tdLCB2 LT5QcmVmZXRjaEJXW2tdKTsKLQkJCX0KLQotCQkJdi0+VG90YWxJbW1lZGlhdGVGbGlwQnl0ZXMg PSAwOwotCi0JCQlmb3IgKGsgPSAwOyBrIDwgbnVtX3BsYW5lczsgaysrKSB7Ci0JCQkJc3RydWN0 IF92Y3NfZHBpX2Rpc3BsYXlfcGlwZV9zb3VyY2VfcGFyYW1zX3N0IHNyYyA9Ci0JCQkJCQllMmVb di0+cGxhbmVzW2tdLmUyZV9pbmRleF0ucGlwZS5zcmM7Ci0KLQkJCQlpZiAoc3JjLnNvdXJjZV9m b3JtYXQgIT0gZG1fNDIwXzgKLQkJCQkJCSYmIHNyYy5zb3VyY2VfZm9ybWF0ICE9IGRtXzQyMF8x MCkgewotCQkJCQl2LT5Ub3RhbEltbWVkaWF0ZUZsaXBCeXRlcyA9IHYtPlRvdGFsSW1tZWRpYXRl RmxpcEJ5dGVzCi0JCQkJCQkJKyB2LT5NZXRhUFRFQnl0ZXNQZXJGcmFtZVtrXQotCQkJCQkJCSsg di0+TWV0YVJvd0J5dGVzW2tdCi0JCQkJCQkJKyB2LT5EUFRFQnl0ZXNQZXJSb3dba107Ci0JCQkJ fQotCQkJfQotCi0JCQlmb3IgKGsgPSAwOyBrIDwgbnVtX3BsYW5lczsgaysrKSB7Ci0JCQkJc3Ry dWN0IF92Y3NfZHBpX2Rpc3BsYXlfcGlwZV9zb3VyY2VfcGFyYW1zX3N0IHNyYyA9Ci0JCQkJCQll MmVbdi0+cGxhbmVzW2tdLmUyZV9pbmRleF0ucGlwZS5zcmM7Ci0JCQkJc3RydWN0IF92Y3NfZHBp X2Rpc3BsYXlfcGlwZV9kZXN0X3BhcmFtc19zdCBkZXN0ID0KLQkJCQkJCWUyZVt2LT5wbGFuZXNb a10uZTJlX2luZGV4XS5waXBlLmRlc3Q7Ci0JCQkJaWprID0gayAqIDIgKiBOdW1iZXJPZlN0YXRl c1BsdXNUd28gKyBqICogTnVtYmVyT2ZTdGF0ZXNQbHVzVHdvICsgaTsKLQotCQkJCWlmIChpcC0+ cHRlX2VuYWJsZSA9PSAxICYmIHNyYy5kY2MgPT0gMSkgewotCQkJCQl2LT5UaW1lRm9yTWV0YVBU RVdpdGhJbW1lZGlhdGVGbGlwID0KLQkJCQkJCQlkbWxfbWF4KAotCQkJCQkJCQkJdi0+TWV0YVBU RUJ5dGVzUGVyRnJhbWVba10KLQkJCQkJCQkJCQkJLyB2LT5QcmVmZXRjaEJXW2tdLAotCQkJCQkJ CQkJZG1sX21heCgKLQkJCQkJCQkJCQkJdi0+TWV0YVBURUJ5dGVzUGVyRnJhbWVba10KLQkJCQkJ CQkJCQkJCQkqIHYtPlRvdGFsSW1tZWRpYXRlRmxpcEJ5dGVzCi0JCQkJCQkJCQkJCQkJLyAodi0+ QldBdmFpbGFibGVGb3JJbW1lZGlhdGVGbGlwCi0JCQkJCQkJCQkJCQkJCQkqICh2LT5NZXRhUFRF Qnl0ZXNQZXJGcmFtZVtrXQotCQkJCQkJCQkJCQkJCQkJCQkrIHYtPk1ldGFSb3dCeXRlc1trXQot CQkJCQkJCQkJCQkJCQkJCQkrIHYtPkRQVEVCeXRlc1BlclJvd1trXSkpLAotCQkJCQkJCQkJCQlk bWxfbWF4KAotCQkJCQkJCQkJCQkJCXYtPkV4dHJhTGF0ZW5jeSwKLQkJCQkJCQkJCQkJCQlkbWxf bWF4KAotCQkJCQkJCQkJCQkJCQkJc29jLT51cmdlbnRfbGF0ZW5jeV91cywKLQkJCQkJCQkJCQkJ CQkJCWRlc3QuaHRvdGFsCi0JCQkJCQkJCQkJCQkJCQkJCS8gZGVzdC5waXhlbF9yYXRlX21oegot CQkJCQkJCQkJCQkJCQkJCQkvIDQpKSkpOwotCi0JCQkJCXYtPlRpbWVGb3JNZXRhUFRFV2l0aG91 dEltbWVkaWF0ZUZsaXAgPQotCQkJCQkJCWRtbF9tYXgoCi0JCQkJCQkJCQl2LT5NZXRhUFRFQnl0 ZXNQZXJGcmFtZVtrXQotCQkJCQkJCQkJCQkvIHYtPlByZWZldGNoQldba10sCi0JCQkJCQkJCQlk bWxfbWF4KAotCQkJCQkJCQkJCQl2LT5FeHRyYUxhdGVuY3ksCi0JCQkJCQkJCQkJCWRlc3QuaHRv dGFsCi0JCQkJCQkJCQkJCQkJLyBkZXN0LnBpeGVsX3JhdGVfbWh6Ci0JCQkJCQkJCQkJCQkJLyA0 KSk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJdi0+VGltZUZvck1ldGFQVEVXaXRoSW1tZWRpYXRlRmxp cCA9IGRlc3QuaHRvdGFsCi0JCQkJCQkJLyBkZXN0LnBpeGVsX3JhdGVfbWh6IC8gNDsKLQkJCQkJ di0+VGltZUZvck1ldGFQVEVXaXRob3V0SW1tZWRpYXRlRmxpcCA9IGRlc3QuaHRvdGFsCi0JCQkJ CQkJLyBkZXN0LnBpeGVsX3JhdGVfbWh6IC8gNDsKLQkJCQl9Ci0KLQkJCQlpZiAoaXAtPnB0ZV9l bmFibGUgPT0gMSB8fCBzcmMuZGNjID09IDEpIHsKLQkJCQkJdi0+VGltZUZvck1ldGFBbmREUFRF Um93V2l0aEltbWVkaWF0ZUZsaXAgPQotCQkJCQkJCWRtbF9tYXgoCi0JCQkJCQkJCQkodi0+TWV0 YVJvd0J5dGVzW2tdCi0JCQkJCQkJCQkJCSsgdi0+RFBURUJ5dGVzUGVyUm93W2tdKQotCQkJCQkJ CQkJCQkvIHYtPlByZWZldGNoQldba10sCi0JCQkJCQkJCQlkbWxfbWF4KAotCQkJCQkJCQkJCQko di0+TWV0YVJvd0J5dGVzW2tdCi0JCQkJCQkJCQkJCQkJKyB2LT5EUFRFQnl0ZXNQZXJSb3dba10p Ci0JCQkJCQkJCQkJCQkJKiB2LT5Ub3RhbEltbWVkaWF0ZUZsaXBCeXRlcwotCQkJCQkJCQkJCQkJ CS8gKHYtPkJXQXZhaWxhYmxlRm9ySW1tZWRpYXRlRmxpcAotCQkJCQkJCQkJCQkJCQkJKiAodi0+ TWV0YVBURUJ5dGVzUGVyRnJhbWVba10KLQkJCQkJCQkJCQkJCQkJCQkJKyB2LT5NZXRhUm93Qnl0 ZXNba10KLQkJCQkJCQkJCQkJCQkJCQkJKyB2LT5EUFRFQnl0ZXNQZXJSb3dba10pKSwKLQkJCQkJ CQkJCQkJZG1sX21heCgKLQkJCQkJCQkJCQkJCQlkZXN0Lmh0b3RhbAotCQkJCQkJCQkJCQkJCQkJ LyBkZXN0LnBpeGVsX3JhdGVfbWh6Ci0JCQkJCQkJCQkJCQkJCQktIHYtPlRpbWVGb3JNZXRhUFRF V2l0aEltbWVkaWF0ZUZsaXAsCi0JCQkJCQkJCQkJCQkJZG1sX21heCgKLQkJCQkJCQkJCQkJCQkJ CXYtPkV4dHJhTGF0ZW5jeSwKLQkJCQkJCQkJCQkJCQkJCTIKLQkJCQkJCQkJCQkJCQkJCQkJKiBz b2MtPnVyZ2VudF9sYXRlbmN5X3VzKSkpKTsKLQotCQkJCQl2LT5UaW1lRm9yTWV0YUFuZERQVEVS b3dXaXRob3V0SW1tZWRpYXRlRmxpcCA9Ci0JCQkJCQkJZG1sX21heCgKLQkJCQkJCQkJCSh2LT5N ZXRhUm93Qnl0ZXNba10KLQkJCQkJCQkJCQkJKyB2LT5EUFRFQnl0ZXNQZXJSb3dba10pCi0JCQkJ CQkJCQkJCS8gdi0+UHJlZmV0Y2hCV1trXSwKLQkJCQkJCQkJCWRtbF9tYXgoCi0JCQkJCQkJCQkJ CWRlc3QuaHRvdGFsCi0JCQkJCQkJCQkJCQkJLyBkZXN0LnBpeGVsX3JhdGVfbWh6Ci0JCQkJCQkJ CQkJCQkJLSB2LT5UaW1lRm9yTWV0YVBURVdpdGhvdXRJbW1lZGlhdGVGbGlwLAotCQkJCQkJCQkJ CQl2LT5FeHRyYUxhdGVuY3kpKTsKLQkJCQl9IGVsc2UgewotCQkJCQl2LT5UaW1lRm9yTWV0YUFu ZERQVEVSb3dXaXRoSW1tZWRpYXRlRmxpcCA9Ci0JCQkJCQkJZG1sX21heCgKLQkJCQkJCQkJCWRl c3QuaHRvdGFsCi0JCQkJCQkJCQkJCS8gZGVzdC5waXhlbF9yYXRlX21oegotCQkJCQkJCQkJCQkt IHYtPlRpbWVGb3JNZXRhUFRFV2l0aEltbWVkaWF0ZUZsaXAsCi0JCQkJCQkJCQl2LT5FeHRyYUxh dGVuY3kKLQkJCQkJCQkJCQkJLSB2LT5UaW1lRm9yTWV0YVBURVdpdGhJbW1lZGlhdGVGbGlwKTsK LQkJCQkJdi0+VGltZUZvck1ldGFBbmREUFRFUm93V2l0aG91dEltbWVkaWF0ZUZsaXAgPQotCQkJ CQkJCWRtbF9tYXgoCi0JCQkJCQkJCQlkZXN0Lmh0b3RhbAotCQkJCQkJCQkJCQkvIGRlc3QucGl4 ZWxfcmF0ZV9taHoKLQkJCQkJCQkJCQkJLSB2LT5UaW1lRm9yTWV0YVBURVdpdGhvdXRJbW1lZGlh dGVGbGlwLAotCQkJCQkJCQkJdi0+RXh0cmFMYXRlbmN5Ci0JCQkJCQkJCQkJCS0gdi0+VGltZUZv ck1ldGFQVEVXaXRob3V0SW1tZWRpYXRlRmxpcCk7Ci0JCQkJfQotCi0JCQkJdi0+TGluZXNGb3JN ZXRhUFRFV2l0aEltbWVkaWF0ZUZsaXBba10gPQotCQkJCQkJZG1sX2Zsb29yX2V4KAotCQkJCQkJ CQk0LjAKLQkJCQkJCQkJCQkqICh2LT5UaW1lRm9yTWV0YVBURVdpdGhJbW1lZGlhdGVGbGlwCi0J CQkJCQkJCQkJCQkvIChkZXN0Lmh0b3RhbAotCQkJCQkJCQkJCQkJCQkvIGRlc3QucGl4ZWxfcmF0 ZV9taHopCi0JCQkJCQkJCQkJCQkrIDAuMTI1KSwKLQkJCQkJCQkJMSkgLyA0LjA7Ci0KLQkJCQl2 LT5MaW5lc0Zvck1ldGFQVEVXaXRob3V0SW1tZWRpYXRlRmxpcFtrXSA9Ci0JCQkJCQlkbWxfZmxv b3JfZXgoCi0JCQkJCQkJCTQuMAotCQkJCQkJCQkJCSogKHYtPlRpbWVGb3JNZXRhUFRFV2l0aG91 dEltbWVkaWF0ZUZsaXAKLQkJCQkJCQkJCQkJCS8gKGRlc3QuaHRvdGFsCi0JCQkJCQkJCQkJCQkJ CS8gZGVzdC5waXhlbF9yYXRlX21oeikKLQkJCQkJCQkJCQkJCSsgMC4xMjUpLAotCQkJCQkJCQkx KSAvIDQuMDsKLQotCQkJCXYtPkxpbmVzRm9yTWV0YUFuZERQVEVSb3dXaXRoSW1tZWRpYXRlRmxp cFtrXSA9Ci0JCQkJCQlkbWxfZmxvb3JfZXgoCi0JCQkJCQkJCTQuMAotCQkJCQkJCQkJCSogKHYt PlRpbWVGb3JNZXRhQW5kRFBURVJvd1dpdGhJbW1lZGlhdGVGbGlwCi0JCQkJCQkJCQkJCQkvIChk ZXN0Lmh0b3RhbAotCQkJCQkJCQkJCQkJCQkvIGRlc3QucGl4ZWxfcmF0ZV9taHopCi0JCQkJCQkJ CQkJCQkrIDAuMTI1KSwKLQkJCQkJCQkJMSkgLyA0LjA7Ci0KLQkJCQl2LT5MaW5lc0Zvck1ldGFB bmREUFRFUm93V2l0aG91dEltbWVkaWF0ZUZsaXBba10gPQotCQkJCQkJZG1sX2Zsb29yX2V4KAot CQkJCQkJCQk0LjAKLQkJCQkJCQkJCQkqICh2LT5UaW1lRm9yTWV0YUFuZERQVEVSb3dXaXRob3V0 SW1tZWRpYXRlRmxpcAotCQkJCQkJCQkJCQkJLyAoZGVzdC5odG90YWwKLQkJCQkJCQkJCQkJCQkJ LyBkZXN0LnBpeGVsX3JhdGVfbWh6KQotCQkJCQkJCQkJCQkJKyAwLjEyNSksCi0JCQkJCQkJCTEp IC8gNC4wOwotCi0JCQkJdi0+TGluZVRpbWVzVG9SZXF1ZXN0UHJlZmV0Y2hQaXhlbERhdGFXaXRo SW1tZWRpYXRlRmxpcCA9Ci0JCQkJCQl2LT5MaW5lVGltZXNGb3JQcmVmZXRjaFtrXQotCQkJCQkJ CQktIHYtPkxpbmVzRm9yTWV0YVBURVdpdGhJbW1lZGlhdGVGbGlwW2tdCi0JCQkJCQkJCS0gdi0+ TGluZXNGb3JNZXRhQW5kRFBURVJvd1dpdGhJbW1lZGlhdGVGbGlwW2tdOwotCi0JCQkJdi0+TGlu ZVRpbWVzVG9SZXF1ZXN0UHJlZmV0Y2hQaXhlbERhdGFXaXRob3V0SW1tZWRpYXRlRmxpcCA9Ci0J CQkJCQl2LT5MaW5lVGltZXNGb3JQcmVmZXRjaFtrXQotCQkJCQkJCQktIHYtPkxpbmVzRm9yTWV0 YVBURVdpdGhvdXRJbW1lZGlhdGVGbGlwW2tdCi0JCQkJCQkJCS0gdi0+TGluZXNGb3JNZXRhQW5k RFBURVJvd1dpdGhvdXRJbW1lZGlhdGVGbGlwW2tdOwotCi0JCQkJaWYgKHYtPkxpbmVUaW1lc1Rv UmVxdWVzdFByZWZldGNoUGl4ZWxEYXRhV2l0aEltbWVkaWF0ZUZsaXAgPiAwKSB7Ci0JCQkJCXYt PlZSYXRpb1ByZVlXaXRoSW1tZWRpYXRlRmxpcFtpamtdID0KLQkJCQkJCQl2LT5QcmVmZXRjaExp bmVzWVtrXQotCQkJCQkJCQkJLyB2LT5MaW5lVGltZXNUb1JlcXVlc3RQcmVmZXRjaFBpeGVsRGF0 YVdpdGhJbW1lZGlhdGVGbGlwOwotCQkJCQlpZiAodi0+U3dhdGhIZWlnaHRZUGVyU3RhdGVbaWpr XSA+IDQpIHsKLQkJCQkJCWlmICh2LT5MaW5lVGltZXNUb1JlcXVlc3RQcmVmZXRjaFBpeGVsRGF0 YVdpdGhJbW1lZGlhdGVGbGlwCi0JCQkJCQkJCS0gKHYtPlByZWZpbGxZW2tdIC0gMy4wKSAvIDIu MAotCQkJCQkJCQk+IDApIHsKLQkJCQkJCQl2LT5WUmF0aW9QcmVZV2l0aEltbWVkaWF0ZUZsaXBb aWprXSA9Ci0JCQkJCQkJCQlkbWxfbWF4KAotCQkJCQkJCQkJCQl2LT5WUmF0aW9QcmVZV2l0aElt bWVkaWF0ZUZsaXBbaWprXSwKLQkJCQkJCQkJCQkJKHYtPk1heE51bVN3WVtrXQotCQkJCQkJCQkJ CQkJCSogdi0+U3dhdGhIZWlnaHRZUGVyU3RhdGVbaWprXSkKLQkJCQkJCQkJCQkJCQkvICh2LT5M aW5lVGltZXNUb1JlcXVlc3RQcmVmZXRjaFBpeGVsRGF0YVdpdGhJbW1lZGlhdGVGbGlwCi0JCQkJ CQkJCQkJCQkJCQktICh2LT5QcmVmaWxsWVtrXQotCQkJCQkJCQkJCQkJCQkJCQktIDMuMCkKLQkJ CQkJCQkJCQkJCQkJCQkJLyAyLjApKTsKLQkJCQkJCX0gZWxzZSB7Ci0JCQkJCQkJdi0+VlJhdGlv UHJlWVdpdGhJbW1lZGlhdGVGbGlwW2lqa10gPQotCQkJCQkJCQkJOTk5OTk5OwotCQkJCQkJfQot CQkJCQl9Ci0JCQkJCXYtPlZSYXRpb1ByZUNXaXRoSW1tZWRpYXRlRmxpcFtpamtdID0KLQkJCQkJ CQl2LT5QcmVmZXRjaExpbmVzQ1trXQotCQkJCQkJCQkJLyB2LT5MaW5lVGltZXNUb1JlcXVlc3RQ cmVmZXRjaFBpeGVsRGF0YVdpdGhJbW1lZGlhdGVGbGlwOwotCQkJCQlpZiAodi0+U3dhdGhIZWln aHRDUGVyU3RhdGVbaWprXSA+IDQpIHsKLQkJCQkJCWlmICh2LT5MaW5lVGltZXNUb1JlcXVlc3RQ cmVmZXRjaFBpeGVsRGF0YVdpdGhJbW1lZGlhdGVGbGlwCi0JCQkJCQkJCS0gKHYtPlByZWZpbGxD W2tdIC0gMy4wKSAvIDIuMAotCQkJCQkJCQk+IDApIHsKLQkJCQkJCQl2LT5WUmF0aW9QcmVDV2l0 aEltbWVkaWF0ZUZsaXBbaWprXSA9Ci0JCQkJCQkJCQlkbWxfbWF4KAotCQkJCQkJCQkJCQl2LT5W UmF0aW9QcmVDV2l0aEltbWVkaWF0ZUZsaXBbaWprXSwKLQkJCQkJCQkJCQkJKHYtPk1heE51bVN3 Q1trXQotCQkJCQkJCQkJCQkJCSogdi0+U3dhdGhIZWlnaHRDUGVyU3RhdGVbaWprXSkKLQkJCQkJ CQkJCQkJCQkvICh2LT5MaW5lVGltZXNUb1JlcXVlc3RQcmVmZXRjaFBpeGVsRGF0YVdpdGhJbW1l ZGlhdGVGbGlwCi0JCQkJCQkJCQkJCQkJCQktICh2LT5QcmVmaWxsQ1trXQotCQkJCQkJCQkJCQkJ CQkJCQktIDMuMCkKLQkJCQkJCQkJCQkJCQkJCQkJLyAyLjApKTsKLQkJCQkJCX0gZWxzZSB7Ci0J CQkJCQkJdi0+VlJhdGlvUHJlQ1dpdGhJbW1lZGlhdGVGbGlwW2lqa10gPQotCQkJCQkJCQkJOTk5 OTk5OwotCQkJCQkJfQotCQkJCQl9Ci0KLQkJCQkJdi0+UmVxdWlyZWRQcmVmZXRjaFBpeGVsRGF0 YUJXV2l0aEltbWVkaWF0ZUZsaXBbaWprXSA9Ci0JCQkJCQkJdi0+Tm9PZkRQUFtpamtdCi0JCQkJ CQkJCQkqICh2LT5QcmVmZXRjaExpbmVzWVtrXQotCQkJCQkJCQkJCQkvIHYtPkxpbmVUaW1lc1Rv UmVxdWVzdFByZWZldGNoUGl4ZWxEYXRhV2l0aEltbWVkaWF0ZUZsaXAKLQkJCQkJCQkJCQkJKiBk bWxfY2VpbF9leCgKLQkJCQkJCQkJCQkJCQl2LT5CeXRlUGVyUGl4ZWxJbkRFVFlba10sCi0JCQkJ CQkJCQkJCQkJMSkKLQkJCQkJCQkJCQkJKyB2LT5QcmVmZXRjaExpbmVzQ1trXQotCQkJCQkJCQkJ CQkJCS8gdi0+TGluZVRpbWVzVG9SZXF1ZXN0UHJlZmV0Y2hQaXhlbERhdGFXaXRoSW1tZWRpYXRl RmxpcAotCQkJCQkJCQkJCQkJCSogZG1sX2NlaWxfZXgoCi0JCQkJCQkJCQkJCQkJCQl2LT5CeXRl UGVyUGl4ZWxJbkRFVENba10sCi0JCQkJCQkJCQkJCQkJCQkyKQotCQkJCQkJCQkJCQkJCS8gMikK LQkJCQkJCQkJCSogdi0+U3dhdGhXaWR0aFlQZXJTdGF0ZVtpamtdCi0JCQkJCQkJCQkvIChkZXN0 Lmh0b3RhbAotCQkJCQkJCQkJCQkvIGRlc3QucGl4ZWxfcmF0ZV9taHopOwotCQkJCX0gZWxzZSB7 Ci0JCQkJCXYtPlZSYXRpb1ByZVlXaXRoSW1tZWRpYXRlRmxpcFtpamtdID0gOTk5OTk5OwotCQkJ CQl2LT5WUmF0aW9QcmVDV2l0aEltbWVkaWF0ZUZsaXBbaWprXSA9IDk5OTk5OTsKLQkJCQkJdi0+ UmVxdWlyZWRQcmVmZXRjaFBpeGVsRGF0YUJXV2l0aEltbWVkaWF0ZUZsaXBbaWprXSA9Ci0JCQkJ CQkJOTk5OTk5OwotCQkJCX0KLQotCQkJCWlmICh2LT5MaW5lVGltZXNUb1JlcXVlc3RQcmVmZXRj aFBpeGVsRGF0YVdpdGhvdXRJbW1lZGlhdGVGbGlwCi0JCQkJCQk+IDApIHsKLQkJCQkJdi0+VlJh dGlvUHJlWVdpdGhvdXRJbW1lZGlhdGVGbGlwW2lqa10gPQotCQkJCQkJCXYtPlByZWZldGNoTGlu ZXNZW2tdCi0JCQkJCQkJCQkvIHYtPkxpbmVUaW1lc1RvUmVxdWVzdFByZWZldGNoUGl4ZWxEYXRh V2l0aG91dEltbWVkaWF0ZUZsaXA7Ci0JCQkJCWlmICh2LT5Td2F0aEhlaWdodFlQZXJTdGF0ZVtp amtdID4gNCkgewotCQkJCQkJaWYgKHYtPkxpbmVUaW1lc1RvUmVxdWVzdFByZWZldGNoUGl4ZWxE YXRhV2l0aG91dEltbWVkaWF0ZUZsaXAKLQkJCQkJCQkJLSAodi0+UHJlZmlsbFlba10gLSAzLjAp IC8gMi4wCi0JCQkJCQkJCT4gMCkgewotCQkJCQkJCXYtPlZSYXRpb1ByZVlXaXRob3V0SW1tZWRp YXRlRmxpcFtpamtdID0KLQkJCQkJCQkJCWRtbF9tYXgoCi0JCQkJCQkJCQkJCXYtPlZSYXRpb1By ZVlXaXRob3V0SW1tZWRpYXRlRmxpcFtpamtdLAotCQkJCQkJCQkJCQkodi0+TWF4TnVtU3dZW2td Ci0JCQkJCQkJCQkJCQkJKiB2LT5Td2F0aEhlaWdodFlQZXJTdGF0ZVtpamtdKQotCQkJCQkJCQkJ CQkJCS8gKHYtPkxpbmVUaW1lc1RvUmVxdWVzdFByZWZldGNoUGl4ZWxEYXRhV2l0aG91dEltbWVk aWF0ZUZsaXAKLQkJCQkJCQkJCQkJCQkJCS0gKHYtPlByZWZpbGxZW2tdCi0JCQkJCQkJCQkJCQkJ CQkJCS0gMy4wKQotCQkJCQkJCQkJCQkJCQkJCQkvIDIuMCkpOwotCQkJCQkJfSBlbHNlIHsKLQkJ CQkJCQl2LT5WUmF0aW9QcmVZV2l0aG91dEltbWVkaWF0ZUZsaXBbaWprXSA9Ci0JCQkJCQkJCQk5 OTk5OTk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJdi0+VlJhdGlvUHJlQ1dpdGhvdXRJbW1lZGlh dGVGbGlwW2lqa10gPQotCQkJCQkJCXYtPlByZWZldGNoTGluZXNDW2tdCi0JCQkJCQkJCQkvIHYt PkxpbmVUaW1lc1RvUmVxdWVzdFByZWZldGNoUGl4ZWxEYXRhV2l0aG91dEltbWVkaWF0ZUZsaXA7 Ci0JCQkJCWlmICh2LT5Td2F0aEhlaWdodENQZXJTdGF0ZVtpamtdID4gNCkgewotCQkJCQkJaWYg KHYtPkxpbmVUaW1lc1RvUmVxdWVzdFByZWZldGNoUGl4ZWxEYXRhV2l0aG91dEltbWVkaWF0ZUZs aXAKLQkJCQkJCQkJLSAodi0+UHJlZmlsbENba10gLSAzLjApIC8gMi4wCi0JCQkJCQkJCT4gMCkg ewotCQkJCQkJCXYtPlZSYXRpb1ByZUNXaXRob3V0SW1tZWRpYXRlRmxpcFtpamtdID0KLQkJCQkJ CQkJCWRtbF9tYXgoCi0JCQkJCQkJCQkJCXYtPlZSYXRpb1ByZUNXaXRob3V0SW1tZWRpYXRlRmxp cFtpamtdLAotCQkJCQkJCQkJCQkodi0+TWF4TnVtU3dDW2tdCi0JCQkJCQkJCQkJCQkJKiB2LT5T d2F0aEhlaWdodENQZXJTdGF0ZVtpamtdKQotCQkJCQkJCQkJCQkJCS8gKHYtPkxpbmVUaW1lc1Rv UmVxdWVzdFByZWZldGNoUGl4ZWxEYXRhV2l0aG91dEltbWVkaWF0ZUZsaXAKLQkJCQkJCQkJCQkJ CQkJCS0gKHYtPlByZWZpbGxDW2tdCi0JCQkJCQkJCQkJCQkJCQkJCS0gMy4wKQotCQkJCQkJCQkJ CQkJCQkJCQkvIDIuMCkpOwotCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQl2LT5WUmF0aW9QcmVDV2l0 aG91dEltbWVkaWF0ZUZsaXBbaWprXSA9Ci0JCQkJCQkJCQk5OTk5OTk7Ci0JCQkJCQl9Ci0JCQkJ CX0KLQotCQkJCQl2LT5SZXF1aXJlZFByZWZldGNoUGl4ZWxEYXRhQldXaXRob3V0SW1tZWRpYXRl RmxpcFtpamtdID0KLQkJCQkJCQl2LT5Ob09mRFBQW2lqa10KLQkJCQkJCQkJCSogKHYtPlByZWZl dGNoTGluZXNZW2tdCi0JCQkJCQkJCQkJCS8gdi0+TGluZVRpbWVzVG9SZXF1ZXN0UHJlZmV0Y2hQ aXhlbERhdGFXaXRob3V0SW1tZWRpYXRlRmxpcAotCQkJCQkJCQkJCQkqIGRtbF9jZWlsX2V4KAot CQkJCQkJCQkJCQkJCXYtPkJ5dGVQZXJQaXhlbEluREVUWVtrXSwKLQkJCQkJCQkJCQkJCQkxKQot CQkJCQkJCQkJCQkrIHYtPlByZWZldGNoTGluZXNDW2tdCi0JCQkJCQkJCQkJCQkJLyB2LT5MaW5l VGltZXNUb1JlcXVlc3RQcmVmZXRjaFBpeGVsRGF0YVdpdGhvdXRJbW1lZGlhdGVGbGlwCi0JCQkJ CQkJCQkJCQkJKiBkbWxfY2VpbF9leCgKLQkJCQkJCQkJCQkJCQkJCXYtPkJ5dGVQZXJQaXhlbElu REVUQ1trXSwKLQkJCQkJCQkJCQkJCQkJCTIpCi0JCQkJCQkJCQkJCQkJLyAyKQotCQkJCQkJCQkJ KiB2LT5Td2F0aFdpZHRoWVBlclN0YXRlW2lqa10KLQkJCQkJCQkJCS8gKGRlc3QuaHRvdGFsCi0J CQkJCQkJCQkJCS8gZGVzdC5waXhlbF9yYXRlX21oeik7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJdi0+ VlJhdGlvUHJlWVdpdGhvdXRJbW1lZGlhdGVGbGlwW2lqa10gPSA5OTk5OTk7Ci0JCQkJCXYtPlZS YXRpb1ByZUNXaXRob3V0SW1tZWRpYXRlRmxpcFtpamtdID0gOTk5OTk5OwotCQkJCQl2LT5SZXF1 aXJlZFByZWZldGNoUGl4ZWxEYXRhQldXaXRob3V0SW1tZWRpYXRlRmxpcFtpamtdID0KLQkJCQkJ CQk5OTk5OTk7Ci0JCQkJfQotCQkJfQotCi0JCQl2LT5NYXhpbXVtUmVhZEJhbmR3aWR0aFdpdGhQ cmVmZXRjaFdpdGhJbW1lZGlhdGVGbGlwID0gMDsKLQotCQkJZm9yIChrID0gMDsgayA8IG51bV9w bGFuZXM7IGsrKykgewotCQkJCXN0cnVjdCBfdmNzX2RwaV9kaXNwbGF5X3BpcGVfc291cmNlX3Bh cmFtc19zdCBzcmMgPQotCQkJCQkJZTJlW3YtPnBsYW5lc1trXS5lMmVfaW5kZXhdLnBpcGUuc3Jj OwotCQkJCXN0cnVjdCBfdmNzX2RwaV9kaXNwbGF5X3BpcGVfZGVzdF9wYXJhbXNfc3QgZGVzdCA9 Ci0JCQkJCQllMmVbdi0+cGxhbmVzW2tdLmUyZV9pbmRleF0ucGlwZS5kZXN0OwotCQkJCWlqayA9 IGsgKiAyICogTnVtYmVyT2ZTdGF0ZXNQbHVzVHdvICsgaiAqIE51bWJlck9mU3RhdGVzUGx1c1R3 byArIGk7Ci0KLQkJCQlpZiAoc3JjLnNvdXJjZV9mb3JtYXQgIT0gZG1fNDIwXzgKLQkJCQkJCSYm IHNyYy5zb3VyY2VfZm9ybWF0ICE9IGRtXzQyMF8xMCkgewotCQkJCQl2LT5NYXhpbXVtUmVhZEJh bmR3aWR0aFdpdGhQcmVmZXRjaFdpdGhJbW1lZGlhdGVGbGlwID0KLQkJCQkJCQl2LT5NYXhpbXVt UmVhZEJhbmR3aWR0aFdpdGhQcmVmZXRjaFdpdGhJbW1lZGlhdGVGbGlwCi0JCQkJCQkJCQkrIGRt bF9tYXgoCi0JCQkJCQkJCQkJCXYtPlJlYWRCYW5kd2lkdGhba10sCi0JCQkJCQkJCQkJCXYtPlJl cXVpcmVkUHJlZmV0Y2hQaXhlbERhdGFCV1dpdGhJbW1lZGlhdGVGbGlwW2lqa10pCi0JCQkJCQkJ CQkrIGRtbF9tYXgoCi0JCQkJCQkJCQkJCXYtPk1ldGFQVEVCeXRlc1BlckZyYW1lW2tdCi0JCQkJ CQkJCQkJCQkJLyAodi0+TGluZXNGb3JNZXRhUFRFV2l0aEltbWVkaWF0ZUZsaXBba10KLQkJCQkJ CQkJCQkJCQkJCSogZGVzdC5odG90YWwKLQkJCQkJCQkJCQkJCQkJCS8gZGVzdC5waXhlbF9yYXRl X21oeiksCi0JCQkJCQkJCQkJCSh2LT5NZXRhUm93Qnl0ZXNba10KLQkJCQkJCQkJCQkJCQkrIHYt PkRQVEVCeXRlc1BlclJvd1trXSkKLQkJCQkJCQkJCQkJCQkvICh2LT5MaW5lc0Zvck1ldGFBbmRE UFRFUm93V2l0aEltbWVkaWF0ZUZsaXBba10KLQkJCQkJCQkJCQkJCQkJCSogZGVzdC5odG90YWwK LQkJCQkJCQkJCQkJCQkJCS8gZGVzdC5waXhlbF9yYXRlX21oeikpOwotCQkJCX0gZWxzZSB7Ci0J CQkJCXYtPk1heGltdW1SZWFkQmFuZHdpZHRoV2l0aFByZWZldGNoV2l0aEltbWVkaWF0ZUZsaXAg PQotCQkJCQkJCXYtPk1heGltdW1SZWFkQmFuZHdpZHRoV2l0aFByZWZldGNoV2l0aEltbWVkaWF0 ZUZsaXAKLQkJCQkJCQkJCSsgZG1sX21heCgKLQkJCQkJCQkJCQkJdi0+UmVhZEJhbmR3aWR0aFtr XSwKLQkJCQkJCQkJCQkJdi0+UmVxdWlyZWRQcmVmZXRjaFBpeGVsRGF0YUJXV2l0aG91dEltbWVk aWF0ZUZsaXBbaWprXSk7Ci0JCQkJfQotCQkJfQotCi0JCQl2LT5NYXhpbXVtUmVhZEJhbmR3aWR0 aFdpdGhQcmVmZXRjaFdpdGhvdXRJbW1lZGlhdGVGbGlwID0gMDsKLQotCQkJZm9yIChrID0gMDsg ayA8IG51bV9wbGFuZXM7IGsrKykgewotCQkJCWlqayA9IGsgKiAyICogTnVtYmVyT2ZTdGF0ZXNQ bHVzVHdvICsgaiAqIE51bWJlck9mU3RhdGVzUGx1c1R3byArIGk7Ci0KLQkJCQl2LT5NYXhpbXVt UmVhZEJhbmR3aWR0aFdpdGhQcmVmZXRjaFdpdGhvdXRJbW1lZGlhdGVGbGlwID0KLQkJCQkJCXYt Pk1heGltdW1SZWFkQmFuZHdpZHRoV2l0aFByZWZldGNoV2l0aG91dEltbWVkaWF0ZUZsaXAKLQkJ CQkJCQkJKyBkbWxfbWF4KAotCQkJCQkJCQkJCXYtPlJlYWRCYW5kd2lkdGhba10sCi0JCQkJCQkJ CQkJdi0+UmVxdWlyZWRQcmVmZXRjaFBpeGVsRGF0YUJXV2l0aG91dEltbWVkaWF0ZUZsaXBbaWpr XSk7Ci0JCQl9Ci0KLQkJCXYtPlByZWZldGNoU3VwcG9ydGVkV2l0aEltbWVkaWF0ZUZsaXBbaWpd ID0gMTsKLQkJCWlmICh2LT5NYXhpbXVtUmVhZEJhbmR3aWR0aFdpdGhQcmVmZXRjaFdpdGhJbW1l ZGlhdGVGbGlwCi0JCQkJCT4gdi0+UmV0dXJuQldQZXJTdGF0ZVtpXSkgewotCQkJCXYtPlByZWZl dGNoU3VwcG9ydGVkV2l0aEltbWVkaWF0ZUZsaXBbaWpdID0gMDsKLQkJCX0KLQkJCWZvciAoayA9 IDA7IGsgPCBudW1fcGxhbmVzOyBrKyspIHsKLQkJCQlpZiAodi0+TGluZVRpbWVzRm9yUHJlZmV0 Y2hba10gPCAyCi0JCQkJCQl8fCB2LT5MaW5lc0Zvck1ldGFQVEVXaXRoSW1tZWRpYXRlRmxpcFtr XSA+PSA4Ci0JCQkJCQl8fCB2LT5MaW5lc0Zvck1ldGFBbmREUFRFUm93V2l0aEltbWVkaWF0ZUZs aXBba10KLQkJCQkJCQkJPj0gMTYpIHsKLQkJCQkJdi0+UHJlZmV0Y2hTdXBwb3J0ZWRXaXRoSW1t ZWRpYXRlRmxpcFtpal0gPSAwOwotCQkJCX0KLQkJCX0KLQotCQkJdi0+UHJlZmV0Y2hTdXBwb3J0 ZWRXaXRob3V0SW1tZWRpYXRlRmxpcFtpal0gPSAxOwotCQkJaWYgKHYtPk1heGltdW1SZWFkQmFu ZHdpZHRoV2l0aFByZWZldGNoV2l0aG91dEltbWVkaWF0ZUZsaXAKLQkJCQkJPiB2LT5SZXR1cm5C V1BlclN0YXRlW2ldKSB7Ci0JCQkJdi0+UHJlZmV0Y2hTdXBwb3J0ZWRXaXRob3V0SW1tZWRpYXRl RmxpcFtpal0gPSAwOwotCQkJfQotCQkJZm9yIChrID0gMDsgayA8IG51bV9wbGFuZXM7IGsrKykg ewotCQkJCWlmICh2LT5MaW5lVGltZXNGb3JQcmVmZXRjaFtrXSA8IDIKLQkJCQkJCXx8IHYtPkxp bmVzRm9yTWV0YVBURVdpdGhvdXRJbW1lZGlhdGVGbGlwW2tdID49IDgKLQkJCQkJCXx8IHYtPkxp bmVzRm9yTWV0YUFuZERQVEVSb3dXaXRob3V0SW1tZWRpYXRlRmxpcFtrXQotCQkJCQkJCQk+PSAx NikgewotCQkJCQl2LT5QcmVmZXRjaFN1cHBvcnRlZFdpdGhvdXRJbW1lZGlhdGVGbGlwW2lqXSA9 IDA7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IE51bWJlck9mU3Rh dGVzUGx1c1R3bzsgaSsrKSB7Ci0JCWZvciAoaiA9IDA7IGogPCAyOyBqKyspIHsKLQkJCWlqID0g aiAqIE51bWJlck9mU3RhdGVzUGx1c1R3byArIGk7Ci0KLQkJCXYtPlZSYXRpb0luUHJlZmV0Y2hT dXBwb3J0ZWRXaXRoSW1tZWRpYXRlRmxpcFtpal0gPSAxOwotCQkJZm9yIChrID0gMDsgayA8IG51 bV9wbGFuZXM7IGsrKykgewotCQkJCXN0cnVjdCBfdmNzX2RwaV9kaXNwbGF5X3BpcGVfc291cmNl X3BhcmFtc19zdCBzcmMgPQotCQkJCQkJZTJlW3YtPnBsYW5lc1trXS5lMmVfaW5kZXhdLnBpcGUu c3JjOwotCQkJCWlqayA9IGsgKiAyICogTnVtYmVyT2ZTdGF0ZXNQbHVzVHdvICsgaiAqIE51bWJl ck9mU3RhdGVzUGx1c1R3byArIGk7Ci0KLQkJCQlpZiAoKChzcmMuc291cmNlX2Zvcm1hdCAhPSBk bV80MjBfOAotCQkJCQkJJiYgc3JjLnNvdXJjZV9mb3JtYXQgIT0gZG1fNDIwXzEwKQotCQkJCQkJ JiYgKHYtPlZSYXRpb1ByZVlXaXRoSW1tZWRpYXRlRmxpcFtpamtdID4gNAotCQkJCQkJCQl8fCB2 LT5WUmF0aW9QcmVDV2l0aEltbWVkaWF0ZUZsaXBbaWprXQotCQkJCQkJCQkJCT4gNCkpCi0JCQkJ CQl8fCAoKHNyYy5zb3VyY2VfZm9ybWF0ID09IGRtXzQyMF84Ci0JCQkJCQkJCXx8IHNyYy5zb3Vy Y2VfZm9ybWF0ID09IGRtXzQyMF8xMCkKLQkJCQkJCQkJJiYgKHYtPlZSYXRpb1ByZVlXaXRob3V0 SW1tZWRpYXRlRmxpcFtpamtdCi0JCQkJCQkJCQkJPiA0Ci0JCQkJCQkJCQkJfHwgdi0+VlJhdGlv UHJlQ1dpdGhvdXRJbW1lZGlhdGVGbGlwW2lqa10KLQkJCQkJCQkJCQkJCT4gNCkpKSB7Ci0JCQkJ CXYtPlZSYXRpb0luUHJlZmV0Y2hTdXBwb3J0ZWRXaXRoSW1tZWRpYXRlRmxpcFtpal0gPSAwOwot CQkJCX0KLQkJCX0KLQkJCXYtPlZSYXRpb0luUHJlZmV0Y2hTdXBwb3J0ZWRXaXRob3V0SW1tZWRp YXRlRmxpcFtpal0gPSAxOwotCQkJZm9yIChrID0gMDsgayA8IG51bV9wbGFuZXM7IGsrKykgewot CQkJCWlqayA9IGsgKiAyICogTnVtYmVyT2ZTdGF0ZXNQbHVzVHdvICsgaiAqIE51bWJlck9mU3Rh dGVzUGx1c1R3byArIGk7Ci0KLQkJCQlpZiAodi0+VlJhdGlvUHJlWVdpdGhvdXRJbW1lZGlhdGVG bGlwW2lqa10gPiA0Ci0JCQkJCQl8fCB2LT5WUmF0aW9QcmVDV2l0aG91dEltbWVkaWF0ZUZsaXBb aWprXSA+IDQpIHsKLQkJCQkJdi0+VlJhdGlvSW5QcmVmZXRjaFN1cHBvcnRlZFdpdGhvdXRJbW1l ZGlhdGVGbGlwW2lqXSA9IDA7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JLy8gTW9kZSBTdXBw b3J0LCBWb2x0YWdlIFN0YXRlIGFuZCBTT0MgQ29uZmlndXJhdGlvbgotCi0JZm9yIChpID0gKE51 bWJlck9mU3RhdGVzUGx1c1R3byAtIDEpOyBpID49IDA7IGktLSkgLy8gdXNlIGludCB0eXBlIGhl cmUKLQkJCXsKLQkJZm9yIChqID0gMDsgaiA8IDI7IGorKykgewotCQkJaWogPSBqICogTnVtYmVy T2ZTdGF0ZXNQbHVzVHdvICsgaTsKLQotCQkJaWYgKHYtPlNjYWxlUmF0aW9TdXBwb3J0ID09IDEg JiYgdi0+U291cmNlRm9ybWF0UGl4ZWxBbmRTY2FuU3VwcG9ydCA9PSAxCi0JCQkJCSYmIHYtPlZp ZXdwb3J0U2l6ZVN1cHBvcnQgPT0gMQotCQkJCQkmJiB2LT5CYW5kd2lkdGhTdXBwb3J0W2ldID09 IDEgJiYgdi0+RElPU3VwcG9ydFtpXSA9PSAxCi0JCQkJCSYmIHYtPlVyZ2VudExhdGVuY3lTdXBw b3J0W2lqXSA9PSAxICYmIHYtPlJPQlN1cHBvcnRbaV0gPT0gMQotCQkJCQkmJiB2LT5ESVNQQ0xL X0RQUENMS19TdXBwb3J0W2lqXSA9PSAxCi0JCQkJCSYmIHYtPlRvdGFsQXZhaWxhYmxlUGlwZXNT dXBwb3J0W2lqXSA9PSAxCi0JCQkJCSYmIHYtPlRvdGFsQXZhaWxhYmxlV3JpdGViYWNrU3VwcG9y dCA9PSAxCi0JCQkJCSYmIHYtPldyaXRlYmFja0xhdGVuY3lTdXBwb3J0ID09IDEpIHsKLQkJCQlp ZiAodi0+UHJlZmV0Y2hTdXBwb3J0ZWRXaXRoSW1tZWRpYXRlRmxpcFtpal0gPT0gMQotCQkJCQkJ JiYgdi0+VlJhdGlvSW5QcmVmZXRjaFN1cHBvcnRlZFdpdGhJbW1lZGlhdGVGbGlwW2lqXQotCQkJ CQkJCQk9PSAxKSB7Ci0JCQkJCXYtPk1vZGVTdXBwb3J0V2l0aEltbWVkaWF0ZUZsaXBbaWpdID0g MTsKLQkJCQl9IGVsc2UgewotCQkJCQl2LT5Nb2RlU3VwcG9ydFdpdGhJbW1lZGlhdGVGbGlwW2lq XSA9IDA7Ci0JCQkJfQotCQkJCWlmICh2LT5QcmVmZXRjaFN1cHBvcnRlZFdpdGhvdXRJbW1lZGlh dGVGbGlwW2lqXSA9PSAxCi0JCQkJCQkmJiB2LT5WUmF0aW9JblByZWZldGNoU3VwcG9ydGVkV2l0 aG91dEltbWVkaWF0ZUZsaXBbaWpdCi0JCQkJCQkJCT09IDEpIHsKLQkJCQkJdi0+TW9kZVN1cHBv cnRXaXRob3V0SW1tZWRpYXRlRmxpcFtpal0gPSAxOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXYtPk1v ZGVTdXBwb3J0V2l0aG91dEltbWVkaWF0ZUZsaXBbaWpdID0gMDsKLQkJCQl9Ci0JCQl9IGVsc2Ug ewotCQkJCXYtPk1vZGVTdXBwb3J0V2l0aEltbWVkaWF0ZUZsaXBbaWpdID0gMDsKLQkJCQl2LT5N b2RlU3VwcG9ydFdpdGhvdXRJbW1lZGlhdGVGbGlwW2lqXSA9IDA7Ci0JCQl9Ci0JCX0KLQl9Ci0K LQlmb3IgKGkgPSAoTnVtYmVyT2ZTdGF0ZXNQbHVzVHdvIC0gMSk7IGkgPj0gMDsgaS0tKSAvLyB1 c2UgaW50IHR5cGUgaGVyZQotCQkJewotCQlpZiAoKGkgPT0gKE51bWJlck9mU3RhdGVzUGx1c1R3 byAtIDEpCi0JCQkJfHwgdi0+TW9kZVN1cHBvcnRXaXRoSW1tZWRpYXRlRmxpcFsxICogTnVtYmVy T2ZTdGF0ZXNQbHVzVHdvICsgaV0KLQkJCQkJCT09IDEKLQkJCQl8fCB2LT5Nb2RlU3VwcG9ydFdp dGhJbW1lZGlhdGVGbGlwWzAgKiBOdW1iZXJPZlN0YXRlc1BsdXNUd28gKyBpXQotCQkJCQkJPT0g MSkgJiYgaSA+PSB2LT5Wb2x0YWdlT3ZlcnJpZGVMZXZlbCkgewotCQkJdi0+Vm9sdGFnZUxldmVs V2l0aEltbWVkaWF0ZUZsaXAgPSBpOwotCQl9Ci0JfQotCi0JZm9yIChpID0gKE51bWJlck9mU3Rh dGVzUGx1c1R3byAtIDEpOyBpID49IDA7IGktLSkgLy8gdXNlIGludCB0eXBlIGhlcmUKLQkJCXsK LQkJaWYgKChpID09IChOdW1iZXJPZlN0YXRlc1BsdXNUd28gLSAxKQotCQkJCXx8IHYtPk1vZGVT dXBwb3J0V2l0aG91dEltbWVkaWF0ZUZsaXBbMSAqIE51bWJlck9mU3RhdGVzUGx1c1R3byArIGld Ci0JCQkJCQk9PSAxCi0JCQkJfHwgdi0+TW9kZVN1cHBvcnRXaXRob3V0SW1tZWRpYXRlRmxpcFsw ICogTnVtYmVyT2ZTdGF0ZXNQbHVzVHdvICsgaV0KLQkJCQkJCT09IDEpICYmIGkgPj0gdi0+Vm9s dGFnZU92ZXJyaWRlTGV2ZWwpIHsKLQkJCXYtPlZvbHRhZ2VMZXZlbFdpdGhvdXRJbW1lZGlhdGVG bGlwID0gaTsKLQkJfQotCX0KLQotCWlmICh2LT5Wb2x0YWdlTGV2ZWxXaXRoSW1tZWRpYXRlRmxp cCA9PSAoTnVtYmVyT2ZTdGF0ZXNQbHVzVHdvIC0gMSkpIHsKLQkJdi0+SW1tZWRpYXRlRmxpcFN1 cHBvcnRlZCA9IDA7Ci0JCXYtPlZvbHRhZ2VMZXZlbCA9IHYtPlZvbHRhZ2VMZXZlbFdpdGhvdXRJ bW1lZGlhdGVGbGlwOwotCX0gZWxzZSB7Ci0JCXYtPkltbWVkaWF0ZUZsaXBTdXBwb3J0ZWQgPSAx OwotCQl2LT5Wb2x0YWdlTGV2ZWwgPSB2LT5Wb2x0YWdlTGV2ZWxXaXRoSW1tZWRpYXRlRmxpcDsK LQl9Ci0KLQl2LT5EQ0ZDTEsgPSB2LT5EQ0ZDTEtQZXJTdGF0ZVsoaW50KSB2LT5Wb2x0YWdlTGV2 ZWxdOwotCXYtPkZhYnJpY0FuZERSQU1CYW5kd2lkdGggPSB2LT5GYWJyaWNBbmREUkFNQmFuZHdp ZHRoUGVyU3RhdGVbKGludCkgdi0+Vm9sdGFnZUxldmVsXTsKLQotCWZvciAoaiA9IDA7IGogPCAy OyBqKyspIHsKLQkJdi0+UmVxdWlyZWRESVNQQ0xLUGVyUmF0aW9bal0gPSB2LT5SZXF1aXJlZERJ U1BDTEtbaiAqIE51bWJlck9mU3RhdGVzUGx1c1R3bwotCQkJCSsgKGludCkgdi0+Vm9sdGFnZUxl dmVsXTsKLQkJZm9yIChrID0gMDsgayA8IG51bV9wbGFuZXM7IGsrKykgewotCQkJdi0+RFBQUGVy UGxhbmVQZXJSYXRpb1trICogMiArIGpdID0gdi0+Tm9PZkRQUFtrICogMiAqIE51bWJlck9mU3Rh dGVzUGx1c1R3bwotCQkJCQkrIGogKiBOdW1iZXJPZlN0YXRlc1BsdXNUd28gKyAoaW50KSB2LT5W b2x0YWdlTGV2ZWxdOwotCQl9Ci0JCXYtPkRJU1BDTEtfRFBQQ0xLX1N1cHBvcnRQZXJSYXRpb1tq XSA9IHYtPkRJU1BDTEtfRFBQQ0xLX1N1cHBvcnRbagotCQkJCSogTnVtYmVyT2ZTdGF0ZXNQbHVz VHdvICsgKGludCkgdi0+Vm9sdGFnZUxldmVsXTsKLQl9Ci0KLQlBU1NFUlQodi0+SW1tZWRpYXRl RmxpcFN1cHBvcnRlZCB8fCB2LT5NYWNyb1RpbGVCbG9ja1dpZHRoQyB8fCB2LT5EQ0ZDTEsgfHwg di0+RmFicmljQW5kRFJBTUJhbmR3aWR0aCk7Ci0KLQlyZXR1cm4gKHYtPlZvbHRhZ2VMZXZlbCk7 Ci19Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kbWwvZGlz cGxheV9tb2RlX3N1cHBvcnQuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kbWwv ZGlzcGxheV9tb2RlX3N1cHBvcnQuaAppbmRleCBlYWQ0OTQyLi5kNGVhMDM3IDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZG1sL2Rpc3BsYXlfbW9kZV9zdXBwb3J0 LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RtbC9kaXNwbGF5X21vZGVf c3VwcG9ydC5oCkBAIC0xOTEsOSArMTkxLDQgQEAgc3RydWN0IGRtbF9tc19pbnRlcm5hbF92YXJz IHsKIAlzdHJ1Y3QgX3Zjc19kcGlfd21fY2FsY19waXBlX3BhcmFtc19zdCBwbGFuZXNbRENfX05V TV9QSVBFU19fTUFYXTsKIH07CiAKLWludCBkbWxfbXNfY2hlY2soCi0JCXN0cnVjdCBkaXNwbGF5 X21vZGVfbGliICptb2RlX2xpYiwKLQkJc3RydWN0IF92Y3NfZHBpX2Rpc3BsYXlfZTJlX3BpcGVf cGFyYW1zX3N0ICplMmUsCi0JCWludCBudW1fcGlwZXMpOwotCiAjZW5kaWYKLS0gCjIuOS40Cgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwphbWQtZ2Z4IG1h aWxpbmcgbGlzdAphbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZngK