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 88BFDC4332F for ; Mon, 12 Dec 2022 00:32:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230431AbiLLAcq (ORCPT ); Sun, 11 Dec 2022 19:32:46 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44438 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230466AbiLLAcp (ORCPT ); Sun, 11 Dec 2022 19:32:45 -0500 Received: from mail-wr1-x436.google.com (mail-wr1-x436.google.com [IPv6:2a00:1450:4864:20::436]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B108AB48 for ; Sun, 11 Dec 2022 16:32:41 -0800 (PST) Received: by mail-wr1-x436.google.com with SMTP id h16so1564726wrz.12 for ; Sun, 11 Dec 2022 16:32:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=in-reply-to:references:to:from:content-language:subject:user-agent :mime-version:date:message-id:from:to:cc:subject:date:message-id :reply-to; bh=lq2q2pt37sErEj8ngkUzGprjJUAUde9wYzxt+GLLTrM=; b=GZTOLLZBSTj0ovPrZ6ZT6Pw9hDT/nKlmiL2V5Be8tPGxLl0uwoXBYh/EfVDjRAQuov 1WPGX6Xn5dkKGF5Hx5tHJiy7Udz/1iy1qXm6Tg0xY5RGaiWH9kLqLPnNA+pcEYPMY+eq GnRNLvmQXwxU3BC8ThybPr+k2d3kW5wfv3tbQxtTYIvXFnHlj/ux3KC9TFNc99BbZfOh MMvs6pz0Gl/PtT2dESM4lgAjSABOOgEFvyFTZ3AcZnVz8fLzKlh6TA4p72wi1iKkTo6+ rPyQ+2DZA+bxX0I48LWWD/dyduR3hiYJr1gx0JEQmuxjq+q7bakOlHW8bWpni+1VpNYK oRJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:references: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=lq2q2pt37sErEj8ngkUzGprjJUAUde9wYzxt+GLLTrM=; b=TJ9ZG6He1HRUzgzc4VcwNp0wpXQ2AQQpVovOtEzRv6KAfpTpfP+Ial1CxwJN5i34Zg SRiK7WCLmgn7GD9rSWvea32gaRIr6GNtFiIckAz/B2gHgseDpbPf78aQz+odGsNa4d27 bOn3d+8Tm6WzQ0C4mIniShWrVvSUiH1GOVE9wtN5PFRuh6OvF6x4vlZLTSEur1TkKAAC aGY54J7WOUIHQhyO8XVGY6oRJT3aT1cRirqUabhEGn8XtTr9GNkqzB7rxcVAJRwAKL3R gNK5Q6K+vKCK/pF5Owbv60dCOeVNFLkVXFJUoyRtl3znmwxCk1fl04V6uoE27A7xzEqs lS9g== X-Gm-Message-State: ANoB5pn0i9ocdWDZRxV8k7pYg3KHIZ+UFmnOs2abXNn4ejTzOVa3IHfD /ygwd+44YV2l8F/FL2wPI1IML662ZW0= X-Google-Smtp-Source: AA0mqf6VYxnXLLFpYhsKC8I49mTBjyO/4+32qqQRf0Oc29VURnDTLumsROLmFKwkNB4h8sHekNsgKw== X-Received: by 2002:a5d:5405:0:b0:24a:e56d:e2f with SMTP id g5-20020a5d5405000000b0024ae56d0e2fmr5162128wrv.24.1670805160018; Sun, 11 Dec 2022 16:32:40 -0800 (PST) Received: from [192.168.0.160] ([170.253.36.171]) by smtp.gmail.com with ESMTPSA id h17-20020a5d4fd1000000b0024246991121sm7213402wrw.116.2022.12.11.16.32.39 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 11 Dec 2022 16:32:39 -0800 (PST) Message-ID: <8884c39b-0d0a-852d-0045-3ae66e3b3b9e@gmail.com> Date: Mon, 12 Dec 2022 01:32:38 +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: string_copy(7): New manual page documenting string copying functions. Content-Language: en-US From: Alejandro Colomar To: linux-man References: <176225b0-4b0e-698b-b79e-f8ed78b4cf8c@gmail.com> In-Reply-To: <176225b0-4b0e-698b-b79e-f8ed78b4cf8c@gmail.com> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------E2UhQvTDWmHzRKJGGqkpEmgI" Precedence: bulk List-ID: X-Mailing-List: linux-man@vger.kernel.org This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------E2UhQvTDWmHzRKJGGqkpEmgI Content-Type: multipart/mixed; boundary="------------BOrl5BBbVsRKgkkj3iSOFjfA"; protected-headers="v1" From: Alejandro Colomar To: linux-man Message-ID: <8884c39b-0d0a-852d-0045-3ae66e3b3b9e@gmail.com> Subject: Re: string_copy(7): New manual page documenting string copying functions. References: <176225b0-4b0e-698b-b79e-f8ed78b4cf8c@gmail.com> In-Reply-To: <176225b0-4b0e-698b-b79e-f8ed78b4cf8c@gmail.com> --------------BOrl5BBbVsRKgkkj3iSOFjfA Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 DQoNCk9uIDEyLzEyLzIyIDAwOjU5LCBBbGVqYW5kcm8gQ29sb21hciB3cm90ZToNCj4gSGkg YWxsIQ0KPiANCj4gSSdtIHBsYW5uaW5nIHRvIGFkZCBhIG5ldyBtYW51YWwgcGFnZSB0aGF0 IGRvY3VtZW50cyBhbGwgc3RyaW5nIGNvcHlpbmcgDQo+IGZ1bmN0aW9ucy7CoCBJdCBjb3Zl cnMgbW9yZSBkZXRhaWwgdGhhbiBhbnkgb2YgdGhlIGV4aXN0aW5nIG1hbnVhbCBwYWdlcyAo YW5kIGluIA0KPiBmYWN0LCBJJ3ZlIGRpc2NvdmVyZWQgc29tZSBwcm9wZXJ0aWVzIG9mIHRo ZSBmdW5jdGlvbnMgZG9jdW1lbnRlZCB3aGlsZSB3b3JraW5nIA0KPiBvbiB0aGlzIHBhZ2Up LsKgIFRoZSBpbnRlbnRpb24gaXMgdG8gcmVtb3ZlIHRoZSBleGlzdGluZyBzZXBhcmF0ZSBt YW51YWwgcGFnZXMgDQo+IGZvciBhbGwgc3RyaW5nIGNvcHlpbmcgZnVuY3Rpb25zLCBhbmQg bWFrZSB0aGVtIGxpbmtzIHRvIHRoaXMgbmV3IHBhZ2UuwqAgSXQgDQo+IGludGVuZHMgdG8g YmUgdGhlIG9ubHkgcmVmZXJlbmNlIGRvY3VtZW50YXRpb24gZm9yIGNvcHlpbmcgc3RyaW5n cyBpbiBDLCBhbmQgDQo+IGhvcGVmdWxseSBmaXggdGhlIGhhbGYgY2VudHVyeSBvZiBzdWJv cHRpbWFsIHN0cmluZyBjb3B5aW5nIGxpYnJhcnkgd2l0aCB3aGljaCANCj4gd2UndmUgbGl2 ZWQuwqAgKFNheSBnb29kYnllIHRvIHN0ZDo6c3RyaW5nLCBoZXJlIGNvbWUgYmFjayBDIHN0 cmluZ3MgOykNCj4gDQo+IFRoZSBmb3JtYXR0ZWQgbWFudWFsIHBhZ2UgaXMgYmVsb3cuDQo+ IA0KPiBBbGV4DQo+IA0KPiBQLlMuOiBJJ20gc29ycnkgZm9yIHlvdXIgYmVsb3ZlZCBzdHJp bmcgY29weWluZyBmdW5jdGlvbihzKTsgaXQgaGFzIGhpZ2ggY2hhbmNlcyANCj4gb2YgYmVp bmcgZHJlYWRlZCBieSB0aGUgcGFnZSBiZWxvdy7CoCBOb3Qgc29ycnkuwqAgT2ggd2VsbCwg YXQgbGVhc3QgSSBqdXN0aWZpZWQgDQo+IGl0LCBvciBJIHRyaWVkIDotKQ0KPiANCj4gLS0t DQo+IA0KPiBzdHJpbmdfY29weSg3KcKgwqDCoMKgwqDCoMKgwqAgTWlzY2VsbGFuZW91cyBJ bmZvcm1hdGlvbiBNYW51YWzCoMKgwqDCoMKgwqDCoMKgIHN0cmluZ19jb3B5KDcpDQo+IA0K PiBOQU1FDQo+ICDCoMKgwqDCoMKgwqAgc3RwY3B5LMKgIHN0cGVjcHkswqAgc3RwZWNweXgs IHN0cmxjcHksIHN0cmxjYXQsIHN0cnNjcHksIHN0cmNweSwgc3RyY2F0LA0KPiAgwqDCoMKg wqDCoMKgIHN0cG5jcHksIHVzdHIyc3RwLCBzdHJuY3B5LCBzdHJuY2F0LCBtZW1wY3B5IC0g Y29weSBzdHJpbmdzDQo+IA0KPiBTWU5PUFNJUw0KPiAgwqDCoCAoTnVsbOKAkHRlcm1pbmF0 ZWQpIHN0cmluZ3MNCj4gIMKgwqDCoMKgwqDCoCAvLyBDaGFpbuKAkGNvcHkgYSBzdHJpbmcu DQo+ICDCoMKgwqDCoMKgwqAgY2hhciAqc3RwY3B5KGNoYXIgKnJlc3RyaWN0IGRzdCwgY29u c3QgY2hhciAqcmVzdHJpY3Qgc3JjKTsNCj4gDQo+ICDCoMKgwqDCoMKgwqAgLy8gQ2hhaW7i gJBjb3B5IGEgc3RyaW5nIHdpdGggdHJ1bmNhdGlvbiAobm90IGluIGxpYmMpLg0KPiAgwqDC oMKgwqDCoMKgIGNoYXIgKnN0cGVjcHkoY2hhciAqZHN0LCBjaGFyIHBhc3RfZW5kWzBdLCBj b25zdCBjaGFyICpyZXN0cmljdCBzcmMpOw0KPiANCj4gIMKgwqDCoMKgwqDCoCAvLyBDaGFp buKAkGNvcHkgYSBzdHJpbmcgd2l0aCB0cnVuY2F0aW9uIGFuZCBTSUdTRUdWIG9uIGludmFs aWQgaW5wdXQuDQo+ICDCoMKgwqDCoMKgwqAgY2hhciAqc3RwZWNweXgoY2hhciAqZHN0LCBj aGFyIHBhc3RfZW5kWzBdLCBjb25zdCBjaGFyICpyZXN0cmljdCBzcmMpOw0KPiANCj4gIMKg wqDCoMKgwqDCoCAvLyBDb3B5IGEgc3RyaW5nIHdpdGggdHJ1bmNhdGlvbiBhbmQgU0lHU0VH ViBvbiBpbnZhbGlkIGlucHV0Lg0KPiAgwqDCoMKgwqDCoMKgIFtbZGVwcmVjYXRlZF1dwqAg Ly8gVXNlIHN0cGVjcHl4KCkgaW5zdGVhZC4NCj4gIMKgwqDCoMKgwqDCoCBzaXplX3Qgc3Ry bGNweShjaGFyIGRzdFtyZXN0cmljdCAuc3pdLCBjb25zdCBjaGFyICpyZXN0cmljdCBzcmMs DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZV90 IHN6KTsNCj4gDQo+ICDCoMKgwqDCoMKgwqAgLy8gQ29uY2F0ZW5hdGUgYSBzdHJpbmcgd2l0 aCB0cnVuY2F0aW9uLg0KPiAgwqDCoMKgwqDCoMKgIFtbZGVwcmVjYXRlZF1dwqAgLy8gVXNl IHN0cGVjcHl4KCkgaW5zdGVhZC4NCj4gIMKgwqDCoMKgwqDCoCBzaXplX3Qgc3RybGNhdChj aGFyIGRzdFtyZXN0cmljdCAuc3pdLCBjb25zdCBjaGFyICpyZXN0cmljdCBzcmMsDQo+ICDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZV90IHN6KTsN Cj4gDQo+ICDCoMKgwqDCoMKgwqAgLy8gQ29weSBhIHN0cmluZyB3aXRoIHRydW5jYXRpb24g KG5vdCBpbiBsaWJjKS4NCj4gIMKgwqDCoMKgwqDCoCBbW2RlcHJlY2F0ZWRdXcKgIC8vIFVz ZSBzdHBlY3B5KCkgaW5zdGVhZC4NCj4gIMKgwqDCoMKgwqDCoCBzc2l6ZV90IHN0cnNjcHko Y2hhciBkc3RbcmVzdHJpY3QgLnN6XSwgY29uc3QgY2hhciBzcmNbcmVzdHJpY3QgLnN6XSwN Cj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplX3Qg c3opOw0KPiANCj4gIMKgwqDCoMKgwqDCoCAvLyBDb3B5IGEgc3RyaW5nLg0KPiAgwqDCoMKg wqDCoMKgIFtbZGVwcmVjYXRlZF1dwqAgLy8gVXNlIHN0cGNweSgzKSBpbnN0ZWFkLg0KPiAg wqDCoMKgwqDCoMKgIGNoYXIgKnN0cmNweShjaGFyICpyZXN0cmljdCBkc3QsIGNvbnN0IGNo YXIgKnJlc3RyaWN0IHNyYyk7DQo+IA0KPiAgwqDCoMKgwqDCoMKgIC8vIENvbmNhdGVuYXRl IGEgc3RyaW5nLg0KPiAgwqDCoMKgwqDCoMKgIFtbZGVwcmVjYXRlZF1dwqAgLy8gVXNlIHN0 cGNweSgzKSBpbnN0ZWFkLg0KPiAgwqDCoMKgwqDCoMKgIGNoYXIgKnN0cmNhdChjaGFyICpy ZXN0cmljdCBkc3QsIGNvbnN0IGNoYXIgKnJlc3RyaWN0IHNyYyk7DQo+IA0KPiAgwqDCoCBV bnRlcm1pbmF0ZWQgc3RyaW5ncyAobnVsbOKAkHBhZGRlZCBmaXhlZOKAkHdpZHRoIGJ1ZmZl cnMpDQo+ICDCoMKgwqDCoMKgwqAgLy8gWmVybyBhIGZpeGVk4oCQd2lkdGggYnVmZmVyLCBh bmQNCj4gIMKgwqDCoMKgwqDCoCAvLyBjb3B5IGEgc3RyaW5nIHdpdGggdHJ1bmNhdGlvbiBp bnRvIGFuIHVudGVybWluYXRlZCBzdHJpbmcuDQo+ICDCoMKgwqDCoMKgwqAgY2hhciAqc3Rw bmNweShjaGFyIGRzdFtyZXN0cmljdCAuc3pdLCBjb25zdCBjaGFyICpyZXN0cmljdCBzcmMs DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZV90 IHN6KTsNCj4gDQo+ICDCoMKgwqDCoMKgwqAgLy8gQ2hhaW7igJBjb3B5IGFuIHVudGVybWlu YXRlZCBzdHJpbmcgaW50byBhIHN0cmluZyAobm90IGluIGxpYmMpLg0KPiAgwqDCoMKgwqDC oMKgIGNoYXIgKnVzdHIyc3RwKGNoYXIgKnJlc3RyaWN0IGRzdCwgY29uc3QgY2hhciBzcmNb cmVzdHJpY3QgLnN6XSwNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBzaXplX3Qgc3opOw0KPiANCj4gIMKgwqDCoMKgwqDCoCAvLyBaZXJvIGEgZml4 ZWTigJB3aWR0aCBidWZmZXIsIGFuZA0KPiAgwqDCoMKgwqDCoMKgIC8vIGNvcHkgYSBzdHJp bmcgd2l0aCB0cnVuY2F0aW9uIGludG8gYW4gdW50ZXJtaW5hdGVkIHN0cmluZw0KPiAgwqDC oMKgwqDCoMKgIFtbZGVwcmVjYXRlZF1dwqAgLy8gVXNlIHN0cG5jcHkoMykgaW5zdGVhZC4N Cj4gIMKgwqDCoMKgwqDCoCBjaGFyICpzdHJuY3B5KGNoYXIgZGVzdFtyZXN0cmljdCAuc3pd LCBjb25zdCBjaGFyICpyZXN0cmljdCBzcmMsDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZV90IHN6KTsNCj4gDQo+ICDCoMKgwqDCoMKgwqAg Ly8gQ29uY2F0ZW5hdGUgYW4gdW50ZXJtaW5hdGVkIHN0cmluZyBpbnRvIGEgc3RyaW5nLg0K PiAgwqDCoMKgwqDCoMKgIFtbZGVwcmVjYXRlZF1dwqAgLy8gVXNlIHVzdHIyc3RwKCkgaW5z dGVhZC4NCj4gIMKgwqDCoMKgwqDCoCBjaGFyICpzdHJuY2F0KGNoYXIgKnJlc3RyaWN0IGRz dCwgY29uc3QgY2hhciBzcmNbcmVzdHJpY3QgLnN6XSwNCj4gIMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplX3Qgc3opOw0KPiANCj4gIMKgwqAgU3Ry aW5nIHN0cnVjdHVyZXMNCj4gIMKgwqDCoMKgwqDCoCAvLyAoTnVsbOKAkHRlcm1pbmF0ZWQp IHN0cmluZyBzdHJ1Y3R1cmUuDQo+ICDCoMKgwqDCoMKgwqAgc3RydWN0IHN0cl9zIHsNCj4g IMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNpemVfdMKgIGxlbjsNCj4gIMKgwqDCoMKgwqDCoMKg wqDCoMKgIGNoYXLCoMKgwqAgKnN0cjsNCj4gIMKgwqDCoMKgwqDCoCB9Ow0KPiANCj4gIMKg wqDCoMKgwqDCoCAvLyBVbnRlcm1pbmF0ZWQgc3RyaW5nIHN0cnVjdHVyZSAob3ZlcmxhcHBp bmcgc3RyaW5ncykuDQo+ICDCoMKgwqDCoMKgwqAgc3RydWN0IHVzdHJfcyB7DQo+ICDCoMKg wqDCoMKgwqDCoMKgwqDCoCBzaXplX3TCoCBsZW47DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDC oCBjaGFywqDCoMKgICp1c3RyOw0KPiAgwqDCoMKgwqDCoMKgIH07DQo+IA0KPiAgwqDCoMKg wqDCoMKgIC8vIENoYWlu4oCQY29weSBhIHN0cmluZyBzdHJ1Y3R1cmUgaW50byBhbiB1bnRl cm1pbmF0ZWQgc3RyaW5nLg0KPiAgwqDCoMKgwqDCoMKgIHZvaWQgKm1lbXBjcHkodm9pZCAq cmVzdHJpY3QgZHN0LCBjb25zdCB2b2lkIHNyY1tyZXN0cmljdCBsZW5dLA0KPiAgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNpemVfdCBsZW4pOw0KPiAN Cj4gREVTQ1JJUFRJT04NCj4gIMKgwqAgVGVybXMgKGFuZCBhYmJyZXZpYXRpb25zKQ0KPiAg wqDCoMKgwqDCoMKgIHN0cmluZyAoc3RyKQ0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgaXMgYSBzZXF1ZW5jZSBvZiB6ZXJvIG9yIG1vcmUgbm9u4oCQbnVsbCBjaGFyYWN0ZXJz LCBmb2xsb3dlZCBieSBhDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBudWxsIGJ5 dGUuDQo+IA0KPiAgwqDCoMKgwqDCoMKgIHVudGVybWluYXRlZCBzdHJpbmcgKHVzdHIpDQo+ ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpcyBhIHNlcXVlbmNlIG9mIHplcm8gb3Ig bW9yZcKgIG5vbuKAkG51bGzCoCBjaGFyYWN0ZXJzLsKgwqAgVGhlecKgIGFyZQ0KPiAgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc29tZXRpbWVzwqAgY29udGFpbmVkwqAgaW4gZml4 ZWTigJB3aWR0aCBidWZmZXJzLCB3aGljaCB1c3VhbGx5IGNvbuKAkA0KPiAgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgdGFpbiBwYWRkaW5nIG51bGwgYnl0ZXMgYWZ0ZXIgdGhlIHVu dGVybWluYXRlZCBzdHJpbmcswqAgdG/CoCBmaWxsDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB0aGXCoCByZXN0wqAgb2bCoCB0aGXCoCBidWZmZXLCoCB3aXRob3V0wqAgYWZm ZWN0aW5nwqAgdGhlIHVudGVybWluYXRlZA0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgc3RyaW5nOyBob3dldmVyLCB0aG9zZSBwYWRkaW5nIG51bGwgYnl0ZXMgYXJlIG5vdMKg IHBhcnTCoCBvZsKgIHRoZQ0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW50ZXJt aW5hdGVkIHN0cmluZy4NCj4gDQo+ICDCoMKgwqDCoMKgwqAgbGVuZ3RoIChsZW4pDQo+ICDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpcyB0aGUgbnVtYmVyIG9mIG5vbuKAkG51bGwg Y2hhcmFjdGVycyBpbiBhIHN0cmluZy7CoCBJdCBpcyB0aGUgcmXigJANCj4gIMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHR1cm4gdmFsdWUgb2Ygc3RybGVuKHN0cikgYW5kIG9mIHN0 cm5sZW4odXN0ciwgc3opLg0KPiANCj4gIMKgwqDCoMKgwqDCoCBzaXplIChzeikNCj4gIMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlZmVycyB0byB0aGUgZW50aXJlIGJ1ZmZlciB3 aGVyZSB0aGUgc3RyaW5nIGlzIGNvbnRhaW5lZC4NCj4gDQo+ICDCoMKgwqDCoMKgwqAgZW5k wqDCoMKgIGlzwqAgdGhlwqAgbmFtZcKgIG9mwqAgYcKgIHBvaW50ZXLCoCB0byB0aGUgdGVy bWluYXRpbmcgbnVsbCBieXRlIG9mIGENCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHN0cmluZywgb3IgYSBwb2ludGVyIHRvIG9uZSBwYXN0IHRoZSBsYXN0IGNoYXJhY3RlciBv ZiBhbiB1bnRlcuKAkA0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbWluYXRlZCBz dHJpbmcuwqAgVGhpcyBpcyB0aGUgcmV0dXJuIHZhbHVlIG9mIGZ1bmN0aW9ucyB0aGF0wqAg YWzigJANCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxvdyBjaGFpbmluZy7CoCBJ dCBpcyBlcXVpdmFsZW50IHRvICZzdHJbbGVuXS4NCj4gDQo+ICDCoMKgwqDCoMKgwqAgcGFz dF9lbmQNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlzwqAgdGhlIG5hbWUgb2Yg YSBwb2ludGVyIHRvIG9uZSBwYXN0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciB0aGF0DQo+ICDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250YWlucyBhIHN0cmluZy7CoCBJdCBpcyBl cXVpdmFsZW50IHRvICZzdHJbc3pdLsKgIEl0IGlzIHVzZWQgYXMNCj4gIMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGEgc2VudGluZWwgdmFsdWUsIHRvIGJlIGFibGXCoCB0b8KgIHRy dW5jYXRlwqAgc3RyaW5nc8KgIGluc3RlYWTCoCBvZg0KPiAgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgb3ZlcnJ1bm5pbmcgYSBidWZmZXIuDQo+IA0KPiAgwqDCoMKgwqDCoMKgIHN0 cmluZyBzdHJ1Y3R1cmUNCj4gIMKgwqDCoMKgwqDCoCB1bnRlcm1pbmF0ZWQgc3RyaW5nIHN0 cnVjdHVyZQ0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgU3RydWN0dXJlwqAgdGhh dMKgIGNvbnRhaW5zIHRoZSBsZW5ndGggb2YgYSBzdHJpbmcsIGFzIHdlbGwgYXMgdGhlDQo+ ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJpbmcgb3IgdGhlIHVudGVybWluYXRl ZCBzdHJpbmcuDQo+IA0KPiAgwqDCoCBUeXBlcyBvZiBmdW5jdGlvbnMNCj4gIMKgwqDCoMKg wqDCoCBDb3B5LCBjb25jYXRlbmF0ZSwgYW5kIGNoYWlu4oCQY29weQ0KPiAgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgT3JpZ2luYWxseSwgdGhlcmUgd2FzIGEgZGlzdGluY3Rpb24g YmV0d2VlbiBmdW5jdGlvbnMgdGhhdMKgIGNvcHkNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGFuZMKgIHRob3NlIHRoYXQgY29uY2F0ZW5hdGUuwqAgSG93ZXZlciwgbmV3ZXIg ZnVuY3Rpb25zIHRoYXQgY29weQ0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgd2hp bGUgYWxsb3dpbmcgY2hhaW5pbmcgY292ZXIgYm90aCB1c2UgY2FzZXMgd2l0aCBhIHNpbmds ZcKgIEFQSS4NCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFRoZXnCoCBhcmXCoCBh bHNvIGFsZ29yaXRobWljYWxseSBmYXN0ZXIsIHNpbmNlIHRoZXkgZG9u4oCZdCBuZWVkIHRv DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzZWFyY2ggZm9yIHRoZSBlbmQgb2Yg dGhlIGV4aXN0aW5nIHN0cmluZy4NCj4gDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBUbyBjaGFpbiBjb3B5IGZ1bmN0aW9ucywgdGhleSBuZWVkIHRvIHJldHVybiBhwqAgcG9p bnRlcsKgIHRvwqAgdGhlDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbmQuwqDC oCBUaGF04oCZc8KgIGHCoCBieXByb2R1Y3TCoCBvZiB0aGUgY29weSBvcGVyYXRpb24sIHNv IGl0IGhhcyBubw0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGVyZm9ybWFuY2Ug Y29zdHMuwqAgVGhlc2UgZnVuY3Rpb25zIGFyZSBwcmVmZXJyZWQgb3ZlcsKgIGNvcHnCoCBv cg0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uY2F0ZW5hdGlvbsKgIGZ1bmN0 aW9ucy7CoCBGdW5jdGlvbnMgdGhhdCByZXR1cm4gc3VjaCBhIHBvaW50ZXIsDQo+ICDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhbmQgdGh1cyBjYW4gYmUgY2hhaW5lZCwgaGF2ZSBu YW1lcyBvZiB0aGUgZm9ybcKgICpzdHAqKCkswqAgc2luY2UNCj4gIMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGl04oCZcyBhbHNvIGNvbW1vbiB0byBuYW1lIHRoZSBwb2ludGVyIGp1 c3QgcC4NCj4gDQo+ICDCoMKgwqDCoMKgwqAgVHJ1bmNhdGUgb3Igbm90Pw0KPiAgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgVGhlwqAgZmlyc3TCoCB0aGluZ8KgIHRvIG5vdGUgaXMg dGhhdCBwcm9ncmFtbWVycyBzaG91bGQgYmUgY2FyZWZ1bA0KPiAgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgd2l0aCBidWZmZXJzLCBzbyB0aGV5IGFsd2F5cyBoYXZlIHRoZSBjb3Jy ZWN0IHNpemUsIGFuZMKgIHRydW5jYeKAkA0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgdGlvbiBpcyBub3QgbmVjZXNzYXJ5Lg0KPiANCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIEluwqAgbW9zdMKgIGNhc2VzLCB0cnVuY2F0aW9uIGlzIG5vdCBkZXNpcmVkLCBh bmQgaXQgaXMgc2ltcGxlciB0bw0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAganVz dCBkbyB0aGUgY29weS7CoCBTaW1wbGVywqAgY29kZcKgIGlzwqAgc2FmZXLCoCBjb2RlLsKg wqAgUHJvZ3JhbW1pbmcNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFnYWluc3TC oCBwcm9ncmFtbWluZyBtaXN0YWtlcyBieSBhZGRpbmcgbW9yZSBjb2RlIGp1c3QgYWRkcyBt b3JlDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwb2ludHMgd2hlcmUgbWlzdGFr ZXMgY2FuIGJlIG1hZGUuDQo+IA0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgTm93 YWRheXMsIGNvbXBpbGVycyBjYW4gZGV0ZWN0IG1vc3QgcHJvZ3JhbW1lciBlcnJvcnMgd2l0 aMKgIGZlYeKAkA0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdHVyZXPCoMKgwqAg bGlrZcKgwqAgY29tcGlsZXLCoMKgIHdhcm5pbmdzLMKgwqAgc3RhdGljwqDCoCBhbmFseXpl cnMswqDCoCBhbmQNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIF9GT1JUSUZZX1NP VVJDRSAoc2VlIGZ0bSg3KSkuwqAgS2VlcGluZ8KgIHRoZcKgIGNvZGXCoCBzaW1wbGXCoCBo ZWxwcw0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdGhlc2UgZXJyb3LigJBkZXRl Y3Rpb24gZmVhdHVyZXMgYmUgbW9yZSBwcmVjaXNlLg0KPiANCj4gIMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIFdoZW4gdmFsaWRhdGluZyB1c2VyIGlucHV0LCBob3dldmVyLCBpdCBt YWtlcyBzZW5zZSB0byB0cnVuY2F0ZS4NCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IFJlbWVtYmVyIHRvIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUgb2Ygc3VjaCBmdW5jdGlvbiBj YWxscy4NCj4gDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBGdW5jdGlvbnMgdGhh dCB0cnVuY2F0ZToNCj4gDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCDigKLCoCBz dHBlY3B5KCnCoCBpc8KgIHRoZcKgIG1vc3TCoCBlZmZpY2llbnQgc3RyaW5nIGNvcHkgZnVu Y3Rpb24gdGhhdA0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGVyZm9y bXMgdHJ1bmNhdGlvbi7CoCBJdCBvbmx5IHJlcXVpcmVzIHRvIGNoZWNrwqAgZm9ywqAgdHJ1 bmNh4oCQDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0aW9uIG9uY2Ug YWZ0ZXIgYWxsIGNoYWluZWQgY2FsbHMuDQo+IA0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAg4oCiwqAgc3RwZWNweXgoKSBpcyBhIHZhcmlhbnQgb2Ygc3RwZWNweSgpIHRoYXQg Y29uc3VtZXMgdGhlIGVudGlyZQ0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgc291cmNlIHN0cmluZywgdG8gY2F0Y2ggYnVncyBpbiB0aGUgcHJvZ3JhbSBieSBmb3Jj aW5nIGEgc2Vn4oCQDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtZW50 YXRpb24gZmF1bHQgKGFzIHN0cmxjcHkoM2JzZCkgYW5kIHN0cmxjYXQoM2JzZCkgZG8pLg0K PiANCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIOKAosKgIHN0cmxjcHkoM2JzZCkg YW5kIHN0cmxjYXQoM2JzZCksIHdoaWNoIG9yaWdpbmF0ZWQgaW4gT3BlbkJTRCwNCj4gIMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFyZSBkZXNpZ25lZCB0byBjcmFzaCBp ZiB0aGUgaW5wdXQgc3RyaW5nIGlzIGludmFsaWQgKGRvZXNu4oCZdA0KPiAgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29udGFpbiBhIG51bGwgYnl0ZSkuDQo+IA0KPiAg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg4oCiwqAgc3Ryc2NweSg5KSBpcyBhIGZ1bmN0 aW9uIGluIHRoZSBMaW51eCBrZXJuZWwgd2hpY2ggcmVwb3J0cyBhbg0KPiAgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZXJyb3IgaW5zdGVhZCBvZiBjcmFzaGluZy4NCj4g DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCDigKLCoCBzdHBuY3B5KDMpIGFuZCBz dHJuY3B5KDMpIGFsc28gdHJ1bmNhdGUsIGJ1dCB0aGV5IGRvbuKAmXQgd3JpdGUNCj4gIMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cmluZ3MsIGJ1dCByYXRoZXIgdW50 ZXJtaW5hdGVkIHN0cmluZ3MuDQo+IA0KPiAgwqDCoCBVbnRlcm1pbmF0ZWQgc3RyaW5ncyAo bnVsbOKAkHBhZGRlZCBmaXhlZOKAkHdpZHRoIGJ1ZmZlcnMpDQo+ICDCoMKgwqDCoMKgwqAg Rm9ywqAgaGlzdG9yaWMgcmVhc29ucywgc29tZSBzdGFuZGFyZCBBUElzLCBzdWNoIGFzIHV0 bXB4KDUpLCB1c2UgdW50ZXLigJANCj4gIMKgwqDCoMKgwqDCoCBtaW5hdGVkIHN0cmluZ3Mg aW4gZml4ZWTigJB3aWR0aCBidWZmZXJzLsKgIFRvIGludGVyZmFjZSB3aXRowqAgdGhlbSzC oCBzcGXigJANCj4gIMKgwqDCoMKgwqDCoCBjaWFsaXplZCBmdW5jdGlvbnMgbmVlZCB0byBi ZSB1c2VkLg0KPiANCj4gIMKgwqDCoMKgwqDCoCBUbyBjb3B5IHN0cmluZ3MgaW50byB0aGVt LCB1c2Ugc3RwbmNweSgzKS4NCj4gDQo+ICDCoMKgwqDCoMKgwqAgVG/CoCBjb3B5IGZyb20g YW4gdW50ZXJtaW5hdGVkIHN0cmluZyB3aXRoaW4gYSBmaXhlZOKAkHdpZHRoIGJ1ZmZlciBp bnRvIGENCj4gIMKgwqDCoMKgwqDCoCBzdHJpbmcsIGlnbm9yaW5nIGFueSB0cmFpbGluZyBu dWxswqAgYnl0ZXPCoCBpbsKgIHRoZcKgIHNvdXJjZcKgIGZpeGVk4oCQd2lkdGgNCj4gIMKg wqDCoMKgwqDCoCBidWZmZXIsIHlvdSBzaG91bGQgdXNlIHVzdHIyc3RwKCkuDQo+IA0KPiAg wqDCoCBTdHJpbmcgc3RydWN0dXJlcw0KPiAgwqDCoMKgwqDCoMKgIFRoZSBzaW1wbGVzdCBz dHJpbmcgY29weWluZyBmdW5jdGlvbiBpcyBtZW1wY3B5KDMpLsKgIEl0IHJlcXVpcmVzIGFs d2F5cw0KPiAgwqDCoMKgwqDCoMKgIGtub3dpbmfCoCB0aGUgbGVuZ3RoIG9mIHlvdXIgc3Ry aW5ncywgZm9yIHdoaWNoIHN0cmluZyBzdHJ1Y3R1cmVzIGNhbiBiZQ0KPiAgwqDCoMKgwqDC oMKgIHVzZWQuwqAgSXQgbWFrZXMgdGhlIGNvZGUgc2ltcGxlciwgc2luY2UgeW91IGFsd2F5 cyBrbm93IHRoZcKgIGxlbmd0aMKgIG9mDQo+ICDCoMKgwqDCoMKgwqAgeW91ciBzdHJpbmdz LCBhbmQgaXTigJlzIGFsc28gZmFzdGVyLCBzaW5jZSBpdCBkb2VzbuKAmXQgbmVlZCB0byBy ZXBlYXRlZGx5DQo+ICDCoMKgwqDCoMKgwqAgY2FsY3VsYXRlwqAgdGhvc2XCoCBsZW5ndGhz LsKgwqAgbWVtcGNweSgzKcKgIGFsd2F5cyBjcmVhdGVzIGFuIHVudGVybWluYXRlZA0KPiAg wqDCoMKgwqDCoMKgIHN0cmluZywgc28geW91IG5lZWQgdG8gZXhwbGljaXRseSBzZXQgdGhl IHRlcm1pbmF0aW5nIG51bGwgYnl0ZS4NCj4gDQo+ICDCoMKgwqDCoMKgwqAgU3RyaW5nIHN0 cnVjdHVyZQ0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgVGhlIGZvbGxvd2luZyBj b2RlIGNhbiBiZcKgIHVzZWTCoCB0b8KgIGNoYWlu4oCQY29wecKgIGZyb23CoCBhwqAgc3Ry aW5nDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3R1cmUgaW50byBhIHN0 cmluZzoNCj4gDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHAgPSBt ZW1wY3B5KHAsIHNyYy0+c3RyLCBzcmMtPmxlbik7DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgICpwID0gJ1wwJzsNCj4gDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBUaGXCoCBmb2xsb3dpbmfCoCBjb2RlwqAgY2FuwqAgYmXCoCB1c2VkwqAgdG8g Y2hhaW7igJBjb3B5IGZyb20gYSBzdHJpbmcNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHN0cnVjdHVyZSBpbnRvIGFuIHVudGVybWluYXRlZCBzdHJpbmc6DQo+IA0KPiAgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwID0gbWVtcGNweShwLCBzcmMtPnN0 ciwgc3JjLT5sZW4pOw0KPiANCj4gIMKgwqDCoMKgwqDCoCBVbnRlcm1pbmF0ZWQgc3RyaW5n IHN0cnVjdHVyZSAob3ZlcmxhcHBpbmcgc3RyaW5ncykNCj4gIMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIEluIHByb2dyYW1zIHRoYXQgbWFrZSBjb25zaWRlcmFibGUgdXNlIG9mIHN0 cmluZ3MsIGFuZCBuZWVkwqAgdGhlDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBi ZXN0wqAgcGVyZm9ybWFuY2UsIHVzaW5nIG92ZXJsYXBwaW5nIHN0cmluZ3MgY2FuIG1ha2Ug YSBiaWcgZGlm4oCQDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmZXJlbmNlLsKg IEl0IGFsbG93cyBob2xkaW5nIHN1YnN0cmluZ3Mgb2YgYSBiaWdnZXIgc3RyaW5nwqAgd2hp bGUNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG5vdCBkdXBsaWNhdGluZyBtZW1v cnkgbm9yIHVzaW5nIHRpbWUgdG8gZG8gYSBjb3B5Lg0KPiANCj4gIMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIEhvd2V2ZXIswqAgdGhpcyBpcyBkZWxpY2F0ZSwgc2luY2UgaXQgcmVx dWlyZXMgdXNpbmcgdW50ZXJtaW5hdGVkDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBzdHJpbmdzLsKgIEMgbGlicmFyeSBBUElzIHVzZSBzdHJpbmdzLCBzbyBwcm9ncmFtcyB0 aGF0wqAgdXNlwqAgdW7igJANCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRlcm1p bmF0ZWTCoCBzdHJpbmdzwqAgd2lsbMKgIGhhdmXCoCB0b8KgIHRha2XCoCBjYXJlIHRvIGRp ZmZlcmVudGlhdGUNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cmluZ3MgZnJv bSB1bnRlcm1pbmF0ZWQgc3RyaW5ncy4NCj4gDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBUaGUgZm9sbG93aW5nIGNvZGUgY2FuIGJlIHVzZWQgdG8gY2hhaW7igJBjb3B5wqAg ZnJvbcKgIGFuwqAgdW50ZXJtaeKAkA0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg bmF0ZWQgc3RyaW5nIHN0cnVjdHVyZSB0byBhIHN0cmluZzoNCj4gDQo+ICDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHAgPSBtZW1wY3B5KHAsIHNyYy0+dXN0ciwgc3Jj LT5sZW4pOw0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqcCA9ICdc MCc7DQo+IA0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgVGhlwqAgZm9sbG93aW5n wqAgY29kZcKgIGNhbiBiZSB1c2VkIHRvIGNoYWlu4oCQY29weSBmcm9tIGFuIHVudGVybWni gJANCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG5hdGVkIHN0cmluZyBzdHJ1Y3R1 cmUgdG8gYW4gdW50ZXJtaW5hdGVkIHN0cmluZzoNCj4gDQo+ICDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHAgPSBtZW1wY3B5KHAsIHNyYy0+dXN0ciwgc3JjLT5sZW4p Ow0KPiANCj4gIMKgwqAgRnVuY3Rpb25zDQo+ICDCoMKgwqDCoMKgwqAgc3RwY3B5KDMpDQo+ ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBUaGlzIGZ1bmN0aW9uIGNvcGllcyB0aGUg aW5wdXQgc3RyaW5nIGludG8gYSBkZXN0aW5hdGlvbiBzdHJpbmcuDQo+ICDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBUaGUgcHJvZ3JhbW1lciBpcyByZXNwb25zaWJsZcKgIGZvcsKg IGFsbG9jYXRpbmfCoCBhwqAgYnVmZmVywqAgbGFyZ2UNCj4gIMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGVub3VnaC7CoCBJdCByZXR1cm5zIGEgcG9pbnRlciBzdWl0YWJsZSBmb3Ig Y2hhaW5pbmcuDQo+IA0KPiAgwqDCoMKgwqDCoMKgIHN0cGVjcHkoKQ0KPiAgwqDCoMKgwqDC oMKgIHN0cGVjcHl4KCkNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFRoZXNlIGZ1 bmN0aW9ucyBjb3B5IHRoZSBpbnB1dCBzdHJpbmcgaW50byBhIGRlc3RpbmF0aW9uIHN0cmlu Zy4NCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIElmwqAgdGhlIGRlc3RpbmF0aW9u IGJ1ZmZlciwgbGltaXRlZCBieSBhIHBvaW50ZXIgdG8gb25lIHBhc3QgdGhlDQo+ICDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbmQgb2YgaXQsIGlzbuKAmXQgbGFyZ2UgZW5vdWdo IHRvIGhvbGQgdGhlwqAgY29weSzCoCB0aGXCoCByZXN1bHRpbmcNCj4gIMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHN0cmluZ8KgIGlzwqAgdHJ1bmNhdGVkwqAgKGJ1dMKgIGl0wqAg aXMgZ3VhcmFudGVlZCB0byBiZSBudWxs4oCQdGVybWnigJANCj4gIMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIG5hdGVkKS7CoCBUaGV5IHJldHVybiBhIHBvaW50ZXIgc3VpdGFibGUg Zm9ywqAgY2hhaW5pbmcuwqDCoCBUcnVuY2HigJANCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHRpb24gbmVlZHMgdG8gYmUgZGV0ZWN0ZWQgb25seSBvbmNlIGFmdGVyIHRoZSBs YXN0IGNoYWluZWQgY2FsbC4NCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cGVj cHl4KCnCoCBoYXMgaWRlbnRpY2FsIHNlbWFudGljcyB0byBzdHBlY3B5KCksIGV4Y2VwdCB0 aGF0IGl0DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmb3JjZXMgYSBTSUdTRUdW IG9uIFVuZGVmaW5lZCBCZWhhdmlvci4NCj4gDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBUaGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBwcm92aWRlZCBieSBhbnkgbGlicmFyeSwg YnV0IHlvdSBjYW4gZGXigJANCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZpbmUg dGhlbSB3aXRoIHRoZSBmb2xsb3dpbmcgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uczoNCj4g DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIFRoaXMgY29kZSBp cyBpbiB0aGUgcHVibGljIGRvbWFpbi4gKi8NCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgY2hhciAqDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHN0cGVjcHkoY2hhciAqZHN0LCBjaGFyIHBhc3RfZW5kWzBdLA0KPiAgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3QgY2hhciAq cmVzdHJpY3Qgc3JjKQ0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB7 DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY2hhciAq cDsNCj4gDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg aWYgKGRzdCA9PSBwYXN0X2VuZCkNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBwYXN0X2VuZDsNCj4gDQo+ICDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcCA9IG1lbWNjcHkoZHN0LCBz cmMsICdcMCcsIHBhc3RfZW5kIC0gZHN0KTsNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAocCAhPSBOVUxMKQ0KPiAgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHAgLSAxOw0KPiAN Cj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiB0cnVu Y2F0aW9uIGRldGVjdGVkICovDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcGFzdF9lbmRbLTFdID0gJ1wwJzsNCj4gIMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcGFzdF9lbmQ7DQo+ICDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0NCj4gDQo+ICDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIC8qIFRoaXMgY29kZSBpcyBpbiB0aGUgcHVibGljIGRvbWFp bi4gKi8NCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY2hhciAqDQo+ ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cGVjcHl4KGNoYXIgKmRz dCwgY2hhciBwYXN0X2VuZFswXSwNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3QgY2hhciAqcmVzdHJpY3Qgc3JjKQ0KPiAg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB7DQo+ICDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHNyY1tzdHJsZW4oc3JjKV0gIT0g J1wwJykNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHJhaXNlKFNJR1NFR1YpOw0KPiANCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gc3RwZWNweShkc3QsIHBhc3RfZW5kLCBzcmMp Ow0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9DQo+IA0KPiAgwqDC oMKgwqDCoMKgIHN0cG5jcHkoMykNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFRo aXMgZnVuY3Rpb24gY29waWVzIHRoZSBpbnB1dCBzdHJpbmcgaW50byBhwqAgZGVzdGluYXRp b27CoCBudWxs4oCQDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwYWRkZWTCoCBm aXhlZOKAkHdpZHRowqAgdW50ZXJtaW5hdGVkwqAgc3RyaW5nLsKgwqAgSWbCoCB0aGUgZGVz dGluYXRpb24NCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJ1ZmZlciwgbGltaXRl ZCBieSBpdHMgc2l6ZSwgaXNu4oCZdMKgIGxhcmdlwqAgZW5vdWdowqAgdG/CoCBob2xkwqAg dGhlDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb3B5LMKgIHRoZcKgIHJlc3Vs dGluZ8KgIHN0cmluZyBpcyB0cnVuY2F0ZWQuwqAgU2luY2UgaXQgY3JlYXRlcyBhbg0KPiAg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW50ZXJtaW5hdGVkIHN0cmluZywgaXQgZG9l c27igJl0IG5lZWQgdG8gd3JpdGUgYSB0ZXJtaW5hdGluZyBudWxsDQo+ICDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBieXRlLsKgIEl0IHJldHVybnMgYSBwb2ludGVyIHN1aXRhYmxl IGZvciBjaGFpbmluZywgYnV0IGl04oCZc8KgIG5vdA0KPiAgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgaWRlYWwgZm9yIHRoYXQuwqAgVHJ1bmNhdGlvbiBuZWVkcyB0byBiZSBkZXRl Y3RlZCBvbmx5IG9uY2UgYWZ0ZXINCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRo ZSBsYXN0IGNoYWluZWQgY2FsbC4NCj4gDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBJZsKgIHlvdeKAmXJlIGdvaW5nIHRvIHVzZSB0aGlzIGZ1bmN0aW9uIGluIGNoYWluZWQg Y2FsbHMsIGl0IHdvdWxkDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwcm9iYWJs eSBiZSB1c2VmdWwgdG8gZGV2ZWxvcCBhIGZ1bmN0aW9uIHNpbWlsYXIgdG8gc3RwZWNweSgp Lg0KPiANCj4gIMKgwqDCoMKgwqDCoCB1c3RyMnN0cCgpDQo+ICDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBUaGlzIGZ1bmN0aW9uIGNvcGllcyB0aGUgaW5wdXQgdW50ZXJtaW5hdGVk IHN0cmluZyBjb250YWluZWTCoCBpbg0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg YcKgIG51bGzigJBwYWRkZWQgd2l4ZWTigJB3aWR0aCBidWZmZXIsIGludG8gYSBkZXN0aW5h dGlvbiAobnVsbOKAkHRlcuKAkA0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbWlu YXRlZCkgc3RyaW5nLsKgIFRoZSBwcm9ncmFtbWVyIGlzIHJlc3BvbnNpYmxlIGZvciBhbGxv Y2F0aW5nIGENCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJ1ZmZlciBsYXJnZSBl bm91Z2guwqAgSXQgcmV0dXJucyBhIHBvaW50ZXIgc3VpdGFibGXCoCBmb3LCoCBjaGFpbuKA kA0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW5nLg0KPiANCj4gIMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIFRoaXPCoCBmdW5jdGlvbiBpcyBub3QgcHJvdmlkZWQgYnkg YW55IGxpYnJhcnksIGJ1dCB5b3UgY2FuIHdyaXRlDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBpdCB3aXRoIHRoZSBkZWZpbml0aW9uIGFib3ZlIGluIHRoaXMgcGFnZS4NCj4g DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBBIHRydW5jYXRpbmcgdmVyc2lvbiBv ZiB0aGlzIGZ1bmN0aW9uIGRvZXNu4oCZdCBleGlzdCzCoCBzaW5jZcKgIHRoZQ0KPiAgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZcKgIG9mwqAgdGhlIG9yaWdpbmFsIHN0cmlu ZyBpcyBhbHdheXMga25vd24sIHNvIGl0IHdvdWxkbuKAmXQgYmUNCj4gIMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHZlcnkgdXNlZnVsLg0KPiANCj4gIMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIFRoaXMgZnVuY3Rpb24gaXMgbm90IHByb3ZpZGVkIGJ5IGFueSBsaWJyYXJ5 LCBidXQgeW91IGNhbiBkZWZpbmUNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGl0 IHdpdGggdGhlIGZvbGxvd2luZyByZWZlcmVuY2UgaW1wbGVtZW50YXRpb246DQo+IA0KPiAg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBUaGlzIGNvZGUgaXMgaW4g dGhlIHB1YmxpYyBkb21haW4uICovDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGNoYXIgKg0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1 c3RyMnN0cChjaGFyICpyZXN0cmljdCBkc3QsIGNvbnN0IGNoYXIgKnJlc3RyaWN0IHNyYywN Cj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgc2l6ZV90IHN6KQ0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB7 DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY2hhcsKg ICplbmQ7DQo+IA0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGVuZCA9IG1lbWNjcHkoZHN0LCBzcmMsICdcMCcsIHN6KSkgPzogZHN0ICsgc3o7DQo+ ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKmVuZCA9ICdc MCc7DQo+IA0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHJldHVybiBlbmQ7DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0N Cj4gDQo+ICDCoMKgwqDCoMKgwqAgbWVtcGNweSgzKQ0KPiAgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgVGhpcyBmdW5jdGlvbiBjb3BpZXMgdGhlIGlucHV0IHN0cmluZywgbGltaXRl ZMKgIGJ5wqAgaXRzwqAgbGVuZ3RoLA0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg aW50b8KgIGHCoCBkZXN0aW5hdGlvbiB1bnRlcm1pbmF0ZWQgc3RyaW5nLsKgIFRoZSBwcm9n cmFtbWVyIGlzIHJl4oCQDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzcG9uc2li bGUgZm9yIGFsbG9jYXRpbmcgYSBidWZmZXIgbGFyZ2UgZW5vdWdoLsKgwqAgSXTCoCByZXR1 cm5zwqAgYQ0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcG9pbnRlciBzdWl0YWJs ZSBmb3IgY2hhaW5pbmcuDQo+IA0KPiAgwqDCoCBEZXByZWNhdGVkIGZ1bmN0aW9ucw0KPiAg wqDCoMKgwqDCoMKgIHN0cmxjcHkoM2JzZCkNCj4gIMKgwqDCoMKgwqDCoCBzdHJsY2F0KDNi c2QpDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBEZXByZWNhdGVkLsKgIFRoZXNl IGZ1bmN0aW9ucyBjb3B5IHRoZSBpbnB1dCBzdHJpbmcgaW50byBhIGRlc3Rp4oCQDQo+ICDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBuYXRpb27CoCBzdHJpbmcuwqAgSWYgdGhlIGRl c3RpbmF0aW9uIGJ1ZmZlciwgbGltaXRlZCBieSBpdHMgc2l6ZSwNCj4gIMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGlzbuKAmXQgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIGNvcHks wqAgdGhlwqAgcmVzdWx0aW5nwqAgc3RyaW5nwqAgaXMNCj4gIMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHRydW5jYXRlZMKgIChidXTCoCBpdMKgIGlzIGd1YXJhbnRlZWQgdG8gYmUg bnVsbOKAkHRlcm1pbmF0ZWQpLsKgIFRoZXkNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSB0b3RhbMKgIHN0cmluZ8KgIHRoZXnCoCB0 cmllZMKgIHRvwqAgY3JlYXRlLg0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgVGhl c2UgZnVuY3Rpb25zIGZvcmNlIGEgU0lHU0VHViBvbiBVbmRlZmluZWQgQmVoYXZpb3IuDQo+ IA0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RwZWNweXgoKcKgIGlzwqAgYSBi ZXR0ZXIgcmVwbGFjZW1lbnQgZm9yIHRoZXNlIGZ1bmN0aW9ucyBmb3IgdGhlDQo+ICDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmb2xsb3dpbmcgcmVhc29uczoNCj4gDQo+ICDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCDigKLCoCBCZXR0ZXIgcGVyZm9ybWFuY2UgKGNoYWlu IGNvcHkgaW5zdGVhZCBvZiBjb25jYXRlbmF0aW5nKS4NCj4gDQo+ICDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCDigKLCoCBPbmx5IHJlcXVpcmVzIGRldGVjdGluZyB0cnVuY2F0aW9u IG9uY2UgcGVyIGNoYWluIG9mIGNhbGxzLg0KPiANCj4gIMKgwqDCoMKgwqDCoCBzdHJzY3B5 KDkpDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBEZXByZWNhdGVkLsKgIFRoaXMg ZnVuY3Rpb24gY29waWVzIHRoZSBpbnB1dCBzdHJpbmcgaW50byBhIGRlc3Rp4oCQDQo+ICDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBuYXRpb24gc3RyaW5nLsKgIElmIHRoZSBkZXN0 aW5hdGlvbiBidWZmZXIsIGxpbWl0ZWQgYnkgaXRzwqAgc2l6ZSwNCj4gIMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGlzbuKAmXTCoCBsYXJnZcKgIGVub3VnaMKgIHRvwqAgaG9sZCB0 aGUgY29weSwgdGhlIHJlc3VsdGluZyBzdHJpbmcgaXMNCj4gIMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHRydW5jYXRlZCAoYnV0IGl0IGlzIGd1YXJhbnRlZWQgdG8gYmUgbnVsbOKA kHRlcm1pbmF0ZWQpLsKgIEl0wqAgcmXigJANCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIGRlc3RpbmF0aW9uIHN0cmluZywgb3IgLUUy QklHIG9uIHRydW5jYeKAkA0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdGlvbi4N Cj4gDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHBlY3B5KCnCoCBpc8KgIGHC oCBiZXR0ZXIgcmVwbGFjZW1lbnQgZm9yIHRoaXMgZnVuY3Rpb24sIHNpbmNlIGl0DQo+ICDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBoYXMgYSBtdWNoIHNpbXBsZXIgaW50ZXJmYWNl Lg0KPiANCj4gIMKgwqDCoMKgwqDCoCBzdHJjcHkoMykNCj4gIMKgwqDCoMKgwqDCoCBzdHJj YXQoMykNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIERlcHJlY2F0ZWQuwqAgVGhl c2UgZnVuY3Rpb25zIGNvcHkgdGhlIGlucHV0IHN0cmluZyBpbnRvIGEgZGVzdGnigJANCj4g IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG5hdGlvbiBzdHJpbmcuwqAgVGhlIHByb2dy YW1tZXIgaXMgcmVzcG9uc2libGUgZm9ywqAgYWxsb2NhdGluZ8KgIGENCj4gIMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGJ1ZmZlciBsYXJnZSBlbm91Z2guwqAgVGhlIHJldHVybiB2 YWx1ZSBpcyB1c2VsZXNzLg0KPiANCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0 cmNweSgzKcKgIGlzwqAgaWRlbnRpY2FsIHRvIHN0cGNweSgzKSBleGNlcHQgZm9yIHRoZSB1 c2VsZXNzIHJl4oCQDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0dXJuIHZhbHVl Lg0KPiANCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cGNweSgzKSBpcyBhIGJl dHRlciByZXBsYWNlbWVudCBmb3IgdGhlc2XCoCBmdW5jdGlvbnPCoCBmb3LCoCB0aGUNCj4g IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZvbGxvd2luZyByZWFzb25zOg0KPiANCj4g IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIOKAosKgIEJldHRlciBwZXJmb3JtYW5jZSAo Y2hhaW4gY29weSBpbnN0ZWFkIG9mIGNvbmNhdGVuYXRpbmcpLg0KPiANCj4gIMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIOKAosKgIE5vIG5lZWQgdG8gY2FsbCBzdHJsZW4oMyksIHRo YW5rcyB0byB0aGUgdXNlZnVsIHJldHVybiB2YWx1ZS4NCj4gDQo+ICDCoMKgwqDCoMKgwqAg c3RybmNweSgzKQ0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRGVwcmVjYXRlZC7C oMKgIHN0cm5jcHkoMynCoCBpc8KgIGlkZW50aWNhbCB0byBzdHBuY3B5KDMpIGV4Y2VwdCBm b3INCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRoZSB1c2VsZXNzIHJldHVybiB2 YWx1ZS7CoCBEdWUgdG8gdGhlIHJldHVybsKgIHZhbHVlLMKgIHdpdGjCoCB0aGlzDQo+ICDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmdW5jdGlvbsKgIGl04oCZcyBoYXJkIHRvIGNv cnJlY3RseSBjaGVjayBmb3IgdHJ1bmNhdGlvbi7CoCBVc2Ugc3Rw4oCQDQo+ICDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBuY3B5KDMpIGluc3RlYWQuDQo+IA0KPiAgwqDCoMKgwqDC oMKgIHN0cm5jYXQoMykNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIERlcHJlY2F0 ZWQuwqAgRG8gbm90IGNvbmZ1c2UgdGhpcyBmdW5jdGlvbiB3aXRoIHN0cm5jcHkoMyk7wqAg dGhleQ0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXJlIG5vdCByZWxhdGVkIGF0 IGFsbC4NCj4gDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBUaGlzwqAgZnVuY3Rp b27CoCBjb25jYXRlbmF0ZXPCoCB0aGUgaW5wdXQgdW50ZXJtaW5hdGVkIHN0cmluZyBjb27i gJANCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRhaW5lZCBpbiBhIG51bGzigJBw YWRkZWQgd2l4ZWTigJB3aWR0aCBidWZmZXIsIGludG/CoCBhwqAgZGVzdGluYXRpb24NCj4g IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChudWxs4oCQdGVybWluYXRlZCkgc3RyaW5n LsKgIFRoZSBwcm9ncmFtbWVyIGlzIHJlc3BvbnNpYmxlIGZvciBhbOKAkA0KPiAgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgbG9jYXRpbmcgYSBidWZmZXIgbGFyZ2UgZW5vdWdoLsKg IFRoZSByZXR1cm4gdmFsdWUgaXMgdXNlbGVzcy4NCj4gDQo+ICDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB1c3RyMnN0cCgpwqAgaXPCoCBhwqAgYmV0dGVywqAgcmVwbGFjZW1lbnQg Zm9yIHRoaXMgZnVuY3Rpb24gZm9yIHRoZQ0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgZm9sbG93aW5nIHJlYXNvbnM6DQo+IA0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAg4oCiwqAgQmV0dGVyIHBlcmZvcm1hbmNlIChjaGFpbiBjb3B5IGluc3RlYWQgb2YgY29u Y2F0ZW5hdGluZykuDQo+IA0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg4oCiwqAg Tm8gbmVlZCB0byBjYWxsIHN0cmxlbigzKSwgdGhhbmtzIHRvIHRoZSB1c2VmdWwgcmV0dXJu IHZhbHVlLg0KPiANCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIOKAosKgIEZ1bmN0 aW9uIG5hbWUgdGhhdCBpcyBub3QgYWN0aXZlbHkgY29uZnVzaW5nLg0KPiANCj4gUkVUVVJO IFZBTFVFDQo+ICDCoMKgwqDCoMKgwqAgVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgcmV0dXJu IGEgcG9pbnRlciB0byB0aGUgdGVybWluYXRpbmfCoCBudWxswqAgYnl0ZQ0KPiAgwqDCoMKg wqDCoMKgIGluIHRoZSBkZXN0aW5hdGlvbiBzdHJpbmcgKHRoZXkgbmV2ZXIgdHJ1bmNhdGUp Lg0KPiANCj4gIMKgwqDCoMKgwqDCoCDigKLCoCBzdHBjcHkoMykNCj4gDQo+ICDCoMKgwqDC oMKgwqAg4oCiwqAgdXN0cjJzdHAoKQ0KPiANCj4gIMKgwqDCoMKgwqDCoCDigKLCoCBtZW1w Y3B5KDMpDQo+IA0KPiAgwqDCoMKgwqDCoMKgIFRoZcKgIGZvbGxvd2luZ8KgIGZ1bmN0aW9u cyByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUNCj4gIMKg wqDCoMKgwqDCoCBpbiB0aGUgZGVzdGluYXRpb24gc3RyaW5nLCBleGNlcHQgd2hlbiB0cnVu Y2F0aW9uIG9jY3VyczsgaWYgdHJ1bmNhdGlvbg0KPiAgwqDCoMKgwqDCoMKgIG9jY3Vycywg dGhleSByZXR1cm4gYSBwb2ludGVyIHRvIG9uZSBwYXN0IHRoZSBlbmTCoCBvZsKgIHRoZcKg IGRlc3RpbmF0aW9uDQo+ICDCoMKgwqDCoMKgwqAgYnVmZmVyLg0KPiANCj4gIMKgwqDCoMKg wqDCoCDigKLCoCBzdHBlY3B5KCkNCj4gDQo+ICDCoMKgwqDCoMKgwqAg4oCiwqAgc3RwZWNw eXgoKQ0KPiANCj4gIMKgwqDCoMKgwqDCoCBUaGXCoCBmb2xsb3dpbmcgZnVuY3Rpb24gcmV0 dXJucyBhIHBvaW50ZXIgdG8gb25lIGFmdGVyIHRoZSBsYXN0IGNoYXJhY+KAkA0KPiAgwqDC oMKgwqDCoMKgIHRlciBpbiB0aGUgZGVzdGluYXRpb24gdW50ZXJtaW5hdGVkIHN0cmluZzsg aWYgdHJ1bmNhdGlvbiBvY2N1cnMswqAgdGhhdA0KPiAgwqDCoMKgwqDCoMKgIHBvaW50ZXLC oCBpcyBlcXVpdmFsZW50IHRvIGEgcG9pbnRlciB0byBvbmUgcGFzdCB0aGUgZW5kIG9mIHRo ZSBkZXN0aW5h4oCQDQo+ICDCoMKgwqDCoMKgwqAgdGlvbiBidWZmZXIuDQo+IA0KPiAgwqDC oMKgwqDCoMKgIOKAosKgIHN0cG5jcHkoMykNCj4gDQo+ICDCoMKgIERlcHJlY2F0ZWQNCj4g IMKgwqDCoMKgwqDCoCBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyByZXR1cm4gdGhlIGxlbmd0 aCBvZiB0aGUgdG90YWwgc3RyaW5nIHRoYXQgdGhleQ0KPiAgwqDCoMKgwqDCoMKgIHRyaWVk IHRvIGNyZWF0ZSAoYXMgaWYgdHJ1bmNhdGlvbiBkaWRu4oCZdCBvY2N1cikuDQo+IA0KPiAg wqDCoMKgwqDCoMKgIOKAosKgIHN0cmxjcHkoM2JzZCkNCj4gDQo+ICDCoMKgwqDCoMKgwqAg 4oCiwqAgc3RybGNhdCgzYnNkKQ0KPiANCj4gIMKgwqDCoMKgwqDCoCBUaGUgZm9sbG93aW5n IGZ1bmN0aW9uIHJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgZGVzdGluYXRpb24gc3RyaW5n LCBvcg0KPiAgwqDCoMKgwqDCoMKgIC1FMkJJRyBvbiB0cnVuY2F0aW9uLg0KPiANCj4gIMKg wqDCoMKgwqDCoCDigKLCoCBzdHJzY3B5KDkpDQo+IA0KPiAgwqDCoMKgwqDCoMKgIFRoZSBm b2xsb3dpbmcgZnVuY3Rpb25zIHJldHVybiB0aGUgZHN0IHBvaW50ZXIsIHdoaWNoIGlzIHVz ZWxlc3MuDQo+IA0KPiAgwqDCoMKgwqDCoMKgIOKAosKgIHN0cmNweSgzKQ0KPiANCj4gIMKg wqDCoMKgwqDCoCDigKLCoCBzdHJjYXQoMykNCj4gDQo+ICDCoMKgwqDCoMKgwqAg4oCiwqAg c3RybmNweSgzKQ0KPiANCj4gIMKgwqDCoMKgwqDCoCDigKLCoCBzdHJuY2F0KDMpDQo+IA0K PiBDQVZFQVRTDQoNCkFuZCBhIG5ldyBjYXZlYXQuICBJIHRoaW5rIGl0J3Mgb2J2aW91cywg YnV0IGJldHRlciBzYWZlIHRoYW4gc29ycnkuDQoNCiAgICAgICAgRG9u4oCZdCBjaGFpbiBj YWxscyB0byB0cnVuY2F0aW5nIGFuZCBub27igJB0cnVuY2F0aW5nICBmdW5jdGlvbnMuICAg SXQgIGlzDQogICAgICAgIGNvbmNlcHR1YWxseSAgd3JvbmcgIHVubGVzcyB5b3Uga25vdyB0 aGF0IHRoZSBmaXJzdCBwYXJ0IG9mIGEgY29weSB3aWxsDQogICAgICAgIGFsd2F5cyBmaXQu ICBBbnl3YXksIHRoZSBwZXJmb3JtYW5jZSBkaWZmZXJlbmNlIHdpbGwgcHJvYmFibHkgYmUg bmVnbGnigJANCiAgICAgICAgZ2libGUsIHNvIGl0IHdpbGwgcHJvYmFibHkgYmUgbW9yZSBj bGVhciBpZiB5b3UgdXNlICBjb25zaXN0ZW50ICBzZW1hbuKAkA0KICAgICAgICB0aWNzOiAg ZWl0aGVyICB0cnVuY2F0aW5nICBvciBub27igJB0cnVuY2F0aW5nLiAgQ2FsbGluZyBhIG5v buKAkHRydW5jYXRpbmcNCiAgICAgICAgZnVuY3Rpb24gYWZ0ZXIgYSB0cnVuY2F0aW5nIG9u ZSBpcyBuZWNlc3NhcmlseSB3cm9uZy4NCg0KDQo+ICDCoMKgwqDCoMKgwqAgU29tZSBvZiB0 aGUgZnVuY3Rpb25zIGRlc2NyaWJlZCBoZXJlIGFyZSBub3QgcHJvdmlkZWQgYnnCoCBhbnnC oCBsaWJyYXJ5Ow0KPiAgwqDCoMKgwqDCoMKgIHlvdSBzaG91bGQgd3JpdGUgeW91ciBvd24g Y29weSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlbS4NCj4gDQo+ICDCoMKgwqDCoMKgwqAgVGhl wqAgZGVwcmVjYXRlZCBzdGF0dXMgb2YgdGhlc2UgZnVuY3Rpb25zIHZhcmllcyBmcm9tIHN5 c3RlbSB0byBzeXN0ZW0uDQo+ICDCoMKgwqDCoMKgwqAgVGhpcyBwYWdlIGRlY2xhcmVzIGFz IGRlcHJlY2F0ZWQgdGhvc2UgZnVuY3Rpb25zIHRoYXQgaGF2ZSBhIGJldHRlciByZeKAkA0K PiAgwqDCoMKgwqDCoMKgIHBsYWNlbWVudCBkb2N1bWVudGVkIGluIHRoaXMgc2FtZSBwYWdl Lg0KPiANCj4gRVhBTVBMRVMNCj4gIMKgwqDCoMKgwqDCoCBUaGUgZm9sbG93aW5nIGFyZSBl eGFtcGxlcyBvZiBjb3JyZWN0IHVzZSBvZiBlYWNoIG9mIHRoZXNlIGZ1bmN0aW9ucy4NCj4g DQo+ICDCoMKgwqDCoMKgwqAgc3RwY3B5KDMpDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHAgPSBidWY7DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHAgPSBzdHBjcHkocCwgIkhlbGxvICIpOw0KPiAgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBwID0gc3RwY3B5KHAsICJ3b3JsZCIpOw0KPiAgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwID0gc3RwY3B5KHAsICIhIik7DQo+ICDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxlbiA9IHAgLSBidWY7DQo+ICDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHB1dHMoYnVmKTsNCj4gDQo+ICDCoMKg wqDCoMKgwqAgc3RwZWNweSgpDQo+ICDCoMKgwqDCoMKgwqAgc3RwZWNweXgoKQ0KPiAgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwYXN0X2VuZCA9IGJ1ZiArIHNpemVv ZihidWYpOw0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwID0gYnVm Ow0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwID0gc3RwZWNweShw LCBwYXN0X2VuZCwgIkhlbGxvICIpOw0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBwID0gc3RwZWNweShwLCBwYXN0X2VuZCwgIndvcmxkIik7DQo+ICDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHAgPSBzdHBlY3B5KHAsIHBhc3RfZW5kLCAi ISIpOw0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAocCA9PSBw YXN0X2VuZCkgew0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHAtLTsNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBnb3RvIHRvb2xvbmc7DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IH0NCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGVuID0gcCAtIGJ1 ZjsNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHV0cyhidWYpOw0K PiANCj4gIMKgwqDCoMKgwqDCoCBzdHBuY3B5KDMpDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHBhc3RfZW5kID0gYnVmICsgc2l6ZW9mKGJ1Zik7DQo+ICDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVuZCA9IHN0cG5jcHkoYnVmLCAiSGVs bG8gd29ybGQhIiwgc2l6ZW9mKGJ1ZikpOw0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBpZiAoZW5kID09IHBhc3RfZW5kKQ0KPiAgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gdG9vbG9uZzsNCj4gIMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGVuID0gZW5kIC0gYnVmOw0KPiAgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVv ZihidWYpOyBpKyspDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgcHV0Y2hhcihidWZbaV0pOw0KPiANCj4gIMKgwqDCoMKgwqDCoCB1c3RyMnN0cCgp DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHAgPSBidWY7DQo+ICDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHAgPSB1c3RyMnN0cChwLCAiSGVs bG8gIiwgNik7DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHAgPSB1 c3RyMnN0cChwLCAid29ybGQiLCA0Mik7wqAgLy8gUGFkZGluZyBudWxsIGJ5dGVzIGlnbm9y ZWQuDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHAgPSB1c3RyMnN0 cChwLCAiISIsIDEpOw0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBs ZW4gPSBwIC0gYnVmOw0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBw dXRzKGJ1Zik7DQo+IA0KPiAgwqDCoMKgwqDCoMKgIG1lbXBjcHkoMykNCj4gIMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcCA9IGJ1ZjsNCj4gIMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgcCA9IG1lbXBjcHkocCwgIkhlbGxvICIsIDYpOw0KPiAg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwID0gbWVtcGNweShwLCAid29y bGQiLCA1KTsNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcCA9IG1l bXBjcHkocCwgIiEiLCAxKTsNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcCA9ICdcMCc7DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxl biA9IHAgLSBidWY7DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHB1 dHMoYnVmKTsNCj4gDQo+ICDCoMKgIERlcHJlY2F0ZWQNCj4gIMKgwqDCoMKgwqDCoCBzdHJs Y3B5KDNic2QpDQo+ICDCoMKgwqDCoMKgwqAgc3RybGNhdCgzYnNkKQ0KPiAgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoc3RybGNweShidWYsICJIZWxsbyAiLCBz aXplb2YoYnVmKSkgPj0gc2l6ZW9mKGJ1ZikpDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byB0b29sb25nOw0KPiAgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoc3RybGNhdChidWYsICJ3b3JsZCIsIHNpemVvZihi dWYpKSA+PSBzaXplb2YoYnVmKSkNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBnb3RvIHRvb2xvbmc7DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGxlbiA9IHN0cmxjYXQoYnVmLCAiISIsIHNpemVvZihidWYpKTsNCj4g IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGxlbiA+PSBzaXplb2Yo YnVmKSkNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBn b3RvIHRvb2xvbmc7DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHB1 dHMoYnVmKTsNCj4gDQo+ICDCoMKgwqDCoMKgwqAgc3Ryc2NweSg5KQ0KPiAgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsZW4gPSBzdHJzY3B5KGJ1ZiwgIkhlbGxvIHdv cmxkISIsIHNpemVvZihidWYpKTsNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgaWYgKGxlbiA9PSAtRTJCSUcpDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgZ290byB0b29sb25nOw0KPiAgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBwdXRzKGJ1Zik7DQo+IA0KPiAgwqDCoMKgwqDCoMKgIHN0cmNw eSgzKQ0KPiAgwqDCoMKgwqDCoMKgIHN0cmNhdCgzKQ0KPiAgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBzdHJjcHkoYnVmLCAiSGVsbG8gIik7DQo+ICDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cmNhdChidWYsICJ3b3JsZCIpOw0KPiAgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJjYXQoYnVmLCAiISIpOw0KPiAg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsZW4gPSBzdHJsZW4oYnVmKTsN Cj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHV0cyhidWYpOw0KPiAN Cj4gIMKgwqDCoMKgwqDCoCBzdHJuY3B5KDMpDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHN0cm5jcHkoYnVmLCAiSGVsbG8gd29ybGQhIiwgc2l6ZW9mKGJ1Zikp Ow0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoYnVmICsgc2l6 ZW9mKGJ1ZikgLSAxID09ICdcMCcpDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgZ290byB0b29sb25nOw0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBsZW4gPSBzdHJubGVuKGJ1Ziwgc2l6ZW9mKGJ1ZikpOw0KPiAgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmb3IgKHNpemVfdCBpID0gMDsgaSA8 IHNpemVvZihidWYpOyBpKyspDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcHV0Y2hhcihidWZbaV0pOw0KPiANCj4gIMKgwqDCoMKgwqDCoCBzdHJu Y2F0KDMpDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cm5jcHko YnVmLCAiSGVsbG8gIiwgNik7DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHN0cm5jYXQoYnVmLCAid29ybGQiLCA0Mik7wqAgLy8gUGFkZGluZyBudWxsIGJ5dGVz IGlnbm9yZWQuDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cm5j YXQoYnVmLCAiISIsIDEpOw0KPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBwdXRzKGJ1Zik7DQo+IA0KPiBTRUUgQUxTTw0KPiAgwqDCoMKgwqDCoMKgIG1lbWNweSgz KSwgbWVtY2NweSgzKSwgbWVtcGNweSgzKSwgc3RyaW5nKDMpDQo+IA0KPiBMaW51eCBtYW7i gJBwYWdlcyAodW5yZWxlYXNlZCnCoMKgwqDCoMKgwqDCoCAoZGF0ZSnCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RyaW5nX2NvcHkoNykNCj4gDQo+IA0K PiANCg0KLS0gDQo8aHR0cDovL3d3dy5hbGVqYW5kcm8tY29sb21hci5lcy8+DQo= --------------BOrl5BBbVsRKgkkj3iSOFjfA-- --------------E2UhQvTDWmHzRKJGGqkpEmgI 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/2zIFAmOWdqYACgkQnowa+77/ 2zJ+Ww//U+wuVr0C6hQ4ciyvhMkER2gyiUkbbW+TVxyzsHk2GvXI34mX7k/KjDnB pFSd7/u18zgUflWCFM7CIVrUNug+en9ldezNrij5fHcFEuoraojEqJk4AJlshYhm 0/abCkhQW1thWv7V9JfEckZNOOy5tsceUrv5kpojQd0HUGucRNG7dnz1bBgHeFz7 pLefSCmGnbWuMYkWbiRMPwmyuYpw2eDV5lL38uWiTEDE4H57FqUjQqrACPywL/Gf s9LCYSX2fpqoFNTcBM1OxgmjpPNz6zzsAesNNvXy/QhzBHG179DRSV3tUM0spi2P 2KK8OlredfZLDOXrtzRht5kibQOmSarbQDmNtKdYQOuV9DYA7/+z8DlH+qndcaNO VvBsRNCjb4MLzowIpwY7v3DWAZdlZhkOudA2s56rMlU86Ifj7JEAQ1b+ePHLZJ6m kzgsVhvx65stneitfTQvgDrSW3LKswvuty+2upt7RjqpazA9ehTTdMAn6KhJRl2m dSaCZ8mHG0/koS69O3fACkoSWDieC/6FnO6rVIWxbEVel40KuSdxMl7aOkfpp43D fDxwFaJ8GmGILfjHQhVIO7KZkiSH1rlC1eIsy5oXujl4GvPY3OpjNfyYeJ+BMUrs Nx5CRAAReO5kZ6RvnUhg8eumtkF2p8qBQLCEaQBqtjG6ux/dLjY= =b1pz -----END PGP SIGNATURE----- --------------E2UhQvTDWmHzRKJGGqkpEmgI--