From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-Status: No, score=-4.2 required=3.0 tests=AWL,BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,SPF_HELO_PASS,SPF_PASS shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by dcvr.yhbt.net (Postfix) with ESMTPS id A18651F9FD for ; Fri, 5 Mar 2021 17:00:27 +0000 (UTC) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 8DE533AAA0E8; Fri, 5 Mar 2021 17:00:21 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 8DE533AAA0E8 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1614963621; bh=4MgYzLl4h3XlmZ10JsByk6+yW8nvtB6drapjf1fjJYo=; h=References:In-Reply-To:Date:Subject:To:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=JOO+ljxrAp6GM9vhv8tao411Mhqa+e++3pmw5BCBSC0+nyptvxr3GUlhZ/ACR/a7y 708kNwGVLeYy4vtliVhjAFsA/nswjpTalKNl+b0YTgY4VIc3/ePkPRvyGor8Bh0CEi XQ3FQaAgYQ5wVDxYesRzG8csMlMr9WKm99/C8Tdw= Received: from mail-oi1-x22e.google.com (mail-oi1-x22e.google.com [IPv6:2607:f8b0:4864:20::22e]) by sourceware.org (Postfix) with ESMTPS id 563143874C10 for ; Fri, 5 Mar 2021 17:00:16 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 563143874C10 Received: by mail-oi1-x22e.google.com with SMTP id i21so3247407oii.2 for ; Fri, 05 Mar 2021 09:00:16 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=4MgYzLl4h3XlmZ10JsByk6+yW8nvtB6drapjf1fjJYo=; b=XWbQb0vFWoFDPspl6Plb8ckNFTp8tzPVzbVpds5OSVLnyZafBLmZAru+iro2Z2CSNa nkv/fg2Gl1tcyyVU5pP/Sg/2IfPq61aSKSK/jV2NbBaOm/nnA8m3h9m5OhTBafqHjKif JlYPWym+liqy4rPD+1Bflise5Tvq13V7urMdiClWDQmfSwS6t2z9GPclCX4LFILMs+2X 4oCAlZIIQXnY9zI6lYRes4XVOYdfTwoVwoVqQxsf+RWUhf+fRNI8C2QC+7HjTt00uPP3 I0gqPOrxa19Z5/80V8sdnBAVm8EFwrhJfKGGxadh1MkxIPY3pkqGhkQdFcvXi/fRyFH5 OKsQ== X-Gm-Message-State: AOAM53072bQmNq/0kGclyNwgf8adKP3Le1ZvihV7PxEQhhaQy2fOAcOr AfuIDjnUT0gZEckalmAslI+uBrqVkDqxI4Q1BCQ= X-Google-Smtp-Source: ABdhPJwtBKJUmM0+rL0cx/8EtKkUpn88GBf89AdXtUInMtb63CI389ffnVJSRhx1YZsdHs3dK/X/RTrdEuObH9Bh+kQ= X-Received: by 2002:aca:1016:: with SMTP id 22mr7259922oiq.79.1614963615804; Fri, 05 Mar 2021 09:00:15 -0800 (PST) MIME-Version: 1.0 References: <20210214224505.4448-1-hjl.tools@gmail.com> <87r1lhehkw.fsf@oldenburg.str.redhat.com> <7e132276-269f-b9c6-72fe-9d771e023d29@linaro.org> <20210305083227.hrg5ja5cdzrs3yo3@wittgenstein> In-Reply-To: <20210305083227.hrg5ja5cdzrs3yo3@wittgenstein> Date: Fri, 5 Mar 2021 08:59:39 -0800 Message-ID: Subject: [PATCH v3] Add an internal wrapper for clone, clone2 and clone3 To: Christian Brauner Content-Type: multipart/mixed; boundary="000000000000a58d9805bccd0409" X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: "H.J. Lu via Libc-alpha" Reply-To: "H.J. Lu" Cc: Florian Weimer , "H.J. Lu via Libc-alpha" Errors-To: libc-alpha-bounces@sourceware.org Sender: "Libc-alpha" --000000000000a58d9805bccd0409 Content-Type: text/plain; charset="UTF-8" On Fri, Mar 5, 2021 at 12:39 AM Christian Brauner wrote: > > On Thu, Mar 04, 2021 at 10:50:29AM -0800, H.J. Lu via Libc-alpha wrote: > > On Thu, Mar 4, 2021 at 10:40 AM H.J. Lu wrote: > > > > > > On Mon, Feb 15, 2021 at 6:56 AM Adhemerval Zanella via Libc-alpha > > > wrote: > > > > > > > > > > > > > > > > On 15/02/2021 07:44, Florian Weimer via Libc-alpha wrote: > > > > > * H. J. Lu via Libc-alpha: > > > > > > > > > >> The clone3 system call provides a superset of the functionality of clone > > > > >> and clone2. It also provides a number of API improve ments, including > > > > >> the ability to specify the size of the child's stack area which can be > > > > >> used by kernel to compute the shadow stack size when allocating the > > > > >> shadow stack. Add: > > > > >> > > > > >> extern int __clone_internal (struct clone_args *cl_args, size_t size, > > > > >> int (*__fn) (void *__arg), void *__arg); > > > > >> > > > > >> to provide an abstract interface for clone, clone2 and clone3. > > > > >> > > > > >> 1. Simplify stack management for clone by passing stack base and size > > > > >> to __clone_internal. > > > > >> 2. Consolidate clone vs clone2 differences into a single file. > > > > >> 3. Use only __clone_internal to clone a thread. If clone3 returns -1 > > > > >> with ENOSYS, __clone_internal will fall back to clone or clone2. > > > > >> 4. Add the x86-64 clone3 wrapper. > > > > >> 5. Enable the public clone3 wrapper in the future after it has been > > > > >> added to add targets. > > > > > > > > > > What do you think about providing a clone wrapper which reuses the > > > > > caller's stack? That would be useful for a (v)fork-style clone. This > > > > > variant could also be exported because the callback inherits a > > > > > semi-valid TCB in this case. > > > > I have this one as a TODO to improve the posix_spawn. > > > > > > Here is the v2 patch: > > > > > > 1. Update the stack size field, instead of the stack field, passed to > > > clone3. > > > > > > OK for master? > > > > Really add the patch this time :-). > > > > -- > > H.J. > > Just a small comment. > > > + __set_errno (0); > > + /* Map clone3 arguments to clone arguments. */ > > + int flags = cl_args->flags | cl_args->exit_signal; > > + void *stack = (void *) (uintptr_t) cl_args->stack; > > + > > +#ifdef __ia64__ > > + ret = __clone2 (fn, stack, (size_t) cl_args->stack_size, > > + flags, arg, > > + (void *) (uintptr_t) cl_args->parent_tid, > > + (void *) (uintptr_t) cl_args->tls, > > + (void *) (uintptr_t) cl_args->child_tid); > > Should glibc maybe just carry a few simple macros to do this instead of > open-coding the casting? (We do in systemd and LXC for example.): > > #define PTR_TO_INT(p) ((int)((intptr_t)(p))) > #define INT_TO_PTR(u) ((void *)((intptr_t)(u))) > > #define PTR_TO_PID(p) ((pid_t)((intptr_t)(p))) > #define PID_TO_PTR(u) ((void *)((intptr_t)(u))) > > #define PTR_TO_UINT64(p) ((uint64_t)((uintptr_t)(p))) > > #define PTR_TO_U64(p) ((__u64)((uintptr_t)(p))) > > #define UINT_TO_PTR(u) ((void *) ((uintptr_t) (u))) > > #define PTR_TO_USHORT(p) ((unsigned short)((uintptr_t)(p))) > Fixed. Here is the v3 patch. OK for master? Changes from v2: 1. Add cast_to_pointer to cast an integer to void * pointer. -- H.J. --000000000000a58d9805bccd0409 Content-Type: text/x-patch; charset="US-ASCII"; name="v3-0001-Add-an-internal-wrapper-for-clone-clone2-and-clon.patch" Content-Disposition: attachment; filename="v3-0001-Add-an-internal-wrapper-for-clone-clone2-and-clon.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_klwjk15h0 RnJvbSA2YWJkZGQxZjNhMzUxZGUwODQxZmFhNGQ2ZjU2ZTgxZGM3ZmY1NDM4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiSC5KLiBMdSIgPGhqbC50b29sc0BnbWFpbC5jb20+CkRhdGU6 IFNhdCwgMTMgRmViIDIwMjEgMTE6NDc6NDYgLTA4MDAKU3ViamVjdDogW1BBVENIIHYzXSBBZGQg YW4gaW50ZXJuYWwgd3JhcHBlciBmb3IgY2xvbmUsIGNsb25lMiBhbmQgY2xvbmUzCgpUaGUgY2xv bmUzIHN5c3RlbSBjYWxsIHByb3ZpZGVzIGEgc3VwZXJzZXQgb2YgdGhlIGZ1bmN0aW9uYWxpdHkg b2YgY2xvbmUKYW5kIGNsb25lMi4gIEl0IGFsc28gcHJvdmlkZXMgYSBudW1iZXIgb2YgQVBJIGlt cHJvdmUgbWVudHMsIGluY2x1ZGluZwp0aGUgYWJpbGl0eSB0byBzcGVjaWZ5IHRoZSBzaXplIG9m IHRoZSBjaGlsZCdzIHN0YWNrIGFyZWEgd2hpY2ggY2FuIGJlCnVzZWQgYnkga2VybmVsIHRvIGNv bXB1dGUgdGhlIHNoYWRvdyBzdGFjayBzaXplIHdoZW4gYWxsb2NhdGluZyB0aGUKc2hhZG93IHN0 YWNrLiAgQWRkOgoKZXh0ZXJuIGludCBfX2Nsb25lX2ludGVybmFsIChzdHJ1Y3QgY2xvbmVfYXJn cyAqY2xfYXJncywgc2l6ZV90IHNpemUsCgkJCSAgICAgaW50ICgqX19mbikgKHZvaWQgKl9fYXJn KSwgdm9pZCAqX19hcmcpOwoKdG8gcHJvdmlkZSBhbiBhYnN0cmFjdCBpbnRlcmZhY2UgZm9yIGNs b25lLCBjbG9uZTIgYW5kIGNsb25lMy4KCjEuIEFkZCBjYXN0X3RvX3BvaW50ZXIgdG8gY2FzdCBh biBpbnRlZ2VyIHRvIHZvaWQgKiBwb2ludGVyLgoyLiBTaW1wbGlmeSBzdGFjayBtYW5hZ2VtZW50 IGZvciBjbG9uZSBieSBwYXNzaW5nIHN0YWNrIGJhc2UgYW5kIHNpemUKdG8gX19jbG9uZV9pbnRl cm5hbC4KMy4gQ29uc29saWRhdGUgY2xvbmUgdnMgY2xvbmUyIGRpZmZlcmVuY2VzIGludG8gYSBz aW5nbGUgZmlsZS4KNC4gVXNlIG9ubHkgX19jbG9uZV9pbnRlcm5hbCB0byBjbG9uZSBhIHRocmVh ZC4gIElmIGNsb25lMyByZXR1cm5zIC0xCndpdGggRU5PU1lTLCBfX2Nsb25lX2ludGVybmFsIHdp bGwgZmFsbCBiYWNrIHRvIGNsb25lIG9yIGNsb25lMi4KNS4gQWRkIHRoZSB4ODYtNjQgY2xvbmUz IHdyYXBwZXIuCjYuIEVuYWJsZSB0aGUgcHVibGljIGNsb25lMyB3cmFwcGVyIGluIHRoZSBmdXR1 cmUgYWZ0ZXIgaXQgaGFzIGJlZW4KYWRkZWQgdG8gYWxsIHRhcmdldHMuCgpUZXN0ZWQgd2l0aCBi dWlsZC1tYW55LWdsaWJjcy5weS4gIFRoZSB4ODYtNjQgY2xvbmUzIHdyYXBwZXIgYW5kIHRoZQpp Njg2IGNsb25lIGZhbGxiYWNrIGFyZSB0ZXN0ZWQgdW5kZXIgNS4xMC4xNSBrZXJuZWwuCi0tLQog aW5jbHVkZS9saWJjLXBvaW50ZXItYXJpdGguaCAgICAgICAgICAgICAgfCAgIDMgKwogaW5jbHVk ZS9zY2hlZC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMgKwogbnB0bC9hbGxvY2F0 ZXN0YWNrLmMgICAgICAgICAgICAgICAgICAgICAgfCAgNTkgKystLS0tLS0tLS0tCiBucHRsL2Ny ZWF0ZXRocmVhZC5jICAgICAgICAgICAgICAgICAgICAgICB8ICAgMyArLQogbnB0bC9wdGhyZWFk X2NyZWF0ZS5jICAgICAgICAgICAgICAgICAgICAgfCAgMTcgKystLQogc3lzZGVwcy9nZW5lcmlj L2Nsb25lLWludGVybmFsLmggICAgICAgICAgfCAgNDkgKysrKysrKysrKwogc3lzZGVwcy91bml4 L3N5c3YvbGludXgvTWFrZWZpbGUgICAgICAgICAgfCAgIDQgKy0KIHN5c2RlcHMvdW5peC9zeXN2 L2xpbnV4L1ZlcnNpb25zICAgICAgICAgIHwgICAxICsKIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4 L2Nsb25lLWludGVybmFsLmMgIHwgIDYyICsrKysrKysrKysrKysKIHN5c2RlcHMvdW5peC9zeXN2 L2xpbnV4L2Nsb25lLW9mZnNldHMuc3ltIHwgICA5ICsrCiBzeXNkZXBzL3VuaXgvc3lzdi9saW51 eC9jbG9uZTMuYyAgICAgICAgICB8ICAzMSArKysrKysrCiBzeXNkZXBzL3VuaXgvc3lzdi9saW51 eC9jcmVhdGV0aHJlYWQuYyAgICB8ICAyNCArKy0tLQogc3lzZGVwcy91bml4L3N5c3YvbGludXgv c3Bhd25pLmMgICAgICAgICAgfCAgMjYgKystLS0tCiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC90 c3QtYWxpZ24tY2xvbmUuYyB8ICAyMyArKystLQogc3lzZGVwcy91bml4L3N5c3YvbGludXgvdHN0 LWNsb25lLmMgICAgICAgfCAgMTIgKy0tCiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC90c3QtY2xv bmUyLmMgICAgICB8ICAyNSArKystLS0KIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3RzdC1jbG9u ZTMuYyAgICAgIHwgIDI4ICsrKy0tLQogc3lzZGVwcy91bml4L3N5c3YvbGludXgvdHN0LWdldHBp ZDEuYyAgICAgfCAgMjUgKysrLS0tCiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC94ODZfNjQvY2xv bmUzLlMgICB8IDEwNSArKysrKysrKysrKysrKysrKysrKysrCiAxOSBmaWxlcyBjaGFuZ2VkLCAz NTEgaW5zZXJ0aW9ucygrKSwgMTU4IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN5 c2RlcHMvZ2VuZXJpYy9jbG9uZS1pbnRlcm5hbC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVw cy91bml4L3N5c3YvbGludXgvY2xvbmUtaW50ZXJuYWwuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN5 c2RlcHMvdW5peC9zeXN2L2xpbnV4L2Nsb25lLW9mZnNldHMuc3ltCiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3lzZGVwcy91bml4L3N5c3YvbGludXgvY2xvbmUzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz eXNkZXBzL3VuaXgvc3lzdi9saW51eC94ODZfNjQvY2xvbmUzLlMKCmRpZmYgLS1naXQgYS9pbmNs dWRlL2xpYmMtcG9pbnRlci1hcml0aC5oIGIvaW5jbHVkZS9saWJjLXBvaW50ZXItYXJpdGguaApp bmRleCA3MmU3MjJjNWFhLi4wNGJhNTM3NjE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpYmMtcG9p bnRlci1hcml0aC5oCisrKyBiL2luY2x1ZGUvbGliYy1wb2ludGVyLWFyaXRoLmgKQEAgLTM3LDYg KzM3LDkgQEAKIC8qIENhc3QgYW4gaW50ZWdlciBvciBhIHBvaW50ZXIgVkFMIHRvIGludGVnZXIg d2l0aCBwcm9wZXIgdHlwZS4gICovCiAjIGRlZmluZSBjYXN0X3RvX2ludGVnZXIodmFsKSAoKF9f aW50ZWdlcl9pZl9wb2ludGVyX3R5cGUgKHZhbCkpICh2YWwpKQogCisvKiBDYXN0IGFuIGludGVn ZXIgVkFMIHRvIHZvaWQgKiBwb2ludGVyLiAgKi8KKyMgZGVmaW5lIGNhc3RfdG9fcG9pbnRlcih2 YWwpICgodm9pZCAqKSAodWludHB0cl90KSAodmFsKSkKKwogLyogQWxpZ24gYSB2YWx1ZSBieSBy b3VuZGluZyBkb3duIHRvIGNsb3Nlc3Qgc2l6ZS4KICAgIGUuZy4gVXNpbmcgc2l6ZSBvZiA0MDk2 LCB3ZSBnZXQgdGhpcyBiZWhhdmlvcjoKIAl7NDA5NSwgNDA5NiwgNDA5N30gPSB7MCwgNDA5Niwg NDA5Nn0uICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY2hlZC5oIGIvaW5jbHVkZS9zY2hlZC5o CmluZGV4IGIwYmY5NzFjOTMuLjI4ZGQ5OWE1NzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NoZWQu aAorKysgYi9pbmNsdWRlL3NjaGVkLmgKQEAgLTMyLDUgKzMyLDggQEAgbGliY19oaWRkZW5fcHJv dG8gKF9fY2xvbmUyKQogICAgYW5kIEh1cmQgZG9lc24ndCBoYXZlIGl0LiAgKi8KIGV4dGVybiBp bnQgX19nZXRjcHUgKHVuc2lnbmVkIGludCAqLCB1bnNpZ25lZCBpbnQgKik7CiBsaWJjX2hpZGRl bl9wcm90byAoX19nZXRjcHUpCisKKyMgaW5jbHVkZSA8Y2xvbmUtaW50ZXJuYWwuaD4KK2xpYmNf aGlkZGVuX3Byb3RvIChfX2Nsb25lX2ludGVybmFsKQogI2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdp dCBhL25wdGwvYWxsb2NhdGVzdGFjay5jIGIvbnB0bC9hbGxvY2F0ZXN0YWNrLmMKaW5kZXggMTQ5 Yjk5OTYwMy4uNzNjN2YzM2EwMCAxMDA2NDQKLS0tIGEvbnB0bC9hbGxvY2F0ZXN0YWNrLmMKKysr IGIvbnB0bC9hbGxvY2F0ZXN0YWNrLmMKQEAgLTM0LDQ3ICszNCw2IEBACiAjaW5jbHVkZSA8c3Rh Y2stYWxpYXNpbmcuaD4KIAogCi0jaWZuZGVmIE5FRURfU0VQQVJBVEVfUkVHSVNURVJfU1RBQ0sK LQotLyogTW9zdCBhcmNoaXRlY3R1cmVzIGhhdmUgZXhhY3RseSBvbmUgc3RhY2sgcG9pbnRlci4g IFNvbWUgaGF2ZSBtb3JlLiAgKi8KLSMgZGVmaW5lIFNUQUNLX1ZBUklBQkxFUyB2b2lkICpzdGFj a2FkZHIgPSBOVUxMCi0KLS8qIEhvdyB0byBwYXNzIHRoZSB2YWx1ZXMgdG8gdGhlICdjcmVhdGVf dGhyZWFkJyBmdW5jdGlvbi4gICovCi0jIGRlZmluZSBTVEFDS19WQVJJQUJMRVNfQVJHUyBzdGFj a2FkZHIKLQotLyogSG93IHRvIGRlY2xhcmUgZnVuY3Rpb24gd2hpY2ggZ2V0cyB0aGVyZSBwYXJh bWV0ZXJzLiAgKi8KLSMgZGVmaW5lIFNUQUNLX1ZBUklBQkxFU19QQVJNUyB2b2lkICpzdGFja2Fk ZHIKLQotLyogSG93IHRvIGRlY2xhcmUgYWxsb2NhdGVfc3RhY2suICAqLwotIyBkZWZpbmUgQUxM T0NBVEVfU1RBQ0tfUEFSTVMgdm9pZCAqKnN0YWNrCi0KLS8qIFRoaXMgaXMgaG93IHRoZSBmdW5j dGlvbiBpcyBjYWxsZWQuICBXZSBkbyBpdCB0aGlzIHdheSB0byBhbGxvdwotICAgb3RoZXIgdmFy aWFudHMgb2YgdGhlIGZ1bmN0aW9uIHRvIGhhdmUgbW9yZSBwYXJhbWV0ZXJzLiAgKi8KLSMgZGVm aW5lIEFMTE9DQVRFX1NUQUNLKGF0dHIsIHBkKSBhbGxvY2F0ZV9zdGFjayAoYXR0ciwgcGQsICZz dGFja2FkZHIpCi0KLSNlbHNlCi0KLS8qIFdlIG5lZWQgdHdvIHN0YWNrcy4gIFRoZSBrZXJuZWwg d2lsbCBwbGFjZSB0aGVtIGJ1dCB3ZSBoYXZlIHRvIHRlbGwKLSAgIHRoZSBrZXJuZWwgYWJvdXQg dGhlIHNpemUgb2YgdGhlIHJlc2VydmVkIGFkZHJlc3Mgc3BhY2UuICAqLwotIyBkZWZpbmUgU1RB Q0tfVkFSSUFCTEVTIHZvaWQgKnN0YWNrYWRkciA9IE5VTEw7IHNpemVfdCBzdGFja3NpemUgPSAw Ci0KLS8qIEhvdyB0byBwYXNzIHRoZSB2YWx1ZXMgdG8gdGhlICdjcmVhdGVfdGhyZWFkJyBmdW5j dGlvbi4gICovCi0jIGRlZmluZSBTVEFDS19WQVJJQUJMRVNfQVJHUyBzdGFja2FkZHIsIHN0YWNr c2l6ZQotCi0vKiBIb3cgdG8gZGVjbGFyZSBmdW5jdGlvbiB3aGljaCBnZXRzIHRoZXJlIHBhcmFt ZXRlcnMuICAqLwotIyBkZWZpbmUgU1RBQ0tfVkFSSUFCTEVTX1BBUk1TIHZvaWQgKnN0YWNrYWRk ciwgc2l6ZV90IHN0YWNrc2l6ZQotCi0vKiBIb3cgdG8gZGVjbGFyZSBhbGxvY2F0ZV9zdGFjay4g ICovCi0jIGRlZmluZSBBTExPQ0FURV9TVEFDS19QQVJNUyB2b2lkICoqc3RhY2ssIHNpemVfdCAq c3RhY2tzaXplCi0KLS8qIFRoaXMgaXMgaG93IHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuICBXZSBk byBpdCB0aGlzIHdheSB0byBhbGxvdwotICAgb3RoZXIgdmFyaWFudHMgb2YgdGhlIGZ1bmN0aW9u IHRvIGhhdmUgbW9yZSBwYXJhbWV0ZXJzLiAgKi8KLSMgZGVmaW5lIEFMTE9DQVRFX1NUQUNLKGF0 dHIsIHBkKSBcCi0gIGFsbG9jYXRlX3N0YWNrIChhdHRyLCBwZCwgJnN0YWNrYWRkciwgJnN0YWNr c2l6ZSkKLQotI2VuZGlmCi0KLQogLyogRGVmYXVsdCBhbGlnbm1lbnQgb2Ygc3RhY2suICAqLwog I2lmbmRlZiBTVEFDS19BTElHTgogIyBkZWZpbmUgU1RBQ0tfQUxJR04gX19hbGlnbm9mX18gKGxv bmcgZG91YmxlKQpAQCAtMzk5LDcgKzM1OCw3IEBAIGFkdmlzZV9zdGFja19yYW5nZSAodm9pZCAq bWVtLCBzaXplX3Qgc2l6ZSwgdWludHB0cl90IHBkLCBzaXplX3QgZ3VhcmRzaXplKQogICAgUERQ IG11c3QgYmUgbm9uLU5VTEwuICAqLwogc3RhdGljIGludAogYWxsb2NhdGVfc3RhY2sgKGNvbnN0 IHN0cnVjdCBwdGhyZWFkX2F0dHIgKmF0dHIsIHN0cnVjdCBwdGhyZWFkICoqcGRwLAotCQlBTExP Q0FURV9TVEFDS19QQVJNUykKKwkJdm9pZCAqKnN0YWNrLCBzaXplX3QgKnN0YWNrc2l6ZSkKIHsK ICAgc3RydWN0IHB0aHJlYWQgKnBkOwogICBzaXplX3Qgc2l6ZTsKQEAgLTc2MCwyNSArNzE5LDE3 IEBAIGFsbG9jYXRlX3N0YWNrIChjb25zdCBzdHJ1Y3QgcHRocmVhZF9hdHRyICphdHRyLCBzdHJ1 Y3QgcHRocmVhZCAqKnBkcCwKICAgLyogV2UgcGxhY2UgdGhlIHRocmVhZCBkZXNjcmlwdG9yIGF0 IHRoZSBlbmQgb2YgdGhlIHN0YWNrLiAgKi8KICAgKnBkcCA9IHBkOwogCi0jaWYgX1NUQUNLX0dS T1dTX0RPV04KICAgdm9pZCAqc3RhY2t0b3A7CiAKLSMgaWYgVExTX1RDQl9BVF9UUAorI2lmIFRM U19UQ0JfQVRfVFAKICAgLyogVGhlIHN0YWNrIGJlZ2lucyBiZWZvcmUgdGhlIFRDQiBhbmQgdGhl IHN0YXRpYyBUTFMgYmxvY2suICAqLwogICBzdGFja3RvcCA9ICgoY2hhciAqKSAocGQgKyAxKSAt IF9fc3RhdGljX3Rsc19zaXplKTsKLSMgZWxpZiBUTFNfRFRWX0FUX1RQCisjZWxpZiBUTFNfRFRW X0FUX1RQCiAgIHN0YWNrdG9wID0gKGNoYXIgKikgKHBkIC0gMSk7Ci0jIGVuZGlmCisjZW5kaWYK IAotIyBpZmRlZiBORUVEX1NFUEFSQVRFX1JFR0lTVEVSX1NUQUNLCi0gICpzdGFjayA9IHBkLT5z dGFja2Jsb2NrOwotICAqc3RhY2tzaXplID0gc3RhY2t0b3AgLSAqc3RhY2s7Ci0jIGVsc2UKLSAg KnN0YWNrID0gc3RhY2t0b3A7Ci0jIGVuZGlmCi0jZWxzZQorICAqc3RhY2tzaXplID0gc3RhY2t0 b3AgLSBwZC0+c3RhY2tibG9jazsKICAgKnN0YWNrID0gcGQtPnN0YWNrYmxvY2s7Ci0jZW5kaWYK IAogICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25wdGwvY3JlYXRldGhyZWFkLmMgYi9ucHRs L2NyZWF0ZXRocmVhZC5jCmluZGV4IDQ2OTQzYjMzZmUuLjJhYzgzMTExZWMgMTAwNjQ0Ci0tLSBh L25wdGwvY3JlYXRldGhyZWFkLmMKKysrIGIvbnB0bC9jcmVhdGV0aHJlYWQuYwpAQCAtMjUsNyAr MjUsOCBAQAogCiBzdGF0aWMgaW50CiBjcmVhdGVfdGhyZWFkIChzdHJ1Y3QgcHRocmVhZCAqcGQs IGNvbnN0IHN0cnVjdCBwdGhyZWFkX2F0dHIgKmF0dHIsCi0JICAgICAgIGJvb2wgKnN0b3BwZWRf c3RhcnQsIFNUQUNLX1ZBUklBQkxFU19QQVJNUywgYm9vbCAqdGhyZWFkX3JhbikKKwkgICAgICAg Ym9vbCAqc3RvcHBlZF9zdGFydCwgdm9pZCAqc3RhY2thZGRyLCBzaXplX3Qgc3RhY2tzaXplLAor CSAgICAgICBib29sICp0aHJlYWRfcmFuKQogewogICAvKiBJZiB0aGUgaW1wbGVtZW50YXRpb24g bmVlZHMgdG8gZG8gc29tZSB0d2Vha3MgdG8gdGhlIHRocmVhZCBhZnRlcgogICAgICBpdCBoYXMg YmVlbiBjcmVhdGVkIGF0IHRoZSBPUyBsZXZlbCwgaXQgY2FuIHNldCBTVE9QUEVEX1NUQVJUIGhl cmUuICAqLwpkaWZmIC0tZ2l0IGEvbnB0bC9wdGhyZWFkX2NyZWF0ZS5jIGIvbnB0bC9wdGhyZWFk X2NyZWF0ZS5jCmluZGV4IDZjNjQ1YWZmNDguLjJjYzNkMjU2OTcgMTAwNjQ0Ci0tLSBhL25wdGwv cHRocmVhZF9jcmVhdGUuYworKysgYi9ucHRsL3B0aHJlYWRfY3JlYXRlLmMKQEAgLTIwMSw4ICsy MDEsOCBAQCB1bnNpZ25lZCBpbnQgX19ucHRsX250aHJlYWRzID0gMTsKICAgIGJlIHNldCB0byB0 cnVlIGlmZiB0aGUgdGhyZWFkIGFjdHVhbGx5IHN0YXJ0ZWQgdXAgYW5kIHRoZW4gZ290CiAgICBj YW5jZWxlZCBiZWZvcmUgY2FsbGluZyB1c2VyIGNvZGUgKCpQRC0+c3RhcnRfcm91dGluZSkuICAq Lwogc3RhdGljIGludCBjcmVhdGVfdGhyZWFkIChzdHJ1Y3QgcHRocmVhZCAqcGQsIGNvbnN0IHN0 cnVjdCBwdGhyZWFkX2F0dHIgKmF0dHIsCi0JCQkgIGJvb2wgKnN0b3BwZWRfc3RhcnQsIFNUQUNL X1ZBUklBQkxFU19QQVJNUywKLQkJCSAgYm9vbCAqdGhyZWFkX3Jhbik7CisJCQkgIGJvb2wgKnN0 b3BwZWRfc3RhcnQsIHZvaWQgKnN0YWNrYWRkciwKKwkJCSAgc2l6ZV90IHN0YWNrc2l6ZSwgYm9v bCAqdGhyZWFkX3Jhbik7CiAKICNpbmNsdWRlIDxjcmVhdGV0aHJlYWQuYz4KIApAQCAtNjIxLDcg KzYyMSw4IEBAIGludAogX19wdGhyZWFkX2NyZWF0ZV8yXzEgKHB0aHJlYWRfdCAqbmV3dGhyZWFk LCBjb25zdCBwdGhyZWFkX2F0dHJfdCAqYXR0ciwKIAkJICAgICAgdm9pZCAqKCpzdGFydF9yb3V0 aW5lKSAodm9pZCAqKSwgdm9pZCAqYXJnKQogewotICBTVEFDS19WQVJJQUJMRVM7CisgIHZvaWQg KnN0YWNrYWRkciA9IE5VTEw7CisgIHNpemVfdCBzdGFja3NpemUgPSAwOwogCiAgIC8qIEF2b2lk IGEgZGF0YSByYWNlIGluIHRoZSBtdWx0aS10aHJlYWRlZCBjYXNlLiAgKi8KICAgaWYgKF9fbGli Y19zaW5nbGVfdGhyZWFkZWQpCkBAIC02NDEsNyArNjQyLDcgQEAgX19wdGhyZWFkX2NyZWF0ZV8y XzEgKHB0aHJlYWRfdCAqbmV3dGhyZWFkLCBjb25zdCBwdGhyZWFkX2F0dHJfdCAqYXR0ciwKICAg ICB9CiAKICAgc3RydWN0IHB0aHJlYWQgKnBkID0gTlVMTDsKLSAgaW50IGVyciA9IEFMTE9DQVRF X1NUQUNLIChpYXR0ciwgJnBkKTsKKyAgaW50IGVyciA9IGFsbG9jYXRlX3N0YWNrIChpYXR0ciwg JnBkLCAmc3RhY2thZGRyLCAmc3RhY2tzaXplKTsKICAgaW50IHJldHZhbCA9IDA7CiAKICAgaWYg KF9fZ2xpYmNfdW5saWtlbHkgKGVyciAhPSAwKSkKQEAgLTc4Niw4ICs3ODcsOCBAQCBfX3B0aHJl YWRfY3JlYXRlXzJfMSAocHRocmVhZF90ICpuZXd0aHJlYWQsIGNvbnN0IHB0aHJlYWRfYXR0cl90 ICphdHRyLAogCiAgICAgICAvKiBXZSBhbHdheXMgY3JlYXRlIHRoZSB0aHJlYWQgc3RvcHBlZCBh dCBzdGFydHVwIHNvIHdlIGNhbgogCSBub3RpZnkgdGhlIGRlYnVnZ2VyLiAgKi8KLSAgICAgIHJl dHZhbCA9IGNyZWF0ZV90aHJlYWQgKHBkLCBpYXR0ciwgJnN0b3BwZWRfc3RhcnQsCi0JCQkgICAg ICBTVEFDS19WQVJJQUJMRVNfQVJHUywgJnRocmVhZF9yYW4pOworICAgICAgcmV0dmFsID0gY3Jl YXRlX3RocmVhZCAocGQsIGlhdHRyLCAmc3RvcHBlZF9zdGFydCwgc3RhY2thZGRyLAorCQkJICAg ICAgc3RhY2tzaXplLCAmdGhyZWFkX3Jhbik7CiAgICAgICBpZiAocmV0dmFsID09IDApCiAJewog CSAgLyogV2UgcmV0YWluIG93bmVyc2hpcCBvZiBQRCB1bnRpbCAoYSkgKHNlZSBDT05DVVJSRU5D WSBOT1RFUwpAQCAtODE4LDggKzgxOSw4IEBAIF9fcHRocmVhZF9jcmVhdGVfMl8xIChwdGhyZWFk X3QgKm5ld3RocmVhZCwgY29uc3QgcHRocmVhZF9hdHRyX3QgKmF0dHIsCiAJfQogICAgIH0KICAg ZWxzZQotICAgIHJldHZhbCA9IGNyZWF0ZV90aHJlYWQgKHBkLCBpYXR0ciwgJnN0b3BwZWRfc3Rh cnQsCi0JCQkgICAgU1RBQ0tfVkFSSUFCTEVTX0FSR1MsICZ0aHJlYWRfcmFuKTsKKyAgICByZXR2 YWwgPSBjcmVhdGVfdGhyZWFkIChwZCwgaWF0dHIsICZzdG9wcGVkX3N0YXJ0LCBzdGFja2FkZHIs CisJCQkgICAgc3RhY2tzaXplLCAmdGhyZWFkX3Jhbik7CiAKICAgLyogUmV0dXJuIHRvIHRoZSBw cmV2aW91cyBzaWduYWwgbWFzaywgYWZ0ZXIgY3JlYXRpbmcgdGhlIG5ldwogICAgICB0aHJlYWQu ICAqLwpkaWZmIC0tZ2l0IGEvc3lzZGVwcy9nZW5lcmljL2Nsb25lLWludGVybmFsLmggYi9zeXNk ZXBzL2dlbmVyaWMvY2xvbmUtaW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwLi4xYzFmOTk3Y2E1Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzZGVwcy9nZW5lcmlj L2Nsb25lLWludGVybmFsLmgKQEAgLTAsMCArMSw0OSBAQAorLyogVGhlIGludGVybmFsIHdyYXBw ZXIgb2YgY2xvbmUgYW5kIGNsb25lMy4KKyAgIENvcHlyaWdodCAoQykgMjAyMSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBM aWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2Yg dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg IFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2Ug YWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeS4gIElmIG5vdCwgc2VlCisgICA8aHR0cHM6Ly93 d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1 ZGUgPHN0ZGRlZi5oPgorCitzdHJ1Y3QgY2xvbmVfYXJncworeworICB1aW50NjRfdCBmbGFnczsJ IC8qIEZsYWdzIGJpdCBtYXNrLiAgKi8KKyAgdWludDY0X3QgcGlkZmQ7CSAvKiBXaGVyZSB0byBz dG9yZSBQSUQgZmlsZSBkZXNjcmlwdG9yCisJCQkgICAgKHBpZF90ICopLiAgKi8KKyAgdWludDY0 X3QgY2hpbGRfdGlkOwkgLyogV2hlcmUgdG8gc3RvcmUgY2hpbGQgVElELCBpbiBjaGlsZCdzIG1l bW9yeQorCQkJICAgIChwaWRfdCAqKS4gICovCisgIHVpbnQ2NF90IHBhcmVudF90aWQ7CSAvKiBX aGVyZSB0byBzdG9yZSBjaGlsZCBUSUQsIGluIHBhcmVudCdzIG1lbW9yeQorCQkJICAgIChpbnQg KikuICovCisgIHVpbnQ2NF90IGV4aXRfc2lnbmFsOwkgLyogU2lnbmFsIHRvIGRlbGl2ZXIgdG8g cGFyZW50IG9uIGNoaWxkCisJCQkgICAgdGVybWluYXRpb24gKi8KKyAgdWludDY0X3Qgc3RhY2s7 CSAvKiBUaGUgbG93ZXN0IGFkZHJlc3Mgb2Ygc3RhY2suICAqLworICB1aW50NjRfdCBzdGFja19z aXplOwkgLyogU2l6ZSBvZiBzdGFjay4gICovCisgIHVpbnQ2NF90IHRsczsJCSAvKiBMb2NhdGlv biBvZiBuZXcgVExTLiAgKi8KKyAgdWludDY0X3Qgc2V0X3RpZDsJIC8qIFBvaW50ZXIgdG8gYSBw aWRfdCBhcnJheQorCQkJICAgIChzaW5jZSBMaW51eCA1LjUpLiAgKi8KKyAgdWludDY0X3Qgc2V0 X3RpZF9zaXplOyAvKiBOdW1iZXIgb2YgZWxlbWVudHMgaW4gc2V0X3RpZAorCQkJICAgIChzaW5j ZSBMaW51eCA1LjUpLiAqLworICB1aW50NjRfdCBjZ3JvdXA7CSAvKiBGaWxlIGRlc2NyaXB0b3Ig Zm9yIHRhcmdldCBjZ3JvdXAKKwkJCSAgICBvZiBjaGlsZCAoc2luY2UgTGludXggNS43KS4gICov Cit9OworCitleHRlcm4gaW50IF9fY2xvbmUzIChzdHJ1Y3QgY2xvbmVfYXJncyAqY2xfYXJncywg c2l6ZV90IHNpemUsCisJCSAgICAgaW50ICgqX19mbikgKHZvaWQgKl9fYXJnKSwgdm9pZCAqX19h cmcpCisgIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsKKworLyogVGhl IGludGVybmFsIHdyYXBwZXIgb2YgY2xvbmUgYW5kIGNsb25lMy4gICovCitleHRlcm4gX190eXBl b2YgKF9fY2xvbmUzKSBfX2Nsb25lX2ludGVybmFsOwpkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4 L3N5c3YvbGludXgvTWFrZWZpbGUgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9NYWtlZmlsZQpp bmRleCA1MWUyOGI5N2FjLi40OTlmMjQzNWViIDEwMDY0NAotLS0gYS9zeXNkZXBzL3VuaXgvc3lz di9saW51eC9NYWtlZmlsZQorKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9NYWtlZmlsZQpA QCAtNTQsNiArNTQsOCBAQCBDRkxBR1MtbWFsbG9jLmMgKz0gLURNT1JFQ09SRV9DTEVBUlM9Mgog ZW5kaWYKIAogaWZlcSAoJChzdWJkaXIpLG1pc2MpCitnZW4tYXMtY29uc3QtaGVhZGVycyArPSBj bG9uZS1vZmZzZXRzLnN5bQorCiBzeXNkZXBfcm91dGluZXMgKz0gYWRqdGltZXggY2xvbmUgdW1v dW50IHVtb3VudDIgcmVhZGFoZWFkIHN5c2N0bCBcCiAJCSAgIHNldGZzdWlkIHNldGZzZ2lkIGVw b2xsX3B3YWl0IHNpZ25hbGZkIFwKIAkJICAgZXZlbnRmZCBldmVudGZkX3JlYWQgZXZlbnRmZF93 cml0ZSBwcmxpbWl0IFwKQEAgLTY0LDcgKzY2LDcgQEAgc3lzZGVwX3JvdXRpbmVzICs9IGFkanRp bWV4IGNsb25lIHVtb3VudCB1bW91bnQyIHJlYWRhaGVhZCBzeXNjdGwgXAogCQkgICB0aW1lNjQt c3VwcG9ydCBwc2VsZWN0MzIgXAogCQkgICB4c3RhdCBmeHN0YXQgbHhzdGF0IHhzdGF0NjQgZnhz dGF0NjQgbHhzdGF0NjQgXAogCQkgICBmeHN0YXRhdCBmeHN0YXRhdDY0IFwKLQkJICAgeG1rbm9k IHhta25vZGF0CisJCSAgIHhta25vZCB4bWtub2RhdCBjbG9uZTMgY2xvbmUtaW50ZXJuYWwKIAog Q0ZMQUdTLWdldGhvc3RpZC5jID0gLWZleGNlcHRpb25zCiBDRkxBR1MtdGVlLmMgPSAtZmV4Y2Vw dGlvbnMgLWZhc3luY2hyb25vdXMtdW53aW5kLXRhYmxlcwpkaWZmIC0tZ2l0IGEvc3lzZGVwcy91 bml4L3N5c3YvbGludXgvVmVyc2lvbnMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9WZXJzaW9u cwppbmRleCBjMzVmNzgzZTJhLi45YmIxM2Q1OTNmIDEwMDY0NAotLS0gYS9zeXNkZXBzL3VuaXgv c3lzdi9saW51eC9WZXJzaW9ucworKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9WZXJzaW9u cwpAQCAtMTc5LDUgKzE3OSw2IEBAIGxpYmMgewogICAgIF9fc2lndGltZWR3YWl0OwogICAgICMg ZnVuY3Rpb25zIHVzZWQgYnkgbnNjZAogICAgIF9fbmV0bGlua19hc3NlcnRfcmVzcG9uc2U7Cisg ICAgX19jbG9uZV9pbnRlcm5hbDsKICAgfQogfQpkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5 c3YvbGludXgvY2xvbmUtaW50ZXJuYWwuYyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2Nsb25l LWludGVybmFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZmQ5OTI5 YjZkZgotLS0gL2Rldi9udWxsCisrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2Nsb25lLWlu dGVybmFsLmMKQEAgLTAsMCArMSw2MiBAQAorLyogVGhlIGludGVybmFsIHdyYXBwZXIgb2YgY2xv bmUgYW5kIGNsb25lMy4gIExpbnV4IHZlcnNpb24uCisgICBDb3B5cmlnaHQgKEMpIDIwMjEgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg R05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24g Mi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBM aWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnkuICBJZiBub3QsIHNlZQorICAgPGh0 dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRlIDxlcnJuby5oPgor I2luY2x1ZGUgPHNjaGVkLmg+CisjaW5jbHVkZSA8bGliYy1wb2ludGVyLWFyaXRoLmg+CS8qIEZv ciBjYXN0X3RvX3BvaW50ZXIuICAqLworI2luY2x1ZGUgPHN0YWNraW5mby5oPgkJLyogRm9yIF9T VEFDS19HUk9XU197VVAsRE9XTn0uICAqLworCitpbnQKK19fY2xvbmVfaW50ZXJuYWwgKHN0cnVj dCBjbG9uZV9hcmdzICpjbF9hcmdzLCBzaXplX3Qgc2l6ZSwKKwkJICBpbnQgKCpmbikodm9pZCAq YXJnKSwgdm9pZCAqYXJnKQoreworICAvKiBUcnkgY2xvbmUzIGZpcnN0LiAgKi8KKyAgaW50IHJl dCA9IF9fY2xvbmUzIChjbF9hcmdzLCBzaXplLCBmbiwgYXJnKTsKKyAgaWYgKHJldCA9PSAtMSAm JiBlcnJubyA9PSBFTk9TWVMpCisgICAgeworICAgICAgLyogTkI6IE11c3QgY2xlYXIgZXJybm8g c2luY2UgZXJybm8gbWF5IGJlIGNoZWNrZWQgYWdhaW5zdCBub24temVybworICAgICAgICAgcmV0 dXJuIHZhbHVlLiAgKi8KKyAgICAgIF9fc2V0X2Vycm5vICgwKTsKKyAgICAgIC8qIE1hcCBjbG9u ZTMgYXJndW1lbnRzIHRvIGNsb25lIGFyZ3VtZW50cy4gICovCisgICAgICBpbnQgZmxhZ3MgPSBj bF9hcmdzLT5mbGFncyB8IGNsX2FyZ3MtPmV4aXRfc2lnbmFsOworICAgICAgdm9pZCAqc3RhY2sg PSBjYXN0X3RvX3BvaW50ZXIgKGNsX2FyZ3MtPnN0YWNrKTsKKworI2lmZGVmIF9faWE2NF9fCisg ICAgICByZXQgPSBfX2Nsb25lMiAoZm4sIHN0YWNrLCAoc2l6ZV90KSBjbF9hcmdzLT5zdGFja19z aXplLAorCQkgICAgICBmbGFncywgYXJnLAorCQkgICAgICBjYXN0X3RvX3BvaW50ZXIgKGNsX2Fy Z3MtPnBhcmVudF90aWQpLAorCQkgICAgICBjYXN0X3RvX3BvaW50ZXIgKGNsX2FyZ3MtPnRscyks CisJCSAgICAgIGNhc3RfdG9fcG9pbnRlciAoY2xfYXJncy0+Y2hpbGRfdGlkKSk7CisjZWxzZQor IyBpZiAhX1NUQUNLX0dST1dTX0RPV04gJiYgIV9TVEFDS19HUk9XU19VUAorIyAgZXJyb3IgIkRl ZmluZSBlaXRoZXIgX1NUQUNLX0dST1dTX0RPV04gb3IgX1NUQUNLX0dST1dTX1VQIgorIyBlbmRp ZgorCisjIGlmIF9TVEFDS19HUk9XU19ET1dOCisgICAgICBzdGFjayArPSBjbF9hcmdzLT5zdGFj a19zaXplOworIyBlbmRpZgorICAgICAgcmV0ID0gX19jbG9uZSAoZm4sIHN0YWNrLCBmbGFncywg YXJnLAorCQkgICAgICh2b2lkICopICh1aW50cHRyX3QpIGNsX2FyZ3MtPnBhcmVudF90aWQsCisJ CSAgICAgKHZvaWQgKikgKHVpbnRwdHJfdCkgY2xfYXJncy0+dGxzLAorCQkgICAgICh2b2lkICop ICh1aW50cHRyX3QpIGNsX2FyZ3MtPmNoaWxkX3RpZCk7CisjZW5kaWYKKyAgICB9CisgIHJldHVy biByZXQ7Cit9CisKK2xpYmNfaGlkZGVuX2RlZiAoX19jbG9uZV9pbnRlcm5hbCkKZGlmZiAtLWdp dCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2Nsb25lLW9mZnNldHMuc3ltIGIvc3lzZGVwcy91 bml4L3N5c3YvbGludXgvY2xvbmUtb2Zmc2V0cy5zeW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMC4uMzhkNDQ3YmNmMwotLS0gL2Rldi9udWxsCisrKyBiL3N5c2RlcHMvdW5p eC9zeXN2L2xpbnV4L2Nsb25lLW9mZnNldHMuc3ltCkBAIC0wLDAgKzEsOSBAQAorI2luY2x1ZGUg PHN0ZGRlZi5oPgorI2luY2x1ZGUgPHNjaGVkLmg+CisKKy0tCisKKyNkZWZpbmUgY2xvbmVfYXJn c19vZmZzZXQobWVtYmVyKSBvZmZzZXRvZiAoc3RydWN0IGNsb25lX2FyZ3MsIG1lbWJlcikKKwor Q0xPTkVfQVJHU19TVEFDS19PRkZTRVQJCWNsb25lX2FyZ3Nfb2Zmc2V0KHN0YWNrKQorQ0xPTkVf QVJHU19TVEFDS19TSVpFX09GRlNFVAljbG9uZV9hcmdzX29mZnNldChzdGFja19zaXplKQpkaWZm IC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvY2xvbmUzLmMgYi9zeXNkZXBzL3VuaXgv c3lzdi9saW51eC9jbG9uZTMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li5jN2Q4OGU3YWY3Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgv Y2xvbmUzLmMKQEAgLTAsMCArMSwzMSBAQAorLyogVGhlIGNsb25lMyBzeXNjYWxsIHdyYXBwZXIu ICBMaW51eCB2ZXJzaW9uLgorICAgQ29weXJpZ2h0IChDKSAyMDIxIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnku CisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGlj ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdO VSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3 aXRoIHRoZSBHTlUgQyBMaWJyYXJ5LiAgSWYgbm90LCBzZWUKKyAgIDxodHRwczovL3d3dy5nbnUu b3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzY2hl ZC5oPgorCitpbnQKK19fY2xvbmUzIChzdHJ1Y3QgY2xvbmVfYXJncyAqY2xfYXJncywgc2l6ZV90 IHNpemUsCisJICBpbnQgKCpmbikodm9pZCAqYXJnKSwgdm9pZCAqYXJnKQoreworICBpZiAoY2xf YXJncyA9PSBOVUxMIHx8IGZuID09IE5VTEwpCisgICAgX19zZXRfZXJybm8gKEVJTlZBTCk7Cisg IGVsc2UKKyAgICBfX3NldF9lcnJubyAoRU5PU1lTKTsKKyAgcmV0dXJuIC0xOworfQpkaWZmIC0t Z2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvY3JlYXRldGhyZWFkLmMgYi9zeXNkZXBzL3Vu aXgvc3lzdi9saW51eC9jcmVhdGV0aHJlYWQuYwppbmRleCBiYzM0MDliMzI2Li41OTljMTcyZGU4 IDEwMDY0NAotLS0gYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9jcmVhdGV0aHJlYWQuYworKysg Yi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9jcmVhdGV0aHJlYWQuYwpAQCAtMjgsMTIgKzI4LDYg QEAKIAogI2luY2x1ZGUgPGFyY2gtZm9yay5oPgogCi0jaWZkZWYgX19OUl9jbG9uZTIKLSMgZGVm aW5lIEFSQ0hfQ0xPTkUgX19jbG9uZTIKLSNlbHNlCi0jIGRlZmluZSBBUkNIX0NMT05FIF9fY2xv bmUKLSNlbmRpZgotCiAvKiBTZWUgdGhlIGNvbW1lbnRzIGluIHB0aHJlYWRfY3JlYXRlLmMgZm9y IHRoZSByZXF1aXJlbWVudHMgZm9yIHRoZXNlCiAgICB0d28gbWFjcm9zIGFuZCB0aGUgY3JlYXRl X3RocmVhZCBmdW5jdGlvbi4gICovCiAKQEAgLTQ3LDcgKzQxLDggQEAgc3RhdGljIGludCBzdGFy dF90aHJlYWQgKHZvaWQgKmFyZykgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSk7CiAKIHN0YXRp YyBpbnQKIGNyZWF0ZV90aHJlYWQgKHN0cnVjdCBwdGhyZWFkICpwZCwgY29uc3Qgc3RydWN0IHB0 aHJlYWRfYXR0ciAqYXR0ciwKLQkgICAgICAgYm9vbCAqc3RvcHBlZF9zdGFydCwgU1RBQ0tfVkFS SUFCTEVTX1BBUk1TLCBib29sICp0aHJlYWRfcmFuKQorCSAgICAgICBib29sICpzdG9wcGVkX3N0 YXJ0LCB2b2lkICpzdGFja2FkZHIsIHNpemVfdCBzdGFja3NpemUsCisJICAgICAgIGJvb2wgKnRo cmVhZF9yYW4pCiB7CiAgIC8qIERldGVybWluZSB3aGV0aGVyIHRoZSBuZXdseSBjcmVhdGVkIHRo cmVhZHMgaGFzIHRvIGJlIHN0YXJ0ZWQKICAgICAgc3RvcHBlZCBzaW5jZSB3ZSBoYXZlIHRvIHNl dCB0aGUgc2NoZWR1bGluZyBwYXJhbWV0ZXJzIG9yIHNldCB0aGUKQEAgLTEwMCw5ICs5NSwxOCBA QCBjcmVhdGVfdGhyZWFkIChzdHJ1Y3QgcHRocmVhZCAqcGQsIGNvbnN0IHN0cnVjdCBwdGhyZWFk X2F0dHIgKmF0dHIsCiAKICAgVExTX0RFRklORV9JTklUX1RQICh0cCwgcGQpOwogCi0gIGlmIChf X2dsaWJjX3VubGlrZWx5IChBUkNIX0NMT05FICgmc3RhcnRfdGhyZWFkLCBTVEFDS19WQVJJQUJM RVNfQVJHUywKLQkJCQkgICAgY2xvbmVfZmxhZ3MsIHBkLCAmcGQtPnRpZCwgdHAsICZwZC0+dGlk KQotCQkJPT0gLTEpKQorICBzdHJ1Y3QgY2xvbmVfYXJncyBhcmdzID0KKyAgICB7CisgICAgICAu ZmxhZ3MgPSBjbG9uZV9mbGFncywKKyAgICAgIC5waWRmZCA9ICh1aW50cHRyX3QpICZwZC0+dGlk LAorICAgICAgLnBhcmVudF90aWQgPSAodWludHB0cl90KSAmcGQtPnRpZCwKKyAgICAgIC5jaGls ZF90aWQgPSAodWludHB0cl90KSAmcGQtPnRpZCwKKyAgICAgIC5zdGFjayA9ICh1aW50cHRyX3Qp IHN0YWNrYWRkciwKKyAgICAgIC5zdGFja19zaXplID0gc3RhY2tzaXplLAorICAgICAgLnRscyA9 ICh1aW50cHRyX3QpIHRwLAorICAgIH07CisgIGludCByZXQgPSBfX2Nsb25lX2ludGVybmFsICgm YXJncywgc2l6ZW9mIChhcmdzKSwgJnN0YXJ0X3RocmVhZCwgcGQpOworICBpZiAoX19nbGliY191 bmxpa2VseSAocmV0ID09IC0xKSkKICAgICByZXR1cm4gZXJybm87CiAKICAgLyogSXQncyBzdGFy dGVkIG5vdywgc28gaWYgd2UgZmFpbCBiZWxvdywgd2UnbGwgaGF2ZSB0byBjYW5jZWwgaXQKZGlm ZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NwYXduaS5jIGIvc3lzZGVwcy91bml4 L3N5c3YvbGludXgvc3Bhd25pLmMKaW5kZXggYjUzYjgxYjhmYy4uYzYzZTJiNjVmMSAxMDA2NDQK LS0tIGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc3Bhd25pLmMKKysrIGIvc3lzZGVwcy91bml4 L3N5c3YvbGludXgvc3Bhd25pLmMKQEAgLTU5LDIxICs1OSw2IEBACiAgICBub3JtYWwgcHJvZ3Jh bSBleGl0IHdpdGggdGhlIGV4aXQgY29kZSAxMjcuICAqLwogI2RlZmluZSBTUEFXTl9FUlJPUgkx MjcKIAotI2lmZGVmIF9faWE2NF9fCi0jIGRlZmluZSBDTE9ORShfX2ZuLCBfX3N0YWNrYmFzZSwg X19zdGFja3NpemUsIF9fZmxhZ3MsIF9fYXJncykgXAotICBfX2Nsb25lMiAoX19mbiwgX19zdGFj a2Jhc2UsIF9fc3RhY2tzaXplLCBfX2ZsYWdzLCBfX2FyZ3MsIDAsIDAsIDApCi0jZWxzZQotIyBk ZWZpbmUgQ0xPTkUoX19mbiwgX19zdGFjaywgX19zdGFja3NpemUsIF9fZmxhZ3MsIF9fYXJncykg XAotICBfX2Nsb25lIChfX2ZuLCBfX3N0YWNrLCBfX2ZsYWdzLCBfX2FyZ3MpCi0jZW5kaWYKLQot LyogU2luY2UgaWE2NCB3YW50cyB0aGUgc3RhY2tiYXNlIHcvY2xvbmUyLCByZS11c2UgdGhlIGdy b3dzLXVwIG1hY3JvLiAgKi8KLSNpZiBfU1RBQ0tfR1JPV1NfVVAgfHwgZGVmaW5lZCAoX19pYTY0 X18pCi0jIGRlZmluZSBTVEFDSyhfX3N0YWNrLCBfX3N0YWNrX3NpemUpIChfX3N0YWNrKQotI2Vs aWYgX1NUQUNLX0dST1dTX0RPV04KLSMgZGVmaW5lIFNUQUNLKF9fc3RhY2ssIF9fc3RhY2tfc2l6 ZSkgKF9fc3RhY2sgKyBfX3N0YWNrX3NpemUpCi0jZW5kaWYKLQogCiBzdHJ1Y3QgcG9zaXhfc3Bh d25fYXJncwogewpAQCAtMzc5LDggKzM2NCwxNSBAQCBfX3NwYXduaXggKHBpZF90ICogcGlkLCBj b25zdCBjaGFyICpmaWxlLAogICAgICBuZWVkIGZvciBDTE9ORV9TRVRUTFMuICBBbHRob3VnaCBw YXJlbnQgYW5kIGNoaWxkIHNoYXJlIHRoZSBzYW1lIFRMUwogICAgICBuYW1lc3BhY2UsIHRoZXJl IHdpbGwgYmUgbm8gY29uY3VycmVudCBhY2Nlc3MgZm9yIFRMUyB2YXJpYWJsZXMgKGVycm5vCiAg ICAgIGZvciBpbnN0YW5jZSkuICAqLwotICBuZXdfcGlkID0gQ0xPTkUgKF9fc3Bhd25pX2NoaWxk LCBTVEFDSyAoc3RhY2ssIHN0YWNrX3NpemUpLCBzdGFja19zaXplLAotCQkgICBDTE9ORV9WTSB8 IENMT05FX1ZGT1JLIHwgU0lHQ0hMRCwgJmFyZ3MpOworICBzdHJ1Y3QgY2xvbmVfYXJncyBjbG9u ZV9hcmdzID0KKyAgICB7CisgICAgICAuZmxhZ3MgPSBDTE9ORV9WTSB8IENMT05FX1ZGT1JLLAor ICAgICAgLmV4aXRfc2lnbmFsID0gU0lHQ0hMRCwKKyAgICAgIC5zdGFjayA9ICh1aW50cHRyX3Qp IHN0YWNrLAorICAgICAgLnN0YWNrX3NpemUgPSBzdGFja19zaXplLAorICAgIH07CisgIG5ld19w aWQgPSBfX2Nsb25lX2ludGVybmFsICgmY2xvbmVfYXJncywgc2l6ZW9mIChjbG9uZV9hcmdzKSwK KwkJCSAgICAgIF9fc3Bhd25pX2NoaWxkLCAmYXJncyk7CiAKICAgLyogSXQgbmVlZHMgdG8gY29s bGVjdCB0aGUgY2FzZSB3aGVyZSB0aGUgYXV4aWxpYXJ5IHByb2Nlc3Mgd2FzIGNyZWF0ZWQKICAg ICAgYnV0IGZhaWxlZCB0byBleGVjdXRlIHRoZSBmaWxlIChkdWUgZWl0aGVyIGFueSBwcmVwYXJh dGlvbiBzdGVwIG9yCmRpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC90c3QtYWxp Z24tY2xvbmUuYyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3RzdC1hbGlnbi1jbG9uZS5jCmlu ZGV4IDZhY2U2MWJhYzMuLjVmMDBiOGVlNGEgMTAwNjQ0Ci0tLSBhL3N5c2RlcHMvdW5peC9zeXN2 L2xpbnV4L3RzdC1hbGlnbi1jbG9uZS5jCisrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Rz dC1hbGlnbi1jbG9uZS5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8c3lzL3dhaXQuaD4K ICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDx0c3Qtc3RhY2stYWxpZ24uaD4KKyNpbmNs dWRlIDxjbG9uZS1pbnRlcm5hbC5oPgogI2luY2x1ZGUgPHN0YWNraW5mby5oPgogCiBzdGF0aWMg aW50CkBAIC00OSwyMSArNTAsMTcgQEAgZG9fdGVzdCAodm9pZCkKICAgICBvayA9IGZhbHNlOwog CiAjaWZkZWYgX19pYTY0X18KLSAgZXh0ZXJuIGludCBfX2Nsb25lMiAoaW50ICgqX19mbikgKHZv aWQgKl9fYXJnKSwgdm9pZCAqX19jaGlsZF9zdGFja19iYXNlLAotCQkgICAgICAgc2l6ZV90IF9f Y2hpbGRfc3RhY2tfc2l6ZSwgaW50IF9fZmxhZ3MsCi0JCSAgICAgICB2b2lkICpfX2FyZywgLi4u KTsKLSAgY2hhciBzdFsyNTYgKiAxMDI0XTsKLSAgcGlkX3QgcCA9IF9fY2xvbmUyIChmLCBzdCwg c2l6ZW9mIChzdCksIDAsIDApOworIyBkZWZpbmUgU1RBQ0tfU0laRSAyNTYgKiAxMDI0CiAjZWxz ZQotICBjaGFyIHN0WzEyOCAqIDEwMjRdIF9fYXR0cmlidXRlX18gKChhbGlnbmVkKSk7Ci0jIGlm IF9TVEFDS19HUk9XU19ET1dOCi0gIHBpZF90IHAgPSBjbG9uZSAoZiwgc3QgKyBzaXplb2YgKHN0 KSwgMCwgMCk7Ci0jIGVsaWYgX1NUQUNLX0dST1dTX1VQCi0gIHBpZF90IHAgPSBjbG9uZSAoZiwg c3QsIDAsIDApOwotIyBlbHNlCi0jICBlcnJvciAiRGVmaW5lIGVpdGhlciBfU1RBQ0tfR1JPV1Nf RE9XTiBvciBfU1RBQ0tfR1JPV1NfVVAiCi0jIGVuZGlmCisjIGRlZmluZSBTVEFDS19TSVpFIDEy OCAqIDEwMjQKICNlbmRpZgorICBjaGFyIHN0W1NUQUNLX1NJWkVdIF9fYXR0cmlidXRlX18gKChh bGlnbmVkKSk7CisgIHN0cnVjdCBjbG9uZV9hcmdzIGNsb25lX2FyZ3MgPQorICAgIHsKKyAgICAg IC5zdGFjayA9ICh1aW50cHRyX3QpIHN0LAorICAgICAgLnN0YWNrX3NpemUgPSBzaXplb2YgKHN0 KSwKKyAgICB9OworICBwaWRfdCBwID0gX19jbG9uZV9pbnRlcm5hbCAoJmNsb25lX2FyZ3MsIHNp emVvZiAoY2xvbmVfYXJncyksIGYsIDApOwogICBpZiAocCA9PSAtMSkKICAgICB7CiAgICAgICBw cmludGYoImNsb25lIGZhaWxlZDogJW1cbiIpOwpkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5 c3YvbGludXgvdHN0LWNsb25lLmMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC90c3QtY2xvbmUu YwppbmRleCBlNmFlMDEwNmVmLi4yODY1MTgyZjA1IDEwMDY0NAotLS0gYS9zeXNkZXBzL3VuaXgv c3lzdi9saW51eC90c3QtY2xvbmUuYworKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC90c3Qt Y2xvbmUuYwpAQCAtMjIsMTEgKzIyLDcgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRl IDx1bmlzdGQuaD4KICNpbmNsdWRlIDxzY2hlZC5oPgotCi0jaWZkZWYgX19pYTY0X18KLWV4dGVy biBpbnQgX19jbG9uZTIgKGludCAoKl9fZm4pICh2b2lkICpfX2FyZyksIHZvaWQgKl9fY2hpbGRf c3RhY2tfYmFzZSwKLQkJICAgICBzaXplX3QgX19jaGlsZF9zdGFja19zaXplLCBpbnQgX19mbGFn cywgdm9pZCAqX19hcmcsIC4uLik7Ci0jZW5kaWYKKyNpbmNsdWRlIDxjbG9uZS1pbnRlcm5hbC5o PgogCiBpbnQgY2hpbGRfZm4odm9pZCAqYXJnKQogewpAQCAtMzksMTEgKzM1LDcgQEAgZG9fdGVz dCAodm9pZCkKIHsKICAgaW50IHJlc3VsdDsKIAotI2lmZGVmIF9faWE2NF9fCi0gIHJlc3VsdCA9 IF9fY2xvbmUyIChjaGlsZF9mbiwgTlVMTCwgMCwgMCwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0jZWxz ZQotICByZXN1bHQgPSBjbG9uZSAoY2hpbGRfZm4sIE5VTEwsIDAsIE5VTEwpOwotI2VuZGlmCisg IHJlc3VsdCA9IF9fY2xvbmVfaW50ZXJuYWwgKE5VTEwsIDAsIGNoaWxkX2ZuLCBOVUxMKTsKIAog ICBpZiAoZXJybm8gIT0gRUlOVkFMIHx8IHJlc3VsdCAhPSAtMSkKICAgICB7CmRpZmYgLS1naXQg YS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC90c3QtY2xvbmUyLmMgYi9zeXNkZXBzL3VuaXgvc3lz di9saW51eC90c3QtY2xvbmUyLmMKaW5kZXggY2UzNmM3MGMwZC4uZmRhNzdhYzQ4YiAxMDA2NDQK LS0tIGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvdHN0LWNsb25lMi5jCisrKyBiL3N5c2RlcHMv dW5peC9zeXN2L2xpbnV4L3RzdC1jbG9uZTIuYwpAQCAtMjYsOSArMjYsMTEgQEAKICNpbmNsdWRl IDxzdGRib29sLmg+CiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+Cisj aW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMv d2FpdC5oPgogI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CisjaW5jbHVkZSA8Y2xvbmUtaW50ZXJu YWwuaD4KIAogI2luY2x1ZGUgPHN0YWNraW5mby5oPiAgLyogRm9yIF9TVEFDS19HUk9XU197VVAs RE9XTn0uICAqLwogCkBAIC03MCwyMyArNzIsMTggQEAgZG9fdGVzdCAodm9pZCkKICAgaWYgKHBp cGUyIChwaXBlZmQsIE9fQ0xPRVhFQykpCiAgICAgRkFJTF9FWElUMSAoInBpcGUgZmFpbGVkOiAl bSIpOwogCi0gIGludCBjbG9uZV9mbGFncyA9IDA7CiAjaWZkZWYgX19pYTY0X18KLSAgZXh0ZXJu IGludCBfX2Nsb25lMiAoaW50ICgqX19mbikgKHZvaWQgKl9fYXJnKSwgdm9pZCAqX19jaGlsZF9z dGFja19iYXNlLAotCQkgICAgICAgc2l6ZV90IF9fY2hpbGRfc3RhY2tfc2l6ZSwgaW50IF9fZmxh Z3MsCi0JCSAgICAgICB2b2lkICpfX2FyZywgLi4uKTsKLSAgY2hhciBzdFsyNTYgKiAxMDI0XSBf X2F0dHJpYnV0ZV9fICgoYWxpZ25lZCkpOwotICBwaWRfdCBwID0gX19jbG9uZTIgKGYsIHN0LCBz aXplb2YgKHN0KSwgY2xvbmVfZmxhZ3MsIDApOworIyBkZWZpbmUgU1RBQ0tfU0laRSAyNTYgKiAx MDI0CiAjZWxzZQotICBjaGFyIHN0WzEyOCAqIDEwMjRdIF9fYXR0cmlidXRlX18gKChhbGlnbmVk KSk7Ci0jaWYgX1NUQUNLX0dST1dTX0RPV04KLSAgcGlkX3QgcCA9IGNsb25lIChmLCBzdCArIHNp emVvZiAoc3QpLCBjbG9uZV9mbGFncywgMCk7Ci0jZWxpZiBfU1RBQ0tfR1JPV1NfVVAKLSAgcGlk X3QgcCA9IGNsb25lIChmLCBzdCwgY2xvbmVfZmxhZ3MsIDApOwotI2Vsc2UKLSNlcnJvciAiRGVm aW5lIGVpdGhlciBfU1RBQ0tfR1JPV1NfRE9XTiBvciBfU1RBQ0tfR1JPV1NfVVAiCi0jZW5kaWYK KyMgZGVmaW5lIFNUQUNLX1NJWkUgMTI4ICogMTAyNAogI2VuZGlmCisgIGNoYXIgc3RbU1RBQ0tf U0laRV0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQpKTsKKyAgc3RydWN0IGNsb25lX2FyZ3MgY2xv bmVfYXJncyA9CisgICAgeworICAgICAgLnN0YWNrID0gKHVpbnRwdHJfdCkgc3QsCisgICAgICAu c3RhY2tfc2l6ZSA9IHNpemVvZiAoc3QpLAorICAgIH07CisgIHBpZF90IHAgPSBfX2Nsb25lX2lu dGVybmFsICgmY2xvbmVfYXJncywgc2l6ZW9mIChjbG9uZV9hcmdzKSwgZiwgMCk7CiAKICAgY2xv c2UgKHBpcGVmZFsxXSk7CiAKZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Rz dC1jbG9uZTMuYyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3RzdC1jbG9uZTMuYwppbmRleCAx YTFiZmQ0NTg2Li4zZTUwNTgwN2I2IDEwMDY0NAotLS0gYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51 eC90c3QtY2xvbmUzLmMKKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvdHN0LWNsb25lMy5j CkBAIC0yMCwxMCArMjAsMTIgQEAKICNpbmNsdWRlIDxzY2hlZC5oPgogI2luY2x1ZGUgPHNpZ25h bC5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8 c3lzL3N5c2NhbGwuaD4KICNpbmNsdWRlIDxzeXMvd2FpdC5oPgogI2luY2x1ZGUgPHN5cy90eXBl cy5oPgogI2luY2x1ZGUgPGxpbnV4L2Z1dGV4Lmg+CisjaW5jbHVkZSA8Y2xvbmUtaW50ZXJuYWwu aD4KIAogI2luY2x1ZGUgPHN0YWNraW5mby5oPiAgLyogRm9yIF9TVEFDS19HUk9XU197VVAsRE9X Tn0uICAqLwogI2luY2x1ZGUgPHN1cHBvcnQvY2hlY2suaD4KQEAgLTc4LDIzICs4MCwxNSBAQCBk b190ZXN0ICh2b2lkKQogICBwaWRfdCBjdGlkID0gQ1RJRF9JTklUX1ZBTDsKICAgcGlkX3QgdGlk OwogCi0jaWZkZWYgX19pYTY0X18KLSAgZXh0ZXJuIGludCBfX2Nsb25lMiAoaW50ICgqX19mbikg KHZvaWQgKl9fYXJnKSwgdm9pZCAqX19jaGlsZF9zdGFja19iYXNlLAotCQkgICAgICAgc2l6ZV90 IF9fY2hpbGRfc3RhY2tfc2l6ZSwgaW50IF9fZmxhZ3MsCi0JCSAgICAgICB2b2lkICpfX2FyZywg Li4uKTsKLSAgdGlkID0gX19jbG9uZTIgKGYsIHN0LCBzaXplb2YgKHN0KSwgY2xvbmVfZmxhZ3Ms IE5VTEwsIC8qIHB0aWQgKi8gTlVMTCwKLQkJICAvKiB0bHMgKi8gTlVMTCwgJmN0aWQpOwotI2Vs c2UKLSNpZiBfU1RBQ0tfR1JPV1NfRE9XTgotICB0aWQgPSBjbG9uZSAoZiwgc3QgKyBzaXplb2Yg KHN0KSwgY2xvbmVfZmxhZ3MsIE5VTEwsIC8qIHB0aWQgKi8gTlVMTCwKLQkgICAgICAgLyogdGxz ICovIE5VTEwsICZjdGlkKTsKLSNlbGlmIF9TVEFDS19HUk9XU19VUAotICB0aWQgPSBjbG9uZSAo Ziwgc3QsIGNsb25lX2ZsYWdzLCBOVUxMLCAvKiBwdGlkICovIE5VTEwsIC8qIHRscyAqLyBOVUxM LAotCSAgICAgICAmY3RpZCk7Ci0jZWxzZQotI2Vycm9yICJEZWZpbmUgZWl0aGVyIF9TVEFDS19H Uk9XU19ET1dOIG9yIF9TVEFDS19HUk9XU19VUCIKLSNlbmRpZgotI2VuZGlmCisgIHN0cnVjdCBj bG9uZV9hcmdzIGNsb25lX2FyZ3MgPQorICAgIHsKKyAgICAgIC5mbGFncyA9IGNsb25lX2ZsYWdz ICYgfkNTSUdOQUwsCisgICAgICAuZXhpdF9zaWduYWwgPSBjbG9uZV9mbGFncyAmIENTSUdOQUws CisgICAgICAuc3RhY2sgPSAodWludHB0cl90KSBzdCwKKyAgICAgIC5zdGFja19zaXplID0gc2l6 ZW9mIChzdCksCisgICAgICAuY2hpbGRfdGlkID0gKHVpbnRwdHJfdCkgJmN0aWQsCisgICAgfTsK KyAgdGlkID0gX19jbG9uZV9pbnRlcm5hbCAoJmNsb25lX2FyZ3MsIHNpemVvZiAoY2xvbmVfYXJn cyksIGYsIE5VTEwpOwogICBpZiAodGlkID09IC0xKQogICAgIEZBSUxfRVhJVDEgKCJjbG9uZSBm YWlsZWQ6ICVtIik7CiAKZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3RzdC1n ZXRwaWQxLmMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC90c3QtZ2V0cGlkMS5jCmluZGV4IDI1 M2ViZjJlMTUuLmI3OGY1NmRmNGYgMTAwNjQ0Ci0tLSBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4 L3RzdC1nZXRwaWQxLmMKKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvdHN0LWdldHBpZDEu YwpAQCAtNSw2ICs1LDcgQEAKICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxzeXMvdHlw ZXMuaD4KICNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2luY2x1ZGUgPGNsb25lLWludGVybmFsLmg+ CiAjaW5jbHVkZSA8c3RhY2tpbmZvLmg+CiAKICNpZm5kZWYgVEVTVF9DTE9ORV9GTEFHUwpAQCAt NDIsMjEgKzQzLDE5IEBAIGRvX3Rlc3QgKHZvaWQpCiAgICAgfQogCiAjaWZkZWYgX19pYTY0X18K LSAgZXh0ZXJuIGludCBfX2Nsb25lMiAoaW50ICgqX19mbikgKHZvaWQgKl9fYXJnKSwgdm9pZCAq X19jaGlsZF9zdGFja19iYXNlLAotCQkgICAgICAgc2l6ZV90IF9fY2hpbGRfc3RhY2tfc2l6ZSwg aW50IF9fZmxhZ3MsCi0JCSAgICAgICB2b2lkICpfX2FyZywgLi4uKTsKLSAgY2hhciBzdFsyNTYg KiAxMDI0XSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCkpOwotICBwaWRfdCBwID0gX19jbG9uZTIg KGYsIHN0LCBzaXplb2YgKHN0KSwgVEVTVF9DTE9ORV9GTEFHUywgMCk7CisjIGRlZmluZSBTVEFD S19TSVpFIDI1NiAqIDEwMjQKICNlbHNlCi0gIGNoYXIgc3RbMTI4ICogMTAyNF0gX19hdHRyaWJ1 dGVfXyAoKGFsaWduZWQpKTsKLSMgaWYgX1NUQUNLX0dST1dTX0RPV04KLSAgcGlkX3QgcCA9IGNs b25lIChmLCBzdCArIHNpemVvZiAoc3QpLCBURVNUX0NMT05FX0ZMQUdTLCAwKTsKLSMgZWxpZiBf U1RBQ0tfR1JPV1NfVVAKLSAgcGlkX3QgcCA9IGNsb25lIChmLCBzdCwgVEVTVF9DTE9ORV9GTEFH UywgMCk7Ci0jIGVsc2UKLSMgIGVycm9yICJEZWZpbmUgZWl0aGVyIF9TVEFDS19HUk9XU19ET1dO IG9yIF9TVEFDS19HUk9XU19VUCIKLSMgZW5kaWYKKyMgZGVmaW5lIFNUQUNLX1NJWkUgMTI4ICog MTAyNAogI2VuZGlmCisgIGNoYXIgc3RbU1RBQ0tfU0laRV0gX19hdHRyaWJ1dGVfXyAoKGFsaWdu ZWQpKTsKKyAgc3RydWN0IGNsb25lX2FyZ3MgY2xvbmVfYXJncyA9CisgICAgeworICAgICAgLmZs YWdzID0gVEVTVF9DTE9ORV9GTEFHUyAmIH5DU0lHTkFMLAorICAgICAgLmV4aXRfc2lnbmFsID0g VEVTVF9DTE9ORV9GTEFHUyAmIENTSUdOQUwsCisgICAgICAuc3RhY2sgPSAodWludHB0cl90KSBz dCwKKyAgICAgIC5zdGFja19zaXplID0gc2l6ZW9mIChzdCksCisgICAgfTsKKyAgcGlkX3QgcCA9 IF9fY2xvbmVfaW50ZXJuYWwgKCZjbG9uZV9hcmdzLCBzaXplb2YgKGNsb25lX2FyZ3MpLCBmLCAw KTsKICAgaWYgKHAgPT0gLTEpCiAgICAgewogICAgICAgcHJpbnRmKCJjbG9uZSBmYWlsZWQ6ICVt XG4iKTsKZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3g4Nl82NC9jbG9uZTMu UyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3g4Nl82NC9jbG9uZTMuUwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi40ZDk5YjRiODgxCi0tLSAvZGV2L251bGwKKysrIGIv c3lzZGVwcy91bml4L3N5c3YvbGludXgveDg2XzY0L2Nsb25lMy5TCkBAIC0wLDAgKzEsMTA1IEBA CisvKiBUaGUgY2xvbmUzIHN5c2NhbGwgd3JhcHBlci4gIExpbnV4L3g4Ni02NCB2ZXJzaW9uLgor ICAgQ29weXJpZ2h0IChDKSAyMDIxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAg VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBM aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1 YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJy YXJ5OyBpZiBub3QsIHNlZQorICAgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICov CisKKy8qIGNsb25lMygpIGlzIGV2ZW4gbW9yZSBzcGVjaWFsIHRoYW4gZm9yaygpIGFzIGl0IG11 Y2tzIHdpdGggc3RhY2tzCisgICBhbmQgaW52b2tlcyBhIGZ1bmN0aW9uIGluIHRoZSByaWdodCBj b250ZXh0IGFmdGVyIGl0cyBhbGwgb3Zlci4gICovCisKKyNpbmNsdWRlIDxzeXNkZXAuaD4KKyNp bmNsdWRlIDxjbG9uZS1vZmZzZXRzLmg+CisKKy8qIFRoZSB1c2VybGFuZCBpbXBsZW1lbnRhdGlv biBpczoKKyAgIGludCBjbG9uZTMgKHN0cnVjdCBjbG9uZV9hcmdzICpjbF9hcmdzLCBzaXplX3Qg c2l6ZSwKKwkgICAgICAgaW50ICgqZm4pKHZvaWQgKmFyZyksIHZvaWQgKmFyZyk7CisgICB0aGUg a2VybmVsIGVudHJ5IGlzOgorICAgaW50IGNsb25lMyAoc3RydWN0IGNsb25lX2FyZ3MgKmNsX2Fy Z3MsIHNpemVfdCBzaXplKTsKKworICAgVGhlIHBhcmFtZXRlcnMgYXJlIHBhc3NlZCBpbiByZWdp c3RlcnMgZnJvbSB1c2VybGFuZDoKKyAgIHJkaTogY2xfYXJncworICAgcnNpOiBzaXplCisgICBy ZHg6IGZuCisgICByY3g6IGFyZworCisgICBUaGUga2VybmVsIGV4cGVjdHM6CisgICByYXg6IHN5 c3RlbSBjYWxsIG51bWJlcgorICAgcmRpOiBjbF9hcmdzCisgICByc2k6IHNpemUgICovCisKKyAg ICAgICAgLnRleHQKK0VOVFJZIChfX2Nsb25lMykKKwkvKiBTYW5pdHkgY2hlY2sgYXJndW1lbnRz LiAgKi8KKwltb3ZxCSQtRUlOVkFMLCAlcmF4CisJdGVzdHEJJXJkaSwgJXJkaQkJLyogTm8gTlVM TCBjbF9hcmdzIHBvaW50ZXIuICAqLworCWp6CVNZU0NBTExfRVJST1JfTEFCRUwKKwl0ZXN0cQkl cmR4LCAlcmR4CQkvKiBObyBOVUxMIGZ1bmN0aW9uIHBvaW50ZXIuICAqLworCWp6CVNZU0NBTExf RVJST1JfTEFCRUwKKworCS8qIExvYWQgdGhlIG5ldyBzdGFjayBzaXplIGludG8gUjkuICAqLwor CW1vdnEJQ0xPTkVfQVJHU19TVEFDS19TSVpFX09GRlNFVCglcmRpKSwgJXI5CisKKwkvKiBMb2Fk IHRoZSBuZXcgc3RhY2sgYm90dG9tIGludG8gUjguICAqLworCW1vdnEJQ0xPTkVfQVJHU19TVEFD S19PRkZTRVQoJXJkaSksICVyOAorCisJLyogTWFrZSByb29tIGZvciAyIDgtYnl0ZSBzbG90cyBv biB0aGUgbmV3IHN0YWNrLiAgKi8KKwlzdWJxCSQxNiwgJXI5CisKKwkvKiBJbnNlcnQgdGhlIGFy Z3VtZW50IG9udG8gdGhlIG5ldyBzdGFjay4gICovCisJbW92cQklcmN4LCA4KCVyOCwgJXI5KQor CisJLyogU2F2ZSB0aGUgZnVuY3Rpb24gcG9pbnRlci4gIEl0IHdpbGwgYmUgcG9wcGVkIG9mZiBp biB0aGUKKwkgICBjaGlsZC4gICovCisJbW92cQklcmR4LCAoJXI4LCAlcjkpCisKKwkvKiBVcGRh dGUgdGhlIHN0YWNrIHNpemUgZmllbGQgcGFzc2VkIHRvIGNsb25lMy4gICovCisJbW92cQklcjks IENMT05FX0FSR1NfU1RBQ0tfU0laRV9PRkZTRVQoJXJkaSkKKworCS8qIERvIHRoZSBzeXN0ZW0g Y2FsbC4gICovCisJbW92bAkkU1lTX2lmeShjbG9uZTMpLCAlZWF4CisKKwkvKiBFbmQgRkRFIG5v dywgYmVjYXVzZSBpbiB0aGUgY2hpbGQgdGhlIHVud2luZCBpbmZvIHdpbGwgYmUKKwkgICB3cm9u Zy4gICovCisJY2ZpX2VuZHByb2M7CisJc3lzY2FsbAorCisJdGVzdAklUkFYX0xQLCAlUkFYX0xQ CisJamwJU1lTQ0FMTF9FUlJPUl9MQUJFTAorCWp6CUwodGhyZWFkX3N0YXJ0KQorCisJcmV0CisK K0wodGhyZWFkX3N0YXJ0KToKKwljZmlfc3RhcnRwcm9jOworCS8qIENsZWFyaW5nIGZyYW1lIHBv aW50ZXIgaXMgaW5zdWZmaWNpZW50LCB1c2UgQ0ZJLiAgKi8KKwljZmlfdW5kZWZpbmVkIChyaXAp OworCS8qIENsZWFyIHRoZSBmcmFtZSBwb2ludGVyLiAgVGhlIEFCSSBzdWdnZXN0cyB0aGlzIGJl IGRvbmUsIHRvIG1hcmsKKwkgICB0aGUgb3V0ZXJtb3N0IGZyYW1lIG9idmlvdXNseS4gICovCisJ eG9ybAklZWJwLCAlZWJwCisKKwkvKiBTZXQgdXAgYXJndW1lbnRzIGZvciB0aGUgZnVuY3Rpb24g Y2FsbC4gICovCisJcG9wcQklcmF4CQkvKiBGdW5jdGlvbiB0byBjYWxsLiAgKi8KKwlwb3BxCSVy ZGkJCS8qIEFyZ3VtZW50LiAgKi8KKwljYWxsCSolcmF4CisJLyogQ2FsbCBleGl0IHdpdGggcmV0 dXJuIHZhbHVlIGZyb20gZnVuY3Rpb24gY2FsbC4gKi8KKwltb3ZxCSVyYXgsICVyZGkKKwltb3Zs CSRTWVNfaWZ5KGV4aXQpLCAlZWF4CisJc3lzY2FsbAorCWNmaV9lbmRwcm9jOworCisJY2ZpX3N0 YXJ0cHJvYzsKK1BTRVVET19FTkQgKF9fY2xvbmUzKQorCitsaWJjX2hpZGRlbl9kZWYgKF9fY2xv bmUzKQotLSAKMi4yOS4yCgo= --000000000000a58d9805bccd0409--