From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thierry Reding Subject: [PATCH libdrm 04/11] tests: Split helpers into library Date: Fri, 23 Jan 2015 17:08:17 +0100 Message-ID: <1422029304-1926-5-git-send-email-thierry.reding@gmail.com> References: <1422029304-1926-1-git-send-email-thierry.reding@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-pd0-f178.google.com (mail-pd0-f178.google.com [209.85.192.178]) by gabe.freedesktop.org (Postfix) with ESMTP id CBC216E946 for ; Fri, 23 Jan 2015 08:08:47 -0800 (PST) Received: by mail-pd0-f178.google.com with SMTP id y10so9271484pdj.9 for ; Fri, 23 Jan 2015 08:08:47 -0800 (PST) In-Reply-To: <1422029304-1926-1-git-send-email-thierry.reding@gmail.com> 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: Laurent Pinchart List-Id: dri-devel@lists.freedesktop.org RnJvbTogVGhpZXJyeSBSZWRpbmcgPHRyZWRpbmdAbnZpZGlhLmNvbT4KClNvbWUgb2YgdGhlIGhl bHBlcnMsIHN1Y2ggYXMgdGhlIHBhdHRlcm4gZHJhd2luZyBoZWxwZXJzIG9yIHRoZSBmb3JtYXQK bG9va3VwIGhlbHBlcnMsIGhhdmUgcG90ZW50aWFsIHRvIGJlIHJldXNlZC4gTW92ZSB0aGVtIGlu dG8gYSBzZXBhcmF0ZQpsaWJyYXJ5IHRvIG1ha2UgaXQgZWFzaWVyIHRvIHNoYXJlIHRoZW0uCgpT aWduZWQtb2ZmLWJ5OiBUaGllcnJ5IFJlZGluZyA8dHJlZGluZ0BudmlkaWEuY29tPgotLS0KIGNv bmZpZ3VyZS5hYyAgICAgICAgICAgICAgICB8ICAgMSArCiB0ZXN0cy9NYWtlZmlsZS5hbSAgICAg ICAgICAgfCAgIDIgKy0KIHRlc3RzL21vZGVwcmludC9NYWtlZmlsZS5hbSB8ICAgMSArCiB0ZXN0 cy9tb2RlcHJpbnQvbW9kZXByaW50LmMgfCAgIDIgKy0KIHRlc3RzL21vZGV0ZXN0L01ha2VmaWxl LmFtICB8ICAgMiArCiB0ZXN0cy9tb2RldGVzdC9idWZmZXJzLmMgICAgfCA5NTYgKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHRlc3RzL21vZGV0ZXN0L2J1ZmZl cnMuaCAgICB8ICAxMiArLQogdGVzdHMvbW9kZXRlc3QvY3Vyc29yLmMgICAgIHwgICA0ICstCiB0 ZXN0cy9tb2RldGVzdC9tb2RldGVzdC5jICAgfCAgMjUgKy0KIHRlc3RzL3Byb3B0ZXN0L3Byb3B0 ZXN0LmMgICB8ICAgMyArLQogdGVzdHMvdXRpbC9NYWtlZmlsZS5hbSAgICAgIHwgIDE5ICsKIHRl c3RzL3V0aWwvY29tbW9uLmggICAgICAgICB8ICAzMyArKwogdGVzdHMvdXRpbC9mb3JtYXQuYyAg ICAgICAgIHwgMTE5ICsrKysrKwogdGVzdHMvdXRpbC9mb3JtYXQuaCAgICAgICAgIHwgIDY1ICsr KwogdGVzdHMvdXRpbC9wYXR0ZXJuLmMgICAgICAgIHwgODcwICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysKIHRlc3RzL3V0aWwvcGF0dGVybi5oICAgICAgICB8ICAzOSAr KwogdGVzdHMvdmJsdGVzdC9NYWtlZmlsZS5hbSAgIHwgICAxICsKIHRlc3RzL3ZibHRlc3QvdmJs dGVzdC5jICAgICB8ICAgMiArLQogMTggZmlsZXMgY2hhbmdlZCwgMTE3NyBpbnNlcnRpb25zKCsp LCA5NzkgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvdXRpbC9NYWtlZmls ZS5hbQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL3V0aWwvY29tbW9uLmgKIGNyZWF0ZSBtb2Rl IDEwMDY0NCB0ZXN0cy91dGlsL2Zvcm1hdC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvdXRp bC9mb3JtYXQuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL3V0aWwvcGF0dGVybi5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgdGVzdHMvdXRpbC9wYXR0ZXJuLmgKCmRpZmYgLS1naXQgYS9jb25maWd1 cmUuYWMgYi9jb25maWd1cmUuYWMKaW5kZXggOGFmZWU4MzQ1MDhkLi41ODQxMWI3OWI2ODIgMTAw NjQ0Ci0tLSBhL2NvbmZpZ3VyZS5hYworKysgYi9jb25maWd1cmUuYWMKQEAgLTQ0MSw2ICs0NDEs NyBAQCBBQ19DT05GSUdfRklMRVMoWwogCXRlc3RzL3ZibHRlc3QvTWFrZWZpbGUKIAl0ZXN0cy9l eHlub3MvTWFrZWZpbGUKIAl0ZXN0cy90ZWdyYS9NYWtlZmlsZQorCXRlc3RzL3V0aWwvTWFrZWZp bGUKIAltYW4vTWFrZWZpbGUKIAlsaWJkcm0ucGNdKQogQUNfT1VUUFVUCmRpZmYgLS1naXQgYS90 ZXN0cy9NYWtlZmlsZS5hbSBiL3Rlc3RzL01ha2VmaWxlLmFtCmluZGV4IGU3ZWM0ZmE1ZWNmZi4u MzEwMDMyNzMyZjZlIDEwMDY0NAotLS0gYS90ZXN0cy9NYWtlZmlsZS5hbQorKysgYi90ZXN0cy9N YWtlZmlsZS5hbQpAQCAtMTAsNyArMTAsNyBAQCBjaGVja19QUk9HUkFNUyA9IFwKIAlkcmlzdGF0 IFwKIAlkcm1zdGF0CiAKLVNVQkRJUlMgPSBtb2RlcHJpbnQgcHJvcHRlc3QKK1NVQkRJUlMgPSB1 dGlsIG1vZGVwcmludCBwcm9wdGVzdAogCiBpZiBIQVZFX0xJQktNUwogU1VCRElSUyArPSBrbXN0 ZXN0IG1vZGV0ZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9tb2RlcHJpbnQvTWFrZWZpbGUuYW0gYi90 ZXN0cy9tb2RlcHJpbnQvTWFrZWZpbGUuYW0KaW5kZXggNjQyMGVmMzM2NzA1Li4zMmE3MDJhYjBi ZGMgMTAwNjQ0Ci0tLSBhL3Rlc3RzL21vZGVwcmludC9NYWtlZmlsZS5hbQorKysgYi90ZXN0cy9t b2RlcHJpbnQvTWFrZWZpbGUuYW0KQEAgLTEsNSArMSw2IEBACiBBTV9DRkxBR1MgPSBcCiAJLUkk KHRvcF9zcmNkaXIpL2luY2x1ZGUvZHJtIFwKKwktSSQodG9wX3NyY2RpcikvdGVzdHMgXAogCS1J JCh0b3Bfc3JjZGlyKQogCiBpZiBIQVZFX0lOU1RBTExfVEVTVFMKZGlmZiAtLWdpdCBhL3Rlc3Rz L21vZGVwcmludC9tb2RlcHJpbnQuYyBiL3Rlc3RzL21vZGVwcmludC9tb2RlcHJpbnQuYwppbmRl eCA2ZjBkMDM5MDVhNDYuLjhmOTQ3MTAyM2I1MiAxMDA2NDQKLS0tIGEvdGVzdHMvbW9kZXByaW50 L21vZGVwcmludC5jCisrKyBiL3Rlc3RzL21vZGVwcmludC9tb2RlcHJpbnQuYwpAQCAtNDEsNyAr NDEsNyBAQAogI2luY2x1ZGUgInhmODZkcm0uaCIKICNpbmNsdWRlICJ4Zjg2ZHJtTW9kZS5oIgog Ci0jZGVmaW5lIEFSUkFZX1NJWkUoYSkgKHNpemVvZihhKSAvIHNpemVvZihhWzBdKSkKKyNpbmNs dWRlICJ1dGlsL2NvbW1vbi5oIgogCiBpbnQgY29ubmVjdG9yczsKIGludCBmdWxsX3Byb3BzOwpk aWZmIC0tZ2l0IGEvdGVzdHMvbW9kZXRlc3QvTWFrZWZpbGUuYW0gYi90ZXN0cy9tb2RldGVzdC9N YWtlZmlsZS5hbQppbmRleCA5MzgyMGZhYzczOTUuLjg4ZmRlMmViODM0NSAxMDA2NDQKLS0tIGEv dGVzdHMvbW9kZXRlc3QvTWFrZWZpbGUuYW0KKysrIGIvdGVzdHMvbW9kZXRlc3QvTWFrZWZpbGUu YW0KQEAgLTQsNiArNCw3IEBAIEFNX0NGTEFHUyA9ICQoZmlsdGVyLW91dCAtV3BvaW50ZXItYXJp dGgsICQoV0FSTl9DRkxBR1MpKQogCiBBTV9DRkxBR1MgKz0gXAogCS1JJCh0b3Bfc3JjZGlyKS9p bmNsdWRlL2RybSBcCisJLUkkKHRvcF9zcmNkaXIpL3Rlc3RzIFwKIAktSSQodG9wX3NyY2RpcikK IAogaWYgSEFWRV9JTlNUQUxMX1RFU1RTCkBAIC0xOCw2ICsxOSw3IEBAIG1vZGV0ZXN0X1NPVVJD RVMgPSAkKE1PREVURVNUX0ZJTEVTKQogCiBtb2RldGVzdF9MREFERCA9IFwKIAkkKHRvcF9idWls ZGRpcikvbGliZHJtLmxhIFwKKwkkKHRvcF9idWlsZGRpcikvdGVzdHMvdXRpbC9saWJ1dGlsLmxh IFwKIAktbHB0aHJlYWQKIAogaWYgSEFWRV9DQUlSTwpkaWZmIC0tZ2l0IGEvdGVzdHMvbW9kZXRl c3QvYnVmZmVycy5jIGIvdGVzdHMvbW9kZXRlc3QvYnVmZmVycy5jCmluZGV4IGU0ZTgxNDk1OTFl Zi4uNGRiNGU5YTcyMTI0IDEwMDY0NAotLS0gYS90ZXN0cy9tb2RldGVzdC9idWZmZXJzLmMKKysr IGIvdGVzdHMvbW9kZXRlc3QvYnVmZmVycy5jCkBAIC00OSw4ICs0OSw2IEBACiAjaW5jbHVkZSA8 Y2Fpcm8uaD4KICNlbmRpZgogCi0jZGVmaW5lIEFSUkFZX1NJWkUoYXJyKSAoc2l6ZW9mKGFycikg LyBzaXplb2YoKGFycilbMF0pKQotCiBzdHJ1Y3QgYm8KIHsKIAlpbnQgZmQ7CkBAIC02Miw5NTYg KzYwLDYgQEAgc3RydWN0IGJvCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogRm9y bWF0cwotICovCi0KLXN0cnVjdCBjb2xvcl9jb21wb25lbnQgewotCXVuc2lnbmVkIGludCBsZW5n dGg7Ci0JdW5zaWduZWQgaW50IG9mZnNldDsKLX07Ci0KLXN0cnVjdCByZ2JfaW5mbyB7Ci0Jc3Ry dWN0IGNvbG9yX2NvbXBvbmVudCByZWQ7Ci0Jc3RydWN0IGNvbG9yX2NvbXBvbmVudCBncmVlbjsK LQlzdHJ1Y3QgY29sb3JfY29tcG9uZW50IGJsdWU7Ci0Jc3RydWN0IGNvbG9yX2NvbXBvbmVudCBh bHBoYTsKLX07Ci0KLWVudW0geXV2X29yZGVyIHsKLQlZVVZfWUNiQ3IgPSAxLAotCVlVVl9ZQ3JD YiA9IDIsCi0JWVVWX1lDID0gNCwKLQlZVVZfQ1kgPSA4LAotfTsKLQotc3RydWN0IHl1dl9pbmZv IHsKLQllbnVtIHl1dl9vcmRlciBvcmRlcjsKLQl1bnNpZ25lZCBpbnQgeHN1YjsKLQl1bnNpZ25l ZCBpbnQgeXN1YjsKLQl1bnNpZ25lZCBpbnQgY2hyb21hX3N0cmlkZTsKLX07Ci0KLXN0cnVjdCBm b3JtYXRfaW5mbyB7Ci0JdW5zaWduZWQgaW50IGZvcm1hdDsKLQljb25zdCBjaGFyICpuYW1lOwot CWNvbnN0IHN0cnVjdCByZ2JfaW5mbyByZ2I7Ci0JY29uc3Qgc3RydWN0IHl1dl9pbmZvIHl1djsK LX07Ci0KLSNkZWZpbmUgTUFLRV9SR0JfSU5GTyhybCwgcm8sIGJsLCBibywgZ2wsIGdvLCBhbCwg YW8pIFwKLQkucmdiID0geyB7IChybCksIChybykgfSwgeyAoYmwpLCAoYm8pIH0sIHsgKGdsKSwg KGdvKSB9LCB7IChhbCksIChhbykgfSB9Ci0KLSNkZWZpbmUgTUFLRV9ZVVZfSU5GTyhvcmRlciwg eHN1YiwgeXN1YiwgY2hyb21hX3N0cmlkZSkgXAotCS55dXYgPSB7IChvcmRlciksICh4c3ViKSwg KHlzdWIpLCAoY2hyb21hX3N0cmlkZSkgfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZvcm1hdF9p bmZvIGZvcm1hdF9pbmZvW10gPSB7Ci0JLyogWVVWIHBhY2tlZCAqLwotCXsgRFJNX0ZPUk1BVF9V WVZZLCAiVVlWWSIsIE1BS0VfWVVWX0lORk8oWVVWX1lDYkNyIHwgWVVWX0NZLCAyLCAyLCAyKSB9 LAotCXsgRFJNX0ZPUk1BVF9WWVVZLCAiVllVWSIsIE1BS0VfWVVWX0lORk8oWVVWX1lDckNiIHwg WVVWX0NZLCAyLCAyLCAyKSB9LAotCXsgRFJNX0ZPUk1BVF9ZVVlWLCAiWVVZViIsIE1BS0VfWVVW X0lORk8oWVVWX1lDYkNyIHwgWVVWX1lDLCAyLCAyLCAyKSB9LAotCXsgRFJNX0ZPUk1BVF9ZVllV LCAiWVZZVSIsIE1BS0VfWVVWX0lORk8oWVVWX1lDckNiIHwgWVVWX1lDLCAyLCAyLCAyKSB9LAot CS8qIFlVViBzZW1pLXBsYW5hciAqLwotCXsgRFJNX0ZPUk1BVF9OVjEyLCAiTlYxMiIsIE1BS0Vf WVVWX0lORk8oWVVWX1lDYkNyLCAyLCAyLCAyKSB9LAotCXsgRFJNX0ZPUk1BVF9OVjIxLCAiTlYy MSIsIE1BS0VfWVVWX0lORk8oWVVWX1lDckNiLCAyLCAyLCAyKSB9LAotCXsgRFJNX0ZPUk1BVF9O VjE2LCAiTlYxNiIsIE1BS0VfWVVWX0lORk8oWVVWX1lDYkNyLCAyLCAxLCAyKSB9LAotCXsgRFJN X0ZPUk1BVF9OVjYxLCAiTlY2MSIsIE1BS0VfWVVWX0lORk8oWVVWX1lDckNiLCAyLCAxLCAyKSB9 LAotCS8qIFlVViBwbGFuYXIgKi8KLQl7IERSTV9GT1JNQVRfWVVWNDIwLCAiWVUxMiIsIE1BS0Vf WVVWX0lORk8oWVVWX1lDYkNyLCAyLCAyLCAxKSB9LAotCXsgRFJNX0ZPUk1BVF9ZVlU0MjAsICJZ VjEyIiwgTUFLRV9ZVVZfSU5GTyhZVVZfWUNyQ2IsIDIsIDIsIDEpIH0sCi0JLyogUkdCMTYgKi8K LQl7IERSTV9GT1JNQVRfQVJHQjQ0NDQsICJBUjEyIiwgTUFLRV9SR0JfSU5GTyg0LCA4LCA0LCA0 LCA0LCAwLCA0LCAxMikgfSwKLQl7IERSTV9GT1JNQVRfWFJHQjQ0NDQsICJYUjEyIiwgTUFLRV9S R0JfSU5GTyg0LCA4LCA0LCA0LCA0LCAwLCAwLCAwKSB9LAotCXsgRFJNX0ZPUk1BVF9BQkdSNDQ0 NCwgIkFCMTIiLCBNQUtFX1JHQl9JTkZPKDQsIDAsIDQsIDQsIDQsIDgsIDQsIDEyKSB9LAotCXsg RFJNX0ZPUk1BVF9YQkdSNDQ0NCwgIlhCMTIiLCBNQUtFX1JHQl9JTkZPKDQsIDAsIDQsIDQsIDQs IDgsIDAsIDApIH0sCi0JeyBEUk1fRk9STUFUX1JHQkE0NDQ0LCAiUkExMiIsIE1BS0VfUkdCX0lO Rk8oNCwgMTIsIDQsIDgsIDQsIDQsIDQsIDApIH0sCi0JeyBEUk1fRk9STUFUX1JHQlg0NDQ0LCAi UlgxMiIsIE1BS0VfUkdCX0lORk8oNCwgMTIsIDQsIDgsIDQsIDQsIDAsIDApIH0sCi0JeyBEUk1f Rk9STUFUX0JHUkE0NDQ0LCAiQkExMiIsIE1BS0VfUkdCX0lORk8oNCwgNCwgNCwgOCwgNCwgMTIs IDQsIDApIH0sCi0JeyBEUk1fRk9STUFUX0JHUlg0NDQ0LCAiQlgxMiIsIE1BS0VfUkdCX0lORk8o NCwgNCwgNCwgOCwgNCwgMTIsIDAsIDApIH0sCi0JeyBEUk1fRk9STUFUX0FSR0IxNTU1LCAiQVIx NSIsIE1BS0VfUkdCX0lORk8oNSwgMTAsIDUsIDUsIDUsIDAsIDEsIDE1KSB9LAotCXsgRFJNX0ZP Uk1BVF9YUkdCMTU1NSwgIlhSMTUiLCBNQUtFX1JHQl9JTkZPKDUsIDEwLCA1LCA1LCA1LCAwLCAw LCAwKSB9LAotCXsgRFJNX0ZPUk1BVF9BQkdSMTU1NSwgIkFCMTUiLCBNQUtFX1JHQl9JTkZPKDUs IDAsIDUsIDUsIDUsIDEwLCAxLCAxNSkgfSwKLQl7IERSTV9GT1JNQVRfWEJHUjE1NTUsICJYQjE1 IiwgTUFLRV9SR0JfSU5GTyg1LCAwLCA1LCA1LCA1LCAxMCwgMCwgMCkgfSwKLQl7IERSTV9GT1JN QVRfUkdCQTU1NTEsICJSQTE1IiwgTUFLRV9SR0JfSU5GTyg1LCAxMSwgNSwgNiwgNSwgMSwgMSwg MCkgfSwKLQl7IERSTV9GT1JNQVRfUkdCWDU1NTEsICJSWDE1IiwgTUFLRV9SR0JfSU5GTyg1LCAx MSwgNSwgNiwgNSwgMSwgMCwgMCkgfSwKLQl7IERSTV9GT1JNQVRfQkdSQTU1NTEsICJCQTE1Iiwg TUFLRV9SR0JfSU5GTyg1LCAxLCA1LCA2LCA1LCAxMSwgMSwgMCkgfSwKLQl7IERSTV9GT1JNQVRf QkdSWDU1NTEsICJCWDE1IiwgTUFLRV9SR0JfSU5GTyg1LCAxLCA1LCA2LCA1LCAxMSwgMCwgMCkg fSwKLQl7IERSTV9GT1JNQVRfUkdCNTY1LCAiUkcxNiIsIE1BS0VfUkdCX0lORk8oNSwgMTEsIDYs IDUsIDUsIDAsIDAsIDApIH0sCi0JeyBEUk1fRk9STUFUX0JHUjU2NSwgIkJHMTYiLCBNQUtFX1JH Ql9JTkZPKDUsIDAsIDYsIDUsIDUsIDExLCAwLCAwKSB9LAotCS8qIFJHQjI0ICovCi0JeyBEUk1f Rk9STUFUX0JHUjg4OCwgIkJHMjQiLCBNQUtFX1JHQl9JTkZPKDgsIDAsIDgsIDgsIDgsIDE2LCAw LCAwKSB9LAotCXsgRFJNX0ZPUk1BVF9SR0I4ODgsICJSRzI0IiwgTUFLRV9SR0JfSU5GTyg4LCAx NiwgOCwgOCwgOCwgMCwgMCwgMCkgfSwKLQkvKiBSR0IzMiAqLwotCXsgRFJNX0ZPUk1BVF9BUkdC ODg4OCwgIkFSMjQiLCBNQUtFX1JHQl9JTkZPKDgsIDE2LCA4LCA4LCA4LCAwLCA4LCAyNCkgfSwK LQl7IERSTV9GT1JNQVRfWFJHQjg4ODgsICJYUjI0IiwgTUFLRV9SR0JfSU5GTyg4LCAxNiwgOCwg OCwgOCwgMCwgMCwgMCkgfSwKLQl7IERSTV9GT1JNQVRfQUJHUjg4ODgsICJBQjI0IiwgTUFLRV9S R0JfSU5GTyg4LCAwLCA4LCA4LCA4LCAxNiwgOCwgMjQpIH0sCi0JeyBEUk1fRk9STUFUX1hCR1I4 ODg4LCAiWEIyNCIsIE1BS0VfUkdCX0lORk8oOCwgMCwgOCwgOCwgOCwgMTYsIDAsIDApIH0sCi0J eyBEUk1fRk9STUFUX1JHQkE4ODg4LCAiUkEyNCIsIE1BS0VfUkdCX0lORk8oOCwgMjQsIDgsIDE2 LCA4LCA4LCA4LCAwKSB9LAotCXsgRFJNX0ZPUk1BVF9SR0JYODg4OCwgIlJYMjQiLCBNQUtFX1JH Ql9JTkZPKDgsIDI0LCA4LCAxNiwgOCwgOCwgMCwgMCkgfSwKLQl7IERSTV9GT1JNQVRfQkdSQTg4 ODgsICJCQTI0IiwgTUFLRV9SR0JfSU5GTyg4LCA4LCA4LCAxNiwgOCwgMjQsIDgsIDApIH0sCi0J eyBEUk1fRk9STUFUX0JHUlg4ODg4LCAiQlgyNCIsIE1BS0VfUkdCX0lORk8oOCwgOCwgOCwgMTYs IDgsIDI0LCAwLCAwKSB9LAotCXsgRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMCwgIkFSMzAiLCBNQUtF X1JHQl9JTkZPKDEwLCAyMCwgMTAsIDEwLCAxMCwgMCwgMiwgMzApIH0sCi0JeyBEUk1fRk9STUFU X1hSR0IyMTAxMDEwLCAiWFIzMCIsIE1BS0VfUkdCX0lORk8oMTAsIDIwLCAxMCwgMTAsIDEwLCAw LCAwLCAwKSB9LAotCXsgRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMCwgIkFCMzAiLCBNQUtFX1JHQl9J TkZPKDEwLCAwLCAxMCwgMTAsIDEwLCAyMCwgMiwgMzApIH0sCi0JeyBEUk1fRk9STUFUX1hCR1Iy MTAxMDEwLCAiWEIzMCIsIE1BS0VfUkdCX0lORk8oMTAsIDAsIDEwLCAxMCwgMTAsIDIwLCAwLCAw KSB9LAotCXsgRFJNX0ZPUk1BVF9SR0JBMTAxMDEwMiwgIlJBMzAiLCBNQUtFX1JHQl9JTkZPKDEw LCAyMiwgMTAsIDEyLCAxMCwgMiwgMiwgMCkgfSwKLQl7IERSTV9GT1JNQVRfUkdCWDEwMTAxMDIs ICJSWDMwIiwgTUFLRV9SR0JfSU5GTygxMCwgMjIsIDEwLCAxMiwgMTAsIDIsIDAsIDApIH0sCi0J eyBEUk1fRk9STUFUX0JHUkExMDEwMTAyLCAiQkEzMCIsIE1BS0VfUkdCX0lORk8oMTAsIDIsIDEw LCAxMiwgMTAsIDIyLCAyLCAwKSB9LAotCXsgRFJNX0ZPUk1BVF9CR1JYMTAxMDEwMiwgIkJYMzAi LCBNQUtFX1JHQl9JTkZPKDEwLCAyLCAxMCwgMTIsIDEwLCAyMiwgMCwgMCkgfSwKLX07Ci0KLXVu c2lnbmVkIGludCBmb3JtYXRfZm91cmNjKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0JdW5zaWduZWQg aW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZm9ybWF0X2luZm8pOyBpKyspIHsK LQkJaWYgKCFzdHJjbXAoZm9ybWF0X2luZm9baV0ubmFtZSwgbmFtZSkpCi0JCQlyZXR1cm4gZm9y bWF0X2luZm9baV0uZm9ybWF0OwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KLSAqIFRlc3QgcGF0dGVybnMKLSAqLwotCi1zdHJ1Y3QgY29sb3JfcmdiMjQgewot CXVuc2lnbmVkIGludCB2YWx1ZToyNDsKLX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwot Ci1zdHJ1Y3QgY29sb3JfeXV2IHsKLQl1bnNpZ25lZCBjaGFyIHk7Ci0JdW5zaWduZWQgY2hhciB1 OwotCXVuc2lnbmVkIGNoYXIgdjsKLX07Ci0KLSNkZWZpbmUgTUFLRV9ZVVZfNjAxX1kociwgZywg YikgXAotCSgoKCA2NiAqIChyKSArIDEyOSAqIChnKSArICAyNSAqIChiKSArIDEyOCkgPj4gOCkg KyAxNikKLSNkZWZpbmUgTUFLRV9ZVVZfNjAxX1UociwgZywgYikgXAotCSgoKC0zOCAqIChyKSAt ICA3NCAqIChnKSArIDExMiAqIChiKSArIDEyOCkgPj4gOCkgKyAxMjgpCi0jZGVmaW5lIE1BS0Vf WVVWXzYwMV9WKHIsIGcsIGIpIFwKLQkoKCgxMTIgKiAocikgLSAgOTQgKiAoZykgLSAgMTggKiAo YikgKyAxMjgpID4+IDgpICsgMTI4KQotCi0jZGVmaW5lIE1BS0VfWVVWXzYwMShyLCBnLCBiKSBc Ci0JeyAueSA9IE1BS0VfWVVWXzYwMV9ZKHIsIGcsIGIpLCBcCi0JICAudSA9IE1BS0VfWVVWXzYw MV9VKHIsIGcsIGIpLCBcCi0JICAudiA9IE1BS0VfWVVWXzYwMV9WKHIsIGcsIGIpIH0KLQotI2Rl ZmluZSBNQUtFX1JHQkEocmdiLCByLCBnLCBiLCBhKSBcCi0JKCgoKHIpID4+ICg4IC0gKHJnYikt PnJlZC5sZW5ndGgpKSA8PCAocmdiKS0+cmVkLm9mZnNldCkgfCBcCi0JICgoKGcpID4+ICg4IC0g KHJnYiktPmdyZWVuLmxlbmd0aCkpIDw8IChyZ2IpLT5ncmVlbi5vZmZzZXQpIHwgXAotCSAoKChi KSA+PiAoOCAtIChyZ2IpLT5ibHVlLmxlbmd0aCkpIDw8IChyZ2IpLT5ibHVlLm9mZnNldCkgfCBc Ci0JICgoKGEpID4+ICg4IC0gKHJnYiktPmFscGhhLmxlbmd0aCkpIDw8IChyZ2IpLT5hbHBoYS5v ZmZzZXQpKQotCi0jZGVmaW5lIE1BS0VfUkdCMjQocmdiLCByLCBnLCBiKSBcCi0JeyAudmFsdWUg PSBNQUtFX1JHQkEocmdiLCByLCBnLCBiLCAwKSB9Ci0KLXN0YXRpYyB2b2lkCi1maWxsX3NtcHRl X3l1dl9wbGFuYXIoY29uc3Qgc3RydWN0IHl1dl9pbmZvICp5dXYsCi0JCSAgICAgIHVuc2lnbmVk IGNoYXIgKnlfbWVtLCB1bnNpZ25lZCBjaGFyICp1X21lbSwKLQkJICAgICAgdW5zaWduZWQgY2hh ciAqdl9tZW0sIHVuc2lnbmVkIGludCB3aWR0aCwKLQkJICAgICAgdW5zaWduZWQgaW50IGhlaWdo dCwgdW5zaWduZWQgaW50IHN0cmlkZSkKLXsKLQljb25zdCBzdHJ1Y3QgY29sb3JfeXV2IGNvbG9y c190b3BbXSA9IHsKLQkJTUFLRV9ZVVZfNjAxKDE5MSwgMTkyLCAxOTIpLAkvKiBncmV5ICovCi0J CU1BS0VfWVVWXzYwMSgxOTIsIDE5MiwgMCksCS8qIHllbGxvdyAqLwotCQlNQUtFX1lVVl82MDEo MCwgMTkyLCAxOTIpLAkvKiBjeWFuICovCi0JCU1BS0VfWVVWXzYwMSgwLCAxOTIsIDApLAkvKiBn cmVlbiAqLwotCQlNQUtFX1lVVl82MDEoMTkyLCAwLCAxOTIpLAkvKiBtYWdlbnRhICovCi0JCU1B S0VfWVVWXzYwMSgxOTIsIDAsIDApLAkvKiByZWQgKi8KLQkJTUFLRV9ZVVZfNjAxKDAsIDAsIDE5 MiksCS8qIGJsdWUgKi8KLQl9OwotCWNvbnN0IHN0cnVjdCBjb2xvcl95dXYgY29sb3JzX21pZGRs ZVtdID0gewotCQlNQUtFX1lVVl82MDEoMCwgMCwgMTkyKSwJLyogYmx1ZSAqLwotCQlNQUtFX1lV Vl82MDEoMTksIDE5LCAxOSksCS8qIGJsYWNrICovCi0JCU1BS0VfWVVWXzYwMSgxOTIsIDAsIDE5 MiksCS8qIG1hZ2VudGEgKi8KLQkJTUFLRV9ZVVZfNjAxKDE5LCAxOSwgMTkpLAkvKiBibGFjayAq LwotCQlNQUtFX1lVVl82MDEoMCwgMTkyLCAxOTIpLAkvKiBjeWFuICovCi0JCU1BS0VfWVVWXzYw MSgxOSwgMTksIDE5KSwJLyogYmxhY2sgKi8KLQkJTUFLRV9ZVVZfNjAxKDE5MiwgMTkyLCAxOTIp LAkvKiBncmV5ICovCi0JfTsKLQljb25zdCBzdHJ1Y3QgY29sb3JfeXV2IGNvbG9yc19ib3R0b21b XSA9IHsKLQkJTUFLRV9ZVVZfNjAxKDAsIDMzLCA3NiksCS8qIGluLXBoYXNlICovCi0JCU1BS0Vf WVVWXzYwMSgyNTUsIDI1NSwgMjU1KSwJLyogc3VwZXIgd2hpdGUgKi8KLQkJTUFLRV9ZVVZfNjAx KDUwLCAwLCAxMDYpLAkvKiBxdWFkcmF0dXJlICovCi0JCU1BS0VfWVVWXzYwMSgxOSwgMTksIDE5 KSwJLyogYmxhY2sgKi8KLQkJTUFLRV9ZVVZfNjAxKDksIDksIDkpLAkJLyogMy41JSAqLwotCQlN QUtFX1lVVl82MDEoMTksIDE5LCAxOSksCS8qIDcuNSUgKi8KLQkJTUFLRV9ZVVZfNjAxKDI5LCAy OSwgMjkpLAkvKiAxMS41JSAqLwotCQlNQUtFX1lVVl82MDEoMTksIDE5LCAxOSksCS8qIGJsYWNr ICovCi0JfTsKLQl1bnNpZ25lZCBpbnQgY3MgPSB5dXYtPmNocm9tYV9zdHJpZGU7Ci0JdW5zaWdu ZWQgaW50IHhzdWIgPSB5dXYtPnhzdWI7Ci0JdW5zaWduZWQgaW50IHlzdWIgPSB5dXYtPnlzdWI7 Ci0JdW5zaWduZWQgaW50IHg7Ci0JdW5zaWduZWQgaW50IHk7Ci0KLQkvKiBMdW1hICovCi0JZm9y ICh5ID0gMDsgeSA8IGhlaWdodCAqIDYgLyA5OyArK3kpIHsKLQkJZm9yICh4ID0gMDsgeCA8IHdp ZHRoOyArK3gpCi0JCQl5X21lbVt4XSA9IGNvbG9yc190b3BbeCAqIDcgLyB3aWR0aF0ueTsKLQkJ eV9tZW0gKz0gc3RyaWRlOwotCX0KLQotCWZvciAoOyB5IDwgaGVpZ2h0ICogNyAvIDk7ICsreSkg ewotCQlmb3IgKHggPSAwOyB4IDwgd2lkdGg7ICsreCkKLQkJCXlfbWVtW3hdID0gY29sb3JzX21p ZGRsZVt4ICogNyAvIHdpZHRoXS55OwotCQl5X21lbSArPSBzdHJpZGU7Ci0JfQotCi0JZm9yICg7 IHkgPCBoZWlnaHQ7ICsreSkgewotCQlmb3IgKHggPSAwOyB4IDwgd2lkdGggKiA1IC8gNzsgKyt4 KQotCQkJeV9tZW1beF0gPSBjb2xvcnNfYm90dG9tW3ggKiA0IC8gKHdpZHRoICogNSAvIDcpXS55 OwotCQlmb3IgKDsgeCA8IHdpZHRoICogNiAvIDc7ICsreCkKLQkJCXlfbWVtW3hdID0gY29sb3Jz X2JvdHRvbVsoeCAtIHdpZHRoICogNSAvIDcpICogMwotCQkJCQkJIC8gKHdpZHRoIC8gNykgKyA0 XS55OwotCQlmb3IgKDsgeCA8IHdpZHRoOyArK3gpCi0JCQl5X21lbVt4XSA9IGNvbG9yc19ib3R0 b21bN10ueTsKLQkJeV9tZW0gKz0gc3RyaWRlOwotCX0KLQotCS8qIENocm9tYSAqLwotCWZvciAo eSA9IDA7IHkgPCBoZWlnaHQgLyB5c3ViICogNiAvIDk7ICsreSkgewotCQlmb3IgKHggPSAwOyB4 IDwgd2lkdGg7IHggKz0geHN1YikgewotCQkJdV9tZW1beCpjcy94c3ViXSA9IGNvbG9yc190b3Bb eCAqIDcgLyB3aWR0aF0udTsKLQkJCXZfbWVtW3gqY3MveHN1Yl0gPSBjb2xvcnNfdG9wW3ggKiA3 IC8gd2lkdGhdLnY7Ci0JCX0KLQkJdV9tZW0gKz0gc3RyaWRlICogY3MgLyB4c3ViOwotCQl2X21l bSArPSBzdHJpZGUgKiBjcyAvIHhzdWI7Ci0JfQotCi0JZm9yICg7IHkgPCBoZWlnaHQgLyB5c3Vi ICogNyAvIDk7ICsreSkgewotCQlmb3IgKHggPSAwOyB4IDwgd2lkdGg7IHggKz0geHN1Yikgewot CQkJdV9tZW1beCpjcy94c3ViXSA9IGNvbG9yc19taWRkbGVbeCAqIDcgLyB3aWR0aF0udTsKLQkJ CXZfbWVtW3gqY3MveHN1Yl0gPSBjb2xvcnNfbWlkZGxlW3ggKiA3IC8gd2lkdGhdLnY7Ci0JCX0K LQkJdV9tZW0gKz0gc3RyaWRlICogY3MgLyB4c3ViOwotCQl2X21lbSArPSBzdHJpZGUgKiBjcyAv IHhzdWI7Ci0JfQotCi0JZm9yICg7IHkgPCBoZWlnaHQgLyB5c3ViOyArK3kpIHsKLQkJZm9yICh4 ID0gMDsgeCA8IHdpZHRoICogNSAvIDc7IHggKz0geHN1YikgewotCQkJdV9tZW1beCpjcy94c3Vi XSA9Ci0JCQkJY29sb3JzX2JvdHRvbVt4ICogNCAvICh3aWR0aCAqIDUgLyA3KV0udTsKLQkJCXZf bWVtW3gqY3MveHN1Yl0gPQotCQkJCWNvbG9yc19ib3R0b21beCAqIDQgLyAod2lkdGggKiA1IC8g NyldLnY7Ci0JCX0KLQkJZm9yICg7IHggPCB3aWR0aCAqIDYgLyA3OyB4ICs9IHhzdWIpIHsKLQkJ CXVfbWVtW3gqY3MveHN1Yl0gPSBjb2xvcnNfYm90dG9tWyh4IC0gd2lkdGggKiA1IC8gNykgKgot CQkJCQkJCSAzIC8gKHdpZHRoIC8gNykgKyA0XS51OwotCQkJdl9tZW1beCpjcy94c3ViXSA9IGNv bG9yc19ib3R0b21bKHggLSB3aWR0aCAqIDUgLyA3KSAqCi0JCQkJCQkJIDMgLyAod2lkdGggLyA3 KSArIDRdLnY7Ci0JCX0KLQkJZm9yICg7IHggPCB3aWR0aDsgeCArPSB4c3ViKSB7Ci0JCQl1X21l bVt4KmNzL3hzdWJdID0gY29sb3JzX2JvdHRvbVs3XS51OwotCQkJdl9tZW1beCpjcy94c3ViXSA9 IGNvbG9yc19ib3R0b21bN10udjsKLQkJfQotCQl1X21lbSArPSBzdHJpZGUgKiBjcyAvIHhzdWI7 Ci0JCXZfbWVtICs9IHN0cmlkZSAqIGNzIC8geHN1YjsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1m aWxsX3NtcHRlX3l1dl9wYWNrZWQoY29uc3Qgc3RydWN0IHl1dl9pbmZvICp5dXYsIHVuc2lnbmVk IGNoYXIgKm1lbSwKLQkJICAgICAgdW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVp Z2h0LAotCQkgICAgICB1bnNpZ25lZCBpbnQgc3RyaWRlKQotewotCWNvbnN0IHN0cnVjdCBjb2xv cl95dXYgY29sb3JzX3RvcFtdID0gewotCQlNQUtFX1lVVl82MDEoMTkxLCAxOTIsIDE5MiksCS8q IGdyZXkgKi8KLQkJTUFLRV9ZVVZfNjAxKDE5MiwgMTkyLCAwKSwJLyogeWVsbG93ICovCi0JCU1B S0VfWVVWXzYwMSgwLCAxOTIsIDE5MiksCS8qIGN5YW4gKi8KLQkJTUFLRV9ZVVZfNjAxKDAsIDE5 MiwgMCksCS8qIGdyZWVuICovCi0JCU1BS0VfWVVWXzYwMSgxOTIsIDAsIDE5MiksCS8qIG1hZ2Vu dGEgKi8KLQkJTUFLRV9ZVVZfNjAxKDE5MiwgMCwgMCksCS8qIHJlZCAqLwotCQlNQUtFX1lVVl82 MDEoMCwgMCwgMTkyKSwJLyogYmx1ZSAqLwotCX07Ci0JY29uc3Qgc3RydWN0IGNvbG9yX3l1diBj b2xvcnNfbWlkZGxlW10gPSB7Ci0JCU1BS0VfWVVWXzYwMSgwLCAwLCAxOTIpLAkvKiBibHVlICov Ci0JCU1BS0VfWVVWXzYwMSgxOSwgMTksIDE5KSwJLyogYmxhY2sgKi8KLQkJTUFLRV9ZVVZfNjAx KDE5MiwgMCwgMTkyKSwJLyogbWFnZW50YSAqLwotCQlNQUtFX1lVVl82MDEoMTksIDE5LCAxOSks CS8qIGJsYWNrICovCi0JCU1BS0VfWVVWXzYwMSgwLCAxOTIsIDE5MiksCS8qIGN5YW4gKi8KLQkJ TUFLRV9ZVVZfNjAxKDE5LCAxOSwgMTkpLAkvKiBibGFjayAqLwotCQlNQUtFX1lVVl82MDEoMTky LCAxOTIsIDE5MiksCS8qIGdyZXkgKi8KLQl9OwotCWNvbnN0IHN0cnVjdCBjb2xvcl95dXYgY29s b3JzX2JvdHRvbVtdID0gewotCQlNQUtFX1lVVl82MDEoMCwgMzMsIDc2KSwJLyogaW4tcGhhc2Ug Ki8KLQkJTUFLRV9ZVVZfNjAxKDI1NSwgMjU1LCAyNTUpLAkvKiBzdXBlciB3aGl0ZSAqLwotCQlN QUtFX1lVVl82MDEoNTAsIDAsIDEwNiksCS8qIHF1YWRyYXR1cmUgKi8KLQkJTUFLRV9ZVVZfNjAx KDE5LCAxOSwgMTkpLAkvKiBibGFjayAqLwotCQlNQUtFX1lVVl82MDEoOSwgOSwgOSksCQkvKiAz LjUlICovCi0JCU1BS0VfWVVWXzYwMSgxOSwgMTksIDE5KSwJLyogNy41JSAqLwotCQlNQUtFX1lV Vl82MDEoMjksIDI5LCAyOSksCS8qIDExLjUlICovCi0JCU1BS0VfWVVWXzYwMSgxOSwgMTksIDE5 KSwJLyogYmxhY2sgKi8KLQl9OwotCXVuc2lnbmVkIGNoYXIgKnlfbWVtID0gKHl1di0+b3JkZXIg JiBZVVZfWUMpID8gbWVtIDogbWVtICsgMTsKLQl1bnNpZ25lZCBjaGFyICpjX21lbSA9ICh5dXYt Pm9yZGVyICYgWVVWX0NZKSA/IG1lbSA6IG1lbSArIDE7Ci0JdW5zaWduZWQgaW50IHUgPSAoeXV2 LT5vcmRlciAmIFlVVl9ZQ3JDYikgPyAyIDogMDsKLQl1bnNpZ25lZCBpbnQgdiA9ICh5dXYtPm9y ZGVyICYgWVVWX1lDYkNyKSA/IDIgOiAwOwotCXVuc2lnbmVkIGludCB4OwotCXVuc2lnbmVkIGlu dCB5OwotCi0JLyogTHVtYSAqLwotCWZvciAoeSA9IDA7IHkgPCBoZWlnaHQgKiA2IC8gOTsgKyt5 KSB7Ci0JCWZvciAoeCA9IDA7IHggPCB3aWR0aDsgKyt4KQotCQkJeV9tZW1bMip4XSA9IGNvbG9y c190b3BbeCAqIDcgLyB3aWR0aF0ueTsKLQkJeV9tZW0gKz0gc3RyaWRlOwotCX0KLQotCWZvciAo OyB5IDwgaGVpZ2h0ICogNyAvIDk7ICsreSkgewotCQlmb3IgKHggPSAwOyB4IDwgd2lkdGg7ICsr eCkKLQkJCXlfbWVtWzIqeF0gPSBjb2xvcnNfbWlkZGxlW3ggKiA3IC8gd2lkdGhdLnk7Ci0JCXlf bWVtICs9IHN0cmlkZTsKLQl9Ci0KLQlmb3IgKDsgeSA8IGhlaWdodDsgKyt5KSB7Ci0JCWZvciAo eCA9IDA7IHggPCB3aWR0aCAqIDUgLyA3OyArK3gpCi0JCQl5X21lbVsyKnhdID0gY29sb3JzX2Jv dHRvbVt4ICogNCAvICh3aWR0aCAqIDUgLyA3KV0ueTsKLQkJZm9yICg7IHggPCB3aWR0aCAqIDYg LyA3OyArK3gpCi0JCQl5X21lbVsyKnhdID0gY29sb3JzX2JvdHRvbVsoeCAtIHdpZHRoICogNSAv IDcpICogMwotCQkJCQkJICAgLyAod2lkdGggLyA3KSArIDRdLnk7Ci0JCWZvciAoOyB4IDwgd2lk dGg7ICsreCkKLQkJCXlfbWVtWzIqeF0gPSBjb2xvcnNfYm90dG9tWzddLnk7Ci0JCXlfbWVtICs9 IHN0cmlkZTsKLQl9Ci0KLQkvKiBDaHJvbWEgKi8KLQlmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0ICog NiAvIDk7ICsreSkgewotCQlmb3IgKHggPSAwOyB4IDwgd2lkdGg7IHggKz0gMikgewotCQkJY19t ZW1bMip4K3VdID0gY29sb3JzX3RvcFt4ICogNyAvIHdpZHRoXS51OwotCQkJY19tZW1bMip4K3Zd ID0gY29sb3JzX3RvcFt4ICogNyAvIHdpZHRoXS52OwotCQl9Ci0JCWNfbWVtICs9IHN0cmlkZTsK LQl9Ci0KLQlmb3IgKDsgeSA8IGhlaWdodCAqIDcgLyA5OyArK3kpIHsKLQkJZm9yICh4ID0gMDsg eCA8IHdpZHRoOyB4ICs9IDIpIHsKLQkJCWNfbWVtWzIqeCt1XSA9IGNvbG9yc19taWRkbGVbeCAq IDcgLyB3aWR0aF0udTsKLQkJCWNfbWVtWzIqeCt2XSA9IGNvbG9yc19taWRkbGVbeCAqIDcgLyB3 aWR0aF0udjsKLQkJfQotCQljX21lbSArPSBzdHJpZGU7Ci0JfQotCi0JZm9yICg7IHkgPCBoZWln aHQ7ICsreSkgewotCQlmb3IgKHggPSAwOyB4IDwgd2lkdGggKiA1IC8gNzsgeCArPSAyKSB7Ci0J CQljX21lbVsyKngrdV0gPSBjb2xvcnNfYm90dG9tW3ggKiA0IC8gKHdpZHRoICogNSAvIDcpXS51 OwotCQkJY19tZW1bMip4K3ZdID0gY29sb3JzX2JvdHRvbVt4ICogNCAvICh3aWR0aCAqIDUgLyA3 KV0udjsKLQkJfQotCQlmb3IgKDsgeCA8IHdpZHRoICogNiAvIDc7IHggKz0gMikgewotCQkJY19t ZW1bMip4K3VdID0gY29sb3JzX2JvdHRvbVsoeCAtIHdpZHRoICogNSAvIDcpICoKLQkJCQkJCSAg ICAgMyAvICh3aWR0aCAvIDcpICsgNF0udTsKLQkJCWNfbWVtWzIqeCt2XSA9IGNvbG9yc19ib3R0 b21bKHggLSB3aWR0aCAqIDUgLyA3KSAqCi0JCQkJCQkgICAgIDMgLyAod2lkdGggLyA3KSArIDRd LnY7Ci0JCX0KLQkJZm9yICg7IHggPCB3aWR0aDsgeCArPSAyKSB7Ci0JCQljX21lbVsyKngrdV0g PSBjb2xvcnNfYm90dG9tWzddLnU7Ci0JCQljX21lbVsyKngrdl0gPSBjb2xvcnNfYm90dG9tWzdd LnY7Ci0JCX0KLQkJY19tZW0gKz0gc3RyaWRlOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLWZpbGxf c21wdGVfcmdiMTYoY29uc3Qgc3RydWN0IHJnYl9pbmZvICpyZ2IsIHVuc2lnbmVkIGNoYXIgKm1l bSwKLQkJIHVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhlaWdodCwgdW5zaWduZWQg aW50IHN0cmlkZSkKLXsKLQljb25zdCB1aW50MTZfdCBjb2xvcnNfdG9wW10gPSB7Ci0JCU1BS0Vf UkdCQShyZ2IsIDE5MiwgMTkyLCAxOTIsIDI1NSksCS8qIGdyZXkgKi8KLQkJTUFLRV9SR0JBKHJn YiwgMTkyLCAxOTIsIDAsIDI1NSksCS8qIHllbGxvdyAqLwotCQlNQUtFX1JHQkEocmdiLCAwLCAx OTIsIDE5MiwgMjU1KSwJLyogY3lhbiAqLwotCQlNQUtFX1JHQkEocmdiLCAwLCAxOTIsIDAsIDI1 NSksCQkvKiBncmVlbiAqLwotCQlNQUtFX1JHQkEocmdiLCAxOTIsIDAsIDE5MiwgMjU1KSwJLyog bWFnZW50YSAqLwotCQlNQUtFX1JHQkEocmdiLCAxOTIsIDAsIDAsIDI1NSksCQkvKiByZWQgKi8K LQkJTUFLRV9SR0JBKHJnYiwgMCwgMCwgMTkyLCAyNTUpLAkJLyogYmx1ZSAqLwotCX07Ci0JY29u c3QgdWludDE2X3QgY29sb3JzX21pZGRsZVtdID0gewotCQlNQUtFX1JHQkEocmdiLCAwLCAwLCAx OTIsIDI1NSksCQkvKiBibHVlICovCi0JCU1BS0VfUkdCQShyZ2IsIDE5LCAxOSwgMTksIDI1NSks CS8qIGJsYWNrICovCi0JCU1BS0VfUkdCQShyZ2IsIDE5MiwgMCwgMTkyLCAyNTUpLAkvKiBtYWdl bnRhICovCi0JCU1BS0VfUkdCQShyZ2IsIDE5LCAxOSwgMTksIDI1NSksCS8qIGJsYWNrICovCi0J CU1BS0VfUkdCQShyZ2IsIDAsIDE5MiwgMTkyLCAyNTUpLAkvKiBjeWFuICovCi0JCU1BS0VfUkdC QShyZ2IsIDE5LCAxOSwgMTksIDI1NSksCS8qIGJsYWNrICovCi0JCU1BS0VfUkdCQShyZ2IsIDE5 MiwgMTkyLCAxOTIsIDI1NSksCS8qIGdyZXkgKi8KLQl9OwotCWNvbnN0IHVpbnQxNl90IGNvbG9y c19ib3R0b21bXSA9IHsKLQkJTUFLRV9SR0JBKHJnYiwgMCwgMzMsIDc2LCAyNTUpLAkJLyogaW4t cGhhc2UgKi8KLQkJTUFLRV9SR0JBKHJnYiwgMjU1LCAyNTUsIDI1NSwgMjU1KSwJLyogc3VwZXIg d2hpdGUgKi8KLQkJTUFLRV9SR0JBKHJnYiwgNTAsIDAsIDEwNiwgMjU1KSwJLyogcXVhZHJhdHVy ZSAqLwotCQlNQUtFX1JHQkEocmdiLCAxOSwgMTksIDE5LCAyNTUpLAkvKiBibGFjayAqLwotCQlN QUtFX1JHQkEocmdiLCA5LCA5LCA5LCAyNTUpLAkJLyogMy41JSAqLwotCQlNQUtFX1JHQkEocmdi LCAxOSwgMTksIDE5LCAyNTUpLAkvKiA3LjUlICovCi0JCU1BS0VfUkdCQShyZ2IsIDI5LCAyOSwg MjksIDI1NSksCS8qIDExLjUlICovCi0JCU1BS0VfUkdCQShyZ2IsIDE5LCAxOSwgMTksIDI1NSks CS8qIGJsYWNrICovCi0JfTsKLQl1bnNpZ25lZCBpbnQgeDsKLQl1bnNpZ25lZCBpbnQgeTsKLQot CWZvciAoeSA9IDA7IHkgPCBoZWlnaHQgKiA2IC8gOTsgKyt5KSB7Ci0JCWZvciAoeCA9IDA7IHgg PCB3aWR0aDsgKyt4KQotCQkJKCh1aW50MTZfdCAqKW1lbSlbeF0gPSBjb2xvcnNfdG9wW3ggKiA3 IC8gd2lkdGhdOwotCQltZW0gKz0gc3RyaWRlOwotCX0KLQotCWZvciAoOyB5IDwgaGVpZ2h0ICog NyAvIDk7ICsreSkgewotCQlmb3IgKHggPSAwOyB4IDwgd2lkdGg7ICsreCkKLQkJCSgodWludDE2 X3QgKiltZW0pW3hdID0gY29sb3JzX21pZGRsZVt4ICogNyAvIHdpZHRoXTsKLQkJbWVtICs9IHN0 cmlkZTsKLQl9Ci0KLQlmb3IgKDsgeSA8IGhlaWdodDsgKyt5KSB7Ci0JCWZvciAoeCA9IDA7IHgg PCB3aWR0aCAqIDUgLyA3OyArK3gpCi0JCQkoKHVpbnQxNl90ICopbWVtKVt4XSA9Ci0JCQkJY29s b3JzX2JvdHRvbVt4ICogNCAvICh3aWR0aCAqIDUgLyA3KV07Ci0JCWZvciAoOyB4IDwgd2lkdGgg KiA2IC8gNzsgKyt4KQotCQkJKCh1aW50MTZfdCAqKW1lbSlbeF0gPQotCQkJCWNvbG9yc19ib3R0 b21bKHggLSB3aWR0aCAqIDUgLyA3KSAqIDMKLQkJCQkJICAgICAgLyAod2lkdGggLyA3KSArIDRd OwotCQlmb3IgKDsgeCA8IHdpZHRoOyArK3gpCi0JCQkoKHVpbnQxNl90ICopbWVtKVt4XSA9IGNv bG9yc19ib3R0b21bN107Ci0JCW1lbSArPSBzdHJpZGU7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAot ZmlsbF9zbXB0ZV9yZ2IyNChjb25zdCBzdHJ1Y3QgcmdiX2luZm8gKnJnYiwgdm9pZCAqbWVtLAot CQkgdW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBpbnQg c3RyaWRlKQotewotCWNvbnN0IHN0cnVjdCBjb2xvcl9yZ2IyNCBjb2xvcnNfdG9wW10gPSB7Ci0J CU1BS0VfUkdCMjQocmdiLCAxOTIsIDE5MiwgMTkyKSwJLyogZ3JleSAqLwotCQlNQUtFX1JHQjI0 KHJnYiwgMTkyLCAxOTIsIDApLAkvKiB5ZWxsb3cgKi8KLQkJTUFLRV9SR0IyNChyZ2IsIDAsIDE5 MiwgMTkyKSwJLyogY3lhbiAqLwotCQlNQUtFX1JHQjI0KHJnYiwgMCwgMTkyLCAwKSwJLyogZ3Jl ZW4gKi8KLQkJTUFLRV9SR0IyNChyZ2IsIDE5MiwgMCwgMTkyKSwJLyogbWFnZW50YSAqLwotCQlN QUtFX1JHQjI0KHJnYiwgMTkyLCAwLCAwKSwJLyogcmVkICovCi0JCU1BS0VfUkdCMjQocmdiLCAw LCAwLCAxOTIpLAkvKiBibHVlICovCi0JfTsKLQljb25zdCBzdHJ1Y3QgY29sb3JfcmdiMjQgY29s b3JzX21pZGRsZVtdID0gewotCQlNQUtFX1JHQjI0KHJnYiwgMCwgMCwgMTkyKSwJLyogYmx1ZSAq LwotCQlNQUtFX1JHQjI0KHJnYiwgMTksIDE5LCAxOSksCS8qIGJsYWNrICovCi0JCU1BS0VfUkdC MjQocmdiLCAxOTIsIDAsIDE5MiksCS8qIG1hZ2VudGEgKi8KLQkJTUFLRV9SR0IyNChyZ2IsIDE5 LCAxOSwgMTkpLAkvKiBibGFjayAqLwotCQlNQUtFX1JHQjI0KHJnYiwgMCwgMTkyLCAxOTIpLAkv KiBjeWFuICovCi0JCU1BS0VfUkdCMjQocmdiLCAxOSwgMTksIDE5KSwJLyogYmxhY2sgKi8KLQkJ TUFLRV9SR0IyNChyZ2IsIDE5MiwgMTkyLCAxOTIpLAkvKiBncmV5ICovCi0JfTsKLQljb25zdCBz dHJ1Y3QgY29sb3JfcmdiMjQgY29sb3JzX2JvdHRvbVtdID0gewotCQlNQUtFX1JHQjI0KHJnYiwg MCwgMzMsIDc2KSwJLyogaW4tcGhhc2UgKi8KLQkJTUFLRV9SR0IyNChyZ2IsIDI1NSwgMjU1LCAy NTUpLAkvKiBzdXBlciB3aGl0ZSAqLwotCQlNQUtFX1JHQjI0KHJnYiwgNTAsIDAsIDEwNiksCS8q IHF1YWRyYXR1cmUgKi8KLQkJTUFLRV9SR0IyNChyZ2IsIDE5LCAxOSwgMTkpLAkvKiBibGFjayAq LwotCQlNQUtFX1JHQjI0KHJnYiwgOSwgOSwgOSksCS8qIDMuNSUgKi8KLQkJTUFLRV9SR0IyNChy Z2IsIDE5LCAxOSwgMTkpLAkvKiA3LjUlICovCi0JCU1BS0VfUkdCMjQocmdiLCAyOSwgMjksIDI5 KSwJLyogMTEuNSUgKi8KLQkJTUFLRV9SR0IyNChyZ2IsIDE5LCAxOSwgMTkpLAkvKiBibGFjayAq LwotCX07Ci0JdW5zaWduZWQgaW50IHg7Ci0JdW5zaWduZWQgaW50IHk7Ci0KLQlmb3IgKHkgPSAw OyB5IDwgaGVpZ2h0ICogNiAvIDk7ICsreSkgewotCQlmb3IgKHggPSAwOyB4IDwgd2lkdGg7ICsr eCkKLQkJCSgoc3RydWN0IGNvbG9yX3JnYjI0ICopbWVtKVt4XSA9Ci0JCQkJY29sb3JzX3RvcFt4 ICogNyAvIHdpZHRoXTsKLQkJbWVtICs9IHN0cmlkZTsKLQl9Ci0KLQlmb3IgKDsgeSA8IGhlaWdo dCAqIDcgLyA5OyArK3kpIHsKLQkJZm9yICh4ID0gMDsgeCA8IHdpZHRoOyArK3gpCi0JCQkoKHN0 cnVjdCBjb2xvcl9yZ2IyNCAqKW1lbSlbeF0gPQotCQkJCWNvbG9yc19taWRkbGVbeCAqIDcgLyB3 aWR0aF07Ci0JCW1lbSArPSBzdHJpZGU7Ci0JfQotCi0JZm9yICg7IHkgPCBoZWlnaHQ7ICsreSkg ewotCQlmb3IgKHggPSAwOyB4IDwgd2lkdGggKiA1IC8gNzsgKyt4KQotCQkJKChzdHJ1Y3QgY29s b3JfcmdiMjQgKiltZW0pW3hdID0KLQkJCQljb2xvcnNfYm90dG9tW3ggKiA0IC8gKHdpZHRoICog NSAvIDcpXTsKLQkJZm9yICg7IHggPCB3aWR0aCAqIDYgLyA3OyArK3gpCi0JCQkoKHN0cnVjdCBj b2xvcl9yZ2IyNCAqKW1lbSlbeF0gPQotCQkJCWNvbG9yc19ib3R0b21bKHggLSB3aWR0aCAqIDUg LyA3KSAqIDMKLQkJCQkJICAgICAgLyAod2lkdGggLyA3KSArIDRdOwotCQlmb3IgKDsgeCA8IHdp ZHRoOyArK3gpCi0JCQkoKHN0cnVjdCBjb2xvcl9yZ2IyNCAqKW1lbSlbeF0gPSBjb2xvcnNfYm90 dG9tWzddOwotCQltZW0gKz0gc3RyaWRlOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLWZpbGxfc21w dGVfcmdiMzIoY29uc3Qgc3RydWN0IHJnYl9pbmZvICpyZ2IsIHVuc2lnbmVkIGNoYXIgKm1lbSwK LQkJIHVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhlaWdodCwgdW5zaWduZWQgaW50 IHN0cmlkZSkKLXsKLQljb25zdCB1aW50MzJfdCBjb2xvcnNfdG9wW10gPSB7Ci0JCU1BS0VfUkdC QShyZ2IsIDE5MiwgMTkyLCAxOTIsIDI1NSksCS8qIGdyZXkgKi8KLQkJTUFLRV9SR0JBKHJnYiwg MTkyLCAxOTIsIDAsIDI1NSksCS8qIHllbGxvdyAqLwotCQlNQUtFX1JHQkEocmdiLCAwLCAxOTIs IDE5MiwgMjU1KSwJLyogY3lhbiAqLwotCQlNQUtFX1JHQkEocmdiLCAwLCAxOTIsIDAsIDI1NSks CQkvKiBncmVlbiAqLwotCQlNQUtFX1JHQkEocmdiLCAxOTIsIDAsIDE5MiwgMjU1KSwJLyogbWFn ZW50YSAqLwotCQlNQUtFX1JHQkEocmdiLCAxOTIsIDAsIDAsIDI1NSksCQkvKiByZWQgKi8KLQkJ TUFLRV9SR0JBKHJnYiwgMCwgMCwgMTkyLCAyNTUpLAkJLyogYmx1ZSAqLwotCX07Ci0JY29uc3Qg dWludDMyX3QgY29sb3JzX21pZGRsZVtdID0gewotCQlNQUtFX1JHQkEocmdiLCAwLCAwLCAxOTIs IDI1NSksCQkvKiBibHVlICovCi0JCU1BS0VfUkdCQShyZ2IsIDE5LCAxOSwgMTksIDI1NSksCS8q IGJsYWNrICovCi0JCU1BS0VfUkdCQShyZ2IsIDE5MiwgMCwgMTkyLCAyNTUpLAkvKiBtYWdlbnRh ICovCi0JCU1BS0VfUkdCQShyZ2IsIDE5LCAxOSwgMTksIDI1NSksCS8qIGJsYWNrICovCi0JCU1B S0VfUkdCQShyZ2IsIDAsIDE5MiwgMTkyLCAyNTUpLAkvKiBjeWFuICovCi0JCU1BS0VfUkdCQShy Z2IsIDE5LCAxOSwgMTksIDI1NSksCS8qIGJsYWNrICovCi0JCU1BS0VfUkdCQShyZ2IsIDE5Miwg MTkyLCAxOTIsIDI1NSksCS8qIGdyZXkgKi8KLQl9OwotCWNvbnN0IHVpbnQzMl90IGNvbG9yc19i b3R0b21bXSA9IHsKLQkJTUFLRV9SR0JBKHJnYiwgMCwgMzMsIDc2LCAyNTUpLAkJLyogaW4tcGhh c2UgKi8KLQkJTUFLRV9SR0JBKHJnYiwgMjU1LCAyNTUsIDI1NSwgMjU1KSwJLyogc3VwZXIgd2hp dGUgKi8KLQkJTUFLRV9SR0JBKHJnYiwgNTAsIDAsIDEwNiwgMjU1KSwJLyogcXVhZHJhdHVyZSAq LwotCQlNQUtFX1JHQkEocmdiLCAxOSwgMTksIDE5LCAyNTUpLAkvKiBibGFjayAqLwotCQlNQUtF X1JHQkEocmdiLCA5LCA5LCA5LCAyNTUpLAkJLyogMy41JSAqLwotCQlNQUtFX1JHQkEocmdiLCAx OSwgMTksIDE5LCAyNTUpLAkvKiA3LjUlICovCi0JCU1BS0VfUkdCQShyZ2IsIDI5LCAyOSwgMjks IDI1NSksCS8qIDExLjUlICovCi0JCU1BS0VfUkdCQShyZ2IsIDE5LCAxOSwgMTksIDI1NSksCS8q IGJsYWNrICovCi0JfTsKLQl1bnNpZ25lZCBpbnQgeDsKLQl1bnNpZ25lZCBpbnQgeTsKLQotCWZv ciAoeSA9IDA7IHkgPCBoZWlnaHQgKiA2IC8gOTsgKyt5KSB7Ci0JCWZvciAoeCA9IDA7IHggPCB3 aWR0aDsgKyt4KQotCQkJKCh1aW50MzJfdCAqKW1lbSlbeF0gPSBjb2xvcnNfdG9wW3ggKiA3IC8g d2lkdGhdOwotCQltZW0gKz0gc3RyaWRlOwotCX0KLQotCWZvciAoOyB5IDwgaGVpZ2h0ICogNyAv IDk7ICsreSkgewotCQlmb3IgKHggPSAwOyB4IDwgd2lkdGg7ICsreCkKLQkJCSgodWludDMyX3Qg KiltZW0pW3hdID0gY29sb3JzX21pZGRsZVt4ICogNyAvIHdpZHRoXTsKLQkJbWVtICs9IHN0cmlk ZTsKLQl9Ci0KLQlmb3IgKDsgeSA8IGhlaWdodDsgKyt5KSB7Ci0JCWZvciAoeCA9IDA7IHggPCB3 aWR0aCAqIDUgLyA3OyArK3gpCi0JCQkoKHVpbnQzMl90ICopbWVtKVt4XSA9Ci0JCQkJY29sb3Jz X2JvdHRvbVt4ICogNCAvICh3aWR0aCAqIDUgLyA3KV07Ci0JCWZvciAoOyB4IDwgd2lkdGggKiA2 IC8gNzsgKyt4KQotCQkJKCh1aW50MzJfdCAqKW1lbSlbeF0gPQotCQkJCWNvbG9yc19ib3R0b21b KHggLSB3aWR0aCAqIDUgLyA3KSAqIDMKLQkJCQkJICAgICAgLyAod2lkdGggLyA3KSArIDRdOwot CQlmb3IgKDsgeCA8IHdpZHRoOyArK3gpCi0JCQkoKHVpbnQzMl90ICopbWVtKVt4XSA9IGNvbG9y c19ib3R0b21bN107Ci0JCW1lbSArPSBzdHJpZGU7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotZmls bF9zbXB0ZShjb25zdCBzdHJ1Y3QgZm9ybWF0X2luZm8gKmluZm8sIHZvaWQgKnBsYW5lc1szXSwg dW5zaWduZWQgaW50IHdpZHRoLAotCSAgIHVuc2lnbmVkIGludCBoZWlnaHQsIHVuc2lnbmVkIGlu dCBzdHJpZGUpCi17Ci0JdW5zaWduZWQgY2hhciAqdSwgKnY7Ci0KLQlzd2l0Y2ggKGluZm8tPmZv cm1hdCkgewotCWNhc2UgRFJNX0ZPUk1BVF9VWVZZOgotCWNhc2UgRFJNX0ZPUk1BVF9WWVVZOgot CWNhc2UgRFJNX0ZPUk1BVF9ZVVlWOgotCWNhc2UgRFJNX0ZPUk1BVF9ZVllVOgotCQlyZXR1cm4g ZmlsbF9zbXB0ZV95dXZfcGFja2VkKCZpbmZvLT55dXYsIHBsYW5lc1swXSwgd2lkdGgsCi0JCQkJ CSAgICAgaGVpZ2h0LCBzdHJpZGUpOwotCi0JY2FzZSBEUk1fRk9STUFUX05WMTI6Ci0JY2FzZSBE Uk1fRk9STUFUX05WMjE6Ci0JY2FzZSBEUk1fRk9STUFUX05WMTY6Ci0JY2FzZSBEUk1fRk9STUFU X05WNjE6Ci0JCXUgPSBpbmZvLT55dXYub3JkZXIgJiBZVVZfWUNiQ3IgPyBwbGFuZXNbMV0gOiBw bGFuZXNbMV0gKyAxOwotCQl2ID0gaW5mby0+eXV2Lm9yZGVyICYgWVVWX1lDckNiID8gcGxhbmVz WzFdIDogcGxhbmVzWzFdICsgMTsKLQkJcmV0dXJuIGZpbGxfc21wdGVfeXV2X3BsYW5hcigmaW5m by0+eXV2LCBwbGFuZXNbMF0sIHUsIHYsCi0JCQkJCSAgICAgd2lkdGgsIGhlaWdodCwgc3RyaWRl KTsKLQotCWNhc2UgRFJNX0ZPUk1BVF9ZVVY0MjA6Ci0JCXJldHVybiBmaWxsX3NtcHRlX3l1dl9w bGFuYXIoJmluZm8tPnl1diwgcGxhbmVzWzBdLCBwbGFuZXNbMV0sCi0JCQkJCSAgICAgcGxhbmVz WzJdLCB3aWR0aCwgaGVpZ2h0LCBzdHJpZGUpOwotCi0JY2FzZSBEUk1fRk9STUFUX1lWVTQyMDoK LQkJcmV0dXJuIGZpbGxfc21wdGVfeXV2X3BsYW5hcigmaW5mby0+eXV2LCBwbGFuZXNbMF0sIHBs YW5lc1syXSwKLQkJCQkJICAgICBwbGFuZXNbMV0sIHdpZHRoLCBoZWlnaHQsIHN0cmlkZSk7Ci0K LQljYXNlIERSTV9GT1JNQVRfQVJHQjQ0NDQ6Ci0JY2FzZSBEUk1fRk9STUFUX1hSR0I0NDQ0Ogot CWNhc2UgRFJNX0ZPUk1BVF9BQkdSNDQ0NDoKLQljYXNlIERSTV9GT1JNQVRfWEJHUjQ0NDQ6Ci0J Y2FzZSBEUk1fRk9STUFUX1JHQkE0NDQ0OgotCWNhc2UgRFJNX0ZPUk1BVF9SR0JYNDQ0NDoKLQlj YXNlIERSTV9GT1JNQVRfQkdSQTQ0NDQ6Ci0JY2FzZSBEUk1fRk9STUFUX0JHUlg0NDQ0OgotCWNh c2UgRFJNX0ZPUk1BVF9SR0I1NjU6Ci0JY2FzZSBEUk1fRk9STUFUX0JHUjU2NToKLQljYXNlIERS TV9GT1JNQVRfQVJHQjE1NTU6Ci0JY2FzZSBEUk1fRk9STUFUX1hSR0IxNTU1OgotCWNhc2UgRFJN X0ZPUk1BVF9BQkdSMTU1NToKLQljYXNlIERSTV9GT1JNQVRfWEJHUjE1NTU6Ci0JY2FzZSBEUk1f Rk9STUFUX1JHQkE1NTUxOgotCWNhc2UgRFJNX0ZPUk1BVF9SR0JYNTU1MToKLQljYXNlIERSTV9G T1JNQVRfQkdSQTU1NTE6Ci0JY2FzZSBEUk1fRk9STUFUX0JHUlg1NTUxOgotCQlyZXR1cm4gZmls bF9zbXB0ZV9yZ2IxNigmaW5mby0+cmdiLCBwbGFuZXNbMF0sCi0JCQkJCXdpZHRoLCBoZWlnaHQs IHN0cmlkZSk7Ci0KLQljYXNlIERSTV9GT1JNQVRfQkdSODg4OgotCWNhc2UgRFJNX0ZPUk1BVF9S R0I4ODg6Ci0JCXJldHVybiBmaWxsX3NtcHRlX3JnYjI0KCZpbmZvLT5yZ2IsIHBsYW5lc1swXSwK LQkJCQkJd2lkdGgsIGhlaWdodCwgc3RyaWRlKTsKLQljYXNlIERSTV9GT1JNQVRfQVJHQjg4ODg6 Ci0JY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4OgotCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoK LQljYXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6Ci0JY2FzZSBEUk1fRk9STUFUX1JHQkE4ODg4Ogot CWNhc2UgRFJNX0ZPUk1BVF9SR0JYODg4ODoKLQljYXNlIERSTV9GT1JNQVRfQkdSQTg4ODg6Ci0J Y2FzZSBEUk1fRk9STUFUX0JHUlg4ODg4OgotCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMDoK LQljYXNlIERSTV9GT1JNQVRfWFJHQjIxMDEwMTA6Ci0JY2FzZSBEUk1fRk9STUFUX0FCR1IyMTAx MDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMDoKLQljYXNlIERSTV9GT1JNQVRfUkdC QTEwMTAxMDI6Ci0JY2FzZSBEUk1fRk9STUFUX1JHQlgxMDEwMTAyOgotCWNhc2UgRFJNX0ZPUk1B VF9CR1JBMTAxMDEwMjoKLQljYXNlIERSTV9GT1JNQVRfQkdSWDEwMTAxMDI6Ci0JCXJldHVybiBm aWxsX3NtcHRlX3JnYjMyKCZpbmZvLT5yZ2IsIHBsYW5lc1swXSwKLQkJCQkJd2lkdGgsIGhlaWdo dCwgc3RyaWRlKTsKLQl9Ci19Ci0KLS8qIHN3YXAgdGhlc2UgZm9yIGJpZyBlbmRpYW4uLiAqLwot I2RlZmluZSBSRUQgICAyCi0jZGVmaW5lIEdSRUVOIDEKLSNkZWZpbmUgQkxVRSAgMAotCi1zdGF0 aWMgdm9pZAotbWFrZV9wd2V0dHkodm9pZCAqZGF0YSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBp bnQgc3RyaWRlLCB1aW50MzJfdCBmb3JtYXQpCi17Ci0jaWZkZWYgSEFWRV9DQUlSTwotCWNhaXJv X3N1cmZhY2VfdCAqc3VyZmFjZTsKLQljYWlyb190ICpjcjsKLQlpbnQgeCwgeTsKLQljYWlyb19m b3JtYXRfdCBjYWlyb19mb3JtYXQ7Ci0KLQkvKiB3ZSBjYW4gaWdub3JlIHRoZSBvcmRlciBvZiBS LEcsQiBjaGFubmVscyAqLwotCXN3aXRjaCAoZm9ybWF0KSB7Ci0JY2FzZSBEUk1fRk9STUFUX1hS R0I4ODg4OgotCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKLQljYXNlIERSTV9GT1JNQVRfWEJH Ujg4ODg6Ci0JY2FzZSBEUk1fRk9STUFUX0FCR1I4ODg4OgotCQljYWlyb19mb3JtYXQgPSBDQUlS T19GT1JNQVRfQVJHQjMyOwotCQlicmVhazsKLQljYXNlIERSTV9GT1JNQVRfUkdCNTY1OgotCWNh c2UgRFJNX0ZPUk1BVF9CR1I1NjU6Ci0JCWNhaXJvX2Zvcm1hdCA9IENBSVJPX0ZPUk1BVF9SR0Ix Nl81NjU7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybjsKLQl9Ci0KLQlzdXJmYWNlID0g Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoZGF0YSwKLQkJCQkJCSAgICAgIGNh aXJvX2Zvcm1hdCwKLQkJCQkJCSAgICAgIHdpZHRoLCBoZWlnaHQsCi0JCQkJCQkgICAgICBzdHJp ZGUpOwotCWNyID0gY2Fpcm9fY3JlYXRlKHN1cmZhY2UpOwotCWNhaXJvX3N1cmZhY2VfZGVzdHJv eShzdXJmYWNlKTsKLQotCWNhaXJvX3NldF9saW5lX2NhcChjciwgQ0FJUk9fTElORV9DQVBfU1FV QVJFKTsKLQlmb3IgKHggPSAwOyB4IDwgd2lkdGg7IHggKz0gMjUwKQotCQlmb3IgKHkgPSAwOyB5 IDwgaGVpZ2h0OyB5ICs9IDI1MCkgewotCQkJY2hhciBidWZbNjRdOwotCi0JCQljYWlyb19tb3Zl X3RvKGNyLCB4LCB5IC0gMjApOwotCQkJY2Fpcm9fbGluZV90byhjciwgeCwgeSArIDIwKTsKLQkJ CWNhaXJvX21vdmVfdG8oY3IsIHggLSAyMCwgeSk7Ci0JCQljYWlyb19saW5lX3RvKGNyLCB4ICsg MjAsIHkpOwotCQkJY2Fpcm9fbmV3X3N1Yl9wYXRoKGNyKTsKLQkJCWNhaXJvX2FyYyhjciwgeCwg eSwgMTAsIDAsIE1fUEkgKiAyKTsKLQkJCWNhaXJvX3NldF9saW5lX3dpZHRoKGNyLCA0KTsKLQkJ CWNhaXJvX3NldF9zb3VyY2VfcmdiKGNyLCAwLCAwLCAwKTsKLQkJCWNhaXJvX3N0cm9rZV9wcmVz ZXJ2ZShjcik7Ci0JCQljYWlyb19zZXRfc291cmNlX3JnYihjciwgMSwgMSwgMSk7Ci0JCQljYWly b19zZXRfbGluZV93aWR0aChjciwgMik7Ci0JCQljYWlyb19zdHJva2UoY3IpOwotCi0JCQlzbnBy aW50ZihidWYsIHNpemVvZiBidWYsICIlZCwgJWQiLCB4LCB5KTsKLQkJCWNhaXJvX21vdmVfdG8o Y3IsIHggKyAyMCwgeSArIDIwKTsKLQkJCWNhaXJvX3RleHRfcGF0aChjciwgYnVmKTsKLQkJCWNh aXJvX3NldF9zb3VyY2VfcmdiKGNyLCAwLCAwLCAwKTsKLQkJCWNhaXJvX3N0cm9rZV9wcmVzZXJ2 ZShjcik7Ci0JCQljYWlyb19zZXRfc291cmNlX3JnYihjciwgMSwgMSwgMSk7Ci0JCQljYWlyb19m aWxsKGNyKTsKLQkJfQotCi0JY2Fpcm9fZGVzdHJveShjcik7Ci0jZW5kaWYKLX0KLQotc3RhdGlj IHZvaWQKLWZpbGxfdGlsZXNfeXV2X3BsYW5hcihjb25zdCBzdHJ1Y3QgZm9ybWF0X2luZm8gKmlu Zm8sCi0JCSAgICAgIHVuc2lnbmVkIGNoYXIgKnlfbWVtLCB1bnNpZ25lZCBjaGFyICp1X21lbSwK LQkJICAgICAgdW5zaWduZWQgY2hhciAqdl9tZW0sIHVuc2lnbmVkIGludCB3aWR0aCwKLQkJICAg ICAgdW5zaWduZWQgaW50IGhlaWdodCwgdW5zaWduZWQgaW50IHN0cmlkZSkKLXsKLQljb25zdCBz dHJ1Y3QgeXV2X2luZm8gKnl1diA9ICZpbmZvLT55dXY7Ci0JdW5zaWduZWQgaW50IGNzID0geXV2 LT5jaHJvbWFfc3RyaWRlOwotCXVuc2lnbmVkIGludCB4c3ViID0geXV2LT54c3ViOwotCXVuc2ln bmVkIGludCB5c3ViID0geXV2LT55c3ViOwotCXVuc2lnbmVkIGludCB4OwotCXVuc2lnbmVkIGlu dCB5OwotCi0JZm9yICh5ID0gMDsgeSA8IGhlaWdodDsgKyt5KSB7Ci0JCWZvciAoeCA9IDA7IHgg PCB3aWR0aDsgKyt4KSB7Ci0JCQlkaXZfdCBkID0gZGl2KHgreSwgd2lkdGgpOwotCQkJdWludDMy X3QgcmdiMzIgPSAweDAwMTMwNTAyICogKGQucXVvdCA+PiA2KQotCQkJCSAgICAgICArIDB4MDAw YTExMjAgKiAoZC5yZW0gPj4gNik7Ci0JCQlzdHJ1Y3QgY29sb3JfeXV2IGNvbG9yID0KLQkJCQlN QUtFX1lVVl82MDEoKHJnYjMyID4+IDE2KSAmIDB4ZmYsCi0JCQkJCSAgICAgKHJnYjMyID4+IDgp ICYgMHhmZiwgcmdiMzIgJiAweGZmKTsKLQotCQkJeV9tZW1beF0gPSBjb2xvci55OwotCQkJdV9t ZW1beC94c3ViKmNzXSA9IGNvbG9yLnU7Ci0JCQl2X21lbVt4L3hzdWIqY3NdID0gY29sb3IudjsK LQkJfQotCi0JCXlfbWVtICs9IHN0cmlkZTsKLQkJaWYgKCh5ICsgMSkgJSB5c3ViID09IDApIHsK LQkJCXVfbWVtICs9IHN0cmlkZSAqIGNzIC8geHN1YjsKLQkJCXZfbWVtICs9IHN0cmlkZSAqIGNz IC8geHN1YjsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQKLWZpbGxfdGlsZXNfeXV2X3BhY2tl ZChjb25zdCBzdHJ1Y3QgZm9ybWF0X2luZm8gKmluZm8sIHVuc2lnbmVkIGNoYXIgKm1lbSwKLQkJ ICAgICAgdW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0LAotCQkgICAgICB1 bnNpZ25lZCBpbnQgc3RyaWRlKQotewotCWNvbnN0IHN0cnVjdCB5dXZfaW5mbyAqeXV2ID0gJmlu Zm8tPnl1djsKLQl1bnNpZ25lZCBjaGFyICp5X21lbSA9ICh5dXYtPm9yZGVyICYgWVVWX1lDKSA/ IG1lbSA6IG1lbSArIDE7Ci0JdW5zaWduZWQgY2hhciAqY19tZW0gPSAoeXV2LT5vcmRlciAmIFlV Vl9DWSkgPyBtZW0gOiBtZW0gKyAxOwotCXVuc2lnbmVkIGludCB1ID0gKHl1di0+b3JkZXIgJiBZ VVZfWUNyQ2IpID8gMiA6IDA7Ci0JdW5zaWduZWQgaW50IHYgPSAoeXV2LT5vcmRlciAmIFlVVl9Z Q2JDcikgPyAyIDogMDsKLQl1bnNpZ25lZCBpbnQgeDsKLQl1bnNpZ25lZCBpbnQgeTsKLQotCWZv ciAoeSA9IDA7IHkgPCBoZWlnaHQ7ICsreSkgewotCQlmb3IgKHggPSAwOyB4IDwgd2lkdGg7IHgg Kz0gMikgewotCQkJZGl2X3QgZCA9IGRpdih4K3ksIHdpZHRoKTsKLQkJCXVpbnQzMl90IHJnYjMy ID0gMHgwMDEzMDUwMiAqIChkLnF1b3QgPj4gNikKLQkJCQkgICAgICAgKyAweDAwMGExMTIwICog KGQucmVtID4+IDYpOwotCQkJc3RydWN0IGNvbG9yX3l1diBjb2xvciA9Ci0JCQkJTUFLRV9ZVVZf NjAxKChyZ2IzMiA+PiAxNikgJiAweGZmLAotCQkJCQkgICAgIChyZ2IzMiA+PiA4KSAmIDB4ZmYs IHJnYjMyICYgMHhmZik7Ci0KLQkJCXlfbWVtWzIqeF0gPSBjb2xvci55OwotCQkJY19tZW1bMip4 K3VdID0gY29sb3IudTsKLQkJCXlfbWVtWzIqeCsyXSA9IGNvbG9yLnk7Ci0JCQljX21lbVsyKngr dl0gPSBjb2xvci52OwotCQl9Ci0KLQkJeV9tZW0gKz0gc3RyaWRlOwotCQljX21lbSArPSBzdHJp ZGU7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotZmlsbF90aWxlc19yZ2IxNihjb25zdCBzdHJ1Y3Qg Zm9ybWF0X2luZm8gKmluZm8sIHVuc2lnbmVkIGNoYXIgKm1lbSwKLQkJIHVuc2lnbmVkIGludCB3 aWR0aCwgdW5zaWduZWQgaW50IGhlaWdodCwgdW5zaWduZWQgaW50IHN0cmlkZSkKLXsKLQljb25z dCBzdHJ1Y3QgcmdiX2luZm8gKnJnYiA9ICZpbmZvLT5yZ2I7Ci0JdW5zaWduZWQgY2hhciAqbWVt X2Jhc2UgPSBtZW07Ci0JdW5zaWduZWQgaW50IHgsIHk7Ci0KLQlmb3IgKHkgPSAwOyB5IDwgaGVp Z2h0OyArK3kpIHsKLQkJZm9yICh4ID0gMDsgeCA8IHdpZHRoOyArK3gpIHsKLQkJCWRpdl90IGQg PSBkaXYoeCt5LCB3aWR0aCk7Ci0JCQl1aW50MzJfdCByZ2IzMiA9IDB4MDAxMzA1MDIgKiAoZC5x dW90ID4+IDYpCi0JCQkJICAgICAgICsgMHgwMDBhMTEyMCAqIChkLnJlbSA+PiA2KTsKLQkJCXVp bnQxNl90IGNvbG9yID0KLQkJCQlNQUtFX1JHQkEocmdiLCAocmdiMzIgPj4gMTYpICYgMHhmZiwK LQkJCQkJICAocmdiMzIgPj4gOCkgJiAweGZmLCByZ2IzMiAmIDB4ZmYsCi0JCQkJCSAgMjU1KTsK LQotCQkJKCh1aW50MTZfdCAqKW1lbSlbeF0gPSBjb2xvcjsKLQkJfQotCQltZW0gKz0gc3RyaWRl OwotCX0KLQotCW1ha2VfcHdldHR5KG1lbV9iYXNlLCB3aWR0aCwgaGVpZ2h0LCBzdHJpZGUsIGlu Zm8tPmZvcm1hdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1maWxsX3RpbGVzX3JnYjI0KGNvbnN0IHN0 cnVjdCBmb3JtYXRfaW5mbyAqaW5mbywgdW5zaWduZWQgY2hhciAqbWVtLAotCQkgdW5zaWduZWQg aW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBpbnQgc3RyaWRlKQotewot CWNvbnN0IHN0cnVjdCByZ2JfaW5mbyAqcmdiID0gJmluZm8tPnJnYjsKLQl1bnNpZ25lZCBpbnQg eCwgeTsKLQotCWZvciAoeSA9IDA7IHkgPCBoZWlnaHQ7ICsreSkgewotCQlmb3IgKHggPSAwOyB4 IDwgd2lkdGg7ICsreCkgewotCQkJZGl2X3QgZCA9IGRpdih4K3ksIHdpZHRoKTsKLQkJCXVpbnQz Ml90IHJnYjMyID0gMHgwMDEzMDUwMiAqIChkLnF1b3QgPj4gNikKLQkJCQkgICAgICAgKyAweDAw MGExMTIwICogKGQucmVtID4+IDYpOwotCQkJc3RydWN0IGNvbG9yX3JnYjI0IGNvbG9yID0KLQkJ CQlNQUtFX1JHQjI0KHJnYiwgKHJnYjMyID4+IDE2KSAmIDB4ZmYsCi0JCQkJCSAgIChyZ2IzMiA+ PiA4KSAmIDB4ZmYsIHJnYjMyICYgMHhmZik7Ci0KLQkJCSgoc3RydWN0IGNvbG9yX3JnYjI0ICop bWVtKVt4XSA9IGNvbG9yOwotCQl9Ci0JCW1lbSArPSBzdHJpZGU7Ci0JfQotfQotCi1zdGF0aWMg dm9pZAotZmlsbF90aWxlc19yZ2IzMihjb25zdCBzdHJ1Y3QgZm9ybWF0X2luZm8gKmluZm8sIHVu c2lnbmVkIGNoYXIgKm1lbSwKLQkJIHVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhl aWdodCwgdW5zaWduZWQgaW50IHN0cmlkZSkKLXsKLQljb25zdCBzdHJ1Y3QgcmdiX2luZm8gKnJn YiA9ICZpbmZvLT5yZ2I7Ci0JdW5zaWduZWQgY2hhciAqbWVtX2Jhc2UgPSBtZW07Ci0JdW5zaWdu ZWQgaW50IHgsIHk7Ci0KLQlmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyArK3kpIHsKLQkJZm9yICh4 ID0gMDsgeCA8IHdpZHRoOyArK3gpIHsKLQkJCWRpdl90IGQgPSBkaXYoeCt5LCB3aWR0aCk7Ci0J CQl1aW50MzJfdCByZ2IzMiA9IDB4MDAxMzA1MDIgKiAoZC5xdW90ID4+IDYpCi0JCQkJICAgICAg ICsgMHgwMDBhMTEyMCAqIChkLnJlbSA+PiA2KTsKLQkJCXVpbnQzMl90IGFscGhhID0gKCh5IDwg aGVpZ2h0LzIpICYmICh4IDwgd2lkdGgvMikpID8gMTI3IDogMjU1OwotCQkJdWludDMyX3QgY29s b3IgPQotCQkJCU1BS0VfUkdCQShyZ2IsIChyZ2IzMiA+PiAxNikgJiAweGZmLAotCQkJCQkgIChy Z2IzMiA+PiA4KSAmIDB4ZmYsIHJnYjMyICYgMHhmZiwKLQkJCQkJICBhbHBoYSk7Ci0KLQkJCSgo dWludDMyX3QgKiltZW0pW3hdID0gY29sb3I7Ci0JCX0KLQkJbWVtICs9IHN0cmlkZTsKLQl9Ci0K LQltYWtlX3B3ZXR0eShtZW1fYmFzZSwgd2lkdGgsIGhlaWdodCwgc3RyaWRlLCBpbmZvLT5mb3Jt YXQpOwotfQotCi1zdGF0aWMgdm9pZAotZmlsbF90aWxlcyhjb25zdCBzdHJ1Y3QgZm9ybWF0X2lu Zm8gKmluZm8sIHZvaWQgKnBsYW5lc1szXSwgdW5zaWduZWQgaW50IHdpZHRoLAotCSAgIHVuc2ln bmVkIGludCBoZWlnaHQsIHVuc2lnbmVkIGludCBzdHJpZGUpCi17Ci0JdW5zaWduZWQgY2hhciAq dSwgKnY7Ci0KLQlzd2l0Y2ggKGluZm8tPmZvcm1hdCkgewotCWNhc2UgRFJNX0ZPUk1BVF9VWVZZ OgotCWNhc2UgRFJNX0ZPUk1BVF9WWVVZOgotCWNhc2UgRFJNX0ZPUk1BVF9ZVVlWOgotCWNhc2Ug RFJNX0ZPUk1BVF9ZVllVOgotCQlyZXR1cm4gZmlsbF90aWxlc195dXZfcGFja2VkKGluZm8sIHBs YW5lc1swXSwKLQkJCQkJICAgICB3aWR0aCwgaGVpZ2h0LCBzdHJpZGUpOwotCi0JY2FzZSBEUk1f Rk9STUFUX05WMTI6Ci0JY2FzZSBEUk1fRk9STUFUX05WMjE6Ci0JY2FzZSBEUk1fRk9STUFUX05W MTY6Ci0JY2FzZSBEUk1fRk9STUFUX05WNjE6Ci0JCXUgPSBpbmZvLT55dXYub3JkZXIgJiBZVVZf WUNiQ3IgPyBwbGFuZXNbMV0gOiBwbGFuZXNbMV0gKyAxOwotCQl2ID0gaW5mby0+eXV2Lm9yZGVy ICYgWVVWX1lDckNiID8gcGxhbmVzWzFdIDogcGxhbmVzWzFdICsgMTsKLQkJcmV0dXJuIGZpbGxf dGlsZXNfeXV2X3BsYW5hcihpbmZvLCBwbGFuZXNbMF0sIHUsIHYsCi0JCQkJCSAgICAgd2lkdGgs IGhlaWdodCwgc3RyaWRlKTsKLQotCWNhc2UgRFJNX0ZPUk1BVF9ZVVY0MjA6Ci0JCXJldHVybiBm aWxsX3RpbGVzX3l1dl9wbGFuYXIoaW5mbywgcGxhbmVzWzBdLCBwbGFuZXNbMV0sCi0JCQkJCSAg ICAgcGxhbmVzWzJdLCB3aWR0aCwgaGVpZ2h0LCBzdHJpZGUpOwotCi0JY2FzZSBEUk1fRk9STUFU X1lWVTQyMDoKLQkJcmV0dXJuIGZpbGxfdGlsZXNfeXV2X3BsYW5hcihpbmZvLCBwbGFuZXNbMF0s IHBsYW5lc1syXSwKLQkJCQkJICAgICBwbGFuZXNbMV0sIHdpZHRoLCBoZWlnaHQsIHN0cmlkZSk7 Ci0KLQljYXNlIERSTV9GT1JNQVRfQVJHQjQ0NDQ6Ci0JY2FzZSBEUk1fRk9STUFUX1hSR0I0NDQ0 OgotCWNhc2UgRFJNX0ZPUk1BVF9BQkdSNDQ0NDoKLQljYXNlIERSTV9GT1JNQVRfWEJHUjQ0NDQ6 Ci0JY2FzZSBEUk1fRk9STUFUX1JHQkE0NDQ0OgotCWNhc2UgRFJNX0ZPUk1BVF9SR0JYNDQ0NDoK LQljYXNlIERSTV9GT1JNQVRfQkdSQTQ0NDQ6Ci0JY2FzZSBEUk1fRk9STUFUX0JHUlg0NDQ0Ogot CWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6Ci0JY2FzZSBEUk1fRk9STUFUX0JHUjU2NToKLQljYXNl IERSTV9GT1JNQVRfQVJHQjE1NTU6Ci0JY2FzZSBEUk1fRk9STUFUX1hSR0IxNTU1OgotCWNhc2Ug RFJNX0ZPUk1BVF9BQkdSMTU1NToKLQljYXNlIERSTV9GT1JNQVRfWEJHUjE1NTU6Ci0JY2FzZSBE Uk1fRk9STUFUX1JHQkE1NTUxOgotCWNhc2UgRFJNX0ZPUk1BVF9SR0JYNTU1MToKLQljYXNlIERS TV9GT1JNQVRfQkdSQTU1NTE6Ci0JY2FzZSBEUk1fRk9STUFUX0JHUlg1NTUxOgotCQlyZXR1cm4g ZmlsbF90aWxlc19yZ2IxNihpbmZvLCBwbGFuZXNbMF0sCi0JCQkJCXdpZHRoLCBoZWlnaHQsIHN0 cmlkZSk7Ci0KLQljYXNlIERSTV9GT1JNQVRfQkdSODg4OgotCWNhc2UgRFJNX0ZPUk1BVF9SR0I4 ODg6Ci0JCXJldHVybiBmaWxsX3RpbGVzX3JnYjI0KGluZm8sIHBsYW5lc1swXSwKLQkJCQkJd2lk dGgsIGhlaWdodCwgc3RyaWRlKTsKLQljYXNlIERSTV9GT1JNQVRfQVJHQjg4ODg6Ci0JY2FzZSBE Uk1fRk9STUFUX1hSR0I4ODg4OgotCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoKLQljYXNlIERS TV9GT1JNQVRfWEJHUjg4ODg6Ci0JY2FzZSBEUk1fRk9STUFUX1JHQkE4ODg4OgotCWNhc2UgRFJN X0ZPUk1BVF9SR0JYODg4ODoKLQljYXNlIERSTV9GT1JNQVRfQkdSQTg4ODg6Ci0JY2FzZSBEUk1f Rk9STUFUX0JHUlg4ODg4OgotCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMDoKLQljYXNlIERS TV9GT1JNQVRfWFJHQjIxMDEwMTA6Ci0JY2FzZSBEUk1fRk9STUFUX0FCR1IyMTAxMDEwOgotCWNh c2UgRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMDoKLQljYXNlIERSTV9GT1JNQVRfUkdCQTEwMTAxMDI6 Ci0JY2FzZSBEUk1fRk9STUFUX1JHQlgxMDEwMTAyOgotCWNhc2UgRFJNX0ZPUk1BVF9CR1JBMTAx MDEwMjoKLQljYXNlIERSTV9GT1JNQVRfQkdSWDEwMTAxMDI6Ci0JCXJldHVybiBmaWxsX3RpbGVz X3JnYjMyKGluZm8sIHBsYW5lc1swXSwKLQkJCQkJd2lkdGgsIGhlaWdodCwgc3RyaWRlKTsKLQl9 Ci19Ci0KLXN0YXRpYyB2b2lkCi1maWxsX3BsYWluKGNvbnN0IHN0cnVjdCBmb3JtYXRfaW5mbyAq aW5mbywgdm9pZCAqcGxhbmVzWzNdLCB1bnNpZ25lZCBpbnQgd2lkdGgsCi0JICAgdW5zaWduZWQg aW50IGhlaWdodCwgdW5zaWduZWQgaW50IHN0cmlkZSkKLXsKLQltZW1zZXQocGxhbmVzWzBdLCAw eDc3LCBzdHJpZGUgKiBoZWlnaHQpOwotfQotCi0vKgotICogZmlsbF9wYXR0ZXJuIC0gRmlsbCBh IGJ1ZmZlciB3aXRoIGEgdGVzdCBwYXR0ZXJuCi0gKiBAZm9ybWF0OiBQaXhlbCBmb3JtYXQKLSAq IEBwYXR0ZXJuOiBUZXN0IHBhdHRlcm4KLSAqIEBidWZmZXI6IEJ1ZmZlciBtZW1vcnkKLSAqIEB3 aWR0aDogV2lkdGggaW4gcGl4ZWxzCi0gKiBAaGVpZ2h0OiBIZWlnaHQgaW4gcGl4ZWxzCi0gKiBA c3RyaWRlOiBMaW5lIHN0cmlkZSAocGl0Y2gpIGluIGJ5dGVzCi0gKgotICogRmlsbCB0aGUgYnVm ZmVyIHdpdGggdGhlIHRlc3QgcGF0dGVybiBzcGVjaWZpZWQgYnkgdGhlIHBhdHRlcm4gcGFyYW1l dGVyLgotICogU3VwcG9ydGVkIGZvcm1hdHMgdmFyeSBkZXBlbmRpbmcgb24gdGhlIHNlbGVjdGVk IHBhdHRlcm4uCi0gKi8KLXN0YXRpYyB2b2lkCi1maWxsX3BhdHRlcm4odW5zaWduZWQgaW50IGZv cm1hdCwgZW51bSBmaWxsX3BhdHRlcm4gcGF0dGVybiwgdm9pZCAqcGxhbmVzWzNdLAotCSAgICAg dW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBpbnQgc3Ry aWRlKQotewotCWNvbnN0IHN0cnVjdCBmb3JtYXRfaW5mbyAqaW5mbyA9IE5VTEw7Ci0JdW5zaWdu ZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmb3JtYXRfaW5mbyk7ICsr aSkgewotCQlpZiAoZm9ybWF0X2luZm9baV0uZm9ybWF0ID09IGZvcm1hdCkgewotCQkJaW5mbyA9 ICZmb3JtYXRfaW5mb1tpXTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKGluZm8gPT0gTlVM TCkKLQkJcmV0dXJuOwotCi0Jc3dpdGNoIChwYXR0ZXJuKSB7Ci0JY2FzZSBQQVRURVJOX1RJTEVT OgotCQlyZXR1cm4gZmlsbF90aWxlcyhpbmZvLCBwbGFuZXMsIHdpZHRoLCBoZWlnaHQsIHN0cmlk ZSk7Ci0KLQljYXNlIFBBVFRFUk5fU01QVEU6Ci0JCXJldHVybiBmaWxsX3NtcHRlKGluZm8sIHBs YW5lcywgd2lkdGgsIGhlaWdodCwgc3RyaWRlKTsKLQotCWNhc2UgUEFUVEVSTl9QTEFJTjoKLQkJ cmV0dXJuIGZpbGxfcGxhaW4oaW5mbywgcGxhbmVzLCB3aWR0aCwgaGVpZ2h0LCBzdHJpZGUpOwot Ci0JZGVmYXVsdDoKLQkJcHJpbnRmKCJFcnJvcjogdW5zdXBwb3J0ZWQgdGVzdCBwYXR0ZXJuICV1 LlxuIiwgcGF0dGVybik7Ci0JCWJyZWFrOwotCX0KLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KICAqIEJ1ZmZlcnMgbWFuYWdlbWVudAogICovCiAKQEAgLTEwODYsNyArMTM0LDcgQEAgc3Ry dWN0IGJvICoKIGJvX2NyZWF0ZShpbnQgZmQsIHVuc2lnbmVkIGludCBmb3JtYXQsCiAJICB1bnNp Z25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQsCiAJICB1bnNpZ25lZCBpbnQgaGFu ZGxlc1s0XSwgdW5zaWduZWQgaW50IHBpdGNoZXNbNF0sCi0JICB1bnNpZ25lZCBpbnQgb2Zmc2V0 c1s0XSwgZW51bSBmaWxsX3BhdHRlcm4gcGF0dGVybikKKwkgIHVuc2lnbmVkIGludCBvZmZzZXRz WzRdLCBlbnVtIHV0aWxfZmlsbF9wYXR0ZXJuIHBhdHRlcm4pCiB7CiAJdW5zaWduZWQgaW50IHZp cnR1YWxfaGVpZ2h0OwogCXN0cnVjdCBibyAqYm87CkBAIC0xMjc4LDcgKzMyNiw3IEBAIGJvX2Ny ZWF0ZShpbnQgZmQsIHVuc2lnbmVkIGludCBmb3JtYXQsCiAJCWJyZWFrOwogCX0KIAotCWZpbGxf cGF0dGVybihmb3JtYXQsIHBhdHRlcm4sIHBsYW5lcywgd2lkdGgsIGhlaWdodCwgcGl0Y2hlc1sw XSk7CisJdXRpbF9maWxsX3BhdHRlcm4oZm9ybWF0LCBwYXR0ZXJuLCBwbGFuZXMsIHdpZHRoLCBo ZWlnaHQsIHBpdGNoZXNbMF0pOwogCWJvX3VubWFwKGJvKTsKIAogCXJldHVybiBibzsKZGlmZiAt LWdpdCBhL3Rlc3RzL21vZGV0ZXN0L2J1ZmZlcnMuaCBiL3Rlc3RzL21vZGV0ZXN0L2J1ZmZlcnMu aAppbmRleCBhZDczZDBlNGJhNzMuLjdmOTUzOTZiNDQwMyAxMDA2NDQKLS0tIGEvdGVzdHMvbW9k ZXRlc3QvYnVmZmVycy5oCisrKyBiL3Rlc3RzL21vZGV0ZXN0L2J1ZmZlcnMuaApAQCAtMjcsMjAg KzI3LDE0IEBACiAjaWZuZGVmIF9fQlVGRkVSU19IX18KICNkZWZpbmUgX19CVUZGRVJTX0hfXwog Ci1zdHJ1Y3QgYm87CisjaW5jbHVkZSAidXRpbC9wYXR0ZXJuLmgiCiAKLWVudW0gZmlsbF9wYXR0 ZXJuIHsKLQlQQVRURVJOX1RJTEVTID0gMCwKLQlQQVRURVJOX1BMQUlOID0gMSwKLQlQQVRURVJO X1NNUFRFID0gMiwKLX07CitzdHJ1Y3QgYm87CiAKIHN0cnVjdCBibyAqYm9fY3JlYXRlKGludCBm ZCwgdW5zaWduZWQgaW50IGZvcm1hdCwKIAkJICAgdW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25l ZCBpbnQgaGVpZ2h0LAogCQkgICB1bnNpZ25lZCBpbnQgaGFuZGxlc1s0XSwgdW5zaWduZWQgaW50 IHBpdGNoZXNbNF0sCi0JCSAgIHVuc2lnbmVkIGludCBvZmZzZXRzWzRdLCBlbnVtIGZpbGxfcGF0 dGVybiBwYXR0ZXJuKTsKKwkJICAgdW5zaWduZWQgaW50IG9mZnNldHNbNF0sIGVudW0gdXRpbF9m aWxsX3BhdHRlcm4gcGF0dGVybik7CiB2b2lkIGJvX2Rlc3Ryb3koc3RydWN0IGJvICpibyk7CiAK LXVuc2lnbmVkIGludCBmb3JtYXRfZm91cmNjKGNvbnN0IGNoYXIgKm5hbWUpOwotCiAjZW5kaWYK ZGlmZiAtLWdpdCBhL3Rlc3RzL21vZGV0ZXN0L2N1cnNvci5jIGIvdGVzdHMvbW9kZXRlc3QvY3Vy c29yLmMKaW5kZXggNjJhNTBlZmIzNmU2Li4xODcwNTRmZTk1NTYgMTAwNjQ0Ci0tLSBhL3Rlc3Rz L21vZGV0ZXN0L2N1cnNvci5jCisrKyBiL3Rlc3RzL21vZGV0ZXN0L2N1cnNvci5jCkBAIC00MCwx MSArNDAsMTEgQEAKICNpbmNsdWRlICJ4Zjg2ZHJtLmgiCiAjaW5jbHVkZSAieGY4NmRybU1vZGUu aCIKIAorI2luY2x1ZGUgInV0aWwvY29tbW9uLmgiCisKICNpbmNsdWRlICJidWZmZXJzLmgiCiAj aW5jbHVkZSAiY3Vyc29yLmgiCiAKLSNkZWZpbmUgQVJSQVlfU0laRShhcnIpIChzaXplb2YoYXJy KSAvIHNpemVvZigoYXJyKVswXSkpCi0KIHN0cnVjdCBjdXJzb3IgewogCWludCBmZDsKIAl1aW50 MzJfdCBib19oYW5kbGU7CmRpZmYgLS1naXQgYS90ZXN0cy9tb2RldGVzdC9tb2RldGVzdC5jIGIv dGVzdHMvbW9kZXRlc3QvbW9kZXRlc3QuYwppbmRleCA0YjljZjJmNWI0MzkuLmI2MTA5NTZhZGZj YiAxMDA2NDQKLS0tIGEvdGVzdHMvbW9kZXRlc3QvbW9kZXRlc3QuYworKysgYi90ZXN0cy9tb2Rl dGVzdC9tb2RldGVzdC5jCkBAIC0zNyw2ICszNyw3IEBACiAgKiBUT0RPOiB1c2UgY2Fpcm8gdG8g d3JpdGUgdGhlIG1vZGUgaW5mbyBvbiB0aGUgc2VsZWN0ZWQgb3V0cHV0IG9uY2UKICAqICAgICAg IHRoZSBtb2RlIGhhcyBiZWVuIHByb2dyYW1tZWQsIGFsb25nIHdpdGggcG9zc2libGUgdGVzdCBw YXR0ZXJucy4KICAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5o IgogI2VuZGlmCkBAIC01OCw2ICs1OSwxMCBAQAogI2luY2x1ZGUgInhmODZkcm1Nb2RlLmgiCiAj aW5jbHVkZSAiZHJtX2ZvdXJjYy5oIgogCisjaW5jbHVkZSAidXRpbC9jb21tb24uaCIKKyNpbmNs dWRlICJ1dGlsL2Zvcm1hdC5oIgorI2luY2x1ZGUgInV0aWwvcGF0dGVybi5oIgorCiAjaW5jbHVk ZSAiYnVmZmVycy5oIgogI2luY2x1ZGUgImN1cnNvci5oIgogCkBAIC0xMTMsNyArMTE4LDYgQEAg c3RydWN0IGRldmljZSB7CiAJfSBtb2RlOwogfTsKIAotI2RlZmluZSBBUlJBWV9TSVpFKGFycikg KHNpemVvZihhcnIpIC8gc2l6ZW9mKChhcnIpWzBdKSkKIHN0YXRpYyBpbmxpbmUgaW50NjRfdCBV NjQySTY0KHVpbnQ2NF90IHZhbCkKIHsKIAlyZXR1cm4gKGludDY0X3QpKigoaW50NjRfdCAqKSZ2 YWwpOwpAQCAtMTAwOCw3ICsxMDEyLDcgQEAgc3RhdGljIGludCBzZXRfcGxhbmUoc3RydWN0IGRl dmljZSAqZGV2LCBzdHJ1Y3QgcGxhbmVfYXJnICpwKQogCQlwLT53LCBwLT5oLCBwLT5mb3JtYXRf c3RyLCBwbGFuZV9pZCk7CiAKIAlwbGFuZV9ibyA9IGJvX2NyZWF0ZShkZXYtPmZkLCBwLT5mb3Vy Y2MsIHAtPncsIHAtPmgsIGhhbmRsZXMsCi0JCQkgICAgIHBpdGNoZXMsIG9mZnNldHMsIFBBVFRF Uk5fVElMRVMpOworCQkJICAgICBwaXRjaGVzLCBvZmZzZXRzLCBVVElMX1BBVFRFUk5fVElMRVMp OwogCWlmIChwbGFuZV9ibyA9PSBOVUxMKQogCQlyZXR1cm4gLTE7CiAKQEAgLTEwNjgsOCArMTA3 Miw5IEBAIHN0YXRpYyB2b2lkIHNldF9tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBp cGVfYXJnICpwaXBlcywgdW5zaWduZWQgaW50IGNvCiAJCQlkZXYtPm1vZGUuaGVpZ2h0ID0gcGlw ZS0+bW9kZS0+dmRpc3BsYXk7CiAJfQogCi0JYm8gPSBib19jcmVhdGUoZGV2LT5mZCwgcGlwZXNb MF0uZm91cmNjLCBkZXYtPm1vZGUud2lkdGgsIGRldi0+bW9kZS5oZWlnaHQsCi0JCSAgICAgICBo YW5kbGVzLCBwaXRjaGVzLCBvZmZzZXRzLCBQQVRURVJOX1NNUFRFKTsKKwlibyA9IGJvX2NyZWF0 ZShkZXYtPmZkLCBwaXBlc1swXS5mb3VyY2MsIGRldi0+bW9kZS53aWR0aCwKKwkJICAgICAgIGRl di0+bW9kZS5oZWlnaHQsIGhhbmRsZXMsIHBpdGNoZXMsIG9mZnNldHMsCisJCSAgICAgICBVVElM X1BBVFRFUk5fU01QVEUpOwogCWlmIChibyA9PSBOVUxMKQogCQlyZXR1cm47CiAKQEAgLTExMzgs NyArMTE0Myw3IEBAIHN0YXRpYyB2b2lkIHNldF9jdXJzb3JzKHN0cnVjdCBkZXZpY2UgKmRldiwg c3RydWN0IHBpcGVfYXJnICpwaXBlcywgdW5zaWduZWQgaW50CiAJICogdHJhbnNsdWNlbnQgYWxw aGEKIAkgKi8KIAlibyA9IGJvX2NyZWF0ZShkZXYtPmZkLCBEUk1fRk9STUFUX0FSR0I4ODg4LCBj dywgY2gsIGhhbmRsZXMsIHBpdGNoZXMsCi0JCSAgICAgICBvZmZzZXRzLCBQQVRURVJOX1BMQUlO KTsKKwkJICAgICAgIG9mZnNldHMsIFVUSUxfUEFUVEVSTl9QTEFJTik7CiAJaWYgKGJvID09IE5V TEwpCiAJCXJldHVybjsKIApAQCAtMTE3Miw5ICsxMTc3LDkgQEAgc3RhdGljIHZvaWQgdGVzdF9w YWdlX2ZsaXAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGlwZV9hcmcgKnBpcGVzLCB1bnNp Z25lZAogCXVuc2lnbmVkIGludCBpOwogCWludCByZXQ7CiAKLQlvdGhlcl9ibyA9IGJvX2NyZWF0 ZShkZXYtPmZkLCBwaXBlc1swXS5mb3VyY2MsCi0JCQkgICAgIGRldi0+bW9kZS53aWR0aCwgZGV2 LT5tb2RlLmhlaWdodCwKLQkJCSAgICAgaGFuZGxlcywgcGl0Y2hlcywgb2Zmc2V0cywgUEFUVEVS Tl9QTEFJTik7CisJb3RoZXJfYm8gPSBib19jcmVhdGUoZGV2LT5mZCwgcGlwZXNbMF0uZm91cmNj LCBkZXYtPm1vZGUud2lkdGgsCisJCQkgICAgIGRldi0+bW9kZS5oZWlnaHQsIGhhbmRsZXMsIHBp dGNoZXMsIG9mZnNldHMsCisJCQkgICAgIFVUSUxfUEFUVEVSTl9QTEFJTik7CiAJaWYgKG90aGVy X2JvID09IE5VTEwpCiAJCXJldHVybjsKIApAQCAtMTMxNCw3ICsxMzE5LDcgQEAgc3RhdGljIGlu dCBwYXJzZV9jb25uZWN0b3Ioc3RydWN0IHBpcGVfYXJnICpwaXBlLCBjb25zdCBjaGFyICphcmcp CiAJCXBpcGUtPmZvcm1hdF9zdHJbNF0gPSAnXDAnOwogCX0KIAotCXBpcGUtPmZvdXJjYyA9IGZv cm1hdF9mb3VyY2MocGlwZS0+Zm9ybWF0X3N0cik7CisJcGlwZS0+Zm91cmNjID0gdXRpbF9mb3Jt YXRfZm91cmNjKHBpcGUtPmZvcm1hdF9zdHIpOwogCWlmIChwaXBlLT5mb3VyY2MgPT0gMCkgIHsK IAkJZnByaW50ZihzdGRlcnIsICJ1bmtub3duIGZvcm1hdCAlc1xuIiwgcGlwZS0+Zm9ybWF0X3N0 cik7CiAJCXJldHVybiAtMTsKQEAgLTEzNjksNyArMTM3NCw3IEBAIHN0YXRpYyBpbnQgcGFyc2Vf cGxhbmUoc3RydWN0IHBsYW5lX2FyZyAqcGxhbmUsIGNvbnN0IGNoYXIgKnApCiAJCXN0cmNweShw bGFuZS0+Zm9ybWF0X3N0ciwgIlhSMjQiKTsKIAl9CiAKLQlwbGFuZS0+Zm91cmNjID0gZm9ybWF0 X2ZvdXJjYyhwbGFuZS0+Zm9ybWF0X3N0cik7CisJcGxhbmUtPmZvdXJjYyA9IHV0aWxfZm9ybWF0 X2ZvdXJjYyhwbGFuZS0+Zm9ybWF0X3N0cik7CiAJaWYgKHBsYW5lLT5mb3VyY2MgPT0gMCkgewog CQlmcHJpbnRmKHN0ZGVyciwgInVua25vd24gZm9ybWF0ICVzXG4iLCBwbGFuZS0+Zm9ybWF0X3N0 cik7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvdGVzdHMvcHJvcHRlc3QvcHJvcHRl c3QuYyBiL3Rlc3RzL3Byb3B0ZXN0L3Byb3B0ZXN0LmMKaW5kZXggNzYxOGY2M2QyMDE4Li5lZTNm YTQwOGEzMTAgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3Byb3B0ZXN0L3Byb3B0ZXN0LmMKKysrIGIvdGVz dHMvcHJvcHRlc3QvcHJvcHRlc3QuYwpAQCAtMzUsNyArMzUsOCBAQAogI2luY2x1ZGUgInhmODZk cm0uaCIKICNpbmNsdWRlICJ4Zjg2ZHJtTW9kZS5oIgogCi0jZGVmaW5lIEFSUkFZX1NJWkUoYXJy KSAoc2l6ZW9mKGFycikgLyBzaXplb2YoKGFycilbMF0pKQorI2luY2x1ZGUgInV0aWwvY29tbW9u LmgiCisKIHN0YXRpYyBpbmxpbmUgaW50NjRfdCBVNjQySTY0KHVpbnQ2NF90IHZhbCkKIHsKIAly ZXR1cm4gKGludDY0X3QpKigoaW50NjRfdCAqKSZ2YWwpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvdXRp bC9NYWtlZmlsZS5hbSBiL3Rlc3RzL3V0aWwvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xYTI1MTlmYmVhODkKLS0tIC9kZXYvbnVsbAorKysgYi90 ZXN0cy91dGlsL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMTkgQEAKK25vaW5zdF9MVExJQlJBUklF UyA9IFwKKwlsaWJ1dGlsLmxhCisKK2xpYnV0aWxfbGFfQ1BQRkxBR1MgPSBcCisJLUkkKHRvcF9z cmNkaXIpL2luY2x1ZGUvZHJtIFwKKwktSSQodG9wX3NyY2RpcikKKworbGlidXRpbF9sYV9DRkxB R1MgPSBcCisJJChDQUlST19DRkxBR1MpCisKK2xpYnV0aWxfbGFfU09VUkNFUyA9IFwKKwljb21t b24uaCBcCisJZm9ybWF0LmMgXAorCWZvcm1hdC5oIFwKKwlwYXR0ZXJuLmMgXAorCXBhdHRlcm4u aAorCitsaWJ1dGlsX2xhX0xJQkFERCA9IFwKKwkkKENBSVJPX0xJQlMpCmRpZmYgLS1naXQgYS90 ZXN0cy91dGlsL2NvbW1vbi5oIGIvdGVzdHMvdXRpbC9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjVkNTcyYzJkZDAwMwotLS0gL2Rldi9udWxsCisrKyBi L3Rlc3RzL3V0aWwvY29tbW9uLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAy MDA4IFR1bmdzdGVuIEdyYXBoaWNzCisgKiAgIEpha29iIEJvcm5lY3JhbnR6IDxqYWtvYkB0dW5n c3RlbmdyYXBoaWNzLmNvbT4KKyAqIENvcHlyaWdodCAyMDA4IEludGVsIENvcnBvcmF0aW9uCisg KiAgIEplc3NlIEJhcm5lcyA8amVzc2UuYmFybmVzQGludGVsLmNvbT4KKyAqCisgKiBQZXJtaXNz aW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRh aW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50 YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJl IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRo ZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRl LCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5k IHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQg dG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRo ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxs IGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9m IHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwg V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5D TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERF UlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElU WSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBB UklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FS RSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKi8K KworI2lmbmRlZiBVVElMX0NPTU1PTl9ICisjZGVmaW5lIFVUSUxfQ09NTU9OX0gKKworI2lmbmRl ZiBBUlJBWV9TSVpFCisjZGVmaW5lIEFSUkFZX1NJWkUoYSkgKHNpemVvZihhKSAvIHNpemVvZigo YSlbMF0pKQorI2VuZGlmCisKKyNlbmRpZiAvKiBVVElMX0NPTU1PTl9IICovCmRpZmYgLS1naXQg YS90ZXN0cy91dGlsL2Zvcm1hdC5jIGIvdGVzdHMvdXRpbC9mb3JtYXQuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmMzNjVjZWIzYjljZAotLS0gL2Rldi9udWxsCisr KyBiL3Rlc3RzL3V0aWwvZm9ybWF0LmMKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBDb3B5cmln aHQgMjAwOCBUdW5nc3RlbiBHcmFwaGljcworICogICBKYWtvYiBCb3JuZWNyYW50eiA8amFrb2JA dHVuZ3N0ZW5ncmFwaGljcy5jb20+CisgKiBDb3B5cmlnaHQgMjAwOCBJbnRlbCBDb3Jwb3JhdGlv bgorICogICBKZXNzZSBCYXJuZXMgPGplc3NlLmJhcm5lc0BpbnRlbC5jb20+CisgKgorICogUGVy bWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24g b2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1 bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0 d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisg KiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJp YnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUs IGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlz aGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisg KiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBz aGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9u cyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJ UyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQs IElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJ TkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBI T0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lT RSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09G VFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgor ICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYK KworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSA8 ZHJtX2ZvdXJjYy5oPgorCisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAiZm9ybWF0Lmgi CisKKyNkZWZpbmUgTUFLRV9SR0JfSU5GTyhybCwgcm8sIGJsLCBibywgZ2wsIGdvLCBhbCwgYW8p IFwKKwkucmdiID0geyB7IChybCksIChybykgfSwgeyAoYmwpLCAoYm8pIH0sIHsgKGdsKSwgKGdv KSB9LCB7IChhbCksIChhbykgfSB9CisKKyNkZWZpbmUgTUFLRV9ZVVZfSU5GTyhvcmRlciwgeHN1 YiwgeXN1YiwgY2hyb21hX3N0cmlkZSkgXAorCS55dXYgPSB7IChvcmRlciksICh4c3ViKSwgKHlz dWIpLCAoY2hyb21hX3N0cmlkZSkgfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHV0aWxfZm9ybWF0 X2luZm8gZm9ybWF0X2luZm9bXSA9IHsKKwkvKiBZVVYgcGFja2VkICovCisJeyBEUk1fRk9STUFU X1VZVlksICJVWVZZIiwgTUFLRV9ZVVZfSU5GTyhZVVZfWUNiQ3IgfCBZVVZfQ1ksIDIsIDIsIDIp IH0sCisJeyBEUk1fRk9STUFUX1ZZVVksICJWWVVZIiwgTUFLRV9ZVVZfSU5GTyhZVVZfWUNyQ2Ig fCBZVVZfQ1ksIDIsIDIsIDIpIH0sCisJeyBEUk1fRk9STUFUX1lVWVYsICJZVVlWIiwgTUFLRV9Z VVZfSU5GTyhZVVZfWUNiQ3IgfCBZVVZfWUMsIDIsIDIsIDIpIH0sCisJeyBEUk1fRk9STUFUX1lW WVUsICJZVllVIiwgTUFLRV9ZVVZfSU5GTyhZVVZfWUNyQ2IgfCBZVVZfWUMsIDIsIDIsIDIpIH0s CisJLyogWVVWIHNlbWktcGxhbmFyICovCisJeyBEUk1fRk9STUFUX05WMTIsICJOVjEyIiwgTUFL RV9ZVVZfSU5GTyhZVVZfWUNiQ3IsIDIsIDIsIDIpIH0sCisJeyBEUk1fRk9STUFUX05WMjEsICJO VjIxIiwgTUFLRV9ZVVZfSU5GTyhZVVZfWUNyQ2IsIDIsIDIsIDIpIH0sCisJeyBEUk1fRk9STUFU X05WMTYsICJOVjE2IiwgTUFLRV9ZVVZfSU5GTyhZVVZfWUNiQ3IsIDIsIDEsIDIpIH0sCisJeyBE Uk1fRk9STUFUX05WNjEsICJOVjYxIiwgTUFLRV9ZVVZfSU5GTyhZVVZfWUNyQ2IsIDIsIDEsIDIp IH0sCisJLyogWVVWIHBsYW5hciAqLworCXsgRFJNX0ZPUk1BVF9ZVVY0MjAsICJZVTEyIiwgTUFL RV9ZVVZfSU5GTyhZVVZfWUNiQ3IsIDIsIDIsIDEpIH0sCisJeyBEUk1fRk9STUFUX1lWVTQyMCwg IllWMTIiLCBNQUtFX1lVVl9JTkZPKFlVVl9ZQ3JDYiwgMiwgMiwgMSkgfSwKKwkvKiBSR0IxNiAq LworCXsgRFJNX0ZPUk1BVF9BUkdCNDQ0NCwgIkFSMTIiLCBNQUtFX1JHQl9JTkZPKDQsIDgsIDQs IDQsIDQsIDAsIDQsIDEyKSB9LAorCXsgRFJNX0ZPUk1BVF9YUkdCNDQ0NCwgIlhSMTIiLCBNQUtF X1JHQl9JTkZPKDQsIDgsIDQsIDQsIDQsIDAsIDAsIDApIH0sCisJeyBEUk1fRk9STUFUX0FCR1I0 NDQ0LCAiQUIxMiIsIE1BS0VfUkdCX0lORk8oNCwgMCwgNCwgNCwgNCwgOCwgNCwgMTIpIH0sCisJ eyBEUk1fRk9STUFUX1hCR1I0NDQ0LCAiWEIxMiIsIE1BS0VfUkdCX0lORk8oNCwgMCwgNCwgNCwg NCwgOCwgMCwgMCkgfSwKKwl7IERSTV9GT1JNQVRfUkdCQTQ0NDQsICJSQTEyIiwgTUFLRV9SR0Jf SU5GTyg0LCAxMiwgNCwgOCwgNCwgNCwgNCwgMCkgfSwKKwl7IERSTV9GT1JNQVRfUkdCWDQ0NDQs ICJSWDEyIiwgTUFLRV9SR0JfSU5GTyg0LCAxMiwgNCwgOCwgNCwgNCwgMCwgMCkgfSwKKwl7IERS TV9GT1JNQVRfQkdSQTQ0NDQsICJCQTEyIiwgTUFLRV9SR0JfSU5GTyg0LCA0LCA0LCA4LCA0LCAx MiwgNCwgMCkgfSwKKwl7IERSTV9GT1JNQVRfQkdSWDQ0NDQsICJCWDEyIiwgTUFLRV9SR0JfSU5G Tyg0LCA0LCA0LCA4LCA0LCAxMiwgMCwgMCkgfSwKKwl7IERSTV9GT1JNQVRfQVJHQjE1NTUsICJB UjE1IiwgTUFLRV9SR0JfSU5GTyg1LCAxMCwgNSwgNSwgNSwgMCwgMSwgMTUpIH0sCisJeyBEUk1f Rk9STUFUX1hSR0IxNTU1LCAiWFIxNSIsIE1BS0VfUkdCX0lORk8oNSwgMTAsIDUsIDUsIDUsIDAs IDAsIDApIH0sCisJeyBEUk1fRk9STUFUX0FCR1IxNTU1LCAiQUIxNSIsIE1BS0VfUkdCX0lORk8o NSwgMCwgNSwgNSwgNSwgMTAsIDEsIDE1KSB9LAorCXsgRFJNX0ZPUk1BVF9YQkdSMTU1NSwgIlhC MTUiLCBNQUtFX1JHQl9JTkZPKDUsIDAsIDUsIDUsIDUsIDEwLCAwLCAwKSB9LAorCXsgRFJNX0ZP Uk1BVF9SR0JBNTU1MSwgIlJBMTUiLCBNQUtFX1JHQl9JTkZPKDUsIDExLCA1LCA2LCA1LCAxLCAx LCAwKSB9LAorCXsgRFJNX0ZPUk1BVF9SR0JYNTU1MSwgIlJYMTUiLCBNQUtFX1JHQl9JTkZPKDUs IDExLCA1LCA2LCA1LCAxLCAwLCAwKSB9LAorCXsgRFJNX0ZPUk1BVF9CR1JBNTU1MSwgIkJBMTUi LCBNQUtFX1JHQl9JTkZPKDUsIDEsIDUsIDYsIDUsIDExLCAxLCAwKSB9LAorCXsgRFJNX0ZPUk1B VF9CR1JYNTU1MSwgIkJYMTUiLCBNQUtFX1JHQl9JTkZPKDUsIDEsIDUsIDYsIDUsIDExLCAwLCAw KSB9LAorCXsgRFJNX0ZPUk1BVF9SR0I1NjUsICJSRzE2IiwgTUFLRV9SR0JfSU5GTyg1LCAxMSwg NiwgNSwgNSwgMCwgMCwgMCkgfSwKKwl7IERSTV9GT1JNQVRfQkdSNTY1LCAiQkcxNiIsIE1BS0Vf UkdCX0lORk8oNSwgMCwgNiwgNSwgNSwgMTEsIDAsIDApIH0sCisJLyogUkdCMjQgKi8KKwl7IERS TV9GT1JNQVRfQkdSODg4LCAiQkcyNCIsIE1BS0VfUkdCX0lORk8oOCwgMCwgOCwgOCwgOCwgMTYs IDAsIDApIH0sCisJeyBEUk1fRk9STUFUX1JHQjg4OCwgIlJHMjQiLCBNQUtFX1JHQl9JTkZPKDgs IDE2LCA4LCA4LCA4LCAwLCAwLCAwKSB9LAorCS8qIFJHQjMyICovCisJeyBEUk1fRk9STUFUX0FS R0I4ODg4LCAiQVIyNCIsIE1BS0VfUkdCX0lORk8oOCwgMTYsIDgsIDgsIDgsIDAsIDgsIDI0KSB9 LAorCXsgRFJNX0ZPUk1BVF9YUkdCODg4OCwgIlhSMjQiLCBNQUtFX1JHQl9JTkZPKDgsIDE2LCA4 LCA4LCA4LCAwLCAwLCAwKSB9LAorCXsgRFJNX0ZPUk1BVF9BQkdSODg4OCwgIkFCMjQiLCBNQUtF X1JHQl9JTkZPKDgsIDAsIDgsIDgsIDgsIDE2LCA4LCAyNCkgfSwKKwl7IERSTV9GT1JNQVRfWEJH Ujg4ODgsICJYQjI0IiwgTUFLRV9SR0JfSU5GTyg4LCAwLCA4LCA4LCA4LCAxNiwgMCwgMCkgfSwK Kwl7IERSTV9GT1JNQVRfUkdCQTg4ODgsICJSQTI0IiwgTUFLRV9SR0JfSU5GTyg4LCAyNCwgOCwg MTYsIDgsIDgsIDgsIDApIH0sCisJeyBEUk1fRk9STUFUX1JHQlg4ODg4LCAiUlgyNCIsIE1BS0Vf UkdCX0lORk8oOCwgMjQsIDgsIDE2LCA4LCA4LCAwLCAwKSB9LAorCXsgRFJNX0ZPUk1BVF9CR1JB ODg4OCwgIkJBMjQiLCBNQUtFX1JHQl9JTkZPKDgsIDgsIDgsIDE2LCA4LCAyNCwgOCwgMCkgfSwK Kwl7IERSTV9GT1JNQVRfQkdSWDg4ODgsICJCWDI0IiwgTUFLRV9SR0JfSU5GTyg4LCA4LCA4LCAx NiwgOCwgMjQsIDAsIDApIH0sCisJeyBEUk1fRk9STUFUX0FSR0IyMTAxMDEwLCAiQVIzMCIsIE1B S0VfUkdCX0lORk8oMTAsIDIwLCAxMCwgMTAsIDEwLCAwLCAyLCAzMCkgfSwKKwl7IERSTV9GT1JN QVRfWFJHQjIxMDEwMTAsICJYUjMwIiwgTUFLRV9SR0JfSU5GTygxMCwgMjAsIDEwLCAxMCwgMTAs IDAsIDAsIDApIH0sCisJeyBEUk1fRk9STUFUX0FCR1IyMTAxMDEwLCAiQUIzMCIsIE1BS0VfUkdC X0lORk8oMTAsIDAsIDEwLCAxMCwgMTAsIDIwLCAyLCAzMCkgfSwKKwl7IERSTV9GT1JNQVRfWEJH UjIxMDEwMTAsICJYQjMwIiwgTUFLRV9SR0JfSU5GTygxMCwgMCwgMTAsIDEwLCAxMCwgMjAsIDAs IDApIH0sCisJeyBEUk1fRk9STUFUX1JHQkExMDEwMTAyLCAiUkEzMCIsIE1BS0VfUkdCX0lORk8o MTAsIDIyLCAxMCwgMTIsIDEwLCAyLCAyLCAwKSB9LAorCXsgRFJNX0ZPUk1BVF9SR0JYMTAxMDEw MiwgIlJYMzAiLCBNQUtFX1JHQl9JTkZPKDEwLCAyMiwgMTAsIDEyLCAxMCwgMiwgMCwgMCkgfSwK Kwl7IERSTV9GT1JNQVRfQkdSQTEwMTAxMDIsICJCQTMwIiwgTUFLRV9SR0JfSU5GTygxMCwgMiwg MTAsIDEyLCAxMCwgMjIsIDIsIDApIH0sCisJeyBEUk1fRk9STUFUX0JHUlgxMDEwMTAyLCAiQlgz MCIsIE1BS0VfUkdCX0lORk8oMTAsIDIsIDEwLCAxMiwgMTAsIDIyLCAwLCAwKSB9LAorfTsKKwor dWludDMyX3QgdXRpbF9mb3JtYXRfZm91cmNjKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJdW5zaWdu ZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmb3JtYXRfaW5mbyk7IGkr KykKKwkJaWYgKCFzdHJjbXAoZm9ybWF0X2luZm9baV0ubmFtZSwgbmFtZSkpCisJCQlyZXR1cm4g Zm9ybWF0X2luZm9baV0uZm9ybWF0OworCisJcmV0dXJuIDA7Cit9CisKK2NvbnN0IHN0cnVjdCB1 dGlsX2Zvcm1hdF9pbmZvICp1dGlsX2Zvcm1hdF9pbmZvX2ZpbmQodWludDMyX3QgZm9ybWF0KQor eworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZm9ybWF0 X2luZm8pOyBpKyspCisJCWlmIChmb3JtYXRfaW5mb1tpXS5mb3JtYXQgPT0gZm9ybWF0KQorCQkJ cmV0dXJuICZmb3JtYXRfaW5mb1tpXTsKKworCXJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEv dGVzdHMvdXRpbC9mb3JtYXQuaCBiL3Rlc3RzL3V0aWwvZm9ybWF0LmgKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4yY2UxYzAyMWZkNzgKLS0tIC9kZXYvbnVsbAorKysg Yi90ZXN0cy91dGlsL2Zvcm1hdC5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQg MjAwOCBUdW5nc3RlbiBHcmFwaGljcworICogICBKYWtvYiBCb3JuZWNyYW50eiA8amFrb2JAdHVu Z3N0ZW5ncmFwaGljcy5jb20+CisgKiBDb3B5cmlnaHQgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbgor ICogICBKZXNzZSBCYXJuZXMgPGplc3NlLmJhcm5lc0BpbnRlbC5jb20+CisgKgorICogUGVybWlz c2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0 YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVu dGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2Fy ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0 aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0 ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFu ZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVk IHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBU aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFs bCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBv ZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIs IFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElO Q0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdF TUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xE RVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwg QVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB UkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICov CisKKyNpZm5kZWYgVVRJTF9GT1JNQVRfSAorI2RlZmluZSBVVElMX0ZPUk1BVF9ICisKK3N0cnVj dCB1dGlsX2NvbG9yX2NvbXBvbmVudCB7CisJdW5zaWduZWQgaW50IGxlbmd0aDsKKwl1bnNpZ25l ZCBpbnQgb2Zmc2V0OworfTsKKworc3RydWN0IHV0aWxfcmdiX2luZm8geworCXN0cnVjdCB1dGls X2NvbG9yX2NvbXBvbmVudCByZWQ7CisJc3RydWN0IHV0aWxfY29sb3JfY29tcG9uZW50IGdyZWVu OworCXN0cnVjdCB1dGlsX2NvbG9yX2NvbXBvbmVudCBibHVlOworCXN0cnVjdCB1dGlsX2NvbG9y X2NvbXBvbmVudCBhbHBoYTsKK307CisKK2VudW0gdXRpbF95dXZfb3JkZXIgeworCVlVVl9ZQ2JD ciA9IDEsCisJWVVWX1lDckNiID0gMiwKKwlZVVZfWUMgPSA0LAorCVlVVl9DWSA9IDgsCit9Owor CitzdHJ1Y3QgdXRpbF95dXZfaW5mbyB7CisJZW51bSB1dGlsX3l1dl9vcmRlciBvcmRlcjsKKwl1 bnNpZ25lZCBpbnQgeHN1YjsKKwl1bnNpZ25lZCBpbnQgeXN1YjsKKwl1bnNpZ25lZCBpbnQgY2hy b21hX3N0cmlkZTsKK307CisKK3N0cnVjdCB1dGlsX2Zvcm1hdF9pbmZvIHsKKwl1aW50MzJfdCBm b3JtYXQ7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBzdHJ1Y3QgdXRpbF9yZ2JfaW5mbyBy Z2I7CisJY29uc3Qgc3RydWN0IHV0aWxfeXV2X2luZm8geXV2OworfTsKKwordWludDMyX3QgdXRp bF9mb3JtYXRfZm91cmNjKGNvbnN0IGNoYXIgKm5hbWUpOworY29uc3Qgc3RydWN0IHV0aWxfZm9y bWF0X2luZm8gKnV0aWxfZm9ybWF0X2luZm9fZmluZCh1aW50MzJfdCBmb3JtYXQpOworCisjZW5k aWYgLyogVVRJTF9GT1JNQVRfSCAqLwpkaWZmIC0tZ2l0IGEvdGVzdHMvdXRpbC9wYXR0ZXJuLmMg Yi90ZXN0cy91dGlsL3BhdHRlcm4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMDAuLjgyY2M0YTVhMWVlYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3V0aWwvcGF0dGVy bi5jCkBAIC0wLDAgKzEsODcwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDggVHVuZ3N0ZW4gR3Jh cGhpY3MKKyAqICAgSmFrb2IgQm9ybmVjcmFudHogPGpha29iQHR1bmdzdGVuZ3JhcGhpY3MuY29t PgorICogQ29weXJpZ2h0IDIwMDggSW50ZWwgQ29ycG9yYXRpb24KKyAqICAgSmVzc2UgQmFybmVz IDxqZXNzZS5iYXJuZXNAaW50ZWwuY29tPgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdy YW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5 IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhl ICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmlj dGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2Us IGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisg KiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNv bnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVj dCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdo dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4K KyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgor ICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZ IE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5U IFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9S IEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFO IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00s IE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1Ig T1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaWZkZWYgSEFWRV9D T05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpbnQu aD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0 cmluZy5oPgorCisjaW5jbHVkZSA8ZHJtX2ZvdXJjYy5oPgorCisjaWZkZWYgSEFWRV9DQUlSTwor I2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8bWF0aC5oPgorI2VuZGlmCisKKyNpbmNsdWRl ICJmb3JtYXQuaCIKKyNpbmNsdWRlICJwYXR0ZXJuLmgiCisKK3N0cnVjdCBjb2xvcl9yZ2IyNCB7 CisJdW5zaWduZWQgaW50IHZhbHVlOjI0OworfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7 CisKK3N0cnVjdCBjb2xvcl95dXYgeworCXVuc2lnbmVkIGNoYXIgeTsKKwl1bnNpZ25lZCBjaGFy IHU7CisJdW5zaWduZWQgY2hhciB2OworfTsKKworI2RlZmluZSBNQUtFX1lVVl82MDFfWShyLCBn LCBiKSBcCisJKCgoIDY2ICogKHIpICsgMTI5ICogKGcpICsgIDI1ICogKGIpICsgMTI4KSA+PiA4 KSArIDE2KQorI2RlZmluZSBNQUtFX1lVVl82MDFfVShyLCBnLCBiKSBcCisJKCgoLTM4ICogKHIp IC0gIDc0ICogKGcpICsgMTEyICogKGIpICsgMTI4KSA+PiA4KSArIDEyOCkKKyNkZWZpbmUgTUFL RV9ZVVZfNjAxX1YociwgZywgYikgXAorCSgoKDExMiAqIChyKSAtICA5NCAqIChnKSAtICAxOCAq IChiKSArIDEyOCkgPj4gOCkgKyAxMjgpCisKKyNkZWZpbmUgTUFLRV9ZVVZfNjAxKHIsIGcsIGIp IFwKKwl7IC55ID0gTUFLRV9ZVVZfNjAxX1kociwgZywgYiksIFwKKwkgIC51ID0gTUFLRV9ZVVZf NjAxX1UociwgZywgYiksIFwKKwkgIC52ID0gTUFLRV9ZVVZfNjAxX1YociwgZywgYikgfQorCisj ZGVmaW5lIE1BS0VfUkdCQShyZ2IsIHIsIGcsIGIsIGEpIFwKKwkoKCgocikgPj4gKDggLSAocmdi KS0+cmVkLmxlbmd0aCkpIDw8IChyZ2IpLT5yZWQub2Zmc2V0KSB8IFwKKwkgKCgoZykgPj4gKDgg LSAocmdiKS0+Z3JlZW4ubGVuZ3RoKSkgPDwgKHJnYiktPmdyZWVuLm9mZnNldCkgfCBcCisJICgo KGIpID4+ICg4IC0gKHJnYiktPmJsdWUubGVuZ3RoKSkgPDwgKHJnYiktPmJsdWUub2Zmc2V0KSB8 IFwKKwkgKCgoYSkgPj4gKDggLSAocmdiKS0+YWxwaGEubGVuZ3RoKSkgPDwgKHJnYiktPmFscGhh Lm9mZnNldCkpCisKKyNkZWZpbmUgTUFLRV9SR0IyNChyZ2IsIHIsIGcsIGIpIFwKKwl7IC52YWx1 ZSA9IE1BS0VfUkdCQShyZ2IsIHIsIGcsIGIsIDApIH0KKworc3RhdGljIHZvaWQgZmlsbF9zbXB0 ZV95dXZfcGxhbmFyKGNvbnN0IHN0cnVjdCB1dGlsX3l1dl9pbmZvICp5dXYsCisJCQkJICB1bnNp Z25lZCBjaGFyICp5X21lbSwgdW5zaWduZWQgY2hhciAqdV9tZW0sCisJCQkJICB1bnNpZ25lZCBj aGFyICp2X21lbSwgdW5zaWduZWQgaW50IHdpZHRoLAorCQkJCSAgdW5zaWduZWQgaW50IGhlaWdo dCwgdW5zaWduZWQgaW50IHN0cmlkZSkKK3sKKwljb25zdCBzdHJ1Y3QgY29sb3JfeXV2IGNvbG9y c190b3BbXSA9IHsKKwkJTUFLRV9ZVVZfNjAxKDE5MSwgMTkyLCAxOTIpLAkvKiBncmV5ICovCisJ CU1BS0VfWVVWXzYwMSgxOTIsIDE5MiwgMCksCS8qIHllbGxvdyAqLworCQlNQUtFX1lVVl82MDEo MCwgMTkyLCAxOTIpLAkvKiBjeWFuICovCisJCU1BS0VfWVVWXzYwMSgwLCAxOTIsIDApLAkvKiBn cmVlbiAqLworCQlNQUtFX1lVVl82MDEoMTkyLCAwLCAxOTIpLAkvKiBtYWdlbnRhICovCisJCU1B S0VfWVVWXzYwMSgxOTIsIDAsIDApLAkvKiByZWQgKi8KKwkJTUFLRV9ZVVZfNjAxKDAsIDAsIDE5 MiksCS8qIGJsdWUgKi8KKwl9OworCWNvbnN0IHN0cnVjdCBjb2xvcl95dXYgY29sb3JzX21pZGRs ZVtdID0geworCQlNQUtFX1lVVl82MDEoMCwgMCwgMTkyKSwJLyogYmx1ZSAqLworCQlNQUtFX1lV Vl82MDEoMTksIDE5LCAxOSksCS8qIGJsYWNrICovCisJCU1BS0VfWVVWXzYwMSgxOTIsIDAsIDE5 MiksCS8qIG1hZ2VudGEgKi8KKwkJTUFLRV9ZVVZfNjAxKDE5LCAxOSwgMTkpLAkvKiBibGFjayAq LworCQlNQUtFX1lVVl82MDEoMCwgMTkyLCAxOTIpLAkvKiBjeWFuICovCisJCU1BS0VfWVVWXzYw MSgxOSwgMTksIDE5KSwJLyogYmxhY2sgKi8KKwkJTUFLRV9ZVVZfNjAxKDE5MiwgMTkyLCAxOTIp LAkvKiBncmV5ICovCisJfTsKKwljb25zdCBzdHJ1Y3QgY29sb3JfeXV2IGNvbG9yc19ib3R0b21b XSA9IHsKKwkJTUFLRV9ZVVZfNjAxKDAsIDMzLCA3NiksCS8qIGluLXBoYXNlICovCisJCU1BS0Vf WVVWXzYwMSgyNTUsIDI1NSwgMjU1KSwJLyogc3VwZXIgd2hpdGUgKi8KKwkJTUFLRV9ZVVZfNjAx KDUwLCAwLCAxMDYpLAkvKiBxdWFkcmF0dXJlICovCisJCU1BS0VfWVVWXzYwMSgxOSwgMTksIDE5 KSwJLyogYmxhY2sgKi8KKwkJTUFLRV9ZVVZfNjAxKDksIDksIDkpLAkJLyogMy41JSAqLworCQlN QUtFX1lVVl82MDEoMTksIDE5LCAxOSksCS8qIDcuNSUgKi8KKwkJTUFLRV9ZVVZfNjAxKDI5LCAy OSwgMjkpLAkvKiAxMS41JSAqLworCQlNQUtFX1lVVl82MDEoMTksIDE5LCAxOSksCS8qIGJsYWNr ICovCisJfTsKKwl1bnNpZ25lZCBpbnQgY3MgPSB5dXYtPmNocm9tYV9zdHJpZGU7CisJdW5zaWdu ZWQgaW50IHhzdWIgPSB5dXYtPnhzdWI7CisJdW5zaWduZWQgaW50IHlzdWIgPSB5dXYtPnlzdWI7 CisJdW5zaWduZWQgaW50IHg7CisJdW5zaWduZWQgaW50IHk7CisKKwkvKiBMdW1hICovCisJZm9y ICh5ID0gMDsgeSA8IGhlaWdodCAqIDYgLyA5OyArK3kpIHsKKwkJZm9yICh4ID0gMDsgeCA8IHdp ZHRoOyArK3gpCisJCQl5X21lbVt4XSA9IGNvbG9yc190b3BbeCAqIDcgLyB3aWR0aF0ueTsKKwkJ eV9tZW0gKz0gc3RyaWRlOworCX0KKworCWZvciAoOyB5IDwgaGVpZ2h0ICogNyAvIDk7ICsreSkg eworCQlmb3IgKHggPSAwOyB4IDwgd2lkdGg7ICsreCkKKwkJCXlfbWVtW3hdID0gY29sb3JzX21p ZGRsZVt4ICogNyAvIHdpZHRoXS55OworCQl5X21lbSArPSBzdHJpZGU7CisJfQorCisJZm9yICg7 IHkgPCBoZWlnaHQ7ICsreSkgeworCQlmb3IgKHggPSAwOyB4IDwgd2lkdGggKiA1IC8gNzsgKyt4 KQorCQkJeV9tZW1beF0gPSBjb2xvcnNfYm90dG9tW3ggKiA0IC8gKHdpZHRoICogNSAvIDcpXS55 OworCQlmb3IgKDsgeCA8IHdpZHRoICogNiAvIDc7ICsreCkKKwkJCXlfbWVtW3hdID0gY29sb3Jz X2JvdHRvbVsoeCAtIHdpZHRoICogNSAvIDcpICogMworCQkJCQkJIC8gKHdpZHRoIC8gNykgKyA0 XS55OworCQlmb3IgKDsgeCA8IHdpZHRoOyArK3gpCisJCQl5X21lbVt4XSA9IGNvbG9yc19ib3R0 b21bN10ueTsKKwkJeV9tZW0gKz0gc3RyaWRlOworCX0KKworCS8qIENocm9tYSAqLworCWZvciAo eSA9IDA7IHkgPCBoZWlnaHQgLyB5c3ViICogNiAvIDk7ICsreSkgeworCQlmb3IgKHggPSAwOyB4 IDwgd2lkdGg7IHggKz0geHN1YikgeworCQkJdV9tZW1beCpjcy94c3ViXSA9IGNvbG9yc190b3Bb eCAqIDcgLyB3aWR0aF0udTsKKwkJCXZfbWVtW3gqY3MveHN1Yl0gPSBjb2xvcnNfdG9wW3ggKiA3 IC8gd2lkdGhdLnY7CisJCX0KKwkJdV9tZW0gKz0gc3RyaWRlICogY3MgLyB4c3ViOworCQl2X21l bSArPSBzdHJpZGUgKiBjcyAvIHhzdWI7CisJfQorCisJZm9yICg7IHkgPCBoZWlnaHQgLyB5c3Vi ICogNyAvIDk7ICsreSkgeworCQlmb3IgKHggPSAwOyB4IDwgd2lkdGg7IHggKz0geHN1Yikgewor CQkJdV9tZW1beCpjcy94c3ViXSA9IGNvbG9yc19taWRkbGVbeCAqIDcgLyB3aWR0aF0udTsKKwkJ CXZfbWVtW3gqY3MveHN1Yl0gPSBjb2xvcnNfbWlkZGxlW3ggKiA3IC8gd2lkdGhdLnY7CisJCX0K KwkJdV9tZW0gKz0gc3RyaWRlICogY3MgLyB4c3ViOworCQl2X21lbSArPSBzdHJpZGUgKiBjcyAv IHhzdWI7CisJfQorCisJZm9yICg7IHkgPCBoZWlnaHQgLyB5c3ViOyArK3kpIHsKKwkJZm9yICh4 ID0gMDsgeCA8IHdpZHRoICogNSAvIDc7IHggKz0geHN1YikgeworCQkJdV9tZW1beCpjcy94c3Vi XSA9CisJCQkJY29sb3JzX2JvdHRvbVt4ICogNCAvICh3aWR0aCAqIDUgLyA3KV0udTsKKwkJCXZf bWVtW3gqY3MveHN1Yl0gPQorCQkJCWNvbG9yc19ib3R0b21beCAqIDQgLyAod2lkdGggKiA1IC8g NyldLnY7CisJCX0KKwkJZm9yICg7IHggPCB3aWR0aCAqIDYgLyA3OyB4ICs9IHhzdWIpIHsKKwkJ CXVfbWVtW3gqY3MveHN1Yl0gPSBjb2xvcnNfYm90dG9tWyh4IC0gd2lkdGggKiA1IC8gNykgKgor CQkJCQkJCSAzIC8gKHdpZHRoIC8gNykgKyA0XS51OworCQkJdl9tZW1beCpjcy94c3ViXSA9IGNv bG9yc19ib3R0b21bKHggLSB3aWR0aCAqIDUgLyA3KSAqCisJCQkJCQkJIDMgLyAod2lkdGggLyA3 KSArIDRdLnY7CisJCX0KKwkJZm9yICg7IHggPCB3aWR0aDsgeCArPSB4c3ViKSB7CisJCQl1X21l bVt4KmNzL3hzdWJdID0gY29sb3JzX2JvdHRvbVs3XS51OworCQkJdl9tZW1beCpjcy94c3ViXSA9 IGNvbG9yc19ib3R0b21bN10udjsKKwkJfQorCQl1X21lbSArPSBzdHJpZGUgKiBjcyAvIHhzdWI7 CisJCXZfbWVtICs9IHN0cmlkZSAqIGNzIC8geHN1YjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZp bGxfc21wdGVfeXV2X3BhY2tlZChjb25zdCBzdHJ1Y3QgdXRpbF95dXZfaW5mbyAqeXV2LCB2b2lk ICptZW0sCisJCQkJICB1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQsCisJ CQkJICB1bnNpZ25lZCBpbnQgc3RyaWRlKQoreworCWNvbnN0IHN0cnVjdCBjb2xvcl95dXYgY29s b3JzX3RvcFtdID0geworCQlNQUtFX1lVVl82MDEoMTkxLCAxOTIsIDE5MiksCS8qIGdyZXkgKi8K KwkJTUFLRV9ZVVZfNjAxKDE5MiwgMTkyLCAwKSwJLyogeWVsbG93ICovCisJCU1BS0VfWVVWXzYw MSgwLCAxOTIsIDE5MiksCS8qIGN5YW4gKi8KKwkJTUFLRV9ZVVZfNjAxKDAsIDE5MiwgMCksCS8q IGdyZWVuICovCisJCU1BS0VfWVVWXzYwMSgxOTIsIDAsIDE5MiksCS8qIG1hZ2VudGEgKi8KKwkJ TUFLRV9ZVVZfNjAxKDE5MiwgMCwgMCksCS8qIHJlZCAqLworCQlNQUtFX1lVVl82MDEoMCwgMCwg MTkyKSwJLyogYmx1ZSAqLworCX07CisJY29uc3Qgc3RydWN0IGNvbG9yX3l1diBjb2xvcnNfbWlk ZGxlW10gPSB7CisJCU1BS0VfWVVWXzYwMSgwLCAwLCAxOTIpLAkvKiBibHVlICovCisJCU1BS0Vf WVVWXzYwMSgxOSwgMTksIDE5KSwJLyogYmxhY2sgKi8KKwkJTUFLRV9ZVVZfNjAxKDE5MiwgMCwg MTkyKSwJLyogbWFnZW50YSAqLworCQlNQUtFX1lVVl82MDEoMTksIDE5LCAxOSksCS8qIGJsYWNr ICovCisJCU1BS0VfWVVWXzYwMSgwLCAxOTIsIDE5MiksCS8qIGN5YW4gKi8KKwkJTUFLRV9ZVVZf NjAxKDE5LCAxOSwgMTkpLAkvKiBibGFjayAqLworCQlNQUtFX1lVVl82MDEoMTkyLCAxOTIsIDE5 MiksCS8qIGdyZXkgKi8KKwl9OworCWNvbnN0IHN0cnVjdCBjb2xvcl95dXYgY29sb3JzX2JvdHRv bVtdID0geworCQlNQUtFX1lVVl82MDEoMCwgMzMsIDc2KSwJLyogaW4tcGhhc2UgKi8KKwkJTUFL RV9ZVVZfNjAxKDI1NSwgMjU1LCAyNTUpLAkvKiBzdXBlciB3aGl0ZSAqLworCQlNQUtFX1lVVl82 MDEoNTAsIDAsIDEwNiksCS8qIHF1YWRyYXR1cmUgKi8KKwkJTUFLRV9ZVVZfNjAxKDE5LCAxOSwg MTkpLAkvKiBibGFjayAqLworCQlNQUtFX1lVVl82MDEoOSwgOSwgOSksCQkvKiAzLjUlICovCisJ CU1BS0VfWVVWXzYwMSgxOSwgMTksIDE5KSwJLyogNy41JSAqLworCQlNQUtFX1lVVl82MDEoMjks IDI5LCAyOSksCS8qIDExLjUlICovCisJCU1BS0VfWVVWXzYwMSgxOSwgMTksIDE5KSwJLyogYmxh Y2sgKi8KKwl9OworCXVuc2lnbmVkIGNoYXIgKnlfbWVtID0gKHl1di0+b3JkZXIgJiBZVVZfWUMp ID8gbWVtIDogbWVtICsgMTsKKwl1bnNpZ25lZCBjaGFyICpjX21lbSA9ICh5dXYtPm9yZGVyICYg WVVWX0NZKSA/IG1lbSA6IG1lbSArIDE7CisJdW5zaWduZWQgaW50IHUgPSAoeXV2LT5vcmRlciAm IFlVVl9ZQ3JDYikgPyAyIDogMDsKKwl1bnNpZ25lZCBpbnQgdiA9ICh5dXYtPm9yZGVyICYgWVVW X1lDYkNyKSA/IDIgOiAwOworCXVuc2lnbmVkIGludCB4OworCXVuc2lnbmVkIGludCB5OworCisJ LyogTHVtYSAqLworCWZvciAoeSA9IDA7IHkgPCBoZWlnaHQgKiA2IC8gOTsgKyt5KSB7CisJCWZv ciAoeCA9IDA7IHggPCB3aWR0aDsgKyt4KQorCQkJeV9tZW1bMip4XSA9IGNvbG9yc190b3BbeCAq IDcgLyB3aWR0aF0ueTsKKwkJeV9tZW0gKz0gc3RyaWRlOworCX0KKworCWZvciAoOyB5IDwgaGVp Z2h0ICogNyAvIDk7ICsreSkgeworCQlmb3IgKHggPSAwOyB4IDwgd2lkdGg7ICsreCkKKwkJCXlf bWVtWzIqeF0gPSBjb2xvcnNfbWlkZGxlW3ggKiA3IC8gd2lkdGhdLnk7CisJCXlfbWVtICs9IHN0 cmlkZTsKKwl9CisKKwlmb3IgKDsgeSA8IGhlaWdodDsgKyt5KSB7CisJCWZvciAoeCA9IDA7IHgg PCB3aWR0aCAqIDUgLyA3OyArK3gpCisJCQl5X21lbVsyKnhdID0gY29sb3JzX2JvdHRvbVt4ICog NCAvICh3aWR0aCAqIDUgLyA3KV0ueTsKKwkJZm9yICg7IHggPCB3aWR0aCAqIDYgLyA3OyArK3gp CisJCQl5X21lbVsyKnhdID0gY29sb3JzX2JvdHRvbVsoeCAtIHdpZHRoICogNSAvIDcpICogMwor CQkJCQkJICAgLyAod2lkdGggLyA3KSArIDRdLnk7CisJCWZvciAoOyB4IDwgd2lkdGg7ICsreCkK KwkJCXlfbWVtWzIqeF0gPSBjb2xvcnNfYm90dG9tWzddLnk7CisJCXlfbWVtICs9IHN0cmlkZTsK Kwl9CisKKwkvKiBDaHJvbWEgKi8KKwlmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0ICogNiAvIDk7ICsr eSkgeworCQlmb3IgKHggPSAwOyB4IDwgd2lkdGg7IHggKz0gMikgeworCQkJY19tZW1bMip4K3Vd ID0gY29sb3JzX3RvcFt4ICogNyAvIHdpZHRoXS51OworCQkJY19tZW1bMip4K3ZdID0gY29sb3Jz X3RvcFt4ICogNyAvIHdpZHRoXS52OworCQl9CisJCWNfbWVtICs9IHN0cmlkZTsKKwl9CisKKwlm b3IgKDsgeSA8IGhlaWdodCAqIDcgLyA5OyArK3kpIHsKKwkJZm9yICh4ID0gMDsgeCA8IHdpZHRo OyB4ICs9IDIpIHsKKwkJCWNfbWVtWzIqeCt1XSA9IGNvbG9yc19taWRkbGVbeCAqIDcgLyB3aWR0 aF0udTsKKwkJCWNfbWVtWzIqeCt2XSA9IGNvbG9yc19taWRkbGVbeCAqIDcgLyB3aWR0aF0udjsK KwkJfQorCQljX21lbSArPSBzdHJpZGU7CisJfQorCisJZm9yICg7IHkgPCBoZWlnaHQ7ICsreSkg eworCQlmb3IgKHggPSAwOyB4IDwgd2lkdGggKiA1IC8gNzsgeCArPSAyKSB7CisJCQljX21lbVsy KngrdV0gPSBjb2xvcnNfYm90dG9tW3ggKiA0IC8gKHdpZHRoICogNSAvIDcpXS51OworCQkJY19t ZW1bMip4K3ZdID0gY29sb3JzX2JvdHRvbVt4ICogNCAvICh3aWR0aCAqIDUgLyA3KV0udjsKKwkJ fQorCQlmb3IgKDsgeCA8IHdpZHRoICogNiAvIDc7IHggKz0gMikgeworCQkJY19tZW1bMip4K3Vd ID0gY29sb3JzX2JvdHRvbVsoeCAtIHdpZHRoICogNSAvIDcpICoKKwkJCQkJCSAgICAgMyAvICh3 aWR0aCAvIDcpICsgNF0udTsKKwkJCWNfbWVtWzIqeCt2XSA9IGNvbG9yc19ib3R0b21bKHggLSB3 aWR0aCAqIDUgLyA3KSAqCisJCQkJCQkgICAgIDMgLyAod2lkdGggLyA3KSArIDRdLnY7CisJCX0K KwkJZm9yICg7IHggPCB3aWR0aDsgeCArPSAyKSB7CisJCQljX21lbVsyKngrdV0gPSBjb2xvcnNf Ym90dG9tWzddLnU7CisJCQljX21lbVsyKngrdl0gPSBjb2xvcnNfYm90dG9tWzddLnY7CisJCX0K KwkJY19tZW0gKz0gc3RyaWRlOworCX0KK30KKworc3RhdGljIHZvaWQgZmlsbF9zbXB0ZV9yZ2Ix Nihjb25zdCBzdHJ1Y3QgdXRpbF9yZ2JfaW5mbyAqcmdiLCB2b2lkICptZW0sCisJCQkgICAgIHVu c2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhlaWdodCwKKwkJCSAgICAgdW5zaWduZWQg aW50IHN0cmlkZSkKK3sKKwljb25zdCB1aW50MTZfdCBjb2xvcnNfdG9wW10gPSB7CisJCU1BS0Vf UkdCQShyZ2IsIDE5MiwgMTkyLCAxOTIsIDI1NSksCS8qIGdyZXkgKi8KKwkJTUFLRV9SR0JBKHJn YiwgMTkyLCAxOTIsIDAsIDI1NSksCS8qIHllbGxvdyAqLworCQlNQUtFX1JHQkEocmdiLCAwLCAx OTIsIDE5MiwgMjU1KSwJLyogY3lhbiAqLworCQlNQUtFX1JHQkEocmdiLCAwLCAxOTIsIDAsIDI1 NSksCQkvKiBncmVlbiAqLworCQlNQUtFX1JHQkEocmdiLCAxOTIsIDAsIDE5MiwgMjU1KSwJLyog bWFnZW50YSAqLworCQlNQUtFX1JHQkEocmdiLCAxOTIsIDAsIDAsIDI1NSksCQkvKiByZWQgKi8K KwkJTUFLRV9SR0JBKHJnYiwgMCwgMCwgMTkyLCAyNTUpLAkJLyogYmx1ZSAqLworCX07CisJY29u c3QgdWludDE2X3QgY29sb3JzX21pZGRsZVtdID0geworCQlNQUtFX1JHQkEocmdiLCAwLCAwLCAx OTIsIDI1NSksCQkvKiBibHVlICovCisJCU1BS0VfUkdCQShyZ2IsIDE5LCAxOSwgMTksIDI1NSks CS8qIGJsYWNrICovCisJCU1BS0VfUkdCQShyZ2IsIDE5MiwgMCwgMTkyLCAyNTUpLAkvKiBtYWdl bnRhICovCisJCU1BS0VfUkdCQShyZ2IsIDE5LCAxOSwgMTksIDI1NSksCS8qIGJsYWNrICovCisJ CU1BS0VfUkdCQShyZ2IsIDAsIDE5MiwgMTkyLCAyNTUpLAkvKiBjeWFuICovCisJCU1BS0VfUkdC QShyZ2IsIDE5LCAxOSwgMTksIDI1NSksCS8qIGJsYWNrICovCisJCU1BS0VfUkdCQShyZ2IsIDE5 MiwgMTkyLCAxOTIsIDI1NSksCS8qIGdyZXkgKi8KKwl9OworCWNvbnN0IHVpbnQxNl90IGNvbG9y c19ib3R0b21bXSA9IHsKKwkJTUFLRV9SR0JBKHJnYiwgMCwgMzMsIDc2LCAyNTUpLAkJLyogaW4t cGhhc2UgKi8KKwkJTUFLRV9SR0JBKHJnYiwgMjU1LCAyNTUsIDI1NSwgMjU1KSwJLyogc3VwZXIg d2hpdGUgKi8KKwkJTUFLRV9SR0JBKHJnYiwgNTAsIDAsIDEwNiwgMjU1KSwJLyogcXVhZHJhdHVy ZSAqLworCQlNQUtFX1JHQkEocmdiLCAxOSwgMTksIDE5LCAyNTUpLAkvKiBibGFjayAqLworCQlN QUtFX1JHQkEocmdiLCA5LCA5LCA5LCAyNTUpLAkJLyogMy41JSAqLworCQlNQUtFX1JHQkEocmdi LCAxOSwgMTksIDE5LCAyNTUpLAkvKiA3LjUlICovCisJCU1BS0VfUkdCQShyZ2IsIDI5LCAyOSwg MjksIDI1NSksCS8qIDExLjUlICovCisJCU1BS0VfUkdCQShyZ2IsIDE5LCAxOSwgMTksIDI1NSks CS8qIGJsYWNrICovCisJfTsKKwl1bnNpZ25lZCBpbnQgeDsKKwl1bnNpZ25lZCBpbnQgeTsKKwor CWZvciAoeSA9IDA7IHkgPCBoZWlnaHQgKiA2IC8gOTsgKyt5KSB7CisJCWZvciAoeCA9IDA7IHgg PCB3aWR0aDsgKyt4KQorCQkJKCh1aW50MTZfdCAqKW1lbSlbeF0gPSBjb2xvcnNfdG9wW3ggKiA3 IC8gd2lkdGhdOworCQltZW0gKz0gc3RyaWRlOworCX0KKworCWZvciAoOyB5IDwgaGVpZ2h0ICog NyAvIDk7ICsreSkgeworCQlmb3IgKHggPSAwOyB4IDwgd2lkdGg7ICsreCkKKwkJCSgodWludDE2 X3QgKiltZW0pW3hdID0gY29sb3JzX21pZGRsZVt4ICogNyAvIHdpZHRoXTsKKwkJbWVtICs9IHN0 cmlkZTsKKwl9CisKKwlmb3IgKDsgeSA8IGhlaWdodDsgKyt5KSB7CisJCWZvciAoeCA9IDA7IHgg PCB3aWR0aCAqIDUgLyA3OyArK3gpCisJCQkoKHVpbnQxNl90ICopbWVtKVt4XSA9CisJCQkJY29s b3JzX2JvdHRvbVt4ICogNCAvICh3aWR0aCAqIDUgLyA3KV07CisJCWZvciAoOyB4IDwgd2lkdGgg KiA2IC8gNzsgKyt4KQorCQkJKCh1aW50MTZfdCAqKW1lbSlbeF0gPQorCQkJCWNvbG9yc19ib3R0 b21bKHggLSB3aWR0aCAqIDUgLyA3KSAqIDMKKwkJCQkJICAgICAgLyAod2lkdGggLyA3KSArIDRd OworCQlmb3IgKDsgeCA8IHdpZHRoOyArK3gpCisJCQkoKHVpbnQxNl90ICopbWVtKVt4XSA9IGNv bG9yc19ib3R0b21bN107CisJCW1lbSArPSBzdHJpZGU7CisJfQorfQorCitzdGF0aWMgdm9pZCBm aWxsX3NtcHRlX3JnYjI0KGNvbnN0IHN0cnVjdCB1dGlsX3JnYl9pbmZvICpyZ2IsIHZvaWQgKm1l bSwKKwkJCSAgICAgdW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0LAorCQkJ ICAgICB1bnNpZ25lZCBpbnQgc3RyaWRlKQoreworCWNvbnN0IHN0cnVjdCBjb2xvcl9yZ2IyNCBj b2xvcnNfdG9wW10gPSB7CisJCU1BS0VfUkdCMjQocmdiLCAxOTIsIDE5MiwgMTkyKSwJLyogZ3Jl eSAqLworCQlNQUtFX1JHQjI0KHJnYiwgMTkyLCAxOTIsIDApLAkvKiB5ZWxsb3cgKi8KKwkJTUFL RV9SR0IyNChyZ2IsIDAsIDE5MiwgMTkyKSwJLyogY3lhbiAqLworCQlNQUtFX1JHQjI0KHJnYiwg MCwgMTkyLCAwKSwJLyogZ3JlZW4gKi8KKwkJTUFLRV9SR0IyNChyZ2IsIDE5MiwgMCwgMTkyKSwJ LyogbWFnZW50YSAqLworCQlNQUtFX1JHQjI0KHJnYiwgMTkyLCAwLCAwKSwJLyogcmVkICovCisJ CU1BS0VfUkdCMjQocmdiLCAwLCAwLCAxOTIpLAkvKiBibHVlICovCisJfTsKKwljb25zdCBzdHJ1 Y3QgY29sb3JfcmdiMjQgY29sb3JzX21pZGRsZVtdID0geworCQlNQUtFX1JHQjI0KHJnYiwgMCwg MCwgMTkyKSwJLyogYmx1ZSAqLworCQlNQUtFX1JHQjI0KHJnYiwgMTksIDE5LCAxOSksCS8qIGJs YWNrICovCisJCU1BS0VfUkdCMjQocmdiLCAxOTIsIDAsIDE5MiksCS8qIG1hZ2VudGEgKi8KKwkJ TUFLRV9SR0IyNChyZ2IsIDE5LCAxOSwgMTkpLAkvKiBibGFjayAqLworCQlNQUtFX1JHQjI0KHJn YiwgMCwgMTkyLCAxOTIpLAkvKiBjeWFuICovCisJCU1BS0VfUkdCMjQocmdiLCAxOSwgMTksIDE5 KSwJLyogYmxhY2sgKi8KKwkJTUFLRV9SR0IyNChyZ2IsIDE5MiwgMTkyLCAxOTIpLAkvKiBncmV5 ICovCisJfTsKKwljb25zdCBzdHJ1Y3QgY29sb3JfcmdiMjQgY29sb3JzX2JvdHRvbVtdID0gewor CQlNQUtFX1JHQjI0KHJnYiwgMCwgMzMsIDc2KSwJLyogaW4tcGhhc2UgKi8KKwkJTUFLRV9SR0Iy NChyZ2IsIDI1NSwgMjU1LCAyNTUpLAkvKiBzdXBlciB3aGl0ZSAqLworCQlNQUtFX1JHQjI0KHJn YiwgNTAsIDAsIDEwNiksCS8qIHF1YWRyYXR1cmUgKi8KKwkJTUFLRV9SR0IyNChyZ2IsIDE5LCAx OSwgMTkpLAkvKiBibGFjayAqLworCQlNQUtFX1JHQjI0KHJnYiwgOSwgOSwgOSksCS8qIDMuNSUg Ki8KKwkJTUFLRV9SR0IyNChyZ2IsIDE5LCAxOSwgMTkpLAkvKiA3LjUlICovCisJCU1BS0VfUkdC MjQocmdiLCAyOSwgMjksIDI5KSwJLyogMTEuNSUgKi8KKwkJTUFLRV9SR0IyNChyZ2IsIDE5LCAx OSwgMTkpLAkvKiBibGFjayAqLworCX07CisJdW5zaWduZWQgaW50IHg7CisJdW5zaWduZWQgaW50 IHk7CisKKwlmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0ICogNiAvIDk7ICsreSkgeworCQlmb3IgKHgg PSAwOyB4IDwgd2lkdGg7ICsreCkKKwkJCSgoc3RydWN0IGNvbG9yX3JnYjI0ICopbWVtKVt4XSA9 CisJCQkJY29sb3JzX3RvcFt4ICogNyAvIHdpZHRoXTsKKwkJbWVtICs9IHN0cmlkZTsKKwl9CisK Kwlmb3IgKDsgeSA8IGhlaWdodCAqIDcgLyA5OyArK3kpIHsKKwkJZm9yICh4ID0gMDsgeCA8IHdp ZHRoOyArK3gpCisJCQkoKHN0cnVjdCBjb2xvcl9yZ2IyNCAqKW1lbSlbeF0gPQorCQkJCWNvbG9y c19taWRkbGVbeCAqIDcgLyB3aWR0aF07CisJCW1lbSArPSBzdHJpZGU7CisJfQorCisJZm9yICg7 IHkgPCBoZWlnaHQ7ICsreSkgeworCQlmb3IgKHggPSAwOyB4IDwgd2lkdGggKiA1IC8gNzsgKyt4 KQorCQkJKChzdHJ1Y3QgY29sb3JfcmdiMjQgKiltZW0pW3hdID0KKwkJCQljb2xvcnNfYm90dG9t W3ggKiA0IC8gKHdpZHRoICogNSAvIDcpXTsKKwkJZm9yICg7IHggPCB3aWR0aCAqIDYgLyA3OyAr K3gpCisJCQkoKHN0cnVjdCBjb2xvcl9yZ2IyNCAqKW1lbSlbeF0gPQorCQkJCWNvbG9yc19ib3R0 b21bKHggLSB3aWR0aCAqIDUgLyA3KSAqIDMKKwkJCQkJICAgICAgLyAod2lkdGggLyA3KSArIDRd OworCQlmb3IgKDsgeCA8IHdpZHRoOyArK3gpCisJCQkoKHN0cnVjdCBjb2xvcl9yZ2IyNCAqKW1l bSlbeF0gPSBjb2xvcnNfYm90dG9tWzddOworCQltZW0gKz0gc3RyaWRlOworCX0KK30KKworc3Rh dGljIHZvaWQgZmlsbF9zbXB0ZV9yZ2IzMihjb25zdCBzdHJ1Y3QgdXRpbF9yZ2JfaW5mbyAqcmdi LCB2b2lkICptZW0sCisJCQkgICAgIHVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhl aWdodCwKKwkJCSAgICAgdW5zaWduZWQgaW50IHN0cmlkZSkKK3sKKwljb25zdCB1aW50MzJfdCBj b2xvcnNfdG9wW10gPSB7CisJCU1BS0VfUkdCQShyZ2IsIDE5MiwgMTkyLCAxOTIsIDI1NSksCS8q IGdyZXkgKi8KKwkJTUFLRV9SR0JBKHJnYiwgMTkyLCAxOTIsIDAsIDI1NSksCS8qIHllbGxvdyAq LworCQlNQUtFX1JHQkEocmdiLCAwLCAxOTIsIDE5MiwgMjU1KSwJLyogY3lhbiAqLworCQlNQUtF X1JHQkEocmdiLCAwLCAxOTIsIDAsIDI1NSksCQkvKiBncmVlbiAqLworCQlNQUtFX1JHQkEocmdi LCAxOTIsIDAsIDE5MiwgMjU1KSwJLyogbWFnZW50YSAqLworCQlNQUtFX1JHQkEocmdiLCAxOTIs IDAsIDAsIDI1NSksCQkvKiByZWQgKi8KKwkJTUFLRV9SR0JBKHJnYiwgMCwgMCwgMTkyLCAyNTUp LAkJLyogYmx1ZSAqLworCX07CisJY29uc3QgdWludDMyX3QgY29sb3JzX21pZGRsZVtdID0gewor CQlNQUtFX1JHQkEocmdiLCAwLCAwLCAxOTIsIDI1NSksCQkvKiBibHVlICovCisJCU1BS0VfUkdC QShyZ2IsIDE5LCAxOSwgMTksIDI1NSksCS8qIGJsYWNrICovCisJCU1BS0VfUkdCQShyZ2IsIDE5 MiwgMCwgMTkyLCAyNTUpLAkvKiBtYWdlbnRhICovCisJCU1BS0VfUkdCQShyZ2IsIDE5LCAxOSwg MTksIDI1NSksCS8qIGJsYWNrICovCisJCU1BS0VfUkdCQShyZ2IsIDAsIDE5MiwgMTkyLCAyNTUp LAkvKiBjeWFuICovCisJCU1BS0VfUkdCQShyZ2IsIDE5LCAxOSwgMTksIDI1NSksCS8qIGJsYWNr ICovCisJCU1BS0VfUkdCQShyZ2IsIDE5MiwgMTkyLCAxOTIsIDI1NSksCS8qIGdyZXkgKi8KKwl9 OworCWNvbnN0IHVpbnQzMl90IGNvbG9yc19ib3R0b21bXSA9IHsKKwkJTUFLRV9SR0JBKHJnYiwg MCwgMzMsIDc2LCAyNTUpLAkJLyogaW4tcGhhc2UgKi8KKwkJTUFLRV9SR0JBKHJnYiwgMjU1LCAy NTUsIDI1NSwgMjU1KSwJLyogc3VwZXIgd2hpdGUgKi8KKwkJTUFLRV9SR0JBKHJnYiwgNTAsIDAs IDEwNiwgMjU1KSwJLyogcXVhZHJhdHVyZSAqLworCQlNQUtFX1JHQkEocmdiLCAxOSwgMTksIDE5 LCAyNTUpLAkvKiBibGFjayAqLworCQlNQUtFX1JHQkEocmdiLCA5LCA5LCA5LCAyNTUpLAkJLyog My41JSAqLworCQlNQUtFX1JHQkEocmdiLCAxOSwgMTksIDE5LCAyNTUpLAkvKiA3LjUlICovCisJ CU1BS0VfUkdCQShyZ2IsIDI5LCAyOSwgMjksIDI1NSksCS8qIDExLjUlICovCisJCU1BS0VfUkdC QShyZ2IsIDE5LCAxOSwgMTksIDI1NSksCS8qIGJsYWNrICovCisJfTsKKwl1bnNpZ25lZCBpbnQg eDsKKwl1bnNpZ25lZCBpbnQgeTsKKworCWZvciAoeSA9IDA7IHkgPCBoZWlnaHQgKiA2IC8gOTsg Kyt5KSB7CisJCWZvciAoeCA9IDA7IHggPCB3aWR0aDsgKyt4KQorCQkJKCh1aW50MzJfdCAqKW1l bSlbeF0gPSBjb2xvcnNfdG9wW3ggKiA3IC8gd2lkdGhdOworCQltZW0gKz0gc3RyaWRlOworCX0K KworCWZvciAoOyB5IDwgaGVpZ2h0ICogNyAvIDk7ICsreSkgeworCQlmb3IgKHggPSAwOyB4IDwg d2lkdGg7ICsreCkKKwkJCSgodWludDMyX3QgKiltZW0pW3hdID0gY29sb3JzX21pZGRsZVt4ICog NyAvIHdpZHRoXTsKKwkJbWVtICs9IHN0cmlkZTsKKwl9CisKKwlmb3IgKDsgeSA8IGhlaWdodDsg Kyt5KSB7CisJCWZvciAoeCA9IDA7IHggPCB3aWR0aCAqIDUgLyA3OyArK3gpCisJCQkoKHVpbnQz Ml90ICopbWVtKVt4XSA9CisJCQkJY29sb3JzX2JvdHRvbVt4ICogNCAvICh3aWR0aCAqIDUgLyA3 KV07CisJCWZvciAoOyB4IDwgd2lkdGggKiA2IC8gNzsgKyt4KQorCQkJKCh1aW50MzJfdCAqKW1l bSlbeF0gPQorCQkJCWNvbG9yc19ib3R0b21bKHggLSB3aWR0aCAqIDUgLyA3KSAqIDMKKwkJCQkJ ICAgICAgLyAod2lkdGggLyA3KSArIDRdOworCQlmb3IgKDsgeCA8IHdpZHRoOyArK3gpCisJCQko KHVpbnQzMl90ICopbWVtKVt4XSA9IGNvbG9yc19ib3R0b21bN107CisJCW1lbSArPSBzdHJpZGU7 CisJfQorfQorCitzdGF0aWMgdm9pZCBmaWxsX3NtcHRlKGNvbnN0IHN0cnVjdCB1dGlsX2Zvcm1h dF9pbmZvICppbmZvLCB2b2lkICpwbGFuZXNbM10sCisJCSAgICAgICB1bnNpZ25lZCBpbnQgd2lk dGgsIHVuc2lnbmVkIGludCBoZWlnaHQsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgc3RyaWRlKQor eworCXVuc2lnbmVkIGNoYXIgKnUsICp2OworCisJc3dpdGNoIChpbmZvLT5mb3JtYXQpIHsKKwlj YXNlIERSTV9GT1JNQVRfVVlWWToKKwljYXNlIERSTV9GT1JNQVRfVllVWToKKwljYXNlIERSTV9G T1JNQVRfWVVZVjoKKwljYXNlIERSTV9GT1JNQVRfWVZZVToKKwkJcmV0dXJuIGZpbGxfc21wdGVf eXV2X3BhY2tlZCgmaW5mby0+eXV2LCBwbGFuZXNbMF0sIHdpZHRoLAorCQkJCQkgICAgIGhlaWdo dCwgc3RyaWRlKTsKKworCWNhc2UgRFJNX0ZPUk1BVF9OVjEyOgorCWNhc2UgRFJNX0ZPUk1BVF9O VjIxOgorCWNhc2UgRFJNX0ZPUk1BVF9OVjE2OgorCWNhc2UgRFJNX0ZPUk1BVF9OVjYxOgorCQl1 ID0gaW5mby0+eXV2Lm9yZGVyICYgWVVWX1lDYkNyID8gcGxhbmVzWzFdIDogcGxhbmVzWzFdICsg MTsKKwkJdiA9IGluZm8tPnl1di5vcmRlciAmIFlVVl9ZQ3JDYiA/IHBsYW5lc1sxXSA6IHBsYW5l c1sxXSArIDE7CisJCXJldHVybiBmaWxsX3NtcHRlX3l1dl9wbGFuYXIoJmluZm8tPnl1diwgcGxh bmVzWzBdLCB1LCB2LAorCQkJCQkgICAgIHdpZHRoLCBoZWlnaHQsIHN0cmlkZSk7CisKKwljYXNl IERSTV9GT1JNQVRfWVVWNDIwOgorCQlyZXR1cm4gZmlsbF9zbXB0ZV95dXZfcGxhbmFyKCZpbmZv LT55dXYsIHBsYW5lc1swXSwgcGxhbmVzWzFdLAorCQkJCQkgICAgIHBsYW5lc1syXSwgd2lkdGgs IGhlaWdodCwgc3RyaWRlKTsKKworCWNhc2UgRFJNX0ZPUk1BVF9ZVlU0MjA6CisJCXJldHVybiBm aWxsX3NtcHRlX3l1dl9wbGFuYXIoJmluZm8tPnl1diwgcGxhbmVzWzBdLCBwbGFuZXNbMl0sCisJ CQkJCSAgICAgcGxhbmVzWzFdLCB3aWR0aCwgaGVpZ2h0LCBzdHJpZGUpOworCisJY2FzZSBEUk1f Rk9STUFUX0FSR0I0NDQ0OgorCWNhc2UgRFJNX0ZPUk1BVF9YUkdCNDQ0NDoKKwljYXNlIERSTV9G T1JNQVRfQUJHUjQ0NDQ6CisJY2FzZSBEUk1fRk9STUFUX1hCR1I0NDQ0OgorCWNhc2UgRFJNX0ZP Uk1BVF9SR0JBNDQ0NDoKKwljYXNlIERSTV9GT1JNQVRfUkdCWDQ0NDQ6CisJY2FzZSBEUk1fRk9S TUFUX0JHUkE0NDQ0OgorCWNhc2UgRFJNX0ZPUk1BVF9CR1JYNDQ0NDoKKwljYXNlIERSTV9GT1JN QVRfUkdCNTY1OgorCWNhc2UgRFJNX0ZPUk1BVF9CR1I1NjU6CisJY2FzZSBEUk1fRk9STUFUX0FS R0IxNTU1OgorCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMTU1NToKKwljYXNlIERSTV9GT1JNQVRfQUJH UjE1NTU6CisJY2FzZSBEUk1fRk9STUFUX1hCR1IxNTU1OgorCWNhc2UgRFJNX0ZPUk1BVF9SR0JB NTU1MToKKwljYXNlIERSTV9GT1JNQVRfUkdCWDU1NTE6CisJY2FzZSBEUk1fRk9STUFUX0JHUkE1 NTUxOgorCWNhc2UgRFJNX0ZPUk1BVF9CR1JYNTU1MToKKwkJcmV0dXJuIGZpbGxfc21wdGVfcmdi MTYoJmluZm8tPnJnYiwgcGxhbmVzWzBdLAorCQkJCQl3aWR0aCwgaGVpZ2h0LCBzdHJpZGUpOwor CisJY2FzZSBEUk1fRk9STUFUX0JHUjg4ODoKKwljYXNlIERSTV9GT1JNQVRfUkdCODg4OgorCQly ZXR1cm4gZmlsbF9zbXB0ZV9yZ2IyNCgmaW5mby0+cmdiLCBwbGFuZXNbMF0sCisJCQkJCXdpZHRo LCBoZWlnaHQsIHN0cmlkZSk7CisJY2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4OgorCWNhc2UgRFJN X0ZPUk1BVF9YUkdCODg4ODoKKwljYXNlIERSTV9GT1JNQVRfQUJHUjg4ODg6CisJY2FzZSBEUk1f Rk9STUFUX1hCR1I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9SR0JBODg4ODoKKwljYXNlIERSTV9G T1JNQVRfUkdCWDg4ODg6CisJY2FzZSBEUk1fRk9STUFUX0JHUkE4ODg4OgorCWNhc2UgRFJNX0ZP Uk1BVF9CR1JYODg4ODoKKwljYXNlIERSTV9GT1JNQVRfQVJHQjIxMDEwMTA6CisJY2FzZSBEUk1f Rk9STUFUX1hSR0IyMTAxMDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMDoKKwljYXNl IERSTV9GT1JNQVRfWEJHUjIxMDEwMTA6CisJY2FzZSBEUk1fRk9STUFUX1JHQkExMDEwMTAyOgor CWNhc2UgRFJNX0ZPUk1BVF9SR0JYMTAxMDEwMjoKKwljYXNlIERSTV9GT1JNQVRfQkdSQTEwMTAx MDI6CisJY2FzZSBEUk1fRk9STUFUX0JHUlgxMDEwMTAyOgorCQlyZXR1cm4gZmlsbF9zbXB0ZV9y Z2IzMigmaW5mby0+cmdiLCBwbGFuZXNbMF0sCisJCQkJCXdpZHRoLCBoZWlnaHQsIHN0cmlkZSk7 CisJfQorfQorCisvKiBzd2FwIHRoZXNlIGZvciBiaWcgZW5kaWFuLi4gKi8KKyNkZWZpbmUgUkVE ICAgMgorI2RlZmluZSBHUkVFTiAxCisjZGVmaW5lIEJMVUUgIDAKKworc3RhdGljIHZvaWQgbWFr ZV9wd2V0dHkodm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVp Z2h0LAorCQkJdW5zaWduZWQgaW50IHN0cmlkZSwgdWludDMyX3QgZm9ybWF0KQoreworI2lmZGVm IEhBVkVfQ0FJUk8KKwljYWlyb19zdXJmYWNlX3QgKnN1cmZhY2U7CisJY2Fpcm9fdCAqY3I7CisJ aW50IHgsIHk7CisJY2Fpcm9fZm9ybWF0X3QgY2Fpcm9fZm9ybWF0OworCisJLyogd2UgY2FuIGln bm9yZSB0aGUgb3JkZXIgb2YgUixHLEIgY2hhbm5lbHMgKi8KKwlzd2l0Y2ggKGZvcm1hdCkgewor CWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKKwljYXNlIERSTV9GT1JNQVRfQVJHQjg4ODg6CisJ Y2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoKKwkJ Y2Fpcm9fZm9ybWF0ID0gQ0FJUk9fRk9STUFUX0FSR0IzMjsKKwkJYnJlYWs7CisJY2FzZSBEUk1f Rk9STUFUX1JHQjU2NToKKwljYXNlIERSTV9GT1JNQVRfQkdSNTY1OgorCQljYWlyb19mb3JtYXQg PSBDQUlST19GT1JNQVRfUkdCMTZfNTY1OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm47 CisJfQorCisJc3VyZmFjZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKGRh dGEsCisJCQkJCQkgICAgICBjYWlyb19mb3JtYXQsCisJCQkJCQkgICAgICB3aWR0aCwgaGVpZ2h0 LAorCQkJCQkJICAgICAgc3RyaWRlKTsKKwljciA9IGNhaXJvX2NyZWF0ZShzdXJmYWNlKTsKKwlj YWlyb19zdXJmYWNlX2Rlc3Ryb3koc3VyZmFjZSk7CisKKwljYWlyb19zZXRfbGluZV9jYXAoY3Is IENBSVJPX0xJTkVfQ0FQX1NRVUFSRSk7CisJZm9yICh4ID0gMDsgeCA8IHdpZHRoOyB4ICs9IDI1 MCkKKwkJZm9yICh5ID0gMDsgeSA8IGhlaWdodDsgeSArPSAyNTApIHsKKwkJCWNoYXIgYnVmWzY0 XTsKKworCQkJY2Fpcm9fbW92ZV90byhjciwgeCwgeSAtIDIwKTsKKwkJCWNhaXJvX2xpbmVfdG8o Y3IsIHgsIHkgKyAyMCk7CisJCQljYWlyb19tb3ZlX3RvKGNyLCB4IC0gMjAsIHkpOworCQkJY2Fp cm9fbGluZV90byhjciwgeCArIDIwLCB5KTsKKwkJCWNhaXJvX25ld19zdWJfcGF0aChjcik7CisJ CQljYWlyb19hcmMoY3IsIHgsIHksIDEwLCAwLCBNX1BJICogMik7CisJCQljYWlyb19zZXRfbGlu ZV93aWR0aChjciwgNCk7CisJCQljYWlyb19zZXRfc291cmNlX3JnYihjciwgMCwgMCwgMCk7CisJ CQljYWlyb19zdHJva2VfcHJlc2VydmUoY3IpOworCQkJY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY3Is IDEsIDEsIDEpOworCQkJY2Fpcm9fc2V0X2xpbmVfd2lkdGgoY3IsIDIpOworCQkJY2Fpcm9fc3Ry b2tlKGNyKTsKKworCQkJc25wcmludGYoYnVmLCBzaXplb2YgYnVmLCAiJWQsICVkIiwgeCwgeSk7 CisJCQljYWlyb19tb3ZlX3RvKGNyLCB4ICsgMjAsIHkgKyAyMCk7CisJCQljYWlyb190ZXh0X3Bh dGgoY3IsIGJ1Zik7CisJCQljYWlyb19zZXRfc291cmNlX3JnYihjciwgMCwgMCwgMCk7CisJCQlj YWlyb19zdHJva2VfcHJlc2VydmUoY3IpOworCQkJY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY3IsIDEs IDEsIDEpOworCQkJY2Fpcm9fZmlsbChjcik7CisJCX0KKworCWNhaXJvX2Rlc3Ryb3koY3IpOwor I2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIGZpbGxfdGlsZXNfeXV2X3BsYW5hcihjb25zdCBzdHJ1 Y3QgdXRpbF9mb3JtYXRfaW5mbyAqaW5mbywKKwkJCQkgIHVuc2lnbmVkIGNoYXIgKnlfbWVtLCB1 bnNpZ25lZCBjaGFyICp1X21lbSwKKwkJCQkgIHVuc2lnbmVkIGNoYXIgKnZfbWVtLCB1bnNpZ25l ZCBpbnQgd2lkdGgsCisJCQkJICB1bnNpZ25lZCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBpbnQgc3Ry aWRlKQoreworCWNvbnN0IHN0cnVjdCB1dGlsX3l1dl9pbmZvICp5dXYgPSAmaW5mby0+eXV2Owor CXVuc2lnbmVkIGludCBjcyA9IHl1di0+Y2hyb21hX3N0cmlkZTsKKwl1bnNpZ25lZCBpbnQgeHN1 YiA9IHl1di0+eHN1YjsKKwl1bnNpZ25lZCBpbnQgeXN1YiA9IHl1di0+eXN1YjsKKwl1bnNpZ25l ZCBpbnQgeDsKKwl1bnNpZ25lZCBpbnQgeTsKKworCWZvciAoeSA9IDA7IHkgPCBoZWlnaHQ7ICsr eSkgeworCQlmb3IgKHggPSAwOyB4IDwgd2lkdGg7ICsreCkgeworCQkJZGl2X3QgZCA9IGRpdih4 K3ksIHdpZHRoKTsKKwkJCXVpbnQzMl90IHJnYjMyID0gMHgwMDEzMDUwMiAqIChkLnF1b3QgPj4g NikKKwkJCQkgICAgICAgKyAweDAwMGExMTIwICogKGQucmVtID4+IDYpOworCQkJc3RydWN0IGNv bG9yX3l1diBjb2xvciA9CisJCQkJTUFLRV9ZVVZfNjAxKChyZ2IzMiA+PiAxNikgJiAweGZmLAor CQkJCQkgICAgIChyZ2IzMiA+PiA4KSAmIDB4ZmYsIHJnYjMyICYgMHhmZik7CisKKwkJCXlfbWVt W3hdID0gY29sb3IueTsKKwkJCXVfbWVtW3gveHN1Yipjc10gPSBjb2xvci51OworCQkJdl9tZW1b eC94c3ViKmNzXSA9IGNvbG9yLnY7CisJCX0KKworCQl5X21lbSArPSBzdHJpZGU7CisJCWlmICgo eSArIDEpICUgeXN1YiA9PSAwKSB7CisJCQl1X21lbSArPSBzdHJpZGUgKiBjcyAvIHhzdWI7CisJ CQl2X21lbSArPSBzdHJpZGUgKiBjcyAvIHhzdWI7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lk IGZpbGxfdGlsZXNfeXV2X3BhY2tlZChjb25zdCBzdHJ1Y3QgdXRpbF9mb3JtYXRfaW5mbyAqaW5m bywKKwkJCQkgIHZvaWQgKm1lbSwgdW5zaWduZWQgaW50IHdpZHRoLAorCQkJCSAgdW5zaWduZWQg aW50IGhlaWdodCwgdW5zaWduZWQgaW50IHN0cmlkZSkKK3sKKwljb25zdCBzdHJ1Y3QgdXRpbF95 dXZfaW5mbyAqeXV2ID0gJmluZm8tPnl1djsKKwl1bnNpZ25lZCBjaGFyICp5X21lbSA9ICh5dXYt Pm9yZGVyICYgWVVWX1lDKSA/IG1lbSA6IG1lbSArIDE7CisJdW5zaWduZWQgY2hhciAqY19tZW0g PSAoeXV2LT5vcmRlciAmIFlVVl9DWSkgPyBtZW0gOiBtZW0gKyAxOworCXVuc2lnbmVkIGludCB1 ID0gKHl1di0+b3JkZXIgJiBZVVZfWUNyQ2IpID8gMiA6IDA7CisJdW5zaWduZWQgaW50IHYgPSAo eXV2LT5vcmRlciAmIFlVVl9ZQ2JDcikgPyAyIDogMDsKKwl1bnNpZ25lZCBpbnQgeDsKKwl1bnNp Z25lZCBpbnQgeTsKKworCWZvciAoeSA9IDA7IHkgPCBoZWlnaHQ7ICsreSkgeworCQlmb3IgKHgg PSAwOyB4IDwgd2lkdGg7IHggKz0gMikgeworCQkJZGl2X3QgZCA9IGRpdih4K3ksIHdpZHRoKTsK KwkJCXVpbnQzMl90IHJnYjMyID0gMHgwMDEzMDUwMiAqIChkLnF1b3QgPj4gNikKKwkJCQkgICAg ICAgKyAweDAwMGExMTIwICogKGQucmVtID4+IDYpOworCQkJc3RydWN0IGNvbG9yX3l1diBjb2xv ciA9CisJCQkJTUFLRV9ZVVZfNjAxKChyZ2IzMiA+PiAxNikgJiAweGZmLAorCQkJCQkgICAgIChy Z2IzMiA+PiA4KSAmIDB4ZmYsIHJnYjMyICYgMHhmZik7CisKKwkJCXlfbWVtWzIqeF0gPSBjb2xv ci55OworCQkJY19tZW1bMip4K3VdID0gY29sb3IudTsKKwkJCXlfbWVtWzIqeCsyXSA9IGNvbG9y Lnk7CisJCQljX21lbVsyKngrdl0gPSBjb2xvci52OworCQl9CisKKwkJeV9tZW0gKz0gc3RyaWRl OworCQljX21lbSArPSBzdHJpZGU7CisJfQorfQorCitzdGF0aWMgdm9pZCBmaWxsX3RpbGVzX3Jn YjE2KGNvbnN0IHN0cnVjdCB1dGlsX2Zvcm1hdF9pbmZvICppbmZvLCB2b2lkICptZW0sCisJCQkg ICAgIHVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhlaWdodCwKKwkJCSAgICAgdW5z aWduZWQgaW50IHN0cmlkZSkKK3sKKwljb25zdCBzdHJ1Y3QgdXRpbF9yZ2JfaW5mbyAqcmdiID0g JmluZm8tPnJnYjsKKwl2b2lkICptZW1fYmFzZSA9IG1lbTsKKwl1bnNpZ25lZCBpbnQgeCwgeTsK KworCWZvciAoeSA9IDA7IHkgPCBoZWlnaHQ7ICsreSkgeworCQlmb3IgKHggPSAwOyB4IDwgd2lk dGg7ICsreCkgeworCQkJZGl2X3QgZCA9IGRpdih4K3ksIHdpZHRoKTsKKwkJCXVpbnQzMl90IHJn YjMyID0gMHgwMDEzMDUwMiAqIChkLnF1b3QgPj4gNikKKwkJCQkgICAgICAgKyAweDAwMGExMTIw ICogKGQucmVtID4+IDYpOworCQkJdWludDE2X3QgY29sb3IgPQorCQkJCU1BS0VfUkdCQShyZ2Is IChyZ2IzMiA+PiAxNikgJiAweGZmLAorCQkJCQkgIChyZ2IzMiA+PiA4KSAmIDB4ZmYsIHJnYjMy ICYgMHhmZiwKKwkJCQkJICAyNTUpOworCisJCQkoKHVpbnQxNl90ICopbWVtKVt4XSA9IGNvbG9y OworCQl9CisJCW1lbSArPSBzdHJpZGU7CisJfQorCisJbWFrZV9wd2V0dHkobWVtX2Jhc2UsIHdp ZHRoLCBoZWlnaHQsIHN0cmlkZSwgaW5mby0+Zm9ybWF0KTsKK30KKworc3RhdGljIHZvaWQgZmls bF90aWxlc19yZ2IyNChjb25zdCBzdHJ1Y3QgdXRpbF9mb3JtYXRfaW5mbyAqaW5mbywgdm9pZCAq bWVtLAorCQkJICAgICB1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQsCisJ CQkgICAgIHVuc2lnbmVkIGludCBzdHJpZGUpCit7CisJY29uc3Qgc3RydWN0IHV0aWxfcmdiX2lu Zm8gKnJnYiA9ICZpbmZvLT5yZ2I7CisJdW5zaWduZWQgaW50IHgsIHk7CisKKwlmb3IgKHkgPSAw OyB5IDwgaGVpZ2h0OyArK3kpIHsKKwkJZm9yICh4ID0gMDsgeCA8IHdpZHRoOyArK3gpIHsKKwkJ CWRpdl90IGQgPSBkaXYoeCt5LCB3aWR0aCk7CisJCQl1aW50MzJfdCByZ2IzMiA9IDB4MDAxMzA1 MDIgKiAoZC5xdW90ID4+IDYpCisJCQkJICAgICAgICsgMHgwMDBhMTEyMCAqIChkLnJlbSA+PiA2 KTsKKwkJCXN0cnVjdCBjb2xvcl9yZ2IyNCBjb2xvciA9CisJCQkJTUFLRV9SR0IyNChyZ2IsIChy Z2IzMiA+PiAxNikgJiAweGZmLAorCQkJCQkgICAocmdiMzIgPj4gOCkgJiAweGZmLCByZ2IzMiAm IDB4ZmYpOworCisJCQkoKHN0cnVjdCBjb2xvcl9yZ2IyNCAqKW1lbSlbeF0gPSBjb2xvcjsKKwkJ fQorCQltZW0gKz0gc3RyaWRlOworCX0KK30KKworc3RhdGljIHZvaWQgZmlsbF90aWxlc19yZ2Iz Mihjb25zdCBzdHJ1Y3QgdXRpbF9mb3JtYXRfaW5mbyAqaW5mbywgdm9pZCAqbWVtLAorCQkJICAg ICB1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQsCisJCQkgICAgIHVuc2ln bmVkIGludCBzdHJpZGUpCit7CisJY29uc3Qgc3RydWN0IHV0aWxfcmdiX2luZm8gKnJnYiA9ICZp bmZvLT5yZ2I7CisJdm9pZCAqbWVtX2Jhc2UgPSBtZW07CisJdW5zaWduZWQgaW50IHgsIHk7CisK Kwlmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyArK3kpIHsKKwkJZm9yICh4ID0gMDsgeCA8IHdpZHRo OyArK3gpIHsKKwkJCWRpdl90IGQgPSBkaXYoeCt5LCB3aWR0aCk7CisJCQl1aW50MzJfdCByZ2Iz MiA9IDB4MDAxMzA1MDIgKiAoZC5xdW90ID4+IDYpCisJCQkJICAgICAgICsgMHgwMDBhMTEyMCAq IChkLnJlbSA+PiA2KTsKKwkJCXVpbnQzMl90IGFscGhhID0gKCh5IDwgaGVpZ2h0LzIpICYmICh4 IDwgd2lkdGgvMikpID8gMTI3IDogMjU1OworCQkJdWludDMyX3QgY29sb3IgPQorCQkJCU1BS0Vf UkdCQShyZ2IsIChyZ2IzMiA+PiAxNikgJiAweGZmLAorCQkJCQkgIChyZ2IzMiA+PiA4KSAmIDB4 ZmYsIHJnYjMyICYgMHhmZiwKKwkJCQkJICBhbHBoYSk7CisKKwkJCSgodWludDMyX3QgKiltZW0p W3hdID0gY29sb3I7CisJCX0KKwkJbWVtICs9IHN0cmlkZTsKKwl9CisKKwltYWtlX3B3ZXR0eSht ZW1fYmFzZSwgd2lkdGgsIGhlaWdodCwgc3RyaWRlLCBpbmZvLT5mb3JtYXQpOworfQorCitzdGF0 aWMgdm9pZCBmaWxsX3RpbGVzKGNvbnN0IHN0cnVjdCB1dGlsX2Zvcm1hdF9pbmZvICppbmZvLCB2 b2lkICpwbGFuZXNbM10sCisJCSAgICAgICB1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGlu dCBoZWlnaHQsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgc3RyaWRlKQoreworCXVuc2lnbmVkIGNo YXIgKnUsICp2OworCisJc3dpdGNoIChpbmZvLT5mb3JtYXQpIHsKKwljYXNlIERSTV9GT1JNQVRf VVlWWToKKwljYXNlIERSTV9GT1JNQVRfVllVWToKKwljYXNlIERSTV9GT1JNQVRfWVVZVjoKKwlj YXNlIERSTV9GT1JNQVRfWVZZVToKKwkJcmV0dXJuIGZpbGxfdGlsZXNfeXV2X3BhY2tlZChpbmZv LCBwbGFuZXNbMF0sCisJCQkJCSAgICAgd2lkdGgsIGhlaWdodCwgc3RyaWRlKTsKKworCWNhc2Ug RFJNX0ZPUk1BVF9OVjEyOgorCWNhc2UgRFJNX0ZPUk1BVF9OVjIxOgorCWNhc2UgRFJNX0ZPUk1B VF9OVjE2OgorCWNhc2UgRFJNX0ZPUk1BVF9OVjYxOgorCQl1ID0gaW5mby0+eXV2Lm9yZGVyICYg WVVWX1lDYkNyID8gcGxhbmVzWzFdIDogcGxhbmVzWzFdICsgMTsKKwkJdiA9IGluZm8tPnl1di5v cmRlciAmIFlVVl9ZQ3JDYiA/IHBsYW5lc1sxXSA6IHBsYW5lc1sxXSArIDE7CisJCXJldHVybiBm aWxsX3RpbGVzX3l1dl9wbGFuYXIoaW5mbywgcGxhbmVzWzBdLCB1LCB2LAorCQkJCQkgICAgIHdp ZHRoLCBoZWlnaHQsIHN0cmlkZSk7CisKKwljYXNlIERSTV9GT1JNQVRfWVVWNDIwOgorCQlyZXR1 cm4gZmlsbF90aWxlc195dXZfcGxhbmFyKGluZm8sIHBsYW5lc1swXSwgcGxhbmVzWzFdLAorCQkJ CQkgICAgIHBsYW5lc1syXSwgd2lkdGgsIGhlaWdodCwgc3RyaWRlKTsKKworCWNhc2UgRFJNX0ZP Uk1BVF9ZVlU0MjA6CisJCXJldHVybiBmaWxsX3RpbGVzX3l1dl9wbGFuYXIoaW5mbywgcGxhbmVz WzBdLCBwbGFuZXNbMl0sCisJCQkJCSAgICAgcGxhbmVzWzFdLCB3aWR0aCwgaGVpZ2h0LCBzdHJp ZGUpOworCisJY2FzZSBEUk1fRk9STUFUX0FSR0I0NDQ0OgorCWNhc2UgRFJNX0ZPUk1BVF9YUkdC NDQ0NDoKKwljYXNlIERSTV9GT1JNQVRfQUJHUjQ0NDQ6CisJY2FzZSBEUk1fRk9STUFUX1hCR1I0 NDQ0OgorCWNhc2UgRFJNX0ZPUk1BVF9SR0JBNDQ0NDoKKwljYXNlIERSTV9GT1JNQVRfUkdCWDQ0 NDQ6CisJY2FzZSBEUk1fRk9STUFUX0JHUkE0NDQ0OgorCWNhc2UgRFJNX0ZPUk1BVF9CR1JYNDQ0 NDoKKwljYXNlIERSTV9GT1JNQVRfUkdCNTY1OgorCWNhc2UgRFJNX0ZPUk1BVF9CR1I1NjU6CisJ Y2FzZSBEUk1fRk9STUFUX0FSR0IxNTU1OgorCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMTU1NToKKwlj YXNlIERSTV9GT1JNQVRfQUJHUjE1NTU6CisJY2FzZSBEUk1fRk9STUFUX1hCR1IxNTU1OgorCWNh c2UgRFJNX0ZPUk1BVF9SR0JBNTU1MToKKwljYXNlIERSTV9GT1JNQVRfUkdCWDU1NTE6CisJY2Fz ZSBEUk1fRk9STUFUX0JHUkE1NTUxOgorCWNhc2UgRFJNX0ZPUk1BVF9CR1JYNTU1MToKKwkJcmV0 dXJuIGZpbGxfdGlsZXNfcmdiMTYoaW5mbywgcGxhbmVzWzBdLAorCQkJCQl3aWR0aCwgaGVpZ2h0 LCBzdHJpZGUpOworCisJY2FzZSBEUk1fRk9STUFUX0JHUjg4ODoKKwljYXNlIERSTV9GT1JNQVRf UkdCODg4OgorCQlyZXR1cm4gZmlsbF90aWxlc19yZ2IyNChpbmZvLCBwbGFuZXNbMF0sCisJCQkJ CXdpZHRoLCBoZWlnaHQsIHN0cmlkZSk7CisJY2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4OgorCWNh c2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKKwljYXNlIERSTV9GT1JNQVRfQUJHUjg4ODg6CisJY2Fz ZSBEUk1fRk9STUFUX1hCR1I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9SR0JBODg4ODoKKwljYXNl IERSTV9GT1JNQVRfUkdCWDg4ODg6CisJY2FzZSBEUk1fRk9STUFUX0JHUkE4ODg4OgorCWNhc2Ug RFJNX0ZPUk1BVF9CR1JYODg4ODoKKwljYXNlIERSTV9GT1JNQVRfQVJHQjIxMDEwMTA6CisJY2Fz ZSBEUk1fRk9STUFUX1hSR0IyMTAxMDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMDoK KwljYXNlIERSTV9GT1JNQVRfWEJHUjIxMDEwMTA6CisJY2FzZSBEUk1fRk9STUFUX1JHQkExMDEw MTAyOgorCWNhc2UgRFJNX0ZPUk1BVF9SR0JYMTAxMDEwMjoKKwljYXNlIERSTV9GT1JNQVRfQkdS QTEwMTAxMDI6CisJY2FzZSBEUk1fRk9STUFUX0JHUlgxMDEwMTAyOgorCQlyZXR1cm4gZmlsbF90 aWxlc19yZ2IzMihpbmZvLCBwbGFuZXNbMF0sCisJCQkJCXdpZHRoLCBoZWlnaHQsIHN0cmlkZSk7 CisJfQorfQorCitzdGF0aWMgdm9pZCBmaWxsX3BsYWluKGNvbnN0IHN0cnVjdCB1dGlsX2Zvcm1h dF9pbmZvICppbmZvLCB2b2lkICpwbGFuZXNbM10sCisJCSAgICAgICB1bnNpZ25lZCBpbnQgd2lk dGgsIHVuc2lnbmVkIGludCBoZWlnaHQsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgc3RyaWRlKQor eworCW1lbXNldChwbGFuZXNbMF0sIDB4NzcsIHN0cmlkZSAqIGhlaWdodCk7Cit9CisKKy8qCisg KiB1dGlsX2ZpbGxfcGF0dGVybiAtIEZpbGwgYSBidWZmZXIgd2l0aCBhIHRlc3QgcGF0dGVybgor ICogQGZvcm1hdDogUGl4ZWwgZm9ybWF0CisgKiBAcGF0dGVybjogVGVzdCBwYXR0ZXJuCisgKiBA cGxhbmVzOiBBcnJheSBvZiBidWZmZXJzCisgKiBAd2lkdGg6IFdpZHRoIGluIHBpeGVscworICog QGhlaWdodDogSGVpZ2h0IGluIHBpeGVscworICogQHN0cmlkZTogTGluZSBzdHJpZGUgKHBpdGNo KSBpbiBieXRlcworICoKKyAqIEZpbGwgdGhlIGJ1ZmZlcnMgd2l0aCB0aGUgdGVzdCBwYXR0ZXJu IHNwZWNpZmllZCBieSB0aGUgcGF0dGVybiBwYXJhbWV0ZXIuCisgKiBTdXBwb3J0ZWQgZm9ybWF0 cyB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgc2VsZWN0ZWQgcGF0dGVybi4KKyAqLwordm9pZCB1dGls X2ZpbGxfcGF0dGVybih1aW50MzJfdCBmb3JtYXQsIGVudW0gdXRpbF9maWxsX3BhdHRlcm4gcGF0 dGVybiwKKwkJICAgICAgIHZvaWQgKnBsYW5lc1szXSwgdW5zaWduZWQgaW50IHdpZHRoLAorCQkg ICAgICAgdW5zaWduZWQgaW50IGhlaWdodCwgdW5zaWduZWQgaW50IHN0cmlkZSkKK3sKKwljb25z dCBzdHJ1Y3QgdXRpbF9mb3JtYXRfaW5mbyAqaW5mbzsKKworCWluZm8gPSB1dGlsX2Zvcm1hdF9p bmZvX2ZpbmQoZm9ybWF0KTsKKwlpZiAoaW5mbyA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlzd2l0 Y2ggKHBhdHRlcm4pIHsKKwljYXNlIFVUSUxfUEFUVEVSTl9USUxFUzoKKwkJcmV0dXJuIGZpbGxf dGlsZXMoaW5mbywgcGxhbmVzLCB3aWR0aCwgaGVpZ2h0LCBzdHJpZGUpOworCisJY2FzZSBVVElM X1BBVFRFUk5fU01QVEU6CisJCXJldHVybiBmaWxsX3NtcHRlKGluZm8sIHBsYW5lcywgd2lkdGgs IGhlaWdodCwgc3RyaWRlKTsKKworCWNhc2UgVVRJTF9QQVRURVJOX1BMQUlOOgorCQlyZXR1cm4g ZmlsbF9wbGFpbihpbmZvLCBwbGFuZXMsIHdpZHRoLCBoZWlnaHQsIHN0cmlkZSk7CisKKwlkZWZh dWx0OgorCQlwcmludGYoIkVycm9yOiB1bnN1cHBvcnRlZCB0ZXN0IHBhdHRlcm4gJXUuXG4iLCBw YXR0ZXJuKTsKKwkJYnJlYWs7CisJfQorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvdXRpbC9wYXR0ZXJu LmggYi90ZXN0cy91dGlsL3BhdHRlcm4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAuLmQ1YzQyNjBjYzZlZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3V0aWwvcGF0 dGVybi5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOCBUdW5nc3RlbiBH cmFwaGljcworICogICBKYWtvYiBCb3JuZWNyYW50eiA8amFrb2JAdHVuZ3N0ZW5ncmFwaGljcy5j b20+CisgKiBDb3B5cmlnaHQgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbgorICogICBKZXNzZSBCYXJu ZXMgPGplc3NlLmJhcm5lc0BpbnRlbC5jb20+CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkg Z3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNv cHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0 aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3Ry aWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVz ZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwK KyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVy c29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJq ZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJp Z2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBp bgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUu CisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFO VFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9U IExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZF TlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBG T1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g QU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJP TSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBP UiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgVVRJ TF9QQVRURVJOX0gKKyNkZWZpbmUgVVRJTF9QQVRURVJOX0gKKworZW51bSB1dGlsX2ZpbGxfcGF0 dGVybiB7CisJVVRJTF9QQVRURVJOX1RJTEVTLAorCVVUSUxfUEFUVEVSTl9QTEFJTiwKKwlVVElM X1BBVFRFUk5fU01QVEUsCit9OworCit2b2lkIHV0aWxfZmlsbF9wYXR0ZXJuKHVpbnQzMl90IGZv cm1hdCwgZW51bSB1dGlsX2ZpbGxfcGF0dGVybiBwYXR0ZXJuLAorCQkgICAgICAgdm9pZCAqcGxh bmVzWzNdLCB1bnNpZ25lZCBpbnQgd2lkdGgsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgaGVpZ2h0 LCB1bnNpZ25lZCBpbnQgc3RyaWRlKTsKKworI2VuZGlmIC8qIFVUSUxfUEFUVEVSTl9IICovCmRp ZmYgLS1naXQgYS90ZXN0cy92Ymx0ZXN0L01ha2VmaWxlLmFtIGIvdGVzdHMvdmJsdGVzdC9NYWtl ZmlsZS5hbQppbmRleCAzNGEzNWU3ZDE3ZGMuLmMwMTRlYThjNzI1MyAxMDA2NDQKLS0tIGEvdGVz dHMvdmJsdGVzdC9NYWtlZmlsZS5hbQorKysgYi90ZXN0cy92Ymx0ZXN0L01ha2VmaWxlLmFtCkBA IC0xLDUgKzEsNiBAQAogQU1fQ0ZMQUdTID0gXAogCS1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlL2Ry bSBcCisJLUkkKHRvcF9zcmNkaXIpL3Rlc3RzIFwKIAktSSQodG9wX3NyY2RpcikKIGlmIEhBVkVf SU5TVEFMTF9URVNUUwogYmluX1BST0dSQU1TID0gXApkaWZmIC0tZ2l0IGEvdGVzdHMvdmJsdGVz dC92Ymx0ZXN0LmMgYi90ZXN0cy92Ymx0ZXN0L3ZibHRlc3QuYwppbmRleCBjZGMxZWY2YjMzNjQu LjdlNWUwOTYyZGVhZiAxMDA2NDQKLS0tIGEvdGVzdHMvdmJsdGVzdC92Ymx0ZXN0LmMKKysrIGIv dGVzdHMvdmJsdGVzdC92Ymx0ZXN0LmMKQEAgLTU0LDcgKzU0LDcgQEAKICNpbmNsdWRlICJ4Zjg2 ZHJtLmgiCiAjaW5jbHVkZSAieGY4NmRybU1vZGUuaCIKIAotI2RlZmluZSBBUlJBWV9TSVpFKGFy cikgKHNpemVvZihhcnIpIC8gc2l6ZW9mKChhcnIpWzBdKSkKKyNpbmNsdWRlICJ1dGlsL2NvbW1v bi5oIgogCiBleHRlcm4gY2hhciAqb3B0YXJnOwogZXh0ZXJuIGludCBvcHRpbmQsIG9wdGVyciwg b3B0b3B0OwotLSAKMi4xLjMKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJp LWRldmVsCg==