From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25577 invoked by alias); 27 Jul 2009 20:40:42 -0000 Received: (qmail 25561 invoked by uid 22791); 27 Jul 2009 20:40:36 -0000 X-SWARE-Spam-Status: No, hits=1.8 required=5.0 tests=AWL,BAYES_00,HK_OBFDOM,J_CHICKENPOX_13,J_CHICKENPOX_37,KAM_STOCKGEN,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from fg-out-1718.google.com (HELO fg-out-1718.google.com) (72.14.220.153) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 27 Jul 2009 20:40:25 +0000 Received: by fg-out-1718.google.com with SMTP id e12so916526fga.0 for ; Mon, 27 Jul 2009 13:40:22 -0700 (PDT) MIME-Version: 1.0 Received: by 10.239.133.69 with SMTP id 5mr704889hbu.4.1248727222097; Mon, 27 Jul 2009 13:40:22 -0700 (PDT) In-Reply-To: <83eis5440j.fsf@gnu.org> References: <9a9942200907221615o570e749fh5cb186c1600f159c@mail.gmail.com> <9a9942200907240946q1546646ft6e9112f263bcefdf@mail.gmail.com> <83iqhh52un.fsf@gnu.org> <83eis5440j.fsf@gnu.org> From: Reid Kleckner Date: Mon, 27 Jul 2009 23:20:00 -0000 Message-ID: <9a9942200907271340g32c07b4dw1fc76e5f79068ac8@mail.gmail.com> Subject: Re: [RFA] Add interface for registering JITed code To: Eli Zaretskii Cc: Tom Tromey , gdb-patches@sourceware.org, unladen-swallow@googlegroups.com Content-Type: multipart/mixed; boundary=001485f7cb347e9887046fb5f6dc Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-07/txt/msg00664.txt.bz2 --001485f7cb347e9887046fb5f6dc Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 1634 On Sat, Jul 25, 2009 at 12:26 AM, Eli Zaretskii wrote: >> >>>>> "Eli" =3D=3D Eli Zaretskii writes: >> >> Eli> Unfortunately, the NEWS entry is not instrumental enough. =A0It doe= sn't >> Eli> tell the user how to use the feature. =A0Is it possible to come up = with >> Eli> a more useful entry? >> >> I think the NEWS entry is fine. =A0The feature works automatically. =A0U= sers >> need do nothing. > > Maybe that is true, but the text as written left me wondering whether > I do need to do something to get that working. > > =A0 =A0+* GDB now has an interface for JIT compilation. =A0Applications t= hat > =A0 =A0+dynamically generate code can create object files with debug info= in > =A0 =A0+memory and register them with GDB. =A0The interface also supports > =A0 =A0+attaching to a running process. > > The second sentence begs 2 questions: (1) how does one write or > compile or otherwise get hold of such applications, and (2) how does > one register object files with GDB. > > Granted, a NEWS entry is not a place for long explanations (if they > are long), but without any pointers to the manual or at least some Web > site, I couldn't figure out how to go about adding this feature to my > workflow. Here is an updated patch with a new manual chapter. It has the necessary struct definitions that the client should include, and step by step instructions for what to do. I'd appreciate if someone could review the writing and my texinfo, though. I mentioned the manual chapter in the NEWS entry, since the explanation of how it works is long. What else needs to be addressed? Thanks, Reid --001485f7cb347e9887046fb5f6dc Content-Type: text/plain; charset=US-ASCII; name="jit-patch.txt" Content-Disposition: attachment; filename="jit-patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fxnnw4yq0 Content-length: 46145 MjAwOS0wNy0yNCAgUmVpZCBLbGVja25lciAgPHJlaWRAa2xlY2tuZXIubmV0 PgoKCUFkZCBpbnRlcmZhY2UgZm9yIEpJVCBjb2RlIGdlbmVyYXRpb24uCgkq IE5FV1M6IEFubm91bmNlIEpJVCBpbnRlcmZhY2UuCgkqIGRvYy9nZGIudGV4 aW5mbzogQWRkIGNoYXB0ZXIgb24gSklUIGludGVyZmFjZS4KCSogTWFrZWZp bGUuaW4gKFNGSUxFUyk6IEFkZCBqaXQuYy4KCShIRklMRVNfTk9fU1JDRElS KTogQWRkIGppdC5oLgoJKENPTU1PTl9PQlMpOiBBZGQgaml0Lm8uCgkqIGpp dC5jOiBOZXcgZmlsZS4KCSogaml0Lmg6IE5ldyBmaWxlLgoJKiBicmVha3Bv aW50Lmg6CgkoZW51bSBicHR5cGUpOiBBZGQgYnBfaml0X2V2ZW50IHRvIGVu dW0uCgkqIGJyZWFrcG9pbnQuYzoKCSh1cGRhdGVfYnJlYWtwb2ludHNfYWZ0 ZXJfZXhlYyk6IERlbGV0ZSBqaXQgYnJlYWtwb2ludHMgYWZ0ZXIgZXhlYy4K CShicHN0YXRfd2hhdCk6IFVwZGF0ZSBldmVudCB0YWJsZSBmb3IgYnBfaml0 X2V2ZW50LgoJKHByaW50X2l0X3R5cGljYWwpOiBBZGRlZCBjYXNlIGZvciBi cF9qaXRfZXZlbnQuCgkocHJpbnRfb25lX2JyZWFrcG9pbnRfbG9jYXRpb24p OiBBZGRlZCBjYXNlIGZvciBicF9qaXRfZXZlbnQuCgkoYWxsb2NhdGVfYnBf bG9jYXRpb24pOiBBZGRlZCBjYXNlIGZvciBicF9qaXRfZXZlbnQuCgkobWVu dGlvbik6IEFkZGVkIGNhc2UgZm9yIGJwX2ppdF9ldmVudC4KCShkZWxldGVf Y29tbWFuZCk6IEFkZGVkIGNhc2UgZm9yIGJwX2ppdF9ldmVudC4KCShicmVh a3BvaW50X3JlX3NldF9vbmUpOiBBZGRlZCBjYXNlIGZvciBicF9qaXRfZXZl bnQuCgkoYnJlYWtwb2ludF9yZV9zZXQpOiBBZGRlZCBjYWxsIHRvIGppdF9p bmZlcmlvcl9jcmVhdGVkX2hvb2suCgkoY3JlYXRlX2ppdF9ldmVudF9icmVh a3BvaW50KTogTmV3LgoJKiBpbmZydW4uYyAoaGFuZGxlX2luZmVyaW9yX2V2 ZW50KTogQWRkIGhhbmRsZXIgZm9yIGppdCBldmVudC4KCShmb2xsb3dfZXhl Yyk6IEFkZCBjYWxsIHRvIGppdF9pbmZlcmlvcl9jcmVhdGVkX2hvb2suCgkq IG9iamZpbGVzLmMgKGZyZWVfb2JqZmlsZSk6IEZpeGVkIGEgbWVtb3J5IGxl YWsuCgpJbmRleDogZ2RiL01ha2VmaWxlLmluCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvTWFrZWZpbGUuaW4s dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTA5MQpkaWZmIC11IC1wIC11IC1y MS4xMDkxIE1ha2VmaWxlLmluCi0tLSBnZGIvTWFrZWZpbGUuaW4JMyBKdWwg MjAwOSAxMjowNjozNSAtMDAwMAkxLjEwOTEKKysrIGdkYi9NYWtlZmlsZS5p bgkyNyBKdWwgMjAwOSAyMDozNDowNiAtMDAwMApAQCAtNjc3LDcgKzY3Nyw4 IEBAIFNGSUxFUyA9IGFkYS1leHAueSBhZGEtbGFuZy5jIGFkYS10eXBlcHIK IAl3cmFwcGVyLmMgXAogCXhtbC10ZGVzYy5jIHhtbC1zdXBwb3J0LmMgXAog CWluZmVyaW9yLmMgZ2RiX3VzbGVlcC5jIFwKLQlyZWNvcmQuYworCXJlY29y ZC5jIFwKKwlqaXQuYwogCiBMSU5URklMRVMgPSAkKFNGSUxFUykgJChZWUZJ TEVTKSAkKENPTkZJR19TUkNTKSBpbml0LmMKIApAQCAtNzQ2LDcgKzc0Nyw3 IEBAIGNvbmZpZy9yczYwMDAvbm0tcnM2MDAwLmggdG9wLmggYnNkLWt2bS4K IGFubm90YXRlLmggc2ltLXJlZ25vLmggZGljdGlvbmFyeS5oIGRmcC5oIG1h aW4uaCBmcmFtZS11bndpbmQuaAlcCiByZW1vdGUtZmlsZWlvLmggaTM4Ni1s aW51eC10ZGVwLmggdmF4LXRkZXAuaCBvYmpjLWxhbmcuaCBcCiBzZW50aW5l bC1mcmFtZS5oIGJjYWNoZS5oIHN5bWZpbGUuaCB3aW5kb3dzLXRkZXAuaCBs aW51eC10ZGVwLmggXAotZ2RiX3VzbGVlcC5oCitnZGJfdXNsZWVwLmggaml0 LmgKIAogIyBIZWFkZXIgZmlsZXMgdGhhdCBhbHJlYWR5IGhhdmUgc3JjZGly IGluIHRoZW0sIG9yIHdoaWNoIGFyZSBpbiBvYmpkaXIuCiAKQEAgLTgyOCw3 ICs4MjksOCBAQCBDT01NT05fT0JTID0gJChERVBGSUxFUykgJChDT05GSUdf T0JTKSAkCiAJc29saWIubyBzb2xpYi1udWxsLm8gXAogCXByb2xvZ3VlLXZh bHVlLm8gbWVtb3J5LW1hcC5vIHhtbC1zdXBwb3J0Lm8gXAogCXRhcmdldC1k ZXNjcmlwdGlvbnMubyB0YXJnZXQtbWVtb3J5Lm8geG1sLXRkZXNjLm8geG1s LWJ1aWx0aW4ubyBcCi0JaW5mZXJpb3IubyBvc2RhdGEubyBnZGJfdXNsZWVw Lm8gcmVjb3JkLm8KKwlpbmZlcmlvci5vIG9zZGF0YS5vIGdkYl91c2xlZXAu byByZWNvcmQubyBcCisJaml0Lm8KIAogVFNPQlMgPSBpbmZsb3cubwogCklu ZGV4OiBnZGIvTkVXUwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl OiAvY3ZzL3NyYy9zcmMvZ2RiL05FV1MsdgpyZXRyaWV2aW5nIHJldmlzaW9u IDEuMzE5CmRpZmYgLXUgLXAgLXUgLXIxLjMxOSBORVdTCi0tLSBnZGIvTkVX UwkyMCBKdWwgMjAwOSAxODo1MTo0MSAtMDAwMAkxLjMxOQorKysgZ2RiL05F V1MJMjcgSnVsIDIwMDkgMjA6MzQ6MDYgLTAwMDAKQEAgLTMsNiArMywxMSBA QAogCiAqKiogQ2hhbmdlcyBzaW5jZSBHREIgNi44CiAKKyogR0RCIG5vdyBo YXMgYW4gaW50ZXJmYWNlIGZvciBKSVQgY29tcGlsYXRpb24uICBBcHBsaWNh dGlvbnMgdGhhdAorZHluYW1pY2FsbHkgZ2VuZXJhdGUgY29kZSBjYW4gY3Jl YXRlIHN5bWJvbCBmaWxlcyBpbiBtZW1vcnkgYW5kIHJlZ2lzdGVyCit0aGVt IHdpdGggR0RCLiAgRm9yIHVzZXJzLCB0aGUgZmVhdHVyZSBzaG91bGQgd29y ayB0cmFuc3BhcmVudGx5LCBhbmQKK2ZvciBKSVQgZGV2ZWxvcGVycywgdGhl IGludGVyZmFjZSBpcyBkb2N1bWVudGVkIGluIHRoZSBHREIgbWFudWFsLgor CiAqIFRyYWNlcG9pbnRzIG1heSBub3cgYmUgY29uZGl0aW9uYWwuICBUaGUg c3ludGF4IGlzIGFzIGZvcgogYnJlYWtwb2ludHM7IGVpdGhlciBhbiAiaWYi IGNsYXVzZSBhcHBlbmRlZCB0byB0aGUgInRyYWNlIiBjb21tYW5kLAogb3Ig dGhlICJjb25kaXRpb24iIGNvbW1hbmQgaXMgYXZhaWxhYmxlLiAgR0RCIHNl bmRzIHRoZSBjb25kaXRpb24gdG8KSW5kZXg6IGdkYi9icmVha3BvaW50LmMK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3Jj L2dkYi9icmVha3BvaW50LmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDEz CmRpZmYgLXUgLXAgLXUgLXIxLjQxMyBicmVha3BvaW50LmMKLS0tIGdkYi9i cmVha3BvaW50LmMJNyBKdWwgMjAwOSAyMjoyMTowOSAtMDAwMAkxLjQxMwor KysgZ2RiL2JyZWFrcG9pbnQuYwkyNyBKdWwgMjAwOSAyMDozNDowNiAtMDAw MApAQCAtNTksNiArNTksNyBAQAogI2luY2x1ZGUgInRvcC5oIgogI2luY2x1 ZGUgIndyYXBwZXIuaCIKICNpbmNsdWRlICJ2YWxwcmludC5oIgorI2luY2x1 ZGUgImppdC5oIgogCiAvKiByZWFkbGluZSBpbmNsdWRlIGZpbGVzICovCiAj aW5jbHVkZSAicmVhZGxpbmUvcmVhZGxpbmUuaCIKQEAgLTE1NzUsNiArMTU3 NiwxMyBAQCB1cGRhdGVfYnJlYWtwb2ludHNfYWZ0ZXJfZXhlYyAodm9pZCkK IAljb250aW51ZTsKICAgICAgIH0KIAorICAgIC8qIEpJVCBicmVha3BvaW50 cyBtdXN0IGJlIGV4cGxpY2l0bHkgcmVzZXQgYWZ0ZXIgYW4gZXhlYygpLiAq LworICAgIGlmIChiLT50eXBlID09IGJwX2ppdF9ldmVudCkKKyAgICAgIHsK KwlkZWxldGVfYnJlYWtwb2ludCAoYik7CisJY29udGludWU7CisgICAgICB9 CisKICAgICAvKiBUaHJlYWQgZXZlbnQgYnJlYWtwb2ludHMgbXVzdCBiZSBz ZXQgYW5ldyBhZnRlciBhbiBleGVjKCksCiAgICAgICAgYXMgbXVzdCBvdmVy bGF5IGV2ZW50IGFuZCBsb25nam1wIG1hc3RlciBicmVha3BvaW50cy4gICov CiAgICAgaWYgKGItPnR5cGUgPT0gYnBfdGhyZWFkX2V2ZW50IHx8IGItPnR5 cGUgPT0gYnBfb3ZlcmxheV9ldmVudApAQCAtMjU3Myw2ICsyNTgxLDcgQEAg cHJpbnRfaXRfdHlwaWNhbCAoYnBzdGF0IGJzKQogICAgIGNhc2UgYnBfd2F0 Y2hwb2ludF9zY29wZToKICAgICBjYXNlIGJwX2NhbGxfZHVtbXk6CiAgICAg Y2FzZSBicF90cmFjZXBvaW50OgorICAgIGNhc2UgYnBfaml0X2V2ZW50Ogog ICAgIGRlZmF1bHQ6CiAgICAgICByZXN1bHQgPSBQUklOVF9VTktOT1dOOwog ICAgICAgYnJlYWs7CkBAIC0zMjk4LDYgKzMzMDcsOSBAQCBicHN0YXRfd2hh dCAoYnBzdGF0IGJzKQogICAgICAgLyogV2UgaGl0IHRoZSBzaGFyZWQgbGli cmFyeSBldmVudCBicmVha3BvaW50LiAgKi8KICAgICAgIHNobGliX2V2ZW50 LAogCisgICAgICAvKiBXZSBoaXQgdGhlIGppdCBldmVudCBicmVha3BvaW50 LiAgKi8KKyAgICAgIGppdF9ldmVudCwKKwogICAgICAgLyogVGhpcyBpcyBq dXN0IHVzZWQgdG8gY291bnQgaG93IG1hbnkgZW51bXMgdGhlcmUgYXJlLiAg Ki8KICAgICAgIGNsYXNzX2xhc3QKICAgICB9OwpAQCAtMzMxMyw2ICszMzI1 LDcgQEAgYnBzdGF0X3doYXQgKGJwc3RhdCBicykKICNkZWZpbmUgY2xyIEJQ U1RBVF9XSEFUX0NMRUFSX0xPTkdKTVBfUkVTVU1FCiAjZGVmaW5lIHNyIEJQ U1RBVF9XSEFUX1NURVBfUkVTVU1FCiAjZGVmaW5lIHNobCBCUFNUQVRfV0hB VF9DSEVDS19TSExJQlMKKyNkZWZpbmUgaml0IEJQU1RBVF9XSEFUX0NIRUNL X0pJVAogCiAvKiAiQ2FuJ3QgaGFwcGVuLiIgIE1pZ2h0IHdhbnQgdG8gcHJp bnQgYW4gZXJyb3IgbWVzc2FnZS4KICAgIGFib3J0KCkgaXMgbm90IG91dCBv ZiB0aGUgcXVlc3Rpb24sIGJ1dCBjaGFuY2VzIGFyZSBHREIgaXMganVzdApA QCAtMzMzMywxMiArMzM0NiwxMyBAQCBicHN0YXRfd2hhdCAoYnBzdGF0IGJz KQogICAgICBiYWNrIGFuZCBkZWNpZGUgc29tZXRoaW5nIG9mIGEgbG93ZXIg cHJpb3JpdHkgaXMgYmV0dGVyLiAgVGhlCiAgICAgIG9yZGVyaW5nIGlzOgog Ci0gICAgIGtjICAgPCBjbHIgc2dsIHNobCBzbHIgc24gc3Igc3MKLSAgICAg c2dsICA8IHNobCBzbHIgc24gc3Igc3MKLSAgICAgc2xyICA8IGVyciBzaGwg c24gc3Igc3MKLSAgICAgY2xyICA8IGVyciBzaGwgc24gc3Igc3MKLSAgICAg c3MgICA8IHNobCBzbiBzcgotICAgICBzbiAgIDwgc2hsIHNyCisgICAgIGtj ICAgPCBqaXQgY2xyIHNnbCBzaGwgc2xyIHNuIHNyIHNzCisgICAgIHNnbCAg PCBqaXQgc2hsIHNsciBzbiBzciBzcworICAgICBzbHIgIDwgaml0IGVyciBz aGwgc24gc3Igc3MKKyAgICAgY2xyICA8IGppdCBlcnIgc2hsIHNuIHNyIHNz CisgICAgIHNzICAgPCBqaXQgc2hsIHNuIHNyCisgICAgIHNuICAgPCBqaXQg c2hsIHNyCisgICAgIGppdCAgPCBzaGwgc3IKICAgICAgc2hsICA8IHNyCiAg ICAgIHNyICAgPAogCkBAIC0zMzU2LDI4ICszMzcwLDE4IEBAIGJwc3RhdF93 aGF0IChicHN0YXQgYnMpCiAgICAgdGFibGVbKGludCkgY2xhc3NfbGFzdF1b KGludCkgQlBTVEFUX1dIQVRfTEFTVF0gPQogICB7CiAgIC8qICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgb2xkIGFjdGlvbiAqLwotICAvKiAgICAg ICBrYyAgICBzcyAgICBzbiAgICBzZ2wgICAgc2xyICAgY2xyICAgc3IgICBz aGwKLSAgICovCi0vKm5vX2VmZmVjdCAqLwotICAgIHtrYywgc3MsIHNuLCBz Z2wsIHNsciwgY2xyLCBzciwgc2hsfSwKLS8qd3Bfc2lsZW50ICovCi0gICAg e3NzLCBzcywgc24sIHNzLCBzcywgc3MsIHNyLCBzaGx9LAotLyp3cF9ub2lz eSAqLwotICAgIHtzbiwgc24sIHNuLCBzbiwgc24sIHNuLCBzciwgc2hsfSwK LS8qYnBfbm9zdG9wICovCi0gICAge3NnbCwgc3MsIHNuLCBzZ2wsIHNsciwg c2xyLCBzciwgc2hsfSwKLS8qYnBfc2lsZW50ICovCi0gICAge3NzLCBzcywg c24sIHNzLCBzcywgc3MsIHNyLCBzaGx9LAotLypicF9ub2lzeSAqLwotICAg IHtzbiwgc24sIHNuLCBzbiwgc24sIHNuLCBzciwgc2hsfSwKLS8qbG9uZ19q dW1wICovCi0gICAge3Nsciwgc3MsIHNuLCBzbHIsIHNsciwgZXJyLCBzciwg c2hsfSwKLS8qbG9uZ19yZXN1bWUgKi8KLSAgICB7Y2xyLCBzcywgc24sIGVy ciwgZXJyLCBlcnIsIHNyLCBzaGx9LAotLypzdGVwX3Jlc3VtZSAqLwotICAg IHtzciwgc3IsIHNyLCBzciwgc3IsIHNyLCBzciwgc3J9LAotLypzaGxpYiAq LwotICAgIHtzaGwsIHNobCwgc2hsLCBzaGwsIHNobCwgc2hsLCBzciwgc2hs fQorICAvKiAgICAgICAgICAgICAgIGtjICAgc3MgICBzbiAgIHNnbCAgc2xy ICBjbHIgIHNyICBzaGwgIGppdCAqLworLyogbm9fZWZmZWN0ICovICAge2tj LCAgc3MsICBzbiwgIHNnbCwgc2xyLCBjbHIsIHNyLCBzaGwsIGppdH0sCisv KiB3cF9zaWxlbnQgKi8gICB7c3MsICBzcywgIHNuLCAgc3MsICBzcywgIHNz LCAgc3IsIHNobCwgaml0fSwKKy8qIHdwX25vaXN5ICovICAgIHtzbiwgIHNu LCAgc24sICBzbiwgIHNuLCAgc24sICBzciwgc2hsLCBqaXR9LAorLyogYnBf bm9zdG9wICovICAge3NnbCwgc3MsICBzbiwgIHNnbCwgc2xyLCBzbHIsIHNy LCBzaGwsIGppdH0sCisvKiBicF9zaWxlbnQgKi8gICB7c3MsICBzcywgIHNu LCAgc3MsICBzcywgIHNzLCAgc3IsIHNobCwgaml0fSwKKy8qIGJwX25vaXN5 ICovICAgIHtzbiwgIHNuLCAgc24sICBzbiwgIHNuLCAgc24sICBzciwgc2hs LCBqaXR9LAorLyogbG9uZ19qdW1wICovICAge3Nsciwgc3MsICBzbiwgIHNs ciwgc2xyLCBlcnIsIHNyLCBzaGwsIGppdH0sCisvKiBsb25nX3Jlc3VtZSAq LyB7Y2xyLCBzcywgIHNuLCAgZXJyLCBlcnIsIGVyciwgc3IsIHNobCwgaml0 fSwKKy8qIHN0ZXBfcmVzdW1lICovIHtzciwgIHNyLCAgc3IsICBzciwgIHNy LCAgc3IsICBzciwgc3IsICBzciB9LAorLyogc2hsaWIgKi8gICAgICAge3No bCwgc2hsLCBzaGwsIHNobCwgc2hsLCBzaGwsIHNyLCBzaGwsIHNobH0sCisv KiBqaXRfZXZlbnQgKi8gICB7aml0LCBqaXQsIGppdCwgaml0LCBqaXQsIGpp dCwgc3IsIGppdCwgaml0fQogICB9OwogCiAjdW5kZWYga2MKQEAgLTMzOTAs NiArMzM5NCw3IEBAIGJwc3RhdF93aGF0IChicHN0YXQgYnMpCiAjdW5kZWYg c3IKICN1bmRlZiB0cwogI3VuZGVmIHNobAorI3VuZGVmIGppdAogICBlbnVt IGJwc3RhdF93aGF0X21haW5fYWN0aW9uIGN1cnJlbnRfYWN0aW9uID0gQlBT VEFUX1dIQVRfS0VFUF9DSEVDS0lORzsKICAgc3RydWN0IGJwc3RhdF93aGF0 IHJldHZhbDsKIApAQCAtMzQ2MCw2ICszNDY1LDkgQEAgYnBzdGF0X3doYXQg KGJwc3RhdCBicykKIAljYXNlIGJwX3NobGliX2V2ZW50OgogCSAgYnNfY2xh c3MgPSBzaGxpYl9ldmVudDsKIAkgIGJyZWFrOworCWNhc2UgYnBfaml0X2V2 ZW50OgorCSAgYnNfY2xhc3MgPSBqaXRfZXZlbnQ7CisJICBicmVhazsKIAlj YXNlIGJwX3RocmVhZF9ldmVudDoKIAljYXNlIGJwX292ZXJsYXlfZXZlbnQ6 CiAJY2FzZSBicF9sb25nam1wX21hc3RlcjoKQEAgLTM1OTMsNiArMzYwMSw3 IEBAIHByaW50X29uZV9icmVha3BvaW50X2xvY2F0aW9uIChzdHJ1Y3QgYnIK ICAgICB7YnBfbG9uZ2ptcF9tYXN0ZXIsICJsb25nam1wIG1hc3RlciJ9LAog ICAgIHticF9jYXRjaHBvaW50LCAiY2F0Y2hwb2ludCJ9LAogICAgIHticF90 cmFjZXBvaW50LCAidHJhY2Vwb2ludCJ9LAorICAgIHticF9qaXRfZXZlbnQs ICJqaXQgZXZlbnRzIn0sCiAgIH07CiAgIAogICBzdGF0aWMgY2hhciBicGVu YWJsZXNbXSA9ICJueW5ueSI7CkBAIC0zNzIxLDYgKzM3MzAsNyBAQCBwcmlu dF9vbmVfYnJlYWtwb2ludF9sb2NhdGlvbiAoc3RydWN0IGJyCiAgICAgICBj YXNlIGJwX292ZXJsYXlfZXZlbnQ6CiAgICAgICBjYXNlIGJwX2xvbmdqbXBf bWFzdGVyOgogICAgICAgY2FzZSBicF90cmFjZXBvaW50OgorICAgICAgY2Fz ZSBicF9qaXRfZXZlbnQ6CiAJaWYgKG9wdHMuYWRkcmVzc3ByaW50KQogCSAg ewogCSAgICBhbm5vdGF0ZV9maWVsZCAoNCk7CkBAIC00MzYyLDYgKzQzNzIs NyBAQCBhbGxvY2F0ZV9icF9sb2NhdGlvbiAoc3RydWN0IGJyZWFrcG9pbnQg CiAgICAgY2FzZSBicF9zaGxpYl9ldmVudDoKICAgICBjYXNlIGJwX3RocmVh ZF9ldmVudDoKICAgICBjYXNlIGJwX292ZXJsYXlfZXZlbnQ6CisgICAgY2Fz ZSBicF9qaXRfZXZlbnQ6CiAgICAgY2FzZSBicF9sb25nam1wX21hc3RlcjoK ICAgICAgIGxvYy0+bG9jX3R5cGUgPSBicF9sb2Nfc29mdHdhcmVfYnJlYWtw b2ludDsKICAgICAgIGJyZWFrOwpAQCAtNDY0NCw2ICs0NjU1LDE3IEBAIHN0 cnVjdCBsYW5nX2FuZF9yYWRpeAogICAgIGludCByYWRpeDsKICAgfTsKIAor LyogQ3JlYXRlIGEgYnJlYWtwb2ludCBmb3IgSklUIGNvZGUgcmVnaXN0cmF0 aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbi4gICovCisKK3N0cnVjdCBicmVha3Bv aW50ICoKK2NyZWF0ZV9qaXRfZXZlbnRfYnJlYWtwb2ludCAoc3RydWN0IGdk YmFyY2ggKmdkYmFyY2gsIENPUkVfQUREUiBhZGRyZXNzKQoreworICBzdHJ1 Y3QgYnJlYWtwb2ludCAqYjsKKworICBiID0gY3JlYXRlX2ludGVybmFsX2Jy ZWFrcG9pbnQgKGdkYmFyY2gsIGFkZHJlc3MsIGJwX2ppdF9ldmVudCk7Cisg IHVwZGF0ZV9nbG9iYWxfbG9jYXRpb25fbGlzdF9ub3Rocm93ICgxKTsKKyAg cmV0dXJuIGI7Cit9CiAKIHZvaWQKIHJlbW92ZV9zb2xpYl9ldmVudF9icmVh a3BvaW50cyAodm9pZCkKQEAgLTUyNzksNiArNTMwMSw3IEBAIG1lbnRpb24g KHN0cnVjdCBicmVha3BvaW50ICpiKQogICAgICAgY2FzZSBicF9zaGxpYl9l dmVudDoKICAgICAgIGNhc2UgYnBfdGhyZWFkX2V2ZW50OgogICAgICAgY2Fz ZSBicF9vdmVybGF5X2V2ZW50OgorICAgICAgY2FzZSBicF9qaXRfZXZlbnQ6 CiAgICAgICBjYXNlIGJwX2xvbmdqbXBfbWFzdGVyOgogCWJyZWFrOwogICAg ICAgfQpAQCAtNzU4NSw2ICs3NjA4LDcgQEAgZGVsZXRlX2NvbW1hbmQgKGNo YXIgKmFyZywgaW50IGZyb21fdHR5KQogICAgICAgewogCWlmIChiLT50eXBl ICE9IGJwX2NhbGxfZHVtbXkKIAkgICAgJiYgYi0+dHlwZSAhPSBicF9zaGxp Yl9ldmVudAorCSAgICAmJiBiLT50eXBlICE9IGJwX2ppdF9ldmVudAogCSAg ICAmJiBiLT50eXBlICE9IGJwX3RocmVhZF9ldmVudAogCSAgICAmJiBiLT50 eXBlICE9IGJwX292ZXJsYXlfZXZlbnQKIAkgICAgJiYgYi0+dHlwZSAhPSBi cF9sb25nam1wX21hc3RlcgpAQCAtNzYwNCw2ICs3NjI4LDcgQEAgZGVsZXRl X2NvbW1hbmQgKGNoYXIgKmFyZywgaW50IGZyb21fdHR5KQogCSAgICBpZiAo Yi0+dHlwZSAhPSBicF9jYWxsX2R1bW15CiAJCSYmIGItPnR5cGUgIT0gYnBf c2hsaWJfZXZlbnQKIAkJJiYgYi0+dHlwZSAhPSBicF90aHJlYWRfZXZlbnQK KwkJJiYgYi0+dHlwZSAhPSBicF9qaXRfZXZlbnQKIAkJJiYgYi0+dHlwZSAh PSBicF9vdmVybGF5X2V2ZW50CiAJCSYmIGItPnR5cGUgIT0gYnBfbG9uZ2pt cF9tYXN0ZXIKIAkJJiYgYi0+bnVtYmVyID49IDApCkBAIC03OTI2LDYgKzc5 NTEsNyBAQCBicmVha3BvaW50X3JlX3NldF9vbmUgKHZvaWQgKmJpbnQpCiAg ICAgY2FzZSBicF9zdGVwX3Jlc3VtZToKICAgICBjYXNlIGJwX2xvbmdqbXA6 CiAgICAgY2FzZSBicF9sb25nam1wX3Jlc3VtZToKKyAgICBjYXNlIGJwX2pp dF9ldmVudDoKICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtNzk1NCw2ICs3 OTgwLDggQEAgYnJlYWtwb2ludF9yZV9zZXQgKHZvaWQpCiAgIHNldF9sYW5n dWFnZSAoc2F2ZV9sYW5ndWFnZSk7CiAgIGlucHV0X3JhZGl4ID0gc2F2ZV9p bnB1dF9yYWRpeDsKIAorICBqaXRfaW5mZXJpb3JfY3JlYXRlZF9ob29rICgp OworCiAgIGNyZWF0ZV9vdmVybGF5X2V2ZW50X2JyZWFrcG9pbnQgKCJfb3Zs eV9kZWJ1Z19ldmVudCIpOwogICBjcmVhdGVfbG9uZ2ptcF9tYXN0ZXJfYnJl YWtwb2ludCAoImxvbmdqbXAiKTsKICAgY3JlYXRlX2xvbmdqbXBfbWFzdGVy X2JyZWFrcG9pbnQgKCJfbG9uZ2ptcCIpOwpJbmRleDogZ2RiL2JyZWFrcG9p bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Ny Yy9zcmMvZ2RiL2JyZWFrcG9pbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g MS45NQpkaWZmIC11IC1wIC11IC1yMS45NSBicmVha3BvaW50LmgKLS0tIGdk Yi9icmVha3BvaW50LmgJMiBKdWwgMjAwOSAxNzoxMjoyNCAtMDAwMAkxLjk1 CisrKyBnZGIvYnJlYWtwb2ludC5oCTI3IEp1bCAyMDA5IDIwOjM0OjA2IC0w MDAwCkBAIC0xMjAsNiArMTIwLDkgQEAgZW51bSBicHR5cGUKICAgICBicF9j YXRjaHBvaW50LAogCiAgICAgYnBfdHJhY2Vwb2ludCwKKworICAgIC8qIEV2 ZW50IGZvciBKSVQgY29tcGlsZWQgY29kZSBnZW5lcmF0aW9uIG9yIGRlbGV0 aW9uLiAgKi8KKyAgICBicF9qaXRfZXZlbnQsCiAgIH07CiAKIC8qIFN0YXRl cyBvZiBlbmFibGVtZW50IG9mIGJyZWFrcG9pbnQuICovCkBAIC01NDgsNiAr NTUxLDkgQEAgZW51bSBicHN0YXRfd2hhdF9tYWluX2FjdGlvbgogICAgICAg IGtlZXAgY2hlY2tpbmcuICAqLwogICAgIEJQU1RBVF9XSEFUX0NIRUNLX1NI TElCUywKIAorICAgIC8qIENoZWNrIGZvciBuZXcgSklUZWQgY29kZS4gICov CisgICAgQlBTVEFUX1dIQVRfQ0hFQ0tfSklULAorCiAgICAgLyogVGhpcyBp cyBqdXN0IHVzZWQgdG8ga2VlcCB0cmFjayBvZiBob3cgbWFueSBlbnVtcyB0 aGVyZSBhcmUuICAqLwogICAgIEJQU1RBVF9XSEFUX0xBU1QKICAgfTsKQEAg LTg0MSw2ICs4NDcsOSBAQCBleHRlcm4gdm9pZCBtYXJrX2JyZWFrcG9pbnRz X291dCAodm9pZCk7CiAKIGV4dGVybiB2b2lkIG1ha2VfYnJlYWtwb2ludF9w ZXJtYW5lbnQgKHN0cnVjdCBicmVha3BvaW50ICopOwogCitleHRlcm4gc3Ry dWN0IGJyZWFrcG9pbnQgKmNyZWF0ZV9qaXRfZXZlbnRfYnJlYWtwb2ludCAo c3RydWN0IGdkYmFyY2ggKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JFX0FERFIpOworCiBl eHRlcm4gc3RydWN0IGJyZWFrcG9pbnQgKmNyZWF0ZV9zb2xpYl9ldmVudF9i cmVha3BvaW50IChzdHJ1Y3QgZ2RiYXJjaCAqLAogCQkJCQkJCSBDT1JFX0FE RFIpOwogCkluZGV4OiBnZGIvaW5mcnVuLmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9pbmZydW4uYyx2CnJl dHJpZXZpbmcgcmV2aXNpb24gMS40MDIKZGlmZiAtdSAtcCAtdSAtcjEuNDAy IGluZnJ1bi5jCi0tLSBnZGIvaW5mcnVuLmMJMjAgSnVsIDIwMDkgMTU6MDU6 MTIgLTAwMDAJMS40MDIKKysrIGdkYi9pbmZydW4uYwkyNyBKdWwgMjAwOSAy MDozNDowNyAtMDAwMApAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgImV2 ZW50LXRvcC5oIgogI2luY2x1ZGUgInJlY29yZC5oIgogI2luY2x1ZGUgImlu bGluZS1mcmFtZS5oIgorI2luY2x1ZGUgImppdC5oIgogCiAvKiBQcm90b3R5 cGVzIGZvciBsb2NhbCBmdW5jdGlvbnMgKi8KIApAQCAtNTQ0LDYgKzU0NSw4 IEBAIGZvbGxvd19leGVjIChwdGlkX3QgcGlkLCBjaGFyICpleGVjZF9wYXQK ICAgc29saWJfY3JlYXRlX2luZmVyaW9yX2hvb2sgKCk7CiAjZW5kaWYKIAor ICBqaXRfaW5mZXJpb3JfY3JlYXRlZF9ob29rICgpOworCiAgIC8qIFJlaW5z ZXJ0IGFsbCBicmVha3BvaW50cy4gIChUaG9zZSB3aGljaCB3ZXJlIHN5bWJv bGljIGhhdmUKICAgICAgYmVlbiByZXNldCB0byB0aGUgcHJvcGVyIGFkZHJl c3MgaW4gdGhlIG5ldyBhLm91dCwgdGhhbmtzCiAgICAgIHRvIHN5bWJvbF9m aWxlX2NvbW1hbmQuLi4pICovCkBAIC0zNTI5LDYgKzM1MzIsMjIgQEAgaW5m cnVuOiBCUFNUQVRfV0hBVF9TRVRfTE9OR0pNUF9SRVNVTUUgKAogCX0KIAli cmVhazsKIAorICAgICAgY2FzZSBCUFNUQVRfV0hBVF9DSEVDS19KSVQ6Cisg ICAgICAgIGlmIChkZWJ1Z19pbmZydW4pCisgICAgICAgICAgZnByaW50Zl91 bmZpbHRlcmVkIChnZGJfc3RkbG9nLCAiaW5mcnVuOiBCUFNUQVRfV0hBVF9D SEVDS19KSVRcbiIpOworCisgICAgICAgIC8qIFN3aXRjaCB0ZXJtaW5hbCBm b3IgYW55IG1lc3NhZ2VzIHByb2R1Y2VkIGJ5IGJyZWFrcG9pbnRfcmVfc2V0 LiAgKi8KKyAgICAgICAgdGFyZ2V0X3Rlcm1pbmFsX291cnNfZm9yX291dHB1 dCAoKTsKKworICAgICAgICBqaXRfZXZlbnRfaGFuZGxlciAoKTsKKworICAg ICAgICB0YXJnZXRfdGVybWluYWxfaW5mZXJpb3IgKCk7CisKKyAgICAgICAg LyogV2Ugd2FudCB0byBzdGVwIG92ZXIgdGhpcyBicmVha3BvaW50LCB0aGVu IGtlZXAgZ29pbmcuICAqLworICAgICAgICBlY3MtPmV2ZW50X3RocmVhZC0+ c3RlcHBpbmdfb3Zlcl9icmVha3BvaW50ID0gMTsKKworICAgICAgICBicmVh azsKKwogICAgICAgY2FzZSBCUFNUQVRfV0hBVF9MQVNUOgogCS8qIE5vdCBh IHJlYWwgY29kZSwgYnV0IGxpc3RlZCBoZXJlIHRvIHNodXQgdXAgZ2NjIC1X YWxsLiAgKi8KIApJbmRleDogZ2RiL2ppdC5jCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KUkNTIGZpbGU6IGdkYi9qaXQuYwpkaWZmIC1OIGdkYi9qaXQuYwot LS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGdk Yi9qaXQuYwkyNyBKdWwgMjAwOSAyMDozNDowNyAtMDAwMApAQCAtMCwwICsx LDM5MyBAQAorLyogSGFuZGxlIEpJVCBjb2RlIGdlbmVyYXRpb24gaW4gdGhl IGluZmVyaW9yIGZvciBHREIsIHRoZSBHTlUgRGVidWdnZXIuCisKKyAgIENv cHlyaWdodCAoQykgMjAwOQorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKworICAg VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlz aGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25n IHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cu Z251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgImRlZnMuaCIK KworI2luY2x1ZGUgImppdC5oIgorI2luY2x1ZGUgImJyZWFrcG9pbnQuaCIK KyNpbmNsdWRlICJnZGJjb3JlLmgiCisjaW5jbHVkZSAib2JzZXJ2ZXIuaCIK KyNpbmNsdWRlICJvYmpmaWxlcy5oIgorI2luY2x1ZGUgInN5bWZpbGUuaCIK KyNpbmNsdWRlICJzeW10YWIuaCIKKyNpbmNsdWRlICJ0YXJnZXQuaCIKKyNp bmNsdWRlICJnZGJfc3RhdC5oIgorCisvLyNpbmNsdWRlICJhc3NlcnQuaCIK Ky8vI2luY2x1ZGUgInN0cmluZy5oIgorCitzdGF0aWMgY29uc3Qgc3RydWN0 IG9iamZpbGVfZGF0YSAqaml0X29iamZpbGVfZGF0YTsKKworc3RhdGljIGNv bnN0IGNoYXIgKmNvbnN0IGppdF9icmVha19uYW1lID0gIl9faml0X2RlYnVn X3JlZ2lzdGVyX2NvZGUiOworCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qg aml0X2Rlc2NyaXB0b3JfbmFtZSA9ICJfX2ppdF9kZWJ1Z19kZXNjcmlwdG9y IjsKKworLyogVGhpcyBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgSklUIGRlc2Ny aXB0b3IgaW4gdGhlIGluZmVyaW9yLiAgKi8KKworc3RhdGljIENPUkVfQURE UiBqaXRfZGVzY3JpcHRvcl9hZGRyID0gMDsKKworc3RydWN0IHRhcmdldF9i dWZmZXIKK3sKKyAgQ09SRV9BRERSIGJhc2U7CisgIHNpemVfdCBzaXplOwor fTsKKworLyogT3Blbm5pbmcgdGhlIGZpbGUgaXMgYSBuby1vcC4gICovCisK K3N0YXRpYyB2b2lkICoKK21lbV9iZmRfaW92ZWNfb3BlbiAoc3RydWN0IGJm ZCAqYWJmZCwgdm9pZCAqb3Blbl9jbG9zdXJlKQoreworICByZXR1cm4gb3Bl bl9jbG9zdXJlOworfQorCisvKiBDbG9zaW5nIHRoZSBmaWxlIGlzIGp1c3Qg ZnJlZWluZyB0aGUgYmFzZS9zaXplIHBhaXIgb24gb3VyIHNpZGUuICAqLwor CitzdGF0aWMgaW50CittZW1fYmZkX2lvdmVjX2Nsb3NlIChzdHJ1Y3QgYmZk ICphYmZkLCB2b2lkICpzdHJlYW0pCit7CisgIHhmcmVlIChzdHJlYW0pOwor ICByZXR1cm4gMTsKK30KKworLyogRm9yIHJlYWRpbmcgdGhlIGZpbGUsIHdl IGp1c3QgbmVlZCB0byBwYXNzIHRocm91Z2ggdG8gdGFyZ2V0X3JlYWRfbWVt b3J5IGFuZAorICAgZml4IHVwIHRoZSBhcmd1bWVudHMgYW5kIHJldHVybiB2 YWx1ZXMuICAqLworCitzdGF0aWMgZmlsZV9wdHIKK21lbV9iZmRfaW92ZWNf cHJlYWQgKHN0cnVjdCBiZmQgKmFiZmQsIHZvaWQgKnN0cmVhbSwgdm9pZCAq YnVmLAorICAgICAgICAgICAgICAgICAgICAgZmlsZV9wdHIgbmJ5dGVzLCBm aWxlX3B0ciBvZmZzZXQpCit7CisgIGludCBlcnI7CisgIHN0cnVjdCB0YXJn ZXRfYnVmZmVyICpidWZmZXIgPSAoc3RydWN0IHRhcmdldF9idWZmZXIgKikg c3RyZWFtOworCisgIC8qIElmIHRoaXMgcmVhZCB3aWxsIHJlYWQgYWxsIG9m IHRoZSBmaWxlLCBsaW1pdCBpdCB0byBqdXN0IHRoZSByZXN0LiAgKi8KKyAg aWYgKG9mZnNldCArIG5ieXRlcyA+IGJ1ZmZlci0+c2l6ZSkKKyAgICBuYnl0 ZXMgPSBidWZmZXItPnNpemUgLSBvZmZzZXQ7CisKKyAgLyogSWYgdGhlcmUg YXJlIG5vIG1vcmUgYnl0ZXMgbGVmdCwgd2UndmUgcmVhY2hlZCBFT0YuICAq LworICBpZiAobmJ5dGVzID09IDApCisgICAgcmV0dXJuIDA7CisKKyAgZXJy ID0gdGFyZ2V0X3JlYWRfbWVtb3J5IChidWZmZXItPmJhc2UgKyBvZmZzZXQs IChnZGJfYnl0ZSAqKSBidWYsIG5ieXRlcyk7CisgIGlmIChlcnIpCisgICAg cmV0dXJuIC0xOworCisgIHJldHVybiBuYnl0ZXM7Cit9CisKKy8qIEZvciBz dGF0dGluZyB0aGUgZmlsZSwgd2Ugb25seSBzdXBwb3J0IHRoZSBzdF9zaXpl IGF0dHJpYnV0ZS4gICovIAorCitzdGF0aWMgaW50CittZW1fYmZkX2lvdmVj X3N0YXQgKHN0cnVjdCBiZmQgKmFiZmQsIHZvaWQgKnN0cmVhbSwgc3RydWN0 IHN0YXQgKnNiKQoreworICBzdHJ1Y3QgdGFyZ2V0X2J1ZmZlciAqYnVmZmVy ID0gKHN0cnVjdCB0YXJnZXRfYnVmZmVyKikgc3RyZWFtOworCisgIHNiLT5z dF9zaXplID0gYnVmZmVyLT5zaXplOworICByZXR1cm4gMDsKK30KKworLyog T3BlbiBhIEJGRCBmcm9tIHRoZSB0YXJnZXQncyBtZW1vcnkuICAqLworCitz dGF0aWMgc3RydWN0IGJmZCAqCitiZmRfb3Blbl9mcm9tX3RhcmdldF9tZW1v cnkgKENPUkVfQUREUiBhZGRyLCBzaXplX3Qgc2l6ZSwgY2hhciAqdGFyZ2V0 KQoreworICBjb25zdCBjaGFyICpmaWxlbmFtZSA9IHhzdHJkdXAgKCI8aW4t bWVtb3J5PiIpOworICBzdHJ1Y3QgdGFyZ2V0X2J1ZmZlciAqYnVmZmVyID0g eG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgdGFyZ2V0X2J1ZmZlcikpOworCisg IGJ1ZmZlci0+YmFzZSA9IGFkZHI7CisgIGJ1ZmZlci0+c2l6ZSA9IHNpemU7 CisgIHJldHVybiBiZmRfb3BlbnJfaW92ZWMgKGZpbGVuYW1lLCB0YXJnZXQs CisJCQkgIG1lbV9iZmRfaW92ZWNfb3BlbiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgYnVmZmVyLAorCQkJICBtZW1fYmZkX2lvdmVjX3ByZWFkLAor CQkJICBtZW1fYmZkX2lvdmVjX2Nsb3NlLAorCQkJICBtZW1fYmZkX2lvdmVj X3N0YXQpOworfQorCisvKiBIZWxwZXIgZnVuY3Rpb24gZm9yIHJlYWRpbmcg dGhlIGdsb2JhbCBKSVQgZGVzY3JpcHRvciBmcm9tIHJlbW90ZSBtZW1vcnku ICAqLworCitzdGF0aWMgdm9pZAoraml0X3JlYWRfZGVzY3JpcHRvciAoc3Ry dWN0IGppdF9kZXNjcmlwdG9yICpkZXNjcmlwdG9yKQoreworICBpbnQgZXJy OworICBzdHJ1Y3QgdHlwZSAqcHRyX3R5cGU7CisgIGludCBwdHJfc2l6ZTsK KyAgaW50IGRlc2Nfc2l6ZTsKKyAgZ2RiX2J5dGUgKmRlc2NfYnVmOworICBl bnVtIGJmZF9lbmRpYW4gYnl0ZV9vcmRlciA9IGdkYmFyY2hfYnl0ZV9vcmRl ciAodGFyZ2V0X2dkYmFyY2gpOworCisgIC8qIEZpZ3VyZSBvdXQgaG93IGJp ZyB0aGUgZGVzY3JpcHRvciBpcyBvbiB0aGUgcmVtb3RlIGFuZCBob3cgdG8g cmVhZCBpdC4gICovCisgIHB0cl90eXBlID0gYnVpbHRpbl90eXBlICh0YXJn ZXRfZ2RiYXJjaCktPmJ1aWx0aW5fZGF0YV9wdHI7CisgIHB0cl9zaXplID0g VFlQRV9MRU5HVEggKHB0cl90eXBlKTsKKyAgZGVzY19zaXplID0gOCArIDIg KiBwdHJfc2l6ZTsgIC8qIFR3byAzMi1iaXQgaW50cyBhbmQgdHdvIHBvaW50 ZXJzLiAgKi8KKyAgZGVzY19idWYgPSBhbGxvY2EgKGRlc2Nfc2l6ZSk7CisK KyAgLyogUmVhZCB0aGUgZGVzY3JpcHRvci4gICovCisgIGVyciA9IHRhcmdl dF9yZWFkX21lbW9yeSAoaml0X2Rlc2NyaXB0b3JfYWRkciwgZGVzY19idWYs IGRlc2Nfc2l6ZSk7CisgIGlmIChlcnIpCisgICAgZXJyb3IgKF8oIlVuYWJs ZSB0byByZWFkIEpJVCBkZXNjcmlwdG9yIGZyb20gcmVtb3RlIG1lbW9yeSEi KSk7CisKKyAgLyogRml4IHRoZSBlbmRpYW5uZXNzIHRvIG1hdGNoIHRoZSBo b3N0LiAgKi8KKyAgZGVzY3JpcHRvci0+dmVyc2lvbiA9IGV4dHJhY3RfdW5z aWduZWRfaW50ZWdlciAoJmRlc2NfYnVmWzBdLCA0LCBieXRlX29yZGVyKTsK KyAgZGVzY3JpcHRvci0+YWN0aW9uX2ZsYWcgPQorICAgICAgZXh0cmFjdF91 bnNpZ25lZF9pbnRlZ2VyICgmZGVzY19idWZbNF0sIDQsIGJ5dGVfb3JkZXIp OworICBkZXNjcmlwdG9yLT5yZWxldmFudF9lbnRyeSA9IGV4dHJhY3RfdHlw ZWRfYWRkcmVzcyAoJmRlc2NfYnVmWzhdLCBwdHJfdHlwZSk7CisgIGRlc2Ny aXB0b3ItPmZpcnN0X2VudHJ5ID0KKyAgICAgIGV4dHJhY3RfdHlwZWRfYWRk cmVzcyAoJmRlc2NfYnVmWzggKyBwdHJfc2l6ZV0sIHB0cl90eXBlKTsKK30K KworLyogSGVscGVyIGZ1bmN0aW9uIGZvciByZWFkaW5nIGEgSklUZWQgY29k ZSBlbnRyeSBmcm9tIHJlbW90ZSBtZW1vcnkuICAqLworCitzdGF0aWMgdm9p ZAoraml0X3JlYWRfY29kZV9lbnRyeSAoQ09SRV9BRERSIGNvZGVfYWRkciwg c3RydWN0IGppdF9jb2RlX2VudHJ5ICpjb2RlX2VudHJ5KQoreworICBpbnQg ZXJyOworICBzdHJ1Y3QgdHlwZSAqcHRyX3R5cGU7CisgIGludCBwdHJfc2l6 ZTsKKyAgaW50IGVudHJ5X3NpemU7CisgIGdkYl9ieXRlICplbnRyeV9idWY7 CisgIGVudW0gYmZkX2VuZGlhbiBieXRlX29yZGVyID0gZ2RiYXJjaF9ieXRl X29yZGVyICh0YXJnZXRfZ2RiYXJjaCk7CisKKyAgLyogRmlndXJlIG91dCBo b3cgYmlnIHRoZSBlbnRyeSBpcyBvbiB0aGUgcmVtb3RlIGFuZCBob3cgdG8g cmVhZCBpdC4gICovCisgIHB0cl90eXBlID0gYnVpbHRpbl90eXBlICh0YXJn ZXRfZ2RiYXJjaCktPmJ1aWx0aW5fZGF0YV9wdHI7CisgIHB0cl9zaXplID0g VFlQRV9MRU5HVEggKHB0cl90eXBlKTsKKyAgZW50cnlfc2l6ZSA9IDMgKiBw dHJfc2l6ZSArIDg7ICAvKiBUaHJlZSBwb2ludGVycyBhbmQgb25lIDY0LWJp dCBpbnQuICAqLworICBlbnRyeV9idWYgPSBhbGxvY2EgKGVudHJ5X3NpemUp OworCisgIC8qIFJlYWQgdGhlIGVudHJ5LiAgKi8KKyAgZXJyID0gdGFyZ2V0 X3JlYWRfbWVtb3J5IChjb2RlX2FkZHIsIGVudHJ5X2J1ZiwgZW50cnlfc2l6 ZSk7CisgIGlmIChlcnIpCisgICAgZXJyb3IgKF8oIlVuYWJsZSB0byByZWFk IEpJVCBjb2RlIGVudHJ5IGZyb20gcmVtb3RlIG1lbW9yeSEiKSk7CisKKyAg LyogRml4IHRoZSBlbmRpYW5uZXNzIHRvIG1hdGNoIHRoZSBob3N0LiAgKi8K KyAgcHRyX3R5cGUgPSBidWlsdGluX3R5cGUgKHRhcmdldF9nZGJhcmNoKS0+ YnVpbHRpbl9kYXRhX3B0cjsKKyAgY29kZV9lbnRyeS0+bmV4dF9lbnRyeSA9 IGV4dHJhY3RfdHlwZWRfYWRkcmVzcyAoJmVudHJ5X2J1ZlswXSwgcHRyX3R5 cGUpOworICBjb2RlX2VudHJ5LT5wcmV2X2VudHJ5ID0KKyAgICAgIGV4dHJh Y3RfdHlwZWRfYWRkcmVzcyAoJmVudHJ5X2J1ZltwdHJfc2l6ZV0sIHB0cl90 eXBlKTsKKyAgY29kZV9lbnRyeS0+c3ltZmlsZV9hZGRyID0KKyAgICAgIGV4 dHJhY3RfdHlwZWRfYWRkcmVzcyAoJmVudHJ5X2J1ZlsyICogcHRyX3NpemVd LCBwdHJfdHlwZSk7CisgIGNvZGVfZW50cnktPnN5bWZpbGVfc2l6ZSA9Cisg ICAgICBleHRyYWN0X3Vuc2lnbmVkX2ludGVnZXIgKCZlbnRyeV9idWZbMyAq IHB0cl9zaXplXSwgOCwgYnl0ZV9vcmRlcik7Cit9CisKKy8qIFRoaXMgZnVu Y3Rpb24gcmVnaXN0ZXJzIGNvZGUgYXNzb2NpYXRlZCB3aXRoIGEgSklUIGNv ZGUgZW50cnkuICBJdCB1c2VzIHRoZQorICAgcG9pbnRlciBhbmQgc2l6ZSBw YWlyIGluIHRoZSBlbnRyeSB0byByZWFkIHRoZSBzeW1ib2wgZmlsZSBmcm9t IHRoZSByZW1vdGUKKyAgIGFuZCB0aGVuIGNhbGxzIHN5bWJvbF9maWxlX2Fk ZF9mcm9tX2xvY2FsX21lbW9yeSB0byBhZGQgaXQgYXMgdGhvdWdoIGl0IHdl cmUKKyAgIGEgc3ltYm9sIGZpbGUgYWRkZWQgYnkgdGhlIHVzZXIuICAqLwor CitzdGF0aWMgdm9pZAoraml0X3JlZ2lzdGVyX2NvZGUgKENPUkVfQUREUiBl bnRyeV9hZGRyLCBzdHJ1Y3Qgaml0X2NvZGVfZW50cnkgKmNvZGVfZW50cnkp Cit7CisgIGJmZCAqbmJmZDsKKyAgc3RydWN0IHNlY3Rpb25fYWRkcl9pbmZv ICpzYWk7CisgIHN0cnVjdCBiZmRfc2VjdGlvbiAqc2VjOworICBzdHJ1Y3Qg b2JqZmlsZSAqb2JqZmlsZTsKKyAgc3RydWN0IGNsZWFudXAgKm9sZF9jbGVh bnVwczsKKyAgaW50IGk7CisgIGNvbnN0IHN0cnVjdCBiZmRfYXJjaF9pbmZv ICpiOworCisgIG5iZmQgPSBiZmRfb3Blbl9mcm9tX3RhcmdldF9tZW1vcnkg KGNvZGVfZW50cnktPnN5bWZpbGVfYWRkciwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29kZV9lbnRyeS0+c3ltZmlsZV9zaXpl LCBnbnV0YXJnZXQpOworICBvbGRfY2xlYW51cHMgPSBtYWtlX2NsZWFudXBf YmZkX2Nsb3NlIChuYmZkKTsKKworICAvKiBDaGVjayB0aGUgZm9ybWF0LiAg Tk9URTogVGhpcyBpbml0aWFsaXplcyBpbXBvcnRhbnQgZGF0YSB0aGF0IEdE QiB1c2VzIQorICAgICBXZSB3b3VsZCBzZWdmYXVsdCBsYXRlciB3aXRob3V0 IHRoaXMgbGluZS4gICovCisgIGlmICghYmZkX2NoZWNrX2Zvcm1hdCAobmJm ZCwgYmZkX29iamVjdCkpCisgICAgeworICAgICAgcHJpbnRmX3VuZmlsdGVy ZWQgKF8oIlwKK0pJVGVkIHN5bWJvbCBmaWxlIGlzIG5vdCBhbiBvYmplY3Qg ZmlsZSwgaWdub3JpbmcgaXQuXG4iKSk7CisgICAgICBkb19jbGVhbnVwcyAo b2xkX2NsZWFudXBzKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgLyog Q2hlY2sgYmZkIGFyY2guICAqLworICBiID0gZ2RiYXJjaF9iZmRfYXJjaF9p bmZvICh0YXJnZXRfZ2RiYXJjaCk7CisgIGlmIChiLT5jb21wYXRpYmxlIChi LCBiZmRfZ2V0X2FyY2hfaW5mbyAobmJmZCkpICE9IGIpCisgICAgd2Fybmlu ZyAoXygiSklUZWQgb2JqZWN0IGZpbGUgYXJjaGl0ZWN0dXJlICVzIGlzIG5v dCBjb21wYXRpYmxlICIKKyAgICAgICAgICAgICAgICJ3aXRoIHRhcmdldCBh cmNoaXRlY3R1cmUgJXMuIiksIGJmZF9nZXRfYXJjaF9pbmZvCisgICAgICAg ICAgICAgKG5iZmQpLT5wcmludGFibGVfbmFtZSwgYi0+cHJpbnRhYmxlX25h bWUpOworCisgIC8qIFJlYWQgdGhlIHNlY3Rpb24gYWRkcmVzcyBpbmZvcm1h dGlvbiBvdXQgb2YgdGhlIHN5bWJvbCBmaWxlLiAgU2luY2UgdGhlCisgICAg IGZpbGUgaXMgZ2VuZXJhdGVkIGJ5IHRoZSBKSVQgYXQgcnVudGltZSwgaXQg c2hvdWxkIGFsbCBvZiB0aGUgYWJzb2x1dGUKKyAgICAgYWRkcmVzc2VzIHRo YXQgd2UgY2FyZSBhYm91dC4gICovCisgIHNhaSA9IGFsbG9jX3NlY3Rpb25f YWRkcl9pbmZvIChiZmRfY291bnRfc2VjdGlvbnMgKG5iZmQpKTsKKyAgbWFr ZV9jbGVhbnVwX2ZyZWVfc2VjdGlvbl9hZGRyX2luZm8gKHNhaSk7CisgIGkg PSAwOworICBmb3IgKHNlYyA9IG5iZmQtPnNlY3Rpb25zOyBzZWMgIT0gTlVM TDsgc2VjID0gc2VjLT5uZXh0KQorICAgIGlmICgoYmZkX2dldF9zZWN0aW9u X2ZsYWdzIChuYmZkLCBzZWMpICYgKFNFQ19BTExPQ3xTRUNfTE9BRCkpICE9 IDApCisgICAgICB7CisgICAgICAgIC8qIFdlIGFzc3VtZSB0aGF0IHRoZXNl IHZpcnR1YWwgYWRkcmVzc2VzIGFyZSBhYnNvbHV0ZSwgYW5kIGRvIG5vdAor ICAgICAgICAgICB0cmVhdCB0aGVtIGFzIG9mZnNldHMuICAqLworCXNhaS0+ b3RoZXJbaV0uYWRkciA9IGJmZF9nZXRfc2VjdGlvbl92bWEgKG5iZmQsIHNl Yyk7CisJc2FpLT5vdGhlcltpXS5uYW1lID0gKGNoYXIgKikgYmZkX2dldF9z ZWN0aW9uX25hbWUgKG5iZmQsIHNlYyk7CisJc2FpLT5vdGhlcltpXS5zZWN0 aW5kZXggPSBzZWMtPmluZGV4OworCSsraTsKKyAgICAgIH0KKworICAvKiBU aGlzIGNhbGwgdGFrZXMgb3duZXJzaGlwIG9mIHNhaS4gICovCisgIG9iamZp bGUgPSBzeW1ib2xfZmlsZV9hZGRfZnJvbV9iZmQgKG5iZmQsIDAsIHNhaSwg T0JKRl9TSEFSRUQpOworCisgIC8qIFJlbWVtYmVyIGEgbWFwcGluZyBmcm9t IGVudHJ5X2FkZHIgdG8gb2JqZmlsZS4gICovCisgIHNldF9vYmpmaWxlX2Rh dGEgKG9iamZpbGUsIGppdF9vYmpmaWxlX2RhdGEsICh2b2lkICopIGVudHJ5 X2FkZHIpOworCisgIGRpc2NhcmRfY2xlYW51cHMgKG9sZF9jbGVhbnVwcyk7 Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gdW5yZWdpc3RlcnMgSklUZWQgY29k ZSBhbmQgZnJlZXMgdGhlIGNvcnJlc3BvbmRpbmcgb2JqZmlsZS4gICovCisK K3N0YXRpYyB2b2lkCitqaXRfdW5yZWdpc3Rlcl9jb2RlIChzdHJ1Y3Qgb2Jq ZmlsZSAqb2JqZmlsZSkKK3sKKyAgZnJlZV9vYmpmaWxlIChvYmpmaWxlKTsK K30KKwordm9pZAoraml0X2luZmVyaW9yX2NyZWF0ZWRfaG9vayAodm9pZCkK K3sKKyAgc3RydWN0IG1pbmltYWxfc3ltYm9sICpyZWdfc3ltYm9sOworICBz dHJ1Y3QgbWluaW1hbF9zeW1ib2wgKmRlc2Nfc3ltYm9sOworICBDT1JFX0FE RFIgcmVnX2FkZHI7CisgIHN0cnVjdCBqaXRfZGVzY3JpcHRvciBkZXNjcmlw dG9yOworICBzdHJ1Y3Qgaml0X2NvZGVfZW50cnkgY3VyX2VudHJ5OworICBD T1JFX0FERFIgY3VyX2VudHJ5X2FkZHI7CisKKyAgLyogSWYgd2UgYWxyZWFk eSBmb3VuZCB0aGUgc3ltYm9scyBhbmQgc3VjY2Vzc2Z1bGx5IHNldCB0aGUg YnJlYWtwb2ludCwgZG9uJ3QKKyAgICAgZG8gaXQgYWdhaW4uICAqLworICBp ZiAoaml0X2Rlc2NyaXB0b3JfYWRkciAhPSAwKQorICAgIHJldHVybjsKKwor ICAvKiBMb29rdXAgdGhlIHJlZ2lzdHJhdGlvbiBzeW1ib2wuICBJZiBpdCBp cyBtaXNzaW5nLCB0aGVuIHdlIGFzc3VtZSB3ZSBhcmUKKyAgICAgbm90IGF0 dGFjaGVkIHRvIGEgSklULiAgKi8KKyAgcmVnX3N5bWJvbCA9IGxvb2t1cF9t aW5pbWFsX3N5bWJvbCAoaml0X2JyZWFrX25hbWUsIE5VTEwsIE5VTEwpOwor ICBpZiAocmVnX3N5bWJvbCA9PSBOVUxMKQorICAgIHJldHVybjsKKyAgcmVn X2FkZHIgPSBTWU1CT0xfVkFMVUVfQUREUkVTUyAocmVnX3N5bWJvbCk7Cisg IGlmIChyZWdfYWRkciA9PSAwKQorICAgIHJldHVybjsKKworICAvKiBMb29r dXAgdGhlIGRlc2NyaXB0b3Igc3ltYm9sIGFuZCBjYWNoZSB0aGUgYWRkci4g IElmIGl0IGlzIG1pc3NpbmcsIHdlCisgICAgIGFzc3VtZSB3ZSBhcmUgbm90 IGF0dGFjaGVkIHRvIGEgSklUIGFuZCByZXR1cm4gZWFybHkuICAqLworICBk ZXNjX3N5bWJvbCA9IGxvb2t1cF9taW5pbWFsX3N5bWJvbCAoaml0X2Rlc2Ny aXB0b3JfbmFtZSwgTlVMTCwgTlVMTCk7CisgIGlmIChkZXNjX3N5bWJvbCA9 PSBOVUxMKQorICAgIHJldHVybjsKKyAgaml0X2Rlc2NyaXB0b3JfYWRkciA9 IFNZTUJPTF9WQUxVRV9BRERSRVNTIChkZXNjX3N5bWJvbCk7CisgIGlmIChq aXRfZGVzY3JpcHRvcl9hZGRyID09IDApCisgICAgcmV0dXJuOworCisgIC8q IFJlYWQgdGhlIGRlc2NyaXB0b3Igc28gd2UgY2FuIGNoZWNrIHRoZSB2ZXJz aW9uIG51bWJlciBhbmQgbG9hZCBhbnkgYWxyZWFkeQorICAgICBKSVRlZCBm dW5jdGlvbnMuICAqLworICBqaXRfcmVhZF9kZXNjcmlwdG9yICgmZGVzY3Jp cHRvcik7CisKKyAgLyogQ2hlY2sgdGhhdCB0aGUgdmVyc2lvbiBudW1iZXIg YWdyZWVzIHdpdGggdGhhdCB3ZSBzdXBwb3J0LiAgKi8KKyAgaWYgKGRlc2Ny aXB0b3IudmVyc2lvbiAhPSAxKQorICAgIGVycm9yIChfKCJVbnN1cHBvcnRl ZCBKSVQgcHJvdG9jb2wgdmVyc2lvbiBpbiBkZXNjcmlwdG9yISIpKTsKKwor ICAvKiBQdXQgYSBicmVha3BvaW50IGluIHRoZSByZWdpc3RyYXRpb24gc3lt Ym9sLiAgKi8KKyAgY3JlYXRlX2ppdF9ldmVudF9icmVha3BvaW50ICh0YXJn ZXRfZ2RiYXJjaCwgcmVnX2FkZHIpOworCisgIC8qIElmIHdlJ3ZlIGF0dGFj aGVkIHRvIGEgcnVubmluZyBwcm9ncmFtLCB3ZSBuZWVkIHRvIGNoZWNrIHRo ZSBkZXNjcmlwdG9yIHRvCisgICAgIHJlZ2lzdGVyIGFueSBmdW5jdGlvbnMg dGhhdCB3ZXJlIGFscmVhZHkgZ2VuZXJhdGVkLiAgKi8KKyAgZm9yIChjdXJf ZW50cnlfYWRkciA9IGRlc2NyaXB0b3IuZmlyc3RfZW50cnk7CisgICAgICAg Y3VyX2VudHJ5X2FkZHIgIT0gMDsKKyAgICAgICBjdXJfZW50cnlfYWRkciA9 IGN1cl9lbnRyeS5uZXh0X2VudHJ5KQorICAgIHsKKyAgICAgIGppdF9yZWFk X2NvZGVfZW50cnkgKGN1cl9lbnRyeV9hZGRyLCAmY3VyX2VudHJ5KTsKKyAg ICAgIGppdF9yZWdpc3Rlcl9jb2RlIChjdXJfZW50cnlfYWRkciwgJmN1cl9l bnRyeSk7CisgICAgfQorfQorCisvKiBXcmFwcGVyIHRvIG1hdGNoIHRoZSBv YnNlcnZlciBmdW5jdGlvbiBwb2ludGVyIHByb3RvdHlwZS4gICovCisKK3N0 YXRpYyB2b2lkCitqaXRfaW5mZXJpb3JfY3JlYXRlZF9ob29rMSAoc3RydWN0 IHRhcmdldF9vcHMgKm9iamZpbGUsIGludCBmcm9tX3R0eSkKK3sKKyAgaml0 X2luZmVyaW9yX2NyZWF0ZWRfaG9vayAoKTsKK30KKworLyogVGhpcyBmdW5j dGlvbiBjbGVhbnMgdXAgYW55IGNvZGUgZW50cmllcyBsZWZ0IG92ZXIgd2hl biB0aGUgaW5mZXJpb3IgZXhpdHMuCisgICBXZSBnZXQgbGVmdCBvdmVyIGNv ZGUgd2hlbiB0aGUgaW5mZXJpb3IgZXhpdHMgd2l0aG91dCB1bnJlZ2lzdGVy aW5nIGl0cyBjb2RlLAorICAgZm9yIGV4YW1wbGUgd2hlbiBpdCBjcmFzaGVz LiAgKi8KKworc3RhdGljIHZvaWQKK2ppdF9pbmZlcmlvcl9leGl0X2hvb2sg KGludCBwaWQpCit7CisgIHN0cnVjdCBvYmpmaWxlICpvYmpmOworICBzdHJ1 Y3Qgb2JqZmlsZSAqdGVtcDsKKworICAvKiBXZSBuZWVkIHRvIHJlc2V0IHRo ZSBkZXNjcmlwdG9yIGFkZHIgc28gdGhhdCBuZXh0IHRpbWUgd2UgbG9hZCB1 cCB0aGUKKyAgICAgaW5mZXJpb3Igd2UgbG9vayBmb3IgaXQgYWdhaW4uICAq LworICBqaXRfZGVzY3JpcHRvcl9hZGRyID0gMDsKKworICBBTExfT0JKRklM RVNfU0FGRSAob2JqZiwgdGVtcCkKKyAgICBpZiAob2JqZmlsZV9kYXRhIChv YmpmLCBqaXRfb2JqZmlsZV9kYXRhKSAhPSBOVUxMKQorICAgICAgaml0X3Vu cmVnaXN0ZXJfY29kZSAob2JqZik7Cit9CisKK3ZvaWQKK2ppdF9ldmVudF9o YW5kbGVyICh2b2lkKQoreworICBzdHJ1Y3Qgaml0X2Rlc2NyaXB0b3IgZGVz Y3JpcHRvcjsKKyAgc3RydWN0IGppdF9jb2RlX2VudHJ5IGNvZGVfZW50cnk7 CisgIENPUkVfQUREUiBlbnRyeV9hZGRyOworICBzdHJ1Y3Qgb2JqZmlsZSAq b2JqZjsKKyAgc3RydWN0IG9iamZpbGUgKnRlbXA7CisKKyAgLyogUmVhZCB0 aGUgZGVzY3JpcHRvciBmcm9tIHJlbW90ZSBtZW1vcnkuICAqLworICBqaXRf cmVhZF9kZXNjcmlwdG9yICgmZGVzY3JpcHRvcik7CisgIGVudHJ5X2FkZHIg PSBkZXNjcmlwdG9yLnJlbGV2YW50X2VudHJ5OworCisgIC8qIERvIHRoZSBj b3JyZXNwb25kaW5nIGFjdGlvbi4gKi8KKyAgc3dpdGNoIChkZXNjcmlwdG9y LmFjdGlvbl9mbGFnKQorICAgIHsKKyAgICBjYXNlIEpJVF9OT0FDVElPTjoK KyAgICAgIGJyZWFrOworICAgIGNhc2UgSklUX1JFR0lTVEVSOgorICAgICAg aml0X3JlYWRfY29kZV9lbnRyeSAoZW50cnlfYWRkciwgJmNvZGVfZW50cnkp OworICAgICAgaml0X3JlZ2lzdGVyX2NvZGUgKGVudHJ5X2FkZHIsICZjb2Rl X2VudHJ5KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgSklUX1VOUkVHSVNU RVI6CisgICAgICAvKiBMb29rIHVwIHRoZSBvYmpmaWxlIHdpdGggdGhpcyBj b2RlIGVudHJ5IGFkZHJlc3MuICAqLworICAgICAgQUxMX09CSkZJTEVTX1NB RkUgKG9iamYsIHRlbXApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAob2Jq ZmlsZV9kYXRhIChvYmpmLCBqaXRfb2JqZmlsZV9kYXRhKSA9PSAodm9pZCAq KSBlbnRyeV9hZGRyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBq aXRfdW5yZWdpc3Rlcl9jb2RlIChvYmpmKTsKKyAgICAgICAgICAgICAgcmV0 dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBwcmludGZf dW5maWx0ZXJlZCAoIlVuYWJsZSB0byBmaW5kIEpJVGVkIGNvZGUgZW50cnkg YXQgYWRkcmVzczogJXBcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAg KHZvaWQgKikgZW50cnlfYWRkcik7CisgICAgICBicmVhazsKKyAgICBkZWZh dWx0OgorICAgICAgZXJyb3IgKF8oIlVua25vd24gYWN0aW9uX2ZsYWcgdmFs dWUgaW4gSklUIGRlc2NyaXB0b3IhIikpOworICAgICAgYnJlYWs7CisgICAg fQorfQorCisvKiBQcm92aWRlIGEgcHJvdG90eXBlIHRvIHNpbGVuY2UgLVdt aXNzaW5nLXByb3RvdHlwZXMuICAqLworCitleHRlcm4gdm9pZCBfaW5pdGlh bGl6ZV9qaXQgKHZvaWQpOworCit2b2lkCitfaW5pdGlhbGl6ZV9qaXQgKHZv aWQpCit7CisgIG9ic2VydmVyX2F0dGFjaF9pbmZlcmlvcl9jcmVhdGVkIChq aXRfaW5mZXJpb3JfY3JlYXRlZF9ob29rMSk7CisgIG9ic2VydmVyX2F0dGFj aF9pbmZlcmlvcl9leGl0IChqaXRfaW5mZXJpb3JfZXhpdF9ob29rKTsKKyAg aml0X29iamZpbGVfZGF0YSA9IHJlZ2lzdGVyX29iamZpbGVfZGF0YSAoKTsK K30KSW5kZXg6IGdkYi9qaXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD UyBmaWxlOiBnZGIvaml0LmgKZGlmZiAtTiBnZGIvaml0LmgKLS0tIC9kZXYv bnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBnZGIvaml0LmgJ MjcgSnVsIDIwMDkgMjA6MzQ6MDcgLTAwMDAKQEAgLTAsMCArMSw3NyBAQAor LyogSklUIGRlY2xhcmF0aW9ucyBmb3IgR0RCLCB0aGUgR05VIERlYnVnZ2Vy LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDkKKyAgIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBH REIuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAg IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl CisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxo dHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYg SklUX0gKKyNkZWZpbmUgSklUX0gKKworLyogV2hlbiB0aGUgSklUIGJyZWFr cG9pbnQgZmlyZXMsIHRoZSBpbmZlcmlvciB3YW50cyB1cyB0byB0YWtlIG9u ZSBvZiB0aGVzZQorICAgYWN0aW9ucy4gIFRoZXNlIHZhbHVlcyBhcmUgdXNl ZCBieSB0aGUgaW5mZXJpb3IsIHNvIHRoZSB2YWx1ZXMgb2YgdGhlc2UgZW51 bXMKKyAgIGNhbm5vdCBiZSBjaGFuZ2VkLiAgKi8KKwordHlwZWRlZiBlbnVt Cit7CisgIEpJVF9OT0FDVElPTiA9IDAsCisgIEpJVF9SRUdJU1RFUiwKKyAg SklUX1VOUkVHSVNURVIKK30gaml0X2FjdGlvbnNfdDsKKworLyogVGhpcyBz dHJ1Y3QgZGVzY3JpYmVzIGEgc2luZ2xlIHN5bWJvbCBmaWxlIGluIGEgbGlu a2VkIGxpc3Qgb2Ygc3ltYm9sIGZpbGVzCisgICBkZXNjcmliaW5nIGdlbmVy YXRlZCBjb2RlLiAgQXMgdGhlIGluZmVyaW9yIGdlbmVyYXRlcyBjb2RlLCBp dCBhZGRzIHRoZXNlCisgICBlbnRyaWVzIHRvIHRoZSBsaXN0LCBhbmQgd2hl biB3ZSBhdHRhY2ggdG8gdGhlIGluZmVyaW9yLCB3ZSByZWFkIHRoZW0gYWxs LgorICAgRm9yIHRoZSBmaXJzdCBlbGVtZW50IHByZXZfZW50cnkgc2hvdWxk IGJlIE5VTEwsIGFuZCBmb3IgdGhlIGxhc3QgZWxlbWVudAorICAgbmV4dF9l bnRyeSBzaG91bGQgYmUgTlVMTC4gICovCisKK3N0cnVjdCBqaXRfY29kZV9l bnRyeQoreworICBDT1JFX0FERFIgbmV4dF9lbnRyeTsKKyAgQ09SRV9BRERS IHByZXZfZW50cnk7CisgIENPUkVfQUREUiBzeW1maWxlX2FkZHI7CisgIHVp bnQ2NF90IHN5bWZpbGVfc2l6ZTsKK307CisKKy8qIFRoaXMgaXMgdGhlIGds b2JhbCBkZXNjcmlwdG9yIHRoYXQgdGhlIGluZmVyaW9yIHVzZXMgdG8gY29t bXVuaWNhdGUKKyAgIGluZm9ybWF0aW9uIHRvIHRoZSBkZWJ1Z2dlci4gIFRv IGFsZXJ0IHRoZSBkZWJ1Z2dlciB0byB0YWtlIGFuIGFjdGlvbiwgdGhlCisg ICBpbmZlcmlvciBzZXRzIHRoZSBhY3Rpb25fZmxhZyB0byB0aGUgYXBwcm9w cmlhdGUgZW51bSB2YWx1ZSwgdXBkYXRlcworICAgcmVsZXZhbnRfZW50cnkg dG8gcG9pbnQgdG8gdGhlIHJlbGV2YW50IGNvZGUgZW50cnksIGFuZCBjYWxs cyB0aGUgZnVuY3Rpb24gYXQKKyAgIHRoZSB3ZWxsLWtub3duIHN5bWJvbCB3 aXRoIG91ciBicmVha3BvaW50LiAgV2UgdGhlbiByZWFkIHRoaXMgZGVzY3Jp cHRvciBmcm9tCisgICBhbm90aGVyIGdsb2JhbCB3ZWxsLWtub3duIHN5bWJv bC4gICovCisKK3N0cnVjdCBqaXRfZGVzY3JpcHRvcgoreworICB1aW50MzJf dCB2ZXJzaW9uOworICAvKiBUaGlzIHNob3VsZCBiZSBqaXRfYWN0aW9uc190 LCBidXQgd2Ugd2FudCB0byBiZSBzcGVjaWZpYyBhYm91dCB0aGUKKyAgICAg Yml0LXdpZHRoLiAgKi8KKyAgdWludDMyX3QgYWN0aW9uX2ZsYWc7CisgIENP UkVfQUREUiByZWxldmFudF9lbnRyeTsKKyAgQ09SRV9BRERSIGZpcnN0X2Vu dHJ5OworfTsKKworLyogTG9va3MgZm9yIHRoZSBkZXNjcmlwdG9yIGFuZCBy ZWdpc3RyYXRpb24gc3ltYm9scyBhbmQgYnJlYWtwb2ludHMgdGhlCisgICBy ZWdpc3RyYXRpb24gZnVuY3Rpb24uICBJZiBpdCBmaW5kcyBib3RoLCBpdCBy ZWdpc3RlcnMgYWxsIHRoZSBhbHJlYWR5IEpJVGVkCisgICBjb2RlLiAgSWYg aXQgaGFzIGFscmVhZHkgZm91bmQgdGhlIHN5bWJvbHMsIHRoZW4gaXQgZG9l c24ndCB0cnkgYWdhaW4uICAqLworCitleHRlcm4gdm9pZCBqaXRfaW5mZXJp b3JfY3JlYXRlZF9ob29rICh2b2lkKTsKKworLyogVGhpcyBmdW5jdGlvbiBp cyBjYWxsZWQgYnkgaGFuZGxlX2luZmVyaW9yX2V2ZW50IHdoZW4gaXQgZGVj aWRlcyB0aGF0IHRoZSBKSVQKKyAgIGV2ZW50IGJyZWFrcG9pbnQgaGFzIGZp cmVkLiAgKi8KKworZXh0ZXJuIHZvaWQgaml0X2V2ZW50X2hhbmRsZXIgKHZv aWQpOworCisjZW5kaWYgLyogSklUX0ggKi8KSW5kZXg6IGdkYi9vYmpmaWxl cy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3Jj L3NyYy9nZGIvb2JqZmlsZXMuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS44 NwpkaWZmIC11IC1wIC11IC1yMS44NyBvYmpmaWxlcy5jCi0tLSBnZGIvb2Jq ZmlsZXMuYwkyMiBKdWwgMjAwOSAxOToyMTozMSAtMDAwMAkxLjg3CisrKyBn ZGIvb2JqZmlsZXMuYwkyNyBKdWwgMjAwOSAyMDozNDowNyAtMDAwMApAQCAt MjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiZGVmcy5oIgogI2luY2x1ZGUg ImJmZC5oIgkJLyogQmluYXJ5IEZpbGUgRGVzY3JpcHRpb24gKi8KKyNpbmNs dWRlICJsaWJiZmQuaCIKICNpbmNsdWRlICJzeW10YWIuaCIKICNpbmNsdWRl ICJzeW1maWxlLmgiCiAjaW5jbHVkZSAib2JqZmlsZXMuaCIKQEAgLTQzOCw5 ICs0MzksMTkgQEAgZnJlZV9vYmpmaWxlIChzdHJ1Y3Qgb2JqZmlsZSAqb2Jq ZmlsZSkKICAgaWYgKG9iamZpbGUtPm9iZmQgIT0gTlVMTCAmJiAhKG9iamZp bGUtPmZsYWdzICYgT0JKRl9LRUVQQkZEKSkKICAgICB7CiAgICAgICBjaGFy ICpuYW1lID0gYmZkX2dldF9maWxlbmFtZSAob2JqZmlsZS0+b2JmZCk7Cisg ICAgICBzdHJ1Y3QgYmZkX2luX21lbW9yeSAqYmltID0gTlVMTDsKKyAgICAg IC8qIEhhY2sgdG8gd29yayBhcm91bmQgdGhlIGZhY3QgdGhhdCBCRkQgZG9l cyBub3QgdGFrZSBvd25lcnNoaXAgb2YgdGhlCisgICAgICAgICBtZW1vcnkg Zm9yIGZpbGVzIGFsbG9jYXRlZCBpbiBtZW1vcnkuICAqLworICAgICAgaWYg KG9iamZpbGUtPm9iZmQtPmZsYWdzICYgQkZEX0lOX01FTU9SWSkKKyAgICAg ICAgYmltID0gKHN0cnVjdCBiZmRfaW5fbWVtb3J5ICopIG9iamZpbGUtPm9i ZmQtPmlvc3RyZWFtOwogICAgICAgaWYgKCFiZmRfY2xvc2UgKG9iamZpbGUt Pm9iZmQpKQogCXdhcm5pbmcgKF8oImNhbm5vdCBjbG9zZSBcIiVzXCI6ICVz IiksCiAJCSBuYW1lLCBiZmRfZXJybXNnIChiZmRfZ2V0X2Vycm9yICgpKSk7 CisgICAgICBpZiAoYmltICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAg ICB4ZnJlZSAoYmltLT5idWZmZXIpOworICAgICAgICAgIHhmcmVlIChiaW0p OworICAgICAgICB9CiAgICAgICB4ZnJlZSAobmFtZSk7CiAgICAgfQogCklu ZGV4OiBnZGIvZG9jL2dkYi50ZXhpbmZvCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvZG9jL2dkYi50ZXhpbmZv LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYwOApkaWZmIC11IC1wIC11IC1y MS42MDggZ2RiLnRleGluZm8KLS0tIGdkYi9kb2MvZ2RiLnRleGluZm8JMjAg SnVsIDIwMDkgMTg6NTE6NDEgLTAwMDAJMS42MDgKKysrIGdkYi9kb2MvZ2Ri LnRleGluZm8JMjcgSnVsIDIwMDkgMjA6MzQ6MDggLTAwMDAKQEAgLTE1OSw2 ICsxNTksNyBAQCBzb2Z0d2FyZSBpbiBnZW5lcmFsLiAgV2Ugd2lsbCBtaXNz IGhpbS4KICogRW1hY3M6OiAgICAgICAgICAgICAgICAgICAgICAgVXNpbmcg QHZhbHVle0dEQk59IHVuZGVyIEBzY3tnbnV9IEVtYWNzCiAqIEdEQi9NSTo6 ICAgICAgICAgICAgICAgICAgICAgIEB2YWx1ZXtHREJOfSdzIE1hY2hpbmUg SW50ZXJmYWNlLgogKiBBbm5vdGF0aW9uczo6ICAgICAgICAgICAgICAgICBA dmFsdWV7R0RCTn0ncyBhbm5vdGF0aW9uIGludGVyZmFjZS4KKyogSklUIElu dGVyZmFjZTo6ICAgICAgICAgICAgICAgVXNpbmcgdGhlIEpJVCBkZWJ1Z2dp bmcgaW50ZXJmYWNlLgogCiAqIEdEQiBCdWdzOjogICAgICAgICAgICAgICAg ICAgIFJlcG9ydGluZyBidWdzIGluIEB2YWx1ZXtHREJOfQogCkBAIC0yNTgy Miw2ICsyNTgyMywxMTUgQEAgc291cmNlIHdoaWNoIGlzIGJlaW5nIGRpc3Bs YXllZC4gIEB2YXJ7YQogZm9sbG93ZWQgYnkgb25lIG9yIG1vcmUgbG93ZXJj YXNlIGhleCBkaWdpdHMgKG5vdGUgdGhhdCB0aGlzIGRvZXMgbm90CiBkZXBl bmQgb24gdGhlIGxhbmd1YWdlKS4KIAorQG5vZGUgSklUIEludGVyZmFjZQor QGNoYXB0ZXIgQHZhbHVle0dEQk59J3MgSklUIEludGVyZmFjZQorCitUaGlz IGNoYXB0ZXIgZG9jdW1lbnRzIEB2YWx1ZXtHREJOfSdzIGp1c3QtaW4tdGlt ZSBjb21waWxlciAoSklUKSBpbnRlcmZhY2UuCitKdXN0LWluLXRpbWUgY29t cGlsZXJzIChKSVRzKSBhcmUgbm9ybWFsbHkgZGlmZmljdWx0IHRvIGRlYnVn IGJlY2F1c2UgdGhleQorZ2VuZXJhdGUgY29kZSBhdCBydW50aW1lLCBhbmQg R0RCIG5vcm1hbGx5IGdldHMgYWxsIG9mIGl0cyBzeW1ib2xzIGZyb20gb2Jq ZWN0CitmaWxlcy4gIEluIG9yZGVyIHRvIGRlYnVnIGV4ZWN1dGFibGVzIHRo YXQgdXNlIEpJVHMsIEdEQiBoYXMgYW4gaW50ZXJmYWNlIHRoYXQKK2FsbG93 cyB0aGUgSklUIHRvIHJlZ2lzdGVyIGluLW1lbW9yeSBzeW1ib2wgZmlsZXMg d2l0aCBHREIgYXQgcnVudGltZS4gIElmIHlvdQorYXJlIHVzaW5nIEdEQiB0 byBkZWJ1ZyBhIHByb2dyYW0gdXNpbmcgdGhpcyBpbnRlcmZhY2UsIHRoZW4g aXQgc2hvdWxkIGp1c3Qgd29yaworc28gbG9uZyBhcyB5b3UgaGF2ZSBub3Qg c3RyaXBwZWQgdGhlIGJpbmFyeS4gIElmIHlvdSBhcmUgZGV2ZWxvcGluZyBh IEpJVCwgdGhlbgordGhlIGludGVyZmFjZSBpcyBkb2N1bWVudGVkIGluIHRo ZSBuZXh0IHNlY3Rpb24uICBBdCB0aGlzIHRpbWUsIHRoZSBvbmx5IGtub3du CitjbGllbnQgb2YgdGhpcyBpbnRlcmZhY2UgaXMgdGhlIExMVk0gSklULgor CitAc2VjdGlvbiBVc2luZyB0aGUgSklUIEludGVyZmFjZQorCitCcm9hZGx5 IHNwZWFraW5nLCB0aGUgSklUIGludGVyZmFjZSBtaXJyb3JzIHRoZSBkeW5h bWljIGxvYWRlciBpbnRlcmZhY2UsIHdoaWNoCittZWFucyB0aGF0IHRoZSBK SVQgY29tbXVuaWNhdGVzIHdpdGggR0RCIGJ5IHdyaXRpbmcgc29tZSBnbG9i YWwgZGF0YSBhbmQgY2FsbGluZworYSBmdWN0aW9uIGF0IGEgd2VsbC1rbm93 biBzeW1ib2wuICBXaGVuIEdEQiBhdHRhY2hlcywgaXQgcHV0cyBhIGJyZWFr cG9pbnQgaW4KK3RoYXQgZnVuY3Rpb24gc28gdGhhdCBpdCBjYW4gcmVhZCB0 aGUgZGVidWcgaW5mb3JtYXRpb24uCisKK1RoZXNlIGFyZSB0aGUgcmVsZXZh bnQgc3RydWN0IGRlY2xhcmF0aW9ucyB0aGF0IGEgQyBwcm9ncmFtIHNob3Vs ZCBpbmNsdWRlIHRvCitpbXBsZW1lbnQgdGhlIGludGVyZmFjZToKKworQHNt YWxsZXhhbXBsZQordHlwZWRlZiBlbnVtCitAeworICBKSVRfTk9BQ1RJT04g PSAwLAorICBKSVRfUkVHSVNURVJfRk4sCisgIEpJVF9VTlJFR0lTVEVSX0ZO CitAfSBqaXRfYWN0aW9uc190OworCitzdHJ1Y3Qgaml0X2NvZGVfZW50cnkK K0B7CisgIHN0cnVjdCBqaXRfY29kZV9lbnRyeSAqbmV4dF9lbnRyeTsKKyAg c3RydWN0IGppdF9jb2RlX2VudHJ5ICpwcmV2X2VudHJ5OworICBjb25zdCBj aGFyICpzeW1maWxlX2FkZHI7CisgIHVpbnQ2NF90IHN5bWZpbGVfc2l6ZTsK K0B9OworCitzdHJ1Y3Qgaml0X2Rlc2NyaXB0b3IKK0B7CisgIHVpbnQzMl90 IHZlcnNpb247CisgIC8qIFRoaXMgdHlwZSBzaG91bGQgYmUgaml0X2FjdGlv bnNfdCwgYnV0IHdlIHVzZSB1aW50MzJfdAorICAgICB0byBiZSBleHBsaWNp dCBhYm91dCB0aGUgYml0d2lkdGguICAqLworICB1aW50MzJfdCBhY3Rpb25f ZmxhZzsKKyAgc3RydWN0IGppdF9jb2RlX2VudHJ5ICpyZWxldmFudF9lbnRy eTsKKyAgc3RydWN0IGppdF9jb2RlX2VudHJ5ICpmaXJzdF9lbnRyeTsKK0B9 OworCisvKiBHREIgcHV0cyBhIGJyZWFrcG9pbnQgaW4gdGhpcyBmdW5jdGlv bi4gICovCit2b2lkIF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkgX19qaXRf ZGVidWdfcmVnaXN0ZXJfY29kZSgpIEB7IEB9OworCisvKiBNYWtlIHN1cmUg dG8gc3BlY2lmeSB0aGUgdmVyc2lvbiBzdGF0aWNhbGx5LCBiZWNhdXNlIHRo ZQorICAgZGVidWdnZXIgbWF5IGNoZWNrIHRoZSB2ZXJzaW9uIGJlZm9yZSB3 ZSBjYW4gc2V0IGl0LiAgKi8KK3N0cnVjdCBqaXRfZGVzY3JpcHRvciBfX2pp dF9kZWJ1Z19kZXNjcmlwdG9yID0gQHsgMSwgMCwgMCwgMCBAfTsKK0BlbmQg c21hbGxleGFtcGxlCisKK0lmIHRoZSBKSVQgaXMgbXVsdGktdGhyZWFkZWQs IHRoZW4gaXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlIEpJVCBzeW5jaHJvbml6 ZSBhbnkKK21vZGlmaWNhdGlvbnMgdG8gdGhpcyBnbG9iYWwgZGF0YSBwcm9w ZXJseSwgbW9zdGx5IGxpa2VseSBieSBwdXR0aW5nIGEgZ2xvYmFsCittdXRl eCBhcm91bmQgdGhlc2Ugcm91dGluZXMuCisKK0BzZWN0aW9uIFJlZ2lzdGVy aW5nIENvZGUKKworVG8gcmVnaXN0ZXIgY29kZSB3aXRoIEdEQiwgdGhlIEpJ VCBzaG91bGQgZm9sbG93IHRoaXMgcHJvdG9jb2w6CisKK0BpdGVtaXplIEBi dWxsZXQKK0BpdGVtCitHZW5lcmF0ZSBhbiBvYmplY3QgZmlsZSBpbiBtZW1v cnkgd2l0aCBzeW1ib2xzIGFuZCBvdGhlciBkZXNpcmVkIGRlYnVnCitpbmZv cm1hdGlvbi4gIFRoZSBmaWxlIG11c3QgaW5jbHVkZSB0aGUgdmlydHVhbCBh ZGRyZXNzZXMgb2YgdGhlIHNlY3Rpb25zLgorCitAaXRlbQorQ3JlYXRlIGEg Y29kZSBlbnRyeSBmb3IgdGhlIGZpbGUsIHdoaWNoIGdpdmVzIHRoZSBzdGFy dCBhbmQgc2l6ZSBvZiB0aGUgc3ltYm9sCitmaWxlLgorCitAaXRlbQorQWRk IGl0IHRvIHRoZSBsaW5rZWQgbGlzdCBpbiB0aGUgSklUIGRlc2NyaXB0b3Iu CisKK0BpdGVtCitQb2ludCB0aGUgcmVsZXZhbnRfZW50cnkgZmllbGQgb2Yg dGhlIGRlc2NyaXB0b3IgYXQgdGhlIGVudHJ5LgorCitAaXRlbQorU2V0IEBj b2Rle2FjdGlvbl9mbGFnfSB0byBKSVRfUkVHSVNURVIgYW5kIGNhbGwKK0Bj b2Rle19faml0X2RlYnVnX3JlZ2lzdGVyX2NvZGV9LgorQGVuZCBpdGVtaXpl CisKK1doZW4gR0RCIGlzIGF0dGFjaGVkLCBpdCB1c2VzIHRoZSByZWxldmFu dF9lbnRyeSBwb2ludGVyIHNvIGl0IGRvZXNuJ3QgaGF2ZSB0bword2FsayB0 aGUgbGlzdCBsb29raW5nIGZvciBuZXcgY29kZS4gIEhvd2V2ZXIsIHRoZSBs aW5rZWQgbGlzdCBtdXN0IHN0aWxsIGJlCittYWludGFpbmVkIGluIG9yZGVy IHRvIGFsbG93IEdEQiB0byBhdHRhY2ggdG8gYSBydW5uaW5nIHByb2Nlc3Mg YW5kIHByb3Blcmx5CitmaW5kIGFsbCBvZiB0aGUgZGVidWdnaW5nIGluZm9y bWF0aW9uLgorCitAc2VjdGlvbiBVbnJlZ2lzdGVyaW5nIENvZGUKKworSWYg Y29kZSBpcyBmcmVlZCwgdGhlbiB0aGUgSklUIHNob3VsZCB1c2UgdGhlIGZv bGxvd2luZyBwcm90b2NvbDoKKworQGl0ZW1pemUgQGJ1bGxldAorQGl0ZW0K K1JlbW92ZSB0aGUgY29kZSBlbnRyeSBjb3JyZXNwb25kaW5nIHRvIHRoZSBj b2RlIGZyb20gdGhlIGxpbmtlZCBsaXN0LgorCitAaXRlbQorUG9pbnQgdGhl IEBjb2Rle3JlbGV2YW50X2VudHJ5fSBmaWVsZCBvZiB0aGUgZGVzY3JpcHRv ciBhdCB0aGUgY29kZSBlbnRyeS4KKworQGl0ZW0KK1NldCBAY29kZXthY3Rp b25fZmxhZ30gdG8gSklUX1VOUkVHSVNURVIgYW5kIGNhbGwKK0Bjb2Rle19f aml0X2RlYnVnX3JlZ2lzdGVyX2NvZGV9LgorQGVuZCBpdGVtaXplCisKK0lm IHRoZSBKSVQgcmVjb21waWxlcyBjb2RlIHRocm91Z2hvdXQgaXRzIGxpZmV0 aW1lIHdpdGhvdXQgdW5yZWdpc3RlcmluZyBpdCwKK3RoZW4gR0RCIGFuZCB0 aGUgSklUIHdpbGwgY29udGludWUgdG8gdXNlIGV4dHJhIG1lbW9yeSBmb3Ig dGhlc2Ugc3ltYm9sIGZpbGVzLgorCiBAbm9kZSBHREIgQnVncwogQGNoYXB0 ZXIgUmVwb3J0aW5nIEJ1Z3MgaW4gQHZhbHVle0dEQk59CiBAY2luZGV4IGJ1 Z3MgaW4gQHZhbHVle0dEQk59Cg== --001485f7cb347e9887046fb5f6dc--