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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 08E8EC27C78 for ; Tue, 11 Jun 2024 19:39:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Date:Cc:To:From:Subject:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=gO4yyfJjvboBKyvBWIJ55HkkmNC+DwwtBzTFeEG2CiI=; b=4s3g3sHFH3QCnV xHW3SvNxbD32oG53oxrqX9CwU489pRuoMaztIOHx+CFVDSP7jc/mJiMsReqdZ7kDbw9QAh+ELbln0 j0pKLoPrYfwstXPkVKUNq6p9cd9gw3FdOg9lO9ZxL397X0BeYWSHJ3LLjlNDCX1ZN/qe+rOBSdz1V EaMZ7GScOuzGXkFmk78DwtFMVgv8UWomY6kYUjwG0IuVxXN8yCXomLqseUJy5niLriylHDi0AAJsr HhyGL1+AMBtwydqsQZOfK1QsQYv+8q7LeNYjPmGQ+cUJQR0IbHOrQt3RbT82Bgh7QLiSnQ12sIhZ1 C3zV5UCM+f/CJJgywCbA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sH7Kg-0000000A362-2qlH; Tue, 11 Jun 2024 19:39:02 +0000 Received: from mail-wr1-x42f.google.com ([2a00:1450:4864:20::42f]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sH7Kb-0000000A32Q-45VP; Tue, 11 Jun 2024 19:39:01 +0000 Received: by mail-wr1-x42f.google.com with SMTP id ffacd0b85a97d-35f1691b18fso2987039f8f.2; Tue, 11 Jun 2024 12:38:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718134734; x=1718739534; darn=lists.infradead.org; h=mime-version:user-agent:content-transfer-encoding:references :in-reply-to:date:cc:to:from:subject:message-id:from:to:cc:subject :date:message-id:reply-to; bh=mMuKKGbiLvzl7g567RMJt94PCP09N1aUUNw3PJ69S5U=; b=AF/c5+WfMniui7TOo6DIyADnVOQRsI/+w9eFw+L7Nd+RjeGzg383BZ31SJmvbPQhww MAZmKW/4cPY3wRyhCiJIUk1QtjoYmH1Sih3imBVzd8maQVBwCr8euA6VmGDb9fwyWhQh qGlBZgWcAYx57/C1L7PhCuiXoMv6wuHXDLncqXzoP4O25dTYG1M/4Ct3zFuis6j3amN2 maHjAc0X8xgIKnYDCvfQlGhRdNTLF142faG415t5t2pwzuSLLBtkm1aM4w55LJrICDa2 ZpswE2uroniFtEXypMjGrvxGP6vgelnEA/SMH8VB4ynsT2JgxjbvjcrJ387KW4vVeB/Z 8Ugw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718134734; x=1718739534; h=mime-version:user-agent:content-transfer-encoding:references :in-reply-to:date:cc:to:from:subject:message-id:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=mMuKKGbiLvzl7g567RMJt94PCP09N1aUUNw3PJ69S5U=; b=QamR1vg9LDBX/dpW94djqUl/5CRtkLn4GwMQovoojZDGGRTZ/wdlbtOzxvgbdON76B frDJAaNWKJx35kB5103UCPFtFrrZdX1K6ovfkXS+0yAufSD2UPMpxIHma5+z7dx4Bkmb T1ml0PrrGWa73EgKQzjcFnQ1CaYAxcxbVz/dcGpwMhTXlCv9bRC50pxhN4znwSp2gOFx qo9emuUmKdDESshlvA6mvCiL7t7OQvmw68lS5X0Nv/R8W7z+I8UCA5fOydVfo3UzoWwi EIoK+xvp1Vjl6gZ5meFnYwBBpwgq4+22sCQ15u4BG9ndHOR/J1WO9eV6iBPWUypqXAwf nHqg== X-Forwarded-Encrypted: i=1; AJvYcCWsSC8wcvXC1LuwdBUHK+/IKhkJguXlAFAcjEFOEZdGUdXnwRR1jnPY5HQaYi7uGk3vn8ZCZgkyhrWiGjHx9huJ3pvpOqWbQJSkN1cvBGfhGDVHdTdAM/Vwd2rzs6xD5yQzVqMFCAm5Tpwfpa/MU7Q0nr1+Kc7xXgjgeMiGW+h2WU9KvE4B1wootmZfuXPgloO5ZNlIyTaz X-Gm-Message-State: AOJu0Yy+ZZui638W1O3Ekxul+ZCgMIHYI8DJ/EmrJgfrMZzKT5aA05D/ gV5b9n7jZLrRBp7cJgtAcRDHUeswwQDdfbr+9haRw8l7+2kxi+l1 X-Google-Smtp-Source: AGHT+IHJG4CxOHoiEYQZFTcAR5H73GlsNVvt7EMw1Bte0lOGSli21iSBCvk7Dv1tJ+cisx7RdIKaHg== X-Received: by 2002:a05:600c:314a:b0:422:1a82:3ebf with SMTP id 5b1f17b1804b1-4221a824515mr38327285e9.35.1718134733320; Tue, 11 Jun 2024 12:38:53 -0700 (PDT) Received: from hermes.prahal.homelinux.net (91-175-163-178.subs.proxad.net. [91.175.163.178]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-421791b1ea9sm135406905e9.21.2024.06.11.12.38.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Jun 2024 12:38:52 -0700 (PDT) Message-ID: <2427291970ac0962bf56b2455e5cb26e49d42c51.camel@gmail.com> Subject: Re: [PATCH 1/3] phy: rockchip: emmc: Enable pulldown for strobe line From: Alban Browaeys To: Heiko =?ISO-8859-1?Q?St=FCbner?= , Conor Dooley Cc: dev@folker-schwesinger.de, Vinod Koul , Kishon Vijay Abraham I , Chris Ruehl , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Christopher Obbard , Doug Anderson , Brian Norris , Jensen Huang , linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org Date: Tue, 11 Jun 2024 21:38:52 +0200 In-Reply-To: <2192003.Icojqenx9y@diego> References: <20240326-rk-default-enable-strobe-pulldown-v1-0-f410c71605c0@folker-schwesinger.de> <313d5a24b6cffa1a9160e624bb6855aa7f66589e.camel@gmail.com> <20240411-mushily-pucker-732583c1d340@spud> <2192003.Icojqenx9y@diego> User-Agent: Evolution 3.52.2-2 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240611_123858_240844_D9C975A7 X-CRM114-Status: GOOD ( 80.73 ) X-BeenThere: linux-phy@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux Phy Mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-phy" Errors-To: linux-phy-bounces+linux-phy=archiver.kernel.org@lists.infradead.org VGhpcyBpcyBxdWl0ZSBhIGRldGFpbGVkIHJlcGxpZWQuIGluIHN1bW1hcnkgSSBiZWxpZXZlIHRo ZSBlbmFibGUtCnN0cm9iZSBwcm9wZXJ0eSBzaG91bGQgYmUgYWRkZWQgYXMgc29vbiBhcyBwb3Nz aWJsZSB0byByZXN0b3JlIGhzNDAwCnN1cHBvcnQuCgpJbiB0aGUgcHJvY2VzcyBpdCB3aWxsIGJl IGVhc2llciB0byBzZWUgaWYgYW55IHVwc3RyZWFtIGR0cyBoYXMgaHM0MDAKZW5hYmxlZCBhbmQg ZG9lcyBub3QgcmVxdWlyZSB0byBmb3JjZSB0aGlzIGVuYWJsZS1zdHJvYmUgcHJvcGVydHkuIAoK QXMgZmFyIGFzIEkgdW5kZXJzdG9vZCB0aGUgb25seSBib2FyZHMgdGhhdCBkbyBub3Qgc3VwcG9y dCBlbmFibGUtCnN0cm9iZSBwdWxsZG93biBieSBkZWZhdWx0IGRvIG5vdCBzdXBwb3J0IGhzNDAw IGVpdGhlciAoYmVjYXVzZSB0aGV5IGRvCm5vdCBzdXBwb3J0IHN0cm9iZSBwdWxsZG93biBlbmFi bGVkIGR1ZSB0byB3aXJpbmcgaXNzdWUsIGJ1dCB0aGF0IGFsc28KcHJldmV0biB0aGVtIGZyb20g ZW5hYmxpbmcgaHM0MDApLgoKQW5kIHRoZW4gaWYgSSBtYW5hZ2VkIHRvIGNvbnZpbmNlIHlvdSB0 aGF0IHRoZSBiZXN0IHBvbGljeSBpcyB0bwpyZXN0b3JlIHByZXZpb3VzIGJlaGF2aW91ciBvZiBu b3Qgc2V0dGluZyBhIGRlZmF1bHQgaW4gdGhlIGtlcm5lbCAoYW5kCnByb3ZpZGVzIGVuYWJsZSBh bmQgZGlzYWJsZSBwcm9wZXJ0aWVzIGZvciB0aG9zZSB0aGF0IHdhbnQgdG8gZm9yY2UKZXRoZXIg d2F5IGJlIGl0IGR1ZSB0byB3aXJpbmcgaXNzdWVzKSwgcmVtb3ZlIHRoZXNlIHByb3BlcnRpZXMg b25jZSB0aGUKZGVmYXVsdCBpcyByZW1vdmVkLgoKCkxlIHZlbmRyZWRpIDE5IGF2cmlsIDIwMjQg w6AgMTY6MzEgKzAyMDAsIEhlaWtvIFN0w7xibmVyIGEgw6ljcml0wqA6Cj4gQW0gRG9ubmVyc3Rh ZywgMTEuIEFwcmlsIDIwMjQsIDE3OjQyOjI0IENFU1Qgc2NocmllYiBDb25vciBEb29sZXk6Cj4g PiBPbiBXZWQsIEFwciAxMCwgMjAyNCBhdCAwODoyODo1N1BNICswMjAwLCBBbGJhbiBCcm93YWV5 cyB3cm90ZToKPiA+ID4gTGUgamV1ZGkgMjggbWFycyAyMDI0IMOgIDE4OjAxICswMDAwLCBDb25v ciBEb29sZXkgYSDDqWNyaXQgOgo+ID4gPiA+IE9uIFRodSwgTWFyIDI4LCAyMDI0IGF0IDA2OjAw OjAzUE0gKzAxMDAsIEFsYmFuIEJyb3dhZXlzIHdyb3RlOgo+ID4gPiA+ID4gTGUgbWFyZGkgMjYg bWFycyAyMDI0IMOgIDE5OjQ2ICswMDAwLCBDb25vciBEb29sZXkgYSDDqWNyaXQgOgo+ID4gPiA+ ID4gPiBPbiBUdWUsIE1hciAyNiwgMjAyNCBhdCAwNzo1NDozNVBNICswMTAwLCBGb2xrZXIKPiA+ ID4gPiA+ID4gU2Nod2VzaW5nZXIgdmlhCj4gPiA+ID4gPiA+IEI0Cj4gPiA+ID4gPiA+IFJlbGF5 IHdyb3RlOgo+ID4gPiA+ID4gPiA+IEZyb206IEZvbGtlciBTY2h3ZXNpbmdlciA8ZGV2QGZvbGtl ci1zY2h3ZXNpbmdlci5kZT4KPiA+ID4gPiA+ID4gPiAtCWlmIChvZl9wcm9wZXJ0eV9yZWFkX2Jv b2woZGV2LT5vZl9ub2RlLAo+ID4gPiA+ID4gPiA+ICJyb2NrY2hpcCxlbmFibGUtCj4gPiA+ID4g PiA+ID4gc3Ryb2JlLXB1bGxkb3duIikpCj4gPiA+ID4gPiA+ID4gLQkJcmtfcGh5LT5lbmFibGVf c3Ryb2JlX3B1bGxkb3duID0KPiA+ID4gPiA+ID4gPiBQSFlDVFJMX1JFTl9TVFJCX0VOQUJMRTsK PiA+ID4gPiA+ID4gPiArCWlmIChvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woZGV2LT5vZl9ub2RlLAo+ ID4gPiA+ID4gPiA+ICJyb2NrY2hpcCxkaXNhYmxlLQo+ID4gPiA+ID4gPiA+IHN0cm9iZS1wdWxs ZG93biIpKQo+ID4gPiA+ID4gPiA+ICsJCXJrX3BoeS0+ZW5hYmxlX3N0cm9iZV9wdWxsZG93biA9 Cj4gPiA+ID4gPiA+ID4gUEhZQ1RSTF9SRU5fU1RSQl9ESVNBQkxFOwo+ID4gPiA+ID4gPiAKPiA+ ID4gPiA+ID4gVW5mb3J0dW5hdGVseSB5b3UgY2Fubm90IGRvIHRoaXMuCj4gPiA+ID4gPiA+IFBy ZXZpb3VzbHkgbm8gcHJvcGVydHkgYXQgYWxsIG1lYW50IGRpc2FibGVkIGFuZCBhIHByb3BlcnR5 Cj4gPiA+ID4gPiA+IHdhcwo+ID4gPiA+ID4gPiByZXF1aXJlZAo+ID4gPiA+ID4gPiB0byBlbmFi bGUgaXQuIFdpdGggdGhpcyBjaGFuZ2UgdGhlIGFic2VuY2Ugb2YgYSBwcm9wZXJ0eQo+ID4gPiA+ ID4gPiBtZWFucwo+ID4gPiA+ID4gPiB0aGF0Cj4gPiA+ID4gPiA+IGl0Cj4gPiA+ID4gPiA+IHdp bGwgYmUgZW5hYmxlZC4KPiA+ID4gPiA+ID4gQW4gb2xkIGRldmljZXRyZWUgaXMgdGhhdCB3YW50 ZWQgdGhpcyB0byBiZSBkaXNhYmxlZCB3b3VsZAo+ID4gPiA+ID4gPiBoYXZlCj4gPiA+ID4gPiA+ IG5vCj4gPiA+ID4gPiA+IHByb3BlcnR5IGFuZCB3aWxsIG5vdyBlbmQgdXAgd2l0aCBpdCBlbmFi bGVkLiBUaGlzIGlzIGFuCj4gPiA+ID4gPiA+IEFCSQo+ID4gPiA+ID4gPiBicmVhawo+ID4gPiA+ ID4gPiBhbmQgaXMKPiA+ID4gPiA+ID4gY2xlYXJseSBub3QgYmFja3dhcmRzIGNvbXBhdGlibGUs IHRoYXQncyBhIE5BSyB1bmxlc3MgaXQgaXMKPiA+ID4gPiA+ID4gZGVtb25zdHJhYmxlCj4gPiA+ ID4gPiA+IHRoYXQgbm9vbmUgYWN0dWFsbHkgd2FudHMgdG8gZGlzYWJsZSBpdCBhdCBhbGwuCj4g PiA+ID4gPiAKPiA+ID4gPiA+IAo+ID4gPiA+ID4gQnV0IHRoZSBwYXRjaCB0aGF0IGludHJvZHVj ZWQgdGhlIG5ldyBkZWZhdWx0IHRvIGRpc2FibGUgdGhlCj4gPiA+ID4gPiBwdWxsZG93bgo+ID4g PiA+ID4gZXhwbGljaXRlbHkgaW50cm9kdWNlZCBhIHJlZ3Jlc3Npb24gZm9yIGF0IGxlYXN0IDQg Ym9hcmRzLgo+ID4gPiA+ID4gSXQgdG9vayB0aW1lIHRvIHNvcnQgb3V0IHRoYXQgdGhlIGRlZmF1 bHQgdG8gZGlzYWJsZSBwdWxsZG93bgo+ID4gPiA+ID4gd2FzCj4gPiA+ID4gPiB0aGUKPiA+ID4g PiA+IGN1bHByaXQgYnV0IHN0aWxsLgo+ID4gPiA+ID4gV2lsbCB3ZSBjYXJyeSB0aGlzIG5ldyBi ZWhhdm9yIHRoYXQgYnJlYWtzIHRoZSBkZWZhdWx0IGRlc2lnbgo+ID4gPiA+ID4gZm9yCj4gPiA+ ID4gPiByazMzOTkgYmVjYXVzZSBzaW5jZSB0aGUgcmVncmVzc2lvbiB3YXMgaW50cm9kdWNlZCBu ZXcgYm9hcmQKPiA+ID4gPiA+IGRlZmluaXRpb24KPiA+ID4gPiA+IG1pZ2h0IGhhdmUgZXhwY2V0 ZWQgdGhpcyBuZXcgYmVoYXZpb3IuCj4gPiA+ID4gPiAKPiA+ID4gPiA+IENvdWxkIHRoZSBiZXN0 IG9wdGlvbiBiZSB0byByZXZlcnQgdG8gw6lub3Qgc2V0IGEgZGVmYXVsdAo+ID4gPiA+ID4gZW5h YmxlL2Rpc2FibGUKPiA+ID4gPiA+IHB1bGxkb3duIiAoYXMgYmVmb3JlIHRoZSBjb21taXQgdGhh dCBpbnRyb2R1Y2VkIHRoZQo+ID4gPiA+ID4gcmVncmVzc2lvbikgYW5kCj4gPiA+ID4gPiBhbGxv dyBvbmUgdG8gZm9yY2UgdGhlIHB1bGxkb3duIHZpYSB0aGUgZW5hYmxlL2Rpc2FibGUKPiA+ID4g PiA+IHB1bGxkb3duCj4gPiA+ID4gPiBwcm9wZXJ0eT8KPiA+ID4gPiA+IEkgbWVhbiB0aGUgY29t bWl0IHRoYXQgaW50cm9kdWNlZCBhIGRlZmF1bHQgdmFsdWUgZm9yIHRoZQo+ID4gPiA+ID4gcHVs bGRvd24KPiA+ID4gPiA+IGRpZAo+ID4gPiA+ID4gbm90IHNlZW0gdG8gYmUgYWJvdXQgZml4aW5n IGFueXRoaW5nLiBCdXQgaXQgYnJva2UgYSBsb3QuIEFOZAo+ID4gPiA+ID4gaXQKPiA+ID4gPiA+ IHdhcwo+ID4gPiA+ID4gcmVhbGx5IHJlYWxseSBoYXJkIHRvIGZpbmQgdGhlIGRlc2NyaXB0aW9u IG9mIHRoaXMgY29tbWl0IHRvCj4gPiA+ID4gPiB1bmRlcnN0YW5kCj4gPiA+ID4gPiB0aGF0IG9u ZSBoYWQgdG8gZW5hYmxlIHB1bGxkb3duIHRvIHJlc3RvcmUgaHM0MDAuCj4gPiA+ID4gPiAKPiA+ ID4gPiA+IEluIG1vcmUgdGhhbiAzIHllYXJzLCBvbmx5IG9uZSBib2FyZCBtYWludGFpbmVyIG5v dGljZWQgdGhhdAo+ID4gPiA+ID4gdGhpcwo+ID4gPiA+ID4gcHJvcGVydHkgd2FzIHJlcXVpcmVk IHRvIGdldCBiYWNrIEhTNDAwwqAgYW5kIHRoYW5rcyB0byBhIHVzZXIKPiA+ID4gPiA+IHRlbGxp bmcKPiA+ID4gPiA+IG1lIHRoYXQgdGhpcyBib2FyZCB3YXMgd29ya2luZyBJIGZvdW5kIGZyb20g dGhpcyBib2FyZCB0aGF0Cj4gPiA+ID4gPiB0aGlzCj4gPiA+ID4gPiBwcm9wZXJ0eSB3YXMgIm1p c3NpbmciIGZyb20gbW9zdCBib2FyZCBkZWZpbml0aW9ucyAod2hpbGUgaXQKPiA+ID4gPiA+IHdh cwo+ID4gPiA+ID4gbm90Cj4gPiA+ID4gPiByZXF1aXJlZCBiZWZvcmUpLgo+ID4gPiA+ID4gCj4g PiA+ID4gPiAKPiA+ID4gPiA+IEkgYW0gYWxsIGZvciBub3QgYnJlYWtpbmcgQUJJLiBCdXQgd2hh dCBhYm91dCBub3QgcmV2ZXJ0aW5nIGEKPiA+ID4gPiA+IHBhdGNoCj4gPiA+ID4gPiB0aGF0IGFs cmVhZHkgYnJva2UgQUJJIGJlY2F1c2UgdGhpcyBwYXRjaCBpbnRyb2R1Y2VkIGEgbmV3Cj4gPiA+ ID4gPiBBQkkgdGhhdAo+ID4gPiA+ID4gd2UKPiA+ID4gPiA+IGRvbid0IHdhbnQgdG8gYnJlYWs/ Cj4gPiA+ID4gPiBJIG1lYW4gc2hvdWxkbid0IGEgbmV3IGNvbW1pdCB3aXRoIGEgbmV3IEFCSSB0 aGF0IHJlZ3Jlc3NlZAo+ID4gPiA+ID4gdGhlCj4gPiA+ID4gPiBrZXJuZWwKPiA+ID4gPiA+IGJl IHJldmVydGVkPwo+ID4gPiA+IAo+ID4gPiA+IEkgdGhpbmsgSSBzYWlkIGl0IGFmdGVyIE9QIHJl cGxpZWQgdG8gbWUgeWVzdGVyZGF5LCBidXQgdGhpcyBpcwo+ID4gPiA+IGEKPiA+ID4gPiBwcmV0 dHkKPiA+ID4gPiBzaGl0dHkgc2l0dWF0aW9uIGluIHRoYXQgdGhlIG9yaWdpbmFsIGRlZmF1bHQg cGlja2VkIGZvciB0aGUKPiA+ID4gPiBwcm9wZXJ0eQo+ID4gPiA+IHdhcyBhY3R1YWxseSBpbmNv cnJlY3QuIEdpdmVuIGl0J3MgYmVlbiBsaWtlIHRoaXMgZm9yIGZvdXIKPiA+ID4gPiB5ZWFycwo+ ID4gPiA+IGJlZm9yZQo+ID4gPiA+IGFueW9uZSBub3RpY2VkLCBhbmQgb3RoZXJzIHByb2JhYmx5 IGRlcGVuZCBvbiB0aGUgY3VycmVudAo+ID4gPiA+IGJlaGF2aW91ciwKPiA+ID4gPiB0aGF0J3Mg aGFyZCB0byBqdXN0aWZ5Lgo+ID4gPiA+IAo+ID4gPiAKPiA+ID4gQSBsb3Qgb2YgcGVvcGxlIG5v dGljZWQgZmFzdCB0aGF0IEhTNDAwIHdhcyBicm9rZW4gaW4gdGhlIDUuMTAKPiA+ID4gYnJhbmNo Cj4gPiA+IGJ1dCBkdWUgdG8gYW5vdGhlciBjb21taXQgKG1vcmUgbGF0ZXIsIGllIGRvdWJsZSBy ZWd1bGF0b3IgaW5pdAo+ID4gPiB0aGF0Cj4gPiA+IG1lc3NlZCB1cCBlbW1jKSB0aGlzIHNlY29u ZCBicmVha2FnZSB3YXMgbm90IGRldGVjdGVkLiBCdXQgbW9zdGx5Cj4gPiA+IGRvd25zdHJlYW0u IEFuZCBtb3N0IGlmIG5vdCBhbGwgcmszMzk5IGJvYXJkcyBpbiBBcm1iaWFuIGhhZAo+ID4gPiBI UzQwMAo+ID4gPiBkaXNhYmxlZC4KPiA+ID4gCj4gPiA+IAo+ID4gPiBJdCB0b29rIDMgeWVhcnMg dG8gZGV0ZWN0IHRoYXQgSFM0MDAgd2FzIGJyb2tlbiBvbiBhIGZldyBib2FyZHMKPiA+ID4gbGlr ZQo+ID4gPiBSb2NrIFBpNCBpbiB0aGUgdXBzdHJlYW0ga2VybmVsLiBBbnkgbWlnaHQgc3RpbGwg YmUgYnJva2VuLgo+ID4gPiBJIHdvdWxkIG5vdCBjb3VudCBvbiB0aGUgZmFjdCB0aGF0IGtlZXBp bmcgdGhlIGN1cnJlbnQgYmVoYXZpb3IKPiA+ID4gZXF1YWxzCj4gPiA+IG5vIG1vcmUgYnJva2Vu IGJvYXJkcy4KPiA+ID4gCj4gPiA+IEZyb20gdGhlIHByZXZpb3VzIGV4Y2hhbmdlcyB0aGUgYm9h cmRzIHRoYXQgcmVxdWlyZXMgdGhlIHB1bGxkb3duCj4gPiA+IHRvIGJlCj4gPiA+IGRpc2FibGVk IHNlZW1zIHdlbGwga25vd24uCj4gPiA+IAo+ID4gPiBUaG91Z2ggSSBhbSBmaW5lIHdpdGggYWRk aW5nIGEgcHJvcGVydHkgdG8gc2V0IGVuYWJsZSBwdWxsZG93biB0bwo+ID4gPiBhbnkKPiA+ID4g Ym9hcmQgZGVmaW5pdGlvbiBmaWxlIHdoZXJlIHRoYXQgaXMgcmVxdWlyZWQuCj4gPiA+IAo+ID4g PiBPbmx5IEkgZG8gbm90IGJlbGlldmUga2VlcGluZyB0aGUgc3RhdHUgcXVvIGVxdWFsIGV2ZXJ5 dGhpbmcKPiA+ID4gd29ya3MKPiA+ID4gYmVjYXVzZSBpdCBoYXMgYmVlbiAzIHllYXJzLgo+ID4g Cj4gPiBGV0lXLCBJIGRpZG4ndCBzYXkgdGhpcy4gQ2xlYXJseSBpZiB0aGF0IHdhcyB0aGUgY2Fz ZSwgdGhpcyBwYXRjaAo+ID4gd291bGQKPiA+IG5ldmVyIGhhdmUgYXJyaXZlZC4KPiA+IAo+ID4g PiBJbiBmYWN0IHRoaXMgY29tbWl0IHJlYWNoZWQgdGhlIGRvd25zdHJlYW0ga2VybmVscyB3YXkg bGF0ZXIuIEFueQo+ID4gPiBzdGF5ZWQgd2l0aCB0aGUgNS4xMCBicmFuY2ggZm9yIHllYXJzLgo+ ID4gPiAKPiA+ID4gQnV0IG9uIHRoZSBvdGhlciBzaWRlIHRoZSBkaXNhYmxlIHB1bGxkb3duIGJ5 IGRlZmF1bHQgaXMgYWxyYWVkeQo+ID4gPiBpbgo+ID4gPiBzdGFibGUvbGludXgtcm9sbGluZy1s dHMgLgo+ID4gPiAKPiA+ID4gPiA+IE1pbmQgZml4aW5nIHRoZSBpbml0aWFsIHJlZ3Jlc3Npb24g OGI1YzJiNDViOGYwICJwaHk6Cj4gPiA+ID4gPiByb2NrY2hpcDogc2V0Cj4gPiA+ID4gPiBwdWxs ZG93biBmb3Igc3Ryb2JlIGxpbmUgaW4gZHRzIiBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuCj4g PiA+ID4gPiBjaGFuZ2luZwo+ID4gPiA+ID4gdGhlCj4gPiA+ID4gPiBkZWZhdWx0IHRvIHRoZSBv cHBvc2l0ZSB2YWx1ZSBidXQgY291bGQgYWxzbyBiZSByZXZlcnRpbmcgdG8KPiA+ID4gPiA+IG5v dAo+ID4gPiA+ID4gc2V0dGluZyBhIGRlZmF1bHQuCj4gPiA+ID4gCj4gPiA+ID4gVGhhdCdzIGFs c28gcHJvYmxlbWF0aWMsIGFzIHRoZSBvbmx5IHdheSB0byBkbyB0aGlzIGlzIG1ha2UKPiA+ID4g PiBzZXR0aW5nCj4gPiA+ID4gb25lIG9mIHRoZSBlbmFibGVkIG9yIGRpc2FibGVkIHByb3BlcnRp ZXMgcmVxdWlyZWQsIHdoaWNoIGlzCj4gPiA+ID4gYWxzbyBhbgo+ID4gPiA+IEFCSQo+ID4gPiA+ IGJyZWFrLCBzaW5jZSB5b3UnZCB0aGVuIGJlIHJlamVjdGluZyBwcm9iZSBpZiBvbmUgaXMgbm90 Cj4gPiA+ID4gcHJlc2VudC4KPiA+ID4gCj4gPiA+IAo+ID4gPiBJIGRvbid0IHVuZGVyc3RhbmQu Cj4gPiA+IEhvdyByZXZlcnRpbmcgdG8gbm90IHNldCBlaXRoZXIgcHVsbGRvd24gZW5hYmxlZCBv ciBkaXNhYmxlZCBieQo+ID4gPiBkZWZhdWx0Cj4gPiA+IGZvcmNlIGFsbCBib2FyZCB0byBzZXQg ZWl0aGVyIGVuYWJsZWQgb3IgZGlzYWJsZWQuCj4gPiA+IEkgd2FzIHRlbGxpbmcgYWJvdXQgbWFr aW5nIHRoZSBwdWxsZG93biBzZXQgYnkga2VybmVsIG9wdGlvbmFsIGJlCj4gPiA+IGl0Cj4gPiA+ IGVuYWJsZWQgb3IgZGlzYWJsZWQgdG8gcmV2ZXJ0IHRvIHRoZSBwcmV2aW91cyBiZWhhdmlvci4g Cj4gPiA+IAo+ID4gPiBJIG1lYW4gYmVmb3JlIHRoZSBwYXRjaCB0byBzZXQgYSBkZWZhdWx0IHB1 bGxkb3duIHZhbHVlICh0bwo+ID4gPiBkaXNhYmxlZCkKPiA+ID4gdGhlcmUgd2VyZSBubyBmb3Jj ZWQgdmFsdWUuCj4gPiAKPiA+IEFoLCBtYXliZSBJIG1pc3VuZGVyc3Rvb2Qgd2hhdCB0aGUgY29k ZSBvcmlnaW5hbGx5IGRpZC4gRGlkIHRoZQo+ID4gb3JpZ2luYWwKPiA+IGNvZGUgbGVhdmUgdGhl IGJpdCBob3dldmVyIHRoZSBib290bG9hZGVyIG9yIHJlc2V0IHZhbHVlIGhhZCBsZWZ0Cj4gPiBp dD8KPiA+IEluIHRoYXQgY2FzZSwgcHJvYmUgd291bGRuJ3QgYmUgcmVqZWN0ZWQgYW5kIHlvdSdk IG5vdCBoYXZlIHRoZQo+ID4gc29ydCBvZgo+ID4gaXNzdWUgdGhhdCBJIG1lbnRpb25lZCBhYm92 ZS4KPiA+IAo+ID4gPiA+ID4gVGhvdWdoIEkgZG9uJ3Qga25vdyBpZiB0aGVyZSBhcmUgcHJvcyB0 byBzZXR0aW5nIGEgZGVmYXVsdC4KPiA+ID4gPiAKPiA+ID4gPiBXaGF0IHlvdSBwcm9iYWJseSBo YXZlIHRvIHdlaWdoIHVwIGlzIHRoZSBjb25zIG9mIGVhY2ggc2lkZS4gSWYKPiA+ID4gPiB3aGF0 Cj4gPiA+ID4geW91Cj4gPiA+ID4gbG9zZSBpcyBIUzQwMCBtb2RlIHdpdGggd2hhdCdzIGluIHRo ZSBrZXJuZWwgcmlnaHQgbm93IGJ1dAo+ID4gPiA+IHN3aXRjaGluZwo+ID4gPiA+IHRvCj4gPiA+ ID4gd2hhdCdzIGJlZW4gcHJvcG9zZWQgd291bGQgZW50aXJlbHkgYnJlYWsgc29tZSBib2FyZHMs IEkga25vdwo+ID4gPiA+IHdoaWNoCj4gPiA+ID4gSSB0aGluayB0aGUgbGVzc2VyIG9mIHR3byBl dmlscyBpcy4KPiA+ID4gCj4gPiA+IE1vcmUgYm9hcmRzIChldmVuIGlmIG5vdCB0aGUgbW9zdCB3 aWRlIHNwcmVhZCBpdCBzZWVtcykgYXJlCj4gPiA+IGJyb2tlbiBieQo+ID4gPiB0aGUgY3VycmVu dCBiZWhhdmlvci4KPiA+ID4gCj4gPiA+IEkgYWdyZWUgdGhhdCBvbmx5IEhTNDAwIGlzIGJyb2tl biBieSBrZWVwaW5nIHRoZSBzdGF0dXMgcXVvLiBCdXQKPiA+ID4gYXMgZmFyCj4gPiA+IGFzIEkg dW5kZXJzdGFuZCBvbmx5IEhTNDAwIHdpbGwgYmUgYnJva2VuIGVpdGhlciB3YXkuCj4gPiA+IEJl IHRoYXQgYnkga2VlcGluZyB0aGUgY3VycmVudCBkaXNhYmxlIHB1bGxkb3duIHdoaWNoIGJyZWFr IHRoZQo+ID4gPiBib2FyZHMKPiA+ID4gYmFzZWQgb24gdGhlIHJvY2tjaGlwIGRlZmF1bHQgZGVz aWduIG9yIHRoZSBib2FyZHMgdGhhdCBhcmUgbm9uLQo+ID4gPiBzdGFuZGFyZCBvciBoYXZlIGEg YnJva2VuIGRlc2lnbi4KPiA+ID4gQm90aCBjYXNlIHRoaXMgbGVhZCB0byBkYXRhIGNvcnJ1cHRp b24gb24gYm9vdCB0byBlTU1DLgo+ID4gPiAKPiA+ID4gVGhlIG9ubHkgcHJvIG9mIGtlZXBpbmcg dGhlIGN1cnJlbnQgdmFsdWUgdGhlIGRlZmF1bHQgaXMgdGhhdAo+ID4gPiBtb3N0Cj4gPiA+IGJv YXJkIGJyb2tlbiBieSB0aGUgbmV3IGRlZmF1bHQgaW50cm9kdWNlZCBpbiAyMDIwICJtaWdodCIK PiA+ID4gYWxyZWFkeSBiZQo+ID4gPiBmaXhlZCAoYnV0IHRoYXQgaXMganVzdCBhIGd1ZXNzKS4K PiAKPiB3aGljaCBJIGd1ZXNzIGFyZSB0aGUgbGVhc3Qgc3RhbGUgYm9hcmRzIHRvby4KPiAKPiA+ ID4gPiBJdCdzIHByb2JhYmx5IHVwIHRvIHRoZSBwbGF0Zm9ybSBtYWludGFpbmVyIHRvIHdlaWdo IGluIGF0IHRoaXMKPiA+ID4gPiBwb2ludC4KPiA+ID4gCj4gPiA+IEkgYW0gbm90IGtub3dsZWRn ZWQgaW50byB0aGUgZGVsZWdhdGlvbiBzY29wZS4gWW91IG1lYW4gdGhhdCBmcm9tCj4gPiA+IG5v dwo+ID4gPiBvbiBpdCBpcyB1cCB0byB0aGUgcm9ja2NoaXAgbWFpbnRhaW5lcj8KPiA+ID4gSSBh bSBmaW5lIHdpdGggaXQgZWl0aGVyIHdheS4KPiA+IAo+ID4gWWVzLCBJIG1lYW50IHRoZSByb2Nr Y2hpcCBtYWludGFpbmVyLiBJJ20gb25seSBhIGxvd2x5IGJpbmRpbmdzCj4gPiBtYWludGFpbmVy LCB3aXRob3V0IGFueSBrbm93bGVkZ2Ugb2Ygcm9ja2NoaXAgc3BlY2ZpY3Mgb3IgdGhlIHR5cGUK PiA+IG9mCj4gPiBib2FyZHMgd2UncmUgdGFsa2luZyBhYm91dCBiZWluZyBicm9rZW4gaGVyZS4g U29tZW9uZSBoYXMgdG8gbWFrZSBhCj4gPiBqdWRnZW1lbnQgY2FsbCBhYm91dCB3aGljaCAibm8g cHJvcGVydHkiIGJlaGF2aW91ciBpcyB1c2VkIGdvaW5nCj4gPiBmb3J3YXJkCj4gPiBhbmQgSSBk b24ndCB3YW50IHRoYXQgdG8gYmUgbWUhCj4gCj4gSSdtIHNvbWVob3cgYWxsIGZvciBub3QgY2hh bmdpbmcgZGVmYXVsdHMgYWdhaW4uCj4gCj4gSSB0aGluayBpbiB0aGUgcGFzdCB0aGVyZSB3YXMg YSBzaW1pbGFyIGV4YW1wbGUgaW4gc29tZSBvdGhlciBrZXJuZWwKPiBwYXJ0LAo+IHdoZXJlIHNv bWUgY2hhbmdlIGJyb2tlIHRoZSBBQkksIGJ1dCBtZWFud2hpbGUgYW5vdGhlciBBQkkgZGVwZW5k ZWQKPiBvbiB0aGUgY2hhbmdlZCBiZWhhdmlvdXIsIHNvIGEgcmV2ZXJ0IHdhcyBub3QgcG9zc2li bGUuCj4gCj4gSSB0aGluayBpdCdzIHNvbWV3aGF0IHNpbWlsYXIgaGVyZS4gSWYgdGhlIGNoYW5n ZSBoYXMgYmVlbiBpbiB0aGUKPiBrZXJuZWwKPiBmb3IgMy00IHllYXJzIG5vdywgSSBkbyB0aGlu ayB0aGF0IHNoaXAgaGFzIHNhaWxlZCBzb21laG93Lgo+IAo+IEFzIHdhcyBzYWlkIGFib3ZlLCBi b2FyZCBpbnRyb2R1Y2VkIHNpbmNlIDIwMjAgbWlnaHQgYWxyZWFkeSBiZSBmaXhlZAo+IGFuZCBl c3NlbnRpYWxseSBmb3IgYm9hcmRzIHRoYXQgd2VyZW4ndCwgaXQgZG9lcyBsb29rIGxpa2UgdGhl c2UKPiBkaWRuJ3QgcnVuCj4gYSBtYWlubGluZSBrZXJuZWwgZm9yIGxpa2UgNCB5ZWFycyBub3cu CgoKSSBhZ3JlZSB0aGF0IGFsbCBib2FyZCBoYXZlIGJlZW4gZml4ZWQuIEJ1dCBub3QgYnkgYWRw YXRpbmcgdG8gdGhlIG5ldwpkZWZhdWx0IHNpbmNlIDIwMjAgYW5kIHJlbHlpbmcgb24gaXQgbm93 YWRheXMuCk1vc3QgaWYgbm90IGFsbCBoYXZlIGRpc2FibGVkIGhzNDAwZXMgc3VwcG9ydCAoYW5k IHRoZSBwYXRjaCB0byBkaXNhYmxlCmhzNDAwIGFyZSBvbmx5IHJlYWNoaW5nIHVwc3RyZWFtIHJl Y2VudGx5LCBpZSBvbmx5IGEgeWVhciBhZ28gZm9yIHRoZQpsYXRlc3Qgb25lcykuCgpUaGUgaHM0 MDBlcyBzdXBwb3J0IHdhcyBkaXNhYmxlZCBhcyBzb29uIGFzIHRoZSBuZXcgZGVmYXVsdCB3YXMK aW50cm9kdWNlZC4gQW5kIGluIGZhY3QgZWFybGllciBkdWUgdG8gYSBkb3VibGUgaW5pdCBpbiBy ZWd1bGF0b3IgY29yZSwKd2hlbiBwcm9iZSBkZWZlcnJlZCB3YXMgaW50cm9kdWNlZCwgdGhhdCBh bHNvIGJyb2tlIGVtbWMgb24gcmszMzk5IGEKZmV3IG1vbnRoIGJlZm9yZSB0aGlzIG5ldyBkZWZh dWx0IHdhcyBwdXNoZWQgdG8gc3RhYmxlIGJyYW5jaCBpbiAyMDIwLgpJZSBpdCBjb3VsZCBiZSB0 aGF0IHVudGlsIHdoZW4gdGhpcyBkb3VibGUgaW5pdCB3YXMgZml4ZWQgaW4gYXVndXN0CjIwMjIg YnkgCmh0dHBzOi8vZ2l0aHViLmNvbS90b3J2YWxkcy9saW51eC9jb21taXQvOGE4NjZkNTI3YWMw NDQxYzBlYjE0YTk5MWZhMTEzNThiNDc2YjExZCwKbm8gcmszMzk5IGJvYXJkIHdhcyBhYmxlIHRv IHRlc3QgaHM0MDBlcyBzdXBwb3J0IHdpdGggdGhlIG5ldyAyMDIwCmRlZmF1bHQuCgpUaGUgbWFp biB0aGluZyB0aGF0IG1hZGUgaXQgaW1wb3NzaWJsZSB0byBmaW5kIHRoaXMgbmV3IGRlZmF1bHQg d2FzIGJhZAppcyB0aGF0IGVtbWMgaHM0MDAgc3VwcG9ydCB3YXMgYWxyZWFkeSBicm9rZW4gd2hl biB0aGUgY29tbWl0IHJlYWNoZWQKdGhlIHN0YWJsZSBrZXJuZWwuCgpBbHNvIGEgbG90IG9mIHVz ZXJzIGFuZCBkZXZzIHVzZSBTRCBpbnN0ZWFkIG9mIEVNTUMuCgpNYXliZSBiZWZvcmUgZGlzY3Vz c2luZyBpZiB0aGUgbmV3IGRlZmF1bHQgc2hvdWxkIGJlIGtlcHQgZm9yCnN0YWJpbGl0eSwgd2Ug c2hvdWxkIGNoZWNrIGlmIGFueSB1cHN0cmVhbSByazMzOTkgYm9hcmQgdGhhdCBzdGlsbCBoYXMK aHM0MDBlcyBzdXBwb3J0IHdpdGhvdXQgdGhlICJyb2NrY2hpcCxlbmFibGUtc3Ryb2JlLXB1bGxk b3duIiAoaWUgb3V0Cm9mOgphcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzM5OS1uYW5v cGMtdDQuZHRzIHZpYSBhcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzM5OS1uYW5vcGk0 LmR0c2kKYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzOTktbmFub3BpLW00LmR0cyB2 aWEgYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzOTktbmFub3BpNC5kdHNpCmFyY2gv YXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzk5LW5hbm9waS1uZW80LmR0cyB2aWEgYXJjaC9h cm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzOTktbmFub3BpNC5kdHNpCmFyY2gvYXJtNjQvYm9v dC9kdHMvcm9ja2NoaXAvcmszMzk5LW5hbm9waS1yNHMuZHRzIHZpYSBhcmNoL2FybTY0L2Jvb3Qv ZHRzL3JvY2tjaGlwL3JrMzM5OS1uYW5vcGk0LmR0c2kKKSBoYXMgd29ya2luZyBlbW1jIGhzNDAw LgpDb3VsZCBiZSB0aGVyZSBhcmUgbm9uZSB0aGF0IGhhdmUgYSB3b3JraW5nIGhzNDAwIGVtbWMu CgpDb3VsZCB3ZSBhc2sgZm9yIHRoZXNlIGJvYXJkcyB0byBiZSBjaGVja2VkIGZvciB3b3JraW5n IGVtbWMgd2l0aCB0aGUKbmV3IDIwMjAgZGVmYXVsdD8gKGFzIHdlIGNhbm5vdCBhc3N1bWUgdGhh dCBhcyBldmVuIHdlbGwgbWFpbnRhaW5lZApib2FyZCBvbmx5IGZvdW5kIHVwc3RyZWFtIHRoZXkg d2VyZSBicm9rZW4gaW4gbWlkIDIwMjMsIGllIGNvbW1pdAoyYmQxZDJkZDgwOGM2MDUzMjI4M2U5 Y2YwNTExMGJmMWJmMmY5MDc5IGFuZApjZWU1NzI3NTZhYTJjYjQ2ZTk1OWU5Nzk3YWQ0YjczMGI3 OGEwNTBiIGZvciBST0NLIDRDKyBhbmQgUk9DSyBQaSA0KT/CoApUaGVuIHdlIHdpbGwgYmUgY29u ZmlkZW50IHRoZSBuZXcgMjAyMCBkZWZhdWx0IHJlZ3Jlc3Npb24gaXMgcmVxdWlyZWQKYnkgYW55 dGhpbmcuCgpJZSwgd2UgYXNzdW1lIHRoZXkgd2VyZSB3b3JraW5nIGFzIG5vYm9keSBjb21wbGFp bnMgYXMgbW9zdCBjb21wbGFpbnMKbmV2ZXIgcmVhY2ggdXBzdHJlYW0gTUwuLi7CoGJ1dCB0aGUg YXJtYmlhbiBmb3J1bSB3ZXJlIGZsb29lZCB3aXRoCmNvbXBsYWludHMgaW4gdGhlc2UgZGF5cy4g SSB3YXMgb25lIG9mIHRoZSBjb21wbGFpbmVyIHVudGlsIEkgZGVjaWRlZAp0byBhYmFuZG9uIG90 aGVyIHByb2plY3RzIGJlY2F1c2UgdGhpcyBpc3N1ZSB3YXMgdG9vIGJpZyB0byBtZSAod2VsIEkK ZW5kZWQgdXAgYW5kIGFtIHN0aWxsIG9uIFNEIHNpbmNlIGl0IHRvb2sgdG9vIGxvbmcgYW5kIEkg bmVlZGVkIHRoZQpib2FyZCwgYXMgZGlkIGFsbCBvdGhlciB1c2Vycy4gQnV0IEkgd2FudCB0aGlz IHRvIGNoYW5nZSkuCk9ubHkgZG93bnN0cmVhbSBkaXNhYmxlZCBoczQwMGVzIHRvIGdldCB0aGUg Ym9hcmQgd29ya2luZy4gQWxsIHJrMzM5OQpib2FyZHMgaW4gQXJtYmlhbiBhcmUgcGF0Y2hlZCB0 byByZW1vdmUgaHM0MDAgc3VwcG9ydCBzaW5jZSBhdCBsZWFzdAp0d28geWVhcnMgYXMgZmFyIGFz IEkga25vdy4KClRoZXNlIGN1cnJlbnQgYm9hcmRzIHdpdGggaHM0MDBlcyBlbmFibGVkIHVwc3Ry ZWFtIGFyZToKYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzOTktZXZiLmR0cwphcmNo L2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzM5OS1maXJlZmx5LmR0cwphcmNoL2FybTY0L2Jv b3QvZHRzL3JvY2tjaGlwL3JrMzM5OS1ncnUtYm9iLmR0cyB2aWEgYXJjaC9hcm02NC9ib290L2R0 cy9yb2NrY2hpcC9yazMzOTktZ3J1LmR0c2kKYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9y azMzOTktZ3J1LWtldmluLmR0cyB2aWEgYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMz OTktZ3J1LmR0c2kKYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzOTktZ3J1LXNjYXJs ZXQtZHVtby5kdHMgdmlhIGFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzk5LWdydS5k dHNpCmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzk5LWdydS1zY2FybGV0LWlueC5k dHMgdmlhIGFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzk5LWdydS5kdHNpCmFyY2gv YXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzk5LWdydS1zY2FybGV0LWtkLmR0cyB2aWEgYXJj aC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzOTktZ3J1LmR0c2kKYXJjaC9hcm02NC9ib290 L2R0cy9yb2NrY2hpcC9yazMzOTktaHVnc3VuLXg5OS5kdHMKYXJjaC9hcm02NC9ib290L2R0cy9y b2NrY2hpcC9yazMzOTkta2hhZGFzLWVkZ2UtY2FwdGFpbi5kdHMgdmlhIGFyY2gvYXJtNjQvYm9v dC9kdHMvcm9ja2NoaXAvcmszMzk5LWtoYWRhcy1lZGdlLmR0c2kKYXJjaC9hcm02NC9ib290L2R0 cy9yb2NrY2hpcC9yazMzOTkta2hhZGFzLWVkZ2Utdi5kdHMgdmlhIGFyY2gvYXJtNjQvYm9vdC9k dHMvcm9ja2NoaXAvcmszMzk5LWtoYWRhcy1lZGdlLmR0c2kKYXJjaC9hcm02NC9ib290L2R0cy9y b2NrY2hpcC9yazMzOTkta2hhZGFzLWVkZ2UuZHRzIHZpYSBhcmNoL2FybTY0L2Jvb3QvZHRzL3Jv Y2tjaGlwL3JrMzM5OS1raGFkYXMtZWRnZS5kdHNpCmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2No aXAvcmszMzk5LWxlZXotcDcxMC5kdHMKYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMz OTktbmFub3BjLXQ0LmR0cwphcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzM5OS1vcmFu Z2VwaS5kdHMKYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzOTktcHVtYS1oYWlrb3Uu ZHRzIHZpYSBhcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzM5OS1wdW1hLmR0c2kKYXJj aC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzOTktZmljdXMuZHRzIHZpYSBhcmNoL2FybTY0 L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzM5OS1yb2NrOTYwLmR0c2kKYXJjaC9hcm02NC9ib290L2R0 cy9yb2NrY2hpcC9yazMzOTktcm9jazk2MC5kdHMgdmlhIGFyY2gvYXJtNjQvYm9vdC9kdHMvcm9j a2NoaXAvcmszMzk5LXJvY2s5NjAuZHRzaQphcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3Jr MzM5OS1zYXBwaGlyZS1leGNhdmF0b3IuZHRzIHZpYSBhcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tj aGlwL3JrMzM5OS1zYXBwaGlyZS5kdHNpCmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmsz Mzk5LXNhcHBoaXJlLmR0cyB2aWEgYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzOTkt c2FwcGhpcmUuZHRzaQphcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzM5OXByby1yb2Nr LXBpLW4xMC5kdHMgdmlhIGFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzk5cHJvLXZt YXJjLXNvbS5kdHNpCgpUaGVzZSBib2FyZCB3ZXJlIGJyb2tlbiBieSB0aGUgbmV3IGRlZmF1bHQg dGhvdWdoIHRoZXkgb25seSBkaXNhYmxlZCBocyBlbmhhbmNlZCBzdHJvYmUgYnV0IGxlZnQgYmFz aWMgaHM0MDAgc3VwcG9ydDoKYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzOTkta2hh ZGFzLWVkZ2UtY2FwdGFpbi5kdHMgdmlhIGFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmsz Mzk5LWtoYWRhcy1lZGdlLmR0c2kKYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzOTkt a2hhZGFzLWVkZ2Utdi5kdHMgdmlhIGFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzk5 LWtoYWRhcy1lZGdlLmR0c2kKYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzOTkta2hh ZGFzLWVkZ2UuZHRzIHZpYSBhcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzM5OS1raGFk YXMtZWRnZS5kdHNpCmllIGNvbW1pdCA2ZGQwMDUzNjgzODA0NDI3NTI5ZWYzNTIzZjc4NzJmNDcz NDQwYTE5IGluIG5vdmVtYmVyIG9mIDIwMjEuCgoKTm90ZTogSSBoYXZlIG5vdCBjaGVja2VkIHRo YXQgbXkgYm9hcmQgaXMgd29ya2luZyB3aXRoIG1tYy1oczQwMC0xXzh2CmVuYWJsZWQgYW5kIG1t Yy1oczQwMC1lbmhhbmNlZC1zdHJvYmUgZGlzYWJsZWQuIENvdWxkIGJlIHRoYXQgdGhlIG5ldwpk ZWZhdWx0IG9ubHkgYnJlYWsgdGhlIGVuaGFuY2VkIHN0cm9iZSBzdXBwb3J0LCBub3QgaHM0MDAg cGVyIHNlLiBCYWNrCnRoZW4gQXJtYmlhbiBjb250cmlidXRvcnMgZGlzYWJsZWQgaHM0MDAgc3Vw cG9ydC4KCgpGaW5hbGx5LCBpdCBjb3VsZCBiZSB0aGF0IG9uZSBSSzMzOTkgYm9hcmQgY3VycmVu dGx5IHVwc3RyZWFtIGRlcGVuZHMKb24gdGhpcyBuZXcgZGVmYXVsdCBidXQgSSBndWVzcyBub25l LgoKCiEhISEhClRoZSBtYWluIGlzc3VlIGFuZCB3aGF0IGJvdGhlciBtZSBpcyB3aGV0aGVyIGFu eSBib2FyZHMgZGVwZW5kIG9uIHRoZQpwcmV2aW91cyBkZWZhdWx0LiBUaGlzIGlzIHRoZSByZWFs IGlzc3VlLgpUaGF0IGlzIHByZXZpb3VzbHkgdGhlIGtlcm5lbCB2YWx1ZSB3YXMgbGVmdCB0byB0 aGUgb25lIHNldCBieSB0aGUKYm9vdGxvYWRlciBvciB0aGUgaGFyZHdhcmUgcmVzZXQuClRoZSBS b2NrY2hpcCBrZXJuZWwgZGVmYXVsdCB0byBlbmFibGUgc3Ryb2JlIHdhcyB0b2xkIGJ5IERyYWdh biBTaW1pYyAKdG8gYnJlYWsgUm9ja1BybzY0IGFuZCB0aGUgUGluZWJvb2sgUHJvIGR1ZSB0byB0 aGVtIGJlaGluZyBtaXN3aXJlZC7CoApCdXQgaXQgd2FzIG5vdCB0aGUgdXBzdHJlYW0gYmVoYXZp b3IgYmVmb3JlIHRoZSAyMDIwIG5ldyBkaXNhYmxlIGJ5CmRlZmF1bHQgYmVoYXZpb3Igd2FzIGlu dHJvZHVjZWQuIFRoZSBwcmV2aW91cyBiZWhhdmlvciB0byBsZWF2ZSB0ZWgKcHVsbGRvd24gYXMg aXMuCiEhISEKClRoZSBkZXYgZm9yIGNvbW1pdCA4YjVjMmI0NWI4ZjBhMTFjOTA3MmRhMGY3YmFm OWVlOTg2ZDMxNTFlIHRoYXQKaW50cm9kdWNlZCB0aGUgbmV3IGRpc2FibGUtc3Ryb2JlIGJ5IGRl ZmF1bHQgdGVsbHMgaGUgdGVzdGVkIG9uIGhpcwoicmszMzk5IGN1c3RvbWl6ZWQgYm9hcmQiLgoK CgoKSSB3YW50ZWQgdG8gc29ydCBvdXQgaWYgaXQgbWFkZSBzZW5zZSB0byBhZGQgInJvY2tjaGlw LGVuYWJsZS1zdHJvYmUtCnB1bGxkb3duIiB0byBtb3N0IHJrMzM5IGJvYXJkcy4gQnV0IEkgc2hv dWxkIGhhdmUgZmlyc3QgYWRkZWQgdGhpcwpwcm9wZXJ0eSB0aGVuIGRpc2N1c3NlZCBpZiB3ZSBz aG91bGQgcmV2ZXJ0IHRoZSBuZXcgMjAyMCBkZWZhdWx0LgpXZSBjb3VsZCBqdXN0IHJlbW92ZSBh bGwgdGhlICJyb2NrY2hpcCxlbmFibGUtc3Ryb2JlLXB1bGxkb3duIiBsYXRlciBvbgppZiB3ZSBy ZXZlcnQgZWl0aGVyIHRvIHRoZSBwcmV2aW91cyBiZWhhdmlvciBvZiBub3Qgc2V0dGluZyBhIGRl ZmF1bHQKb3IgZXZlbiB0byB0aGUgUm9ja2NoaXAgdHJlZSBkZWZhdWx0IHRvIHNldCBpdCBlbmFi bGUtc3Ryb2JlIGJ5CmRlZmF1bHQuCkkgc2hvdWxkIG5vdCBoYXZlIGtlcHQgdGhlIGJvYXJkIGJy b2tlbiBpbiB0aGUgbWVhbiB0aW1lLiBJdCBpcyBub3QgYXMKaWYgSSB3YXMgaW50cm9kdWNpbmcg YSBuZXcgQVBJIHRoYXQgY291bGQgYmUgd3JvbmcuIFRoZSBBUEkgaXMgYWxyZWFkeQp0aGVyZSBl dmVuIGlmIHdyb25nLgoKSSB3aWxsIHRyeSB0byBjYXJyeSBmb3J3YXJkIHRoZSBkaXNjdXNzaW9u LiBCdXQgdW5icmVha2luZyB0aGUgYm9hcmQgaXMKaGlnaGVyIHByaW9yaXR5LgoKQ291bGQgeW91 IHRlc3QgdGhlIGVuYWJsZS1zdHJvYmUgcHJvcGVydHkgb24gYWxsIHRoZSBkdHMgdGhhdCAgZGlz YWJsZWQKaHM0MDBlcyBkdWUgdG8gdGhpcyBuZXcgZGVmYXVsdCAoSSBsYWNrIHRoZSBoYXJkd2Fy ZSB0byB0ZXN0IHRoZQpwYXRjaGVzKS4KQXQgbGVhc3QgYXJjaC9hcm02NC9ib290L2R0cy9yb2Nr Y2hpcC9yazMzOTkta2hhZGFzLWVkZ2UuZHRzaQphcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlw L3JrMzM5OS1yb2NrLTRjLXBsdXMuZHRzCmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmsz Mzk5LXJvY2stcGktNC5kdHNpCmFuZCBwaW5nIHRoZSBib2FyZCB0ZXN0ZXIgZm9yIG90aGVyIGJv YXJkcyB0byB0ZXN0IGlmIHRoZXkgcmVxdWlyZQoicm9ja2NoaXAsZW5hYmxlLXN0cm9iZS1wdWxs ZG93biIgZm9yIEVNTUMgSFM0MDAgd3JpdGUgc3VwcG9ydCAocmVhZCBpcwpmaW5lIGV2ZW4gd2l0 aCB0aGUgbmV3IGRlZmF1bHQpLgoKCkFib3V0OgpPbiBUdWUsIDIwMjQtMDItMjcgYXQgMTA6MTEg KzAwMDAsIEZvbGtlciBTY2h3ZXNpbmdlciB3cm90ZToKPiB3aXRoIHRoZSBmb2xsb3dpbmcgYXBw bGllZCwgdGhlIEVNTUMgcmVsYXRlZCBlcnJvcnMgYXJlIGdvbmUuIGRtZXNnCj4gb25seQo+IHNo b3dzICJQdXJnaW5nIC4uLiBieXRlcyIgZHVyaW5nIG15IHRlc3RzOgo+IAo+IGRpZmYgLS1naXQg YS9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzM5OS1yb2NrLXBpLTQuZHRzaQo+IGIv YXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzOTktcm9jay1waS00LmR0c2kKPiBpbmRl eCBmMjI3OWFhNmNhOWUuLmFlMGZiODdlMWE4YiAxMDA2NDQKPiAtLS0gYS9hcmNoL2FybTY0L2Jv b3QvZHRzL3JvY2tjaGlwL3JrMzM5OS1yb2NrLXBpLTQuZHRzaQo+ICsrKyBiL2FyY2gvYXJtNjQv Ym9vdC9kdHMvcm9ja2NoaXAvcmszMzk5LXJvY2stcGktNC5kdHNpCj4gQEAgLTY0Nyw4ICs2NDcs MTAgQEAgJnNhcmFkYyB7Cj4gICZzZGhjaSB7Cj4gICAgICAgICBtYXgtZnJlcXVlbmN5ID0gPDE1 MDAwMDAwMD47Cj4gICAgICAgICBidXMtd2lkdGggPSA8OD47Cj4gLSAgICAgICBtbWMtaHMyMDAt MV84djsKPiArICAgICAgIG1tYy1oczQwMC0xXzh2Owo+ICsgICAgICAgbW1jLWhzNDAwLWVuaGFu Y2VkLXN0cm9iZTsKPiAgICAgICAgIG5vbi1yZW1vdmFibGU7Cj4gKyAgICAgICByb2NrY2hpcCxl bmFibGUtc3Ryb2JlLXB1bGxkb3duOwo+ICAgICAgICAgc3RhdHVzID0gIm9rYXkiOwo+ICB9Owo+ IAo+IEZvciB0ZXN0aW5nIEkgcmFuIGRkIHRocmVlIHRpbWVzIGluIGEgcm93Ogo+IAo+IGRkIGlm PS9kZXYvemVybyBvZj0uL3plcm8uYmluIGJzPTFNIGNvdW50PTUwMDAKPiAKPiBJIHRlc3RlZCB0 aGlzIG9uIGJvdGggYSBSb2NrIDRTRSBib2FyZCBhbmQgYSBSb2NrIFBpIDRCKyBib2FyZCB3aXRo Cj4gdGhlCj4gc2FtZSByZXN1bHRzLgoKRm9sa2VyLCBhcmUgeW91IGNvbmZpZGVudCAiUm9jayA0 U0UgYm9hcmQgYW5kIFJvY2sgUGkgNEIrIiB3ZXJlIGZpeGVkCndpdGggYWJvdmUgcGF0Y2g/Ckll IHRoZSAicm9ja2NoaXAsZW5hYmxlLXN0cm9iZS1wdWxsZG93bjsiIHNob3VsZCBiZSB1bmRlciBh bgoicm9ja2NoaXAscmszMzk5LWVtbWMtcGh5IiBjb21wYWlibGUgbm9kZSwgdGhhdCBpcyAmZW1t Y19waHkgaW4KYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzOTktcm9jay1waS00LmR0 c2ksIG5vdCBzZGhjaS4KCgoKClNpbmNlIHRoZSBuZXcgZGVmYXVsdCBiYWh2aW9yIHdhcyBpbnRy b2R1Y2VkIHRoZSBvbmx5IG5ldyBib2FyZCBkdHMKd2l0aCBoczQwMGVzIHN1cHBvcnQgaW50cm9k dWNlZCB3ZXJlOgotIGFybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzM5OS1yb2NrLTRjLXBsdXMu ZHRzIGluCjI0NjQ1MDM0NGRhZDA4N2ExMjFiZWZiZWQxYWJhNzc2ZGJhM2QzNzcgKGJ1dCBhcyBz aG93biBhYm92ZSB0aGUKc3VwcG9ydCB3YXMgZGlzYWJsZWQgaW4gMjAyMyBkdWUgdG8gaHM0MDBl cyBub3Qgd29ya2luZyB3aXRoIHRoZSBuZXcKZGVmYXVsdC4gSSBiZWxpZXZlIHRoZSBkdHMgd2Fz IGRlc2lnbmVkIGFnYWluc3QgYSBrZXJuZWwgYmVmb3JlIHRoZSBuZXcKZGVmYXVsdCBkaXNhYmxl LXN0cm9iZSkuCi0gYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzOTktcm9jay1waS00 LmR0c2kgaW4KYjVlZGIwNDY3MzcwMDEyNWJmZDFkMTNlNmMxNDc0N2IxZWNiYTUyMgp3aGljaCB0 aGVzZSBib2FyZCBkdHMgaW5jbHVkZXM6CmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmsz Mzk5LXJvY2stNHNlLmR0cwphcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzM5OS1yb2Nr LXBpLTRhLXBsdXMuZHRzCmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzk5LXJvY2st cGktNGEuZHRzCmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzk5LXJvY2stcGktNGIt cGx1cy5kdHMKYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzOTktcm9jay1waS00Yi5k dHMKYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzOTktcm9jay1waS00Yy5kdHMKYnV0 IHRoZSBoczQwMGVzIHN1cHBvcnQgd2FzIGRpc2FibGVkCmluY2VlNTcyNzU2YWEyY2I0NmU5NTll OTc5N2FkNGI3MzBiNzhhMDUwYiBkdWUgdG8gbm90IHdvcmtpbmcgd2l0aCB0aGUKbmV3IGRpc2Fi bGUtc3Ryb2JlCgpBcyBmYXIgYXMgSSBrbm93IG5vIGJvYXJkIHdpdGggd29ya2luZyBoczQwMCB3 YXMgaW50cm9kdWNlZCBhZnRlciB0aGUKbmV3IGJlaGF2aW9yLiBXZSBjYW4gYXNzdW1lIHRoYXQg bm90IHNldHRpbmcgYSBkZWZhdWx0IGFzIGJlZm9yZSB0aGlzCm5ldyBiZWhhdmlvciB3aWxsIG5v dCBicmVhayBhbnkgYm9hcmQgYW55IG1vcmUgdGhhbiBpdCB3YXMgYmVmb3JlIHRoaXMKY29tbWl0 IHdhcyBpbnRyb2R1Y2VkIChhbmQgdGhpcyBjb21taXQgaW50cm9kdWNpbmcgdGhlIG5ldyBiZWhh dmlvcgpkb2VzIG5vdCBhY2tub3dsZWRnZSBmaXhpbmcgYW55IGJvYXJkcykuCgoKRWl0aGVyIHdh eSwgSSBiZWxpZXZlIHdlIHNob3VsZCBhZGQgInJvY2tjaGlwLGVuYWJsZS1zdHJvYmUtcHVsbGRv d24iCnRvIGFueSBib2FyZCBkdHMgd2l0aCBoczQwMCBicm9rZW4gYXNhcC4KCgo+IFNvIGlmIGl0 IGNvbWVzIGRvd24gdG8gZGVjaWRpbmcgd2hvIHRvIGtlZXAgd29ya2luZywgSSdtIG1vcmUgaW4K PiBmYXZvciBvZgo+IHRob3NlIHRoYXQgZGlkIHJ1biBvbiBtYWlubGluZSBpbiB0aGUgeWVhcnMg c2luY2UuCj4gCj4gCj4gVGhvdWdoIG5vdCBzdXJlIGlmIEkgdW5kZXJzdG9vZCBhbGwgdGhlIGRl dGFpbHMgaGVyZSB5ZXQuCj4gCj4gCj4gSGVpa28KPiAKPiA+IAo+ID4gPiBJIGp1c3Qgd2FudGVk IHRvIHBvaW50IG91dCB0aGF0IG1heWJlIHdlIGRvbid0IGhhdmUgdG8gc2V0IGEKPiA+ID4gcHVs bGRvd24KPiA+ID4gdmFsdWUgYWZ0ZXIgYWxsLiBBbmQgdGhhdCB0aGVuIGFsbCBib2FyZHMgd2ls bCBiZSBmaW5lIGFzIGJlZm9yZQo+ID4gPiBzZXR0aW5nIHRoZSBwdWxsZG93biBleHBsaWNpdGx5 IHdhcyBpbnRyb2R1Y2VkLgo+ID4gCj4gPiBCeSAiYWxsIGJvYXJkcyB3aWxsIGJlIGZpbmUiIHlv dSBtZWFuICJhbGwgYm9hcmRzIHRoYXQgZXhwZWN0ZWQgdGhlCj4gPiBrZXJuZWwgZGlkbid0IHRv dWNoIHRoaXMgYml0IHdpbGwgYmUgZmluZSIuIFRoZSBib2FyZHMgdGhhdCBuZWVkCj4gPiB0aGUK PiA+IGtlcm5lbCB0byBzZXQgdGhpcyBiaXQgYmVjYXVzZSBpdCB7Y29tZXMgb3V0IG9mIHJlc2V0 LGlzIHNldCBieQo+ID4gZmlybXdhcmV9Cj4gPiBpbmNvcnJlY3RseSBhcmUgZ29pbmcgdG8gbmVl ZCBhIHByb3BlcnR5IGFkZGVkIGlmIHdlIHJldmVydCB0aGUKPiA+IGRlZmF1bHQKPiA+IGJlaGF2 aW91ciB0byBub3QgdG91Y2hpbmcgdGhlIGJpdC4KPiA+IAo+ID4gPiBJbiBmYWN0IEkgYW0gbW9y ZSBlYWdlciB0byBnZXQgdGhpcyBmaXhlZCBiZSBpdCBieSBhZGRpbmcgYQo+ID4gPiBlbmFibGUt Cj4gPiA+IHB1bGxkb3duIHByb3BlcnR5IHRvIHRoZSBib2FyZCBkZWZpbml0aW9ucywgdGhhbiB0 byBjaGFuZ2UgdGhlCj4gPiA+IGN1cnJlbnQKPiA+ID4gYmVoYXZpb3IuCj4gPiA+IEp1c3Qgd2Fu dGVkIHRvIHNvcnQgb3V0IGlmIHRoYXQgd2FzIG5vdCB0aGUgd3Jvbmcgd2F5IHRvIGZpeCB0aGlz Cj4gPiA+IGlzc3VlLiAoaWUgaWYgYWRkaW5nIGEgc2V0dGluZyBvbiBtb3N0IGJvYXJkcyB3YXMg d3JvbmcpLgo+ID4gCj4gPiA+IER1cmluZyBtb3JlIHRoYW4gMiB5ZWFycywgSSB0cmllZCB2YXJp b3VzIHBhdGNoZXMgYW5kIGRpc2N1c3NlZAo+ID4gPiBvbgo+ID4gPiBmb3J1bXMgYWJvdXQgdGhl IEhTNDAwIGJyZWFrYWdlLiBJIGhhZCBiaXNlY3RlZCB0aGUgcmVndWxhdG9yCj4gPiA+IGluaXQK PiA+ID4gaXNzdWUgaW4gdGhlIDUuMTAgYnJhbmNoLiBTYWRseSBpdCB0b29rIHNvIG11Y2ggdGlt ZSBmb3IgdGhpcwo+ID4gPiBpc3N1ZSB0bwo+ID4gPiBiZSB1bmRlcnN0b29kIHRoYXQgd2hlbiB0 aGUgZm9yY2UgcHVsbGRvd24gdG8gZGlzYWJsZSBjb21taXQgd2FzCj4gPiA+IGludHJvZHVjZWQg ZG93bnN0cmVhbSBiZWZvcmUgdGhlIGZpcnN0IGlzc3VlIGdvIGZpeGVkLgo+ID4gPiBUaGlzIG9u bHkgbWFkZSB0aGUgbWF0dGVyIHdvcnNlIGJlY2F1c2Ugd2hlbiBvbmUgZml4ZWQgdGhlIGRvdWJs ZQo+ID4gPiByZWd1bGF0b3IgaW5pdCBpc3N1ZSBIUzQwMCB3YXMgc3RpbGwgYnJva2VuLCB0aGlz IHRpbWUgYmVjYXVzZQo+ID4gPiB0aGUKPiA+ID4gcHVsbGRvd24gd2FzIGZvcmNlZCB0byBkaXNh YmxlLiBCdXQgbm9ib2R5IG5vdGljZWQgdGhpcyBjb21taXQKPiA+ID4gdGhhdAo+ID4gPiBmb3Jj ZWQgYSBkZWZhdWx0IHB1bGxkb3duIHN0YXRlICh0aGF0IHdhcyBvbGRlciB0aGFuIHRoZQo+ID4g PiByZWd1bGF0b3IKPiA+ID4gY29tbWl0IGZyb20gNS4xMyBiYWNrcG9ydGVkIHRvIHRoZSA1LjEw IHN0YWJsZSBicmFuY2ggY29tbWl0LCBidXQKPiA+ID4gdGhhdAo+ID4gPiByZWFjaGVkIGRvd25z dHJlYW0gbGF0ZXIgZHVlIHRvIG5vdCBoYXZpbmcgYmVlbiBiYWNrcG9ydGVkIHRvCj4gPiA+IDUu MTAgZnJvbQo+ID4gPiA1LjExKS4KPiA+ID4gT3RoZXJ3aXNlIHdlIHdvdWxkIGhhdmUgZW1haWxl ZCBpbW1lZGl0YWx5Lgo+ID4gPiBCaXNlY3Rpbmcgd2FzIG9ubHkgYWJsZSB0byBjYXRjaCB0aGUg Zmlyc3QgYnJlYWthZ2UgKGFzIGl0IHdhcwo+ID4gPiBvbmx5Cj4gPiA+IGZpeGVkIGFmdGVyIHRo ZSBzZWNvbmQgYnJlYWthZ2Ugd2FzIGludHJvZHVjZWQpLgo+ID4gPiAKPiA+ID4gTWF5YmUgdGhl IHByb2JsZW0gaXMgdGhhdCBtZSBhbmQgb3RoZXJzIGRpZCBub3QgY29tcGxhaW5lZCB0byB0aGUK PiA+ID4ga2VybmVsIHVwc3RyZWFtIE1MIGJlY2F1c2Ugd2Ugd2VyZSB1c2luZyBoZWF2aWx5IHBh dGNoZWQKPiA+ID4gZG93bnN0cmVhbQo+ID4gPiBrZXJuZWxzIChsaWtlIG1vc3QgaWYgbm90IGFs bCBkb3duc3RyZWFtIEFSTSBrZXJuZWxzKS4gU28gc2FkbHksCj4gPiA+IHRoZQo+ID4gPiBmb3J1 bXMgZnJvbSBiYWNrIHRoZW4gYXJlIGZpbGxlZCB3aXRoIGNvbXBsYWludHMgYnV0IG5vdGhpbmcK PiA+ID4gc2VlbWVkIHRvCj4gPiA+IGhhdmUgcmVhY2hlZCB0aGUgTGludXggTUwuCj4gPiAKPiA+ IEF5ZSwgYW5kIGFsbCBJIGNhbiByZWFsbHkgc2F5IHRoZXJlIGlzIHRvIGJ1eSBib2FyZHMgZnJv bSBhIHZlbmRvcgo+ID4gdGhhdAo+ID4gZG9lc24ndCB1c2Ugc29tZSBob3JyaWJseSBoYWNrZWQg ZG93bnN0cmVhbSBrZXJuZWwsIHdoaWNoIEkga25vdyBpcwo+ID4gY2xlYXJseSBhbiB1bnNhdGlz ZmFjdG9yeSBzdWdnZXN0aW9uLiBUaGF0IHNhaWQsIHdlIHByb2JhYmx5IHNob3VsZAo+ID4gaGF2 ZQo+ID4gY2F1Z2h0IHRoYXQgdGhlIG5ldyBkZWZhdWx0IGJlaGF2aW91ciB3aGVuIHRoZSBjaGFu Z2VzIHdlcmUgbWFkZQo+ID4gd2FzIG5vdAo+ID4gdGhlIGRlZmF1bHQgYmVmb3JlLiBUaGVyZSB3 YXMgb25seSBvbmUgRFQgbWFpbnRhaW5lciB0aGVuIHRob3VnaCwKPiA+IGFuZAo+ID4gdGhpbmdz IGp1c3Qgc2xpcCBieSA6Lwo+ID4gCgoKVGhlIHNhZCB0aGluZyBpcyB0aGUgdmVuZG9yIGluZGVl ZCB3b3JrZWQgdG8gdXBzdHJlYW0gdGhlIGNvZGUgKHRob3VnaAppdCBoYXMgc2luY2UgY2xvc2Vk IGRvb3JzKS4KQnV0IGFzIHRvbGQgcHJldmlvdXNseSwgdGhlIGVtbWMgaHM0MDAgc3VwcG9ydCB3 YXMgYWxyZWFkeSBicm9rZW4gYnkKdGhlIHRpbWUgdGhlIG5ldyBkZWZhdWx0IGRpc2FibGUtc3Ry b2JlIHB1bGxkb3duIGJ5IGRlZmF1bHQgcmVhY2hlZApzdGFibGUuIFRoaXMgZHVlIHRvIGFub3Ro ZXIgdHJpY2t5IHRvIGRlYnVnIHVucmVsYXRlZCBkb3VibGUgaW5pdCBpbgpyZWd1bGF0b3IgY29y ZSBpbnRyb2R1Y2VkIGEgZmV3IG1vbnRocyBiZWZvcmUgdGhlIGNvbW1pdCB0byBkaXNhYmxlLQpz dHJvYmUgd2FzIGludHJvZHVjZWQuIE5vIG9uZSBjb3VsZCBoYXZlIGNhdWdodCB0aGF0IHRoZSBu ZXcgYmVoYXZpb3IKd2FzIGJyb2tlbiBvbiBtb3N0IHJrMzM5OSBib2FyZCBieSB0ZXN0aW5nIC4u LiBiZWNhdXNlIGl0IHdhcyBub3QKcG9zc2libGUgdG8gdGVzdCBoczQwMCBlbW1jIGJlZm9yZSB0 aGUgZG91YmxlIGluaXQgaW4gcmVndWxhdG9yIGNvcmUKd2FzIGZpeGVkIGluIGF1Z3VzdCAyMDIy LgpJIGhhZCBiaXNlY3RlZCB0aGUgYnJlYWthZ2UgdG8gdGhpcyByZWd1bGF0b3IgY29yZSBkZWZl cnJlZCBwcm9iZQooY29tbWl0ICIwNjY1M2ViYzBhZDJlMGI3ZDc5OWNkNzFhNWMyOTMzZWQyZmI3 YTY2IiAgInJlZ3VsYXRvcjogY29yZToKcmVzb2x2ZSBzdXBwbHkgZm9yIGJvb3Qtb24vYWx3YXlz LW9uIHJlZ3VsYXRvcnMiKSB3aGVuIGl0IGJyb2tlIGluCjUuMTAuNjAuIEJ1dCB0aGUgbmV3IGRl ZmF1bHQgYmVoYXZpb3Igd2FzIG5vIGJhY2twb3J0ZWQgdG8gdGhlIDUuMTAKYnJhbmNoIHNvIGl0 IGNvbmZ1c2VkIG1lIHRoYXQgdGhlIHJldmVydCB0aGF0IGdvdCBiYWNrIGhzNDAwZXMgb24KaGVs aW9zNjQgaW4gdGhlIDUuMTAgYnJhbmNoIHdoZW4gZmluYWxseSBmaXhlZCBpbiB0aGUgNS4xNiBi cmFuY2ggKHRoZQpkb3VibGUgaW5pdCBmaXh1cCkgdGhlbiBlbW1jIHdhcyBzdGlsbCBicm9rZW4u Ck9ubHkgd2hlbiBhcmd1aW5nIHdpdGggYW4gQXJtYmlhbiB1c2VyIHRoYXQgYWxsIHJrMzM5OSBo YWQgZW1tYyBoczQwMGVzCmJyb2tlbiBkaWQgaGUgYXJndWUgdGhhdCBoaXMgYm9hcmQgd2FzIHdv cmtpbmcuIEFuZCBpbmRlZWQgaXQgd2FzIHRoZQpvbmx5IG9uZSB3aGljaCBhZGQgInJvY2tjaGlw LGVuYWJsZS1zdHJvYmUtcHVsbGRvd24iIHRvIGl0cyBkdHMgYXMgdGhleQpmb3VuZCBhYm91dCB0 aGUgbmV3IGRlZmF1bHQgYmVoYXZpb3IgY29tbWl0LCBjZgpodHRwczovL2xvcmUua2VybmVsLm9y Zy9sa21sL2VhZmQ4ZDhjMGNiY2FjYTFiMTkwZjg0ZWMxN2ExZGNkN2FlYzAzMDYuY2FtZWxAY29s bGFib3JhLmNvbS9ULwoiYXJtNjQ6IGR0czogcm9ja2NoaXA6IGFkZCBlbmFibGUtc3Ryb2JlLXB1 bGxkb3duIHRvIGVtbWMgcGh5IG9uCnJrMzM5OSIKCgpIZWlrbywgeW91IHRoZW4gYXNrZWQ6Ck9u IFR1ZSwgQXVnIDIzLCAyMDIyIGF0IDQ6NTMgQU0gSGVpa28gU3TDvGJuZXIgPGhlaWtvQHNudGVj aC5kZT4gd3JvdGU6Cj4gSSdtIGp1c3Qgd29uZGVyaW5nIGFzIHRoZSAib2ZmZW5kaW5nIiBwYXRj aCBpcyBmcm9tIDIwMjAsIHdoeSB0aGlzCm9ubHkgdHVybnMgdXAgbm93LiBBbnkgaWRlYXM/CgoK SXQgdHVybnMgb3V0IGJlY2F1c2UgdGhpcyBjb21taXQgd2FzIG5vdCBiYWNrcG9ydGVkIHRvIHN0 YWJsZSBicmFuY2hlcy4KQW5kIHdoZW4gaXQgZGlkIG1vc3QgYm9hcmRzIGJyb2tlIChpdCB3YXMg cGFuaWMgaW4gdGhlIGZvcnVtcyB3aXRoIGRhdGEKbG9zcyBpc3N1ZXMpIGFuZCBlbmRlZCB1cCB3 aXRoIGhzNDAwIGlzYWJsZWQgaW4gZG93bnN0cmVhbSBrZXJuZWwKKEFybWJpYW4gZm9yIG9uZSku ClRoaXMgZGlzY3Vzc2lvbiB3YXMgaW4gMjAyMi4gT25seSB0d28gZHRzIGZpbGVzIHdpdGggaHM0 MDAgc3VwcG9ydCBmbwpyazMzOTkgd2VyZSBhZGRlZCBzaW5jZSB0aGVuIGFuZCBoYWQgdG8gZGlz YWJsZSBoczQwMCBsYXRlciBvbmUgYmVjYXVzZQpvZiB0aGlzIGRlZmF1bHQgZW5hYmxlLXN0cm9i ZSBwb2xpY3kuCgoKQWxzbyBpbiB0aGlzIHRocmVhZDoKT24gVHVlLCBBdWcgMjMsIDIwMjIgYXQg MTA6MTMgUE0gRG91ZyBBbmRlcnNvbiA8ZGlhbmRlcnNAY2hyb21pdW0ub3JnPgp3cm90ZToKPiBB aCwgSSBzZWUuIFNvIGJlZm9yZSB0aGUgb2ZmZW5kaW5nIHBhdGNoIHdlIHVzZWQgdG8ganVzdCBs ZWF2ZSB0aGUKPiBwdWxsIHN0YXRlIGF0IHdoYXRldmVyIHRoZSBkZWZhdWx0IHdhcyB3aGVuIHRo ZSBrZXJuZWwgd2FzIGJvb3RlZC4KPiBBZnRlciB0aGUgb2ZmZW5kaW5nIHBhdGNoIHdlIGNob3Nl IGEgZGVmYXVsdC4KPiAKPiBPbiBrZXZpbiBJIHNlZSBhbiBleHRlcm5hbCBwdWxsIGRvd24gb24g dGhpcyBsaW5lLiBFbmFibGluZyBib3RoIHRoZQo+IGludGVybmFsIGFuZCBleHRlcm5hbCBpcyBw cm9iYWJseSBub3QgYSBodWdlIGRlYWwsIGl0J2xsIGp1c3QgYWZmZWN0Cj4gdGhlIHN0cmVuZ3Ro IG9mIHRoZSBwdWxsLgo+IAo+IE9uIGJvYiBJIF90aGlua18gdGhlIGV4dGVybmFsIHB1bGwgZG93 biBpcyBhbHNvIHN0dWZmZWQuCj4gCj4gLi4uc28gSSBndWVzcyB0aGF0IHdvdWxkIGV4cGxhaW4g d2h5IGl0IGRpZG4ndCBjYXVzZSBhIHByb2JsZW0gZm9yIGF0Cj4gbGVhc3QgdGhvc2UgdHdvIGJv YXJkcz8KPiAKPiAtRG91ZwoKClNvIGl0IGNvdWxkIGJlIHRoYXQgZGlzYWJsZSBieSBkZWZhdWx0 IGJyb2tlIG1vc3QgYm9hcmQgYnV0IGVuYWJsaW5nIGJ5CmRlZmF1bHQgd291bGQgYnJlYWsgbm9u ZSwgb3Igb25seSB2ZXJ5IHNwZWNpZmljIGJvYXJkICh0aGF0IGZyb20gbXkgZ2l0CmxvZyBpbnNw ZWN0aW9uIHdvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIGJyb2tlbiBiZWZvcmUgdGhlIG5ldyBiZWhh dmlvcgp3YXMgaW50cm9kdWNlZCkuCgp0aGVuOgo+IEkgcmVhbGl6ZWQgdGhhdCBvbmx5IHNvbWUg ZGV2aWNlcyBtYXkgYmUgYWZmZWN0ZWQsIHNvIEkgY29uc2lkZXJlZAo+IG1vZGlmeWluZyByazMz OTktbmFub3BpNC5kdHNpIG9ubHksCj4gYnV0IG90aGVyIGJvYXJkcyB3aXRob3V0IGV4dGVybmFs IHB1bGwtZG93biBzaG91bGQgc3RpbGwgbmVlZCB0aGlzCj4gcGF0Y2guCj4gCj4gCj4gQlIsCj4g SmVuc2VuCgoKCgpJdCB3YXMgcG9pbnRlZCBvdXQgdGhhdCBSb2NrUHJvNjQgYW5kIFBpbmVib29r IFBybyBoYWQgdGhlIHN0cm9iZSBwaW4KbWlzd2lyZWQuIAoKRnJvbTogRHJhZ2FuIFNpbWljIEAg MjAyNC0wMi0yNyAxNjowMCBVVEMgKHBlcm1hbGluayAvIHJhdykKPiBXaGVuIGl0IGNvbWVzIHRv IEhTNDAwIHN1cHBvcnQgb24gdGhlIFJvY2tQcm82NCBhbmQgdGhlIFBpbmVib29rIFBybywKPiB0 aGV5J3JlIHVuZm9ydHVuYXRlbHkgbWlzd2lyZWQgaW4gYSBob3BlbGVzcyB3YXksIGNhdXNpbmcg dGhlIERBVEEKPiBTVFJPQkUgc2lnbmFsIGZyb20gdGhlIGVNTUMgY2hpcCAoaS5lLiB0aGUgZU1N QyBtb2R1bGUpIG5vdCB0byBldmVuCj4gcmVhY2ggdGhlIHJpZ2h0IGJhbGwgb24gdGhlIFJLMzM5 OSBTb0MuCj4gCj4gSGVyZSBhcmUgYSBmZXcgc2NyZWVuc2hvdHMgZnJvbSB0aGUgc2NoZW1hdGlj cyB0aGF0IGlsbHVzdHJhdGUgdGhpcwo+IGlzc3VlICh0aGUgZmlyc3Qgb25lIGlzIGZyb20gdGhl IGVNTUMgbW9kdWxlIHNjaGVtYXRpYywgdGhlIHJlbWFpbmluZwo+IHR3byBhcmUgZnJvbSB0aGUg Um9ja1BybzY0IHNjaGVtYXRpYywgd2hpY2ggYXJlIHByZXR0eSBtdWNoIGV4YWN0bHkKPiB0aGUg c2FtZSBpbiB0aGUgUGluZWJvb2sgUHJvIHNjaGVtYXRpYyk6Cj4gCj4gLSBodHRwczovL2kuaW1n dXIuY29tL01xRDdyY0cucG5nCj4gLSBodHRwczovL2kuaW1ndXIuY29tL2hybFFCY2sucG5nCj4g LSBodHRwczovL2kuaW1ndXIuY29tL210WXZjOXMucG5nCj4gCj4gVGhlcmUgaGF2ZSBiZWVuIHNv bWUgUGluZTY0IGNvbW11bml0eSBhdHRlbXB0cyB0byBoYXZlIHRoaXMgZml4ZWQgaW4KPiBuZXcg Um9ja1BybzY0IGFuZCBQaW5lYm9vayBQcm8gaGFyZHdhcmUgcmV2aXNpb25zLCBidXQgc3VjaCBh dHRlbXB0cwo+IHVuZm9ydHVuYXRlbHkgZmFpbGVkLiA6Lwo+IAo+IFRodXMsIHdlJ2xsIHVuZm9y dHVuYXRlbHkgaGF2ZSB0byBkZWFsIHdpdGggdGhlIHdob2xlIHRoaW5nIG9uIHRoZQo+IGJvYXJk IGxldmVsLCBpbnN0ZWFkIG9mIG1ha2luZyBjaGFuZ2VzIG9uIHRoZSBTb0MgbGV2ZWwuCgoKT24g VHVlIE1hciAyNiwgMjAyNCBhdCA4OjU1IFBNIENFVCwgRHJhZ2FuIFNpbWljIHdyb3RlOgo+IE1v cmVvdmVyLCBhcyBJIGFscmVhZHkgZXhwbGFpbmVkIHNvbWUgdGltZSBhZ28sIFsxXSBzb21lIGJv YXJkcyBhbmQKPiBkZXZpY2VzIGFyZSB1bmZvcnR1bmF0ZWx5IG1pc3dpcmVkLCBhbmQgd2UgZG9u J3Qgd2FudCB0byBlbmFibGUgdGhlCj4gREFUQSBTVFJPQkUgcHVsbC1kb3duIG9uIHN1Y2ggYm9h cmRzLgoKCgpNYXliZSByZXZlcnRpbmcgdG8gdGhlIHByZXZpb3VzIG9mIG5vdCBzZXR0aW5nIGEg ZGVmYXVsdCBmb3IgdGhpcwpzdHJvYmUgcHVsbGRvd24gaW4gdGhlIGtlcm5lbCBpcyB0aGUgYmVz dCBvcHRpb24gKHRoZSBjb21taXQKaW50cm9kdWNpbmcgYSBkZWZhdWx0IGRvZXMgbm90IHRlbGwg d2h5IGl0IG1ha2VzIHNlbnNlIHRvIHNldCBhIGRlZmF1bHQKaW4gdGhlIGtlcm5lbCBvdXQgb2Yg InRoZSBSb2NrY2hpcCBrZXJuZWwgZG9lcyBpdCIpLgoKCmFuZDoKT24gV2VkLCBBdWcgMjQsIDIw MjIgYXQgMTA6NTggUE0gRG91ZyBBbmRlcnNvbiA8ZGlhbmRlcnNAY2hyb21pdW0ub3JnPgp3cm90 ZToKPiBJIGd1ZXNzIHRoZSBvdGhlciBhbHRlcm5hdGl2ZSB3b3VsZCBiZSB0byBjaGFuZ2UgaG93 IHRoZSBkdCBwcm9wZXJ0eQo+IHdvcmtzLiBZb3UgY291bGQgc2F5Ogo+IAo+IDEuIElmIGBlbmFi bGUtc3Ryb2JlLXB1bGxkb3duYCBpcyBzZXQgdGhlbiBlbmFibGUgdGhlIHN0cm9iZQo+IHB1bGxk b3duLgo+IAo+IDIuIElmIGBlbmFibGUtc3Ryb2JlLXB1bGxkb3duYCBpcyBub3Qgc2V0IHRoZW4g ZG9uJ3QgdG91Y2ggdGhlIHBpbiBpbgo+IHRoZSBrZXJuZWwuCj4gCj4gMy4gSWYgc29tZW9uZSBs YXRlciBuZWVkcyB0byBleHBsaWNpdGx5IGRpc2FibGUgdGhlIHN0cm9iZSBwdWxsZG93bgo+IHRo ZXkgY291bGQgYWRkIGEgbmV3IHByb3BlcnR5IGxpa2UgYGRpc2FibGUtc3Ryb2JlLXB1bGxkb3du YC4KPiAKPiAKPiBPYnZpb3VzbHkgdGhlcmUgYXJlIHRyYWRlb2ZmcyBiZXR3ZWVuIHRoYXQgYW5k IHdoYXQgeW91J3ZlIGRvbmUgYW5kCj4gSSdtIGhhcHB5IHRvIGxldCBvdGhlcnMgbWFrZSB0aGUg Y2FsbCBvZiB3aGljaCB0aGV5J2QgcHJlZmVyLgoKClRoaXMgaXMgYSBzYW5lIHdheSBwb2xpY3kg dG8gbWUuCgpNYXliZSBSb2NrY2hpcCBoYWQgYSByYXRpb25hbGUgdG8gZW5hYmxlIHRoaXMgc3Ry b2JlIHB1bGxkb3duIGJ5CmRlZmF1bHQuIEJ1dCBJIGRvbid0IHRoaW5rIHRoZXJlIGlzIGFueSBy YXRpb25hbGUgdG8gZm9yY2UgdGhpcwpwdWxsZG93biB0byBkaXNhYmxlZCBieSBkZWZhdWx0LgoK CkluIGEgc2Vjb25kYXJ5IHN0ZXAsIHdpdGggZXh0ZW5zaXZlIHRlc3RpbmcsIGlmIGV2ZXIsIEkg YmVsaWV2ZSB3ZQpjb3VsZCBzdGlsbCBjaGFuZ2UgdGhlIGRlZmF1bHQgdG8gZW5hYmxlIGJ1dCBh ZGQgYSBkaXNhYmxlLXN0cm9iZSBmb3IKUm9ja1BybzY0IGFuZCBQaW5lYm9vayBQcm8gKGJyb2tl biBkdWUgdG8gYSBkZXNpZ24gbWlzdGFrZSB0aGF0IGlzCnNwZWNpZmljIHRvIHRoZXNlIGJvYXJk cyBhcyBmYXIgYXMgSSB1bmRlcnN0b29kKS4KQnV0IHRoaXMgY2FuIGJlIHdvcmtlZCBvbiBhZnRl ciBhbnkgZGVmYXVsdCBpcyByZW1vdmVkIGFuZCBtZXJnZWQgb25seQp3aGVuIHN1cHBvcnRlZCBi b2FyZHMgaGF2ZSBiZWVuIHRlc3RlZCB0byBiZSBmaW5lIHdpdGggdGhpcyBkZWZhdWx0LgpBcyBm YXIgYXMgSSB1bmRlcnN0b29kIHNldHRpbmcgdGhlIHN0cm9iZSBwdWxsZG93biB0byBib2FyZCB3 aXRoIGFuCmV4dGVybmFsIHB1bGxkb3duIGlzIGhhcm1sZXNzLCBzbyBvbmx5IGJvYXJkcyB3aXRo IG1pc3dpcmVkIGxpbmVzIHdvdWxkCmJlIGJyb2tlbiBhbmQgY291bGQgYmUgaGFuZGxlZCBieSBh ZGRpbmcgZGlzYWJsZS1wdWxsZG93biAod2hpY2ggd291bGQKYWxzbyBkb2N1bWVudCB0aGVtIG5v dCBzdXBwb3J0aW5nIGhzNDAwIGluIHRoZSBkdHMgaW5zdGVhZCBvZiByZWx5aW5nCm9uIGRldmVs b3BlcnMgb3QgY2Fycnkgb24gdGhpcyBwaWVjZSBvZiBpbmZvcm1hdGlvbikuCgpJbiBmYWN0IEkg YmVsaWV2ZSBpdCB3b3VsZCBiZSBnb29kIHRvIGFkZCBkaXNhYmxlLXN0cm9iZS1wdWxsZG93bgpw cm9wZXJ0aWVzIHRvIHRoZSBkdHMgb2YgYm9hcmRzIHdoaWNoIGNhbm5vdCBzdXBwb3J0IGludGVy bmFsIHN0cm9iZQpwdWxsZG93biB0byBiZSBlbmFibGVkLCBpZiBvbmx5IHRvIGRvY3VtZW50IHRo ZXkgY2Fubm90IHN1cHBvcnQgaXQuCgoKQnkgdGhlIHdheSBob3cgZG9lcyB0aGUgUm9ja2NoaXAg a2VybmVsIGhhbmRsZXMgUm9ja1BybzY0IGFuZCBQaW5lYm9vawpQcm8/CkFyZSBib3RoIFJvY2tQ cm82NCBWMi4wIGFuZCBWMi4xIHdpdGggREFUQSBTVFJPQkUgbGluZXMgbWlzd2lyZWQ/CgpSZWdh cmRzLApBbGJhbgoKLS0gCmxpbnV4LXBoeSBtYWlsaW5nIGxpc3QKbGludXgtcGh5QGxpc3RzLmlu ZnJhZGVhZC5vcmcKaHR0cHM6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8v bGludXgtcGh5Cg== 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 1C465C27C75 for ; Tue, 11 Jun 2024 19:39:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Date:Cc:To:From:Subject:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=mm1Osg3JwE69nCSJTnX/yXZHpi9SXkzWlLuMAgjt1XE=; b=eaQv4ihj/izfKm 8Q0x2E2FvNdcKJ9x+pwuKOxpbYDDzoCC4gMtJpv+mw6nWGjze+ftk8DrtOQVdYYrPI/E3z+0HzSVK De6LMYNUYua+2cpZYMaLlFyiwAg7miw+YDQY6w4p4XvD13UfevcX0hd9F37RDR6Hc+NiAXaDi//0t cxDU1DCzcYpdREvff6nNtE2+MYKjexCXcy2xbmmKWaC2P0Wn7bxprKcYcmdVceOsNXnpHDdkmCi7z Rzmu46tSONhGFZ6gTKgxcm49M7RlSVtd2r9wGclVppRm9B4sR0fIOFd9xzY8W5tuGmLTG9ETzzE2U 7PkySs26wOnx//KczvlA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sH7Kj-0000000A37M-0mcQ; Tue, 11 Jun 2024 19:39:05 +0000 Received: from mail-wr1-x42f.google.com ([2a00:1450:4864:20::42f]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sH7Kb-0000000A32Q-45VP; Tue, 11 Jun 2024 19:39:01 +0000 Received: by mail-wr1-x42f.google.com with SMTP id ffacd0b85a97d-35f1691b18fso2987039f8f.2; Tue, 11 Jun 2024 12:38:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718134734; x=1718739534; darn=lists.infradead.org; h=mime-version:user-agent:content-transfer-encoding:references :in-reply-to:date:cc:to:from:subject:message-id:from:to:cc:subject :date:message-id:reply-to; bh=mMuKKGbiLvzl7g567RMJt94PCP09N1aUUNw3PJ69S5U=; b=AF/c5+WfMniui7TOo6DIyADnVOQRsI/+w9eFw+L7Nd+RjeGzg383BZ31SJmvbPQhww MAZmKW/4cPY3wRyhCiJIUk1QtjoYmH1Sih3imBVzd8maQVBwCr8euA6VmGDb9fwyWhQh qGlBZgWcAYx57/C1L7PhCuiXoMv6wuHXDLncqXzoP4O25dTYG1M/4Ct3zFuis6j3amN2 maHjAc0X8xgIKnYDCvfQlGhRdNTLF142faG415t5t2pwzuSLLBtkm1aM4w55LJrICDa2 ZpswE2uroniFtEXypMjGrvxGP6vgelnEA/SMH8VB4ynsT2JgxjbvjcrJ387KW4vVeB/Z 8Ugw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718134734; x=1718739534; h=mime-version:user-agent:content-transfer-encoding:references :in-reply-to:date:cc:to:from:subject:message-id:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=mMuKKGbiLvzl7g567RMJt94PCP09N1aUUNw3PJ69S5U=; b=QamR1vg9LDBX/dpW94djqUl/5CRtkLn4GwMQovoojZDGGRTZ/wdlbtOzxvgbdON76B frDJAaNWKJx35kB5103UCPFtFrrZdX1K6ovfkXS+0yAufSD2UPMpxIHma5+z7dx4Bkmb T1ml0PrrGWa73EgKQzjcFnQ1CaYAxcxbVz/dcGpwMhTXlCv9bRC50pxhN4znwSp2gOFx qo9emuUmKdDESshlvA6mvCiL7t7OQvmw68lS5X0Nv/R8W7z+I8UCA5fOydVfo3UzoWwi EIoK+xvp1Vjl6gZ5meFnYwBBpwgq4+22sCQ15u4BG9ndHOR/J1WO9eV6iBPWUypqXAwf nHqg== X-Forwarded-Encrypted: i=1; AJvYcCWsSC8wcvXC1LuwdBUHK+/IKhkJguXlAFAcjEFOEZdGUdXnwRR1jnPY5HQaYi7uGk3vn8ZCZgkyhrWiGjHx9huJ3pvpOqWbQJSkN1cvBGfhGDVHdTdAM/Vwd2rzs6xD5yQzVqMFCAm5Tpwfpa/MU7Q0nr1+Kc7xXgjgeMiGW+h2WU9KvE4B1wootmZfuXPgloO5ZNlIyTaz X-Gm-Message-State: AOJu0Yy+ZZui638W1O3Ekxul+ZCgMIHYI8DJ/EmrJgfrMZzKT5aA05D/ gV5b9n7jZLrRBp7cJgtAcRDHUeswwQDdfbr+9haRw8l7+2kxi+l1 X-Google-Smtp-Source: AGHT+IHJG4CxOHoiEYQZFTcAR5H73GlsNVvt7EMw1Bte0lOGSli21iSBCvk7Dv1tJ+cisx7RdIKaHg== X-Received: by 2002:a05:600c:314a:b0:422:1a82:3ebf with SMTP id 5b1f17b1804b1-4221a824515mr38327285e9.35.1718134733320; Tue, 11 Jun 2024 12:38:53 -0700 (PDT) Received: from hermes.prahal.homelinux.net (91-175-163-178.subs.proxad.net. [91.175.163.178]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-421791b1ea9sm135406905e9.21.2024.06.11.12.38.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Jun 2024 12:38:52 -0700 (PDT) Message-ID: <2427291970ac0962bf56b2455e5cb26e49d42c51.camel@gmail.com> Subject: Re: [PATCH 1/3] phy: rockchip: emmc: Enable pulldown for strobe line From: Alban Browaeys To: Heiko =?ISO-8859-1?Q?St=FCbner?= , Conor Dooley Cc: dev@folker-schwesinger.de, Vinod Koul , Kishon Vijay Abraham I , Chris Ruehl , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Christopher Obbard , Doug Anderson , Brian Norris , Jensen Huang , linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org Date: Tue, 11 Jun 2024 21:38:52 +0200 In-Reply-To: <2192003.Icojqenx9y@diego> References: <20240326-rk-default-enable-strobe-pulldown-v1-0-f410c71605c0@folker-schwesinger.de> <313d5a24b6cffa1a9160e624bb6855aa7f66589e.camel@gmail.com> <20240411-mushily-pucker-732583c1d340@spud> <2192003.Icojqenx9y@diego> User-Agent: Evolution 3.52.2-2 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240611_123858_240844_D9C975A7 X-CRM114-Status: GOOD ( 80.73 ) X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org VGhpcyBpcyBxdWl0ZSBhIGRldGFpbGVkIHJlcGxpZWQuIGluIHN1bW1hcnkgSSBiZWxpZXZlIHRo ZSBlbmFibGUtCnN0cm9iZSBwcm9wZXJ0eSBzaG91bGQgYmUgYWRkZWQgYXMgc29vbiBhcyBwb3Nz aWJsZSB0byByZXN0b3JlIGhzNDAwCnN1cHBvcnQuCgpJbiB0aGUgcHJvY2VzcyBpdCB3aWxsIGJl IGVhc2llciB0byBzZWUgaWYgYW55IHVwc3RyZWFtIGR0cyBoYXMgaHM0MDAKZW5hYmxlZCBhbmQg ZG9lcyBub3QgcmVxdWlyZSB0byBmb3JjZSB0aGlzIGVuYWJsZS1zdHJvYmUgcHJvcGVydHkuIAoK QXMgZmFyIGFzIEkgdW5kZXJzdG9vZCB0aGUgb25seSBib2FyZHMgdGhhdCBkbyBub3Qgc3VwcG9y dCBlbmFibGUtCnN0cm9iZSBwdWxsZG93biBieSBkZWZhdWx0IGRvIG5vdCBzdXBwb3J0IGhzNDAw IGVpdGhlciAoYmVjYXVzZSB0aGV5IGRvCm5vdCBzdXBwb3J0IHN0cm9iZSBwdWxsZG93biBlbmFi bGVkIGR1ZSB0byB3aXJpbmcgaXNzdWUsIGJ1dCB0aGF0IGFsc28KcHJldmV0biB0aGVtIGZyb20g ZW5hYmxpbmcgaHM0MDApLgoKQW5kIHRoZW4gaWYgSSBtYW5hZ2VkIHRvIGNvbnZpbmNlIHlvdSB0 aGF0IHRoZSBiZXN0IHBvbGljeSBpcyB0bwpyZXN0b3JlIHByZXZpb3VzIGJlaGF2aW91ciBvZiBu b3Qgc2V0dGluZyBhIGRlZmF1bHQgaW4gdGhlIGtlcm5lbCAoYW5kCnByb3ZpZGVzIGVuYWJsZSBh bmQgZGlzYWJsZSBwcm9wZXJ0aWVzIGZvciB0aG9zZSB0aGF0IHdhbnQgdG8gZm9yY2UKZXRoZXIg d2F5IGJlIGl0IGR1ZSB0byB3aXJpbmcgaXNzdWVzKSwgcmVtb3ZlIHRoZXNlIHByb3BlcnRpZXMg b25jZSB0aGUKZGVmYXVsdCBpcyByZW1vdmVkLgoKCkxlIHZlbmRyZWRpIDE5IGF2cmlsIDIwMjQg w6AgMTY6MzEgKzAyMDAsIEhlaWtvIFN0w7xibmVyIGEgw6ljcml0wqA6Cj4gQW0gRG9ubmVyc3Rh ZywgMTEuIEFwcmlsIDIwMjQsIDE3OjQyOjI0IENFU1Qgc2NocmllYiBDb25vciBEb29sZXk6Cj4g PiBPbiBXZWQsIEFwciAxMCwgMjAyNCBhdCAwODoyODo1N1BNICswMjAwLCBBbGJhbiBCcm93YWV5 cyB3cm90ZToKPiA+ID4gTGUgamV1ZGkgMjggbWFycyAyMDI0IMOgIDE4OjAxICswMDAwLCBDb25v ciBEb29sZXkgYSDDqWNyaXQgOgo+ID4gPiA+IE9uIFRodSwgTWFyIDI4LCAyMDI0IGF0IDA2OjAw OjAzUE0gKzAxMDAsIEFsYmFuIEJyb3dhZXlzIHdyb3RlOgo+ID4gPiA+ID4gTGUgbWFyZGkgMjYg bWFycyAyMDI0IMOgIDE5OjQ2ICswMDAwLCBDb25vciBEb29sZXkgYSDDqWNyaXQgOgo+ID4gPiA+ ID4gPiBPbiBUdWUsIE1hciAyNiwgMjAyNCBhdCAwNzo1NDozNVBNICswMTAwLCBGb2xrZXIKPiA+ ID4gPiA+ID4gU2Nod2VzaW5nZXIgdmlhCj4gPiA+ID4gPiA+IEI0Cj4gPiA+ID4gPiA+IFJlbGF5 IHdyb3RlOgo+ID4gPiA+ID4gPiA+IEZyb206IEZvbGtlciBTY2h3ZXNpbmdlciA8ZGV2QGZvbGtl ci1zY2h3ZXNpbmdlci5kZT4KPiA+ID4gPiA+ID4gPiAtCWlmIChvZl9wcm9wZXJ0eV9yZWFkX2Jv b2woZGV2LT5vZl9ub2RlLAo+ID4gPiA+ID4gPiA+ICJyb2NrY2hpcCxlbmFibGUtCj4gPiA+ID4g PiA+ID4gc3Ryb2JlLXB1bGxkb3duIikpCj4gPiA+ID4gPiA+ID4gLQkJcmtfcGh5LT5lbmFibGVf c3Ryb2JlX3B1bGxkb3duID0KPiA+ID4gPiA+ID4gPiBQSFlDVFJMX1JFTl9TVFJCX0VOQUJMRTsK PiA+ID4gPiA+ID4gPiArCWlmIChvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woZGV2LT5vZl9ub2RlLAo+ ID4gPiA+ID4gPiA+ICJyb2NrY2hpcCxkaXNhYmxlLQo+ID4gPiA+ID4gPiA+IHN0cm9iZS1wdWxs ZG93biIpKQo+ID4gPiA+ID4gPiA+ICsJCXJrX3BoeS0+ZW5hYmxlX3N0cm9iZV9wdWxsZG93biA9 Cj4gPiA+ID4gPiA+ID4gUEhZQ1RSTF9SRU5fU1RSQl9ESVNBQkxFOwo+ID4gPiA+ID4gPiAKPiA+ ID4gPiA+ID4gVW5mb3J0dW5hdGVseSB5b3UgY2Fubm90IGRvIHRoaXMuCj4gPiA+ID4gPiA+IFBy ZXZpb3VzbHkgbm8gcHJvcGVydHkgYXQgYWxsIG1lYW50IGRpc2FibGVkIGFuZCBhIHByb3BlcnR5 Cj4gPiA+ID4gPiA+IHdhcwo+ID4gPiA+ID4gPiByZXF1aXJlZAo+ID4gPiA+ID4gPiB0byBlbmFi bGUgaXQuIFdpdGggdGhpcyBjaGFuZ2UgdGhlIGFic2VuY2Ugb2YgYSBwcm9wZXJ0eQo+ID4gPiA+ ID4gPiBtZWFucwo+ID4gPiA+ID4gPiB0aGF0Cj4gPiA+ID4gPiA+IGl0Cj4gPiA+ID4gPiA+IHdp bGwgYmUgZW5hYmxlZC4KPiA+ID4gPiA+ID4gQW4gb2xkIGRldmljZXRyZWUgaXMgdGhhdCB3YW50 ZWQgdGhpcyB0byBiZSBkaXNhYmxlZCB3b3VsZAo+ID4gPiA+ID4gPiBoYXZlCj4gPiA+ID4gPiA+ IG5vCj4gPiA+ID4gPiA+IHByb3BlcnR5IGFuZCB3aWxsIG5vdyBlbmQgdXAgd2l0aCBpdCBlbmFi bGVkLiBUaGlzIGlzIGFuCj4gPiA+ID4gPiA+IEFCSQo+ID4gPiA+ID4gPiBicmVhawo+ID4gPiA+ ID4gPiBhbmQgaXMKPiA+ID4gPiA+ID4gY2xlYXJseSBub3QgYmFja3dhcmRzIGNvbXBhdGlibGUs IHRoYXQncyBhIE5BSyB1bmxlc3MgaXQgaXMKPiA+ID4gPiA+ID4gZGVtb25zdHJhYmxlCj4gPiA+ ID4gPiA+IHRoYXQgbm9vbmUgYWN0dWFsbHkgd2FudHMgdG8gZGlzYWJsZSBpdCBhdCBhbGwuCj4g PiA+ID4gPiAKPiA+ID4gPiA+IAo+ID4gPiA+ID4gQnV0IHRoZSBwYXRjaCB0aGF0IGludHJvZHVj ZWQgdGhlIG5ldyBkZWZhdWx0IHRvIGRpc2FibGUgdGhlCj4gPiA+ID4gPiBwdWxsZG93bgo+ID4g PiA+ID4gZXhwbGljaXRlbHkgaW50cm9kdWNlZCBhIHJlZ3Jlc3Npb24gZm9yIGF0IGxlYXN0IDQg Ym9hcmRzLgo+ID4gPiA+ID4gSXQgdG9vayB0aW1lIHRvIHNvcnQgb3V0IHRoYXQgdGhlIGRlZmF1 bHQgdG8gZGlzYWJsZSBwdWxsZG93bgo+ID4gPiA+ID4gd2FzCj4gPiA+ID4gPiB0aGUKPiA+ID4g PiA+IGN1bHByaXQgYnV0IHN0aWxsLgo+ID4gPiA+ID4gV2lsbCB3ZSBjYXJyeSB0aGlzIG5ldyBi ZWhhdm9yIHRoYXQgYnJlYWtzIHRoZSBkZWZhdWx0IGRlc2lnbgo+ID4gPiA+ID4gZm9yCj4gPiA+ ID4gPiByazMzOTkgYmVjYXVzZSBzaW5jZSB0aGUgcmVncmVzc2lvbiB3YXMgaW50cm9kdWNlZCBu ZXcgYm9hcmQKPiA+ID4gPiA+IGRlZmluaXRpb24KPiA+ID4gPiA+IG1pZ2h0IGhhdmUgZXhwY2V0 ZWQgdGhpcyBuZXcgYmVoYXZpb3IuCj4gPiA+ID4gPiAKPiA+ID4gPiA+IENvdWxkIHRoZSBiZXN0 IG9wdGlvbiBiZSB0byByZXZlcnQgdG8gw6lub3Qgc2V0IGEgZGVmYXVsdAo+ID4gPiA+ID4gZW5h YmxlL2Rpc2FibGUKPiA+ID4gPiA+IHB1bGxkb3duIiAoYXMgYmVmb3JlIHRoZSBjb21taXQgdGhh dCBpbnRyb2R1Y2VkIHRoZQo+ID4gPiA+ID4gcmVncmVzc2lvbikgYW5kCj4gPiA+ID4gPiBhbGxv dyBvbmUgdG8gZm9yY2UgdGhlIHB1bGxkb3duIHZpYSB0aGUgZW5hYmxlL2Rpc2FibGUKPiA+ID4g PiA+IHB1bGxkb3duCj4gPiA+ID4gPiBwcm9wZXJ0eT8KPiA+ID4gPiA+IEkgbWVhbiB0aGUgY29t bWl0IHRoYXQgaW50cm9kdWNlZCBhIGRlZmF1bHQgdmFsdWUgZm9yIHRoZQo+ID4gPiA+ID4gcHVs bGRvd24KPiA+ID4gPiA+IGRpZAo+ID4gPiA+ID4gbm90IHNlZW0gdG8gYmUgYWJvdXQgZml4aW5n IGFueXRoaW5nLiBCdXQgaXQgYnJva2UgYSBsb3QuIEFOZAo+ID4gPiA+ID4gaXQKPiA+ID4gPiA+ IHdhcwo+ID4gPiA+ID4gcmVhbGx5IHJlYWxseSBoYXJkIHRvIGZpbmQgdGhlIGRlc2NyaXB0aW9u IG9mIHRoaXMgY29tbWl0IHRvCj4gPiA+ID4gPiB1bmRlcnN0YW5kCj4gPiA+ID4gPiB0aGF0IG9u ZSBoYWQgdG8gZW5hYmxlIHB1bGxkb3duIHRvIHJlc3RvcmUgaHM0MDAuCj4gPiA+ID4gPiAKPiA+ ID4gPiA+IEluIG1vcmUgdGhhbiAzIHllYXJzLCBvbmx5IG9uZSBib2FyZCBtYWludGFpbmVyIG5v dGljZWQgdGhhdAo+ID4gPiA+ID4gdGhpcwo+ID4gPiA+ID4gcHJvcGVydHkgd2FzIHJlcXVpcmVk IHRvIGdldCBiYWNrIEhTNDAwwqAgYW5kIHRoYW5rcyB0byBhIHVzZXIKPiA+ID4gPiA+IHRlbGxp bmcKPiA+ID4gPiA+IG1lIHRoYXQgdGhpcyBib2FyZCB3YXMgd29ya2luZyBJIGZvdW5kIGZyb20g dGhpcyBib2FyZCB0aGF0Cj4gPiA+ID4gPiB0aGlzCj4gPiA+ID4gPiBwcm9wZXJ0eSB3YXMgIm1p c3NpbmciIGZyb20gbW9zdCBib2FyZCBkZWZpbml0aW9ucyAod2hpbGUgaXQKPiA+ID4gPiA+IHdh cwo+ID4gPiA+ID4gbm90Cj4gPiA+ID4gPiByZXF1aXJlZCBiZWZvcmUpLgo+ID4gPiA+ID4gCj4g PiA+ID4gPiAKPiA+ID4gPiA+IEkgYW0gYWxsIGZvciBub3QgYnJlYWtpbmcgQUJJLiBCdXQgd2hh dCBhYm91dCBub3QgcmV2ZXJ0aW5nIGEKPiA+ID4gPiA+IHBhdGNoCj4gPiA+ID4gPiB0aGF0IGFs cmVhZHkgYnJva2UgQUJJIGJlY2F1c2UgdGhpcyBwYXRjaCBpbnRyb2R1Y2VkIGEgbmV3Cj4gPiA+ ID4gPiBBQkkgdGhhdAo+ID4gPiA+ID4gd2UKPiA+ID4gPiA+IGRvbid0IHdhbnQgdG8gYnJlYWs/ Cj4gPiA+ID4gPiBJIG1lYW4gc2hvdWxkbid0IGEgbmV3IGNvbW1pdCB3aXRoIGEgbmV3IEFCSSB0 aGF0IHJlZ3Jlc3NlZAo+ID4gPiA+ID4gdGhlCj4gPiA+ID4gPiBrZXJuZWwKPiA+ID4gPiA+IGJl IHJldmVydGVkPwo+ID4gPiA+IAo+ID4gPiA+IEkgdGhpbmsgSSBzYWlkIGl0IGFmdGVyIE9QIHJl cGxpZWQgdG8gbWUgeWVzdGVyZGF5LCBidXQgdGhpcyBpcwo+ID4gPiA+IGEKPiA+ID4gPiBwcmV0 dHkKPiA+ID4gPiBzaGl0dHkgc2l0dWF0aW9uIGluIHRoYXQgdGhlIG9yaWdpbmFsIGRlZmF1bHQg cGlja2VkIGZvciB0aGUKPiA+ID4gPiBwcm9wZXJ0eQo+ID4gPiA+IHdhcyBhY3R1YWxseSBpbmNv cnJlY3QuIEdpdmVuIGl0J3MgYmVlbiBsaWtlIHRoaXMgZm9yIGZvdXIKPiA+ID4gPiB5ZWFycwo+ ID4gPiA+IGJlZm9yZQo+ID4gPiA+IGFueW9uZSBub3RpY2VkLCBhbmQgb3RoZXJzIHByb2JhYmx5 IGRlcGVuZCBvbiB0aGUgY3VycmVudAo+ID4gPiA+IGJlaGF2aW91ciwKPiA+ID4gPiB0aGF0J3Mg aGFyZCB0byBqdXN0aWZ5Lgo+ID4gPiA+IAo+ID4gPiAKPiA+ID4gQSBsb3Qgb2YgcGVvcGxlIG5v dGljZWQgZmFzdCB0aGF0IEhTNDAwIHdhcyBicm9rZW4gaW4gdGhlIDUuMTAKPiA+ID4gYnJhbmNo Cj4gPiA+IGJ1dCBkdWUgdG8gYW5vdGhlciBjb21taXQgKG1vcmUgbGF0ZXIsIGllIGRvdWJsZSBy ZWd1bGF0b3IgaW5pdAo+ID4gPiB0aGF0Cj4gPiA+IG1lc3NlZCB1cCBlbW1jKSB0aGlzIHNlY29u ZCBicmVha2FnZSB3YXMgbm90IGRldGVjdGVkLiBCdXQgbW9zdGx5Cj4gPiA+IGRvd25zdHJlYW0u IEFuZCBtb3N0IGlmIG5vdCBhbGwgcmszMzk5IGJvYXJkcyBpbiBBcm1iaWFuIGhhZAo+ID4gPiBI UzQwMAo+ID4gPiBkaXNhYmxlZC4KPiA+ID4gCj4gPiA+IAo+ID4gPiBJdCB0b29rIDMgeWVhcnMg dG8gZGV0ZWN0IHRoYXQgSFM0MDAgd2FzIGJyb2tlbiBvbiBhIGZldyBib2FyZHMKPiA+ID4gbGlr ZQo+ID4gPiBSb2NrIFBpNCBpbiB0aGUgdXBzdHJlYW0ga2VybmVsLiBBbnkgbWlnaHQgc3RpbGwg YmUgYnJva2VuLgo+ID4gPiBJIHdvdWxkIG5vdCBjb3VudCBvbiB0aGUgZmFjdCB0aGF0IGtlZXBp bmcgdGhlIGN1cnJlbnQgYmVoYXZpb3IKPiA+ID4gZXF1YWxzCj4gPiA+IG5vIG1vcmUgYnJva2Vu IGJvYXJkcy4KPiA+ID4gCj4gPiA+IEZyb20gdGhlIHByZXZpb3VzIGV4Y2hhbmdlcyB0aGUgYm9h cmRzIHRoYXQgcmVxdWlyZXMgdGhlIHB1bGxkb3duCj4gPiA+IHRvIGJlCj4gPiA+IGRpc2FibGVk IHNlZW1zIHdlbGwga25vd24uCj4gPiA+IAo+ID4gPiBUaG91Z2ggSSBhbSBmaW5lIHdpdGggYWRk aW5nIGEgcHJvcGVydHkgdG8gc2V0IGVuYWJsZSBwdWxsZG93biB0bwo+ID4gPiBhbnkKPiA+ID4g Ym9hcmQgZGVmaW5pdGlvbiBmaWxlIHdoZXJlIHRoYXQgaXMgcmVxdWlyZWQuCj4gPiA+IAo+ID4g PiBPbmx5IEkgZG8gbm90IGJlbGlldmUga2VlcGluZyB0aGUgc3RhdHUgcXVvIGVxdWFsIGV2ZXJ5 dGhpbmcKPiA+ID4gd29ya3MKPiA+ID4gYmVjYXVzZSBpdCBoYXMgYmVlbiAzIHllYXJzLgo+ID4g Cj4gPiBGV0lXLCBJIGRpZG4ndCBzYXkgdGhpcy4gQ2xlYXJseSBpZiB0aGF0IHdhcyB0aGUgY2Fz ZSwgdGhpcyBwYXRjaAo+ID4gd291bGQKPiA+IG5ldmVyIGhhdmUgYXJyaXZlZC4KPiA+IAo+ID4g PiBJbiBmYWN0IHRoaXMgY29tbWl0IHJlYWNoZWQgdGhlIGRvd25zdHJlYW0ga2VybmVscyB3YXkg bGF0ZXIuIEFueQo+ID4gPiBzdGF5ZWQgd2l0aCB0aGUgNS4xMCBicmFuY2ggZm9yIHllYXJzLgo+ ID4gPiAKPiA+ID4gQnV0IG9uIHRoZSBvdGhlciBzaWRlIHRoZSBkaXNhYmxlIHB1bGxkb3duIGJ5 IGRlZmF1bHQgaXMgYWxyYWVkeQo+ID4gPiBpbgo+ID4gPiBzdGFibGUvbGludXgtcm9sbGluZy1s dHMgLgo+ID4gPiAKPiA+ID4gPiA+IE1pbmQgZml4aW5nIHRoZSBpbml0aWFsIHJlZ3Jlc3Npb24g OGI1YzJiNDViOGYwICJwaHk6Cj4gPiA+ID4gPiByb2NrY2hpcDogc2V0Cj4gPiA+ID4gPiBwdWxs ZG93biBmb3Igc3Ryb2JlIGxpbmUgaW4gZHRzIiBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuCj4g PiA+ID4gPiBjaGFuZ2luZwo+ID4gPiA+ID4gdGhlCj4gPiA+ID4gPiBkZWZhdWx0IHRvIHRoZSBv cHBvc2l0ZSB2YWx1ZSBidXQgY291bGQgYWxzbyBiZSByZXZlcnRpbmcgdG8KPiA+ID4gPiA+IG5v dAo+ID4gPiA+ID4gc2V0dGluZyBhIGRlZmF1bHQuCj4gPiA+ID4gCj4gPiA+ID4gVGhhdCdzIGFs c28gcHJvYmxlbWF0aWMsIGFzIHRoZSBvbmx5IHdheSB0byBkbyB0aGlzIGlzIG1ha2UKPiA+ID4g PiBzZXR0aW5nCj4gPiA+ID4gb25lIG9mIHRoZSBlbmFibGVkIG9yIGRpc2FibGVkIHByb3BlcnRp ZXMgcmVxdWlyZWQsIHdoaWNoIGlzCj4gPiA+ID4gYWxzbyBhbgo+ID4gPiA+IEFCSQo+ID4gPiA+ IGJyZWFrLCBzaW5jZSB5b3UnZCB0aGVuIGJlIHJlamVjdGluZyBwcm9iZSBpZiBvbmUgaXMgbm90 Cj4gPiA+ID4gcHJlc2VudC4KPiA+ID4gCj4gPiA+IAo+ID4gPiBJIGRvbid0IHVuZGVyc3RhbmQu Cj4gPiA+IEhvdyByZXZlcnRpbmcgdG8gbm90IHNldCBlaXRoZXIgcHVsbGRvd24gZW5hYmxlZCBv ciBkaXNhYmxlZCBieQo+ID4gPiBkZWZhdWx0Cj4gPiA+IGZvcmNlIGFsbCBib2FyZCB0byBzZXQg ZWl0aGVyIGVuYWJsZWQgb3IgZGlzYWJsZWQuCj4gPiA+IEkgd2FzIHRlbGxpbmcgYWJvdXQgbWFr aW5nIHRoZSBwdWxsZG93biBzZXQgYnkga2VybmVsIG9wdGlvbmFsIGJlCj4gPiA+IGl0Cj4gPiA+ IGVuYWJsZWQgb3IgZGlzYWJsZWQgdG8gcmV2ZXJ0IHRvIHRoZSBwcmV2aW91cyBiZWhhdmlvci4g Cj4gPiA+IAo+ID4gPiBJIG1lYW4gYmVmb3JlIHRoZSBwYXRjaCB0byBzZXQgYSBkZWZhdWx0IHB1 bGxkb3duIHZhbHVlICh0bwo+ID4gPiBkaXNhYmxlZCkKPiA+ID4gdGhlcmUgd2VyZSBubyBmb3Jj ZWQgdmFsdWUuCj4gPiAKPiA+IEFoLCBtYXliZSBJIG1pc3VuZGVyc3Rvb2Qgd2hhdCB0aGUgY29k ZSBvcmlnaW5hbGx5IGRpZC4gRGlkIHRoZQo+ID4gb3JpZ2luYWwKPiA+IGNvZGUgbGVhdmUgdGhl IGJpdCBob3dldmVyIHRoZSBib290bG9hZGVyIG9yIHJlc2V0IHZhbHVlIGhhZCBsZWZ0Cj4gPiBp dD8KPiA+IEluIHRoYXQgY2FzZSwgcHJvYmUgd291bGRuJ3QgYmUgcmVqZWN0ZWQgYW5kIHlvdSdk IG5vdCBoYXZlIHRoZQo+ID4gc29ydCBvZgo+ID4gaXNzdWUgdGhhdCBJIG1lbnRpb25lZCBhYm92 ZS4KPiA+IAo+ID4gPiA+ID4gVGhvdWdoIEkgZG9uJ3Qga25vdyBpZiB0aGVyZSBhcmUgcHJvcyB0 byBzZXR0aW5nIGEgZGVmYXVsdC4KPiA+ID4gPiAKPiA+ID4gPiBXaGF0IHlvdSBwcm9iYWJseSBo YXZlIHRvIHdlaWdoIHVwIGlzIHRoZSBjb25zIG9mIGVhY2ggc2lkZS4gSWYKPiA+ID4gPiB3aGF0 Cj4gPiA+ID4geW91Cj4gPiA+ID4gbG9zZSBpcyBIUzQwMCBtb2RlIHdpdGggd2hhdCdzIGluIHRo ZSBrZXJuZWwgcmlnaHQgbm93IGJ1dAo+ID4gPiA+IHN3aXRjaGluZwo+ID4gPiA+IHRvCj4gPiA+ ID4gd2hhdCdzIGJlZW4gcHJvcG9zZWQgd291bGQgZW50aXJlbHkgYnJlYWsgc29tZSBib2FyZHMs IEkga25vdwo+ID4gPiA+IHdoaWNoCj4gPiA+ID4gSSB0aGluayB0aGUgbGVzc2VyIG9mIHR3byBl dmlscyBpcy4KPiA+ID4gCj4gPiA+IE1vcmUgYm9hcmRzIChldmVuIGlmIG5vdCB0aGUgbW9zdCB3 aWRlIHNwcmVhZCBpdCBzZWVtcykgYXJlCj4gPiA+IGJyb2tlbiBieQo+ID4gPiB0aGUgY3VycmVu dCBiZWhhdmlvci4KPiA+ID4gCj4gPiA+IEkgYWdyZWUgdGhhdCBvbmx5IEhTNDAwIGlzIGJyb2tl biBieSBrZWVwaW5nIHRoZSBzdGF0dXMgcXVvLiBCdXQKPiA+ID4gYXMgZmFyCj4gPiA+IGFzIEkg dW5kZXJzdGFuZCBvbmx5IEhTNDAwIHdpbGwgYmUgYnJva2VuIGVpdGhlciB3YXkuCj4gPiA+IEJl IHRoYXQgYnkga2VlcGluZyB0aGUgY3VycmVudCBkaXNhYmxlIHB1bGxkb3duIHdoaWNoIGJyZWFr IHRoZQo+ID4gPiBib2FyZHMKPiA+ID4gYmFzZWQgb24gdGhlIHJvY2tjaGlwIGRlZmF1bHQgZGVz aWduIG9yIHRoZSBib2FyZHMgdGhhdCBhcmUgbm9uLQo+ID4gPiBzdGFuZGFyZCBvciBoYXZlIGEg YnJva2VuIGRlc2lnbi4KPiA+ID4gQm90aCBjYXNlIHRoaXMgbGVhZCB0byBkYXRhIGNvcnJ1cHRp b24gb24gYm9vdCB0byBlTU1DLgo+ID4gPiAKPiA+ID4gVGhlIG9ubHkgcHJvIG9mIGtlZXBpbmcg dGhlIGN1cnJlbnQgdmFsdWUgdGhlIGRlZmF1bHQgaXMgdGhhdAo+ID4gPiBtb3N0Cj4gPiA+IGJv YXJkIGJyb2tlbiBieSB0aGUgbmV3IGRlZmF1bHQgaW50cm9kdWNlZCBpbiAyMDIwICJtaWdodCIK PiA+ID4gYWxyZWFkeSBiZQo+ID4gPiBmaXhlZCAoYnV0IHRoYXQgaXMganVzdCBhIGd1ZXNzKS4K PiAKPiB3aGljaCBJIGd1ZXNzIGFyZSB0aGUgbGVhc3Qgc3RhbGUgYm9hcmRzIHRvby4KPiAKPiA+ ID4gPiBJdCdzIHByb2JhYmx5IHVwIHRvIHRoZSBwbGF0Zm9ybSBtYWludGFpbmVyIHRvIHdlaWdo IGluIGF0IHRoaXMKPiA+ID4gPiBwb2ludC4KPiA+ID4gCj4gPiA+IEkgYW0gbm90IGtub3dsZWRn ZWQgaW50byB0aGUgZGVsZWdhdGlvbiBzY29wZS4gWW91IG1lYW4gdGhhdCBmcm9tCj4gPiA+IG5v dwo+ID4gPiBvbiBpdCBpcyB1cCB0byB0aGUgcm9ja2NoaXAgbWFpbnRhaW5lcj8KPiA+ID4gSSBh bSBmaW5lIHdpdGggaXQgZWl0aGVyIHdheS4KPiA+IAo+ID4gWWVzLCBJIG1lYW50IHRoZSByb2Nr Y2hpcCBtYWludGFpbmVyLiBJJ20gb25seSBhIGxvd2x5IGJpbmRpbmdzCj4gPiBtYWludGFpbmVy LCB3aXRob3V0IGFueSBrbm93bGVkZ2Ugb2Ygcm9ja2NoaXAgc3BlY2ZpY3Mgb3IgdGhlIHR5cGUK PiA+IG9mCj4gPiBib2FyZHMgd2UncmUgdGFsa2luZyBhYm91dCBiZWluZyBicm9rZW4gaGVyZS4g U29tZW9uZSBoYXMgdG8gbWFrZSBhCj4gPiBqdWRnZW1lbnQgY2FsbCBhYm91dCB3aGljaCAibm8g cHJvcGVydHkiIGJlaGF2aW91ciBpcyB1c2VkIGdvaW5nCj4gPiBmb3J3YXJkCj4gPiBhbmQgSSBk b24ndCB3YW50IHRoYXQgdG8gYmUgbWUhCj4gCj4gSSdtIHNvbWVob3cgYWxsIGZvciBub3QgY2hh bmdpbmcgZGVmYXVsdHMgYWdhaW4uCj4gCj4gSSB0aGluayBpbiB0aGUgcGFzdCB0aGVyZSB3YXMg YSBzaW1pbGFyIGV4YW1wbGUgaW4gc29tZSBvdGhlciBrZXJuZWwKPiBwYXJ0LAo+IHdoZXJlIHNv bWUgY2hhbmdlIGJyb2tlIHRoZSBBQkksIGJ1dCBtZWFud2hpbGUgYW5vdGhlciBBQkkgZGVwZW5k ZWQKPiBvbiB0aGUgY2hhbmdlZCBiZWhhdmlvdXIsIHNvIGEgcmV2ZXJ0IHdhcyBub3QgcG9zc2li bGUuCj4gCj4gSSB0aGluayBpdCdzIHNvbWV3aGF0IHNpbWlsYXIgaGVyZS4gSWYgdGhlIGNoYW5n ZSBoYXMgYmVlbiBpbiB0aGUKPiBrZXJuZWwKPiBmb3IgMy00IHllYXJzIG5vdywgSSBkbyB0aGlu ayB0aGF0IHNoaXAgaGFzIHNhaWxlZCBzb21laG93Lgo+IAo+IEFzIHdhcyBzYWlkIGFib3ZlLCBi b2FyZCBpbnRyb2R1Y2VkIHNpbmNlIDIwMjAgbWlnaHQgYWxyZWFkeSBiZSBmaXhlZAo+IGFuZCBl c3NlbnRpYWxseSBmb3IgYm9hcmRzIHRoYXQgd2VyZW4ndCwgaXQgZG9lcyBsb29rIGxpa2UgdGhl c2UKPiBkaWRuJ3QgcnVuCj4gYSBtYWlubGluZSBrZXJuZWwgZm9yIGxpa2UgNCB5ZWFycyBub3cu CgoKSSBhZ3JlZSB0aGF0IGFsbCBib2FyZCBoYXZlIGJlZW4gZml4ZWQuIEJ1dCBub3QgYnkgYWRw YXRpbmcgdG8gdGhlIG5ldwpkZWZhdWx0IHNpbmNlIDIwMjAgYW5kIHJlbHlpbmcgb24gaXQgbm93 YWRheXMuCk1vc3QgaWYgbm90IGFsbCBoYXZlIGRpc2FibGVkIGhzNDAwZXMgc3VwcG9ydCAoYW5k IHRoZSBwYXRjaCB0byBkaXNhYmxlCmhzNDAwIGFyZSBvbmx5IHJlYWNoaW5nIHVwc3RyZWFtIHJl Y2VudGx5LCBpZSBvbmx5IGEgeWVhciBhZ28gZm9yIHRoZQpsYXRlc3Qgb25lcykuCgpUaGUgaHM0 MDBlcyBzdXBwb3J0IHdhcyBkaXNhYmxlZCBhcyBzb29uIGFzIHRoZSBuZXcgZGVmYXVsdCB3YXMK aW50cm9kdWNlZC4gQW5kIGluIGZhY3QgZWFybGllciBkdWUgdG8gYSBkb3VibGUgaW5pdCBpbiBy ZWd1bGF0b3IgY29yZSwKd2hlbiBwcm9iZSBkZWZlcnJlZCB3YXMgaW50cm9kdWNlZCwgdGhhdCBh bHNvIGJyb2tlIGVtbWMgb24gcmszMzk5IGEKZmV3IG1vbnRoIGJlZm9yZSB0aGlzIG5ldyBkZWZh dWx0IHdhcyBwdXNoZWQgdG8gc3RhYmxlIGJyYW5jaCBpbiAyMDIwLgpJZSBpdCBjb3VsZCBiZSB0 aGF0IHVudGlsIHdoZW4gdGhpcyBkb3VibGUgaW5pdCB3YXMgZml4ZWQgaW4gYXVndXN0CjIwMjIg YnkgCmh0dHBzOi8vZ2l0aHViLmNvbS90b3J2YWxkcy9saW51eC9jb21taXQvOGE4NjZkNTI3YWMw NDQxYzBlYjE0YTk5MWZhMTEzNThiNDc2YjExZCwKbm8gcmszMzk5IGJvYXJkIHdhcyBhYmxlIHRv IHRlc3QgaHM0MDBlcyBzdXBwb3J0IHdpdGggdGhlIG5ldyAyMDIwCmRlZmF1bHQuCgpUaGUgbWFp biB0aGluZyB0aGF0IG1hZGUgaXQgaW1wb3NzaWJsZSB0byBmaW5kIHRoaXMgbmV3IGRlZmF1bHQg d2FzIGJhZAppcyB0aGF0IGVtbWMgaHM0MDAgc3VwcG9ydCB3YXMgYWxyZWFkeSBicm9rZW4gd2hl biB0aGUgY29tbWl0IHJlYWNoZWQKdGhlIHN0YWJsZSBrZXJuZWwuCgpBbHNvIGEgbG90IG9mIHVz ZXJzIGFuZCBkZXZzIHVzZSBTRCBpbnN0ZWFkIG9mIEVNTUMuCgpNYXliZSBiZWZvcmUgZGlzY3Vz c2luZyBpZiB0aGUgbmV3IGRlZmF1bHQgc2hvdWxkIGJlIGtlcHQgZm9yCnN0YWJpbGl0eSwgd2Ug c2hvdWxkIGNoZWNrIGlmIGFueSB1cHN0cmVhbSByazMzOTkgYm9hcmQgdGhhdCBzdGlsbCBoYXMK aHM0MDBlcyBzdXBwb3J0IHdpdGhvdXQgdGhlICJyb2NrY2hpcCxlbmFibGUtc3Ryb2JlLXB1bGxk b3duIiAoaWUgb3V0Cm9mOgphcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzM5OS1uYW5v cGMtdDQuZHRzIHZpYSBhcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzM5OS1uYW5vcGk0 LmR0c2kKYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzOTktbmFub3BpLW00LmR0cyB2 aWEgYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzOTktbmFub3BpNC5kdHNpCmFyY2gv YXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzk5LW5hbm9waS1uZW80LmR0cyB2aWEgYXJjaC9h cm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzOTktbmFub3BpNC5kdHNpCmFyY2gvYXJtNjQvYm9v dC9kdHMvcm9ja2NoaXAvcmszMzk5LW5hbm9waS1yNHMuZHRzIHZpYSBhcmNoL2FybTY0L2Jvb3Qv ZHRzL3JvY2tjaGlwL3JrMzM5OS1uYW5vcGk0LmR0c2kKKSBoYXMgd29ya2luZyBlbW1jIGhzNDAw LgpDb3VsZCBiZSB0aGVyZSBhcmUgbm9uZSB0aGF0IGhhdmUgYSB3b3JraW5nIGhzNDAwIGVtbWMu CgpDb3VsZCB3ZSBhc2sgZm9yIHRoZXNlIGJvYXJkcyB0byBiZSBjaGVja2VkIGZvciB3b3JraW5n IGVtbWMgd2l0aCB0aGUKbmV3IDIwMjAgZGVmYXVsdD8gKGFzIHdlIGNhbm5vdCBhc3N1bWUgdGhh dCBhcyBldmVuIHdlbGwgbWFpbnRhaW5lZApib2FyZCBvbmx5IGZvdW5kIHVwc3RyZWFtIHRoZXkg d2VyZSBicm9rZW4gaW4gbWlkIDIwMjMsIGllIGNvbW1pdAoyYmQxZDJkZDgwOGM2MDUzMjI4M2U5 Y2YwNTExMGJmMWJmMmY5MDc5IGFuZApjZWU1NzI3NTZhYTJjYjQ2ZTk1OWU5Nzk3YWQ0YjczMGI3 OGEwNTBiIGZvciBST0NLIDRDKyBhbmQgUk9DSyBQaSA0KT/CoApUaGVuIHdlIHdpbGwgYmUgY29u ZmlkZW50IHRoZSBuZXcgMjAyMCBkZWZhdWx0IHJlZ3Jlc3Npb24gaXMgcmVxdWlyZWQKYnkgYW55 dGhpbmcuCgpJZSwgd2UgYXNzdW1lIHRoZXkgd2VyZSB3b3JraW5nIGFzIG5vYm9keSBjb21wbGFp bnMgYXMgbW9zdCBjb21wbGFpbnMKbmV2ZXIgcmVhY2ggdXBzdHJlYW0gTUwuLi7CoGJ1dCB0aGUg YXJtYmlhbiBmb3J1bSB3ZXJlIGZsb29lZCB3aXRoCmNvbXBsYWludHMgaW4gdGhlc2UgZGF5cy4g SSB3YXMgb25lIG9mIHRoZSBjb21wbGFpbmVyIHVudGlsIEkgZGVjaWRlZAp0byBhYmFuZG9uIG90 aGVyIHByb2plY3RzIGJlY2F1c2UgdGhpcyBpc3N1ZSB3YXMgdG9vIGJpZyB0byBtZSAod2VsIEkK ZW5kZWQgdXAgYW5kIGFtIHN0aWxsIG9uIFNEIHNpbmNlIGl0IHRvb2sgdG9vIGxvbmcgYW5kIEkg bmVlZGVkIHRoZQpib2FyZCwgYXMgZGlkIGFsbCBvdGhlciB1c2Vycy4gQnV0IEkgd2FudCB0aGlz IHRvIGNoYW5nZSkuCk9ubHkgZG93bnN0cmVhbSBkaXNhYmxlZCBoczQwMGVzIHRvIGdldCB0aGUg Ym9hcmQgd29ya2luZy4gQWxsIHJrMzM5OQpib2FyZHMgaW4gQXJtYmlhbiBhcmUgcGF0Y2hlZCB0 byByZW1vdmUgaHM0MDAgc3VwcG9ydCBzaW5jZSBhdCBsZWFzdAp0d28geWVhcnMgYXMgZmFyIGFz IEkga25vdy4KClRoZXNlIGN1cnJlbnQgYm9hcmRzIHdpdGggaHM0MDBlcyBlbmFibGVkIHVwc3Ry ZWFtIGFyZToKYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzOTktZXZiLmR0cwphcmNo L2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzM5OS1maXJlZmx5LmR0cwphcmNoL2FybTY0L2Jv b3QvZHRzL3JvY2tjaGlwL3JrMzM5OS1ncnUtYm9iLmR0cyB2aWEgYXJjaC9hcm02NC9ib290L2R0 cy9yb2NrY2hpcC9yazMzOTktZ3J1LmR0c2kKYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9y azMzOTktZ3J1LWtldmluLmR0cyB2aWEgYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMz OTktZ3J1LmR0c2kKYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzOTktZ3J1LXNjYXJs ZXQtZHVtby5kdHMgdmlhIGFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzk5LWdydS5k dHNpCmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzk5LWdydS1zY2FybGV0LWlueC5k dHMgdmlhIGFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzk5LWdydS5kdHNpCmFyY2gv YXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzk5LWdydS1zY2FybGV0LWtkLmR0cyB2aWEgYXJj aC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzOTktZ3J1LmR0c2kKYXJjaC9hcm02NC9ib290 L2R0cy9yb2NrY2hpcC9yazMzOTktaHVnc3VuLXg5OS5kdHMKYXJjaC9hcm02NC9ib290L2R0cy9y b2NrY2hpcC9yazMzOTkta2hhZGFzLWVkZ2UtY2FwdGFpbi5kdHMgdmlhIGFyY2gvYXJtNjQvYm9v dC9kdHMvcm9ja2NoaXAvcmszMzk5LWtoYWRhcy1lZGdlLmR0c2kKYXJjaC9hcm02NC9ib290L2R0 cy9yb2NrY2hpcC9yazMzOTkta2hhZGFzLWVkZ2Utdi5kdHMgdmlhIGFyY2gvYXJtNjQvYm9vdC9k dHMvcm9ja2NoaXAvcmszMzk5LWtoYWRhcy1lZGdlLmR0c2kKYXJjaC9hcm02NC9ib290L2R0cy9y b2NrY2hpcC9yazMzOTkta2hhZGFzLWVkZ2UuZHRzIHZpYSBhcmNoL2FybTY0L2Jvb3QvZHRzL3Jv Y2tjaGlwL3JrMzM5OS1raGFkYXMtZWRnZS5kdHNpCmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2No aXAvcmszMzk5LWxlZXotcDcxMC5kdHMKYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMz OTktbmFub3BjLXQ0LmR0cwphcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzM5OS1vcmFu Z2VwaS5kdHMKYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzOTktcHVtYS1oYWlrb3Uu ZHRzIHZpYSBhcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzM5OS1wdW1hLmR0c2kKYXJj aC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzOTktZmljdXMuZHRzIHZpYSBhcmNoL2FybTY0 L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzM5OS1yb2NrOTYwLmR0c2kKYXJjaC9hcm02NC9ib290L2R0 cy9yb2NrY2hpcC9yazMzOTktcm9jazk2MC5kdHMgdmlhIGFyY2gvYXJtNjQvYm9vdC9kdHMvcm9j a2NoaXAvcmszMzk5LXJvY2s5NjAuZHRzaQphcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3Jr MzM5OS1zYXBwaGlyZS1leGNhdmF0b3IuZHRzIHZpYSBhcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tj aGlwL3JrMzM5OS1zYXBwaGlyZS5kdHNpCmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmsz Mzk5LXNhcHBoaXJlLmR0cyB2aWEgYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzOTkt c2FwcGhpcmUuZHRzaQphcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzM5OXByby1yb2Nr LXBpLW4xMC5kdHMgdmlhIGFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzk5cHJvLXZt YXJjLXNvbS5kdHNpCgpUaGVzZSBib2FyZCB3ZXJlIGJyb2tlbiBieSB0aGUgbmV3IGRlZmF1bHQg dGhvdWdoIHRoZXkgb25seSBkaXNhYmxlZCBocyBlbmhhbmNlZCBzdHJvYmUgYnV0IGxlZnQgYmFz aWMgaHM0MDAgc3VwcG9ydDoKYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzOTkta2hh ZGFzLWVkZ2UtY2FwdGFpbi5kdHMgdmlhIGFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmsz Mzk5LWtoYWRhcy1lZGdlLmR0c2kKYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzOTkt a2hhZGFzLWVkZ2Utdi5kdHMgdmlhIGFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzk5 LWtoYWRhcy1lZGdlLmR0c2kKYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzOTkta2hh ZGFzLWVkZ2UuZHRzIHZpYSBhcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzM5OS1raGFk YXMtZWRnZS5kdHNpCmllIGNvbW1pdCA2ZGQwMDUzNjgzODA0NDI3NTI5ZWYzNTIzZjc4NzJmNDcz NDQwYTE5IGluIG5vdmVtYmVyIG9mIDIwMjEuCgoKTm90ZTogSSBoYXZlIG5vdCBjaGVja2VkIHRo YXQgbXkgYm9hcmQgaXMgd29ya2luZyB3aXRoIG1tYy1oczQwMC0xXzh2CmVuYWJsZWQgYW5kIG1t Yy1oczQwMC1lbmhhbmNlZC1zdHJvYmUgZGlzYWJsZWQuIENvdWxkIGJlIHRoYXQgdGhlIG5ldwpk ZWZhdWx0IG9ubHkgYnJlYWsgdGhlIGVuaGFuY2VkIHN0cm9iZSBzdXBwb3J0LCBub3QgaHM0MDAg cGVyIHNlLiBCYWNrCnRoZW4gQXJtYmlhbiBjb250cmlidXRvcnMgZGlzYWJsZWQgaHM0MDAgc3Vw cG9ydC4KCgpGaW5hbGx5LCBpdCBjb3VsZCBiZSB0aGF0IG9uZSBSSzMzOTkgYm9hcmQgY3VycmVu dGx5IHVwc3RyZWFtIGRlcGVuZHMKb24gdGhpcyBuZXcgZGVmYXVsdCBidXQgSSBndWVzcyBub25l LgoKCiEhISEhClRoZSBtYWluIGlzc3VlIGFuZCB3aGF0IGJvdGhlciBtZSBpcyB3aGV0aGVyIGFu eSBib2FyZHMgZGVwZW5kIG9uIHRoZQpwcmV2aW91cyBkZWZhdWx0LiBUaGlzIGlzIHRoZSByZWFs IGlzc3VlLgpUaGF0IGlzIHByZXZpb3VzbHkgdGhlIGtlcm5lbCB2YWx1ZSB3YXMgbGVmdCB0byB0 aGUgb25lIHNldCBieSB0aGUKYm9vdGxvYWRlciBvciB0aGUgaGFyZHdhcmUgcmVzZXQuClRoZSBS b2NrY2hpcCBrZXJuZWwgZGVmYXVsdCB0byBlbmFibGUgc3Ryb2JlIHdhcyB0b2xkIGJ5IERyYWdh biBTaW1pYyAKdG8gYnJlYWsgUm9ja1BybzY0IGFuZCB0aGUgUGluZWJvb2sgUHJvIGR1ZSB0byB0 aGVtIGJlaGluZyBtaXN3aXJlZC7CoApCdXQgaXQgd2FzIG5vdCB0aGUgdXBzdHJlYW0gYmVoYXZp b3IgYmVmb3JlIHRoZSAyMDIwIG5ldyBkaXNhYmxlIGJ5CmRlZmF1bHQgYmVoYXZpb3Igd2FzIGlu dHJvZHVjZWQuIFRoZSBwcmV2aW91cyBiZWhhdmlvciB0byBsZWF2ZSB0ZWgKcHVsbGRvd24gYXMg aXMuCiEhISEKClRoZSBkZXYgZm9yIGNvbW1pdCA4YjVjMmI0NWI4ZjBhMTFjOTA3MmRhMGY3YmFm OWVlOTg2ZDMxNTFlIHRoYXQKaW50cm9kdWNlZCB0aGUgbmV3IGRpc2FibGUtc3Ryb2JlIGJ5IGRl ZmF1bHQgdGVsbHMgaGUgdGVzdGVkIG9uIGhpcwoicmszMzk5IGN1c3RvbWl6ZWQgYm9hcmQiLgoK CgoKSSB3YW50ZWQgdG8gc29ydCBvdXQgaWYgaXQgbWFkZSBzZW5zZSB0byBhZGQgInJvY2tjaGlw LGVuYWJsZS1zdHJvYmUtCnB1bGxkb3duIiB0byBtb3N0IHJrMzM5IGJvYXJkcy4gQnV0IEkgc2hv dWxkIGhhdmUgZmlyc3QgYWRkZWQgdGhpcwpwcm9wZXJ0eSB0aGVuIGRpc2N1c3NlZCBpZiB3ZSBz aG91bGQgcmV2ZXJ0IHRoZSBuZXcgMjAyMCBkZWZhdWx0LgpXZSBjb3VsZCBqdXN0IHJlbW92ZSBh bGwgdGhlICJyb2NrY2hpcCxlbmFibGUtc3Ryb2JlLXB1bGxkb3duIiBsYXRlciBvbgppZiB3ZSBy ZXZlcnQgZWl0aGVyIHRvIHRoZSBwcmV2aW91cyBiZWhhdmlvciBvZiBub3Qgc2V0dGluZyBhIGRl ZmF1bHQKb3IgZXZlbiB0byB0aGUgUm9ja2NoaXAgdHJlZSBkZWZhdWx0IHRvIHNldCBpdCBlbmFi bGUtc3Ryb2JlIGJ5CmRlZmF1bHQuCkkgc2hvdWxkIG5vdCBoYXZlIGtlcHQgdGhlIGJvYXJkIGJy b2tlbiBpbiB0aGUgbWVhbiB0aW1lLiBJdCBpcyBub3QgYXMKaWYgSSB3YXMgaW50cm9kdWNpbmcg YSBuZXcgQVBJIHRoYXQgY291bGQgYmUgd3JvbmcuIFRoZSBBUEkgaXMgYWxyZWFkeQp0aGVyZSBl dmVuIGlmIHdyb25nLgoKSSB3aWxsIHRyeSB0byBjYXJyeSBmb3J3YXJkIHRoZSBkaXNjdXNzaW9u LiBCdXQgdW5icmVha2luZyB0aGUgYm9hcmQgaXMKaGlnaGVyIHByaW9yaXR5LgoKQ291bGQgeW91 IHRlc3QgdGhlIGVuYWJsZS1zdHJvYmUgcHJvcGVydHkgb24gYWxsIHRoZSBkdHMgdGhhdCAgZGlz YWJsZWQKaHM0MDBlcyBkdWUgdG8gdGhpcyBuZXcgZGVmYXVsdCAoSSBsYWNrIHRoZSBoYXJkd2Fy ZSB0byB0ZXN0IHRoZQpwYXRjaGVzKS4KQXQgbGVhc3QgYXJjaC9hcm02NC9ib290L2R0cy9yb2Nr Y2hpcC9yazMzOTkta2hhZGFzLWVkZ2UuZHRzaQphcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlw L3JrMzM5OS1yb2NrLTRjLXBsdXMuZHRzCmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmsz Mzk5LXJvY2stcGktNC5kdHNpCmFuZCBwaW5nIHRoZSBib2FyZCB0ZXN0ZXIgZm9yIG90aGVyIGJv YXJkcyB0byB0ZXN0IGlmIHRoZXkgcmVxdWlyZQoicm9ja2NoaXAsZW5hYmxlLXN0cm9iZS1wdWxs ZG93biIgZm9yIEVNTUMgSFM0MDAgd3JpdGUgc3VwcG9ydCAocmVhZCBpcwpmaW5lIGV2ZW4gd2l0 aCB0aGUgbmV3IGRlZmF1bHQpLgoKCkFib3V0OgpPbiBUdWUsIDIwMjQtMDItMjcgYXQgMTA6MTEg KzAwMDAsIEZvbGtlciBTY2h3ZXNpbmdlciB3cm90ZToKPiB3aXRoIHRoZSBmb2xsb3dpbmcgYXBw bGllZCwgdGhlIEVNTUMgcmVsYXRlZCBlcnJvcnMgYXJlIGdvbmUuIGRtZXNnCj4gb25seQo+IHNo b3dzICJQdXJnaW5nIC4uLiBieXRlcyIgZHVyaW5nIG15IHRlc3RzOgo+IAo+IGRpZmYgLS1naXQg YS9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzM5OS1yb2NrLXBpLTQuZHRzaQo+IGIv YXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzOTktcm9jay1waS00LmR0c2kKPiBpbmRl eCBmMjI3OWFhNmNhOWUuLmFlMGZiODdlMWE4YiAxMDA2NDQKPiAtLS0gYS9hcmNoL2FybTY0L2Jv b3QvZHRzL3JvY2tjaGlwL3JrMzM5OS1yb2NrLXBpLTQuZHRzaQo+ICsrKyBiL2FyY2gvYXJtNjQv Ym9vdC9kdHMvcm9ja2NoaXAvcmszMzk5LXJvY2stcGktNC5kdHNpCj4gQEAgLTY0Nyw4ICs2NDcs MTAgQEAgJnNhcmFkYyB7Cj4gICZzZGhjaSB7Cj4gICAgICAgICBtYXgtZnJlcXVlbmN5ID0gPDE1 MDAwMDAwMD47Cj4gICAgICAgICBidXMtd2lkdGggPSA8OD47Cj4gLSAgICAgICBtbWMtaHMyMDAt MV84djsKPiArICAgICAgIG1tYy1oczQwMC0xXzh2Owo+ICsgICAgICAgbW1jLWhzNDAwLWVuaGFu Y2VkLXN0cm9iZTsKPiAgICAgICAgIG5vbi1yZW1vdmFibGU7Cj4gKyAgICAgICByb2NrY2hpcCxl bmFibGUtc3Ryb2JlLXB1bGxkb3duOwo+ICAgICAgICAgc3RhdHVzID0gIm9rYXkiOwo+ICB9Owo+ IAo+IEZvciB0ZXN0aW5nIEkgcmFuIGRkIHRocmVlIHRpbWVzIGluIGEgcm93Ogo+IAo+IGRkIGlm PS9kZXYvemVybyBvZj0uL3plcm8uYmluIGJzPTFNIGNvdW50PTUwMDAKPiAKPiBJIHRlc3RlZCB0 aGlzIG9uIGJvdGggYSBSb2NrIDRTRSBib2FyZCBhbmQgYSBSb2NrIFBpIDRCKyBib2FyZCB3aXRo Cj4gdGhlCj4gc2FtZSByZXN1bHRzLgoKRm9sa2VyLCBhcmUgeW91IGNvbmZpZGVudCAiUm9jayA0 U0UgYm9hcmQgYW5kIFJvY2sgUGkgNEIrIiB3ZXJlIGZpeGVkCndpdGggYWJvdmUgcGF0Y2g/Ckll IHRoZSAicm9ja2NoaXAsZW5hYmxlLXN0cm9iZS1wdWxsZG93bjsiIHNob3VsZCBiZSB1bmRlciBh bgoicm9ja2NoaXAscmszMzk5LWVtbWMtcGh5IiBjb21wYWlibGUgbm9kZSwgdGhhdCBpcyAmZW1t Y19waHkgaW4KYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzOTktcm9jay1waS00LmR0 c2ksIG5vdCBzZGhjaS4KCgoKClNpbmNlIHRoZSBuZXcgZGVmYXVsdCBiYWh2aW9yIHdhcyBpbnRy b2R1Y2VkIHRoZSBvbmx5IG5ldyBib2FyZCBkdHMKd2l0aCBoczQwMGVzIHN1cHBvcnQgaW50cm9k dWNlZCB3ZXJlOgotIGFybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzM5OS1yb2NrLTRjLXBsdXMu ZHRzIGluCjI0NjQ1MDM0NGRhZDA4N2ExMjFiZWZiZWQxYWJhNzc2ZGJhM2QzNzcgKGJ1dCBhcyBz aG93biBhYm92ZSB0aGUKc3VwcG9ydCB3YXMgZGlzYWJsZWQgaW4gMjAyMyBkdWUgdG8gaHM0MDBl cyBub3Qgd29ya2luZyB3aXRoIHRoZSBuZXcKZGVmYXVsdC4gSSBiZWxpZXZlIHRoZSBkdHMgd2Fz IGRlc2lnbmVkIGFnYWluc3QgYSBrZXJuZWwgYmVmb3JlIHRoZSBuZXcKZGVmYXVsdCBkaXNhYmxl LXN0cm9iZSkuCi0gYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzOTktcm9jay1waS00 LmR0c2kgaW4KYjVlZGIwNDY3MzcwMDEyNWJmZDFkMTNlNmMxNDc0N2IxZWNiYTUyMgp3aGljaCB0 aGVzZSBib2FyZCBkdHMgaW5jbHVkZXM6CmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmsz Mzk5LXJvY2stNHNlLmR0cwphcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzM5OS1yb2Nr LXBpLTRhLXBsdXMuZHRzCmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzk5LXJvY2st cGktNGEuZHRzCmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzk5LXJvY2stcGktNGIt cGx1cy5kdHMKYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzOTktcm9jay1waS00Yi5k dHMKYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzOTktcm9jay1waS00Yy5kdHMKYnV0 IHRoZSBoczQwMGVzIHN1cHBvcnQgd2FzIGRpc2FibGVkCmluY2VlNTcyNzU2YWEyY2I0NmU5NTll OTc5N2FkNGI3MzBiNzhhMDUwYiBkdWUgdG8gbm90IHdvcmtpbmcgd2l0aCB0aGUKbmV3IGRpc2Fi bGUtc3Ryb2JlCgpBcyBmYXIgYXMgSSBrbm93IG5vIGJvYXJkIHdpdGggd29ya2luZyBoczQwMCB3 YXMgaW50cm9kdWNlZCBhZnRlciB0aGUKbmV3IGJlaGF2aW9yLiBXZSBjYW4gYXNzdW1lIHRoYXQg bm90IHNldHRpbmcgYSBkZWZhdWx0IGFzIGJlZm9yZSB0aGlzCm5ldyBiZWhhdmlvciB3aWxsIG5v dCBicmVhayBhbnkgYm9hcmQgYW55IG1vcmUgdGhhbiBpdCB3YXMgYmVmb3JlIHRoaXMKY29tbWl0 IHdhcyBpbnRyb2R1Y2VkIChhbmQgdGhpcyBjb21taXQgaW50cm9kdWNpbmcgdGhlIG5ldyBiZWhh dmlvcgpkb2VzIG5vdCBhY2tub3dsZWRnZSBmaXhpbmcgYW55IGJvYXJkcykuCgoKRWl0aGVyIHdh eSwgSSBiZWxpZXZlIHdlIHNob3VsZCBhZGQgInJvY2tjaGlwLGVuYWJsZS1zdHJvYmUtcHVsbGRv d24iCnRvIGFueSBib2FyZCBkdHMgd2l0aCBoczQwMCBicm9rZW4gYXNhcC4KCgo+IFNvIGlmIGl0 IGNvbWVzIGRvd24gdG8gZGVjaWRpbmcgd2hvIHRvIGtlZXAgd29ya2luZywgSSdtIG1vcmUgaW4K PiBmYXZvciBvZgo+IHRob3NlIHRoYXQgZGlkIHJ1biBvbiBtYWlubGluZSBpbiB0aGUgeWVhcnMg c2luY2UuCj4gCj4gCj4gVGhvdWdoIG5vdCBzdXJlIGlmIEkgdW5kZXJzdG9vZCBhbGwgdGhlIGRl dGFpbHMgaGVyZSB5ZXQuCj4gCj4gCj4gSGVpa28KPiAKPiA+IAo+ID4gPiBJIGp1c3Qgd2FudGVk IHRvIHBvaW50IG91dCB0aGF0IG1heWJlIHdlIGRvbid0IGhhdmUgdG8gc2V0IGEKPiA+ID4gcHVs bGRvd24KPiA+ID4gdmFsdWUgYWZ0ZXIgYWxsLiBBbmQgdGhhdCB0aGVuIGFsbCBib2FyZHMgd2ls bCBiZSBmaW5lIGFzIGJlZm9yZQo+ID4gPiBzZXR0aW5nIHRoZSBwdWxsZG93biBleHBsaWNpdGx5 IHdhcyBpbnRyb2R1Y2VkLgo+ID4gCj4gPiBCeSAiYWxsIGJvYXJkcyB3aWxsIGJlIGZpbmUiIHlv dSBtZWFuICJhbGwgYm9hcmRzIHRoYXQgZXhwZWN0ZWQgdGhlCj4gPiBrZXJuZWwgZGlkbid0IHRv dWNoIHRoaXMgYml0IHdpbGwgYmUgZmluZSIuIFRoZSBib2FyZHMgdGhhdCBuZWVkCj4gPiB0aGUK PiA+IGtlcm5lbCB0byBzZXQgdGhpcyBiaXQgYmVjYXVzZSBpdCB7Y29tZXMgb3V0IG9mIHJlc2V0 LGlzIHNldCBieQo+ID4gZmlybXdhcmV9Cj4gPiBpbmNvcnJlY3RseSBhcmUgZ29pbmcgdG8gbmVl ZCBhIHByb3BlcnR5IGFkZGVkIGlmIHdlIHJldmVydCB0aGUKPiA+IGRlZmF1bHQKPiA+IGJlaGF2 aW91ciB0byBub3QgdG91Y2hpbmcgdGhlIGJpdC4KPiA+IAo+ID4gPiBJbiBmYWN0IEkgYW0gbW9y ZSBlYWdlciB0byBnZXQgdGhpcyBmaXhlZCBiZSBpdCBieSBhZGRpbmcgYQo+ID4gPiBlbmFibGUt Cj4gPiA+IHB1bGxkb3duIHByb3BlcnR5IHRvIHRoZSBib2FyZCBkZWZpbml0aW9ucywgdGhhbiB0 byBjaGFuZ2UgdGhlCj4gPiA+IGN1cnJlbnQKPiA+ID4gYmVoYXZpb3IuCj4gPiA+IEp1c3Qgd2Fu dGVkIHRvIHNvcnQgb3V0IGlmIHRoYXQgd2FzIG5vdCB0aGUgd3Jvbmcgd2F5IHRvIGZpeCB0aGlz Cj4gPiA+IGlzc3VlLiAoaWUgaWYgYWRkaW5nIGEgc2V0dGluZyBvbiBtb3N0IGJvYXJkcyB3YXMg d3JvbmcpLgo+ID4gCj4gPiA+IER1cmluZyBtb3JlIHRoYW4gMiB5ZWFycywgSSB0cmllZCB2YXJp b3VzIHBhdGNoZXMgYW5kIGRpc2N1c3NlZAo+ID4gPiBvbgo+ID4gPiBmb3J1bXMgYWJvdXQgdGhl IEhTNDAwIGJyZWFrYWdlLiBJIGhhZCBiaXNlY3RlZCB0aGUgcmVndWxhdG9yCj4gPiA+IGluaXQK PiA+ID4gaXNzdWUgaW4gdGhlIDUuMTAgYnJhbmNoLiBTYWRseSBpdCB0b29rIHNvIG11Y2ggdGlt ZSBmb3IgdGhpcwo+ID4gPiBpc3N1ZSB0bwo+ID4gPiBiZSB1bmRlcnN0b29kIHRoYXQgd2hlbiB0 aGUgZm9yY2UgcHVsbGRvd24gdG8gZGlzYWJsZSBjb21taXQgd2FzCj4gPiA+IGludHJvZHVjZWQg ZG93bnN0cmVhbSBiZWZvcmUgdGhlIGZpcnN0IGlzc3VlIGdvIGZpeGVkLgo+ID4gPiBUaGlzIG9u bHkgbWFkZSB0aGUgbWF0dGVyIHdvcnNlIGJlY2F1c2Ugd2hlbiBvbmUgZml4ZWQgdGhlIGRvdWJs ZQo+ID4gPiByZWd1bGF0b3IgaW5pdCBpc3N1ZSBIUzQwMCB3YXMgc3RpbGwgYnJva2VuLCB0aGlz IHRpbWUgYmVjYXVzZQo+ID4gPiB0aGUKPiA+ID4gcHVsbGRvd24gd2FzIGZvcmNlZCB0byBkaXNh YmxlLiBCdXQgbm9ib2R5IG5vdGljZWQgdGhpcyBjb21taXQKPiA+ID4gdGhhdAo+ID4gPiBmb3Jj ZWQgYSBkZWZhdWx0IHB1bGxkb3duIHN0YXRlICh0aGF0IHdhcyBvbGRlciB0aGFuIHRoZQo+ID4g PiByZWd1bGF0b3IKPiA+ID4gY29tbWl0IGZyb20gNS4xMyBiYWNrcG9ydGVkIHRvIHRoZSA1LjEw IHN0YWJsZSBicmFuY2ggY29tbWl0LCBidXQKPiA+ID4gdGhhdAo+ID4gPiByZWFjaGVkIGRvd25z dHJlYW0gbGF0ZXIgZHVlIHRvIG5vdCBoYXZpbmcgYmVlbiBiYWNrcG9ydGVkIHRvCj4gPiA+IDUu MTAgZnJvbQo+ID4gPiA1LjExKS4KPiA+ID4gT3RoZXJ3aXNlIHdlIHdvdWxkIGhhdmUgZW1haWxl ZCBpbW1lZGl0YWx5Lgo+ID4gPiBCaXNlY3Rpbmcgd2FzIG9ubHkgYWJsZSB0byBjYXRjaCB0aGUg Zmlyc3QgYnJlYWthZ2UgKGFzIGl0IHdhcwo+ID4gPiBvbmx5Cj4gPiA+IGZpeGVkIGFmdGVyIHRo ZSBzZWNvbmQgYnJlYWthZ2Ugd2FzIGludHJvZHVjZWQpLgo+ID4gPiAKPiA+ID4gTWF5YmUgdGhl IHByb2JsZW0gaXMgdGhhdCBtZSBhbmQgb3RoZXJzIGRpZCBub3QgY29tcGxhaW5lZCB0byB0aGUK PiA+ID4ga2VybmVsIHVwc3RyZWFtIE1MIGJlY2F1c2Ugd2Ugd2VyZSB1c2luZyBoZWF2aWx5IHBh dGNoZWQKPiA+ID4gZG93bnN0cmVhbQo+ID4gPiBrZXJuZWxzIChsaWtlIG1vc3QgaWYgbm90IGFs bCBkb3duc3RyZWFtIEFSTSBrZXJuZWxzKS4gU28gc2FkbHksCj4gPiA+IHRoZQo+ID4gPiBmb3J1 bXMgZnJvbSBiYWNrIHRoZW4gYXJlIGZpbGxlZCB3aXRoIGNvbXBsYWludHMgYnV0IG5vdGhpbmcK PiA+ID4gc2VlbWVkIHRvCj4gPiA+IGhhdmUgcmVhY2hlZCB0aGUgTGludXggTUwuCj4gPiAKPiA+ IEF5ZSwgYW5kIGFsbCBJIGNhbiByZWFsbHkgc2F5IHRoZXJlIGlzIHRvIGJ1eSBib2FyZHMgZnJv bSBhIHZlbmRvcgo+ID4gdGhhdAo+ID4gZG9lc24ndCB1c2Ugc29tZSBob3JyaWJseSBoYWNrZWQg ZG93bnN0cmVhbSBrZXJuZWwsIHdoaWNoIEkga25vdyBpcwo+ID4gY2xlYXJseSBhbiB1bnNhdGlz ZmFjdG9yeSBzdWdnZXN0aW9uLiBUaGF0IHNhaWQsIHdlIHByb2JhYmx5IHNob3VsZAo+ID4gaGF2 ZQo+ID4gY2F1Z2h0IHRoYXQgdGhlIG5ldyBkZWZhdWx0IGJlaGF2aW91ciB3aGVuIHRoZSBjaGFu Z2VzIHdlcmUgbWFkZQo+ID4gd2FzIG5vdAo+ID4gdGhlIGRlZmF1bHQgYmVmb3JlLiBUaGVyZSB3 YXMgb25seSBvbmUgRFQgbWFpbnRhaW5lciB0aGVuIHRob3VnaCwKPiA+IGFuZAo+ID4gdGhpbmdz IGp1c3Qgc2xpcCBieSA6Lwo+ID4gCgoKVGhlIHNhZCB0aGluZyBpcyB0aGUgdmVuZG9yIGluZGVl ZCB3b3JrZWQgdG8gdXBzdHJlYW0gdGhlIGNvZGUgKHRob3VnaAppdCBoYXMgc2luY2UgY2xvc2Vk IGRvb3JzKS4KQnV0IGFzIHRvbGQgcHJldmlvdXNseSwgdGhlIGVtbWMgaHM0MDAgc3VwcG9ydCB3 YXMgYWxyZWFkeSBicm9rZW4gYnkKdGhlIHRpbWUgdGhlIG5ldyBkZWZhdWx0IGRpc2FibGUtc3Ry b2JlIHB1bGxkb3duIGJ5IGRlZmF1bHQgcmVhY2hlZApzdGFibGUuIFRoaXMgZHVlIHRvIGFub3Ro ZXIgdHJpY2t5IHRvIGRlYnVnIHVucmVsYXRlZCBkb3VibGUgaW5pdCBpbgpyZWd1bGF0b3IgY29y ZSBpbnRyb2R1Y2VkIGEgZmV3IG1vbnRocyBiZWZvcmUgdGhlIGNvbW1pdCB0byBkaXNhYmxlLQpz dHJvYmUgd2FzIGludHJvZHVjZWQuIE5vIG9uZSBjb3VsZCBoYXZlIGNhdWdodCB0aGF0IHRoZSBu ZXcgYmVoYXZpb3IKd2FzIGJyb2tlbiBvbiBtb3N0IHJrMzM5OSBib2FyZCBieSB0ZXN0aW5nIC4u LiBiZWNhdXNlIGl0IHdhcyBub3QKcG9zc2libGUgdG8gdGVzdCBoczQwMCBlbW1jIGJlZm9yZSB0 aGUgZG91YmxlIGluaXQgaW4gcmVndWxhdG9yIGNvcmUKd2FzIGZpeGVkIGluIGF1Z3VzdCAyMDIy LgpJIGhhZCBiaXNlY3RlZCB0aGUgYnJlYWthZ2UgdG8gdGhpcyByZWd1bGF0b3IgY29yZSBkZWZl cnJlZCBwcm9iZQooY29tbWl0ICIwNjY1M2ViYzBhZDJlMGI3ZDc5OWNkNzFhNWMyOTMzZWQyZmI3 YTY2IiAgInJlZ3VsYXRvcjogY29yZToKcmVzb2x2ZSBzdXBwbHkgZm9yIGJvb3Qtb24vYWx3YXlz LW9uIHJlZ3VsYXRvcnMiKSB3aGVuIGl0IGJyb2tlIGluCjUuMTAuNjAuIEJ1dCB0aGUgbmV3IGRl ZmF1bHQgYmVoYXZpb3Igd2FzIG5vIGJhY2twb3J0ZWQgdG8gdGhlIDUuMTAKYnJhbmNoIHNvIGl0 IGNvbmZ1c2VkIG1lIHRoYXQgdGhlIHJldmVydCB0aGF0IGdvdCBiYWNrIGhzNDAwZXMgb24KaGVs aW9zNjQgaW4gdGhlIDUuMTAgYnJhbmNoIHdoZW4gZmluYWxseSBmaXhlZCBpbiB0aGUgNS4xNiBi cmFuY2ggKHRoZQpkb3VibGUgaW5pdCBmaXh1cCkgdGhlbiBlbW1jIHdhcyBzdGlsbCBicm9rZW4u Ck9ubHkgd2hlbiBhcmd1aW5nIHdpdGggYW4gQXJtYmlhbiB1c2VyIHRoYXQgYWxsIHJrMzM5OSBo YWQgZW1tYyBoczQwMGVzCmJyb2tlbiBkaWQgaGUgYXJndWUgdGhhdCBoaXMgYm9hcmQgd2FzIHdv cmtpbmcuIEFuZCBpbmRlZWQgaXQgd2FzIHRoZQpvbmx5IG9uZSB3aGljaCBhZGQgInJvY2tjaGlw LGVuYWJsZS1zdHJvYmUtcHVsbGRvd24iIHRvIGl0cyBkdHMgYXMgdGhleQpmb3VuZCBhYm91dCB0 aGUgbmV3IGRlZmF1bHQgYmVoYXZpb3IgY29tbWl0LCBjZgpodHRwczovL2xvcmUua2VybmVsLm9y Zy9sa21sL2VhZmQ4ZDhjMGNiY2FjYTFiMTkwZjg0ZWMxN2ExZGNkN2FlYzAzMDYuY2FtZWxAY29s bGFib3JhLmNvbS9ULwoiYXJtNjQ6IGR0czogcm9ja2NoaXA6IGFkZCBlbmFibGUtc3Ryb2JlLXB1 bGxkb3duIHRvIGVtbWMgcGh5IG9uCnJrMzM5OSIKCgpIZWlrbywgeW91IHRoZW4gYXNrZWQ6Ck9u IFR1ZSwgQXVnIDIzLCAyMDIyIGF0IDQ6NTMgQU0gSGVpa28gU3TDvGJuZXIgPGhlaWtvQHNudGVj aC5kZT4gd3JvdGU6Cj4gSSdtIGp1c3Qgd29uZGVyaW5nIGFzIHRoZSAib2ZmZW5kaW5nIiBwYXRj aCBpcyBmcm9tIDIwMjAsIHdoeSB0aGlzCm9ubHkgdHVybnMgdXAgbm93LiBBbnkgaWRlYXM/CgoK SXQgdHVybnMgb3V0IGJlY2F1c2UgdGhpcyBjb21taXQgd2FzIG5vdCBiYWNrcG9ydGVkIHRvIHN0 YWJsZSBicmFuY2hlcy4KQW5kIHdoZW4gaXQgZGlkIG1vc3QgYm9hcmRzIGJyb2tlIChpdCB3YXMg cGFuaWMgaW4gdGhlIGZvcnVtcyB3aXRoIGRhdGEKbG9zcyBpc3N1ZXMpIGFuZCBlbmRlZCB1cCB3 aXRoIGhzNDAwIGlzYWJsZWQgaW4gZG93bnN0cmVhbSBrZXJuZWwKKEFybWJpYW4gZm9yIG9uZSku ClRoaXMgZGlzY3Vzc2lvbiB3YXMgaW4gMjAyMi4gT25seSB0d28gZHRzIGZpbGVzIHdpdGggaHM0 MDAgc3VwcG9ydCBmbwpyazMzOTkgd2VyZSBhZGRlZCBzaW5jZSB0aGVuIGFuZCBoYWQgdG8gZGlz YWJsZSBoczQwMCBsYXRlciBvbmUgYmVjYXVzZQpvZiB0aGlzIGRlZmF1bHQgZW5hYmxlLXN0cm9i ZSBwb2xpY3kuCgoKQWxzbyBpbiB0aGlzIHRocmVhZDoKT24gVHVlLCBBdWcgMjMsIDIwMjIgYXQg MTA6MTMgUE0gRG91ZyBBbmRlcnNvbiA8ZGlhbmRlcnNAY2hyb21pdW0ub3JnPgp3cm90ZToKPiBB aCwgSSBzZWUuIFNvIGJlZm9yZSB0aGUgb2ZmZW5kaW5nIHBhdGNoIHdlIHVzZWQgdG8ganVzdCBs ZWF2ZSB0aGUKPiBwdWxsIHN0YXRlIGF0IHdoYXRldmVyIHRoZSBkZWZhdWx0IHdhcyB3aGVuIHRo ZSBrZXJuZWwgd2FzIGJvb3RlZC4KPiBBZnRlciB0aGUgb2ZmZW5kaW5nIHBhdGNoIHdlIGNob3Nl IGEgZGVmYXVsdC4KPiAKPiBPbiBrZXZpbiBJIHNlZSBhbiBleHRlcm5hbCBwdWxsIGRvd24gb24g dGhpcyBsaW5lLiBFbmFibGluZyBib3RoIHRoZQo+IGludGVybmFsIGFuZCBleHRlcm5hbCBpcyBw cm9iYWJseSBub3QgYSBodWdlIGRlYWwsIGl0J2xsIGp1c3QgYWZmZWN0Cj4gdGhlIHN0cmVuZ3Ro IG9mIHRoZSBwdWxsLgo+IAo+IE9uIGJvYiBJIF90aGlua18gdGhlIGV4dGVybmFsIHB1bGwgZG93 biBpcyBhbHNvIHN0dWZmZWQuCj4gCj4gLi4uc28gSSBndWVzcyB0aGF0IHdvdWxkIGV4cGxhaW4g d2h5IGl0IGRpZG4ndCBjYXVzZSBhIHByb2JsZW0gZm9yIGF0Cj4gbGVhc3QgdGhvc2UgdHdvIGJv YXJkcz8KPiAKPiAtRG91ZwoKClNvIGl0IGNvdWxkIGJlIHRoYXQgZGlzYWJsZSBieSBkZWZhdWx0 IGJyb2tlIG1vc3QgYm9hcmQgYnV0IGVuYWJsaW5nIGJ5CmRlZmF1bHQgd291bGQgYnJlYWsgbm9u ZSwgb3Igb25seSB2ZXJ5IHNwZWNpZmljIGJvYXJkICh0aGF0IGZyb20gbXkgZ2l0CmxvZyBpbnNw ZWN0aW9uIHdvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIGJyb2tlbiBiZWZvcmUgdGhlIG5ldyBiZWhh dmlvcgp3YXMgaW50cm9kdWNlZCkuCgp0aGVuOgo+IEkgcmVhbGl6ZWQgdGhhdCBvbmx5IHNvbWUg ZGV2aWNlcyBtYXkgYmUgYWZmZWN0ZWQsIHNvIEkgY29uc2lkZXJlZAo+IG1vZGlmeWluZyByazMz OTktbmFub3BpNC5kdHNpIG9ubHksCj4gYnV0IG90aGVyIGJvYXJkcyB3aXRob3V0IGV4dGVybmFs IHB1bGwtZG93biBzaG91bGQgc3RpbGwgbmVlZCB0aGlzCj4gcGF0Y2guCj4gCj4gCj4gQlIsCj4g SmVuc2VuCgoKCgpJdCB3YXMgcG9pbnRlZCBvdXQgdGhhdCBSb2NrUHJvNjQgYW5kIFBpbmVib29r IFBybyBoYWQgdGhlIHN0cm9iZSBwaW4KbWlzd2lyZWQuIAoKRnJvbTogRHJhZ2FuIFNpbWljIEAg MjAyNC0wMi0yNyAxNjowMCBVVEMgKHBlcm1hbGluayAvIHJhdykKPiBXaGVuIGl0IGNvbWVzIHRv IEhTNDAwIHN1cHBvcnQgb24gdGhlIFJvY2tQcm82NCBhbmQgdGhlIFBpbmVib29rIFBybywKPiB0 aGV5J3JlIHVuZm9ydHVuYXRlbHkgbWlzd2lyZWQgaW4gYSBob3BlbGVzcyB3YXksIGNhdXNpbmcg dGhlIERBVEEKPiBTVFJPQkUgc2lnbmFsIGZyb20gdGhlIGVNTUMgY2hpcCAoaS5lLiB0aGUgZU1N QyBtb2R1bGUpIG5vdCB0byBldmVuCj4gcmVhY2ggdGhlIHJpZ2h0IGJhbGwgb24gdGhlIFJLMzM5 OSBTb0MuCj4gCj4gSGVyZSBhcmUgYSBmZXcgc2NyZWVuc2hvdHMgZnJvbSB0aGUgc2NoZW1hdGlj cyB0aGF0IGlsbHVzdHJhdGUgdGhpcwo+IGlzc3VlICh0aGUgZmlyc3Qgb25lIGlzIGZyb20gdGhl IGVNTUMgbW9kdWxlIHNjaGVtYXRpYywgdGhlIHJlbWFpbmluZwo+IHR3byBhcmUgZnJvbSB0aGUg Um9ja1BybzY0IHNjaGVtYXRpYywgd2hpY2ggYXJlIHByZXR0eSBtdWNoIGV4YWN0bHkKPiB0aGUg c2FtZSBpbiB0aGUgUGluZWJvb2sgUHJvIHNjaGVtYXRpYyk6Cj4gCj4gLSBodHRwczovL2kuaW1n dXIuY29tL01xRDdyY0cucG5nCj4gLSBodHRwczovL2kuaW1ndXIuY29tL2hybFFCY2sucG5nCj4g LSBodHRwczovL2kuaW1ndXIuY29tL210WXZjOXMucG5nCj4gCj4gVGhlcmUgaGF2ZSBiZWVuIHNv bWUgUGluZTY0IGNvbW11bml0eSBhdHRlbXB0cyB0byBoYXZlIHRoaXMgZml4ZWQgaW4KPiBuZXcg Um9ja1BybzY0IGFuZCBQaW5lYm9vayBQcm8gaGFyZHdhcmUgcmV2aXNpb25zLCBidXQgc3VjaCBh dHRlbXB0cwo+IHVuZm9ydHVuYXRlbHkgZmFpbGVkLiA6Lwo+IAo+IFRodXMsIHdlJ2xsIHVuZm9y dHVuYXRlbHkgaGF2ZSB0byBkZWFsIHdpdGggdGhlIHdob2xlIHRoaW5nIG9uIHRoZQo+IGJvYXJk IGxldmVsLCBpbnN0ZWFkIG9mIG1ha2luZyBjaGFuZ2VzIG9uIHRoZSBTb0MgbGV2ZWwuCgoKT24g VHVlIE1hciAyNiwgMjAyNCBhdCA4OjU1IFBNIENFVCwgRHJhZ2FuIFNpbWljIHdyb3RlOgo+IE1v cmVvdmVyLCBhcyBJIGFscmVhZHkgZXhwbGFpbmVkIHNvbWUgdGltZSBhZ28sIFsxXSBzb21lIGJv YXJkcyBhbmQKPiBkZXZpY2VzIGFyZSB1bmZvcnR1bmF0ZWx5IG1pc3dpcmVkLCBhbmQgd2UgZG9u J3Qgd2FudCB0byBlbmFibGUgdGhlCj4gREFUQSBTVFJPQkUgcHVsbC1kb3duIG9uIHN1Y2ggYm9h cmRzLgoKCgpNYXliZSByZXZlcnRpbmcgdG8gdGhlIHByZXZpb3VzIG9mIG5vdCBzZXR0aW5nIGEg ZGVmYXVsdCBmb3IgdGhpcwpzdHJvYmUgcHVsbGRvd24gaW4gdGhlIGtlcm5lbCBpcyB0aGUgYmVz dCBvcHRpb24gKHRoZSBjb21taXQKaW50cm9kdWNpbmcgYSBkZWZhdWx0IGRvZXMgbm90IHRlbGwg d2h5IGl0IG1ha2VzIHNlbnNlIHRvIHNldCBhIGRlZmF1bHQKaW4gdGhlIGtlcm5lbCBvdXQgb2Yg InRoZSBSb2NrY2hpcCBrZXJuZWwgZG9lcyBpdCIpLgoKCmFuZDoKT24gV2VkLCBBdWcgMjQsIDIw MjIgYXQgMTA6NTggUE0gRG91ZyBBbmRlcnNvbiA8ZGlhbmRlcnNAY2hyb21pdW0ub3JnPgp3cm90 ZToKPiBJIGd1ZXNzIHRoZSBvdGhlciBhbHRlcm5hdGl2ZSB3b3VsZCBiZSB0byBjaGFuZ2UgaG93 IHRoZSBkdCBwcm9wZXJ0eQo+IHdvcmtzLiBZb3UgY291bGQgc2F5Ogo+IAo+IDEuIElmIGBlbmFi bGUtc3Ryb2JlLXB1bGxkb3duYCBpcyBzZXQgdGhlbiBlbmFibGUgdGhlIHN0cm9iZQo+IHB1bGxk b3duLgo+IAo+IDIuIElmIGBlbmFibGUtc3Ryb2JlLXB1bGxkb3duYCBpcyBub3Qgc2V0IHRoZW4g ZG9uJ3QgdG91Y2ggdGhlIHBpbiBpbgo+IHRoZSBrZXJuZWwuCj4gCj4gMy4gSWYgc29tZW9uZSBs YXRlciBuZWVkcyB0byBleHBsaWNpdGx5IGRpc2FibGUgdGhlIHN0cm9iZSBwdWxsZG93bgo+IHRo ZXkgY291bGQgYWRkIGEgbmV3IHByb3BlcnR5IGxpa2UgYGRpc2FibGUtc3Ryb2JlLXB1bGxkb3du YC4KPiAKPiAKPiBPYnZpb3VzbHkgdGhlcmUgYXJlIHRyYWRlb2ZmcyBiZXR3ZWVuIHRoYXQgYW5k IHdoYXQgeW91J3ZlIGRvbmUgYW5kCj4gSSdtIGhhcHB5IHRvIGxldCBvdGhlcnMgbWFrZSB0aGUg Y2FsbCBvZiB3aGljaCB0aGV5J2QgcHJlZmVyLgoKClRoaXMgaXMgYSBzYW5lIHdheSBwb2xpY3kg dG8gbWUuCgpNYXliZSBSb2NrY2hpcCBoYWQgYSByYXRpb25hbGUgdG8gZW5hYmxlIHRoaXMgc3Ry b2JlIHB1bGxkb3duIGJ5CmRlZmF1bHQuIEJ1dCBJIGRvbid0IHRoaW5rIHRoZXJlIGlzIGFueSBy YXRpb25hbGUgdG8gZm9yY2UgdGhpcwpwdWxsZG93biB0byBkaXNhYmxlZCBieSBkZWZhdWx0LgoK CkluIGEgc2Vjb25kYXJ5IHN0ZXAsIHdpdGggZXh0ZW5zaXZlIHRlc3RpbmcsIGlmIGV2ZXIsIEkg YmVsaWV2ZSB3ZQpjb3VsZCBzdGlsbCBjaGFuZ2UgdGhlIGRlZmF1bHQgdG8gZW5hYmxlIGJ1dCBh ZGQgYSBkaXNhYmxlLXN0cm9iZSBmb3IKUm9ja1BybzY0IGFuZCBQaW5lYm9vayBQcm8gKGJyb2tl biBkdWUgdG8gYSBkZXNpZ24gbWlzdGFrZSB0aGF0IGlzCnNwZWNpZmljIHRvIHRoZXNlIGJvYXJk cyBhcyBmYXIgYXMgSSB1bmRlcnN0b29kKS4KQnV0IHRoaXMgY2FuIGJlIHdvcmtlZCBvbiBhZnRl ciBhbnkgZGVmYXVsdCBpcyByZW1vdmVkIGFuZCBtZXJnZWQgb25seQp3aGVuIHN1cHBvcnRlZCBi b2FyZHMgaGF2ZSBiZWVuIHRlc3RlZCB0byBiZSBmaW5lIHdpdGggdGhpcyBkZWZhdWx0LgpBcyBm YXIgYXMgSSB1bmRlcnN0b29kIHNldHRpbmcgdGhlIHN0cm9iZSBwdWxsZG93biB0byBib2FyZCB3 aXRoIGFuCmV4dGVybmFsIHB1bGxkb3duIGlzIGhhcm1sZXNzLCBzbyBvbmx5IGJvYXJkcyB3aXRo IG1pc3dpcmVkIGxpbmVzIHdvdWxkCmJlIGJyb2tlbiBhbmQgY291bGQgYmUgaGFuZGxlZCBieSBh ZGRpbmcgZGlzYWJsZS1wdWxsZG93biAod2hpY2ggd291bGQKYWxzbyBkb2N1bWVudCB0aGVtIG5v dCBzdXBwb3J0aW5nIGhzNDAwIGluIHRoZSBkdHMgaW5zdGVhZCBvZiByZWx5aW5nCm9uIGRldmVs b3BlcnMgb3QgY2Fycnkgb24gdGhpcyBwaWVjZSBvZiBpbmZvcm1hdGlvbikuCgpJbiBmYWN0IEkg YmVsaWV2ZSBpdCB3b3VsZCBiZSBnb29kIHRvIGFkZCBkaXNhYmxlLXN0cm9iZS1wdWxsZG93bgpw cm9wZXJ0aWVzIHRvIHRoZSBkdHMgb2YgYm9hcmRzIHdoaWNoIGNhbm5vdCBzdXBwb3J0IGludGVy bmFsIHN0cm9iZQpwdWxsZG93biB0byBiZSBlbmFibGVkLCBpZiBvbmx5IHRvIGRvY3VtZW50IHRo ZXkgY2Fubm90IHN1cHBvcnQgaXQuCgoKQnkgdGhlIHdheSBob3cgZG9lcyB0aGUgUm9ja2NoaXAg a2VybmVsIGhhbmRsZXMgUm9ja1BybzY0IGFuZCBQaW5lYm9vawpQcm8/CkFyZSBib3RoIFJvY2tQ cm82NCBWMi4wIGFuZCBWMi4xIHdpdGggREFUQSBTVFJPQkUgbGluZXMgbWlzd2lyZWQ/CgpSZWdh cmRzLApBbGJhbgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KTGludXgtcm9ja2NoaXAgbWFpbGluZyBsaXN0CkxpbnV4LXJvY2tjaGlwQGxpc3RzLmluZnJh ZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51 eC1yb2NrY2hpcAo= 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 0B8D8C27C75 for ; Tue, 11 Jun 2024 19:39:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:MIME-Version: Content-Transfer-Encoding:Content-Type:References:In-Reply-To:Date:Cc:To:From :Subject:Message-ID:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=mMuKKGbiLvzl7g567RMJt94PCP09N1aUUNw3PJ69S5U=; b=PjMRPhOBA756rHdAKbFt3nARk0 GSckeoUrF2cdFSUwpJu7Ur3eUvai4bJP+jq5kxpUoO+yFgU/CeSKUJtThAfxa82C6f+RSRHUc4GRF V3Sbsk58kLacpYit9oMc/Zfd7Ln1qXGY0Z7/YeX+kaFrUlNFDk6/NwRgFyZVrgg7mGTRCzw9Jz4vg ZWa9yaOczgo4YY4rb7Y3YHvHNMP3/KZgh1aDD3WGrEQ8MYk9S30lmXefC5Pip1ZA6EvsHdvmpPiUp XeSqPDIMYRdiJwZI6f6zqDBfCwI80dmHDYaCBeRx+SGprHXqZ2T3yaHKCLxwc+GiGG0IMUaqznmi+ DvCl9eAg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sH7Kh-0000000A36H-0w1a; Tue, 11 Jun 2024 19:39:03 +0000 Received: from mail-wr1-x42f.google.com ([2a00:1450:4864:20::42f]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sH7Kb-0000000A32Q-45VP; Tue, 11 Jun 2024 19:39:01 +0000 Received: by mail-wr1-x42f.google.com with SMTP id ffacd0b85a97d-35f1691b18fso2987039f8f.2; Tue, 11 Jun 2024 12:38:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718134734; x=1718739534; darn=lists.infradead.org; h=mime-version:user-agent:content-transfer-encoding:references :in-reply-to:date:cc:to:from:subject:message-id:from:to:cc:subject :date:message-id:reply-to; bh=mMuKKGbiLvzl7g567RMJt94PCP09N1aUUNw3PJ69S5U=; b=AF/c5+WfMniui7TOo6DIyADnVOQRsI/+w9eFw+L7Nd+RjeGzg383BZ31SJmvbPQhww MAZmKW/4cPY3wRyhCiJIUk1QtjoYmH1Sih3imBVzd8maQVBwCr8euA6VmGDb9fwyWhQh qGlBZgWcAYx57/C1L7PhCuiXoMv6wuHXDLncqXzoP4O25dTYG1M/4Ct3zFuis6j3amN2 maHjAc0X8xgIKnYDCvfQlGhRdNTLF142faG415t5t2pwzuSLLBtkm1aM4w55LJrICDa2 ZpswE2uroniFtEXypMjGrvxGP6vgelnEA/SMH8VB4ynsT2JgxjbvjcrJ387KW4vVeB/Z 8Ugw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718134734; x=1718739534; h=mime-version:user-agent:content-transfer-encoding:references :in-reply-to:date:cc:to:from:subject:message-id:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=mMuKKGbiLvzl7g567RMJt94PCP09N1aUUNw3PJ69S5U=; b=QamR1vg9LDBX/dpW94djqUl/5CRtkLn4GwMQovoojZDGGRTZ/wdlbtOzxvgbdON76B frDJAaNWKJx35kB5103UCPFtFrrZdX1K6ovfkXS+0yAufSD2UPMpxIHma5+z7dx4Bkmb T1ml0PrrGWa73EgKQzjcFnQ1CaYAxcxbVz/dcGpwMhTXlCv9bRC50pxhN4znwSp2gOFx qo9emuUmKdDESshlvA6mvCiL7t7OQvmw68lS5X0Nv/R8W7z+I8UCA5fOydVfo3UzoWwi EIoK+xvp1Vjl6gZ5meFnYwBBpwgq4+22sCQ15u4BG9ndHOR/J1WO9eV6iBPWUypqXAwf nHqg== X-Forwarded-Encrypted: i=1; AJvYcCWsSC8wcvXC1LuwdBUHK+/IKhkJguXlAFAcjEFOEZdGUdXnwRR1jnPY5HQaYi7uGk3vn8ZCZgkyhrWiGjHx9huJ3pvpOqWbQJSkN1cvBGfhGDVHdTdAM/Vwd2rzs6xD5yQzVqMFCAm5Tpwfpa/MU7Q0nr1+Kc7xXgjgeMiGW+h2WU9KvE4B1wootmZfuXPgloO5ZNlIyTaz X-Gm-Message-State: AOJu0Yy+ZZui638W1O3Ekxul+ZCgMIHYI8DJ/EmrJgfrMZzKT5aA05D/ gV5b9n7jZLrRBp7cJgtAcRDHUeswwQDdfbr+9haRw8l7+2kxi+l1 X-Google-Smtp-Source: AGHT+IHJG4CxOHoiEYQZFTcAR5H73GlsNVvt7EMw1Bte0lOGSli21iSBCvk7Dv1tJ+cisx7RdIKaHg== X-Received: by 2002:a05:600c:314a:b0:422:1a82:3ebf with SMTP id 5b1f17b1804b1-4221a824515mr38327285e9.35.1718134733320; Tue, 11 Jun 2024 12:38:53 -0700 (PDT) Received: from hermes.prahal.homelinux.net (91-175-163-178.subs.proxad.net. [91.175.163.178]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-421791b1ea9sm135406905e9.21.2024.06.11.12.38.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Jun 2024 12:38:52 -0700 (PDT) Message-ID: <2427291970ac0962bf56b2455e5cb26e49d42c51.camel@gmail.com> Subject: Re: [PATCH 1/3] phy: rockchip: emmc: Enable pulldown for strobe line From: Alban Browaeys To: Heiko =?ISO-8859-1?Q?St=FCbner?= , Conor Dooley Cc: dev@folker-schwesinger.de, Vinod Koul , Kishon Vijay Abraham I , Chris Ruehl , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Christopher Obbard , Doug Anderson , Brian Norris , Jensen Huang , linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org Date: Tue, 11 Jun 2024 21:38:52 +0200 In-Reply-To: <2192003.Icojqenx9y@diego> References: <20240326-rk-default-enable-strobe-pulldown-v1-0-f410c71605c0@folker-schwesinger.de> <313d5a24b6cffa1a9160e624bb6855aa7f66589e.camel@gmail.com> <20240411-mushily-pucker-732583c1d340@spud> <2192003.Icojqenx9y@diego> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable User-Agent: Evolution 3.52.2-2 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240611_123858_240844_D9C975A7 X-CRM114-Status: GOOD ( 80.73 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org This is quite a detailed replied. in summary I believe the enable- strobe property should be added as soon as possible to restore hs400 support. In the process it will be easier to see if any upstream dts has hs400 enabled and does not require to force this enable-strobe property.=20 As far as I understood the only boards that do not support enable- strobe pulldown by default do not support hs400 either (because they do not support strobe pulldown enabled due to wiring issue, but that also prevetn them from enabling hs400). And then if I managed to convince you that the best policy is to restore previous behaviour of not setting a default in the kernel (and provides enable and disable properties for those that want to force ether way be it due to wiring issues), remove these properties once the default is removed. Le vendredi 19 avril 2024 =C3=A0 16:31 +0200, Heiko St=C3=BCbner a =C3=A9cr= it=C2=A0: > Am Donnerstag, 11. April 2024, 17:42:24 CEST schrieb Conor Dooley: > > On Wed, Apr 10, 2024 at 08:28:57PM +0200, Alban Browaeys wrote: > > > Le jeudi 28 mars 2024 =C3=A0 18:01 +0000, Conor Dooley a =C3=A9crit : > > > > On Thu, Mar 28, 2024 at 06:00:03PM +0100, Alban Browaeys wrote: > > > > > Le mardi 26 mars 2024 =C3=A0 19:46 +0000, Conor Dooley a =C3=A9cr= it : > > > > > > On Tue, Mar 26, 2024 at 07:54:35PM +0100, Folker > > > > > > Schwesinger via > > > > > > B4 > > > > > > Relay wrote: > > > > > > > From: Folker Schwesinger > > > > > > > - if (of_property_read_bool(dev->of_node, > > > > > > > "rockchip,enable- > > > > > > > strobe-pulldown")) > > > > > > > - rk_phy->enable_strobe_pulldown =3D > > > > > > > PHYCTRL_REN_STRB_ENABLE; > > > > > > > + if (of_property_read_bool(dev->of_node, > > > > > > > "rockchip,disable- > > > > > > > strobe-pulldown")) > > > > > > > + rk_phy->enable_strobe_pulldown =3D > > > > > > > PHYCTRL_REN_STRB_DISABLE; > > > > > >=20 > > > > > > Unfortunately you cannot do this. > > > > > > Previously no property at all meant disabled and a property > > > > > > was > > > > > > required > > > > > > to enable it. With this change the absence of a property > > > > > > means > > > > > > that > > > > > > it > > > > > > will be enabled. > > > > > > An old devicetree is that wanted this to be disabled would > > > > > > have > > > > > > no > > > > > > property and will now end up with it enabled. This is an > > > > > > ABI > > > > > > break > > > > > > and is > > > > > > clearly not backwards compatible, that's a NAK unless it is > > > > > > demonstrable > > > > > > that noone actually wants to disable it at all. > > > > >=20 > > > > >=20 > > > > > But the patch that introduced the new default to disable the > > > > > pulldown > > > > > explicitely introduced a regression for at least 4 boards. > > > > > It took time to sort out that the default to disable pulldown > > > > > was > > > > > the > > > > > culprit but still. > > > > > Will we carry this new behavor that breaks the default design > > > > > for > > > > > rk3399 because since the regression was introduced new board > > > > > definition > > > > > might have expceted this new behavior. > > > > >=20 > > > > > Could the best option be to revert to =C3=A9not set a default > > > > > enable/disable > > > > > pulldown" (as before the commit that introduced the > > > > > regression) and > > > > > allow one to force the pulldown via the enable/disable > > > > > pulldown > > > > > property? > > > > > I mean the commit that introduced a default value for the > > > > > pulldown > > > > > did > > > > > not seem to be about fixing anything. But it broke a lot. ANd > > > > > it > > > > > was > > > > > really really hard to find the description of this commit to > > > > > understand > > > > > that one had to enable pulldown to restore hs400. > > > > >=20 > > > > > In more than 3 years, only one board maintainer noticed that > > > > > this > > > > > property was required to get back HS400=C2=A0 and thanks to a use= r > > > > > telling > > > > > me that this board was working I found from this board that > > > > > this > > > > > property was "missing" from most board definitions (while it > > > > > was > > > > > not > > > > > required before). > > > > >=20 > > > > >=20 > > > > > I am all for not breaking ABI. But what about not reverting a > > > > > patch > > > > > that already broke ABI because this patch introduced a new > > > > > ABI that > > > > > we > > > > > don't want to break? > > > > > I mean shouldn't a new commit with a new ABI that regressed > > > > > the > > > > > kernel > > > > > be reverted? > > > >=20 > > > > I think I said it after OP replied to me yesterday, but this is > > > > a > > > > pretty > > > > shitty situation in that the original default picked for the > > > > property > > > > was actually incorrect. Given it's been like this for four > > > > years > > > > before > > > > anyone noticed, and others probably depend on the current > > > > behaviour, > > > > that's hard to justify. > > > >=20 > > >=20 > > > A lot of people noticed fast that HS400 was broken in the 5.10 > > > branch > > > but due to another commit (more later, ie double regulator init > > > that > > > messed up emmc) this second breakage was not detected. But mostly > > > downstream. And most if not all rk3399 boards in Armbian had > > > HS400 > > > disabled. > > >=20 > > >=20 > > > It took 3 years to detect that HS400 was broken on a few boards > > > like > > > Rock Pi4 in the upstream kernel. Any might still be broken. > > > I would not count on the fact that keeping the current behavior > > > equals > > > no more broken boards. > > >=20 > > > From the previous exchanges the boards that requires the pulldown > > > to be > > > disabled seems well known. > > >=20 > > > Though I am fine with adding a property to set enable pulldown to > > > any > > > board definition file where that is required. > > >=20 > > > Only I do not believe keeping the statu quo equal everything > > > works > > > because it has been 3 years. > >=20 > > FWIW, I didn't say this. Clearly if that was the case, this patch > > would > > never have arrived. > >=20 > > > In fact this commit reached the downstream kernels way later. Any > > > stayed with the 5.10 branch for years. > > >=20 > > > But on the other side the disable pulldown by default is alraedy > > > in > > > stable/linux-rolling-lts . > > >=20 > > > > > Mind fixing the initial regression 8b5c2b45b8f0 "phy: > > > > > rockchip: set > > > > > pulldown for strobe line in dts" does not necessarily mean > > > > > changing > > > > > the > > > > > default to the opposite value but could also be reverting to > > > > > not > > > > > setting a default. > > > >=20 > > > > That's also problematic, as the only way to do this is make > > > > setting > > > > one of the enabled or disabled properties required, which is > > > > also an > > > > ABI > > > > break, since you'd then be rejecting probe if one is not > > > > present. > > >=20 > > >=20 > > > I don't understand. > > > How reverting to not set either pulldown enabled or disabled by > > > default > > > force all board to set either enabled or disabled. > > > I was telling about making the pulldown set by kernel optional be > > > it > > > enabled or disabled to revert to the previous behavior.=20 > > >=20 > > > I mean before the patch to set a default pulldown value (to > > > disabled) > > > there were no forced value. > >=20 > > Ah, maybe I misunderstood what the code originally did. Did the > > original > > code leave the bit however the bootloader or reset value had left > > it? > > In that case, probe wouldn't be rejected and you'd not have the > > sort of > > issue that I mentioned above. > >=20 > > > > > Though I don't know if there are pros to setting a default. > > > >=20 > > > > What you probably have to weigh up is the cons of each side. If > > > > what > > > > you > > > > lose is HS400 mode with what's in the kernel right now but > > > > switching > > > > to > > > > what's been proposed would entirely break some boards, I know > > > > which > > > > I think the lesser of two evils is. > > >=20 > > > More boards (even if not the most wide spread it seems) are > > > broken by > > > the current behavior. > > >=20 > > > I agree that only HS400 is broken by keeping the status quo. But > > > as far > > > as I understand only HS400 will be broken either way. > > > Be that by keeping the current disable pulldown which break the > > > boards > > > based on the rockchip default design or the boards that are non- > > > standard or have a broken design. > > > Both case this lead to data corruption on boot to eMMC. > > >=20 > > > The only pro of keeping the current value the default is that > > > most > > > board broken by the new default introduced in 2020 "might" > > > already be > > > fixed (but that is just a guess). >=20 > which I guess are the least stale boards too. >=20 > > > > It's probably up to the platform maintainer to weigh in at this > > > > point. > > >=20 > > > I am not knowledged into the delegation scope. You mean that from > > > now > > > on it is up to the rockchip maintainer? > > > I am fine with it either way. > >=20 > > Yes, I meant the rockchip maintainer. I'm only a lowly bindings > > maintainer, without any knowledge of rockchip specfics or the type > > of > > boards we're talking about being broken here. Someone has to make a > > judgement call about which "no property" behaviour is used going > > forward > > and I don't want that to be me! >=20 > I'm somehow all for not changing defaults again. >=20 > I think in the past there was a similar example in some other kernel > part, > where some change broke the ABI, but meanwhile another ABI depended > on the changed behaviour, so a revert was not possible. >=20 > I think it's somewhat similar here. If the change has been in the > kernel > for 3-4 years now, I do think that ship has sailed somehow. >=20 > As was said above, board introduced since 2020 might already be fixed > and essentially for boards that weren't, it does look like these > didn't run > a mainline kernel for like 4 years now. I agree that all board have been fixed. But not by adpating to the new default since 2020 and relying on it nowadays. Most if not all have disabled hs400es support (and the patch to disable hs400 are only reaching upstream recently, ie only a year ago for the latest ones). The hs400es support was disabled as soon as the new default was introduced. And in fact earlier due to a double init in regulator core, when probe deferred was introduced, that also broke emmc on rk3399 a few month before this new default was pushed to stable branch in 2020. Ie it could be that until when this double init was fixed in august 2022 by=20 https://github.com/torvalds/linux/commit/8a866d527ac0441c0eb14a991fa11358b4= 76b11d, no rk3399 board was able to test hs400es support with the new 2020 default. The main thing that made it impossible to find this new default was bad is that emmc hs400 support was already broken when the commit reached the stable kernel. Also a lot of users and devs use SD instead of EMMC. Maybe before discussing if the new default should be kept for stability, we should check if any upstream rk3399 board that still has hs400es support without the "rockchip,enable-strobe-pulldown" (ie out of: arch/arm64/boot/dts/rockchip/rk3399-nanopc-t4.dts via arch/arm64/boot/dts/r= ockchip/rk3399-nanopi4.dtsi arch/arm64/boot/dts/rockchip/rk3399-nanopi-m4.dts via arch/arm64/boot/dts/r= ockchip/rk3399-nanopi4.dtsi arch/arm64/boot/dts/rockchip/rk3399-nanopi-neo4.dts via arch/arm64/boot/dts= /rockchip/rk3399-nanopi4.dtsi arch/arm64/boot/dts/rockchip/rk3399-nanopi-r4s.dts via arch/arm64/boot/dts/= rockchip/rk3399-nanopi4.dtsi ) has working emmc hs400. Could be there are none that have a working hs400 emmc. Could we ask for these boards to be checked for working emmc with the new 2020 default? (as we cannot assume that as even well maintained board only found upstream they were broken in mid 2023, ie commit 2bd1d2dd808c60532283e9cf05110bf1bf2f9079 and cee572756aa2cb46e959e9797ad4b730b78a050b for ROCK 4C+ and ROCK Pi 4)?=C2=A0 Then we will be confident the new 2020 default regression is required by anything. Ie, we assume they were working as nobody complains as most complains never reach upstream ML...=C2=A0but the armbian forum were flooed with complaints in these days. I was one of the complainer until I decided to abandon other projects because this issue was too big to me (wel I ended up and am still on SD since it took too long and I needed the board, as did all other users. But I want this to change). Only downstream disabled hs400es to get the board working. All rk3399 boards in Armbian are patched to remove hs400 support since at least two years as far as I know. These current boards with hs400es enabled upstream are: arch/arm64/boot/dts/rockchip/rk3399-evb.dts arch/arm64/boot/dts/rockchip/rk3399-firefly.dts arch/arm64/boot/dts/rockchip/rk3399-gru-bob.dts via arch/arm64/boot/dts/roc= kchip/rk3399-gru.dtsi arch/arm64/boot/dts/rockchip/rk3399-gru-kevin.dts via arch/arm64/boot/dts/r= ockchip/rk3399-gru.dtsi arch/arm64/boot/dts/rockchip/rk3399-gru-scarlet-dumo.dts via arch/arm64/boo= t/dts/rockchip/rk3399-gru.dtsi arch/arm64/boot/dts/rockchip/rk3399-gru-scarlet-inx.dts via arch/arm64/boot= /dts/rockchip/rk3399-gru.dtsi arch/arm64/boot/dts/rockchip/rk3399-gru-scarlet-kd.dts via arch/arm64/boot/= dts/rockchip/rk3399-gru.dtsi arch/arm64/boot/dts/rockchip/rk3399-hugsun-x99.dts arch/arm64/boot/dts/rockchip/rk3399-khadas-edge-captain.dts via arch/arm64/= boot/dts/rockchip/rk3399-khadas-edge.dtsi arch/arm64/boot/dts/rockchip/rk3399-khadas-edge-v.dts via arch/arm64/boot/d= ts/rockchip/rk3399-khadas-edge.dtsi arch/arm64/boot/dts/rockchip/rk3399-khadas-edge.dts via arch/arm64/boot/dts= /rockchip/rk3399-khadas-edge.dtsi arch/arm64/boot/dts/rockchip/rk3399-leez-p710.dts arch/arm64/boot/dts/rockchip/rk3399-nanopc-t4.dts arch/arm64/boot/dts/rockchip/rk3399-orangepi.dts arch/arm64/boot/dts/rockchip/rk3399-puma-haikou.dts via arch/arm64/boot/dts= /rockchip/rk3399-puma.dtsi arch/arm64/boot/dts/rockchip/rk3399-ficus.dts via arch/arm64/boot/dts/rockc= hip/rk3399-rock960.dtsi arch/arm64/boot/dts/rockchip/rk3399-rock960.dts via arch/arm64/boot/dts/roc= kchip/rk3399-rock960.dtsi arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator.dts via arch/arm64/b= oot/dts/rockchip/rk3399-sapphire.dtsi arch/arm64/boot/dts/rockchip/rk3399-sapphire.dts via arch/arm64/boot/dts/ro= ckchip/rk3399-sapphire.dtsi arch/arm64/boot/dts/rockchip/rk3399pro-rock-pi-n10.dts via arch/arm64/boot/= dts/rockchip/rk3399pro-vmarc-som.dtsi These board were broken by the new default though they only disabled hs enh= anced strobe but left basic hs400 support: arch/arm64/boot/dts/rockchip/rk3399-khadas-edge-captain.dts via arch/arm64/= boot/dts/rockchip/rk3399-khadas-edge.dtsi arch/arm64/boot/dts/rockchip/rk3399-khadas-edge-v.dts via arch/arm64/boot/d= ts/rockchip/rk3399-khadas-edge.dtsi arch/arm64/boot/dts/rockchip/rk3399-khadas-edge.dts via arch/arm64/boot/dts= /rockchip/rk3399-khadas-edge.dtsi ie commit 6dd0053683804427529ef3523f7872f473440a19 in november of 2021. Note: I have not checked that my board is working with mmc-hs400-1_8v enabled and mmc-hs400-enhanced-strobe disabled. Could be that the new default only break the enhanced strobe support, not hs400 per se. Back then Armbian contributors disabled hs400 support. Finally, it could be that one RK3399 board currently upstream depends on this new default but I guess none. !!!!! The main issue and what bother me is whether any boards depend on the previous default. This is the real issue. That is previously the kernel value was left to the one set by the bootloader or the hardware reset. The Rockchip kernel default to enable strobe was told by Dragan Simic=20 to break RockPro64 and the Pinebook Pro due to them behing miswired.=C2=A0 But it was not the upstream behavior before the 2020 new disable by default behavior was introduced. The previous behavior to leave teh pulldown as is. !!!! The dev for commit 8b5c2b45b8f0a11c9072da0f7baf9ee986d3151e that introduced the new disable-strobe by default tells he tested on his "rk3399 customized board". I wanted to sort out if it made sense to add "rockchip,enable-strobe- pulldown" to most rk339 boards. But I should have first added this property then discussed if we should revert the new 2020 default. We could just remove all the "rockchip,enable-strobe-pulldown" later on if we revert either to the previous behavior of not setting a default or even to the Rockchip tree default to set it enable-strobe by default. I should not have kept the board broken in the mean time. It is not as if I was introducing a new API that could be wrong. The API is already there even if wrong. I will try to carry forward the discussion. But unbreaking the board is higher priority. Could you test the enable-strobe property on all the dts that disabled hs400es due to this new default (I lack the hardware to test the patches). At least arch/arm64/boot/dts/rockchip/rk3399-khadas-edge.dtsi arch/arm64/boot/dts/rockchip/rk3399-rock-4c-plus.dts arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dtsi and ping the board tester for other boards to test if they require "rockchip,enable-strobe-pulldown" for EMMC HS400 write support (read is fine even with the new default). About: On Tue, 2024-02-27 at 10:11 +0000, Folker Schwesinger wrote: > with the following applied, the EMMC related errors are gone. dmesg > only > shows "Purging ... bytes" during my tests: >=20 > diff --git a/arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dtsi > b/arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dtsi > index f2279aa6ca9e..ae0fb87e1a8b 100644 > --- a/arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dtsi > +++ b/arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dtsi > @@ -647,8 +647,10 @@ &saradc { > &sdhci { > max-frequency =3D <150000000>; > bus-width =3D <8>; > - mmc-hs200-1_8v; > + mmc-hs400-1_8v; > + mmc-hs400-enhanced-strobe; > non-removable; > + rockchip,enable-strobe-pulldown; > status =3D "okay"; > }; >=20 > For testing I ran dd three times in a row: >=20 > dd if=3D/dev/zero of=3D./zero.bin bs=3D1M count=3D5000 >=20 > I tested this on both a Rock 4SE board and a Rock Pi 4B+ board with > the > same results. Folker, are you confident "Rock 4SE board and Rock Pi 4B+" were fixed with above patch? Ie the "rockchip,enable-strobe-pulldown;" should be under an "rockchip,rk3399-emmc-phy" compaible node, that is &emmc_phy in arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dtsi, not sdhci. Since the new default bahvior was introduced the only new board dts with hs400es support introduced were: - arm64/boot/dts/rockchip/rk3399-rock-4c-plus.dts in 246450344dad087a121befbed1aba776dba3d377 (but as shown above the support was disabled in 2023 due to hs400es not working with the new default. I believe the dts was designed against a kernel before the new default disable-strobe). - arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dtsi in b5edb04673700125bfd1d13e6c14747b1ecba522 which these board dts includes: arch/arm64/boot/dts/rockchip/rk3399-rock-4se.dts arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4a-plus.dts arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4a.dts arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4b-plus.dts arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4b.dts arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4c.dts but the hs400es support was disabled incee572756aa2cb46e959e9797ad4b730b78a050b due to not working with the new disable-strobe As far as I know no board with working hs400 was introduced after the new behavior. We can assume that not setting a default as before this new behavior will not break any board any more than it was before this commit was introduced (and this commit introducing the new behavior does not acknowledge fixing any boards). Either way, I believe we should add "rockchip,enable-strobe-pulldown" to any board dts with hs400 broken asap. > So if it comes down to deciding who to keep working, I'm more in > favor of > those that did run on mainline in the years since. >=20 >=20 > Though not sure if I understood all the details here yet. >=20 >=20 > Heiko >=20 > >=20 > > > I just wanted to point out that maybe we don't have to set a > > > pulldown > > > value after all. And that then all boards will be fine as before > > > setting the pulldown explicitly was introduced. > >=20 > > By "all boards will be fine" you mean "all boards that expected the > > kernel didn't touch this bit will be fine". The boards that need > > the > > kernel to set this bit because it {comes out of reset,is set by > > firmware} > > incorrectly are going to need a property added if we revert the > > default > > behaviour to not touching the bit. > >=20 > > > In fact I am more eager to get this fixed be it by adding a > > > enable- > > > pulldown property to the board definitions, than to change the > > > current > > > behavior. > > > Just wanted to sort out if that was not the wrong way to fix this > > > issue. (ie if adding a setting on most boards was wrong). > >=20 > > > During more than 2 years, I tried various patches and discussed > > > on > > > forums about the HS400 breakage. I had bisected the regulator > > > init > > > issue in the 5.10 branch. Sadly it took so much time for this > > > issue to > > > be understood that when the force pulldown to disable commit was > > > introduced downstream before the first issue go fixed. > > > This only made the matter worse because when one fixed the double > > > regulator init issue HS400 was still broken, this time because > > > the > > > pulldown was forced to disable. But nobody noticed this commit > > > that > > > forced a default pulldown state (that was older than the > > > regulator > > > commit from 5.13 backported to the 5.10 stable branch commit, but > > > that > > > reached downstream later due to not having been backported to > > > 5.10 from > > > 5.11). > > > Otherwise we would have emailed immeditaly. > > > Bisecting was only able to catch the first breakage (as it was > > > only > > > fixed after the second breakage was introduced). > > >=20 > > > Maybe the problem is that me and others did not complained to the > > > kernel upstream ML because we were using heavily patched > > > downstream > > > kernels (like most if not all downstream ARM kernels). So sadly, > > > the > > > forums from back then are filled with complaints but nothing > > > seemed to > > > have reached the Linux ML. > >=20 > > Aye, and all I can really say there is to buy boards from a vendor > > that > > doesn't use some horribly hacked downstream kernel, which I know is > > clearly an unsatisfactory suggestion. That said, we probably should > > have > > caught that the new default behaviour when the changes were made > > was not > > the default before. There was only one DT maintainer then though, > > and > > things just slip by :/ > >=20 The sad thing is the vendor indeed worked to upstream the code (though it has since closed doors). But as told previously, the emmc hs400 support was already broken by the time the new default disable-strobe pulldown by default reached stable. This due to another tricky to debug unrelated double init in regulator core introduced a few months before the commit to disable- strobe was introduced. No one could have caught that the new behavior was broken on most rk3399 board by testing ... because it was not possible to test hs400 emmc before the double init in regulator core was fixed in august 2022. I had bisected the breakage to this regulator core deferred probe (commit "06653ebc0ad2e0b7d799cd71a5c2933ed2fb7a66" "regulator: core: resolve supply for boot-on/always-on regulators") when it broke in 5.10.60. But the new default behavior was no backported to the 5.10 branch so it confused me that the revert that got back hs400es on helios64 in the 5.10 branch when finally fixed in the 5.16 branch (the double init fixup) then emmc was still broken. Only when arguing with an Armbian user that all rk3399 had emmc hs400es broken did he argue that his board was working. And indeed it was the only one which add "rockchip,enable-strobe-pulldown" to its dts as they found about the new default behavior commit, cf https://lore.kernel.org/lkml/eafd8d8c0cbcaca1b190f84ec17a1dcd7aec0306.camel= @collabora.com/T/ "arm64: dts: rockchip: add enable-strobe-pulldown to emmc phy on rk3399" Heiko, you then asked: On Tue, Aug 23, 2022 at 4:53 AM Heiko St=C3=BCbner wrote: > I'm just wondering as the "offending" patch is from 2020, why this only turns up now. Any ideas? It turns out because this commit was not backported to stable branches. And when it did most boards broke (it was panic in the forums with data loss issues) and ended up with hs400 isabled in downstream kernel (Armbian for one). This discussion was in 2022. Only two dts files with hs400 support fo rk3399 were added since then and had to disable hs400 later one because of this default enable-strobe policy. Also in this thread: On Tue, Aug 23, 2022 at 10:13 PM Doug Anderson wrote: > Ah, I see. So before the offending patch we used to just leave the > pull state at whatever the default was when the kernel was booted. > After the offending patch we chose a default. >=20 > On kevin I see an external pull down on this line. Enabling both the > internal and external is probably not a huge deal, it'll just affect > the strength of the pull. >=20 > On bob I _think_ the external pull down is also stuffed. >=20 > ...so I guess that would explain why it didn't cause a problem for at > least those two boards? >=20 > -Doug So it could be that disable by default broke most board but enabling by default would break none, or only very specific board (that from my git log inspection would have already been broken before the new behavior was introduced). then: > I realized that only some devices may be affected, so I considered > modifying rk3399-nanopi4.dtsi only, > but other boards without external pull-down should still need this > patch. >=20 >=20 > BR, > Jensen It was pointed out that RockPro64 and Pinebook Pro had the strobe pin miswired.=20 From: Dragan Simic @ 2024-02-27 16:00 UTC (permalink / raw) > When it comes to HS400 support on the RockPro64 and the Pinebook Pro, > they're unfortunately miswired in a hopeless way, causing the DATA > STROBE signal from the eMMC chip (i.e. the eMMC module) not to even > reach the right ball on the RK3399 SoC. >=20 > Here are a few screenshots from the schematics that illustrate this > issue (the first one is from the eMMC module schematic, the remaining > two are from the RockPro64 schematic, which are pretty much exactly > the same in the Pinebook Pro schematic): >=20 > - https://i.imgur.com/MqD7rcG.png > - https://i.imgur.com/hrlQBck.png > - https://i.imgur.com/mtYvc9s.png >=20 > There have been some Pine64 community attempts to have this fixed in > new RockPro64 and Pinebook Pro hardware revisions, but such attempts > unfortunately failed. :/ >=20 > Thus, we'll unfortunately have to deal with the whole thing on the > board level, instead of making changes on the SoC level. On Tue Mar 26, 2024 at 8:55 PM CET, Dragan Simic wrote: > Moreover, as I already explained some time ago, [1] some boards and > devices are unfortunately miswired, and we don't want to enable the > DATA STROBE pull-down on such boards. Maybe reverting to the previous of not setting a default for this strobe pulldown in the kernel is the best option (the commit introducing a default does not tell why it makes sense to set a default in the kernel out of "the Rockchip kernel does it"). and: On Wed, Aug 24, 2022 at 10:58 PM Doug Anderson wrote: > I guess the other alternative would be to change how the dt property > works. You could say: >=20 > 1. If `enable-strobe-pulldown` is set then enable the strobe > pulldown. >=20 > 2. If `enable-strobe-pulldown` is not set then don't touch the pin in > the kernel. >=20 > 3. If someone later needs to explicitly disable the strobe pulldown > they could add a new property like `disable-strobe-pulldown`. >=20 >=20 > Obviously there are tradeoffs between that and what you've done and > I'm happy to let others make the call of which they'd prefer. This is a sane way policy to me. Maybe Rockchip had a rationale to enable this strobe pulldown by default. But I don't think there is any rationale to force this pulldown to disabled by default. In a secondary step, with extensive testing, if ever, I believe we could still change the default to enable but add a disable-strobe for RockPro64 and Pinebook Pro (broken due to a design mistake that is specific to these boards as far as I understood). But this can be worked on after any default is removed and merged only when supported boards have been tested to be fine with this default. As far as I understood setting the strobe pulldown to board with an external pulldown is harmless, so only boards with miswired lines would be broken and could be handled by adding disable-pulldown (which would also document them not supporting hs400 in the dts instead of relying on developers ot carry on this piece of information). In fact I believe it would be good to add disable-strobe-pulldown properties to the dts of boards which cannot support internal strobe pulldown to be enabled, if only to document they cannot support it. By the way how does the Rockchip kernel handles RockPro64 and Pinebook Pro? Are both RockPro64 V2.0 and V2.1 with DATA STROBE lines miswired? Regards, Alban