From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id D9F6D48EDF for ; Thu, 29 Feb 2024 12:38:04 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8DFC168D15B; Thu, 29 Feb 2024 14:38:01 +0200 (EET) Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1B50368CE37 for ; Thu, 29 Feb 2024 14:37:55 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1709210274; bh=0VlsAat8KLV33V2Q70JT95HSlA/HKKDTl9gZ+n5J1bI=; h=From:To:Cc:Subject:Date:From; b=gDvxWUr9bF7+MPHTSwrN6uIhgqQj448BdQihYbN4DOVVavP/pZPm8LQsZ2OVKdwi9 viuNBx0anyW0oFP6IB1ypS2tAK8Iq3sfNwftH56wYq8ZELKaEcDtc2erelhbzV1xC5 D7G0BvZQfGvU0Jaf6wzKFjnh/KpaNhprTl/267/g= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id CF50340292; Thu, 29 Feb 2024 13:37:54 +0100 (CET) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Thu, 29 Feb 2024 13:33:36 +0100 Message-ID: <20240229123340.49055-2-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.43.2 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 1/4] avcodec/aom_film_grain: add AOM film grain synthesis X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Niklas Haas Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: RnJvbTogTmlrbGFzIEhhYXMgPGdpdEBoYWFzbi5kZXY+CgpDaGFuZ2VzIHNpbmNlIHYxOgoKLSBS ZXBsYWNlZCBQWFNUUklERSgpIG1hY3JvIHVzYWdlIGJ5IGV4cGxpY2l0IChjaGFyICopIGNhc3Rz Ci0gUmUtdXNlZCBkZWZpbml0aW9ucyBmcm9tICJhb21fZmlsbV9ncmFpbi5oIiBpbnN0ZWFkIG9m IGR1cGxpY2F0aW5nCi0gQ29tcGlsZWQgdGVtcGxhdGUgb25seSB0d2ljZSwgb25jZSBmb3IgOC1i aXQgYW5kIG9uY2UgZm9yIDE2LWJpdCwKICBwYXNzaW5nIGJpdCBkZXB0aCBleHBsaWNpdGx5IGFz IGEgcGFyYW1ldGVyIGluIHRoZSBIQkQgY2FzZSAodGhpcwogIG1hdGNoZXMgaG93IGRhdjFkIGRv ZXMgaXQpCi0gRml4ZWQgbGVmdC1vdmVyIHBpeF9mbXQgY2hlY2sKLSBGaXhlZCByZWR1bmRhbnQg YXNzZXJ0aW9ucwotIE1vdmVkIGdlbmVyaWMgcGxhbmUgY29weWluZyBjb2RlIG91dCBvZiB0ZW1w bGF0ZQoKSSBuZWVkIHRvIHRlc3QgdGhpcyB1cGRhdGVkIHZlcnNpb24gYmVmb3JlIHdlIGNhbiBt ZXJnZSB0aGlzIHNlcmllczsKY3VycmVudGx5IEkgaGF2ZSBubyBBRkdTMSBzYW1wbGVzIGNvcnJl c3BvbmRpbmcgdG8gdGhlIHVwZGF0ZWQgKHYxLjAuMCkKdmVyc2lvbiBvZiB0aGUgc3BlYy4KCk1h eWJlIHdlIGNhbiBmaWd1cmUgb3V0IGEgd2F5IHRvIGludGVncmF0ZSBpdCBpbnRvIGF2MWRlYyBh cyBhIGZvcmNlZApzb2Z0d2FyZSBhbHRlcm5hdGl2ZSB0byBod2FjY2VsIGZpbG0gZ3JhaW4sIGp1 c3QgZm9yIHRoZSBzYWtlIG9mCnRlc3Rpbmc/CgotLS0KSW1wbGVtZW50YXRpb24gY29waWVkIHdo b2xlc2FsZSBmcm9tIGRhdjFkLCBzYW5zIFNJTUQsIHVuZGVyIHBlcm1pc3NpdmUKbGljZW5zZS4g VGhpcyBpbXBsZW1lbnRhdGlvbiB3YXMgZXh0ZW5zaXZlbHkgdmVyaWZpZWQgdG8gYmUgYml0LWV4 YWN0LApzbyBpdCBzZXJ2ZXMgYXMgYSBtdWNoIGJldHRlciBzdGFydGluZyBwb2ludCB0aGFuIHRy eWluZyB0byByZS1lbmdpbmVlcgp0aGlzIGZyb20gc2NyYXRjaCBmb3Igbm8gcmVhc29uLiAoSSBh bHNvIGF1dGhvcmVkIHRoZSBvcmlnaW5hbAppbXBsZW1lbnRhdGlvbiBpbiBkYXYxZCwgc28gYW55 ICJjbGVhbiByb29tIiBpbXBsZW1lbnRhdGlvbiB3b3VsZCBlbmQgdXAKbG9va2luZyBtdWNoIHRo ZSBzYW1lLCBhbnl3YXkpCgpUaGUgbm90YWJsZSBjaGFuZ2VzIEkgaGFkIHRvIG1ha2Ugd2hpbGUg YWRhcHRpbmcgdGhpcyBmcm9tIHRoZSBkYXYxZApjb2RlLWJhc2UgdG8gdGhlIEZGbXBlZyBjb2Rl YmFzZSBpbmNsdWRlOgoKLSByZW9yZGVyaW5nIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyB0byBhdm9p ZCB0cmlnZ2VyaW5nIHdhcm5pbmdzCi0gcmVwbGFjaW5nIHNldmVyYWwgaW5saW5lIGhlbHBlcnMg YnkgYXZ1dGlsIGVxdWl2YWxlbnRzCi0gY2hhbmdpbmcgY29kZSB0aGF0IGFjY2Vzc2VzIGZyYW1l IG1ldGFkYXRhCi0gcmVwbGFjaW5nIHJhdyBwbGFuZSBjb3B5aW5nIGxvZ2ljIGJ5IGF2X2ltYWdl X2NvcHlfcGxhbmUKCkFwYXJ0IGZyb20gdGhpcywgdGhlIGltcGxlbWVudGF0aW9uIGlzIGJhc2lj YWxseSB1bm1vZGlmaWVkLgotLS0KIGxpYmF2Y29kZWMvYW9tX2ZpbG1fZ3JhaW4uYyAgICAgICAg ICB8IDMwMiArKysrKysrKysrKysrKwogbGliYXZjb2RlYy9hb21fZmlsbV9ncmFpbi5oICAgICAg ICAgIHwgIDM4ICsrCiBsaWJhdmNvZGVjL2FvbV9maWxtX2dyYWluX3RlbXBsYXRlLmMgfCA1ODYg KysrKysrKysrKysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDkyNiBpbnNlcnRp b25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy9hb21fZmlsbV9ncmFpbi5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy9hb21fZmlsbV9ncmFpbi5oCiBjcmVhdGUgbW9k ZSAxMDA2NDQgbGliYXZjb2RlYy9hb21fZmlsbV9ncmFpbl90ZW1wbGF0ZS5jCgpkaWZmIC0tZ2l0 IGEvbGliYXZjb2RlYy9hb21fZmlsbV9ncmFpbi5jIGIvbGliYXZjb2RlYy9hb21fZmlsbV9ncmFp bi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kYzBiZDBjMjA1ZQot LS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Y29kZWMvYW9tX2ZpbG1fZ3JhaW4uYwpAQCAtMCwwICsx LDMwMiBAQAorLyoKKyAqIEFPTSBmaWxtIGdyYWluIHN5bnRoZXNpcworICogQ29weXJpZ2h0IChj KSAyMDIzIE5pa2xhcyBIYWFzIDxmZm1wZWdAaGFhc24ueHl6PgorICoKKyAqIFRoaXMgZmlsZSBp cyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9m IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK KyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcg d2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5k YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg MDIxMTAtMTMwMSBVU0EKKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBBT00gZmlsbSBncmFpbiBz eW50aGVzaXMuCisgKiBAYXV0aG9yIE5pa2xhcyBIYWFzIDxmZm1wZWdAaGFhc24ueHl6PgorICov CisKKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZhc3NlcnQuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwv aW1ndXRpbHMuaCIKKworI2luY2x1ZGUgImFvbV9maWxtX2dyYWluLmgiCisKKy8vIENvbW1vbi9z aGFyZWQgaGVscGVycyAobm90IGRlcGVuZGVudCBvbiBCSVRfREVQVEgpCitzdGF0aWMgaW5saW5l IGludCBnZXRfcmFuZG9tX251bWJlcihjb25zdCBpbnQgYml0cywgdW5zaWduZWQgKmNvbnN0IHN0 YXRlKSB7CisgICAgY29uc3QgaW50IHIgPSAqc3RhdGU7CisgICAgdW5zaWduZWQgYml0ID0gKChy ID4+IDApIF4gKHIgPj4gMSkgXiAociA+PiAzKSBeIChyID4+IDEyKSkgJiAxOworICAgICpzdGF0 ZSA9IChyID4+IDEpIHwgKGJpdCA8PCAxNSk7CisKKyAgICByZXR1cm4gKCpzdGF0ZSA+PiAoMTYg LSBiaXRzKSkgJiAoKDEgPDwgYml0cykgLSAxKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcm91 bmQyKGNvbnN0IGludCB4LCBjb25zdCB1aW50NjRfdCBzaGlmdCkgeworICAgIHJldHVybiAoeCAr ICgoMSA8PCBzaGlmdCkgPj4gMSkpID4+IHNoaWZ0OworfQorCitzdGF0aWMgY29uc3QgaW50MTZf dCBnYXVzc2lhbl9zZXF1ZW5jZVsyMDQ4XTsKKworI2RlZmluZSBCSVRfREVQVEggMTYKKyNpbmNs dWRlICJhb21fZmlsbV9ncmFpbl90ZW1wbGF0ZS5jIgorI3VuZGVmIEJJVF9ERVBUSAorCisjZGVm aW5lIEJJVF9ERVBUSCA4CisjaW5jbHVkZSAiYW9tX2ZpbG1fZ3JhaW5fdGVtcGxhdGUuYyIKKyN1 bmRlZiBCSVRfREVQVEgKKworCitpbnQgZmZfYW9tX2FwcGx5X2ZpbG1fZ3JhaW4oQVZGcmFtZSAq b3V0LCBjb25zdCBBVkZyYW1lICppbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBBVkZpbG1HcmFpblBhcmFtcyAqcGFyYW1zKQoreworICAgIGNvbnN0IEFWRmlsbUdyYWluQU9N UGFyYW1zICpjb25zdCBkYXRhID0gJnBhcmFtcy0+Y29kZWMuYW9tOworICAgIGNvbnN0IEFWUGl4 Rm10RGVzY3JpcHRvciAqZGVzYyA9IGF2X3BpeF9mbXRfZGVzY19nZXQob3V0LT5mb3JtYXQpOwor ICAgIGNvbnN0IGludCBzdWJ4ID0gZGVzYy0+bG9nMl9jaHJvbWFfdywgc3VieSA9IGRlc2MtPmxv ZzJfY2hyb21hX2g7CisgICAgY29uc3QgaW50IHB4c3RlcCA9IGRlc2MtPmNvbXBbMF0uc3RlcDsK KworICAgIGF2X2Fzc2VydDAob3V0LT5mb3JtYXQgPT0gaW4tPmZvcm1hdCk7CisgICAgYXZfYXNz ZXJ0MChwYXJhbXMtPnR5cGUgPT0gQVZfRklMTV9HUkFJTl9QQVJBTVNfQVYxKTsKKworICAgIC8v IENvcHkgb3ZlciB0aGUgbm9uLW1vZGlmaWVkIHBsYW5lcworICAgIGlmICghcGFyYW1zLT5jb2Rl Yy5hb20ubnVtX3lfcG9pbnRzKSB7CisgICAgICAgIGF2X2ltYWdlX2NvcHlfcGxhbmUob3V0LT5k YXRhWzBdLCBvdXQtPmxpbmVzaXplWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu LT5kYXRhWzBdLCBpbi0+bGluZXNpemVbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg b3V0LT53aWR0aCAqIHB4c3RlcCwgb3V0LT5oZWlnaHQpOworICAgIH0KKyAgICBmb3IgKGludCB1 diA9IDA7IHV2IDwgMjsgdXYrKykgeworICAgICAgICBpZiAoIWRhdGEtPm51bV91dl9wb2ludHNb dXZdKSB7CisgICAgICAgICAgICBhdl9pbWFnZV9jb3B5X3BsYW5lKG91dC0+ZGF0YVsxK3V2XSwg b3V0LT5saW5lc2l6ZVsxK3V2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4t PmRhdGFbMSt1dl0sIGluLT5saW5lc2l6ZVsxK3V2XSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQVZfQ0VJTF9SU0hJRlQob3V0LT53aWR0aCwgc3VieCkgKiBweHN0ZXAsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWX0NFSUxfUlNISUZUKG91dC0+aGVpZ2h0LCBz dWJ5KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzd2l0Y2ggKGluLT5mb3JtYXQpIHsKKyAg ICBjYXNlIEFWX1BJWF9GTVRfR1JBWTg6CisgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQyMFA6Cisg ICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQyMlA6CisgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQ0NFA6 CisgICAgY2FzZSBBVl9QSVhfRk1UX1lVVko0MjBQOgorICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVZK NDIyUDoKKyAgICBjYXNlIEFWX1BJWF9GTVRfWVVWSjQ0NFA6CisgICAgICAgIHJldHVybiBhcHBs eV9maWxtX2dyYWluXzgob3V0LCBpbiwgcGFyYW1zKTsKKyAgICBjYXNlIEFWX1BJWF9GTVRfR1JB WTk6CisgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQyMFA5OgorICAgIGNhc2UgQVZfUElYX0ZNVF9Z VVY0MjJQOToKKyAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDQ0UDk6CisgICAgICAgIHJldHVybiBh cHBseV9maWxtX2dyYWluXzE2KG91dCwgaW4sIHBhcmFtcywgOSk7CisgICAgY2FzZSBBVl9QSVhf Rk1UX0dSQVkxMDoKKyAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDIwUDEwOgorICAgIGNhc2UgQVZf UElYX0ZNVF9ZVVY0MjJQMTA6CisgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQ0NFAxMDoKKyAgICAg ICAgcmV0dXJuIGFwcGx5X2ZpbG1fZ3JhaW5fMTYob3V0LCBpbiwgcGFyYW1zLCAxMCk7CisgICAg Y2FzZSBBVl9QSVhfRk1UX0dSQVkxMjoKKyAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDIwUDEyOgor ICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0MjJQMTI6CisgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQ0 NFAxMjoKKyAgICAgICAgcmV0dXJuIGFwcGx5X2ZpbG1fZ3JhaW5fMTYob3V0LCBpbiwgcGFyYW1z LCAxMik7CisgICAgfQorCisgICAgLyogVGhlIEFWMSBzcGVjIG9ubHkgZGVmaW5lcyBmaWxtIGdy YWluIHN5bnRoZXNpcyBmb3IgdGhlc2UgZm9ybWF0cyAqLworICAgIHJldHVybiBBVkVSUk9SX0lO VkFMSUREQVRBOworfQorCisvLyBUYWtlbiBmcm9tIHRoZSBBVjEgc3BlYy4gUmFuZ2UgaXMgWy0y MDQ4LCAyMDQ3XSwgbWVhbiBpcyAwIGFuZCBzdGRkZXYgaXMgNTEyCitzdGF0aWMgY29uc3QgaW50 MTZfdCBnYXVzc2lhbl9zZXF1ZW5jZVsyMDQ4XSA9IHsKKyAgICA1NiwgICAgNTY4LCAgIC0xODAs ICAxNzIsICAgMTI0LCAgIC04NCwgICAxNzIsICAgLTY0LCAgIC05MDAsICAyNCwgICA4MjAsCisg ICAgMjI0LCAgIDEyNDgsICA5OTYsICAgMjcyLCAgIC04LCAgICAtOTE2LCAgLTM4OCwgIC03MzIs ICAtMTA0LCAgLTE4OCwgODAwLAorICAgIDExMiwgICAtNjUyLCAgLTMyMCwgIC0zNzYsICAxNDAs ICAgLTI1MiwgIDQ5MiwgICAtMTY4LCAgNDQsICAgIC03ODgsIDU4OCwKKyAgICAtNTg0LCAgNTAw LCAgIC0yMjgsICAxMiwgICAgNjgwLCAgIDI3MiwgICAtNDc2LCAgOTcyLCAgIC0xMDAsICA2NTIs ICAzNjgsCisgICAgNDMyLCAgIC0xOTYsICAtNzIwLCAgLTE5MiwgIDEwMDAsICAtMzMyLCAgNjUy LCAgIC0xMzYsICAtNTUyLCAgLTYwNCwgLTQsCisgICAgMTkyLCAgIC0yMjAsICAtMTM2LCAgMTAw MCwgIC01MiwgICAzNzIsICAgLTk2LCAgIC02MjQsICAxMjQsICAgLTI0LCAgMzk2LAorICAgIDU0 MCwgICAtMTIsICAgLTEwNCwgIDY0MCwgICA0NjQsICAgMjQ0LCAgIC0yMDgsICAtODQsICAgMzY4 LCAgIC01MjgsIC03NDAsCisgICAgMjQ4LCAgIC05NjgsICAtODQ4LCAgNjA4LCAgIDM3NiwgICAt NjAsICAgLTI5MiwgIC00MCwgICAtMTU2LCAgMjUyLCAgLTI5MiwKKyAgICAyNDgsICAgMjI0LCAg IC0yODAsICA0MDAsICAgLTI0NCwgIDI0NCwgICAtNjAsICAgNzYsICAgIC04MCwgICAyMTIsICA1 MzIsCisgICAgMzQwLCAgIDEyOCwgICAtMzYsICAgODI0LCAgIC0zNTIsICAtNjAsICAgLTI2NCwg IC05NiwgICAtNjEyLCAgNDE2LCAgLTcwNCwKKyAgICAyMjAsICAgLTIwNCwgIDY0MCwgICAtMTYw LCAgMTIyMCwgIC00MDgsICA5MDAsICAgMzM2LCAgIDIwLCAgICAtMzM2LCAtOTYsCisgICAgLTc5 MiwgIDMwNCwgICA0OCwgICAgLTI4LCAgIC0xMjMyLCAtMTE3MiwgLTQ0OCwgIDEwNCwgICAtMjky LCAgLTUyMCwgMjQ0LAorICAgIDYwLCAgICAtOTQ4LCAgMCwgICAgIC03MDgsICAyNjgsICAgMTA4 LCAgIDM1NiwgICAtNTQ4LCAgNDg4LCAgIC0zNDQsIC0xMzYsCisgICAgNDg4LCAgIC0xOTYsICAt MjI0LCAgNjU2LCAgIC0yMzYsICAtMTEyOCwgNjAsICAgIDQsICAgICAxNDAsICAgMjc2LCAgLTY3 NiwKKyAgICAtMzc2LCAgMTY4LCAgIC0xMDgsICA0NjQsICAgOCwgICAgIDU2NCwgICA2NCwgICAg MjQwLCAgIDMwOCwgICAtMzAwLCAtNDAwLAorICAgIC00NTYsICAtMTM2LCAgNTYsICAgIDEyMCwg ICAtNDA4LCAgLTExNiwgIDQzNiwgICA1MDQsICAgLTIzMiwgIDMyOCwgIDg0NCwKKyAgICAtMTY0 LCAgLTg0LCAgIDc4NCwgICAtMTY4LCAgMjMyLCAgIC0yMjQsICAzNDgsICAgLTM3NiwgIDEyOCwg ICA1NjgsICA5NiwKKyAgICAtMTI0NCwgLTI4OCwgIDI3NiwgICA4NDgsICAgODMyLCAgIC0zNjAs ICA2NTYsICAgNDY0LCAgIC0zODQsICAtMzMyLCAtMzU2LAorICAgIDcyOCwgICAtMzg4LCAgMTYw LCAgIC0xOTIsICA0NjgsICAgMjk2LCAgIDIyNCwgICAxNDAsICAgLTc3NiwgIC0xMDAsIDI4MCwK KyAgICA0LCAgICAgMTk2LCAgIDQ0LCAgICAtMzYsICAgLTY0OCwgIDkzMiwgICAxNiwgICAgMTQy OCwgIDI4LCAgICA1MjgsICA4MDgsCisgICAgNzcyLCAgIDIwLCAgICAyNjgsICAgODgsICAgIC0z MzIsICAtMjg0LCAgMTI0LCAgIC0zODQsICAtNDQ4LCAgMjA4LCAgLTIyOCwKKyAgICAtMTA0NCwg LTMyOCwgIDY2MCwgICAzODAsICAgLTE0OCwgIC0zMDAsICA1ODgsICAgMjQwLCAgIDU0MCwgICAy OCwgICAxMzYsCisgICAgLTg4LCAgIC00MzYsICAyNTYsICAgMjk2LCAgIC0xMDAwLCAxNDAwLCAg MCwgICAgIC00OCwgICAxMDU2LCAgLTEzNiwgMjY0LAorICAgIC01MjgsICAtMTEwOCwgNjMyLCAg IC00ODQsICAtNTkyLCAgLTM0NCwgIDc5NiwgICAxMjQsICAgLTY2OCwgIC03NjgsIDM4OCwKKyAg ICAxMjk2LCAgLTIzMiwgIC0xODgsICAtMjAwLCAgLTI4OCwgIC00LCAgICAzMDgsICAgMTAwLCAg IC0xNjgsICAyNTYsICAtNTAwLAorICAgIDIwNCwgICAtNTA4LCAgNjQ4LCAgIC0xMzYsICAzNzIs ICAgLTI3MiwgIC0xMjAsICAtMTAwNCwgLTU1MiwgIC01NDgsIC0zODQsCisgICAgNTQ4LCAgIC0y OTYsICA0MjgsICAgLTEwOCwgIC04LCAgICAtOTEyLCAgLTMyNCwgIC0yMjQsICAtODgsICAgLTEx MiwgLTIyMCwKKyAgICAtMTAwLCAgOTk2LCAgIC03OTYsICA1NDgsICAgMzYwLCAgIC0yMTYsICAx ODAsICAgNDI4LCAgIC0yMDAsICAtMjEyLCAxNDgsCisgICAgOTYsICAgIDE0OCwgICAyODQsICAg MjE2LCAgIC00MTIsICAtMzIwLCAgMTIwLCAgIC0zMDAsICAtMzg0LCAgLTYwNCwgLTU3MiwKKyAg ICAtMzMyLCAgLTgsICAgIC0xODAsICAtMTc2LCAgNjk2LCAgIDExNiwgICAtODgsICAgNjI4LCAg IDc2LCAgICA0NCwgICAtNTE2LAorICAgIDI0MCwgICAtMjA4LCAgLTQwLCAgIDEwMCwgICAtNTky LCAgMzQ0LCAgIC0zMDgsICAtNDUyLCAgLTIyOCwgIDIwLCAgIDkxNiwKKyAgICAtMTc1MiwgLTEz NiwgIC0zNDAsICAtODA0LCAgMTQwLCAgIDQwLCAgICA1MTIsICAgMzQwLCAgIDI0OCwgICAxODQs ICAtNDkyLAorICAgIDg5NiwgICAtMTU2LCAgOTMyLCAgIC02MjgsICAzMjgsICAgLTY4OCwgIC00 NDgsICAtNjE2LCAgLTc1MiwgIC0xMDAsIDU2MCwKKyAgICAtMTAyMCwgMTgwLCAgIC04MDAsICAt NjQsICAgNzYsICAgIDU3NiwgICAxMDY4LCAgMzk2LCAgIDY2MCwgICA1NTIsICAtMTA4LAorICAg IC0yOCwgICAzMjAsICAgLTYyOCwgIDMxMiwgICAtOTIsICAgLTkyLCAgIC00NzIsICAyNjgsICAg MTYsICAgIDU2MCwgIDUxNiwKKyAgICAtNjcyLCAgLTUyLCAgIDQ5MiwgICAtMTAwLCAgMjYwLCAg IDM4NCwgICAyODQsICAgMjkyLCAgIDMwNCwgICAtMTQ4LCA4OCwKKyAgICAtMTUyLCAgMTAxMiwg IDEwNjQsICAtMjI4LCAgMTY0LCAgIC0zNzYsICAtNjg0LCAgNTkyLCAgIC0zOTIsICAxNTYsICAx OTYsCisgICAgLTUyNCwgIC02NCwgICAtODg0LCAgMTYwLCAgIC0xNzYsICA2MzYsICAgNjQ4LCAg IDQwNCwgICAtMzk2LCAgLTQzNiwgODY0LAorICAgIDQyNCwgICAtNzI4LCAgOTg4LCAgIC02MDQs ICA5MDQsICAgLTU5MiwgIDI5NiwgICAtMjI0LCAgNTM2LCAgIC0xNzYsIC05MjAsCisgICAgNDM2 LCAgIC00OCwgICAxMTc2LCAgLTg4NCwgIDQxNiwgICAtNzc2LCAgLTgyNCwgIC04ODQsICA1MjQs ICAgLTU0OCwgLTU2NCwKKyAgICAtNjgsICAgLTE2NCwgIC05NiwgICA2OTIsICAgMzY0LCAgIC02 OTIsICAtMTAxMiwgLTY4LCAgIDI2MCwgICAtNDgwLCA4NzYsCisgICAgLTExMTYsIDQ1MiwgICAt MzMyLCAgLTM1MiwgIDg5MiwgICAtMTA4OCwgMTIyMCwgIC02NzYsICAxMiwgICAgLTI5MiwgMjQ0 LAorICAgIDQ5NiwgICAzNzIsICAgLTMyLCAgIDI4MCwgICAyMDAsICAgMTEyLCAgIC00NDAsICAt OTYsICAgMjQsICAgIC02NDQsIC0xODQsCisgICAgNTYsICAgIC00MzIsICAyMjQsICAgLTk4MCwg IDI3MiwgICAtMjYwLCAgMTQ0LCAgIC00MzYsICA0MjAsICAgMzU2LCAgMzY0LAorICAgIC01Mjgs ICA3NiwgICAgMTcyLCAgIC03NDQsICAtMzY4LCAgNDA0LCAgIC03NTIsICAtNDE2LCAgNjg0LCAg IC02ODgsIDcyLAorICAgIDU0MCwgICA0MTYsICAgOTIsICAgIDQ0NCwgICA0ODAsICAgLTcyLCAg IC0xNDE2LCAxNjQsICAgLTExNzIsIC02OCwgIDI0LAorICAgIDQyNCwgICAyNjQsICAgMTA0MCwg IDEyOCwgICAtOTEyLCAgLTUyNCwgIC0zNTYsICA2NCwgICAgODc2LCAgIC0xMiwgIDQsCisgICAg LTg4LCAgIDUzMiwgICAyNzIsICAgLTUyNCwgIDMyMCwgICAyNzYsICAgLTUwOCwgIDk0MCwgICAy NCwgICAgLTQwMCwgLTEyMCwKKyAgICA3NTYsICAgNjAsICAgIDIzNiwgICAtNDEyLCAgMTAwLCAg IDM3NiwgICAtNDg0LCAgNDAwLCAgIC0xMDAsICAtNzQwLCAtMTA4LAorICAgIC0yNjAsICAzMjgs ICAgLTI2OCwgIDIyNCwgICAtMjAwLCAgLTQxNiwgIDE4NCwgICAtNjA0LCAgLTU2NCwgIC0yMCwg IDI5NiwKKyAgICA2MCwgICAgODkyLCAgIC04ODgsICA2MCwgICAgMTY0LCAgIDY4LCAgICAtNzYw LCAgMjE2LCAgIC0yOTYsICA5MDQsICAtMzM2LAorICAgIC0yOCwgICA0MDQsICAgLTM1NiwgIC01 NjgsICAtMjA4LCAgLTE0ODAsIC01MTIsICAyOTYsICAgMzI4LCAgIC0zNjAsIC0xNjQsCisgICAg LTE1NjAsIC03NzYsICAxMTU2LCAgLTQyOCwgIDE2NCwgICAtNTA0LCAgLTExMiwgIDEyMCwgICAt MjE2LCAgLTE0OCwgLTI2NCwKKyAgICAzMDgsICAgMzIsICAgIDY0LCAgICAtNzIsICAgNzIsICAg IDExNiwgICAxNzYsICAgLTY0LCAgIC0yNzIsICA0NjAsICAtNTM2LAorICAgIC03ODQsICAtMjgw LCAgMzQ4LCAgIDEwOCwgICAtNzUyLCAgLTEzMiwgIDUyNCwgICAtNTQwLCAgLTc3NiwgIDExNiwg IC0yOTYsCisgICAgLTExOTYsIC0yODgsICAtNTYwLCAgMTA0MCwgIC00NzIsICAxMTYsICAgLTg0 OCwgIC0xMTE2LCAxMTYsICAgNjM2LCAgNjk2LAorICAgIDI4NCwgICAtMTc2LCAgMTAxNiwgIDIw NCwgICAtODY0LCAgLTY0OCwgIC0yNDgsICAzNTYsICAgOTcyLCAgIC01ODQsIC0yMDQsCisgICAg MjY0LCAgIDg4MCwgICA1MjgsICAgLTI0LCAgIC0xODQsICAxMTYsICAgNDQ4LCAgIC0xNDQsICA4 MjgsICAgNTI0LCAgMjEyLAorICAgIC0yMTIsICA1MiwgICAgMTIsICAgIDIwMCwgICAyNjgsICAg LTQ4OCwgIC00MDQsICAtODgwLCAgODI0LCAgIC02NzIsIC00MCwKKyAgICA5MDgsICAgLTI0OCwg IDUwMCwgICA3MTYsICAgLTU3NiwgIDQ5MiwgICAtNTc2LCAgMTYsICAgIDcyMCwgICAtMTA4LCAz ODQsCisgICAgMTI0LCAgIDM0NCwgICAyODAsICAgNTc2LCAgIC01MDAsICAyNTIsICAgMTA0LCAg IC0zMDgsICAxOTYsICAgLTE4OCwgLTgsCisgICAgMTI2OCwgIDI5NiwgICAxMDMyLCAgLTExOTYs IDQzNiwgICAzMTYsICAgMzcyLCAgIC00MzIsICAtMjAwLCAgLTY2MCwgNzA0LAorICAgIC0yMjQs ICA1OTYsICAgLTEzMiwgIDI2OCwgICAzMiwgICAgLTQ1MiwgIDg4NCwgICAxMDQsICAgLTEwMDgs IDQyNCwgIC0xMzQ4LAorICAgIC0yODAsICA0LCAgICAgLTExNjgsIDM2OCwgICA0NzYsICAgNjk2 LCAgIDMwMCwgICAtOCwgICAgMjQsICAgIDE4MCwgIC01OTIsCisgICAgLTE5NiwgIDM4OCwgICAz MDQsICAgNTAwLCAgIDcyNCwgICAtMTYwLCAgMjQ0LCAgIC04NCwgICAyNzIsICAgLTI1NiwgLTQy MCwKKyAgICAzMjAsICAgMjA4LCAgIC0xNDQsICAtMTU2LCAgMTU2LCAgIDM2NCwgICA0NTIsICAg MjgsICAgIDU0MCwgICAzMTYsICAyMjAsCisgICAgLTY0NCwgIC0yNDgsICA0NjQsICAgNzIsICAg IDM2MCwgICAzMiwgICAgLTM4OCwgIDQ5NiwgICAtNjgwLCAgLTQ4LCAgMjA4LAorICAgIC0xMTYs ICAtNDA4LCAgNjAsICAgIC02MDQsICAtMzkyLCAgNTQ4LCAgIC04NDAsICA3ODQsICAgLTQ2MCwg IDY1NiwgIC01NDQsCisgICAgLTM4OCwgIC0yNjQsICA5MDgsICAgLTgwMCwgIC02MjgsICAtNjEy LCAgLTU2OCwgIDU3MiwgICAtMjIwLCAgMTY0LCAgMjg4LAorICAgIC0xNiwgICAtMzA4LCAgMzA4 LCAgIC0xMTIsICAtNjM2LCAgLTc2MCwgIDI4MCwgICAtNjY4LCAgNDMyLCAgIDM2NCwgIDI0MCwK KyAgICAtMTk2LCAgNjA0LCAgIDM0MCwgICAzODQsICAgMTk2LCAgIDU5MiwgICAtNDQsICAgLTUw MCwgIDQzMiwgICAtNTgwLCAtMTMyLAorICAgIDYzNiwgICAtNzYsICAgMzkyLCAgIDQsICAgICAt NDEyLCAgNTQwLCAgIDUwOCwgICAzMjgsICAgLTM1NiwgIC0zNiwgIDE2LAorICAgIC0yMjAsICAt NjQsICAgLTI0OCwgIC02MCwgICAyNCwgICAgLTE5MiwgIDM2OCwgICAxMDQwLCAgOTIsICAgIC0y NCwgIC0xMDQ0LAorICAgIC0zMiwgICA0MCwgICAgMTA0LCAgIDE0OCwgICAxOTIsICAgLTEzNiwg IC01MjAsICA1NiwgICAgLTgxNiwgIC0yMjQsIDczMiwKKyAgICAzOTIsICAgMzU2LCAgIDIxMiwg ICAtODAsICAgLTQyNCwgIC0xMDA4LCAtMzI0LCAgNTg4LCAgIC0xNDk2LCA1NzYsICA0NjAsCisg ICAgLTgxNiwgIC04NDgsICA1NiwgICAgLTU4MCwgIC05MiwgICAtMTM3MiwgLTExMiwgIC00OTYs ICAyMDAsICAgMzY0LCAgNTIsCisgICAgLTE0MCwgIDQ4LCAgICAtNDgsICAgLTYwLCAgIDg0LCAg ICA3MiwgICAgNDAsICAgIDEzMiwgICAtMzU2LCAgLTI2OCwgLTEwNCwKKyAgICAtMjg0LCAgLTQw NCwgIDczMiwgICAtNTIwLCAgMTY0LCAgIC0zMDQsICAtNTQwLCAgMTIwLCAgIDMyOCwgICAtNzYs ICAtNDYwLAorICAgIDc1NiwgICAzODgsICAgNTg4LCAgIDIzNiwgICAtNDM2LCAgLTcyLCAgIC0x NzYsICAtNDA0LCAgLTMxNiwgIC0xNDgsIDcxNiwKKyAgICAtNjA0LCAgNDA0LCAgIC03MiwgICAt ODgsICAgLTg4OCwgIC02OCwgICA5NDQsICAgODgsICAgIC0yMjAsICAtMzQ0LCA5NjAsCisgICAg NDcyLCAgIDQ2MCwgICAtMjMyLCAgNzA0LCAgIDEyMCwgICA4MzIsICAgLTIyOCwgIDY5MiwgICAt NTA4LCAgMTMyLCAgLTQ3NiwKKyAgICA4NDQsICAgLTc0OCwgIC0zNjQsICAtNDQsICAgMTExNiwg IC0xMTA0LCAtMTA1NiwgNzYsICAgIDQyOCwgICA1NTIsICAtNjkyLAorICAgIDYwLCAgICAzNTYs ICAgOTYsICAgIC0zODQsICAtMTg4LCAgLTYxMiwgIC01NzYsICA3MzYsICAgNTA4LCAgIDg5Miwg IDM1MiwKKyAgICAtMTEzMiwgNTA0LCAgIC0yNCwgICAtMzUyLCAgMzI0LCAgIDMzMiwgICAtNjAw LCAgLTMxMiwgIDI5MiwgICA1MDgsICAtMTQ0LAorICAgIC04LCAgICA0ODQsICAgNDgsICAgIDI4 NCwgICAtMjYwLCAgLTI0MCwgIDI1NiwgICAtMTAwLCAgLTI5MiwgIC0yMDQsIC00NCwKKyAgICA0 NzIsICAgLTIwNCwgIDkwOCwgICAtMTg4LCAgLTEwMDAsIC0yNTYsICA5MiwgICAgMTE2NCwgIC0z OTIsICA1NjQsICAzNTYsCisgICAgNjUyLCAgIC0yOCwgICAtODg0LCAgMjU2LCAgIDQ4NCwgICAt MTkyLCAgNzYwLCAgIC0xNzYsICAzNzYsICAgLTUyNCwgLTQ1MiwKKyAgICAtNDM2LCAgODYwLCAg IC03MzYsICAyMTIsICAgMTI0LCAgIDUwNCwgICAtNDc2LCAgNDY4LCAgIDc2LCAgICAtNDcyLCA1 NTIsCisgICAgLTY5MiwgIC05NDQsICAtNjIwLCAgNzQwLCAgIC0yNDAsICA0MDAsICAgMTMyLCAg IDIwLCAgICAxOTIsICAgLTE5NiwgMjY0LAorICAgIC02NjgsICAtMTAxMiwgLTYwLCAgIDI5Niwg ICAtMzE2LCAgLTgyOCwgIDc2LCAgICAtMTU2LCAgMjg0LCAgIC03NjgsIC00NDgsCisgICAgLTgz MiwgIDE0OCwgICAyNDgsICAgNjUyLCAgIDYxNiwgICAxMjM2LCAgMjg4LCAgIC0zMjgsICAtNDAw LCAgLTEyNCwgNTg4LAorICAgIDIyMCwgICA1MjAsICAgLTY5NiwgIDEwMzIsICA3NjgsICAgLTc0 MCwgIC05MiwgICAtMjcyLCAgMjk2LCAgIDQ0OCwgIC00NjQsCisgICAgNDEyLCAgIC0yMDAsICAz OTIsICAgNDQwLCAgIC0yMDAsICAyNjQsICAgLTE1MiwgIC0yNjAsICAzMjAsICAgMTAzMiwgMjE2 LAorICAgIDMyMCwgICAtOCwgICAgLTY0LCAgIDE1NiwgICAtMTAxNiwgMTA4NCwgIDExNzIsICA1 MzYsICAgNDg0LCAgIC00MzIsIDEzMiwKKyAgICAzNzIsICAgLTUyLCAgIC0yNTYsICA4NCwgICAg MTE2LCAgIC0zNTIsICA0OCwgICAgMTE2LCAgIDMwNCwgICAtMzg0LCA0MTIsCisgICAgOTI0LCAg IC0zMDAsICA1MjgsICAgNjI4LCAgIDE4MCwgICA2NDgsICAgNDQsICAgIC05ODAsICAtMjIwLCAg MTMyMCwgNDgsCisgICAgMzMyLCAgIDc0OCwgICA1MjQsICAgLTI2OCwgIC03MjAsICA1NDAsICAg LTI3NiwgIDU2NCwgICAtMzQ0LCAgLTIwOCwgLTE5NiwKKyAgICA0MzYsICAgODk2LCAgIDg4LCAg ICAtMzkyLCAgMTMyLCAgIDgwLCAgICAtOTY0LCAgLTI4OCwgIDU2OCwgICA1NiwgICAtNDgsCisg ICAgLTQ1NiwgIDg4OCwgICA4LCAgICAgNTUyLCAgIC0xNTYsICAtMjkyLCAgOTQ4LCAgIDI4OCwg ICAxMjgsICAgLTcxNiwgLTI5MiwKKyAgICAxMTkyLCAgLTE1MiwgIDg3NiwgICAzNTIsICAgLTYw MCwgIC0yNjAsICAtODEyLCAgLTQ2OCwgIC0yOCwgICAtMTIwLCAtMzIsCisgICAgLTQ0LCAgIDEy ODQsICA0OTYsICAgMTkyLCAgIDQ2NCwgICAzMTIsICAgLTc2LCAgIC01MTYsICAtMzgwLCAgLTQ1 NiwgLTEwMTIsCisgICAgLTQ4LCAgIDMwOCwgICAtMTU2LCAgMzYsICAgIDQ5MiwgICAtMTU2LCAg LTgwOCwgIDE4OCwgICAxNjUyLCAgNjgsICAgLTEyMCwKKyAgICAtMTE2LCAgMzE2LCAgIDE2MCwg ICAtMTQwLCAgMzUyLCAgIDgwOCwgICAtNDE2LCAgNTkyLCAgIDMxNiwgICAtNDgwLCA1NiwKKyAg ICA1MjgsICAgLTIwNCwgIC01NjgsICAzNzIsICAgLTIzMiwgIDc1MiwgICAtMzQ0LCAgNzQ0LCAg IC00LCAgICAzMjQsICAtNDE2LAorICAgIC02MDAsICA3NjgsICAgMjY4LCAgIC0yNDgsICAtODgs ICAgLTEzMiwgIC00MjAsICAtNDMyLCAgODAsICAgIC0yODgsIDQwNCwKKyAgICAtMzE2LCAgLTEy MTYsIC01ODgsICA1MjAsICAgLTEwOCwgIDkyLCAgICAtMzIwLCAgMzY4LCAgIC00ODAsICAtMjE2 LCAtOTIsCisgICAgMTY4OCwgIC0zMDAsICAxODAsICAgMTAyMCwgIC0xNzYsICA4MjAsICAgLTY4 LCAgIC0yMjgsICAtMjYwLCAgNDM2LCAgLTkwNCwKKyAgICAyMCwgICAgNDAsICAgIC01MDgsICA0 NDAsICAgLTczNiwgIDMxMiwgICAzMzIsICAgMjA0LCAgIDc2MCwgICAtMzcyLCA3MjgsCisgICAg OTYsICAgIC0yMCwgICAtNjMyLCAgLTUyMCwgIC01NjAsICAzMzYsICAgMTA3NiwgIC02NCwgICAt NTMyLCAgNzc2LCAgNTg0LAorICAgIDE5MiwgICAzOTYsICAgLTcyOCwgIC01MjAsICAyNzYsICAg LTE4OCwgIDgwLCAgICAtNTIsICAgLTYxMiwgIC0yNTIsIC00OCwKKyAgICA2NDgsICAgMjEyLCAg IC02ODgsICAyMjgsICAgLTUyLCAgIC0yNjAsICA0MjgsICAgLTQxMiwgIC0yNzIsICAtNDA0LCAx ODAsCisgICAgODE2LCAgIC03OTYsICA0OCwgICAgMTUyLCAgIDQ4NCwgICAtODgsICAgLTIxNiwg IDk4OCwgICA2OTYsICAgMTg4LCAgLTUyOCwKKyAgICA2NDgsICAgLTExNiwgIC0xODAsICAzMTYs ICAgNDc2LCAgIDEyLCAgICAtNTY0LCAgOTYsICAgIDQ3NiwgICAtMjUyLCAtMzY0LAorICAgIC0z NzYsICAtMzkyLCAgNTU2LCAgIC0yNTYsICAtNTc2LCAgMjYwLCAgIC0zNTIsICAxMjAsICAgLTE2 LCAgIC0xMzYsIC0yNjAsCisgICAgLTQ5MiwgIDcyLCAgICA1NTYsICAgNjYwLCAgIDU4MCwgICA2 MTYsICAgNzcyLCAgIDQzNiwgICA0MjQsICAgLTMyLCAgLTMyNCwKKyAgICAtMTI2OCwgNDE2LCAg IC0zMjQsICAtODAsICAgOTIwLCAgIDE2MCwgICAyMjgsICAgNzI0LCAgIDMyLCAgICAtNTE2LCA2 NCwKKyAgICAzODQsICAgNjgsICAgIC0xMjgsICAxMzYsICAgMjQwLCAgIDI0OCwgICAtMjA0LCAg LTY4LCAgIDI1MiwgICAtOTMyLCAtMTIwLAorICAgIC00ODAsICAtNjI4LCAgLTg0LCAgIDE5Miwg ICA4NTIsICAgLTQwNCwgIC0yODgsICAtMTMyLCAgMjA0LCAgIDEwMCwgIDE2OCwKKyAgICAtNjgs ICAgLTE5NiwgIC04NjgsICA0NjAsICAgMTA4MCwgIDM4MCwgICAtODAsICAgMjQ0LCAgIDAsICAg ICA0ODQsICAtODg4LAorICAgIDY0LCAgICAxODQsICAgMzUyLCAgIDYwMCwgICA0NjAsICAgMTY0 LCAgIDYwNCwgICAtMTk2LCAgMzIwLCAgIC02NCwgIDU4OCwKKyAgICAtMTg0LCAgMjI4LCAgIDEy LCAgICAzNzIsICAgNDgsICAgIC04NDgsICAtMzQ0LCAgMjI0LCAgIDIwOCwgICAtMjAwLCA0ODQs CisgICAgMTI4LCAgIC0yMCwgICAyNzIsICAgLTQ2OCwgIC04NDAsICAzODQsICAgMjU2LCAgIC03 MjAsICAtNTIwLCAgLTQ2NCwgLTU4MCwKKyAgICAxMTIsICAgLTEyMCwgIDY0NCwgICAtMzU2LCAg LTIwOCwgIC02MDgsICAtNTI4LCAgNzA0LCAgIDU2MCwgICAtNDI0LCAzOTIsCisgICAgODI4LCAg IDQwLCAgICA4NCwgICAgMjAwLCAgIC0xNTIsICAwLCAgICAgLTE0NCwgIDU4NCwgICAyODAsICAg LTEyMCwgODAsCisgICAgLTU1NiwgIC05NzIsICAtMTk2LCAgLTQ3MiwgIDcyNCwgICA4MCwgICAg MTY4LCAgIC0zMiwgICA4OCwgICAgMTYwLCAgLTY4OCwKKyAgICAwLCAgICAgMTYwLCAgIDM1Niwg ICAzNzIsICAgLTc3NiwgIDc0MCwgICAtMTI4LCAgNjc2LCAgIC0yNDgsICAtNDgwLCA0LAorICAg IC0zNjQsICA5NiwgICAgNTQ0LCAgIDIzMiwgICAtMTAzMiwgOTU2LCAgIDIzNiwgICAzNTYsICAg MjAsICAgIC00MCwgIDMwMCwKKyAgICAyNCwgICAgLTY3NiwgIC01OTYsICAxMzIsICAgMTEyMCwg IC0xMDQsICA1MzIsICAgLTEwOTYsIDU2OCwgICA2NDgsICA0NDQsCisgICAgNTA4LCAgIDM4MCwg ICAxODgsICAgLTM3NiwgIC02MDQsICAxNDg4LCAgNDI0LCAgIDI0LCAgICA3NTYsICAgLTIyMCwg LTE5MiwKKyAgICA3MTYsICAgMTIwLCAgIDkyMCwgICA2ODgsICAgMTY4LCAgIDQ0LCAgICAtNDYw LCAgNTY4LCAgIDI4NCwgICAxMTQ0LCAxMTYwLAorICAgIDYwMCwgICA0MjQsICAgODg4LCAgIDY1 NiwgICAtMzU2LCAgLTMyMCwgIDIyMCwgICAzMTYsICAgLTE3NiwgIC03MjQsIC0xODgsCisgICAg LTgxNiwgIC02MjgsICAtMzQ4LCAgLTIyOCwgIC0zODAsICAxMDEyLCAgLTQ1MiwgIC02NjAsICA3 MzYsICAgOTI4LCAgNDA0LAorICAgIC02OTYsICAtNzIsICAgLTI2OCwgIC04OTIsICAxMjgsICAg MTg0LCAgIC0zNDQsICAtNzgwLCAgMzYwLCAgIDMzNiwgIDQwMCwKKyAgICAzNDQsICAgNDI4LCAg IDU0OCwgICAtMTEyLCAgMTM2LCAgIC0yMjgsICAtMjE2LCAgLTgyMCwgIC01MTYsICAzNDAsICA5 MiwKKyAgICAtMTM2LCAgMTE2LCAgIC0zMDAsICAzNzYsICAgLTI0NCwgIDEwMCwgICAtMzE2LCAg LTUyMCwgIC0yODQsICAtMTIsICA4MjQsCisgICAgMTY0LCAgIC01NDgsICAtMTgwLCAgLTEyOCwg IDExNiwgICAtOTI0LCAgLTgyOCwgIDI2OCwgICAtMzY4LCAgLTU4MCwgNjIwLAorICAgIDE5Miwg ICAxNjAsICAgMCwgICAgIC0xNjc2LCAxMDY4LCAgNDI0LCAgIC01NiwgICAtMzYwLCAgNDY4LCAg IC0xNTYsIDcyMCwKKyAgICAyODgsICAgLTUyOCwgIDU1NiwgICAtMzY0LCAgNTQ4LCAgIC0xNDgs ICA1MDQsICAgMzE2LCAgIDE1MiwgICAtNjQ4LCAtNjIwLAorICAgIC02ODQsICAtMjQsICAgLTM3 NiwgIC0zODQsICAtMTA4LCAgLTkyMCwgIC0xMDMyLCA3NjgsICAgMTgwLCAgIC0yNjQsIC01MDgs CisgICAgLTEyNjgsIC0yNjAsICAtNjAsICAgMzAwLCAgIC0yNDAsICA5ODgsICAgNzI0LCAgIC0z NzYsICAtNTc2LCAgLTIxMiwgLTczNiwKKyAgICA1NTYsICAgMTkyLCAgIDEwOTIsICAtNjIwLCAg LTg4MCwgIDM3NiwgICAtNTYsICAgLTQsICAgIC0yMTYsICAtMzIsICA4MzYsCisgICAgMjY4LCAg IDM5NiwgICAxMzMyLCAgODY0LCAgIC02MDAsICAxMDAsICAgNTYsICAgIC00MTIsICAtOTIsICAg MzU2LCAgMTgwLAorICAgIDg4NCwgICAtNDY4LCAgLTQzNiwgIDI5MiwgICAtMzg4LCAgLTgwNCwg IC03MDQsICAtODQwLCAgMzY4LCAgIC0zNDgsIDE0MCwKKyAgICAtNzI0LCAgMTUzNiwgIDk0MCwg ICAzNzIsICAgMTEyLCAgIC0zNzIsICA0MzYsICAgLTQ4MCwgIDExMzYsICAyOTYsICAtMzIsCisg ICAgLTIyOCwgIDEzMiwgICAtNDgsICAgLTIyMCwgIDg2OCwgICAtMTAxNiwgLTYwLCAgIC0xMDQ0 LCAtNDY0LCAgMzI4LCAgOTE2LAorICAgIDI0NCwgICAxMiwgICAgLTczNiwgIC0yOTYsICAzNjAs ICAgNDY4LCAgIC0zNzYsICAtMTA4LCAgLTkyLCAgIDc4OCwgIDM2OCwKKyAgICAtNTYsICAgNTQ0 LCAgIDQwMCwgICAtNjcyLCAgLTQyMCwgIDcyOCwgICAxNiwgICAgMzIwLCAgIDQ0LCAgICAtMjg0 LCAtMzgwLAorICAgIC03OTYsICA0ODgsICAgMTMyLCAgIDIwNCwgICAtNTk2LCAgLTM3MiwgIDg4 LCAgICAtMTUyLCAgLTkwOCwgIC02MzYsIC01NzIsCisgICAgLTYyNCwgIC0xMTYsICAtNjkyLCAg LTIwMCwgIC01NiwgICAyNzYsICAgLTg4LCAgIDQ4NCwgICAtMzI0LCAgOTQ4LCAgODY0LAorICAg IDEwMDAsICAtNDU2LCAgLTE4NCwgIC0yNzYsICAyOTIsICAgLTI5NiwgIDE1NiwgICA2NzYsICAg MzIwLCAgIDE2MCwgIDkwOCwKKyAgICAtODQsICAgLTEyMzYsIC0yODgsICAtMTE2LCAgMjYwLCAg IC0zNzIsICAtNjQ0LCAgNzMyLCAgIC03NTYsICAtOTYsICA4NCwKKyAgICAzNDQsICAgLTUyMCwg IDM0OCwgICAtNjg4LCAgMjQwLCAgIC04NCwgICAyMTYsICAgLTEwNDQsIC0xMzYsICAtNjc2LCAt Mzk2LAorICAgIC0xNTAwLCA5NjAsICAgLTQwLCAgIDE3NiwgICAxNjgsICAgMTUxNiwgIDQyMCwg ICAtNTA0LCAgLTM0NCwgIC0zNjQsIC0zNjAsCisgICAgMTIxNiwgIC05NDAsICAtMzgwLCAgLTIx MiwgIDI1MiwgICAtNjYwLCAgLTcwOCwgIDQ4NCwgICAtNDQ0LCAgLTE1MiwgOTI4LAorICAgIC0x MjAsICAxMTEyLCAgNDc2LCAgIC0yNjAsICA1NjAsICAgLTE0OCwgIC0zNDQsICAxMDgsICAgLTE5 NiwgIDIyOCwgIC0yODgsCisgICAgNTA0LCAgIDU2MCwgICAtMzI4LCAgLTg4LCAgIDI4OCwgICAt MTAwOCwgNDYwLCAgIC0yMjgsICA0NjgsICAgLTgzNiwgLTE5NiwKKyAgICA3NiwgICAgMzg4LCAg IDIzMiwgICA0MTIsICAgLTExNjgsIC03MTYsICAtNjQ0LCAgNzU2LCAgIC0xNzIsICAtMzU2LCAt NTA0LAorICAgIDExNiwgICA0MzIsICAgNTI4LCAgIDQ4LCAgICA0NzYsICAgLTE2OCwgIC02MDgs ICA0NDgsICAgMTYwLCAgIC01MzIsIC0yNzIsCisgICAgMjgsICAgIC02NzYsICAtMTIsICAgODI4 LCAgIDk4MCwgICA0NTYsICAgNTIwLCAgIDEwNCwgICAtMTA0LCAgMjU2LCAgLTM0NCwKKyAgICAt NCwgICAgLTI4LCAgIC0zNjgsICAtNTIsICAgLTUyNCwgIC01NzIsICAtNTU2LCAgLTIwMCwgIDc2 OCwgICAxMTI0LCAtMjA4LAorICAgIC01MTIsICAxNzYsICAgMjMyLCAgIDI0OCwgICAtMTQ4LCAg LTg4OCwgIDYwNCwgICAtNjAwLCAgLTMwNCwgIDgwNCwgIC0xNTYsCisgICAgLTIxMiwgIDQ4OCwg ICAtMTkyLCAgLTgwNCwgIC0yNTYsICAzNjgsICAgLTM2MCwgIC05MTYsICAtMzI4LCAgMjI4LCAg LTI0MCwKKyAgICAtNDQ4LCAgLTQ3MiwgIDg1NiwgICAtNTU2LCAgLTM2NCwgIDU3MiwgICAtMTIs ICAgLTE1NiwgIC0zNjgsICAtMzQwLCA0MzIsCisgICAgMjUyLCAgIC03NTIsICAtMTUyLCAgMjg4 LCAgIDI2OCwgICAtNTgwLCAgLTg0OCwgIC01OTIsICAxMDgsICAgLTc2LCAgMjQ0LAorICAgIDMx MiwgICAtNzE2LCAgNTkyLCAgIC04MCwgICA0MzYsICAgMzYwLCAgIDQsICAgICAtMjQ4LCAgMTYw LCAgIDUxNiwgIDU4NCwKKyAgICA3MzIsICAgNDQsICAgIC00NjgsICAtMjgwLCAgLTI5MiwgIC0x NTYsICAtNTg4LCAgMjgsICAgIDMwOCwgICA5MTIsICAyNCwKKyAgICAxMjQsICAgMTU2LCAgIDE4 MCwgICAtMjUyLCAgOTQ0LCAgIC05MjQsICAtNzcyLCAgLTUyMCwgIC00MjgsICAtNjI0LCAzMDAs CisgICAgLTIxMiwgIC0xMTQ0LCAzMiwgICAgLTcyNCwgIDgwMCwgICAtMTEyOCwgLTIxMiwgIC0x Mjg4LCAtODQ4LCAgMTgwLCAgLTQxNiwKKyAgICA0NDAsICAgMTkyLCAgIC01NzYsICAtNzkyLCAg LTc2LCAgIC0xMDgwLCA4MCwgICAgLTUzMiwgIC0zNTIsICAtMTMyLCAzODAsCisgICAgLTgyMCwg IDE0OCwgICAxMTEyLCAgMTI4LCAgIDE2NCwgICA0NTYsICAgNzAwLCAgIC05MjQsICAxNDQsICAg LTY2OCwgLTM4NCwKKyAgICA2NDgsICAgLTgzMiwgIDUwOCwgICA1NTIsICAgLTUyLCAgIC0xMDAs ICAtNjU2LCAgMjA4LCAgIC01NjgsICA3NDgsICAtODgsCisgICAgNjgwLCAgIDIzMiwgICAzMDAs ICAgMTkyLCAgIC00MDgsICAtMTAxMiwgLTE1MiwgIC0yNTIsICAtMjY4LCAgMjcyLCAgLTg3NiwK KyAgICAtNjY0LCAgLTY0OCwgIC0zMzIsICAtMTM2LCAgMTYsICAgIDEyLCAgICAxMTUyLCAgLTI4 LCAgIDMzMiwgICAtNTM2LCAzMjAsCisgICAgLTY3MiwgIC00NjAsICAtMzE2LCAgNTMyLCAgIC0y NjAsICAyMjgsICAgLTQwLCAgIDEwNTIsICAtODE2LCAgMTgwLCAgODgsCisgICAgLTQ5NiwgIC01 NTYsICAtNjcyLCAgLTM2OCwgIDQyOCwgICA5MiwgICAgMzU2LCAgIDQwNCwgICAtNDA4LCAgMjUy LCAgMTk2LAorICAgIC0xNzYsICAtNTU2LCAgNzkyLCAgIDI2OCwgICAzMiwgICAgMzcyLCAgIDQw LCAgICA5NiwgICAgLTMzMiwgIDMyOCwgIDEyMCwKKyAgICAzNzIsICAgLTkwMCwgIC00MCwgICA0 NzIsICAgLTI2NCwgIC01OTIsICA5NTIsICAgMTI4LCAgIDY1NiwgICAxMTIsICA2NjQsCisgICAg LTIzMiwgIDQyMCwgICA0LCAgICAgLTM0NCwgIC00NjQsICA1NTYsICAgMjQ0LCAgIC00MTYsICAt MzIsICAgMjUyLCAgMCwKKyAgICAtNDEyLCAgMTg4LCAgIC02OTYsICA1MDgsICAgLTQ3NiwgIDMy NCwgICAtMTA5NiwgNjU2LCAgIC0zMTIsICA1NjAsICAyNjQsCisgICAgLTEzNiwgIDMwNCwgICAx NjAsICAgLTY0LCAgIC01ODAsICAyNDgsICAgMzM2LCAgIC03MjAsICA1NjAsICAgLTM0OCwgLTI4 OCwKKyAgICAtMjc2LCAgLTE5NiwgIC01MDAsICA4NTIsICAgLTU0NCwgIC0yMzYsICAtMTEyOCwg LTk5MiwgIC03NzYsICAxMTYsICA1NiwKKyAgICA1MiwgICAgODYwLCAgIDg4NCwgICAyMTIsICAg LTEyLCAgIDE2OCwgICAxMDIwLCAgNTEyLCAgIC01NTIsICA5MjQsICAtMTQ4LAorICAgIDcxNiwg ICAxODgsICAgMTY0LCAgIC0zNDAsICAtNTIwLCAgLTE4NCwgIDg4MCwgICAtMTUyLCAgLTY4MCwg IC0yMDgsIC0xMTU2LAorICAgIC0zMDAsICAtNTI4LCAgLTQ3MiwgIDM2NCwgICAxMDAsICAgLTc0 NCwgIC0xMDU2LCAtMzIsICAgNTQwLCAgIDI4MCwgIDE0NCwKKyAgICAtNjc2LCAgLTMyLCAgIC0y MzIsICAtMjgwLCAgLTIyNCwgIDk2LCAgICA1NjgsICAgLTc2LCAgIDE3MiwgICAxNDgsICAxNDgs CisgICAgMTA0LCAgIDMyLCAgICAtMjk2LCAgLTMyLCAgIDc4OCwgICAtODAsICAgMzIsICAgIC0x NiwgICAyODAsICAgMjg4LCAgOTQ0LAorICAgIDQyOCwgICAtNDg0Cit9OwpkaWZmIC0tZ2l0IGEv bGliYXZjb2RlYy9hb21fZmlsbV9ncmFpbi5oIGIvbGliYXZjb2RlYy9hb21fZmlsbV9ncmFpbi5o Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41ZDc3MmJkN2QxNwotLS0g L2Rldi9udWxsCisrKyBiL2xpYmF2Y29kZWMvYW9tX2ZpbG1fZ3JhaW4uaApAQCAtMCwwICsxLDM4 IEBACisvKgorICogQU9NIGZpbG0gZ3JhaW4gc3ludGhlc2lzCisgKiBDb3B5cmlnaHQgKGMpIDIw MjEgTmlrbGFzIEhhYXMgPGZmbXBlZ0BoYWFzbi54eXo+CisgKgorICogVGhpcyBmaWxlIGlzIHBh cnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhl IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog RkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRo IEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlv biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjEx MC0xMzAxIFVTQQorICovCisKKy8qKgorICogQGZpbGUKKyAqIEFPTSBmaWxtIGdyYWluIHN5bnRo ZXNpcy4KKyAqIEBhdXRob3IgTmlrbGFzIEhhYXMgPGZmbXBlZ0BoYWFzbi54eXo+CisgKi8KKwor I2lmbmRlZiBBVkNPREVDX0FPTV9GSUxNX0dSQUlOX0gKKyNkZWZpbmUgQVZDT0RFQ19BT01fRklM TV9HUkFJTl9ICisKKyNpbmNsdWRlICJsaWJhdnV0aWwvZmlsbV9ncmFpbl9wYXJhbXMuaCIKKwor Ly8gU3ludGhlc2l6ZXMgZmlsbSBncmFpbiBvbiB0b3Agb2YgYGluYCBhbmQgc3RvcmVzIHRoZSBy ZXN1bHQgdG8gYG91dGAuIGBvdXRgCisvLyBtdXN0IGFscmVhZHkgaGF2ZSBiZWVuIGFsbG9jYXRl ZCBhbmQgc2V0IHRvIHRoZSBzYW1lIHNpemUgYW5kIGZvcm1hdCBhcyBgaW5gLgoraW50IGZmX2Fv bV9hcHBseV9maWxtX2dyYWluKEFWRnJhbWUgKm91dCwgY29uc3QgQVZGcmFtZSAqaW4sCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQVZGaWxtR3JhaW5QYXJhbXMgKnBhcmFtcyk7 CisKKyNlbmRpZiAvKiBBVkNPREVDX0FPTV9GSUxNX0dSQUlOX0ggKi8KZGlmZiAtLWdpdCBhL2xp YmF2Y29kZWMvYW9tX2ZpbG1fZ3JhaW5fdGVtcGxhdGUuYyBiL2xpYmF2Y29kZWMvYW9tX2ZpbG1f Z3JhaW5fdGVtcGxhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u NTI0ZTQzOGI0NDQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmNvZGVjL2FvbV9maWxtX2dyYWlu X3RlbXBsYXRlLmMKQEAgLTAsMCArMSw1ODYgQEAKKy8qCisgKiBBT00gZmlsbSBncmFpbiBzeW50 aGVzaXMKKyAqIENvcHlyaWdodCAoYykgMjAyMyBOaWtsYXMgSGFhcyA8ZmZtcGVnQGhhYXNuLnh5 ej4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5 IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVz c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi bGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG cmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp ZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworLyoKKyAqIENvcHly aWdodCDCqSAyMDE4LCBOaWtsYXMgSGFhcworICogQ29weXJpZ2h0IMKpIDIwMTgsIFZpZGVvTEFO IGFuZCBkYXYxZCBhdXRob3JzCisgKiBDb3B5cmlnaHQgwqkgMjAxOCwgVHdvIE9yaW9sZXMsIExM QworICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u cyBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0 IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogMi4gUmVkaXN0 cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln aHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1h dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S UyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1Ig Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFE VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl ICJiaXRfZGVwdGhfdGVtcGxhdGUuYyIKKworI3VuZGVmIGVudHJ5CisjdW5kZWYgYml0ZGVwdGgK KyN1bmRlZiBiaXRkZXB0aF9tYXgKKyN1bmRlZiBIQkRfREVDTAorI3VuZGVmIEhCRF9DQUxMCisj dW5kZWYgU0NBTElOR19TSVpFCisKKyNpZiBCSVRfREVQVEggPiA4CisjIGRlZmluZSBlbnRyeSBp bnQxNl90CisjIGRlZmluZSBiaXRkZXB0aF9tYXggKCgxIDw8IGJpdGRlcHRoKSAtIDEpCisjIGRl ZmluZSBIQkRfREVDTCAsIGNvbnN0IGludCBiaXRkZXB0aAorIyBkZWZpbmUgSEJEX0NBTEwgLCBi aXRkZXB0aAorIyBkZWZpbmUgU0NBTElOR19TSVpFIDQwOTYKKyNlbHNlCisjIGRlZmluZSBlbnRy eSBpbnQ4X3QKKyMgZGVmaW5lIGJpdGRlcHRoIDgKKyMgZGVmaW5lIGJpdGRlcHRoX21heCBVSU5U OF9NQVgKKyMgZGVmaW5lIEhCRF9ERUNMCisjIGRlZmluZSBIQkRfQ0FMTAorIyBkZWZpbmUgU0NB TElOR19TSVpFIDI1NgorI2VuZGlmCisKKy8vIFN5bWJvbHMgdGhhdCBkbyBub3QgZGVwZW5kIG9u IGJpdCBkZXB0aAorI2lmbmRlZiBHUkFJTl9XSURUSAorIyBkZWZpbmUgR1JBSU5fV0lEVEggODIK KyMgZGVmaW5lIEdSQUlOX0hFSUdIVCA3MworIyBkZWZpbmUgU1VCX0dSQUlOX1dJRFRIIDQ0Cisj IGRlZmluZSBTVUJfR1JBSU5fSEVJR0hUIDM4CisjIGRlZmluZSBGR19CTE9DS19TSVpFIDMyCisj ZW5kaWYKKworc3RhdGljIHZvaWQgRlVOQyhnZW5lcmF0ZV9ncmFpbl95X2MpKGVudHJ5IGJ1Zltd W0dSQUlOX1dJRFRIXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBBVkZpbG1HcmFpblBhcmFtcyAqY29uc3QgcGFyYW1zCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgSEJEX0RFQ0wpCit7CisgICAgY29uc3QgQVZGaWxtR3JhaW5BT01QYXJh bXMgKmNvbnN0IGRhdGEgPSAmcGFyYW1zLT5jb2RlYy5hb207CisgICAgY29uc3QgaW50IGJpdGRl cHRoX21pbl84ID0gYml0ZGVwdGggLSA4OworICAgIHVuc2lnbmVkIHNlZWQgPSBwYXJhbXMtPnNl ZWQ7CisgICAgY29uc3QgaW50IHNoaWZ0ID0gNCAtIGJpdGRlcHRoX21pbl84ICsgZGF0YS0+Z3Jh aW5fc2NhbGVfc2hpZnQ7CisgICAgY29uc3QgaW50IGdyYWluX2N0ciA9IDEyOCA8PCBiaXRkZXB0 aF9taW5fODsKKyAgICBjb25zdCBpbnQgZ3JhaW5fbWluID0gLWdyYWluX2N0ciwgZ3JhaW5fbWF4 ID0gZ3JhaW5fY3RyIC0gMTsKKworICAgIGNvbnN0IGludCBhcl9wYWQgPSAzOworICAgIGNvbnN0 IGludCBhcl9sYWcgPSBkYXRhLT5hcl9jb2VmZl9sYWc7CisKKyAgICBmb3IgKGludCB5ID0gMDsg eSA8IEdSQUlOX0hFSUdIVDsgeSsrKSB7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgR1JB SU5fV0lEVEg7IHgrKykgeworICAgICAgICAgICAgY29uc3QgaW50IHZhbHVlID0gZ2V0X3JhbmRv bV9udW1iZXIoMTEsICZzZWVkKTsKKyAgICAgICAgICAgIGJ1Zlt5XVt4XSA9IHJvdW5kMihnYXVz c2lhbl9zZXF1ZW5jZVsgdmFsdWUgXSwgc2hpZnQpOworICAgICAgICB9CisgICAgfQorCisgICAg Zm9yIChpbnQgeSA9IGFyX3BhZDsgeSA8IEdSQUlOX0hFSUdIVDsgeSsrKSB7CisgICAgICAgIGZv ciAoaW50IHggPSBhcl9wYWQ7IHggPCBHUkFJTl9XSURUSCAtIGFyX3BhZDsgeCsrKSB7CisgICAg ICAgICAgICBjb25zdCBpbnQ4X3QgKmNvZWZmID0gZGF0YS0+YXJfY29lZmZzX3k7CisgICAgICAg ICAgICBpbnQgc3VtID0gMCwgZ3JhaW47CisgICAgICAgICAgICBmb3IgKGludCBkeSA9IC1hcl9s YWc7IGR5IDw9IDA7IGR5KyspIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBkeCA9IC1hcl9s YWc7IGR4IDw9IGFyX2xhZzsgZHgrKykgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWR4ICYm ICFkeSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg ICBzdW0gKz0gKihjb2VmZisrKSAqIGJ1Zlt5ICsgZHldW3ggKyBkeF07CisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBncmFpbiA9IGJ1Zlt5XVt4XSArIHJv dW5kMihzdW0sIGRhdGEtPmFyX2NvZWZmX3NoaWZ0KTsKKyAgICAgICAgICAgIGJ1Zlt5XVt4XSA9 IGF2X2NsaXAoZ3JhaW4sIGdyYWluX21pbiwgZ3JhaW5fbWF4KTsKKyAgICAgICAgfQorICAgIH0K K30KKworc3RhdGljIHZvaWQKK0ZVTkMoZ2VuZXJhdGVfZ3JhaW5fdXZfYykoZW50cnkgYnVmW11b R1JBSU5fV0lEVEhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbnRyeSBidWZf eVtdW0dSQUlOX1dJRFRIXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQVZGaWxt R3JhaW5QYXJhbXMgKmNvbnN0IHBhcmFtcywgY29uc3QgaW50cHRyX3QgdXYsCisgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IGludCBzdWJ4LCBjb25zdCBpbnQgc3VieSBIQkRfREVDTCkK K3sKKyAgICBjb25zdCBBVkZpbG1HcmFpbkFPTVBhcmFtcyAqY29uc3QgZGF0YSA9ICZwYXJhbXMt PmNvZGVjLmFvbTsKKyAgICBjb25zdCBpbnQgYml0ZGVwdGhfbWluXzggPSBiaXRkZXB0aCAtIDg7 CisgICAgdW5zaWduZWQgc2VlZCA9IHBhcmFtcy0+c2VlZCBeICh1diA/IDB4NDlkOCA6IDB4YjUy NCk7CisgICAgY29uc3QgaW50IHNoaWZ0ID0gNCAtIGJpdGRlcHRoX21pbl84ICsgZGF0YS0+Z3Jh aW5fc2NhbGVfc2hpZnQ7CisgICAgY29uc3QgaW50IGdyYWluX2N0ciA9IDEyOCA8PCBiaXRkZXB0 aF9taW5fODsKKyAgICBjb25zdCBpbnQgZ3JhaW5fbWluID0gLWdyYWluX2N0ciwgZ3JhaW5fbWF4 ID0gZ3JhaW5fY3RyIC0gMTsKKworICAgIGNvbnN0IGludCBjaHJvbWFXID0gc3VieCA/IFNVQl9H UkFJTl9XSURUSCAgOiBHUkFJTl9XSURUSDsKKyAgICBjb25zdCBpbnQgY2hyb21hSCA9IHN1Ynkg PyBTVUJfR1JBSU5fSEVJR0hUIDogR1JBSU5fSEVJR0hUOworCisgICAgY29uc3QgaW50IGFyX3Bh ZCA9IDM7CisgICAgY29uc3QgaW50IGFyX2xhZyA9IGRhdGEtPmFyX2NvZWZmX2xhZzsKKworICAg IGZvciAoaW50IHkgPSAwOyB5IDwgY2hyb21hSDsgeSsrKSB7CisgICAgICAgIGZvciAoaW50IHgg PSAwOyB4IDwgY2hyb21hVzsgeCsrKSB7CisgICAgICAgICAgICBjb25zdCBpbnQgdmFsdWUgPSBn ZXRfcmFuZG9tX251bWJlcigxMSwgJnNlZWQpOworICAgICAgICAgICAgYnVmW3ldW3hdID0gcm91 bmQyKGdhdXNzaWFuX3NlcXVlbmNlWyB2YWx1ZSBdLCBzaGlmdCk7CisgICAgICAgIH0KKyAgICB9 CisKKyAgICBmb3IgKGludCB5ID0gYXJfcGFkOyB5IDwgY2hyb21hSDsgeSsrKSB7CisgICAgICAg IGZvciAoaW50IHggPSBhcl9wYWQ7IHggPCBjaHJvbWFXIC0gYXJfcGFkOyB4KyspIHsKKyAgICAg ICAgICAgIGNvbnN0IGludDhfdCAqY29lZmYgPSBkYXRhLT5hcl9jb2VmZnNfdXZbdXZdOworICAg ICAgICAgICAgaW50IHN1bSA9IDAsIGdyYWluOworICAgICAgICAgICAgZm9yIChpbnQgZHkgPSAt YXJfbGFnOyBkeSA8PSAwOyBkeSsrKSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgZHggPSAt YXJfbGFnOyBkeCA8PSBhcl9sYWc7IGR4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRm9y IHRoZSBmaW5hbCAoY3VycmVudCkgcGl4ZWwsIHdlIG5lZWQgdG8gYWRkIGluIHRoZQorICAgICAg ICAgICAgICAgICAgICAvLyBjb250cmlidXRpb24gZnJvbSB0aGUgbHVtYSBncmFpbiB0ZXh0dXJl CisgICAgICAgICAgICAgICAgICAgIGlmICghZHggJiYgIWR5KSB7CisgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBpbnQgbHVtYVggPSAoKHggLSBhcl9wYWQpIDw8IHN1YngpICsgYXJfcGFk OworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGx1bWFZID0gKCh5IC0gYXJfcGFk KSA8PCBzdWJ5KSArIGFyX3BhZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBsdW1hID0g MDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGF0YS0+bnVtX3lfcG9pbnRzKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAg Zm9yIChpbnQgaSA9IDA7IGkgPD0gc3VieTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZm9yIChpbnQgaiA9IDA7IGogPD0gc3VieDsgaisrKSB7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGx1bWEgKz0gYnVmX3lbbHVtYVkgKyBpXVtsdW1hWCArIGpdOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICAgICAgICAgIGx1bWEgPSByb3VuZDIobHVtYSwgc3VieCArIHN1YnkpOwor ICAgICAgICAgICAgICAgICAgICAgICAgc3VtICs9IGx1bWEgKiAoKmNvZWZmKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg ICAgICAgICAgICAgc3VtICs9ICooY29lZmYrKykgKiBidWZbeSArIGR5XVt4ICsgZHhdOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ3JhaW4gPSBidWZb eV1beF0gKyByb3VuZDIoc3VtLCBkYXRhLT5hcl9jb2VmZl9zaGlmdCk7CisgICAgICAgICAgICBi dWZbeV1beF0gPSBhdl9jbGlwKGdyYWluLCBncmFpbl9taW4sIGdyYWluX21heCk7CisgICAgICAg IH0KKyAgICB9Cit9CisKKy8vIHNhbXBsZXMgZnJvbSB0aGUgY29ycmVjdCBibG9jayBvZiBhIGdy YWluIExVVCwgd2hpbGUgdGFraW5nIGludG8gYWNjb3VudCB0aGUKKy8vIG9mZnNldHMgcHJvdmlk ZWQgYnkgdGhlIG9mZnNldHMgY2FjaGUKK3N0YXRpYyBpbmxpbmUgZW50cnkgRlVOQyhzYW1wbGVf bHV0KShjb25zdCBlbnRyeSBncmFpbl9sdXRbXVtHUkFJTl9XSURUSF0sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IG9mZnNldHNbMl1bMl0sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHN1YngsIGNvbnN0IGludCBz dWJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBieCwg Y29uc3QgaW50IGJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGludCB4LCBjb25zdCBpbnQgeSkKK3sKKyAgICBjb25zdCBpbnQgcmFuZHZhbCA9IG9mZnNldHNb YnhdW2J5XTsKKyAgICBjb25zdCBpbnQgb2ZmeCA9IDMgKyAoMiA+PiBzdWJ4KSAqICgzICsgKHJh bmR2YWwgPj4gNCkpOworICAgIGNvbnN0IGludCBvZmZ5ID0gMyArICgyID4+IHN1YnkpICogKDMg KyAocmFuZHZhbCAmIDB4RikpOworICAgIHJldHVybiBncmFpbl9sdXRbb2ZmeSArIHkgKyAoRkdf QkxPQ0tfU0laRSA+PiBzdWJ5KSAqIGJ5XQorICAgICAgICAgICAgICAgICAgICBbb2ZmeCArIHgg KyAoRkdfQkxPQ0tfU0laRSA+PiBzdWJ4KSAqIGJ4XTsKK30KKworc3RhdGljIHZvaWQgRlVOQyhm Z3lfMzJ4MzJ4bl9jKShwaXhlbCAqY29uc3QgZHN0X3JvdywgY29uc3QgcGl4ZWwgKmNvbnN0IHNy Y19yb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHB0cmRpZmZfdCBz dHJpZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFWRmlsbUdyYWlu UGFyYW1zICpjb25zdCBwYXJhbXMsIGNvbnN0IHNpemVfdCBwdywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBzY2FsaW5nW1NDQUxJTkdfU0laRV0sCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVudHJ5IGdyYWluX2x1dFtdW0dSQUlO X1dJRFRIXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGJoLCBj b25zdCBpbnQgcm93X251bSBIQkRfREVDTCkKK3sKKyAgICBjb25zdCBBVkZpbG1HcmFpbkFPTVBh cmFtcyAqY29uc3QgZGF0YSA9ICZwYXJhbXMtPmNvZGVjLmFvbTsKKyAgICBjb25zdCBpbnQgcm93 cyA9IDEgKyAoZGF0YS0+b3ZlcmxhcF9mbGFnICYmIHJvd19udW0gPiAwKTsKKyAgICBjb25zdCBp bnQgYml0ZGVwdGhfbWluXzggPSBiaXRkZXB0aCAtIDg7CisgICAgY29uc3QgaW50IGdyYWluX2N0 ciA9IDEyOCA8PCBiaXRkZXB0aF9taW5fODsKKyAgICBjb25zdCBpbnQgZ3JhaW5fbWluID0gLWdy YWluX2N0ciwgZ3JhaW5fbWF4ID0gZ3JhaW5fY3RyIC0gMTsKKyAgICB1bnNpZ25lZCBzZWVkWzJd OworICAgIGludCBvZmZzZXRzWzIgLyogY29sIG9mZnNldCAqL11bMiAvKiByb3cgb2Zmc2V0ICov XTsKKworICAgIGludCBtaW5fdmFsdWUsIG1heF92YWx1ZTsKKyAgICBpZiAoZGF0YS0+bGltaXRf b3V0cHV0X3JhbmdlKSB7CisgICAgICAgIG1pbl92YWx1ZSA9IDE2IDw8IGJpdGRlcHRoX21pbl84 OworICAgICAgICBtYXhfdmFsdWUgPSAyMzUgPDwgYml0ZGVwdGhfbWluXzg7CisgICAgfSBlbHNl IHsKKyAgICAgICAgbWluX3ZhbHVlID0gMDsKKyAgICAgICAgbWF4X3ZhbHVlID0gYml0ZGVwdGhf bWF4OworICAgIH0KKworICAgIC8vIHNlZWRbMF0gY29udGFpbnMgdGhlIGN1cnJlbnQgcm93LCBz ZWVkWzFdIGNvbnRhaW5zIHRoZSBwcmV2aW91cworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93 czsgaSsrKSB7CisgICAgICAgIHNlZWRbaV0gPSBwYXJhbXMtPnNlZWQ7CisgICAgICAgIHNlZWRb aV0gXj0gKCgocm93X251bSAtIGkpICogMzcgICsgMTc4KSAmIDB4RkYpIDw8IDg7CisgICAgICAg IHNlZWRbaV0gXj0gKCgocm93X251bSAtIGkpICogMTczICsgMTA1KSAmIDB4RkYpOworICAgIH0K KworICAgIGF2X2Fzc2VydDEoc3RyaWRlICUgKEZHX0JMT0NLX1NJWkUgKiBzaXplb2YocGl4ZWwp KSA9PSAwKTsKKworICAgIC8vIHByb2Nlc3MgdGhpcyByb3cgaW4gRkdfQkxPQ0tfU0laRV4yIGJs b2NrcworICAgIGZvciAodW5zaWduZWQgYnggPSAwOyBieCA8IHB3OyBieCArPSBGR19CTE9DS19T SVpFKSB7CisgICAgICAgIGNvbnN0IGludCBidyA9IEZGTUlOKEZHX0JMT0NLX1NJWkUsIChpbnQp IHB3IC0gYngpOworICAgICAgICBjb25zdCBwaXhlbCAqc3JjOworICAgICAgICBwaXhlbCAqZHN0 OworICAgICAgICBpbnQgbm9pc2U7CisKKyAgICAgICAgLy8geC95IGJsb2NrIG9mZnNldHMgdG8g Y29tcGVuc2F0ZSBmb3Igb3ZlcmxhcHBlZCByZWdpb25zCisgICAgICAgIGNvbnN0IGludCB5c3Rh cnQgPSBkYXRhLT5vdmVybGFwX2ZsYWcgJiYgcm93X251bSA/IEZGTUlOKDIsIGJoKSA6IDA7Cisg ICAgICAgIGNvbnN0IGludCB4c3RhcnQgPSBkYXRhLT5vdmVybGFwX2ZsYWcgJiYgYnggICAgICA/ IEZGTUlOKDIsIGJ3KSA6IDA7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCB3WzJdWzJdID0g eyB7IDI3LCAxNyB9LCB7IDE3LCAyNyB9IH07CisKKyAgICAgICAgaWYgKGRhdGEtPm92ZXJsYXBf ZmxhZyAmJiBieCkgeworICAgICAgICAgICAgLy8gc2hpZnQgcHJldmlvdXMgb2Zmc2V0cyBsZWZ0 CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd3M7IGkrKykKKyAgICAgICAgICAg ICAgICBvZmZzZXRzWzFdW2ldID0gb2Zmc2V0c1swXVtpXTsKKyAgICAgICAgfQorCisgICAgICAg IC8vIHVwZGF0ZSBjdXJyZW50IG9mZnNldHMKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBy b3dzOyBpKyspCisgICAgICAgICAgICBvZmZzZXRzWzBdW2ldID0gZ2V0X3JhbmRvbV9udW1iZXIo OCwgJnNlZWRbaV0pOworCisjZGVmaW5lIGFkZF9ub2lzZV95KHgsIHksIGdyYWluKSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc3JjID0g KGNvbnN0IHBpeGVsKikoKGNvbnN0IGNoYXIqKXNyY19yb3cgKyAoeSkgKiBzdHJpZGUpICsgKHgp ICsgYng7ICAgXAorICAgICAgICBkc3QgPSAocGl4ZWwqKSgoY2hhciopZHN0X3JvdyArICh5KSAq IHN0cmlkZSkgKyAoeCkgKyBieDsgICAgICAgICAgICAgICBcCisgICAgICAgIG5vaXNlID0gcm91 bmQyKHNjYWxpbmdbICpzcmMgXSAqIChncmFpbiksIGRhdGEtPnNjYWxpbmdfc2hpZnQpOyAgICAg ICAgIFwKKyAgICAgICAgKmRzdCA9IGF2X2NsaXAoKnNyYyArIG5vaXNlLCBtaW5fdmFsdWUsIG1h eF92YWx1ZSk7CisKKyAgICAgICAgZm9yIChpbnQgeSA9IHlzdGFydDsgeSA8IGJoOyB5KyspIHsK KyAgICAgICAgICAgIC8vIE5vbi1vdmVybGFwcGVkIGltYWdlIHJlZ2lvbiAoc3RyYWlnaHRmb3J3 YXJkKQorICAgICAgICAgICAgZm9yIChpbnQgeCA9IHhzdGFydDsgeCA8IGJ3OyB4KyspIHsKKyAg ICAgICAgICAgICAgICBpbnQgZ3JhaW4gPSBGVU5DKHNhbXBsZV9sdXQpKGdyYWluX2x1dCwgb2Zm c2V0cywgMCwgMCwgMCwgMCwgeCwgeSk7CisgICAgICAgICAgICAgICAgYWRkX25vaXNlX3koeCwg eSwgZ3JhaW4pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTcGVjaWFsIGNhc2Ug Zm9yIG92ZXJsYXBwZWQgY29sdW1uCisgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHhz dGFydDsgeCsrKSB7CisgICAgICAgICAgICAgICAgaW50IGdyYWluID0gRlVOQyhzYW1wbGVfbHV0 KShncmFpbl9sdXQsIG9mZnNldHMsIDAsIDAsIDAsIDAsIHgsIHkpOworICAgICAgICAgICAgICAg IGludCBvbGQgICA9IEZVTkMoc2FtcGxlX2x1dCkoZ3JhaW5fbHV0LCBvZmZzZXRzLCAwLCAwLCAx LCAwLCB4LCB5KTsKKyAgICAgICAgICAgICAgICBncmFpbiA9IHJvdW5kMihvbGQgKiB3W3hdWzBd ICsgZ3JhaW4gKiB3W3hdWzFdLCA1KTsKKyAgICAgICAgICAgICAgICBncmFpbiA9IGF2X2NsaXAo Z3JhaW4sIGdyYWluX21pbiwgZ3JhaW5fbWF4KTsKKyAgICAgICAgICAgICAgICBhZGRfbm9pc2Vf eSh4LCB5LCBncmFpbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmb3Ig KGludCB5ID0gMDsgeSA8IHlzdGFydDsgeSsrKSB7CisgICAgICAgICAgICAvLyBTcGVjaWFsIGNh c2UgZm9yIG92ZXJsYXBwZWQgcm93IChzYW5zIGNvcm5lcikKKyAgICAgICAgICAgIGZvciAoaW50 IHggPSB4c3RhcnQ7IHggPCBidzsgeCsrKSB7CisgICAgICAgICAgICAgICAgaW50IGdyYWluID0g RlVOQyhzYW1wbGVfbHV0KShncmFpbl9sdXQsIG9mZnNldHMsIDAsIDAsIDAsIDAsIHgsIHkpOwor ICAgICAgICAgICAgICAgIGludCBvbGQgICA9IEZVTkMoc2FtcGxlX2x1dCkoZ3JhaW5fbHV0LCBv ZmZzZXRzLCAwLCAwLCAwLCAxLCB4LCB5KTsKKyAgICAgICAgICAgICAgICBncmFpbiA9IHJvdW5k MihvbGQgKiB3W3ldWzBdICsgZ3JhaW4gKiB3W3ldWzFdLCA1KTsKKyAgICAgICAgICAgICAgICBn cmFpbiA9IGF2X2NsaXAoZ3JhaW4sIGdyYWluX21pbiwgZ3JhaW5fbWF4KTsKKyAgICAgICAgICAg ICAgICBhZGRfbm9pc2VfeSh4LCB5LCBncmFpbik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg ICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgZG91Ymx5LW92ZXJsYXBwZWQgY29ybmVyCisgICAgICAg ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHhzdGFydDsgeCsrKSB7CisgICAgICAgICAgICAgICAg aW50IGdyYWluID0gRlVOQyhzYW1wbGVfbHV0KShncmFpbl9sdXQsIG9mZnNldHMsIDAsIDAsIDAs IDAsIHgsIHkpOworICAgICAgICAgICAgICAgIGludCB0b3AgPSBGVU5DKHNhbXBsZV9sdXQpKGdy YWluX2x1dCwgb2Zmc2V0cywgMCwgMCwgMCwgMSwgeCwgeSk7CisgICAgICAgICAgICAgICAgaW50 IG9sZCA9IEZVTkMoc2FtcGxlX2x1dCkoZ3JhaW5fbHV0LCBvZmZzZXRzLCAwLCAwLCAxLCAxLCB4 LCB5KTsKKworICAgICAgICAgICAgICAgIC8vIEJsZW5kIHRoZSB0b3AgcGl4ZWwgd2l0aCB0aGUg dG9wIGxlZnQgYmxvY2sKKyAgICAgICAgICAgICAgICB0b3AgPSByb3VuZDIob2xkICogd1t4XVsw XSArIHRvcCAqIHdbeF1bMV0sIDUpOworICAgICAgICAgICAgICAgIHRvcCA9IGF2X2NsaXAodG9w LCBncmFpbl9taW4sIGdyYWluX21heCk7CisKKyAgICAgICAgICAgICAgICAvLyBCbGVuZCB0aGUg Y3VycmVudCBwaXhlbCB3aXRoIHRoZSBsZWZ0IGJsb2NrCisgICAgICAgICAgICAgICAgb2xkID0g RlVOQyhzYW1wbGVfbHV0KShncmFpbl9sdXQsIG9mZnNldHMsIDAsIDAsIDEsIDAsIHgsIHkpOwor ICAgICAgICAgICAgICAgIGdyYWluID0gcm91bmQyKG9sZCAqIHdbeF1bMF0gKyBncmFpbiAqIHdb eF1bMV0sIDUpOworICAgICAgICAgICAgICAgIGdyYWluID0gYXZfY2xpcChncmFpbiwgZ3JhaW5f bWluLCBncmFpbl9tYXgpOworCisgICAgICAgICAgICAgICAgLy8gTWl4IHRoZSByb3cgcm93cyB0 b2dldGhlciBhbmQgYXBwbHkgZ3JhaW4KKyAgICAgICAgICAgICAgICBncmFpbiA9IHJvdW5kMih0 b3AgKiB3W3ldWzBdICsgZ3JhaW4gKiB3W3ldWzFdLCA1KTsKKyAgICAgICAgICAgICAgICBncmFp biA9IGF2X2NsaXAoZ3JhaW4sIGdyYWluX21pbiwgZ3JhaW5fbWF4KTsKKyAgICAgICAgICAgICAg ICBhZGRfbm9pc2VfeSh4LCB5LCBncmFpbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg ICB9Cit9CisKK3N0YXRpYyB2b2lkCitGVU5DKGZndXZfMzJ4MzJ4bl9jKShwaXhlbCAqY29uc3Qg ZHN0X3JvdywgY29uc3QgcGl4ZWwgKmNvbnN0IHNyY19yb3csCisgICAgICAgICAgICAgICAgICAg ICBjb25zdCBwdHJkaWZmX3Qgc3RyaWRlLCBjb25zdCBBVkZpbG1HcmFpblBhcmFtcyAqY29uc3Qg cGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHB3LCBjb25zdCB1aW50 OF90IHNjYWxpbmdbU0NBTElOR19TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVu dHJ5IGdyYWluX2x1dFtdW0dSQUlOX1dJRFRIXSwgY29uc3QgaW50IGJoLAorICAgICAgICAgICAg ICAgICAgICAgY29uc3QgaW50IHJvd19udW0sIGNvbnN0IHBpeGVsICpjb25zdCBsdW1hX3JvdywK KyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHB0cmRpZmZfdCBsdW1hX3N0cmlkZSwgY29uc3Qg aW50IHV2LCBjb25zdCBpbnQgaXNfaWQsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQg c3gsIGNvbnN0IGludCBzeSBIQkRfREVDTCkKK3sKKyAgICBjb25zdCBBVkZpbG1HcmFpbkFPTVBh cmFtcyAqY29uc3QgZGF0YSA9ICZwYXJhbXMtPmNvZGVjLmFvbTsKKyAgICBjb25zdCBpbnQgcm93 cyA9IDEgKyAoZGF0YS0+b3ZlcmxhcF9mbGFnICYmIHJvd19udW0gPiAwKTsKKyAgICBjb25zdCBp bnQgYml0ZGVwdGhfbWluXzggPSBiaXRkZXB0aCAtIDg7CisgICAgY29uc3QgaW50IGdyYWluX2N0 ciA9IDEyOCA8PCBiaXRkZXB0aF9taW5fODsKKyAgICBjb25zdCBpbnQgZ3JhaW5fbWluID0gLWdy YWluX2N0ciwgZ3JhaW5fbWF4ID0gZ3JhaW5fY3RyIC0gMTsKKyAgICB1bnNpZ25lZCBzZWVkWzJd OworICAgIGludCBvZmZzZXRzWzIgLyogY29sIG9mZnNldCAqL11bMiAvKiByb3cgb2Zmc2V0ICov XTsKKworICAgIGludCBtaW5fdmFsdWUsIG1heF92YWx1ZTsKKyAgICBpZiAoZGF0YS0+bGltaXRf b3V0cHV0X3JhbmdlKSB7CisgICAgICAgIG1pbl92YWx1ZSA9IDE2IDw8IGJpdGRlcHRoX21pbl84 OworICAgICAgICBtYXhfdmFsdWUgPSAoaXNfaWQgPyAyMzUgOiAyNDApIDw8IGJpdGRlcHRoX21p bl84OworICAgIH0gZWxzZSB7CisgICAgICAgIG1pbl92YWx1ZSA9IDA7CisgICAgICAgIG1heF92 YWx1ZSA9IGJpdGRlcHRoX21heDsKKyAgICB9CisKKyAgICAvLyBzZWVkWzBdIGNvbnRhaW5zIHRo ZSBjdXJyZW50IHJvdywgc2VlZFsxXSBjb250YWlucyB0aGUgcHJldmlvdXMKKyAgICBmb3IgKGlu dCBpID0gMDsgaSA8IHJvd3M7IGkrKykgeworICAgICAgICBzZWVkW2ldID0gcGFyYW1zLT5zZWVk OworICAgICAgICBzZWVkW2ldIF49ICgoKHJvd19udW0gLSBpKSAqIDM3ICArIDE3OCkgJiAweEZG KSA8PCA4OworICAgICAgICBzZWVkW2ldIF49ICgoKHJvd19udW0gLSBpKSAqIDE3MyArIDEwNSkg JiAweEZGKTsKKyAgICB9CisKKyAgICBhdl9hc3NlcnQxKHN0cmlkZSAlIChGR19CTE9DS19TSVpF ICogc2l6ZW9mKHBpeGVsKSkgPT0gMCk7CisKKyAgICAvLyBwcm9jZXNzIHRoaXMgcm93IGluIEZH X0JMT0NLX1NJWkVeMiBibG9ja3MgKHN1YnNhbXBsZWQpCisgICAgZm9yICh1bnNpZ25lZCBieCA9 IDA7IGJ4IDwgcHc7IGJ4ICs9IEZHX0JMT0NLX1NJWkUgPj4gc3gpIHsKKyAgICAgICAgY29uc3Qg aW50IGJ3ID0gRkZNSU4oRkdfQkxPQ0tfU0laRSA+PiBzeCwgKGludCkocHcgLSBieCkpOworICAg ICAgICBpbnQgdmFsLCBseCwgbHksIG5vaXNlOworICAgICAgICBjb25zdCBwaXhlbCAqc3JjLCAq bHVtYTsKKyAgICAgICAgcGl4ZWwgKmRzdCwgYXZnOworCisgICAgICAgIC8vIHgveSBibG9jayBv ZmZzZXRzIHRvIGNvbXBlbnNhdGUgZm9yIG92ZXJsYXBwZWQgcmVnaW9ucworICAgICAgICBjb25z dCBpbnQgeXN0YXJ0ID0gZGF0YS0+b3ZlcmxhcF9mbGFnICYmIHJvd19udW0gPyBGRk1JTigyID4+ IHN5LCBiaCkgOiAwOworICAgICAgICBjb25zdCBpbnQgeHN0YXJ0ID0gZGF0YS0+b3ZlcmxhcF9m bGFnICYmIGJ4ICAgICAgPyBGRk1JTigyID4+IHN4LCBidykgOiAwOworCisgICAgICAgIHN0YXRp YyBjb25zdCBpbnQgd1syIC8qIHN1YiAqL11bMiAvKiBvZmYgKi9dWzJdID0geworICAgICAgICAg ICAgeyB7IDI3LCAxNyB9LCB7IDE3LCAyNyB9IH0sCisgICAgICAgICAgICB7IHsgMjMsIDIyIH0g fSwKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoZGF0YS0+b3ZlcmxhcF9mbGFnICYmIGJ4KSB7 CisgICAgICAgICAgICAvLyBzaGlmdCBwcmV2aW91cyBvZmZzZXRzIGxlZnQKKyAgICAgICAgICAg IGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsgaSsrKQorICAgICAgICAgICAgICAgIG9mZnNldHNb MV1baV0gPSBvZmZzZXRzWzBdW2ldOworICAgICAgICB9CisKKyAgICAgICAgLy8gdXBkYXRlIGN1 cnJlbnQgb2Zmc2V0cworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd3M7IGkrKykKKyAg ICAgICAgICAgIG9mZnNldHNbMF1baV0gPSBnZXRfcmFuZG9tX251bWJlcig4LCAmc2VlZFtpXSk7 CisKKyNkZWZpbmUgYWRkX25vaXNlX3V2KHgsIHksIGdyYWluKSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgbHggPSAoYnggKyB4KSA8 PCBzeDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg ICAgICAgICAgICBseSA9IHkgPDwgc3k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGx1bWEgPSAoY29uc3QgcGl4ZWwq KSgoY29uc3QgY2hhciopbHVtYV9yb3cgKyBseSAqIGx1bWFfc3RyaWRlKSArIGx4O1wKKyAgICAg ICAgICAgIGF2ZyA9IGx1bWFbMF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKHN4KSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAg ICAgICAgYXZnID0gKGF2ZyArIGx1bWFbMV0gKyAxKSA+PiAxOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHNyYyA9IChjb25zdCBwaXhlbCopKChjb25zdCBj aGFyICopc3JjX3JvdyArICh5KSAqIHN0cmlkZSkgKyBieCArICh4KTtcCisgICAgICAgICAgICBk c3QgPSAocGl4ZWwgKikgKChjaGFyICopIGRzdF9yb3cgKyAoeSkgKiBzdHJpZGUpICsgYnggKyAo eCk7ICAgICAgIFwKKyAgICAgICAgICAgIHZhbCA9IGF2ZzsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCFk YXRhLT5jaHJvbWFfc2NhbGluZ19mcm9tX2x1bWEpIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisgICAgICAgICAgICAgICAgY29uc3QgaW50IGNvbWJpbmVkID0gYXZnICogZGF0YS0+ dXZfbXVsdF9sdW1hW3V2XSArICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICpzcmMgKiBkYXRhLT51dl9tdWx0W3V2XTsgICAgICAgICAgICAgICAgICAg XAorICAgICAgICAgICAgICAgIHZhbCA9IGF2X2NsaXAoIChjb21iaW5lZCA+PiA2KSArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGRhdGEtPnV2X29mZnNldFt1dl0gKiAoMSA8PCBiaXRkZXB0aF9taW5fOCkpLCAgIFwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBiaXRkZXB0aF9tYXggKTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg ICAgICBub2lzZSA9IHJvdW5kMihzY2FsaW5nWyB2YWwgXSAqIChncmFpbiksIGRhdGEtPnNjYWxp bmdfc2hpZnQpOyAgICAgIFwKKyAgICAgICAgICAgICpkc3QgPSBhdl9jbGlwKCpzcmMgKyBub2lz ZSwgbWluX3ZhbHVlLCBtYXhfdmFsdWUpOworCisgICAgICAgIGZvciAoaW50IHkgPSB5c3RhcnQ7 IHkgPCBiaDsgeSsrKSB7CisgICAgICAgICAgICAvLyBOb24tb3ZlcmxhcHBlZCBpbWFnZSByZWdp b24gKHN0cmFpZ2h0Zm9yd2FyZCkKKyAgICAgICAgICAgIGZvciAoaW50IHggPSB4c3RhcnQ7IHgg PCBidzsgeCsrKSB7CisgICAgICAgICAgICAgICAgaW50IGdyYWluID0gRlVOQyhzYW1wbGVfbHV0 KShncmFpbl9sdXQsIG9mZnNldHMsIHN4LCBzeSwgMCwgMCwgeCwgeSk7CisgICAgICAgICAgICAg ICAgYWRkX25vaXNlX3V2KHgsIHksIGdyYWluKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg ICAgLy8gU3BlY2lhbCBjYXNlIGZvciBvdmVybGFwcGVkIGNvbHVtbgorICAgICAgICAgICAgZm9y IChpbnQgeCA9IDA7IHggPCB4c3RhcnQ7IHgrKykgeworICAgICAgICAgICAgICAgIGludCBncmFp biA9IEZVTkMoc2FtcGxlX2x1dCkoZ3JhaW5fbHV0LCBvZmZzZXRzLCBzeCwgc3ksIDAsIDAsIHgs IHkpOworICAgICAgICAgICAgICAgIGludCBvbGQgICA9IEZVTkMoc2FtcGxlX2x1dCkoZ3JhaW5f bHV0LCBvZmZzZXRzLCBzeCwgc3ksIDEsIDAsIHgsIHkpOworICAgICAgICAgICAgICAgIGdyYWlu ID0gcm91bmQyKG9sZCAqIHdbc3hdW3hdWzBdICsgZ3JhaW4gKiB3W3N4XVt4XVsxXSwgNSk7Cisg ICAgICAgICAgICAgICAgZ3JhaW4gPSBhdl9jbGlwKGdyYWluLCBncmFpbl9taW4sIGdyYWluX21h eCk7CisgICAgICAgICAgICAgICAgYWRkX25vaXNlX3V2KHgsIHksIGdyYWluKTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgeXN0YXJ0OyB5 KyspIHsKKyAgICAgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBmb3Igb3ZlcmxhcHBlZCByb3cgKHNh bnMgY29ybmVyKQorICAgICAgICAgICAgZm9yIChpbnQgeCA9IHhzdGFydDsgeCA8IGJ3OyB4Kysp IHsKKyAgICAgICAgICAgICAgICBpbnQgZ3JhaW4gPSBGVU5DKHNhbXBsZV9sdXQpKGdyYWluX2x1 dCwgb2Zmc2V0cywgc3gsIHN5LCAwLCAwLCB4LCB5KTsKKyAgICAgICAgICAgICAgICBpbnQgb2xk ICAgPSBGVU5DKHNhbXBsZV9sdXQpKGdyYWluX2x1dCwgb2Zmc2V0cywgc3gsIHN5LCAwLCAxLCB4 LCB5KTsKKyAgICAgICAgICAgICAgICBncmFpbiA9IHJvdW5kMihvbGQgKiB3W3N5XVt5XVswXSAr IGdyYWluICogd1tzeV1beV1bMV0sIDUpOworICAgICAgICAgICAgICAgIGdyYWluID0gYXZfY2xp cChncmFpbiwgZ3JhaW5fbWluLCBncmFpbl9tYXgpOworICAgICAgICAgICAgICAgIGFkZF9ub2lz ZV91dih4LCB5LCBncmFpbik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFNwZWNp YWwgY2FzZSBmb3IgZG91Ymx5LW92ZXJsYXBwZWQgY29ybmVyCisgICAgICAgICAgICBmb3IgKGlu dCB4ID0gMDsgeCA8IHhzdGFydDsgeCsrKSB7CisgICAgICAgICAgICAgICAgaW50IHRvcCA9IEZV TkMoc2FtcGxlX2x1dCkoZ3JhaW5fbHV0LCBvZmZzZXRzLCBzeCwgc3ksIDAsIDEsIHgsIHkpOwor ICAgICAgICAgICAgICAgIGludCBvbGQgPSBGVU5DKHNhbXBsZV9sdXQpKGdyYWluX2x1dCwgb2Zm c2V0cywgc3gsIHN5LCAxLCAxLCB4LCB5KTsKKyAgICAgICAgICAgICAgICBpbnQgZ3JhaW4gPSBG VU5DKHNhbXBsZV9sdXQpKGdyYWluX2x1dCwgb2Zmc2V0cywgc3gsIHN5LCAwLCAwLCB4LCB5KTsK KworICAgICAgICAgICAgICAgIC8vIEJsZW5kIHRoZSB0b3AgcGl4ZWwgd2l0aCB0aGUgdG9wIGxl ZnQgYmxvY2sKKyAgICAgICAgICAgICAgICB0b3AgPSByb3VuZDIob2xkICogd1tzeF1beF1bMF0g KyB0b3AgKiB3W3N4XVt4XVsxXSwgNSk7CisgICAgICAgICAgICAgICAgdG9wID0gYXZfY2xpcCh0 b3AsIGdyYWluX21pbiwgZ3JhaW5fbWF4KTsKKworICAgICAgICAgICAgICAgIC8vIEJsZW5kIHRo ZSBjdXJyZW50IHBpeGVsIHdpdGggdGhlIGxlZnQgYmxvY2sKKyAgICAgICAgICAgICAgICBvbGQg PSBGVU5DKHNhbXBsZV9sdXQpKGdyYWluX2x1dCwgb2Zmc2V0cywgc3gsIHN5LCAxLCAwLCB4LCB5 KTsKKyAgICAgICAgICAgICAgICBncmFpbiA9IHJvdW5kMihvbGQgKiB3W3N4XVt4XVswXSArIGdy YWluICogd1tzeF1beF1bMV0sIDUpOworICAgICAgICAgICAgICAgIGdyYWluID0gYXZfY2xpcChn cmFpbiwgZ3JhaW5fbWluLCBncmFpbl9tYXgpOworCisgICAgICAgICAgICAgICAgLy8gTWl4IHRo ZSByb3cgcm93cyB0b2dldGhlciBhbmQgYXBwbHkgdG8gaW1hZ2UKKyAgICAgICAgICAgICAgICBn cmFpbiA9IHJvdW5kMih0b3AgKiB3W3N5XVt5XVswXSArIGdyYWluICogd1tzeV1beV1bMV0sIDUp OworICAgICAgICAgICAgICAgIGdyYWluID0gYXZfY2xpcChncmFpbiwgZ3JhaW5fbWluLCBncmFp bl9tYXgpOworICAgICAgICAgICAgICAgIGFkZF9ub2lzZV91dih4LCB5LCBncmFpbik7CisgICAg ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIEZVTkMoZ2VuZXJh dGVfc2NhbGluZykoY29uc3QgdWludDhfdCBwb2ludHNbXVsyXSwgY29uc3QgaW50IG51bSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBzY2FsaW5nW1NDQUxJTkdf U0laRV0gSEJEX0RFQ0wpCit7CisgICAgY29uc3QgaW50IHNoaWZ0X3ggPSBiaXRkZXB0aCAtIDg7 CisgICAgY29uc3QgaW50IHNjYWxpbmdfc2l6ZSA9IDEgPDwgYml0ZGVwdGg7CisgICAgY29uc3Qg aW50IG1heF92YWx1ZSA9IHBvaW50c1tudW0gLSAxXVswXSA8PCBzaGlmdF94OworICAgIGF2X2Fz c2VydDAoc2NhbGluZ19zaXplIDw9IFNDQUxJTkdfU0laRSk7CisKKyAgICBpZiAobnVtID09IDAp IHsKKyAgICAgICAgbWVtc2V0KHNjYWxpbmcsIDAsIHNjYWxpbmdfc2l6ZSk7CisgICAgICAgIHJl dHVybjsKKyAgICB9CisKKyAgICAvLyBGaWxsIHVwIHRoZSBwcmVjZWRpbmcgZW50cmllcyB3aXRo IHRoZSBpbml0aWFsIHZhbHVlCisgICAgbWVtc2V0KHNjYWxpbmcsIHBvaW50c1swXVsxXSwgcG9p bnRzWzBdWzBdIDw8IHNoaWZ0X3gpOworCisgICAgLy8gTGluZWFybHkgaW50ZXJwb2xhdGUgdGhl IHZhbHVlcyBpbiB0aGUgbWlkZGxlCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW0gLSAxOyBp KyspIHsKKyAgICAgICAgY29uc3QgaW50IGJ4ID0gcG9pbnRzW2ldWzBdOworICAgICAgICBjb25z dCBpbnQgYnkgPSBwb2ludHNbaV1bMV07CisgICAgICAgIGNvbnN0IGludCBleCA9IHBvaW50c1tp KzFdWzBdOworICAgICAgICBjb25zdCBpbnQgZXkgPSBwb2ludHNbaSsxXVsxXTsKKyAgICAgICAg Y29uc3QgaW50IGR4ID0gZXggLSBieDsKKyAgICAgICAgY29uc3QgaW50IGR5ID0gZXkgLSBieTsK KyAgICAgICAgY29uc3QgaW50IGRlbHRhID0gZHkgKiAoKDB4MTAwMDAgKyAoZHggPj4gMSkpIC8g ZHgpOworICAgICAgICBhdl9hc3NlcnQxKGR4ID4gMCk7CisgICAgICAgIGZvciAoaW50IHggPSAw LCBkID0gMHg4MDAwOyB4IDwgZHg7IHgrKykgeworICAgICAgICAgICAgc2NhbGluZ1soYnggKyB4 KSA8PCBzaGlmdF94XSA9IGJ5ICsgKGQgPj4gMTYpOworICAgICAgICAgICAgZCArPSBkZWx0YTsK KyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZpbGwgdXAgdGhlIHJlbWFpbmluZyBlbnRyaWVz IHdpdGggdGhlIGZpbmFsIHZhbHVlCisgICAgbWVtc2V0KCZzY2FsaW5nW21heF92YWx1ZV0sIHBv aW50c1tudW0gLSAxXVsxXSwgc2NhbGluZ19zaXplIC0gbWF4X3ZhbHVlKTsKKworI2lmIEJJVF9E RVBUSCAhPSA4CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW0gLSAxOyBpKyspIHsKKyAgICAg ICAgY29uc3QgaW50IHBhZCA9IDEgPDwgc2hpZnRfeCwgcm5kID0gcGFkID4+IDE7CisgICAgICAg IGNvbnN0IGludCBieCA9IHBvaW50c1tpXVswXSA8PCBzaGlmdF94OworICAgICAgICBjb25zdCBp bnQgZXggPSBwb2ludHNbaSsxXVswXSA8PCBzaGlmdF94OworICAgICAgICBjb25zdCBpbnQgZHgg PSBleCAtIGJ4OworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGR4OyB4ICs9IHBhZCkgewor ICAgICAgICAgICAgY29uc3QgaW50IHJhbmdlID0gc2NhbGluZ1tieCArIHggKyBwYWRdIC0gc2Nh bGluZ1tieCArIHhdOworICAgICAgICAgICAgZm9yIChpbnQgbiA9IDEsIHIgPSBybmQ7IG4gPCBw YWQ7IG4rKykgeworICAgICAgICAgICAgICAgIHIgKz0gcmFuZ2U7CisgICAgICAgICAgICAgICAg c2NhbGluZ1tieCArIHggKyBuXSA9IHNjYWxpbmdbYnggKyB4XSArIChyID4+IHNoaWZ0X3gpOwor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2VuZGlmCit9CisKK3N0YXRpYyBhdl9h bHdheXNfaW5saW5lIHZvaWQKK0ZVTkMoYXBwbHlfZ3JhaW5fcm93KShBVkZyYW1lICpvdXQsIGNv bnN0IEFWRnJhbWUgKmluLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBzc194LCBj b25zdCBpbnQgc3NfeSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IHNjYWxp bmdbM11bU0NBTElOR19TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbnRyeSBn cmFpbl9sdXRbM11bR1JBSU5fSEVJR0hUKzFdW0dSQUlOX1dJRFRIXSwKKyAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBBVkZpbG1HcmFpblBhcmFtcyAqcGFyYW1zLAorICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGludCByb3cgSEJEX0RFQ0wpCit7CisgICAgLy8gU3ludGhlc2l6ZSBncmFp biBmb3IgdGhlIGFmZmVjdGVkIHBsYW5lcworICAgIGNvbnN0IEFWRmlsbUdyYWluQU9NUGFyYW1z ICpjb25zdCBkYXRhID0gJnBhcmFtcy0+Y29kZWMuYW9tOworICAgIGNvbnN0IGludCBjcHcgPSAo b3V0LT53aWR0aCArIHNzX3gpID4+IHNzX3g7CisgICAgY29uc3QgaW50IGlzX2lkID0gb3V0LT5j b2xvcnNwYWNlID09IEFWQ09MX1NQQ19SR0I7CisgICAgY29uc3QgaW50IGJoID0gKEZGTUlOKG91 dC0+aGVpZ2h0IC0gcm93ICogRkdfQkxPQ0tfU0laRSwgRkdfQkxPQ0tfU0laRSkgKyBzc195KSA+ PiBzc195OworICAgIGNvbnN0IHB0cmRpZmZfdCB1dl9vZmYgPSByb3cgKiBGR19CTE9DS19TSVpF ICogb3V0LT5saW5lc2l6ZVsxXSA+PiBzc195OworICAgIHBpeGVsICpjb25zdCBsdW1hX3NyYyA9 IChwaXhlbCAqKQorICAgICAgICAoKGNoYXIgKikgaW4tPmRhdGFbMF0gKyByb3cgKiBGR19CTE9D S19TSVpFICogaW4tPmxpbmVzaXplWzBdKTsKKworICAgIGlmIChkYXRhLT5udW1feV9wb2ludHMp IHsKKyAgICAgICAgY29uc3QgaW50IGJoID0gRkZNSU4ob3V0LT5oZWlnaHQgLSByb3cgKiBGR19C TE9DS19TSVpFLCBGR19CTE9DS19TSVpFKTsKKyAgICAgICAgY29uc3QgcHRyZGlmZl90IG9mZiA9 IHJvdyAqIEZHX0JMT0NLX1NJWkUgKiBvdXQtPmxpbmVzaXplWzBdOworICAgICAgICBGVU5DKGZn eV8zMngzMnhuX2MpKChwaXhlbCAqKSAoKGNoYXIgKikgb3V0LT5kYXRhWzBdICsgb2ZmKSwgbHVt YV9zcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LT5saW5lc2l6ZVswXSwgcGFy YW1zLCBvdXQtPndpZHRoLCBzY2FsaW5nWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg IGdyYWluX2x1dFswXSwgYmgsIHJvdyBIQkRfQ0FMTCk7CisgICAgfQorCisgICAgaWYgKCFkYXRh LT5udW1fdXZfcG9pbnRzWzBdICYmICFkYXRhLT5udW1fdXZfcG9pbnRzWzFdICYmCisgICAgICAg ICFkYXRhLT5jaHJvbWFfc2NhbGluZ19mcm9tX2x1bWEpCisgICAgeworICAgICAgICByZXR1cm47 CisgICAgfQorCisgICAgLy8gZXh0ZW5kIHBhZGRpbmcgcGl4ZWxzCisgICAgaWYgKG91dC0+d2lk dGggJiBzc194KSB7CisgICAgICAgIHBpeGVsICpwdHIgPSBsdW1hX3NyYzsKKyAgICAgICAgZm9y IChpbnQgeSA9IDA7IHkgPCBiaDsgeSsrKSB7CisgICAgICAgICAgICBwdHJbb3V0LT53aWR0aF0g PSBwdHJbb3V0LT53aWR0aCAtIDFdOworICAgICAgICAgICAgcHRyID0gKHBpeGVsICopICgoY2hh ciAqKSBwdHIgKyAoaW4tPmxpbmVzaXplWzBdIDw8IHNzX3kpKTsKKyAgICAgICAgfQorICAgIH0K KworICAgIGlmIChkYXRhLT5jaHJvbWFfc2NhbGluZ19mcm9tX2x1bWEpIHsKKyAgICAgICAgZm9y IChpbnQgcGwgPSAwOyBwbCA8IDI7IHBsKyspCisgICAgICAgICAgICBGVU5DKGZndXZfMzJ4MzJ4 bl9jKSgocGl4ZWwgKikgKChjaGFyICopIG91dC0+ZGF0YVsxICsgcGxdICsgdXZfb2ZmKSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBwaXhlbCAqKSAoKGNvbnN0IGNo YXIgKikgaW4tPmRhdGFbMSArIHBsXSArIHV2X29mZiksCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbi0+bGluZXNpemVbMV0sIHBhcmFtcywgY3B3LCBzY2FsaW5nWzBdLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhaW5fbHV0WzEgKyBwbF0sIGJoLCByb3cs IGx1bWFfc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4tPmxpbmVzaXpl WzBdLCBwbCwgaXNfaWQsIHNzX3gsIHNzX3kgSEJEX0NBTEwpOworICAgIH0gZWxzZSB7CisgICAg ICAgIGZvciAoaW50IHBsID0gMDsgcGwgPCAyOyBwbCsrKSB7CisgICAgICAgICAgICBpZiAoZGF0 YS0+bnVtX3V2X3BvaW50c1twbF0pIHsKKyAgICAgICAgICAgICAgICBGVU5DKGZndXZfMzJ4MzJ4 bl9jKSgocGl4ZWwgKikgKChjaGFyICopIG91dC0+ZGF0YVsxICsgcGxdICsgdXZfb2ZmKSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgcGl4ZWwgKikgKChjb25z dCBjaGFyICopIGluLT5kYXRhWzEgKyBwbF0gKyB1dl9vZmYpLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGluLT5saW5lc2l6ZVsxXSwgcGFyYW1zLCBjcHcsIHNjYWxpbmdb MSArIHBsXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFpbl9sdXRb MSArIHBsXSwgYmgsIHJvdywgbHVtYV9zcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW4tPmxpbmVzaXplWzBdLCBwbCwgaXNfaWQsIHNzX3gsIHNzX3kgSEJEX0NBTEwp OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgaW50IEZVTkMo YXBwbHlfZmlsbV9ncmFpbikoQVZGcmFtZSAqb3V0X2ZyYW1lLCBjb25zdCBBVkZyYW1lICppbl9m cmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBVkZpbG1HcmFp blBhcmFtcyAqcGFyYW1zIEhCRF9ERUNMKQoreworICAgIGVudHJ5IGdyYWluX2x1dFszXVtHUkFJ Tl9IRUlHSFQgKyAxXVtHUkFJTl9XSURUSF07CisgICAgdWludDhfdCBzY2FsaW5nWzNdW1NDQUxJ TkdfU0laRV07CisKKyAgICBjb25zdCBBVkZpbG1HcmFpbkFPTVBhcmFtcyAqY29uc3QgZGF0YSA9 ICZwYXJhbXMtPmNvZGVjLmFvbTsKKyAgICBjb25zdCBBVlBpeEZtdERlc2NyaXB0b3IgKmRlc2Mg PSBhdl9waXhfZm10X2Rlc2NfZ2V0KG91dF9mcmFtZS0+Zm9ybWF0KTsKKyAgICBjb25zdCBpbnQg cm93cyA9IEFWX0NFSUxfUlNISUZUKG91dF9mcmFtZS0+aGVpZ2h0LCA1KTsgLyogbG9nMihGR19C TE9DS19TSVpFKSAqLworICAgIGNvbnN0IGludCBzdWJ4ID0gZGVzYy0+bG9nMl9jaHJvbWFfdywg c3VieSA9IGRlc2MtPmxvZzJfY2hyb21hX2g7CisKKyAgICAvLyBHZW5lcmF0ZSBncmFpbiBMVVRz IGFzIG5lZWRlZAorICAgIEZVTkMoZ2VuZXJhdGVfZ3JhaW5feV9jKShncmFpbl9sdXRbMF0sIHBh cmFtcyBIQkRfQ0FMTCk7CisgICAgaWYgKGRhdGEtPm51bV91dl9wb2ludHNbMF0gfHwgZGF0YS0+ Y2hyb21hX3NjYWxpbmdfZnJvbV9sdW1hKQorICAgICAgICBGVU5DKGdlbmVyYXRlX2dyYWluX3V2 X2MpKGdyYWluX2x1dFsxXSwgZ3JhaW5fbHV0WzBdLCBwYXJhbXMsIDAsIHN1YngsIHN1YnkgSEJE X0NBTEwpOworICAgIGlmIChkYXRhLT5udW1fdXZfcG9pbnRzWzFdIHx8IGRhdGEtPmNocm9tYV9z Y2FsaW5nX2Zyb21fbHVtYSkKKyAgICAgICAgRlVOQyhnZW5lcmF0ZV9ncmFpbl91dl9jKShncmFp bl9sdXRbMl0sIGdyYWluX2x1dFswXSwgcGFyYW1zLCAxLCBzdWJ4LCBzdWJ5IEhCRF9DQUxMKTsK KworICAgIC8vIEdlbmVyYXRlIHNjYWxpbmcgTFVUcyBhcyBuZWVkZWQKKyAgICBpZiAoZGF0YS0+ bnVtX3lfcG9pbnRzIHx8IGRhdGEtPmNocm9tYV9zY2FsaW5nX2Zyb21fbHVtYSkKKyAgICAgICAg RlVOQyhnZW5lcmF0ZV9zY2FsaW5nKShkYXRhLT55X3BvaW50cywgZGF0YS0+bnVtX3lfcG9pbnRz LCBzY2FsaW5nWzBdIEhCRF9DQUxMKTsKKyAgICBpZiAoZGF0YS0+bnVtX3V2X3BvaW50c1swXSkK KyAgICAgICAgRlVOQyhnZW5lcmF0ZV9zY2FsaW5nKShkYXRhLT51dl9wb2ludHNbMF0sIGRhdGEt Pm51bV91dl9wb2ludHNbMF0sIHNjYWxpbmdbMV0gSEJEX0NBTEwpOworICAgIGlmIChkYXRhLT5u dW1fdXZfcG9pbnRzWzFdKQorICAgICAgICBGVU5DKGdlbmVyYXRlX3NjYWxpbmcpKGRhdGEtPnV2 X3BvaW50c1sxXSwgZGF0YS0+bnVtX3V2X3BvaW50c1sxXSwgc2NhbGluZ1syXSBIQkRfQ0FMTCk7 CisKKyAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCByb3dzOyByb3crKykgeworICAgICAgICBG VU5DKGFwcGx5X2dyYWluX3Jvdykob3V0X2ZyYW1lLCBpbl9mcmFtZSwgc3VieCwgc3VieSwgc2Nh bGluZywgZ3JhaW5fbHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLCBy b3cgSEJEX0NBTEwpOworICAgIH0KKworICAgIHJldHVybiAwOworfQotLSAKMi40My4yCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwg bWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsg YWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJq ZWN0ICJ1bnN1YnNjcmliZSIuCg==