From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by mx.groups.io with SMTP id smtpd.web10.99561.1683516491743281614 for ; Sun, 07 May 2023 20:28:11 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=UJca1z4D; spf=pass (domain: intel.com, ip: 192.55.52.151, mailfrom: hao.a.wu@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1683516491; x=1715052491; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=9dgPHaWCDg0/9FNXkimfsaviY9wlGmFqMpncKLQUXgc=; b=UJca1z4D19nz2J+gQafXjjbnsbQlpTmRuj1VugsTZ2iAmlV7Bb9HWHzy nM7lG76lRLK3m/6a4H+AVuEW4wr/NmASJrHM/lelHmWQWtpBOj1H591O+ Xgbc6q64AVHQ5snLD8LSr0z75adQ1Npxz6u9YjaSNFu17WpEA5iyjbXDk cGYvXP68RWzDZlD6eo085nRv97Mr2Gmtr94egAJt0IzBFqaoGEGbXkSxY UlMLWdKyDcgqFk2OSBex5s0zPWu+CCYBvkgf8sN1HsOWDylczAHe3QXpC Z6pesVY5X9kXQ2/9iDgOaxlQWIAOnlVrkguxX1Edz5zRSawfXOsNPfNkF Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10703"; a="329905978" X-IronPort-AV: E=Sophos;i="5.99,258,1677571200"; d="scan'208";a="329905978" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 May 2023 20:28:09 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10703"; a="692449122" X-IronPort-AV: E=Sophos;i="5.99,258,1677571200"; d="scan'208";a="692449122" Received: from orsmsx603.amr.corp.intel.com ([10.22.229.16]) by orsmga007.jf.intel.com with ESMTP; 07 May 2023 20:28:09 -0700 Received: from orsmsx612.amr.corp.intel.com (10.22.229.25) by ORSMSX603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Sun, 7 May 2023 20:28:09 -0700 Received: from orsmsx610.amr.corp.intel.com (10.22.229.23) by ORSMSX612.amr.corp.intel.com (10.22.229.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Sun, 7 May 2023 20:28:08 -0700 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx610.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23 via Frontend Transport; Sun, 7 May 2023 20:28:08 -0700 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (104.47.66.42) 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.2507.23; Sun, 7 May 2023 20:28:08 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IxFoWxlSPt9ZFM4jUZ3ySktBsXTiVt6YeGbV9RSer+vMJt1oI5NwoAiZq9USvY0yTZgDoUYmNVc+SwA3ySdBZx3PhPLh5aDK9YcqPsUoDKiEght7cu7mUnV20rMSx7dgmsjatfUQ3sR5SqdEIW+0VTqhQhj+Zm3GWxvSEbL4M4wRiOnbdggp6VTILXXJoux5Du+XjX1vM6q0NblamUknSgoJNs1zp9JrT8FE5wKoCbsTSaj44V+i2vzY47fDKm8y+Rc/OXYzVfORN24NpXlv7SHP2J9TCNdNT0khm8XpebJckExMUyy3MpUFJ9hdBGBrViINkCfAxxwxonzQkzGjUA== 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=9dgPHaWCDg0/9FNXkimfsaviY9wlGmFqMpncKLQUXgc=; b=MmodnTlgtn6B+cV41F26IVwGygJvRJD1nEloKpAlyN4S4ANXPbKE2RfiwwzVnj6asCXZRfBqaGZQ3w/2aWXHfegBE/VbgN9eQWIX00qOKwNiqUSP8fPOjhUrhI6EoZijYP3hG/PlzKw71zludbv10wQiXPPxplLa2xYTQ9HrL+eevjCOOkgM96ThcLjmbAYvPNcZmmE75l1O6GwIf4pwmEg3wZTNOBNJhtc53RbGtKyV1M2gZ530+CwGeJXNlVDVyNoIeWpSrbGh3J7l0hZD4ttchhrFlAnjp83mGLBsfT2ak3xKj3U95f1OQ4Ot4OEYpCwjzjAzMCbjmp9uBVl4fw== 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 DM6PR11MB4025.namprd11.prod.outlook.com (2603:10b6:5:197::31) by CY5PR11MB6090.namprd11.prod.outlook.com (2603:10b6:930:2e::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6363.29; Mon, 8 May 2023 03:28:01 +0000 Received: from DM6PR11MB4025.namprd11.prod.outlook.com ([fe80::2210:76b:72c8:e83e]) by DM6PR11MB4025.namprd11.prod.outlook.com ([fe80::2210:76b:72c8:e83e%6]) with mapi id 15.20.6363.032; Mon, 8 May 2023 03:28:01 +0000 From: "Wu, Hao A" To: =?gb2312?B?UmljaGFyZCBIbyAous7D99bSKQ==?= , "devel@edk2.groups.io" CC: Andrew Fish , Leif Lindholm , "Kinney, Michael D" , Michael Kubacki , "Liu, Zhiguang" , "Gao, Liming" , "Ni, Ray" , "Tinh Nguyen" , Rebecca Cran , =?gb2312?B?VG9ueSBMbyAowV+98MvJKQ==?= Subject: Re: [PATCH v2 1/3] MdeModulePkg/Bus/Usb/UsbNetwork/UsbRndis: Add USB RNDIS devices support Thread-Topic: [PATCH v2 1/3] MdeModulePkg/Bus/Usb/UsbNetwork/UsbRndis: Add USB RNDIS devices support Thread-Index: AQHZgVu2y/7ahXUO/Uqo4rXvosFNo69Ptsww Date: Mon, 8 May 2023 03:28:00 +0000 Message-ID: References: <20230508031720.274-1-richardho@ami.com> In-Reply-To: <20230508031720.274-1-richardho@ami.com> Accept-Language: en-US, zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DM6PR11MB4025:EE_|CY5PR11MB6090:EE_ x-ms-office365-filtering-correlation-id: fcbddc4e-120e-42b0-929a-08db4f7439d0 x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: wwdk8EPHOiDl7FMb402qBTxfEFCDnLVEngWZbyVrVslt1m/pLhHFxCWiKCTNdLT8HHnV6zjwXr1Bub0ExTcYH/b5vfhVwpTr/IpAXX2HboNL18FGfGRgxtIbF+cPC+2I6U7n2vjy/3zt1dVYPyEYO/t4REuG0mY2GBaE0LggzOPIJBoeSclBvNuOnmYMUAKFvHrf6l+n+AVtXHCR59rgKJI2PetZoy+Ukn8W/e22/TxqvAuVyDw0w2kfYwHsMA27rm/Vd4H+LaH5wyKSz/emXp9pzN9KPxDJbKdMnsRTYX0u2K7hQgD2YQ4paTe96re9XgFE2XtjXZBkVHaE3QTgFPVM/1klMqk7t+NVn80xH0n1gjqte6O2Qg4t0l791MlOAwNdQ66NBtwSa5PfT3g6NrUDbfvhlf0KdYCUS4vjhXlp+Nlo52EQDWzICilvUE41C1QSSfyZaDqhEE/yN9Wr0+htqj85m6VrgNriR1WSwq6oUeFFssL8Qs6/Z1nrwIiMRXJU2RUEg4f1nFnodWrT7no5Wg7umkbW06JDc2nwz9EDQXLGvZ/HqKDe4VVTEWppzYDeilePSKARoe6DZAdqU5IzdVS9hlGjPHPAsJ0jjvDwQrWPVtuGAGiTIqa8jpiU x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR11MB4025.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(136003)(39860400002)(376002)(396003)(346002)(366004)(451199021)(86362001)(40140700001)(33656002)(316002)(110136005)(19627235002)(54906003)(64756008)(4326008)(66946007)(66446008)(66556008)(966005)(76116006)(66476007)(7696005)(478600001)(55016003)(2906002)(8936002)(8676002)(30864003)(5660300002)(52536014)(41300700001)(82960400001)(38070700005)(38100700002)(186003)(122000001)(9686003)(6506007)(53546011)(83380400001)(26005)(71200400001)(559001)(579004)(44824005);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?gb2312?B?WDBCc1d2MDU1MVc2dkU4T21sNGdpbmlpK2dMaHFvbVU5dTdBUEFHTXlHTndv?= =?gb2312?B?UjFYYWtyV3J6clhVR1ByaUE3cnBZeThtY1hqbDB3Y2txRlN6TEpDOFcvLzMv?= =?gb2312?B?RXYrZHpBVXVmQUVORVhDWFg0ZzYrZ0VqaldZNWg0UW90ZFR0TjY1ckxMUGQ5?= =?gb2312?B?T1p4Q2RIMVpIUm1TMEp4K1RXS3BVNXNoZGJOV3pjb0hZN0FwNEVZeURzVkxY?= =?gb2312?B?RklWVEl6QVdGQzNUNkJZYnNYVlZ5VkRLSk9udEE3OENDalQ5S2lIN0RaUDVs?= =?gb2312?B?V2s4bEIvQmpkc3RLM0tMdkUxVnRMSlBVeWRobllTbTM0OGpXMnlpa2NFL05N?= =?gb2312?B?KzZ4SitkWTErck9qa2xQUi9GK0k5ZmZ3RFFyKzdwU29pNGNidUVsVDJkTzUw?= =?gb2312?B?UkZLcGVRSSs0S2F4dEpaQkxKUXVNOFhrVDdya2VNa0RBV2hSa1ptRFpKVFR2?= =?gb2312?B?QytST3RyMFl6ckt3b0hQK3IxZEhNcmFFbk9NVVVSTXp0SVAzajNDODE0L0lw?= =?gb2312?B?dzZpZDNkZ2gvMmpJZHZhOE44YWI4YnRGUGVKTjU0Qms4L21hN3NRYWx2cHd1?= =?gb2312?B?eHRvRm5GOGlBTjBBeXg2SWxINExHUS9iKzd5UnR4cEFmdi9Nd1NrbUtFb2hD?= =?gb2312?B?OWhGUVBad29pRW9wV3kyUjlzQTdLNk13a0d5azV1NDczNGxqKzFZcDE4RWRo?= =?gb2312?B?ZS95SzRwTEdHdmFZQ2IvUjB3b04wQWZFaXhvYWd2MUdQUHNBSXpFTWpTdkpX?= =?gb2312?B?ZUxqSk9IYVJOd0l6MEFiM1o1bmgybXBndmpOSW9ReDE2OEpyYm45NzlpUWli?= =?gb2312?B?c1NYdGEwRW4xTkYwSk8vZTl1ejNKOFRTSlgrMEtKZWVMYmJQTVAxY0FENUdF?= =?gb2312?B?VEQyaWQ3eXBLYk95ejBDQ1haclVLdWdtVXVlL2xlM3BoaHY4dEs2S0tqNlVM?= =?gb2312?B?VEUwM1FtOUJObE5Ld2duNWhmVWE4ZXdSMnBJYkluSVQ5b05SZHdkK3RWbGZV?= =?gb2312?B?ay9xY3E0Q3ZnQmNqc2ZMRzlyTTc5eC9uRjZ1bmtaR2t0LzNLczExRUpoNGVJ?= =?gb2312?B?RlRiUVVxOXpTVGtVRkNidFVzUmF6amtHMWhEVStLOW8yaXoxbjFMSDRITG5u?= =?gb2312?B?L2N4WWZlZFhwNStoZzgzSzNFbWY3VFlFMmtaRjBVYXpSejI3aG90VDlJZnps?= =?gb2312?B?VXVCMndSRTY4dU5WMjJpUTZ1MUN2WC9JUzBOK1RZSlN5Qk4rMnN5OU5hb2h5?= =?gb2312?B?Q3FZeGRTckZyVXgybGRaRjRlMGVnaG53enJBSWRxYThka2RBQW96QUNXMzE1?= =?gb2312?B?ZEF2RHFUR0hFNFJjRlp1MTFmS0ZEMzNUWmNvT1QzbTZiZjljY05ZYWF1UWp6?= =?gb2312?B?VXphbkRuSDE5M2x2aU5ZclhsMDF0YjF4MzkveHFBMTlLVzM2ZXZ2SnJqcHFB?= =?gb2312?B?bWo4R09ZaUw3RnJ6RzdmajdsamxRSUM3R1FrM0JhUXpLZkRxYWsxTlIyT3Jh?= =?gb2312?B?bWVDekc2T2M1SndacHpPUTljVWsvTmsvd0RsZzhTY1kyUHlxb093aHlJdXZs?= =?gb2312?B?MG5HckxGSG9RanVQVXd6YU10YlBDQ3RlRWNYNENXdEhUcU8wZXFoWXlrVWFE?= =?gb2312?B?VWJ0c0ZFZ00zV3JOdTVabW9mUURTRVgyc2FiM0tYNFcyQjQ4VmFhZTYrd0lW?= =?gb2312?B?dVVncnBoZ05qdHR5cXd1VGdIRVpkdGI1OEtiVTVJYU9YUFdHb0JLMUp2dzlX?= =?gb2312?B?SHFwblZaS0xrV1A2VktMY2dPUmhtRDY3RUhnWjlTMlk4V015UWtMWVZ4R0pR?= =?gb2312?B?WkxXYW9DcS9KOU5kVGc2S09TeUppQTNkc1FXUU5sWGxJcEFKUFArNXJSN0pN?= =?gb2312?B?REhmZktmdXVlaldtVHdqNFcyQ3JCRXRMQzVPNGI5Q2QyUThZWktMZ2lJWFFo?= =?gb2312?B?S21Ec0R4MTFHeEVqZS9SZTlLRS9oYzlqcVZWUXc5ek1jRzJQRFNsOWRJbTZq?= =?gb2312?B?K08rdnhwNkxYZEFFelBvYVBnbnl6MkE2Y2luRVl6SG5aMUtqYktUb0VyVUFM?= =?gb2312?B?OW5nK2VPTWUzSDZEN0trMENmYUY1YTJWbk43cFI5MXVkd04vNUhsenp3RURX?= =?gb2312?Q?CxR6Q+MKsmVOpNYbGSo8PYT9D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM6PR11MB4025.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: fcbddc4e-120e-42b0-929a-08db4f7439d0 X-MS-Exchange-CrossTenant-originalarrivaltime: 08 May 2023 03:28:00.7326 (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: DRaQMD+tkEI7ilP066mz2NRRQdz+T70+NmAor2yqwW3q1ReVufZhAZV5zE8kCb6ciOPvWnkwbObuUTillJX89g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY5PR11MB6090 Return-Path: hao.a.wu@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBSaWNoYXJkIEhvICi6zsP31tIp IDxSaWNoYXJkSG9AYW1pLmNvbT4NCj4gU2VudDogTW9uZGF5LCBNYXkgOCwgMjAyMyAxMToxOCBB TQ0KPiBUbzogZGV2ZWxAZWRrMi5ncm91cHMuaW8NCj4gQ2M6IEFuZHJldyBGaXNoIDxhZmlzaEBh cHBsZS5jb20+OyBMZWlmIExpbmRob2xtDQo+IDxxdWljX2xsaW5kaG9sQHF1aWNpbmMuY29tPjsg S2lubmV5LCBNaWNoYWVsIEQNCj4gPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPjsgTWljaGFl bCBLdWJhY2tpDQo+IDxtaWt1YmFja0BsaW51eC5taWNyb3NvZnQuY29tPjsgTGl1LCBaaGlndWFu ZyA8emhpZ3VhbmcubGl1QGludGVsLmNvbT47DQo+IEdhbywgTGltaW5nIDxnYW9saW1pbmdAYnlv c29mdC5jb20uY24+OyBXdSwgSGFvIEEgPGhhby5hLnd1QGludGVsLmNvbT47DQo+IE5pLCBSYXkg PHJheS5uaUBpbnRlbC5jb20+OyBUaW5oIE5ndXllbg0KPiA8dGluaG5ndXllbkBvcy5hbXBlcmVj b21wdXRpbmcuY29tPjsgUmViZWNjYSBDcmFuDQo+IDxyZWJlY2NhQGJzZGlvLmNvbT47IFRvbnkg TG8gKMFfvfDLySkgPFRvbnlMb0BhbWkuY29tPg0KPiBTdWJqZWN0OiBbUEFUQ0ggdjIgMS8zXSBN ZGVNb2R1bGVQa2cvQnVzL1VzYi9Vc2JOZXR3b3JrL1VzYlJuZGlzOiBBZGQNCj4gVVNCIFJORElT IGRldmljZXMgc3VwcG9ydA0KPiANCj4gVGhpcyBkcml2ZXIgcHJvdmlkZXMgVUVGSSBkcml2ZXIg Zm9yIFVTQiBSTkRJUyBkZXZpY2UNCj4gDQo+IFNpZ25lZC1vZmYtYnk6IFJpY2hhcmQgSG8gPHJp Y2hhcmRob0BhbWkuY29tPg0KPiBDYzogQW5kcmV3IEZpc2ggPGFmaXNoQGFwcGxlLmNvbT4NCj4g Q2M6IExlaWYgTGluZGhvbG0gPHF1aWNfbGxpbmRob2xAcXVpY2luYy5jb20+DQo+IENjOiBNaWNo YWVsIEQgS2lubmV5IDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4NCj4gQ2M6IE1pY2hhZWwg S3ViYWNraSA8bWlrdWJhY2tAbGludXgubWljcm9zb2Z0LmNvbT4NCj4gQ2M6IFpoaWd1YW5nIExp dSA8emhpZ3VhbmcubGl1QGludGVsLmNvbT4NCj4gQ2M6IExpbWluZyBHYW8gPGdhb2xpbWluZ0Bi eW9zb2Z0LmNvbS5jbj4NCj4gQ2M6IEhhbyBBIFd1IDxoYW8uYS53dUBpbnRlbC5jb20+DQo+IENj OiBSYXkgTmkgPHJheS5uaUBpbnRlbC5jb20+DQo+IFRlc3RlZC1ieTogVGluaCBOZ3V5ZW4gPHRp bmhuZ3V5ZW5Ab3MuYW1wZXJlY29tcHV0aW5nLmNvbT4NCj4gUmV2aWV3ZWQtYnk6IFJlYmVjY2Eg Q3JhbiA8cmViZWNjYUBic2Rpby5jb20+DQo+IFJldmlld2VkLWJ5OiBUb255IExvIDx0b255bG9A YW1pLmNvbT4NCj4gLS0tDQo+ICBNYWludGFpbmVycy50eHQgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAgICA3ICsNCj4gIC4uLi9Vc2JOZXR3b3JrL05ldHdvcmtDb21tb24vQ29tcG9u ZW50TmFtZS5jICB8ICAyNjMgKysrDQo+ICAuLi4vVXNiTmV0d29yay9OZXR3b3JrQ29tbW9uL0Ry aXZlckJpbmRpbmcuYyAgfCAgNTk1ICsrKysrKw0KPiAgLi4uL1VzYk5ldHdvcmsvTmV0d29ya0Nv bW1vbi9Ecml2ZXJCaW5kaW5nLmggIHwgIDI2NiArKysNCj4gIC4uLi9OZXR3b3JrQ29tbW9uL05l dHdvcmtDb21tb24uaW5mICAgICAgICAgICB8ICAgNDggKw0KPiAgLi4uL1VzYk5ldHdvcmsvTmV0 d29ya0NvbW1vbi9QeGVGdW5jdGlvbi5jICAgIHwgMTgwMyArKysrKysrKysrKysrKysrKw0KPiAg Li4uL1VzYi9Vc2JOZXR3b3JrL1VzYlJuZGlzL0NvbXBvbmVudE5hbWUuYyAgIHwgIDE3MiArKw0K PiAgLi4uL0J1cy9Vc2IvVXNiTmV0d29yay9Vc2JSbmRpcy9Vc2JSbmRpcy5jICAgIHwgIDg4NiAr KysrKysrKw0KPiAgLi4uL0J1cy9Vc2IvVXNiTmV0d29yay9Vc2JSbmRpcy9Vc2JSbmRpcy5oICAg IHwgIDU4NiArKysrKysNCj4gIC4uLi9CdXMvVXNiL1VzYk5ldHdvcmsvVXNiUm5kaXMvVXNiUm5k aXMuaW5mICB8ICAgNDIgKw0KPiAgLi4uL1VzYk5ldHdvcmsvVXNiUm5kaXMvVXNiUm5kaXNGdW5j dGlvbi5jICAgIHwgMTcxOCArKysrKysrKysrKysrKysrDQo+ICAuLi4vSW5jbHVkZS9Qcm90b2Nv bC9Vc2JFdGhlcm5ldFByb3RvY29sLmggICAgfCAgODc4ICsrKysrKysrDQo+ICBNZGVNb2R1bGVQ a2cvTWRlTW9kdWxlUGtnLmRlYyAgICAgICAgICAgICAgICAgfCAgIDE4ICsNCj4gIE1kZU1vZHVs ZVBrZy9NZGVNb2R1bGVQa2cuZHNjICAgICAgICAgICAgICAgICB8ICAgIDQgKw0KPiAgMTQgZmls ZXMgY2hhbmdlZCwgNzI4NiBpbnNlcnRpb25zKCspDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4g TWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9OZXR3b3JrQ29tbW9uL0NvbXBvbmVudE5h bWUuYw0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+IE1kZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk5l dHdvcmsvTmV0d29ya0NvbW1vbi9Ecml2ZXJCaW5kaW5nLmMNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0 NA0KPiBNZGVNb2R1bGVQa2cvQnVzL1VzYi9Vc2JOZXR3b3JrL05ldHdvcmtDb21tb24vRHJpdmVy QmluZGluZy5oDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4gTWRlTW9kdWxlUGtnL0J1cy9Vc2Iv VXNiTmV0d29yay9OZXR3b3JrQ29tbW9uL05ldHdvcmtDb21tb24uaW5mDQo+ICBjcmVhdGUgbW9k ZSAxMDA2NDQNCj4gTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9OZXR3b3JrQ29tbW9u L1B4ZUZ1bmN0aW9uLmMNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NA0KPiBNZGVNb2R1bGVQa2cvQnVz L1VzYi9Vc2JOZXR3b3JrL1VzYlJuZGlzL0NvbXBvbmVudE5hbWUuYw0KPiAgY3JlYXRlIG1vZGUg MTAwNjQ0DQo+IE1kZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsvVXNiUm5kaXMvVXNiUm5k aXMuYw0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+IE1kZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk5l dHdvcmsvVXNiUm5kaXMvVXNiUm5kaXMuaA0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+IE1kZU1v ZHVsZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsvVXNiUm5kaXMvVXNiUm5kaXMuaW5mDQo+ICBjcmVh dGUgbW9kZSAxMDA2NDQNCj4gTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9Vc2JSbmRp cy9Vc2JSbmRpc0Z1bmN0aW9uLmMNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBNZGVNb2R1bGVQa2cv SW5jbHVkZS9Qcm90b2NvbC9Vc2JFdGhlcm5ldFByb3RvY29sLmgNCj4gDQo+IGRpZmYgLS1naXQg YS9NYWludGFpbmVycy50eHQgYi9NYWludGFpbmVycy50eHQNCj4gaW5kZXggMDlkMDRhZjI3YS4u MjRkNjJhZjc2MCAxMDA2NDQNCj4gLS0tIGEvTWFpbnRhaW5lcnMudHh0DQo+ICsrKyBiL01haW50 YWluZXJzLnR4dA0KPiBAQCAtNDM3LDYgKzQzNywxMyBAQCBSOiBaaGlndWFuZyBMaXUgPHpoaWd1 YW5nLmxpdUBpbnRlbC5jb20+DQo+IFtMaXVaaGlndWFuZzAwMV0NCj4gIFI6IFJheSBOaSA8cmF5 Lm5pQGludGVsLmNvbT4gW25pcnVpeXVdDQo+ICBSOiBHdWEgR3VvIDxndWEuZ3VvQGludGVsLmNv bT4gW2dndW8xMTgzNzQ2M10NCj4gDQo+ICtNZGVNb2R1bGVQa2c6IFVTQiBOZXR3b3JrIG1vZHVs ZXMNCj4gK0Y6IE1kZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsNCj4gK0Y6IE1kZU1vZHVs ZVBrZy9JbmNsdWRlL1Byb3RvY29sL1VzYkV0aGVybmV0UHJvdG9jb2wuaA0KPiArTTogUmljaGFy ZCBIbyA8cmljaGFyZGhvQGFtaS5jb20+IFtyaWNoYXJkaG9dDQo+ICtSOiBSZWJlY2NhIENyYW4g PHJlYmVjY2FAYnNkaW8uY29tPiBbYmNyYW5dDQo+ICtSOiBIYW8gQSBXdSA8aGFvLmEud3VAaW50 ZWwuY29tPiBbaHd1MjVdDQoNCg0KU29ycnksIGNvdWxkIHlvdSBoZWxwIHRvIHJlbW92ZSBtZSAo SGFvIEEgV3UpIGFzIHRoZSBwcm9wb3NlZCByZXZpZXdlciBmb3IgdGhpcyBVc2JOZXR3b3JrIG1v ZHVsZT8NCkkgZG8gbm90IHRoaW5rIEkgaGF2ZSBzdWZmaWNpZW50IGtub3dsZWRnZSBpbiB0aGlz IGRvbWFpbi4NCg0KU29ycnkgYWdhaW4gZm9yIHRoaXMuDQoNCkJlc3QgUmVnYXJkcywNCkhhbyBX dQ0KDQoNCj4gKw0KPiAgTWRlUGtnDQo+ICBGOiBNZGVQa2cvDQo+ICBXOiBodHRwczovL2dpdGh1 Yi5jb20vdGlhbm9jb3JlL3RpYW5vY29yZS5naXRodWIuaW8vd2lraS9NZGVQa2cNCj4gZGlmZiAt LWdpdA0KPiBhL01kZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsvTmV0d29ya0NvbW1vbi9D b21wb25lbnROYW1lLmMNCj4gYi9NZGVNb2R1bGVQa2cvQnVzL1VzYi9Vc2JOZXR3b3JrL05ldHdv cmtDb21tb24vQ29tcG9uZW50TmFtZS5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4 IDAwMDAwMDAwMDAuLmU4MzQ2OWUxMzANCj4gLS0tIC9kZXYvbnVsbA0KPiArKysNCj4gYi9NZGVN b2R1bGVQa2cvQnVzL1VzYi9Vc2JOZXR3b3JrL05ldHdvcmtDb21tb24vQ29tcG9uZW50TmFtZS5j DQo+IEBAIC0wLDAgKzEsMjYzIEBADQo+ICsvKiogQGZpbGUNCj4gKyAgVGhpcyBmaWxlIGNvbnRh aW5zIGNvZGUgZm9yIFVTQiBuZXR3b3JrIGNvbW1vbiBkcml2ZXINCj4gKyAgY29tcG9uZW50IG5h bWUgZGVmaW5pdGlvbnMNCj4gKw0KPiArICBDb3B5cmlnaHQgKGMpIDIwMjMsIEFtZXJpY2FuIE1l Z2F0cmVuZHMgSW50ZXJuYXRpb25hbCBMTEMuIEFsbCByaWdodHMNCj4gcmVzZXJ2ZWQuPEJSPg0K PiArICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiArKiov DQo+ICsNCj4gKyNpbmNsdWRlICJEcml2ZXJCaW5kaW5nLmgiDQo+ICsNCj4gK2V4dGVybiBFRklf RFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgIGdOZXR3b3JrQ29tbW9uRHJpdmVyQmluZGluZzsNCj4g Kw0KPiArR0xPQkFMX1JFTU9WRV9JRl9VTlJFRkVSRU5DRUQgRUZJX1VOSUNPREVfU1RSSU5HX1RB QkxFDQo+IGdOZXR3b3JrQ29tbW9uRHJpdmVyTmFtZVRhYmxlW10gPSB7DQo+ICsgIHsNCj4gKyAg ICAiZW5nO2VuIiwNCj4gKyAgICBMIk5ldHdvcmsgQ29tbW9uIERyaXZlciINCj4gKyAgfSwNCj4g KyAgew0KPiArICAgIE5VTEwsDQo+ICsgICAgTlVMTA0KPiArICB9DQo+ICt9Ow0KPiArR0xPQkFM X1JFTU9WRV9JRl9VTlJFRkVSRU5DRUQgRUZJX1VOSUNPREVfU1RSSU5HX1RBQkxFDQo+ICpnTmV0 d29ya0NvbW1vbkNvbnRyb2xsZXJOYW1lVGFibGUgPSBOVUxMOw0KPiArDQo+ICtFRklfU1RBVFVT DQo+ICtFRklBUEkNCj4gK05ldHdvcmtDb21tb25Db21wb25lbnROYW1lR2V0RHJpdmVyTmFtZSAo DQo+ICsgIElOICBFRklfQ09NUE9ORU5UX05BTUVfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiAg Q0hBUjggICAgICAgICAgICAgICAgICAgICAgICAqTGFuZ3VhZ2UsDQo+ICsgIE9VVCBDSEFSMTYg ICAgICAgICAgICAgICAgICAgICAgICoqRHJpdmVyTmFtZQ0KPiArICApOw0KPiArDQo+ICtFRklf U1RBVFVTDQo+ICtFRklBUEkNCj4gK05ldHdvcmtDb21tb25Db21wb25lbnROYW1lR2V0Q29udHJv bGxlck5hbWUgKA0KPiArICBJTiBFRklfQ09NUE9ORU5UX05BTUVfUFJPVE9DT0wgICpUaGlzLA0K PiArICBJTiBFRklfSEFORExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXIsDQo+ICsgIElO IEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgQ2hpbGRIYW5kbGUgICAgICAgIE9QVElPTkFM LA0KPiArICBJTiBDSEFSOCAgICAgICAgICAgICAgICAgICAgICAgICpMYW5ndWFnZSwNCj4gKyAg T1VUIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAqKkNvbnRyb2xsZXJOYW1lDQo+ICsgICk7 DQo+ICsNCj4gK0dMT0JBTF9SRU1PVkVfSUZfVU5SRUZFUkVOQ0VEIEVGSV9DT01QT05FTlRfTkFN RV9QUk9UT0NPTA0KPiBnTmV0d29ya0NvbW1vbkNvbXBvbmVudE5hbWUgPSB7DQo+ICsgIE5ldHdv cmtDb21tb25Db21wb25lbnROYW1lR2V0RHJpdmVyTmFtZSwNCj4gKyAgTmV0d29ya0NvbW1vbkNv bXBvbmVudE5hbWVHZXRDb250cm9sbGVyTmFtZSwNCj4gKyAgImVuZyINCj4gK307DQo+ICsNCj4g K0dMT0JBTF9SRU1PVkVfSUZfVU5SRUZFUkVOQ0VEDQo+IEVGSV9DT01QT05FTlRfTkFNRTJfUFJP VE9DT0wgIGdOZXR3b3JrQ29tbW9uQ29tcG9uZW50TmFtZTIgPQ0KPiB7DQo+ICsNCj4gKEVGSV9D T01QT05FTlRfTkFNRTJfR0VUX0RSSVZFUl9OQU1FKU5ldHdvcmtDb21tb25Db21wb25lbnQNCj4g TmFtZUdldERyaXZlck5hbWUsDQo+ICsNCj4gKEVGSV9DT01QT05FTlRfTkFNRTJfR0VUX0NPTlRS T0xMRVJfTkFNRSlOZXR3b3JrQ29tbW9uQ29tcA0KPiBvbmVudE5hbWVHZXRDb250cm9sbGVyTmFt ZSwNCj4gKyAgImVuIg0KPiArfTsNCj4gKw0KPiArLyoqDQo+ICsgIFJldHJpZXZlcyBhIFVuaWNv ZGUgc3RyaW5nIHRoYXQgaXMgdGhlIHVzZXIgcmVhZGFibGUgbmFtZSBvZiB0aGUgZHJpdmVyLg0K PiArDQo+ICsgIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSB1c2VyIHJlYWRhYmxlIG5hbWUg b2YgYSBkcml2ZXIgaW4gdGhlIGZvcm0gb2YgYQ0KPiArICBVbmljb2RlIHN0cmluZy4gSWYgdGhl IGRyaXZlciBzcGVjaWZpZWQgYnkgVGhpcyBoYXMgYSB1c2VyIHJlYWRhYmxlIG5hbWUgaW4NCj4g KyAgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZSwgdGhlbiBhIHBvaW50ZXIgdG8g dGhlIGRyaXZlciBuYW1lIGlzDQo+ICsgIHJldHVybmVkIGluIERyaXZlck5hbWUsIGFuZCBFRklf U1VDQ0VTUyBpcyByZXR1cm5lZC4gSWYgdGhlIGRyaXZlciBzcGVjaWZpZWQNCj4gKyAgYnkgVGhp cyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2UsDQo+ ICsgIHRoZW4gRUZJX1VOU1VQUE9SVEVEIGlzIHJldHVybmVkLg0KPiArDQo+ICsgIEBwYXJhbVtp bl0gIFRoaXMgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUNCj4gRUZJX0NPTVBPTkVOVF9O QU1FMl9QUk9UT0NPTCBvcg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFRklf Q09NUE9ORU5UX05BTUVfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIExhbmd1 YWdlICAgICAgICAgIEEgcG9pbnRlciB0byBhIE51bGwtdGVybWluYXRlZCBBU0NJSSBzdHJpbmcN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkgaW5kaWNhdGluZyB0aGUg bGFuZ3VhZ2UuIFRoaXMgaXMgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGxhbmd1YWdlIG9mIHRoZSBkcml2ZXIgbmFtZSB0aGF0IHRoZSBjYWxsZXIgaXMNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGluZywgYW5kIGl0IG11c3QgbWF0Y2gg b25lIG9mIHRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZXMg c3BlY2lmaWVkIGluIFN1cHBvcnRlZExhbmd1YWdlcy4gVGhlDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG51bWJlciBvZiBsYW5ndWFnZXMgc3VwcG9ydGVkIGJ5IGEgZHJpdmVy IGlzIHVwDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBkcml2ZXIg d3JpdGVyLiBMYW5ndWFnZSBpcyBzcGVjaWZpZWQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW4gUkZDIDQ2NDYgb3IgSVNPIDYzOS0yIGxhbmd1YWdlIGNvZGUgZm9ybWF0Lg0K PiArICBAcGFyYW1bb3V0XSBEcml2ZXJOYW1lICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIFVuaWNv ZGUgc3RyaW5nIHRvIHJldHVybi4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VGhpcyBVbmljb2RlIHN0cmluZyBpcyB0aGUgbmFtZSBvZiB0aGUNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGluIHRoZSBsYW5ndWFn ZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgYnkgTGFuZ3Vh Z2UuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIFVuaWNvZGUg c3RyaW5nIGZvciB0aGUgRHJpdmVyIHNwZWNpZmllZCBieQ0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBUaGlzIGFuZCB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5IExhbmd1YWdl IHdhcw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5lZCBpbiBEcml2 ZXJOYW1lLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBMYW5ndWFnZSBpcyBO VUxMLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBEcml2ZXJOYW1lIGlzIE5V TEwuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIFRoZSBkcml2ZXIgc3BlY2lm aWVkIGJ5IFRoaXMgZG9lcyBub3Qgc3VwcG9ydA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5IExhbmd1YWdlLg0KPiArDQo+ICsqKi8N Cj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArTmV0d29ya0NvbW1vbkNvbXBvbmVudE5hbWVH ZXREcml2ZXJOYW1lICgNCj4gKyAgSU4gIEVGSV9DT01QT05FTlRfTkFNRV9QUk9UT0NPTCAgKlRo aXMsDQo+ICsgIElOICBDSEFSOCAgICAgICAgICAgICAgICAgICAgICAgICpMYW5ndWFnZSwNCj4g KyAgT1VUIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgKipEcml2ZXJOYW1lDQo+ICsgICkN Cj4gK3sNCj4gKyAgcmV0dXJuIExvb2t1cFVuaWNvZGVTdHJpbmcyICgNCj4gKyAgICAgICAgICAg TGFuZ3VhZ2UsDQo+ICsgICAgICAgICAgIFRoaXMtPlN1cHBvcnRlZExhbmd1YWdlcywNCj4gKyAg ICAgICAgICAgZ05ldHdvcmtDb21tb25Ecml2ZXJOYW1lVGFibGUsDQo+ICsgICAgICAgICAgIERy aXZlck5hbWUsDQo+ICsgICAgICAgICAgIChCT09MRUFOKShUaGlzID09ICZnTmV0d29ya0NvbW1v bkNvbXBvbmVudE5hbWUpDQo+ICsgICAgICAgICAgICk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiAr ICBSZXRyaWV2ZXMgYSBVbmljb2RlIHN0cmluZyB0aGF0IGlzIHRoZSB1c2VyIHJlYWRhYmxlIG5h bWUgb2YgdGhlIGNvbnRyb2xsZXINCj4gKyAgdGhhdCBpcyBiZWluZyBtYW5hZ2VkIGJ5IGEgZHJp dmVyLg0KPiArDQo+ICsgIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSB1c2VyIHJlYWRhYmxl IG5hbWUgb2YgdGhlIGNvbnRyb2xsZXIgc3BlY2lmaWVkIGJ5DQo+ICsgIENvbnRyb2xsZXJIYW5k bGUgYW5kIENoaWxkSGFuZGxlIGluIHRoZSBmb3JtIG9mIGEgVW5pY29kZSBzdHJpbmcuIElmIHRo ZQ0KPiArICBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgaGFzIGEgdXNlciByZWFkYWJsZSBuYW1l IGluIHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQNCj4gYnkNCj4gKyAgTGFuZ3VhZ2UsIHRoZW4gYSBw b2ludGVyIHRvIHRoZSBjb250cm9sbGVyIG5hbWUgaXMgcmV0dXJuZWQgaW4NCj4gQ29udHJvbGxl ck5hbWUsDQo+ICsgIGFuZCBFRklfU1VDQ0VTUyBpcyByZXR1cm5lZC4gIElmIHRoZSBkcml2ZXIg c3BlY2lmaWVkIGJ5IFRoaXMgaXMgbm90IGN1cnJlbnRseQ0KPiArICBtYW5hZ2luZyB0aGUgY29u dHJvbGxlciBzcGVjaWZpZWQgYnkgQ29udHJvbGxlckhhbmRsZSBhbmQgQ2hpbGRIYW5kbGUsDQo+ ICsgIHRoZW4gRUZJX1VOU1VQUE9SVEVEIGlzIHJldHVybmVkLiAgSWYgdGhlIGRyaXZlciBzcGVj aWZpZWQgYnkgVGhpcyBkb2VzIG5vdA0KPiArICBzdXBwb3J0IHRoZSBsYW5ndWFnZSBzcGVjaWZp ZWQgYnkgTGFuZ3VhZ2UsIHRoZW4gRUZJX1VOU1VQUE9SVEVEIGlzDQo+IHJldHVybmVkLg0KPiAr DQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUNCj4g RUZJX0NPTVBPTkVOVF9OQU1FMl9QUk9UT0NPTCBvcg0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBFRklfQ09NUE9ORU5UX05BTUVfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBw YXJhbVtpbl0gIENvbnRyb2xsZXIgICAgICAgIFRoZSBoYW5kbGUgb2YgYSBjb250cm9sbGVyIHRo YXQgdGhlIGRyaXZlcg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZp ZWQgYnkgVGhpcyBpcyBtYW5hZ2luZy4gIFRoaXMgaGFuZGxlDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNwZWNpZmllcyB0aGUgY29udHJvbGxlciB3aG9zZSBuYW1lIGlzIHRv IGJlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmVkLg0KPiArICBA cGFyYW1baW5dICBDaGlsZEhhbmRsZSAgICAgICBUaGUgaGFuZGxlIG9mIHRoZSBjaGlsZCBjb250 cm9sbGVyIHRvIHJldHJpZXZlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo ZSBuYW1lIG9mLiAgVGhpcyBpcyBhbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXkgYmUgTlVMTC4gIEl0IHdpbGwgYmUgTlVMTCBm b3IgZGV2aWNlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlcnMuICBJ dCB3aWxsIGFsc28gYmUgTlVMTCBmb3IgYSBidXMgZHJpdmVycw0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0aGF0IHdpc2ggdG8gcmV0cmlldmUgdGhlIG5hbWUgb2YgdGhlIGJ1 cw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLiAgSXQgd2ls bCBub3QgYmUgTlVMTCBmb3IgYSBidXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZHJpdmVyIHRoYXQgd2lzaGVzIHRvIHJldHJpZXZlIHRoZSBuYW1lIG9mIGENCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQgY29udHJvbGxlci4NCj4gKyAgQHBhcmFt W2luXSAgTGFuZ3VhZ2UgICAgICAgICAgQSBwb2ludGVyIHRvIGEgTnVsbC10ZXJtaW5hdGVkIEFT Q0lJIHN0cmluZw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSBpbmRp Y2F0aW5nIHRoZSBsYW5ndWFnZS4gIFRoaXMgaXMgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxhbmd1YWdlIG9mIHRoZSBkcml2ZXIgbmFtZSB0aGF0IHRoZSBjYWxsZXIg aXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGluZywgYW5kIGl0 IG11c3QgbWF0Y2ggb25lIG9mIHRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBsYW5ndWFnZXMgc3BlY2lmaWVkIGluIFN1cHBvcnRlZExhbmd1YWdlcy4gVGhlDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBsYW5ndWFnZXMgc3VwcG9ydGVk IGJ5IGEgZHJpdmVyIGlzIHVwDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRv IHRoZSBkcml2ZXIgd3JpdGVyLiBMYW5ndWFnZSBpcyBzcGVjaWZpZWQgaW4NCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUkZDIDQ2NDYgb3IgSVNPIDYzOS0yIGxhbmd1YWdlIGNv ZGUgZm9ybWF0Lg0KPiArICBAcGFyYW1bb3V0XSBDb250cm9sbGVyTmFtZSAgICBBIHBvaW50ZXIg dG8gdGhlIFVuaWNvZGUgc3RyaW5nIHRvIHJldHVybi4NCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVGhpcyBVbmljb2RlIHN0cmluZyBpcyB0aGUgbmFtZSBvZiB0aGUNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlciBzcGVjaWZpZWQgYnkgQ29u dHJvbGxlckhhbmRsZSBhbmQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hp bGRIYW5kbGUgaW4gdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieQ0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBMYW5ndWFnZSBmcm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mIHRoZSBk cml2ZXINCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGJ5IFRo aXMuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIFVuaWNvZGUg c3RyaW5nIGZvciB0aGUgdXNlciByZWFkYWJsZSBuYW1lDQo+IGluDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2UgZm9y IHRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXIgc3BlY2lmaWVk IGJ5IFRoaXMgd2FzIHJldHVybmVkIGluDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIERyaXZlck5hbWUuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIENvbnRy b2xsZXJIYW5kbGUgaXMgbm90IGEgdmFsaWQNCj4gRUZJX0hBTkRMRS4NCj4gKyAgQHJldHZhbCBF RklfSU5WQUxJRF9QQVJBTUVURVIgQ2hpbGRIYW5kbGUgaXMgbm90IE5VTEwgYW5kIGl0IGlzIG5v dCBhDQo+IHZhbGlkDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9IQU5E TEUuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIExhbmd1YWdlIGlzIE5VTEwu DQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIENvbnRyb2xsZXJOYW1lIGlzIE5V TEwuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIFRoZSBkcml2ZXIgc3BlY2lm aWVkIGJ5IFRoaXMgaXMgbm90IGN1cnJlbnRseQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBtYW5hZ2luZyB0aGUgY29udHJvbGxlciBzcGVjaWZpZWQgYnkNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSBhbmQgQ2hpbGRIYW5kbGUu DQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIFRoZSBkcml2ZXIgc3BlY2lmaWVk IGJ5IFRoaXMgZG9lcyBub3Qgc3VwcG9ydA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5IExhbmd1YWdlLg0KPiArDQo+ICsqKi8NCj4g K0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArTmV0d29ya0NvbW1vbkNvbXBvbmVudE5hbWVHZXRD b250cm9sbGVyTmFtZSAoDQo+ICsgIElOICBFRklfQ09NUE9ORU5UX05BTUVfUFJPVE9DT0wgICpU aGlzLA0KPiArICBJTiAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBDb250cm9sbGVyLA0K PiArICBJTiAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBDaGlsZEhhbmRsZSAgICAgICAg T1BUSU9OQUwsDQo+ICsgIElOICBDSEFSOCAgICAgICAgICAgICAgICAgICAgICAgICpMYW5ndWFn ZSwNCj4gKyAgT1VUIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgKipDb250cm9sbGVyTmFt ZQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgIFN0YXR1czsN Cj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgKkhhbmRsZU5hbWU7DQo+ICsgIEVGSV9V U0JfSU9fUFJPVE9DT0wgICAgICAgICpVc2JJbzsNCj4gKyAgRUZJX1VTQl9ERVZJQ0VfREVTQ1JJ UFRPUiAgRGV2RGVzYzsNCj4gKw0KPiArICBpZiAoIUxhbmd1YWdlIHx8ICFDb250cm9sbGVyTmFt ZSkgew0KPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgIH0NCj4gKw0K PiArICBpZiAoQ2hpbGRIYW5kbGUgPT0gTlVMTCkgew0KPiArICAgIHJldHVybiBFRklfVU5TVVBQ T1JURUQ7DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBNYWtlIHN1cmUgdGhpcyBkcml2 ZXIgaXMgY3VycmVudGx5IG1hbmFnaW5nIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgLy8NCj4gKyAg U3RhdHVzID0gRWZpVGVzdE1hbmFnZWREZXZpY2UgKA0KPiArICAgICAgICAgICAgIENvbnRyb2xs ZXIsDQo+ICsgICAgICAgICAgICAgZ05ldHdvcmtDb21tb25Ecml2ZXJCaW5kaW5nLkRyaXZlckJp bmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZA0K PiArICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAg ICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gTWFrZSBzdXJl IHRoaXMgZHJpdmVyIHByb2R1Y2VkIENoaWxkSGFuZGxlDQo+ICsgIC8vDQo+ICsgIFN0YXR1cyA9 IEVmaVRlc3RDaGlsZEhhbmRsZSAoDQo+ICsgICAgICAgICAgICAgQ29udHJvbGxlciwNCj4gKyAg ICAgICAgICAgICBDaGlsZEhhbmRsZSwNCj4gKyAgICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJv dG9jb2xHdWlkDQo+ICsgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBn QlMtPkhhbmRsZVByb3RvY29sIChDb250cm9sbGVyLCAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLCAo Vk9JRA0KPiAqKikmVXNiSW8pOw0KPiArDQo+ICsgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQo+ICsgICAgU3RhdHVzID0gVXNiSW8tPlVzYkdldERldmljZURlc2NyaXB0b3IgKFVzYklvLCAm RGV2RGVzYyk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgcmV0 dXJuIFN0YXR1czsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBTdGF0dXMgPSBVc2JJby0+VXNiR2V0 U3RyaW5nRGVzY3JpcHRvciAoVXNiSW8sIDB4NDA5LA0KPiBEZXZEZXNjLlN0ck1hbnVmYWN0dXJl ciwgJkhhbmRsZU5hbWUpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAg ICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgKkNvbnRyb2xsZXJOYW1l ID0gSGFuZGxlTmFtZTsNCj4gKw0KPiArICAgIGlmIChnTmV0d29ya0NvbW1vbkNvbnRyb2xsZXJO YW1lVGFibGUgIT0gTlVMTCkgew0KPiArICAgICAgRnJlZVVuaWNvZGVTdHJpbmdUYWJsZSAoZ05l dHdvcmtDb21tb25Db250cm9sbGVyTmFtZVRhYmxlKTsNCj4gKyAgICAgIGdOZXR3b3JrQ29tbW9u Q29udHJvbGxlck5hbWVUYWJsZSA9IE5VTEw7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgU3RhdHVz ID0gQWRkVW5pY29kZVN0cmluZzIgKA0KPiArICAgICAgICAgICAgICAgImVuZyIsDQo+ICsgICAg ICAgICAgICAgICBnTmV0d29ya0NvbW1vbkNvbXBvbmVudE5hbWUuU3VwcG9ydGVkTGFuZ3VhZ2Vz LA0KPiArICAgICAgICAgICAgICAgJmdOZXR3b3JrQ29tbW9uQ29udHJvbGxlck5hbWVUYWJsZSwN Cj4gKyAgICAgICAgICAgICAgIEhhbmRsZU5hbWUsDQo+ICsgICAgICAgICAgICAgICBUUlVFDQo+ ICsgICAgICAgICAgICAgICApOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4g KyAgICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgU3RhdHVzID0gQWRk VW5pY29kZVN0cmluZzIgKA0KPiArICAgICAgICAgICAgICAgImVuIiwNCj4gKyAgICAgICAgICAg ICAgIGdOZXR3b3JrQ29tbW9uQ29tcG9uZW50TmFtZTIuU3VwcG9ydGVkTGFuZ3VhZ2VzLA0KPiAr ICAgICAgICAgICAgICAgJmdOZXR3b3JrQ29tbW9uQ29udHJvbGxlck5hbWVUYWJsZSwNCj4gKyAg ICAgICAgICAgICAgIEhhbmRsZU5hbWUsDQo+ICsgICAgICAgICAgICAgICBGQUxTRQ0KPiArICAg ICAgICAgICAgICAgKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAg ICByZXR1cm4gU3RhdHVzOw0KPiArICAgIH0NCj4gKw0KPiArICAgIHJldHVybiBMb29rdXBVbmlj b2RlU3RyaW5nMiAoDQo+ICsgICAgICAgICAgICAgTGFuZ3VhZ2UsDQo+ICsgICAgICAgICAgICAg VGhpcy0+U3VwcG9ydGVkTGFuZ3VhZ2VzLA0KPiArICAgICAgICAgICAgIGdOZXR3b3JrQ29tbW9u Q29udHJvbGxlck5hbWVUYWJsZSwNCj4gKyAgICAgICAgICAgICBDb250cm9sbGVyTmFtZSwNCj4g KyAgICAgICAgICAgICAoQk9PTEVBTikoVGhpcyA9PSAmZ05ldHdvcmtDb21tb25Db21wb25lbnRO YW1lKQ0KPiArICAgICAgICAgICAgICk7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gRUZJX1VO U1VQUE9SVEVEOw0KPiArfQ0KPiBkaWZmIC0tZ2l0DQo+IGEvTWRlTW9kdWxlUGtnL0J1cy9Vc2Iv VXNiTmV0d29yay9OZXR3b3JrQ29tbW9uL0RyaXZlckJpbmRpbmcuYw0KPiBiL01kZU1vZHVsZVBr Zy9CdXMvVXNiL1VzYk5ldHdvcmsvTmV0d29ya0NvbW1vbi9Ecml2ZXJCaW5kaW5nLmMNCj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMC4uODUyMGNmODg2Yw0KPiAtLS0g L2Rldi9udWxsDQo+ICsrKyBiL01kZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsvTmV0d29y a0NvbW1vbi9Ecml2ZXJCaW5kaW5nLmMNCj4gQEAgLTAsMCArMSw1OTUgQEANCj4gKy8qKiBAZmls ZQ0KPiArICBUaGlzIGZpbGUgY29udGFpbnMgY29kZSBmb3IgVVNCIG5ldHdvcmsgYmluZGluZyBk cml2ZXINCj4gKw0KPiArICBDb3B5cmlnaHQgKGMpIDIwMjMsIEFtZXJpY2FuIE1lZ2F0cmVuZHMg SW50ZXJuYXRpb25hbCBMTEMuIEFsbCByaWdodHMNCj4gcmVzZXJ2ZWQuPEJSPg0KPiArICBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiArKiovDQo+ICsNCj4g KyNpbmNsdWRlICJEcml2ZXJCaW5kaW5nLmgiDQo+ICsNCj4gK1BYRV9TV19VTkRJICAqZ1B4ZSA9 IE5VTEw7DQo+ICtOSUNfREVWSUNFICAgKmdMYW5EZXZpY2VMaXN0W01BWF9MQU5fSU5URVJGQUNF XTsNCj4gK1VJTlQzMiAgICAgICBnUmF0ZUxpbWl0aW5nQ3JlZGl0Ow0KPiArVUlOVDMyICAgICAg IGdSYXRlTGltaXRpbmdQb2xsVGltZXI7DQo+ICtCT09MRUFOICAgICAgZ1JhdGVMaW1pdGluZ0Vu YWJsZTsNCj4gKw0KPiArRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICBnTmV0d29ya0NvbW1v bkRyaXZlckJpbmRpbmcgPSB7DQo+ICsgIE5ldHdvcmtDb21tb25TdXBwb3J0ZWQsDQo+ICsgIE5l dHdvcmtDb21tb25Ecml2ZXJTdGFydCwNCj4gKyAgTmV0d29ya0NvbW1vbkRyaXZlclN0b3AsDQo+ ICsgIE5FVFdPUktfQ09NTU9OX0RSSVZFUl9WRVJTSU9OLA0KPiArICBOVUxMLA0KPiArICBOVUxM DQo+ICt9Ow0KPiArDQo+ICsvKioNCj4gKyAgQ3JlYXRlIE1BQyBEZXZpY2UgUGF0aA0KPiArDQo+ ICsgIEBwYXJhbVtpbiwgb3V0XSBEZXYgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRklf REVWSUNFX1BBVEhfUFJPVE9DT0wNCj4gaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gICAgICBC YXNlRGV2ICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wN Cj4gaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gICAgICBOaWMgICAgICAgICAgICAgQSBwb2lu dGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAg QHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgICBUaGUgZGV2aWNlIHBhdGggY291bGQgbm90 IGJlIGNyZWF0ZWQNCj4gc3VjY2Vzc2Z1bGx5IGR1ZSB0byBhIGxhY2sgb2YgcmVzb3VyY2VzLg0K PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIE1BQyBkZXZpY2UgcGF0aCBjcmVh dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtDcmVhdGVN YWNEZXZpY2VQYXRoICgNCj4gKyAgSU4gT1VUICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICoq RGV2LA0KPiArICBJTiAgICAgIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgKkJhc2VEZXYsDQo+ ICsgIElOICAgICAgTklDX0RBVEEgICAgICAgICAgICAgICAgICAqTmljDQo+ICsgICkNCj4gK3sN Cj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIE1BQ19BRERSX0RF VklDRV9QQVRIICAgICAgTWFjQWRkck5vZGU7DQo+ICsgIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NP TCAgKkVuZE5vZGU7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgKkRldmljZVBhdGg7 DQo+ICsgIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgVG90YWxMZW5ndGg7DQo+ICsgIFVJTlQx NiAgICAgICAgICAgICAgICAgICAgQmFzZUxlbmd0aDsNCj4gKw0KPiArICBaZXJvTWVtICgmTWFj QWRkck5vZGUsIHNpemVvZiAoTUFDX0FERFJfREVWSUNFX1BBVEgpKTsNCj4gKyAgQ29weU1lbSAo Jk1hY0FkZHJOb2RlLk1hY0FkZHJlc3MsICZOaWMtPk1hY0FkZHIsIHNpemVvZg0KPiAoRUZJX01B Q19BRERSRVNTKSk7DQo+ICsNCj4gKyAgTWFjQWRkck5vZGUuSGVhZGVyLlR5cGUgICAgICA9IE1F U1NBR0lOR19ERVZJQ0VfUEFUSDsNCj4gKyAgTWFjQWRkck5vZGUuSGVhZGVyLlN1YlR5cGUgICA9 IE1TR19NQUNfQUREUl9EUDsNCj4gKyAgTWFjQWRkck5vZGUuSGVhZGVyLkxlbmd0aFswXSA9IChV SU5UOClzaXplb2YgKE1hY0FkZHJOb2RlKTsNCj4gKyAgTWFjQWRkck5vZGUuSGVhZGVyLkxlbmd0 aFsxXSA9IDA7DQo+ICsNCj4gKyAgRW5kTm9kZSA9IEJhc2VEZXY7DQo+ICsNCj4gKyAgd2hpbGUg KCFJc0RldmljZVBhdGhFbmQgKEVuZE5vZGUpKSB7DQo+ICsgICAgRW5kTm9kZSA9IE5leHREZXZp Y2VQYXRoTm9kZSAoRW5kTm9kZSk7DQo+ICsgIH0NCj4gKw0KPiArICBCYXNlTGVuZ3RoICA9IChV SU5UMTYpKChVSU5UTikoRW5kTm9kZSkgLSAoVUlOVE4pKEJhc2VEZXYpKTsNCj4gKyAgVG90YWxM ZW5ndGggPSAoVUlOVDE2KShCYXNlTGVuZ3RoICsgc2l6ZW9mIChNYWNBZGRyTm9kZSkgKyBzaXpl b2YNCj4gKEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCkpOw0KPiArDQo+ICsgIFN0YXR1cyA9IGdC Uy0+QWxsb2NhdGVQb29sIChFZmlCb290U2VydmljZXNEYXRhLCBUb3RhbExlbmd0aCwgKFZPSUQN Cj4gKiopJkRldmljZVBhdGgpOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsg ICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgICpEZXYgPSAoRUZJX0RFVklDRV9Q QVRIX1BST1RPQ09MICopRGV2aWNlUGF0aDsNCj4gKyAgQ29weU1lbSAoRGV2aWNlUGF0aCwgKENI QVI4ICopQmFzZURldiwgQmFzZUxlbmd0aCk7DQo+ICsgIERldmljZVBhdGggKz0gQmFzZUxlbmd0 aDsNCj4gKyAgQ29weU1lbSAoRGV2aWNlUGF0aCwgKENIQVI4ICopJk1hY0FkZHJOb2RlLCBzaXpl b2YgKE1hY0FkZHJOb2RlKSk7DQo+ICsgIERldmljZVBhdGggKz0gc2l6ZW9mIChNYWNBZGRyTm9k ZSk7DQo+ICsgIENvcHlNZW0gKERldmljZVBhdGgsIChDSEFSOCAqKUVuZE5vZGUsIHNpemVvZg0K PiAoRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MKSk7DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUND RVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgTmV0d29yayBDb21tb24gRHJpdmVyIEJpbmRp bmcgU3VwcG9ydC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICAgICAg ICBQcm90b2NvbCBpbnN0YW5jZSBwb2ludGVyLg0KPiArICBAcGFyYW1baW5dICBDb250cm9sbGVy SGFuZGxlICAgICAgICBIYW5kbGUgb2YgZGV2aWNlIHRvIHRlc3QuDQo+ICsgIEBwYXJhbVtpbl0g IFJlbWFpbmluZ0RldmljZVBhdGggICAgIE9wdGlvbmFsIHBhcmFtZXRlciB1c2UgdG8gcGljayBh DQo+IHNwZWNpZmljIGNoaWxkDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGRldmljZSB0byBzdGFydC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg ICAgICAgICAgICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGlzIGRldmljZS4NCj4gKyAgQHJldHZh bCBFRklfQUxSRUFEWV9TVEFSVEVEICAgICAgICAgVGhpcyBkcml2ZXIgaXMgYWxyZWFkeSBydW5u aW5nIG9uIHRoaXMNCj4gZGV2aWNlLg0KPiArICBAcmV0dmFsIG90aGVyICAgICAgICAgICAgICAg ICAgICAgICBUaGlzIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZGV2aWNlLg0KPiArDQo+ ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArTmV0d29ya0NvbW1vblN1cHBvcnRl ZCAoDQo+ICsgIElOIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElO IEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgSU4g RUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAqUmVtYWluaW5nRGV2aWNlUGF0aA0KPiArICAp DQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBF REtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpVc2JFdGg7DQo+ICsNCj4gKyAgU3RhdHVzID0g Z0JTLT5PcGVuUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRs ZSwNCj4gKyAgICAgICAgICAgICAgICAgICZnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQsDQo+ICsg ICAgICAgICAgICAgICAgICAoVk9JRCAqKikmVXNiRXRoLA0KPiArICAgICAgICAgICAgICAgICAg VGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgIENvbnRyb2xs ZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICBFRklfT1BFTl9QUk9UT0NPTF9CWV9EUklW RVINCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgZ0JTLT5DbG9zZVBy b3RvY29sICgNCj4gKyAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAmZ0Vk a0lJVXNiRXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hh bmRsZSwNCj4gKyAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICk7DQo+ICsg IHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBOZXR3b3JrIENvbW1vbiBE cml2ZXIgQmluZGluZyBTdGFydC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAg ICAgICAgICAgICBQcm90b2NvbCBpbnN0YW5jZSBwb2ludGVyLg0KPiArICBAcGFyYW1baW5dICBD b250cm9sbGVySGFuZGxlICAgICAgICBIYW5kbGUgb2YgZGV2aWNlIHRvIGJpbmQgZHJpdmVyIHRv Lg0KPiArICBAcGFyYW1baW5dICBSZW1haW5pbmdEZXZpY2VQYXRoICAgICBPcHRpb25hbCBwYXJh bWV0ZXIgdXNlIHRvIHBpY2sgYQ0KPiBzcGVjaWZpYyBjaGlsZA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UgdG8gc3RhcnQuDQo+ICsNCj4gKyAgQHJldHZh bCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgICAgVGhpcyBkcml2ZXIgaXMgYWRkZWQgdG8gQ29u dHJvbGxlckhhbmRsZQ0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICAgICAgICBU aGlzIGRyaXZlciBjb3VsZCBub3QgYmUgc3RhcnRlZCBkdWUgdG8gYQ0KPiBkZXZpY2UgZXJyb3IN Cj4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgICAgICAgVGhlIGRyaXZlciBjb3Vs ZCBub3QgaW5zdGFsbA0KPiBzdWNjZXNzZnVsbHkgZHVlIHRvIGEgbGFjayBvZiByZXNvdXJjZXMu DQo+ICsgIEByZXR2YWwgb3RoZXIgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZHJpdmVyIGRv ZXMgbm90IHN1cHBvcnQgdGhpcyBkZXZpY2UNCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ ICtFRklBUEkNCj4gK05ldHdvcmtDb21tb25Ecml2ZXJTdGFydCAoDQo+ICsgIElOIEVGSV9EUklW RVJfQklORElOR19QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIEVGSV9IQU5ETEUgICAgICAgICAg ICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgSU4gRUZJX0RFVklDRV9QQVRIX1BST1RP Q09MICAgICAqUmVtYWluaW5nRGV2aWNlUGF0aA0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFU VVMgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBFRklfREVWSUNFX1BBVEhfUFJPVE9D T0wgICAgICpVc2JFdGhQYXRoOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpV c2JFdGg7DQo+ICsgIEVGSV9NQUNfQUREUkVTUyAgICAgICAgICAgICAgTWFjQWRkcmVzczsNCj4g KyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICBCdWxrRGF0YVNpemU7DQo+ICsgIE5JQ19E RVZJQ0UgICAgICAgICAgICAgICAgICAgKk5pY0RldmljZTsNCj4gKyAgVUlOVDggICAgICAgICAg ICAgICAgICAgICAgICAqVG1wUHhlUG9pbnRlcjsNCj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPk9w ZW5Qcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiAr ICAgICAgICAgICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAg ICAgICAgICAgIChWT0lEICoqKSZVc2JFdGgsDQo+ICsgICAgICAgICAgICAgICAgICBUaGlzLT5E cml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRs ZSwNCj4gKyAgICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0JZX0RSSVZFUg0KPiAr ICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiAr ICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPk9wZW5Q cm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAg ICAgICAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAg ICAgICAgICAgKFZPSUQgKiopJlVzYkV0aFBhdGgsDQo+ICsgICAgICAgICAgICAgICAgICBUaGlz LT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhh bmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0JZX0RSSVZFUg0K PiArICAgICAgICAgICAgICAgICAgKTsNCj4gKw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+ICsgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgQ29udHJvbGxl ckhhbmRsZSwNCj4gKyAgICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCj4gKyAg ICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgQ29udHJv bGxlckhhbmRsZQ0KPiArICAgICAgICAgICApOw0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsg IH0NCj4gKw0KPiArICBaZXJvTWVtICgmTWFjQWRkcmVzcywgc2l6ZW9mIChFRklfTUFDX0FERFJF U1MpKTsNCj4gKw0KPiArICBTdGF0dXMgPSBVc2JFdGgtPlVzYkV0aE1hY0FkZHJlc3MgKFVzYkV0 aCwgJk1hY0FkZHJlc3MpOw0KPiArICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiArICBT dGF0dXMgPSBVc2JFdGgtPlVzYkV0aE1heEJ1bGtTaXplIChVc2JFdGgsICZCdWxrRGF0YVNpemUp Ow0KPiArDQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBnQlMtPkNsb3Nl UHJvdG9jb2wgKA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAg ICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgIFRoaXMtPkRyaXZl ckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAg ICAgICAgKTsNCj4gKyAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICBDb250 cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkLA0K PiArICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICBD b250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICAgICk7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsN Cj4gKyAgfQ0KPiArDQo+ICsgIE5pY0RldmljZSA9IEFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZiAo TklDX0RFVklDRSkgKyBCdWxrRGF0YVNpemUgKyA0MDk2KTsNCj4gKyAgaWYgKCFOaWNEZXZpY2Up IHsNCj4gKyAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICBDb250cm9sbGVy SGFuZGxlLA0KPiArICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQo+ICsg ICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgIENvbnRy b2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAgKTsNCj4gKyAgICBnQlMtPkNsb3NlUHJvdG9jb2wg KA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAmZ0Vka0lJ VXNiRXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFu ZGxlLA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICAgICk7DQo+ ICsgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICB9DQo+ICsNCj4gKyAgLy8g Zm9yIGFsaWdubWVudCBhZGp1c3RtZW50DQo+ICsgIGlmIChnUHhlID09IE5VTEwpIHsNCj4gKyAg ICBUbXBQeGVQb2ludGVyID0gTlVMTDsNCj4gKyAgICBUbXBQeGVQb2ludGVyID0gQWxsb2NhdGVa ZXJvUG9vbCAoc2l6ZW9mIChQWEVfU1dfVU5ESSkgKyAxNik7DQo+ICsgICAgaWYgKCFUbXBQeGVQ b2ludGVyKSB7DQo+ICsgICAgICBpZiAoTmljRGV2aWNlICE9IE5VTEwpIHsNCj4gKyAgICAgICAg RnJlZVBvb2wgKE5pY0RldmljZSk7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIGdCUy0+Q2xv c2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAg ICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgVGhp cy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxl DQo+ICsgICAgICAgICAgICAgKTsNCj4gKyAgICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsg ICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAmZ0Vka0lJVXNi RXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5k bGUsDQo+ICsgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgICAgICk7 DQo+ICsNCj4gKyAgICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gKyAgICB9IGVs c2Ugew0KPiArICAgICAgLy8gY2hlY2sgZm9yIHBhcmFncmFwaCBhbGlnbm1lbnQgaGVyZQ0KPiAr ICAgICAgaWYgKCgoVUlOVE4pVG1wUHhlUG9pbnRlciAmIDB4MEYpICE9IDApIHsNCj4gKyAgICAg ICAgZ1B4ZSA9IChQWEVfU1dfVU5ESSAqKShUbXBQeGVQb2ludGVyICsgOCk7DQo+ICsgICAgICB9 IGVsc2Ugew0KPiArICAgICAgICBnUHhlID0gKFBYRV9TV19VTkRJICopVG1wUHhlUG9pbnRlcjsN Cj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAgaWYgKCFnUHhlKSB7DQo+ICsgICAgICAgIGlmIChO aWNEZXZpY2UgIT0gTlVMTCkgew0KPiArICAgICAgICAgIEZyZWVQb29sIChOaWNEZXZpY2UpOw0K PiArICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAg ICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAmZ0VmaURl dmljZVBhdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5k aW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAgICAg ICAgICAgICAgKTsNCj4gKyAgICAgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAg ICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAmZ0Vka0lJVXNiRXRo UHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRs ZSwNCj4gKyAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAgICAg ICk7DQo+ICsgICAgICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gKyAgICAgIH0N Cj4gKw0KPiArICAgICAgUHhlU3RydWN0SW5pdCAoZ1B4ZSk7DQo+ICsgICAgfQ0KPiArICB9DQo+ ICsNCj4gKyAgTmljRGV2aWNlLT5OaWlQcm90b2NvbC5JZCAgICA9IChVSU5UNjQpKFVJTlROKShn UHhlKTsNCj4gKyAgTmljRGV2aWNlLT5OaWlQcm90b2NvbC5JZk51bSA9IGdQeGUtPklGY250IHwg Z1B4ZS0+SUZjbnRFeHQgPDwgODsNCj4gKw0KPiArICBVcGRhdGVOaWNOdW0gKCZOaWNEZXZpY2Ut Pk5pY0luZm8sIGdQeGUpOw0KPiArDQo+ICsgIE5pY0RldmljZS0+TmljSW5mby5TaWduYXR1cmUg PSBOSUNfREFUQV9TSUdOQVRVUkU7DQo+ICsNCj4gKyAgTmljRGV2aWNlLT5OaWNJbmZvLlVzYkV0 aCAgICAgICAgID0gVXNiRXRoOw0KPiArICBOaWNEZXZpY2UtPk5pY0luZm8uTWF4U2VnbWVudFNp emUgPSAoVUlOVDE2KUJ1bGtEYXRhU2l6ZTsNCj4gKyAgTmljRGV2aWNlLT5OaWNJbmZvLkNhYmxl RGV0ZWN0ICAgID0gMDsNCj4gKyAgTmljRGV2aWNlLT5SZWNlaXZlQnVmZmVyICAgICAgICAgID0g QUxJR05fUE9JTlRFUiAoKFZPSUQgKilOaWNEZXZpY2UsIDQwOTYpOw0KPiArDQo+ICsgIENvcHlN ZW0gKChDSEFSOCAqKSYoTmljRGV2aWNlLT5OaWNJbmZvLk1hY0FkZHIpLCAoQ0hBUjgNCj4gKikm TWFjQWRkcmVzcywgc2l6ZW9mIChNYWNBZGRyZXNzKSk7DQo+ICsNCj4gKyAgTmljRGV2aWNlLT5O aWNJbmZvLlR4QnVmZmVyQ291bnQgPSAwOw0KPiArDQo+ICsgIGlmIChOaWNEZXZpY2UtPk5paVBy b3RvY29sLklmTnVtIDwgTUFYX0xBTl9JTlRFUkZBQ0UpIHsNCj4gKyAgICBnTGFuRGV2aWNlTGlz dFtOaWNEZXZpY2UtPk5paVByb3RvY29sLklmTnVtXSA9IE5pY0RldmljZTsNCj4gKyAgfSBlbHNl IHsNCj4gKyAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICBDb250cm9sbGVy SGFuZGxlLA0KPiArICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQo+ICsg ICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgIENvbnRy b2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAgKTsNCj4gKyAgICBnQlMtPkNsb3NlUHJvdG9jb2wg KA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAmZ0Vka0lJ VXNiRXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFu ZGxlLA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICAgICk7DQo+ ICsNCj4gKyAgICBpZiAoVG1wUHhlUG9pbnRlciAhPSBOVUxMKSB7DQo+ICsgICAgICBGcmVlUG9v bCAoVG1wUHhlUG9pbnRlcik7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgKE5pY0RldmljZSAh PSBOVUxMKSB7DQo+ICsgICAgICBGcmVlUG9vbCAoTmljRGV2aWNlKTsNCj4gKyAgICB9DQo+ICsN Cj4gKyAgICByZXR1cm4gRUZJX0RFVklDRV9FUlJPUjsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1 cyA9IENyZWF0ZU1hY0RldmljZVBhdGggKA0KPiArICAgICAgICAgICAgICZOaWNEZXZpY2UtPkRl dlBhdGgsDQo+ICsgICAgICAgICAgICAgVXNiRXRoUGF0aCwNCj4gKyAgICAgICAgICAgICAmTmlj RGV2aWNlLT5OaWNJbmZvDQo+ICsgICAgICAgICAgICAgKTsNCj4gKw0KPiArICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+ICsgICAgVXBkYXRlTmljTnVtIChOVUxMLCBnUHhlKTsNCj4gKyAg ICBpZiAoVG1wUHhlUG9pbnRlciAhPSBOVUxMKSB7DQo+ICsgICAgICBGcmVlUG9vbCAoVG1wUHhl UG9pbnRlcik7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgTmljRGV2aWNlLT5TaWduYXR1 cmUgICAgICAgICAgICAgICAgID0gVU5ESV9ERVZfU0lHTkFUVVJFOw0KPiArICBOaWNEZXZpY2Ut Pk5paVByb3RvY29sLlJldmlzaW9uICAgICAgPQ0KPiBFRklfTkVUV09SS19JTlRFUkZBQ0VfSURF TlRJRklFUl9QUk9UT0NPTF9SRVZJU0lPTjsNCj4gKyAgTmljRGV2aWNlLT5OaWlQcm90b2NvbC5U eXBlICAgICAgICAgID0gRWZpTmV0d29ya0ludGVyZmFjZVVuZGk7DQo+ICsgIE5pY0RldmljZS0+ TmlpUHJvdG9jb2wuTWFqb3JWZXIgICAgICA9IFBYRV9ST01JRF9NQUpPUlZFUjsNCj4gKyAgTmlj RGV2aWNlLT5OaWlQcm90b2NvbC5NaW5vclZlciAgICAgID0gUFhFX1JPTUlEX01JTk9SVkVSOw0K PiArICBOaWNEZXZpY2UtPk5paVByb3RvY29sLkltYWdlU2l6ZSAgICAgPSAwOw0KPiArICBOaWNE ZXZpY2UtPk5paVByb3RvY29sLkltYWdlQWRkciAgICAgPSAwOw0KPiArICBOaWNEZXZpY2UtPk5p aVByb3RvY29sLklwdjZTdXBwb3J0ZWQgPSBUUlVFOw0KPiArDQo+ICsgIE5pY0RldmljZS0+Tmlp UHJvdG9jb2wuU3RyaW5nSWRbMF0gPSAnVSc7DQo+ICsgIE5pY0RldmljZS0+TmlpUHJvdG9jb2wu U3RyaW5nSWRbMV0gPSAnTic7DQo+ICsgIE5pY0RldmljZS0+TmlpUHJvdG9jb2wuU3RyaW5nSWRb Ml0gPSAnRCc7DQo+ICsgIE5pY0RldmljZS0+TmlpUHJvdG9jb2wuU3RyaW5nSWRbM10gPSAnSSc7 DQo+ICsgIE5pY0RldmljZS0+RGV2aWNlSGFuZGxlICAgICAgICAgICAgPSBOVUxMOw0KPiArDQo+ ICsgIE5pY0RldmljZS0+TmljSW5mby5SYXRlTGltaXRpbmdFbmFibGUgICAgICA9IGdSYXRlTGlt aXRpbmdFbmFibGU7DQo+ICsgIE5pY0RldmljZS0+TmljSW5mby5SYXRlTGltaXRpbmdDcmVkaXRD b3VudCA9IDA7DQo+ICsgIE5pY0RldmljZS0+TmljSW5mby5SYXRlTGltaXRpbmdDcmVkaXQgICAg ICA9IGdSYXRlTGltaXRpbmdDcmVkaXQ7DQo+ICsgIE5pY0RldmljZS0+TmljSW5mby5SYXRlTGlt aXRpbmdQb2xsVGltZXIgICA9IGdSYXRlTGltaXRpbmdQb2xsVGltZXI7DQo+ICsgIE5pY0Rldmlj ZS0+TmljSW5mby5SYXRlTGltaXRlciAgICAgICAgICAgICA9IE5VTEw7DQo+ICsNCj4gKyAgWmVy b01lbSAoJk5pY0RldmljZS0+TmljSW5mby5SZXF1ZXN0LCBzaXplb2YNCj4gKEVGSV9VU0JfREVW SUNFX1JFUVVFU1QpKTsNCj4gKw0KPiArICBTdGF0dXMgPSBVc2JFdGgtPlVzYkV0aEludGVycnVw dCAoVXNiRXRoLCBUUlVFLA0KPiBORVRXT1JLX0NPTU1PTl9QT0xMSU5HX0lOVEVSVkFMLCAmTmlj RGV2aWNlLT5OaWNJbmZvLlJlcXVlc3QpOw0KPiArICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMp Ow0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+SW5zdGFsbE11bHRpcGxlUHJvdG9jb2xJbnRlcmZh Y2VzICgNCj4gKyAgICAgICAgICAgICAgICAgICZOaWNEZXZpY2UtPkRldmljZUhhbmRsZSwNCj4g KyAgICAgICAgICAgICAgICAgICZnRWZpTmV0d29ya0ludGVyZmFjZUlkZW50aWZpZXJQcm90b2Nv bEd1aWRfMzEsDQo+ICsgICAgICAgICAgICAgICAgICAmTmljRGV2aWNlLT5OaWlQcm90b2NvbCwN Cj4gKyAgICAgICAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCj4gKyAg ICAgICAgICAgICAgICAgIE5pY0RldmljZS0+RGV2UGF0aCwNCj4gKyAgICAgICAgICAgICAgICAg IE5VTEwNCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgaWYgKEVGSV9FUlJPUiAo U3RhdHVzKSkgew0KPiArICAgIGlmIChOaWNEZXZpY2UtPk5paVByb3RvY29sLklmTnVtIDwgTUFY X0xBTl9JTlRFUkZBQ0UpIHsNCj4gKyAgICAgIGdMYW5EZXZpY2VMaXN0W05pY0RldmljZS0+Tmlp UHJvdG9jb2wuSWZOdW1dID0gTlVMTDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBnQlMtPkNsb3Nl UHJvdG9jb2wgKA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAg ICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgIFRoaXMtPkRyaXZl ckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAg ICAgICAgKTsNCj4gKyAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICBDb250 cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkLA0K PiArICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICBD b250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICAgICk7DQo+ICsNCj4gKyAgICBpZiAoVG1wUHhl UG9pbnRlciAhPSBOVUxMKSB7DQo+ICsgICAgICBGcmVlUG9vbCAoVG1wUHhlUG9pbnRlcik7DQo+ ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgKE5pY0RldmljZS0+RGV2UGF0aCAhPSBOVUxMKSB7DQo+ ICsgICAgICBGcmVlUG9vbCAoTmljRGV2aWNlLT5EZXZQYXRoKTsNCj4gKyAgICB9DQo+ICsNCj4g KyAgICBpZiAoTmljRGV2aWNlICE9IE5VTEwpIHsNCj4gKyAgICAgIEZyZWVQb29sIChOaWNEZXZp Y2UpOw0KPiArICAgIH0NCj4gKw0KPiArICAgIHJldHVybiBFRklfREVWSUNFX0VSUk9SOw0KPiAr ICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KPiArICAgICAgICAg ICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICZnRWRrSUlV c2JFdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmVXNiRXRo LA0KPiArICAgICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAg ICAgICAgICAgICAgICAgIE5pY0RldmljZS0+RGV2aWNlSGFuZGxlLA0KPiArICAgICAgICAgICAg ICAgICAgRUZJX09QRU5fUFJPVE9DT0xfQllfQ0hJTERfQ09OVFJPTExFUg0KPiArICAgICAgICAg ICAgICAgICAgKTsNCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioN Cj4gKyAgTmV0d29yayBDb21tb24gRHJpdmVyIEJpbmRpbmcgU3RvcC4NCj4gKw0KPiArICBAcGFy YW1baW5dICBUaGlzICAgICAgICAgICAgICAgICAgUHJvdG9jb2wgaW5zdGFuY2UgcG9pbnRlci4N Cj4gKyAgQHBhcmFtW2luXSAgQ29udHJvbGxlckhhbmRsZSAgICAgIEhhbmRsZSBvZiBkZXZpY2Ug dG8gc3RvcCBkcml2ZXIgb24NCj4gKyAgQHBhcmFtW2luXSAgTnVtYmVyT2ZDaGlsZHJlbiAgICAg IE51bWJlciBvZiBIYW5kbGVzIGluIENoaWxkSGFuZGxlQnVmZmVyLg0KPiBJZiBudW1iZXIgb2YN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuIGlzIHplcm8g c3RvcCB0aGUgZW50aXJlIGJ1cyBkcml2ZXIuDQo+ICsgIEBwYXJhbVtpbl0gIENoaWxkSGFuZGxl QnVmZmVyICAgICBMaXN0IG9mIENoaWxkIEhhbmRsZXMgdG8gU3RvcC4NCj4gKw0KPiArICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgVGhpcyBkcml2ZXIgaXMgcmVtb3ZlZCBDb250 cm9sbGVySGFuZGxlDQo+ICsgIEByZXR2YWwgb3RoZXIgICAgICAgICAgICAgICAgICAgICBUaGlz IGRyaXZlciB3YXMgbm90IHJlbW92ZWQgZnJvbSB0aGlzIGRldmljZQ0KPiArDQo+ICsqKi8NCj4g K0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArTmV0d29ya0NvbW1vbkRyaXZlclN0b3AgKA0KPiAr ICBJTiAgRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gIEVGSV9I QU5ETEUgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgSU4gIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyT2ZDaGlsZHJlbiwNCj4gKyAgSU4gIEVGSV9I QU5ETEUgICAgICAgICAgICAgICAgICAgKkNoaWxkSGFuZGxlQnVmZmVyDQo+ICsgICkNCj4gK3sN Cj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsN Cj4gKyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbENoaWxk cmVuU3RvcHBlZDsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEluZGV4Ow0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICAgICAgICAgICAg ICAgKlVzYkV0aDsNCj4gKyAgTklDX0RFVklDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICpOaWNEZXZpY2U7DQo+ICsgIEVGSV9ORVRXT1JLX0lOVEVSRkFDRV9JREVOVElGSUVSX1BS T1RPQ09MICAqTmlpUHJvdG9jb2w7DQo+ICsNCj4gKyAgaWYgKE51bWJlck9mQ2hpbGRyZW4gPT0g MCkgew0KPiArICAgIFN0YXR1cyA9IGdCUy0+T3BlblByb3RvY29sICgNCj4gKyAgICAgICAgICAg ICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgJmdFZmlO ZXR3b3JrSW50ZXJmYWNlSWRlbnRpZmllclByb3RvY29sR3VpZF8zMSwNCj4gKyAgICAgICAgICAg ICAgICAgICAgKFZPSUQgKiopJk5paVByb3RvY29sLA0KPiArICAgICAgICAgICAgICAgICAgICBU aGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgICBDb250cm9s bGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgICBFRklfT1BFTl9QUk9UT0NPTF9HRVRf UFJPVE9DT0wNCj4gKyAgICAgICAgICAgICAgICAgICAgKTsNCj4gKw0KPiArICAgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAg ICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAmZ0VmaURldmljZVBh dGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRs ZSwNCj4gKyAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICAgICAgKTsN Cj4gKyAgICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgQ29udHJvbGxl ckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkLA0KPiAr ICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgICAg Q29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgICAgICk7DQo+ICsgICAgICByZXR1cm4gRUZJ X1NVQ0NFU1M7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgTmljRGV2aWNlID0gVU5ESV9ERVZfRlJP TV9USElTIChOaWlQcm90b2NvbCk7DQo+ICsgICAgU3RhdHVzICAgID0gZ0JTLT5Vbmluc3RhbGxN dWx0aXBsZVByb3RvY29sSW50ZXJmYWNlcyAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgIENv bnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICZnRWZpTmV0d29ya0lu dGVyZmFjZUlkZW50aWZpZXJQcm90b2NvbEd1aWRfMzEsDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICZOaWNEZXZpY2UtPk5paVByb3RvY29sLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAm Z0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgIE5p Y0RldmljZS0+RGV2UGF0aCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgTlVMTA0KPiArICAg ICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN Cj4gKyAgICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgRnJlZVBvb2wg KE5pY0RldmljZS0+RGV2UGF0aCk7DQo+ICsgICAgRnJlZVBvb2wgKE5pY0RldmljZSk7DQo+ICsN Cj4gKyAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFu ZGxlLA0KPiArICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQo+ICsgICAg ICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgIENvbnRyb2xs ZXJIYW5kbGUNCj4gKyAgICAgICAgICAgKTsNCj4gKyAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0K PiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAmZ0Vka0lJVXNi RXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxl LA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICAgICk7DQo+ICsg ICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArICB9DQo+ICsNCj4gKyAgQWxsQ2hpbGRyZW5TdG9w cGVkID0gVFJVRTsNCj4gKw0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBOdW1iZXJPZkNo aWxkcmVuOyBJbmRleCsrKSB7DQo+ICsgICAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0K PiArICAgICAgICAgICAgICAgICAgICBDaGlsZEhhbmRsZUJ1ZmZlcltJbmRleF0sDQo+ICsgICAg ICAgICAgICAgICAgICAgICZnRWZpTmV0d29ya0ludGVyZmFjZUlkZW50aWZpZXJQcm90b2NvbEd1 aWRfMzEsDQo+ICsgICAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZOaWlQcm90b2NvbCwNCj4g KyAgICAgICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAg ICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICAg RUZJX09QRU5fUFJPVE9DT0xfR0VUX1BST1RPQ09MDQo+ICsgICAgICAgICAgICAgICAgICAgICk7 DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgQWxsQ2hpbGRyZW5T dG9wcGVkID0gRkFMU0U7DQo+ICsgICAgICBjb250aW51ZTsNCj4gKyAgICB9DQo+ICsNCj4gKyAg ICBOaWNEZXZpY2UgPSBVTkRJX0RFVl9GUk9NX1RISVMgKE5paVByb3RvY29sKTsNCj4gKw0KPiAr ICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUs DQo+ICsgICAgICAgICAgICZnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAg IFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgIENoaWxkSGFuZGxlQnVm ZmVyW0luZGV4XQ0KPiArICAgICAgICAgICApOw0KPiArDQo+ICsgICAgU3RhdHVzID0gZ0JTLT5V bmluc3RhbGxNdWx0aXBsZVByb3RvY29sSW50ZXJmYWNlcyAoDQo+ICsgICAgICAgICAgICAgICAg ICAgIENoaWxkSGFuZGxlQnVmZmVyW0luZGV4XSwNCj4gKyAgICAgICAgICAgICAgICAgICAgJmdF ZmlOZXR3b3JrSW50ZXJmYWNlSWRlbnRpZmllclByb3RvY29sR3VpZF8zMSwNCj4gKyAgICAgICAg ICAgICAgICAgICAgJk5pY0RldmljZS0+TmlpUHJvdG9jb2wsDQo+ICsgICAgICAgICAgICAgICAg ICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgICAg TmljRGV2aWNlLT5EZXZQYXRoLA0KPiArICAgICAgICAgICAgICAgICAgICBOVUxMDQo+ICsgICAg ICAgICAgICAgICAgICAgICk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiAr ICAgICAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgICAgICAg ICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgJmdFZGtJSVVz YkV0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmVXNi RXRoLA0KPiArICAgICAgICAgICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUs DQo+ICsgICAgICAgICAgICAgICAgICAgICAgQ2hpbGRIYW5kbGVCdWZmZXJbSW5kZXhdLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0JZX0NISUxEX0NPTlRST0xM RVINCj4gKyAgICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAg ICBGcmVlUG9vbCAoTmljRGV2aWNlLT5EZXZQYXRoKTsNCj4gKyAgICAgIEZyZWVQb29sIChOaWNE ZXZpY2UpOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIGlmICghQWxsQ2hpbGRyZW5TdG9w cGVkKSB7DQo+ICsgICAgcmV0dXJuIEVGSV9ERVZJQ0VfRVJST1I7DQo+ICsgIH0NCj4gKw0KPiAr ICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgRW50cnlwb2ludCBvZiBO ZXR3b3JrIENvbW1vbiBEcml2ZXIuDQo+ICsNCj4gKyAgVGhpcyBmdW5jdGlvbiBpcyB0aGUgZW50 cnlwb2ludCBvZiBOZXR3b3JrIENvbW1vbiBEcml2ZXIuIEl0IGluc3RhbGxzIERyaXZlcg0KPiBC aW5kaW5nDQo+ICsgIFByb3RvY29scyB0b2dldGhlciB3aXRoIENvbXBvbmVudCBOYW1lIFByb3Rv Y29scy4NCj4gKw0KPiArICBAcGFyYW1baW5dICBJbWFnZUhhbmRsZSAgICAgICBUaGUgZmlybXdh cmUgYWxsb2NhdGVkIGhhbmRsZSBmb3IgdGhlIEVGSQ0KPiBpbWFnZS4NCj4gKyAgQHBhcmFtW2lu XSAgU3lzdGVtVGFibGUgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRkkgU3lzdGVtIFRhYmxlLg0K PiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBlbnRyeSBwb2ludCBp cyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiAr RUZJQVBJDQo+ICtOZXR3b3JrQ29tbW9uRW50cnkgKA0KPiArICBJTiBFRklfSEFORExFICAgICAg ICBJbWFnZUhhbmRsZSwNCj4gKyAgSU4gRUZJX1NZU1RFTV9UQUJMRSAgKlN5c3RlbVRhYmxlDQo+ ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiArDQo+ICsgIGdOZXR3b3Jr Q29tbW9uRHJpdmVyQmluZGluZy5Ecml2ZXJCaW5kaW5nSGFuZGxlID0gSW1hZ2VIYW5kbGU7DQo+ ICsgIGdOZXR3b3JrQ29tbW9uRHJpdmVyQmluZGluZy5JbWFnZUhhbmRsZSAgICAgICAgID0gSW1h Z2VIYW5kbGU7DQo+ICsgIGdSYXRlTGltaXRpbmdFbmFibGUgICAgICAgICAgICAgICAgICAgICAg ICAgICAgID0gUGNkR2V0Qm9vbA0KPiAoUGNkRW5hYmxlVXNiTmV0d29ya1JhdGVMaW1pdGluZyk7 DQo+ICsgIGdSYXRlTGltaXRpbmdDcmVkaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0g UGNkR2V0MzINCj4gKFBjZFVzYk5ldHdvcmtSYXRlTGltaXRpbmdDcmVkaXQpOw0KPiArICBnUmF0 ZUxpbWl0aW5nUG9sbFRpbWVyICAgICAgICAgICAgICAgICAgICAgICAgICA9IFBjZEdldDMyDQo+ IChQY2RVc2JOZXR3b3JrUmF0ZUxpbWl0aW5nRmFjdG9yKTsNCj4gKw0KPiArICBTdGF0dXMgPSBn QlMtPkluc3RhbGxNdWx0aXBsZVByb3RvY29sSW50ZXJmYWNlcyAoDQo+ICsgICAgICAgICAgICAg ICAgICAmZ05ldHdvcmtDb21tb25Ecml2ZXJCaW5kaW5nLkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ ICsgICAgICAgICAgICAgICAgICAmZ0VmaURyaXZlckJpbmRpbmdQcm90b2NvbEd1aWQsDQo+ICsg ICAgICAgICAgICAgICAgICAmZ05ldHdvcmtDb21tb25Ecml2ZXJCaW5kaW5nLA0KPiArICAgICAg ICAgICAgICAgICAgJmdFZmlDb21wb25lbnROYW1lMlByb3RvY29sR3VpZCwNCj4gKyAgICAgICAg ICAgICAgICAgICZnTmV0d29ya0NvbW1vbkNvbXBvbmVudE5hbWUyLA0KPiArICAgICAgICAgICAg ICAgICAgTlVMTA0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgcmV0dXJuIFN0YXR1czsN Cj4gK30NCj4gZGlmZiAtLWdpdA0KPiBhL01kZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsv TmV0d29ya0NvbW1vbi9Ecml2ZXJCaW5kaW5nLmgNCj4gYi9NZGVNb2R1bGVQa2cvQnVzL1VzYi9V c2JOZXR3b3JrL05ldHdvcmtDb21tb24vRHJpdmVyQmluZGluZy5oDQo+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAuLmE4MDU4MzRhNzgNCj4gLS0tIC9kZXYvbnVsbA0K PiArKysgYi9NZGVNb2R1bGVQa2cvQnVzL1VzYi9Vc2JOZXR3b3JrL05ldHdvcmtDb21tb24vRHJp dmVyQmluZGluZy5oDQo+IEBAIC0wLDAgKzEsMjY2IEBADQo+ICsvKiogQGZpbGUNCj4gKyAgSGVh ZGVyIGZpbGUgZm9yIGZvciBVU0IgbmV0d29yayBjb21tb24gZHJpdmVyDQo+ICsNCj4gKyAgQ29w eXJpZ2h0IChjKSAyMDIzLCBBbWVyaWNhbiBNZWdhdHJlbmRzIEludGVybmF0aW9uYWwgTExDLiBB bGwgcmlnaHRzDQo+IHJlc2VydmVkLjxCUj4NCj4gKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gKyoqLw0KPiArDQo+ICsjaWZuZGVmIF9EUklWRVJfQklO RElOR19IXw0KPiArI2RlZmluZSBfRFJJVkVSX0JJTkRJTkdfSF8NCj4gKw0KPiArI2luY2x1ZGUg PExpYnJhcnkvVWVmaURyaXZlckVudHJ5UG9pbnQuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1Vl ZmlCb290U2VydmljZXNUYWJsZUxpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaUxpYi5o Pg0KPiArI2luY2x1ZGUgPExpYnJhcnkvRGV2aWNlUGF0aExpYi5oPg0KPiArI2luY2x1ZGUgPExp YnJhcnkvRGVidWdMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRpb25M aWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1BjZExpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJh cnkvQmFzZU1lbW9yeUxpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaVVzYkxpYi5oPg0K PiArI2luY2x1ZGUgPFByb3RvY29sL1VzYklvLmg+DQo+ICsjaW5jbHVkZSA8UHJvdG9jb2wvTmV0 d29ya0ludGVyZmFjZUlkZW50aWZpZXIuaD4NCj4gKyNpbmNsdWRlIDxQcm90b2NvbC9Vc2JFdGhl cm5ldFByb3RvY29sLmg+DQo+ICsNCj4gKyNkZWZpbmUgTkVUV09SS19DT01NT05fRFJJVkVSX1ZF UlNJT04gICAgMQ0KPiArI2RlZmluZSBORVRXT1JLX0NPTU1PTl9QT0xMSU5HX0lOVEVSVkFMICAw eDEwDQo+ICsjZGVmaW5lIFJYX0JVRkZFUl9DT1VOVCAgICAgICAgICAgICAgICAgIDMyDQo+ICsj ZGVmaW5lIFRYX0JVRkZFUl9DT1VOVCAgICAgICAgICAgICAgICAgIDMyDQo+ICsjZGVmaW5lIE1F TU9SWV9SRVFVSVJFICAgICAgICAgICAgICAgICAgIDANCj4gKw0KPiArI2RlZmluZSBVTkRJX0RF Vl9TSUdOQVRVUkUgIFNJR05BVFVSRV8zMigndScsJ24nLCdkJywnaScpDQo+ICsjZGVmaW5lIFVO RElfREVWX0ZST01fVEhJUyhhKSAgQ1IoYSwgTklDX0RFVklDRSwgTmlpUHJvdG9jb2wsDQo+IFVO RElfREVWX1NJR05BVFVSRSkNCj4gKyNkZWZpbmUgVU5ESV9ERVZfRlJPTV9OSUMoYSkgICBDUihh LCBOSUNfREVWSUNFLCBOaWNJbmZvLA0KPiBVTkRJX0RFVl9TSUdOQVRVUkUpDQo+ICsNCj4gKyNw cmFnbWEgcGFjaygxKQ0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UOCAgICAgRGVzdEFk ZHJbUFhFX0hXQUREUl9MRU5fRVRIRVJdOw0KPiArICBVSU5UOCAgICAgU3JjQWRkcltQWEVfSFdB RERSX0xFTl9FVEhFUl07DQo+ICsgIFVJTlQxNiAgICBQcm90b2NvbDsNCj4gK30gRXRoZXJuZXRI ZWFkZXI7DQo+ICsjcHJhZ21hIHBhY2soKQ0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsg IFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpZ25hdHVyZTsN Cj4gKyAgRUZJX05FVFdPUktfSU5URVJGQUNFX0lERU5USUZJRVJfUFJPVE9DT0wgICAgTmlpUHJv dG9jb2w7DQo+ICsgIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IERldmljZUhhbmRsZTsNCj4gKyAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAgICAgICAg ICAgICAgICAgKkJhc2VEZXZQYXRoOw0KPiArICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICAg ICAgICAgICAgICAgICAgICAqRGV2UGF0aDsNCj4gKyAgTklDX0RBVEEgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTmljSW5mbzsNCj4gKyAgVk9JRCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKlJlY2VpdmVCdWZmZXI7DQo+ICt9IE5JQ19ERVZJQ0U7 DQo+ICsNCj4gK3R5cGVkZWYgVk9JRCAoKkFQSV9GVU5DKSgNCj4gKyAgUFhFX0NEQiAqLA0KPiAr ICBOSUNfREFUQSAqDQo+ICsgICk7DQo+ICsNCj4gK2V4dGVybiBQWEVfU1dfVU5ESSAgICAgICAg ICAgICAgICAgICAqZ1B4ZTsNCj4gK2V4dGVybiBOSUNfREVWSUNFICAgICAgICAgICAgICAgICAg ICAqZ0xhbkRldmljZUxpc3RbTUFYX0xBTl9JTlRFUkZBQ0VdOw0KPiArZXh0ZXJuIEVGSV9DT01Q T05FTlRfTkFNRTJfUFJPVE9DT0wNCj4gZ05ldHdvcmtDb21tb25Db21wb25lbnROYW1lMjsNCj4g Kw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtOZXR3b3JrQ29tbW9uU3VwcG9ydGVkICgN Cj4gKyAgSU4gRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gRUZJ X0hBTkRMRSAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICBJTiBFRklf REVWSUNFX1BBVEhfUFJPVE9DT0wgICAgICpSZW1haW5pbmdEZXZpY2VQYXRoDQo+ICsgICk7DQo+ ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArTmV0d29ya0NvbW1vbkRyaXZlclN0YXJ0 ICgNCj4gKyAgSU4gRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4g RUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICBJTiBF RklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICAgICpSZW1haW5pbmdEZXZpY2VQYXRoDQo+ICsgICk7 DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArTmV0d29ya0NvbW1vbkRyaXZlclN0 b3AgKA0KPiArICBJTiAgRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICAqVGhpcywNCj4gKyAg SU4gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAg SU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyT2ZDaGlsZHJlbiwNCj4gKyAg SU4gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgKkNoaWxkSGFuZGxlQnVmZmVyDQo+ICsg ICk7DQo+ICsNCj4gK1ZPSUQNCj4gK1B4ZVN0cnVjdEluaXQgKA0KPiArICBPVVQgUFhFX1NXX1VO REkgICpQeGVTdw0KPiArICApOw0KPiArDQo+ICtWT0lEDQo+ICtVcGRhdGVOaWNOdW0gKA0KPiAr ICBJTiAgICAgIE5JQ19EQVRBICAgICAqTmljLA0KPiArICBJTiBPVVQgIFBYRV9TV19VTkRJICAq UHhlU3cNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtVbmRpQXBp RW50cnkgKA0KPiArICBJTiAgVUlOVDY0ICBDZGINCj4gKyAgKTsNCj4gKw0KPiArVUlOVE4NCj4g K01hcEl0ICgNCj4gKyAgSU4gTklDX0RBVEEgICpOaWMsDQo+ICsgIElOIFVJTlQ2NCAgICBNZW1B ZGRyLA0KPiArICBJTiBVSU5UMzIgICAgU2l6ZSwNCj4gKyAgSU4gVUlOVDMyICAgIERpcmVjdGlv biwNCj4gKyAgT1VUIFVJTlQ2NCAgIE1hcHBlZEFkZHINCj4gKyAgKTsNCj4gKw0KPiArVk9JRA0K PiArVW5NYXBJdCAoDQo+ICsgIElOIE5JQ19EQVRBICAqTmljLA0KPiArICBJTiBVSU5UNjQgICAg TWVtQWRkciwNCj4gKyAgSU4gVUlOVDMyICAgIFNpemUsDQo+ICsgIElOIFVJTlQzMiAgICBEaXJl Y3Rpb24sDQo+ICsgIElOIFVJTlQ2NCAgICBNYXBwZWRBZGRyDQo+ICsgICk7DQo+ICsNCj4gK1ZP SUQNCj4gK1VuZGlHZXRTdGF0ZSAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4g IE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK1ZPSUQNCj4gK1VuZGlTdGFydCAoDQo+ ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICk7 DQo+ICsNCj4gK1ZPSUQNCj4gK1VuZGlTdG9wICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0K PiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArVk9JRA0KPiArVW5kaUdl dEluaXRJbmZvICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEg ICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArVk9JRA0KPiArVW5kaUdldENvbmZpZ0luZm8gKA0KPiAr ICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApOw0K PiArDQo+ICtWT0lEDQo+ICtVbmRpSW5pdGlhbGl6ZSAoDQo+ICsgIElOICAgICAgUFhFX0NEQiAg ICpDZGIsDQo+ICsgIElOIE9VVCAgTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArVk9J RA0KPiArVW5kaVJlc2V0ICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklD X0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArVk9JRA0KPiArVW5kaVNodXRkb3duICgNCj4g KyAgSU4gICAgICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gT1VUICBOSUNfREFUQSAgKk5pYw0K PiArICApOw0KPiArDQo+ICtWT0lEDQo+ICtVbmRpSW50ZXJydXB0RW5hYmxlICgNCj4gKyAgSU4g IFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0K PiArVk9JRA0KPiArVW5kaVJlY2VpdmVGaWx0ZXIgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIs DQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtWT0lEDQo+ICtVbmRp U3RhdGlvbkFkZHJlc3MgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNf REFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtWT0lEDQo+ICtVbmRpU3RhdGlzdGljcyAoDQo+ ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICk7 DQo+ICsNCj4gK1ZPSUQNCj4gK1VuZGlNY2FzdElwMk1hYyAoDQo+ICsgIElOIE9VVCAgUFhFX0NE QiAgICpDZGIsDQo+ICsgIElOICAgICAgTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiAr Vk9JRA0KPiArVW5kaU52RGF0YSAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4g IE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK1ZPSUQNCj4gK1VuZGlHZXRTdGF0dXMg KA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiAr ICApOw0KPiArDQo+ICtWT0lEDQo+ICtVbmRpRmlsbEhlYWRlciAoDQo+ICsgIElOICBQWEVfQ0RC ICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK1ZPSUQN Cj4gK1VuZGlUcmFuc21pdCAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5J Q19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK1ZPSUQNCj4gK1VuZGlSZWNlaXZlICgNCj4g KyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKTsN Cj4gKw0KPiArVUlOVDE2DQo+ICtJbml0aWFsaXplICgNCj4gKyAgSU4gICAgICBQWEVfQ0RCICAg KkNkYiwNCj4gKyAgSU4gT1VUICBOSUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtVSU5U MTYNCj4gK1RyYW5zbWl0ICgNCj4gKyAgSU4gICAgICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4g T1VUICBOSUNfREFUQSAgKk5pYywNCj4gKyAgSU4gICAgICBVSU5UNjQgICAgQ3BiQWRkciwNCj4g KyAgSU4gICAgICBVSU5UMTYgICAgT3BGbGFncw0KPiArICApOw0KPiArDQo+ICtVSU5UMTYNCj4g K1JlY2VpdmUgKA0KPiArICBJTiBQWEVfQ0RCICAgICAgICpDZGIsDQo+ICsgIElOIE9VVCBOSUNf REFUQSAgKk5pYywNCj4gKyAgSU4gVUlOVDY0ICAgICAgICBDcGJBZGRyLA0KPiArICBJTiBPVVQg VUlOVDY0ICAgIERiQWRkcg0KPiArICApOw0KPiArDQo+ICtVSU5UMTYNCj4gK1NldEZpbHRlciAo DQo+ICsgIElOICBOSUNfREFUQSAgKk5pYywNCj4gKyAgSU4gIFVJTlQxNiAgICBTZXRGaWx0ZXIs DQo+ICsgIElOICBVSU5UNjQgICAgQ3BiQWRkciwNCj4gKyAgSU4gIFVJTlQzMiAgICBDcGJTaXpl DQo+ICsgICk7DQo+ICsNCj4gK1VJTlQxNg0KPiArU3RhdGlzdGljcyAoDQo+ICsgIElOIE5JQ19E QVRBICAqTmljLA0KPiArICBJTiBVSU5UNjQgICAgRGJBZGRyLA0KPiArICBJTiBVSU5UMTYgICAg RGJTaXplDQo+ICsgICk7DQo+ICsNCj4gKyNlbmRpZg0KPiBkaWZmIC0tZ2l0DQo+IGEvTWRlTW9k dWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9OZXR3b3JrQ29tbW9uL05ldHdvcmtDb21tb24uaW4N Cj4gZg0KPiBiL01kZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsvTmV0d29ya0NvbW1vbi9O ZXR3b3JrQ29tbW9uLmluDQo+IGYNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAw MDAwMDAwMC4uZjljYTMxZmU4MA0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKw0KPiBiL01kZU1vZHVs ZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsvTmV0d29ya0NvbW1vbi9OZXR3b3JrQ29tbW9uLmluDQo+ IGYNCj4gQEAgLTAsMCArMSw0OCBAQA0KPiArIyMgQGZpbGUNCj4gKyMgICBUaGlzIGlzIFVzYiBO ZXR3b3JrIENvbW1vbiBkcml2ZXIgZm9yIERYRSBwaGFzZS4NCj4gKyMNCj4gKyMgQ29weXJpZ2h0 IChjKSAyMDIzLCBBbWVyaWNhbiBNZWdhdHJlbmRzIEludGVybmF0aW9uYWwgTExDLiBBbGwgcmln aHRzDQo+IHJlc2VydmVkLjxCUj4NCj4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0y LUNsYXVzZS1QYXRlbnQNCj4gKyMjDQo+ICsNCj4gK1tEZWZpbmVzXQ0KPiArICBJTkZfVkVSU0lP TiAgICAgICAgICAgICAgICAgICAgPSAweDAwMDEwMDA1DQo+ICsgIEJBU0VfTkFNRSAgICAgICAg ICAgICAgICAgICAgICA9IE5ldHdvcmtDb21tb24NCj4gKyAgRklMRV9HVUlEICAgICAgICAgICAg ICAgICAgICAgID0gY2E2ZWI0ZjQtZjFkNi00Mzc1LTk3ZDYtMTg4NTY4NzFlMWJmDQo+ICsgIE1P RFVMRV9UWVBFICAgICAgICAgICAgICAgICAgICA9IERYRV9EUklWRVINCj4gKyAgVkVSU0lPTl9T VFJJTkcgICAgICAgICAgICAgICAgID0gMS4wDQo+ICsgIEVOVFJZX1BPSU5UICAgICAgICAgICAg ICAgICAgICA9IE5ldHdvcmtDb21tb25FbnRyeQ0KPiArDQo+ICtbU291cmNlc10NCj4gKyAgRHJp dmVyQmluZGluZy5jDQo+ICsgIERyaXZlckJpbmRpbmcuaA0KPiArICBDb21wb25lbnROYW1lLmMN Cj4gKyAgUHhlRnVuY3Rpb24uYw0KPiArDQo+ICtbUGFja2FnZXNdDQo+ICsgIE1kZVBrZy9NZGVQ a2cuZGVjDQo+ICsgIE1kZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cuZGVjDQo+ICsNCj4gK1tMaWJy YXJ5Q2xhc3Nlc10NCj4gKyAgVWVmaURyaXZlckVudHJ5UG9pbnQNCj4gKyAgVWVmaUJvb3RTZXJ2 aWNlc1RhYmxlTGliDQo+ICsgIFVlZmlMaWINCj4gKyAgRGVidWdMaWINCj4gKyAgVWVmaVVzYkxp Yg0KPiArICBNZW1vcnlBbGxvY2F0aW9uTGliDQo+ICsgIEJhc2VNZW1vcnlMaWINCj4gKw0KPiAr W1Byb3RvY29sc10NCj4gKyAgZ0VmaU5ldHdvcmtJbnRlcmZhY2VJZGVudGlmaWVyUHJvdG9jb2xH dWlkXzMxDQo+ICsgIGdFZmlVc2JJb1Byb3RvY29sR3VpZA0KPiArICBnRWZpRGV2aWNlUGF0aFBy b3RvY29sR3VpZA0KPiArICBnRWZpRHJpdmVyQmluZGluZ1Byb3RvY29sR3VpZA0KPiArICBnRWRr SUlVc2JFdGhQcm90b2NvbEd1aWQNCj4gKw0KPiArW1BjZF0NCj4gKyAgZ0VmaU1kZU1vZHVsZVBr Z1Rva2VuU3BhY2VHdWlkLlBjZEVuYWJsZVVzYk5ldHdvcmtSYXRlTGltaXRpbmcNCj4gKyAgZ0Vm aU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZFVzYk5ldHdvcmtSYXRlTGltaXRpbmdDcmVk aXQNCj4gKyAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZFVzYk5ldHdvcmtSYXRl TGltaXRpbmdGYWN0b3INCj4gKw0KPiArW0RlcGV4XQ0KPiArICBUUlVFDQo+IGRpZmYgLS1naXQN Cj4gYS9NZGVNb2R1bGVQa2cvQnVzL1VzYi9Vc2JOZXR3b3JrL05ldHdvcmtDb21tb24vUHhlRnVu Y3Rpb24uYw0KPiBiL01kZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsvTmV0d29ya0NvbW1v bi9QeGVGdW5jdGlvbi5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAw MDAuLjY4N2NhYmNhNGMNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9NZGVNb2R1bGVQa2cvQnVz L1VzYi9Vc2JOZXR3b3JrL05ldHdvcmtDb21tb24vUHhlRnVuY3Rpb24uYw0KPiBAQCAtMCwwICsx LDE4MDMgQEANCj4gKy8qKiBAZmlsZQ0KPiArICBUaGlzIGZpbGUgY29udGFpbnMgY29kZSBmb3Ig VU5ESSBjb21tYW5kIGJhc2VkIG9uIFVFRkkgc3BlY2lmaWNhdGlvbi4NCj4gKw0KPiArICBDb3B5 cmlnaHQgKGMpIDIwMjMsIEFtZXJpY2FuIE1lZ2F0cmVuZHMgSW50ZXJuYXRpb25hbCBMTEMuIEFs bCByaWdodHMNCj4gcmVzZXJ2ZWQuPEJSPg0KPiArICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog QlNELTItQ2xhdXNlLVBhdGVudA0KPiArKiovDQo+ICsNCj4gKyNpbmNsdWRlICJEcml2ZXJCaW5k aW5nLmgiDQo+ICsNCj4gKy8vIEFQSSB0YWJsZSwgZGVmaW5lZCBpbiBVRUZJIHNwZWNpZmljYXRp b24NCj4gK0FQSV9GVU5DICBnVW5kaUFwaVRhYmxlW10gPSB7DQo+ICsgIFVuZGlHZXRTdGF0ZSwN Cj4gKyAgVW5kaVN0YXJ0LA0KPiArICBVbmRpU3RvcCwNCj4gKyAgVW5kaUdldEluaXRJbmZvLA0K PiArICBVbmRpR2V0Q29uZmlnSW5mbywNCj4gKyAgVW5kaUluaXRpYWxpemUsDQo+ICsgIFVuZGlS ZXNldCwNCj4gKyAgVW5kaVNodXRkb3duLA0KPiArICBVbmRpSW50ZXJydXB0RW5hYmxlLA0KPiAr ICBVbmRpUmVjZWl2ZUZpbHRlciwNCj4gKyAgVW5kaVN0YXRpb25BZGRyZXNzLA0KPiArICBVbmRp U3RhdGlzdGljcywNCj4gKyAgVW5kaU1jYXN0SXAyTWFjLA0KPiArICBVbmRpTnZEYXRhLA0KPiAr ICBVbmRpR2V0U3RhdHVzLA0KPiArICBVbmRpRmlsbEhlYWRlciwNCj4gKyAgVW5kaVRyYW5zbWl0 LA0KPiArICBVbmRpUmVjZWl2ZQ0KPiArfTsNCj4gKw0KPiArLyoqDQo+ICsgICBDYWxsYmFjayBm dW5jdGlvbiBmb3IgZW5hYmxlIFJhdGUgTGltaXRlcg0KPiArDQo+ICsgICBAcGFyYW1baW5dIEV2 ZW50ICAgICAgICAgICBFdmVudCB3aG9zZSBub3RpZmljYXRpb24gZnVuY3Rpb24gaXMgYmVpbmcg aW52b2tlZA0KPiArICAgQHBhcmFtW2luXSBDb250ZXh0ICAgICAgICAgUG9pbnRlciB0byB0aGUg bm90aWZpY2F0aW9uIGZ1bmN0aW9uJ3MgY29udGV4dA0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4g K0VGSUFQSQ0KPiArVW5kaVJhdGVMaW1pdGVyQ2FsbGJhY2sgKA0KPiArICBJTiAgRUZJX0VWRU5U ICBFdmVudCwNCj4gKyAgSU4gIFZPSUQgICAgICAgKkNvbnRleHQNCj4gKyAgKQ0KPiArew0KPiAr ICBOSUNfREFUQSAgKk5pYyA9IENvbnRleHQ7DQo+ICsNCj4gKyAgaWYgKE5pYy0+UmF0ZUxpbWl0 aW5nQ3JlZGl0Q291bnQgPCBOaWMtPlJhdGVMaW1pdGluZ0NyZWRpdCkgew0KPiArICAgIE5pYy0+ UmF0ZUxpbWl0aW5nQ3JlZGl0Q291bnQrKzsNCj4gKyAgfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4g KyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBvcGVyYXRpb25hbCBzdGF0 ZSBvZiB0aGUgVU5ESS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0 aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9p bnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsq Ki8NCj4gK1ZPSUQNCj4gK1VuZGlHZXRTdGF0ZSAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwN Cj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAg U3RhdHVzOw0KPiArDQo+ICsgIGlmICgoQ2RiLT5PcENvZGUgIT0gUFhFX09QQ09ERV9HRVRfU1RB VEUpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQWEVfU1RBVENPREVfSU5JVElBTEla RSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQWEVfU1RBVEZMQUdTX0lOSVRJQUxJ WkUpIHx8DQo+ICsgICAgICAoQ2RiLT5JRm51bSA+PSAoZ1B4ZS0+SUZjbnQgfCBnUHhlLT5JRmNu dEV4dCA8PCA4KSkgfHwNCj4gKyAgICAgIChDZGItPkNQQnNpemUgIT0gUFhFX0NQQlNJWkVfTk9U X1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5DUEJhZGRyICE9IFBYRV9DUEJBRERSX05PVF9VU0VE KSB8fA0KPiArICAgICAgKENkYi0+REJzaXplICE9IFBYRV9EQlNJWkVfTk9UX1VTRUQpIHx8DQo+ ICsgICAgICAoQ2RiLT5EQmFkZHIgIT0gUFhFX0RCQUREUl9OT1RfVVNFRCkgfHwNCj4gKyAgICAg IChDZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxBR1NfTk9UX1VTRUQpKQ0KPiArICB7DQo+ICsgICAg Q2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENk Yi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiArICAgIHJldHVybjsN Cj4gKyAgfSBlbHNlIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09N TUFORF9DT01QTEVURTsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9TVUND RVNTOw0KPiArICB9DQo+ICsNCj4gKyAgQ2RiLT5TdGF0RmxhZ3MgPSBDZGItPlN0YXRGbGFncyB8 IE5pYy0+U3RhdGU7DQo+ICsNCj4gKyAgaWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0 aFVuZGlHZXRTdGF0ZSAhPSBOVUxMKSB7DQo+ICsgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVz YkV0aFVuZGkuVXNiRXRoVW5kaUdldFN0YXRlIChDZGIsIE5pYyk7DQo+ICsgICAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdT X0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4g KyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gY2hhbmdlIHRoZSBVTkRJIG9wZXJhdGlvbmFsIHN0 YXRlIGZyb20gc3RvcHBlZCB0bw0KPiBzdGFydGVkLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENk YiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJh bVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVy IGRhdGEuDQo+ICsNCj4gKyoqLw0KPiArVk9JRA0KPiArVW5kaVN0YXJ0ICgNCj4gKyAgSU4gIFBY RV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiAr ICBQWEVfQ1BCX1NUQVJUXzMxICAqQ3BiOw0KPiArICBFRklfU1RBVFVTICAgICAgICBTdGF0dXM7 DQo+ICsgIEJPT0xFQU4gICAgICAgICAgIEV2ZW50RXJyb3I7DQo+ICsNCj4gKyAgaWYgKChDZGIt Pk9wQ29kZSAhPSBQWEVfT1BDT0RFX1NUQVJUKSB8fA0KPiArICAgICAgKENkYi0+U3RhdENvZGUg IT0gUFhFX1NUQVRDT0RFX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0RmxhZ3Mg IT0gUFhFX1NUQVRGTEFHU19JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+SUZudW0gPj0g KGdQeGUtPklGY250IHwgZ1B4ZS0+SUZjbnRFeHQgPDwgOCkpIHx8DQo+ICsgICAgICAoQ2RiLT5D UEJzaXplICE9IHNpemVvZiAoUFhFX0NQQl9TVEFSVF8zMSkpIHx8DQo+ICsgICAgICAoQ2RiLT5E QnNpemUgIT0gUFhFX0RCU0laRV9OT1RfVVNFRCkgfHwNCj4gKyAgICAgIChDZGItPkRCYWRkciAh PSBQWEVfREJBRERSX05PVF9VU0VEKSB8fA0KPiArICAgICAgKENkYi0+T3BGbGFncyAhPSBQWEVf T1BGTEFHU19OT1RfVVNFRCkpDQo+ICsgIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9T VEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RB VENPREVfSU5WQUxJRF9DREI7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgaWYg KE5pYy0+U3RhdGUgIT0gUFhFX1NUQVRGTEFHU19HRVRfU1RBVEVfU1RPUFBFRCkgew0KPiArICAg IENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBD ZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9BTFJFQURZX1NUQVJURUQ7DQo+ICsgICAgcmV0 dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgQ3BiID0gKFBYRV9DUEJfU1RBUlRfMzEgKikoVUlOVE4p Q2RiLT5DUEJhZGRyOw0KPiArDQo+ICsgIE5pYy0+UHhlU3RhcnQuRGVsYXkgICAgID0gQ3BiLT5E ZWxheTsNCj4gKyAgTmljLT5QeGVTdGFydC5WaXJ0MlBoeXMgPSBDcGItPlZpcnQyUGh5czsNCj4g KyAgTmljLT5QeGVTdGFydC5CbG9jayAgICAgPSBDcGItPkJsb2NrOw0KPiArICBOaWMtPlB4ZVN0 YXJ0Lk1hcF9NZW0gICA9IDA7DQo+ICsgIE5pYy0+UHhlU3RhcnQuVW5NYXBfTWVtID0gMDsNCj4g KyAgTmljLT5QeGVTdGFydC5TeW5jX01lbSAgPSBDcGItPlN5bmNfTWVtOw0KPiArICBOaWMtPlB4 ZVN0YXJ0LlVuaXF1ZV9JRCA9IENwYi0+VW5pcXVlX0lEOw0KPiArICBFdmVudEVycm9yICAgICAg ICAgICAgICA9IEZBTFNFOw0KPiArICBTdGF0dXMgICAgICAgICAgICAgICAgICA9IEVGSV9TVUND RVNTOw0KPiArICBpZiAoTmljLT5SYXRlTGltaXRpbmdFbmFibGUgPT0gVFJVRSkgew0KPiArICAg IFN0YXR1cyA9IGdCUy0+Q3JlYXRlRXZlbnQgKA0KPiArICAgICAgICAgICAgICAgICAgICBFVlRf VElNRVIgfCBFVlRfTk9USUZZX1NJR05BTCwNCj4gKyAgICAgICAgICAgICAgICAgICAgVFBMX05P VElGWSwNCj4gKyAgICAgICAgICAgICAgICAgICAgVW5kaVJhdGVMaW1pdGVyQ2FsbGJhY2ssDQo+ ICsgICAgICAgICAgICAgICAgICAgIE5pYywNCj4gKyAgICAgICAgICAgICAgICAgICAgJk5pYy0+ UmF0ZUxpbWl0ZXINCj4gKyAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICBpZiAoIUVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgU3RhdHVzID0gZ0JTLT5TZXRUaW1lciAoDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgTmljLT5SYXRlTGltaXRlciwNCj4gKyAgICAgICAgICAgICAg ICAgICAgICBUaW1lclBlcmlvZGljLA0KPiArICAgICAgICAgICAgICAgICAgICAgIE5pYy0+UmF0 ZUxpbWl0aW5nUG9sbFRpbWVyICogMTAwMDANCj4gKyAgICAgICAgICAgICAgICAgICAgICApOw0K PiArICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgICBFdmVudEVycm9y ID0gVFJVRTsNCj4gKyAgICAgIH0NCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoKE5p Yy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlTdGFydCAhPSBOVUxMKSAmJiAoRXZlbnRF cnJvciA9PQ0KPiBGQUxTRSkpIHsNCj4gKyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRo VW5kaS5Vc2JFdGhVbmRpU3RhcnQgKENkYiwgTmljKTsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmICgh RUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgLy8gSW5pdGlhbCB0aGUgc3RhdGUgZm9yIFVO REkgc3RhcnQuDQo+ICsgICAgTmljLT5TdGF0ZSAgICAgPSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFU RV9TVEFSVEVEOw0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5E X0NPTVBMRVRFOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7 DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgaWYgKE5pYy0+UmF0ZUxpbWl0aW5nRW5hYmxlID09IFRS VUUpIHsNCj4gKyAgICAgIGlmICghRXZlbnRFcnJvcikgew0KPiArICAgICAgICBnQlMtPlNldFRp bWVyICgmTmljLT5SYXRlTGltaXRlciwgVGltZXJDYW5jZWwsIDApOw0KPiArICAgICAgfQ0KPiAr DQo+ICsgICAgICBpZiAoTmljLT5SYXRlTGltaXRlcikgew0KPiArICAgICAgICBnQlMtPkNsb3Nl RXZlbnQgKCZOaWMtPlJhdGVMaW1pdGVyKTsNCj4gKyAgICAgICAgTmljLT5SYXRlTGltaXRlciA9 IDA7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgLy8gSW5pdGlhbCB0aGUgc3Rh dGUgd2hlbiBVTkRJIHN0YXJ0IGlzIGZhaWwNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9T VEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RB VENPREVfREVWSUNFX0ZBSUxVUkU7DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRo aXMgY29tbWFuZCBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgVU5ESSBvcGVyYXRpb25hbCBzdGF0ZSBm cm9tIHN0YXJ0ZWQgdG8NCj4gc3RvcHBlZC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEg cG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5d ICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRh Lg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1VuZGlTdG9wICgNCj4gKyAgSU4gIFBYRV9DREIg ICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBFRklf U1RBVFVTICBTdGF0dXM7DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wQ29kZSAhPSBQWEVfT1BDT0RF X1NUT1ApIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQWEVfU1RBVENPREVfSU5JVElB TElaRSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQWEVfU1RBVEZMQUdTX0lOSVRJ QUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5JRm51bSA+PSAoZ1B4ZS0+SUZjbnQgfCBnUHhlLT5J RmNudEV4dCA8PCA4KSkgfHwNCj4gKyAgICAgIChDZGItPkNQQnNpemUgIT0gUFhFX0NQQlNJWkVf Tk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5DUEJhZGRyICE9IFBYRV9DUEJBRERSX05PVF9V U0VEKSB8fA0KPiArICAgICAgKENkYi0+REJzaXplICE9IFBYRV9EQlNJWkVfTk9UX1VTRUQpIHx8 DQo+ICsgICAgICAoQ2RiLT5EQmFkZHIgIT0gUFhFX0RCQUREUl9OT1RfVVNFRCkgfHwNCj4gKyAg ICAgIChDZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxBR1NfTk9UX1VTRUQpKQ0KPiArICB7DQo+ICsg ICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAg IENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiArICAgIHJldHVy bjsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1Nf Q09NTUFORF9DT01QTEVURTsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9T VUNDRVNTOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+U3RhdGUgPT0gUFhFX1NUQVRGTEFH U19HRVRfU1RBVEVfU1RPUFBFRCkgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRG TEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09E RV9OT1RfU1RBUlRFRDsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmlj LT5TdGF0ZSA9PSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9JTklUSUFMSVpFRCkgew0KPiArICAg IENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBD ZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9OT1RfU0hVVERPV047DQo+ICsgICAgcmV0dXJu Ow0KPiArICB9DQo+ICsNCj4gKyAgTmljLT5QeGVTdGFydC5EZWxheSAgICAgPSAwOw0KPiArICBO aWMtPlB4ZVN0YXJ0LlZpcnQyUGh5cyA9IDA7DQo+ICsgIE5pYy0+UHhlU3RhcnQuQmxvY2sgICAg ID0gMDsNCj4gKyAgTmljLT5QeGVTdGFydC5NYXBfTWVtICAgPSAwOw0KPiArICBOaWMtPlB4ZVN0 YXJ0LlVuTWFwX01lbSA9IDA7DQo+ICsgIE5pYy0+UHhlU3RhcnQuU3luY19NZW0gID0gMDsNCj4g KyAgTmljLT5TdGF0ZSAgICAgICAgICAgICAgPSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9TVE9Q UEVEOw0KPiArDQo+ICsgIGlmIChOaWMtPlJhdGVMaW1pdGluZ0VuYWJsZSA9PSBUUlVFKSB7DQo+ ICsgICAgZ0JTLT5TZXRUaW1lciAoJk5pYy0+UmF0ZUxpbWl0ZXIsIFRpbWVyQ2FuY2VsLCAwKTsN Cj4gKyAgICBnQlMtPkNsb3NlRXZlbnQgKCZOaWMtPlJhdGVMaW1pdGVyKTsNCj4gKyAgfQ0KPiAr DQo+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpU3RvcCAhPSBOVUxM KSB7DQo+ICsgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaVN0 b3AgKENkYiwgTmljKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAg ICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAg fQ0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0 byByZXRyaWV2ZSBpbml0aWFsaXphdGlvbiBpbmZvcm1hdGlvbiB0aGF0IGlzDQo+ICsgIG5lZWRl ZCBieSBkcml2ZXJzIGFuZCBhcHBsaWNhdGlvbnMgdG8gaW5pdGlhbGl6ZWQgVU5ESS4NCj4gKw0K PiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9y IGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBp bnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1VuZGlH ZXRJbml0SW5mbyAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRB ICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgUFhFX0RCX0dFVF9JTklUX0lORk8gICpEYjsNCj4g KyAgRUZJX1NUQVRVUyAgICAgICAgICAgIFN0YXR1czsNCj4gKw0KPiArICBpZiAoKENkYi0+T3BD b2RlICE9IFBYRV9PUENPREVfR0VUX0lOSVRfSU5GTykgfHwNCj4gKyAgICAgIChDZGItPlN0YXRD b2RlICE9IFBYRV9TVEFUQ09ERV9JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+U3RhdEZs YWdzICE9IFBYRV9TVEFURkxBR1NfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPklGbnVt ID49IChnUHhlLT5JRmNudCB8IGdQeGUtPklGY250RXh0IDw8IDgpKSB8fA0KPiArICAgICAgKENk Yi0+Q1BCc2l6ZSAhPSBQWEVfQ1BCU0laRV9OT1RfVVNFRCkgfHwNCj4gKyAgICAgIChDZGItPkNQ QmFkZHIgIT0gUFhFX0NQQkFERFJfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5EQnNpemUg IT0gc2l6ZW9mIChQWEVfREJfR0VUX0lOSVRfSU5GTykpIHx8DQo+ICsgICAgICAoQ2RiLT5PcEZs YWdzICE9IFBYRV9PUEZMQUdTX05PVF9VU0VEKSkNCj4gKyAgew0KPiArICAgIENkYi0+U3RhdEZs YWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2Rl ICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0gZWxz ZSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfQ09NUExF VEU7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCj4gKyAg fQ0KPiArDQo+ICsgIGlmIChOaWMtPlN0YXRlID09IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRFX1NU T1BQRUQpIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9G QUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfTk9UX1NUQVJURUQ7 DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgRGIgPSAoUFhFX0RCX0dFVF9JTklU X0lORk8gKikoVUlOVE4pQ2RiLT5EQmFkZHI7DQo+ICsNCj4gKyAgRGItPk1lbW9yeVJlcXVpcmVk ICAgICAgICAgPSBNRU1PUllfUkVRVUlSRTsNCj4gKyAgRGItPkZyYW1lRGF0YUxlbiAgICAgICAg ICAgPSBQWEVfTUFYX1RYUlhfVU5JVF9FVEhFUjsNCj4gKyAgRGItPkxpbmtTcGVlZHNbMF0gICAg ICAgICAgPSAxMDsNCj4gKyAgRGItPkxpbmtTcGVlZHNbMV0gICAgICAgICAgPSAxMDA7DQo+ICsg IERiLT5MaW5rU3BlZWRzWzJdICAgICAgICAgID0gMTAwMDsNCj4gKyAgRGItPkxpbmtTcGVlZHNb M10gICAgICAgICAgPSAwOw0KPiArICBEYi0+TWVkaWFIZWFkZXJMZW4gICAgICAgICA9IFBYRV9N QUNfSEVBREVSX0xFTl9FVEhFUjsNCj4gKyAgRGItPkhXYWRkckxlbiAgICAgICAgICAgICAgPSBQ WEVfSFdBRERSX0xFTl9FVEhFUjsNCj4gKyAgRGItPk1DYXN0RmlsdGVyQ250ICAgICAgICAgPSBN QVhfTUNBU1RfQUREUkVTU19DTlQ7DQo+ICsgIERiLT5UeEJ1ZkNudCAgICAgICAgICAgICAgID0g TmljLT5QeGVJbml0LlR4QnVmQ250Ow0KPiArICBEYi0+VHhCdWZTaXplICAgICAgICAgICAgICA9 IE5pYy0+UHhlSW5pdC5UeEJ1ZlNpemU7DQo+ICsgIERiLT5SeEJ1ZkNudCAgICAgICAgICAgICAg ID0gTmljLT5QeGVJbml0LlJ4QnVmQ250Ow0KPiArICBEYi0+UnhCdWZTaXplICAgICAgICAgICAg ICA9IE5pYy0+UHhlSW5pdC5SeEJ1ZlNpemU7DQo+ICsgIERiLT5JRnR5cGUgICAgICAgICAgICAg ICAgID0gUFhFX0lGVFlQRV9FVEhFUk5FVDsNCj4gKyAgRGItPlN1cHBvcnRlZER1cGxleE1vZGVz ICAgPSBQWEVfRFVQTEVYX0RFRkFVTFQ7DQo+ICsgIERiLT5TdXBwb3J0ZWRMb29wQmFja01vZGVz ID0gTE9PUEJBQ0tfTk9STUFMOw0KPiArDQo+ICsgIENkYi0+U3RhdEZsYWdzIHw9IChQWEVfU1RB VEZMQUdTX0NBQkxFX0RFVEVDVF9TVVBQT1JURUQgfA0KPiArICAgICAgICAgICAgICAgICAgICAg UFhFX1NUQVRGTEFHU19HRVRfU1RBVFVTX05PX01FRElBX1NVUFBPUlRFRCk7DQo+ICsNCj4gKyAg aWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlHZXRJbml0SW5mbyAhPSBOVUxM KSB7DQo+ICsgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaUdl dEluaXRJbmZvIChDZGIsIE5pYyk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K PiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0K PiArICAgIH0NCj4gKyAgfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIGlz IHVzZWQgdG8gcmV0cmlldmUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhYm91dA0KPiArICB0 aGUgTklDIGJlaW5nIGNvbnRyb2xsZWQgYnkgdGhlIFVOREkuDQo+ICsNCj4gKyAgQHBhcmFtW2lu XSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAg QHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRy b2xsZXIgZGF0YS4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtVbmRpR2V0Q29uZmlnSW5mbyAo DQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsg ICkNCj4gK3sNCj4gKyAgUFhFX0RCX0dFVF9DT05GSUdfSU5GTyAgKkRiOw0KPiArICBFRklfU1RB VFVTICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wQ29kZSAhPSBQ WEVfT1BDT0RFX0dFVF9DT05GSUdfSU5GTykgfHwNCj4gKyAgICAgIChDZGItPlN0YXRDb2RlICE9 IFBYRV9TVEFUQ09ERV9JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+U3RhdEZsYWdzICE9 IFBYRV9TVEFURkxBR1NfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPklGbnVtID49IChn UHhlLT5JRmNudCB8IGdQeGUtPklGY250RXh0IDw8IDgpKSB8fA0KPiArICAgICAgKENkYi0+Q1BC c2l6ZSAhPSBQWEVfQ1BCU0laRV9OT1RfVVNFRCkgfHwNCj4gKyAgICAgIChDZGItPkNQQmFkZHIg IT0gUFhFX0NQQkFERFJfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5EQnNpemUgIT0gc2l6 ZW9mIChQWEVfREJfR0VUX0NPTkZJR19JTkZPKSkgfHwNCj4gKyAgICAgIChDZGItPk9wRmxhZ3Mg IT0gUFhFX09QRkxBR1NfTk9UX1VTRUQpKQ0KPiArICB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3Mg PSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0g UFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiArICAgIHJldHVybjsNCj4gKyAgfSBlbHNlIHsN Cj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9DT01QTEVURTsN Cj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KPiArICB9DQo+ ICsNCj4gKyAgaWYgKE5pYy0+U3RhdGUgPT0gUFhFX1NUQVRGTEFHU19HRVRfU1RBVEVfU1RPUFBF RCkgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxF RDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9OT1RfU1RBUlRFRDsNCj4g KyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBEYiA9IChQWEVfREJfR0VUX0NPTkZJR19J TkZPICopKFVJTlROKUNkYi0+REJhZGRyOw0KPiArDQo+ICsgIERiLT5wY2kuQnVzVHlwZSA9IFBY RV9CVVNUWVBFX1VTQjsNCj4gKw0KPiArICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNi RXRoVW5kaUdldENvbmZpZ0luZm8gIT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9IE5pYy0+VXNi RXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlHZXRDb25maWdJbmZvIChDZGIsIE5pYyk7DQo+ICsg ICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQ WEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArfQ0KPiAr DQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIHJlc2V0cyB0aGUgbmV0d29yayBhZGFwdGVyIGFu ZCBpbml0aWFsaXplcyBVTkRJIHVzaW5nDQo+ICsgIHRoZSBwYXJhbWV0ZXJzIHN1cHBsaWVkIGlu IHRoZSBDUEIuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgIENkYiAgQSBwb2ludGVyIHRvIHRo ZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSBOaWMgIEEg cG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ ICsqKi8NCj4gK1ZPSUQNCj4gK1VuZGlJbml0aWFsaXplICgNCj4gKyAgSU4gICAgICBQWEVfQ0RC ICAgKkNkYiwNCj4gKyAgSU4gT1VUICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsg IFBYRV9DUEJfSU5JVElBTElaRSAgKkNwYjsNCj4gKyAgUFhFX0RCX0lOSVRJQUxJWkUgICAqRGI7 DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgU3RhdHVzOw0KPiArDQo+ICsgIGlmICgoQ2RiLT5P cENvZGUgIT0gUFhFX09QQ09ERV9JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+U3RhdENv ZGUgIT0gUFhFX1NUQVRDT0RFX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0Rmxh Z3MgIT0gUFhFX1NUQVRGTEFHU19JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+SUZudW0g Pj0gKGdQeGUtPklGY250IHwgZ1B4ZS0+SUZjbnRFeHQgPDwgOCkpIHx8DQo+ICsgICAgICAoQ2Ri LT5DUEJzaXplICE9IHNpemVvZiAoUFhFX0NQQl9JTklUSUFMSVpFKSkpDQo+ICsgIHsNCj4gKyAg ICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAg Q2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ICsgICAgcmV0dXJu Ow0KPiArICB9IGVsc2Ugew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19D T01NQU5EX0NPTVBMRVRFOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+U3RhdGUgPT0gUFhF X1NUQVRGTEFHU19HRVRfU1RBVEVfU1RPUFBFRCkgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0g UFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBY RV9TVEFUQ09ERV9OT1RfU1RBUlRFRDsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiAr ICBpZiAoKENkYi0+T3BGbGFncyAhPSBQWEVfT1BGTEFHU19JTklUSUFMSVpFX0RFVEVDVF9DQUJM RSkgJiYNCj4gKyAgICAgIChDZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxBR1NfSU5JVElBTElaRV9E T19OT1RfREVURUNUX0NBQkxFKSkNCj4gKyAgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhF X1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9T VEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBp ZiAoTmljLT5TdGF0ZSA9PSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9JTklUSUFMSVpFRCkgew0K PiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4g KyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9BTFJFQURZX0lOSVRJQUxJWkVEOw0K PiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsgIENwYiA9IChQWEVfQ1BCX0lOSVRJQUxJ WkUgKikoVUlOVE4pQ2RiLT5DUEJhZGRyOw0KPiArICBEYiAgPSAoUFhFX0RCX0lOSVRJQUxJWkUg KikoVUlOVE4pQ2RiLT5EQmFkZHI7DQo+ICsNCj4gKyAgTmljLT5QeGVJbml0LkxpbmtTcGVlZCAg ICA9IENwYi0+TGlua1NwZWVkOw0KPiArICBOaWMtPlB4ZUluaXQuRHVwbGV4TW9kZSAgID0gQ3Bi LT5EdXBsZXhNb2RlOw0KPiArICBOaWMtPlB4ZUluaXQuTG9vcEJhY2tNb2RlID0gQ3BiLT5Mb29w QmFja01vZGU7DQo+ICsgIE5pYy0+UHhlSW5pdC5NZW1vcnlBZGRyICAgPSBDcGItPk1lbW9yeUFk ZHI7DQo+ICsgIE5pYy0+UHhlSW5pdC5NZW1vcnlMZW5ndGggPSBDcGItPk1lbW9yeUxlbmd0aDsN Cj4gKyAgTmljLT5QeGVJbml0LlR4QnVmQ250ICAgICA9IFRYX0JVRkZFUl9DT1VOVDsNCj4gKyAg TmljLT5QeGVJbml0LlR4QnVmU2l6ZSAgICA9IE5pYy0+TWF4U2VnbWVudFNpemU7DQo+ICsgIE5p Yy0+UHhlSW5pdC5SeEJ1ZkNudCAgICAgPSBSWF9CVUZGRVJfQ09VTlQ7DQo+ICsgIE5pYy0+UHhl SW5pdC5SeEJ1ZlNpemUgICAgPSBOaWMtPk1heFNlZ21lbnRTaXplOw0KPiArDQo+ICsgIENkYi0+ U3RhdENvZGUgPSBJbml0aWFsaXplIChDZGIsIE5pYyk7DQo+ICsNCj4gKyAgRGItPk1lbW9yeVVz ZWQgPSBNRU1PUllfUkVRVUlSRTsNCj4gKyAgRGItPlR4QnVmQ250ICAgPSBOaWMtPlB4ZUluaXQu VHhCdWZDbnQ7DQo+ICsgIERiLT5UeEJ1ZlNpemUgID0gTmljLT5QeGVJbml0LlR4QnVmU2l6ZTsN Cj4gKyAgRGItPlJ4QnVmQ250ICAgPSBOaWMtPlB4ZUluaXQuUnhCdWZDbnQ7DQo+ICsgIERiLT5S eEJ1ZlNpemUgID0gTmljLT5QeGVJbml0LlJ4QnVmU2l6ZTsNCj4gKw0KPiArICBOaWMtPlJ4Rmls dGVyICAgID0gUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfQlJPQURDQVNUOw0KPiArICBOaWMt PkNhblRyYW5zbWl0ID0gRkFMU0U7DQo+ICsNCj4gKyAgaWYgKENkYi0+T3BGbGFncyA9PSBQWEVf T1BGTEFHU19JTklUSUFMSVpFX0RFVEVDVF9DQUJMRSkgew0KPiArICAgIGlmICgoTmljLT5SZXF1 ZXN0LlJlcXVlc3QgPT0gVVNCX0NEQ19ORVRXT1JLX0NPTk5FQ1RJT04pICYmIChOaWMtDQo+ID5S ZXF1ZXN0LlZhbHVlID09IE5FVFdPUktfRElTQ09OTkVDVCkpIHsNCj4gKyAgICAgIE5pYy0+Q2Fi bGVEZXRlY3QgPSAwOw0KPiArICAgIH0gZWxzZSBpZiAoKE5pYy0+UmVxdWVzdC5SZXF1ZXN0ID09 IFVTQl9DRENfTkVUV09SS19DT05ORUNUSU9OKSAmJg0KPiAoTmljLT5SZXF1ZXN0LlZhbHVlID09 IE5FVFdPUktfQ09OTkVDVEVEKSkgew0KPiArICAgICAgTmljLT5DYWJsZURldGVjdCA9IDE7DQo+ ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgKE5pYy0+Q2FibGVEZXRlY3QgPT0gMCkgew0KPiArICAg ICAgQ2RiLT5TdGF0RmxhZ3MgfD0gUFhFX1NUQVRGTEFHU19JTklUSUFMSVpFRF9OT19NRURJQTsN Cj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoQ2RiLT5TdGF0Q29kZSAhPSBQWEVfU1RB VENPREVfU1VDQ0VTUykgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19D T01NQU5EX0ZBSUxFRDsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBOaWMtPlN0YXRlID0gUFhFX1NU QVRGTEFHU19HRVRfU1RBVEVfSU5JVElBTElaRUQ7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmlj LT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaUluaXRpYWxpemUgIT0gTlVMTCkgew0KPiAr ICAgIFN0YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlJbml0aWFsaXpl IChDZGIsIE5pYyk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAg Q2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIH0N Cj4gKyAgfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgSW5pdGlhbGl6ZSBOZXR3b3JrIGludGVy ZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgIENkYiAgICAg QSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtp biwgb3V0XSBOaWMgICAgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJv bGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgU3RhdHVzICBBIHZhbHVlIG9mIFB4ZSBzdGF0 Y29kZS4NCj4gKw0KPiArKiovDQo+ICtVSU5UMTYNCj4gK0luaXRpYWxpemUgKA0KPiArICBJTiAg ICAgIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiBPVVQgIE5JQ19EQVRBICAqTmljDQo+ICsgICkN Cj4gK3sNCj4gKyAgVUlOVE4gICAgICAgU3RhdHVzOw0KPiArICBVSU5UMzIgICAgICBJbmRleDsN Cj4gKyAgRUZJX1NUQVRVUyAgRWZpU3RhdHVzOw0KPiArDQo+ICsgIFN0YXR1cyA9IE1hcEl0ICgN Cj4gKyAgICAgICAgICAgICBOaWMsDQo+ICsgICAgICAgICAgICAgTmljLT5QeGVJbml0Lk1lbW9y eUFkZHIsDQo+ICsgICAgICAgICAgICAgTmljLT5QeGVJbml0Lk1lbW9yeUxlbmd0aCwNCj4gKyAg ICAgICAgICAgICBUT19BTkRfRlJPTV9ERVZJQ0UsDQo+ICsgICAgICAgICAgICAgKFVJTlQ2NCko VUlOVE4pJk5pYy0+TWFwcGVkQWRkcg0KPiArICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgaWYg KFN0YXR1cyAhPSAwKSB7DQo+ICsgICAgcmV0dXJuIChVSU5UMTYpU3RhdHVzOw0KPiArICB9DQo+ ICsNCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgUFhFX0hXQUREUl9MRU5fRVRIRVI7IElu ZGV4KyspIHsNCj4gKyAgICBOaWMtPlBlcm1Ob2RlQWRkcmVzc1tJbmRleF0gPSBOaWMtPk1hY0Fk ZHIuQWRkcltJbmRleF07DQo+ICsgIH0NCj4gKw0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXgg PCBQWEVfSFdBRERSX0xFTl9FVEhFUjsgSW5kZXgrKykgew0KPiArICAgIE5pYy0+Q3VycmVudE5v ZGVBZGRyZXNzW0luZGV4XSA9IE5pYy0+UGVybU5vZGVBZGRyZXNzW0luZGV4XTsNCj4gKyAgfQ0K PiArDQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFBYRV9IV0FERFJfTEVOX0VUSEVSOyBJ bmRleCsrKSB7DQo+ICsgICAgTmljLT5Ccm9hZGNhc3ROb2RlQWRkcmVzc1tJbmRleF0gPSAweEZG Ow0KPiArICB9DQo+ICsNCj4gKyAgZm9yIChJbmRleCA9IFBYRV9IV0FERFJfTEVOX0VUSEVSOyBJ bmRleCA8IFBYRV9NQUNfTEVOR1RIOyBJbmRleCsrKQ0KPiB7DQo+ICsgICAgTmljLT5DdXJyZW50 Tm9kZUFkZHJlc3NbSW5kZXhdICAgPSAwOw0KPiArICAgIE5pYy0+UGVybU5vZGVBZGRyZXNzW0lu ZGV4XSAgICAgID0gMDsNCj4gKyAgICBOaWMtPkJyb2FkY2FzdE5vZGVBZGRyZXNzW0luZGV4XSA9 IDA7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0aEluaXRpYWxpemUg IT0gTlVMTCkgew0KPiArICAgIEVmaVN0YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JFdGhJbml0aWFs aXplIChDZGIsIE5pYyk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoRWZpU3RhdHVzKSkgew0KPiAr ICAgICAgcmV0dXJuIFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgfQ0KPiAr ICB9DQo+ICsNCj4gKyAgcmV0dXJuIChVSU5UMTYpU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioN Cj4gKyAgVGhpcyBjb21tYW5kIHJlc2V0cyB0aGUgbmV0d29yayBhZGFwdGVyIGFuZCByZWluaXRp YWxpemVzIHRoZSBVTkRJDQo+ICsgIHdpdGggdGhlIHNhbWUgcGFyYW1ldGVycyBwcm92aWRlZCBp biB0aGUgSW5pdGlhbGl6ZSBjb21tYW5kLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBw b2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0g IE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEu DQo+ICsNCj4gKyoqLw0KPiArVk9JRA0KPiArVW5kaVJlc2V0ICgNCj4gKyAgSU4gIFBYRV9DREIg ICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBFRklf U1RBVFVTICBTdGF0dXM7DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wQ29kZSAhPSBQWEVfT1BDT0RF X1JFU0VUKSB8fA0KPiArICAgICAgKENkYi0+U3RhdENvZGUgIT0gUFhFX1NUQVRDT0RFX0lOSVRJ QUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0RmxhZ3MgIT0gUFhFX1NUQVRGTEFHU19JTklU SUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+SUZudW0gPj0gKGdQeGUtPklGY250IHwgZ1B4ZS0+ SUZjbnRFeHQgPDwgOCkpIHx8DQo+ICsgICAgICAoQ2RiLT5DUEJzaXplICE9IFBYRV9DUEJTSVpF X05PVF9VU0VEKSB8fA0KPiArICAgICAgKENkYi0+Q1BCYWRkciAhPSBQWEVfQ1BCQUREUl9OT1Rf VVNFRCkgfHwNCj4gKyAgICAgIChDZGItPkRCc2l6ZSAhPSBQWEVfREJTSVpFX05PVF9VU0VEKSB8 fA0KPiArICAgICAgKENkYi0+REJhZGRyICE9IFBYRV9EQkFERFJfTk9UX1VTRUQpKQ0KPiArICB7 DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0K PiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiArICAg IHJldHVybjsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFU RkxBR1NfQ09NTUFORF9DT01QTEVURTsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFU Q09ERV9TVUNDRVNTOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+U3RhdGUgIT0gUFhFX1NU QVRGTEFHU19HRVRfU1RBVEVfSU5JVElBTElaRUQpIHsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9 IFBYRV9TVEFUQ09ERV9OT1RfSU5JVElBTElaRUQ7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQ WEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiAr DQo+ICsgIGlmICgoQ2RiLT5PcEZsYWdzICE9IFBYRV9PUEZMQUdTX05PVF9VU0VEKSAmJg0KPiAr ICAgICAgKENkYi0+T3BGbGFncyAhPSBQWEVfT1BGTEFHU19SRVNFVF9ESVNBQkxFX0lOVEVSUlVQ VFMpICYmDQo+ICsgICAgICAoQ2RiLT5PcEZsYWdzICE9IFBYRV9PUEZMQUdTX1JFU0VUX0RJU0FC TEVfRklMVEVSUykpDQo+ICsgIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxB R1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVf SU5WQUxJRF9DREI7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKChDZGIt Pk9wRmxhZ3MgJiBQWEVfT1BGTEFHU19SRVNFVF9ESVNBQkxFX0ZJTFRFUlMpID09IDApIHsNCj4g KyAgICBOaWMtPlJ4RmlsdGVyID0gUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfQlJPQURDQVNU Ow0KPiArICB9DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wRmxhZ3MgJiBQWEVfT1BGTEFHU19SRVNF VF9ESVNBQkxFX0lOVEVSUlVQVFMpICE9IDApIHsNCj4gKyAgICBOaWMtPkludGVycnVwT3BGbGFn ID0gMDsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JF dGhVbmRpUmVzZXQgIT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JF dGhVbmRpLlVzYkV0aFVuZGlSZXNldCAoQ2RiLCBOaWMpOw0KPiArICAgIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4gKyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01N QU5EX0ZBSUxFRDsNCj4gKyAgICB9DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRo ZSBTaHV0ZG93biBjb21tYW5kIHJlc2V0cyB0aGUgbmV0d29yayBhZGFwdGVyIGFuZCBsZWF2ZXMg aXQgaW4gYQ0KPiArICBzYWZlIHN0YXRlIGZvciBhbm90aGVyIGRyaXZlciB0byBpbml0aWFsaXpl Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICAgICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFu ZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW4sIG91dF0gTmljICBBIHBvaW50ZXIg dG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArKiovDQo+ ICtWT0lEDQo+ICtVbmRpU2h1dGRvd24gKA0KPiArICBJTiAgICAgIFBYRV9DREIgICAqQ2RiLA0K PiArICBJTiBPVVQgIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRV UyAgU3RhdHVzOw0KPiArDQo+ICsgIGlmICgoQ2RiLT5PcENvZGUgIT0gUFhFX09QQ09ERV9TSFVU RE9XTikgfHwNCj4gKyAgICAgIChDZGItPlN0YXRDb2RlICE9IFBYRV9TVEFUQ09ERV9JTklUSUFM SVpFKSB8fA0KPiArICAgICAgKENkYi0+U3RhdEZsYWdzICE9IFBYRV9TVEFURkxBR1NfSU5JVElB TElaRSkgfHwNCj4gKyAgICAgIChDZGItPklGbnVtID49IChnUHhlLT5JRmNudCB8IGdQeGUtPklG Y250RXh0IDw8IDgpKSB8fA0KPiArICAgICAgKENkYi0+Q1BCc2l6ZSAhPSBQWEVfQ1BCU0laRV9O T1RfVVNFRCkgfHwNCj4gKyAgICAgIChDZGItPkNQQmFkZHIgIT0gUFhFX0NQQkFERFJfTk9UX1VT RUQpIHx8DQo+ICsgICAgICAoQ2RiLT5EQnNpemUgIT0gUFhFX0RCU0laRV9OT1RfVVNFRCkgfHwN Cj4gKyAgICAgIChDZGItPkRCYWRkciAhPSBQWEVfREJBRERSX05PVF9VU0VEKSB8fA0KPiArICAg ICAgKENkYi0+T3BGbGFncyAhPSBQWEVfT1BGTEFHU19OT1RfVVNFRCkpDQo+ICsgIHsNCj4gKyAg ICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAg Q2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ICsgICAgcmV0dXJu Ow0KPiArICB9IGVsc2Ugew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19D T01NQU5EX0NPTVBMRVRFOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX1NV Q0NFU1M7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5TdGF0ZSAhPSBQWEVfU1RBVEZMQUdT X0dFVF9TVEFURV9JTklUSUFMSVpFRCkgew0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NU QVRDT0RFX05PVF9JTklUSUFMSVpFRDsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFU RkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAg TmljLT5DYW5UcmFuc21pdCA9IEZBTFNFOw0KPiArDQo+ICsgIE5pYy0+U3RhdGUgPSBQWEVfU1RB VEZMQUdTX0dFVF9TVEFURV9TVEFSVEVEOw0KPiArDQo+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNi RXRoVW5kaS5Vc2JFdGhVbmRpU2h1dGRvd24gIT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9IE5p Yy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlTaHV0ZG93biAoQ2RiLCBOaWMpOw0KPiAr ICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIENkYi0+U3RhdENvZGUgID0g UFhFX1NUQVRDT0RFX05PVF9JTklUSUFMSVpFRDsNCj4gKyAgICAgIENkYi0+U3RhdEZsYWdzID0g UFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICB9DQo+ICsgIH0NCj4gK30NCj4g Kw0KPiArLyoqDQo+ICsgIFRoZSBJbnRlcnJ1cHQgRW5hYmxlcyBjb21tYW5kIGNhbiBiZSB1c2Vk IHRvIHJlYWQgYW5kL29yIGNoYW5nZQ0KPiArICB0aGUgY3VycmVudCBleHRlcm5hbCBpbnRlcnJ1 cHQgZW5hYmxlIHNldHRpbmdzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVy IHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAg QSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsN Cj4gKyoqLw0KPiArVk9JRA0KPiArVW5kaUludGVycnVwdEVuYWJsZSAoDQo+ICsgIElOICBQWEVf Q0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAg RUZJX1NUQVRVUyAgU3RhdHVzOw0KPiArDQo+ICsgIENkYi0+U3RhdENvZGUgPSBQWEVfU1RBVENP REVfVU5TVVBQT1JURUQ7DQo+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhV bmRpSW50ZXJydXB0RW5hYmxlICE9IE5VTEwpIHsNCj4gKyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0 aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpSW50ZXJydXB0RW5hYmxlIChDZGIsIE5pYyk7DQo+ICsg ICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQ WEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAgICBD ZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9DT01QTEVURTsNCj4gKyAgICAg IENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ICsgICAgfQ0KPiArICB9 DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byByZWFkIGFu ZCBjaGFuZ2UgcmVjZWl2ZSBmaWx0ZXJzIGFuZCwNCj4gKyAgaWYgc3VwcG9ydGVkLCByZWFkIGFu ZCBjaGFuZ2UgdGhlIG11bHRpY2FzdCBNQUMgYWRkcmVzcyBmaWx0ZXIgbGlzdC4NCj4gKw0KPiAr ICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJs b2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRl cmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1VuZGlSZWNl aXZlRmlsdGVyICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEg ICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBVSU5UMTYgICAgICAgICAgICAgICAgICBOZXdGaWx0 ZXI7DQo+ICsgIFBYRV9EQl9SRUNFSVZFX0ZJTFRFUlMgICpEYjsNCj4gKyAgRUZJX1NUQVRVUyAg ICAgICAgICAgICAgU3RhdHVzOw0KPiArDQo+ICsgIGlmICgoQ2RiLT5PcENvZGUgIT0gUFhFX09Q Q09ERV9SRUNFSVZFX0ZJTFRFUlMpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQWEVf U1RBVENPREVfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQWEVf U1RBVEZMQUdTX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5JRm51bSA+PSAoZ1B4ZS0+ SUZjbnQgfCBnUHhlLT5JRmNudEV4dCA8PCA4KSkpDQo+ICsgIHsNCj4gKyAgICBDZGItPlN0YXRG bGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29k ZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9IGVs c2Ugew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0NPTVBM RVRFOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ICsg IH0NCj4gKw0KPiArICBpZiAoTmljLT5TdGF0ZSAhPSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9J TklUSUFMSVpFRCkgew0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX05PVF9J TklUSUFMSVpFRDsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFO RF9GQUlMRUQ7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgTmV3RmlsdGVyID0g KFVJTlQxNikoQ2RiLT5PcEZsYWdzICYgMHgxRik7DQo+ICsNCj4gKyAgc3dpdGNoIChDZGItPk9w RmxhZ3MgJiBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9PUE1BU0spIHsNCj4gKyAgICBjYXNl IFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX1JFQUQ6DQo+ICsgICAgICBpZiAoQ2RiLT5DUEJz aXplICE9IFBYRV9DUEJTSVpFX05PVF9VU0VEKSB7DQo+ICsgICAgICAgIENkYi0+U3RhdEZsYWdz ID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICAgICAgQ2RiLT5TdGF0Q29k ZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAg IGlmICgoTmV3RmlsdGVyICYgUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfUkVTRVRfTUNBU1Rf TElTVCkgPT0gMCkNCj4gew0KPiArICAgICAgICBpZiAoKENkYi0+REJzaXplICE9IDApKSB7DQo+ ICsgICAgICAgICAgRGIgPSAoUFhFX0RCX1JFQ0VJVkVfRklMVEVSUyAqKShVSU5UTilDZGItPkRC YWRkcjsNCj4gKyAgICAgICAgICBDb3B5TWVtIChEYiwgJk5pYy0+TWNhc3RMaXN0LCBOaWMtPk1j YXN0Q291bnQpOw0KPiArICAgICAgICB9DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIGJyZWFr Ow0KPiArDQo+ICsgICAgY2FzZSBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9FTkFCTEU6DQo+ ICsgICAgICBpZiAoTmV3RmlsdGVyID09IDApIHsNCj4gKyAgICAgICAgQ2RiLT5TdGF0RmxhZ3Mg PSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgICAgfQ0KPiArDQo+ICsgICAg ICBpZiAoQ2RiLT5DUEJzaXplICE9IDApIHsNCj4gKyAgICAgICAgaWYgKCgoTmV3RmlsdGVyICYg UFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfRklMVEVSRURfTVVMVElDQVNUKQ0KPiA9PSAwKSB8 fA0KPiArICAgICAgICAgICAgKChOZXdGaWx0ZXIgJiBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRF Ul9SRVNFVF9NQ0FTVF9MSVNUKSAhPQ0KPiAwKSB8fA0KPiArICAgICAgICAgICAgKChOZXdGaWx0 ZXIgJiBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9BTExfTVVMVElDQVNUKSAhPSAwKQ0KPiB8 fA0KPiArICAgICAgICAgICAgKChDZGItPkNQQnNpemUgJSBzaXplb2YgKFBYRV9NQUNfQUREUikp ICE9IDApKQ0KPiArICAgICAgICB7DQo+ICsgICAgICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVf U1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgICAgICB9DQo+ICsgICAgICB9DQo+ICsN Cj4gKyAgICAgIGlmICgoQ2RiLT5PcEZsYWdzICYNCj4gUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxU RVJfRklMVEVSRURfTVVMVElDQVNUKSAhPSAwKSB7DQo+ICsgICAgICAgIGlmICgoKENkYi0+T3BG bGFncyAmDQo+IFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX1JFU0VUX01DQVNUX0xJU1QpICE9 IDApIHx8DQo+ICsgICAgICAgICAgICAoKENkYi0+T3BGbGFncyAmIFBYRV9PUEZMQUdTX1JFQ0VJ VkVfRklMVEVSX0FMTF9NVUxUSUNBU1QpICE9DQo+IDApKQ0KPiArICAgICAgICB7DQo+ICsgICAg ICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiAr ICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgaWYgKChDZGItPkNQQnNpemUgPT0gMCkpIHsNCj4g KyAgICAgICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7 DQo+ICsgICAgICAgIH0NCj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAgQ2RiLT5TdGF0Q29kZSA9 IFNldEZpbHRlciAoTmljLCBOZXdGaWx0ZXIsIENkYi0+Q1BCYWRkciwgQ2RiLT5DUEJzaXplKTsN Cj4gKyAgICAgIGJyZWFrOw0KPiArDQo+ICsgICAgY2FzZSBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJ TFRFUl9ESVNBQkxFOg0KPiArICAgICAgaWYgKENkYi0+Q1BCc2l6ZSAhPSBQWEVfQ1BCU0laRV9O T1RfVVNFRCkgew0KPiArICAgICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09N TUFORF9GQUlMRUQ7DQo+ICsgICAgICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lO VkFMSURfQ0RCOw0KPiArICAgICAgfQ0KPiArDQo+ICsgICAgICBicmVhazsNCj4gKw0KPiArICAg IGRlZmF1bHQ6DQo+ICsgICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFO RF9GQUlMRUQ7DQo+ICsgICAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElE X0NEQjsNCj4gKyAgfQ0KPiArDQo+ICsgIENkYi0+U3RhdEZsYWdzID0gKFBYRV9TVEFURkxBR1Mp KENkYi0+U3RhdEZsYWdzIHwgTmljLT5SeEZpbHRlcik7DQo+ICsNCj4gKyAgaWYgKE5pYy0+VXNi RXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlSZWNlaXZlRmlsdGVyICE9IE5VTEwpIHsNCj4gKyAg ICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpUmVjZWl2ZUZpbHRl ciAoQ2RiLCBOaWMpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAg IENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICB9 DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFNldCBQWEUgcmVjZWl2ZSBmaWx0ZXIu DQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgTmljICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBOZXR3 b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsgIEBwYXJhbVtpbl0gIFNldEZpbHRl ciAgIFBYRSByZWNlaXZlIGZpbHRlcg0KPiArICBAcGFyYW1baW5dICBDcGJBZGRyICAgICBDb21t YW5kIFBhcmFtZXRlciBCbG9jayBBZGRyZXNzDQo+ICsgIEBwYXJhbVtpbl0gIENwYlNpemUgICAg IENvbW1hbmQgUGFyYW1ldGVyIEJsb2NrIFNpemUNCj4gKw0KPiArKiovDQo+ICtVSU5UMTYNCj4g K1NldEZpbHRlciAoDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYywNCj4gKyAgSU4gIFVJTlQxNiAg ICBTZXRGaWx0ZXIsDQo+ICsgIElOICBVSU5UNjQgICAgQ3BiQWRkciwNCj4gKyAgSU4gIFVJTlQz MiAgICBDcGJTaXplDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAg ICAgICBTdGF0dXM7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgKk1jYXN0TGlz dDsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICBDb3VudDsNCj4gKyAgVUlOVDgg ICAgICAgICAgICAgICAgICAgICAgICBJbmRleDE7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAg ICAgICAgICAgSW5kZXgyOw0KPiArICBQWEVfQ1BCX1JFQ0VJVkVfRklMVEVSUyAgICAgICpDcGI7 DQo+ICsgIFVTQl9FVEhFUk5FVF9GVU5fREVTQ1JJUFRPUiAgVXNiRXRoRnVuRGVzY3JpcHRvcjsN Cj4gKw0KPiArICBDb3VudCA9IDA7DQo+ICsgIENwYiAgID0gKFBYRV9DUEJfUkVDRUlWRV9GSUxU RVJTICopKFVJTlROKUNwYkFkZHI7DQo+ICsNCj4gKyAgLy8gVGhlIENwYiBjb3VsZCBiZSBOVUxM LihyZWY6UFhFX0NQQkFERFJfTk9UX1VTRUQpDQo+ICsgIE5pYy0+UnhGaWx0ZXIgPSAoVUlOVDgp U2V0RmlsdGVyOw0KPiArDQo+ICsgIGlmICgoKFNldEZpbHRlciAmIFBYRV9PUEZMQUdTX1JFQ0VJ VkVfRklMVEVSX0ZJTFRFUkVEX01VTFRJQ0FTVCkgIT0gMCkNCj4gfHwgKENwYiAhPSBOVUxMKSkg ew0KPiArICAgIGlmIChDcGIgIT0gTlVMTCkgew0KPiArICAgICAgTmljLT5NY2FzdENvdW50ID0g KFVJTlQ4KShDcGJTaXplIC8gUFhFX01BQ19MRU5HVEgpOw0KPiArICAgICAgQ29weU1lbSAoJk5p Yy0+TWNhc3RMaXN0LCBDcGIsIE5pYy0+TWNhc3RDb3VudCk7DQo+ICsgICAgfQ0KPiArDQo+ICsg ICAgTmljLT5Vc2JFdGgtPlVzYkV0aEZ1bkRlc2NyaXB0b3IgKE5pYy0+VXNiRXRoLCAmVXNiRXRo RnVuRGVzY3JpcHRvcik7DQo+ICsgICAgaWYgKChVc2JFdGhGdW5EZXNjcmlwdG9yLk51bWJlck1j RmlsdGVycyA8PCAxKSA9PSAwKSB7DQo+ICsgICAgICBOaWMtPlJ4RmlsdGVyIHw9IFBYRV9PUEZM QUdTX1JFQ0VJVkVfRklMVEVSX0FMTF9NVUxUSUNBU1Q7DQo+ICsgICAgICBOaWMtPlVzYkV0aC0+ U2V0VXNiRXRoUGFja2V0RmlsdGVyIChOaWMtPlVzYkV0aCwgTmljLT5SeEZpbHRlcik7DQo+ICsg ICAgfSBlbHNlIHsNCj4gKyAgICAgIFN0YXR1cyA9IGdCUy0+QWxsb2NhdGVQb29sIChFZmlCb290 U2VydmljZXNEYXRhLCBOaWMtPk1jYXN0Q291bnQgKiA2LA0KPiAoVk9JRCAqKikmTWNhc3RMaXN0 KTsNCj4gKyAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgICAgcmV0dXJu IFBYRV9TVEFUQ09ERV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgICAgIH0NCj4gKw0KPiArICAg ICAgaWYgKENwYiAhPSBOVUxMKSB7DQo+ICsgICAgICAgIGZvciAoSW5kZXgxID0gMDsgSW5kZXgx IDwgTmljLT5NY2FzdENvdW50OyBJbmRleDErKykgew0KPiArICAgICAgICAgIGZvciAoSW5kZXgy ID0gMDsgSW5kZXgyIDwgNjsgSW5kZXgyKyspIHsNCj4gKyAgICAgICAgICAgIE1jYXN0TGlzdFtD b3VudCsrXSA9IENwYi0+TUNhc3RMaXN0W0luZGV4MV1bSW5kZXgyXTsNCj4gKyAgICAgICAgICB9 DQo+ICsgICAgICAgIH0NCj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAgTmljLT5SeEZpbHRlciB8 PSBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9GSUxURVJFRF9NVUxUSUNBU1Q7DQo+ICsgICAg ICBpZiAoQ3BiICE9IE5VTEwpIHsNCj4gKyAgICAgICAgTmljLT5Vc2JFdGgtPlNldFVzYkV0aE1j YXN0RmlsdGVyIChOaWMtPlVzYkV0aCwgTmljLT5NY2FzdENvdW50LA0KPiBNY2FzdExpc3QpOw0K PiArICAgICAgfQ0KPiArDQo+ICsgICAgICBOaWMtPlVzYkV0aC0+U2V0VXNiRXRoUGFja2V0Rmls dGVyIChOaWMtPlVzYkV0aCwgTmljLT5SeEZpbHRlcik7DQo+ICsgICAgICBGcmVlUG9vbCAoTWNh c3RMaXN0KTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gUFhFX1NUQVRDT0RF X1NVQ0NFU1M7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0 byBnZXQgY3VycmVudCBzdGF0aW9uIGFuZCBicm9hZGNhc3QgTUFDIGFkZHJlc3Nlcw0KPiArICBh bmQsIGlmIHN1cHBvcnRlZCwgdG8gY2hhbmdlIHRoZSBjdXJyZW50IHN0YXRpb24gTUFDIGFkZHJl c3MuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQg ZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhl IE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArKiovDQo+ICtWT0lE DQo+ICtVbmRpU3RhdGlvbkFkZHJlc3MgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsg IElOICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIFBYRV9DUEJfU1RBVElPTl9B RERSRVNTICAqQ3BiOw0KPiArICBQWEVfREJfU1RBVElPTl9BRERSRVNTICAgKkRiOw0KPiArICBV SU5UMTYgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAg ICAgICBTdGF0dXM7DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wQ29kZSAhPSBQWEVfT1BDT0RFX1NU QVRJT05fQUREUkVTUykgfHwNCj4gKyAgICAgIChDZGItPlN0YXRDb2RlICE9IFBYRV9TVEFUQ09E RV9JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+U3RhdEZsYWdzICE9IFBYRV9TVEFURkxB R1NfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPklGbnVtID49IChnUHhlLT5JRmNudCB8 IGdQeGUtPklGY250RXh0IDw8IDgpKSB8fA0KPiArICAgICAgKENkYi0+REJzaXplICE9IHNpemVv ZiAoUFhFX0RCX1NUQVRJT05fQUREUkVTUykpKQ0KPiArICB7DQo+ICsgICAgQ2RiLT5TdGF0Rmxh Z3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUg ID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiArICAgIHJldHVybjsNCj4gKyAgfSBlbHNl IHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9DT01QTEVU RTsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KPiArICB9 DQo+ICsNCj4gKyAgaWYgKE5pYy0+U3RhdGUgIT0gUFhFX1NUQVRGTEFHU19HRVRfU1RBVEVfSU5J VElBTElaRUQpIHsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9OT1RfSU5J VElBTElaRUQ7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRf RkFJTEVEOw0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChDZGItPk9wRmxh Z3MgPT0gUFhFX09QRkxBR1NfU1RBVElPTl9BRERSRVNTX1JFU0VUKSB7DQo+ICsgICAgaWYgKENv bXBhcmVNZW0gKCZOaWMtPkN1cnJlbnROb2RlQWRkcmVzc1swXSwgJk5pYy0NCj4gPlBlcm1Ob2Rl QWRkcmVzc1swXSwgUFhFX01BQ19MRU5HVEgpICE9IDApIHsNCj4gKyAgICAgIGZvciAoSW5kZXgg PSAwOyBJbmRleCA8IFBYRV9NQUNfTEVOR1RIOyBJbmRleCsrKSB7DQo+ICsgICAgICAgIE5pYy0+ Q3VycmVudE5vZGVBZGRyZXNzW0luZGV4XSA9IE5pYy0+UGVybU5vZGVBZGRyZXNzW0luZGV4XTsN Cj4gKyAgICAgIH0NCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoQ2RiLT5DUEJhZGRy ICE9IDApIHsNCj4gKyAgICBDcGIgPSAoUFhFX0NQQl9TVEFUSU9OX0FERFJFU1MgKikoVUlOVE4p Q2RiLT5DUEJhZGRyOw0KPiArICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFBYRV9NQUNfTEVO R1RIOyBJbmRleCsrKSB7DQo+ICsgICAgICBOaWMtPkN1cnJlbnROb2RlQWRkcmVzc1tJbmRleF0g PSBDcGItPlN0YXRpb25BZGRyW0luZGV4XTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBp ZiAoQ2RiLT5EQmFkZHIgIT0gMCkgew0KPiArICAgIERiID0gKFBYRV9EQl9TVEFUSU9OX0FERFJF U1MgKikoVUlOVE4pQ2RiLT5EQmFkZHI7DQo+ICsgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwg UFhFX01BQ19MRU5HVEg7IEluZGV4KyspIHsNCj4gKyAgICAgIERiLT5TdGF0aW9uQWRkcltJbmRl eF0gICA9IE5pYy0+Q3VycmVudE5vZGVBZGRyZXNzW0luZGV4XTsNCj4gKyAgICAgIERiLT5Ccm9h ZGNhc3RBZGRyW0luZGV4XSA9IE5pYy0+QnJvYWRjYXN0Tm9kZUFkZHJlc3NbSW5kZXhdOw0KPiAr ICAgICAgRGItPlBlcm1hbmVudEFkZHJbSW5kZXhdID0gTmljLT5QZXJtTm9kZUFkZHJlc3NbSW5k ZXhdOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNiRXRo VW5kaS5Vc2JFdGhVbmRpU3RhdGlvbkFkZHJlc3MgIT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9 IE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlTdGF0aW9uQWRkcmVzcyAoQ2RiLCBO aWMpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIENkYi0+U3Rh dEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICB9DQo+ICsgIH0N Cj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIHJlYWQgYW5k IGNsZWFyIHRoZSBOSUMgdHJhZmZpYyBzdGF0aXN0aWNzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0g IENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBw YXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9s bGVyIGRhdGEuDQo+ICsNCj4gKyoqLw0KPiArVk9JRA0KPiArVW5kaVN0YXRpc3RpY3MgKA0KPiAr ICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ ICt7DQo+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gKw0KPiArICBpZiAoKENkYi0+T3BDb2Rl ICE9IFBYRV9PUENPREVfU1RBVElTVElDUykgfHwNCj4gKyAgICAgIChDZGItPlN0YXRDb2RlICE9 IFBYRV9TVEFUQ09ERV9JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+U3RhdEZsYWdzICE9 IFBYRV9TVEFURkxBR1NfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPklGbnVtID49IChn UHhlLT5JRmNudCB8IGdQeGUtPklGY250RXh0IDw8IDgpKSB8fA0KPiArICAgICAgKENkYi0+Q1BC c2l6ZSAhPSBQWEVfQ1BCU0laRV9OT1RfVVNFRCkgfHwNCj4gKyAgICAgIChDZGItPkNQQmFkZHIg IT0gUFhFX0NQQkFERFJfTk9UX1VTRUQpKQ0KPiArICB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3Mg PSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0g UFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiArICAgIHJldHVybjsNCj4gKyAgfSBlbHNlIHsN Cj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9DT01QTEVURTsN Cj4gKyAgfQ0KPiArDQo+ICsgIGlmIChOaWMtPlN0YXRlICE9IFBYRV9TVEFURkxBR1NfR0VUX1NU QVRFX0lOSVRJQUxJWkVEKSB7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVf Tk9UX0lOSVRJQUxJWkVEOw0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19D T01NQU5EX0ZBSUxFRDsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoKENk Yi0+T3BGbGFncyAhPSBQWEVfT1BGTEFHU19TVEFUSVNUSUNTX1JFU0VUKSAmJg0KPiArICAgICAg KENkYi0+T3BGbGFncyAhPSBQWEVfT1BGTEFHU19TVEFUSVNUSUNTX1JFQUQpKQ0KPiArICB7DQo+ ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiAr ICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiArICAgIHJl dHVybjsNCj4gKyAgfQ0KPiArDQo+ICsgIENkYi0+U3RhdENvZGUgPSBTdGF0aXN0aWNzIChOaWMs IENkYi0+REJhZGRyLCBDZGItPkRCc2l6ZSk7DQo+ICsNCj4gKyAgaWYgKE5pYy0+VXNiRXRoLT5V c2JFdGhVbmRpLlVzYkV0aFVuZGlTdGF0aXN0aWNzICE9IE5VTEwpIHsNCj4gKyAgICBTdGF0dXMg PSBOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpU3RhdGlzdGljcyAoQ2RiLCBOaWMp Ow0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIENkYi0+U3RhdEZs YWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICB9DQo+ICsgIH0NCj4g K30NCj4gKw0KPiArLyoqDQo+ICsgIFJldHVybiBkYXRhIGZvciBEQiBkYXRhLg0KPiArDQo+ICsg IEBwYXJhbVtpbl0gIE5pYyAgICAgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2Ug Y29udHJvbGxlciBkYXRhLg0KPiArICBAcGFyYW1baW5dICBEYkFkZHIgICBEYXRhIEJsb2NrIEFk ZHJlc3MuDQo+ICsgIEBwYXJhbVtpbl0gIERiU2l6ZSAgIERhdGEgQmxvY2sgU2l6ZS4NCj4gKw0K PiArKiovDQo+ICtVSU5UMTYNCj4gK1N0YXRpc3RpY3MgKA0KPiArICBJTiBOSUNfREFUQSAgKk5p YywNCj4gKyAgSU4gVUlOVDY0ICAgIERiQWRkciwNCj4gKyAgSU4gVUlOVDE2ICAgIERiU2l6ZQ0K PiArICApDQo+ICt7DQo+ICsgIFBYRV9EQl9TVEFUSVNUSUNTICAqRGJTdGF0aXN0aWM7DQo+ICsg IEVGSV9TVEFUVVMgICAgICAgICBTdGF0dXM7DQo+ICsNCj4gKyAgRGJTdGF0aXN0aWMgPSAoUFhF X0RCX1NUQVRJU1RJQ1MgKikoVUlOVE4pRGJBZGRyOw0KPiArDQo+ICsgIGlmIChEYlNpemUgPT0g MCkgew0KPiArICAgIHJldHVybiBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCj4gKyAgfQ0KPiArDQo+ ICsgIERiU3RhdGlzdGljLT5TdXBwb3J0ZWQgID0gMHg4MDI7DQo+ICsgIERiU3RhdGlzdGljLT5E YXRhWzB4MDFdID0gTmljLT5SeEZyYW1lOw0KPiArICBEYlN0YXRpc3RpYy0+RGF0YVsweDBCXSA9 IE5pYy0+VHhGcmFtZTsNCj4gKw0KPiArICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0aFN0YXRpc3Rp Y3MgIT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JFdGhTdGF0aXN0 aWNzIChOaWMsIERiQWRkciwgRGJTaXplKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+ICsgICAgICByZXR1cm4gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAg ICB9DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ICt9 DQo+ICsNCj4gKy8qKg0KPiArICBUcmFuc2xhdGUgYSBtdWx0aWNhc3QgSVB2NCBvciBJUHY2IGFk ZHJlc3MgdG8gYSBtdWx0aWNhc3QgTUFDIGFkZHJlc3MuDQo+ICsNCj4gKyAgQHBhcmFtW2luLCBv dXRdIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsg IEBwYXJhbVtpbl0gICAgICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2Ug Y29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1VuZGlNY2FzdElwMk1h YyAoDQo+ICsgIElOIE9VVCAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICAgICAgTklDX0RBVEEg ICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBQWEVfQ1BCX01DQVNUX0lQX1RPX01BQyAgKkNwYjsN Cj4gKyAgUFhFX0RCX01DQVNUX0lQX1RPX01BQyAgICpEYjsNCj4gKyAgVUlOVDggICAgICAgICAg ICAgICAgICAgICpUbXA7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICBTdGF0dXM7DQo+ ICsNCj4gKyAgaWYgKChDZGItPk9wQ29kZSAhPSBQWEVfT1BDT0RFX01DQVNUX0lQX1RPX01BQykg fHwNCj4gKyAgICAgIChDZGItPlN0YXRDb2RlICE9IFBYRV9TVEFUQ09ERV9JTklUSUFMSVpFKSB8 fA0KPiArICAgICAgKENkYi0+U3RhdEZsYWdzICE9IFBYRV9TVEFURkxBR1NfSU5JVElBTElaRSkg fHwNCj4gKyAgICAgIChDZGItPklGbnVtID49IChnUHhlLT5JRmNudCB8IGdQeGUtPklGY250RXh0 IDw8IDgpKSB8fA0KPiArICAgICAgKENkYi0+Q1BCc2l6ZSAhPSBzaXplb2YgKFBYRV9DUEJfTUNB U1RfSVBfVE9fTUFDKSkgfHwNCj4gKyAgICAgIChDZGItPkRCc2l6ZSAhPSBzaXplb2YgKFBYRV9E Ql9NQ0FTVF9JUF9UT19NQUMpKSkNCj4gKyAgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhF X1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9T VEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0gZWxzZSB7DQo+ICsg ICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfQ09NUExFVEU7DQo+ICsg ICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCj4gKyAgfQ0KPiArDQo+ ICsgIGlmIChOaWMtPlN0YXRlICE9IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRFX0lOSVRJQUxJWkVE KSB7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfTk9UX0lOSVRJQUxJWkVE Ow0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsN Cj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBDcGIgPSAoUFhFX0NQQl9NQ0FTVF9J UF9UT19NQUMgKikoVUlOVE4pQ2RiLT5DUEJhZGRyOw0KPiArICBEYiAgPSAoUFhFX0RCX01DQVNU X0lQX1RPX01BQyAqKShVSU5UTilDZGItPkRCYWRkcjsNCj4gKw0KPiArICBpZiAoKENkYi0+T3BG bGFncyAmIFBYRV9PUEZMQUdTX01DQVNUX0lQVjZfVE9fTUFDKSAhPSAwKSB7DQo+ICsgICAgQ2Ri LT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+ U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX1VOU1VQUE9SVEVEOw0KPiArICAgIHJldHVybjsNCj4g KyAgfQ0KPiArDQo+ICsgIFRtcCA9IChVSU5UOCAqKSgmQ3BiLT5JUC5JUHY0KTsNCj4gKw0KPiAr ICBpZiAoKFRtcFswXSAmIDB4RjApICE9IDB4RTApIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9 IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQ WEVfU1RBVENPREVfSU5WQUxJRF9DUEI7DQo+ICsgIH0NCj4gKw0KPiArICBEYi0+TUFDWzBdID0g MHgwMTsNCj4gKyAgRGItPk1BQ1sxXSA9IDB4MDA7DQo+ICsgIERiLT5NQUNbMl0gPSAweDVFOw0K PiArICBEYi0+TUFDWzNdID0gVG1wWzFdICYgMHg3RjsNCj4gKyAgRGItPk1BQ1s0XSA9IFRtcFsy XTsNCj4gKyAgRGItPk1BQ1s1XSA9IFRtcFszXTsNCj4gKw0KPiArICBpZiAoTmljLT5Vc2JFdGgt PlVzYkV0aFVuZGkuVXNiRXRoVW5kaU1jYXN0SXAyTWFjICE9IE5VTEwpIHsNCj4gKyAgICBTdGF0 dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpTWNhc3RJcDJNYWMgKENkYiwg TmljKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBDZGItPlN0 YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgfQ0KPiArICB9 DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byByZWFkIGFu ZCB3cml0ZSAoaWYgc3VwcG9ydGVkIGJ5IE5JQyBIL1cpDQo+ICsgIG5vbnZvbGF0aWxlIHN0b3Jh Z2Ugb24gdGhlIE5JQy4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0 aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9p bnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsq Ki8NCj4gK1ZPSUQNCj4gK1VuZGlOdkRhdGEgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgIFN0 YXR1czsNCj4gKw0KPiArICBDZGItPlN0YXRDb2RlID0gUFhFX1NUQVRDT0RFX1VOU1VQUE9SVEVE Ow0KPiArICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaU52RGF0YSAhPSBO VUxMKSB7DQo+ICsgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5k aU52RGF0YSAoQ2RiLCBOaWMpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4g KyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4g KyAgICB9IGVsc2Ugew0KPiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NP TU1BTkRfQ09NUExFVEU7DQo+ICsgICAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9T VUNDRVNTOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBj b21tYW5kIHJldHVybnMgdGhlIGN1cnJlbnQgaW50ZXJydXB0IHN0YXR1cyBhbmQvb3IgdGhlDQo+ ICsgIHRyYW5zbWl0dGVkIGJ1ZmZlciBhZGRyZXNzZXMgYW5kIHRoZSBjdXJyZW50IG1lZGlhIHN0 YXR1cy4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFu ZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0 aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsqKi8NCj4gK1ZP SUQNCj4gK1VuZGlHZXRTdGF0dXMgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElO ICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIFBYRV9EQl9HRVRfU1RBVFVTICAq RGI7DQo+ICsgIFBYRV9EQl9HRVRfU1RBVFVTICBUbXBHZXRTdGF0dXM7DQo+ICsgIFVJTlQxNiAg ICAgICAgICAgICBOdW1FbnRyaWVzOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgSW5kZXg7DQo+ ICsgIEVGSV9TVEFUVVMgICAgICAgICBTdGF0dXM7DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wQ29k ZSAhPSBQWEVfT1BDT0RFX0dFVF9TVEFUVVMpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0Q29kZSAh PSBQWEVfU1RBVENPREVfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRGbGFncyAh PSBQWEVfU1RBVEZMQUdTX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5JRm51bSA+PSAo Z1B4ZS0+SUZjbnQgfCBnUHhlLT5JRmNudEV4dCA8PCA4KSkgfHwNCj4gKyAgICAgIChDZGItPkNQ QnNpemUgIT0gUFhFX0NQQlNJWkVfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5DUEJhZGRy ICE9IFBYRV9DUEJBRERSX05PVF9VU0VEKSkNCj4gKyAgew0KPiArICAgIENkYi0+U3RhdEZsYWdz ID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9 IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0gZWxzZSB7 DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfQ09NUExFVEU7 DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCj4gKyAgfQ0K PiArDQo+ICsgIGlmIChOaWMtPlN0YXRlICE9IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRFX0lOSVRJ QUxJWkVEKSB7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfTk9UX0lOSVRJ QUxJWkVEOw0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZB SUxFRDsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBUbXBHZXRTdGF0dXMuUnhG cmFtZUxlbiA9IDA7DQo+ICsgIFRtcEdldFN0YXR1cy5yZXNlcnZlZCAgID0gMDsNCj4gKyAgRGIg ICAgICAgICAgICAgICAgICAgICAgPSAoUFhFX0RCX0dFVF9TVEFUVVMgKikoVUlOVE4pQ2RiLT5E QmFkZHI7DQo+ICsNCj4gKyAgaWYgKChDZGItPkRCc2l6ZSA+IDApICYmIChDZGItPkRCc2l6ZSA8 IHNpemVvZiAoVUlOVDMyKSAqIDIpKSB7DQo+ICsgICAgQ29weU1lbSAoRGIsICZUbXBHZXRTdGF0 dXMsIENkYi0+REJzaXplKTsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBDb3B5TWVtIChEYiwgJlRt cEdldFN0YXR1cywgc2l6ZW9mIChVSU5UMzIpICogMik7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAo KENkYi0+T3BGbGFncyAmIFBYRV9PUEZMQUdTX0dFVF9UUkFOU01JVFRFRF9CVUZGRVJTKSAhPSAw KSB7DQo+ICsgICAgaWYgKENkYi0+REJzaXplID09IDApIHsNCj4gKyAgICAgIENkYi0+U3RhdEZs YWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICAgIENkYi0+U3RhdENv ZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiArICAgICAgcmV0dXJuOw0KPiArICAg IH0NCj4gKw0KPiArICAgIE51bUVudHJpZXMgID0gQ2RiLT5EQnNpemUgLSBzaXplb2YgKFVJTlQ2 NCk7DQo+ICsgICAgQ2RiLT5EQnNpemUgPSBzaXplb2YgKFVJTlQzMikgKiAyOw0KPiArDQo+ICsg ICAgZm9yIChJbmRleCA9IDA7IE51bUVudHJpZXMgPj0gc2l6ZW9mIChVSU5UNjQpOyBJbmRleCsr LCBOdW1FbnRyaWVzIC09IHNpemVvZg0KPiAoVUlOVDY0KSkgew0KPiArICAgICAgaWYgKE5pYy0+ VHhCdWZmZXJDb3VudCA+IDApIHsNCj4gKyAgICAgICAgTmljLT5UeEJ1ZmZlckNvdW50LS07DQo+ ICsgICAgICAgIERiLT5UeEJ1ZmZlcltJbmRleF0gPSBOaWMtPk1lZGlhSGVhZGVyW05pYy0+VHhC dWZmZXJDb3VudF07DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgaWYg KChDZGItPk9wRmxhZ3MgJiBQWEVfT1BGTEFHU19HRVRfSU5URVJSVVBUX1NUQVRVUykgIT0gMCkg ew0KPiArICAgIGlmIChOaWMtPlJlY2VpdmVTdGF0dXMgIT0gMCkgew0KPiArICAgICAgQ2RiLT5T dGF0RmxhZ3MgfD0gUFhFX1NUQVRGTEFHU19HRVRfU1RBVFVTX1JFQ0VJVkU7DQo+ICsgICAgfQ0K PiArICB9DQo+ICsNCj4gKyAgaWYgKChOaWMtPlJlcXVlc3QuUmVxdWVzdCA9PSBVU0JfQ0RDX05F VFdPUktfQ09OTkVDVElPTikgJiYgKE5pYy0NCj4gPlJlcXVlc3QuVmFsdWUgPT0gTkVUV09SS19E SVNDT05ORUNUKSkgew0KPiArICAgIE5pYy0+Q2FibGVEZXRlY3QgPSAwOw0KPiArICB9IGVsc2Ug aWYgKChOaWMtPlJlcXVlc3QuUmVxdWVzdCA9PSBVU0JfQ0RDX05FVFdPUktfQ09OTkVDVElPTikg JiYNCj4gKE5pYy0+UmVxdWVzdC5WYWx1ZSA9PSBORVRXT1JLX0NPTk5FQ1RFRCkpIHsNCj4gKyAg ICBOaWMtPkNhYmxlRGV0ZWN0ID0gMTsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmICgoQ2RiLT5PcEZs YWdzICYgUFhFX09QRkxBR1NfR0VUX01FRElBX1NUQVRVUykgIT0gMCkgew0KPiArICAgIGlmIChO aWMtPkNhYmxlRGV0ZWN0ID09IDApIHsNCj4gKyAgICAgIENkYi0+U3RhdEZsYWdzIHw9IFBYRV9T VEFURkxBR1NfR0VUX1NUQVRVU19OT19NRURJQTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiAr ICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaUdldFN0YXR1cyAhPSBOVUxM KSB7DQo+ICsgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaUdl dFN0YXR1cyAoQ2RiLCBOaWMpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4g KyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4g KyAgICB9DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCBpcyB1 c2VkIHRvIGZpbGwgdGhlIG1lZGlhIGhlYWRlcihzKSBpbiB0cmFuc21pdCBwYWNrZXQocykuDQo+ ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3Jp cHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdv cmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtV bmRpRmlsbEhlYWRlciAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19E QVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgUFhFX0NQQl9GSUxMX0hFQURFUiAgICAgICAg ICAgICAqQ3BiRmlsbEhlYWRlcjsNCj4gKyAgUFhFX0NQQl9GSUxMX0hFQURFUl9GUkFHTUVOVEVE ICAqQ3BiRmlsbDsNCj4gKyAgRXRoZXJuZXRIZWFkZXIgICAgICAgICAgICAgICAgICAqTWFjSGVh ZGVyOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiArICBF RklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKw0KPiArICBpZiAoKENk Yi0+T3BDb2RlICE9IFBYRV9PUENPREVfRklMTF9IRUFERVIpIHx8DQo+ICsgICAgICAoQ2RiLT5T dGF0Q29kZSAhPSBQWEVfU1RBVENPREVfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPlN0 YXRGbGFncyAhPSBQWEVfU1RBVEZMQUdTX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5J Rm51bSA+PSAoZ1B4ZS0+SUZjbnQgfCBnUHhlLT5JRmNudEV4dCA8PCA4KSkgfHwNCj4gKyAgICAg IChDZGItPkNQQnNpemUgIT0gc2l6ZW9mIChQWEVfQ1BCX0ZJTExfSEVBREVSX0ZSQUdNRU5URUQp KSB8fA0KPiArICAgICAgKENkYi0+REJzaXplICE9IFBYRV9EQlNJWkVfTk9UX1VTRUQpIHx8DQo+ ICsgICAgICAoQ2RiLT5EQmFkZHIgIT0gUFhFX0RCQUREUl9OT1RfVVNFRCkpDQo+ICsgIHsNCj4g KyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsg ICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ICsgICAgcmV0 dXJuOw0KPiArICB9IGVsc2Ugew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFH U19DT01NQU5EX0NPTVBMRVRFOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RF X1NVQ0NFU1M7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5TdGF0ZSAhPSBQWEVfU1RBVEZM QUdTX0dFVF9TVEFURV9JTklUSUFMSVpFRCkgew0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhF X1NUQVRDT0RFX05PVF9JTklUSUFMSVpFRDsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9T VEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4g KyAgaWYgKENkYi0+Q1BCc2l6ZSA9PSBQWEVfQ1BCU0laRV9OT1RfVVNFRCkgew0KPiArICAgIENk Yi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGIt PlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICByZXR1cm47DQo+ ICsgIH0NCj4gKw0KPiArICBpZiAoKENkYi0+T3BGbGFncyAmIFBYRV9PUEZMQUdTX0ZJTExfSEVB REVSX0ZSQUdNRU5URUQpICE9IDApIHsNCj4gKyAgICBDcGJGaWxsID0gKFBYRV9DUEJfRklMTF9I RUFERVJfRlJBR01FTlRFRCAqKShVSU5UTilDZGItPkNQQmFkZHI7DQo+ICsNCj4gKyAgICBpZiAo KENwYkZpbGwtPkZyYWdDbnQgPT0gMCkgfHwgKENwYkZpbGwtPkZyYWdEZXNjWzBdLkZyYWdMZW4g PA0KPiBQWEVfTUFDX0hFQURFUl9MRU5fRVRIRVIpKSB7DQo+ICsgICAgICBDZGItPlN0YXRGbGFn cyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgICBDZGItPlN0YXRDb2Rl ICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICAgIHJldHVybjsNCj4gKyAgICB9 DQo+ICsNCj4gKyAgICBNYWNIZWFkZXIgICAgICAgICAgID0gKEV0aGVybmV0SGVhZGVyICopKFVJ TlROKUNwYkZpbGwtDQo+ID5GcmFnRGVzY1swXS5GcmFnQWRkcjsNCj4gKyAgICBNYWNIZWFkZXIt PlByb3RvY29sID0gQ3BiRmlsbC0+UHJvdG9jb2w7DQo+ICsNCj4gKyAgICBmb3IgKEluZGV4ID0g MDsgSW5kZXggPCBQWEVfSFdBRERSX0xFTl9FVEhFUjsgSW5kZXgrKykgew0KPiArICAgICAgTWFj SGVhZGVyLT5EZXN0QWRkcltJbmRleF0gPSBDcGJGaWxsLT5EZXN0QWRkcltJbmRleF07DQo+ICsg ICAgICBNYWNIZWFkZXItPlNyY0FkZHJbSW5kZXhdICA9IENwYkZpbGwtPlNyY0FkZHJbSW5kZXhd Ow0KPiArICAgIH0NCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBDcGJGaWxsSGVhZGVyID0gKFBYRV9D UEJfRklMTF9IRUFERVIgKikoVUlOVE4pQ2RiLT5DUEJhZGRyOw0KPiArDQo+ICsgICAgTWFjSGVh ZGVyICAgICAgICAgICA9IChFdGhlcm5ldEhlYWRlciAqKShVSU5UTilDcGJGaWxsSGVhZGVyLQ0K PiA+TWVkaWFIZWFkZXI7DQo+ICsgICAgTWFjSGVhZGVyLT5Qcm90b2NvbCA9IENwYkZpbGxIZWFk ZXItPlByb3RvY29sOw0KPiArDQo+ICsgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgUFhFX0hX QUREUl9MRU5fRVRIRVI7IEluZGV4KyspIHsNCj4gKyAgICAgIE1hY0hlYWRlci0+RGVzdEFkZHJb SW5kZXhdID0gQ3BiRmlsbEhlYWRlci0+RGVzdEFkZHJbSW5kZXhdOw0KPiArICAgICAgTWFjSGVh ZGVyLT5TcmNBZGRyW0luZGV4XSAgPSBDcGJGaWxsSGVhZGVyLT5TcmNBZGRyW0luZGV4XTsNCj4g KyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNi RXRoVW5kaUZpbGxIZWFkZXIgIT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9IE5pYy0+VXNiRXRo LT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlGaWxsSGVhZGVyIChDZGIsIE5pYyk7DQo+ICsgICAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RB VEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArfQ0KPiArDQo+ICsv KioNCj4gKyAgVGhlIFRyYW5zbWl0IGNvbW1hbmQgaXMgdXNlZCB0byBwbGFjZSBhIHBhY2tldCBp bnRvIHRoZSB0cmFuc21pdCBxdWV1ZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9p bnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBO aWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0K PiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1VuZGlUcmFuc21pdCAoDQo+ICsgIElOICBQWEVfQ0RC ICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJ X1NUQVRVUyAgU3RhdHVzOw0KPiArDQo+ICsgIGlmICgoQ2RiLT5PcENvZGUgIT0gUFhFX09QQ09E RV9UUkFOU01JVCkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRDb2RlICE9IFBYRV9TVEFUQ09ERV9J TklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+U3RhdEZsYWdzICE9IFBYRV9TVEFURkxBR1Nf SU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPklGbnVtID49IChnUHhlLT5JRmNudCB8IGdQ eGUtPklGY250RXh0IDw8IDgpKSB8fA0KPiArICAgICAgKENkYi0+Q1BCc2l6ZSAhPSBzaXplb2Yg KFBYRV9DUEJfVFJBTlNNSVQpKSB8fA0KPiArICAgICAgKENkYi0+REJzaXplICE9IFBYRV9EQlNJ WkVfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5EQmFkZHIgIT0gUFhFX0RCQUREUl9OT1Rf VVNFRCkpDQo+ICsgIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09N TUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJ RF9DREI7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9IGVsc2Ugew0KPiArICAgIENkYi0+U3RhdEZs YWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0NPTVBMRVRFOw0KPiArICAgIENkYi0+U3RhdENv ZGUgID0gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5T dGF0ZSAhPSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9JTklUSUFMSVpFRCkgew0KPiArICAgIENk Yi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGIt PlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9OT1RfSU5JVElBTElaRUQ7DQo+ICsgICAgcmV0dXJu Ow0KPiArICB9DQo+ICsNCj4gKyAgaWYgKENkYi0+Q1BCc2l6ZSA9PSBQWEVfQ1BCU0laRV9OT1Rf VVNFRCkgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZB SUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsN Cj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0 aFVuZGkuVXNiRXRoVW5kaVRyYW5zbWl0ICE9IE5VTEwpIHsNCj4gKyAgICBTdGF0dXMgPSBOaWMt PlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpVHJhbnNtaXQgKENkYiwgTmljKTsNCj4gKyAg ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBDZGItPlN0YXRGbGFncyA9IFBY RV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgcmV0dXJu Ow0KPiArICB9DQo+ICsNCj4gKyAgQ2RiLT5TdGF0Q29kZSA9IFRyYW5zbWl0IChDZGIsIE5pYywg Q2RiLT5DUEJhZGRyLCBDZGItPk9wRmxhZ3MpOw0KPiArDQo+ICsgIGlmIChDZGItPlN0YXRDb2Rl ICE9IFBYRV9TVEFUQ09ERV9TVUNDRVNTKSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVf U1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiAr ICBVc2UgVVNCIEV0aGVybmV0IFByb3RvY29sIEJ1bGsgb3V0IGNvbW1hbmQgdG8gdHJhbnNtaXQg ZGF0YS4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgICAgQ2RiICAgICAgQSBwb2ludGVyIHRvIHRo ZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSBOaWMgICAg ICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4g KyAgQHBhcmFtW2luXSAgICAgIENwYkFkZHIgIENvbW1hbmQgUGFyYW1ldGVyIEJsb2NrIEFkZHJl c3MuDQo+ICsgIEBwYXJhbVtpbl0gICAgICBPcEZsYWdzICBPcGVyYXRpb24gRmxhZ3MuDQo+ICsN Cj4gKyoqLw0KPiArVUlOVDE2DQo+ICtUcmFuc21pdCAoDQo+ICsgIElOICAgICAgUFhFX0NEQiAg ICpDZGIsDQo+ICsgIElOIE9VVCAgTklDX0RBVEEgICpOaWMsDQo+ICsgIElOICAgICAgVUlOVDY0 ICAgIENwYkFkZHIsDQo+ICsgIElOICAgICAgVUlOVDE2ICAgIE9wRmxhZ3MNCj4gKyAgKQ0KPiAr ew0KPiArICBFRklfU1RBVFVTICAgICAgICBTdGF0dXM7DQo+ICsgIFBYRV9DUEJfVFJBTlNNSVQg ICpDcGI7DQo+ICsgIFVJTlQ2NCAgICAgICAgICAgIEJ1bGtPdXREYXRhOw0KPiArICBVSU5UTiAg ICAgICAgICAgICBEYXRhTGVuZ3RoOw0KPiArICBVSU5UTiAgICAgICAgICAgICBUcmFuc21pdExl bmd0aDsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgTWFwOw0KPiArICBVSU5UMzIgICAgICAgICAg ICBDb3VudGVyOw0KPiArICBVSU5UMTYgICAgICAgICAgICBTdGF0Q29kZTsNCj4gKw0KPiArICBC dWxrT3V0RGF0YSA9IDA7DQo+ICsgIENvdW50ZXIgICAgID0gMDsNCj4gKyAgQ3BiICAgICAgICAg PSAoUFhFX0NQQl9UUkFOU01JVCAqKShVSU5UTilDcGJBZGRyOw0KPiArDQo+ICsgIGlmIChOaWMt PkNhblRyYW5zbWl0KSB7DQo+ICsgICAgcmV0dXJuIFBYRV9TVEFUQ09ERV9CVVNZOw0KPiArICB9 DQo+ICsNCj4gKyAgTmljLT5DYW5UcmFuc21pdCA9IFRSVUU7DQo+ICsNCj4gKyAgaWYgKChPcEZs YWdzICYgUFhFX09QRkxBR1NfVFJBTlNNSVRfRlJBR01FTlRFRCkgIT0gMCkgew0KPiArICAgIHJl dHVybiBQWEVfU1RBVENPREVfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgIH0NCj4gKw0KPiArICBN YXAgPSBNYXBJdCAoDQo+ICsgICAgICAgICAgTmljLA0KPiArICAgICAgICAgIENwYi0+RnJhbWVB ZGRyLA0KPiArICAgICAgICAgIENwYi0+RGF0YUxlbiArIChVSU5UMzIpQ3BiLT5NZWRpYWhlYWRl ckxlbiwNCj4gKyAgICAgICAgICBUT19ERVZJQ0UsDQo+ICsgICAgICAgICAgKFVJTlQ2NCkoVUlO VE4pJkJ1bGtPdXREYXRhDQo+ICsgICAgICAgICAgKTsNCj4gKw0KPiArICBpZiAoTWFwICE9IDAp IHsNCj4gKyAgICBOaWMtPkNhblRyYW5zbWl0ID0gRkFMU0U7DQo+ICsgICAgcmV0dXJuIFBYRV9T VEFUQ09ERV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChOaWMtPlR4 QnVmZmVyQ291bnQgPCBNQVhfWE1JVF9CVUZGRVJTKSB7DQo+ICsgICAgTmljLT5NZWRpYUhlYWRl cltOaWMtPlR4QnVmZmVyQ291bnRdID0gQ3BiLT5GcmFtZUFkZHI7DQo+ICsgICAgTmljLT5UeEJ1 ZmZlckNvdW50Kys7DQo+ICsgIH0NCj4gKw0KPiArICBEYXRhTGVuZ3RoID0gKFVJTlROKShDcGIt PkRhdGFMZW4gKyAoVUlOVDMyKUNwYi0+TWVkaWFoZWFkZXJMZW4pOw0KPiArDQo+ICsgIHdoaWxl ICgxKSB7DQo+ICsgICAgaWYgKENvdW50ZXIgPj0gMykgew0KPiArICAgICAgU3RhdENvZGUgPSBQ WEVfU1RBVENPREVfQlVTWTsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIH0NCj4gKw0KPiArICAg IFRyYW5zbWl0TGVuZ3RoID0gRGF0YUxlbmd0aDsNCj4gKw0KPiArICAgIFN0YXR1cyA9IE5pYy0+ VXNiRXRoLT5Vc2JFdGhUcmFuc21pdCAoQ2RiLCBOaWMtPlVzYkV0aCwgKFZPSUQNCj4gKikoVUlO VE4pQnVsa091dERhdGEsICZUcmFuc21pdExlbmd0aCk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAo U3RhdHVzKSkgew0KPiArICAgICAgU3RhdENvZGUgPSAgUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZB SUxFRDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZiAoU3RhdHVzID09IEVGSV9JTlZBTElEX1BB UkFNRVRFUikgew0KPiArICAgICAgU3RhdENvZGUgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9QQVJB TUVURVI7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZiAoU3RhdHVz ID09IEVGSV9ERVZJQ0VfRVJST1IpIHsNCj4gKyAgICAgIFN0YXRDb2RlID0gUFhFX1NUQVRDT0RF X0RFVklDRV9GQUlMVVJFOw0KPiArICAgICAgYnJlYWs7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAg aWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIE5pYy0+VHhGcmFtZSsrOw0KPiAr ICAgICAgU3RhdENvZGUgPSBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCj4gKyAgICAgIGJyZWFrOw0K PiArICAgIH0NCj4gKw0KPiArICAgIENvdW50ZXIrKzsNCj4gKyAgfQ0KPiArDQo+ICsgIFVuTWFw SXQgKA0KPiArICAgIE5pYywNCj4gKyAgICBDcGItPkZyYW1lQWRkciwNCj4gKyAgICBDcGItPkRh dGFMZW4gKyAoVUlOVDMyKUNwYi0+TWVkaWFoZWFkZXJMZW4sDQo+ICsgICAgVE9fREVWSUNFLA0K PiArICAgIEJ1bGtPdXREYXRhDQo+ICsgICAgKTsNCj4gKw0KPiArICBOaWMtPkNhblRyYW5zbWl0 ID0gRkFMU0U7DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXRDb2RlOw0KPiArfQ0KPiArDQo+ICsvKioN Cj4gKyAgV2hlbiB0aGUgbmV0d29yayBhZGFwdGVyIGhhcyByZWNlaXZlZCBhIGZyYW1lLCB0aGlz IGNvbW1hbmQgaXMgdXNlZA0KPiArICB0byBjb3B5IHRoZSBmcmFtZSBpbnRvIGRyaXZlci9hcHBs aWNhdGlvbiBzdG9yYWdlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRv IHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBw b2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4g KyoqLw0KPiArVk9JRA0KPiArVW5kaVJlY2VpdmUgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIs DQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMg IFN0YXR1czsNCj4gKw0KPiArICBpZiAoKENkYi0+T3BDb2RlICE9IFBYRV9PUENPREVfUkVDRUlW RSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRDb2RlICE9IFBYRV9TVEFUQ09ERV9JTklUSUFMSVpF KSB8fA0KPiArICAgICAgKENkYi0+U3RhdEZsYWdzICE9IFBYRV9TVEFURkxBR1NfSU5JVElBTEla RSkgfHwNCj4gKyAgICAgIChDZGItPklGbnVtID49IChnUHhlLT5JRmNudCB8IGdQeGUtPklGY250 RXh0IDw8IDgpKSB8fA0KPiArICAgICAgKENkYi0+Q1BCc2l6ZSAhPSBzaXplb2YgKFBYRV9DUEJf UkVDRUlWRSkpIHx8DQo+ICsgICAgICAoQ2RiLT5EQnNpemUgIT0gc2l6ZW9mIChQWEVfREJfUkVD RUlWRSkpIHx8DQo+ICsgICAgICAoQ2RiLT5PcEZsYWdzICE9IFBYRV9PUEZMQUdTX05PVF9VU0VE KSkNCj4gKyAgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5E X0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NE QjsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3Mg PSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfQ09NUExFVEU7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAg PSBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChOaWMtPlN0YXRl ICE9IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRFX0lOSVRJQUxJWkVEKSB7DQo+ICsgICAgQ2RiLT5T dGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3Rh dENvZGUgID0gUFhFX1NUQVRDT0RFX05PVF9JTklUSUFMSVpFRDsNCj4gKyAgICByZXR1cm47DQo+ ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaVJl Y2VpdmUgIT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRp LlVzYkV0aFVuZGlSZWNlaXZlIChDZGIsIE5pYyk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRf RkFJTEVEOw0KPiArICAgIH0NCj4gKw0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsg IENkYi0+U3RhdENvZGUgPSBSZWNlaXZlIChDZGIsIE5pYywgQ2RiLT5DUEJhZGRyLCBDZGItPkRC YWRkcik7DQo+ICsNCj4gKyAgaWYgKENkYi0+U3RhdENvZGUgIT0gUFhFX1NUQVRDT0RFX1NVQ0NF U1MpIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlM RUQ7DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFVzZSBVU0IgRXRoZXJuZXQgUHJv dG9jb2wgQnVsayBpbiBjb21tYW5kIHRvIHJlY2VpdmUgZGF0YS4NCj4gKw0KPiArICBAcGFyYW1b aW5dICAgICAgQ2RiICAgICAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxv Y2suDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSBOaWMgICAgICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdv cmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKyAgQHBhcmFtW2luXSAgICAgIENwYkFk ZHIgIENvbW1hbmQgUGFyYW1ldGVyIEJsb2NrIEFkZHJlc3MuDQo+ICsgIEBwYXJhbVtpbiwgb3V0 XSBEYkFkZHIgICBEYXRhIEJsb2NrIEFkZHJlc3MuDQo+ICsNCj4gKyoqLw0KPiArVUlOVDE2DQo+ ICtSZWNlaXZlICgNCj4gKyAgSU4gUFhFX0NEQiAgICAgICAqQ2RiLA0KPiArICBJTiBPVVQgTklD X0RBVEEgICpOaWMsDQo+ICsgIElOIFVJTlQ2NCAgICAgICAgQ3BiQWRkciwNCj4gKyAgSU4gT1VU IFVJTlQ2NCAgICBEYkFkZHINCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgIFN0 YXR1czsNCj4gKyAgVUlOVE4gICAgICAgICAgICBJbmRleDsNCj4gKyAgUFhFX0ZSQU1FX1RZUEUg ICBGcmFtZVR5cGU7DQo+ICsgIFBYRV9DUEJfUkVDRUlWRSAgKkNwYjsNCj4gKyAgUFhFX0RCX1JF Q0VJVkUgICAqRGI7DQo+ICsgIE5JQ19ERVZJQ0UgICAgICAgKk5pY0RldmljZTsNCj4gKyAgVUlO VDggICAgICAgICAgICAqQnVsa0luRGF0YTsNCj4gKyAgVUlOVE4gICAgICAgICAgICBEYXRhTGVu Z3RoOw0KPiArICBFdGhlcm5ldEhlYWRlciAgICpIZWFkZXI7DQo+ICsgIEVGSV9UUEwgICAgICAg ICAgT3JpZ2luYWxUcGw7DQo+ICsNCj4gKyAgRnJhbWVUeXBlICA9IFBYRV9GUkFNRV9UWVBFX05P TkU7DQo+ICsgIE5pY0RldmljZSAgPSBVTkRJX0RFVl9GUk9NX05JQyAoTmljKTsNCj4gKyAgQnVs a0luRGF0YSA9IE5pY0RldmljZS0+UmVjZWl2ZUJ1ZmZlcjsNCj4gKyAgRGF0YUxlbmd0aCA9IChV SU5UTilOaWMtPk1heFNlZ21lbnRTaXplOw0KPiArICBDcGIgICAgICAgID0gKFBYRV9DUEJfUkVD RUlWRSAqKShVSU5UTilDcGJBZGRyOw0KPiArICBEYiAgICAgICAgID0gKFBYRV9EQl9SRUNFSVZF ICopKFVJTlROKURiQWRkcjsNCj4gKw0KPiArICBpZiAoIUJ1bGtJbkRhdGEpIHsNCj4gKyAgICBy ZXR1cm4gUFhFX1NUQVRDT0RFX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICB9DQo+ICsNCj4gKyAg aWYgKChOaWMtPlJhdGVMaW1pdGluZ0NyZWRpdENvdW50ID09IDApICYmIChOaWMtPlJhdGVMaW1p dGluZ0VuYWJsZSA9PQ0KPiBUUlVFKSkgew0KPiArICAgIHJldHVybiBQWEVfU1RBVENPREVfTk9f REFUQTsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JFdGhSZWNl aXZlIChDZGIsIE5pYy0+VXNiRXRoLCAoVk9JRCAqKUJ1bGtJbkRhdGEsDQo+ICZEYXRhTGVuZ3Ro KTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIE5pYy0+UmVjZWl2ZVN0 YXR1cyA9IDA7DQo+ICsgICAgaWYgKE5pYy0+UmF0ZUxpbWl0aW5nRW5hYmxlID09IFRSVUUpIHsN Cj4gKyAgICAgIE9yaWdpbmFsVHBsID0gZ0JTLT5SYWlzZVRQTCAoVFBMX05PVElGWSk7DQo+ICsg ICAgICBpZiAoTmljLT5SYXRlTGltaXRpbmdDcmVkaXRDb3VudCAhPSAwKSB7DQo+ICsgICAgICAg IE5pYy0+UmF0ZUxpbWl0aW5nQ3JlZGl0Q291bnQtLTsNCj4gKyAgICAgIH0NCj4gKw0KPiArICAg ICAgZ0JTLT5SZXN0b3JlVFBMIChPcmlnaW5hbFRwbCk7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAg cmV0dXJuIFBYRV9TVEFUQ09ERV9OT19EQVRBOw0KPiArICB9DQo+ICsNCj4gKyAgTmljLT5SeEZy YW1lKys7DQo+ICsNCj4gKyAgaWYgKERhdGFMZW5ndGggIT0gMCkgew0KPiArICAgIGlmIChEYXRh TGVuZ3RoID4gQ3BiLT5CdWZmZXJMZW4pIHsNCj4gKyAgICAgIERhdGFMZW5ndGggPSAoVUlOVE4p Q3BiLT5CdWZmZXJMZW47DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgQ29weU1lbSAoKFVJTlQ4ICop KFVJTlROKUNwYi0+QnVmZmVyQWRkciwgKFVJTlQ4ICopQnVsa0luRGF0YSwNCj4gRGF0YUxlbmd0 aCk7DQo+ICsNCj4gKyAgICBIZWFkZXIgPSAoRXRoZXJuZXRIZWFkZXIgKilCdWxrSW5EYXRhOw0K PiArDQo+ICsgICAgRGItPkZyYW1lTGVuICAgICAgID0gKFVJTlQzMilEYXRhTGVuZ3RoOw0KPiAr ICAgIERiLT5NZWRpYUhlYWRlckxlbiA9IFBYRV9NQUNfSEVBREVSX0xFTl9FVEhFUjsNCj4gKw0K PiArICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFBYRV9IV0FERFJfTEVOX0VUSEVSOyBJbmRl eCsrKSB7DQo+ICsgICAgICBpZiAoSGVhZGVyLT5EZXN0QWRkcltJbmRleF0gIT0gTmljLT5DdXJy ZW50Tm9kZUFkZHJlc3NbSW5kZXhdKSB7DQo+ICsgICAgICAgIGJyZWFrOw0KPiArICAgICAgfQ0K PiArICAgIH0NCj4gKw0KPiArICAgIGlmIChJbmRleCA+PSBQWEVfSFdBRERSX0xFTl9FVEhFUikg ew0KPiArICAgICAgRnJhbWVUeXBlID0gUFhFX0ZSQU1FX1RZUEVfVU5JQ0FTVDsNCj4gKyAgICB9 IGVsc2Ugew0KPiArICAgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgUFhFX0hXQUREUl9MRU5f RVRIRVI7IEluZGV4KyspIHsNCj4gKyAgICAgICAgaWYgKEhlYWRlci0+RGVzdEFkZHJbSW5kZXhd ICE9IE5pYy0+QnJvYWRjYXN0Tm9kZUFkZHJlc3NbSW5kZXhdKSB7DQo+ICsgICAgICAgICAgYnJl YWs7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAgaWYgKEluZGV4ID49 IFBYRV9IV0FERFJfTEVOX0VUSEVSKSB7DQo+ICsgICAgICAgIEZyYW1lVHlwZSA9IFBYRV9GUkFN RV9UWVBFX0JST0FEQ0FTVDsNCj4gKyAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgIGlmICgoSGVh ZGVyLT5EZXN0QWRkclswXSAmIDEpID09IDEpIHsNCj4gKyAgICAgICAgICBGcmFtZVR5cGUgPSBQ WEVfRlJBTUVfVFlQRV9GSUxURVJFRF9NVUxUSUNBU1Q7DQo+ICsgICAgICAgIH0gZWxzZSB7DQo+ ICsgICAgICAgICAgRnJhbWVUeXBlID0gUFhFX0ZSQU1FX1RZUEVfUFJPTUlTQ1VPVVM7DQo+ICsg ICAgICAgIH0NCj4gKyAgICAgIH0NCj4gKyAgICB9DQo+ICsNCj4gKyAgICBEYi0+VHlwZSAgICAg PSBGcmFtZVR5cGU7DQo+ICsgICAgRGItPlByb3RvY29sID0gSGVhZGVyLT5Qcm90b2NvbDsNCj4g Kw0KPiArICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFBYRV9IV0FERFJfTEVOX0VUSEVSOyBJ bmRleCsrKSB7DQo+ICsgICAgICBEYi0+U3JjQWRkcltJbmRleF0gID0gSGVhZGVyLT5TcmNBZGRy W0luZGV4XTsNCj4gKyAgICAgIERiLT5EZXN0QWRkcltJbmRleF0gPSBIZWFkZXItPkRlc3RBZGRy W0luZGV4XTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoRnJhbWVUeXBlID09IFBY RV9GUkFNRV9UWVBFX05PTkUpIHsNCj4gKyAgICBOaWMtPlJlY2VpdmVTdGF0dXMgPSAwOw0KPiAr ICB9IGVsc2Ugew0KPiArICAgIE5pYy0+UmVjZWl2ZVN0YXR1cyA9IDE7DQo+ICsgIH0NCj4gKw0K PiArICByZXR1cm4gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiAr ICBGaWxsIG91dCBQWEUgU1cgVU5ESSBzdHJ1Y3R1cmUuDQo+ICsNCj4gKyAgQHBhcmFtW291dF0g IFB4ZVN3ICAgICAgQSBwb2ludGVyIHRvIHRoZSBQWEUgU1cgVU5ESSBzdHJ1Y3R1cmUuDQo+ICsN Cj4gKyoqLw0KPiArVk9JRA0KPiArUHhlU3RydWN0SW5pdCAoDQo+ICsgIE9VVCBQWEVfU1dfVU5E SSAgKlB4ZVN3DQo+ICsgICkNCj4gK3sNCj4gKyAgUHhlU3ctPlNpZ25hdHVyZSA9IFBYRV9ST01J RF9TSUdOQVRVUkU7DQo+ICsgIFB4ZVN3LT5MZW4gICAgICAgPSAoVUlOVDgpc2l6ZW9mIChQWEVf U1dfVU5ESSk7DQo+ICsgIFB4ZVN3LT5GdWRnZSAgICAgPSAwOw0KPiArICBQeGVTdy0+SUZjbnQg ICAgID0gMDsNCj4gKyAgUHhlU3ctPklGY250RXh0ICA9IDA7DQo+ICsgIFB4ZVN3LT5SZXYgICAg ICAgPSBQWEVfUk9NSURfUkVWOw0KPiArICBQeGVTdy0+TWFqb3JWZXIgID0gUFhFX1JPTUlEX01B Sk9SVkVSOw0KPiArICBQeGVTdy0+TWlub3JWZXIgID0gUFhFX1JPTUlEX01JTk9SVkVSOw0KPiAr ICBQeGVTdy0+cmVzZXJ2ZWQxID0gMDsNCj4gKw0KPiArICBQeGVTdy0+SW1wbGVtZW50YXRpb24g PSBQWEVfUk9NSURfSU1QX1NXX1ZJUlRfQUREUiB8DQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgIFBYRV9ST01JRF9JTVBfRlJBR19TVVBQT1JURUQgfA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICBQWEVfUk9NSURfSU1QX0NNRF9MSU5LX1NVUFBPUlRFRCB8DQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgIFBYRV9ST01JRF9JTVBfU1RBVElPTl9BRERSX1NFVFRBQkxFIHwNCj4g Kw0KPiBQWEVfUk9NSURfSU1QX1BST01JU0NVT1VTX01VTFRJQ0FTVF9SWF9TVVBQT1JURUQgfA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICBQWEVfUk9NSURfSU1QX1BST01JU0NVT1VTX1JY X1NVUFBPUlRFRCB8DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIFBYRV9ST01JRF9JTVBf QlJPQURDQVNUX1JYX1NVUFBPUlRFRCB8DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIFBY RV9ST01JRF9JTVBfRklMVEVSRURfTVVMVElDQVNUX1JYX1NVUFBPUlRFRDsNCj4gKw0KPiArICBQ eGVTdy0+RW50cnlQb2ludCAgID0gKFVJTlQ2NCkoVUlOVE4pVW5kaUFwaUVudHJ5Ow0KPiArICBQ eGVTdy0+cmVzZXJ2ZWQyWzBdID0gMDsNCj4gKyAgUHhlU3ctPnJlc2VydmVkMlsxXSA9IDA7DQo+ ICsgIFB4ZVN3LT5yZXNlcnZlZDJbMl0gPSAwOw0KPiArICBQeGVTdy0+QnVzQ250ICAgICAgID0g MTsNCj4gKyAgUHhlU3ctPkJ1c1R5cGVbMF0gICA9IFBYRV9CVVNUWVBFX1VTQjsNCj4gKyAgUHhl U3ctPkZ1ZGdlICAgICAgICA9IFB4ZVN3LT5GdWRnZSAtIENhbGN1bGF0ZVN1bTggKChWT0lEICop UHhlU3csIFB4ZVN3LQ0KPiA+TGVuKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFVwZGF0ZSBO SUMgbnVtYmVyLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICAgICBOaWMgICAgICAgQSBwb2ludGVy IHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsgIEBwYXJhbVtp biwgb3V0XSBQeGVTdyAgICAgQSBwb2ludGVyIHRvIHRoZSBQWEUgU1cgVU5ESSBzdHJ1Y3R1cmUu DQo+ICsNCj4gKyoqLw0KPiArVk9JRA0KPiArVXBkYXRlTmljTnVtICgNCj4gKyAgSU4gICAgICBO SUNfREFUQSAgICAgKk5pYywNCj4gKyAgSU4gT1VUICBQWEVfU1dfVU5ESSAgKlB4ZVN3DQo+ICsg ICkNCj4gK3sNCj4gKyAgVUlOVDE2ICBOaWNOdW07DQo+ICsNCj4gKyAgTmljTnVtID0gKFB4ZVN3 LT5JRmNudCB8IFB4ZVN3LT5JRmNudEV4dCA8PCA4KTsNCj4gKw0KPiArICBpZiAoTmljID09IE5V TEwpIHsNCj4gKyAgICBpZiAoTmljTnVtID4gMCkgew0KPiArICAgICAgTmljTnVtLS07DQo+ICsg ICAgfQ0KPiArDQo+ICsgICAgUHhlU3ctPklGY250ICAgID0gKFVJTlQ4KShOaWNOdW0gJiAweEZG KTsgICAgICAgICAgLy8gR2V0IGxvd2VyIGJ5dGUNCj4gKyAgICBQeGVTdy0+SUZjbnRFeHQgPSAo VUlOVDgpKChOaWNOdW0gJiAweEZGMDApID4+IDgpOyAvLyBHZXQgdXBwZXIgYnl0ZQ0KPiArICAg IFB4ZVN3LT5GdWRnZSAgICA9IChVSU5UOCkoUHhlU3ctPkZ1ZGdlIC0gQ2FsY3VsYXRlU3VtOCAo KFZPSUQgKilQeGVTdywNCj4gUHhlU3ctPkxlbikpOw0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0K PiArDQo+ICsgIE5pY051bSsrOw0KPiArDQo+ICsgIFB4ZVN3LT5JRmNudCAgICA9IChVSU5UOCko TmljTnVtICYgMHhGRik7ICAgICAgICAgIC8vIEdldCBsb3dlciBieXRlDQo+ICsgIFB4ZVN3LT5J RmNudEV4dCA9IChVSU5UOCkoKE5pY051bSAmIDB4RkYwMCkgPj4gOCk7IC8vIEdldCB1cHBlciBi eXRlDQo+ICsgIFB4ZVN3LT5GdWRnZSAgICA9IChVSU5UOCkoUHhlU3ctPkZ1ZGdlIC0gQ2FsY3Vs YXRlU3VtOCAoKFZPSUQgKilQeGVTdywNCj4gUHhlU3ctPkxlbikpOw0KPiArfQ0KPiArDQo+ICsv KioNCj4gKyAgVU5ESSBBUEkgdGFibGUgZW50cnkuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2Ri ICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKw0KPiArKiov DQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1VuZGlBcGlFbnRyeSAoDQo+ICsgIElOICBV SU5UNjQgIENkYg0KPiArICApDQo+ICt7DQo+ICsgIFBYRV9DREIgICAqQ2RiUHRyOw0KPiArICBO SUNfREFUQSAgKk5pYzsNCj4gKw0KPiArICBpZiAoQ2RiID09IDApIHsNCj4gKyAgICByZXR1cm4g RUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICB9DQo+ICsNCj4gKyAgQ2RiUHRyID0gKFBYRV9D REIgKikoVUlOVE4pQ2RiOw0KPiArICBOaWMgICAgPSAmKGdMYW5EZXZpY2VMaXN0W0NkYlB0ci0+ SUZudW1dLT5OaWNJbmZvKTsNCj4gKyAgZ1VuZGlBcGlUYWJsZVtDZGJQdHItPk9wQ29kZV0oQ2Ri UHRyLCBOaWMpOw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ICsNCj4gKy8qKg0K PiArICBNYXAgdmlydHVhbCBtZW1vcnkgYWRkcmVzcyBmb3IgRE1BLiBUaGlzIGZpZWxkIGNhbiBi ZSBzZXQgdG8NCj4gKyAgemVybyBpZiB0aGVyZSBpcyBubyBtYXBwaW5nIHNlcnZpY2UuDQo+ICsN Cj4gKyAgQHBhcmFtW2luXSAgTmljICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsg aW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKyAgQHBhcmFtW2luXSAgTWVtQWRkciAgICAg ICBWaXJ0dWFsIGFkZHJlc3MgdG8gYmUgbWFwcGVkLg0KPiArICBAcGFyYW1baW5dICBTaXplICAg ICAgICAgIFNpemUgb2YgbWVtb3J5IHRvIGJlIG1hcHBlZC4NCj4gKyAgQHBhcmFtW2luXSAgRGly ZWN0aW9uICAgICBEaXJlY3Rpb24gb2YgZGF0YSBmbG93IGZvciB0aGlzIG1lbW9yeSdzIHVzYWdl Og0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdS0+ZGV2aWNlLCBkZXZpY2UtPmNw dSBvciBib3RoIHdheXMuDQo+ICsgIEBwYXJhbVtvdXRdIE1hcHBlZEFkZHIgICAgUG9pbnRlciB0 byByZXR1cm4gdGhlIG1hcHBlZCBkZXZpY2UgYWRkcmVzcy4NCj4gKw0KPiArKiovDQo+ICtVSU5U Tg0KPiArTWFwSXQgKA0KPiArICBJTiBOSUNfREFUQSAgKk5pYywNCj4gKyAgSU4gVUlOVDY0ICAg IE1lbUFkZHIsDQo+ICsgIElOIFVJTlQzMiAgICBTaXplLA0KPiArICBJTiBVSU5UMzIgICAgRGly ZWN0aW9uLA0KPiArICBPVVQgVUlOVDY0ICAgTWFwcGVkQWRkcg0KPiArICApDQo+ICt7DQo+ICsg IFVJTlQ2NCAgKlBoeUFkZHI7DQo+ICsNCj4gKyAgUGh5QWRkciA9IChVSU5UNjQgKikoVUlOVE4p TWFwcGVkQWRkcjsNCj4gKw0KPiArICBpZiAoTmljLT5QeGVTdGFydC5NYXBfTWVtID09IDApIHsN Cj4gKyAgICAqUGh5QWRkciA9IE1lbUFkZHI7DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgKCh2b2lk ICgqKShVSU5UNjQsIFVJTlQ2NCwgVUlOVDMyLCBVSU5UMzIsIFVJTlQ2NCkpKFVJTlROKSBOaWMt DQo+ID5QeGVTdGFydC5NYXBfTWVtKSgNCj4gKyAgTmljLT5QeGVTdGFydC5VbmlxdWVfSUQsDQo+ ICsgIE1lbUFkZHIsDQo+ICsgIFNpemUsDQo+ICsgIERpcmVjdGlvbiwNCj4gKyAgTWFwcGVkQWRk cg0KPiArICApOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIFBYRV9TVEFUQ09ERV9TVUNDRVNT Ow0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVW4tbWFwIHByZXZpb3VzbHkgbWFwcGVkIHZpcnR1 YWwgbWVtb3J5IGFkZHJlc3MuIFRoaXMgZmllbGQgY2FuIGJlIHNldA0KPiArICB0byB6ZXJvIG9u bHkgaWYgdGhlIE1hcF9NZW0oKSBzZXJ2aWNlIGlzIGFsc28gc2V0IHRvIHplcm8uDQo+ICsNCj4g KyAgQHBhcmFtW2luXSAgTmljICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50 ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKyAgQHBhcmFtW2luXSAgTWVtQWRkciAgICAgICBW aXJ0dWFsIGFkZHJlc3MgdG8gYmUgbWFwcGVkLg0KPiArICBAcGFyYW1baW5dICBTaXplICAgICAg ICAgIFNpemUgb2YgbWVtb3J5IHRvIGJlIG1hcHBlZC4NCj4gKyAgQHBhcmFtW2luXSAgRGlyZWN0 aW9uICAgICBEaXJlY3Rpb24gb2YgZGF0YSBmbG93IGZvciB0aGlzIG1lbW9yeSdzIHVzYWdlOg0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdS0+ZGV2aWNlLCBkZXZpY2UtPmNwdSBv ciBib3RoIHdheXMuDQo+ICsgIEBwYXJhbVtpbl0gIE1hcHBlZEFkZHIgICAgUG9pbnRlciB0byBy ZXR1cm4gdGhlIG1hcHBlZCBkZXZpY2UgYWRkcmVzcy4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ ICtVbk1hcEl0ICgNCj4gKyAgSU4gTklDX0RBVEEgICpOaWMsDQo+ICsgIElOIFVJTlQ2NCAgICBN ZW1BZGRyLA0KPiArICBJTiBVSU5UMzIgICAgU2l6ZSwNCj4gKyAgSU4gVUlOVDMyICAgIERpcmVj dGlvbiwNCj4gKyAgSU4gVUlOVDY0ICAgIE1hcHBlZEFkZHINCj4gKyAgKQ0KPiArew0KPiArICBp ZiAoTmljLT5QeGVTdGFydC5Vbk1hcF9NZW0gIT0gMCkgew0KPiArICAgICgodm9pZCAoKikoVUlO VDY0LCBVSU5UNjQsIFVJTlQzMiwgVUlOVDMyLCBVSU5UNjQpKShVSU5UTikgTmljLQ0KPiA+UHhl U3RhcnQuVW5NYXBfTWVtKSgNCj4gKyAgTmljLT5QeGVTdGFydC5VbmlxdWVfSUQsDQo+ICsgIE1l bUFkZHIsDQo+ICsgIFNpemUsDQo+ICsgIERpcmVjdGlvbiwNCj4gKyAgTWFwcGVkQWRkcg0KPiAr ICApOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuOw0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEvTWRl TW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9Vc2JSbmRpcy9Db21wb25lbnROYW1lLmMNCj4g Yi9NZGVNb2R1bGVQa2cvQnVzL1VzYi9Vc2JOZXR3b3JrL1VzYlJuZGlzL0NvbXBvbmVudE5hbWUu Yw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi5iOWJhMTcwYzEz DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29y ay9Vc2JSbmRpcy9Db21wb25lbnROYW1lLmMNCj4gQEAgLTAsMCArMSwxNzIgQEANCj4gKy8qKiBA ZmlsZQ0KPiArICBUaGlzIGZpbGUgY29udGFpbnMgY29kZSBmb3IgVVNCIFJORElTIERyaXZlciBD b21wb25lbnQNCj4gKyAgTmFtZSBkZWZpbml0aW9ucw0KPiArDQo+ICsgIENvcHlyaWdodCAoYykg MjAyMywgQW1lcmljYW4gTWVnYXRyZW5kcyBJbnRlcm5hdGlvbmFsIExMQy4gQWxsIHJpZ2h0cw0K PiByZXNlcnZlZC48QlI+DQo+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1 c2UtUGF0ZW50DQo+ICsqKi8NCj4gKw0KPiArI2luY2x1ZGUgIlVzYlJuZGlzLmgiDQo+ICsNCj4g K0dMT0JBTF9SRU1PVkVfSUZfVU5SRUZFUkVOQ0VEIEVGSV9VTklDT0RFX1NUUklOR19UQUJMRQ0K PiBnVXNiUm5kaXNEcml2ZXJOYW1lVGFibGVbXSA9IHsNCj4gKyAgew0KPiArICAgICJlbmc7ZW4i LA0KPiArICAgIEwiVVNCIFJORElTIERyaXZlciINCj4gKyAgfSwNCj4gKyAgew0KPiArICAgIE5V TEwsDQo+ICsgICAgTlVMTA0KPiArICB9DQo+ICt9Ow0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtF RklBUEkNCj4gK1VzYlJuZGlzQ29tcG9uZW50TmFtZUdldERyaXZlck5hbWUgKA0KPiArICBJTiAg RUZJX0NPTVBPTkVOVF9OQU1FX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gIENIQVI4ICAgICAg ICAgICAgICAgICAgICAgICAgKkxhbmd1YWdlLA0KPiArICBPVVQgQ0hBUjE2ICAgICAgICAgICAg ICAgICAgICAgICAqKkRyaXZlck5hbWUNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiAr RUZJQVBJDQo+ICtVc2JSbmRpc0NvbXBvbmVudE5hbWVHZXRDb250cm9sbGVyTmFtZSAoDQo+ICsg IElOIEVGSV9DT01QT05FTlRfTkFNRV9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIEVGSV9IQU5E TEUgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlciwNCj4gKyAgSU4gRUZJX0hBTkRMRSAgICAg ICAgICAgICAgICAgICBDaGlsZEhhbmRsZSAgICAgICAgT1BUSU9OQUwsDQo+ICsgIElOIENIQVI4 ICAgICAgICAgICAgICAgICAgICAgICAgKkxhbmd1YWdlLA0KPiArICBPVVQgQ0hBUjE2ICAgICAg ICAgICAgICAgICAgICAgICoqQ29udHJvbGxlck5hbWUNCj4gKyAgKTsNCj4gKw0KPiArR0xPQkFM X1JFTU9WRV9JRl9VTlJFRkVSRU5DRUQgRUZJX0NPTVBPTkVOVF9OQU1FX1BST1RPQ09MDQo+IGdV c2JSbmRpc0NvbXBvbmVudE5hbWUgPSB7DQo+ICsgIFVzYlJuZGlzQ29tcG9uZW50TmFtZUdldERy aXZlck5hbWUsDQo+ICsgIFVzYlJuZGlzQ29tcG9uZW50TmFtZUdldENvbnRyb2xsZXJOYW1lLA0K PiArICAiZW5nIg0KPiArfTsNCj4gKw0KPiArR0xPQkFMX1JFTU9WRV9JRl9VTlJFRkVSRU5DRUQN Cj4gRUZJX0NPTVBPTkVOVF9OQU1FMl9QUk9UT0NPTCAgZ1VzYlJuZGlzQ29tcG9uZW50TmFtZTIg PSB7DQo+ICsNCj4gKEVGSV9DT01QT05FTlRfTkFNRTJfR0VUX0RSSVZFUl9OQU1FKVVzYlJuZGlz Q29tcG9uZW50TmFtZUdldA0KPiBEcml2ZXJOYW1lLA0KPiArDQo+IChFRklfQ09NUE9ORU5UX05B TUUyX0dFVF9DT05UUk9MTEVSX05BTUUpVXNiUm5kaXNDb21wb25lbnROYQ0KPiBtZUdldENvbnRy b2xsZXJOYW1lLA0KPiArICAiZW4iDQo+ICt9Ow0KPiArDQo+ICsvKioNCj4gKyAgUmV0cmlldmVz IGEgVW5pY29kZSBzdHJpbmcgdGhhdCBpcyB0aGUgdXNlciByZWFkYWJsZSBuYW1lIG9mIHRoZSBk cml2ZXIuDQo+ICsNCj4gKyAgVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIHVzZXIgcmVhZGFi bGUgbmFtZSBvZiBhIGRyaXZlciBpbiB0aGUgZm9ybSBvZiBhDQo+ICsgIFVuaWNvZGUgc3RyaW5n LiBJZiB0aGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGhhcyBhIHVzZXIgcmVhZGFibGUgbmFt ZSBpbg0KPiArICB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5IExhbmd1YWdlLCB0aGVuIGEgcG9p bnRlciB0byB0aGUgZHJpdmVyIG5hbWUgaXMNCj4gKyAgcmV0dXJuZWQgaW4gRHJpdmVyTmFtZSwg YW5kIEVGSV9TVUNDRVNTIGlzIHJldHVybmVkLiBJZiB0aGUgZHJpdmVyIHNwZWNpZmllZA0KPiAr ICBieSBUaGlzIGRvZXMgbm90IHN1cHBvcnQgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5n dWFnZSwNCj4gKyAgdGhlbiBFRklfVU5TVVBQT1JURUQgaXMgcmV0dXJuZWQuDQo+ICsNCj4gKyAg QHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZQ0KPiBFRklfQ09N UE9ORU5UX05BTUUyX1BST1RPQ09MIG9yDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEVGSV9DT01QT05FTlRfTkFNRV9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2lu XSAgTGFuZ3VhZ2UgICAgICAgICAgQSBwb2ludGVyIHRvIGEgTnVsbC10ZXJtaW5hdGVkIEFTQ0lJ IHN0cmluZw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSBpbmRpY2F0 aW5nIHRoZSBsYW5ndWFnZS4gVGhpcyBpcyB0aGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGFuZ3VhZ2Ugb2YgdGhlIGRyaXZlciBuYW1lIHRoYXQgdGhlIGNhbGxlciBpcw0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0aW5nLCBhbmQgaXQgbXVz dCBtYXRjaCBvbmUgb2YgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxh bmd1YWdlcyBzcGVjaWZpZWQgaW4gU3VwcG9ydGVkTGFuZ3VhZ2VzLiBUaGUNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIGxhbmd1YWdlcyBzdXBwb3J0ZWQgYnkg YSBkcml2ZXIgaXMgdXANCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhl IGRyaXZlciB3cml0ZXIuIExhbmd1YWdlIGlzIHNwZWNpZmllZA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbiBSRkMgNDY0NiBvciBJU08gNjM5LTIgbGFuZ3VhZ2UgY29kZSBm b3JtYXQuDQo+ICsgIEBwYXJhbVtvdXRdIERyaXZlck5hbWUgICAgICAgIEEgcG9pbnRlciB0byB0 aGUgVW5pY29kZSBzdHJpbmcgdG8gcmV0dXJuLg0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBUaGlzIFVuaWNvZGUgc3RyaW5nIGlzIHRoZSBuYW1lIG9mIHRoZQ0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgaW4gdGhl IGxhbmd1YWdlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBi eSBMYW5ndWFnZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUg VW5pY29kZSBzdHJpbmcgZm9yIHRoZSBEcml2ZXIgc3BlY2lmaWVkIGJ5DQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFRoaXMgYW5kIHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkg TGFuZ3VhZ2Ugd2FzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmVk IGluIERyaXZlck5hbWUuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIExhbmd1 YWdlIGlzIE5VTEwuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIERyaXZlck5h bWUgaXMgTlVMTC4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgVGhlIGRyaXZl ciBzcGVjaWZpZWQgYnkgVGhpcyBkb2VzIG5vdCBzdXBwb3J0DQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2UuDQo+ICsN Cj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtVc2JSbmRpc0NvbXBvbmVudE5h bWVHZXREcml2ZXJOYW1lICgNCj4gKyAgSU4gIEVGSV9DT01QT05FTlRfTkFNRV9QUk9UT0NPTCAg KlRoaXMsDQo+ICsgIElOICBDSEFSOCAgICAgICAgICAgICAgICAgICAgICAgICpMYW5ndWFnZSwN Cj4gKyAgT1VUIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgKipEcml2ZXJOYW1lDQo+ICsg ICkNCj4gK3sNCj4gKyAgcmV0dXJuIExvb2t1cFVuaWNvZGVTdHJpbmcyICgNCj4gKyAgICAgICAg ICAgTGFuZ3VhZ2UsDQo+ICsgICAgICAgICAgIFRoaXMtPlN1cHBvcnRlZExhbmd1YWdlcywNCj4g KyAgICAgICAgICAgZ1VzYlJuZGlzRHJpdmVyTmFtZVRhYmxlLA0KPiArICAgICAgICAgICBEcml2 ZXJOYW1lLA0KPiArICAgICAgICAgICAoQk9PTEVBTikoVGhpcyA9PSAmZ1VzYlJuZGlzQ29tcG9u ZW50TmFtZSkNCj4gKyAgICAgICAgICAgKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFJldHJp ZXZlcyBhIFVuaWNvZGUgc3RyaW5nIHRoYXQgaXMgdGhlIHVzZXIgcmVhZGFibGUgbmFtZSBvZiB0 aGUgY29udHJvbGxlcg0KPiArICB0aGF0IGlzIGJlaW5nIG1hbmFnZWQgYnkgYSBkcml2ZXIuDQo+ ICsNCj4gKyAgVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIHVzZXIgcmVhZGFibGUgbmFtZSBv ZiB0aGUgY29udHJvbGxlciBzcGVjaWZpZWQgYnkNCj4gKyAgQ29udHJvbGxlckhhbmRsZSBhbmQg Q2hpbGRIYW5kbGUgaW4gdGhlIGZvcm0gb2YgYSBVbmljb2RlIHN0cmluZy4gSWYgdGhlDQo+ICsg IGRyaXZlciBzcGVjaWZpZWQgYnkgVGhpcyBoYXMgYSB1c2VyIHJlYWRhYmxlIG5hbWUgaW4gdGhl IGxhbmd1YWdlIHNwZWNpZmllZA0KPiBieQ0KPiArICBMYW5ndWFnZSwgdGhlbiBhIHBvaW50ZXIg dG8gdGhlIGNvbnRyb2xsZXIgbmFtZSBpcyByZXR1cm5lZCBpbg0KPiBDb250cm9sbGVyTmFtZSwN Cj4gKyAgYW5kIEVGSV9TVUNDRVNTIGlzIHJldHVybmVkLiAgSWYgdGhlIGRyaXZlciBzcGVjaWZp ZWQgYnkgVGhpcyBpcyBub3QgY3VycmVudGx5DQo+ICsgIG1hbmFnaW5nIHRoZSBjb250cm9sbGVy IHNwZWNpZmllZCBieSBDb250cm9sbGVySGFuZGxlIGFuZCBDaGlsZEhhbmRsZSwNCj4gKyAgdGhl biBFRklfVU5TVVBQT1JURUQgaXMgcmV0dXJuZWQuICBJZiB0aGUgZHJpdmVyIHNwZWNpZmllZCBi eSBUaGlzIGRvZXMgbm90DQo+ICsgIHN1cHBvcnQgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieSBM YW5ndWFnZSwgdGhlbiBFRklfVU5TVVBQT1JURUQgaXMNCj4gcmV0dXJuZWQuDQo+ICsNCj4gKyAg QHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZQ0KPiBFRklfQ09N UE9ORU5UX05BTUUyX1BST1RPQ09MIG9yDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEVGSV9DT01QT05FTlRfTkFNRV9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2lu XSAgQ29udHJvbGxlciAgICAgICAgVGhlIGhhbmRsZSBvZiBhIGNvbnRyb2xsZXIgdGhhdCB0aGUg ZHJpdmVyDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBieSBU aGlzIGlzIG1hbmFnaW5nLiAgVGhpcyBoYW5kbGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3BlY2lmaWVzIHRoZSBjb250cm9sbGVyIHdob3NlIG5hbWUgaXMgdG8gYmUNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWQuDQo+ICsgIEBwYXJhbVtp bl0gIENoaWxkSGFuZGxlICAgICAgIFRoZSBoYW5kbGUgb2YgdGhlIGNoaWxkIGNvbnRyb2xsZXIg dG8gcmV0cmlldmUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG5hbWUg b2YuICBUaGlzIGlzIGFuIG9wdGlvbmFsIHBhcmFtZXRlciB0aGF0DQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG1heSBiZSBOVUxMLiAgSXQgd2lsbCBiZSBOVUxMIGZvciBkZXZp Y2UNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVycy4gIEl0IHdpbGwg YWxzbyBiZSBOVUxMIGZvciBhIGJ1cyBkcml2ZXJzDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRoYXQgd2lzaCB0byByZXRyaWV2ZSB0aGUgbmFtZSBvZiB0aGUgYnVzDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuICBJdCB3aWxsIG5vdCBi ZSBOVUxMIGZvciBhIGJ1cw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2 ZXIgdGhhdCB3aXNoZXMgdG8gcmV0cmlldmUgdGhlIG5hbWUgb2YgYQ0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjaGlsZCBjb250cm9sbGVyLg0KPiArICBAcGFyYW1baW5dICBM YW5ndWFnZSAgICAgICAgICBBIHBvaW50ZXIgdG8gYSBOdWxsLXRlcm1pbmF0ZWQgQVNDSUkgc3Ry aW5nDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5IGluZGljYXRpbmcg dGhlIGxhbmd1YWdlLiAgVGhpcyBpcyB0aGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbGFuZ3VhZ2Ugb2YgdGhlIGRyaXZlciBuYW1lIHRoYXQgdGhlIGNhbGxlciBpcw0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0aW5nLCBhbmQgaXQgbXVzdCBt YXRjaCBvbmUgb2YgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1 YWdlcyBzcGVjaWZpZWQgaW4gU3VwcG9ydGVkTGFuZ3VhZ2VzLiBUaGUNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIGxhbmd1YWdlcyBzdXBwb3J0ZWQgYnkgYSBk cml2ZXIgaXMgdXANCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGRy aXZlciB3cml0ZXIuIExhbmd1YWdlIGlzIHNwZWNpZmllZCBpbg0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBSRkMgNDY0NiBvciBJU08gNjM5LTIgbGFuZ3VhZ2UgY29kZSBmb3Jt YXQuDQo+ICsgIEBwYXJhbVtvdXRdIENvbnRyb2xsZXJOYW1lICAgIEEgcG9pbnRlciB0byB0aGUg VW5pY29kZSBzdHJpbmcgdG8gcmV0dXJuLg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBUaGlzIFVuaWNvZGUgc3RyaW5nIGlzIHRoZSBuYW1lIG9mIHRoZQ0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyIHNwZWNpZmllZCBieSBDb250cm9sbGVy SGFuZGxlIGFuZA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGlsZEhhbmRs ZSBpbiB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5DQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIExhbmd1YWdlIGZyb20gdGhlIHBvaW50IG9mIHZpZXcgb2YgdGhlIGRyaXZlcg0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgYnkgVGhpcy4NCj4g Kw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgVW5pY29kZSBzdHJpbmcg Zm9yIHRoZSB1c2VyIHJlYWRhYmxlIG5hbWUNCj4gaW4NCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZSBmb3IgdGhlDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlciBzcGVjaWZpZWQgYnkgVGhp cyB3YXMgcmV0dXJuZWQgaW4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJp dmVyTmFtZS4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgQ29udHJvbGxlckhh bmRsZSBpcyBub3QgYSB2YWxpZA0KPiBFRklfSEFORExFLg0KPiArICBAcmV0dmFsIEVGSV9JTlZB TElEX1BBUkFNRVRFUiBDaGlsZEhhbmRsZSBpcyBub3QgTlVMTCBhbmQgaXQgaXMgbm90IGENCj4g dmFsaWQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX0hBTkRMRS4NCj4g KyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgTGFuZ3VhZ2UgaXMgTlVMTC4NCj4gKyAg QHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgQ29udHJvbGxlck5hbWUgaXMgTlVMTC4NCj4g KyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgVGhlIGRyaXZlciBzcGVjaWZpZWQgYnkg VGhpcyBpcyBub3QgY3VycmVudGx5DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG1hbmFnaW5nIHRoZSBjb250cm9sbGVyIHNwZWNpZmllZCBieQ0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlIGFuZCBDaGlsZEhhbmRsZS4NCj4gKyAg QHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgVGhlIGRyaXZlciBzcGVjaWZpZWQgYnkgVGhp cyBkb2VzIG5vdCBzdXBwb3J0DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo ZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2UuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NU QVRVUw0KPiArRUZJQVBJDQo+ICtVc2JSbmRpc0NvbXBvbmVudE5hbWVHZXRDb250cm9sbGVyTmFt ZSAoDQo+ICsgIElOIEVGSV9DT01QT05FTlRfTkFNRV9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElO IEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlciwNCj4gKyAgSU4gRUZJX0hB TkRMRSAgICAgICAgICAgICAgICAgICBDaGlsZEhhbmRsZSAgICAgICAgT1BUSU9OQUwsDQo+ICsg IElOIENIQVI4ICAgICAgICAgICAgICAgICAgICAgICAgKkxhbmd1YWdlLA0KPiArICBPVVQgQ0hB UjE2ICAgICAgICAgICAgICAgICAgICAgICoqQ29udHJvbGxlck5hbWUNCj4gKyAgKQ0KPiArew0K PiArICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEvTWRlTW9k dWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9Vc2JSbmRpcy9Vc2JSbmRpcy5jDQo+IGIvTWRlTW9k dWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9Vc2JSbmRpcy9Vc2JSbmRpcy5jDQo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAuLjljNzRkNzNmNzgNCj4gLS0tIC9kZXYv bnVsbA0KPiArKysgYi9NZGVNb2R1bGVQa2cvQnVzL1VzYi9Vc2JOZXR3b3JrL1VzYlJuZGlzL1Vz YlJuZGlzLmMNCj4gQEAgLTAsMCArMSw4ODYgQEANCj4gKy8qKiBAZmlsZQ0KPiArICBUaGlzIGZp bGUgY29udGFpbnMgY29kZSBmb3IgVVNCIFJlbW90ZSBOZXR3b3JrIERyaXZlcg0KPiArICBJbnRl cmZhY2UgU3BlYy4gRHJpdmVyIEJpbmRpbmcNCj4gKw0KPiArICBDb3B5cmlnaHQgKGMpIDIwMjMs IEFtZXJpY2FuIE1lZ2F0cmVuZHMgSW50ZXJuYXRpb25hbCBMTEMuIEFsbCByaWdodHMNCj4gcmVz ZXJ2ZWQuPEJSPg0KPiArICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBh dGVudA0KPiArKiovDQo+ICsNCj4gKyNpbmNsdWRlICJVc2JSbmRpcy5oIg0KPiArDQo+ICtFRklf RFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgIGdVc2JSbmRpc0RyaXZlckJpbmRpbmcgPSB7DQo+ICsg IFVzYlJuZGlzRHJpdmVyU3VwcG9ydGVkLA0KPiArICBVc2JSbmRpc0RyaXZlclN0YXJ0LA0KPiAr ICBVc2JSbmRpc0RyaXZlclN0b3AsDQo+ICsgIFVTQl9STkRJU19EUklWRVJfVkVSU0lPTiwNCj4g KyAgTlVMTCwNCj4gKyAgTlVMTA0KPiArfTsNCj4gKw0KPiArLyoqDQo+ICsgIENoZWNrIGlmIHRo aXMgaW50ZXJmYWNlIGlzIFVTQiBSbmRpcyBTdWJUeXBlDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAg VXNiSW8gIEEgcG9pbnRlciB0byB0aGUgRUZJX1VTQl9JT19QUk9UT0NPTCBpbnN0YW5jZS4NCj4g Kw0KPiArICBAcmV0dmFsIFRSVUUgICBVU0IgUm5kaXMgU3ViVHlwZS4NCj4gKyAgQHJldHZhbCBG QUxTRSAgTm90IFVTQiBSbmRpcyBTdWJUeXBlLg0KPiArDQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4g K0lzU3VwcG9ydGVkRGV2aWNlICgNCj4gKyAgSU4gRUZJX1VTQl9JT19QUk9UT0NPTCAgKlVzYklv DQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgU3RhdHVz Ow0KPiArICBFRklfVVNCX0lOVEVSRkFDRV9ERVNDUklQVE9SICBJbnRlcmZhY2VEZXNjcmlwdG9y Ow0KPiArDQo+ICsgIFN0YXR1cyA9IFVzYklvLT5Vc2JHZXRJbnRlcmZhY2VEZXNjcmlwdG9yIChV c2JJbywgJkludGVyZmFjZURlc2NyaXB0b3IpOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiArICB9DQo+ICsNCj4gKyAgLy8gQ2hlY2sgc3Bl Y2lmaWMgZGV2aWNlL1JORElTIGFuZCBDREMtREFUQQ0KPiArICBpZiAoKChJbnRlcmZhY2VEZXNj cmlwdG9yLkludGVyZmFjZUNsYXNzID09IDB4MikgJiYNCj4gKyAgICAgICAoSW50ZXJmYWNlRGVz Y3JpcHRvci5JbnRlcmZhY2VTdWJDbGFzcyA9PSAweDIpICYmDQo+ICsgICAgICAgKEludGVyZmFj ZURlc2NyaXB0b3IuSW50ZXJmYWNlUHJvdG9jb2wgPT0gMHhGRikpIHx8IFwNCj4gKyAgICAgICgo SW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VDbGFzcyA9PSAweEVGKSAmJg0KPiArICAgICAg IChJbnRlcmZhY2VEZXNjcmlwdG9yLkludGVyZmFjZVN1YkNsYXNzID09IDB4NCkgJiYNCj4gKyAg ICAgICAoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VQcm90b2NvbCA9PSAweDEpKSB8fCBc DQo+ICsgICAgICAoKEludGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlQ2xhc3MgPT0gMHhBKSAm Jg0KPiArICAgICAgIChJbnRlcmZhY2VEZXNjcmlwdG9yLkludGVyZmFjZVN1YkNsYXNzID09IDB4 MCkgJiYNCj4gKyAgICAgICAoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VQcm90b2NvbCA9 PSAweDAwKSkNCj4gKyAgICAgICkNCj4gKyAgew0KPiArICAgIHJldHVybiBUUlVFOw0KPiArICB9 DQo+ICsNCj4gKyAgcmV0dXJuIEZBTFNFOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgQ2hlY2sg aWYgdGhpcyBpbnRlcmZhY2UgaXMgVVNCIFJuZGlzIFN1YlR5cGUgYnV0IG5vdCBDREMgRGF0YSBp bnRlcmZhY2UNCj4gKw0KPiArICBAcGFyYW1baW5dICBVc2JJbyAgQSBwb2ludGVyIHRvIHRoZSBF RklfVVNCX0lPX1BST1RPQ09MIGluc3RhbmNlLg0KPiArDQo+ICsgIEByZXR2YWwgVFJVRSAgIFVT QiBSbmRpcyBTdWJUeXBlLg0KPiArICBAcmV0dmFsIEZBTFNFICBOb3QgVVNCIFJuZGlzIFN1YlR5 cGUuDQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK0lzUm5kaXNJbnRlcmZhY2UgKA0KPiArICBJTiBF RklfVVNCX0lPX1BST1RPQ09MICAqVXNiSW8NCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVT ICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIEVGSV9VU0JfSU5URVJGQUNFX0RFU0NS SVBUT1IgIEludGVyZmFjZURlc2NyaXB0b3I7DQo+ICsNCj4gKyAgU3RhdHVzID0gVXNiSW8tPlVz YkdldEludGVyZmFjZURlc2NyaXB0b3IgKFVzYklvLCAmSW50ZXJmYWNlRGVzY3JpcHRvcik7DQo+ ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gRkFMU0U7DQo+ICsg IH0NCj4gKw0KPiArICAvLyBDaGVjayBmb3Igc3BlY2lmaWMgZGV2aWNlL1JORElTIGFuZCBDREMt REFUQQ0KPiArICBpZiAoKChJbnRlcmZhY2VEZXNjcmlwdG9yLkludGVyZmFjZUNsYXNzID09IDB4 MikgJiYNCj4gKyAgICAgICAoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VTdWJDbGFzcyA9 PSAweDIpICYmDQo+ICsgICAgICAgKEludGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlUHJvdG9j b2wgPT0gMHhGRikpIHx8IFwNCj4gKyAgICAgICgoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZh Y2VDbGFzcyA9PSAweEVGKSAmJg0KPiArICAgICAgIChJbnRlcmZhY2VEZXNjcmlwdG9yLkludGVy ZmFjZVN1YkNsYXNzID09IDB4NCkgJiYNCj4gKyAgICAgICAoSW50ZXJmYWNlRGVzY3JpcHRvci5J bnRlcmZhY2VQcm90b2NvbCA9PSAweDEpKQ0KPiArICAgICAgKQ0KPiArICB7DQo+ICsgICAgcmV0 dXJuIFRSVUU7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gRkFMU0U7DQo+ICt9DQo+ICsNCj4g Ky8qKg0KPiArICBDaGVjayBpZiB0aGUgVVNCIFJORElTIGFuZCBVU0IgQ0RDIERhdGEgaW50ZXJm YWNlcyBhcmUgZnJvbSB0aGUgc2FtZQ0KPiBkZXZpY2UuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAg VXNiUm5kaXNEYXRhUGF0aCAgQSBwb2ludGVyIHRvIHRoZQ0KPiBFRklfREVWSUNFX1BBVEhfUFJP VE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIFVzYkNkY0RhdGFQYXRoICAgIEEgcG9p bnRlciB0byB0aGUNCj4gRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MIGluc3RhbmNlLg0KPiArDQo+ ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIElzIHRoZSBzYW1lIGRldmljZS4NCj4g KyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgSXMgbm90IHRoZSBzYW1lIGRldmljZS4N Cj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtJc1NhbWVEZXZpY2UgKA0KPiArICBJTiAg RUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAqVXNiUm5kaXNEYXRhUGF0aCwNCj4gKyAgSU4gIEVG SV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgKlVzYkNkY0RhdGFQYXRoDQo+ICsgICkNCj4gK3sNCj4g KyAgREVCVUcgKChERUJVR19WRVJCT1NFLCAiSXNTYW1lRGV2aWNlIEVudHJ5IFxuIikpOw0KPiAr ICB3aGlsZSAoMSkgew0KPiArICAgIGlmIChJc0RldmljZVBhdGhFbmQgKE5leHREZXZpY2VQYXRo Tm9kZSAoVXNiUm5kaXNEYXRhUGF0aCkpKSB7DQo+ICsgICAgICBpZiAoKChVU0JfREVWSUNFX1BB VEggKilVc2JSbmRpc0RhdGFQYXRoKS0+UGFyZW50UG9ydE51bWJlciA9PQ0KPiArICAgICAgICAg ICgoVVNCX0RFVklDRV9QQVRIICopVXNiQ2RjRGF0YVBhdGgpLT5QYXJlbnRQb3J0TnVtYmVyKQ0K PiArICAgICAgew0KPiArICAgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICsgICAgICB9IGVs c2Ugew0KPiArICAgICAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiArICAgICAgfQ0KPiAr ICAgIH0gZWxzZSB7DQo+ICsgICAgICBpZiAoQ29tcGFyZU1lbSAoVXNiQ2RjRGF0YVBhdGgsIFVz YlJuZGlzRGF0YVBhdGgsIHNpemVvZg0KPiAoRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MKSkgIT0g MCkgew0KPiArICAgICAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiArICAgICAgfQ0KPiAr DQo+ICsgICAgICBVc2JSbmRpc0RhdGFQYXRoID0gTmV4dERldmljZVBhdGhOb2RlIChVc2JSbmRp c0RhdGFQYXRoKTsNCj4gKyAgICAgIFVzYkNkY0RhdGFQYXRoICAgPSBOZXh0RGV2aWNlUGF0aE5v ZGUgKFVzYkNkY0RhdGFQYXRoKTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBERUJVRyAo KERFQlVHX1ZFUkJPU0UsICJJc1NhbWVEZXZpY2UgRXhpdCBcbiIpKTsNCj4gK30NCj4gKw0KPiAr LyoqDQo+ICsgIENoZWNrIGlmIHRoZSBVU0IgQ0RDIERhdGEoVXNiSW8pIGluc3RhbGxlZCBhbmQg cmV0dXJuIFVTQiBDREMgRGF0YSBIYW5kbGUuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVXNiSW8g IEEgcG9pbnRlciB0byB0aGUgRUZJX1VTQl9JT19QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKw0KPiAr ICBAcmV0dmFsIFRSVUUgICAgICAgICAgICAgIFVTQiBDREMgRGF0YShVc2JJbykgaW5zdGFsbGVk Lg0KPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAgICAgIFVTQiBDREMgRGF0YShVc2JJbykgZGlk IG5vdCBpbnN0YWxsZWQuDQo+ICsNCj4gKyoqLw0KPiArQk9PTEVBTg0KPiArSXNVc2JDZGNEYXRh ICgNCj4gKyAgSU4gRUZJX1VTQl9JT19QUk9UT0NPTCAgKlVzYklvDQo+ICsgICkNCj4gK3sNCj4g KyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBFRklfVVNCX0lO VEVSRkFDRV9ERVNDUklQVE9SICBJbnRlcmZhY2VEZXNjcmlwdG9yOw0KPiArDQo+ICsgIFN0YXR1 cyA9IFVzYklvLT5Vc2JHZXRJbnRlcmZhY2VEZXNjcmlwdG9yIChVc2JJbywgJkludGVyZmFjZURl c2NyaXB0b3IpOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJu IEZBTFNFOw0KPiArICB9DQo+ICsNCj4gKyAgLy8gQ2hlY2sgZm9yIENEQy1EQVRBDQo+ICsgIGlm ICgoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VDbGFzcyA9PSAweEEpICYmDQo+ICsgICAg ICAoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VTdWJDbGFzcyA9PSAweDApICYmDQo+ICsg ICAgICAoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VQcm90b2NvbCA9PSAweDApKQ0KPiAr ICB7DQo+ICsgICAgcmV0dXJuIFRSVUU7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gRkFMU0U7 DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBDaGVjayBpZiB0aGUgVVNCIFJuZGlzKFVzYklvKSBp bnN0YWxsZWQNCj4gKw0KPiArICBAcGFyYW1baW5dICBVc2JJbyAgICAgICAgQSBwb2ludGVyIHRv IHRoZSBFRklfVVNCX0lPX1BST1RPQ09MIGluc3RhbmNlLg0KPiArDQo+ICsgIEByZXR2YWwgVFJV RSAgICAgICAgICAgICAgVVNCIFJuZGlzKFVzYklvKSBpbnN0YWxsZWQuDQo+ICsgIEByZXR2YWwg RkFMU0UgICAgICAgICAgICAgVVNCIFJuZGlzKFVzYklvKSBkaWQgbm90IGluc3RhbGxlZC4NCj4g Kw0KPiArKiovDQo+ICtCT09MRUFODQo+ICtJc1VzYlJuZGlzICgNCj4gKyAgSU4gRUZJX1VTQl9J T19QUk9UT0NPTCAgKlVzYklvDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAg ICAgICAgICAgICAgU3RhdHVzOw0KPiArICBFRklfVVNCX0lOVEVSRkFDRV9ERVNDUklQVE9SICBJ bnRlcmZhY2VEZXNjcmlwdG9yOw0KPiArDQo+ICsgIFN0YXR1cyA9IFVzYklvLT5Vc2JHZXRJbnRl cmZhY2VEZXNjcmlwdG9yIChVc2JJbywgJkludGVyZmFjZURlc2NyaXB0b3IpOw0KPiArICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiArICB9DQo+ICsN Cj4gKyAgLy8gQ2hlY2sgZm9yIFJuZGlzDQo+ICsgIGlmICgoSW50ZXJmYWNlRGVzY3JpcHRvci5J bnRlcmZhY2VDbGFzcyA9PSAweDIpICYmDQo+ICsgICAgICAoSW50ZXJmYWNlRGVzY3JpcHRvci5J bnRlcmZhY2VTdWJDbGFzcyA9PSAweDIpICYmDQo+ICsgICAgICAoSW50ZXJmYWNlRGVzY3JpcHRv ci5JbnRlcmZhY2VQcm90b2NvbCA9PSAweEZGKSkNCj4gKyAgew0KPiArICAgIHJldHVybiBUUlVF Ow0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIEZBTFNFOw0KPiArfQ0KPiArDQo+ICsvKioNCj4g KyAgQ29udHJvbCBjb21lcyBoZXJlIHdoZW4gYSBDREMgZGV2aWNlIGlzIGZvdW5kLkNoZWNrIGlm IGEgUk5ESVMgaW50ZXJmYWNlIGlzDQo+IGFscmVhZHkgZm91bmQgZm9yIHRoaXMgZGV2aWNlIG9y IG5vdC4NCj4gKyAgRm9yIG9uZSBkZXZpY2UgdHdvIFVTQklPIHdpbGwgYmUgaW5zdGFsbGVkIGVh Y2ggZm9yIENEQyBhbmQgUk5ESVMgaW50ZXJmYWNlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFVz YkV0aFBhdGggICAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09M DQo+IGluc3RhbmNlLg0KPiArICBAcGFyYW1bb3V0XSBVc2JSbmRpc0RldmljZSAgICBBIHBvaW50 ZXIgdG8gdGhlIFVTQl9STkRJU19ERVZJQ0UgRGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgICAgICAgICAgIFRoZSBVU0JfUk5ESVNfREVWSUNFIG1hdGNoaW5nIHRoaXMgQ0RD DQo+IERhdGEgaXMgZm91bmQuDQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICAg VGhlIFVTQl9STkRJU19ERVZJQ0UgbWF0Y2hpbmcgdGhpcyBDREMNCj4gRGF0YSBpcyBub3QgZm91 bmQuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArVXBkYXRlUm5kaXNEZXZpY2UgKA0K PiArICBJTiAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAqVXNiQ2RjRGF0YVBhdGgsDQo+ICsg IE9VVCBVU0JfUk5ESVNfREVWSUNFICAgICAgICAgICoqVXNiUm5kaXNEZXZpY2UNCj4gKyAgKQ0K PiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgVUlO VE4gICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gKyAgVUlOVE4gICAgICAgICAgICAg ICAgICAgICAgICBIYW5kbGVDb3VudDsNCj4gKyAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAg ICAqSGFuZGxlQnVmZmVyOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpVc2JF dGhEZXZpY2U7DQo+ICsgIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgKlVzYlJuZGlzRGF0 YVBhdGg7DQo+ICsgIEVGSV9VU0JfSU9fUFJPVE9DT0wgICAgICAgICAgKlVzYklvOw0KPiArICBC T09MRUFOICAgICAgICAgICAgICAgICAgICAgIElzUm5kaXNJbnRlcmZhY2VGbGFnOw0KPiArDQo+ ICsgIElzUm5kaXNJbnRlcmZhY2VGbGFnID0gRkFMU0U7DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JT LT5Mb2NhdGVIYW5kbGVCdWZmZXIgKA0KPiArICAgICAgICAgICAgICAgICAgQnlQcm90b2NvbCwN Cj4gKyAgICAgICAgICAgICAgICAgICZnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQsDQo+ICsgICAg ICAgICAgICAgICAgICBOVUxMLA0KPiArICAgICAgICAgICAgICAgICAgJkhhbmRsZUNvdW50LA0K PiArICAgICAgICAgICAgICAgICAgJkhhbmRsZUJ1ZmZlcg0KPiArICAgICAgICAgICAgICAgICAg KTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7 DQo+ICsgIH0NCj4gKw0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBIYW5kbGVDb3VudDsg SW5kZXgrKykgew0KPiArICAgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wgKA0KPiArICAg ICAgICAgICAgICAgICAgICBIYW5kbGVCdWZmZXJbSW5kZXhdLA0KPiArICAgICAgICAgICAgICAg ICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgICAo Vk9JRCAqKikmVXNiRXRoRGV2aWNlDQo+ICsgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgY29udGludWU7DQo+ICsgICAgfQ0K PiArDQo+ICsgICAgU3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2NvbCAoDQo+ICsgICAgICAgICAg ICAgICAgICAgIEhhbmRsZUJ1ZmZlcltJbmRleF0sDQo+ICsgICAgICAgICAgICAgICAgICAgICZn RWZpVXNiSW9Qcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZV c2JJbw0KPiArICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0 YXR1cykpIHsNCj4gKyAgICAgIGNvbnRpbnVlOw0KPiArICAgIH0NCj4gKw0KPiArICAgIElzUm5k aXNJbnRlcmZhY2VGbGFnID0gSXNSbmRpc0ludGVyZmFjZSAoVXNiSW8pOw0KPiArICAgIGlmIChJ c1JuZGlzSW50ZXJmYWNlRmxhZyA9PSBGQUxTRSkgew0KPiArICAgICAgY29udGludWU7DQo+ICsg ICAgfQ0KPiArDQo+ICsgICAgU3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2NvbCAoDQo+ICsgICAg ICAgICAgICAgICAgICAgIEhhbmRsZUJ1ZmZlcltJbmRleF0sDQo+ICsgICAgICAgICAgICAgICAg ICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgICAg KFZPSUQgKiopJlVzYlJuZGlzRGF0YVBhdGgNCj4gKyAgICAgICAgICAgICAgICAgICAgKTsNCj4g KyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBjb250aW51ZTsNCj4gKyAg ICB9DQo+ICsNCj4gKyAgICBTdGF0dXMgPSBJc1NhbWVEZXZpY2UgKFVzYlJuZGlzRGF0YVBhdGgs IFVzYkNkY0RhdGFQYXRoKTsNCj4gKw0KPiArICAgIERFQlVHICgoREVCVUdfVkVSQk9TRSwgIlJu ZGlzIElzU2FtZURldmljZSAlclxuIiwgU3RhdHVzKSk7DQo+ICsNCj4gKyAgICBpZiAoIUVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgKlVzYlJuZGlzRGV2aWNlID0gVVNCX1JORElTX0RF VklDRV9GUk9NX1RISVMgKFVzYkV0aERldmljZSk7DQo+ICsgICAgICBGcmVlUG9vbCAoSGFuZGxl QnVmZmVyKTsNCj4gKyAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gKyAgICB9DQo+ICsgIH0g ICAvLyBFbmQgb2YgRm9yIGxvb3ANCj4gKw0KPiArICBGcmVlUG9vbCAoSGFuZGxlQnVmZmVyKTsN Cj4gKyAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArDQo+ICsg IEZvciB0aGUgZ2l2ZW4gUm5kaXMgRGV2aWNlLCBmaW5kIGEgbWF0Y2hpbmcgQ0RDIGRldmljZSBh bHJlYWR5IGV4aXN0cyBvciBub3QuDQo+IElmIGZvdW5kIHVwZGF0ZSB0aGUgaGFuZGxlDQo+ICsg IGFuZCBVc2JJTyBwcm90b2NvbC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBVc2JSbmRpc0Rldmlj ZSAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBVU0JfUk5ESVNfREVWSUNFIGRhdGEuDQo+ICsNCj4g KyoqLw0KPiArVk9JRA0KPiArRmluZE1hdGNoaW5nQ2RjRGF0YSAoDQo+ICsgIElOIFVTQl9STkRJ U19ERVZJQ0UgICpVc2JSbmRpc0RldmljZQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMg ICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIElu ZGV4Ow0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEhhbmRsZUNvdW50Ow0KPiArICBF RklfSEFORExFICAgICAgICAgICAgICAgICpIYW5kbGVCdWZmZXI7DQo+ICsgIEVGSV9VU0JfSU9f UFJPVE9DT0wgICAgICAgKlVzYklvOw0KPiArICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICpV c2JSbmRpc0RhdGFQYXRoOw0KPiArICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICpVc2JDZGNE YXRhUGF0aDsNCj4gKw0KPiArICAvLyBGaW5kIHRoZSBwYXJlbnQgUk5ESVMgYW5kIHVwZGF0ZSB0 aGUgVXNiSW8gZm9yIHRoZSBDREMgZGV2aWNlDQo+ICsgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJv dG9jb2wgKA0KPiArICAgICAgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPlVzYlJuZGlzSGFu ZGxlLA0KPiArICAgICAgICAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0K PiArICAgICAgICAgICAgICAgICAgKFZPSUQgKiopJlVzYlJuZGlzRGF0YVBhdGgNCj4gKyAgICAg ICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiAr ICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+TG9jYXRlSGFuZGxl QnVmZmVyICgNCj4gKyAgICAgICAgICAgICAgICAgIEJ5UHJvdG9jb2wsDQo+ICsgICAgICAgICAg ICAgICAgICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgTlVM TCwNCj4gKyAgICAgICAgICAgICAgICAgICZIYW5kbGVDb3VudCwNCj4gKyAgICAgICAgICAgICAg ICAgICZIYW5kbGVCdWZmZXINCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBmb3Ig KEluZGV4ID0gMDsgSW5kZXggPCBIYW5kbGVDb3VudDsgSW5kZXgrKykgew0KPiArICAgIFN0YXR1 cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgICAgICAgICBIYW5kbGVC dWZmZXJbSW5kZXhdLA0KPiArICAgICAgICAgICAgICAgICAgICAmZ0VmaVVzYklvUHJvdG9jb2xH dWlkLA0KPiArICAgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmVXNiSW8NCj4gKyAgICAgICAg ICAgICAgICAgICAgKTsNCj4gKyAgICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiArDQo+ ICsgICAgaWYgKElzVXNiQ2RjRGF0YSAoVXNiSW8pKSB7DQo+ICsgICAgICBERUJVRyAoKERFQlVH X1ZFUkJPU0UsICJSbmRpcyBGaW5kTWF0Y2hpbmdDZGNEYXRhIENEQ0RhdGENCj4gaW50ZXJmYWNl IGZvdW5kXG4iKSk7DQo+ICsNCj4gKyAgICAgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wg KA0KPiArICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZUJ1ZmZlcltJbmRleF0sDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAg ICAgICAgICAgICAgICAgIChWT0lEICoqKSZVc2JDZGNEYXRhUGF0aA0KPiArICAgICAgICAgICAg ICAgICAgICAgICk7DQo+ICsgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAg ICAgIERFQlVHICgoREVCVUdfVkVSQk9TRSwgIlJuZGlzIENEQ0RhdGEgRGV2aWNlUGF0aCBub3Qg Zm91bmRcbiIpKTsNCj4gKyAgICAgICAgRnJlZVBvb2wgKEhhbmRsZUJ1ZmZlcik7DQo+ICsgICAg ICAgIHJldHVybjsNCj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAgU3RhdHVzID0gSXNTYW1lRGV2 aWNlIChVc2JSbmRpc0RhdGFQYXRoLCBVc2JDZGNEYXRhUGF0aCk7DQo+ICsgICAgICBERUJVRyAo KERFQlVHX1ZFUkJPU0UsICJSbmRpcyBJc1NhbWVEZXZpY2UgJXJcbiIsIFN0YXR1cykpOw0KPiAr ICAgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgICAgVXNiUm5kaXNEZXZp Y2UtPlVzYkNkY0RhdGFIYW5kbGUgPSBIYW5kbGVCdWZmZXJbSW5kZXhdOw0KPiArICAgICAgICBV c2JSbmRpc0RldmljZS0+VXNiSW9DZGNEYXRhICAgICA9IFVzYklvOw0KPiArICAgICAgICBHZXRF bmRwb2ludCAoVXNiUm5kaXNEZXZpY2UtPlVzYklvQ2RjRGF0YSwgVXNiUm5kaXNEZXZpY2UpOw0K PiArICAgICAgICBGcmVlUG9vbCAoSGFuZGxlQnVmZmVyKTsNCj4gKyAgICAgICAgcmV0dXJuOw0K PiArICAgICAgfQ0KPiArICAgIH0NCj4gKyAgfSAgIC8vIEVuZCBvZiBGb3IgbG9vcA0KPiArDQo+ ICsgIEZyZWVQb29sIChIYW5kbGVCdWZmZXIpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKw0KPiAr ICBGb3IgdGhlIGdpdmVuIFVzYklvIENkY0RhdGEsIGZpbmQgYSBtYXRjaGluZyBSTkRJUyBkZXZp Y2UgYWxyZWFkeSBleGlzdHMgb3INCj4gbm90Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkY0hh bmRsZSAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9IQU5ETEUgZm9yIFVTQiBDREMgRGF0YS4N Cj4gKyAgQHBhcmFtW291dF0gQ2RjVXNiSW8gICAgICAgIEEgcG9pbnRlciBmb3IgcmV0cmlldmUg dGhlDQo+IEVGSV9VU0JfSU9fUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtvdXRdIFJu ZGlzSGFuZGxlICAgICBBIHBvaW50ZXIgZm9yIHJldHJpZXZlIHRoZSBoYW5kbGUgb2YgUk5ESVMN Cj4gZGV2aWNlLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgVGhl IFVTQl9STkRJU19ERVZJQ0UgbWF0Y2hpbmcgdGhpcyBDREMNCj4gRGF0YSBpcyBmb3VuZC4NCj4g KyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgICBUaGUgVVNCX1JORElTX0RFVklDRSBt YXRjaGluZyB0aGlzIENEQw0KPiBEYXRhIGlzIG5vdCBmb3VuZC4NCj4gKw0KPiArKiovDQo+ICtF RklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0ZpbmRNYXRjaGluZ1JuZGlzRGV2ICgNCj4gKyAgSU4g IEVGSV9IQU5ETEUgICAgICAgICAgIENkY0hhbmRsZSwNCj4gKyAgT1VUIEVGSV9VU0JfSU9fUFJP VE9DT0wgICoqQ2RjVXNiSW8sDQo+ICsgIE9VVCBFRklfSEFORExFICAgICAgICAgICAqUm5kaXNI YW5kbGUNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgIFN0YXR1 czsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gKyAgVUlOVE4gICAg ICAgICAgICAgICAgICAgICBIYW5kbGVDb3VudDsNCj4gKyAgRUZJX0hBTkRMRSAgICAgICAgICAg ICAgICAqSGFuZGxlQnVmZmVyOw0KPiArICBFRklfVVNCX0lPX1BST1RPQ09MICAgICAgICpVc2JJ bzsNCj4gKyAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAqVXNiUm5kaXNEYXRhUGF0aDsNCj4g KyAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAqVXNiQ2RjRGF0YVBhdGg7DQo+ICsNCj4gKyAg Ly8gRmluZCB0aGUgcGFyZW50IFJORElTIGFuZCB1cGRhdGUgdGhlIFVzYklvIGZvciB0aGUgQ0RD IGRldmljZQ0KPiArICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sICgNCj4gKyAgICAgICAg ICAgICAgICAgIENkY0hhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0 aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZVc2JDZGNEYXRh UGF0aA0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4gKw0KPiArICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1 cyA9IGdCUy0+TG9jYXRlSGFuZGxlQnVmZmVyICgNCj4gKyAgICAgICAgICAgICAgICAgIEJ5UHJv dG9jb2wsDQo+ICsgICAgICAgICAgICAgICAgICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KPiAr ICAgICAgICAgICAgICAgICAgTlVMTCwNCj4gKyAgICAgICAgICAgICAgICAgICZIYW5kbGVDb3Vu dCwNCj4gKyAgICAgICAgICAgICAgICAgICZIYW5kbGVCdWZmZXINCj4gKyAgICAgICAgICAgICAg ICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gU3Rh dHVzOw0KPiArICB9DQo+ICsNCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgSGFuZGxlQ291 bnQ7IEluZGV4KyspIHsNCj4gKyAgICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sICgNCj4g KyAgICAgICAgICAgICAgICAgICAgSGFuZGxlQnVmZmVyW0luZGV4XSwNCj4gKyAgICAgICAgICAg ICAgICAgICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgICAg KFZPSUQgKiopJlVzYklvDQo+ICsgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgICB9DQo+ ICsNCj4gKyAgICBpZiAoSXNVc2JSbmRpcyAoVXNiSW8pKSB7DQo+ICsgICAgICBTdGF0dXMgPSBn QlMtPkhhbmRsZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgICAgICAgICAgICBIYW5kbGVCdWZm ZXJbSW5kZXhdLA0KPiArICAgICAgICAgICAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3Rv Y29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmVXNiUm5kaXNEYXRh UGF0aA0KPiArICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAgICBpZiAoRUZJX0VSUk9S IChTdGF0dXMpKSB7DQo+ICsgICAgICAgIERFQlVHICgoREVCVUdfRVJST1IsICJVc2IgUm5kaXMg RGV2aWNlUGF0aCBub3QgZm91bmRcbiIpKTsNCj4gKyAgICAgICAgYnJlYWs7DQo+ICsgICAgICB9 DQo+ICsNCj4gKyAgICAgIFN0YXR1cyA9IElzU2FtZURldmljZSAoVXNiUm5kaXNEYXRhUGF0aCwg VXNiQ2RjRGF0YVBhdGgpOw0KPiArDQo+ICsgICAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPiArICAgICAgICAqUm5kaXNIYW5kbGUgPSBIYW5kbGVCdWZmZXJbSW5kZXhdOw0KPiArICAg ICAgICAqQ2RjVXNiSW8gICAgPSBVc2JJbzsNCj4gKyAgICAgICAgRnJlZVBvb2wgKEhhbmRsZUJ1 ZmZlcik7DQo+ICsgICAgICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0K PiArICB9ICAgLy8gRW5kIG9mIEZvciBsb29wDQo+ICsNCj4gKyAgRnJlZVBvb2wgKEhhbmRsZUJ1 ZmZlcik7DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+ICt9DQo+ICsNCj4gKy8q Kg0KPiArICBVU0IgUm5kaXMgRHJpdmVyIEJpbmRpbmcgU3VwcG9ydC4NCj4gKw0KPiArICBAcGFy YW1baW5dICBUaGlzICAgICAgICAgICAgICAgICAgICBQcm90b2NvbCBpbnN0YW5jZSBwb2ludGVy Lg0KPiArICBAcGFyYW1baW5dICBDb250cm9sbGVySGFuZGxlICAgICAgICBIYW5kbGUgb2YgZGV2 aWNlIHRvIHRlc3QuDQo+ICsgIEBwYXJhbVtpbl0gIFJlbWFpbmluZ0RldmljZVBhdGggICAgIE9w dGlvbmFsIHBhcmFtZXRlciB1c2UgdG8gcGljayBhDQo+IHNwZWNpZmljIGNoaWxkDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZSB0byBzdGFydC4NCj4gKw0K PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgICBUaGlzIGRyaXZlciBzdXBw b3J0cyB0aGlzIGRldmljZS4NCj4gKyAgQHJldHZhbCBFRklfQUxSRUFEWV9TVEFSVEVEICAgICAg ICAgVGhpcyBkcml2ZXIgaXMgYWxyZWFkeSBydW5uaW5nIG9uIHRoaXMNCj4gZGV2aWNlLg0KPiAr ICBAcmV0dmFsIG90aGVyICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGRyaXZlciBkb2VzIG5v dCBzdXBwb3J0IHRoaXMgZGV2aWNlLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VG SUFQSQ0KPiArVXNiUm5kaXNEcml2ZXJTdXBwb3J0ZWQgKA0KPiArICBJTiBFRklfRFJJVkVSX0JJ TkRJTkdfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiBFRklfSEFORExFICAgICAgICAgICAgICAg ICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgIElOIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAg ICAgKlJlbWFpbmluZ0RldmljZVBhdGgNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAg ICAgICAgICBTdGF0dXM7DQo+ICsgIEVGSV9VU0JfSU9fUFJPVE9DT0wgICpVc2JJbzsNCj4gKw0K PiArICBTdGF0dXMgPSBnQlMtPk9wZW5Qcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgICAgICBD b250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgJmdFZmlVc2JJb1Byb3RvY29s R3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZVc2JJbywNCj4gKyAgICAgICAg ICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAg ICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgRUZJX09QRU5fUFJPVE9D T0xfQllfRFJJVkVSDQo+ICsgICAgICAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9S IChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0 YXR1cyA9IElzU3VwcG9ydGVkRGV2aWNlIChVc2JJbykgPyBFRklfU1VDQ0VTUyA6IEVGSV9VTlNV UFBPUlRFRDsNCj4gKw0KPiArICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgQ29u dHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQsDQo+ICsg ICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgQ29udHJvbGxl ckhhbmRsZQ0KPiArICAgICAgICAgKTsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0K PiArLyoqDQo+ICsgIFVTQiBSTkRJUyBEcml2ZXIgQmluZGluZyBTdGFydC4NCj4gKw0KPiArICBA cGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICAgICAgICBQcm90b2NvbCBpbnN0YW5jZSBwb2lu dGVyLg0KPiArICBAcGFyYW1baW5dICBDb250cm9sbGVySGFuZGxlICAgICAgICBIYW5kbGUgb2Yg ZGV2aWNlIHRvIGJpbmQgZHJpdmVyIHRvLg0KPiArICBAcGFyYW1baW5dICBSZW1haW5pbmdEZXZp Y2VQYXRoICAgICBPcHRpb25hbCBwYXJhbWV0ZXIgdXNlIHRvIHBpY2sgYQ0KPiBzcGVjaWZpYyBj aGlsZA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UgdG8g c3RhcnQuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgICAgVGhp cyBkcml2ZXIgaXMgYWRkZWQgdG8gQ29udHJvbGxlckhhbmRsZQ0KPiArICBAcmV0dmFsIEVGSV9E RVZJQ0VfRVJST1IgICAgICAgICAgICBUaGlzIGRyaXZlciBjb3VsZCBub3QgYmUgc3RhcnRlZCBk dWUgdG8gYQ0KPiBkZXZpY2UgZXJyb3INCj4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNF UyAgICAgICAgVGhlIGRyaXZlciBjb3VsZCBub3QgaW5zdGFsbA0KPiBzdWNjZXNzZnVsbHkgZHVl IHRvIGEgbGFjayBvZiByZXNvdXJjZXMuDQo+ICsgIEByZXR2YWwgb3RoZXIgICAgICAgICAgICAg ICAgICAgICAgIFRoaXMgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBkZXZpY2UNCj4gKw0K PiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1VzYlJuZGlzRHJpdmVyU3RhcnQg KA0KPiArICBJTiBFRklfRFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiBF RklfSEFORExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgIElOIEVG SV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgKlJlbWFpbmluZ0RldmljZVBhdGgNCj4gKyAgKQ0K PiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIFVT Ql9STkRJU19ERVZJQ0UgICAgICAgICAgICAgICpVc2JSbmRpc0RldmljZTsNCj4gKyAgRUZJX0RF VklDRV9QQVRIX1BST1RPQ09MICAgICAgKlVzYkV0aFBhdGg7DQo+ICsgIEVGSV9VU0JfSU9fUFJP VE9DT0wgICAgICAgICAgICpVc2JJbzsNCj4gKyAgRUZJX1VTQl9JTlRFUkZBQ0VfREVTQ1JJUFRP UiAgSW50ZXJmYWNlOw0KPiArICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICBSbmRpc0hh bmRsZTsNCj4gKw0KPiArICBSbmRpc0hhbmRsZSA9IENvbnRyb2xsZXJIYW5kbGU7DQo+ICsNCj4g KyAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgICAgICAgQ29u dHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1 aWQsDQo+ICsgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmVXNiSW8sDQo+ICsgICAgICAgICAg ICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAg Q29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09M X0JZX0RSSVZFUg0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAo U3RhdHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0 dXMgPSBnQlMtPk9wZW5Qcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVy SGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlk LA0KPiArICAgICAgICAgICAgICAgICAgKFZPSUQgKiopJlVzYkV0aFBhdGgsDQo+ICsgICAgICAg ICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgICAg ICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RP Q09MX0JZX0RSSVZFUg0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPiArICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAg IENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQs DQo+ICsgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAg IENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAgKTsNCj4gKyAgICByZXR1cm4gU3RhdHVz Ow0KPiArICB9DQo+ICsNCj4gKyAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAgIENv bnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQs DQo+ICsgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgQ29u dHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgKTsNCj4gKw0KPiArICAvLyBDb250cm9scyBjb21l IGhlcmUgZm9yIFJORElTIGFuZCBDREMuIElmIGl0IGlzIENEQywgY2hlY2sgd2hldGhlciBSTkRJ Uw0KPiBpcyBwcmVzZW50IG9uIHRoZSBzYW1lIGNvbnRyb2xsZXIgb3Igbm90Lg0KPiArICBpZiAo SXNVc2JDZGNEYXRhIChVc2JJbykpIHsNCj4gKyAgICBERUJVRyAoKERFQlVHX0lORk8sICJSbmRp cyBDRENEYXRhIGludGVyZmFjZSBmb3VuZFxuIikpOw0KPiArDQo+ICsgICAgLy8gRmluZCB0aGUg cGFyZW50IFJORElTIGFuZCB1cGRhdGUgdGhlIFVzYklvIGZvciB0aGUgQ0RDIGRldmljZQ0KPiAr ICAgIFN0YXR1cyA9IFVwZGF0ZVJuZGlzRGV2aWNlICgNCj4gKyAgICAgICAgICAgICAgIFVzYkV0 aFBhdGgsDQo+ICsgICAgICAgICAgICAgICAmVXNiUm5kaXNEZXZpY2UNCj4gKyAgICAgICAgICAg ICAgICk7DQo+ICsNCj4gKyAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAg REVCVUcgKChERUJVR19JTkZPLCAiUm5kaXMgTWF0Y2hpbmcgaW50ZXJmYWNlIGZvdW5kXG4iKSk7 DQo+ICsgICAgICBVc2JSbmRpc0RldmljZS0+VXNiQ2RjRGF0YUhhbmRsZSA9IENvbnRyb2xsZXJI YW5kbGU7DQo+ICsgICAgICBVc2JSbmRpc0RldmljZS0+VXNiSW9DZGNEYXRhICAgICA9IFVzYklv Ow0KPiArICAgICAgR2V0RW5kcG9pbnQgKFVzYlJuZGlzRGV2aWNlLT5Vc2JJb0NkY0RhdGEsIFVz YlJuZGlzRGV2aWNlKTsNCj4gKyAgICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgfSBlbHNlIHsN Cj4gKyAgICAgIC8vIENoZWNrIGlmIFJuRGlzIGV4aXN0DQo+ICsgICAgICBTdGF0dXMgPSBGaW5k TWF0Y2hpbmdSbmRpc0RldiAoDQo+ICsgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUs DQo+ICsgICAgICAgICAgICAgICAgICZVc2JJbywNCj4gKyAgICAgICAgICAgICAgICAgJlJuZGlz SGFuZGxlDQo+ICsgICAgICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgICAgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gKyAgICAgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAg ICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAmZ0VmaVVzYklv UHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRs ZSwNCj4gKyAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAgICAg ICk7DQo+ICsgICAgICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiAr ICB9DQo+ICsNCj4gKyAgVXNiUm5kaXNEZXZpY2UgPSBBbGxvY2F0ZVplcm9Qb29sIChzaXplb2Yg KFVTQl9STkRJU19ERVZJQ0UpKTsNCj4gKw0KPiArICBpZiAoIVVzYlJuZGlzRGV2aWNlKSB7DQo+ ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkFsbG9jYXRlWmVyb1Bvb2wgRmFpbFxuIikpOw0K PiArDQo+ICsgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgQ29udHJvbGxl ckhhbmRsZSwNCj4gKyAgICAgICAgICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCj4gKyAgICAg ICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgQ29udHJvbGxl ckhhbmRsZQ0KPiArICAgICAgICAgICApOw0KPiArICAgIHJldHVybiBFRklfT1VUX09GX1JFU09V UkNFUzsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IExvYWRBbGxEZXNjcmlwdG9yICgNCj4g KyAgICAgICAgICAgICBVc2JJbywNCj4gKyAgICAgICAgICAgICAmVXNiUm5kaXNEZXZpY2UtPkNv bmZpZw0KPiArICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN Cj4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6TG9hZEFsbERlc2NyaXB0b3Igc3RhdHVz ID0gJXJcbiIsIF9fZnVuY19fLA0KPiBTdGF0dXMpKTsNCj4gKyAgICBnQlMtPkNsb3NlUHJvdG9j b2wgKA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAmZ0Vm aVVzYklvUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFu ZGxlLA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICAgICk7DQo+ ICsgICAgRnJlZVBvb2wgKFVzYlJuZGlzRGV2aWNlKTsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0K PiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gVXNiSW8tPlVzYkdldEludGVyZmFjZURlc2NyaXB0 b3IgKA0KPiArICAgICAgICAgICAgICAgICAgICBVc2JJbywNCj4gKyAgICAgICAgICAgICAgICAg ICAgJkludGVyZmFjZQ0KPiArICAgICAgICAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOlVzYkdldElu dGVyZmFjZURlc2NyaXB0b3Igc3RhdHVzID0gJXJcbiIsDQo+IF9fZnVuY19fLCBTdGF0dXMpKTsN Cj4gKyAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFu ZGxlLA0KPiArICAgICAgICAgICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAg ICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFu ZGxlDQo+ICsgICAgICAgICAgICk7DQo+ICsgICAgRnJlZVBvb2wgKFVzYlJuZGlzRGV2aWNlLT5D b25maWcpOw0KPiArICAgIEZyZWVQb29sIChVc2JSbmRpc0RldmljZSk7DQo+ICsgICAgcmV0dXJu IFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5TaWduYXR1cmUgICAg ICAgICAgICAgICAgICAgICAgICAgID0gVVNCX1JORElTX1NJR05BVFVSRTsNCj4gKyAgVXNiUm5k aXNEZXZpY2UtPk51bU9mSW50ZXJmYWNlICAgICAgICAgICAgICAgICAgICAgPSBJbnRlcmZhY2Uu SW50ZXJmYWNlTnVtYmVyOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiUm5kaXNIYW5kbGUgICAg ICAgICAgICAgICAgICAgICA9IFJuZGlzSGFuZGxlOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNi Q2RjRGF0YUhhbmRsZSAgICAgICAgICAgICAgICAgICA9IDA7DQo+ICsgIFVzYlJuZGlzRGV2aWNl LT5Vc2JJbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gVXNiSW87DQo+ICsgIFVzYlJu ZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoUmVjZWl2ZSAgICAgICAgICAgICAgID0gUm5kaXNVbmRp UmVjZWl2ZTsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhUcmFuc21pdCAgICAg ICAgICAgICAgPSBSbmRpc1VuZGlUcmFuc21pdDsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0 aC5Vc2JFdGhJbnRlcnJ1cHQgICAgICAgICAgICAgPSBVc2JSbmRpc0ludGVycnVwdDsNCj4gKyAg VXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhNYWNBZGRyZXNzICAgICAgICAgICAgPSBHZXRV c2JFdGhNYWNBZGRyZXNzOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aE1heEJ1 bGtTaXplICAgICAgICAgICA9IFVzYkV0aEJ1bGtTaXplOw0KPiArICBVc2JSbmRpc0RldmljZS0+ VXNiRXRoLlVzYkhlYWRlckZ1bkRlc2NyaXB0b3IgICAgICA9DQo+IEdldFVzYkhlYWRlckZ1bkRl c2NyaXB0b3I7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiVW5pb25GdW5EZXNjcmlw dG9yICAgICAgID0NCj4gR2V0VXNiVW5pb25GdW5EZXNjcmlwdG9yOw0KPiArICBVc2JSbmRpc0Rl dmljZS0+VXNiRXRoLlVzYkV0aEZ1bkRlc2NyaXB0b3IgICAgICAgICA9DQo+IEdldFVzYlJuZGlz RnVuRGVzY3JpcHRvcjsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5TZXRVc2JFdGhNY2Fz dEZpbHRlciAgICAgICAgPSBTZXRVc2JSbmRpc01jYXN0RmlsdGVyOw0KPiArICBVc2JSbmRpc0Rl dmljZS0+VXNiRXRoLlNldFVzYkV0aFBvd2VyUGF0dGVybkZpbHRlciA9DQo+IFNldFVzYlJuZGlz UG93ZXJGaWx0ZXI7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguR2V0VXNiRXRoUG93ZXJQ YXR0ZXJuRmlsdGVyID0NCj4gR2V0VXNiUm5kaXNQb3dlckZpbHRlcjsNCj4gKyAgVXNiUm5kaXNE ZXZpY2UtPlVzYkV0aC5TZXRVc2JFdGhQYWNrZXRGaWx0ZXIgICAgICAgPSBTZXRVc2JSbmRpc1Bh Y2tldEZpbHRlcjsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5HZXRVc2JFdGhTdGF0aXN0 aWMgICAgICAgICAgPSBHZXRSbmRpc1N0YXRpc3RpYzsNCj4gKw0KPiArICBVc2JSbmRpc0Rldmlj ZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaUdldFN0YXRlICAgICAgICA9DQo+IFJuZGlz RHVtbXlSZXR1cm47DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JF dGhVbmRpU3RhcnQgICAgICAgICAgID0gUm5kaXNVbmRpU3RhcnQ7DQo+ICsgIFVzYlJuZGlzRGV2 aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpU3RvcCAgICAgICAgICAgID0gUm5kaXNV bmRpU3RvcDsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhVbmRpLlVzYkV0aFVu ZGlHZXRJbml0SW5mbyAgICAgPQ0KPiBSbmRpc1VuZGlHZXRJbml0SW5mbzsNCj4gKyAgVXNiUm5k aXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlHZXRDb25maWdJbmZvICAgPQ0K PiBSbmRpc1VuZGlHZXRDb25maWdJbmZvOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVz YkV0aFVuZGkuVXNiRXRoVW5kaUluaXRpYWxpemUgICAgICA9DQo+IFJuZGlzVW5kaUluaXRpYWxp emU7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpUmVz ZXQgICAgICAgICAgID0NCj4gUm5kaXNVbmRpUmVzZXQ7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5V c2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpU2h1dGRvd24gICAgICAgID0NCj4gUm5kaXNVbmRp U2h1dGRvd247DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhV bmRpSW50ZXJydXB0RW5hYmxlID0NCj4gUm5kaXNEdW1teVJldHVybjsNCj4gKyAgVXNiUm5kaXNE ZXZpY2UtPlVzYkV0aC5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlSZWNlaXZlRmlsdGVyICAgPQ0KPiBS bmRpc1VuZGlSZWNlaXZlRmlsdGVyOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0 aFVuZGkuVXNiRXRoVW5kaVN0YXRpb25BZGRyZXNzICA9DQo+IFJuZGlzRHVtbXlSZXR1cm47DQo+ ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpU3RhdGlzdGlj cyAgICAgID0gTlVMTDsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhVbmRpLlVz YkV0aFVuZGlNY2FzdElwMk1hYyAgICAgPQ0KPiBSbmRpc0R1bW15UmV0dXJuOw0KPiArICBVc2JS bmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaU52RGF0YSAgICAgICAgICA9 DQo+IFJuZGlzRHVtbXlSZXR1cm47DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRo VW5kaS5Vc2JFdGhVbmRpR2V0U3RhdHVzICAgICAgID0NCj4gUm5kaXNVbmRpR2V0U3RhdHVzOw0K PiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaUZpbGxIZWFk ZXIgICAgICA9DQo+IFJuZGlzRHVtbXlSZXR1cm47DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JF dGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpVHJhbnNtaXQgICAgICAgID0gTlVMTDsNCj4gKyAgVXNi Um5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlSZWNlaXZlICAgICAgICAg PSBOVUxMOw0KPiArDQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5NYXhUcmFuc2ZlclNpemUgICAgICAg PSBSTkRJU19NQVhfVFJBTlNGRVJfU0laRTsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPk1heFBhY2tl dHNQZXJUcmFuc2ZlciA9IDE7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5QYWNrZXRBbGlnbm1lbnRG YWN0b3IgPSAwOw0KPiArDQo+ICsgIEluaXRpYWxpemVMaXN0SGVhZCAoJlVzYlJuZGlzRGV2aWNl LT5SZWNlaXZlUGFja2V0TGlzdCk7DQo+ICsNCj4gKyAgLy8gVGhpcyBpcyBhIFJORElTIGludGVy ZmFjZS4gU2VlIHdoZXRoZXIgQ0RDLURBVEEgaW50ZXJmYWNlIGhhcyBhbHJlYWR5DQo+IGJlZW4g Y29ubmVjdGVkIG9yIG5vdA0KPiArICBGaW5kTWF0Y2hpbmdDZGNEYXRhIChVc2JSbmRpc0Rldmlj ZSk7DQo+ICsNCj4gKyAgaWYgKFVzYlJuZGlzRGV2aWNlLT5Vc2JJb0NkY0RhdGEpIHsNCj4gKyAg ICBTdGF0dXMgPSBnQlMtPkluc3RhbGxQcm90b2NvbEludGVyZmFjZSAoDQo+ICsgICAgICAgICAg ICAgICAgICAgICZDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgICAmZ0Vk a0lJVXNiRXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgICBFRklfTkFUSVZF X0lOVEVSRkFDRSwNCj4gKyAgICAgICAgICAgICAgICAgICAgJihVc2JSbmRpc0RldmljZS0+VXNi RXRoKQ0KPiArICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0 YXR1cykpIHsNCj4gKyAgICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAg Q29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlk LA0KPiArICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAg ICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgICAg IEZyZWVQb29sIChVc2JSbmRpc0RldmljZS0+Q29uZmlnKTsNCj4gKyAgICAgIEZyZWVQb29sIChV c2JSbmRpc0RldmljZSk7DQo+ICsgICAgICByZXR1cm4gU3RhdHVzOw0KPiArICAgIH0NCj4gKw0K PiArICAgIEdldEVuZHBvaW50IChVc2JSbmRpc0RldmljZS0+VXNiSW8sIFVzYlJuZGlzRGV2aWNl KTsNCj4gKw0KPiArICAgIERFQlVHICgoREVCVUdfSU5GTywgIlJuZGlzIERldmljZUhhbmRsZSAl clxuIiwgVXNiUm5kaXNEZXZpY2UtDQo+ID5Vc2JSbmRpc0hhbmRsZSkpOw0KPiArICAgIERFQlVH ICgoREVCVUdfSU5GTywgIkNEQyBEZXZpY2VIYW5kbGUgJXJcbiIsIFVzYlJuZGlzRGV2aWNlLQ0K PiA+VXNiQ2RjRGF0YUhhbmRsZSkpOw0KPiArICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gKyAg fQ0KPiArDQo+ICsgIEZyZWVQb29sIChVc2JSbmRpc0RldmljZS0+Q29uZmlnKTsNCj4gKyAgRnJl ZVBvb2wgKFVzYlJuZGlzRGV2aWNlKTsNCj4gKw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ ICt9DQo+ICsNCj4gKy8qKg0KPiArICBDaGVja2FuZFN0b3BSbmRpc0RldmljZQ0KPiArDQo+ICsg IEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgIFByb3RvY29sIGluc3RhbmNlIHBvaW50 ZXIuDQo+ICsgIEBwYXJhbVtpbl0gIENvbnRyb2xsZXJIYW5kbGUgICAgIEhhbmRsZSBvZiBkZXZp Y2UgdG8gYmluZCBkcml2ZXIgdG8uDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAg ICAgICBUaGlzIGRyaXZlciBpcyBhZGRlZCB0byBDb250cm9sbGVySGFuZGxlDQo+ICsgIEByZXR2 YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgVGhpcyBkcml2ZXIgY291bGQgbm90IGJlIHN0YXJ0ZWQg ZHVlIHRvIGENCj4gZGV2aWNlIGVycm9yDQo+ICsgIEByZXR2YWwgb3RoZXIgICAgICAgICAgICAg ICAgVGhpcyBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGRldmljZQ0KPiArDQo+ICsqKi8N Cj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArQ2hlY2thbmRTdG9wUm5kaXNEZXZpY2UgKA0K PiArICBJTiAgRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gIEVG SV9IQU5ETEUgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICApDQo+ICt7 DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgIFN0YXR1czsNCj4gKyAgRUZJX1VTQl9JT19QUk9U T0NPTCAgKlVzYklvOw0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+T3BlblByb3RvY29sICgNCj4g KyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAg ICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgKFZPSUQgKiop JlVzYklvLA0KPiArICAgICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwN Cj4gKyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAg ICAgICBFRklfT1BFTl9QUk9UT0NPTF9HRVRfUFJPVE9DT0wNCj4gKyAgICAgICAgICAgICAgICAg ICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gU3RhdHVz Ow0KPiArICB9DQo+ICsNCj4gKyAgaWYgKElzVXNiUm5kaXMgKFVzYklvKSkgew0KPiArICAgIFN0 YXR1cyA9IGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgICAgICAgIENvbnRy b2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1 aWQsDQo+ICsgICAgICAgICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ ICsgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAgICAg ICAgICAgKTsNCj4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiUm5kaXMgQ29udHJvbGxlckhh bmRsZSBTdG9wICVyXG4iLCBTdGF0dXMpKTsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9 DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ ICsgIFVTQiBSbmRpcyBEcml2ZXIgQmluZGluZyBTdG9wLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0g IFRoaXMgICAgICAgICAgICAgICAgICBQcm90b2NvbCBpbnN0YW5jZSBwb2ludGVyLg0KPiArICBA cGFyYW1baW5dICBDb250cm9sbGVySGFuZGxlICAgICAgSGFuZGxlIG9mIGRldmljZSB0byBzdG9w IGRyaXZlciBvbg0KPiArICBAcGFyYW1baW5dICBOdW1iZXJPZkNoaWxkcmVuICAgICAgTnVtYmVy IG9mIEhhbmRsZXMgaW4gQ2hpbGRIYW5kbGVCdWZmZXIuDQo+IElmIG51bWJlciBvZg0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4gaXMgemVybyBzdG9wIHRo ZSBlbnRpcmUgYnVzIGRyaXZlci4NCj4gKyAgQHBhcmFtW2luXSAgQ2hpbGRIYW5kbGVCdWZmZXIg ICAgIExpc3Qgb2YgQ2hpbGQgSGFuZGxlcyB0byBTdG9wLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJ X1NVQ0NFU1MgICAgICAgICAgICAgICBUaGlzIGRyaXZlciBpcyByZW1vdmVkIENvbnRyb2xsZXJI YW5kbGUNCj4gKyAgQHJldHZhbCBvdGhlciAgICAgICAgICAgICAgICAgICAgIFRoaXMgZHJpdmVy IHdhcyBub3QgcmVtb3ZlZCBmcm9tIHRoaXMgZGV2aWNlDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NU QVRVUw0KPiArRUZJQVBJDQo+ICtVc2JSbmRpc0RyaXZlclN0b3AgKA0KPiArICBJTiAgRUZJX0RS SVZFUl9CSU5ESU5HX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gIEVGSV9IQU5ETEUgICAgICAg ICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgSU4gIFVJTlROICAgICAgICAgICAg ICAgICAgICAgICAgTnVtYmVyT2ZDaGlsZHJlbiwNCj4gKyAgSU4gIEVGSV9IQU5ETEUgICAgICAg ICAgICAgICAgICAgKkNoaWxkSGFuZGxlQnVmZmVyDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NU QVRVUyAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9Q Uk9UT0NPTCAgKlVzYkV0aFByb3RvY29sOw0KPiArICBVU0JfUk5ESVNfREVWSUNFICAgICAgICAg ICAgICpVc2JSbmRpc0RldmljZTsNCj4gKw0KPiArICBERUJVRyAoKERFQlVHX0lORk8sICJVc2JS bmRpc0RyaXZlclN0b3AgQ29udHJvbGxlckhhbmRsZSAlbHhcbiIsDQo+IENvbnRyb2xsZXJIYW5k bGUpKTsNCj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPk9wZW5Qcm90b2NvbCAoDQo+ICsgICAgICAg ICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgJmdFZGtJ SVVzYkV0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZVc2JF dGhQcm90b2NvbCwNCj4gKyAgICAgICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5k bGUsDQo+ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAg ICAgICAgICAgRUZJX09QRU5fUFJPVE9DT0xfR0VUX1BST1RPQ09MDQo+ICsgICAgICAgICAgICAg ICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgU3RhdHVzID0g Q2hlY2thbmRTdG9wUm5kaXNEZXZpY2UgKFRoaXMsIENvbnRyb2xsZXJIYW5kbGUpOw0KPiArICAg IHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBVc2JSbmRpc0RldmljZSA9IFVTQl9S TkRJU19ERVZJQ0VfRlJPTV9USElTIChVc2JFdGhQcm90b2NvbCk7DQo+ICsNCj4gKyAgU3RhdHVz ID0gZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2 aWNlLT5Vc2JDZGNEYXRhSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgJmdFZmlVc2JJb1By b3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5k bGUsDQo+ICsgICAgICAgICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+VXNiQ2RjRGF0YUhhbmRs ZQ0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTpDbG9zZVByb3RvY29sIHN0YXR1cyA9 ICVyXG4iLCBfX2Z1bmNfXywNCj4gU3RhdHVzKSk7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMg PSBnQlMtPlVuaW5zdGFsbFByb3RvY29sSW50ZXJmYWNlICgNCj4gKyAgICAgICAgICAgICAgICAg IENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJv dG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgVXNiRXRoUHJvdG9jb2wNCj4gKyAgICAg ICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBy ZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5DbG9zZVByb3Rv Y29sICgNCj4gKyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAg ICAgICAgICAgICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAg VGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgIENvbnRyb2xs ZXJIYW5kbGUNCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgRnJlZVBvb2wgKFVz YlJuZGlzRGV2aWNlLT5Db25maWcpOw0KPiArICBGcmVlUG9vbCAoVXNiUm5kaXNEZXZpY2UpOw0K PiArDQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIlVzYlJuZGlzRHJpdmVyU3RvcCAlclxuIiwg U3RhdHVzKSk7DQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBF bnRyeXBvaW50IG9mIFJORElTIERyaXZlci4NCj4gKw0KPiArICBUaGlzIGZ1bmN0aW9uIGlzIHRo ZSBlbnRyeXBvaW50IG9mIFJORElTIERyaXZlci4gSXQgaW5zdGFsbHMgRHJpdmVyIEJpbmRpbmcN Cj4gKyAgUHJvdG9jb2xzIHRvZ2V0aGVyIHdpdGggQ29tcG9uZW50IE5hbWUgUHJvdG9jb2xzLg0K PiArDQo+ICsgIEBwYXJhbVtpbl0gIEltYWdlSGFuZGxlICAgICAgIFRoZSBmaXJtd2FyZSBhbGxv Y2F0ZWQgaGFuZGxlIGZvciB0aGUgRUZJDQo+IGltYWdlLg0KPiArICBAcGFyYW1baW5dICBTeXN0 ZW1UYWJsZSAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSSBTeXN0ZW0gVGFibGUuDQo+ICsNCj4g KyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIGVudHJ5IHBvaW50IGlzIGV4ZWN1 dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkN Cj4gK1VzYlJuZGlzRW50cnkgKA0KPiArICBJTiBFRklfSEFORExFICAgICAgICBJbWFnZUhhbmRs ZSwNCj4gKyAgSU4gRUZJX1NZU1RFTV9UQUJMRSAgKlN5c3RlbVRhYmxlDQo+ICsgICkNCj4gK3sN Cj4gKyAgZ1VzYlJuZGlzRHJpdmVyQmluZGluZy5Ecml2ZXJCaW5kaW5nSGFuZGxlID0gSW1hZ2VI YW5kbGU7DQo+ICsgIGdVc2JSbmRpc0RyaXZlckJpbmRpbmcuSW1hZ2VIYW5kbGUgICAgICAgICA9 IEltYWdlSGFuZGxlOw0KPiArDQo+ICsgIHJldHVybiBnQlMtPkluc3RhbGxNdWx0aXBsZVByb3Rv Y29sSW50ZXJmYWNlcyAoDQo+ICsgICAgICAgICAgICAgICAgJmdVc2JSbmRpc0RyaXZlckJpbmRp bmcuRHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAmZ0VmaURyaXZlckJp bmRpbmdQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgJmdVc2JSbmRpc0RyaXZlckJp bmRpbmcsDQo+ICsgICAgICAgICAgICAgICAgJmdFZmlDb21wb25lbnROYW1lMlByb3RvY29sR3Vp ZCwNCj4gKyAgICAgICAgICAgICAgICAmZ1VzYlJuZGlzQ29tcG9uZW50TmFtZTIsDQo+ICsgICAg ICAgICAgICAgICAgTlVMTA0KPiArICAgICAgICAgICAgICAgICk7DQo+ICt9DQo+IGRpZmYgLS1n aXQgYS9NZGVNb2R1bGVQa2cvQnVzL1VzYi9Vc2JOZXR3b3JrL1VzYlJuZGlzL1VzYlJuZGlzLmgN Cj4gYi9NZGVNb2R1bGVQa2cvQnVzL1VzYi9Vc2JOZXR3b3JrL1VzYlJuZGlzL1VzYlJuZGlzLmgN Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMC4uOWMzODY0MmZmZQ0K PiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL01kZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsv VXNiUm5kaXMvVXNiUm5kaXMuaA0KPiBAQCAtMCwwICsxLDU4NiBAQA0KPiArLyoqIEBmaWxlDQo+ ICsgIEhlYWRlciBmaWxlIGZvciBmb3IgVVNCIFJuZGlzIGRyaXZlcg0KPiArDQo+ICsgIENvcHly aWdodCAoYykgMjAyMywgQW1lcmljYW4gTWVnYXRyZW5kcyBJbnRlcm5hdGlvbmFsIExMQy4gQWxs IHJpZ2h0cw0KPiByZXNlcnZlZC48QlI+DQo+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBC U0QtMi1DbGF1c2UtUGF0ZW50DQo+ICsqKi8NCj4gKw0KPiArI2lmbmRlZiBfVVNCX1JORElTX0hf DQo+ICsjZGVmaW5lIF9VU0JfUk5ESVNfSF8NCj4gKw0KPiArI2luY2x1ZGUgPExpYnJhcnkvVWVm aURyaXZlckVudHJ5UG9pbnQuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlCb290U2Vydmlj ZXNUYWJsZUxpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaUxpYi5oPg0KPiArI2luY2x1 ZGUgPExpYnJhcnkvRGV2aWNlUGF0aExpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvRGVidWdM aWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRpb25MaWIuaD4NCj4gKyNp bmNsdWRlIDxMaWJyYXJ5L0Jhc2VNZW1vcnlMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1Vl ZmlVc2JMaWIuaD4NCj4gKyNpbmNsdWRlIDxQcm90b2NvbC9Vc2JJby5oPg0KPiArI2luY2x1ZGUg PFByb3RvY29sL1VzYkV0aGVybmV0UHJvdG9jb2wuaD4NCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qg X1JFTU9URV9ORElTX01TR19IRUFERVIgUkVNT1RFX05ESVNfTVNHX0hFQURFUjsNCj4gKw0KPiAr dHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgU2ln bmF0dXJlOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICAgVXNiRXRoOw0KPiAr ICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICAgVXNiQ2RjRGF0YUhhbmRsZTsNCj4gKyAg RUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgIFVzYlJuZGlzSGFuZGxlOw0KPiArICBFRklf VVNCX0lPX1BST1RPQ09MICAgICAgICAgICAgKlVzYklvOw0KPiArICBFRklfVVNCX0lPX1BST1RP Q09MICAgICAgICAgICAgKlVzYklvQ2RjRGF0YTsNCj4gKyAgRUZJX1VTQl9DT05GSUdfREVTQ1JJ UFRPUiAgICAgICpDb25maWc7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICBO dW1PZkludGVyZmFjZTsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgIEJ1bGtJ bkVuZHBvaW50Ow0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgQnVsa091dEVu ZHBvaW50Ow0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJydXBFbmRw b2ludDsNCj4gKyAgRUZJX01BQ19BRERSRVNTICAgICAgICAgICAgICAgIE1hY0FkZHJlc3M7DQo+ ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICBSZXF1ZXN0SWQ7DQo+ICsgIFVJTlQz MiAgICAgICAgICAgICAgICAgICAgICAgICBNZWRpdW07DQo+ICsgIFVJTlQzMiAgICAgICAgICAg ICAgICAgICAgICAgICBNYXhQYWNrZXRzUGVyVHJhbnNmZXI7DQo+ICsgIFVJTlQzMiAgICAgICAg ICAgICAgICAgICAgICAgICBNYXhUcmFuc2ZlclNpemU7DQo+ICsgIFVJTlQzMiAgICAgICAgICAg ICAgICAgICAgICAgICBQYWNrZXRBbGlnbm1lbnRGYWN0b3I7DQo+ICsgIExJU1RfRU5UUlkgICAg ICAgICAgICAgICAgICAgICBSZWNlaXZlUGFja2V0TGlzdDsNCj4gK30gVVNCX1JORElTX0RFVklD RTsNCj4gKw0KPiArI2RlZmluZSBVU0JfUk5ESVNfRFJJVkVSX1ZFUlNJT04gICAgICAgMQ0KPiAr I2RlZmluZSBVU0JfVFhfRVRIRVJORVRfQlVMS19USU1FT1VUICAgMzAwMA0KPiArI2RlZmluZSBV U0JfUlhfRVRIRVJORVRfQlVMS19USU1FT1VUICAgMw0KPiArI2RlZmluZSBVU0JfRVRIRVJORVRf VFJBTlNGRVJfVElNRU9VVCAgMjAwDQo+ICsNCj4gKyNkZWZpbmUgTEFOX0JVTEtJTl9DTURfQ09O VFJPTCAgICAgIDENCj4gKyNkZWZpbmUgTUFYSU1VTV9TVE9QQlVMS0lOX0NOVCAgICAgIDMwMCAg ICAgICAgLy8gSW5kaWNhdGluZyBtYXhpbXVtDQo+IGNvdW50cyBmb3Igd2FpdGluZyBidWxrIGlu IGNvbW1hbmQNCj4gKyNkZWZpbmUgTUlOSU1VTV9TVE9QQlVMS0lOX0NOVCAgICAgIDMgICAgICAg ICAgLy8gSW5kaWNhdGluZyBtaW5pbXVtDQo+IGNvdW50cyBmb3Igd2FpdGluZyBidWxrIGluIGNv bW1hbmQNCj4gKyNkZWZpbmUgQlVMS0lOX0NNRF9QT0xMSU5HX0NOVCAgICAgIDMwMCAgICAgICAg Ly8gSW5kaWNhdGluZyB0aGUgd2FpdGluZw0KPiBjb3VudHMgZm9yIHNlbmQgYnVsayBpbiBjb21t YW5kIHdoZW4gc3lzdGVtIHBlbmRpbmcNCj4gKyNkZWZpbmUgUk5ESVNfUkVTRVJWRURfQllURV9M RU5HVEggIDgNCj4gKw0KPiArI2RlZmluZSBVU0JfUk5ESVNfU0lHTkFUVVJFICBTSUdOQVRVUkVf MzIoJ3InLCAnbicsICdkJywgJ3MnKQ0KPiArI2RlZmluZSBVU0JfUk5ESVNfREVWSUNFX0ZST01f VEhJUyhhKSAgQ1IgKGEsIFVTQl9STkRJU19ERVZJQ0UsDQo+IFVzYkV0aCwgVVNCX1JORElTX1NJ R05BVFVSRSkNCj4gKw0KPiArZXh0ZXJuIEVGSV9DT01QT05FTlRfTkFNRTJfUFJPVE9DT0wgIGdV c2JSbmRpc0NvbXBvbmVudE5hbWUyOw0KPiArDQo+ICtzdHJ1Y3QgQklUX01BUCB7DQo+ICsgIHVu c2lnbmVkIGludCAgICBTcmM7DQo+ICsgIHVuc2lnbmVkIGludCAgICBEc3Q7DQo+ICt9Ow0KPiAr DQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1VzYlJuZGlzRHJpdmVyU3VwcG9ydGVkICgN Cj4gKyAgSU4gRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gRUZJ X0hBTkRMRSAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICBJTiBFRklf REVWSUNFX1BBVEhfUFJPVE9DT0wgICAgICpSZW1haW5pbmdEZXZpY2VQYXRoDQo+ICsgICk7DQo+ ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArVXNiUm5kaXNEcml2ZXJTdGFydCAoDQo+ ICsgIElOIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIEVGSV9I QU5ETEUgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgSU4gRUZJX0RF VklDRV9QQVRIX1BST1RPQ09MICAgICAqUmVtYWluaW5nRGV2aWNlUGF0aA0KPiArICApOw0KPiAr DQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1VzYlJuZGlzRHJpdmVyU3RvcCAoDQo+ICsg IElOICBFRklfRFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiAgRUZJX0hB TkRMRSAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICBJTiAgVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXJPZkNoaWxkcmVuLA0KPiArICBJTiAgRUZJX0hB TkRMRSAgICAgICAgICAgICAgICAgICAqQ2hpbGRIYW5kbGVCdWZmZXINCj4gKyAgKTsNCj4gKw0K PiArRUZJX1NUQVRVUw0KPiArTG9hZEFsbERlc2NyaXB0b3IgKA0KPiArICBJTiAgRUZJX1VTQl9J T19QUk9UT0NPTCAgICAgICAgKlVzYklvLA0KPiArICBPVVQgRUZJX1VTQl9DT05GSUdfREVTQ1JJ UFRPUiAgKipDb25maWdEZXNjDQo+ICsgICk7DQo+ICsNCj4gK0JPT0xFQU4NCj4gK05leHREZXNj cmlwdG9yICgNCj4gKyAgSU4gRUZJX1VTQl9DT05GSUdfREVTQ1JJUFRPUiAgKkRlc2MsDQo+ICsg IElOIE9VVCBVSU5UTiAgICAgICAgICAgICAgICAgICpPZmZzZXQNCj4gKyAgKTsNCj4gKw0KPiAr RUZJX1NUQVRVUw0KPiArR2V0RnVuY3Rpb25hbERlc2NyaXB0b3IgKA0KPiArICBJTiAgRUZJX1VT Ql9DT05GSUdfREVTQ1JJUFRPUiAgKkNvbmZpZywNCj4gKyAgSU4gIFVJTlQ4ICAgICAgICAgICAg ICAgICAgICAgIEZ1bkRlc2NyaXB0b3JUeXBlLA0KPiArICBPVVQgVk9JRCAgICAgICAgICAgICAg ICAgICAgICAgKkRhdGFCdWZmZXINCj4gKyAgKTsNCj4gKw0KPiArVk9JRA0KPiArR2V0RW5kcG9p bnQgKA0KPiArICBJTiAgICAgIEVGSV9VU0JfSU9fUFJPVE9DT0wgICpVc2JJbywNCj4gKyAgSU4g T1VUICBVU0JfUk5ESVNfREVWSUNFICAgICAqVXNiUm5kaXNEZXZpY2UNCj4gKyAgKTsNCj4gKw0K PiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtVc2JSbmRpc0ludGVycnVwdCAoDQo+ICsgIElO IEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIEJPT0xFQU4gICAg ICAgICAgICAgICAgICAgICAgSXNOZXdUcmFuc2ZlciwNCj4gKyAgSU4gVUlOVE4gICAgICAgICAg ICAgICAgICAgICAgICBQb2xsaW5nSW50ZXJ2YWwsDQo+ICsgIElOIEVGSV9VU0JfREVWSUNFX1JF UVVFU1QgICAgICAgKlJlcXVzdA0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklB UEkNCj4gK0ludGVycnVwdENhbGxiYWNrICgNCj4gKyAgSU4gIFZPSUQgICAgKkRhdGEsDQo+ICsg IElOICBVSU5UTiAgIERhdGFMZW5ndGgsDQo+ICsgIElOICBWT0lEICAgICpDb250ZXh0LA0KPiAr ICBJTiAgVUlOVDMyICBTdGF0dXMNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJ QVBJDQo+ICtHZXRVc2JFdGhNYWNBZGRyZXNzICgNCj4gKyAgSU4gIEVES0lJX1VTQl9FVEhFUk5F VF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIE9VVCBFRklfTUFDX0FERFJFU1MgICAgICAgICAgICAg ICpNYWNBZGRyZXNzDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiAr VXNiRXRoQnVsa1NpemUgKA0KPiArICBJTiAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAq VGhpcywNCj4gKyAgT1VUIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgKkJ1bGtTaXplDQo+ ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUm5kaXNEdW1teVJldHVy biAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUm5kaXNVbmRpU3RhcnQg KA0KPiArICBJTiBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gTklDX0RBVEEgICpOaWMNCj4gKyAg KTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtSbmRpc1VuZGlTdG9wICgNCj4g KyAgSU4gUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOIE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUm5kaXNVbmRpR2V0SW5pdEluZm8gKA0K PiArICBJTiBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gTklDX0RBVEEgICpOaWMNCj4gKyAgKTsN Cj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtSbmRpc1VuZGlHZXRDb25maWdJbmZv ICgNCj4gKyAgSU4gUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOIE5JQ19EQVRBICAqTmljDQo+ICsg ICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUm5kaXNVbmRpSW5pdGlhbGl6 ZSAoDQo+ICsgIElOIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiBOSUNfREFUQSAgKk5pYw0KPiAr ICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1JuZGlzVW5kaVRyYW5zbWl0 ICgNCj4gKyAgSU4gICAgICBQWEVfQ0RCICAgICAgICAgICAgICAgICAgICAgICpDZGIsDQo+ICsg IElOICAgICAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gICAg ICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICpCdWxrT3V0RGF0YSwNCj4gKyAgSU4gT1VU ICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICpEYXRhTGVuZ3RoDQo+ICsgICk7DQo+ICsN Cj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUm5kaXNVbmRpUmVjZWl2ZSAoDQo+ICsgIElO ICAgICBQWEVfQ0RCICAgICAgICAgICAgICAgICAgICAgICpDZGIsDQo+ICsgIElOICAgICBFREtJ SV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiBPVVQgVk9JRCAgICAgICAg ICAgICAgICAgICAgICAgICAqQnVsa0luRGF0YSwNCj4gKyAgSU4gT1VUIFVJTlROICAgICAgICAg ICAgICAgICAgICAgICAgKkRhdGFMZW5ndGgNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0K PiArRUZJQVBJDQo+ICtSbmRpc1VuZGlSZXNldCAoDQo+ICsgIElOIFBYRV9DREIgICAqQ2RiLA0K PiArICBJTiBOSUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtF RklBUEkNCj4gK1JuZGlzVW5kaVNodXRkb3duICgNCj4gKyAgSU4gUFhFX0NEQiAgICpDZGIsDQo+ ICsgIElOIE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VG SUFQSQ0KPiArUm5kaXNVbmRpUmVjZWl2ZUZpbHRlciAoDQo+ICsgIElOIFBYRV9DREIgICAqQ2Ri LA0KPiArICBJTiBOSUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ ICtFRklBUEkNCj4gK1JuZGlzVW5kaUdldFN0YXR1cyAoDQo+ICsgIElOIFBYRV9DREIgICAqQ2Ri LA0KPiArICBJTiBOSUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ ICtFRklBUEkNCj4gK0dldFVzYkhlYWRlckZ1bkRlc2NyaXB0b3IgKA0KPiArICBJTiAgRURLSUlf VVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4gKyAgT1VUIFVTQl9IRUFERVJfRlVOX0RF U0NSSVBUT1IgICAgKlVzYkhlYWRlckZ1bkRlc2NyaXB0b3INCj4gKyAgKTsNCj4gKw0KPiArRUZJ X1NUQVRVUw0KPiArRUZJQVBJDQo+ICtHZXRVc2JVbmlvbkZ1bkRlc2NyaXB0b3IgKA0KPiArICBJ TiAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4gKyAgT1VUIFVTQl9VTklP Tl9GVU5fREVTQ1JJUFRPUiAgICAgKlVzYlVuaW9uRnVuRGVzY3JpcHRvcg0KPiArICApOw0KPiAr DQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0dldFVzYlJuZGlzRnVuRGVzY3JpcHRvciAo DQo+ICsgIElOICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBPVVQg VVNCX0VUSEVSTkVUX0ZVTl9ERVNDUklQVE9SICAqVXNiRXRoRnVuRGVzY3JpcHRvcg0KPiArICAp Ow0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1NldFVzYlJuZGlzTWNhc3RGaWx0 ZXIgKA0KPiArICBJTiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJ TiBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlLA0KPiArICBJTiBWT0lEICAgICAg ICAgICAgICAgICAgICAgICAgICpNY2FzdEFkZHINCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRV Uw0KPiArRUZJQVBJDQo+ICtTZXRVc2JSbmRpc1Bvd2VyRmlsdGVyICgNCj4gKyAgSU4gRURLSUlf VVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gVUlOVDE2ICAgICAgICAgICAg ICAgICAgICAgICBWYWx1ZSwNCj4gKyAgSU4gVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICBM ZW5ndGgsDQo+ICsgIElOIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgKlBhdHRlcm5GaWx0 ZXINCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtHZXRVc2JSbmRp c1Bvd2VyRmlsdGVyICgNCj4gKyAgSU4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhp cywNCj4gKyAgSU4gVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSwNCj4gKyAgSU4g Qk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAqUGF0dGVybkFjdGl2ZQ0KPiArICApOw0KPiAr DQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1NldFVzYlJuZGlzUGFja2V0RmlsdGVyICgN Cj4gKyAgSU4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gVUlO VDE2ICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZQ0KPiArICApOw0KPiArDQo+ICtFRklfU1RB VFVTDQo+ICtFRklBUEkNCj4gK0dldFJuZGlzU3RhdGlzdGljICgNCj4gKyAgSU4gRURLSUlfVVNC X0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gVUlOVDE2ICAgICAgICAgICAgICAg ICAgICAgICBWYWx1ZSwNCj4gKyAgSU4gVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAqU3Rh dGlzdGljDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK1JuZGlzQ29udHJvbE1zZyAo DQo+ICsgIElOICBVU0JfUk5ESVNfREVWSUNFICAgICAgICAqVXNiUm5kaXNEZXZpY2UsDQo+ICsg IElOICBSRU1PVEVfTkRJU19NU0dfSEVBREVSICAqUm5kaXNNc2csDQo+ICsgIE9VVCBSRU1PVEVf TkRJU19NU0dfSEVBREVSICAqUm5kaXNNc2dSZXNwb25zZQ0KPiArICApOw0KPiArDQo+ICtFRklf U1RBVFVTDQo+ICtSbmRpc1RyYW5zbWl0RGF0YU1zZyAoDQo+ICsgIElOICBVU0JfUk5ESVNfREVW SUNFICAgICAgICAqVXNiUm5kaXNEZXZpY2UsDQo+ICsgIElOICBSRU1PVEVfTkRJU19NU0dfSEVB REVSICAqUm5kaXNNc2csDQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAqVHJhbnNm ZXJMZW5ndGgNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArUm5kaXNSZWNlaXZlRGF0 YU1zZyAoDQo+ICsgIElOICBVU0JfUk5ESVNfREVWSUNFICAgICAgICAqVXNiUm5kaXNEZXZpY2Us DQo+ICsgIElOICBSRU1PVEVfTkRJU19NU0dfSEVBREVSICAqUm5kaXNNc2csDQo+ICsgIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgICAqVHJhbnNmZXJMZW5ndGgNCj4gKyAgKTsNCj4gKw0KPiAr Vk9JRA0KPiArUHJpbnRSbmRpc01zZyAoDQo+ICsgIElOICBSRU1PVEVfTkRJU19NU0dfSEVBREVS ICAqUm5kaXNNc2cNCj4gKyAgKTsNCj4gKw0KPiArI2RlZmluZSBSTkRJU19NQUpPUl9WRVJTSU9O ICAgICAgMHgwMDAwMDAwMQ0KPiArI2RlZmluZSBSTkRJU19NSU5PUl9WRVJTSU9OICAgICAgMHgw MDAwMDAwMA0KPiArI2RlZmluZSBSTkRJU19NQVhfVFJBTlNGRVJfU0laRSAgMHg0MDAwDQo+ICsN Cj4gKyNkZWZpbmUgUk5ESVNfUEFDS0VUX01TRyAgICAgICAgICAgMHgwMDAwMDAwMQ0KPiArI2Rl ZmluZSBSTkRJU19JTklUSUFMSVpFX01TRyAgICAgICAweDAwMDAwMDAyDQo+ICsjZGVmaW5lIFJO RElTX0lOSVRJQUxJWkVfQ01QTFQgICAgIDB4ODAwMDAwMDINCj4gKyNkZWZpbmUgUk5ESVNfSExU X01TRyAgICAgICAgICAgICAgMHgwMDAwMDAwMw0KPiArI2RlZmluZSBSTkRJU19RVUVSWV9NU0cg ICAgICAgICAgICAweDAwMDAwMDA0DQo+ICsjZGVmaW5lIFJORElTX1FVRVJZX0NNUExUICAgICAg ICAgIDB4ODAwMDAwMDQNCj4gKyNkZWZpbmUgUk5ESVNfU0VUX01TRyAgICAgICAgICAgICAgMHgw MDAwMDAwNQ0KPiArI2RlZmluZSBSTkRJU19TRVRfQ01QTFQgICAgICAgICAgICAweDgwMDAwMDA1 DQo+ICsjZGVmaW5lIFJORElTX1JFU0VUX01TRyAgICAgICAgICAgIDB4MDAwMDAwMDYNCj4gKyNk ZWZpbmUgUk5ESVNfUkVTRVRfQ01QTFQgICAgICAgICAgMHg4MDAwMDAwNg0KPiArI2RlZmluZSBS TkRJU19JTkRJQ0FURV9TVEFUVVNfTVNHICAweDAwMDAwMDA3DQo+ICsjZGVmaW5lIFJORElTX0tF RVBBTElWRV9NU0cgICAgICAgIDB4MDAwMDAwMDgNCj4gKyNkZWZpbmUgUk5ESVNfS0VFUEFMSVZF X0NNUExUICAgICAgMHg4MDAwMDAwOA0KPiArDQo+ICsjZGVmaW5lIFJORElTX1NUQVRVU19TVUND RVNTICAgICAgICAgICAweDAwMDAwMDAwDQo+ICsjZGVmaW5lIFJORElTX1NUQVRVU19GQUlMVVJF ICAgICAgICAgICAweEMwMDAwMDAxDQo+ICsjZGVmaW5lIFJORElTX1NUQVRVU19JTlZBTElEX0RB VEEgICAgICAweEMwMDEwMDE1DQo+ICsjZGVmaW5lIFJORElTX1NUQVRVU19OT1RfU1VQUE9SVEVE ICAgICAweEMwMDAwMEJCDQo+ICsjZGVmaW5lIFJORElTX1NUQVRVU19NRURJQV9DT05ORUNUICAg ICAweDQwMDEwMDBCDQo+ICsjZGVmaW5lIFJORElTX1NUQVRVU19NRURJQV9ESVNDT05ORUNUICAw eDQwMDEwMDBDDQo+ICsNCj4gKyNkZWZpbmUgUk5ESVNfQ09OVFJPTF9USU1FT1VUICAgIDEwMDAw ICAgICAgICAgICAgLy8gMTBzZWMNCj4gKyNkZWZpbmUgUk5ESVNfS0VFUEFMSVZFX1RJTUVPVVQg IDUwMDAgICAgICAgICAgICAgLy8gNXNlYw0KPiArDQo+ICsjZGVmaW5lIFNFTkRfRU5DQVBTVUxB VEVEX0NPTU1BTkQgIDB4MDAwMDAwMDANCj4gKyNkZWZpbmUgR0VUX0VOQ0FQU1VMQVRFRF9SRVNQ T05TRSAgMHgwMDAwMDAwMQ0KPiArDQo+ICsvLw0KPiArLy8gR2VuZXJhbCBPYmplY3RzDQo+ICsv Lw0KPiArLy8gVGFrZW4gZnJvbSBOVERETkRJUy5IDQo+ICsjZGVmaW5lIE9JRF9HRU5fU1VQUE9S VEVEX0xJU1QgICAgICAgICAweDAwMDEwMTAxDQo+ICsjZGVmaW5lIE9JRF9HRU5fSEFSRFdBUkVf U1RBVFVTICAgICAgICAweDAwMDEwMTAyDQo+ICsjZGVmaW5lIE9JRF9HRU5fTUVESUFfU1VQUE9S VEVEICAgICAgICAweDAwMDEwMTAzDQo+ICsjZGVmaW5lIE9JRF9HRU5fTUVESUFfSU5fVVNFICAg ICAgICAgICAweDAwMDEwMTA0DQo+ICsjZGVmaW5lIE9JRF9HRU5fTUFYSU1VTV9MT09LQUhFQUQg ICAgICAweDAwMDEwMTA1DQo+ICsjZGVmaW5lIE9JRF9HRU5fTUFYSU1VTV9GUkFNRV9TSVpFICAg ICAweDAwMDEwMTA2DQo+ICsjZGVmaW5lIE9JRF9HRU5fTElOS19TUEVFRCAgICAgICAgICAgICAw eDAwMDEwMTA3DQo+ICsjZGVmaW5lIE9JRF9HRU5fVFJBTlNNSVRfQlVGRkVSX1NQQUNFICAweDAw MDEwMTA4DQo+ICsjZGVmaW5lIE9JRF9HRU5fUkVDRUlWRV9CVUZGRVJfU1BBQ0UgICAweDAwMDEw MTA5DQo+ICsjZGVmaW5lIE9JRF9HRU5fVFJBTlNNSVRfQkxPQ0tfU0laRSAgICAweDAwMDEwMTBB DQo+ICsjZGVmaW5lIE9JRF9HRU5fUkVDRUlWRV9CTE9DS19TSVpFICAgICAweDAwMDEwMTBCDQo+ ICsjZGVmaW5lIE9JRF9HRU5fVkVORE9SX0lEICAgICAgICAgICAgICAweDAwMDEwMTBDDQo+ICsj ZGVmaW5lIE9JRF9HRU5fVkVORE9SX0RFU0NSSVBUSU9OICAgICAweDAwMDEwMTBEDQo+ICsjZGVm aW5lIE9JRF9HRU5fQ1VSUkVOVF9QQUNLRVRfRklMVEVSICAweDAwMDEwMTBFDQo+ICsjZGVmaW5l IE9JRF9HRU5fQ1VSUkVOVF9MT09LQUhFQUQgICAgICAweDAwMDEwMTBGDQo+ICsjZGVmaW5lIE9J RF9HRU5fRFJJVkVSX1ZFUlNJT04gICAgICAgICAweDAwMDEwMTEwDQo+ICsjZGVmaW5lIE9JRF9H RU5fTUFYSU1VTV9UT1RBTF9TSVpFICAgICAweDAwMDEwMTExDQo+ICsjZGVmaW5lIE9JRF9HRU5f UFJPVE9DT0xfT1BUSU9OUyAgICAgICAweDAwMDEwMTEyDQo+ICsjZGVmaW5lIE9JRF9HRU5fTUFD X09QVElPTlMgICAgICAgICAgICAweDAwMDEwMTEzDQo+ICsjZGVmaW5lIE9JRF9HRU5fTUVESUFf Q09OTkVDVF9TVEFUVVMgICAweDAwMDEwMTE0DQo+ICsjZGVmaW5lIE9JRF9HRU5fTUFYSU1VTV9T RU5EX1BBQ0tFVFMgICAweDAwMDEwMTE1DQo+ICsjZGVmaW5lIE9JRF9HRU5fVkVORE9SX0RSSVZF Ul9WRVJTSU9OICAweDAwMDEwMTE2DQo+ICsNCj4gKyNkZWZpbmUgT0lEX0dFTl9YTUlUX09LICAg ICAgICAweDAwMDIwMTAxDQo+ICsjZGVmaW5lIE9JRF9HRU5fUkNWX09LICAgICAgICAgMHgwMDAy MDEwMg0KPiArI2RlZmluZSBPSURfR0VOX1hNSVRfRVJST1IgICAgIDB4MDAwMjAxMDMNCj4gKyNk ZWZpbmUgT0lEX0dFTl9SQ1ZfRVJST1IgICAgICAweDAwMDIwMTA0DQo+ICsjZGVmaW5lIE9JRF9H RU5fUkNWX05PX0JVRkZFUiAgMHgwMDAyMDEwNQ0KPiArDQo+ICsjZGVmaW5lIE9JRF9HRU5fRElS RUNURURfQllURVNfWE1JVCAgICAweDAwMDIwMjAxDQo+ICsjZGVmaW5lIE9JRF9HRU5fRElSRUNU RURfRlJBTUVTX1hNSVQgICAweDAwMDIwMjAyDQo+ICsjZGVmaW5lIE9JRF9HRU5fTVVMVElDQVNU X0JZVEVTX1hNSVQgICAweDAwMDIwMjAzDQo+ICsjZGVmaW5lIE9JRF9HRU5fTVVMVElDQVNUX0ZS QU1FU19YTUlUICAweDAwMDIwMjA0DQo+ICsjZGVmaW5lIE9JRF9HRU5fQlJPQURDQVNUX0JZVEVT X1hNSVQgICAweDAwMDIwMjA1DQo+ICsjZGVmaW5lIE9JRF9HRU5fQlJPQURDQVNUX0ZSQU1FU19Y TUlUICAweDAwMDIwMjA2DQo+ICsjZGVmaW5lIE9JRF9HRU5fRElSRUNURURfQllURVNfUkNWICAg ICAweDAwMDIwMjA3DQo+ICsjZGVmaW5lIE9JRF9HRU5fRElSRUNURURfRlJBTUVTX1JDViAgICAw eDAwMDIwMjA4DQo+ICsjZGVmaW5lIE9JRF9HRU5fTVVMVElDQVNUX0JZVEVTX1JDViAgICAweDAw MDIwMjA5DQo+ICsjZGVmaW5lIE9JRF9HRU5fTVVMVElDQVNUX0ZSQU1FU19SQ1YgICAweDAwMDIw MjBBDQo+ICsjZGVmaW5lIE9JRF9HRU5fQlJPQURDQVNUX0JZVEVTX1JDViAgICAweDAwMDIwMjBC DQo+ICsjZGVmaW5lIE9JRF9HRU5fQlJPQURDQVNUX0ZSQU1FU19SQ1YgICAweDAwMDIwMjBDDQo+ ICsjZGVmaW5lIE9JRF9HRU5fUkNWX0NSQ19FUlJPUiAgICAgICAgICAweDAwMDIwMjBEDQo+ICsj ZGVmaW5lIE9JRF9HRU5fVFJBTlNNSVRfUVVFVUVfTEVOR1RIICAweDAwMDIwMjBFDQo+ICsNCj4g KyNkZWZpbmUgT0lEXzgwMl8zX0NVUlJFTlRfQUREUkVTUyAgMHgwMTAxMDEwMg0KPiArLy8NCj4g Ky8vIE5kaXMgUGFja2V0IEZpbHRlciBCaXRzIChPSURfR0VOX0NVUlJFTlRfUEFDS0VUX0ZJTFRF UikuDQo+ICsvLw0KPiArI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX0RJUkVDVEVEICAgICAgICAw eDAwMDENCj4gKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9NVUxUSUNBU1QgICAgICAgMHgwMDAy DQo+ICsjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfQUxMX01VTFRJQ0FTVCAgIDB4MDAwNA0KPiAr I2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX0JST0FEQ0FTVCAgICAgICAweDAwMDgNCj4gKyNkZWZp bmUgTkRJU19QQUNLRVRfVFlQRV9TT1VSQ0VfUk9VVElORyAgMHgwMDEwDQo+ICsjZGVmaW5lIE5E SVNfUEFDS0VUX1RZUEVfUFJPTUlTQ1VPVVMgICAgIDB4MDAyMA0KPiArI2RlZmluZSBORElTX1BB Q0tFVF9UWVBFX1NNVCAgICAgICAgICAgICAweDAwNDANCj4gKyNkZWZpbmUgTkRJU19QQUNLRVRf VFlQRV9BTExfTE9DQUwgICAgICAgMHgwMDgwDQo+ICsjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVf TUFDX0ZSQU1FICAgICAgIDB4ODAwMA0KPiArI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX0ZVTkNU SU9OQUwgICAgICAweDQwMDANCj4gKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9BTExfRlVOQ1RJ T05BTCAgMHgyMDAwDQo+ICsjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfR1JPVVAgICAgICAgICAg IDB4MTAwMA0KPiArDQo+ICsjcHJhZ21hIHBhY2soMSkNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qg X1JFTU9URV9ORElTX01TR19IRUFERVIgew0KPiArICBVSU5UMzIgICAgTWVzc2FnZVR5cGU7DQo+ ICsgIFVJTlQzMiAgICBNZXNzYWdlTGVuZ3RoOw0KPiArfSBSRU1PVEVfTkRJU19NU0dfSEVBREVS Ow0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdlVHlwZTsN Cj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VMZW5ndGg7DQo+ICsgIFVJTlQzMiAgICBSZXF1ZXN0SUQ7 DQo+ICsgIFVJTlQzMiAgICBNYWpvclZlcnNpb247DQo+ICsgIFVJTlQzMiAgICBNaW5vclZlcnNp b247DQo+ICsgIFVJTlQzMiAgICBNYXhUcmFuc2ZlclNpemU7DQo+ICt9IFJFTU9URV9ORElTX0lO SVRJQUxJWkVfTVNHOw0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIFVJTlQzMiAgICBN ZXNzYWdlVHlwZTsNCj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VMZW5ndGg7DQo+ICsgIFVJTlQzMiAg ICBSZXF1ZXN0SUQ7DQo+ICt9IFJFTU9URV9ORElTX0hBTFRfTVNHOw0KPiArDQo+ICt0eXBlZGVm IHN0cnVjdCB7DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdlVHlwZTsNCj4gKyAgVUlOVDMyICAgIE1l c3NhZ2VMZW5ndGg7DQo+ICsgIFVJTlQzMiAgICBSZXF1ZXN0SUQ7DQo+ICsgIFVJTlQzMiAgICBP aWQ7DQo+ICsgIFVJTlQzMiAgICBJbmZvcm1hdGlvbkJ1ZmZlckxlbmd0aDsNCj4gKyAgVUlOVDMy ICAgIEluZm9ybWF0aW9uQnVmZmVyT2Zmc2V0Ow0KPiArICBVSU5UMzIgICAgUmVzZXJ2ZWQ7DQo+ ICt9IFJFTU9URV9ORElTX1FVRVJZX01TRzsNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiAr ICBSRU1PVEVfTkRJU19RVUVSWV9NU0cgICAgUXVlcnlNc2c7DQo+ICsgIFVJTlQ4ICAgICAgICAg ICAgICAgICAgICBBZGRyWzZdOw0KPiArfSBSRU1PVEVfTkRJU19RVUVSWV9NQUNfTVNHOw0KPiAr DQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIFJFTU9URV9ORElTX1FVRVJZX01TRyAgICBRdWVy eU1zZzsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgIE1heFRvdGFsU2l6ZTsNCj4gK30g UkVNT1RFX05ESVNfUVVFUllfTUFYX1RPVEFMX1NJWkVfTVNHOw0KPiArDQo+ICt0eXBlZGVmIHN0 cnVjdCB7DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdlVHlwZTsNCj4gKyAgVUlOVDMyICAgIE1lc3Nh Z2VMZW5ndGg7DQo+ICsgIFVJTlQzMiAgICBSZXF1ZXN0SUQ7DQo+ICsgIFVJTlQzMiAgICBPaWQ7 DQo+ICsgIFVJTlQzMiAgICBJbmZvcm1hdGlvbkJ1ZmZlckxlbmd0aDsNCj4gKyAgVUlOVDMyICAg IEluZm9ybWF0aW9uQnVmZmVyT2Zmc2V0Ow0KPiArICBVSU5UMzIgICAgUmVzZXJ2ZWQ7DQo+ICt9 IFJFTU9URV9ORElTX1NFVF9NU0c7DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlO VDMyICAgIE1lc3NhZ2VUeXBlOw0KPiArICBVSU5UMzIgICAgTWVzc2FnZUxlbmd0aDsNCj4gKyAg VUlOVDMyICAgIFJlc2VydmVkOw0KPiArfSBSRU1PVEVfTkRJU19SRVNFVF9NU0c7DQo+ICsNCj4g K3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VUeXBlOw0KPiArICBVSU5U MzIgICAgTWVzc2FnZUxlbmd0aDsNCj4gKyAgVUlOVDMyICAgIFN0YXR1czsNCj4gKyAgVUlOVDMy ICAgIFN0YXR1c0J1ZmZlckxlbmd0aDsNCj4gKyAgVUlOVDMyICAgIFN0YXR1c0J1ZmZlck9mZnNl dDsNCj4gK30gUkVNT1RFX05ESVNfSU5ESUNBVEVfU1RBVFVTX01TRzsNCj4gKw0KPiArdHlwZWRl ZiBzdHJ1Y3Qgew0KPiArICBVSU5UMzIgICAgRGlhZ1N0YXR1czsNCj4gKyAgVUlOVDMyICAgIEVy cm9yT2Zmc2V0Ow0KPiArfSBSTkRJU19ESUFHTk9TVElDX0lORk87DQo+ICsNCj4gK3R5cGVkZWYg c3RydWN0IHsNCj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VUeXBlOw0KPiArICBVSU5UMzIgICAgTWVz c2FnZUxlbmd0aDsNCj4gKyAgVUlOVDMyICAgIFJlcXVlc3RJRDsNCj4gK30gUkVNT1RFX05ESVNf S0VFUEFMSVZFX01TRzsNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UMzIgICAg TWVzc2FnZVR5cGU7DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdlTGVuZ3RoOw0KPiArICBVSU5UMzIg ICAgUmVxdWVzdElEOw0KPiArICBVSU5UMzIgICAgU3RhdHVzOw0KPiArICBVSU5UMzIgICAgTWFq b3JWZXJzaW9uOw0KPiArICBVSU5UMzIgICAgTWlub3JWZXJzaW9uOw0KPiArICBVSU5UMzIgICAg RGV2aWNlRmxhZ3M7DQo+ICsgIFVJTlQzMiAgICBNZWRpdW07DQo+ICsgIFVJTlQzMiAgICBNYXhQ YWNrZXRzUGVyVHJhbnNmZXI7DQo+ICsgIFVJTlQzMiAgICBNYXhUcmFuc2ZlclNpemU7DQo+ICsg IFVJTlQzMiAgICBQYWNrZXRBbGlnbm1lbnRGYWN0b3I7DQo+ICsgIFVJTlQ2NCAgICBSZXNlcnZl ZDsNCj4gK30gUkVNT1RFX05ESVNfSU5JVElBTElaRV9DTVBMVDsNCj4gKw0KPiArdHlwZWRlZiBz dHJ1Y3Qgew0KPiArICBVSU5UMzIgICAgTWVzc2FnZVR5cGU7DQo+ICsgIFVJTlQzMiAgICBNZXNz YWdlTGVuZ3RoOw0KPiArICBVSU5UMzIgICAgUmVxdWVzdElEOw0KPiArICBVSU5UMzIgICAgU3Rh dHVzOw0KPiArICBVSU5UMzIgICAgSW5mb3JtYXRpb25CdWZmZXJMZW5ndGg7DQo+ICsgIFVJTlQz MiAgICBJbmZvcm1hdGlvbkJ1ZmZlck9mZnNldDsNCj4gK30gUkVNT1RFX05ESVNfUVVFUllfQ01Q TFQ7DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgUkVNT1RFX05ESVNfUVVFUllfQ01Q TFQgICAgUXVlcnlDbXBsdDsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgQWRkcls2 XTsNCj4gK30gUkVNT1RFX05ESVNfUVVFUllfTUFDX0NNUExUOw0KPiArDQo+ICt0eXBlZGVmIHN0 cnVjdCB7DQo+ICsgIFJFTU9URV9ORElTX1FVRVJZX0NNUExUICAgIFF1ZXJ5Q21wbHQ7DQo+ICsg IFVJTlQzMiAgICAgICAgICAgICAgICAgICAgIE1heFRvdGFsU2l6ZTsNCj4gK30gUkVNT1RFX05E SVNfUVVFUllfTUFYX1RPVEFMX1NJWkVfQ01QTFQ7DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsN Cj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VUeXBlOw0KPiArICBVSU5UMzIgICAgTWVzc2FnZUxlbmd0 aDsNCj4gKyAgVUlOVDMyICAgIFJlcXVlc3RJRDsNCj4gKyAgVUlOVDMyICAgIFN0YXR1czsNCj4g K30gUkVNT1RFX05ESVNfU0VUX0NNUExUOw0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsg IFVJTlQzMiAgICBNZXNzYWdlVHlwZTsNCj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VMZW5ndGg7DQo+ ICsgIFVJTlQzMiAgICBTdGF0dXM7DQo+ICsgIFVJTlQzMiAgICBBZGRyZXNzaW5nUmVzZXQ7DQo+ ICt9IFJFTU9URV9ORElTX1JFU0VUX0NNUExUOw0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ ICsgIFVJTlQzMiAgICBNZXNzYWdlVHlwZTsNCj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VMZW5ndGg7 DQo+ICsgIFVJTlQzMiAgICBSZXF1ZXN0SUQ7DQo+ICsgIFVJTlQzMiAgICBTdGF0dXM7DQo+ICt9 IFJFTU9URV9ORElTX0tFRVBBTElWRV9DTVBMVDsNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0K PiArICBVSU5UMzIgICAgTWVzc2FnZVR5cGU7DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdlTGVuZ3Ro Ow0KPiArICBVSU5UMzIgICAgRGF0YU9mZnNldDsNCj4gKyAgVUlOVDMyICAgIERhdGFMZW5ndGg7 DQo+ICsgIFVJTlQzMiAgICBPdXRPZkJhbmREYXRhT2Zmc2V0Ow0KPiArICBVSU5UMzIgICAgT3V0 T2ZCYW5kRGF0YUxlbmd0aDsNCj4gKyAgVUlOVDMyICAgIE51bU91dE9mQmFuZERhdGFFbGVtZW50 czsNCj4gKyAgVUlOVDMyICAgIFBlclBhY2tldEluZm9PZmZzZXQ7DQo+ICsgIFVJTlQzMiAgICBQ ZXJQYWNrZXRJbmZvTGVuZ3RoOw0KPiArICBVSU5UMzIgICAgUmVzZXJ2ZWQxOw0KPiArICBVSU5U MzIgICAgUmVzZXJ2ZWQyOw0KPiArfSBSRU1PVEVfTkRJU19QQUNLRVRfTVNHOw0KPiArDQo+ICt0 eXBlZGVmIHN0cnVjdCB7DQo+ICsgIFVJTlQzMiAgICBTaXplOw0KPiArICBVSU5UMzIgICAgVHlw ZTsNCj4gKyAgVUlOVDMyICAgIENsYXNzSW5mb3JtYXRpb25PZmZzZXQ7DQo+ICt9IE9VVF9PRl9C QU5EX0RBVEFfUkVDT1JEOw0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIFVJTlQzMiAg ICBTaXplOw0KPiArICBVSU5UMzIgICAgVHlwZTsNCj4gKyAgVUlOVDMyICAgIENsYXNzSW5mb3Jt YXRpb25PZmZzZXQ7DQo+ICt9IFBFUl9QQUNLRVRfSU5GT19EQVRBX1JFQ09SRDsNCj4gKw0KPiAr dHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBMSVNUX0VOVFJZICAgIFBhY2tldExpc3Q7DQo+ICsgIFVJ TlQ4ICAgICAgICAgKk9yZ0J1ZmZlcjsNCj4gKyAgVUlOVE4gICAgICAgICBSZW1haW5pbmdMZW5n dGg7DQo+ICsgIFVJTlQ4ICAgICAgICAgKlBhY2tldFN0YXJ0QnVmZmVyOyAgICAvLyBWYXJpYWJs ZSBzaXplIGRhdGEgdG8gZm9sbG93DQo+ICt9IFBBQ0tFVF9MSVNUOw0KPiArDQo+ICsjcHJhZ21h IHBhY2soKQ0KPiArDQo+ICsjZW5kaWYNCj4gZGlmZiAtLWdpdCBhL01kZU1vZHVsZVBrZy9CdXMv VXNiL1VzYk5ldHdvcmsvVXNiUm5kaXMvVXNiUm5kaXMuaW5mDQo+IGIvTWRlTW9kdWxlUGtnL0J1 cy9Vc2IvVXNiTmV0d29yay9Vc2JSbmRpcy9Vc2JSbmRpcy5pbmYNCj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMC4uMTAyNzgyODUyNw0KPiAtLS0gL2Rldi9udWxsDQo+ ICsrKyBiL01kZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsvVXNiUm5kaXMvVXNiUm5kaXMu aW5mDQo+IEBAIC0wLDAgKzEsNDIgQEANCj4gKyMjIEBmaWxlDQo+ICsjICAgVGhpcyBpcyBVc2Ig Um5kaXMgZHJpdmVyIGZvciBEWEUgcGhhc2UuDQo+ICsjDQo+ICsjIENvcHlyaWdodCAoYykgMjAy MywgQW1lcmljYW4gTWVnYXRyZW5kcyBJbnRlcm5hdGlvbmFsIExMQy4gQWxsIHJpZ2h0cw0KPiBy ZXNlcnZlZC48QlI+DQo+ICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2Ut UGF0ZW50DQo+ICsjIw0KPiArDQo+ICtbRGVmaW5lc10NCj4gKyAgSU5GX1ZFUlNJT04gICAgICAg ICAgICAgICAgICAgID0gMHgwMDAxMDAwNQ0KPiArICBCQVNFX05BTUUgICAgICAgICAgICAgICAg ICAgICAgPSBVc2JSbmRpcw0KPiArICBGSUxFX0dVSUQgICAgICAgICAgICAgICAgICAgICAgPSAx MUUzMkMzNC02MEI1LTQ5OTEtOERFQS02M0QzRThDODc2REUNCj4gKyAgTU9EVUxFX1RZUEUgICAg ICAgICAgICAgICAgICAgID0gRFhFX0RSSVZFUg0KPiArICBWRVJTSU9OX1NUUklORyAgICAgICAg ICAgICAgICAgPSAxLjANCj4gKyAgRU5UUllfUE9JTlQgICAgICAgICAgICAgICAgICAgID0gVXNi Um5kaXNFbnRyeQ0KPiArDQo+ICtbU291cmNlc10NCj4gKyAgVXNiUm5kaXMuYw0KPiArICBVc2JS bmRpcy5oDQo+ICsgIFVzYlJuZGlzRnVuY3Rpb24uYw0KPiArICBDb21wb25lbnROYW1lLmMNCj4g Kw0KPiArW1BhY2thZ2VzXQ0KPiArICBNZGVQa2cvTWRlUGtnLmRlYw0KPiArICBNZGVNb2R1bGVQ a2cvTWRlTW9kdWxlUGtnLmRlYw0KPiArDQo+ICtbTGlicmFyeUNsYXNzZXNdDQo+ICsgIFVlZmlE cml2ZXJFbnRyeVBvaW50DQo+ICsgIFVlZmlCb290U2VydmljZXNUYWJsZUxpYg0KPiArICBVZWZp TGliDQo+ICsgIERlYnVnTGliDQo+ICsgIFVlZmlVc2JMaWINCj4gKyAgTWVtb3J5QWxsb2NhdGlv bkxpYg0KPiArICBCYXNlTWVtb3J5TGliDQo+ICsNCj4gK1tQcm90b2NvbHNdDQo+ICsgIGdFZmlV c2JJb1Byb3RvY29sR3VpZA0KPiArICBnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZA0KPiArICBn RWZpRHJpdmVyQmluZGluZ1Byb3RvY29sR3VpZA0KPiArICBnRWRrSUlVc2JFdGhQcm90b2NvbEd1 aWQNCj4gKw0KPiArW0RlcGV4XQ0KPiArICBUUlVFDQo+IGRpZmYgLS1naXQgYS9NZGVNb2R1bGVQ a2cvQnVzL1VzYi9Vc2JOZXR3b3JrL1VzYlJuZGlzL1VzYlJuZGlzRnVuY3Rpb24uYw0KPiBiL01k ZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsvVXNiUm5kaXMvVXNiUm5kaXNGdW5jdGlvbi5j DQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAuLjlhYmEzZjExMjkN Cj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9NZGVNb2R1bGVQa2cvQnVzL1VzYi9Vc2JOZXR3b3Jr L1VzYlJuZGlzL1VzYlJuZGlzRnVuY3Rpb24uYw0KPiBAQCAtMCwwICsxLDE3MTggQEANCj4gKy8q KiBAZmlsZQ0KPiArICBUaGlzIGZpbGUgY29udGFpbnMgY29kZSBmb3IgVVNCIEV0aGVybmV0IGRl c2NyaXB0b3INCj4gKyAgYW5kIHNwZWNpZmljIHJlcXVlc3RzIGltcGxlbWVudC4NCj4gKw0KPiAr ICBDb3B5cmlnaHQgKGMpIDIwMjMsIEFtZXJpY2FuIE1lZ2F0cmVuZHMgSW50ZXJuYXRpb25hbCBM TEMuIEFsbCByaWdodHMNCj4gcmVzZXJ2ZWQuPEJSPg0KPiArICBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiArKiovDQo+ICsNCj4gKyNpbmNsdWRlICJVc2JS bmRpcy5oIg0KPiArDQo+ICtVSU5UMTYgIGdTdG9wQnVsa0luQ250ICA9IDA7DQo+ICtVSU5UMTYg IGdCbG9ja0J1bGtJbkNudCA9IDA7DQo+ICsNCj4gKy8qKg0KPiArICBMb2FkIEFsbCBvZiBkZXZp Y2UgZGVzY3JpcHRvci4NCj4gKw0KPiArICBAcGFyYW1baW5dICBVc2JJbyAgICAgICAgICAgICAg ICAgQSBwb2ludGVyIHRvIHRoZSBFRklfVVNCX0lPX1BST1RPQ09MDQo+IGluc3RhbmNlLg0KPiAr ICBAcGFyYW1bb3V0XSBDb25maWdEZXNjICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBjb25m aWd1cmF0aW9uIGRlc2NyaXB0b3IuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAg ICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVG SV9PVVRfT0ZfUkVTT1VSQ0VTICBUaGUgcmVxdWVzdCBjb3VsZCBub3QgYmUgY29tcGxldGVkDQo+ IGJlY2F1c2UgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciBz cGVjaWZpZWQgYnkgRGVzY3JpcHRvckxlbmd0aCBhbmQgRGVzY3JpcHRvcg0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpcyBub3QgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIHJl c3VsdCBvZiB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAg QSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBF RklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBl cnJvci4gVGhlDQo+IHRyYW5zZmVyDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0YXR1cyBpcyByZXR1cm5lZCBpbiBTdGF0dXMuDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4g K0xvYWRBbGxEZXNjcmlwdG9yICgNCj4gKyAgSU4gIEVGSV9VU0JfSU9fUFJPVE9DT0wgICAgICAg ICpVc2JJbywNCj4gKyAgT1VUIEVGSV9VU0JfQ09ORklHX0RFU0NSSVBUT1IgICoqQ29uZmlnRGVz Yw0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgIFN0YXR1czsN Cj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgVHJhbnNTdGF0dXM7DQo+ICsgIEVGSV9V U0JfQ09ORklHX0RFU0NSSVBUT1IgIFRtcDsNCj4gKw0KPiArICBTdGF0dXMgPSBVc2JJby0+VXNi R2V0Q29uZmlnRGVzY3JpcHRvciAoVXNiSW8sICZUbXApOw0KPiArICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQo+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOlVzYkdldENvbmZpZ0Rl c2NyaXB0b3Igc3RhdHVzID0gJXJcbiIsDQo+IF9fZnVuY19fLCBTdGF0dXMpKTsNCj4gKyAgICBy ZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5BbGxvY2F0ZVBv b2wgKA0KPiArICAgICAgICAgICAgICAgICAgRWZpQm9vdFNlcnZpY2VzRGF0YSwNCj4gKyAgICAg ICAgICAgICAgICAgIFRtcC5Ub3RhbExlbmd0aCwNCj4gKyAgICAgICAgICAgICAgICAgIChWT0lE ICoqKUNvbmZpZ0Rlc2MNCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6IEFsbG9jYXRl UG9vbCBzdGF0dXMgPSAlclxuIiwgX19mdW5jX18sDQo+IFN0YXR1cykpOw0KPiArICAgIHJldHVy biBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBVc2JHZXREZXNjcmlwdG9yICgN Cj4gKyAgICAgICAgICAgICBVc2JJbywNCj4gKyAgICAgICAgICAgICBVU0JfREVTQ19UWVBFX0NP TkZJRyA8PCA4IHwgKFRtcC5Db25maWd1cmF0aW9uVmFsdWUgLSAxKSwNCj4gLy8gemVybyBiYXNl ZA0KPiArICAgICAgICAgICAgIDAsDQo+ICsgICAgICAgICAgICAgVG1wLlRvdGFsTGVuZ3RoLA0K PiArICAgICAgICAgICAgICpDb25maWdEZXNjLA0KPiArICAgICAgICAgICAgICZUcmFuc1N0YXR1 cw0KPiArICAgICAgICAgICAgICk7DQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4g Ky8qKg0KPiArICBSZXR1cm5zIHBvaW50ZXIgdG8gdGhlIG5leHQgZGVzY3JpcHRvciBmb3IgdGhl IHBhY2sgb2YgVVNCIGRlc2NyaXB0b3JzDQo+ICsgIGxvY2F0ZWQgaW4gY29udGludWVzIG1lbW9y eSBzZWdtZW50DQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgIERlc2MgICBBIHBvaW50ZXIgdG8g dGhlIENPTkZJR19ERVNDUklQVE9SIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW4sIG91dF0gT2Zm c2V0IEEgcG9pbnRlciB0byB0aGUgc3VtIG9mIGRlc2NyaXB0b3IgbGVuZ3RoLg0KPiArDQo+ICsg IEByZXR2YWwgVFJVRSAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAg QHJldHZhbCBGQUxTRSAgTm8gbmV4dCBkZXNjcmlwdG9yLg0KPiArDQo+ICsqKi8NCj4gK0JPT0xF QU4NCj4gK05leHREZXNjcmlwdG9yICgNCj4gKyAgSU4gICAgICBFRklfVVNCX0NPTkZJR19ERVND UklQVE9SICAqRGVzYywNCj4gKyAgSU4gT1VUICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAq T2Zmc2V0DQo+ICsgICkNCj4gK3sNCj4gKyAgaWYgKChEZXNjID09IE5VTEwpIHx8ICgqT2Zmc2V0 ID49IERlc2MtPlRvdGFsTGVuZ3RoKSkgew0KPiArICAgIHJldHVybiBGQUxTRTsNCj4gKyAgfQ0K PiArDQo+ICsgIGlmICgoKEVGSV9VU0JfQ09ORklHX0RFU0NSSVBUT1IgKikoKGNoYXIgKilEZXNj KypPZmZzZXQpKS0+TGVuZ3RoID09IDApDQo+IHsNCj4gKyAgICByZXR1cm4gRkFMU0U7DQo+ICsg IH0NCj4gKw0KPiArICAqT2Zmc2V0ICs9ICgoRUZJX1VTQl9DT05GSUdfREVTQ1JJUFRPUiAqKSgo Y2hhciAqKURlc2MrKk9mZnNldCkpLQ0KPiA+TGVuZ3RoOw0KPiArICBpZiAoICpPZmZzZXQgPj0g RGVzYy0+VG90YWxMZW5ndGggKSB7DQo+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiArICB9DQo+ICsN Cj4gKyAgcmV0dXJuIFRSVUU7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBSZWFkIEZ1bmN0aW9u IGRlc2NyaXB0b3INCj4gKw0KPiArICBAcGFyYW1baW5dICBDb25maWcgICAgICAgICAgICAgQSBw b2ludGVyIHRvIGFsbCBvZiBjb25maWd1cmF0aW9uLg0KPiArICBAcGFyYW1baW5dICBGdW5EZXNj cmlwdG9yVHlwZSAgVVNCIENEQyBjbGFzcyBkZXNjcmlwdG9yIFN1YlR5cGUuDQo+ICsgIEBwYXJh bVtvdXRdIERhdGFCdWZmZXIgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIERhdGEgb2YgY29ycmVz cG9uZGluZyB0bw0KPiBkZXZpY2UgY2FwYWJpbGl0eS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgICAgICBUaGUgZGV2aWNlIGNhcGFiaWxpdHkgZGVzY3JpcHRvciB3YXMgcmV0cmll dmVkDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NmdWxseS4NCj4gKyAg QHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgTm8gc3VwcG9ydGVkLg0KPiArICBAcmV0dmFsIEVG SV9OT1RfRk9VTkQgICAgICBUaGUgZGV2aWNlIGNhcGFiaWxpdHkgZGVzY3JpcHRvciB3YXMgbm90 IGZvdW5kLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0dldEZ1bmN0aW9uYWxEZXNj cmlwdG9yICgNCj4gKyAgSU4gIEVGSV9VU0JfQ09ORklHX0RFU0NSSVBUT1IgICpDb25maWcsDQo+ ICsgIElOICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICBGdW5EZXNjcmlwdG9yVHlwZSwNCj4g KyAgT1VUIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICpEYXRhQnVmZmVyDQo+ICsgICkNCj4g K3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBVSU5U TiAgICAgICAgICAgICAgICAgICAgICAgICBPZmZzZXQ7DQo+ICsgIEVGSV9VU0JfSU5URVJGQUNF X0RFU0NSSVBUT1IgICpJbnRlcmZhY2U7DQo+ICsNCj4gKyAgU3RhdHVzID0gRUZJX05PVF9GT1VO RDsNCj4gKw0KPiArICBmb3IgKE9mZnNldCA9IDA7IE5leHREZXNjcmlwdG9yIChDb25maWcsICZP ZmZzZXQpOykgew0KPiArICAgIEludGVyZmFjZSA9IChFRklfVVNCX0lOVEVSRkFDRV9ERVNDUklQ VE9SICopKChVSU5UOCAqKUNvbmZpZyArIE9mZnNldCk7DQo+ICsgICAgaWYgKEludGVyZmFjZS0+ RGVzY3JpcHRvclR5cGUgPT0gQ1NfSU5URVJGQUNFKSB7DQo+ICsgICAgICBpZiAoKChVU0JfSEVB REVSX0ZVTl9ERVNDUklQVE9SICopSW50ZXJmYWNlKS0+RGVzY3JpcHRvclN1YnR5cGUgPT0NCj4g RnVuRGVzY3JpcHRvclR5cGUpIHsNCj4gKyAgICAgICAgc3dpdGNoIChGdW5EZXNjcmlwdG9yVHlw ZSkgew0KPiArICAgICAgICAgIGNhc2UgSEVBREVSX0ZVTl9ERVNDUklQVE9SOg0KPiArICAgICAg ICAgICAgQ29weU1lbSAoDQo+ICsgICAgICAgICAgICAgIERhdGFCdWZmZXIsDQo+ICsgICAgICAg ICAgICAgIChVU0JfSEVBREVSX0ZVTl9ERVNDUklQVE9SICopSW50ZXJmYWNlLA0KPiArICAgICAg ICAgICAgICBzaXplb2YgKFVTQl9IRUFERVJfRlVOX0RFU0NSSVBUT1IpDQo+ICsgICAgICAgICAg ICAgICk7DQo+ICsgICAgICAgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICsgICAgICAgICAg Y2FzZSBVTklPTl9GVU5fREVTQ1JJUFRPUjoNCj4gKyAgICAgICAgICAgIENvcHlNZW0gKA0KPiAr ICAgICAgICAgICAgICBEYXRhQnVmZmVyLA0KPiArICAgICAgICAgICAgICAoVVNCX1VOSU9OX0ZV Tl9ERVNDUklQVE9SICopSW50ZXJmYWNlLA0KPiArICAgICAgICAgICAgICAoKFVTQl9VTklPTl9G VU5fREVTQ1JJUFRPUiAqKUludGVyZmFjZSktPkZ1bmN0aW9uTGVuZ3RoDQo+ICsgICAgICAgICAg ICAgICk7DQo+ICsgICAgICAgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICsgICAgICAgICAg Y2FzZSBFVEhFUk5FVF9GVU5fREVTQ1JJUFRPUjoNCj4gKyAgICAgICAgICAgIENvcHlNZW0gKA0K PiArICAgICAgICAgICAgICBEYXRhQnVmZmVyLA0KPiArICAgICAgICAgICAgICAoVVNCX0VUSEVS TkVUX0ZVTl9ERVNDUklQVE9SICopSW50ZXJmYWNlLA0KPiArICAgICAgICAgICAgICBzaXplb2Yg KFVTQl9FVEhFUk5FVF9GVU5fREVTQ1JJUFRPUikNCj4gKyAgICAgICAgICAgICAgKTsNCj4gKyAg ICAgICAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gKyAgICAgICAgICBkZWZhdWx0Og0KPiAr ICAgICAgICAgICAgU3RhdHVzID0gRUZJX1VOU1VQUE9SVEVEOw0KPiArICAgICAgICAgICAgYnJl YWs7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgIH0NCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiAr ICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgR2V0IFVTQiBFdGhlcm5l dCBJTyBlbmRwb2ludCBhbmQgVVNCIENEQyBkYXRhIElPIGVuZHBvaW50Lg0KPiArDQo+ICsgIEBw YXJhbVtpbl0gICAgICBVc2JJbyAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRklfVVNCX0lP X1BST1RPQ09MDQo+IGluc3RhbmNlLg0KPiArICBAcGFyYW1baW4sIG91dF0gVXNiUm5kaXNEZXZp Y2UgIEEgcG9pbnRlciB0byB0aGUgVVNCX1JORElTX0RFVklDRQ0KPiBpbnN0YW5jZS4NCj4gKw0K PiArKiovDQo+ICtWT0lEDQo+ICtHZXRFbmRwb2ludCAoDQo+ICsgIElOICAgICAgRUZJX1VTQl9J T19QUk9UT0NPTCAgKlVzYklvLA0KPiArICBJTiBPVVQgIFVTQl9STkRJU19ERVZJQ0UgICAgICpV c2JSbmRpc0RldmljZQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAg ICAgICAgIFN0YXR1czsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7 DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgIFJlc3VsdDsNCj4gKyAgRUZJX1VT Ql9JTlRFUkZBQ0VfREVTQ1JJUFRPUiAgSW50ZXJmYWNlOw0KPiArICBFRklfVVNCX0VORFBPSU5U X0RFU0NSSVBUT1IgICBFbmRwb2ludDsNCj4gKw0KPiArICBTdGF0dXMgPSBVc2JJby0+VXNiR2V0 SW50ZXJmYWNlRGVzY3JpcHRvciAoVXNiSW8sICZJbnRlcmZhY2UpOw0KPiArICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOlVzYkdldElu dGVyZmFjZURlc2NyaXB0b3Igc3RhdHVzID0gJXJcbiIsDQo+IF9fZnVuY19fLCBTdGF0dXMpKTsN Cj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoSW50ZXJmYWNlLk51bUVuZHBv aW50cyA9PSAwICkgew0KPiArICAgIFN0YXR1cyA9IFVzYlNldEludGVyZmFjZSAoVXNiSW8sIDEs IDAsICZSZXN1bHQpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAg IERFQlVHICgoREVCVUdfRVJST1IsICIlYTpVc2JTZXRJbnRlcmZhY2Ugc3RhdHVzID0gJXJcbiIs IF9fZnVuY19fLA0KPiBTdGF0dXMpKTsNCj4gKyAgICAgIHJldHVybjsNCj4gKyAgICB9DQo+ICsN Cj4gKyAgICBTdGF0dXMgPSBVc2JJby0+VXNiR2V0SW50ZXJmYWNlRGVzY3JpcHRvciAoVXNiSW8s ICZJbnRlcmZhY2UpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAg IERFQlVHICgoREVCVUdfRVJST1IsICIlYTpVc2JHZXRJbnRlcmZhY2VEZXNjcmlwdG9yIHN0YXR1 cyA9ICVyXG4iLA0KPiBfX2Z1bmNfXywgU3RhdHVzKSk7DQo+ICsgICAgICByZXR1cm47DQo+ICsg ICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgSW50ZXJmYWNl Lk51bUVuZHBvaW50czsgSW5kZXgrKykgew0KPiArICAgIFN0YXR1cyA9IFVzYklvLT5Vc2JHZXRF bmRwb2ludERlc2NyaXB0b3IgKFVzYklvLCBJbmRleCwgJkVuZHBvaW50KTsNCj4gKyAgICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6 VXNiR2V0RW5kcG9pbnREZXNjcmlwdG9yIHN0YXR1cyA9ICVyXG4iLA0KPiBfX2Z1bmNfXywgU3Rh dHVzKSk7DQo+ICsgICAgICByZXR1cm47DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgc3dpdGNoICgo RW5kcG9pbnQuQXR0cmlidXRlcyAmIChCSVQwIHwgQklUMSkpKSB7DQo+ICsgICAgICBjYXNlIFVT Ql9FTkRQT0lOVF9CVUxLOg0KPiArICAgICAgICBpZiAoRW5kcG9pbnQuRW5kcG9pbnRBZGRyZXNz ICYgQklUNykgew0KPiArICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5CdWxrSW5FbmRwb2ludCA9 IEVuZHBvaW50LkVuZHBvaW50QWRkcmVzczsNCj4gKyAgICAgICAgfSBlbHNlIHsNCj4gKyAgICAg ICAgICBVc2JSbmRpc0RldmljZS0+QnVsa091dEVuZHBvaW50ID0gRW5kcG9pbnQuRW5kcG9pbnRB ZGRyZXNzOw0KPiArICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgYnJlYWs7DQo+ICsgICAgICBj YXNlIFVTQl9FTkRQT0lOVF9JTlRFUlJVUFQ6DQo+ICsgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5J bnRlcnJ1cEVuZHBvaW50ID0gRW5kcG9pbnQuRW5kcG9pbnRBZGRyZXNzOw0KPiArICAgICAgICBi cmVhazsNCj4gKyAgICB9DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIEFzeW5jIFVT QiB0cmFuc2ZlciBjYWxsYmFjayByb3V0aW5lLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIERhdGEg ICAgICAgICAgICBEYXRhIHJlY2VpdmVkIG9yIHNlbnQgdmlhIHRoZSBVU0IgQXN5bmNocm9ub3Vz DQo+IFRyYW5zZmVyLCBpZiB0aGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRy YW5zZmVyIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEBwYXJhbVtpbl0gIERhdGFMZW5n dGggICAgICBUaGUgbGVuZ3RoIG9mIERhdGEgcmVjZWl2ZWQgb3Igc2VudCB2aWEgdGhlDQo+IEFz eW5jaHJvbm91cw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmZXIsIGlm IHRyYW5zZmVyIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZXMuDQo+ICsgIEBwYXJhbVtpbl0gIENvbnRl eHQgICAgICAgICBEYXRhIHBhc3NlZCBmcm9tIFVzYkFzeW5jSW50ZXJydXB0VHJhbnNmZXIoKQ0K PiByZXF1ZXN0Lg0KPiArICBAcGFyYW1baW5dICBTdGF0dXMgICAgICAgICAgSW5kaWNhdGVzIHRo ZSByZXN1bHQgb2YgdGhlIGFzeW5jaHJvbm91cyB0cmFuc2Zlci4NCj4gKw0KPiArICBAcmV0dmFs IEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgYXN5bmNocm9ub3VzIFVTQiB0cmFuc2ZlciByZXF1 ZXN0IGhhcyBiZWVuDQo+IHN1Y2Nlc3NmdWxseSBleGVjdXRlZC4NCj4gKyAgQHJldHZhbCBFRklf REVWSUNFX0VSUk9SICAgICAgVGhlIGFzeW5jaHJvbm91cyBVU0IgdHJhbnNmZXIgcmVxdWVzdA0K PiBmYWlsZWQuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtJbnRl cnJ1cHRDYWxsYmFjayAoDQo+ICsgIElOICBWT0lEICAgICpEYXRhLA0KPiArICBJTiAgVUlOVE4g ICBEYXRhTGVuZ3RoLA0KPiArICBJTiAgVk9JRCAgICAqQ29udGV4dCwNCj4gKyAgSU4gIFVJTlQz MiAgU3RhdHVzDQo+ICsgICkNCj4gK3sNCj4gKyAgaWYgKChEYXRhID09IE5VTEwpIHx8IChDb250 ZXh0ID09IE5VTEwpKSB7DQo+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4g KyAgfQ0KPiArDQo+ICsgIGlmICgoKEVGSV9VU0JfREVWSUNFX1JFUVVFU1QgKilEYXRhKS0+UmVx dWVzdCA9PSAwKSB7DQo+ICsgICAgQ29weU1lbSAoDQo+ICsgICAgICAoRUZJX1VTQl9ERVZJQ0Vf UkVRVUVTVCAqKUNvbnRleHQsDQo+ICsgICAgICAoRUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCAqKURh dGEsDQo+ICsgICAgICBzaXplb2YgKEVGSV9VU0JfREVWSUNFX1JFUVVFU1QpDQo+ICsgICAgICAp Ow0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsv KioNCj4gKyAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIG1hbmFnZSBhIFVTQiBkZXZpY2Ugd2l0 aCBhbiBpbnRlcnJ1cHQgdHJhbnNmZXIgcGlwZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlz ICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NP TA0KPiBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgSXNOZXdUcmFuc2ZlciAgICAgSWYgVFJV RSwgYSBuZXcgdHJhbnNmZXIgd2lsbCBiZSBzdWJtaXR0ZWQgdG8NCj4gVVNCIGNvbnRyb2xsZXIu IElmDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLCB0aGUgaW50ZXJy dXB0IHRyYW5zZmVyIGlzIGRlbGV0ZWQgZnJvbSB0aGUgZGV2aWNlJ3MNCj4gaW50ZXJydXB0DQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZmVyIHF1ZXVlLg0KPiArICBA cGFyYW1baW5dICBQb2xsaW5nSW50ZXJ2YWwgICBJbmRpY2F0ZXMgdGhlIHBlcmlvZGljIHJhdGUs IGluIG1pbGxpc2Vjb25kcywgdGhhdA0KPiB0aGUgdHJhbnNmZXIgaXMgdG8gYmUNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZWQuVGhpcyBwYXJhbWV0ZXIgaXMgcmVx dWlyZWQgd2hlbiBJc05ld1RyYW5zZmVyDQo+IGlzIFRSVUUuIFRoZQ0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2YWx1ZSBtdXN0IGJlIGJldHdlZW4gMSB0byAyNTUsIG90aGVy d2lzZQ0KPiBFRklfSU5WQUxJRF9QQVJBTUVURVIgaXMgcmV0dXJuZWQuDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFRoZSB1bml0cyBhcmUgaW4gbWlsbGlzZWNvbmRzLg0KPiAr ICBAcGFyYW1baW5dICBSZXF1ZXN0ICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9VU0Jf REVWSUNFX1JFUVVFU1QgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg ICAgICBUaGUgYXN5bmNocm9ub3VzIFVTQiB0cmFuc2ZlciByZXF1ZXN0IHRyYW5zZmVyDQo+IGhh cyBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VS Uk9SICAgICAgVGhlIGFzeW5jaHJvbm91cyBVU0IgdHJhbnNmZXIgcmVxdWVzdA0KPiBmYWlsZWQu DQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtVc2JSbmRpc0ludGVy cnVwdCAoDQo+ICsgIElOIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsg IElOIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgSXNOZXdUcmFuc2ZlciwNCj4gKyAgSU4g VUlOVE4gICAgICAgICAgICAgICAgICAgICAgICBQb2xsaW5nSW50ZXJ2YWwsDQo+ICsgIElOIEVG SV9VU0JfREVWSUNFX1JFUVVFU1QgICAgICAgKlJlcXVzdA0KPiArICApDQo+ICt7DQo+ICsgIEVG SV9TVEFUVVMgICAgICAgIFN0YXR1czsNCj4gKyAgVVNCX1JORElTX0RFVklDRSAgKlVzYlJuZGlz RGV2aWNlOw0KPiArICBVSU5UTiAgICAgICAgICAgICBEYXRhTGVuZ3RoOw0KPiArDQo+ICsgIFVz YlJuZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMgKFRoaXMpOw0KPiArICBE YXRhTGVuZ3RoICAgICA9IDA7DQo+ICsNCj4gKyAgaWYgKElzTmV3VHJhbnNmZXIgPT0gVFJVRSkg ew0KPiArICAgIERhdGFMZW5ndGggPSBzaXplb2YgKEVGSV9VU0JfREVWSUNFX1JFUVVFU1QpICsg c2l6ZW9mDQo+IChVU0JfQ09OTkVDVF9TUEVFRF9DSEFOR0UpOw0KPiArICAgIFN0YXR1cyAgICAg PSBVc2JSbmRpc0RldmljZS0+VXNiSW8tPlVzYkFzeW5jSW50ZXJydXB0VHJhbnNmZXIgKA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2Ut PlVzYklvLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNi Um5kaXNEZXZpY2UtPkludGVycnVwRW5kcG9pbnQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBJc05ld1RyYW5zZmVyLA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUG9sbGluZ0ludGVydmFsLA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YUxlbmd0aCwNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVycnVwdENhbGxiYWNrLA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVxdXN0DQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiArDQo+ICsgICAgaWYgKFN0 YXR1cyA9PSBFRklfSU5WQUxJRF9QQVJBTUVURVIpIHsNCj4gKyAgICAgIC8vIEJlY2F1c2Ugb2Yg U3RhY2tlZCBBc3luY0ludGVycnVwdCByZXF1ZXN0IGFyZSBub3Qgc3VwcG9ydGVkDQo+ICsgICAg ICBTdGF0dXMgPSBVc2JSbmRpc0RldmljZS0+VXNiSW8tPlVzYkFzeW5jSW50ZXJydXB0VHJhbnNm ZXIgKA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzYlJuZGlz RGV2aWNlLT5Vc2JJbywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBVc2JSbmRpc0RldmljZS0+SW50ZXJydXBFbmRwb2ludCwNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAwLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDAsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIH0NCj4gKyAgfSBl bHNlIHsNCj4gKyAgICBTdGF0dXMgPSBVc2JSbmRpc0RldmljZS0+VXNiSW8tPlVzYkFzeW5jSW50 ZXJydXB0VHJhbnNmZXIgKA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBVc2JSbmRpc0RldmljZS0+VXNiSW8sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5JbnRlcnJ1cEVuZHBvaW50LA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJc05ld1RyYW5zZmVyLA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAwLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBOVUxMLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxM DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgIH0NCj4g Kw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBmdW5j dGlvbiBpcyB1c2VkIHRvIHJlYWQgVVNCIGludGVycnVwdCB0cmFuc2ZlciBiZWZvcmUgdGhlIHJl c3BvbnNlDQo+IFJORElTIG1lc3NhZ2UuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAg ICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBVU0JfUk5ESVNfREVWSUNFIGluc3RhbmNlLg0KPiAr DQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBVU0IgaW50ZXJydXB0IHRy YW5zZmVyIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseQ0KPiBleGVjdXRlZC4NCj4gKyAgQHJldHZhbCBF RklfREVWSUNFX0VSUk9SICAgICAgVGhlIFVTQiBpbnRlcnJ1cHQgdHJhbnNmZXIgZmFpbGVkLg0K PiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUmVhZFJuZGlzUmVzcG9u c2VJbnRlcnJ1cHQgKA0KPiArICBJTiBVU0JfUk5ESVNfREVWSUNFICAqVXNiUm5kaXNEZXZpY2UN Cj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ICsgIFVJTlQzMiAgICAg IERhdGFbMl07DQo+ICsgIFVJTlQzMiAgICAgIFVzYlN0YXR1czsNCj4gKyAgVUlOVE4gICAgICAg RGF0YUxlbmd0aDsNCj4gKw0KPiArICBEYXRhTGVuZ3RoID0gODsNCj4gKw0KPiArICBaZXJvTWVt IChEYXRhLCBzaXplb2YgKERhdGEpKTsNCj4gKw0KPiArICBTdGF0dXMgPSBVc2JSbmRpc0Rldmlj ZS0+VXNiSW8tPlVzYlN5bmNJbnRlcnJ1cHRUcmFuc2ZlciAoDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+VXNiSW8sDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+SW50ZXJydXBFbmRwb2lu dCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZEYXRhLA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkRhdGFMZW5ndGgsDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwLA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJlVzYlN0YXR1cw0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsNCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsv KioNCj4gKyAgUmV0cmlldmVzIHRoZSBVU0IgRXRoZXJuZXQgTWFjIEFkZHJlc3MuDQo+ICsNCj4g KyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9F VEhFUk5FVF9QUk9UT0NPTA0KPiBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW291dF0gTWFjQWRkcmVz cyAgICBBIHBvaW50ZXIgdG8gdGhlIGNhbGxlciBhbGxvY2F0ZWQgVVNCIEV0aGVybmV0DQo+IE1h YyBBZGRyZXNzLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBV U0IgSGVhZGVyIEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMNCj4gcmV0cmlldmVkIHN1Y2Nlc3Nm dWxseS4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgVXNiSGVhZGVyRnVuRGVz Y3JpcHRvciBpcyBOVUxMLg0KPiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICBUaGUg VVNCIEhlYWRlciBGdW5jdGlvbmFsIGRlc2NyaXB0b3Igd2FzDQo+IG5vdCBmb3VuZC4NCj4gKw0K PiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0dldFVzYkV0aE1hY0FkZHJlc3Mg KA0KPiArICBJTiAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4gKyAgT1VU IEVGSV9NQUNfQUREUkVTUyAgICAgICAgICAgICAgKk1hY0FkZHJlc3MNCj4gKyAgKQ0KPiArew0K PiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgVVNCX1JORElT X0RFVklDRSAgICAgICAgICAgICAqVXNiUm5kaXNEZXZpY2U7DQo+ICsgIFVTQl9FVEhFUk5FVF9G VU5fREVTQ1JJUFRPUiAgVXNiRXRoRGVzY3JpcHRvcjsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAg ICAgICAgICAgICAqRGF0YTsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAqRGF0 YVB0cjsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICBUbXBTdHJbMV07DQo+ICsg IFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsgIFVJTlQ4ICAgICAgICAg ICAgICAgICAgICAgICAgSGk7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgTG93 Ow0KPiArDQo+ICsgIFJFTU9URV9ORElTX1FVRVJZX01BQ19NU0cgICAgUm5kaXNRdWVyeU1zZzsN Cj4gKyAgUkVNT1RFX05ESVNfUVVFUllfTUFDX0NNUExUICBSbmRpc1F1ZXJ5TXNnQ21wbHQ7DQo+ ICsNCj4gKyAgVXNiUm5kaXNEZXZpY2UgPSBVU0JfUk5ESVNfREVWSUNFX0ZST01fVEhJUyAoVGhp cyk7DQo+ICsNCj4gKyAgWmVyb01lbSAoJlJuZGlzUXVlcnlNc2csIHNpemVvZiAoUkVNT1RFX05E SVNfUVVFUllfTUFDX01TRykpOw0KPiArICBaZXJvTWVtICgmUm5kaXNRdWVyeU1zZ0NtcGx0LCBz aXplb2YNCj4gKFJFTU9URV9ORElTX1FVRVJZX01BQ19DTVBMVCkpOw0KPiArDQo+ICsgIFJuZGlz UXVlcnlNc2cuUXVlcnlNc2cuTWVzc2FnZVR5cGUgICA9IFJORElTX1FVRVJZX01TRzsNCj4gKyAg Um5kaXNRdWVyeU1zZy5RdWVyeU1zZy5NZXNzYWdlTGVuZ3RoID0gc2l6ZW9mDQo+IChSRU1PVEVf TkRJU19RVUVSWV9NQUNfTVNHKTsNCj4gKyAgUm5kaXNRdWVyeU1zZy5RdWVyeU1zZy5SZXF1ZXN0 SUQgICAgID0gVXNiUm5kaXNEZXZpY2UtPlJlcXVlc3RJZDsNCj4gKyAgUm5kaXNRdWVyeU1zZy5R dWVyeU1zZy5PaWQgICAgICAgICAgID0gT0lEXzgwMl8zX0NVUlJFTlRfQUREUkVTUzsNCj4gKw0K PiArICBSbmRpc1F1ZXJ5TXNnQ21wbHQuUXVlcnlDbXBsdC5NZXNzYWdlVHlwZSAgID0gUk5ESVNf UVVFUllfQ01QTFQ7DQo+ICsgIFJuZGlzUXVlcnlNc2dDbXBsdC5RdWVyeUNtcGx0Lk1lc3NhZ2VM ZW5ndGggPSBzaXplb2YNCj4gKFJFTU9URV9ORElTX1FVRVJZX01BQ19DTVBMVCk7DQo+ICsNCj4g KyAgU3RhdHVzID0gUm5kaXNDb250cm9sTXNnICgNCj4gKyAgICAgICAgICAgICBVc2JSbmRpc0Rl dmljZSwNCj4gKyAgICAgICAgICAgICAoUkVNT1RFX05ESVNfTVNHX0hFQURFUiAqKSZSbmRpc1F1 ZXJ5TXNnLA0KPiArICAgICAgICAgICAgIChSRU1PVEVfTkRJU19NU0dfSEVBREVSICopJlJuZGlz UXVlcnlNc2dDbXBsdA0KPiArICAgICAgICAgICAgICk7DQo+ICsgIGlmICghRUZJX0VSUk9SIChT dGF0dXMpKSB7DQo+ICsgICAgREVCVUcgKChERUJVR19JTkZPLCAiU3VjY2VzcyB0byBnZXQgTWFj IGFkZHJlc3MgZnJvbSBSTkRJUw0KPiBtZXNzYWdlLlxuIikpOw0KPiArICAgIGZvciAoSW5kZXgg PSAwOyBJbmRleCA8IFBYRV9IV0FERFJfTEVOX0VUSEVSOyBJbmRleCsrKSB7DQo+ICsgICAgICBN YWNBZGRyZXNzLT5BZGRyW0luZGV4XSA9IFJuZGlzUXVlcnlNc2dDbXBsdC5BZGRyW0luZGV4XTsN Cj4gKyAgICB9DQo+ICsNCj4gKyAgICBVc2JSbmRpc0RldmljZS0+UmVxdWVzdElkKys7DQo+ICsg ICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vIElmIGl0IGlzIG5vdCBzdXBw b3J0IHRoZSBPSURfODAyXzNfQ1VSUkVOVF9BRERSRVNTLg0KPiArICAvLyBUbyBjaGVjayBVU0Ig RXRoZXJuZXQgZnVuY3Rpb25hbCBEZXNjcmlwdG9yDQo+ICsgIFN0YXR1cyA9IFRoaXMtPlVzYkV0 aEZ1bkRlc2NyaXB0b3IgKFRoaXMsICZVc2JFdGhEZXNjcmlwdG9yKTsNCj4gKyAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTpVc2JFdGhG dW5EZXNjcmlwdG9yIHN0YXR1cyA9ICVyXG4iLA0KPiBfX2Z1bmNfXywgU3RhdHVzKSk7DQo+ICsg ICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IFVzYlJuZGlzRGV2 aWNlLT5Vc2JJby0+VXNiR2V0U3RyaW5nRGVzY3JpcHRvciAoDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+VXNiSW8sDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwOSwgICAgICAgICAgICAgICAgICAgICAgIC8v IEVuZ2xpc2gtVVMgTGFuZ3VhZ2UgSUQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFVzYkV0aERlc2NyaXB0b3IuTWFjQWRkcmVzcywNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZEYXRhDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgREVCVUcg KChERUJVR19FUlJPUiwgIiVhOlVzYkdldFN0cmluZ0Rlc2NyaXB0b3Igc3RhdHVzID0gJXJcbiIs DQo+IF9fZnVuY19fLCBTdGF0dXMpKTsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ ICsNCj4gKyAgRGF0YVB0ciA9IERhdGE7DQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFBY RV9IV0FERFJfTEVOX0VUSEVSOyBJbmRleCsrKSB7DQo+ICsgICAgQ29weU1lbSAoVG1wU3RyLCBE YXRhUHRyLCBzaXplb2YgKENIQVIxNikpOw0KPiArICAgIERhdGFQdHIrKzsNCj4gKyAgICBIaSA9 IChVSU5UOClTdHJIZXhUb1VpbnRuIChUbXBTdHIpOw0KPiArICAgIENvcHlNZW0gKFRtcFN0ciwg RGF0YVB0ciwgc2l6ZW9mIChDSEFSMTYpKTsNCj4gKyAgICBEYXRhUHRyKys7DQo+ICsgICAgTG93 ICAgICAgICAgICAgICAgICAgICAgPSAoVUlOVDgpU3RySGV4VG9VaW50biAoVG1wU3RyKTsNCj4g KyAgICBNYWNBZGRyZXNzLT5BZGRyW0luZGV4XSA9IChIaSA8PCA0KSB8IExvdzsNCj4gKyAgfQ0K PiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBSZXRyaWV2 ZXMgdGhlIFVTQiBFdGhlcm5ldCBCdWxrIHRyYW5zZmVyIGRhdGEgc2l6ZS4NCj4gKw0KPiArICBA cGFyYW1baW5dICBUaGlzICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVS TkVUX1BST1RPQ09MDQo+IGluc3RhbmNlLg0KPiArICBAcGFyYW1bb3V0XSBCdWxrU2l6ZSAgICAg IEEgcG9pbnRlciB0byB0aGUgQnVsayB0cmFuc2ZlciBkYXRhIHNpemUuDQo+ICsNCj4gKyAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICBUaGUgYnVsayB0cmFuc2ZlciBkYXRhIHNpemUgd2FzIHJl dHJpZXZlZA0KPiBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgb3RoZXIgICAgICAgICAgICAg RmFpbGVkIHRvIHJldHJpZXZlIHRoZSBidWxrIHRyYW5zZmVyIGRhdGEgc2l6ZS4NCj4gKw0KPiAr KiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1VzYkV0aEJ1bGtTaXplICgNCj4gKyAg SU4gIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIE9VVCBVSU5UTiAg ICAgICAgICAgICAgICAgICAgICAgICpCdWxrU2l6ZQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9T VEFUVVMgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBVU0JfRVRIRVJORVRfRlVOX0RF U0NSSVBUT1IgIFVzYkV0aEZ1bkRlc2NyaXB0b3I7DQo+ICsgIFVTQl9STkRJU19ERVZJQ0UgICAg ICAgICAgICAgKlVzYlJuZGlzRGV2aWNlOw0KPiArDQo+ICsgIFJFTU9URV9ORElTX1FVRVJZX01B WF9UT1RBTF9TSVpFX01TRyAgICBSbmRpc1F1ZXJ5TXNnOw0KPiArICBSRU1PVEVfTkRJU19RVUVS WV9NQVhfVE9UQUxfU0laRV9DTVBMVCAgUm5kaXNRdWVyeU1zZ0NtcGx0Ow0KPiArDQo+ICsgIFVz YlJuZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMgKFRoaXMpOw0KPiArDQo+ ICsgIFplcm9NZW0gKCZSbmRpc1F1ZXJ5TXNnLCBzaXplb2YNCj4gKFJFTU9URV9ORElTX1FVRVJZ X01BWF9UT1RBTF9TSVpFX01TRykpOw0KPiArICBaZXJvTWVtICgmUm5kaXNRdWVyeU1zZ0NtcGx0 LCBzaXplb2YNCj4gKFJFTU9URV9ORElTX1FVRVJZX01BWF9UT1RBTF9TSVpFX0NNUExUKSk7DQo+ ICsNCj4gKyAgUm5kaXNRdWVyeU1zZy5RdWVyeU1zZy5NZXNzYWdlVHlwZSAgID0gUk5ESVNfUVVF UllfTVNHOw0KPiArICBSbmRpc1F1ZXJ5TXNnLlF1ZXJ5TXNnLk1lc3NhZ2VMZW5ndGggPSBzaXpl b2YNCj4gKFJFTU9URV9ORElTX1FVRVJZX01BWF9UT1RBTF9TSVpFX01TRyk7DQo+ICsgIFJuZGlz UXVlcnlNc2cuUXVlcnlNc2cuUmVxdWVzdElEICAgICA9IFVzYlJuZGlzRGV2aWNlLT5SZXF1ZXN0 SWQ7DQo+ICsgIFJuZGlzUXVlcnlNc2cuUXVlcnlNc2cuT2lkICAgICAgICAgICA9IE9JRF9HRU5f TUFYSU1VTV9UT1RBTF9TSVpFOw0KPiArDQo+ICsgIFJuZGlzUXVlcnlNc2dDbXBsdC5RdWVyeUNt cGx0Lk1lc3NhZ2VUeXBlICAgPSBSTkRJU19RVUVSWV9DTVBMVDsNCj4gKyAgUm5kaXNRdWVyeU1z Z0NtcGx0LlF1ZXJ5Q21wbHQuTWVzc2FnZUxlbmd0aCA9IHNpemVvZg0KPiAoUkVNT1RFX05ESVNf UVVFUllfTUFYX1RPVEFMX1NJWkVfQ01QTFQpOw0KPiArDQo+ICsgIFN0YXR1cyA9IFJuZGlzQ29u dHJvbE1zZyAoDQo+ICsgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2UsDQo+ICsgICAgICAgICAg ICAgKFJFTU9URV9ORElTX01TR19IRUFERVIgKikmUm5kaXNRdWVyeU1zZywNCj4gKyAgICAgICAg ICAgICAoUkVNT1RFX05ESVNfTVNHX0hFQURFUiAqKSZSbmRpc1F1ZXJ5TXNnQ21wbHQNCj4gKyAg ICAgICAgICAgICApOw0KPiArICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIERF QlVHICgoREVCVUdfSU5GTywgIlN1Y2Nlc3MgdG8gZ2V0IE1heCBUb3RhbCBzaXplIDogJVggIFxu IiwNCj4gUm5kaXNRdWVyeU1zZ0NtcGx0Lk1heFRvdGFsU2l6ZSkpOw0KPiArICAgICpCdWxrU2l6 ZSA9IFJuZGlzUXVlcnlNc2dDbXBsdC5NYXhUb3RhbFNpemU7DQo+ICsgICAgVXNiUm5kaXNEZXZp Y2UtPlJlcXVlc3RJZCsrOw0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiAr ICBTdGF0dXMgPSBUaGlzLT5Vc2JFdGhGdW5EZXNjcmlwdG9yIChUaGlzLCAmVXNiRXRoRnVuRGVz Y3JpcHRvcik7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4g U3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgKkJ1bGtTaXplID0gKFVJTlROKVVzYkV0aEZ1bkRl c2NyaXB0b3IuTWF4U2VnbWVudFNpemU7DQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsN Cj4gKy8qKg0KPiArICBSZXRyaWV2ZXMgdGhlIFVTQiBIZWFkZXIgZnVuY3Rpb25hbCBEZXNjcmlw dG9yLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgICAgQSBwb2lu dGVyIHRvIHRoZQ0KPiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsg IEBwYXJhbVtvdXRdIFVzYkhlYWRlckZ1bkRlc2NyaXB0b3IgQSBwb2ludGVyIHRvIHRoZSBjYWxs ZXIgYWxsb2NhdGVkIFVTQg0KPiBIZWFkZXIgRnVuY3Rpb25hbCBEZXNjcmlwdG9yLg0KPiArDQo+ ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBVU0IgSGVhZGVyIEZ1bmN0aW9u YWwgZGVzY3JpcHRvciB3YXMNCj4gcmV0cmlldmVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZh bCBFRklfSU5WQUxJRF9QQVJBTUVURVIgVXNiSGVhZGVyRnVuRGVzY3JpcHRvciBpcyBOVUxMLg0K PiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICBUaGUgVVNCIEhlYWRlciBGdW5jdGlv bmFsIGRlc2NyaXB0b3Igd2FzDQo+IG5vdCBmb3VuZC4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RB VFVTDQo+ICtFRklBUEkNCj4gK0dldFVzYkhlYWRlckZ1bkRlc2NyaXB0b3IgKA0KPiArICBJTiAg RURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4gKyAgT1VUIFVTQl9IRUFERVJf RlVOX0RFU0NSSVBUT1IgICAgKlVzYkhlYWRlckZ1bkRlc2NyaXB0b3INCj4gKyAgKQ0KPiArew0K PiArICBFRklfU1RBVFVTICAgICAgICBTdGF0dXM7DQo+ICsgIFVTQl9STkRJU19ERVZJQ0UgICpV c2JSbmRpc0RldmljZTsNCj4gKw0KPiArICBVc2JSbmRpc0RldmljZSA9IFVTQl9STkRJU19ERVZJ Q0VfRlJPTV9USElTIChUaGlzKTsNCj4gKw0KPiArICBpZiAoVXNiSGVhZGVyRnVuRGVzY3JpcHRv ciA9PSBOVUxMKSB7DQo+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAg fQ0KPiArDQo+ICsgIFN0YXR1cyA9IEdldEZ1bmN0aW9uYWxEZXNjcmlwdG9yICgNCj4gKyAgICAg ICAgICAgICBVc2JSbmRpc0RldmljZS0+Q29uZmlnLA0KPiArICAgICAgICAgICAgIEhFQURFUl9G VU5fREVTQ1JJUFRPUiwNCj4gKyAgICAgICAgICAgICBVc2JIZWFkZXJGdW5EZXNjcmlwdG9yDQo+ ICsgICAgICAgICAgICAgKTsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoq DQo+ICsgIFJldHJpZXZlcyB0aGUgVVNCIFVuaW9uIGZ1bmN0aW9uYWwgRGVzY3JpcHRvci4NCj4g Kw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0 aGUNCj4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1b b3V0XSBVc2JVbmlvbkZ1bkRlc2NyaXB0b3IgIEEgcG9pbnRlciB0byB0aGUgY2FsbGVyIGFsbG9j YXRlZCBVU0INCj4gVW5pb24gRnVuY3Rpb25hbCBEZXNjcmlwdG9yLg0KPiArDQo+ICsgIEByZXR2 YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgVVNCIFVuaW9uIEZ1bmN0aW9uYWwgZGVzY3Jp cHRvciB3YXMNCj4gcmV0cmlldmVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfSU5W QUxJRF9QQVJBTUVURVIgIFVzYlVuaW9uRnVuRGVzY3JpcHRvciBpcyBOVUxMLg0KPiArICBAcmV0 dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICAgVGhlIFVTQiBVbmlvbiBGdW5jdGlvbmFsIGRlc2Ny aXB0b3Igd2FzIG5vdA0KPiBmb3VuZC4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtF RklBUEkNCj4gK0dldFVzYlVuaW9uRnVuRGVzY3JpcHRvciAoDQo+ICsgIElOICBFREtJSV9VU0Jf RVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBPVVQgVVNCX1VOSU9OX0ZVTl9ERVNDUklQ VE9SICAgICAqVXNiVW5pb25GdW5EZXNjcmlwdG9yDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NU QVRVUyAgICAgICAgU3RhdHVzOw0KPiArICBVU0JfUk5ESVNfREVWSUNFICAqVXNiUm5kaXNEZXZp Y2U7DQo+ICsNCj4gKyAgVXNiUm5kaXNEZXZpY2UgPSBVU0JfUk5ESVNfREVWSUNFX0ZST01fVEhJ UyAoVGhpcyk7DQo+ICsNCj4gKyAgaWYgKFVzYlVuaW9uRnVuRGVzY3JpcHRvciA9PSBOVUxMKSB7 DQo+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgfQ0KPiArDQo+ICsg IFN0YXR1cyA9IEdldEZ1bmN0aW9uYWxEZXNjcmlwdG9yICgNCj4gKyAgICAgICAgICAgICBVc2JS bmRpc0RldmljZS0+Q29uZmlnLA0KPiArICAgICAgICAgICAgIFVOSU9OX0ZVTl9ERVNDUklQVE9S LA0KPiArICAgICAgICAgICAgIFVzYlVuaW9uRnVuRGVzY3JpcHRvcg0KPiArICAgICAgICAgICAg ICk7DQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBSZXRyaWV2 ZXMgdGhlIFVTQiBFdGhlcm5ldCBmdW5jdGlvbmFsIERlc2NyaXB0b3IuDQo+ICsNCj4gKyAgVGhp cyBmdW5jdGlvbiBnZXQgdGhlIE1hYyBBZGRyZXNzLCBFdGhlcm5ldCBzdGF0aXN0aWNzLCBtYXhp bXVtIHNlZ21lbnQNCj4gc2l6ZSwNCj4gKyAgbnVtYmVyIG9mIG11bHRpY2FzdCBmaWx0ZXJzLCBh bmQgbnVtYmVyIG9mIHBhdHRlcm4gZmlsdGVycyBmcm9tIEV0aGVybmV0DQo+ICsgIGZ1bmN0aW9u YWwgRGVzY3JpcHRvci4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICAg ICAgIEEgcG9pbnRlciB0byB0aGUNCj4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGluc3Rh bmNlLg0KPiArICBAcGFyYW1bb3V0XSBVc2JFdGhGdW5EZXNjcmlwdG9yICAgIEEgcG9pbnRlciB0 byB0aGUgY2FsbGVyIGFsbG9jYXRlZCBVU0INCj4gRXRoZXJuZXQgRnVuY3Rpb25hbCBEZXNjcmlw dG9yLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgVVNCIEV0 aGVybmV0IEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMNCj4gcmV0cmlldmVkIHN1Y2Nlc3NmdWxs eS4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIFVzYkV0aEZ1bkRlc2NyaXB0 b3IgaXMgTlVMTC4NCj4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgIFRoZSBVU0Ig RXRoZXJuZXQgRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcw0KPiBub3QgZm91bmQuDQo+ICsNCj4g KyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtHZXRVc2JSbmRpc0Z1bkRlc2NyaXB0 b3IgKA0KPiArICBJTiAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4gKyAg T1VUIFVTQl9FVEhFUk5FVF9GVU5fREVTQ1JJUFRPUiAgKlVzYkV0aEZ1bkRlc2NyaXB0b3INCj4g KyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICBTdGF0dXM7DQo+ICsgIFVTQl9STkRJ U19ERVZJQ0UgICpVc2JSbmRpc0RldmljZTsNCj4gKw0KPiArICBVc2JSbmRpc0RldmljZSA9IFVT Ql9STkRJU19ERVZJQ0VfRlJPTV9USElTIChUaGlzKTsNCj4gKw0KPiArICBpZiAoVXNiRXRoRnVu RGVzY3JpcHRvciA9PSBOVUxMKSB7DQo+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRF UjsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IEdldEZ1bmN0aW9uYWxEZXNjcmlwdG9yICgN Cj4gKyAgICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+Q29uZmlnLA0KPiArICAgICAgICAgICAg IEVUSEVSTkVUX0ZVTl9ERVNDUklQVE9SLA0KPiArICAgICAgICAgICAgIFVzYkV0aEZ1bkRlc2Ny aXB0b3INCj4gKyAgICAgICAgICAgICApOw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiAr DQo+ICsvKioNCj4gKyAgVGhpcyByZXF1ZXN0IHNldHMgdGhlIEV0aGVybmV0IGRldmljZSBtdWx0 aWNhc3QgZmlsdGVycyBhcyBzcGVjaWZpZWQgaW4gdGhlDQo+ICsgIHNlcXVlbnRpYWwgbGlzdCBv ZiA0OCBiaXQgRXRoZXJuZXQgbXVsdGljYXN0IGFkZHJlc3Nlcy4NCj4gKw0KPiArICBAcGFyYW1b aW5dICBUaGlzICAgICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUNCj4gRURLSUlfVVNC X0VUSEVSTkVUX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBWYWx1ZSAgICAg ICAgICAgICAgICAgIE51bWJlciBvZiBmaWx0ZXJzLg0KPiArICBAcGFyYW1baW5dICBNY2FzdEFk ZHIgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgdmFsdWUgb2YgdGhlIG11bHRpY2FzdA0K PiBhZGRyZXNzZXMuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRo ZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9V VCAgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVl IHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAg T25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkDQo+IHZhbHVlLg0KPiArICBAcmV0 dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKw0KPiArKiovDQo+ ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1NldFVzYlJuZGlzTWNhc3RGaWx0ZXIgKA0KPiAr ICBJTiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiBVSU5UMTYg ICAgICAgICAgICAgICAgICAgICAgIFZhbHVlLA0KPiArICBJTiBWT0lEICAgICAgICAgICAgICAg ICAgICAgICAgICpNY2FzdEFkZHINCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAg ICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgRUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCAgICAgICBS ZXF1ZXN0Ow0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zU3RhdHVzOw0K PiArICBVU0JfRVRIRVJORVRfRlVOX0RFU0NSSVBUT1IgIFVzYkV0aEZ1bkRlc2NyaXB0b3I7DQo+ ICsgIFVTQl9STkRJU19ERVZJQ0UgICAgICAgICAgICAgKlVzYlJuZGlzRGV2aWNlOw0KPiArDQo+ ICsgIFVzYlJuZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMgKFRoaXMpOw0K PiArDQo+ICsgIFN0YXR1cyA9IFRoaXMtPlVzYkV0aEZ1bkRlc2NyaXB0b3IgKFRoaXMsICZVc2JF dGhGdW5EZXNjcmlwdG9yKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAg IHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoKFVzYkV0aEZ1bkRlc2NyaXB0 b3IuTnVtYmVyTWNGaWx0ZXJzIDw8IDEpID09IDApIHsNCj4gKyAgICByZXR1cm4gRUZJX1VOU1VQ UE9SVEVEOw0KPiArICB9DQo+ICsNCj4gKyAgUmVxdWVzdC5SZXF1ZXN0VHlwZSA9IFVTQl9FVEhF Uk5FVF9TRVRfUkVRX1RZUEU7DQo+ICsgIFJlcXVlc3QuUmVxdWVzdCAgICAgPSBTRVRfRVRIX01V TFRJQ0FTVF9GSUxURVJTX1JFUTsNCj4gKyAgUmVxdWVzdC5WYWx1ZSAgICAgICA9IFZhbHVlOw0K PiArICBSZXF1ZXN0LkluZGV4ICAgICAgID0gVXNiUm5kaXNEZXZpY2UtPk51bU9mSW50ZXJmYWNl Ow0KPiArICBSZXF1ZXN0Lkxlbmd0aCAgICAgID0gVmFsdWUgKiA2Ow0KPiArDQo+ICsgIHJldHVy biBVc2JSbmRpc0RldmljZS0+VXNiSW8tPlVzYkNvbnRyb2xUcmFuc2ZlciAoDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPlVzYklvLA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZSZXF1ZXN0LA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEVmaVVzYkRhdGFPdXQsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVVNCX0VUSEVSTkVUX1RSQU5TRkVSX1RJTUVPVVQsDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWNhc3RBZGRyLA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFJlcXVlc3QuTGVuZ3RoLA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZUcmFuc1N0YXR1cw0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIHJlcXVlc3Qgc2V0 cyB1cCB0aGUgc3BlY2lmaWVkIEV0aGVybmV0IHBvd2VyIG1hbmFnZW1lbnQgcGF0dGVybiBmaWx0 ZXINCj4gYXMNCj4gKyAgZGVzY3JpYmVkIGluIHRoZSBkYXRhIHN0cnVjdHVyZS4NCj4gKw0KPiAr ICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZQ0KPiBF REtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIFZh bHVlICAgICAgICAgICAgICAgICBOdW1iZXIgb2YgZmlsdGVycy4NCj4gKyAgQHBhcmFtW2luXSAg TGVuZ3RoICAgICAgICAgICAgICAgIFNpemUgb2YgdGhlIHBvd2VyIG1hbmFnZW1lbnQgcGF0dGVy biBmaWx0ZXINCj4gZGF0YS4NCj4gKyAgQHBhcmFtW2luXSAgUGF0dGVybkZpbHRlciAgICAgICAg IEEgcG9pbnRlciB0byB0aGUgcG93ZXIgbWFuYWdlbWVudCBwYXR0ZXJuDQo+IGZpbHRlciBzdHJ1 Y3R1cmUuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSByZXF1 ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAg ICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsgIEBy ZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEg ZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgT25lIG9m IHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkDQo+IHZhbHVlLg0KPiArICBAcmV0dmFsIEVG SV9VTlNVUFBPUlRFRCAgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKw0KPiArKiovDQo+ICtFRklf U1RBVFVTDQo+ICtFRklBUEkNCj4gK1NldFVzYlJuZGlzUG93ZXJGaWx0ZXIgKA0KPiArICBJTiBF REtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiBVSU5UMTYgICAgICAg ICAgICAgICAgICAgICAgIFZhbHVlLA0KPiArICBJTiBVSU5UMTYgICAgICAgICAgICAgICAgICAg ICAgIExlbmd0aCwNCj4gKyAgSU4gVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAqUGF0dGVy bkZpbHRlcg0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9VU0JfREVWSUNFX1JFUVVFU1QgIFJlcXVl c3Q7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgIFRyYW5zU3RhdHVzOw0KPiArICBVU0Jf Uk5ESVNfREVWSUNFICAgICAgICAqVXNiUm5kaXNEZXZpY2U7DQo+ICsNCj4gKyAgVXNiUm5kaXNE ZXZpY2UgPSBVU0JfUk5ESVNfREVWSUNFX0ZST01fVEhJUyAoVGhpcyk7DQo+ICsNCj4gKyAgUmVx dWVzdC5SZXF1ZXN0VHlwZSA9IFVTQl9FVEhFUk5FVF9TRVRfUkVRX1RZUEU7DQo+ICsgIFJlcXVl c3QuUmVxdWVzdCAgICAgPQ0KPiBTRVRfRVRIX1BPV0VSX01BTkFHRU1FTlRfUEFUVEVSTl9GSUxU RVJfUkVROw0KPiArICBSZXF1ZXN0LlZhbHVlICAgICAgID0gVmFsdWU7DQo+ICsgIFJlcXVlc3Qu SW5kZXggICAgICAgPSBVc2JSbmRpc0RldmljZS0+TnVtT2ZJbnRlcmZhY2U7DQo+ICsgIFJlcXVl c3QuTGVuZ3RoICAgICAgPSBMZW5ndGg7DQo+ICsNCj4gKyAgcmV0dXJuIFVzYlJuZGlzRGV2aWNl LT5Vc2JJby0+VXNiQ29udHJvbFRyYW5zZmVyICgNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+VXNiSW8sDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJlJlcXVlc3QsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRWZpVXNiRGF0YU91dCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBVU0JfRVRIRVJORVRfVFJBTlNGRVJfVElNRU9VVCwNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQYXR0ZXJuRmlsdGVyLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIExlbmd0aCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm VHJhbnNTdGF0dXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiAr fQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyByZXF1ZXN0IHJldHJpZXZlcyB0aGUgc3RhdHVzIG9m IHRoZSBzcGVjaWZpZWQgRXRoZXJuZXQgcG93ZXINCj4gbWFuYWdlbWVudA0KPiArICBwYXR0ZXJu IGZpbHRlciBmcm9tIHRoZSBkZXZpY2UuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAg ICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlDQo+IEVES0lJX1VTQl9FVEhFUk5FVF9QUk9U T0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgVmFsdWUgICAgICAgICAgICAgICAgICBU aGUgZmlsdGVyIG51bWJlci4NCj4gKyAgQHBhcmFtW291dF0gUGF0dGVybkFjdGl2ZSAgICAgICAg ICBBIHBvaW50ZXIgdG8gdGhlIHBhdHRlcm4gYWN0aXZlIGJvb2xlYW4uDQo+ICsNCj4gKyAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3Nm dWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgIEEgdGltZW91dCBvY2N1 cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJP UiAgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBA cmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBh biBpbnZhbGlkDQo+IHZhbHVlLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAg Tm90IHN1cHBvcnRlZC4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4g K0dldFVzYlJuZGlzUG93ZXJGaWx0ZXIgKA0KPiArICBJTiAgRURLSUlfVVNCX0VUSEVSTkVUX1BS T1RPQ09MICAqVGhpcywNCj4gKyAgSU4gIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgVmFs dWUsDQo+ICsgIE9VVCBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICpQYXR0ZXJuQWN0aXZl DQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCAgUmVxdWVzdDsNCj4g KyAgVUlOVDMyICAgICAgICAgICAgICAgICAgVHJhbnNTdGF0dXM7DQo+ICsgIFVTQl9STkRJU19E RVZJQ0UgICAgICAgICpVc2JSbmRpc0RldmljZTsNCj4gKw0KPiArICBVc2JSbmRpc0RldmljZSA9 IFVTQl9STkRJU19ERVZJQ0VfRlJPTV9USElTIChUaGlzKTsNCj4gKw0KPiArICBSZXF1ZXN0LlJl cXVlc3RUeXBlID0gVVNCX0VUSEVSTkVUX0dFVF9SRVFfVFlQRTsNCj4gKyAgUmVxdWVzdC5SZXF1 ZXN0ICAgICA9DQo+IEdFVF9FVEhfUE9XRVJfTUFOQUdFTUVOVF9QQVRURVJOX0ZJTFRFUl9SRVE7 DQo+ICsgIFJlcXVlc3QuVmFsdWUgICAgICAgPSBWYWx1ZTsNCj4gKyAgUmVxdWVzdC5JbmRleCAg ICAgICA9IFVzYlJuZGlzRGV2aWNlLT5OdW1PZkludGVyZmFjZTsNCj4gKyAgUmVxdWVzdC5MZW5n dGggICAgICA9IFVTQl9FVEhfUE9XRVJfRklMVEVSX0xFTkdUSDsNCj4gKw0KPiArICByZXR1cm4g VXNiUm5kaXNEZXZpY2UtPlVzYklvLT5Vc2JDb250cm9sVHJhbnNmZXIgKA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5Vc2JJbywNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUmVxdWVzdCwNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBFZmlVc2JEYXRhSW4sDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVVNCX0VUSEVSTkVUX1RSQU5TRkVSX1RJTUVPVVQsDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUGF0dGVybkFjdGl2ZSwNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBVU0JfRVRIX1BPV0VSX0ZJTFRFUl9MRU5HVEgsDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlRyYW5zU3RhdHVzDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsNCj4g KyAgQ29udmVydHMgUFhFIGZpbHRlciBzZXR0aW5ncyB0byBSTkRJUyB2YWx1ZXMNCj4gKw0KPiAr ICBAcGFyYW1baW5dICBWYWx1ZSAgICAgIFBYRSBmaWx0ZXIgZGF0YS4NCj4gKyAgQHBhcmFtW291 dF0gQ2RjRmlsdGVyICBBIHBvaW50ZXIgdG8gdGhlIEV0aGVybmV0IFBhY2tldCBGaWx0ZXIgQml0 bWFwIHZhbHVlDQo+IGNvbnZlcnRlZCBieSBQWEVfT1BGTEFHUy4NCj4gKw0KPiArKiovDQo+ICtW T0lEDQo+ICtDb252ZXJ0RmlsdGVyICgNCj4gKyAgSU4gIFVJTlQxNiAgVmFsdWUsDQo+ICsgIE9V VCBVSU5UMTYgICpDZGNGaWx0ZXINCj4gKyAgKQ0KPiArew0KPiArICBVSU5UMzIgICAgICAgICAg ICAgICAgIEluZGV4Ow0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgIENvdW50Ow0KPiArICBz dGF0aWMgc3RydWN0IEJJVF9NQVAgIFRhYmxlW10gPSB7DQo+ICsgICAgeyBQWEVfT1BGTEFHU19S RUNFSVZFX0ZJTFRFUl9VTklDQVNULA0KPiBORElTX1BBQ0tFVF9UWVBFX0RJUkVDVEVEICAgICAg fSwNCj4gKyAgICB7IFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX0JST0FEQ0FTVCwNCj4gTkRJ U19QQUNLRVRfVFlQRV9CUk9BRENBU1QgICAgIH0sDQo+ICsgICAgeyBQWEVfT1BGTEFHU19SRUNF SVZFX0ZJTFRFUl9GSUxURVJFRF9NVUxUSUNBU1QsDQo+IE5ESVNfUEFDS0VUX1RZUEVfTVVMVElD QVNUICAgICB9LA0KPiArICAgIHsgUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfUFJPTUlTQ1VP VVMsDQo+IE5ESVNfUEFDS0VUX1RZUEVfUFJPTUlTQ1VPVVMgICB9LA0KPiArICAgIHsgUFhFX09Q RkxBR1NfUkVDRUlWRV9GSUxURVJfQUxMX01VTFRJQ0FTVCwNCj4gTkRJU19QQUNLRVRfVFlQRV9B TExfTVVMVElDQVNUIH0sDQo+ICsgIH07DQo+ICsNCj4gKyAgQ291bnQgPSBzaXplb2YgKFRhYmxl KS9zaXplb2YgKFRhYmxlWzBdKTsNCj4gKw0KPiArICBmb3IgKEluZGV4ID0gMDsgKFRhYmxlW0lu ZGV4XS5TcmMgIT0gMCkgJiYgKEluZGV4IDwgQ291bnQpOyBJbmRleCsrKSB7DQo+ICsgICAgaWYg KFRhYmxlW0luZGV4XS5TcmMgJiBWYWx1ZSkgew0KPiArICAgICAgKkNkY0ZpbHRlciB8PSBUYWJs ZVtJbmRleF0uRHN0Ow0KPiArICAgIH0NCj4gKyAgfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKw0K PiArICBVcGRhdGVzIEZpbHRlciBzZXR0aW5ncyBvbiB0aGUgZGV2aWNlLg0KPiArDQo+ICsgIEBw YXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2su DQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFj ZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1RBVFVTDQo+ICsNCj4g KyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtSbmRpc1VuZGlSZWNlaXZlRmlsdGVy ICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4g KyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4g KyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAqTWNhc3RMaXN0Ow0KPiArICBVSU5UOCAg ICAgICAgICAgICAgICAgICAgICAgIENvdW50Ow0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAg ICAgICAgIEluZGV4MTsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICBJbmRleDI7 DQo+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgQ3BiQWRkcjsNCj4gKyAgVUlOVDMy ICAgICAgICAgICAgICAgICAgICAgICBDcGJTaXplOw0KPiArICBVSU5UMTYgICAgICAgICAgICAg ICAgICAgICAgIFNldEZpbHRlcjsNCj4gKyAgUFhFX0NQQl9SRUNFSVZFX0ZJTFRFUlMgICAgICAq Q3BiOw0KPiArICBVU0JfRVRIRVJORVRfRlVOX0RFU0NSSVBUT1IgIFVzYkV0aEZ1bkRlc2NyaXB0 b3I7DQo+ICsNCj4gKyAgQ291bnQgICAgID0gMDsNCj4gKyAgQ3BiQWRkciAgID0gQ2RiLT5DUEJh ZGRyOw0KPiArICBDcGJTaXplICAgPSBDZGItPkNQQnNpemU7DQo+ICsgIFNldEZpbHRlciA9IChV SU5UMTYpKENkYi0+T3BGbGFncyAmIDB4MUYpOw0KPiArICBDcGIgICAgICAgPSAoUFhFX0NQQl9S RUNFSVZFX0ZJTFRFUlMgKikoVUlOVE4pQ3BiQWRkcjsNCj4gKw0KPiArICAvLyBUaGUgQ3BiIGNv dWxkIGJlIE5VTEwuKHJlZjpQWEVfQ1BCQUREUl9OT1RfVVNFRCkNCj4gKyAgTmljLT5SeEZpbHRl ciA9IChVSU5UOClTZXRGaWx0ZXI7DQo+ICsNCj4gKyAgaWYgKCgoU2V0RmlsdGVyICYgUFhFX09Q RkxBR1NfUkVDRUlWRV9GSUxURVJfRklMVEVSRURfTVVMVElDQVNUKSAhPSAwKQ0KPiB8fCAoQ3Bi ICE9IE5VTEwpKSB7DQo+ICsgICAgaWYgKENwYiAhPSBOVUxMKSB7DQo+ICsgICAgICBOaWMtPk1j YXN0Q291bnQgPSAoVUlOVDgpKENwYlNpemUgLyBQWEVfTUFDX0xFTkdUSCk7DQo+ICsgICAgICBD b3B5TWVtICgmTmljLT5NY2FzdExpc3QsIENwYiwgTmljLT5NY2FzdENvdW50KTsNCj4gKyAgICB9 IGVsc2Ugew0KPiArICAgICAgTmljLT5NY2FzdENvdW50ID0gMDsNCj4gKyAgICB9DQo+ICsNCj4g KyAgICBOaWMtPlVzYkV0aC0+VXNiRXRoRnVuRGVzY3JpcHRvciAoTmljLT5Vc2JFdGgsICZVc2JF dGhGdW5EZXNjcmlwdG9yKTsNCj4gKyAgICBpZiAoKFVzYkV0aEZ1bkRlc2NyaXB0b3IuTnVtYmVy TWNGaWx0ZXJzIDw8IDEpID09IDApIHsNCj4gKyAgICAgIE5pYy0+UnhGaWx0ZXIgfD0gUFhFX09Q RkxBR1NfUkVDRUlWRV9GSUxURVJfQUxMX01VTFRJQ0FTVDsNCj4gKyAgICAgIERFQlVHICgoREVC VUdfSU5GTywgIlNldFVzYkV0aFBhY2tldEZpbHRlciBOaWMgJWx4IE5pYy0+VXNiRXRoICVseCAi LA0KPiBOaWMsIE5pYy0+VXNiRXRoKSk7DQo+ICsgICAgICBOaWMtPlVzYkV0aC0+U2V0VXNiRXRo UGFja2V0RmlsdGVyIChOaWMtPlVzYkV0aCwgTmljLT5SeEZpbHRlcik7DQo+ICsgICAgfSBlbHNl IHsNCj4gKyAgICAgIFN0YXR1cyA9IGdCUy0+QWxsb2NhdGVQb29sIChFZmlCb290U2VydmljZXNE YXRhLCBOaWMtPk1jYXN0Q291bnQgKiA2LA0KPiAoVk9JRCAqKikmTWNhc3RMaXN0KTsNCj4gKyAg ICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgICAgcmV0dXJuIFBYRV9TVEFU Q09ERV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAgaWYgKENw YiAhPSBOVUxMKSB7DQo+ICsgICAgICAgIGZvciAoSW5kZXgxID0gMDsgSW5kZXgxIDwgTmljLT5N Y2FzdENvdW50OyBJbmRleDErKykgew0KPiArICAgICAgICAgIGZvciAoSW5kZXgyID0gMDsgSW5k ZXgyIDwgNjsgSW5kZXgyKyspIHsNCj4gKyAgICAgICAgICAgIE1jYXN0TGlzdFtDb3VudCsrXSA9 IENwYi0+TUNhc3RMaXN0W0luZGV4MV1bSW5kZXgyXTsNCj4gKyAgICAgICAgICB9DQo+ICsgICAg ICAgIH0NCj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAgTmljLT5SeEZpbHRlciB8PSBQWEVfT1BG TEFHU19SRUNFSVZFX0ZJTFRFUl9GSUxURVJFRF9NVUxUSUNBU1Q7DQo+ICsgICAgICBpZiAoQ3Bi ICE9IE5VTEwpIHsNCj4gKyAgICAgICAgTmljLT5Vc2JFdGgtPlNldFVzYkV0aE1jYXN0RmlsdGVy IChOaWMtPlVzYkV0aCwgTmljLT5NY2FzdENvdW50LA0KPiBNY2FzdExpc3QpOw0KPiArICAgICAg fQ0KPiArDQo+ICsgICAgICBOaWMtPlVzYkV0aC0+U2V0VXNiRXRoUGFja2V0RmlsdGVyIChOaWMt PlVzYkV0aCwgTmljLT5SeEZpbHRlcik7DQo+ICsgICAgICBGcmVlUG9vbCAoTWNhc3RMaXN0KTsN Cj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ ICsNCj4gKy8qKg0KPiArICBUaGlzIHJlcXVlc3QgaXMgdXNlZCB0byBjb25maWd1cmUgZGV2aWNl IEV0aGVybmV0IHBhY2tldCBmaWx0ZXIgc2V0dGluZ3MuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAg VGhpcyAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFREtJSV9VU0JfRVRIRVJORVRfUFJP VE9DT0wNCj4gaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIFZhbHVlICAgICAgICAgICAgIFBh Y2tldCBGaWx0ZXIgQml0bWFwLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAg ICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklf VElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVz dC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVk IGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVU RVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkDQo+IHZhbHVlLg0KPiArICBA cmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArDQo+ICsqKi8N Cj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArU2V0VXNiUm5kaXNQYWNrZXRGaWx0ZXIgKA0K PiArICBJTiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiBVSU5U MTYgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlDQo+ICsgICkNCj4gK3sNCj4gKyAgcmV0dXJu IEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyByZXF1ZXN0IGlzIHVz ZWQgdG8gcmV0cmlldmUgYSBzdGF0aXN0aWMgYmFzZWQgb24gdGhlIGZlYXR1cmUgc2VsZWN0b3Iu DQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0 byB0aGUNCj4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFy YW1baW5dICBGZWF0dXJlU2VsZWN0b3IgICAgICAgVmFsdWUgb2YgdGhlIGZlYXR1cmUgc2VsZWN0 b3IuDQo+ICsgIEBwYXJhbVtvdXRdIFN0YXRpc3RpYyAgICAgICAgICAgICBBIHBvaW50ZXIgdG8g dGhlIDMyIGJpdCB1bnNpZ25lZCBpbnRlZ2VyLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NF U1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJl dHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0 aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVl c3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJ RF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkDQo+IHZhbHVl Lg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiAr DQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArR2V0Um5kaXNTdGF0aXN0aWMg KA0KPiArICBJTiAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4g IFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgRmVhdHVyZVNlbGVjdG9yLA0KPiArICBPVVQg Vk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAqU3RhdGlzdGljDQo+ICsgICkNCj4gK3sNCj4g KyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBmdW5j dGlvbiBpcyBjYWxsZWQgd2hlbiBVbmRpU3RhcnQgaXMgaW52b2tlZC4NCj4gKw0KPiArICBAcGFy YW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0K PiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2Ug Y29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgIFRoZSBy ZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVT DQo+ICtFRklBUEkNCj4gK1JuZGlzVW5kaVN0YXJ0ICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2Ri LA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVT ICBTdGF0dXM7DQo+ICsNCj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiUm5kaXNVbmRpU3RhcnQg TmljICVseCBDZGIgJWx4IE5pYyBTdGF0ZSAleFxuIiwgTmljLA0KPiBDZGIsIE5pYy0+U3RhdGUp KTsNCj4gKw0KPiArICAvLyBJc3N1ZSBSbmRpcyBSZXNldCBhbmQgYnJpbmcgdGhlIGRldmljZSB0 byBSTkRJU19CVVNfSU5JVElBTElaRUQgc3RhdGUNCj4gKyAgU3RhdHVzID0gUm5kaXNVbmRpUmVz ZXQgKENkYiwgTmljKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIFJu ZGlzVW5kaVJlc2V0IChDZGIsIE5pYyk7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBSbmRp c1VuZGlJbml0aWFsaXplIChDZGIsIE5pYyk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gKyAgICBSbmRpc1VuZGlJbml0aWFsaXplIChDZGIsIE5pYyk7DQo+ICsgIH0NCj4gKw0K PiArICBSbmRpc1VuZGlTaHV0ZG93biAoQ2RiLCBOaWMpOw0KPiArDQo+ICsgIHJldHVybiBFRklf U1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVk IHdoZW4gVW5kaXN0b3AgaXMgaW52b2tlZC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEg cG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5d ICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRh Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVk IHN1Y2Nlc3NmdWxseS4NCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtSbmRp c1VuZGlTdG9wICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEg ICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBERUJVRyAoKERFQlVHX0lORk8sICJSbmRpc1VuZGlT dG9wIFN0YXRlICV4XG4iLCBOaWMtPlN0YXRlKSk7DQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsN Cj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gVW5k aUdldEluaXRJbmZvIGlzIGludm9rZWQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBv aW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAg TmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4N Cj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBz dWNjZXNzZnVsbHkuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtS bmRpc1VuZGlHZXRJbml0SW5mbyAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4g IE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1BS T1RPQ09MICAqVXNiRXRoRGV2aWNlOw0KPiArICBVU0JfUk5ESVNfREVWSUNFICAgICAgICAgICAg ICpVc2JSbmRpc0RldmljZTsNCj4gKyAgUFhFX0RCX0dFVF9JTklUX0lORk8gICAgICAgICAqRGI7 DQo+ICsNCj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiUm5kaXNVbmRpR2V0SW5pdEluZm9cbiIp KTsNCj4gKw0KPiArICBVc2JFdGhEZXZpY2UgICA9IE5pYy0+VXNiRXRoOw0KPiArICBVc2JSbmRp c0RldmljZSA9IFVTQl9STkRJU19ERVZJQ0VfRlJPTV9USElTIChVc2JFdGhEZXZpY2UpOw0KPiAr DQo+ICsgIERiID0gKFBYRV9EQl9HRVRfSU5JVF9JTkZPICopKFVJTlROKUNkYi0+REJhZGRyOw0K PiArDQo+ICsgIERiLT5GcmFtZURhdGFMZW4gPSBVc2JSbmRpc0RldmljZS0+TWF4VHJhbnNmZXJT aXplIC0gc2l6ZW9mDQo+IChSRU1PVEVfTkRJU19QQUNLRVRfTVNHKSAtIFBYRV9NQUNfSEVBREVS X0xFTl9FVEhFUjsNCj4gKyAgLy8gTGltaXQgTWF4IE1UVSBzaXplIHRvIDE1MDAgYnl0ZXMgYXMg Uk5ESVMgc3BlYy4NCj4gKyAgaWYgKERiLT5GcmFtZURhdGFMZW4gPiBQWEVfTUFYX1RYUlhfVU5J VF9FVEhFUikgew0KPiArICAgIERiLT5GcmFtZURhdGFMZW4gPSBQWEVfTUFYX1RYUlhfVU5JVF9F VEhFUjsNCj4gKyAgfQ0KPiArDQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIkRiLT5GcmFtZURh dGFMZW4gJXhcbiIsIERiLT5GcmFtZURhdGFMZW4pKTsNCj4gKw0KPiArICByZXR1cm4gRUZJX1NV Q0NFU1M7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3 aGVuIFJuZGlzVW5kaUdldENvbmZpZ0luZm8gaXMgaW52b2tlZC4NCj4gKw0KPiArICBAcGFyYW1b aW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiAr ICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29u dHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgIFRoZSByZXF1 ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ ICtFRklBUEkNCj4gK1JuZGlzVW5kaUdldENvbmZpZ0luZm8gKA0KPiArICBJTiAgUFhFX0NEQiAg ICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIERFQlVH ICgoREVCVUdfSU5GTywgIlJuZGlzVW5kaUdldENvbmZpZ0luZm9cbiIpKTsNCj4gKyAgcmV0dXJu IEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBmdW5jdGlvbiBpcyBj YWxsZWQgd2hlbiBVbmRpSW5pdGlhbGl6ZSBpcyBpbnZva2VkLg0KPiArDQo+ICsgIEBwYXJhbVtp bl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsg IEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250 cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhl IHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBP UlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4g K0VGSUFQSQ0KPiArUm5kaXNVbmRpSW5pdGlhbGl6ZSAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNk YiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgRURLSUlfVVNC X0VUSEVSTkVUX1BST1RPQ09MICAgKlVzYkV0aERyaXZlcjsNCj4gKyAgVVNCX1JORElTX0RFVklD RSAgICAgICAgICAgICAgKlVzYlJuZGlzRGV2aWNlOw0KPiArICBSRU1PVEVfTkRJU19JTklUSUFM SVpFX01TRyAgICBSbmRpc0luaXRNc2c7DQo+ICsgIFJFTU9URV9ORElTX0lOSVRJQUxJWkVfQ01Q TFQgIFJuZGlzSW5pdE1zZ0NtcGx0Ow0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAg ICBTdGF0dXM7DQo+ICsNCj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiUm5kaXNVbmRpSW5pdGlh bGl6ZVxuIikpOw0KPiArDQo+ICsgIFVzYkV0aERyaXZlciAgID0gTmljLT5Vc2JFdGg7DQo+ICsg IFVzYlJuZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMgKFVzYkV0aERyaXZl cik7DQo+ICsNCj4gKyAgWmVyb01lbSAoJlJuZGlzSW5pdE1zZywgc2l6ZW9mIChSRU1PVEVfTkRJ U19JTklUSUFMSVpFX01TRykpOw0KPiArICBaZXJvTWVtICgmUm5kaXNJbml0TXNnQ21wbHQsIHNp emVvZiAoUkVNT1RFX05ESVNfSU5JVElBTElaRV9DTVBMVCkpOw0KPiArDQo+ICsgIFJuZGlzSW5p dE1zZy5NZXNzYWdlVHlwZSAgICAgPSBSTkRJU19JTklUSUFMSVpFX01TRzsNCj4gKyAgUm5kaXNJ bml0TXNnLk1lc3NhZ2VMZW5ndGggICA9IHNpemVvZiAoUkVNT1RFX05ESVNfSU5JVElBTElaRV9N U0cpOw0KPiArICBSbmRpc0luaXRNc2cuUmVxdWVzdElEICAgICAgID0gVXNiUm5kaXNEZXZpY2Ut PlJlcXVlc3RJZDsNCj4gKyAgUm5kaXNJbml0TXNnLk1ham9yVmVyc2lvbiAgICA9IFJORElTX01B Sk9SX1ZFUlNJT047DQo+ICsgIFJuZGlzSW5pdE1zZy5NaW5vclZlcnNpb24gICAgPSBSTkRJU19N SU5PUl9WRVJTSU9OOw0KPiArICBSbmRpc0luaXRNc2cuTWF4VHJhbnNmZXJTaXplID0gUk5ESVNf TUFYX1RSQU5TRkVSX1NJWkU7DQo+ICsNCj4gKyAgUm5kaXNJbml0TXNnQ21wbHQuTWVzc2FnZVR5 cGUgICA9IFJORElTX0lOSVRJQUxJWkVfQ01QTFQ7DQo+ICsgIFJuZGlzSW5pdE1zZ0NtcGx0Lk1l c3NhZ2VMZW5ndGggPSBzaXplb2YNCj4gKFJFTU9URV9ORElTX0lOSVRJQUxJWkVfQ01QTFQpOw0K PiArDQo+ICsgIFN0YXR1cyA9IFJuZGlzQ29udHJvbE1zZyAoVXNiUm5kaXNEZXZpY2UsIChSRU1P VEVfTkRJU19NU0dfSEVBREVSDQo+ICopJlJuZGlzSW5pdE1zZywgKFJFTU9URV9ORElTX01TR19I RUFERVIgKikmUm5kaXNJbml0TXNnQ21wbHQpOw0KPiArDQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5S ZXF1ZXN0SWQrKzsNCj4gKw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpIHx8IChSbmRpc0lu aXRNc2dDbXBsdC5TdGF0dXMgJiAweDgwMDAwMDAwKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7 DQo+ICsgIH0NCj4gKw0KPiArICAvLyBPbmx5IFdpcmVkIE1lZGl1bSBpcyBzdXBwb3J0ZWQNCj4g KyAgaWYgKFJuZGlzSW5pdE1zZ0NtcGx0Lk1lZGl1bSkgew0KPiArICAgIHJldHVybiBFRklfVU5T VVBQT1JURUQ7DQo+ICsgIH0NCj4gKw0KPiArICBVc2JSbmRpc0RldmljZS0+TWVkaXVtICAgICAg ICAgICAgICAgID0gUm5kaXNJbml0TXNnQ21wbHQuTWVkaXVtOw0KPiArICBVc2JSbmRpc0Rldmlj ZS0+TWF4UGFja2V0c1BlclRyYW5zZmVyID0NCj4gUm5kaXNJbml0TXNnQ21wbHQuTWF4UGFja2V0 c1BlclRyYW5zZmVyOw0KPiArICBVc2JSbmRpc0RldmljZS0+TWF4VHJhbnNmZXJTaXplICAgICAg ID0gUm5kaXNJbml0TXNnQ21wbHQuTWF4VHJhbnNmZXJTaXplOw0KPiArICBVc2JSbmRpc0Rldmlj ZS0+UGFja2V0QWxpZ25tZW50RmFjdG9yID0NCj4gUm5kaXNJbml0TXNnQ21wbHQuUGFja2V0QWxp Z25tZW50RmFjdG9yOw0KPiArDQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIk1lZGl1bSA6ICV4 IFxuIiwgUm5kaXNJbml0TXNnQ21wbHQuTWVkaXVtKSk7DQo+ICsgIERFQlVHICgoREVCVUdfSU5G TywgIk1heFBhY2tldHNQZXJUcmFuc2ZlciA6ICV4IFxuIiwNCj4gUm5kaXNJbml0TXNnQ21wbHQu TWF4UGFja2V0c1BlclRyYW5zZmVyKSk7DQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIk1heFRy YW5zZmVyU2l6ZSA6ICV4XG4iLA0KPiBSbmRpc0luaXRNc2dDbXBsdC5NYXhUcmFuc2ZlclNpemUp KTsNCj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiUGFja2V0QWxpZ25tZW50RmFjdG9yIDogJXhc biIsDQo+IFJuZGlzSW5pdE1zZ0NtcGx0LlBhY2tldEFsaWdubWVudEZhY3RvcikpOw0KPiArDQo+ ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGZ1bmN0aW9u IGlzIGNhbGxlZCB3aGVuIFVuZGlSZXNldCBpcyBpbnZva2VkLg0KPiArDQo+ICsgIEBwYXJhbVtp bl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsg IEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250 cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhl IHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0Vf RVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiAr DQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUm5kaXNVbmRpUmVzZXQgKA0K PiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICAp DQo+ICt7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlVzYkV0aERyaXZlcjsN Cj4gKyAgVVNCX1JORElTX0RFVklDRSAgICAgICAgICAgICAqVXNiUm5kaXNEZXZpY2U7DQo+ICsg IFJFTU9URV9ORElTX1JFU0VUX01TRyAgICAgICAgUm5kaXNSZXNldE1zZzsNCj4gKyAgUkVNT1RF X05ESVNfUkVTRVRfQ01QTFQgICAgICBSbmRpc1Jlc2V0Q21wbHQ7DQo+ICsgIEVGSV9TVEFUVVMg ICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArDQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywg IlJuZGlzVW5kaVJlc2V0XG4iKSk7DQo+ICsNCj4gKyAgVXNiRXRoRHJpdmVyICAgPSBOaWMtPlVz YkV0aDsNCj4gKyAgVXNiUm5kaXNEZXZpY2UgPSBVU0JfUk5ESVNfREVWSUNFX0ZST01fVEhJUyAo VXNiRXRoRHJpdmVyKTsNCj4gKw0KPiArICBaZXJvTWVtICgmUm5kaXNSZXNldE1zZywgc2l6ZW9m IChSRU1PVEVfTkRJU19SRVNFVF9NU0cpKTsNCj4gKyAgWmVyb01lbSAoJlJuZGlzUmVzZXRDbXBs dCwgc2l6ZW9mIChSRU1PVEVfTkRJU19SRVNFVF9DTVBMVCkpOw0KPiArDQo+ICsgIFJuZGlzUmVz ZXRNc2cuTWVzc2FnZVR5cGUgICA9IFJORElTX1JFU0VUX01TRzsNCj4gKyAgUm5kaXNSZXNldE1z Zy5NZXNzYWdlTGVuZ3RoID0gc2l6ZW9mIChSRU1PVEVfTkRJU19SRVNFVF9NU0cpOw0KPiArDQo+ ICsgIFJuZGlzUmVzZXRDbXBsdC5NZXNzYWdlVHlwZSAgID0gUk5ESVNfUkVTRVRfQ01QTFQ7DQo+ ICsgIFJuZGlzUmVzZXRDbXBsdC5NZXNzYWdlTGVuZ3RoID0gc2l6ZW9mIChSRU1PVEVfTkRJU19S RVNFVF9DTVBMVCk7DQo+ICsNCj4gKyAgU3RhdHVzID0gUm5kaXNDb250cm9sTXNnIChVc2JSbmRp c0RldmljZSwgKFJFTU9URV9ORElTX01TR19IRUFERVINCj4gKikmUm5kaXNSZXNldE1zZywgKFJF TU9URV9ORElTX01TR19IRUFERVIgKikmUm5kaXNSZXNldENtcGx0KTsNCj4gKw0KPiArICBVc2JS bmRpc0RldmljZS0+UmVxdWVzdElkID0gMTsgICAgICAgICAgLy8gTGV0J3Mgc3RhcnQgd2l0aCAx DQo+ICsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSB8fCAoUm5kaXNSZXNldENtcGx0LlN0 YXR1cyAmIDB4ODAwMDAwMDApKSB7DQo+ICsgICAgcmV0dXJuIEVGSV9ERVZJQ0VfRVJST1I7DQo+ ICsgIH0NCj4gKw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ICsNCj4gKy8qKg0K PiArICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIFVuZGlTaHV0ZG93biBpcyBpbnZva2Vk Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRl c2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBO ZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArDQo+ICsq Ki8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUm5kaXNVbmRpU2h1dGRvd24gKA0KPiAr ICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ ICt7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlVzYkV0aERyaXZlcjsNCj4g KyAgVVNCX1JORElTX0RFVklDRSAgICAgICAgICAgICAqVXNiUm5kaXNEZXZpY2U7DQo+ICsgIFJF TU9URV9ORElTX0hBTFRfTVNHICAgICAgICAgUm5kaXNIbHRNc2c7DQo+ICsgIEVGSV9TVEFUVVMg ICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArDQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywg IlJuZGlzVW5kaVNodXRkb3duXG4iKSk7DQo+ICsNCj4gKyAgVXNiRXRoRHJpdmVyICAgPSBOaWMt PlVzYkV0aDsNCj4gKyAgVXNiUm5kaXNEZXZpY2UgPSBVU0JfUk5ESVNfREVWSUNFX0ZST01fVEhJ UyAoVXNiRXRoRHJpdmVyKTsNCj4gKw0KPiArICBaZXJvTWVtICgmUm5kaXNIbHRNc2csIHNpemVv ZiAoUkVNT1RFX05ESVNfSEFMVF9NU0cpKTsNCj4gKw0KPiArICBSbmRpc0hsdE1zZy5NZXNzYWdl VHlwZSAgID0gUk5ESVNfSExUX01TRzsNCj4gKyAgUm5kaXNIbHRNc2cuTWVzc2FnZUxlbmd0aCA9 IHNpemVvZiAoUkVNT1RFX05ESVNfSEFMVF9NU0cpOw0KPiArDQo+ICsgIFN0YXR1cyA9IFJuZGlz Q29udHJvbE1zZyAoVXNiUm5kaXNEZXZpY2UsIChSRU1PVEVfTkRJU19NU0dfSEVBREVSDQo+ICop JlJuZGlzSGx0TXNnLCBOVUxMKTsNCj4gKw0KPiArICBpZiAoU3RhdHVzID09IEVGSV9ERVZJQ0Vf RVJST1IpIHsNCj4gKyAgICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCj4gKyAgfQ0KPiArDQo+ICsg IFVzYlJuZGlzRGV2aWNlLT5SZXF1ZXN0SWQgPSAxOw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiAr fQ0KPiArDQo+ICsvKioNCj4gKyAgVXBkYXRlIHRoZSBNZWRpYSBjb25uZWN0aW9uLg0KPiArDQo+ ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3Ig YmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGlu dGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArDQo+ICsqKi8NCj4gK0VG SV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUm5kaXNVbmRpR2V0U3RhdHVzICgNCj4gKyAgSU4gIFBY RV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiAr ICBDZGItPlN0YXRGbGFncyAmPSB+KFBYRV9TVEFURkxBR1NfR0VUX1NUQVRVU19OT19NRURJQSk7 DQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRyYW5z bWl0IHRoZSBkYXRhIGFmdGVyIGFwcGVuZGluZyBSTkRJUyBoZWFkZXIuDQo+ICsNCj4gKyAgQHBh cmFtW2luXSAgICAgIENkYiAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2Ny aXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gICAgICBUaGlzICAgICAgICAgIEEgcG9pbnRl ciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MDQo+IGluc3RhbmNlLg0KPiArICBA cGFyYW1baW5dICAgICAgQnVsa091dERhdGEgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBvZiBk YXRhIHRoYXQgd2lsbCBiZQ0KPiB0cmFuc21pdHRlZCB0byBVU0INCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZGV2aWNlIG9yIHJlY2VpdmVkIGZyb20gVVNCIGRldmljZS4NCj4g KyAgQHBhcmFtW2luLCBvdXRdIERhdGFMZW5ndGggICAgQSBwb2ludGVyIHRvIHRoZSBQYWNrZXRM ZW5ndGguDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgVGhlIHJlcXVlc3QgZXhl Y3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQ SQ0KPiArUm5kaXNVbmRpVHJhbnNtaXQgKA0KPiArICBJTiAgICAgIFBYRV9DREIgICAgICAgICAg ICAgICAgICAgICAgKkNkYiwNCj4gKyAgSU4gICAgICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9D T0wgICpUaGlzLA0KPiArICBJTiAgICAgIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgKkJ1 bGtPdXREYXRhLA0KPiArICBJTiBPVVQgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgKkRh dGFMZW5ndGgNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICBTdGF0 dXM7DQo+ICsgIFVTQl9STkRJU19ERVZJQ0UgICAgICAgICpVc2JSbmRpc0RldmljZTsNCj4gKyAg UkVNT1RFX05ESVNfUEFDS0VUX01TRyAgKlJuZGlzUGFja2V0TXNnOw0KPiArICBVSU5UTiAgICAg ICAgICAgICAgICAgICBUcmFuc2Zlckxlbmd0aDsNCj4gKw0KPiArICBERUJVRyAoKERFQlVHX0lO Rk8sICJSbmRpc1VuZGlUcmFuc21pdCBEYXRhTGVuZ3RoIDogJXhcbiIsDQo+ICpEYXRhTGVuZ3Ro KSk7DQo+ICsNCj4gKyAgVXNiUm5kaXNEZXZpY2UgPSBVU0JfUk5ESVNfREVWSUNFX0ZST01fVEhJ UyAoVGhpcyk7DQo+ICsNCj4gKyAgUm5kaXNQYWNrZXRNc2cgPSBBbGxvY2F0ZVplcm9Qb29sIChz aXplb2YgKFJFTU9URV9ORElTX1BBQ0tFVF9NU0cpICsNCj4gKkRhdGFMZW5ndGgpOw0KPiArICBp ZiAoUm5kaXNQYWNrZXRNc2cgPT0gTlVMTCkgew0KPiArICAgIHJldHVybiBFRklfT1VUX09GX1JF U09VUkNFUzsNCj4gKyAgfQ0KPiArDQo+ICsgIFJuZGlzUGFja2V0TXNnLT5NZXNzYWdlVHlwZSAg ID0gUk5ESVNfUEFDS0VUX01TRzsNCj4gKyAgUm5kaXNQYWNrZXRNc2ctPk1lc3NhZ2VMZW5ndGgg PSBzaXplb2YgKFJFTU9URV9ORElTX1BBQ0tFVF9NU0cpICsNCj4gKFVJTlQzMikqRGF0YUxlbmd0 aDsNCj4gKyAgUm5kaXNQYWNrZXRNc2ctPkRhdGFPZmZzZXQgICAgPSBzaXplb2YgKFJFTU9URV9O RElTX1BBQ0tFVF9NU0cpIC0gODsNCj4gKyAgUm5kaXNQYWNrZXRNc2ctPkRhdGFMZW5ndGggICAg PSAoVUlOVDMyKSpEYXRhTGVuZ3RoOw0KPiArDQo+ICsgIENvcHlNZW0gKA0KPiArICAgICgoVUlO VDggKilSbmRpc1BhY2tldE1zZykgKyBzaXplb2YgKFJFTU9URV9ORElTX1BBQ0tFVF9NU0cpLA0K PiArICAgIEJ1bGtPdXREYXRhLA0KPiArICAgICpEYXRhTGVuZ3RoDQo+ICsgICAgKTsNCj4gKw0K PiArICBUcmFuc2Zlckxlbmd0aCA9IFJuZGlzUGFja2V0TXNnLT5NZXNzYWdlTGVuZ3RoOw0KPiAr DQo+ICsgIFN0YXR1cyA9IFJuZGlzVHJhbnNtaXREYXRhTXNnICgNCj4gKyAgICAgICAgICAgICBV c2JSbmRpc0RldmljZSwNCj4gKyAgICAgICAgICAgICAoUkVNT1RFX05ESVNfTVNHX0hFQURFUiAq KVJuZGlzUGFja2V0TXNnLA0KPiArICAgICAgICAgICAgICZUcmFuc2Zlckxlbmd0aA0KPiArICAg ICAgICAgICAgICk7DQo+ICsNCj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiXG5SbmRpc1VuZGlU cmFuc21pdCBUcmFuc2Zlckxlbmd0aCAlbHhcbiIsDQo+IFRyYW5zZmVyTGVuZ3RoKSk7DQo+ICsN Cj4gKyAgRnJlZVBvb2wgKFJuZGlzUGFja2V0TXNnKTsNCj4gKw0KPiArICByZXR1cm4gU3RhdHVz Ow0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUmVjZWl2ZXMgYW5kIHJlbW92ZXMgUk5ESVMgaGVh ZGVyIGFuZCByZXR1cm5zIHRoZSByYXcgZGF0YS4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgICAg Q2RiICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4N Cj4gKyAgQHBhcmFtW2luXSAgICAgIFRoaXMgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFREtJ SV9VU0JfRVRIRVJORVRfUFJPVE9DT0wNCj4gaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbiwgb3V0 XSBCdWxrSW5EYXRhICAgIEEgcG9pbnRlciB0byB0aGUgYnVmZmVyIG9mIGRhdGEgdGhhdCB3aWxs IGJlDQo+IHRyYW5zbWl0dGVkIHRvIFVTQg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkZXZpY2Ugb3IgcmVjZWl2ZWQgZnJvbSBVU0IgZGV2aWNlLg0KPiArICBAcGFyYW1baW4s IG91dF0gRGF0YUxlbmd0aCAgICBBIHBvaW50ZXIgdG8gdGhlIFBhY2tldExlbmd0aC4NCj4gKw0K PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBz dWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX0JVRkZFUl9UT09fU01BTEwgIFRoZSB1c2Vy IHByb3ZpZGVkIGJ1ZmZlciBpcyB0b28gc21hbGwNCj4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5E ICAgICAgICAgTm8gYnVmZmVyIHdhcyBmb3VuZCBpbiB0aGUgbGlzdC4NCj4gKw0KPiArKiovDQo+ ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1JuZGlzVW5kaVJlY2VpdmUgKA0KPiArICBJTiAg ICAgUFhFX0NEQiAgICAgICAgICAgICAgICAgICAgICAqQ2RiLA0KPiArICBJTiAgICAgRURLSUlf VVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gT1VUIFZPSUQgICAgICAgICAg ICAgICAgICAgICAgICAgKkJ1bGtJbkRhdGEsDQo+ICsgIElOIE9VVCBVSU5UTiAgICAgICAgICAg ICAgICAgICAgICAgICpEYXRhTGVuZ3RoDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAg ICAgICAgICAgICAgU3RhdHVzOw0KPiArICBVU0JfUk5ESVNfREVWSUNFICAgICAgICAqVXNiUm5k aXNEZXZpY2U7DQo+ICsgIFJFTU9URV9ORElTX1BBQ0tFVF9NU0cgICpSbmRpc1BhY2tldE1zZzsN Cj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgVHJhbnNmZXJMZW5ndGg7DQo+ICsgIFZPSUQg ICAgICAgICAgICAgICAgICAgICpCdWZmZXI7DQo+ICsgIFBBQ0tFVF9MSVNUICAgICAgICAgICAg ICpIZWFkUGFja2V0Ow0KPiArICBQQUNLRVRfTElTVCAgICAgICAgICAgICAqUGFja2V0TGlzdDsN Cj4gKw0KPiArICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhbnkgb3V0c3RhbmRpbmcgcGFja2V0IHRv IHJlY2VpdmUNCj4gKyAgLy8gVGhlIGJ1ZmZlciBhbGxvY2F0ZWQgaGFzIGEgbGlua2VkIExpc3Qg Zm9sbG93ZWQgYnkgdGhlIHBhY2tldC4NCj4gKw0KPiArICBVc2JSbmRpc0RldmljZSA9IFVTQl9S TkRJU19ERVZJQ0VfRlJPTV9USElTIChUaGlzKTsNCj4gKyAgQnVmZmVyICAgICAgICAgPSBOVUxM Ow0KPiArICBIZWFkUGFja2V0ICAgICA9IE5VTEw7DQo+ICsNCj4gKyAgd2hpbGUgKDEpIHsNCj4g KyAgICBCdWZmZXIgPSBBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YgKFBBQ0tFVF9MSVNUKSArIHNp emVvZg0KPiAoUkVNT1RFX05ESVNfUEFDS0VUX01TRykgKyBVc2JSbmRpc0RldmljZS0+TWF4VHJh bnNmZXJTaXplKTsNCj4gKyAgICBpZiAoQnVmZmVyID09IE5VTEwpIHsNCj4gKyAgICAgIHJldHVy biBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBSbmRpc1BhY2tl dE1zZyAgICAgICAgICAgICAgICA9IChSRU1PVEVfTkRJU19QQUNLRVRfTVNHICopKHNpemVvZg0K PiAoUEFDS0VUX0xJU1QpICsgKFVJTlQ4ICopQnVmZmVyKTsNCj4gKyAgICBQYWNrZXRMaXN0ICAg ICAgICAgICAgICAgICAgICA9IChQQUNLRVRfTElTVCAqKUJ1ZmZlcjsNCj4gKyAgICBQYWNrZXRM aXN0LT5QYWNrZXRTdGFydEJ1ZmZlciA9IChVSU5UOCAqKUJ1ZmZlciArIHNpemVvZiAoUEFDS0VU X0xJU1QpOw0KPiArICAgIC8vIFNhdmUgdGhlIG9yaWdpbmFsIGFkZHJlc3MgZm9yIGZyZWVpbmcg aXQgdXANCj4gKyAgICBQYWNrZXRMaXN0LT5PcmdCdWZmZXIgPSAoVUlOVDggKilCdWZmZXI7DQo+ ICsgICAgVHJhbnNmZXJMZW5ndGggICAgICAgID0gVXNiUm5kaXNEZXZpY2UtPk1heFRyYW5zZmVy U2l6ZTsNCj4gKw0KPiArICAgIFN0YXR1cyA9IFJuZGlzUmVjZWl2ZURhdGFNc2cgKA0KPiArICAg ICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2UsDQo+ICsgICAgICAgICAgICAgICAoUkVNT1RFX05E SVNfTVNHX0hFQURFUiAqKVJuZGlzUGFja2V0TXNnLA0KPiArICAgICAgICAgICAgICAgJlRyYW5z ZmVyTGVuZ3RoDQo+ICsgICAgICAgICAgICAgICApOw0KPiArDQo+ICsgICAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSB8fCAoVHJhbnNmZXJMZW5ndGggPT0gMCkpIHsNCj4gKyAgICAgIEZyZWVQb29s IChCdWZmZXIpOw0KPiArICAgICAgYnJlYWs7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgLy8gQ29s bGVjdCBhbGwgdGhlIFJORElTIHBhY2tldCBpbiBMaW5rZWQgbGlzdC4NCj4gKyAgICBpZiAoKFJu ZGlzUGFja2V0TXNnLT5NZXNzYWdlVHlwZSA9PSBSTkRJU19QQUNLRVRfTVNHKSAmJg0KPiArICAg ICAgICAoUm5kaXNQYWNrZXRNc2ctPkRhdGFPZmZzZXQgPT0gc2l6ZW9mIChSRU1PVEVfTkRJU19Q QUNLRVRfTVNHKSAtDQo+IFJORElTX1JFU0VSVkVEX0JZVEVfTEVOR1RIKSAmJg0KPiArICAgICAg ICAoVHJhbnNmZXJMZW5ndGggPj0gUm5kaXNQYWNrZXRNc2ctPk1lc3NhZ2VMZW5ndGgpKQ0KPiAr ICAgIHsNCj4gKyAgICAgIC8vIEluc2VydCBQYWNrZXQNCj4gKyAgICAgIFBhY2tldExpc3QtPlJl bWFpbmluZ0xlbmd0aCA9IFRyYW5zZmVyTGVuZ3RoOw0KPiArICAgICAgSW5zZXJ0VGFpbExpc3Qg KCZVc2JSbmRpc0RldmljZS0+UmVjZWl2ZVBhY2tldExpc3QsIEJ1ZmZlcik7DQo+ICsgICAgfSBl bHNlIHsNCj4gKyAgICAgIEZyZWVQb29sIChCdWZmZXIpOw0KPiArICAgIH0NCj4gKyAgfQ0KPiAr DQo+ICsgIHdoaWxlICghSXNMaXN0RW1wdHkgKCZVc2JSbmRpc0RldmljZS0+UmVjZWl2ZVBhY2tl dExpc3QpKSB7DQo+ICsgICAgSGVhZFBhY2tldCA9IChQQUNLRVRfTElTVCAqKUdldEZpcnN0Tm9k ZSAoJlVzYlJuZGlzRGV2aWNlLQ0KPiA+UmVjZWl2ZVBhY2tldExpc3QpOw0KPiArDQo+ICsgICAg Um5kaXNQYWNrZXRNc2cgPSAoUkVNT1RFX05ESVNfUEFDS0VUX01TRyAqKShVSU5UOCAqKUhlYWRQ YWNrZXQtDQo+ID5QYWNrZXRTdGFydEJ1ZmZlcjsNCj4gKw0KPiArICAgIFByaW50Um5kaXNNc2cg KChSRU1PVEVfTkRJU19NU0dfSEVBREVSICopUm5kaXNQYWNrZXRNc2cpOw0KPiArDQo+ICsgICAg Ly8gQ2hlY2sgd2hldGhlciB0aGUgcGFja2V0IGlzIHZhbGlkIFJORElTIHBhY2tldC4NCj4gKyAg ICBpZiAoKEhlYWRQYWNrZXQtPlJlbWFpbmluZ0xlbmd0aCA+IHNpemVvZiAoUkVNT1RFX05ESVNf UEFDS0VUX01TRykpDQo+ICYmIChSbmRpc1BhY2tldE1zZy0+TWVzc2FnZVR5cGUgPT0gUk5ESVNf UEFDS0VUX01TRykgJiYNCj4gKyAgICAgICAgKFJuZGlzUGFja2V0TXNnLT5EYXRhT2Zmc2V0ID09 IChzaXplb2YgKFJFTU9URV9ORElTX1BBQ0tFVF9NU0cpIC0NCj4gUk5ESVNfUkVTRVJWRURfQllU RV9MRU5HVEgpKSAmJg0KPiArICAgICAgICAoSGVhZFBhY2tldC0+UmVtYWluaW5nTGVuZ3RoID49 IFJuZGlzUGFja2V0TXNnLT5NZXNzYWdlTGVuZ3RoKSkNCj4gKyAgICB7DQo+ICsgICAgICBpZiAo KkRhdGFMZW5ndGggPj0gUm5kaXNQYWNrZXRNc2ctPkRhdGFMZW5ndGgpIHsNCj4gKyAgICAgICAg Q29weU1lbSAoDQo+ICsgICAgICAgICAgQnVsa0luRGF0YSwNCj4gKyAgICAgICAgICAoVUlOVDgg KilSbmRpc1BhY2tldE1zZyArIChSbmRpc1BhY2tldE1zZy0+RGF0YU9mZnNldCArDQo+IFJORElT X1JFU0VSVkVEX0JZVEVfTEVOR1RIKSwNCj4gKyAgICAgICAgICBSbmRpc1BhY2tldE1zZy0+RGF0 YUxlbmd0aA0KPiArICAgICAgICAgICk7DQo+ICsNCj4gKyAgICAgICAgKkRhdGFMZW5ndGggPSAg Um5kaXNQYWNrZXRNc2ctPkRhdGFMZW5ndGg7DQo+ICsNCj4gKyAgICAgICAgSGVhZFBhY2tldC0+ UmVtYWluaW5nTGVuZ3RoICAgPSBIZWFkUGFja2V0LT5SZW1haW5pbmdMZW5ndGggLQ0KPiBSbmRp c1BhY2tldE1zZy0+TWVzc2FnZUxlbmd0aDsNCj4gKyAgICAgICAgSGVhZFBhY2tldC0+UGFja2V0 U3RhcnRCdWZmZXIgPSAoVUlOVDggKilSbmRpc1BhY2tldE1zZyArDQo+IFJuZGlzUGFja2V0TXNn LT5NZXNzYWdlTGVuZ3RoOw0KPiArDQo+ICsgICAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4g KyAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICpEYXRhTGVuZ3RoID0gUm5kaXNQYWNrZXRNc2ct PkRhdGFMZW5ndGg7DQo+ICsgICAgICAgIHJldHVybiBFRklfQlVGRkVSX1RPT19TTUFMTDsNCj4g KyAgICAgIH0NCj4gKyAgICB9DQo+ICsNCj4gKyAgICBSZW1vdmVFbnRyeUxpc3QgKCZIZWFkUGFj a2V0LT5QYWNrZXRMaXN0KTsNCj4gKyAgICBGcmVlUG9vbCAoKFBBQ0tFVF9MSVNUICopSGVhZFBh Y2tldC0+T3JnQnVmZmVyKTsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBFRklfTk9UX0ZPVU5E Ow0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBpcyBhIGR1bW15IGZ1bmN0aW9uIHdoaWNo IGp1c3QgcmV0dXJucy4gVW5pbXBsZW1lbnRlZA0KPiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9D T0wgZnVuY3Rpb25zDQo+ICsgIHBvaW50IHRvIHRoaXMgZnVuY3Rpb24uDQo+ICsNCj4gKyAgQHBh cmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4N Cj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNl IGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICBUaGUg cmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRV Uw0KPiArRUZJQVBJDQo+ICtSbmRpc0R1bW15UmV0dXJuICgNCj4gKyAgSU4gIFBYRV9DREIgICAq Q2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBERUJVRyAo KERFQlVHX0lORk8sICJSbmRpc0R1bW15UmV0dXJuIGNhbGxlZFxuIikpOw0KPiArICByZXR1cm4g RUZJX1NVQ0NFU1M7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGZ1bmN0aW9uIHNlbmQg dGhlIFJORElTIGNvbW1hbmQgdGhyb3VnaCB0aGUgZGV2aWNlJ3MgY29udHJvbCBlbmRwb2ludA0K PiArDQo+ICsgIEBwYXJhbVtpbl0gIFVzYlJuZGlzRGV2aWNlICAgIEEgcG9pbnRlciB0byB0aGUg VVNCX1JORElTX0RFVklDRSBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgUm5kaXNNc2cgICAg ICAgICAgQSBwb2ludGVyIHRvIHRoZSBSRU1PVEVfTkRJU19NU0dfSEVBREVSDQo+IGRhdGEuDQo+ ICsgIEBwYXJhbVtvdXRdIFJuZGlzTXNnUmVzcG9uc2UgIEEgcG9pbnRlciB0byB0aGUNCj4gUkVN T1RFX05ESVNfTVNHX0hFQURFUiBkYXRhIGZvciBnZXR0aW5nIHJlc3BvbnNlcy4NCj4gKw0KPiAr ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgYnVsayB0cmFuc2ZlciBoYXMgYmVl biBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiAr Um5kaXNDb250cm9sTXNnICgNCj4gKyAgSU4gIFVTQl9STkRJU19ERVZJQ0UgICAgICAgICpVc2JS bmRpc0RldmljZSwNCj4gKyAgSU4gIFJFTU9URV9ORElTX01TR19IRUFERVIgICpSbmRpc01zZywN Cj4gKyAgT1VUIFJFTU9URV9ORElTX01TR19IRUFERVIgICpSbmRpc01zZ1Jlc3BvbnNlDQo+ICsg ICkNCj4gK3sNCj4gKyAgRUZJX1VTQl9JT19QUk9UT0NPTCAgICAgICAgICAgKlVzYklvID0gVXNi Um5kaXNEZXZpY2UtPlVzYklvOw0KPiArICBFRklfVVNCX0RFVklDRV9SRVFVRVNUICAgICAgICBE ZXZSZXE7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgIFVzYlN0YXR1czsNCj4g KyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBVSU5UMzIgICAg ICAgICAgICAgICAgICAgICAgICBTYXZlUmVzcG9uc2VUeXBlOw0KPiArICBVSU5UMzIgICAgICAg ICAgICAgICAgICAgICAgICBTYXZlUmVzcG9uc2VMZW5ndGg7DQo+ICsgIFVJTlQzMiAgICAgICAg ICAgICAgICAgICAgICAgIEluZGV4Ow0KPiArICBSRU1PVEVfTkRJU19JTklUSUFMSVpFX0NNUExU ICAqUm5kaXNJbml0Q21wbHQ7DQo+ICsNCj4gKyAgU2F2ZVJlc3BvbnNlVHlwZSAgID0gMDsNCj4g KyAgU2F2ZVJlc3BvbnNlTGVuZ3RoID0gMDsNCj4gKyAgUm5kaXNJbml0Q21wbHQgICAgID0gKFJF TU9URV9ORElTX0lOSVRJQUxJWkVfQ01QTFQgKilSbmRpc01zZ1Jlc3BvbnNlOw0KPiArDQo+ICsg IGlmIChSbmRpc01zZ1Jlc3BvbnNlKSB7DQo+ICsgICAgU2F2ZVJlc3BvbnNlVHlwZSAgID0gUm5k aXNNc2dSZXNwb25zZS0+TWVzc2FnZVR5cGU7DQo+ICsgICAgU2F2ZVJlc3BvbnNlTGVuZ3RoID0g Um5kaXNNc2dSZXNwb25zZS0+TWVzc2FnZUxlbmd0aDsNCj4gKyAgfQ0KPiArDQo+ICsgIFplcm9N ZW0gKCZEZXZSZXEsIHNpemVvZiAoRUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCkpOw0KPiArDQo+ICsg IERldlJlcS5SZXF1ZXN0VHlwZSA9IFVTQl9SRVFfVFlQRV9DTEFTUyB8IFVTQl9UQVJHRVRfSU5U RVJGQUNFOw0KPiArICBEZXZSZXEuUmVxdWVzdCAgICAgPSBTRU5EX0VOQ0FQU1VMQVRFRF9DT01N QU5EOw0KPiArICBEZXZSZXEuVmFsdWUgICAgICAgPSAwOw0KPiArICBEZXZSZXEuSW5kZXggICAg ICAgPSAwOw0KPiArICBEZXZSZXEuTGVuZ3RoICAgICAgPSAoVUlOVDE2KVJuZGlzTXNnLT5NZXNz YWdlTGVuZ3RoOw0KPiArDQo+ICsgIFByaW50Um5kaXNNc2cgKFJuZGlzTXNnKTsNCj4gKw0KPiAr ICBTdGF0dXMgPSBVc2JJby0+VXNiQ29udHJvbFRyYW5zZmVyICgNCj4gKyAgICAgICAgICAgICAg ICAgICAgVXNiSW8sDQo+ICsgICAgICAgICAgICAgICAgICAgICZEZXZSZXEsDQo+ICsgICAgICAg ICAgICAgICAgICAgIEVmaVVzYkRhdGFPdXQsDQo+ICsgICAgICAgICAgICAgICAgICAgIFVTQl9F VEhFUk5FVF9UUkFOU0ZFUl9USU1FT1VULA0KPiArICAgICAgICAgICAgICAgICAgICBSbmRpc01z ZywNCj4gKyAgICAgICAgICAgICAgICAgICAgUm5kaXNNc2ctPk1lc3NhZ2VMZW5ndGgsDQo+ICsg ICAgICAgICAgICAgICAgICAgICZVc2JTdGF0dXMNCj4gKyAgICAgICAgICAgICAgICAgICAgKTsN Cj4gKw0KPiArICBERUJVRyAoKERFQlVHX0lORk8sICJSbmRpc0NvbnRyb2xNc2c6IFVzYlN0YXR1 cyA6ICV4IFN0YXR1cyA6ICVyDQo+IFJuZGlzTXNnUmVzcG9uc2UgOiAlbHhcbiIsIFVzYlN0YXR1 cywgU3RhdHVzLCBSbmRpc01zZ1Jlc3BvbnNlKSk7DQo+ICsNCj4gKyAgLy8gRXJyb3Igb3Igbm8g cmVzcG9uc2UgZXhwZWN0ZWQNCj4gKyAgaWYgKChFRklfRVJST1IgKFN0YXR1cykpIHx8IChSbmRp c01zZ1Jlc3BvbnNlID09IE5VTEwpKSB7DQo+ICsgICAgREVCVUcgKChERUJVR19JTkZPLCAiUm5k aXNDb250cm9sTXNnOiBVc2JTdGF0dXMgOiAleCBTdGF0dXMgOiAlclxuIiwNCj4gVXNiU3RhdHVz LCBTdGF0dXMpKTsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgZm9y IChJbmRleCA9IDA7IEluZGV4IDwgKFJORElTX0NPTlRST0xfVElNRU9VVC8xMDApOyBJbmRleCsr KSB7DQo+ICsgICAgUmVhZFJuZGlzUmVzcG9uc2VJbnRlcnJ1cHQgKFVzYlJuZGlzRGV2aWNlKTsN Cj4gKyAgICBaZXJvTWVtICgmRGV2UmVxLCBzaXplb2YgKEVGSV9VU0JfREVWSUNFX1JFUVVFU1Qp KTsNCj4gKw0KPiArICAgIERldlJlcS5SZXF1ZXN0VHlwZSA9IFVTQl9FTkRQT0lOVF9ESVJfSU4g fCBVU0JfUkVRX1RZUEVfQ0xBU1MgfA0KPiBVU0JfVEFSR0VUX0lOVEVSRkFDRTsNCj4gKyAgICBE ZXZSZXEuUmVxdWVzdCAgICAgPSBHRVRfRU5DQVBTVUxBVEVEX1JFU1BPTlNFOw0KPiArICAgIERl dlJlcS5WYWx1ZSAgICAgICA9IDA7DQo+ICsgICAgRGV2UmVxLkluZGV4ICAgICAgID0gMDsNCj4g KyAgICBEZXZSZXEuTGVuZ3RoICAgICAgPSAoVUlOVDE2KVJuZGlzTXNnUmVzcG9uc2UtPk1lc3Nh Z2VMZW5ndGg7DQo+ICsNCj4gKyAgICBTdGF0dXMgPSBVc2JJby0+VXNiQ29udHJvbFRyYW5zZmVy ICgNCj4gKyAgICAgICAgICAgICAgICAgICAgICBVc2JJbywNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAmRGV2UmVxLA0KPiArICAgICAgICAgICAgICAgICAgICAgIEVmaVVzYkRhdGFJbiwNCj4g KyAgICAgICAgICAgICAgICAgICAgICBVU0JfRVRIRVJORVRfVFJBTlNGRVJfVElNRU9VVCwNCj4g KyAgICAgICAgICAgICAgICAgICAgICBSbmRpc01zZ1Jlc3BvbnNlLA0KPiArICAgICAgICAgICAg ICAgICAgICAgIFJuZGlzTXNnUmVzcG9uc2UtPk1lc3NhZ2VMZW5ndGgsDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgJlVzYlN0YXR1cw0KPiArICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsN Cj4gKyAgICBERUJVRyAoKERFQlVHX0lORk8sICJSbmRpc0NvbnRyb2xNc2cgUmVzcG9uc2U6IFVz YlN0YXR1cyA6ICV4DQo+IFN0YXR1cyA6ICVyIFxuIiwgVXNiU3RhdHVzLCBTdGF0dXMpKTsNCj4g Kw0KPiArICAgIFByaW50Um5kaXNNc2cgKFJuZGlzTXNnUmVzcG9uc2UpOw0KPiArDQo+ICsgICAg aWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIGlmICgoUm5kaXNJbml0Q21wbHQt PlJlcXVlc3RJRCAhPSAoKFJFTU9URV9ORElTX0lOSVRJQUxJWkVfQ01QTFQNCj4gKilSbmRpc01z ZyktPlJlcXVlc3RJRCkgfHwgKFJuZGlzSW5pdENtcGx0LT5NZXNzYWdlVHlwZSAhPQ0KPiBTYXZl UmVzcG9uc2VUeXBlKSkgew0KPiArICAgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJSZXRyeSB0 aGUgcmVzcG9uc2VcbiIpKTsNCj4gKw0KPiArICAgICAgICBSbmRpc01zZ1Jlc3BvbnNlLT5NZXNz YWdlVHlwZSAgID0gU2F2ZVJlc3BvbnNlVHlwZTsNCj4gKyAgICAgICAgUm5kaXNNc2dSZXNwb25z ZS0+TWVzc2FnZUxlbmd0aCA9IFNhdmVSZXNwb25zZUxlbmd0aDsNCj4gKyAgICAgICAgY29udGlu dWU7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4g KyAgfQ0KPiArDQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIlJuZGlzQ29udHJvbE1zZzogVGlt ZU91dFxuIikpOw0KPiArDQo+ICsgIHJldHVybiBFRklfVElNRU9VVDsNCj4gK30NCj4gKw0KPiAr LyoqDQo+ICsgIFRoaXMgZnVuY3Rpb24gc2VuZCB0aGUgUk5ESVMgY29tbWFuZCB0aHJvdWdoIHRo ZSBkZXZpY2UncyBEYXRhIGVuZHBvaW50DQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgIFVzYlJu ZGlzRGV2aWNlICBBIHBvaW50ZXIgdG8gdGhlIFVTQl9STkRJU19ERVZJQ0UNCj4gaW5zdGFuY2Uu DQo+ICsgIEBwYXJhbVtpbl0gICAgICBSbmRpc01zZyAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBS RU1PVEVfTkRJU19NU0dfSEVBREVSDQo+IHRvIHNlbmQgb3V0Lg0KPiArICBAcGFyYW1baW4sIG91 dF0gVHJhbnNmZXJMZW5ndGggIFRoZSBsZW5ndGggb2YgdGhlIFJuZGlzTXNnIGRhdGEgdG8gdHJh bnNmZXIuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgVGhlIHJlcXVlc3QgZXhl Y3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK1JuZGlz VHJhbnNtaXREYXRhTXNnICgNCj4gKyAgSU4gICAgICBVU0JfUk5ESVNfREVWSUNFICAgICAgICAq VXNiUm5kaXNEZXZpY2UsDQo+ICsgIElOICAgICAgUkVNT1RFX05ESVNfTVNHX0hFQURFUiAgKlJu ZGlzTXNnLA0KPiArICBJTiBPVVQgIFVJTlROICAgICAgICAgICAgICAgICAgICpUcmFuc2Zlckxl bmd0aA0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gKyAgVUlOVDMy ICAgICAgVXNiU3RhdHVzOw0KPiArDQo+ICsgIGlmIChVc2JSbmRpc0RldmljZS0+QnVsa0luRW5k cG9pbnQgPT0gMCkgew0KPiArICAgIEdldEVuZHBvaW50IChVc2JSbmRpc0RldmljZS0+VXNiSW9D ZGNEYXRhLCBVc2JSbmRpc0RldmljZSk7DQo+ICsgIH0NCj4gKw0KPiArICBQcmludFJuZGlzTXNn IChSbmRpc01zZyk7DQo+ICsNCj4gKyAgU3RhdHVzID0gVXNiUm5kaXNEZXZpY2UtPlVzYklvQ2Rj RGF0YS0+VXNiQnVsa1RyYW5zZmVyICgNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+VXNiSW9DZGNEYXRhLA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5CdWxrT3V0 RW5kcG9pbnQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Um5kaXNNc2csDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VHJhbnNmZXJMZW5ndGgsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVVNCX1RYX0VUSEVSTkVUX0JVTEtfVElNRU9VVCwNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmVXNiU3RhdHVzDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKw0KPiArICBpZiAoU3RhdHVzID09IEVG SV9TVUNDRVNTKSB7DQo+ICsgICAgZ1N0b3BCdWxrSW5DbnQgPSBNQVhJTVVNX1NUT1BCVUxLSU5f Q05UOyAgICAgLy8gQWZ0ZXIgc2VuZGluZw0KPiBjbWQgLHdlIHdpbGwgcG9sbGluZyByZWNlaXZl IHBhY2thZ2UgZm9yIE1BWElNVU1fU1RPUEJVTEtJTl9DTlQgdGltZXMNCj4gKyAgfQ0KPiArDQo+ ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGZ1bmN0aW9u IHNlbmQgdGhlIFJORElTIGNvbW1hbmQgdGhyb3VnaCB0aGUgZGV2aWNlJ3MgRGF0YSBlbmRwb2lu dA0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICAgICBVc2JSbmRpc0RldmljZSAgICBBIHBvaW50ZXIg dG8gdGhlIFVTQl9STkRJU19ERVZJQ0UNCj4gaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbiwgb3V0 XSBSbmRpc01zZyAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlDQo+IFJFTU9URV9ORElTX01TR19I RUFERVIgdG8gc2VuZCBvdXQuDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSBUcmFuc2Zlckxlbmd0aCAg ICBUaGUgbGVuZ3RoIG9mIHRoZSBSbmRpc01zZyBkYXRhIHRvDQo+IHRyYW5zZmVyLg0KPiArDQo+ ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3Nm dWxseS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtSbmRpc1JlY2VpdmVEYXRhTXNn ICgNCj4gKyAgSU4gICAgICBVU0JfUk5ESVNfREVWSUNFICAgICAgICAqVXNiUm5kaXNEZXZpY2Us DQo+ICsgIElOIE9VVCAgUkVNT1RFX05ESVNfTVNHX0hFQURFUiAgKlJuZGlzTXNnLA0KPiArICBJ TiBPVVQgIFVJTlROICAgICAgICAgICAgICAgICAgICpUcmFuc2Zlckxlbmd0aA0KPiArICApDQo+ ICt7DQo+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gKyAgVUlOVDMyICAgICAgVXNiU3RhdHVz Ow0KPiArDQo+ICsgIFVzYlN0YXR1cyA9IDA7DQo+ICsNCj4gKyAgaWYgKFVzYlJuZGlzRGV2aWNl LT5CdWxrSW5FbmRwb2ludCA9PSAwKSB7DQo+ICsgICAgR2V0RW5kcG9pbnQgKFVzYlJuZGlzRGV2 aWNlLT5Vc2JJb0NkY0RhdGEsIFVzYlJuZGlzRGV2aWNlKTsNCj4gKyAgfQ0KPiArDQo+ICsgIC8v IFVzZSBnU3RvcEJ1bGtJbkNudCB0byBzdG9wIEJ1bGtJbiBjb21tYW5kDQo+ICsgIGlmIChnU3Rv cEJ1bGtJbkNudCB8fCBMQU5fQlVMS0lOX0NNRF9DT05UUk9MKSB7DQo+ICsgICAgU3RhdHVzID0g VXNiUm5kaXNEZXZpY2UtPlVzYklvQ2RjRGF0YS0+VXNiQnVsa1RyYW5zZmVyICgNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5V c2JJb0NkY0RhdGEsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBVc2JSbmRpc0RldmljZS0+QnVsa0luRW5kcG9pbnQsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSbmRpc01zZywNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZmVyTGVuZ3RoLA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNCX1JYX0VUSEVSTkVUX0JV TEtfVElNRU9VVCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZVc2JTdGF0dXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7DQo+ICsNCj4gKyAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAg ICAgZ1N0b3BCdWxrSW5DbnQgPSBNSU5JTVVNX1NUT1BCVUxLSU5fQ05UOw0KPiArICAgIH0gZWxz ZSB7DQo+ICsgICAgICBnU3RvcEJ1bGtJbkNudC0tOw0KPiArICAgIH0NCj4gKyAgfSBlbHNlIHsN Cj4gKyAgICBTdGF0dXMgICAgICAgICAgPSBFRklfVElNRU9VVDsNCj4gKyAgICAqVHJhbnNmZXJM ZW5ndGggPSAwOw0KPiArICAgIGdCbG9ja0J1bGtJbkNudCsrOw0KPiArICB9DQo+ICsNCj4gKyAg aWYgKGdCbG9ja0J1bGtJbkNudCA+IEJVTEtJTl9DTURfUE9MTElOR19DTlQpIHsNCj4gKyAgICBn U3RvcEJ1bGtJbkNudCAgPSBNSU5JTVVNX1NUT1BCVUxLSU5fQ05UOw0KPiArICAgIGdCbG9ja0J1 bGtJbkNudCA9IDA7DQo+ICsgIH0NCj4gKw0KPiArICBQcmludFJuZGlzTXNnIChSbmRpc01zZyk7 DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFByaW50 cyBSTkRJUyBIZWFkZXIgYW5kIERhdGENCj4gKw0KPiArICBAcGFyYW1baW5dIFJuZGlzTXNnICAg IEEgcG9pbnRlciB0byB0aGUgUkVNT1RFX05ESVNfTVNHX0hFQURFUiBkYXRhLg0KPiArDQo+ICsq Ki8NCj4gK1ZPSUQNCj4gK1ByaW50Um5kaXNNc2cgKA0KPiArICBJTiAgUkVNT1RFX05ESVNfTVNH X0hFQURFUiAgKlJuZGlzTXNnDQo+ICsgICkNCj4gK3sNCj4gKyAgVUlOVE4gICAgICAgICAgICAg ICAgICAgIExlbmd0aDsNCj4gKyAgUkVNT1RFX05ESVNfUVVFUllfQ01QTFQgICpSbmRpc1F1ZXJ5 Q21wbHQ7DQo+ICsNCj4gKyAgTGVuZ3RoID0gMDsNCj4gKw0KPiArICBzd2l0Y2ggKFJuZGlzTXNn LT5NZXNzYWdlVHlwZSkgew0KPiArICAgIGNhc2UgUk5ESVNfUEFDS0VUX01TRzoNCj4gKyAgICAg IERFQlVHICgoREVCVUdfSU5GTywgIlJORElTX1BBQ0tFVF9NU0c6XG4iKSk7DQo+ICsgICAgICBM ZW5ndGggPSBzaXplb2YgKFJFTU9URV9ORElTX1BBQ0tFVF9NU0cpICsgMHgxNDsNCj4gKyAgICAg IGJyZWFrOw0KPiArICAgIGNhc2UgUk5ESVNfSU5JVElBTElaRV9NU0c6DQo+ICsgICAgICBERUJV RyAoKERFQlVHX0lORk8sICJSTkRJU19JTklUSUFMSVpFX01TRzpcbiIpKTsNCj4gKyAgICAgIExl bmd0aCA9IHNpemVvZiAoUkVNT1RFX05ESVNfSU5JVElBTElaRV9NU0cpOw0KPiArICAgICAgYnJl YWs7DQo+ICsgICAgY2FzZSBSTkRJU19JTklUSUFMSVpFX0NNUExUOg0KPiArICAgICAgREVCVUcg KChERUJVR19JTkZPLCAiUk5ESVNfSU5JVElBTElaRV9DTVBMVDpcbiIpKTsNCj4gKyAgICAgIExl bmd0aCA9IHNpemVvZiAoUkVNT1RFX05ESVNfSU5JVElBTElaRV9DTVBMVCk7DQo+ICsgICAgICBi cmVhazsNCj4gKyAgICBjYXNlIFJORElTX0hMVF9NU0c6DQo+ICsgICAgICBERUJVRyAoKERFQlVH X0lORk8sICJSTkRJU19ITFRfTVNHOlxuIikpOw0KPiArICAgICAgTGVuZ3RoID0gc2l6ZW9mIChS RU1PVEVfTkRJU19IQUxUX01TRyk7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICBjYXNlIFJORElT X1FVRVJZX01TRzoNCj4gKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIlJORElTX1FVRVJZX01T RzpcbiIpKTsNCj4gKyAgICAgIExlbmd0aCA9IHNpemVvZiAoUkVNT1RFX05ESVNfUVVFUllfTVNH KTsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIGNhc2UgUk5ESVNfUVVFUllfQ01QTFQ6DQo+ICsg ICAgICBERUJVRyAoKERFQlVHX0lORk8sICJSTkRJU19RVUVSWV9DTVBMVDpcbiIpKTsNCj4gKyAg ICAgIFJuZGlzUXVlcnlDbXBsdCA9IChSRU1PVEVfTkRJU19RVUVSWV9DTVBMVCAqKVJuZGlzTXNn Ow0KPiArICAgICAgTGVuZ3RoICAgICAgICAgID0gc2l6ZW9mIChSRU1PVEVfTkRJU19RVUVSWV9D TVBMVCkgKyBSbmRpc1F1ZXJ5Q21wbHQtDQo+ID5JbmZvcm1hdGlvbkJ1ZmZlckxlbmd0aDsNCj4g KyAgICAgIGJyZWFrOw0KPiArICAgIGNhc2UgUk5ESVNfU0VUX01TRzoNCj4gKyAgICAgIERFQlVH ICgoREVCVUdfSU5GTywgIlJORElTX1NFVF9NU0c6XG4iKSk7DQo+ICsgICAgICBMZW5ndGggPSBz aXplb2YgKFJFTU9URV9ORElTX1NFVF9NU0cpOw0KPiArICAgICAgYnJlYWs7DQo+ICsgICAgY2Fz ZSBSTkRJU19TRVRfQ01QTFQ6DQo+ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJSTkRJU19T RVRfQ01QTFQ6XG4iKSk7DQo+ICsgICAgICBMZW5ndGggPSBzaXplb2YgKFJFTU9URV9ORElTX1NF VF9DTVBMVCk7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICBjYXNlIFJORElTX1JFU0VUX01TRzoN Cj4gKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIlJORElTX1JFU0VUX01TRzpcbiIpKTsNCj4g KyAgICAgIExlbmd0aCA9IHNpemVvZiAoUkVNT1RFX05ESVNfUkVTRVRfTVNHKTsNCj4gKyAgICAg IGJyZWFrOw0KPiArICAgIGNhc2UgUk5ESVNfUkVTRVRfQ01QTFQ6DQo+ICsgICAgICBERUJVRyAo KERFQlVHX0lORk8sICJSTkRJU19SRVNFVF9DTVBMVDpcbiIpKTsNCj4gKyAgICAgIExlbmd0aCA9 IHNpemVvZiAoUkVNT1RFX05ESVNfUkVTRVRfQ01QTFQpOw0KPiArICAgICAgYnJlYWs7DQo+ICsg ICAgY2FzZSBSTkRJU19JTkRJQ0FURV9TVEFUVVNfTVNHOg0KPiArICAgICAgREVCVUcgKChERUJV R19JTkZPLCAiUk5ESVNfSU5ESUNBVEVfU1RBVFVTX01TRzpcbiIpKTsNCj4gKyAgICAgIExlbmd0 aCA9IHNpemVvZiAoUkVNT1RFX05ESVNfSU5ESUNBVEVfU1RBVFVTX01TRyk7DQo+ICsgICAgICBi cmVhazsNCj4gKyAgICBjYXNlIFJORElTX0tFRVBBTElWRV9NU0c6DQo+ICsgICAgICBERUJVRyAo KERFQlVHX0lORk8sICJSTkRJU19LRUVQQUxJVkVfTVNHOlxuIikpOw0KPiArICAgICAgTGVuZ3Ro ID0gc2l6ZW9mIChSRU1PVEVfTkRJU19LRUVQQUxJVkVfTVNHKTsNCj4gKyAgICAgIGJyZWFrOw0K PiArICAgIGNhc2UgUk5ESVNfS0VFUEFMSVZFX0NNUExUOg0KPiArICAgICAgREVCVUcgKChERUJV R19JTkZPLCAiUk5ESVNfS0VFUEFMSVZFX0NNUExUOlxuIikpOw0KPiArICAgICAgTGVuZ3RoID0g c2l6ZW9mIChSRU1PVEVfTkRJU19LRUVQQUxJVkVfQ01QTFQpOw0KPiArICB9DQo+ICsNCj4gKyAg aWYgKExlbmd0aCkgew0KPiArICAgIFVJTlROICBJbmRleCA9IDA7DQo+ICsgICAgZm9yICggOyBM ZW5ndGg7IExlbmd0aCAtPSA0LCBJbmRleCsrKSB7DQo+ICsgICAgICBERUJVRyAoKERFQlVHX0lO Rk8sICIlOFhcdCIsICooKFVJTlQzMiAqKVJuZGlzTXNnICsgSW5kZXgpKSk7DQo+ICsgICAgICBp ZiAoKChJbmRleCAlIDQpID09IDMpICYmIChJbmRleCAhPSAwKSkgew0KPiArICAgICAgICBERUJV RyAoKERFQlVHX0lORk8sICJcbiIpKTsNCj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAgaWYgKChM ZW5ndGggPCA4KSAmJiAoTGVuZ3RoID4gNCkpIHsNCj4gKyAgICAgICAgVUlOVDMyICBEYXRhMzI7 DQo+ICsgICAgICAgIEluZGV4Kys7DQo+ICsgICAgICAgIERhdGEzMiA9ICooKFVJTlQzMiAqKVJu ZGlzTXNnICsgSW5kZXgpOw0KPiArICAgICAgICBERUJVRyAoKERFQlVHX0lORk8sICIlOFhcdCIs IERhdGEzMikpOw0KPiArICAgICAgICBicmVhazsNCj4gKyAgICAgIH0NCj4gKyAgICB9DQo+ICsN Cj4gKyAgICBpZiAoSW5kZXggJSA0KSB7DQo+ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJc biIpKTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gK30NCj4gZGlmZiAtLWdpdCBhL01kZU1vZHVsZVBr Zy9JbmNsdWRlL1Byb3RvY29sL1VzYkV0aGVybmV0UHJvdG9jb2wuaA0KPiBiL01kZU1vZHVsZVBr Zy9JbmNsdWRlL1Byb3RvY29sL1VzYkV0aGVybmV0UHJvdG9jb2wuaA0KPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi44MDA5NDVkNGIzDQo+IC0tLSAvZGV2L251bGwN Cj4gKysrIGIvTWRlTW9kdWxlUGtnL0luY2x1ZGUvUHJvdG9jb2wvVXNiRXRoZXJuZXRQcm90b2Nv bC5oDQo+IEBAIC0wLDAgKzEsODc4IEBADQo+ICsvKiogQGZpbGUNCj4gKyAgSGVhZGVyIGZpbGUg Y29udGFpbnMgY29kZSBmb3IgVVNCIEV0aGVybmV0IFByb3RvY29sDQo+ICsgIGRlZmluaXRpb25z DQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAyMDIzLCBBbWVyaWNhbiBNZWdhdHJlbmRzIEludGVy bmF0aW9uYWwgTExDLiBBbGwgcmlnaHRzDQo+IHJlc2VydmVkLjxCUj4NCj4gKyAgU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gKyoqLw0KPiArDQo+ICsjaWZu ZGVmIFVTQl9FVEhFUk5FVF9QUk9UT0NPTF9IXw0KPiArI2RlZmluZSBVU0JfRVRIRVJORVRfUFJP VE9DT0xfSF8NCj4gKw0KPiArI2RlZmluZSBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0xfR1VJ RCBcDQo+ICsgICAgezB4OGQ4OTY5Y2MsIDB4ZmViMCwgMHg0MzAzLCB7MHhiMiwgMHgxYSwgMHgx ZiwgMHgxMSwgMHg2ZiwgMHgzOCwgMHg1NiwNCj4gMHg0M319DQo+ICsNCj4gK3R5cGVkZWYgc3Ry dWN0IF9FREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wNCj4gRURLSUlfVVNCX0VUSEVSTkVUX1BS T1RPQ09MOw0KPiArDQo+ICsjZGVmaW5lIFVTQl9DRENfQ0xBU1MgICAgICAgICAgMHgwMg0KPiAr I2RlZmluZSBVU0JfQ0RDX0FDTV9TVUJDTEFTUyAgIDB4MDINCj4gKyNkZWZpbmUgVVNCX0NEQ19F Q01fU1VCQ0xBU1MgICAweDA2DQo+ICsjZGVmaW5lIFVTQl9DRENfTkNNX1NVQkNMQVNTICAgMHgw RA0KPiArI2RlZmluZSBVU0JfQ0RDX0RBVEFfQ0xBU1MgICAgIDB4MEENCj4gKyNkZWZpbmUgVVNC X0NEQ19EQVRBX1NVQkNMQVNTICAweDAwDQo+ICsjZGVmaW5lIFVTQl9OT19DTEFTU19QUk9UT0NP TCAgMHgwMA0KPiArI2RlZmluZSBVU0JfTkNNX05UQl9QUk9UT0NPTCAgIDB4MDENCj4gKyNkZWZp bmUgVVNCX1ZFTkRPUl9QUk9UT0NPTCAgICAweEZGDQo+ICsNCj4gKy8vIFR5cGUgVmFsdWVzIGZv ciB0aGUgRGVzY3JpcHRvclR5cGUgRmllbGQNCj4gKyNkZWZpbmUgQ1NfSU5URVJGQUNFICAweDI0 DQo+ICsjZGVmaW5lIENTX0VORFBPSU5UICAgMHgyNQ0KPiArDQo+ICsvLyBEZXNjcmlwdG9yIFN1 YlR5cGUgaW4gRnVuY3Rpb25hbCBEZXNjcmlwdG9ycw0KPiArI2RlZmluZSBIRUFERVJfRlVOX0RF U0NSSVBUT1IgICAgMHgwMA0KPiArI2RlZmluZSBVTklPTl9GVU5fREVTQ1JJUFRPUiAgICAgMHgw Ng0KPiArI2RlZmluZSBFVEhFUk5FVF9GVU5fREVTQ1JJUFRPUiAgMHgwRg0KPiArDQo+ICsjZGVm aW5lIE1BWF9MQU5fSU5URVJGQUNFICAweDEwDQo+ICsNCj4gKy8vIFRhYmxlIDIwOiBDbGFzcy1T cGVjaWZpYyBOb3RpZmljYXRpb24gQ29kZXMNCj4gKyNkZWZpbmUgVVNCX0NEQ19ORVRXT1JLX0NP Tk5FQ1RJT04gIDB4MDANCj4gKw0KPiArLy8gNi4zLjEgTmV0d29ya0Nvbm5lY3Rpb24NCj4gKyNk ZWZpbmUgTkVUV09SS19DT05ORUNURUQgICAweDAxDQo+ICsjZGVmaW5lIE5FVFdPUktfRElTQ09O TkVDVCAgMHgwMA0KPiArDQo+ICsvLyBVU0IgSGVhZGVyIGZ1bmN0aW9uYWwgRGVzY3JpcHRvcg0K PiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UOCAgICAgRnVuY3Rpb25MZW5ndGg7DQo+ICsg IFVJTlQ4ICAgICBEZXNjcmlwdG9yVHlwZTsNCj4gKyAgVUlOVDggICAgIERlc2NyaXB0b3JTdWJ0 eXBlOw0KPiArICBVSU5UMTYgICAgQmNkQ2RjOw0KPiArfSBVU0JfSEVBREVSX0ZVTl9ERVNDUklQ VE9SOw0KPiArDQo+ICsvLyBVU0IgVW5pb24gRnVuY3Rpb25hbCBEZXNjcmlwdG9yDQo+ICt0eXBl ZGVmIHN0cnVjdCB7DQo+ICsgIFVJTlQ4ICAgIEZ1bmN0aW9uTGVuZ3RoOw0KPiArICBVSU5UOCAg ICBEZXNjcmlwdG9yVHlwZTsNCj4gKyAgVUlOVDggICAgRGVzY3JpcHRvclN1YnR5cGU7DQo+ICsg IFVJTlQ4ICAgIE1hc3RlckludGVyZmFjZTsNCj4gKyAgVUlOVDggICAgU2xhdmVJbnRlcmZhY2U7 DQo+ICt9IFVTQl9VTklPTl9GVU5fREVTQ1JJUFRPUjsNCj4gKw0KPiArLy8gVVNCIEV0aGVybmV0 IEZ1bmN0aW9uYWwgRGVzY3JpcHRvcg0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UOCAg ICAgRnVuY3Rpb25MZW5ndGg7DQo+ICsgIFVJTlQ4ICAgICBEZXNjcmlwdG9yVHlwZTsNCj4gKyAg VUlOVDggICAgIERlc2NyaXB0b3JTdWJ0eXBlOw0KPiArICBVSU5UOCAgICAgTWFjQWRkcmVzczsN Cj4gKyAgVUlOVDMyICAgIEV0aGVybmV0U3RhdGlzdGljczsNCj4gKyAgVUlOVDE2ICAgIE1heFNl Z21lbnRTaXplOw0KPiArICBVSU5UMTYgICAgTnVtYmVyTWNGaWx0ZXJzOw0KPiArICBVSU5UOCAg ICAgTnVtYmVyUG93ZXJGaWx0ZXJzOw0KPiArfSBVU0JfRVRIRVJORVRfRlVOX0RFU0NSSVBUT1I7 DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVDMyICAgIFVzQml0UmF0ZTsNCj4g KyAgVUlOVDMyICAgIERzQml0UmF0ZTsNCj4gK30gVVNCX0NPTk5FQ1RfU1BFRURfQ0hBTkdFOw0K PiArDQo+ICsvLyBSZXF1ZXN0IFR5cGUgQ29kZXMgZm9yIFVTQiBFdGhlcm5ldA0KPiArI2RlZmlu ZSBVU0JfRVRIRVJORVRfR0VUX1JFUV9UWVBFICAweEExDQo+ICsjZGVmaW5lIFVTQl9FVEhFUk5F VF9TRVRfUkVRX1RZUEUgIDB4MjENCj4gKw0KPiArLy8gQ2xhc3MtU3BlY2lmaWMgUmVxdWVzdCBD b2RlcyBmb3IgRXRoZXJuZXQgc3ViY2xhc3MNCj4gKy8vIFVTQiBFQ00gMS4yIHNwZWNpZmljYXRp b24sIFNlY3Rpb24gNi4yDQo+ICsjZGVmaW5lIFNFVF9FVEhfTVVMVElDQVNUX0ZJTFRFUlNfUkVR ICAgICAgICAgICAgICAgIDB4NDANCj4gKyNkZWZpbmUgU0VUX0VUSF9QT1dFUl9NQU5BR0VNRU5U X1BBVFRFUk5fRklMVEVSX1JFUSAgMHg0MQ0KPiArI2RlZmluZSBHRVRfRVRIX1BPV0VSX01BTkFH RU1FTlRfUEFUVEVSTl9GSUxURVJfUkVRICAweDQyDQo+ICsjZGVmaW5lIFNFVF9FVEhfUEFDS0VU X0ZJTFRFUl9SRVEgICAgICAgICAgICAgICAgICAgIDB4NDMNCj4gKyNkZWZpbmUgR0VUX0VUSF9T VEFUSVNUSUNfUkVRICAgICAgICAgICAgICAgICAgICAgICAgMHg0NA0KPiArDQo+ICsvLyBVU0Ig RUNNIGNvbW1hbmQgcmVxdWVzdCBsZW5ndGgNCj4gKyNkZWZpbmUgVVNCX0VUSF9QT1dFUl9GSUxU RVJfTEVOR1RIICAgMiAvLyBTZWN0aW9uIDYuMi4zDQo+ICsjZGVmaW5lIFVTQl9FVEhfUEFDS0VU X0ZJTFRFUl9MRU5HVEggIDAgLy8gU2VjdGlvbiA2LjIuNA0KPiArI2RlZmluZSBVU0JfRVRIX1NU QVRJU1RJQyAgICAgICAgICAgICA0IC8vIFNlY3Rpb24gNi4yLjUNCj4gKw0KPiArLy8gVVNCIEV0 aGVybmV0IFBhY2tldCBGaWx0ZXIgQml0bWFwDQo+ICsvLyBVU0IgRUNNIDEuMiBzcGVjaWZpY2F0 aW9uLCBTZWN0aW9uIDYuMi40DQo+ICsjZGVmaW5lIFVTQl9FVEhfUEFDS0VUX1RZUEVfUFJPTUlT Q1VPVVMgICAgQklUMA0KPiArI2RlZmluZSBVU0JfRVRIX1BBQ0tFVF9UWVBFX0FMTF9NVUxUSUNB U1QgIEJJVDENCj4gKyNkZWZpbmUgVVNCX0VUSF9QQUNLRVRfVFlQRV9ESVJFQ1RFRCAgICAgICBC SVQyDQo+ICsjZGVmaW5lIFVTQl9FVEhfUEFDS0VUX1RZUEVfQlJPQURDQVNUICAgICAgQklUMw0K PiArI2RlZmluZSBVU0JfRVRIX1BBQ0tFVF9UWVBFX01VTFRJQ0FTVCAgICAgIEJJVDQNCj4gKw0K PiArLy8gVVNCIEV0aGVybmV0IFN0YXRpc3RpY3MgRmVhdHVyZSBTZWxlY3RvciBDb2Rlcw0KPiAr Ly8gVVNCIEVDTSAxLjIgc3BlY2lmaWNhdGlvbiwgU2VjdGlvbiA2LjIuNQ0KPiArI2RlZmluZSBV U0JfRVRIX1hNSVRfT0sgICAgICAgICAgICAgICAgIDB4MDENCj4gKyNkZWZpbmUgVVNCX0VUSF9S Q1ZfT0sgICAgICAgICAgICAgICAgICAweDAyDQo+ICsjZGVmaW5lIFVTQl9FVEhfWE1JVF9FUlJP UiAgICAgICAgICAgICAgMHgwMw0KPiArI2RlZmluZSBVU0JfRVRIX1JDVl9FUlJPUiAgICAgICAg ICAgICAgIDB4MDQNCj4gKyNkZWZpbmUgVVNCX0VUSF9SQ1ZfTk9fQlVGRkVSICAgICAgICAgICAw eDA1DQo+ICsjZGVmaW5lIFVTQl9FVEhfRElSRUNURURfQllURVNfWE1JVCAgICAgMHgwNg0KPiAr I2RlZmluZSBVU0JfRVRIX0RJUkVDVEVEX0ZSQU1FU19YTUlUICAgIDB4MDcNCj4gKyNkZWZpbmUg VVNCX0VUSF9NVUxUSUNBU1RfQllURVNfWE1JVCAgICAweDA4DQo+ICsjZGVmaW5lIFVTQl9FVEhf TVVMVElDQVNUX0ZSQU1FU19YTUlUICAgMHgwOQ0KPiArI2RlZmluZSBVU0JfRVRIX0JST0FEQ0FT VF9CWVRFU19YTUlUICAgIDB4MEENCj4gKyNkZWZpbmUgVVNCX0VUSF9CUk9BRENBU1RfRlJBTUVT X1hNSVQgICAweDBCDQo+ICsjZGVmaW5lIFVTQl9FVEhfRElSRUNURURfQllURVNfUkNWICAgICAg MHgwQw0KPiArI2RlZmluZSBVU0JfRVRIX0RJUkVDVEVEX0ZSQU1FU19SQ1YgICAgIDB4MEQNCj4g KyNkZWZpbmUgVVNCX0VUSF9NVUxUSUNBU1RfQllURVNfUkNWICAgICAweDBFDQo+ICsjZGVmaW5l IFVTQl9FVEhfTVVMVElDQVNUX0ZSQU1FU19SQ1YgICAgMHgwRg0KPiArI2RlZmluZSBVU0JfRVRI X0JST0FEQ0FTVF9CWVRFU19SQ1YgICAgIDB4MTANCj4gKyNkZWZpbmUgVVNCX0VUSF9CUk9BRENB U1RfRlJBTUVTX1JDViAgICAweDExDQo+ICsjZGVmaW5lIFVTQl9FVEhfUkNWX0NSQ19FUlJPUiAg ICAgICAgICAgMHgxMg0KPiArI2RlZmluZSBVU0JfRVRIX1RSQU5TTUlUX1FVRVVFX0xFTkdUSCAg IDB4MTMNCj4gKyNkZWZpbmUgVVNCX0VUSF9SQ1ZfRVJST1JfQUxJR05NRU5UICAgICAweDE0DQo+ ICsjZGVmaW5lIFVTQl9FVEhfWE1JVF9PTkVfQ09MTElTSU9OICAgICAgMHgxNQ0KPiArI2RlZmlu ZSBVU0JfRVRIX1hNSVRfTU9SRV9DT0xMSVNJT05TICAgIDB4MTYNCj4gKyNkZWZpbmUgVVNCX0VU SF9YTUlUX0RFRkVSUkVEICAgICAgICAgICAweDE3DQo+ICsjZGVmaW5lIFVTQl9FVEhfWE1JVF9N QVhfQ09MTElTSU9OUyAgICAgMHgxOA0KPiArI2RlZmluZSBVU0JfRVRIX1JDVl9PVkVSUlVOICAg ICAgICAgICAgIDB4MTkNCj4gKyNkZWZpbmUgVVNCX0VUSF9YTUlUX1VOREVSUlVOICAgICAgICAg ICAweDFBDQo+ICsjZGVmaW5lIFVTQl9FVEhfWE1JVF9IRUFSVEJFQVRfRkFJTFVSRSAgMHgxQg0K PiArI2RlZmluZSBVU0JfRVRIX1hNSVRfVElNRVNfQ1JTX0xPU1QgICAgIDB4MUMNCj4gKyNkZWZp bmUgVVNCX0VUSF9YTUlUX0xBVEVfQ09MTElTSU9OUyAgICAweDFEDQo+ICsNCj4gKy8vIE5JQyBJ bmZvcm1hdGlvbg0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UMzIgICAgICAgICAgICAg ICAgICAgICAgICAgU2lnbmF0dXJlOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wg ICAgKlVzYkV0aDsNCj4gKyAgVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICAgIEludGVycnVw T3BGbGFnOw0KPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgICAgTWFwcGVkQWRkcjsN Cj4gKyAgUFhFX01BQ19BRERSICAgICAgICAgICAgICAgICAgIE1jYXN0TGlzdFtNQVhfTUNBU1Rf QUREUkVTU19DTlRdOw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgTWNhc3RD b3VudDsNCj4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICAgIE1lZGlhSGVhZGVyW01B WF9YTUlUX0JVRkZFUlNdOw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgVHhC dWZmZXJDb3VudDsNCj4gKyAgVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlOw0K PiArICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgQ2FuVHJhbnNtaXQ7DQo+ICsgIFVJ TlQxNiAgICAgICAgICAgICAgICAgICAgICAgICBSZWNlaXZlU3RhdHVzOw0KPiArICBVSU5UOCAg ICAgICAgICAgICAgICAgICAgICAgICAgUnhGaWx0ZXI7DQo+ICsgIFVJTlQzMiAgICAgICAgICAg ICAgICAgICAgICAgICBSeEZyYW1lOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAg ICAgVHhGcmFtZTsNCj4gKyAgVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHdvcmtD b25uZWN0Ow0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FibGVEZXRlY3Q7 DQo+ICsgIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgICBNYXhTZWdtZW50U2l6ZTsNCj4g KyAgRUZJX01BQ19BRERSRVNTICAgICAgICAgICAgICAgIE1hY0FkZHI7DQo+ICsgIFBYRV9DUEJf U1RBUlRfMzEgICAgICAgICAgICAgICBQeGVTdGFydDsNCj4gKyAgUFhFX0NQQl9JTklUSUFMSVpF ICAgICAgICAgICAgIFB4ZUluaXQ7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAg ICBQZXJtTm9kZUFkZHJlc3NbUFhFX01BQ19MRU5HVEhdOw0KPiArICBVSU5UOCAgICAgICAgICAg ICAgICAgICAgICAgICAgQ3VycmVudE5vZGVBZGRyZXNzW1BYRV9NQUNfTEVOR1RIXTsNCj4gKyAg VUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgIEJyb2FkY2FzdE5vZGVBZGRyZXNzW1BYRV9N QUNfTEVOR1RIXTsNCj4gKyAgRUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCAgICAgICAgIFJlcXVlc3Q7 DQo+ICsgIEVGSV9FVkVOVCAgICAgICAgICAgICAgICAgICAgICBSYXRlTGltaXRlcjsNCj4gKyAg VUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgIFJhdGVMaW1pdGluZ0NyZWRpdDsNCj4gKyAg VUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgIFJhdGVMaW1pdGluZ0NyZWRpdENvdW50Ow0K PiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgUmF0ZUxpbWl0aW5nUG9sbFRpbWVy Ow0KPiArICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgUmF0ZUxpbWl0aW5nRW5hYmxl Ow0KPiArfSBOSUNfREFUQTsNCj4gKw0KPiArI2RlZmluZSBOSUNfREFUQV9TSUdOQVRVUkUgIFNJ R05BVFVSRV8zMignbicsICdpJywgJ2MnLCAnZCcpDQo+ICsjZGVmaW5lIE5JQ19EQVRBX0ZST01f RURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MKGEpICBDUiAoYSwNCj4gTklDX0RBVEEsIFVzYkV0 aCwgTklDX0RBVEFfU0lHTkFUVVJFKQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIGlz IHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBvcGVyYXRpb25hbCBzdGF0ZSBvZiB0aGUgVU5ESS4NCj4g Kw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlw dG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29y ayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NF U1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJl dHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0 aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVl c3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJ RF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkDQo+IHZhbHVl Lg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiAr KiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRI RVJORVRfVU5ESV9HRVRfU1RBVEUpKA0KPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4gKyAg SU4gIE5JQ19EQVRBICAgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29t bWFuZCBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgVU5ESSBvcGVyYXRpb25hbCBzdGF0ZSBmcm9tIHN0 b3BwZWQgdG8NCj4gc3RhcnRlZC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRl ciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMg IEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiAr DQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVk IHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1l b3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVW SUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4N Cj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJz IGhhcyBhbiBpbnZhbGlkDQo+IHZhbHVlLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAg ICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9TVEFSVCkoDQo+ICsgIElOICBQWEVf Q0RCICAgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICAgKk5pYw0KPiArICApOw0KPiArDQo+ ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gY2hhbmdlIHRoZSBVTkRJIG9wZXJh dGlvbmFsIHN0YXRlIGZyb20gc3RhcnRlZCB0bw0KPiBzdG9wcGVkLg0KPiArDQo+ICsgIEBwYXJh bVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBj b250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAg VGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1F T1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0K PiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVl IHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBP bmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQNCj4gdmFsdWUuDQo+ICsgIEByZXR2 YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5cGVk ZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1NU T1ApKA0KPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAgICpO aWMNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIHJl dHJpZXZlIGluaXRpYWxpemF0aW9uIGluZm9ybWF0aW9uIHRoYXQgaXMNCj4gKyAgbmVlZGVkIGJ5 IGRyaXZlcnMgYW5kIGFwcGxpY2F0aW9ucyB0byBpbml0aWFsaXplZCBVTkRJLg0KPiArDQo+ICsg IEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxv Y2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVy ZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAg ICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVG SV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1 ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWls ZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFN RVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQNCj4gdmFsdWUuDQo+ICsg IEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4g K3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9V TkRJX0dFVF9JTklUX0lORk8pKA0KPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4gKyAgSU4g IE5JQ19EQVRBICAgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFu ZCBpcyB1c2VkIHRvIHJldHJpZXZlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYWJvdXQNCj4g KyAgdGhlIE5JQyBiZWluZyBjb250cm9sbGVkIGJ5IHRoZSBVTkRJLg0KPiArDQo+ICsgIEBwYXJh bVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBj b250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAg VGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1F T1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0K PiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVl IHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBP bmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQNCj4gdmFsdWUuDQo+ICsgIEByZXR2 YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5cGVk ZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX0dF VF9DT05GSUdfSU5GTykoDQo+ICsgIElOICBQWEVfQ0RCICAgICAqQ2RiLA0KPiArICBJTiAgTklD X0RBVEEgICAgKk5pYw0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIHJl c2V0cyB0aGUgbmV0d29yayBhZGFwdGVyIGFuZCBpbml0aWFsaXplcyBVTkRJIHVzaW5nDQo+ICsg IHRoZSBwYXJhbWV0ZXJzIHN1cHBsaWVkIGluIHRoZSBDUEIuDQo+ICsNCj4gKyAgQHBhcmFtW2lu XSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAg QHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRy b2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUg cmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQg ICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsg IEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8g YSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBv ZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZA0KPiB2YWx1ZS4NCj4gKyAgQHJldHZhbCBF RklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0K PiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX1VORElfSU5JVElB TElaRSkoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmlj DQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQgcmVzZXRzIHRoZSBuZXR3 b3JrIGFkYXB0ZXIgYW5kIHJlaW5pdGlhbGl6ZXMgdGhlIFVOREkNCj4gKyAgd2l0aCB0aGUgc2Ft ZSBwYXJhbWV0ZXJzIHByb3ZpZGVkIGluIHRoZSBJbml0aWFsaXplIGNvbW1hbmQuDQo+ICsNCj4g KyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBi bG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50 ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwg RUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJl cXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZh aWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFS QU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZA0KPiB2YWx1ZS4NCj4g KyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0K PiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVU X1VORElfUkVTRVQpKA0KPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19E QVRBICAgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoZSBTaHV0ZG93biBjb21t YW5kIHJlc2V0cyB0aGUgbmV0d29yayBhZGFwdGVyIGFuZCBsZWF2ZXMgaXQgaW4gYQ0KPiArICBz YWZlIHN0YXRlIGZvciBhbm90aGVyIGRyaXZlciB0byBpbml0aWFsaXplLg0KPiArDQo+ICsgIEBw YXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2su DQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFj ZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAg ICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9U SU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0 Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQg ZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRF UiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQNCj4gdmFsdWUuDQo+ICsgIEBy ZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5 cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJ X1NIVVRET1dOKSgNCj4gKyAgSU4gIFBYRV9DREIgICAgICpDZGIsDQo+ICsgIElOICBOSUNfREFU QSAgICAqTmljDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGUgSW50ZXJydXB0IEVuYWJs ZXMgY29tbWFuZCBjYW4gYmUgdXNlZCB0byByZWFkIGFuZC9vciBjaGFuZ2UNCj4gKyAgdGhlIGN1 cnJlbnQgZXh0ZXJuYWwgaW50ZXJydXB0IGVuYWJsZSBzZXR0aW5ncy4NCj4gKw0KPiArICBAcGFy YW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0K PiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2Ug Y29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAg IFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElN RU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4N Cj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1 ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIg T25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkDQo+IHZhbHVlLg0KPiArICBAcmV0 dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBl ZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9J TlRFUlJVUFRfRU5BQkxFKSgNCj4gKyAgSU4gIFBYRV9DREIgICAgICpDZGIsDQo+ICsgIElOICBO SUNfREFUQSAgICAqTmljDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQg aXMgdXNlZCB0byByZWFkIGFuZCBjaGFuZ2UgcmVjZWl2ZSBmaWx0ZXJzIGFuZCwNCj4gKyAgaWYg c3VwcG9ydGVkLCByZWFkIGFuZCBjaGFuZ2UgdGhlIG11bHRpY2FzdCBNQUMgYWRkcmVzcyBmaWx0 ZXIgbGlzdC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29t bWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0 byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2 YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxs eS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVk IGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAg ICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZh bCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZh bGlkDQo+IHZhbHVlLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3Vw cG9ydGVkLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpF REtJSV9VU0JfRVRIRVJORVRfVU5ESV9SRUNFSVZFX0ZJTFRFUikoDQo+ICsgIElOICBQWEVfQ0RC ICAgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICAgKk5pYw0KPiArICApOw0KPiArDQo+ICsv KioNCj4gKyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gZ2V0IGN1cnJlbnQgc3RhdGlvbiBhbmQg YnJvYWRjYXN0IE1BQyBhZGRyZXNzZXMNCj4gKyAgYW5kLCBpZiBzdXBwb3J0ZWQsIHRvIGNoYW5n ZSB0aGUgY3VycmVudCBzdGF0aW9uIE1BQyBhZGRyZXNzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0g IENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBw YXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9s bGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJl cXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAg ICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBA cmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEg ZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2Yg dGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQNCj4gdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJ X1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4g K0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1NUQVRJT05f QUREUkVTUykoDQo+ICsgIElOICBQWEVfQ0RCICAgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEg ICAgKk5pYw0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIGlzIHVzZWQg dG8gcmVhZCBhbmQgY2xlYXIgdGhlIE5JQyB0cmFmZmljIHN0YXRpc3RpY3MuDQo+ICsNCj4gKyAg QHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9j ay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJm YWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg ICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJ X1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVl c3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxl ZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1F VEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZA0KPiB2YWx1ZS4NCj4gKyAg QHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiAr dHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX1VO RElfU1RBVElTVElDUykoDQo+ICsgIElOICBQWEVfQ0RCICAgICAqQ2RiLA0KPiArICBJTiAgTklD X0RBVEEgICAgKk5pYw0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgVHJhbnNsYXRlIGEgbXVs dGljYXN0IElQdjQgb3IgSVB2NiBhZGRyZXNzIHRvIGEgbXVsdGljYXN0IE1BQyBhZGRyZXNzLg0K PiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2Ny aXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3 b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBA cmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5n IHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVx dWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZB TElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQNCj4gdmFs dWUuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9F VEhFUk5FVF9VTkRJX01DQVNUX0lQVE9NQUMpKA0KPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwN Cj4gKyAgSU4gIE5JQ19EQVRBICAgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRo aXMgY29tbWFuZCBpcyB1c2VkIHRvIHJlYWQgYW5kIHdyaXRlIChpZiBzdXBwb3J0ZWQgYnkgTklD IEgvVykNCj4gKyAgbm9udm9sYXRpbGUgc3RvcmFnZSBvbiB0aGUgTklDLg0KPiArDQo+ICsgIEBw YXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2su DQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFj ZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAg ICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9U SU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0 Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQg ZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRF UiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQNCj4gdmFsdWUuDQo+ICsgIEBy ZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5 cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJ X05WX0RBVEEpKA0KPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRB ICAgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCByZXR1cm5z IHRoZSBjdXJyZW50IGludGVycnVwdCBzdGF0dXMgYW5kL29yIHRoZQ0KPiArICB0cmFuc21pdHRl ZCBidWZmZXIgYWRkcmVzc2VzIGFuZCB0aGUgY3VycmVudCBtZWRpYSBzdGF0dXMuDQo+ICsNCj4g KyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBi bG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50 ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwg RUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJl cXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZh aWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFS QU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZA0KPiB2YWx1ZS4NCj4g KyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0K PiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVU X1VORElfR0VUX1NUQVRVUykoDQo+ICsgIElOICBQWEVfQ0RCICAgICAqQ2RiLA0KPiArICBJTiAg TklDX0RBVEEgICAgKk5pYw0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5k IGlzIHVzZWQgdG8gZmlsbCB0aGUgbWVkaWEgaGVhZGVyKHMpIGluIHRyYW5zbWl0IHBhY2tldChz KS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBk ZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUg TmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJ X1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4g KyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1 dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhl IHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklf SU5WQUxJRF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkDQo+ IHZhbHVlLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVk Lg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9V U0JfRVRIRVJORVRfVU5ESV9GSUxMX0hFQURFUikoDQo+ICsgIElOICBQWEVfQ0RCICAgICAqQ2Ri LA0KPiArICBJTiAgTklDX0RBVEEgICAgKk5pYw0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAg VGhlIFRyYW5zbWl0IGNvbW1hbmQgaXMgdXNlZCB0byBwbGFjZSBhIHBhY2tldCBpbnRvIHRoZSB0 cmFuc21pdCBxdWV1ZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0 aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9p bnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsg IEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nl c3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9j Y3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VS Uk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAg QHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBh biBpbnZhbGlkDQo+IHZhbHVlLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBO b3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJ QVBJICpFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9UUkFOU01JVCkoDQo+ICsgIElOICBQWEVfQ0RC ICAgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICAgKk5pYw0KPiArICApOw0KPiArDQo+ICsv KioNCj4gKyAgV2hlbiB0aGUgbmV0d29yayBhZGFwdGVyIGhhcyByZWNlaXZlZCBhIGZyYW1lLCB0 aGlzIGNvbW1hbmQgaXMgdXNlZA0KPiArICB0byBjb3B5IHRoZSBmcmFtZSBpbnRvIGRyaXZlci9h cHBsaWNhdGlvbiBzdG9yYWdlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVy IHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAg QSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsN Cj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQg c3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVv dXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJ Q0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0K PiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMg aGFzIGFuIGludmFsaWQNCj4gdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAg ICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4g KyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1JFQ0VJVkUpKA0KPiArICBJTiAgUFhF X0NEQiAgICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAgICpOaWMNCj4gKyAgKTsNCj4gKw0K PiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCByZXNldHMgdGhlIG5ldHdvcmsgYWRhcHRlciBhbmQg aW5pdGlhbGl6ZXMgVU5ESSB1c2luZw0KPiArICB0aGUgcGFyYW1ldGVycyBzdXBwbGllZCBpbiB0 aGUgQ1BCLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICAgICBDZGIgIEEgcG9pbnRlciB0byB0aGUg Y29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW4sIG91dF0gTmljICBBIHBv aW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiAr ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNj ZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBv Y2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9F UlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsg IEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMg YW4gaW52YWxpZA0KPiB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAg Tm90IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVG SUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX0lOSVRJQUxJWkUpKA0KPiArICBJTiAgICAgIFBYRV9D REIgICAqQ2RiLA0KPiArICBJTiBPVVQgIE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4g Ky8qKg0KPiArICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byByZWFkIGFuZCBjbGVhciB0aGUgTklD IHRyYWZmaWMgc3RhdGlzdGljcy4NCj4gKw0KPiArICBAcGFyYW1baW5dICBOaWMgICAgIEEgcG9p bnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArICBAcGFy YW1baW5dICBEYkFkZHIgIERhdGEgQmxvY2sgQWRkcmVzcy4NCj4gKyAgQHBhcmFtW2luXSAgRGJT aXplICBEYXRhIEJsb2NrIFNpemUuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAg ICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVG SV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1 ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWls ZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFN RVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQNCj4gdmFsdWUuDQo+ICsg IEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4g K3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9T VEFUSVNUSUNTKSgNCj4gKyAgSU4gIE5JQ19EQVRBICAgICpOaWMsDQo+ICsgIElOICBVSU5UNjQg ICAgICBEYkFkZHIsDQo+ICsgIElOICBVSU5UMTYgICAgICBEYlNpemUNCj4gKyAgKTsNCj4gKw0K PiArLyoqDQo+ICsgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBtYW5hZ2UgYSBVU0IgZGV2aWNl IHdpdGggdGhlIGJ1bGsgdHJhbnNmZXIgcGlwZS4gVGhlDQo+IGVuZHBvaW50IGlzIEJ1bGsgaW4u DQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgIENkYiAgICAgICAgICAgQSBwb2ludGVyIHRvIHRo ZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gICAgICBUaGlzICAg ICAgICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MDQo+IGlu c3RhbmNlLg0KPiArICBAcGFyYW1baW4sIG91dF0gUGFja2V0ICAgICAgICBBIHBvaW50ZXIgdG8g dGhlIGJ1ZmZlciBvZiBkYXRhIHRoYXQgd2lsbCBiZQ0KPiB0cmFuc21pdHRlZCB0byBVU0INCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIG9yIHJlY2VpdmVkIGZyb20g VVNCIGRldmljZS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdIFBhY2tldExlbmd0aCAgQSBwb2ludGVy IHRvIHRoZSBQYWNrZXRMZW5ndGguDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAg ICAgICAgVGhlIGJ1bGsgdHJhbnNmZXIgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLg0K PiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgdHJhbnNmZXIgZmFpbGVkLiBU aGUgdHJhbnNmZXIgc3RhdHVzIGlzDQo+IHJldHVybmVkIGluIHN0YXR1cy4NCj4gKyAgQHJldHZh bCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9yIG1vcmUgcGFyYW1ldGVycyBhcmUgaW52YWxp ZC4NCj4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgVGhlIHJlcXVlc3QgY291bGQg bm90IGJlIHN1Ym1pdHRlZCBkdWUNCj4gdG8gYSBsYWNrIG9mIHJlc291cmNlcy4NCj4gKyAgQHJl dHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgVGhlIGNvbnRyb2wgdHJhbnNmZXIgZmFpbHMgZHVl IHRvIHRpbWVvdXQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklB UEkgKkVES0lJX1VTQl9FVEhFUk5FVF9SRUNFSVZFKSgNCj4gKyAgSU4gICAgIFBYRV9DREIgICAg ICAgICAgICAgICAqQ2RiLA0KPiArICBJTiAgICAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09M ICpUaGlzLA0KPiArICBJTiBPVVQgVk9JRCAgICAgICAgICAgICAgICAgICpQYWNrZXQsDQo+ICsg IElOIE9VVCBVSU5UTiAgICAgICAgICAgICAgICAgKlBhY2tldExlbmd0aA0KPiArICApOw0KPiAr DQo+ICsvKioNCj4gKyAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIG1hbmFnZSBhIFVTQiBkZXZp Y2Ugd2l0aCB0aGUgYnVsayB0cmFuc2ZlciBwaXBlLiBUaGUNCj4gZW5kcG9pbnQgaXMgQnVsayBv dXQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgIENkYiAgICAgICAgICAgQSBwb2ludGVyIHRv IHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gICAgICBUaGlz ICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MDQo+ IGluc3RhbmNlLg0KPiArICBAcGFyYW1baW4sIG91dF0gUGFja2V0ICAgICAgICBBIHBvaW50ZXIg dG8gdGhlIGJ1ZmZlciBvZiBkYXRhIHRoYXQgd2lsbCBiZQ0KPiB0cmFuc21pdHRlZCB0byBVU0IN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIG9yIHJlY2VpdmVkIGZy b20gVVNCIGRldmljZS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdIFBhY2tldExlbmd0aCAgQSBwb2lu dGVyIHRvIHRoZSBQYWNrZXRMZW5ndGguDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICAgICAgVGhlIGJ1bGsgdHJhbnNmZXIgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVk Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgdHJhbnNmZXIgZmFpbGVk LiBUaGUgdHJhbnNmZXIgc3RhdHVzIGlzDQo+IHJldHVybmVkIGluIHN0YXR1cy4NCj4gKyAgQHJl dHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9yIG1vcmUgcGFyYW1ldGVycyBhcmUgaW52 YWxpZC4NCj4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgVGhlIHJlcXVlc3QgY291 bGQgbm90IGJlIHN1Ym1pdHRlZCBkdWUNCj4gdG8gYSBsYWNrIG9mIHJlc291cmNlcy4NCj4gKyAg QHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgVGhlIGNvbnRyb2wgdHJhbnNmZXIgZmFpbHMg ZHVlIHRvIHRpbWVvdXQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhF RklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9UUkFOU01JVCkoDQo+ICsgIElOICAgICBQWEVfQ0RC ICAgICAgICAgICAgICAgKkNkYiwNCj4gKyAgSU4gICAgIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9U T0NPTCAqVGhpcywNCj4gKyAgSU4gT1VUIFZPSUQgICAgICAgICAgICAgICAgICAqUGFja2V0LA0K PiArICBJTiBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICpQYWNrZXRMZW5ndGgNCj4gKyAgKTsN Cj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBtYW5hZ2UgYSBVU0Ig ZGV2aWNlIHdpdGggYW4gaW50ZXJydXB0IHRyYW5zZmVyIHBpcGUuDQo+ICsNCj4gKyAgQHBhcmFt W2luXSAgVGhpcyAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFREtJSV9VU0JfRVRIRVJO RVRfUFJPVE9DT0wNCj4gaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIElzTmV3VHJhbnNmZXIg ICAgIElmIFRSVUUsIGEgbmV3IHRyYW5zZmVyIHdpbGwgYmUgc3VibWl0dGVkIHRvDQo+IFVTQiBj b250cm9sbGVyLiBJZg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwg dGhlIGludGVycnVwdCB0cmFuc2ZlciBpcyBkZWxldGVkIGZyb20gdGhlIGRldmljZSdzDQo+IGlu dGVycnVwdA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2ZlciBxdWV1 ZS4NCj4gKyAgQHBhcmFtW2luXSAgUG9sbGluZ0ludGVydmFsICAgSW5kaWNhdGVzIHRoZSBwZXJp b2RpYyByYXRlLCBpbiBtaWxsaXNlY29uZHMsIHRoYXQNCj4gdGhlIHRyYW5zZmVyIGlzIHRvIGJl DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVkLlRoaXMgcGFyYW1l dGVyIGlzIHJlcXVpcmVkIHdoZW4gSXNOZXdUcmFuc2Zlcg0KPiBpcyBUUlVFLiBUaGUNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDEgdG8g MjU1LCBvdGhlcndpc2UNCj4gRUZJX0lOVkFMSURfUEFSQU1FVEVSIGlzIHJldHVybmVkLg0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdW5pdHMgYXJlIGluIG1pbGxpc2Vj b25kcy4NCj4gKyAgQHBhcmFtW2luXSAgUmVxdWVzdCAgICAgICAgICAgQSBwb2ludGVyIHRvIHRo ZSBFRklfVVNCX0RFVklDRV9SRVFVRVNUIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgICAgICAgVGhlIGFzeW5jaHJvbm91cyBVU0IgdHJhbnNmZXIgcmVxdWVzdCB0cmFu c2Zlcg0KPiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuDQo+ICsgIEByZXR2YWwgRUZJ X0RFVklDRV9FUlJPUiAgICAgIFRoZSBhc3luY2hyb25vdXMgVVNCIHRyYW5zZmVyIHJlcXVlc3QN Cj4gZmFpbGVkLg0KPiArDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhF RklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9JTlRFUlJVUFQpKA0KPiArICBJTiBFREtJSV9VU0Jf RVRIRVJORVRfUFJPVE9DT0wgICAqVGhpcywNCj4gKyAgSU4gQk9PTEVBTiAgICAgICAgICAgICAg ICAgSXNOZXdUcmFuc2ZlciwNCj4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICAgUG9sbGlu Z0ludGVydmFsLA0KPiArICBJTiBFRklfVVNCX0RFVklDRV9SRVFVRVNUICAqUmVxdWVzdA0KPiAr ICApOw0KPiArDQo+ICsvKioNCj4gKyAgUmV0cmlldmVzIHRoZSBVU0IgRXRoZXJuZXQgTWFjIEFk ZHJlc3MuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICBBIHBvaW50ZXIgdG8g dGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTA0KPiBpbnN0YW5jZS4NCj4gKyAgQHBhcmFt W291dF0gTWFjQWRkcmVzcyAgICBBIHBvaW50ZXIgdG8gdGhlIGNhbGxlciBhbGxvY2F0ZWQgVVNC IEV0aGVybmV0DQo+IE1hYyBBZGRyZXNzLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgICAgICAgIFRoZSBVU0IgSGVhZGVyIEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMNCj4gcmV0 cmlldmVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIg VXNiSGVhZGVyRnVuRGVzY3JpcHRvciBpcyBOVUxMLg0KPiArICBAcmV0dmFsIEVGSV9OT1RfRk9V TkQgICAgICAgICBUaGUgVVNCIEhlYWRlciBGdW5jdGlvbmFsIGRlc2NyaXB0b3Igd2FzDQo+IG5v dCBmb3VuZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAq RURLSUlfVVNCX0dFVF9FVEhfTUFDX0FERFJFU1MpKA0KPiArICBJTiAgRURLSUlfVVNCX0VUSEVS TkVUX1BST1RPQ09MICpUaGlzLA0KPiArICBPVVQgRUZJX01BQ19BRERSRVNTICAgICAgICpNYWNB ZGRyZXNzDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBSZXRyaWV2ZXMgdGhlIFVTQiBFdGhl cm5ldCBCdWxrIHRyYW5zZmVyIGRhdGEgc2l6ZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlz ICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MDQo+ IGluc3RhbmNlLg0KPiArICBAcGFyYW1bb3V0XSBCdWxrU2l6ZSAgICAgIEEgcG9pbnRlciB0byB0 aGUgQnVsayB0cmFuc2ZlciBkYXRhIHNpemUuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VT UyAgICAgICAgICAgVGhlIFVTQiBIZWFkZXIgRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcw0KPiBy ZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRF UiBVc2JIZWFkZXJGdW5EZXNjcmlwdG9yIGlzIE5VTEwuDQo+ICsgIEByZXR2YWwgRUZJX05PVF9G T1VORCAgICAgICAgIFRoZSBVU0IgSGVhZGVyIEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMNCj4g bm90IGZvdW5kLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJ ICpFREtJSV9VU0JfRVRIX01BWF9CVUxLX1NJWkUpKA0KPiArICBJTiAgRURLSUlfVVNCX0VUSEVS TkVUX1BST1RPQ09MICpUaGlzLA0KPiArICBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICpCdWxr U2l6ZQ0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgUmV0cmlldmVzIHRoZSBVU0IgSGVhZGVy IGZ1bmN0aW9uYWwgRGVzY3JpcHRvci4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAg ICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUNCj4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RP Q09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1bb3V0XSBVc2JIZWFkZXJGdW5EZXNjcmlwdG9yIEEg cG9pbnRlciB0byB0aGUgY2FsbGVyIGFsbG9jYXRlZCBVU0INCj4gSGVhZGVyIEZ1bmN0aW9uYWwg RGVzY3JpcHRvci4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUg VVNCIEhlYWRlciBGdW5jdGlvbmFsIGRlc2NyaXB0b3Igd2FzDQo+IHJldHJpZXZlZCBzdWNjZXNz ZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIFVzYkhlYWRlckZ1bkRl c2NyaXB0b3IgaXMgTlVMTC4NCj4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgVGhl IFVTQiBIZWFkZXIgRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcw0KPiBub3QgZm91bmQuDQo+ICsq Ki8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9IRUFE RVJfRlVOQ1RJT05BTF9ERVNDUklQVE9SKSgNCj4gKyAgSU4gRURLSUlfVVNCX0VUSEVSTkVUX1BS T1RPQ09MICAgICAgKlRoaXMsDQo+ICsgIE9VVCBVU0JfSEVBREVSX0ZVTl9ERVNDUklQVE9SICpV c2JIZWFkZXJGdW5EZXNjcmlwdG9yDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBSZXRyaWV2 ZXMgdGhlIFVTQiBVbmlvbiBmdW5jdGlvbmFsIERlc2NyaXB0b3IuDQo+ICsNCj4gKyAgQHBhcmFt W2luXSAgVGhpcyAgICAgICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlDQo+IEVES0lJX1VT Ql9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW291dF0gVXNiVW5pb25G dW5EZXNjcmlwdG9yICBBIHBvaW50ZXIgdG8gdGhlIGNhbGxlciBhbGxvY2F0ZWQgVVNCDQo+IFVu aW9uIEZ1bmN0aW9uYWwgRGVzY3JpcHRvci4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNT ICAgICAgICAgICBUaGUgVVNCIFVuaW9uIEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMNCj4gcmV0 cmlldmVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIg VXNiVW5pb25GdW5EZXNjcmlwdG9yIGlzIE5VTEwuDQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VO RCAgICAgICAgIFRoZSBVU0IgVW5pb24gRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcyBub3QNCj4g Zm91bmQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVE S0lJX1VTQl9VTklPTl9GVU5DVElPTkFMX0RFU0NSSVBUT1IpKA0KPiArICBJTiBFREtJSV9VU0Jf RVRIRVJORVRfUFJPVE9DT0wgICAgICpUaGlzLA0KPiArICBPVVQgVVNCX1VOSU9OX0ZVTl9ERVND UklQVE9SICpVc2JVbmlvbkZ1bkRlc2NyaXB0b3INCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsg IFJldHJpZXZlcyB0aGUgVVNCIEV0aGVybmV0IGZ1bmN0aW9uYWwgRGVzY3JpcHRvci4NCj4gKw0K PiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUN Cj4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1bb3V0 XSBVc2JFdGhGdW5EZXNjcmlwdG9yICAgIEEgcG9pbnRlciB0byB0aGUgY2FsbGVyIGFsbG9jYXRl ZCBVU0INCj4gRXRoZXJuZXQgRnVuY3Rpb25hbCBEZXNjcmlwdG9yLg0KPiArDQo+ICsgIEByZXR2 YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBVU0IgRXRoZXJuZXQgRnVuY3Rpb25hbCBkZXNj cmlwdG9yIHdhcw0KPiByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9J TlZBTElEX1BBUkFNRVRFUiBVc2JFdGhGdW5EZXNjcmlwdG9yIGlzIE5VTEwuDQo+ICsgIEByZXR2 YWwgRUZJX05PVF9GT1VORCAgICAgICAgIFRoZSBVU0IgRXRoZXJuZXQgRnVuY3Rpb25hbCBkZXNj cmlwdG9yIHdhcw0KPiBub3QgZm91bmQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFU VVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9GVU5DVElPTkFMX0RFU0NSSVBUT1Ip KA0KPiArICBJTiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICAgICAgICpUaGlzLA0KPiAr ICBPVVQgVVNCX0VUSEVSTkVUX0ZVTl9ERVNDUklQVE9SICpVc2JFdGhGdW5EZXNjcmlwdG9yDQo+ ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIHJlcXVlc3Qgc2V0cyB0aGUgRXRoZXJuZXQg ZGV2aWNlIG11bHRpY2FzdCBmaWx0ZXJzIGFzIHNwZWNpZmllZCBpbiB0aGUNCj4gKyAgc2VxdWVu dGlhbCBsaXN0IG9mIDQ4IGJpdCBFdGhlcm5ldCBtdWx0aWNhc3QgYWRkcmVzc2VzLg0KPiArDQo+ ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZQ0K PiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0g IFZhbHVlICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIGZpbHRlcnMuDQo+ICsgIEBwYXJhbVtp bl0gIE1jYXN0QWRkciAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSB2YWx1ZSBvZiB0aGUg bXVsdGljYXN0DQo+IGFkZHJlc3Nlcy4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwg RUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJl cXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZh aWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFS QU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZA0KPiB2YWx1ZS4NCj4g KyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0K PiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVU X1NFVF9FVEhfTVVMVElDQVNUX0ZJTFRFUlMpKA0KPiArICBJTiBFREtJSV9VU0JfRVRIRVJORVRf UFJPVE9DT0wgKlRoaXMsDQo+ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAgICBWYWx1ZSwNCj4g KyAgSU4gVk9JRCAgICAgICAgICAgICAgICAgICpNY2FzdEFkZHINCj4gKyAgKTsNCj4gKw0KPiAr LyoqDQo+ICsgIFRoaXMgcmVxdWVzdCBzZXRzIHVwIHRoZSBzcGVjaWZpZWQgRXRoZXJuZXQgcG93 ZXIgbWFuYWdlbWVudCBwYXR0ZXJuIGZpbHRlcg0KPiBhcw0KPiArICBkZXNjcmliZWQgaW4gdGhl IGRhdGEgc3RydWN0dXJlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAg ICAgICAgQSBwb2ludGVyIHRvIHRoZQ0KPiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgaW5z dGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIFZhbHVlICAgICAgICAgICAgICAgICAgTnVtYmVyIG9m IGZpbHRlcnMuDQo+ICsgIEBwYXJhbVtpbl0gIExlbmd0aCAgICAgICAgICAgICAgICAgU2l6ZSBv ZiB0aGUgcG93ZXIgbWFuYWdlbWVudCBwYXR0ZXJuIGZpbHRlcg0KPiBkYXRhLg0KPiArICBAcGFy YW1baW5dICBQYXR0ZXJuRmlsdGVyICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgcG93ZXIgbWFu YWdlbWVudCBwYXR0ZXJuDQo+IGZpbHRlciBzdHJ1Y3R1cmUuDQo+ICsNCj4gKyAgQHJldHZhbCBF RklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0K PiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhl Y3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBU aGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVG SV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQN Cj4gdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0 ZWQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkNCj4gKkVE S0lJX1VTQl9FVEhFUk5FVF9TRVRfRVRIX1BPV0VSX01BTkFHRV9QQVRURVJOX0ZJTFRFUikoDQo+ ICsgIElOIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAqVGhpcywNCj4gKyAgSU4gVUlOVDE2 ICAgICAgICAgICAgICAgIFZhbHVlLA0KPiArICBJTiBVSU5UMTYgICAgICAgICAgICAgICAgTGVu Z3RoLA0KPiArICBJTiBWT0lEICAgICAgICAgICAgICAgICAgKlBhdHRlcm5GaWx0ZXINCj4gKyAg KTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgcmVxdWVzdCByZXRyaWV2ZXMgdGhlIHN0YXR1cyBv ZiB0aGUgc3BlY2lmaWVkIEV0aGVybmV0IHBvd2VyDQo+IG1hbmFnZW1lbnQNCj4gKyAgcGF0dGVy biBmaWx0ZXIgZnJvbSB0aGUgZGV2aWNlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAg ICAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZQ0KPiBFREtJSV9VU0JfRVRIRVJORVRfUFJP VE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIFZhbHVlICAgICAgICAgICAgICAgICAg VGhlIGZpbHRlciBudW1iZXIuDQo+ICsgIEBwYXJhbVtvdXRdIFBhdHRlcm5BY3RpdmUgICAgICAg ICAgQSBwb2ludGVyIHRvIHRoZSBwYXR0ZXJuIGFjdGl2ZSBib29sZWFuLg0KPiArDQo+ICsgIEBy ZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3Nm dWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3Vy cmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9S ICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJl dHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBp bnZhbGlkDQo+IHZhbHVlLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qg c3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJ DQo+ICpFREtJSV9VU0JfRVRIRVJORVRfR0VUX0VUSF9QT1dFUl9NQU5BR0VfUEFUVEVSTl9GSUxU RVIpKA0KPiArICBJTiAgIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAqVGhpcywNCj4gKyAg SU4gICBVSU5UMTYgICAgICAgICAgICAgICAgVmFsdWUsDQo+ICsgIE9VVCAgQk9PTEVBTiAgICAg ICAgICAgICAgICpQYXR0ZXJuQWN0aXZlDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGlz IHJlcXVlc3QgaXMgdXNlZCB0byBjb25maWd1cmUgZGV2aWNlIEV0aGVybmV0IHBhY2tldCBmaWx0 ZXIgc2V0dGluZ3MuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgQSBw b2ludGVyIHRvIHRoZSBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wNCj4gaW5zdGFuY2UuDQo+ ICsgIEBwYXJhbVtpbl0gIFZhbHVlICAgICAgICAgICAgIFBhY2tldCBGaWx0ZXIgQml0bWFwLg0K PiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1 dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0 aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklf REVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJv ci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0 ZXJzIGhhcyBhbiBpbnZhbGlkDQo+IHZhbHVlLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRF RCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVT DQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfU0VUX0VUSF9QQUNLRVRfRklMVEVSKSgN Cj4gKyAgSU4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICpUaGlzLA0KPiArICBJTiBVSU5U MTYgICAgICAgICAgICAgICAgVmFsdWUNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMg cmVxdWVzdCBpcyB1c2VkIHRvIHJldHJpZXZlIGEgc3RhdGlzdGljIGJhc2VkIG9uIHRoZSBmZWF0 dXJlIHNlbGVjdG9yLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAg ICBBIHBvaW50ZXIgdG8gdGhlDQo+IEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5j ZS4NCj4gKyAgQHBhcmFtW2luXSAgRmVhdHVyZVNlbGVjdG9yICAgICAgIFZhbHVlIG9mIHRoZSBm ZWF0dXJlIHNlbGVjdG9yLg0KPiArICBAcGFyYW1bb3V0XSBTdGF0aXN0aWMgICAgICAgICAgICAg QSBwb2ludGVyIHRvIHRoZSAzMiBiaXQgdW5zaWduZWQgaW50ZWdlci4NCj4gKw0KPiArICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVs bHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJl ZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAg ICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2 YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52 YWxpZA0KPiB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1 cHBvcnRlZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAq RURLSUlfVVNCX0VUSEVSTkVUX0dFVF9FVEhfU1RBVElTVElDKSgNCj4gKyAgSU4gIEVES0lJX1VT Ql9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOICBVSU5UMTYgICAgICAgICAgICAg ICAgIEZlYXR1cmVTZWxlY3RvciwNCj4gKyAgT1VUIFZPSUQgICAgICAgICAgICAgICAgICAgKlN0 YXRpc3RpYw0KPiArICApOw0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIEVES0lJX1VT Ql9FVEhFUk5FVF9VTkRJX0dFVF9TVEFURSAgICAgICAgICAgVXNiRXRoVW5kaUdldFN0YXRlOw0K PiArICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9TVEFSVCAgICAgICAgICAgICAgIFVzYkV0aFVu ZGlTdGFydDsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1VORElfU1RPUCAgICAgICAgICAgICAg ICBVc2JFdGhVbmRpU3RvcDsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1VORElfR0VUX0lOSVRf SU5GTyAgICAgICBVc2JFdGhVbmRpR2V0SW5pdEluZm87DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5F VF9VTkRJX0dFVF9DT05GSUdfSU5GTw0KPiBVc2JFdGhVbmRpR2V0Q29uZmlnSW5mbzsNCj4gKyAg RURLSUlfVVNCX0VUSEVSTkVUX1VORElfSU5JVElBTElaRSAgICAgICAgICBVc2JFdGhVbmRpSW5p dGlhbGl6ZTsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1VORElfUkVTRVQgICAgICAgICAgICAg ICBVc2JFdGhVbmRpUmVzZXQ7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1NIVVRET1dO ICAgICAgICAgICAgVXNiRXRoVW5kaVNodXRkb3duOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRf VU5ESV9JTlRFUlJVUFRfRU5BQkxFDQo+IFVzYkV0aFVuZGlJbnRlcnJ1cHRFbmFibGU7DQo+ICsg IEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1JFQ0VJVkVfRklMVEVSICAgICAgVXNiRXRoVW5kaVJl Y2VpdmVGaWx0ZXI7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1NUQVRJT05fQUREUkVT Uw0KPiBVc2JFdGhVbmRpU3RhdGlvbkFkZHJlc3M7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9V TkRJX1NUQVRJU1RJQ1MgICAgICAgICAgVXNiRXRoVW5kaVN0YXRpc3RpY3M7DQo+ICsgIEVES0lJ X1VTQl9FVEhFUk5FVF9VTkRJX01DQVNUX0lQVE9NQUMNCj4gVXNiRXRoVW5kaU1jYXN0SXAyTWFj Ow0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9OVl9EQVRBICAgICAgICAgICAgIFVzYkV0 aFVuZGlOdkRhdGE7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX0dFVF9TVEFUVVMgICAg ICAgICAgVXNiRXRoVW5kaUdldFN0YXR1czsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1VORElf RklMTF9IRUFERVIgICAgICAgICBVc2JFdGhVbmRpRmlsbEhlYWRlcjsNCj4gKyAgRURLSUlfVVNC X0VUSEVSTkVUX1VORElfVFJBTlNNSVQgICAgICAgICAgICBVc2JFdGhVbmRpVHJhbnNtaXQ7DQo+ ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1JFQ0VJVkUgICAgICAgICAgICAgVXNiRXRoVW5k aVJlY2VpdmU7DQo+ICt9IEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJOw0KPiArDQo+ICsvLyBUaGUg RURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIHByb3ZpZGVzIHNvbWUgYmFzaWMgVVNCIEV0aGVy bmV0DQo+IGRldmljZSByZWxldmFudA0KPiArLy8gZGVzY3JpcHRvciBhbmQgc3BlY2lmaWMgcmVx dWVzdHMuDQo+ICtzdHJ1Y3QgX0VES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCB7DQo+ICsgIEVE S0lJX1VTQl9FVEhFUk5FVF9VTkRJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBV c2JFdGhVbmRpOw0KPiArICAvLyBmb3IgY2FsbGluZyB0aGUgVU5ESSBjaGlsZCBmdW5jdGlvbnMN Cj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX0lOSVRJQUxJWkUgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFVzYkV0aEluaXRpYWxpemU7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9TVEFUSVNU SUNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JFdGhTdGF0aXN0aWNzOw0KPiArICBF REtJSV9VU0JfRVRIRVJORVRfUkVDRUlWRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VXNiRXRoUmVjZWl2ZTsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1RSQU5TTUlUICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFVzYkV0aFRyYW5zbWl0Ow0KPiArICBFREtJSV9VU0JfRVRI RVJORVRfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNiRXRoSW50ZXJy dXB0Ow0KPiArICBFREtJSV9VU0JfR0VUX0VUSF9NQUNfQUREUkVTUyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVXNiRXRoTWFjQWRkcmVzczsNCj4gKyAgRURLSUlfVVNCX0VUSF9NQVhfQlVM S19TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzYkV0aE1heEJ1bGtTaXplOw0K PiArICBFREtJSV9VU0JfSEVBREVSX0ZVTkNUSU9OQUxfREVTQ1JJUFRPUg0KPiBVc2JIZWFkZXJG dW5EZXNjcmlwdG9yOw0KPiArICBFREtJSV9VU0JfVU5JT05fRlVOQ1RJT05BTF9ERVNDUklQVE9S DQo+IFVzYlVuaW9uRnVuRGVzY3JpcHRvcjsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX0ZVTkNU SU9OQUxfREVTQ1JJUFRPUg0KPiBVc2JFdGhGdW5EZXNjcmlwdG9yOw0KPiArICBFREtJSV9VU0Jf RVRIRVJORVRfU0VUX0VUSF9NVUxUSUNBU1RfRklMVEVSUw0KPiBTZXRVc2JFdGhNY2FzdEZpbHRl cjsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1NFVF9FVEhfUE9XRVJfTUFOQUdFX1BBVFRFUk5f RklMVEVSDQo+IFNldFVzYkV0aFBvd2VyUGF0dGVybkZpbHRlcjsNCj4gKyAgRURLSUlfVVNCX0VU SEVSTkVUX0dFVF9FVEhfUE9XRVJfTUFOQUdFX1BBVFRFUk5fRklMVEVSDQo+IEdldFVzYkV0aFBv d2VyUGF0dGVybkZpbHRlcjsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1NFVF9FVEhfUEFDS0VU X0ZJTFRFUg0KPiBTZXRVc2JFdGhQYWNrZXRGaWx0ZXI7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5F VF9HRVRfRVRIX1NUQVRJU1RJQyAgICAgICAgICAgICAgICAgICAgICBHZXRVc2JFdGhTdGF0aXN0 aWM7DQo+ICt9Ow0KPiArDQo+ICtleHRlcm4gRUZJX0dVSUQgIGdFZGtJSVVzYkV0aFByb3RvY29s R3VpZDsNCj4gKw0KPiArI2VuZGlmDQo+IGRpZmYgLS1naXQgYS9NZGVNb2R1bGVQa2cvTWRlTW9k dWxlUGtnLmRlYw0KPiBiL01kZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cuZGVjDQo+IGluZGV4IDNl YjRhNzliZjcuLjg2MGVlYzBmM2MgMTAwNjQ0DQo+IC0tLSBhL01kZU1vZHVsZVBrZy9NZGVNb2R1 bGVQa2cuZGVjDQo+ICsrKyBiL01kZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cuZGVjDQo+IEBAIC02 ODUsNiArNjg1LDkgQEANCj4gICAgIyMgSW5jbHVkZS9Qcm90b2NvbC9WYXJpYWJsZVBvbGljeS5o DQo+ICAgIGdFZGtpaVZhcmlhYmxlUG9saWN5UHJvdG9jb2xHdWlkID0geyAweDgxRDE2NzVDLCAw eDg2RjYsIDB4NDhERiwgeyAweEJELA0KPiAweDk1LCAweDlBLCAweDZFLCAweDRGLCAweDA5LCAw eDI1LCAweEMzIH0gfQ0KPiANCj4gKyAgIyMgSW5jbHVkZS9Qcm90b2NvbC9Vc2JFdGhlcm5ldFBy b3RvY29sLmgNCj4gKyAgZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkID0geyAweDhkODk2OWNjLCAw eGZlYjAsIDB4NDMwMywgeyAweGIyLCAweDFhLCAweDFmLA0KPiAweDExLCAweDZmLCAweDM4LCAw eDU2LCAweDQzIH0gfQ0KPiArDQo+ICBbUGNkc0ZlYXR1cmVGbGFnXQ0KPiAgICAjIyBJbmRpY2F0 ZXMgaWYgdGhlIHBsYXRmb3JtIGNhbiBzdXBwb3J0IHVwZGF0ZSBjYXBzdWxlIGFjcm9zcyBhIHN5 c3RlbQ0KPiByZXNldC48QlI+PEJSPg0KPiAgICAjICAgVFJVRSAgLSBTdXBwb3J0cyB1cGRhdGUg Y2Fwc3VsZSBhY3Jvc3MgYSBzeXN0ZW0gcmVzZXQuPEJSPg0KPiBAQCAtMjEwOCw2ICsyMTExLDIx IEBADQo+ICAgICMgQFByb21wdCBUaGUgc2hhcmVkIGJpdCBtYXNrIHdoZW4gSW50ZWwgVGR4IGlz IGVuYWJsZWQuDQo+IA0KPiBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkVGR4U2hh cmVkQml0TWFza3wweDB8VUlOVDY0fDB4MTAwDQo+IDAwMDI1DQo+IA0KPiArICAjIyBJbmRpY2F0 ZXMgaWYgdGhlIFVzYiBOZXR3b3JrIHJhdGUgbGltaXRpbmcgU3VwcG9ydGVkLjxCUj48QlI+DQo+ ICsgICMgICBUUlVFICAtIFVzYiBOZXR3b3JrIHJhdGUgbGltaXRpbmcgaXMgc3VwcG9ydGVkLjxC Uj4NCj4gKyAgIyAgIEZBTFNFIC0gVXNiIE5ldHdvcmsgcmF0ZSBsaW1pdGluZyBpcyBub3Qgc3Vw cG9ydGVkLjxCUj4NCj4gKyAgIyBAUHJvbXB0IEVuYWJsZSBVc2IgTmV0d29yayByYXRlIGxpbWl0 aW5nIHN1cHBvcnQuDQo+ICsNCj4gZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZEVu YWJsZVVzYk5ldHdvcmtSYXRlTGltaXRpbmd8RkFMU0UNCj4gfEJPT0xFQU58MHgxMDAwMDAyNg0K PiArDQo+ICsgICMjIFRoZSByYXRlIGxpbWl0aW5nIENyZWRpdCB2YWx1ZSBpcyBjaGVjayBpbiBy YXRlIGxpbWl0ZXIgZXZlbnQuDQo+ICsgICMgIEl0IGlzIHRvIGNvbnRyb2wgdGhlIFJhdGVMaW1p dGluZ0NyZWRpdENvdW50IG1heCB2YWx1ZS4NCj4gKyAgIyBAUHJvbXB0IFRoZSB2YWx1ZSBpcyB1 c2UgZm9yIFVzYiBOZXR3b3JrIHJhdGUgbGltaXRpbmcgc3VwcG9ydGVkLg0KPiArDQo+IGdFZmlN ZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RVc2JOZXR3b3JrUmF0ZUxpbWl0aW5nQ3JlZGl0 fDEwfFVJTg0KPiBUMzJ8MHgxMDAwMDAyNw0KPiArDQo+ICsgICMjIFRoZSB2YWx1ZSBvZiByYXRl IGxpbWl0ZXIgZXZlbnQgZm9yIHRpbWVvdXQgY2hlY2suIERlZmF1bHQgdmFsdWUgaXMNCj4gMTAw KHVuaXQgMW1zKS4NCj4gKyAgIyBAUHJvbXB0IFRoZSB2YWx1ZSBpcyB1c2UgZm9yIFVzYiBOZXR3 b3JrIHJhdGUgbGltaXRpbmcgc3VwcG9ydGVkLg0KPiArDQo+IGdFZmlNZGVNb2R1bGVQa2dUb2tl blNwYWNlR3VpZC5QY2RVc2JOZXR3b3JrUmF0ZUxpbWl0aW5nRmFjdG9yfDEwMHxVSQ0KPiBOVDMy fDB4MTAwMDAwMjgNCj4gKw0KPiAgW1BjZHNQYXRjaGFibGVJbk1vZHVsZV0NCj4gICAgIyMgU3Bl Y2lmeSBtZW1vcnkgc2l6ZSB3aXRoIHBhZ2UgbnVtYmVyIGZvciBQRUkgY29kZSB3aGVuDQo+ICAg ICMgIExvYWRpbmcgTW9kdWxlIGF0IEZpeGVkIEFkZHJlc3MgZmVhdHVyZSBpcyBlbmFibGVkLg0K PiBkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy5kc2MNCj4gYi9NZGVNb2R1 bGVQa2cvTWRlTW9kdWxlUGtnLmRzYw0KPiBpbmRleCAxMDE0NTk4ZjMxLi4wYWFkZDQwNWYzIDEw MDY0NA0KPiAtLS0gYS9NZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRzYw0KPiArKysgYi9NZGVN b2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRzYw0KPiBAQCAtMjc0LDYgKzI3NCwxMCBAQA0KPiAgICBN ZGVNb2R1bGVQa2cvQnVzL1VzYi9Vc2JNYXNzU3RvcmFnZUR4ZS9Vc2JNYXNzU3RvcmFnZUR4ZS5p bmYNCj4gDQo+IE1kZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk1vdXNlQWJzb2x1dGVQb2ludGVyRHhl L1VzYk1vdXNlQWJzb2x1dGVQb2kNCj4gbnRlckR4ZS5pbmYNCj4gICAgTWRlTW9kdWxlUGtnL0J1 cy9Vc2IvVXNiTW91c2VEeGUvVXNiTW91c2VEeGUuaW5mDQo+ICsNCj4gTWRlTW9kdWxlUGtnL0J1 cy9Vc2IvVXNiTmV0d29yay9OZXR3b3JrQ29tbW9uL05ldHdvcmtDb21tb24uaW5mDQo+ICsgIE1k ZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsvVXNiQ2RjRWNtL1VzYkNkY0VjbS5pbmYNCj4g KyAgTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9Vc2JDZGNOY20vVXNiQ2RjTmNtLmlu Zg0KPiArICBNZGVNb2R1bGVQa2cvQnVzL1VzYi9Vc2JOZXR3b3JrL1VzYlJuZGlzL1VzYlJuZGlz LmluZg0KPiAgICBNZGVNb2R1bGVQa2cvQnVzL0kyYy9JMmNEeGUvSTJjQnVzRHhlLmluZg0KPiAg ICBNZGVNb2R1bGVQa2cvQnVzL0kyYy9JMmNEeGUvSTJjSG9zdER4ZS5pbmYNCj4gICAgTWRlTW9k dWxlUGtnL0J1cy9JMmMvSTJjRHhlL0kyY0R4ZS5pbmYNCj4gLS0NCj4gMi4zNS4xLndpbmRvd3Mu Mg0KPiAtVGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiB0aGlzIG1lc3NhZ2UgbWF5IGJlIGNv bmZpZGVudGlhbCBhbmQNCj4gcHJvcHJpZXRhcnkgdG8gQW1lcmljYW4gTWVnYXRyZW5kcyAoQU1J KS4gVGhpcyBjb21tdW5pY2F0aW9uIGlzIGludGVuZGVkIHRvDQo+IGJlIHJlYWQgb25seSBieSB0 aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdG8gd2hvbSBpdCBpcyBhZGRyZXNzZWQgb3IgYnkgdGhl aXINCj4gZGVzaWduZWUuIElmIHRoZSByZWFkZXIgb2YgdGhpcyBtZXNzYWdlIGlzIG5vdCB0aGUg aW50ZW5kZWQgcmVjaXBpZW50LCB5b3UgYXJlIG9uDQo+IG5vdGljZSB0aGF0IGFueSBkaXN0cmli dXRpb24gb2YgdGhpcyBtZXNzYWdlLCBpbiBhbnkgZm9ybSwgaXMgc3RyaWN0bHkgcHJvaGliaXRl ZC4NCj4gUGxlYXNlIHByb21wdGx5IG5vdGlmeSB0aGUgc2VuZGVyIGJ5IHJlcGx5IGUtbWFpbCBv ciBieSB0ZWxlcGhvbmUgYXQgNzcwLTI0Ni0NCj4gODYwMCwgYW5kIHRoZW4gZGVsZXRlIG9yIGRl c3Ryb3kgYWxsIGNvcGllcyBvZiB0aGUgdHJhbnNtaXNzaW9uLg0K