From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30635 invoked by alias); 10 May 2011 09:02:52 -0000 Received: (qmail 30622 invoked by uid 22791); 10 May 2011 09:02:51 -0000 X-SWARE-Spam-Status: No, hits=-2.3 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,RFC_ABUSE_POST X-Spam-Check-By: sourceware.org Received: from mail-wy0-f175.google.com (HELO mail-wy0-f175.google.com) (74.125.82.175) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 10 May 2011 09:02:36 +0000 Received: by wye20 with SMTP id 20so5457323wye.20 for ; Tue, 10 May 2011 02:02:35 -0700 (PDT) MIME-Version: 1.0 Received: by 10.227.98.9 with SMTP id o9mr3866284wbn.25.1305018154892; Tue, 10 May 2011 02:02:34 -0700 (PDT) Received: by 10.227.20.74 with HTTP; Tue, 10 May 2011 02:02:34 -0700 (PDT) In-Reply-To: <20110509185452.GW17079@tyan-ft48-01.lab.bos.redhat.com> References: <4DC8155A.3040401@redhat.com> <4DC82136.6030802@redhat.com> <4DC83549.8010709@redhat.com> <20110509185452.GW17079@tyan-ft48-01.lab.bos.redhat.com> Date: Tue, 10 May 2011 11:42:00 -0000 Message-ID: Subject: Re: [C++0x] contiguous bitfields race implementation From: Richard Guenther To: Jakub Jelinek Cc: Aldy Hernandez , Jeff Law , Jason Merrill , gcc-patches Content-Type: multipart/mixed; boundary=000e0cd30e468c3e1804a2e837f2 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: 2011-05/txt/msg00721.txt.bz2 --000e0cd30e468c3e1804a2e837f2 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 1545 On Mon, May 9, 2011 at 8:54 PM, Jakub Jelinek wrote: > On Mon, May 09, 2011 at 01:41:13PM -0500, Aldy Hernandez wrote: >> Jakub also gave me a testcase which triggered a buglet in >> max_field_size. =A0I have now added a parameter INNERDECL which is the >> inner reference, so we can properly determine if the inner decl is >> thread visible or not. > > What I meant actually was something different, if max_field_size > and get_inner_reference was called on say > COMPONENT_REF , bitfld> > then get_inner_reference returns the whole x and bitpos > is the relative bit position of bitfld within the struct plus > 4 * sizeof the containing struct. =A0Then > TREE_INT_CST_LOW (TYPE_SIZE (record_type)) - bitpos > might get negative (well, it is unsigned, so huge). > Maybe with MEM_REF such nested handled components shouldn't appear, > if that's the case, you should assert that somewhere. > If it appears, you should probably use TREE_OPERAND (component_ref, 2) > instead of bitpos. > > BTW, shouldn't BIT_FIELD_REF also be handled similarly to the COMPONENT_R= EF? > And, probably some coordination with Richi is needed with his bitfield tr= ee > lowering. Yes, we would need to handle BIT_FIELD_REFs similar (fold can introduce them for example). I attached a work-in-progress patch that does bitfield lowering at the tree level. There are interesting issues when trying to work out the underlying object, as bitfield layout can deliberate= ly obfuscate things a lot. Richard. > =A0 =A0 =A0 =A0Jakub > --000e0cd30e468c3e1804a2e837f2 Content-Type: application/octet-stream; name=lower-bitfields-to-mem-ref Content-Disposition: attachment; filename=lower-bitfields-to-mem-ref Content-Transfer-Encoding: base64 X-Attachment-Id: f_gnim1i370 Content-length: 32298 MjAxMS0wNS0wNiAgUmljaGFyZCBHdWVudGhlciAgPHJndWVudGhlckBzdXNl LmRlPgoKCVBSIHJ0bC1vcHRpbWl6YXRpb24vNDg2OTYKCVBSIHRyZWUtb3B0 aW1pemF0aW9uLzQ1MTQ0CgoKSW5kZXg6IGdjYy9naW1wbGUtbG93LmMKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQoqKiogZ2NjL2dpbXBsZS1sb3cuYy5vcmln CTIwMTEtMDUtMDYgMTA6NDY6NDguMDAwMDAwMDAwICswMjAwCi0tLSBnY2Mv Z2ltcGxlLWxvdy5jCTIwMTEtMDUtMDYgMTU6MDE6MDkuMDAwMDAwMDAwICsw MjAwCioqKioqKioqKioqKioqKiBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBm aWxlIENPUFlJTkczLgoqKiogMzIsMzcgKioqKgotLS0gMzIsMzggLS0tLQog ICNpbmNsdWRlICJmdW5jdGlvbi5oIgogICNpbmNsdWRlICJkaWFnbm9zdGlj LWNvcmUuaCIKICAjaW5jbHVkZSAidHJlZS1wYXNzLmgiCisgI2luY2x1ZGUg InRyZWUtcHJldHR5LXByaW50LmgiCiAgCiAgLyogVGhlIGRpZmZlcmVuY2Vz IGJldHdlZW4gSGlnaCBHSU1QTEUgYW5kIExvdyBHSU1QTEUgYXJlIHRoZQog ICAgIGZvbGxvd2luZzoKKioqKioqKioqKioqKioqIHJlY29yZF92YXJzICh0 cmVlIHZhcnMpCioqKiA5NTAsOTUyICoqKioKLS0tIDk1MSwxMTk0IC0tLS0K ICB7CiAgICByZWNvcmRfdmFyc19pbnRvICh2YXJzLCBjdXJyZW50X2Z1bmN0 aW9uX2RlY2wpOwogIH0KKyAKKyAKKyAvKiBGcm9tIHRoZSBiaXQtZmllbGQg cmVmZXJlbmNlIHRyZWUgUkVGIGdldCB0aGUgb2Zmc2V0IGFuZCBzaXplIG9m IHRoZQorICAgIHVuZGVybHlpbmcgbm9uLWJpdC1maWVsZCBvYmplY3QgaW4g Kk9GRiBhbmQgKlNJWkUsIHJlbGF0aXZlIHRvCisgICAgVFJFRV9PUEVSQU5E IChyZWYsIDApIGFuZCB0aGUgYml0cyByZWZlcmVuY2VkIG9mIHRoYXQgb2Jq ZWN0IGluCisgICAgKkJJVF9PRkZTRVQgYW5kICpCSVRfU0laRS4KKyAKKyAg ICBSZXR1cm4gZmFsc2UgaWYgdGhpcyBpcyBhIHJlZmVyZW5jZSB0cmVlIHdl IGNhbm5vdCBoYW5kbGUuICAqLworIAorIHN0YXRpYyBib29sCisgZ2V0X3Vu ZGVybHlpbmdfb2Zmc2V0X2FuZF9zaXplICh0cmVlIHJlZiwgdHJlZSAqb2Zm LCB1bnNpZ25lZCAqc2l6ZSwKKyAJCQkJdW5zaWduZWQgKmJpdF9vZmZzZXQs IHVuc2lnbmVkICpiaXRfc2l6ZSwKKyAJCQkJdHJlZSAqdHlwZSkKKyB7Cisg ICB0cmVlIGZpZWxkOworIAorICAgLyogPz8/ICBIYW5kbGUgQklUX0ZJRUxE X1JFRiBhcyB3ZWxsLiAgKi8KKyAgIGlmICghUkVGRVJFTkNFX0NMQVNTX1Ag KHJlZikKKyAgICAgICB8fCBUUkVFX0NPREUgKHJlZikgIT0gQ09NUE9ORU5U X1JFRgorICAgICAgIHx8ICFERUNMX0JJVF9GSUVMRCAoVFJFRV9PUEVSQU5E IChyZWYsIDEpKSkKKyAgICAgcmV0dXJuIGZhbHNlOworIAorICAgLyogPz8/ ICBJdCdzIHN1cmVseSBub3QgZm9yIG9wdGltaXphdGlvbiwgYnV0IHdlIGV2 ZW50dWFsbHkgd2FudAorICAgICAgdG8gY2Fub25pY2FsaXplIGFsbCBiaXRm aWVsZCBhY2Nlc3NlcyBhbnl3YXkuICAqLworICAgaWYgKFRSRUVfVEhJU19W T0xBVElMRSAocmVmKSkKKyAgICAgcmV0dXJuIGZhbHNlOworIAorICAgZmll bGQgPSBUUkVFX09QRVJBTkQgKHJlZiwgMSk7CisgCisgICAqb2ZmID0gY29t cG9uZW50X3JlZl9maWVsZF9vZmZzZXQgKHJlZik7CisgICAqYml0X29mZnNl dCA9IFRSRUVfSU5UX0NTVF9MT1cgKERFQ0xfRklFTERfQklUX09GRlNFVCAo ZmllbGQpKTsKKyAgICpiaXRfc2l6ZSA9IFRSRUVfSU5UX0NTVF9MT1cgKERF Q0xfU0laRSAoZmllbGQpKTsKKyAKKyAgIC8qIFdlIHByb2JhYmx5IG5lZWQg dG8gd2FsayBhZGphY2VudCBwcmVjZWVkaW5nIEZJRUxEX0RFQ0xzIG9mIHRo ZQorICAgICAgYWdncmVnYXRlLCBsb29raW5nIGZvciB0aGUgYmVnaW5uaW5n IG9mIHRoZSBiaXQtZmllbGQuICAqLworICAgLyogRm9yIG5vbi1wYWNrZWQg c3RydWN0cyB3ZSBjb3VsZCBhbHNvIGd1ZXNzIGJhc2VkIG9uCisgICAgICBE RUNMX0JJVF9GSUVMRF9UWVBFcyBzaXplIGFuZCBhbGlnbm1lbnQgKGlmIGl0 IG1hdGNoZXMpLiAgKi8KKyAgIC8qIE9rLCBmb3IgdGhlIERFQ0xfUEFDS0VE IGp1c3QgYWxsb2NhdGUgYSBieXRlLWFsaWduZWQgbWluaW1hbC1zaXplCisg ICAgICBjaHVuayB0aGF0IGNvdmVycyB0aGUgZmllbGQsIGZvciAhREVDTF9Q QUNLRUQgYXNzdW1lIHdlIGNhbgorICAgICAgdXNlIHRoZSBhbGlnbm1lbnQg b2YgREVDTF9CSVRfRklFTERfVFlQRSB0byBndWVzcyB0aGUgc3RhcnQgb2YK KyAgICAgIHRoZSB1bmRlcmx5aW5nIG9iamVjdCBhbmQgcmV0dXJuIGFuIGFs aWduZWQgY2h1bmsgb2YgbWVtb3J5LiAgKi8KKyAKKyAgIGlmICghREVDTF9Q QUNLRUQgKGZpZWxkKSkKKyAgICAgeworICAgICAgIC8qIFdoYXQgdG8gZG8g Zm9yIGJvb2wgYml0ZmllbGRzIG9yIGVudW0gYml0ZmllbGRzPworIAkgRm9y IGJvdGggZXhwYW5zaW9uIGRvZXMgbm90IHBlcmZvcm0gYml0ZmllbGQgcmVk dWN0aW9uIC4uLiAgKi8KKyAgICAgICAvKiBNYXliZSBqdXN0IGFsd2F5cyB1 c2UgYSBtb2RlLWJhc2VkIHR5cGU/ICAqLworICAgICAgIGlmIChUUkVFX0NP REUgKERFQ0xfQklUX0ZJRUxEX1RZUEUgKGZpZWxkKSkgIT0gSU5URUdFUl9U WVBFKQorIAkqdHlwZSA9IGJ1aWxkX25vbnN0YW5kYXJkX2ludGVnZXJfdHlw ZQorIAkgICAgICAgICAgKEdFVF9NT0RFX1BSRUNJU0lPTgorIAkJICAgICAo VFlQRV9NT0RFIChERUNMX0JJVF9GSUVMRF9UWVBFIChmaWVsZCkpKSwgMSk7 CisgICAgICAgZWxzZQorIAkqdHlwZSA9IERFQ0xfQklUX0ZJRUxEX1RZUEUg KGZpZWxkKTsKKyAKKyAgICAgICAqc2l6ZSA9IFRSRUVfSU5UX0NTVF9MT1cg KFRZUEVfU0laRSAoKnR5cGUpKTsKKyAgICAgICAqb2ZmID0gZm9sZF9idWls ZDIgKFBMVVNfRVhQUiwgc2l6ZXR5cGUsICpvZmYsCisgCQkJICBzaXplX2lu dCAoKCpiaXRfb2Zmc2V0ICYgfigqc2l6ZSAtIDEpKQorIAkJCQkgICAgLyBC SVRTX1BFUl9VTklUKSk7CisgICAgICAgKmJpdF9vZmZzZXQgJj0gKCpzaXpl IC0gMSk7CisgCisgICAgICAgLyogPz8/ICBJZiB3ZSBoYXZlIHRvIGRvIHR3 byBsb2FkcyBnaXZlIHVwIGZvciBub3cuICAqLworICAgICAgIGlmICgqYml0 X29mZnNldCArICpiaXRfc2l6ZSA+ICpzaXplKQorIAlyZXR1cm4gZmFsc2U7 CisgCisgICAgICAgaWYgKGR1bXBfZmlsZSAmJiAoZHVtcF9mbGFncyAmIFRE Rl9ERVRBSUxTKSkKKyAJeworIAkgIGZwcmludGYgKGR1bXBfZmlsZSwgIkZv ciAiKTsKKyAJICBwcmludF9nZW5lcmljX2V4cHIgKGR1bXBfZmlsZSwgcmVm LCAwKTsKKyAJICBmcHJpbnRmIChkdW1wX2ZpbGUsICIgdXNlICIpOworIAkg IHByaW50X2dlbmVyaWNfZXhwciAoZHVtcF9maWxlLCAqb2ZmLCAwKTsKKyAJ ICBmcHJpbnRmIChkdW1wX2ZpbGUsICIgc2l6ZSAlZCwgYml0IG9mZnNldCAl ZCBzaXplICVkXG4iLAorIAkJICAgKnNpemUsICpiaXRfb2Zmc2V0LCAqYml0 X3NpemUpOworIAl9CisgCisgICAgICAgcmV0dXJuIHRydWU7CisgICAgIH0K KyAgIGVsc2UKKyAgICAgeworICAgICAgIC8qIEZJWE1FICovCisgICAgICAg cmV0dXJuIGZhbHNlOworICAgICB9CisgfQorIAorIC8qIExvd2VyIGEgYml0 ZmllbGQgc3RvcmUgYXQgKkdTSSB0byBhIHJlYWQtbW9kaWZ5LXdyaXRlIGN5 Y2xlLiAgKi8KKyAKKyBzdGF0aWMgdm9pZAorIGxvd2VyX21lbV9saHMgKGdp bXBsZV9zdG10X2l0ZXJhdG9yICpnc2kpCisgeworICAgZ2ltcGxlIHN0bXQg PSBnc2lfc3RtdCAoKmdzaSk7CisgICB0cmVlIGxoczsKKyAgIHRyZWUgb2Zm OworICAgdW5zaWduZWQgc2l6ZSwgYml0X3NpemUsIGJpdF9vZmZzZXQ7Cisg ICBnaW1wbGUgbG9hZDsKKyAgIHRyZWUgdHlwZSwgdGVtLCByZWYsIHZhbDsK KyAKKyAgIGxocyA9IGdpbXBsZV9hc3NpZ25fbGhzIChzdG10KTsKKyAgIGlm ICghZ2V0X3VuZGVybHlpbmdfb2Zmc2V0X2FuZF9zaXplIChsaHMsICZvZmYs ICZzaXplLCAmYml0X29mZnNldCwgJmJpdF9zaXplLAorIAkJCQkgICAgICAg JnR5cGUpKQorICAgICByZXR1cm47CisgCisgICAvKiBCdWlsZCBhIE1FTV9S RUYgdHJlZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGxvYWQvc3RvcmUgdGhlIHdv cmQgd2UKKyAgICAgIHdhbnQgdG8gbWFuaXB1bGF0ZS4KKyAgICAgID8/PyAg R2ltcGxpZnlpbmcgaGVyZSBhdm9pZHMgdXMgdG8gZXhwbGljaXRseSBoYW5k bGUgYWRkcmVzcy10YWtlbgorICAgICAgc3R1ZmYgaW4gY2FzZSB0aGUgYWNj ZXNzIHdhcyB2YXJpYWJsZS4gICovCisgICB0ZW0gPSBjcmVhdGVfdG1wX3Jl ZyAodHlwZSwgIkJGIik7CisgICByZWYgPSBmb2xkX2J1aWxkMiAoTUVNX1JF RiwgdHlwZSwKKyAJCSAgICAgYnVpbGRfZm9sZF9hZGRyX2V4cHIKKyAJCSAg ICAgICAodW5zaGFyZV9leHByIChUUkVFX09QRVJBTkQgKGxocywgMCkpKSwK KyAJCSAgICAgLyogVEJBQSBhbmQgYml0ZmllbGRzIGlzIHRyaWNreSAtIHZh cmlvdXMgQUJJcyBwYWNrCisgCQkgICAgICAgIGRpZmZlcmVudCB1bmRlcmx5 aW5nIHR5cGVkIGJpdC1maWVsZHMgdG9nZXRoZXIuCisgCQkJU28gdXNlIHRo ZSB0eXBlIG9mIHRoZSBiaXQtZmllbGQgY29udGFpbmVyIGluc3RlYWQuICAq LworIAkJICAgICBmb2xkX2NvbnZlcnQgKHJlZmVyZW5jZV9hbGlhc19wdHJf dHlwZSAobGhzKSwgb2ZmKSk7CisgICByZWYgPSBmb3JjZV9naW1wbGVfb3Bl cmFuZF9nc2kgKGdzaSwgcmVmLCBmYWxzZSwKKyAJCQkJICBOVUxMX1RSRUUs IHRydWUsIEdTSV9TQU1FX1NUTVQpOworIAorICAgLyogTG9hZCB0aGUgd29y ZC4gICovCisgICBsb2FkID0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAodGVtLCBy ZWYpOworICAgZ3NpX2luc2VydF9iZWZvcmUgKGdzaSwgbG9hZCwgR1NJX1NB TUVfU1RNVCk7CisgCisgICAvKiBPciB0aGUgc2hpZnRlZCBhbmQgemVyby1l eHRlbmRlZCB2YWwgdG8gdGhlIHBhcnRpYWxseSBjbGVhcmVkCisgICAgICBs b2FkZWQgdmFsdWUuCisgICAgICA/Pz8gIFRoZSBvbGQgbWVtLXJlZiBicmFu Y2ggaGFkIEJJVF9GSUVMRF9FWFBSIGZvciB0aGlzLCBidXQgaXQKKyAgICAg IGhhZCBmb3VyIG9wZXJhbmRzIC4uLgorICAgICAgPz8/ICBVc2luZyBhbGwg dGhlIGZvbGQgc3R1ZmYgbWFrZXMgdXMgaGFuZGxlIGNvbnN0YW50cyBuaWNl bHkKKyAgICAgIGFuZCB0cmFuc3BhcmVudGx5IC4uLgorICAgICAgPz8/ICBE byB3ZSBuZWVkIHRvIHRoaW5rIGFib3V0IEJJVFMvQllURVNfQklHX0VORElB TiBoZXJlPyAgKi8KKyAgIHZhbCA9IGdpbXBsZV9hc3NpZ25fcmhzMSAoc3Rt dCk7CisgICB0ZW0gPSBmb3JjZV9naW1wbGVfb3BlcmFuZF9nc2kKKyAgICAg KGdzaSwKKyAgICAgIGZvbGRfYnVpbGQyIChCSVRfSU9SX0VYUFIsIHR5cGUs CisgCQkgIC8qIE1hc2sgb3V0IGV4aXN0aW5nIGJpdHMuICAqLworIAkJICBm b2xkX2J1aWxkMiAoQklUX0FORF9FWFBSLCB0eXBlLAorIAkJCSAgICAgICB0 ZW0sCisgCQkJICAgICAgIGRvdWJsZV9pbnRfdG9fdHJlZQorIAkJCSAgICAg ICAgICh0eXBlLCBkb3VibGVfaW50X25vdAorIAkJCQkgICAgICAgICAoZG91 YmxlX2ludF9sc2hpZnQKKyAJCQkJCSAgIChkb3VibGVfaW50X21hc2sgKGJp dF9zaXplKSwKKyAJCQkJCSAgICBiaXRfb2Zmc2V0LCBzaXplLCBmYWxzZSkp KSksCisgCQkgIC8qIFNoaWZ0IHZhbCBpbnRvIHBsYWNlLiAgKi8KKyAJCSAg Zm9sZF9idWlsZDIgKExTSElGVF9FWFBSLCB0eXBlLAorIAkJCSAgICAgICAv KiBaZXJvLWV4dGVuZCB2YWwgdG8gdHlwZS4gICovCisgCQkJICAgICAgIGZv bGRfY29udmVydAorIAkJCSAgICAgICAgICh0eXBlLAorIAkJCQkgIGZvbGRf Y29udmVydAorIAkJCQkgICAgKGJ1aWxkX25vbnN0YW5kYXJkX2ludGVnZXJf dHlwZQorIAkJCQkgICAgICAgKGJpdF9zaXplLCAxKSwgdmFsKSksCisgCQkJ ICAgICAgIGJ1aWxkX2ludF9jc3QgKGludGVnZXJfdHlwZV9ub2RlLCBiaXRf b2Zmc2V0KSkpLAorICAgICAgdHJ1ZSwgdGVtLCB0cnVlLCBHU0lfU0FNRV9T VE1UKTsKKyAKKyAgIC8qIE1vZGlmeSB0aGUgb2xkIHN0b3JlLiAgKi8KKyAg IGdpbXBsZV9hc3NpZ25fc2V0X2xocyAoc3RtdCwgdW5zaGFyZV9leHByIChy ZWYpKTsKKyAgIGdpbXBsZV9hc3NpZ25fc2V0X3JoczEgKHN0bXQsIHRlbSk7 CisgfQorIAorIC8qIExvd2VyIGEgYml0ZmllbGQgbG9hZCBhdCAqR1NJLiAg Ki8KKyAKKyBzdGF0aWMgdm9pZAorIGxvd2VyX21lbV9yaHMgKGdpbXBsZV9z dG10X2l0ZXJhdG9yICpnc2kpCisgeworICAgZ2ltcGxlIHN0bXQgPSBnc2lf c3RtdCAoKmdzaSk7CisgICB0cmVlIHJoczsKKyAgIHRyZWUgb2ZmOworICAg dW5zaWduZWQgc2l6ZSwgYml0X3NpemUsIGJpdF9vZmZzZXQ7CisgICBnaW1w bGUgbG9hZDsKKyAgIHRyZWUgdHlwZSwgdGVtLCByZWY7CisgCisgICByaHMg PSBnaW1wbGVfYXNzaWduX3JoczEgKHN0bXQpOworICAgaWYgKCFnZXRfdW5k ZXJseWluZ19vZmZzZXRfYW5kX3NpemUgKHJocywgJm9mZiwgJnNpemUsICZi aXRfb2Zmc2V0LCAmYml0X3NpemUsCisgCQkJCSAgICAgICAmdHlwZSkpCisg ICAgIHJldHVybjsKKyAKKyAgIC8qIEJ1aWxkIGEgTUVNX1JFRiB0cmVlIHRo YXQgY2FuIGJlIHVzZWQgdG8gbG9hZC9zdG9yZSB0aGUgd29yZCB3ZQorICAg ICAgd2FudCB0byBtYW5pcHVsYXRlLgorICAgICAgPz8/ICBHaW1wbGlmeWlu ZyBoZXJlIGF2b2lkcyB1cyB0byBleHBsaWNpdGx5IGhhbmRsZSBhZGRyZXNz LXRha2VuCisgICAgICBzdHVmZiBpbiBjYXNlIHRoZSBhY2Nlc3Mgd2FzIHZh cmlhYmxlLiAgKi8KKyAgIHRlbSA9IGNyZWF0ZV90bXBfcmVnICh0eXBlLCAi QkYiKTsKKyAgIHJlZiA9IGZvbGRfYnVpbGQyIChNRU1fUkVGLCB0eXBlLAor IAkJICAgICBidWlsZF9mb2xkX2FkZHJfZXhwcgorIAkJICAgICAgICh1bnNo YXJlX2V4cHIgKFRSRUVfT1BFUkFORCAocmhzLCAwKSkpLAorIAkJICAgICAv KiBUQkFBIGFuZCBiaXRmaWVsZHMgaXMgdHJpY2t5IC0gdmFyaW91cyBBQklz IHBhY2sKKyAJCSAgICAgICAgZGlmZmVyZW50IHVuZGVybHlpbmcgdHlwZWQg Yml0LWZpZWxkcyB0b2dldGhlci4KKyAJCQlTbyB1c2UgdGhlIHR5cGUgb2Yg dGhlIGJpdC1maWVsZCBjb250YWluZXIgaW5zdGVhZC4gICovCisgCQkgICAg IGZvbGRfY29udmVydCAocmVmZXJlbmNlX2FsaWFzX3B0cl90eXBlIChyaHMp LCBvZmYpKTsKKyAgIHJlZiA9IGZvcmNlX2dpbXBsZV9vcGVyYW5kX2dzaSAo Z3NpLCByZWYsIGZhbHNlLAorIAkJCQkgIE5VTExfVFJFRSwgdHJ1ZSwgR1NJ X1NBTUVfU1RNVCk7CisgCisgICAvKiBMb2FkIHRoZSB3b3JkLiAgKi8KKyAg IGxvYWQgPSBnaW1wbGVfYnVpbGRfYXNzaWduICh0ZW0sIHJlZik7CisgICBn c2lfaW5zZXJ0X2JlZm9yZSAoZ3NpLCBsb2FkLCBHU0lfU0FNRV9TVE1UKTsK KyAKKyAgIC8qIFNoaWZ0IHRoZSB2YWx1ZSBpbnRvIHBsYWNlIGFuZCBwcm9w ZXJseSB6ZXJvLS9zaWduLWV4dGVuZCBpdC4gICovCisgICB0ZW0gPSBmb3Jj ZV9naW1wbGVfb3BlcmFuZF9nc2kKKyAgICAgKGdzaSwKKyAgICAgIGZvbGRf Y29udmVydCAoVFJFRV9UWVBFIChyaHMpLAorIAkJICAgZm9sZF9idWlsZDIg KFJTSElGVF9FWFBSLCB0eXBlLCB0ZW0sCisgCQkJCWJ1aWxkX2ludF9jc3Qg KGludGVnZXJfdHlwZV9ub2RlLCBiaXRfb2Zmc2V0KSkpLAorICAgICAgZmFs c2UsIE5VTExfVFJFRSwgdHJ1ZSwgR1NJX1NBTUVfU1RNVCk7CisgCisgICAv KiBNb2RpZnkgdGhlIG9sZCBsb2FkLiAgKi8KKyAgIGdpbXBsZV9hc3NpZ25f c2V0X3Joc19mcm9tX3RyZWUgKGdzaSwgdGVtKTsKKyB9CisgCisgLyogTG93 ZXIgKHNvbWUpIGJpdGZpZWxkIGFjY2Vzc2VzLiAgKi8KKyAKKyBzdGF0aWMg dW5zaWduZWQgaW50CisgbG93ZXJfbWVtX2V4cHJzICh2b2lkKQorIHsKKyAg IGdpbXBsZV9zZXEgYm9keSA9IGdpbXBsZV9ib2R5IChjdXJyZW50X2Z1bmN0 aW9uX2RlY2wpOworICAgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgZ3NpOworIAor ICAgZm9yIChnc2kgPSBnc2lfc3RhcnQgKGJvZHkpOyAhZ3NpX2VuZF9wIChn c2kpOyBnc2lfbmV4dCAoJmdzaSkpCisgICAgIHsKKyAgICAgICBnaW1wbGUg c3RtdCA9IGdzaV9zdG10IChnc2kpOworICAgICAgIGlmIChnaW1wbGVfYXNz aWduX3NpbmdsZV9wIChzdG10KSkKKyAJeworIAkgIGxvd2VyX21lbV9saHMg KCZnc2kpOworIAkgIGxvd2VyX21lbV9yaHMgKCZnc2kpOworIAl9CisgICAg IH0KKyAKKyAgIHJldHVybiAwOworIH0KKyAKKyBzdHJ1Y3QgZ2ltcGxlX29w dF9wYXNzIHBhc3NfbG93ZXJfbWVtID0KKyB7CisgIHsKKyAgIEdJTVBMRV9Q QVNTLAorICAgIm1lbWxvd2VyIiwJCQkJLyogbmFtZSAqLworICAgTlVMTCwJ CQkJCS8qIGdhdGUgKi8KKyAgIGxvd2VyX21lbV9leHBycywJCQkvKiBleGVj dXRlICovCisgICBOVUxMLAkJCQkJLyogc3ViICovCisgICBOVUxMLAkJCQkJ LyogbmV4dCAqLworICAgMCwJCQkJCS8qIHN0YXRpY19wYXNzX251bWJlciAq LworICAgVFZfTk9ORSwJCQkJLyogdHZfaWQgKi8KKyAgIFBST1BfZ2ltcGxl X2xjZiwJCQkvKiBwcm9wZXJ0aWVzX3JlcXVpcmVkICovCisgICAwLypQUk9Q X2dpbXBsZV9sbWVtKi8sCQkJLyogcHJvcGVydGllc19wcm92aWRlZCAqLwor ICAgMCwJCQkJCS8qIHByb3BlcnRpZXNfZGVzdHJveWVkICovCisgICAwLAkJ CQkJLyogdG9kb19mbGFnc19zdGFydCAqLworICAgVE9ET19kdW1wX2Z1bmMg CQkJLyogdG9kb19mbGFnc19maW5pc2ggKi8KKyAgfQorIH07CkluZGV4OiBn Y2MvcGFzc2VzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoqKiogZ2NjL3Bh c3Nlcy5jLm9yaWcJMjAxMS0wNS0wNiAxMDo0Njo0OC4wMDAwMDAwMDAgKzAy MDAKLS0tIGdjYy9wYXNzZXMuYwkyMDExLTA1LTA2IDEyOjE2OjA3LjAwMDAw MDAwMCArMDIwMAoqKioqKioqKioqKioqKiogaW5pdF9vcHRpbWl6YXRpb25f cGFzc2VzICh2b2lkKQoqKiogNzI3LDczMiAqKioqCi0tLSA3MjcsNzMzIC0t LS0KICAgIE5FWFRfUEFTUyAocGFzc19sb3dlcl9jZik7CiAgICBORVhUX1BB U1MgKHBhc3NfcmVmYWN0b3JfZWgpOwogICAgTkVYVF9QQVNTIChwYXNzX2xv d2VyX2VoKTsKKyAgIE5FWFRfUEFTUyAocGFzc19sb3dlcl9tZW0pOwogICAg TkVYVF9QQVNTIChwYXNzX2J1aWxkX2NmZyk7CiAgICBORVhUX1BBU1MgKHBh c3Nfd2Fybl9mdW5jdGlvbl9yZXR1cm4pOwogICAgTkVYVF9QQVNTIChwYXNz X2J1aWxkX2NncmFwaF9lZGdlcyk7CkluZGV4OiBnY2MvdHJlZS1wYXNzLmgK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQoqKiogZ2NjL3RyZWUtcGFzcy5oLm9y aWcJMjAxMS0wNS0wNiAxMDo0Njo0OC4wMDAwMDAwMDAgKzAyMDAKLS0tIGdj Yy90cmVlLXBhc3MuaAkyMDExLTA1LTA2IDEyOjE2OjA3LjAwMDAwMDAwMCAr MDIwMAoqKioqKioqKioqKioqKiogZXh0ZXJuIHZvaWQgdHJlZV9sb3dlcmlu Z19wYXNzZXMgKHRyZWUgZAoqKiogMzUyLDM1NyAqKioqCi0tLSAzNTIsMzU4 IC0tLS0KICBleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX211 ZGZsYXBfMTsKICBleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNz X211ZGZsYXBfMjsKICBleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBw YXNzX2xvd2VyX2NmOworIGV4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNz IHBhc3NfbG93ZXJfbWVtOwogIGV4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9w YXNzIHBhc3NfcmVmYWN0b3JfZWg7CiAgZXh0ZXJuIHN0cnVjdCBnaW1wbGVf b3B0X3Bhc3MgcGFzc19sb3dlcl9laDsKICBleHRlcm4gc3RydWN0IGdpbXBs ZV9vcHRfcGFzcyBwYXNzX2xvd2VyX2VoX2Rpc3BhdGNoOwpJbmRleDogZ2Nj L2ZvbGQtY29uc3QuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CioqKiBnY2Mv Zm9sZC1jb25zdC5jLm9yaWcJMjAxMS0wNS0wNiAxMDo0Njo0OC4wMDAwMDAw MDAgKzAyMDAKLS0tIGdjYy9mb2xkLWNvbnN0LmMJMjAxMS0wNS0wNiAxMjox NjowNy4wMDAwMDAwMDAgKzAyMDAKKioqKioqKioqKioqKioqIGZvbGRfYmlu YXJ5X2xvYyAobG9jYXRpb25fdCBsb2MsCioqKiAxMjQzMiwxMjQzNyAqKioq Ci0tLSAxMjQzMiwxMjQzOCAtLS0tCiAgICAgICAgLyogSWYgdGhpcyBpcyBh IGNvbXBhcmlzb24gb2YgYSBmaWVsZCwgd2UgbWF5IGJlIGFibGUgdG8gc2lt cGxpZnkgaXQuICAqLwogICAgICAgIGlmICgoVFJFRV9DT0RFIChhcmcwKSA9 PSBDT01QT05FTlRfUkVGCiAgCSAgIHx8IFRSRUVfQ09ERSAoYXJnMCkgPT0g QklUX0ZJRUxEX1JFRikKKyAJICAmJiAwCiAgCSAgLyogSGFuZGxlIHRoZSBj b25zdGFudCBjYXNlIGV2ZW4gd2l0aG91dCAtTwogIAkgICAgIHRvIG1ha2Ug c3VyZSB0aGUgd2FybmluZ3MgYXJlIGdpdmVuLiAgKi8KICAJICAmJiAob3B0 aW1pemUgfHwgVFJFRV9DT0RFIChhcmcxKSA9PSBJTlRFR0VSX0NTVCkpCklu ZGV4OiBnY2MvTWFrZWZpbGUuaW4KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoq KiogZ2NjL01ha2VmaWxlLmluLm9yaWcJMjAxMS0wNS0wNiAxMDo0Njo0OC4w MDAwMDAwMDAgKzAyMDAKLS0tIGdjYy9NYWtlZmlsZS5pbgkyMDExLTA1LTA2 IDEyOjE2OjA3LjAwMDAwMDAwMCArMDIwMAoqKioqKioqKioqKioqKiogZ2lt cGxlLWxvdy5vIDogZ2ltcGxlLWxvdy5jICQoQ09ORklHX0gpCioqKiAyNjY5 LDI2NzUgKioqKgogICAgICQoRElBR05PU1RJQ19IKSAkKEdJTVBMRV9IKSAk KFRSRUVfSU5MSU5FX0gpIGxhbmdob29rcy5oIFwKICAgICAkKExBTkdIT09L U19ERUZfSCkgJChUUkVFX0ZMT1dfSCkgJChUSU1FVkFSX0gpICQoVE1fSCkg Y29yZXR5cGVzLmggXAogICAgICQoRVhDRVBUX0gpICQoRkxBR1NfSCkgJChS VExfSCkgJChGVU5DVElPTl9IKSAkKEVYUFJfSCkgJChUUkVFX1BBU1NfSCkg XAohICAgICQoSEFTSFRBQl9IKSAkKERJQUdOT1NUSUNfQ09SRV9IKSB0cmVl LWl0ZXJhdG9yLmgKICBvbXAtbG93Lm8gOiBvbXAtbG93LmMgJChDT05GSUdf SCkgJChTWVNURU1fSCkgY29yZXR5cGVzLmggJChUTV9IKSAkKFRSRUVfSCkg XAogICAgICQoUlRMX0gpICQoR0lNUExFX0gpICQoVFJFRV9JTkxJTkVfSCkg bGFuZ2hvb2tzLmggJChESUFHTk9TVElDX0NPUkVfSCkgXAogICAgICQoVFJF RV9GTE9XX0gpICQoVElNRVZBUl9IKSAkKEZMQUdTX0gpICQoRVhQUl9IKSAk KERJQUdOT1NUSUNfQ09SRV9IKSBcCi0tLSAyNjY5LDI2NzUgLS0tLQogICAg ICQoRElBR05PU1RJQ19IKSAkKEdJTVBMRV9IKSAkKFRSRUVfSU5MSU5FX0gp IGxhbmdob29rcy5oIFwKICAgICAkKExBTkdIT09LU19ERUZfSCkgJChUUkVF X0ZMT1dfSCkgJChUSU1FVkFSX0gpICQoVE1fSCkgY29yZXR5cGVzLmggXAog ICAgICQoRVhDRVBUX0gpICQoRkxBR1NfSCkgJChSVExfSCkgJChGVU5DVElP Tl9IKSAkKEVYUFJfSCkgJChUUkVFX1BBU1NfSCkgXAohICAgICQoSEFTSFRB Ql9IKSAkKERJQUdOT1NUSUNfQ09SRV9IKSB0cmVlLWl0ZXJhdG9yLmggdHJl ZS1wcmV0dHktcHJpbnQuaAogIG9tcC1sb3cubyA6IG9tcC1sb3cuYyAkKENP TkZJR19IKSAkKFNZU1RFTV9IKSBjb3JldHlwZXMuaCAkKFRNX0gpICQoVFJF RV9IKSBcCiAgICAgJChSVExfSCkgJChHSU1QTEVfSCkgJChUUkVFX0lOTElO RV9IKSBsYW5naG9va3MuaCAkKERJQUdOT1NUSUNfQ09SRV9IKSBcCiAgICAg JChUUkVFX0ZMT1dfSCkgJChUSU1FVkFSX0gpICQoRkxBR1NfSCkgJChFWFBS X0gpICQoRElBR05PU1RJQ19DT1JFX0gpIFwKSW5kZXg6IGdjYy9leHByLmMK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQoqKiogZ2NjL2V4cHIuYy5vcmlnCTIw MTEtMDUtMDYgMTA6NDY6NDguMDAwMDAwMDAwICswMjAwCi0tLSBnY2MvZXhw ci5jCTIwMTEtMDUtMDYgMTI6MTY6MDcuMDAwMDAwMDAwICswMjAwCioqKioq KioqKioqKioqKiBleHBhbmRfZXhwcl9yZWFsXzIgKHNlcG9wcyBvcHMsIHJ0 eCB0YXJnCioqKiA3MjY0LDcyNzAgKioqKgogICAgLyogQW4gb3BlcmF0aW9u IGluIHdoYXQgbWF5IGJlIGEgYml0LWZpZWxkIHR5cGUgbmVlZHMgdGhlCiAg ICAgICByZXN1bHQgdG8gYmUgcmVkdWNlZCB0byB0aGUgcHJlY2lzaW9uIG9m IHRoZSBiaXQtZmllbGQgdHlwZSwKICAgICAgIHdoaWNoIGlzIG5hcnJvd2Vy IHRoYW4gdGhhdCBvZiB0aGUgdHlwZSdzIG1vZGUuICAqLwohICAgcmVkdWNl X2JpdF9maWVsZCA9IChUUkVFX0NPREUgKHR5cGUpID09IElOVEVHRVJfVFlQ RQogIAkJICAgICAgJiYgR0VUX01PREVfUFJFQ0lTSU9OIChtb2RlKSA+IFRZ UEVfUFJFQ0lTSU9OICh0eXBlKSk7CiAgCiAgICBpZiAocmVkdWNlX2JpdF9m aWVsZCAmJiBtb2RpZmllciA9PSBFWFBBTkRfU1RBQ0tfUEFSTSkKLS0tIDcy NjQsNzI3MCAtLS0tCiAgICAvKiBBbiBvcGVyYXRpb24gaW4gd2hhdCBtYXkg YmUgYSBiaXQtZmllbGQgdHlwZSBuZWVkcyB0aGUKICAgICAgIHJlc3VsdCB0 byBiZSByZWR1Y2VkIHRvIHRoZSBwcmVjaXNpb24gb2YgdGhlIGJpdC1maWVs ZCB0eXBlLAogICAgICAgd2hpY2ggaXMgbmFycm93ZXIgdGhhbiB0aGF0IG9m IHRoZSB0eXBlJ3MgbW9kZS4gICovCiEgICByZWR1Y2VfYml0X2ZpZWxkID0g KElOVEVHUkFMX1RZUEVfUCAodHlwZSkKICAJCSAgICAgICYmIEdFVF9NT0RF X1BSRUNJU0lPTiAobW9kZSkgPiBUWVBFX1BSRUNJU0lPTiAodHlwZSkpOwog IAogICAgaWYgKHJlZHVjZV9iaXRfZmllbGQgJiYgbW9kaWZpZXIgPT0gRVhQ QU5EX1NUQUNLX1BBUk0pCioqKioqKioqKioqKioqKiBleHBhbmRfZXhwcl9y ZWFsXzEgKHRyZWUgZXhwLCBydHggdGFyZ2V0CioqKiA4MzMwLDgzMzYgKioq KgogICAgICAgcmVzdWx0IHRvIGJlIHJlZHVjZWQgdG8gdGhlIHByZWNpc2lv biBvZiB0aGUgYml0LWZpZWxkIHR5cGUsCiAgICAgICB3aGljaCBpcyBuYXJy b3dlciB0aGFuIHRoYXQgb2YgdGhlIHR5cGUncyBtb2RlLiAgKi8KICAgIHJl ZHVjZV9iaXRfZmllbGQgPSAoIWlnbm9yZQohIAkJICAgICAgJiYgVFJFRV9D T0RFICh0eXBlKSA9PSBJTlRFR0VSX1RZUEUKICAJCSAgICAgICYmIEdFVF9N T0RFX1BSRUNJU0lPTiAobW9kZSkgPiBUWVBFX1BSRUNJU0lPTiAodHlwZSkp OwogIAogICAgLyogSWYgd2UgYXJlIGdvaW5nIHRvIGlnbm9yZSB0aGlzIHJl c3VsdCwgd2UgbmVlZCBvbmx5IGRvIHNvbWV0aGluZwotLS0gODMzMCw4MzM2 IC0tLS0KICAgICAgIHJlc3VsdCB0byBiZSByZWR1Y2VkIHRvIHRoZSBwcmVj aXNpb24gb2YgdGhlIGJpdC1maWVsZCB0eXBlLAogICAgICAgd2hpY2ggaXMg bmFycm93ZXIgdGhhbiB0aGF0IG9mIHRoZSB0eXBlJ3MgbW9kZS4gICovCiAg ICByZWR1Y2VfYml0X2ZpZWxkID0gKCFpZ25vcmUKISAJCSAgICAgICYmIElO VEVHUkFMX1RZUEVfUCAodHlwZSkKICAJCSAgICAgICYmIEdFVF9NT0RFX1BS RUNJU0lPTiAobW9kZSkgPiBUWVBFX1BSRUNJU0lPTiAodHlwZSkpOwogIAog ICAgLyogSWYgd2UgYXJlIGdvaW5nIHRvIGlnbm9yZSB0aGlzIHJlc3VsdCwg d2UgbmVlZCBvbmx5IGRvIHNvbWV0aGluZwpJbmRleDogZ2NjL2dpbXBsZS5j Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKioqIGdjYy9naW1wbGUuYy5vcmln CTIwMTEtMDQtMjEgMTY6MzM6NTUuMDAwMDAwMDAwICswMjAwCi0tLSBnY2Mv Z2ltcGxlLmMJMjAxMS0wNS0wNiAxNDoxNDowMS4wMDAwMDAwMDAgKzAyMDAK KioqKioqKioqKioqKioqIGNhbm9uaWNhbGl6ZV9jb25kX2V4cHJfY29uZCAo dHJlZSB0KQoqKiogMzEzNywzMTUyICoqKioKICAgICAgICAmJiB0cnV0aF92 YWx1ZV9wIChUUkVFX0NPREUgKFRSRUVfT1BFUkFORCAodCwgMCkpKSkKICAg ICAgdCA9IFRSRUVfT1BFUkFORCAodCwgMCk7CiAgCi0gICAvKiBGb3IgKGJv b2wpeCB1c2UgeCAhPSAwLiAgKi8KLSAgIGlmIChDT05WRVJUX0VYUFJfUCAo dCkKLSAgICAgICAmJiBUUkVFX0NPREUgKFRSRUVfVFlQRSAodCkpID09IEJP T0xFQU5fVFlQRSkKLSAgICAgewotICAgICAgIHRyZWUgdG9wMCA9IFRSRUVf T1BFUkFORCAodCwgMCk7Ci0gICAgICAgdCA9IGJ1aWxkMiAoTkVfRVhQUiwg VFJFRV9UWVBFICh0KSwKLSAJCSAgdG9wMCwgYnVpbGRfaW50X2NzdCAoVFJF RV9UWVBFICh0b3AwKSwgMCkpOwotICAgICB9CiAgICAvKiBGb3IgIXggdXNl IHggPT0gMC4gICovCiEgICBlbHNlIGlmIChUUkVFX0NPREUgKHQpID09IFRS VVRIX05PVF9FWFBSKQogICAgICB7CiAgICAgICAgdHJlZSB0b3AwID0gVFJF RV9PUEVSQU5EICh0LCAwKTsKICAgICAgICB0ID0gYnVpbGQyIChFUV9FWFBS LCBUUkVFX1RZUEUgKHQpLAotLS0gMzEzNywzMTQ0IC0tLS0KICAgICAgICAm JiB0cnV0aF92YWx1ZV9wIChUUkVFX0NPREUgKFRSRUVfT1BFUkFORCAodCwg MCkpKSkKICAgICAgdCA9IFRSRUVfT1BFUkFORCAodCwgMCk7CiAgCiAgICAv KiBGb3IgIXggdXNlIHggPT0gMC4gICovCiEgICBpZiAoVFJFRV9DT0RFICh0 KSA9PSBUUlVUSF9OT1RfRVhQUikKICAgICAgewogICAgICAgIHRyZWUgdG9w MCA9IFRSRUVfT1BFUkFORCAodCwgMCk7CiAgICAgICAgdCA9IGJ1aWxkMiAo RVFfRVhQUiwgVFJFRV9UWVBFICh0KSwKSW5kZXg6IGdjYy90ZXN0c3VpdGUv Z2NjLmRnL3RyZWUtc3NhL3ByNDUxNDQuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CioqKiBnY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9wcjQ1MTQ0 LmMub3JpZwkyMDExLTA0LTIwIDEwOjUyOjE2LjAwMDAwMDAwMCArMDIwMAot LS0gZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvcHI0NTE0NC5jCTIw MTEtMDUtMDYgMTM6NTE6MjkuMDAwMDAwMDAwICswMjAwCioqKioqKioqKioq KioqKiB1bmlvbiBUTVAKKioqIDIyLDQ3ICoqKioKICBzdGF0aWMgdW5zaWdu ZWQKICBmb28gKHN0cnVjdCBBICpwKQogIHsKISAgIHVuaW9uIFRNUCB0Owoh ICAgc3RydWN0IEEgeDsKICAgIAohICAgeCA9ICpwOwohICAgdC5hID0geDsK ISAgIHJldHVybiB0LmI7CiAgfQogIAogIHZvaWQKICBiYXIgKHVuc2lnbmVk IG9yaWcsIHVuc2lnbmVkICpuZXcpCiAgewohICAgc3RydWN0IEEgYTsKISAg IHVuaW9uIFRNUCBzOwogIAohICAgcy5iID0gb3JpZzsKISAgIGEgPSBzLmE7 CiEgICBpZiAoYS5hMSkKISAgICAgYmF6IChhLmEyKTsKISAgICpuZXcgPSBm b28gKCZhKTsKICB9CiAgCiEgLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1k dW1wICIgPSBWSUVXX0NPTlZFUlRfRVhQUjx1bnNpZ25lZCBpbnQ+XFwoYVxc KTsiICJvcHRpbWl6ZWQifSB9ICovCiAgLyogeyBkZy1maW5hbCB7IGNsZWFu dXAtdHJlZS1kdW1wICJvcHRpbWl6ZWQiIH0gfSAqLwotLS0gMjIsNDggLS0t LQogIHN0YXRpYyB1bnNpZ25lZAogIGZvbyAoc3RydWN0IEEgKnApCiAgewoh ICAgdW5pb24gVE1QIHRtcHZhcjsKISAgIHN0cnVjdCBBIGF2YXI7CiAgICAK ISAgIGF2YXIgPSAqcDsKISAgIHRtcHZhci5hID0gYXZhcjsKISAgIHJldHVy biB0bXB2YXIuYjsKICB9CiAgCiAgdm9pZAogIGJhciAodW5zaWduZWQgb3Jp ZywgdW5zaWduZWQgKm5ldykKICB7CiEgICBzdHJ1Y3QgQSBhdmFyOwohICAg dW5pb24gVE1QIHRtcHZhcjsKICAKISAgIHRtcHZhci5iID0gb3JpZzsKISAg IGF2YXIgPSB0bXB2YXIuYTsKISAgIGlmIChhdmFyLmExKQohICAgICBiYXog KGF2YXIuYTIpOwohICAgKm5ldyA9IGZvbyAoJmF2YXIpOwogIH0KICAKISAv KiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtbm90ICJhdmFyIiAib3B0 aW1pemVkIn0gfSAqLwohIC8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVt cC1ub3QgInRtcHZhciIgIm9wdGltaXplZCJ9IH0gKi8KICAvKiB7IGRnLWZp bmFsIHsgY2xlYW51cC10cmVlLWR1bXAgIm9wdGltaXplZCIgfSB9ICovCklu ZGV4OiBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9iaXRmaWVsZDQu Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CioqKiAvZGV2L251bGwJMTk3MC0w MS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKLS0tIGdjYy90ZXN0c3Vp dGUvZ2NjLnRhcmdldC9pMzg2L2JpdGZpZWxkNC5jCTIwMTEtMDUtMDYgMTU6 MDc6NDEuMDAwMDAwMDAwICswMjAwCioqKioqKioqKioqKioqKgoqKiogMCAq KioqCi0tLSAxLDE5IC0tLS0KKyAvKiBQUjQ4Njk2ICovCisgLyogeyBkZy1k byBjb21waWxlIH0gKi8KKyAvKiB7IGRnLW9wdGlvbnMgIi1PIiB9ICovCisg Cisgc3RydWN0IGJhZF9nY2NfY29kZV9nZW5lcmF0aW9uIHsKKyAgICAgdW5z aWduZWQgdHlwZTo2LAorIAkgICAgIHBvczoxNiwKKyAJICAgICBzdHJlYW06 MTA7CisgfTsKKyAKKyBpbnQKKyBzaG93X2J1ZyhzdHJ1Y3QgYmFkX2djY19j b2RlX2dlbmVyYXRpb24gKmEpCisgeworICAgLyogQXZvaWQgc3RvcmUtZm9y d2FyZGluZyBmYWlsdXJlIGR1ZSB0byBhY2Nlc3Mgc2l6ZSBtaXNtYXRjaC4g ICovCisgICBhLT50eXBlID0gMDsKKyAgIHJldHVybiBhLT5wb3M7CisgfQor IAorIC8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgImFuZGIi IH0gfSAqLwpJbmRleDogZ2NjL3RyZWUtc3NhLWZvcndwcm9wLmMKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQoqKiogZ2NjL3RyZWUtc3NhLWZvcndwcm9wLmMu b3JpZwkyMDExLTA1LTA0IDExOjA3OjA4LjAwMDAwMDAwMCArMDIwMAotLS0g Z2NjL3RyZWUtc3NhLWZvcndwcm9wLmMJMjAxMS0wNS0wNiAxNzowMDo0NC4w MDAwMDAwMDAgKzAyMDAKKioqKioqKioqKioqKioqIG91dDoKKioqIDE5Mzgs MTk0MyAqKioqCi0tLSAxOTM4LDIxMDMgLS0tLQogICAgcmV0dXJuIGZhbHNl OwogIH0KICAKKyAvKiBDb21iaW5lIHR3byBjb252ZXJzaW9ucyBpbiBhIHJv dyBmb3IgdGhlIHNlY29uZCBjb252ZXJzaW9uIGF0ICpHU0kuCisgICAgUmV0 dXJucyB0cnVlIGlmIHRoZXJlIHdlcmUgYW55IGNoYW5nZXMgbWFkZS4gICov CisgIAorIHN0YXRpYyBib29sCisgY29tYmluZV9jb252ZXJzaW9ucyAoZ2lt cGxlX3N0bXRfaXRlcmF0b3IgKmdzaSkKKyB7CisgICBnaW1wbGUgc3RtdCA9 IGdzaV9zdG10ICgqZ3NpKTsKKyAgIGdpbXBsZSBkZWZfc3RtdDsKKyAgIHRy ZWUgb3AwLCBsaHM7CisgICBlbnVtIHRyZWVfY29kZSBjb2RlID0gZ2ltcGxl X2Fzc2lnbl9yaHNfY29kZSAoc3RtdCk7CisgCisgICBnY2NfY2hlY2tpbmdf YXNzZXJ0IChDT05WRVJUX0VYUFJfQ09ERV9QIChjb2RlKQorIAkJICAgICAg IHx8IGNvZGUgPT0gRkxPQVRfRVhQUgorIAkJICAgICAgIHx8IGNvZGUgPT0g RklYX1RSVU5DX0VYUFIpOworIAorICAgbGhzID0gZ2ltcGxlX2Fzc2lnbl9s aHMgKHN0bXQpOworICAgb3AwID0gZ2ltcGxlX2Fzc2lnbl9yaHMxIChzdG10 KTsKKyAgIGlmICh1c2VsZXNzX3R5cGVfY29udmVyc2lvbl9wIChUUkVFX1RZ UEUgKGxocyksIFRSRUVfVFlQRSAob3AwKSkpCisgICAgIHsKKyAgICAgICBn aW1wbGVfYXNzaWduX3NldF9yaHNfY29kZSAoc3RtdCwgVFJFRV9DT0RFIChv cDApKTsKKyAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgfQorIAorICAgaWYg KFRSRUVfQ09ERSAob3AwKSAhPSBTU0FfTkFNRSkKKyAgICAgcmV0dXJuIGZh bHNlOworIAorICAgZGVmX3N0bXQgPSBTU0FfTkFNRV9ERUZfU1RNVCAob3Aw KTsKKyAgIGlmICghaXNfZ2ltcGxlX2Fzc2lnbiAoZGVmX3N0bXQpKQorICAg ICByZXR1cm4gZmFsc2U7CisgCisgICBpZiAoQ09OVkVSVF9FWFBSX0NPREVf UCAoZ2ltcGxlX2Fzc2lnbl9yaHNfY29kZSAoZGVmX3N0bXQpKSkKKyAgICAg eworICAgICAgIHRyZWUgZGVmb3AwID0gZ2ltcGxlX2Fzc2lnbl9yaHMxIChk ZWZfc3RtdCk7CisgICAgICAgdHJlZSB0eXBlID0gVFJFRV9UWVBFIChsaHMp OworICAgICAgIHRyZWUgaW5zaWRlX3R5cGUgPSBUUkVFX1RZUEUgKGRlZm9w MCk7CisgICAgICAgdHJlZSBpbnRlcl90eXBlID0gVFJFRV9UWVBFIChvcDAp OworICAgICAgIGludCBpbnNpZGVfaW50ID0gSU5URUdSQUxfVFlQRV9QIChp bnNpZGVfdHlwZSk7CisgICAgICAgaW50IGluc2lkZV9wdHIgPSBQT0lOVEVS X1RZUEVfUCAoaW5zaWRlX3R5cGUpOworICAgICAgIGludCBpbnNpZGVfZmxv YXQgPSBGTE9BVF9UWVBFX1AgKGluc2lkZV90eXBlKTsKKyAgICAgICBpbnQg aW5zaWRlX3ZlYyA9IFRSRUVfQ09ERSAoaW5zaWRlX3R5cGUpID09IFZFQ1RP Ul9UWVBFOworICAgICAgIHVuc2lnbmVkIGludCBpbnNpZGVfcHJlYyA9IFRZ UEVfUFJFQ0lTSU9OIChpbnNpZGVfdHlwZSk7CisgICAgICAgaW50IGluc2lk ZV91bnNpZ25lZHAgPSBUWVBFX1VOU0lHTkVEIChpbnNpZGVfdHlwZSk7Cisg ICAgICAgaW50IGludGVyX2ludCA9IElOVEVHUkFMX1RZUEVfUCAoaW50ZXJf dHlwZSk7CisgICAgICAgaW50IGludGVyX3B0ciA9IFBPSU5URVJfVFlQRV9Q IChpbnRlcl90eXBlKTsKKyAgICAgICBpbnQgaW50ZXJfZmxvYXQgPSBGTE9B VF9UWVBFX1AgKGludGVyX3R5cGUpOworICAgICAgIGludCBpbnRlcl92ZWMg PSBUUkVFX0NPREUgKGludGVyX3R5cGUpID09IFZFQ1RPUl9UWVBFOworICAg ICAgIHVuc2lnbmVkIGludCBpbnRlcl9wcmVjID0gVFlQRV9QUkVDSVNJT04g KGludGVyX3R5cGUpOworICAgICAgIGludCBpbnRlcl91bnNpZ25lZHAgPSBU WVBFX1VOU0lHTkVEIChpbnRlcl90eXBlKTsKKyAgICAgICBpbnQgZmluYWxf aW50ID0gSU5URUdSQUxfVFlQRV9QICh0eXBlKTsKKyAgICAgICBpbnQgZmlu YWxfcHRyID0gUE9JTlRFUl9UWVBFX1AgKHR5cGUpOworICAgICAgIGludCBm aW5hbF9mbG9hdCA9IEZMT0FUX1RZUEVfUCAodHlwZSk7CisgICAgICAgaW50 IGZpbmFsX3ZlYyA9IFRSRUVfQ09ERSAodHlwZSkgPT0gVkVDVE9SX1RZUEU7 CisgICAgICAgdW5zaWduZWQgaW50IGZpbmFsX3ByZWMgPSBUWVBFX1BSRUNJ U0lPTiAodHlwZSk7CisgICAgICAgaW50IGZpbmFsX3Vuc2lnbmVkcCA9IFRZ UEVfVU5TSUdORUQgKHR5cGUpOworIAorICAgICAgIC8qIEluIGFkZGl0aW9u IHRvIHRoZSBjYXNlcyBvZiB0d28gY29udmVyc2lvbnMgaW4gYSByb3cKKyAJ IGhhbmRsZWQgYmVsb3csIGlmIHdlIGFyZSBjb252ZXJ0aW5nIHNvbWV0aGlu ZyB0byBpdHMgb3duCisgCSB0eXBlIHZpYSBhbiBvYmplY3Qgb2YgaWRlbnRp Y2FsIG9yIHdpZGVyIHByZWNpc2lvbiwgbmVpdGhlcgorIAkgY29udmVyc2lv biBpcyBuZWVkZWQuICAqLworICAgICAgIGlmICh1c2VsZXNzX3R5cGVfY29u dmVyc2lvbl9wICh0eXBlLCBpbnNpZGVfdHlwZSkKKyAJICAmJiAoKChpbnRl cl9pbnQgfHwgaW50ZXJfcHRyKSAmJiBmaW5hbF9pbnQpCisgCSAgICAgIHx8 IChpbnRlcl9mbG9hdCAmJiBmaW5hbF9mbG9hdCkpCisgCSAgJiYgaW50ZXJf cHJlYyA+PSBmaW5hbF9wcmVjKQorIAl7CisgCSAgZ2ltcGxlX2Fzc2lnbl9z ZXRfcmhzMSAoc3RtdCwgdW5zaGFyZV9leHByIChkZWZvcDApKTsKKyAJICBn aW1wbGVfYXNzaWduX3NldF9yaHNfY29kZSAoc3RtdCwgVFJFRV9DT0RFIChk ZWZvcDApKTsKKyAJICB1cGRhdGVfc3RtdCAoc3RtdCk7CisgCSAgcmV0dXJu IHRydWU7CisgCX0KKyAKKyAgICAgICAvKiBMaWtld2lzZSwgaWYgdGhlIGlu dGVybWVkaWF0ZSBhbmQgaW5pdGlhbCB0eXBlcyBhcmUgZWl0aGVyIGJvdGgK KyAJIGZsb2F0IG9yIGJvdGggaW50ZWdlciwgd2UgZG9uJ3QgbmVlZCB0aGUg bWlkZGxlIGNvbnZlcnNpb24gaWYgdGhlCisgCSBmb3JtZXIgaXMgd2lkZXIg dGhhbiB0aGUgbGF0dGVyIGFuZCBkb2Vzbid0IGNoYW5nZSB0aGUgc2lnbmVk bmVzcworIAkgKGZvciBpbnRlZ2VycykuICBBdm9pZCB0aGlzIGlmIHRoZSBm aW5hbCB0eXBlIGlzIGEgcG9pbnRlciBzaW5jZQorIAkgdGhlbiB3ZSBzb21l dGltZXMgbmVlZCB0aGUgbWlkZGxlIGNvbnZlcnNpb24uICBMaWtld2lzZSBp ZiB0aGUKKyAJIGZpbmFsIHR5cGUgaGFzIGEgcHJlY2lzaW9uIG5vdCBlcXVh bCB0byB0aGUgc2l6ZSBvZiBpdHMgbW9kZS4gICovCisgICAgICAgaWYgKCgo aW50ZXJfaW50ICYmIGluc2lkZV9pbnQpCisgCSAgIHx8IChpbnRlcl9mbG9h dCAmJiBpbnNpZGVfZmxvYXQpCisgCSAgIHx8IChpbnRlcl92ZWMgJiYgaW5z aWRlX3ZlYykpCisgCSAgJiYgaW50ZXJfcHJlYyA+PSBpbnNpZGVfcHJlYwor IAkgICYmIChpbnRlcl9mbG9hdCB8fCBpbnRlcl92ZWMKKyAJICAgICAgfHwg aW50ZXJfdW5zaWduZWRwID09IGluc2lkZV91bnNpZ25lZHApCisgCSAgJiYg ISAoZmluYWxfcHJlYyAhPSBHRVRfTU9ERV9CSVRTSVpFIChUWVBFX01PREUg KHR5cGUpKQorIAkJJiYgVFlQRV9NT0RFICh0eXBlKSA9PSBUWVBFX01PREUg KGludGVyX3R5cGUpKQorIAkgICYmICEgZmluYWxfcHRyCisgCSAgJiYgKCEg ZmluYWxfdmVjIHx8IGludGVyX3ByZWMgPT0gaW5zaWRlX3ByZWMpKQorIAl7 CisgCSAgZ2ltcGxlX2Fzc2lnbl9zZXRfcmhzMSAoc3RtdCwgZGVmb3AwKTsK KyAJICB1cGRhdGVfc3RtdCAoc3RtdCk7CisgCSAgcmV0dXJuIHRydWU7Cisg CX0KKyAKKyAgICAgICAvKiBJZiB3ZSBoYXZlIGEgc2lnbi1leHRlbnNpb24g b2YgYSB6ZXJvLWV4dGVuZGVkIHZhbHVlLCB3ZSBjYW4KKyAJIHJlcGxhY2Ug dGhhdCBieSBhIHNpbmdsZSB6ZXJvLWV4dGVuc2lvbi4gICovCisgICAgICAg aWYgKGluc2lkZV9pbnQgJiYgaW50ZXJfaW50ICYmIGZpbmFsX2ludAorIAkg ICYmIGluc2lkZV9wcmVjIDwgaW50ZXJfcHJlYyAmJiBpbnRlcl9wcmVjIDwg ZmluYWxfcHJlYworIAkgICYmIGluc2lkZV91bnNpZ25lZHAgJiYgIWludGVy X3Vuc2lnbmVkcCkKKyAJeworIAkgIGdpbXBsZV9hc3NpZ25fc2V0X3JoczEg KHN0bXQsIGRlZm9wMCk7CisgCSAgdXBkYXRlX3N0bXQgKHN0bXQpOworIAkg IHJldHVybiB0cnVlOworIAl9CisgCisgICAgICAgLyogVHdvIGNvbnZlcnNp b25zIGluIGEgcm93IGFyZSBub3QgbmVlZGVkIHVubGVzczoKKyAJIC0gc29t ZSBjb252ZXJzaW9uIGlzIGZsb2F0aW5nLXBvaW50IChvdmVyc3RyaWN0IGZv ciBub3cpLCBvcgorIAkgLSBzb21lIGNvbnZlcnNpb24gaXMgYSB2ZWN0b3Ig KG92ZXJzdHJpY3QgZm9yIG5vdyksIG9yCisgCSAtIHRoZSBpbnRlcm1lZGlh dGUgdHlwZSBpcyBuYXJyb3dlciB0aGFuIGJvdGggaW5pdGlhbCBhbmQKKyAJ IGZpbmFsLCBvcgorIAkgLSB0aGUgaW50ZXJtZWRpYXRlIHR5cGUgYW5kIGlu bmVybW9zdCB0eXBlIGRpZmZlciBpbiBzaWduZWRuZXNzLAorIAkgYW5kIHRo ZSBvdXRlcm1vc3QgdHlwZSBpcyB3aWRlciB0aGFuIHRoZSBpbnRlcm1lZGlh dGUsIG9yCisgCSAtIHRoZSBpbml0aWFsIHR5cGUgaXMgYSBwb2ludGVyIHR5 cGUgYW5kIHRoZSBwcmVjaXNpb25zIG9mIHRoZQorIAkgaW50ZXJtZWRpYXRl IGFuZCBmaW5hbCB0eXBlcyBkaWZmZXIsIG9yCisgCSAtIHRoZSBmaW5hbCB0 eXBlIGlzIGEgcG9pbnRlciB0eXBlIGFuZCB0aGUgcHJlY2lzaW9ucyBvZiB0 aGUKKyAJIGluaXRpYWwgYW5kIGludGVybWVkaWF0ZSB0eXBlcyBkaWZmZXIu ICAqLworICAgICAgIGlmICghIGluc2lkZV9mbG9hdCAmJiAhIGludGVyX2Zs b2F0ICYmICEgZmluYWxfZmxvYXQKKyAJICAmJiAhIGluc2lkZV92ZWMgJiYg ISBpbnRlcl92ZWMgJiYgISBmaW5hbF92ZWMKKyAJICAmJiAoaW50ZXJfcHJl YyA+PSBpbnNpZGVfcHJlYyB8fCBpbnRlcl9wcmVjID49IGZpbmFsX3ByZWMp CisgCSAgJiYgISAoaW5zaWRlX2ludCAmJiBpbnRlcl9pbnQKKyAJCSYmIGlu dGVyX3Vuc2lnbmVkcCAhPSBpbnNpZGVfdW5zaWduZWRwCisgCQkmJiBpbnRl cl9wcmVjIDwgZmluYWxfcHJlYykKKyAJICAmJiAoKGludGVyX3Vuc2lnbmVk cCAmJiBpbnRlcl9wcmVjID4gaW5zaWRlX3ByZWMpCisgCSAgICAgID09IChm aW5hbF91bnNpZ25lZHAgJiYgZmluYWxfcHJlYyA+IGludGVyX3ByZWMpKQor IAkgICYmICEgKGluc2lkZV9wdHIgJiYgaW50ZXJfcHJlYyAhPSBmaW5hbF9w cmVjKQorIAkgICYmICEgKGZpbmFsX3B0ciAmJiBpbnNpZGVfcHJlYyAhPSBp bnRlcl9wcmVjKQorIAkgICYmICEgKGZpbmFsX3ByZWMgIT0gR0VUX01PREVf QklUU0laRSAoVFlQRV9NT0RFICh0eXBlKSkKKyAJCSYmIFRZUEVfTU9ERSAo dHlwZSkgPT0gVFlQRV9NT0RFIChpbnRlcl90eXBlKSkpCisgCXsKKyAJICBn aW1wbGVfYXNzaWduX3NldF9yaHMxIChzdG10LCBkZWZvcDApOworIAkgIHVw ZGF0ZV9zdG10IChzdG10KTsKKyAJICByZXR1cm4gdHJ1ZTsKKyAJfQorIAor ICAgICAgIC8qIEEgdHJ1bmNhdGlvbiB0byBhbiB1bnNpZ25lZCB0eXBlIHNo b3VsZCBiZSBjYW5vbmljYWxpemVkIGFzCisgCSBiaXR3aXNlIGFuZCBvZiBh IG1hc2suICAqLworICAgICAgIGlmIChmaW5hbF9pbnQgJiYgaW50ZXJfaW50 ICYmIGluc2lkZV9pbnQKKyAJICAmJiBmaW5hbF9wcmVjID09IGluc2lkZV9w cmVjCisgCSAgJiYgZmluYWxfcHJlYyA+IGludGVyX3ByZWMKKyAJICAmJiBp bnRlcl91bnNpZ25lZHApCisgCXsKKyAJICB0cmVlIHRlbTsKKyAJICB0ZW0g PSBmb2xkX2J1aWxkMiAoQklUX0FORF9FWFBSLCBpbnNpZGVfdHlwZSwKKyAJ CQkgICAgIGRlZm9wMCwKKyAJCQkgICAgIGRvdWJsZV9pbnRfdG9fdHJlZQor IAkJCSAgICAgICAoaW5zaWRlX3R5cGUsIGRvdWJsZV9pbnRfbWFzayAoaW50 ZXJfcHJlYykpKTsKKyAJICBpZiAoIXVzZWxlc3NfdHlwZV9jb252ZXJzaW9u X3AgKHR5cGUsIGluc2lkZV90eXBlKSkKKyAJICAgIHsKKyAJICAgICAgdGVt ID0gZm9yY2VfZ2ltcGxlX29wZXJhbmRfZ3NpIChnc2ksIHRlbSwgdHJ1ZSwg TlVMTF9UUkVFLCB0cnVlLAorIAkJCQkJICAgICAgR1NJX1NBTUVfU1RNVCk7 CisgCSAgICAgIGdpbXBsZV9hc3NpZ25fc2V0X3JoczEgKHN0bXQsIHRlbSk7 CisgCSAgICB9CisgCSAgZWxzZQorIAkgICAgZ2ltcGxlX2Fzc2lnbl9zZXRf cmhzX2Zyb21fdHJlZSAoZ3NpLCB0ZW0pOworIAkgIHVwZGF0ZV9zdG10IChn c2lfc3RtdCAoKmdzaSkpOworIAkgIHJldHVybiB0cnVlOworIAl9CisgICAg IH0KKyAKKyAgIHJldHVybiBmYWxzZTsKKyB9CisgCiAgLyogTWFpbiBlbnRy eSBwb2ludCBmb3IgdGhlIGZvcndhcmQgcHJvcGFnYXRpb24gb3B0aW1pemVy LiAgKi8KICAKICBzdGF0aWMgdW5zaWduZWQgaW50CioqKioqKioqKioqKioq KiB0cmVlX3NzYV9mb3J3YXJkX3Byb3BhZ2F0ZV9zaW5nbGVfdXNlX3ZhCioq KiAyMDYxLDIwNjYgKioqKgotLS0gMjIyMSwyMjMzIC0tLS0KICAJCSAgY2Zn X2NoYW5nZWQgfD0gYXNzb2NpYXRlX3BsdXNtaW51cyAoc3RtdCk7CiAgCQkg IGdzaV9uZXh0ICgmZ3NpKTsKICAJCX0KKyAJICAgICAgZWxzZSBpZiAoQ09O VkVSVF9FWFBSX0NPREVfUCAoZ2ltcGxlX2Fzc2lnbl9yaHNfY29kZSAoc3Rt dCkpCisgCQkgICAgICAgfHwgZ2ltcGxlX2Fzc2lnbl9yaHNfY29kZSAoc3Rt dCkgPT0gRkxPQVRfRVhQUgorIAkJICAgICAgIHx8IGdpbXBsZV9hc3NpZ25f cmhzX2NvZGUgKHN0bXQpID09IEZJWF9UUlVOQ19FWFBSKQorIAkJeworIAkJ ICBpZiAoIWNvbWJpbmVfY29udmVyc2lvbnMgKCZnc2kpKQorIAkJICAgIGdz aV9uZXh0ICgmZ3NpKTsKKyAJCX0KICAJICAgICAgZWxzZQogIAkJZ3NpX25l eHQgKCZnc2kpOwogIAkgICAgfQo= --000e0cd30e468c3e1804a2e837f2--