From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 129032 invoked by alias); 19 May 2016 11:28:33 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Received: (qmail 129018 invoked by uid 89); 19 May 2016 11:28:32 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_PASS autolearn=ham version=3.3.2 spammy=RET, bic, Critical, tst X-HELO: eu-smtp-delivery-143.mimecast.com From: Wilco Dijkstra To: Marcus Shawcroft CC: nd , 'GNU C Library' Subject: Re: [PATCH][AArch64] Optimized memcpy/memmove Date: Thu, 19 May 2016 11:33:00 -0000 Message-ID: References: ,, In-Reply-To: x-ms-office365-filtering-correlation-id: 110348bc-88f3-4199-f04b-08d37fd8ab14 x-microsoft-exchange-diagnostics: 1;AM3PR08MB0086;5:W0TADwDyBObIHz163aoZT05aiB1T3XqEUuw5nO+wFP38hwSJCJHtksi7F3aR5bVAzf6O+3TlXH3N8CqsoYIzHsxU2kegFN98xO+exgRoCibKU7ci6D6fGTxSooKcPJS9JtdaIcuREIfgzcUl6kX3xw==;24:unBkjX2ZBrlUs0MnLR2wWBeF4AJELpHR1rHzYz75hoAvQr6bw6fu/q0nM0A0q4vNZsUL3ld1MiCjVoORHENFU7z4IHYjl3gdlcelJs4jh80=;7:H+nzCV8GAQx9aHNmtIAV+qDw48l2wbPe/DrtyUCLwaWIxX7RpuF+WZcIiREORG+T8zfJ3gEbQKkD6xos5o+IXt2eh9dR16hOqilvMlZEf+Zpoc7uvJMvdOcTXKZv1Epui08SAW189SgXx8dCzvrQP3ORhWYr8V+E+CVeDZQ31HOBMtFIMPitwuWdbNIlVVJU;20:vIbg6NB3zWkMNnaRh80mhqp7piRsNvHXOfkL/lscBH60WXqTo3Y2M9+BeuUEO204yZln1NAPbjyeS0N2LX4BT6yZhxjU5MhycpIzRn7muWGZTmAeLnveT95fDp1ETCILZ4j7w22DR8GdwzLe9y7K5zc1xHTPvLRJ7qWuwu5m60I= x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:AM3PR08MB0086; nodisclaimer: True x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:; x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(102415293)(102615271)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046)(6055026);SRVR:AM3PR08MB0086;BCL:0;PCL:0;RULEID:;SRVR:AM3PR08MB0086; x-forefront-prvs: 094700CA91 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(6009001)(54534003)(377424004)(24454002)(5004730100002)(99936001)(5008740100001)(8676002)(1220700001)(74316001)(81166006)(76576001)(3846002)(110136002)(6116002)(5890100001)(87936001)(92566002)(189998001)(8936002)(5002640100001)(102836003)(586003)(5003600100002)(76176999)(33656002)(54356999)(2906002)(86362001)(4326007)(2900100001)(3900700001)(50986999)(66066001)(9686002)(5250100002)(19580405001)(19580395003)(450100001)(2950100001);DIR:OUT;SFP:1101;SCL:1;SRVR:AM3PR08MB0086;H:AM3PR08MB0088.eurprd08.prod.outlook.com;FPR:;SPF:None;MLV:sfv;LANG:en; spamdiagnosticoutput: 1:23 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-originalarrivaltime: 19 May 2016 11:28:14.7280 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM3PR08MB0086 X-MC-Unique: VE63KiZATw6o83EUiwSP1Q-1 Content-Type: multipart/mixed; boundary="_002_AM3PR08MB0088D8D0A0D283D1B7B70535834A0AM3PR08MB0088eurp_" X-SW-Source: 2016-05/txt/msg00414.txt.bz2 --_002_AM3PR08MB0088D8D0A0D283D1B7B70535834A0AM3PR08MB0088eurp_ Content-Type: text/plain; charset=WINDOWS-1252 Content-Transfer-Encoding: quoted-printable Content-length: 1279 ping ________________________________________ From: Wilco Dijkstra Sent: 12 May 2016 17:25 To: Marcus Shawcroft Cc: GNU C Library; nd Subject: Re: [PATCH][AArch64] Optimized memcpy/memmove Marcus Shawcroft wrote: > Hi, There appear to be odd tab characters inserted throughout the > comments, for example: Hmm, it appears unexpand is buggy, so you end up having to do tabs all by hand... Attached updated version. Wilco --- This is an optimized memcpy/memmove for AArch64. Copies are split into 3 ma= in cases: small copies of up to 16 bytes, medium copies of 17..96 bytes whi= ch are fully unrolled. Large copies of more than 96 bytes align the destina= tion and use an unrolled loop processing 64 bytes per iteration. In order t= o share code with memmove, small and medium copies read all data before wri= ting, allowing any kind of overlap. All memmoves except for the large backw= ards case fall into memcpy for optimal performance. On a random copy test m= emcpy/memmove are 40.8% faster on A57 and 28.4% on A53. ChangeLog: 2015-07-08 Wilco Dijkstra * sysdeps/aarch64/memcpy.S (memcpy): Rewrite of optimized memcpy and memmove. * sysdeps/aarch64/memmove.S (memmove): Remove memmove code (merged into memcpy.S). --_002_AM3PR08MB0088D8D0A0D283D1B7B70535834A0AM3PR08MB0088eurp_ Content-Type: text/x-patch; name=memcpy.patch Content-Description: memcpy.patch Content-Disposition: attachment; filename="memcpy.patch"; size=17592; creation-date="Thu, 12 May 2016 16:22:40 GMT"; modification-date="Thu, 12 May 2016 16:25:24 GMT" Content-Transfer-Encoding: base64 Content-length: 23847 ZGlmZiAtLWdpdCBhL3N5c2RlcHMvYWFyY2g2NC9tZW1jcHkuUyBiL3N5c2Rl cHMvYWFyY2g2NC9tZW1jcHkuUwppbmRleCA0NDJmMzkwNDI2MTFkZGUwOGMy Y2Y3OGQ1YTNlZmIxYzVkMGU1YTM2Li5jMjU2ODI4YWY3YTM1NzNjODYyMmM2 ODc4YTBmNjc0YzgxM2YyZGQ5IDEwMDY0NAotLS0gYS9zeXNkZXBzL2FhcmNo NjQvbWVtY3B5LlMKKysrIGIvc3lzZGVwcy9hYXJjaDY0L21lbWNweS5TCkBA IC0xNiwxNjEgKzE2LDIyOSBAQAogICAgTGljZW5zZSBhbG9uZyB3aXRoIHRo ZSBHTlUgQyBMaWJyYXJ5LiAgSWYgbm90LCBzZWUKICAgIDxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKKyNpbmNsdWRlIDxzeXNkZXAu aD4KKwogLyogQXNzdW1wdGlvbnM6CiAgKgotICogQVJNdjgtYSwgQUFyY2g2 NAotICogVW5hbGlnbmVkIGFjY2Vzc2VzCisgKiBBUk12OC1hLCBBQXJjaDY0 LCB1bmFsaWduZWQgYWNjZXNzZXMuCiAgKgogICovCiAKICNkZWZpbmUgZHN0 aW4JeDAKICNkZWZpbmUgc3JjCXgxCiAjZGVmaW5lIGNvdW50CXgyCi0jZGVm aW5lIHRtcDEJeDMKLSNkZWZpbmUgdG1wMXcJdzMKLSNkZWZpbmUgdG1wMgl4 NAotI2RlZmluZSB0bXAydwl3NAotI2RlZmluZSB0bXAzCXg1Ci0jZGVmaW5l IHRtcDN3CXc1Ci0jZGVmaW5lIGRzdAl4NgotCi0jZGVmaW5lIEFfbAl4Nwot I2RlZmluZSBBX2gJeDgKLSNkZWZpbmUgQl9sCXg5Ci0jZGVmaW5lIEJfaAl4 MTAKLSNkZWZpbmUgQ19sCXgxMQotI2RlZmluZSBDX2gJeDEyCi0jZGVmaW5l IERfbAl4MTMKLSNkZWZpbmUgRF9oCXgxNAorI2RlZmluZSBkc3QJeDMKKyNk ZWZpbmUgc3JjZW5kCXg0CisjZGVmaW5lIGRzdGVuZAl4NQorI2RlZmluZSBB X2wJeDYKKyNkZWZpbmUgQV9sdwl3NgorI2RlZmluZSBBX2gJeDcKKyNkZWZp bmUgQV9odwl3NworI2RlZmluZSBCX2wJeDgKKyNkZWZpbmUgQl9oCXg5Cisj ZGVmaW5lIENfbAl4MTAKKyNkZWZpbmUgQ19oCXgxMQorI2RlZmluZSBEX2wJ eDEyCisjZGVmaW5lIERfaAl4MTMKKyNkZWZpbmUgRV9sCXNyYworI2RlZmlu ZSBFX2gJY291bnQKKyNkZWZpbmUgRl9sCXNyY2VuZAorI2RlZmluZSBGX2gJ ZHN0CisjZGVmaW5lIEdfbAljb3VudAorI2RlZmluZSBHX2gJZHN0CisjZGVm aW5lIHRtcDEJeDE0CiAKLSNpbmNsdWRlIDxzeXNkZXAuaD4KKy8qIENvcGll cyBhcmUgc3BsaXQgaW50byAzIG1haW4gY2FzZXM6IHNtYWxsIGNvcGllcyBv ZiB1cCB0byAxNiBieXRlcywKKyAgIG1lZGl1bSBjb3BpZXMgb2YgMTcuLjk2 IGJ5dGVzIHdoaWNoIGFyZSBmdWxseSB1bnJvbGxlZC4gTGFyZ2UgY29waWVz CisgICBvZiBtb3JlIHRoYW4gOTYgYnl0ZXMgYWxpZ24gdGhlIGRlc3RpbmF0 aW9uIGFuZCB1c2UgYW4gdW5yb2xsZWQgbG9vcAorICAgcHJvY2Vzc2luZyA2 NCBieXRlcyBwZXIgaXRlcmF0aW9uLgorICAgSW4gb3JkZXIgdG8gc2hhcmUg Y29kZSB3aXRoIG1lbW1vdmUsIHNtYWxsIGFuZCBtZWRpdW0gY29waWVzIHJl YWQgYWxsCisgICBkYXRhIGJlZm9yZSB3cml0aW5nLCBhbGxvd2luZyBhbnkg a2luZCBvZiBvdmVybGFwLiBTbyBzbWFsbCwgbWVkaXVtCisgICBhbmQgbGFy Z2UgYmFja3dhcmRzIG1lbW1vdmVzIGFyZSBoYW5kbGVkIGJ5IGZhbGxpbmcg dGhyb3VnaCBpbnRvIG1lbWNweS4KKyAgIE92ZXJsYXBwaW5nIGxhcmdlIGZv cndhcmQgbWVtbW92ZXMgdXNlIGEgbG9vcCB0aGF0IGNvcGllcyBiYWNrd2Fy ZHMuCisqLwogCi1FTlRSWV9BTElHTiAobWVtY3B5LCA2KQotCi0JbW92CWRz dCwgZHN0aW4KLQljbXAJY291bnQsICM2NAotCWIuZ2UJTChjcHlfbm90X3No b3J0KQotCWNtcAljb3VudCwgIzE1Ci0JYi5sZQlMKHRhaWwxNXRpbnkpCi0K LQkvKiBEZWFsIHdpdGggc21hbGwgY29waWVzIHF1aWNrbHkgYnkgZHJvcHBp bmcgc3RyYWlnaHQgaW50byB0aGUKLQkgKiBleGl0IGJsb2NrLiAgKi8KLUwo dGFpbDYzKToKLQkvKiBDb3B5IHVwIHRvIDQ4IGJ5dGVzIG9mIGRhdGEuICBB dCB0aGlzIHBvaW50IHdlIG9ubHkgbmVlZCB0aGUKLQkgKiBib3R0b20gNiBi aXRzIG9mIGNvdW50IHRvIGJlIGFjY3VyYXRlLiAgKi8KLQlhbmRzCXRtcDEs IGNvdW50LCAjMHgzMAotCWIuZXEJTCh0YWlsMTUpCi0JYWRkCWRzdCwgZHN0 LCB0bXAxCi0JYWRkCXNyYywgc3JjLCB0bXAxCi0JY21wCXRtcDF3LCAjMHgy MAotCWIuZXEJMWYKLQliLmx0CTJmCi0JbGRwCUFfbCwgQV9oLCBbc3JjLCAj LTQ4XQotCXN0cAlBX2wsIEFfaCwgW2RzdCwgIy00OF0KLTE6Ci0JbGRwCUFf bCwgQV9oLCBbc3JjLCAjLTMyXQotCXN0cAlBX2wsIEFfaCwgW2RzdCwgIy0z Ml0KLTI6Ci0JbGRwCUFfbCwgQV9oLCBbc3JjLCAjLTE2XQotCXN0cAlBX2ws IEFfaCwgW2RzdCwgIy0xNl0KLQotTCh0YWlsMTUpOgotCWFuZHMJY291bnQs IGNvdW50LCAjMTUKLQliZXEJMWYKLQlhZGQJc3JjLCBzcmMsIGNvdW50Ci0J bGRwCUFfbCwgQV9oLCBbc3JjLCAjLTE2XQotCWFkZAlkc3QsIGRzdCwgY291 bnQKLQlzdHAJQV9sLCBBX2gsIFtkc3QsICMtMTZdCi0xOgotCVJFVAotCi1M KHRhaWwxNXRpbnkpOgotCS8qIENvcHkgdXAgdG8gMTUgYnl0ZXMgb2YgZGF0 YS4gIERvZXMgbm90IGFzc3VtZSBhZGRpdGlvbmFsIGRhdGEKLQkgICBiZWlu ZyBjb3BpZWQuICAqLwotCXRiegljb3VudCwgIzMsIDFmCi0JbGRyCXRtcDEs IFtzcmNdLCAjOAotCXN0cgl0bXAxLCBbZHN0XSwgIzgKK0VOVFJZX0FMSUdO IChtZW1tb3ZlLCA2KQorCisJc3ViCXRtcDEsIGRzdGluLCBzcmMKKwljbXAJ Y291bnQsIDk2CisJY2NtcAl0bXAxLCBjb3VudCwgMiwgaGkKKwliLmxvCUwo bW92ZV9sb25nKQorCisJLyogQ29tbW9uIGNhc2UgZmFsbHMgdGhyb3VnaCBp bnRvIG1lbWNweS4gICovCitFTkQgKG1lbW1vdmUpCitsaWJjX2hpZGRlbl9i dWlsdGluX2RlZiAobWVtbW92ZSkKK0VOVFJZIChtZW1jcHkpCisKKwlhZGQJ c3JjZW5kLCBzcmMsIGNvdW50CisJYWRkCWRzdGVuZCwgZHN0aW4sIGNvdW50 CisJY21wCWNvdW50LCA5NgorCWIuaGkJTChjb3B5X2xvbmcpCisJY21wCWNv dW50LCAxNgorCWIuaHMJTChjb3B5X21lZGl1bSkKKworCS8qIFNtYWxsIGNv cGllczogMC4uMTYgYnl0ZXMuICAqLworTChjb3B5MTYpOgorCXRiegljb3Vu dCwgMywgMWYKKwlsZHIJQV9sLCBbc3JjXQorCWxkcglBX2gsIFtzcmNlbmQs IC04XQorCXN0cglBX2wsIFtkc3Rpbl0KKwlzdHIJQV9oLCBbZHN0ZW5kLCAt OF0KKwlyZXQKIDE6Ci0JdGJ6CWNvdW50LCAjMiwgMWYKLQlsZHIJdG1wMXcs IFtzcmNdLCAjNAotCXN0cgl0bXAxdywgW2RzdF0sICM0CisJdGJ6CWNvdW50 LCAyLCAxZgorCWxkcglBX2x3LCBbc3JjXQorCWxkcglBX2h3LCBbc3JjZW5k LCAtNF0KKwlzdHIJQV9sdywgW2RzdGluXQorCXN0cglBX2h3LCBbZHN0ZW5k LCAtNF0KKwlyZXQKKwkucDJhbGlnbiA0CiAxOgotCXRiegljb3VudCwgIzEs IDFmCi0JbGRyaAl0bXAxdywgW3NyY10sICMyCi0Jc3RyaAl0bXAxdywgW2Rz dF0sICMyCisJY2J6CWNvdW50LCAyZgorCWxkcmIJQV9sdywgW3NyY10KKwl0 YnoJY291bnQsIDEsIDFmCisJbGRyaAlBX2h3LCBbc3JjZW5kLCAtMl0KKwlz dHJoCUFfaHcsIFtkc3RlbmQsIC0yXQorMToJc3RyYglBX2x3LCBbZHN0aW5d CisyOglyZXQKKworCS5wMmFsaWduIDQKKwkvKiBNZWRpdW0gY29waWVzOiAx Ny4uOTYgYnl0ZXMuICAqLworTChjb3B5X21lZGl1bSk6CisJbGRwCUFfbCwg QV9oLCBbc3JjXQorCXRibnoJY291bnQsIDYsIEwoY29weTk2KQorCWxkcAlE X2wsIERfaCwgW3NyY2VuZCwgLTE2XQorCXRiegljb3VudCwgNSwgMWYKKwls ZHAJQl9sLCBCX2gsIFtzcmMsIDE2XQorCWxkcAlDX2wsIENfaCwgW3NyY2Vu ZCwgLTMyXQorCXN0cAlCX2wsIEJfaCwgW2RzdGluLCAxNl0KKwlzdHAJQ19s LCBDX2gsIFtkc3RlbmQsIC0zMl0KIDE6Ci0JdGJ6CWNvdW50LCAjMCwgMWYK LQlsZHJiCXRtcDF3LCBbc3JjXQotCXN0cmIJdG1wMXcsIFtkc3RdCisJc3Rw CUFfbCwgQV9oLCBbZHN0aW5dCisJc3RwCURfbCwgRF9oLCBbZHN0ZW5kLCAt MTZdCisJcmV0CisKKwkucDJhbGlnbiA0CisJLyogQ29weSA2NC4uOTYgYnl0 ZXMuICBDb3B5IDY0IGJ5dGVzIGZyb20gdGhlIHN0YXJ0IGFuZAorCSAgIDMy IGJ5dGVzIGZyb20gdGhlIGVuZC4gICovCitMKGNvcHk5Nik6CisJbGRwCUJf bCwgQl9oLCBbc3JjLCAxNl0KKwlsZHAJQ19sLCBDX2gsIFtzcmMsIDMyXQor CWxkcAlEX2wsIERfaCwgW3NyYywgNDhdCisJbGRwCUVfbCwgRV9oLCBbc3Jj ZW5kLCAtMzJdCisJbGRwCUZfbCwgRl9oLCBbc3JjZW5kLCAtMTZdCisJc3Rw CUFfbCwgQV9oLCBbZHN0aW5dCisJc3RwCUJfbCwgQl9oLCBbZHN0aW4sIDE2 XQorCXN0cAlDX2wsIENfaCwgW2RzdGluLCAzMl0KKwlzdHAJRF9sLCBEX2gs IFtkc3RpbiwgNDhdCisJc3RwCUVfbCwgRV9oLCBbZHN0ZW5kLCAtMzJdCisJ c3RwCUZfbCwgRl9oLCBbZHN0ZW5kLCAtMTZdCisJcmV0CisKKwkvKiBBbGln biBEU1QgdG8gMTYgYnl0ZSBhbGlnbm1lbnQgc28gdGhhdCB3ZSBkb24ndCBj cm9zcyBjYWNoZSBsaW5lCisJICAgYm91bmRhcmllcyBvbiBib3RoIGxvYWRz IGFuZCBzdG9yZXMuICBUaGVyZSBhcmUgYXQgbGVhc3QgOTYgYnl0ZXMKKwkg ICB0byBjb3B5LCBzbyBjb3B5IDE2IGJ5dGVzIHVuYWxpZ25lZCBhbmQgdGhl biBhbGlnbi4gIFRoZSBsb29wCisJICAgY29waWVzIDY0IGJ5dGVzIHBlciBp dGVyYXRpb24gYW5kIHByZWZldGNoZXMgb25lIGl0ZXJhdGlvbiBhaGVhZC4g ICovCisKKwkucDJhbGlnbiA0CitMKGNvcHlfbG9uZyk6CisJYW5kCXRtcDEs IGRzdGluLCAxNQorCWJpYwlkc3QsIGRzdGluLCAxNQorCWxkcAlEX2wsIERf aCwgW3NyY10KKwlzdWIJc3JjLCBzcmMsIHRtcDEKKwlhZGQJY291bnQsIGNv dW50LCB0bXAxCS8qIENvdW50IGlzIG5vdyAxNiB0b28gbGFyZ2UuICAqLwor CWxkcAlBX2wsIEFfaCwgW3NyYywgMTZdCisJc3RwCURfbCwgRF9oLCBbZHN0 aW5dCisJbGRwCUJfbCwgQl9oLCBbc3JjLCAzMl0KKwlsZHAJQ19sLCBDX2gs IFtzcmMsIDQ4XQorCWxkcAlEX2wsIERfaCwgW3NyYywgNjRdIQorCXN1YnMJ Y291bnQsIGNvdW50LCAxMjggKyAxNgkvKiBUZXN0IGFuZCByZWFkanVzdCBj b3VudC4gICovCisJYi5scwkyZgogMToKLQlSRVQKLQotTChjcHlfbm90X3No b3J0KToKLQkvKiBXZSBkb24ndCBtdWNoIGNhcmUgYWJvdXQgdGhlIGFsaWdu bWVudCBvZiBEU1QsIGJ1dCB3ZSB3YW50IFNSQwotCSAqIHRvIGJlIDEyOC1i aXQgKDE2IGJ5dGUpIGFsaWduZWQgc28gdGhhdCB3ZSBkb24ndCBjcm9zcyBj YWNoZSBsaW5lCi0JICogYm91bmRhcmllcyBvbiBib3RoIGxvYWRzIGFuZCBz dG9yZXMuICAqLwotCW5lZwl0bXAyLCBzcmMKLQlhbmRzCXRtcDIsIHRtcDIs ICMxNQkJLyogQnl0ZXMgdG8gcmVhY2ggYWxpZ25tZW50LiAgKi8KLQliLmVx CTJmCi0Jc3ViCWNvdW50LCBjb3VudCwgdG1wMgotCS8qIENvcHkgbW9yZSBk YXRhIHRoYW4gbmVlZGVkOyBpdCdzIGZhc3RlciB0aGFuIGp1bXBpbmcKLQkg KiBhcm91bmQgY29weWluZyBzdWItUXVhZHdvcmQgcXVhbnRpdGllcy4gIFdl IGtub3cgdGhhdAotCSAqIGl0IGNhbid0IG92ZXJydW4uICAqLwotCWxkcAlB X2wsIEFfaCwgW3NyY10KLQlhZGQJc3JjLCBzcmMsIHRtcDIKLQlzdHAJQV9s LCBBX2gsIFtkc3RdCi0JYWRkCWRzdCwgZHN0LCB0bXAyCi0JLyogVGhlcmUg bWF5IGJlIGxlc3MgdGhhbiA2MyBieXRlcyB0byBnbyBub3cuICAqLwotCWNt cAljb3VudCwgIzYzCi0JYi5sZQlMKHRhaWw2MykKKwlzdHAJQV9sLCBBX2gs IFtkc3QsIDE2XQorCWxkcAlBX2wsIEFfaCwgW3NyYywgMTZdCisJc3RwCUJf bCwgQl9oLCBbZHN0LCAzMl0KKwlsZHAJQl9sLCBCX2gsIFtzcmMsIDMyXQor CXN0cAlDX2wsIENfaCwgW2RzdCwgNDhdCisJbGRwCUNfbCwgQ19oLCBbc3Jj LCA0OF0KKwlzdHAJRF9sLCBEX2gsIFtkc3QsIDY0XSEKKwlsZHAJRF9sLCBE X2gsIFtzcmMsIDY0XSEKKwlzdWJzCWNvdW50LCBjb3VudCwgNjQKKwliLmhp CTFiCisKKwkvKiBXcml0ZSB0aGUgbGFzdCBmdWxsIHNldCBvZiA2NCBieXRl cy4gIFRoZSByZW1haW5kZXIgaXMgYXQgbW9zdCA2NAorCSAgIGJ5dGVzLCBz byBpdCBpcyBzYWZlIHRvIGFsd2F5cyBjb3B5IDY0IGJ5dGVzIGZyb20gdGhl IGVuZCBldmVuIGlmCisJICAgdGhlcmUgaXMganVzdCAxIGJ5dGUgbGVmdC4g ICovCiAyOgotCXN1YnMJY291bnQsIGNvdW50LCAjMTI4Ci0JYi5nZQlMKGNw eV9ib2R5X2xhcmdlKQotCS8qIExlc3MgdGhhbiAxMjggYnl0ZXMgdG8gY29w eSwgc28gaGFuZGxlIDY0IGhlcmUgYW5kIHRoZW4ganVtcAotCSAqIHRvIHRo ZSB0YWlsLiAgKi8KLQlsZHAJQV9sLCBBX2gsIFtzcmNdCi0JbGRwCUJfbCwg Ql9oLCBbc3JjLCAjMTZdCi0JbGRwCUNfbCwgQ19oLCBbc3JjLCAjMzJdCi0J bGRwCURfbCwgRF9oLCBbc3JjLCAjNDhdCi0Jc3RwCUFfbCwgQV9oLCBbZHN0 XQotCXN0cAlCX2wsIEJfaCwgW2RzdCwgIzE2XQotCXN0cAlDX2wsIENfaCwg W2RzdCwgIzMyXQotCXN0cAlEX2wsIERfaCwgW2RzdCwgIzQ4XQotCXRzdAlj b3VudCwgIzB4M2YKLQlhZGQJc3JjLCBzcmMsICM2NAotCWFkZAlkc3QsIGRz dCwgIzY0Ci0JYi5uZQlMKHRhaWw2MykKLQlSRVQKLQotCS8qIENyaXRpY2Fs IGxvb3AuICBTdGFydCBhdCBhIG5ldyBjYWNoZSBsaW5lIGJvdW5kYXJ5LiAg QXNzdW1pbmcKLQkgKiA2NCBieXRlcyBwZXIgbGluZSB0aGlzIGVuc3VyZXMg dGhlIGVudGlyZSBsb29wIGlzIGluIG9uZSBsaW5lLiAgKi8KLQkucDJhbGln biA2Ci1MKGNweV9ib2R5X2xhcmdlKToKLQkvKiBUaGVyZSBhcmUgYXQgbGVh c3QgMTI4IGJ5dGVzIHRvIGNvcHkuICAqLwotCWxkcAlBX2wsIEFfaCwgW3Ny YywgIzBdCi0Jc3ViCWRzdCwgZHN0LCAjMTYJCS8qIFByZS1iaWFzLiAgKi8K LQlsZHAJQl9sLCBCX2gsIFtzcmMsICMxNl0KLQlsZHAJQ19sLCBDX2gsIFtz cmMsICMzMl0KLQlsZHAJRF9sLCBEX2gsIFtzcmMsICM0OF0hCS8qIHNyYyAr PSA2NCAtIFByZS1iaWFzLiAgKi8KKwlsZHAJRV9sLCBFX2gsIFtzcmNlbmQs IC02NF0KKwlzdHAJQV9sLCBBX2gsIFtkc3QsIDE2XQorCWxkcAlBX2wsIEFf aCwgW3NyY2VuZCwgLTQ4XQorCXN0cAlCX2wsIEJfaCwgW2RzdCwgMzJdCisJ bGRwCUJfbCwgQl9oLCBbc3JjZW5kLCAtMzJdCisJc3RwCUNfbCwgQ19oLCBb ZHN0LCA0OF0KKwlsZHAJQ19sLCBDX2gsIFtzcmNlbmQsIC0xNl0KKwlzdHAJ RF9sLCBEX2gsIFtkc3QsIDY0XQorCXN0cAlFX2wsIEVfaCwgW2RzdGVuZCwg LTY0XQorCXN0cAlBX2wsIEFfaCwgW2RzdGVuZCwgLTQ4XQorCXN0cAlCX2ws IEJfaCwgW2RzdGVuZCwgLTMyXQorCXN0cAlDX2wsIENfaCwgW2RzdGVuZCwg LTE2XQorCXJldAorCisJLnAyYWxpZ24gNAorTChtb3ZlX2xvbmcpOgorCWNi egl0bXAxLCAzZgorCisJYWRkCXNyY2VuZCwgc3JjLCBjb3VudAorCWFkZAlk c3RlbmQsIGRzdGluLCBjb3VudAorCisJLyogQWxpZ24gZHN0ZW5kIHRvIDE2 IGJ5dGUgYWxpZ25tZW50IHNvIHRoYXQgd2UgZG9uJ3QgY3Jvc3MgY2FjaGUg bGluZQorCSAgIGJvdW5kYXJpZXMgb24gYm90aCBsb2FkcyBhbmQgc3RvcmVz LiAgVGhlcmUgYXJlIGF0IGxlYXN0IDk2IGJ5dGVzCisJICAgdG8gY29weSwg c28gY29weSAxNiBieXRlcyB1bmFsaWduZWQgYW5kIHRoZW4gYWxpZ24uICBU aGUgbG9vcAorCSAgIGNvcGllcyA2NCBieXRlcyBwZXIgaXRlcmF0aW9uIGFu ZCBwcmVmZXRjaGVzIG9uZSBpdGVyYXRpb24gYWhlYWQuICAqLworCisJYW5k CXRtcDEsIGRzdGVuZCwgMTUKKwlsZHAJRF9sLCBEX2gsIFtzcmNlbmQsIC0x Nl0KKwlzdWIJc3JjZW5kLCBzcmNlbmQsIHRtcDEKKwlzdWIJY291bnQsIGNv dW50LCB0bXAxCisJbGRwCUFfbCwgQV9oLCBbc3JjZW5kLCAtMTZdCisJc3Rw CURfbCwgRF9oLCBbZHN0ZW5kLCAtMTZdCisJbGRwCUJfbCwgQl9oLCBbc3Jj ZW5kLCAtMzJdCisJbGRwCUNfbCwgQ19oLCBbc3JjZW5kLCAtNDhdCisJbGRw CURfbCwgRF9oLCBbc3JjZW5kLCAtNjRdIQorCXN1Yglkc3RlbmQsIGRzdGVu ZCwgdG1wMQorCXN1YnMJY291bnQsIGNvdW50LCAxMjgKKwliLmxzCTJmCisK Kwlub3AKIDE6Ci0Jc3RwCUFfbCwgQV9oLCBbZHN0LCAjMTZdCi0JbGRwCUFf bCwgQV9oLCBbc3JjLCAjMTZdCi0Jc3RwCUJfbCwgQl9oLCBbZHN0LCAjMzJd Ci0JbGRwCUJfbCwgQl9oLCBbc3JjLCAjMzJdCi0Jc3RwCUNfbCwgQ19oLCBb ZHN0LCAjNDhdCi0JbGRwCUNfbCwgQ19oLCBbc3JjLCAjNDhdCi0Jc3RwCURf bCwgRF9oLCBbZHN0LCAjNjRdIQotCWxkcAlEX2wsIERfaCwgW3NyYywgIzY0 XSEKLQlzdWJzCWNvdW50LCBjb3VudCwgIzY0Ci0JYi5nZQkxYgotCXN0cAlB X2wsIEFfaCwgW2RzdCwgIzE2XQotCXN0cAlCX2wsIEJfaCwgW2RzdCwgIzMy XQotCXN0cAlDX2wsIENfaCwgW2RzdCwgIzQ4XQotCXN0cAlEX2wsIERfaCwg W2RzdCwgIzY0XQotCWFkZAlzcmMsIHNyYywgIzE2Ci0JYWRkCWRzdCwgZHN0 LCAjNjQgKyAxNgotCXRzdAljb3VudCwgIzB4M2YKLQliLm5lCUwodGFpbDYz KQotCVJFVAorCXN0cAlBX2wsIEFfaCwgW2RzdGVuZCwgLTE2XQorCWxkcAlB X2wsIEFfaCwgW3NyY2VuZCwgLTE2XQorCXN0cAlCX2wsIEJfaCwgW2RzdGVu ZCwgLTMyXQorCWxkcAlCX2wsIEJfaCwgW3NyY2VuZCwgLTMyXQorCXN0cAlD X2wsIENfaCwgW2RzdGVuZCwgLTQ4XQorCWxkcAlDX2wsIENfaCwgW3NyY2Vu ZCwgLTQ4XQorCXN0cAlEX2wsIERfaCwgW2RzdGVuZCwgLTY0XSEKKwlsZHAJ RF9sLCBEX2gsIFtzcmNlbmQsIC02NF0hCisJc3Vicwljb3VudCwgY291bnQs IDY0CisJYi5oaQkxYgorCisJLyogV3JpdGUgdGhlIGxhc3QgZnVsbCBzZXQg b2YgNjQgYnl0ZXMuICBUaGUgcmVtYWluZGVyIGlzIGF0IG1vc3QgNjQKKwkg ICBieXRlcywgc28gaXQgaXMgc2FmZSB0byBhbHdheXMgY29weSA2NCBieXRl cyBmcm9tIHRoZSBzdGFydCBldmVuIGlmCisJICAgdGhlcmUgaXMganVzdCAx IGJ5dGUgbGVmdC4gICovCisyOgorCWxkcAlHX2wsIEdfaCwgW3NyYywgNDhd CisJc3RwCUFfbCwgQV9oLCBbZHN0ZW5kLCAtMTZdCisJbGRwCUFfbCwgQV9o LCBbc3JjLCAzMl0KKwlzdHAJQl9sLCBCX2gsIFtkc3RlbmQsIC0zMl0KKwls ZHAJQl9sLCBCX2gsIFtzcmMsIDE2XQorCXN0cAlDX2wsIENfaCwgW2RzdGVu ZCwgLTQ4XQorCWxkcAlDX2wsIENfaCwgW3NyY10KKwlzdHAJRF9sLCBEX2gs IFtkc3RlbmQsIC02NF0KKwlzdHAJR19sLCBHX2gsIFtkc3RpbiwgNDhdCisJ c3RwCUFfbCwgQV9oLCBbZHN0aW4sIDMyXQorCXN0cAlCX2wsIEJfaCwgW2Rz dGluLCAxNl0KKwlzdHAJQ19sLCBDX2gsIFtkc3Rpbl0KKzM6CXJldAorCiBF TkQgKG1lbWNweSkKIGxpYmNfaGlkZGVuX2J1aWx0aW5fZGVmIChtZW1jcHkp CmRpZmYgLS1naXQgYS9zeXNkZXBzL2FhcmNoNjQvbWVtbW92ZS5TIGIvc3lz ZGVwcy9hYXJjaDY0L21lbW1vdmUuUwppbmRleCBkZDkxZGIwZmY2N2NlNjg0 NmU1MmYwYzNhNmZhMDM1NmNjNTdlOGI0Li4wZmVlYWM4NDE0NWE2Mjk2Y2Nl NDAzODNiOGQ2YTliYWFiZGVhZDI5IDEwMDY0NAotLS0gYS9zeXNkZXBzL2Fh cmNoNjQvbWVtbW92ZS5TCisrKyBiL3N5c2RlcHMvYWFyY2g2NC9tZW1tb3Zl LlMKQEAgLTEsMzEyICsxIEBACi0vKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAx NiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotICAgVGhpcyBm aWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCi0KLSAgIFRoZSBH TlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vcgotICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICAgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyCi0gICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3Ig KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgVGhl IEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgTGVzc2VyIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYwotICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBM aWJyYXJ5LiAgSWYgbm90LCBzZWUKLSAgIDxodHRwOi8vd3d3LmdudS5vcmcv bGljZW5zZXMvPi4gICovCi0KLSNpbmNsdWRlIDxzeXNkZXAuaD4KLQotLyog QXNzdW1wdGlvbnM6Ci0gKgotICogQVJNdjgtYSwgQUFyY2g2NAotICogVW5h bGlnbmVkIGFjY2Vzc2VzCi0gKi8KLQotLyogUGFyYW1ldGVycyBhbmQgcmVz dWx0LiAgKi8KLSNkZWZpbmUgZHN0aW4JeDAKLSNkZWZpbmUgc3JjCXgxCi0j ZGVmaW5lIGNvdW50CXgyCi0jZGVmaW5lIHRtcDEJeDMKLSNkZWZpbmUgdG1w MXcJdzMKLSNkZWZpbmUgdG1wMgl4NAotI2RlZmluZSB0bXAydwl3NAotI2Rl ZmluZSB0bXAzCXg1Ci0jZGVmaW5lIHRtcDN3CXc1Ci0jZGVmaW5lIGRzdAl4 NgotCi0jZGVmaW5lIEFfbAl4NwotI2RlZmluZSBBX2gJeDgKLSNkZWZpbmUg Ql9sCXg5Ci0jZGVmaW5lIEJfaAl4MTAKLSNkZWZpbmUgQ19sCXgxMQotI2Rl ZmluZSBDX2gJeDEyCi0jZGVmaW5lIERfbAl4MTMKLSNkZWZpbmUgRF9oCXgx NAotCi1FTlRSWV9BTElHTiAobWVtbW92ZSwgNikKLQotCWNtcAlkc3Rpbiwg c3JjCi0JYi5sbwlMKGRvd253YXJkcykKLQlhZGQJdG1wMSwgc3JjLCBjb3Vu dAotCWNtcAlkc3RpbiwgdG1wMQotCWIuaHMJbWVtY3B5CQkvKiBObyBvdmVy bGFwLiAgKi8KLQotCS8qIFVwd2FyZHMgbW92ZSB3aXRoIHBvdGVudGlhbCBv dmVybGFwLgotCSAqIE5lZWQgdG8gbW92ZSBmcm9tIHRoZSB0YWlsIGJhY2t3 YXJkcy4gIFNSQyBhbmQgRFNUIHBvaW50IG9uZQotCSAqIGJ5dGUgYmV5b25k IHRoZSByZW1haW5pbmcgZGF0YSB0byBtb3ZlLiAgKi8KLQlhZGQJZHN0LCBk c3RpbiwgY291bnQKLQlhZGQJc3JjLCBzcmMsIGNvdW50Ci0JY21wCWNvdW50 LCAjNjQKLQliLmdlCUwobW92X25vdF9zaG9ydF91cCkKLQotCS8qIERlYWwg d2l0aCBzbWFsbCBtb3ZlcyBxdWlja2x5IGJ5IGRyb3BwaW5nIHN0cmFpZ2h0 IGludG8gdGhlCi0JICogZXhpdCBibG9jay4gICovCi1MKHRhaWw2M3VwKToK LQkvKiBNb3ZlIHVwIHRvIDQ4IGJ5dGVzIG9mIGRhdGEuICBBdCB0aGlzIHBv aW50IHdlIG9ubHkgbmVlZCB0aGUKLQkgKiBib3R0b20gNiBiaXRzIG9mIGNv dW50IHRvIGJlIGFjY3VyYXRlLiAgKi8KLQlhbmRzCXRtcDEsIGNvdW50LCAj MHgzMAotCWIuZXEJTCh0YWlsMTV1cCkKLQlzdWIJZHN0LCBkc3QsIHRtcDEK LQlzdWIJc3JjLCBzcmMsIHRtcDEKLQljbXAJdG1wMXcsICMweDIwCi0JYi5l cQkxZgotCWIubHQJMmYKLQlsZHAJQV9sLCBBX2gsIFtzcmMsICMzMl0KLQlz dHAJQV9sLCBBX2gsIFtkc3QsICMzMl0KLTE6Ci0JbGRwCUFfbCwgQV9oLCBb c3JjLCAjMTZdCi0Jc3RwCUFfbCwgQV9oLCBbZHN0LCAjMTZdCi0yOgotCWxk cAlBX2wsIEFfaCwgW3NyY10KLQlzdHAJQV9sLCBBX2gsIFtkc3RdCi1MKHRh aWwxNXVwKToKLQkvKiBNb3ZlIHVwIHRvIDE1IGJ5dGVzIG9mIGRhdGEuICBE b2VzIG5vdCBhc3N1bWUgYWRkaXRpb25hbCBkYXRhCi0JICogYmVpbmcgbW92 ZWQuICAqLwotCXRiegljb3VudCwgIzMsIDFmCi0JbGRyCXRtcDEsIFtzcmMs ICMtOF0hCi0Jc3RyCXRtcDEsIFtkc3QsICMtOF0hCi0xOgotCXRiegljb3Vu dCwgIzIsIDFmCi0JbGRyCXRtcDF3LCBbc3JjLCAjLTRdIQotCXN0cgl0bXAx dywgW2RzdCwgIy00XSEKLTE6Ci0JdGJ6CWNvdW50LCAjMSwgMWYKLQlsZHJo CXRtcDF3LCBbc3JjLCAjLTJdIQotCXN0cmgJdG1wMXcsIFtkc3QsICMtMl0h Ci0xOgotCXRiegljb3VudCwgIzAsIDFmCi0JbGRyYgl0bXAxdywgW3NyYywg Iy0xXQotCXN0cmIJdG1wMXcsIFtkc3QsICMtMV0KLTE6Ci0JUkVUCi0KLUwo bW92X25vdF9zaG9ydF91cCk6Ci0JLyogV2UgZG9uJ3QgbXVjaCBjYXJlIGFi b3V0IHRoZSBhbGlnbm1lbnQgb2YgRFNULCBidXQgd2Ugd2FudCBTUkMKLQkg KiB0byBiZSAxMjgtYml0ICgxNiBieXRlKSBhbGlnbmVkIHNvIHRoYXQgd2Ug ZG9uJ3QgY3Jvc3MgY2FjaGUgbGluZQotCSAqIGJvdW5kYXJpZXMgb24gYm90 aCBsb2FkcyBhbmQgc3RvcmVzLiAgKi8KLQlhbmRzCXRtcDIsIHNyYywgIzE1 CQkvKiBCeXRlcyB0byByZWFjaCBhbGlnbm1lbnQuICAqLwotCWIuZXEJMmYK LQlzdWIJY291bnQsIGNvdW50LCB0bXAyCi0JLyogTW92ZSBlbm91Z2ggZGF0 YSB0byByZWFjaCBhbGlnbm1lbnQ7IHVubGlrZSBtZW1jcHksIHdlIGhhdmUg dG8KLQkgKiBiZSBhd2FyZSBvZiB0aGUgb3ZlcmxhcCwgd2hpY2ggbWVhbnMg d2UgY2FuJ3QgbW92ZSBkYXRhIHR3aWNlLiAgKi8KLQl0YnoJdG1wMiwgIzMs IDFmCi0JbGRyCXRtcDEsIFtzcmMsICMtOF0hCi0Jc3RyCXRtcDEsIFtkc3Qs ICMtOF0hCi0xOgotCXRiegl0bXAyLCAjMiwgMWYKLQlsZHIJdG1wMXcsIFtz cmMsICMtNF0hCi0Jc3RyCXRtcDF3LCBbZHN0LCAjLTRdIQotMToKLQl0YnoJ dG1wMiwgIzEsIDFmCi0JbGRyaAl0bXAxdywgW3NyYywgIy0yXSEKLQlzdHJo CXRtcDF3LCBbZHN0LCAjLTJdIQotMToKLQl0YnoJdG1wMiwgIzAsIDFmCi0J bGRyYgl0bXAxdywgW3NyYywgIy0xXSEKLQlzdHJiCXRtcDF3LCBbZHN0LCAj LTFdIQotMToKLQotCS8qIFRoZXJlIG1heSBiZSBsZXNzIHRoYW4gNjMgYnl0 ZXMgdG8gZ28gbm93LiAgKi8KLQljbXAJY291bnQsICM2MwotCWIubGUJTCh0 YWlsNjN1cCkKLTI6Ci0Jc3Vicwljb3VudCwgY291bnQsICMxMjgKLQliLmdl CUwobW92X2JvZHlfbGFyZ2VfdXApCi0JLyogTGVzcyB0aGFuIDEyOCBieXRl cyB0byBtb3ZlLCBzbyBoYW5kbGUgNjQgaGVyZSBhbmQgdGhlbiBqdW1wCi0J ICogdG8gdGhlIHRhaWwuICAqLwotCWxkcAlBX2wsIEFfaCwgW3NyYywgIy02 NF0hCi0JbGRwCUJfbCwgQl9oLCBbc3JjLCAjMTZdCi0JbGRwCUNfbCwgQ19o LCBbc3JjLCAjMzJdCi0JbGRwCURfbCwgRF9oLCBbc3JjLCAjNDhdCi0Jc3Rw CUFfbCwgQV9oLCBbZHN0LCAjLTY0XSEKLQlzdHAJQl9sLCBCX2gsIFtkc3Qs ICMxNl0KLQlzdHAJQ19sLCBDX2gsIFtkc3QsICMzMl0KLQlzdHAJRF9sLCBE X2gsIFtkc3QsICM0OF0KLQl0c3QJY291bnQsICMweDNmCi0JYi5uZQlMKHRh aWw2M3VwKQotCVJFVAotCi0JLyogQ3JpdGljYWwgbG9vcC4gIFN0YXJ0IGF0 IGEgbmV3IEljYWNoZSBsaW5lIGJvdW5kYXJ5LiAgQXNzdW1pbmcKLQkgKiA2 NCBieXRlcyBwZXIgbGluZSB0aGlzIGVuc3VyZXMgdGhlIGVudGlyZSBsb29w IGlzIGluIG9uZSBsaW5lLiAgKi8KLQkucDJhbGlnbiA2Ci1MKG1vdl9ib2R5 X2xhcmdlX3VwKToKLQkvKiBUaGVyZSBhcmUgYXQgbGVhc3QgMTI4IGJ5dGVz IHRvIG1vdmUuICAqLwotCWxkcAlBX2wsIEFfaCwgW3NyYywgIy0xNl0KLQls ZHAJQl9sLCBCX2gsIFtzcmMsICMtMzJdCi0JbGRwCUNfbCwgQ19oLCBbc3Jj LCAjLTQ4XQotCWxkcAlEX2wsIERfaCwgW3NyYywgIy02NF0hCi0xOgotCXN0 cAlBX2wsIEFfaCwgW2RzdCwgIy0xNl0KLQlsZHAJQV9sLCBBX2gsIFtzcmMs ICMtMTZdCi0Jc3RwCUJfbCwgQl9oLCBbZHN0LCAjLTMyXQotCWxkcAlCX2ws IEJfaCwgW3NyYywgIy0zMl0KLQlzdHAJQ19sLCBDX2gsIFtkc3QsICMtNDhd Ci0JbGRwCUNfbCwgQ19oLCBbc3JjLCAjLTQ4XQotCXN0cAlEX2wsIERfaCwg W2RzdCwgIy02NF0hCi0JbGRwCURfbCwgRF9oLCBbc3JjLCAjLTY0XSEKLQlz dWJzCWNvdW50LCBjb3VudCwgIzY0Ci0JYi5nZQkxYgotCXN0cAlBX2wsIEFf aCwgW2RzdCwgIy0xNl0KLQlzdHAJQl9sLCBCX2gsIFtkc3QsICMtMzJdCi0J c3RwCUNfbCwgQ19oLCBbZHN0LCAjLTQ4XQotCXN0cAlEX2wsIERfaCwgW2Rz dCwgIy02NF0hCi0JdHN0CWNvdW50LCAjMHgzZgotCWIubmUJTCh0YWlsNjN1 cCkKLQlSRVQKLQotTChkb3dud2FyZHMpOgotCS8qIEZvciBhIGRvd253YXJk cyBtb3ZlIHdlIGNhbiBzYWZlbHkgdXNlIG1lbWNweSBwcm92aWRlZCB0aGF0 Ci0JICogRFNUIGlzIG1vcmUgdGhhbiAxNiBieXRlcyBhd2F5IGZyb20gU1JD LiAgKi8KLQlzdWIJdG1wMSwgc3JjLCAjMTYKLQljbXAJZHN0aW4sIHRtcDEK LQliLmxzCW1lbWNweQkJLyogTWF5IG92ZXJsYXAsIGJ1dCBub3QgY3JpdGlj YWxseS4gICovCi0KLQltb3YJZHN0LCBkc3RpbgkvKiBQcmVzZXJ2ZSBEU1RJ TiBmb3IgcmV0dXJuIHZhbHVlLiAgKi8KLQljbXAJY291bnQsICM2NAotCWIu Z2UJTChtb3Zfbm90X3Nob3J0X2Rvd24pCi0KLQkvKiBEZWFsIHdpdGggc21h bGwgbW92ZXMgcXVpY2tseSBieSBkcm9wcGluZyBzdHJhaWdodCBpbnRvIHRo ZQotCSAqIGV4aXQgYmxvY2suICAqLwotTCh0YWlsNjNkb3duKToKLQkvKiBN b3ZlIHVwIHRvIDQ4IGJ5dGVzIG9mIGRhdGEuICBBdCB0aGlzIHBvaW50IHdl IG9ubHkgbmVlZCB0aGUKLQkgKiBib3R0b20gNiBiaXRzIG9mIGNvdW50IHRv IGJlIGFjY3VyYXRlLiAgKi8KLQlhbmRzCXRtcDEsIGNvdW50LCAjMHgzMAot CWIuZXEJTCh0YWlsMTVkb3duKQotCWFkZAlkc3QsIGRzdCwgdG1wMQotCWFk ZAlzcmMsIHNyYywgdG1wMQotCWNtcAl0bXAxdywgIzB4MjAKLQliLmVxCTFm Ci0JYi5sdAkyZgotCWxkcAlBX2wsIEFfaCwgW3NyYywgIy00OF0KLQlzdHAJ QV9sLCBBX2gsIFtkc3QsICMtNDhdCi0xOgotCWxkcAlBX2wsIEFfaCwgW3Ny YywgIy0zMl0KLQlzdHAJQV9sLCBBX2gsIFtkc3QsICMtMzJdCi0yOgotCWxk cAlBX2wsIEFfaCwgW3NyYywgIy0xNl0KLQlzdHAJQV9sLCBBX2gsIFtkc3Qs ICMtMTZdCi1MKHRhaWwxNWRvd24pOgotCS8qIE1vdmUgdXAgdG8gMTUgYnl0 ZXMgb2YgZGF0YS4gIERvZXMgbm90IGFzc3VtZSBhZGRpdGlvbmFsIGRhdGEK LQkgICBiZWluZyBtb3ZlZC4gICovCi0JdGJ6CWNvdW50LCAjMywgMWYKLQls ZHIJdG1wMSwgW3NyY10sICM4Ci0Jc3RyCXRtcDEsIFtkc3RdLCAjOAotMToK LQl0YnoJY291bnQsICMyLCAxZgotCWxkcgl0bXAxdywgW3NyY10sICM0Ci0J c3RyCXRtcDF3LCBbZHN0XSwgIzQKLTE6Ci0JdGJ6CWNvdW50LCAjMSwgMWYK LQlsZHJoCXRtcDF3LCBbc3JjXSwgIzIKLQlzdHJoCXRtcDF3LCBbZHN0XSwg IzIKLTE6Ci0JdGJ6CWNvdW50LCAjMCwgMWYKLQlsZHJiCXRtcDF3LCBbc3Jj XQotCXN0cmIJdG1wMXcsIFtkc3RdCi0xOgotCVJFVAotCi1MKG1vdl9ub3Rf c2hvcnRfZG93bik6Ci0JLyogV2UgZG9uJ3QgbXVjaCBjYXJlIGFib3V0IHRo ZSBhbGlnbm1lbnQgb2YgRFNULCBidXQgd2Ugd2FudCBTUkMKLQkgKiB0byBi ZSAxMjgtYml0ICgxNiBieXRlKSBhbGlnbmVkIHNvIHRoYXQgd2UgZG9uJ3Qg Y3Jvc3MgY2FjaGUgbGluZQotCSAqIGJvdW5kYXJpZXMgb24gYm90aCBsb2Fk cyBhbmQgc3RvcmVzLiAgKi8KLQluZWcJdG1wMiwgc3JjCi0JYW5kcwl0bXAy LCB0bXAyLCAjMTUJCS8qIEJ5dGVzIHRvIHJlYWNoIGFsaWdubWVudC4gICov Ci0JYi5lcQkyZgotCXN1Ygljb3VudCwgY291bnQsIHRtcDIKLQkvKiBNb3Zl IGVub3VnaCBkYXRhIHRvIHJlYWNoIGFsaWdubWVudDsgdW5saWtlIG1lbWNw eSwgd2UgaGF2ZSB0bwotCSAqIGJlIGF3YXJlIG9mIHRoZSBvdmVybGFwLCB3 aGljaCBtZWFucyB3ZSBjYW4ndCBtb3ZlIGRhdGEgdHdpY2UuICAqLwotCXRi egl0bXAyLCAjMywgMWYKLQlsZHIJdG1wMSwgW3NyY10sICM4Ci0Jc3RyCXRt cDEsIFtkc3RdLCAjOAotMToKLQl0YnoJdG1wMiwgIzIsIDFmCi0JbGRyCXRt cDF3LCBbc3JjXSwgIzQKLQlzdHIJdG1wMXcsIFtkc3RdLCAjNAotMToKLQl0 YnoJdG1wMiwgIzEsIDFmCi0JbGRyaAl0bXAxdywgW3NyY10sICMyCi0Jc3Ry aAl0bXAxdywgW2RzdF0sICMyCi0xOgotCXRiegl0bXAyLCAjMCwgMWYKLQls ZHJiCXRtcDF3LCBbc3JjXSwgIzEKLQlzdHJiCXRtcDF3LCBbZHN0XSwgIzEK LTE6Ci0KLQkvKiBUaGVyZSBtYXkgYmUgbGVzcyB0aGFuIDYzIGJ5dGVzIHRv IGdvIG5vdy4gICovCi0JY21wCWNvdW50LCAjNjMKLQliLmxlCUwodGFpbDYz ZG93bikKLTI6Ci0Jc3Vicwljb3VudCwgY291bnQsICMxMjgKLQliLmdlCUwo bW92X2JvZHlfbGFyZ2VfZG93bikKLQkvKiBMZXNzIHRoYW4gMTI4IGJ5dGVz IHRvIG1vdmUsIHNvIGhhbmRsZSA2NCBoZXJlIGFuZCB0aGVuIGp1bXAKLQkg KiB0byB0aGUgdGFpbC4gICovCi0JbGRwCUFfbCwgQV9oLCBbc3JjXQotCWxk cAlCX2wsIEJfaCwgW3NyYywgIzE2XQotCWxkcAlDX2wsIENfaCwgW3NyYywg IzMyXQotCWxkcAlEX2wsIERfaCwgW3NyYywgIzQ4XQotCXN0cAlBX2wsIEFf aCwgW2RzdF0KLQlzdHAJQl9sLCBCX2gsIFtkc3QsICMxNl0KLQlzdHAJQ19s LCBDX2gsIFtkc3QsICMzMl0KLQlzdHAJRF9sLCBEX2gsIFtkc3QsICM0OF0K LQl0c3QJY291bnQsICMweDNmCi0JYWRkCXNyYywgc3JjLCAjNjQKLQlhZGQJ ZHN0LCBkc3QsICM2NAotCWIubmUJTCh0YWlsNjNkb3duKQotCVJFVAotCi0J LyogQ3JpdGljYWwgbG9vcC4gIFN0YXJ0IGF0IGEgbmV3IGNhY2hlIGxpbmUg Ym91bmRhcnkuICBBc3N1bWluZwotCSAqIDY0IGJ5dGVzIHBlciBsaW5lIHRo aXMgZW5zdXJlcyB0aGUgZW50aXJlIGxvb3AgaXMgaW4gb25lIGxpbmUuICAq LwotCS5wMmFsaWduIDYKLUwobW92X2JvZHlfbGFyZ2VfZG93bik6Ci0JLyog VGhlcmUgYXJlIGF0IGxlYXN0IDEyOCBieXRlcyB0byBtb3ZlLiAgKi8KLQls ZHAJQV9sLCBBX2gsIFtzcmMsICMwXQotCXN1Yglkc3QsIGRzdCwgIzE2CQkv KiBQcmUtYmlhcy4gICovCi0JbGRwCUJfbCwgQl9oLCBbc3JjLCAjMTZdCi0J bGRwCUNfbCwgQ19oLCBbc3JjLCAjMzJdCi0JbGRwCURfbCwgRF9oLCBbc3Jj LCAjNDhdIQkvKiBzcmMgKz0gNjQgLSBQcmUtYmlhcy4gICovCi0xOgotCXN0 cAlBX2wsIEFfaCwgW2RzdCwgIzE2XQotCWxkcAlBX2wsIEFfaCwgW3NyYywg IzE2XQotCXN0cAlCX2wsIEJfaCwgW2RzdCwgIzMyXQotCWxkcAlCX2wsIEJf aCwgW3NyYywgIzMyXQotCXN0cAlDX2wsIENfaCwgW2RzdCwgIzQ4XQotCWxk cAlDX2wsIENfaCwgW3NyYywgIzQ4XQotCXN0cAlEX2wsIERfaCwgW2RzdCwg IzY0XSEKLQlsZHAJRF9sLCBEX2gsIFtzcmMsICM2NF0hCi0Jc3Vicwljb3Vu dCwgY291bnQsICM2NAotCWIuZ2UJMWIKLQlzdHAJQV9sLCBBX2gsIFtkc3Qs ICMxNl0KLQlzdHAJQl9sLCBCX2gsIFtkc3QsICMzMl0KLQlzdHAJQ19sLCBD X2gsIFtkc3QsICM0OF0KLQlzdHAJRF9sLCBEX2gsIFtkc3QsICM2NF0KLQlh ZGQJc3JjLCBzcmMsICMxNgotCWFkZAlkc3QsIGRzdCwgIzY0ICsgMTYKLQl0 c3QJY291bnQsICMweDNmCi0JYi5uZQlMKHRhaWw2M2Rvd24pCi0JUkVUCi1F TkQgKG1lbW1vdmUpCi0KLWxpYmNfaGlkZGVuX2J1aWx0aW5fZGVmIChtZW1t b3ZlKQorLyogbWVtbW92ZSBpcyBwYXJ0IG9mIG1lbWNweS5TLiAgKi8K --_002_AM3PR08MB0088D8D0A0D283D1B7B70535834A0AM3PR08MB0088eurp_--