Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sgKx7-000sFk-0v for pgsql-hackers@arkaria.postgresql.org; Tue, 20 Aug 2024 09:14:58 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1sgKx4-00D4vr-UF for pgsql-hackers@arkaria.postgresql.org; Tue, 20 Aug 2024 09:14:55 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sgKx4-00D4uu-2Y for pgsql-hackers@lists.postgresql.org; Tue, 20 Aug 2024 09:14:55 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sgKwy-000Xl5-5G for pgsql-hackers@postgresql.org; Tue, 20 Aug 2024 09:14:53 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1724145284; bh=xCGCP4y8vj1Ci6W8iG73Irq2eRU6WaN/aZov6aSiRU0=; h=Date:From:To:Cc:Subject:In-Reply-To:References:User-Agent: Message-ID:From; b=3uGF6Ye/nDmjpFeKE00PtjePqrra7/MP60u3YlZ02A9BK8aTccGaFc9AVNoIwqrNi Wtfzoc3YZtNCS7FxmC9IRFa5IqnFVlkVDybJNVxu9META4FL23NKTkDUia6whMMSjs j3yZJI5vqQeUZ7j50ERKb8GNO+NFMIJ4DXCAleeYEioxWhmtpdctdde8fHFJiILha4 DLYjJq4gyiYqMNBJ60NSYwxNgFI2ThBYozC/+HSUFbqQzvuzFj68Rl7jNHRXYZhjuN vNJ8LiybsvDY3K7QH1i7fZFe4c8816WJO2npWqyZStccSx1pv8N0hz3KDDg6xzpPTS W1ecyD6iJkSDw== Received: from mail.postgrespro.ru (unknown [192.168.2.28]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (Client did not present a certificate) (Authenticated sender: a.pyhalov@postgrespro.ru) by mail.postgrespro.ru (Postfix/587) with ESMTPSA id 5742460A9C; Tue, 20 Aug 2024 12:14:44 +0300 (MSK) MIME-Version: 1.0 Date: Tue, 20 Aug 2024 12:14:44 +0300 From: Alexander Pyhalov To: Alena Rybakina Cc: Pgsql Hackers Subject: Re: Asynchronous MergeAppend In-Reply-To: <764dd8b8-6374-4f5a-aac7-d8e3f6ebe5fd@postgrespro.ru> References: <59be194c5a409fb9fc9f2031581b8a44@postgrespro.ru> <764dd8b8-6374-4f5a-aac7-d8e3f6ebe5fd@postgrespro.ru> User-Agent: Roundcube Webmail/1.6.8 Message-ID: <159b591411bb2c81332018927acbd509@postgrespro.ru> X-Sender: a.pyhalov@postgrespro.ru Content-Type: multipart/mixed; boundary="=_7e127d5b807827e3194b9241facd45f2" X-KSMG-AntiPhishing: NotDetected X-KSMG-AntiSpam-Interceptor-Info: not scanned X-KSMG-AntiSpam-Status: not scanned, disabled by settings X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 2.1.0.7854, bases: 2024/08/20 03:45:00 #26365304 X-KSMG-AntiVirus-Status: NotDetected, skipped X-KSMG-LinksScanning: not scanned, disabled by settings X-KSMG-Message-Action: skipped X-KSMG-Rule-ID: 1 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_7e127d5b807827e3194b9241facd45f2 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8; format=flowed Hi. Alena Rybakina писал(а) 2024-08-10 23:24: > Hi! Thank you for your work on this subject! I think this is a very > useful optimization) > > While looking through your code, I noticed some points that I think > should be taken into account. Firstly, I noticed only two tests to > verify the functionality of this function and I think that this is not > enough. > Are you thinking about adding some tests with queries involving, for > example, join connections with different tables and unusual operators? I've added some more tests - tests for joins and pruning. > > In addition, I have a question about testing your feature on a > benchmark. Are you going to do this? > The main reason for this work is a dramatic performance degradation when Append plans with async foreign scan nodes are switched to MergeAppend plans with synchronous foreign scans. I've performed some synthetic tests to prove the benefits of async Merge Append. So far tests are performed on one physical host. For tests I've deployed 3 PostgreSQL instances on ports 5432-5434. The first instance: create server s2 foreign data wrapper postgres_fdw OPTIONS ( port '5433', dbname 'postgres', async_capable 'on'); create server s3 foreign data wrapper postgres_fdw OPTIONS ( port '5434', dbname 'postgres', async_capable 'on'); create foreign table players_p1 partition of players for values with (modulus 4, remainder 0) server s2; create foreign table players_p2 partition of players for values with (modulus 4, remainder 1) server s2; create foreign table players_p3 partition of players for values with (modulus 4, remainder 2) server s3; create foreign table players_p4 partition of players for values with (modulus 4, remainder 3) server s3; s2 instance: create table players_p1 (id int, name text, score int); create table players_p2 (id int, name text, score int); create index on players_p1(score); create index on players_p2(score); s3 instance: create table players_p3 (id int, name text, score int); create table players_p4 (id int, name text, score int); create index on players_p3(score); create index on players_p4(score); s1 instance: insert into players select i, 'player_' ||i, random()* 100 from generate_series(1,100000) i; pgbench script: \set rnd_offset random(0,200) \set rnd_limit random(10,20) select * from players order by score desc offset :rnd_offset limit :rnd_limit; pgbench was run as: pgbench -n -f 1.sql postgres -T 100 -c 16 -j 16 CPU idle was about 5-10%. pgbench results: Without patch, async_capable on: pgbench (14.13, server 18devel) transaction type: 1.sql scaling factor: 1 query mode: simple number of clients: 16 number of threads: 16 duration: 100 s number of transactions actually processed: 130523 latency average = 12.257 ms initial connection time = 29.824 ms tps = 1305.363500 (without initial connection time) Without patch, async_capable off: pgbench (14.13, server 18devel) transaction type: 1.sql scaling factor: 1 query mode: simple number of clients: 16 number of threads: 16 duration: 100 s number of transactions actually processed: 130075 latency average = 12.299 ms initial connection time = 26.931 ms tps = 1300.877993 (without initial connection time) as expected - we see no difference. Patched, async_capable on: pgbench (14.13, server 18devel) transaction type: 1.sql scaling factor: 1 query mode: simple number of clients: 16 number of threads: 16 duration: 100 s number of transactions actually processed: 135616 latency average = 11.796 ms initial connection time = 28.619 ms tps = 1356.341587 (without initial connection time) Patched, async_capable off: pgbench (14.13, server 18devel) transaction type: 1.sql scaling factor: 1 query mode: simple number of clients: 16 number of threads: 16 duration: 100 s number of transactions actually processed: 131300 latency average = 12.185 ms initial connection time = 29.573 ms tps = 1313.138405 (without initial connection time) Here we can see that async MergeAppend behaves a bit better. You can argue that benefit is not so big and perhaps is related to some random factors. However, if we set number of threads to 1, so that CPU has idle cores, we'll see more evident improvements: Patched, async_capable on: pgbench (14.13, server 18devel) transaction type: 1.sql scaling factor: 1 query mode: simple number of clients: 1 number of threads: 1 duration: 100 s number of transactions actually processed: 20221 latency average = 4.945 ms initial connection time = 7.035 ms tps = 202.221816 (without initial connection time) Patched, async_capable off transaction type: 1.sql scaling factor: 1 query mode: simple number of clients: 1 number of threads: 1 duration: 100 s number of transactions actually processed: 14941 latency average = 6.693 ms initial connection time = 7.037 ms tps = 149.415688 (without initial connection time) -- Best regards, Alexander Pyhalov, Postgres Professional --=_7e127d5b807827e3194b9241facd45f2 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v2-0002-MergeAppend-should-support-Async-Foreign-Scan-subpla.patch Content-Disposition: attachment; filename*0*=UTF-8''v2-0002-MergeAppend-should-support-Async-Foreign-Scan-; filename*1*=subpla.patch; size=46319 RnJvbSA2NzQ3N2FiNDUyZGZjNTdhYTllNDdlNDQ2MmM5Zjg3YjY2OTExOTUxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgUHloYWxvdiA8YS5weWhhbG92QHBvc3RncmVz cHJvLnJ1PgpEYXRlOiBXZWQsIDE5IEp1bCAyMDIzIDE1OjQyOjI0ICswMzAwClN1YmplY3Q6IFtQ QVRDSCAyLzJdIE1lcmdlQXBwZW5kIHNob3VsZCBzdXBwb3J0IEFzeW5jIEZvcmVpZ24gU2NhbiBz dWJwbGFucwoKLS0tCiAuLi4vcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQg ICAgfCAyNDcgKysrKysrKysrKwogY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMg ICAgICAgICAgIHwgIDEwICstCiBjb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3 LnNxbCAgICAgfCAgNzggKysrCiBkb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgICAgICAgICAgICAg ICAgICAgICAgfCAgMTQgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FzeW5jLmMgICAgICAg ICAgICAgIHwgICA0ICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jICAg ICAgICB8IDQ1OCArKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRo L2Nvc3RzaXplLmMgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9j cmVhdGVwbGFuLmMgICAgICAgfCAgIDggKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFi bGVzLmMgICAgICAgICAgIHwgIDEwICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNx bC5jb25mLnNhbXBsZSB8ICAgMSArCiBzcmMvaW5jbHVkZS9leGVjdXRvci9ub2RlTWVyZ2VBcHBl bmQuaCAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggICAgICAg ICAgICAgICAgIHwgIDU2ICsrKwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaCAgICAgICAg ICAgICAgICAgIHwgICAxICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0 ICAgICAgICB8ICAgMyArLQogMTQgZmlsZXMgY2hhbmdlZCwgODg2IGluc2VydGlvbnMoKyksIDYg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQv cG9zdGdyZXNfZmR3Lm91dCBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVz X2Zkdy5vdXQKaW5kZXggZjNlYjA1NWUyYzcuLjNhYmE1YTg3N2FmIDEwMDY0NAotLS0gYS9jb250 cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CisrKyBiL2NvbnRyaWIv cG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQKQEAgLTExMTk0LDYgKzExMTk0 LDQ2IEBAIFNFTEVDVCAqIEZST00gcmVzdWx0X3RibCBPUkRFUiBCWSBhOwogKDIgcm93cykKIAog REVMRVRFIEZST00gcmVzdWx0X3RibDsKKy0tIFRlc3QgTWVyZ2UgQXBwZW5kCitFWFBMQUlOIChW RVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIGFzeW5jX3B0IFdIRVJFIGIgJSAxMDAg PSAwIE9SREVSIEJZIGIsIGE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEFw cGVuZAorICAgU29ydCBLZXk6IGFzeW5jX3B0LmIsIGFzeW5jX3B0LmEKKyAgIC0+ICBBc3luYyBG b3JlaWduIFNjYW4gb24gcHVibGljLmFzeW5jX3AxIGFzeW5jX3B0XzEKKyAgICAgICAgIE91dHB1 dDogYXN5bmNfcHRfMS5hLCBhc3luY19wdF8xLmIsIGFzeW5jX3B0XzEuYworICAgICAgICAgUmVt b3RlIFNRTDogU0VMRUNUIGEsIGIsIGMgRlJPTSBwdWJsaWMuYmFzZV90YmwxIFdIRVJFICgoKGIg JSAxMDApID0gMCkpIE9SREVSIEJZIGIgQVNDIE5VTExTIExBU1QsIGEgQVNDIE5VTExTIExBU1QK KyAgIC0+ICBBc3luYyBGb3JlaWduIFNjYW4gb24gcHVibGljLmFzeW5jX3AyIGFzeW5jX3B0XzIK KyAgICAgICAgIE91dHB1dDogYXN5bmNfcHRfMi5hLCBhc3luY19wdF8yLmIsIGFzeW5jX3B0XzIu YworICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNUIGEsIGIsIGMgRlJPTSBwdWJsaWMuYmFzZV90 YmwyIFdIRVJFICgoKGIgJSAxMDApID0gMCkpIE9SREVSIEJZIGIgQVNDIE5VTExTIExBU1QsIGEg QVNDIE5VTExTIExBU1QKKyg4IHJvd3MpCisKK1NFTEVDVCAqIEZST00gYXN5bmNfcHQgV0hFUkUg YiAlIDEwMCA9IDAgT1JERVIgQlkgYiwgYTsKKyAgYSAgIHwgIGIgIHwgIGMgICAKKy0tLS0tLSst LS0tLSstLS0tLS0KKyAxMDAwIHwgICAwIHwgMDAwMAorIDIwMDAgfCAgIDAgfCAwMDAwCisgMTEw MCB8IDEwMCB8IDAxMDAKKyAyMTAwIHwgMTAwIHwgMDEwMAorIDEyMDAgfCAyMDAgfCAwMjAwCisg MjIwMCB8IDIwMCB8IDAyMDAKKyAxMzAwIHwgMzAwIHwgMDMwMAorIDIzMDAgfCAzMDAgfCAwMzAw CisgMTQwMCB8IDQwMCB8IDA0MDAKKyAyNDAwIHwgNDAwIHwgMDQwMAorIDE1MDAgfCA1MDAgfCAw NTAwCisgMjUwMCB8IDUwMCB8IDA1MDAKKyAxNjAwIHwgNjAwIHwgMDYwMAorIDI2MDAgfCA2MDAg fCAwNjAwCisgMTcwMCB8IDcwMCB8IDA3MDAKKyAyNzAwIHwgNzAwIHwgMDcwMAorIDE4MDAgfCA4 MDAgfCAwODAwCisgMjgwMCB8IDgwMCB8IDA4MDAKKyAxOTAwIHwgOTAwIHwgMDkwMAorIDI5MDAg fCA5MDAgfCAwOTAwCisoMjAgcm93cykKKwogLS0gVGVzdCBlcnJvciBoYW5kbGluZywgaWYgYWNj ZXNzaW5nIG9uZSBvZiB0aGUgZm9yZWlnbiBwYXJ0aXRpb25zIGVycm9ycyBvdXQKIENSRUFURSBG T1JFSUdOIFRBQkxFIGFzeW5jX3BfYnJva2VuIFBBUlRJVElPTiBPRiBhc3luY19wdCBGT1IgVkFM VUVTIEZST00gKDEwMDAwKSBUTyAoMTAwMDEpCiAgIFNFUlZFUiBsb29wYmFjayBPUFRJT05TICh0 YWJsZV9uYW1lICdub25fZXhpc3RlbnRfdGFibGUnKTsKQEAgLTExMjM3LDYgKzExMjc3LDM1IEBA IFNFTEVDVCAqIEZST00gcmVzdWx0X3RibCBPUkRFUiBCWSBhOwogKDMgcm93cykKIAogREVMRVRF IEZST00gcmVzdWx0X3RibDsKKy0tIFRlc3QgTWVyZ2UgQXBwZW5kCitFWFBMQUlOIChWRVJCT1NF LCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIGFzeW5jX3B0IFdIRVJFIGIgPT09IDUwNSBPUkRF UiBCWSBiLCBhOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBB cHBlbmQKKyAgIFNvcnQgS2V5OiBhc3luY19wdC5iLCBhc3luY19wdC5hCisgICAtPiAgQXN5bmMg Rm9yZWlnbiBTY2FuIG9uIHB1YmxpYy5hc3luY19wMSBhc3luY19wdF8xCisgICAgICAgICBPdXRw dXQ6IGFzeW5jX3B0XzEuYSwgYXN5bmNfcHRfMS5iLCBhc3luY19wdF8xLmMKKyAgICAgICAgIEZp bHRlcjogKGFzeW5jX3B0XzEuYiA9PT0gNTA1KQorICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNU IGEsIGIsIGMgRlJPTSBwdWJsaWMuYmFzZV90YmwxIE9SREVSIEJZIGIgQVNDIE5VTExTIExBU1Qs IGEgQVNDIE5VTExTIExBU1QKKyAgIC0+ICBBc3luYyBGb3JlaWduIFNjYW4gb24gcHVibGljLmFz eW5jX3AyIGFzeW5jX3B0XzIKKyAgICAgICAgIE91dHB1dDogYXN5bmNfcHRfMi5hLCBhc3luY19w dF8yLmIsIGFzeW5jX3B0XzIuYworICAgICAgICAgRmlsdGVyOiAoYXN5bmNfcHRfMi5iID09PSA1 MDUpCisgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgYSwgYiwgYyBGUk9NIHB1YmxpYy5iYXNl X3RibDIgT1JERVIgQlkgYiBBU0MgTlVMTFMgTEFTVCwgYSBBU0MgTlVMTFMgTEFTVAorICAgLT4g IEFzeW5jIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuYXN5bmNfcDMgYXN5bmNfcHRfMworICAgICAg ICAgT3V0cHV0OiBhc3luY19wdF8zLmEsIGFzeW5jX3B0XzMuYiwgYXN5bmNfcHRfMy5jCisgICAg ICAgICBGaWx0ZXI6IChhc3luY19wdF8zLmIgPT09IDUwNSkKKyAgICAgICAgIFJlbW90ZSBTUUw6 IFNFTEVDVCBhLCBiLCBjIEZST00gcHVibGljLmJhc2VfdGJsMyBPUkRFUiBCWSBiIEFTQyBOVUxM UyBMQVNULCBhIEFTQyBOVUxMUyBMQVNUCisoMTQgcm93cykKKworU0VMRUNUICogRlJPTSBhc3lu Y19wdCBXSEVSRSBiID09PSA1MDUgT1JERVIgQlkgYiwgYTsKKyAgYSAgIHwgIGIgIHwgIGMgICAK Ky0tLS0tLSstLS0tLSstLS0tLS0KKyAxNTA1IHwgNTA1IHwgMDUwNQorIDI1MDUgfCA1MDUgfCAw NTA1CisgMzUwNSB8IDUwNSB8IDA1MDUKKygzIHJvd3MpCisKIERST1AgRk9SRUlHTiBUQUJMRSBh c3luY19wMzsKIERST1AgVEFCTEUgYmFzZV90YmwzOwogLS0gQ2hlY2sgY2FzZSB3aGVyZSB0aGUg cGFydGl0aW9uZWQgdGFibGUgaGFzIGxvY2FsL3JlbW90ZSBwYXJ0aXRpb25zCkBAIC0xMTI3Miw2 ICsxMTM0MSwzNyBAQCBTRUxFQ1QgKiBGUk9NIHJlc3VsdF90YmwgT1JERVIgQlkgYTsKICgzIHJv d3MpCiAKIERFTEVURSBGUk9NIHJlc3VsdF90Ymw7CistLSBUZXN0IE1lcmdlIEFwcGVuZAorRVhQ TEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBhc3luY19wdCBXSEVSRSBi ID09PSA1MDUgT1JERVIgQlkgYiwgYTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgTWVyZ2UgQXBwZW5kCisgICBTb3J0IEtleTogYXN5bmNfcHQuYiwgYXN5bmNfcHQuYQor ICAgLT4gIEFzeW5jIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuYXN5bmNfcDEgYXN5bmNfcHRfMQor ICAgICAgICAgT3V0cHV0OiBhc3luY19wdF8xLmEsIGFzeW5jX3B0XzEuYiwgYXN5bmNfcHRfMS5j CisgICAgICAgICBGaWx0ZXI6IChhc3luY19wdF8xLmIgPT09IDUwNSkKKyAgICAgICAgIFJlbW90 ZSBTUUw6IFNFTEVDVCBhLCBiLCBjIEZST00gcHVibGljLmJhc2VfdGJsMSBPUkRFUiBCWSBiIEFT QyBOVUxMUyBMQVNULCBhIEFTQyBOVUxMUyBMQVNUCisgICAtPiAgQXN5bmMgRm9yZWlnbiBTY2Fu IG9uIHB1YmxpYy5hc3luY19wMiBhc3luY19wdF8yCisgICAgICAgICBPdXRwdXQ6IGFzeW5jX3B0 XzIuYSwgYXN5bmNfcHRfMi5iLCBhc3luY19wdF8yLmMKKyAgICAgICAgIEZpbHRlcjogKGFzeW5j X3B0XzIuYiA9PT0gNTA1KQorICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNUIGEsIGIsIGMgRlJP TSBwdWJsaWMuYmFzZV90YmwyIE9SREVSIEJZIGIgQVNDIE5VTExTIExBU1QsIGEgQVNDIE5VTExT IExBU1QKKyAgIC0+ICBTb3J0CisgICAgICAgICBPdXRwdXQ6IGFzeW5jX3B0XzMuYSwgYXN5bmNf cHRfMy5iLCBhc3luY19wdF8zLmMKKyAgICAgICAgIFNvcnQgS2V5OiBhc3luY19wdF8zLmIsIGFz eW5jX3B0XzMuYQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5hc3luY19wMyBhc3lu Y19wdF8zCisgICAgICAgICAgICAgICBPdXRwdXQ6IGFzeW5jX3B0XzMuYSwgYXN5bmNfcHRfMy5i LCBhc3luY19wdF8zLmMKKyAgICAgICAgICAgICAgIEZpbHRlcjogKGFzeW5jX3B0XzMuYiA9PT0g NTA1KQorKDE2IHJvd3MpCisKK1NFTEVDVCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYiA9PT0gNTA1 IE9SREVSIEJZIGIsIGE7CisgIGEgICB8ICBiICB8ICBjICAgCistLS0tLS0rLS0tLS0rLS0tLS0t CisgMTUwNSB8IDUwNSB8IDA1MDUKKyAyNTA1IHwgNTA1IHwgMDUwNQorIDM1MDUgfCA1MDUgfCAw NTA1CisoMyByb3dzKQorCiAtLSBwYXJ0aXRpb253aXNlIGpvaW5zCiBTRVQgZW5hYmxlX3BhcnRp dGlvbndpc2Vfam9pbiBUTyB0cnVlOwogQ1JFQVRFIFRBQkxFIGpvaW5fdGJsIChhMSBpbnQsIGIx IGludCwgYzEgdGV4dCwgYTIgaW50LCBiMiBpbnQsIGMyIHRleHQpOwpAQCAtMTIwNTQsNiArMTIx NTQsMTUzIEBAIFNFTEVDVCBhIEZST00gYmFzZV90YmwgV0hFUkUgKGEsIHJhbmRvbSgpID4gMCkg SU4gKFNFTEVDVCBhLCByYW5kb20oKSA+IDAgRlJPTSBmCiBEUk9QIEZPUkVJR04gVEFCTEUgZm9y ZWlnbl90YmwgQ0FTQ0FERTsKIE5PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gZm9yZWlnbiB0YWJs ZSBmb3JlaWduX3RibDIKIERST1AgVEFCTEUgYmFzZV90Ymw7CistLSBUZXN0IGFzeW5jIE1lcmdl IEFwcGVuZAorQ1JFQVRFIFRBQkxFIGRpc3RyMSAoaSBpbnQsIGogaW50LCBrIHRleHQpIFBBUlRJ VElPTiBCWSBIQVNIIChpKTsKK0NSRUFURSBUQUJMRSBiYXNlMSAoaSBpbnQsIGogaW50LCBrIHRl eHQpOworQ1JFQVRFIFRBQkxFIGJhc2UyIChpIGludCwgaiBpbnQsIGsgdGV4dCk7CitDUkVBVEUg Rk9SRUlHTiBUQUJMRSBkaXN0cjFfcDEgUEFSVElUSU9OIE9GIGRpc3RyMSBGT1IgVkFMVUVTIFdJ VEggKE1PRFVMVVMgMiwgUkVNQUlOREVSIDApCitTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAodGFi bGVfbmFtZSAnYmFzZTEnKTsKK0NSRUFURSBGT1JFSUdOIFRBQkxFIGRpc3RyMV9wMiBQQVJUSVRJ T04gT0YgZGlzdHIxIEZPUiBWQUxVRVMgV0lUSCAoTU9EVUxVUyAyLCBSRU1BSU5ERVIgMSkKK1NF UlZFUiBsb29wYmFjayBPUFRJT05TICh0YWJsZV9uYW1lICdiYXNlMicpOworQ1JFQVRFIFRBQkxF IGRpc3RyMiAoaSBpbnQsIGogaW50LCBrIHRleHQpIFBBUlRJVElPTiBCWSBIQVNIIChpKTsKK0NS RUFURSBUQUJMRSBiYXNlMyAoaSBpbnQsIGogaW50LCBrIHRleHQpOworQ1JFQVRFIFRBQkxFIGJh c2U0IChpIGludCwgaiBpbnQsIGsgdGV4dCk7CitDUkVBVEUgRk9SRUlHTiBUQUJMRSBkaXN0cjJf cDEgUEFSVElUSU9OIE9GIGRpc3RyMiBGT1IgVkFMVUVTIFdJVEggKE1PRFVMVVMgMiwgUkVNQUlO REVSIDApCitTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAodGFibGVfbmFtZSAnYmFzZTMnKTsKK0NS RUFURSBGT1JFSUdOIFRBQkxFIGRpc3RyMl9wMiBQQVJUSVRJT04gT0YgZGlzdHIyIEZPUiBWQUxV RVMgV0lUSCAoTU9EVUxVUyAyLCBSRU1BSU5ERVIgMSkKK1NFUlZFUiBsb29wYmFjayBPUFRJT05T ICh0YWJsZV9uYW1lICdiYXNlNCcpOworSU5TRVJUIElOVE8gZGlzdHIxCitTRUxFQ1QgaSwgaSox MCwgJ2RhdGFfJyB8fCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDApIGk7CitJTlNFUlQg SU5UTyBkaXN0cjIKK1NFTEVDVCBpLCBpKjEwLCAnZGF0YV8nIHx8IGkgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwgMTAwKSBpOworQU5BTFlaRSBkaXN0cjFfcDE7CitBTkFMWVpFIGRpc3RyMV9wMjsK K0FOQUxZWkUgZGlzdHIyX3AxOworQU5BTFlaRSBkaXN0cjJfcDI7CitTRVQgZW5hYmxlX3BhcnRp dGlvbndpc2Vfam9pbiBUTyBPTjsKKy0tIFRlc3Qgam9pbnMgd2l0aCBhc3luYyBNZXJnZSBBcHBl bmQKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gZGlzdHIxLCBk aXN0cjIgV0hFUkUgZGlzdHIxLmk9ZGlzdHIyLmkgQU5EIGRpc3RyMi5qID4gOTAgYW5kIGRpc3Ry Mi5rIGxpa2UgJ2RhdGElJworT1JERVIgQlkgZGlzdHIyLmkgTElNSVQgMTA7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgTGltaXQKKyAgIE91dHB1dDogZGlzdHIxLmksIGRpc3RyMS5qLCBk aXN0cjEuaywgZGlzdHIyLmksIGRpc3RyMi5qLCBkaXN0cjIuaworICAgLT4gIE1lcmdlIEFwcGVu ZAorICAgICAgICAgU29ydCBLZXk6IGRpc3RyMS5pCisgICAgICAgICAtPiAgQXN5bmMgRm9yZWln biBTY2FuCisgICAgICAgICAgICAgICBPdXRwdXQ6IGRpc3RyMV8xLmksIGRpc3RyMV8xLmosIGRp c3RyMV8xLmssIGRpc3RyMl8xLmksIGRpc3RyMl8xLmosIGRpc3RyMl8xLmsKKyAgICAgICAgICAg ICAgIFJlbGF0aW9uczogKHB1YmxpYy5kaXN0cjFfcDEgZGlzdHIxXzEpIElOTkVSIEpPSU4gKHB1 YmxpYy5kaXN0cjJfcDEgZGlzdHIyXzEpCisgICAgICAgICAgICAgICBSZW1vdGUgU1FMOiBTRUxF Q1QgcjMuaSwgcjMuaiwgcjMuaywgcjUuaSwgcjUuaiwgcjUuayBGUk9NIChwdWJsaWMuYmFzZTEg cjMgSU5ORVIgSk9JTiBwdWJsaWMuYmFzZTMgcjUgT04gKCgocjMuaSA9IHI1LmkpKSBBTkQgKChy NS5qID4gOTApKSBBTkQgKChyNS5rIH5+ICdkYXRhJScpKSkpIE9SREVSIEJZIHIzLmkgQVNDIE5V TExTIExBU1QKKyAgICAgICAgIC0+ICBBc3luYyBGb3JlaWduIFNjYW4KKyAgICAgICAgICAgICAg IE91dHB1dDogZGlzdHIxXzIuaSwgZGlzdHIxXzIuaiwgZGlzdHIxXzIuaywgZGlzdHIyXzIuaSwg ZGlzdHIyXzIuaiwgZGlzdHIyXzIuaworICAgICAgICAgICAgICAgUmVsYXRpb25zOiAocHVibGlj LmRpc3RyMV9wMiBkaXN0cjFfMikgSU5ORVIgSk9JTiAocHVibGljLmRpc3RyMl9wMiBkaXN0cjJf MikKKyAgICAgICAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCByNC5pLCByNC5qLCByNC5rLCBy Ni5pLCByNi5qLCByNi5rIEZST00gKHB1YmxpYy5iYXNlMiByNCBJTk5FUiBKT0lOIHB1YmxpYy5i YXNlNCByNiBPTiAoKChyNC5pID0gcjYuaSkpIEFORCAoKHI2LmogPiA5MCkpIEFORCAoKHI2Lmsg fn4gJ2RhdGElJykpKSkgT1JERVIgQlkgcjQuaSBBU0MgTlVMTFMgTEFTVAorKDEyIHJvd3MpCisK K1NFTEVDVCAqIEZST00gZGlzdHIxLCBkaXN0cjIgV0hFUkUgZGlzdHIxLmk9ZGlzdHIyLmkgQU5E IGRpc3RyMi5qID4gOTAgYW5kIGRpc3RyMi5rIGxpa2UgJ2RhdGElJworT1JERVIgQlkgZGlzdHIy LmkgTElNSVQgMTA7CisgaSAgfCAgaiAgfCAgICBrICAgIHwgaSAgfCAgaiAgfCAgICBrICAgIAor LS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLSstLS0tLSstLS0tLS0tLS0KKyAxMCB8IDEwMCB8IGRh dGFfMTAgfCAxMCB8IDEwMCB8IGRhdGFfMTAKKyAxMSB8IDExMCB8IGRhdGFfMTEgfCAxMSB8IDEx MCB8IGRhdGFfMTEKKyAxMiB8IDEyMCB8IGRhdGFfMTIgfCAxMiB8IDEyMCB8IGRhdGFfMTIKKyAx MyB8IDEzMCB8IGRhdGFfMTMgfCAxMyB8IDEzMCB8IGRhdGFfMTMKKyAxNCB8IDE0MCB8IGRhdGFf MTQgfCAxNCB8IDE0MCB8IGRhdGFfMTQKKyAxNSB8IDE1MCB8IGRhdGFfMTUgfCAxNSB8IDE1MCB8 IGRhdGFfMTUKKyAxNiB8IDE2MCB8IGRhdGFfMTYgfCAxNiB8IDE2MCB8IGRhdGFfMTYKKyAxNyB8 IDE3MCB8IGRhdGFfMTcgfCAxNyB8IDE3MCB8IGRhdGFfMTcKKyAxOCB8IDE4MCB8IGRhdGFfMTgg fCAxOCB8IDE4MCB8IGRhdGFfMTgKKyAxOSB8IDE5MCB8IGRhdGFfMTkgfCAxOSB8IDE5MCB8IGRh dGFfMTkKKygxMCByb3dzKQorCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1Qg KiBGUk9NIGRpc3RyMSBMRUZUIEpPSU4gZGlzdHIyIE9OIGRpc3RyMS5pPWRpc3RyMi5pIEFORCBk aXN0cjIuayBsaWtlICdkYXRhJScgV0hFUkUgIGRpc3RyMS5pID4gOTAKK09SREVSIEJZIGRpc3Ry MS5pIExJTUlUIDIwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTGltaXQKKyAgIE91 dHB1dDogZGlzdHIxLmksIGRpc3RyMS5qLCBkaXN0cjEuaywgZGlzdHIyLmksIGRpc3RyMi5qLCBk aXN0cjIuaworICAgLT4gIE1lcmdlIEFwcGVuZAorICAgICAgICAgU29ydCBLZXk6IGRpc3RyMS5p CisgICAgICAgICAtPiAgQXN5bmMgRm9yZWlnbiBTY2FuCisgICAgICAgICAgICAgICBPdXRwdXQ6 IGRpc3RyMV8xLmksIGRpc3RyMV8xLmosIGRpc3RyMV8xLmssIGRpc3RyMl8xLmksIGRpc3RyMl8x LmosIGRpc3RyMl8xLmsKKyAgICAgICAgICAgICAgIFJlbGF0aW9uczogKHB1YmxpYy5kaXN0cjFf cDEgZGlzdHIxXzEpIExFRlQgSk9JTiAocHVibGljLmRpc3RyMl9wMSBkaXN0cjJfMSkKKyAgICAg ICAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCByNC5pLCByNC5qLCByNC5rLCByNi5pLCByNi5q LCByNi5rIEZST00gKHB1YmxpYy5iYXNlMSByNCBMRUZUIEpPSU4gcHVibGljLmJhc2UzIHI2IE9O ICgoKHI0LmkgPSByNi5pKSkgQU5EICgocjYuayB+fiAnZGF0YSUnKSkpKSBXSEVSRSAoKHI0Lmkg PiA5MCkpIE9SREVSIEJZIHI0LmkgQVNDIE5VTExTIExBU1QKKyAgICAgICAgIC0+ICBBc3luYyBG b3JlaWduIFNjYW4KKyAgICAgICAgICAgICAgIE91dHB1dDogZGlzdHIxXzIuaSwgZGlzdHIxXzIu aiwgZGlzdHIxXzIuaywgZGlzdHIyXzIuaSwgZGlzdHIyXzIuaiwgZGlzdHIyXzIuaworICAgICAg ICAgICAgICAgUmVsYXRpb25zOiAocHVibGljLmRpc3RyMV9wMiBkaXN0cjFfMikgTEVGVCBKT0lO IChwdWJsaWMuZGlzdHIyX3AyIGRpc3RyMl8yKQorICAgICAgICAgICAgICAgUmVtb3RlIFNRTDog U0VMRUNUIHI1LmksIHI1LmosIHI1LmssIHI3LmksIHI3LmosIHI3LmsgRlJPTSAocHVibGljLmJh c2UyIHI1IExFRlQgSk9JTiBwdWJsaWMuYmFzZTQgcjcgT04gKCgocjUuaSA9IHI3LmkpKSBBTkQg KChyNy5rIH5+ICdkYXRhJScpKSkpIFdIRVJFICgocjUuaSA+IDkwKSkgT1JERVIgQlkgcjUuaSBB U0MgTlVMTFMgTEFTVAorKDEyIHJvd3MpCisKK1NFTEVDVCAqIEZST00gZGlzdHIxIExFRlQgSk9J TiBkaXN0cjIgT04gIGRpc3RyMS5pPWRpc3RyMi5pIEFORCBkaXN0cjIuayBsaWtlICdkYXRhJScg V0hFUkUgZGlzdHIxLmkgPiA5MAorT1JERVIgQlkgZGlzdHIxLmkgTElNSVQgMjA7CisgIGkgIHwg IGogICB8ICAgIGsgICAgIHwgIGkgIHwgIGogICB8ICAgIGsgICAgIAorLS0tLS0rLS0tLS0tKy0t LS0tLS0tLS0rLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0KKyAgOTEgfCAgOTEwIHwgZGF0YV85MSAg fCAgOTEgfCAgOTEwIHwgZGF0YV85MQorICA5MiB8ICA5MjAgfCBkYXRhXzkyICB8ICA5MiB8ICA5 MjAgfCBkYXRhXzkyCisgIDkzIHwgIDkzMCB8IGRhdGFfOTMgIHwgIDkzIHwgIDkzMCB8IGRhdGFf OTMKKyAgOTQgfCAgOTQwIHwgZGF0YV85NCAgfCAgOTQgfCAgOTQwIHwgZGF0YV85NAorICA5NSB8 ICA5NTAgfCBkYXRhXzk1ICB8ICA5NSB8ICA5NTAgfCBkYXRhXzk1CisgIDk2IHwgIDk2MCB8IGRh dGFfOTYgIHwgIDk2IHwgIDk2MCB8IGRhdGFfOTYKKyAgOTcgfCAgOTcwIHwgZGF0YV85NyAgfCAg OTcgfCAgOTcwIHwgZGF0YV85NworICA5OCB8ICA5ODAgfCBkYXRhXzk4ICB8ICA5OCB8ICA5ODAg fCBkYXRhXzk4CisgIDk5IHwgIDk5MCB8IGRhdGFfOTkgIHwgIDk5IHwgIDk5MCB8IGRhdGFfOTkK KyAxMDAgfCAxMDAwIHwgZGF0YV8xMDAgfCAxMDAgfCAxMDAwIHwgZGF0YV8xMDAKKyAxMDEgfCAx MDEwIHwgZGF0YV8xMDEgfCAgICAgfCAgICAgIHwgCisgMTAyIHwgMTAyMCB8IGRhdGFfMTAyIHwg ICAgIHwgICAgICB8IAorIDEwMyB8IDEwMzAgfCBkYXRhXzEwMyB8ICAgICB8ICAgICAgfCAKKyAx MDQgfCAxMDQwIHwgZGF0YV8xMDQgfCAgICAgfCAgICAgIHwgCisgMTA1IHwgMTA1MCB8IGRhdGFf MTA1IHwgICAgIHwgICAgICB8IAorIDEwNiB8IDEwNjAgfCBkYXRhXzEwNiB8ICAgICB8ICAgICAg fCAKKyAxMDcgfCAxMDcwIHwgZGF0YV8xMDcgfCAgICAgfCAgICAgIHwgCisgMTA4IHwgMTA4MCB8 IGRhdGFfMTA4IHwgICAgIHwgICAgICB8IAorIDEwOSB8IDEwOTAgfCBkYXRhXzEwOSB8ICAgICB8 ICAgICAgfCAKKyAxMTAgfCAxMTAwIHwgZGF0YV8xMTAgfCAgICAgfCAgICAgIHwgCisoMjAgcm93 cykKKworLS0gVGVzdCBwcnVuaW5nIHdpdGggYXN5bmMgTWVyZ2UgQXBwZW5kCitERUxFVEUgRlJP TSBkaXN0cjI7CitJTlNFUlQgSU5UTyBkaXN0cjIKK1NFTEVDVCBpJTEwLCBpKjEwLCAnZGF0YV8n IHx8IGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMCkgaTsKK0RFQUxMT0NBVEUgQUxMOwor U0VUIHBsYW5fY2FjaGVfbW9kZSBUTyBmb3JjZV9nZW5lcmljX3BsYW47CitQUkVQQVJFIGFzeW5j X3B0X3F1ZXJ5IChpbnQsIGludCkgQVMKKyAgU0VMRUNUICogRlJPTSBkaXN0cjIgV0hFUkUgaSA9 IEFOWShBUlJBWVskMSwgJDJdKQorICBPUkRFUiBCWSBpLGoKKyAgTElNSVQgMTA7CitFWFBMQUlO IChWRVJCT1NFLCBDT1NUUyBPRkYpCisJRVhFQ1VURSBhc3luY19wdF9xdWVyeSgxLCAxKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTGltaXQKKyAgIE91dHB1dDogZGlzdHIyLmks IGRpc3RyMi5qLCBkaXN0cjIuaworICAgLT4gIE1lcmdlIEFwcGVuZAorICAgICAgICAgU29ydCBL ZXk6IGRpc3RyMi5pLCBkaXN0cjIuagorICAgICAgICAgU3VicGxhbnMgUmVtb3ZlZDogMQorICAg ICAgICAgLT4gIEFzeW5jIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuZGlzdHIyX3AxIGRpc3RyMl8x CisgICAgICAgICAgICAgICBPdXRwdXQ6IGRpc3RyMl8xLmksIGRpc3RyMl8xLmosIGRpc3RyMl8x LmsKKyAgICAgICAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCBpLCBqLCBrIEZST00gcHVibGlj LmJhc2UzIFdIRVJFICgoaSA9IEFOWSAoQVJSQVlbJDE6OmludGVnZXIsICQyOjppbnRlZ2VyXSkp KSBPUkRFUiBCWSBpIEFTQyBOVUxMUyBMQVNULCBqIEFTQyBOVUxMUyBMQVNUCisoOCByb3dzKQor CitFWEVDVVRFIGFzeW5jX3B0X3F1ZXJ5KDEsIDEpOworIGkgfCAgaiAgfCAgICBrICAgIAorLS0t Ky0tLS0tKy0tLS0tLS0tLQorIDEgfCAgMTAgfCBkYXRhXzEKKyAxIHwgMTEwIHwgZGF0YV8xMQor IDEgfCAyMTAgfCBkYXRhXzIxCisgMSB8IDMxMCB8IGRhdGFfMzEKKyAxIHwgNDEwIHwgZGF0YV80 MQorIDEgfCA1MTAgfCBkYXRhXzUxCisgMSB8IDYxMCB8IGRhdGFfNjEKKyAxIHwgNzEwIHwgZGF0 YV83MQorIDEgfCA4MTAgfCBkYXRhXzgxCisgMSB8IDkxMCB8IGRhdGFfOTEKKygxMCByb3dzKQor CitSRVNFVCBwbGFuX2NhY2hlX21vZGU7CitSRVNFVCBlbmFibGVfcGFydGl0aW9ud2lzZV9qb2lu OworRFJPUCBUQUJMRSBkaXN0cjEsIGRpc3RyMiwgYmFzZTEsIGJhc2UyLCBiYXNlMywgYmFzZTQ7 CiBBTFRFUiBTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAoRFJPUCBhc3luY19jYXBhYmxlKTsKIEFM VEVSIFNFUlZFUiBsb29wYmFjazIgT1BUSU9OUyAoRFJPUCBhc3luY19jYXBhYmxlKTsKIC0tID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5j IGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKaW5kZXggZmM2NWQ4MWUyMTcu LjEzMDkzMTkwZDQ1IDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19m ZHcuYworKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYwpAQCAtNzI2Miwx MiArNzI2MiwxNiBAQCBwb3N0Z3Jlc0ZvcmVpZ25Bc3luY0NvbmZpZ3VyZVdhaXQoQXN5bmNSZXF1 ZXN0ICphcmVxKQogCUZvcmVpZ25TY2FuU3RhdGUgKm5vZGUgPSAoRm9yZWlnblNjYW5TdGF0ZSAq KSBhcmVxLT5yZXF1ZXN0ZWU7CiAJUGdGZHdTY2FuU3RhdGUgKmZzc3RhdGUgPSAoUGdGZHdTY2Fu U3RhdGUgKikgbm9kZS0+ZmR3X3N0YXRlOwogCUFzeW5jUmVxdWVzdCAqcGVuZGluZ0FyZXEgPSBm c3N0YXRlLT5jb25uX3N0YXRlLT5wZW5kaW5nQXJlcTsKLQlBcHBlbmRTdGF0ZSAqcmVxdWVzdG9y ID0gKEFwcGVuZFN0YXRlICopIGFyZXEtPnJlcXVlc3RvcjsKLQlXYWl0RXZlbnRTZXQgKnNldCA9 IHJlcXVlc3Rvci0+YXNfZXZlbnRzZXQ7CisJUGxhblN0YXRlICAqcmVxdWVzdG9yID0gYXJlcS0+ cmVxdWVzdG9yOworCVdhaXRFdmVudFNldCAqc2V0OworCUJpdG1hcHNldCAgKm5lZWRyZXF1ZXN0 OwogCiAJLyogVGhpcyBzaG91bGQgbm90IGJlIGNhbGxlZCB1bmxlc3MgY2FsbGJhY2tfcGVuZGlu ZyAqLwogCUFzc2VydChhcmVxLT5jYWxsYmFja19wZW5kaW5nKTsKIAorCXNldCA9IEdldEFwcGVu ZEV2ZW50U2V0KHJlcXVlc3Rvcik7CisJbmVlZHJlcXVlc3QgPSBHZXROZWVkUmVxdWVzdChyZXF1 ZXN0b3IpOworCiAJLyoKIAkgKiBJZiBwcm9jZXNzX3BlbmRpbmdfcmVxdWVzdCgpIGhhcyBiZWVu IGludm9rZWQgb24gdGhlIGdpdmVuIHJlcXVlc3QKIAkgKiBiZWZvcmUgd2UgZ2V0IGhlcmUsIHdl IG1pZ2h0IGhhdmUgc29tZSB0dXBsZXMgYWxyZWFkeTsgaW4gd2hpY2ggY2FzZQpAQCAtNzMwNSw3 ICs3MzA5LDcgQEAgcG9zdGdyZXNGb3JlaWduQXN5bmNDb25maWd1cmVXYWl0KEFzeW5jUmVxdWVz dCAqYXJlcSkKIAkJICogYmVsb3csIGJlY2F1c2Ugd2UgbWlnaHQgb3RoZXJ3aXNlIGVuZCB1cCB3 aXRoIG5vIGNvbmZpZ3VyZWQgZXZlbnRzCiAJCSAqIG90aGVyIHRoYW4gdGhlIHBvc3RtYXN0ZXIg ZGVhdGggZXZlbnQuCiAJCSAqLwotCQlpZiAoIWJtc19pc19lbXB0eShyZXF1ZXN0b3ItPmFzX25l ZWRyZXF1ZXN0KSkKKwkJaWYgKCFibXNfaXNfZW1wdHkobmVlZHJlcXVlc3QpKQogCQkJcmV0dXJu OwogCQlpZiAoR2V0TnVtUmVnaXN0ZXJlZFdhaXRFdmVudHMoc2V0KSA+IDEpCiAJCQlyZXR1cm47 CmRpZmYgLS1naXQgYS9jb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbCBi L2NvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3FsCmluZGV4IDA3MzQ3MTZh ZDkwLi5kOTA5NzhlOGJmYyAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bv c3RncmVzX2Zkdy5zcWwKKysrIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zk dy5zcWwKQEAgLTM3ODksNiArMzc4OSwxMSBAQCBJTlNFUlQgSU5UTyByZXN1bHRfdGJsIFNFTEVD VCBhLCBiLCAnQUFBJyB8fCBjIEZST00gYXN5bmNfcHQgV0hFUkUgYiA9PT0gNTA1OwogU0VMRUNU ICogRlJPTSByZXN1bHRfdGJsIE9SREVSIEJZIGE7CiBERUxFVEUgRlJPTSByZXN1bHRfdGJsOwog CistLSBUZXN0IE1lcmdlIEFwcGVuZAorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VM RUNUICogRlJPTSBhc3luY19wdCBXSEVSRSBiICUgMTAwID0gMCBPUkRFUiBCWSBiLCBhOworU0VM RUNUICogRlJPTSBhc3luY19wdCBXSEVSRSBiICUgMTAwID0gMCBPUkRFUiBCWSBiLCBhOworCiAt LSBUZXN0IGVycm9yIGhhbmRsaW5nLCBpZiBhY2Nlc3Npbmcgb25lIG9mIHRoZSBmb3JlaWduIHBh cnRpdGlvbnMgZXJyb3JzIG91dAogQ1JFQVRFIEZPUkVJR04gVEFCTEUgYXN5bmNfcF9icm9rZW4g UEFSVElUSU9OIE9GIGFzeW5jX3B0IEZPUiBWQUxVRVMgRlJPTSAoMTAwMDApIFRPICgxMDAwMSkK ICAgU0VSVkVSIGxvb3BiYWNrIE9QVElPTlMgKHRhYmxlX25hbWUgJ25vbl9leGlzdGVudF90YWJs ZScpOwpAQCAtMzgwOSw2ICszODE0LDExIEBAIElOU0VSVCBJTlRPIHJlc3VsdF90YmwgU0VMRUNU ICogRlJPTSBhc3luY19wdCBXSEVSRSBiID09PSA1MDU7CiBTRUxFQ1QgKiBGUk9NIHJlc3VsdF90 YmwgT1JERVIgQlkgYTsKIERFTEVURSBGUk9NIHJlc3VsdF90Ymw7CiAKKy0tIFRlc3QgTWVyZ2Ug QXBwZW5kCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIGFzeW5j X3B0IFdIRVJFIGIgPT09IDUwNSBPUkRFUiBCWSBiLCBhOworU0VMRUNUICogRlJPTSBhc3luY19w dCBXSEVSRSBiID09PSA1MDUgT1JERVIgQlkgYiwgYTsKKwogRFJPUCBGT1JFSUdOIFRBQkxFIGFz eW5jX3AzOwogRFJPUCBUQUJMRSBiYXNlX3RibDM7CiAKQEAgLTM4MjQsNiArMzgzNCwxMSBAQCBJ TlNFUlQgSU5UTyByZXN1bHRfdGJsIFNFTEVDVCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYiA9PT0g NTA1OwogU0VMRUNUICogRlJPTSByZXN1bHRfdGJsIE9SREVSIEJZIGE7CiBERUxFVEUgRlJPTSBy ZXN1bHRfdGJsOwogCistLSBUZXN0IE1lcmdlIEFwcGVuZAorRVhQTEFJTiAoVkVSQk9TRSwgQ09T VFMgT0ZGKQorU0VMRUNUICogRlJPTSBhc3luY19wdCBXSEVSRSBiID09PSA1MDUgT1JERVIgQlkg YiwgYTsKK1NFTEVDVCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYiA9PT0gNTA1IE9SREVSIEJZIGIs IGE7CisKIC0tIHBhcnRpdGlvbndpc2Ugam9pbnMKIFNFVCBlbmFibGVfcGFydGl0aW9ud2lzZV9q b2luIFRPIHRydWU7CiAKQEAgLTQwNjIsNiArNDA3Nyw2OSBAQCBTRUxFQ1QgYSBGUk9NIGJhc2Vf dGJsIFdIRVJFIChhLCByYW5kb20oKSA+IDApIElOIChTRUxFQ1QgYSwgcmFuZG9tKCkgPiAwIEZS T00gZgogRFJPUCBGT1JFSUdOIFRBQkxFIGZvcmVpZ25fdGJsIENBU0NBREU7CiBEUk9QIFRBQkxF IGJhc2VfdGJsOwogCistLSBUZXN0IGFzeW5jIE1lcmdlIEFwcGVuZAorQ1JFQVRFIFRBQkxFIGRp c3RyMSAoaSBpbnQsIGogaW50LCBrIHRleHQpIFBBUlRJVElPTiBCWSBIQVNIIChpKTsKK0NSRUFU RSBUQUJMRSBiYXNlMSAoaSBpbnQsIGogaW50LCBrIHRleHQpOworQ1JFQVRFIFRBQkxFIGJhc2Uy IChpIGludCwgaiBpbnQsIGsgdGV4dCk7CitDUkVBVEUgRk9SRUlHTiBUQUJMRSBkaXN0cjFfcDEg UEFSVElUSU9OIE9GIGRpc3RyMSBGT1IgVkFMVUVTIFdJVEggKE1PRFVMVVMgMiwgUkVNQUlOREVS IDApCitTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAodGFibGVfbmFtZSAnYmFzZTEnKTsKK0NSRUFU RSBGT1JFSUdOIFRBQkxFIGRpc3RyMV9wMiBQQVJUSVRJT04gT0YgZGlzdHIxIEZPUiBWQUxVRVMg V0lUSCAoTU9EVUxVUyAyLCBSRU1BSU5ERVIgMSkKK1NFUlZFUiBsb29wYmFjayBPUFRJT05TICh0 YWJsZV9uYW1lICdiYXNlMicpOworCitDUkVBVEUgVEFCTEUgZGlzdHIyIChpIGludCwgaiBpbnQs IGsgdGV4dCkgUEFSVElUSU9OIEJZIEhBU0ggKGkpOworQ1JFQVRFIFRBQkxFIGJhc2UzIChpIGlu dCwgaiBpbnQsIGsgdGV4dCk7CitDUkVBVEUgVEFCTEUgYmFzZTQgKGkgaW50LCBqIGludCwgayB0 ZXh0KTsKK0NSRUFURSBGT1JFSUdOIFRBQkxFIGRpc3RyMl9wMSBQQVJUSVRJT04gT0YgZGlzdHIy IEZPUiBWQUxVRVMgV0lUSCAoTU9EVUxVUyAyLCBSRU1BSU5ERVIgMCkKK1NFUlZFUiBsb29wYmFj ayBPUFRJT05TICh0YWJsZV9uYW1lICdiYXNlMycpOworQ1JFQVRFIEZPUkVJR04gVEFCTEUgZGlz dHIyX3AyIFBBUlRJVElPTiBPRiBkaXN0cjIgRk9SIFZBTFVFUyBXSVRIIChNT0RVTFVTIDIsIFJF TUFJTkRFUiAxKQorU0VSVkVSIGxvb3BiYWNrIE9QVElPTlMgKHRhYmxlX25hbWUgJ2Jhc2U0Jyk7 CisKK0lOU0VSVCBJTlRPIGRpc3RyMQorU0VMRUNUIGksIGkqMTAsICdkYXRhXycgfHwgaSBGUk9N IGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKSBpOworCitJTlNFUlQgSU5UTyBkaXN0cjIKK1NFTEVD VCBpLCBpKjEwLCAnZGF0YV8nIHx8IGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwKSBpOwor CitBTkFMWVpFIGRpc3RyMV9wMTsKK0FOQUxZWkUgZGlzdHIxX3AyOworQU5BTFlaRSBkaXN0cjJf cDE7CitBTkFMWVpFIGRpc3RyMl9wMjsKKworU0VUIGVuYWJsZV9wYXJ0aXRpb253aXNlX2pvaW4g VE8gT047CisKKy0tIFRlc3Qgam9pbnMgd2l0aCBhc3luYyBNZXJnZSBBcHBlbmQKK0VYUExBSU4g KFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gZGlzdHIxLCBkaXN0cjIgV0hFUkUg ZGlzdHIxLmk9ZGlzdHIyLmkgQU5EIGRpc3RyMi5qID4gOTAgYW5kIGRpc3RyMi5rIGxpa2UgJ2Rh dGElJworT1JERVIgQlkgZGlzdHIyLmkgTElNSVQgMTA7CitTRUxFQ1QgKiBGUk9NIGRpc3RyMSwg ZGlzdHIyIFdIRVJFIGRpc3RyMS5pPWRpc3RyMi5pIEFORCBkaXN0cjIuaiA+IDkwIGFuZCBkaXN0 cjIuayBsaWtlICdkYXRhJScKK09SREVSIEJZIGRpc3RyMi5pIExJTUlUIDEwOworCitFWFBMQUlO IChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIGRpc3RyMSBMRUZUIEpPSU4gZGlz dHIyIE9OIGRpc3RyMS5pPWRpc3RyMi5pIEFORCBkaXN0cjIuayBsaWtlICdkYXRhJScgV0hFUkUg IGRpc3RyMS5pID4gOTAKK09SREVSIEJZIGRpc3RyMS5pIExJTUlUIDIwOworU0VMRUNUICogRlJP TSBkaXN0cjEgTEVGVCBKT0lOIGRpc3RyMiBPTiAgZGlzdHIxLmk9ZGlzdHIyLmkgQU5EIGRpc3Ry Mi5rIGxpa2UgJ2RhdGElJyBXSEVSRSBkaXN0cjEuaSA+IDkwCitPUkRFUiBCWSBkaXN0cjEuaSBM SU1JVCAyMDsKKworLS0gVGVzdCBwcnVuaW5nIHdpdGggYXN5bmMgTWVyZ2UgQXBwZW5kCitERUxF VEUgRlJPTSBkaXN0cjI7CitJTlNFUlQgSU5UTyBkaXN0cjIKK1NFTEVDVCBpJTEwLCBpKjEwLCAn ZGF0YV8nIHx8IGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMCkgaTsKKworREVBTExPQ0FU RSBBTEw7CitTRVQgcGxhbl9jYWNoZV9tb2RlIFRPIGZvcmNlX2dlbmVyaWNfcGxhbjsKK1BSRVBB UkUgYXN5bmNfcHRfcXVlcnkgKGludCwgaW50KSBBUworICBTRUxFQ1QgKiBGUk9NIGRpc3RyMiBX SEVSRSBpID0gQU5ZKEFSUkFZWyQxLCAkMl0pCisgIE9SREVSIEJZIGksagorICBMSU1JVCAxMDsK K0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKKwlFWEVDVVRFIGFzeW5jX3B0X3F1ZXJ5KDEs IDEpOworRVhFQ1VURSBhc3luY19wdF9xdWVyeSgxLCAxKTsKK1JFU0VUIHBsYW5fY2FjaGVfbW9k ZTsKKworUkVTRVQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbjsKKworRFJPUCBUQUJMRSBkaXN0 cjEsIGRpc3RyMiwgYmFzZTEsIGJhc2UyLCBiYXNlMywgYmFzZTQ7CisKIEFMVEVSIFNFUlZFUiBs b29wYmFjayBPUFRJT05TIChEUk9QIGFzeW5jX2NhcGFibGUpOwogQUxURVIgU0VSVkVSIGxvb3Bi YWNrMiBPUFRJT05TIChEUk9QIGFzeW5jX2NhcGFibGUpOwogCmRpZmYgLS1naXQgYS9kb2Mvc3Jj L3NnbWwvY29uZmlnLnNnbWwgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKaW5kZXggMjkzNzM4 NGIwMDEuLmE5YzY2ZmI2ZDU0IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwK KysrIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCkBAIC01MzE2LDYgKzUzMTYsMjAgQEAgQU5Z IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5udW1fc3luYzwvcmVwbGFjZWFibGU+ICgg PHJlcGxhY2VhYmxlIGNsYXNzPSIKICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVu dHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1lbmFibGUtYXN5bmMtbWVyZ2UtYXBw ZW5kIiB4cmVmbGFiZWw9ImVuYWJsZV9hc3luY19tZXJnZV9hcHBlbmQiPgorICAgICAgPHRlcm0+ PHZhcm5hbWU+ZW5hYmxlX2FzeW5jX21lcmdlX2FwcGVuZDwvdmFybmFtZT4gKDx0eXBlPmJvb2xl YW48L3R5cGU+KQorICAgICAgPGluZGV4dGVybT4KKyAgICAgICA8cHJpbWFyeT48dmFybmFtZT5l bmFibGVfYXN5bmNfbWVyZ2VfYXBwZW5kPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRl cjwvcHJpbWFyeT4KKyAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgorICAgICAgPGxp c3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBx dWVyeSBwbGFubmVyJ3MgdXNlIG9mIGFzeW5jLWF3YXJlCisgICAgICAgIG1lcmdlIGFwcGVuZCBw bGFuIHR5cGVzLiBUaGUgZGVmYXVsdCBpcyA8bGl0ZXJhbD5vbjwvbGl0ZXJhbD4uCisgICAgICAg PC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAg PHZhcmxpc3RlbnRyeSBpZD0iZ3VjLWVuYWJsZS1iaXRtYXBzY2FuIiB4cmVmbGFiZWw9ImVuYWJs ZV9iaXRtYXBzY2FuIj4KICAgICAgIDx0ZXJtPjx2YXJuYW1lPmVuYWJsZV9iaXRtYXBzY2FuPC92 YXJuYW1lPiAoPHR5cGU+Ym9vbGVhbjwvdHlwZT4pCiAgICAgICA8aW5kZXh0ZXJtPgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FzeW5jLmMgYi9zcmMvYmFja2VuZC9leGVj dXRvci9leGVjQXN5bmMuYwppbmRleCA2MTI5YjgwMzM3MC4uOWQ0YTRiZmE3YzEgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBc3luYy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNBc3luYy5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSAiZXhlY3V0b3Iv ZXhlY0FzeW5jLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKICNpbmNsdWRlICJl eGVjdXRvci9ub2RlQXBwZW5kLmgiCisjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5k LmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZUZvcmVpZ25zY2FuLmgiCiAKIC8qCkBAIC0xMjEs NiArMTIyLDkgQEAgRXhlY0FzeW5jUmVzcG9uc2UoQXN5bmNSZXF1ZXN0ICphcmVxKQogCQljYXNl IFRfQXBwZW5kU3RhdGU6CiAJCQlFeGVjQXN5bmNBcHBlbmRSZXNwb25zZShhcmVxKTsKIAkJCWJy ZWFrOworCQljYXNlIFRfTWVyZ2VBcHBlbmRTdGF0ZToKKwkJCUV4ZWNBc3luY01lcmdlQXBwZW5k UmVzcG9uc2UoYXJlcSk7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCS8qIElmIHRoZSBub2Rl IGRvZXNuJ3Qgc3VwcG9ydCBhc3luYywgY2FsbGVyIG1lc3NlZCB1cC4gKi8KIAkJCWVsb2coRVJS T1IsICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBlOiAlZCIsCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVN ZXJnZUFwcGVuZC5jCmluZGV4IGUxYjliOTg0YTdhLi43NzQzMzY4YzIwZCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMKKysrIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMKQEAgLTM5LDEwICszOSwxNSBAQAogI2luY2x1ZGUg InBvc3RncmVzLmgiCiAKICNpbmNsdWRlICJleGVjdXRvci9leGVjdXRvci5oIgorI2luY2x1ZGUg ImV4ZWN1dG9yL2V4ZWNBc3luYy5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24u aCIKICNpbmNsdWRlICJleGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuaCIKICNpbmNsdWRlICJsaWIv YmluYXJ5aGVhcC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgInN0b3JhZ2Uv bGF0Y2guaCIKKyNpbmNsdWRlICJ1dGlscy93YWl0X2V2ZW50LmgiCisKKyNkZWZpbmUgRVZFTlRf QlVGRkVSX1NJWkUgICAgICAgICAgICAgICAgICAgICAxNgogCiAvKgogICogV2UgaGF2ZSBvbmUg c2xvdCBmb3IgZWFjaCBpdGVtIGluIHRoZSBoZWFwIGFycmF5LiAgV2UgdXNlIFNsb3ROdW1iZXIK QEAgLTU0LDYgKzU5LDEyIEBAIHR5cGVkZWYgaW50MzIgU2xvdE51bWJlcjsKIHN0YXRpYyBUdXBs ZVRhYmxlU2xvdCAqRXhlY01lcmdlQXBwZW5kKFBsYW5TdGF0ZSAqcHN0YXRlKTsKIHN0YXRpYyBp bnQJaGVhcF9jb21wYXJlX3Nsb3RzKERhdHVtIGEsIERhdHVtIGIsIHZvaWQgKmFyZyk7CiAKK3N0 YXRpYyB2b2lkIGNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKE1lcmdlQXBwZW5kU3RhdGUgKm5v ZGUpOworc3RhdGljIHZvaWQgRXhlY01lcmdlQXBwZW5kQXN5bmNCZWdpbihNZXJnZUFwcGVuZFN0 YXRlICpub2RlKTsKK3N0YXRpYyB2b2lkIEV4ZWNNZXJnZUFwcGVuZEFzeW5jR2V0TmV4dChNZXJn ZUFwcGVuZFN0YXRlICpub2RlLCBpbnQgbXBsYW4pOworc3RhdGljIGJvb2wgRXhlY01lcmdlQXBw ZW5kQXN5bmNSZXF1ZXN0KE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUsIGludCBtcGxhbik7CitzdGF0 aWMgdm9pZCBFeGVjTWVyZ2VBcHBlbmRBc3luY0V2ZW50V2FpdChNZXJnZUFwcGVuZFN0YXRlICpu b2RlKTsKKwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgkJRXhlY0luaXRNZXJnZUFwcGVuZApAQCAtNzAsNiAr ODEsOCBAQCBFeGVjSW5pdE1lcmdlQXBwZW5kKE1lcmdlQXBwZW5kICpub2RlLCBFU3RhdGUgKmVz dGF0ZSwgaW50IGVmbGFncykKIAlpbnQJCQlucGxhbnM7CiAJaW50CQkJaSwKIAkJCQlqOworCUJp dG1hcHNldCAgKmFzeW5jcGxhbnM7CisJaW50CQkJbmFzeW5jcGxhbnM7CiAKIAkvKiBjaGVjayBm b3IgdW5zdXBwb3J0ZWQgZmxhZ3MgKi8KIAlBc3NlcnQoIShlZmxhZ3MgJiAoRVhFQ19GTEFHX0JB Q0tXQVJEIHwgRVhFQ19GTEFHX01BUkspKSk7CkBAIC0xMDQsNyArMTE3LDEwIEBAIEV4ZWNJbml0 TWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdz KQogCQkgKiBsYXRlciBjYWxscyB0byBFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMuCiAJCSAqLwog CQlpZiAoIXBydW5lc3RhdGUtPmRvX2V4ZWNfcHJ1bmUgJiYgbnBsYW5zID4gMCkKKwkJewogCQkJ bWVyZ2VzdGF0ZS0+bXNfdmFsaWRfc3VicGxhbnMgPSBibXNfYWRkX3JhbmdlKE5VTEwsIDAsIG5w bGFucyAtIDEpOworCQkJbWVyZ2VzdGF0ZS0+bXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCA9 IHRydWU7CisJCX0KIAl9CiAJZWxzZQogCXsKQEAgLTExNyw2ICsxMzMsNyBAQCBFeGVjSW5pdE1l cmdlQXBwZW5kKE1lcmdlQXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykK IAkJQXNzZXJ0KG5wbGFucyA+IDApOwogCQltZXJnZXN0YXRlLT5tc192YWxpZF9zdWJwbGFucyA9 IHZhbGlkc3VicGxhbnMgPQogCQkJYm1zX2FkZF9yYW5nZShOVUxMLCAwLCBucGxhbnMgLSAxKTsK KwkJbWVyZ2VzdGF0ZS0+bXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCA9IHRydWU7CiAJCW1l cmdlc3RhdGUtPm1zX3BydW5lX3N0YXRlID0gTlVMTDsKIAl9CiAKQEAgLTE0NSwxNiArMTYyLDY5 IEBAIEV4ZWNJbml0TWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRl LCBpbnQgZWZsYWdzKQogCSAqIHRoZSByZXN1bHRzIGludG8gdGhlIG1lcmdlcGxhbnN0YXRlcyBh cnJheS4KIAkgKi8KIAlqID0gMDsKKwlhc3luY3BsYW5zID0gTlVMTDsKKwluYXN5bmNwbGFucyA9 IDA7CisKIAlpID0gLTE7CiAJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKHZhbGlkc3VicGxh bnMsIGkpKSA+PSAwKQogCXsKIAkJUGxhbgkgICAqaW5pdE5vZGUgPSAoUGxhbiAqKSBsaXN0X250 aChub2RlLT5tZXJnZXBsYW5zLCBpKTsKIAorCQkvKgorCQkgKiBSZWNvcmQgYXN5bmMgc3VicGxh bnMuICBXaGVuIGV4ZWN1dGluZyBFdmFsUGxhblF1YWwsIHdlIHRyZWF0IHRoZW0KKwkJICogYXMg c3luYyBvbmVzOyBkb24ndCBkbyB0aGlzIHdoZW4gaW5pdGlhbGl6aW5nIGFuIEV2YWxQbGFuUXVh bCBwbGFuCisJCSAqIHRyZWUuCisJCSAqLworCQlpZiAoaW5pdE5vZGUtPmFzeW5jX2NhcGFibGUg JiYgZXN0YXRlLT5lc19lcHFfYWN0aXZlID09IE5VTEwpCisJCXsKKwkJCWFzeW5jcGxhbnMgPSBi bXNfYWRkX21lbWJlcihhc3luY3BsYW5zLCBqKTsKKwkJCW5hc3luY3BsYW5zKys7CisJCX0KKwog CQltZXJnZXBsYW5zdGF0ZXNbaisrXSA9IEV4ZWNJbml0Tm9kZShpbml0Tm9kZSwgZXN0YXRlLCBl ZmxhZ3MpOwogCX0KIAogCW1lcmdlc3RhdGUtPnBzLnBzX1Byb2pJbmZvID0gTlVMTDsKIAorCS8q IEluaXRpYWxpemUgYXN5bmMgc3RhdGUgKi8KKwltZXJnZXN0YXRlLT5tc19hc3luY3BsYW5zID0g YXN5bmNwbGFuczsKKwltZXJnZXN0YXRlLT5tc19uYXN5bmNwbGFucyA9IG5hc3luY3BsYW5zOwor CW1lcmdlc3RhdGUtPm1zX2FzeW5jcmVxdWVzdHMgPSBOVUxMOworCW1lcmdlc3RhdGUtPm1zX2Fz eW5jcmVzdWx0cyA9IE5VTEw7CisJbWVyZ2VzdGF0ZS0+bXNfaGFzX2FzeW5jcmVzdWx0cyA9IE5V TEw7CisJbWVyZ2VzdGF0ZS0+bXNfYXN5bmNyZW1haW4gPSBOVUxMOworCW1lcmdlc3RhdGUtPm1z X25lZWRyZXF1ZXN0ID0gTlVMTDsKKwltZXJnZXN0YXRlLT5tc19ldmVudHNldCA9IE5VTEw7CisJ bWVyZ2VzdGF0ZS0+bXNfdmFsaWRfYXN5bmNwbGFucyA9IE5VTEw7CisKKwlpZiAobmFzeW5jcGxh bnMgPiAwKQorCXsKKwkJbWVyZ2VzdGF0ZS0+bXNfYXN5bmNyZXF1ZXN0cyA9IChBc3luY1JlcXVl c3QgKiopCisJCQlwYWxsb2MwKG5wbGFucyAqIHNpemVvZihBc3luY1JlcXVlc3QgKikpOworCisJ CWkgPSAtMTsKKwkJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKGFzeW5jcGxhbnMsIGkpKSA+ PSAwKQorCQl7CisJCQlBc3luY1JlcXVlc3QgKmFyZXE7CisKKwkJCWFyZXEgPSBwYWxsb2Moc2l6 ZW9mKEFzeW5jUmVxdWVzdCkpOworCQkJYXJlcS0+cmVxdWVzdG9yID0gKFBsYW5TdGF0ZSAqKSBt ZXJnZXN0YXRlOworCQkJYXJlcS0+cmVxdWVzdGVlID0gbWVyZ2VwbGFuc3RhdGVzW2ldOworCQkJ YXJlcS0+cmVxdWVzdF9pbmRleCA9IGk7CisJCQlhcmVxLT5jYWxsYmFja19wZW5kaW5nID0gZmFs c2U7CisJCQlhcmVxLT5yZXF1ZXN0X2NvbXBsZXRlID0gZmFsc2U7CisJCQlhcmVxLT5yZXN1bHQg PSBOVUxMOworCisJCQltZXJnZXN0YXRlLT5tc19hc3luY3JlcXVlc3RzW2ldID0gYXJlcTsKKwkJ fQorCisJCW1lcmdlc3RhdGUtPm1zX2FzeW5jcmVzdWx0cyA9IChUdXBsZVRhYmxlU2xvdCAqKikK KwkJCXBhbGxvYzAobnBsYW5zICogc2l6ZW9mKFR1cGxlVGFibGVTbG90ICopKTsKKworCQlpZiAo bWVyZ2VzdGF0ZS0+bXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCkKKwkJCWNsYXNzaWZ5X21h dGNoaW5nX3N1YnBsYW5zKG1lcmdlc3RhdGUpOworCX0KKwogCS8qCiAJICogaW5pdGlhbGl6ZSBz b3J0LWtleSBpbmZvcm1hdGlvbgogCSAqLwpAQCAtMjE2LDkgKzI4NiwxNiBAQCBFeGVjTWVyZ2VB cHBlbmQoUGxhblN0YXRlICpwc3RhdGUpCiAJCSAqIHJ1bi10aW1lIHBydW5pbmcgaXMgZGlzYWJs ZWQgdGhlbiB0aGUgdmFsaWQgc3VicGxhbnMgd2lsbCBhbHdheXMgYmUKIAkJICogc2V0IHRvIGFs bCBzdWJwbGFucy4KIAkJICovCi0JCWlmIChub2RlLT5tc192YWxpZF9zdWJwbGFucyA9PSBOVUxM KQorCQlpZiAoIW5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpCisJCXsKIAkJCW5v ZGUtPm1zX3ZhbGlkX3N1YnBsYW5zID0KIAkJCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9k ZS0+bXNfcHJ1bmVfc3RhdGUsIGZhbHNlKTsKKwkJCW5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zX2lk ZW50aWZpZWQgPSB0cnVlOworCQl9CisKKwkJLyogSWYgdGhlcmUgYXJlIGFueSBhc3luYyBzdWJw bGFucywgYmVnaW4gZXhlY3V0aW5nIHRoZW0uICovCisJCWlmIChub2RlLT5tc19uYXN5bmNwbGFu cyA+IDApCisJCQlFeGVjTWVyZ2VBcHBlbmRBc3luY0JlZ2luKG5vZGUpOwogCiAJCS8qCiAJCSAq IEZpcnN0IHRpbWUgdGhyb3VnaDogcHVsbCB0aGUgZmlyc3QgdHVwbGUgZnJvbSBlYWNoIHZhbGlk IHN1YnBsYW4sCkBAIC0yMzEsNiArMzA4LDE2IEBAIEV4ZWNNZXJnZUFwcGVuZChQbGFuU3RhdGUg KnBzdGF0ZSkKIAkJCWlmICghVHVwSXNOdWxsKG5vZGUtPm1zX3Nsb3RzW2ldKSkKIAkJCQliaW5h cnloZWFwX2FkZF91bm9yZGVyZWQobm9kZS0+bXNfaGVhcCwgSW50MzJHZXREYXR1bShpKSk7CiAJ CX0KKworCQkvKiBMb29rIGF0IGFzeW5jIHN1YnBsYW5zICovCisJCWkgPSAtMTsKKwkJd2hpbGUg KChpID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPm1zX2FzeW5jcGxhbnMsIGkpKSA+PSAwKQorCQl7 CisJCQlFeGVjTWVyZ2VBcHBlbmRBc3luY0dldE5leHQobm9kZSwgaSk7CisJCQlpZiAoIVR1cElz TnVsbChub2RlLT5tc19zbG90c1tpXSkpCisJCQkJYmluYXJ5aGVhcF9hZGRfdW5vcmRlcmVkKG5v ZGUtPm1zX2hlYXAsIEludDMyR2V0RGF0dW0oaSkpOworCQl9CisKIAkJYmluYXJ5aGVhcF9idWls ZChub2RlLT5tc19oZWFwKTsKIAkJbm9kZS0+bXNfaW5pdGlhbGl6ZWQgPSB0cnVlOwogCX0KQEAg LTI0NSw3ICszMzIsMTMgQEAgRXhlY01lcmdlQXBwZW5kKFBsYW5TdGF0ZSAqcHN0YXRlKQogCQkg KiB0byBub3QgcHVsbCB0dXBsZXMgdW50aWwgbmVjZXNzYXJ5LikKIAkJICovCiAJCWkgPSBEYXR1 bUdldEludDMyKGJpbmFyeWhlYXBfZmlyc3Qobm9kZS0+bXNfaGVhcCkpOwotCQlub2RlLT5tc19z bG90c1tpXSA9IEV4ZWNQcm9jTm9kZShub2RlLT5tZXJnZXBsYW5zW2ldKTsKKwkJaWYgKGJtc19p c19tZW1iZXIoaSwgbm9kZS0+bXNfYXN5bmNwbGFucykpCisJCQlFeGVjTWVyZ2VBcHBlbmRBc3lu Y0dldE5leHQobm9kZSwgaSk7CisJCWVsc2UKKwkJeworCQkJQXNzZXJ0KGJtc19pc19tZW1iZXIo aSwgbm9kZS0+bXNfdmFsaWRfc3VicGxhbnMpKTsKKwkJCW5vZGUtPm1zX3Nsb3RzW2ldID0gRXhl Y1Byb2NOb2RlKG5vZGUtPm1lcmdlcGxhbnNbaV0pOworCQl9CiAJCWlmICghVHVwSXNOdWxsKG5v ZGUtPm1zX3Nsb3RzW2ldKSkKIAkJCWJpbmFyeWhlYXBfcmVwbGFjZV9maXJzdChub2RlLT5tc19o ZWFwLCBJbnQzMkdldERhdHVtKGkpKTsKIAkJZWxzZQpAQCAtMjYxLDYgKzM1NCw4IEBAIEV4ZWNN ZXJnZUFwcGVuZChQbGFuU3RhdGUgKnBzdGF0ZSkKIAl7CiAJCWkgPSBEYXR1bUdldEludDMyKGJp bmFyeWhlYXBfZmlyc3Qobm9kZS0+bXNfaGVhcCkpOwogCQlyZXN1bHQgPSBub2RlLT5tc19zbG90 c1tpXTsKKwkJLyogIEZvciBhc3luYyBwbGFuIHJlY29yZCB0aGF0IHdlIGNhbiBnZXQgdGhlIG5l eHQgdHVwbGUgKi8KKwkJbm9kZS0+bXNfaGFzX2FzeW5jcmVzdWx0cyA9IGJtc19kZWxfbWVtYmVy KG5vZGUtPm1zX2hhc19hc3luY3Jlc3VsdHMsIGkpOwogCX0KIAogCXJldHVybiByZXN1bHQ7CkBA IC0zNDAsNiArNDM1LDcgQEAgdm9pZAogRXhlY1JlU2Nhbk1lcmdlQXBwZW5kKE1lcmdlQXBwZW5k U3RhdGUgKm5vZGUpCiB7CiAJaW50CQkJaTsKKwlpbnQJCQluYXN5bmNwbGFucyA9IG5vZGUtPm1z X25hc3luY3BsYW5zOwogCiAJLyoKIAkgKiBJZiBhbnkgUEFSQU1fRVhFQyBQYXJhbXMgdXNlZCBp biBwcnVuaW5nIGV4cHJlc3Npb25zIGhhdmUgY2hhbmdlZCwgdGhlbgpAQCAtMzUwLDggKzQ0Niwx MSBAQCBFeGVjUmVTY2FuTWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSkKIAkJYm1z X292ZXJsYXAobm9kZS0+cHMuY2hnUGFyYW0sCiAJCQkJCW5vZGUtPm1zX3BydW5lX3N0YXRlLT5l eGVjcGFyYW1pZHMpKQogCXsKKwkJbm9kZS0+bXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCA9 IGZhbHNlOwogCQlibXNfZnJlZShub2RlLT5tc192YWxpZF9zdWJwbGFucyk7CiAJCW5vZGUtPm1z X3ZhbGlkX3N1YnBsYW5zID0gTlVMTDsKKwkJYm1zX2ZyZWUobm9kZS0+bXNfdmFsaWRfYXN5bmNw bGFucyk7CisJCW5vZGUtPm1zX3ZhbGlkX2FzeW5jcGxhbnMgPSBOVUxMOwogCX0KIAogCWZvciAo aSA9IDA7IGkgPCBub2RlLT5tc19ucGxhbnM7IGkrKykKQEAgLTM3Miw2ICs0NzEsMzYxIEBAIEV4 ZWNSZVNjYW5NZXJnZUFwcGVuZChNZXJnZUFwcGVuZFN0YXRlICpub2RlKQogCQlpZiAoc3Vibm9k ZS0+Y2hnUGFyYW0gPT0gTlVMTCkKIAkJCUV4ZWNSZVNjYW4oc3Vibm9kZSk7CiAJfQorCisJLyog UmVzZXQgYXN5bmMgc3RhdGUgKi8KKwlpZiAobmFzeW5jcGxhbnMgPiAwKQorCXsKKwkJaSA9IC0x OworCQl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+bXNfYXN5bmNwbGFucywgaSkp ID49IDApCisJCXsKKwkJCUFzeW5jUmVxdWVzdCAqYXJlcSA9IG5vZGUtPm1zX2FzeW5jcmVxdWVz dHNbaV07CisKKwkJCWFyZXEtPmNhbGxiYWNrX3BlbmRpbmcgPSBmYWxzZTsKKwkJCWFyZXEtPnJl cXVlc3RfY29tcGxldGUgPSBmYWxzZTsKKwkJCWFyZXEtPnJlc3VsdCA9IE5VTEw7CisJCX0KKwor CQlibXNfZnJlZShub2RlLT5tc19hc3luY3JlbWFpbik7CisJCW5vZGUtPm1zX2FzeW5jcmVtYWlu ID0gTlVMTDsKKwkJYm1zX2ZyZWUobm9kZS0+bXNfbmVlZHJlcXVlc3QpOworCQlub2RlLT5tc19u ZWVkcmVxdWVzdCA9IE5VTEw7CisJCWJtc19mcmVlKG5vZGUtPm1zX2hhc19hc3luY3Jlc3VsdHMp OworCQlub2RlLT5tc19oYXNfYXN5bmNyZXN1bHRzID0gTlVMTDsKKwl9CiAJYmluYXJ5aGVhcF9y ZXNldChub2RlLT5tc19oZWFwKTsKIAlub2RlLT5tc19pbml0aWFsaXplZCA9IGZhbHNlOwogfQor CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKiAgICAgICAgICAgICAgY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMK KyAqCisgKiAgICAgICAgICAgICAgQ2xhc3NpZnkgdGhlIG5vZGUncyBtc192YWxpZF9zdWJwbGFu cyBpbnRvIHN5bmMgb25lcyBhbmQKKyAqICAgICAgICAgICAgICBhc3luYyBvbmVzLCBhZGp1c3Qg aXQgdG8gY29udGFpbiBzeW5jIG9uZXMgb25seSwgYW5kIHNhdmUKKyAqICAgICAgICAgICAgICBh c3luYyBvbmVzIGluIHRoZSBub2RlJ3MgbXNfdmFsaWRfYXN5bmNwbGFucy4KKyAqIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworc3RhdGljIHZvaWQKK2NsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKE1lcmdlQXBwZW5k U3RhdGUgKm5vZGUpCit7CisJQml0bWFwc2V0ICAqdmFsaWRfYXN5bmNwbGFuczsKKworCUFzc2Vy dChub2RlLT5tc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKTsKKwlBc3NlcnQobm9kZS0+bXNf dmFsaWRfYXN5bmNwbGFucyA9PSBOVUxMKTsKKworCS8qIE5vdGhpbmcgdG8gZG8gaWYgdGhlcmUg YXJlIG5vIHZhbGlkIHN1YnBsYW5zLiAqLworCWlmIChibXNfaXNfZW1wdHkobm9kZS0+bXNfdmFs aWRfc3VicGxhbnMpKQorCXsKKwkJbm9kZS0+bXNfYXN5bmNyZW1haW4gPSBOVUxMOworCQlyZXR1 cm47CisJfQorCisJLyogTm90aGluZyB0byBkbyBpZiB0aGVyZSBhcmUgbm8gdmFsaWQgYXN5bmMg c3VicGxhbnMuICovCisJaWYgKCFibXNfb3ZlcmxhcChub2RlLT5tc192YWxpZF9zdWJwbGFucywg bm9kZS0+bXNfYXN5bmNwbGFucykpCisJeworCQlub2RlLT5tc19hc3luY3JlbWFpbiA9IE5VTEw7 CisJCXJldHVybjsKKwl9CisKKwkvKiBHZXQgdmFsaWQgYXN5bmMgc3VicGxhbnMuICovCisJdmFs aWRfYXN5bmNwbGFucyA9IGJtc19pbnRlcnNlY3Qobm9kZS0+bXNfYXN5bmNwbGFucywKKwkJCQkJ CQkJICAgbm9kZS0+bXNfdmFsaWRfc3VicGxhbnMpOworCisJLyogQWRqdXN0IHRoZSB2YWxpZCBz dWJwbGFucyB0byBjb250YWluIHN5bmMgc3VicGxhbnMgb25seS4gKi8KKwlub2RlLT5tc192YWxp ZF9zdWJwbGFucyA9IGJtc19kZWxfbWVtYmVycyhub2RlLT5tc192YWxpZF9zdWJwbGFucywKKwkJ CQkJCQkJCQkJICB2YWxpZF9hc3luY3BsYW5zKTsKKworCS8qIFNhdmUgdmFsaWQgYXN5bmMgc3Vi cGxhbnMuICovCisJbm9kZS0+bXNfdmFsaWRfYXN5bmNwbGFucyA9IHZhbGlkX2FzeW5jcGxhbnM7 Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgICAgICAgICBFeGVjTWVyZ2VBcHBlbmRBc3luY0Jl Z2luCisgKgorICogICAgICAgICAgICAgIEJlZ2luIGV4ZWN1dGluZyBkZXNpZ25lZCBhc3luYy1j YXBhYmxlIHN1YnBsYW5zLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0aWMgdm9pZAorRXhlY01lcmdl QXBwZW5kQXN5bmNCZWdpbihNZXJnZUFwcGVuZFN0YXRlICpub2RlKQoreworCWludAkJCWk7CisK KwkvKiBCYWNrd2FyZCBzY2FuIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYXN5bmMtYXdhcmUgTWVyZ2VB cHBlbmRzLiAqLworCUFzc2VydChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKG5vZGUtPnBzLnN0YXRl LT5lc19kaXJlY3Rpb24pKTsKKworCS8qIFdlIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgd2hlbiB0 aGVyZSBhcmUgbm8gc3VicGxhbnMgKi8KKwlBc3NlcnQobm9kZS0+bXNfbnBsYW5zID4gMCk7CisK KwkvKiBXZSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdoZW4gdGhlcmUgYXJlIG5vIGFzeW5jIHN1 YnBsYW5zLiAqLworCUFzc2VydChub2RlLT5tc19uYXN5bmNwbGFucyA+IDApOworCisJLyogSWYg d2UndmUgeWV0IHRvIGRldGVybWluZSB0aGUgdmFsaWQgc3VicGxhbnMgdGhlbiBkbyBzbyBub3cu ICovCisJaWYgKCFub2RlLT5tc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKQorCXsKKwkJbm9k ZS0+bXNfdmFsaWRfc3VicGxhbnMgPQorCQkJRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUt Pm1zX3BydW5lX3N0YXRlLCBmYWxzZSk7CisJCW5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zX2lkZW50 aWZpZWQgPSB0cnVlOworCisJCWNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKG5vZGUpOworCX0K KworCS8qIEluaXRpYWxpemUgc3RhdGUgdmFyaWFibGVzLiAqLworCW5vZGUtPm1zX2FzeW5jcmVt YWluID0gYm1zX2NvcHkobm9kZS0+bXNfdmFsaWRfYXN5bmNwbGFucyk7CisKKwkvKiBOb3RoaW5n IHRvIGRvIGlmIHRoZXJlIGFyZSBubyB2YWxpZCBhc3luYyBzdWJwbGFucy4gKi8KKwlpZiAoYm1z X2lzX2VtcHR5KG5vZGUtPm1zX2FzeW5jcmVtYWluKSkKKwkJcmV0dXJuOworCisJLyogTWFrZSBh IHJlcXVlc3QgZm9yIGVhY2ggb2YgdGhlIHZhbGlkIGFzeW5jIHN1YnBsYW5zLiAqLworCWkgPSAt MTsKKwl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+bXNfdmFsaWRfYXN5bmNwbGFu cywgaSkpID49IDApCisJeworCQlBc3luY1JlcXVlc3QgKmFyZXEgPSBub2RlLT5tc19hc3luY3Jl cXVlc3RzW2ldOworCisJCUFzc2VydChhcmVxLT5yZXF1ZXN0X2luZGV4ID09IGkpOworCQlBc3Nl cnQoIWFyZXEtPmNhbGxiYWNrX3BlbmRpbmcpOworCisJCS8qIERvIHRoZSBhY3R1YWwgd29yay4g Ki8KKwkJRXhlY0FzeW5jUmVxdWVzdChhcmVxKTsKKwl9Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAg ICAgICAgICAgICBFeGVjTWVyZ2VBcHBlbmRBc3luY0dldE5leHQKKyAqCisgKiAgICAgICAgICAg ICAgR2V0IHRoZSBuZXh0IHR1cGxlIGZyb20gc3BlY2lmaWVkIGFzeW5jaHJvbm91cyBzdWJwbGFu LgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICovCitzdGF0aWMgdm9pZAorRXhlY01lcmdlQXBwZW5kQXN5bmNHZXRO ZXh0KE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUsIGludCBtcGxhbikKK3sKKwlub2RlLT5tc19zbG90 c1ttcGxhbl0gPSBOVUxMOworCisJLyogUmVxdWVzdCBhIHR1cGxlIGFzeW5jaHJvbm91c2x5LiAq LworCWlmIChFeGVjTWVyZ2VBcHBlbmRBc3luY1JlcXVlc3Qobm9kZSwgbXBsYW4pKQorCQlyZXR1 cm47CisKKwkvKgorCSAqIG5vZGUtPm1zX2FzeW5jcmVtYWluIGNhbiBiZSBOVUxMIGlmIHdlIGhh dmUgZmV0Y2hlZCB0dXBsZXMsIGJ1dCBoYXZlbid0CisJICogcmV0dXJuZWQgdGhlbSB5ZXQuIElu IHRoaXMgY2FzZSBFeGVjTWVyZ2VBcHBlbmRBc3luY1JlcXVlc3QoKSBhYm92ZSBqdXN0CisJICog cmV0dXJucyB0dXBsZXMgd2l0aG91dCBwZXJmb3JtaW5nIGEgcmVxdWVzdC4KKwkgKi8KKwl3aGls ZSAoYm1zX2lzX21lbWJlcihtcGxhbiwgbm9kZS0+bXNfYXN5bmNyZW1haW4pKQorCXsKKwkJQ0hF Q0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkvKiBXYWl0IG9yIHBvbGwgZm9yIGFzeW5jIGV2ZW50 cy4gKi8KKwkJRXhlY01lcmdlQXBwZW5kQXN5bmNFdmVudFdhaXQobm9kZSk7CisKKwkJLyogUmVx dWVzdCBhIHR1cGxlIGFzeW5jaHJvbm91c2x5LiAqLworCQlpZiAoRXhlY01lcmdlQXBwZW5kQXN5 bmNSZXF1ZXN0KG5vZGUsIG1wbGFuKSkKKwkJCXJldHVybjsKKworCQkvKgorCQkgKiBXYWl0aW5n IHVudGlsIHRoZXJlJ3Mgbm8gYXN5bmMgcmVxdWVzdHMgcGVuZGluZyBvciB3ZSBnb3Qgc29tZQor CQkgKiB0dXBsZXMgZnJvbSBvdXIgcmVxdWVzdAorCQkgKi8KKwl9CisKKwkvKiBObyB0dXBsZXMg Ki8KKwlyZXR1cm47Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgICAgICAgICBFeGVjTWVyZ2VB cHBlbmRBc3luY1JlcXVlc3QKKyAqCisgKiAgICAgICAgICAgICAgUmVxdWVzdCBhIHR1cGxlIGFz eW5jaHJvbm91c2x5LgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0aWMgYm9vbAorRXhlY01lcmdlQXBw ZW5kQXN5bmNSZXF1ZXN0KE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUsIGludCBtcGxhbikKK3sKKwlC aXRtYXBzZXQgICpuZWVkcmVxdWVzdDsKKwlpbnQJCQlpOworCisJLyoKKwkgKiBJZiB3ZSd2ZSBh bHJlYWR5IGZldGNoZWQgbmVjZXNzYXJ5IGRhdGEsIGp1c3QgcmV0dXJuIGl0CisJICovCisJaWYg KGJtc19pc19tZW1iZXIobXBsYW4sIG5vZGUtPm1zX2hhc19hc3luY3Jlc3VsdHMpKQorCXsKKwkJ bm9kZS0+bXNfc2xvdHNbbXBsYW5dID0gbm9kZS0+bXNfYXN5bmNyZXN1bHRzW21wbGFuXTsKKwkJ cmV0dXJuIHRydWU7CisJfQorCisJLyoKKwkgKiBHZXQgYSBsaXN0IG9mIG1lbWJlcnMgd2hpY2gg Y2FuIHByb2Nlc3MgcmVxdWVzdCBhbmQgZG9uJ3QgaGF2ZSBkYXRhCisJICogcmVhZHkuCisJICov CisJbmVlZHJlcXVlc3QgPSBOVUxMOworCWkgPSAtMTsKKwl3aGlsZSAoKGkgPSBibXNfbmV4dF9t ZW1iZXIobm9kZS0+bXNfbmVlZHJlcXVlc3QsIGkpKSA+PSAwKQorCXsKKwkJaWYgKCFibXNfaXNf bWVtYmVyKGksIG5vZGUtPm1zX2hhc19hc3luY3Jlc3VsdHMpKQorCQkJbmVlZHJlcXVlc3QgPSBi bXNfYWRkX21lbWJlcihuZWVkcmVxdWVzdCwgaSk7CisJfQorCisJLyoKKwkgKiBJZiB0aGVyZSdz IG5vIG1lbWJlcnMsIHdoaWNoIHN0aWxsIG5lZWQgcmVxdWVzdCwgbm8gbmVlZCB0byBzZW5kIGl0 LgorCSAqLworCWlmIChibXNfaXNfZW1wdHkobmVlZHJlcXVlc3QpKQorCQlyZXR1cm4gZmFsc2U7 CisKKwkvKiBDbGVhciBtc19uZWVkcmVxdWVzdCBmbGFnLCBhcyB3ZSBhcmUgZ29pbmcgdG8gc2Vu ZCByZXF1ZXN0cyBub3cgKi8KKwlub2RlLT5tc19uZWVkcmVxdWVzdCA9IGJtc19kZWxfbWVtYmVy cyhub2RlLT5tc19uZWVkcmVxdWVzdCwgbmVlZHJlcXVlc3QpOworCisJLyogTWFrZSBhIG5ldyBy ZXF1ZXN0IGZvciBlYWNoIG9mIHRoZSBhc3luYyBzdWJwbGFucyB0aGF0IG5lZWQgaXQuICovCisJ aSA9IC0xOworCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihuZWVkcmVxdWVzdCwgaSkpID49 IDApCisJeworCQlBc3luY1JlcXVlc3QgKmFyZXEgPSBub2RlLT5tc19hc3luY3JlcXVlc3RzW2ld OworCisJCS8qCisJCSAqIFdlJ3ZlIGp1c3QgY2hlY2tlZCB0aGF0IHN1YnBsYW4gZG9lc24ndCBh bHJlYWR5IGhhdmUgc29tZSBmZXRjaGVkCisJCSAqIGRhdGEKKwkJICovCisJCUFzc2VydCghYm1z X2lzX21lbWJlcihpLCBub2RlLT5tc19oYXNfYXN5bmNyZXN1bHRzKSk7CisKKwkJLyogRG8gdGhl IGFjdHVhbCB3b3JrLiAqLworCQlFeGVjQXN5bmNSZXF1ZXN0KGFyZXEpOworCX0KKwlibXNfZnJl ZShuZWVkcmVxdWVzdCk7CisKKwkvKiBSZXR1cm4gbmVlZGVkIGFzeW5jaHJvbm91c2x5LWdlbmVy YXRlZCByZXN1bHRzIGlmIGFueS4gKi8KKwlpZiAoYm1zX2lzX21lbWJlcihtcGxhbiwgbm9kZS0+ bXNfaGFzX2FzeW5jcmVzdWx0cykpCisJeworCQlub2RlLT5tc19zbG90c1ttcGxhbl0gPSBub2Rl LT5tc19hc3luY3Jlc3VsdHNbbXBsYW5dOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4g ZmFsc2U7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgICAgICAgICBFeGVjQXN5bmNNZXJnZUFw cGVuZFJlc3BvbnNlCisgKgorICogICAgICAgICAgICAgIFJlY2VpdmUgYSByZXNwb25zZSBmcm9t IGFuIGFzeW5jaHJvbm91cyByZXF1ZXN0IHdlIG1hZGUuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3ZvaWQK K0V4ZWNBc3luY01lcmdlQXBwZW5kUmVzcG9uc2UoQXN5bmNSZXF1ZXN0ICphcmVxKQoreworCU1l cmdlQXBwZW5kU3RhdGUgKm5vZGUgPSAoTWVyZ2VBcHBlbmRTdGF0ZSAqKSBhcmVxLT5yZXF1ZXN0 b3I7CisJVHVwbGVUYWJsZVNsb3QgKnNsb3QgPSBhcmVxLT5yZXN1bHQ7CisKKwkvKiBUaGUgcmVz dWx0IHNob3VsZCBiZSBhIFR1cGxlVGFibGVTbG90IG9yIE5VTEwuICovCisJQXNzZXJ0KHNsb3Qg PT0gTlVMTCB8fCBJc0Eoc2xvdCwgVHVwbGVUYWJsZVNsb3QpKTsKKwlBc3NlcnQoIWJtc19pc19t ZW1iZXIoYXJlcS0+cmVxdWVzdF9pbmRleCwgbm9kZS0+bXNfaGFzX2FzeW5jcmVzdWx0cykpOwor CisJbm9kZS0+bXNfYXN5bmNyZXN1bHRzW2FyZXEtPnJlcXVlc3RfaW5kZXhdID0gTlVMTDsKKwkv KiBOb3RoaW5nIHRvIGRvIGlmIHRoZSByZXF1ZXN0IGlzIHBlbmRpbmcuICovCisJaWYgKCFhcmVx LT5yZXF1ZXN0X2NvbXBsZXRlKQorCXsKKwkJLyogVGhlIHJlcXVlc3Qgd291bGQgaGF2ZSBiZWVu IHBlbmRpbmcgZm9yIGEgY2FsbGJhY2suICovCisJCUFzc2VydChhcmVxLT5jYWxsYmFja19wZW5k aW5nKTsKKwkJcmV0dXJuOworCX0KKworCS8qIElmIHRoZSByZXN1bHQgaXMgTlVMTCBvciBhbiBl bXB0eSBzbG90LCB0aGVyZSdzIG5vdGhpbmcgbW9yZSB0byBkby4gKi8KKwlpZiAoVHVwSXNOdWxs KHNsb3QpKQorCXsKKwkJLyogVGhlIGVuZGluZyBzdWJwbGFuIHdvdWxkbid0IGhhdmUgYmVlbiBw ZW5kaW5nIGZvciBhIGNhbGxiYWNrLiAqLworCQlBc3NlcnQoIWFyZXEtPmNhbGxiYWNrX3BlbmRp bmcpOworCQlub2RlLT5tc19hc3luY3JlbWFpbiA9IGJtc19kZWxfbWVtYmVyKG5vZGUtPm1zX2Fz eW5jcmVtYWluLCBhcmVxLT5yZXF1ZXN0X2luZGV4KTsKKwkJcmV0dXJuOworCX0KKworCW5vZGUt Pm1zX2hhc19hc3luY3Jlc3VsdHMgPSBibXNfYWRkX21lbWJlcihub2RlLT5tc19oYXNfYXN5bmNy ZXN1bHRzLCBhcmVxLT5yZXF1ZXN0X2luZGV4KTsKKwkvKiBTYXZlIHJlc3VsdCBzbyB3ZSBjYW4g cmV0dXJuIGl0LiAqLworCW5vZGUtPm1zX2FzeW5jcmVzdWx0c1thcmVxLT5yZXF1ZXN0X2luZGV4 XSA9IHNsb3Q7CisKKwkvKgorCSAqIE1hcmsgdGhlIHN1YnBsYW4gdGhhdCByZXR1cm5lZCBhIHJl c3VsdCBhcyByZWFkeSBmb3IgYSBuZXcgcmVxdWVzdC4gIFdlCisJICogZG9uJ3QgbGF1bmNoIGFu b3RoZXIgb25lIGhlcmUgaW1tZWRpYXRlbHkgYmVjYXVzZSBpdCBtaWdodCBjb21wbGV0ZS4KKwkg Ki8KKwlub2RlLT5tc19uZWVkcmVxdWVzdCA9IGJtc19hZGRfbWVtYmVyKG5vZGUtPm1zX25lZWRy ZXF1ZXN0LAorCQkJCQkJCQkJCSAgYXJlcS0+cmVxdWVzdF9pbmRleCk7Cit9CisKKy8qIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqCQlFeGVjTWVyZ2VBcHBlbmRBc3luY0V2ZW50V2FpdAorICoKKyAqCQlXYWl0IG9yIHBv bGwgZm9yIGZpbGUgZGVzY3JpcHRvciBldmVudHMgYW5kIGZpcmUgY2FsbGJhY2tzLgorICogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICovCitzdGF0aWMgdm9pZAorRXhlY01lcmdlQXBwZW5kQXN5bmNFdmVudFdhaXQoTWVy Z2VBcHBlbmRTdGF0ZSAqbm9kZSkKK3sKKwlpbnQJCQluZXZlbnRzID0gbm9kZS0+bXNfbmFzeW5j cGxhbnMgKyAxOyAvKiBvbmUgZm9yIFBNIGRlYXRoICovCisJV2FpdEV2ZW50CW9jY3VycmVkX2V2 ZW50W0VWRU5UX0JVRkZFUl9TSVpFXTsKKwlpbnQJCQlub2NjdXJyZWQ7CisJaW50CQkJaTsKKwor CS8qIFdlIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgd2hlbiB0aGVyZSBhcmUgbm8gdmFsaWQgYXN5 bmMgc3VicGxhbnMuICovCisJQXNzZXJ0KGJtc19udW1fbWVtYmVycyhub2RlLT5tc19hc3luY3Jl bWFpbikgPiAwKTsKKworCW5vZGUtPm1zX2V2ZW50c2V0ID0gQ3JlYXRlV2FpdEV2ZW50U2V0KEN1 cnJlbnRSZXNvdXJjZU93bmVyLCBuZXZlbnRzKTsKKwlBZGRXYWl0RXZlbnRUb1NldChub2RlLT5t c19ldmVudHNldCwgV0xfRVhJVF9PTl9QTV9ERUFUSCwgUEdJTlZBTElEX1NPQ0tFVCwKKwkJCQkJ ICBOVUxMLCBOVUxMKTsKKworCS8qIEdpdmUgZWFjaCB3YWl0aW5nIHN1YnBsYW4gYSBjaGFuY2Ug dG8gYWRkIGFuIGV2ZW50LiAqLworCWkgPSAtMTsKKwl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1i ZXIobm9kZS0+bXNfYXN5bmNwbGFucywgaSkpID49IDApCisJeworCQlBc3luY1JlcXVlc3QgKmFy ZXEgPSBub2RlLT5tc19hc3luY3JlcXVlc3RzW2ldOworCisJCWlmIChhcmVxLT5jYWxsYmFja19w ZW5kaW5nKQorCQkJRXhlY0FzeW5jQ29uZmlndXJlV2FpdChhcmVxKTsKKwl9CisKKwkvKgorCSAq IE5vIG5lZWQgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZyBpZiB0aGVyZSBhcmUgbm8gY29uZmlndXJl ZCBldmVudHMgb3RoZXIKKwkgKiB0aGFuIHRoZSBwb3N0bWFzdGVyIGRlYXRoIGV2ZW50LgorCSAq LworCWlmIChHZXROdW1SZWdpc3RlcmVkV2FpdEV2ZW50cyhub2RlLT5tc19ldmVudHNldCkgPT0g MSkKKwl7CisJCUZyZWVXYWl0RXZlbnRTZXQobm9kZS0+bXNfZXZlbnRzZXQpOworCQlub2RlLT5t c19ldmVudHNldCA9IE5VTEw7CisJCXJldHVybjsKKwl9CisKKwkvKiBXZSB3YWl0IG9uIGF0IG1v c3QgRVZFTlRfQlVGRkVSX1NJWkUgZXZlbnRzLiAqLworCWlmIChuZXZlbnRzID4gRVZFTlRfQlVG RkVSX1NJWkUpCisJCW5ldmVudHMgPSBFVkVOVF9CVUZGRVJfU0laRTsKKworCS8qCisJICogV2Fp dCB1bnRpbCBhdCBsZWFzdCBvbmUgZXZlbnQgb2NjdXJzLgorCSAqLworCW5vY2N1cnJlZCA9IFdh aXRFdmVudFNldFdhaXQobm9kZS0+bXNfZXZlbnRzZXQsIC0xIC8qIG5vIHRpbWVvdXQgKi8sIG9j Y3VycmVkX2V2ZW50LAorCQkJCQkJCQkgbmV2ZW50cywgV0FJVF9FVkVOVF9BUFBFTkRfUkVBRFkp OworCUZyZWVXYWl0RXZlbnRTZXQobm9kZS0+bXNfZXZlbnRzZXQpOworCW5vZGUtPm1zX2V2ZW50 c2V0ID0gTlVMTDsKKwlpZiAobm9jY3VycmVkID09IDApCisJCXJldHVybjsKKworCS8qIERlbGl2 ZXIgbm90aWZpY2F0aW9ucy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgbm9jY3VycmVkOyBpKyspCisJ eworCQlXYWl0RXZlbnQgICp3ID0gJm9jY3VycmVkX2V2ZW50W2ldOworCisJCS8qCisJCSAqIEVh Y2ggd2FpdGluZyBzdWJwbGFuIHNob3VsZCBoYXZlIHJlZ2lzdGVyZWQgaXRzIHdhaXQgZXZlbnQg d2l0aAorCQkgKiB1c2VyX2RhdGEgcG9pbnRpbmcgYmFjayB0byBpdHMgQXN5bmNSZXF1ZXN0Lgor CQkgKi8KKwkJaWYgKCh3LT5ldmVudHMgJiBXTF9TT0NLRVRfUkVBREFCTEUpICE9IDApCisJCXsK KwkJCUFzeW5jUmVxdWVzdCAqYXJlcSA9IChBc3luY1JlcXVlc3QgKikgdy0+dXNlcl9kYXRhOwor CisJCQlpZiAoYXJlcS0+Y2FsbGJhY2tfcGVuZGluZykKKwkJCXsKKwkJCQkvKgorCQkJCSAqIE1h cmsgaXQgYXMgbm8gbG9uZ2VyIG5lZWRpbmcgYSBjYWxsYmFjay4gIFdlIG11c3QgZG8gdGhpcwor CQkJCSAqIGJlZm9yZSBkaXNwYXRjaGluZyB0aGUgY2FsbGJhY2sgaW4gY2FzZSB0aGUgY2FsbGJh Y2sgcmVzZXRzCisJCQkJICogdGhlIGZsYWcuCisJCQkJICovCisJCQkJYXJlcS0+Y2FsbGJhY2tf cGVuZGluZyA9IGZhbHNlOworCisJCQkJLyogRG8gdGhlIGFjdHVhbCB3b3JrLiAqLworCQkJCUV4 ZWNBc3luY05vdGlmeShhcmVxKTsKKwkJCX0KKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGF0aC9jb3N0c2l6ZS5jCmluZGV4IDc5OTkxYjE5ODA3Li5mOTU1N2E4MjgxZiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYworKysgYi9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCkBAIC0xNTIsNiArMTUyLDcgQEAgYm9vbAkJZW5h YmxlX3BhcmFsbGVsX2hhc2ggPSB0cnVlOwogYm9vbAkJZW5hYmxlX3BhcnRpdGlvbl9wcnVuaW5n ID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV9wcmVzb3J0ZWRfYWdncmVnYXRlID0gdHJ1ZTsKIGJvb2wJ CWVuYWJsZV9hc3luY19hcHBlbmQgPSB0cnVlOworYm9vbAkJZW5hYmxlX2FzeW5jX21lcmdlX2Fw cGVuZCA9IHRydWU7CiAKIHR5cGVkZWYgc3RydWN0CiB7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9jcmVhdGVwbGFuLmMKaW5kZXggZDFkMjU5ZTgwMmEuLjk3N2YxZWE0ODk2IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKKysrIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCkBAIC0xNDQ4LDYgKzE0NDgsNyBAQCBjcmVh dGVfbWVyZ2VfYXBwZW5kX3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIE1lcmdlQXBwZW5kUGF0aCAq YmVzdF9wYXRoLAogCUxpc3RDZWxsICAgKnN1YnBhdGhzOwogCVJlbE9wdEluZm8gKnJlbCA9IGJl c3RfcGF0aC0+cGF0aC5wYXJlbnQ7CiAJUGFydGl0aW9uUHJ1bmVJbmZvICpwYXJ0cHJ1bmVpbmZv ID0gTlVMTDsKKwlib29sCQljb25zaWRlcl9hc3luYyA9IGZhbHNlOwogCiAJLyoKIAkgKiBXZSBk b24ndCBoYXZlIHRoZSBhY3R1YWwgY3JlYXRpb24gb2YgdGhlIE1lcmdlQXBwZW5kIG5vZGUgc3Bs aXQgb3V0CkBAIC0xNDYyLDYgKzE0NjMsOSBAQCBjcmVhdGVfbWVyZ2VfYXBwZW5kX3BsYW4oUGxh bm5lckluZm8gKnJvb3QsIE1lcmdlQXBwZW5kUGF0aCAqYmVzdF9wYXRoLAogCXBsYW4tPnJpZ2h0 dHJlZSA9IE5VTEw7CiAJbm9kZS0+YXBwcmVsaWRzID0gcmVsLT5yZWxpZHM7CiAKKwljb25zaWRl cl9hc3luYyA9IChlbmFibGVfYXN5bmNfbWVyZ2VfYXBwZW5kICYmCisJCQkJCSAgIWJlc3RfcGF0 aC0+cGF0aC5wYXJhbGxlbF9zYWZlICYmCisJCQkJCSAgbGlzdF9sZW5ndGgoYmVzdF9wYXRoLT5z dWJwYXRocykgPiAxKTsKIAkvKgogCSAqIENvbXB1dGUgc29ydCBjb2x1bW4gaW5mbywgYW5kIGFk anVzdCBNZXJnZUFwcGVuZCdzIHRsaXN0IGFzIG5lZWRlZC4KIAkgKiBCZWNhdXNlIHdlIHBhc3Mg YWRqdXN0X3RsaXN0X2luX3BsYWNlID0gdHJ1ZSwgd2UgbWF5IGlnbm9yZSB0aGUKQEAgLTE1Mzcs NiArMTU0MSwxMCBAQCBjcmVhdGVfbWVyZ2VfYXBwZW5kX3BsYW4oUGxhbm5lckluZm8gKnJvb3Qs IE1lcmdlQXBwZW5kUGF0aCAqYmVzdF9wYXRoLAogCQkJc3VicGxhbiA9IChQbGFuICopIHNvcnQ7 CiAJCX0KIAorCQkvKiBJZiBuZWVkZWQsIGNoZWNrIHRvIHNlZSBpZiBzdWJwbGFuIGNhbiBiZSBl eGVjdXRlZCBhc3luY2hyb25vdXNseSAqLworCQlpZiAoY29uc2lkZXJfYXN5bmMpCisJCQltYXJr X2FzeW5jX2NhcGFibGVfcGxhbihzdWJwbGFuLCBzdWJwYXRoKTsKKwogCQlzdWJwbGFucyA9IGxh cHBlbmQoc3VicGxhbnMsIHN1YnBsYW4pOwogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJs ZXMuYwppbmRleCA3OWVjYWE0YzRjMi4uODM2YWFmNjAwMjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2Mv Z3VjX3RhYmxlcy5jCkBAIC05ODYsNiArOTg2LDE2IEBAIHN0cnVjdCBjb25maWdfYm9vbCBDb25m aWd1cmVOYW1lc0Jvb2xbXSA9CiAJCXRydWUsCiAJCU5VTEwsIE5VTEwsIE5VTEwKIAl9LAorCXsK KwkJeyJlbmFibGVfYXN5bmNfbWVyZ2VfYXBwZW5kIiwgUEdDX1VTRVJTRVQsIFFVRVJZX1RVTklO R19NRVRIT0QsCisJCQlnZXR0ZXh0X25vb3AoIkVuYWJsZXMgdGhlIHBsYW5uZXIncyB1c2Ugb2Yg YXN5bmMgbWVyZ2UgYXBwZW5kIHBsYW5zLiIpLAorCQkJTlVMTCwKKwkJCUdVQ19FWFBMQUlOCisJ CX0sCisJCSZlbmFibGVfYXN5bmNfbWVyZ2VfYXBwZW5kLAorCQl0cnVlLAorCQlOVUxMLCBOVUxM LCBOVUxMCisJfSwKIAl7CiAJCXsiZW5hYmxlX2dyb3VwX2J5X3Jlb3JkZXJpbmciLCBQR0NfVVNF UlNFVCwgUVVFUllfVFVOSU5HX01FVEhPRCwKIAkJCWdldHRleHRfbm9vcCgiRW5hYmxlcyByZW9y ZGVyaW5nIG9mIEdST1VQIEJZIGtleXMuIiksCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bv c3RncmVzcWwuY29uZi5zYW1wbGUKaW5kZXggNjY3ZTBkYzQwYTIuLjEyNGI2YTlmODk1IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCkBAIC0zOTIs NiArMzkyLDcgQEAKICMgLSBQbGFubmVyIE1ldGhvZCBDb25maWd1cmF0aW9uIC0KIAogI2VuYWJs ZV9hc3luY19hcHBlbmQgPSBvbgorI2VuYWJsZV9hc3luY19tZXJnZV9hcHBlbmQgPSBvbgogI2Vu YWJsZV9iaXRtYXBzY2FuID0gb24KICNlbmFibGVfZ2F0aGVybWVyZ2UgPSBvbgogI2VuYWJsZV9o YXNoYWdnID0gb24KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVNZXJnZUFw cGVuZC5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmgKaW5kZXggYzM5 YTlmYzBjYjIuLjQzNzE0MjZiZWExIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9u b2RlTWVyZ2VBcHBlbmQuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9ub2RlTWVyZ2VBcHBl bmQuaApAQCAtMTksNSArMTksNiBAQAogZXh0ZXJuIE1lcmdlQXBwZW5kU3RhdGUgKkV4ZWNJbml0 TWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdz KTsKIGV4dGVybiB2b2lkIEV4ZWNFbmRNZXJnZUFwcGVuZChNZXJnZUFwcGVuZFN0YXRlICpub2Rl KTsKIGV4dGVybiB2b2lkIEV4ZWNSZVNjYW5NZXJnZUFwcGVuZChNZXJnZUFwcGVuZFN0YXRlICpu b2RlKTsKK2V4dGVybiB2b2lkIEV4ZWNBc3luY01lcmdlQXBwZW5kUmVzcG9uc2UoQXN5bmNSZXF1 ZXN0ICphcmVxKTsKIAogI2VuZGlmCQkJCQkJCS8qIE5PREVNRVJHRUFQUEVORF9IICovCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVz L2V4ZWNub2Rlcy5oCmluZGV4IDg3ZjE1MTllYzY1Li5lNDhhYjA0NDU4MSAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhl Y25vZGVzLmgKQEAgLTE0ODgsMTAgKzE0ODgsNjYgQEAgdHlwZWRlZiBzdHJ1Y3QgTWVyZ2VBcHBl bmRTdGF0ZQogCVR1cGxlVGFibGVTbG90ICoqbXNfc2xvdHM7CS8qIGFycmF5IG9mIGxlbmd0aCBt c19ucGxhbnMgKi8KIAlzdHJ1Y3QgYmluYXJ5aGVhcCAqbXNfaGVhcDsgLyogYmluYXJ5IGhlYXAg b2Ygc2xvdCBpbmRpY2VzICovCiAJYm9vbAkJbXNfaW5pdGlhbGl6ZWQ7IC8qIGFyZSBzdWJwbGFu cyBzdGFydGVkPyAqLworCUJpdG1hcHNldCAgKm1zX2FzeW5jcGxhbnM7CS8qIGFzeW5jaHJvbm91 cyBwbGFucyBpbmRleGVzICovCisJaW50CQkJbXNfbmFzeW5jcGxhbnM7IC8qICMgb2YgYXN5bmNo cm9ub3VzIHBsYW5zICovCisJQXN5bmNSZXF1ZXN0ICoqbXNfYXN5bmNyZXF1ZXN0czsJLyogYXJy YXkgb2YgQXN5bmNSZXF1ZXN0cyAqLworCVR1cGxlVGFibGVTbG90ICoqbXNfYXN5bmNyZXN1bHRz OwkvKiB1bnJldHVybmVkIHJlc3VsdHMgb2YgYXN5bmMgcGxhbnMgKi8KKwlCaXRtYXBzZXQgICAq bXNfaGFzX2FzeW5jcmVzdWx0czsJLyogcGxhbnMgd2hpY2ggaGF2ZSBhc3luYyByZXN1bHRzICov CisJQml0bWFwc2V0ICAqbXNfYXN5bmNyZW1haW47IC8qIHJlbWFpbmluZyBhc3luY2hyb25vdXMg cGxhbnMgKi8KKwlCaXRtYXBzZXQgICptc19uZWVkcmVxdWVzdDsgLyogYXN5bmNocm9ub3VzIHBs YW5zIG5lZWRpbmcgYSBuZXcgcmVxdWVzdCAqLworCXN0cnVjdCBXYWl0RXZlbnRTZXQgKm1zX2V2 ZW50c2V0OwkvKiBXYWl0RXZlbnRTZXQgdXNlZCB0byBjb25maWd1cmUgZmlsZQorCQkJCQkJCQkJ CSAqIGRlc2NyaXB0b3Igd2FpdCBldmVudHMgKi8KIAlzdHJ1Y3QgUGFydGl0aW9uUHJ1bmVTdGF0 ZSAqbXNfcHJ1bmVfc3RhdGU7CisJYm9vbAkJbXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZDsg ICAvKiBpcyBtc192YWxpZF9zdWJwbGFucyB2YWxpZD8gKi8KIAlCaXRtYXBzZXQgICptc192YWxp ZF9zdWJwbGFuczsKKwlCaXRtYXBzZXQgICptc192YWxpZF9hc3luY3BsYW5zOwkvKiB2YWxpZCBh c3luY2hyb25vdXMgcGxhbnMgaW5kZXhlcyAqLwogfSBNZXJnZUFwcGVuZFN0YXRlOwogCisvKiBH ZXR0ZXJzIGZvciBBcHBlbmRTdGF0ZSBhbmQgTWVyZ2VBcHBlbmRTdGF0ZSAqLworc3RhdGljIGlu bGluZSBzdHJ1Y3QgV2FpdEV2ZW50U2V0ICoKK0dldEFwcGVuZEV2ZW50U2V0KFBsYW5TdGF0ZSAq cHMpCit7CisJQXNzZXJ0IChJc0EocHMsIEFwcGVuZFN0YXRlKSB8fCBJc0EocHMsIE1lcmdlQXBw ZW5kU3RhdGUpKTsKKworCWlmIChJc0EocHMsIEFwcGVuZFN0YXRlKSkKKwkJcmV0dXJuICgoQXBw ZW5kU3RhdGUgKilwcyktPmFzX2V2ZW50c2V0OworCWVsc2UKKwkJcmV0dXJuICgoTWVyZ2VBcHBl bmRTdGF0ZSAqKXBzKS0+bXNfZXZlbnRzZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgQml0bWFwc2V0 ICoKK0dldE5lZWRSZXF1ZXN0KFBsYW5TdGF0ZSAqcHMpCit7CisJQXNzZXJ0IChJc0EocHMsIEFw cGVuZFN0YXRlKSB8fCBJc0EocHMsIE1lcmdlQXBwZW5kU3RhdGUpKTsKKworCWlmIChJc0EocHMs IEFwcGVuZFN0YXRlKSkKKwkJcmV0dXJuICgoQXBwZW5kU3RhdGUgKilwcyktPmFzX25lZWRyZXF1 ZXN0OworCWVsc2UKKwkJcmV0dXJuICgoTWVyZ2VBcHBlbmRTdGF0ZSAqKXBzKS0+bXNfbmVlZHJl cXVlc3Q7Cit9CisKK3N0YXRpYyBpbmxpbmUgQml0bWFwc2V0ICoKK0dldFZhbGlkQXN5bmNwbGFu cyhQbGFuU3RhdGUgKnBzKQoreworCUFzc2VydCAoSXNBKHBzLCBBcHBlbmRTdGF0ZSkgfHwgSXNB KHBzLCBNZXJnZUFwcGVuZFN0YXRlKSk7CisKKwlpZiAoSXNBKHBzLCBBcHBlbmRTdGF0ZSkpCisJ CXJldHVybiAoKEFwcGVuZFN0YXRlICopcHMpLT5hc192YWxpZF9hc3luY3BsYW5zOworCWVsc2UK KwkJcmV0dXJuICgoTWVyZ2VBcHBlbmRTdGF0ZSAqKXBzKS0+bXNfdmFsaWRfYXN5bmNwbGFuczsK K30KKworc3RhdGljIGlubGluZSBBc3luY1JlcXVlc3QqCitHZXRWYWxpZEFzeW5jUmVxdWVzdChQ bGFuU3RhdGUgKnBzLCBpbnQgbnJlcSkKK3sKKwlBc3NlcnQgKElzQShwcywgQXBwZW5kU3RhdGUp IHx8IElzQShwcywgTWVyZ2VBcHBlbmRTdGF0ZSkpOworCisJaWYgKElzQShwcywgQXBwZW5kU3Rh dGUpKQorCQlyZXR1cm4gKChBcHBlbmRTdGF0ZSAqKXBzKS0+YXNfYXN5bmNyZXF1ZXN0c1tucmVx XTsKKwllbHNlCisJCXJldHVybiAoKE1lcmdlQXBwZW5kU3RhdGUgKilwcyktPm1zX2FzeW5jcmVx dWVzdHNbbnJlcV07Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAqCSBSZWN1cnNpdmVVbmlv blN0YXRlIGluZm9ybWF0aW9uCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVy L2Nvc3QuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKaW5kZXggNTc4NjFiZmI0NDYu LmU5NWE4ZTM2ZGNhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oCisr KyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKQEAgLTcwLDYgKzcwLDcgQEAgZXh0ZXJu IFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX3BhcmFsbGVsX2hhc2g7CiBleHRlcm4gUEdETExJTVBP UlQgYm9vbCBlbmFibGVfcGFydGl0aW9uX3BydW5pbmc7CiBleHRlcm4gUEdETExJTVBPUlQgYm9v bCBlbmFibGVfcHJlc29ydGVkX2FnZ3JlZ2F0ZTsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVu YWJsZV9hc3luY19hcHBlbmQ7CitleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfYXN5bmNf bWVyZ2VfYXBwZW5kOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBjb25zdHJhaW50X2V4Y2x1c2lv bjsKIAogZXh0ZXJuIGRvdWJsZSBpbmRleF9wYWdlc19mZXRjaGVkKGRvdWJsZSB0dXBsZXNfZmV0 Y2hlZCwgQmxvY2tOdW1iZXIgcGFnZXMsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3N5c3ZpZXdzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mu b3V0CmluZGV4IGZhZDdmYzNhN2UwLi5kNTEwNWJjMjhhOCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9zeXN2aWV3cy5vdXQKQEAgLTE0OSw2ICsxNDksNyBAQCBzZWxlY3QgbmFtZSwgc2V0dGlu ZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5hbWUgbGlrZSAnZW5hYmxlJSc7CiAgICAgICAgICAg ICAgIG5hbWUgICAgICAgICAgICAgIHwgc2V0dGluZyAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLQogIGVuYWJsZV9hc3luY19hcHBlbmQgICAgICAgICAgICB8IG9u CisgZW5hYmxlX2FzeW5jX21lcmdlX2FwcGVuZCAgICAgIHwgb24KICBlbmFibGVfYml0bWFwc2Nh biAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9nYXRoZXJtZXJnZSAgICAgICAgICAgICB8IG9u CiAgZW5hYmxlX2dyb3VwX2J5X3Jlb3JkZXJpbmcgICAgIHwgb24KQEAgLTE3MCw3ICsxNzEsNyBA QCBzZWxlY3QgbmFtZSwgc2V0dGluZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5hbWUgbGlrZSAn ZW5hYmxlJSc7CiAgZW5hYmxlX3NlcXNjYW4gICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVf c29ydCAgICAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV90aWRzY2FuICAgICAgICAgICAg ICAgICB8IG9uCi0oMjIgcm93cykKKygyMyByb3dzKQogCiAtLSBUaGVyZSBhcmUgYWx3YXlzIHdh aXQgZXZlbnQgZGVzY3JpcHRpb25zIGZvciB2YXJpb3VzIHR5cGVzLiAgSW5qZWN0aW9uUG9pbnQK IC0tIG1heSBiZSBwcmVzZW50IG9yIGFic2VudCwgZGVwZW5kaW5nIG9uIGhpc3Rvcnkgc2luY2Ug bGFzdCBwb3N0bWFzdGVyIHN0YXJ0LgotLSAKMi4zNC4xCgo= --=_7e127d5b807827e3194b9241facd45f2 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v2-0001-mark_async_capable-subpath-should-match-subplan.patch Content-Disposition: attachment; filename=v2-0001-mark_async_capable-subpath-should-match-subplan.patch; size=1962 RnJvbSAyM2I5NTEzNzM0MzIwNmMyZTE4NTc4MzU3YjViZjE4NTA3NDRiNDhkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgUHloYWxvdiA8YS5weWhhbG92QHBvc3RncmVz cHJvLnJ1PgpEYXRlOiBGcmksIDIxIEp1bCAyMDIzIDEyOjA1OjA3ICswMzAwClN1YmplY3Q6IFtQ QVRDSCAxLzJdIG1hcmtfYXN5bmNfY2FwYWJsZSgpOiBzdWJwYXRoIHNob3VsZCBtYXRjaCBzdWJw bGFuCgotLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYyB8IDE2ICsr KysrKysrLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDggZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxh bi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCmluZGV4IDI4YWRk YzExMjlhLi5kMWQyNTllODAyYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bs YW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBs YW4uYwpAQCAtMTE0NywxMCArMTE0NywxMCBAQCBtYXJrX2FzeW5jX2NhcGFibGVfcGxhbihQbGFu ICpwbGFuLCBQYXRoICpwYXRoKQogCQkJCVN1YnF1ZXJ5U2NhbiAqc2Nhbl9wbGFuID0gKFN1YnF1 ZXJ5U2NhbiAqKSBwbGFuOwogCiAJCQkJLyoKLQkJCQkgKiBJZiB0aGUgZ2VuZXJhdGVkIHBsYW4g bm9kZSBpbmNsdWRlcyBhIGdhdGluZyBSZXN1bHQgbm9kZSwKLQkJCQkgKiB3ZSBjYW4ndCBleGVj dXRlIGl0IGFzeW5jaHJvbm91c2x5LgorCQkJCSAqIElmIHRoZSBnZW5lcmF0ZWQgcGxhbiBub2Rl IGluY2x1ZGVzIGEgZ2F0aW5nIFJlc3VsdCBub2RlIG9yCisJCQkJICogYSBTb3J0IG5vZGUsIHdl IGNhbid0IGV4ZWN1dGUgaXQgYXN5bmNocm9ub3VzbHkuCiAJCQkJICovCi0JCQkJaWYgKElzQShw bGFuLCBSZXN1bHQpKQorCQkJCWlmIChJc0EocGxhbiwgUmVzdWx0KSB8fCBJc0EocGxhbiwgU29y dCkpCiAJCQkJCXJldHVybiBmYWxzZTsKIAogCQkJCS8qCkBAIC0xMTY4LDEwICsxMTY4LDEwIEBA IG1hcmtfYXN5bmNfY2FwYWJsZV9wbGFuKFBsYW4gKnBsYW4sIFBhdGggKnBhdGgpCiAJCQkJRmR3 Um91dGluZSAqZmR3cm91dGluZSA9IHBhdGgtPnBhcmVudC0+ZmR3cm91dGluZTsKIAogCQkJCS8q Ci0JCQkJICogSWYgdGhlIGdlbmVyYXRlZCBwbGFuIG5vZGUgaW5jbHVkZXMgYSBnYXRpbmcgUmVz dWx0IG5vZGUsCi0JCQkJICogd2UgY2FuJ3QgZXhlY3V0ZSBpdCBhc3luY2hyb25vdXNseS4KKwkJ CQkgKiBJZiB0aGUgZ2VuZXJhdGVkIHBsYW4gbm9kZSBpbmNsdWRlcyBhIGdhdGluZyBSZXN1bHQg bm9kZSBvcgorCQkJCSAqIGEgU29ydCBub2RlLCB3ZSBjYW4ndCBleGVjdXRlIGl0IGFzeW5jaHJv bm91c2x5LgogCQkJCSAqLwotCQkJCWlmIChJc0EocGxhbiwgUmVzdWx0KSkKKwkJCQlpZiAoSXNB KHBsYW4sIFJlc3VsdCkgfHwgSXNBKHBsYW4sIFNvcnQpKQogCQkJCQlyZXR1cm4gZmFsc2U7CiAK IAkJCQlBc3NlcnQoZmR3cm91dGluZSAhPSBOVUxMKTsKQEAgLTExODQsOSArMTE4NCw5IEBAIG1h cmtfYXN5bmNfY2FwYWJsZV9wbGFuKFBsYW4gKnBsYW4sIFBhdGggKnBhdGgpCiAKIAkJCS8qCiAJ CQkgKiBJZiB0aGUgZ2VuZXJhdGVkIHBsYW4gbm9kZSBpbmNsdWRlcyBhIFJlc3VsdCBub2RlIGZv ciB0aGUKLQkJCSAqIHByb2plY3Rpb24sIHdlIGNhbid0IGV4ZWN1dGUgaXQgYXN5bmNocm9ub3Vz bHkuCisJCQkgKiBwcm9qZWN0aW9uIG9yIGEgU29ydCBub2RlLCB3ZSBjYW4ndCBleGVjdXRlIGl0 IGFzeW5jaHJvbm91c2x5LgogCQkJICovCi0JCQlpZiAoSXNBKHBsYW4sIFJlc3VsdCkpCisJCQlp ZiAoSXNBKHBsYW4sIFJlc3VsdCkgfHwgSXNBKHBsYW4sIFNvcnQpKQogCQkJCXJldHVybiBmYWxz ZTsKIAogCQkJLyoKLS0gCjIuMzQuMQoK --=_7e127d5b807827e3194b9241facd45f2--