From mboxrd@z Thu Jan 1 00:00:00 1970 From: Emil Velikov Subject: [PATCH libdrm 1/4] tests: remove useless legacy tests Date: Wed, 30 Nov 2016 20:37:04 +0000 Message-ID: <20161130203707.19058-1-emil.l.velikov@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x242.google.com (mail-wm0-x242.google.com [IPv6:2a00:1450:400c:c09::242]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5FB516E3AF for ; Wed, 30 Nov 2016 20:37:30 +0000 (UTC) Received: by mail-wm0-x242.google.com with SMTP id m203so31086370wma.3 for ; Wed, 30 Nov 2016 12:37:30 -0800 (PST) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Daniel Vetter , emil.l.velikov@gmail.com List-Id: dri-devel@lists.freedesktop.org QWxsIG9mIHRoZXNlICd0ZXN0cycgY292ZXIgVU1TIGZ1bmN0aW9uYWxpdHkgd2hpY2ggaXMgbmVp dGhlciBiZWluZwp3b3JrZWQgb24gb3IgYWN0aXZlbHkgbWFpbnRhaW5lZC4KClRoZSBvbmx5IGNh c2VzIHdoZXJlIGRldmVsb3BlcnMgdG91Y2ggVU1TIGNvZGUgaXMgdG8gdW53cmFwIGl0IGZyb20g dGhlCktNUyBjb2RlcGF0aHMgYW5kIGVuc3VyZSB0aGF0IHRob3NlIGFyZSBzZWN1cmUuCgpBbnlv bmUgd2hvIGZlZWxzIHN0cm9uZyBhYm91dCBoYXZpbmcgdGhlc2UgYXJvdW5kIGNhbiByZXZpdmUg dGhlbSwgYnV0CmluIGFsbCBob25lc3RseSBkbyBjb25zaWRlciBfc2VyaW91c2x5XyB3aGF0IHlv dSdyZSBkb2luZyA7LSkKCkNjOiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZmd2xsLmNo PgpTaWduZWQtb2ZmLWJ5OiBFbWlsIFZlbGlrb3YgPGVtaWwubC52ZWxpa292QGdtYWlsLmNvbT4K LS0tCkFub3RoZXIgc21hbGwgc3RlcCB0b3dhcmRzIHRoZSBncmVhdGVyIGdvb2QgOy0pCi0tLQog dGVzdHMvTWFrZWZpbGUuYW0gICAgfCAgMzMgKy0tLS0tCiB0ZXN0cy9hdXRoLmMgICAgICAgICB8 IDEzOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB0ZXN0cy9kcmlzdGF0LmMgICAgICB8IDI4 NSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHRl c3RzL2RybXRlc3QuYyAgICAgIHwgMTM1IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogdGVzdHMv ZHJtdGVzdC5oICAgICAgfCAgNDAgLS0tLS0tLS0KIHRlc3RzL2dldGNsaWVudC5jICAgIHwgIDYx IC0tLS0tLS0tLS0tCiB0ZXN0cy9nZXRzdGF0cy5jICAgICB8ICA1MCAtLS0tLS0tLS0KIHRlc3Rz L2dldHZlcnNpb24uYyAgIHwgIDQ5IC0tLS0tLS0tLQogdGVzdHMvbG9jay5jICAgICAgICAgfCAy NjQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHRlc3Rz L25hbWVfZnJvbV9mZC5jIHwgIDU4IC0tLS0tLS0tLS0tCiB0ZXN0cy9vcGVuY2xvc2UuYyAgICB8 ICAzNyAtLS0tLS0tCiB0ZXN0cy9zZXR2ZXJzaW9uLmMgICB8ICA5MSAtLS0tLS0tLS0tLS0tLS0t CiB0ZXN0cy91cGRhdGVkcmF3LmMgICB8IDE1NCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiAxMyBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMTM5NCBkZWxldGlvbnMoLSkKIGRl bGV0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9hdXRoLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9k cmlzdGF0LmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9kcm10ZXN0LmMKIGRlbGV0ZSBtb2Rl IDEwMDY0NCB0ZXN0cy9kcm10ZXN0LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9nZXRjbGll bnQuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2dldHN0YXRzLmMKIGRlbGV0ZSBtb2RlIDEw MDY0NCB0ZXN0cy9nZXR2ZXJzaW9uLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9sb2NrLmMK IGRlbGV0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9uYW1lX2Zyb21fZmQuYwogZGVsZXRlIG1vZGUgMTAw NjQ0IHRlc3RzL29wZW5jbG9zZS5jCiBkZWxldGUgbW9kZSAxMDA2NDQgdGVzdHMvc2V0dmVyc2lv bi5jCiBkZWxldGUgbW9kZSAxMDA2NDQgdGVzdHMvdXBkYXRlZHJhdy5jCgpkaWZmIC0tZ2l0IGEv dGVzdHMvTWFrZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5hbQppbmRleCA0YTQ5OWU0Li4xMzZj Y2NlIDEwMDY0NAotLS0gYS90ZXN0cy9NYWtlZmlsZS5hbQorKysgYi90ZXN0cy9NYWtlZmlsZS5h bQpAQCAtMzQsMTEgKzM0LDcgQEAgQU1fQ0ZMQUdTID0gXAogTERBREQgPSAkKHRvcF9idWlsZGRp cikvbGliZHJtLmxhCiAKIGNoZWNrX1BST0dSQU1TID0gXAotCWRyaXN0YXQgXAotCWRybWRldmlj ZSBcCi0JZHJtc3RhdAotCi1kcmlzdGF0X0xEQUREID0gLWxtCisJZHJtZGV2aWNlCiAKIGlmIEhB VkVfTk9VVkVBVQogU1VCRElSUyArPSBub3V2ZWF1CkBAIC00OSwzMSArNDUsNCBAQCBURVNUUyA9 IFwKIAloYXNoIFwKIAlyYW5kb20KIAotaWYgSEFWRV9MSUJVREVWCi0KLWNoZWNrX0xUTElCUkFS SUVTID0gbGliZHJtdGVzdC5sYQotCi1saWJkcm10ZXN0X2xhX1NPVVJDRVMgPSBcCi0JZHJtdGVz dC5jIFwKLQlkcm10ZXN0LmgKLQotTERBREQgKz0gXAotCWxpYmRybXRlc3QubGEgXAotCSQoTElC VURFVl9MSUJTKQotCi0KLVhGQUlMX1RFU1RTID0JCQkJCVwKLQlhdXRoCQkJCQlcCi0JbG9jawot Ci1URVNUUyArPQkJCQkJXAotCW9wZW5jbG9zZQkJCQlcCi0JZ2V0dmVyc2lvbgkJCQlcCi0JZ2V0 Y2xpZW50CQkJCVwKLQlnZXRzdGF0cwkJCQlcCi0Jc2V0dmVyc2lvbgkJCQlcCi0JdXBkYXRlZHJh dwkJCQlcCi0JbmFtZV9mcm9tX2ZkCi1lbmRpZgotCiBjaGVja19QUk9HUkFNUyArPSAkKFRFU1RT KQpkaWZmIC0tZ2l0IGEvdGVzdHMvYXV0aC5jIGIvdGVzdHMvYXV0aC5jCmRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NAppbmRleCA5MTQ3YjExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2F1dGguYworKysg L2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IMKpIDIwMDcgSW50 ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVl IG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNv ZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUi KSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1 ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2Rp ZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNl bGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20g dGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZv bGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFu ZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKLSAqIHBhcmFncmFw aCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9u cyBvZiB0aGUKLSAqIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAi QVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBM SUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05J TkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAotICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJ R0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAq IExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RI RVJXSVNFLCBBUklTSU5HCi0gKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRI RSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCi0gKiBJTiBUSEUgU09GVFdB UkUuCi0gKgotICogQXV0aG9yczoKLSAqICAgIEVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+ Ci0gKgotICovCi0KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDxzeXMvaW9jdGwuaD4K LSNpbmNsdWRlICJkcm10ZXN0LmgiCi0KLWVudW0gYXV0aF9ldmVudCB7Ci0JU0VSVkVSX1JFQURZ LAotCUNMSUVOVF9NQUdJQywKLQlDTElFTlRfRE9ORSwKLX07Ci0KLWludCBjb21tZmRbMl07Ci0K LXN0YXRpYyB2b2lkIHdhaXRfZXZlbnQoaW50IHBpcGUsIGVudW0gYXV0aF9ldmVudCBleHBlY3Rl ZF9ldmVudCkKLXsKLQlpbnQgcmV0OwotCWVudW0gYXV0aF9ldmVudCBldmVudDsKLQl1bnNpZ25l ZCBjaGFyIGluOwotCi0JcmV0ID0gcmVhZChjb21tZmRbcGlwZV0sICZpbiwgMSk7Ci0JaWYgKHJl dCA9PSAtMSkKLQkJZXJyKDEsICJyZWFkIGVycm9yIik7Ci0JZXZlbnQgPSBpbjsKLQotCWlmIChl dmVudCAhPSBleHBlY3RlZF9ldmVudCkKLQkJZXJyeCgxLCAidW5leHBlY3RlZCBldmVudDogJWRc biIsIGV2ZW50KTsKLX0KLQotc3RhdGljIHZvaWQKLXNlbmRfZXZlbnQoaW50IHBpcGUsIGVudW0g YXV0aF9ldmVudCBzZW5kX2V2ZW50KQotewotCWludCByZXQ7Ci0JdW5zaWduZWQgY2hhciBldmVu dDsKLQotCWV2ZW50ID0gc2VuZF9ldmVudDsKLQlyZXQgPSB3cml0ZShjb21tZmRbcGlwZV0sICZl dmVudCwgMSk7Ci0JaWYgKHJldCA9PSAtMSkKLQkJZXJyKDEsICJmYWlsZWQgdG8gc2VuZCBldmVu dCAlZCIsIGV2ZW50KTsKLX0KLQotc3RhdGljIHZvaWQgY2xpZW50KCkKLXsKLQlzdHJ1Y3QgZHJt X2F1dGggYXV0aDsKLQlpbnQgZHJtZmQsIHJldDsKLQotCS8qIFhYWDogU2hvdWxkIG1ha2Ugc3Vy ZSB3ZSBvcGVuIHRoZSBzYW1lIERSTSBhcyB0aGUgbWFzdGVyICovCi0Jd2FpdF9ldmVudCgwLCBT RVJWRVJfUkVBRFkpOwotCi0JZHJtZmQgPSBkcm1fb3Blbl9hbnkoKTsKLQotCS8qIEdldCBhIGNs aWVudCBtYWdpYyBudW1iZXIgYW5kIHBhc3MgaXQgdG8gdGhlIG1hc3RlciBmb3IgYXV0aC4gKi8K LQlhdXRoLm1hZ2ljID0gMDsgLyogUXVpZXQgdmFsZ3JpbmQgKi8KLQlyZXQgPSBpb2N0bChkcm1m ZCwgRFJNX0lPQ1RMX0dFVF9NQUdJQywgJmF1dGgpOwotCWlmIChyZXQgPT0gLTEpCi0JCWVycigx LCAiQ291bGRuJ3QgZ2V0IGNsaWVudCBtYWdpYyIpOwotCXNlbmRfZXZlbnQoMCwgQ0xJRU5UX01B R0lDKTsKLQlyZXQgPSB3cml0ZShjb21tZmRbMF0sICZhdXRoLm1hZ2ljLCBzaXplb2YoYXV0aC5t YWdpYykpOwotCWlmIChyZXQgPT0gLTEpCi0JCWVycigxLCAiQ291bGRuJ3Qgd3JpdGUgYXV0aCBk YXRhIik7Ci0KLQkvKiBTaWduYWwgdGhhdCB0aGUgY2xpZW50IGlzIGNvbXBsZXRlbHkgZG9uZS4g Ki8KLQlzZW5kX2V2ZW50KDAsIENMSUVOVF9ET05FKTsKLX0KLQotc3RhdGljIHZvaWQgc2VydmVy KCkKLXsKLQlpbnQgZHJtZmQsIHJldDsKLQlzdHJ1Y3QgZHJtX2F1dGggYXV0aDsKLQotCWRybWZk ID0gZHJtX29wZW5fYW55X21hc3RlcigpOwotCi0JYXV0aC5tYWdpYyA9IDB4ZDBkMGQwZDA7Ci0J cmV0ID0gaW9jdGwoZHJtZmQsIERSTV9JT0NUTF9BVVRIX01BR0lDLCAmYXV0aCk7Ci0JaWYgKHJl dCAhPSAtMSB8fCBlcnJubyAhPSBFSU5WQUwpCi0JCWVycngoMSwgIkF1dGhlbnRpY2F0aW5nIGJh ZCBtYWdpYyBzdWNjZWVkZWRcbiIpOwotCi0Jc2VuZF9ldmVudCgxLCBTRVJWRVJfUkVBRFkpOwot Ci0Jd2FpdF9ldmVudCgxLCBDTElFTlRfTUFHSUMpOwotCXJldCA9IHJlYWQoY29tbWZkWzFdLCAm YXV0aC5tYWdpYywgc2l6ZW9mKGF1dGgubWFnaWMpKTsKLQlpZiAocmV0ID09IC0xKQotCQllcnIo MSwgIkZhaWx1cmUgdG8gcmVhZCBjbGllbnQgbWFnaWMiKTsKLQotCXJldCA9IGlvY3RsKGRybWZk LCBEUk1fSU9DVExfQVVUSF9NQUdJQywgJmF1dGgpOwotCWlmIChyZXQgPT0gLTEpCi0JCWVycigx LCAiRmFpbHVyZSB0byBhdXRoZW50aWNhdGUgY2xpZW50IG1hZ2ljXG4iKTsKLQotCXdhaXRfZXZl bnQoMSwgQ0xJRU5UX0RPTkUpOwotfQotCi0vKioKLSAqIENoZWNrcyBEUk0gYXV0aGVudGljYXRp b24gbWVjaGFuaXNtcy4KLSAqLwotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewot CWludCByZXQ7Ci0KLQlyZXQgPSBwaXBlKGNvbW1mZCk7Ci0JaWYgKHJldCA9PSAtMSkKLQkJZXJy KDEsICJDb3VsZG4ndCBjcmVhdGUgcGlwZSIpOwotCi0JcmV0ID0gZm9yaygpOwotCWlmIChyZXQg PT0gLTEpCi0JCWVycigxLCAiZmFpbHVyZSB0byBmb3JrIGNsaWVudCIpOwotCWlmIChyZXQgPT0g MCkKLQkJY2xpZW50KCk7Ci0JZWxzZQotCQlzZXJ2ZXIoKTsKLQotCXJldHVybiAwOwotfQotCmRp ZmYgLS1naXQgYS90ZXN0cy9kcmlzdGF0LmMgYi90ZXN0cy9kcmlzdGF0LmMKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IGNjYTRiMDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZHJpc3RhdC5j CisrKyAvZGV2L251bGwKQEAgLTEsMjg1ICswLDAgQEAKLS8qIGRyaXN0YXQuYyAtLSAKLSAqIENy ZWF0ZWQ6IE1vbiBKYW4gMTUgMDU6MDU6MDcgMjAwMSBieSBmYWl0aEBhY20ub3JnCi0gKgotICog Q29weXJpZ2h0IDIwMDAgVkEgTGludXggU3lzdGVtcywgSW5jLiwgRnJlbW9udCwgQ2FsaWZvcm5p YS4KLSAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkg Z3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKLSAqIGNv cHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0 aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3Ry aWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvIHVz ZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwK LSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVy c29ucyB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJq ZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqIAotICogVGhlIGFib3ZlIGNvcHly aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4 dAotICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0 YW50aWFsIHBvcnRpb25zIG9mIHRoZQotICogU29mdHdhcmUuCi0gKiAKLSAqIFRIRSBTT0ZUV0FS RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBS RVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAotICogUFJFQ0lT SU9OIElOU0lHSFQgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0s IERBTUFHRVMgT1IKLSAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0Yg Q09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAotICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1Ig SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCi0gKiBE RUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0gKiAKLSAqIEF1dGhvcnM6IFJpY2thcmQgRS4gKFJp aykgRmFpdGggPGZhaXRoQHZhbGludXguY29tPgotICogCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09O RklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPHN0ZGlvLmg+ Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSAieGY4 NmRybS5oIgotI2luY2x1ZGUgInhmODZkcm1SYW5kb20uYyIKLSNpbmNsdWRlICJ4Zjg2ZHJtSGFz aC5jIgotI2luY2x1ZGUgInhmODZkcm0uYyIKLQotI2RlZmluZSBEUk1fVkVSU0lPTiAweDAwMDAw MDAxCi0jZGVmaW5lIERSTV9NRU1PUlkgIDB4MDAwMDAwMDIKLSNkZWZpbmUgRFJNX0NMSUVOVFMg MHgwMDAwMDAwNAotI2RlZmluZSBEUk1fU1RBVFMgICAweDAwMDAwMDA4Ci0jZGVmaW5lIERSTV9C VVNJRCAgIDB4MDAwMDAwMTAKLQotc3RhdGljIHZvaWQgZ2V0dmVyc2lvbihpbnQgZmQpCi17Ci0g ICAgZHJtVmVyc2lvblB0ciB2ZXJzaW9uOwotICAgIAotICAgIHZlcnNpb24gPSBkcm1HZXRWZXJz aW9uKGZkKTsKLSAgICBpZiAodmVyc2lvbikgewotCXByaW50ZigiICBWZXJzaW9uIGluZm9ybWF0 aW9uOlxuIik7Ci0JcHJpbnRmKCIgICAgTmFtZTogJXNcbiIsIHZlcnNpb24tPm5hbWUgPyB2ZXJz aW9uLT5uYW1lIDogIj8iKTsKLQlwcmludGYoIiAgICBWZXJzaW9uOiAlZC4lZC4lZFxuIiwKLQkg ICAgICAgdmVyc2lvbi0+dmVyc2lvbl9tYWpvciwKLQkgICAgICAgdmVyc2lvbi0+dmVyc2lvbl9t aW5vciwKLQkgICAgICAgdmVyc2lvbi0+dmVyc2lvbl9wYXRjaGxldmVsKTsKLQlwcmludGYoIiAg ICBEYXRlOiAlc1xuIiwgdmVyc2lvbi0+ZGF0ZSA/IHZlcnNpb24tPmRhdGUgOiAiPyIpOwotCXBy aW50ZigiICAgIERlc2M6ICVzXG4iLCB2ZXJzaW9uLT5kZXNjID8gdmVyc2lvbi0+ZGVzYyA6ICI/ Iik7Ci0JZHJtRnJlZVZlcnNpb24odmVyc2lvbik7Ci0gICAgfSBlbHNlIHsKLQlwcmludGYoIiAg Tm8gdmVyc2lvbiBpbmZvcm1hdGlvbiBhdmFpbGFibGVcbiIpOwotICAgIH0KLX0KLQotc3RhdGlj IHZvaWQgZ2V0YnVzaWQoaW50IGZkKQotewotICAgIGNvbnN0IGNoYXIgKmJ1c2lkID0gZHJtR2V0 QnVzaWQoZmQpOwotICAgIAotICAgIHByaW50ZigiICBCdXNpZDogJXNcbiIsICpidXNpZCA/IGJ1 c2lkIDogIihub3Qgc2V0KSIpOwotICAgIGRybUZyZWVCdXNpZChidXNpZCk7Ci19Ci0KLQotc3Rh dGljIHZvaWQgZ2V0dm0oaW50IGZkKQotewotICAgIGludCAgICAgICAgICAgICBpOwotICAgIGNv bnN0IGNoYXIgICAgICAqdHlwZW5hbWU7Ci0gICAgY2hhciAgICAgICAgICAgIGZsYWduYW1lWzMz XTsKLSAgICBkcm1faGFuZGxlX3QgICAgb2Zmc2V0OwotICAgIGRybVNpemUgICAgICAgICBzaXpl OwotICAgIGRybU1hcFR5cGUgICAgICB0eXBlOwotICAgIGRybU1hcEZsYWdzICAgICBmbGFnczsK LSAgICBkcm1faGFuZGxlX3QgICAgaGFuZGxlOwotICAgIGludCAgICAgICAgICAgICBtdHJyOwot Ci0gICAgcHJpbnRmKCIgIFZNIG1hcCBpbmZvcm1hdGlvbjpcbiIpOwotICAgIHByaW50ZigiICBm bGFnczogKFIpZXN0cmljdGVkIChyKWVhZC8odylyaXRlIChsKW9ja2VkIChrKWVybmVsIChXKXJp dGUtY29tYmluZSAoTClvY2s6XG4iKTsKLSAgICBwcmludGYoIiAgICBzbG90ICAgICBvZmZzZXQg ICAgICAgc2l6ZSB0eXBlIGZsYWdzICAgIGFkZHJlc3MgbXRyclxuIik7Ci0KLSAgICBmb3IgKGkg PSAwOwotCSAhZHJtR2V0TWFwKGZkLCBpLCAmb2Zmc2V0LCAmc2l6ZSwgJnR5cGUsICZmbGFncywg JmhhbmRsZSwgJm10cnIpOwotCSBpKyspIHsKLQkKLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIERS TV9GUkFNRV9CVUZGRVI6ICAgdHlwZW5hbWUgPSAiRkIiOyAgYnJlYWs7Ci0JY2FzZSBEUk1fUkVH SVNURVJTOiAgICAgIHR5cGVuYW1lID0gIlJFRyI7IGJyZWFrOwotCWNhc2UgRFJNX1NITTogICAg ICAgICAgICB0eXBlbmFtZSA9ICJTSE0iOyBicmVhazsKLQljYXNlIERSTV9BR1A6ICAgICAgICAg ICAgdHlwZW5hbWUgPSAiQUdQIjsgYnJlYWs7Ci0JY2FzZSBEUk1fU0NBVFRFUl9HQVRIRVI6IHR5 cGVuYW1lID0gIlNHIjsgIGJyZWFrOwotCWNhc2UgRFJNX0NPTlNJU1RFTlQ6ICAgICB0eXBlbmFt ZSA9ICJDT04iOyBicmVhazsKLQlkZWZhdWx0OiAgICAgICAgICAgICAgICAgdHlwZW5hbWUgPSAi Pz8/IjsgYnJlYWs7Ci0JfQotCi0JZmxhZ25hbWVbMF0gPSAoZmxhZ3MgJiBEUk1fUkVTVFJJQ1RF RCkgICAgICA/ICdSJyA6ICcgJzsKLQlmbGFnbmFtZVsxXSA9IChmbGFncyAmIERSTV9SRUFEX09O TFkpICAgICAgID8gJ3InIDogJ3cnOwotCWZsYWduYW1lWzJdID0gKGZsYWdzICYgRFJNX0xPQ0tF RCkgICAgICAgICAgPyAnbCcgOiAnICc7Ci0JZmxhZ25hbWVbM10gPSAoZmxhZ3MgJiBEUk1fS0VS TkVMKSAgICAgICAgICA/ICdrJyA6ICcgJzsKLQlmbGFnbmFtZVs0XSA9IChmbGFncyAmIERSTV9X UklURV9DT01CSU5JTkcpID8gJ1cnIDogJyAnOwotCWZsYWduYW1lWzVdID0gKGZsYWdzICYgRFJN X0NPTlRBSU5TX0xPQ0spICAgPyAnTCcgOiAnICc7Ci0JZmxhZ25hbWVbNl0gPSAnXDAnOwotCQot CXByaW50ZigiICAgICU0ZCAweCUwOGx4IDB4JTA4bHggJTMuM3MgJTYuNnMgMHglMDhseCAiLAot CSAgICAgICBpLCAodW5zaWduZWQgbG9uZylvZmZzZXQsICh1bnNpZ25lZCBsb25nKXNpemUsCi0J ICAgICAgIHR5cGVuYW1lLCBmbGFnbmFtZSwgKHVuc2lnbmVkIGxvbmcpaGFuZGxlKTsKLQlpZiAo bXRyciA8IDApIHByaW50Zigibm9uZVxuIik7Ci0JZWxzZSAgICAgICAgICBwcmludGYoIiU0ZFxu IiwgbXRycik7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBnZXRjbGllbnRzKGludCBmZCkKLXsK LSAgICBpbnQgICAgICAgICAgIGk7Ci0gICAgaW50ICAgICAgICAgICBhdXRoOwotICAgIGludCAg ICAgICAgICAgcGlkOwotICAgIGludCAgICAgICAgICAgdWlkOwotICAgIHVuc2lnbmVkIGxvbmcg bWFnaWM7Ci0gICAgdW5zaWduZWQgbG9uZyBpb2NzOwotICAgIGNoYXIgICAgICAgICAgYnVmWzY0 XTsKLSAgICBjaGFyICAgICAgICAgIGNtZFs0MF07Ci0gICAgaW50ICAgICAgICAgICBwcm9jZmQ7 Ci0gICAgCi0gICAgcHJpbnRmKCIgIERSSSBjbGllbnQgaW5mb3JtYXRpb246XG4iKTsKLSAgICBw cmludGYoIiAgICBhICAgcGlkICAgdWlkICAgICAgbWFnaWMgICAgIGlvY3RscyAgIHByb2dcbiIp OwotCi0gICAgZm9yIChpID0gMDsgIWRybUdldENsaWVudChmZCwgaSwgJmF1dGgsICZwaWQsICZ1 aWQsICZtYWdpYywgJmlvY3MpOyBpKyspIHsKLQlzcHJpbnRmKGJ1ZiwgIi9wcm9jLyVkL2NtZGxp bmUiLCBwaWQpOwotCW1lbXNldChjbWQsIDAsIHNpemVvZihjbWQpKTsKLQlpZiAoKHByb2NmZCA9 IG9wZW4oYnVmLCBPX1JET05MWSwgMCkpID49IDApIHsKLQkgICAgcmVhZChwcm9jZmQsIGNtZCwg c2l6ZW9mKGNtZCktMSk7Ci0JICAgIGNsb3NlKHByb2NmZCk7Ci0JfQotCWlmICgqY21kKSB7Ci0J ICAgIGNoYXIgKnB0OwotCi0JICAgIGZvciAocHQgPSBjbWQ7ICpwdDsgcHQrKykgaWYgKCFpc3By aW50KCpwdCkpICpwdCA9ICcgJzsKLQkgICAgcHJpbnRmKCIgICAgJWMgJTVkICU1ZCAlMTBsdSAl MTBsdSAgICVzXG4iLAotCQkgICBhdXRoID8gJ3knIDogJ24nLCBwaWQsIHVpZCwgbWFnaWMsIGlv Y3MsIGNtZCk7Ci0JfSBlbHNlIHsKLQkgICAgcHJpbnRmKCIgICAgJWMgJTVkICU1ZCAlMTBsdSAl MTBsdVxuIiwKLQkJICAgYXV0aCA/ICd5JyA6ICduJywgcGlkLCB1aWQsIG1hZ2ljLCBpb2NzKTsK LQl9Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBwcmludGh1bWFuKHVuc2lnbmVkIGxvbmcgdmFs dWUsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBtdWx0KQotewotICAgIGNvbnN0IGNoYXIgKnA7Ci0g ICAgZG91YmxlICAgICBmOwotCQkJCS8qIFByaW50IHdpZHRoIDUgbnVtYmVyIGluIHdpZHRoIDYg c3BhY2UgKi8KLSAgICBpZiAodmFsdWUgPCAxMDAwMDApIHsKLQlwcmludGYoIiAlNWx1IiwgdmFs dWUpOwotCXJldHVybjsKLSAgICB9Ci0KLSAgICBwID0gbmFtZTsKLSAgICBmID0gKGRvdWJsZSl2 YWx1ZSAvIChkb3VibGUpbXVsdDsKLSAgICBpZiAoZiA8IDEwLjApIHsKLQlwcmludGYoIiAlNC4y ZiVjIiwgZiwgKnApOwotCXJldHVybjsKLSAgICB9Ci0KLSAgICBwKys7Ci0gICAgZiA9IChkb3Vi bGUpdmFsdWUgLyAoZG91YmxlKW11bHQ7Ci0gICAgaWYgKGYgPCAxMC4wKSB7Ci0JcHJpbnRmKCIg JTQuMmYlYyIsIGYsICpwKTsKLQlyZXR1cm47Ci0gICAgfQotICAgIAotICAgIHArKzsKLSAgICBm ID0gKGRvdWJsZSl2YWx1ZSAvIChkb3VibGUpbXVsdDsKLSAgICBpZiAoZiA8IDEwLjApIHsKLQlw cmludGYoIiAlNC4yZiVjIiwgZiwgKnApOwotCXJldHVybjsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2 b2lkIGdldHN0YXRzKGludCBmZCwgaW50IGkpCi17Ci0gICAgZHJtU3RhdHNUIHByZXYsIGN1cnI7 Ci0gICAgdW5zaWduZWQgIGo7Ci0gICAgZG91YmxlICAgIHJhdGU7Ci0KLSAgICBwcmludGYoIiAg U3lzdGVtIHN0YXRpc3RpY3M6XG4iKTsKLQotICAgIGlmIChkcm1HZXRTdGF0cyhmZCwgJnByZXYp KSByZXR1cm47Ci0gICAgaWYgKCFpKSB7Ci0JZm9yIChqID0gMDsgaiA8IHByZXYuY291bnQ7IGor KykgewotCSAgICBwcmludGYoIiAgICAiKTsKLQkgICAgcHJpbnRmKHByZXYuZGF0YVtqXS5sb25n X2Zvcm1hdCwgcHJldi5kYXRhW2pdLmxvbmdfbmFtZSk7Ci0JICAgIGlmIChwcmV2LmRhdGFbal0u aXN2YWx1ZSkgcHJpbnRmKCIgMHglMDhseFxuIiwgcHJldi5kYXRhW2pdLnZhbHVlKTsKLQkgICAg ZWxzZSAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiAlMTBsdVxuIiwgcHJldi5kYXRhW2pd LnZhbHVlKTsKLQl9Ci0JcmV0dXJuOwotICAgIH0KLQotICAgIHByaW50ZigiICAgICIpOwotICAg IGZvciAoaiA9IDA7IGogPCBwcmV2LmNvdW50OyBqKyspCi0JaWYgKCFwcmV2LmRhdGFbal0udmVy Ym9zZSkgewotCSAgICBwcmludGYoIiAiKTsKLQkgICAgcHJpbnRmKHByZXYuZGF0YVtqXS5yYXRl X2Zvcm1hdCwgcHJldi5kYXRhW2pdLnJhdGVfbmFtZSk7Ci0JfQotICAgIHByaW50ZigiXG4iKTsK LSAgICAKLSAgICBmb3IgKDs7KSB7Ci0Jc2xlZXAoaSk7Ci0JaWYgKGRybUdldFN0YXRzKGZkLCAm Y3VycikpIHJldHVybjsKLQlwcmludGYoIiAgICAiKTsKLQlmb3IgKGogPSAwOyBqIDwgY3Vyci5j b3VudDsgaisrKSB7Ci0JICAgIGlmIChjdXJyLmRhdGFbal0udmVyYm9zZSkgY29udGludWU7Ci0J ICAgIGlmIChjdXJyLmRhdGFbal0uaXN2YWx1ZSkgewotCQlwcmludGYoIiAlMDhseCIsIGN1cnIu ZGF0YVtqXS52YWx1ZSk7Ci0JICAgIH0gZWxzZSB7Ci0JCXJhdGUgPSAoY3Vyci5kYXRhW2pdLnZh bHVlIC0gcHJldi5kYXRhW2pdLnZhbHVlKSAvIChkb3VibGUpaTsKLQkJcHJpbnRodW1hbihyYXRl LCBjdXJyLmRhdGFbal0ubXVsdF9uYW1lcywgY3Vyci5kYXRhW2pdLm11bHQpOwotCSAgICB9Ci0J fQotCXByaW50ZigiXG4iKTsKLQltZW1jcHkoJnByZXYsICZjdXJyLCBzaXplb2YocHJldikpOwot ICAgIH0KLSAgICAKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICAg IGludCAgYzsKLSAgICBpbnQgIG1hc2sgICAgID0gMDsKLSAgICBpbnQgIG1pbm9yICAgID0gMDsK LSAgICBpbnQgIGludGVydmFsID0gMDsKLSAgICBpbnQgIGZkOwotICAgIGNoYXIgYnVmWzY0XTsK LSAgICBpbnQgIGk7Ci0KLSAgICB3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgImF2bWNz Yk06aToiKSkgIT0gRU9GKQotCXN3aXRjaCAoYykgewotCWNhc2UgJ2EnOiBtYXNrID0gfjA7ICAg ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQljYXNlICd2JzogbWFzayB8PSBEUk1fVkVS U0lPTjsgICAgICAgICAgICAgICAgYnJlYWs7Ci0JY2FzZSAnbSc6IG1hc2sgfD0gRFJNX01FTU9S WTsgICAgICAgICAgICAgICAgIGJyZWFrOwotCWNhc2UgJ2MnOiBtYXNrIHw9IERSTV9DTElFTlRT OyAgICAgICAgICAgICAgICBicmVhazsKLQljYXNlICdzJzogbWFzayB8PSBEUk1fU1RBVFM7ICAg ICAgICAgICAgICAgICAgYnJlYWs7Ci0JY2FzZSAnYic6IG1hc2sgfD0gRFJNX0JVU0lEOyAgICAg ICAgICAgICAgICAgIGJyZWFrOwotCWNhc2UgJ2knOiBpbnRlcnZhbCA9IHN0cnRvbChvcHRhcmcs IE5VTEwsIDApOyBicmVhazsKLQljYXNlICdNJzogbWlub3IgPSBzdHJ0b2wob3B0YXJnLCBOVUxM LCAwKTsgICAgYnJlYWs7Ci0JZGVmYXVsdDoKLQkgICAgZnByaW50Ziggc3RkZXJyLCAiVXNhZ2U6 IGRyaXN0YXQgW29wdGlvbnNdXG5cbiIgKTsKLQkgICAgZnByaW50Ziggc3RkZXJyLCAiRGlzcGxh eXMgRFJNIGluZm9ybWF0aW9uLiBVc2Ugd2l0aCBubyBhcmd1bWVudHMgdG8gZGlzcGxheSBhdmFp bGFibGUgY2FyZHMuXG5cbiIgKTsKLQkgICAgZnByaW50Ziggc3RkZXJyLCAiICAtYSAgICAgICAg ICAgIFNob3cgYWxsIGF2YWlsYWJsZSBpbmZvcm1hdGlvblxuIiApOwotCSAgICBmcHJpbnRmKCBz dGRlcnIsICIgIC1iICAgICAgICAgICAgU2hvdyBEUk0gYnVzIElEJ3NcbiIgKTsKLQkgICAgZnBy aW50Ziggc3RkZXJyLCAiICAtYyAgICAgICAgICAgIERpc3BsYXkgaW5mb3JtYXRpb24gYWJvdXQg RFJNIGNsaWVudHNcbiIgKTsKLQkgICAgZnByaW50Ziggc3RkZXJyLCAiICAtaSBbaW50ZXJ2YWxd IENvbnRpbnVvdXNseSBkaXNwbGF5IHN0YXRpc3RpY3MgZXZlcnkgW2ludGVydmFsXSBzZWNvbmRz XG4iICk7Ci0JICAgIGZwcmludGYoIHN0ZGVyciwgIiAgLXYgICAgICAgICAgICBEaXNwbGF5IERS TSBtb2R1bGUgYW5kIGNhcmQgdmVyc2lvbiBpbmZvcm1hdGlvblxuIiApOwotCSAgICBmcHJpbnRm KCBzdGRlcnIsICIgIC1tICAgICAgICAgICAgRGlzcGxheSBtZW1vcnkgdXNlIGluZm9ybWF0aW9u XG4iICk7Ci0JICAgIGZwcmludGYoIHN0ZGVyciwgIiAgLXMgICAgICAgICAgICBEaXNwbGF5IERS TSBzdGF0aXN0aWNzXG4iICk7Ci0JICAgIGZwcmludGYoIHN0ZGVyciwgIiAgLU0gW21pbm9yXSAg ICBTZWxlY3QgY2FyZCBieSBtaW5vciBudW1iZXJcbiIgKTsKLQkgICAgcmV0dXJuIDE7Ci0JfQot Ci0gICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIGlmICghbWlub3IgfHwgaSA9PSBtaW5vcikg ewotCXNwcmludGYoYnVmLCBEUk1fREVWX05BTUUsIERSTV9ESVJfTkFNRSwgaSk7Ci0JZmQgPSBk cm1PcGVuTWlub3IoaSwgMSwgRFJNX05PREVfUFJJTUFSWSk7Ci0JaWYgKGZkID49IDApIHsKLQkg ICAgcHJpbnRmKCIlc1xuIiwgYnVmKTsKLQkgICAgaWYgKG1hc2sgJiBEUk1fQlVTSUQpICAgZ2V0 YnVzaWQoZmQpOwotCSAgICBpZiAobWFzayAmIERSTV9WRVJTSU9OKSBnZXR2ZXJzaW9uKGZkKTsK LQkgICAgaWYgKG1hc2sgJiBEUk1fTUVNT1JZKSAgZ2V0dm0oZmQpOwotCSAgICBpZiAobWFzayAm IERSTV9DTElFTlRTKSBnZXRjbGllbnRzKGZkKTsKLQkgICAgaWYgKG1hc2sgJiBEUk1fU1RBVFMp ICAgZ2V0c3RhdHMoZmQsIGludGVydmFsKTsKLQkgICAgY2xvc2UoZmQpOwotCX0KLSAgICB9Ci0K LSAgICByZXR1cm4gMDsgCi19CmRpZmYgLS1naXQgYS90ZXN0cy9kcm10ZXN0LmMgYi90ZXN0cy9k cm10ZXN0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMjk5NGEuLjAwMDAwMDAK LS0tIGEvdGVzdHMvZHJtdGVzdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTM1ICswLDAgQEAKLS8q Ci0gKiBDb3B5cmlnaHQgwqkgMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbgotICoKLSAqIFBlcm1pc3Np b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp bmluZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRh dGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUg d2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhl IHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs IHN1YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQg dG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0 byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhl IGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1 ZGluZyB0aGUgbmV4dAotICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29w aWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQotICogU29mdHdhcmUuCi0gKgotICog VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z IEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg VE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxM Ci0gKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBD TEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElP TiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKLSAqIEZST00sIE9VVCBP RiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIg REVBTElOR1MKLSAqIElOIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKiBBdXRob3JzOgotICogICAgRXJp YyBBbmhvbHQgPGVyaWNAYW5ob2x0Lm5ldD4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPHN0cmluZy5o PgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8Zm5tYXRjaC5oPgotI2luY2x1ZGUgPHN5 cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8c3lzL2lvY3RsLmg+Ci0jaW5jbHVkZSAiZHJtdGVzdC5oIgot Ci0jZGVmaW5lIExJQlVERVZfSV9LTk9XX1RIRV9BUElfSVNfU1VCSkVDVF9UT19DSEFOR0UKLSNp bmNsdWRlIDxsaWJ1ZGV2Lmg+Ci0KLXN0YXRpYyBpbnQgaXNfbWFzdGVyKGludCBmZCkKLXsKLQlk cm1fY2xpZW50X3QgY2xpZW50OwotCWludCByZXQ7Ci0KLQkvKiBDaGVjayB0aGF0IHdlJ3JlIHRo ZSBvbmx5IG9wZW5lciBhbmQgYXV0aGVkLiAqLwotCWNsaWVudC5pZHggPSAwOwotCXJldCA9IGlv Y3RsKGZkLCBEUk1fSU9DVExfR0VUX0NMSUVOVCwgJmNsaWVudCk7Ci0JYXNzZXJ0IChyZXQgPT0g MCk7Ci0JaWYgKCFjbGllbnQuYXV0aCkKLQkJcmV0dXJuIDA7Ci0JY2xpZW50LmlkeCA9IDE7Ci0J cmV0ID0gaW9jdGwoZmQsIERSTV9JT0NUTF9HRVRfQ0xJRU5ULCAmY2xpZW50KTsKLQlpZiAocmV0 ICE9IC0xIHx8IGVycm5vICE9IEVJTlZBTCkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gMTsKLX0K LQotLyoqIE9wZW4gdGhlIGZpcnN0IERSTSBkZXZpY2UgbWF0Y2hpbmcgdGhlIGNyaXRlcmlhICov Ci1pbnQgZHJtX29wZW5fbWF0Y2hpbmcoY29uc3QgY2hhciAqcGNpX2dsb2IsIGludCBmbGFncykK LXsKLQlzdHJ1Y3QgdWRldiAqdWRldjsKLQlzdHJ1Y3QgdWRldl9lbnVtZXJhdGUgKmU7Ci0Jc3Ry dWN0IHVkZXZfZGV2aWNlICpkZXZpY2UsICpwYXJlbnQ7Ci0gICAgICAgIHN0cnVjdCB1ZGV2X2xp c3RfZW50cnkgKmVudHJ5OwotCWNvbnN0IGNoYXIgKnBjaV9pZCwgKnBhdGg7Ci0JY29uc3QgY2hh ciAqdXN1YiwgKmRub2RlOwotCWludCBmZDsKLQotCXVkZXYgPSB1ZGV2X25ldygpOwotCWlmICh1 ZGV2ID09IE5VTEwpIHsKLQkJZnByaW50ZihzdGRlcnIsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSB1 ZGV2IGNvbnRleHRcbiIpOwotCQlhYm9ydCgpOwotCX0KLQotCWZkID0gLTE7Ci0JZSA9IHVkZXZf ZW51bWVyYXRlX25ldyh1ZGV2KTsKLQl1ZGV2X2VudW1lcmF0ZV9hZGRfbWF0Y2hfc3Vic3lzdGVt KGUsICJkcm0iKTsKLSAgICAgICAgdWRldl9lbnVtZXJhdGVfc2Nhbl9kZXZpY2VzKGUpOwotICAg ICAgICB1ZGV2X2xpc3RfZW50cnlfZm9yZWFjaChlbnRyeSwgdWRldl9lbnVtZXJhdGVfZ2V0X2xp c3RfZW50cnkoZSkpIHsKLQkJcGF0aCA9IHVkZXZfbGlzdF9lbnRyeV9nZXRfbmFtZShlbnRyeSk7 Ci0JCWRldmljZSA9IHVkZXZfZGV2aWNlX25ld19mcm9tX3N5c3BhdGgodWRldiwgcGF0aCk7Ci0J CXBhcmVudCA9IHVkZXZfZGV2aWNlX2dldF9wYXJlbnQoZGV2aWNlKTsKLQkJdXN1YiA9IHVkZXZf ZGV2aWNlX2dldF9zdWJzeXN0ZW0ocGFyZW50KTsKLQkJLyogRmlsdGVyIG91dCBLTVMgb3V0cHV0 IGRldmljZXMuICovCi0JCWlmICghdXN1YiB8fCAoc3RyY21wKHVzdWIsICJwY2kiKSAhPSAwKSkK LQkJCWNvbnRpbnVlOwotCQlwY2lfaWQgPSB1ZGV2X2RldmljZV9nZXRfcHJvcGVydHlfdmFsdWUo cGFyZW50LCAiUENJX0lEIik7Ci0JCWlmIChmbm1hdGNoKHBjaV9nbG9iLCBwY2lfaWQsIDApICE9 IDApCi0JCQljb250aW51ZTsKLQkJZG5vZGUgPSB1ZGV2X2RldmljZV9nZXRfZGV2bm9kZShkZXZp Y2UpOwotCQlpZiAoc3Ryc3RyKGRub2RlLCAiY29udHJvbCIpKQotCQkJY29udGludWU7Ci0JCWZk ID0gb3Blbihkbm9kZSwgT19SRFdSKTsKLQkJaWYgKGZkIDwgMCkKLQkJCWNvbnRpbnVlOwotCQlp ZiAoKGZsYWdzICYgRFJNX1RFU1RfTUFTVEVSKSAmJiAhaXNfbWFzdGVyKGZkKSkgewotCQkJY2xv c2UoZmQpOwotCQkJZmQgPSAtMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJYnJlYWs7Ci0JfQot ICAgICAgICB1ZGV2X2VudW1lcmF0ZV91bnJlZihlKTsKLQl1ZGV2X3VucmVmKHVkZXYpOwotCi0J cmV0dXJuIGZkOwotfQotCi1pbnQgZHJtX29wZW5fYW55KHZvaWQpCi17Ci0JaW50IGZkID0gZHJt X29wZW5fbWF0Y2hpbmcoIio6KiIsIDApOwotCi0JaWYgKGZkIDwgMCkgewotCQlmcHJpbnRmKHN0 ZGVyciwgImZhaWxlZCB0byBvcGVuIGFueSBkcm0gZGV2aWNlXG4iKTsKLQkJZXhpdCgwKTsKLQl9 Ci0KLQlyZXR1cm4gZmQ7Ci19Ci0KLS8qKgotICogT3BlbiB0aGUgZmlyc3QgRFJNIGRldmljZSB3 ZSBjYW4gZmluZCB3aGVyZSB3ZSBlbmQgdXAgYmVpbmcgdGhlIG1hc3Rlci4KLSAqLwotaW50IGRy bV9vcGVuX2FueV9tYXN0ZXIodm9pZCkKLXsKLQlpbnQgZmQgPSBkcm1fb3Blbl9tYXRjaGluZygi KjoqIiwgRFJNX1RFU1RfTUFTVEVSKTsKLQotCWlmIChmZCA8IDApIHsKLQkJZnByaW50ZihzdGRl cnIsICJmYWlsZWQgdG8gb3BlbiBhbnkgZHJtIGRldmljZVxuIik7Ci0JCWV4aXQoMCk7Ci0JfQot Ci0JcmV0dXJuIGZkOwotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9kcm10ZXN0LmggYi90ZXN0cy9k cm10ZXN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1YmI0NDYuLjAwMDAwMDAK LS0tIGEvdGVzdHMvZHJtdGVzdC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoK LSAqIENvcHlyaWdodCDCqSAyMDA3IEludGVsIENvcnBvcmF0aW9uCi0gKgotICogUGVybWlzc2lv biBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWlu aW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0 aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3 aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUg cmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwg c3VibGljZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0 byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRv IGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUg YWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVk aW5nIHRoZSBuZXh0Ci0gKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3Bp ZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCi0gKiBTb2Z0d2FyZS4KLSAqCi0gKiBU SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg S0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBU TyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwK LSAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENM QUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9O IE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwotICogRlJPTSwgT1VUIE9G IE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBE RUFMSU5HUwotICogSU4gVEhFIFNPRlRXQVJFLgotICoKLSAqIEF1dGhvcnM6Ci0gKiAgICBFcmlj IEFuaG9sdCA8ZXJpY0BhbmhvbHQubmV0PgotICoKLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4K LSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxhc3Nl cnQuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotCi0jaW5jbHVkZSAieGY4NmRybS5oIgotCi0jZGVm aW5lIERSTV9URVNUX01BU1RFUiAweDAxCi0KLWludCBkcm1fb3Blbl9hbnkodm9pZCk7Ci1pbnQg ZHJtX29wZW5fYW55X21hc3Rlcih2b2lkKTsKLWludCBkcm1fb3Blbl9tYXRjaGluZyhjb25zdCBj aGFyICpwY2lfZ2xvYiwgaW50IGZsYWdzKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2dldGNsaWVudC5j IGIvdGVzdHMvZ2V0Y2xpZW50LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4MWNl MTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZ2V0Y2xpZW50LmMKKysrIC9kZXYvbnVsbApAQCAtMSw2 MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IMKpIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24KLSAq Ci0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55 IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lh dGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4g dGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0 YXRpb24KLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNo LCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBT b2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBp cyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25z OgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g bm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKLSAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVk ZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKLSAqIFNvZnR3 YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdB UlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVU IE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBO TyBFVkVOVCBTSEFMTAotICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElB QkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhF UiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCi0g KiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUg VVNFIE9SIE9USEVSIERFQUxJTkdTCi0gKiBJTiBUSEUgU09GVFdBUkUuCi0gKgotICogQXV0aG9y czoKLSAqICAgIEVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+Ci0gKgotICovCi0KLSNpbmNs dWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KLSNpbmNsdWRlICJkcm10ZXN0 LmgiCi0KLS8qKgotICogQ2hlY2tzIERSTV9JT0NUTF9HRVRfQ0xJRU5ULgotICovCi1pbnQgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0JaW50IGZkLCByZXQ7Ci0JZHJtX2NsaWVudF90 IGNsaWVudDsKLQotCWZkID0gZHJtX29wZW5fYW55KCk7Ci0KLQkvKiBMb29rIGZvciBjbGllbnQg aW5kZXggMC4gIFRoaXMgc2hvdWxkIGV4aXN0IHdoZXRoZXIgd2UncmUgb3BlcmF0aW5nCi0JICog b24gYW4gb3RoZXJ3aXNlIHVudXNlZCBkcm0gZGV2aWNlLCBvciB0aGUgWCBTZXJ2ZXIgaXMgcnVu bmluZyBvbgotCSAqIHRoZSBkZXZpY2UuCi0JICovCi0JY2xpZW50LmlkeCA9IDA7Ci0JcmV0ID0g aW9jdGwoZmQsIERSTV9JT0NUTF9HRVRfQ0xJRU5ULCAmY2xpZW50KTsKLQlhc3NlcnQocmV0ID09 IDApOwotCi0JLyogTG9vayBmb3Igc29tZSBhYnN1cmQgY2xpZW50IGluZGV4IGFuZCBtYWtlIHN1 cmUgaXQncyBpbnZhbGlkLgotCSAqIFRoZSBEUk0gZHJpdmVycyBjdXJyZW50bHkgYWx3YXlzIHJl dHVybiBkYXRhLCBzbyB0aGUgdXNlciBoYXMKLQkgKiBubyByZWFsIHdheSB0byBkZXRlY3Qgd2hl biB0aGUgbGlzdCBoYXMgdGVybWluYXRlZC4gIFRoYXQncyBiYWQsCi0JICogYW5kIHRoaXMgdGVz dCBpcyBYRkFJTCBhcyBhIHJlc3VsdC4KLQkgKi8KLQljbGllbnQuaWR4ID0gMHg3ZmZmZmZmZjsK LQlyZXQgPSBpb2N0bChmZCwgRFJNX0lPQ1RMX0dFVF9DTElFTlQsICZjbGllbnQpOwotCWFzc2Vy dChyZXQgPT0gLTEgJiYgZXJybm8gPT0gRUlOVkFMKTsKLQotCWNsb3NlKGZkKTsKLQlyZXR1cm4g MDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2dldHN0YXRzLmMgYi90ZXN0cy9nZXRzdGF0cy5jCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTdkMjk5Li4wMDAwMDAwCi0tLSBhL3Rlc3Rz L2dldHN0YXRzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKgotICogQ29weXJp Z2h0IMKpIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVi eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICog Y29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMg KHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVz dHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8g dXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNl LAotICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBw ZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1 YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5 cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5l eHQKLSAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJz dGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKLSAqIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FS RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBS RVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAotICogVEhFIEFV VEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFH RVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJB Q1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCi0gKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09O TkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCi0g KiBJTiBUSEUgU09GVFdBUkUuCi0gKgotICogQXV0aG9yczoKLSAqICAgIEVyaWMgQW5ob2x0IDxl cmljQGFuaG9sdC5uZXQ+Ci0gKgotICovCi0KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRl IDxzeXMvaW9jdGwuaD4KLSNpbmNsdWRlICJkcm10ZXN0LmgiCi0KLS8qKgotICogQ2hlY2tzIERS TV9JT0NUTF9HRVRfU1RBVFMuCi0gKgotICogSSBkb24ndCBjYXJlIHRvbyBtdWNoIGFib3V0IHRo ZSBhY3R1YWwgY29udGVudHMsIGp1c3QgdGhhdCB0aGUga2VybmVsCi0gKiBkb2Vzbid0IGNyYXNo LgotICovCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0JaW50IGZkLCByZXQ7 Ci0JZHJtX3N0YXRzX3Qgc3RhdHM7Ci0KLQlmZCA9IGRybV9vcGVuX2FueSgpOwotCi0JcmV0ID0g aW9jdGwoZmQsIERSTV9JT0NUTF9HRVRfU1RBVFMsICZzdGF0cyk7Ci0JYXNzZXJ0KHJldCA9PSAw KTsKLQotCWNsb3NlKGZkKTsKLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2dldHZl cnNpb24uYyBiL3Rlc3RzL2dldHZlcnNpb24uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggYmNlYzQ2OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9nZXR2ZXJzaW9uLmMKKysrIC9kZXYvbnVs bApAQCAtMSw0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IMKpIDIwMDcgSW50ZWwgQ29ycG9y YXRpb24KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJn ZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFu ZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRv IGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRo b3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdl LCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVz IG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBT b2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBj b25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBl cm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKLSAqIHBhcmFncmFwaCkgc2hhbGwg YmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUK LSAqIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBX SVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNM VURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1F TlQuICBJTiBOTyBFVkVOVCBTSEFMTAotICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERF UlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElU WSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBB UklTSU5HCi0gKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FS RSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCi0gKiBJTiBUSEUgU09GVFdBUkUuCi0gKgot ICogQXV0aG9yczoKLSAqICAgIEVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+Ci0gKgotICov Ci0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlICJkcm10ZXN0LmgiCi0KLS8qKgotICog Q2hlY2tzIERSTV9JT0NUTF9HRVRfVkVSU0lPTiBhbmQgbGliZHJtJ3MgZHJtR2V0VmVyc2lvbigp IGludGVyZmFjZSB0byBpdC4KLSAqLwotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQot ewotCWludCBmZDsKLQlkcm1WZXJzaW9uUHRyIHY7Ci0KLQlmZCA9IGRybV9vcGVuX2FueSgpOwot CXYgPSBkcm1HZXRWZXJzaW9uKGZkKTsKLQlhc3NlcnQoc3RybGVuKHYtPm5hbWUpICE9IDApOwot CWFzc2VydChzdHJsZW4odi0+ZGF0ZSkgIT0gMCk7Ci0JYXNzZXJ0KHN0cmxlbih2LT5kZXNjKSAh PSAwKTsKLQlpZiAoc3RyY21wKHYtPm5hbWUsICJpOTE1IikgPT0gMCkKLQkJYXNzZXJ0KHYtPnZl cnNpb25fbWFqb3IgPj0gMSk7Ci0JZHJtRnJlZVZlcnNpb24odik7Ci0JY2xvc2UoZmQpOwotCXJl dHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvbG9jay5jIGIvdGVzdHMvbG9jay5jCmRlbGV0 ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjU2ODFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2xv Y2suYworKysgL2Rldi9udWxsCkBAIC0xLDI2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IMKp IDIwMDcgSW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFu dGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBv ZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAi U29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rp b24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gdXNlLCBj b3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICog YW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25z IHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3Qg dG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQg bm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKLSAq IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlh bCBwb3J0aW9ucyBvZiB0aGUKLSAqIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9S Ci0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF IEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAotICogVEhFIEFVVEhPUlMg T1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1Ig T1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRP UlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCi0gKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElP TiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCi0gKiBJTiBU SEUgU09GVFdBUkUuCi0gKgotICogQXV0aG9yczoKLSAqICAgIEVyaWMgQW5ob2x0IDxlcmljQGFu aG9sdC5uZXQ+Ci0gKgotICovCi0KLS8qKiBAZmlsZSBsb2NrLmMKLSAqIFRlc3RzIHZhcmlvdXMg cG90ZW50aWFsIGZhaWx1cmVzIG9mIHRoZSBEUk0gbG9ja2luZyBtZWNoYW5pc21zCi0gKi8KLQot I2luY2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgotI2luY2x1ZGUgImRy bXRlc3QuaCIKLQotZW51bSBhdXRoX2V2ZW50IHsKLQlTRVJWRVJfUkVBRFksCi0JQ0xJRU5UX01B R0lDLAotCVNFUlZFUl9MT0NLRUQsCi0JQ0xJRU5UX0xPQ0tFRCwKLX07Ci0KLWludCBjb21tZmRb Ml07Ci11bnNpZ25lZCBpbnQgbG9jazEgPSAweDAwMDAxMTExOwotdW5zaWduZWQgaW50IGxvY2sy ID0gMHgwMDAwMjIyMjsKLQotLyogcmV0dXJuIHRpbWUgaW4gbWlsbGlzZWNvbmRzICovCi1zdGF0 aWMgdW5zaWduZWQgaW50Ci1nZXRfbWlsbGlzKCkKLXsKLQlzdHJ1Y3QgdGltZXZhbCB0djsKLQot CWdldHRpbWVvZmRheSgmdHYsIE5VTEwpOwotCXJldHVybiB0di50dl9zZWMgKiAxMDAwICsgdHYu dHZfdXNlYyAvIDEwMDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi13YWl0X2V2ZW50KGludCBwaXBlLCBl bnVtIGF1dGhfZXZlbnQgZXhwZWN0ZWRfZXZlbnQpCi17Ci0JaW50IHJldDsKLQllbnVtIGF1dGhf ZXZlbnQgZXZlbnQ7Ci0JdW5zaWduZWQgY2hhciBpbjsKLQotCXJldCA9IHJlYWQoY29tbWZkW3Bp cGVdLCAmaW4sIDEpOwotCWlmIChyZXQgPT0gLTEpCi0JCWVycigxLCAicmVhZCBlcnJvciIpOwot CWV2ZW50ID0gaW47Ci0KLQlpZiAoZXZlbnQgIT0gZXhwZWN0ZWRfZXZlbnQpCi0JCWVycngoMSwg InVuZXhwZWN0ZWQgZXZlbnQ6ICVkXG4iLCBldmVudCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zZW5k X2V2ZW50KGludCBwaXBlLCBlbnVtIGF1dGhfZXZlbnQgc2VuZF9ldmVudCkKLXsKLQlpbnQgcmV0 OwotCXVuc2lnbmVkIGNoYXIgZXZlbnQ7Ci0KLQlldmVudCA9IHNlbmRfZXZlbnQ7Ci0JcmV0ID0g d3JpdGUoY29tbWZkW3BpcGVdLCAmZXZlbnQsIDEpOwotCWlmIChyZXQgPT0gLTEpCi0JCWVycigx LCAiZmFpbGVkIHRvIHNlbmQgZXZlbnQgJWQiLCBldmVudCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1j bGllbnRfYXV0aChpbnQgZHJtZmQpCi17Ci0Jc3RydWN0IGRybV9hdXRoIGF1dGg7Ci0JaW50IHJl dDsKLQotCS8qIEdldCBhIGNsaWVudCBtYWdpYyBudW1iZXIgYW5kIHBhc3MgaXQgdG8gdGhlIG1h c3RlciBmb3IgYXV0aC4gKi8KLQlyZXQgPSBpb2N0bChkcm1mZCwgRFJNX0lPQ1RMX0dFVF9NQUdJ QywgJmF1dGgpOwotCWlmIChyZXQgPT0gLTEpCi0JCWVycigxLCAiQ291bGRuJ3QgZ2V0IGNsaWVu dCBtYWdpYyIpOwotCXNlbmRfZXZlbnQoMCwgQ0xJRU5UX01BR0lDKTsKLQlyZXQgPSB3cml0ZShj b21tZmRbMF0sICZhdXRoLm1hZ2ljLCBzaXplb2YoYXV0aC5tYWdpYykpOwotCWlmIChyZXQgPT0g LTEpCi0JCWVycigxLCAiQ291bGRuJ3Qgd3JpdGUgYXV0aCBkYXRhIik7Ci19Ci0KLXN0YXRpYyB2 b2lkCi1zZXJ2ZXJfYXV0aChpbnQgZHJtZmQpCi17Ci0Jc3RydWN0IGRybV9hdXRoIGF1dGg7Ci0J aW50IHJldDsKLQotCXNlbmRfZXZlbnQoMSwgU0VSVkVSX1JFQURZKTsKLQl3YWl0X2V2ZW50KDEs IENMSUVOVF9NQUdJQyk7Ci0JcmV0ID0gcmVhZChjb21tZmRbMV0sICZhdXRoLm1hZ2ljLCBzaXpl b2YoYXV0aC5tYWdpYykpOwotCWlmIChyZXQgPT0gLTEpCi0JCWVycigxLCAiRmFpbHVyZSB0byBy ZWFkIGNsaWVudCBtYWdpYyIpOwotCi0JcmV0ID0gaW9jdGwoZHJtZmQsIERSTV9JT0NUTF9BVVRI X01BR0lDLCAmYXV0aCk7Ci0JaWYgKHJldCA9PSAtMSkKLQkJZXJyKDEsICJGYWlsdXJlIHRvIGF1 dGhlbnRpY2F0ZSBjbGllbnQgbWFnaWNcbiIpOwotfQotCi0vKiogVGVzdHMgdGhhdCBsb2NraW5n IGlzIHN1Y2Nlc3NmdWwgaW4gbm9ybWFsIGNvbmRpdGlvbnMgKi8KLXN0YXRpYyB2b2lkCi10ZXN0 X2xvY2tfdW5sb2NrKGludCBkcm1mZCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gZHJtR2V0TG9j ayhkcm1mZCwgbG9jazEsIDApOwotCWlmIChyZXQgIT0gMCkKLQkJZXJyKDEsICJMb2NraW5nIGZh aWxlZCIpOwotCXJldCA9IGRybVVubG9jayhkcm1mZCwgbG9jazEpOwotCWlmIChyZXQgIT0gMCkK LQkJZXJyKDEsICJVbmxvY2tpbmcgZmFpbGVkIik7Ci19Ci0KLS8qKiBUZXN0cyB0aGF0IHVubG9j a2luZyB0aGUgbG9jayB3aGlsZSBpdCdzIG5vdCBoZWxkIHdvcmtzIGNvcnJlY3RseSAqLwotc3Rh dGljIHZvaWQKLXRlc3RfdW5sb2NrX3VubG9ja2VkKGludCBkcm1mZCkKLXsKLQlpbnQgcmV0Owot Ci0JcmV0ID0gZHJtVW5sb2NrKGRybWZkLCBsb2NrMSk7Ci0JaWYgKHJldCA9PSAwKQotCQllcnIo MSwgIlVubG9ja2luZyB1bmxvY2tlZCBsb2NrIHN1Y2NlZWRlZCIpOwotfQotCi0vKiogVGVzdHMg dGhhdCB1bmxvY2tpbmcgYSBsb2NrIGhlbGQgYnkgYW5vdGhlciBjb250ZXh0IGZhaWxzIGFwcHJv cHJpYXRlbHkgKi8KLXN0YXRpYyB2b2lkCi10ZXN0X3VubG9ja191bm93bmVkKGludCBkcm1mZCkK LXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gZHJtR2V0TG9jayhkcm1mZCwgbG9jazEsIDApOwotCWFz c2VydChyZXQgPT0gMCk7Ci0JcmV0ID0gZHJtVW5sb2NrKGRybWZkLCBsb2NrMik7Ci0JaWYgKHJl dCA9PSAwKQotCQllcnJ4KDEsICJVbmxvY2tpbmcgb3RoZXIgY29udGV4dCdzIGxvY2sgc3VjY2Vl ZGVkIik7Ci0JcmV0ID0gZHJtVW5sb2NrKGRybWZkLCBsb2NrMSk7Ci0JYXNzZXJ0KHJldCA9PSAw KTsKLX0KLQotLyoqCi0gKiBUZXN0cyB0aGF0IGFuIG9wZW4vY2xvc2UgYnkgdGhlIHNhbWUgcHJv Y2VzcyBkb2Vzbid0IHJlc3VsdCBpbiB0aGUgbG9jawotICogYmVpbmcgZHJvcHBlZC4KLSAqLwot c3RhdGljIHZvaWQgdGVzdF9vcGVuX2Nsb3NlX2xvY2tlZChkcm1mZCkKLXsKLQlpbnQgcmV0LCB0 ZW1wZmQ7Ci0KLQlyZXQgPSBkcm1HZXRMb2NrKGRybWZkLCBsb2NrMSwgMCk7Ci0JYXNzZXJ0KHJl dCA9PSAwKTsKLQkvKiBYWFg6IE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhpcyBpcyB0aGUgc2Ft ZSBkZXZpY2UgYXMgZHJtZmQgKi8KLQl0ZW1wZmQgPSBkcm1fb3Blbl9hbnkoKTsKLQljbG9zZSh0 ZW1wZmQpOwotCXJldCA9IGRybVVubG9jayhkcm1mZCwgbG9jazEpOwotCWlmIChyZXQgIT0gMCkK LQkJZXJyeCgxLCAibG9jayBsb3N0IGR1cmluZyBvcGVuL2Nsb3NlIGJ5IHNhbWUgcGlkIik7Ci19 Ci0KLXN0YXRpYyB2b2lkIGNsaWVudCgpCi17Ci0JaW50IGRybWZkLCByZXQ7Ci0JdW5zaWduZWQg aW50IHRpbWU7Ci0KLQl3YWl0X2V2ZW50KDAsIFNFUlZFUl9SRUFEWSk7Ci0KLQkvKiBYWFg6IFNo b3VsZCBtYWtlIHN1cmUgd2Ugb3BlbiB0aGUgc2FtZSBEUk0gYXMgdGhlIG1hc3RlciAqLwotCWRy bWZkID0gZHJtX29wZW5fYW55KCk7Ci0KLQljbGllbnRfYXV0aChkcm1mZCk7Ci0KLQkvKiBXYWl0 IGZvciB0aGUgc2VydmVyIHRvIGdyYWIgdGhlIGxvY2ssIHRoZW4gZ3JhYiBpdCBvdXJzZWx2ZXMg KHRvCi0JICogY29udGVzdCBpdCkuICBIb3BlZnVsbHkgd2UgaGl0IGl0IHdpdGhpbiB0aGUgd2lu ZG93IG9mIHdoZW4gdGhlCi0JICogc2VydmVyIGxvY2tzLgotCSAqLwotCXdhaXRfZXZlbnQoMCwg U0VSVkVSX0xPQ0tFRCk7Ci0JcmV0ID0gZHJtR2V0TG9jayhkcm1mZCwgbG9jazIsIDApOwotCXRp bWUgPSBnZXRfbWlsbGlzKCk7Ci0JaWYgKHJldCAhPSAwKQotCQllcnIoMSwgIkZhaWxlZCB0byBn ZXQgbG9jayBvbiBjbGllbnRcbiIpOwotCWRybVVubG9jayhkcm1mZCwgbG9jazIpOwotCi0JLyog VGVsbCB0aGUgc2VydmVyIHRoYXQgb3VyIGxvY2tpbmcgY29tcGxldGVkLCBhbmQgd2hlbiBpdCBk aWQgKi8KLQlzZW5kX2V2ZW50KDAsIENMSUVOVF9MT0NLRUQpOwotCXJldCA9IHdyaXRlKGNvbW1m ZFswXSwgJnRpbWUsIHNpemVvZih0aW1lKSk7Ci0KLQljbG9zZShkcm1mZCk7Ci0JZXhpdCgwKTsK LX0KLQotc3RhdGljIHZvaWQgc2VydmVyKCkKLXsKLQlpbnQgZHJtZmQsIHRlbXBmZCwgcmV0Owot CXVuc2lnbmVkIGludCBjbGllbnRfdGltZSwgdW5sb2NrX3RpbWU7Ci0KLQlkcm1mZCA9IGRybV9v cGVuX2FueV9tYXN0ZXIoKTsKLQotCXRlc3RfbG9ja191bmxvY2soZHJtZmQpOwotCXRlc3RfdW5s b2NrX3VubG9ja2VkKGRybWZkKTsKLQl0ZXN0X3VubG9ja191bm93bmVkKGRybWZkKTsKLQl0ZXN0 X29wZW5fY2xvc2VfbG9ja2VkKGRybWZkKTsKLQotCS8qIFBlcmZvcm0gdGhlIGF1dGhlbnRpY2F0 aW9uIHNlcXVlbmNlIHdpdGggdGhlIGNsaWVudC4gKi8KLQlzZXJ2ZXJfYXV0aChkcm1mZCk7Ci0K LQkvKiBOb3csIHRlc3QgdGhhdCB0aGUgY2xpZW50IGF0dGVtcHRpbmcgdG8gbG9jayB3aGlsZSB0 aGUgc2VydmVyCi0JICogaG9sZHMgdGhlIGxvY2sgd29ya3MgY29ycmVjdGx5LgotCSAqLwotCXJl dCA9IGRybUdldExvY2soZHJtZmQsIGxvY2sxLCAwKTsKLQlhc3NlcnQocmV0ID09IDApOwotCXNl bmRfZXZlbnQoMSwgU0VSVkVSX0xPQ0tFRCk7Ci0JLyogV2FpdCBhIHdoaWxlIGZvciB0aGUgY2xp ZW50IHRvIGRvIGl0cyB0aGluZyAqLwotCXNsZWVwKDEpOwotCXJldCA9IGRybVVubG9jayhkcm1m ZCwgbG9jazEpOwotCWFzc2VydChyZXQgPT0gMCk7Ci0JdW5sb2NrX3RpbWUgPSBnZXRfbWlsbGlz KCk7Ci0KLQl3YWl0X2V2ZW50KDEsIENMSUVOVF9MT0NLRUQpOwotCXJldCA9IHJlYWQoY29tbWZk WzFdLCAmY2xpZW50X3RpbWUsIHNpemVvZihjbGllbnRfdGltZSkpOwotCWlmIChyZXQgPT0gLTEp Ci0JCWVycigxLCAiRmFpbHVyZSB0byByZWFkIGNsaWVudCBtYWdpYyIpOwotCi0JaWYgKGNsaWVu dF90aW1lIDwgdW5sb2NrX3RpbWUpCi0JCWVycngoMSwgIkNsaWVudCB0b29rIGxvY2sgYmVmb3Jl IHNlcnZlciByZWxlYXNlZCBpdCIpOwotCi0JY2xvc2UoZHJtZmQpOwotfQotCi1pbnQgbWFpbihp bnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0JaW50IHJldDsKLQotCi0JcmV0ID0gcGlwZShjb21t ZmQpOwotCWlmIChyZXQgPT0gLTEpCi0JCWVycigxLCAiQ291bGRuJ3QgY3JlYXRlIHBpcGUiKTsK LQotCXJldCA9IGZvcmsoKTsKLQlpZiAocmV0ID09IC0xKQotCQllcnIoMSwgImZhaWx1cmUgdG8g Zm9yayBjbGllbnQiKTsKLQlpZiAocmV0ID09IDApCi0JCWNsaWVudCgpOwotCWVsc2UKLQkJc2Vy dmVyKCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvbmFtZV9mcm9tX2Zk LmMgYi90ZXN0cy9uYW1lX2Zyb21fZmQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg NTI2NDY4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9uYW1lX2Zyb21fZmQuYworKysgL2Rldi9udWxs CkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgwqkgMjAwOSBJbnRlbCBDb3Jwb3Jh dGlvbgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl LCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5k IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8g ZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhv dXQgbGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2Us IHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMg b2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSAqIFNv ZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVy bWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAotICogcGFyYWdyYXBoKSBzaGFsbCBi ZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQot ICogU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJ VEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xV RElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ LAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVO VC4gIElOIE5PIEVWRU5UIFNIQUxMCi0gKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVS UyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZ LCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFS SVNJTkcKLSAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJF IE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKLSAqIElOIFRIRSBTT0ZUV0FSRS4KLSAqCi0g KiBBdXRob3JzOgotICogICAgS3Jpc3RpYW4gSMO4Z3NiZXJnIDxrcmhAYml0cGxhbmV0Lm5ldD4K LSAqCi0gKi8KLQotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5j bHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSAiZHJtdGVzdC5o IgotCi0vKioKLSAqIENoZWNrcyBkcm1HZXREZXZpY2VOYW1lRnJvbUZkCi0gKgotICogVGhpcyB0 ZXN0cyB0aGF0IHdlIGNhbiBnZXQgdGhlIGFjdHVhbCB2ZXJzaW9uIG91dCwgYW5kIHRoYXQgc2V0 dGluZyBpbnZhbGlkCi0gKiBtYWpvci9taW5vciBudW1iZXJzIGZhaWxzIGFwcHJvcHJpYXRlbHku ICBJdCBkb2VzIG5vdCBjaGVjayB0aGUgYWN0dWFsCi0gKiBiZWhhdmlvciBkaWZmZXJlbnNlcyBy ZXN1bHRpbmcgZnJvbSBhbiBpbmNyZWFzZWQgREkgdmVyc2lvbi4KLSAqLwotaW50IG1haW4oaW50 IGFyZ2MsIGNoYXIgKiphcmd2KQotewotCWludCBmZDsKLQljb25zdCBjaGFyICpuYW1lID0gIi9k ZXYvZHJpL2NhcmQwIjsKLQljaGFyICp2OwotCi0JZmQgPSBvcGVuKCIvZGV2L2RyaS9jYXJkMCIs IE9fUkRXUik7Ci0JaWYgKGZkIDwgMCkKLQkJcmV0dXJuIDA7Ci0KLQl2ID0gZHJtR2V0RGV2aWNl TmFtZUZyb21GZChmZCk7Ci0JY2xvc2UoZmQpOwotCi0JYXNzZXJ0KHN0cmNtcChuYW1lLCB2KSA9 PSAwKTsKLQlkcm1GcmVlKHYpOwotCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9v cGVuY2xvc2UuYyBiL3Rlc3RzL29wZW5jbG9zZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCA5NDZhNDQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29wZW5jbG9zZS5jCisrKyAvZGV2L251 bGwKQEAgLTEsMzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCDCqSAyMDA3IEludGVsIENvcnBv cmF0aW9uCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBh bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0 byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0 aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJn ZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGll cyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQotICog U29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBw ZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Ci0gKiBwYXJhZ3JhcGgpIHNoYWxs IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhl Ci0gKiBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwg V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5D TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xE RVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwg QVJJU0lORwotICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB UkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwotICogSU4gVEhFIFNPRlRXQVJFLgotICoK LSAqIEF1dGhvcnM6Ci0gKiAgICBFcmljIEFuaG9sdCA8ZXJpY0BhbmhvbHQubmV0PgotICoKLSAq LwotCi0jaW5jbHVkZSAiZHJtdGVzdC5oIgotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFy Z3YpCi17Ci0JaW50IGZkOwotCi0JZmQgPSBkcm1fb3Blbl9hbnkoKTsKLQljbG9zZShmZCk7Ci0J cmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9zZXR2ZXJzaW9uLmMgYi90ZXN0cy9zZXR2 ZXJzaW9uLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmN2I1MjkuLjAwMDAwMDAK LS0tIGEvdGVzdHMvc2V0dmVyc2lvbi5jCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAot LyoKLSAqIENvcHlyaWdodCDCqSAyMDA3IEludGVsIENvcnBvcmF0aW9uCi0gKgotICogUGVybWlz c2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0 YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVu dGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2Fy ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0 aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0 ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFu ZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVk IHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBU aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5j bHVkaW5nIHRoZSBuZXh0Ci0gKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBj b3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCi0gKiBTb2Z0d2FyZS4KLSAqCi0g KiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBB TlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRF RCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hB TEwKLSAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5Z IENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNU SU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwotICogRlJPTSwgT1VU IE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhF UiBERUFMSU5HUwotICogSU4gVEhFIFNPRlRXQVJFLgotICoKLSAqIEF1dGhvcnM6Ci0gKiAgICBF cmljIEFuaG9sdCA8ZXJpY0BhbmhvbHQubmV0PgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGltaXRz Lmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3lzL2lvY3RsLmg+Ci0jaW5jbHVk ZSAiZHJtdGVzdC5oIgotCi0vKioKLSAqIENoZWNrcyBEUk1fSU9DVExfU0VUX1ZFUlNJT04uCi0g KgotICogVGhpcyB0ZXN0cyB0aGF0IHdlIGNhbiBnZXQgdGhlIGFjdHVhbCB2ZXJzaW9uIG91dCwg YW5kIHRoYXQgc2V0dGluZyBpbnZhbGlkCi0gKiBtYWpvci9taW5vciBudW1iZXJzIGZhaWxzIGFw cHJvcHJpYXRlbHkuICBJdCBkb2VzIG5vdCBjaGVjayB0aGUgYWN0dWFsCi0gKiBiZWhhdmlvciBk aWZmZXJlbnNlcyByZXN1bHRpbmcgZnJvbSBhbiBpbmNyZWFzZWQgREkgdmVyc2lvbi4KLSAqLwot aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotCWludCBmZCwgcmV0OwotCWRybV9z ZXRfdmVyc2lvbl90IHN2LCB2ZXJzaW9uOwotCi0JaWYgKGdldHVpZCgpICE9IDApIHsKLQkJZnBy aW50ZihzdGRlcnIsICJzZXR2ZXJzaW9uIHRlc3QgcmVxdWlyZXMgcm9vdCwgc2tpcHBpbmdcbiIp OwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlmZCA9IGRybV9vcGVuX2FueV9tYXN0ZXIoKTsKLQotCS8q IEZpcnN0LCBjaGVjayB0aGF0IHdlIGNhbiBnZXQgdGhlIEREL0RJIHZlcnNpb25zLiAqLwotCW1l bXNldCgmdmVyc2lvbiwgMCwgc2l6ZW9mKHZlcnNpb24pKTsKLQl2ZXJzaW9uLmRybV9kaV9tYWpv ciA9IC0xOwotCXZlcnNpb24uZHJtX2RpX21pbm9yID0gLTE7Ci0JdmVyc2lvbi5kcm1fZGRfbWFq b3IgPSAtMTsKLQl2ZXJzaW9uLmRybV9kZF9taW5vciA9IC0xOwotCXJldCA9IGlvY3RsKGZkLCBE Uk1fSU9DVExfU0VUX1ZFUlNJT04sICZ2ZXJzaW9uKTsKLQlhc3NlcnQocmV0ID09IDApOwotCWFz c2VydCh2ZXJzaW9uLmRybV9kaV9tYWpvciAhPSAtMSk7Ci0JYXNzZXJ0KHZlcnNpb24uZHJtX2Rp X21pbm9yICE9IC0xKTsKLQlhc3NlcnQodmVyc2lvbi5kcm1fZGRfbWFqb3IgIT0gLTEpOwotCWFz c2VydCh2ZXJzaW9uLmRybV9kZF9taW5vciAhPSAtMSk7Ci0KLQkvKiBDaGVjayB0aGF0IGFuIGlu dmFsaWQgREkgbWFqb3IgZmFpbHMgKi8KLQlzdiA9IHZlcnNpb247Ci0Jc3YuZHJtX2RpX21ham9y Kys7Ci0JcmV0ID0gaW9jdGwoZmQsIERSTV9JT0NUTF9TRVRfVkVSU0lPTiwgJnN2KTsKLQlhc3Nl cnQocmV0ID09IC0xICYmIGVycm5vID09IEVJTlZBTCk7Ci0KLQkvKiBDaGVjayB0aGF0IGFuIGlu dmFsaWQgREkgbWlub3IgZmFpbHMgKi8KLQlzdiA9IHZlcnNpb247Ci0Jc3YuZHJtX2RpX21ham9y Kys7Ci0JcmV0ID0gaW9jdGwoZmQsIERSTV9JT0NUTF9TRVRfVkVSU0lPTiwgJnN2KTsKLQlhc3Nl cnQocmV0ID09IC0xICYmIGVycm5vID09IEVJTlZBTCk7Ci0KLQkvKiBDaGVjayB0aGF0IGFuIGlu dmFsaWQgREQgbWFqb3IgZmFpbHMgKi8KLQlzdiA9IHZlcnNpb247Ci0Jc3YuZHJtX2RkX21ham9y Kys7Ci0JcmV0ID0gaW9jdGwoZmQsIERSTV9JT0NUTF9TRVRfVkVSU0lPTiwgJnN2KTsKLQlhc3Nl cnQocmV0ID09IC0xICYmIGVycm5vID09IEVJTlZBTCk7Ci0KLQkvKiBDaGVjayB0aGF0IGFuIGlu dmFsaWQgREQgbWlub3IgZmFpbHMgKi8KLQlzdiA9IHZlcnNpb247Ci0Jc3YuZHJtX2RkX21pbm9y Kys7Ci0JcmV0ID0gaW9jdGwoZmQsIERSTV9JT0NUTF9TRVRfVkVSU0lPTiwgJnN2KTsKLQlhc3Nl cnQocmV0ID09IC0xICYmIGVycm5vID09IEVJTlZBTCk7Ci0KLQljbG9zZShmZCk7Ci0JcmV0dXJu IDA7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy91cGRhdGVkcmF3LmMgYi90ZXN0cy91cGRhdGVkcmF3 LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwMWZhOTYuLjAwMDAwMDAKLS0tIGEv dGVzdHMvdXBkYXRlZHJhdy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTU0ICswLDAgQEAKLS8qCi0g KiBDb3B5cmlnaHQgwqkgMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbgotICoKLSAqIFBlcm1pc3Npb24g aXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmlu ZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlv biBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0 aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJp Z2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1 YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8g cGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBk byBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFi b3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGlu ZyB0aGUgbmV4dAotICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVz IG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQotICogU29mdHdhcmUuCi0gKgotICogVEhF IFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJ TkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8g VEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCi0g KiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJ TSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBP RiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKLSAqIEZST00sIE9VVCBPRiBP UiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVB TElOR1MKLSAqIElOIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKiBBdXRob3JzOgotICogICAgRXJpYyBB bmhvbHQgPGVyaWNAYW5ob2x0Lm5ldD4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9pb2N0bC5o PgotI2luY2x1ZGUgImRybXRlc3QuaCIKLQotc3RhdGljIHZvaWQKLXNldF9kcmF3X2NsaXByZWN0 c19lbXB0eShpbnQgZmQsIGludCBkcmF3YWJsZSkKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBkcm1f dXBkYXRlX2RyYXcgdXBkYXRlOwotCi0JdXBkYXRlLmhhbmRsZSA9IGRyYXdhYmxlOwotCXVwZGF0 ZS50eXBlID0gRFJNX0RSQVdBQkxFX0NMSVBSRUNUUzsKLQl1cGRhdGUubnVtID0gMDsKLQl1cGRh dGUuZGF0YSA9IDA7Ci0KLQlyZXQgPSBpb2N0bChmZCwgRFJNX0lPQ1RMX1VQREFURV9EUkFXLCAm dXBkYXRlKTsKLQlhc3NlcnQocmV0ID09IDApOwotfQotCi1zdGF0aWMgdm9pZAotc2V0X2RyYXdf Y2xpcHJlY3RzX2VtcHR5X2ZhaWwoaW50IGZkLCBpbnQgZHJhd2FibGUpCi17Ci0JaW50IHJldDsK LQlzdHJ1Y3QgZHJtX3VwZGF0ZV9kcmF3IHVwZGF0ZTsKLQotCXVwZGF0ZS5oYW5kbGUgPSBkcmF3 YWJsZTsKLQl1cGRhdGUudHlwZSA9IERSTV9EUkFXQUJMRV9DTElQUkVDVFM7Ci0JdXBkYXRlLm51 bSA9IDA7Ci0JdXBkYXRlLmRhdGEgPSAwOwotCi0JcmV0ID0gaW9jdGwoZmQsIERSTV9JT0NUTF9V UERBVEVfRFJBVywgJnVwZGF0ZSk7Ci0JYXNzZXJ0KHJldCA9PSAtMSAmJiBlcnJubyA9PSBFSU5W QUwpOwotfQotCi1zdGF0aWMgdm9pZAotc2V0X2RyYXdfY2xpcHJlY3RzXzIoaW50IGZkLCBpbnQg ZHJhd2FibGUpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgZHJtX3VwZGF0ZV9kcmF3IHVwZGF0ZTsK LQlkcm1fY2xpcF9yZWN0X3QgcmVjdHNbMl07Ci0KLQlyZWN0c1swXS54MSA9IDA7Ci0JcmVjdHNb MF0ueTEgPSAwOwotCXJlY3RzWzBdLngyID0gMTA7Ci0JcmVjdHNbMF0ueTIgPSAxMDsKLQotCXJl Y3RzWzFdLngxID0gMTA7Ci0JcmVjdHNbMV0ueTEgPSAxMDsKLQlyZWN0c1sxXS54MiA9IDIwOwot CXJlY3RzWzFdLnkyID0gMjA7Ci0KLQl1cGRhdGUuaGFuZGxlID0gZHJhd2FibGU7Ci0JdXBkYXRl LnR5cGUgPSBEUk1fRFJBV0FCTEVfQ0xJUFJFQ1RTOwotCXVwZGF0ZS5udW0gPSAyOwotCXVwZGF0 ZS5kYXRhID0gKHVuc2lnbmVkIGxvbmcgbG9uZykodWludHB0cl90KSZyZWN0czsKLQotCXJldCA9 IGlvY3RsKGZkLCBEUk1fSU9DVExfVVBEQVRFX0RSQVcsICZ1cGRhdGUpOwotCWFzc2VydChyZXQg PT0gMCk7Ci19Ci0KLXN0YXRpYyBpbnQgYWRkX2RyYXdhYmxlKGludCBmZCkKLXsKLQlkcm1fZHJh d190IGRyYXdhcmc7Ci0JaW50IHJldDsKLQotCS8qIENyZWF0ZSBhIGRyYXdhYmxlLgotCSAqIElP Q1RMX0FERF9EUkFXIGlzIFJEV1IsIHRob3VnaCBpdCBzaG91bGQgcmVhbGx5IGp1c3QgYmUgUkQK LQkgKi8KLQlkcmF3YXJnLmhhbmRsZSA9IDA7Ci0JcmV0ID0gaW9jdGwoZmQsIERSTV9JT0NUTF9B RERfRFJBVywgJmRyYXdhcmcpOwotCWFzc2VydChyZXQgPT0gMCk7Ci0JcmV0dXJuIGRyYXdhcmcu aGFuZGxlOwotfQotCi1zdGF0aWMgaW50IHJtX2RyYXdhYmxlKGludCBmZCwgaW50IGRyYXdhYmxl LCBpbnQgZmFpbCkKLXsKLQlkcm1fZHJhd190IGRyYXdhcmc7Ci0JaW50IHJldDsKLQotCS8qIENy ZWF0ZSBhIGRyYXdhYmxlLgotCSAqIElPQ1RMX0FERF9EUkFXIGlzIFJEV1IsIHRob3VnaCBpdCBz aG91bGQgcmVhbGx5IGp1c3QgYmUgUkQKLQkgKi8KLQlkcmF3YXJnLmhhbmRsZSA9IGRyYXdhYmxl OwotCXJldCA9IGlvY3RsKGZkLCBEUk1fSU9DVExfUk1fRFJBVywgJmRyYXdhcmcpOwotCWlmICgh ZmFpbCkKLQkJYXNzZXJ0KHJldCA9PSAwKTsKLQllbHNlCi0JCWFzc2VydChyZXQgPT0gLTEgJiYg ZXJybm8gPT0gRUlOVkFMKTsKLQotCXJldHVybiBkcmF3YXJnLmhhbmRsZTsKLX0KLQotLyoqCi0g KiBUZXN0cyBkcmF3YWJsZSBtYW5hZ2VtZW50OiBhZGRpbmcsIHJlbW92aW5nLCBhbmQgdXBkYXRp bmcgdGhlIGNsaXByZWN0cyBvZgotICogZHJhd2FibGVzLgotICovCi1pbnQgbWFpbihpbnQgYXJn YywgY2hhciAqKmFyZ3YpCi17Ci0JaW50IGZkLCBkMSwgZDI7Ci0KLQlpZiAoZ2V0dWlkKCkgIT0g MCkgewotCQlmcHJpbnRmKHN0ZGVyciwgInVwZGF0ZWRyYXcgdGVzdCByZXF1aXJlcyByb290LCBz a2lwcGluZ1xuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCWZkID0gZHJtX29wZW5fYW55X21hc3Rl cigpOwotCi0JZDEgPSBhZGRfZHJhd2FibGUoZmQpOwotCWQyID0gYWRkX2RyYXdhYmxlKGZkKTsK LQkvKiBEbyBhIHNlcmllcyBvZiBjbGlwcmVjdCB1cGRhdGVzICovCi0Jc2V0X2RyYXdfY2xpcHJl Y3RzX2VtcHR5KGZkLCBkMSk7Ci0Jc2V0X2RyYXdfY2xpcHJlY3RzX2VtcHR5KGZkLCBkMik7Ci0J c2V0X2RyYXdfY2xpcHJlY3RzXzIoZmQsIGQxKTsKLQlzZXRfZHJhd19jbGlwcmVjdHNfZW1wdHko ZmQsIGQxKTsKLQotCS8qIFJlbW92ZSBvdXIgZHJhd2FibGVzICovCi0Jcm1fZHJhd2FibGUoZmQs IGQxLCAwKTsKLQlybV9kcmF3YWJsZShmZCwgZDIsIDApOwotCi0JLyogQ2hlY2sgdGhhdCByZW1v dmluZyBhbiB1bmtub3duIGRyYXdhYmxlIHJldHVybnMgZXJyb3IgKi8KLQlybV9kcmF3YWJsZShm ZCwgMHg3ZmZmZmZmZiwgMSk7Ci0KLQkvKiBBdHRlbXB0IHRvIHNldCBjbGlwcmVjdHMgb24gYSBu b25leGlzdGVudCBkcmF3YWJsZSAqLwotCXNldF9kcmF3X2NsaXByZWN0c19lbXB0eV9mYWlsKGZk LCBkMSk7Ci0KLQljbG9zZShmZCk7Ci0JcmV0dXJuIDA7Ci19Ci0tIAoyLjEwLjIKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5n IGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=