From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa1.mentor.iphmx.com (esa1.mentor.iphmx.com [68.232.129.153]) by sourceware.org (Postfix) with ESMTPS id D43983857C48 for ; Fri, 19 Feb 2021 19:12:50 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org D43983857C48 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=Kwok_Yeung@mentor.com IronPort-SDR: eIBqDfBFQ5U4vR3hUt4ZV7HkcWNEuqWHImEk8+3NPKC1sLLWS02/j68eaiZsPokl3o2syamhYn B7oX4vdPMVKys1W37L08sS2VcZIgZOs/uKRY5PosbABO82fu41tSTuv8yOoL5XtYQHHe1YL48M irueNmH7fr06Pq//14crVpBknDvOhp3ud0AYOrwIqIJx0LUMUXqHeQ5+0zF09mvATLgQmmQ9i0 hzJAxy5kEN3oOsLHPMy/FhXXN226Rc24VJqARjrMNqFhIJfKL+W+UoJ01uFsODPXSsVv5Eh0sf yKA= X-IronPort-AV: E=Sophos;i="5.81,189,1610438400"; d="scan'208,223";a="60618318" Received: from orw-gwy-02-in.mentorg.com ([192.94.38.167]) by esa1.mentor.iphmx.com with ESMTP; 19 Feb 2021 11:12:49 -0800 IronPort-SDR: /jJ5yesXmQhxs9LmJWvPycL48zHQFKqXwQrfQMRX5AAMtI4hEn6s6bNMZfj6PTOG5Rju72DkAy 2eXnc7S1yGVYuESNAzAcDtAE1NDW+MUxvJKqs9BTdHhH10rdJDAKAczu1qNTV1tgbTrwcBbsq5 1S6UwTkJ9++JTPGTh9XM4MHz841pRCgenj3YKSjpoLTT21n71PQqCz2Woeqe4Eoi0BFfu3J8MA gz2wVpJwo9s02DVtsUWNlHhRbBsLFXAmi7Re/OP4cdc8pmg0m0CV3Z6NGD3UQkU0h2vqKvYA2X feU= Subject: [WIP] Re: [PATCH] openmp: Fix intermittent hanging of task-detach-6 libgomp tests [PR98738] To: Jakub Jelinek CC: GCC Patches References: <20210129150317.GN4020736@tucnak> From: Kwok Cheung Yeung Message-ID: <0aca6daf-356a-7b03-c007-e33c35114356@codesourcery.com> Date: Fri, 19 Feb 2021 19:12:42 +0000 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.7.1 MIME-Version: 1.0 In-Reply-To: <20210129150317.GN4020736@tucnak> Content-Type: multipart/mixed; boundary="------------235B8FC1BFCA57EF9BC9F31A" Content-Language: en-GB X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-02.mgc.mentorg.com (139.181.222.2) To SVR-IES-MBX-04.mgc.mentorg.com (139.181.222.4) X-Spam-Status: No, score=-12.6 required=5.0 tests=BAYES_00, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Feb 2021 19:12:56 -0000 --------------235B8FC1BFCA57EF9BC9F31A Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit Hello Sorry for taking so long in replying. On 29/01/2021 3:03 pm, Jakub Jelinek wrote: > It can also crash if team is NULL, which will happen any time > this is called outside of a parallel. Just try (should go into testsuite > too): > #include > > int > main () > { > omp_event_handle_t ev; > #pragma omp task detach (ev) > omp_fulfill_event (ev); > return 0; > } > I have included this as task-detach-11.{c|f90}. > Additionally, there is an important difference between fulfill for > included tasks and for non-included tasks, for the former there is no team > or anything to care about, for the latter there is a team and one needs to > take the task_lock, but at that point it can do pretty much everything in > omp_fulfill_event rather than handling it elsewhere. > > So, what I'm suggesting is: > > Replace > bool detach; > gomp_sem_t completion_sem; > with > struct gomp_task_detach *detach; > and add struct gomp_task_detach that would contain everything that will be > needed (indirect so that we don't waste space for it in every task, but only > for those that have detach clause). > We need: > 1) some way to tell if it is an included task or not > 2) for included tasks the gomp_sem_t completion_sem > (and nothing but 1) and 2) for those), > 3) struct gomp_team * for non-included tasks > 4) some way to find out if the task has finished and is just waiting for > fulfill event (perhaps your GOMP_TASK_DETACHED is ok for that) > 5) some way to find out if the task has been fulfilled already > (gomp_sem_t for that seems an overkill though) > > 1) could be done through the struct gomp_team *team; member, > set it to NULL in included tasks (no matter if they are in some team or not) > and to non-NULL team of the task (non-included tasks must have a team). > I have opted for a union of completion_sem (for tasks that are undeferred) and a struct gomp_team *detach_team (for deferred tasks) that holds the team if the completion event has not yet fulfilled, or NULL if is it. I don't see the point of having an indirection to the union here since the union is just the size of a pointer, so it might as well be inlined. > And I don't see the point of task_detach_queue if we can handle the > dependers etc. all in omp_fulfill_event, which I think we can if we take the > task_lock. I have removed the task_detach_queue. The team barrier, taskwait and taskgroup_end now just set the task kind to GOMP_TASK_DETACHED without decrementing the task_count if a task finishes with detach_team non-NULL. > So, I think omp_fulfill_event should look at the task->detach it got, > if task->detach->team is NULL, it is included task, GOMP_task should have > initialized task->detach->completion_sem and omp_fulfill_event should just > gomp_sem_post it and that is all, GOMP_task for included task needs to > gomp_sem_wait after it finishes before it returns. omp_fulfill_event now posts completion_sem if the task kind is OMP_TASK_UNDEFERRED, and GOMP_task waits for it. Since the task is executed within GOMP_task, it already knows if the task has a detach clause or not, so we do not need to store that information in gomp_task. > Otherwise, take the team's task_lock, and look at whether the task is still > running, in that case just set the bool that it has been fulfilled (or > whatever way of signalling 5), perhaps it can be say clearing task->detach > pointer). detach_team is now set to NULL when the event is fulfilled if the task has not started yet or is still executing (checked by the kind). In that case, when the task finishes executing, it behaves just like a task without detach would and finishes normally. When creating non-included tasks in GOMP_task with detach clause > through gomp_malloc, it would add the size needed for struct > gomp_task_detach. Not necessary with the inlined union. > But if the task is already in GOMP_TASK_DETACHED state, instead we need > while holding the task_lock do everything that would have been done normally > on task finish, but we've skipped it because it hasn't been fulfilled. > Including the waking/sem_posts when something could be waiting on that task. > > Do you agree with this, or see some reason why this can't work? The main problem I see is this code in gomp_barrier_handle_tasks: if (--team->task_count == 0 && gomp_team_barrier_waiting_for_tasks (&team->barrier)) { gomp_team_barrier_done (&team->barrier, state); We do not have access to state from within omp_fulfill_event, so how should this be handled? > And testsuite should include also cases where we wait for the tasks with > detach clause to be fulfilled at the end of taskgroup (i.e. need to cover > all of taskwait, taskgroup end and barrier). I have changed task-detach-[56].* to test the barrier, task-detach-[78].* to test taskwait, and task-detach-(9|10) to test taskgroup (with the first one without a target construct, the second with). I have included the current state of my patch. All task-detach-* tests pass when executed without offloading or with offloading to GCN, but with offloading to Nvidia, task-detach-6.* hangs consistently but everything else passes (probably because of the missing gomp_team_barrier_done?). Kwok --------------235B8FC1BFCA57EF9BC9F31A Content-Type: text/plain; charset="UTF-8"; name="0001-openmp-Fix-intermittent-hanging-of-task-detach-6-lib.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename*0="0001-openmp-Fix-intermittent-hanging-of-task-detach-6-lib.pa"; filename*1="tch" RnJvbSAzMWE1YzczNjkxMDAzNjM2NGZkMWYwZjNjZjdhYzI4NDM3ODY0YTI3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBLd29rIENoZXVuZyBZZXVuZyA8a2N5QGNvZGVzb3Vy Y2VyeS5jb20+CkRhdGU6IFRodSwgMjEgSmFuIDIwMjEgMDU6Mzg6NDcgLTA4MDAKU3ViamVj dDogW1BBVENIXSBvcGVubXA6IEZpeCBpbnRlcm1pdHRlbnQgaGFuZ2luZyBvZiB0YXNrLWRl dGFjaC02IGxpYmdvbXAKIHRlc3RzIFtQUjk4NzM4XQoKVGhpcyBhZGRzIHN1cHBvcnQgZm9y IHRoZSB0YXNrIGRldGFjaCBjbGF1c2UgdG8gdGFza3dhaXQgYW5kIHRhc2tncm91cCwgYW5k CnNpbXBsaWZpZXMgdGhlIGhhbmRsaW5nIG9mIHRoZSBkZXRhY2ggY2xhdXNlIGJ5IG1vdmlu ZyBtb3N0IG9mIHRoZSBleHRyYQpoYW5kbGluZyByZXF1aXJlZCBmb3IgZGV0YWNoIHRhc2tz IHRvIG9tcF9mdWxmaWxsX2V2ZW50LgoKMjAyMS0wMi0xOSAgS3dvayBDaGV1bmcgWWV1bmcg IDxrY3lAY29kZXNvdXJjZXJ5LmNvbT4KCglsaWJnb21wLwoKCVBSIGxpYmdvbXAvOTg3MzgK CSogbGliZ29tcC5oIChlbnVtIGdvbXBfdGFza19raW5kKTogQWRkIEdPTVBfVEFTS19ERVRB Q0hFRC4KCShzdHJ1Y3QgZ29tcF90YXNrKTogUmVwbGFjZSBkZXRhY2ggYW5kIGNvbXBsZXRp b25fc2VtIGZpZWxkcyB3aXRoCgl1bmlvbiBjb250YWluaW5nIGNvbXBsZXRpb25fc2VtIGFu ZCBkZXRhY2hfdGVhbS4KCShzdHJ1Y3QgZ29tcF90ZWFtKTogUmVtb3ZlIHRhc2tfZGV0YWNo X3F1ZXVlLgoJKiB0YXNrLmM6IEluY2x1ZGUgYXNzZXJ0LmguCgkoZ29tcF9pbml0X3Rhc2sp OiBJbml0aWFsaXplIGRldGFjaF90ZWFtIGZpZWxkLgoJKHRhc2tfZnVsZmlsbGVkX3ApOiBE ZWxldGUuCgkoR09NUF90YXNrKTogVXNlIGFkZHJlc3Mgb2YgdGFzayBhcyB0aGUgZXZlbnQg aGFuZGxlLiAgUmVtb3ZlCglpbml0aWFsaXphdGlvbiBvZiBkZXRhY2ggZmllbGQuICBJbml0 aWFsaXplIGRldGFjaF90ZWFtIGZpZWxkIGZvcgoJZGVmZXJyZWQgdGFza3MuCgkoZ29tcF9i YXJyaWVyX2hhbmRsZV90YXNrcyk6IFJlbW92ZSBoYW5kbGluZyBvZiB0YXNrX2RldGFjaF9x dWV1ZS4KCVNldCBraW5kIG9mIHN1c3BlbmRlZCBkZXRhY2ggdGFzayB0byBHT01QX1RBU0tf REVUQUNIRUQgYW5kCglkZWNyZW1lbnQgdGFza19ydW5uaW5nX2NvdW50LiAgTW92ZSBmaW5p c2hfY2FuY2VsbGVkIGJsb2NrIG91dCBvZgoJZWxzZSBicmFuY2guCgkoR09NUF90YXNrd2Fp dCk6IEhhbmRsZSB0YXNrcyB3aXRoIGNvbXBsZXRpb24gZXZlbnRzIHRoYXQgaGF2ZSBub3QK CWJlZW4gZnVsZmlsbGVkLgoJKEdPTVBfdGFza2dyb3VwX2VuZCk6IExpa2V3aXNlLgoJKG9t cF9mdWxmaWxsX2V2ZW50KTogVXNlIGFkZHJlc3Mgb2YgdGFzayBhcyBldmVudCBoYW5kbGUu ICBQb3N0IHRvCgljb21wbGV0aW9uX3NlbSBmb3IgdW5kZWZlcnJlZCB0YXNrcy4gIENsZWFy IGRldGFjaF90ZWFtIGlmIHRhc2sKCWhhcyBub3QgZmluaXNoZWQuICBGb3IgZmluaXNoZWQg dGFza3MsIGhhbmRsZSBwb3N0LWV4ZWN1dGlvbiB0YXNrcywKCXBvc3QgdG8gdGFza3dhaXRf c2VtIGFuZCB0YXNrZ3JvdXBfc2VtIGlmIG5lY2Vzc2FyeSwgY2FsbAoJZ29tcF90ZWFtX2Jh cnJpZXJfd2FrZSBpZiBuZWNlc3NhcnksIGFuZCBmcmVlIHRhc2suCgkqIHRlc3RzdWl0ZS9s aWJnb21wLmMtYysrLWNvbW1vbi90YXNrLWRldGFjaC0xLmM6IEZpeCBmb3JtYXR0aW5nLgoJ KiB0ZXN0c3VpdGUvbGliZ29tcC5jLWMrKy1jb21tb24vdGFzay1kZXRhY2gtMi5jOiBGaXgg Zm9ybWF0dGluZy4KCSogdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL3Rhc2stZGV0 YWNoLTMuYzogRml4IGZvcm1hdHRpbmcuCgkqIHRlc3RzdWl0ZS9saWJnb21wLmMtYysrLWNv bW1vbi90YXNrLWRldGFjaC00LmM6IEZpeCBmb3JtYXR0aW5nLgoJKiB0ZXN0c3VpdGUvbGli Z29tcC5jLWMrKy1jb21tb24vdGFzay1kZXRhY2gtNS5jOiBGaXggZm9ybWF0dGluZy4KCUNo YW5nZSBkYXRhLXNoYXJpbmcgb2YgZGV0YWNoIGV2ZW50cyBvbiBlbmNsb3NpbmcgcGFyYWxs ZWwgdG8gcHJpdmF0ZS4KCSogdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL3Rhc2st ZGV0YWNoLTYuYzogTGlrZXdpc2UuICBSZW1vdmUKCXRhc2t3YWl0IGRpcmVjdGl2ZS4KCSog dGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL3Rhc2stZGV0YWNoLTcuYzogTmV3LgoJ KiB0ZXN0c3VpdGUvbGliZ29tcC5jLWMrKy1jb21tb24vdGFzay1kZXRhY2gtOC5jOiBOZXcu CgkqIHRlc3RzdWl0ZS9saWJnb21wLmMtYysrLWNvbW1vbi90YXNrLWRldGFjaC05LmM6IE5l dy4KCSogdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL3Rhc2stZGV0YWNoLTEwLmM6 IE5ldy4KCSogdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL3Rhc2stZGV0YWNoLTEx LmM6IE5ldy4KCSogdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL3Rhc2stZGV0YWNo LTEuZjkwOiBGaXggZm9ybWF0dGluZy4KCSogdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29t bW9uL3Rhc2stZGV0YWNoLTIuZjkwOiBGaXggZm9ybWF0dGluZy4KCSogdGVzdHN1aXRlL2xp YmdvbXAuYy1jKystY29tbW9uL3Rhc2stZGV0YWNoLTMuZjkwOiBGaXggZm9ybWF0dGluZy4K CSogdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL3Rhc2stZGV0YWNoLTQuZjkwOiBG aXggZm9ybWF0dGluZy4KCSogdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi90YXNrLWRldGFj aC01LmY5MDogRml4IGZvcm1hdHRpbmcuCglDaGFuZ2UgZGF0YS1zaGFyaW5nIG9mIGRldGFj aCBldmVudHMgb24gZW5jbG9zaW5nIHBhcmFsbGVsIHRvIHByaXZhdGUuCgkqIHRlc3RzdWl0 ZS9saWJnb21wLmZvcnRyYW4vdGFzay1kZXRhY2gtNi5mOTA6IExpa2V3aXNlLiAgUmVtb3Zl Cgl0YXNrd2FpdCBkaXJlY3RpdmUuCgkqIHRlc3RzdWl0ZS9saWJnb21wLmMtYysrLWNvbW1v bi90YXNrLWRldGFjaC03LmY5MDogTmV3LgoJKiB0ZXN0c3VpdGUvbGliZ29tcC5jLWMrKy1j b21tb24vdGFzay1kZXRhY2gtOC5mOTA6IE5ldy4KCSogdGVzdHN1aXRlL2xpYmdvbXAuYy1j KystY29tbW9uL3Rhc2stZGV0YWNoLTkuZjkwOiBOZXcuCgkqIHRlc3RzdWl0ZS9saWJnb21w LmMtYysrLWNvbW1vbi90YXNrLWRldGFjaC0xMC5mOTA6IE5ldy4KCSogdGVzdHN1aXRlL2xp YmdvbXAuYy1jKystY29tbW9uL3Rhc2stZGV0YWNoLTExLmY5MDogTmV3LgotLS0KIGxpYmdv bXAvbGliZ29tcC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE4ICst CiBsaWJnb21wL3Rhc2suYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 IDIyNSArKysrKysrKysrKysrLS0tLS0tLS0KIGxpYmdvbXAvdGVhbS5jICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyIC0KIC4uLi90ZXN0c3VpdGUvbGliZ29t cC5jLWMrKy1jb21tb24vdGFzay1kZXRhY2gtMS5jIHwgICA0ICstCiAuLi4vbGliZ29tcC5j LWMrKy1jb21tb24vdGFzay1kZXRhY2gtMTAuYyAgICAgICAgICB8ICA0NSArKysrKwogLi4u L2xpYmdvbXAuYy1jKystY29tbW9uL3Rhc2stZGV0YWNoLTExLmMgICAgICAgICAgfCAgMTMg KysKIC4uLi90ZXN0c3VpdGUvbGliZ29tcC5jLWMrKy1jb21tb24vdGFzay1kZXRhY2gtMi5j IHwgICA2ICstCiAuLi4vdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL3Rhc2stZGV0 YWNoLTMuYyB8ICAgNiArLQogLi4uL3Rlc3RzdWl0ZS9saWJnb21wLmMtYysrLWNvbW1vbi90 YXNrLWRldGFjaC00LmMgfCAgIDQgKy0KIC4uLi90ZXN0c3VpdGUvbGliZ29tcC5jLWMrKy1j b21tb24vdGFzay1kZXRhY2gtNS5jIHwgICA4ICstCiAuLi4vdGVzdHN1aXRlL2xpYmdvbXAu Yy1jKystY29tbW9uL3Rhc2stZGV0YWNoLTYuYyB8ICAgOCArLQogLi4uL3Rlc3RzdWl0ZS9s aWJnb21wLmMtYysrLWNvbW1vbi90YXNrLWRldGFjaC03LmMgfCAgNDUgKysrKysKIC4uLi90 ZXN0c3VpdGUvbGliZ29tcC5jLWMrKy1jb21tb24vdGFzay1kZXRhY2gtOC5jIHwgIDQ3ICsr KysrCiAuLi4vdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL3Rhc2stZGV0YWNoLTku YyB8ICA0MyArKysrCiAuLi4vdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi90YXNrLWRldGFj aC0xLmY5MCAgICB8ICAgNCArLQogLi4uL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vdGFz ay1kZXRhY2gtMTAuZjkwICAgfCAgNDQgKysrKwogLi4uL3Rlc3RzdWl0ZS9saWJnb21wLmZv cnRyYW4vdGFzay1kZXRhY2gtMTEuZjkwICAgfCAgMTMgKysKIC4uLi90ZXN0c3VpdGUvbGli Z29tcC5mb3J0cmFuL3Rhc2stZGV0YWNoLTIuZjkwICAgIHwgICA2ICstCiAuLi4vdGVzdHN1 aXRlL2xpYmdvbXAuZm9ydHJhbi90YXNrLWRldGFjaC0zLmY5MCAgICB8ICAgNiArLQogLi4u L3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vdGFzay1kZXRhY2gtNC5mOTAgICAgfCAgIDQg Ky0KIC4uLi90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL3Rhc2stZGV0YWNoLTUuZjkwICAg IHwgICA4ICstCiAuLi4vdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi90YXNrLWRldGFjaC02 LmY5MCAgICB8ICAxNiArLQogLi4uL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vdGFzay1k ZXRhY2gtNy5mOTAgICAgfCAgNDIgKysrKwogLi4uL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRy YW4vdGFzay1kZXRhY2gtOC5mOTAgICAgfCAgNDUgKysrKysKIC4uLi90ZXN0c3VpdGUvbGli Z29tcC5mb3J0cmFuL3Rhc2stZGV0YWNoLTkuZjkwICAgIHwgIDQxICsrKysKIDI1IGZpbGVz IGNoYW5nZWQsIDU3MyBpbnNlcnRpb25zKCspLCAxMzAgZGVsZXRpb25zKC0pCiBjcmVhdGUg bW9kZSAxMDA2NDQgbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jLWMrKy1jb21tb24vdGFz ay1kZXRhY2gtMTAuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmdvbXAvdGVzdHN1aXRlL2xp YmdvbXAuYy1jKystY29tbW9uL3Rhc2stZGV0YWNoLTExLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBsaWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMtYysrLWNvbW1vbi90YXNrLWRldGFjaC03 LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMtYysr LWNvbW1vbi90YXNrLWRldGFjaC04LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJnb21wL3Rl c3RzdWl0ZS9saWJnb21wLmMtYysrLWNvbW1vbi90YXNrLWRldGFjaC05LmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBsaWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vdGFzay1kZXRh Y2gtMTAuZjkwCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliZ29tcC90ZXN0c3VpdGUvbGliZ29t cC5mb3J0cmFuL3Rhc2stZGV0YWNoLTExLmY5MAogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmdv bXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi90YXNrLWRldGFjaC03LmY5MAogY3JlYXRl IG1vZGUgMTAwNjQ0IGxpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi90YXNrLWRl dGFjaC04LmY5MAogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmdvbXAvdGVzdHN1aXRlL2xpYmdv bXAuZm9ydHJhbi90YXNrLWRldGFjaC05LmY5MAoKZGlmZiAtLWdpdCBhL2xpYmdvbXAvbGli Z29tcC5oIGIvbGliZ29tcC9saWJnb21wLmgKaW5kZXggYjRkMGM5My4uOTBhNmYwMiAxMDA2 NDQKLS0tIGEvbGliZ29tcC9saWJnb21wLmgKKysrIGIvbGliZ29tcC9saWJnb21wLmgKQEAg LTQ4MSw3ICs0ODEsMTAgQEAgZW51bSBnb21wX3Rhc2tfa2luZAogICAgICBidXQgbm90IHll dCBjb21wbGV0ZWQuICBPbmNlIHRoYXQgY29tcGxldGVzLCB0aGV5IHdpbGwgYmUgcmVhZGRl ZAogICAgICBpbnRvIHRoZSBxdWV1ZXMgYXMgR09NUF9UQVNLX1dBSVRJTkcgaW4gb3JkZXIg dG8gcGVyZm9ybSB0aGUgdmFyCiAgICAgIHVubWFwcGluZy4gICovCi0gIEdPTVBfVEFTS19B U1lOQ19SVU5OSU5HCisgIEdPTVBfVEFTS19BU1lOQ19SVU5OSU5HLAorICAvKiBUYXNrIHRo YXQgaGFzIGZpbmlzaGVkIGV4ZWN1dGluZyBidXQgaXMgd2FpdGluZyBmb3IgaXRzCisgICAg IGNvbXBsZXRpb24gZXZlbnQgdG8gYmUgZnVsZmlsbGVkLiAgKi8KKyAgR09NUF9UQVNLX0RF VEFDSEVECiB9OwogCiBzdHJ1Y3QgZ29tcF90YXNrX2RlcGVuZF9lbnRyeQpAQCAtNTQ1LDgg KzU0OCwxNCBAQCBzdHJ1Y3QgZ29tcF90YXNrCiAgICAgIGVudHJpZXMgYW5kIHRoZSBnb21w X3Rhc2sgaW4gd2hpY2ggdGhleSByZXNpZGUuICAqLwogICBzdHJ1Y3QgcHJpb3JpdHlfbm9k ZSBwbm9kZVszXTsKIAotICBib29sIGRldGFjaDsKLSAgZ29tcF9zZW1fdCBjb21wbGV0aW9u X3NlbTsKKyAgdW5pb24geworICAgIC8qIFZhbGlkIG9ubHkgaWYga2luZCA9PSBHT01QX1RB U0tfVU5ERUZFUlJFRC4gICovCisgICAgZ29tcF9zZW1fdCBjb21wbGV0aW9uX3NlbTsKKyAg ICAvKiBWYWxpZCBmb3Igb3RoZXIgdmFsdWVzIG9mIGtpbmQuICBTZXQgdG8gdGhlIHRlYW0g dGhhdCBleGVjdXRlcyB0aGUKKyAgICAgICB0YXNrIGlmIHRoZSB0YXNrIGlzIGRldGFjaGVk IGFuZCB0aGUgY29tcGxldGlvbiBldmVudCBoYXMgeWV0IHRvIGJlCisgICAgICAgZnVsZmls bGVkLiAgKi8KKyAgICBzdHJ1Y3QgZ29tcF90ZWFtICpkZXRhY2hfdGVhbTsKKyAgfTsKIAog ICBzdHJ1Y3QgZ29tcF90YXNrX2ljdiBpY3Y7CiAgIHZvaWQgKCpmbikgKHZvaWQgKik7CkBA IC02ODgsOCArNjk3LDcgQEAgc3RydWN0IGdvbXBfdGVhbQogICBpbnQgd29ya19zaGFyZV9j YW5jZWxsZWQ7CiAgIGludCB0ZWFtX2NhbmNlbGxlZDsKIAotICAvKiBUYXNrcyB3YWl0aW5n IGZvciB0aGVpciBjb21wbGV0aW9uIGV2ZW50IHRvIGJlIGZ1bGZpbGxlZC4gICovCi0gIHN0 cnVjdCBwcmlvcml0eV9xdWV1ZSB0YXNrX2RldGFjaF9xdWV1ZTsKKyAgLyogTnVtYmVyIG9m IHRhc2tzIHdhaXRpbmcgZm9yIHRoZWlyIGNvbXBsZXRpb24gZXZlbnQgdG8gYmUgZnVsZmls bGVkLiAgKi8KICAgdW5zaWduZWQgaW50IHRhc2tfZGV0YWNoX2NvdW50OwogCiAgIC8qIFRo aXMgYXJyYXkgY29udGFpbnMgc3RydWN0dXJlcyBmb3IgaW1wbGljaXQgdGFza3MuICAqLwpk aWZmIC0tZ2l0IGEvbGliZ29tcC90YXNrLmMgYi9saWJnb21wL3Rhc2suYwppbmRleCBiMjQy ZTdjLi4zOTllMThiIDEwMDY0NAotLS0gYS9saWJnb21wL3Rhc2suYworKysgYi9saWJnb21w L3Rhc2suYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgImxpYmdvbXAuaCIKICNpbmNs dWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxhc3NlcnQu aD4KICNpbmNsdWRlICJnb21wLWNvbnN0YW50cy5oIgogCiB0eXBlZGVmIHN0cnVjdCBnb21w X3Rhc2tfZGVwZW5kX2VudHJ5ICpoYXNoX2VudHJ5X3R5cGU7CkBAIC04Niw3ICs4Nyw3IEBA IGdvbXBfaW5pdF90YXNrIChzdHJ1Y3QgZ29tcF90YXNrICp0YXNrLCBzdHJ1Y3QgZ29tcF90 YXNrICpwYXJlbnRfdGFzaywKICAgdGFzay0+ZGVwZW5kZXJzID0gTlVMTDsKICAgdGFzay0+ ZGVwZW5kX2hhc2ggPSBOVUxMOwogICB0YXNrLT5kZXBlbmRfY291bnQgPSAwOwotICB0YXNr LT5kZXRhY2ggPSBmYWxzZTsKKyAgdGFzay0+ZGV0YWNoX3RlYW0gPSBOVUxMOwogfQogCiAv KiBDbGVhbiB1cCBhIHRhc2ssIGFmdGVyIGNvbXBsZXRpbmcgaXQuICAqLwpAQCAtMzI3LDEy ICszMjgsNiBAQCBnb21wX3Rhc2tfaGFuZGxlX2RlcGVuZCAoc3RydWN0IGdvbXBfdGFzayAq dGFzaywgc3RydWN0IGdvbXBfdGFzayAqcGFyZW50LAogICAgIH0KIH0KIAotc3RhdGljIGJv b2wKLXRhc2tfZnVsZmlsbGVkX3AgKHN0cnVjdCBnb21wX3Rhc2sgKnRhc2spCi17Ci0gIHJl dHVybiBnb21wX3NlbV9nZXRjb3VudCAoJnRhc2stPmNvbXBsZXRpb25fc2VtKSA+IDA7Ci19 Ci0KIC8qIENhbGxlZCB3aGVuIGVuY291bnRlcmluZyBhbiBleHBsaWNpdCB0YXNrIGRpcmVj dGl2ZS4gIElmIElGX0NMQVVTRSBpcwogICAgZmFsc2UsIHRoZW4gd2UgbXVzdCBub3QgZGVs YXkgaW4gZXhlY3V0aW5nIHRoZSB0YXNrLiAgSWYgVU5USUVEIGlzIHRydWUsCiAgICB0aGVu IHRoZSB0YXNrIG1heSBiZSBleGVjdXRlZCBieSBhbnkgbWVtYmVyIG9mIHRoZSB0ZWFtLgpA QCAtNDE3LDEzICs0MTIsMTMgQEAgR09NUF90YXNrICh2b2lkICgqZm4pICh2b2lkICopLCB2 b2lkICpkYXRhLCB2b2lkICgqY3B5Zm4pICh2b2lkICosIHZvaWQgKiksCiAKICAgICAgIGlm ICgoZmxhZ3MgJiBHT01QX1RBU0tfRkxBR19ERVRBQ0gpICE9IDApCiAJewotCSAgdGFzay5k ZXRhY2ggPSB0cnVlOwogCSAgZ29tcF9zZW1faW5pdCAoJnRhc2suY29tcGxldGlvbl9zZW0s IDApOwotCSAgKih2b2lkICoqKSBkZXRhY2ggPSAmdGFzay5jb21wbGV0aW9uX3NlbTsKKwkg ICoodm9pZCAqKikgZGV0YWNoID0gJnRhc2s7CiAJICBpZiAoZGF0YSkKLQkgICAgKih2b2lk ICoqKSBkYXRhID0gJnRhc2suY29tcGxldGlvbl9zZW07CisJICAgICoodm9pZCAqKikgZGF0 YSA9ICZ0YXNrOwogCi0JICBnb21wX2RlYnVnICgwLCAiTmV3IGV2ZW50OiAlcFxuIiwgJnRh c2suY29tcGxldGlvbl9zZW0pOworCSAgZ29tcF9kZWJ1ZyAoMCwgIlRocmVhZCAlZDogbmV3 IGV2ZW50OiAlcFxuIiwKKwkJICAgICAgdGhyLT50cy50ZWFtX2lkLCAmdGFzayk7CiAJfQog CiAgICAgICBpZiAodGhyLT50YXNrKQpAQCAtNDQzLDcgKzQzOCw3IEBAIEdPTVBfdGFzayAo dm9pZCAoKmZuKSAodm9pZCAqKSwgdm9pZCAqZGF0YSwgdm9pZCAoKmNweWZuKSAodm9pZCAq LCB2b2lkICopLAogICAgICAgZWxzZQogCWZuIChkYXRhKTsKIAotICAgICAgaWYgKHRhc2su ZGV0YWNoICYmICF0YXNrX2Z1bGZpbGxlZF9wICgmdGFzaykpCisgICAgICBpZiAoKGZsYWdz ICYgR09NUF9UQVNLX0ZMQUdfREVUQUNIKSAhPSAwICYmIGRldGFjaCkKIAlnb21wX3NlbV93 YWl0ICgmdGFzay5jb21wbGV0aW9uX3NlbSk7CiAKICAgICAgIC8qIEFjY2VzcyB0byAiY2hp bGRyZW4iIGlzIG5vcm1hbGx5IGRvbmUgaW5zaWRlIGEgdGFza19sb2NrCkBAIC00ODEsMTgg KzQ3NiwxNyBAQCBHT01QX3Rhc2sgKHZvaWQgKCpmbikgKHZvaWQgKiksIHZvaWQgKmRhdGEs IHZvaWQgKCpjcHlmbikgKHZvaWQgKiwgdm9pZCAqKSwKIAkJICAgICAgJiB+KHVpbnRwdHJf dCkgKGFyZ19hbGlnbiAtIDEpKTsKICAgICAgIGdvbXBfaW5pdF90YXNrICh0YXNrLCBwYXJl bnQsIGdvbXBfaWN2IChmYWxzZSkpOwogICAgICAgdGFzay0+cHJpb3JpdHkgPSBwcmlvcml0 eTsKLSAgICAgIHRhc2stPmtpbmQgPSBHT01QX1RBU0tfVU5ERUZFUlJFRDsKICAgICAgIHRh c2stPmluX3RpZWRfdGFzayA9IHBhcmVudC0+aW5fdGllZF90YXNrOwogICAgICAgdGFzay0+ dGFza2dyb3VwID0gdGFza2dyb3VwOwogICAgICAgaWYgKChmbGFncyAmIEdPTVBfVEFTS19G TEFHX0RFVEFDSCkgIT0gMCkKIAl7Ci0JICB0YXNrLT5kZXRhY2ggPSB0cnVlOwotCSAgZ29t cF9zZW1faW5pdCAoJnRhc2stPmNvbXBsZXRpb25fc2VtLCAwKTsKLQkgICoodm9pZCAqKikg ZGV0YWNoID0gJnRhc2stPmNvbXBsZXRpb25fc2VtOworCSAgdGFzay0+ZGV0YWNoX3RlYW0g PSB0ZWFtOworCisJICAqKHZvaWQgKiopIGRldGFjaCA9IHRhc2s7CiAJICBpZiAoZGF0YSkK LQkgICAgKih2b2lkICoqKSBkYXRhID0gJnRhc2stPmNvbXBsZXRpb25fc2VtOworCSAgICAq KHZvaWQgKiopIGRhdGEgPSB0YXNrOwogCi0JICBnb21wX2RlYnVnICgwLCAiTmV3IGV2ZW50 OiAlcFxuIiwgJnRhc2stPmNvbXBsZXRpb25fc2VtKTsKKwkgIGdvbXBfZGVidWcgKDAsICJU aHJlYWQgJWQ6IG5ldyBldmVudDogJXBcbiIsIHRoci0+dHMudGVhbV9pZCwgdGFzayk7CiAJ fQogICAgICAgdGhyLT50YXNrID0gdGFzazsKICAgICAgIGlmIChjcHlmbikKQEAgLTEzNjIs MjcgKzEzNTYsNiBAQCBnb21wX2JhcnJpZXJfaGFuZGxlX3Rhc2tzIChnb21wX2JhcnJpZXJf c3RhdGVfdCBzdGF0ZSkKICAgICB7CiAgICAgICBib29sIGNhbmNlbGxlZCA9IGZhbHNlOwog Ci0gICAgICAvKiBMb29rIGZvciBhIHF1ZXVlZCBkZXRhY2hlZCB0YXNrIHdpdGggYSBmdWxm aWxsZWQgY29tcGxldGlvbiBldmVudAotCSB0aGF0IGlzIHJlYWR5IHRvIGZpbmlzaC4gICov Ci0gICAgICBjaGlsZF90YXNrID0gcHJpb3JpdHlfcXVldWVfZmluZCAoUFFfVEVBTSwgJnRl YW0tPnRhc2tfZGV0YWNoX3F1ZXVlLAotCQkJCQl0YXNrX2Z1bGZpbGxlZF9wKTsKLSAgICAg IGlmIChjaGlsZF90YXNrKQotCXsKLQkgIHByaW9yaXR5X3F1ZXVlX3JlbW92ZSAoUFFfVEVB TSwgJnRlYW0tPnRhc2tfZGV0YWNoX3F1ZXVlLAotCQkJCSBjaGlsZF90YXNrLCBNRU1NT0RF TF9SRUxBWEVEKTsKLQkgIC0tdGVhbS0+dGFza19kZXRhY2hfY291bnQ7Ci0JICBnb21wX2Rl YnVnICgwLCAidGhyZWFkICVkOiBmb3VuZCB0YXNrIHdpdGggZnVsZmlsbGVkIGV2ZW50ICVw XG4iLAotCQkgICAgICB0aHItPnRzLnRlYW1faWQsICZjaGlsZF90YXNrLT5jb21wbGV0aW9u X3NlbSk7Ci0KLQlpZiAodG9fZnJlZSkKLQkgIHsKLQkgICAgZ29tcF9maW5pc2hfdGFzayAo dG9fZnJlZSk7Ci0JICAgIGZyZWUgKHRvX2ZyZWUpOwotCSAgICB0b19mcmVlID0gTlVMTDsK LQkgIH0KLQkgIGdvdG8gZmluaXNoX2NhbmNlbGxlZDsKLQl9Ci0KICAgICAgIGlmICghcHJp b3JpdHlfcXVldWVfZW1wdHlfcCAoJnRlYW0tPnRhc2tfcXVldWUsIE1FTU1PREVMX1JFTEFY RUQpKQogCXsKIAkgIGJvb2wgaWdub3JlZDsKQEAgLTE0NTAsNDMgKzE0MjMsNDMgQEAgZ29t cF9iYXJyaWVyX2hhbmRsZV90YXNrcyAoZ29tcF9iYXJyaWVyX3N0YXRlX3Qgc3RhdGUpCiAg ICAgICBnb21wX211dGV4X2xvY2sgKCZ0ZWFtLT50YXNrX2xvY2spOwogICAgICAgaWYgKGNo aWxkX3Rhc2spCiAJewotCSAgaWYgKGNoaWxkX3Rhc2stPmRldGFjaCAmJiAhdGFza19mdWxm aWxsZWRfcCAoY2hpbGRfdGFzaykpCisJICBpZiAoY2hpbGRfdGFzay0+ZGV0YWNoX3RlYW0p CiAJICAgIHsKLQkgICAgICBwcmlvcml0eV9xdWV1ZV9pbnNlcnQgKFBRX1RFQU0sICZ0ZWFt LT50YXNrX2RldGFjaF9xdWV1ZSwKLQkJCQkgICAgIGNoaWxkX3Rhc2ssIGNoaWxkX3Rhc2st PnByaW9yaXR5LAotCQkJCSAgICAgUFJJT1JJVFlfSU5TRVJUX0VORCwKLQkJCQkgICAgIGZh bHNlLCBmYWxzZSk7CisJICAgICAgYXNzZXJ0IChjaGlsZF90YXNrLT5kZXRhY2hfdGVhbSA9 PSB0ZWFtKTsKKwkgICAgICBjaGlsZF90YXNrLT5raW5kID0gR09NUF9UQVNLX0RFVEFDSEVE OwogCSAgICAgICsrdGVhbS0+dGFza19kZXRhY2hfY291bnQ7Ci0JICAgICAgZ29tcF9kZWJ1 ZyAoMCwgInRocmVhZCAlZDogcXVldWVpbmcgdGFzayB3aXRoIGV2ZW50ICVwXG4iLAotCQkJ ICB0aHItPnRzLnRlYW1faWQsICZjaGlsZF90YXNrLT5jb21wbGV0aW9uX3NlbSk7CisJICAg ICAgLS10ZWFtLT50YXNrX3J1bm5pbmdfY291bnQ7CisJICAgICAgZ29tcF9kZWJ1ZyAoMCwK KwkJCSAgInRocmVhZCAlZDogdGFzayB3aXRoIGV2ZW50ICVwIGZpbmlzaGVkIHdpdGhvdXQg IgorCQkJICAiY29tcGxldGlvbiBldmVudCBmdWxmaWxsZWQgaW4gdGVhbSBiYXJyaWVyXG4i LAorCQkJICB0aHItPnRzLnRlYW1faWQsIGNoaWxkX3Rhc2spOwogCSAgICAgIGNoaWxkX3Rh c2sgPSBOVUxMOworCSAgICAgIGNvbnRpbnVlOwogCSAgICB9Ci0JICBlbHNlCisKKwkgZmlu aXNoX2NhbmNlbGxlZDo7CisJICBzaXplX3QgbmV3X3Rhc2tzCisJICAgID0gZ29tcF90YXNr X3J1bl9wb3N0X2hhbmRsZV9kZXBlbmQgKGNoaWxkX3Rhc2ssIHRlYW0pOworCSAgZ29tcF90 YXNrX3J1bl9wb3N0X3JlbW92ZV9wYXJlbnQgKGNoaWxkX3Rhc2spOworCSAgZ29tcF9jbGVh cl9wYXJlbnQgKCZjaGlsZF90YXNrLT5jaGlsZHJlbl9xdWV1ZSk7CisJICBnb21wX3Rhc2tf cnVuX3Bvc3RfcmVtb3ZlX3Rhc2tncm91cCAoY2hpbGRfdGFzayk7CisJICB0b19mcmVlID0g Y2hpbGRfdGFzazsKKwkgIGlmICghY2FuY2VsbGVkKQorCSAgICB0ZWFtLT50YXNrX3J1bm5p bmdfY291bnQtLTsKKwkgIGNoaWxkX3Rhc2sgPSBOVUxMOworCSAgaWYgKG5ld190YXNrcyA+ IDEpCiAJICAgIHsKLQkgICAgIGZpbmlzaF9jYW5jZWxsZWQ6OwotCSAgICAgIHNpemVfdCBu ZXdfdGFza3MKLQkJPSBnb21wX3Rhc2tfcnVuX3Bvc3RfaGFuZGxlX2RlcGVuZCAoY2hpbGRf dGFzaywgdGVhbSk7Ci0JICAgICAgZ29tcF90YXNrX3J1bl9wb3N0X3JlbW92ZV9wYXJlbnQg KGNoaWxkX3Rhc2spOwotCSAgICAgIGdvbXBfY2xlYXJfcGFyZW50ICgmY2hpbGRfdGFzay0+ Y2hpbGRyZW5fcXVldWUpOwotCSAgICAgIGdvbXBfdGFza19ydW5fcG9zdF9yZW1vdmVfdGFz a2dyb3VwIChjaGlsZF90YXNrKTsKLQkgICAgICB0b19mcmVlID0gY2hpbGRfdGFzazsKLQkg ICAgICBjaGlsZF90YXNrID0gTlVMTDsKLQkgICAgICBpZiAoIWNhbmNlbGxlZCkKLQkJdGVh bS0+dGFza19ydW5uaW5nX2NvdW50LS07Ci0JICAgICAgaWYgKG5ld190YXNrcyA+IDEpCi0J CXsKLQkJICBkb193YWtlID0gdGVhbS0+bnRocmVhZHMgLSB0ZWFtLT50YXNrX3J1bm5pbmdf Y291bnQ7Ci0JCSAgaWYgKGRvX3dha2UgPiBuZXdfdGFza3MpCi0JCSAgICBkb193YWtlID0g bmV3X3Rhc2tzOwotCQl9Ci0JICAgICAgaWYgKC0tdGVhbS0+dGFza19jb3VudCA9PSAwCi0J CSAgJiYgZ29tcF90ZWFtX2JhcnJpZXJfd2FpdGluZ19mb3JfdGFza3MgKCZ0ZWFtLT5iYXJy aWVyKSkKLQkJewotCQkgIGdvbXBfdGVhbV9iYXJyaWVyX2RvbmUgKCZ0ZWFtLT5iYXJyaWVy LCBzdGF0ZSk7Ci0JCSAgZ29tcF9tdXRleF91bmxvY2sgKCZ0ZWFtLT50YXNrX2xvY2spOwot CQkgIGdvbXBfdGVhbV9iYXJyaWVyX3dha2UgKCZ0ZWFtLT5iYXJyaWVyLCAwKTsKLQkJICBn b21wX211dGV4X2xvY2sgKCZ0ZWFtLT50YXNrX2xvY2spOwotCQl9CisJICAgICAgZG9fd2Fr ZSA9IHRlYW0tPm50aHJlYWRzIC0gdGVhbS0+dGFza19ydW5uaW5nX2NvdW50OworCSAgICAg IGlmIChkb193YWtlID4gbmV3X3Rhc2tzKQorCQlkb193YWtlID0gbmV3X3Rhc2tzOworCSAg ICB9CisJICBpZiAoLS10ZWFtLT50YXNrX2NvdW50ID09IDAKKwkgICAgICAmJiBnb21wX3Rl YW1fYmFycmllcl93YWl0aW5nX2Zvcl90YXNrcyAoJnRlYW0tPmJhcnJpZXIpKQorCSAgICB7 CisJICAgICAgZ29tcF90ZWFtX2JhcnJpZXJfZG9uZSAoJnRlYW0tPmJhcnJpZXIsIHN0YXRl KTsKKwkgICAgICBnb21wX211dGV4X3VubG9jayAoJnRlYW0tPnRhc2tfbG9jayk7CisJICAg ICAgZ29tcF90ZWFtX2JhcnJpZXJfd2FrZSAoJnRlYW0tPmJhcnJpZXIsIDApOworCSAgICAg IGdvbXBfbXV0ZXhfbG9jayAoJnRlYW0tPnRhc2tfbG9jayk7CiAJICAgIH0KIAl9CiAgICAg fQpAQCAtMTU1OSw3ICsxNTMyLDggQEAgR09NUF90YXNrd2FpdCAodm9pZCkKICAgICAgIGVs c2UKIAl7CiAJLyogQWxsIHRhc2tzIHdlIGFyZSB3YWl0aW5nIGZvciBhcmUgZWl0aGVyIHJ1 bm5pbmcgaW4gb3RoZXIKLQkgICB0aHJlYWRzLCBvciB0aGV5IGFyZSB0YXNrcyB0aGF0IGhh dmUgbm90IGhhZCB0aGVpcgorCSAgIHRocmVhZHMsIGFyZSBkZXRhY2hlZCBhbmQgd2FpdGlu ZyBmb3IgdGhlIGNvbXBsZXRpb24gZXZlbnQgdG8gYmUKKwkgICBmdWxmaWxsZWQsIG9yIHRo ZXkgYXJlIHRhc2tzIHRoYXQgaGF2ZSBub3QgaGFkIHRoZWlyCiAJICAgZGVwZW5kZW5jaWVz IG1ldCAoc28gdGhleSdyZSBub3QgZXZlbiBpbiB0aGUgcXVldWUpLiAgV2FpdAogCSAgIGZv ciB0aGVtLiAgKi8KIAkgIGlmICh0YXNrLT50YXNrd2FpdCA9PSBOVUxMKQpAQCAtMTYxNCw2 ICsxNTg4LDE5IEBAIEdPTVBfdGFza3dhaXQgKHZvaWQpCiAgICAgICBnb21wX211dGV4X2xv Y2sgKCZ0ZWFtLT50YXNrX2xvY2spOwogICAgICAgaWYgKGNoaWxkX3Rhc2spCiAJeworCSAg aWYgKGNoaWxkX3Rhc2stPmRldGFjaF90ZWFtKQorCSAgICB7CisJICAgICAgYXNzZXJ0IChj aGlsZF90YXNrLT5kZXRhY2hfdGVhbSA9PSB0ZWFtKTsKKwkgICAgICBjaGlsZF90YXNrLT5r aW5kID0gR09NUF9UQVNLX0RFVEFDSEVEOworCSAgICAgICsrdGVhbS0+dGFza19kZXRhY2hf Y291bnQ7CisJICAgICAgZ29tcF9kZWJ1ZyAoMCwKKwkJCSAgInRocmVhZCAlZDogdGFzayB3 aXRoIGV2ZW50ICVwIGZpbmlzaGVkIHdpdGhvdXQgIgorCQkJICAiY29tcGxldGlvbiBldmVu dCBmdWxmaWxsZWQgaW4gdGFza3dhaXRcbiIsCisJCQkgIHRoci0+dHMudGVhbV9pZCwgY2hp bGRfdGFzayk7CisJICAgICAgY2hpbGRfdGFzayA9IE5VTEw7CisJICAgICAgY29udGludWU7 CisJICAgIH0KKwogCSBmaW5pc2hfY2FuY2VsbGVkOjsKIAkgIHNpemVfdCBuZXdfdGFza3MK IAkgICAgPSBnb21wX3Rhc2tfcnVuX3Bvc3RfaGFuZGxlX2RlcGVuZCAoY2hpbGRfdGFzaywg dGVhbSk7CkBAIC0yMDY5LDYgKzIwNTYsMTkgQEAgR09NUF90YXNrZ3JvdXBfZW5kICh2b2lk KQogICAgICAgZ29tcF9tdXRleF9sb2NrICgmdGVhbS0+dGFza19sb2NrKTsKICAgICAgIGlm IChjaGlsZF90YXNrKQogCXsKKwkgIGlmIChjaGlsZF90YXNrLT5kZXRhY2hfdGVhbSkKKwkg ICAgeworCSAgICAgIGFzc2VydCAoY2hpbGRfdGFzay0+ZGV0YWNoX3RlYW0gPT0gdGVhbSk7 CisJICAgICAgY2hpbGRfdGFzay0+a2luZCA9IEdPTVBfVEFTS19ERVRBQ0hFRDsKKwkgICAg ICArK3RlYW0tPnRhc2tfZGV0YWNoX2NvdW50OworCSAgICAgIGdvbXBfZGVidWcgKDAsCisJ CQkgICJ0aHJlYWQgJWQ6IHRhc2sgd2l0aCBldmVudCAlcCBmaW5pc2hlZCB3aXRob3V0ICIK KwkJCSAgImNvbXBsZXRpb24gZXZlbnQgZnVsZmlsbGVkIGluIHRhc2tncm91cFxuIiwKKwkJ CSAgdGhyLT50cy50ZWFtX2lkLCBjaGlsZF90YXNrKTsKKwkgICAgICBjaGlsZF90YXNrID0g TlVMTDsKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQorCiAJIGZpbmlzaF9jYW5jZWxsZWQ6 OwogCSAgc2l6ZV90IG5ld190YXNrcwogCSAgICA9IGdvbXBfdGFza19ydW5fcG9zdF9oYW5k bGVfZGVwZW5kIChjaGlsZF90YXNrLCB0ZWFtKTsKQEAgLTI0MDIsMTcgKzI0MDIsODAgQEAg aWFsaWFzIChvbXBfaW5fZmluYWwpCiB2b2lkCiBvbXBfZnVsZmlsbF9ldmVudCAob21wX2V2 ZW50X2hhbmRsZV90IGV2ZW50KQogewotICBnb21wX3NlbV90ICpzZW0gPSAoZ29tcF9zZW1f dCAqKSBldmVudDsKLSAgc3RydWN0IGdvbXBfdGhyZWFkICp0aHIgPSBnb21wX3RocmVhZCAo KTsKLSAgc3RydWN0IGdvbXBfdGVhbSAqdGVhbSA9IHRociA/IHRoci0+dHMudGVhbSA6IE5V TEw7CisgIHN0cnVjdCBnb21wX3Rhc2sgKnRhc2sgPSAoc3RydWN0IGdvbXBfdGFzayAqKSBl dmVudDsKKyAgaWYgKHRhc2stPmtpbmQgPT0gR09NUF9UQVNLX1VOREVGRVJSRUQpCisgIHsK KyAgICBpZiAoZ29tcF9zZW1fZ2V0Y291bnQgKCZ0YXNrLT5jb21wbGV0aW9uX3NlbSkgPiAw KQorICAgICAgZ29tcF9mYXRhbCAoIm9tcF9mdWxmaWxsX2V2ZW50OiAlcCBldmVudCBhbHJl YWR5IGZ1bGZpbGxlZCFcbiIsIHRhc2spOworCisgICAgZ29tcF9kZWJ1ZyAoMCwgIm9tcF9m dWxmaWxsX2V2ZW50OiAlcCBldmVudCBmb3IgdW5kZWZlcnJlZCB0YXNrXG4iLCB0YXNrKTsK KyAgICBnb21wX3NlbV9wb3N0ICgmdGFzay0+Y29tcGxldGlvbl9zZW0pOworICAgIHJldHVy bjsKKyAgfQogCi0gIGlmIChnb21wX3NlbV9nZXRjb3VudCAoc2VtKSA+IDApCi0gICAgZ29t cF9mYXRhbCAoIm9tcF9mdWxmaWxsX2V2ZW50OiAlcCBldmVudCBhbHJlYWR5IGZ1bGZpbGxl ZCFcbiIsIHNlbSk7CisgIHN0cnVjdCBnb21wX3RlYW0gKnRlYW0gPSB0YXNrLT5kZXRhY2hf dGVhbTsKKyAgaWYgKCF0ZWFtKQorICAgIGdvbXBfZmF0YWwgKCJvbXBfZnVsZmlsbF9ldmVu dDogJXAgZXZlbnQgaXMgaW52YWxpZCBvciBoYXMgYWxyZWFkeSAiCisJCSJiZWVuIGZ1bGZp bGxlZCFcbiIsIHRhc2spOwogCi0gIGdvbXBfZGVidWcgKDAsICJvbXBfZnVsZmlsbF9ldmVu dDogJXBcbiIsIHNlbSk7Ci0gIGdvbXBfc2VtX3Bvc3QgKHNlbSk7Ci0gIGlmICh0ZWFtKQot ICAgIGdvbXBfdGVhbV9iYXJyaWVyX3dha2UgKCZ0ZWFtLT5iYXJyaWVyLCAxKTsKKyAgZ29t cF9tdXRleF9sb2NrICgmdGVhbS0+dGFza19sb2NrKTsKKyAgaWYgKHRhc2stPmtpbmQgIT0g R09NUF9UQVNLX0RFVEFDSEVEKQorICAgIHsKKyAgICAgIC8qIFRoZSB0YXNrIGhhcyBub3Qg ZmluaXNoZWQgcnVubmluZyB5ZXQuICAqLworICAgICAgZ29tcF9kZWJ1ZyAoMCwKKwkJICAi b21wX2Z1bGZpbGxfZXZlbnQ6ICVwIGV2ZW50IGZ1bGZpbGxlZCBmb3IgdW5maW5pc2hlZCAi CisJCSAgInRhc2tcbiIsIHRhc2spOworICAgICAgdGFzay0+ZGV0YWNoX3RlYW0gPSBOVUxM OworICAgICAgZ29tcF9tdXRleF91bmxvY2sgKCZ0ZWFtLT50YXNrX2xvY2spOworICAgICAg cmV0dXJuOworICAgIH0KKworICBnb21wX2RlYnVnICgwLCAib21wX2Z1bGZpbGxfZXZlbnQ6 ICVwIGV2ZW50IGZ1bGZpbGxlZCBmb3IgZmluaXNoZWQgdGFza1xuIiwKKwkgICAgICB0YXNr KTsKKyAgc2l6ZV90IG5ld190YXNrcyA9IGdvbXBfdGFza19ydW5fcG9zdF9oYW5kbGVfZGVw ZW5kICh0YXNrLCB0ZWFtKTsKKyAgZ29tcF90YXNrX3J1bl9wb3N0X3JlbW92ZV9wYXJlbnQg KHRhc2spOworICBnb21wX2NsZWFyX3BhcmVudCAoJnRhc2stPmNoaWxkcmVuX3F1ZXVlKTsK KyAgZ29tcF90YXNrX3J1bl9wb3N0X3JlbW92ZV90YXNrZ3JvdXAgKHRhc2spOworICB0ZWFt LT50YXNrX2NvdW50LS07CisgIHRlYW0tPnRhc2tfZGV0YWNoX2NvdW50LS07CisKKyAgLyog V2FrZSB1cCBhbnkgdGhyZWFkcyB0aGF0IG1heSBiZSB3YWl0aW5nIGZvciB0aGUgZGV0YWNo ZWQgdGFzaworICAgICB0byBjb21wbGV0ZS4gICovCisgIHN0cnVjdCBnb21wX3Rhc2sgKnBh cmVudCA9IHRhc2stPnBhcmVudDsKKworICBpZiAocGFyZW50ICYmIHBhcmVudC0+dGFza3dh aXQpCisgICAgeworICAgICAgaWYgKHBhcmVudC0+dGFza3dhaXQtPmluX3Rhc2t3YWl0KQor CXsKKwkgIHBhcmVudC0+dGFza3dhaXQtPmluX3Rhc2t3YWl0ID0gZmFsc2U7CisJICBnb21w X3NlbV9wb3N0ICgmcGFyZW50LT50YXNrd2FpdC0+dGFza3dhaXRfc2VtKTsKKwl9CisgICAg ICBlbHNlIGlmIChwYXJlbnQtPnRhc2t3YWl0LT5pbl9kZXBlbmRfd2FpdCkKKwl7CisJICBw YXJlbnQtPnRhc2t3YWl0LT5pbl9kZXBlbmRfd2FpdCA9IGZhbHNlOworCSAgZ29tcF9zZW1f cG9zdCAoJnBhcmVudC0+dGFza3dhaXQtPnRhc2t3YWl0X3NlbSk7CisJfQorICAgIH0KKyAg aWYgKHRhc2stPnRhc2tncm91cCAmJiB0YXNrLT50YXNrZ3JvdXAtPmluX3Rhc2tncm91cF93 YWl0KQorICAgIHsKKyAgICAgIHRhc2stPnRhc2tncm91cC0+aW5fdGFza2dyb3VwX3dhaXQg PSBmYWxzZTsKKyAgICAgIGdvbXBfc2VtX3Bvc3QgKCZ0YXNrLT50YXNrZ3JvdXAtPnRhc2tn cm91cF9zZW0pOworICAgIH0KKworICBpbnQgZG9fd2FrZSA9IDA7CisgIGlmIChuZXdfdGFz a3MgPiAxKQorICAgIHsKKyAgICAgIGRvX3dha2UgPSB0ZWFtLT5udGhyZWFkcyAtIHRlYW0t PnRhc2tfcnVubmluZ19jb3VudDsKKyAgICAgIGlmIChkb193YWtlID4gbmV3X3Rhc2tzKQor CWRvX3dha2UgPSBuZXdfdGFza3M7CisgICAgfQorCisgIGdvbXBfbXV0ZXhfdW5sb2NrICgm dGVhbS0+dGFza19sb2NrKTsKKyAgaWYgKGRvX3dha2UpCisgICAgZ29tcF90ZWFtX2JhcnJp ZXJfd2FrZSAoJnRlYW0tPmJhcnJpZXIsIGRvX3dha2UpOworCisgIGdvbXBfZmluaXNoX3Rh c2sgKHRhc2spOworICBmcmVlICh0YXNrKTsKIH0KIAogaWFsaWFzIChvbXBfZnVsZmlsbF9l dmVudCkKZGlmZiAtLWdpdCBhL2xpYmdvbXAvdGVhbS5jIGIvbGliZ29tcC90ZWFtLmMKaW5k ZXggMGYzNzA3Yy4uOTY2MjIzNCAxMDA2NDQKLS0tIGEvbGliZ29tcC90ZWFtLmMKKysrIGIv bGliZ29tcC90ZWFtLmMKQEAgLTIwNiw3ICsyMDYsNiBAQCBnb21wX25ld190ZWFtICh1bnNp Z25lZCBudGhyZWFkcykKICAgdGVhbS0+d29ya19zaGFyZV9jYW5jZWxsZWQgPSAwOwogICB0 ZWFtLT50ZWFtX2NhbmNlbGxlZCA9IDA7CiAKLSAgcHJpb3JpdHlfcXVldWVfaW5pdCAoJnRl YW0tPnRhc2tfZGV0YWNoX3F1ZXVlKTsKICAgdGVhbS0+dGFza19kZXRhY2hfY291bnQgPSAw OwogCiAgIHJldHVybiB0ZWFtOwpAQCAtMjI0LDcgKzIyMyw2IEBAIGZyZWVfdGVhbSAoc3Ry dWN0IGdvbXBfdGVhbSAqdGVhbSkKICAgZ29tcF9iYXJyaWVyX2Rlc3Ryb3kgKCZ0ZWFtLT5i YXJyaWVyKTsKICAgZ29tcF9tdXRleF9kZXN0cm95ICgmdGVhbS0+dGFza19sb2NrKTsKICAg cHJpb3JpdHlfcXVldWVfZnJlZSAoJnRlYW0tPnRhc2tfcXVldWUpOwotICBwcmlvcml0eV9x dWV1ZV9mcmVlICgmdGVhbS0+dGFza19kZXRhY2hfcXVldWUpOwogICB0ZWFtX2ZyZWUgKHRl YW0pOwogfQogCmRpZmYgLS1naXQgYS9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMtYysr LWNvbW1vbi90YXNrLWRldGFjaC0xLmMgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMt YysrLWNvbW1vbi90YXNrLWRldGFjaC0xLmMKaW5kZXggODU4M2UzNy4uMTQ5MzJiMCAxMDA2 NDQKLS0tIGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jLWMrKy1jb21tb24vdGFzay1k ZXRhY2gtMS5jCisrKyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9u L3Rhc2stZGV0YWNoLTEuYwpAQCAtMTQsMTAgKzE0LDEwIEBAIGludCBtYWluICh2b2lkKQog ICAjcHJhZ21hIG9tcCBwYXJhbGxlbAogICAgICNwcmFnbWEgb21wIHNpbmdsZQogICAgIHsK LSAgICAgICNwcmFnbWEgb21wIHRhc2sgZGV0YWNoKGRldGFjaF9ldmVudDEpCisgICAgICAj cHJhZ21hIG9tcCB0YXNrIGRldGFjaCAoZGV0YWNoX2V2ZW50MSkKIAl4Kys7CiAKLSAgICAg ICNwcmFnbWEgb21wIHRhc2sgZGV0YWNoKGRldGFjaF9ldmVudDIpCisgICAgICAjcHJhZ21h IG9tcCB0YXNrIGRldGFjaCAoZGV0YWNoX2V2ZW50MikKICAgICAgIHsKIAl5Kys7CiAJb21w X2Z1bGZpbGxfZXZlbnQgKGRldGFjaF9ldmVudDEpOwpkaWZmIC0tZ2l0IGEvbGliZ29tcC90 ZXN0c3VpdGUvbGliZ29tcC5jLWMrKy1jb21tb24vdGFzay1kZXRhY2gtMTAuYyBiL2xpYmdv bXAvdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL3Rhc2stZGV0YWNoLTEwLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBkNjc0NgotLS0gL2Rldi9udWxs CisrKyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL3Rhc2stZGV0 YWNoLTEwLmMKQEAgLTAsMCArMSw0NSBAQAorLyogeyBkZy1kbyBydW4gfSAqLworCisjaW5j bHVkZSA8b21wLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKy8qIFRlc3QgdGFza3Mgd2l0 aCBkZXRhY2ggY2xhdXNlIG9uIGFuIG9mZmxvYWQgZGV2aWNlLiAgRWFjaCBkZXZpY2UKKyAg IHRocmVhZCBzcGF3bnMgb2ZmIGEgY2hhaW4gb2YgdGFza3MgaW4gYSB0YXNrZ3JvdXAsIHRo YXQgY2FuIHRoZW4KKyAgIGJlIGV4ZWN1dGVkIGJ5IGFueSBhdmFpbGFibGUgdGhyZWFkLiAg Ki8KKworaW50IG1haW4gKHZvaWQpCit7CisgIGludCB4ID0gMCwgeSA9IDAsIHogPSAwOwor ICBpbnQgdGhyZWFkX2NvdW50OworICBvbXBfZXZlbnRfaGFuZGxlX3QgZGV0YWNoX2V2ZW50 MSwgZGV0YWNoX2V2ZW50MjsKKworICAjcHJhZ21hIG9tcCB0YXJnZXQgbWFwICh0b2Zyb206 IHgsIHksIHopIG1hcCAoZnJvbTogdGhyZWFkX2NvdW50KQorICAgICNwcmFnbWEgb21wIHBh cmFsbGVsIHByaXZhdGUgKGRldGFjaF9ldmVudDEsIGRldGFjaF9ldmVudDIpCisgICAgICAj cHJhZ21hIG9tcCB0YXNrZ3JvdXAKKwl7CisJICAjcHJhZ21hIG9tcCBzaW5nbGUKKwkgICAg dGhyZWFkX2NvdW50ID0gb21wX2dldF9udW1fdGhyZWFkcyAoKTsKKworCSAgI3ByYWdtYSBv bXAgdGFzayBkZXRhY2ggKGRldGFjaF9ldmVudDEpIHVudGllZAorCSAgICAjcHJhZ21hIG9t cCBhdG9taWMgdXBkYXRlCisJICAgICAgeCsrOworCisJICAjcHJhZ21hIG9tcCB0YXNrIGRl dGFjaCAoZGV0YWNoX2V2ZW50MikgdW50aWVkCisJICB7CisJICAgICNwcmFnbWEgb21wIGF0 b21pYyB1cGRhdGUKKwkgICAgICB5Kys7CisJICAgIG9tcF9mdWxmaWxsX2V2ZW50IChkZXRh Y2hfZXZlbnQxKTsKKwkgIH0KKworCSAgI3ByYWdtYSBvbXAgdGFzayB1bnRpZWQKKwkgIHsK KwkgICAgI3ByYWdtYSBvbXAgYXRvbWljIHVwZGF0ZQorCSAgICAgIHorKzsKKwkgICAgb21w X2Z1bGZpbGxfZXZlbnQgKGRldGFjaF9ldmVudDIpOworCSAgfQorCX0KKworICBhc3NlcnQg KHggPT0gdGhyZWFkX2NvdW50KTsKKyAgYXNzZXJ0ICh5ID09IHRocmVhZF9jb3VudCk7Cisg IGFzc2VydCAoeiA9PSB0aHJlYWRfY291bnQpOworfQpkaWZmIC0tZ2l0IGEvbGliZ29tcC90 ZXN0c3VpdGUvbGliZ29tcC5jLWMrKy1jb21tb24vdGFzay1kZXRhY2gtMTEuYyBiL2xpYmdv bXAvdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL3Rhc2stZGV0YWNoLTExLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQwMDJkYwotLS0gL2Rldi9udWxs CisrKyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL3Rhc2stZGV0 YWNoLTExLmMKQEAgLTAsMCArMSwxMyBAQAorLyogeyBkZy1kbyBydW4gfSAqLworCisjaW5j bHVkZSA8b21wLmg+CisKKy8qIFRlc3QgdGhlIGRldGFjaCBjbGF1c2Ugd2hlbiB0aGUgdGFz ayBpcyB1bmRlZmVycmVkLiAgKi8KKworaW50IG1haW4gKHZvaWQpCit7CisgIG9tcF9ldmVu dF9oYW5kbGVfdCBldmVudDsKKworICAjcHJhZ21hIG9tcCB0YXNrIGRldGFjaCAoZXZlbnQp CisgICAgb21wX2Z1bGZpbGxfZXZlbnQgKGV2ZW50KTsKK30KZGlmZiAtLWdpdCBhL2xpYmdv bXAvdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL3Rhc2stZGV0YWNoLTIuYyBiL2xp YmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL3Rhc2stZGV0YWNoLTIuYwpp bmRleCA5NDNhYzJhLi4zZTMzYzQwIDEwMDY0NAotLS0gYS9saWJnb21wL3Rlc3RzdWl0ZS9s aWJnb21wLmMtYysrLWNvbW1vbi90YXNrLWRldGFjaC0yLmMKKysrIGIvbGliZ29tcC90ZXN0 c3VpdGUvbGliZ29tcC5jLWMrKy1jb21tb24vdGFzay1kZXRhY2gtMi5jCkBAIC0xMiwxMyAr MTIsMTMgQEAgaW50IG1haW4gKHZvaWQpCiAgIG9tcF9ldmVudF9oYW5kbGVfdCBkZXRhY2hf ZXZlbnQxLCBkZXRhY2hfZXZlbnQyOwogICBpbnQgeCA9IDAsIHkgPSAwLCB6ID0gMDsKIAot ICAjcHJhZ21hIG9tcCBwYXJhbGxlbCBudW1fdGhyZWFkcygxKQorICAjcHJhZ21hIG9tcCBw YXJhbGxlbCBudW1fdGhyZWFkcyAoMSkKICAgICAjcHJhZ21hIG9tcCBzaW5nbGUKICAgICB7 Ci0gICAgICAjcHJhZ21hIG9tcCB0YXNrIGRldGFjaChkZXRhY2hfZXZlbnQxKQorICAgICAg I3ByYWdtYSBvbXAgdGFzayBkZXRhY2ggKGRldGFjaF9ldmVudDEpCiAJeCsrOwogCi0gICAg ICAjcHJhZ21hIG9tcCB0YXNrIGRldGFjaChkZXRhY2hfZXZlbnQyKQorICAgICAgI3ByYWdt YSBvbXAgdGFzayBkZXRhY2ggKGRldGFjaF9ldmVudDIpCiAgICAgICB7CiAJeSsrOwogCW9t cF9mdWxmaWxsX2V2ZW50IChkZXRhY2hfZXZlbnQxKTsKZGlmZiAtLWdpdCBhL2xpYmdvbXAv dGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL3Rhc2stZGV0YWNoLTMuYyBiL2xpYmdv bXAvdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL3Rhc2stZGV0YWNoLTMuYwppbmRl eCAyNjA5ZmIxLi5jODU4NTdkIDEwMDY0NAotLS0gYS9saWJnb21wL3Rlc3RzdWl0ZS9saWJn b21wLmMtYysrLWNvbW1vbi90YXNrLWRldGFjaC0zLmMKKysrIGIvbGliZ29tcC90ZXN0c3Vp dGUvbGliZ29tcC5jLWMrKy1jb21tb24vdGFzay1kZXRhY2gtMy5jCkBAIC0xNCwxNiArMTQs MTYgQEAgaW50IG1haW4gKHZvaWQpCiAgICNwcmFnbWEgb21wIHBhcmFsbGVsCiAgICAgI3By YWdtYSBvbXAgc2luZ2xlCiAgICAgewotICAgICAgI3ByYWdtYSBvbXAgdGFzayBkZXBlbmQo b3V0OmRlcCkgZGV0YWNoKGRldGFjaF9ldmVudCkKKyAgICAgICNwcmFnbWEgb21wIHRhc2sg ZGVwZW5kIChvdXQ6ZGVwKSBkZXRhY2ggKGRldGFjaF9ldmVudCkKIAl4Kys7CiAKICAgICAg ICNwcmFnbWEgb21wIHRhc2sKICAgICAgIHsKIAl5Kys7Ci0Jb21wX2Z1bGZpbGxfZXZlbnQo ZGV0YWNoX2V2ZW50KTsKKwlvbXBfZnVsZmlsbF9ldmVudCAoZGV0YWNoX2V2ZW50KTsKICAg ICAgIH0KIAotICAgICAgI3ByYWdtYSBvbXAgdGFzayBkZXBlbmQoaW46ZGVwKQorICAgICAg I3ByYWdtYSBvbXAgdGFzayBkZXBlbmQgKGluOmRlcCkKIAl6Kys7CiAgICAgfQogCmRpZmYg LS1naXQgYS9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMtYysrLWNvbW1vbi90YXNrLWRl dGFjaC00LmMgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMtYysrLWNvbW1vbi90YXNr LWRldGFjaC00LmMKaW5kZXggZWViOTU1NC4uY2QwZDJiMyAxMDA2NDQKLS0tIGEvbGliZ29t cC90ZXN0c3VpdGUvbGliZ29tcC5jLWMrKy1jb21tb24vdGFzay1kZXRhY2gtNC5jCisrKyBi L2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL3Rhc2stZGV0YWNoLTQu YwpAQCAtMTQsMTAgKzE0LDEwIEBAIGludCBtYWluICh2b2lkKQogCiAgICNwcmFnbWEgb21w IHBhcmFsbGVsCiAgICAgI3ByYWdtYSBvbXAgc2luZ2xlCi0gICAgICAjcHJhZ21hIG9tcCB0 YXNrIGRldGFjaChkZXRhY2hfZXZlbnQpCisgICAgICAjcHJhZ21hIG9tcCB0YXNrIGRldGFj aCAoZGV0YWNoX2V2ZW50KQogICAgICAgewogCXgrKzsKLQlvbXBfZnVsZmlsbF9ldmVudChk ZXRhY2hfZXZlbnQpOworCW9tcF9mdWxmaWxsX2V2ZW50IChkZXRhY2hfZXZlbnQpOwogICAg ICAgfQogCiAgIGFzc2VydCAoeCA9PSAxKTsKZGlmZiAtLWdpdCBhL2xpYmdvbXAvdGVzdHN1 aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL3Rhc2stZGV0YWNoLTUuYyBiL2xpYmdvbXAvdGVz dHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL3Rhc2stZGV0YWNoLTUuYwppbmRleCA1YTAx NTE3Li4zODJmMzc3IDEwMDY0NAotLS0gYS9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMt YysrLWNvbW1vbi90YXNrLWRldGFjaC01LmMKKysrIGIvbGliZ29tcC90ZXN0c3VpdGUvbGli Z29tcC5jLWMrKy1jb21tb24vdGFzay1kZXRhY2gtNS5jCkBAIC0xMiwxNiArMTIsMTYgQEAg aW50IG1haW4gKHZvaWQpCiAgIGludCB0aHJlYWRfY291bnQ7CiAgIG9tcF9ldmVudF9oYW5k bGVfdCBkZXRhY2hfZXZlbnQxLCBkZXRhY2hfZXZlbnQyOwogCi0gICNwcmFnbWEgb21wIHBh cmFsbGVsIGZpcnN0cHJpdmF0ZShkZXRhY2hfZXZlbnQxLCBkZXRhY2hfZXZlbnQyKQorICAj cHJhZ21hIG9tcCBwYXJhbGxlbCBwcml2YXRlIChkZXRhY2hfZXZlbnQxLCBkZXRhY2hfZXZl bnQyKQogICB7CiAgICAgI3ByYWdtYSBvbXAgc2luZ2xlCi0gICAgICB0aHJlYWRfY291bnQg PSBvbXBfZ2V0X251bV90aHJlYWRzKCk7CisgICAgICB0aHJlYWRfY291bnQgPSBvbXBfZ2V0 X251bV90aHJlYWRzICgpOwogCi0gICAgI3ByYWdtYSBvbXAgdGFzayBkZXRhY2goZGV0YWNo X2V2ZW50MSkgdW50aWVkCisgICAgI3ByYWdtYSBvbXAgdGFzayBkZXRhY2ggKGRldGFjaF9l dmVudDEpIHVudGllZAogICAgICAgI3ByYWdtYSBvbXAgYXRvbWljIHVwZGF0ZQogCXgrKzsK IAotICAgICNwcmFnbWEgb21wIHRhc2sgZGV0YWNoKGRldGFjaF9ldmVudDIpIHVudGllZAor ICAgICNwcmFnbWEgb21wIHRhc2sgZGV0YWNoIChkZXRhY2hfZXZlbnQyKSB1bnRpZWQKICAg ICB7CiAgICAgICAjcHJhZ21hIG9tcCBhdG9taWMgdXBkYXRlCiAJeSsrOwpkaWZmIC0tZ2l0 IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jLWMrKy1jb21tb24vdGFzay1kZXRhY2gt Ni5jIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jLWMrKy1jb21tb24vdGFzay1kZXRh Y2gtNi5jCmluZGV4IGI1ZjY4Y2MuLmU1YzIyOTEgMTAwNjQ0Ci0tLSBhL2xpYmdvbXAvdGVz dHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL3Rhc2stZGV0YWNoLTYuYworKysgYi9saWJn b21wL3Rlc3RzdWl0ZS9saWJnb21wLmMtYysrLWNvbW1vbi90YXNrLWRldGFjaC02LmMKQEAg LTEzLDExICsxMywxMSBAQCBpbnQgbWFpbiAodm9pZCkKICAgaW50IHRocmVhZF9jb3VudDsK ICAgb21wX2V2ZW50X2hhbmRsZV90IGRldGFjaF9ldmVudDEsIGRldGFjaF9ldmVudDI7CiAK LSAgI3ByYWdtYSBvbXAgdGFyZ2V0IG1hcCh0b2Zyb206IHgsIHksIHopIG1hcChmcm9tOiB0 aHJlYWRfY291bnQpCi0gICAgI3ByYWdtYSBvbXAgcGFyYWxsZWwgZmlyc3Rwcml2YXRlKGRl dGFjaF9ldmVudDEsIGRldGFjaF9ldmVudDIpCisgICNwcmFnbWEgb21wIHRhcmdldCBtYXAg KHRvZnJvbTogeCwgeSwgeikgbWFwIChmcm9tOiB0aHJlYWRfY291bnQpCisgICAgI3ByYWdt YSBvbXAgcGFyYWxsZWwgcHJpdmF0ZSAoZGV0YWNoX2V2ZW50MSwgZGV0YWNoX2V2ZW50MikK ICAgICAgIHsKIAkjcHJhZ21hIG9tcCBzaW5nbGUKLQkgIHRocmVhZF9jb3VudCA9IG9tcF9n ZXRfbnVtX3RocmVhZHMoKTsKKwkgIHRocmVhZF9jb3VudCA9IG9tcF9nZXRfbnVtX3RocmVh ZHMgKCk7CiAKIAkjcHJhZ21hIG9tcCB0YXNrIGRldGFjaChkZXRhY2hfZXZlbnQxKSB1bnRp ZWQKIAkgICNwcmFnbWEgb21wIGF0b21pYyB1cGRhdGUKQEAgLTM2LDggKzM2LDYgQEAgaW50 IG1haW4gKHZvaWQpCiAJICAgIHorKzsKIAkgIG9tcF9mdWxmaWxsX2V2ZW50IChkZXRhY2hf ZXZlbnQyKTsKIAl9Ci0KLQkjcHJhZ21hIG9tcCB0YXNrd2FpdAogICAgICAgfQogCiAgIGFz c2VydCAoeCA9PSB0aHJlYWRfY291bnQpOwpkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3Vp dGUvbGliZ29tcC5jLWMrKy1jb21tb24vdGFzay1kZXRhY2gtNy5jIGIvbGliZ29tcC90ZXN0 c3VpdGUvbGliZ29tcC5jLWMrKy1jb21tb24vdGFzay1kZXRhY2gtNy5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMDI1ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9s aWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMtYysrLWNvbW1vbi90YXNrLWRldGFjaC03LmMK QEAgLTAsMCArMSw0NSBAQAorLyogeyBkZy1kbyBydW4gfSAqLworCisjaW5jbHVkZSA8b21w Lmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKy8qIFRlc3QgdGFza3Mgd2l0aCBkZXRhY2gg Y2xhdXNlLiAgRWFjaCB0aHJlYWQgc3Bhd25zIG9mZiBhIGNoYWluIG9mIHRhc2tzLAorICAg dGhhdCBjYW4gdGhlbiBiZSBleGVjdXRlZCBieSBhbnkgYXZhaWxhYmxlIHRocmVhZC4gIEVh Y2ggdGhyZWFkIHVzZXMKKyAgIHRhc2t3YWl0IHRvIHdhaXQgZm9yIHRoZSBjaGlsZCB0YXNr cyB0byBjb21wbGV0ZS4gICovCisKK2ludCBtYWluICh2b2lkKQoreworICBpbnQgeCA9IDAs IHkgPSAwLCB6ID0gMDsKKyAgaW50IHRocmVhZF9jb3VudDsKKyAgb21wX2V2ZW50X2hhbmRs ZV90IGRldGFjaF9ldmVudDEsIGRldGFjaF9ldmVudDI7CisKKyAgI3ByYWdtYSBvbXAgcGFy YWxsZWwgcHJpdmF0ZSAoZGV0YWNoX2V2ZW50MSwgZGV0YWNoX2V2ZW50MikKKyAgeworICAg ICNwcmFnbWEgb21wIHNpbmdsZQorICAgICAgdGhyZWFkX2NvdW50ID0gb21wX2dldF9udW1f dGhyZWFkcyAoKTsKKworICAgICNwcmFnbWEgb21wIHRhc2sgZGV0YWNoIChkZXRhY2hfZXZl bnQxKSB1bnRpZWQKKyAgICAgICNwcmFnbWEgb21wIGF0b21pYyB1cGRhdGUKKwl4Kys7CisK KyAgICAjcHJhZ21hIG9tcCB0YXNrIGRldGFjaCAoZGV0YWNoX2V2ZW50MikgdW50aWVkCisg ICAgeworICAgICAgI3ByYWdtYSBvbXAgYXRvbWljIHVwZGF0ZQorCXkrKzsKKyAgICAgIG9t cF9mdWxmaWxsX2V2ZW50IChkZXRhY2hfZXZlbnQxKTsKKyAgICB9CisKKyAgICAjcHJhZ21h IG9tcCB0YXNrIHVudGllZAorICAgIHsKKyAgICAgICNwcmFnbWEgb21wIGF0b21pYyB1cGRh dGUKKwl6Kys7CisgICAgICBvbXBfZnVsZmlsbF9ldmVudCAoZGV0YWNoX2V2ZW50Mik7Cisg ICAgfQorCisgICAgI3ByYWdtYSBvbXAgdGFza3dhaXQKKyAgfQorCisgIGFzc2VydCAoeCA9 PSB0aHJlYWRfY291bnQpOworICBhc3NlcnQgKHkgPT0gdGhyZWFkX2NvdW50KTsKKyAgYXNz ZXJ0ICh6ID09IHRocmVhZF9jb3VudCk7Cit9CmRpZmYgLS1naXQgYS9saWJnb21wL3Rlc3Rz dWl0ZS9saWJnb21wLmMtYysrLWNvbW1vbi90YXNrLWRldGFjaC04LmMgYi9saWJnb21wL3Rl c3RzdWl0ZS9saWJnb21wLmMtYysrLWNvbW1vbi90YXNrLWRldGFjaC04LmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY3N2YxMgotLS0gL2Rldi9udWxsCisrKyBi L2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL3Rhc2stZGV0YWNoLTgu YwpAQCAtMCwwICsxLDQ3IEBACisvKiB7IGRnLWRvIHJ1biB9ICovCisKKyNpbmNsdWRlIDxv bXAuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworLyogVGVzdCB0YXNrcyB3aXRoIGRldGFj aCBjbGF1c2Ugb24gYW4gb2ZmbG9hZCBkZXZpY2UuICBFYWNoIGRldmljZQorICAgdGhyZWFk IHNwYXducyBvZmYgYSBjaGFpbiBvZiB0YXNrcywgdGhhdCBjYW4gdGhlbiBiZSBleGVjdXRl ZCBieQorICAgYW55IGF2YWlsYWJsZSB0aHJlYWQuICBFYWNoIHRocmVhZCB1c2VzIHRhc2t3 YWl0IHRvIHdhaXQgZm9yIHRoZQorICAgY2hpbGQgdGFza3MgdG8gY29tcGxldGUuICAqLwor CitpbnQgbWFpbiAodm9pZCkKK3sKKyAgaW50IHggPSAwLCB5ID0gMCwgeiA9IDA7CisgIGlu dCB0aHJlYWRfY291bnQ7CisgIG9tcF9ldmVudF9oYW5kbGVfdCBkZXRhY2hfZXZlbnQxLCBk ZXRhY2hfZXZlbnQyOworCisgICNwcmFnbWEgb21wIHRhcmdldCBtYXAgKHRvZnJvbTogeCwg eSwgeikgbWFwIChmcm9tOiB0aHJlYWRfY291bnQpCisgICAgI3ByYWdtYSBvbXAgcGFyYWxs ZWwgcHJpdmF0ZSAoZGV0YWNoX2V2ZW50MSwgZGV0YWNoX2V2ZW50MikKKyAgICAgIHsKKwkj cHJhZ21hIG9tcCBzaW5nbGUKKwkgIHRocmVhZF9jb3VudCA9IG9tcF9nZXRfbnVtX3RocmVh ZHMgKCk7CisKKwkjcHJhZ21hIG9tcCB0YXNrIGRldGFjaCAoZGV0YWNoX2V2ZW50MSkgdW50 aWVkCisJICAjcHJhZ21hIG9tcCBhdG9taWMgdXBkYXRlCisJICAgIHgrKzsKKworCSNwcmFn bWEgb21wIHRhc2sgZGV0YWNoIChkZXRhY2hfZXZlbnQyKSB1bnRpZWQKKwl7CisJICAjcHJh Z21hIG9tcCBhdG9taWMgdXBkYXRlCisJICAgIHkrKzsKKwkgIG9tcF9mdWxmaWxsX2V2ZW50 IChkZXRhY2hfZXZlbnQxKTsKKwl9CisKKwkjcHJhZ21hIG9tcCB0YXNrIHVudGllZAorCXsK KwkgICNwcmFnbWEgb21wIGF0b21pYyB1cGRhdGUKKwkgICAgeisrOworCSAgb21wX2Z1bGZp bGxfZXZlbnQgKGRldGFjaF9ldmVudDIpOworCX0KKworCSNwcmFnbWEgb21wIHRhc2t3YWl0 CisgICAgICB9CisKKyAgYXNzZXJ0ICh4ID09IHRocmVhZF9jb3VudCk7CisgIGFzc2VydCAo eSA9PSB0aHJlYWRfY291bnQpOworICBhc3NlcnQgKHogPT0gdGhyZWFkX2NvdW50KTsKK30K ZGlmZiAtLWdpdCBhL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL3Rh c2stZGV0YWNoLTkuYyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9u L3Rhc2stZGV0YWNoLTkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41 MzE2Y2E1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5j LWMrKy1jb21tb24vdGFzay1kZXRhY2gtOS5jCkBAIC0wLDAgKzEsNDMgQEAKKy8qIHsgZGct ZG8gcnVuIH0gKi8KKworI2luY2x1ZGUgPG9tcC5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgor CisvKiBUZXN0IHRhc2tzIHdpdGggZGV0YWNoIGNsYXVzZS4gIEVhY2ggdGhyZWFkIHNwYXdu cyBvZmYgYSBjaGFpbiBvZiB0YXNrcworICAgaW4gYSB0YXNrZ3JvdXAsIHRoYXQgY2FuIHRo ZW4gYmUgZXhlY3V0ZWQgYnkgYW55IGF2YWlsYWJsZSB0aHJlYWQuICAqLworCitpbnQgbWFp biAodm9pZCkKK3sKKyAgaW50IHggPSAwLCB5ID0gMCwgeiA9IDA7CisgIGludCB0aHJlYWRf Y291bnQ7CisgIG9tcF9ldmVudF9oYW5kbGVfdCBkZXRhY2hfZXZlbnQxLCBkZXRhY2hfZXZl bnQyOworCisgICNwcmFnbWEgb21wIHBhcmFsbGVsIHByaXZhdGUgKGRldGFjaF9ldmVudDEs IGRldGFjaF9ldmVudDIpCisgICAgI3ByYWdtYSBvbXAgdGFza2dyb3VwCisgICAgeworICAg ICAgI3ByYWdtYSBvbXAgc2luZ2xlCisJdGhyZWFkX2NvdW50ID0gb21wX2dldF9udW1fdGhy ZWFkcyAoKTsKKworICAgICAgI3ByYWdtYSBvbXAgdGFzayBkZXRhY2ggKGRldGFjaF9ldmVu dDEpIHVudGllZAorCSNwcmFnbWEgb21wIGF0b21pYyB1cGRhdGUKKwkgIHgrKzsKKworICAg ICAgI3ByYWdtYSBvbXAgdGFzayBkZXRhY2ggKGRldGFjaF9ldmVudDIpIHVudGllZAorICAg ICAgeworCSNwcmFnbWEgb21wIGF0b21pYyB1cGRhdGUKKwkgIHkrKzsKKwlvbXBfZnVsZmls bF9ldmVudCAoZGV0YWNoX2V2ZW50MSk7CisgICAgICB9CisKKyAgICAgICNwcmFnbWEgb21w IHRhc2sgdW50aWVkCisgICAgICB7CisJI3ByYWdtYSBvbXAgYXRvbWljIHVwZGF0ZQorCSAg eisrOworCW9tcF9mdWxmaWxsX2V2ZW50IChkZXRhY2hfZXZlbnQyKTsKKyAgICAgIH0KKyAg ICB9CisKKyAgYXNzZXJ0ICh4ID09IHRocmVhZF9jb3VudCk7CisgIGFzc2VydCAoeSA9PSB0 aHJlYWRfY291bnQpOworICBhc3NlcnQgKHogPT0gdGhyZWFkX2NvdW50KTsKK30KZGlmZiAt LWdpdCBhL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi90YXNrLWRldGFjaC0x LmY5MCBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi90YXNrLWRldGFjaC0x LmY5MAppbmRleCAyMTdiZjY1Li5jNTNiMWNhIDEwMDY0NAotLS0gYS9saWJnb21wL3Rlc3Rz dWl0ZS9saWJnb21wLmZvcnRyYW4vdGFzay1kZXRhY2gtMS5mOTAKKysrIGIvbGliZ29tcC90 ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL3Rhc2stZGV0YWNoLTEuZjkwCkBAIC0xMSwxMSAr MTEsMTEgQEAgcHJvZ3JhbSB0YXNrX2RldGFjaF8xCiAKICAgISRvbXAgcGFyYWxsZWwKICAg ICAhJG9tcCBzaW5nbGUKLSAgICAgICEkb21wIHRhc2sgZGV0YWNoKGRldGFjaF9ldmVudDEp CisgICAgICAhJG9tcCB0YXNrIGRldGFjaCAoZGV0YWNoX2V2ZW50MSkKICAgICAgICAgeCA9 IHggKyAxCiAgICAgICAhJG9tcCBlbmQgdGFzawogCi0gICAgICAhJG9tcCB0YXNrIGRldGFj aChkZXRhY2hfZXZlbnQyKQorICAgICAgISRvbXAgdGFzayBkZXRhY2ggKGRldGFjaF9ldmVu dDIpCiAgICAgICAgIHkgPSB5ICsgMQogCWNhbGwgb21wX2Z1bGZpbGxfZXZlbnQgKGRldGFj aF9ldmVudDEpCiAgICAgICAhJG9tcCBlbmQgdGFzawpkaWZmIC0tZ2l0IGEvbGliZ29tcC90 ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL3Rhc2stZGV0YWNoLTEwLmY5MCBiL2xpYmdvbXAv dGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi90YXNrLWRldGFjaC0xMC5mOTAKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFmMGVhOAotLS0gL2Rldi9udWxsCisrKyBi L2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi90YXNrLWRldGFjaC0xMC5mOTAK QEAgLTAsMCArMSw0NCBAQAorISB7IGRnLWRvIHJ1biB9CisKKyEgVGVzdCB0YXNrcyB3aXRo IGRldGFjaCBjbGF1c2Ugb24gYW4gb2ZmbG9hZCBkZXZpY2UuICBFYWNoIGRldmljZQorISB0 aHJlYWQgc3Bhd25zIG9mZiBhIGNoYWluIG9mIHRhc2tzIGluIGEgdGFza2dyb3VwLCB0aGF0 IGNhbiB0aGVuCishIGJlIGV4ZWN1dGVkIGJ5IGFueSBhdmFpbGFibGUgdGhyZWFkLgorCitw cm9ncmFtIHRhc2tfZGV0YWNoXzEwCisgIHVzZSBvbXBfbGliCisKKyAgaW50ZWdlciAoa2lu ZD1vbXBfZXZlbnRfaGFuZGxlX2tpbmQpIDo6IGRldGFjaF9ldmVudDEsIGRldGFjaF9ldmVu dDIKKyAgaW50ZWdlciA6OiB4ID0gMCwgeSA9IDAsIHogPSAwCisgIGludGVnZXIgOjogdGhy ZWFkX2NvdW50CisKKyAgISRvbXAgdGFyZ2V0IG1hcCAodG9mcm9tOiB4LCB5LCB6KSBtYXAg KGZyb206IHRocmVhZF9jb3VudCkKKyAgICAhJG9tcCBwYXJhbGxlbCBwcml2YXRlIChkZXRh Y2hfZXZlbnQxLCBkZXRhY2hfZXZlbnQyKQorICAgICAgISRvbXAgdGFza2dyb3VwCisJISRv bXAgc2luZ2xlCisJICB0aHJlYWRfY291bnQgPSBvbXBfZ2V0X251bV90aHJlYWRzICgpCisJ ISRvbXAgZW5kIHNpbmdsZQorCisJISRvbXAgdGFzayBkZXRhY2ggKGRldGFjaF9ldmVudDEp IHVudGllZAorCSAgISRvbXAgYXRvbWljIHVwZGF0ZQorCSAgICB4ID0geCArIDEKKwkhJG9t cCBlbmQgdGFzaworCisJISRvbXAgdGFzayBkZXRhY2ggKGRldGFjaF9ldmVudDIpIHVudGll ZAorCSAgISRvbXAgYXRvbWljIHVwZGF0ZQorCSAgICB5ID0geSArIDEKKwkgIGNhbGwgb21w X2Z1bGZpbGxfZXZlbnQgKGRldGFjaF9ldmVudDEpCisJISRvbXAgZW5kIHRhc2sKKworCSEk b21wIHRhc2sgdW50aWVkCisJICAhJG9tcCBhdG9taWMgdXBkYXRlCisJICAgIHogPSB6ICsg MQorCSAgY2FsbCBvbXBfZnVsZmlsbF9ldmVudCAoZGV0YWNoX2V2ZW50MikKKwkhJG9tcCBl bmQgdGFzaworICAgICAgISRvbXAgZW5kIHRhc2tncm91cAorICAgICEkb21wIGVuZCBwYXJh bGxlbAorICAhJG9tcCBlbmQgdGFyZ2V0CisKKyAgaWYgKHggLz0gdGhyZWFkX2NvdW50KSBz dG9wIDEKKyAgaWYgKHkgLz0gdGhyZWFkX2NvdW50KSBzdG9wIDIKKyAgaWYgKHogLz0gdGhy ZWFkX2NvdW50KSBzdG9wIDMKK2VuZCBwcm9ncmFtCmRpZmYgLS1naXQgYS9saWJnb21wL3Rl c3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vdGFzay1kZXRhY2gtMTEuZjkwIGIvbGliZ29tcC90 ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL3Rhc2stZGV0YWNoLTExLmY5MApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzNiYWZmCi0tLSAvZGV2L251bGwKKysrIGIv bGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL3Rhc2stZGV0YWNoLTExLmY5MApA QCAtMCwwICsxLDEzIEBACishIHsgZGctZG8gcnVuIH0KKworISBUZXN0IHRoZSBkZXRhY2gg Y2xhdXNlIHdoZW4gdGhlIHRhc2sgaXMgdW5kZWZlcnJlZC4KKworcHJvZ3JhbSB0YXNrX2Rl dGFjaF8xMQorICB1c2Ugb21wX2xpYgorCisgIGludGVnZXIgKGtpbmQ9b21wX2V2ZW50X2hh bmRsZV9raW5kKSA6OiBkZXRhY2hfZXZlbnQKKworICAhJG9tcCB0YXNrIGRldGFjaCAoZGV0 YWNoX2V2ZW50KQorICAgIGNhbGwgb21wX2Z1bGZpbGxfZXZlbnQgKGRldGFjaF9ldmVudCkK KyAgISRvbXAgZW5kIHRhc2sKK2VuZCBwcm9ncmFtCmRpZmYgLS1naXQgYS9saWJnb21wL3Rl c3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vdGFzay1kZXRhY2gtMi5mOTAgYi9saWJnb21wL3Rl c3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vdGFzay1kZXRhY2gtMi5mOTAKaW5kZXggZWNiNDgy OS4uNjhlM2ZmMiAxMDA2NDQKLS0tIGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0 cmFuL3Rhc2stZGV0YWNoLTIuZjkwCisrKyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAu Zm9ydHJhbi90YXNrLWRldGFjaC0yLmY5MApAQCAtMTAsMTMgKzEwLDEzIEBAIHByb2dyYW0g dGFza19kZXRhY2hfMgogICBpbnRlZ2VyIChraW5kPW9tcF9ldmVudF9oYW5kbGVfa2luZCkg OjogZGV0YWNoX2V2ZW50MSwgZGV0YWNoX2V2ZW50MgogICBpbnRlZ2VyIDo6IHggPSAwLCB5 ID0gMCwgeiA9IDAKIAotICAhJG9tcCBwYXJhbGxlbCBudW1fdGhyZWFkcygxKQorICAhJG9t cCBwYXJhbGxlbCBudW1fdGhyZWFkcyAoMSkKICAgICAhJG9tcCBzaW5nbGUKLSAgICAgICEk b21wIHRhc2sgZGV0YWNoKGRldGFjaF9ldmVudDEpCisgICAgICAhJG9tcCB0YXNrIGRldGFj aCAoZGV0YWNoX2V2ZW50MSkKICAgICAgICAgeCA9IHggKyAxCiAgICAgICAhJG9tcCBlbmQg dGFzawogCi0gICAgICAhJG9tcCB0YXNrIGRldGFjaChkZXRhY2hfZXZlbnQyKQorICAgICAg ISRvbXAgdGFzayBkZXRhY2ggKGRldGFjaF9ldmVudDIpCiAgICAgICAgIHkgPSB5ICsgMQog CWNhbGwgb21wX2Z1bGZpbGxfZXZlbnQgKGRldGFjaF9ldmVudDEpCiAgICAgICAhJG9tcCBl bmQgdGFzawpkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFu L3Rhc2stZGV0YWNoLTMuZjkwIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFu L3Rhc2stZGV0YWNoLTMuZjkwCmluZGV4IGJkZjkzYTUuLjVhYzY4ZDUgMTAwNjQ0Ci0tLSBh L2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi90YXNrLWRldGFjaC0zLmY5MAor KysgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vdGFzay1kZXRhY2gtMy5m OTAKQEAgLTEyLDE2ICsxMiwxNiBAQCBwcm9ncmFtIHRhc2tfZGV0YWNoXzMKIAogICAhJG9t cCBwYXJhbGxlbAogICAgICEkb21wIHNpbmdsZQotICAgICAgISRvbXAgdGFzayBkZXBlbmQo b3V0OmRlcCkgZGV0YWNoKGRldGFjaF9ldmVudCkKKyAgICAgICEkb21wIHRhc2sgZGVwZW5k IChvdXQ6ZGVwKSBkZXRhY2ggKGRldGFjaF9ldmVudCkKICAgICAgICAgeCA9IHggKyAxCiAg ICAgICAhJG9tcCBlbmQgdGFzawogCiAgICAgICAhJG9tcCB0YXNrCiAgICAgICAgIHkgPSB5 ICsgMQotCWNhbGwgb21wX2Z1bGZpbGxfZXZlbnQoZGV0YWNoX2V2ZW50KQorCWNhbGwgb21w X2Z1bGZpbGxfZXZlbnQgKGRldGFjaF9ldmVudCkKICAgICAgICEkb21wIGVuZCB0YXNrCiAK LSAgICAgICEkb21wIHRhc2sgZGVwZW5kKGluOmRlcCkKKyAgICAgICEkb21wIHRhc2sgZGVw ZW5kIChpbjpkZXApCiAgICAgICAgIHogPSB6ICsgMQogICAgICAgISRvbXAgZW5kIHRhc2sK ICAgICAhJG9tcCBlbmQgc2luZ2xlCmRpZmYgLS1naXQgYS9saWJnb21wL3Rlc3RzdWl0ZS9s aWJnb21wLmZvcnRyYW4vdGFzay1kZXRhY2gtNC5mOTAgYi9saWJnb21wL3Rlc3RzdWl0ZS9s aWJnb21wLmZvcnRyYW4vdGFzay1kZXRhY2gtNC5mOTAKaW5kZXggNmQwODQzYy4uMTU5NjI0 YyAxMDA2NDQKLS0tIGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL3Rhc2st ZGV0YWNoLTQuZjkwCisrKyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi90 YXNrLWRldGFjaC00LmY5MApAQCAtMTEsOSArMTEsOSBAQCBwcm9ncmFtIHRhc2tfZGV0YWNo XzQKIAogICAhJG9tcCBwYXJhbGxlbAogICAgICEkb21wIHNpbmdsZQotICAgICAgISRvbXAg dGFzayBkZXRhY2goZGV0YWNoX2V2ZW50KQorICAgICAgISRvbXAgdGFzayBkZXRhY2ggKGRl dGFjaF9ldmVudCkKICAgICAgICAgeCA9IHggKyAxCi0JY2FsbCBvbXBfZnVsZmlsbF9ldmVu dChkZXRhY2hfZXZlbnQpCisJY2FsbCBvbXBfZnVsZmlsbF9ldmVudCAoZGV0YWNoX2V2ZW50 KQogICAgICAgISRvbXAgZW5kIHRhc2sKICAgICAhJG9tcCBlbmQgc2luZ2xlCiAgICEkb21w IGVuZCBwYXJhbGxlbApkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5m b3J0cmFuL3Rhc2stZGV0YWNoLTUuZjkwIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5m b3J0cmFuL3Rhc2stZGV0YWNoLTUuZjkwCmluZGV4IDk1NWQ2ODcuLjk1YmQxMzIgMTAwNjQ0 Ci0tLSBhL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi90YXNrLWRldGFjaC01 LmY5MAorKysgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vdGFzay1kZXRh Y2gtNS5mOTAKQEAgLTEwLDE3ICsxMCwxNyBAQCBwcm9ncmFtIHRhc2tfZGV0YWNoXzUKICAg aW50ZWdlciA6OiB4ID0gMCwgeSA9IDAsIHogPSAwCiAgIGludGVnZXIgOjogdGhyZWFkX2Nv dW50CiAKLSAgISRvbXAgcGFyYWxsZWwgZmlyc3Rwcml2YXRlKGRldGFjaF9ldmVudDEsIGRl dGFjaF9ldmVudDIpCisgICEkb21wIHBhcmFsbGVsIHByaXZhdGUgKGRldGFjaF9ldmVudDEs IGRldGFjaF9ldmVudDIpCiAgICAgISRvbXAgc2luZ2xlCi0gICAgICB0aHJlYWRfY291bnQg PSBvbXBfZ2V0X251bV90aHJlYWRzKCkKKyAgICAgIHRocmVhZF9jb3VudCA9IG9tcF9nZXRf bnVtX3RocmVhZHMgKCkKICAgICAhJG9tcCBlbmQgc2luZ2xlCiAKLSAgICAhJG9tcCB0YXNr IGRldGFjaChkZXRhY2hfZXZlbnQxKSB1bnRpZWQKKyAgICAhJG9tcCB0YXNrIGRldGFjaCAo ZGV0YWNoX2V2ZW50MSkgdW50aWVkCiAgICAgICAhJG9tcCBhdG9taWMgdXBkYXRlCiAJeCA9 IHggKyAxCiAgICAgISRvbXAgZW5kIHRhc2sKIAotICAgICEkb21wIHRhc2sgZGV0YWNoKGRl dGFjaF9ldmVudDIpIHVudGllZAorICAgICEkb21wIHRhc2sgZGV0YWNoIChkZXRhY2hfZXZl bnQyKSB1bnRpZWQKICAgICAgICEkb21wIGF0b21pYyB1cGRhdGUKIAl5ID0geSArIDEKICAg ICAgIGNhbGwgb21wX2Z1bGZpbGxfZXZlbnQgKGRldGFjaF9ldmVudDEpOwpkaWZmIC0tZ2l0 IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL3Rhc2stZGV0YWNoLTYuZjkw IGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL3Rhc2stZGV0YWNoLTYuZjkw CmluZGV4IDBmZTIxNTUuLmIyYzQ3NmYgMTAwNjQ0Ci0tLSBhL2xpYmdvbXAvdGVzdHN1aXRl L2xpYmdvbXAuZm9ydHJhbi90YXNrLWRldGFjaC02LmY5MAorKysgYi9saWJnb21wL3Rlc3Rz dWl0ZS9saWJnb21wLmZvcnRyYW4vdGFzay1kZXRhY2gtNi5mOTAKQEAgLTExLDMwICsxMSwy OCBAQCBwcm9ncmFtIHRhc2tfZGV0YWNoXzYKICAgaW50ZWdlciA6OiB4ID0gMCwgeSA9IDAs IHogPSAwCiAgIGludGVnZXIgOjogdGhyZWFkX2NvdW50CiAKLSAgISRvbXAgdGFyZ2V0IG1h cCh0b2Zyb206IHgsIHksIHopIG1hcChmcm9tOiB0aHJlYWRfY291bnQpCi0gICAgISRvbXAg cGFyYWxsZWwgZmlyc3Rwcml2YXRlKGRldGFjaF9ldmVudDEsIGRldGFjaF9ldmVudDIpCisg ICEkb21wIHRhcmdldCBtYXAgKHRvZnJvbTogeCwgeSwgeikgbWFwIChmcm9tOiB0aHJlYWRf Y291bnQpCisgICAgISRvbXAgcGFyYWxsZWwgcHJpdmF0ZSAoZGV0YWNoX2V2ZW50MSwgZGV0 YWNoX2V2ZW50MikKICAgICAgICEkb21wIHNpbmdsZQotCXRocmVhZF9jb3VudCA9IG9tcF9n ZXRfbnVtX3RocmVhZHMoKQorCXRocmVhZF9jb3VudCA9IG9tcF9nZXRfbnVtX3RocmVhZHMg KCkKICAgICAgICEkb21wIGVuZCBzaW5nbGUKIAotICAgICAgISRvbXAgdGFzayBkZXRhY2go ZGV0YWNoX2V2ZW50MSkgdW50aWVkCisgICAgICAhJG9tcCB0YXNrIGRldGFjaCAoZGV0YWNo X2V2ZW50MSkgdW50aWVkCiAJISRvbXAgYXRvbWljIHVwZGF0ZQogCSAgeCA9IHggKyAxCiAg ICAgICAhJG9tcCBlbmQgdGFzawogCi0gICAgICAhJG9tcCB0YXNrIGRldGFjaChkZXRhY2hf ZXZlbnQyKSB1bnRpZWQKKyAgICAgICEkb21wIHRhc2sgZGV0YWNoIChkZXRhY2hfZXZlbnQy KSB1bnRpZWQKIAkhJG9tcCBhdG9taWMgdXBkYXRlCiAJICB5ID0geSArIDEKLQljYWxsIG9t cF9mdWxmaWxsX2V2ZW50IChkZXRhY2hfZXZlbnQxKTsKKwljYWxsIG9tcF9mdWxmaWxsX2V2 ZW50IChkZXRhY2hfZXZlbnQxKQogICAgICAgISRvbXAgZW5kIHRhc2sKIAogICAgICAgISRv bXAgdGFzayB1bnRpZWQKIAkhJG9tcCBhdG9taWMgdXBkYXRlCiAJICB6ID0geiArIDEKLQlj YWxsIG9tcF9mdWxmaWxsX2V2ZW50IChkZXRhY2hfZXZlbnQyKTsKKwljYWxsIG9tcF9mdWxm aWxsX2V2ZW50IChkZXRhY2hfZXZlbnQyKQogICAgICAgISRvbXAgZW5kIHRhc2sKLQotICAg ICAgISRvbXAgdGFza3dhaXQKICAgICAhJG9tcCBlbmQgcGFyYWxsZWwKICAgISRvbXAgZW5k IHRhcmdldAogCmRpZmYgLS1naXQgYS9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRy YW4vdGFzay1kZXRhY2gtNy5mOTAgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRy YW4vdGFzay1kZXRhY2gtNy5mOTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uMzJlNzE1ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdv bXAuZm9ydHJhbi90YXNrLWRldGFjaC03LmY5MApAQCAtMCwwICsxLDQyIEBACishIHsgZGct ZG8gcnVuIH0KKworISBUZXN0IHRhc2tzIHdpdGggZGV0YWNoIGNsYXVzZS4gIEVhY2ggdGhy ZWFkIHNwYXducyBvZmYgYSBjaGFpbiBvZiB0YXNrcywKKyEgdGhhdCBjYW4gdGhlbiBiZSBl eGVjdXRlZCBieSBhbnkgYXZhaWxhYmxlIHRocmVhZC4gIEVhY2ggdGhyZWFkIHVzZXMKKyEg dGFza3dhaXQgdG8gd2FpdCBmb3IgdGhlIGNoaWxkIHRhc2tzIHRvIGNvbXBsZXRlLgorCitw cm9ncmFtIHRhc2tfZGV0YWNoXzcKKyAgdXNlIG9tcF9saWIKKworICBpbnRlZ2VyIChraW5k PW9tcF9ldmVudF9oYW5kbGVfa2luZCkgOjogZGV0YWNoX2V2ZW50MSwgZGV0YWNoX2V2ZW50 MgorICBpbnRlZ2VyIDo6IHggPSAwLCB5ID0gMCwgeiA9IDAKKyAgaW50ZWdlciA6OiB0aHJl YWRfY291bnQKKworICAhJG9tcCBwYXJhbGxlbCBwcml2YXRlIChkZXRhY2hfZXZlbnQxLCBk ZXRhY2hfZXZlbnQyKQorICAgICEkb21wIHNpbmdsZQorICAgICAgdGhyZWFkX2NvdW50ID0g b21wX2dldF9udW1fdGhyZWFkcygpCisgICAgISRvbXAgZW5kIHNpbmdsZQorCisgICAgISRv bXAgdGFzayBkZXRhY2ggKGRldGFjaF9ldmVudDEpIHVudGllZAorICAgICAgISRvbXAgYXRv bWljIHVwZGF0ZQorCXggPSB4ICsgMQorICAgICEkb21wIGVuZCB0YXNrCisKKyAgICAhJG9t cCB0YXNrIGRldGFjaCAoZGV0YWNoX2V2ZW50MikgdW50aWVkCisgICAgICAhJG9tcCBhdG9t aWMgdXBkYXRlCisJeSA9IHkgKyAxCisgICAgICBjYWxsIG9tcF9mdWxmaWxsX2V2ZW50IChk ZXRhY2hfZXZlbnQxKQorICAgICEkb21wIGVuZCB0YXNrCisKKyAgICAhJG9tcCB0YXNrIHVu dGllZAorICAgICAgISRvbXAgYXRvbWljIHVwZGF0ZQorCXogPSB6ICsgMQorICAgICAgY2Fs bCBvbXBfZnVsZmlsbF9ldmVudCAoZGV0YWNoX2V2ZW50MikKKyAgICAhJG9tcCBlbmQgdGFz aworCisgICAgISRvbXAgdGFza3dhaXQKKyAgISRvbXAgZW5kIHBhcmFsbGVsCisKKyAgaWYg KHggLz0gdGhyZWFkX2NvdW50KSBzdG9wIDEKKyAgaWYgKHkgLz0gdGhyZWFkX2NvdW50KSBz dG9wIDIKKyAgaWYgKHogLz0gdGhyZWFkX2NvdW50KSBzdG9wIDMKK2VuZCBwcm9ncmFtCmRp ZmYgLS1naXQgYS9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vdGFzay1kZXRh Y2gtOC5mOTAgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vdGFzay1kZXRh Y2gtOC5mOTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc2MGVhYgot LS0gL2Rldi9udWxsCisrKyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi90 YXNrLWRldGFjaC04LmY5MApAQCAtMCwwICsxLDQ1IEBACishIHsgZGctZG8gcnVuIH0KKwor ISBUZXN0IHRhc2tzIHdpdGggZGV0YWNoIGNsYXVzZSBvbiBhbiBvZmZsb2FkIGRldmljZS4g IEVhY2ggZGV2aWNlCishIHRocmVhZCBzcGF3bnMgb2ZmIGEgY2hhaW4gb2YgdGFza3MsIHRo YXQgY2FuIHRoZW4gYmUgZXhlY3V0ZWQgYnkKKyEgYW55IGF2YWlsYWJsZSB0aHJlYWQuICBF YWNoIHRocmVhZCB1c2VzIHRhc2t3YWl0IHRvIHdhaXQgZm9yIHRoZQorISBjaGlsZCB0YXNr cyB0byBjb21wbGV0ZS4KKworcHJvZ3JhbSB0YXNrX2RldGFjaF84CisgIHVzZSBvbXBfbGli CisKKyAgaW50ZWdlciAoa2luZD1vbXBfZXZlbnRfaGFuZGxlX2tpbmQpIDo6IGRldGFjaF9l dmVudDEsIGRldGFjaF9ldmVudDIKKyAgaW50ZWdlciA6OiB4ID0gMCwgeSA9IDAsIHogPSAw CisgIGludGVnZXIgOjogdGhyZWFkX2NvdW50CisKKyAgISRvbXAgdGFyZ2V0IG1hcCAodG9m cm9tOiB4LCB5LCB6KSBtYXAgKGZyb206IHRocmVhZF9jb3VudCkKKyAgICAhJG9tcCBwYXJh bGxlbCBwcml2YXRlIChkZXRhY2hfZXZlbnQxLCBkZXRhY2hfZXZlbnQyKQorICAgICAgISRv bXAgc2luZ2xlCisJdGhyZWFkX2NvdW50ID0gb21wX2dldF9udW1fdGhyZWFkcyAoKQorICAg ICAgISRvbXAgZW5kIHNpbmdsZQorCisgICAgICAhJG9tcCB0YXNrIGRldGFjaCAoZGV0YWNo X2V2ZW50MSkgdW50aWVkCisJISRvbXAgYXRvbWljIHVwZGF0ZQorCSAgeCA9IHggKyAxCisg ICAgICAhJG9tcCBlbmQgdGFzaworCisgICAgICAhJG9tcCB0YXNrIGRldGFjaCAoZGV0YWNo X2V2ZW50MikgdW50aWVkCisJISRvbXAgYXRvbWljIHVwZGF0ZQorCSAgeSA9IHkgKyAxCisJ Y2FsbCBvbXBfZnVsZmlsbF9ldmVudCAoZGV0YWNoX2V2ZW50MSkKKyAgICAgICEkb21wIGVu ZCB0YXNrCisKKyAgICAgICEkb21wIHRhc2sgdW50aWVkCisJISRvbXAgYXRvbWljIHVwZGF0 ZQorCSAgeiA9IHogKyAxCisJY2FsbCBvbXBfZnVsZmlsbF9ldmVudCAoZGV0YWNoX2V2ZW50 MikKKyAgICAgICEkb21wIGVuZCB0YXNrCisKKyAgICAgICEkb21wIHRhc2t3YWl0CisgICAg ISRvbXAgZW5kIHBhcmFsbGVsCisgICEkb21wIGVuZCB0YXJnZXQKKworICBpZiAoeCAvPSB0 aHJlYWRfY291bnQpIHN0b3AgMQorICBpZiAoeSAvPSB0aHJlYWRfY291bnQpIHN0b3AgMgor ICBpZiAoeiAvPSB0aHJlYWRfY291bnQpIHN0b3AgMworZW5kIHByb2dyYW0KZGlmZiAtLWdp dCBhL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi90YXNrLWRldGFjaC05LmY5 MCBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi90YXNrLWRldGFjaC05LmY5 MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDBjNmRlCi0tLSAvZGV2 L251bGwKKysrIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL3Rhc2stZGV0 YWNoLTkuZjkwCkBAIC0wLDAgKzEsNDEgQEAKKyEgeyBkZy1kbyBydW4gfQorCishIFRlc3Qg dGFza3Mgd2l0aCBkZXRhY2ggY2xhdXNlLiAgRWFjaCB0aHJlYWQgc3Bhd25zIG9mZiBhIGNo YWluIG9mIHRhc2tzCishIGluIGEgdGFza2dyb3VwLCB0aGF0IGNhbiB0aGVuIGJlIGV4ZWN1 dGVkIGJ5IGFueSBhdmFpbGFibGUgdGhyZWFkLgorCitwcm9ncmFtIHRhc2tfZGV0YWNoXzkK KyAgdXNlIG9tcF9saWIKKworICBpbnRlZ2VyIChraW5kPW9tcF9ldmVudF9oYW5kbGVfa2lu ZCkgOjogZGV0YWNoX2V2ZW50MSwgZGV0YWNoX2V2ZW50MgorICBpbnRlZ2VyIDo6IHggPSAw LCB5ID0gMCwgeiA9IDAKKyAgaW50ZWdlciA6OiB0aHJlYWRfY291bnQKKworICAhJG9tcCBw YXJhbGxlbCBwcml2YXRlIChkZXRhY2hfZXZlbnQxLCBkZXRhY2hfZXZlbnQyKQorICAgICEk b21wIHRhc2tncm91cAorICAgICAgISRvbXAgc2luZ2xlCisJdGhyZWFkX2NvdW50ID0gb21w X2dldF9udW1fdGhyZWFkcyAoKQorICAgICAgISRvbXAgZW5kIHNpbmdsZQorCisgICAgICAh JG9tcCB0YXNrIGRldGFjaCAoZGV0YWNoX2V2ZW50MSkgdW50aWVkCisJISRvbXAgYXRvbWlj IHVwZGF0ZQorCSAgeCA9IHggKyAxCisgICAgICAhJG9tcCBlbmQgdGFzaworCisgICAgICAh JG9tcCB0YXNrIGRldGFjaCAoZGV0YWNoX2V2ZW50MikgdW50aWVkCisJISRvbXAgYXRvbWlj IHVwZGF0ZQorCSAgeSA9IHkgKyAxCisJY2FsbCBvbXBfZnVsZmlsbF9ldmVudCAoZGV0YWNo X2V2ZW50MSk7CisgICAgICAhJG9tcCBlbmQgdGFzaworCisgICAgICAhJG9tcCB0YXNrIHVu dGllZAorCSEkb21wIGF0b21pYyB1cGRhdGUKKwkgIHogPSB6ICsgMQorCWNhbGwgb21wX2Z1 bGZpbGxfZXZlbnQgKGRldGFjaF9ldmVudDIpOworICAgICAgISRvbXAgZW5kIHRhc2sKKyAg ICAhJG9tcCBlbmQgdGFza2dyb3VwCisgICEkb21wIGVuZCBwYXJhbGxlbAorCisgIGlmICh4 IC89IHRocmVhZF9jb3VudCkgc3RvcCAxCisgIGlmICh5IC89IHRocmVhZF9jb3VudCkgc3Rv cCAyCisgIGlmICh6IC89IHRocmVhZF9jb3VudCkgc3RvcCAzCitlbmQgcHJvZ3JhbQotLSAK Mi44LjEKCg== --------------235B8FC1BFCA57EF9BC9F31A--