Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp636765pxb; Tue, 9 Feb 2021 08:49:21 -0800 (PST) X-Google-Smtp-Source: ABdhPJyBIS+4m9FXgM78D81ZHaaLB62+hJTp67CN4OJ6mBpdpFaJNEzMrLS0MSxxUdoYiWRMoAAR X-Received: by 2002:aa7:d696:: with SMTP id d22mr23719217edr.361.1612889361137; Tue, 09 Feb 2021 08:49:21 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1612889361; cv=none; d=google.com; s=arc-20160816; b=icn5I2lm2K+guVP3NaiTC7jGo+ue1Zc789wtNNdgHJGEzBCq0+o2mS9Pi6DuZDw5w4 NVSDeckaJp/IipOLgMDUSuvTyNYUigiUFCLKjYyzYztefc51oRbh6GBjewrIF+N0GcC4 xH9wHevftWWICgmyFi/SpGqv1YYPfGG1r9xF6tJnsq2rq6SCaQ5GnHBSiNSncAdNVKV7 TqW5pXibmGOu2aH5kTUeujxWxZ40YIf/tS1QNEASfUO8WbuZ6Z0ZaGdVDeHDbCcRaPPv KXKfksv+ZQ3x/KND8qRgrPi6/6aPk1e2mzYTLHYooSYHVHNVKBpBD1bAH2+kjgMoquog yihg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :content-id:content-language:accept-language:in-reply-to:references :message-id:date:thread-index:cc:to:from:thread-topic:subject :dkim-signature; bh=q3OY8kSu8a8LqFMQ5qg5j8AHTK9IkEFi31vjEW9x8hM=; b=niZGOralBSZu04kahOJrPt6apa2scGXt49vp/dKoeGSBu8YU1cx0CAZg2cLFXv34Er Zd+G/9k2q2LVEg/j3ILl3rp1i9Z4+XUR0cHnD5GDkV4iUOIpPuNhKVxTs2UAjq2dtR7G wJj7y0BtRnwMXPbszhRp1yEAHFPsIkesl2CmrPXEydtTtdbAnVKssLA5/oS6r9pjUWoT y/w3rFSwo8u3VswT+NlsNAqK2mjy4O/Ht1kBXGUrAh8EECXxkS3ix5EcXsGCv6jV6T3V xUdALR3pMpOoUqLzYUpSEJbWAx3gLUGWeGuAYX571C2KYFfngVN2q4Gh6zENNG7zq8YH AhyA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amazon.com header.s=amazon201209 header.b=YXo4tsWX; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amazon.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id ga1si13940648ejb.647.2021.02.09.08.48.56; Tue, 09 Feb 2021 08:49:21 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@amazon.com header.s=amazon201209 header.b=YXo4tsWX; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amazon.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233013AbhBIQrJ (ORCPT + 99 others); Tue, 9 Feb 2021 11:47:09 -0500 Received: from smtp-fw-4101.amazon.com ([72.21.198.25]:54691 "EHLO smtp-fw-4101.amazon.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233115AbhBIQpL (ORCPT ); Tue, 9 Feb 2021 11:45:11 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1612889099; x=1644425099; h=from:to:cc:date:message-id:references:in-reply-to: content-id:mime-version:content-transfer-encoding:subject; bh=q3OY8kSu8a8LqFMQ5qg5j8AHTK9IkEFi31vjEW9x8hM=; b=YXo4tsWXsX7BjduPZP7G8qpjqAlQaA9jylZqihRjdHMEVWhSmHQToLHe Gavdc9j/CMyU3YBjymJDtEaknNHGVwUr62WuLUYKJ5o23dE+xONX/V+RR +BK18kTqADfkIE+DQFSxLTW2ekEi1hX/sEFeOb7kPmQKQyK8PLBWitDLP g=; X-IronPort-AV: E=Sophos;i="5.81,165,1610409600"; d="scan'208";a="81125586" Subject: Re: [PATCH v5 1/2] drivers/misc: sysgenid: add system generation id driver Thread-Topic: [PATCH v5 1/2] drivers/misc: sysgenid: add system generation id driver Received: from iad12-co-svc-p1-lb1-vlan2.amazon.com (HELO email-inbound-relay-2b-4e24fd92.us-west-2.amazon.com) ([10.43.8.2]) by smtp-border-fw-out-4101.iad4.amazon.com with ESMTP; 09 Feb 2021 16:44:09 +0000 Received: from EX13MTAUWB001.ant.amazon.com (pdx1-ws-svc-p6-lb9-vlan2.pdx.amazon.com [10.236.137.194]) by email-inbound-relay-2b-4e24fd92.us-west-2.amazon.com (Postfix) with ESMTPS id 57B66A238E; Tue, 9 Feb 2021 16:44:06 +0000 (UTC) Received: from EX13D20UWA002.ant.amazon.com (10.43.160.176) by EX13MTAUWB001.ant.amazon.com (10.43.161.249) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 9 Feb 2021 16:44:05 +0000 Received: from EX13D08EUB004.ant.amazon.com (10.43.166.158) by EX13D20UWA002.ant.amazon.com (10.43.160.176) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 9 Feb 2021 16:44:04 +0000 Received: from EX13D08EUB004.ant.amazon.com ([10.43.166.158]) by EX13D08EUB004.ant.amazon.com ([10.43.166.158]) with mapi id 15.00.1497.010; Tue, 9 Feb 2021 16:44:03 +0000 From: "Catangiu, Adrian Costin" To: "Michael S. Tsirkin" CC: "linux-doc@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "qemu-devel@nongnu.org" , "kvm@vger.kernel.org" , "linux-s390@vger.kernel.org" , "gregkh@linuxfoundation.org" , "Graf (AWS), Alexander" , "rdunlap@infradead.org" , "arnd@arndb.de" , "ebiederm@xmission.com" , "rppt@kernel.org" , "0x7f454c46@gmail.com" <0x7f454c46@gmail.com>, "borntraeger@de.ibm.com" , "Jason@zx2c4.com" , "jannh@google.com" , "w@1wt.eu" , "MacCarthaigh, Colm" , "luto@kernel.org" , "tytso@mit.edu" , "ebiggers@kernel.org" , "Woodhouse, David" , "bonzini@gnu.org" , "Singh, Balbir" , "Weiss, Radu" , "corbet@lwn.net" , "mhocko@kernel.org" , "rafael@kernel.org" , "pavel@ucw.cz" , "mpe@ellerman.id.au" , "areber@redhat.com" , "ovzxemul@gmail.com" , "avagin@gmail.com" , "ptikhomirov@virtuozzo.com" , "gil@azul.com" , "asmehra@redhat.com" , "dgunigun@redhat.com" , "vijaysun@ca.ibm.com" , "oridgar@gmail.com" , "ghammer@redhat.com" Thread-Index: AQHW+L9CWTm14fGsAkOMfnzzQsViX6pP9OIAgABAsoA= Date: Tue, 9 Feb 2021 16:44:03 +0000 Message-ID: References: <1612200294-17561-1-git-send-email-acatan@amazon.com> <1612200294-17561-2-git-send-email-acatan@amazon.com> <20210209094830-mutt-send-email-mst@kernel.org> In-Reply-To: <20210209094830-mutt-send-email-mst@kernel.org> Accept-Language: en-US Content-Language: en-GB X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-exchange-messagesentrepresentingtype: 1 x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [10.43.166.130] Content-Type: text/plain; charset="utf-8" Content-ID: MIME-Version: 1.0 Content-Transfer-Encoding: base64 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org T24gMDkvMDIvMjAyMSwgMTY6NTMsICJNaWNoYWVsIFMuIFRzaXJraW4iIDxtc3RAcmVkaGF0LmNv bT4gd3JvdGU6DQoNCiAgICBPbiBNb24sIEZlYiAwMSwgMjAyMSBhdCAwNzoyNDo1M1BNICswMjAw LCBBZHJpYW4gQ2F0YW5naXUgd3JvdGU6DQogICAgPiAtIEJhY2tncm91bmQgYW5kIHByb2JsZW0N CiAgICA+DQogICAgPiBUaGUgU3lzdGVtIEdlbmVyYXRpb24gSUQgZmVhdHVyZSBpcyByZXF1aXJl ZCBpbiB2aXJ0dWFsaXplZCBvcg0KICAgID4gY29udGFpbmVyaXplZCBlbnZpcm9ubWVudHMgYnkg YXBwbGljYXRpb25zIHRoYXQgd29yayB3aXRoIGxvY2FsIGNvcGllcw0KICAgID4gb3IgY2FjaGVz IG9mIHdvcmxkLXVuaXF1ZSBkYXRhIHN1Y2ggYXMgcmFuZG9tIHZhbHVlcywgdXVpZHMsDQogICAg PiBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgY291bnRlcnMsIGV0Yy4NCiAgICA+IFN1Y2ggYXBw bGljYXRpb25zIGNhbiBiZSBuZWdhdGl2ZWx5IGFmZmVjdGVkIGJ5IFZNIG9yIGNvbnRhaW5lcg0K ICAgID4gc25hcHNob3R0aW5nIHdoZW4gdGhlIFZNIG9yIGNvbnRhaW5lciBpcyBlaXRoZXIgY2xv bmVkIG9yIHJldHVybmVkIHRvDQogICAgPiBhbiBlYXJsaWVyIHBvaW50IGluIHRpbWUuDQogICAg Pg0KICAgID4gRnVydGhlcm1vcmUsIHNpbXBseSBmaW5kaW5nIG91dCBhYm91dCBhIHN5c3RlbSBn ZW5lcmF0aW9uIGNoYW5nZSBpcw0KICAgID4gb25seSB0aGUgc3RhcnRpbmcgcG9pbnQgb2YgYSBw cm9jZXNzIHRvIHJlbmV3IGludGVybmFsIHN0YXRlcyBvZg0KICAgID4gcG9zc2libHkgbXVsdGlw bGUgYXBwbGljYXRpb25zIGFjcm9zcyB0aGUgc3lzdGVtLiBUaGlzIHByb2Nlc3MgY291bGQNCiAg ICA+IGJlbmVmaXQgZnJvbSBhIGRyaXZlciB0aGF0IHByb3ZpZGVzIGFuIGludGVyZmFjZSB0aHJv dWdoIHdoaWNoDQogICAgPiBvcmNoZXN0cmF0aW9uIGNhbiBiZSBlYXNpbHkgZG9uZS4NCiAgICA+ DQogICAgPiAtIFNvbHV0aW9uDQogICAgPg0KICAgID4gVGhlIFN5c3RlbSBHZW5lcmF0aW9uIElE IGlzIGEgc2ltcGxlIGNvbmNlcHQgbWVhbnQgdG8gYWxsZXZpYXRlIHRoZQ0KICAgID4gaXNzdWUg YnkgcHJvdmlkaW5nIGEgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIHUzMiBjb3VudGVyIHRoYXQg Y2hhbmdlcw0KICAgID4gZWFjaCB0aW1lIHRoZSBWTSBvciBjb250YWluZXIgaXMgcmVzdG9yZWQg ZnJvbSBhIHNuYXBzaG90Lg0KICAgID4NCiAgICA+IFRoZSBgc3lzZ2VuaWRgIGRyaXZlciBleHBv c2VzIGEgbW9ub3RvbmljIGluY3JlbWVudGFsIFN5c3RlbSBHZW5lcmF0aW9uDQogICAgPiB1MzIg Y291bnRlciB2aWEgYSBjaGFyLWRldiBGUyBpbnRlcmZhY2UgdGhhdCBwcm92aWRlcyBzeW5jIGFu ZCBhc3luYw0KICAgID4gU3lzR2VuIGNvdW50ZXIgdXBkYXRlcyBub3RpZmljYXRpb25zLiBJdCBh bHNvIHByb3ZpZGVzIFN5c0dlbiBjb3VudGVyDQogICAgPiByZXRyaWV2YWwgYW5kIGNvbmZpcm1h dGlvbiBtZWNoYW5pc21zLg0KICAgID4NCiAgICA+IFRoZSBjb3VudGVyIHN0YXJ0cyBmcm9tIHpl cm8gd2hlbiB0aGUgZHJpdmVyIGlzIGluaXRpYWxpemVkIGFuZA0KICAgID4gbW9ub3RvbmljYWxs eSBpbmNyZW1lbnRzIGV2ZXJ5IHRpbWUgdGhlIHN5c3RlbSBnZW5lcmF0aW9uIGNoYW5nZXMuDQog ICAgPg0KICAgID4gVGhlIGBzeXNnZW5pZGAgZHJpdmVyIGV4cG9ydHMgdGhlIGB2b2lkIHN5c2dl bmlkX2J1bXBfZ2VuZXJhdGlvbigpYA0KICAgID4gc3ltYm9sIHdoaWNoIGNhbiBiZSB1c2VkIGJ5 IGJhY2tlbmQgZHJpdmVycyB0byBkcml2ZSBzeXN0ZW0gZ2VuZXJhdGlvbg0KICAgID4gY2hhbmdl cyBiYXNlZCBvbiBoYXJkd2FyZSBldmVudHMuDQogICAgPiBTeXN0ZW0gZ2VuZXJhdGlvbiBjaGFu Z2VzIGNhbiBhbHNvIGJlIGRyaXZlbiBieSB1c2Vyc3BhY2Ugc29mdHdhcmUNCiAgICA+IHRocm91 Z2ggYSBkZWRpY2F0ZWQgZHJpdmVyIGlvY3RsLg0KICAgID4NCiAgICA+IFVzZXJzcGFjZSBhcHBs aWNhdGlvbnMgb3IgbGlicmFyaWVzIGNhbiB0aGVuIChhKXN5bmNocm9ub3VzbHkgY29uc3VtZQ0K ICAgID4gdGhlIHN5c3RlbSBnZW5lcmF0aW9uIGNvdW50ZXIgdGhyb3VnaCB0aGUgcHJvdmlkZWQg RlMgaW50ZXJmYWNlIHRvIG1ha2UNCiAgICA+IGFueSBuZWNlc3NhcnkgaW50ZXJuYWwgYWRqdXN0 bWVudHMgZm9sbG93aW5nIGEgc3lzdGVtIGdlbmVyYXRpb24NCiAgICA+IHVwZGF0ZS4NCiAgICA+ DQogICAgPiBTaWduZWQtb2ZmLWJ5OiBBZHJpYW4gQ2F0YW5naXUgPGFjYXRhbkBhbWF6b24uY29t Pg0KICAgID4gLS0tDQogICAgPiAgRG9jdW1lbnRhdGlvbi9taXNjLWRldmljZXMvc3lzZ2VuaWQu cnN0ICAgICAgICAgICAgfCAyMzYgKysrKysrKysrKysrKysrKw0KICAgID4gIERvY3VtZW50YXRp b24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0IHwgICAxICsNCiAgICA+ICBN QUlOVEFJTkVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgOCAr DQogICAgPiAgZHJpdmVycy9taXNjL0tjb25maWcgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAgMTYgKysNCiAgICA+ICBkcml2ZXJzL21pc2MvTWFrZWZpbGUgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8ICAgMSArDQogICAgPiAgZHJpdmVycy9taXNjL3N5c2dlbmlkLmMgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCAzMDcgKysrKysrKysrKysrKysrKysrKysrDQogICAg PiAgaW5jbHVkZS91YXBpL2xpbnV4L3N5c2dlbmlkLmggICAgICAgICAgICAgICAgICAgICAgfCAg MTcgKysNCiAgICA+ICA3IGZpbGVzIGNoYW5nZWQsIDU4NiBpbnNlcnRpb25zKCspDQogICAgPiAg Y3JlYXRlIG1vZGUgMTAwNjQ0IERvY3VtZW50YXRpb24vbWlzYy1kZXZpY2VzL3N5c2dlbmlkLnJz dA0KICAgID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21pc2Mvc3lzZ2VuaWQuYw0KICAg ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3VhcGkvbGludXgvc3lzZ2VuaWQuaA0KICAg ID4NCiAgICA+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21pc2MtZGV2aWNlcy9zeXNnZW5p ZC5yc3QgYi9Eb2N1bWVudGF0aW9uL21pc2MtZGV2aWNlcy9zeXNnZW5pZC5yc3QNCiAgICA+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgPiBpbmRleCAwMDAwMDAwLi40MzM3Y2EwDQogICAgPiAt LS0gL2Rldi9udWxsDQogICAgPiArKysgYi9Eb2N1bWVudGF0aW9uL21pc2MtZGV2aWNlcy9zeXNn ZW5pZC5yc3QNCiAgICA+IEBAIC0wLDAgKzEsMjM2IEBADQogICAgPiArLi4gU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjANCiAgICA+ICsNCiAgICA+ICs9PT09PT09PQ0KICAgID4gK1NZ U0dFTklEDQogICAgPiArPT09PT09PT0NCiAgICA+ICsNCiAgICA+ICtUaGUgU3lzdGVtIEdlbmVy YXRpb24gSUQgZmVhdHVyZSBpcyByZXF1aXJlZCBpbiB2aXJ0dWFsaXplZCBvcg0KICAgID4gK2Nv bnRhaW5lcml6ZWQgZW52aXJvbm1lbnRzIGJ5IGFwcGxpY2F0aW9ucyB0aGF0IHdvcmsgd2l0aCBs b2NhbCBjb3BpZXMNCiAgICA+ICtvciBjYWNoZXMgb2Ygd29ybGQtdW5pcXVlIGRhdGEgc3VjaCBh cyByYW5kb20gdmFsdWVzLCBVVUlEcywNCiAgICA+ICttb25vdG9uaWNhbGx5IGluY3JlYXNpbmcg Y291bnRlcnMsIGV0Yy4NCiAgICA+ICtTdWNoIGFwcGxpY2F0aW9ucyBjYW4gYmUgbmVnYXRpdmVs eSBhZmZlY3RlZCBieSBWTSBvciBjb250YWluZXINCiAgICA+ICtzbmFwc2hvdHRpbmcgd2hlbiB0 aGUgVk0gb3IgY29udGFpbmVyIGlzIGVpdGhlciBjbG9uZWQgb3IgcmV0dXJuZWQgdG8NCiAgICA+ ICthbiBlYXJsaWVyIHBvaW50IGluIHRpbWUuDQogICAgPiArDQogICAgPiArVGhlIFN5c3RlbSBH ZW5lcmF0aW9uIElEIGlzIGEgc2ltcGxlIGNvbmNlcHQgbWVhbnQgdG8gYWxsZXZpYXRlIHRoZQ0K ICAgID4gK2lzc3VlIGJ5IHByb3ZpZGluZyBhIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBjb3Vu dGVyIHRoYXQgY2hhbmdlcw0KICAgID4gK2VhY2ggdGltZSB0aGUgVk0gb3IgY29udGFpbmVyIGlz IHJlc3RvcmVkIGZyb20gYSBzbmFwc2hvdC4NCiAgICA+ICtUaGUgZHJpdmVyIGZvciBpdCBsaXZl cyBhdCBgYGRyaXZlcnMvbWlzYy9zeXNnZW5pZC5jYGAuDQogICAgPiArDQogICAgPiArVGhlIGBg c3lzZ2VuaWRgYCBkcml2ZXIgZXhwb3NlcyBhIG1vbm90b25pYyBpbmNyZW1lbnRhbCBTeXN0ZW0N CiAgICA+ICtHZW5lcmF0aW9uIHUzMiBjb3VudGVyIHZpYSBhIGNoYXItZGV2IEZTIGludGVyZmFj ZSBhY2Nlc3NpYmxlIHRocm91Z2gNCiAgICA+ICtgYC9kZXYvc3lzZ2VuaWRgYCB0aGF0IHByb3Zp ZGVzIHN5bmMgYW5kIGFzeW5jIFN5c0dlbiBjb3VudGVyIHVwZGF0ZQ0KICAgID4gK25vdGlmaWNh dGlvbnMuIEl0IGFsc28gcHJvdmlkZXMgU3lzR2VuIGNvdW50ZXIgcmV0cmlldmFsIGFuZA0KICAg ID4gK2NvbmZpcm1hdGlvbiBtZWNoYW5pc21zLg0KICAgID4gKw0KICAgID4gK1RoZSBjb3VudGVy IHN0YXJ0cyBmcm9tIHplcm8gd2hlbiB0aGUgZHJpdmVyIGlzIGluaXRpYWxpemVkIGFuZA0KICAg ID4gK21vbm90b25pY2FsbHkgaW5jcmVtZW50cyBldmVyeSB0aW1lIHRoZSBzeXN0ZW0gZ2VuZXJh dGlvbiBjaGFuZ2VzLg0KICAgID4gKw0KICAgID4gK1RoZSBgYHN5c2dlbmlkYGAgZHJpdmVyIGV4 cG9ydHMgdGhlIGBgdm9pZCBzeXNnZW5pZF9idW1wX2dlbmVyYXRpb24oKWBgDQogICAgPiArc3lt Ym9sIHdoaWNoIGNhbiBiZSB1c2VkIGJ5IGJhY2tlbmQgZHJpdmVycyB0byBkcml2ZSBzeXN0ZW0g Z2VuZXJhdGlvbg0KICAgID4gK2NoYW5nZXMgYmFzZWQgb24gaGFyZHdhcmUgZXZlbnRzLg0KICAg ID4gK1N5c3RlbSBnZW5lcmF0aW9uIGNoYW5nZXMgY2FuIGFsc28gYmUgZHJpdmVuIGJ5IHVzZXJz cGFjZSBzb2Z0d2FyZQ0KICAgID4gK3Rocm91Z2ggYSBkZWRpY2F0ZWQgZHJpdmVyIGlvY3RsLg0K ICAgID4gKw0KICAgID4gK1VzZXJzcGFjZSBhcHBsaWNhdGlvbnMgb3IgbGlicmFyaWVzIGNhbiAo YSlzeW5jaHJvbm91c2x5IGNvbnN1bWUgdGhlDQogICAgPiArc3lzdGVtIGdlbmVyYXRpb24gY291 bnRlciB0aHJvdWdoIHRoZSBwcm92aWRlZCBGUyBpbnRlcmZhY2UsIHRvIG1ha2UNCiAgICA+ICth bnkgbmVjZXNzYXJ5IGludGVybmFsIGFkanVzdG1lbnRzIGZvbGxvd2luZyBhIHN5c3RlbSBnZW5l cmF0aW9uIHVwZGF0ZS4NCiAgICA+ICsNCiAgICA+ICtEcml2ZXIgRlMgaW50ZXJmYWNlOg0KICAg ID4gKw0KICAgID4gK2Bgb3BlbigpYGA6DQogICAgPiArICBXaGVuIHRoZSBkZXZpY2UgaXMgb3Bl bmVkLCBhIGNvcHkgb2YgdGhlIGN1cnJlbnQgU3lzLUdlbi1JZCAoY291bnRlcikNCiAgICA+ICsg IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgb3BlbiBmaWxlIGRlc2NyaXB0b3IuIFRoZSBkcml2ZXIg bm93IHRyYWNrcw0KICAgID4gKyAgdGhpcyBmaWxlIGFzIGFuIGluZGVwZW5kZW50ICp3YXRjaGVy Ki4gVGhlIGRyaXZlciB0cmFja3MgaG93IG1hbnkNCiAgICA+ICsgIHdhdGNoZXJzIGFyZSBhd2Fy ZSBvZiB0aGUgbGF0ZXN0IFN5cy1HZW4tSWQgY291bnRlciBhbmQgaG93IG1hbnkgb2YNCiAgICA+ ICsgIHRoZW0gYXJlICpvdXRkYXRlZCo7IG91dGRhdGVkIGJlaW5nIHRob3NlIHRoYXQgaGF2ZSBs aXZlZCB0aHJvdWdoDQogICAgPiArICBhIFN5cy1HZW4tSWQgY2hhbmdlIGJ1dCBub3QgeWV0IGNv bmZpcm1lZCB0aGUgbmV3IGdlbmVyYXRpb24gY291bnRlci4NCiAgICA+ICsNCiAgICA+ICtgYHJl YWQoKWBgOg0KICAgID4gKyAgUmVhZCBpcyBtZWFudCB0byBwcm92aWRlIHRoZSAqbmV3KiBzeXN0 ZW0gZ2VuZXJhdGlvbiBjb3VudGVyIHdoZW4gYQ0KICAgID4gKyAgZ2VuZXJhdGlvbiBjaGFuZ2Ug dGFrZXMgcGxhY2UuIFRoZSByZWFkIG9wZXJhdGlvbiBibG9ja3MgdW50aWwgdGhlDQogICAgPiAr ICBhc3NvY2lhdGVkIGNvdW50ZXIgaXMgbm8gbG9uZ2VyIHVwIHRvIGRhdGUsIGF0IHdoaWNoIHBv aW50IHRoZSBuZXcNCiAgICA+ICsgIGNvdW50ZXIgaXMgcHJvdmlkZWQvcmV0dXJuZWQuDQogICAg PiArICBOb25ibG9ja2luZyBgYHJlYWQoKWBgIHVzZXMgYGBFQUdBSU5gYCB0byBzaWduYWwgdGhh dCB0aGVyZSBpcyBubw0KICAgID4gKyAgKm5ldyogY291bnRlciB2YWx1ZSBhdmFpbGFibGUuIFRo ZSBnZW5lcmF0aW9uIGNvdW50ZXIgaXMgY29uc2lkZXJlZA0KICAgID4gKyAgKm5ldyogZm9yIGVh Y2ggb3BlbiBmaWxlIGRlc2NyaXB0b3IgdGhhdCBoYXNuJ3QgY29uZmlybWVkIHRoZSBuZXcNCiAg ICA+ICsgIHZhbHVlIGZvbGxvd2luZyBhIGdlbmVyYXRpb24gY2hhbmdlLiBUaGVyZWZvcmUsIG9u Y2UgYSBnZW5lcmF0aW9uDQogICAgPiArICBjaGFuZ2UgdGFrZXMgcGxhY2UsIGFsbCBgYHJlYWQo KWBgIGNhbGxzIHdpbGwgaW1tZWRpYXRlbHkgcmV0dXJuIHRoZQ0KICAgID4gKyAgbmV3IGdlbmVy YXRpb24gY291bnRlciBhbmQgd2lsbCBjb250aW51ZSB0byBkbyBzbyB1bnRpbCB0aGUNCiAgICA+ ICsgIG5ldyB2YWx1ZSBpcyBjb25maXJtZWQgYmFjayB0byB0aGUgZHJpdmVyIHRocm91Z2ggYGB3 cml0ZSgpYGAuDQogICAgPiArICBQYXJ0aWFsIHJlYWRzIGFyZSBub3QgYWxsb3dlZCAtIHJlYWQg YnVmZmVyIG5lZWRzIHRvIGJlIGF0IGxlYXN0DQogICAgPiArICAzMiBiaXRzIGluIHNpemUuDQog ICAgPiArDQogICAgPiArYGB3cml0ZSgpYGA6DQogICAgPiArICBXcml0ZSBpcyB1c2VkIHRvIGNv bmZpcm0gdGhlIHVwLXRvLWRhdGUgU3lzIEdlbiBjb3VudGVyIGJhY2sgdG8gdGhlDQogICAgPiAr ICBkcml2ZXIuDQogICAgPiArICBGb2xsb3dpbmcgYSBWTSBnZW5lcmF0aW9uIGNoYW5nZSwgYWxs IGV4aXN0aW5nIHdhdGNoZXJzIGFyZSBtYXJrZWQNCiAgICA+ICsgIGFzICpvdXRkYXRlZCouIEVh Y2ggZmlsZSBkZXNjcmlwdG9yIHdpbGwgbWFpbnRhaW4gdGhlICpvdXRkYXRlZCoNCiAgICA+ICsg IHN0YXR1cyB1bnRpbCBhIGBgd3JpdGUoKWBgIGNvbmZpcm1zIHRoZSB1cC10by1kYXRlIGNvdW50 ZXIgYmFjayB0bw0KICAgID4gKyAgdGhlIGRyaXZlci4NCiAgICA+ICsgIFBhcnRpYWwgd3JpdGVz IGFyZSBub3QgYWxsb3dlZCAtIHdyaXRlIGJ1ZmZlciBzaG91bGQgYmUgZXhhY3RseQ0KICAgID4g KyAgMzIgYml0cyBpbiBzaXplLg0KICAgID4gKw0KICAgID4gK2BgcG9sbCgpYGA6DQogICAgPiAr ICBQb2xsIGlzIGltcGxlbWVudGVkIHRvIGFsbG93IHBvbGxpbmcgZm9yIGdlbmVyYXRpb24gY291 bnRlciB1cGRhdGVzLg0KICAgID4gKyAgU3VjaCB1cGRhdGVzIHJlc3VsdCBpbiBgYEVQT0xMSU5g YCBwb2xsaW5nIHN0YXR1cyB1bnRpbCB0aGUgbmV3DQogICAgPiArICB1cC10by1kYXRlIGNvdW50 ZXIgaXMgY29uZmlybWVkIGJhY2sgdG8gdGhlIGRyaXZlciB0aHJvdWdoIGENCiAgICA+ICsgIGBg d3JpdGUoKWBgLg0KICAgID4gKw0KICAgID4gK2BgaW9jdGwoKWBgOg0KICAgID4gKyAgVGhlIGRy aXZlciBhbHNvIGFkZHMgc3VwcG9ydCBmb3Igd2FpdGluZyBvbiBvcGVuIGZpbGUgZGVzY3JpcHRv cnMNCiAgICA+ICsgIHRoYXQgaGF2ZW4ndCBhY2tub3dsZWRnZWQgYSBnZW5lcmF0aW9uIGNvdW50 ZXIgdXBkYXRlLCBhcyB3ZWxsIGFzIGENCiAgICA+ICsgIG1lY2hhbmlzbSBmb3IgdXNlcnNwYWNl IHRvICpmb3JjZSogYSBnZW5lcmF0aW9uIHVwZGF0ZToNCiAgICA+ICsNCiAgICA+ICsgIC0gU1lT R0VOSURfV0FJVF9XQVRDSEVSUzogYmxvY2tzIHVudGlsIHRoZXJlIGFyZSBubyBtb3JlICpvdXRk YXRlZCoNCiAgICA+ICsgICAgd2F0Y2hlcnMsIG9yIGlmIGEgYGB0aW1lb3V0YGAgYXJndW1lbnQg aXMgcHJvdmlkZWQsIHVudGlsIHRoZQ0KICAgID4gKyAgICB0aW1lb3V0IGV4cGlyZXMuDQogICAg PiArICAgIElmIHRoZSBjdXJyZW50IGNhbGxlciBpcyAqb3V0ZGF0ZWQqIG9yIGEgZ2VuZXJhdGlv biBjaGFuZ2UgaGFwcGVucw0KICAgID4gKyAgICB3aGlsZSB3YWl0aW5nICh0aHVzIG1ha2luZyBj dXJyZW50IGNhbGxlciAqb3V0ZGF0ZWQqKSwgdGhlIGlvY3RsDQogICAgPiArICAgIHJldHVybnMg YGAtRUlOVFJgYCB0byBzaWduYWwgdGhlIHVzZXIgdG8gaGFuZGxlIGV2ZW50IGFuZCByZXRyeS4N CiAgICA+ICsgIC0gU1lTR0VOSURfRk9SQ0VfR0VOX1VQREFURTogZm9yY2VzIGEgZ2VuZXJhdGlv biBjb3VudGVyIGluY3JlbWVudC4NCiAgICA+ICsgICAgSXQgdGFrZXMgYSBgYG1pbmltdW0tZ2Vu ZXJhdGlvbmBgIGFyZ3VtZW50IHdoaWNoIHJlcHJlc2VudHMgdGhlDQogICAgPiArICAgIG1pbmlt dW0gdmFsdWUgdGhlIGdlbmVyYXRpb24gY291bnRlciB3aWxsIGJlIGluY3JlbWVudGVkIHRvLiBG b3INCiAgICA+ICsgICAgZXhhbXBsZSBpZiBjdXJyZW50IGdlbmVyYXRpb24gaXMgYGA1YGAgYW5k IGBgU1lTR0VOSURfRk9SQ0VfR0VOX1VQREFURSg4KWBgDQogICAgPiArICAgIGlzIGNhbGxlZCwg dGhlIGdlbmVyYXRpb24gY291bnRlciB3aWxsIGluY3JlbWVudCB0byBgYDhgYC4NCiAgICA+ICsg ICAgVGhpcyBJT0NUTCBjYW4gb25seSBiZSB1c2VkIGJ5IHByb2Nlc3NlcyB3aXRoIENBUF9DSEVD S1BPSU5UX1JFU1RPUkUNCiAgICA+ICsgICAgb3IgQ0FQX1NZU19BRE1JTiBjYXBhYmlsaXRpZXMu DQogICAgPiArDQogICAgPiArYGBtbWFwKClgYDoNCiAgICA+ICsgIFRoZSBkcml2ZXIgc3VwcG9y dHMgYGBQUk9UX1JFQUQsIE1BUF9TSEFSRURgYCBtbWFwcyBvZiBhIHNpbmdsZSBwYWdlDQogICAg PiArICBpbiBzaXplLiBUaGUgZmlyc3QgNCBieXRlcyBvZiB0aGUgbWFwcGVkIHBhZ2Ugd2lsbCBj b250YWluIGFuDQogICAgPiArICB1cC10by1kYXRlIHUzMiBjb3B5IG9mIHRoZSBzeXN0ZW0gZ2Vu ZXJhdGlvbiBjb3VudGVyLg0KICAgID4gKyAgVGhlIG1hcHBlZCBtZW1vcnkgY2FuIGJlIHVzZWQg YXMgYSBsb3ctbGF0ZW5jeSBnZW5lcmF0aW9uIGNvdW50ZXINCiAgICA+ICsgIHByb2JlIG1lY2hh bmlzbSBpbiBjcml0aWNhbCBzZWN0aW9ucyAtIHNlZSBleGFtcGxlcy4NCiAgICA+DQoNCiAgICBG cm9tIHdoYXQgSSBoYXZlIHNlZW4gdGhpcyBtbWFwIGludGVyZmFjZSBpcyBzdGlsbCBmdW5kYW1l bnRhbGx5IHJhY3kuDQogICAgSG93IGFib3V0IHNwbGl0dGluZyBpdCB0byBhIHNlcGFyYXRlIHBh dGNoPw0KDQpIaSBhbGwhDQpNaWNoYWVsLCB5b3UncmUgcmlnaHQgdGhhdCB0aGlzIGlzIGZ1bmRh bWVudGFsbHkgcmFjeSBvbiBpdHMgb3duLiBFdmVuIGlmIHdlIGVsaW1pbmF0ZSB0aGUNCklSUSBy YWNlIGJ5IG1tYXBpbmcgSFcgZGlyZWN0bHksIGl0IGlzIHN0aWxsIGZ1bmRhbWVudGFsbHkgcmFj eSB3aGVuIGxvb2tpbmcgb25lIG9yIG1vcmUNCmxheWVycyBhYm92ZS4NClRoZSBvbmx5IHdheSB0 byBlbGltaW5hdGUgcmFjZXMgaXMgaGF2aW5nIGEgc3lzdGVtLWxldmVsIG92ZXJsb3JkIGVudGl0 eSB0aGF0IHF1aWVzY2VzIHRoZQ0Kc3lzdGVtIGJlZm9yZSBhIHNuYXBzaG90IHRoZW4sIG9uIHNu YXBzaG90LWxvYWQvcmVzdW1lLCBtYWtlcyBzdXJlIGFsbCBzb2Z0d2FyZSBhZGp1c3RzDQpiZWZv cmUgdW5xdWllc2NpbmcgYW5kIGFsbG93aW5nIHNhZmUgd29ya2xvYWQgY29udGludWF0aW9uLg0K V2l0aG91dCB0aGlzIG92ZXJsb3JkIHN5bmNocm9uaXphdGlvbiB0aGVyZSB3aWxsIGJlIHJhY2Vz IGluIHRoZSBjYWxsZXJzIG9mIHRoZSBzeXNnZW5pZCBBUEkNCmV2ZW4gaWYgdGhlIEFQSSBzeXNj YWxsIGl0c2VsZiBpcyByYWNlLWZyZWUuDQpMZXQncyB0YWtlIGFuIE9wZW5TU0wgc2Vzc2lvbiB0 b2tlbiBmb3IgZXhhbXBsZS4gT3BlblNTTCBpcyBhIHByaW1lIHRhcmdldCBmb3IgdGhlIG1tYXAo KQ0KaW50ZXJmYWNlIHNvIGl0IGNhbiBiZSBmYXN0IChjaGVja3MgYWdhaW5zdCBtZW1vcnkgLSBy ZWFkL3dyaXRlIHN5c2NhbGxzIGluIHRoZSBob3RwYXRoIHdpbGwNCmxpa2VseSBub3Qgd29yayku IEV2ZW4gaWYgdGhlIGxpYnJhcnkgY29kZSBpcyBtYWRlIDEwMCUgcmFjZS1mcmVlLCB0aGUgc2Vz c2lvbiB0b2tlbiBzdGlsbCBsaXZlcw0KaW4gdGhlIGNhbGxlciBvZiB0aGUgbGlicmFyeSBhbmQv b3IgaW4gdGhlIE9TIG5ldHdvcmsgc3RhY2ssIGV0Yy4NCg0KV2UgZXZlbiBoYXZlIHRoZSBzYW1l IHByb2JsZW0gd2l0aCB0aGUgdHJhbnNhY3Rpb25hbCByZWFkL3dyaXRlIEFQSS4gSXQgdG9vLCBp cyByYWN5IGlmDQpzbmFwc2hvdHMgY2FuIGhhcHBlbiBhdCBhbnkgYXJiaXRyYXJ5IHRpbWUgZHVy aW5nIGFuIGFjdGl2ZSB3b3JrbG9hZC4gQSBsaWJyYXJ5IG9yIGFwcGxpY2F0aW9uDQpjYW4gZ28g dGhyb3VnaCB0aGUgcmVhZC93cml0ZSB0cmFuc2FjdGlvbiBzdWNjZXNzZnVsbHkgKHJhY2UtZnJl ZSkgYW5kIGdlbmVyYXRlIGENCiJzYWZlL3VuaXF1ZSIgc2VjcmV0LCB0aGVuIGdldCBzbmFwc2hv dHRlZCB3aGlsZSB0aGF0IHNlY3JldCBpcyBpbi1mbGlnaHQgd2l0aCBubyB3YXkgdG8gY2F0Y2gN Cml0IHVubGVzcyB3ZSdkIGNoZWNrIGdlbmVyYXRpb24gYXQgZXZlcnkgbGF5ZXIsIGV2ZXJ5IHN0 ZXAgb2YgdGhlIHdheSAod2hpY2ggbG9va3MgaW1wb3NzaWJsZQ0KdG8gbWUpLg0KDQpCb3R0b20g bGluZSBpcyB3ZSBkb24ndCBoYXZlIGEgd2F5IHRvIHRyYWNrIGFsbCBvZiB0aGVzZSBpbi1mbGln aHQgc2VjcmV0cyBhbmQgZHluYW1pY2FsbHkgc2NydWINCnRoZW0gZnJvbSBleGlzdGVuY2Ugd2l0 aCBzbmFwc2hvdCBldmVudHMgaGFwcGVuaW5nIGFyYml0cmFyaWx5Lg0KDQpCdXQsIHdlIGNhbiBk byB0aGUgbmV4dCBiZXN0IHRoaW5nLiBTaW1wbGlmeSB0aGUgcHJvYmxlbSBzcGFjZSwgZHJvcCB0 aGUgYXJiaXRyYXJ5IHBhcnQgYW5kDQp0YWtlIHNvbWUgY29udHJvbCBvdmVyIHRoZSBzbmFwc2hv dCBmbG93LiBVc2UgYW4gb3ZlcmxvcmQgZW50aXR5IHRoYXQgcXVpZXNjZXMgdGhlIHN5c3RlbQ0K YmVmb3JlIHNuYXBzaG90LCBhbmQgdW4tcXVpZXNjZXMgcG9zdC1zbmFwc2hvdC1yZXN1bWUgX29u bHkgYWZ0ZXJfIHN5c3RlbSBjb21wb25lbnRzDQpoYXZlIHJlYWRqdXN0ZWQgdG8gbmV3IGVudmly b25tZW50L2dlbmVyYXRpb24uDQpBZGQgc3lzZ2VuaWQgZnJhbWV3b3JrIHRoYXQgc3RhbmRhcmRp emVzIGFuIEFQSSBmb3Igc3lzdGVtIHNvZnR3YXJlIHRvIGZpbmQgb3V0IGFib3V0DQpuZWVkaW5n IHRvIHJlYWRqdXN0IGFuZCBhdCB0aGUgc2FtZSB0aW1lIHByb3ZpZGUgYSBtZWNoYW5pc20gZm9y IHRoZSBvdmVybG9yZCBlbnRpdHkgdG8gd2FpdA0KZm9yIGV2ZXJ5b25lIHRvIGJlIGRvbmUsIHRo ZSBzeXN0ZW0gdG8gaGF2ZSByZWFkanVzdGVkLCBzbyBpdCBjYW4gdW4tcXVpZXNjZS4NCg0KSW4g dGhpcyBjb250ZXh0LCB0aGlzIGlzIGhvdyBJIHNlZSB0aGUgdXRpbGl0eSBhbmQgc2FmZS11c2Fn ZSBvZiB0aGUgc3lzZ2VuaWQgQVBJOg0KDQotIFRoZSBwb2xsKCksIHJlYWQoKSwgd3JpdGUoKSBv cGVyYXRpb25zIGFyZSB1c2VkIGluIGV2ZW50IGxvb3BzIHNvIHNvZnR3YXJlIGlzIG5vdGlmaWVk ICh3aGlsZQ0KICBpbiBxdWllc2NlZCBzdGF0ZSkgdGhhdCBnZW5lcmF0aW9uIGhhcyBjaGFuZ2Vk IGFuZCB0aGV5IG5lZWQgdG8gZG8gdGhlaXIgc3BlY2lmaWMgaW50ZXJuYWwNCiAgYWRqdXN0bWVu dHMuIElmIGRvbmUgdHJhbnNhY3Rpb25hbGx5LCB0aGV5IGNhbiBBQ0sgdGhhdCB0aGV5IGFyZSBy ZWFkeSB0byB0aHJpdmUgaW4gdGhlIG5ldw0KICBnZW5lcmF0aW9uLg0KLSBUaGUgV0FJVF9XQVRD SEVSUyBpb2N0bCgpIGlzIHVzZWQgYnkgdGhlIG92ZXJsb3JkIHRvIGtub3cgd2hlbiBzeXN0ZW0g aXMgcmVhZHkgZm9yDQogIHVuLXF1aWVzY2UuDQotIFN5c0dlbklEIG5lZWRzIGEgKGN1cnJlbnRs eSBtaXNzaW5nKSBJT0NUTCBvciBzb21lIG90aGVyIHR5cGUgb2Yga25vYiBmb3IgdXNlcnMgdG8N CiAgZW5hYmxlL2Rpc2FibGUgdHJhY2tpbmcsIHdoZXJlIHRyYWNraW5nIG1lYW5zIHN5c2dlbmlk IGRyaXZlciBrZWVwaW5nIHRyYWNrIG9mIHRoYXQgRkQgYXMNCiAgYSAqd2F0Y2hlciogLSBrZWVw aW5nIHRyYWNrIGlmIGl0IGlzIHVwLXRvLWRhdGUgb3Igb3V0ZGF0ZWQuDQotIFRoZXJlIGlzIGEg Y2xhc3Mgb2Ygc29mdHdhcmUgKGxpa2UgUFJORyBsaWJyYXJpZXMgb3IgT3BlblNTTCBzaW5jZSB3 ZSB0YWxrZWQgYWJvdXQgaXQgZWFybGllcikNCiAgdGhhdCBkb2Vzbid0IGZpdCB0aGUgZXZlbnQt bG9vcCBtb2RlbCBhbmQgYWxzbyBoYXMgc3RyaWN0IGxhdGVuY3kgcmVxdWlyZW1lbnRzLiBUaGVz ZSBjYW4NCiAgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIG1tYXAoKSBpbnRlcmZhY2UgYW5kIGxhemls eSBhZGp1c3Qgb24tZGVtYW5kIHdoZW5ldmVyIHRoZXkgYXJlDQogIGNhbGxlZCBfYWZ0ZXIgdW4t cXVpZXNjZV8uDQogIEZvciBhIHdlbGwtZGVzaWduZWQgc2VydmljZSBzdGFjaywgdGhlc2UgbGli cmFyaWVzIHNob3VsZCBub3QgYmUgY2FsbGVkIHdoaWxlIHN5c3RlbSBpcw0KICBxdWllc2NlZC4g V2hlbiB3b3JrbG9hZCBpcyByZXN1bWVkIGJ5IHRoZSBvdmVybG9yZCwgb24gdGhlIGZpcnN0IGNh bGwgaW50byB0aGVzZSBsaWJzLCB0aGV5DQogIHdpbGwgSklUIHJlYWRqdXN0IHJhY2UtZnJlZS4N CiAgVXNlcnMgb2YgbW1hcCgpIGludGVyZmFjZSB3b3VsZCBkaXNhYmxlIHdhdGNoZXIgdHJhY2tp bmcgc2luY2UgdGhleSBsYXppbHkgb24tZGVtYW5kDQogIHJlYWRqdXN0IGFuZCB3YWl0aW5nIG9u IHRoZW0gZG9lc24ndCBtYWtlIHNlbnNlLg0KDQpOb3cgSSBrbm93IHRoYXQgdGhlcmUgaXMgYSBs b3Qgb2Ygc3VidGxldHkgaW52b2x2ZWQgaGVyZSwgYnV0IHRoaXMgaXMgYSBoYXJkIHByb2JsZW0g d2l0aG91dA0KYW4gZWFzeSBzaW1wbGUgc29sdXRpb24uIElmIHlvdSBhbmQgcGVvcGxlIGhlcmUg YWdyZWUgb24gdGhpcyBhcHByb2FjaCBJIHdpbGwgZG9jdW1lbnQgYWxsIG9mDQp0aGlzIGluIGdy ZWF0IGRldGFpbCB3aXRoIGJpZyBmYXQgd2FybmluZ3Mgb24gaG93IHRvIHNhZmVseSB1c2UgaXQg KGluIGRyaXZlciBkb2N1bWVudGF0aW9uKS4NCg0KSSdtIHNvcnJ5IGZvciB0aGUgbWFzc2l2ZSBy ZXBseSwgYnV0IHRoZSBwcm9wb3NlZCBtZWNoYW5pc20gYW5kIGl0cyBkZXRhaWxzIGFyZSBhIGRp cmVjdA0KcmVzdWx0IG9mIHRoZSB2YWx1YWJsZSBmZWVkYmFjayBjb21pbmcgZnJvbSB0aGlzIHVw c3RyZWFtIHJldmlldywgYW5kIEkgd2FudCB0byBtYWtlIHN1cmUNCndlIGFsaWduIG9uIGFsbCBk ZXRhaWxzIHNvIHdlIGdldCBpdCByaWdodCENCg0KTGV0IG1lIGtub3cgd2hhdCB5b3UgYWxsIHRo aW5rIQ0KDQogICAgPiArYGBjbG9zZSgpYGA6DQogICAgPiArICBSZW1vdmVzIHRoZSBmaWxlIGRl c2NyaXB0b3IgYXMgYSBzeXN0ZW0gZ2VuZXJhdGlvbiBjb3VudGVyICp3YXRjaGVyKi4NCiAgICA+ ICsNCiAgICA+ICtFeGFtcGxlIGFwcGxpY2F0aW9uIHdvcmtmbG93cw0KICAgID4gKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgPiArDQogICAgPiArMSkgV2F0Y2hkb2cgdGhyZWFk IHNpbXBsaWZpZWQgZXhhbXBsZTo6DQogICAgPiArDQogICAgPiArICAgICB2b2lkIHdhdGNoZG9n X3RocmVhZF9oYW5kbGVyKGludCAqdGhyZWFkX2FjdGl2ZSkNCiAgICA+ICsgICAgIHsNCiAgICA+ ICsgICAgICAgICAgICAgdW5zaWduZWQgaW50IGdlbmlkOw0KICAgID4gKyAgICAgICAgICAgICBp bnQgZmQgPSBvcGVuKCIvZGV2L3N5c2dlbmlkIiwgT19SRFdSIHwgT19DTE9FWEVDLCBTX0lSVVNS IHwgU19JV1VTUik7DQogICAgPiArDQogICAgPiArICAgICAgICAgICAgIGRvIHsNCiAgICA+ICsg ICAgICAgICAgICAgICAgICAgICAvLyByZWFkIG5ldyBnZW4gSUQgLSBibG9ja3MgdW50aWwgVk0g Z2VuZXJhdGlvbiBjaGFuZ2VzDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgcmVhZChmZCwg JmdlbmlkLCBzaXplb2YoZ2VuaWQpKTsNCiAgICA+ICsNCiAgICA+ICsgICAgICAgICAgICAgICAg ICAgICAvLyBiZWNhdXNlIG9mIFZNIGdlbmVyYXRpb24gY2hhbmdlLCB3ZSBuZWVkIHRvIHJlYnVp bGQgd29ybGQNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICByZXNlZWRfYXBwX2VudigpOw0K ICAgID4gKw0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgIC8vIGNvbmZpcm0gd2UncmUgZG9u ZSBoYW5kbGluZyBnZW4gSUQgdXBkYXRlDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgd3Jp dGUoZmQsICZnZW5pZCwgc2l6ZW9mKGdlbmlkKSk7DQogICAgPiArICAgICAgICAgICAgIH0gd2hp bGUgKGF0b21pY19yZWFkKHRocmVhZF9hY3RpdmUpKTsNCiAgICA+ICsNCiAgICA+ICsgICAgICAg ICAgICAgY2xvc2UoZmQpOw0KICAgID4gKyAgICAgfQ0KICAgID4gKw0KICAgID4gKzIpIEFTWU5D IHNpbXBsaWZpZWQgZXhhbXBsZTo6DQogICAgPiArDQogICAgPiArICAgICB2b2lkIGhhbmRsZV9p b19vbl9zeXNnZW5mZChpbnQgc3lzZ2VuZmQpDQogICAgPiArICAgICB7DQogICAgPiArICAgICAg ICAgICAgIHVuc2lnbmVkIGludCBnZW5pZDsNCiAgICA+ICsNCiAgICA+ICsgICAgICAgICAgICAg Ly8gcmVhZCBuZXcgZ2VuIElEIC0gd2UgbmVlZCBpdCB0byBjb25maXJtIHdlJ3ZlIGhhbmRsZWQg dXBkYXRlDQogICAgPiArICAgICAgICAgICAgIHJlYWQoZmQsICZnZW5pZCwgc2l6ZW9mKGdlbmlk KSk7DQogICAgPiArDQogICAgPiArICAgICAgICAgICAgIC8vIGJlY2F1c2Ugb2YgVk0gZ2VuZXJh dGlvbiBjaGFuZ2UsIHdlIG5lZWQgdG8gcmVidWlsZCB3b3JsZA0KICAgID4gKyAgICAgICAgICAg ICByZXNlZWRfYXBwX2VudigpOw0KICAgID4gKw0KICAgID4gKyAgICAgICAgICAgICAvLyBjb25m aXJtIHdlJ3JlIGRvbmUgaGFuZGxpbmcgdGhlIGdlbiBJRCB1cGRhdGUNCiAgICA+ICsgICAgICAg ICAgICAgd3JpdGUoZmQsICZnZW5pZCwgc2l6ZW9mKGdlbmlkKSk7DQogICAgPiArICAgICB9DQog ICAgPiArDQogICAgPiArICAgICBpbnQgbWFpbigpIHsNCiAgICA+ICsgICAgICAgICAgICAgaW50 IGVwZmQsIHN5c2dlbmZkOw0KICAgID4gKyAgICAgICAgICAgICBzdHJ1Y3QgZXBvbGxfZXZlbnQg ZXY7DQogICAgPiArDQogICAgPiArICAgICAgICAgICAgIGVwZmQgPSBlcG9sbF9jcmVhdGUoRVBP TExfUVVFVUVfTEVOKTsNCiAgICA+ICsNCiAgICA+ICsgICAgICAgICAgICAgc3lzZ2VuZmQgPSBv cGVuKCIvZGV2L3N5c2dlbmlkIiwNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg T19SRFdSIHwgT19DTE9FWEVDIHwgT19OT05CTE9DSywNCiAgICA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgU19JUlVTUiB8IFNfSVdVU1IpOw0KICAgID4gKw0KICAgID4gKyAgICAgICAg ICAgICAvLyByZWdpc3RlciBzeXNnZW5pZCBmb3IgcG9sbGluZw0KICAgID4gKyAgICAgICAgICAg ICBldi5ldmVudHMgPSBFUE9MTElOOw0KICAgID4gKyAgICAgICAgICAgICBldi5kYXRhLmZkID0g c3lzZ2VuZmQ7DQogICAgPiArICAgICAgICAgICAgIGVwb2xsX2N0bChlcGZkLCBFUE9MTF9DVExf QURELCBzeXNnZW5mZCwgJmV2KTsNCiAgICA+ICsNCiAgICA+ICsgICAgICAgICAgICAgLy8gcmVn aXN0ZXIgb3RoZXIgcGFydHMgb2YgeW91ciBhcHAgZm9yIHBvbGxpbmcNCiAgICA+ICsgICAgICAg ICAgICAgLy8gLi4uDQogICAgPiArDQogICAgPiArICAgICAgICAgICAgIHdoaWxlICgxKSB7DQog ICAgPiArICAgICAgICAgICAgICAgICAgICAgLy8gd2FpdCBmb3Igc29tZXRoaW5nIHRvIGRvLi4u DQogICAgPiArICAgICAgICAgICAgICAgICAgICAgaW50IG5mZHMgPSBlcG9sbF93YWl0KGVwZmQs IGV2ZW50cywNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BWF9FUE9MTF9F VkVOVFNfUEVSX1JVTiwNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVQT0xM X1JVTl9USU1FT1VUKTsNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICBpZiAobmZkcyA8IDAp IGRpZSgiRXJyb3IgaW4gZXBvbGxfd2FpdCEiKTsNCiAgICA+ICsNCiAgICA+ICsgICAgICAgICAg ICAgICAgICAgICAvLyBmb3IgZWFjaCByZWFkeSBmZA0KICAgID4gKyAgICAgICAgICAgICAgICAg ICAgIGZvcihpbnQgaSA9IDA7IGkgPCBuZmRzOyBpKyspIHsNCiAgICA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBmZCA9IGV2ZW50c1tpXS5kYXRhLmZkOw0KICAgID4gKw0KICAg ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZkID09IHN5c2dlbmZkKQ0KICAg ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVfaW9fb25fc3lz Z2VuZmQoc3lzZ2VuZmQpOw0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxz ZQ0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVfc29t ZV9vdGhlcl9wYXJ0X29mX3RoZV9hcHAoZmQpOw0KICAgID4gKyAgICAgICAgICAgICAgICAgICAg IH0NCiAgICA+ICsgICAgICAgICAgICAgfQ0KICAgID4gKw0KICAgID4gKyAgICAgICAgICAgICBy ZXR1cm4gMDsNCiAgICA+ICsgICAgIH0NCiAgICA+ICsNCiAgICA+ICszKSBNYXBwZWQgbWVtb3J5 IHBvbGxpbmcgc2ltcGxpZmllZCBleGFtcGxlOjoNCiAgICA+ICsNCiAgICA+ICsgICAgIC8qDQog ICAgPiArICAgICAgKiBhcHAvbGlicmFyeSBmdW5jdGlvbiB0aGF0IHByb3ZpZGVzIGNhY2hlZCBz ZWNyZXRzDQogICAgPiArICAgICAgKi8NCiAgICA+ICsgICAgIGNoYXIgKiBzYWZlX2NhY2hlZF9z ZWNyZXQoYXBwX2RhdGFfdCAqYXBwKQ0KICAgID4gKyAgICAgew0KICAgID4gKyAgICAgICAgICAg ICBjaGFyICpzZWNyZXQ7DQogICAgPiArICAgICAgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGlu dCAqY29uc3QgZ2VuaWRfcHRyID0gZ2V0X3N5c2dlbmlkX21hcHBpbmcoYXBwKTsNCiAgICA+ICsg ICAgIGFnYWluOg0KICAgID4gKyAgICAgICAgICAgICBzZWNyZXQgPSBfX2NhY2hlZF9zZWNyZXQo YXBwKTsNCiAgICA+ICsNCiAgICA+ICsgICAgICAgICAgICAgaWYgKHVubGlrZWx5KCpnZW5pZF9w dHIgIT0gYXBwLT5jYWNoZWRfZ2VuaWQpKSB7DQogICAgPiArICAgICAgICAgICAgICAgICAgICAg YXBwLT5jYWNoZWRfZ2VuaWQgPSAqZ2VuaWRfcHRyOw0KDQogICAgQW5kIHRoaXMgaXMgcmFjeSwg aXNuJ3QgaXQ/IFRoZXJlIGlzIG5vdCBzeXN0ZW0gY2FsbCB0byBzeW5jaHJvbml6ZQ0KICAgIHdp dGggaW50ZXJydXB0cywgc28gdGhlIHZhbHVlIHRoaXMgcmVhZHMgY291bGQgYmUgb3V0IG9mIGRh dGUuDQoNClllcywgd2l0aG91dCBzeXN0ZW0gcXVpZXNjaW5nIGFuZCBjb250cm9sbGVkIHNuYXBz aG90IG1vbWVudHMsIGFsbCBvZiB0aGVzZSBhcmUgcmFjeS4NCkkgd2lsbCByZXdyaXRlIGRvY3Vt ZW50YXRpb24gdG8gY2FwdHVyZSBhbGwgZGV0YWlscyBhbmQgcGl0ZmFsbHMgYW5kIGhvdyB0byB1 c2Ugc3lzZ2VuaWQNCnNhZmVseS4NCg0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgIGJhcnJp ZXIoKTsNCiAgICA+ICsNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAvLyByZWJ1aWxkIHdv cmxkIHRoZW4gY29uZmlybSB0aGUgZ2VuaWQgdXBkYXRlICh0aHJ1IHdyaXRlKQ0KICAgID4gKyAg ICAgICAgICAgICAgICAgICAgIHJlYnVpbGRfY2FjaGVzKGFwcCk7DQogICAgPiArDQogICAgPiAr ICAgICAgICAgICAgICAgICAgICAgYWNrX3N5c2dlbmlkX3VwZGF0ZShhcHApOw0KICAgID4gKw0K ICAgID4gKyAgICAgICAgICAgICAgICAgICAgIGdvdG8gYWdhaW47DQogICAgPiArICAgICAgICAg ICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAgICAgICAgICAgcmV0dXJuIHNlY3JldDsNCiAgICA+ ICsgICAgIH0NCiAgICA+ICsNCiAgICA+ICs0KSBPcmNoZXN0cmF0b3Igc2ltcGxpZmllZCBleGFt cGxlOjoNCiAgICA+ICsNCiAgICA+ICsgICAgIC8qDQogICAgPiArICAgICAgKiBvcmNoZXN0cmF0 b3IgLSBtYW5hZ2VzIG11bHRpcGxlIGFwcGxpY2F0aW9ucyBhbmQgbGlicmFyaWVzIHVzZWQgYnkN CiAgICA+ICsgICAgICAqIGEgc2VydmljZSBhbmQgdHJpZXMgdG8gbWFrZSBzdXJlIGFsbCBzZW5z aXRpdmUgY29tcG9uZW50cyBncmFjZWZ1bGx5DQogICAgPiArICAgICAgKiBoYW5kbGUgVk0gZ2Vu ZXJhdGlvbiBjaGFuZ2VzLg0KICAgID4gKyAgICAgICogRm9sbG93aW5nIGZ1bmN0aW9uIGlzIGNh bGxlZCBvbiBkZXRlY3Rpb24gb2YgYSBWTSBnZW5lcmF0aW9uIGNoYW5nZS4NCiAgICA+ICsgICAg ICAqLw0KICAgID4gKyAgICAgaW50IGhhbmRsZV9zeXNnZW5fdXBkYXRlKGludCBzeXNnZW5fZmQs IHVuc2lnbmVkIGludCBuZXdfZ2VuX2lkKQ0KICAgID4gKyAgICAgew0KICAgID4gKyAgICAgICAg ICAgICAvLyBwYXVzZSB1bnRpbCBhbGwgY29tcG9uZW50cyBoYXZlIGhhbmRsZWQgZXZlbnQNCiAg ICA+ICsgICAgICAgICAgICAgcGF1c2Vfc2VydmljZSgpOw0KICAgID4gKw0KICAgID4gKyAgICAg ICAgICAgICAvLyBjb25maXJtICp0aGlzKiB3YXRjaGVyIGFzIHVwLXRvLWRhdGUNCiAgICA+ICsg ICAgICAgICAgICAgd3JpdGUoc3lzZ2VuX2ZkLCAmbmV3X2dlbl9pZCwgc2l6ZW9mKHVuc2lnbmVk IGludCkpOw0KICAgID4gKw0KICAgID4gKyAgICAgICAgICAgICAvLyB3YWl0IGZvciBhbGwgKm90 aGVycyogZm9yIGF0IG1vc3QgNSBzZWNvbmRzLg0KICAgID4gKyAgICAgICAgICAgICBpb2N0bChz eXNnZW5fZmQsIFZNR0VOSURfV0FJVF9XQVRDSEVSUywgNTAwMCk7DQogICAgPiArDQogICAgPiAr ICAgICAgICAgICAgIC8vIGFsbCBhcHBsaWNhdGlvbnMgb24gdGhlIHN5c3RlbSBoYXZlIHJlYnVp bHQgd29ybGRzDQogICAgPiArICAgICAgICAgICAgIHJlc3VtZV9zZXJ2aWNlKCk7DQogICAgPiAr ICAgICB9DQogICAgPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL2lv Y3RsL2lvY3RsLW51bWJlci5yc3QgYi9Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwv aW9jdGwtbnVtYmVyLnJzdA0KICAgID4gaW5kZXggYTRjNzVhMi4uZDc0ZmVkNCAxMDA2NDQNCiAg ICA+IC0tLSBhL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIu cnN0DQogICAgPiArKysgYi9Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwt bnVtYmVyLnJzdA0KICAgID4gQEAgLTM1Niw2ICszNTYsNyBAQCBDb2RlICBTZXEjICAgIEluY2x1 ZGUgRmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tZW50 cw0KICAgID4gIDB4REIgIDAwLTBGICBkcml2ZXJzL2NoYXIvbXdhdmUvbXdhdmVwdWIuaA0KICAg ID4gIDB4REQgIDAwLTNGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFpGQ1AgZGV2aWNlIGRyaXZlciBzZWUgZHJpdmVycy9zMzkwL3Njc2kv DQogICAgPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgPG1haWx0bzphaGVycm1hbkBkZS5pYm0uY29tPg0KICAgID4g KzB4RTQgIDAxLTAyICB1YXBpL2xpbnV4L3N5c2dlbmlkLmggICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFN5c0dlbklEIG1pc2MgZHJpdmVyDQogICAgPiAgMHhFNSAgMDAtM0YgIGxp bnV4L2Z1c2UuaA0KICAgID4gIDB4RUMgIDAwLTAxICBkcml2ZXJzL3BsYXRmb3JtL2Nocm9tZS9j cm9zX2VjX2Rldi5oICAgICAgICAgICAgICAgICAgIENocm9tZU9TIEVDIGRyaXZlcg0KICAgID4g IDB4RjMgIDAwLTNGICBkcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuaCAgICAgICAg ICAgICAgICAgICAgIHNpc2ZiIChpbiBkZXZlbG9wbWVudCkNCiAgICA+IGRpZmYgLS1naXQgYS9N QUlOVEFJTkVSUyBiL01BSU5UQUlORVJTDQogICAgPiBpbmRleCBkM2U4NDdmLi5mMTE1OGIwIDEw MDY0NA0KICAgID4gLS0tIGEvTUFJTlRBSU5FUlMNCiAgICA+ICsrKyBiL01BSU5UQUlORVJTDQog ICAgPiBAQCAtMTcyMDMsNiArMTcyMDMsMTQgQEAgTDogICBsaW51eC1tbWNAdmdlci5rZXJuZWwu b3JnDQogICAgPiAgUzogICBNYWludGFpbmVkDQogICAgPiAgRjogICBkcml2ZXJzL21tYy9ob3N0 L3NkaGNpLXBjaS1kd2MtbXNoYy5jDQogICAgPg0KICAgID4gK1NZU0dFTklEDQogICAgPiArTTog ICBBZHJpYW4gQ2F0YW5naXUgPGFjYXRhbkBhbWF6b24uY29tPg0KICAgID4gK0w6ICAgbGludXgt a2VybmVsQHZnZXIua2VybmVsLm9yZw0KICAgID4gK1M6ICAgU3VwcG9ydGVkDQogICAgPiArRjog ICBEb2N1bWVudGF0aW9uL21pc2MtZGV2aWNlcy9zeXNnZW5pZC5yc3QNCiAgICA+ICtGOiAgIGRy aXZlcnMvbWlzYy9zeXNnZW5pZC5jDQogICAgPiArRjogICBpbmNsdWRlL3VhcGkvbGludXgvc3lz Z2VuaWQuaA0KICAgID4gKw0KICAgID4gIFNZU1RFTSBDT05GSUdVUkFUSU9OIChTWVNDT04pDQog ICAgPiAgTTogICBMZWUgSm9uZXMgPGxlZS5qb25lc0BsaW5hcm8ub3JnPg0KICAgID4gIE06ICAg QXJuZCBCZXJnbWFubiA8YXJuZEBhcm5kYi5kZT4NCiAgICA+IGRpZmYgLS1naXQgYS9kcml2ZXJz L21pc2MvS2NvbmZpZyBiL2RyaXZlcnMvbWlzYy9LY29uZmlnDQogICAgPiBpbmRleCBmYWZhOGIw Li45MzFkNzE2IDEwMDY0NA0KICAgID4gLS0tIGEvZHJpdmVycy9taXNjL0tjb25maWcNCiAgICA+ ICsrKyBiL2RyaXZlcnMvbWlzYy9LY29uZmlnDQogICAgPiBAQCAtNDU2LDYgKzQ1NiwyMiBAQCBj b25maWcgUFZQQU5JQw0KICAgID4gICAgICAgICBhIHBhcmF2aXJ0dWFsaXplZCBkZXZpY2UgcHJv dmlkZWQgYnkgUUVNVTsgaXQgbGV0cyBhIHZpcnR1YWwgbWFjaGluZQ0KICAgID4gICAgICAgICAo Z3Vlc3QpIGNvbW11bmljYXRlIHBhbmljIGV2ZW50cyB0byB0aGUgaG9zdC4NCiAgICA+DQogICAg PiArY29uZmlnIFNZU0dFTklEDQogICAgPiArICAgICB0cmlzdGF0ZSAiU3lzdGVtIEdlbmVyYXRp b24gSUQgZHJpdmVyIg0KICAgID4gKyAgICAgZGVmYXVsdCBODQogICAgPiArICAgICBoZWxwDQog ICAgPiArICAgICAgIFRoaXMgaXMgYSBTeXN0ZW0gR2VuZXJhdGlvbiBJRCBkcml2ZXIgd2hpY2gg cHJvdmlkZXMgYSBzeXN0ZW0NCiAgICA+ICsgICAgICAgZ2VuZXJhdGlvbiBjb3VudGVyLiBUaGUg ZHJpdmVyIGV4cG9zZXMgRlMgb3BzIG9uIC9kZXYvc3lzZ2VuaWQNCiAgICA+ICsgICAgICAgdGhy b3VnaCB3aGljaCBpdCBjYW4gcHJvdmlkZSBpbmZvcm1hdGlvbiBhbmQgbm90aWZpY2F0aW9ucyBv biBzeXN0ZW0NCiAgICA+ICsgICAgICAgZ2VuZXJhdGlvbiBjaGFuZ2VzIHRoYXQgaGFwcGVuIGJl Y2F1c2Ugb2YgVk0gb3IgY29udGFpbmVyIHNuYXBzaG90cw0KICAgID4gKyAgICAgICBvciBjbG9u aW5nLg0KICAgID4gKyAgICAgICBUaGlzIGVuYWJsZXMgYXBwbGljYXRpb25zIGFuZCBsaWJyYXJp ZXMgdGhhdCBzdG9yZSBvciBjYWNoZQ0KICAgID4gKyAgICAgICBzZW5zaXRpdmUgaW5mb3JtYXRp b24sIHRvIGtub3cgdGhhdCB0aGV5IG5lZWQgdG8gcmVnZW5lcmF0ZSBpdA0KICAgID4gKyAgICAg ICBhZnRlciBwcm9jZXNzIG1lbW9yeSBoYXMgYmVlbiBleHBvc2VkIHRvIHBvdGVudGlhbCBjb3B5 aW5nLg0KICAgID4gKw0KICAgID4gKyAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEg bW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUNCiAgICA+ICsgICAgICAgbW9kdWxlIHdpbGwgYmUg Y2FsbGVkIHN5c2dlbmlkLg0KICAgID4gKw0KICAgID4gIGNvbmZpZyBISVNJX0hJS0VZX1VTQg0K ICAgID4gICAgICAgdHJpc3RhdGUgIlVTQiBHUElPIEh1YiBvbiBIaVNpbGljb24gSGlrZXkgOTYw Lzk3MCBQbGF0Zm9ybSINCiAgICA+ICAgICAgIGRlcGVuZHMgb24gKE9GICYmIEdQSU9MSUIpIHx8 IENPTVBJTEVfVEVTVA0KICAgID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9NYWtlZmlsZSBi L2RyaXZlcnMvbWlzYy9NYWtlZmlsZQ0KICAgID4gaW5kZXggZDIzMjMxZS4uNGI0OTMzZCAxMDA2 NDQNCiAgICA+IC0tLSBhL2RyaXZlcnMvbWlzYy9NYWtlZmlsZQ0KICAgID4gKysrIGIvZHJpdmVy cy9taXNjL01ha2VmaWxlDQogICAgPiBAQCAtNTcsMyArNTcsNCBAQCBvYmotJChDT05GSUdfSEFC QU5BX0FJKSAgICAgICAgICAgICArPSBoYWJhbmFsYWJzLw0KICAgID4gIG9iai0kKENPTkZJR19V QUNDRSkgICAgICAgICAgKz0gdWFjY2UvDQogICAgPiAgb2JqLSQoQ09ORklHX1hJTElOWF9TREZF QykgICArPSB4aWxpbnhfc2RmZWMubw0KICAgID4gIG9iai0kKENPTkZJR19ISVNJX0hJS0VZX1VT QikgKz0gaGlzaV9oaWtleV91c2Iubw0KICAgID4gK29iai0kKENPTkZJR19TWVNHRU5JRCkgICAg ICAgICAgICAgICArPSBzeXNnZW5pZC5vDQogICAgPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNj L3N5c2dlbmlkLmMgYi9kcml2ZXJzL21pc2Mvc3lzZ2VuaWQuYw0KICAgID4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCiAgICA+IGluZGV4IDAwMDAwMDAuLjk1YjM0MjENCiAgICA+IC0tLSAvZGV2L251 bGwNCiAgICA+ICsrKyBiL2RyaXZlcnMvbWlzYy9zeXNnZW5pZC5jDQogICAgPiBAQCAtMCwwICsx LDMwNyBAQA0KICAgID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQogICAg PiArLyoNCiAgICA+ICsgKiBTeXN0ZW0gR2VuZXJhdGlvbiBJRCBkcml2ZXINCiAgICA+ICsgKg0K ICAgID4gKyAqIENvcHlyaWdodCAoQykgMjAyMCBBbWF6b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu DQogICAgPiArICoNCiAgICA+ICsgKiAgIEF1dGhvcnM6DQogICAgPiArICogICAgIEFkcmlhbiBD YXRhbmdpdSA8YWNhdGFuQGFtYXpvbi5jb20+DQogICAgPiArICoNCiAgICA+ICsgKi8NCiAgICA+ ICsjaW5jbHVkZSA8bGludXgvYWNwaS5oPg0KICAgID4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwu aD4NCiAgICA+ICsjaW5jbHVkZSA8bGludXgvbWlubWF4Lmg+DQogICAgPiArI2luY2x1ZGUgPGxp bnV4L21pc2NkZXZpY2UuaD4NCiAgICA+ICsjaW5jbHVkZSA8bGludXgvbW0uaD4NCiAgICA+ICsj aW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQogICAgPiArI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4N CiAgICA+ICsjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+DQogICAgPiArI2luY2x1ZGUgPGxpbnV4 L3V1aWQuaD4NCiAgICA+ICsjaW5jbHVkZSA8bGludXgvc3lzZ2VuaWQuaD4NCiAgICA+ICsNCiAg ICA+ICtzdHJ1Y3Qgc3lzZ2VuaWRfZGF0YSB7DQogICAgPiArICAgICB1bnNpZ25lZCBsb25nICAg ICAgICAgICBtYXBfYnVmOw0KICAgID4gKyAgICAgd2FpdF9xdWV1ZV9oZWFkX3QgICAgICAgcmVh ZF93YWl0cTsNCiAgICA+ICsgICAgIGF0b21pY190ICAgICAgICAgICAgICAgIGdlbmVyYXRpb25f Y291bnRlcjsNCiAgICA+ICsNCiAgICA+ICsgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgIHdh dGNoZXJzOw0KICAgID4gKyAgICAgYXRvbWljX3QgICAgICAgICAgICAgICAgb3V0ZGF0ZWRfd2F0 Y2hlcnM7DQogICAgPiArICAgICB3YWl0X3F1ZXVlX2hlYWRfdCAgICAgICBvdXRkYXRlZF93YWl0 cTsNCiAgICA+ICsgICAgIHNwaW5sb2NrX3QgICAgICAgICAgICAgIGxvY2s7DQogICAgPiArfTsN CiAgICA+ICtzdGF0aWMgc3RydWN0IHN5c2dlbmlkX2RhdGEgc3lzZ2VuaWRfZGF0YTsNCiAgICA+ ICsNCiAgICA+ICtzdHJ1Y3QgZmlsZV9kYXRhIHsNCiAgICA+ICsgICAgIHVuc2lnbmVkIGludCBh Y2tlZF9nZW5fY291bnRlcjsNCiAgICA+ICt9Ow0KICAgID4gKw0KICAgID4gK3N0YXRpYyB2b2lk IHN5c2dlbmlkX3VldmVudCh1bnNpZ25lZCBpbnQgZ2VuX2NvdW50ZXIpOw0KICAgID4gKw0KICAg ID4gK3N0YXRpYyBpbnQgZXF1YWxzX2dlbl9jb3VudGVyKHVuc2lnbmVkIGludCBjb3VudGVyKQ0K ICAgID4gK3sNCiAgICA+ICsgICAgIHJldHVybiBjb3VudGVyID09IGF0b21pY19yZWFkKCZzeXNn ZW5pZF9kYXRhLmdlbmVyYXRpb25fY291bnRlcik7DQogICAgPiArfQ0KICAgID4gKw0KICAgID4g K3N0YXRpYyB2b2lkIF9idW1wX2dlbmVyYXRpb24oaW50IG1pbl9nZW4pDQogICAgPiArew0KICAg ID4gKyAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsNCiAgICA+ICsgICAgIGludCBjb3VudGVyOw0K ICAgID4gKw0KICAgID4gKyAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnN5c2dlbmlkX2RhdGEubG9j aywgZmxhZ3MpOw0KICAgID4gKyAgICAgY291bnRlciA9IG1heChtaW5fZ2VuLCAxICsgYXRvbWlj X3JlYWQoJnN5c2dlbmlkX2RhdGEuZ2VuZXJhdGlvbl9jb3VudGVyKSk7DQogICAgPiArICAgICBh dG9taWNfc2V0KCZzeXNnZW5pZF9kYXRhLmdlbmVyYXRpb25fY291bnRlciwgY291bnRlcik7DQog ICAgPiArICAgICAqKChpbnQgKikgc3lzZ2VuaWRfZGF0YS5tYXBfYnVmKSA9IGNvdW50ZXI7DQog ICAgPiArICAgICBhdG9taWNfc2V0KCZzeXNnZW5pZF9kYXRhLm91dGRhdGVkX3dhdGNoZXJzLCBz eXNnZW5pZF9kYXRhLndhdGNoZXJzKTsNCiAgICA+ICsNCiAgICA+ICsgICAgIHdha2VfdXBfaW50 ZXJydXB0aWJsZSgmc3lzZ2VuaWRfZGF0YS5yZWFkX3dhaXRxKTsNCiAgICA+ICsgICAgIHdha2Vf dXBfaW50ZXJydXB0aWJsZSgmc3lzZ2VuaWRfZGF0YS5vdXRkYXRlZF93YWl0cSk7DQogICAgPiAr ICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzeXNnZW5pZF9kYXRhLmxvY2ssIGZsYWdzKTsN CiAgICA+ICsNCiAgICA+ICsgICAgIHN5c2dlbmlkX3VldmVudChjb3VudGVyKTsNCiAgICA+ICt9 DQogICAgPiArDQogICAgPiArdm9pZCBzeXNnZW5pZF9idW1wX2dlbmVyYXRpb24odm9pZCkNCiAg ICA+ICt7DQogICAgPiArICAgICBfYnVtcF9nZW5lcmF0aW9uKDApOw0KICAgID4gK30NCiAgICA+ ICtFWFBPUlRfU1lNQk9MKHN5c2dlbmlkX2J1bXBfZ2VuZXJhdGlvbik7DQogICAgPiArDQogICAg PiArc3RhdGljIHZvaWQgcHV0X291dGRhdGVkX3dhdGNoZXJzKHZvaWQpDQogICAgPiArew0KICAg ID4gKyAgICAgaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnN5c2dlbmlkX2RhdGEub3V0ZGF0ZWRf d2F0Y2hlcnMpKQ0KICAgID4gKyAgICAgICAgICAgICB3YWtlX3VwX2ludGVycnVwdGlibGUoJnN5 c2dlbmlkX2RhdGEub3V0ZGF0ZWRfd2FpdHEpOw0KICAgID4gK30NCiAgICA+ICsNCiAgICA+ICtz dGF0aWMgaW50IHN5c2dlbmlkX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUg KmZpbGUpDQogICAgPiArew0KICAgID4gKyAgICAgc3RydWN0IGZpbGVfZGF0YSAqZmRhdGEgPSBr emFsbG9jKHNpemVvZihzdHJ1Y3QgZmlsZV9kYXRhKSwgR0ZQX0tFUk5FTCk7DQogICAgPiArICAg ICB1bnNpZ25lZCBsb25nIGZsYWdzOw0KICAgID4gKw0KICAgID4gKyAgICAgaWYgKCFmZGF0YSkN CiAgICA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07DQogICAgPiArDQogICAgPiArICAg ICBzcGluX2xvY2tfaXJxc2F2ZSgmc3lzZ2VuaWRfZGF0YS5sb2NrLCBmbGFncyk7DQogICAgPiAr ICAgICBmZGF0YS0+YWNrZWRfZ2VuX2NvdW50ZXIgPSBhdG9taWNfcmVhZCgmc3lzZ2VuaWRfZGF0 YS5nZW5lcmF0aW9uX2NvdW50ZXIpOw0KICAgID4gKyAgICAgKytzeXNnZW5pZF9kYXRhLndhdGNo ZXJzOw0KICAgID4gKyAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3lzZ2VuaWRfZGF0YS5s b2NrLCBmbGFncyk7DQogICAgPiArDQogICAgPiArICAgICBmaWxlLT5wcml2YXRlX2RhdGEgPSBm ZGF0YTsNCiAgICA+ICsNCiAgICA+ICsgICAgIHJldHVybiAwOw0KICAgID4gK30NCiAgICA+ICsN CiAgICA+ICtzdGF0aWMgaW50IHN5c2dlbmlkX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0 cnVjdCBmaWxlICpmaWxlKQ0KICAgID4gK3sNCiAgICA+ICsgICAgIHN0cnVjdCBmaWxlX2RhdGEg KmZkYXRhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOw0KICAgID4gKyAgICAgdW5zaWduZWQgbG9uZyBm bGFnczsNCiAgICA+ICsNCiAgICA+ICsgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZzeXNnZW5pZF9k YXRhLmxvY2ssIGZsYWdzKTsNCiAgICA+ICsgICAgIGlmICghZXF1YWxzX2dlbl9jb3VudGVyKGZk YXRhLT5hY2tlZF9nZW5fY291bnRlcikpDQogICAgPiArICAgICAgICAgICAgIHB1dF9vdXRkYXRl ZF93YXRjaGVycygpOw0KICAgID4gKyAgICAgLS1zeXNnZW5pZF9kYXRhLndhdGNoZXJzOw0KICAg ID4gKyAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3lzZ2VuaWRfZGF0YS5sb2NrLCBmbGFn cyk7DQogICAgPiArDQogICAgPiArICAgICBrZnJlZShmZGF0YSk7DQogICAgPiArDQogICAgPiAr ICAgICByZXR1cm4gMDsNCiAgICA+ICt9DQogICAgPiArDQogICAgPiArc3RhdGljIHNzaXplX3Qg c3lzZ2VuaWRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVidWYsDQogICAg PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IG5ieXRlcywgbG9mZl90ICpwcG9zKQ0KICAgID4gK3sNCiAgICA+ICsgICAgIHN0cnVj dCBmaWxlX2RhdGEgKmZkYXRhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOw0KICAgID4gKyAgICAgc3Np emVfdCByZXQ7DQogICAgPiArICAgICBpbnQgZ2VuX2NvdW50ZXI7DQogICAgPiArDQogICAgPiAr ICAgICBpZiAobmJ5dGVzID09IDApDQogICAgPiArICAgICAgICAgICAgIHJldHVybiAwOw0KICAg ID4gKyAgICAgLyogZGlzYWxsb3cgcGFydGlhbCByZWFkcyAqLw0KICAgID4gKyAgICAgaWYgKG5i eXRlcyA8IHNpemVvZihnZW5fY291bnRlcikpDQogICAgPiArICAgICAgICAgICAgIHJldHVybiAt RUlOVkFMOw0KICAgID4gKw0KICAgID4gKyAgICAgaWYgKGVxdWFsc19nZW5fY291bnRlcihmZGF0 YS0+YWNrZWRfZ2VuX2NvdW50ZXIpKSB7DQogICAgPiArICAgICAgICAgICAgIGlmIChmaWxlLT5m X2ZsYWdzICYgT19OT05CTE9DSykNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm4g LUVBR0FJTjsNCiAgICA+ICsgICAgICAgICAgICAgcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRp YmxlKA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgIHN5c2dlbmlkX2RhdGEucmVhZF93YWl0 cSwNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAhZXF1YWxzX2dlbl9jb3VudGVyKGZkYXRh LT5hY2tlZF9nZW5fY291bnRlcikNCiAgICA+ICsgICAgICAgICAgICAgKTsNCiAgICA+ICsgICAg ICAgICAgICAgaWYgKHJldCkNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0 Ow0KICAgID4gKyAgICAgfQ0KICAgID4gKw0KICAgID4gKyAgICAgZ2VuX2NvdW50ZXIgPSBhdG9t aWNfcmVhZCgmc3lzZ2VuaWRfZGF0YS5nZW5lcmF0aW9uX2NvdW50ZXIpOw0KICAgID4gKyAgICAg cmV0ID0gY29weV90b191c2VyKHVidWYsICZnZW5fY291bnRlciwgc2l6ZW9mKGdlbl9jb3VudGVy KSk7DQogICAgPiArICAgICBpZiAocmV0KQ0KICAgID4gKyAgICAgICAgICAgICByZXR1cm4gLUVG QVVMVDsNCiAgICA+ICsNCiAgICA+ICsgICAgIHJldHVybiBzaXplb2YoZ2VuX2NvdW50ZXIpOw0K DQogICAgaW50ZXJydXB0IGNvdWxkIGJlIGluIGZsaWdodCBhdCB0aGlzIHBvaW50LiBJIHRoaW5r IHlvdSBuZWVkDQogICAgdG8gc3luY2ggd2l0aCB0aGF0IElSUSBvdGhlcndpc2UgeW91ciByZWFk IHdpbGwgcmV0dXJuIHN0YWxlIGRhdGEuDQoNClNpbmNlIHRoZSB1c2VyIGFsc28gbmVlZHMgdG8g QUNLIHRoZSByaWdodCBnZW4gY291bnRlciwgdGhlIHJhY2UgaXMgbm90IGhlcmUNCihzdGFsZSBn ZW5lcmF0aW9uIHdpbGwgZmFpbCBhY2spLiBCdXQgeW91J3JlIG9uLXBvaW50LCB0aGlzIHJhY2Ug ZG9lcyBleGlzdCBidXQNCmR1cmluZyB3cml0ZSgpLg0KSW50ZXJydXB0IGNvdWxkIGJlIGluIGZs aWdodCB3aGVuIHVzZXIgQUNLcyBnZW5lcmF0aW9uLg0KDQpBbGFzIEkgZG9uJ3QgdGhpbmsgd2Ug Y2FuIHNhZmVseSBzdXBwb3J0IGFyYml0cmFyaWx5IHRpbWVkIHNuYXBzaG90cy4NClNhZmVseSB1 c2VkIHNuYXBzaG90cyBzaG91bGQgZWFjaCBmb2xsb3cgYSBmdWxsDQpxdWllc2NlIC0+IHRha2Ut c25hcHNob3QgLT4gbG9hZC1zbmFwc2hvdCAtPiBmdWxsLXN5c3RlbS1hZGp1c3QgLT4gdW4tcXVp ZXNjZQ0KY3ljbGUgYmVmb3JlIHJlcGVhdGluZy4NCkluIHN1Y2ggYSBzY2VuYXJpbywgdGhlcmUg aXMgbm8gcmFjZSBoZXJlLg0KDQogICAgPiArfQ0KICAgID4gKw0KICAgID4gK3N0YXRpYyBzc2l6 ZV90IHN5c2dlbmlkX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAq dWJ1ZiwNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpDQogICAgPiArew0KICAgID4g KyAgICAgc3RydWN0IGZpbGVfZGF0YSAqZmRhdGEgPSBmaWxlLT5wcml2YXRlX2RhdGE7DQogICAg PiArICAgICB1bnNpZ25lZCBpbnQgbmV3X2Fja2VkX2dlbjsNCiAgICA+ICsgICAgIHVuc2lnbmVk IGxvbmcgZmxhZ3M7DQogICAgPiArDQogICAgPiArICAgICAvKiBkaXNhbGxvdyBwYXJ0aWFsIHdy aXRlcyAqLw0KICAgID4gKyAgICAgaWYgKGNvdW50ICE9IHNpemVvZihuZXdfYWNrZWRfZ2VuKSkN CiAgICA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQogICAgPiArICAgICBpZiAoY29w eV9mcm9tX3VzZXIoJm5ld19hY2tlZF9nZW4sIHVidWYsIGNvdW50KSkNCiAgICA+ICsgICAgICAg ICAgICAgcmV0dXJuIC1FRkFVTFQ7DQogICAgPiArDQogICAgPiArICAgICBzcGluX2xvY2tfaXJx c2F2ZSgmc3lzZ2VuaWRfZGF0YS5sb2NrLCBmbGFncyk7DQogICAgPiArICAgICAvKiB3cm9uZyBn ZW4tY291bnRlciBhY2tub3dsZWRnZWQgKi8NCiAgICA+ICsgICAgIGlmICghZXF1YWxzX2dlbl9j b3VudGVyKG5ld19hY2tlZF9nZW4pKSB7DQogICAgPiArICAgICAgICAgICAgIHNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJnN5c2dlbmlkX2RhdGEubG9jaywgZmxhZ3MpOw0KICAgID4gKyAgICAgICAg ICAgICByZXR1cm4gLUVJTlZBTDsNCiAgICA+ICsgICAgIH0NCiAgICA+ICsgICAgIGlmICghZXF1 YWxzX2dlbl9jb3VudGVyKGZkYXRhLT5hY2tlZF9nZW5fY291bnRlcikpIHsNCiAgICA+ICsgICAg ICAgICAgICAgZmRhdGEtPmFja2VkX2dlbl9jb3VudGVyID0gbmV3X2Fja2VkX2dlbjsNCiAgICA+ ICsgICAgICAgICAgICAgcHV0X291dGRhdGVkX3dhdGNoZXJzKCk7DQogICAgPiArICAgICB9DQog ICAgPiArICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzeXNnZW5pZF9kYXRhLmxvY2ssIGZs YWdzKTsNCiAgICA+ICsNCiAgICA+ICsgICAgIHJldHVybiAoc3NpemVfdCljb3VudDsNCiAgICA+ ICt9DQogICAgPiArDQogICAgPiArc3RhdGljIF9fcG9sbF90IHN5c2dlbmlkX3BvbGwoc3RydWN0 IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpDQogICAgPiArew0KICAgID4gKyAgICAgX19w b2xsX3QgbWFzayA9IDA7DQogICAgPiArICAgICBzdHJ1Y3QgZmlsZV9kYXRhICpmZGF0YSA9IGZp bGUtPnByaXZhdGVfZGF0YTsNCiAgICA+ICsNCiAgICA+ICsgICAgIGlmICghZXF1YWxzX2dlbl9j b3VudGVyKGZkYXRhLT5hY2tlZF9nZW5fY291bnRlcikpDQogICAgPiArICAgICAgICAgICAgIHJl dHVybiBFUE9MTElOIHwgRVBPTExSRE5PUk07DQogICAgPiArDQogICAgPiArICAgICBwb2xsX3dh aXQoZmlsZSwgJnN5c2dlbmlkX2RhdGEucmVhZF93YWl0cSwgd2FpdCk7DQogICAgPiArDQogICAg PiArICAgICBpZiAoIWVxdWFsc19nZW5fY291bnRlcihmZGF0YS0+YWNrZWRfZ2VuX2NvdW50ZXIp KQ0KICAgID4gKyAgICAgICAgICAgICBtYXNrID0gRVBPTExJTiB8IEVQT0xMUkROT1JNOw0KICAg ID4gKw0KICAgID4gKyAgICAgcmV0dXJuIG1hc2s7DQogICAgPiArfQ0KICAgID4gKw0KICAgID4g K3N0YXRpYyBsb25nIHN5c2dlbmlkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLA0KICAgID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu dCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQ0KICAgID4gK3sNCiAgICA+ICsgICAgIHN0cnVjdCBm aWxlX2RhdGEgKmZkYXRhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOw0KICAgID4gKyAgICAgdW5zaWdu ZWQgbG9uZyB0aW1lb3V0X25zLCBtaW5fZ2VuOw0KICAgID4gKyAgICAga3RpbWVfdCB1bnRpbDsN CiAgICA+ICsgICAgIGludCByZXQgPSAwOw0KICAgID4gKw0KICAgID4gKyAgICAgc3dpdGNoIChj bWQpIHsNCiAgICA+ICsgICAgIGNhc2UgU1lTR0VOSURfV0FJVF9XQVRDSEVSUzoNCiAgICA+ICsg ICAgICAgICAgICAgdGltZW91dF9ucyA9IGFyZyAqIE5TRUNfUEVSX01TRUM7DQogICAgPiArICAg ICAgICAgICAgIHVudGlsID0gdGltZW91dF9ucyA/IGt0aW1lX3NldCgwLCB0aW1lb3V0X25zKSA6 IEtUSU1FX01BWDsNCiAgICA+ICsNCiAgICA+ICsgICAgICAgICAgICAgcmV0ID0gd2FpdF9ldmVu dF9pbnRlcnJ1cHRpYmxlX2hydGltZW91dCgNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICBz eXNnZW5pZF9kYXRhLm91dGRhdGVkX3dhaXRxLA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAg ICghYXRvbWljX3JlYWQoJnN5c2dlbmlkX2RhdGEub3V0ZGF0ZWRfd2F0Y2hlcnMpIHx8DQogICAg PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFlcXVhbHNfZ2VuX2NvdW50 ZXIoZmRhdGEtPmFja2VkX2dlbl9jb3VudGVyKSksDQogICAgPiArICAgICAgICAgICAgICAgICAg ICAgdW50aWwNCiAgICA+ICsgICAgICAgICAgICAgKTsNCiAgICA+ICsgICAgICAgICAgICAgYnJl YWs7DQogICAgPiArICAgICBjYXNlIFNZU0dFTklEX0ZPUkNFX0dFTl9VUERBVEU6DQogICAgPiAr ICAgICAgICAgICAgIGlmICghY2hlY2twb2ludF9yZXN0b3JlX25zX2NhcGFibGUoY3VycmVudF91 c2VyX25zKCkpKQ0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUFDQ0VTOw0K ICAgID4gKyAgICAgICAgICAgICBtaW5fZ2VuID0gYXJnOw0KICAgID4gKyAgICAgICAgICAgICBf YnVtcF9nZW5lcmF0aW9uKG1pbl9nZW4pOw0KICAgID4gKyAgICAgICAgICAgICBicmVhazsNCiAg ICA+ICsgICAgIGRlZmF1bHQ6DQogICAgPiArICAgICAgICAgICAgIHJldCA9IC1FSU5WQUw7DQog ICAgPiArICAgICAgICAgICAgIGJyZWFrOw0KICAgID4gKyAgICAgfQ0KICAgID4gKyAgICAgcmV0 dXJuIHJldDsNCiAgICA+ICt9DQogICAgPiArDQogICAgPiArc3RhdGljIGludCBzeXNnZW5pZF9t bWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkNCiAgICA+ ICt7DQogICAgPiArICAgICBzdHJ1Y3QgZmlsZV9kYXRhICpmZGF0YSA9IGZpbGUtPnByaXZhdGVf ZGF0YTsNCiAgICA+ICsNCiAgICA+ICsgICAgIGlmICh2bWEtPnZtX3Bnb2ZmICE9IDAgfHwgdm1h X3BhZ2VzKHZtYSkgPiAxKQ0KICAgID4gKyAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsNCiAg ICA+ICsNCiAgICA+ICsgICAgIGlmICgodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSAhPSAwKQ0K ICAgID4gKyAgICAgICAgICAgICByZXR1cm4gLUVQRVJNOw0KICAgID4gKw0KICAgID4gKyAgICAg dm1hLT52bV9mbGFncyB8PSBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVA7DQogICAgPiArICAg ICB2bWEtPnZtX2ZsYWdzICY9IH5WTV9NQVlXUklURTsNCiAgICA+ICsgICAgIHZtYS0+dm1fcHJp dmF0ZV9kYXRhID0gZmRhdGE7DQogICAgPiArDQogICAgPiArICAgICByZXR1cm4gdm1faW5zZXJ0 X3BhZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdmlydF90b19wYWdlKHN5c2dlbmlkX2RhdGEubWFwX2J1 ZikpOw0KICAgID4gK30NCiAgICA+ICsNCiAgICA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVf b3BlcmF0aW9ucyBmb3BzID0gew0KICAgID4gKyAgICAgLm93bmVyICAgICAgICAgID0gVEhJU19N T0RVTEUsDQogICAgPiArICAgICAubW1hcCAgICAgICAgICAgPSBzeXNnZW5pZF9tbWFwLA0KICAg ID4gKyAgICAgLm9wZW4gICAgICAgICAgID0gc3lzZ2VuaWRfb3BlbiwNCiAgICA+ICsgICAgIC5y ZWxlYXNlICAgICAgICA9IHN5c2dlbmlkX2Nsb3NlLA0KICAgID4gKyAgICAgLnJlYWQgICAgICAg ICAgID0gc3lzZ2VuaWRfcmVhZCwNCiAgICA+ICsgICAgIC53cml0ZSAgICAgICAgICA9IHN5c2dl bmlkX3dyaXRlLA0KICAgID4gKyAgICAgLnBvbGwgICAgICAgICAgID0gc3lzZ2VuaWRfcG9sbCwN CiAgICA+ICsgICAgIC51bmxvY2tlZF9pb2N0bCA9IHN5c2dlbmlkX2lvY3RsLA0KICAgID4gK307 DQogICAgPiArDQogICAgPiArc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHN5c2dlbmlkX21pc2Mg PSB7DQogICAgPiArICAgICAubWlub3IgPSBNSVNDX0RZTkFNSUNfTUlOT1IsDQogICAgPiArICAg ICAubmFtZSA9ICJzeXNnZW5pZCIsDQogICAgPiArICAgICAuZm9wcyA9ICZmb3BzLA0KICAgID4g K307DQogICAgPiArDQogICAgPiArc3RhdGljIHZvaWQgc3lzZ2VuaWRfdWV2ZW50KHVuc2lnbmVk IGludCBnZW5fY291bnRlcikNCiAgICA+ICt7DQogICAgPiArICAgICBjaGFyIGV2ZW50X3N0cmlu Z1syMl07DQogICAgPiArICAgICBjaGFyICplbnZwW10gPSB7IGV2ZW50X3N0cmluZywgTlVMTCB9 Ow0KICAgID4gKyAgICAgc3RydWN0IGRldmljZSAqZGV2ID0gc3lzZ2VuaWRfbWlzYy50aGlzX2Rl dmljZTsNCiAgICA+ICsNCiAgICA+ICsgICAgIGlmIChkZXYpIHsNCiAgICA+ICsgICAgICAgICAg ICAgc3ByaW50ZihldmVudF9zdHJpbmcsICJTWVNHRU5JRD0ldSIsIGdlbl9jb3VudGVyKTsNCiAg ICA+ICsgICAgICAgICAgICAga29iamVjdF91ZXZlbnRfZW52KCZkZXYtPmtvYmosIEtPQkpfQ0hB TkdFLCBlbnZwKTsNCiAgICA+ICsgICAgIH0NCiAgICA+ICt9DQogICAgPiArDQogICAgPiArc3Rh dGljIGludCBfX2luaXQgc3lzZ2VuaWRfaW5pdCh2b2lkKQ0KICAgID4gK3sNCiAgICA+ICsgICAg IGludCByZXQ7DQogICAgPiArDQogICAgPiArICAgICBzeXNnZW5pZF9kYXRhLm1hcF9idWYgPSBn ZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7DQogICAgPiArICAgICBpZiAoIXN5c2dlbmlkX2Rh dGEubWFwX2J1ZikNCiAgICA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07DQogICAgPiAr DQogICAgPiArICAgICBhdG9taWNfc2V0KCZzeXNnZW5pZF9kYXRhLmdlbmVyYXRpb25fY291bnRl ciwgMCk7DQogICAgPiArICAgICBhdG9taWNfc2V0KCZzeXNnZW5pZF9kYXRhLm91dGRhdGVkX3dh dGNoZXJzLCAwKTsNCiAgICA+ICsgICAgIGluaXRfd2FpdHF1ZXVlX2hlYWQoJnN5c2dlbmlkX2Rh dGEucmVhZF93YWl0cSk7DQogICAgPiArICAgICBpbml0X3dhaXRxdWV1ZV9oZWFkKCZzeXNnZW5p ZF9kYXRhLm91dGRhdGVkX3dhaXRxKTsNCiAgICA+ICsgICAgIHNwaW5fbG9ja19pbml0KCZzeXNn ZW5pZF9kYXRhLmxvY2spOw0KICAgID4gKw0KICAgID4gKyAgICAgcmV0ID0gbWlzY19yZWdpc3Rl cigmc3lzZ2VuaWRfbWlzYyk7DQogICAgPiArICAgICBpZiAocmV0IDwgMCkgew0KICAgID4gKyAg ICAgICAgICAgICBwcl9lcnIoIm1pc2NfcmVnaXN0ZXIoKSBmYWlsZWQgZm9yIHN5c2dlbmlkXG4i KTsNCiAgICA+ICsgICAgICAgICAgICAgZ290byBlcnI7DQogICAgPiArICAgICB9DQogICAgPiAr DQogICAgPiArICAgICByZXR1cm4gMDsNCiAgICA+ICsNCiAgICA+ICtlcnI6DQogICAgPiArICAg ICBmcmVlX3BhZ2VzKHN5c2dlbmlkX2RhdGEubWFwX2J1ZiwgMCk7DQogICAgPiArICAgICBzeXNn ZW5pZF9kYXRhLm1hcF9idWYgPSAwOw0KICAgID4gKw0KICAgID4gKyAgICAgcmV0dXJuIHJldDsN CiAgICA+ICt9DQogICAgPiArDQogICAgPiArc3RhdGljIHZvaWQgX19leGl0IHN5c2dlbmlkX2V4 aXQodm9pZCkNCiAgICA+ICt7DQogICAgPiArICAgICBtaXNjX2RlcmVnaXN0ZXIoJnN5c2dlbmlk X21pc2MpOw0KICAgID4gKyAgICAgZnJlZV9wYWdlcyhzeXNnZW5pZF9kYXRhLm1hcF9idWYsIDAp Ow0KICAgID4gKyAgICAgc3lzZ2VuaWRfZGF0YS5tYXBfYnVmID0gMDsNCiAgICA+ICt9DQogICAg PiArDQogICAgPiArbW9kdWxlX2luaXQoc3lzZ2VuaWRfaW5pdCk7DQogICAgPiArbW9kdWxlX2V4 aXQoc3lzZ2VuaWRfZXhpdCk7DQogICAgPiArDQogICAgPiArTU9EVUxFX0FVVEhPUigiQWRyaWFu IENhdGFuZ2l1Iik7DQogICAgPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJTeXN0ZW0gR2VuZXJhdGlv biBJRCIpOw0KICAgID4gK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsNCiAgICA+ICtNT0RVTEVfVkVS U0lPTigiMC4xIik7DQogICAgPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3N5c2dl bmlkLmggYi9pbmNsdWRlL3VhcGkvbGludXgvc3lzZ2VuaWQuaA0KICAgID4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCiAgICA+IGluZGV4IDAwMDAwMDAuLmJhMzcwYzgNCiAgICA+IC0tLSAvZGV2L251 bGwNCiAgICA+ICsrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9zeXNnZW5pZC5oDQogICAgPiBAQCAt MCwwICsxLDE3IEBADQogICAgPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAr IFdJVEggTGludXgtc3lzY2FsbC1ub3RlICovDQogICAgPiArDQogICAgPiArI2lmbmRlZiBfVUFQ SV9MSU5VWF9TWVNHRU5JRF9IDQogICAgPiArI2RlZmluZSBfVUFQSV9MSU5VWF9TWVNHRU5JRF9I DQogICAgPiArDQogICAgPiArI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+DQogICAgPiArDQogICAg PiArI2RlZmluZSBTWVNHRU5JRF9JT0NUTCAgICAgICAgICAgICAgICAgICAgICAgMHhFNA0KICAg ID4gKyNkZWZpbmUgU1lTR0VOSURfV0FJVF9XQVRDSEVSUyAgICAgICAgICAgICAgIF9JTyhTWVNH RU5JRF9JT0NUTCwgMSkNCiAgICA+ICsjZGVmaW5lIFNZU0dFTklEX0ZPUkNFX0dFTl9VUERBVEUg ICAgX0lPKFNZU0dFTklEX0lPQ1RMLCAyKQ0KICAgID4gKw0KICAgID4gKyNpZmRlZiBfX0tFUk5F TF9fDQogICAgPiArdm9pZCBzeXNnZW5pZF9idW1wX2dlbmVyYXRpb24odm9pZCk7DQogICAgPiAr I2VuZGlmIC8qIF9fS0VSTkVMX18gKi8NCiAgICA+ICsNCiAgICA+ICsjZW5kaWYgLyogX1VBUElf TElOVVhfU1lTR0VOSURfSCAqLw0KICAgID4gKw0KICAgID4gLS0NCiAgICA+IDIuNy40DQogICAg Pg0KICAgID4NCiAgICA+DQogICAgPg0KICAgID4gQW1hem9uIERldmVsb3BtZW50IENlbnRlciAo Um9tYW5pYSkgUy5SLkwuIHJlZ2lzdGVyZWQgb2ZmaWNlOiAyN0EgU2YuIExhemFyIFN0cmVldCwg VUJDNSwgZmxvb3IgMiwgSWFzaSwgSWFzaSBDb3VudHksIDcwMDA0NSwgUm9tYW5pYS4gUmVnaXN0 ZXJlZCBpbiBSb21hbmlhLiBSZWdpc3RyYXRpb24gbnVtYmVyIEoyMi8yNjIxLzIwMDUuDQoNCg0K CgoKQW1hem9uIERldmVsb3BtZW50IENlbnRlciAoUm9tYW5pYSkgUy5SLkwuIHJlZ2lzdGVyZWQg b2ZmaWNlOiAyN0EgU2YuIExhemFyIFN0cmVldCwgVUJDNSwgZmxvb3IgMiwgSWFzaSwgSWFzaSBD b3VudHksIDcwMDA0NSwgUm9tYW5pYS4gUmVnaXN0ZXJlZCBpbiBSb21hbmlhLiBSZWdpc3RyYXRp b24gbnVtYmVyIEoyMi8yNjIxLzIwMDUuCg==