From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by sourceware.org (Postfix) with ESMTPS id 409E23858D39 for ; Tue, 19 Jul 2022 05:04:38 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 409E23858D39 X-IronPort-AV: E=McAfee;i="6400,9594,10412"; a="287543934" X-IronPort-AV: E=Sophos;i="5.92,283,1650956400"; d="scan'208,217";a="287543934" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Jul 2022 22:04:37 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.92,283,1650956400"; d="scan'208,217";a="572697912" Received: from orsmsx602.amr.corp.intel.com ([10.22.229.15]) by orsmga006.jf.intel.com with ESMTP; 18 Jul 2022 22:04:36 -0700 Received: from orsmsx611.amr.corp.intel.com (10.22.229.24) by ORSMSX602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.28; Mon, 18 Jul 2022 22:04:36 -0700 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx611.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27 via Frontend Transport; Mon, 18 Jul 2022 22:04:36 -0700 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (104.47.55.177) by edgegateway.intel.com (134.134.137.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.27; Mon, 18 Jul 2022 22:04:36 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=luhdQg6FTLErJVW4rXv1XQ4MgviN5+tlFFxSg3j2uQvFDSW4oqeFLbZG8EwxWpw5OS/ZMKKQToxLUTOr7tUeR16qSDf0/X5qIhKYm50mMohnH5rA0gvqRtVjb6Yi20uUG4CDUhGR4okWUsdcLYYAdSieBjMaZxjOr01Ac6o33fe3h6BfUlrpxocg84Bn0HLizHDjpq7qUFYUu7vQYR61BgMWPgcAVidb2p18OHlNORM89N1aG8Gxyk6frJ9Res7nAlJkplUzfeSECA+mPDQGKMPMEuhXVEwnDZCUHEjvm+jtUHJTHX9rcNYt/c3girtP0wHn9l6nBvx27gBtknr8yA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=eum+M8hqAjaHLwjijsnzguQmqvUrGLCOZKQ9mRUv9Jg=; b=U11KWYuVVli6XhACVlGI8rLmIB/AsXj/g7zqBdO3GMkuNipnJ6heSJdBAmqOPcVC4chk+rnXCCLppVJzG3+a1skB29oyI0G6678PyNcdq3i2leNlbOvoqqRsLXqM+YoDxBJb1BTLSVIOKDDu6bAtup7wKuK8NF7wyCMLoKhslqBdcyPE1M2g7D65tCeWn2LoRna2Qvq2noa+IVWkjRw2KPoKbTny27ETqVcVvn/bnCLgLNdT2ZBOCE1oRSBmzkWIz4TAmOCPPfk083UQEzUmAwQHumGbnV97S5iG/uqdM4L0L/hh87d/YX31QN4utOo867KSSsZQM4KRkMFCu0B0ag== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from DM8PR11MB5749.namprd11.prod.outlook.com (2603:10b6:8:10::15) by MWHPR11MB1631.namprd11.prod.outlook.com (2603:10b6:301:10::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5438.14; Tue, 19 Jul 2022 05:04:33 +0000 Received: from DM8PR11MB5749.namprd11.prod.outlook.com ([fe80::f9d8:e8a8:94ec:58db]) by DM8PR11MB5749.namprd11.prod.outlook.com ([fe80::f9d8:e8a8:94ec:58db%8]) with mapi id 15.20.5438.023; Tue, 19 Jul 2022 05:04:33 +0000 From: "Metzger, Markus T" To: Zied Guermazi CC: "gdb-patches@sourceware.org" Subject: RE: [PATCH v6 4/7] start/stop btrace with coresight etm and collect etm buffer on linux os Thread-Topic: [PATCH v6 4/7] start/stop btrace with coresight etm and collect etm buffer on linux os Thread-Index: AQHXVmSkqAUefHvSUEqqod7Fdy2bxKshRWiQgfyztwCAAGu0sIAwLeQAgAwH3lCALGt3AIAApIew Date: Tue, 19 Jul 2022 05:04:33 +0000 Message-ID: References: <20210531213307.275079-1-zied.guermazi@trande.de> <20210531213307.275079-5-zied.guermazi@trande.de> <761d9b7e-09f3-7c00-1f8f-df9af83c5aba@trande.de> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-reaction: no-action dlp-version: 11.6.500.17 dlp-product: dlpe-windows x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 0fec85e5-08d2-46fa-d14d-08da69442b69 x-ms-traffictypediagnostic: MWHPR11MB1631:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: dLJjmNDRumScy5jBqcj1W0l9DbA/PXnAMM31ugLTzOKbiGhjQYtvRk7E8AU9uwpyV6nJeCcSlpqpho6SWIu2lffhWRwYsWDEbL/O/ua1wJ0HPXNyjl2oq/IzxVFGE8ZPKtPJL2uAd0oYXxYgpImU3Njp6cEgx40RQ+BQ9BX3xCgTllikFBC9QZ6BF0EzfMIXwu6rwaHmKAWRnXZo2xSmtCktYjaz6CMA6jOrTiauPhVxj9ovvNgGb8OEubw/ed2kxIreU300xZoP0i3QBHoLmJC3XOkEAW+mlajlNLJkjkPRVEEIymmedRUH6DuASL4vbdkbTunmeVSAK9O9IxTY9L/aTQBziNn7joTQL8y4F3022biCrDAx3AkNtYJhy1rWarbu3vJ3NjWT5mNO3Ubfp8Zy1uKEq1TQMKUibcfQ4RqMbwtjMC4OMyxDgp7ErYi1Uy30yDW7S0NF/ISII0f3exxv9wiZmAKAI3tJs6J6UxpDFmml1GXFrRtG59En6ta5cheK07lzUA42/AElHGGPY13gwdvJ80VM9vtZEPr90HqGQFow1J2ORZ+/fvkvwojacu/oZOX0cKEmzroDgx1arX14+4fLmJUzqq6+xvNq4OAwmtS0bj8iW9djL4LgqBlxjymOQje3eGRuS2Hvl6u3/8ibjEtYGsfgH30QY4oYvJjK6yXSFadz4JIg6mJzyxptDrdQ935a9nAUVovRdw4LBzZF6JkvcuH9gYKM0ORUtanexIM45aMxW8e0E7vVAW/nCylqoJtH2MzLRzYtUn6c/LfAMyD46n9mVbx0dqdbR98CklzRFWzSWwFNUseyeo3d83SDmAUK62dNPeHMt2SdGA== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM8PR11MB5749.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230016)(136003)(396003)(366004)(39860400002)(346002)(376002)(2906002)(33656002)(71200400001)(166002)(478600001)(7696005)(26005)(41300700001)(66946007)(66556008)(64756008)(76116006)(66446008)(6506007)(8676002)(66476007)(316002)(4326008)(6916009)(53546011)(55016003)(8936002)(52536014)(186003)(9686003)(38100700002)(5660300002)(86362001)(66574015)(83380400001)(122000001)(82960400001)(9326002)(30864003)(38070700005)(579004); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?ay9yUkJ3Z3d1Z2FocU1ncHQ0NjMwMWdjNWpZeE1BbUhjRXZaM3RNZ1dvMDR5?= =?utf-8?B?cVkyTGtXd0w2d1J0bndCeEF6VkY4dXJWMFN3VnFhbW1vdS96aGVTY2t0ejVT?= =?utf-8?B?UExmM216NU1tT0YrQVcwaVYyUVd3U2FFWndnKy9sbEliQ1hXUVBPUWFRUG1V?= =?utf-8?B?OWlaTExzMEhOcER5a2RsazYwMTRpcHBTVnhFR240R280MzRBcUsrdWNrcm1h?= =?utf-8?B?SEFYankzdFN6cFQ5UUo1S0t4Q3IyRHVVaklLRWNxaUxnRndURE0yZ2ljM2lm?= =?utf-8?B?WjBDeTNSQ2pnWmpxZjRCR1hLVU1rdzc0R1BnZ1FYTHVaSkxjc0JGWmw1VjF1?= =?utf-8?B?L3dENUZBbVlJMWQ2Z0xiL3REU2tFbDFMLzd5Uk9TbUR1TTJwRG1mYjlzVC9R?= =?utf-8?B?N216S2ZXbmcvYmlpVHZYZGRoUU5pRXJ3Q011cTJHa2hRN1RTNzVnMjFVYklw?= =?utf-8?B?Y091RS9SR3JBckRTandNTmxpbDJiSEpwZHdLZ2M2V202b20wVHpmcjQ1TC9x?= =?utf-8?B?ak5Xc2syNHJxZVcveHFKaWU5VFVOTG1NcWNuUDJkam1tSko2OFhBK1RjNjcv?= =?utf-8?B?UTUycnpxYkVYbm1nYnFZTnRjN21CRWUvb3lZd3p2YmtLUVFjTlhJYklqWHRr?= =?utf-8?B?disrZHZ0U1JLQkY5SWJ3aElZcnk1aTQwTWM3TEZkaUNLMlE2aXpIbnJpTCtx?= =?utf-8?B?SGcrT1F6TUxBSkVhcVJ3d3U2ZFU4UWM5bDZieFFrbndRcVh0YUR3RUJORUk3?= =?utf-8?B?NGFzRmtZbTFOelVyNkxUTUw4Z0x0bkFnQVUxT1B5Q0FORDl5REd3OWZkTkJL?= =?utf-8?B?VGJ4YndUa0gzczZGS0g2T3pRN2Z5VElEbTM5MHFTYXFqd2ZnYWJ6eFFRTDdS?= =?utf-8?B?a2dFSWhSb2dPZ0NZdldWVUF5bTZla08yUFlCSWZWM0p5MC9HVk1SM1lrbUFY?= =?utf-8?B?K2VLWXd0LzU5dUdZek9KUWxxMHdYN3l1VzJBVTJWbC9kTUsrVFpDcXJ0dnRR?= =?utf-8?B?bjl4Q0VsdDQvVklmb1VrMVUwZmRiZHpEMnJTL3B3Z2JiL0lnc2NKS1h1cGpt?= =?utf-8?B?endqRHU2c3p0VFJUblhqODNmNDJQTWh5dGdpMk5WZFpUc0xHSnN5K28wdDdN?= =?utf-8?B?aEt0eHJyWVVNYjZMQlFQQ2J6Q2t3Mi8xQlF6MCtGd252c2MwSHFTR0tDeDJz?= =?utf-8?B?cWRQdnNudDl5MTdsYXZPQ0hVTTR2cEtrYzRpNWw0bUZLbzA4QzRveXZ2ZnB2?= =?utf-8?B?N2VjWHZjUnRYYXQ0QVlXNWFZQTh4NnY4TUpYUk9pa0V5VDI3WWdjN2dKdE93?= =?utf-8?B?S3RNTnlZWFZkWmgzbTZTQmhyd0pqdmRsNjBScGkwdndqZHlYSHkyV0VsekpH?= =?utf-8?B?RXJxWm51b05jYm9kdFcvcWRGYzJDbForUHJHTFBTeEtmNkx1MSs3c2lBL29W?= =?utf-8?B?bEJPSjVOZVN0SlRJRlREQTFwQmUwRkpMa1lySUVyaGFvOTRNTlVrK2JwaWhw?= =?utf-8?B?cmtHMk5oTFhUekxiNzJDY0hFSWcraTl2YlZ4UVNJN2djY3dLWkRVZmRHU1ZV?= =?utf-8?B?dGkrWVFFYnlNNTcyWG1HTVV5bnVVUEd5MXFrMVl2QWErcjcyWVFIblZLYmU4?= =?utf-8?B?ekpOR1ovUUJMY0JJcEFLWTRYOXExZkNEN1FQK1A4OFRhOEZOVlc5S1NtZTBI?= =?utf-8?B?U0NEVzZ4SCt1eVlOKzJGL3RYZWZyRURWYVJ4elJQbjBCa2dhTkVHNldVS2xD?= =?utf-8?B?eXFiWktqSU85TzBmQXVMSXBkdHdkZm9RMjd0bE8zc1RqSmVpUFNTY0k2dHBp?= =?utf-8?B?aUkwUXZqTkMvRFhFcUp1SDZrSWg0TkVBeDc1U0QzMnFWc3dkdlNBaW1lQVN6?= =?utf-8?B?eTMyNElyWHIwQzVtTVVpUFVtc2gwOFZ4SVJxa3NQeC95cjNIaWRjNnN0SnR2?= =?utf-8?B?WTFVZFhVMjlKZXAreDFkZTFnUlkzeEptc3ozRHBoOHNSYTFxdjRxRm1nSlpR?= =?utf-8?B?aUhDbExieHFaYytodDhqdmI3VGt0bnhaQW1RclNVRDRheGlmM1dPclRHV2I2?= =?utf-8?B?YmIrZVd3WjRPa2cvTWlFUm85b2FOK0Y1Sk5Od2NSUDZTeWsvNnVRbERBS0Rt?= =?utf-8?B?cGxQZzg4YVRTR3ZKNWtoQTlEK0NNUjMrdUFnZFV4NVFhSjBINVprL0dUbDVD?= =?utf-8?B?SVE9PQ==?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM8PR11MB5749.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0fec85e5-08d2-46fa-d14d-08da69442b69 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Jul 2022 05:04:33.2769 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: X5USamPSZ57R92DGhKy98XXI4MyuZkVCz0EN64Q7YR1PZ2Si7Q0SbrYBqmcPT/FJ0nivXehrq0/BHJfXJ+JHJ7wboqlKvfRJP3Zvm257rBE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR11MB1631 X-OriginatorOrg: intel.com X-Spam-Status: No, score=-1.2 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FOREIGN_BODY1, HTML_MESSAGE, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 19 Jul 2022 05:04:44 -0000 SGVsbG8gWmllZCwNCg0KSSB3YXMgc3VnZ2VzdGluZyBzb21lDQoNCiAgICBwZXJmX2V2ZW50X29w ZW5fYXV4IChzdHJ1Y3QgcGVyZl9ldmVudF9idWZmZXIgKiwgY29uc3Qgc3RydWN0IHBlcmZfZXZl bnRfYXR0ciAqKQ0KDQpoZWxwZXIsIHRoYXQgZG9lcyBhbGwgdGhlIG1tYXBzIG5lY2Vzc2FyeSBm b3IgdGhlIEFVWCBidWZmZXIgYW5kIGEgc2ltaWxhciBoZWxwZXIgZm9yIHRoZSBEQVRBIGJ1ZmZl ci4NCkkgZG9uJ3QgdGhpbmsgYW55Ym9keSBpcyB1c2luZyBib3RoIHNvIHRoZSBjYWxsZXIgd291 bGQgZG8gdGhlIHBlcmZfZXZlbnRfb3BlbiAoKSBhbmQgdGhlbiBjYWxsIHRoZQ0KcmVzcGVjdGl2 ZSBoZWxwZXIgdG8gbW1hcCB0aGUgYnVmZmVyIGl0IG5lZWRzLiAgV291bGQgdGhhdCB3b3JrPw0K DQpTaW5jZSB5b3UgbmVlZCB0byBmaWxsIGluIHRoZSBoZWFkZXIgZmllbGRzIGJlZm9yZSBtbWFw aW5nIHRoZSBBVVggYnVmZmVyIEkgc2VlIGxpdHRsZSBiZW5lZml0IGluDQp0cnlpbmcgdG8gc2hh cmUgdGhpcyB3aXRoIG1tYXBpbmcgdGhlIERBVEEgYnVmZmVyLg0KDQpBbHNvLCBwZXJmX2V2ZW50 X29wZW4gKCkgaXMganVzdCBhIHN5c2NhbGwgd3JhcHBlciBhbmQgdGhlIGNvbmZpZ3VyYXRpb24g d2lsbCBiZSBkaWZmZXJlbnQgZm9yIGFsbA0KcmVjb3JkaW5nIG1ldGhvZHMuICBOb3Qgc3VyZSBp ZiBpdCBpcyB3b3J0aCB0cnlpbmcgdG8gY29uc3RydWN0IGEgaGVscGVyLCBoZXJlLg0KDQpyZWdh cmRzLA0KbWFya3VzLg0KDQpGcm9tOiBaaWVkIEd1ZXJtYXppIDx6aWVkLmd1ZXJtYXppQHRyYW5k ZS5kZT4NClNlbnQ6IE1vbnRhZywgMTguIEp1bGkgMjAyMiAyMTowNg0KVG86IE1ldHpnZXIsIE1h cmt1cyBUIDxtYXJrdXMudC5tZXR6Z2VyQGludGVsLmNvbT4NCkNjOiBnZGItcGF0Y2hlc0Bzb3Vy Y2V3YXJlLm9yZw0KU3ViamVjdDogUmU6IFtQQVRDSCB2NiA0LzddIHN0YXJ0L3N0b3AgYnRyYWNl IHdpdGggY29yZXNpZ2h0IGV0bSBhbmQgY29sbGVjdCBldG0gYnVmZmVyIG9uIGxpbnV4IG9zDQoN Cg0KaGVsbG8gTWFya3VzLA0KDQp0aGUgcHJvcG9zYWwgc29sdmVzIHRoZSBpc3N1ZSBmb3Igc2Nv cGVkX2ZkLCB3ZSBjYW4gdXNlIGl0IGFuZCBjcmVhdGUgYSBzZWNvbmQgc2NvcGVkX2ZkIHVzaW5n IHRoZSByZXR1cm5lZCBmaWxlIGRlc2NyaXB0b3Igc2luY2Ugc2NvcGVkX2ZkIGhhcyB0aGlzIGNv bnN0cnVjdG9yDQoNCmV4cGxpY2l0IHNjb3BlZF9mZCAoaW50IGZkID0gLTEpIG5vZXhjZXB0IDog bV9mZCAoZmQpIHt9Lg0KDQpmb3Igc2NvcGVkX21tYXAgd2UgY2FuIG5vdCBkbyB0aGUgc2FtZSBz aW5jZSB0aGUgY2xhc3MgaXMgbWlzc2luZyBhIGNvbnN0cnVjdG9yIHRha2luZyB2b2lkICptZW0g YW5kIHNpemVfdCBsZW5ndGggYXMgYXJndW1lbnRzLg0KDQp3aWxsIGl0IGJlIGZpbmUgdG8gYWRk IHN1Y2ggYSBjb25zdHJ1Y3RvciB0byB0aGUgY2xhc3M/IHdpbGwgaXQgYmUgZW5vdWdoIHRvIGFz c2lnbiB0aGUgbWVtb3J5IHBvaW50ZXIgYW5kIHRoZSBsZW5ndGggdG8gdGhlIGNsYXNzIG1lbWJl cnM/DQoNCg0KDQpLaW5kIFJlZ2FyZHMNCg0KWmllZCBHdWVybWF6aQ0KDQoNCk9uIDIwLjA2LjIy IDE0OjUyLCBNZXR6Z2VyLCBNYXJrdXMgVCB3cm90ZToNCkhlbGxvIFppZWQsDQoNCg0KLyogb3Bl biB0aGUgc2NvcGVkIGZkLiAqLw0KDQpzdGF0aWMgc2NvcGVkX2ZkICoNCnBlcmZfZXZlbnRfb3Bl biAoIGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmV2ZW50X2F0dHJpYnV0ZXMsIGNvbnN0 IGludCBwaWQpDQoNClRoZSBwdXJwb3NlIG9mIHRob3NlIHNjb3BlZF8gY2xhc3NlcyBpcyB0byBh bGxvY2F0ZWQgb2JqZWN0cyBvbiB0aGUgc3RhY2sgdG8gaGF2ZSB0aGVtIGRlc3Ryb3kgdGhlaXIg Y29udGVudCBpbiBjYXNlIG9mIGV4Y2VwdGlvbnMuDQoNCkluIHRoZSBhYm92ZSBleGFtcGxlLCBw ZXJmX2V2ZW50X29wZW4oKSBtYXkgdXNlIGEgc2NvcGVkX2ZkIGludGVybmFsbHkgYnV0IHdvdWxk IHJldHVybiB0aGUgYWN0dWFsIGZpbGUgZGVzY3JpcHRvciBhZnRlciByZWxlYXNpbmcgaXQuICBU aGUgY2FsbGVyIG1heSBwdXQgdGhlIHJldHVybmVkIGZpbGUgZGVzY3JpcHRvciBpbnRvIGl0cyBv d24gc2NvcGVkX2ZkIG9iamVjdCBvbiBpdHMgc3RhY2suDQoNCnJlZ2FyZHMsDQptYXJrdXMuDQoN Cg0KDQovKiBvcGVuIHRoZSBzY29wZWQgZmQuICovDQoNCnN0YXRpYyBzY29wZWRfZmQgKg0KcGVy Zl9ldmVudF9vcGVuICggY29uc3Qgc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqZXZlbnRfYXR0cmli dXRlcywgY29uc3QgaW50IHBpZCkNCg0KLypPcGVuIHRoZSBzY29wZWQgbW1hcCBkYXRhICovDQoN CnN0YXRpYyBzY29wZWRfbW1hcCoNCnBlcmZfZXZlbnRfbW1hcF9kYXRhIChjb25zdCBzY29wZWRf ZmQqIGZkLCBzaXplX3QqIHNpemUsIHNpemVfdCBwYWdlX3NpemUpDQoNCmFuZA0KDQovKk9wZW4g dGhlIHNjb3BlZCBtbWFwIGF1eCAqLw0Kc3RhdGljIHNjb3BlZF9tbWFwKg0KcGVyZl9ldmVudF9t bWFwX2F1eCAoY29uc3Qgc2NvcGVkX2ZkKiBmZCwgc3RydWN0IHBlcmZfZXZlbnRfbW1hcF9wYWdl ICpoZWFkZXIsIHNpemVfdCogc2l6ZSwgc2l6ZV90IHBhZ2Vfc2l6ZSkNCg0KYW5kIGNhbGwgdGhl bSB3aXRoaW4gbGludXhfZW5hYmxlX2J0cywgbGludXhfZW5hYmxlX3B0IGFuZCBsaW51eF9lbmFi bGVfZXRtDQoNCkkgdHJpZWQgdHdvIGFsdGVybmF0aXZlcyBhbmQgYm90aCBvZiB0aGVtIGZhaWxl ZDoNCg0KLSBBbHRlcm5hdGl2ZSAxOiBpbnN0YW50aWF0ZSB0aGUgcmV0dXJuZWQgc2NvcGVkX21t YXAgb24gdGhlIHN0YWNrIG9mIHRoZSBwZXJmX2V2ZW50X21tYXBfZGF0YSBhbmQgcGVyZl9ldmVu dF9tbWFwX2F1eDogdGhlIGNvbXBpbGVyIHJlZnVzZWQgdG8gYXNzaWduIHRoZSBzY29wZWRfbW1h cCB2YXJpYWJsZXMgYW5kIHRoZXkgd2lsbCBub3QgYmUgdmFsaWQgYW55bW9yZSBpbiB0aGUgbGlu dXhfZW5hYmxlX2J0cywgbGludXhfZW5hYmxlX3B0IGFuZCBsaW51eF9lbmFibGVfZXRtDQoNCi0g QWx0ZXJuYXRpdmUgMjogaW5zdGFudGlhdGUgdGhlIHJldHVybmVkIHNjb3BlZF9tbWFwIG9uIHRo ZSBoZWFwIGJ5IGFsbG9jYXRpbmcgdGhlbS4gdGhlIGNvbXBpbGVyIGNvbXBpbGVzIGJ1dCwgb25j ZSB3ZSBzdG9wIHRoZSB0cmFjaW5nIHdlIGNhIGNhbiBub3Qgc3RhcnQgaXQgYWdhaW4gY2F1c2Ug dGhlIHJlc291cmNlcyBhcmUgYnVzeS4NCg0KZm9yIHRoZSB0aW1lIGJlaW5nIEkgd2lsbCBwdXQg dGhpcyByZWZhY3RvcmluZyBhY3Rpb24gb24gaG9sZC4NCg0KQW55IGlkZWEgb3Igc3VwcG9ydCB0 byBwcm9ncmVzcyBmdXJ0aGVyIGFyZSB3ZWxjb21lDQoNCg0KDQpLaW5kIFJlZ2FyZHMNCg0KWmll ZCBHdWVybWF6aQ0KDQoNCk9uIDEzLjA1LjIyIDA3OjMxLCBNZXR6Z2VyLCBNYXJrdXMgVCB3cm90 ZToNCkhlbGxvIFppZWQsDQoNCg0KK2NzX2V0bV9nZXRfcmVnaXN0ZXIgKGludCBjcHUsIGNvbnN0 IGNoYXIgKnBhdGgpDQoNCit7DQoNClsuLi5dDQoNCisNCg0KKyAgdWludDMyX3QgdmFsID0gMDsN Cg0KKw0KDQorICBpbnQgIGZvdW5kID0gZnNjYW5mIChmaWxlLmdldCAoKSwgIjB4JXgiLCAmdmFs KTsNCg0KKyAgaWYgKGZvdW5kICE9IDEpDQoNCisgICAgZXJyb3IgKF8oIkZhaWxlZCB0byByZWFk IGNvcmVzaWdodCByZWdpc3RlciBmcm9tICVzLiIpLCBmaWxlbmFtZSk7DQoNCisgIHJldHVybiB2 YWw7DQoNCg0KW1ppZWRdIGV4aXN0aW5nIGNvZGUgaW4gdGhpcyBmaWxlIGhhcyBhbiBlbXB0eSBs aW5lIGJlZm9yZSB0aGUgbGFzdCByZXR1cm4gZXZlcnl3aGVyZS4gc2hhbGwgSSBzdGljayB0byB0 aGlzIGNvbnZlbnRpb24/IGVsaW1pbmF0aW5nIHRoZSBlbXB0eSBsaW5lcyBiZWZvcmUgcmV0dXJu cyB3aWxsIGJyaW5nIGluY29uc2lzdGVuY3kgaW4gdGhlIGZpbGUuIHdoaWNoIGNvZGluZyBjb252 ZW50aW9uIGRvIHdlIGhhdmUgdG8gYXBwbHkgaGVyZT8NCg0KDQoNClllcywgbGV04oCZcyBzdGlj ayB0byB0aGF0IGFuZCBhZGQgdGhlIGVtcHR5IGxpbmUuDQoNCg0KDQpzbyBib3RoIHBlcmZfZXZl bnRfbW1hcF9kYXRhIHBlcmZfZXZlbnRfbW1hcF9hdXggY2FuIGJlIGluIGZhY3QgcmVkdWNlZCB0 byBvbmUgZnVuY3Rpb24gaWYgd2UgZ2l2ZSBzaXplX3Qgc2l6ZSwgc2l6ZV90IHBhZ2Vfc2l6ZSwg aW50IG9mZnNldCBhcyBwYXJhbWV0ZXJzLg0KDQpCVFMgYWxsb2NhdGVzIHRoZSBkYXRhIGJ1ZmZl ciBpbmNsdWRpbmcgdGhlIGhlYWRlciwgd2hlcmVhcyBQVCBhbGxvY2F0ZXMgdGhlIGF1eCBidWZm ZXIgcGx1cyB0aGUgaGVhZGVyLiAgV2UgY2FuIHN0aWxsIG1ha2UgaXQgb25lIGZ1bmN0aW9uLCBv ZiBjb3Vyc2UsIGJ1dCBJIGRvbuKAmXQgdGhpbmsgdGhhdCBpdCB3aWxsIGJlIGFueSBlYXNpZXIg dG8gcmVhZCB0aGF0IHdheS4NCg0KDQoNCjItIGhvdyB0byBicmluZyB0aGlzIGNoYW5nZSB0byB0 aGUgbWFpbnN0cmVhbS4gaGVyZSB3ZSBoYXZlIHR3byBhbHRlcm5hdGl2ZXMgOiBlaXRoZXIgSSBk byB0aGlzIHJlc3RydWN0dXJpbmcgZm9yIGV0bSBvbmx5IGFuZCB0aGVuIHlvdSB0YWtlIGNhcmUg b2YgdXNpbmcgdGhlIGhlbHBlciBmdW5jdGlvbnMgZm9yIGJ0cyBhbmQgcHQgb3IgSSBjb21taXQg aXQgYXMgaXQgaXMgYW5kIHRoZW4gSSBpc3N1ZSBhIHBhdGNoIGZvciB0aGlzIHBvaW50IG9ubHkg Zm9yIGJ0cyBQVCBhbmQgRVRNLiBXaGF0IGRvIHlvdSBwcmVmZXI/DQoNCklkZWFsbHksIHdl4oCZ ZCBmaXJzdCByZXN0cnVjdHVyZSB0aGUgZXhpc3RpbmcgY29kZSwgdGhlbiBhZGQgdGhlIG5ldyB1 c2UuICBBcmUgeW91IGFibGUgdG8gdGVzdCBCVFMgYW5kIFBUPw0KDQpSZWdhcmRzLA0KTWFya3Vz Lg0KDQoNCkZyb206IFppZWQgR3Vlcm1hemkgPHppZWQuZ3Vlcm1hemlAdHJhbmRlLmRlPjxtYWls dG86emllZC5ndWVybWF6aUB0cmFuZGUuZGU+DQpTZW50OiBGcmlkYXksIE1heSAxMywgMjAyMiAx Mjo1MiBBTQ0KVG86IE1ldHpnZXIsIE1hcmt1cyBUIDxtYXJrdXMudC5tZXR6Z2VyQGludGVsLmNv bT48bWFpbHRvOm1hcmt1cy50Lm1ldHpnZXJAaW50ZWwuY29tPjsgZ2RiLXBhdGNoZXNAc291cmNl d2FyZS5vcmc8bWFpbHRvOmdkYi1wYXRjaGVzQHNvdXJjZXdhcmUub3JnPg0KU3ViamVjdDogUmU6 IFtQQVRDSCB2NiA0LzddIHN0YXJ0L3N0b3AgYnRyYWNlIHdpdGggY29yZXNpZ2h0IGV0bSBhbmQg Y29sbGVjdCBldG0gYnVmZmVyIG9uIGxpbnV4IG9zDQoNCg0KSGVsbG8gTWFya3VzLA0KDQp0aGFu a3MgZm9yIHlvdXIgZmVlZGJhY2ssIGJlbG93IGFyZSB0aGUgcmV3b3JraW5nIGNvbW1lbnRzLg0K DQovWmllZA0KT24gMjMuMDYuMjEgMTA6MDAsIE1ldHpnZXIsIE1hcmt1cyBUIHdyb3RlOg0KDQpI ZWxsbyBaaWVkLA0KDQoNCg0KVGhpcyBwYXRjaCBpbXBsZW1lbnQgdGhlIGxvd2VyIGxheWVyIGZv ciBzdGFydGluZyBhZCBzdG9wcGluZw0KDQpBUk0gQ29yZVNpZ2h0IHRyYWNpbmcgb24gbGludXgg dGFyZ2V0cyBmb3IgYXJtIGFuZCBhYXJjaDY0DQoNCg0KDQpUaGUgcGF0Y2ggbG9va3MgZ29vZCBv dmVyYWxsLiAgVGhlcmUgYXJlIGEgZmV3IHN0eWxlIG5pdHMgYW5kIEknZCBhc2sgeW91IHRvDQoN CnNwbGl0IHRoZSBQQUdFX1NJWkUgY2hhbmdlcyBpbnRvIGEgc2VwYXJhdGUgcGF0Y2ggYXMgdGhl eSBhcmUgdW5yZWxhdGVkLg0KDQoNCg0KVGhlbiwgdGhlcmUncyB0aGUgZGlzY3Vzc2lvbiBhYm91 dCBzaGFyaW5nIHBlcmZfZXZlbnQgYnVmZmVyIG1hcHBpbmcuDQoNCkkgcG9pbnRlZCBvdXQgd2hp Y2ggcGFydHMgSSBiZWxpZXZlIGNhbiBiZSBzaGFyZWQuDQoNCg0KDQoNCg0KKy8qIFRlYXJkb3du IGJyYW5jaCB0cmFjaW5nLiAgKi8NCg0KKw0KDQordm9pZA0KDQorYXJtX2xpbnV4X25hdF90YXJn ZXQ6OnRlYXJkb3duX2J0cmFjZSAoc3RydWN0IGJ0cmFjZV90YXJnZXRfaW5mbyAqdGluZm8pDQoN Cit7DQoNCisgIC8qIElnbm9yZSBlcnJvcnMuICAqLw0KDQorICBsaW51eF9kaXNhYmxlX2J0cmFj ZSAodGluZm8pOw0KDQorfQ0KDQorDQoNCitlbnVtIGJ0cmFjZV9lcnJvcg0KDQorYXJtX2xpbnV4 X25hdF90YXJnZXQ6OnJlYWRfYnRyYWNlIChzdHJ1Y3QgYnRyYWNlX2RhdGEgKmRhdGEsDQoNCisg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYnRyYWNlX3RhcmdldF9pbmZvICpidGlu Zm8sDQoNCisgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIGJ0cmFjZV9yZWFkX3R5cGUg dHlwZSkNCg0KK3sNCg0KKyAgcmV0dXJuIGxpbnV4X3JlYWRfYnRyYWNlIChkYXRhLCBidGluZm8s IHR5cGUpOw0KDQorfQ0KDQorDQoNCisvKiBTZWUgdG9fYnRyYWNlX2NvbmYgaW4gdGFyZ2V0Lmgu ICAqLw0KDQorDQoNCitjb25zdCBzdHJ1Y3QgYnRyYWNlX2NvbmZpZyAqDQoNCithcm1fbGludXhf bmF0X3RhcmdldDo6YnRyYWNlX2NvbmYgKGNvbnN0IHN0cnVjdCBidHJhY2VfdGFyZ2V0X2luZm8g KmJ0aW5mbykNCg0KK3sNCg0KKyAgcmV0dXJuIGxpbnV4X2J0cmFjZV9jb25mIChidGluZm8pOw0K DQorfQ0KDQoNCg0KVGhlcmUncyBzb21lIGluY29uc2lzdGVuY3kgaW4gY29tbWVudHMgb24gZnVu Y3Rpb25zIHJhbmdpbmcgZnJvbSBubyBjb21tZW50DQoNCm92ZXIgcmVmZXJyaW5nIHRvIHRoZSBv cmlnaW5hbCB0YXJnZXQgc3RydWN0LCB0byBhbiBvd24gY29tbWVudC4NCltaaWVkXSBJIHdpbGwg YWxpZ24gdGhlIGNvbW1lbnRzLiBwbGVhc2Ugbm90aWNlIHRoYXQgdGhlIHNhbWUgYXBwbGllcyB0 byB4ODYtbGludXgtbmF0LmMgKGl0IHdhcyBhIGNvcHktcGFzdGUgZnJvbSBpdCkNCg0KDQoNCg0K DQoNCg0KDQoNCg0KQEAgLTQ4MywxMCArNDg3LDExIEBAIGxpbnV4X2VuYWJsZV9idHMgKHB0aWRf dCBwdGlkLCBjb25zdCBzdHJ1Y3QNCg0KYnRyYWNlX2NvbmZpZ19idHMgKmNvbmYpDQoNCiAgc2Nv cGVkX2ZkIGZkIChzeXNjYWxsIChTWVNfcGVyZl9ldmVudF9vcGVuLCAmYnRzLT5hdHRyLCBwaWQs IC0xLCAtMSwgMCkpOw0KDQogIGlmIChmZC5nZXQgKCkgPCAwKQ0KDQogICAgZGlhZ25vc2VfcGVy Zl9ldmVudF9vcGVuX2ZhaWwgKCk7DQoNCisgIGxvbmcgcGFnZV9zaXplID0gc3lzY29uZiAoX1ND X1BBR0VTSVpFKTsNCg0KDQoNClBsZWFzZSBzcGxpdCB0aG9zZSBQQUdFX1NJWkUgY2hhbmdlcyBp bnRvIGEgc2VwYXJhdGUgcGF0Y2guICBUaGlzIGlzIHVucmVsYXRlZA0KDQp0byB3aGF0IHRoaXMg cGF0Y2ggaXMgZG9pbmcuDQoNCg0KDQpOb3RlIHRoYXQgUEFHRV9TSVpFIHdhcyB1bnNpZ25lZCB3 aGVyZWFzIHN5c2NvbmYgKCkgcmV0dXJucyBhIHNpZ25lZCBpbnRlZ2VyLg0KDQpJJ2QgZXhwZWN0 IGNvbXBpbGVycyB0byByZXF1aXJlIHByb3BlciBjYXN0aW5nLg0KW1ppZWRdIGRvbmUNCg0KDQoN Cg0KDQoNCg0KDQoNCg0KKy8qIEVuYWJsZSBBUk0gQ29yZVNpZ2h0IEVUTSB0cmFjaW5nLiAgKi8N Cg0KKw0KDQorc3RhdGljIHN0cnVjdCBidHJhY2VfdGFyZ2V0X2luZm8gKg0KDQorbGludXhfZW5h YmxlX2V0bSAocHRpZF90IHB0aWQsIGNvbnN0IHN0cnVjdCBidHJhY2VfY29uZmlnX2V0bSAqY29u ZikNCg0KK3sNCg0KWy4uLl0NCg0KKyAgZXRtLT5hdHRyLnNhbXBsZV90eXBlID0gUEVSRl9TQU1Q TEVfQ1BVOw0KDQorICBldG0tPmF0dHIucmVhZF9mb3JtYXQgPSBQRVJGX0ZPUk1BVF9JRDsNCg0K KyAgZXRtLT5hdHRyLnNhbXBsZV9pZF9hbGwgPSAxOw0KDQoNCg0KWW91IGVuYWJsZSBzYW1wbGlu Zy4gIFdvdWxkbid0IHlvdSBuZWVkIHRvIG1tYXAgdGhlIGRhdGEgYnVmZmVyLCBhcyB3ZWxsPw0K W1ppZWRdIGl0IGlzIG5vdCBuZWVkZWQgZm9yIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uIHJlbW92 ZWQuDQoNCg0KDQoNCg0KDQoNCg0KDQoNClRoaXMgLi4uDQoNCg0KDQorICBlcnJubyA9IDA7DQoN CisgIHNjb3BlZF9mZCBmZCAoc3lzY2FsbCAoU1lTX3BlcmZfZXZlbnRfb3BlbiwgJmV0bS0+YXR0 ciwgcGlkLCAtMSwgLTEsIDApKTsNCg0KKyAgaWYgKGZkLmdldCAoKSA8IDApDQoNCisgICAgZGlh Z25vc2VfcGVyZl9ldmVudF9vcGVuX2ZhaWwgKCk7DQoNCisNCg0KKyAgLyogQWxsb2NhdGUgdGhl IGNvbmZpZ3VyYXRpb24gcGFnZS4gICovDQoNCisgIGxvbmcgcGFnZV9zaXplID0gc3lzY29uZiAo X1NDX1BBR0VTSVpFKTsNCg0KKyAgc2NvcGVkX21tYXAgZGF0YSAobnVsbHB0ciwgcGFnZV9zaXpl LCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLA0KDQpNQVBfU0hBUkVELA0KDQorICAgICAgICAgICAg IGZkLmdldCAoKSwgMCk7DQoNCisgIGlmIChkYXRhLmdldCAoKSA9PSBNQVBfRkFJTEVEKQ0KDQor ICAgIGVycm9yIChfKCJGYWlsZWQgdG8gbWFwIHRyYWNlIHVzZXIgcGFnZTogJXMuIiksIHNhZmVf c3RyZXJyb3IgKGVycm5vKSk7DQoNCisNCg0KKyAgc3RydWN0IHBlcmZfZXZlbnRfbW1hcF9wYWdl ICpoZWFkZXIgPSAoc3RydWN0IHBlcmZfZXZlbnRfbW1hcF9wYWdlICopDQoNCisgICAgZGF0YS5n ZXQgKCk7DQoNCisNCg0KKyAgaGVhZGVyLT5hdXhfb2Zmc2V0ID0gaGVhZGVyLT5kYXRhX29mZnNl dCArIGhlYWRlci0+ZGF0YV9zaXplOw0KDQorICAvKiBDb252ZXJ0IHRoZSByZXF1ZXN0ZWQgc2l6 ZSBpbiBieXRlcyB0byBwYWdlcyAocm91bmRpbmcgdXApLiAgKi8NCg0KKyAgcGFnZXMgPSAoKHNp emVfdCkgY29uZi0+c2l6ZSAvIHBhZ2Vfc2l6ZQ0KDQorICAgICArICgoY29uZi0+c2l6ZSAlIHBh Z2Vfc2l6ZSkgPT0gMCA/IDAgOiAxKSk7DQoNCisgIC8qIFdlIG5lZWQgYXQgbGVhc3Qgb25lIHBh Z2UuICAqLw0KDQorICBpZiAocGFnZXMgPT0gMCkNCg0KKyAgICBwYWdlcyA9IDE7DQoNCisNCg0K KyAgLyogVGhlIGJ1ZmZlciBzaXplIGNhbiBiZSByZXF1ZXN0ZWQgaW4gcG93ZXJzIG9mIHR3byBw YWdlcy4gIEFkanVzdCBQQUdFUw0KDQorICAgICB0byB0aGUgbmV4dCBwb3dlciBvZiB0d28uICAq Lw0KDQorICBmb3IgKHBnID0gMDsgcGFnZXMgIT0gKChzaXplX3QpIDEgPDwgcGcpOyArK3BnKQ0K DQorICAgIGlmICgocGFnZXMgJiAoKHNpemVfdCkgMSA8PCBwZykpICE9IDApDQoNCisgICAgICBw YWdlcyArPSAoKHNpemVfdCkgMSA8PCBwZyk7DQoNCisNCg0KKyAgLyogV2UgdHJ5IHRvIGFsbG9j YXRlIHRoZSByZXF1ZXN0ZWQgc2l6ZS4NCg0KKyAgICAgSWYgdGhhdCBmYWlscywgdHJ5IHRvIGdl dCBhcyBtdWNoIGFzIHdlIGNhbi4gICovDQoNCisgIHNjb3BlZF9tbWFwIGF1eDsNCg0KKyAgZm9y ICg7IHBhZ2VzID4gMDsgcGFnZXMgPj49IDEpDQoNCisgICAgew0KDQorICAgICAgc2l6ZV90IGxl bmd0aDsNCg0KKyAgICAgIF9fdTY0IGRhdGFfc2l6ZTsNCg0KKyAgICAgIGRhdGFfc2l6ZSA9IChf X3U2NCkgcGFnZXMgKiBwYWdlX3NpemU7DQoNCisNCg0KKyAgICAgIC8qIERvbid0IGFzayBmb3Ig bW9yZSB0aGFuIHdlIGNhbiByZXByZXNlbnQgaW4gdGhlIGNvbmZpZ3VyYXRpb24uICAqLw0KDQor ICAgICAgaWYgKChfX3U2NCkgVUlOVF9NQVggPCBkYXRhX3NpemUpDQoNCisgIGNvbnRpbnVlOw0K DQorDQoNCisgICAgICBsZW5ndGggPSAoc2l6ZV90KSBkYXRhX3NpemU7DQoNCisNCg0KKyAgICAg IC8qIENoZWNrIGZvciBvdmVyZmxvd3MuICAqLw0KDQorICAgICAgaWYgKChfX3U2NCkgbGVuZ3Ro ICE9IGRhdGFfc2l6ZSkNCg0KKyAgY29udGludWU7DQoNCisNCg0KKyAgICAgIGhlYWRlci0+YXV4 X3NpemUgPSBkYXRhX3NpemU7DQoNCisNCg0KKyAgICAgIGVycm5vID0gMDsNCg0KKyAgICAgIGF1 eC5yZXNldCAobnVsbHB0ciwgbGVuZ3RoLCBQUk9UX1JFQUQsIE1BUF9TSEFSRUQsIGZkLmdldCAo KSwNCg0KKyAgICAgICAgICBoZWFkZXItPmF1eF9vZmZzZXQpOw0KDQorICAgICAgaWYgKGF1eC5n ZXQgKCkgIT0gTUFQX0ZBSUxFRCkNCg0KKyAgYnJlYWs7DQoNCisgICAgfQ0KDQorICBpZiAocGFn ZXMgPT0gMCkNCg0KKyAgICBlcnJvciAoXygiRmFpbGVkIHRvIG1hcCB0cmFjZSBidWZmZXI6ICVz LiIpLCBzYWZlX3N0cmVycm9yIChlcnJubykpOw0KDQorDQoNCisgIGV0bS0+ZXRtLnNpemUgPSBh dXguc2l6ZSAoKTsNCg0KKyAgZXRtLT5ldG0ubWVtID0gKGNvbnN0IHVpbnQ4X3QgKikgYXV4LnJl bGVhc2UgKCk7DQoNCisgIGV0bS0+ZXRtLmRhdGFfaGVhZCA9ICZoZWFkZXItPmF1eF9oZWFkOw0K DQorICBldG0tPmV0bS5sYXN0X2hlYWQgPSBoZWFkZXItPmF1eF90YWlsOw0KDQorICBldG0tPmhl YWRlciA9IChzdHJ1Y3QgcGVyZl9ldmVudF9tbWFwX3BhZ2UgKikgZGF0YS5yZWxlYXNlICgpOw0K DQorICBnZGJfYXNzZXJ0IChldG0tPmhlYWRlciA9PSBoZWFkZXIpOw0KDQoNCg0KLi4uIGNhbiBi ZSBzaGFyZWQgd2l0aCBidHJhY2VfZW5hYmxlX3B0ICgpIGJ5IGludHJvZHVjaW5nIHNvbWUNCg0K DQoNCnBlcmZfZXZlbnRfb3Blbl9hdXggKHN0cnVjdCBwZXJmX2V2ZW50X2J1ZmZlciAqLCBjb25z dCBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICopDQoNCg0KDQpoZWxwZXIuDQoNCg0KDQpBbmQgaWYg eW91IGluZGVlZCBuZWVkIHRvIG1tYXAgdGhlIGRhdGEgYnVmZmVyLCBhcyB3ZWxsLCB3ZSBjYW4g c2hhcmUgdGhhdCB3aXRoDQoNCmJ0cmFjZV9lbmFibGVfYnRzICgpLCBhbHRob3VnaCB3ZSdkIG5l ZWQgc29tZSBtb3JlIHJlc3RydWN0dXJpbmcgdG8gbGVhdmUNCg0KcGVyZl9ldmVudF9vcGVuIHRv IHRoZSBjYWxsZXIgYW5kIGp1c3QgYWxsb2NhdGUgdGhlIGRhdGEgYW5kIGF1eCBidWZmZXJzIHVz aW5nDQoNCnR3byBoZWxwZXJzIC0gdGhleSB3b3VsZCBhZ2FpbiBsb29rIHZlcnkgc2ltaWxhciBi dXQgbmVlZCB0byB0b3VjaCBhIGRpZmZlcmVudA0KDQpzZXQgb2YgZmllbGRzIGluIHRoZSBoZWFk ZXIsIHNvIEknZCBrZWVwIHRob3NlIHNlcGFyYXRlLg0KDQoNCg0KYnRyYWNlX2VuYWJsZV9mb28g KCkgd291bGQgdGhlbiBiZWNvbWUNCg0Kew0KDQogIHBlcmZfZXZlbnRfb3BlbiAoKQ0KDQogIHBl cmZfZXZlbnRfbW1hcF9kYXRhICgpDQoNCiAgcGVyZl9ldmVudF9tbWFwX2F1eCAoKSAgLyogbm90 IGZvciBidHMgKi8NCg0KfQ0KDQoNCg0KW1ppZWRdIEkgbGlrZSB0aGUgaWRlYSwgdGhlcmUgYXJl IHR3byBhc3BlY3RzIHRoYXQgd2UgbmVlZCB0byBjb25zaWRlciB0byBicmluZyBpdCB0byB0aGUg bWFpbnN0cmVhbSBjb2RlOg0KDQotIDE6IGludGVyZmFjZSBhbmQgc2NvcGUgZGVmaW5pdGlvbg0K DQpzdGF0aWMgc2NvcGVkX2ZkIHBlcmZfZXZlbnRfb3BlbiAoIGNvbnN0IHN0cnVjdCBwZXJmX2V2 ZW50X2F0dHIgKmV2ZW50X2F0dHJpYnV0ZXMsICBjb25zdCBpbnQgcGlkICkNCg0Kew0KDQogIGVy cm5vID0gMDsNCiAgc2NvcGVkX2ZkIGZkIChzeXNjYWxsIChTWVNfcGVyZl9ldmVudF9vcGVuLCBl dmVudF9hdHRyaWJ1dGVzLCBwaWQsIC0xLCAtMSwgMCkpOw0KICBpZiAoZmQuZ2V0ICgpIDwgMCkN CiAgICBkaWFnbm9zZV9wZXJmX2V2ZW50X29wZW5fZmFpbCAoKTsNCg0KICByZXR1cm4gZmQ7DQoN Cn0NCg0KdGhpcyBmdW5jdGlvbiB3aWxsIG9ubHkgb3BlbiB0aGUgZmlsZSBkZXNjcmlwdG9yIGFu ZCByZXR1cm4gaXQNCg0Kc3RhdGljIHNjb3BlZF9tbWFwIGRhdGEgcGVyZl9ldmVudF9tbWFwX2Rh dGEgKGNvbnN0IHNjb3BlZF9mZCBmZCwgc2l6ZV90IHNpemUsIHNpemVfdCBwYWdlX3NpemUsIGlu dCBvZmZzZXQpDQoNCnsNCg0KIC8vYWx0ZXJuYXRpdmUgMSBqdXN0IGNyZWF0ZSBpdCBhbmQgcmV0 dXJuIGl0DQoNCiAgLyogQWxsb2NhdGUgdGhlIGNvbmZpZ3VyYXRpb24gcGFnZS4gKi8NCiAgc2Nv cGVkX21tYXAgZGF0YSAobnVsbHB0ciwgcGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRF LCBNQVBfU0hBUkVELA0KICAgICAgICAgICAgZmQuZ2V0ICgpLCAwKTsNCiAgaWYgKGRhdGEuZ2V0 ICgpID09IE1BUF9GQUlMRUQpDQogICAgZXJyb3IgKF8oIkZhaWxlZCB0byBtYXAgdHJhY2UgdXNl ciBwYWdlOiAlcy4iKSwgc2FmZV9zdHJlcnJvciAoZXJybm8pKTsNCg0KICByZXR1cm4gZGF0YTsN Cg0KIC8vYWx0ZXJuYXRpdmUgMiwgY3JlYXRlIGl0IGl0IGFuZCBtYWtlIHN1cmUgdGhhdCB3ZSBy ZXNpemUgaXQgdG8gdGhlIGhpZ2hlc3QgcG9zc2libGUgcG93ZXIgb2YgMiBzdXBwb3J0ZWQgYnkg dGhlIHN5c3RlbQ0KDQovKiBDb252ZXJ0IHRoZSByZXF1ZXN0ZWQgc2l6ZSBpbiBieXRlcyB0byBw YWdlcyAocm91bmRpbmcgdXApLiAgKi8NCiAgcGFnZXMgPSBzaXplIC8gcGFnZV9zaXplDQogICAg ICAgKyAoc2l6ZSAlIHBhZ2Vfc2l6ZSkgPT0gMCA/IDAgOiAxKSk7DQogIC8qIFdlIG5lZWQgYXQg bGVhc3Qgb25lIHBhZ2UuICAqLw0KICBpZiAocGFnZXMgPT0gMCkNCiAgICBwYWdlcyA9IDE7DQoN CiAgLyogVGhlIGJ1ZmZlciBzaXplIGNhbiBiZSByZXF1ZXN0ZWQgaW4gcG93ZXJzIG9mIHR3byBw YWdlcy4gIEFkanVzdCBQQUdFUw0KICAgICB0byB0aGUgbmV4dCBwb3dlciBvZiB0d28uICAqLw0K ICBmb3IgKHBnID0gMDsgcGFnZXMgIT0gKChzaXplX3QpIDEgPDwgcGcpOyArK3BnKQ0KICAgIGlm ICgocGFnZXMgJiAoKHNpemVfdCkgMSA8PCBwZykpICE9IDApDQogICAgICBwYWdlcyArPSAoKHNp emVfdCkgMSA8PCBwZyk7DQoNCiAgLyogV2UgdHJ5IHRvIGFsbG9jYXRlIHRoZSByZXF1ZXN0ZWQg c2l6ZS4NCiAgICAgSWYgdGhhdCBmYWlscywgdHJ5IHRvIGdldCBhcyBtdWNoIGFzIHdlIGNhbi4g ICovDQogIHNjb3BlZF9tbWFwIGRhdGE7DQogIGZvciAoOyBwYWdlcyA+IDA7IHBhZ2VzID4+PSAx KQ0KICAgIHsNCiAgICAgIHNpemVfdCBsZW5ndGg7DQogICAgICBfX3U2NCBkYXRhX3NpemU7DQoN CiAgICAgIGRhdGFfc2l6ZSA9IChfX3U2NCkgcGFnZXMgKiBwYWdlX3NpemU7DQoNCiAgICAgIC8q IERvbid0IGFzayBmb3IgbW9yZSB0aGFuIHdlIGNhbiByZXByZXNlbnQgaW4gdGhlIGNvbmZpZ3Vy YXRpb24uICAqLw0KICAgICAgaWYgKChfX3U2NCkgVUlOVF9NQVggPCBkYXRhX3NpemUpDQogICAg Y29udGludWU7DQoNCiAgICAgIHNpemUgPSAoc2l6ZV90KSBkYXRhX3NpemU7DQogICAgICBsZW5n dGggPSBzaXplICsgcGFnZV9zaXplOw0KDQogICAgICAvKiBDaGVjayBmb3Igb3ZlcmZsb3dzLiAg Ki8NCiAgICAgIGlmICgoX191NjQpIGxlbmd0aCAhPSBkYXRhX3NpemUgKyBwYWdlX3NpemUpDQog ICAgY29udGludWU7DQoNCiAgICAgIGVycm5vID0gMDsNCiAgICAgIC8qIFRoZSBudW1iZXIgb2Yg cGFnZXMgd2UgcmVxdWVzdCBuZWVkcyB0byBiZSBhIHBvd2VyIG9mIHR3by4gICovDQogICAgICBk YXRhLnJlc2V0IChudWxscHRyLCBsZW5ndGgsIFBST1RfUkVBRCwgTUFQX1NIQVJFRCwgZmQuZ2V0 ICgpLCBvZmZzZXQpOw0KICAgICAgaWYgKGRhdGEuZ2V0ICgpICE9IE1BUF9GQUlMRUQpDQogICAg YnJlYWs7DQogICAgfQ0KDQogIGlmIChwYWdlcyA9PSAwKQ0KICAgIGVycm9yIChfKCJGYWlsZWQg dG8gbWFwIHRyYWNlIGJ1ZmZlcjogJXMuIiksIHNhZmVfc3RyZXJyb3IgKGVycm5vKSk7DQoNCn0N Cg0Kc3RhdGljIHNjb3BlZF9tbWFwIHBlcmZfZXZlbnRfbW1hcF9hdXggKGNvbnN0IHNjb3BlZF9m ZCBmZCwgc2l6ZV90IHNpemUsIHNpemVfdCBwYWdlX3NpemUsIGludCBvZmZzZXQpDQoNCnsNCg0K Ly9pZGVtLCB0aGUgZnVuY3Rpb24gaXMgc2ltaWxhciB0byBwcmV2aW91cyBvbmUgaXQgaXMgb25s eSB0aGUgb2Zmc2V0IGluIGRhdGEucmVzZXQgY2FsbCB0aGF0IGNoYW5nZXMNCg0KfQ0KDQpzbyBi b3RoIHBlcmZfZXZlbnRfbW1hcF9kYXRhIHBlcmZfZXZlbnRfbW1hcF9hdXggY2FuIGJlIGluIGZh Y3QgcmVkdWNlZCB0byBvbmUgZnVuY3Rpb24gaWYgd2UgZ2l2ZSBzaXplX3Qgc2l6ZSwgc2l6ZV90 IHBhZ2Vfc2l6ZSwgaW50IG9mZnNldCBhcyBwYXJhbWV0ZXJzLg0KDQoyLSBob3cgdG8gYnJpbmcg dGhpcyBjaGFuZ2UgdG8gdGhlIG1haW5zdHJlYW0uIGhlcmUgd2UgaGF2ZSB0d28gYWx0ZXJuYXRp dmVzIDogZWl0aGVyIEkgZG8gdGhpcyByZXN0cnVjdHVyaW5nIGZvciBldG0gb25seSBhbmQgdGhl biB5b3UgdGFrZSBjYXJlIG9mIHVzaW5nIHRoZSBoZWxwZXIgZnVuY3Rpb25zIGZvciBidHMgYW5k IHB0IG9yIEkgY29tbWl0IGl0IGFzIGl0IGlzIGFuZCB0aGVuIEkgaXNzdWUgYSBwYXRjaCBmb3Ig dGhpcyBwb2ludCBvbmx5IGZvciBidHMgUFQgYW5kIEVUTS4gV2hhdCBkbyB5b3UgcHJlZmVyPw0K DQoNCg0KDQoNCisgIGxlbmd0aCA9IGZyZWFkIChidWZmZXIsIDEsIGxlbmd0aCwgZmlsZS5nZXQg KCkpOw0KDQorICBidWZmZXJbbGVuZ3RoXT0nXDAnOw0KDQoNCg0KU3BhY2VzIGFyb3VuZCA9Lg0K W1ppZWRdIGRvbmUuDQoNCg0KDQoNCg0KDQoNCg0KKyAgd2hpbGUgKCgtLWxlbmd0aCkgIT0gMCkN Cg0KKyAgICB7DQoNCisgICAgICBpZiAoKGJ1ZmZlcltsZW5ndGhdID09ICcsJykgfHwgKGJ1ZmZl cltsZW5ndGhdID09ICctJykpDQoNCisgIHsNCg0KKyAgICBsZW5ndGgrKzsNCg0KKyAgICBicmVh azsNCg0KKyAgfQ0KDQorICAgIH0NCg0KKw0KDQorICBpbnQgY3B1X2NvdW50Ow0KDQorICBpbnQg Zm91bmQgPSBzc2NhbmYgKCZidWZmZXJbbGVuZ3RoXSwgIiVkIiwgJmNwdV9jb3VudCk7DQoNCisg IGlmIChmb3VuZCA8IDEpDQoNCisgICAgZXJyb3IgKF8oIkZhaWxlZCB0byBnZXQgY3B1IGNvdW50 IGluICVzOiAlcy4iKSwNCg0KKyAgICAgICBidWZmZXIsIHNhZmVfc3RyZXJyb3IgKGVycm5vKSk7 DQoNCisNCg0KKyAgY3B1X2NvdW50ICsrOw0KDQorICByZXR1cm4gKGNwdV9jb3VudCk7DQoNCg0K DQpObyBuZWVkIGZvciAoKS4NCltaaWVkXSBkb25lLg0KDQoNCg0KDQoNCg0KDQoNCg0KDQorICBj aGFyIGZpbGVuYW1lW1BBVEhfTUFYXTsNCg0KKyAgc25wcmludGYgKGZpbGVuYW1lLCBQQVRIX01B WCwNCg0KDQoNCnNpemVvZiAoZmlsZW5hbWUpDQpbWmllZF0gZG9uZS4NCg0KDQoNCg0KDQoNCg0K DQorICBjaGFyIGZpbGVuYW1lW1BBVEhfTUFYXTsNCg0KKw0KDQorICAvKiBHZXQgY29yZXNpZ2h0 IHJlZ2lzdGVyIGZyb20gc3lzZnMuICAqLw0KDQorICBzbnByaW50ZiAoZmlsZW5hbWUsIFBBVEhf TUFYLA0KDQoNCg0Kc2l6ZW9mIChmaWxlbmFtZSkNCltaaWVkXSBkb25lDQoNCg0KDQoNCg0KDQoN Cg0KKyAgICAgICIvc3lzL2J1cy9ldmVudF9zb3VyY2UvZGV2aWNlcy9jc19ldG0vY3B1JWQvJXMi LCBjcHUsIHBhdGgpOw0KDQorICBlcnJubyA9IDA7DQoNCisgIGdkYl9maWxlX3VwIGZpbGUgPSBn ZGJfZm9wZW5fY2xvZXhlYyAoZmlsZW5hbWUsICJyIik7DQoNCisgIGlmIChmaWxlLmdldCAoKSA9 PSBudWxscHRyKQ0KDQorICAgIGVycm9yIChfKCJGYWlsZWQgdG8gb3BlbiAlczogJXMuIiksIGZp bGVuYW1lLCBzYWZlX3N0cmVycm9yIChlcnJubykpOw0KDQorDQoNCisgIHVpbnQzMl90IHZhbCA9 IDA7DQoNCisNCg0KKyAgaW50ICBmb3VuZCA9IGZzY2FuZiAoZmlsZS5nZXQgKCksICIweCV4Iiwg JnZhbCk7DQoNCisgIGlmIChmb3VuZCAhPSAxKQ0KDQorICAgIGVycm9yIChfKCJGYWlsZWQgdG8g cmVhZCBjb3Jlc2lnaHQgcmVnaXN0ZXIgZnJvbSAlcy4iKSwgZmlsZW5hbWUpOw0KDQorICByZXR1 cm4gdmFsOw0KDQorfQ0KDQoNCg0KRW1wdHkgbGluZSBiZWZvcmUgcmV0dXJuPyAgSSdkIGFsc28g cmVtb3ZlIHRoZSBlbXB0eSBsaW5lIGJldHdlZW4gdGhlDQoNCmRlY2xhcmF0aW9uIG9mIHZhbCBh bmQgdGhlIGNhbGwgdG8gZnNjYW5mICgpLg0KDQoNCg0KVGhlcmUgYXJlIHNldmVyYWwgdmVyeSBz aW1pbGFyIGZ1bmN0aW9ucyBpbiB0aGlzIHBhdGNoIGFuZCBlYWNoIGlzIHN0cnVjdHVyZWQNCg0K ZGlmZmVyZW50bHk6DQoNCg0KDQorcGVyZl9ldmVudF9ldG1fZXZlbnRfdHlwZSAoKQ0KDQorew0K DQpbLi4uXQ0KDQorDQoNCisgIGludCB0eXBlLCBmb3VuZCA9IGZzY2FuZiAoZmlsZS5nZXQgKCks ICIlZCIsICZ0eXBlKTsNCg0KKyAgaWYgKGZvdW5kICE9IDEpDQoNCisgICAgZXJyb3IgKF8oIkZh aWxlZCB0byByZWFkIHRoZSBFVE0gZXZlbnQgdHlwZSBmcm9tICVzLiIpLCBmaWxlbmFtZSk7DQoN CisNCg0KKyAgcmV0dXJuIHR5cGU7DQoNCg0KDQorZ2V0X2NwdV9jb3VudCAodm9pZCkNCg0KK3sN Cg0KWy4uLl0NCg0KKw0KDQorICBpbnQgY3B1X2NvdW50Ow0KDQorICBpbnQgZm91bmQgPSBzc2Nh bmYgKCZidWZmZXJbbGVuZ3RoXSwgIiVkIiwgJmNwdV9jb3VudCk7DQoNCisgIGlmIChmb3VuZCA8 IDEpDQoNCisgICAgZXJyb3IgKF8oIkZhaWxlZCB0byBnZXQgY3B1IGNvdW50IGluICVzOiAlcy4i KSwNCg0KKyAgICAgICAgICAgICBidWZmZXIsIHNhZmVfc3RyZXJyb3IgKGVycm5vKSk7DQoNCisN Cg0KKyAgY3B1X2NvdW50ICsrOw0KDQorICByZXR1cm4gKGNwdV9jb3VudCk7DQoNCg0KDQorcGVy Zl9ldmVudF9ldG1fZXZlbnRfc2luayAoY29uc3Qgc3RydWN0IGJ0cmFjZV9jb25maWdfZXRtICpj b25mKQ0KDQorew0KDQpbLi4uXQ0KDQorDQoNCisgIHVuc2lnbmVkIGludCBzaW5rOw0KDQorICBp bnQgIGZvdW5kID0gZnNjYW5mIChmaWxlLmdldCAoKSwgIjB4JXgiLCAmc2luayk7DQoNCisgIGlm IChmb3VuZCAhPSAxKQ0KDQorICAgIGVycm9yIChfKCJGYWlsZWQgdG8gcmVhZCB0aGUgRVRNIHNp bmsgZnJvbSAlcy4iKSwgZmlsZW5hbWUpOw0KDQorDQoNCisgIHJldHVybiBzaW5rOw0KDQoNCg0K K2NzX2V0bV9nZXRfcmVnaXN0ZXIgKGludCBjcHUsIGNvbnN0IGNoYXIgKnBhdGgpDQoNCit7DQoN ClsuLi5dDQoNCisNCg0KKyAgdWludDMyX3QgdmFsID0gMDsNCg0KKw0KDQorICBpbnQgIGZvdW5k ID0gZnNjYW5mIChmaWxlLmdldCAoKSwgIjB4JXgiLCAmdmFsKTsNCg0KKyAgaWYgKGZvdW5kICE9 IDEpDQoNCisgICAgZXJyb3IgKF8oIkZhaWxlZCB0byByZWFkIGNvcmVzaWdodCByZWdpc3RlciBm cm9tICVzLiIpLCBmaWxlbmFtZSk7DQoNCisgIHJldHVybiB2YWw7DQoNCg0KW1ppZWRdIGV4aXN0 aW5nIGNvZGUgaW4gdGhpcyBmaWxlIGhhcyBhbiBlbXB0eSBsaW5lIGJlZm9yZSB0aGUgbGFzdCBy ZXR1cm4gZXZlcnl3aGVyZS4gc2hhbGwgSSBzdGljayB0byB0aGlzIGNvbnZlbnRpb24/IGVsaW1p bmF0aW5nIHRoZSBlbXB0eSBsaW5lcyBiZWZvcmUgcmV0dXJucyB3aWxsIGJyaW5nIGluY29uc2lz dGVuY3kgaW4gdGhlIGZpbGUuIHdoaWNoIGNvZGluZyBjb252ZW50aW9uIGRvIHdlIGhhdmUgdG8g YXBwbHkgaGVyZT8NCg0KDQoNCg0KDQoNCisNCg0KKyNkZWZpbmUgQ09SRVNJR0hUX0VUTV9QTVVf U0VFRCAgMHgxMA0KDQorDQoNCisvKiBDYWxjdWxhdGUgdHJhY2VfaWQgZm9yIHRoaXMgY3B1DQoN CisgICB0byBiZSBrZXB0IGFsaWduZWQgd2l0aCBjb3Jlc2lnaHQtcG11LmguICAqLw0KDQorDQoN CitzdGF0aWMgaW5saW5lIGludA0KDQorY29yZXNpZ2h0X2dldF90cmFjZV9pZCAoaW50IGNwdSkN Cg0KK3sNCg0KKyAgcmV0dXJuIChDT1JFU0lHSFRfRVRNX1BNVV9TRUVEICsgKGNwdSAqIDIpKTsN Cg0KDQoNCkluIHBhdGNoIDMsIHlvdSB3cm90ZQ0KDQoNCg0KKyAgLyogVHJhY2UgaWQgZm9yIHRo aXMgdGhyZWFkLg0KDQorICAgICBPbiBhIGxpbnV4IHN5c3RlbSwgdHJhY2VfaWQgaXMgYXNzaWdu ZWQgcGVyIGNwdS4gVGhlIGtlcm5lbCBjb3BpZXMNCg0KKyAgICAgdGhlIHRyYWNlcyBvZiBlYWNo IHRocmVhZCBpbiBhIGRlZGljYXRlZCByaW5nIGJ1ZmZlci4gQnkgdGhpcywNCg0KKyAgICAgdHJh Y2VzIGJlbG9uZ2luZyB0byBkaWZmZXJlbnQgdGhyZWFkcyBhcmUgZGUtbXVsdGlwbGV4ZWQuDQoN CisgICAgIE9uIGFuIFJUT1Mgc3lzdGVtLCBlc3BlY2lhbGx5IHdoZW4gcm91dGluZyB0aGUgdHJh Y2VzIG91dHNpZGUgb2YgdGhlIFNvQywNCg0KKyAgICAgdGhlIE9TIGhhcyBubyBvdGhlciBtZWFu IGZvciBkZS1tdWx0aXBsZXhpbmcgdGhlIHRyYWNlcyB0aGFuDQoNCisgICAgIHRoZSB0cmFjZV9p ZC4gVGhlIGhhcmR3YXJlIChFVE0gSVApIHJlc2VydmVzIDcgYml0cyBmb3IgdGhlIHRyYWNlX2lk Lg0KDQorICAgICBPbiBsaW51eCBzeXN0ZW0gdHJhY2UgaWQgaXMgbm90IG5lZWRlZCwgc2V0IGl0 IHRvIDB4RkYgdG8gaWdub3JlIGl0DQoNCisgICAgIGR1cmluZyBwYXJzaW5nLiAgKi8NCg0KKyAg dWludDhfdCB0cmFjZV9pZDsNCg0KDQoNClNob3VsZCB0aGlzIGZ1bmN0aW9uIHJldHVybiB1aW50 OF90IGFuZCBjaGVjayB0aGF0IHRoZSBJRCBpcyA3IGJpdCBtYXg/DQpbWmllZF0gZG9uZSwgcmVz ZXJ2ZWQgYW5kIG5vdCBhbGxvd2VkIHZhbHVlcyBhcmUgYWxzbyBnZW5lcmF0aW5nIGEgd2Fybmlu ZyBub3cuDQoNCg0KDQoNCg0KDQoNCg0KDQoNCitzdGF0aWMgdm9pZA0KDQorZmlsbF9ldG1fdHJh Y2VfcGFyYW1zIChzdHJ1Y3QgY3NfZXRtX3RyYWNlX3BhcmFtcyAqZXRtX3RyYWNlX3BhcmFtcywg aW50DQoNCmNwdSkNCg0KK3sNCg0KKyAgaWYgKGNzX2V0bV9pc19ldG12NCAoY3B1KSA9PSB0cnVl KQ0KDQoNCg0KTm8gbmVlZCBmb3IgZXhwbGljaXQgY2hlY2tzIG9uIGJvb2wuDQpbWmllZF0gZG9u ZS4NCg0KDQoNCg0KDQoNCg0KDQoNCg0KK3N0YXRpYyB2b2lkDQoNCitsaW51eF9maWxsX2J0cmFj ZV9ldG1fY29uZmlnIChzdHJ1Y3QgYnRyYWNlX3RhcmdldF9pbmZvICp0aW5mbywNCg0KKyAgICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBidHJhY2VfZGF0YV9ldG1fY29uZmlnICpjb25mKQ0K DQorew0KDQorDQoNCisgIGNzX2V0bV90cmFjZV9wYXJhbXMgZXRtX3RyYWNlX3BhcmFtczsNCg0K DQoNClBsZWFzZSBkZWNsYXJlIGF0IGluaXRpYWxpemF0aW9uIHRpbWUuDQpbWmllZF0gcHVzaGVk IGZvcndhcmRzIGJlZm9yZSB0aGUgZm9yIGxvb3ANCg0KDQoNCg0KDQoNCg0KDQorICBjb25mLT5j cHVfY291bnQgPSBnZXRfY3B1X2NvdW50ICgpOw0KDQorICBjb25mLT5ldG1fdHJhY2VfcGFyYW1z ID0gbmV3IHN0ZDo6dmVjdG9yPGNzX2V0bV90cmFjZV9wYXJhbXM+Ow0KDQorICBmb3IgKGludCBp ID0gMDsgaSA8IGNvbmYtPmNwdV9jb3VudDsgaSsrKQ0KDQorICAgIHsNCg0KKyAgICAgIGZpbGxf ZXRtX3RyYWNlX3BhcmFtcyAoJmV0bV90cmFjZV9wYXJhbXMsaSk7DQoNCisgICAgICBjb25mLT5l dG1fdHJhY2VfcGFyYW1zLT5wdXNoX2JhY2sgKGV0bV90cmFjZV9wYXJhbXMpOw0KDQorICAgIH0N Cg0KDQoNCldlIG5lZWQgdG8gYXZvaWQgbGVha2luZyB0aGUgdmVjdG9yIHdoZW4gZmlsbF9ldG1f dHJhY2VfcGFyYW1zICgpIHRocm93cy4NCg0KDQoNCg0KDQoNCg0KK3N0YXRpYyBlbnVtIGJ0cmFj ZV9lcnJvcg0KDQorbGludXhfcmVhZF9ldG0gKHN0cnVjdCBidHJhY2VfZGF0YV9ldG0gKmJ0cmFj ZSwNCg0KKyAgICAgICAgIHN0cnVjdCBidHJhY2VfdGFyZ2V0X2luZm8gKnRpbmZvLA0KDQorICAg ICAgICAgZW51bSBidHJhY2VfcmVhZF90eXBlIHR5cGUpDQoNCit7DQoNCisgIHN0cnVjdCBwZXJm X2V2ZW50X2J1ZmZlciAqZXRtOw0KDQorICBldG0gPSAmdGluZm8tPnZhcmlhbnQuZXRtLmV0bTsN Cg0KDQoNClBsZWFzZSBjb21iaW5lLiAgTm8gZm9yd2FyZCBkZWNsYXJhdGlvbnMgYW55bW9yZS4g IFRoZSBvbGQgY29kZSB3YXMgd3JpdHRlbg0KDQp3aGVuIEdEQiB3YXMgc3RpbGwgQy4NCltaaWVk XSBkb25lLg0KDQoNCg0KDQoNCg0KDQoNCg0KDQpyZWdhcmRzLA0KDQptYXJrdXMuDQoNCkludGVs IERldXRzY2hsYW5kIEdtYkgNCg0KUmVnaXN0ZXJlZCBBZGRyZXNzOiBBbSBDYW1wZW9uIDEwLCA4 NTU3OSBOZXViaWJlcmcsIEdlcm1hbnkNCg0KVGVsOiArNDkgODkgOTkgODg1My0wLCB3d3cuaW50 ZWwuZGU8aHR0cDovL3d3dy5pbnRlbC5kZT4gPGh0dHA6Ly93d3cuaW50ZWwuZGU+PGh0dHA6Ly93 d3cuaW50ZWwuZGU+DQoNCk1hbmFnaW5nIERpcmVjdG9yczogQ2hyaXN0aW4gRWlzZW5zY2htaWQs IFNoYXJvbiBIZWNrLCBUaWZmYW55IERvb24gU2lsdmENCg0KQ2hhaXJwZXJzb24gb2YgdGhlIFN1 cGVydmlzb3J5IEJvYXJkOiBOaWNvbGUgTGF1DQoNClJlZ2lzdGVyZWQgT2ZmaWNlOiBNdW5pY2gN Cg0KQ29tbWVyY2lhbCBSZWdpc3RlcjogQW10c2dlcmljaHQgTXVlbmNoZW4gSFJCIDE4NjkyOA0K DQoNCi0tDQoNCg0KDQoNClppZWQgR3Vlcm1hemkNCmZvdW5kZXINCg0KVHJhbmRlIEdtYkgNCkxl dXNjaG5lcnN0cmHDn2UgMg0KNjk0NjkgV2VpbmhlaW0vR2VybWFueQ0KDQpNb2JpbGU6ICs0OTE3 MjI2NDUxMjcNCm1haWx0bzp6aWVkLmd1ZXJtYXppQHRyYW5kZS5kZQ0KDQpUcmFuZGUgR21iSA0K TGV1c2NobmVyc3RyYcOfZSAyLCBELTY5NDY5IFdlaW5oZWltOyBUZWxlZm9uOiArNDkxNzIyNjQ1 MTI3DQpTaXR6IGRlciBHZXNlbGxzY2hhZnQ6IFdlaW5oZWltLSBSZWdpc3RlcmdlcmljaHQ6IEFH IE1hbm5oZWltIEhSQiA3MzYyMDkgLSBHZXNjaMOkZnRzZsO8aHJ1bmc6IFppZWQgR3Vlcm1hemkN Cg0KQ29uZmlkZW50aWFsaXR5IE5vdGUNClRoaXMgbWVzc2FnZSBpcyBpbnRlbmRlZCBvbmx5IGZv ciB0aGUgdXNlIG9mIHRoZSBuYW1lZCByZWNpcGllbnQocykgYW5kIG1heSBjb250YWluIGNvbmZp ZGVudGlhbCBhbmQvb3IgcHJpdmlsZWdlZCBpbmZvcm1hdGlvbi4gSWYgeW91IGFyZSBub3QgdGhl IGludGVuZGVkIHJlY2lwaWVudCwgcGxlYXNlIGNvbnRhY3QgdGhlIHNlbmRlciBhbmQgZGVsZXRl IHRoZSBtZXNzYWdlLiBBbnkgdW5hdXRob3JpemVkIHVzZSBvZiB0aGUgaW5mb3JtYXRpb24gY29u dGFpbmVkIGluIHRoaXMgbWVzc2FnZSBpcyBwcm9oaWJpdGVkLg0KDQoNCg0KSW50ZWwgRGV1dHNj aGxhbmQgR21iSA0KUmVnaXN0ZXJlZCBBZGRyZXNzOiBBbSBDYW1wZW9uIDEwLCA4NTU3OSBOZXVi aWJlcmcsIEdlcm1hbnkNClRlbDogKzQ5IDg5IDk5IDg4NTMtMCwgd3d3LmludGVsLmRlPGh0dHA6 Ly93d3cuaW50ZWwuZGU+DQpNYW5hZ2luZyBEaXJlY3RvcnM6IENocmlzdGluIEVpc2Vuc2NobWlk LCBTaGFyb24gSGVjaywgVGlmZmFueSBEb29uIFNpbHZhDQpDaGFpcnBlcnNvbiBvZiB0aGUgU3Vw ZXJ2aXNvcnkgQm9hcmQ6IE5pY29sZSBMYXUNClJlZ2lzdGVyZWQgT2ZmaWNlOiBNdW5pY2gNCkNv bW1lcmNpYWwgUmVnaXN0ZXI6IEFtdHNnZXJpY2h0IE11ZW5jaGVuIEhSQiAxODY5MjgNCg0KDQoN Cg0KSW50ZWwgRGV1dHNjaGxhbmQgR21iSA0KUmVnaXN0ZXJlZCBBZGRyZXNzOiBBbSBDYW1wZW9u IDEwLCA4NTU3OSBOZXViaWJlcmcsIEdlcm1hbnkNClRlbDogKzQ5IDg5IDk5IDg4NTMtMCwgd3d3 LmludGVsLmRlPGh0dHA6Ly93d3cuaW50ZWwuZGU+DQpNYW5hZ2luZyBEaXJlY3RvcnM6IENocmlz dGluIEVpc2Vuc2NobWlkLCBTaGFyb24gSGVjaywgVGlmZmFueSBEb29uIFNpbHZhDQpDaGFpcnBl cnNvbiBvZiB0aGUgU3VwZXJ2aXNvcnkgQm9hcmQ6IE5pY29sZSBMYXUNClJlZ2lzdGVyZWQgT2Zm aWNlOiBNdW5pY2gNCkNvbW1lcmNpYWwgUmVnaXN0ZXI6IEFtdHNnZXJpY2h0IE11ZW5jaGVuIEhS QiAxODY5MjgNCi0tDQoNCg0KWmllZCBHdWVybWF6aQ0KZm91bmRlcg0KDQpUcmFuZGUgR21iSA0K TGV1c2NobmVyc3RyYcOfZSAyDQo2OTQ2OSBXZWluaGVpbS9HZXJtYW55DQoNCk1vYmlsZTogKzQ5 MTcyMjY0NTEyNw0KbWFpbHRvOnppZWQuZ3Vlcm1hemlAdHJhbmRlLmRlDQoNClRyYW5kZSBHbWJI DQpMZXVzY2huZXJzdHJhw59lIDIsIEQtNjk0NjkgV2VpbmhlaW07IFRlbGVmb246ICs0OTE3MjI2 NDUxMjcNClNpdHogZGVyIEdlc2VsbHNjaGFmdDogV2VpbmhlaW0tIFJlZ2lzdGVyZ2VyaWNodDog QUcgTWFubmhlaW0gSFJCIDczNjIwOSAtIEdlc2Now6RmdHNmw7xocnVuZzogWmllZCBHdWVybWF6 aQ0KDQpDb25maWRlbnRpYWxpdHkgTm90ZQ0KVGhpcyBtZXNzYWdlIGlzIGludGVuZGVkIG9ubHkg Zm9yIHRoZSB1c2Ugb2YgdGhlIG5hbWVkIHJlY2lwaWVudChzKSBhbmQgbWF5IGNvbnRhaW4gY29u ZmlkZW50aWFsIGFuZC9vciBwcml2aWxlZ2VkIGluZm9ybWF0aW9uLiBJZiB5b3UgYXJlIG5vdCB0 aGUgaW50ZW5kZWQgcmVjaXBpZW50LCBwbGVhc2UgY29udGFjdCB0aGUgc2VuZGVyIGFuZCBkZWxl dGUgdGhlIG1lc3NhZ2UuIEFueSB1bmF1dGhvcml6ZWQgdXNlIG9mIHRoZSBpbmZvcm1hdGlvbiBj b250YWluZWQgaW4gdGhpcyBtZXNzYWdlIGlzIHByb2hpYml0ZWQuDQoNCg0KSW50ZWwgRGV1dHNj aGxhbmQgR21iSApSZWdpc3RlcmVkIEFkZHJlc3M6IEFtIENhbXBlb24gMTAsIDg1NTc5IE5ldWJp YmVyZywgR2VybWFueQpUZWw6ICs0OSA4OSA5OSA4ODUzLTAsIHd3dy5pbnRlbC5kZSA8aHR0cDov L3d3dy5pbnRlbC5kZT4KTWFuYWdpbmcgRGlyZWN0b3JzOiBDaHJpc3RpbiBFaXNlbnNjaG1pZCwg U2hhcm9uIEhlY2ssIFRpZmZhbnkgRG9vbiBTaWx2YSAgCkNoYWlycGVyc29uIG9mIHRoZSBTdXBl cnZpc29yeSBCb2FyZDogTmljb2xlIExhdQpSZWdpc3RlcmVkIE9mZmljZTogTXVuaWNoCkNvbW1l cmNpYWwgUmVnaXN0ZXI6IEFtdHNnZXJpY2h0IE11ZW5jaGVuIEhSQiAxODY5MjgK