From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6292 invoked by alias); 28 Oct 2012 01:16:21 -0000 Received: (qmail 6284 invoked by uid 22791); 28 Oct 2012 01:16:20 -0000 X-SWARE-Spam-Status: No, hits=-4.0 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,KHOP_BIG_TO_CC,KHOP_RCVD_TRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,RP_MATCHES_RCVD,TW_AV,TW_CF,TW_CP,TW_FN,TW_TM X-Spam-Check-By: sourceware.org Received: from mail-qc0-f175.google.com (HELO mail-qc0-f175.google.com) (209.85.216.175) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sun, 28 Oct 2012 01:16:05 +0000 Received: by mail-qc0-f175.google.com with SMTP id j3so2188793qcs.20 for ; Sat, 27 Oct 2012 18:16:04 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:x-system-of-record:x-gm-message-state; bh=saWRsQ9KbBypEkTrUq53VSkJnZrGhEOXwYouXSmehno=; b=aW7lvBIEi75c3mORe9A9lyARrQEOQsR52Gzu2ImuXo7f/t3nk+AA3jg5EeZtz/ktEV i1043bYc12EkHpWMYjJlM73p05kSt7MejB11ptYc8J7eRdWIP7gTQwKhWXgM8GGmjJOD fvlh+aca5Is1V99ez3RGhoNW8ZwHo3kOdIwG8cvWrFSHUVKLFULlF/pnHG0veA4m+kGc ySSWGtYNB/jrDrJgJTxNTKiiu7Y3yixYeA8vznf7+T3G//MN9PNmXaLVwb/Iv1SmuXst BlnjcjpOlLKpbMvUpPLpckMqxRqANyglhAxYxdSj5wjiH6nd4Xm4OWLalY/JhJ3QSpOV 6QCA== MIME-Version: 1.0 Received: by 10.224.71.16 with SMTP id f16mr14891593qaj.45.1351386964355; Sat, 27 Oct 2012 18:16:04 -0700 (PDT) Received: by 10.229.67.165 with HTTP; Sat, 27 Oct 2012 18:16:03 -0700 (PDT) In-Reply-To: <20121026155447.GA4348@atrey.karlin.mff.cuni.cz> References: <5008708E.1030109@redhat.com> <506F27AF.3070805@redhat.com> <50816D63.3020908@google.com> <20121026155447.GA4348@atrey.karlin.mff.cuni.cz> Date: Sun, 28 Oct 2012 04:31:00 -0000 Message-ID: Subject: Re: User directed Function Multiversioning via Function Overloading (issue5752064) From: Sriraman Tallam To: Jan Hubicka Cc: Diego Novillo , Jason Merrill , Jan Hubicka , Xinliang David Li , Mark Mitchell , Nathan Sidwell , "H.J. Lu" , Richard Guenther , Uros Bizjak , reply@codereview.appspotmail.com, GCC Patches Content-Type: multipart/mixed; boundary=bcaec51b1b97f6ebd904cd144b41 X-System-Of-Record: true X-Gm-Message-State: ALoCoQnoUwlXxOYcvtqkXRxd6J4dXhuXnc2l9l6oJq7A71F9cw+yV3IC6IQmt+WqqqmUM5qoFflXy14RXctyYD1pzqt2IoVyfGEMnPyWlDuxxOnAbhMTkpJ7PD4Va01XDVFxXC6L+1Tp+Mc+KVS9Uj+4aPw6vrMfDgpvI5P0QCb650mVtv7ACp7zpc3iLi/bfM7QjTjGiAZf X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2012-10/txt/msg02499.txt.bz2 --bcaec51b1b97f6ebd904cd144b41 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 4030 Hi Diego and Honza, I have made all the changes mentioned and attached the new patch. Thanks, -Sri. On Fri, Oct 26, 2012 at 8:54 AM, Jan Hubicka wrote: > Hi, > sorry for jumping in late, for too long I did not had chnce to look at my TODO. > I have two comments... >> Index: gcc/cgraphbuild.c >> =================================================================== >> --- gcc/cgraphbuild.c (revision 192623) >> +++ gcc/cgraphbuild.c (working copy) >> @@ -34,6 +34,7 @@ along with GCC; see the file COPYING3. If not see >> #include "ipa-utils.h" >> #include "except.h" >> #include "ipa-inline.h" >> +#include "target.h" >> >> /* Context of record_reference. */ >> struct record_reference_ctx >> @@ -317,8 +318,23 @@ build_cgraph_edges (void) >> bb); >> decl = gimple_call_fndecl (stmt); >> if (decl) >> - cgraph_create_edge (node, cgraph_get_create_node (decl), >> - stmt, bb->count, freq); >> + { >> + struct cgraph_node *callee = cgraph_get_create_node (decl); >> + /* If a call to a multiversioned function dispatcher is >> + found, generate the body to dispatch the right function >> + at run-time. */ >> + if (callee->dispatcher_function) >> + { >> + tree resolver_decl; >> + gcc_assert (callee->function_version >> + && callee->function_version->next); >> + gcc_assert (targetm.generate_version_dispatcher_body); >> + resolver_decl >> + = targetm.generate_version_dispatcher_body (callee); >> + gcc_assert (resolver_decl != NULL_TREE); >> + } >> + cgraph_create_edge (node, callee, stmt, bb->count, freq); >> + } > I do not really think resolver generation belongs here + I would preffer > build_cgraph_edges to really just build the edges. >> Index: gcc/cgraph.c >> =================================================================== >> --- gcc/cgraph.c (revision 192623) >> +++ gcc/cgraph.c (working copy) >> @@ -1277,6 +1277,16 @@ cgraph_mark_address_taken_node (struct cgraph_node >> node->symbol.address_taken = 1; >> node = cgraph_function_or_thunk_node (node, NULL); >> node->symbol.address_taken = 1; >> + /* If the address of a multiversioned function dispatcher is taken, >> + generate the body to dispatch the right function at run-time. This >> + is needed as the address can be used to do an indirect call. */ >> + if (node->dispatcher_function) >> + { >> + gcc_assert (node->function_version >> + && node->function_version->next); >> + gcc_assert (targetm.generate_version_dispatcher_body); >> + targetm.generate_version_dispatcher_body (node); >> + } > > Similarly here. I also think this way you will miss aliases of the multiversioned > functions. > > I am not sure why the multiversioning is tied with the cgraph build and the > datastructure is put into cgraph_node itself. It seems to me that your > dispatchers are in a way related to thunks - i.e. they are inserted into > callgraph and once they become reachable their body needs to be produced. I > think generate_version_dispatcher_body should thus probably be done from > cgraph_analyze_function. (to make the function to be seen by analyze_function > you will need to make it to be finalized at the time you set > dispatcher_function flag. > > I would also put the dispatcher datastructure into on-side hash by node->uid. > (i.e. these are rare and thus the datastructure should be small) > symbol table is critical for WPA stage memory use and I plan to remove as much > as possible from the nodes in near future. For this reason I would preffer > to not add too much of stuff that is not going to be used by majority of nodes. > > Honza --bcaec51b1b97f6ebd904cd144b41 Content-Type: text/plain; charset=US-ASCII; name="mv_fe_patch_10272012.txt" Content-Disposition: attachment; filename="mv_fe_patch_10272012.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h8tgvmua1 Content-length: 111061 T3ZlcnZpZXcgb2YgdGhlIHBhdGNoIHdoaWNoIGFkZHMgc3VwcG9ydCB0byBz cGVjaWZ5IGZ1bmN0aW9uIHZlcnNpb25zLiAgVGhpcyBpcwpvbmx5IGVuYWJs ZWQgZm9yIHRhcmdldCBpMzg2LgoKRXhhbXBsZToKCmludCBmb28gKCk7ICAv KiBEZWZhdWx0IHZlcnNpb24gKi8KaW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9f ICgodGFyZ2V0KCJhdngscG9wY250IikpKTsvKlNwZWNpYWxpemVkIGZvciBh dnggYW5kIHBvcGNudCAqLwppbnQgZm9vICgpIF9fYXR0cmlidXRlX18gKCh0 YXJnZXQoImFyY2g9Y29yZTIsc3NzZTMiKSkpOy8qU3BlY2lhbGl6ZWQgZm9y IGNvcmUyIGFuZCBzc3NlMyovCgppbnQgbWFpbiAoKQp7CiBpbnQgKCpwKSgp ID0gJmZvbzsKIHJldHVybiBmb28gKCkgKyAoKnApKCk7Cn0KCmludCBmb28g KCkKewogcmV0dXJuIDA7Cn0KCmludCBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0 KCJhdngscG9wY250IikpKQpmb28gKCkKewogcmV0dXJuIDA7Cn0KCmludCBf X2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJhcmNoPWNvcmUyLHNzc2UzIikpKQpm b28gKCkKewogcmV0dXJuIDA7Cn0KClRoZSBhYm92ZSBleGFtcGxlIGhhcyBm b28gZGVmaW5lZCAzIHRpbWVzLCBidXQgYWxsIDMgZGVmaW5pdGlvbnMgb2Yg Zm9vIGFyZQpkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIHNhbWUgZnVuY3Rp b24uIFRoZSBjYWxsIHRvIGZvbyBpbiBtYWluLCBkaXJlY3RseSBhbmQKdmlh IGEgcG9pbnRlciwgYXJlIGNhbGxzIHRvIHRoZSBtdWx0aS12ZXJzaW9uZWQg ZnVuY3Rpb24gZm9vIHdoaWNoIGlzIGRpc3BhdGNoZWQKdG8gdGhlIHJpZ2h0 IGZvbyBhdCBydW4tdGltZS4KCkZyb250LWVuZCBjaGFuZ2VzOgoKVGhlIGZy b250LWVuZCBjaGFuZ2VzIGFyZSBjYWxscyBhdCBhcHByb3ByaWF0ZSBwbGFj ZXMgdG8gdGFyZ2V0IGhvb2tzIHRoYXQKZGV0ZXJtaW5lIHRoZSBmb2xsb3dp bmc6CgoqIERldGVybWluZSBpZiB0d28gZnVuY3Rpb24gZGVjbHMgd2l0aCB0 aGUgc2FtZSBzaWduYXR1cmUgYXJlIHZlcnNpb25zLgoqIERldGVybWluZSB0 aGUgYXNzZW1ibGVyIG5hbWUgb2YgYSBmdW5jdGlvbiB2ZXJzaW9uLgoqIEdl bmVyYXRlIHRoZSBkaXNwYXRjaGVyIGZ1bmN0aW9uIGZvciBhIHNldCBvZiBm dW5jdGlvbiB2ZXJzaW9ucy4KKiBDb21wYXJlIHZlcnNpb25zIHRvIHNlZSBp ZiBvbmUgaGFzIGEgaGlnaGVyIHByaW9yaXR5IG92ZXIgdGhlIG90aGVyLgoK QWxsIHRoZSBpbXBsZW1lbnRhdGlvbiBoYXBwZW5zIGluIHRoZSB0YXJnZXQt c3BlY2lmaWMgY29uZmlnL2kzODYvaTM4Ni5jLgoKV2hhdCBkb2VzIHRoZSBw YXRjaCBkbz8KCiogVHJhY2tpbmcgZGVjbHMgdGhhdCBjb3JyZXNwb25kIHRv IGZ1bmN0aW9uIHZlcnNpb25zIG9mIGZ1bmN0aW9uCm5hbWUsIHNheSAiZm9v IjoKCldoZW4gdGhlIGZyb250LWVuZCBzZWVzIG1vcmUgdGhhbiBvbmUgZGVj bCBmb3IgImZvbyIsIGl0IGNhbGxzIGEgdGFyZ2V0IGhvb2sgdG8KZGV0ZXJt aW5lIGlmIHRoZXkgYXJlIHZlcnNpb25zLiBUbyBwcmV2ZW50IGR1cGxpY2F0 ZSBkZWZpbml0aW9uIGVycm9ycyB3aXRoIG90aGVyCiB2ZXJzaW9ucyBvZiAi Zm9vIiwgImRlY2xzX21hdGNoIiBmdW5jdGlvbiBpbiBjcC9kZWNsLmMgaXMg bWFkZSB0byByZXR1cm4gZmFsc2UKIHdoZW4gMiBkZWNscyBoYXZlIGFyZSBk ZWVtZWQgdmVyc2lvbnMgYnkgdGhlIHRhcmdldC4gVGhpcyB3aWxsIG1ha2Ug YWxsIGZ1bmN0aW9uCnZlcnNpb25zIG9mICJmb28iIHRvIGJlIGFkZGVkIHRv IHRoZSBvdmVybG9hZCBsaXN0IG9mICJmb28iLgoKKiBDaGFuZ2UgdGhlIGFz c2VtYmxlciBuYW1lcyBvZiB0aGUgZnVuY3Rpb24gdmVyc2lvbnMuCgpGb3Ig aTM4NiwgdGhlIHRhcmdldCBjaGFuZ2VzIHRoZSBhc3NlbWJsZXIgbmFtZXMg b2YgdGhlIGZ1bmN0aW9uIHZlcnNpb25zIGJ5CiBzdWZmaXhpbmcgdGhlIHNv cnRlZCBsaXN0IG9mIGFyZ3MgdG8gInRhcmdldCIgdG8gdGhlIGZ1bmN0aW9u IG5hbWUgb2YgImZvbyIuIEZvcgpleGFtcGxlLCBoZSBhc3NlbWJsZXIgbmFt ZSBvZiAidm9pZCBmb28gKCkgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCAoInNz ZTQiKSkpIiB3aWxsCmJlY29tZSBfWjNmb292LnNzZTQuICBUaGUgdGFyZ2V0 IGhvb2sgbWFuZ2xlX2RlY2xfYXNzZW1ibGVyX25hbWUgaXMgdXNlZCBmb3Ig dGhpcy4KCiogT3ZlcmxvYWQgcmVzb2x1dGlvbjoKCiBGdW5jdGlvbiAiYnVp bGRfb3Zlcl9jYWxsIiBpbiBjcC9jYWxsLmMgc2VlcyBhIGNhbGwgdG8gZnVu Y3Rpb24KImZvbyIsIHdoaWNoIGlzIG11bHRpLXZlcnNpb25lZC4gVGhlIG92 ZXJsb2FkIHJlc29sdXRpb24gaGFwcGVucyBpbgpmdW5jdGlvbiAiam91c3Qi IGluICJjcC9jYWxsLmMiLiBIZXJlLCB0aGUgY2FsbCB0byAiZm9vIiBoYXMg YWxsCnBvc3NpYmxlIHZlcnNpb25zIG9mICJmb28iIGFzIGNhbmRpZGF0ZXMu IEFsbCB0aGUgY2FuZGlkYXRlcyBvZiAiZm9vIiBhcmUKc3RvcmVkIGluIHRo ZSBjZ3JhcGggc2lkZSBkYXRhIHN0cnVjdHVyZS4gRWFjaCB2ZXJzaW9uIG9m IGZvbyBpcyBjaGFpbmVkIGluIGEgCmRvdWJseS1saW5rZWQgbGlzdCB3aXRo IHRoZSBkZWZhdWx0IGZ1bmN0aW9uIGFzIHRoZSBmaXJzdCBlbGVtZW50LiAg VGhpcyBhbGxvd3MKYW55IHBhc3MgdG8gYWNjZXNzIGFsbCB0aGUgc2VtYW50 aWNhbGx5IGlkZW50aWNhbCB2ZXJzaW9ucy4gQSBjYWxsIHRvIGEKbXVsdGkt dmVyc2lvbmVkIGZ1bmN0aW9uIHdpbGwgYmUgcmVwbGFjZWQgYnkgYSBjYWxs IHRvIGEgZGlzcGF0Y2hlciBmdW5jdGlvbiwKZGV0ZXJtaW5lZCBieSBhIHRh cmdldCBob29rLCB0byBleGVjdXRlIHRoZSByaWdodCBmdW5jdGlvbiB2ZXJz aW9uIGF0IHJ1bi10aW1lLgoKT3B0aW1pemF0aW9uIHRvIGRpcmVjdGx5IGNh bGwgYSB2ZXJzaW9uIHdoZW4gcG9zc2libGU6CkFsc28sIGluIGpvdXN0LCB3 aGVyZSBvdmVybG9hZCByZXNvbHV0aW9uIGhhcHBlbnMsIGEgbXVsdGl2ZXJz aW9uZWQgZnVuY3Rpb24KcmVzb2x1dGlvbiBpcyBtYWRlIHRvIHJldHVybiB0 aGUgbW9zdCBzcGVjaWFsaXplZCB2ZXJzaW9uLiAgVGhpcyBpcyB0aGUgdmVy c2lvbgp0aGF0IHdpbGwgYmUgY2hlY2tlZCBmb3IgZGlzcGF0Y2hpbmcgZmly c3QgYW5kIGlzIGRldGVybWluZWQgYnkgdGhlIHRhcmdldC4KTm93LCBpZiB0 aGUgY2FsbGVyIGNhbiBpbmxpbmUgdGhpcyBmdW5jdGlvbiB2ZXJzaW9uIHRo ZW4gYSBkaXJlY3QgY2FsbCBpcyBtYWRlCnRvIHRoaXMgZnVuY3Rpb24gdmVy c2lvbiByYXRoZXIgdGhhbiBnbyB0aHJvdWdoIHRoZSBkaXNwYXRjaGVyLiBX aGVuIGEgZGlyZWN0CmNhbGwgY2Fubm90IGJlIG1hZGUsIGEgY2FsbCB0byB0 aGUgZGlzcGF0Y2hlciBmdW5jdGlvbiBpcyBjcmVhdGVkLgoKKiBDcmVhdGlu ZyB0aGUgZGlzcGF0Y2hlciBib2R5LgoKVGhlIGRpc3BhdGNoZXIgYm9keSwg Y2FsbGVkIHRoZSByZXNvbHZlciBpcyBtYWRlIG9ubHkgd2hlbiB0aGVyZSBp cyBhIGNhbGwgdG8gYQptdWx0aXZlcnNpb25lZCBmdW5jdGlvbiBkaXNwYXRj aGVyIG9yIHRoZSBhZGRyZXNzIG9mIGEgZnVuY3Rpb24gaXMgdGFrZW4uIFRo aXMKaXMgZ2VuZXJhdGVkIGR1cmluZyBjZ3JhcGhfYW5hbHl6ZV9mdW5jdGlv bi4gVGhpcyBpcyBkb25lIGJ5IGFub3RoZXIgdGFyZ2V0IGhvb2suCgoqIERp c3BhdGNoIG9yZGVyaW5nLgoKVGhlIG9yZGVyIGluIHdoaWNoIHRoZSBmdW5j dGlvbiB2ZXJzaW9ucyBhcmUgY2hlY2tlZCBkdXJpbmcgZGlzcGF0Y2ggaXMg YmFzZWQKb24gYSBwcmlvcml0eSB2YWx1ZSBhc3NpZ25lZCBmb3IgdGhlIElT QSB0aGF0IGlzIGNhdGVyZWQuIE1vcmUgc3BlY2lhbGl6ZWQgCnZlcnNpb25z IGFyZSBjaGVja2VkIGZvciBkaXNwYXRjaGluZyBmaXJzdC4gIFRoaXMgaXMg dG8gbWl0aWdhdGUgdGhlIGFtYmlndWl0eQp0aGF0IGNhbiBhcmlzZSB3aGVu IG1vcmUgdGhhbiBvbmUgZnVuY3Rpb24gdmVyc2lvbiBpcyB2YWxpZCBmb3Ig ZXhlY3V0aW9uIG9uCmEgcGFydGljdWxhciBwbGF0Zm9ybS4gIFRoaXMgaXMg bm90IGEgcGVyZmVjdCBzb2x1dGlvbiwgYW5kIGluIGZ1dHVyZSB0aGUgdXNl cgpzaG91bGQgYmUgYWxsb3dlZCB0byBhc3NpZ24gYSBkaXNwYXRjaGluZyBw cmlvcml0eSB2YWx1ZSB0byBlYWNoIHZlcnNpb24uCgpGdW5jdGlvbiBNViBp biB0aGUgSW50ZWwgY29tcGlsZXI6CgpUaGUgaW50ZWwgY29tcGlsZXIgc3Vw cG9ydHMgZnVuY3Rpb24gbXVsdGl2ZXJzaW9uaW5nIGFuZCB0aGUgc3ludGF4 IGlzCnNpbWlsYXIgdG8gdGhlIHBhdGNoIHByb3Bvc2VkIGhlcmUuICBIZXJl IGlzIGFuIGV4YW1wbGUgb2YgaG93IHRvCmdlbmVyYXRlIG11bHRpcGxlIGZ1 bmN0aW9uIHZlcnNpb25zIHdpdGggdGhlIGludGVsIGNvbXBpbGVyLgoKLyog Q3JlYXRlIGEgc3R1YiBmdW5jdGlvbiB0byBzcGVjaWZ5IHRoZSB2YXJpb3Vz IHZlcnNpb25zIG9mIGZ1bmN0aW9uIHRoYXQKICAgd2lsbCBiZSBjcmVhdGVk LCB1c2luZyBkZWNsc3BlYyBhdHRyaWJ1dGUgY3B1X2Rpc3BhdGNoLiAgKi8K X19kZWNsc3BlYyAoY3B1X2Rpc3BhdGNoIChjb3JlX2k3X3NzZTRfMiwgYXRv bSwgZ2VuZXJpYykpCnZvaWQgZm9vICgpIHt9OwoKLyogQm9kaWVzIG9mIGVh Y2ggZnVuY3Rpb24gdmVyc2lvbi4gICovCgovKiBJbnRlbCBDb3JlaTcgcHJv Y2Vzc29yICsgU1NFNC4yIHZlcnNpb24uICAqLwpfX2RlY2xzcGVjIChjcHVf c3BlY2lmaWMoY29yZV9pN19zc2U0XzIpKQp2b2lkIGZvbyAoKQp7CiAgcHJp bnRmICgiY29yZWk3ICsgc3NlNC4yIik7Cn0KCi8qIEF0b20gcHJvY2Vzc29y LiAgKi8KX19kZWNsc3BlYyAoY3B1X3NwZWNpZmljKGF0b20pKQp2b2lkIGZv byAoKQp7CiAgcHJpbnRmICgiYXRvbSIpOwp9CgovKiBUaGUgZ2VuZXJpYyBv ciB0aGUgZGVmYXVsdCB2ZXJzaW9uLiAgKi8KX19kZWNsc3BlYyAoY3B1X3Nw ZWNpZmljKGdlbmVyaWMpKQp2b2lkIGZvbyAoKQp7CiAgcHJpbnRmICgiVGhp cyBpcyBnZW5lcmljIik7Cn0KCkEgbmV3IGZ1bmN0aW9uIHZlcnNpb24gaXMg Z2VuZXJhdGVkIGJ5IGRlZmluaW5nIGEgbmV3IGZ1bmN0aW9uIHdpdGggdGhl IHNhbWUKc2lnbmF0dXJlIGJ1dCB3aXRoIGEgZGlmZmVyZW50IGNwdV9zcGVj aWZpYyBkZWNsc3BlYyBhdHRyaWJ1dGUgc3RyaW5nLiAgVGhlCnNldCBvZiBj cHVfc3BlY2lmaWMgc3RyaW5ncyB0aGF0IGFyZSBhbGxvd2VkIGlzIHRoZSBm b2xsb3dpbmc6CgoiY29yZV8ybmRfZ2VuX2F2eCIKImNvcmVfYWVzX3BjbG11 bHFkcSIKImNvcmVfaTdfc3NlNF8yIgoiY29yZV8yX2R1b19zc2U0XzEiCiJj b3JlXzJfZHVvX3Nzc2UzIgoiYXRvbSIKInBlbnRpdW1fNF9zc2UzIgoicGVu dGl1bV80IgoicGVudGl1bV9tIgoicGVudGl1bV9paWkiCiJnZW5lcmljIgoK Q29tcGFyaXNvbiB3aXRoIHRoZSBHQ0MgTVYgaW1wbGVtZW50YXRpb24gaW4g dGhpcyBwYXRjaDoKCiogVmVyc2lvbiBjcmVhdGlvbiBzeW50YXg6CgpUaGUg aW1wbGVtZW50YXRpb24gaW4gdGhpcyBwYXRjaCBhbHNvIGhhcyBhIHNpbWls YXIgc3ludGF4IHRvIHNwZWNpZnkgZnVuY3Rpb24KdmVyc2lvbnMuIFRoZSBm aXJzdCBzdHViIGZ1bmN0aW9uIGlzIG5vdCBuZWVkZWQuICBIZXJlIGlzIHRo ZSBjb2RlIHRvIGdlbmVyYXRlCnRoZSBmdW5jdGlvbiB2ZXJzaW9ucyB3aXRo IHRoaXMgcGF0Y2g6CgovKiBJbnRlbCBDb3JlaTcgcHJvY2Vzc29yICsgU1NF NC4yIHZlcnNpb24uICAqLwpfX2F0dHJpYnV0ZV9fICgodGFyZ2V0ICgiYXJj aD1jb3JlaTcsIHNzZTQuMiIpKSkKdm9pZCBmb28gKCkKewogIHByaW50ZiAo ImNvcmVpNyArIHNzZTQuMiIpOwp9CgovKiBBdG9tIHByb2Nlc3Nvci4gICov Cl9fYXR0cmlidXRlX18gKCh0YXJnZXQgKCJhcmNoPWF0b20iKSkpCnZvaWQg Zm9vICgpCnsKICBwcmludGYgKCJhdG9tIik7Cn0KCnZvaWQgZm9vICgpCnsK fQoKVGhlIHRhcmdldCBhdHRyaWJ1dGUgY2FuIGhhdmUgb25lIG9mIHRoZSBm b2xsb3dpbmcgYXJjaCBuYW1lczoKCiJhbWQiCiJpbnRlbCIKImF0b20iCiJj b3JlMiIKImNvcmVpNyIKIm5laGFsZW0iCiJ3ZXN0bWVyZSIKInNhbmR5YnJp ZGdlIgoiYW1kZmFtMTBoIgoiYmFyY2Vsb25hIgoic2hhbmdoYWkiCiJpc3Rh bmJ1bCIKImFtZGZhbTE1aCIKImJkdmVyMSIKImJkdmVyMiIKCmFuZCBhbnkg bnVtYmVyIG9mIHRoZSBmb2xsb3dpbmcgSVNBIG5hbWVzOgoKImNtb3YiCiJt bXgiCiJwb3BjbnQiCiJzc2UiCiJzc2UyIgoic3NlMyIKInNzc2UzIgoic3Nl NC4xIgoic3NlNC4yIgoiYXZ4IgoiYXZ4MiIKCgoJKiBkb2MvdG0udGV4aS5p biAoVEFSR0VUX09QVElPTl9GVU5DVElPTl9WRVJTSU9OUyk6IE5ldyBob29r IGRlc2NyaXB0aW9uLgoJKiAoVEFSR0VUX0NPTVBBUkVfVkVSU0lPTl9QUklP UklUWSk6IE5ldyBob29rIGRlc2NyaXB0aW9uLgoJKiAoVEFSR0VUX0dFVF9G VU5DVElPTl9WRVJTSU9OU19ESVNQQVRDSEVSKTogTmV3IGhvb2sgZGVzY3Jp cHRpb24uCgkqIChUQVJHRVRfR0VORVJBVEVfVkVSU0lPTl9ESVNQQVRDSEVS X0JPRFkpOiBOZXcgaG9vayBkZXNjcmlwdGlvbi4KCSogZG9jL3RtLnRleGk6 IFJlZ2VuZXJhdGUuCgkqIGNncmFwaHVuaXQuYyAoY2dyYXBoX2FuYWx5emVf ZnVuY3Rpb24pOiBHZW5lcmF0ZSBib2R5IG9mIG11bHRpdmVyc2lvbgoJZnVu Y3Rpb24gZGlzcGF0Y2hlci4KCSogdGFyZ2V0LmRlZiAoY29tcGFyZV92ZXJz aW9uX3ByaW9yaXR5KTogTmV3IHRhcmdldCBob29rLgoJKiAoZ2VuZXJhdGVf dmVyc2lvbl9kaXNwYXRjaGVyX2JvZHkpOiBOZXcgdGFyZ2V0IGhvb2suCgkq IChnZXRfZnVuY3Rpb25fdmVyc2lvbnNfZGlzcGF0Y2hlcik6IE5ldyB0YXJn ZXQgaG9vay4KCSogKGZ1bmN0aW9uX3ZlcnNpb25zKTogTmV3IHRhcmdldCBo b29rLgoJKiBjZ3JhcGguYyAoY2dyYXBoX2ZudmVyX2h0YWIpOiBOZXcgaHRh Yi4KCShjZ3JhcGhfZm5fdmVyX2h0YWJfaGFzaCk6IE5ldyBmdW5jdGlvbi4K CShjZ3JhcGhfZm5fdmVyX2h0YWJfZXEpOiBOZXcgZnVuY3Rpb24uCgkodmVy c2lvbl9pbmZvX25vZGUpOiBOZXcgcG9pbnRlci4KCShpbnNlcnRfbmV3X2Nn cmFwaF9ub2RlX3ZlcnNpb24pOiBOZXcgZnVuY3Rpb24uCgkoZ2V0X2NncmFw aF9ub2RlX3ZlcnNpb24pOiBOZXcgZnVuY3Rpb24uCgkqIGNncmFwaC5oIChj Z3JhcGhfZnVuY3Rpb25fdmVyc2lvbl9pbmZvKTogTmV3IHN0cnVjdC4KCShp bnNlcnRfbmV3X2NncmFwaF9ub2RlX3ZlcnNpb24pOiBOZXcgZnVuY3Rpb24u CgkoZ2V0X2NncmFwaF9ub2RlX3ZlcnNpb24pOiBOZXcgZnVuY3Rpb24uCgko Y2dyYXBoX25vZGUpOiBOZXcgYml0ZmllbGQgZGlzcGF0Y2hlcl9mdW5jdGlv bi4KCSogdHJlZS5oIChERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCk6IE5ldyBt YWNyby4KCSh0cmVlX2Z1bmN0aW9uX2RlY2wpOiBOZXcgYml0LWZpZWxkIHZl cnNpb25lZF9mdW5jdGlvbi4KCSogdGVzdHN1aXRlL2crKy5kZy9tdjEuQzog TmV3IHRlc3QuCgkqIHRlc3RzdWl0ZS9nKysuZGcvbXYyLkM6IE5ldyB0ZXN0 LgoJKiB0ZXN0c3VpdGUvZysrLmRnL212My5DOiBOZXcgdGVzdC4KCSogdGVz dHN1aXRlL2crKy5kZy9tdjQuQzogTmV3IHRlc3QuCgkqIGNwL2NsYXNzLmM6 CgkoYWRkX21ldGhvZCk6IENoYW5nZSBhc3NlbWJsZXIgbmFtZXMgb2YgZnVu Y3Rpb24gdmVyc2lvbnMuCgkocmVzb2x2ZV9hZGRyZXNzX29mX292ZXJsb2Fk ZWRfZnVuY3Rpb24pOiBTYXZlIGFsbCBmdW5jdGlvbgoJdmVyc2lvbiBjYW5k aWRhdGVzLiBDcmVhdGUgZGlzcGF0Y2hlciBkZWNsIGFuZCByZXR1cm4gYWRk cmVzcyBvZgoJZGlzcGF0Y2hlciBpbnN0ZWFkLgoJKiBjcC9kZWNsLmMgKGRl Y2xzX21hdGNoKTogTWFrZSBkZWNscyB1bm1hdGNoZWQgZm9yIHZlcnNpb25l ZAoJZnVuY3Rpb25zLgoJKGR1cGxpY2F0ZV9kZWNscyk6IFJlbW92ZSBhbWJp Z3VpdHkgZm9yIHZlcnNpb25lZCBmdW5jdGlvbnMuIAoJKGN4eF9jb21kYXRf Z3JvdXApOiBNYWtlIGNvbWRhdCBncm91cCBvZiB2ZXJzaW9uZWQgZnVuY3Rp b25zIGJlIHRoZQoJc2FtZS4KCSogY3AvZXJyb3IuYyAoZHVtcF9leGNlcHRp b25fc3BlYyk6IER1bXAgYXNzZW1ibGVyIG5hbWUgZm9yIGZ1bmN0aW9uCgl2 ZXJzaW9ucy4KCSogY3Avc2VtYW50aWNzLmMgKGV4cGFuZF9vcl9kZWZlcl9m bl8xKTogTWFyayBhcyBuZWVkZWQgdmVyc2lvbmVkCglmdW5jdGlvbnMgdGhh dCBhcmUgYWxzbyBtYXJrZWQgaW5saW5lLgoJKiBjcC9kZWNsMi5jOihjaGVj a19jbGFzc2ZuKTogQ2hlY2sgYXR0cmlidXRlcyBvZiB2ZXJzaW9uZWQgZnVu Y3Rpb25zCglmb3IgbWF0Y2guCgkqIGNwL2NhbGwuYzogKGJ1aWxkX25ld19m dW5jdGlvbl9jYWxsKTogQ2hlY2sgaWYgdmVyc2lvbmVkIGZ1bmN0aW9ucwoJ aGF2ZSBhIGRlZmF1bHQgdmVyc2lvbi4KCShidWlsZF9vdmVyX2NhbGwpOiBN YWtlIGNhbGxzIHRvIG11bHRpdmVyc2lvbmVkIGZ1bmN0aW9ucwoJdG8gY2Fs bCB0aGUgZGlzcGF0Y2hlci4KCShqb3VzdCk6IEZvciBjYWxscyB0byBtdWx0 aS12ZXJzaW9uZWQgZnVuY3Rpb25zLCBtYWtlIHRoZSBtb3N0CglzcGVjaWFs aXplZCBmdW5jdGlvbiB2ZXJzaW9uIHdpbi4KCSh0b3VybmV5KTogR2VuZXJh dGUgZGlzcGF0Y2hlciBkZWNsIGZvciBmdW5jdGlvbiB2ZXJzaW9ucy4KCShn ZXRfZnVuY3Rpb25fdmVyc2lvbl9kaXNwYXRjaGVyKTogTmV3IGZ1bmN0aW9u LgoJKGdlbmVyYXRlX2Z1bmN0aW9uX3ZlcnNpb25zX2Rpc3BhdGNoZXIpOiBO ZXcgZnVuY3Rpb24uCgkqIE1ha2VmaWxlLmluOiBBZGQgbXVsdGl2ZXJzaW9u Lm8KCSogY29uZmlnL2kzODYvaTM4Ni5jIChhZGRfY29uZGl0aW9uX3RvX2Ji KTogTmV3IGZ1bmN0aW9uLgoJKGdldF9idWlsdGluX2NvZGVfZm9yX3ZlcnNp b24pOiBOZXcgZnVuY3Rpb24uCgkoaXg4Nl9jb21wYXJlX3ZlcnNpb25fcHJp b3JpdHkpOiBOZXcgZnVuY3Rpb24uCgkoZmVhdHVyZV9jb21wYXJlKTogTmV3 IGZ1bmN0aW9uLgoJKGRpc3BhdGNoX2Z1bmN0aW9uX3ZlcnNpb25zKTogTmV3 IGZ1bmN0aW9uLgoJKiAoaXg4Nl9mdW5jdGlvbl92ZXJzaW9ucyk6IE5ldyBm dW5jdGlvbi4KCSogKGF0dHJfc3RyY21wKTogTmV3IGZ1bmN0aW9uLgoJKiAo c29ydGVkX2F0dHJfc3RyaW5nKTogTmV3IGZ1bmN0aW9uLgoJKiAoaXg4Nl9t YW5nbGVfZnVuY3Rpb25fdmVyc2lvbl9hc3NlbWJsZXJfbmFtZSk6IE5ldyBm dW5jdGlvbi4KCSogKGl4ODZfbWFuZ2xlX2RlY2xfYXNzZW1ibGVyX25hbWUp OiBOZXcgZnVuY3Rpb24uCgkqIChtYWtlX25hbWUpOiBOZXcgZnVuY3Rpb24u CgkqIChtYWtlX2Rpc3BhdGNoZXJfZGVjbCk6IE5ldyBmdW5jdGlvbi4KCSog KGlzX2Z1bmN0aW9uX2RlZmF1bHRfdmVyc2lvbik6IE5ldyBmdW5jdGlvbi4K CSogKGl4ODZfZ2V0X2Z1bmN0aW9uX3ZlcnNpb25zX2Rpc3BhdGNoZXIpOiBO ZXcgZnVuY3Rpb24uCgkqIChtYWtlX2F0dHJpYnV0ZSk6IE5ldyBmdW5jdGlv bi4KCSogKG1ha2VfcmVzb2x2ZXJfZnVuYyk6IE5ldyBmdW5jdGlvbi4KCSog KGl4ODZfZ2VuZXJhdGVfdmVyc2lvbl9kaXNwYXRjaGVyX2JvZHkpOiBOZXcg ZnVuY3Rpb24uCgkqIChUQVJHRVRfQ09NUEFSRV9WRVJTSU9OX1BSSU9SSVRZ KTogTmV3IG1hY3JvLgoJKiAoVEFSR0VUX0dFVF9GVU5DVElPTl9WRVJTSU9O U19ESVNQQVRDSEVSKTogTmV3IG1hY3JvLgoJKiAoVEFSR0VUX0dFTkVSQVRF X1ZFUlNJT05fRElTUEFUQ0hFUl9CT0RZKTogTmV3IG1hY3JvLgoJKiAoVEFS R0VUX09QVElPTl9GVU5DVElPTl9WRVJTSU9OUyk6IE5ldyBtYWNyby4KCSog KFRBUkdFVF9NQU5HTEVfREVDTF9BU1NFTUJMRVJfTkFNRSk6IE5ldyBtYWNy by4KCkluZGV4OiBnY2MvZG9jL3RtLnRleGkKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gZ2NjL2RvYy90bS50ZXhpCShyZXZpc2lvbiAxOTI2MjMpCisr KyBnY2MvZG9jL3RtLnRleGkJKHdvcmtpbmcgY29weSkKQEAgLTk5MTMsNiAr OTkxMywxNCBAQCBjaGFuZ2VkIHZpYSB0aGUgb3B0aW1pemUgYXR0cmlidXRl IG9yIHByYWdtYSwgc2VlCiBAY29kZXtUQVJHRVRfT1ZFUlJJREVfT1BUSU9O U19BRlRFUl9DSEFOR0V9CiBAZW5kIGRlZnR5cGVmbgogCitAZGVmdHlwZWZu IHtUYXJnZXQgSG9va30gYm9vbCBUQVJHRVRfT1BUSU9OX0ZVTkNUSU9OX1ZF UlNJT05TICh0cmVlIEB2YXJ7ZGVjbDF9LCB0cmVlIEB2YXJ7ZGVjbDJ9KQor VGhpcyB0YXJnZXQgaG9vayByZXR1cm5zIEBjb2Rle3RydWV9IGlmIEB2YXJ7 REVDTDF9IGFuZCBAdmFye0RFQ0wyfSBhcmUKK3ZlcnNpb25zIG9mIHRoZSBz YW1lIGZ1bmN0aW9uLiAgQHZhcntERUNMMX0gYW5kIEB2YXJ7REVDTDJ9IGFy ZSBmdW5jdGlvbgordmVyc2lvbnMgaWYgYW5kIG9ubHkgaWYgdGhleSBoYXZl IHRoZSBzYW1lIGZ1bmN0aW9uIHNpZ25hdHVyZSBhbmQKK2RpZmZlcmVudCB0 YXJnZXQgc3BlY2lmaWMgYXR0cmlidXRlcywgdGhhdCBpcywgdGhleSBhcmUg Y29tcGlsZWQgZm9yCitkaWZmZXJlbnQgdGFyZ2V0IG1hY2hpbmVzLgorQGVu ZCBkZWZ0eXBlZm4KKwogQGRlZnR5cGVmbiB7VGFyZ2V0IEhvb2t9IGJvb2wg VEFSR0VUX0NBTl9JTkxJTkVfUCAodHJlZSBAdmFye2NhbGxlcn0sIHRyZWUg QHZhcntjYWxsZWV9KQogVGhpcyB0YXJnZXQgaG9vayByZXR1cm5zIEBjb2Rl e2ZhbHNlfSBpZiB0aGUgQHZhcntjYWxsZXJ9IGZ1bmN0aW9uCiBjYW5ub3Qg aW5saW5lIEB2YXJ7Y2FsbGVlfSwgYmFzZWQgb24gdGFyZ2V0IHNwZWNpZmlj IGluZm9ybWF0aW9uLiAgQnkKQEAgLTEwOTMwLDYgKzEwOTM4LDI5IEBAIFRo ZSByZXN1bHQgaXMgYW5vdGhlciB0cmVlIGNvbnRhaW5pbmcgYSBzaW1wbGlm aWVkCiBjYWxsJ3MgcmVzdWx0LiAgSWYgQHZhcntpZ25vcmV9IGlzIHRydWUg dGhlIHZhbHVlIHdpbGwgYmUgaWdub3JlZC4KIEBlbmQgZGVmdHlwZWZuCiAK K0BkZWZ0eXBlZm4ge1RhcmdldCBIb29rfSBpbnQgVEFSR0VUX0NPTVBBUkVf VkVSU0lPTl9QUklPUklUWSAodHJlZSBAdmFye2RlY2wxfSwgdHJlZSBAdmFy e2RlY2wyfSkKK1RoaXMgaG9vayBpcyB1c2VkIHRvIGNvbXBhcmUgdGhlIHRh cmdldCBhdHRyaWJ1dGVzIGluIHR3byBmdW5jdGlvbnMgdG8KK2RldGVybWlu ZSB3aGljaCBmdW5jdGlvbidzIGZlYXR1cmVzIGdldCBoaWdoZXIgcHJpb3Jp dHkuICBUaGlzIGlzIHVzZWQKK2R1cmluZyBmdW5jdGlvbiBtdWx0aS12ZXJz aW9uaW5nIHRvIGZpZ3VyZSBvdXQgdGhlIG9yZGVyIGluIHdoaWNoIHR3bwor dmVyc2lvbnMgbXVzdCBiZSBkaXNwYXRjaGVkLiAgQSBmdW5jdGlvbiB2ZXJz aW9uIHdpdGggYSBoaWdoZXIgcHJpb3JpdHkKK2lzIGNoZWNrZWQgZm9yIGRp c3BhdGNoaW5nIGVhcmxpZXIuICBAdmFye2RlY2wxfSBhbmQgQHZhcntkZWNs Mn0gYXJlCisgdGhlIHR3byBmdW5jdGlvbiBkZWNscyB0aGF0IHdpbGwgYmUg Y29tcGFyZWQuCitAZW5kIGRlZnR5cGVmbgorCitAZGVmdHlwZWZuIHtUYXJn ZXQgSG9va30gdHJlZSBUQVJHRVRfR0VUX0ZVTkNUSU9OX1ZFUlNJT05TX0RJ U1BBVENIRVIgKHZvaWQgKkB2YXJ7YXJnbGlzdH0pCitUaGlzIGhvb2sgaXMg dXNlZCB0byBnZXQgdGhlIGRpc3BhdGNoZXIgZnVuY3Rpb24gZm9yIGEgc2V0 IG9mIGZ1bmN0aW9uCit2ZXJzaW9ucy4gIFRoZSBkaXNwYXRjaGVyIGZ1bmN0 aW9uIGlzIGNhbGxlZCB0byBpbnZva2UgdGhlIHJpZ2h0IGZ1bmN0aW9uCit2 ZXJzaW9uIGF0IHJ1bi10aW1lLiBAdmFye2FyZ2xpc3R9IGlzIHRoZSB2ZWN0 b3Igb2YgZnVuY3Rpb24gdmVyc2lvbnMKK3RoYXQgc2hvdWxkIGJlIGNvbnNp ZGVyZWQgZm9yIGRpc3BhdGNoLgorQGVuZCBkZWZ0eXBlZm4KKworQGRlZnR5 cGVmbiB7VGFyZ2V0IEhvb2t9IHRyZWUgVEFSR0VUX0dFTkVSQVRFX1ZFUlNJ T05fRElTUEFUQ0hFUl9CT0RZICh2b2lkICpAdmFye2FyZ30pCitUaGlzIGhv b2sgaXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgZGlzcGF0Y2hlciBsb2dpYyB0 byBpbnZva2UgdGhlIHJpZ2h0CitmdW5jdGlvbiB2ZXJzaW9uIGF0IHJ1bi10 aW1lIGZvciBhIGdpdmVuIHNldCBvZiBmdW5jdGlvbiB2ZXJzaW9ucy4KK0B2 YXJ7YXJnfSBwb2ludHMgdG8gdGhlIGNhbGxncmFwaCBub2RlIG9mIHRoZSBk aXNwYXRjaGVyIGZ1bmN0aW9uIHdob3NlCitib2R5IG11c3QgYmUgZ2VuZXJh dGVkLgorQGVuZCBkZWZ0eXBlZm4KKwogQGRlZnR5cGVmbiB7VGFyZ2V0IEhv b2t9IHtjb25zdCBjaGFyICp9IFRBUkdFVF9JTlZBTElEX1dJVEhJTl9ET0xP T1AgKGNvbnN0X3J0eCBAdmFye2luc259KQogCiBUYWtlIGFuIGluc3RydWN0 aW9uIGluIEB2YXJ7aW5zbn0gYW5kIHJldHVybiBOVUxMIGlmIGl0IGlzIHZh bGlkIHdpdGhpbiBhCkluZGV4OiBnY2MvZG9jL3RtLnRleGkuaW4KPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gZ2NjL2RvYy90bS50ZXhpLmluCShyZXZp c2lvbiAxOTI2MjMpCisrKyBnY2MvZG9jL3RtLnRleGkuaW4JKHdvcmtpbmcg Y29weSkKQEAgLTk3ODIsNiArOTc4MiwxNCBAQCBjaGFuZ2VkIHZpYSB0aGUg b3B0aW1pemUgYXR0cmlidXRlIG9yIHByYWdtYSwgc2VlCiBAY29kZXtUQVJH RVRfT1ZFUlJJREVfT1BUSU9OU19BRlRFUl9DSEFOR0V9CiBAZW5kIGRlZnR5 cGVmbgogCitAaG9vayBUQVJHRVRfT1BUSU9OX0ZVTkNUSU9OX1ZFUlNJT05T CitUaGlzIHRhcmdldCBob29rIHJldHVybnMgQGNvZGV7dHJ1ZX0gaWYgQHZh cntERUNMMX0gYW5kIEB2YXJ7REVDTDJ9IGFyZQordmVyc2lvbnMgb2YgdGhl IHNhbWUgZnVuY3Rpb24uICBAdmFye0RFQ0wxfSBhbmQgQHZhcntERUNMMn0g YXJlIGZ1bmN0aW9uCit2ZXJzaW9ucyBpZiBhbmQgb25seSBpZiB0aGV5IGhh dmUgdGhlIHNhbWUgZnVuY3Rpb24gc2lnbmF0dXJlIGFuZAorZGlmZmVyZW50 IHRhcmdldCBzcGVjaWZpYyBhdHRyaWJ1dGVzLCB0aGF0IGlzLCB0aGV5IGFy ZSBjb21waWxlZCBmb3IKK2RpZmZlcmVudCB0YXJnZXQgbWFjaGluZXMuCitA ZW5kIGRlZnR5cGVmbgorCiBAaG9vayBUQVJHRVRfQ0FOX0lOTElORV9QCiBU aGlzIHRhcmdldCBob29rIHJldHVybnMgQGNvZGV7ZmFsc2V9IGlmIHRoZSBA dmFye2NhbGxlcn0gZnVuY3Rpb24KIGNhbm5vdCBpbmxpbmUgQHZhcntjYWxs ZWV9LCBiYXNlZCBvbiB0YXJnZXQgc3BlY2lmaWMgaW5mb3JtYXRpb24uICBC eQpAQCAtMTA3ODgsNiArMTA3OTYsMjkgQEAgVGhlIHJlc3VsdCBpcyBhbm90 aGVyIHRyZWUgY29udGFpbmluZyBhIHNpbXBsaWZpZWQKIGNhbGwncyByZXN1 bHQuICBJZiBAdmFye2lnbm9yZX0gaXMgdHJ1ZSB0aGUgdmFsdWUgd2lsbCBi ZSBpZ25vcmVkLgogQGVuZCBkZWZ0eXBlZm4KIAorQGhvb2sgVEFSR0VUX0NP TVBBUkVfVkVSU0lPTl9QUklPUklUWQorVGhpcyBob29rIGlzIHVzZWQgdG8g Y29tcGFyZSB0aGUgdGFyZ2V0IGF0dHJpYnV0ZXMgaW4gdHdvIGZ1bmN0aW9u cyB0bworZGV0ZXJtaW5lIHdoaWNoIGZ1bmN0aW9uJ3MgZmVhdHVyZXMgZ2V0 IGhpZ2hlciBwcmlvcml0eS4gIFRoaXMgaXMgdXNlZAorZHVyaW5nIGZ1bmN0 aW9uIG11bHRpLXZlcnNpb25pbmcgdG8gZmlndXJlIG91dCB0aGUgb3JkZXIg aW4gd2hpY2ggdHdvCit2ZXJzaW9ucyBtdXN0IGJlIGRpc3BhdGNoZWQuICBB IGZ1bmN0aW9uIHZlcnNpb24gd2l0aCBhIGhpZ2hlciBwcmlvcml0eQoraXMg Y2hlY2tlZCBmb3IgZGlzcGF0Y2hpbmcgZWFybGllci4gIEB2YXJ7ZGVjbDF9 IGFuZCBAdmFye2RlY2wyfSBhcmUKKyB0aGUgdHdvIGZ1bmN0aW9uIGRlY2xz IHRoYXQgd2lsbCBiZSBjb21wYXJlZC4KK0BlbmQgZGVmdHlwZWZuCisKK0Bo b29rIFRBUkdFVF9HRVRfRlVOQ1RJT05fVkVSU0lPTlNfRElTUEFUQ0hFUgor VGhpcyBob29rIGlzIHVzZWQgdG8gZ2V0IHRoZSBkaXNwYXRjaGVyIGZ1bmN0 aW9uIGZvciBhIHNldCBvZiBmdW5jdGlvbgordmVyc2lvbnMuICBUaGUgZGlz cGF0Y2hlciBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gaW52b2tlIHRoZSByaWdo dCBmdW5jdGlvbgordmVyc2lvbiBhdCBydW4tdGltZS4gQHZhcnthcmdsaXN0 fSBpcyB0aGUgdmVjdG9yIG9mIGZ1bmN0aW9uIHZlcnNpb25zCit0aGF0IHNo b3VsZCBiZSBjb25zaWRlcmVkIGZvciBkaXNwYXRjaC4KK0BlbmQgZGVmdHlw ZWZuCisKK0Bob29rIFRBUkdFVF9HRU5FUkFURV9WRVJTSU9OX0RJU1BBVENI RVJfQk9EWQorVGhpcyBob29rIGlzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGRp c3BhdGNoZXIgbG9naWMgdG8gaW52b2tlIHRoZSByaWdodAorZnVuY3Rpb24g dmVyc2lvbiBhdCBydW4tdGltZSBmb3IgYSBnaXZlbiBzZXQgb2YgZnVuY3Rp b24gdmVyc2lvbnMuCitAdmFye2FyZ30gcG9pbnRzIHRvIHRoZSBjYWxsZ3Jh cGggbm9kZSBvZiB0aGUgZGlzcGF0Y2hlciBmdW5jdGlvbiB3aG9zZQorYm9k eSBtdXN0IGJlIGdlbmVyYXRlZC4KK0BlbmQgZGVmdHlwZWZuCisKIEBob29r IFRBUkdFVF9JTlZBTElEX1dJVEhJTl9ET0xPT1AKIAogVGFrZSBhbiBpbnN0 cnVjdGlvbiBpbiBAdmFye2luc259IGFuZCByZXR1cm4gTlVMTCBpZiBpdCBp cyB2YWxpZCB3aXRoaW4gYQpJbmRleDogZ2NjL2NncmFwaHVuaXQuYwo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvY2dyYXBodW5pdC5jCShyZXZp c2lvbiAxOTI2MjMpCisrKyBnY2MvY2dyYXBodW5pdC5jCSh3b3JraW5nIGNv cHkpCkBAIC02MzMsNiArNjMzLDM0IEBAIGNncmFwaF9hbmFseXplX2Z1bmN0 aW9uIChzdHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUpCiAgICAgewogICAgICAg cHVzaF9jZnVuIChERUNMX1NUUlVDVF9GVU5DVElPTiAoZGVjbCkpOwogCisg ICAgICAvKiBJZiB0aGlzIGRlY2wgaXMgb25lIHZlcnNpb24gb2YgYSBzZXQg b2YgbXVsdGktdmVyc2lvbmVkIGZ1bmN0aW9ucywKKwkgY2hlY2sgaWYgaXRz IGRpc3BhdGNoZXIgYm9keSBuZWVkcyB0byBiZSBnZW5lcmF0ZWQuICAqLwor ICAgICAgaWYgKERFQ0xfRlVOQ1RJT05fVkVSU0lPTkVEIChkZWNsKQorCSAg JiYgZ2V0X2NncmFwaF9ub2RlX3ZlcnNpb24gKG5vZGUpICE9IE5VTEwpCisJ eworCSAgc3RydWN0IGNncmFwaF9mdW5jdGlvbl92ZXJzaW9uX2luZm8gKm5v ZGVfdmVyc2lvbl9pbmZvCisJICAgID0gZ2V0X2NncmFwaF9ub2RlX3ZlcnNp b24gKG5vZGUpOworCSAgaWYgKG5vZGVfdmVyc2lvbl9pbmZvLT5kaXNwYXRj aGVyX3Jlc29sdmVyKQorCSAgICB7CisJICAgICAgdHJlZSBkaXNwYXRjaGVy X2RlY2wgPSBub2RlX3ZlcnNpb25faW5mby0+ZGlzcGF0Y2hlcl9yZXNvbHZl cjsKKwkgICAgICBzdHJ1Y3QgY2dyYXBoX25vZGUgKmRpc3BhdGNoZXJfbm9k ZQorCQk9IGNncmFwaF9nZXRfY3JlYXRlX25vZGUgKGRpc3BhdGNoZXJfZGVj bCk7CisJICAgICAgc3RydWN0IGNncmFwaF9mdW5jdGlvbl92ZXJzaW9uX2lu Zm8gKmRpc3BhdGNoZXJfdmVyc2lvbl9pbmZvCisJCT0gZ2V0X2NncmFwaF9u b2RlX3ZlcnNpb24gKGRpc3BhdGNoZXJfbm9kZSk7CisJICAgICAgaWYgKGRp c3BhdGNoZXJfbm9kZS0+bG9jYWwuZmluYWxpemVkCisJCSAgJiYgZGlzcGF0 Y2hlcl92ZXJzaW9uX2luZm8gIT0gTlVMTAorCSAgICAgICAgICAmJiAoZGlz cGF0Y2hlcl92ZXJzaW9uX2luZm8tPmRpc3BhdGNoZXJfcmVzb2x2ZXIKKwkJ ICAgICAgPT0gTlVMTF9UUkVFKSkKKwkJeworCQkgIHRyZWUgcmVzb2x2ZXIg PSBOVUxMX1RSRUU7CisJCSAgZ2NjX2Fzc2VydCAodGFyZ2V0bS5nZW5lcmF0 ZV92ZXJzaW9uX2Rpc3BhdGNoZXJfYm9keSk7CisJCSAgcmVzb2x2ZXIKKwkJ ICAgID0gdGFyZ2V0bS5nZW5lcmF0ZV92ZXJzaW9uX2Rpc3BhdGNoZXJfYm9k eSAoZGlzcGF0Y2hlcl9ub2RlKTsKKwkJICBnY2NfYXNzZXJ0IChyZXNvbHZl ciAhPSBOVUxMX1RSRUUpOworCQl9CisJICAgIH0KKwl9CisKICAgICAgIGFz c2lnbl9hc3NlbWJsZXJfbmFtZV9pZl9uZWVlZGVkIChub2RlLT5zeW1ib2wu ZGVjbCk7CiAKICAgICAgIC8qIE1ha2Ugc3VyZSB0byBnaW1wbGlmeSBib2Rp ZXMgb25seSBvbmNlLiAgRHVyaW5nIGFuYWx5emluZyBhCkluZGV4OiBnY2Mv dGFyZ2V0LmRlZgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvdGFy Z2V0LmRlZgkocmV2aXNpb24gMTkyNjIzKQorKysgZ2NjL3RhcmdldC5kZWYJ KHdvcmtpbmcgY29weSkKQEAgLTEyOTgsNiArMTI5OCwzNyBAQCBERUZIT09L CiAgdHJlZSwgKHRyZWUgZm5kZWNsLCBpbnQgbl9hcmdzLCB0cmVlICphcmdw LCBib29sIGlnbm9yZSksCiAgaG9va190cmVlX3RyZWVfaW50X3RyZWVwX2Jv b2xfbnVsbCkKIAorLyogVGFyZ2V0IGhvb2sgaXMgdXNlZCB0byBjb21wYXJl IHRoZSB0YXJnZXQgYXR0cmlidXRlcyBpbiB0d28gZnVuY3Rpb25zIHRvCisg ICBkZXRlcm1pbmUgd2hpY2ggZnVuY3Rpb24ncyBmZWF0dXJlcyBnZXQgaGln aGVyIHByaW9yaXR5LiAgVGhpcyBpcyB1c2VkCisgICBkdXJpbmcgZnVuY3Rp b24gbXVsdGktdmVyc2lvbmluZyB0byBmaWd1cmUgb3V0IHRoZSBvcmRlciBp biB3aGljaCB0d28KKyAgIHZlcnNpb25zIG11c3QgYmUgZGlzcGF0Y2hlZC4g IEEgZnVuY3Rpb24gdmVyc2lvbiB3aXRoIGEgaGlnaGVyIHByaW9yaXR5Cisg ICBpcyBjaGVja2VkIGZvciBkaXNwYXRjaGluZyBlYXJsaWVyLiAgREVDTDEg YW5kIERFQ0wyIGFyZQorICAgdGhlIHR3byBmdW5jdGlvbiBkZWNscyB0aGF0 IHdpbGwgYmUgY29tcGFyZWQuIEl0IHJldHVybnMgcG9zaXRpdmUgdmFsdWUK KyAgIGlmIERFQ0wxIGlzIGhpZ2hlciBwcmlvcml0eSwgIG5lZ2F0aXZlIHZh bHVlIGlmIERFQ0wyIGlzIGhpZ2hlciBwcmlvcml0eQorICAgYW5kIDAgaWYg dGhleSBhcmUgdGhlIHNhbWUuICovCitERUZIT09LCisoY29tcGFyZV92ZXJz aW9uX3ByaW9yaXR5LAorICIiLAorIGludCwgKHRyZWUgZGVjbDEsIHRyZWUg ZGVjbDIpLCBOVUxMKQorCisvKiAgVGFyZ2V0IGhvb2sgaXMgdXNlZCB0byBn ZW5lcmF0ZSB0aGUgZGlzcGF0Y2hlciBsb2dpYyB0byBpbnZva2UgdGhlIHJp Z2h0CisgICAgZnVuY3Rpb24gdmVyc2lvbiBhdCBydW4tdGltZSBmb3IgYSBn aXZlbiBzZXQgb2YgZnVuY3Rpb24gdmVyc2lvbnMuCisgICAgQVJHIHBvaW50 cyB0byB0aGUgY2FsbGdyYXBoIG5vZGUgb2YgdGhlIGRpc3BhdGNoZXIgZnVu Y3Rpb24gd2hvc2UgYm9keQorICAgIG11c3QgYmUgZ2VuZXJhdGVkLiAgKi8K K0RFRkhPT0sKKyhnZW5lcmF0ZV92ZXJzaW9uX2Rpc3BhdGNoZXJfYm9keSwK KyAiIiwKKyB0cmVlLCAodm9pZCAqYXJnKSwgTlVMTCkgCisKKy8qIFRhcmdl dCBob29rIGlzIHVzZWQgdG8gZ2V0IHRoZSBkaXNwYXRjaGVyIGZ1bmN0aW9u IGZvciBhIHNldCBvZiBmdW5jdGlvbgorICAgdmVyc2lvbnMuICBUaGUgZGlz cGF0Y2hlciBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gaW52b2tlIHRoZSByaWdo dCBmdW5jdGlvbgorICAgdmVyc2lvbiBhdCBydW4tdGltZS4gIEFSR0xJU1Qg aXMgdGhlIHZlY3RvciBvZiBmdW5jdGlvbiB2ZXJzaW9ucyB0aGF0CisgICBz aG91bGQgYmUgY29uc2lkZXJlZCBmb3IgZGlzcGF0Y2guICAqLworREVGSE9P SworKGdldF9mdW5jdGlvbl92ZXJzaW9uc19kaXNwYXRjaGVyLAorICIiLAor IHRyZWUsICh2b2lkICphcmdsaXN0KSwgTlVMTCkKKwogLyogUmV0dXJucyBh IGNvZGUgZm9yIGEgdGFyZ2V0LXNwZWNpZmljIGJ1aWx0aW4gdGhhdCBpbXBs ZW1lbnRzCiAgICByZWNpcHJvY2FsIG9mIHRoZSBmdW5jdGlvbiwgb3IgTlVM TF9UUkVFIGlmIG5vdCBhdmFpbGFibGUuICAqLwogREVGSE9PSwpAQCAtMjcy NSw2ICsyNzU2LDE2IEBAIERFRkhPT0sKICB2b2lkLCAodm9pZCksCiAgaG9v a192b2lkX3ZvaWQpCiAKKy8qIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVl IGlmIERFQ0wxIGFuZCBERUNMMiBhcmUgdmVyc2lvbnMgb2YgdGhlIHNhbWUK KyAgIGZ1bmN0aW9uLiAgREVDTDEgYW5kIERFQ0wyIGFyZSBmdW5jdGlvbiB2 ZXJzaW9ucyBpZiBhbmQgb25seSBpZiB0aGV5CisgICBoYXZlIHRoZSBzYW1l IGZ1bmN0aW9uIHNpZ25hdHVyZSBhbmQgZGlmZmVyZW50IHRhcmdldCBzcGVj aWZpYyBhdHRyaWJ1dGVzLAorICAgdGhhdCBpcywgdGhleSBhcmUgY29tcGls ZWQgZm9yIGRpZmZlcmVudCB0YXJnZXQgbWFjaGluZXMuICAqLworREVGSE9P SworKGZ1bmN0aW9uX3ZlcnNpb25zLAorICIiLAorIGJvb2wsICh0cmVlIGRl Y2wxLCB0cmVlIGRlY2wyKSwKKyBob29rX2Jvb2xfdHJlZV90cmVlX2ZhbHNl KQorCiAvKiBGdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgb25lIGZ1bmN0aW9u IGNhbiBpbmxpbmUgYW5vdGhlciBmdW5jdGlvbi4gICovCiAjdW5kZWYgSE9P S19QUkVGSVgKICNkZWZpbmUgSE9PS19QUkVGSVggIlRBUkdFVF8iCkluZGV4 OiBnY2MvY2dyYXBoLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2Nj L2NncmFwaC5jCShyZXZpc2lvbiAxOTI2MjMpCisrKyBnY2MvY2dyYXBoLmMJ KHdvcmtpbmcgY29weSkKQEAgLTEzMiw2ICsxMzIsNzQgQEAgc3RhdGljIEdU WSgoKSkgc3RydWN0IGNncmFwaF9lZGdlICpmcmVlX2VkZ2VzOwogLyogRGlk IHByb2Nzc19zYW1lX2JvZHlfYWxpYXNlcyBydW4/ICAqLwogYm9vbCBzYW1l X2JvZHlfYWxpYXNlc19kb25lOwogCisvKiBNYXAgYSBjZ3JhcGhfbm9kZSB0 byBjZ3JhcGhfZnVuY3Rpb25fdmVyc2lvbl9pbmZvIHVzaW5nIHRoaXMgaHRh Yi4KKyAgIFRoZSBjZ3JhcGhfZnVuY3Rpb25fdmVyc2lvbl9pbmZvIGhhcyBh IFRISVNfTk9ERSBmaWVsZCB0aGF0IGlzIHRoZQorICAgY29ycmVzcG9uZGlu ZyBjZ3JhcGhfbm9kZS4uICAqLworaHRhYl90IEdUWSgocGFyYW1faXMgKHN0 cnVjdCBjZ3JhcGhfZnVuY3Rpb25fdmVyc2lvbl9pbmZvICopKSkKKyAgY2dy YXBoX2ZudmVyX2h0YWIgPSBOVUxMOworCisvKiBIYXNoIGZ1bmN0aW9uIGZv ciBjZ3JhcGhfZm52ZXJfaHRhYi4gICovCitzdGF0aWMgaGFzaHZhbF90Citj Z3JhcGhfZm52ZXJfaHRhYl9oYXNoIChjb25zdCB2b2lkICpwdHIpCit7Cisg IGludCB1aWQgPSAoKGNvbnN0IHN0cnVjdCBjZ3JhcGhfZnVuY3Rpb25fdmVy c2lvbl9pbmZvICopcHRyKS0+dGhpc19ub2RlLT51aWQ7CisgIHJldHVybiAo aGFzaHZhbF90KSh1aWQpOworfQorCisvKiBlcSBmdW5jdGlvbiBmb3IgY2dy YXBoX2ZudmVyX2h0YWIuICAqLworc3RhdGljIGludAorY2dyYXBoX2ZudmVy X2h0YWJfZXEgKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMikKK3sK KyAgY29uc3Qgc3RydWN0IGNncmFwaF9mdW5jdGlvbl92ZXJzaW9uX2luZm8g Km4xCisgICAgPSAoY29uc3Qgc3RydWN0IGNncmFwaF9mdW5jdGlvbl92ZXJz aW9uX2luZm8gKilwMTsKKyAgY29uc3Qgc3RydWN0IGNncmFwaF9mdW5jdGlv bl92ZXJzaW9uX2luZm8gKm4yCisgICAgPSAoY29uc3Qgc3RydWN0IGNncmFw aF9mdW5jdGlvbl92ZXJzaW9uX2luZm8gKilwMjsKKworICByZXR1cm4gbjEt PnRoaXNfbm9kZS0+dWlkID09IG4yLT50aGlzX25vZGUtPnVpZDsKK30KKwor LyogTWFyayBhcyBHQyByb290IGFsbCBhbGxvY2F0ZWQgbm9kZXMuICAqLwor c3RhdGljIEdUWSgoKSkgc3RydWN0IGNncmFwaF9mdW5jdGlvbl92ZXJzaW9u X2luZm8gKgorICB2ZXJzaW9uX2luZm9fbm9kZSA9IE5VTEw7CisKKy8qIElu c2VydCBhIG5ldyBjZ3JhcGhfZnVuY3Rpb25fdmVyc2lvbl9pbmZvIG5vZGUg aW50byBjZ3JhcGhfZm52ZXJfaHRhYgorICAgY29ycmVzcG9uZGluZyB0byBj Z3JhcGhfbm9kZSBOT0RFLiAgKi8KK3N0cnVjdCBjZ3JhcGhfZnVuY3Rpb25f dmVyc2lvbl9pbmZvICoKK2luc2VydF9uZXdfY2dyYXBoX25vZGVfdmVyc2lv biAoc3RydWN0IGNncmFwaF9ub2RlICpub2RlKQoreworICB2b2lkICoqc2xv dDsKKyAgCisgIHZlcnNpb25faW5mb19ub2RlID0gTlVMTDsKKyAgdmVyc2lv bl9pbmZvX25vZGUgPSBnZ2NfYWxsb2NfY2xlYXJlZF9jZ3JhcGhfZnVuY3Rp b25fdmVyc2lvbl9pbmZvICgpOworICB2ZXJzaW9uX2luZm9fbm9kZS0+dGhp c19ub2RlID0gbm9kZTsKKworICBpZiAoY2dyYXBoX2ZudmVyX2h0YWIgPT0g TlVMTCkKKyAgICBjZ3JhcGhfZm52ZXJfaHRhYiA9IGh0YWJfY3JlYXRlX2dn YyAoMiwgY2dyYXBoX2ZudmVyX2h0YWJfaGFzaCwKKwkJCQkgICAgICAgICBj Z3JhcGhfZm52ZXJfaHRhYl9lcSwgTlVMTCk7CisKKyAgc2xvdCA9IGh0YWJf ZmluZF9zbG90IChjZ3JhcGhfZm52ZXJfaHRhYiwgdmVyc2lvbl9pbmZvX25v ZGUsIElOU0VSVCk7CisgIGdjY19hc3NlcnQgKHNsb3QgIT0gTlVMTCk7Cisg ICpzbG90ID0gdmVyc2lvbl9pbmZvX25vZGU7CisgIHJldHVybiB2ZXJzaW9u X2luZm9fbm9kZTsKK30KKworLyogR2V0IHRoZSBjZ3JhcGhfZnVuY3Rpb25f dmVyc2lvbl9pbmZvIG5vZGUgY29ycmVzcG9uZGluZyB0byBub2RlLiAgKi8K K3N0cnVjdCBjZ3JhcGhfZnVuY3Rpb25fdmVyc2lvbl9pbmZvICoKK2dldF9j Z3JhcGhfbm9kZV92ZXJzaW9uIChzdHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUp Cit7CisgIHN0cnVjdCBjZ3JhcGhfZnVuY3Rpb25fdmVyc2lvbl9pbmZvICpy ZXQ7CisgIHN0cnVjdCBjZ3JhcGhfZnVuY3Rpb25fdmVyc2lvbl9pbmZvIGtl eTsKKyAga2V5LnRoaXNfbm9kZSA9IG5vZGU7CisKKyAgaWYgKGNncmFwaF9m bnZlcl9odGFiID09IE5VTEwpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgcmV0 ID0gKHN0cnVjdCBjZ3JhcGhfZnVuY3Rpb25fdmVyc2lvbl9pbmZvICopCisg ICAgaHRhYl9maW5kIChjZ3JhcGhfZm52ZXJfaHRhYiwgJmtleSk7CisKKyAg cmV0dXJuIHJldDsKK30KKwogLyogTWFjcm9zIHRvIGFjY2VzcyB0aGUgbmV4 dCBpdGVtIGluIHRoZSBsaXN0IG9mIGZyZWUgY2dyYXBoIG5vZGVzIGFuZAog ICAgZWRnZXMuICovCiAjZGVmaW5lIE5FWFRfRlJFRV9OT0RFKE5PREUpIGNn cmFwaCAoKE5PREUpLT5zeW1ib2wubmV4dCkKSW5kZXg6IGdjYy9jZ3JhcGgu aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvY2dyYXBoLmgJKHJl dmlzaW9uIDE5MjYyMykKKysrIGdjYy9jZ3JhcGguaAkod29ya2luZyBjb3B5 KQpAQCAtMjAwLDcgKzIwMCwzOCBAQCBzdHJ1Y3QgR1RZKCgpKSBjZ3JhcGhf Y2xvbmVfaW5mbwogICBiaXRtYXAgY29tYmluZWRfYXJnc190b19za2lwOwog fTsKIAorLyogRnVuY3Rpb24gTXVsdGl2ZXJzaW9uaW5nIGluZm8uICAqLwor c3RydWN0IEdUWSgoKSkgY2dyYXBoX2Z1bmN0aW9uX3ZlcnNpb25faW5mbyB7 CisgIC8qIFRoZSBjZ3JhcGhfbm9kZSBmb3Igd2hpY2ggdGhlIGZ1bmN0aW9u IHZlcnNpb24gaW5mbyBpcyBzdG9yZWQuICAqLworICBzdHJ1Y3QgY2dyYXBo X25vZGUgKnRoaXNfbm9kZTsKKyAgLyogQ2hhaW5zIGFsbCB0aGUgc2VtYW50 aWNhbGx5IGlkZW50aWNhbCBmdW5jdGlvbiB2ZXJzaW9ucy4gIFRoZQorICAg ICBmaXJzdCBmdW5jdGlvbiBpbiB0aGlzIGNoYWluIGlzIHRoZSB2ZXJzaW9u X2luZm8gbm9kZSBvZiB0aGUKKyAgICAgZGVmYXVsdCBmdW5jdGlvbi4gICov CisgIHN0cnVjdCBjZ3JhcGhfZnVuY3Rpb25fdmVyc2lvbl9pbmZvICpwcmV2 OworICAvKiBJZiB0aGlzIHZlcnNpb24gbm9kZSBjb3JyZXNwb25kcyB0byBh IGRpc3BhdGNoZXIgZm9yIGZ1bmN0aW9uCisgICAgIHZlcnNpb25zLCB0aGlz IHBvaW50cyB0byB0aGUgdmVyc2lvbiBpbmZvIG5vZGUgb2YgdGhlIGRlZmF1 bHQKKyAgICAgZnVuY3Rpb24sIHRoZSBmaXJzdCBub2RlIGluIHRoZSBjaGFp bi4gICovCisgIHN0cnVjdCBjZ3JhcGhfZnVuY3Rpb25fdmVyc2lvbl9pbmZv ICpuZXh0OworICAvKiBJZiB0aGlzIG5vZGUgY29ycmVzcG9uZHMgdG8gYSBm dW5jdGlvbiB2ZXJzaW9uLCB0aGlzIHBvaW50cworICAgICB0byB0aGUgZGlz cGF0Y2hlciBmdW5jdGlvbiBkZWNsLCB3aGljaCBpcyB0aGUgZnVuY3Rpb24g dGhhdCBtdXN0CisgICAgIGJlIGNhbGxlZCB0byBleGVjdXRlIHRoZSByaWdo dCBmdW5jdGlvbiB2ZXJzaW9uIGF0IHJ1bi10aW1lLgogCisgICAgIElmIHRo aXMgY2dyYXBoIG5vZGUgaXMgYSBkaXNwYXRjaGVyIChpZiBkaXNwYXRjaGVy X2Z1bmN0aW9uIGlzCisgICAgIHRydWUsIGluIHRoZSBjZ3JhcGhfbm9kZSBz dHJ1Y3QpIGZvciBmdW5jdGlvbiB2ZXJzaW9ucywgdGhpcworICAgICBwb2lu dHMgdG8gcmVzb2x2ZXIgZnVuY3Rpb24sIHdoaWNoIGhvbGRzIHRoZSBmdW5j dGlvbiBib2R5IG9mIHRoZQorICAgICBkaXNwYXRjaGVyLiBUaGUgZGlzcGF0 Y2hlciBkZWNsIGlzIGFuIGFsaWFzIHRvIHRoZSByZXNvbHZlcgorICAgICBm dW5jdGlvbiBkZWNsLiAgKi8KKyAgdHJlZSBkaXNwYXRjaGVyX3Jlc29sdmVy OworfTsKKworLyogRGVmaW5lZCBpbiBjZ3JhcGguYyAgKi8KKy8qIEdldCB0 aGUgY2dyYXBoX2Z1bmN0aW9uX3ZlcnNpb25faW5mbyBub2RlIGZvciBOT0RF LiAgKi8KK3N0cnVjdCBjZ3JhcGhfZnVuY3Rpb25fdmVyc2lvbl9pbmZvICoK KyAgZ2V0X2NncmFwaF9ub2RlX3ZlcnNpb24gKHN0cnVjdCBjZ3JhcGhfbm9k ZSAqbm9kZSk7CisvKiBNYXAgYSBuZXcgIGNncmFwaF9mdW5jdGlvbl92ZXJz aW9uX2luZm8gbm9kZSBmb3IgTk9ERS4gICovCitzdHJ1Y3QgY2dyYXBoX2Z1 bmN0aW9uX3ZlcnNpb25faW5mbyAqCisgIGluc2VydF9uZXdfY2dyYXBoX25v ZGVfdmVyc2lvbiAoc3RydWN0IGNncmFwaF9ub2RlICpub2RlKTsKKwogLyog VGhlIGNncmFwaCBkYXRhIHN0cnVjdHVyZS4KICAgIEVhY2ggZnVuY3Rpb24g ZGVjbCBoYXMgYXNzaWduZWQgY2dyYXBoX25vZGUgbGlzdGluZyBjYWxsZWVz IGFuZCBjYWxsZXJzLiAgKi8KIApAQCAtMjc5LDYgKzMxMCw4IEBAIHN0cnVj dCBHVFkoKCkpIGNncmFwaF9ub2RlIHsKICAgLyogPz8gV2Ugc2hvdWxkIGJl IGFibGUgdG8gcmVtb3ZlIHRoaXMuICBXZSBoYXZlIGVub3VnaCBiaXRzIGlu CiAgICAgIGNncmFwaCB0byBjYWxjdWxhdGUgaXQuICAqLwogICB1bnNpZ25l ZCB0bV9jbG9uZSA6IDE7CisgIC8qIFRydWUgaWYgdGhpcyBkZWNsIGlzIGEg ZGlzcGF0Y2hlciBmb3IgZnVuY3Rpb24gdmVyc2lvbnMuICAqLworICB1bnNp Z25lZCBkaXNwYXRjaGVyX2Z1bmN0aW9uIDogMTsKIH07CiAKIERFRl9WRUNf UChzeW10YWJfbm9kZSk7CkluZGV4OiBnY2MvdHJlZS5oCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLS0tIGdjYy90cmVlLmgJKHJldmlzaW9uIDE5MjYyMykK KysrIGdjYy90cmVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0NzYsNiArMzQ3 NiwxMiBAQCBleHRlcm4gVkVDKHRyZWUsIGdjKSAqKmRlY2xfZGVidWdfYXJn c19pbnNlcnQgKHRyZQogI2RlZmluZSBERUNMX0ZVTkNUSU9OX1NQRUNJRklD X09QVElNSVpBVElPTihOT0RFKSBcCiAgICAoRlVOQ1RJT05fREVDTF9DSEVD SyAoTk9ERSktPmZ1bmN0aW9uX2RlY2wuZnVuY3Rpb25fc3BlY2lmaWNfb3B0 aW1pemF0aW9uKQogCisvKiBJbiBGVU5DVElPTl9ERUNMLCB0aGlzIGlzIHNl dCBpZiB0aGlzIGZ1bmN0aW9uIGhhcyBvdGhlciB2ZXJzaW9ucyBnZW5lcmF0 ZWQKKyAgIHVzaW5nICJ0YXJnZXQiIGF0dHJpYnV0ZXMuICBUaGUgZGVmYXVs dCB2ZXJzaW9uIGlzIHRoZSBvbmUgd2hpY2ggZG9lcyBub3QKKyAgIGhhdmUg YW55ICJ0YXJnZXQiIGF0dHJpYnV0ZSBzZXQuICovCisjZGVmaW5lIERFQ0xf RlVOQ1RJT05fVkVSU0lPTkVEKE5PREUpXAorICAgKEZVTkNUSU9OX0RFQ0xf Q0hFQ0sgKE5PREUpLT5mdW5jdGlvbl9kZWNsLnZlcnNpb25lZF9mdW5jdGlv bikKKwogLyogRlVOQ1RJT05fREVDTCBpbmhlcml0cyBmcm9tIERFQ0xfTk9O X0NPTU1PTiBiZWNhdXNlIG9mIHRoZSB1c2Ugb2YgdGhlCiAgICBhcmd1bWVu dHMvcmVzdWx0L3NhdmVkX3RyZWUgZmllbGRzIGJ5IGZyb250IGVuZHMuICAg SXQgd2FzIGVpdGhlciBpbmhlcml0CiAgICBGVU5DVElPTl9ERUNMIGZyb20g bm9uX2NvbW1vbiwgb3IgaW5oZXJpdCBub25fY29tbW9uIGZyb20gRlVOQ1RJ T05fREVDTCwKQEAgLTM1MjAsOCArMzUyNiw4IEBAIHN0cnVjdCBHVFkoKCkp IHRyZWVfZnVuY3Rpb25fZGVjbCB7CiAgIHVuc2lnbmVkIGxvb3BpbmdfY29u c3Rfb3JfcHVyZV9mbGFnIDogMTsKICAgdW5zaWduZWQgaGFzX2RlYnVnX2Fy Z3NfZmxhZyA6IDE7CiAgIHVuc2lnbmVkIHRtX2Nsb25lX2ZsYWcgOiAxOwot Ci0gIC8qIDEgYml0IGxlZnQgKi8KKyAgdW5zaWduZWQgdmVyc2lvbmVkX2Z1 bmN0aW9uIDogMTsKKyAgLyogTm8gYml0cyBsZWZ0LiAgKi8KIH07CiAKIC8q IFRoZSBzb3VyY2UgbGFuZ3VhZ2Ugb2YgdGhlIHRyYW5zbGF0aW9uLXVuaXQu ICAqLwpJbmRleDogZ2NjL2NwL2NsYXNzLmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gZ2NjL2NwL2NsYXNzLmMJKHJldmlzaW9uIDE5MjYyMykKKysr IGdjYy9jcC9jbGFzcy5jCSh3b3JraW5nIGNvcHkpCkBAIC0xMDg3LDYgKzEw ODcsMzEgQEAgYWRkX21ldGhvZCAodHJlZSB0eXBlLCB0cmVlIG1ldGhvZCwg dHJlZSB1c2luZ19kZWMKIAkgICAgICB8fCBzYW1lX3R5cGVfcCAoVFJFRV9U WVBFIChmbl90eXBlKSwKIAkJCSAgICAgIFRSRUVfVFlQRSAobWV0aG9kX3R5 cGUpKSkpCiAJeworCSAgLyogRm9yIGZ1bmN0aW9uIHZlcnNpb25zLCB0aGVp ciBwYXJtcyBhbmQgdHlwZXMgbWF0Y2gKKwkgICAgIGJ1dCB0aGV5IGFyZSBu b3QgZHVwbGljYXRlcy4gIFJlY29yZCBmdW5jdGlvbiB2ZXJzaW9ucworCSAg ICAgYXMgYW5kIHdoZW4gdGhleSBhcmUgZm91bmQuICAqLworCSAgaWYgKFRS RUVfQ09ERSAoZm4pID09IEZVTkNUSU9OX0RFQ0wKKwkgICAgICAmJiBUUkVF X0NPREUgKG1ldGhvZCkgPT0gRlVOQ1RJT05fREVDTAorCSAgICAgICYmIChE RUNMX0ZVTkNUSU9OX1NQRUNJRklDX1RBUkdFVCAoZm4pCisJCSAgfHwgREVD TF9GVU5DVElPTl9TUEVDSUZJQ19UQVJHRVQgKG1ldGhvZCkpCisJICAgICAg JiYgdGFyZ2V0bS50YXJnZXRfb3B0aW9uLmZ1bmN0aW9uX3ZlcnNpb25zIChm biwgbWV0aG9kKSkKKyAJICAgIHsKKwkgICAgICAvKiBNYXJrIGZ1bmN0aW9u cyBhcyB2ZXJzaW9ucyBpZiBuZWNlc3NhcnkuICBNb2RpZnkgdGhlIG1hbmds ZWQKKwkJIGRlY2wgbmFtZSBpZiBuZWNlc3NhcnkuICAqLworCSAgICAgIGlm ICghREVDTF9GVU5DVElPTl9WRVJTSU9ORUQgKGZuKSkKKwkJeworCQkgIERF Q0xfRlVOQ1RJT05fVkVSU0lPTkVEIChmbikgPSAxOworCQkgIGlmIChERUNM X0FTU0VNQkxFUl9OQU1FX1NFVF9QIChmbikpCisJCSAgICBtYW5nbGVfZGVj bCAoZm4pOworCQl9CisJICAgICAgaWYgKCFERUNMX0ZVTkNUSU9OX1ZFUlNJ T05FRCAobWV0aG9kKSkKKwkJeworCQkgIERFQ0xfRlVOQ1RJT05fVkVSU0lP TkVEIChtZXRob2QpID0gMTsKKwkJICBpZiAoREVDTF9BU1NFTUJMRVJfTkFN RV9TRVRfUCAobWV0aG9kKSkKKwkJICAgIG1hbmdsZV9kZWNsIChtZXRob2Qp OworCQl9CisJICAgICAgY29udGludWU7CisJICAgIH0KIAkgIGlmIChERUNM X0lOSEVSSVRFRF9DVE9SX0JBU0UgKG1ldGhvZCkpCiAJICAgIHsKIAkgICAg ICBpZiAoREVDTF9JTkhFUklURURfQ1RPUl9CQVNFIChmbikpCkBAIC02OTk1 LDYgKzcwMjAsNyBAQCByZXNvbHZlX2FkZHJlc3Nfb2Zfb3ZlcmxvYWRlZF9m dW5jdGlvbiAodHJlZSB0YXJnZQogICB0cmVlIG1hdGNoZXMgPSBOVUxMX1RS RUU7CiAgIHRyZWUgZm47CiAgIHRyZWUgdGFyZ2V0X2ZuX3R5cGU7CisgIFZF QyAodHJlZSwgaGVhcCkgKmZuX3Zlcl92ZWMgPSBOVUxMOwogCiAgIC8qIEJ5 IHRoZSB0aW1lIHdlIGdldCBoZXJlLCB3ZSBzaG91bGQgYmUgc2VlaW5nIG9u bHkgcmVhbAogICAgICBwb2ludGVyLXRvLW1lbWJlciB0eXBlcywgbm90IHRo ZSBpbnRlcm5hbCBQT0lOVEVSX1RZUEUgdG8KQEAgLTcwNTksOSArNzA4NSwx OSBAQCByZXNvbHZlX2FkZHJlc3Nfb2Zfb3ZlcmxvYWRlZF9mdW5jdGlvbiAo dHJlZSB0YXJnZQogCSAgaWYgKERFQ0xfQU5USUNJUEFURUQgKGZuKSkKIAkg ICAgY29udGludWU7CiAKLQkgIC8qIFNlZSBpZiB0aGVyZSdzIGEgbWF0Y2gu ICAqLworCSAgLyogU2VlIGlmIHRoZXJlJ3MgYSBtYXRjaC4gICBGb3IgZnVu Y3Rpb25zIHRoYXQgYXJlIG11bHRpLXZlcnNpb25lZCwKKwkgICAgIGFsbCB0 aGUgdmVyc2lvbnMgbWF0Y2guICAqLwogCSAgaWYgKHNhbWVfdHlwZV9wICh0 YXJnZXRfZm5fdHlwZSwgc3RhdGljX2ZuX3R5cGUgKGZuKSkpCi0JICAgIG1h dGNoZXMgPSB0cmVlX2NvbnMgKGZuLCBOVUxMX1RSRUUsIG1hdGNoZXMpOwor CSAgICB7CisJICAgICAgbWF0Y2hlcyA9IHRyZWVfY29ucyAoZm4sIE5VTExf VFJFRSwgbWF0Y2hlcyk7CisJICAgICAgLypJZiB2ZXJzaW9uZWQsIHB1c2gg YWxsIHBvc3NpYmxlIHZlcnNpb25zIGludG8gYSB2ZWN0b3IuICAqLworCSAg ICAgIGlmIChERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAoZm4pKQorCQl7CisJ CSAgaWYgKGZuX3Zlcl92ZWMgPT0gTlVMTCkKKwkJICAgZm5fdmVyX3ZlYyA9 IFZFQ19hbGxvYyAodHJlZSwgaGVhcCwgMik7CisJCSAgVkVDX3NhZmVfcHVz aCAodHJlZSwgaGVhcCwgZm5fdmVyX3ZlYywgZm4pOyAKKwkJfQorCSAgICB9 CiAJfQogICAgIH0KIApAQCAtNzE0OSwxMyArNzE4NSwyNiBAQCByZXNvbHZl X2FkZHJlc3Nfb2Zfb3ZlcmxvYWRlZF9mdW5jdGlvbiAodHJlZSB0YXJnZQog ICAgIHsKICAgICAgIC8qIFRoZXJlIHdlcmUgdG9vIG1hbnkgbWF0Y2hlcy4g IEZpcnN0IGNoZWNrIGlmIHRoZXkncmUgYWxsCiAJIHRoZSBzYW1lIGZ1bmN0 aW9uLiAgKi8KLSAgICAgIHRyZWUgbWF0Y2g7CisgICAgICB0cmVlIG1hdGNo ID0gTlVMTF9UUkVFOwogCiAgICAgICBmbiA9IFRSRUVfUFVSUE9TRSAobWF0 Y2hlcyk7Ci0gICAgICBmb3IgKG1hdGNoID0gVFJFRV9DSEFJTiAobWF0Y2hl cyk7IG1hdGNoOyBtYXRjaCA9IFRSRUVfQ0hBSU4gKG1hdGNoKSkKLQlpZiAo IWRlY2xzX21hdGNoIChmbiwgVFJFRV9QVVJQT1NFIChtYXRjaCkpKQotCSAg YnJlYWs7CiAKKyAgICAgIC8qIEZvciBtdWx0aS12ZXJzaW9uZWQgZnVuY3Rp b25zLCBtb3JlIHRoYW4gb25lIG1hdGNoIGlzIGp1c3QgZmluZS4KKwkgQ2Fs bCBkZWNsc19tYXRjaCB0byBtYWtlIHN1cmUgdGhleSBhcmUgZGlmZmVyZW50 IGJlY2F1c2UgdGhleSBhcmUKKwkgdmVyc2lvbmVkLiAgKi8KKyAgICAgIGlm IChERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAoZm4pKQorCXsKKyAgICAgICAg ICBmb3IgKG1hdGNoID0gVFJFRV9DSEFJTiAobWF0Y2hlcyk7IG1hdGNoOyBt YXRjaCA9IFRSRUVfQ0hBSU4gKG1hdGNoKSkKKyAgCSAgICBpZiAoZGVjbHNf bWF0Y2ggKGZuLCBUUkVFX1BVUlBPU0UgKG1hdGNoKSkpCisJICAgICAgYnJl YWs7CisJfQorICAgICAgZWxzZQorCXsKKyAgICAgICAgICBmb3IgKG1hdGNo ID0gVFJFRV9DSEFJTiAobWF0Y2hlcyk7IG1hdGNoOyBtYXRjaCA9IFRSRUVf Q0hBSU4gKG1hdGNoKSkKKyAgCSAgICBpZiAoIWRlY2xzX21hdGNoIChmbiwg VFJFRV9QVVJQT1NFIChtYXRjaCkpKQorCSAgICAgIGJyZWFrOworCX0KKwog ICAgICAgaWYgKG1hdGNoKQogCXsKIAkgIGlmIChmbGFncyAmIHRmX2Vycm9y KQpAQCAtNzIxNyw2ICs3MjY2LDMzIEBAIHJlc29sdmVfYWRkcmVzc19vZl9v dmVybG9hZGVkX2Z1bmN0aW9uICh0cmVlIHRhcmdlCiAgICAgICBwZXJmb3Jt X29yX2RlZmVyX2FjY2Vzc19jaGVjayAoYWNjZXNzX3BhdGgsIGZuLCBmbiwg ZmxhZ3MpOwogICAgIH0KIAorICAvKiBJZiBhIHBvaW50ZXIgdG8gYSBmdW5j dGlvbiB0aGF0IGlzIG11bHRpLXZlcnNpb25lZCBpcyByZXF1ZXN0ZWQsIHRo ZQorICAgICBwb2ludGVyIHRvIHRoZSBkaXNwYXRjaGVyIGZ1bmN0aW9uIGlz IHJldHVybmVkIGluc3RlYWQuICBUaGlzIHdvcmtzCisgICAgIHdlbGwgYmVj YXVzZSBpbmRpcmVjdGx5IGNhbGxpbmcgdGhlIGZ1bmN0aW9uIHdpbGwgZGlz cGF0Y2ggdGhlIHJpZ2h0CisgICAgIGZ1bmN0aW9uIHZlcnNpb24gYXQgcnVu LXRpbWUuICAqLworICBpZiAoREVDTF9GVU5DVElPTl9WRVJTSU9ORUQgKGZu KSkKKyAgICB7CisgICAgICBzdHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUgPSBO VUxMOworICAgICAgdHJlZSBkaXNwYXRjaGVyX2RlY2wgPSBOVUxMOworICAg ICAgZ2NjX2Fzc2VydCAoZm5fdmVyX3ZlYyAhPSBOVUxMKTsKKyAgICAgIGdj Y19hc3NlcnQgKHRhcmdldG0uZ2V0X2Z1bmN0aW9uX3ZlcnNpb25zX2Rpc3Bh dGNoZXIpOworICAgICAgZGlzcGF0Y2hlcl9kZWNsID0gdGFyZ2V0bS5nZXRf ZnVuY3Rpb25fdmVyc2lvbnNfZGlzcGF0Y2hlciAoZm5fdmVyX3ZlYyk7Cisg ICAgICBpZiAoIWRpc3BhdGNoZXJfZGVjbCkKKwl7CisJICBlcnJvcl9hdCAo aW5wdXRfbG9jYXRpb24sICJQb2ludGVyIHRvIGEgbXVsdGl2ZXJzaW9uZWQg ZnVuY3Rpb24iCisJCSAgICAiIHdpdGhvdXQgYSBkZWZhdWx0IGlzIG5vdCBh bGxvd2VkIik7CisJICByZXR1cm4gZXJyb3JfbWFya19ub2RlOworCX0KKyAg ICAgIHJldHJvZml0X2xhbmdfZGVjbCAoZGlzcGF0Y2hlcl9kZWNsKTsKKyAg ICAgIG1hcmtfdXNlZCAoZm4pOworICAgICAgVkVDX2ZyZWUgKHRyZWUsIGhl YXAsIGZuX3Zlcl92ZWMpOworICAgICAgbm9kZSA9IGNncmFwaF9nZXRfY3Jl YXRlX25vZGUgKGRpc3BhdGNoZXJfZGVjbCk7CisgICAgICBnY2NfYXNzZXJ0 IChub2RlICE9IE5VTEwpOworICAgICAgLyogTWFyayB0aGlzIGZ1bmN0aW8g dG8gYmUgb3V0cHV0LiAgKi8KKyAgICAgIG5vZGUtPmxvY2FsLmZpbmFsaXpl ZCA9IDE7CisgICAgICBmbiA9IGRpc3BhdGNoZXJfZGVjbDsKKyAgICB9CisK ICAgaWYgKFRZUEVfUFRSRk5fUCAodGFyZ2V0X3R5cGUpIHx8IFRZUEVfUFRS TUVNRlVOQ19QICh0YXJnZXRfdHlwZSkpCiAgICAgcmV0dXJuIGNwX2J1aWxk X2FkZHJfZXhwciAoZm4sIGZsYWdzKTsKICAgZWxzZQpJbmRleDogZ2NjL2Nw L2RlY2wuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvY3AvZGVj bC5jCShyZXZpc2lvbiAxOTI2MjMpCisrKyBnY2MvY3AvZGVjbC5jCSh3b3Jr aW5nIGNvcHkpCkBAIC01Myw2ICs1Myw3IEBAIGFsb25nIHdpdGggR0NDOyBz ZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCiAjaW5jbHVkZSAi cG9pbnRlci1zZXQuaCIKICNpbmNsdWRlICJzcGxheS10cmVlLmgiCiAjaW5j bHVkZSAicGx1Z2luLmgiCisjaW5jbHVkZSAiY2dyYXBoLmgiCiAKIC8qIFBv c3NpYmxlIGNhc2VzIG9mIGJhZCBzcGVjaWZpZXJzIHR5cGUgdXNlZCBieSBi YWRfc3BlY2lmaWVycy4gKi8KIGVudW0gYmFkX3NwZWNfcGxhY2UgewpAQCAt OTgxLDYgKzk4MiwyOSBAQCBkZWNsc19tYXRjaCAodHJlZSBuZXdkZWNsLCB0 cmVlIG9sZGRlY2wpCiAgICAgICBpZiAodDEgIT0gdDIpCiAJcmV0dXJuIDA7 CiAKKyAgICAgIC8qIFRoZSBkZWNscyBkb250IG1hdGNoIGlmIHRoZXkgY29y cmVzcG9uZCB0byB0d28gZGlmZmVyZW50IHZlcnNpb25zCisJIG9mIHRoZSBz YW1lIGZ1bmN0aW9uLiAgKi8KKyAgICAgIGlmIChjb21wcGFybXMgKHAxLCBw MikKKwkgICYmIHNhbWVfdHlwZV9wIChUUkVFX1RZUEUgKGYxKSwgVFJFRV9U WVBFIChmMikpIAorCSAgJiYgdGFyZ2V0bS50YXJnZXRfb3B0aW9uLmZ1bmN0 aW9uX3ZlcnNpb25zIChuZXdkZWNsLCBvbGRkZWNsKSkKKwl7CisJICAvKiBN YXJrIGZ1bmN0aW9ucyBhcyB2ZXJzaW9ucyBpZiBuZWNlc3NhcnkuICBNb2Rp ZnkgdGhlIG1hbmdsZWQgZGVjbAorCSAgICAgbmFtZSBpZiBuZWNlc3Nhcnku ICAqLworCSAgaWYgKCFERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAobmV3ZGVj bCkpCisJICAgIHsKKwkgICAgICBERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAo bmV3ZGVjbCkgPSAxOworCSAgICAgIGlmIChERUNMX0FTU0VNQkxFUl9OQU1F X1NFVF9QIChuZXdkZWNsKSkKKwkgICAgICAgIG1hbmdsZV9kZWNsIChuZXdk ZWNsKTsKKwkgICAgfQorCSAgaWYgKCFERUNMX0ZVTkNUSU9OX1ZFUlNJT05F RCAob2xkZGVjbCkpCisJICAgIHsKKwkgICAgICBERUNMX0ZVTkNUSU9OX1ZF UlNJT05FRCAob2xkZGVjbCkgPSAxOworCSAgICAgIGlmIChERUNMX0FTU0VN QkxFUl9OQU1FX1NFVF9QIChvbGRkZWNsKSkKKwkgICAgICAgbWFuZ2xlX2Rl Y2wgKG9sZGRlY2wpOworCSAgICB9CisJICByZXR1cm4gMDsKKwl9CisKICAg ICAgIGlmIChDUF9ERUNMX0NPTlRFWFQgKG5ld2RlY2wpICE9IENQX0RFQ0xf Q09OVEVYVCAob2xkZGVjbCkKIAkgICYmICEgKERFQ0xfRVhURVJOX0NfUCAo bmV3ZGVjbCkKIAkJJiYgREVDTF9FWFRFUk5fQ19QIChvbGRkZWNsKSkpCkBA IC0xNDk5LDcgKzE1MjMsMTEgQEAgZHVwbGljYXRlX2RlY2xzICh0cmVlIG5l d2RlY2wsIHRyZWUgb2xkZGVjbCwgYm9vbAogCSAgICAgIGVycm9yICgicHJl dmlvdXMgZGVjbGFyYXRpb24gJXErI0QgaGVyZSIsIG9sZGRlY2wpOwogCSAg ICAgIHJldHVybiBOVUxMX1RSRUU7CiAJICAgIH0KLQkgIGVsc2UgaWYgKGNv bXBwYXJtcyAoVFlQRV9BUkdfVFlQRVMgKFRSRUVfVFlQRSAobmV3ZGVjbCkp LAorCSAgLyogRm9yIGZ1bmN0aW9uIHZlcnNpb25zLCBwYXJhbXMgYW5kIHR5 cGVzIG1hdGNoLCBidXQgdGhleQorCSAgICAgYXJlIG5vdCBhbWJpZ3VvdXMu ICAqLworCSAgZWxzZSBpZiAoKCFERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAo bmV3ZGVjbCkKKwkJICAgICYmICFERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAo b2xkZGVjbCkpCisJCSAgICYmIGNvbXBwYXJtcyAoVFlQRV9BUkdfVFlQRVMg KFRSRUVfVFlQRSAobmV3ZGVjbCkpLAogCQkJICAgICAgVFlQRV9BUkdfVFlQ RVMgKFRSRUVfVFlQRSAob2xkZGVjbCkpKSkKIAkgICAgewogCSAgICAgIGVy cm9yICgibmV3IGRlY2xhcmF0aW9uICVxI0QiLCBuZXdkZWNsKTsKQEAgLTIy NzIsNiArMjMwMCwxMSBAQCBkdXBsaWNhdGVfZGVjbHMgKHRyZWUgbmV3ZGVj bCwgdHJlZSBvbGRkZWNsLCBib29sCiAgIGVsc2UgaWYgKERFQ0xfUFJFU0VS VkVfUCAobmV3ZGVjbCkpCiAgICAgREVDTF9QUkVTRVJWRV9QIChvbGRkZWNs KSA9IDE7CiAKKyAgLyogSWYgdGhlIG9sZGRlY2wgaXMgYSB2ZXJzaW9uLCBz byBpcyB0aGUgbmV3ZGVjbC4gICovCisgIGlmIChUUkVFX0NPREUgKG5ld2Rl Y2wpID09IEZVTkNUSU9OX0RFQ0wKKyAgICAgICYmIERFQ0xfRlVOQ1RJT05f VkVSU0lPTkVEIChvbGRkZWNsKSkKKyAgICBERUNMX0ZVTkNUSU9OX1ZFUlNJ T05FRCAobmV3ZGVjbCkgPSAxOworCiAgIGlmIChUUkVFX0NPREUgKG5ld2Rl Y2wpID09IEZVTkNUSU9OX0RFQ0wpCiAgICAgewogICAgICAgaW50IGZ1bmN0 aW9uX3NpemU7CkBAIC0xNDIyNyw3ICsxNDI2MCwxMSBAQCBjeHhfY29tZGF0 X2dyb3VwICh0cmVlIGRlY2wpCiAJICBlbHNlCiAJICAgIGJyZWFrOwogCX0K LSAgICAgIG5hbWUgPSBERUNMX0FTU0VNQkxFUl9OQU1FIChkZWNsKTsKKyAg ICAgIGlmIChUUkVFX0NPREUgKGRlY2wpID09IEZVTkNUSU9OX0RFQ0wKKwkg ICYmIERFQ0xfRlVOQ1RJT05fVkVSU0lPTkVEIChkZWNsKSkKKwluYW1lID0g REVDTF9OQU1FIChkZWNsKTsKKyAgICAgIGVsc2UKKyAgICAgICAgbmFtZSA9 IERFQ0xfQVNTRU1CTEVSX05BTUUgKGRlY2wpOwogICAgIH0KIAogICByZXR1 cm4gbmFtZTsKSW5kZXg6IGdjYy9jcC9lcnJvci5jCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tIGdjYy9jcC9lcnJvci5jCShyZXZpc2lvbiAxOTI2MjMp CisrKyBnY2MvY3AvZXJyb3IuYwkod29ya2luZyBjb3B5KQpAQCAtMTU0MSw4 ICsxNTQxLDE2IEBAIGR1bXBfZXhjZXB0aW9uX3NwZWMgKHRyZWUgdCwgaW50 IGZsYWdzKQogc3RhdGljIHZvaWQKIGR1bXBfZnVuY3Rpb25fbmFtZSAodHJl ZSB0LCBpbnQgZmxhZ3MpCiB7Ci0gIHRyZWUgbmFtZSA9IERFQ0xfTkFNRSAo dCk7CisgIHRyZWUgbmFtZTsKIAorICAvKiBGb3IgZnVuY3Rpb24gdmVyc2lv bnMsIHVzZSB0aGUgYXNzZW1ibGVyIG5hbWUgYXMgdGhlIGRlY2wgbmFtZSBp cworICAgICB0aGUgc2FtZSBmb3IgYWxsIHZlcnNpb25zLiAgKi8KKyAgaWYg KFRSRUVfQ09ERSAodCkgPT0gRlVOQ1RJT05fREVDTAorICAgICAgJiYgREVD TF9GVU5DVElPTl9WRVJTSU9ORUQgKHQpKQorICAgIG5hbWUgPSBERUNMX0FT U0VNQkxFUl9OQU1FICh0KTsKKyAgZWxzZQorICAgIG5hbWUgPSBERUNMX05B TUUgKHQpOworCiAgIC8qIFdlIGNhbiBnZXQgaGVyZSB3aXRoIGEgZGVjbCB0 aGF0IHdhcyBzeW50aGVzaXplZCBieSBsYW5ndWFnZS0KICAgICAgaW5kZXBl bmRlbnQgbWFjaGluZXJ5IChlLmcuIGNvdmVyYWdlLmMpIGluIHdoaWNoIGNh c2UgaXQgd29uJ3QKICAgICAgaGF2ZSBhIGxhbmdfc3BlY2lmaWMgc3RydWN0 dXJlIGF0dGFjaGVkIGFuZCBERUNMX0NPTlNUUlVDVE9SX1AKSW5kZXg6IGdj Yy9jcC9zZW1hbnRpY3MuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBn Y2MvY3Avc2VtYW50aWNzLmMJKHJldmlzaW9uIDE5MjYyMykKKysrIGdjYy9j cC9zZW1hbnRpY3MuYwkod29ya2luZyBjb3B5KQpAQCAtMzgxMyw4ICszODEz LDExIEBAIGV4cGFuZF9vcl9kZWZlcl9mbl8xICh0cmVlIGZuKQogICAgICAg LyogSWYgdGhlIHVzZXIgd2FudHMgdXMgdG8ga2VlcCBhbGwgaW5saW5lIGZ1 bmN0aW9ucywgdGhlbiBtYXJrCiAJIHRoaXMgZnVuY3Rpb24gYXMgbmVlZGVk IHNvIHRoYXQgZmluaXNoX2ZpbGUgd2lsbCBtYWtlIHN1cmUgdG8KIAkgb3V0 cHV0IGl0IGxhdGVyLiAgU2ltaWxhcmx5LCBhbGwgZGxsZXhwb3J0J2QgZnVu Y3Rpb25zIG11c3QKLQkgYmUgZW1pdHRlZDsgdGhlcmUgbWF5IGJlIGNhbGxl cnMgaW4gb3RoZXIgRExMcy4gICovCi0gICAgICBpZiAoKGZsYWdfa2VlcF9p bmxpbmVfZnVuY3Rpb25zCisJIGJlIGVtaXR0ZWQ7IHRoZXJlIG1heSBiZSBj YWxsZXJzIGluIG90aGVyIERMTHMuCisJIEFsc28sIG1hcmsgdGhpcyBmdW5j dGlvbiBhcyBuZWVkZWQgaWYgaXQgaXMgbWFya2VkIGlubGluZSBidXQKKwkg aXMgYSBtdWx0aS12ZXJzaW9uZWQgZnVuY3Rpb24uICAqLworICAgICAgaWYg KCgoZmxhZ19rZWVwX2lubGluZV9mdW5jdGlvbnMKKwkgICAgfHwgREVDTF9G VU5DVElPTl9WRVJTSU9ORUQgKGZuKSkKIAkgICAmJiBERUNMX0RFQ0xBUkVE X0lOTElORV9QIChmbikKIAkgICAmJiAhREVDTF9SRUFMTFlfRVhURVJOIChm bikpCiAJICB8fCAoZmxhZ19rZWVwX2lubGluZV9kbGxleHBvcnQKSW5kZXg6 IGdjYy9jcC9kZWNsMi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdj Yy9jcC9kZWNsMi5jCShyZXZpc2lvbiAxOTI2MjMpCisrKyBnY2MvY3AvZGVj bDIuYwkod29ya2luZyBjb3B5KQpAQCAtNjc0LDkgKzY3NCwxMyBAQCBjaGVj a19jbGFzc2ZuICh0cmVlIGN0eXBlLCB0cmVlIGZ1bmN0aW9uLCB0cmVlIHRl bQogCSAgaWYgKGlzX3RlbXBsYXRlICE9IChUUkVFX0NPREUgKGZuZGVjbCkg PT0gVEVNUExBVEVfREVDTCkpCiAJICAgIGNvbnRpbnVlOwogCisJICAvKiBX aGlsZSBmaW5kaW5nIGEgbWF0Y2gsIHNhbWUgdHlwZXMgYW5kIHBhcmFtcyBh cmUgbm90IGVub3VnaAorCSAgICAgaWYgdGhlIGZ1bmN0aW9uIGlzIHZlcnNp b25lZC4gIEFsc28gY2hlY2sgdmVyc2lvbiAoInRhcmdldCIpCisJICAgICBh dHRyaWJ1dGVzLiAgKi8KIAkgIGlmIChzYW1lX3R5cGVfcCAoVFJFRV9UWVBF IChUUkVFX1RZUEUgKGZ1bmN0aW9uKSksCiAJCQkgICBUUkVFX1RZUEUgKFRS RUVfVFlQRSAoZm5kZWNsKSkpCiAJICAgICAgJiYgY29tcHBhcm1zIChwMSwg cDIpCisJICAgICAgJiYgIXRhcmdldG0udGFyZ2V0X29wdGlvbi5mdW5jdGlv bl92ZXJzaW9ucyAoZnVuY3Rpb24sIGZuZGVjbCkKIAkgICAgICAmJiAoIWlz X3RlbXBsYXRlCiAJCSAgfHwgY29tcF90ZW1wbGF0ZV9wYXJtcyAodGVtcGxh dGVfcGFybXMsCiAJCQkJCSAgREVDTF9URU1QTEFURV9QQVJNUyAoZm5kZWNs KSkpCkluZGV4OiBnY2MvY3AvY2FsbC5jCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIGdjYy9jcC9jYWxsLmMJKHJldmlzaW9uIDE5MjYyMykKKysrIGdj Yy9jcC9jYWxsLmMJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAg YWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5v dCBzZWUKICNpbmNsdWRlICJsYW5naG9va3MuaCIKICNpbmNsdWRlICJjLWZh bWlseS9jLW9iamMuaCIKICNpbmNsdWRlICJ0aW1ldmFyLmgiCisjaW5jbHVk ZSAiY2dyYXBoLmgiCiAKIC8qIFRoZSB2YXJpb3VzIGtpbmRzIG9mIGNvbnZl cnNpb24uICAqLwogCkBAIC02NDQ0LDYgKzY0NDUsNDIgQEAgbWFnaWNfdmFy YXJnc19wICh0cmVlIGZuKQogICByZXR1cm4gZmFsc2U7CiB9CiAKKy8qIFJl dHVybnMgdGhlIGRlY2wgb2YgdGhlIGRpc3BhdGNoZXIgZnVuY3Rpb24gaWYg Rk4gaXMgYSBmdW5jdGlvbiB2ZXJzaW9uLiAgKi8KKworc3RhdGljIHRyZWUK K2dldF9mdW5jdGlvbl92ZXJzaW9uX2Rpc3BhdGNoZXIgKHRyZWUgZm4pCit7 CisgIHRyZWUgZGlzcGF0Y2hlcl9kZWNsID0gTlVMTDsKKyAgc3RydWN0IGNn cmFwaF9ub2RlICpub2RlID0gTlVMTDsKKyAgc3RydWN0IGNncmFwaF9mdW5j dGlvbl92ZXJzaW9uX2luZm8gKm5vZGVfdmVyc2lvbl9pbmZvID0gTlVMTDsK KworICBnY2NfYXNzZXJ0IChUUkVFX0NPREUgKGZuKSA9PSBGVU5DVElPTl9E RUNMCisJICAgICAgJiYgREVDTF9GVU5DVElPTl9WRVJTSU9ORUQgKGZuKSk7 CisKKyAgbm9kZSA9IGNncmFwaF9nZXRfbm9kZSAoZm4pOworCisgIGlmIChu b2RlID09IE5VTEwpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgbm9kZV92ZXJz aW9uX2luZm8gPSBnZXRfY2dyYXBoX25vZGVfdmVyc2lvbiAobm9kZSk7CisK KyAgaWYgKG5vZGVfdmVyc2lvbl9pbmZvICE9IE5VTEwpCisgICAgZGlzcGF0 Y2hlcl9kZWNsID0gbm9kZV92ZXJzaW9uX2luZm8tPmRpc3BhdGNoZXJfcmVz b2x2ZXI7CisgIGVsc2UKKyAgICByZXR1cm4gTlVMTDsKKworICBpZiAoZGlz cGF0Y2hlcl9kZWNsID09IE5VTEwpCisgICAgeworICAgICAgZXJyb3JfYXQg KGlucHV0X2xvY2F0aW9uLCAiQ2FsbCB0byBtdWx0aXZlcnNpb25lZCBmdW5j dGlvbiIKKyAgICAgICAgICAgICAgICAiIHdpdGhvdXQgYSBkZWZhdWx0IGlz IG5vdCBhbGxvd2VkIik7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisK KyAgcmV0cm9maXRfbGFuZ19kZWNsIChkaXNwYXRjaGVyX2RlY2wpOworICBn Y2NfYXNzZXJ0IChkaXNwYXRjaGVyX2RlY2wgIT0gTlVMTCk7CisgIHJldHVy biBkaXNwYXRjaGVyX2RlY2w7Cit9CisKIC8qIFN1YnJvdXRpbmUgb2YgdGhl IHZhcmlvdXMgYnVpbGRfKl9jYWxsIGZ1bmN0aW9ucy4gIE92ZXJsb2FkIHJl c29sdXRpb24KICAgIGhhcyBjaG9zZW4gYSB3aW5uaW5nIGNhbmRpZGF0ZSBD QU5EOyBidWlsZCB1cCBhIENBTExfRVhQUiBhY2NvcmRpbmdseS4KICAgIEFS R1MgaXMgYSBUUkVFX0xJU1Qgb2YgdGhlIHVuY29udmVydGVkIGFyZ3VtZW50 cyB0byB0aGUgY2FsbC4gIEZMQUdTIGlzIGEKQEAgLTY4OTYsNiArNjkzMywy NSBAQCBidWlsZF9vdmVyX2NhbGwgKHN0cnVjdCB6X2NhbmRpZGF0ZSAqY2Fu ZCwgaW50IGZsYQogICBpZiAoIWFscmVhZHlfdXNlZCkKICAgICBtYXJrX3Vz ZWQgKGZuKTsKIAorICAvKiBGb3IgY2FsbHMgdG8gYSBtdWx0aS12ZXJzaW9u ZWQgZnVuY3Rpb24sIG92ZXJsb2FkIHJlc29sdXRpb24KKyAgICAgcmV0dXJu cyB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgaGlnaGVzdCB0YXJnZXQgcHJpb3Jp dHksIHRoYXQgaXMsCisgICAgIHRoZSB2ZXJzaW9uIHRoYXQgd2lsbCBjaGVj a2VkIGZvciBkaXNwYXRjaGluZyBmaXJzdC4gIElmIHRoaXMKKyAgICAgdmVy c2lvbiBpcyBpbmxpbmFibGUsIGEgZGlyZWN0IGNhbGwgdG8gdGhpcyB2ZXJz aW9uIGNhbiBiZSBtYWRlCisgICAgIG90aGVyd2lzZSB0aGUgY2FsbCBzaG91 bGQgZ28gdGhyb3VnaCB0aGUgZGlzcGF0Y2hlci4gICovCisKKyAgaWYgKERF Q0xfRlVOQ1RJT05fVkVSU0lPTkVEIChmbikKKyAgICAgICYmICF0YXJnZXRt LnRhcmdldF9vcHRpb24uY2FuX2lubGluZV9wIChjdXJyZW50X2Z1bmN0aW9u X2RlY2wsIGZuKSkKKyAgICB7CisgICAgICBzdHJ1Y3QgY2dyYXBoX25vZGUg KmRpc3BhdGNoZXJfbm9kZSA9IE5VTEw7CisgICAgICBmbiA9IGdldF9mdW5j dGlvbl92ZXJzaW9uX2Rpc3BhdGNoZXIgKGZuKTsKKyAgICAgIGlmIChmbiA9 PSBOVUxMKQorCXJldHVybiBOVUxMOworICAgICAgZGlzcGF0Y2hlcl9ub2Rl ID0gY2dyYXBoX2dldF9jcmVhdGVfbm9kZSAoZm4pOworICAgICAgZ2NjX2Fz c2VydCAoZGlzcGF0Y2hlcl9ub2RlICE9IE5VTEwpOworICAgICAgLyogTWFy ayB0aGlzIGZ1bmN0aW9uIHRvIGJlIG91dHB1dC4gICovCisgICAgICBkaXNw YXRjaGVyX25vZGUtPmxvY2FsLmZpbmFsaXplZCA9IDE7CisgICAgfQorCiAg IGlmIChERUNMX1ZJTkRFWCAoZm4pICYmIChmbGFncyAmIExPT0tVUF9OT05W SVJUVUFMKSA9PSAwKQogICAgIHsKICAgICAgIHRyZWUgdDsKQEAgLTgxNzYs NiArODIzMiwzOCBAQCBqb3VzdCAoc3RydWN0IHpfY2FuZGlkYXRlICpjYW5k MSwgc3RydWN0IHpfY2FuZGlkYQogICAgICAgJiYgKElTX1RZUEVfT1JfREVD TF9QIChjYW5kMS0+Zm4pKSkKICAgICByZXR1cm4gMTsKIAorICAvKiBGb3Ig Y2FuZGlkYXRlcyBvZiBhIG11bHRpLXZlcnNpb25lZCBmdW5jdGlvbiwgIG1h a2UgdGhlIHZlcnNpb24gd2l0aAorICAgICB0aGUgaGlnaGVzdCBwcmlvcml0 eSB3aW4uICBUaGlzIHZlcnNpb24gd2lsbCBiZSBjaGVja2VkIGZvciBkaXNw YXRjaGluZworICAgICBmaXJzdC4gIElmIHRoaXMgdmVyc2lvbiBjYW4gYmUg aW5saW5lZCBpbnRvIHRoZSBjYWxsZXIsIHRoZSBmcm9udC1lbmQKKyAgICAg d2lsbCBzaW1wbHkgbWFrZSBhIGRpcmVjdCBjYWxsIHRvIHRoaXMgZnVuY3Rp b24uICAqLworCisgIGlmIChUUkVFX0NPREUgKGNhbmQxLT5mbikgPT0gRlVO Q1RJT05fREVDTAorICAgICAgJiYgREVDTF9GVU5DVElPTl9WRVJTSU9ORUQg KGNhbmQxLT5mbikKKyAgICAgICYmIFRSRUVfQ09ERSAoY2FuZDItPmZuKSA9 PSBGVU5DVElPTl9ERUNMCisgICAgICAmJiBERUNMX0ZVTkNUSU9OX1ZFUlNJ T05FRCAoY2FuZDItPmZuKSkKKyAgICB7CisgICAgICB0cmVlIGYxID0gVFJF RV9UWVBFIChjYW5kMS0+Zm4pOworICAgICAgdHJlZSBmMiA9IFRSRUVfVFlQ RSAoY2FuZDItPmZuKTsKKyAgICAgIHRyZWUgcDEgPSBUWVBFX0FSR19UWVBF UyAoZjEpOworICAgICAgdHJlZSBwMiA9IFRZUEVfQVJHX1RZUEVTIChmMik7 CisgICAgIAorICAgICAgLyogQ2hlY2sgaWYgY2FuZDEtPmZuIGFuZCBjYW5k Mi0+Zm4gYXJlIHZlcnNpb25zIG9mIHRoZSBzYW1lIGZ1bmN0aW9uLiAgSXQK KyAgICAgICAgIGlzIHBvc3NpYmxlIHRoYXQgY2FuZDEtPmZuIGFuZCBjYW5k Mi0+Zm4gYXJlIGZ1bmN0aW9uIHZlcnNpb25zIGJ1dCBvZgorICAgICAgICAg ZGlmZmVyZW50IGZ1bmN0aW9ucy4gIENoZWNrIHR5cGVzIHRvIHNlZSBpZiB0 aGV5IGFyZSB2ZXJzaW9ucyBvZiB0aGUgc2FtZQorICAgICAgICAgZnVuY3Rp b24uICAqLworICAgICAgaWYgKGNvbXBwYXJtcyAocDEsIHAyKQorCSAgJiYg c2FtZV90eXBlX3AgKFRSRUVfVFlQRSAoZjEpLCBUUkVFX1RZUEUgKGYyKSkp CisJeworCSAgLyogQWx3YXlzIG1ha2UgdGhlIHZlcnNpb24gd2l0aCB0aGUg aGlnaGVyIHByaW9yaXR5LCBtb3JlCisJICAgICBzcGVjaWFsaXplZCwgd2lu LiAgKi8KKwkgIGdjY19hc3NlcnQgKHRhcmdldG0uY29tcGFyZV92ZXJzaW9u X3ByaW9yaXR5KTsKKwkgIGlmICh0YXJnZXRtLmNvbXBhcmVfdmVyc2lvbl9w cmlvcml0eSAoY2FuZDEtPmZuLCBjYW5kMi0+Zm4pID49IDApCisJICAgIHJl dHVybiAxOworCSAgZWxzZQorCSAgICByZXR1cm4gLTE7CisJfQorICAgIH0K KwogICAvKiBhIHZpYWJsZSBmdW5jdGlvbiBGMQogICAgICBpcyBkZWZpbmVk IHRvIGJlIGEgYmV0dGVyIGZ1bmN0aW9uIHRoYW4gYW5vdGhlciB2aWFibGUg ZnVuY3Rpb24gRjIgIGlmCiAgICAgIGZvciAgYWxsIGFyZ3VtZW50cyBpLCBJ Q1NpKEYxKSBpcyBub3QgYSB3b3JzZSBjb252ZXJzaW9uIHNlcXVlbmNlIHRo YW4KQEAgLTg0OTYsNiArODU4NCwzNyBAQCB0d2VhazoKICAgcmV0dXJuIDA7 CiB9CiAKKy8qIEZ1bmN0aW9uIEZOIGlzIG11bHRpLXZlcnNpb25lZCBhbmQg Q0FORElEQVRFUyBjb250YWlucyB0aGUgbGlzdCBvZiBhbGwKKyAgIG92ZXJs b2FkZWQgY2FuZGlkYXRlcyBmb3IgRk4uICBUaGlzIGZ1bmN0aW9uIGV4dHJh Y3RzIGFsbCBmdW5jdGlvbnMgZnJvbQorICAgQ0FORElEQVRFUyB0aGF0IGFy ZSBmdW5jdGlvbiB2ZXJzaW9ucyBvZiBGTiBhbmQgZ2VuZXJhdGVzIGEgZGlz cGF0Y2hlcgorICAgZnVuY3Rpb24gZm9yIHRoaXMgbXVsdGktdmVyc2lvbmVk IGZ1bmN0aW9uIGdyb3VwLiAgKi8KKworc3RhdGljIHZvaWQKK2dlbmVyYXRl X2Z1bmN0aW9uX3ZlcnNpb25zX2Rpc3BhdGNoZXIgKHRyZWUgZm4sIHN0cnVj dCB6X2NhbmRpZGF0ZSAqY2FuZGlkYXRlcykKK3sKKyAgdHJlZSBmMSA9IFRS RUVfVFlQRSAoZm4pOworICB0cmVlIHAxID0gVFlQRV9BUkdfVFlQRVMgKGYx KTsKKyAgVkVDICh0cmVlLCBoZWFwKSAqZm5fdmVyX3ZlYyA9IE5VTEw7Cisg IHN0cnVjdCB6X2NhbmRpZGF0ZSAqdmVyID0gY2FuZGlkYXRlczsKKworICBm bl92ZXJfdmVjID0gVkVDX2FsbG9jICh0cmVlLCBoZWFwLCAyKTsKKworICBm b3IgKDt2ZXI7IHZlciA9IHZlci0+bmV4dCkKKyAgICB7CisgICAgICB0cmVl IGYyID0gVFJFRV9UWVBFICh2ZXItPmZuKTsKKyAgICAgIHRyZWUgcDIgPSBU WVBFX0FSR19UWVBFUyAoZjIpOworICAgICAgLyogSWYgdGhpcyBjYW5kaWRh dGUgaXMgYSB2ZXJzaW9uIG9mIEZOLCB0eXBlcyBtdXN0IG1hdGNoLiAgKi8K KyAgICAgIGlmIChERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAodmVyLT5mbikK KyAgICAgICAgICAmJiBjb21wcGFybXMgKHAxLCBwMikKKwkgICYmIHNhbWVf dHlwZV9wIChUUkVFX1RZUEUgKGYxKSwgVFJFRV9UWVBFIChmMikpKQorICAg ICAgICBWRUNfc2FmZV9wdXNoICh0cmVlLCBoZWFwLCBmbl92ZXJfdmVjLCB2 ZXItPmZuKTsKKyAgICB9CisKKyAgZ2NjX2Fzc2VydCAodGFyZ2V0bS5nZXRf ZnVuY3Rpb25fdmVyc2lvbnNfZGlzcGF0Y2hlcik7CisgIHRhcmdldG0uZ2V0 X2Z1bmN0aW9uX3ZlcnNpb25zX2Rpc3BhdGNoZXIgKGZuX3Zlcl92ZWMpOwor ICBWRUNfZnJlZSAodHJlZSwgaGVhcCwgZm5fdmVyX3ZlYyk7IAorfQorCiAv KiBHaXZlbiBhIGxpc3Qgb2YgY2FuZGlkYXRlcyBmb3Igb3ZlcmxvYWRpbmcs IGZpbmQgdGhlIGJlc3Qgb25lLCBpZiBhbnkuCiAgICBUaGlzIGFsZ29yaXRo bSBoYXMgYSB3b3JzdCBjYXNlIG9mIE8oMm4pICh3aW5uZXIgaXMgbGFzdCks IGFuZCBhIGJlc3QKICAgIGNhc2Ugb2YgTyhuLzIpICh0b3RhbGx5IGFtYmln dW91cyk7IG11Y2ggYmV0dGVyIHRoYW4gYSBzb3J0aW5nCkBAIC04NTQ4LDYg Kzg2NjcsMjMgQEAgdG91cm5leSAoc3RydWN0IHpfY2FuZGlkYXRlICpjYW5k aWRhdGVzLCB0c3Vic3RfZmwKIAlyZXR1cm4gTlVMTDsKICAgICB9CiAKKyAg LyogRm9yIG11bHRpdmVyc2lvbmVkIGZ1bmN0aW9ucywgYWdncmVnYXRlIGFs bCB0aGUgdmVyc2lvbnMgaGVyZSBmb3IKKyAgICAgZ2VuZXJhdGluZyB0aGUg ZGlzcGF0Y2hlciBib2R5IGxhdGVyIGlmIG5lY2Vzc2FyeS4gIENoZWNrIHRv IHNlZSBpZgorICAgICB0aGUgZGlzcGF0Y2hlciBpcyBhbHJlYWR5IGdlbmVy YXRlZCB0byBhdm9pZCBkb2luZyB0aGlzIG1vcmUgdGhhbgorICAgICBvbmNl LiAgKi8KKworICBpZiAoVFJFRV9DT0RFIChjaGFtcC0+Zm4pID09IEZVTkNU SU9OX0RFQ0wKKyAgICAgICYmIERFQ0xfRlVOQ1RJT05fVkVSU0lPTkVEIChj aGFtcC0+Zm4pKQorICAgIHsKKyAgICAgIHN0cnVjdCBjZ3JhcGhfbm9kZSAq Y2hhbXBfbm9kZSA9IGNncmFwaF9nZXRfbm9kZSAoY2hhbXAtPmZuKTsKKyAg ICAgIHN0cnVjdCBjZ3JhcGhfZnVuY3Rpb25fdmVyc2lvbl9pbmZvICpjaGFt cF92ZXJzaW9uX2luZm8gPSBOVUxMOworICAgICAgaWYgKGNoYW1wX25vZGUg IT0gTlVMTCkKKyAgICAgICAgY2hhbXBfdmVyc2lvbl9pbmZvID0gZ2V0X2Nn cmFwaF9ub2RlX3ZlcnNpb24gKGNoYW1wX25vZGUpOworICAgICAgaWYgKGNo YW1wX25vZGUgPT0gTlVMTAorCSAgfHwgY2hhbXBfdmVyc2lvbl9pbmZvID09 IE5VTEwKKwkgIHx8IGNoYW1wX3ZlcnNpb25faW5mby0+ZGlzcGF0Y2hlcl9y ZXNvbHZlciA9PSBOVUxMKQorICAgICAgICBnZW5lcmF0ZV9mdW5jdGlvbl92 ZXJzaW9uc19kaXNwYXRjaGVyIChjaGFtcC0+Zm4sIGNhbmRpZGF0ZXMpOwor ICAgIH0KICAgcmV0dXJuIGNoYW1wOwogfQogCkluZGV4OiBnY2MvY29uZmln L2kzODYvaTM4Ni5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy9j b25maWcvaTM4Ni9pMzg2LmMJKHJldmlzaW9uIDE5MjYyMykKKysrIGdjYy9j b25maWcvaTM4Ni9pMzg2LmMJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYy LDggQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4g IElmIG5vdCBzZWUKICNpbmNsdWRlICJvcHRzLmgiCiAjaW5jbHVkZSAiZGlh Z25vc3RpYy5oIgogI2luY2x1ZGUgImR1bXBmaWxlLmgiCisjaW5jbHVkZSAi dHJlZS1wYXNzLmgiCisjaW5jbHVkZSAidHJlZS1mbG93LmgiCiAKIGVudW0g dXBwZXJfMTI4Yml0c19zdGF0ZQogewpAQCAtMjg0MTMsNiArMjg0MTUsMTAw MSBAQCBpeDg2X2luaXRfbW14X3NzZV9idWlsdGlucyAodm9pZCkKICAgICB9 CiB9CiAKKworLyogVGhpcyBhZGRzIGEgY29uZGl0aW9uIHRvIHRoZSBiYXNp Y19ibG9jayBORVdfQkIgaW4gZnVuY3Rpb24gRlVOQ1RJT05fREVDTAorICAg dG8gcmV0dXJuIGEgcG9pbnRlciB0byBWRVJTSU9OX0RFQ0wgaWYgdGhlIG91 dGNvbWUgb2YgdGhlIGV4cHJlc3Npb24KKyAgIGZvcm1lZCBieSBQUkVESUNB VEVfQ0hBSU4gaXMgdHJ1ZS4gIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxs ZWQgZHVyaW5nCisgICB2ZXJzaW9uIGRpc3BhdGNoIHRvIGRlY2lkZSB3aGlj aCBmdW5jdGlvbiB2ZXJzaW9uIHRvIGV4ZWN1dGUuICBJdCByZXR1cm5zCisg ICB0aGUgYmFzaWMgYmxvY2sgYXQgdGhlIGVuZCwgdG8gd2hpY2ggbW9yZSBj b25kaXRpb25zIGNhbiBiZSBhZGRlZC4gICovCisKK3N0YXRpYyBiYXNpY19i bG9jaworYWRkX2NvbmRpdGlvbl90b19iYiAodHJlZSBmdW5jdGlvbl9kZWNs LCB0cmVlIHZlcnNpb25fZGVjbCwKKwkJICAgICB0cmVlIHByZWRpY2F0ZV9j aGFpbiwgYmFzaWNfYmxvY2sgbmV3X2JiKQoreworICBnaW1wbGUgcmV0dXJu X3N0bXQ7CisgIHRyZWUgY29udmVydF9leHByLCByZXN1bHRfdmFyOworICBn aW1wbGUgY29udmVydF9zdG10OworICBnaW1wbGUgY2FsbF9jb25kX3N0bXQ7 CisgIGdpbXBsZSBpZl9lbHNlX3N0bXQ7CisKKyAgYmFzaWNfYmxvY2sgYmIx LCBiYjIsIGJiMzsKKyAgZWRnZSBlMTIsIGUyMzsKKworICB0cmVlIGNvbmRf dmFyLCBhbmRfZXhwcl92YXIgPSBOVUxMX1RSRUU7CisgIGdpbXBsZV9zZXEg Z3NlcTsKKworICB0cmVlIHByZWRpY2F0ZV9kZWNsLCBwcmVkaWNhdGVfYXJn OworCisgIHB1c2hfY2Z1biAoREVDTF9TVFJVQ1RfRlVOQ1RJT04gKGZ1bmN0 aW9uX2RlY2wpKTsKKworICBnY2NfYXNzZXJ0IChuZXdfYmIgIT0gTlVMTCk7 CisgIGdzZXEgPSBiYl9zZXEgKG5ld19iYik7CisKKworICBjb252ZXJ0X2V4 cHIgPSBidWlsZDEgKENPTlZFUlRfRVhQUiwgcHRyX3R5cGVfbm9kZSwKKwkg ICAgIAkJIGJ1aWxkX2ZvbGRfYWRkcl9leHByICh2ZXJzaW9uX2RlY2wpKTsK KyAgcmVzdWx0X3ZhciA9IGNyZWF0ZV90bXBfdmFyIChwdHJfdHlwZV9ub2Rl LCBOVUxMKTsKKyAgY29udmVydF9zdG10ID0gZ2ltcGxlX2J1aWxkX2Fzc2ln biAocmVzdWx0X3ZhciwgY29udmVydF9leHByKTsgCisgIHJldHVybl9zdG10 ID0gZ2ltcGxlX2J1aWxkX3JldHVybiAocmVzdWx0X3Zhcik7CisKKyAgaWYg KHByZWRpY2F0ZV9jaGFpbiA9PSBOVUxMX1RSRUUpCisgICAgeworICAgICAg Z2ltcGxlX3NlcV9hZGRfc3RtdCAoJmdzZXEsIGNvbnZlcnRfc3RtdCk7Cisg ICAgICBnaW1wbGVfc2VxX2FkZF9zdG10ICgmZ3NlcSwgcmV0dXJuX3N0bXQp OworICAgICAgc2V0X2JiX3NlcSAobmV3X2JiLCBnc2VxKTsKKyAgICAgIGdp bXBsZV9zZXRfYmIgKGNvbnZlcnRfc3RtdCwgbmV3X2JiKTsKKyAgICAgIGdp bXBsZV9zZXRfYmIgKHJldHVybl9zdG10LCBuZXdfYmIpOworICAgICAgcG9w X2NmdW4gKCk7CisgICAgICByZXR1cm4gbmV3X2JiOworICAgIH0KKworICB3 aGlsZSAocHJlZGljYXRlX2NoYWluICE9IE5VTEwpCisgICAgeworICAgICAg Y29uZF92YXIgPSBjcmVhdGVfdG1wX3ZhciAoaW50ZWdlcl90eXBlX25vZGUs IE5VTEwpOworICAgICAgcHJlZGljYXRlX2RlY2wgPSBUUkVFX1BVUlBPU0Ug KHByZWRpY2F0ZV9jaGFpbik7CisgICAgICBwcmVkaWNhdGVfYXJnID0gVFJF RV9WQUxVRSAocHJlZGljYXRlX2NoYWluKTsKKyAgICAgIGNhbGxfY29uZF9z dG10ID0gZ2ltcGxlX2J1aWxkX2NhbGwgKHByZWRpY2F0ZV9kZWNsLCAxLCBw cmVkaWNhdGVfYXJnKTsKKyAgICAgIGdpbXBsZV9jYWxsX3NldF9saHMgKGNh bGxfY29uZF9zdG10LCBjb25kX3Zhcik7CisKKyAgICAgIGdpbXBsZV9zZXRf YmxvY2sgKGNhbGxfY29uZF9zdG10LCBERUNMX0lOSVRJQUwgKGZ1bmN0aW9u X2RlY2wpKTsKKyAgICAgIGdpbXBsZV9zZXRfYmIgKGNhbGxfY29uZF9zdG10 LCBuZXdfYmIpOworICAgICAgZ2ltcGxlX3NlcV9hZGRfc3RtdCAoJmdzZXEs IGNhbGxfY29uZF9zdG10KTsKKworICAgICAgcHJlZGljYXRlX2NoYWluID0g VFJFRV9DSEFJTiAocHJlZGljYXRlX2NoYWluKTsKKyAgICAgIAorICAgICAg aWYgKGFuZF9leHByX3ZhciA9PSBOVUxMKQorICAgICAgICBhbmRfZXhwcl92 YXIgPSBjb25kX3ZhcjsKKyAgICAgIGVsc2UKKwl7CisJICBnaW1wbGUgYXNz aWduX3N0bXQ7CisJICAvKiBVc2UgTUlOX0VYUFIgdG8gY2hlY2sgaWYgYW55 IGludGVnZXIgaXMgemVybz8uCisJICAgICBhbmRfZXhwcl92YXIgPSBtaW5f ZXhwciA8Y29uZF92YXIsIGFuZF9leHByX3Zhcj4gICovCisJICBhc3NpZ25f c3RtdCA9IGdpbXBsZV9idWlsZF9hc3NpZ24gKGFuZF9leHByX3ZhciwKKwkJ CSAgYnVpbGQyIChNSU5fRVhQUiwgaW50ZWdlcl90eXBlX25vZGUsCisJCQkJ ICBjb25kX3ZhciwgYW5kX2V4cHJfdmFyKSk7CisKKwkgIGdpbXBsZV9zZXRf YmxvY2sgKGFzc2lnbl9zdG10LCBERUNMX0lOSVRJQUwgKGZ1bmN0aW9uX2Rl Y2wpKTsKKwkgIGdpbXBsZV9zZXRfYmIgKGFzc2lnbl9zdG10LCBuZXdfYmIp OworCSAgZ2ltcGxlX3NlcV9hZGRfc3RtdCAoJmdzZXEsIGFzc2lnbl9zdG10 KTsKKwl9CisgICAgfQorCisgIGlmX2Vsc2Vfc3RtdCA9IGdpbXBsZV9idWls ZF9jb25kIChHVF9FWFBSLCBhbmRfZXhwcl92YXIsCisJICAJCSAgICAgICAg ICAgIGludGVnZXJfemVyb19ub2RlLAorCQkJCSAgICBOVUxMX1RSRUUsIE5V TExfVFJFRSk7CisgIGdpbXBsZV9zZXRfYmxvY2sgKGlmX2Vsc2Vfc3RtdCwg REVDTF9JTklUSUFMIChmdW5jdGlvbl9kZWNsKSk7CisgIGdpbXBsZV9zZXRf YmIgKGlmX2Vsc2Vfc3RtdCwgbmV3X2JiKTsKKyAgZ2ltcGxlX3NlcV9hZGRf c3RtdCAoJmdzZXEsIGlmX2Vsc2Vfc3RtdCk7CisKKyAgZ2ltcGxlX3NlcV9h ZGRfc3RtdCAoJmdzZXEsIGNvbnZlcnRfc3RtdCk7CisgIGdpbXBsZV9zZXFf YWRkX3N0bXQgKCZnc2VxLCByZXR1cm5fc3RtdCk7CisgIHNldF9iYl9zZXEg KG5ld19iYiwgZ3NlcSk7CisKKyAgYmIxID0gbmV3X2JiOworICBlMTIgPSBz cGxpdF9ibG9jayAoYmIxLCBpZl9lbHNlX3N0bXQpOworICBiYjIgPSBlMTIt PmRlc3Q7CisgIGUxMi0+ZmxhZ3MgJj0gfkVER0VfRkFMTFRIUlU7CisgIGUx Mi0+ZmxhZ3MgfD0gRURHRV9UUlVFX1ZBTFVFOworCisgIGUyMyA9IHNwbGl0 X2Jsb2NrIChiYjIsIHJldHVybl9zdG10KTsKKworICBnaW1wbGVfc2V0X2Ji IChjb252ZXJ0X3N0bXQsIGJiMik7CisgIGdpbXBsZV9zZXRfYmIgKHJldHVy bl9zdG10LCBiYjIpOworCisgIGJiMyA9IGUyMy0+ZGVzdDsKKyAgbWFrZV9l ZGdlIChiYjEsIGJiMywgRURHRV9GQUxTRV9WQUxVRSk7IAorCisgIHJlbW92 ZV9lZGdlIChlMjMpOworICBtYWtlX2VkZ2UgKGJiMiwgRVhJVF9CTE9DS19Q VFIsIDApOworCisgIHBvcF9jZnVuICgpOworCisgIHJldHVybiBiYjM7Cit9 CisKKy8qIFRoaXMgcGFyc2VzIHRoZSBhdHRyaWJ1dGUgYXJndW1lbnRzIHRv IHRhcmdldCBpbiBERUNMIGFuZCBkZXRlcm1pbmVzCisgICB0aGUgcmlnaHQg YnVpbHRpbiB0byB1c2UgdG8gbWF0Y2ggdGhlIHBsYXRmb3JtIHNwZWNpZmlj YXRpb24uCisgICBJdCByZXR1cm5zIHRoZSBwcmlvcml0eSB2YWx1ZSBmb3Ig dGhpcyB2ZXJzaW9uIGRlY2wuICBJZiBQUkVESUNBVEVfTElTVAorICAgaXMg bm90IE5VTEwsIGl0IHN0b3JlcyB0aGUgbGlzdCBvZiBjcHUgZmVhdHVyZXMg dGhhdCBuZWVkIHRvIGJlIGNoZWNrZWQKKyAgIGJlZm9yZSBkaXNwYXRjaGlu ZyB0aGlzIGZ1bmN0aW9uLiAgKi8KKworc3RhdGljIHVuc2lnbmVkIGludAor Z2V0X2J1aWx0aW5fY29kZV9mb3JfdmVyc2lvbiAodHJlZSBkZWNsLCB0cmVl ICpwcmVkaWNhdGVfbGlzdCkKK3sKKyAgdHJlZSBhdHRyczsKKyAgc3RydWN0 IGNsX3RhcmdldF9vcHRpb24gY3VyX3RhcmdldDsKKyAgdHJlZSB0YXJnZXRf bm9kZTsKKyAgc3RydWN0IGNsX3RhcmdldF9vcHRpb24gKm5ld190YXJnZXQ7 CisgIGNvbnN0IGNoYXIgKmFyZ19zdHIgPSBOVUxMOworICBjb25zdCBjaGFy ICphdHRyc19zdHIgPSBOVUxMOworICBjaGFyICp0b2tfc3RyID0gTlVMTDsK KyAgY2hhciAqdG9rZW47CisKKyAgLyogUHJpb3JpdHkgb2YgaTM4NiBmZWF0 dXJlcywgZ3JlYXRlciB2YWx1ZSBpcyBoaWdoZXIgcHJpb3JpdHkuICAgVGhp cyBpcworICAgICB1c2VkIHRvIGRlY2lkZSB0aGUgb3JkZXIgaW4gd2hpY2gg ZnVuY3Rpb24gZGlzcGF0Y2ggbXVzdCBoYXBwZW4uICBGb3IKKyAgICAgaW5z dGFuY2UsIGEgdmVyc2lvbiBzcGVjaWFsaXplZCBmb3IgU1NFNC4yIHNob3Vs ZCBiZSBjaGVja2VkIGZvciBkaXNwYXRjaAorICAgICBiZWZvcmUgYSB2ZXJz aW9uIGZvciBTU0UzLCBhcyBTU0U0LjIgaW1wbGllcyBTU0UzLiAgKi8KKyAg ZW51bSBmZWF0dXJlX3ByaW9yaXR5CisgIHsKKyAgICBQX1pFUk8gPSAwLAor ICAgIFBfTU1YLAorICAgIFBfU1NFLAorICAgIFBfU1NFMiwKKyAgICBQX1NT RTMsCisgICAgUF9TU1NFMywKKyAgICBQX1BST0NfU1NTRTMsCisgICAgUF9T U0U0X2EsCisgICAgUF9QUk9DX1NTRTRfYSwKKyAgICBQX1NTRTRfMSwKKyAg ICBQX1NTRTRfMiwKKyAgICBQX1BST0NfU1NFNF8yLAorICAgIFBfUE9QQ05U LAorICAgIFBfQVZYLAorICAgIFBfQVZYMiwKKyAgICBQX0ZNQSwKKyAgICBQ X1BST0NfRk1BCisgIH07CisKKyBlbnVtIGZlYXR1cmVfcHJpb3JpdHkgcHJp b3JpdHkgPSBQX1pFUk87CisKKyAgLyogVGhlc2UgYXJlIHRoZSB0YXJnZXQg YXR0cmlidXRlIHN0cmluZ3MgZm9yIHdoaWNoIGEgZGlzcGF0Y2hlciBpcwor ICAgICBhdmFpbGFibGUsIGZyb20gZm9sZF9idWlsdGluX2NwdS4gICovCisK KyAgc3RhdGljIHN0cnVjdCBfZmVhdHVyZV9saXN0CisgICAgeworICAgICAg Y29uc3QgY2hhciAqY29uc3QgbmFtZTsKKyAgICAgIGNvbnN0IGVudW0gZmVh dHVyZV9wcmlvcml0eSBwcmlvcml0eTsKKyAgICB9CisgIGNvbnN0IGZlYXR1 cmVfbGlzdFtdID0KKyAgICB7CisgICAgICB7Im1teCIsIFBfTU1YfSwKKyAg ICAgIHsic3NlIiwgUF9TU0V9LAorICAgICAgeyJzc2UyIiwgUF9TU0UyfSwK KyAgICAgIHsic3NlMyIsIFBfU1NFM30sCisgICAgICB7InNzc2UzIiwgUF9T U1NFM30sCisgICAgICB7InNzZTQuMSIsIFBfU1NFNF8xfSwKKyAgICAgIHsi c3NlNC4yIiwgUF9TU0U0XzJ9LAorICAgICAgeyJwb3BjbnQiLCBQX1BPUENO VH0sCisgICAgICB7ImF2eCIsIFBfQVZYfSwKKyAgICAgIHsiYXZ4MiIsIFBf QVZYMn0KKyAgICB9OworCisKKyAgc3RhdGljIHVuc2lnbmVkIGludCBOVU1f RkVBVFVSRVMKKyAgICA9IHNpemVvZiAoZmVhdHVyZV9saXN0KSAvIHNpemVv ZiAoc3RydWN0IF9mZWF0dXJlX2xpc3QpOworCisgIHVuc2lnbmVkIGludCBp OworCisgIHRyZWUgcHJlZGljYXRlX2NoYWluID0gTlVMTF9UUkVFOworICB0 cmVlIHByZWRpY2F0ZV9kZWNsLCBwcmVkaWNhdGVfYXJnOworCisgIGF0dHJz ID0gbG9va3VwX2F0dHJpYnV0ZSAoInRhcmdldCIsIERFQ0xfQVRUUklCVVRF UyAoZGVjbCkpOworICBnY2NfYXNzZXJ0IChhdHRycyAhPSBOVUxMKTsKKwor ICBhdHRycyA9IFRSRUVfVkFMVUUgKFRSRUVfVkFMVUUgKGF0dHJzKSk7CisK KyAgZ2NjX2Fzc2VydCAoVFJFRV9DT0RFIChhdHRycykgPT0gU1RSSU5HX0NT VCk7CisgIGF0dHJzX3N0ciA9IFRSRUVfU1RSSU5HX1BPSU5URVIgKGF0dHJz KTsKKworCisgIC8qIEhhbmRsZSBhcmNoPSBpZiBzcGVjaWZpZWQuICBGb3Ig cHJpb3JpdHksIHNldCBpdCB0byBiZSAxIG1vcmUgdGhhbgorICAgICB0aGUg YmVzdCBpbnN0cnVjdGlvbiBzZXQgdGhlIHByb2Nlc3NvciBjYW4gaGFuZGxl LiAgRm9yIGluc3RhbmNlLCBpZgorICAgICB0aGVyZSBpcyBhIHZlcnNpb24g Zm9yIGF0b20gYW5kIGEgdmVyc2lvbiBmb3Igc3NzZTMgKHRoZSBoaWdoZXN0 IElTQQorICAgICBwcmlvcml0eSBmb3IgYXRvbSksIHRoZSBhdG9tIHZlcnNp b24gbXVzdCBiZSBjaGVja2VkIGZvciBkaXNwYXRjaAorICAgICBiZWZvcmUg dGhlIHNzc2UzIHZlcnNpb24uICovCisgIGlmIChzdHJzdHIgKGF0dHJzX3N0 ciwgImFyY2g9IikgIT0gTlVMTCkKKyAgICB7CisgICAgICBjbF90YXJnZXRf b3B0aW9uX3NhdmUgKCZjdXJfdGFyZ2V0LCAmZ2xvYmFsX29wdGlvbnMpOwor ICAgICAgdGFyZ2V0X25vZGUgPSBpeDg2X3ZhbGlkX3RhcmdldF9hdHRyaWJ1 dGVfdHJlZSAoYXR0cnMpOworICAgIAorICAgICAgZ2NjX2Fzc2VydCAodGFy Z2V0X25vZGUpOworICAgICAgbmV3X3RhcmdldCA9IFRSRUVfVEFSR0VUX09Q VElPTiAodGFyZ2V0X25vZGUpOworICAgICAgZ2NjX2Fzc2VydCAobmV3X3Rh cmdldCk7CisgICAgICAKKyAgICAgIGlmIChuZXdfdGFyZ2V0LT5hcmNoX3Nw ZWNpZmllZCAmJiBuZXdfdGFyZ2V0LT5hcmNoID4gMCkKKwl7CisJICBzd2l0 Y2ggKG5ld190YXJnZXQtPmFyY2gpCisJICAgIHsKKwkgICAgY2FzZSBQUk9D RVNTT1JfQ09SRTJfMzI6CisJICAgIGNhc2UgUFJPQ0VTU09SX0NPUkUyXzY0 OgorCSAgICAgIGFyZ19zdHIgPSAiY29yZTIiOworCSAgICAgIHByaW9yaXR5 ID0gUF9QUk9DX1NTU0UzOworCSAgICAgIGJyZWFrOworCSAgICBjYXNlIFBS T0NFU1NPUl9DT1JFSTdfMzI6CisJICAgIGNhc2UgUFJPQ0VTU09SX0NPUkVJ N182NDoKKwkgICAgICBhcmdfc3RyID0gImNvcmVpNyI7CisJICAgICAgcHJp b3JpdHkgPSBQX1BST0NfU1NFNF8yOworCSAgICAgIGJyZWFrOworCSAgICBj YXNlIFBST0NFU1NPUl9BVE9NOgorCSAgICAgIGFyZ19zdHIgPSAiYXRvbSI7 CisJICAgICAgcHJpb3JpdHkgPSBQX1BST0NfU1NTRTM7CisJICAgICAgYnJl YWs7CisJICAgIGNhc2UgUFJPQ0VTU09SX0FNREZBTTEwOgorCSAgICAgIGFy Z19zdHIgPSAiYW1kZmFtMTBoIjsKKwkgICAgICBwcmlvcml0eSA9IFBfUFJP Q19TU0U0X2E7CisJICAgICAgYnJlYWs7CisJICAgIGNhc2UgUFJPQ0VTU09S X0JEVkVSMToKKwkgICAgICBhcmdfc3RyID0gImJkdmVyMSI7CisJICAgICAg cHJpb3JpdHkgPSBQX1BST0NfRk1BOworCSAgICAgIGJyZWFrOworCSAgICBj YXNlIFBST0NFU1NPUl9CRFZFUjI6CisJICAgICAgYXJnX3N0ciA9ICJiZHZl cjIiOworCSAgICAgIHByaW9yaXR5ID0gUF9QUk9DX0ZNQTsKKwkgICAgICBi cmVhazsKKwkgICAgfSAgCisJfSAgICAKKyAgICAKKyAgICAgIGNsX3Rhcmdl dF9vcHRpb25fcmVzdG9yZSAoJmdsb2JhbF9vcHRpb25zLCAmY3VyX3Rhcmdl dCk7CisJCisgICAgICBpZiAocHJlZGljYXRlX2xpc3QgJiYgYXJnX3N0ciA9 PSBOVUxMKQorCXsKKwkgIGVycm9yX2F0IChERUNMX1NPVVJDRV9MT0NBVElP TiAoZGVjbCksCisJICAgIAkiTm8gZGlzcGF0Y2hlciBmb3VuZCBmb3IgdGhl IHZlcnNpb25pbmcgYXR0cmlidXRlcyIpOworCSAgcmV0dXJuIDA7CisJfQor ICAgIAorICAgICAgaWYgKHByZWRpY2F0ZV9saXN0KQorCXsKKyAgICAgICAg ICBwcmVkaWNhdGVfZGVjbCA9IGl4ODZfYnVpbHRpbnMgWyhpbnQpIElYODZf QlVJTFRJTl9DUFVfSVNdOworICAgICAgICAgIC8qIEZvciBhIEMgc3RyaW5n IGxpdGVyYWwgdGhlIGxlbmd0aCBpbmNsdWRlcyB0aGUgdHJhaWxpbmcgTlVM TC4gICovCisgICAgICAgICAgcHJlZGljYXRlX2FyZyA9IGJ1aWxkX3N0cmlu Z19saXRlcmFsIChzdHJsZW4gKGFyZ19zdHIpICsgMSwgYXJnX3N0cik7Cisg ICAgICAgICAgcHJlZGljYXRlX2NoYWluID0gdHJlZV9jb25zIChwcmVkaWNh dGVfZGVjbCwgcHJlZGljYXRlX2FyZywKKwkJCQkgICAgICAgcHJlZGljYXRl X2NoYWluKTsKKwl9CisgICAgfQorCisgIC8qIFByb2Nlc3MgZmVhdHVyZSBu YW1lLiAgKi8KKyAgdG9rX3N0ciA9ICAoY2hhciAqKSB4bWFsbG9jIChzdHJs ZW4gKGF0dHJzX3N0cikgKyAxKTsKKyAgc3RyY3B5ICh0b2tfc3RyLCBhdHRy c19zdHIpOworICB0b2tlbiA9IHN0cnRvayAodG9rX3N0ciwgIiwiKTsKKyAg cHJlZGljYXRlX2RlY2wgPSBpeDg2X2J1aWx0aW5zIFsoaW50KSBJWDg2X0JV SUxUSU5fQ1BVX1NVUFBPUlRTXTsKKworICB3aGlsZSAodG9rZW4gIT0gTlVM TCkKKyAgICB7CisgICAgICAvKiBEbyBub3QgcHJvY2VzcyAiYXJjaD0iICAq LworICAgICAgaWYgKHN0cm5jbXAgKHRva2VuLCAiYXJjaD0iLCA1KSA9PSAw KQorCXsKKwkgIHRva2VuID0gc3RydG9rIChOVUxMLCAiLCIpOworCSAgY29u dGludWU7CisJfQorICAgICAgZm9yIChpID0gMDsgaSA8IE5VTV9GRUFUVVJF UzsgKytpKQorCXsKKwkgIGlmIChzdHJjbXAgKHRva2VuLCBmZWF0dXJlX2xp c3RbaV0ubmFtZSkgPT0gMCkKKwkgICAgeworCSAgICAgIGlmIChwcmVkaWNh dGVfbGlzdCkKKwkJeworCQkgIHByZWRpY2F0ZV9hcmcgPSBidWlsZF9zdHJp bmdfbGl0ZXJhbCAoCisJCQkJICBzdHJsZW4gKGZlYXR1cmVfbGlzdFtpXS5u YW1lKSArIDEsCisJCQkJICBmZWF0dXJlX2xpc3RbaV0ubmFtZSk7CisJCSAg cHJlZGljYXRlX2NoYWluID0gdHJlZV9jb25zIChwcmVkaWNhdGVfZGVjbCwg cHJlZGljYXRlX2FyZywKKwkJCQkJICAgICAgIHByZWRpY2F0ZV9jaGFpbik7 CisJCX0KKwkgICAgICAvKiBGaW5kIHRoZSBtYXhpbXVtIHByaW9yaXR5IGZl YXR1cmUuICAqLworCSAgICAgIGlmIChmZWF0dXJlX2xpc3RbaV0ucHJpb3Jp dHkgPiBwcmlvcml0eSkKKwkJcHJpb3JpdHkgPSBmZWF0dXJlX2xpc3RbaV0u cHJpb3JpdHk7CisKKwkgICAgICBicmVhazsKKwkgICAgfQorCX0KKyAgICAg IGlmIChwcmVkaWNhdGVfbGlzdCAmJiBpID09IE5VTV9GRUFUVVJFUykKKwl7 CisJICBlcnJvcl9hdCAoREVDTF9TT1VSQ0VfTE9DQVRJT04gKGRlY2wpLAor CQkgICAgIk5vIGRpc3BhdGNoZXIgZm91bmQgZm9yICVzIiwgdG9rZW4pOwor CSAgcmV0dXJuIDA7CisJfQorICAgICAgdG9rZW4gPSBzdHJ0b2sgKE5VTEws ICIsIik7CisgICAgfQorICBmcmVlICh0b2tfc3RyKTsKKworICBpZiAocHJl ZGljYXRlX2xpc3QgJiYgcHJlZGljYXRlX2NoYWluID09IE5VTExfVFJFRSkK KyAgICB7CisgICAgICBlcnJvcl9hdCAoREVDTF9TT1VSQ0VfTE9DQVRJT04g KGRlY2wpLAorCSAgICAgICAgIk5vIGRpc3BhdGNoZXIgZm91bmQgZm9yIHRo ZSB2ZXJzaW9uaW5nIGF0dHJpYnV0ZXMgOiAlcyIsCisJICAgICAgICBhdHRy c19zdHIpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICBlbHNlIGlmIChw cmVkaWNhdGVfbGlzdCkKKyAgICB7CisgICAgICBwcmVkaWNhdGVfY2hhaW4g PSBucmV2ZXJzZSAocHJlZGljYXRlX2NoYWluKTsKKyAgICAgICpwcmVkaWNh dGVfbGlzdCA9IHByZWRpY2F0ZV9jaGFpbjsKKyAgICB9CisKKyAgcmV0dXJu IHByaW9yaXR5OyAKK30KKworLyogVGhpcyBjb21wYXJlcyB0aGUgcHJpb3Jp dHkgb2YgdGFyZ2V0IGZlYXR1cmVzIGluIGZ1bmN0aW9uIERFQ0wxCisgICBh bmQgREVDTDIuICBJdCByZXR1cm5zIHBvc2l0aXZlIHZhbHVlIGlmIERFQ0wx IGlzIGhpZ2hlciBwcmlvcml0eSwKKyAgIG5lZ2F0aXZlIHZhbHVlIGlmIERF Q0wyIGlzIGhpZ2hlciBwcmlvcml0eSBhbmQgMCBpZiB0aGV5IGFyZSB0aGUK KyAgIHNhbWUuICAqLworCitzdGF0aWMgaW50CitpeDg2X2NvbXBhcmVfdmVy c2lvbl9wcmlvcml0eSAodHJlZSBkZWNsMSwgdHJlZSBkZWNsMikKK3sKKyAg dW5zaWduZWQgaW50IHByaW9yaXR5MSA9IDA7CisgIHVuc2lnbmVkIGludCBw cmlvcml0eTIgPSAwOworCisgIGlmIChsb29rdXBfYXR0cmlidXRlICgidGFy Z2V0IiwgREVDTF9BVFRSSUJVVEVTIChkZWNsMSkpICE9IE5VTEwpCisgICAg cHJpb3JpdHkxID0gZ2V0X2J1aWx0aW5fY29kZV9mb3JfdmVyc2lvbiAoZGVj bDEsIE5VTEwpOworCisgIGlmIChsb29rdXBfYXR0cmlidXRlICgidGFyZ2V0 IiwgREVDTF9BVFRSSUJVVEVTIChkZWNsMikpICE9IE5VTEwpCisgICAgcHJp b3JpdHkyID0gZ2V0X2J1aWx0aW5fY29kZV9mb3JfdmVyc2lvbiAoZGVjbDIs IE5VTEwpOworCisgIHJldHVybiAoaW50KXByaW9yaXR5MSAtIChpbnQpcHJp b3JpdHkyOworfQorCisvKiBWMSBhbmQgVjIgcG9pbnQgdG8gZnVuY3Rpb24g dmVyc2lvbnMgd2l0aCBkaWZmZXJlbnQgcHJpb3JpdGllcworICAgYmFzZWQg b24gdGhlIHRhcmdldCBJU0EuICBUaGlzIGZ1bmN0aW9uIGNvbXBhcmVzIHRo ZWlyIHByaW9yaXRpZXMuICAqLworIAorc3RhdGljIGludAorZmVhdHVyZV9j b21wYXJlIChjb25zdCB2b2lkICp2MSwgY29uc3Qgdm9pZCAqdjIpCit7Cisg IHR5cGVkZWYgc3RydWN0IF9mdW5jdGlvbl92ZXJzaW9uX2luZm8KKyAgICB7 CisgICAgICB0cmVlIHZlcnNpb25fZGVjbDsKKyAgICAgIHRyZWUgcHJlZGlj YXRlX2NoYWluOworICAgICAgdW5zaWduZWQgaW50IGRpc3BhdGNoX3ByaW9y aXR5OworICAgIH0gZnVuY3Rpb25fdmVyc2lvbl9pbmZvOworCisgIGNvbnN0 IGZ1bmN0aW9uX3ZlcnNpb25faW5mbyBjMSA9ICooY29uc3QgZnVuY3Rpb25f dmVyc2lvbl9pbmZvICopdjE7CisgIGNvbnN0IGZ1bmN0aW9uX3ZlcnNpb25f aW5mbyBjMiA9ICooY29uc3QgZnVuY3Rpb25fdmVyc2lvbl9pbmZvICopdjI7 CisgIHJldHVybiAoYzIuZGlzcGF0Y2hfcHJpb3JpdHkgLSBjMS5kaXNwYXRj aF9wcmlvcml0eSk7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVz IHRoZSBkaXNwYXRjaCBmdW5jdGlvbiBmb3IKKyAgIG11bHRpLXZlcnNpb25l ZCBmdW5jdGlvbnMuICBESVNQQVRDSF9ERUNMIGlzIHRoZSBmdW5jdGlvbiB3 aGljaCB3aWxsCisgICBjb250YWluIHRoZSBkaXNwYXRjaCBsb2dpYy4gIEZO REVDTFMgYXJlIHRoZSBmdW5jdGlvbiBjaG9pY2VzIGZvcgorICAgZGlzcGF0 Y2gsIGFuZCBpcyBhIHRyZWUgY2hhaW4uICBFTVBUWV9CQiBpcyB0aGUgYmFz aWMgYmxvY2sgcG9pbnRlcgorICAgaW4gRElTUEFUQ0hfREVDTCBpbiB3aGlj aCB0aGUgZGlzcGF0Y2ggY29kZSBpcyBnZW5lcmF0ZWQuICAqLworCitzdGF0 aWMgaW50CitkaXNwYXRjaF9mdW5jdGlvbl92ZXJzaW9ucyAodHJlZSBkaXNw YXRjaF9kZWNsLAorCQkJICAgIHZvaWQgKmZuZGVjbHNfcCwKKwkJCSAgICBi YXNpY19ibG9jayAqZW1wdHlfYmIpCit7CisgIHRyZWUgZGVmYXVsdF9kZWNs OworICBnaW1wbGUgaWZ1bmNfY3B1X2luaXRfc3RtdDsKKyAgZ2ltcGxlX3Nl cSBnc2VxOworICBpbnQgaXg7CisgIHRyZWUgZWxlOworICBWRUMgKHRyZWUs IGhlYXApICpmbmRlY2xzOworICB1bnNpZ25lZCBpbnQgbnVtX3ZlcnNpb25z ID0gMDsKKyAgdW5zaWduZWQgaW50IGFjdHVhbF92ZXJzaW9ucyA9IDA7Cisg IHVuc2lnbmVkIGludCBpOworCisgIHN0cnVjdCBfZnVuY3Rpb25fdmVyc2lv bl9pbmZvCisgICAgeworICAgICAgdHJlZSB2ZXJzaW9uX2RlY2w7CisgICAg ICB0cmVlIHByZWRpY2F0ZV9jaGFpbjsKKyAgICAgIHVuc2lnbmVkIGludCBk aXNwYXRjaF9wcmlvcml0eTsKKyAgICB9KmZ1bmN0aW9uX3ZlcnNpb25faW5m bzsKKworICBnY2NfYXNzZXJ0IChkaXNwYXRjaF9kZWNsICE9IE5VTEwKKwkg ICAgICAmJiBmbmRlY2xzX3AgIT0gTlVMTAorCSAgICAgICYmIGVtcHR5X2Ji ICE9IE5VTEwpOworCisgIC8qZm5kZWNsc19wIGlzIGFjdHVhbGx5IGEgdmVj dG9yLiAgKi8KKyAgZm5kZWNscyA9IChWRUMgKHRyZWUsIGhlYXApICopZm5k ZWNsc19wOworCisgIC8qIEF0IGxlYXN0IG9uZSBtb3JlIHZlcnNpb24gb3Ro ZXIgdGhhbiB0aGUgZGVmYXVsdC4gICovCisgIG51bV92ZXJzaW9ucyA9IFZF Q19sZW5ndGggKHRyZWUsIGZuZGVjbHMpOworICBnY2NfYXNzZXJ0IChudW1f dmVyc2lvbnMgPj0gMik7CisKKyAgZnVuY3Rpb25fdmVyc2lvbl9pbmZvID0g KHN0cnVjdCBfZnVuY3Rpb25fdmVyc2lvbl9pbmZvICopCisgICAgWE5FV1ZF QyAoc3RydWN0IF9mdW5jdGlvbl92ZXJzaW9uX2luZm8sIChudW1fdmVyc2lv bnMgLSAxKSk7CisKKyAgLyogVGhlIGZpcnN0IHZlcnNpb24gaW4gdGhlIHZl Y3RvciBpcyB0aGUgZGVmYXVsdCBkZWNsLiAgKi8KKyAgZGVmYXVsdF9kZWNs ID0gVkVDX2luZGV4ICh0cmVlLCBmbmRlY2xzLCAwKTsKKworICBwdXNoX2Nm dW4gKERFQ0xfU1RSVUNUX0ZVTkNUSU9OIChkaXNwYXRjaF9kZWNsKSk7CisK KyAgZ3NlcSA9IGJiX3NlcSAoKmVtcHR5X2JiKTsKKyAgLyogRnVuY3Rpb24g dmVyc2lvbiBkaXNwYXRjaCBpcyB2aWEgSUZVTkMuICBJRlVOQyByZXNvbHZl cnMgZmlyZSBiZWZvcmUKKyAgICAgY29uc3RydWN0b3JzLCBzbyBleHBsaWNp dHkgY2FsbCBfX2J1aWx0aW5fY3B1X2luaXQgaGVyZS4gICovCisgIGlmdW5j X2NwdV9pbml0X3N0bXQgPSBnaW1wbGVfYnVpbGRfY2FsbF92ZWMgKAorICAg ICAgICAgICAgICAgICAgICAgaXg4Nl9idWlsdGlucyBbKGludCkgSVg4Nl9C VUlMVElOX0NQVV9JTklUXSwgTlVMTCk7CisgIGdpbXBsZV9zZXFfYWRkX3N0 bXQgKCZnc2VxLCBpZnVuY19jcHVfaW5pdF9zdG10KTsKKyAgZ2ltcGxlX3Nl dF9iYiAoaWZ1bmNfY3B1X2luaXRfc3RtdCwgKmVtcHR5X2JiKTsKKyAgc2V0 X2JiX3NlcSAoKmVtcHR5X2JiLCBnc2VxKTsKKworICBwb3BfY2Z1biAoKTsK KworCisgIGZvciAoaXggPSAxOyBWRUNfaXRlcmF0ZSAodHJlZSwgZm5kZWNs cywgaXgsIGVsZSk7ICsraXgpCisgICAgeworICAgICAgdHJlZSB2ZXJzaW9u X2RlY2wgPSBlbGU7CisgICAgICB0cmVlIHByZWRpY2F0ZV9jaGFpbiA9IE5V TExfVFJFRTsKKyAgICAgIHVuc2lnbmVkIGludCBwcmlvcml0eTsKKyAgICAg IC8qIEdldCBhdHRyaWJ1dGUgc3RyaW5nLCBwYXJzZSBpdCBhbmQgZmluZCB0 aGUgcmlnaHQgcHJlZGljYXRlIGRlY2wuCisgICAgICAgICBUaGUgcHJlZGlj YXRlIGZ1bmN0aW9uIGNvdWxkIGJlIGEgbGVuZ3RoeSBjb21iaW5hdGlvbiBv ZiBtYW55CisJIGZlYXR1cmVzLCBsaWtlIGFyY2gtdHlwZSBhbmQgdmFyaW91 cyBpc2EtdmFyaWFudHMuICAqLworICAgICAgcHJpb3JpdHkgPSBnZXRfYnVp bHRpbl9jb2RlX2Zvcl92ZXJzaW9uICh2ZXJzaW9uX2RlY2wsCisJIAkJCSAg ICAgICAgICAgICAgICZwcmVkaWNhdGVfY2hhaW4pOworCisgICAgICBpZiAo cHJlZGljYXRlX2NoYWluID09IE5VTExfVFJFRSkKKwljb250aW51ZTsKKwor ICAgICAgYWN0dWFsX3ZlcnNpb25zKys7CisgICAgICBmdW5jdGlvbl92ZXJz aW9uX2luZm8gW2l4IC0gMV0udmVyc2lvbl9kZWNsID0gdmVyc2lvbl9kZWNs OworICAgICAgZnVuY3Rpb25fdmVyc2lvbl9pbmZvIFtpeCAtIDFdLnByZWRp Y2F0ZV9jaGFpbiA9IHByZWRpY2F0ZV9jaGFpbjsKKyAgICAgIGZ1bmN0aW9u X3ZlcnNpb25faW5mbyBbaXggLSAxXS5kaXNwYXRjaF9wcmlvcml0eSA9IHBy aW9yaXR5OworICAgIH0KKworICAvKiBTb3J0IHRoZSB2ZXJzaW9ucyBhY2Nv cmRpbmcgdG8gZGVzY2VuZGluZyBvcmRlciBvZiBkaXNwYXRjaCBwcmlvcml0 eS4gIFRoZQorICAgICBwcmlvcml0eSBpcyBiYXNlZCBvbiB0aGUgSVNBLiAg VGhpcyBpcyBub3QgYSBwZXJmZWN0IHNvbHV0aW9uLiAgVGhlcmUKKyAgICAg Y291bGQgc3RpbGwgYmUgYW1iaWd1aXR5LiAgSWYgbW9yZSB0aGFuIG9uZSBm dW5jdGlvbiB2ZXJzaW9uIGlzIHN1aXRhYmxlCisgICAgIHRvIGV4ZWN1dGUs ICB3aGljaCBvbmUgc2hvdWxkIGJlIGRpc3BhdGNoZWQ/ICBJbiBmdXR1cmUs IGFsbG93IHRoZSB1c2VyCisgICAgIHRvIHNwZWNpZnkgYSBkaXNwYXRjaCAg cHJpb3JpdHkgbmV4dCB0byB0aGUgdmVyc2lvbi4gICovCisgIHFzb3J0IChm dW5jdGlvbl92ZXJzaW9uX2luZm8sIGFjdHVhbF92ZXJzaW9ucywKKyAgICAg ICAgIHNpemVvZiAoc3RydWN0IF9mdW5jdGlvbl92ZXJzaW9uX2luZm8pLCBm ZWF0dXJlX2NvbXBhcmUpOworCisgIGZvciAgKGkgPSAwOyBpIDwgYWN0dWFs X3ZlcnNpb25zOyArK2kpCisgICAgKmVtcHR5X2JiID0gYWRkX2NvbmRpdGlv bl90b19iYiAoZGlzcGF0Y2hfZGVjbCwKKwkJCQkgICAgIGZ1bmN0aW9uX3Zl cnNpb25faW5mb1tpXS52ZXJzaW9uX2RlY2wsCisJCQkJICAgICBmdW5jdGlv bl92ZXJzaW9uX2luZm9baV0ucHJlZGljYXRlX2NoYWluLAorCQkJCSAgICAg KmVtcHR5X2JiKTsKKworICAvKiBkaXNwYXRjaCBkZWZhdWx0IHZlcnNpb24g YXQgdGhlIGVuZC4gICovCisgICplbXB0eV9iYiA9IGFkZF9jb25kaXRpb25f dG9fYmIgKGRpc3BhdGNoX2RlY2wsIGRlZmF1bHRfZGVjbCwKKwkJCQkgICBO VUxMLCAqZW1wdHlfYmIpOworCisgIGZyZWUgKGZ1bmN0aW9uX3ZlcnNpb25f aW5mbyk7CisgIHJldHVybiAwOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHJl dHVybnMgdHJ1ZSBpZiBGTjEgYW5kIEZOMiBhcmUgdmVyc2lvbnMgb2YgdGhl IHNhbWUgZnVuY3Rpb24sCisgICB0aGF0IGlzLCB0aGUgdGFyZ2V0cyBvZiB0 aGUgZnVuY3Rpb24gZGVjbHMgYXJlIGRpZmZlcmVudC4gIFRoaXMgYXNzdW1l cworICAgdGhhdCBGTjEgYW5kIEZOMiBoYXZlIHRoZSBzYW1lIHNpZ25hdHVy ZS4gICovCisKK3N0YXRpYyBib29sCitpeDg2X2Z1bmN0aW9uX3ZlcnNpb25z ICh0cmVlIGZuMSwgdHJlZSBmbjIpCit7CisgIHRyZWUgYXR0cjEsIGF0dHIy OworICBzdHJ1Y3QgY2xfdGFyZ2V0X29wdGlvbiAqdGFyZ2V0MSwgKnRhcmdl dDI7CisKKyAgaWYgKFRSRUVfQ09ERSAoZm4xKSAhPSBGVU5DVElPTl9ERUNM CisgICAgICB8fCBUUkVFX0NPREUgKGZuMikgIT0gRlVOQ1RJT05fREVDTCkK KyAgICByZXR1cm4gZmFsc2U7CisKKyAgYXR0cjEgPSBERUNMX0ZVTkNUSU9O X1NQRUNJRklDX1RBUkdFVCAoZm4xKTsKKyAgYXR0cjIgPSBERUNMX0ZVTkNU SU9OX1NQRUNJRklDX1RBUkdFVCAoZm4yKTsKKworICAvKiBBdGxlYXN0IG9u ZSBmdW5jdGlvbiBkZWNsIHNob3VsZCBoYXZlIHRhcmdldCBhdHRyaWJ1dGUg c3BlY2lmaWVkLiAgKi8KKyAgaWYgKGF0dHIxID09IE5VTExfVFJFRSAmJiBh dHRyMiA9PSBOVUxMX1RSRUUpCisgICAgcmV0dXJuIGZhbHNlOworCisgIGlm IChhdHRyMSA9PSBOVUxMX1RSRUUpCisgICAgYXR0cjEgPSB0YXJnZXRfb3B0 aW9uX2RlZmF1bHRfbm9kZTsKKyAgZWxzZSBpZiAoYXR0cjIgPT0gTlVMTF9U UkVFKQorICAgIGF0dHIyID0gdGFyZ2V0X29wdGlvbl9kZWZhdWx0X25vZGU7 CisKKyAgdGFyZ2V0MSA9IFRSRUVfVEFSR0VUX09QVElPTiAoYXR0cjEpOwor ICB0YXJnZXQyID0gVFJFRV9UQVJHRVRfT1BUSU9OIChhdHRyMik7CisKKyAg LyogdGFyZ2V0MSBhbmQgdGFyZ2V0MiBtdXN0IGJlIGRpZmZlcmVudCBpbiBz b21lIHdheS4gICovCisgIGlmICh0YXJnZXQxLT54X2l4ODZfaXNhX2ZsYWdz ID09IHRhcmdldDItPnhfaXg4Nl9pc2FfZmxhZ3MKKyAgICAgICYmIHRhcmdl dDEtPnhfdGFyZ2V0X2ZsYWdzID09IHRhcmdldDItPnhfdGFyZ2V0X2ZsYWdz CisgICAgICAmJiB0YXJnZXQxLT5hcmNoID09IHRhcmdldDItPmFyY2gKKyAg ICAgICYmIHRhcmdldDEtPnR1bmUgPT0gdGFyZ2V0Mi0+dHVuZQorICAgICAg JiYgdGFyZ2V0MS0+eF9peDg2X2ZwbWF0aCA9PSB0YXJnZXQyLT54X2l4ODZf ZnBtYXRoCisgICAgICAmJiB0YXJnZXQxLT5icmFuY2hfY29zdCA9PSB0YXJn ZXQyLT5icmFuY2hfY29zdCkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgcmV0 dXJuIHRydWU7Cit9CisKKy8qIENvbXBhcmF0b3IgZnVuY3Rpb24gdG8gYmUg dXNlZCBpbiBxc29ydCByb3V0aW5lIHRvIHNvcnQgYXR0cmlidXRlCisgICBz cGVjaWZpY2F0aW9uIHN0cmluZ3MgdG8gInRhcmdldCIuICAqLworCitzdGF0 aWMgaW50CithdHRyX3N0cmNtcCAoY29uc3Qgdm9pZCAqdjEsIGNvbnN0IHZv aWQgKnYyKQoreworICBjb25zdCBjaGFyICpjMSA9ICooY2hhciAqY29uc3Qq KXYxOworICBjb25zdCBjaGFyICpjMiA9ICooY2hhciAqY29uc3QqKXYyOwor ICByZXR1cm4gc3RyY21wIChjMSwgYzIpOworfQorCisvKiBTVFIgaXMgdGhl IGFyZ3VtZW50IHRvIHRhcmdldCBhdHRyaWJ1dGUuICBUaGlzIGZ1bmN0aW9u IHRva2VuaXplcworICAgdGhlIGNvbW1hIHNlcGFyYXRlZCBhcmd1bWVudHMs IHNvcnRzIHRoZW0gYW5kIHJldHVybnMgYSBzdHJpbmcgd2hpY2gKKyAgIGlz IGEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjb21tYSBzZXBhcmF0ZWQg YXJndW1lbnRzLiAgIEl0IGFsc28KKyAgIHJlcGxhY2VzIG5vbi1pZGVudGlm aWVyIGNoYXJhY3RlcnMgIj0sLSIgd2l0aCAiXyIuICAqLworCitzdGF0aWMg Y2hhciAqCitzb3J0ZWRfYXR0cl9zdHJpbmcgKGNvbnN0IGNoYXIgKnN0cikK K3sKKyAgY2hhciAqKmFyZ3MgPSBOVUxMOworICBjaGFyICphdHRyX3N0ciwg KnJldF9zdHI7CisgIGNoYXIgKmF0dHIgPSBOVUxMOworICB1bnNpZ25lZCBp bnQgYXJnbnVtID0gMTsKKyAgdW5zaWduZWQgaW50IGk7CisKKyAgZm9yIChp ID0gMDsgaSA8IHN0cmxlbiAoc3RyKTsgaSsrKQorICAgIGlmIChzdHJbaV0g PT0gJywnKQorICAgICAgYXJnbnVtKys7CisKKyAgYXR0cl9zdHIgPSAoY2hh ciAqKXhtYWxsb2MgKHN0cmxlbiAoc3RyKSArIDEpOworICBzdHJjcHkgKGF0 dHJfc3RyLCBzdHIpOworCisgIC8qIFJlcGxhY2UgIj0sLSIgd2l0aCAiXyIu ICAqLworICBmb3IgKGkgPSAwOyBpIDwgc3RybGVuIChhdHRyX3N0cik7IGkr KykKKyAgICBpZiAoYXR0cl9zdHJbaV0gPT0gJz0nIHx8IGF0dHJfc3RyW2ld PT0gJy0nKQorICAgICAgYXR0cl9zdHJbaV0gPSAnXyc7CisKKyAgaWYgKGFy Z251bSA9PSAxKQorICAgIHJldHVybiBhdHRyX3N0cjsKKworICBhcmdzID0g WE5FV1ZFQyAoY2hhciAqLCBhcmdudW0pOworCisgIGkgPSAwOworICBhdHRy ID0gc3RydG9rIChhdHRyX3N0ciwgIiwiKTsKKyAgd2hpbGUgKGF0dHIgIT0g TlVMTCkKKyAgICB7CisgICAgICBhcmdzW2ldID0gYXR0cjsKKyAgICAgIGkr KzsKKyAgICAgIGF0dHIgPSBzdHJ0b2sgKE5VTEwsICIsIik7CisgICAgfQor CisgIHFzb3J0IChhcmdzLCBhcmdudW0sIHNpemVvZiAoY2hhciopLCBhdHRy X3N0cmNtcCk7CisKKyAgcmV0X3N0ciA9IChjaGFyICopeG1hbGxvYyAoc3Ry bGVuIChzdHIpICsgMSk7CisgIHN0cmNweSAocmV0X3N0ciwgYXJnc1swXSk7 CisgIGZvciAoaSA9IDE7IGkgPCBhcmdudW07IGkrKykKKyAgICB7CisgICAg ICBzdHJjYXQgKHJldF9zdHIsICJfIik7CisgICAgICBzdHJjYXQgKHJldF9z dHIsIGFyZ3NbaV0pOworICAgIH0KKworICBmcmVlIChhcmdzKTsKKyAgZnJl ZSAoYXR0cl9zdHIpOworICByZXR1cm4gcmV0X3N0cjsKK30KKworLyogVGhp cyBmdW5jdGlvbiBjaGFuZ2VzIHRoZSBhc3NlbWJsZXIgbmFtZSBmb3IgZnVu Y3Rpb25zIHRoYXQgYXJlCisgICB2ZXJzaW9ucy4gIElmIERFQ0wgaXMgYSBm dW5jdGlvbiB2ZXJzaW9uIGFuZCBoYXMgYSAidGFyZ2V0IgorICAgYXR0cmli dXRlLCBpdCBhcHBlbmRzIHRoZSBhdHRyaWJ1dGUgc3RyaW5nIHRvIGl0cyBh c3NlbWJsZXIgbmFtZS4gICovCisKK3N0YXRpYyB0cmVlCitpeDg2X21hbmds ZV9mdW5jdGlvbl92ZXJzaW9uX2Fzc2VtYmxlcl9uYW1lICh0cmVlIGRlY2ws IHRyZWUgaWQpCit7CisgIHRyZWUgdmVyc2lvbl9hdHRyOworICBjb25zdCBj aGFyICpvcmlnX25hbWUsICp2ZXJzaW9uX3N0cmluZywgKmF0dHJfc3RyOwor ICBjaGFyICphc3NlbWJsZXJfbmFtZTsKKworICBpZiAoREVDTF9ERUNMQVJF RF9JTkxJTkVfUCAoZGVjbCkKKyAgICAgICYmIGxvb2t1cF9hdHRyaWJ1dGUg KCJnbnVfaW5saW5lIiwKKwkJCSAgIERFQ0xfQVRUUklCVVRFUyAoZGVjbCkp KQorICAgIGVycm9yX2F0IChERUNMX1NPVVJDRV9MT0NBVElPTiAoZGVjbCks CisJICAgICAgIkZ1bmN0aW9uIHZlcnNpb25zIGNhbm5vdCBiZSBtYXJrZWQg YXMgZ251X2lubGluZSwiCisJICAgICAgIiBib2RpZXMgaGF2ZSB0byBiZSBn ZW5lcmF0ZWQiKTsKKworICBpZiAoREVDTF9WSVJUVUFMX1AgKGRlY2wpCisg ICAgICB8fCBERUNMX1ZJTkRFWCAoZGVjbCkpCisgICAgZXJyb3JfYXQgKERF Q0xfU09VUkNFX0xPQ0FUSU9OIChkZWNsKSwKKwkgICAgICAiVmlydHVhbCBm dW5jdGlvbiB2ZXJzaW9uaW5nIG5vdCBzdXBwb3J0ZWRcbiIpOworCisgIHZl cnNpb25fYXR0ciA9IGxvb2t1cF9hdHRyaWJ1dGUgKCJ0YXJnZXQiLCBERUNM X0FUVFJJQlVURVMgKGRlY2wpKTsKKworICAvKiB0YXJnZXQgYXR0cmlidXRl IHN0cmluZyBpcyBOVUxMIGZvciBkZWZhdWx0IGZ1bmN0aW9ucy4gICovCisg IGlmICh2ZXJzaW9uX2F0dHIgPT0gTlVMTF9UUkVFKQorICAgIHJldHVybiBp ZDsKKworICBvcmlnX25hbWUgPSBJREVOVElGSUVSX1BPSU5URVIgKGlkKTsK KyAgdmVyc2lvbl9zdHJpbmcKKyAgICA9IFRSRUVfU1RSSU5HX1BPSU5URVIg KFRSRUVfVkFMVUUgKFRSRUVfVkFMVUUgKHZlcnNpb25fYXR0cikpKTsKKwor ICBhdHRyX3N0ciA9IHNvcnRlZF9hdHRyX3N0cmluZyAodmVyc2lvbl9zdHJp bmcpOworICBhc3NlbWJsZXJfbmFtZSA9IChjaGFyICopIHhtYWxsb2MgKHN0 cmxlbiAob3JpZ19uYW1lKQorCQkJCSAgICAgKyBzdHJsZW4gKGF0dHJfc3Ry KSArIDIpOworCisgIHNwcmludGYgKGFzc2VtYmxlcl9uYW1lLCAiJXMuJXMi LCBvcmlnX25hbWUsIGF0dHJfc3RyKTsKKworICAvKiBBbGxvdyBhc3NlbWJs ZXIgbmFtZSB0byBiZSBtb2RpZmllZCBpZiBhbHJlYWR5IHNldC4gICovCisg IGlmIChERUNMX0FTU0VNQkxFUl9OQU1FX1NFVF9QIChkZWNsKSkKKyAgICBT RVRfREVDTF9SVEwgKGRlY2wsIE5VTEwpOworCisgIHJldHVybiBnZXRfaWRl bnRpZmllciAoYXNzZW1ibGVyX25hbWUpOworfQorCitzdGF0aWMgdHJlZSAK K2l4ODZfbWFuZ2xlX2RlY2xfYXNzZW1ibGVyX25hbWUgKHRyZWUgZGVjbCwg dHJlZSBpZCkKK3sKKyAgLyogRm9yIGZ1bmN0aW9uIHZlcnNpb24sIGFkZCB0 aGUgdGFyZ2V0IHN1ZmZpeCB0byB0aGUgYXNzZW1ibGVyIG5hbWUuICAqLwor ICBpZiAoVFJFRV9DT0RFIChkZWNsKSA9PSBGVU5DVElPTl9ERUNMCisgICAg ICAmJiBERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAoZGVjbCkpCisgICAgcmV0 dXJuIGl4ODZfbWFuZ2xlX2Z1bmN0aW9uX3ZlcnNpb25fYXNzZW1ibGVyX25h bWUgKGRlY2wsIGlkKTsKKworICByZXR1cm4gaWQ7Cit9CisKKy8qIFJldHVy biBhIG5ldyBuYW1lIGJ5IGFwcGVuZGluZyBTVUZGSVggdG8gdGhlIERFQ0wg bmFtZS4gIElmIG1ha2VfdW5pcXVlCisgICBpcyB0cnVlLCBhcHBlbmQgdGhl IGZ1bGwgcGF0aCBuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZS4gICovCisKK3N0 YXRpYyBjaGFyICoKK21ha2VfbmFtZSAodHJlZSBkZWNsLCBjb25zdCBjaGFy ICpzdWZmaXgsIGJvb2wgbWFrZV91bmlxdWUpCit7CisgIGNoYXIgKmdsb2Jh bF92YXJfbmFtZTsKKyAgaW50IG5hbWVfbGVuOworICBjb25zdCBjaGFyICpu YW1lOworICBjb25zdCBjaGFyICp1bmlxdWVfbmFtZSA9IE5VTEw7CisKKyAg bmFtZSA9IElERU5USUZJRVJfUE9JTlRFUiAoREVDTF9BU1NFTUJMRVJfTkFN RSAoZGVjbCkpOworCisgIC8qIEdldCBhIHVuaXF1ZSBuYW1lIHRoYXQgY2Fu IGJlIHVzZWQgZ2xvYmFsbHkgd2l0aG91dCBhbnkgY2hhbmNlcworICAgICBv ZiBjb2xsaXNpb24gYXQgbGluayB0aW1lLiAgKi8KKyAgaWYgKG1ha2VfdW5p cXVlKQorICAgIHVuaXF1ZV9uYW1lID0gSURFTlRJRklFUl9QT0lOVEVSIChn ZXRfZmlsZV9mdW5jdGlvbl9uYW1lICgiXDAiKSk7CisKKyAgbmFtZV9sZW4g PSBzdHJsZW4gKG5hbWUpICsgc3RybGVuIChzdWZmaXgpICsgMjsKKworICBp ZiAobWFrZV91bmlxdWUpCisgICAgbmFtZV9sZW4gKz0gc3RybGVuICh1bmlx dWVfbmFtZSkgKyAxOworICBnbG9iYWxfdmFyX25hbWUgPSBYTkVXVkVDIChj aGFyLCBuYW1lX2xlbik7CisKKyAgLyogVXNlICcuJyB0byBjb25jYXRlbmF0 ZSBuYW1lcyBhcyBpdCBpcyBkZW1hbmdsZXIgZnJpZW5kbHkuICAqLworICBp ZiAobWFrZV91bmlxdWUpCisgICAgICBzbnByaW50ZiAoZ2xvYmFsX3Zhcl9u YW1lLCBuYW1lX2xlbiwgIiVzLiVzLiVzIiwgbmFtZSwKKwkJdW5pcXVlX25h bWUsIHN1ZmZpeCk7CisgIGVsc2UKKyAgICAgIHNucHJpbnRmIChnbG9iYWxf dmFyX25hbWUsIG5hbWVfbGVuLCAiJXMuJXMiLCBuYW1lLCBzdWZmaXgpOwor CisgIHJldHVybiBnbG9iYWxfdmFyX25hbWU7Cit9CisKKy8qIE1ha2UgYSBk aXNwYXRjaGVyIGRlY2xhcmF0aW9uIGZvciB0aGUgbXVsdGktdmVyc2lvbmVk IGZ1bmN0aW9uIERFQ0wuCisgICBDYWxscyB0byBERUNMIGZ1bmN0aW9uIHdp bGwgYmUgcmVwbGFjZWQgd2l0aCBjYWxscyB0byB0aGUgZGlzcGF0Y2hlcgor ICAgYnkgdGhlIGZyb250LWVuZC4gIFJldHVybiB0aGUgZGVjbCBjcmVhdGVk LiAgKi8KKworc3RhdGljIHRyZWUKK21ha2VfZGlzcGF0Y2hlcl9kZWNsIChj b25zdCB0cmVlIGRlY2wpCit7CisgIHRyZWUgZnVuY19kZWNsOworICBjaGFy ICpmdW5jX25hbWUsICpyZXNvbHZlcl9uYW1lOworICB0cmVlIGZuX3R5cGUs IGZ1bmNfdHlwZTsKKyAgYm9vbCBpc191bmlxID0gZmFsc2U7CisKKyAgaWYg KFRSRUVfUFVCTElDIChkZWNsKSA9PSAwKQorICAgIGlzX3VuaXEgPSB0cnVl OworCisgIGZ1bmNfbmFtZSA9IG1ha2VfbmFtZSAoZGVjbCwgImlmdW5jIiwg aXNfdW5pcSk7CisgIHJlc29sdmVyX25hbWUgPSBtYWtlX25hbWUgKGRlY2ws ICJyZXNvbHZlciIsIGlzX3VuaXEpOworICBnY2NfYXNzZXJ0IChyZXNvbHZl cl9uYW1lKTsKKworICBmbl90eXBlID0gVFJFRV9UWVBFIChkZWNsKTsKKyAg ZnVuY190eXBlID0gYnVpbGRfZnVuY3Rpb25fdHlwZSAoVFJFRV9UWVBFIChm bl90eXBlKSwKKwkJCQkgICBUWVBFX0FSR19UWVBFUyAoZm5fdHlwZSkpOwor ICAKKyAgZnVuY19kZWNsID0gYnVpbGRfZm5fZGVjbCAoZnVuY19uYW1lLCBm dW5jX3R5cGUpOworICBUUkVFX1VTRUQgKGZ1bmNfZGVjbCkgPSAxOworICBE RUNMX0NPTlRFWFQgKGZ1bmNfZGVjbCkgPSBOVUxMX1RSRUU7CisgIERFQ0xf SU5JVElBTCAoZnVuY19kZWNsKSA9IGVycm9yX21hcmtfbm9kZTsKKyAgREVD TF9BUlRJRklDSUFMIChmdW5jX2RlY2wpID0gMTsKKyAgLyogTWFyayB0aGlz IGZ1bmMgYXMgZXh0ZXJuYWwsIHRoZSByZXNvbHZlciB3aWxsIGZsaXAgaXQg YWdhaW4gaWYKKyAgICAgaXQgZ2V0cyBnZW5lcmF0ZWQuICAqLworICBERUNM X0VYVEVSTkFMIChmdW5jX2RlY2wpID0gMTsKKyAgLyogVGhpcyB3aWxsIGJl IG9mIHR5cGUgSUZVTkNzIGhhdmUgdG8gYmUgZXh0ZXJuYWxseSB2aXNpYmxl LiAgKi8KKyAgVFJFRV9QVUJMSUMgKGZ1bmNfZGVjbCkgPSAxOworCisgIHJl dHVybiBmdW5jX2RlY2w7ICAKK30KKworLyogUmV0dXJucyB0cnVlIGlmIGRl Y2wgaXMgbXVsdGktdmVyc2lvbmVkIGFuZCBERUNMIGlzIHRoZSBkZWZhdWx0 IGZ1bmN0aW9uLAorICAgdGhhdCBpcyBpdCBpcyBub3QgdGFnZ2VkIHdpdGgg dGFyZ2V0IHNwZWNpZmljIG9wdGltaXphdGlvbi4gICovCisKK3N0YXRpYyBi b29sCitpc19mdW5jdGlvbl9kZWZhdWx0X3ZlcnNpb24gKGNvbnN0IHRyZWUg ZGVjbCkKK3sKKyAgcmV0dXJuIChUUkVFX0NPREUgKGRlY2wpID09IEZVTkNU SU9OX0RFQ0wKKwkgICYmIERFQ0xfRlVOQ1RJT05fVkVSU0lPTkVEIChkZWNs KQorCSAgJiYgREVDTF9GVU5DVElPTl9TUEVDSUZJQ19UQVJHRVQgKGRlY2wp ID09IE5VTExfVFJFRSk7Cit9CisKKy8qIE1ha2UgYSBkaXNwYXRjaGVyIGRl Y2xhcmF0aW9uIGZvciB0aGUgbXVsdGktdmVyc2lvbmVkIGZ1bmN0aW9uIERF Q0wuCisgICBDYWxscyB0byBERUNMIGZ1bmN0aW9uIHdpbGwgYmUgcmVwbGFj ZWQgd2l0aCBjYWxscyB0byB0aGUgZGlzcGF0Y2hlcgorICAgYnkgdGhlIGZy b250LWVuZC4gIEl0IGFsc28gY2hhaW5zIHRoZSBjZ3JhcGggbm9kZXMgb2Yg YWxsIHRoZQorICAgc2VtYW50aWNhbGx5IGlkZW50aWNhbCB2ZXJzaW9ucyBp biB2ZWN0b3IgRk5fVkVSX1ZFQ19QLiAgUmV0dXJucyB0aGUKKyAgIGRlY2wg b2YgdGhlIGRpc3BhdGNoZXIgZnVuY3Rpb24uICAqLworCitzdGF0aWMgdHJl ZQoraXg4Nl9nZXRfZnVuY3Rpb25fdmVyc2lvbnNfZGlzcGF0Y2hlciAodm9p ZCAqZm5fdmVyX3ZlY19wKQoreworICBzdHJ1Y3QgY2dyYXBoX25vZGUgKm5v ZGUgPSBOVUxMOworICBzdHJ1Y3QgY2dyYXBoX25vZGUgKmRlZmF1bHRfbm9k ZSA9IE5VTEw7CisgIHN0cnVjdCBjZ3JhcGhfbm9kZSAqZGlzcGF0Y2hlcl9u b2RlID0gTlVMTDsKKworICBzdHJ1Y3QgY2dyYXBoX2Z1bmN0aW9uX3ZlcnNp b25faW5mbyAqZGVmYXVsdF92ZXJzaW9uX2luZm8gPSBOVUxMOworICBzdHJ1 Y3QgY2dyYXBoX2Z1bmN0aW9uX3ZlcnNpb25faW5mbyAqZGlzcGF0Y2hlcl92 ZXJzaW9uX2luZm8gPSBOVUxMOworICBzdHJ1Y3QgY2dyYXBoX2Z1bmN0aW9u X3ZlcnNpb25faW5mbyAqbm9kZV92ZXJzaW9uX2luZm8gPSBOVUxMOworCisg IGludCBpeDsKKyAgdHJlZSBlbGU7CisgIHRyZWUgZGlzcGF0Y2hfZGVjbCA9 IE5VTEw7CisgIFZFQyAodHJlZSwgaGVhcCkgKmZuX3Zlcl92ZWMgPSBOVUxM OworCisgIGZuX3Zlcl92ZWMgPSAoVkVDICh0cmVlLGhlYXApICopIGZuX3Zl cl92ZWNfcDsKKyAgZ2NjX2Fzc2VydCAoZm5fdmVyX3ZlYyAhPSBOVUxMKTsK KworICAvKiBGaW5kIHRoZSBkZWZhdWx0IHZlcnNpb24uICAqLworICBmb3Ig KGl4ID0gMDsgVkVDX2l0ZXJhdGUgKHRyZWUsIGZuX3Zlcl92ZWMsIGl4LCBl bGUpOyArK2l4KQorICAgIHsKKyAgICAgIGlmIChpc19mdW5jdGlvbl9kZWZh dWx0X3ZlcnNpb24gKGVsZSkpCisJeworCSAgZGVmYXVsdF9ub2RlID0gY2dy YXBoX2dldF9jcmVhdGVfbm9kZSAoZWxlKTsKKwkgIGJyZWFrOworCX0KKyAg ICB9CisKKyAgLyogSWYgdGhlcmUgaXMgbm8gZGVmYXVsdCBub2RlLCBqdXN0 IHJldHVybiBOVUxMLiAgKi8KKyAgaWYgKCFkZWZhdWx0X25vZGUpCisgICAg cmV0dXJuIE5VTEw7CisKKyAgZGVmYXVsdF92ZXJzaW9uX2luZm8gPSBnZXRf Y2dyYXBoX25vZGVfdmVyc2lvbiAoZGVmYXVsdF9ub2RlKTsKKworICAvKiBJ ZiB0aGUgZGlzcGF0Y2hlciBpcyBhbHJlYWR5IHRoZXJlLCByZXR1cm4gaXQu ICAqLworICBpZiAoZGVmYXVsdF92ZXJzaW9uX2luZm8gJiYgZGVmYXVsdF92 ZXJzaW9uX2luZm8tPmRpc3BhdGNoZXJfcmVzb2x2ZXIpCisgICAgcmV0dXJu IGRlZmF1bHRfdmVyc2lvbl9pbmZvLT5kaXNwYXRjaGVyX3Jlc29sdmVyOwor CisgIGlmIChkZWZhdWx0X3ZlcnNpb25faW5mbyA9PSBOVUxMKQorICAgIGRl ZmF1bHRfdmVyc2lvbl9pbmZvID0gaW5zZXJ0X25ld19jZ3JhcGhfbm9kZV92 ZXJzaW9uIChkZWZhdWx0X25vZGUpOworCisjaWYgZGVmaW5lZCAoQVNNX09V VFBVVF9UWVBFX0RJUkVDVElWRSkgJiYgSEFWRV9HTlVfSU5ESVJFQ1RfRlVO Q1RJT04KKyAgLyogUmlnaHQgbm93LCB0aGUgZGlzcGF0Y2hpbmcgaXMgZG9u ZSB2aWEgaWZ1bmMuICAqLworICBkaXNwYXRjaF9kZWNsID0gbWFrZV9kaXNw YXRjaGVyX2RlY2wgKGRlZmF1bHRfbm9kZS0+c3ltYm9sLmRlY2wpOyAKKyNl bHNlCisgIGVycm9yX2F0IChERUNMX1NPVVJDRV9MT0NBVElPTiAoZGVmYXVs dF9ub2RlLT5zeW1ib2wuZGVjbCksCisJICAgICJNdWx0aXZlcnNpb25pbmcg bmVlZHMgaWZ1bmMgd2hpY2ggaXMgbm90IHN1cHBvcnRlZCAiCisJICAgICJp biB0aGlzIGNvbmZpZ3VyYXRpb24iKTsKKyNlbmRpZgorCisgIGRlZmF1bHRf dmVyc2lvbl9pbmZvLT5kaXNwYXRjaGVyX3Jlc29sdmVyID0gZGlzcGF0Y2hf ZGVjbDsKKyAgZGlzcGF0Y2hlcl9ub2RlID0gY2dyYXBoX2dldF9jcmVhdGVf bm9kZSAoZGlzcGF0Y2hfZGVjbCk7CisgIGdjY19hc3NlcnQgKGRpc3BhdGNo ZXJfbm9kZSk7CisgIGRpc3BhdGNoZXJfbm9kZS0+ZGlzcGF0Y2hlcl9mdW5j dGlvbiA9IDE7CisgIGRpc3BhdGNoZXJfdmVyc2lvbl9pbmZvID0gaW5zZXJ0 X25ld19jZ3JhcGhfbm9kZV92ZXJzaW9uIChkaXNwYXRjaGVyX25vZGUpOwor ICBjZ3JhcGhfbWFya19hZGRyZXNzX3Rha2VuX25vZGUgKGRlZmF1bHRfbm9k ZSk7CisKKyAgZm9yIChpeCA9IDA7IFZFQ19pdGVyYXRlICh0cmVlLCBmbl92 ZXJfdmVjLCBpeCwgZWxlKTsgKytpeCkKKyAgICB7CisgICAgICBub2RlID0g Y2dyYXBoX2dldF9jcmVhdGVfbm9kZSAoZWxlKTsKKyAgICAgIGdjY19hc3Nl cnQgKG5vZGUgIT0gTlVMTCAmJiBERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAo ZWxlKSk7CisKKyAgICAgIGlmIChub2RlID09IGRlZmF1bHRfbm9kZSkKKwlj b250aW51ZTsKKworICAgICAgbm9kZV92ZXJzaW9uX2luZm8gPSBnZXRfY2dy YXBoX25vZGVfdmVyc2lvbiAobm9kZSk7CisgICAgICBpZiAobm9kZV92ZXJz aW9uX2luZm8gPT0gTlVMTCkKKwlub2RlX3ZlcnNpb25faW5mbyA9IGluc2Vy dF9uZXdfY2dyYXBoX25vZGVfdmVyc2lvbiAobm9kZSk7CisKKyAgICAgIGdj Y19hc3NlcnQgKERFQ0xfRlVOQ1RJT05fU1BFQ0lGSUNfVEFSR0VUIChlbGUp ICE9IE5VTExfVFJFRSk7CisKKyAgICAgIC8qIENoYWluIGFsbCB0aGUgY2dy YXBoX2Z1bmN0aW9uX3ZlcnNpb25faW5mbyBub2RlcyB0aGF0IGFyZQorCSBz ZW1hbnRpY2FsbHkgaWRlbnRpY2FsLiAgKi8KKyAgICAgIGlmIChkaXNwYXRj aGVyX3ZlcnNpb25faW5mby0+bmV4dCkKKwl7CisJICBub2RlX3ZlcnNpb25f aW5mby0+bmV4dCA9IGRpc3BhdGNoZXJfdmVyc2lvbl9pbmZvLT5uZXh0Owor CSAgZGlzcGF0Y2hlcl92ZXJzaW9uX2luZm8tPm5leHQtPnByZXYgPSBub2Rl X3ZlcnNpb25faW5mbzsKKwl9CisKKyAgICAgIGRpc3BhdGNoZXJfdmVyc2lv bl9pbmZvLT5uZXh0ID0gbm9kZV92ZXJzaW9uX2luZm87CisgICAgICBub2Rl X3ZlcnNpb25faW5mby0+cHJldiA9IGRpc3BhdGNoZXJfdmVyc2lvbl9pbmZv OworICAgICAgbm9kZV92ZXJzaW9uX2luZm8tPmRpc3BhdGNoZXJfcmVzb2x2 ZXIgPSBkaXNwYXRjaF9kZWNsOworICAgIH0KKworICAvKiBUaGUgZGVmYXVs dCB2ZXJzaW9uIHNob3VsZCBiZSB0aGUgZmlyc3Qgbm9kZS4gICovCisgIGRl ZmF1bHRfdmVyc2lvbl9pbmZvLT5uZXh0ID0gZGlzcGF0Y2hlcl92ZXJzaW9u X2luZm8tPm5leHQ7CisgIGRpc3BhdGNoZXJfdmVyc2lvbl9pbmZvLT5uZXh0 LT5wcmV2ID0gZGVmYXVsdF92ZXJzaW9uX2luZm87CisKKyAgLyogVGhlIGRp c3BhdGNoZXIgbm9kZSBzaG91bGQgZGlyZWN0bHkgcG9pbnQgdG8gdGhlIGRl ZmF1bHQgbm9kZS4gICovCisgIGRpc3BhdGNoZXJfdmVyc2lvbl9pbmZvLT5u ZXh0ID0gZGVmYXVsdF92ZXJzaW9uX2luZm87CisgIAorICByZXR1cm4gZGlz cGF0Y2hfZGVjbDsKK30KKworLyogTWFrZXMgYSBmdW5jdGlvbiBhdHRyaWJ1 dGUgb2YgdGhlIGZvcm0gTkFNRShBUkdfTkFNRSkgYW5kIGNoYWlucworICAg aXQgdG8gQ0hBSU4uICAqLworCitzdGF0aWMgdHJlZQorbWFrZV9hdHRyaWJ1 dGUgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmFyZ19uYW1lLCB0 cmVlIGNoYWluKQoreworICB0cmVlIGF0dHJfbmFtZTsKKyAgdHJlZSBhdHRy X2FyZ19uYW1lOworICB0cmVlIGF0dHJfYXJnczsKKyAgdHJlZSBhdHRyOwor CisgIGF0dHJfbmFtZSA9IGdldF9pZGVudGlmaWVyIChuYW1lKTsKKyAgYXR0 cl9hcmdfbmFtZSA9IGJ1aWxkX3N0cmluZyAoc3RybGVuIChhcmdfbmFtZSks IGFyZ19uYW1lKTsKKyAgYXR0cl9hcmdzID0gdHJlZV9jb25zIChOVUxMX1RS RUUsIGF0dHJfYXJnX25hbWUsIE5VTExfVFJFRSk7CisgIGF0dHIgPSB0cmVl X2NvbnMgKGF0dHJfbmFtZSwgYXR0cl9hcmdzLCBjaGFpbik7CisgIHJldHVy biBhdHRyOworfQorCisvKiBNYWtlIHRoZSByZXNvbHZlciBmdW5jdGlvbiBk ZWNsIHRvIGRpc3BhdGNoIHRoZSB2ZXJzaW9ucyBvZgorICAgYSBtdWx0aS12 ZXJzaW9uZWQgZnVuY3Rpb24sICBERUZBVUxUX0RFQ0wuICBDcmVhdGUgYW4K KyAgIGVtcHR5IGJhc2ljIGJsb2NrIGluIHRoZSByZXNvbHZlciBhbmQgc3Rv cmUgdGhlIHBvaW50ZXIgaW4KKyAgIEVNUFRZX0JCLiAgUmV0dXJuIHRoZSBk ZWNsIG9mIHRoZSByZXNvbHZlciBmdW5jdGlvbi4gICovCisKK3N0YXRpYyB0 cmVlCittYWtlX3Jlc29sdmVyX2Z1bmMgKGNvbnN0IHRyZWUgZGVmYXVsdF9k ZWNsLAorCQkgICAgY29uc3QgdHJlZSBkaXNwYXRjaF9kZWNsLAorCQkgICAg YmFzaWNfYmxvY2sgKmVtcHR5X2JiKQoreworICBjaGFyICpyZXNvbHZlcl9u YW1lOworICB0cmVlIGRlY2wsIHR5cGUsIGRlY2xfbmFtZSwgdDsKKyAgYmFz aWNfYmxvY2sgbmV3X2JiOworICBib29sIGlzX3VuaXEgPSBmYWxzZTsKKwor ICAvKiBJRlVOQydzIGhhdmUgdG8gYmUgZ2xvYmFsbHkgdmlzaWJsZS4gIFNv LCBpZiB0aGUgZGVmYXVsdF9kZWNsIGlzCisgICAgIG5vdCwgdGhlbiB0aGUg bmFtZSBvZiB0aGUgSUZVTkMgc2hvdWxkIGJlIG1hZGUgdW5pcXVlLiAgKi8K KyAgaWYgKFRSRUVfUFVCTElDIChkZWZhdWx0X2RlY2wpID09IDApCisgICAg aXNfdW5pcSA9IHRydWU7CisKKyAgLyogQXBwZW5kIHRoZSBmaWxlbmFtZSB0 byB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gaWYgdGhlIHZlcnNpb25zIGFyZQor ICAgICBub3QgZXh0ZXJuYWxseSB2aXNpYmxlLiAgVGhpcyBpcyBiZWNhdXNl IHRoZSByZXNvbHZlciBmdW5jdGlvbiBoYXMKKyAgICAgdG8gYmUgZXh0ZXJu YWxseSB2aXNpYmxlIGZvciB0aGUgbG9hZGVyIHRvIGZpbmQgaXQuICBTbywg YXBwZW5kaW5nCisgICAgIHRoZSBmaWxlbmFtZSB3aWxsIHByZXZlbnQgY29u ZmxpY3RzIHdpdGggYSByZXNvbHZlciBmdW5jdGlvbiBmcm9tCisgICAgIGFu b3RoZXIgbW9kdWxlIHdoaWNoIGlzIGJhc2VkIG9uIHRoZSBzYW1lIHZlcnNp b24gbmFtZS4gICovCisgIHJlc29sdmVyX25hbWUgPSBtYWtlX25hbWUgKGRl ZmF1bHRfZGVjbCwgInJlc29sdmVyIiwgaXNfdW5pcSk7CisKKyAgLyogVGhl IHJlc29sdmVyIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gYSAodm9pZCAqKS4g Ki8KKyAgdHlwZSA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGVfbGlzdCAocHRyX3R5 cGVfbm9kZSwgTlVMTF9UUkVFKTsKKworICBkZWNsID0gYnVpbGRfZm5fZGVj bCAocmVzb2x2ZXJfbmFtZSwgdHlwZSk7CisgIGRlY2xfbmFtZSA9IGdldF9p ZGVudGlmaWVyIChyZXNvbHZlcl9uYW1lKTsKKyAgU0VUX0RFQ0xfQVNTRU1C TEVSX05BTUUgKGRlY2wsIGRlY2xfbmFtZSk7CisKKyAgREVDTF9OQU1FIChk ZWNsKSA9IGRlY2xfbmFtZTsKKyAgVFJFRV9VU0VEIChkZWNsKSA9IDE7Cisg IERFQ0xfQVJUSUZJQ0lBTCAoZGVjbCkgPSAxOworICBERUNMX0lHTk9SRURf UCAoZGVjbCkgPSAwOworICAvKiBJRlVOQyByZXNvbHZlcnMgaGF2ZSB0byBi ZSBleHRlcm5hbGx5IHZpc2libGUuICAqLworICBUUkVFX1BVQkxJQyAoZGVj bCkgPSAxOworICBERUNMX1VOSU5MSU5BQkxFIChkZWNsKSA9IDE7CisKKyAg REVDTF9FWFRFUk5BTCAoZGVjbCkgPSAwOworICBERUNMX0VYVEVSTkFMIChk aXNwYXRjaF9kZWNsKSA9IDA7CisKKyAgREVDTF9DT05URVhUIChkZWNsKSA9 IE5VTExfVFJFRTsKKyAgREVDTF9JTklUSUFMIChkZWNsKSA9IG1ha2Vfbm9k ZSAoQkxPQ0spOworICBERUNMX1NUQVRJQ19DT05TVFJVQ1RPUiAoZGVjbCkg PSAwOworICBUUkVFX1JFQURPTkxZIChkZWNsKSA9IDA7CisgIERFQ0xfUFVS RV9QIChkZWNsKSA9IDA7CisKKyAgaWYgKERFQ0xfQ09NREFUX0dST1VQIChk ZWZhdWx0X2RlY2wpKQorICAgIHsKKyAgICAgIERFQ0xfQ09NREFUIChkZWNs KSA9IERFQ0xfQ09NREFUIChkZWZhdWx0X2RlY2wpOworICAgICAgbWFrZV9k ZWNsX29uZV9vbmx5IChkZWNsLCBERUNMX0NPTURBVF9HUk9VUCAoZGVmYXVs dF9kZWNsKSk7CisgICAgfQorICBlbHNlIGlmIChUUkVFX1BVQkxJQyAoZGVm YXVsdF9kZWNsKSkKKyAgICB7CisgICAgICAvKiBJbiB0aGlzIGNhc2UsIGVh Y2ggdHJhbnNsYXRpb24gdW5pdCB3aXRoIGEgY2FsbCB0byB0aGlzCisJIHZl cnNpb25lZCBmdW5jdGlvbiB3aWxsIHB1dCBvdXQgYSByZXNvbHZlci4gIEVu c3VyZSBpdAorCSBpcyBjb21kYXQgdG8ga2VlcCBqdXN0IG9uZSBjb3B5LiAg Ki8KKyAgICAgIERFQ0xfQ09NREFUIChkZWNsKSA9IDE7CisgICAgICBtYWtl X2RlY2xfb25lX29ubHkgKGRlY2wsIERFQ0xfQVNTRU1CTEVSX05BTUUgKGRl Y2wpKTsKKyAgICB9CisgIC8qIEJ1aWxkIHJlc3VsdCBkZWNsIGFuZCBhZGQg dG8gZnVuY3Rpb25fZGVjbC4gKi8KKyAgdCA9IGJ1aWxkX2RlY2wgKFVOS05P V05fTE9DQVRJT04sIFJFU1VMVF9ERUNMLCBOVUxMX1RSRUUsIHB0cl90eXBl X25vZGUpOworICBERUNMX0FSVElGSUNJQUwgKHQpID0gMTsKKyAgREVDTF9J R05PUkVEX1AgKHQpID0gMTsKKyAgREVDTF9SRVNVTFQgKGRlY2wpID0gdDsK KworICBnaW1wbGlmeV9mdW5jdGlvbl90cmVlIChkZWNsKTsKKyAgcHVzaF9j ZnVuIChERUNMX1NUUlVDVF9GVU5DVElPTiAoZGVjbCkpOworICBnaW1wbGVf cmVnaXN0ZXJfY2ZnX2hvb2tzICgpOworICBpbml0X2VtcHR5X3RyZWVfY2Zn X2Zvcl9mdW5jdGlvbiAoREVDTF9TVFJVQ1RfRlVOQ1RJT04gKGRlY2wpKTsK KyAgY2Z1bi0+Y3Vycl9wcm9wZXJ0aWVzIHw9CisgICAgKFBST1BfZ2ltcGxl X2xjZiB8IFBST1BfZ2ltcGxlX2xlaCB8IFBST1BfY2ZnIHwgUFJPUF9zc2EK KyAgICAgfCBQUk9QX2dpbXBsZV9hbnkpOworICBjZnVuLT5jdXJyX3Byb3Bl cnRpZXMgPSAxNTsKKyAgbmV3X2JiID0gY3JlYXRlX2VtcHR5X2JiIChFTlRS WV9CTE9DS19QVFIpOworICBtYWtlX2VkZ2UgKEVOVFJZX0JMT0NLX1BUUiwg bmV3X2JiLCBFREdFX0ZBTExUSFJVKTsKKyAgbWFrZV9lZGdlIChuZXdfYmIs IEVYSVRfQkxPQ0tfUFRSLCAwKTsKKyAgKmVtcHR5X2JiID0gbmV3X2JiOwor CisgIGNncmFwaF9hZGRfbmV3X2Z1bmN0aW9uIChkZWNsLCB0cnVlKTsKKyAg Y2dyYXBoX2NhbGxfZnVuY3Rpb25faW5zZXJ0aW9uX2hvb2tzIChjZ3JhcGhf Z2V0X2NyZWF0ZV9ub2RlIChkZWNsKSk7CisKKyAgaWYgKERFQ0xfQ09NREFU X0dST1VQIChkZWZhdWx0X2RlY2wpKQorICAgIHsKKyAgICAgIGdjY19hc3Nl cnQgKGNncmFwaF9nZXRfbm9kZSAoZGVmYXVsdF9kZWNsKSk7CisgICAgICBz eW10YWJfYWRkX3RvX3NhbWVfY29tZGF0X2dyb3VwICgKKwkoc3ltdGFiX25v ZGUpIGNncmFwaF9nZXRfbm9kZSAoZGVjbCksCisJKHN5bXRhYl9ub2RlKSBj Z3JhcGhfZ2V0X25vZGUgKGRlZmF1bHRfZGVjbCkpOworICAgIH0KKworICBw b3BfY2Z1biAoKTsKKworICBnY2NfYXNzZXJ0IChkaXNwYXRjaF9kZWNsICE9 IE5VTEwpOworICAvKiBNYXJrIGRpc3BhdGNoX2RlY2wgYXMgImlmdW5jIiB3 aXRoIHJlc29sdmVyIGFzIHJlc29sdmVyX25hbWUuICAqLworICBERUNMX0FU VFJJQlVURVMgKGRpc3BhdGNoX2RlY2wpIAorICAgID0gbWFrZV9hdHRyaWJ1 dGUgKCJpZnVuYyIsIHJlc29sdmVyX25hbWUsIERFQ0xfQVRUUklCVVRFUyAo ZGlzcGF0Y2hfZGVjbCkpOworCisgIC8qIENyZWF0ZSB0aGUgYWxpYXMgZm9y IGRpc3BhdGNoIHRvIHJlc29sdmVyIGhlcmUuICAqLworICBjZ3JhcGhfY3Jl YXRlX2Z1bmN0aW9uX2FsaWFzIChkaXNwYXRjaF9kZWNsLCBkZWNsKTsKKyAg cmV0dXJuIGRlY2w7Cit9CisKKy8qIEdlbmVyYXRlIHRoZSBkaXNwYXRjaGlu ZyBjb2RlIGJvZHkgdG8gZGlzcGF0Y2ggbXVsdGktdmVyc2lvbmVkIGZ1bmN0 aW9uCisgICBERUNMLiAgVGhlIHRhcmdldCBob29rIGlzIGNhbGxlZCB0byBw cm9jZXNzIHRoZSAidGFyZ2V0IiBhdHRyaWJ1dGVzIGFuZAorICAgcHJvdmlk ZSB0aGUgY29kZSB0byBkaXNwYXRjaCB0aGUgcmlnaHQgZnVuY3Rpb24gYXQg cnVuLXRpbWUuICBOT0RFIHBvaW50cworICAgdG8gdGhlIGRpc3BhdGNoZXIg ZGVjbCB3aG9zZSBib2R5IHdpbGwgYmUgY3JlYXRlZC4gICovCisKK3N0YXRp YyB0cmVlIAoraXg4Nl9nZW5lcmF0ZV92ZXJzaW9uX2Rpc3BhdGNoZXJfYm9k eSAodm9pZCAqbm9kZV9wKQoreworICB0cmVlIHJlc29sdmVyX2RlY2w7Cisg IGJhc2ljX2Jsb2NrIGVtcHR5X2JiOworICBWRUMgKHRyZWUsIGhlYXApICpm bl92ZXJfdmVjID0gTlVMTDsKKyAgdHJlZSBkZWZhdWx0X3Zlcl9kZWNsOwor ICBzdHJ1Y3QgY2dyYXBoX25vZGUgKnZlcnNuOworICBzdHJ1Y3QgY2dyYXBo X25vZGUgKm5vZGU7CisKKyAgc3RydWN0IGNncmFwaF9mdW5jdGlvbl92ZXJz aW9uX2luZm8gKm5vZGVfdmVyc2lvbl9pbmZvID0gTlVMTDsKKyAgc3RydWN0 IGNncmFwaF9mdW5jdGlvbl92ZXJzaW9uX2luZm8gKnZlcnNuX2luZm8gPSBO VUxMOworCisgIG5vZGUgPSAoY2dyYXBoX25vZGUgKilub2RlX3A7CisKKyAg bm9kZV92ZXJzaW9uX2luZm8gPSBnZXRfY2dyYXBoX25vZGVfdmVyc2lvbiAo bm9kZSk7CisgIGdjY19hc3NlcnQgKG5vZGUtPmRpc3BhdGNoZXJfZnVuY3Rp b24KKwkgICAgICAmJiBub2RlX3ZlcnNpb25faW5mbyAhPSBOVUxMKTsKKwor ICBpZiAobm9kZV92ZXJzaW9uX2luZm8tPmRpc3BhdGNoZXJfcmVzb2x2ZXIp CisgICAgcmV0dXJuIG5vZGVfdmVyc2lvbl9pbmZvLT5kaXNwYXRjaGVyX3Jl c29sdmVyOworCisgIC8qIFRoZSBmaXJzdCB2ZXJzaW9uIGluIHRoZSBjaGFp biBjb3JyZXNwb25kcyB0byB0aGUgZGVmYXVsdCB2ZXJzaW9uLiAgKi8KKyAg ZGVmYXVsdF92ZXJfZGVjbCA9IG5vZGVfdmVyc2lvbl9pbmZvLT5uZXh0LT50 aGlzX25vZGUtPnN5bWJvbC5kZWNsOworCisgIC8qIG5vZGUgaXMgZ29pbmcg dG8gYmUgYW4gYWxpYXMsIHNvIHJlbW92ZSB0aGUgZmluYWxpemVkIGJpdC4g ICovCisgIG5vZGUtPmxvY2FsLmZpbmFsaXplZCA9IDA7CisKKyAgcmVzb2x2 ZXJfZGVjbCA9IG1ha2VfcmVzb2x2ZXJfZnVuYyAoZGVmYXVsdF92ZXJfZGVj bCwKKwkJCQkgICAgICBub2RlLT5zeW1ib2wuZGVjbCwgJmVtcHR5X2JiKTsK KyAgbm9kZV92ZXJzaW9uX2luZm8tPmRpc3BhdGNoZXJfcmVzb2x2ZXIgPSBy ZXNvbHZlcl9kZWNsOworCisgIHB1c2hfY2Z1biAoREVDTF9TVFJVQ1RfRlVO Q1RJT04gKHJlc29sdmVyX2RlY2wpKTsKKworICBmbl92ZXJfdmVjID0gVkVD X2FsbG9jICh0cmVlLCBoZWFwLCAyKTsKKworICBmb3IgKHZlcnNuX2luZm8g PSBub2RlX3ZlcnNpb25faW5mby0+bmV4dDsgdmVyc25faW5mbzsKKyAgICAg ICB2ZXJzbl9pbmZvID0gdmVyc25faW5mby0+bmV4dCkKKyAgICB7CisgICAg ICB2ZXJzbiA9IHZlcnNuX2luZm8tPnRoaXNfbm9kZTsKKyAgICAgIC8qIENo ZWNrIGZvciB2aXJ0dWFsIGZ1bmN0aW9ucyBoZXJlIGFnYWluLCBhcyBieSB0 aGlzIHRpbWUgaXQgc2hvdWxkCisJIGhhdmUgYmVlbiBkZXRlcm1pbmVkIGlm IHRoaXMgZnVuY3Rpb24gbmVlZHMgYSB2dGFibGUgaW5kZXggb3IKKwkgbm90 LiAgVGhpcyBoYXBwZW5zIGZvciBtZXRob2RzIGluIGRlcml2ZWQgY2xhc3Nl cyB0aGF0IG92ZXJyaWRlCisJIHZpcnR1YWwgbWV0aG9kcyBpbiBiYXNlIGNs YXNzZXMgYnV0IGFyZSBub3QgZXhwbGljaXRseSBtYXJrZWQgYXMKKwkgdmly dHVhbC4gICovCisgICAgICBpZiAoREVDTF9WSU5ERVggKHZlcnNuLT5zeW1i b2wuZGVjbCkpCisgICAgICAgIGVycm9yX2F0IChERUNMX1NPVVJDRV9MT0NB VElPTiAodmVyc24tPnN5bWJvbC5kZWNsKSwKKwkJICAiVmlydHVhbCBmdW5j dGlvbiBtdWx0aXZlcnNpb25pbmcgbm90IHN1cHBvcnRlZCIpOworICAgICAg VkVDX3NhZmVfcHVzaCAodHJlZSwgaGVhcCwgZm5fdmVyX3ZlYywgdmVyc24t PnN5bWJvbC5kZWNsKTsKKyAgICB9CisKKyAgZGlzcGF0Y2hfZnVuY3Rpb25f dmVyc2lvbnMgKHJlc29sdmVyX2RlY2wsIGZuX3Zlcl92ZWMsICZlbXB0eV9i Yik7CisKKyAgcmVidWlsZF9jZ3JhcGhfZWRnZXMgKCk7IAorICBwb3BfY2Z1 biAoKTsKKyAgcmV0dXJuIHJlc29sdmVyX2RlY2w7Cit9CisKIC8qIFRoaXMg YnVpbGRzIHRoZSBwcm9jZXNzb3JfbW9kZWwgc3RydWN0IHR5cGUgZGVmaW5l ZCBpbgogICAgbGliZ2NjL2NvbmZpZy9pMzg2L2NwdWluZm8uYyAgKi8KIApA QCAtNDEwMDUsNiArNDIwMDIsOSBAQCBpeDg2X21lbW1vZGVsX2NoZWNrICh1 bnNpZ25lZCBIT1NUX1dJREVfSU5UIHZhbCkKICN1bmRlZiBUQVJHRVRfUFJP RklMRV9CRUZPUkVfUFJPTE9HVUUKICNkZWZpbmUgVEFSR0VUX1BST0ZJTEVf QkVGT1JFX1BST0xPR1VFIGl4ODZfcHJvZmlsZV9iZWZvcmVfcHJvbG9ndWUK IAorI3VuZGVmIFRBUkdFVF9NQU5HTEVfREVDTF9BU1NFTUJMRVJfTkFNRQor I2RlZmluZSBUQVJHRVRfTUFOR0xFX0RFQ0xfQVNTRU1CTEVSX05BTUUgaXg4 Nl9tYW5nbGVfZGVjbF9hc3NlbWJsZXJfbmFtZQorCiAjdW5kZWYgVEFSR0VU X0FTTV9VTkFMSUdORURfSElfT1AKICNkZWZpbmUgVEFSR0VUX0FTTV9VTkFM SUdORURfSElfT1AgVEFSR0VUX0FTTV9BTElHTkVEX0hJX09QCiAjdW5kZWYg VEFSR0VUX0FTTV9VTkFMSUdORURfU0lfT1AKQEAgLTQxMDk4LDYgKzQyMDk4 LDE3IEBAIGl4ODZfbWVtbW9kZWxfY2hlY2sgKHVuc2lnbmVkIEhPU1RfV0lE RV9JTlQgdmFsKQogI3VuZGVmIFRBUkdFVF9GT0xEX0JVSUxUSU4KICNkZWZp bmUgVEFSR0VUX0ZPTERfQlVJTFRJTiBpeDg2X2ZvbGRfYnVpbHRpbgogCisj dW5kZWYgVEFSR0VUX0NPTVBBUkVfVkVSU0lPTl9QUklPUklUWQorI2RlZmlu ZSBUQVJHRVRfQ09NUEFSRV9WRVJTSU9OX1BSSU9SSVRZIGl4ODZfY29tcGFy ZV92ZXJzaW9uX3ByaW9yaXR5CisKKyN1bmRlZiBUQVJHRVRfR0VORVJBVEVf VkVSU0lPTl9ESVNQQVRDSEVSX0JPRFkKKyNkZWZpbmUgVEFSR0VUX0dFTkVS QVRFX1ZFUlNJT05fRElTUEFUQ0hFUl9CT0RZIFwKKyAgaXg4Nl9nZW5lcmF0 ZV92ZXJzaW9uX2Rpc3BhdGNoZXJfYm9keQorCisjdW5kZWYgVEFSR0VUX0dF VF9GVU5DVElPTl9WRVJTSU9OU19ESVNQQVRDSEVSCisjZGVmaW5lIFRBUkdF VF9HRVRfRlVOQ1RJT05fVkVSU0lPTlNfRElTUEFUQ0hFUiBcCisgIGl4ODZf Z2V0X2Z1bmN0aW9uX3ZlcnNpb25zX2Rpc3BhdGNoZXIKKwogI3VuZGVmIFRB UkdFVF9FTlVNX1ZBX0xJU1RfUAogI2RlZmluZSBUQVJHRVRfRU5VTV9WQV9M SVNUX1AgaXg4Nl9lbnVtX3ZhX2xpc3QKIApAQCAtNDEyMzgsNiArNDIyNDks OSBAQCBpeDg2X21lbW1vZGVsX2NoZWNrICh1bnNpZ25lZCBIT1NUX1dJREVf SU5UIHZhbCkKICN1bmRlZiBUQVJHRVRfT1BUSU9OX1BSSU5UCiAjZGVmaW5l IFRBUkdFVF9PUFRJT05fUFJJTlQgaXg4Nl9mdW5jdGlvbl9zcGVjaWZpY19w cmludAogCisjdW5kZWYgVEFSR0VUX09QVElPTl9GVU5DVElPTl9WRVJTSU9O UworI2RlZmluZSBUQVJHRVRfT1BUSU9OX0ZVTkNUSU9OX1ZFUlNJT05TIGl4 ODZfZnVuY3Rpb25fdmVyc2lvbnMKKwogI3VuZGVmIFRBUkdFVF9DQU5fSU5M SU5FX1AKICNkZWZpbmUgVEFSR0VUX0NBTl9JTkxJTkVfUCBpeDg2X2Nhbl9p bmxpbmVfcAogCkluZGV4OiBnY2MvdGVzdHN1aXRlL2crKy5kZy9tdjEuQwo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvdGVzdHN1aXRlL2crKy5k Zy9tdjEuQwkocmV2aXNpb24gMCkKKysrIGdjYy90ZXN0c3VpdGUvZysrLmRn L212MS5DCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzMCBAQAorLyogVGVz dCBjYXNlIHRvIGNoZWNrIGlmIE11bHRpdmVyc2lvbmluZyB3b3Jrcy4gICov CisvKiB7IGRnLWRvIHJ1biB7IHRhcmdldCBpPzg2LSotKiB4ODZfNjQtKi0q IH0gfSAqLworLyogeyBkZy1yZXF1aXJlLWlmdW5jICIiIH0gICovCisvKiB7 IGRnLW9wdGlvbnMgIi1PMiAtZlBJQyAtbW5vLWF2eCAtbW5vLXBvcGNudCIg fSAqLworCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKy8qIERlZmF1bHQgdmVy c2lvbi4gICovCitpbnQgZm9vICgpOworLyogVGhlIG90aGVyIHZlcnNpb25z IG9mIGZvby4gIE1peCB1cCB0aGUgb3JkZXJpbmcgYW5kIAorICAgY2hlY2sg aWYgdGhlIGRpc3BhdGNoaW5nIGRvZXMgaXQgaW4gdGhlIG9yZGVyIG9mIHBy aW9yaXR5LiAqLworLyogQ2hlY2sgY29tYmluYXRpb24gb2YgdGFyZ2V0IGF0 dHJpYnV0ZXMuICAqLworaW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9fICgodGFy Z2V0KCJhcmNoPWNvcmVpNyxwb3BjbnQiKSkpOworLyogVGhlIHRhcmdldCBv cGVyYW5kcyBpbiB0aGlzIGRlY2xhcmF0aW9uIGFuZCB0aGUgZGVmaW5pdGlv biBhcmUgcmUtb3JkZXJlZC4KKyAgIFRoaXMgc2hvdWxkIHN0aWxsIHdvcmsu ICAqLworaW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJzc3Nl MyxhdngyIikpKTsKKworLyogQ2hlY2sgZm9yIGFsbCB0YXJnZXQgYXR0cmli dXRlcyBmb3Igd2hpY2ggZGlzcGF0Y2hlcnMgYXJlIGF2YWlsYWJsZS4gICov CisvKiBDaGVjayBhcmNoPSAqLworaW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9f KCh0YXJnZXQoImFyY2g9Y29yZTIiKSkpOworaW50IGZvbyAoKSBfX2F0dHJp YnV0ZV9fKCh0YXJnZXQoImFyY2g9Y29yZWk3IikpKTsKK2ludCBmb28gKCkg X19hdHRyaWJ1dGVfXygodGFyZ2V0KCJhcmNoPWF0b20iKSkpOworLyogQ2hl Y2sgSVNBcyAgKi8KK2ludCBmb28gKCkgX19hdHRyaWJ1dGVfXygodGFyZ2V0 KCJhdngiKSkpOworaW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0 KCJhcmNoPWNvcmUyLHNzZTQuMiIpKSk7CisvKiBDaGVjayBtb3JlIGFyY2g9 LiAgKi8KK2ludCBmb28gKCkgX19hdHRyaWJ1dGVfXygodGFyZ2V0KCJhcmNo PWFtZGZhbTEwIikpKTsKK2ludCBmb28gKCkgX19hdHRyaWJ1dGVfXygodGFy Z2V0KCJhcmNoPWJkdmVyMSIpKSk7CitpbnQgZm9vICgpIF9fYXR0cmlidXRl X18oKHRhcmdldCgiYXJjaD1iZHZlcjIiKSkpOworCitpbnQgKCpwKSgpID0g JmZvbzsKK2ludCBtYWluICgpCit7CisgIGludCB2YWwgPSBmb28gKCk7Cisg IGFzc2VydCAodmFsID09ICAoKnApKCkpOworCisgIC8qIENoZWNrIGluIHRo ZSBleGFjdCBzYW1lIG9yZGVyIGluIHdoaWNoIHRoZSBkaXNwYXRjaGluZwor ICAgICBpcyBleHBlY3RlZCB0byBoYXBwZW4uICAqLworICBpZiAoX19idWls dGluX2NwdV9pcyAoImJkdmVyMSIpKQorICAgIGFzc2VydCAodmFsID09IDEp OworICBlbHNlIGlmIChfX2J1aWx0aW5fY3B1X2lzICgiYmR2ZXIyIikpCisg ICAgYXNzZXJ0ICh2YWwgPT0gMik7CisgIGVsc2UgaWYgKF9fYnVpbHRpbl9j cHVfc3VwcG9ydHMgKCJhdngyIikKKwkgICAmJiBfX2J1aWx0aW5fY3B1X3N1 cHBvcnRzICgic3NzZTMiKSkKKyAgICBhc3NlcnQgKHZhbCA9PSAzKTsKKyAg ZWxzZSBpZiAoX19idWlsdGluX2NwdV9zdXBwb3J0cyAoImF2eCIpKQorICAg IGFzc2VydCAodmFsID09IDQpOworICBlbHNlIGlmIChfX2J1aWx0aW5fY3B1 X2lzICgiY29yZWk3IikKKwkgICAmJiBfX2J1aWx0aW5fY3B1X3N1cHBvcnRz ICgicG9wY250IikpCisgICAgYXNzZXJ0ICh2YWwgPT0gNSk7CisgIGVsc2Ug aWYgKF9fYnVpbHRpbl9jcHVfaXMgKCJjb3JlaTciKSkKKyAgICBhc3NlcnQg KHZhbCA9PSA2KTsKKyAgZWxzZSBpZiAoX19idWlsdGluX2NwdV9pcyAoImFt ZGZhbTEwaCIpKQorICAgIGFzc2VydCAodmFsID09IDcpOworICBlbHNlIGlm IChfX2J1aWx0aW5fY3B1X2lzICgiY29yZTIiKQorCSAgICYmIF9fYnVpbHRp bl9jcHVfc3VwcG9ydHMgKCJzc2U0LjIiKSkKKyAgICBhc3NlcnQgKHZhbCA9 PSA4KTsKKyAgZWxzZSBpZiAoX19idWlsdGluX2NwdV9pcyAoImNvcmUyIikp CisgICAgYXNzZXJ0ICh2YWwgPT0gOSk7CisgIGVsc2UgaWYgKF9fYnVpbHRp bl9jcHVfaXMgKCJhdG9tIikpCisgICAgYXNzZXJ0ICh2YWwgPT0gMTApOwor ICBlbHNlCisgICAgYXNzZXJ0ICh2YWwgPT0gMCk7CisgIAorICByZXR1cm4g MDsKK30KKworaW50IGZvbyAoKQoreworICByZXR1cm4gMDsKK30KKworaW50 IF9fYXR0cmlidXRlX18gKCh0YXJnZXQoImFyY2g9Y29yZWk3LHBvcGNudCIp KSkKK2ZvbyAoKQoreworICByZXR1cm4gNTsKK30KK2ludCBfX2F0dHJpYnV0 ZV9fICgodGFyZ2V0KCJhdngyLHNzc2UzIikpKQorZm9vICgpCit7CisgIHJl dHVybiAzOworfQorCitpbnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgiYXJj aD1jb3JlMiIpKSkKK2ZvbyAoKQoreworICByZXR1cm4gOTsKK30KKworaW50 IF9fYXR0cmlidXRlX18gKCh0YXJnZXQoImFyY2g9Y29yZWk3IikpKQorZm9v ICgpCit7CisgIHJldHVybiA2OworfQorCitpbnQgX19hdHRyaWJ1dGVfXyAo KHRhcmdldCgiYXJjaD1hdG9tIikpKQorZm9vICgpCit7CisgIHJldHVybiAx MDsKK30KKworaW50IF9fYXR0cmlidXRlX18gKCh0YXJnZXQoImF2eCIpKSkK K2ZvbyAoKQoreworICByZXR1cm4gNDsKK30KKworaW50IF9fYXR0cmlidXRl X18gKCh0YXJnZXQoImFyY2g9Y29yZTIsc3NlNC4yIikpKQorZm9vICgpCit7 CisgIHJldHVybiA4OworfQorCitpbnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdl dCgiYXJjaD1hbWRmYW0xMCIpKSkKK2ZvbyAoKQoreworICByZXR1cm4gNzsK K30KKworaW50IF9fYXR0cmlidXRlX18gKCh0YXJnZXQoImFyY2g9YmR2ZXIx IikpKQorZm9vICgpCit7CisgIHJldHVybiAxOworfQorCitpbnQgX19hdHRy aWJ1dGVfXyAoKHRhcmdldCgiYXJjaD1iZHZlcjIiKSkpCitmb28gKCkKK3sK KyAgcmV0dXJuIDI7Cit9CkluZGV4OiBnY2MvdGVzdHN1aXRlL2crKy5kZy9t djIuQwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvdGVzdHN1aXRl L2crKy5kZy9tdjIuQwkocmV2aXNpb24gMCkKKysrIGdjYy90ZXN0c3VpdGUv ZysrLmRnL212Mi5DCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyMSBAQAor LyogVGVzdCBjYXNlIHRvIGNoZWNrIGlmIE11bHRpdmVyc2lvbmluZyBjaG9v c2VzIHRoZSBjb3JyZWN0CisgICBkaXNwYXRjaGluZyBvcmRlciB3aGVuIHZl cnNpb25zIGFyZSBmb3IgdmFyaW91cyBJU0FzLiAgKi8KKy8qIHsgZGctZG8g cnVuIHsgdGFyZ2V0IGk/ODYtKi0qIHg4Nl82NC0qLSogfSB9ICovCisvKiB7 IGRnLXJlcXVpcmUtaWZ1bmMgIiIgfSAgKi8KKy8qIHsgZGctb3B0aW9ucyAi LU8yIC1tbm8tc3NlIC1tbm8tbW14IC1tbm8tcG9wY250IC1tbm8tYXZ4IiB9 ICovCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRpby5o PgorCisvKiBEZWZhdWx0IHZlcnNpb24uICAqLworaW50IGZvbyAoKTsKKy8q IFRoZSBkaXNwYXRjaCBjaGVja3Mgc2hvdWxkIGJlIGluIHRoZSBleGFjdCBy ZXZlcnNlIG9yZGVyIG9mIHRoZQorICAgZGVjbGFyYXRpb25zIGJlbG93LiAg Ki8KK2ludCBmb28gKCkgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCAoIm1teCIp KSk7CitpbnQgZm9vICgpIF9fYXR0cmlidXRlX18gKCh0YXJnZXQgKCJzc2Ui KSkpOworaW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0ICgic3Nl MiIpKSk7CitpbnQgZm9vICgpIF9fYXR0cmlidXRlX18gKCh0YXJnZXQgKCJz c2UzIikpKTsKK2ludCBmb28gKCkgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCAo InNzc2UzIikpKTsKK2ludCBmb28gKCkgX19hdHRyaWJ1dGVfXyAoKHRhcmdl dCAoInNzZTQuMSIpKSk7CitpbnQgZm9vICgpIF9fYXR0cmlidXRlX18gKCh0 YXJnZXQgKCJzc2U0LjIiKSkpOworaW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9f ICgodGFyZ2V0ICgicG9wY250IikpKTsKK2ludCBmb28gKCkgX19hdHRyaWJ1 dGVfXyAoKHRhcmdldCAoImF2eCIpKSk7CitpbnQgZm9vICgpIF9fYXR0cmli dXRlX18gKCh0YXJnZXQgKCJhdngyIikpKTsKKworaW50IG1haW4gKCkKK3sK KworICBpbnQgdmFsID0gZm9vICgpOworICBwcmludGYgKCJ2YWwgPSAlZFxu IiwgdmFsKTsKKworICBpZiAoX19idWlsdGluX2NwdV9zdXBwb3J0cyAoImF2 eDIiKSkKKyAgICBhc3NlcnQgKHZhbCA9PSAxKTsKKyAgZWxzZSBpZiAoX19i dWlsdGluX2NwdV9zdXBwb3J0cyAoImF2eCIpKQorICAgIGFzc2VydCAodmFs ID09IDIpOworICBlbHNlIGlmIChfX2J1aWx0aW5fY3B1X3N1cHBvcnRzICgi cG9wY250IikpCisgICAgYXNzZXJ0ICh2YWwgPT0gMyk7CisgIGVsc2UgaWYg KF9fYnVpbHRpbl9jcHVfc3VwcG9ydHMgKCJzc2U0LjIiKSkKKyAgICBhc3Nl cnQgKHZhbCA9PSA0KTsKKyAgZWxzZSBpZiAoX19idWlsdGluX2NwdV9zdXBw b3J0cyAoInNzZTQuMSIpKQorICAgIGFzc2VydCAodmFsID09IDUpOworICBl bHNlIGlmIChfX2J1aWx0aW5fY3B1X3N1cHBvcnRzICgic3NzZTMiKSkKKyAg ICBhc3NlcnQgKHZhbCA9PSA2KTsKKyAgZWxzZSBpZiAoX19idWlsdGluX2Nw dV9zdXBwb3J0cyAoInNzZTMiKSkKKyAgICBhc3NlcnQgKHZhbCA9PSA3KTsK KyAgZWxzZSBpZiAoX19idWlsdGluX2NwdV9zdXBwb3J0cyAoInNzZTIiKSkK KyAgICBhc3NlcnQgKHZhbCA9PSA4KTsKKyAgZWxzZSBpZiAoX19idWlsdGlu X2NwdV9zdXBwb3J0cyAoInNzZSIpKQorICAgIGFzc2VydCAodmFsID09IDkp OworICBlbHNlIGlmIChfX2J1aWx0aW5fY3B1X3N1cHBvcnRzICgibW14Iikp CisgICAgYXNzZXJ0ICh2YWwgPT0gMTApOworICBlbHNlCisgICAgYXNzZXJ0 ICh2YWwgPT0gMCk7CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorZm9vICgp Cit7CisgIHJldHVybiAwOworfQorCitpbnQgX19hdHRyaWJ1dGVfXyAoKHRh cmdldCgibW14IikpKQorZm9vICgpCit7CisgIHJldHVybiAxMDsKK30KKwor aW50IF9fYXR0cmlidXRlX18gKCh0YXJnZXQoInNzZSIpKSkKK2ZvbyAoKQor eworICByZXR1cm4gOTsKK30KKworaW50IF9fYXR0cmlidXRlX18gKCh0YXJn ZXQoInNzZTIiKSkpCitmb28gKCkKK3sKKyAgcmV0dXJuIDg7Cit9CisKK2lu dCBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJzc2UzIikpKQorZm9vICgpCit7 CisgIHJldHVybiA3OworfQorCitpbnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdl dCgic3NzZTMiKSkpCitmb28gKCkKK3sKKyAgcmV0dXJuIDY7Cit9CisKK2lu dCBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJzc2U0LjEiKSkpCitmb28gKCkK K3sKKyAgcmV0dXJuIDU7Cit9CisKK2ludCBfX2F0dHJpYnV0ZV9fICgodGFy Z2V0KCJzc2U0LjIiKSkpCitmb28gKCkKK3sKKyAgcmV0dXJuIDQ7Cit9CisK K2ludCBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJwb3BjbnQiKSkpCitmb28g KCkKK3sKKyAgcmV0dXJuIDM7Cit9CisKK2ludCBfX2F0dHJpYnV0ZV9fICgo dGFyZ2V0KCJhdngiKSkpCitmb28gKCkKK3sKKyAgcmV0dXJuIDI7Cit9CisK K2ludCBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJhdngyIikpKQorZm9vICgp Cit7CisgIHJldHVybiAxOworfQpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nKysu ZGcvbXYzLkMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL3Rlc3Rz dWl0ZS9nKysuZGcvbXYzLkMJKHJldmlzaW9uIDApCisrKyBnY2MvdGVzdHN1 aXRlL2crKy5kZy9tdjMuQwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNyBA QAorLyogVGVzdCBjYXNlIHRvIGNoZWNrIGlmIGEgY2FsbCB0byBhIG11bHRp dmVyc2lvbmVkIGZ1bmN0aW9uCisgICBpcyByZXBsYWNlZCB3aXRoIGEgZGly ZWN0IGNhbGwgdG8gdGhlIHBhcnRpY3VsYXIgdmVyc2lvbiB3aGVuCisgICB0 aGUgbW9zdCBzcGVjaWFsaXplZCB2ZXJzaW9uJ3MgdGFyZ2V0IGF0dHJpYnV0 ZXMgbWF0Y2ggdGhlCisgICBjYWxsZXIuICAKKyAgCisgICBJbiB0aGlzIHBy b2dyYW0sIGZvbyBpcyBtdWx0aXZlcnNpb25lZCBidXQgdGhlcmUgaXMgbm8g ZGVmYXVsdAorICAgZnVuY3Rpb24uICBUaGlzIGlzIGFuIGVycm9yIGlmIHRo ZSBjYWxsIGhhcyB0byBnbyB0aHJvdWdoIGEKKyAgIGRpc3BhdGNoZXIuICBI b3dldmVyLCB0aGUgY2FsbCB0byBmb28gaW4gYmFyIGNhbiBiZSByZXBsYWNl ZAorICAgd2l0aCBhIGRpcmVjdCBjYWxsIHRvIHRoZSBwb3BjbnQgdmVyc2lv biBvZiBmb28uICBIZW5jZSwgdGhpcworICAgdGVzdCBzaG91bGQgcGFzcy4g ICovCisKKy8qIHsgZGctZG8gcnVuIHsgdGFyZ2V0IGk/ODYtKi0qIHg4Nl82 NC0qLSogfSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtbW5vLXNzZSAt bW5vLXBvcGNudCIgfSAqLworCisKKy8qIERlZmF1bHQgdmVyc2lvbi4gICov CitpbnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCAoInNzZSIpKSkKK2ZvbyAo KQoreworICByZXR1cm4gMTsKK30KK2ludCBfX2F0dHJpYnV0ZV9fICgodGFy Z2V0ICgicG9wY250IikpKQorZm9vICgpCit7CisgIHJldHVybiAwOworfQor CitpbnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCAoInBvcGNudCIpKSkKK2Jh ciAoKQoreworICByZXR1cm4gZm9vICgpOworfQorCitpbnQgbWFpbiAoKQor eworICByZXR1cm4gYmFyICgpOworfQpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9n KysuZGcvbXY0LkMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL3Rl c3RzdWl0ZS9nKysuZGcvbXY0LkMJKHJldmlzaW9uIDApCisrKyBnY2MvdGVz dHN1aXRlL2crKy5kZy9tdjQuQwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwy MyBAQAorLyogVGVzdCBjYXNlIHRvIGNoZWNrIGlmIHRoZSBjb21waWxlciBn ZW5lcmF0ZXMgYW4gZXJyb3IgbWVzc2FnZQorICAgd2hlbiB0aGUgZGVmYXVs dCB2ZXJzaW9uIG9mIGEgbXVsdGl2ZXJzaW9uZWQgZnVuY3Rpb24gaXMgYWJz ZW50CisgICBhbmQgaXRzIHBvaW50ZXIgaXMgdGFrZW4uICAqLworCisvKiB7 IGRnLWRvIGNvbXBpbGUgeyB0YXJnZXQgaT84Ni0qLSogeDg2XzY0LSotKiB9 IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1tbm8tc3NlIC1tbm8tcG9w Y250IiB9ICovCisKK2ludCBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0ICgic3Nl IikpKQorZm9vICgpCit7CisgIHJldHVybiAxOworfQoraW50IF9fYXR0cmli dXRlX18gKCh0YXJnZXQgKCJwb3BjbnQiKSkpCitmb28gKCkKK3sKKyAgcmV0 dXJuIDA7Cit9CisKK2ludCBtYWluICgpCit7CisgIGludCAoKnApKCkgPSAm Zm9vOyAvKiB7IGRnLWVycm9yICJQb2ludGVyIHRvIGEgbXVsdGl2ZXJzaW9u ZWQgZnVuY3Rpb24gd2l0aG91dCBhIGRlZmF1bHQgaXMgbm90IGFsbG93ZWQi IHt9IH0gKi8KKyAgcmV0dXJuICgqcCkoKTsKK30K --bcaec51b1b97f6ebd904cd144b41--