From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 74F28C4332F for ; Thu, 15 Dec 2022 00:30:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229696AbiLOAaP (ORCPT ); Wed, 14 Dec 2022 19:30:15 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46902 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229684AbiLOAaM (ORCPT ); Wed, 14 Dec 2022 19:30:12 -0500 Received: from mail-wm1-x32f.google.com (mail-wm1-x32f.google.com [IPv6:2a00:1450:4864:20::32f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4837B2CE23 for ; Wed, 14 Dec 2022 16:30:10 -0800 (PST) Received: by mail-wm1-x32f.google.com with SMTP id ay14-20020a05600c1e0e00b003cf6ab34b61so661364wmb.2 for ; Wed, 14 Dec 2022 16:30:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=in-reply-to:references:cc:to:from:content-language:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=sknC9HdWtzN4ETsg2nW7gfHoi7V4RIswXDISL1YhUL0=; b=fSO0HfR7k7dbOj+xdxvSCunlbFP9/iAq3ipt8yIQUzCMj28OjOgEaFv9rIo0aotij3 XCw0IzsiAVu41daBKPtVglEpmGjvtQ8E8vJqedO7z+tz1ryO0oDpOR5VPhf1NxTWwvEJ kvHoeUsJLUpZOQYIxJnZpbAklQRIMImZ1dJ04F+wGcanXTPfcXkZxrtf0Hb8/4Iu3h9W 2OD3VAr05A0ghDNjhMJDko+0lC6LVbDTxE5KoCpLfzLnQZz2E1Vj3gOxYsLp3OJe7yvu VptXK8rrzSBaOQiJdziI699g3cNDg523CZNCfzzb3/NsWQHWX6ckrgRMC7Z3SdfK4aKy gmGg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:references:cc:to:from:content-language:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=sknC9HdWtzN4ETsg2nW7gfHoi7V4RIswXDISL1YhUL0=; b=VDg4g8br5RBPalg/W+Nv0UD3knNO2F96SMYTkX/IQNX5X0OohtAw1rio7OED8l1QXl kWUfnU+fmhn4WKLBBKHvx9mQE/yfQsCngFrEXlZsCIMoXrXlKPmVj6X2vMVPyRT1sHIu Jf/7hqSzeed8l9cX1REbBv31h4V6RHZsTsqei5RVj84cZ/CarKQhbP8hW//bQ1INusFj hrdkl4fnkWOw30P4LGA2631ps7dMLPwV8VFy499YrvKVW5Vm44TGPkGskaoQV3GVuYSk 641jAmObrA2NE0Dmvg7TbJSE3m8e+Fllw5t16yUXeL4jNk9mS1AtwGjsKasgcLsSTHIs 9eRA== X-Gm-Message-State: ANoB5pm7qOw0M63kY+1gxlbaCjjW4jLP6Xb65o9hekkejChBSxWWbhVx PBO8tGg4lwYvnbw7ZkdK0Igs1wIhBhw= X-Google-Smtp-Source: AA0mqf56+C3G2vxL2SXQzTcp0YQ5AecXB15cb2oJj0liyzkNGscsN2lF8gSrx+zqU4aaRnxMqRWYWQ== X-Received: by 2002:a1c:f315:0:b0:3cf:a5df:8bb0 with SMTP id q21-20020a1cf315000000b003cfa5df8bb0mr21035282wmq.37.1671064208544; Wed, 14 Dec 2022 16:30:08 -0800 (PST) Received: from [192.168.0.160] ([170.253.36.171]) by smtp.gmail.com with ESMTPSA id e36-20020a5d5964000000b002425be3c9e2sm4315202wri.60.2022.12.14.16.30.07 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 14 Dec 2022 16:30:08 -0800 (PST) Message-ID: <2985ea06-6ccd-0e3b-9819-15a405f26935@gmail.com> Date: Thu, 15 Dec 2022 01:30:06 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.5.1 Subject: Re: [PATCH v5 1/5] string_copy.7: Add page to document all string-copying functions Content-Language: en-US From: Alejandro Colomar To: linux-man@vger.kernel.org Cc: Alejandro Colomar , Martin Sebor , "G. Branden Robinson" , Douglas McIlroy , Jakub Wilk , Serge Hallyn , Iker Pedrosa , Andrew Pinski References: <20221214161719.12862-1-alx@kernel.org> <20221215002648.35111-2-alx@kernel.org> In-Reply-To: <20221215002648.35111-2-alx@kernel.org> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------RBvf3tS5bYMQzRA4odK0F87d" Precedence: bulk List-ID: X-Mailing-List: linux-man@vger.kernel.org This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------RBvf3tS5bYMQzRA4odK0F87d Content-Type: multipart/mixed; boundary="------------19Z2G0mETMAiiqxE8lPdLBZR"; protected-headers="v1" From: Alejandro Colomar To: linux-man@vger.kernel.org Cc: Alejandro Colomar , Martin Sebor , "G. Branden Robinson" , Douglas McIlroy , Jakub Wilk , Serge Hallyn , Iker Pedrosa , Andrew Pinski Message-ID: <2985ea06-6ccd-0e3b-9819-15a405f26935@gmail.com> Subject: Re: [PATCH v5 1/5] string_copy.7: Add page to document all string-copying functions References: <20221214161719.12862-1-alx@kernel.org> <20221215002648.35111-2-alx@kernel.org> In-Reply-To: <20221215002648.35111-2-alx@kernel.org> --------------19Z2G0mETMAiiqxE8lPdLBZR Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 Rm9ybWF0dGVkIHN0cmluZ19jb3B5KDcpOg0KDQpzdHJpbmdfY29weSg3KSAgICAgICAgIE1p c2NlbGxhbmVvdXMgSW5mb3JtYXRpb24gTWFudWFsICAgICAgICAgc3RyaW5nX2NvcHkoNykN Cg0KTkFNRQ0KICAgICAgICBzdHBjcHksICBzdHJjcHksICBzdHJjYXQsIHN0cGVjcHksIHN0 cGVjcHl4LCBzdHJsY3B5LCBzdHJsY2F0LCBzdHBuY3B5LA0KICAgICAgICBzdHJuY3B5LCB6 dXN0cjJ1c3RwLCAgenVzdHIyc3RwLCAgc3RybmNhdCwgIHVzdHBjcHksICB1c3RyMnN0cCAg LSAgY29weQ0KICAgICAgICBzdHJpbmdzIGFuZCBjaGFyYWN0ZXIgc2VxdWVuY2VzDQoNClNZ Tk9QU0lTDQogICAgU3RyaW5ncw0KICAgICAgICAvLyBDaGFpbuKAkGNvcHkgYSBzdHJpbmcu DQogICAgICAgIGNoYXIgKnN0cGNweShjaGFyICpyZXN0cmljdCBkc3QsIGNvbnN0IGNoYXIg KnJlc3RyaWN0IHNyYyk7DQoNCiAgICAgICAgLy8gQ29weS9jYXRlbmF0ZSBhIHN0cmluZy4N CiAgICAgICAgY2hhciAqc3RyY3B5KGNoYXIgKnJlc3RyaWN0IGRzdCwgY29uc3QgY2hhciAq cmVzdHJpY3Qgc3JjKTsNCiAgICAgICAgY2hhciAqc3RyY2F0KGNoYXIgKnJlc3RyaWN0IGRz dCwgY29uc3QgY2hhciAqcmVzdHJpY3Qgc3JjKTsNCg0KICAgICAgICAvLyBDaGFpbuKAkGNv cHkgYSBzdHJpbmcgd2l0aCB0cnVuY2F0aW9uLg0KICAgICAgICBjaGFyICpzdHBlY3B5KGNo YXIgKmRzdCwgY2hhciBwYXN0X2VuZFswXSwgY29uc3QgY2hhciAqcmVzdHJpY3Qgc3JjKTsN Cg0KICAgICAgICAvLyBDaGFpbuKAkGNvcHkgYSBzdHJpbmcgd2l0aCB0cnVuY2F0aW9uIGFu ZCBTSUdTRUdWIG9uIFVCLg0KICAgICAgICBjaGFyICpzdHBlY3B5eChjaGFyICpkc3QsIGNo YXIgcGFzdF9lbmRbMF0sIGNvbnN0IGNoYXIgKnJlc3RyaWN0IHNyYyk7DQoNCiAgICAgICAg Ly8gQ29weS9jYXRlbmF0ZSBhIHN0cmluZyB3aXRoIHRydW5jYXRpb24gYW5kIFNJR1NFR1Yg b24gVUIuDQogICAgICAgIHNpemVfdCBzdHJsY3B5KGNoYXIgZHN0W3Jlc3RyaWN0IC5zel0s IGNvbnN0IGNoYXIgKnJlc3RyaWN0IHNyYywNCiAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90IHN6KTsNCiAgICAgICAgc2l6ZV90IHN0cmxjYXQoY2hhciBkc3RbcmVzdHJpY3QgLnN6 XSwgY29uc3QgY2hhciAqcmVzdHJpY3Qgc3JjLA0KICAgICAgICAgICAgICAgICAgICAgICBz aXplX3Qgc3opOw0KDQogICAgTnVsbOKAkHBhZGRlZCBjaGFyYWN0ZXIgc2VxdWVuY2VzDQog ICAgICAgIC8vIFplcm8gYSBmaXhlZOKAkHdpZHRoIGJ1ZmZlciwgYW5kDQogICAgICAgIC8v IGNvcHkgYSBzdHJpbmcgaW50byBhIGNoYXJhY3RlciBzZXF1ZW5jZSB3aXRoIHRydW5jYXRp b24uDQogICAgICAgIGNoYXIgKnN0cG5jcHkoY2hhciBkc3RbcmVzdHJpY3QgLnN6XSwgY29u c3QgY2hhciAqcmVzdHJpY3Qgc3JjLA0KICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg c3opOw0KDQogICAgICAgIC8vIFplcm8gYSBmaXhlZOKAkHdpZHRoIGJ1ZmZlciwgYW5kDQog ICAgICAgIC8vIGNvcHkgYSBzdHJpbmcgaW50byBhIGNoYXJhY3RlciBzZXF1ZW5jZSB3aXRo IHRydW5jYXRpb24uDQogICAgICAgIGNoYXIgKnN0cm5jcHkoY2hhciBkZXN0W3Jlc3RyaWN0 IC5zel0sIGNvbnN0IGNoYXIgKnJlc3RyaWN0IHNyYywNCiAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90IHN6KTsNCg0KICAgICAgICAvLyBDaGFpbuKAkGNvcHkgYSBudWxs4oCQcGFk ZGVkIGNoYXJhY3RlciBzZXF1ZW5jZSBpbnRvIGEgY2hhcmFjdGVyIHNlcXVlbmNlLg0KICAg ICAgICBjaGFyICp6dXN0cjJ1c3RwKGNoYXIgKnJlc3RyaWN0IGRzdCwgY29uc3QgY2hhciBz cmNbcmVzdHJpY3QgLnN6XSwNCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHN6KTsN Cg0KICAgICAgICAvLyBDaGFpbuKAkGNvcHkgYSBudWxs4oCQcGFkZGVkIGNoYXJhY3RlciBz ZXF1ZW5jZSBpbnRvIGEgc3RyaW5nLg0KICAgICAgICBjaGFyICp6dXN0cjJzdHAoY2hhciAq cmVzdHJpY3QgZHN0LCBjb25zdCBjaGFyIHNyY1tyZXN0cmljdCAuc3pdLA0KICAgICAgICAg ICAgICAgICAgICAgICBzaXplX3Qgc3opOw0KDQogICAgICAgIC8vIENhdGVuYXRlIGEgbnVs bOKAkHBhZGRlZCBjaGFyYWN0ZXIgc2VxdWVuY2UgaW50byBhIHN0cmluZy4NCiAgICAgICAg Y2hhciAqc3RybmNhdChjaGFyICpyZXN0cmljdCBkc3QsIGNvbnN0IGNoYXIgc3JjW3Jlc3Ry aWN0IC5zel0sDQogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzeik7DQoNCiAgICBN ZWFzdXJlZCBjaGFyYWN0ZXIgc2VxdWVuY2VzDQogICAgICAgIC8vIENoYWlu4oCQY29weSBh IG1lYXN1cmVkIGNoYXJhY3RlciBzZXF1ZW5jZS4NCiAgICAgICAgY2hhciAqdXN0cGNweShj aGFyICpyZXN0cmljdCBkc3QsIGNvbnN0IGNoYXIgc3JjW3Jlc3RyaWN0IC5sZW5dLA0KICAg ICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuKTsNCg0KICAgICAgICAvLyBDaGFpbuKA kGNvcHkgYSBtZWFzdXJlZCBjaGFyYWN0ZXIgc2VxdWVuY2UgaW50byBhIHN0cmluZy4NCiAg ICAgICAgY2hhciAqdXN0cjJzdHAoY2hhciAqcmVzdHJpY3QgZHN0LCBjb25zdCBjaGFyIHNy Y1tyZXN0cmljdCAubGVuXSwNCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbik7 DQoNCkRFU0NSSVBUSU9ODQogICAgVGVybXMgKGFuZCBhYmJyZXZpYXRpb25zKQ0KICAgICAg ICBzdHJpbmcgKHN0cikNCiAgICAgICAgICAgICAgIGlzICBhIHNlcXVlbmNlIG9mIHplcm8g b3IgbW9yZSBub27igJBudWxsIGNoYXJhY3RlcnMgZm9sbG93ZWQgYnkgYQ0KICAgICAgICAg ICAgICAgbnVsbCBieXRlLg0KDQogICAgICAgIGNoYXJhY3RlciBzZXF1ZW5jZQ0KICAgICAg ICAgICAgICAgaXMgYSBzZXF1ZW5jZSBvZiB6ZXJvIG9yIG1vcmUgbm9u4oCQbnVsbCAgY2hh cmFjdGVycy4gICBBICBwcm9ncmFtDQogICAgICAgICAgICAgICBzaG91bGQgIG5ldmVyICB1 c2EgIGEgIGNoYXJhY3RlciAgc2VxdWVuY2Ugd2hlcmUgYSBzdHJpbmcgaXMgcmXigJANCiAg ICAgICAgICAgICAgIHF1aXJlZC4gIEhvd2V2ZXIsIHdpdGggYXBwcm9wcmlhdGUgY2FyZSwg YSBzdHJpbmcgY2FuIGJlIHVzZWQgaW4NCiAgICAgICAgICAgICAgIHRoZSBwbGFjZSBvZiBh IGNoYXJhY3RlciBzZXF1ZW5jZS4NCg0KICAgICAgICAgICAgICAgbnVsbOKAkHBhZGRlZCBj aGFyYWN0ZXIgc2VxdWVuY2UgKHp1c3RyKQ0KICAgICAgICAgICAgICAgICAgICAgIENoYXJh Y3RlciAgc2VxdWVuY2VzICBjYW4gIGJlICBjb250YWluZWQgIGluICBmaXhlZOKAkHdpZHRo DQogICAgICAgICAgICAgICAgICAgICAgYnVmZmVycywgd2hpY2ggY29udGFpbiBwYWRkaW5n IG51bGwgYnl0ZXMgYWZ0ZXIgdGhlIGNoYXLigJANCiAgICAgICAgICAgICAgICAgICAgICBh Y3RlciAgc2VxdWVuY2UsICB0byAgZmlsbCB0aGUgcmVzdCBvZiB0aGUgYnVmZmVyIHdpdGhv dXQNCiAgICAgICAgICAgICAgICAgICAgICBhZmZlY3RpbmcgdGhlIGNoYXJhY3RlciBzZXF1 ZW5jZTsgaG93ZXZlciwgdGhvc2UgIHBhZGRpbmcNCiAgICAgICAgICAgICAgICAgICAgICBu dWxsIGJ5dGVzIGFyZSBub3QgcGFydCBvZiB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlLg0KDQog ICAgICAgICAgICAgICBtZWFzdXJlZCBjaGFyYWN0ZXIgc2VxdWVuY2UgKHVzdHIpDQogICAg ICAgICAgICAgICAgICAgICAgQ2hhcmFjdGVyICBzZXF1ZW5jZSBkZWxpbWl0ZWQgYnkgaXRz IGxlbmd0aC4gIEl0IG1heSBiZSBhDQogICAgICAgICAgICAgICAgICAgICAgc2xpY2Ugb2Yg YSAgbGFyZ2VyICBjaGFyYWN0ZXIgIHNlcXVlbmNlLCAgb3IgIGV2ZW4gIG9mICBhDQogICAg ICAgICAgICAgICAgICAgICAgc3RyaW5nLg0KDQogICAgICAgIGxlbmd0aCAobGVuKQ0KICAg ICAgICAgICAgICAgaXMgIHRoZSAgbnVtYmVyICBvZiBub27igJBudWxsIGNoYXJhY3RlcnMg aW4gYSBzdHJpbmcgb3IgY2hhcmFjdGVyDQogICAgICAgICAgICAgICBzZXF1ZW5jZS4gICBJ dCAgaXMgIHRoZSAgcmV0dXJuICB2YWx1ZSAgb2YgIHN0cmxlbihzdHIpICBhbmQgIG9mDQog ICAgICAgICAgICAgICBzdHJubGVuKHVzdHIsIHN6KS4NCg0KICAgICAgICBzaXplIChzeikN CiAgICAgICAgICAgICAgIHJlZmVycyAgdG8gIHRoZSAgZW50aXJlIGJ1ZmZlciB3aGVyZSB0 aGUgc3RyaW5nIG9yIGNoYXJhY3RlciBzZeKAkA0KICAgICAgICAgICAgICAgcXVlbmNlIGlz IGNvbnRhaW5lZC4NCg0KICAgICAgICBlbmQgICAgaXMgdGhlIG5hbWUgb2YgYSBwb2ludGVy IHRvICB0aGUgIHRlcm1pbmF0aW5nICBudWxsICBieXRlICBvZiAgYQ0KICAgICAgICAgICAg ICAgc3RyaW5nLCBvciBhIHBvaW50ZXIgdG8gb25lIHBhc3QgdGhlIGxhc3QgY2hhcmFjdGVy IG9mIGEgY2hhcmFj4oCQDQogICAgICAgICAgICAgICB0ZXIgIHNlcXVlbmNlLiAgVGhpcyBp cyB0aGUgcmV0dXJuIHZhbHVlIG9mIGZ1bmN0aW9ucyB0aGF0IGFsbG93DQogICAgICAgICAg ICAgICBjaGFpbmluZy4gIEl0IGlzIGVxdWl2YWxlbnQgdG8gJnN0cltsZW5dLg0KDQogICAg ICAgIHBhc3RfZW5kDQogICAgICAgICAgICAgICBpcyB0aGUgbmFtZSBvZiBhIHBvaW50ZXIg dG8gb25lIHBhc3QgdGhlIGVuZCBvZiB0aGUgYnVmZmVyICB0aGF0DQogICAgICAgICAgICAg ICBjb250YWlucyAgYSAgc3RyaW5nICBvciBjaGFyYWN0ZXIgc2VxdWVuY2UuICBJdCBpcyBl cXVpdmFsZW50IHRvDQogICAgICAgICAgICAgICAmc3RyW3N6XS4gIEl0IGlzIHVzZWQgYXMg YSBzZW50aW5lbCB2YWx1ZSwgdG8gYmUgYWJsZSAgdG8gIHRydW7igJANCiAgICAgICAgICAg ICAgIGNhdGUgIHN0cmluZ3MgIG9yIGNoYXJhY3RlciBzZXF1ZW5jZXMgaW5zdGVhZCBvZiBv dmVycnVubmluZyB0aGUNCiAgICAgICAgICAgICAgIGNvbnRhaW5pbmcgYnVmZmVyLg0KDQog ICAgICAgIGNvcHkgICBUaGlzIHRlcm0gaXMgdXNlZCB3aGVuIHRoZSB3cml0aW5nIHN0YXJ0 cyBhdCB0aGUgIGZpcnN0ICBlbGVtZW50DQogICAgICAgICAgICAgICBwb2ludGVkIHRvIGJ5 IGRzdC4NCg0KICAgICAgICBjYXRlbmF0ZQ0KICAgICAgICAgICAgICAgVGhpcyAgdGVybSAg aXMgIHVzZWQgd2hlbiBhIGZ1bmN0aW9uIGZpcnN0IGZpbmRzIHRoZSB0ZXJtaW5hdGluZw0K ICAgICAgICAgICAgICAgbnVsbCBieXRlIGluIGRzdCwgYW5kIHRoZW4gc3RhcnRzIHdyaXRp bmcgYXQgdGhhdCBwb3NpdGlvbi4NCg0KICAgICAgICBjaGFpbiAgVGhpcyB0ZXJtIGlzIHVz ZWQgIHdoZW4gIGl04oCZcyAgdGhlICBwcm9ncmFtbWVyICB3aG8gIHByb3ZpZGVzICBhDQog ICAgICAgICAgICAgICBwb2ludGVyICB0byAgdGhlICBlbmQgaW4gZHN0LCBhbmQgdGhlIGZ1 bmN0aW9uIHN0YXJ0cyB3cml0aW5nIGF0DQogICAgICAgICAgICAgICB0aGF0IGxvY2F0aW9u LiAgVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBwb2ludGVyIHRvICB0aGUgIG5ldyAgZW5kDQog ICAgICAgICAgICAgICBhZnRlciAgdGhlIGNhbGwsIHNvIHRoYXQgdGhlIHByb2dyYW1tZXIg Y2FuIHVzZSBpdCB0byBjaGFpbiBzdWNoDQogICAgICAgICAgICAgICBjYWxscy4NCg0KICAg IENvcHksIGNhdGVuYXRlLCBhbmQgY2hhaW7igJBjb3B5DQogICAgICAgIE9yaWdpbmFsbHks IHRoZXJlIHdhcyBhIGRpc3RpbmN0aW9uIGJldHdlZW4gIGZ1bmN0aW9ucyAgdGhhdCAgY29w eSAgYW5kDQogICAgICAgIHRob3NlIHRoYXQgY2F0ZW5hdGUuICBIb3dldmVyLCBuZXdlciBm dW5jdGlvbnMgdGhhdCBjb3B5IHdoaWxlIGFsbG93aW5nDQogICAgICAgIGNoYWluaW5nICBj b3ZlciAgYm90aCB1c2UgY2FzZXMgd2l0aCBhIHNpbmdsZSBBUEkuICBUaGV5IGFyZSBhbHNv IGFsZ2/igJANCiAgICAgICAgcml0aG1pY2FsbHkgZmFzdGVyLCBzaW5jZSB0aGV5IGRvbuKA mXQgbmVlZCB0byBzZWFyY2ggZm9yIHRoZSBlbmQgb2YgIHRoZQ0KICAgICAgICBleGlzdGlu ZyAgc3RyaW5nLiAgSG93ZXZlciwgZnVuY3Rpb25zIHRoYXQgY2F0ZW5hdGUgaGF2ZSBhIG11 Y2ggc2ltcGxlcg0KICAgICAgICB1c2UsIHNvIGlmIHBlcmZvcm1hbmNlIGlzIG5vdCBpbXBv cnRhbnQsIGl0IGNhbiBtYWtlIHNlbnNlIHRvIHVzZSAgdGhlbQ0KICAgICAgICBmb3IgaW1w cm92aW5nIHJlYWRhYmlsaXR5Lg0KDQogICAgICAgIFRvICBjaGFpbiAgY29weSAgZnVuY3Rp b25zLCAgdGhleSAgbmVlZCB0byByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBlbmQuDQogICAg ICAgIFRoYXTigJlzIGEgYnlwcm9kdWN0IG9mIHRoZSBjb3B5IG9wZXJhdGlvbiwgIHNvICBp dCAgaGFzICBubyAgcGVyZm9ybWFuY2UNCiAgICAgICAgY29zdHMuICAgRnVuY3Rpb25zIHRo YXQgcmV0dXJuIHN1Y2ggYSBwb2ludGVyLCBhbmQgdGh1cyBjYW4gYmUgY2hhaW5lZCwNCiAg ICAgICAgaGF2ZSBuYW1lcyBvZiB0aGUgZm9ybSAqc3RwKigpLCBzaW5jZSBpdOKAmXMgIGFs c28gIGNvbW1vbiAgdG8gIG5hbWUgIHRoZQ0KICAgICAgICBwb2ludGVyIGp1c3QgcC4NCg0K ICAgICAgICBDaGFpbuKAkGNvcHlpbmcgIGZ1bmN0aW9ucyAgdGhhdCAgdHJ1bmNhdGUgc2hv dWxkIGFjY2VwdCBhIHBvaW50ZXIgdG8gb25lDQogICAgICAgIHBhc3QgdGhlIGVuZCBvZiB0 aGUgZGVzdGluYXRpb24gYnVmZmVyLCBhbmQgIGhhdmUgIG5hbWVzICBvZiAgdGhlICBmb3Jt DQogICAgICAgICpzdHBlKigpLiAgVGhpcyBhbGxvd3Mgbm90IGhhdmluZyB0byByZWNhbGN1 bGF0ZSB0aGUgcmVtYWluaW5nIHNpemUgYWbigJANCiAgICAgICAgdGVyIGVhY2ggY2FsbC4N Cg0KICAgIFRydW5jYXRlIG9yIG5vdD8NCiAgICAgICAgVGhlICBmaXJzdCAgdGhpbmcgIHRv ICBub3RlICBpcyB0aGF0IHByb2dyYW1tZXJzIHNob3VsZCBiZSBjYXJlZnVsIHdpdGgNCiAg ICAgICAgYnVmZmVycywgc28gdGhleSBhbHdheXMgaGF2ZSB0aGUgY29ycmVjdCBzaXplLCBh bmQgIHRydW5jYXRpb24gIGlzICBub3QNCiAgICAgICAgbmVjZXNzYXJ5Lg0KDQogICAgICAg IEluICBtb3N0IGNhc2VzLCB0cnVuY2F0aW9uIGlzIG5vdCBkZXNpcmVkLCBhbmQgaXQgaXMg c2ltcGxlciB0byBqdXN0IGRvDQogICAgICAgIHRoZSBjb3B5LiAgU2ltcGxlciBjb2RlIGlz IHNhZmVyIGNvZGUuICBQcm9ncmFtbWluZyBhZ2FpbnN0IHByb2dyYW1taW5nDQogICAgICAg IG1pc3Rha2VzIGJ5IGFkZGluZyBtb3JlIGNvZGUganVzdCBhZGRzIG1vcmUgcG9pbnRzIHdo ZXJlICBtaXN0YWtlcyAgY2FuDQogICAgICAgIGJlIG1hZGUuDQoNCiAgICAgICAgTm93YWRh eXMsICBjb21waWxlcnMgIGNhbiAgZGV0ZWN0ICBtb3N0IHByb2dyYW1tZXIgZXJyb3JzIHdp dGggZmVhdHVyZXMNCiAgICAgICAgbGlrZSBjb21waWxlciB3YXJuaW5ncywgIHN0YXRpYyAg YW5hbHl6ZXJzLCAgYW5kICBfRk9SVElGWV9TT1VSQ0UgIChzZWUNCiAgICAgICAgZnRtKDcp KS4gICBLZWVwaW5nICB0aGUgY29kZSBzaW1wbGUgaGVscHMgdGhlc2Ugb3ZlcmZsb3figJBk ZXRlY3Rpb24gZmVh4oCQDQogICAgICAgIHR1cmVzIGJlIG1vcmUgcHJlY2lzZS4NCg0KICAg ICAgICBXaGVuIHZhbGlkYXRpbmcgdXNlciBpbnB1dCwgaG93ZXZlciwgaXQgbWFrZXMgc2Vu c2UgdG8gIHRydW5jYXRlLiAgIFJl4oCQDQogICAgICAgIG1lbWJlciB0byBjaGVjayB0aGUg cmV0dXJuIHZhbHVlIG9mIHN1Y2ggZnVuY3Rpb24gY2FsbHMuDQoNCiAgICAgICAgRnVuY3Rp b25zIHRoYXQgdHJ1bmNhdGU6DQoNCiAgICAgICAg4oCiICBzdHBlY3B5KDMpICBpcyB0aGUg bW9zdCBlZmZpY2llbnQgc3RyaW5nIGNvcHkgZnVuY3Rpb24gdGhhdCBwZXJmb3Jtcw0KICAg ICAgICAgICB0cnVuY2F0aW9uLiAgSXQgb25seSByZXF1aXJlcyB0byBjaGVjayBmb3IgdHJ1 bmNhdGlvbiBvbmNlIGFmdGVyIGFsbA0KICAgICAgICAgICBjaGFpbmVkIGNhbGxzLg0KDQog ICAgICAgIOKAoiAgc3RwZWNweXgoMykgaXMgYSB2YXJpYW50IG9mICBzdHBlY3B5KDMpICB0 aGF0ICBjb25zdW1lcyAgdGhlICBlbnRpcmUNCiAgICAgICAgICAgc291cmNlICBzdHJpbmcs ICB0byBjYXRjaCBidWdzIGluIHRoZSBwcm9ncmFtIGJ5IGZvcmNpbmcgYSBzZWdtZW50YeKA kA0KICAgICAgICAgICB0aW9uIGZhdWx0IChhcyBzdHJsY3B5KDNic2QpIGFuZCBzdHJsY2F0 KDNic2QpIGRvKS4NCg0KICAgICAgICDigKIgIHN0cmxjcHkoM2JzZCkgYW5kIHN0cmxjYXQo M2JzZCkgYXJlIGRlc2lnbmVkIHRvIGNyYXNoIGlmICB0aGUgIGlucHV0DQogICAgICAgICAg IHN0cmluZyBpcyBpbnZhbGlkIChkb2VzbuKAmXQgY29udGFpbiBhIHRlcm1pbmF0aW5nIG51 bGwgYnl0ZSkuDQoNCiAgICAgICAg4oCiICBzdHBuY3B5KDMpICBhbmQgIHN0cm5jcHkoMykg IGFsc28gIHRydW5jYXRlLCAgYnV0ICB0aGV5ICBkb27igJl0IHdyaXRlDQogICAgICAgICAg IHN0cmluZ3MsIGJ1dCByYXRoZXIgbnVsbOKAkHBhZGRlZCBjaGFyYWN0ZXIgc2VxdWVuY2Vz Lg0KDQogICAgTnVsbOKAkHBhZGRlZCBjaGFyYWN0ZXIgc2VxdWVuY2VzDQogICAgICAgIEZv ciBoaXN0b3JpYyByZWFzb25zLCBzb21lIHN0YW5kYXJkIEFQSXMsIHN1Y2ggYXMgdXRtcHgo NSksICB1c2UgIG51bGzigJANCiAgICAgICAgcGFkZGVkICBjaGFyYWN0ZXIgIHNlcXVlbmNl cyBpbiBmaXhlZOKAkHdpZHRoIGJ1ZmZlcnMuICBUbyBpbnRlcmZhY2Ugd2l0aA0KICAgICAg ICB0aGVtLCBzcGVjaWFsaXplZCBmdW5jdGlvbnMgbmVlZCB0byBiZSB1c2VkLg0KDQogICAg ICAgIFRvIGNvcHkgc3RyaW5ncyBpbnRvIHRoZW0sIHVzZSBzdHBuY3B5KDMpLg0KDQogICAg ICAgIFRvIGNvcHkgZnJvbSBhbiB1bnRlcm1pbmF0ZWQgc3RyaW5nIHdpdGhpbiBhIGZpeGVk 4oCQd2lkdGggYnVmZmVyIGludG8gIGENCiAgICAgICAgc3RyaW5nLCAgaWdub3JpbmcgIGFu eSAgdHJhaWxpbmcgIG51bGwgIGJ5dGVzIGluIHRoZSBzb3VyY2UgZml4ZWTigJB3aWR0aA0K ICAgICAgICBidWZmZXIsIHlvdSBzaG91bGQgdXNlIHp1c3RyMnN0cCgzKSBvciBzdHJuY2F0 KDMpLg0KDQogICAgICAgIFRvIGNvcHkgZnJvbSBhbiB1bnRlcm1pbmF0ZWQgc3RyaW5nIHdp dGhpbiBhIGZpeGVk4oCQd2lkdGggYnVmZmVyIGludG8gIGENCiAgICAgICAgY2hhcmFjdGVy ICBzZXF1ZW5jZSwgIGluZ29yaW5nICBhbnkgIHRyYWlsaW5nICBudWxsIGJ5dGVzIGluIHRo ZSBzb3VyY2UNCiAgICAgICAgZml4ZWTigJB3aWR0aCBidWZmZXIsIHlvdSBzaG91bGQgdXNl IHp1c3RyMnVzdHAoMykuDQoNCiAgICBNZWFzdXJlZCBjaGFyYWN0ZXIgc2VxdWVuY2VzDQog ICAgICAgIFRoZSBzaW1wbGVzdCBjaGFyYWN0ZXIgc2VxdWVuY2UgY29weWluZyBmdW5jdGlv biBpcyBtZW1wY3B5KDMpLiAgSXQgcmXigJANCiAgICAgICAgcXVpcmVzIGFsd2F5cyBrbm93 aW5nIHRoZSBsZW5ndGggb2YgeW91ciBjaGFyYWN0ZXIgc2VxdWVuY2VzLCBmb3Igd2hpY2gN CiAgICAgICAgc3RydWN0dXJlcyBjYW4gYmUgdXNlZC4gIEl0IG1ha2VzIHRoZSBjb2RlIG11 Y2ggZmFzdGVyLCBzaW5jZSAgeW91ICBhbOKAkA0KICAgICAgICB3YXlzICBrbm93IHRoZSBs ZW5ndGggb2YgeW91ciBjaGFyYWN0ZXIgc2VxdWVuY2VzLCBhbmQgY2FuIGRvIHRoZSBtaW5p 4oCQDQogICAgICAgIG1hbCBjb3BpZXMgYW5kIGxlbmd0aCBtZWFzdXJlbWVudHMuICBtZW1w Y3B5KDMpICBjb3BpZXMgIGNoYXJhY3RlciAgc2XigJANCiAgICAgICAgcXVlbmNlcywgc28g eW91IG5lZWQgdG8gZXhwbGljaXRseSBzZXQgdGhlIHRlcm1pbmF0aW5nIG51bGwgYnl0ZSBp ZiB5b3UNCiAgICAgICAgbmVlZCBhIHN0cmluZy4NCg0KICAgICAgICBIb3dldmVyLCAgZm9y IGtlZXBpbmcgdHlwZSBzYWZldHksIGl04oCZcyBnb29kIHRvIGFkZCBhIHdyYXBwZXIgdGhh dCB1c2VzDQogICAgICAgIGNoYXIgKiBpbnN0ZWFkIG9mIHZvaWQgKjogdXN0cGNweSgzKS4N Cg0KICAgICAgICBJbiBwcm9ncmFtcyB0aGF0IG1ha2UgY29uc2lkZXJhYmxlIHVzZSAgb2Yg IHN0cmluZ3MgIG9yICBjaGFyYWN0ZXIgIHNl4oCQDQogICAgICAgIHF1ZW5jZXMsIGFuZCBu ZWVkIHRoZSBiZXN0IHBlcmZvcm1hbmNlLCB1c2luZyBvdmVybGFwcGluZyBjaGFyYWN0ZXIg c2XigJANCiAgICAgICAgcXVlbmNlcyBjYW4gbWFrZSBhIGJpZyBkaWZmZXJlbmNlLiAgSXQg YWxsb3dzIGhvbGRpbmcgc3Vic2VxdWVuY2VzIG9mIGENCiAgICAgICAgbGFyZ2VyIGNoYXJh Y3RlciBzZXF1ZW5jZS4gIHdoaWxlIG5vdCBkdXBsaWNhdGluZyBtZW1vcnkgbm9yIHVzaW5n IHRpbWUNCiAgICAgICAgdG8gZG8gYSBjb3B5Lg0KDQogICAgICAgIEhvd2V2ZXIsIHRoaXMg aXMgZGVsaWNhdGUsIHNpbmNlIGl0IHJlcXVpcmVzIHVzaW5nIGNoYXJhY3RlciBzZXF1ZW5j ZXMuDQogICAgICAgIEMgIGxpYnJhcnkgIEFQSXMgIHVzZSBzdHJpbmdzLCBzbyBwcm9ncmFt cyB0aGF0IHVzZSBjaGFyYWN0ZXIgc2VxdWVuY2VzDQogICAgICAgIHdpbGwgaGF2ZSB0byB0 YWtlIGNhcmUgb2YgZGlmZmVyZW50aWF0aW5nIHN0cmluZ3MgIGZyb20gIGNoYXJhY3RlciAg c2XigJANCiAgICAgICAgcXVlbmNlcy4NCg0KICAgICAgICBUbyBjb3B5IGEgbWVhc3VyZWQg Y2hhcmFjdGVyIHNlcXVlbmNlLCB1c2UgdXN0cGNweSgzKS4NCg0KICAgICAgICBUbyBjb3B5 IGEgbWVhc3VyZWQgY2hhcmFjdGVyIHNlcXVlbmNlIGludG8gYSBzdHJpbmcsIHVzZSB1c3Ry MnN0cCgzKS4NCg0KICAgICAgICBCZWNhdXNlICB0aGVzZSAgZnVuY3Rpb25zIGFzayBmb3Ig dGhlIGxlbmd0aCwgYW5kIGEgc3RyaW5nIGlzIGJ5IG5hdHVyZQ0KICAgICAgICBjb21wb3Nl ZCBvZiBhIGNoYXJhY3RlciBzZXF1ZW5jZSBvZiB0aGUgc2FtZSBsZW5ndGggcGx1cyBhICB0 ZXJtaW5hdGluZw0KICAgICAgICBudWxsIGJ5dGUsIGEgc3RyaW5nIGlzIGFsc28gYWNjZXB0 ZWQgYXMgaW5wdXQuDQoNCiAgICBTdHJpbmcgdnMgY2hhcmFjdGVyIHNlcXVlbmNlDQogICAg ICAgIFNvbWUgIGZ1bmN0aW9ucyAgb25seSBvcGVyYXRlIG9uIHN0cmluZ3MuICBUaG9zZSBy ZXF1aXJlIHRoYXQgdGhlIGlucHV0DQogICAgICAgIHNyYyBpcyBhIHN0cmluZywgYW5kIGd1 YXJhbnRlZSBhbiBvdXRwdXQgc3RyaW5nIChldmVuICB3aGVuICB0cnVuY2F0aW9uDQogICAg ICAgIG9jY3VycykuICAgRnVuY3Rpb25zIHRoYXQgY2F0ZW5hdGUgYWxzbyByZXF1aXJlIHRo YXQgZHN0IGhvbGRzIGEgc3RyaW5nDQogICAgICAgIGJlZm9yZSB0aGUgY2FsbC4gIExpc3Qg b2YgZnVuY3Rpb25zOg0KDQogICAgICAgIOKAoiAgc3RwY3B5KDMpDQogICAgICAgIOKAoiAg c3RyY3B5KDMpLCBzdHJjYXQoMykNCiAgICAgICAg4oCiICBzdHBlY3B5KDMpLCBzdHBlY3B5 eCgzKQ0KICAgICAgICDigKIgIHN0cmxjcHkoM2JzZCksIHN0cmxjYXQoM2JzZCkNCg0KICAg ICAgICBPdGhlciBmdW5jdGlvbnMgcmVxdWlyZSBhbiBpbnB1dCBzdHJpbmcsIGJ1dCAgY3Jl YXRlICBhICBjaGFyYWN0ZXIgIHNl4oCQDQogICAgICAgIHF1ZW5jZSAgYXMgIG91dHB1dC4g ICBUaGVzZSAgZnVuY3Rpb25zIGhhdmUgY29uZnVzaW5nIG5hbWVzLCBhbmQgaGF2ZSBhDQog ICAgICAgIGxvbmcgaGlzdG9yeSBvZiBtaXN1c2UuICBMaXN0IG9mIGZ1bmN0aW9uczoNCg0K ICAgICAgICDigKIgIHN0cG5jcHkoMykNCiAgICAgICAg4oCiICBzdHJuY3B5KDMpDQoNCiAg ICAgICAgT3RoZXIgZnVuY3Rpb25zIG9wZXJhdGUgb24gYW4gaW5wdXQgY2hhcmFjdGVyIHNl cXVlbmNlLCBhbmQgIGNyZWF0ZSAgYW4NCiAgICAgICAgb3V0cHV0ICBzdHJpbmcuICAgRnVu Y3Rpb25zIHRoYXQgY2F0ZW5hdGUgYWxzbyByZXF1aXJlIHRoYXQgZHN0IGhvbGRzIGENCiAg ICAgICAgc3RyaW5nIGJlZm9yZSB0aGUgY2FsbC4gIHN0cm5jYXQoMykgaGFzIGFuIGV2ZW4g IG1vcmUgIG1pc2xlYWRpbmcgIG5hbWUNCiAgICAgICAgdGhhbiB0aGUgZnVuY3Rpb25zIGFi b3ZlLiAgTGlzdCBvZiBmdW5jdGlvbnM6DQoNCiAgICAgICAg4oCiICB6dXN0cjJzdHAoMykN CiAgICAgICAg4oCiICBzdHJuY2F0KDMpDQogICAgICAgIOKAoiAgdXN0cjJzdHAoMykNCg0K ICAgICAgICBPdGhlciAgZnVuY3Rpb25zICBvcGVyYXRlICBvbiAgYW4gaW5wdXQgY2hhcmFj dGVyIHNlcXVlbmNlIHRvIGNyZWF0ZSBhbg0KICAgICAgICBvdXRwdXQgY2hhcmFjdGVyIHNl cXVlbmNlLiAgTGlzdCBvZiBmdW5jdGlvbnM6DQoNCiAgICAgICAg4oCiICB1c3RwY3B5KDMp DQogICAgICAgIOKAoiAgenVzdHIyc3RwKDMpDQoNCiAgICBGdW5jdGlvbnMNCiAgICAgICAg c3RwY3B5KDMpDQogICAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGNvcGllcyB0aGUgaW5w dXQgc3RyaW5nIGludG8gYSBkZXN0aW5hdGlvbiBzdHJpbmcuDQogICAgICAgICAgICAgICBU aGUgcHJvZ3JhbW1lciBpcyByZXNwb25zaWJsZSAgZm9yICBhbGxvY2F0aW5nICBhICBidWZm ZXIgIGxhcmdlDQogICAgICAgICAgICAgICBlbm91Z2guICBJdCByZXR1cm5zIGEgcG9pbnRl ciBzdWl0YWJsZSBmb3IgY2hhaW5pbmcuDQoNCiAgICAgICAgc3RyY3B5KDMpDQogICAgICAg IHN0cmNhdCgzKQ0KICAgICAgICAgICAgICAgVGhlc2UgZnVuY3Rpb25zIGNvcHkgYW5kIGNh dGVuYXRlIHRoZSBpbnB1dCBzdHJpbmcgaW50byBhIGRlc3Rp4oCQDQogICAgICAgICAgICAg ICBuYXRpb24gIHN0cmluZy4gICBUaGUgcHJvZ3JhbW1lciBpcyByZXNwb25zaWJsZSBmb3Ig YWxsb2NhdGluZyBhDQogICAgICAgICAgICAgICBidWZmZXIgbGFyZ2UgZW5vdWdoLiAgVGhl IHJldHVybiB2YWx1ZSBpcyB1c2VsZXNzLg0KDQogICAgICAgICAgICAgICBzdHBjcHkoMykg aXMgYSBmYXN0ZXIgYWx0ZXJuYXRpdmUgdG8gdGhlc2UgZnVuY3Rpb25zLg0KDQogICAgICAg IHN0cGVjcHkoMykNCiAgICAgICAgc3RwZWNweXgoMykNCiAgICAgICAgICAgICAgIFRoZXNl IGZ1bmN0aW9ucyBjb3B5IHRoZSBpbnB1dCBzdHJpbmcgaW50byBhIGRlc3RpbmF0aW9uIHN0 cmluZy4NCiAgICAgICAgICAgICAgIElmIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIsIGxpbWl0 ZWQgYnkgYSBwb2ludGVyIHRvIG9uZSBwYXN0ICB0aGUNCiAgICAgICAgICAgICAgIGVuZCAg b2YgIGl0LCAgaXNu4oCZdCBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUgY29weSwgdGhlIHJl c3VsdGluZw0KICAgICAgICAgICAgICAgc3RyaW5nIGlzIHRydW5jYXRlZCAoYnV0IGl0ICBp cyAgZ3VhcmFudGVlZCAgdG8gIGJlICBudWxs4oCQdGVybWnigJANCiAgICAgICAgICAgICAg IG5hdGVkKS4gICBUaGV5ICByZXR1cm4gYSBwb2ludGVyIHN1aXRhYmxlIGZvciBjaGFpbmlu Zy4gIFRydW5jYeKAkA0KICAgICAgICAgICAgICAgdGlvbiBuZWVkcyB0byBiZSBkZXRlY3Rl ZCBvbmx5IG9uY2UgYWZ0ZXIgdGhlIGxhc3QgY2hhaW5lZCBjYWxsLg0KICAgICAgICAgICAg ICAgc3RwZWNweXgoMykgaGFzIGlkZW50aWNhbCBzZW1hbnRpY3MgdG8gc3RwZWNweSgzKSwg IGV4Y2VwdCAgdGhhdA0KICAgICAgICAgICAgICAgaXQgZm9yY2VzIGEgU0lHU0VHViBpZiB0 aGUgc3JjIHBvaW50ZXIgaXMgbm90IGEgc3RyaW5nLg0KDQogICAgICAgICAgICAgICBUaGVz ZSAgZnVuY3Rpb25zICBhcmUgIG5vdCBwcm92aWRlZCBieSBhbnkgbGlicmFyeTsgU2VlIEVY QU1QTEVTDQogICAgICAgICAgICAgICBmb3IgYSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24u DQoNCiAgICAgICAgc3RybGNweSgzYnNkKQ0KICAgICAgICBzdHJsY2F0KDNic2QpDQogICAg ICAgICAgICAgICBUaGVzZSBmdW5jdGlvbnMgY29weSBhbmQgY2F0ZW5hdGUgdGhlIGlucHV0 IHN0cmluZyBpbnRvIGEgZGVzdGnigJANCiAgICAgICAgICAgICAgIG5hdGlvbiBzdHJpbmcu ICBJZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLCBsaW1pdGVkIGJ5IGl0cyAgc2l6ZSwNCiAg ICAgICAgICAgICAgIGlzbuKAmXQgIGxhcmdlICBlbm91Z2ggIHRvICBob2xkIHRoZSBjb3B5 LCB0aGUgcmVzdWx0aW5nIHN0cmluZyBpcw0KICAgICAgICAgICAgICAgdHJ1bmNhdGVkIChi dXQgaXQgaXMgZ3VhcmFudGVlZCB0byAgYmUgIG51bGzigJB0ZXJtaW5hdGVkKS4gICBUaGV5 DQogICAgICAgICAgICAgICByZXR1cm4gIHRoZSAgbGVuZ3RoICBvZiAgdGhlICB0b3RhbCBz dHJpbmcgdGhleSB0cmllZCB0byBjcmVhdGUuDQogICAgICAgICAgICAgICBUaGVzZSBmdW5j dGlvbnMgZm9yY2UgYSBTSUdTRUdWIGlmIHRoZSAgc3JjICBwb2ludGVyICBpcyAgbm90ICBh DQogICAgICAgICAgICAgICBzdHJpbmcuDQoNCiAgICAgICAgICAgICAgIHN0cGVjcHl4KDMp IGlzIGEgZmFzdGVyIGFsdGVybmF0aXZlIHRvIHRoZXNlIGZ1bmN0aW9ucy4NCg0KICAgICAg ICBzdHBuY3B5KDMpDQogICAgICAgICAgICAgICBUaGlzICBmdW5jdGlvbiAgY29waWVzIHRo ZSBpbnB1dCBzdHJpbmcgaW50byBhIGRlc3RpbmF0aW9uIG51bGzigJANCiAgICAgICAgICAg ICAgIHBhZGRlZCBjaGFyYWN0ZXIgc2VxdWVuY2UgaW4gYSBmaXhlZOKAkHdpZHRoIGJ1ZmZl ci4gIElmIHRoZSAgZGVz4oCQDQogICAgICAgICAgICAgICB0aW5hdGlvbiBidWZmZXIsIGxp bWl0ZWQgYnkgaXRzIHNpemUsIGlzbuKAmXQgbGFyZ2UgZW5vdWdoIHRvIGhvbGQNCiAgICAg ICAgICAgICAgIHRoZSAgY29weSwgdGhlIHJlc3VsdGluZyBjaGFyYWN0ZXIgc2VxdWVuY2Ug aXMgdHJ1bmNhdGVkLiAgU2luY2UNCiAgICAgICAgICAgICAgIGl0IGNyZWF0ZXMgYSBjaGFy YWN0ZXIgc2VxdWVuY2UsIGl0IGRvZXNu4oCZdCBuZWVkIHRvIHdyaXRlIGEgdGVy4oCQDQog ICAgICAgICAgICAgICBtaW5hdGluZyBudWxsIGJ5dGUuICBJdOKAmXMgaW1wb3NzaWJsZSB0 byAgZGlzdGluZ3Vpc2ggIHRydW5jYXRpb24NCiAgICAgICAgICAgICAgIGFmdGVyICB0aGUg IGNhbGwsICBmcm9tICBhIGNoYXJhY3RlciBzZXF1ZW5jZSB0aGF0IGp1c3QgZml0cyB0aGUN CiAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uIGJ1ZmZlcjsgIHRydW5jYXRpb24gIHNob3Vs ZCAgYmUgIGRldGVjdGVkICBmcm9tICB0aGUNCiAgICAgICAgICAgICAgIGxlbmd0aCBvZiB0 aGUgb3JpZ2luYWwgc3RyaW5nLg0KDQogICAgICAgIHN0cm5jcHkoMykNCiAgICAgICAgICAg ICAgIFRoaXMgIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBzdHBuY3B5KDMpIGV4Y2VwdCBm b3IgdGhlIHVzZWxlc3MNCiAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS4NCg0KICAgICAg ICAgICAgICAgc3RwbmNweSgzKSBpcyBhIG1vcmUgdXNlZnVsIGFsdGVybmF0aXZlIHRvIHRo aXMgZnVuY3Rpb24uDQoNCiAgICAgICAgenVzdHIydXN0cCgzKQ0KICAgICAgICAgICAgICAg VGhpcyBmdW5jdGlvbiBjb3BpZXMgdGhlIGlucHV0IGNoYXJhY3RlciBzZXF1ZW5jZSBjb250 YWluZWQgaW4gYQ0KICAgICAgICAgICAgICAgbnVsbOKAkHBhZGRlZCB3aXhlZOKAkHdpZHRo IGJ1ZmZlciwgaW50byBhIGRlc3RpbmF0aW9uIGNoYXJhY3RlciBzZeKAkA0KICAgICAgICAg ICAgICAgcXVlbmNlLiAgVGhlIHByb2dyYW1tZXIgaXMgcmVzcG9uc2libGUgZm9yIGFsbG9j YXRpbmcgIGEgIGJ1ZmZlcg0KICAgICAgICAgICAgICAgbGFyZ2UgZW5vdWdoLiAgSXQgcmV0 dXJucyBhIHBvaW50ZXIgc3VpdGFibGUgZm9yIGNoYWluaW5nLg0KDQogICAgICAgICAgICAg ICBBICB0cnVuY2F0aW5nICB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gZG9lc27igJl0IGV4 aXN0LCBzaW5jZSB0aGUNCiAgICAgICAgICAgICAgIHNpemUgb2YgdGhlIG9yaWdpbmFsIGNo YXJhY3RlciBzZXF1ZW5jZSBpcyBhbHdheXMga25vd24sICBzbyAgaXQNCiAgICAgICAgICAg ICAgIHdvdWxkbuKAmXQgYmUgdmVyeSB1c2VmdWwuDQoNCiAgICAgICAgICAgICAgIFRoaXMg ZnVuY3Rpb24gaXMgbm90IHByb3ZpZGVkIGJ5IGFueSBsaWJyYXJ5OyBTZWUgRVhBTVBMRVMg Zm9yIGENCiAgICAgICAgICAgICAgIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbi4NCg0KICAg ICAgICB6dXN0cjJzdHAoMykNCiAgICAgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gY29waWVz IHRoZSBpbnB1dCBjaGFyYWN0ZXIgc2VxdWVuY2UgY29udGFpbmVkIGluIGENCiAgICAgICAg ICAgICAgIG51bGzigJBwYWRkZWQgIHdpeGVk4oCQd2lkdGggYnVmZmVyLCBpbnRvIGEgZGVz dGluYXRpb24gc3RyaW5nLiAgVGhlDQogICAgICAgICAgICAgICBwcm9ncmFtbWVyIGlzIHJl c3BvbnNpYmxlIGZvciBhbGxvY2F0aW5nIGEgYnVmZmVyIGxhcmdlICBlbm91Z2guDQogICAg ICAgICAgICAgICBJdCByZXR1cm5zIGEgcG9pbnRlciBzdWl0YWJsZSBmb3IgY2hhaW5pbmcu DQoNCiAgICAgICAgICAgICAgIEEgIHRydW5jYXRpbmcgIHZlcnNpb24gb2YgdGhpcyBmdW5j dGlvbiBkb2VzbuKAmXQgZXhpc3QsIHNpbmNlIHRoZQ0KICAgICAgICAgICAgICAgc2l6ZSBv ZiB0aGUgb3JpZ2luYWwgY2hhcmFjdGVyIHNlcXVlbmNlIGlzIGFsd2F5cyBrbm93biwgIHNv ICBpdA0KICAgICAgICAgICAgICAgd291bGRu4oCZdCBiZSB2ZXJ5IHVzZWZ1bC4NCg0KICAg ICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBpcyBub3QgcHJvdmlkZWQgYnkgYW55IGxpYnJh cnk7IFNlZSBFWEFNUExFUyBmb3IgYQ0KICAgICAgICAgICAgICAgcmVmZXJlbmNlIGltcGxl bWVudGF0aW9uLg0KDQogICAgICAgIHN0cm5jYXQoMykNCiAgICAgICAgICAgICAgIERvICBu b3QgIGNvbmZ1c2UgdGhpcyBmdW5jdGlvbiB3aXRoIHN0cm5jcHkoMyk7IHRoZXkgYXJlIG5v dCByZeKAkA0KICAgICAgICAgICAgICAgbGF0ZWQgYXQgYWxsLg0KDQogICAgICAgICAgICAg ICBUaGlzIGZ1bmN0aW9uIGNhdGVuYXRlcyB0aGUgaW5wdXQgY2hhcmFjdGVyICBzZXF1ZW5j ZSAgY29udGFpbmVkDQogICAgICAgICAgICAgICBpbiAgYSBudWxs4oCQcGFkZGVkIHdpeGVk 4oCQd2lkdGggYnVmZmVyLCBpbnRvIGEgZGVzdGluYXRpb24gc3RyaW5nLg0KICAgICAgICAg ICAgICAgVGhlIHByb2dyYW1tZXIgaXMgcmVzcG9uc2libGUgIGZvciAgYWxsb2NhdGluZyAg YSAgYnVmZmVyICBsYXJnZQ0KICAgICAgICAgICAgICAgZW5vdWdoLiAgVGhlIHJldHVybiB2 YWx1ZSBpcyB1c2VsZXNzLg0KDQogICAgICAgICAgICAgICB6dXN0cjJzdHAoMykgaXMgYSBm YXN0ZXIgYWx0ZXJuYXRpdmUgdG8gdGhpcyBmdW5jdGlvbi4NCg0KICAgICAgICB1c3RwY3B5 KDMpDQogICAgICAgICAgICAgICBUaGlzICBmdW5jdGlvbiAgY29waWVzICB0aGUgaW5wdXQg Y2hhcmFjdGVyIHNlcXVlbmNlLCBsaW1pdGVkIGJ5DQogICAgICAgICAgICAgICBpdHMgbGVu Z3RoLCBpbnRvIGEgZGVzdGluYXRpb24gY2hhcmFjdGVyIHNlcXVlbmNlLiAgVGhlIHByb2dy YW3igJANCiAgICAgICAgICAgICAgIG1lciBpcyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGlu ZyBhIGJ1ZmZlciBsYXJnZSBlbm91Z2guICBJdCByZeKAkA0KICAgICAgICAgICAgICAgdHVy bnMgYSBwb2ludGVyIHN1aXRhYmxlIGZvciBjaGFpbmluZy4NCg0KICAgICAgICB1c3RyMnN0 cCgzKQ0KICAgICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBjb3BpZXMgdGhlIGlucHV0IGNo YXJhY3RlciAgc2VxdWVuY2UsICBsaW1pdGVkICBieQ0KICAgICAgICAgICAgICAgaXRzICBs ZW5ndGgsICBpbnRvICBhIGRlc3RpbmF0aW9uIHN0cmluZy4gIFRoZSBwcm9ncmFtbWVyIGlz IHJl4oCQDQogICAgICAgICAgICAgICBzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgYSBidWZm ZXIgbGFyZ2UgZW5vdWdoLiAgIEl0ICByZXR1cm5zICBhDQogICAgICAgICAgICAgICBwb2lu dGVyIHN1aXRhYmxlIGZvciBjaGFpbmluZy4NCg0KUkVUVVJOIFZBTFVFDQogICAgICAgIFRo ZSAgZm9sbG93aW5nICBmdW5jdGlvbnMgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgdGVybWlu YXRpbmcgbnVsbCBieXRlDQogICAgICAgIGluIHRoZSBkZXN0aW5hdGlvbiBzdHJpbmcuDQoN CiAgICAgICAg4oCiICBzdHBjcHkoMykNCiAgICAgICAg4oCiICB1c3RyMnN0cCgzKQ0KICAg ICAgICDigKIgIHp1c3RyMnN0cCgzKQ0KDQogICAgICAgIFRoZSBmb2xsb3dpbmcgZnVuY3Rp b25zIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHRlcm1pbmF0aW5nICBudWxsICBieXRlDQog ICAgICAgIGluIHRoZSBkZXN0aW5hdGlvbiBzdHJpbmcsIGV4Y2VwdCB3aGVuIHRydW5jYXRp b24gb2NjdXJzOyBpZiB0cnVuY2F0aW9uDQogICAgICAgIG9jY3VycywgIHRoZXkgIHJldHVy biAgYSBwb2ludGVyIHRvIG9uZSBwYXN0IHRoZSBlbmQgb2YgdGhlIGRlc3RpbmF0aW9uDQog ICAgICAgIGJ1ZmZlciAocGFzdF9lbmQpLg0KDQogICAgICAgIOKAoiAgc3RwZWNweSgzKSwg c3RwZWNweXgoMykNCg0KICAgICAgICBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIHJldHVybnMg YSBwb2ludGVyIHRvIG9uZSBhZnRlciB0aGUgbGFzdCAgY2hhcmFj4oCQDQogICAgICAgIHRl ciAgaW4gIHRoZSBkZXN0aW5hdGlvbiBjaGFyYWN0ZXIgc2VxdWVuY2U7IGlmIHRydW5jYXRp b24gb2NjdXJzLCB0aGF0DQogICAgICAgIHBvaW50ZXIgaXMgZXF1aXZhbGVudCB0byBhIHBv aW50ZXIgdG8gb25lIHBhc3QgdGhlIGVuZCBvZiB0aGUgIGRlc3RpbmHigJANCiAgICAgICAg dGlvbiBidWZmZXIuDQoNCiAgICAgICAg4oCiICBzdHBuY3B5KDMpDQoNCiAgICAgICAgVGhl ICBmb2xsb3dpbmcgZnVuY3Rpb25zIHJldHVybiBhIHBvaW50ZXIgdG8gb25lIGFmdGVyIHRo ZSBsYXN0IGNoYXJhY+KAkA0KICAgICAgICB0ZXIgaW4gdGhlIGRlc3RpbmF0aW9uIGNoYXJh Y3RlciBzZXF1ZW5jZS4NCg0KICAgICAgICDigKIgIHp1c3RyMnVzdHAoMykNCiAgICAgICAg 4oCiICB1c3RwY3B5KDMpDQoNCiAgICAgICAgVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgcmV0 dXJuIHRoZSBsZW5ndGggb2YgdGhlIHRvdGFsIHN0cmluZyB0aGF0IHRoZXkNCiAgICAgICAg dHJpZWQgdG8gY3JlYXRlIChhcyBpZiB0cnVuY2F0aW9uIGRpZG7igJl0IG9jY3VyKS4NCg0K ICAgICAgICDigKIgIHN0cmxjcHkoM2JzZCksIHN0cmxjYXQoM2JzZCkNCg0KICAgICAgICBU aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyByZXR1cm4gdGhlIGRzdCBwb2ludGVyLCB3aGljaCBp cyB1c2VsZXNzLg0KDQogICAgICAgIOKAoiAgc3RyY3B5KDMpLCBzdHJjYXQoMykNCiAgICAg ICAg4oCiICBzdHJuY3B5KDMpDQogICAgICAgIOKAoiAgc3RybmNhdCgzKQ0KDQpOT1RFUw0K ICAgICAgICBUaGUgTGludXgga2VybmVsIGhhcyBhbiBpbnRlcm5hbCBmdW5jdGlvbiBmb3Ig Y29weWluZyBzdHJpbmdzLCB3aGljaCBpcw0KICAgICAgICBzaW1pbGFyIHRvIHN0cGVjcHko MyksIGV4Y2VwdCB0aGF0IGl0IGNhbuKAmXQgYmUgY2hhaW5lZDoNCg0KICAgICAgICBzdHJz Y3B5KDkpDQogICAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGNvcGllcyB0aGUgaW5wdXQg c3RyaW5nIGludG8gYSBkZXN0aW5hdGlvbiBzdHJpbmcuDQogICAgICAgICAgICAgICBJZiB0 aGUgZGVzdGluYXRpb24gYnVmZmVyLCBsaW1pdGVkICBieSAgaXRzICBzaXplLCAgaXNu4oCZ dCAgbGFyZ2UNCiAgICAgICAgICAgICAgIGVub3VnaCAgdG8gaG9sZCB0aGUgY29weSwgdGhl IHJlc3VsdGluZyBzdHJpbmcgaXMgdHJ1bmNhdGVkIChidXQNCiAgICAgICAgICAgICAgIGl0 IGlzIGd1YXJhbnRlZWQgdG8gYmUgbnVsbOKAkHRlcm1pbmF0ZWQpLiAgSXQgcmV0dXJucyB0 aGUgIGxlbmd0aA0KICAgICAgICAgICAgICAgb2YgdGhlIGRlc3RpbmF0aW9uIHN0cmluZywg b3IgLUUyQklHIG9uIHRydW5jYXRpb24uDQoNCiAgICAgICAgICAgICAgIHN0cGVjcHkoMykg aXMgYSBzaW1wbGVyIGFuZCBmYXN0ZXIgYWx0ZXJuYXRpdmUgdG8gdGhpcyBmdW5jdGlvbi4N Cg0KQ0FWRUFUUw0KICAgICAgICBEb27igJl0ICBtaXggIGNoYWluIGNhbGxzIHRvIHRydW5j YXRpbmcgYW5kIG5vbuKAkHRydW5jYXRpbmcgZnVuY3Rpb25zLiAgSXQNCiAgICAgICAgaXMg Y29uY2VwdHVhbGx5IHdyb25nIHVubGVzcyB5b3Uga25vdyB0aGF0IHRoZSBmaXJzdCAgcGFy dCAgb2YgIGEgIGNvcHkNCiAgICAgICAgd2lsbCAgYWx3YXlzICBmaXQuICBBbnl3YXksIHRo ZSBwZXJmb3JtYW5jZSBkaWZmZXJlbmNlIHdpbGwgcHJvYmFibHkgYmUNCiAgICAgICAgbmVn bGlnaWJsZSwgc28gaXQgd2lsbCBwcm9iYWJseSBiZSBtb3JlIGNsZWFyIGlmIHlvdSB1c2Ug Y29uc2lzdGVudCBzZeKAkA0KICAgICAgICBtYW50aWNzOiBlaXRoZXIgdHJ1bmNhdGluZyBv ciBub27igJB0cnVuY2F0aW5nLiAgQ2FsbGluZyBhIG5vbuKAkHRydW5jYXRpbmcNCiAgICAg ICAgZnVuY3Rpb24gYWZ0ZXIgYSB0cnVuY2F0aW5nIG9uZSBpcyBuZWNlc3NhcmlseSB3cm9u Zy4NCg0KQlVHUw0KICAgICAgICBBbGwgY2F0ZW5hdGlvbiBmdW5jdGlvbnMgc2hhcmUgdGhl IHNhbWUgcGVyZm9ybWFuY2UgIHByb2JsZW06ICBTaGxlbWllbA0KICAgICAgICB0aGUgICAg ICAgICBwYWludGVyICAgICAgICAg4p+oaHR0cHM6Ly93d3cuam9lbG9uc29mdHdhcmUuY29t LzIwMDEvMTIvMTEvDQogICAgICAgIGJhY2stdG8tYmFzaWNzL+KfqS4NCg0KRVhBTVBMRVMN CiAgICAgICAgVGhlIGZvbGxvd2luZyBhcmUgZXhhbXBsZXMgb2YgY29ycmVjdCB1c2Ugb2Yg ZWFjaCBvZiB0aGVzZSBmdW5jdGlvbnMuDQoNCiAgICAgICAgc3RwY3B5KDMpDQogICAgICAg ICAgICAgICBwID0gYnVmOw0KICAgICAgICAgICAgICAgcCA9IHN0cGNweShwLCAiSGVsbG8g Iik7DQogICAgICAgICAgICAgICBwID0gc3RwY3B5KHAsICJ3b3JsZCIpOw0KICAgICAgICAg ICAgICAgcCA9IHN0cGNweShwLCAiISIpOw0KICAgICAgICAgICAgICAgbGVuID0gcCAtIGJ1 ZjsNCiAgICAgICAgICAgICAgIHB1dHMoYnVmKTsNCg0KICAgICAgICBzdHJjcHkoMykNCiAg ICAgICAgc3RyY2F0KDMpDQogICAgICAgICAgICAgICBzdHJjcHkoYnVmLCAiSGVsbG8gIik7 DQogICAgICAgICAgICAgICBzdHJjYXQoYnVmLCAid29ybGQiKTsNCiAgICAgICAgICAgICAg IHN0cmNhdChidWYsICIhIik7DQogICAgICAgICAgICAgICBsZW4gPSBzdHJsZW4oYnVmKTsN CiAgICAgICAgICAgICAgIHB1dHMoYnVmKTsNCg0KICAgICAgICBzdHBlY3B5KDMpDQogICAg ICAgIHN0cGVjcHl4KDMpDQogICAgICAgICAgICAgICBwYXN0X2VuZCA9IGJ1ZiArIHNpemVv ZihidWYpOw0KICAgICAgICAgICAgICAgcCA9IGJ1ZjsNCiAgICAgICAgICAgICAgIHAgPSBz dHBlY3B5KHAsIHBhc3RfZW5kLCAiSGVsbG8gIik7DQogICAgICAgICAgICAgICBwID0gc3Rw ZWNweShwLCBwYXN0X2VuZCwgIndvcmxkIik7DQogICAgICAgICAgICAgICBwID0gc3RwZWNw eShwLCBwYXN0X2VuZCwgIiEiKTsNCiAgICAgICAgICAgICAgIGlmIChwID09IHBhc3RfZW5k KSB7DQogICAgICAgICAgICAgICAgICAgcC0tOw0KICAgICAgICAgICAgICAgICAgIGdvdG8g dG9vbG9uZzsNCiAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgIGxlbiA9IHAgLSBi dWY7DQogICAgICAgICAgICAgICBwdXRzKGJ1Zik7DQoNCiAgICAgICAgc3RybGNweSgzYnNk KQ0KICAgICAgICBzdHJsY2F0KDNic2QpDQogICAgICAgICAgICAgICBpZiAoc3RybGNweShi dWYsICJIZWxsbyAiLCBzaXplb2YoYnVmKSkgPj0gc2l6ZW9mKGJ1ZikpDQogICAgICAgICAg ICAgICAgICAgZ290byB0b29sb25nOw0KICAgICAgICAgICAgICAgaWYgKHN0cmxjYXQoYnVm LCAid29ybGQiLCBzaXplb2YoYnVmKSkgPj0gc2l6ZW9mKGJ1ZikpDQogICAgICAgICAgICAg ICAgICAgZ290byB0b29sb25nOw0KICAgICAgICAgICAgICAgbGVuID0gc3RybGNhdChidWYs ICIhIiwgc2l6ZW9mKGJ1ZikpOw0KICAgICAgICAgICAgICAgaWYgKGxlbiA+PSBzaXplb2Yo YnVmKSkNCiAgICAgICAgICAgICAgICAgICBnb3RvIHRvb2xvbmc7DQogICAgICAgICAgICAg ICBwdXRzKGJ1Zik7DQoNCiAgICAgICAgc3Ryc2NweSg5KQ0KICAgICAgICAgICAgICAgbGVu ID0gc3Ryc2NweShidWYsICJIZWxsbyB3b3JsZCEiLCBzaXplb2YoYnVmKSk7DQogICAgICAg ICAgICAgICBpZiAobGVuID09IC1FMkJJRykNCiAgICAgICAgICAgICAgICAgICBnb3RvIHRv b2xvbmc7DQogICAgICAgICAgICAgICBwdXRzKGJ1Zik7DQoNCiAgICAgICAgc3RwbmNweSgz KQ0KICAgICAgICAgICAgICAgZW5kID0gc3RwbmNweShidWYsICJIZWxsbyB3b3JsZCEiLCBz aXplb2YoYnVmKSk7DQogICAgICAgICAgICAgICBpZiAoc2l6ZW9mKGJ1ZikgPCBzdHJsZW4o IkhlbGxvIHdvcmxkISIpKQ0KICAgICAgICAgICAgICAgICAgIGdvdG8gdG9vbG9uZzsNCiAg ICAgICAgICAgICAgIGxlbiA9IGVuZCAtIGJ1ZjsNCiAgICAgICAgICAgICAgIGZvciAoc2l6 ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKGJ1Zik7IGkrKykNCiAgICAgICAgICAgICAgICAgICBw dXRjaGFyKGJ1ZltpXSk7DQoNCiAgICAgICAgc3RybmNweSgzKQ0KICAgICAgICAgICAgICAg c3RybmNweShidWYsICJIZWxsbyB3b3JsZCEiLCBzaXplb2YoYnVmKSk7DQogICAgICAgICAg ICAgICBpZiAoc2l6ZW9mKGJ1ZikgPCBzdHJsZW4oIkhlbGxvIHdvcmxkISIpKQ0KICAgICAg ICAgICAgICAgICAgIGdvdG8gdG9vbG9uZzsNCiAgICAgICAgICAgICAgIGxlbiA9IHN0cm5s ZW4oYnVmLCBzaXplb2YoYnVmKSk7DQogICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g MDsgaSA8IHNpemVvZihidWYpOyBpKyspDQogICAgICAgICAgICAgICAgICAgcHV0Y2hhcihi dWZbaV0pOw0KDQogICAgICAgIHp1c3RyMnVzdHAoMykNCiAgICAgICAgICAgICAgIHAgPSBi dWY7DQogICAgICAgICAgICAgICBwID0genVzdHIydXN0cChwLCAiSGVsbG8gIiwgNik7DQog ICAgICAgICAgICAgICBwID0genVzdHIydXN0cChwLCAid29ybGQiLCA0Mik7ICAvLyBQYWRk aW5nIG51bGwgYnl0ZXMgaWdub3JlZC4NCiAgICAgICAgICAgICAgIHAgPSB6dXN0cjJ1c3Rw KHAsICIhIiwgMSk7DQogICAgICAgICAgICAgICBsZW4gPSBwIC0gYnVmOw0KICAgICAgICAg ICAgICAgcHJpbnRmKCIlLipzXG4iLCAoaW50KSBsZW4sIGJ1Zik7DQoNCiAgICAgICAgenVz dHIyc3RwKDMpDQogICAgICAgICAgICAgICBwID0gYnVmOw0KICAgICAgICAgICAgICAgcCA9 IHp1c3RyMnN0cChwLCAiSGVsbG8gIiwgNik7DQogICAgICAgICAgICAgICBwID0genVzdHIy c3RwKHAsICJ3b3JsZCIsIDQyKTsgIC8vIFBhZGRpbmcgbnVsbCBieXRlcyBpZ25vcmVkLg0K ICAgICAgICAgICAgICAgcCA9IHp1c3RyMnN0cChwLCAiISIsIDEpOw0KICAgICAgICAgICAg ICAgbGVuID0gcCAtIGJ1ZjsNCiAgICAgICAgICAgICAgIHB1dHMoYnVmKTsNCg0KICAgICAg ICBzdHJuY2F0KDMpDQogICAgICAgICAgICAgICBidWZbMF0gPSAnXDAnOyAgLy8gVGhlcmXi gJlzIG5vIOKAmWNweeKAmSBmdW5jdGlvbiB0byB0aGlzIOKAmWNhdOKAmS4NCiAgICAgICAg ICAgICAgIHN0cm5jYXQoYnVmLCAiSGVsbG8gIiwgNik7DQogICAgICAgICAgICAgICBzdHJu Y2F0KGJ1ZiwgIndvcmxkIiwgNDIpOyAgLy8gUGFkZGluZyBudWxsIGJ5dGVzIGlnbm9yZWQu DQogICAgICAgICAgICAgICBzdHJuY2F0KGJ1ZiwgIiEiLCAxKTsNCiAgICAgICAgICAgICAg IGxlbiA9IHN0cmxlbihidWYpOw0KICAgICAgICAgICAgICAgcHV0cyhidWYpOw0KDQogICAg ICAgIHVzdHBjcHkoMykNCiAgICAgICAgICAgICAgIHAgPSBidWY7DQogICAgICAgICAgICAg ICBwID0gdXN0cGNweShwLCAiSGVsbG8gIiwgNik7DQogICAgICAgICAgICAgICBwID0gdXN0 cGNweShwLCAid29ybGQiLCA1KTsNCiAgICAgICAgICAgICAgIHAgPSB1c3RwY3B5KHAsICIh IiwgMSk7DQogICAgICAgICAgICAgICBsZW4gPSBwIC0gYnVmOw0KICAgICAgICAgICAgICAg cHJpbnRmKCIlLipzXG4iLCAoaW50KSBsZW4sIGJ1Zik7DQoNCiAgICAgICAgdXN0cjJzdHAo MykNCiAgICAgICAgICAgICAgIHAgPSBidWY7DQogICAgICAgICAgICAgICBwID0gdXN0cjJz dHAocCwgIkhlbGxvICIsIDYpOw0KICAgICAgICAgICAgICAgcCA9IHVzdHIyc3RwKHAsICJ3 b3JsZCIsIDUpOw0KICAgICAgICAgICAgICAgcCA9IHVzdHIyc3RwKHAsICIhIiwgMSk7DQog ICAgICAgICAgICAgICBsZW4gPSBwIC0gYnVmOw0KICAgICAgICAgICAgICAgcHV0cyhidWYp Ow0KDQogICAgSW1wbGVtZW50YXRpb25zDQogICAgICAgIEhlcmUgYXJlIHJlZmVyZW5jZSBp bXBsZW1lbnRhdGlvbnMgZm9yIGZ1bmN0aW9ucyBub3QgcHJvdmlkZWQgYnkgbGliYy4NCg0K ICAgICAgICAgICAgLyogVGhpcyBjb2RlIGlzIGluIHRoZSBwdWJsaWMgZG9tYWluLiAqLw0K DQogICAgICAgICAgICBjaGFyICoNCiAgICAgICAgICAgIHN0cGVjcHkoY2hhciAqZHN0LCBj aGFyIHBhc3RfZW5kWzBdLCBjb25zdCBjaGFyICpyZXN0cmljdCBzcmMpDQogICAgICAgICAg ICB7DQogICAgICAgICAgICAgICAgY2hhciAqcDsNCg0KICAgICAgICAgICAgICAgIGlmIChk c3QgPT0gcGFzdF9lbmQpDQogICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXN0X2VuZDsN Cg0KICAgICAgICAgICAgICAgIHAgPSBtZW1jY3B5KGRzdCwgc3JjLCAnXDAnLCBwYXN0X2Vu ZCAtIGRzdCk7DQogICAgICAgICAgICAgICAgaWYgKHAgIT0gTlVMTCkNCiAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIHAgLSAxOw0KDQogICAgICAgICAgICAgICAgLyogdHJ1bmNhdGlv biBkZXRlY3RlZCAqLw0KICAgICAgICAgICAgICAgIHBhc3RfZW5kWy0xXSA9ICdcMCc7DQog ICAgICAgICAgICAgICAgcmV0dXJuIHBhc3RfZW5kOw0KICAgICAgICAgICAgfQ0KDQogICAg ICAgICAgICBjaGFyICoNCiAgICAgICAgICAgIHN0cGVjcHl4KGNoYXIgKmRzdCwgY2hhciBw YXN0X2VuZFswXSwgY29uc3QgY2hhciAqcmVzdHJpY3Qgc3JjKQ0KICAgICAgICAgICAgew0K ICAgICAgICAgICAgICAgIGlmIChzcmNbc3RybGVuKHNyYyldICE9ICdcMCcpDQogICAgICAg ICAgICAgICAgICAgIHJhaXNlKFNJR1NFR1YpOw0KDQogICAgICAgICAgICAgICAgcmV0dXJu IHN0cGVjcHkoZHN0LCBwYXN0X2VuZCwgc3JjKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAg ICAgICAgY2hhciAqDQogICAgICAgICAgICB6dXN0cjJ1c3RwKGNoYXIgKnJlc3RyaWN0IGRz dCwgY29uc3QgY2hhciAqcmVzdHJpY3Qgc3JjLCBzaXplX3Qgc3opDQogICAgICAgICAgICB7 DQogICAgICAgICAgICAgICAgcmV0dXJuIHVzdHBjcHkoZHN0LCBzcmMsIHN0cm5sZW4oc3Jj LCBzeikpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBjaGFyICoNCiAgICAgICAg ICAgIHp1c3RyMnN0cChjaGFyICpyZXN0cmljdCBkc3QsIGNvbnN0IGNoYXIgKnJlc3RyaWN0 IHNyYywgc2l6ZV90IHN6KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGNoYXIg ICplbmQ7DQoNCiAgICAgICAgICAgICAgICBlbmQgPSB6dXN0cjJ1c3RwKGRzdCwgc3JjLCBz eik7DQogICAgICAgICAgICAgICAgKmVuZCA9ICdcMCc7DQoNCiAgICAgICAgICAgICAgICBy ZXR1cm4gZW5kOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBjaGFyICoNCiAgICAg ICAgICAgIHVzdHBjcHkoY2hhciAqcmVzdHJpY3QgZHN0LCBjb25zdCBjaGFyICpyZXN0cmlj dCBzcmMsIHNpemVfdCBsZW4pDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgcmV0 dXJuIG1lbXBjcHkoZHN0LCBzcmMsIGxlbik7DQogICAgICAgICAgICB9DQoNCiAgICAgICAg ICAgIGNoYXIgKg0KICAgICAgICAgICAgdXN0cjJzdHAoY2hhciAqcmVzdHJpY3QgZHN0LCBj b25zdCBjaGFyICpyZXN0cmljdCBzcmMsIHNpemVfdCBsZW4pDQogICAgICAgICAgICB7DQog ICAgICAgICAgICAgICAgY2hhciAgKmVuZDsNCg0KICAgICAgICAgICAgICAgIGVuZCA9IHVz dHBjcHkoZHN0LCBzcmMsIGxlbik7DQogICAgICAgICAgICAgICAgKmVuZCA9ICdcMCc7DQoN CiAgICAgICAgICAgICAgICByZXR1cm4gZW5kOw0KICAgICAgICAgICAgfQ0KDQpTRUUgQUxT Tw0KICAgICAgICBiemVybygzKSwgbWVtY3B5KDMpLCBtZW1jY3B5KDMpLCBtZW1wY3B5KDMp LCBzdHBjcHkoMyksICBzdHJsY3B5KDNic2QpLA0KICAgICAgICBzdHJuY2F0KDMpLCBzdHJw Y3B5KDMpLCBzdHJpbmcoMykNCg0KTGludXggbWFu4oCQcGFnZXMgKHVucmVsZWFzZWQpICAg ICAgICAoZGF0ZSkgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nX2NvcHkoNykNCg0KDQot LSANCjxodHRwOi8vd3d3LmFsZWphbmRyby1jb2xvbWFyLmVzLz4NCg== --------------19Z2G0mETMAiiqxE8lPdLBZR-- --------------RBvf3tS5bYMQzRA4odK0F87d Content-Type: application/pgp-signature; name="OpenPGP_signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="OpenPGP_signature" -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEE6jqH8KTroDDkXfJAnowa+77/2zIFAmOaao4ACgkQnowa+77/ 2zKGFQ//XlsPK3h5mXfI+qRir0EDOIK8RO4ZLfP48ral+15znkIO777N7LdL2oGN KhAcbBDKLwWcsKTRjgRcdHrmBaaMf7vB+2UwwG4+1LStfY77+7FfSjGkI+wT+6k+ yfoKAsb6M0q+aqqGNy0wvA25B+ggZfb8SNO5I1fVmbC/weDPdexuILX05fdbZmQS WW6nRst2xeyH4KQuwxH7ggYWDkETSm21z+3QDq5+hW3HNMCSM3RZZlFUfIwrEYEt XKC7HdyJcV4g4NmN2qWh2S8F/3E+BUq3cQ/Cp8O7yFk+RlngQIvYF9qzdjsXGnMe z9ayGZoSw3Cw0M89IQi+c8x4usj2jnrnEUC1wjGzPUO1bhywslnCoQf1XFke/Afu lh8ZwvNme/9CGrC84e+hV9tH1FOB1dPdWgwtp2Na6MwbNY+8HJuNHHh22Fbk3FYy cYdXbu0FrPLC68mauA/s96bEP22Fl8fIUkvSpT160TbnYbWXq9aAuG80OoRkYipw dutWC3uUwX10BlUvbuJgwkQYSQ5GeMl+W0N5rKYzo63KWATcI/mLjD8mNZ5+eRF8 fEhEN0lw9buw2AqiLpIuHpVHMOb6squSMpdArBZ9GIm+4wslqbyK93wmZr2h0Ygi 8TyrMWnLYuhNsKdKvo8bqMHCy2Oe0/fWAIqJQzNEDGd6Zqli4hU= =vxQS -----END PGP SIGNATURE----- --------------RBvf3tS5bYMQzRA4odK0F87d--