From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (NAM11-BN8-obe.outbound.protection.outlook.com [40.107.236.40]) by mx.groups.io with SMTP id smtpd.web11.6710.1681189701112356773 for ; Mon, 10 Apr 2023 22:08:21 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@amd.com header.s=selector1 header.b=CimDJP55; spf=permerror, err=parse error for token &{10 18 %{i}._ip.%{h}._ehlo.%{d}._spf.vali.email}: invalid domain name (domain: amd.com, ip: 40.107.236.40, mailfrom: abner.chang@amd.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=e/rkHj+abUjf4csq87SM7AXcFfSb/CCLfKY6ZOdwi3oSYch13TVl4BBmnZQ6K8J0PdiWaWqH27zLcCUT0uEM4AMM2nchFQmCpMc1FDx67y8cripfvQe1LTmV0YhrV+ZAC+g68MLjdaSpW5EEkF3P3UY4SfLHI4FTDpkjOrMB7uXRqc8YOFTS824ccq4B0pf8+t8hxY7Og4PBV5cSyHrhVVcsficUKpjkJzYVrTyKKly62GVpKyME+7qP20kLRBHGJSqJCcRipF62snZPFEZF6IYZPKAbVJkHJ+U0PeKRSK0VYSW9coO0th+qN7WRVTOh3bBlasNb9hxmgVwg38RcVA== 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=ualQqyfA4XVWJ5mOrjIWOXsLi2mF1JWy7AzXRdVr/ZM=; b=VDmlf8L/TpWYXc77K7SykQTMjIJ43wds2MnE0FAwc6kBR+dFBrIdN1loDWIuBvI1KI50nQgo/Q1VfezptO23p4mpOAo4XpF9ILGujZBQxd8/7EvGuI5LLbd/jKpejWQSSXLY6BTUFajZG+UdZmdLFmwaq/wzvdRwJpoh9MU2VRjSe6sPLcO8AGzKQFuhmevbXuSvj57jAPJgjcXr49ho2W4YTiR24q3gN0vXtV9SdgdTR6P8WIBfzx68F4iQGGncYoAtMjAKZjP/khUfpnAxgkWXibYl4yzUVDUPHhKLshSmC6WQqrNTTcYAlAXZtKSdfuvIr++T/M58TBbH0al0Uw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ualQqyfA4XVWJ5mOrjIWOXsLi2mF1JWy7AzXRdVr/ZM=; b=CimDJP550UB1RUZjFbA6z3CFq+i7Vifb6A6oskaPim6MPZM+GgYrk5Bl3tPYaObDRsVRNsl/VzA+Eedzusd0KO8tXs4VW4V+EiHaYh17IXVdO60c9lnDPQNTBbEbhP3Hvc3XFYz0VqPNLDI/n2G1f9c4KqQZ4NBU0uQHu3wrFPo= Received: from MN2PR12MB3966.namprd12.prod.outlook.com (2603:10b6:208:165::18) by CYYPR12MB8856.namprd12.prod.outlook.com (2603:10b6:930:c0::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6277.38; Tue, 11 Apr 2023 05:08:12 +0000 Received: from MN2PR12MB3966.namprd12.prod.outlook.com ([fe80::30f:bd83:40dd:8f1]) by MN2PR12MB3966.namprd12.prod.outlook.com ([fe80::30f:bd83:40dd:8f1%3]) with mapi id 15.20.6277.036; Tue, 11 Apr 2023 05:08:12 +0000 From: "Chang, Abner" To: "devel@edk2.groups.io" , "richardho@ami.com" , Rebecca Cran CC: Andrew Fish , Leif Lindholm , Michael D Kinney , Michael Kubacki , Zhiguang Liu , Liming Gao , Tinh Nguyen , =?utf-8?B?VG9ueSBMbyAo576F6YeR5p2+KQ==?= Subject: Re: [edk2-devel] [PATCH v7 1/3] UsbNetworkPkg/UsbRndis: Add USB RNDIS devices support Thread-Topic: [edk2-devel] [PATCH v7 1/3] UsbNetworkPkg/UsbRndis: Add USB RNDIS devices support Thread-Index: AQHZaUPu7eInPejPwEWzz4ffhuMEY68kuR2AgACrbVCAAC9FAA== Date: Tue, 11 Apr 2023 05:08:12 +0000 Message-ID: References: <20230407112638.405-1-richardho@ami.com> In-Reply-To: Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Enabled=true; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_SetDate=2023-04-11T05:08:07Z; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Method=Standard; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Name=General; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_SiteId=3dd8961f-e488-4e60-8e11-a82d994e183d; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_ActionId=56e48951-eac5-4e37-a64a-926209ccaa48; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_ContentBits=1 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MN2PR12MB3966:EE_|CYYPR12MB8856:EE_ x-ms-office365-filtering-correlation-id: 328d8a3e-f548-470a-0075-08db3a4abfda x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: gNBLRohBt1mjuWJU/s7ZHMnc6w6fL/77gWt13Q3HzJj/XFpD7ajD/F3f9EYkV5QE5bSHgUVAe3Vo8s94eaZe0+oSC1YfVd3K/ulRN/LfidNrxI2/oxzUeiX8xXnt8l4hD9DcUHI8naKXNg35Y/mOyGx9wqua6rhUaggP+mAVSbLpc7UOXz9sa9Iee8Tg/XmRmwD3UaT18lTUOR3ANhT1TKjkkXQJdUx/CzL4FFk8F6dacDrCpWjJiAeJE/4pLi6WF20Idy8YdCB9pLqWxt19U83em9a5x+/APnr6xxMwVuznyxJG7znVLLcICqTiP/WLvnU2odGO1kzVoKn3eZUFlcECIa/Tw6/Dz3Wok44Rbt9CpiqrRNKj/IC+Uv9WFC1a65Xa0DQ+eJDp8iHZaWZ95MC7YcHmhG+0fjut5KWAnRT9/m9IRlHf8nhZKfNtIyCviEdtYmaY1wzKNYS+/VobRRF7xLfc7S560lHISV1OY+TSLiLW4EwJstmWcJB8iZF/jSsPltc6foERD5Bq0LRn8sXYxTu4F761Tkqe216q9fBQAfqtGI2rBeDhXZPgfW3nDiQCVOzVe3q5X7Sm43TZjhQre6YI6HnWvRh7eS9rmFHjzUCZgA65pux1E43zpIG0 x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR12MB3966.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(376002)(396003)(366004)(346002)(136003)(39860400002)(451199021)(66446008)(76116006)(66476007)(66946007)(4326008)(66556008)(64756008)(966005)(478600001)(19627235002)(5660300002)(38100700002)(54906003)(110136005)(122000001)(41300700001)(316002)(7416002)(8676002)(8936002)(55016003)(83380400001)(53546011)(186003)(9686003)(71200400001)(7696005)(45080400002)(6506007)(26005)(86362001)(40140700001)(33656002)(30864003)(2906002)(38070700005)(52536014)(66899021)(559001)(579004)(44824005);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?ZHNYRTZ6TmpXWFdzakNINEJVTThUT2ZCUVE1MThkSHZSUi9uNmlBTCtlRlJm?= =?utf-8?B?amdMZXhUWGxuSUZudzBObmxxVXY2Wnp6RXhSU3U0N0NTQWNWZitWQTNuZkFQ?= =?utf-8?B?eUQ2YUp3bVpvZG85d2ZLY1VEZFloa3NZM0lSeExtcWx3TFFrTHI5dXczdmFE?= =?utf-8?B?TGZvSjlrQzZjWW53TnVJVlYvOXVFL0ZiK3N3TjUxWm1qZlJ4SzI4RUhBNER2?= =?utf-8?B?THB0eHhDaWt0ZVRlMFR2Z1pyYlplM21KWUppQm9hVzFxeEczSXVZWit4SFVN?= =?utf-8?B?QzhYV1Q2dDhQTXp3SjRTaG9Qd1VXWDR4QmYwYTIrQ2RGZmxNclQ4UXR3Mk45?= =?utf-8?B?TmlZVnVyLzAyYUVCYklKeCtOUnhXUWZjblFjcnlqc010TG9UOWwxT2xOM09y?= =?utf-8?B?RGpBYkxEeTl1K2ovenR1NDhzOHR2MDVWaDA3K0oySGIrZlpLNE9teDFsRlhE?= =?utf-8?B?aHd6R2lzejdGbndlNkJ3U0I2alZnVVlRTmRaNVJGMFFoL3E4bkF0U0IySUdR?= =?utf-8?B?YWR6TUU1UVJVcWdkUlhRKzJoOTFqb2FSWHdJQ1VrL0JEelU3cG5MamYxdkll?= =?utf-8?B?dUFyTGIrdDhYYUJ6ZnhDT3BMaDRmNmp0cmlIanpGcEZ5QmFiaW9lQ0FNeUZr?= =?utf-8?B?ck50NFZMYm0xZkV5eW1halFSVlNuU3NmVFJPSWxzWldKbmJFU0VPN3NGd2lM?= =?utf-8?B?KzRhVmo2RkhJN29zVDA0TkY3Zjc1Q29xdlJPR1lWTWtxK1JBQ0pRWHBlRUxh?= =?utf-8?B?UnNaUVhFVjdGQm5HYmFmSm9tbnM5aG4wRWF5OEw3RkhvRjVFUUV6RDFSNnNN?= =?utf-8?B?L2RPZzF3Y1VrTVU1dWlLV05kMmtMVmZtN05HOVRFZHYxdDR0b2VTM0EvbnBX?= =?utf-8?B?K2NrcnVwMytvQU1GcEk5TGphWHYzM0R6Rk9QUGMwbjg1ZUR4Z1RVeVIzNzRI?= =?utf-8?B?UEJwQzBpVVI2QjRIWTZiTnc5cEhIbE1GYkhwbGlxU3kxWGlXL3RFY09ZVVlJ?= =?utf-8?B?YUdtRHVXaXRRWkQ4OXJVSTA5R3lMcGtHQ2M3TkhtNGtkT0ZSZ2hhZlkrS2Ju?= =?utf-8?B?NjFjQnpQTzQ3aGVEV1FrUERWUG13bHZ4Z3BRVFZFczFCMVg3YVhDaW1GUkZU?= =?utf-8?B?QVdLckFkNkRja0dQQk9zOXRhbUtpVUtkZDNGY2wyZlp1eEFDcHg4eEQxTHBh?= =?utf-8?B?MUR2NXZtVXROam5SM0s0ZWJld0tuTDhKZUVyUldSNXB1aFQwR1BaeDI4WWlp?= =?utf-8?B?WUVWeUtZRHY3SzdCQXgrdUxsY2xIbWRxQUJSQVdZcmpCYm1ZbkU2bUF0Z1JN?= =?utf-8?B?TFc4T3RJVzlpNGt2cFBXMHN4OEVLcGhEeDFxVkR4SElsVmJWZkMwVjl5MGg2?= =?utf-8?B?U0pGZ3daRzBaNTB0ZHlhZFdtZDBoQ2FrRGtaY2U3dVM2YjdYNjVRUFhMK1hW?= =?utf-8?B?Q1ByY1owWmJUMDhBYmxKcTNTeHhzVzJVb1VMVFBSb0IyQk1pdnlsR3BCc0lx?= =?utf-8?B?YTQxMWVSU0l0Ky9ZZnk1MnpBL1JOZHpLbWs2TDBKdnRnVmZtU1g4MDRrL3Nm?= =?utf-8?B?TXpUL3EvRnlpTUdrbTdVOUNoaEZOMHR6U0VUR1piQkFtcnlxZ1BQem1FTjh3?= =?utf-8?B?MVhaVkxnY2VwZmxVRFpicDRicGtVUnROd2IzVDhmME1qMkdaRTIzUUZRNmIz?= =?utf-8?B?bFc4NHovYUd6cjNQYVhHNzljdnhkV0RvcHRwM2FSQ1ptVnc4ME0zYWFEU0tl?= =?utf-8?B?RWhpdm5GbDlnQUdhSTVuR2JjWmxFSHV3SGpDc1daU2xZSzQ0amZVOWxhVXhS?= =?utf-8?B?ZTFidTgwTDF4aE50R0tnUVVxNVlxZnNyK2N2NnRXQTVyeE84Mk1QZmYvb3BO?= =?utf-8?B?N2RKYTFwMTBLN1ZhNms0b1hBOUpVNG15cURmNUtWYWxJUDdkSEl6U1VrOGg0?= =?utf-8?B?RDRVWlNhb1Fqd25DRml3VitMTW9YMmM3OUQ3bC9CRDloaDhPNFNFWEUxSkJL?= =?utf-8?B?VWlKMXVsUHpsQ2JHbUlYbGc1Z1RlVWRNaFRHdG9wVXgwQThLVGtDOHhIZHBL?= =?utf-8?B?a0phYzJabk9KTEVTNkllMDZlS2ovYm9ab3BiMkJ2U0p2RlBUVXFJTFMzcTdH?= =?utf-8?Q?H2gI=3D?= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB3966.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 328d8a3e-f548-470a-0075-08db3a4abfda X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Apr 2023 05:08:12.3192 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 5UjRlzoQCSly+xVz5t57ufIGFM2LFfEaAwGrsvnFjI/Fr8MNyw5UxfIzb/ErQlCTwCWF25WsoCgReSDFIbCRVQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CYYPR12MB8856 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 W0FNRCBPZmZpY2lhbCBVc2UgT25seSAtIEdlbmVyYWxdDQoNCkhpIEFsbCwgYXJlIHlvdSBzdXJl IGEgbmV3IHBhY2thZ2UgaXMgcmVhbGx5IG5lZWRlZCBmb3IgdGhlIFVTQiBuZXR3b3JrIGRldmlj ZXMgdGhhdCBzdXBwb3NlIHNob3VsZCBiZSBsb2NhdGVkIHVuZGVyIE1kZU1vZHVsZVBrZy9CdXMv VXNiIGZvciBleGFtcGxlIE1kZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk5ldHdvcms/DQoNCldlIHN0 aWxsIGNhbiBhZGQgYW4gZW50cnkgaW4gTWFpbnRhaW5lcnMudHh0IGZvciBNZGVNb2R1bGVQa2cv QnVzL1VzYi9Vc2JOZXR3b3JrLg0KDQpBYm5lcg0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0t LS0tDQo+IEZyb206IGRldmVsQGVkazIuZ3JvdXBzLmlvIDxkZXZlbEBlZGsyLmdyb3Vwcy5pbz4g T24gQmVoYWxmIE9mDQo+IFJpY2hhcmRIbyBbPz8/XSB2aWEgZ3JvdXBzLmlvDQo+IFNlbnQ6IFR1 ZXNkYXksIEFwcmlsIDExLCAyMDIzIDEwOjIxIEFNDQo+IFRvOiBSZWJlY2NhIENyYW4gPHJlYmVj Y2FAYnNkaW8uY29tPjsgZGV2ZWxAZWRrMi5ncm91cHMuaW8NCj4gQ2M6IEFuZHJldyBGaXNoIDxh ZmlzaEBhcHBsZS5jb20+OyBMZWlmIExpbmRob2xtDQo+IDxxdWljX2xsaW5kaG9sQHF1aWNpbmMu Y29tPjsgTWljaGFlbCBEIEtpbm5leQ0KPiA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+OyBN aWNoYWVsIEt1YmFja2kNCj4gPG1pa3ViYWNrQGxpbnV4Lm1pY3Jvc29mdC5jb20+OyBaaGlndWFu ZyBMaXUgPHpoaWd1YW5nLmxpdUBpbnRlbC5jb20+Ow0KPiBMaW1pbmcgR2FvIDxnYW9saW1pbmdA Ynlvc29mdC5jb20uY24+OyBUaW5oIE5ndXllbg0KPiA8dGluaG5ndXllbkBvcy5hbXBlcmVjb21w dXRpbmcuY29tPjsgVG9ueSBMbyAo576F6YeR5p2+KQ0KPiA8VG9ueUxvQGFtaS5jb20+DQo+IFN1 YmplY3Q6IFJlOiBbZWRrMi1kZXZlbF0gW1BBVENIIHY3IDEvM10gVXNiTmV0d29ya1BrZy9Vc2JS bmRpczogQWRkDQo+IFVTQiBSTkRJUyBkZXZpY2VzIHN1cHBvcnQNCj4gDQo+IENhdXRpb246IFRo aXMgbWVzc2FnZSBvcmlnaW5hdGVkIGZyb20gYW4gRXh0ZXJuYWwgU291cmNlLiBVc2UgcHJvcGVy DQo+IGNhdXRpb24gd2hlbiBvcGVuaW5nIGF0dGFjaG1lbnRzLCBjbGlja2luZyBsaW5rcywgb3Ig cmVzcG9uZGluZy4NCj4gDQo+IA0KPiBIaSBSZWJlY2NhLA0KPiANCj4gTWF5IEkgYWRkIHlvdSB0 byByZXZpZXdlcj8NCj4gDQo+IFRvIGFkZCBiZWxvdy4NCj4gDQo+IFVzYk5ldHdvcmtQa2cNCj4g RjogVXNiTmV0d29ya1BrZy8NCj4gTTogUmljaGFyZCBIbyA8cmljaGFyZGhvQGFtaS5jb20+IFty aWNoYXJkaG9dDQo+IFI6IFJlYmVjY2EgQ3JhbiA8cmViZWNjYUBic2Rpby5jb20+IFtiY3Jhbl0N Cj4gDQo+IA0KPiBUaGFua3MsDQo+IFJpY2hhcmQNCj4gDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2Fn ZS0tLS0tDQo+IEZyb206IFJlYmVjY2EgQ3JhbiA8cmViZWNjYUBic2Rpby5jb20+DQo+IFNlbnQ6 IDIwMjPlubQ05pyIMTHml6UgMTI6MDIgQU0NCj4gVG86IFJpY2hhcmQgSG8gKOS9leaYjuW/oCkg PFJpY2hhcmRIb0BhbWkuY29tPjsgZGV2ZWxAZWRrMi5ncm91cHMuaW8NCj4gQ2M6IEFuZHJldyBG aXNoIDxhZmlzaEBhcHBsZS5jb20+OyBMZWlmIExpbmRob2xtDQo+IDxxdWljX2xsaW5kaG9sQHF1 aWNpbmMuY29tPjsgTWljaGFlbCBEIEtpbm5leQ0KPiA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5j b20+OyBNaWNoYWVsIEt1YmFja2kNCj4gPG1pa3ViYWNrQGxpbnV4Lm1pY3Jvc29mdC5jb20+OyBa aGlndWFuZyBMaXUgPHpoaWd1YW5nLmxpdUBpbnRlbC5jb20+Ow0KPiBMaW1pbmcgR2FvIDxnYW9s aW1pbmdAYnlvc29mdC5jb20uY24+OyBUaW5oIE5ndXllbg0KPiA8dGluaG5ndXllbkBvcy5hbXBl cmVjb21wdXRpbmcuY29tPjsgVG9ueSBMbyAo576F6YeR5p2+KQ0KPiA8VG9ueUxvQGFtaS5jb20+ DQo+IFN1YmplY3Q6IFtFWFRFUk5BTF0gUmU6IFtQQVRDSCB2NyAxLzNdIFVzYk5ldHdvcmtQa2cv VXNiUm5kaXM6IEFkZCBVU0INCj4gUk5ESVMgZGV2aWNlcyBzdXBwb3J0DQo+IA0KPiANCj4gKipD QVVUSU9OOiBUaGUgZS1tYWlsIGJlbG93IGlzIGZyb20gYW4gZXh0ZXJuYWwgc291cmNlLiBQbGVh c2UgZXhlcmNpc2UNCj4gY2F1dGlvbiBiZWZvcmUgb3BlbmluZyBhdHRhY2htZW50cywgY2xpY2tp bmcgbGlua3MsIG9yIGZvbGxvd2luZyBndWlkYW5jZS4qKg0KPiANCj4gWW91IHByb2JhYmx5IGRv bid0IG5lZWQgdG8gYWRkIGl0IGluIF90aGlzXyBwYXRjaCBzZXJpZXMsIGJ1dCBzaW5jZQ0KPiB5 b3UncmUgYWRkaW5nIGEgbmV3IHBhY2thZ2UgeW91J2xsIG5lZWQgdG8gYWRkIGFuIGVudHJ5IHRv IE1haW50YWluZXJzLnR4dC4NCj4gDQo+IA0KPiAtLQ0KPiBSZWJlY2NhIENyYW4NCj4gDQo+IA0K PiBPbiA0LzcvMjMgNToyNyBBTSwgUmljaGFyZCBIbyAo5L2V5piO5b+gKSB3cm90ZToNCj4gPiBU aGlzIGRyaXZlciBwcm92aWRlcyBVRUZJIGRyaXZlciBmb3IgVVNCIFJORElTIGRldmljZQ0KPiA+ DQo+ID4gU2lnbmVkLW9mZi1ieTogUmljaGFyZCBIbyA8cmljaGFyZGhvQGFtaS5jb20+DQo+ID4g Q2M6IEFuZHJldyBGaXNoIDxhZmlzaEBhcHBsZS5jb20+DQo+ID4gQ2M6IExlaWYgTGluZGhvbG0g PHF1aWNfbGxpbmRob2xAcXVpY2luYy5jb20+DQo+ID4gQ2M6IE1pY2hhZWwgRCBLaW5uZXkgPG1p Y2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPg0KPiA+IENjOiBNaWNoYWVsIEt1YmFja2kgPG1pa3Vi YWNrQGxpbnV4Lm1pY3Jvc29mdC5jb20+DQo+ID4gQ2M6IFpoaWd1YW5nIExpdSA8emhpZ3Vhbmcu bGl1QGludGVsLmNvbT4NCj4gPiBDYzogTGltaW5nIEdhbyA8Z2FvbGltaW5nQGJ5b3NvZnQuY29t LmNuPg0KPiA+IENjOiBSZWJlY2NhIENyYW4gPHJlYmVjY2FAYnNkaW8uY29tPg0KPiA+IFRlc3Rl ZC1ieTogVGluaCBOZ3V5ZW4gPHRpbmhuZ3V5ZW5Ab3MuYW1wZXJlY29tcHV0aW5nLmNvbT4NCj4g PiBSZXZpZXdlZC1ieTogVG9ueSBMbyA8dG9ueWxvQGFtaS5jb20+DQo+ID4gLS0tDQo+ID4gICAu Li4vUHJvdG9jb2wvRWRrSUlVc2JFdGhlcm5ldFByb3RvY29sLmggICAgICAgfCAgODc4ICsrKysr KysrDQo+ID4gICBVc2JOZXR3b3JrUGtnL05ldHdvcmtDb21tb24vQ29tcG9uZW50TmFtZS5jICAg fCAgMjYzICsrKw0KPiA+ICAgVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL0RyaXZlckJpbmRp bmcuYyAgIHwgIDU5NSArKysrKysNCj4gPiAgIFVzYk5ldHdvcmtQa2cvTmV0d29ya0NvbW1vbi9E cml2ZXJCaW5kaW5nLmggICB8ICAyNjYgKysrDQo+ID4gICBVc2JOZXR3b3JrUGtnL05ldHdvcmtD b21tb24vTmV0d29ya0NvbW1vbi5pbmYgfCAgIDQ5ICsNCj4gPiAgIFVzYk5ldHdvcmtQa2cvTmV0 d29ya0NvbW1vbi9QeGVGdW5jdGlvbi5jICAgICB8IDE4MDMNCj4gKysrKysrKysrKysrKysrKysN Cj4gPiAgIFVzYk5ldHdvcmtQa2cvUmVhZE1lLm1kICAgICAgICAgICAgICAgICAgICAgICB8ICAg NjUgKw0KPiA+ICAgVXNiTmV0d29ya1BrZy9Vc2JOZXR3b3JrUGtnLmNpLnlhbWwgICAgICAgICAg IHwgICA2NSArDQo+ID4gICBVc2JOZXR3b3JrUGtnL1VzYk5ldHdvcmtQa2cuZGVjICAgICAgICAg ICAgICAgfCAgIDQ2ICsNCj4gPiAgIFVzYk5ldHdvcmtQa2cvVXNiTmV0d29ya1BrZy5kc2MgICAg ICAgICAgICAgICB8ICAgNTAgKw0KPiA+ICAgVXNiTmV0d29ya1BrZy9Vc2JOZXR3b3JrUGtnLmRz Yy5pbmMgICAgICAgICAgIHwgICAyNyArDQo+ID4gICAuLi4vVXNiTmV0d29ya1BrZ0NvbXBvbmVu dHNEeGUuZHNjLmluYyAgICAgICAgfCAgIDIwICsNCj4gPiAgIC4uLi9Vc2JOZXR3b3JrUGtnQ29t cG9uZW50c0R4ZS5mZGYuaW5jICAgICAgICB8ICAgMjAgKw0KPiA+ICAgVXNiTmV0d29ya1BrZy9V c2JOZXR3b3JrUGtnUGNkcy5kc2MuaW5jICAgICAgIHwgICAxNCArDQo+ID4gICBVc2JOZXR3b3Jr UGtnL1VzYlJuZGlzL0NvbXBvbmVudE5hbWUuYyAgICAgICAgfCAgMTcyICsrDQo+ID4gICBVc2JO ZXR3b3JrUGtnL1VzYlJuZGlzL1VzYlJuZGlzLmMgICAgICAgICAgICAgfCAgODg2ICsrKysrKysr DQo+ID4gICBVc2JOZXR3b3JrUGtnL1VzYlJuZGlzL1VzYlJuZGlzLmggICAgICAgICAgICAgfCAg NTg2ICsrKysrKw0KPiA+ICAgVXNiTmV0d29ya1BrZy9Vc2JSbmRpcy9Vc2JSbmRpcy5pbmYgICAg ICAgICAgIHwgICA0MiArDQo+ID4gICBVc2JOZXR3b3JrUGtnL1VzYlJuZGlzL1VzYlJuZGlzRnVu Y3Rpb24uYyAgICAgfCAxNzE4DQo+ICsrKysrKysrKysrKysrKysNCj4gPiAgIDE5IGZpbGVzIGNo YW5nZWQsIDc1NjUgaW5zZXJ0aW9ucygrKQ0KPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+IFVz Yk5ldHdvcmtQa2cvSW5jbHVkZS9Qcm90b2NvbC9FZGtJSVVzYkV0aGVybmV0UHJvdG9jb2wuaA0K PiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+IFVzYk5ldHdvcmtQa2cvTmV0d29ya0NvbW1vbi9D b21wb25lbnROYW1lLmMNCj4gPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBVc2JOZXR3b3JrUGtnL05l dHdvcmtDb21tb24vRHJpdmVyQmluZGluZy5jDQo+ID4gICBjcmVhdGUgbW9kZSAxMDA2NDQgVXNi TmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL0RyaXZlckJpbmRpbmcuaA0KPiA+ICAgY3JlYXRlIG1v ZGUgMTAwNjQ0DQo+IFVzYk5ldHdvcmtQa2cvTmV0d29ya0NvbW1vbi9OZXR3b3JrQ29tbW9uLmlu Zg0KPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IFVzYk5ldHdvcmtQa2cvTmV0d29ya0NvbW1vbi9Q eGVGdW5jdGlvbi5jDQo+ID4gICBjcmVhdGUgbW9kZSAxMDA2NDQgVXNiTmV0d29ya1BrZy9SZWFk TWUubWQNCj4gPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBVc2JOZXR3b3JrUGtnL1VzYk5ldHdvcmtQ a2cuY2kueWFtbA0KPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IFVzYk5ldHdvcmtQa2cvVXNiTmV0 d29ya1BrZy5kZWMNCj4gPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBVc2JOZXR3b3JrUGtnL1VzYk5l dHdvcmtQa2cuZHNjDQo+ID4gICBjcmVhdGUgbW9kZSAxMDA2NDQgVXNiTmV0d29ya1BrZy9Vc2JO ZXR3b3JrUGtnLmRzYy5pbmMNCj4gPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NA0KPiBVc2JOZXR3b3Jr UGtnL1VzYk5ldHdvcmtQa2dDb21wb25lbnRzRHhlLmRzYy5pbmMNCj4gPiAgIGNyZWF0ZSBtb2Rl IDEwMDY0NA0KPiBVc2JOZXR3b3JrUGtnL1VzYk5ldHdvcmtQa2dDb21wb25lbnRzRHhlLmZkZi5p bmMNCj4gPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBVc2JOZXR3b3JrUGtnL1VzYk5ldHdvcmtQa2dQ Y2RzLmRzYy5pbmMNCj4gPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBVc2JOZXR3b3JrUGtnL1VzYlJu ZGlzL0NvbXBvbmVudE5hbWUuYw0KPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IFVzYk5ldHdvcmtQ a2cvVXNiUm5kaXMvVXNiUm5kaXMuYw0KPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IFVzYk5ldHdv cmtQa2cvVXNiUm5kaXMvVXNiUm5kaXMuaA0KPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IFVzYk5l dHdvcmtQa2cvVXNiUm5kaXMvVXNiUm5kaXMuaW5mDQo+ID4gICBjcmVhdGUgbW9kZSAxMDA2NDQg VXNiTmV0d29ya1BrZy9Vc2JSbmRpcy9Vc2JSbmRpc0Z1bmN0aW9uLmMNCj4gPg0KPiA+IGRpZmYg LS1naXQgYS9Vc2JOZXR3b3JrUGtnL0luY2x1ZGUvUHJvdG9jb2wvRWRrSUlVc2JFdGhlcm5ldFBy b3RvY29sLmgNCj4gYi9Vc2JOZXR3b3JrUGtnL0luY2x1ZGUvUHJvdG9jb2wvRWRrSUlVc2JFdGhl cm5ldFByb3RvY29sLmgNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAw MDAwMDAuLmY1NDk0NmM3YWENCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvVXNiTmV0d29y a1BrZy9JbmNsdWRlL1Byb3RvY29sL0Vka0lJVXNiRXRoZXJuZXRQcm90b2NvbC5oDQo+ID4gQEAg LTAsMCArMSw4NzggQEANCj4gPiArLyoqIEBmaWxlDQo+ID4gKyAgSGVhZGVyIGZpbGUgY29udGFp bnMgY29kZSBmb3IgVVNCIEV0aGVybmV0IFByb3RvY29sDQo+ID4gKyAgZGVmaW5pdGlvbnMNCj4g PiArDQo+ID4gKyAgQ29weXJpZ2h0IChjKSAyMDIzLCBBbWVyaWNhbiBNZWdhdHJlbmRzIEludGVy bmF0aW9uYWwgTExDLiBBbGwgcmlnaHRzDQo+IHJlc2VydmVkLjxCUj4NCj4gPiArICBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ICsqKi8NCj4gPiArDQo+ ID4gKyNpZm5kZWYgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MX0hfDQo+ID4gKyNkZWZpbmUg RURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MX0hfDQo+ID4gKw0KPiA+ICsjZGVmaW5lIEVES0lJ X1VTQl9FVEhFUk5FVF9QUk9UT0NPTF9HVUlEIFwNCj4gPiArICAgIHsweDhkODk2OWNjLCAweGZl YjAsIDB4NDMwMywgezB4YjIsIDB4MWEsIDB4MWYsIDB4MTEsIDB4NmYsIDB4MzgsIDB4NTYsDQo+ IDB4NDN9fQ0KPiA+ICsNCj4gPiArdHlwZWRlZiBzdHJ1Y3QgX0VES0lJX1VTQl9FVEhFUk5FVF9Q Uk9UT0NPTA0KPiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0w7DQo+ID4gKw0KPiA+ICsjZGVm aW5lIFVTQl9DRENfQ0xBU1MgICAgICAgICAgMHgwMg0KPiA+ICsjZGVmaW5lIFVTQl9DRENfQUNN X1NVQkNMQVNTICAgMHgwMg0KPiA+ICsjZGVmaW5lIFVTQl9DRENfRUNNX1NVQkNMQVNTICAgMHgw Ng0KPiA+ICsjZGVmaW5lIFVTQl9DRENfTkNNX1NVQkNMQVNTICAgMHgwRA0KPiA+ICsjZGVmaW5l IFVTQl9DRENfREFUQV9DTEFTUyAgICAgMHgwQQ0KPiA+ICsjZGVmaW5lIFVTQl9DRENfREFUQV9T VUJDTEFTUyAgMHgwMA0KPiA+ICsjZGVmaW5lIFVTQl9OT19DTEFTU19QUk9UT0NPTCAgMHgwMA0K PiA+ICsjZGVmaW5lIFVTQl9OQ01fTlRCX1BST1RPQ09MICAgMHgwMQ0KPiA+ICsjZGVmaW5lIFVT Ql9WRU5ET1JfUFJPVE9DT0wgICAgMHhGRg0KPiA+ICsNCj4gPiArLy8gVHlwZSBWYWx1ZXMgZm9y IHRoZSBEZXNjcmlwdG9yVHlwZSBGaWVsZA0KPiA+ICsjZGVmaW5lIENTX0lOVEVSRkFDRSAgMHgy NA0KPiA+ICsjZGVmaW5lIENTX0VORFBPSU5UICAgMHgyNQ0KPiA+ICsNCj4gPiArLy8gRGVzY3Jp cHRvciBTdWJUeXBlIGluIEZ1bmN0aW9uYWwgRGVzY3JpcHRvcnMNCj4gPiArI2RlZmluZSBIRUFE RVJfRlVOX0RFU0NSSVBUT1IgICAgMHgwMA0KPiA+ICsjZGVmaW5lIFVOSU9OX0ZVTl9ERVNDUklQ VE9SICAgICAweDA2DQo+ID4gKyNkZWZpbmUgRVRIRVJORVRfRlVOX0RFU0NSSVBUT1IgIDB4MEYN Cj4gPiArDQo+ID4gKyNkZWZpbmUgTUFYX0xBTl9JTlRFUkZBQ0UgIDB4MTANCj4gPiArDQo+ID4g Ky8vIFRhYmxlIDIwOiBDbGFzcy1TcGVjaWZpYyBOb3RpZmljYXRpb24gQ29kZXMNCj4gPiArI2Rl ZmluZSBVU0JfQ0RDX05FVFdPUktfQ09OTkVDVElPTiAgMHgwMA0KPiA+ICsNCj4gPiArLy8gNi4z LjEgTmV0d29ya0Nvbm5lY3Rpb24NCj4gPiArI2RlZmluZSBORVRXT1JLX0NPTk5FQ1RFRCAgIDB4 MDENCj4gPiArI2RlZmluZSBORVRXT1JLX0RJU0NPTk5FQ1QgIDB4MDANCj4gPiArDQo+ID4gKy8v IFVTQiBIZWFkZXIgZnVuY3Rpb25hbCBEZXNjcmlwdG9yDQo+ID4gK3R5cGVkZWYgc3RydWN0IHsN Cj4gPiArICBVSU5UOCAgICAgRnVuY3Rpb25MZW5ndGg7DQo+ID4gKyAgVUlOVDggICAgIERlc2Ny aXB0b3JUeXBlOw0KPiA+ICsgIFVJTlQ4ICAgICBEZXNjcmlwdG9yU3VidHlwZTsNCj4gPiArICBV SU5UMTYgICAgQmNkQ2RjOw0KPiA+ICt9IFVTQl9IRUFERVJfRlVOX0RFU0NSSVBUT1I7DQo+ID4g Kw0KPiA+ICsvLyBVU0IgVW5pb24gRnVuY3Rpb25hbCBEZXNjcmlwdG9yDQo+ID4gK3R5cGVkZWYg c3RydWN0IHsNCj4gPiArICBVSU5UOCAgICBGdW5jdGlvbkxlbmd0aDsNCj4gPiArICBVSU5UOCAg ICBEZXNjcmlwdG9yVHlwZTsNCj4gPiArICBVSU5UOCAgICBEZXNjcmlwdG9yU3VidHlwZTsNCj4g PiArICBVSU5UOCAgICBNYXN0ZXJJbnRlcmZhY2U7DQo+ID4gKyAgVUlOVDggICAgU2xhdmVJbnRl cmZhY2U7DQo+ID4gK30gVVNCX1VOSU9OX0ZVTl9ERVNDUklQVE9SOw0KPiA+ICsNCj4gPiArLy8g VVNCIEV0aGVybmV0IEZ1bmN0aW9uYWwgRGVzY3JpcHRvcg0KPiA+ICt0eXBlZGVmIHN0cnVjdCB7 DQo+ID4gKyAgVUlOVDggICAgIEZ1bmN0aW9uTGVuZ3RoOw0KPiA+ICsgIFVJTlQ4ICAgICBEZXNj cmlwdG9yVHlwZTsNCj4gPiArICBVSU5UOCAgICAgRGVzY3JpcHRvclN1YnR5cGU7DQo+ID4gKyAg VUlOVDggICAgIE1hY0FkZHJlc3M7DQo+ID4gKyAgVUlOVDMyICAgIEV0aGVybmV0U3RhdGlzdGlj czsNCj4gPiArICBVSU5UMTYgICAgTWF4U2VnbWVudFNpemU7DQo+ID4gKyAgVUlOVDE2ICAgIE51 bWJlck1jRmlsdGVyczsNCj4gPiArICBVSU5UOCAgICAgTnVtYmVyUG93ZXJGaWx0ZXJzOw0KPiA+ ICt9IFVTQl9FVEhFUk5FVF9GVU5fREVTQ1JJUFRPUjsNCj4gPiArDQo+ID4gK3R5cGVkZWYgc3Ry dWN0IHsNCj4gPiArICBVSU5UMzIgICAgVXNCaXRSYXRlOw0KPiA+ICsgIFVJTlQzMiAgICBEc0Jp dFJhdGU7DQo+ID4gK30gVVNCX0NPTk5FQ1RfU1BFRURfQ0hBTkdFOw0KPiA+ICsNCj4gPiArLy8g UmVxdWVzdCBUeXBlIENvZGVzIGZvciBVU0IgRXRoZXJuZXQNCj4gPiArI2RlZmluZSBVU0JfRVRI RVJORVRfR0VUX1JFUV9UWVBFICAweEExDQo+ID4gKyNkZWZpbmUgVVNCX0VUSEVSTkVUX1NFVF9S RVFfVFlQRSAgMHgyMQ0KPiA+ICsNCj4gPiArLy8gQ2xhc3MtU3BlY2lmaWMgUmVxdWVzdCBDb2Rl cyBmb3IgRXRoZXJuZXQgc3ViY2xhc3MNCj4gPiArLy8gVVNCIEVDTSAxLjIgc3BlY2lmaWNhdGlv biwgU2VjdGlvbiA2LjINCj4gPiArI2RlZmluZSBTRVRfRVRIX01VTFRJQ0FTVF9GSUxURVJTX1JF USAgICAgICAgICAgICAgICAweDQwDQo+ID4gKyNkZWZpbmUgU0VUX0VUSF9QT1dFUl9NQU5BR0VN RU5UX1BBVFRFUk5fRklMVEVSX1JFUSAgMHg0MQ0KPiA+ICsjZGVmaW5lIEdFVF9FVEhfUE9XRVJf TUFOQUdFTUVOVF9QQVRURVJOX0ZJTFRFUl9SRVEgIDB4NDINCj4gPiArI2RlZmluZSBTRVRfRVRI X1BBQ0tFVF9GSUxURVJfUkVRICAgICAgICAgICAgICAgICAgICAweDQzDQo+ID4gKyNkZWZpbmUg R0VUX0VUSF9TVEFUSVNUSUNfUkVRICAgICAgICAgICAgICAgICAgICAgICAgMHg0NA0KPiA+ICsN Cj4gPiArLy8gVVNCIEVDTSBjb21tYW5kIHJlcXVlc3QgbGVuZ3RoDQo+ID4gKyNkZWZpbmUgVVNC X0VUSF9QT1dFUl9GSUxURVJfTEVOR1RIICAgMiAvLyBTZWN0aW9uIDYuMi4zDQo+ID4gKyNkZWZp bmUgVVNCX0VUSF9QQUNLRVRfRklMVEVSX0xFTkdUSCAgMCAvLyBTZWN0aW9uIDYuMi40DQo+ID4g KyNkZWZpbmUgVVNCX0VUSF9TVEFUSVNUSUMgICAgICAgICAgICAgNCAvLyBTZWN0aW9uIDYuMi41 DQo+ID4gKw0KPiA+ICsvLyBVU0IgRXRoZXJuZXQgUGFja2V0IEZpbHRlciBCaXRtYXANCj4gPiAr Ly8gVVNCIEVDTSAxLjIgc3BlY2lmaWNhdGlvbiwgU2VjdGlvbiA2LjIuNA0KPiA+ICsjZGVmaW5l IFVTQl9FVEhfUEFDS0VUX1RZUEVfUFJPTUlTQ1VPVVMgICAgQklUMA0KPiA+ICsjZGVmaW5lIFVT Ql9FVEhfUEFDS0VUX1RZUEVfQUxMX01VTFRJQ0FTVCAgQklUMQ0KPiA+ICsjZGVmaW5lIFVTQl9F VEhfUEFDS0VUX1RZUEVfRElSRUNURUQgICAgICAgQklUMg0KPiA+ICsjZGVmaW5lIFVTQl9FVEhf UEFDS0VUX1RZUEVfQlJPQURDQVNUICAgICAgQklUMw0KPiA+ICsjZGVmaW5lIFVTQl9FVEhfUEFD S0VUX1RZUEVfTVVMVElDQVNUICAgICAgQklUNA0KPiA+ICsNCj4gPiArLy8gVVNCIEV0aGVybmV0 IFN0YXRpc3RpY3MgRmVhdHVyZSBTZWxlY3RvciBDb2Rlcw0KPiA+ICsvLyBVU0IgRUNNIDEuMiBz cGVjaWZpY2F0aW9uLCBTZWN0aW9uIDYuMi41DQo+ID4gKyNkZWZpbmUgVVNCX0VUSF9YTUlUX09L ICAgICAgICAgICAgICAgICAweDAxDQo+ID4gKyNkZWZpbmUgVVNCX0VUSF9SQ1ZfT0sgICAgICAg ICAgICAgICAgICAweDAyDQo+ID4gKyNkZWZpbmUgVVNCX0VUSF9YTUlUX0VSUk9SICAgICAgICAg ICAgICAweDAzDQo+ID4gKyNkZWZpbmUgVVNCX0VUSF9SQ1ZfRVJST1IgICAgICAgICAgICAgICAw eDA0DQo+ID4gKyNkZWZpbmUgVVNCX0VUSF9SQ1ZfTk9fQlVGRkVSICAgICAgICAgICAweDA1DQo+ ID4gKyNkZWZpbmUgVVNCX0VUSF9ESVJFQ1RFRF9CWVRFU19YTUlUICAgICAweDA2DQo+ID4gKyNk ZWZpbmUgVVNCX0VUSF9ESVJFQ1RFRF9GUkFNRVNfWE1JVCAgICAweDA3DQo+ID4gKyNkZWZpbmUg VVNCX0VUSF9NVUxUSUNBU1RfQllURVNfWE1JVCAgICAweDA4DQo+ID4gKyNkZWZpbmUgVVNCX0VU SF9NVUxUSUNBU1RfRlJBTUVTX1hNSVQgICAweDA5DQo+ID4gKyNkZWZpbmUgVVNCX0VUSF9CUk9B RENBU1RfQllURVNfWE1JVCAgICAweDBBDQo+ID4gKyNkZWZpbmUgVVNCX0VUSF9CUk9BRENBU1Rf RlJBTUVTX1hNSVQgICAweDBCDQo+ID4gKyNkZWZpbmUgVVNCX0VUSF9ESVJFQ1RFRF9CWVRFU19S Q1YgICAgICAweDBDDQo+ID4gKyNkZWZpbmUgVVNCX0VUSF9ESVJFQ1RFRF9GUkFNRVNfUkNWICAg ICAweDBEDQo+ID4gKyNkZWZpbmUgVVNCX0VUSF9NVUxUSUNBU1RfQllURVNfUkNWICAgICAweDBF DQo+ID4gKyNkZWZpbmUgVVNCX0VUSF9NVUxUSUNBU1RfRlJBTUVTX1JDViAgICAweDBGDQo+ID4g KyNkZWZpbmUgVVNCX0VUSF9CUk9BRENBU1RfQllURVNfUkNWICAgICAweDEwDQo+ID4gKyNkZWZp bmUgVVNCX0VUSF9CUk9BRENBU1RfRlJBTUVTX1JDViAgICAweDExDQo+ID4gKyNkZWZpbmUgVVNC X0VUSF9SQ1ZfQ1JDX0VSUk9SICAgICAgICAgICAweDEyDQo+ID4gKyNkZWZpbmUgVVNCX0VUSF9U UkFOU01JVF9RVUVVRV9MRU5HVEggICAweDEzDQo+ID4gKyNkZWZpbmUgVVNCX0VUSF9SQ1ZfRVJS T1JfQUxJR05NRU5UICAgICAweDE0DQo+ID4gKyNkZWZpbmUgVVNCX0VUSF9YTUlUX09ORV9DT0xM SVNJT04gICAgICAweDE1DQo+ID4gKyNkZWZpbmUgVVNCX0VUSF9YTUlUX01PUkVfQ09MTElTSU9O UyAgICAweDE2DQo+ID4gKyNkZWZpbmUgVVNCX0VUSF9YTUlUX0RFRkVSUkVEICAgICAgICAgICAw eDE3DQo+ID4gKyNkZWZpbmUgVVNCX0VUSF9YTUlUX01BWF9DT0xMSVNJT05TICAgICAweDE4DQo+ ID4gKyNkZWZpbmUgVVNCX0VUSF9SQ1ZfT1ZFUlJVTiAgICAgICAgICAgICAweDE5DQo+ID4gKyNk ZWZpbmUgVVNCX0VUSF9YTUlUX1VOREVSUlVOICAgICAgICAgICAweDFBDQo+ID4gKyNkZWZpbmUg VVNCX0VUSF9YTUlUX0hFQVJUQkVBVF9GQUlMVVJFICAweDFCDQo+ID4gKyNkZWZpbmUgVVNCX0VU SF9YTUlUX1RJTUVTX0NSU19MT1NUICAgICAweDFDDQo+ID4gKyNkZWZpbmUgVVNCX0VUSF9YTUlU X0xBVEVfQ09MTElTSU9OUyAgICAweDFEDQo+ID4gKw0KPiA+ICsvLyBOSUMgSW5mb3JtYXRpb24N Cj4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAg ICAgICBTaWduYXR1cmU7DQo+ID4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAgICpV c2JFdGg7DQo+ID4gKyAgVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICAgIEludGVycnVwT3BG bGFnOw0KPiA+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgICBNYXBwZWRBZGRyOw0K PiA+ICsgIFBYRV9NQUNfQUREUiAgICAgICAgICAgICAgICAgICBNY2FzdExpc3RbTUFYX01DQVNU X0FERFJFU1NfQ05UXTsNCj4gPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgTWNh c3RDb3VudDsNCj4gPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgICAgTWVkaWFIZWFk ZXJbTUFYX1hNSVRfQlVGRkVSU107DQo+ID4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAg ICAgIFR4QnVmZmVyQ291bnQ7DQo+ID4gKyAgVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICAg IFN0YXRlOw0KPiA+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICBDYW5UcmFuc21p dDsNCj4gPiArICBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAgICAgUmVjZWl2ZVN0YXR1czsN Cj4gPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgUnhGaWx0ZXI7DQo+ID4gKyAg VUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgIFJ4RnJhbWU7DQo+ID4gKyAgVUlOVDMyICAg ICAgICAgICAgICAgICAgICAgICAgIFR4RnJhbWU7DQo+ID4gKyAgVUlOVDE2ICAgICAgICAgICAg ICAgICAgICAgICAgIE5ldHdvcmtDb25uZWN0Ow0KPiA+ICsgIFVJTlQ4ICAgICAgICAgICAgICAg ICAgICAgICAgICBDYWJsZURldGVjdDsNCj4gPiArICBVSU5UMTYgICAgICAgICAgICAgICAgICAg ICAgICAgTWF4U2VnbWVudFNpemU7DQo+ID4gKyAgRUZJX01BQ19BRERSRVNTICAgICAgICAgICAg ICAgIE1hY0FkZHI7DQo+ID4gKyAgUFhFX0NQQl9TVEFSVF8zMSAgICAgICAgICAgICAgIFB4ZVN0 YXJ0Ow0KPiA+ICsgIFBYRV9DUEJfSU5JVElBTElaRSAgICAgICAgICAgICBQeGVJbml0Ow0KPiA+ ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICBQZXJtTm9kZUFkZHJlc3NbUFhFX01B Q19MRU5HVEhdOw0KPiA+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJyZW50 Tm9kZUFkZHJlc3NbUFhFX01BQ19MRU5HVEhdOw0KPiA+ICsgIFVJTlQ4ICAgICAgICAgICAgICAg ICAgICAgICAgICBCcm9hZGNhc3ROb2RlQWRkcmVzc1tQWEVfTUFDX0xFTkdUSF07DQo+ID4gKyAg RUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCAgICAgICAgIFJlcXVlc3Q7DQo+ID4gKyAgRUZJX0VWRU5U ICAgICAgICAgICAgICAgICAgICAgIFJhdGVMaW1pdGVyOw0KPiA+ICsgIFVJTlQzMiAgICAgICAg ICAgICAgICAgICAgICAgICBSYXRlTGltaXRpbmdDcmVkaXQ7DQo+ID4gKyAgVUlOVDMyICAgICAg ICAgICAgICAgICAgICAgICAgIFJhdGVMaW1pdGluZ0NyZWRpdENvdW50Ow0KPiA+ICsgIFVJTlQz MiAgICAgICAgICAgICAgICAgICAgICAgICBSYXRlTGltaXRpbmdQb2xsVGltZXI7DQo+ID4gKyAg Qk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgIFJhdGVMaW1pdGluZ0VuYWJsZTsNCj4gPiAr fSBOSUNfREFUQTsNCj4gPiArDQo+ID4gKyNkZWZpbmUgTklDX0RBVEFfU0lHTkFUVVJFICBTSUdO QVRVUkVfMzIoJ24nLCAnaScsICdjJywgJ2QnKQ0KPiA+ICsjZGVmaW5lIE5JQ19EQVRBX0ZST01f RURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MKGEpICBDUiAoYSwNCj4gTklDX0RBVEEsIFVzYkV0 aCwgTklDX0RBVEFfU0lHTkFUVVJFKQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhpcyBjb21t YW5kIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBvcGVyYXRpb25hbCBzdGF0ZSBvZiB0aGUgVU5E SS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1h bmQgZGVzY3JpcHRvciBibG9jay4NCj4gPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0 byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiA+ICsNCj4gPiArICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNz ZnVsbHkuDQo+ID4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9j Y3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gPiArICBAcmV0dmFsIEVGSV9ERVZJQ0Vf RVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiA+ ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBo YXMgYW4gaW52YWxpZA0KPiB2YWx1ZS4NCj4gPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAg ICAgICBOb3Qgc3VwcG9ydGVkLg0KPiA+ICsqKi8NCj4gPiArdHlwZWRlZg0KPiA+ICtFRklfU1RB VFVTDQo+ID4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX0dFVF9TVEFURSkoDQo+ ID4gKyAgSU4gIFBYRV9DREIgICAgICpDZGIsDQo+ID4gKyAgSU4gIE5JQ19EQVRBICAgICpOaWMN Cj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhpcyBjb21tYW5kIGlzIHVzZWQg dG8gY2hhbmdlIHRoZSBVTkRJIG9wZXJhdGlvbmFsIHN0YXRlIGZyb20NCj4gc3RvcHBlZCB0byBz dGFydGVkLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUg Y29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiA+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2lu dGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ID4gKw0KPiA+ ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1 Y2Nlc3NmdWxseS4NCj4gPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVv dXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiA+ICsgIEByZXR2YWwgRUZJX0RF VklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3Iu DQo+ID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0 ZXJzIGhhcyBhbiBpbnZhbGlkDQo+IHZhbHVlLg0KPiA+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9S VEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ID4gKyoqLw0KPiA+ICt0eXBlZGVmDQo+ID4gK0VG SV9TVEFUVVMNCj4gPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX1VORElfU1RBUlQpKA0K PiA+ICsgIElOICBQWEVfQ0RCICAgICAqQ2RiLA0KPiA+ICsgIElOICBOSUNfREFUQSAgICAqTmlj DQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2Vk IHRvIGNoYW5nZSB0aGUgVU5ESSBvcGVyYXRpb25hbCBzdGF0ZSBmcm9tIHN0YXJ0ZWQNCj4gdG8g c3RvcHBlZC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhl IGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9p bnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiA+ICsNCj4g PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBz dWNjZXNzZnVsbHkuDQo+ID4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1l b3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gPiArICBAcmV0dmFsIEVGSV9E RVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9y Lg0KPiA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1l dGVycyBoYXMgYW4gaW52YWxpZA0KPiB2YWx1ZS4NCj4gPiArICBAcmV0dmFsIEVGSV9VTlNVUFBP UlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiA+ICsqKi8NCj4gPiArdHlwZWRlZg0KPiA+ICtF RklfU1RBVFVTDQo+ID4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1NUT1ApKA0K PiA+ICsgIElOICBQWEVfQ0RCICAgICAqQ2RiLA0KPiA+ICsgIElOICBOSUNfREFUQSAgICAqTmlj DQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2Vk IHRvIHJldHJpZXZlIGluaXRpYWxpemF0aW9uIGluZm9ybWF0aW9uIHRoYXQgaXMNCj4gPiArICBu ZWVkZWQgYnkgZHJpdmVycyBhbmQgYXBwbGljYXRpb25zIHRvIGluaXRpYWxpemVkIFVOREkuDQo+ ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRl c2NyaXB0b3IgYmxvY2suDQo+ID4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhl IE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gPiArDQo+ID4gKyAgQHJldHZh bCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5 Lg0KPiA+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJl ZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ID4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9S ICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gPiArICBA cmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFu IGludmFsaWQNCj4gdmFsdWUuDQo+ID4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAg Tm90IHN1cHBvcnRlZC4NCj4gPiArKiovDQo+ID4gK3R5cGVkZWYNCj4gPiArRUZJX1NUQVRVUw0K PiA+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9HRVRfSU5JVF9JTkZPKSgNCj4g PiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4gPiArICBJTiAgTklDX0RBVEEgICAgKk5pYw0K PiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0 byByZXRyaWV2ZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFib3V0DQo+ID4gKyAgdGhlIE5J QyBiZWluZyBjb250cm9sbGVkIGJ5IHRoZSBVTkRJLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5d ICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiA+ICsg IEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250 cm9sbGVyIGRhdGEuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAg IFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gPiArICBAcmV0dmFsIEVGSV9U SU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0 Lg0KPiA+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxl ZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJB TUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkDQo+IHZhbHVlLg0KPiA+ ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ID4gKyoq Lw0KPiA+ICt0eXBlZGVmDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArKEVGSUFQSSAqRURLSUlfVVNC X0VUSEVSTkVUX1VORElfR0VUX0NPTkZJR19JTkZPKSgNCj4gPiArICBJTiAgUFhFX0NEQiAgICAg KkNkYiwNCj4gPiArICBJTiAgTklDX0RBVEEgICAgKk5pYw0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ ICsvKioNCj4gPiArICBUaGlzIGNvbW1hbmQgcmVzZXRzIHRoZSBuZXR3b3JrIGFkYXB0ZXIgYW5k IGluaXRpYWxpemVzIFVOREkgdXNpbmcNCj4gPiArICB0aGUgcGFyYW1ldGVycyBzdXBwbGllZCBp biB0aGUgQ1BCLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0 aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiA+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBw b2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ID4gKw0K PiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVk IHN1Y2Nlc3NmdWxseS4NCj4gPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRp bWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiA+ICsgIEByZXR2YWwgRUZJ X0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJy b3IuDQo+ID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJh bWV0ZXJzIGhhcyBhbiBpbnZhbGlkDQo+IHZhbHVlLg0KPiA+ICsgIEByZXR2YWwgRUZJX1VOU1VQ UE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ID4gKyoqLw0KPiA+ICt0eXBlZGVmDQo+ID4g K0VGSV9TVEFUVVMNCj4gPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX1VORElfSU5JVElB TElaRSkoDQo+ID4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiA+ICsgIElOICBOSUNfREFUQSAg Kk5pYw0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGlzIGNvbW1hbmQgcmVz ZXRzIHRoZSBuZXR3b3JrIGFkYXB0ZXIgYW5kIHJlaW5pdGlhbGl6ZXMgdGhlIFVOREkNCj4gPiAr ICB3aXRoIHRoZSBzYW1lIHBhcmFtZXRlcnMgcHJvdmlkZWQgaW4gdGhlIEluaXRpYWxpemUgY29t bWFuZC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNv bW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRl ciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiA+ICsNCj4gPiAr ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNj ZXNzZnVsbHkuDQo+ID4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0 IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gPiArICBAcmV0dmFsIEVGSV9ERVZJ Q0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0K PiA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVy cyBoYXMgYW4gaW52YWxpZA0KPiB2YWx1ZS4NCj4gPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRF RCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiA+ICsqKi8NCj4gPiArdHlwZWRlZg0KPiA+ICtFRklf U1RBVFVTDQo+ID4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1JFU0VUKSgNCj4g PiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4gPiArICBJTiAgTklDX0RBVEEgICAgKk5pYw0K PiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGUgU2h1dGRvd24gY29tbWFuZCBy ZXNldHMgdGhlIG5ldHdvcmsgYWRhcHRlciBhbmQgbGVhdmVzIGl0IGluIGENCj4gPiArICBzYWZl IHN0YXRlIGZvciBhbm90aGVyIGRyaXZlciB0byBpbml0aWFsaXplLg0KPiA+ICsNCj4gPiArICBA cGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2Nr Lg0KPiA+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVy ZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gPiArICBAcmV0 dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRo ZSByZXF1ZXN0Lg0KPiA+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1 ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ID4gKyAgQHJldHZhbCBFRklfSU5W QUxJRF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkDQo+IHZh bHVlLg0KPiA+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQu DQo+ID4gKyoqLw0KPiA+ICt0eXBlZGVmDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArKEVGSUFQSSAq RURLSUlfVVNCX0VUSEVSTkVUX1VORElfU0hVVERPV04pKA0KPiA+ICsgIElOICBQWEVfQ0RCICAg ICAqQ2RiLA0KPiA+ICsgIElOICBOSUNfREFUQSAgICAqTmljDQo+ID4gKyAgKTsNCj4gPiArDQo+ ID4gKy8qKg0KPiA+ICsgIFRoZSBJbnRlcnJ1cHQgRW5hYmxlcyBjb21tYW5kIGNhbiBiZSB1c2Vk IHRvIHJlYWQgYW5kL29yIGNoYW5nZQ0KPiA+ICsgIHRoZSBjdXJyZW50IGV4dGVybmFsIGludGVy cnVwdCBlbmFibGUgc2V0dGluZ3MuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBw b2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ID4gKyAgQHBhcmFtW2lu XSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0 YS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVl c3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiA+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAg ICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ID4gKyAg QHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBh IGRldmljZSBlcnJvci4NCj4gPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUg b2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQNCj4gdmFsdWUuDQo+ID4gKyAgQHJldHZh bCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gPiArKiovDQo+ID4gK3R5 cGVkZWYNCj4gPiArRUZJX1NUQVRVUw0KPiA+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRf VU5ESV9JTlRFUlJVUFRfRU5BQkxFKSgNCj4gPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4g PiArICBJTiAgTklDX0RBVEEgICAgKk5pYw0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4g PiArICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byByZWFkIGFuZCBjaGFuZ2UgcmVjZWl2ZSBmaWx0 ZXJzIGFuZCwNCj4gPiArICBpZiBzdXBwb3J0ZWQsIHJlYWQgYW5kIGNoYW5nZSB0aGUgbXVsdGlj YXN0IE1BQyBhZGRyZXNzIGZpbHRlciBsaXN0Lg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBD ZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiA+ICsgIEBw YXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9s bGVyIGRhdGEuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRo ZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gPiArICBAcmV0dmFsIEVGSV9USU1F T1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0K PiA+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBk dWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVU RVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkDQo+IHZhbHVlLg0KPiA+ICsg IEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ID4gKyoqLw0K PiA+ICt0eXBlZGVmDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArKEVGSUFQSSAqRURLSUlfVVNCX0VU SEVSTkVUX1VORElfUkVDRUlWRV9GSUxURVIpKA0KPiA+ICsgIElOICBQWEVfQ0RCICAgICAqQ2Ri LA0KPiA+ICsgIElOICBOSUNfREFUQSAgICAqTmljDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIGdldCBjdXJyZW50IHN0YXRpb24gYW5k IGJyb2FkY2FzdCBNQUMNCj4gYWRkcmVzc2VzDQo+ID4gKyAgYW5kLCBpZiBzdXBwb3J0ZWQsIHRv IGNoYW5nZSB0aGUgY3VycmVudCBzdGF0aW9uIE1BQyBhZGRyZXNzLg0KPiA+ICsNCj4gPiArICBA cGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2Nr Lg0KPiA+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVy ZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gPiArICBAcmV0 dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRo ZSByZXF1ZXN0Lg0KPiA+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1 ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ID4gKyAgQHJldHZhbCBFRklfSU5W QUxJRF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkDQo+IHZh bHVlLg0KPiA+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQu DQo+ID4gKyoqLw0KPiA+ICt0eXBlZGVmDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArKEVGSUFQSSAq RURLSUlfVVNCX0VUSEVSTkVUX1VORElfU1RBVElPTl9BRERSRVNTKSgNCj4gPiArICBJTiAgUFhF X0NEQiAgICAgKkNkYiwNCj4gPiArICBJTiAgTklDX0RBVEEgICAgKk5pYw0KPiA+ICsgICk7DQo+ ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byByZWFkIGFuZCBj bGVhciB0aGUgTklDIHRyYWZmaWMgc3RhdGlzdGljcy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2lu XSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gPiAr ICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29u dHJvbGxlciBkYXRhLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAg ICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ID4gKyAgQHJldHZhbCBFRklf VElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVz dC4NCj4gPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWls ZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFS QU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZA0KPiB2YWx1ZS4NCj4g PiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiA+ICsq Ki8NCj4gPiArdHlwZWRlZg0KPiA+ICtFRklfU1RBVFVTDQo+ID4gKyhFRklBUEkgKkVES0lJX1VT Ql9FVEhFUk5FVF9VTkRJX1NUQVRJU1RJQ1MpKA0KPiA+ICsgIElOICBQWEVfQ0RCICAgICAqQ2Ri LA0KPiA+ICsgIElOICBOSUNfREFUQSAgICAqTmljDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgIFRyYW5zbGF0ZSBhIG11bHRpY2FzdCBJUHY0IG9yIElQdjYgYWRkcmVzcyB0byBh IG11bHRpY2FzdCBNQUMgYWRkcmVzcy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgQ2RiICBB IHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gPiArICBAcGFyYW1b aW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBk YXRhLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVx dWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ID4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAg ICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gPiAr ICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRv IGEgZGV2aWNlIGVycm9yLg0KPiA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9u ZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZA0KPiB2YWx1ZS4NCj4gPiArICBAcmV0 dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiA+ICsqKi8NCj4gPiAr dHlwZWRlZg0KPiA+ICtFRklfU1RBVFVTDQo+ID4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5F VF9VTkRJX01DQVNUX0lQVE9NQUMpKA0KPiA+ICsgIElOICBQWEVfQ0RCICAgICAqQ2RiLA0KPiA+ ICsgIElOICBOSUNfREFUQSAgICAqTmljDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ ICsgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIHJlYWQgYW5kIHdyaXRlIChpZiBzdXBwb3J0ZWQg YnkgTklDIEgvVykNCj4gPiArICBub252b2xhdGlsZSBzdG9yYWdlIG9uIHRoZSBOSUMuDQo+ID4g Kw0KPiA+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2Ny aXB0b3IgYmxvY2suDQo+ID4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5l dHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBF RklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0K PiA+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBl eGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ID4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAg ICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gPiArICBAcmV0 dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGlu dmFsaWQNCj4gdmFsdWUuDQo+ID4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90 IHN1cHBvcnRlZC4NCj4gPiArKiovDQo+ID4gK3R5cGVkZWYNCj4gPiArRUZJX1NUQVRVUw0KPiA+ ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9OVl9EQVRBKSgNCj4gPiArICBJTiAg UFhFX0NEQiAgICAgKkNkYiwNCj4gPiArICBJTiAgTklDX0RBVEEgICAgKk5pYw0KPiA+ICsgICk7 DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGlzIGNvbW1hbmQgcmV0dXJucyB0aGUgY3VycmVu dCBpbnRlcnJ1cHQgc3RhdHVzIGFuZC9vciB0aGUNCj4gPiArICB0cmFuc21pdHRlZCBidWZmZXIg YWRkcmVzc2VzIGFuZCB0aGUgY3VycmVudCBtZWRpYSBzdGF0dXMuDQo+ID4gKw0KPiA+ICsgIEBw YXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2su DQo+ID4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJm YWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiA+ICsgIEByZXR2 YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhl IHJlcXVlc3QuDQo+ID4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVl c3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gPiArICBAcmV0dmFsIEVGSV9JTlZB TElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQNCj4gdmFs dWUuDQo+ID4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4N Cj4gPiArKiovDQo+ID4gK3R5cGVkZWYNCj4gPiArRUZJX1NUQVRVUw0KPiA+ICsoRUZJQVBJICpF REtJSV9VU0JfRVRIRVJORVRfVU5ESV9HRVRfU1RBVFVTKSgNCj4gPiArICBJTiAgUFhFX0NEQiAg ICAgKkNkYiwNCj4gPiArICBJTiAgTklDX0RBVEEgICAgKk5pYw0KPiA+ICsgICk7DQo+ID4gKw0K PiA+ICsvKioNCj4gPiArICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBmaWxsIHRoZSBtZWRpYSBo ZWFkZXIocykgaW4gdHJhbnNtaXQgcGFja2V0KHMpLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5d ICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiA+ICsg IEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250 cm9sbGVyIGRhdGEuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAg IFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gPiArICBAcmV0dmFsIEVGSV9U SU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0 Lg0KPiA+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxl ZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJB TUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkDQo+IHZhbHVlLg0KPiA+ ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ID4gKyoq Lw0KPiA+ICt0eXBlZGVmDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArKEVGSUFQSSAqRURLSUlfVVNC X0VUSEVSTkVUX1VORElfRklMTF9IRUFERVIpKA0KPiA+ICsgIElOICBQWEVfQ0RCICAgICAqQ2Ri LA0KPiA+ICsgIElOICBOSUNfREFUQSAgICAqTmljDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgIFRoZSBUcmFuc21pdCBjb21tYW5kIGlzIHVzZWQgdG8gcGxhY2UgYSBwYWNrZXQg aW50byB0aGUgdHJhbnNtaXQgcXVldWUuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIENkYiAg QSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ID4gKyAgQHBhcmFt W2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIg ZGF0YS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJl cXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiA+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQg ICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ID4g KyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0 byBhIGRldmljZSBlcnJvci4NCj4gPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBP bmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQNCj4gdmFsdWUuDQo+ID4gKyAgQHJl dHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gPiArKiovDQo+ID4g K3R5cGVkZWYNCj4gPiArRUZJX1NUQVRVUw0KPiA+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJO RVRfVU5ESV9UUkFOU01JVCkoDQo+ID4gKyAgSU4gIFBYRV9DREIgICAgICpDZGIsDQo+ID4gKyAg SU4gIE5JQ19EQVRBICAgICpOaWMNCj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAg V2hlbiB0aGUgbmV0d29yayBhZGFwdGVyIGhhcyByZWNlaXZlZCBhIGZyYW1lLCB0aGlzIGNvbW1h bmQgaXMgdXNlZA0KPiA+ICsgIHRvIGNvcHkgdGhlIGZyYW1lIGludG8gZHJpdmVyL2FwcGxpY2F0 aW9uIHN0b3JhZ2UuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRv IHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ID4gKyAgQHBhcmFtW2luXSAgTmljICBB IHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gPiAr DQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0 ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiA+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEg dGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ID4gKyAgQHJldHZhbCBF RklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBl cnJvci4NCj4gPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBh cmFtZXRlcnMgaGFzIGFuIGludmFsaWQNCj4gdmFsdWUuDQo+ID4gKyAgQHJldHZhbCBFRklfVU5T VVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gPiArKiovDQo+ID4gK3R5cGVkZWYNCj4g PiArRUZJX1NUQVRVUw0KPiA+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9SRUNF SVZFKSgNCj4gPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4gPiArICBJTiAgTklDX0RBVEEg ICAgKk5pYw0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGlzIGNvbW1hbmQg cmVzZXRzIHRoZSBuZXR3b3JrIGFkYXB0ZXIgYW5kIGluaXRpYWxpemVzIFVOREkgdXNpbmcNCj4g PiArICB0aGUgcGFyYW1ldGVycyBzdXBwbGllZCBpbiB0aGUgQ1BCLg0KPiA+ICsNCj4gPiArICBA cGFyYW1baW5dICAgICAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBi bG9jay4NCj4gPiArICBAcGFyYW1baW4sIG91dF0gTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdv cmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiA+ ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVj dXRpbmcgdGhlIHJlcXVlc3QuDQo+ID4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAg VGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gPiArICBAcmV0dmFs IEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFs aWQNCj4gdmFsdWUuDQo+ID4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1 cHBvcnRlZC4NCj4gPiArKiovDQo+ID4gK3R5cGVkZWYNCj4gPiArRUZJX1NUQVRVUw0KPiA+ICso RUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfSU5JVElBTElaRSkoDQo+ID4gKyAgSU4gICAgICBQ WEVfQ0RCICAgKkNkYiwNCj4gPiArICBJTiBPVVQgIE5JQ19EQVRBICAqTmljDQo+ID4gKyAgKTsN Cj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIHJlYWQgYW5k IGNsZWFyIHRoZSBOSUMgdHJhZmZpYyBzdGF0aXN0aWNzLg0KPiA+ICsNCj4gPiArICBAcGFyYW1b aW5dICBOaWMgICAgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxl ciBkYXRhLg0KPiA+ICsgIEBwYXJhbVtpbl0gIERiQWRkciAgRGF0YSBCbG9jayBBZGRyZXNzLg0K PiA+ICsgIEBwYXJhbVtpbl0gIERiU2l6ZSAgRGF0YSBCbG9jayBTaXplLg0KPiA+ICsNCj4gPiAr ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNj ZXNzZnVsbHkuDQo+ID4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0 IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gPiArICBAcmV0dmFsIEVGSV9ERVZJ Q0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0K PiA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVy cyBoYXMgYW4gaW52YWxpZA0KPiB2YWx1ZS4NCj4gPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRF RCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiA+ICsqKi8NCj4gPiArdHlwZWRlZg0KPiA+ICtFRklf U1RBVFVTDQo+ID4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9TVEFUSVNUSUNTKSgNCj4g PiArICBJTiAgTklDX0RBVEEgICAgKk5pYywNCj4gPiArICBJTiAgVUlOVDY0ICAgICAgRGJBZGRy LA0KPiA+ICsgIElOICBVSU5UMTYgICAgICBEYlNpemUNCj4gPiArICApOw0KPiA+ICsNCj4gPiAr LyoqDQo+ID4gKyAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIG1hbmFnZSBhIFVTQiBkZXZpY2Ug d2l0aCB0aGUgYnVsayB0cmFuc2ZlciBwaXBlLg0KPiBUaGUgZW5kcG9pbnQgaXMgQnVsayBpbi4N Cj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgIENkYiAgICAgICAgICAgQSBwb2ludGVyIHRv IHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgIFRo aXMgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZQ0KPiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9D T0wgaW5zdGFuY2UuDQo+ID4gKyAgQHBhcmFtW2luLCBvdXRdIFBhY2tldCAgICAgICAgQSBwb2lu dGVyIHRvIHRoZSBidWZmZXIgb2YgZGF0YSB0aGF0IHdpbGwgYmUNCj4gdHJhbnNtaXR0ZWQgdG8g VVNCDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIG9yIHJlY2Vp dmVkIGZyb20gVVNCIGRldmljZS4NCj4gPiArICBAcGFyYW1baW4sIG91dF0gUGFja2V0TGVuZ3Ro ICBBIHBvaW50ZXIgdG8gdGhlIFBhY2tldExlbmd0aC4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBF RklfU1VDQ0VTUyAgICAgICAgICAgVGhlIGJ1bGsgdHJhbnNmZXIgaGFzIGJlZW4gc3VjY2Vzc2Z1 bGx5DQo+IGV4ZWN1dGVkLg0KPiA+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRo ZSB0cmFuc2ZlciBmYWlsZWQuIFRoZSB0cmFuc2ZlciBzdGF0dXMgaXMNCj4gcmV0dXJuZWQgaW4g c3RhdHVzLg0KPiA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvciBtb3Jl IHBhcmFtZXRlcnMgYXJlIGludmFsaWQuDQo+ID4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09V UkNFUyAgVGhlIHJlcXVlc3QgY291bGQgbm90IGJlIHN1Ym1pdHRlZA0KPiBkdWUgdG8gYSBsYWNr IG9mIHJlc291cmNlcy4NCj4gPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBUaGUg Y29udHJvbCB0cmFuc2ZlciBmYWlscyBkdWUgdG8gdGltZW91dC4NCj4gPiArKiovDQo+ID4gK3R5 cGVkZWYNCj4gPiArRUZJX1NUQVRVUw0KPiA+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRf UkVDRUlWRSkoDQo+ID4gKyAgSU4gICAgIFBYRV9DREIgICAgICAgICAgICAgICAqQ2RiLA0KPiA+ ICsgIElOICAgICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgKlRoaXMsDQo+ID4gKyAgSU4g T1VUIFZPSUQgICAgICAgICAgICAgICAgICAqUGFja2V0LA0KPiA+ICsgIElOIE9VVCBVSU5UTiAg ICAgICAgICAgICAgICAgKlBhY2tldExlbmd0aA0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioN Cj4gPiArICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gbWFuYWdlIGEgVVNCIGRldmljZSB3aXRo IHRoZSBidWxrIHRyYW5zZmVyIHBpcGUuDQo+IFRoZSBlbmRwb2ludCBpcyBCdWxrIG91dC4NCj4g PiArDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgIENkYiAgICAgICAgICAgQSBwb2ludGVyIHRvIHRo ZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgIFRoaXMg ICAgICAgICAgQSBwb2ludGVyIHRvIHRoZQ0KPiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wg aW5zdGFuY2UuDQo+ID4gKyAgQHBhcmFtW2luLCBvdXRdIFBhY2tldCAgICAgICAgQSBwb2ludGVy IHRvIHRoZSBidWZmZXIgb2YgZGF0YSB0aGF0IHdpbGwgYmUNCj4gdHJhbnNtaXR0ZWQgdG8gVVNC DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIG9yIHJlY2VpdmVk IGZyb20gVVNCIGRldmljZS4NCj4gPiArICBAcGFyYW1baW4sIG91dF0gUGFja2V0TGVuZ3RoICBB IHBvaW50ZXIgdG8gdGhlIFBhY2tldExlbmd0aC4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgICAgICAgVGhlIGJ1bGsgdHJhbnNmZXIgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5 DQo+IGV4ZWN1dGVkLg0KPiA+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSB0 cmFuc2ZlciBmYWlsZWQuIFRoZSB0cmFuc2ZlciBzdGF0dXMgaXMNCj4gcmV0dXJuZWQgaW4gc3Rh dHVzLg0KPiA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvciBtb3JlIHBh cmFtZXRlcnMgYXJlIGludmFsaWQuDQo+ID4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNF UyAgVGhlIHJlcXVlc3QgY291bGQgbm90IGJlIHN1Ym1pdHRlZA0KPiBkdWUgdG8gYSBsYWNrIG9m IHJlc291cmNlcy4NCj4gPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBUaGUgY29u dHJvbCB0cmFuc2ZlciBmYWlscyBkdWUgdG8gdGltZW91dC4NCj4gPiArKiovDQo+ID4gK3R5cGVk ZWYNCj4gPiArRUZJX1NUQVRVUw0KPiA+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfVFJB TlNNSVQpKA0KPiA+ICsgIElOICAgICBQWEVfQ0RCICAgICAgICAgICAgICAgKkNkYiwNCj4gPiAr ICBJTiAgICAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICpUaGlzLA0KPiA+ICsgIElOIE9V VCBWT0lEICAgICAgICAgICAgICAgICAgKlBhY2tldCwNCj4gPiArICBJTiBPVVQgVUlOVE4gICAg ICAgICAgICAgICAgICpQYWNrZXRMZW5ndGgNCj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ ID4gKyAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIG1hbmFnZSBhIFVTQiBkZXZpY2Ugd2l0aCBh biBpbnRlcnJ1cHQgdHJhbnNmZXINCj4gcGlwZS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAg VGhpcyAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZQ0KPiBFREtJSV9VU0JfRVRIRVJORVRf UFJPVE9DT0wgaW5zdGFuY2UuDQo+ID4gKyAgQHBhcmFtW2luXSAgSXNOZXdUcmFuc2ZlciAgICAg SWYgVFJVRSwgYSBuZXcgdHJhbnNmZXIgd2lsbCBiZSBzdWJtaXR0ZWQNCj4gdG8gVVNCIGNvbnRy b2xsZXIuIElmDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UsIHRo ZSBpbnRlcnJ1cHQgdHJhbnNmZXIgaXMgZGVsZXRlZCBmcm9tIHRoZSBkZXZpY2Uncw0KPiBpbnRl cnJ1cHQNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2ZlciBxdWV1 ZS4NCj4gPiArICBAcGFyYW1baW5dICBQb2xsaW5nSW50ZXJ2YWwgICBJbmRpY2F0ZXMgdGhlIHBl cmlvZGljIHJhdGUsIGluIG1pbGxpc2Vjb25kcywNCj4gdGhhdCB0aGUgdHJhbnNmZXIgaXMgdG8g YmUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlZC5UaGlzIHBh cmFtZXRlciBpcyByZXF1aXJlZCB3aGVuIElzTmV3VHJhbnNmZXINCj4gaXMgVFJVRS4gVGhlDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbXVzdCBiZSBiZXR3ZWVu IDEgdG8gMjU1LCBvdGhlcndpc2UNCj4gRUZJX0lOVkFMSURfUEFSQU1FVEVSIGlzIHJldHVybmVk Lg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB1bml0cyBhcmUgaW4g bWlsbGlzZWNvbmRzLg0KPiA+ICsgIEBwYXJhbVtpbl0gIFJlcXVlc3QgICAgICAgICAgIEEgcG9p bnRlciB0byB0aGUgRUZJX1VTQl9ERVZJQ0VfUkVRVUVTVA0KPiBkYXRhLg0KPiA+ICsNCj4gPiAr ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgYXN5bmNocm9ub3VzIFVTQiB0cmFu c2ZlciByZXF1ZXN0DQo+IHRyYW5zZmVyIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC4N Cj4gPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgYXN5bmNocm9ub3VzIFVT QiB0cmFuc2ZlciByZXF1ZXN0DQo+IGZhaWxlZC4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICt0eXBl ZGVmDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX0lO VEVSUlVQVCkoDQo+ID4gKyAgSU4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAgKlRoaXMs DQo+ID4gKyAgSU4gQk9PTEVBTiAgICAgICAgICAgICAgICAgSXNOZXdUcmFuc2ZlciwNCj4gPiAr ICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICBQb2xsaW5nSW50ZXJ2YWwsDQo+ID4gKyAgSU4g RUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCAgKlJlcXVlc3QNCj4gPiArICApOw0KPiA+ICsNCj4gPiAr LyoqDQo+ID4gKyAgUmV0cmlldmVzIHRoZSBVU0IgRXRoZXJuZXQgTWFjIEFkZHJlc3MuDQo+ID4g Kw0KPiA+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFREtJ SV9VU0JfRVRIRVJORVRfUFJPVE9DT0wNCj4gaW5zdGFuY2UuDQo+ID4gKyAgQHBhcmFtW291dF0g TWFjQWRkcmVzcyAgICBBIHBvaW50ZXIgdG8gdGhlIGNhbGxlciBhbGxvY2F0ZWQgVVNCDQo+IEV0 aGVybmV0IE1hYyBBZGRyZXNzLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICAgICBUaGUgVVNCIEhlYWRlciBGdW5jdGlvbmFsIGRlc2NyaXB0b3Igd2FzDQo+IHJldHJp ZXZlZCBzdWNjZXNzZnVsbHkuDQo+ID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIg VXNiSGVhZGVyRnVuRGVzY3JpcHRvciBpcyBOVUxMLg0KPiA+ICsgIEByZXR2YWwgRUZJX05PVF9G T1VORCAgICAgICAgIFRoZSBVU0IgSGVhZGVyIEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMNCj4g bm90IGZvdW5kLg0KPiA+ICsqKi8NCj4gPiArdHlwZWRlZg0KPiA+ICtFRklfU1RBVFVTDQo+ID4g KyhFRklBUEkgKkVES0lJX1VTQl9HRVRfRVRIX01BQ19BRERSRVNTKSgNCj4gPiArICBJTiAgRURL SUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICpUaGlzLA0KPiA+ICsgIE9VVCBFRklfTUFDX0FERFJF U1MgICAgICAgKk1hY0FkZHJlc3MNCj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAg UmV0cmlldmVzIHRoZSBVU0IgRXRoZXJuZXQgQnVsayB0cmFuc2ZlciBkYXRhIHNpemUuDQo+ID4g Kw0KPiA+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFREtJ SV9VU0JfRVRIRVJORVRfUFJPVE9DT0wNCj4gaW5zdGFuY2UuDQo+ID4gKyAgQHBhcmFtW291dF0g QnVsa1NpemUgICAgICBBIHBvaW50ZXIgdG8gdGhlIEJ1bGsgdHJhbnNmZXIgZGF0YSBzaXplLg0K PiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgVVNCIEhlYWRl ciBGdW5jdGlvbmFsIGRlc2NyaXB0b3Igd2FzDQo+IHJldHJpZXZlZCBzdWNjZXNzZnVsbHkuDQo+ ID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgVXNiSGVhZGVyRnVuRGVzY3JpcHRv ciBpcyBOVUxMLg0KPiA+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgIFRoZSBVU0Ig SGVhZGVyIEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMNCj4gbm90IGZvdW5kLg0KPiA+ICsqKi8N Cj4gPiArdHlwZWRlZg0KPiA+ICtFRklfU1RBVFVTDQo+ID4gKyhFRklBUEkgKkVES0lJX1VTQl9F VEhfTUFYX0JVTEtfU0laRSkoDQo+ID4gKyAgSU4gIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NP TCAqVGhpcywNCj4gPiArICBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICpCdWxrU2l6ZQ0KPiA+ ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBSZXRyaWV2ZXMgdGhlIFVTQiBIZWFkZXIg ZnVuY3Rpb25hbCBEZXNjcmlwdG9yLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBUaGlzICAg ICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUNCj4gRURLSUlfVVNCX0VUSEVSTkVUX1BS T1RPQ09MIGluc3RhbmNlLg0KPiA+ICsgIEBwYXJhbVtvdXRdIFVzYkhlYWRlckZ1bkRlc2NyaXB0 b3IgQSBwb2ludGVyIHRvIHRoZSBjYWxsZXIgYWxsb2NhdGVkDQo+IFVTQiBIZWFkZXIgRnVuY3Rp b25hbCBEZXNjcmlwdG9yLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg ICAgICBUaGUgVVNCIEhlYWRlciBGdW5jdGlvbmFsIGRlc2NyaXB0b3Igd2FzDQo+IHJldHJpZXZl ZCBzdWNjZXNzZnVsbHkuDQo+ID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgVXNi SGVhZGVyRnVuRGVzY3JpcHRvciBpcyBOVUxMLg0KPiA+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VO RCAgICAgICAgIFRoZSBVU0IgSGVhZGVyIEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMNCj4gbm90 IGZvdW5kLg0KPiA+ICsqKi8NCj4gPiArdHlwZWRlZg0KPiA+ICtFRklfU1RBVFVTDQo+ID4gKyhF RklBUEkgKkVES0lJX1VTQl9IRUFERVJfRlVOQ1RJT05BTF9ERVNDUklQVE9SKSgNCj4gPiArICBJ TiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICAgICAqVGhpcywNCj4gPiArICBPVVQgVVNC X0hFQURFUl9GVU5fREVTQ1JJUFRPUiAqVXNiSGVhZGVyRnVuRGVzY3JpcHRvcg0KPiA+ICsgICk7 DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBSZXRyaWV2ZXMgdGhlIFVTQiBVbmlvbiBmdW5jdGlv bmFsIERlc2NyaXB0b3IuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAg ICAgICAgICAgQSBwb2ludGVyIHRvIHRoZQ0KPiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wg aW5zdGFuY2UuDQo+ID4gKyAgQHBhcmFtW291dF0gVXNiVW5pb25GdW5EZXNjcmlwdG9yICBBIHBv aW50ZXIgdG8gdGhlIGNhbGxlciBhbGxvY2F0ZWQNCj4gVVNCIFVuaW9uIEZ1bmN0aW9uYWwgRGVz Y3JpcHRvci4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhl IFVTQiBVbmlvbiBGdW5jdGlvbmFsIGRlc2NyaXB0b3Igd2FzDQo+IHJldHJpZXZlZCBzdWNjZXNz ZnVsbHkuDQo+ID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgVXNiVW5pb25GdW5E ZXNjcmlwdG9yIGlzIE5VTEwuDQo+ID4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAg VGhlIFVTQiBVbmlvbiBGdW5jdGlvbmFsIGRlc2NyaXB0b3Igd2FzDQo+IG5vdCBmb3VuZC4NCj4g PiArKiovDQo+ID4gK3R5cGVkZWYNCj4gPiArRUZJX1NUQVRVUw0KPiA+ICsoRUZJQVBJICpFREtJ SV9VU0JfVU5JT05fRlVOQ1RJT05BTF9ERVNDUklQVE9SKSgNCj4gPiArICBJTiBFREtJSV9VU0Jf RVRIRVJORVRfUFJPVE9DT0wgICAgICpUaGlzLA0KPiA+ICsgIE9VVCBVU0JfVU5JT05fRlVOX0RF U0NSSVBUT1IgKlVzYlVuaW9uRnVuRGVzY3JpcHRvcg0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsv KioNCj4gPiArICBSZXRyaWV2ZXMgdGhlIFVTQiBFdGhlcm5ldCBmdW5jdGlvbmFsIERlc2NyaXB0 b3IuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgICAgQSBw b2ludGVyIHRvIHRoZQ0KPiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ ID4gKyAgQHBhcmFtW291dF0gVXNiRXRoRnVuRGVzY3JpcHRvciAgICBBIHBvaW50ZXIgdG8gdGhl IGNhbGxlciBhbGxvY2F0ZWQNCj4gVVNCIEV0aGVybmV0IEZ1bmN0aW9uYWwgRGVzY3JpcHRvci4N Cj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIFVTQiBFdGhl cm5ldCBGdW5jdGlvbmFsIGRlc2NyaXB0b3Igd2FzDQo+IHJldHJpZXZlZCBzdWNjZXNzZnVsbHku DQo+ID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgVXNiRXRoRnVuRGVzY3JpcHRv ciBpcyBOVUxMLg0KPiA+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgIFRoZSBVU0Ig RXRoZXJuZXQgRnVuY3Rpb25hbCBkZXNjcmlwdG9yDQo+IHdhcyBub3QgZm91bmQuDQo+ID4gKyoq Lw0KPiA+ICt0eXBlZGVmDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArKEVGSUFQSSAqRURLSUlfVVNC X0VUSEVSTkVUX0ZVTkNUSU9OQUxfREVTQ1JJUFRPUikoDQo+ID4gKyAgSU4gRURLSUlfVVNCX0VU SEVSTkVUX1BST1RPQ09MICAgICAgICAqVGhpcywNCj4gPiArICBPVVQgVVNCX0VUSEVSTkVUX0ZV Tl9ERVNDUklQVE9SICpVc2JFdGhGdW5EZXNjcmlwdG9yDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4g Ky8qKg0KPiA+ICsgIFRoaXMgcmVxdWVzdCBzZXRzIHRoZSBFdGhlcm5ldCBkZXZpY2UgbXVsdGlj YXN0IGZpbHRlcnMgYXMgc3BlY2lmaWVkIGluIHRoZQ0KPiA+ICsgIHNlcXVlbnRpYWwgbGlzdCBv ZiA0OCBiaXQgRXRoZXJuZXQgbXVsdGljYXN0IGFkZHJlc3Nlcy4NCj4gPiArDQo+ID4gKyAgQHBh cmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlDQo+IEVES0lJ X1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gPiArICBAcGFyYW1baW5dICBWYWx1 ZSAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBmaWx0ZXJzLg0KPiA+ICsgIEBwYXJhbVtpbl0g IE1jYXN0QWRkciAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSB2YWx1ZSBvZiB0aGUgbXVs dGljYXN0DQo+IGFkZHJlc3Nlcy4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiA+ICsgIEByZXR2 YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhl IHJlcXVlc3QuDQo+ID4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVl c3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gPiArICBAcmV0dmFsIEVGSV9JTlZB TElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQNCj4gdmFs dWUuDQo+ID4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4N Cj4gPiArKiovDQo+ID4gK3R5cGVkZWYNCj4gPiArRUZJX1NUQVRVUw0KPiA+ICsoRUZJQVBJICpF REtJSV9VU0JfRVRIRVJORVRfU0VUX0VUSF9NVUxUSUNBU1RfRklMVEVSUykoDQo+ID4gKyAgSU4g RURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICpUaGlzLA0KPiA+ICsgIElOIFVJTlQxNiAgICAg ICAgICAgICAgICBWYWx1ZSwNCj4gPiArICBJTiBWT0lEICAgICAgICAgICAgICAgICAgKk1jYXN0 QWRkcg0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGlzIHJlcXVlc3Qgc2V0 cyB1cCB0aGUgc3BlY2lmaWVkIEV0aGVybmV0IHBvd2VyIG1hbmFnZW1lbnQgcGF0dGVybg0KPiBm aWx0ZXIgYXMNCj4gPiArICBkZXNjcmliZWQgaW4gdGhlIGRhdGEgc3RydWN0dXJlLg0KPiA+ICsN Cj4gPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0 aGUNCj4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGluc3RhbmNlLg0KPiA+ICsgIEBwYXJh bVtpbl0gIFZhbHVlICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIGZpbHRlcnMuDQo+ID4gKyAg QHBhcmFtW2luXSAgTGVuZ3RoICAgICAgICAgICAgICAgICBTaXplIG9mIHRoZSBwb3dlciBtYW5h Z2VtZW50IHBhdHRlcm4gZmlsdGVyDQo+IGRhdGEuDQo+ID4gKyAgQHBhcmFtW2luXSAgUGF0dGVy bkZpbHRlciAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIHBvd2VyIG1hbmFnZW1lbnQNCj4gcGF0 dGVybiBmaWx0ZXIgc3RydWN0dXJlLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNT ICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ID4gKyAgQHJl dHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0 aGUgcmVxdWVzdC4NCj4gPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVx dWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiA+ICsgIEByZXR2YWwgRUZJX0lO VkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZA0KPiB2 YWx1ZS4NCj4gPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVk Lg0KPiA+ICsqKi8NCj4gPiArdHlwZWRlZg0KPiA+ICtFRklfU1RBVFVTDQo+ID4gKyhFRklBUEkN Cj4gKkVES0lJX1VTQl9FVEhFUk5FVF9TRVRfRVRIX1BPV0VSX01BTkFHRV9QQVRURVJOX0ZJTFRF UikoDQo+ID4gKyAgSU4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICpUaGlzLA0KPiA+ICsg IElOIFVJTlQxNiAgICAgICAgICAgICAgICBWYWx1ZSwNCj4gPiArICBJTiBVSU5UMTYgICAgICAg ICAgICAgICAgTGVuZ3RoLA0KPiA+ICsgIElOIFZPSUQgICAgICAgICAgICAgICAgICAqUGF0dGVy bkZpbHRlcg0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGlzIHJlcXVlc3Qg cmV0cmlldmVzIHRoZSBzdGF0dXMgb2YgdGhlIHNwZWNpZmllZCBFdGhlcm5ldCBwb3dlcg0KPiBt YW5hZ2VtZW50DQo+ID4gKyAgcGF0dGVybiBmaWx0ZXIgZnJvbSB0aGUgZGV2aWNlLg0KPiA+ICsN Cj4gPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0 aGUNCj4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGluc3RhbmNlLg0KPiA+ICsgIEBwYXJh bVtpbl0gIFZhbHVlICAgICAgICAgICAgICAgICAgVGhlIGZpbHRlciBudW1iZXIuDQo+ID4gKyAg QHBhcmFtW291dF0gUGF0dGVybkFjdGl2ZSAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIHBhdHRl cm4gYWN0aXZlIGJvb2xlYW4uDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gPiArICBAcmV0dmFs IEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSBy ZXF1ZXN0Lg0KPiA+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0 IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ID4gKyAgQHJldHZhbCBFRklfSU5WQUxJ RF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkDQo+IHZhbHVl Lg0KPiA+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ ID4gKyoqLw0KPiA+ICt0eXBlZGVmDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArKEVGSUFQSQ0KPiAq RURLSUlfVVNCX0VUSEVSTkVUX0dFVF9FVEhfUE9XRVJfTUFOQUdFX1BBVFRFUk5fRklMVEVSKSgN Cj4gPiArICBJTiAgIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAqVGhpcywNCj4gPiArICBJ TiAgIFVJTlQxNiAgICAgICAgICAgICAgICBWYWx1ZSwNCj4gPiArICBPVVQgIEJPT0xFQU4gICAg ICAgICAgICAgICAqUGF0dGVybkFjdGl2ZQ0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4g PiArICBUaGlzIHJlcXVlc3QgaXMgdXNlZCB0byBjb25maWd1cmUgZGV2aWNlIEV0aGVybmV0IHBh Y2tldCBmaWx0ZXIgc2V0dGluZ3MuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAg ICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUNCj4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09M IGluc3RhbmNlLg0KPiA+ICsgIEBwYXJhbVtpbl0gIFZhbHVlICAgICAgICAgICAgIFBhY2tldCBG aWx0ZXIgQml0bWFwLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAg ICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ID4gKyAgQHJldHZhbCBFRklf VElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVz dC4NCj4gPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWls ZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFS QU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZA0KPiB2YWx1ZS4NCj4g PiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiA+ICsq Ki8NCj4gPiArdHlwZWRlZg0KPiA+ICtFRklfU1RBVFVTDQo+ID4gKyhFRklBUEkgKkVES0lJX1VT Ql9FVEhFUk5FVF9TRVRfRVRIX1BBQ0tFVF9GSUxURVIpKA0KPiA+ICsgIElOIEVES0lJX1VTQl9F VEhFUk5FVF9QUk9UT0NPTCAqVGhpcywNCj4gPiArICBJTiBVSU5UMTYgICAgICAgICAgICAgICAg VmFsdWUNCj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhpcyByZXF1ZXN0IGlz IHVzZWQgdG8gcmV0cmlldmUgYSBzdGF0aXN0aWMgYmFzZWQgb24gdGhlIGZlYXR1cmUgc2VsZWN0 b3IuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgICBBIHBv aW50ZXIgdG8gdGhlDQo+IEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4g PiArICBAcGFyYW1baW5dICBGZWF0dXJlU2VsZWN0b3IgICAgICAgVmFsdWUgb2YgdGhlIGZlYXR1 cmUgc2VsZWN0b3IuDQo+ID4gKyAgQHBhcmFtW291dF0gU3RhdGlzdGljICAgICAgICAgICAgIEEg cG9pbnRlciB0byB0aGUgMzIgYml0IHVuc2lnbmVkIGludGVnZXIuDQo+ID4gKw0KPiA+ICsgIEBy ZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3Nm dWxseS4NCj4gPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2Nj dXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiA+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9F UlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ID4g KyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhh cyBhbiBpbnZhbGlkDQo+IHZhbHVlLg0KPiA+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAg ICAgIE5vdCBzdXBwb3J0ZWQuDQo+ID4gKyoqLw0KPiA+ICt0eXBlZGVmDQo+ID4gK0VGSV9TVEFU VVMNCj4gPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX0dFVF9FVEhfU1RBVElTVElDKSgN Cj4gPiArICBJTiAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4gPiArICBJ TiAgVUlOVDE2ICAgICAgICAgICAgICAgICBGZWF0dXJlU2VsZWN0b3IsDQo+ID4gKyAgT1VUIFZP SUQgICAgICAgICAgICAgICAgICAgKlN0YXRpc3RpYw0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICt0 eXBlZGVmIHN0cnVjdCB7DQo+ID4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1VORElfR0VUX1NUQVRF ICAgICAgICAgICBVc2JFdGhVbmRpR2V0U3RhdGU7DQo+ID4gKyAgRURLSUlfVVNCX0VUSEVSTkVU X1VORElfU1RBUlQgICAgICAgICAgICAgICBVc2JFdGhVbmRpU3RhcnQ7DQo+ID4gKyAgRURLSUlf VVNCX0VUSEVSTkVUX1VORElfU1RPUCAgICAgICAgICAgICAgICBVc2JFdGhVbmRpU3RvcDsNCj4g PiArICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9HRVRfSU5JVF9JTkZPICAgICAgIFVzYkV0aFVu ZGlHZXRJbml0SW5mbzsNCj4gPiArICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9HRVRfQ09ORklH X0lORk8NCj4gVXNiRXRoVW5kaUdldENvbmZpZ0luZm87DQo+ID4gKyAgRURLSUlfVVNCX0VUSEVS TkVUX1VORElfSU5JVElBTElaRSAgICAgICAgICBVc2JFdGhVbmRpSW5pdGlhbGl6ZTsNCj4gPiAr ICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9SRVNFVCAgICAgICAgICAgICAgIFVzYkV0aFVuZGlS ZXNldDsNCj4gPiArICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9TSFVURE9XTiAgICAgICAgICAg IFVzYkV0aFVuZGlTaHV0ZG93bjsNCj4gPiArICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9JTlRF UlJVUFRfRU5BQkxFDQo+IFVzYkV0aFVuZGlJbnRlcnJ1cHRFbmFibGU7DQo+ID4gKyAgRURLSUlf VVNCX0VUSEVSTkVUX1VORElfUkVDRUlWRV9GSUxURVINCj4gVXNiRXRoVW5kaVJlY2VpdmVGaWx0 ZXI7DQo+ID4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1VORElfU1RBVElPTl9BRERSRVNTDQo+IFVz YkV0aFVuZGlTdGF0aW9uQWRkcmVzczsNCj4gPiArICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9T VEFUSVNUSUNTICAgICAgICAgIFVzYkV0aFVuZGlTdGF0aXN0aWNzOw0KPiA+ICsgIEVES0lJX1VT Ql9FVEhFUk5FVF9VTkRJX01DQVNUX0lQVE9NQUMNCj4gVXNiRXRoVW5kaU1jYXN0SXAyTWFjOw0K PiA+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX05WX0RBVEEgICAgICAgICAgICAgVXNiRXRo VW5kaU52RGF0YTsNCj4gPiArICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9HRVRfU1RBVFVTICAg ICAgICAgIFVzYkV0aFVuZGlHZXRTdGF0dXM7DQo+ID4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1VO RElfRklMTF9IRUFERVIgICAgICAgICBVc2JFdGhVbmRpRmlsbEhlYWRlcjsNCj4gPiArICBFREtJ SV9VU0JfRVRIRVJORVRfVU5ESV9UUkFOU01JVCAgICAgICAgICAgIFVzYkV0aFVuZGlUcmFuc21p dDsNCj4gPiArICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9SRUNFSVZFICAgICAgICAgICAgIFVz YkV0aFVuZGlSZWNlaXZlOw0KPiA+ICt9IEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJOw0KPiA+ICsN Cj4gPiArLy8gVGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBwcm92aWRlcyBzb21lIGJh c2ljIFVTQg0KPiBFdGhlcm5ldCBkZXZpY2UgcmVsZXZhbnQNCj4gPiArLy8gZGVzY3JpcHRvciBh bmQgc3BlY2lmaWMgcmVxdWVzdHMuDQo+ID4gK3N0cnVjdCBfRURLSUlfVVNCX0VUSEVSTkVUX1BS T1RPQ09MIHsNCj4gPiArICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVXNiRXRoVW5kaTsNCj4gPiArICAvLyBmb3IgY2FsbGluZyB0aGUg VU5ESSBjaGlsZCBmdW5jdGlvbnMNCj4gPiArICBFREtJSV9VU0JfRVRIRVJORVRfSU5JVElBTEla RSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNiRXRoSW5pdGlhbGl6ZTsNCj4gPiArICBF REtJSV9VU0JfRVRIRVJORVRfU1RBVElTVElDUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VXNiRXRoU3RhdGlzdGljczsNCj4gPiArICBFREtJSV9VU0JfRVRIRVJORVRfUkVDRUlWRSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNiRXRoUmVjZWl2ZTsNCj4gPiArICBFREtJSV9V U0JfRVRIRVJORVRfVFJBTlNNSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNiRXRo VHJhbnNtaXQ7DQo+ID4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX0lOVEVSUlVQVCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFVzYkV0aEludGVycnVwdDsNCj4gPiArICBFREtJSV9VU0JfR0VU X0VUSF9NQUNfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNiRXRoTWFjQWRk cmVzczsNCj4gPiArICBFREtJSV9VU0JfRVRIX01BWF9CVUxLX1NJWkUgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVXNiRXRoTWF4QnVsa1NpemU7DQo+ID4gKyAgRURLSUlfVVNCX0hFQURF Ul9GVU5DVElPTkFMX0RFU0NSSVBUT1INCj4gVXNiSGVhZGVyRnVuRGVzY3JpcHRvcjsNCj4gPiAr ICBFREtJSV9VU0JfVU5JT05fRlVOQ1RJT05BTF9ERVNDUklQVE9SDQo+IFVzYlVuaW9uRnVuRGVz Y3JpcHRvcjsNCj4gPiArICBFREtJSV9VU0JfRVRIRVJORVRfRlVOQ1RJT05BTF9ERVNDUklQVE9S DQo+IFVzYkV0aEZ1bkRlc2NyaXB0b3I7DQo+ID4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1NFVF9F VEhfTVVMVElDQVNUX0ZJTFRFUlMNCj4gU2V0VXNiRXRoTWNhc3RGaWx0ZXI7DQo+ID4gKyAgRURL SUlfVVNCX0VUSEVSTkVUX1NFVF9FVEhfUE9XRVJfTUFOQUdFX1BBVFRFUk5fRklMVEVSDQo+IFNl dFVzYkV0aFBvd2VyUGF0dGVybkZpbHRlcjsNCj4gPiArICBFREtJSV9VU0JfRVRIRVJORVRfR0VU X0VUSF9QT1dFUl9NQU5BR0VfUEFUVEVSTl9GSUxURVINCj4gR2V0VXNiRXRoUG93ZXJQYXR0ZXJu RmlsdGVyOw0KPiA+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9TRVRfRVRIX1BBQ0tFVF9GSUxURVIN Cj4gU2V0VXNiRXRoUGFja2V0RmlsdGVyOw0KPiA+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9HRVRf RVRIX1NUQVRJU1RJQw0KPiBHZXRVc2JFdGhTdGF0aXN0aWM7DQo+ID4gK307DQo+ID4gKw0KPiA+ ICtleHRlcm4gRUZJX0dVSUQgIGdFZGtJSVVzYkV0aFByb3RvY29sR3VpZDsNCj4gPiArDQo+ID4g KyNlbmRpZg0KPiA+IGRpZmYgLS1naXQgYS9Vc2JOZXR3b3JrUGtnL05ldHdvcmtDb21tb24vQ29t cG9uZW50TmFtZS5jDQo+IGIvVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL0NvbXBvbmVudE5h bWUuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMC4uZTgz NDY5ZTEzMA0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9Vc2JOZXR3b3JrUGtnL05ldHdv cmtDb21tb24vQ29tcG9uZW50TmFtZS5jDQo+ID4gQEAgLTAsMCArMSwyNjMgQEANCj4gPiArLyoq IEBmaWxlDQo+ID4gKyAgVGhpcyBmaWxlIGNvbnRhaW5zIGNvZGUgZm9yIFVTQiBuZXR3b3JrIGNv bW1vbiBkcml2ZXINCj4gPiArICBjb21wb25lbnQgbmFtZSBkZWZpbml0aW9ucw0KPiA+ICsNCj4g PiArICBDb3B5cmlnaHQgKGMpIDIwMjMsIEFtZXJpY2FuIE1lZ2F0cmVuZHMgSW50ZXJuYXRpb25h bCBMTEMuIEFsbCByaWdodHMNCj4gcmVzZXJ2ZWQuPEJSPg0KPiA+ICsgIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gKyoqLw0KPiA+ICsNCj4gPiArI2lu Y2x1ZGUgIkRyaXZlckJpbmRpbmcuaCINCj4gPiArDQo+ID4gK2V4dGVybiBFRklfRFJJVkVSX0JJ TkRJTkdfUFJPVE9DT0wNCj4gZ05ldHdvcmtDb21tb25Ecml2ZXJCaW5kaW5nOw0KPiA+ICsNCj4g PiArR0xPQkFMX1JFTU9WRV9JRl9VTlJFRkVSRU5DRUQgRUZJX1VOSUNPREVfU1RSSU5HX1RBQkxF DQo+IGdOZXR3b3JrQ29tbW9uRHJpdmVyTmFtZVRhYmxlW10gPSB7DQo+ID4gKyAgew0KPiA+ICsg ICAgImVuZztlbiIsDQo+ID4gKyAgICBMIk5ldHdvcmsgQ29tbW9uIERyaXZlciINCj4gPiArICB9 LA0KPiA+ICsgIHsNCj4gPiArICAgIE5VTEwsDQo+ID4gKyAgICBOVUxMDQo+ID4gKyAgfQ0KPiA+ ICt9Ow0KPiA+ICtHTE9CQUxfUkVNT1ZFX0lGX1VOUkVGRVJFTkNFRCBFRklfVU5JQ09ERV9TVFJJ TkdfVEFCTEUNCj4gKmdOZXR3b3JrQ29tbW9uQ29udHJvbGxlck5hbWVUYWJsZSA9IE5VTEw7DQo+ ID4gKw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtOZXR3b3JrQ29tbW9uQ29t cG9uZW50TmFtZUdldERyaXZlck5hbWUgKA0KPiA+ICsgIElOICBFRklfQ09NUE9ORU5UX05BTUVf UFJPVE9DT0wgICpUaGlzLA0KPiA+ICsgIElOICBDSEFSOCAgICAgICAgICAgICAgICAgICAgICAg ICpMYW5ndWFnZSwNCj4gPiArICBPVVQgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAqKkRy aXZlck5hbWUNCj4gPiArICApOw0KPiA+ICsNCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtFRklBUEkN Cj4gPiArTmV0d29ya0NvbW1vbkNvbXBvbmVudE5hbWVHZXRDb250cm9sbGVyTmFtZSAoDQo+ID4g KyAgSU4gRUZJX0NPTVBPTkVOVF9OQU1FX1BST1RPQ09MICAqVGhpcywNCj4gPiArICBJTiBFRklf SEFORExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXIsDQo+ID4gKyAgSU4gRUZJX0hBTkRM RSAgICAgICAgICAgICAgICAgICBDaGlsZEhhbmRsZSAgICAgICAgT1BUSU9OQUwsDQo+ID4gKyAg SU4gQ0hBUjggICAgICAgICAgICAgICAgICAgICAgICAqTGFuZ3VhZ2UsDQo+ID4gKyAgT1VUIENI QVIxNiAgICAgICAgICAgICAgICAgICAgICAqKkNvbnRyb2xsZXJOYW1lDQo+ID4gKyAgKTsNCj4g PiArDQo+ID4gK0dMT0JBTF9SRU1PVkVfSUZfVU5SRUZFUkVOQ0VEDQo+IEVGSV9DT01QT05FTlRf TkFNRV9QUk9UT0NPTCAgZ05ldHdvcmtDb21tb25Db21wb25lbnROYW1lDQo+ID0gew0KPiA+ICsg IE5ldHdvcmtDb21tb25Db21wb25lbnROYW1lR2V0RHJpdmVyTmFtZSwNCj4gPiArICBOZXR3b3Jr Q29tbW9uQ29tcG9uZW50TmFtZUdldENvbnRyb2xsZXJOYW1lLA0KPiA+ICsgICJlbmciDQo+ID4g K307DQo+ID4gKw0KPiA+ICtHTE9CQUxfUkVNT1ZFX0lGX1VOUkVGRVJFTkNFRA0KPiBFRklfQ09N UE9ORU5UX05BTUUyX1BST1RPQ09MDQo+IGdOZXR3b3JrQ29tbW9uQ29tcG9uZW50TmFtZTIgPSB7 DQo+ID4gKw0KPiAoRUZJX0NPTVBPTkVOVF9OQU1FMl9HRVRfRFJJVkVSX05BTUUpTmV0d29ya0Nv bW1vbkNvbXBvbg0KPiBlbnROYW1lR2V0RHJpdmVyTmFtZSwNCj4gPiArDQo+IChFRklfQ09NUE9O RU5UX05BTUUyX0dFVF9DT05UUk9MTEVSX05BTUUpTmV0d29ya0NvbW1vbkNvDQo+IG1wb25lbnRO YW1lR2V0Q29udHJvbGxlck5hbWUsDQo+ID4gKyAgImVuIg0KPiA+ICt9Ow0KPiA+ICsNCj4gPiAr LyoqDQo+ID4gKyAgUmV0cmlldmVzIGEgVW5pY29kZSBzdHJpbmcgdGhhdCBpcyB0aGUgdXNlciBy ZWFkYWJsZSBuYW1lIG9mIHRoZSBkcml2ZXIuDQo+ID4gKw0KPiA+ICsgIFRoaXMgZnVuY3Rpb24g cmV0cmlldmVzIHRoZSB1c2VyIHJlYWRhYmxlIG5hbWUgb2YgYSBkcml2ZXIgaW4gdGhlIGZvcm0g b2YNCj4gYQ0KPiA+ICsgIFVuaWNvZGUgc3RyaW5nLiBJZiB0aGUgZHJpdmVyIHNwZWNpZmllZCBi eSBUaGlzIGhhcyBhIHVzZXIgcmVhZGFibGUgbmFtZSBpbg0KPiA+ICsgIHRoZSBsYW5ndWFnZSBz cGVjaWZpZWQgYnkgTGFuZ3VhZ2UsIHRoZW4gYSBwb2ludGVyIHRvIHRoZSBkcml2ZXIgbmFtZSBp cw0KPiA+ICsgIHJldHVybmVkIGluIERyaXZlck5hbWUsIGFuZCBFRklfU1VDQ0VTUyBpcyByZXR1 cm5lZC4gSWYgdGhlIGRyaXZlcg0KPiBzcGVjaWZpZWQNCj4gPiArICBieSBUaGlzIGRvZXMgbm90 IHN1cHBvcnQgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZSwNCj4gPiArICB0aGVu IEVGSV9VTlNVUFBPUlRFRCBpcyByZXR1cm5lZC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAg VGhpcyAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZQ0KPiBFRklfQ09NUE9ORU5UX05BTUUy X1BST1RPQ09MIG9yDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX0NP TVBPTkVOVF9OQU1FX1BST1RPQ09MIGluc3RhbmNlLg0KPiA+ICsgIEBwYXJhbVtpbl0gIExhbmd1 YWdlICAgICAgICAgIEEgcG9pbnRlciB0byBhIE51bGwtdGVybWluYXRlZCBBU0NJSSBzdHJpbmcN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSBpbmRpY2F0aW5nIHRo ZSBsYW5ndWFnZS4gVGhpcyBpcyB0aGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBsYW5ndWFnZSBvZiB0aGUgZHJpdmVyIG5hbWUgdGhhdCB0aGUgY2FsbGVyIGlzDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGluZywgYW5kIGl0IG11c3Qg bWF0Y2ggb25lIG9mIHRoZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxh bmd1YWdlcyBzcGVjaWZpZWQgaW4gU3VwcG9ydGVkTGFuZ3VhZ2VzLiBUaGUNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2YgbGFuZ3VhZ2VzIHN1cHBvcnRlZCBi eSBhIGRyaXZlciBpcyB1cA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRv IHRoZSBkcml2ZXIgd3JpdGVyLiBMYW5ndWFnZSBpcyBzcGVjaWZpZWQNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbiBSRkMgNDY0NiBvciBJU08gNjM5LTIgbGFuZ3VhZ2Ug Y29kZSBmb3JtYXQuDQo+ID4gKyAgQHBhcmFtW291dF0gRHJpdmVyTmFtZSAgICAgICAgQSBwb2lu dGVyIHRvIHRoZSBVbmljb2RlIHN0cmluZyB0byByZXR1cm4uDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVGhpcyBVbmljb2RlIHN0cmluZyBpcyB0aGUgbmFtZSBvZiB0aGUN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXIgc3BlY2lmaWVkIGJ5 IFRoaXMgaW4gdGhlIGxhbmd1YWdlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3BlY2lmaWVkIGJ5IExhbmd1YWdlLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUND RVNTICAgICAgICAgICBUaGUgVW5pY29kZSBzdHJpbmcgZm9yIHRoZSBEcml2ZXIgc3BlY2lmaWVk IGJ5DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBhbmQgdGhlIGxh bmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZSB3YXMNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm5lZCBpbiBEcml2ZXJOYW1lLg0KPiA+ICsgIEByZXR2YWwgRUZJ X0lOVkFMSURfUEFSQU1FVEVSIExhbmd1YWdlIGlzIE5VTEwuDQo+ID4gKyAgQHJldHZhbCBFRklf SU5WQUxJRF9QQVJBTUVURVIgRHJpdmVyTmFtZSBpcyBOVUxMLg0KPiA+ICsgIEByZXR2YWwgRUZJ X1VOU1VQUE9SVEVEICAgICAgIFRoZSBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgZG9lcyBub3QN Cj4gc3VwcG9ydA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsYW5n dWFnZSBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2UuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NU QVRVUw0KPiA+ICtFRklBUEkNCj4gPiArTmV0d29ya0NvbW1vbkNvbXBvbmVudE5hbWVHZXREcml2 ZXJOYW1lICgNCj4gPiArICBJTiAgRUZJX0NPTVBPTkVOVF9OQU1FX1BST1RPQ09MICAqVGhpcywN Cj4gPiArICBJTiAgQ0hBUjggICAgICAgICAgICAgICAgICAgICAgICAqTGFuZ3VhZ2UsDQo+ID4g KyAgT1VUIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgKipEcml2ZXJOYW1lDQo+ID4gKyAg KQ0KPiA+ICt7DQo+ID4gKyAgcmV0dXJuIExvb2t1cFVuaWNvZGVTdHJpbmcyICgNCj4gPiArICAg ICAgICAgICBMYW5ndWFnZSwNCj4gPiArICAgICAgICAgICBUaGlzLT5TdXBwb3J0ZWRMYW5ndWFn ZXMsDQo+ID4gKyAgICAgICAgICAgZ05ldHdvcmtDb21tb25Ecml2ZXJOYW1lVGFibGUsDQo+ID4g KyAgICAgICAgICAgRHJpdmVyTmFtZSwNCj4gPiArICAgICAgICAgICAoQk9PTEVBTikoVGhpcyA9 PSAmZ05ldHdvcmtDb21tb25Db21wb25lbnROYW1lKQ0KPiA+ICsgICAgICAgICAgICk7DQo+ID4g K30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFJldHJpZXZlcyBhIFVuaWNvZGUgc3RyaW5nIHRo YXQgaXMgdGhlIHVzZXIgcmVhZGFibGUgbmFtZSBvZiB0aGUNCj4gY29udHJvbGxlcg0KPiA+ICsg IHRoYXQgaXMgYmVpbmcgbWFuYWdlZCBieSBhIGRyaXZlci4NCj4gPiArDQo+ID4gKyAgVGhpcyBm dW5jdGlvbiByZXRyaWV2ZXMgdGhlIHVzZXIgcmVhZGFibGUgbmFtZSBvZiB0aGUgY29udHJvbGxl ciBzcGVjaWZpZWQNCj4gYnkNCj4gPiArICBDb250cm9sbGVySGFuZGxlIGFuZCBDaGlsZEhhbmRs ZSBpbiB0aGUgZm9ybSBvZiBhIFVuaWNvZGUgc3RyaW5nLiBJZiB0aGUNCj4gPiArICBkcml2ZXIg c3BlY2lmaWVkIGJ5IFRoaXMgaGFzIGEgdXNlciByZWFkYWJsZSBuYW1lIGluIHRoZSBsYW5ndWFn ZQ0KPiBzcGVjaWZpZWQgYnkNCj4gPiArICBMYW5ndWFnZSwgdGhlbiBhIHBvaW50ZXIgdG8gdGhl IGNvbnRyb2xsZXIgbmFtZSBpcyByZXR1cm5lZCBpbg0KPiBDb250cm9sbGVyTmFtZSwNCj4gPiAr ICBhbmQgRUZJX1NVQ0NFU1MgaXMgcmV0dXJuZWQuICBJZiB0aGUgZHJpdmVyIHNwZWNpZmllZCBi eSBUaGlzIGlzIG5vdA0KPiBjdXJyZW50bHkNCj4gPiArICBtYW5hZ2luZyB0aGUgY29udHJvbGxl ciBzcGVjaWZpZWQgYnkgQ29udHJvbGxlckhhbmRsZSBhbmQgQ2hpbGRIYW5kbGUsDQo+ID4gKyAg dGhlbiBFRklfVU5TVVBQT1JURUQgaXMgcmV0dXJuZWQuICBJZiB0aGUgZHJpdmVyIHNwZWNpZmll ZCBieSBUaGlzIGRvZXMNCj4gbm90DQo+ID4gKyAgc3VwcG9ydCB0aGUgbGFuZ3VhZ2Ugc3BlY2lm aWVkIGJ5IExhbmd1YWdlLCB0aGVuIEVGSV9VTlNVUFBPUlRFRCBpcw0KPiByZXR1cm5lZC4NCj4g PiArDQo+ID4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRo ZQ0KPiBFRklfQ09NUE9ORU5UX05BTUUyX1BST1RPQ09MIG9yDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRUZJX0NPTVBPTkVOVF9OQU1FX1BST1RPQ09MIGluc3RhbmNlLg0K PiA+ICsgIEBwYXJhbVtpbl0gIENvbnRyb2xsZXIgICAgICAgIFRoZSBoYW5kbGUgb2YgYSBjb250 cm9sbGVyIHRoYXQgdGhlIGRyaXZlcg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNwZWNpZmllZCBieSBUaGlzIGlzIG1hbmFnaW5nLiAgVGhpcyBoYW5kbGUNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgdGhlIGNvbnRyb2xsZXIgd2hv c2UgbmFtZSBpcyB0byBiZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl dHVybmVkLg0KPiA+ICsgIEBwYXJhbVtpbl0gIENoaWxkSGFuZGxlICAgICAgIFRoZSBoYW5kbGUg b2YgdGhlIGNoaWxkIGNvbnRyb2xsZXIgdG8gcmV0cmlldmUNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0aGUgbmFtZSBvZi4gIFRoaXMgaXMgYW4gb3B0aW9uYWwgcGFyYW1l dGVyIHRoYXQNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXkgYmUgTlVM TC4gIEl0IHdpbGwgYmUgTlVMTCBmb3IgZGV2aWNlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZHJpdmVycy4gIEl0IHdpbGwgYWxzbyBiZSBOVUxMIGZvciBhIGJ1cyBkcml2 ZXJzDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCB3aXNoIHRvIHJl dHJpZXZlIHRoZSBuYW1lIG9mIHRoZSBidXMNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb250cm9sbGVyLiAgSXQgd2lsbCBub3QgYmUgTlVMTCBmb3IgYSBidXMNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXIgdGhhdCB3aXNoZXMgdG8gcmV0 cmlldmUgdGhlIG5hbWUgb2YgYQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNoaWxkIGNvbnRyb2xsZXIuDQo+ID4gKyAgQHBhcmFtW2luXSAgTGFuZ3VhZ2UgICAgICAgICAg QSBwb2ludGVyIHRvIGEgTnVsbC10ZXJtaW5hdGVkIEFTQ0lJIHN0cmluZw0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5IGluZGljYXRpbmcgdGhlIGxhbmd1YWdlLiAg VGhpcyBpcyB0aGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFn ZSBvZiB0aGUgZHJpdmVyIG5hbWUgdGhhdCB0aGUgY2FsbGVyIGlzDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGluZywgYW5kIGl0IG11c3QgbWF0Y2ggb25lIG9m IHRoZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlcyBzcGVj aWZpZWQgaW4gU3VwcG9ydGVkTGFuZ3VhZ2VzLiBUaGUNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBudW1iZXIgb2YgbGFuZ3VhZ2VzIHN1cHBvcnRlZCBieSBhIGRyaXZlciBp cyB1cA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBkcml2ZXIg d3JpdGVyLiBMYW5ndWFnZSBpcyBzcGVjaWZpZWQgaW4NCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBSRkMgNDY0NiBvciBJU08gNjM5LTIgbGFuZ3VhZ2UgY29kZSBmb3JtYXQu DQo+ID4gKyAgQHBhcmFtW291dF0gQ29udHJvbGxlck5hbWUgICAgQSBwb2ludGVyIHRvIHRoZSBV bmljb2RlIHN0cmluZyB0byByZXR1cm4uDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVGhpcyBVbmljb2RlIHN0cmluZyBpcyB0aGUgbmFtZSBvZiB0aGUNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyIHNwZWNpZmllZCBieSBDb250cm9s bGVySGFuZGxlIGFuZA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoaWxk SGFuZGxlIGluIHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBMYW5ndWFnZSBmcm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mIHRoZSBk cml2ZXINCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgYnkg VGhpcy4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIFVu aWNvZGUgc3RyaW5nIGZvciB0aGUgdXNlciByZWFkYWJsZQ0KPiBuYW1lIGluDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5n dWFnZSBmb3IgdGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVy IHNwZWNpZmllZCBieSBUaGlzIHdhcyByZXR1cm5lZCBpbg0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIERyaXZlck5hbWUuDQo+ID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9Q QVJBTUVURVIgQ29udHJvbGxlckhhbmRsZSBpcyBub3QgYSB2YWxpZA0KPiBFRklfSEFORExFLg0K PiA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIENoaWxkSGFuZGxlIGlzIG5vdCBO VUxMIGFuZCBpdCBpcyBub3QgYQ0KPiB2YWxpZA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEVGSV9IQU5ETEUuDQo+ID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVU RVIgTGFuZ3VhZ2UgaXMgTlVMTC4NCj4gPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRF UiBDb250cm9sbGVyTmFtZSBpcyBOVUxMLg0KPiA+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVE ICAgICAgIFRoZSBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgaXMgbm90DQo+IGN1cnJlbnRseQ0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbmFnaW5nIHRoZSBjb250cm9s bGVyIHNwZWNpZmllZCBieQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENv bnRyb2xsZXJIYW5kbGUgYW5kIENoaWxkSGFuZGxlLg0KPiA+ICsgIEByZXR2YWwgRUZJX1VOU1VQ UE9SVEVEICAgICAgIFRoZSBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgZG9lcyBub3QNCj4gc3Vw cG9ydA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsYW5ndWFnZSBz cGVjaWZpZWQgYnkgTGFuZ3VhZ2UuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0K PiA+ICtFRklBUEkNCj4gPiArTmV0d29ya0NvbW1vbkNvbXBvbmVudE5hbWVHZXRDb250cm9sbGVy TmFtZSAoDQo+ID4gKyAgSU4gIEVGSV9DT01QT05FTlRfTkFNRV9QUk9UT0NPTCAgKlRoaXMsDQo+ ID4gKyAgSU4gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlciwNCj4gPiAr ICBJTiAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBDaGlsZEhhbmRsZSAgICAgICAgT1BU SU9OQUwsDQo+ID4gKyAgSU4gIENIQVI4ICAgICAgICAgICAgICAgICAgICAgICAgKkxhbmd1YWdl LA0KPiA+ICsgIE9VVCBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICoqQ29udHJvbGxlck5h bWUNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICBT dGF0dXM7DQo+ID4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgKkhhbmRsZU5hbWU7DQo+ ID4gKyAgRUZJX1VTQl9JT19QUk9UT0NPTCAgICAgICAgKlVzYklvOw0KPiA+ICsgIEVGSV9VU0Jf REVWSUNFX0RFU0NSSVBUT1IgIERldkRlc2M7DQo+ID4gKw0KPiA+ICsgIGlmICghTGFuZ3VhZ2Ug fHwgIUNvbnRyb2xsZXJOYW1lKSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1F VEVSOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYgKENoaWxkSGFuZGxlID09IE5VTEwpIHsN Cj4gPiArICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiAr ICAvLw0KPiA+ICsgIC8vIE1ha2Ugc3VyZSB0aGlzIGRyaXZlciBpcyBjdXJyZW50bHkgbWFuYWdp bmcgQ29udHJvbGxlckhhbmRsZQ0KPiA+ICsgIC8vDQo+ID4gKyAgU3RhdHVzID0gRWZpVGVzdE1h bmFnZWREZXZpY2UgKA0KPiA+ICsgICAgICAgICAgICAgQ29udHJvbGxlciwNCj4gPiArICAgICAg ICAgICAgIGdOZXR3b3JrQ29tbW9uRHJpdmVyQmluZGluZy5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0K PiA+ICsgICAgICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZA0KPiA+ICsgICAgICAg ICAgICAgKTsNCj4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICByZXR1 cm4gU3RhdHVzOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBNYWtlIHN1 cmUgdGhpcyBkcml2ZXIgcHJvZHVjZWQgQ2hpbGRIYW5kbGUNCj4gPiArICAvLw0KPiA+ICsgIFN0 YXR1cyA9IEVmaVRlc3RDaGlsZEhhbmRsZSAoDQo+ID4gKyAgICAgICAgICAgICBDb250cm9sbGVy LA0KPiA+ICsgICAgICAgICAgICAgQ2hpbGRIYW5kbGUsDQo+ID4gKyAgICAgICAgICAgICAmZ0Vk a0lJVXNiRXRoUHJvdG9jb2xHdWlkDQo+ID4gKyAgICAgICAgICAgICApOw0KPiA+ICsgIGlmIChF RklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgIHJldHVybiBTdGF0dXM7DQo+ID4gKyAgfQ0K PiA+ICsNCj4gPiArICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sIChDb250cm9sbGVyLCAm Z0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KPiAoVk9JRCAqKikmVXNiSW8pOw0KPiA+ICsNCj4gPiAr ICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgU3RhdHVzID0gVXNiSW8tPlVz YkdldERldmljZURlc2NyaXB0b3IgKFVzYklvLCAmRGV2RGVzYyk7DQo+ID4gKyAgICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICAgIHJldHVybiBTdGF0dXM7DQo+ID4gKyAgICB9 DQo+ID4gKw0KPiA+ICsgICAgU3RhdHVzID0gVXNiSW8tPlVzYkdldFN0cmluZ0Rlc2NyaXB0b3Ig KFVzYklvLCAweDQwOSwNCj4gRGV2RGVzYy5TdHJNYW51ZmFjdHVyZXIsICZIYW5kbGVOYW1lKTsN Cj4gPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgICAgcmV0dXJuIFN0 YXR1czsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICAqQ29udHJvbGxlck5hbWUgPSBIYW5k bGVOYW1lOw0KPiA+ICsNCj4gPiArICAgIGlmIChnTmV0d29ya0NvbW1vbkNvbnRyb2xsZXJOYW1l VGFibGUgIT0gTlVMTCkgew0KPiA+ICsgICAgICBGcmVlVW5pY29kZVN0cmluZ1RhYmxlIChnTmV0 d29ya0NvbW1vbkNvbnRyb2xsZXJOYW1lVGFibGUpOw0KPiA+ICsgICAgICBnTmV0d29ya0NvbW1v bkNvbnRyb2xsZXJOYW1lVGFibGUgPSBOVUxMOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAg IFN0YXR1cyA9IEFkZFVuaWNvZGVTdHJpbmcyICgNCj4gPiArICAgICAgICAgICAgICAgImVuZyIs DQo+ID4gKyAgICAgICAgICAgICAgIGdOZXR3b3JrQ29tbW9uQ29tcG9uZW50TmFtZS5TdXBwb3J0 ZWRMYW5ndWFnZXMsDQo+ID4gKyAgICAgICAgICAgICAgICZnTmV0d29ya0NvbW1vbkNvbnRyb2xs ZXJOYW1lVGFibGUsDQo+ID4gKyAgICAgICAgICAgICAgIEhhbmRsZU5hbWUsDQo+ID4gKyAgICAg ICAgICAgICAgIFRSVUUNCj4gPiArICAgICAgICAgICAgICAgKTsNCj4gPiArICAgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgICAgcmV0dXJuIFN0YXR1czsNCj4gPiArICAgIH0N Cj4gPiArDQo+ID4gKyAgICBTdGF0dXMgPSBBZGRVbmljb2RlU3RyaW5nMiAoDQo+ID4gKyAgICAg ICAgICAgICAgICJlbiIsDQo+ID4gKyAgICAgICAgICAgICAgIGdOZXR3b3JrQ29tbW9uQ29tcG9u ZW50TmFtZTIuU3VwcG9ydGVkTGFuZ3VhZ2VzLA0KPiA+ICsgICAgICAgICAgICAgICAmZ05ldHdv cmtDb21tb25Db250cm9sbGVyTmFtZVRhYmxlLA0KPiA+ICsgICAgICAgICAgICAgICBIYW5kbGVO YW1lLA0KPiA+ICsgICAgICAgICAgICAgICBGQUxTRQ0KPiA+ICsgICAgICAgICAgICAgICApOw0K PiA+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgICByZXR1cm4gU3Rh dHVzOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIHJldHVybiBMb29rdXBVbmljb2RlU3Ry aW5nMiAoDQo+ID4gKyAgICAgICAgICAgICBMYW5ndWFnZSwNCj4gPiArICAgICAgICAgICAgIFRo aXMtPlN1cHBvcnRlZExhbmd1YWdlcywNCj4gPiArICAgICAgICAgICAgIGdOZXR3b3JrQ29tbW9u Q29udHJvbGxlck5hbWVUYWJsZSwNCj4gPiArICAgICAgICAgICAgIENvbnRyb2xsZXJOYW1lLA0K PiA+ICsgICAgICAgICAgICAgKEJPT0xFQU4pKFRoaXMgPT0gJmdOZXR3b3JrQ29tbW9uQ29tcG9u ZW50TmFtZSkNCj4gPiArICAgICAgICAgICAgICk7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBy ZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiA+ICt9DQo+ID4gZGlmZiAtLWdpdCBhL1VzYk5ldHdv cmtQa2cvTmV0d29ya0NvbW1vbi9Ecml2ZXJCaW5kaW5nLmMNCj4gYi9Vc2JOZXR3b3JrUGtnL05l dHdvcmtDb21tb24vRHJpdmVyQmluZGluZy5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4g PiBpbmRleCAwMDAwMDAwMDAwLi4yM2I3OTEzNjIwDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsr KyBiL1VzYk5ldHdvcmtQa2cvTmV0d29ya0NvbW1vbi9Ecml2ZXJCaW5kaW5nLmMNCj4gPiBAQCAt MCwwICsxLDU5NSBAQA0KPiA+ICsvKiogQGZpbGUNCj4gPiArICBUaGlzIGZpbGUgY29udGFpbnMg Y29kZSBmb3IgVVNCIG5ldHdvcmsgYmluZGluZyBkcml2ZXINCj4gPiArDQo+ID4gKyAgQ29weXJp Z2h0IChjKSAyMDIzLCBBbWVyaWNhbiBNZWdhdHJlbmRzIEludGVybmF0aW9uYWwgTExDLiBBbGwg cmlnaHRzDQo+IHJlc2VydmVkLjxCUj4NCj4gPiArICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog QlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ICsqKi8NCj4gPiArDQo+ID4gKyNpbmNsdWRlICJEcml2 ZXJCaW5kaW5nLmgiDQo+ID4gKw0KPiA+ICtQWEVfU1dfVU5ESSAgKmdQeGUgPSBOVUxMOw0KPiA+ ICtOSUNfREVWSUNFICAgKmdMYW5EZXZpY2VMaXN0W01BWF9MQU5fSU5URVJGQUNFXTsNCj4gPiAr VUlOVDMyICAgICAgIGdSYXRlTGltaXRpbmdDcmVkaXQ7DQo+ID4gK1VJTlQzMiAgICAgICBnUmF0 ZUxpbWl0aW5nUG9sbFRpbWVyOw0KPiA+ICtCT09MRUFOICAgICAgZ1JhdGVMaW1pdGluZ0VuYWJs ZTsNCj4gPiArDQo+ID4gK0VGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgZ05ldHdvcmtDb21t b25Ecml2ZXJCaW5kaW5nID0gew0KPiA+ICsgIE5ldHdvcmtDb21tb25TdXBwb3J0ZWQsDQo+ID4g KyAgTmV0d29ya0NvbW1vbkRyaXZlclN0YXJ0LA0KPiA+ICsgIE5ldHdvcmtDb21tb25Ecml2ZXJT dG9wLA0KPiA+ICsgIE5FVFdPUktfQ09NTU9OX0RSSVZFUl9WRVJTSU9OLA0KPiA+ICsgIE5VTEws DQo+ID4gKyAgTlVMTA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgQ3JlYXRlIE1B QyBEZXZpY2UgUGF0aA0KPiA+ICsNCj4gPiArICBAcGFyYW1baW4sIG91dF0gRGV2ICAgICAgICAg ICAgIEEgcG9pbnRlciB0byB0aGUNCj4gRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MIGluc3RhbmNl Lg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICBCYXNlRGV2ICAgICAgICAgQSBwb2ludGVyIHRvIHRo ZQ0KPiBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ID4gKyAgQHBhcmFtW2lu XSAgICAgIE5pYyAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNl IGNvbnRyb2xsZXINCj4gZGF0YS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JF U09VUkNFUyAgICBUaGUgZGV2aWNlIHBhdGggY291bGQgbm90IGJlDQo+IGNyZWF0ZWQgc3VjY2Vz c2Z1bGx5IGR1ZSB0byBhIGxhY2sgb2YgcmVzb3VyY2VzLg0KPiA+ICsgIEByZXR2YWwgRUZJX1NV Q0NFU1MgICAgICAgICAgICAgTUFDIGRldmljZSBwYXRoIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5Lg0K PiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArQ3JlYXRlTWFjRGV2aWNlUGF0 aCAoDQo+ID4gKyAgSU4gT1VUICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICoqRGV2LA0KPiA+ ICsgIElOICAgICAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAqQmFzZURldiwNCj4gPiArICBJ TiAgICAgIE5JQ19EQVRBICAgICAgICAgICAgICAgICAgKk5pYw0KPiA+ICsgICkNCj4gPiArew0K PiA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+ICsgIE1BQ19BRERS X0RFVklDRV9QQVRIICAgICAgTWFjQWRkck5vZGU7DQo+ID4gKyAgRUZJX0RFVklDRV9QQVRIX1BS T1RPQ09MICAqRW5kTm9kZTsNCj4gPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICpEZXZp Y2VQYXRoOw0KPiA+ICsgIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgVG90YWxMZW5ndGg7DQo+ ID4gKyAgVUlOVDE2ICAgICAgICAgICAgICAgICAgICBCYXNlTGVuZ3RoOw0KPiA+ICsNCj4gPiAr ICBaZXJvTWVtICgmTWFjQWRkck5vZGUsIHNpemVvZiAoTUFDX0FERFJfREVWSUNFX1BBVEgpKTsN Cj4gPiArICBDb3B5TWVtICgmTWFjQWRkck5vZGUuTWFjQWRkcmVzcywgJk5pYy0+TWFjQWRkciwg c2l6ZW9mDQo+IChFRklfTUFDX0FERFJFU1MpKTsNCj4gPiArDQo+ID4gKyAgTWFjQWRkck5vZGUu SGVhZGVyLlR5cGUgICAgICA9IE1FU1NBR0lOR19ERVZJQ0VfUEFUSDsNCj4gPiArICBNYWNBZGRy Tm9kZS5IZWFkZXIuU3ViVHlwZSAgID0gTVNHX01BQ19BRERSX0RQOw0KPiA+ICsgIE1hY0FkZHJO b2RlLkhlYWRlci5MZW5ndGhbMF0gPSAoVUlOVDgpc2l6ZW9mIChNYWNBZGRyTm9kZSk7DQo+ID4g KyAgTWFjQWRkck5vZGUuSGVhZGVyLkxlbmd0aFsxXSA9IDA7DQo+ID4gKw0KPiA+ICsgIEVuZE5v ZGUgPSBCYXNlRGV2Ow0KPiA+ICsNCj4gPiArICB3aGlsZSAoIUlzRGV2aWNlUGF0aEVuZCAoRW5k Tm9kZSkpIHsNCj4gPiArICAgIEVuZE5vZGUgPSBOZXh0RGV2aWNlUGF0aE5vZGUgKEVuZE5vZGUp Ow0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgQmFzZUxlbmd0aCAgPSAoVUlOVDE2KSgoVUlOVE4p KEVuZE5vZGUpIC0gKFVJTlROKShCYXNlRGV2KSk7DQo+ID4gKyAgVG90YWxMZW5ndGggPSAoVUlO VDE2KShCYXNlTGVuZ3RoICsgc2l6ZW9mIChNYWNBZGRyTm9kZSkgKyBzaXplb2YNCj4gKEVGSV9E RVZJQ0VfUEFUSF9QUk9UT0NPTCkpOw0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBnQlMtPkFsbG9j YXRlUG9vbCAoRWZpQm9vdFNlcnZpY2VzRGF0YSwgVG90YWxMZW5ndGgsIChWT0lEDQo+ICoqKSZE ZXZpY2VQYXRoKTsNCj4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICBy ZXR1cm4gU3RhdHVzOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgKkRldiA9IChFRklfREVWSUNF X1BBVEhfUFJPVE9DT0wgKilEZXZpY2VQYXRoOw0KPiA+ICsgIENvcHlNZW0gKERldmljZVBhdGgs IChDSEFSOCAqKUJhc2VEZXYsIEJhc2VMZW5ndGgpOw0KPiA+ICsgIERldmljZVBhdGggKz0gQmFz ZUxlbmd0aDsNCj4gPiArICBDb3B5TWVtIChEZXZpY2VQYXRoLCAoQ0hBUjggKikmTWFjQWRkck5v ZGUsIHNpemVvZg0KPiAoTWFjQWRkck5vZGUpKTsNCj4gPiArICBEZXZpY2VQYXRoICs9IHNpemVv ZiAoTWFjQWRkck5vZGUpOw0KPiA+ICsgIENvcHlNZW0gKERldmljZVBhdGgsIChDSEFSOCAqKUVu ZE5vZGUsIHNpemVvZg0KPiAoRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MKSk7DQo+ID4gKw0KPiA+ ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAg TmV0d29yayBDb21tb24gRHJpdmVyIEJpbmRpbmcgU3VwcG9ydC4NCj4gPiArDQo+ID4gKyAgQHBh cmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICAgICAgUHJvdG9jb2wgaW5zdGFuY2UgcG9pbnRl ci4NCj4gPiArICBAcGFyYW1baW5dICBDb250cm9sbGVySGFuZGxlICAgICAgICBIYW5kbGUgb2Yg ZGV2aWNlIHRvIHRlc3QuDQo+ID4gKyAgQHBhcmFtW2luXSAgUmVtYWluaW5nRGV2aWNlUGF0aCAg ICAgT3B0aW9uYWwgcGFyYW1ldGVyIHVzZSB0byBwaWNrIGENCj4gc3BlY2lmaWMgY2hpbGQNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UgdG8gc3RhcnQu DQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgICAgIFRoaXMg ZHJpdmVyIHN1cHBvcnRzIHRoaXMgZGV2aWNlLg0KPiA+ICsgIEByZXR2YWwgRUZJX0FMUkVBRFlf U1RBUlRFRCAgICAgICAgIFRoaXMgZHJpdmVyIGlzIGFscmVhZHkgcnVubmluZyBvbiB0aGlzDQo+ IGRldmljZS4NCj4gPiArICBAcmV0dmFsIG90aGVyICAgICAgICAgICAgICAgICAgICAgICBUaGlz IGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZGV2aWNlLg0KPiA+ICsNCj4gPiArKiovDQo+ ID4gK0VGSV9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ID4gK05ldHdvcmtDb21tb25TdXBwb3J0ZWQg KA0KPiA+ICsgIElOIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgKlRoaXMsDQo+ID4gKyAg SU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiA+ICsg IElOIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgKlJlbWFpbmluZ0RldmljZVBhdGgNCj4g PiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgIFN0YXR1 czsNCj4gPiArICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpVc2JFdGg7DQo+ID4gKw0K PiA+ICsgIFN0YXR1cyA9IGdCUy0+T3BlblByb3RvY29sICgNCj4gPiArICAgICAgICAgICAgICAg ICAgQ29udHJvbGxlckhhbmRsZSwNCj4gPiArICAgICAgICAgICAgICAgICAgJmdFZGtJSVVzYkV0 aFByb3RvY29sR3VpZCwNCj4gPiArICAgICAgICAgICAgICAgICAgKFZPSUQgKiopJlVzYkV0aCwN Cj4gPiArICAgICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gPiAr ICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gPiArICAgICAgICAgICAgICAg ICAgRUZJX09QRU5fUFJPVE9DT0xfQllfRFJJVkVSDQo+ID4gKyAgICAgICAgICAgICAgICAgICk7 DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgcmV0dXJuIFN0YXR1 czsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ID4gKyAg ICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ID4gKyAgICAgICAgICZnRWRrSUlVc2JFdGhQcm90 b2NvbEd1aWQsDQo+ID4gKyAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ID4g KyAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gPiArICAgICAgICAgKTsNCj4gPiArICByZXR1 cm4gU3RhdHVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBOZXR3b3JrIENvbW1v biBEcml2ZXIgQmluZGluZyBTdGFydC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgVGhpcyAg ICAgICAgICAgICAgICAgICAgUHJvdG9jb2wgaW5zdGFuY2UgcG9pbnRlci4NCj4gPiArICBAcGFy YW1baW5dICBDb250cm9sbGVySGFuZGxlICAgICAgICBIYW5kbGUgb2YgZGV2aWNlIHRvIGJpbmQg ZHJpdmVyIHRvLg0KPiA+ICsgIEBwYXJhbVtpbl0gIFJlbWFpbmluZ0RldmljZVBhdGggICAgIE9w dGlvbmFsIHBhcmFtZXRlciB1c2UgdG8gcGljayBhDQo+IHNwZWNpZmljIGNoaWxkDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIHRvIHN0YXJ0Lg0KPiA+ ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgICBUaGlzIGRyaXZl ciBpcyBhZGRlZCB0byBDb250cm9sbGVySGFuZGxlDQo+ID4gKyAgQHJldHZhbCBFRklfREVWSUNF X0VSUk9SICAgICAgICAgICAgVGhpcyBkcml2ZXIgY291bGQgbm90IGJlIHN0YXJ0ZWQgZHVlIHRv DQo+IGEgZGV2aWNlIGVycm9yDQo+ID4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAg ICAgICAgVGhlIGRyaXZlciBjb3VsZCBub3QgaW5zdGFsbA0KPiBzdWNjZXNzZnVsbHkgZHVlIHRv IGEgbGFjayBvZiByZXNvdXJjZXMuDQo+ID4gKyAgQHJldHZhbCBvdGhlciAgICAgICAgICAgICAg ICAgICAgICAgVGhpcyBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGRldmljZQ0KPiA+ICsN Cj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ID4gK05ldHdvcmtDb21t b25Ecml2ZXJTdGFydCAoDQo+ID4gKyAgSU4gRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICAq VGhpcywNCj4gPiArICBJTiBFRklfSEFORExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJI YW5kbGUsDQo+ID4gKyAgSU4gRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAqUmVtYWluaW5n RGV2aWNlUGF0aA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAg ICAgICAgICAgU3RhdHVzOw0KPiA+ICsgIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgKlVz YkV0aFBhdGg7DQo+ID4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVXNiRXRoOw0K PiA+ICsgIEVGSV9NQUNfQUREUkVTUyAgICAgICAgICAgICAgTWFjQWRkcmVzczsNCj4gPiArICBV SU5UTiAgICAgICAgICAgICAgICAgICAgICAgIEJ1bGtEYXRhU2l6ZTsNCj4gPiArICBOSUNfREVW SUNFICAgICAgICAgICAgICAgICAgICpOaWNEZXZpY2U7DQo+ID4gKyAgVUlOVDggICAgICAgICAg ICAgICAgICAgICAgICAqVG1wUHhlUG9pbnRlcjsNCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gZ0JT LT5PcGVuUHJvdG9jb2wgKA0KPiA+ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxl LA0KPiA+ICsgICAgICAgICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkLA0KPiA+ ICsgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmVXNiRXRoLA0KPiA+ICsgICAgICAgICAgICAg ICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiA+ICsgICAgICAgICAgICAgICAgICBD b250cm9sbGVySGFuZGxlLA0KPiA+ICsgICAgICAgICAgICAgICAgICBFRklfT1BFTl9QUk9UT0NP TF9CWV9EUklWRVINCj4gPiArICAgICAgICAgICAgICAgICAgKTsNCj4gPiArICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiA+ICsgIH0NCj4gPiAr DQo+ID4gKyAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KPiA+ICsgICAgICAgICAgICAg ICAgICBDb250cm9sbGVySGFuZGxlLA0KPiA+ICsgICAgICAgICAgICAgICAgICAmZ0VmaURldmlj ZVBhdGhQcm90b2NvbEd1aWQsDQo+ID4gKyAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZVc2JF dGhQYXRoLA0KPiA+ICsgICAgICAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxl LA0KPiA+ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiA+ICsgICAgICAg ICAgICAgICAgICBFRklfT1BFTl9QUk9UT0NPTF9CWV9EUklWRVINCj4gPiArICAgICAgICAgICAg ICAgICAgKTsNCj4gPiArDQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsg ICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxl LA0KPiA+ICsgICAgICAgICAgICZnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQsDQo+ID4gKyAgICAg ICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gPiArICAgICAgICAgICBDb250cm9s bGVySGFuZGxlDQo+ID4gKyAgICAgICAgICAgKTsNCj4gPiArICAgIHJldHVybiBTdGF0dXM7DQo+ ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBaZXJvTWVtICgmTWFjQWRkcmVzcywgc2l6ZW9mIChFRklf TUFDX0FERFJFU1MpKTsNCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gVXNiRXRoLT5Vc2JFdGhNYWNB ZGRyZXNzIChVc2JFdGgsICZNYWNBZGRyZXNzKTsNCj4gPiArICBBU1NFUlRfRUZJX0VSUk9SIChT dGF0dXMpOw0KPiA+ICsgIFN0YXR1cyA9IFVzYkV0aC0+VXNiRXRoTWF4QnVsa1NpemUgKFVzYkV0 aCwgJkJ1bGtEYXRhU2l6ZSk7DQo+ID4gKw0KPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gPiArICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ID4gKyAgICAgICAgICAgQ29udHJv bGxlckhhbmRsZSwNCj4gPiArICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQs DQo+ID4gKyAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gPiArICAgICAg ICAgICBDb250cm9sbGVySGFuZGxlDQo+ID4gKyAgICAgICAgICAgKTsNCj4gPiArICAgIGdCUy0+ Q2xvc2VQcm90b2NvbCAoDQo+ID4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gPiAr ICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkLA0KPiA+ICsgICAgICAgICAgIFRo aXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ID4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRs ZQ0KPiA+ICsgICAgICAgICAgICk7DQo+ID4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiA+ICsgIH0N Cj4gPiArDQo+ID4gKyAgTmljRGV2aWNlID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChOSUNf REVWSUNFKSArIEJ1bGtEYXRhU2l6ZSArDQo+IDQwOTYpOw0KPiA+ICsgIGlmICghTmljRGV2aWNl KSB7DQo+ID4gKyAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiA+ICsgICAgICAgICAgIENvbnRy b2xsZXJIYW5kbGUsDQo+ID4gKyAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlk LA0KPiA+ICsgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ID4gKyAgICAg ICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiA+ICsgICAgICAgICAgICk7DQo+ID4gKyAgICBnQlMt PkNsb3NlUHJvdG9jb2wgKA0KPiA+ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ID4g KyAgICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCj4gPiArICAgICAgICAgICBU aGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiA+ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5k bGUNCj4gPiArICAgICAgICAgICApOw0KPiA+ICsgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VS Q0VTOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgLy8gZm9yIGFsaWdubWVudCBhZGp1c3RtZW50 DQo+ID4gKyAgaWYgKGdQeGUgPT0gTlVMTCkgew0KPiA+ICsgICAgVG1wUHhlUG9pbnRlciA9IE5V TEw7DQo+ID4gKyAgICBUbXBQeGVQb2ludGVyID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChQ WEVfU1dfVU5ESSkgKyAxNik7DQo+ID4gKyAgICBpZiAoIVRtcFB4ZVBvaW50ZXIpIHsNCj4gPiAr ICAgICAgaWYgKE5pY0RldmljZSAhPSBOVUxMKSB7DQo+ID4gKyAgICAgICAgRnJlZVBvb2wgKE5p Y0RldmljZSk7DQo+ID4gKyAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgIGdCUy0+Q2xvc2VQcm90 b2NvbCAoDQo+ID4gKyAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiA+ICsgICAgICAg ICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiA+ICsgICAgICAgICAgICAgVGhp cy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gPiArICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5k bGUNCj4gPiArICAgICAgICAgICAgICk7DQo+ID4gKyAgICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAo DQo+ID4gKyAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiA+ICsgICAgICAgICAgICAg JmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCj4gPiArICAgICAgICAgICAgIFRoaXMtPkRyaXZl ckJpbmRpbmdIYW5kbGUsDQo+ID4gKyAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ID4g KyAgICAgICAgICAgICApOw0KPiA+ICsNCj4gPiArICAgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVT T1VSQ0VTOw0KPiA+ICsgICAgfSBlbHNlIHsNCj4gPiArICAgICAgLy8gY2hlY2sgZm9yIHBhcmFn cmFwaCBhbGlnbm1lbnQgaGVyZQ0KPiA+ICsgICAgICBpZiAoKChVSU5UTilUbXBQeGVQb2ludGVy ICYgMHgwRikgIT0gMCkgew0KPiA+ICsgICAgICAgIGdQeGUgPSAoUFhFX1NXX1VOREkgKikoVG1w UHhlUG9pbnRlciArIDgpOw0KPiA+ICsgICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgIGdQeGUg PSAoUFhFX1NXX1VOREkgKilUbXBQeGVQb2ludGVyOw0KPiA+ICsgICAgICB9DQo+ID4gKw0KPiA+ ICsgICAgICBpZiAoIWdQeGUpIHsNCj4gPiArICAgICAgICBpZiAoTmljRGV2aWNlICE9IE5VTEwp IHsNCj4gPiArICAgICAgICAgIEZyZWVQb29sIChOaWNEZXZpY2UpOw0KPiA+ICsgICAgICAgIH0N Cj4gPiArDQo+ID4gKyAgICAgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gPiArICAgICAgICAg ICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gPiArICAgICAgICAgICAgICAgJmdFZmlEZXZpY2VQ YXRoUHJvdG9jb2xHdWlkLA0KPiA+ICsgICAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5n SGFuZGxlLA0KPiA+ICsgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ID4gKyAgICAg ICAgICAgICAgICk7DQo+ID4gKyAgICAgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gPiArICAg ICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gPiArICAgICAgICAgICAgICAgJmdFZGtJ SVVzYkV0aFByb3RvY29sR3VpZCwNCj4gPiArICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmlu ZGluZ0hhbmRsZSwNCj4gPiArICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiA+ICsg ICAgICAgICAgICAgICApOw0KPiA+ICsgICAgICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNF UzsNCj4gPiArICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgUHhlU3RydWN0SW5pdCAoZ1B4ZSk7 DQo+ID4gKyAgICB9DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBOaWNEZXZpY2UtPk5paVByb3Rv Y29sLklkICAgID0gKFVJTlQ2NCkoVUlOVE4pKGdQeGUpOw0KPiA+ICsgIE5pY0RldmljZS0+Tmlp UHJvdG9jb2wuSWZOdW0gPSBnUHhlLT5JRmNudCB8IGdQeGUtPklGY250RXh0IDw8IDg7DQo+ID4g Kw0KPiA+ICsgIFVwZGF0ZU5pY051bSAoJk5pY0RldmljZS0+TmljSW5mbywgZ1B4ZSk7DQo+ID4g Kw0KPiA+ICsgIE5pY0RldmljZS0+TmljSW5mby5TaWduYXR1cmUgPSBOSUNfREFUQV9TSUdOQVRV UkU7DQo+ID4gKw0KPiA+ICsgIE5pY0RldmljZS0+TmljSW5mby5Vc2JFdGggICAgICAgICA9IFVz YkV0aDsNCj4gPiArICBOaWNEZXZpY2UtPk5pY0luZm8uTWF4U2VnbWVudFNpemUgPSAoVUlOVDE2 KUJ1bGtEYXRhU2l6ZTsNCj4gPiArICBOaWNEZXZpY2UtPk5pY0luZm8uQ2FibGVEZXRlY3QgICAg PSAwOw0KPiA+ICsgIE5pY0RldmljZS0+UmVjZWl2ZUJ1ZmZlciAgICAgICAgICA9IEFMSUdOX1BP SU5URVIgKChWT0lEICopTmljRGV2aWNlLA0KPiA0MDk2KTsNCj4gPiArDQo+ID4gKyAgQ29weU1l bSAoKENIQVI4ICopJihOaWNEZXZpY2UtPk5pY0luZm8uTWFjQWRkciksIChDSEFSOA0KPiAqKSZN YWNBZGRyZXNzLCBzaXplb2YgKE1hY0FkZHJlc3MpKTsNCj4gPiArDQo+ID4gKyAgTmljRGV2aWNl LT5OaWNJbmZvLlR4QnVmZmVyQ291bnQgPSAwOw0KPiA+ICsNCj4gPiArICBpZiAoTmljRGV2aWNl LT5OaWlQcm90b2NvbC5JZk51bSA8IE1BWF9MQU5fSU5URVJGQUNFKSB7DQo+ID4gKyAgICBnTGFu RGV2aWNlTGlzdFtOaWNEZXZpY2UtPk5paVByb3RvY29sLklmTnVtXSA9IE5pY0RldmljZTsNCj4g PiArICB9IGVsc2Ugew0KPiA+ICsgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gPiArICAgICAg ICAgICBDb250cm9sbGVySGFuZGxlLA0KPiA+ICsgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFBy b3RvY29sR3VpZCwNCj4gPiArICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0K PiA+ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gPiArICAgICAgICAgICApOw0KPiA+ ICsgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gPiArICAgICAgICAgICBDb250cm9sbGVySGFu ZGxlLA0KPiA+ICsgICAgICAgICAgICZnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQsDQo+ID4gKyAg ICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gPiArICAgICAgICAgICBDb250 cm9sbGVySGFuZGxlDQo+ID4gKyAgICAgICAgICAgKTsNCj4gPiArDQo+ID4gKyAgICBpZiAoVG1w UHhlUG9pbnRlciAhPSBOVUxMKSB7DQo+ID4gKyAgICAgIEZyZWVQb29sIChUbXBQeGVQb2ludGVy KTsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBpZiAoTmljRGV2aWNlICE9IE5VTEwpIHsN Cj4gPiArICAgICAgRnJlZVBvb2wgKE5pY0RldmljZSk7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ ICsgICAgcmV0dXJuIEVGSV9ERVZJQ0VfRVJST1I7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBT dGF0dXMgPSBDcmVhdGVNYWNEZXZpY2VQYXRoICgNCj4gPiArICAgICAgICAgICAgICZOaWNEZXZp Y2UtPkRldlBhdGgsDQo+ID4gKyAgICAgICAgICAgICBVc2JFdGhQYXRoLA0KPiA+ICsgICAgICAg ICAgICAgJk5pY0RldmljZS0+TmljSW5mbw0KPiA+ICsgICAgICAgICAgICAgKTsNCj4gPiArDQo+ ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgVXBkYXRlTmljTnVtIChO VUxMLCBnUHhlKTsNCj4gPiArICAgIGlmIChUbXBQeGVQb2ludGVyICE9IE5VTEwpIHsNCj4gPiAr ICAgICAgRnJlZVBvb2wgKFRtcFB4ZVBvaW50ZXIpOw0KPiA+ICsgICAgfQ0KPiA+ICsgIH0NCj4g PiArDQo+ID4gKyAgTmljRGV2aWNlLT5TaWduYXR1cmUgICAgICAgICAgICAgICAgID0gVU5ESV9E RVZfU0lHTkFUVVJFOw0KPiA+ICsgIE5pY0RldmljZS0+TmlpUHJvdG9jb2wuUmV2aXNpb24gICAg ICA9DQo+IEVGSV9ORVRXT1JLX0lOVEVSRkFDRV9JREVOVElGSUVSX1BST1RPQ09MX1JFVklTSU9O Ow0KPiA+ICsgIE5pY0RldmljZS0+TmlpUHJvdG9jb2wuVHlwZSAgICAgICAgICA9IEVmaU5ldHdv cmtJbnRlcmZhY2VVbmRpOw0KPiA+ICsgIE5pY0RldmljZS0+TmlpUHJvdG9jb2wuTWFqb3JWZXIg ICAgICA9IFBYRV9ST01JRF9NQUpPUlZFUjsNCj4gPiArICBOaWNEZXZpY2UtPk5paVByb3RvY29s Lk1pbm9yVmVyICAgICAgPSBQWEVfUk9NSURfTUlOT1JWRVI7DQo+ID4gKyAgTmljRGV2aWNlLT5O aWlQcm90b2NvbC5JbWFnZVNpemUgICAgID0gMDsNCj4gPiArICBOaWNEZXZpY2UtPk5paVByb3Rv Y29sLkltYWdlQWRkciAgICAgPSAwOw0KPiA+ICsgIE5pY0RldmljZS0+TmlpUHJvdG9jb2wuSXB2 NlN1cHBvcnRlZCA9IFRSVUU7DQo+ID4gKw0KPiA+ICsgIE5pY0RldmljZS0+TmlpUHJvdG9jb2wu U3RyaW5nSWRbMF0gPSAnVSc7DQo+ID4gKyAgTmljRGV2aWNlLT5OaWlQcm90b2NvbC5TdHJpbmdJ ZFsxXSA9ICdOJzsNCj4gPiArICBOaWNEZXZpY2UtPk5paVByb3RvY29sLlN0cmluZ0lkWzJdID0g J0QnOw0KPiA+ICsgIE5pY0RldmljZS0+TmlpUHJvdG9jb2wuU3RyaW5nSWRbM10gPSAnSSc7DQo+ ID4gKyAgTmljRGV2aWNlLT5EZXZpY2VIYW5kbGUgICAgICAgICAgICA9IE5VTEw7DQo+ID4gKw0K PiA+ICsgIE5pY0RldmljZS0+TmljSW5mby5SYXRlTGltaXRpbmdFbmFibGUgICAgICA9IGdSYXRl TGltaXRpbmdFbmFibGU7DQo+ID4gKyAgTmljRGV2aWNlLT5OaWNJbmZvLlJhdGVMaW1pdGluZ0Ny ZWRpdENvdW50ID0gMDsNCj4gPiArICBOaWNEZXZpY2UtPk5pY0luZm8uUmF0ZUxpbWl0aW5nQ3Jl ZGl0ICAgICAgPSBnUmF0ZUxpbWl0aW5nQ3JlZGl0Ow0KPiA+ICsgIE5pY0RldmljZS0+TmljSW5m by5SYXRlTGltaXRpbmdQb2xsVGltZXIgICA9IGdSYXRlTGltaXRpbmdQb2xsVGltZXI7DQo+ID4g KyAgTmljRGV2aWNlLT5OaWNJbmZvLlJhdGVMaW1pdGVyICAgICAgICAgICAgID0gTlVMTDsNCj4g PiArDQo+ID4gKyAgWmVyb01lbSAoJk5pY0RldmljZS0+TmljSW5mby5SZXF1ZXN0LCBzaXplb2YN Cj4gKEVGSV9VU0JfREVWSUNFX1JFUVVFU1QpKTsNCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gVXNi RXRoLT5Vc2JFdGhJbnRlcnJ1cHQgKFVzYkV0aCwgVFJVRSwNCj4gTkVUV09SS19DT01NT05fUE9M TElOR19JTlRFUlZBTCwgJk5pY0RldmljZS0+TmljSW5mby5SZXF1ZXN0KTsNCj4gPiArICBBU1NF UlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBnQlMtPkluc3Rh bGxNdWx0aXBsZVByb3RvY29sSW50ZXJmYWNlcyAoDQo+ID4gKyAgICAgICAgICAgICAgICAgICZO aWNEZXZpY2UtPkRldmljZUhhbmRsZSwNCj4gPiArICAgICAgICAgICAgICAgICAgJmdFZmlOZXR3 b3JrSW50ZXJmYWNlSWRlbnRpZmllclByb3RvY29sR3VpZF8zMSwNCj4gPiArICAgICAgICAgICAg ICAgICAgJk5pY0RldmljZS0+TmlpUHJvdG9jb2wsDQo+ID4gKyAgICAgICAgICAgICAgICAgICZn RWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCj4gPiArICAgICAgICAgICAgICAgICAgTmljRGV2 aWNlLT5EZXZQYXRoLA0KPiA+ICsgICAgICAgICAgICAgICAgICBOVUxMDQo+ID4gKyAgICAgICAg ICAgICAgICAgICk7DQo+ID4gKw0KPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4g PiArICAgIGlmIChOaWNEZXZpY2UtPk5paVByb3RvY29sLklmTnVtIDwgTUFYX0xBTl9JTlRFUkZB Q0UpIHsNCj4gPiArICAgICAgZ0xhbkRldmljZUxpc3RbTmljRGV2aWNlLT5OaWlQcm90b2NvbC5J Zk51bV0gPSBOVUxMOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIGdCUy0+Q2xvc2VQcm90 b2NvbCAoDQo+ID4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gPiArICAgICAgICAg ICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQo+ID4gKyAgICAgICAgICAgVGhpcy0+RHJp dmVyQmluZGluZ0hhbmRsZSwNCj4gPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ID4g KyAgICAgICAgICAgKTsNCj4gPiArICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ID4gKyAgICAg ICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gPiArICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJv dG9jb2xHdWlkLA0KPiA+ICsgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ ID4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiA+ICsgICAgICAgICAgICk7DQo+ID4g Kw0KPiA+ICsgICAgaWYgKFRtcFB4ZVBvaW50ZXIgIT0gTlVMTCkgew0KPiA+ICsgICAgICBGcmVl UG9vbCAoVG1wUHhlUG9pbnRlcik7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgaWYgKE5p Y0RldmljZS0+RGV2UGF0aCAhPSBOVUxMKSB7DQo+ID4gKyAgICAgIEZyZWVQb29sIChOaWNEZXZp Y2UtPkRldlBhdGgpOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIGlmIChOaWNEZXZpY2Ug IT0gTlVMTCkgew0KPiA+ICsgICAgICBGcmVlUG9vbCAoTmljRGV2aWNlKTsNCj4gPiArICAgIH0N Cj4gPiArDQo+ID4gKyAgICByZXR1cm4gRUZJX0RFVklDRV9FUlJPUjsNCj4gPiArICB9DQo+ID4g Kw0KPiA+ICsgIFN0YXR1cyA9IGdCUy0+T3BlblByb3RvY29sICgNCj4gPiArICAgICAgICAgICAg ICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gPiArICAgICAgICAgICAgICAgICAgJmdFZGtJSVVz YkV0aFByb3RvY29sR3VpZCwNCj4gPiArICAgICAgICAgICAgICAgICAgKFZPSUQgKiopJlVzYkV0 aCwNCj4gPiArICAgICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4g PiArICAgICAgICAgICAgICAgICAgTmljRGV2aWNlLT5EZXZpY2VIYW5kbGUsDQo+ID4gKyAgICAg ICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0JZX0NISUxEX0NPTlRST0xMRVINCj4gPiAr ICAgICAgICAgICAgICAgICAgKTsNCj4gPiArDQo+ID4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgTmV0d29yayBDb21tb24gRHJpdmVyIEJpbmRpbmcg U3RvcC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICAgIFBy b3RvY29sIGluc3RhbmNlIHBvaW50ZXIuDQo+ID4gKyAgQHBhcmFtW2luXSAgQ29udHJvbGxlckhh bmRsZSAgICAgIEhhbmRsZSBvZiBkZXZpY2UgdG8gc3RvcCBkcml2ZXIgb24NCj4gPiArICBAcGFy YW1baW5dICBOdW1iZXJPZkNoaWxkcmVuICAgICAgTnVtYmVyIG9mIEhhbmRsZXMgaW4NCj4gQ2hp bGRIYW5kbGVCdWZmZXIuIElmIG51bWJlciBvZg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjaGlsZHJlbiBpcyB6ZXJvIHN0b3AgdGhlIGVudGlyZSBidXMgZHJpdmVy Lg0KPiA+ICsgIEBwYXJhbVtpbl0gIENoaWxkSGFuZGxlQnVmZmVyICAgICBMaXN0IG9mIENoaWxk IEhhbmRsZXMgdG8gU3RvcC4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAg ICAgICAgICAgIFRoaXMgZHJpdmVyIGlzIHJlbW92ZWQgQ29udHJvbGxlckhhbmRsZQ0KPiA+ICsg IEByZXR2YWwgb3RoZXIgICAgICAgICAgICAgICAgICAgICBUaGlzIGRyaXZlciB3YXMgbm90IHJl bW92ZWQgZnJvbSB0aGlzIGRldmljZQ0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMN Cj4gPiArRUZJQVBJDQo+ID4gK05ldHdvcmtDb21tb25Ecml2ZXJTdG9wICgNCj4gPiArICBJTiAg RUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICAqVGhpcywNCj4gPiArICBJTiAgRUZJX0hBTkRM RSAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiA+ICsgIElOICBVSU5UTiAg ICAgICAgICAgICAgICAgICAgICAgIE51bWJlck9mQ2hpbGRyZW4sDQo+ID4gKyAgSU4gIEVGSV9I QU5ETEUgICAgICAgICAgICAgICAgICAgKkNoaWxkSGFuZGxlQnVmZmVyDQo+ID4gKyAgKQ0KPiA+ ICt7DQo+ID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0 YXR1czsNCj4gPiArICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QWxsQ2hpbGRyZW5TdG9wcGVkOw0KPiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBJbmRleDsNCj4gPiArICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wg ICAgICAgICAgICAgICAgKlVzYkV0aDsNCj4gPiArICBOSUNfREVWSUNFICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKk5pY0RldmljZTsNCj4gPiArICBFRklfTkVUV09SS19JTlRFUkZB Q0VfSURFTlRJRklFUl9QUk9UT0NPTCAgKk5paVByb3RvY29sOw0KPiA+ICsNCj4gPiArICBpZiAo TnVtYmVyT2ZDaGlsZHJlbiA9PSAwKSB7DQo+ID4gKyAgICBTdGF0dXMgPSBnQlMtPk9wZW5Qcm90 b2NvbCAoDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAmZ0VmaU5ldHdvcmtJbnRlcmZhY2VJZGVudGlmaWVyUHJvdG9j b2xHdWlkXzMxLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZOaWlQcm90b2Nv bCwNCj4gPiArICAgICAgICAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0K PiA+ICsgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgRUZJX09QRU5fUFJPVE9DT0xfR0VUX1BST1RPQ09MDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgKTsNCj4gPiArDQo+ID4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQo+ID4gKyAgICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ID4gKyAgICAgICAgICAgICBDb250 cm9sbGVySGFuZGxlLA0KPiA+ICsgICAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xH dWlkLA0KPiA+ICsgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gPiAr ICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gPiArICAgICAgICAgICAgICk7DQo+ID4g KyAgICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ID4gKyAgICAgICAgICAgICBDb250cm9sbGVy SGFuZGxlLA0KPiA+ICsgICAgICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCj4g PiArICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ID4gKyAgICAgICAg ICAgICBDb250cm9sbGVySGFuZGxlDQo+ID4gKyAgICAgICAgICAgICApOw0KPiA+ICsgICAgICBy ZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgTmljRGV2aWNl ID0gVU5ESV9ERVZfRlJPTV9USElTIChOaWlQcm90b2NvbCk7DQo+ID4gKyAgICBTdGF0dXMgICAg PSBnQlMtPlVuaW5zdGFsbE11bHRpcGxlUHJvdG9jb2xJbnRlcmZhY2VzICgNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICZnRWZpTmV0d29ya0ludGVyZmFjZUlkZW50aWZpZXJQcm90b2NvbEd1aWRfMzEsDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgJk5pY0RldmljZS0+TmlpUHJvdG9jb2wsDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgIE5pY0RldmljZS0+RGV2UGF0aCwNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICBOVUxMDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4g PiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgICAgcmV0dXJuIFN0YXR1 czsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBGcmVlUG9vbCAoTmljRGV2aWNlLT5EZXZQ YXRoKTsNCj4gPiArICAgIEZyZWVQb29sIChOaWNEZXZpY2UpOw0KPiA+ICsNCj4gPiArICAgIGdC Uy0+Q2xvc2VQcm90b2NvbCAoDQo+ID4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4g PiArICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQo+ID4gKyAgICAgICAg ICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gPiArICAgICAgICAgICBDb250cm9sbGVy SGFuZGxlDQo+ID4gKyAgICAgICAgICAgKTsNCj4gPiArICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAo DQo+ID4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gPiArICAgICAgICAgICAmZ0Vk a0lJVXNiRXRoUHJvdG9jb2xHdWlkLA0KPiA+ICsgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRp bmdIYW5kbGUsDQo+ID4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiA+ICsgICAgICAg ICAgICk7DQo+ID4gKyAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gKyAgfQ0KPiA+ICsNCj4g PiArICBBbGxDaGlsZHJlblN0b3BwZWQgPSBUUlVFOw0KPiA+ICsNCj4gPiArICBmb3IgKEluZGV4 ID0gMDsgSW5kZXggPCBOdW1iZXJPZkNoaWxkcmVuOyBJbmRleCsrKSB7DQo+ID4gKyAgICBTdGF0 dXMgPSBnQlMtPk9wZW5Qcm90b2NvbCAoDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgQ2hpbGRI YW5kbGVCdWZmZXJbSW5kZXhdLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICZnRWZpTmV0d29y a0ludGVyZmFjZUlkZW50aWZpZXJQcm90b2NvbEd1aWRfMzEsDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgKFZPSUQgKiopJk5paVByb3RvY29sLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgIFRo aXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgQ29udHJv bGxlckhhbmRsZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICBFRklfT1BFTl9QUk9UT0NPTF9H RVRfUFJPVE9DT0wNCj4gPiArICAgICAgICAgICAgICAgICAgICApOw0KPiA+ICsgICAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgICBBbGxDaGlsZHJlblN0b3BwZWQgPSBGQUxT RTsNCj4gPiArICAgICAgY29udGludWU7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgTmlj RGV2aWNlID0gVU5ESV9ERVZfRlJPTV9USElTIChOaWlQcm90b2NvbCk7DQo+ID4gKw0KPiA+ICsg ICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxl LA0KPiA+ICsgICAgICAgICAgICZnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQsDQo+ID4gKyAgICAg ICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gPiArICAgICAgICAgICBDaGlsZEhh bmRsZUJ1ZmZlcltJbmRleF0NCj4gPiArICAgICAgICAgICApOw0KPiA+ICsNCj4gPiArICAgIFN0 YXR1cyA9IGdCUy0+VW5pbnN0YWxsTXVsdGlwbGVQcm90b2NvbEludGVyZmFjZXMgKA0KPiA+ICsg ICAgICAgICAgICAgICAgICAgIENoaWxkSGFuZGxlQnVmZmVyW0luZGV4XSwNCj4gPiArICAgICAg ICAgICAgICAgICAgICAmZ0VmaU5ldHdvcmtJbnRlcmZhY2VJZGVudGlmaWVyUHJvdG9jb2xHdWlk XzMxLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICZOaWNEZXZpY2UtPk5paVByb3RvY29sLA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCj4g PiArICAgICAgICAgICAgICAgICAgICBOaWNEZXZpY2UtPkRldlBhdGgsDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgTlVMTA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICk7DQo+ID4gKyAgICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICAgIFN0YXR1cyA9IGdCUy0+T3BlblBy b3RvY29sICgNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkLA0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgKFZPSUQgKiopJlVzYkV0aCwNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICBDaGlsZEhhbmRsZUJ1ZmZlcltJbmRleF0sDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICBFRklfT1BFTl9QUk9UT0NPTF9CWV9DSElMRF9DT05UUk9MTEVSDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICApOw0KPiA+ICsgICAgfSBlbHNlIHsNCj4gPiArICAgICAgRnJlZVBv b2wgKE5pY0RldmljZS0+RGV2UGF0aCk7DQo+ID4gKyAgICAgIEZyZWVQb29sIChOaWNEZXZpY2Up Ow0KPiA+ICsgICAgfQ0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYgKCFBbGxDaGlsZHJlblN0 b3BwZWQpIHsNCj4gPiArICAgIHJldHVybiBFRklfREVWSUNFX0VSUk9SOw0KPiA+ICsgIH0NCj4g PiArDQo+ID4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4g KyAgRW50cnlwb2ludCBvZiBOZXR3b3JrIENvbW1vbiBEcml2ZXIuDQo+ID4gKw0KPiA+ICsgIFRo aXMgZnVuY3Rpb24gaXMgdGhlIGVudHJ5cG9pbnQgb2YgTmV0d29yayBDb21tb24gRHJpdmVyLiBJ dCBpbnN0YWxscw0KPiBEcml2ZXIgQmluZGluZw0KPiA+ICsgIFByb3RvY29scyB0b2dldGhlciB3 aXRoIENvbXBvbmVudCBOYW1lIFByb3RvY29scy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAg SW1hZ2VIYW5kbGUgICAgICAgVGhlIGZpcm13YXJlIGFsbG9jYXRlZCBoYW5kbGUgZm9yIHRoZSBF RkkNCj4gaW1hZ2UuDQo+ID4gKyAgQHBhcmFtW2luXSAgU3lzdGVtVGFibGUgICAgICAgQSBwb2lu dGVyIHRvIHRoZSBFRkkgU3lzdGVtIFRhYmxlLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgICAgICAgICBUaGUgZW50cnkgcG9pbnQgaXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5 Lg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ID4gK05l dHdvcmtDb21tb25FbnRyeSAoDQo+ID4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgSW1hZ2VIYW5k bGUsDQo+ID4gKyAgSU4gRUZJX1NZU1RFTV9UQUJMRSAgKlN5c3RlbVRhYmxlDQo+ID4gKyAgKQ0K PiA+ICt7DQo+ID4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiA+ICsNCj4gPiArICBnTmV0d29y a0NvbW1vbkRyaXZlckJpbmRpbmcuRHJpdmVyQmluZGluZ0hhbmRsZSA9IEltYWdlSGFuZGxlOw0K PiA+ICsgIGdOZXR3b3JrQ29tbW9uRHJpdmVyQmluZGluZy5JbWFnZUhhbmRsZSAgICAgICAgID0g SW1hZ2VIYW5kbGU7DQo+ID4gKyAgZ1JhdGVMaW1pdGluZ0VuYWJsZSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgPSBQY2RHZXRCb29sIChFbmFibGVSYXRlTGltaXRpbmcpOw0KPiA+ICsgIGdS YXRlTGltaXRpbmdDcmVkaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gUGNkR2V0MzIg KFJhdGVMaW1pdGluZ0NyZWRpdCk7DQo+ID4gKyAgZ1JhdGVMaW1pdGluZ1BvbGxUaW1lciAgICAg ICAgICAgICAgICAgICAgICAgICAgPSBQY2RHZXQzMiAoUmF0ZUxpbWl0aW5nRmFjdG9yKTsNCj4g PiArDQo+ID4gKyAgU3RhdHVzID0gZ0JTLT5JbnN0YWxsTXVsdGlwbGVQcm90b2NvbEludGVyZmFj ZXMgKA0KPiA+ICsgICAgICAgICAgICAgICAgICAmZ05ldHdvcmtDb21tb25Ecml2ZXJCaW5kaW5n LkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICZnRWZpRHJpdmVy QmluZGluZ1Byb3RvY29sR3VpZCwNCj4gPiArICAgICAgICAgICAgICAgICAgJmdOZXR3b3JrQ29t bW9uRHJpdmVyQmluZGluZywNCj4gPiArICAgICAgICAgICAgICAgICAgJmdFZmlDb21wb25lbnRO YW1lMlByb3RvY29sR3VpZCwNCj4gPiArICAgICAgICAgICAgICAgICAgJmdOZXR3b3JrQ29tbW9u Q29tcG9uZW50TmFtZTIsDQo+ID4gKyAgICAgICAgICAgICAgICAgIE5VTEwNCj4gPiArICAgICAg ICAgICAgICAgICAgKTsNCj4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICt9DQo+ID4gZGlmZiAt LWdpdCBhL1VzYk5ldHdvcmtQa2cvTmV0d29ya0NvbW1vbi9Ecml2ZXJCaW5kaW5nLmgNCj4gYi9V c2JOZXR3b3JrUGtnL05ldHdvcmtDb21tb24vRHJpdmVyQmluZGluZy5oDQo+ID4gbmV3IGZpbGUg bW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwLi4wNDE2Y2UxMzIzDQo+ID4gLS0tIC9k ZXYvbnVsbA0KPiA+ICsrKyBiL1VzYk5ldHdvcmtQa2cvTmV0d29ya0NvbW1vbi9Ecml2ZXJCaW5k aW5nLmgNCj4gPiBAQCAtMCwwICsxLDI2NiBAQA0KPiA+ICsvKiogQGZpbGUNCj4gPiArICBIZWFk ZXIgZmlsZSBmb3IgZm9yIFVTQiBuZXR3b3JrIGNvbW1vbiBkcml2ZXINCj4gPiArDQo+ID4gKyAg Q29weXJpZ2h0IChjKSAyMDIzLCBBbWVyaWNhbiBNZWdhdHJlbmRzIEludGVybmF0aW9uYWwgTExD LiBBbGwgcmlnaHRzDQo+IHJlc2VydmVkLjxCUj4NCj4gPiArICBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ICsqKi8NCj4gPiArDQo+ID4gKyNpZm5kZWYg X0RSSVZFUl9CSU5ESU5HX0hfDQo+ID4gKyNkZWZpbmUgX0RSSVZFUl9CSU5ESU5HX0hfDQo+ID4g Kw0KPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpRHJpdmVyRW50cnlQb2ludC5oPg0KPiA+ICsj aW5jbHVkZSA8TGlicmFyeS9VZWZpQm9vdFNlcnZpY2VzVGFibGVMaWIuaD4NCj4gPiArI2luY2x1 ZGUgPExpYnJhcnkvVWVmaUxpYi5oPg0KPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9EZXZpY2VQYXRo TGliLmg+DQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQo+ID4gKyNpbmNsdWRl IDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRpb25MaWIuaD4NCj4gPiArI2luY2x1ZGUgPExpYnJhcnkv UGNkTGliLmg+DQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VNZW1vcnlMaWIuaD4NCj4gPiAr I2luY2x1ZGUgPExpYnJhcnkvVWVmaVVzYkxpYi5oPg0KPiA+ICsjaW5jbHVkZSA8UHJvdG9jb2wv VXNiSW8uaD4NCj4gPiArI2luY2x1ZGUgPFByb3RvY29sL05ldHdvcmtJbnRlcmZhY2VJZGVudGlm aWVyLmg+DQo+ID4gKyNpbmNsdWRlIDxQcm90b2NvbC9FZGtJSVVzYkV0aGVybmV0UHJvdG9jb2wu aD4NCj4gPiArDQo+ID4gKyNkZWZpbmUgTkVUV09SS19DT01NT05fRFJJVkVSX1ZFUlNJT04gICAg MQ0KPiA+ICsjZGVmaW5lIE5FVFdPUktfQ09NTU9OX1BPTExJTkdfSU5URVJWQUwgIDB4MTANCj4g PiArI2RlZmluZSBSWF9CVUZGRVJfQ09VTlQgICAgICAgICAgICAgICAgICAzMg0KPiA+ICsjZGVm aW5lIFRYX0JVRkZFUl9DT1VOVCAgICAgICAgICAgICAgICAgIDMyDQo+ID4gKyNkZWZpbmUgTUVN T1JZX1JFUVVJUkUgICAgICAgICAgICAgICAgICAgMA0KPiA+ICsNCj4gPiArI2RlZmluZSBVTkRJ X0RFVl9TSUdOQVRVUkUgIFNJR05BVFVSRV8zMigndScsJ24nLCdkJywnaScpDQo+ID4gKyNkZWZp bmUgVU5ESV9ERVZfRlJPTV9USElTKGEpICBDUihhLCBOSUNfREVWSUNFLCBOaWlQcm90b2NvbCwN Cj4gVU5ESV9ERVZfU0lHTkFUVVJFKQ0KPiA+ICsjZGVmaW5lIFVORElfREVWX0ZST01fTklDKGEp ICAgQ1IoYSwgTklDX0RFVklDRSwgTmljSW5mbywNCj4gVU5ESV9ERVZfU0lHTkFUVVJFKQ0KPiA+ ICsNCj4gPiArI3ByYWdtYSBwYWNrKDEpDQo+ID4gK3R5cGVkZWYgc3RydWN0IHsNCj4gPiArICBV SU5UOCAgICAgRGVzdEFkZHJbUFhFX0hXQUREUl9MRU5fRVRIRVJdOw0KPiA+ICsgIFVJTlQ4ICAg ICBTcmNBZGRyW1BYRV9IV0FERFJfTEVOX0VUSEVSXTsNCj4gPiArICBVSU5UMTYgICAgUHJvdG9j b2w7DQo+ID4gK30gRXRoZXJuZXRIZWFkZXI7DQo+ID4gKyNwcmFnbWEgcGFjaygpDQo+ID4gKw0K PiA+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgU2lnbmF0dXJlOw0KPiA+ICsgIEVGSV9ORVRXT1JLX0lOVEVSRkFD RV9JREVOVElGSUVSX1BST1RPQ09MICAgIE5paVByb3RvY29sOw0KPiA+ICsgIEVGSV9IQU5ETEUg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERldmljZUhhbmRsZTsNCj4gPiArICBF RklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICAgICAgICAgICAgICAgICAgICAqQmFzZURldlBhdGg7 DQo+ID4gKyAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAgICAgICAgICAgICAgICAgKkRl dlBhdGg7DQo+ID4gKyAgTklDX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTmljSW5mbzsNCj4gPiArICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqUmVjZWl2ZUJ1ZmZlcjsNCj4gPiArfSBOSUNfREVWSUNFOw0KPiA+ICsNCj4gPiAr dHlwZWRlZiBWT0lEICgqQVBJX0ZVTkMpKA0KPiA+ICsgIFBYRV9DREIgKiwNCj4gPiArICBOSUNf REFUQSAqDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gK2V4dGVybiBQWEVfU1dfVU5ESSAgICAgICAg ICAgICAgICAgICAqZ1B4ZTsNCj4gPiArZXh0ZXJuIE5JQ19ERVZJQ0UgICAgICAgICAgICAgICAg ICAgICpnTGFuRGV2aWNlTGlzdFtNQVhfTEFOX0lOVEVSRkFDRV07DQo+ID4gK2V4dGVybiBFRklf Q09NUE9ORU5UX05BTUUyX1BST1RPQ09MDQo+IGdOZXR3b3JrQ29tbW9uQ29tcG9uZW50TmFtZTI7 DQo+ID4gKw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtOZXR3b3JrQ29tbW9u U3VwcG9ydGVkICgNCj4gPiArICBJTiBFRklfRFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgICpUaGlz LA0KPiA+ICsgIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRs ZSwNCj4gPiArICBJTiBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICAgICpSZW1haW5pbmdEZXZp Y2VQYXRoDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ ID4gK05ldHdvcmtDb21tb25Ecml2ZXJTdGFydCAoDQo+ID4gKyAgSU4gRUZJX0RSSVZFUl9CSU5E SU5HX1BST1RPQ09MICAqVGhpcywNCj4gPiArICBJTiBFRklfSEFORExFICAgICAgICAgICAgICAg ICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ID4gKyAgSU4gRUZJX0RFVklDRV9QQVRIX1BST1RPQ09M ICAgICAqUmVtYWluaW5nRGV2aWNlUGF0aA0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICtFRklfU1RB VFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtOZXR3b3JrQ29tbW9uRHJpdmVyU3RvcCAoDQo+ID4gKyAg SU4gIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgKlRoaXMsDQo+ID4gKyAgSU4gIEVGSV9I QU5ETEUgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gPiArICBJTiAgVUlO VE4gICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXJPZkNoaWxkcmVuLA0KPiA+ICsgIElOICBF RklfSEFORExFICAgICAgICAgICAgICAgICAgICpDaGlsZEhhbmRsZUJ1ZmZlcg0KPiA+ICsgICk7 DQo+ID4gKw0KPiA+ICtWT0lEDQo+ID4gK1B4ZVN0cnVjdEluaXQgKA0KPiA+ICsgIE9VVCBQWEVf U1dfVU5ESSAgKlB4ZVN3DQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gK1ZPSUQNCj4gPiArVXBkYXRl TmljTnVtICgNCj4gPiArICBJTiAgICAgIE5JQ19EQVRBICAgICAqTmljLA0KPiA+ICsgIElOIE9V VCAgUFhFX1NXX1VOREkgICpQeGVTdw0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICtFRklfU1RBVFVT DQo+ID4gK0VGSUFQSQ0KPiA+ICtVbmRpQXBpRW50cnkgKA0KPiA+ICsgIElOICBVSU5UNjQgIENk Yg0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICtVSU5UTg0KPiA+ICtNYXBJdCAoDQo+ID4gKyAgSU4g TklDX0RBVEEgICpOaWMsDQo+ID4gKyAgSU4gVUlOVDY0ICAgIE1lbUFkZHIsDQo+ID4gKyAgSU4g VUlOVDMyICAgIFNpemUsDQo+ID4gKyAgSU4gVUlOVDMyICAgIERpcmVjdGlvbiwNCj4gPiArICBP VVQgVUlOVDY0ICAgTWFwcGVkQWRkcg0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICtWT0lEDQo+ID4g K1VuTWFwSXQgKA0KPiA+ICsgIElOIE5JQ19EQVRBICAqTmljLA0KPiA+ICsgIElOIFVJTlQ2NCAg ICBNZW1BZGRyLA0KPiA+ICsgIElOIFVJTlQzMiAgICBTaXplLA0KPiA+ICsgIElOIFVJTlQzMiAg ICBEaXJlY3Rpb24sDQo+ID4gKyAgSU4gVUlOVDY0ICAgIE1hcHBlZEFkZHINCj4gPiArICApOw0K PiA+ICsNCj4gPiArVk9JRA0KPiA+ICtVbmRpR2V0U3RhdGUgKA0KPiA+ICsgIElOICBQWEVfQ0RC ICAgKkNkYiwNCj4gPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gPiArICApOw0KPiA+ICsNCj4g PiArVk9JRA0KPiA+ICtVbmRpU3RhcnQgKA0KPiA+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4g PiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gPiArICApOw0KPiA+ICsNCj4gPiArVk9JRA0KPiA+ ICtVbmRpU3RvcCAoDQo+ID4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiA+ICsgIElOICBOSUNf REFUQSAgKk5pYw0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICtWT0lEDQo+ID4gK1VuZGlHZXRJbml0 SW5mbyAoDQo+ID4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiA+ICsgIElOICBOSUNfREFUQSAg Kk5pYw0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICtWT0lEDQo+ID4gK1VuZGlHZXRDb25maWdJbmZv ICgNCj4gPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ID4gKyAgSU4gIE5JQ19EQVRBICAqTmlj DQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gK1ZPSUQNCj4gPiArVW5kaUluaXRpYWxpemUgKA0KPiA+ ICsgIElOICAgICAgUFhFX0NEQiAgICpDZGIsDQo+ID4gKyAgSU4gT1VUICBOSUNfREFUQSAgKk5p Yw0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICtWT0lEDQo+ID4gK1VuZGlSZXNldCAoDQo+ID4gKyAg SU4gIFBYRV9DREIgICAqQ2RiLA0KPiA+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiA+ICsgICk7 DQo+ID4gKw0KPiA+ICtWT0lEDQo+ID4gK1VuZGlTaHV0ZG93biAoDQo+ID4gKyAgSU4gICAgICBQ WEVfQ0RCICAgKkNkYiwNCj4gPiArICBJTiBPVVQgIE5JQ19EQVRBICAqTmljDQo+ID4gKyAgKTsN Cj4gPiArDQo+ID4gK1ZPSUQNCj4gPiArVW5kaUludGVycnVwdEVuYWJsZSAoDQo+ID4gKyAgSU4g IFBYRV9DREIgICAqQ2RiLA0KPiA+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiA+ICsgICk7DQo+ ID4gKw0KPiA+ICtWT0lEDQo+ID4gK1VuZGlSZWNlaXZlRmlsdGVyICgNCj4gPiArICBJTiAgUFhF X0NEQiAgICpDZGIsDQo+ID4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ID4gKyAgKTsNCj4gPiAr DQo+ID4gK1ZPSUQNCj4gPiArVW5kaVN0YXRpb25BZGRyZXNzICgNCj4gPiArICBJTiAgUFhFX0NE QiAgICpDZGIsDQo+ID4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ID4gKyAgKTsNCj4gPiArDQo+ ID4gK1ZPSUQNCj4gPiArVW5kaVN0YXRpc3RpY3MgKA0KPiA+ICsgIElOICBQWEVfQ0RCICAgKkNk YiwNCj4gPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gPiArICApOw0KPiA+ICsNCj4gPiArVk9J RA0KPiA+ICtVbmRpTWNhc3RJcDJNYWMgKA0KPiA+ICsgIElOIE9VVCAgUFhFX0NEQiAgICpDZGIs DQo+ID4gKyAgSU4gICAgICBOSUNfREFUQSAgKk5pYw0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICtW T0lEDQo+ID4gK1VuZGlOdkRhdGEgKA0KPiA+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gPiAr ICBJTiAgTklDX0RBVEEgICpOaWMNCj4gPiArICApOw0KPiA+ICsNCj4gPiArVk9JRA0KPiA+ICtV bmRpR2V0U3RhdHVzICgNCj4gPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ID4gKyAgSU4gIE5J Q19EQVRBICAqTmljDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gK1ZPSUQNCj4gPiArVW5kaUZpbGxI ZWFkZXIgKA0KPiA+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gPiArICBJTiAgTklDX0RBVEEg ICpOaWMNCj4gPiArICApOw0KPiA+ICsNCj4gPiArVk9JRA0KPiA+ICtVbmRpVHJhbnNtaXQgKA0K PiA+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4g PiArICApOw0KPiA+ICsNCj4gPiArVk9JRA0KPiA+ICtVbmRpUmVjZWl2ZSAoDQo+ID4gKyAgSU4g IFBYRV9DREIgICAqQ2RiLA0KPiA+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiA+ICsgICk7DQo+ ID4gKw0KPiA+ICtVSU5UMTYNCj4gPiArSW5pdGlhbGl6ZSAoDQo+ID4gKyAgSU4gICAgICBQWEVf Q0RCICAgKkNkYiwNCj4gPiArICBJTiBPVVQgIE5JQ19EQVRBICAqTmljDQo+ID4gKyAgKTsNCj4g PiArDQo+ID4gK1VJTlQxNg0KPiA+ICtUcmFuc21pdCAoDQo+ID4gKyAgSU4gICAgICBQWEVfQ0RC ICAgKkNkYiwNCj4gPiArICBJTiBPVVQgIE5JQ19EQVRBICAqTmljLA0KPiA+ICsgIElOICAgICAg VUlOVDY0ICAgIENwYkFkZHIsDQo+ID4gKyAgSU4gICAgICBVSU5UMTYgICAgT3BGbGFncw0KPiA+ ICsgICk7DQo+ID4gKw0KPiA+ICtVSU5UMTYNCj4gPiArUmVjZWl2ZSAoDQo+ID4gKyAgSU4gUFhF X0NEQiAgICAgICAqQ2RiLA0KPiA+ICsgIElOIE9VVCBOSUNfREFUQSAgKk5pYywNCj4gPiArICBJ TiBVSU5UNjQgICAgICAgIENwYkFkZHIsDQo+ID4gKyAgSU4gT1VUIFVJTlQ2NCAgICBEYkFkZHIN Cj4gPiArICApOw0KPiA+ICsNCj4gPiArVUlOVDE2DQo+ID4gK1NldEZpbHRlciAoDQo+ID4gKyAg SU4gIE5JQ19EQVRBICAqTmljLA0KPiA+ICsgIElOICBVSU5UMTYgICAgU2V0RmlsdGVyLA0KPiA+ ICsgIElOICBVSU5UNjQgICAgQ3BiQWRkciwNCj4gPiArICBJTiAgVUlOVDMyICAgIENwYlNpemUN Cj4gPiArICApOw0KPiA+ICsNCj4gPiArVUlOVDE2DQo+ID4gK1N0YXRpc3RpY3MgKA0KPiA+ICsg IElOIE5JQ19EQVRBICAqTmljLA0KPiA+ICsgIElOIFVJTlQ2NCAgICBEYkFkZHIsDQo+ID4gKyAg SU4gVUlOVDE2ICAgIERiU2l6ZQ0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsjZW5kaWYNCj4gPiBk aWZmIC0tZ2l0IGEvVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL05ldHdvcmtDb21tb24uaW5m DQo+IGIvVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL05ldHdvcmtDb21tb24uaW5mDQo+ID4g bmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwLi44OTIzMTAyYmMzDQo+ ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL1VzYk5ldHdvcmtQa2cvTmV0d29ya0NvbW1vbi9O ZXR3b3JrQ29tbW9uLmluZg0KPiA+IEBAIC0wLDAgKzEsNDkgQEANCj4gPiArIyMgQGZpbGUNCj4g PiArIyAgIFRoaXMgaXMgVXNiIE5ldHdvcmsgQ29tbW9uIGRyaXZlciBmb3IgRFhFIHBoYXNlLg0K PiA+ICsjDQo+ID4gKyMgQ29weXJpZ2h0IChjKSAyMDIzLCBBbWVyaWNhbiBNZWdhdHJlbmRzIElu dGVybmF0aW9uYWwgTExDLiBBbGwgcmlnaHRzDQo+IHJlc2VydmVkLjxCUj4NCj4gPiArIyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ICsjIw0KPiA+ICsN Cj4gPiArW0RlZmluZXNdDQo+ID4gKyAgSU5GX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgID0g MHgwMDAxMDAwNQ0KPiA+ICsgIEJBU0VfTkFNRSAgICAgICAgICAgICAgICAgICAgICA9IE5ldHdv cmtDb21tb24NCj4gPiArICBGSUxFX0dVSUQgICAgICAgICAgICAgICAgICAgICAgPSBjYTZlYjRm NC1mMWQ2LTQzNzUtOTdkNi0xODg1Njg3MWUxYmYNCj4gPiArICBNT0RVTEVfVFlQRSAgICAgICAg ICAgICAgICAgICAgPSBEWEVfRFJJVkVSDQo+ID4gKyAgVkVSU0lPTl9TVFJJTkcgICAgICAgICAg ICAgICAgID0gMS4wDQo+ID4gKyAgRU5UUllfUE9JTlQgICAgICAgICAgICAgICAgICAgID0gTmV0 d29ya0NvbW1vbkVudHJ5DQo+ID4gKw0KPiA+ICtbU291cmNlc10NCj4gPiArICBEcml2ZXJCaW5k aW5nLmMNCj4gPiArICBEcml2ZXJCaW5kaW5nLmgNCj4gPiArICBDb21wb25lbnROYW1lLmMNCj4g PiArICBQeGVGdW5jdGlvbi5jDQo+ID4gKw0KPiA+ICtbUGFja2FnZXNdDQo+ID4gKyAgTWRlUGtn L01kZVBrZy5kZWMNCj4gPiArICBNZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRlYw0KPiA+ICsg IFVzYk5ldHdvcmtQa2cvVXNiTmV0d29ya1BrZy5kZWMNCj4gPiArDQo+ID4gK1tMaWJyYXJ5Q2xh c3Nlc10NCj4gPiArICBVZWZpRHJpdmVyRW50cnlQb2ludA0KPiA+ICsgIFVlZmlCb290U2Vydmlj ZXNUYWJsZUxpYg0KPiA+ICsgIFVlZmlMaWINCj4gPiArICBEZWJ1Z0xpYg0KPiA+ICsgIFVlZmlV c2JMaWINCj4gPiArICBNZW1vcnlBbGxvY2F0aW9uTGliDQo+ID4gKyAgQmFzZU1lbW9yeUxpYg0K PiA+ICsNCj4gPiArW1Byb3RvY29sc10NCj4gPiArICBnRWZpTmV0d29ya0ludGVyZmFjZUlkZW50 aWZpZXJQcm90b2NvbEd1aWRfMzENCj4gPiArICBnRWZpVXNiSW9Qcm90b2NvbEd1aWQNCj4gPiAr ICBnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZA0KPiA+ICsgIGdFZmlEcml2ZXJCaW5kaW5nUHJv dG9jb2xHdWlkDQo+ID4gKyAgZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkDQo+ID4gKw0KPiA+ICtb UGNkXQ0KPiA+ICsgIGdVc2JOZXR3b3JrUGtnVG9rZW5TcGFjZUd1aWQuRW5hYmxlUmF0ZUxpbWl0 aW5nDQo+ID4gKyAgZ1VzYk5ldHdvcmtQa2dUb2tlblNwYWNlR3VpZC5SYXRlTGltaXRpbmdDcmVk aXQNCj4gPiArICBnVXNiTmV0d29ya1BrZ1Rva2VuU3BhY2VHdWlkLlJhdGVMaW1pdGluZ0ZhY3Rv cg0KPiA+ICsNCj4gPiArW0RlcGV4XQ0KPiA+ICsgIFRSVUUNCj4gPiBkaWZmIC0tZ2l0IGEvVXNi TmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL1B4ZUZ1bmN0aW9uLmMNCj4gYi9Vc2JOZXR3b3JrUGtn L05ldHdvcmtDb21tb24vUHhlRnVuY3Rpb24uYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ ID4gaW5kZXggMDAwMDAwMDAwMC4uNjg3Y2FiY2E0Yw0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiAr KysgYi9Vc2JOZXR3b3JrUGtnL05ldHdvcmtDb21tb24vUHhlRnVuY3Rpb24uYw0KPiA+IEBAIC0w LDAgKzEsMTgwMyBAQA0KPiA+ICsvKiogQGZpbGUNCj4gPiArICBUaGlzIGZpbGUgY29udGFpbnMg Y29kZSBmb3IgVU5ESSBjb21tYW5kIGJhc2VkIG9uIFVFRkkgc3BlY2lmaWNhdGlvbi4NCj4gPiAr DQo+ID4gKyAgQ29weXJpZ2h0IChjKSAyMDIzLCBBbWVyaWNhbiBNZWdhdHJlbmRzIEludGVybmF0 aW9uYWwgTExDLiBBbGwgcmlnaHRzDQo+IHJlc2VydmVkLjxCUj4NCj4gPiArICBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ICsqKi8NCj4gPiArDQo+ID4g KyNpbmNsdWRlICJEcml2ZXJCaW5kaW5nLmgiDQo+ID4gKw0KPiA+ICsvLyBBUEkgdGFibGUsIGRl ZmluZWQgaW4gVUVGSSBzcGVjaWZpY2F0aW9uDQo+ID4gK0FQSV9GVU5DICBnVW5kaUFwaVRhYmxl W10gPSB7DQo+ID4gKyAgVW5kaUdldFN0YXRlLA0KPiA+ICsgIFVuZGlTdGFydCwNCj4gPiArICBV bmRpU3RvcCwNCj4gPiArICBVbmRpR2V0SW5pdEluZm8sDQo+ID4gKyAgVW5kaUdldENvbmZpZ0lu Zm8sDQo+ID4gKyAgVW5kaUluaXRpYWxpemUsDQo+ID4gKyAgVW5kaVJlc2V0LA0KPiA+ICsgIFVu ZGlTaHV0ZG93biwNCj4gPiArICBVbmRpSW50ZXJydXB0RW5hYmxlLA0KPiA+ICsgIFVuZGlSZWNl aXZlRmlsdGVyLA0KPiA+ICsgIFVuZGlTdGF0aW9uQWRkcmVzcywNCj4gPiArICBVbmRpU3RhdGlz dGljcywNCj4gPiArICBVbmRpTWNhc3RJcDJNYWMsDQo+ID4gKyAgVW5kaU52RGF0YSwNCj4gPiAr ICBVbmRpR2V0U3RhdHVzLA0KPiA+ICsgIFVuZGlGaWxsSGVhZGVyLA0KPiA+ICsgIFVuZGlUcmFu c21pdCwNCj4gPiArICBVbmRpUmVjZWl2ZQ0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArLyoqDQo+ID4g KyAgIENhbGxiYWNrIGZ1bmN0aW9uIGZvciBlbmFibGUgUmF0ZSBMaW1pdGVyDQo+ID4gKw0KPiA+ ICsgICBAcGFyYW1baW5dIEV2ZW50ICAgICAgICAgICBFdmVudCB3aG9zZSBub3RpZmljYXRpb24g ZnVuY3Rpb24gaXMgYmVpbmcNCj4gaW52b2tlZA0KPiA+ICsgICBAcGFyYW1baW5dIENvbnRleHQg ICAgICAgICBQb2ludGVyIHRvIHRoZSBub3RpZmljYXRpb24gZnVuY3Rpb24ncyBjb250ZXh0DQo+ ID4gKw0KPiA+ICsqKi8NCj4gPiArVk9JRA0KPiA+ICtFRklBUEkNCj4gPiArVW5kaVJhdGVMaW1p dGVyQ2FsbGJhY2sgKA0KPiA+ICsgIElOICBFRklfRVZFTlQgIEV2ZW50LA0KPiA+ICsgIElOICBW T0lEICAgICAgICpDb250ZXh0DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgTklDX0RBVEEgICpO aWMgPSBDb250ZXh0Ow0KPiA+ICsNCj4gPiArICBpZiAoTmljLT5SYXRlTGltaXRpbmdDcmVkaXRD b3VudCA8IE5pYy0+UmF0ZUxpbWl0aW5nQ3JlZGl0KSB7DQo+ID4gKyAgICBOaWMtPlJhdGVMaW1p dGluZ0NyZWRpdENvdW50Kys7DQo+ID4gKyAgfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4g PiArICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIG9wZXJhdGlvbmFsIHN0 YXRlIG9mIHRoZSBVTkRJLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRl ciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiA+ICsgIEBwYXJhbVtpbl0gIE5p YyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ ID4gKw0KPiA+ICsqKi8NCj4gPiArVk9JRA0KPiA+ICtVbmRpR2V0U3RhdGUgKA0KPiA+ICsgIElO ICBQWEVfQ0RCICAgKkNkYiwNCj4gPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gPiArICApDQo+ ID4gK3sNCj4gPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ID4gKw0KPiA+ICsgIGlmICgoQ2Ri LT5PcENvZGUgIT0gUFhFX09QQ09ERV9HRVRfU1RBVEUpIHx8DQo+ID4gKyAgICAgIChDZGItPlN0 YXRDb2RlICE9IFBYRV9TVEFUQ09ERV9JTklUSUFMSVpFKSB8fA0KPiA+ICsgICAgICAoQ2RiLT5T dGF0RmxhZ3MgIT0gUFhFX1NUQVRGTEFHU19JTklUSUFMSVpFKSB8fA0KPiA+ICsgICAgICAoQ2Ri LT5JRm51bSA+PSAoZ1B4ZS0+SUZjbnQgfCBnUHhlLT5JRmNudEV4dCA8PCA4KSkgfHwNCj4gPiAr ICAgICAgKENkYi0+Q1BCc2l6ZSAhPSBQWEVfQ1BCU0laRV9OT1RfVVNFRCkgfHwNCj4gPiArICAg ICAgKENkYi0+Q1BCYWRkciAhPSBQWEVfQ1BCQUREUl9OT1RfVVNFRCkgfHwNCj4gPiArICAgICAg KENkYi0+REJzaXplICE9IFBYRV9EQlNJWkVfTk9UX1VTRUQpIHx8DQo+ID4gKyAgICAgIChDZGIt PkRCYWRkciAhPSBQWEVfREJBRERSX05PVF9VU0VEKSB8fA0KPiA+ICsgICAgICAoQ2RiLT5PcEZs YWdzICE9IFBYRV9PUEZMQUdTX05PVF9VU0VEKSkNCj4gPiArICB7DQo+ID4gKyAgICBDZGItPlN0 YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ID4gKyAgICBDZGItPlN0 YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gPiArICAgIHJldHVybjsNCj4g PiArICB9IGVsc2Ugew0KPiA+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NP TU1BTkRfQ09NUExFVEU7DQo+ID4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9T VUNDRVNTOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgQ2RiLT5TdGF0RmxhZ3MgPSBDZGItPlN0 YXRGbGFncyB8IE5pYy0+U3RhdGU7DQo+ID4gKw0KPiA+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNi RXRoVW5kaS5Vc2JFdGhVbmRpR2V0U3RhdGUgIT0gTlVMTCkgew0KPiA+ICsgICAgU3RhdHVzID0g TmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaUdldFN0YXRlIChDZGIsIE5pYyk7DQo+ ID4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICAgIENkYi0+U3RhdEZs YWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gPiArICAgIH0NCj4gPiArICB9 DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRv IGNoYW5nZSB0aGUgVU5ESSBvcGVyYXRpb25hbCBzdGF0ZSBmcm9tDQo+IHN0b3BwZWQgdG8gc3Rh cnRlZC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNv bW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRl ciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiA+ICsNCj4gPiAr KiovDQo+ID4gK1ZPSUQNCj4gPiArVW5kaVN0YXJ0ICgNCj4gPiArICBJTiAgUFhFX0NEQiAgICpD ZGIsDQo+ID4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAg UFhFX0NQQl9TVEFSVF8zMSAgKkNwYjsNCj4gPiArICBFRklfU1RBVFVTICAgICAgICBTdGF0dXM7 DQo+ID4gKyAgQk9PTEVBTiAgICAgICAgICAgRXZlbnRFcnJvcjsNCj4gPiArDQo+ID4gKyAgaWYg KChDZGItPk9wQ29kZSAhPSBQWEVfT1BDT0RFX1NUQVJUKSB8fA0KPiA+ICsgICAgICAoQ2RiLT5T dGF0Q29kZSAhPSBQWEVfU1RBVENPREVfSU5JVElBTElaRSkgfHwNCj4gPiArICAgICAgKENkYi0+ U3RhdEZsYWdzICE9IFBYRV9TVEFURkxBR1NfSU5JVElBTElaRSkgfHwNCj4gPiArICAgICAgKENk Yi0+SUZudW0gPj0gKGdQeGUtPklGY250IHwgZ1B4ZS0+SUZjbnRFeHQgPDwgOCkpIHx8DQo+ID4g KyAgICAgIChDZGItPkNQQnNpemUgIT0gc2l6ZW9mIChQWEVfQ1BCX1NUQVJUXzMxKSkgfHwNCj4g PiArICAgICAgKENkYi0+REJzaXplICE9IFBYRV9EQlNJWkVfTk9UX1VTRUQpIHx8DQo+ID4gKyAg ICAgIChDZGItPkRCYWRkciAhPSBQWEVfREJBRERSX05PVF9VU0VEKSB8fA0KPiA+ICsgICAgICAo Q2RiLT5PcEZsYWdzICE9IFBYRV9PUEZMQUdTX05PVF9VU0VEKSkNCj4gPiArICB7DQo+ID4gKyAg ICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ID4gKyAg ICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gPiArICAgIHJl dHVybjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmIChOaWMtPlN0YXRlICE9IFBYRV9TVEFU RkxBR1NfR0VUX1NUQVRFX1NUT1BQRUQpIHsNCj4gPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhF X1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhF X1NUQVRDT0RFX0FMUkVBRFlfU1RBUlRFRDsNCj4gPiArICAgIHJldHVybjsNCj4gPiArICB9DQo+ ID4gKw0KPiA+ICsgIENwYiA9IChQWEVfQ1BCX1NUQVJUXzMxICopKFVJTlROKUNkYi0+Q1BCYWRk cjsNCj4gPiArDQo+ID4gKyAgTmljLT5QeGVTdGFydC5EZWxheSAgICAgPSBDcGItPkRlbGF5Ow0K PiA+ICsgIE5pYy0+UHhlU3RhcnQuVmlydDJQaHlzID0gQ3BiLT5WaXJ0MlBoeXM7DQo+ID4gKyAg TmljLT5QeGVTdGFydC5CbG9jayAgICAgPSBDcGItPkJsb2NrOw0KPiA+ICsgIE5pYy0+UHhlU3Rh cnQuTWFwX01lbSAgID0gMDsNCj4gPiArICBOaWMtPlB4ZVN0YXJ0LlVuTWFwX01lbSA9IDA7DQo+ ID4gKyAgTmljLT5QeGVTdGFydC5TeW5jX01lbSAgPSBDcGItPlN5bmNfTWVtOw0KPiA+ICsgIE5p Yy0+UHhlU3RhcnQuVW5pcXVlX0lEID0gQ3BiLT5VbmlxdWVfSUQ7DQo+ID4gKyAgRXZlbnRFcnJv ciAgICAgICAgICAgICAgPSBGQUxTRTsNCj4gPiArICBTdGF0dXMgICAgICAgICAgICAgICAgICA9 IEVGSV9TVUNDRVNTOw0KPiA+ICsgIGlmIChOaWMtPlJhdGVMaW1pdGluZ0VuYWJsZSA9PSBUUlVF KSB7DQo+ID4gKyAgICBTdGF0dXMgPSBnQlMtPkNyZWF0ZUV2ZW50ICgNCj4gPiArICAgICAgICAg ICAgICAgICAgICBFVlRfVElNRVIgfCBFVlRfTk9USUZZX1NJR05BTCwNCj4gPiArICAgICAgICAg ICAgICAgICAgICBUUExfTk9USUZZLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgIFVuZGlSYXRl TGltaXRlckNhbGxiYWNrLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgIE5pYywNCj4gPiArICAg ICAgICAgICAgICAgICAgICAmTmljLT5SYXRlTGltaXRlcg0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICk7DQo+ID4gKyAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgICBT dGF0dXMgPSBnQlMtPlNldFRpbWVyICgNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIE5pYy0+ UmF0ZUxpbWl0ZXIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICBUaW1lclBlcmlvZGljLA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgTmljLT5SYXRlTGltaXRpbmdQb2xsVGltZXIgKiAx MDAwMA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gPiArICAgICAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgICAgIEV2ZW50RXJyb3IgPSBUUlVFOw0KPiA+ICsg ICAgICB9DQo+ID4gKyAgICB9DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoKE5pYy0+VXNi RXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlTdGFydCAhPSBOVUxMKSAmJiAoRXZlbnRFcnJvcg0K PiA9PSBGQUxTRSkpIHsNCj4gPiArICAgIFN0YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRp LlVzYkV0aFVuZGlTdGFydCAoQ2RiLCBOaWMpOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYg KCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgIC8vIEluaXRpYWwgdGhlIHN0YXRlIGZv ciBVTkRJIHN0YXJ0Lg0KPiA+ICsgICAgTmljLT5TdGF0ZSAgICAgPSBQWEVfU1RBVEZMQUdTX0dF VF9TVEFURV9TVEFSVEVEOw0KPiA+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdT X0NPTU1BTkRfQ09NUExFVEU7DQo+ID4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09E RV9TVUNDRVNTOw0KPiA+ICsgIH0gZWxzZSB7DQo+ID4gKyAgICBpZiAoTmljLT5SYXRlTGltaXRp bmdFbmFibGUgPT0gVFJVRSkgew0KPiA+ICsgICAgICBpZiAoIUV2ZW50RXJyb3IpIHsNCj4gPiAr ICAgICAgICBnQlMtPlNldFRpbWVyICgmTmljLT5SYXRlTGltaXRlciwgVGltZXJDYW5jZWwsIDAp Ow0KPiA+ICsgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICBpZiAoTmljLT5SYXRlTGltaXRlcikg ew0KPiA+ICsgICAgICAgIGdCUy0+Q2xvc2VFdmVudCAoJk5pYy0+UmF0ZUxpbWl0ZXIpOw0KPiA+ ICsgICAgICAgIE5pYy0+UmF0ZUxpbWl0ZXIgPSAwOw0KPiA+ICsgICAgICB9DQo+ID4gKyAgICB9 DQo+ID4gKw0KPiA+ICsgICAgLy8gSW5pdGlhbCB0aGUgc3RhdGUgd2hlbiBVTkRJIHN0YXJ0IGlz IGZhaWwNCj4gPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZB SUxFRDsNCj4gPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0RFVklDRV9GQUlM VVJFOw0KPiA+ICsgIH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhpcyBjb21t YW5kIGlzIHVzZWQgdG8gY2hhbmdlIHRoZSBVTkRJIG9wZXJhdGlvbmFsIHN0YXRlIGZyb20gc3Rh cnRlZA0KPiB0byBzdG9wcGVkLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9p bnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiA+ICsgIEBwYXJhbVtpbl0g IE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEu DQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArVk9JRA0KPiA+ICtVbmRpU3RvcCAoDQo+ID4gKyAgSU4g IFBYRV9DREIgICAqQ2RiLA0KPiA+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiA+ICsgICkNCj4g PiArew0KPiA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiArDQo+ID4gKyAgaWYgKChDZGIt Pk9wQ29kZSAhPSBQWEVfT1BDT0RFX1NUT1ApIHx8DQo+ID4gKyAgICAgIChDZGItPlN0YXRDb2Rl ICE9IFBYRV9TVEFUQ09ERV9JTklUSUFMSVpFKSB8fA0KPiA+ICsgICAgICAoQ2RiLT5TdGF0Rmxh Z3MgIT0gUFhFX1NUQVRGTEFHU19JTklUSUFMSVpFKSB8fA0KPiA+ICsgICAgICAoQ2RiLT5JRm51 bSA+PSAoZ1B4ZS0+SUZjbnQgfCBnUHhlLT5JRmNudEV4dCA8PCA4KSkgfHwNCj4gPiArICAgICAg KENkYi0+Q1BCc2l6ZSAhPSBQWEVfQ1BCU0laRV9OT1RfVVNFRCkgfHwNCj4gPiArICAgICAgKENk Yi0+Q1BCYWRkciAhPSBQWEVfQ1BCQUREUl9OT1RfVVNFRCkgfHwNCj4gPiArICAgICAgKENkYi0+ REJzaXplICE9IFBYRV9EQlNJWkVfTk9UX1VTRUQpIHx8DQo+ID4gKyAgICAgIChDZGItPkRCYWRk ciAhPSBQWEVfREJBRERSX05PVF9VU0VEKSB8fA0KPiA+ICsgICAgICAoQ2RiLT5PcEZsYWdzICE9 IFBYRV9PUEZMQUdTX05PVF9VU0VEKSkNCj4gPiArICB7DQo+ID4gKyAgICBDZGItPlN0YXRGbGFn cyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ID4gKyAgICBDZGItPlN0YXRDb2Rl ICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gPiArICAgIHJldHVybjsNCj4gPiArICB9 IGVsc2Ugew0KPiA+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRf Q09NUExFVEU7DQo+ID4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9TVUNDRVNT Ow0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYgKE5pYy0+U3RhdGUgPT0gUFhFX1NUQVRGTEFH U19HRVRfU1RBVEVfU1RPUFBFRCkgew0KPiA+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RB VEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiA+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RB VENPREVfTk9UX1NUQVJURUQ7DQo+ID4gKyAgICByZXR1cm47DQo+ID4gKyAgfQ0KPiA+ICsNCj4g PiArICBpZiAoTmljLT5TdGF0ZSA9PSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9JTklUSUFMSVpF RCkgew0KPiA+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJ TEVEOw0KPiA+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfTk9UX1NIVVRET1dO Ow0KPiA+ICsgICAgcmV0dXJuOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgTmljLT5QeGVTdGFy dC5EZWxheSAgICAgPSAwOw0KPiA+ICsgIE5pYy0+UHhlU3RhcnQuVmlydDJQaHlzID0gMDsNCj4g PiArICBOaWMtPlB4ZVN0YXJ0LkJsb2NrICAgICA9IDA7DQo+ID4gKyAgTmljLT5QeGVTdGFydC5N YXBfTWVtICAgPSAwOw0KPiA+ICsgIE5pYy0+UHhlU3RhcnQuVW5NYXBfTWVtID0gMDsNCj4gPiAr ICBOaWMtPlB4ZVN0YXJ0LlN5bmNfTWVtICA9IDA7DQo+ID4gKyAgTmljLT5TdGF0ZSAgICAgICAg ICAgICAgPSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9TVE9QUEVEOw0KPiA+ICsNCj4gPiArICBp ZiAoTmljLT5SYXRlTGltaXRpbmdFbmFibGUgPT0gVFJVRSkgew0KPiA+ICsgICAgZ0JTLT5TZXRU aW1lciAoJk5pYy0+UmF0ZUxpbWl0ZXIsIFRpbWVyQ2FuY2VsLCAwKTsNCj4gPiArICAgIGdCUy0+ Q2xvc2VFdmVudCAoJk5pYy0+UmF0ZUxpbWl0ZXIpOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAg aWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlTdG9wICE9IE5VTEwpIHsNCj4g PiArICAgIFN0YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlTdG9wIChD ZGIsIE5pYyk7DQo+ID4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICAg IENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gPiArICAg IH0NCj4gPiArICB9DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFRoaXMgY29tbWFu ZCBpcyB1c2VkIHRvIHJldHJpZXZlIGluaXRpYWxpemF0aW9uIGluZm9ybWF0aW9uIHRoYXQgaXMN Cj4gPiArICBuZWVkZWQgYnkgZHJpdmVycyBhbmQgYXBwbGljYXRpb25zIHRvIGluaXRpYWxpemVk IFVOREkuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBj b21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ID4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50 ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gPiArDQo+ID4g KyoqLw0KPiA+ICtWT0lEDQo+ID4gK1VuZGlHZXRJbml0SW5mbyAoDQo+ID4gKyAgSU4gIFBYRV9D REIgICAqQ2RiLA0KPiA+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiA+ICsgICkNCj4gPiArew0K PiA+ICsgIFBYRV9EQl9HRVRfSU5JVF9JTkZPICAqRGI7DQo+ID4gKyAgRUZJX1NUQVRVUyAgICAg ICAgICAgIFN0YXR1czsNCj4gPiArDQo+ID4gKyAgaWYgKChDZGItPk9wQ29kZSAhPSBQWEVfT1BD T0RFX0dFVF9JTklUX0lORk8pIHx8DQo+ID4gKyAgICAgIChDZGItPlN0YXRDb2RlICE9IFBYRV9T VEFUQ09ERV9JTklUSUFMSVpFKSB8fA0KPiA+ICsgICAgICAoQ2RiLT5TdGF0RmxhZ3MgIT0gUFhF X1NUQVRGTEFHU19JTklUSUFMSVpFKSB8fA0KPiA+ICsgICAgICAoQ2RiLT5JRm51bSA+PSAoZ1B4 ZS0+SUZjbnQgfCBnUHhlLT5JRmNudEV4dCA8PCA4KSkgfHwNCj4gPiArICAgICAgKENkYi0+Q1BC c2l6ZSAhPSBQWEVfQ1BCU0laRV9OT1RfVVNFRCkgfHwNCj4gPiArICAgICAgKENkYi0+Q1BCYWRk ciAhPSBQWEVfQ1BCQUREUl9OT1RfVVNFRCkgfHwNCj4gPiArICAgICAgKENkYi0+REJzaXplICE9 IHNpemVvZiAoUFhFX0RCX0dFVF9JTklUX0lORk8pKSB8fA0KPiA+ICsgICAgICAoQ2RiLT5PcEZs YWdzICE9IFBYRV9PUEZMQUdTX05PVF9VU0VEKSkNCj4gPiArICB7DQo+ID4gKyAgICBDZGItPlN0 YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ID4gKyAgICBDZGItPlN0 YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gPiArICAgIHJldHVybjsNCj4g PiArICB9IGVsc2Ugew0KPiA+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NP TU1BTkRfQ09NUExFVEU7DQo+ID4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9T VUNDRVNTOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYgKE5pYy0+U3RhdGUgPT0gUFhFX1NU QVRGTEFHU19HRVRfU1RBVEVfU1RPUFBFRCkgew0KPiA+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQ WEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiA+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQ WEVfU1RBVENPREVfTk9UX1NUQVJURUQ7DQo+ID4gKyAgICByZXR1cm47DQo+ID4gKyAgfQ0KPiA+ ICsNCj4gPiArICBEYiA9IChQWEVfREJfR0VUX0lOSVRfSU5GTyAqKShVSU5UTilDZGItPkRCYWRk cjsNCj4gPiArDQo+ID4gKyAgRGItPk1lbW9yeVJlcXVpcmVkICAgICAgICAgPSBNRU1PUllfUkVR VUlSRTsNCj4gPiArICBEYi0+RnJhbWVEYXRhTGVuICAgICAgICAgICA9IFBYRV9NQVhfVFhSWF9V TklUX0VUSEVSOw0KPiA+ICsgIERiLT5MaW5rU3BlZWRzWzBdICAgICAgICAgID0gMTA7DQo+ID4g KyAgRGItPkxpbmtTcGVlZHNbMV0gICAgICAgICAgPSAxMDA7DQo+ID4gKyAgRGItPkxpbmtTcGVl ZHNbMl0gICAgICAgICAgPSAxMDAwOw0KPiA+ICsgIERiLT5MaW5rU3BlZWRzWzNdICAgICAgICAg ID0gMDsNCj4gPiArICBEYi0+TWVkaWFIZWFkZXJMZW4gICAgICAgICA9IFBYRV9NQUNfSEVBREVS X0xFTl9FVEhFUjsNCj4gPiArICBEYi0+SFdhZGRyTGVuICAgICAgICAgICAgICA9IFBYRV9IV0FE RFJfTEVOX0VUSEVSOw0KPiA+ICsgIERiLT5NQ2FzdEZpbHRlckNudCAgICAgICAgID0gTUFYX01D QVNUX0FERFJFU1NfQ05UOw0KPiA+ICsgIERiLT5UeEJ1ZkNudCAgICAgICAgICAgICAgID0gTmlj LT5QeGVJbml0LlR4QnVmQ250Ow0KPiA+ICsgIERiLT5UeEJ1ZlNpemUgICAgICAgICAgICAgID0g TmljLT5QeGVJbml0LlR4QnVmU2l6ZTsNCj4gPiArICBEYi0+UnhCdWZDbnQgICAgICAgICAgICAg ICA9IE5pYy0+UHhlSW5pdC5SeEJ1ZkNudDsNCj4gPiArICBEYi0+UnhCdWZTaXplICAgICAgICAg ICAgICA9IE5pYy0+UHhlSW5pdC5SeEJ1ZlNpemU7DQo+ID4gKyAgRGItPklGdHlwZSAgICAgICAg ICAgICAgICAgPSBQWEVfSUZUWVBFX0VUSEVSTkVUOw0KPiA+ICsgIERiLT5TdXBwb3J0ZWREdXBs ZXhNb2RlcyAgID0gUFhFX0RVUExFWF9ERUZBVUxUOw0KPiA+ICsgIERiLT5TdXBwb3J0ZWRMb29w QmFja01vZGVzID0gTE9PUEJBQ0tfTk9STUFMOw0KPiA+ICsNCj4gPiArICBDZGItPlN0YXRGbGFn cyB8PSAoUFhFX1NUQVRGTEFHU19DQUJMRV9ERVRFQ1RfU1VQUE9SVEVEIHwNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgUFhFX1NUQVRGTEFHU19HRVRfU1RBVFVTX05PX01FRElBX1NVUFBPUlRF RCk7DQo+ID4gKw0KPiA+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRp R2V0SW5pdEluZm8gIT0gTlVMTCkgew0KPiA+ICsgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVz YkV0aFVuZGkuVXNiRXRoVW5kaUdldEluaXRJbmZvIChDZGIsIE5pYyk7DQo+ID4gKyAgICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NU QVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gPiArICAgIH0NCj4gPiArICB9DQo+ID4gK30NCj4g PiArDQo+ID4gKy8qKg0KPiA+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIHJldHJpZXZlIGNv bmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYWJvdXQNCj4gPiArICB0aGUgTklDIGJlaW5nIGNvbnRy b2xsZWQgYnkgdGhlIFVOREkuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2lu dGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ID4gKyAgQHBhcmFtW2luXSAg TmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4N Cj4gPiArDQo+ID4gKyoqLw0KPiA+ICtWT0lEDQo+ID4gK1VuZGlHZXRDb25maWdJbmZvICgNCj4g PiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ID4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ID4g KyAgKQ0KPiA+ICt7DQo+ID4gKyAgUFhFX0RCX0dFVF9DT05GSUdfSU5GTyAgKkRiOw0KPiA+ICsg IEVGSV9TVEFUVVMgICAgICAgICAgICAgIFN0YXR1czsNCj4gPiArDQo+ID4gKyAgaWYgKChDZGIt Pk9wQ29kZSAhPSBQWEVfT1BDT0RFX0dFVF9DT05GSUdfSU5GTykgfHwNCj4gPiArICAgICAgKENk Yi0+U3RhdENvZGUgIT0gUFhFX1NUQVRDT0RFX0lOSVRJQUxJWkUpIHx8DQo+ID4gKyAgICAgIChD ZGItPlN0YXRGbGFncyAhPSBQWEVfU1RBVEZMQUdTX0lOSVRJQUxJWkUpIHx8DQo+ID4gKyAgICAg IChDZGItPklGbnVtID49IChnUHhlLT5JRmNudCB8IGdQeGUtPklGY250RXh0IDw8IDgpKSB8fA0K PiA+ICsgICAgICAoQ2RiLT5DUEJzaXplICE9IFBYRV9DUEJTSVpFX05PVF9VU0VEKSB8fA0KPiA+ ICsgICAgICAoQ2RiLT5DUEJhZGRyICE9IFBYRV9DUEJBRERSX05PVF9VU0VEKSB8fA0KPiA+ICsg ICAgICAoQ2RiLT5EQnNpemUgIT0gc2l6ZW9mIChQWEVfREJfR0VUX0NPTkZJR19JTkZPKSkgfHwN Cj4gPiArICAgICAgKENkYi0+T3BGbGFncyAhPSBQWEVfT1BGTEFHU19OT1RfVVNFRCkpDQo+ID4g KyAgew0KPiA+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJ TEVEOw0KPiA+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7 DQo+ID4gKyAgICByZXR1cm47DQo+ID4gKyAgfSBlbHNlIHsNCj4gPiArICAgIENkYi0+U3RhdEZs YWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0NPTVBMRVRFOw0KPiA+ICsgICAgQ2RiLT5TdGF0 Q29kZSAgPSBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlm IChOaWMtPlN0YXRlID09IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRFX1NUT1BQRUQpIHsNCj4gPiAr ICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gPiAr ICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX05PVF9TVEFSVEVEOw0KPiA+ICsgICAg cmV0dXJuOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgRGIgPSAoUFhFX0RCX0dFVF9DT05GSUdf SU5GTyAqKShVSU5UTilDZGItPkRCYWRkcjsNCj4gPiArDQo+ID4gKyAgRGItPnBjaS5CdXNUeXBl ID0gUFhFX0JVU1RZUEVfVVNCOw0KPiA+ICsNCj4gPiArICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0 aFVuZGkuVXNiRXRoVW5kaUdldENvbmZpZ0luZm8gIT0gTlVMTCkgew0KPiA+ICsgICAgU3RhdHVz ID0gTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaUdldENvbmZpZ0luZm8gKENkYiwN Cj4gTmljKTsNCj4gPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgICAg Q2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiA+ICsgICAg fQ0KPiA+ICsgIH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhpcyBjb21tYW5k IHJlc2V0cyB0aGUgbmV0d29yayBhZGFwdGVyIGFuZCBpbml0aWFsaXplcyBVTkRJIHVzaW5nDQo+ ID4gKyAgdGhlIHBhcmFtZXRlcnMgc3VwcGxpZWQgaW4gdGhlIENQQi4NCj4gPiArDQo+ID4gKyAg QHBhcmFtW2luXSAgICAgIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3Ig YmxvY2suDQo+ID4gKyAgQHBhcmFtW2luLCBvdXRdIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3 b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArVk9J RA0KPiA+ICtVbmRpSW5pdGlhbGl6ZSAoDQo+ID4gKyAgSU4gICAgICBQWEVfQ0RCICAgKkNkYiwN Cj4gPiArICBJTiBPVVQgIE5JQ19EQVRBICAqTmljDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAg UFhFX0NQQl9JTklUSUFMSVpFICAqQ3BiOw0KPiA+ICsgIFBYRV9EQl9JTklUSUFMSVpFICAgKkRi Ow0KPiA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgU3RhdHVzOw0KPiA+ICsNCj4gPiArICBpZiAo KENkYi0+T3BDb2RlICE9IFBYRV9PUENPREVfSU5JVElBTElaRSkgfHwNCj4gPiArICAgICAgKENk Yi0+U3RhdENvZGUgIT0gUFhFX1NUQVRDT0RFX0lOSVRJQUxJWkUpIHx8DQo+ID4gKyAgICAgIChD ZGItPlN0YXRGbGFncyAhPSBQWEVfU1RBVEZMQUdTX0lOSVRJQUxJWkUpIHx8DQo+ID4gKyAgICAg IChDZGItPklGbnVtID49IChnUHhlLT5JRmNudCB8IGdQeGUtPklGY250RXh0IDw8IDgpKSB8fA0K PiA+ICsgICAgICAoQ2RiLT5DUEJzaXplICE9IHNpemVvZiAoUFhFX0NQQl9JTklUSUFMSVpFKSkp DQo+ID4gKyAgew0KPiA+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1B TkRfRkFJTEVEOw0KPiA+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJ RF9DREI7DQo+ID4gKyAgICByZXR1cm47DQo+ID4gKyAgfSBlbHNlIHsNCj4gPiArICAgIENkYi0+ U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0NPTVBMRVRFOw0KPiA+ICsgIH0NCj4g PiArDQo+ID4gKyAgaWYgKE5pYy0+U3RhdGUgPT0gUFhFX1NUQVRGTEFHU19HRVRfU1RBVEVfU1RP UFBFRCkgew0KPiA+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRf RkFJTEVEOw0KPiA+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfTk9UX1NUQVJU RUQ7DQo+ID4gKyAgICByZXR1cm47DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoKENkYi0+ T3BGbGFncyAhPSBQWEVfT1BGTEFHU19JTklUSUFMSVpFX0RFVEVDVF9DQUJMRSkgJiYNCj4gPiAr ICAgICAgKENkYi0+T3BGbGFncyAhPSBQWEVfT1BGTEFHU19JTklUSUFMSVpFX0RPX05PVF9ERVRF Q1RfQ0FCTEUpKQ0KPiA+ICsgIHsNCj4gPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRG TEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRD T0RFX0lOVkFMSURfQ0RCOw0KPiA+ICsgICAgcmV0dXJuOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4g KyAgaWYgKE5pYy0+U3RhdGUgPT0gUFhFX1NUQVRGTEFHU19HRVRfU1RBVEVfSU5JVElBTElaRUQp IHsNCj4gPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxF RDsNCj4gPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0FMUkVBRFlfSU5JVElB TElaRUQ7DQo+ID4gKyAgICByZXR1cm47DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBDcGIgPSAo UFhFX0NQQl9JTklUSUFMSVpFICopKFVJTlROKUNkYi0+Q1BCYWRkcjsNCj4gPiArICBEYiAgPSAo UFhFX0RCX0lOSVRJQUxJWkUgKikoVUlOVE4pQ2RiLT5EQmFkZHI7DQo+ID4gKw0KPiA+ICsgIE5p Yy0+UHhlSW5pdC5MaW5rU3BlZWQgICAgPSBDcGItPkxpbmtTcGVlZDsNCj4gPiArICBOaWMtPlB4 ZUluaXQuRHVwbGV4TW9kZSAgID0gQ3BiLT5EdXBsZXhNb2RlOw0KPiA+ICsgIE5pYy0+UHhlSW5p dC5Mb29wQmFja01vZGUgPSBDcGItPkxvb3BCYWNrTW9kZTsNCj4gPiArICBOaWMtPlB4ZUluaXQu TWVtb3J5QWRkciAgID0gQ3BiLT5NZW1vcnlBZGRyOw0KPiA+ICsgIE5pYy0+UHhlSW5pdC5NZW1v cnlMZW5ndGggPSBDcGItPk1lbW9yeUxlbmd0aDsNCj4gPiArICBOaWMtPlB4ZUluaXQuVHhCdWZD bnQgICAgID0gVFhfQlVGRkVSX0NPVU5UOw0KPiA+ICsgIE5pYy0+UHhlSW5pdC5UeEJ1ZlNpemUg ICAgPSBOaWMtPk1heFNlZ21lbnRTaXplOw0KPiA+ICsgIE5pYy0+UHhlSW5pdC5SeEJ1ZkNudCAg ICAgPSBSWF9CVUZGRVJfQ09VTlQ7DQo+ID4gKyAgTmljLT5QeGVJbml0LlJ4QnVmU2l6ZSAgICA9 IE5pYy0+TWF4U2VnbWVudFNpemU7DQo+ID4gKw0KPiA+ICsgIENkYi0+U3RhdENvZGUgPSBJbml0 aWFsaXplIChDZGIsIE5pYyk7DQo+ID4gKw0KPiA+ICsgIERiLT5NZW1vcnlVc2VkID0gTUVNT1JZ X1JFUVVJUkU7DQo+ID4gKyAgRGItPlR4QnVmQ250ICAgPSBOaWMtPlB4ZUluaXQuVHhCdWZDbnQ7 DQo+ID4gKyAgRGItPlR4QnVmU2l6ZSAgPSBOaWMtPlB4ZUluaXQuVHhCdWZTaXplOw0KPiA+ICsg IERiLT5SeEJ1ZkNudCAgID0gTmljLT5QeGVJbml0LlJ4QnVmQ250Ow0KPiA+ICsgIERiLT5SeEJ1 ZlNpemUgID0gTmljLT5QeGVJbml0LlJ4QnVmU2l6ZTsNCj4gPiArDQo+ID4gKyAgTmljLT5SeEZp bHRlciAgICA9IFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX0JST0FEQ0FTVDsNCj4gPiArICBO aWMtPkNhblRyYW5zbWl0ID0gRkFMU0U7DQo+ID4gKw0KPiA+ICsgIGlmIChDZGItPk9wRmxhZ3Mg PT0gUFhFX09QRkxBR1NfSU5JVElBTElaRV9ERVRFQ1RfQ0FCTEUpIHsNCj4gPiArICAgIGlmICgo TmljLT5SZXF1ZXN0LlJlcXVlc3QgPT0gVVNCX0NEQ19ORVRXT1JLX0NPTk5FQ1RJT04pICYmDQo+ IChOaWMtPlJlcXVlc3QuVmFsdWUgPT0gTkVUV09SS19ESVNDT05ORUNUKSkgew0KPiA+ICsgICAg ICBOaWMtPkNhYmxlRGV0ZWN0ID0gMDsNCj4gPiArICAgIH0gZWxzZSBpZiAoKE5pYy0+UmVxdWVz dC5SZXF1ZXN0ID09IFVTQl9DRENfTkVUV09SS19DT05ORUNUSU9OKQ0KPiAmJiAoTmljLT5SZXF1 ZXN0LlZhbHVlID09IE5FVFdPUktfQ09OTkVDVEVEKSkgew0KPiA+ICsgICAgICBOaWMtPkNhYmxl RGV0ZWN0ID0gMTsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBpZiAoTmljLT5DYWJsZURl dGVjdCA9PSAwKSB7DQo+ID4gKyAgICAgIENkYi0+U3RhdEZsYWdzIHw9IFBYRV9TVEFURkxBR1Nf SU5JVElBTElaRURfTk9fTUVESUE7DQo+ID4gKyAgICB9DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiAr ICBpZiAoQ2RiLT5TdGF0Q29kZSAhPSBQWEVfU1RBVENPREVfU1VDQ0VTUykgew0KPiA+ICsgICAg Q2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiA+ICsgIH0g ZWxzZSB7DQo+ID4gKyAgICBOaWMtPlN0YXRlID0gUFhFX1NUQVRGTEFHU19HRVRfU1RBVEVfSU5J VElBTElaRUQ7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0 aFVuZGkuVXNiRXRoVW5kaUluaXRpYWxpemUgIT0gTlVMTCkgew0KPiA+ICsgICAgU3RhdHVzID0g TmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaUluaXRpYWxpemUgKENkYiwgTmljKTsN Cj4gPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgICAgQ2RiLT5TdGF0 RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiA+ICsgICAgfQ0KPiA+ICsg IH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgSW5pdGlhbGl6ZSBOZXR3b3JrIGlu dGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICBD ZGIgICAgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiA+ICsg IEBwYXJhbVtpbiwgb3V0XSBOaWMgICAgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZh Y2UgY29udHJvbGxlciBkYXRhLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIFN0YXR1cyAgQSB2YWx1 ZSBvZiBQeGUgc3RhdGNvZGUuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArVUlOVDE2DQo+ID4gK0lu aXRpYWxpemUgKA0KPiA+ICsgIElOICAgICAgUFhFX0NEQiAgICpDZGIsDQo+ID4gKyAgSU4gT1VU ICBOSUNfREFUQSAgKk5pYw0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIFVJTlROICAgICAgIFN0 YXR1czsNCj4gPiArICBVSU5UMzIgICAgICBJbmRleDsNCj4gPiArICBFRklfU1RBVFVTICBFZmlT dGF0dXM7DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IE1hcEl0ICgNCj4gPiArICAgICAgICAgICAg IE5pYywNCj4gPiArICAgICAgICAgICAgIE5pYy0+UHhlSW5pdC5NZW1vcnlBZGRyLA0KPiA+ICsg ICAgICAgICAgICAgTmljLT5QeGVJbml0Lk1lbW9yeUxlbmd0aCwNCj4gPiArICAgICAgICAgICAg IFRPX0FORF9GUk9NX0RFVklDRSwNCj4gPiArICAgICAgICAgICAgIChVSU5UNjQpKFVJTlROKSZO aWMtPk1hcHBlZEFkZHINCj4gPiArICAgICAgICAgICAgICk7DQo+ID4gKw0KPiA+ICsgIGlmIChT dGF0dXMgIT0gMCkgew0KPiA+ICsgICAgcmV0dXJuIChVSU5UMTYpU3RhdHVzOw0KPiA+ICsgIH0N Cj4gPiArDQo+ID4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgUFhFX0hXQUREUl9MRU5fRVRI RVI7IEluZGV4KyspIHsNCj4gPiArICAgIE5pYy0+UGVybU5vZGVBZGRyZXNzW0luZGV4XSA9IE5p Yy0+TWFjQWRkci5BZGRyW0luZGV4XTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGZvciAoSW5k ZXggPSAwOyBJbmRleCA8IFBYRV9IV0FERFJfTEVOX0VUSEVSOyBJbmRleCsrKSB7DQo+ID4gKyAg ICBOaWMtPkN1cnJlbnROb2RlQWRkcmVzc1tJbmRleF0gPSBOaWMtPlBlcm1Ob2RlQWRkcmVzc1tJ bmRleF07DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBQ WEVfSFdBRERSX0xFTl9FVEhFUjsgSW5kZXgrKykgew0KPiA+ICsgICAgTmljLT5Ccm9hZGNhc3RO b2RlQWRkcmVzc1tJbmRleF0gPSAweEZGOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgZm9yIChJ bmRleCA9IFBYRV9IV0FERFJfTEVOX0VUSEVSOyBJbmRleCA8IFBYRV9NQUNfTEVOR1RIOw0KPiBJ bmRleCsrKSB7DQo+ID4gKyAgICBOaWMtPkN1cnJlbnROb2RlQWRkcmVzc1tJbmRleF0gICA9IDA7 DQo+ID4gKyAgICBOaWMtPlBlcm1Ob2RlQWRkcmVzc1tJbmRleF0gICAgICA9IDA7DQo+ID4gKyAg ICBOaWMtPkJyb2FkY2FzdE5vZGVBZGRyZXNzW0luZGV4XSA9IDA7DQo+ID4gKyAgfQ0KPiA+ICsN Cj4gPiArICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0aEluaXRpYWxpemUgIT0gTlVMTCkgew0KPiA+ ICsgICAgRWZpU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aEluaXRpYWxpemUgKENkYiwgTmlj KTsNCj4gPiArICAgIGlmIChFRklfRVJST1IgKEVmaVN0YXR1cykpIHsNCj4gPiArICAgICAgcmV0 dXJuIFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ID4gKyAgICB9DQo+ID4gKyAgfQ0K PiA+ICsNCj4gPiArICByZXR1cm4gKFVJTlQxNilTdGF0dXM7DQo+ID4gK30NCj4gPiArDQo+ID4g Ky8qKg0KPiA+ICsgIFRoaXMgY29tbWFuZCByZXNldHMgdGhlIG5ldHdvcmsgYWRhcHRlciBhbmQg cmVpbml0aWFsaXplcyB0aGUgVU5ESQ0KPiA+ICsgIHdpdGggdGhlIHNhbWUgcGFyYW1ldGVycyBw cm92aWRlZCBpbiB0aGUgSW5pdGlhbGl6ZSBjb21tYW5kLg0KPiA+ICsNCj4gPiArICBAcGFyYW1b aW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiA+ ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBj b250cm9sbGVyIGRhdGEuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArVk9JRA0KPiA+ICtVbmRpUmVz ZXQgKA0KPiA+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gPiArICBJTiAgTklDX0RBVEEgICpO aWMNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ID4gKw0K PiA+ICsgIGlmICgoQ2RiLT5PcENvZGUgIT0gUFhFX09QQ09ERV9SRVNFVCkgfHwNCj4gPiArICAg ICAgKENkYi0+U3RhdENvZGUgIT0gUFhFX1NUQVRDT0RFX0lOSVRJQUxJWkUpIHx8DQo+ID4gKyAg ICAgIChDZGItPlN0YXRGbGFncyAhPSBQWEVfU1RBVEZMQUdTX0lOSVRJQUxJWkUpIHx8DQo+ID4g KyAgICAgIChDZGItPklGbnVtID49IChnUHhlLT5JRmNudCB8IGdQeGUtPklGY250RXh0IDw8IDgp KSB8fA0KPiA+ICsgICAgICAoQ2RiLT5DUEJzaXplICE9IFBYRV9DUEJTSVpFX05PVF9VU0VEKSB8 fA0KPiA+ICsgICAgICAoQ2RiLT5DUEJhZGRyICE9IFBYRV9DUEJBRERSX05PVF9VU0VEKSB8fA0K PiA+ICsgICAgICAoQ2RiLT5EQnNpemUgIT0gUFhFX0RCU0laRV9OT1RfVVNFRCkgfHwNCj4gPiAr ICAgICAgKENkYi0+REJhZGRyICE9IFBYRV9EQkFERFJfTk9UX1VTRUQpKQ0KPiA+ICsgIHsNCj4g PiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4g PiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiA+ICsg ICAgcmV0dXJuOw0KPiA+ICsgIH0gZWxzZSB7DQo+ID4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBY RV9TVEFURkxBR1NfQ09NTUFORF9DT01QTEVURTsNCj4gPiArICAgIENkYi0+U3RhdENvZGUgID0g UFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoTmljLT5T dGF0ZSAhPSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9JTklUSUFMSVpFRCkgew0KPiA+ICsgICAg Q2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfTk9UX0lOSVRJQUxJWkVEOw0KPiA+ICsgICAg Q2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiA+ICsgICAg cmV0dXJuOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYgKChDZGItPk9wRmxhZ3MgIT0gUFhF X09QRkxBR1NfTk9UX1VTRUQpICYmDQo+ID4gKyAgICAgIChDZGItPk9wRmxhZ3MgIT0gUFhFX09Q RkxBR1NfUkVTRVRfRElTQUJMRV9JTlRFUlJVUFRTKSAmJg0KPiA+ICsgICAgICAoQ2RiLT5PcEZs YWdzICE9IFBYRV9PUEZMQUdTX1JFU0VUX0RJU0FCTEVfRklMVEVSUykpDQo+ID4gKyAgew0KPiA+ ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiA+ ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ID4gKyAg ICByZXR1cm47DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoKENkYi0+T3BGbGFncyAmIFBY RV9PUEZMQUdTX1JFU0VUX0RJU0FCTEVfRklMVEVSUykgPT0gMCkgew0KPiA+ICsgICAgTmljLT5S eEZpbHRlciA9IFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX0JST0FEQ0FTVDsNCj4gPiArICB9 DQo+ID4gKw0KPiA+ICsgIGlmICgoQ2RiLT5PcEZsYWdzICYgUFhFX09QRkxBR1NfUkVTRVRfRElT QUJMRV9JTlRFUlJVUFRTKSAhPSAwKSB7DQo+ID4gKyAgICBOaWMtPkludGVycnVwT3BGbGFnID0g MDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5V c2JFdGhVbmRpUmVzZXQgIT0gTlVMTCkgew0KPiA+ICsgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgt PlVzYkV0aFVuZGkuVXNiRXRoVW5kaVJlc2V0IChDZGIsIE5pYyk7DQo+ID4gKyAgICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRG TEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gPiArICAgIH0NCj4gPiArICB9DQo+ID4gK30NCj4gPiAr DQo+ID4gKy8qKg0KPiA+ICsgIFRoZSBTaHV0ZG93biBjb21tYW5kIHJlc2V0cyB0aGUgbmV0d29y ayBhZGFwdGVyIGFuZCBsZWF2ZXMgaXQgaW4gYQ0KPiA+ICsgIHNhZmUgc3RhdGUgZm9yIGFub3Ro ZXIgZHJpdmVyIHRvIGluaXRpYWxpemUuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICBD ZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiA+ICsgIEBw YXJhbVtpbiwgb3V0XSBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29u dHJvbGxlciBkYXRhLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1ZPSUQNCj4gPiArVW5kaVNodXRk b3duICgNCj4gPiArICBJTiAgICAgIFBYRV9DREIgICAqQ2RiLA0KPiA+ICsgIElOIE9VVCAgTklD X0RBVEEgICpOaWMNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RBVFVTICBTdGF0dXM7 DQo+ID4gKw0KPiA+ICsgIGlmICgoQ2RiLT5PcENvZGUgIT0gUFhFX09QQ09ERV9TSFVURE9XTikg fHwNCj4gPiArICAgICAgKENkYi0+U3RhdENvZGUgIT0gUFhFX1NUQVRDT0RFX0lOSVRJQUxJWkUp IHx8DQo+ID4gKyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQWEVfU1RBVEZMQUdTX0lOSVRJQUxJ WkUpIHx8DQo+ID4gKyAgICAgIChDZGItPklGbnVtID49IChnUHhlLT5JRmNudCB8IGdQeGUtPklG Y250RXh0IDw8IDgpKSB8fA0KPiA+ICsgICAgICAoQ2RiLT5DUEJzaXplICE9IFBYRV9DUEJTSVpF X05PVF9VU0VEKSB8fA0KPiA+ICsgICAgICAoQ2RiLT5DUEJhZGRyICE9IFBYRV9DUEJBRERSX05P VF9VU0VEKSB8fA0KPiA+ICsgICAgICAoQ2RiLT5EQnNpemUgIT0gUFhFX0RCU0laRV9OT1RfVVNF RCkgfHwNCj4gPiArICAgICAgKENkYi0+REJhZGRyICE9IFBYRV9EQkFERFJfTk9UX1VTRUQpIHx8 DQo+ID4gKyAgICAgIChDZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxBR1NfTk9UX1VTRUQpKQ0KPiA+ ICsgIHsNCj4gPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZB SUxFRDsNCj4gPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RC Ow0KPiA+ICsgICAgcmV0dXJuOw0KPiA+ICsgIH0gZWxzZSB7DQo+ID4gKyAgICBDZGItPlN0YXRG bGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9DT01QTEVURTsNCj4gPiArICAgIENkYi0+U3Rh dENvZGUgID0gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBp ZiAoTmljLT5TdGF0ZSAhPSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9JTklUSUFMSVpFRCkgew0K PiA+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfTk9UX0lOSVRJQUxJWkVEOw0K PiA+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0K PiA+ICsgICAgcmV0dXJuOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgTmljLT5DYW5UcmFuc21p dCA9IEZBTFNFOw0KPiA+ICsNCj4gPiArICBOaWMtPlN0YXRlID0gUFhFX1NUQVRGTEFHU19HRVRf U1RBVEVfU1RBUlRFRDsNCj4gPiArDQo+ID4gKyAgaWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRp LlVzYkV0aFVuZGlTaHV0ZG93biAhPSBOVUxMKSB7DQo+ID4gKyAgICBTdGF0dXMgPSBOaWMtPlVz YkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpU2h1dGRvd24gKENkYiwgTmljKTsNCj4gPiArICAg IGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgICAgQ2RiLT5TdGF0Q29kZSAgPSBQ WEVfU1RBVENPREVfTk9UX0lOSVRJQUxJWkVEOw0KPiA+ICsgICAgICBDZGItPlN0YXRGbGFncyA9 IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ID4gKyAgICB9DQo+ID4gKyAgfQ0KPiA+ ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGUgSW50ZXJydXB0IEVuYWJsZXMgY29tbWFu ZCBjYW4gYmUgdXNlZCB0byByZWFkIGFuZC9vciBjaGFuZ2UNCj4gPiArICB0aGUgY3VycmVudCBl eHRlcm5hbCBpbnRlcnJ1cHQgZW5hYmxlIHNldHRpbmdzLg0KPiA+ICsNCj4gPiArICBAcGFyYW1b aW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiA+ ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBj b250cm9sbGVyIGRhdGEuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArVk9JRA0KPiA+ICtVbmRpSW50 ZXJydXB0RW5hYmxlICgNCj4gPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ID4gKyAgSU4gIE5J Q19EQVRBICAqTmljDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1NUQVRVUyAgU3RhdHVz Ow0KPiA+ICsNCj4gPiArICBDZGItPlN0YXRDb2RlID0gUFhFX1NUQVRDT0RFX1VOU1VQUE9SVEVE Ow0KPiA+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpSW50ZXJydXB0 RW5hYmxlICE9IE5VTEwpIHsNCj4gPiArICAgIFN0YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JFdGhV bmRpLlVzYkV0aFVuZGlJbnRlcnJ1cHRFbmFibGUgKENkYiwNCj4gTmljKTsNCj4gPiArICAgIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVf U1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiA+ICsgICAgfSBlbHNlIHsNCj4gPiArICAgICAg Q2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfQ09NUExFVEU7DQo+ID4gKyAg ICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ID4gKyAgICB9DQo+ ID4gKyAgfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGlzIGNvbW1hbmQgaXMg dXNlZCB0byByZWFkIGFuZCBjaGFuZ2UgcmVjZWl2ZSBmaWx0ZXJzIGFuZCwNCj4gPiArICBpZiBz dXBwb3J0ZWQsIHJlYWQgYW5kIGNoYW5nZSB0aGUgbXVsdGljYXN0IE1BQyBhZGRyZXNzIGZpbHRl ciBsaXN0Lg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUg Y29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiA+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2lu dGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ID4gKw0KPiA+ ICsqKi8NCj4gPiArVk9JRA0KPiA+ICtVbmRpUmVjZWl2ZUZpbHRlciAoDQo+ID4gKyAgSU4gIFBY RV9DREIgICAqQ2RiLA0KPiA+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiA+ICsgICkNCj4gPiAr ew0KPiA+ICsgIFVJTlQxNiAgICAgICAgICAgICAgICAgIE5ld0ZpbHRlcjsNCj4gPiArICBQWEVf REJfUkVDRUlWRV9GSUxURVJTICAqRGI7DQo+ID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAg U3RhdHVzOw0KPiA+ICsNCj4gPiArICBpZiAoKENkYi0+T3BDb2RlICE9IFBYRV9PUENPREVfUkVD RUlWRV9GSUxURVJTKSB8fA0KPiA+ICsgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQWEVfU1RBVENP REVfSU5JVElBTElaRSkgfHwNCj4gPiArICAgICAgKENkYi0+U3RhdEZsYWdzICE9IFBYRV9TVEFU RkxBR1NfSU5JVElBTElaRSkgfHwNCj4gPiArICAgICAgKENkYi0+SUZudW0gPj0gKGdQeGUtPklG Y250IHwgZ1B4ZS0+SUZjbnRFeHQgPDwgOCkpKQ0KPiA+ICsgIHsNCj4gPiArICAgIENkYi0+U3Rh dEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gPiArICAgIENkYi0+U3Rh dENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiA+ICsgICAgcmV0dXJuOw0KPiA+ ICsgIH0gZWxzZSB7DQo+ID4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09N TUFORF9DT01QTEVURTsNCj4gPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX1NV Q0NFU1M7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoTmljLT5TdGF0ZSAhPSBQWEVfU1RB VEZMQUdTX0dFVF9TVEFURV9JTklUSUFMSVpFRCkgew0KPiA+ICsgICAgQ2RiLT5TdGF0Q29kZSAg PSBQWEVfU1RBVENPREVfTk9UX0lOSVRJQUxJWkVEOw0KPiA+ICsgICAgQ2RiLT5TdGF0RmxhZ3Mg PSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiA+ICsgICAgcmV0dXJuOw0KPiA+ICsg IH0NCj4gPiArDQo+ID4gKyAgTmV3RmlsdGVyID0gKFVJTlQxNikoQ2RiLT5PcEZsYWdzICYgMHgx Rik7DQo+ID4gKw0KPiA+ICsgIHN3aXRjaCAoQ2RiLT5PcEZsYWdzICYgUFhFX09QRkxBR1NfUkVD RUlWRV9GSUxURVJfT1BNQVNLKSB7DQo+ID4gKyAgICBjYXNlIFBYRV9PUEZMQUdTX1JFQ0VJVkVf RklMVEVSX1JFQUQ6DQo+ID4gKyAgICAgIGlmIChDZGItPkNQQnNpemUgIT0gUFhFX0NQQlNJWkVf Tk9UX1VTRUQpIHsNCj4gPiArICAgICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1Nf Q09NTUFORF9GQUlMRUQ7DQo+ID4gKyAgICAgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENP REVfSU5WQUxJRF9DREI7DQo+ID4gKyAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgIGlmICgoTmV3 RmlsdGVyICYgUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfUkVTRVRfTUNBU1RfTElTVCkNCj4g PT0gMCkgew0KPiA+ICsgICAgICAgIGlmICgoQ2RiLT5EQnNpemUgIT0gMCkpIHsNCj4gPiArICAg ICAgICAgIERiID0gKFBYRV9EQl9SRUNFSVZFX0ZJTFRFUlMgKikoVUlOVE4pQ2RiLT5EQmFkZHI7 DQo+ID4gKyAgICAgICAgICBDb3B5TWVtIChEYiwgJk5pYy0+TWNhc3RMaXN0LCBOaWMtPk1jYXN0 Q291bnQpOw0KPiA+ICsgICAgICAgIH0NCj4gPiArICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAg YnJlYWs7DQo+ID4gKw0KPiA+ICsgICAgY2FzZSBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9F TkFCTEU6DQo+ID4gKyAgICAgIGlmIChOZXdGaWx0ZXIgPT0gMCkgew0KPiA+ICsgICAgICAgIENk Yi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gPiArICAgICAg fQ0KPiA+ICsNCj4gPiArICAgICAgaWYgKENkYi0+Q1BCc2l6ZSAhPSAwKSB7DQo+ID4gKyAgICAg ICAgaWYgKCgoTmV3RmlsdGVyICYNCj4gUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfRklMVEVS RURfTVVMVElDQVNUKSA9PSAwKSB8fA0KPiA+ICsgICAgICAgICAgICAoKE5ld0ZpbHRlciAmDQo+ IFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX1JFU0VUX01DQVNUX0xJU1QpICE9IDApIHx8DQo+ ID4gKyAgICAgICAgICAgICgoTmV3RmlsdGVyICYgUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJf QUxMX01VTFRJQ0FTVCkgIT0NCj4gMCkgfHwNCj4gPiArICAgICAgICAgICAgKChDZGItPkNQQnNp emUgJSBzaXplb2YgKFBYRV9NQUNfQUREUikpICE9IDApKQ0KPiA+ICsgICAgICAgIHsNCj4gPiAr ICAgICAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsN Cj4gPiArICAgICAgICB9DQo+ID4gKyAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgIGlmICgoQ2Ri LT5PcEZsYWdzICYNCj4gUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfRklMVEVSRURfTVVMVElD QVNUKSAhPSAwKSB7DQo+ID4gKyAgICAgICAgaWYgKCgoQ2RiLT5PcEZsYWdzICYNCj4gUFhFX09Q RkxBR1NfUkVDRUlWRV9GSUxURVJfUkVTRVRfTUNBU1RfTElTVCkgIT0gMCkgfHwNCj4gPiArICAg ICAgICAgICAgKChDZGItPk9wRmxhZ3MgJg0KPiBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9B TExfTVVMVElDQVNUKSAhPSAwKSkNCj4gPiArICAgICAgICB7DQo+ID4gKyAgICAgICAgICBDZGIt PlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ID4gKyAgICAgICAg fQ0KPiA+ICsNCj4gPiArICAgICAgICBpZiAoKENkYi0+Q1BCc2l6ZSA9PSAwKSkgew0KPiA+ICsg ICAgICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0K PiA+ICsgICAgICAgIH0NCj4gPiArICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgQ2RiLT5TdGF0 Q29kZSA9IFNldEZpbHRlciAoTmljLCBOZXdGaWx0ZXIsIENkYi0+Q1BCYWRkciwgQ2RiLQ0KPiA+ Q1BCc2l6ZSk7DQo+ID4gKyAgICAgIGJyZWFrOw0KPiA+ICsNCj4gPiArICAgIGNhc2UgUFhFX09Q RkxBR1NfUkVDRUlWRV9GSUxURVJfRElTQUJMRToNCj4gPiArICAgICAgaWYgKENkYi0+Q1BCc2l6 ZSAhPSBQWEVfQ1BCU0laRV9OT1RfVVNFRCkgew0KPiA+ICsgICAgICAgIENkYi0+U3RhdEZsYWdz ID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gPiArICAgICAgICBDZGItPlN0YXRD b2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gPiArICAgICAgfQ0KPiA+ICsNCj4g PiArICAgICAgYnJlYWs7DQo+ID4gKw0KPiA+ICsgICAgZGVmYXVsdDoNCj4gPiArICAgICAgQ2Ri LT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiA+ICsgICAgICBD ZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gPiArICB9DQo+ID4g Kw0KPiA+ICsgIENkYi0+U3RhdEZsYWdzID0gKFBYRV9TVEFURkxBR1MpKENkYi0+U3RhdEZsYWdz IHwgTmljLT5SeEZpbHRlcik7DQo+ID4gKw0KPiA+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNiRXRo VW5kaS5Vc2JFdGhVbmRpUmVjZWl2ZUZpbHRlciAhPSBOVUxMKSB7DQo+ID4gKyAgICBTdGF0dXMg PSBOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpUmVjZWl2ZUZpbHRlciAoQ2RiLCBO aWMpOw0KPiA+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgICBDZGIt PlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ID4gKyAgICB9DQo+ ID4gKyAgfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBTZXQgUFhFIHJlY2VpdmUg ZmlsdGVyLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBOaWMgICAgICAgICBBIHBvaW50ZXIg dG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gPiArICBAcGFyYW1b aW5dICBTZXRGaWx0ZXIgICBQWEUgcmVjZWl2ZSBmaWx0ZXINCj4gPiArICBAcGFyYW1baW5dICBD cGJBZGRyICAgICBDb21tYW5kIFBhcmFtZXRlciBCbG9jayBBZGRyZXNzDQo+ID4gKyAgQHBhcmFt W2luXSAgQ3BiU2l6ZSAgICAgQ29tbWFuZCBQYXJhbWV0ZXIgQmxvY2sgU2l6ZQ0KPiA+ICsNCj4g PiArKiovDQo+ID4gK1VJTlQxNg0KPiA+ICtTZXRGaWx0ZXIgKA0KPiA+ICsgIElOICBOSUNfREFU QSAgKk5pYywNCj4gPiArICBJTiAgVUlOVDE2ICAgIFNldEZpbHRlciwNCj4gPiArICBJTiAgVUlO VDY0ICAgIENwYkFkZHIsDQo+ID4gKyAgSU4gIFVJTlQzMiAgICBDcGJTaXplDQo+ID4gKyAgKQ0K PiA+ICt7DQo+ID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ID4g KyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAqTWNhc3RMaXN0Ow0KPiA+ICsgIFVJTlQ4 ICAgICAgICAgICAgICAgICAgICAgICAgQ291bnQ7DQo+ID4gKyAgVUlOVDggICAgICAgICAgICAg ICAgICAgICAgICBJbmRleDE7DQo+ID4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICBJ bmRleDI7DQo+ID4gKyAgUFhFX0NQQl9SRUNFSVZFX0ZJTFRFUlMgICAgICAqQ3BiOw0KPiA+ICsg IFVTQl9FVEhFUk5FVF9GVU5fREVTQ1JJUFRPUiAgVXNiRXRoRnVuRGVzY3JpcHRvcjsNCj4gPiAr DQo+ID4gKyAgQ291bnQgPSAwOw0KPiA+ICsgIENwYiAgID0gKFBYRV9DUEJfUkVDRUlWRV9GSUxU RVJTICopKFVJTlROKUNwYkFkZHI7DQo+ID4gKw0KPiA+ICsgIC8vIFRoZSBDcGIgY291bGQgYmUg TlVMTC4ocmVmOlBYRV9DUEJBRERSX05PVF9VU0VEKQ0KPiA+ICsgIE5pYy0+UnhGaWx0ZXIgPSAo VUlOVDgpU2V0RmlsdGVyOw0KPiA+ICsNCj4gPiArICBpZiAoKChTZXRGaWx0ZXIgJg0KPiBQWEVf T1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9GSUxURVJFRF9NVUxUSUNBU1QpICE9IDApIHx8IChDcGIg IT0NCj4gTlVMTCkpIHsNCj4gPiArICAgIGlmIChDcGIgIT0gTlVMTCkgew0KPiA+ICsgICAgICBO aWMtPk1jYXN0Q291bnQgPSAoVUlOVDgpKENwYlNpemUgLyBQWEVfTUFDX0xFTkdUSCk7DQo+ID4g KyAgICAgIENvcHlNZW0gKCZOaWMtPk1jYXN0TGlzdCwgQ3BiLCBOaWMtPk1jYXN0Q291bnQpOw0K PiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIE5pYy0+VXNiRXRoLT5Vc2JFdGhGdW5EZXNjcmlw dG9yIChOaWMtPlVzYkV0aCwNCj4gJlVzYkV0aEZ1bkRlc2NyaXB0b3IpOw0KPiA+ICsgICAgaWYg KChVc2JFdGhGdW5EZXNjcmlwdG9yLk51bWJlck1jRmlsdGVycyA8PCAxKSA9PSAwKSB7DQo+ID4g KyAgICAgIE5pYy0+UnhGaWx0ZXIgfD0gUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfQUxMX01V TFRJQ0FTVDsNCj4gPiArICAgICAgTmljLT5Vc2JFdGgtPlNldFVzYkV0aFBhY2tldEZpbHRlciAo TmljLT5Vc2JFdGgsIE5pYy0+UnhGaWx0ZXIpOw0KPiA+ICsgICAgfSBlbHNlIHsNCj4gPiArICAg ICAgU3RhdHVzID0gZ0JTLT5BbGxvY2F0ZVBvb2wgKEVmaUJvb3RTZXJ2aWNlc0RhdGEsIE5pYy0+ TWNhc3RDb3VudCAqIDYsDQo+IChWT0lEICoqKSZNY2FzdExpc3QpOw0KPiA+ICsgICAgICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICAgICAgcmV0dXJuIFBYRV9TVEFUQ09ERV9J TlZBTElEX1BBUkFNRVRFUjsNCj4gPiArICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgaWYgKENw YiAhPSBOVUxMKSB7DQo+ID4gKyAgICAgICAgZm9yIChJbmRleDEgPSAwOyBJbmRleDEgPCBOaWMt Pk1jYXN0Q291bnQ7IEluZGV4MSsrKSB7DQo+ID4gKyAgICAgICAgICBmb3IgKEluZGV4MiA9IDA7 IEluZGV4MiA8IDY7IEluZGV4MisrKSB7DQo+ID4gKyAgICAgICAgICAgIE1jYXN0TGlzdFtDb3Vu dCsrXSA9IENwYi0+TUNhc3RMaXN0W0luZGV4MV1bSW5kZXgyXTsNCj4gPiArICAgICAgICAgIH0N Cj4gPiArICAgICAgICB9DQo+ID4gKyAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgIE5pYy0+UnhG aWx0ZXIgfD0NCj4gUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfRklMVEVSRURfTVVMVElDQVNU Ow0KPiA+ICsgICAgICBpZiAoQ3BiICE9IE5VTEwpIHsNCj4gPiArICAgICAgICBOaWMtPlVzYkV0 aC0+U2V0VXNiRXRoTWNhc3RGaWx0ZXIgKE5pYy0+VXNiRXRoLCBOaWMtPk1jYXN0Q291bnQsDQo+ IE1jYXN0TGlzdCk7DQo+ID4gKyAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgIE5pYy0+VXNiRXRo LT5TZXRVc2JFdGhQYWNrZXRGaWx0ZXIgKE5pYy0+VXNiRXRoLCBOaWMtPlJ4RmlsdGVyKTsNCj4g PiArICAgICAgRnJlZVBvb2wgKE1jYXN0TGlzdCk7DQo+ID4gKyAgICB9DQo+ID4gKyAgfQ0KPiA+ ICsNCj4gPiArICByZXR1cm4gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ID4gK30NCj4gPiArDQo+ ID4gKy8qKg0KPiA+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIGdldCBjdXJyZW50IHN0YXRp b24gYW5kIGJyb2FkY2FzdCBNQUMNCj4gYWRkcmVzc2VzDQo+ID4gKyAgYW5kLCBpZiBzdXBwb3J0 ZWQsIHRvIGNoYW5nZSB0aGUgY3VycmVudCBzdGF0aW9uIE1BQyBhZGRyZXNzLg0KPiA+ICsNCj4g PiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9y IGJsb2NrLg0KPiA+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3Jr IGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArVk9JRA0K PiA+ICtVbmRpU3RhdGlvbkFkZHJlc3MgKA0KPiA+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4g PiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBQWEVfQ1BC X1NUQVRJT05fQUREUkVTUyAgKkNwYjsNCj4gPiArICBQWEVfREJfU1RBVElPTl9BRERSRVNTICAg KkRiOw0KPiA+ICsgIFVJTlQxNiAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gPiArICBFRklf U1RBVFVTICAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+ICsNCj4gPiArICBpZiAoKENkYi0+T3BD b2RlICE9IFBYRV9PUENPREVfU1RBVElPTl9BRERSRVNTKSB8fA0KPiA+ICsgICAgICAoQ2RiLT5T dGF0Q29kZSAhPSBQWEVfU1RBVENPREVfSU5JVElBTElaRSkgfHwNCj4gPiArICAgICAgKENkYi0+ U3RhdEZsYWdzICE9IFBYRV9TVEFURkxBR1NfSU5JVElBTElaRSkgfHwNCj4gPiArICAgICAgKENk Yi0+SUZudW0gPj0gKGdQeGUtPklGY250IHwgZ1B4ZS0+SUZjbnRFeHQgPDwgOCkpIHx8DQo+ID4g KyAgICAgIChDZGItPkRCc2l6ZSAhPSBzaXplb2YgKFBYRV9EQl9TVEFUSU9OX0FERFJFU1MpKSkN Cj4gPiArICB7DQo+ID4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFO RF9GQUlMRUQ7DQo+ID4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElE X0NEQjsNCj4gPiArICAgIHJldHVybjsNCj4gPiArICB9IGVsc2Ugew0KPiA+ICsgICAgQ2RiLT5T dGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfQ09NUExFVEU7DQo+ID4gKyAgICBDZGIt PlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4g KyAgaWYgKE5pYy0+U3RhdGUgIT0gUFhFX1NUQVRGTEFHU19HRVRfU1RBVEVfSU5JVElBTElaRUQp IHsNCj4gPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX05PVF9JTklUSUFMSVpF RDsNCj4gPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxF RDsNCj4gPiArICAgIHJldHVybjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmIChDZGItPk9w RmxhZ3MgPT0gUFhFX09QRkxBR1NfU1RBVElPTl9BRERSRVNTX1JFU0VUKSB7DQo+ID4gKyAgICBp ZiAoQ29tcGFyZU1lbSAoJk5pYy0+Q3VycmVudE5vZGVBZGRyZXNzWzBdLCAmTmljLQ0KPiA+UGVy bU5vZGVBZGRyZXNzWzBdLCBQWEVfTUFDX0xFTkdUSCkgIT0gMCkgew0KPiA+ICsgICAgICBmb3Ig KEluZGV4ID0gMDsgSW5kZXggPCBQWEVfTUFDX0xFTkdUSDsgSW5kZXgrKykgew0KPiA+ICsgICAg ICAgIE5pYy0+Q3VycmVudE5vZGVBZGRyZXNzW0luZGV4XSA9IE5pYy0+UGVybU5vZGVBZGRyZXNz W0luZGV4XTsNCj4gPiArICAgICAgfQ0KPiA+ICsgICAgfQ0KPiA+ICsgIH0NCj4gPiArDQo+ID4g KyAgaWYgKENkYi0+Q1BCYWRkciAhPSAwKSB7DQo+ID4gKyAgICBDcGIgPSAoUFhFX0NQQl9TVEFU SU9OX0FERFJFU1MgKikoVUlOVE4pQ2RiLT5DUEJhZGRyOw0KPiA+ICsgICAgZm9yIChJbmRleCA9 IDA7IEluZGV4IDwgUFhFX01BQ19MRU5HVEg7IEluZGV4KyspIHsNCj4gPiArICAgICAgTmljLT5D dXJyZW50Tm9kZUFkZHJlc3NbSW5kZXhdID0gQ3BiLT5TdGF0aW9uQWRkcltJbmRleF07DQo+ID4g KyAgICB9DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoQ2RiLT5EQmFkZHIgIT0gMCkgew0K PiA+ICsgICAgRGIgPSAoUFhFX0RCX1NUQVRJT05fQUREUkVTUyAqKShVSU5UTilDZGItPkRCYWRk cjsNCj4gPiArICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFBYRV9NQUNfTEVOR1RIOyBJbmRl eCsrKSB7DQo+ID4gKyAgICAgIERiLT5TdGF0aW9uQWRkcltJbmRleF0gICA9IE5pYy0+Q3VycmVu dE5vZGVBZGRyZXNzW0luZGV4XTsNCj4gPiArICAgICAgRGItPkJyb2FkY2FzdEFkZHJbSW5kZXhd ID0gTmljLT5Ccm9hZGNhc3ROb2RlQWRkcmVzc1tJbmRleF07DQo+ID4gKyAgICAgIERiLT5QZXJt YW5lbnRBZGRyW0luZGV4XSA9IE5pYy0+UGVybU5vZGVBZGRyZXNzW0luZGV4XTsNCj4gPiArICAg IH0NCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5V c2JFdGhVbmRpU3RhdGlvbkFkZHJlc3MgIT0gTlVMTCkgew0KPiA+ICsgICAgU3RhdHVzID0gTmlj LT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaVN0YXRpb25BZGRyZXNzIChDZGIsDQo+IE5p Yyk7DQo+ID4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICAgIENkYi0+ U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gPiArICAgIH0NCj4g PiArICB9DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFRoaXMgY29tbWFuZCBpcyB1 c2VkIHRvIHJlYWQgYW5kIGNsZWFyIHRoZSBOSUMgdHJhZmZpYyBzdGF0aXN0aWNzLg0KPiA+ICsN Cj4gPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlw dG9yIGJsb2NrLg0KPiA+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3 b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArVk9J RA0KPiA+ICtVbmRpU3RhdGlzdGljcyAoDQo+ID4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiA+ ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEVGSV9TVEFU VVMgIFN0YXR1czsNCj4gPiArDQo+ID4gKyAgaWYgKChDZGItPk9wQ29kZSAhPSBQWEVfT1BDT0RF X1NUQVRJU1RJQ1MpIHx8DQo+ID4gKyAgICAgIChDZGItPlN0YXRDb2RlICE9IFBYRV9TVEFUQ09E RV9JTklUSUFMSVpFKSB8fA0KPiA+ICsgICAgICAoQ2RiLT5TdGF0RmxhZ3MgIT0gUFhFX1NUQVRG TEFHU19JTklUSUFMSVpFKSB8fA0KPiA+ICsgICAgICAoQ2RiLT5JRm51bSA+PSAoZ1B4ZS0+SUZj bnQgfCBnUHhlLT5JRmNudEV4dCA8PCA4KSkgfHwNCj4gPiArICAgICAgKENkYi0+Q1BCc2l6ZSAh PSBQWEVfQ1BCU0laRV9OT1RfVVNFRCkgfHwNCj4gPiArICAgICAgKENkYi0+Q1BCYWRkciAhPSBQ WEVfQ1BCQUREUl9OT1RfVVNFRCkpDQo+ID4gKyAgew0KPiA+ICsgICAgQ2RiLT5TdGF0RmxhZ3Mg PSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiA+ICsgICAgQ2RiLT5TdGF0Q29kZSAg PSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ID4gKyAgICByZXR1cm47DQo+ID4gKyAgfSBl bHNlIHsNCj4gPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0NP TVBMRVRFOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYgKE5pYy0+U3RhdGUgIT0gUFhFX1NU QVRGTEFHU19HRVRfU1RBVEVfSU5JVElBTElaRUQpIHsNCj4gPiArICAgIENkYi0+U3RhdENvZGUg ID0gUFhFX1NUQVRDT0RFX05PVF9JTklUSUFMSVpFRDsNCj4gPiArICAgIENkYi0+U3RhdEZsYWdz ID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gPiArICAgIHJldHVybjsNCj4gPiAr ICB9DQo+ID4gKw0KPiA+ICsgIGlmICgoQ2RiLT5PcEZsYWdzICE9IFBYRV9PUEZMQUdTX1NUQVRJ U1RJQ1NfUkVTRVQpICYmDQo+ID4gKyAgICAgIChDZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxBR1Nf U1RBVElTVElDU19SRUFEKSkNCj4gPiArICB7DQo+ID4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBY RV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ID4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBY RV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gPiArICAgIHJldHVybjsNCj4gPiArICB9DQo+ID4g Kw0KPiA+ICsgIENkYi0+U3RhdENvZGUgPSBTdGF0aXN0aWNzIChOaWMsIENkYi0+REJhZGRyLCBD ZGItPkRCc2l6ZSk7DQo+ID4gKw0KPiA+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5V c2JFdGhVbmRpU3RhdGlzdGljcyAhPSBOVUxMKSB7DQo+ID4gKyAgICBTdGF0dXMgPSBOaWMtPlVz YkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpU3RhdGlzdGljcyAoQ2RiLCBOaWMpOw0KPiA+ICsg ICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgICBDZGItPlN0YXRGbGFncyA9 IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ID4gKyAgICB9DQo+ID4gKyAgfQ0KPiA+ ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBSZXR1cm4gZGF0YSBmb3IgREIgZGF0YS4NCj4g PiArDQo+ID4gKyAgQHBhcmFtW2luXSAgTmljICAgICAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3Jr IGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ID4gKyAgQHBhcmFtW2luXSAgRGJBZGRyICAg RGF0YSBCbG9jayBBZGRyZXNzLg0KPiA+ICsgIEBwYXJhbVtpbl0gIERiU2l6ZSAgIERhdGEgQmxv Y2sgU2l6ZS4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtVSU5UMTYNCj4gPiArU3RhdGlzdGljcyAo DQo+ID4gKyAgSU4gTklDX0RBVEEgICpOaWMsDQo+ID4gKyAgSU4gVUlOVDY0ICAgIERiQWRkciwN Cj4gPiArICBJTiBVSU5UMTYgICAgRGJTaXplDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgUFhF X0RCX1NUQVRJU1RJQ1MgICpEYlN0YXRpc3RpYzsNCj4gPiArICBFRklfU1RBVFVTICAgICAgICAg U3RhdHVzOw0KPiA+ICsNCj4gPiArICBEYlN0YXRpc3RpYyA9IChQWEVfREJfU1RBVElTVElDUyAq KShVSU5UTilEYkFkZHI7DQo+ID4gKw0KPiA+ICsgIGlmIChEYlNpemUgPT0gMCkgew0KPiA+ICsg ICAgcmV0dXJuIFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAg RGJTdGF0aXN0aWMtPlN1cHBvcnRlZCAgPSAweDgwMjsNCj4gPiArICBEYlN0YXRpc3RpYy0+RGF0 YVsweDAxXSA9IE5pYy0+UnhGcmFtZTsNCj4gPiArICBEYlN0YXRpc3RpYy0+RGF0YVsweDBCXSA9 IE5pYy0+VHhGcmFtZTsNCj4gPiArDQo+ID4gKyAgaWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhTdGF0 aXN0aWNzICE9IE5VTEwpIHsNCj4gPiArICAgIFN0YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JFdGhT dGF0aXN0aWNzIChOaWMsIERiQWRkciwgRGJTaXplKTsNCj4gPiArICAgIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4gPiArICAgICAgcmV0dXJuIFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlM RUQ7DQo+ID4gKyAgICB9DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICByZXR1cm4gUFhFX1NUQVRD T0RFX1NVQ0NFU1M7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFRyYW5zbGF0ZSBh IG11bHRpY2FzdCBJUHY0IG9yIElQdjYgYWRkcmVzcyB0byBhIG11bHRpY2FzdCBNQUMgYWRkcmVz cy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luLCBvdXRdIENkYiAgQSBwb2ludGVyIHRvIHRoZSBj b21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgIE5pYyAgQSBw b2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ID4gKw0K PiA+ICsqKi8NCj4gPiArVk9JRA0KPiA+ICtVbmRpTWNhc3RJcDJNYWMgKA0KPiA+ICsgIElOIE9V VCAgUFhFX0NEQiAgICpDZGIsDQo+ID4gKyAgSU4gICAgICBOSUNfREFUQSAgKk5pYw0KPiA+ICsg ICkNCj4gPiArew0KPiA+ICsgIFBYRV9DUEJfTUNBU1RfSVBfVE9fTUFDICAqQ3BiOw0KPiA+ICsg IFBYRV9EQl9NQ0FTVF9JUF9UT19NQUMgICAqRGI7DQo+ID4gKyAgVUlOVDggICAgICAgICAgICAg ICAgICAgICpUbXA7DQo+ID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgIFN0YXR1czsNCj4g PiArDQo+ID4gKyAgaWYgKChDZGItPk9wQ29kZSAhPSBQWEVfT1BDT0RFX01DQVNUX0lQX1RPX01B QykgfHwNCj4gPiArICAgICAgKENkYi0+U3RhdENvZGUgIT0gUFhFX1NUQVRDT0RFX0lOSVRJQUxJ WkUpIHx8DQo+ID4gKyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQWEVfU1RBVEZMQUdTX0lOSVRJ QUxJWkUpIHx8DQo+ID4gKyAgICAgIChDZGItPklGbnVtID49IChnUHhlLT5JRmNudCB8IGdQeGUt PklGY250RXh0IDw8IDgpKSB8fA0KPiA+ICsgICAgICAoQ2RiLT5DUEJzaXplICE9IHNpemVvZiAo UFhFX0NQQl9NQ0FTVF9JUF9UT19NQUMpKSB8fA0KPiA+ICsgICAgICAoQ2RiLT5EQnNpemUgIT0g c2l6ZW9mIChQWEVfREJfTUNBU1RfSVBfVE9fTUFDKSkpDQo+ID4gKyAgew0KPiA+ICsgICAgQ2Ri LT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiA+ICsgICAgQ2Ri LT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ID4gKyAgICByZXR1cm47 DQo+ID4gKyAgfSBlbHNlIHsNCj4gPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFH U19DT01NQU5EX0NPTVBMRVRFOw0KPiA+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENP REVfU1VDQ0VTUzsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmIChOaWMtPlN0YXRlICE9IFBY RV9TVEFURkxBR1NfR0VUX1NUQVRFX0lOSVRJQUxJWkVEKSB7DQo+ID4gKyAgICBDZGItPlN0YXRD b2RlICA9IFBYRV9TVEFUQ09ERV9OT1RfSU5JVElBTElaRUQ7DQo+ID4gKyAgICBDZGItPlN0YXRG bGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ID4gKyAgICByZXR1cm47DQo+ ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBDcGIgPSAoUFhFX0NQQl9NQ0FTVF9JUF9UT19NQUMgKiko VUlOVE4pQ2RiLT5DUEJhZGRyOw0KPiA+ICsgIERiICA9IChQWEVfREJfTUNBU1RfSVBfVE9fTUFD ICopKFVJTlROKUNkYi0+REJhZGRyOw0KPiA+ICsNCj4gPiArICBpZiAoKENkYi0+T3BGbGFncyAm IFBYRV9PUEZMQUdTX01DQVNUX0lQVjZfVE9fTUFDKSAhPSAwKSB7DQo+ID4gKyAgICBDZGItPlN0 YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ID4gKyAgICBDZGItPlN0 YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9VTlNVUFBPUlRFRDsNCj4gPiArICAgIHJldHVybjsNCj4g PiArICB9DQo+ID4gKw0KPiA+ICsgIFRtcCA9IChVSU5UOCAqKSgmQ3BiLT5JUC5JUHY0KTsNCj4g PiArDQo+ID4gKyAgaWYgKChUbXBbMF0gJiAweEYwKSAhPSAweEUwKSB7DQo+ID4gKyAgICBDZGIt PlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ID4gKyAgICBDZGIt PlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NQQjsNCj4gPiArICB9DQo+ID4gKw0K PiA+ICsgIERiLT5NQUNbMF0gPSAweDAxOw0KPiA+ICsgIERiLT5NQUNbMV0gPSAweDAwOw0KPiA+ ICsgIERiLT5NQUNbMl0gPSAweDVFOw0KPiA+ICsgIERiLT5NQUNbM10gPSBUbXBbMV0gJiAweDdG Ow0KPiA+ICsgIERiLT5NQUNbNF0gPSBUbXBbMl07DQo+ID4gKyAgRGItPk1BQ1s1XSA9IFRtcFsz XTsNCj4gPiArDQo+ID4gKyAgaWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlN Y2FzdElwMk1hYyAhPSBOVUxMKSB7DQo+ID4gKyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNi RXRoVW5kaS5Vc2JFdGhVbmRpTWNhc3RJcDJNYWMgKENkYiwgTmljKTsNCj4gPiArICAgIGlmIChF RklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RB VEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiA+ICsgICAgfQ0KPiA+ICsgIH0NCj4gPiArfQ0KPiA+ ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gcmVhZCBhbmQgd3Jp dGUgKGlmIHN1cHBvcnRlZCBieSBOSUMgSC9XKQ0KPiA+ICsgIG5vbnZvbGF0aWxlIHN0b3JhZ2Ug b24gdGhlIE5JQy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8g dGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gPiArICBAcGFyYW1baW5dICBOaWMgIEEg cG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiA+ICsN Cj4gPiArKiovDQo+ID4gK1ZPSUQNCj4gPiArVW5kaU52RGF0YSAoDQo+ID4gKyAgSU4gIFBYRV9D REIgICAqQ2RiLA0KPiA+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiA+ICsgICkNCj4gPiArew0K PiA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiArDQo+ID4gKyAgQ2RiLT5TdGF0Q29kZSA9 IFBYRV9TVEFUQ09ERV9VTlNVUFBPUlRFRDsNCj4gPiArICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0 aFVuZGkuVXNiRXRoVW5kaU52RGF0YSAhPSBOVUxMKSB7DQo+ID4gKyAgICBTdGF0dXMgPSBOaWMt PlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpTnZEYXRhIChDZGIsIE5pYyk7DQo+ID4gKyAg ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICAgIENkYi0+U3RhdEZsYWdzID0g UFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gPiArICAgIH0gZWxzZSB7DQo+ID4gKyAg ICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0NPTVBMRVRFOw0KPiA+ ICsgICAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KPiA+ICsgICAg fQ0KPiA+ICsgIH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhpcyBjb21tYW5k IHJldHVybnMgdGhlIGN1cnJlbnQgaW50ZXJydXB0IHN0YXR1cyBhbmQvb3IgdGhlDQo+ID4gKyAg dHJhbnNtaXR0ZWQgYnVmZmVyIGFkZHJlc3NlcyBhbmQgdGhlIGN1cnJlbnQgbWVkaWEgc3RhdHVz Lg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFu ZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiA+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRv IHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ID4gKw0KPiA+ICsqKi8N Cj4gPiArVk9JRA0KPiA+ICtVbmRpR2V0U3RhdHVzICgNCj4gPiArICBJTiAgUFhFX0NEQiAgICpD ZGIsDQo+ID4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAg UFhFX0RCX0dFVF9TVEFUVVMgICpEYjsNCj4gPiArICBQWEVfREJfR0VUX1NUQVRVUyAgVG1wR2V0 U3RhdHVzOw0KPiA+ICsgIFVJTlQxNiAgICAgICAgICAgICBOdW1FbnRyaWVzOw0KPiA+ICsgIFVJ TlROICAgICAgICAgICAgICBJbmRleDsNCj4gPiArICBFRklfU1RBVFVTICAgICAgICAgU3RhdHVz Ow0KPiA+ICsNCj4gPiArICBpZiAoKENkYi0+T3BDb2RlICE9IFBYRV9PUENPREVfR0VUX1NUQVRV UykgfHwNCj4gPiArICAgICAgKENkYi0+U3RhdENvZGUgIT0gUFhFX1NUQVRDT0RFX0lOSVRJQUxJ WkUpIHx8DQo+ID4gKyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQWEVfU1RBVEZMQUdTX0lOSVRJ QUxJWkUpIHx8DQo+ID4gKyAgICAgIChDZGItPklGbnVtID49IChnUHhlLT5JRmNudCB8IGdQeGUt PklGY250RXh0IDw8IDgpKSB8fA0KPiA+ICsgICAgICAoQ2RiLT5DUEJzaXplICE9IFBYRV9DUEJT SVpFX05PVF9VU0VEKSB8fA0KPiA+ICsgICAgICAoQ2RiLT5DUEJhZGRyICE9IFBYRV9DUEJBRERS X05PVF9VU0VEKSkNCj4gPiArICB7DQo+ID4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFU RkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ID4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFU Q09ERV9JTlZBTElEX0NEQjsNCj4gPiArICAgIHJldHVybjsNCj4gPiArICB9IGVsc2Ugew0KPiA+ ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfQ09NUExFVEU7DQo+ ID4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KPiA+ICsgIH0N Cj4gPiArDQo+ID4gKyAgaWYgKE5pYy0+U3RhdGUgIT0gUFhFX1NUQVRGTEFHU19HRVRfU1RBVEVf SU5JVElBTElaRUQpIHsNCj4gPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX05P VF9JTklUSUFMSVpFRDsNCj4gPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19D T01NQU5EX0ZBSUxFRDsNCj4gPiArICAgIHJldHVybjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsg IFRtcEdldFN0YXR1cy5SeEZyYW1lTGVuID0gMDsNCj4gPiArICBUbXBHZXRTdGF0dXMucmVzZXJ2 ZWQgICA9IDA7DQo+ID4gKyAgRGIgICAgICAgICAgICAgICAgICAgICAgPSAoUFhFX0RCX0dFVF9T VEFUVVMgKikoVUlOVE4pQ2RiLT5EQmFkZHI7DQo+ID4gKw0KPiA+ICsgIGlmICgoQ2RiLT5EQnNp emUgPiAwKSAmJiAoQ2RiLT5EQnNpemUgPCBzaXplb2YgKFVJTlQzMikgKiAyKSkgew0KPiA+ICsg ICAgQ29weU1lbSAoRGIsICZUbXBHZXRTdGF0dXMsIENkYi0+REJzaXplKTsNCj4gPiArICB9IGVs c2Ugew0KPiA+ICsgICAgQ29weU1lbSAoRGIsICZUbXBHZXRTdGF0dXMsIHNpemVvZiAoVUlOVDMy KSAqIDIpOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYgKChDZGItPk9wRmxhZ3MgJiBQWEVf T1BGTEFHU19HRVRfVFJBTlNNSVRURURfQlVGRkVSUykgIT0gMCkgew0KPiA+ICsgICAgaWYgKENk Yi0+REJzaXplID09IDApIHsNCj4gPiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZM QUdTX0NPTU1BTkRfRkFJTEVEOw0KPiA+ICsgICAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFU Q09ERV9JTlZBTElEX0NEQjsNCj4gPiArICAgICAgcmV0dXJuOw0KPiA+ICsgICAgfQ0KPiA+ICsN Cj4gPiArICAgIE51bUVudHJpZXMgID0gQ2RiLT5EQnNpemUgLSBzaXplb2YgKFVJTlQ2NCk7DQo+ ID4gKyAgICBDZGItPkRCc2l6ZSA9IHNpemVvZiAoVUlOVDMyKSAqIDI7DQo+ID4gKw0KPiA+ICsg ICAgZm9yIChJbmRleCA9IDA7IE51bUVudHJpZXMgPj0gc2l6ZW9mIChVSU5UNjQpOyBJbmRleCsr LCBOdW1FbnRyaWVzIC09DQo+IHNpemVvZiAoVUlOVDY0KSkgew0KPiA+ICsgICAgICBpZiAoTmlj LT5UeEJ1ZmZlckNvdW50ID4gMCkgew0KPiA+ICsgICAgICAgIE5pYy0+VHhCdWZmZXJDb3VudC0t Ow0KPiA+ICsgICAgICAgIERiLT5UeEJ1ZmZlcltJbmRleF0gPSBOaWMtPk1lZGlhSGVhZGVyW05p Yy0+VHhCdWZmZXJDb3VudF07DQo+ID4gKyAgICAgIH0NCj4gPiArICAgIH0NCj4gPiArICB9DQo+ ID4gKw0KPiA+ICsgIGlmICgoQ2RiLT5PcEZsYWdzICYgUFhFX09QRkxBR1NfR0VUX0lOVEVSUlVQ VF9TVEFUVVMpICE9IDApIHsNCj4gPiArICAgIGlmIChOaWMtPlJlY2VpdmVTdGF0dXMgIT0gMCkg ew0KPiA+ICsgICAgICBDZGItPlN0YXRGbGFncyB8PSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFUVVNf UkVDRUlWRTsNCj4gPiArICAgIH0NCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmICgoTmljLT5S ZXF1ZXN0LlJlcXVlc3QgPT0gVVNCX0NEQ19ORVRXT1JLX0NPTk5FQ1RJT04pICYmDQo+IChOaWMt PlJlcXVlc3QuVmFsdWUgPT0gTkVUV09SS19ESVNDT05ORUNUKSkgew0KPiA+ICsgICAgTmljLT5D YWJsZURldGVjdCA9IDA7DQo+ID4gKyAgfSBlbHNlIGlmICgoTmljLT5SZXF1ZXN0LlJlcXVlc3Qg PT0gVVNCX0NEQ19ORVRXT1JLX0NPTk5FQ1RJT04pDQo+ICYmIChOaWMtPlJlcXVlc3QuVmFsdWUg PT0gTkVUV09SS19DT05ORUNURUQpKSB7DQo+ID4gKyAgICBOaWMtPkNhYmxlRGV0ZWN0ID0gMTsN Cj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmICgoQ2RiLT5PcEZsYWdzICYgUFhFX09QRkxBR1Nf R0VUX01FRElBX1NUQVRVUykgIT0gMCkgew0KPiA+ICsgICAgaWYgKE5pYy0+Q2FibGVEZXRlY3Qg PT0gMCkgew0KPiA+ICsgICAgICBDZGItPlN0YXRGbGFncyB8PSBQWEVfU1RBVEZMQUdTX0dFVF9T VEFUVVNfTk9fTUVESUE7DQo+ID4gKyAgICB9DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAo TmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaUdldFN0YXR1cyAhPSBOVUxMKSB7DQo+ ID4gKyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpR2V0U3Rh dHVzIChDZGIsIE5pYyk7DQo+ID4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4g KyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4g PiArICAgIH0NCj4gPiArICB9DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFRoaXMg Y29tbWFuZCBpcyB1c2VkIHRvIGZpbGwgdGhlIG1lZGlhIGhlYWRlcihzKSBpbiB0cmFuc21pdCBw YWNrZXQocykuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRo ZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ID4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBv aW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gPiArDQo+ ID4gKyoqLw0KPiA+ICtWT0lEDQo+ID4gK1VuZGlGaWxsSGVhZGVyICgNCj4gPiArICBJTiAgUFhF X0NEQiAgICpDZGIsDQo+ID4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ID4gKyAgKQ0KPiA+ICt7 DQo+ID4gKyAgUFhFX0NQQl9GSUxMX0hFQURFUiAgICAgICAgICAgICAqQ3BiRmlsbEhlYWRlcjsN Cj4gPiArICBQWEVfQ1BCX0ZJTExfSEVBREVSX0ZSQUdNRU5URUQgICpDcGJGaWxsOw0KPiA+ICsg IEV0aGVybmV0SGVhZGVyICAgICAgICAgICAgICAgICAgKk1hY0hlYWRlcjsNCj4gPiArICBVSU5U TiAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiA+ICsgIEVGSV9TVEFUVVMgICAg ICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+ICsNCj4gPiArICBpZiAoKENkYi0+T3BDb2Rl ICE9IFBYRV9PUENPREVfRklMTF9IRUFERVIpIHx8DQo+ID4gKyAgICAgIChDZGItPlN0YXRDb2Rl ICE9IFBYRV9TVEFUQ09ERV9JTklUSUFMSVpFKSB8fA0KPiA+ICsgICAgICAoQ2RiLT5TdGF0Rmxh Z3MgIT0gUFhFX1NUQVRGTEFHU19JTklUSUFMSVpFKSB8fA0KPiA+ICsgICAgICAoQ2RiLT5JRm51 bSA+PSAoZ1B4ZS0+SUZjbnQgfCBnUHhlLT5JRmNudEV4dCA8PCA4KSkgfHwNCj4gPiArICAgICAg KENkYi0+Q1BCc2l6ZSAhPSBzaXplb2YgKFBYRV9DUEJfRklMTF9IRUFERVJfRlJBR01FTlRFRCkp IHx8DQo+ID4gKyAgICAgIChDZGItPkRCc2l6ZSAhPSBQWEVfREJTSVpFX05PVF9VU0VEKSB8fA0K PiA+ICsgICAgICAoQ2RiLT5EQmFkZHIgIT0gUFhFX0RCQUREUl9OT1RfVVNFRCkpDQo+ID4gKyAg ew0KPiA+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVE Ow0KPiA+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ ID4gKyAgICByZXR1cm47DQo+ID4gKyAgfSBlbHNlIHsNCj4gPiArICAgIENkYi0+U3RhdEZsYWdz ID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0NPTVBMRVRFOw0KPiA+ICsgICAgQ2RiLT5TdGF0Q29k ZSAgPSBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmIChO aWMtPlN0YXRlICE9IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRFX0lOSVRJQUxJWkVEKSB7DQo+ID4g KyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9OT1RfSU5JVElBTElaRUQ7DQo+ID4g KyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ID4g KyAgICByZXR1cm47DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoQ2RiLT5DUEJzaXplID09 IFBYRV9DUEJTSVpFX05PVF9VU0VEKSB7DQo+ID4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9T VEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ID4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9T VEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gPiArICAgIHJldHVybjsNCj4gPiArICB9DQo+ID4gKw0K PiA+ICsgIGlmICgoQ2RiLT5PcEZsYWdzICYgUFhFX09QRkxBR1NfRklMTF9IRUFERVJfRlJBR01F TlRFRCkgIT0gMCkgew0KPiA+ICsgICAgQ3BiRmlsbCA9IChQWEVfQ1BCX0ZJTExfSEVBREVSX0ZS QUdNRU5URUQgKikoVUlOVE4pQ2RiLQ0KPiA+Q1BCYWRkcjsNCj4gPiArDQo+ID4gKyAgICBpZiAo KENwYkZpbGwtPkZyYWdDbnQgPT0gMCkgfHwgKENwYkZpbGwtPkZyYWdEZXNjWzBdLkZyYWdMZW4g PA0KPiBQWEVfTUFDX0hFQURFUl9MRU5fRVRIRVIpKSB7DQo+ID4gKyAgICAgIENkYi0+U3RhdEZs YWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gPiArICAgICAgQ2RiLT5TdGF0 Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ID4gKyAgICAgIHJldHVybjsNCj4g PiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBNYWNIZWFkZXIgICAgICAgICAgID0gKEV0aGVybmV0 SGVhZGVyICopKFVJTlROKUNwYkZpbGwtDQo+ID5GcmFnRGVzY1swXS5GcmFnQWRkcjsNCj4gPiAr ICAgIE1hY0hlYWRlci0+UHJvdG9jb2wgPSBDcGJGaWxsLT5Qcm90b2NvbDsNCj4gPiArDQo+ID4g KyAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBQWEVfSFdBRERSX0xFTl9FVEhFUjsgSW5kZXgr Kykgew0KPiA+ICsgICAgICBNYWNIZWFkZXItPkRlc3RBZGRyW0luZGV4XSA9IENwYkZpbGwtPkRl c3RBZGRyW0luZGV4XTsNCj4gPiArICAgICAgTWFjSGVhZGVyLT5TcmNBZGRyW0luZGV4XSAgPSBD cGJGaWxsLT5TcmNBZGRyW0luZGV4XTsNCj4gPiArICAgIH0NCj4gPiArICB9IGVsc2Ugew0KPiA+ ICsgICAgQ3BiRmlsbEhlYWRlciA9IChQWEVfQ1BCX0ZJTExfSEVBREVSICopKFVJTlROKUNkYi0+ Q1BCYWRkcjsNCj4gPiArDQo+ID4gKyAgICBNYWNIZWFkZXIgICAgICAgICAgID0gKEV0aGVybmV0 SGVhZGVyICopKFVJTlROKUNwYkZpbGxIZWFkZXItDQo+ID5NZWRpYUhlYWRlcjsNCj4gPiArICAg IE1hY0hlYWRlci0+UHJvdG9jb2wgPSBDcGJGaWxsSGVhZGVyLT5Qcm90b2NvbDsNCj4gPiArDQo+ ID4gKyAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBQWEVfSFdBRERSX0xFTl9FVEhFUjsgSW5k ZXgrKykgew0KPiA+ICsgICAgICBNYWNIZWFkZXItPkRlc3RBZGRyW0luZGV4XSA9IENwYkZpbGxI ZWFkZXItPkRlc3RBZGRyW0luZGV4XTsNCj4gPiArICAgICAgTWFjSGVhZGVyLT5TcmNBZGRyW0lu ZGV4XSAgPSBDcGJGaWxsSGVhZGVyLT5TcmNBZGRyW0luZGV4XTsNCj4gPiArICAgIH0NCj4gPiAr ICB9DQo+ID4gKw0KPiA+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRp RmlsbEhlYWRlciAhPSBOVUxMKSB7DQo+ID4gKyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNi RXRoVW5kaS5Vc2JFdGhVbmRpRmlsbEhlYWRlciAoQ2RiLCBOaWMpOw0KPiA+ICsgICAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFU RkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ID4gKyAgICB9DQo+ID4gKyAgfQ0KPiA+ICt9DQo+ID4g Kw0KPiA+ICsvKioNCj4gPiArICBUaGUgVHJhbnNtaXQgY29tbWFuZCBpcyB1c2VkIHRvIHBsYWNl IGEgcGFja2V0IGludG8gdGhlIHRyYW5zbWl0IHF1ZXVlLg0KPiA+ICsNCj4gPiArICBAcGFyYW1b aW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiA+ ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBj b250cm9sbGVyIGRhdGEuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArVk9JRA0KPiA+ICtVbmRpVHJh bnNtaXQgKA0KPiA+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gPiArICBJTiAgTklDX0RBVEEg ICpOaWMNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ID4g Kw0KPiA+ICsgIGlmICgoQ2RiLT5PcENvZGUgIT0gUFhFX09QQ09ERV9UUkFOU01JVCkgfHwNCj4g PiArICAgICAgKENkYi0+U3RhdENvZGUgIT0gUFhFX1NUQVRDT0RFX0lOSVRJQUxJWkUpIHx8DQo+ ID4gKyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQWEVfU1RBVEZMQUdTX0lOSVRJQUxJWkUpIHx8 DQo+ID4gKyAgICAgIChDZGItPklGbnVtID49IChnUHhlLT5JRmNudCB8IGdQeGUtPklGY250RXh0 IDw8IDgpKSB8fA0KPiA+ICsgICAgICAoQ2RiLT5DUEJzaXplICE9IHNpemVvZiAoUFhFX0NQQl9U UkFOU01JVCkpIHx8DQo+ID4gKyAgICAgIChDZGItPkRCc2l6ZSAhPSBQWEVfREJTSVpFX05PVF9V U0VEKSB8fA0KPiA+ICsgICAgICAoQ2RiLT5EQmFkZHIgIT0gUFhFX0RCQUREUl9OT1RfVVNFRCkp DQo+ID4gKyAgew0KPiA+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1B TkRfRkFJTEVEOw0KPiA+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJ RF9DREI7DQo+ID4gKyAgICByZXR1cm47DQo+ID4gKyAgfSBlbHNlIHsNCj4gPiArICAgIENkYi0+ U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0NPTVBMRVRFOw0KPiA+ICsgICAgQ2Ri LT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCj4gPiArICB9DQo+ID4gKw0KPiA+ ICsgIGlmIChOaWMtPlN0YXRlICE9IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRFX0lOSVRJQUxJWkVE KSB7DQo+ID4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlM RUQ7DQo+ID4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9OT1RfSU5JVElBTEla RUQ7DQo+ID4gKyAgICByZXR1cm47DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoQ2RiLT5D UEJzaXplID09IFBYRV9DUEJTSVpFX05PVF9VU0VEKSB7DQo+ID4gKyAgICBDZGItPlN0YXRGbGFn cyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ID4gKyAgICBDZGItPlN0YXRDb2Rl ICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gPiArICAgIHJldHVybjsNCj4gPiArICB9 DQo+ID4gKw0KPiA+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpVHJh bnNtaXQgIT0gTlVMTCkgew0KPiA+ICsgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aFVu ZGkuVXNiRXRoVW5kaVRyYW5zbWl0IChDZGIsIE5pYyk7DQo+ID4gKyAgICBpZiAoRUZJX0VSUk9S IChTdGF0dXMpKSB7DQo+ID4gKyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19D T01NQU5EX0ZBSUxFRDsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICByZXR1cm47DQo+ID4g KyAgfQ0KPiA+ICsNCj4gPiArICBDZGItPlN0YXRDb2RlID0gVHJhbnNtaXQgKENkYiwgTmljLCBD ZGItPkNQQmFkZHIsIENkYi0+T3BGbGFncyk7DQo+ID4gKw0KPiA+ICsgIGlmIChDZGItPlN0YXRD b2RlICE9IFBYRV9TVEFUQ09ERV9TVUNDRVNTKSB7DQo+ID4gKyAgICBDZGItPlN0YXRGbGFncyA9 IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ID4gKyAgfQ0KPiA+ICt9DQo+ID4gKw0K PiA+ICsvKioNCj4gPiArICBVc2UgVVNCIEV0aGVybmV0IFByb3RvY29sIEJ1bGsgb3V0IGNvbW1h bmQgdG8gdHJhbnNtaXQgZGF0YS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgIENkYiAg ICAgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiA+ICsgIEBw YXJhbVtpbiwgb3V0XSBOaWMgICAgICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNl IGNvbnRyb2xsZXIgZGF0YS4NCj4gPiArICBAcGFyYW1baW5dICAgICAgQ3BiQWRkciAgQ29tbWFu ZCBQYXJhbWV0ZXIgQmxvY2sgQWRkcmVzcy4NCj4gPiArICBAcGFyYW1baW5dICAgICAgT3BGbGFn cyAgT3BlcmF0aW9uIEZsYWdzLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1VJTlQxNg0KPiA+ICtU cmFuc21pdCAoDQo+ID4gKyAgSU4gICAgICBQWEVfQ0RCICAgKkNkYiwNCj4gPiArICBJTiBPVVQg IE5JQ19EQVRBICAqTmljLA0KPiA+ICsgIElOICAgICAgVUlOVDY0ICAgIENwYkFkZHIsDQo+ID4g KyAgSU4gICAgICBVSU5UMTYgICAgT3BGbGFncw0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEVG SV9TVEFUVVMgICAgICAgIFN0YXR1czsNCj4gPiArICBQWEVfQ1BCX1RSQU5TTUlUICAqQ3BiOw0K PiA+ICsgIFVJTlQ2NCAgICAgICAgICAgIEJ1bGtPdXREYXRhOw0KPiA+ICsgIFVJTlROICAgICAg ICAgICAgIERhdGFMZW5ndGg7DQo+ID4gKyAgVUlOVE4gICAgICAgICAgICAgVHJhbnNtaXRMZW5n dGg7DQo+ID4gKyAgVUlOVE4gICAgICAgICAgICAgTWFwOw0KPiA+ICsgIFVJTlQzMiAgICAgICAg ICAgIENvdW50ZXI7DQo+ID4gKyAgVUlOVDE2ICAgICAgICAgICAgU3RhdENvZGU7DQo+ID4gKw0K PiA+ICsgIEJ1bGtPdXREYXRhID0gMDsNCj4gPiArICBDb3VudGVyICAgICA9IDA7DQo+ID4gKyAg Q3BiICAgICAgICAgPSAoUFhFX0NQQl9UUkFOU01JVCAqKShVSU5UTilDcGJBZGRyOw0KPiA+ICsN Cj4gPiArICBpZiAoTmljLT5DYW5UcmFuc21pdCkgew0KPiA+ICsgICAgcmV0dXJuIFBYRV9TVEFU Q09ERV9CVVNZOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgTmljLT5DYW5UcmFuc21pdCA9IFRS VUU7DQo+ID4gKw0KPiA+ICsgIGlmICgoT3BGbGFncyAmIFBYRV9PUEZMQUdTX1RSQU5TTUlUX0ZS QUdNRU5URUQpICE9IDApIHsNCj4gPiArICAgIHJldHVybiBQWEVfU1RBVENPREVfSU5WQUxJRF9Q QVJBTUVURVI7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBNYXAgPSBNYXBJdCAoDQo+ID4gKyAg ICAgICAgICBOaWMsDQo+ID4gKyAgICAgICAgICBDcGItPkZyYW1lQWRkciwNCj4gPiArICAgICAg ICAgIENwYi0+RGF0YUxlbiArIChVSU5UMzIpQ3BiLT5NZWRpYWhlYWRlckxlbiwNCj4gPiArICAg ICAgICAgIFRPX0RFVklDRSwNCj4gPiArICAgICAgICAgIChVSU5UNjQpKFVJTlROKSZCdWxrT3V0 RGF0YQ0KPiA+ICsgICAgICAgICAgKTsNCj4gPiArDQo+ID4gKyAgaWYgKE1hcCAhPSAwKSB7DQo+ ID4gKyAgICBOaWMtPkNhblRyYW5zbWl0ID0gRkFMU0U7DQo+ID4gKyAgICByZXR1cm4gUFhFX1NU QVRDT0RFX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYgKE5p Yy0+VHhCdWZmZXJDb3VudCA8IE1BWF9YTUlUX0JVRkZFUlMpIHsNCj4gPiArICAgIE5pYy0+TWVk aWFIZWFkZXJbTmljLT5UeEJ1ZmZlckNvdW50XSA9IENwYi0+RnJhbWVBZGRyOw0KPiA+ICsgICAg TmljLT5UeEJ1ZmZlckNvdW50Kys7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBEYXRhTGVuZ3Ro ID0gKFVJTlROKShDcGItPkRhdGFMZW4gKyAoVUlOVDMyKUNwYi0+TWVkaWFoZWFkZXJMZW4pOw0K PiA+ICsNCj4gPiArICB3aGlsZSAoMSkgew0KPiA+ICsgICAgaWYgKENvdW50ZXIgPj0gMykgew0K PiA+ICsgICAgICBTdGF0Q29kZSA9IFBYRV9TVEFUQ09ERV9CVVNZOw0KPiA+ICsgICAgICBicmVh azsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBUcmFuc21pdExlbmd0aCA9IERhdGFMZW5n dGg7DQo+ID4gKw0KPiA+ICsgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aFRyYW5zbWl0 IChDZGIsIE5pYy0+VXNiRXRoLCAoVk9JRA0KPiAqKShVSU5UTilCdWxrT3V0RGF0YSwgJlRyYW5z bWl0TGVuZ3RoKTsNCj4gPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAg ICAgU3RhdENvZGUgPSAgUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gPiArICAgIH0N Cj4gPiArDQo+ID4gKyAgICBpZiAoU3RhdHVzID09IEVGSV9JTlZBTElEX1BBUkFNRVRFUikgew0K PiA+ICsgICAgICBTdGF0Q29kZSA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX1BBUkFNRVRFUjsNCj4g PiArICAgICAgYnJlYWs7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgaWYgKFN0YXR1cyA9 PSBFRklfREVWSUNFX0VSUk9SKSB7DQo+ID4gKyAgICAgIFN0YXRDb2RlID0gUFhFX1NUQVRDT0RF X0RFVklDRV9GQUlMVVJFOw0KPiA+ICsgICAgICBicmVhazsNCj4gPiArICAgIH0NCj4gPiArDQo+ ID4gKyAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgICBOaWMtPlR4RnJh bWUrKzsNCj4gPiArICAgICAgU3RhdENvZGUgPSBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCj4gPiAr ICAgICAgYnJlYWs7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgQ291bnRlcisrOw0KPiA+ ICsgIH0NCj4gPiArDQo+ID4gKyAgVW5NYXBJdCAoDQo+ID4gKyAgICBOaWMsDQo+ID4gKyAgICBD cGItPkZyYW1lQWRkciwNCj4gPiArICAgIENwYi0+RGF0YUxlbiArIChVSU5UMzIpQ3BiLT5NZWRp YWhlYWRlckxlbiwNCj4gPiArICAgIFRPX0RFVklDRSwNCj4gPiArICAgIEJ1bGtPdXREYXRhDQo+ ID4gKyAgICApOw0KPiA+ICsNCj4gPiArICBOaWMtPkNhblRyYW5zbWl0ID0gRkFMU0U7DQo+ID4g Kw0KPiA+ICsgIHJldHVybiBTdGF0Q29kZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4g KyAgV2hlbiB0aGUgbmV0d29yayBhZGFwdGVyIGhhcyByZWNlaXZlZCBhIGZyYW1lLCB0aGlzIGNv bW1hbmQgaXMgdXNlZA0KPiA+ICsgIHRvIGNvcHkgdGhlIGZyYW1lIGludG8gZHJpdmVyL2FwcGxp Y2F0aW9uIHN0b3JhZ2UuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVy IHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ID4gKyAgQHBhcmFtW2luXSAgTmlj ICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4g PiArDQo+ID4gKyoqLw0KPiA+ICtWT0lEDQo+ID4gK1VuZGlSZWNlaXZlICgNCj4gPiArICBJTiAg UFhFX0NEQiAgICpDZGIsDQo+ID4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ID4gKyAgKQ0KPiA+ ICt7DQo+ID4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiA+ICsNCj4gPiArICBpZiAoKENkYi0+ T3BDb2RlICE9IFBYRV9PUENPREVfUkVDRUlWRSkgfHwNCj4gPiArICAgICAgKENkYi0+U3RhdENv ZGUgIT0gUFhFX1NUQVRDT0RFX0lOSVRJQUxJWkUpIHx8DQo+ID4gKyAgICAgIChDZGItPlN0YXRG bGFncyAhPSBQWEVfU1RBVEZMQUdTX0lOSVRJQUxJWkUpIHx8DQo+ID4gKyAgICAgIChDZGItPklG bnVtID49IChnUHhlLT5JRmNudCB8IGdQeGUtPklGY250RXh0IDw8IDgpKSB8fA0KPiA+ICsgICAg ICAoQ2RiLT5DUEJzaXplICE9IHNpemVvZiAoUFhFX0NQQl9SRUNFSVZFKSkgfHwNCj4gPiArICAg ICAgKENkYi0+REJzaXplICE9IHNpemVvZiAoUFhFX0RCX1JFQ0VJVkUpKSB8fA0KPiA+ICsgICAg ICAoQ2RiLT5PcEZsYWdzICE9IFBYRV9PUEZMQUdTX05PVF9VU0VEKSkNCj4gPiArICB7DQo+ID4g KyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ID4g KyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gPiArICAg IHJldHVybjsNCj4gPiArICB9IGVsc2Ugew0KPiA+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVf U1RBVEZMQUdTX0NPTU1BTkRfQ09NUExFVEU7DQo+ID4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBY RV9TVEFUQ09ERV9TVUNDRVNTOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYgKE5pYy0+U3Rh dGUgIT0gUFhFX1NUQVRGTEFHU19HRVRfU1RBVEVfSU5JVElBTElaRUQpIHsNCj4gPiArICAgIENk Yi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gPiArICAgIENk Yi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX05PVF9JTklUSUFMSVpFRDsNCj4gPiArICAgIHJl dHVybjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNiRXRoVW5k aS5Vc2JFdGhVbmRpUmVjZWl2ZSAhPSBOVUxMKSB7DQo+ID4gKyAgICBTdGF0dXMgPSBOaWMtPlVz YkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpUmVjZWl2ZSAoQ2RiLCBOaWMpOw0KPiA+ICsgICAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgICBDZGItPlN0YXRGbGFncyA9IFBY RV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAg cmV0dXJuOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgQ2RiLT5TdGF0Q29kZSA9IFJlY2VpdmUg KENkYiwgTmljLCBDZGItPkNQQmFkZHIsIENkYi0+REJhZGRyKTsNCj4gPiArDQo+ID4gKyAgaWYg KENkYi0+U3RhdENvZGUgIT0gUFhFX1NUQVRDT0RFX1NVQ0NFU1MpIHsNCj4gPiArICAgIENkYi0+ U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gPiArICB9DQo+ID4g K30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFVzZSBVU0IgRXRoZXJuZXQgUHJvdG9jb2wgQnVs ayBpbiBjb21tYW5kIHRvIHJlY2VpdmUgZGF0YS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAg ICAgIENkYiAgICAgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0K PiA+ICsgIEBwYXJhbVtpbiwgb3V0XSBOaWMgICAgICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsg aW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gPiArICBAcGFyYW1baW5dICAgICAgQ3BiQWRk ciAgQ29tbWFuZCBQYXJhbWV0ZXIgQmxvY2sgQWRkcmVzcy4NCj4gPiArICBAcGFyYW1baW4sIG91 dF0gRGJBZGRyICAgRGF0YSBCbG9jayBBZGRyZXNzLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1VJ TlQxNg0KPiA+ICtSZWNlaXZlICgNCj4gPiArICBJTiBQWEVfQ0RCICAgICAgICpDZGIsDQo+ID4g KyAgSU4gT1VUIE5JQ19EQVRBICAqTmljLA0KPiA+ICsgIElOIFVJTlQ2NCAgICAgICAgQ3BiQWRk ciwNCj4gPiArICBJTiBPVVQgVUlOVDY0ICAgIERiQWRkcg0KPiA+ICsgICkNCj4gPiArew0KPiA+ ICsgIEVGSV9TVEFUVVMgICAgICAgU3RhdHVzOw0KPiA+ICsgIFVJTlROICAgICAgICAgICAgSW5k ZXg7DQo+ID4gKyAgUFhFX0ZSQU1FX1RZUEUgICBGcmFtZVR5cGU7DQo+ID4gKyAgUFhFX0NQQl9S RUNFSVZFICAqQ3BiOw0KPiA+ICsgIFBYRV9EQl9SRUNFSVZFICAgKkRiOw0KPiA+ICsgIE5JQ19E RVZJQ0UgICAgICAgKk5pY0RldmljZTsNCj4gPiArICBVSU5UOCAgICAgICAgICAgICpCdWxrSW5E YXRhOw0KPiA+ICsgIFVJTlROICAgICAgICAgICAgRGF0YUxlbmd0aDsNCj4gPiArICBFdGhlcm5l dEhlYWRlciAgICpIZWFkZXI7DQo+ID4gKyAgRUZJX1RQTCAgICAgICAgICBPcmlnaW5hbFRwbDsN Cj4gPiArDQo+ID4gKyAgRnJhbWVUeXBlICA9IFBYRV9GUkFNRV9UWVBFX05PTkU7DQo+ID4gKyAg TmljRGV2aWNlICA9IFVORElfREVWX0ZST01fTklDIChOaWMpOw0KPiA+ICsgIEJ1bGtJbkRhdGEg PSBOaWNEZXZpY2UtPlJlY2VpdmVCdWZmZXI7DQo+ID4gKyAgRGF0YUxlbmd0aCA9IChVSU5UTilO aWMtPk1heFNlZ21lbnRTaXplOw0KPiA+ICsgIENwYiAgICAgICAgPSAoUFhFX0NQQl9SRUNFSVZF ICopKFVJTlROKUNwYkFkZHI7DQo+ID4gKyAgRGIgICAgICAgICA9IChQWEVfREJfUkVDRUlWRSAq KShVSU5UTilEYkFkZHI7DQo+ID4gKw0KPiA+ICsgIGlmICghQnVsa0luRGF0YSkgew0KPiA+ICsg ICAgcmV0dXJuIFBYRV9TVEFUQ09ERV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiArICB9DQo+ID4g Kw0KPiA+ICsgIGlmICgoTmljLT5SYXRlTGltaXRpbmdDcmVkaXRDb3VudCA9PSAwKSAmJiAoTmlj LT5SYXRlTGltaXRpbmdFbmFibGUgPT0NCj4gVFJVRSkpIHsNCj4gPiArICAgIHJldHVybiBQWEVf U1RBVENPREVfTk9fREFUQTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IE5pYy0+ VXNiRXRoLT5Vc2JFdGhSZWNlaXZlIChDZGIsIE5pYy0+VXNiRXRoLCAoVk9JRA0KPiAqKUJ1bGtJ bkRhdGEsICZEYXRhTGVuZ3RoKTsNCj4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ ID4gKyAgICBOaWMtPlJlY2VpdmVTdGF0dXMgPSAwOw0KPiA+ICsgICAgaWYgKE5pYy0+UmF0ZUxp bWl0aW5nRW5hYmxlID09IFRSVUUpIHsNCj4gPiArICAgICAgT3JpZ2luYWxUcGwgPSBnQlMtPlJh aXNlVFBMIChUUExfTk9USUZZKTsNCj4gPiArICAgICAgaWYgKE5pYy0+UmF0ZUxpbWl0aW5nQ3Jl ZGl0Q291bnQgIT0gMCkgew0KPiA+ICsgICAgICAgIE5pYy0+UmF0ZUxpbWl0aW5nQ3JlZGl0Q291 bnQtLTsNCj4gPiArICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgZ0JTLT5SZXN0b3JlVFBMIChP cmlnaW5hbFRwbCk7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgcmV0dXJuIFBYRV9TVEFU Q09ERV9OT19EQVRBOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgTmljLT5SeEZyYW1lKys7DQo+ ID4gKw0KPiA+ICsgIGlmIChEYXRhTGVuZ3RoICE9IDApIHsNCj4gPiArICAgIGlmIChEYXRhTGVu Z3RoID4gQ3BiLT5CdWZmZXJMZW4pIHsNCj4gPiArICAgICAgRGF0YUxlbmd0aCA9IChVSU5UTilD cGItPkJ1ZmZlckxlbjsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBDb3B5TWVtICgoVUlO VDggKikoVUlOVE4pQ3BiLT5CdWZmZXJBZGRyLCAoVUlOVDggKilCdWxrSW5EYXRhLA0KPiBEYXRh TGVuZ3RoKTsNCj4gPiArDQo+ID4gKyAgICBIZWFkZXIgPSAoRXRoZXJuZXRIZWFkZXIgKilCdWxr SW5EYXRhOw0KPiA+ICsNCj4gPiArICAgIERiLT5GcmFtZUxlbiAgICAgICA9IChVSU5UMzIpRGF0 YUxlbmd0aDsNCj4gPiArICAgIERiLT5NZWRpYUhlYWRlckxlbiA9IFBYRV9NQUNfSEVBREVSX0xF Tl9FVEhFUjsNCj4gPiArDQo+ID4gKyAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBQWEVfSFdB RERSX0xFTl9FVEhFUjsgSW5kZXgrKykgew0KPiA+ICsgICAgICBpZiAoSGVhZGVyLT5EZXN0QWRk cltJbmRleF0gIT0gTmljLT5DdXJyZW50Tm9kZUFkZHJlc3NbSW5kZXhdKSB7DQo+ID4gKyAgICAg ICAgYnJlYWs7DQo+ID4gKyAgICAgIH0NCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBpZiAo SW5kZXggPj0gUFhFX0hXQUREUl9MRU5fRVRIRVIpIHsNCj4gPiArICAgICAgRnJhbWVUeXBlID0g UFhFX0ZSQU1FX1RZUEVfVU5JQ0FTVDsNCj4gPiArICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgIGZv ciAoSW5kZXggPSAwOyBJbmRleCA8IFBYRV9IV0FERFJfTEVOX0VUSEVSOyBJbmRleCsrKSB7DQo+ ID4gKyAgICAgICAgaWYgKEhlYWRlci0+RGVzdEFkZHJbSW5kZXhdICE9IE5pYy0+QnJvYWRjYXN0 Tm9kZUFkZHJlc3NbSW5kZXhdKQ0KPiB7DQo+ID4gKyAgICAgICAgICBicmVhazsNCj4gPiArICAg ICAgICB9DQo+ID4gKyAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgIGlmIChJbmRleCA+PSBQWEVf SFdBRERSX0xFTl9FVEhFUikgew0KPiA+ICsgICAgICAgIEZyYW1lVHlwZSA9IFBYRV9GUkFNRV9U WVBFX0JST0FEQ0FTVDsNCj4gPiArICAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICBpZiAoKEhl YWRlci0+RGVzdEFkZHJbMF0gJiAxKSA9PSAxKSB7DQo+ID4gKyAgICAgICAgICBGcmFtZVR5cGUg PSBQWEVfRlJBTUVfVFlQRV9GSUxURVJFRF9NVUxUSUNBU1Q7DQo+ID4gKyAgICAgICAgfSBlbHNl IHsNCj4gPiArICAgICAgICAgIEZyYW1lVHlwZSA9IFBYRV9GUkFNRV9UWVBFX1BST01JU0NVT1VT Ow0KPiA+ICsgICAgICAgIH0NCj4gPiArICAgICAgfQ0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiAr ICAgIERiLT5UeXBlICAgICA9IEZyYW1lVHlwZTsNCj4gPiArICAgIERiLT5Qcm90b2NvbCA9IEhl YWRlci0+UHJvdG9jb2w7DQo+ID4gKw0KPiA+ICsgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwg UFhFX0hXQUREUl9MRU5fRVRIRVI7IEluZGV4KyspIHsNCj4gPiArICAgICAgRGItPlNyY0FkZHJb SW5kZXhdICA9IEhlYWRlci0+U3JjQWRkcltJbmRleF07DQo+ID4gKyAgICAgIERiLT5EZXN0QWRk cltJbmRleF0gPSBIZWFkZXItPkRlc3RBZGRyW0luZGV4XTsNCj4gPiArICAgIH0NCj4gPiArICB9 DQo+ID4gKw0KPiA+ICsgIGlmIChGcmFtZVR5cGUgPT0gUFhFX0ZSQU1FX1RZUEVfTk9ORSkgew0K PiA+ICsgICAgTmljLT5SZWNlaXZlU3RhdHVzID0gMDsNCj4gPiArICB9IGVsc2Ugew0KPiA+ICsg ICAgTmljLT5SZWNlaXZlU3RhdHVzID0gMTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIHJldHVy biBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAg RmlsbCBvdXQgUFhFIFNXIFVOREkgc3RydWN0dXJlLg0KPiA+ICsNCj4gPiArICBAcGFyYW1bb3V0 XSAgUHhlU3cgICAgICBBIHBvaW50ZXIgdG8gdGhlIFBYRSBTVyBVTkRJIHN0cnVjdHVyZS4NCj4g PiArDQo+ID4gKyoqLw0KPiA+ICtWT0lEDQo+ID4gK1B4ZVN0cnVjdEluaXQgKA0KPiA+ICsgIE9V VCBQWEVfU1dfVU5ESSAgKlB4ZVN3DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgUHhlU3ctPlNp Z25hdHVyZSA9IFBYRV9ST01JRF9TSUdOQVRVUkU7DQo+ID4gKyAgUHhlU3ctPkxlbiAgICAgICA9 IChVSU5UOClzaXplb2YgKFBYRV9TV19VTkRJKTsNCj4gPiArICBQeGVTdy0+RnVkZ2UgICAgID0g MDsNCj4gPiArICBQeGVTdy0+SUZjbnQgICAgID0gMDsNCj4gPiArICBQeGVTdy0+SUZjbnRFeHQg ID0gMDsNCj4gPiArICBQeGVTdy0+UmV2ICAgICAgID0gUFhFX1JPTUlEX1JFVjsNCj4gPiArICBQ eGVTdy0+TWFqb3JWZXIgID0gUFhFX1JPTUlEX01BSk9SVkVSOw0KPiA+ICsgIFB4ZVN3LT5NaW5v clZlciAgPSBQWEVfUk9NSURfTUlOT1JWRVI7DQo+ID4gKyAgUHhlU3ctPnJlc2VydmVkMSA9IDA7 DQo+ID4gKw0KPiA+ICsgIFB4ZVN3LT5JbXBsZW1lbnRhdGlvbiA9IFBYRV9ST01JRF9JTVBfU1df VklSVF9BRERSIHwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICBQWEVfUk9NSURfSU1Q X0ZSQUdfU1VQUE9SVEVEIHwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICBQWEVfUk9N SURfSU1QX0NNRF9MSU5LX1NVUFBPUlRFRCB8DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgUFhFX1JPTUlEX0lNUF9TVEFUSU9OX0FERFJfU0VUVEFCTEUgfA0KPiA+ICsNCj4gUFhFX1JP TUlEX0lNUF9QUk9NSVNDVU9VU19NVUxUSUNBU1RfUlhfU1VQUE9SVEVEIHwNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICBQWEVfUk9NSURfSU1QX1BST01JU0NVT1VTX1JYX1NVUFBPUlRF RCB8DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgUFhFX1JPTUlEX0lNUF9CUk9BRENB U1RfUlhfU1VQUE9SVEVEIHwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICBQWEVfUk9N SURfSU1QX0ZJTFRFUkVEX01VTFRJQ0FTVF9SWF9TVVBQT1JURUQ7DQo+ID4gKw0KPiA+ICsgIFB4 ZVN3LT5FbnRyeVBvaW50ICAgPSAoVUlOVDY0KShVSU5UTilVbmRpQXBpRW50cnk7DQo+ID4gKyAg UHhlU3ctPnJlc2VydmVkMlswXSA9IDA7DQo+ID4gKyAgUHhlU3ctPnJlc2VydmVkMlsxXSA9IDA7 DQo+ID4gKyAgUHhlU3ctPnJlc2VydmVkMlsyXSA9IDA7DQo+ID4gKyAgUHhlU3ctPkJ1c0NudCAg ICAgICA9IDE7DQo+ID4gKyAgUHhlU3ctPkJ1c1R5cGVbMF0gICA9IFBYRV9CVVNUWVBFX1VTQjsN Cj4gPiArICBQeGVTdy0+RnVkZ2UgICAgICAgID0gUHhlU3ctPkZ1ZGdlIC0gQ2FsY3VsYXRlU3Vt OCAoKFZPSUQgKilQeGVTdywNCj4gUHhlU3ctPkxlbik7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgIFVwZGF0ZSBOSUMgbnVtYmVyLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICAg ICAgTmljICAgICAgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxl ciBkYXRhLg0KPiA+ICsgIEBwYXJhbVtpbiwgb3V0XSBQeGVTdyAgICAgQSBwb2ludGVyIHRvIHRo ZSBQWEUgU1cgVU5ESSBzdHJ1Y3R1cmUuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArVk9JRA0KPiA+ ICtVcGRhdGVOaWNOdW0gKA0KPiA+ICsgIElOICAgICAgTklDX0RBVEEgICAgICpOaWMsDQo+ID4g KyAgSU4gT1VUICBQWEVfU1dfVU5ESSAgKlB4ZVN3DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAg VUlOVDE2ICBOaWNOdW07DQo+ID4gKw0KPiA+ICsgIE5pY051bSA9IChQeGVTdy0+SUZjbnQgfCBQ eGVTdy0+SUZjbnRFeHQgPDwgOCk7DQo+ID4gKw0KPiA+ICsgIGlmIChOaWMgPT0gTlVMTCkgew0K PiA+ICsgICAgaWYgKE5pY051bSA+IDApIHsNCj4gPiArICAgICAgTmljTnVtLS07DQo+ID4gKyAg ICB9DQo+ID4gKw0KPiA+ICsgICAgUHhlU3ctPklGY250ICAgID0gKFVJTlQ4KShOaWNOdW0gJiAw eEZGKTsgICAgICAgICAgLy8gR2V0IGxvd2VyIGJ5dGUNCj4gPiArICAgIFB4ZVN3LT5JRmNudEV4 dCA9IChVSU5UOCkoKE5pY051bSAmIDB4RkYwMCkgPj4gOCk7IC8vIEdldCB1cHBlciBieXRlDQo+ ID4gKyAgICBQeGVTdy0+RnVkZ2UgICAgPSAoVUlOVDgpKFB4ZVN3LT5GdWRnZSAtIENhbGN1bGF0 ZVN1bTggKChWT0lEDQo+ICopUHhlU3csIFB4ZVN3LT5MZW4pKTsNCj4gPiArICAgIHJldHVybjsN Cj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIE5pY051bSsrOw0KPiA+ICsNCj4gPiArICBQeGVTdy0+ SUZjbnQgICAgPSAoVUlOVDgpKE5pY051bSAmIDB4RkYpOyAgICAgICAgICAvLyBHZXQgbG93ZXIg Ynl0ZQ0KPiA+ICsgIFB4ZVN3LT5JRmNudEV4dCA9IChVSU5UOCkoKE5pY051bSAmIDB4RkYwMCkg Pj4gOCk7IC8vIEdldCB1cHBlciBieXRlDQo+ID4gKyAgUHhlU3ctPkZ1ZGdlICAgID0gKFVJTlQ4 KShQeGVTdy0+RnVkZ2UgLSBDYWxjdWxhdGVTdW04ICgoVk9JRA0KPiAqKVB4ZVN3LCBQeGVTdy0+ TGVuKSk7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFVOREkgQVBJIHRhYmxlIGVu dHJ5Lg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29t bWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMN Cj4gPiArRUZJQVBJDQo+ID4gK1VuZGlBcGlFbnRyeSAoDQo+ID4gKyAgSU4gIFVJTlQ2NCAgQ2Ri DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgUFhFX0NEQiAgICpDZGJQdHI7DQo+ID4gKyAgTklD X0RBVEEgICpOaWM7DQo+ID4gKw0KPiA+ICsgIGlmIChDZGIgPT0gMCkgew0KPiA+ICsgICAgcmV0 dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIENkYlB0 ciA9IChQWEVfQ0RCICopKFVJTlROKUNkYjsNCj4gPiArICBOaWMgICAgPSAmKGdMYW5EZXZpY2VM aXN0W0NkYlB0ci0+SUZudW1dLT5OaWNJbmZvKTsNCj4gPiArICBnVW5kaUFwaVRhYmxlW0NkYlB0 ci0+T3BDb2RlXShDZGJQdHIsIE5pYyk7DQo+ID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBNYXAgdmlydHVhbCBtZW1vcnkgYWRkcmVzcyBm b3IgRE1BLiBUaGlzIGZpZWxkIGNhbiBiZSBzZXQgdG8NCj4gPiArICB6ZXJvIGlmIHRoZXJlIGlz IG5vIG1hcHBpbmcgc2VydmljZS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgTmljICAgICAg ICAgICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4N Cj4gPiArICBAcGFyYW1baW5dICBNZW1BZGRyICAgICAgIFZpcnR1YWwgYWRkcmVzcyB0byBiZSBt YXBwZWQuDQo+ID4gKyAgQHBhcmFtW2luXSAgU2l6ZSAgICAgICAgICBTaXplIG9mIG1lbW9yeSB0 byBiZSBtYXBwZWQuDQo+ID4gKyAgQHBhcmFtW2luXSAgRGlyZWN0aW9uICAgICBEaXJlY3Rpb24g b2YgZGF0YSBmbG93IGZvciB0aGlzIG1lbW9yeSdzIHVzYWdlOg0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY3B1LT5kZXZpY2UsIGRldmljZS0+Y3B1IG9yIGJvdGggd2F5cy4NCj4g PiArICBAcGFyYW1bb3V0XSBNYXBwZWRBZGRyICAgIFBvaW50ZXIgdG8gcmV0dXJuIHRoZSBtYXBw ZWQgZGV2aWNlDQo+IGFkZHJlc3MuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArVUlOVE4NCj4gPiAr TWFwSXQgKA0KPiA+ICsgIElOIE5JQ19EQVRBICAqTmljLA0KPiA+ICsgIElOIFVJTlQ2NCAgICBN ZW1BZGRyLA0KPiA+ICsgIElOIFVJTlQzMiAgICBTaXplLA0KPiA+ICsgIElOIFVJTlQzMiAgICBE aXJlY3Rpb24sDQo+ID4gKyAgT1VUIFVJTlQ2NCAgIE1hcHBlZEFkZHINCj4gPiArICApDQo+ID4g K3sNCj4gPiArICBVSU5UNjQgICpQaHlBZGRyOw0KPiA+ICsNCj4gPiArICBQaHlBZGRyID0gKFVJ TlQ2NCAqKShVSU5UTilNYXBwZWRBZGRyOw0KPiA+ICsNCj4gPiArICBpZiAoTmljLT5QeGVTdGFy dC5NYXBfTWVtID09IDApIHsNCj4gPiArICAgICpQaHlBZGRyID0gTWVtQWRkcjsNCj4gPiArICB9 IGVsc2Ugew0KPiA+ICsgICAgKCh2b2lkICgqKShVSU5UNjQsIFVJTlQ2NCwgVUlOVDMyLCBVSU5U MzIsIFVJTlQ2NCkpKFVJTlROKSBOaWMtDQo+ID5QeGVTdGFydC5NYXBfTWVtKSgNCj4gPiArICBO aWMtPlB4ZVN0YXJ0LlVuaXF1ZV9JRCwNCj4gPiArICBNZW1BZGRyLA0KPiA+ICsgIFNpemUsDQo+ ID4gKyAgRGlyZWN0aW9uLA0KPiA+ICsgIE1hcHBlZEFkZHINCj4gPiArICApOw0KPiA+ICsgIH0N Cj4gPiArDQo+ID4gKyAgcmV0dXJuIFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICsvKioNCj4gPiArICBVbi1tYXAgcHJldmlvdXNseSBtYXBwZWQgdmlydHVhbCBtZW1v cnkgYWRkcmVzcy4gVGhpcyBmaWVsZCBjYW4gYmUgc2V0DQo+ID4gKyAgdG8gemVybyBvbmx5IGlm IHRoZSBNYXBfTWVtKCkgc2VydmljZSBpcyBhbHNvIHNldCB0byB6ZXJvLg0KPiA+ICsNCj4gPiAr ICBAcGFyYW1baW5dICBOaWMgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRl cmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiA+ICsgIEBwYXJhbVtpbl0gIE1lbUFkZHIgICAgICAg VmlydHVhbCBhZGRyZXNzIHRvIGJlIG1hcHBlZC4NCj4gPiArICBAcGFyYW1baW5dICBTaXplICAg ICAgICAgIFNpemUgb2YgbWVtb3J5IHRvIGJlIG1hcHBlZC4NCj4gPiArICBAcGFyYW1baW5dICBE aXJlY3Rpb24gICAgIERpcmVjdGlvbiBvZiBkYXRhIGZsb3cgZm9yIHRoaXMgbWVtb3J5J3MgdXNh Z2U6DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHUtPmRldmljZSwgZGV2aWNl LT5jcHUgb3IgYm90aCB3YXlzLg0KPiA+ICsgIEBwYXJhbVtpbl0gIE1hcHBlZEFkZHIgICAgUG9p bnRlciB0byByZXR1cm4gdGhlIG1hcHBlZCBkZXZpY2UNCj4gYWRkcmVzcy4NCj4gPiArDQo+ID4g KyoqLw0KPiA+ICtWT0lEDQo+ID4gK1VuTWFwSXQgKA0KPiA+ICsgIElOIE5JQ19EQVRBICAqTmlj LA0KPiA+ICsgIElOIFVJTlQ2NCAgICBNZW1BZGRyLA0KPiA+ICsgIElOIFVJTlQzMiAgICBTaXpl LA0KPiA+ICsgIElOIFVJTlQzMiAgICBEaXJlY3Rpb24sDQo+ID4gKyAgSU4gVUlOVDY0ICAgIE1h cHBlZEFkZHINCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBpZiAoTmljLT5QeGVTdGFydC5Vbk1h cF9NZW0gIT0gMCkgew0KPiA+ICsgICAgKCh2b2lkICgqKShVSU5UNjQsIFVJTlQ2NCwgVUlOVDMy LCBVSU5UMzIsIFVJTlQ2NCkpKFVJTlROKSBOaWMtDQo+ID5QeGVTdGFydC5Vbk1hcF9NZW0pKA0K PiA+ICsgIE5pYy0+UHhlU3RhcnQuVW5pcXVlX0lELA0KPiA+ICsgIE1lbUFkZHIsDQo+ID4gKyAg U2l6ZSwNCj4gPiArICBEaXJlY3Rpb24sDQo+ID4gKyAgTWFwcGVkQWRkcg0KPiA+ICsgICk7DQo+ ID4gKyAgfQ0KPiA+ICsNCj4gPiArICByZXR1cm47DQo+ID4gK30NCj4gPiBkaWZmIC0tZ2l0IGEv VXNiTmV0d29ya1BrZy9SZWFkTWUubWQgYi9Vc2JOZXR3b3JrUGtnL1JlYWRNZS5tZA0KPiA+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMC4uY2I3MDY4NGYwYg0KPiA+ IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9Vc2JOZXR3b3JrUGtnL1JlYWRNZS5tZA0KPiA+IEBA IC0wLDAgKzEsNjUgQEANCj4gPiArIyBVc2JOZXR3b3JrUGtnDQo+ID4gKw0KPiA+ICtUaGlzIGRv Y3VtZW50IGlzIGludGVuZCB0byBwcm92aWRlIHBhY2thZ2UgaW5mb3JtYXRpb24sIGluY2x1ZGUg dGhlDQo+IGludGVyZmFjZSBkZXRhaWxzLg0KPiA+ICsNCj4gPiArIyBJTkRFWA0KPiA+ICsgICog W0ludHJvZHVjdGlvbl0oI2ludHJvZHVjdGlvbikNCj4gPiArICAqIFtDb21wb25lbnRzXSgjY29t cG9uZW50cykNCj4gPiArICAgICogW1tOZXR3b3JrQ29tbW9uXV0oI25ldHdvcmtjb21tb24pDQo+ ID4gKyAgICAqIFtbVXNiQ2RjRWNtXV0oI3VzYmNkY2VjbSkNCj4gPiArICAgICogW1tVc2JDZGNO Y21dXSgjdXNiY2RjbmNtKQ0KPiA+ICsgICAgKiBbW1VzYlJuZGlzXV0oI3VzYnJuZGlzKQ0KPiA+ ICsNCj4gPiArIyAgSW50cm9kdWN0aW9uDQo+ID4gK1VzYk5ldHdvcmtQa2cgcHJvdmlkZXMgbmV0 d29yayBmdW5jdGlvbnMgZm9yIFVTQiBMQU4gZGV2aWNlcy4NCj4gPiArDQo+ID4gKyMgQ29tcG9u ZW50cw0KPiA+ICtCZWxvdyBtb2R1bGUgaXMgaW5jbHVkZWQgaW4gdGhpcyBwYWNrYWdlOjxicj4N Cj4gPiArLSBOZXR3b3JrQ29tbW9uDQo+ID4gKy0gVXNiQ2RjRWNtDQo+ID4gKy0gVXNiQ2RjTmNt DQo+ID4gKy0gVXNiUm5kaXMNCj4gPiArDQo+ID4gKyMjIFtOZXR3b3JrQ29tbW9uXQ0KPiA+ICtQ cm92aWRlcyBhIExBTiBkcml2ZXIgYmFzZWQgb24gVUVGSSBzcGVjaWZpY2F0aW9uKFVOREkpLiBJ dCBzdXBwb3J0cyBVU0INCj4gY29tbXVuaWNhdGlvbiBjbGFzcyBzdWJjbGFzcyBkZXZpY2VzIGFu ZCBVU0IgUm5kaXMgZGV2aWNlcywgZGVwZW5kaW5nIG9uDQo+IHRoZSBVc2JFdGhlcm5ldFByb3Rv Y29sLg0KPiA+ICsNCj4gPiArIyMgUmVxdWlyZWQgQ29tcG9uZW50cw0KPiA+ICstIE5ldHdvcmtQ a2cNCj4gPiArDQo+ID4gKyMjIFtVc2JDZGNFY21dDQo+ID4gK1RoaXMgZHJpdmVyIHByb3ZpZGVz IGEgY29tbXVuaWNhdGlvbiBpbnRlcmZhY2UgZm9yIFVTQiBFdGhlcm5ldCBkZXZpY2VzDQo+IHRo YXQgZm9sbG93cyB0aGUgRUNNIHByb3RvY29sLiBUaGUgZHJpdmVyIGluc3RhbGxzIFVzYkV0aGVy bmV0UHJvdG9jb2wgd2l0aA0KPiBFQ00gZnVuY3Rpb25zIHdoaWNoIGFyZSBjb25zdW1lZCBieSB0 aGUgTmV0d29ya0NvbW1vbiBkcml2ZXIuDQo+ID4gKw0KPiA+ICtUaGUgZHJpdmVyIGlzIGNvbXBh dGlibGUgd2l0aCB0aGUgZm9sbG93aW5nIFVTQiBjbGFzcyBjb2RlczoNCj4gPiArfENsYXNzIENv ZGV8U3ViQ2xhc3MgQ29kZXxQcm90b2NvbCBDb2RlfA0KPiA+ICt8Oi0tLS0tLS0tOnw6LS0tLS0t LS0tLS06fDotLS0tLS0tLS0tLTp8DQo+ID4gK3wweDAyfDB4MDZ8MHgwMHwNCj4gPiArDQo+ID4g KyMjIFJlcXVpcmVkIENvbXBvbmVudHMNCj4gPiArLSBOZXR3b3JrQ29tbW9uDQo+ID4gKy0gTWRl TW9kdWxlUGtnKFVTQiBidXMgZHJpdmVyKQ0KPiA+ICsNCj4gPiArIyMgW1VzYkNkY05jbV0NCj4g PiArVGhpcyBkcml2ZXIgcHJvdmlkZXMgYSBjb21tdW5pY2F0aW9uIGludGVyZmFjZSBmb3IgVVNC IEV0aGVybmV0IGRldmljZXMNCj4gdGhhdCBmb2xsb3dzIHRoZSBOQ00gcHJvdG9jb2wuIFRoZSBk cml2ZXIgaW5zdGFsbHMgVXNiRXRoZXJuZXRQcm90b2NvbCB3aXRoDQo+IE5DTSBmdW5jdGlvbnMg d2hpY2ggYXJlIGNvbnN1bWVkIGJ5IHRoZSBOZXR3b3JrQ29tbW9uIGRyaXZlci4NCj4gPiArDQo+ ID4gK1RoZSBkcml2ZXIgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBmb2xsb3dpbmcgVVNCIGNsYXNz IGNvZGVzOg0KPiA+ICt8Q2xhc3MgQ29kZXxTdWJDbGFzcyBDb2RlfFByb3RvY29sIENvZGV8DQo+ ID4gK3w6LS0tLS0tLS06fDotLS0tLS0tLS0tLTp8Oi0tLS0tLS0tLS0tOnwNCj4gPiArfDB4MDJ8 MHgwRHwweDAwfA0KPiA+ICsNCj4gPiArIyMgUmVxdWlyZWQgQ29tcG9uZW50cw0KPiA+ICstIE5l dHdvcmtDb21tb24NCj4gPiArLSBNZGVNb2R1bGVQa2coVVNCIGJ1cyBkcml2ZXIpDQo+ID4gKw0K PiA+ICsjIyBbVXNiUm5kaXNdDQo+ID4gK1RoaXMgZHJpdmVyIHByb3ZpZGVzIGEgY29tbXVuaWNh dGlvbiBpbnRlcmZhY2UgZm9yIFVTQiBFdGhlcm5ldCBkZXZpY2VzDQo+IHRoYXQgZm9sbG93cyB0 aGUgUk5ESVMgcHJvdG9jb2wuIFRoZSBkcml2ZXIgaW5zdGFsbHMgVXNiRXRoZXJuZXRQcm90b2Nv bCB3aXRoDQo+IFJORElTIGZ1bmN0aW9ucyB3aGljaCBhcmUgY29uc3VtZWQgYnkgdGhlIE5ldHdv cmtDb21tb24gZHJpdmVyLg0KPiA+ICsNCj4gPiArVGhlIGRyaXZlciBpcyBjb21wYXRpYmxlIHdp dGggdGhlIGZvbGxvd2luZyBVU0IgY2xhc3MgY29kZXM6DQo+ID4gK3xDbGFzcyBDb2RlfFN1YkNs YXNzIENvZGV8UHJvdG9jb2wgQ29kZXwNCj4gPiArfDotLS0tLS0tLTp8Oi0tLS0tLS0tLS0tOnw6 LS0tLS0tLS0tLS06fA0KPiA+ICt8MHgwMnwweDAyfDB4RkZ8DQo+ID4gK3wweEVGfDB4MDR8MHgw MXwNCj4gPiArDQo+ID4gKyMjIFJlcXVpcmVkIENvbXBvbmVudHMNCj4gPiArLSBOZXR3b3JrQ29t bW9uDQo+ID4gKy0gTWRlTW9kdWxlUGtnKFVTQiBidXMgZHJpdmVyKQ0KPiA+ICsNCj4gPiBkaWZm IC0tZ2l0IGEvVXNiTmV0d29ya1BrZy9Vc2JOZXR3b3JrUGtnLmNpLnlhbWwNCj4gYi9Vc2JOZXR3 b3JrUGtnL1VzYk5ldHdvcmtQa2cuY2kueWFtbA0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ ID4gaW5kZXggMDAwMDAwMDAwMC4uN2VlMWVmM2NmMA0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiAr KysgYi9Vc2JOZXR3b3JrUGtnL1VzYk5ldHdvcmtQa2cuY2kueWFtbA0KPiA+IEBAIC0wLDAgKzEs NjUgQEANCj4gPiArIyMgQGZpbGUNCj4gPiArIyBDSSBjb25maWd1cmF0aW9uIGZvciBVc2JOZXR3 b3JrUGtnDQo+ID4gKyMNCj4gPiArIyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlv bg0KPiA+ICsjIENvcHlyaWdodCAoYykgMjAyMywgQW1lcmljYW4gTWVnYXRyZW5kcyBJbnRlcm5h dGlvbmFsIExMQy4gQWxsIHJpZ2h0cw0KPiByZXNlcnZlZC48QlI+DQo+ID4gKyMgU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gPiArIyMNCj4gPiArew0KPiA+ ICsgICAgIyMgb3B0aW9ucyBkZWZpbmVkIC5weXRvb2wvUGx1Z2luL0xpY2Vuc2VDaGVjaw0KPiA+ ICsgICAgIkxpY2Vuc2VDaGVjayI6IHsNCj4gPiArICAgICAgICAiSWdub3JlRmlsZXMiOiBbXQ0K PiA+ICsgICAgfSwNCj4gPiArICAgICJFY2NDaGVjayI6IHsNCj4gPiArICAgICAgICAjIyBFeGNl cHRpb24gc2FtcGxlIGxvb2tzIGxpa2UgYmVsb3c6DQo+ID4gKyAgICAgICAgIyMgIkV4Y2VwdGlv bkxpc3QiOiBbDQo+ID4gKyAgICAgICAgIyMgICAgICI8RXJyb3JJRD4iLCAiPEtleVdvcmQ+Ig0K PiA+ICsgICAgICAgICMjIF0NCj4gPiArICAgICAgICAiRXhjZXB0aW9uTGlzdCI6IFsNCj4gPiAr ICAgICAgICBdLA0KPiA+ICsgICAgICAgICMjIEJvdGggZmlsZSBwYXRoIGFuZCBkaXJlY3Rvcnkg cGF0aCBhcmUgYWNjZXB0ZWQuDQo+ID4gKyAgICAgICAgIklnbm9yZUZpbGVzIjogWw0KPiA+ICsg ICAgICAgIF0NCj4gPiArICAgIH0sDQo+ID4gKyAgICAiQ29tcGlsZXJQbHVnaW4iOiB7DQo+ID4g KyAgICAgICAgIkRzY1BhdGgiOiAiVXNiTmV0d29ya1BrZy5kc2MiDQo+ID4gKyAgICB9LA0KPiA+ ICsgICAgIkNoYXJFbmNvZGluZ0NoZWNrIjogew0KPiA+ICsgICAgICAgICJJZ25vcmVGaWxlcyI6 IFtdDQo+ID4gKyAgICB9LA0KPiA+ICsgICAgIkRlcGVuZGVuY3lDaGVjayI6IHsNCj4gPiArICAg ICAgICAiQWNjZXB0YWJsZURlcGVuZGVuY2llcyI6IFsNCj4gPiArICAgICAgICAgICAgIk1kZVBr Zy9NZGVQa2cuZGVjIiwNCj4gPiArICAgICAgICAgICAgIk1kZU1vZHVsZVBrZy9NZGVNb2R1bGVQ a2cuZGVjIiwNCj4gPiArICAgICAgICAgICAgIk5ldHdvcmtQa2cvTmV0d29ya1BrZy5kZWMiDQo+ ID4gKyAgICAgICAgXSwNCj4gPiArICAgICAgICAjIEZvciBob3N0IGJhc2VkIHVuaXQgdGVzdHMN Cj4gPiArICAgICAgICAiQWNjZXB0YWJsZURlcGVuZGVuY2llcy1IT1NUX0FQUExJQ0FUSU9OIjpb XSwNCj4gPiArICAgICAgICAjIEZvciBVRUZJIHNoZWxsIGJhc2VkIGFwcHMNCj4gPiArICAgICAg ICAiQWNjZXB0YWJsZURlcGVuZGVuY2llcy1VRUZJX0FQUExJQ0FUSU9OIjpbXSwNCj4gPiArICAg ICAgICAiSWdub3JlSW5mIjogW10NCj4gPiArICAgIH0sDQo+ID4gKyAgICAiRHNjQ29tcGxldGVD aGVjayI6IHsNCj4gPiArICAgICAgICAiRHNjUGF0aCI6ICJVc2JOZXR3b3JrUGtnLmRzYyIsDQo+ ID4gKyAgICAgICAgIklnbm9yZUluZiI6IFtdDQo+ID4gKyAgICB9LA0KPiA+ICsgICAgIkd1aWRD aGVjayI6IHsNCj4gPiArICAgICAgICAiSWdub3JlR3VpZE5hbWUiOiBbXSwNCj4gPiArICAgICAg ICAiSWdub3JlR3VpZFZhbHVlIjogW10sDQo+ID4gKyAgICAgICAgIklnbm9yZUZvbGRlcnNBbmRG aWxlcyI6IFtdDQo+ID4gKyAgICB9LA0KPiA+ICsNCj4gPiArICAgICMjIG9wdGlvbnMgZGVmaW5l ZCAucHl0b29sL1BsdWdpbi9MaWJyYXJ5Q2xhc3NDaGVjaw0KPiA+ICsgICAgIkxpYnJhcnlDbGFz c0NoZWNrIjogew0KPiA+ICsgICAgICAgICJJZ25vcmVIZWFkZXJGaWxlIjogW10NCj4gPiArICAg IH0sDQo+ID4gKw0KPiA+ICsgICAgIyMgb3B0aW9ucyBkZWZpbmVkIC5weXRvb2wvUGx1Z2luL1Nw ZWxsQ2hlY2sNCj4gPiArICAgICJTcGVsbENoZWNrIjogew0KPiA+ICsgICAgICAgICJBdWRpdE9u bHkiOiBUcnVlLCAgICAgICAgICAgIyBGYWlscyB0ZXN0IGJ1dCBydW4gaW4gQXVkaXRPbmx5IG1v ZGUgdG8NCj4gY29sbGVjdCBsb2cNCj4gPiArICAgICAgICAiSWdub3JlRmlsZXMiOiBbXSwgICAg ICAgICAgICMgdXNlIGdpdGlnbm9yZSBzeW50YXggdG8gaWdub3JlIGVycm9ycyBpbg0KPiBtYXRj aGluZyBmaWxlcw0KPiA+ICsgICAgICAgICJFeHRlbmRXb3JkcyI6IFtdLCAgICAgICAgICAgIyB3 b3JkcyB0byBleHRlbmQgdG8gdGhlIGRpY3Rpb25hcnkgZm9yIHRoaXMNCj4gcGFja2FnZQ0KPiA+ ICsgICAgICAgICJJZ25vcmVTdGFuZGFyZFBhdGhzIjogW10sICAgIyBTdGFuZGFyZCBQbHVnaW4g ZGVmaW5lZCBwYXRocyB0aGF0DQo+IHNob3VsZCBiZSBpZ25vcmUNCj4gPiArICAgICAgICAiQWRk aXRpb25hbEluY2x1ZGVQYXRocyI6IFtdICMgQWRkaXRpb25hbCBwYXRocyB0byBzcGVsbCBjaGVj aw0KPiAod2lsZGNhcmRzIHN1cHBvcnRlZCkNCj4gPiArICAgIH0NCj4gPiArfQ0KPiA+IGRpZmYg LS1naXQgYS9Vc2JOZXR3b3JrUGtnL1VzYk5ldHdvcmtQa2cuZGVjDQo+IGIvVXNiTmV0d29ya1Br Zy9Vc2JOZXR3b3JrUGtnLmRlYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXgg MDAwMDAwMDAwMC4uMzBlNGU0YzhhYQ0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9Vc2JO ZXR3b3JrUGtnL1VzYk5ldHdvcmtQa2cuZGVjDQo+ID4gQEAgLTAsMCArMSw0NiBAQA0KPiA+ICsj IyBAZmlsZQ0KPiA+ICsjICBUaGlzIHBhY2thZ2UgZGVmaW5lcyBVc2IgbmV0d29yayBzcGVjaWZp YyBpbnRlcmZhY2VzIGFuZCBsaWJyYXJ5IGNsYXNzZXMNCj4gPiArIyAgYXMgd2VsbCBhcyBjb25m aWd1cmF0aW9uIGZvciBzdGFuZGFyZCBlZGsyIHBhY2thZ2VzLg0KPiA+ICsjDQo+ID4gKyMgQ29w eXJpZ2h0IChjKSAyMDIzLCBBbWVyaWNhbiBNZWdhdHJlbmRzIEludGVybmF0aW9uYWwgTExDLiBB bGwgcmlnaHRzDQo+IHJlc2VydmVkLjxCUj4NCj4gPiArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ICsjIw0KPiA+ICsNCj4gPiArW0RlZmluZXNdDQo+ ID4gKyAgREVDX1NQRUNJRklDQVRJT04gICAgICAgICAgICAgID0gMHgwMDAxMDAwNQ0KPiA+ICsg IFBBQ0tBR0VfTkFNRSAgICAgICAgICAgICAgICAgICA9IFVzYk5ldHdvcmtQa2cNCj4gPiArICBQ QUNLQUdFX0dVSUQgICAgICAgICAgICAgICAgICAgPSBhYmZhYjkxZS0zN2VhLTRjYjQtODBhNi01 NjNkYmIwYmNlYzYNCj4gPiArICBQQUNLQUdFX1ZFUlNJT04gICAgICAgICAgICAgICAgPSAwLjEN Cj4gPiArDQo+ID4gK1tJbmNsdWRlc10NCj4gPiArICBJbmNsdWRlDQo+ID4gKw0KPiA+ICtbUHJv dG9jb2xzXQ0KPiA+ICsgICMjIEluY2x1ZGUvUHJvdG9jb2wvRWRrSUlVc2JFdGhlcm5ldC5oDQo+ ID4gKyAgZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkID0geyAweDhkODk2OWNjLCAweGZlYjAsIDB4 NDMwMywgeyAweGIyLCAweDFhLA0KPiAweDFmLCAweDExLCAweDZmLCAweDM4LCAweDU2LCAweDQz IH0gfQ0KPiA+ICsNCj4gPiArW0d1aWRzXQ0KPiA+ICsgICMjIFVzYiBOZXR3b3JrIHBhY2thZ2Ug dG9rZW4gc3BhY2UgR1VJRA0KPiA+ICsgIGdVc2JOZXR3b3JrUGtnVG9rZW5TcGFjZUd1aWQgID0g eyAweEExMjMxRTgyLCAweDIxQjgsIDB4NDIwNCwNCj4geyAweDkyLCAweEJCLCAweDM3LCAweDNB LCAweEZCLCAweDAxLCAweEM2LCAweEExIH0gfQ0KPiA+ICsNCj4gPiArW1BjZHNGZWF0dXJlRmxh Z10NCj4gPiArDQo+ID4gKyAgIyMgU2V0IHRoZSBQQ0QgJ1VzYkNkY0VjbVN1cHBvcnQnIHRvICdU UlVFJyBpZiAnVXNiIENkYyBFY20gZGV2aWNlJw0KPiBuZWVkIHRvIGJlIGVuYWJsZWQuDQo+ID4g Kw0KPiBnVXNiTmV0d29ya1BrZ1Rva2VuU3BhY2VHdWlkLlVzYkNkY0VjbVN1cHBvcnR8RkFMU0V8 Qk9PTEVBTnwweA0KPiAwMDAwMDAwMQ0KPiA+ICsNCj4gPiArICAjIyBTZXQgdGhlIFBDRCAnVXNi Q2RjTmNtU3VwcG9ydCcgdG8gJ1RSVUUnIGlmICdVc2IgQ2RjIE5jbSBkZXZpY2UnDQo+IG5lZWQg dG8gYmUgZW5hYmxlZC4NCj4gPiArDQo+IGdVc2JOZXR3b3JrUGtnVG9rZW5TcGFjZUd1aWQuVXNi Q2RjTmNtU3VwcG9ydHxGQUxTRXxCT09MRUFOfDB4DQo+IDAwMDAwMDAyDQo+ID4gKw0KPiA+ICsg ICMjIFNldCB0aGUgUENEICdVc2JSbmRpc1N1cHBvcnQnIHRvICdUUlVFJyBpZiAnVXNiIFJuZGlz IGRldmljZScgbmVlZCB0bw0KPiBiZSBlbmFibGVkLg0KPiA+ICsNCj4gZ1VzYk5ldHdvcmtQa2dU b2tlblNwYWNlR3VpZC5Vc2JSbmRpc1N1cHBvcnR8VFJVRXxCT09MRUFOfDB4MDAwDQo+IDAwMDAz DQo+ID4gKw0KPiA+ICtbUGNkc0ZpeGVkQXRCdWlsZCwgUGNkc1BhdGNoYWJsZUluTW9kdWxlXQ0K PiA+ICsgICMjIFN1cHBvcnQgcmF0ZSBsaW1pdGluZw0KPiA+ICsNCj4gZ1VzYk5ldHdvcmtQa2dU b2tlblNwYWNlR3VpZC5FbmFibGVSYXRlTGltaXRpbmd8RkFMU0V8Qk9PTEVBTnwweDANCj4gMDAx MDAwMQ0KPiA+ICsNCj4gPiArICAjIyBUaGUgcmF0ZSBsaW1pdGluZyBDcmVkaXQgdmFsdWUgaXMg Y2hlY2sgaW4gcmF0ZSBsaW1pdGVyIGV2ZW50Lg0KPiA+ICsgICMgIEl0IGlzIHRvIGNvbnRyb2wg dGhlIFJhdGVMaW1pdGluZ0NyZWRpdENvdW50IG1heCB2YWx1ZS4NCj4gPiArDQo+IGdVc2JOZXR3 b3JrUGtnVG9rZW5TcGFjZUd1aWQuUmF0ZUxpbWl0aW5nQ3JlZGl0fDEwfFVJTlQzMnwweDAwMDEw MDANCj4gMg0KPiA+ICsNCj4gPiArICAjIyBUaGUgdmFsdWUgb2YgcmF0ZSBsaW1pdGVyIGV2ZW50 IGZvciB0aW1lb3V0IGNoZWNrLiBEZWZhdWx0IHZhbHVlIGlzDQo+IDEwMCh1bml0IDFtcykuDQo+ ID4gKw0KPiBnVXNiTmV0d29ya1BrZ1Rva2VuU3BhY2VHdWlkLlJhdGVMaW1pdGluZ0ZhY3Rvcnwx MDB8VUlOVDMyfDB4MDAwMTAwDQo+IDAzDQo+ID4gZGlmZiAtLWdpdCBhL1VzYk5ldHdvcmtQa2cv VXNiTmV0d29ya1BrZy5kc2MNCj4gYi9Vc2JOZXR3b3JrUGtnL1VzYk5ldHdvcmtQa2cuZHNjDQo+ ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwLi5jMmJiZmNiMmRi DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL1VzYk5ldHdvcmtQa2cvVXNiTmV0d29ya1Br Zy5kc2MNCj4gPiBAQCAtMCwwICsxLDUwIEBADQo+ID4gKyMjIEBmaWxlDQo+ID4gKyMgR2xvYmFs IERTQyBkZWZpbml0aW9ucyB0byBiZSBpbmNsdWRlZCBpbnRvIHByb2plY3QgRFNDIGZpbGUuDQo+ ID4gKyMNCj4gPiArIyBDb3B5cmlnaHQgKGMpIDE5ODUgLSAyMDIzLCBBTUkuIEFsbCByaWdodHMg cmVzZXJ2ZWQuPEJSPg0KPiA+ICsjIFN1YmplY3QgdG8gQU1JIGxpY2Vuc2luZyBhZ3JlZW1lbnQu DQo+ID4gKyMjDQo+ID4gKw0KPiA+ICtbRGVmaW5lc10NCj4gPiArICBQTEFURk9STV9OQU1FICAg ICAgICAgICAgICAgICAgPSBOZXR3b3JrUGtnDQo+ID4gKyAgUExBVEZPUk1fR1VJRCAgICAgICAg ICAgICAgICAgID0gQzU5OTVDMUMtMUU1Qy00M0Y5LTgyNkQtMjdFNDNBNzI0M0I4DQo+ID4gKyAg UExBVEZPUk1fVkVSU0lPTiAgICAgICAgICAgICAgID0gMQ0KPiA+ICsgIERTQ19TUEVDSUZJQ0FU SU9OICAgICAgICAgICAgICA9IDB4MDAwMTAwMDUNCj4gPiArICBPVVRQVVRfRElSRUNUT1JZICAg ICAgICAgICAgICAgPSBCdWlsZC9Vc2JOZXR3b3JrUGtnDQo+ID4gKyAgU1VQUE9SVEVEX0FSQ0hJ VEVDVFVSRVMgICAgICAgID0NCj4gSUEzMnxYNjR8RUJDfEFSTXxBQVJDSDY0fFJJU0NWNjR8TE9P TkdBUkNINjQNCj4gPiArICBCVUlMRF9UQVJHRVRTICAgICAgICAgICAgICAgICAgPSBERUJVR3xS RUxFQVNFfE5PT1BUDQo+ID4gKyAgU0tVSURfSURFTlRJRklFUiAgICAgICAgICAgICAgID0gREVG QVVMVA0KPiA+ICsNCj4gPiArW1BjZHNGZWF0dXJlRmxhZ10NCj4gPiArICBnVXNiTmV0d29ya1Br Z1Rva2VuU3BhY2VHdWlkLlVzYkNkY0VjbVN1cHBvcnR8VFJVRQ0KPiA+ICsgIGdVc2JOZXR3b3Jr UGtnVG9rZW5TcGFjZUd1aWQuVXNiQ2RjTmNtU3VwcG9ydHxUUlVFDQo+ID4gKyAgZ1VzYk5ldHdv cmtQa2dUb2tlblNwYWNlR3VpZC5Vc2JSbmRpc1N1cHBvcnR8VFJVRQ0KPiA+ICsNCj4gPiArIWlu Y2x1ZGUgTWRlUGtnL01kZUxpYnMuZHNjLmluYw0KPiA+ICsNCj4gPiArW0xpYnJhcnlDbGFzc2Vz XQ0KPiA+ICsgICMNCj4gPiArICAjIEVudHJ5IFBvaW50IExpYnJhcmllcw0KPiA+ICsgICMNCj4g PiArDQo+IFVlZmlEcml2ZXJFbnRyeVBvaW50fE1kZVBrZy9MaWJyYXJ5L1VlZmlEcml2ZXJFbnRy eVBvaW50L1VlZmlEcml2ZXJFbnRyeQ0KPiBQb2ludC5pbmYNCj4gPiArICAjDQo+ID4gKyAgIyBD b21tb24gTGlicmFyaWVzDQo+ID4gKyAgIw0KPiA+ICsgIEJhc2VMaWJ8TWRlUGtnL0xpYnJhcnkv QmFzZUxpYi9CYXNlTGliLmluZg0KPiA+ICsgIEJhc2VNZW1vcnlMaWJ8TWRlUGtnL0xpYnJhcnkv QmFzZU1lbW9yeUxpYi9CYXNlTWVtb3J5TGliLmluZg0KPiA+ICsgIFVlZmlMaWJ8TWRlUGtnL0xp YnJhcnkvVWVmaUxpYi9VZWZpTGliLmluZg0KPiA+ICsgIFByaW50TGlifE1kZVBrZy9MaWJyYXJ5 L0Jhc2VQcmludExpYi9CYXNlUHJpbnRMaWIuaW5mDQo+ID4gKyAgUGNkTGlifE1kZVBrZy9MaWJy YXJ5L0Jhc2VQY2RMaWJOdWxsL0Jhc2VQY2RMaWJOdWxsLmluZg0KPiA+ICsNCj4gTWVtb3J5QWxs b2NhdGlvbkxpYnxNZGVQa2cvTGlicmFyeS9VZWZpTWVtb3J5QWxsb2NhdGlvbkxpYi9VZWZpTWVt bw0KPiByeUFsbG9jYXRpb25MaWIuaW5mDQo+ID4gKw0KPiBVZWZpQm9vdFNlcnZpY2VzVGFibGVM aWJ8TWRlUGtnL0xpYnJhcnkvVWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliL1VlZmlCbw0KPiBvdFNl cnZpY2VzVGFibGVMaWIuaW5mDQo+ID4gKw0KPiBVZWZpUnVudGltZVNlcnZpY2VzVGFibGVMaWJ8 TWRlUGtnL0xpYnJhcnkvVWVmaVJ1bnRpbWVTZXJ2aWNlc1RhYmxlTGliDQo+IC9VZWZpUnVudGlt ZVNlcnZpY2VzVGFibGVMaWIuaW5mDQo+ID4gKyAgRGVidWdMaWJ8TWRlUGtnL0xpYnJhcnkvQmFz ZURlYnVnTGliTnVsbC9CYXNlRGVidWdMaWJOdWxsLmluZg0KPiA+ICsNCj4gRGVidWdQcmludEVy cm9yTGV2ZWxMaWJ8TWRlUGtnL0xpYnJhcnkvQmFzZURlYnVnUHJpbnRFcnJvckxldmVsTGliL0Jh cw0KPiBlRGVidWdQcmludEVycm9yTGV2ZWxMaWIuaW5mDQo+ID4gKw0KPiBEZXZpY2VQYXRoTGli fE1kZVBrZy9MaWJyYXJ5L1VlZmlEZXZpY2VQYXRoTGliL1VlZmlEZXZpY2VQYXRoTGliLmluZg0K PiA+ICsgIFVlZmlVc2JMaWJ8TWRlUGtnL0xpYnJhcnkvVWVmaVVzYkxpYi9VZWZpVXNiTGliLmlu Zg0KPiA+ICsNCj4gPiArW0NvbXBvbmVudHNdDQo+ID4gKyFpbmNsdWRlIFVzYk5ldHdvcmtQa2cv VXNiTmV0d29ya1BrZy5kc2MuaW5jDQo+ID4gKw0KPiA+ICtbQnVpbGRPcHRpb25zXQ0KPiA+ICsg ICpfKl8qX0NDX0ZMQUdTID0gLUQgRElTQUJMRV9ORVdfREVQUkVDQVRFRF9JTlRFUkZBQ0VTDQo+ ID4gZGlmZiAtLWdpdCBhL1VzYk5ldHdvcmtQa2cvVXNiTmV0d29ya1BrZy5kc2MuaW5jDQo+IGIv VXNiTmV0d29ya1BrZy9Vc2JOZXR3b3JrUGtnLmRzYy5pbmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEw MDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAuLmY1ZGYxMWFjZTYNCj4gPiAtLS0gL2Rldi9udWxs DQo+ID4gKysrIGIvVXNiTmV0d29ya1BrZy9Vc2JOZXR3b3JrUGtnLmRzYy5pbmMNCj4gPiBAQCAt MCwwICsxLDI3IEBADQo+ID4gKyMjIEBmaWxlDQo+ID4gKyMgR2xvYmFsIERTQyBkZWZpbml0aW9u cyB0byBiZSBpbmNsdWRlZCBpbnRvIHByb2plY3QgRFNDIGZpbGUuDQo+ID4gKyMNCj4gPiArIyBD b3B5cmlnaHQgKGMpIDIwMjMsIEFtZXJpY2FuIE1lZ2F0cmVuZHMgSW50ZXJuYXRpb25hbCBMTEMu IEFsbCByaWdodHMNCj4gcmVzZXJ2ZWQuPEJSPg0KPiA+ICsjIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gKyMjDQo+ID4gKw0KPiA+ICtbRGVmaW5lc10N Cj4gPiArDQo+ID4gKyFpZm5kZWYgUExBVEZPUk1YNjRfRU5BQkxFDQo+ID4gKyAgIw0KPiA+ICsg ICMgUExBVEZPUk1YNjRfRU5BQkxFIGlzIHNldCB0byBUUlVFIHdoZW4gUEVJIGlzIElBMzIgYW5k IERYRSBpcyBYNjQNCj4gcGxhdGZvcm0NCj4gPiArICAjDQo+ID4gKyAgREVGSU5FIFBMQVRGT1JN WDY0X0VOQUJMRSA9IEZBTFNFDQo+ID4gKyFlbmRpZg0KPiA+ICsNCj4gPiArIWluY2x1ZGUgVXNi TmV0d29ya1BrZy9Vc2JOZXR3b3JrUGtnUGNkcy5kc2MuaW5jDQo+ID4gKw0KPiA+ICshaWYgJChQ TEFURk9STVg2NF9FTkFCTEUpID09IFRSVUUNCj4gPiArW0NvbXBvbmVudHMuWDY0XQ0KPiA+ICsh aW5jbHVkZSBVc2JOZXR3b3JrUGtnL1VzYk5ldHdvcmtQa2dDb21wb25lbnRzRHhlLmRzYy5pbmMN Cj4gPiArDQo+ID4gKyFlbHNlDQo+ID4gK1tDb21wb25lbnRzLklBMzIsIENvbXBvbmVudHMuWDY0 LCBDb21wb25lbnRzLkFSTSwNCj4gQ29tcG9uZW50cy5BQVJDSDY0LCBDb21wb25lbnRzLlJJU0NW NjQsIENvbXBvbmVudHMuTE9PTkdBUkNINjRdDQo+ID4gKyFpbmNsdWRlIFVzYk5ldHdvcmtQa2cv VXNiTmV0d29ya1BrZ0NvbXBvbmVudHNEeGUuZHNjLmluYw0KPiA+ICsNCj4gPiArIWVuZGlmDQo+ ID4gZGlmZiAtLWdpdCBhL1VzYk5ldHdvcmtQa2cvVXNiTmV0d29ya1BrZ0NvbXBvbmVudHNEeGUu ZHNjLmluYw0KPiBiL1VzYk5ldHdvcmtQa2cvVXNiTmV0d29ya1BrZ0NvbXBvbmVudHNEeGUuZHNj LmluYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMC4uNTQ0 ZGY4NDA0Yw0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9Vc2JOZXR3b3JrUGtnL1VzYk5l dHdvcmtQa2dDb21wb25lbnRzRHhlLmRzYy5pbmMNCj4gPiBAQCAtMCwwICsxLDIwIEBADQo+ID4g KyMjIEBmaWxlDQo+ID4gKyMgTGlzdCBvZiBDb3JlIENvbXBvbmVudHMuDQo+ID4gKyMNCj4gPiAr IyBDb3B5cmlnaHQgKGMpIDIwMjMsIEFtZXJpY2FuIE1lZ2F0cmVuZHMgSW50ZXJuYXRpb25hbCBM TEMuIEFsbCByaWdodHMNCj4gcmVzZXJ2ZWQuPEJSPg0KPiA+ICsjIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gKyMjDQo+ID4gKw0KPiA+ICsgIFVzYk5l dHdvcmtQa2cvTmV0d29ya0NvbW1vbi9OZXR3b3JrQ29tbW9uLmluZg0KPiA+ICsNCj4gPiArIWlm IGdVc2JOZXR3b3JrUGtnVG9rZW5TcGFjZUd1aWQuVXNiQ2RjRWNtU3VwcG9ydA0KPiA+ICsgIFVz Yk5ldHdvcmtQa2cvVXNiQ2RjRWNtL1VzYkNkY0VjbS5pbmYNCj4gPiArIWVuZGlmDQo+ID4gKw0K PiA+ICshaWYgZ1VzYk5ldHdvcmtQa2dUb2tlblNwYWNlR3VpZC5Vc2JDZGNOY21TdXBwb3J0DQo+ ID4gKyAgVXNiTmV0d29ya1BrZy9Vc2JDZGNOY20vVXNiQ2RjTmNtLmluZg0KPiA+ICshZW5kaWYN Cj4gPiArDQo+ID4gKyFpZiBnVXNiTmV0d29ya1BrZ1Rva2VuU3BhY2VHdWlkLlVzYlJuZGlzU3Vw cG9ydA0KPiA+ICsgIFVzYk5ldHdvcmtQa2cvVXNiUm5kaXMvVXNiUm5kaXMuaW5mDQo+ID4gKyFl bmRpZg0KPiA+IGRpZmYgLS1naXQgYS9Vc2JOZXR3b3JrUGtnL1VzYk5ldHdvcmtQa2dDb21wb25l bnRzRHhlLmZkZi5pbmMNCj4gYi9Vc2JOZXR3b3JrUGtnL1VzYk5ldHdvcmtQa2dDb21wb25lbnRz RHhlLmZkZi5pbmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAw MDAuLjEwNjE2ZDk3ZWQNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvVXNiTmV0d29ya1Br Zy9Vc2JOZXR3b3JrUGtnQ29tcG9uZW50c0R4ZS5mZGYuaW5jDQo+ID4gQEAgLTAsMCArMSwyMCBA QA0KPiA+ICsjIyBAZmlsZQ0KPiA+ICsjIExpc3Qgb2YgQ29yZSBDb21wb25lbnRzLg0KPiA+ICsj DQo+ID4gKyMgQ29weXJpZ2h0IChjKSAyMDIzLCBBbWVyaWNhbiBNZWdhdHJlbmRzIEludGVybmF0 aW9uYWwgTExDLiBBbGwgcmlnaHRzDQo+IHJlc2VydmVkLjxCUj4NCj4gPiArIyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ICsjIw0KPiA+ICsNCj4gPiAr ICBJTkYgVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL05ldHdvcmtDb21tb24uaW5mDQo+ID4g Kw0KPiA+ICshaWYgZ1VzYk5ldHdvcmtQa2dUb2tlblNwYWNlR3VpZC5Vc2JDZGNFY21TdXBwb3J0 DQo+ID4gKyAgSU5GIFVzYk5ldHdvcmtQa2cvVXNiQ2RjRWNtL1VzYkNkY0VjbS5pbmYNCj4gPiAr IWVuZGlmDQo+ID4gKw0KPiA+ICshaWYgZ1VzYk5ldHdvcmtQa2dUb2tlblNwYWNlR3VpZC5Vc2JD ZGNOY21TdXBwb3J0DQo+ID4gKyAgSU5GIFVzYk5ldHdvcmtQa2cvVXNiQ2RjTmNtL1VzYkNkY05j bS5pbmYNCj4gPiArIWVuZGlmDQo+ID4gKw0KPiA+ICshaWYgZ1VzYk5ldHdvcmtQa2dUb2tlblNw YWNlR3VpZC5Vc2JSbmRpc1N1cHBvcnQNCj4gPiArICBJTkYgVXNiTmV0d29ya1BrZy9Vc2JSbmRp cy9Vc2JSbmRpcy5pbmYNCj4gPiArIWVuZGlmDQo+ID4gZGlmZiAtLWdpdCBhL1VzYk5ldHdvcmtQ a2cvVXNiTmV0d29ya1BrZ1BjZHMuZHNjLmluYw0KPiBiL1VzYk5ldHdvcmtQa2cvVXNiTmV0d29y a1BrZ1BjZHMuZHNjLmluYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAw MDAwMDAwMC4uNTEzODJkMThkMw0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9Vc2JOZXR3 b3JrUGtnL1VzYk5ldHdvcmtQa2dQY2RzLmRzYy5pbmMNCj4gPiBAQCAtMCwwICsxLDE0IEBADQo+ ID4gKyMjIEBmaWxlDQo+ID4gKyMgR2xvYmFsIHN3aXRjaGVzIGVuYWJsZS9kaXNhYmxlIHByb2pl Y3QgZmVhdHVyZXMuDQo+ID4gKyMNCj4gPiArIyBDb3B5cmlnaHQgKGMpIDIwMjMsIEFtZXJpY2Fu IE1lZ2F0cmVuZHMgSW50ZXJuYXRpb25hbCBMTEMuIEFsbCByaWdodHMNCj4gcmVzZXJ2ZWQuPEJS Pg0KPiA+ICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ ID4gKyMjDQo+ID4gKw0KPiA+ICtbUGFja2FnZXNdDQo+ID4gKyAgVXNiTmV0d29ya1BrZy9Vc2JO ZXR3b3JrUGtnLmRlYw0KPiA+ICsNCj4gPiArW1BjZHNGZWF0dXJlRmxhZ10NCj4gPiArICBnVXNi TmV0d29ya1BrZ1Rva2VuU3BhY2VHdWlkLlVzYkNkY0VjbVN1cHBvcnR8RkFMU0UNCj4gPiArICBn VXNiTmV0d29ya1BrZ1Rva2VuU3BhY2VHdWlkLlVzYkNkY05jbVN1cHBvcnR8RkFMU0UNCj4gPiAr ICBnVXNiTmV0d29ya1BrZ1Rva2VuU3BhY2VHdWlkLlVzYlJuZGlzU3VwcG9ydHxUUlVFDQo+ID4g ZGlmZiAtLWdpdCBhL1VzYk5ldHdvcmtQa2cvVXNiUm5kaXMvQ29tcG9uZW50TmFtZS5jDQo+IGIv VXNiTmV0d29ya1BrZy9Vc2JSbmRpcy9Db21wb25lbnROYW1lLmMNCj4gPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAuLmI5YmExNzBjMTMNCj4gPiAtLS0gL2Rldi9u dWxsDQo+ID4gKysrIGIvVXNiTmV0d29ya1BrZy9Vc2JSbmRpcy9Db21wb25lbnROYW1lLmMNCj4g PiBAQCAtMCwwICsxLDE3MiBAQA0KPiA+ICsvKiogQGZpbGUNCj4gPiArICBUaGlzIGZpbGUgY29u dGFpbnMgY29kZSBmb3IgVVNCIFJORElTIERyaXZlciBDb21wb25lbnQNCj4gPiArICBOYW1lIGRl ZmluaXRpb25zDQo+ID4gKw0KPiA+ICsgIENvcHlyaWdodCAoYykgMjAyMywgQW1lcmljYW4gTWVn YXRyZW5kcyBJbnRlcm5hdGlvbmFsIExMQy4gQWxsIHJpZ2h0cw0KPiByZXNlcnZlZC48QlI+DQo+ ID4gKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gPiAr KiovDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSAiVXNiUm5kaXMuaCINCj4gPiArDQo+ID4gK0dMT0JB TF9SRU1PVkVfSUZfVU5SRUZFUkVOQ0VEIEVGSV9VTklDT0RFX1NUUklOR19UQUJMRQ0KPiBnVXNi Um5kaXNEcml2ZXJOYW1lVGFibGVbXSA9IHsNCj4gPiArICB7DQo+ID4gKyAgICAiZW5nO2VuIiwN Cj4gPiArICAgIEwiVVNCIFJORElTIERyaXZlciINCj4gPiArICB9LA0KPiA+ICsgIHsNCj4gPiAr ICAgIE5VTEwsDQo+ID4gKyAgICBOVUxMDQo+ID4gKyAgfQ0KPiA+ICt9Ow0KPiA+ICsNCj4gPiAr RUZJX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArVXNiUm5kaXNDb21wb25lbnROYW1lR2V0RHJp dmVyTmFtZSAoDQo+ID4gKyAgSU4gIEVGSV9DT01QT05FTlRfTkFNRV9QUk9UT0NPTCAgKlRoaXMs DQo+ID4gKyAgSU4gIENIQVI4ICAgICAgICAgICAgICAgICAgICAgICAgKkxhbmd1YWdlLA0KPiA+ ICsgIE9VVCBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICoqRHJpdmVyTmFtZQ0KPiA+ICsg ICk7DQo+ID4gKw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtVc2JSbmRpc0Nv bXBvbmVudE5hbWVHZXRDb250cm9sbGVyTmFtZSAoDQo+ID4gKyAgSU4gRUZJX0NPTVBPTkVOVF9O QU1FX1BST1RPQ09MICAqVGhpcywNCj4gPiArICBJTiBFRklfSEFORExFICAgICAgICAgICAgICAg ICAgIENvbnRyb2xsZXIsDQo+ID4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBD aGlsZEhhbmRsZSAgICAgICAgT1BUSU9OQUwsDQo+ID4gKyAgSU4gQ0hBUjggICAgICAgICAgICAg ICAgICAgICAgICAqTGFuZ3VhZ2UsDQo+ID4gKyAgT1VUIENIQVIxNiAgICAgICAgICAgICAgICAg ICAgICAqKkNvbnRyb2xsZXJOYW1lDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gK0dMT0JBTF9SRU1P VkVfSUZfVU5SRUZFUkVOQ0VEDQo+IEVGSV9DT01QT05FTlRfTkFNRV9QUk9UT0NPTCAgZ1VzYlJu ZGlzQ29tcG9uZW50TmFtZSA9IHsNCj4gPiArICBVc2JSbmRpc0NvbXBvbmVudE5hbWVHZXREcml2 ZXJOYW1lLA0KPiA+ICsgIFVzYlJuZGlzQ29tcG9uZW50TmFtZUdldENvbnRyb2xsZXJOYW1lLA0K PiA+ICsgICJlbmciDQo+ID4gK307DQo+ID4gKw0KPiA+ICtHTE9CQUxfUkVNT1ZFX0lGX1VOUkVG RVJFTkNFRA0KPiBFRklfQ09NUE9ORU5UX05BTUUyX1BST1RPQ09MICBnVXNiUm5kaXNDb21wb25l bnROYW1lMiA9IHsNCj4gPiArDQo+IChFRklfQ09NUE9ORU5UX05BTUUyX0dFVF9EUklWRVJfTkFN RSlVc2JSbmRpc0NvbXBvbmVudE5hbQ0KPiBlR2V0RHJpdmVyTmFtZSwNCj4gPiArDQo+IChFRklf Q09NUE9ORU5UX05BTUUyX0dFVF9DT05UUk9MTEVSX05BTUUpVXNiUm5kaXNDb21wb25lbnQNCj4g TmFtZUdldENvbnRyb2xsZXJOYW1lLA0KPiA+ICsgICJlbiINCj4gPiArfTsNCj4gPiArDQo+ID4g Ky8qKg0KPiA+ICsgIFJldHJpZXZlcyBhIFVuaWNvZGUgc3RyaW5nIHRoYXQgaXMgdGhlIHVzZXIg cmVhZGFibGUgbmFtZSBvZiB0aGUgZHJpdmVyLg0KPiA+ICsNCj4gPiArICBUaGlzIGZ1bmN0aW9u IHJldHJpZXZlcyB0aGUgdXNlciByZWFkYWJsZSBuYW1lIG9mIGEgZHJpdmVyIGluIHRoZSBmb3Jt IG9mDQo+IGENCj4gPiArICBVbmljb2RlIHN0cmluZy4gSWYgdGhlIGRyaXZlciBzcGVjaWZpZWQg YnkgVGhpcyBoYXMgYSB1c2VyIHJlYWRhYmxlIG5hbWUgaW4NCj4gPiArICB0aGUgbGFuZ3VhZ2Ug c3BlY2lmaWVkIGJ5IExhbmd1YWdlLCB0aGVuIGEgcG9pbnRlciB0byB0aGUgZHJpdmVyIG5hbWUg aXMNCj4gPiArICByZXR1cm5lZCBpbiBEcml2ZXJOYW1lLCBhbmQgRUZJX1NVQ0NFU1MgaXMgcmV0 dXJuZWQuIElmIHRoZSBkcml2ZXINCj4gc3BlY2lmaWVkDQo+ID4gKyAgYnkgVGhpcyBkb2VzIG5v dCBzdXBwb3J0IHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2UsDQo+ID4gKyAgdGhl biBFRklfVU5TVVBQT1JURUQgaXMgcmV0dXJuZWQuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0g IFRoaXMgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUNCj4gRUZJX0NPTVBPTkVOVF9OQU1F Ml9QUk9UT0NPTCBvcg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9D T01QT05FTlRfTkFNRV9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gPiArICBAcGFyYW1baW5dICBMYW5n dWFnZSAgICAgICAgICBBIHBvaW50ZXIgdG8gYSBOdWxsLXRlcm1pbmF0ZWQgQVNDSUkgc3RyaW5n DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkgaW5kaWNhdGluZyB0 aGUgbGFuZ3VhZ2UuIFRoaXMgaXMgdGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbGFuZ3VhZ2Ugb2YgdGhlIGRyaXZlciBuYW1lIHRoYXQgdGhlIGNhbGxlciBpcw0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RpbmcsIGFuZCBpdCBtdXN0 IG1hdGNoIG9uZSBvZiB0aGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs YW5ndWFnZXMgc3BlY2lmaWVkIGluIFN1cHBvcnRlZExhbmd1YWdlcy4gVGhlDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIGxhbmd1YWdlcyBzdXBwb3J0ZWQg YnkgYSBkcml2ZXIgaXMgdXANCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 byB0aGUgZHJpdmVyIHdyaXRlci4gTGFuZ3VhZ2UgaXMgc3BlY2lmaWVkDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW4gUkZDIDQ2NDYgb3IgSVNPIDYzOS0yIGxhbmd1YWdl IGNvZGUgZm9ybWF0Lg0KPiA+ICsgIEBwYXJhbVtvdXRdIERyaXZlck5hbWUgICAgICAgIEEgcG9p bnRlciB0byB0aGUgVW5pY29kZSBzdHJpbmcgdG8gcmV0dXJuLg0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFRoaXMgVW5pY29kZSBzdHJpbmcgaXMgdGhlIG5hbWUgb2YgdGhl DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVyIHNwZWNpZmllZCBi eSBUaGlzIGluIHRoZSBsYW5ndWFnZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNwZWNpZmllZCBieSBMYW5ndWFnZS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgICAgICAgVGhlIFVuaWNvZGUgc3RyaW5nIGZvciB0aGUgRHJpdmVyIHNwZWNpZmll ZCBieQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgYW5kIHRoZSBs YW5ndWFnZSBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2Ugd2FzDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuZWQgaW4gRHJpdmVyTmFtZS4NCj4gPiArICBAcmV0dmFsIEVG SV9JTlZBTElEX1BBUkFNRVRFUiBMYW5ndWFnZSBpcyBOVUxMLg0KPiA+ICsgIEByZXR2YWwgRUZJ X0lOVkFMSURfUEFSQU1FVEVSIERyaXZlck5hbWUgaXMgTlVMTC4NCj4gPiArICBAcmV0dmFsIEVG SV9VTlNVUFBPUlRFRCAgICAgICBUaGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGRvZXMgbm90 DQo+IHN1cHBvcnQNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGFu Z3VhZ2Ugc3BlY2lmaWVkIGJ5IExhbmd1YWdlLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9T VEFUVVMNCj4gPiArRUZJQVBJDQo+ID4gK1VzYlJuZGlzQ29tcG9uZW50TmFtZUdldERyaXZlck5h bWUgKA0KPiA+ICsgIElOICBFRklfQ09NUE9ORU5UX05BTUVfUFJPVE9DT0wgICpUaGlzLA0KPiA+ ICsgIElOICBDSEFSOCAgICAgICAgICAgICAgICAgICAgICAgICpMYW5ndWFnZSwNCj4gPiArICBP VVQgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAqKkRyaXZlck5hbWUNCj4gPiArICApDQo+ ID4gK3sNCj4gPiArICByZXR1cm4gTG9va3VwVW5pY29kZVN0cmluZzIgKA0KPiA+ICsgICAgICAg ICAgIExhbmd1YWdlLA0KPiA+ICsgICAgICAgICAgIFRoaXMtPlN1cHBvcnRlZExhbmd1YWdlcywN Cj4gPiArICAgICAgICAgICBnVXNiUm5kaXNEcml2ZXJOYW1lVGFibGUsDQo+ID4gKyAgICAgICAg ICAgRHJpdmVyTmFtZSwNCj4gPiArICAgICAgICAgICAoQk9PTEVBTikoVGhpcyA9PSAmZ1VzYlJu ZGlzQ29tcG9uZW50TmFtZSkNCj4gPiArICAgICAgICAgICApOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICsvKioNCj4gPiArICBSZXRyaWV2ZXMgYSBVbmljb2RlIHN0cmluZyB0aGF0IGlzIHRoZSB1c2Vy IHJlYWRhYmxlIG5hbWUgb2YgdGhlDQo+IGNvbnRyb2xsZXINCj4gPiArICB0aGF0IGlzIGJlaW5n IG1hbmFnZWQgYnkgYSBkcml2ZXIuDQo+ID4gKw0KPiA+ICsgIFRoaXMgZnVuY3Rpb24gcmV0cmll dmVzIHRoZSB1c2VyIHJlYWRhYmxlIG5hbWUgb2YgdGhlIGNvbnRyb2xsZXIgc3BlY2lmaWVkDQo+ IGJ5DQo+ID4gKyAgQ29udHJvbGxlckhhbmRsZSBhbmQgQ2hpbGRIYW5kbGUgaW4gdGhlIGZvcm0g b2YgYSBVbmljb2RlIHN0cmluZy4gSWYgdGhlDQo+ID4gKyAgZHJpdmVyIHNwZWNpZmllZCBieSBU aGlzIGhhcyBhIHVzZXIgcmVhZGFibGUgbmFtZSBpbiB0aGUgbGFuZ3VhZ2UNCj4gc3BlY2lmaWVk IGJ5DQo+ID4gKyAgTGFuZ3VhZ2UsIHRoZW4gYSBwb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIG5h bWUgaXMgcmV0dXJuZWQgaW4NCj4gQ29udHJvbGxlck5hbWUsDQo+ID4gKyAgYW5kIEVGSV9TVUND RVNTIGlzIHJldHVybmVkLiAgSWYgdGhlIGRyaXZlciBzcGVjaWZpZWQgYnkgVGhpcyBpcyBub3QN Cj4gY3VycmVudGx5DQo+ID4gKyAgbWFuYWdpbmcgdGhlIGNvbnRyb2xsZXIgc3BlY2lmaWVkIGJ5 IENvbnRyb2xsZXJIYW5kbGUgYW5kIENoaWxkSGFuZGxlLA0KPiA+ICsgIHRoZW4gRUZJX1VOU1VQ UE9SVEVEIGlzIHJldHVybmVkLiAgSWYgdGhlIGRyaXZlciBzcGVjaWZpZWQgYnkgVGhpcyBkb2Vz DQo+IG5vdA0KPiA+ICsgIHN1cHBvcnQgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFn ZSwgdGhlbiBFRklfVU5TVVBQT1JURUQgaXMNCj4gcmV0dXJuZWQuDQo+ID4gKw0KPiA+ICsgIEBw YXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUNCj4gRUZJX0NPTVBP TkVOVF9OQU1FMl9QUk9UT0NPTCBvcg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEVGSV9DT01QT05FTlRfTkFNRV9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gPiArICBAcGFyYW1b aW5dICBDb250cm9sbGVyICAgICAgICBUaGUgaGFuZGxlIG9mIGEgY29udHJvbGxlciB0aGF0IHRo ZSBkcml2ZXINCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQg YnkgVGhpcyBpcyBtYW5hZ2luZy4gIFRoaXMgaGFuZGxlDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3BlY2lmaWVzIHRoZSBjb250cm9sbGVyIHdob3NlIG5hbWUgaXMgdG8g YmUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5lZC4NCj4gPiAr ICBAcGFyYW1baW5dICBDaGlsZEhhbmRsZSAgICAgICBUaGUgaGFuZGxlIG9mIHRoZSBjaGlsZCBj b250cm9sbGVyIHRvIHJldHJpZXZlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdGhlIG5hbWUgb2YuICBUaGlzIGlzIGFuIG9wdGlvbmFsIHBhcmFtZXRlciB0aGF0DQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5IGJlIE5VTEwuICBJdCB3aWxsIGJl IE5VTEwgZm9yIGRldmljZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRy aXZlcnMuICBJdCB3aWxsIGFsc28gYmUgTlVMTCBmb3IgYSBidXMgZHJpdmVycw0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgd2lzaCB0byByZXRyaWV2ZSB0aGUgbmFt ZSBvZiB0aGUgYnVzDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJv bGxlci4gIEl0IHdpbGwgbm90IGJlIE5VTEwgZm9yIGEgYnVzDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZHJpdmVyIHRoYXQgd2lzaGVzIHRvIHJldHJpZXZlIHRoZSBuYW1l IG9mIGENCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZCBjb250cm9s bGVyLg0KPiA+ICsgIEBwYXJhbVtpbl0gIExhbmd1YWdlICAgICAgICAgIEEgcG9pbnRlciB0byBh IE51bGwtdGVybWluYXRlZCBBU0NJSSBzdHJpbmcNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBhcnJheSBpbmRpY2F0aW5nIHRoZSBsYW5ndWFnZS4gIFRoaXMgaXMgdGhlDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2Ugb2YgdGhlIGRyaXZl ciBuYW1lIHRoYXQgdGhlIGNhbGxlciBpcw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJlcXVlc3RpbmcsIGFuZCBpdCBtdXN0IG1hdGNoIG9uZSBvZiB0aGUNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZXMgc3BlY2lmaWVkIGluIFN1cHBv cnRlZExhbmd1YWdlcy4gVGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bnVtYmVyIG9mIGxhbmd1YWdlcyBzdXBwb3J0ZWQgYnkgYSBkcml2ZXIgaXMgdXANCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgZHJpdmVyIHdyaXRlci4gTGFuZ3Vh Z2UgaXMgc3BlY2lmaWVkIGluDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UkZDIDQ2NDYgb3IgSVNPIDYzOS0yIGxhbmd1YWdlIGNvZGUgZm9ybWF0Lg0KPiA+ICsgIEBwYXJh bVtvdXRdIENvbnRyb2xsZXJOYW1lICAgIEEgcG9pbnRlciB0byB0aGUgVW5pY29kZSBzdHJpbmcg dG8gcmV0dXJuLg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgVW5p Y29kZSBzdHJpbmcgaXMgdGhlIG5hbWUgb2YgdGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29udHJvbGxlciBzcGVjaWZpZWQgYnkgQ29udHJvbGxlckhhbmRsZSBhbmQN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGlsZEhhbmRsZSBpbiB0aGUg bGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTGFuZ3VhZ2UgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiB0aGUgZHJpdmVyDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGJ5IFRoaXMuDQo+ID4gKw0K PiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBVbmljb2RlIHN0cmluZyBm b3IgdGhlIHVzZXIgcmVhZGFibGUNCj4gbmFtZSBpbg0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2UgZm9yIHRoZQ0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlciBzcGVjaWZpZWQgYnkg VGhpcyB3YXMgcmV0dXJuZWQgaW4NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBEcml2ZXJOYW1lLg0KPiA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIENvbnRy b2xsZXJIYW5kbGUgaXMgbm90IGEgdmFsaWQNCj4gRUZJX0hBTkRMRS4NCj4gPiArICBAcmV0dmFs IEVGSV9JTlZBTElEX1BBUkFNRVRFUiBDaGlsZEhhbmRsZSBpcyBub3QgTlVMTCBhbmQgaXQgaXMg bm90IGENCj4gdmFsaWQNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFRklf SEFORExFLg0KPiA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIExhbmd1YWdlIGlz IE5VTEwuDQo+ID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgQ29udHJvbGxlck5h bWUgaXMgTlVMTC4NCj4gPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBUaGUgZHJp dmVyIHNwZWNpZmllZCBieSBUaGlzIGlzIG5vdA0KPiBjdXJyZW50bHkNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBtYW5hZ2luZyB0aGUgY29udHJvbGxlciBzcGVjaWZpZWQg YnkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxl IGFuZCBDaGlsZEhhbmRsZS4NCj4gPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBU aGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGRvZXMgbm90DQo+IHN1cHBvcnQNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5IExh bmd1YWdlLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ ID4gK1VzYlJuZGlzQ29tcG9uZW50TmFtZUdldENvbnRyb2xsZXJOYW1lICgNCj4gPiArICBJTiBF RklfQ09NUE9ORU5UX05BTUVfUFJPVE9DT0wgICpUaGlzLA0KPiA+ICsgIElOIEVGSV9IQU5ETEUg ICAgICAgICAgICAgICAgICAgQ29udHJvbGxlciwNCj4gPiArICBJTiBFRklfSEFORExFICAgICAg ICAgICAgICAgICAgIENoaWxkSGFuZGxlICAgICAgICBPUFRJT05BTCwNCj4gPiArICBJTiBDSEFS OCAgICAgICAgICAgICAgICAgICAgICAgICpMYW5ndWFnZSwNCj4gPiArICBPVVQgQ0hBUjE2ICAg ICAgICAgICAgICAgICAgICAgICoqQ29udHJvbGxlck5hbWUNCj4gPiArICApDQo+ID4gK3sNCj4g PiArICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiA+ICt9DQo+ID4gZGlmZiAtLWdpdCBhL1Vz Yk5ldHdvcmtQa2cvVXNiUm5kaXMvVXNiUm5kaXMuYw0KPiBiL1VzYk5ldHdvcmtQa2cvVXNiUm5k aXMvVXNiUm5kaXMuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAw MDAwMC4uOTI4MzA3NzFlNA0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9Vc2JOZXR3b3Jr UGtnL1VzYlJuZGlzL1VzYlJuZGlzLmMNCj4gPiBAQCAtMCwwICsxLDg4NiBAQA0KPiA+ICsvKiog QGZpbGUNCj4gPiArICBUaGlzIGZpbGUgY29udGFpbnMgY29kZSBmb3IgVVNCIFJlbW90ZSBOZXR3 b3JrIERyaXZlcg0KPiA+ICsgIEludGVyZmFjZSBTcGVjLiBEcml2ZXIgQmluZGluZw0KPiA+ICsN Cj4gPiArICBDb3B5cmlnaHQgKGMpIDIwMjMsIEFtZXJpY2FuIE1lZ2F0cmVuZHMgSW50ZXJuYXRp b25hbCBMTEMuIEFsbCByaWdodHMNCj4gcmVzZXJ2ZWQuPEJSPg0KPiA+ICsgIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gKyoqLw0KPiA+ICsNCj4gPiAr I2luY2x1ZGUgIlVzYlJuZGlzLmgiDQo+ID4gKw0KPiA+ICtFRklfRFJJVkVSX0JJTkRJTkdfUFJP VE9DT0wgIGdVc2JSbmRpc0RyaXZlckJpbmRpbmcgPSB7DQo+ID4gKyAgVXNiUm5kaXNEcml2ZXJT dXBwb3J0ZWQsDQo+ID4gKyAgVXNiUm5kaXNEcml2ZXJTdGFydCwNCj4gPiArICBVc2JSbmRpc0Ry aXZlclN0b3AsDQo+ID4gKyAgVVNCX1JORElTX0RSSVZFUl9WRVJTSU9OLA0KPiA+ICsgIE5VTEws DQo+ID4gKyAgTlVMTA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgQ2hlY2sgaWYg dGhpcyBpbnRlcmZhY2UgaXMgVVNCIFJuZGlzIFN1YlR5cGUNCj4gPiArDQo+ID4gKyAgQHBhcmFt W2luXSAgVXNiSW8gIEEgcG9pbnRlciB0byB0aGUgRUZJX1VTQl9JT19QUk9UT0NPTCBpbnN0YW5j ZS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBUUlVFICAgVVNCIFJuZGlzIFN1YlR5cGUuDQo+ID4g KyAgQHJldHZhbCBGQUxTRSAgTm90IFVTQiBSbmRpcyBTdWJUeXBlLg0KPiA+ICsNCj4gPiArKiov DQo+ID4gK0JPT0xFQU4NCj4gPiArSXNTdXBwb3J0ZWREZXZpY2UgKA0KPiA+ICsgIElOIEVGSV9V U0JfSU9fUFJPVE9DT0wgICpVc2JJbw0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEVGSV9TVEFU VVMgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gPiArICBFRklfVVNCX0lOVEVSRkFDRV9E RVNDUklQVE9SICBJbnRlcmZhY2VEZXNjcmlwdG9yOw0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBV c2JJby0+VXNiR2V0SW50ZXJmYWNlRGVzY3JpcHRvciAoVXNiSW8sDQo+ICZJbnRlcmZhY2VEZXNj cmlwdG9yKTsNCj4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICByZXR1 cm4gRkFMU0U7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAvLyBDaGVjayBzcGVjaWZpYyBkZXZp Y2UvUk5ESVMgYW5kIENEQy1EQVRBDQo+ID4gKyAgaWYgKCgoSW50ZXJmYWNlRGVzY3JpcHRvci5J bnRlcmZhY2VDbGFzcyA9PSAweDIpICYmDQo+ID4gKyAgICAgICAoSW50ZXJmYWNlRGVzY3JpcHRv ci5JbnRlcmZhY2VTdWJDbGFzcyA9PSAweDIpICYmDQo+ID4gKyAgICAgICAoSW50ZXJmYWNlRGVz Y3JpcHRvci5JbnRlcmZhY2VQcm90b2NvbCA9PSAweEZGKSkgfHwgXA0KPiA+ICsgICAgICAoKElu dGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlQ2xhc3MgPT0gMHhFRikgJiYNCj4gPiArICAgICAg IChJbnRlcmZhY2VEZXNjcmlwdG9yLkludGVyZmFjZVN1YkNsYXNzID09IDB4NCkgJiYNCj4gPiAr ICAgICAgIChJbnRlcmZhY2VEZXNjcmlwdG9yLkludGVyZmFjZVByb3RvY29sID09IDB4MSkpIHx8 IFwNCj4gPiArICAgICAgKChJbnRlcmZhY2VEZXNjcmlwdG9yLkludGVyZmFjZUNsYXNzID09IDB4 QSkgJiYNCj4gPiArICAgICAgIChJbnRlcmZhY2VEZXNjcmlwdG9yLkludGVyZmFjZVN1YkNsYXNz ID09IDB4MCkgJiYNCj4gPiArICAgICAgIChJbnRlcmZhY2VEZXNjcmlwdG9yLkludGVyZmFjZVBy b3RvY29sID09IDB4MDApKQ0KPiA+ICsgICAgICApDQo+ID4gKyAgew0KPiA+ICsgICAgcmV0dXJu IFRSVUU7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICByZXR1cm4gRkFMU0U7DQo+ID4gK30NCj4g PiArDQo+ID4gKy8qKg0KPiA+ICsgIENoZWNrIGlmIHRoaXMgaW50ZXJmYWNlIGlzIFVTQiBSbmRp cyBTdWJUeXBlIGJ1dCBub3QgQ0RDIERhdGEgaW50ZXJmYWNlDQo+ID4gKw0KPiA+ICsgIEBwYXJh bVtpbl0gIFVzYklvICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9VU0JfSU9fUFJPVE9DT0wgaW5zdGFu Y2UuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgVFJVRSAgIFVTQiBSbmRpcyBTdWJUeXBlLg0KPiA+ ICsgIEByZXR2YWwgRkFMU0UgIE5vdCBVU0IgUm5kaXMgU3ViVHlwZS4NCj4gPiArKiovDQo+ID4g K0JPT0xFQU4NCj4gPiArSXNSbmRpc0ludGVyZmFjZSAoDQo+ID4gKyAgSU4gRUZJX1VTQl9JT19Q Uk9UT0NPTCAgKlVzYklvDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1NUQVRVUyAgICAg ICAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+ICsgIEVGSV9VU0JfSU5URVJGQUNFX0RFU0NSSVBU T1IgIEludGVyZmFjZURlc2NyaXB0b3I7DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IFVzYklvLT5V c2JHZXRJbnRlcmZhY2VEZXNjcmlwdG9yIChVc2JJbywNCj4gJkludGVyZmFjZURlc2NyaXB0b3Ip Ow0KPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgIHJldHVybiBGQUxT RTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIC8vIENoZWNrIGZvciBzcGVjaWZpYyBkZXZpY2Uv Uk5ESVMgYW5kIENEQy1EQVRBDQo+ID4gKyAgaWYgKCgoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRl cmZhY2VDbGFzcyA9PSAweDIpICYmDQo+ID4gKyAgICAgICAoSW50ZXJmYWNlRGVzY3JpcHRvci5J bnRlcmZhY2VTdWJDbGFzcyA9PSAweDIpICYmDQo+ID4gKyAgICAgICAoSW50ZXJmYWNlRGVzY3Jp cHRvci5JbnRlcmZhY2VQcm90b2NvbCA9PSAweEZGKSkgfHwgXA0KPiA+ICsgICAgICAoKEludGVy ZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlQ2xhc3MgPT0gMHhFRikgJiYNCj4gPiArICAgICAgIChJ bnRlcmZhY2VEZXNjcmlwdG9yLkludGVyZmFjZVN1YkNsYXNzID09IDB4NCkgJiYNCj4gPiArICAg ICAgIChJbnRlcmZhY2VEZXNjcmlwdG9yLkludGVyZmFjZVByb3RvY29sID09IDB4MSkpDQo+ID4g KyAgICAgICkNCj4gPiArICB7DQo+ID4gKyAgICByZXR1cm4gVFJVRTsNCj4gPiArICB9DQo+ID4g Kw0KPiA+ICsgIHJldHVybiBGQUxTRTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAg Q2hlY2sgaWYgdGhlIFVTQiBSTkRJUyBhbmQgVVNCIENEQyBEYXRhIGludGVyZmFjZXMgYXJlIGZy b20gdGhlIHNhbWUNCj4gZGV2aWNlLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBVc2JSbmRp c0RhdGFQYXRoICBBIHBvaW50ZXIgdG8gdGhlDQo+IEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCBp bnN0YW5jZS4NCj4gPiArICBAcGFyYW1baW5dICBVc2JDZGNEYXRhUGF0aCAgICBBIHBvaW50ZXIg dG8gdGhlDQo+IEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gPiArDQo+ID4g KyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgSXMgdGhlIHNhbWUgZGV2aWNlLg0KPiA+ ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIElzIG5vdCB0aGUgc2FtZSBkZXZpY2Uu DQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtJc1NhbWVEZXZpY2UgKA0K PiA+ICsgIElOICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICpVc2JSbmRpc0RhdGFQYXRoLA0K PiA+ICsgIElOICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICpVc2JDZGNEYXRhUGF0aA0KPiA+ ICsgICkNCj4gPiArew0KPiA+ICsgIERFQlVHICgoREVCVUdfVkVSQk9TRSwgIklzU2FtZURldmlj ZSBFbnRyeSBcbiIpKTsNCj4gPiArICB3aGlsZSAoMSkgew0KPiA+ICsgICAgaWYgKElzRGV2aWNl UGF0aEVuZCAoTmV4dERldmljZVBhdGhOb2RlIChVc2JSbmRpc0RhdGFQYXRoKSkpIHsNCj4gPiAr ICAgICAgaWYgKCgoVVNCX0RFVklDRV9QQVRIICopVXNiUm5kaXNEYXRhUGF0aCktPlBhcmVudFBv cnROdW1iZXIgPT0NCj4gPiArICAgICAgICAgICgoVVNCX0RFVklDRV9QQVRIICopVXNiQ2RjRGF0 YVBhdGgpLT5QYXJlbnRQb3J0TnVtYmVyKQ0KPiA+ICsgICAgICB7DQo+ID4gKyAgICAgICAgcmV0 dXJuIEVGSV9TVUNDRVNTOw0KPiA+ICsgICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgIHJldHVy biBFRklfVU5TVVBQT1JURUQ7DQo+ID4gKyAgICAgIH0NCj4gPiArICAgIH0gZWxzZSB7DQo+ID4g KyAgICAgIGlmIChDb21wYXJlTWVtIChVc2JDZGNEYXRhUGF0aCwgVXNiUm5kaXNEYXRhUGF0aCwg c2l6ZW9mDQo+IChFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wpKSAhPSAwKSB7DQo+ID4gKyAgICAg ICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gPiArICAgICAgfQ0KPiA+ICsNCj4gPiArICAg ICAgVXNiUm5kaXNEYXRhUGF0aCA9IE5leHREZXZpY2VQYXRoTm9kZSAoVXNiUm5kaXNEYXRhUGF0 aCk7DQo+ID4gKyAgICAgIFVzYkNkY0RhdGFQYXRoICAgPSBOZXh0RGV2aWNlUGF0aE5vZGUgKFVz YkNkY0RhdGFQYXRoKTsNCj4gPiArICAgIH0NCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIERFQlVH ICgoREVCVUdfVkVSQk9TRSwgIklzU2FtZURldmljZSBFeGl0IFxuIikpOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICsvKioNCj4gPiArICBDaGVjayBpZiB0aGUgVVNCIENEQyBEYXRhKFVzYklvKSBpbnN0 YWxsZWQgYW5kIHJldHVybiBVU0IgQ0RDIERhdGENCj4gSGFuZGxlLg0KPiA+ICsNCj4gPiArICBA cGFyYW1baW5dICBVc2JJbyAgQSBwb2ludGVyIHRvIHRoZSBFRklfVVNCX0lPX1BST1RPQ09MIGlu c3RhbmNlLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgICAgIFVTQiBDREMg RGF0YShVc2JJbykgaW5zdGFsbGVkLg0KPiA+ICsgIEByZXR2YWwgRkFMU0UgICAgICAgICAgICAg VVNCIENEQyBEYXRhKFVzYklvKSBkaWQgbm90IGluc3RhbGxlZC4NCj4gPiArDQo+ID4gKyoqLw0K PiA+ICtCT09MRUFODQo+ID4gK0lzVXNiQ2RjRGF0YSAoDQo+ID4gKyAgSU4gRUZJX1VTQl9JT19Q Uk9UT0NPTCAgKlVzYklvDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1NUQVRVUyAgICAg ICAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+ICsgIEVGSV9VU0JfSU5URVJGQUNFX0RFU0NSSVBU T1IgIEludGVyZmFjZURlc2NyaXB0b3I7DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IFVzYklvLT5V c2JHZXRJbnRlcmZhY2VEZXNjcmlwdG9yIChVc2JJbywNCj4gJkludGVyZmFjZURlc2NyaXB0b3Ip Ow0KPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgIHJldHVybiBGQUxT RTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIC8vIENoZWNrIGZvciBDREMtREFUQQ0KPiA+ICsg IGlmICgoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VDbGFzcyA9PSAweEEpICYmDQo+ID4g KyAgICAgIChJbnRlcmZhY2VEZXNjcmlwdG9yLkludGVyZmFjZVN1YkNsYXNzID09IDB4MCkgJiYN Cj4gPiArICAgICAgKEludGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlUHJvdG9jb2wgPT0gMHgw KSkNCj4gPiArICB7DQo+ID4gKyAgICByZXR1cm4gVFJVRTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ ICsgIHJldHVybiBGQUxTRTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgQ2hlY2sg aWYgdGhlIFVTQiBSbmRpcyhVc2JJbykgaW5zdGFsbGVkDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtp bl0gIFVzYklvICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9VU0JfSU9fUFJPVE9DT0wgaW5z dGFuY2UuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICAgICAgVVNCIFJuZGlz KFVzYklvKSBpbnN0YWxsZWQuDQo+ID4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgICAgICBVU0Ig Um5kaXMoVXNiSW8pIGRpZCBub3QgaW5zdGFsbGVkLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0JP T0xFQU4NCj4gPiArSXNVc2JSbmRpcyAoDQo+ID4gKyAgSU4gRUZJX1VTQl9JT19QUk9UT0NPTCAg KlVzYklvDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAg ICAgICAgU3RhdHVzOw0KPiA+ICsgIEVGSV9VU0JfSU5URVJGQUNFX0RFU0NSSVBUT1IgIEludGVy ZmFjZURlc2NyaXB0b3I7DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IFVzYklvLT5Vc2JHZXRJbnRl cmZhY2VEZXNjcmlwdG9yIChVc2JJbywNCj4gJkludGVyZmFjZURlc2NyaXB0b3IpOw0KPiA+ICsg IGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgIHJldHVybiBGQUxTRTsNCj4gPiAr ICB9DQo+ID4gKw0KPiA+ICsgIC8vIENoZWNrIGZvciBSbmRpcw0KPiA+ICsgIGlmICgoSW50ZXJm YWNlRGVzY3JpcHRvci5JbnRlcmZhY2VDbGFzcyA9PSAweDIpICYmDQo+ID4gKyAgICAgIChJbnRl cmZhY2VEZXNjcmlwdG9yLkludGVyZmFjZVN1YkNsYXNzID09IDB4MikgJiYNCj4gPiArICAgICAg KEludGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlUHJvdG9jb2wgPT0gMHhGRikpDQo+ID4gKyAg ew0KPiA+ICsgICAgcmV0dXJuIFRSVUU7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICByZXR1cm4g RkFMU0U7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIENvbnRyb2wgY29tZXMgaGVy ZSB3aGVuIGEgQ0RDIGRldmljZSBpcyBmb3VuZC5DaGVjayBpZiBhIFJORElTDQo+IGludGVyZmFj ZSBpcyBhbHJlYWR5IGZvdW5kIGZvciB0aGlzIGRldmljZSBvciBub3QuDQo+ID4gKyAgRm9yIG9u ZSBkZXZpY2UgdHdvIFVTQklPIHdpbGwgYmUgaW5zdGFsbGVkIGVhY2ggZm9yIENEQyBhbmQgUk5E SVMNCj4gaW50ZXJmYWNlLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBVc2JFdGhQYXRoICAg ICAgICBBIHBvaW50ZXIgdG8gdGhlDQo+IEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCBpbnN0YW5j ZS4NCj4gPiArICBAcGFyYW1bb3V0XSBVc2JSbmRpc0RldmljZSAgICBBIHBvaW50ZXIgdG8gdGhl IFVTQl9STkRJU19ERVZJQ0UNCj4gRGF0YS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgICAgICAgICBUaGUgVVNCX1JORElTX0RFVklDRSBtYXRjaGluZyB0aGlzIENEQw0K PiBEYXRhIGlzIGZvdW5kLg0KPiA+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICAg VGhlIFVTQl9STkRJU19ERVZJQ0UgbWF0Y2hpbmcgdGhpcw0KPiBDREMgRGF0YSBpcyBub3QgZm91 bmQuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtVcGRhdGVSbmRpc0Rl dmljZSAoDQo+ID4gKyAgSU4gIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgKlVzYkNkY0RhdGFQ YXRoLA0KPiA+ICsgIE9VVCBVU0JfUk5ESVNfREVWSUNFICAgICAgICAgICoqVXNiUm5kaXNEZXZp Y2UNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAg IFN0YXR1czsNCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiA+ ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgSGFuZGxlQ291bnQ7DQo+ID4gKyAgRUZJ X0hBTkRMRSAgICAgICAgICAgICAgICAgICAqSGFuZGxlQnVmZmVyOw0KPiA+ICsgIEVES0lJX1VT Ql9FVEhFUk5FVF9QUk9UT0NPTCAgKlVzYkV0aERldmljZTsNCj4gPiArICBFRklfREVWSUNFX1BB VEhfUFJPVE9DT0wgICAgICpVc2JSbmRpc0RhdGFQYXRoOw0KPiA+ICsgIEVGSV9VU0JfSU9fUFJP VE9DT0wgICAgICAgICAgKlVzYklvOw0KPiA+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAg ICAgSXNSbmRpc0ludGVyZmFjZUZsYWc7DQo+ID4gKw0KPiA+ICsgIElzUm5kaXNJbnRlcmZhY2VG bGFnID0gRkFMU0U7DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IGdCUy0+TG9jYXRlSGFuZGxlQnVm ZmVyICgNCj4gPiArICAgICAgICAgICAgICAgICAgQnlQcm90b2NvbCwNCj4gPiArICAgICAgICAg ICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCj4gPiArICAgICAgICAgICAgICAg ICAgTlVMTCwNCj4gPiArICAgICAgICAgICAgICAgICAgJkhhbmRsZUNvdW50LA0KPiA+ICsgICAg ICAgICAgICAgICAgICAmSGFuZGxlQnVmZmVyDQo+ID4gKyAgICAgICAgICAgICAgICAgICk7DQo+ ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgcmV0dXJuIFN0YXR1czsN Cj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IEhhbmRsZUNv dW50OyBJbmRleCsrKSB7DQo+ID4gKyAgICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sICgN Cj4gPiArICAgICAgICAgICAgICAgICAgICBIYW5kbGVCdWZmZXJbSW5kZXhdLA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICZnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQsDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgKFZPSUQgKiopJlVzYkV0aERldmljZQ0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICk7DQo+ID4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICAgIGNv bnRpbnVlOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIFN0YXR1cyA9IGdCUy0+SGFuZGxl UHJvdG9jb2wgKA0KPiA+ICsgICAgICAgICAgICAgICAgICAgIEhhbmRsZUJ1ZmZlcltJbmRleF0s DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmVXNiSW8NCj4gPiArICAgICAgICAgICAgICAg ICAgICApOw0KPiA+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgICBj b250aW51ZTsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBJc1JuZGlzSW50ZXJmYWNlRmxh ZyA9IElzUm5kaXNJbnRlcmZhY2UgKFVzYklvKTsNCj4gPiArICAgIGlmIChJc1JuZGlzSW50ZXJm YWNlRmxhZyA9PSBGQUxTRSkgew0KPiA+ICsgICAgICBjb250aW51ZTsNCj4gPiArICAgIH0NCj4g PiArDQo+ID4gKyAgICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sICgNCj4gPiArICAgICAg ICAgICAgICAgICAgICBIYW5kbGVCdWZmZXJbSW5kZXhdLA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCj4gPiArICAgICAgICAgICAgICAgICAg ICAoVk9JRCAqKikmVXNiUm5kaXNEYXRhUGF0aA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICk7 DQo+ID4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICAgIGNvbnRpbnVl Ow0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIFN0YXR1cyA9IElzU2FtZURldmljZSAoVXNi Um5kaXNEYXRhUGF0aCwgVXNiQ2RjRGF0YVBhdGgpOw0KPiA+ICsNCj4gPiArICAgIERFQlVHICgo REVCVUdfVkVSQk9TRSwgIlJuZGlzIElzU2FtZURldmljZSAlclxuIiwgU3RhdHVzKSk7DQo+ID4g Kw0KPiA+ICsgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgICAgKlVzYlJu ZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMgKFVzYkV0aERldmljZSk7DQo+ ID4gKyAgICAgIEZyZWVQb29sIChIYW5kbGVCdWZmZXIpOw0KPiA+ICsgICAgICByZXR1cm4gRUZJ X1NVQ0NFU1M7DQo+ID4gKyAgICB9DQo+ID4gKyAgfSAgIC8vIEVuZCBvZiBGb3IgbG9vcA0KPiA+ ICsNCj4gPiArICBGcmVlUG9vbCAoSGFuZGxlQnVmZmVyKTsNCj4gPiArICByZXR1cm4gRUZJX05P VF9GT1VORDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKw0KPiA+ICsgIEZvciB0aGUg Z2l2ZW4gUm5kaXMgRGV2aWNlLCBmaW5kIGEgbWF0Y2hpbmcgQ0RDIGRldmljZSBhbHJlYWR5IGV4 aXN0cyBvcg0KPiBub3QuIElmIGZvdW5kIHVwZGF0ZSB0aGUgaGFuZGxlDQo+ID4gKyAgYW5kIFVz YklPIHByb3RvY29sLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBVc2JSbmRpc0RldmljZSAg ICAgICAgQSBwb2ludGVyIHRvIHRoZSBVU0JfUk5ESVNfREVWSUNFDQo+IGRhdGEuDQo+ID4gKw0K PiA+ICsqKi8NCj4gPiArVk9JRA0KPiA+ICtGaW5kTWF0Y2hpbmdDZGNEYXRhICgNCj4gPiArICBJ TiBVU0JfUk5ESVNfREVWSUNFICAqVXNiUm5kaXNEZXZpY2UNCj4gPiArICApDQo+ID4gK3sNCj4g PiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gPiArICBVSU5UTiAgICAg ICAgICAgICAgICAgICAgIEluZGV4Ow0KPiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAg SGFuZGxlQ291bnQ7DQo+ID4gKyAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAqSGFuZGxlQnVm ZmVyOw0KPiA+ICsgIEVGSV9VU0JfSU9fUFJPVE9DT0wgICAgICAgKlVzYklvOw0KPiA+ICsgIEVG SV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgKlVzYlJuZGlzRGF0YVBhdGg7DQo+ID4gKyAgRUZJX0RF VklDRV9QQVRIX1BST1RPQ09MICAqVXNiQ2RjRGF0YVBhdGg7DQo+ID4gKw0KPiA+ICsgIC8vIEZp bmQgdGhlIHBhcmVudCBSTkRJUyBhbmQgdXBkYXRlIHRoZSBVc2JJbyBmb3IgdGhlIENEQyBkZXZp Y2UNCj4gPiArICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sICgNCj4gPiArICAgICAgICAg ICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPlVzYlJuZGlzSGFuZGxlLA0KPiA+ICsgICAgICAgICAg ICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQo+ID4gKyAgICAgICAgICAgICAg ICAgIChWT0lEICoqKSZVc2JSbmRpc0RhdGFQYXRoDQo+ID4gKyAgICAgICAgICAgICAgICAgICk7 DQo+ID4gKw0KPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgIHJldHVy bjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IGdCUy0+TG9jYXRlSGFuZGxlQnVm ZmVyICgNCj4gPiArICAgICAgICAgICAgICAgICAgQnlQcm90b2NvbCwNCj4gPiArICAgICAgICAg ICAgICAgICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCj4gPiArICAgICAgICAgICAgICAgICAg TlVMTCwNCj4gPiArICAgICAgICAgICAgICAgICAgJkhhbmRsZUNvdW50LA0KPiA+ICsgICAgICAg ICAgICAgICAgICAmSGFuZGxlQnVmZmVyDQo+ID4gKyAgICAgICAgICAgICAgICAgICk7DQo+ID4g KyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgcmV0dXJuOw0KPiA+ICsgIH0N Cj4gPiArDQo+ID4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgSGFuZGxlQ291bnQ7IEluZGV4 KyspIHsNCj4gPiArICAgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wgKA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgIEhhbmRsZUJ1ZmZlcltJbmRleF0sDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAo Vk9JRCAqKikmVXNiSW8NCj4gPiArICAgICAgICAgICAgICAgICAgICApOw0KPiA+ICsgICAgQVNT RVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gPiArDQo+ID4gKyAgICBpZiAoSXNVc2JDZGNEYXRh IChVc2JJbykpIHsNCj4gPiArICAgICAgREVCVUcgKChERUJVR19WRVJCT1NFLCAiUm5kaXMgRmlu ZE1hdGNoaW5nQ2RjRGF0YSBDRENEYXRhDQo+IGludGVyZmFjZSBmb3VuZFxuIikpOw0KPiA+ICsN Cj4gPiArICAgICAgU3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2NvbCAoDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICBIYW5kbGVCdWZmZXJbSW5kZXhdLA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgKFZPSUQgKiopJlVzYkNkY0RhdGFQYXRoDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICApOw0KPiA+ICsgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICAgICAg REVCVUcgKChERUJVR19WRVJCT1NFLCAiUm5kaXMgQ0RDRGF0YSBEZXZpY2VQYXRoIG5vdA0KPiBm b3VuZFxuIikpOw0KPiA+ICsgICAgICAgIEZyZWVQb29sIChIYW5kbGVCdWZmZXIpOw0KPiA+ICsg ICAgICAgIHJldHVybjsNCj4gPiArICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgU3RhdHVzID0g SXNTYW1lRGV2aWNlIChVc2JSbmRpc0RhdGFQYXRoLCBVc2JDZGNEYXRhUGF0aCk7DQo+ID4gKyAg ICAgIERFQlVHICgoREVCVUdfVkVSQk9TRSwgIlJuZGlzIElzU2FtZURldmljZSAlclxuIiwgU3Rh dHVzKSk7DQo+ID4gKyAgICAgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICAg ICAgVXNiUm5kaXNEZXZpY2UtPlVzYkNkY0RhdGFIYW5kbGUgPSBIYW5kbGVCdWZmZXJbSW5kZXhd Ow0KPiA+ICsgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5Vc2JJb0NkY0RhdGEgICAgID0gVXNiSW87 DQo+ID4gKyAgICAgICAgR2V0RW5kcG9pbnQgKFVzYlJuZGlzRGV2aWNlLT5Vc2JJb0NkY0RhdGEs IFVzYlJuZGlzRGV2aWNlKTsNCj4gPiArICAgICAgICBGcmVlUG9vbCAoSGFuZGxlQnVmZmVyKTsN Cj4gPiArICAgICAgICByZXR1cm47DQo+ID4gKyAgICAgIH0NCj4gPiArICAgIH0NCj4gPiArICB9 ICAgLy8gRW5kIG9mIEZvciBsb29wDQo+ID4gKw0KPiA+ICsgIEZyZWVQb29sIChIYW5kbGVCdWZm ZXIpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArDQo+ID4gKyAgRm9yIHRoZSBnaXZl biBVc2JJbyBDZGNEYXRhLCBmaW5kIGEgbWF0Y2hpbmcgUk5ESVMgZGV2aWNlIGFscmVhZHkgZXhp c3RzDQo+IG9yIG5vdC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgQ2RjSGFuZGxlICAgICAg IEEgcG9pbnRlciB0byB0aGUgRUZJX0hBTkRMRSBmb3IgVVNCIENEQw0KPiBEYXRhLg0KPiA+ICsg IEBwYXJhbVtvdXRdIENkY1VzYklvICAgICAgICBBIHBvaW50ZXIgZm9yIHJldHJpZXZlIHRoZQ0K PiBFRklfVVNCX0lPX1BST1RPQ09MIGluc3RhbmNlLg0KPiA+ICsgIEBwYXJhbVtvdXRdIFJuZGlz SGFuZGxlICAgICBBIHBvaW50ZXIgZm9yIHJldHJpZXZlIHRoZSBoYW5kbGUgb2YgUk5ESVMNCj4g ZGV2aWNlLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIFRo ZSBVU0JfUk5ESVNfREVWSUNFIG1hdGNoaW5nIHRoaXMgQ0RDDQo+IERhdGEgaXMgZm91bmQuDQo+ ID4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgICBUaGUgVVNCX1JORElTX0RFVklD RSBtYXRjaGluZyB0aGlzDQo+IENEQyBEYXRhIGlzIG5vdCBmb3VuZC4NCj4gPiArDQo+ID4gKyoq Lw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtGaW5kTWF0Y2hpbmdSbmRpc0Rl diAoDQo+ID4gKyAgSU4gIEVGSV9IQU5ETEUgICAgICAgICAgIENkY0hhbmRsZSwNCj4gPiArICBP VVQgRUZJX1VTQl9JT19QUk9UT0NPTCAgKipDZGNVc2JJbywNCj4gPiArICBPVVQgRUZJX0hBTkRM RSAgICAgICAgICAgKlJuZGlzSGFuZGxlDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1NU QVRVUyAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAg ICAgICBJbmRleDsNCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEhhbmRsZUNvdW50 Ow0KPiA+ICsgIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgKkhhbmRsZUJ1ZmZlcjsNCj4gPiAr ICBFRklfVVNCX0lPX1BST1RPQ09MICAgICAgICpVc2JJbzsNCj4gPiArICBFRklfREVWSUNFX1BB VEhfUFJPVE9DT0wgICpVc2JSbmRpc0RhdGFQYXRoOw0KPiA+ICsgIEVGSV9ERVZJQ0VfUEFUSF9Q Uk9UT0NPTCAgKlVzYkNkY0RhdGFQYXRoOw0KPiA+ICsNCj4gPiArICAvLyBGaW5kIHRoZSBwYXJl bnQgUk5ESVMgYW5kIHVwZGF0ZSB0aGUgVXNiSW8gZm9yIHRoZSBDREMgZGV2aWNlDQo+ID4gKyAg U3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2NvbCAoDQo+ID4gKyAgICAgICAgICAgICAgICAgIENk Y0hhbmRsZSwNCj4gPiArICAgICAgICAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xH dWlkLA0KPiA+ICsgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmVXNiQ2RjRGF0YVBhdGgNCj4g PiArICAgICAgICAgICAgICAgICAgKTsNCj4gPiArDQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPiA+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsg IFN0YXR1cyA9IGdCUy0+TG9jYXRlSGFuZGxlQnVmZmVyICgNCj4gPiArICAgICAgICAgICAgICAg ICAgQnlQcm90b2NvbCwNCj4gPiArICAgICAgICAgICAgICAgICAgJmdFZmlVc2JJb1Byb3RvY29s R3VpZCwNCj4gPiArICAgICAgICAgICAgICAgICAgTlVMTCwNCj4gPiArICAgICAgICAgICAgICAg ICAgJkhhbmRsZUNvdW50LA0KPiA+ICsgICAgICAgICAgICAgICAgICAmSGFuZGxlQnVmZmVyDQo+ ID4gKyAgICAgICAgICAgICAgICAgICk7DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPiA+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGZvciAo SW5kZXggPSAwOyBJbmRleCA8IEhhbmRsZUNvdW50OyBJbmRleCsrKSB7DQo+ID4gKyAgICBTdGF0 dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sICgNCj4gPiArICAgICAgICAgICAgICAgICAgICBIYW5k bGVCdWZmZXJbSW5kZXhdLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICZnRWZpVXNiSW9Qcm90 b2NvbEd1aWQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgKFZPSUQgKiopJlVzYklvDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgKTsNCj4gPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gPiArICAgICAgcmV0dXJuIFN0YXR1czsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAg ICBpZiAoSXNVc2JSbmRpcyAoVXNiSW8pKSB7DQo+ID4gKyAgICAgIFN0YXR1cyA9IGdCUy0+SGFu ZGxlUHJvdG9jb2wgKA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgSGFuZGxlQnVmZmVyW0lu ZGV4XSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29s R3VpZCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZVc2JSbmRpc0RhdGFQ YXRoDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICApOw0KPiA+ICsgICAgICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICAgICAgREVCVUcgKChERUJVR19FUlJPUiwgIlVzYiBS bmRpcyBEZXZpY2VQYXRoIG5vdCBmb3VuZFxuIikpOw0KPiA+ICsgICAgICAgIGJyZWFrOw0KPiA+ ICsgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICBTdGF0dXMgPSBJc1NhbWVEZXZpY2UgKFVzYlJu ZGlzRGF0YVBhdGgsIFVzYkNkY0RhdGFQYXRoKTsNCj4gPiArDQo+ID4gKyAgICAgIGlmICghRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICAgICAgKlJuZGlzSGFuZGxlID0gSGFuZGxlQnVm ZmVyW0luZGV4XTsNCj4gPiArICAgICAgICAqQ2RjVXNiSW8gICAgPSBVc2JJbzsNCj4gPiArICAg ICAgICBGcmVlUG9vbCAoSGFuZGxlQnVmZmVyKTsNCj4gPiArICAgICAgICByZXR1cm4gU3RhdHVz Ow0KPiA+ICsgICAgICB9DQo+ID4gKyAgICB9DQo+ID4gKyAgfSAgIC8vIEVuZCBvZiBGb3IgbG9v cA0KPiA+ICsNCj4gPiArICBGcmVlUG9vbCAoSGFuZGxlQnVmZmVyKTsNCj4gPiArDQo+ID4gKyAg cmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFVT QiBSbmRpcyBEcml2ZXIgQmluZGluZyBTdXBwb3J0Lg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5d ICBUaGlzICAgICAgICAgICAgICAgICAgICBQcm90b2NvbCBpbnN0YW5jZSBwb2ludGVyLg0KPiA+ ICsgIEBwYXJhbVtpbl0gIENvbnRyb2xsZXJIYW5kbGUgICAgICAgIEhhbmRsZSBvZiBkZXZpY2Ug dG8gdGVzdC4NCj4gPiArICBAcGFyYW1baW5dICBSZW1haW5pbmdEZXZpY2VQYXRoICAgICBPcHRp b25hbCBwYXJhbWV0ZXIgdXNlIHRvIHBpY2sgYQ0KPiBzcGVjaWZpYyBjaGlsZA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZSB0byBzdGFydC4NCj4gPiAr DQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgICAgVGhpcyBkcml2ZXIg c3VwcG9ydHMgdGhpcyBkZXZpY2UuDQo+ID4gKyAgQHJldHZhbCBFRklfQUxSRUFEWV9TVEFSVEVE ICAgICAgICAgVGhpcyBkcml2ZXIgaXMgYWxyZWFkeSBydW5uaW5nIG9uIHRoaXMNCj4gZGV2aWNl Lg0KPiA+ICsgIEByZXR2YWwgb3RoZXIgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZHJpdmVy IGRvZXMgbm90IHN1cHBvcnQgdGhpcyBkZXZpY2UuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJ X1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArVXNiUm5kaXNEcml2ZXJTdXBwb3J0ZWQgKA0KPiA+ ICsgIElOIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgKlRoaXMsDQo+ID4gKyAgSU4gRUZJ X0hBTkRMRSAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiA+ICsgIElOIEVG SV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgKlJlbWFpbmluZ0RldmljZVBhdGgNCj4gPiArICAp DQo+ID4gK3sNCj4gPiArICBFRklfU1RBVFVTICAgICAgICAgICBTdGF0dXM7DQo+ID4gKyAgRUZJ X1VTQl9JT19QUk9UT0NPTCAgKlVzYklvOw0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBnQlMtPk9w ZW5Qcm90b2NvbCAoDQo+ID4gKyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ ID4gKyAgICAgICAgICAgICAgICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQsDQo+ID4gKyAgICAg ICAgICAgICAgICAgIChWT0lEICoqKSZVc2JJbywNCj4gPiArICAgICAgICAgICAgICAgICAgVGhp cy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gPiArICAgICAgICAgICAgICAgICAgQ29udHJvbGxl ckhhbmRsZSwNCj4gPiArICAgICAgICAgICAgICAgICAgRUZJX09QRU5fUFJPVE9DT0xfQllfRFJJ VkVSDQo+ID4gKyAgICAgICAgICAgICAgICAgICk7DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPiA+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsg IFN0YXR1cyA9IElzU3VwcG9ydGVkRGV2aWNlIChVc2JJbykgPyBFRklfU1VDQ0VTUyA6IEVGSV9V TlNVUFBPUlRFRDsNCj4gPiArDQo+ID4gKyAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gPiArICAg ICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gPiArICAgICAgICAgJmdFZmlVc2JJb1Byb3RvY29s R3VpZCwNCj4gPiArICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gPiArICAg ICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiA+ICsgICAgICAgICApOw0KPiA+ICsgIHJldHVybiBT dGF0dXM7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFVTQiBSTkRJUyBEcml2ZXIg QmluZGluZyBTdGFydC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAg ICAgICAgICAgUHJvdG9jb2wgaW5zdGFuY2UgcG9pbnRlci4NCj4gPiArICBAcGFyYW1baW5dICBD b250cm9sbGVySGFuZGxlICAgICAgICBIYW5kbGUgb2YgZGV2aWNlIHRvIGJpbmQgZHJpdmVyIHRv Lg0KPiA+ICsgIEBwYXJhbVtpbl0gIFJlbWFpbmluZ0RldmljZVBhdGggICAgIE9wdGlvbmFsIHBh cmFtZXRlciB1c2UgdG8gcGljayBhDQo+IHNwZWNpZmljIGNoaWxkDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIHRvIHN0YXJ0Lg0KPiA+ICsNCj4gPiAr ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgICBUaGlzIGRyaXZlciBpcyBhZGRl ZCB0byBDb250cm9sbGVySGFuZGxlDQo+ID4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAg ICAgICAgICAgVGhpcyBkcml2ZXIgY291bGQgbm90IGJlIHN0YXJ0ZWQgZHVlIHRvDQo+IGEgZGV2 aWNlIGVycm9yDQo+ID4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgICAgICAgVGhl IGRyaXZlciBjb3VsZCBub3QgaW5zdGFsbA0KPiBzdWNjZXNzZnVsbHkgZHVlIHRvIGEgbGFjayBv ZiByZXNvdXJjZXMuDQo+ID4gKyAgQHJldHZhbCBvdGhlciAgICAgICAgICAgICAgICAgICAgICAg VGhpcyBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGRldmljZQ0KPiA+ICsNCj4gPiArKiov DQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ID4gK1VzYlJuZGlzRHJpdmVyU3RhcnQg KA0KPiA+ICsgIElOIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgKlRoaXMsDQo+ID4gKyAg SU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiA+ICsg IElOIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgKlJlbWFpbmluZ0RldmljZVBhdGgNCj4g PiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICBTdGF0 dXM7DQo+ID4gKyAgVVNCX1JORElTX0RFVklDRSAgICAgICAgICAgICAgKlVzYlJuZGlzRGV2aWNl Ow0KPiA+ICsgIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgICpVc2JFdGhQYXRoOw0KPiA+ ICsgIEVGSV9VU0JfSU9fUFJPVE9DT0wgICAgICAgICAgICpVc2JJbzsNCj4gPiArICBFRklfVVNC X0lOVEVSRkFDRV9ERVNDUklQVE9SICBJbnRlcmZhY2U7DQo+ID4gKyAgRUZJX0hBTkRMRSAgICAg ICAgICAgICAgICAgICAgUm5kaXNIYW5kbGU7DQo+ID4gKw0KPiA+ICsgIFJuZGlzSGFuZGxlID0g Q29udHJvbGxlckhhbmRsZTsNCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9j b2wgKA0KPiA+ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiA+ICsgICAg ICAgICAgICAgICAgICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KPiA+ICsgICAgICAgICAgICAg ICAgICAoVk9JRCAqKikmVXNiSW8sDQo+ID4gKyAgICAgICAgICAgICAgICAgIFRoaXMtPkRyaXZl ckJpbmRpbmdIYW5kbGUsDQo+ID4gKyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUs DQo+ID4gKyAgICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0JZX0RSSVZFUg0KPiA+ ICsgICAgICAgICAgICAgICAgICApOw0KPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN Cj4gPiArICAgIHJldHVybiBTdGF0dXM7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBTdGF0dXMg PSBnQlMtPk9wZW5Qcm90b2NvbCAoDQo+ID4gKyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJI YW5kbGUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3Vp ZCwNCj4gPiArICAgICAgICAgICAgICAgICAgKFZPSUQgKiopJlVzYkV0aFBhdGgsDQo+ID4gKyAg ICAgICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ID4gKyAgICAgICAg ICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ID4gKyAgICAgICAgICAgICAgICAgIEVGSV9P UEVOX1BST1RPQ09MX0JZX0RSSVZFUg0KPiA+ICsgICAgICAgICAgICAgICAgICApOw0KPiA+ICsg IGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAo DQo+ID4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gPiArICAgICAgICAgICAmZ0Vm aVVzYklvUHJvdG9jb2xHdWlkLA0KPiA+ICsgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdI YW5kbGUsDQo+ID4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiA+ICsgICAgICAgICAg ICk7DQo+ID4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgZ0JT LT5DbG9zZVByb3RvY29sICgNCj4gPiArICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gPiAr ICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiA+ICsgICAgICAgICBUaGlz LT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiA+ICsgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ ID4gKyAgICAgICAgICk7DQo+ID4gKw0KPiA+ICsgIC8vIENvbnRyb2xzIGNvbWUgaGVyZSBmb3Ig Uk5ESVMgYW5kIENEQy4gSWYgaXQgaXMgQ0RDLCBjaGVjayB3aGV0aGVyDQo+IFJORElTIGlzIHBy ZXNlbnQgb24gdGhlIHNhbWUgY29udHJvbGxlciBvciBub3QuDQo+ID4gKyAgaWYgKElzVXNiQ2Rj RGF0YSAoVXNiSW8pKSB7DQo+ID4gKyAgICBERUJVRyAoKERFQlVHX0lORk8sICJSbmRpcyBDRENE YXRhIGludGVyZmFjZSBmb3VuZFxuIikpOw0KPiA+ICsNCj4gPiArICAgIC8vIEZpbmQgdGhlIHBh cmVudCBSTkRJUyBhbmQgdXBkYXRlIHRoZSBVc2JJbyBmb3IgdGhlIENEQyBkZXZpY2UNCj4gPiAr ICAgIFN0YXR1cyA9IFVwZGF0ZVJuZGlzRGV2aWNlICgNCj4gPiArICAgICAgICAgICAgICAgVXNi RXRoUGF0aCwNCj4gPiArICAgICAgICAgICAgICAgJlVzYlJuZGlzRGV2aWNlDQo+ID4gKyAgICAg ICAgICAgICAgICk7DQo+ID4gKw0KPiA+ICsgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsN Cj4gPiArICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiUm5kaXMgTWF0Y2hpbmcgaW50ZXJmYWNl IGZvdW5kXG4iKSk7DQo+ID4gKyAgICAgIFVzYlJuZGlzRGV2aWNlLT5Vc2JDZGNEYXRhSGFuZGxl ID0gQ29udHJvbGxlckhhbmRsZTsNCj4gPiArICAgICAgVXNiUm5kaXNEZXZpY2UtPlVzYklvQ2Rj RGF0YSAgICAgPSBVc2JJbzsNCj4gPiArICAgICAgR2V0RW5kcG9pbnQgKFVzYlJuZGlzRGV2aWNl LT5Vc2JJb0NkY0RhdGEsIFVzYlJuZGlzRGV2aWNlKTsNCj4gPiArICAgICAgcmV0dXJuIFN0YXR1 czsNCj4gPiArICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgIC8vIENoZWNrIGlmIFJuRGlzIGV4aXN0 DQo+ID4gKyAgICAgIFN0YXR1cyA9IEZpbmRNYXRjaGluZ1JuZGlzRGV2ICgNCj4gPiArICAgICAg ICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiA+ICsgICAgICAgICAgICAgICAgICZVc2JJ bywNCj4gPiArICAgICAgICAgICAgICAgICAmUm5kaXNIYW5kbGUNCj4gPiArICAgICAgICAgICAg ICAgICApOw0KPiA+ICsNCj4gPiArICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ ICsgICAgICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ID4gKyAgICAgICAgICAgICAgIENvbnRy b2xsZXJIYW5kbGUsDQo+ID4gKyAgICAgICAgICAgICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQs DQo+ID4gKyAgICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ID4gKyAg ICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gPiArICAgICAgICAgICAgICAgKTsNCj4g PiArICAgICAgICByZXR1cm4gU3RhdHVzOw0KPiA+ICsgICAgICB9DQo+ID4gKyAgICB9DQo+ID4g KyAgfQ0KPiA+ICsNCj4gPiArICBVc2JSbmRpc0RldmljZSA9IEFsbG9jYXRlWmVyb1Bvb2wgKHNp emVvZiAoVVNCX1JORElTX0RFVklDRSkpOw0KPiA+ICsNCj4gPiArICBpZiAoIVVzYlJuZGlzRGV2 aWNlKSB7DQo+ID4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiQWxsb2NhdGVaZXJvUG9vbCBG YWlsXG4iKSk7DQo+ID4gKw0KPiA+ICsgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gPiArICAg ICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiA+ICsgICAgICAgICAgICZnRWZpVXNiSW9Qcm90 b2NvbEd1aWQsDQo+ID4gKyAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4g PiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ID4gKyAgICAgICAgICAgKTsNCj4gPiAr ICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsg IFN0YXR1cyA9IExvYWRBbGxEZXNjcmlwdG9yICgNCj4gPiArICAgICAgICAgICAgIFVzYklvLA0K PiA+ICsgICAgICAgICAgICAgJlVzYlJuZGlzRGV2aWNlLT5Db25maWcNCj4gPiArICAgICAgICAg ICAgICk7DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgREVCVUcg KChERUJVR19FUlJPUiwgIiVhOkxvYWRBbGxEZXNjcmlwdG9yIHN0YXR1cyA9ICVyXG4iLA0KPiBf X0ZVTkNUSU9OX18sIFN0YXR1cykpOw0KPiA+ICsgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4g PiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiA+ICsgICAgICAgICAgICZnRWZpVXNi SW9Qcm90b2NvbEd1aWQsDQo+ID4gKyAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRs ZSwNCj4gPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ID4gKyAgICAgICAgICAgKTsN Cj4gPiArICAgIEZyZWVQb29sIChVc2JSbmRpc0RldmljZSk7DQo+ID4gKyAgICByZXR1cm4gU3Rh dHVzOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gVXNiSW8tPlVzYkdldEludGVy ZmFjZURlc2NyaXB0b3IgKA0KPiA+ICsgICAgICAgICAgICAgICAgICAgIFVzYklvLA0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICZJbnRlcmZhY2UNCj4gPiArICAgICAgICAgICAgICAgICAgICAp Ow0KPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgIERFQlVHICgoREVC VUdfRVJST1IsICIlYTpVc2JHZXRJbnRlcmZhY2VEZXNjcmlwdG9yIHN0YXR1cyA9DQo+ICVyXG4i LCBfX0ZVTkNUSU9OX18sIFN0YXR1cykpOw0KPiA+ICsgICAgZ0JTLT5DbG9zZVByb3RvY29sICgN Cj4gPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiA+ICsgICAgICAgICAgICZnRWZp VXNiSW9Qcm90b2NvbEd1aWQsDQo+ID4gKyAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hh bmRsZSwNCj4gPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ID4gKyAgICAgICAgICAg KTsNCj4gPiArICAgIEZyZWVQb29sIChVc2JSbmRpc0RldmljZS0+Q29uZmlnKTsNCj4gPiArICAg IEZyZWVQb29sIChVc2JSbmRpc0RldmljZSk7DQo+ID4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiA+ ICsgIH0NCj4gPiArDQo+ID4gKyAgVXNiUm5kaXNEZXZpY2UtPlNpZ25hdHVyZSAgICAgICAgICAg ICAgICAgICAgICAgICAgPSBVU0JfUk5ESVNfU0lHTkFUVVJFOw0KPiA+ICsgIFVzYlJuZGlzRGV2 aWNlLT5OdW1PZkludGVyZmFjZSAgICAgICAgICAgICAgICAgICAgID0NCj4gSW50ZXJmYWNlLklu dGVyZmFjZU51bWJlcjsNCj4gPiArICBVc2JSbmRpc0RldmljZS0+VXNiUm5kaXNIYW5kbGUgICAg ICAgICAgICAgICAgICAgICA9IFJuZGlzSGFuZGxlOw0KPiA+ICsgIFVzYlJuZGlzRGV2aWNlLT5V c2JDZGNEYXRhSGFuZGxlICAgICAgICAgICAgICAgICAgID0gMDsNCj4gPiArICBVc2JSbmRpc0Rl dmljZS0+VXNiSW8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFVzYklvOw0KPiA+ICsg IFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoUmVjZWl2ZSAgICAgICAgICAgICAgID0gUm5k aXNVbmRpUmVjZWl2ZTsNCj4gPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFRyYW5z bWl0ICAgICAgICAgICAgICA9IFJuZGlzVW5kaVRyYW5zbWl0Ow0KPiA+ICsgIFVzYlJuZGlzRGV2 aWNlLT5Vc2JFdGguVXNiRXRoSW50ZXJydXB0ICAgICAgICAgICAgID0gVXNiUm5kaXNJbnRlcnJ1 cHQ7DQo+ID4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhNYWNBZGRyZXNzICAgICAg ICAgICAgPQ0KPiBHZXRVc2JFdGhNYWNBZGRyZXNzOw0KPiA+ICsgIFVzYlJuZGlzRGV2aWNlLT5V c2JFdGguVXNiRXRoTWF4QnVsa1NpemUgICAgICAgICAgID0gVXNiRXRoQnVsa1NpemU7DQo+ID4g KyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JIZWFkZXJGdW5EZXNjcmlwdG9yICAgICAgPQ0K PiBHZXRVc2JIZWFkZXJGdW5EZXNjcmlwdG9yOw0KPiA+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JF dGguVXNiVW5pb25GdW5EZXNjcmlwdG9yICAgICAgID0NCj4gR2V0VXNiVW5pb25GdW5EZXNjcmlw dG9yOw0KPiA+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoRnVuRGVzY3JpcHRvciAg ICAgICAgID0NCj4gR2V0VXNiUm5kaXNGdW5EZXNjcmlwdG9yOw0KPiA+ICsgIFVzYlJuZGlzRGV2 aWNlLT5Vc2JFdGguU2V0VXNiRXRoTWNhc3RGaWx0ZXIgICAgICAgID0NCj4gU2V0VXNiUm5kaXNN Y2FzdEZpbHRlcjsNCj4gPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlNldFVzYkV0aFBvd2Vy UGF0dGVybkZpbHRlciA9DQo+IFNldFVzYlJuZGlzUG93ZXJGaWx0ZXI7DQo+ID4gKyAgVXNiUm5k aXNEZXZpY2UtPlVzYkV0aC5HZXRVc2JFdGhQb3dlclBhdHRlcm5GaWx0ZXIgPQ0KPiBHZXRVc2JS bmRpc1Bvd2VyRmlsdGVyOw0KPiA+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguU2V0VXNiRXRo UGFja2V0RmlsdGVyICAgICAgID0NCj4gU2V0VXNiUm5kaXNQYWNrZXRGaWx0ZXI7DQo+ID4gKyAg VXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5HZXRVc2JFdGhTdGF0aXN0aWMgICAgICAgICAgPSBHZXRS bmRpc1N0YXRpc3RpYzsNCj4gPiArDQo+ID4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JF dGhVbmRpLlVzYkV0aFVuZGlHZXRTdGF0ZSAgICAgICAgPQ0KPiBSbmRpc0R1bW15UmV0dXJuOw0K PiA+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpU3RhcnQg ICAgICAgICAgID0NCj4gUm5kaXNVbmRpU3RhcnQ7DQo+ID4gKyAgVXNiUm5kaXNEZXZpY2UtPlVz YkV0aC5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlTdG9wICAgICAgICAgICAgPQ0KPiBSbmRpc1VuZGlT dG9wOw0KPiA+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRp R2V0SW5pdEluZm8gICAgID0NCj4gUm5kaXNVbmRpR2V0SW5pdEluZm87DQo+ID4gKyAgVXNiUm5k aXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlHZXRDb25maWdJbmZvICAgPQ0K PiBSbmRpc1VuZGlHZXRDb25maWdJbmZvOw0KPiA+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGgu VXNiRXRoVW5kaS5Vc2JFdGhVbmRpSW5pdGlhbGl6ZSAgICAgID0NCj4gUm5kaXNVbmRpSW5pdGlh bGl6ZTsNCj4gPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5k aVJlc2V0ICAgICAgICAgICA9DQo+IFJuZGlzVW5kaVJlc2V0Ow0KPiA+ICsgIFVzYlJuZGlzRGV2 aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpU2h1dGRvd24gICAgICAgID0NCj4gUm5k aXNVbmRpU2h1dGRvd247DQo+ID4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhVbmRp LlVzYkV0aFVuZGlJbnRlcnJ1cHRFbmFibGUgPQ0KPiBSbmRpc0R1bW15UmV0dXJuOw0KPiA+ICsg IFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpUmVjZWl2ZUZpbHRl ciAgID0NCj4gUm5kaXNVbmRpUmVjZWl2ZUZpbHRlcjsNCj4gPiArICBVc2JSbmRpc0RldmljZS0+ VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaVN0YXRpb25BZGRyZXNzICA9DQo+IFJuZGlzRHVt bXlSZXR1cm47DQo+ID4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhVbmRpLlVzYkV0 aFVuZGlTdGF0aXN0aWNzICAgICAgPSBOVUxMOw0KPiA+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JF dGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpTWNhc3RJcDJNYWMgICAgID0NCj4gUm5kaXNEdW1teVJl dHVybjsNCj4gPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5k aU52RGF0YSAgICAgICAgICA9DQo+IFJuZGlzRHVtbXlSZXR1cm47DQo+ID4gKyAgVXNiUm5kaXNE ZXZpY2UtPlVzYkV0aC5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlHZXRTdGF0dXMgICAgICAgPQ0KPiBS bmRpc1VuZGlHZXRTdGF0dXM7DQo+ID4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhV bmRpLlVzYkV0aFVuZGlGaWxsSGVhZGVyICAgICAgPQ0KPiBSbmRpc0R1bW15UmV0dXJuOw0KPiA+ ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpVHJhbnNtaXQg ICAgICAgID0gTlVMTDsNCj4gPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVuZGku VXNiRXRoVW5kaVJlY2VpdmUgICAgICAgICA9IE5VTEw7DQo+ID4gKw0KPiA+ICsgIFVzYlJuZGlz RGV2aWNlLT5NYXhUcmFuc2ZlclNpemUgICAgICAgPSBSTkRJU19NQVhfVFJBTlNGRVJfU0laRTsN Cj4gPiArICBVc2JSbmRpc0RldmljZS0+TWF4UGFja2V0c1BlclRyYW5zZmVyID0gMTsNCj4gPiAr ICBVc2JSbmRpc0RldmljZS0+UGFja2V0QWxpZ25tZW50RmFjdG9yID0gMDsNCj4gPiArDQo+ID4g KyAgSW5pdGlhbGl6ZUxpc3RIZWFkICgmVXNiUm5kaXNEZXZpY2UtPlJlY2VpdmVQYWNrZXRMaXN0 KTsNCj4gPiArDQo+ID4gKyAgLy8gVGhpcyBpcyBhIFJORElTIGludGVyZmFjZS4gU2VlIHdoZXRo ZXIgQ0RDLURBVEEgaW50ZXJmYWNlIGhhcyBhbHJlYWR5DQo+IGJlZW4gY29ubmVjdGVkIG9yIG5v dA0KPiA+ICsgIEZpbmRNYXRjaGluZ0NkY0RhdGEgKFVzYlJuZGlzRGV2aWNlKTsNCj4gPiArDQo+ ID4gKyAgaWYgKFVzYlJuZGlzRGV2aWNlLT5Vc2JJb0NkY0RhdGEpIHsNCj4gPiArICAgIFN0YXR1 cyA9IGdCUy0+SW5zdGFsbFByb3RvY29sSW50ZXJmYWNlICgNCj4gPiArICAgICAgICAgICAgICAg ICAgICAmQ29udHJvbGxlckhhbmRsZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAmZ0Vka0lJ VXNiRXRoUHJvdG9jb2xHdWlkLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgIEVGSV9OQVRJVkVf SU5URVJGQUNFLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICYoVXNiUm5kaXNEZXZpY2UtPlVz YkV0aCkNCj4gPiArICAgICAgICAgICAgICAgICAgICApOw0KPiA+ICsgICAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPiA+ICsgICAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiA+ICsgICAg ICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gPiArICAgICAgICAgICAgICZnRWZpVXNiSW9Q cm90b2NvbEd1aWQsDQo+ID4gKyAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxl LA0KPiA+ICsgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiA+ICsgICAgICAgICAgICAg KTsNCj4gPiArDQo+ID4gKyAgICAgIEZyZWVQb29sIChVc2JSbmRpc0RldmljZS0+Q29uZmlnKTsN Cj4gPiArICAgICAgRnJlZVBvb2wgKFVzYlJuZGlzRGV2aWNlKTsNCj4gPiArICAgICAgcmV0dXJu IFN0YXR1czsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBHZXRFbmRwb2ludCAoVXNiUm5k aXNEZXZpY2UtPlVzYklvLCBVc2JSbmRpc0RldmljZSk7DQo+ID4gKw0KPiA+ICsgICAgREVCVUcg KChERUJVR19JTkZPLCAiUm5kaXMgRGV2aWNlSGFuZGxlICVyXG4iLCBVc2JSbmRpc0RldmljZS0N Cj4gPlVzYlJuZGlzSGFuZGxlKSk7DQo+ID4gKyAgICBERUJVRyAoKERFQlVHX0lORk8sICJDREMg RGV2aWNlSGFuZGxlICVyXG4iLCBVc2JSbmRpc0RldmljZS0NCj4gPlVzYkNkY0RhdGFIYW5kbGUp KTsNCj4gPiArICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsg IEZyZWVQb29sIChVc2JSbmRpc0RldmljZS0+Q29uZmlnKTsNCj4gPiArICBGcmVlUG9vbCAoVXNi Um5kaXNEZXZpY2UpOw0KPiA+ICsNCj4gPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gK30N Cj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIENoZWNrYW5kU3RvcFJuZGlzRGV2aWNlDQo+ID4gKw0K PiA+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgIFByb3RvY29sIGluc3RhbmNl IHBvaW50ZXIuDQo+ID4gKyAgQHBhcmFtW2luXSAgQ29udHJvbGxlckhhbmRsZSAgICAgSGFuZGxl IG9mIGRldmljZSB0byBiaW5kIGRyaXZlciB0by4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgICAgICBUaGlzIGRyaXZlciBpcyBhZGRlZCB0byBDb250cm9sbGVySGFuZGxl DQo+ID4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICBUaGlzIGRyaXZlciBjb3VsZCBu b3QgYmUgc3RhcnRlZCBkdWUgdG8gYQ0KPiBkZXZpY2UgZXJyb3INCj4gPiArICBAcmV0dmFsIG90 aGVyICAgICAgICAgICAgICAgIFRoaXMgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBkZXZp Y2UNCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtD aGVja2FuZFN0b3BSbmRpc0RldmljZSAoDQo+ID4gKyAgSU4gIEVGSV9EUklWRVJfQklORElOR19Q Uk9UT0NPTCAgKlRoaXMsDQo+ID4gKyAgSU4gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAg Q29udHJvbGxlckhhbmRsZQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEVGSV9TVEFUVVMgICAg ICAgICAgIFN0YXR1czsNCj4gPiArICBFRklfVVNCX0lPX1BST1RPQ09MICAqVXNiSW87DQo+ID4g Kw0KPiA+ICsgIFN0YXR1cyA9IGdCUy0+T3BlblByb3RvY29sICgNCj4gPiArICAgICAgICAgICAg ICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gPiArICAgICAgICAgICAgICAgICAgJmdFZmlVc2JJ b1Byb3RvY29sR3VpZCwNCj4gPiArICAgICAgICAgICAgICAgICAgKFZPSUQgKiopJlVzYklvLA0K PiA+ICsgICAgICAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiA+ICsg ICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiA+ICsgICAgICAgICAgICAgICAg ICBFRklfT1BFTl9QUk9UT0NPTF9HRVRfUFJPVE9DT0wNCj4gPiArICAgICAgICAgICAgICAgICAg KTsNCj4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICByZXR1cm4gU3Rh dHVzOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYgKElzVXNiUm5kaXMgKFVzYklvKSkgew0K PiA+ICsgICAgU3RhdHVzID0gZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gPiArICAgICAgICAgICAg ICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICZnRWZp VXNiSW9Qcm90b2NvbEd1aWQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVy QmluZGluZ0hhbmRsZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxl DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgKTsNCj4gPiArICAgIERFQlVHICgoREVCVUdfRVJS T1IsICJSbmRpcyBDb250cm9sbGVySGFuZGxlIFN0b3AgJXJcbiIsIFN0YXR1cykpOw0KPiA+ICsg ICAgcmV0dXJuIFN0YXR1czsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIHJldHVybiBFRklfVU5T VVBQT1JURUQ7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFVTQiBSbmRpcyBEcml2 ZXIgQmluZGluZyBTdG9wLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAg ICAgICAgICAgUHJvdG9jb2wgaW5zdGFuY2UgcG9pbnRlci4NCj4gPiArICBAcGFyYW1baW5dICBD b250cm9sbGVySGFuZGxlICAgICAgSGFuZGxlIG9mIGRldmljZSB0byBzdG9wIGRyaXZlciBvbg0K PiA+ICsgIEBwYXJhbVtpbl0gIE51bWJlck9mQ2hpbGRyZW4gICAgICBOdW1iZXIgb2YgSGFuZGxl cyBpbg0KPiBDaGlsZEhhbmRsZUJ1ZmZlci4gSWYgbnVtYmVyIG9mDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuIGlzIHplcm8gc3RvcCB0aGUgZW50aXJl IGJ1cyBkcml2ZXIuDQo+ID4gKyAgQHBhcmFtW2luXSAgQ2hpbGRIYW5kbGVCdWZmZXIgICAgIExp c3Qgb2YgQ2hpbGQgSGFuZGxlcyB0byBTdG9wLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgICAgICAgICAgICAgVGhpcyBkcml2ZXIgaXMgcmVtb3ZlZCBDb250cm9sbGVySGFu ZGxlDQo+ID4gKyAgQHJldHZhbCBvdGhlciAgICAgICAgICAgICAgICAgICAgIFRoaXMgZHJpdmVy IHdhcyBub3QgcmVtb3ZlZCBmcm9tIHRoaXMgZGV2aWNlDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiAr RUZJX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArVXNiUm5kaXNEcml2ZXJTdG9wICgNCj4gPiAr ICBJTiAgRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICAqVGhpcywNCj4gPiArICBJTiAgRUZJ X0hBTkRMRSAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiA+ICsgIElOICBV SU5UTiAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlck9mQ2hpbGRyZW4sDQo+ID4gKyAgSU4g IEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgKkNoaWxkSGFuZGxlQnVmZmVyDQo+ID4gKyAg KQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ ID4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVXNiRXRoUHJvdG9jb2w7DQo+ID4g KyAgVVNCX1JORElTX0RFVklDRSAgICAgICAgICAgICAqVXNiUm5kaXNEZXZpY2U7DQo+ID4gKw0K PiA+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIlVzYlJuZGlzRHJpdmVyU3RvcCBDb250cm9sbGVy SGFuZGxlICVseFxuIiwNCj4gQ29udHJvbGxlckhhbmRsZSkpOw0KPiA+ICsNCj4gPiArICBTdGF0 dXMgPSBnQlMtPk9wZW5Qcm90b2NvbCAoDQo+ID4gKyAgICAgICAgICAgICAgICAgIENvbnRyb2xs ZXJIYW5kbGUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICZnRWRrSUlVc2JFdGhQcm90b2NvbEd1 aWQsDQo+ID4gKyAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZVc2JFdGhQcm90b2NvbCwNCj4g PiArICAgICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gPiArICAg ICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gPiArICAgICAgICAgICAgICAgICAg RUZJX09QRU5fUFJPVE9DT0xfR0VUX1BST1RPQ09MDQo+ID4gKyAgICAgICAgICAgICAgICAgICk7 DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgU3RhdHVzID0gQ2hl Y2thbmRTdG9wUm5kaXNEZXZpY2UgKFRoaXMsIENvbnRyb2xsZXJIYW5kbGUpOw0KPiA+ICsgICAg cmV0dXJuIFN0YXR1czsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIFVzYlJuZGlzRGV2aWNlID0g VVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMgKFVzYkV0aFByb3RvY29sKTsNCj4gPiArDQo+ID4g KyAgU3RhdHVzID0gZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gPiArICAgICAgICAgICAgICAgICAg VXNiUm5kaXNEZXZpY2UtPlVzYkNkY0RhdGFIYW5kbGUsDQo+ID4gKyAgICAgICAgICAgICAgICAg ICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQsDQo+ID4gKyAgICAgICAgICAgICAgICAgIFRoaXMtPkRy aXZlckJpbmRpbmdIYW5kbGUsDQo+ID4gKyAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNl LT5Vc2JDZGNEYXRhSGFuZGxlDQo+ID4gKyAgICAgICAgICAgICAgICAgICk7DQo+ID4gKyAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVh OkNsb3NlUHJvdG9jb2wgc3RhdHVzID0gJXJcbiIsDQo+IF9fRlVOQ1RJT05fXywgU3RhdHVzKSk7 DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBnQlMtPlVuaW5zdGFsbFByb3RvY29s SW50ZXJmYWNlICgNCj4gPiArICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4g PiArICAgICAgICAgICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCj4gPiArICAg ICAgICAgICAgICAgICAgVXNiRXRoUHJvdG9jb2wNCj4gPiArICAgICAgICAgICAgICAgICAgKTsN Cj4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICByZXR1cm4gU3RhdHVz Ow0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gZ0JTLT5DbG9zZVByb3RvY29sICgN Cj4gPiArICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gPiArICAgICAgICAg ICAgICAgICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCj4gPiArICAgICAgICAgICAgICAgICAg VGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gPiArICAgICAgICAgICAgICAgICAgQ29udHJv bGxlckhhbmRsZQ0KPiA+ICsgICAgICAgICAgICAgICAgICApOw0KPiA+ICsNCj4gPiArICBGcmVl UG9vbCAoVXNiUm5kaXNEZXZpY2UtPkNvbmZpZyk7DQo+ID4gKyAgRnJlZVBvb2wgKFVzYlJuZGlz RGV2aWNlKTsNCj4gPiArDQo+ID4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiVXNiUm5kaXNEcml2 ZXJTdG9wICVyXG4iLCBTdGF0dXMpKTsNCj4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICsvKioNCj4gPiArICBFbnRyeXBvaW50IG9mIFJORElTIERyaXZlci4NCj4gPiAr DQo+ID4gKyAgVGhpcyBmdW5jdGlvbiBpcyB0aGUgZW50cnlwb2ludCBvZiBSTkRJUyBEcml2ZXIu IEl0IGluc3RhbGxzIERyaXZlciBCaW5kaW5nDQo+ID4gKyAgUHJvdG9jb2xzIHRvZ2V0aGVyIHdp dGggQ29tcG9uZW50IE5hbWUgUHJvdG9jb2xzLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBJ bWFnZUhhbmRsZSAgICAgICBUaGUgZmlybXdhcmUgYWxsb2NhdGVkIGhhbmRsZSBmb3IgdGhlIEVG SQ0KPiBpbWFnZS4NCj4gPiArICBAcGFyYW1baW5dICBTeXN0ZW1UYWJsZSAgICAgICBBIHBvaW50 ZXIgdG8gdGhlIEVGSSBTeXN0ZW0gVGFibGUuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NV Q0NFU1MgICAgICAgICAgIFRoZSBlbnRyeSBwb2ludCBpcyBleGVjdXRlZCBzdWNjZXNzZnVsbHku DQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArVXNi Um5kaXNFbnRyeSAoDQo+ID4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgSW1hZ2VIYW5kbGUsDQo+ ID4gKyAgSU4gRUZJX1NZU1RFTV9UQUJMRSAgKlN5c3RlbVRhYmxlDQo+ID4gKyAgKQ0KPiA+ICt7 DQo+ID4gKyAgZ1VzYlJuZGlzRHJpdmVyQmluZGluZy5Ecml2ZXJCaW5kaW5nSGFuZGxlID0gSW1h Z2VIYW5kbGU7DQo+ID4gKyAgZ1VzYlJuZGlzRHJpdmVyQmluZGluZy5JbWFnZUhhbmRsZSAgICAg ICAgID0gSW1hZ2VIYW5kbGU7DQo+ID4gKw0KPiA+ICsgIHJldHVybiBnQlMtPkluc3RhbGxNdWx0 aXBsZVByb3RvY29sSW50ZXJmYWNlcyAoDQo+ID4gKyAgICAgICAgICAgICAgICAmZ1VzYlJuZGlz RHJpdmVyQmluZGluZy5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiA+ICsgICAgICAgICAgICAgICAg JmdFZmlEcml2ZXJCaW5kaW5nUHJvdG9jb2xHdWlkLA0KPiA+ICsgICAgICAgICAgICAgICAgJmdV c2JSbmRpc0RyaXZlckJpbmRpbmcsDQo+ID4gKyAgICAgICAgICAgICAgICAmZ0VmaUNvbXBvbmVu dE5hbWUyUHJvdG9jb2xHdWlkLA0KPiA+ICsgICAgICAgICAgICAgICAgJmdVc2JSbmRpc0NvbXBv bmVudE5hbWUyLA0KPiA+ICsgICAgICAgICAgICAgICAgTlVMTA0KPiA+ICsgICAgICAgICAgICAg ICAgKTsNCj4gPiArfQ0KPiA+IGRpZmYgLS1naXQgYS9Vc2JOZXR3b3JrUGtnL1VzYlJuZGlzL1Vz YlJuZGlzLmgNCj4gYi9Vc2JOZXR3b3JrUGtnL1VzYlJuZGlzL1VzYlJuZGlzLmgNCj4gPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAuLjc3NTgwNzA0MjQNCj4gPiAt LS0gL2Rldi9udWxsDQo+ID4gKysrIGIvVXNiTmV0d29ya1BrZy9Vc2JSbmRpcy9Vc2JSbmRpcy5o DQo+ID4gQEAgLTAsMCArMSw1ODYgQEANCj4gPiArLyoqIEBmaWxlDQo+ID4gKyAgSGVhZGVyIGZp bGUgZm9yIGZvciBVU0IgUm5kaXMgZHJpdmVyDQo+ID4gKw0KPiA+ICsgIENvcHlyaWdodCAoYykg MjAyMywgQW1lcmljYW4gTWVnYXRyZW5kcyBJbnRlcm5hdGlvbmFsIExMQy4gQWxsIHJpZ2h0cw0K PiByZXNlcnZlZC48QlI+DQo+ID4gKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNs YXVzZS1QYXRlbnQNCj4gPiArKiovDQo+ID4gKw0KPiA+ICsjaWZuZGVmIF9VU0JfUk5ESVNfSF8N Cj4gPiArI2RlZmluZSBfVVNCX1JORElTX0hfDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8TGlicmFy eS9VZWZpRHJpdmVyRW50cnlQb2ludC5oPg0KPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpQm9v dFNlcnZpY2VzVGFibGVMaWIuaD4NCj4gPiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaUxpYi5oPg0K PiA+ICsjaW5jbHVkZSA8TGlicmFyeS9EZXZpY2VQYXRoTGliLmg+DQo+ID4gKyNpbmNsdWRlIDxM aWJyYXJ5L0RlYnVnTGliLmg+DQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRp b25MaWIuaD4NCj4gPiArI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KPiA+ICsj aW5jbHVkZSA8TGlicmFyeS9VZWZpVXNiTGliLmg+DQo+ID4gKyNpbmNsdWRlIDxQcm90b2NvbC9V c2JJby5oPg0KPiA+ICsjaW5jbHVkZSA8UHJvdG9jb2wvRWRrSUlVc2JFdGhlcm5ldFByb3RvY29s Lmg+DQo+ID4gKw0KPiA+ICt0eXBlZGVmIHN0cnVjdCBfUkVNT1RFX05ESVNfTVNHX0hFQURFUg0K PiBSRU1PVEVfTkRJU19NU0dfSEVBREVSOw0KPiA+ICsNCj4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0K PiA+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICBTaWduYXR1cmU7DQo+ID4gKyAg RURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAgIFVzYkV0aDsNCj4gPiArICBFRklfSEFORExF ICAgICAgICAgICAgICAgICAgICAgVXNiQ2RjRGF0YUhhbmRsZTsNCj4gPiArICBFRklfSEFORExF ICAgICAgICAgICAgICAgICAgICAgVXNiUm5kaXNIYW5kbGU7DQo+ID4gKyAgRUZJX1VTQl9JT19Q Uk9UT0NPTCAgICAgICAgICAgICpVc2JJbzsNCj4gPiArICBFRklfVVNCX0lPX1BST1RPQ09MICAg ICAgICAgICAgKlVzYklvQ2RjRGF0YTsNCj4gPiArICBFRklfVVNCX0NPTkZJR19ERVNDUklQVE9S ICAgICAgKkNvbmZpZzsNCj4gPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgTnVt T2ZJbnRlcmZhY2U7DQo+ID4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgIEJ1bGtJ bkVuZHBvaW50Ow0KPiA+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICBCdWxrT3V0 RW5kcG9pbnQ7DQo+ID4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgIEludGVycnVw RW5kcG9pbnQ7DQo+ID4gKyAgRUZJX01BQ19BRERSRVNTICAgICAgICAgICAgICAgIE1hY0FkZHJl c3M7DQo+ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgIFJlcXVlc3RJZDsNCj4g PiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgTWVkaXVtOw0KPiA+ICsgIFVJTlQz MiAgICAgICAgICAgICAgICAgICAgICAgICBNYXhQYWNrZXRzUGVyVHJhbnNmZXI7DQo+ID4gKyAg VUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgIE1heFRyYW5zZmVyU2l6ZTsNCj4gPiArICBV SU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgUGFja2V0QWxpZ25tZW50RmFjdG9yOw0KPiA+ ICsgIExJU1RfRU5UUlkgICAgICAgICAgICAgICAgICAgICBSZWNlaXZlUGFja2V0TGlzdDsNCj4g PiArfSBVU0JfUk5ESVNfREVWSUNFOw0KPiA+ICsNCj4gPiArI2RlZmluZSBVU0JfUk5ESVNfRFJJ VkVSX1ZFUlNJT04gICAgICAgMQ0KPiA+ICsjZGVmaW5lIFVTQl9UWF9FVEhFUk5FVF9CVUxLX1RJ TUVPVVQgICAzMDAwDQo+ID4gKyNkZWZpbmUgVVNCX1JYX0VUSEVSTkVUX0JVTEtfVElNRU9VVCAg IDMNCj4gPiArI2RlZmluZSBVU0JfRVRIRVJORVRfVFJBTlNGRVJfVElNRU9VVCAgMjAwDQo+ID4g Kw0KPiA+ICsjZGVmaW5lIExBTl9CVUxLSU5fQ01EX0NPTlRST0wgICAgICAxDQo+ID4gKyNkZWZp bmUgTUFYSU1VTV9TVE9QQlVMS0lOX0NOVCAgICAgIDMwMCAgICAgICAgLy8gSW5kaWNhdGluZyBt YXhpbXVtDQo+IGNvdW50cyBmb3Igd2FpdGluZyBidWxrIGluIGNvbW1hbmQNCj4gPiArI2RlZmlu ZSBNSU5JTVVNX1NUT1BCVUxLSU5fQ05UICAgICAgMyAgICAgICAgICAvLyBJbmRpY2F0aW5nIG1p bmltdW0NCj4gY291bnRzIGZvciB3YWl0aW5nIGJ1bGsgaW4gY29tbWFuZA0KPiA+ICsjZGVmaW5l IEJVTEtJTl9DTURfUE9MTElOR19DTlQgICAgICAzMDAgICAgICAgIC8vIEluZGljYXRpbmcgdGhl IHdhaXRpbmcNCj4gY291bnRzIGZvciBzZW5kIGJ1bGsgaW4gY29tbWFuZCB3aGVuIHN5c3RlbSBw ZW5kaW5nDQo+ID4gKyNkZWZpbmUgUk5ESVNfUkVTRVJWRURfQllURV9MRU5HVEggIDgNCj4gPiAr DQo+ID4gKyNkZWZpbmUgVVNCX1JORElTX1NJR05BVFVSRSAgU0lHTkFUVVJFXzMyKCdyJywgJ24n LCAnZCcsICdzJykNCj4gPiArI2RlZmluZSBVU0JfUk5ESVNfREVWSUNFX0ZST01fVEhJUyhhKSAg Q1IgKGEsIFVTQl9STkRJU19ERVZJQ0UsDQo+IFVzYkV0aCwgVVNCX1JORElTX1NJR05BVFVSRSkN Cj4gPiArDQo+ID4gK2V4dGVybiBFRklfQ09NUE9ORU5UX05BTUUyX1BST1RPQ09MDQo+IGdVc2JS bmRpc0NvbXBvbmVudE5hbWUyOw0KPiA+ICsNCj4gPiArc3RydWN0IEJJVF9NQVAgew0KPiA+ICsg IHVuc2lnbmVkIGludCAgICBTcmM7DQo+ID4gKyAgdW5zaWduZWQgaW50ICAgIERzdDsNCj4gPiAr fTsNCj4gPiArDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ID4gK1VzYlJuZGlzRHJp dmVyU3VwcG9ydGVkICgNCj4gPiArICBJTiBFRklfRFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgICpU aGlzLA0KPiA+ICsgIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhh bmRsZSwNCj4gPiArICBJTiBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICAgICpSZW1haW5pbmdE ZXZpY2VQYXRoDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArRUZJQVBJ DQo+ID4gK1VzYlJuZGlzRHJpdmVyU3RhcnQgKA0KPiA+ICsgIElOIEVGSV9EUklWRVJfQklORElO R19QUk9UT0NPTCAgKlRoaXMsDQo+ID4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAg ICBDb250cm9sbGVySGFuZGxlLA0KPiA+ICsgIElOIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAg ICAgKlJlbWFpbmluZ0RldmljZVBhdGgNCj4gPiArICApOw0KPiA+ICsNCj4gPiArRUZJX1NUQVRV Uw0KPiA+ICtFRklBUEkNCj4gPiArVXNiUm5kaXNEcml2ZXJTdG9wICgNCj4gPiArICBJTiAgRUZJ X0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICAqVGhpcywNCj4gPiArICBJTiAgRUZJX0hBTkRMRSAg ICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiA+ICsgIElOICBVSU5UTiAgICAg ICAgICAgICAgICAgICAgICAgIE51bWJlck9mQ2hpbGRyZW4sDQo+ID4gKyAgSU4gIEVGSV9IQU5E TEUgICAgICAgICAgICAgICAgICAgKkNoaWxkSGFuZGxlQnVmZmVyDQo+ID4gKyAgKTsNCj4gPiAr DQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArTG9hZEFsbERlc2NyaXB0b3IgKA0KPiA+ICsgIElOICBF RklfVVNCX0lPX1BST1RPQ09MICAgICAgICAqVXNiSW8sDQo+ID4gKyAgT1VUIEVGSV9VU0JfQ09O RklHX0RFU0NSSVBUT1IgICoqQ29uZmlnRGVzYw0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICtCT09M RUFODQo+ID4gK05leHREZXNjcmlwdG9yICgNCj4gPiArICBJTiBFRklfVVNCX0NPTkZJR19ERVND UklQVE9SICAqRGVzYywNCj4gPiArICBJTiBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICAqT2Zm c2V0DQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArR2V0RnVuY3Rpb25h bERlc2NyaXB0b3IgKA0KPiA+ICsgIElOICBFRklfVVNCX0NPTkZJR19ERVNDUklQVE9SICAqQ29u ZmlnLA0KPiA+ICsgIElOICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICBGdW5EZXNjcmlwdG9y VHlwZSwNCj4gPiArICBPVVQgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgKkRhdGFCdWZmZXIN Cj4gPiArICApOw0KPiA+ICsNCj4gPiArVk9JRA0KPiA+ICtHZXRFbmRwb2ludCAoDQo+ID4gKyAg SU4gICAgICBFRklfVVNCX0lPX1BST1RPQ09MICAqVXNiSW8sDQo+ID4gKyAgSU4gT1VUICBVU0Jf Uk5ESVNfREVWSUNFICAgICAqVXNiUm5kaXNEZXZpY2UNCj4gPiArICApOw0KPiA+ICsNCj4gPiAr RUZJX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArVXNiUm5kaXNJbnRlcnJ1cHQgKA0KPiA+ICsg IElOIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ID4gKyAgSU4gQk9PTEVB TiAgICAgICAgICAgICAgICAgICAgICBJc05ld1RyYW5zZmVyLA0KPiA+ICsgIElOIFVJTlROICAg ICAgICAgICAgICAgICAgICAgICAgUG9sbGluZ0ludGVydmFsLA0KPiA+ICsgIElOIEVGSV9VU0Jf REVWSUNFX1JFUVVFU1QgICAgICAgKlJlcXVzdA0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICtFRklf U1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtJbnRlcnJ1cHRDYWxsYmFjayAoDQo+ID4gKyAgSU4g IFZPSUQgICAgKkRhdGEsDQo+ID4gKyAgSU4gIFVJTlROICAgRGF0YUxlbmd0aCwNCj4gPiArICBJ TiAgVk9JRCAgICAqQ29udGV4dCwNCj4gPiArICBJTiAgVUlOVDMyICBTdGF0dXMNCj4gPiArICAp Ow0KPiA+ICsNCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArR2V0VXNiRXRoTWFj QWRkcmVzcyAoDQo+ID4gKyAgSU4gIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMs DQo+ID4gKyAgT1VUIEVGSV9NQUNfQUREUkVTUyAgICAgICAgICAgICAgKk1hY0FkZHJlc3MNCj4g PiArICApOw0KPiA+ICsNCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArVXNiRXRo QnVsa1NpemUgKA0KPiA+ICsgIElOICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlz LA0KPiA+ICsgIE9VVCBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICpCdWxrU2l6ZQ0KPiA+ ICsgICk7DQo+ID4gKw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtSbmRpc0R1 bW15UmV0dXJuICgNCj4gPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ID4gKyAgSU4gIE5JQ19E QVRBICAqTmljDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArRUZJQVBJ DQo+ID4gK1JuZGlzVW5kaVN0YXJ0ICgNCj4gPiArICBJTiBQWEVfQ0RCICAgKkNkYiwNCj4gPiAr ICBJTiBOSUNfREFUQSAgKk5pYw0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICtFRklfU1RBVFVTDQo+ ID4gK0VGSUFQSQ0KPiA+ICtSbmRpc1VuZGlTdG9wICgNCj4gPiArICBJTiBQWEVfQ0RCICAgKkNk YiwNCj4gPiArICBJTiBOSUNfREFUQSAgKk5pYw0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICtFRklf U1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtSbmRpc1VuZGlHZXRJbml0SW5mbyAoDQo+ID4gKyAg SU4gUFhFX0NEQiAgICpDZGIsDQo+ID4gKyAgSU4gTklDX0RBVEEgICpOaWMNCj4gPiArICApOw0K PiA+ICsNCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArUm5kaXNVbmRpR2V0Q29u ZmlnSW5mbyAoDQo+ID4gKyAgSU4gUFhFX0NEQiAgICpDZGIsDQo+ID4gKyAgSU4gTklDX0RBVEEg ICpOaWMNCj4gPiArICApOw0KPiA+ICsNCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4g PiArUm5kaXNVbmRpSW5pdGlhbGl6ZSAoDQo+ID4gKyAgSU4gUFhFX0NEQiAgICpDZGIsDQo+ID4g KyAgSU4gTklDX0RBVEEgICpOaWMNCj4gPiArICApOw0KPiA+ICsNCj4gPiArRUZJX1NUQVRVUw0K PiA+ICtFRklBUEkNCj4gPiArUm5kaXNVbmRpVHJhbnNtaXQgKA0KPiA+ICsgIElOICAgICAgUFhF X0NEQiAgICAgICAgICAgICAgICAgICAgICAqQ2RiLA0KPiA+ICsgIElOICAgICAgRURLSUlfVVNC X0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4gPiArICBJTiAgICAgIFZPSUQgICAgICAgICAg ICAgICAgICAgICAgICAgKkJ1bGtPdXREYXRhLA0KPiA+ICsgIElOIE9VVCAgVUlOVE4gICAgICAg ICAgICAgICAgICAgICAgICAqRGF0YUxlbmd0aA0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICtFRklf U1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtSbmRpc1VuZGlSZWNlaXZlICgNCj4gPiArICBJTiAg ICAgUFhFX0NEQiAgICAgICAgICAgICAgICAgICAgICAqQ2RiLA0KPiA+ICsgIElOICAgICBFREtJ SV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiA+ICsgIElOIE9VVCBWT0lEICAgICAg ICAgICAgICAgICAgICAgICAgICpCdWxrSW5EYXRhLA0KPiA+ICsgIElOIE9VVCBVSU5UTiAgICAg ICAgICAgICAgICAgICAgICAgICpEYXRhTGVuZ3RoDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gK0VG SV9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ID4gK1JuZGlzVW5kaVJlc2V0ICgNCj4gPiArICBJTiBQ WEVfQ0RCICAgKkNkYiwNCj4gPiArICBJTiBOSUNfREFUQSAgKk5pYw0KPiA+ICsgICk7DQo+ID4g Kw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtSbmRpc1VuZGlTaHV0ZG93biAo DQo+ID4gKyAgSU4gUFhFX0NEQiAgICpDZGIsDQo+ID4gKyAgSU4gTklDX0RBVEEgICpOaWMNCj4g PiArICApOw0KPiA+ICsNCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArUm5kaXNV bmRpUmVjZWl2ZUZpbHRlciAoDQo+ID4gKyAgSU4gUFhFX0NEQiAgICpDZGIsDQo+ID4gKyAgSU4g TklDX0RBVEEgICpOaWMNCj4gPiArICApOw0KPiA+ICsNCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtF RklBUEkNCj4gPiArUm5kaXNVbmRpR2V0U3RhdHVzICgNCj4gPiArICBJTiBQWEVfQ0RCICAgKkNk YiwNCj4gPiArICBJTiBOSUNfREFUQSAgKk5pYw0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICtFRklf U1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtHZXRVc2JIZWFkZXJGdW5EZXNjcmlwdG9yICgNCj4g PiArICBJTiAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4gPiArICBPVVQg VVNCX0hFQURFUl9GVU5fREVTQ1JJUFRPUiAgICAqVXNiSGVhZGVyRnVuRGVzY3JpcHRvcg0KPiA+ ICsgICk7DQo+ID4gKw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtHZXRVc2JV bmlvbkZ1bkRlc2NyaXB0b3IgKA0KPiA+ICsgIElOICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9D T0wgICpUaGlzLA0KPiA+ICsgIE9VVCBVU0JfVU5JT05fRlVOX0RFU0NSSVBUT1IgICAgICpVc2JV bmlvbkZ1bkRlc2NyaXB0b3INCj4gPiArICApOw0KPiA+ICsNCj4gPiArRUZJX1NUQVRVUw0KPiA+ ICtFRklBUEkNCj4gPiArR2V0VXNiUm5kaXNGdW5EZXNjcmlwdG9yICgNCj4gPiArICBJTiAgRURL SUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4gPiArICBPVVQgVVNCX0VUSEVSTkVU X0ZVTl9ERVNDUklQVE9SICAqVXNiRXRoRnVuRGVzY3JpcHRvcg0KPiA+ICsgICk7DQo+ID4gKw0K PiA+ICtFRklfU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtTZXRVc2JSbmRpc01jYXN0RmlsdGVy ICgNCj4gPiArICBJTiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiA+ICsg IElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUsDQo+ID4gKyAgSU4gVk9JRCAg ICAgICAgICAgICAgICAgICAgICAgICAqTWNhc3RBZGRyDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4g K0VGSV9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ID4gK1NldFVzYlJuZGlzUG93ZXJGaWx0ZXIgKA0K PiA+ICsgIElOIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ID4gKyAgSU4g VUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSwNCj4gPiArICBJTiBVSU5UMTYgICAg ICAgICAgICAgICAgICAgICAgIExlbmd0aCwNCj4gPiArICBJTiBWT0lEICAgICAgICAgICAgICAg ICAgICAgICAgICpQYXR0ZXJuRmlsdGVyDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gK0VGSV9TVEFU VVMNCj4gPiArRUZJQVBJDQo+ID4gK0dldFVzYlJuZGlzUG93ZXJGaWx0ZXIgKA0KPiA+ICsgIElO IEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ID4gKyAgSU4gVUlOVDE2ICAg ICAgICAgICAgICAgICAgICAgICBWYWx1ZSwNCj4gPiArICBJTiBCT09MRUFOICAgICAgICAgICAg ICAgICAgICAgICpQYXR0ZXJuQWN0aXZlDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gK0VGSV9TVEFU VVMNCj4gPiArRUZJQVBJDQo+ID4gK1NldFVzYlJuZGlzUGFja2V0RmlsdGVyICgNCj4gPiArICBJ TiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiA+ICsgIElOIFVJTlQxNiAg ICAgICAgICAgICAgICAgICAgICAgVmFsdWUNCj4gPiArICApOw0KPiA+ICsNCj4gPiArRUZJX1NU QVRVUw0KPiA+ICtFRklBUEkNCj4gPiArR2V0Um5kaXNTdGF0aXN0aWMgKA0KPiA+ICsgIElOIEVE S0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ID4gKyAgSU4gVUlOVDE2ICAgICAg ICAgICAgICAgICAgICAgICBWYWx1ZSwNCj4gPiArICBJTiBWT0lEICAgICAgICAgICAgICAgICAg ICAgICAgICpTdGF0aXN0aWMNCj4gPiArICApOw0KPiA+ICsNCj4gPiArRUZJX1NUQVRVUw0KPiA+ ICtSbmRpc0NvbnRyb2xNc2cgKA0KPiA+ICsgIElOICBVU0JfUk5ESVNfREVWSUNFICAgICAgICAq VXNiUm5kaXNEZXZpY2UsDQo+ID4gKyAgSU4gIFJFTU9URV9ORElTX01TR19IRUFERVIgICpSbmRp c01zZywNCj4gPiArICBPVVQgUkVNT1RFX05ESVNfTVNHX0hFQURFUiAgKlJuZGlzTXNnUmVzcG9u c2UNCj4gPiArICApOw0KPiA+ICsNCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtSbmRpc1RyYW5zbWl0 RGF0YU1zZyAoDQo+ID4gKyAgSU4gIFVTQl9STkRJU19ERVZJQ0UgICAgICAgICpVc2JSbmRpc0Rl dmljZSwNCj4gPiArICBJTiAgUkVNT1RFX05ESVNfTVNHX0hFQURFUiAgKlJuZGlzTXNnLA0KPiA+ ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAqVHJhbnNmZXJMZW5ndGgNCj4gPiArICAp Ow0KPiA+ICsNCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtSbmRpc1JlY2VpdmVEYXRhTXNnICgNCj4g PiArICBJTiAgVVNCX1JORElTX0RFVklDRSAgICAgICAgKlVzYlJuZGlzRGV2aWNlLA0KPiA+ICsg IElOICBSRU1PVEVfTkRJU19NU0dfSEVBREVSICAqUm5kaXNNc2csDQo+ID4gKyAgVUlOVE4gICAg ICAgICAgICAgICAgICAgICAgICpUcmFuc2Zlckxlbmd0aA0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ ICtWT0lEDQo+ID4gK1ByaW50Um5kaXNNc2cgKA0KPiA+ICsgIElOICBSRU1PVEVfTkRJU19NU0df SEVBREVSICAqUm5kaXNNc2cNCj4gPiArICApOw0KPiA+ICsNCj4gPiArI2RlZmluZSBSTkRJU19N QUpPUl9WRVJTSU9OICAgICAgMHgwMDAwMDAwMQ0KPiA+ICsjZGVmaW5lIFJORElTX01JTk9SX1ZF UlNJT04gICAgICAweDAwMDAwMDAwDQo+ID4gKyNkZWZpbmUgUk5ESVNfTUFYX1RSQU5TRkVSX1NJ WkUgIDB4NDAwMA0KPiA+ICsNCj4gPiArI2RlZmluZSBSTkRJU19QQUNLRVRfTVNHICAgICAgICAg ICAweDAwMDAwMDAxDQo+ID4gKyNkZWZpbmUgUk5ESVNfSU5JVElBTElaRV9NU0cgICAgICAgMHgw MDAwMDAwMg0KPiA+ICsjZGVmaW5lIFJORElTX0lOSVRJQUxJWkVfQ01QTFQgICAgIDB4ODAwMDAw MDINCj4gPiArI2RlZmluZSBSTkRJU19ITFRfTVNHICAgICAgICAgICAgICAweDAwMDAwMDAzDQo+ ID4gKyNkZWZpbmUgUk5ESVNfUVVFUllfTVNHICAgICAgICAgICAgMHgwMDAwMDAwNA0KPiA+ICsj ZGVmaW5lIFJORElTX1FVRVJZX0NNUExUICAgICAgICAgIDB4ODAwMDAwMDQNCj4gPiArI2RlZmlu ZSBSTkRJU19TRVRfTVNHICAgICAgICAgICAgICAweDAwMDAwMDA1DQo+ID4gKyNkZWZpbmUgUk5E SVNfU0VUX0NNUExUICAgICAgICAgICAgMHg4MDAwMDAwNQ0KPiA+ICsjZGVmaW5lIFJORElTX1JF U0VUX01TRyAgICAgICAgICAgIDB4MDAwMDAwMDYNCj4gPiArI2RlZmluZSBSTkRJU19SRVNFVF9D TVBMVCAgICAgICAgICAweDgwMDAwMDA2DQo+ID4gKyNkZWZpbmUgUk5ESVNfSU5ESUNBVEVfU1RB VFVTX01TRyAgMHgwMDAwMDAwNw0KPiA+ICsjZGVmaW5lIFJORElTX0tFRVBBTElWRV9NU0cgICAg ICAgIDB4MDAwMDAwMDgNCj4gPiArI2RlZmluZSBSTkRJU19LRUVQQUxJVkVfQ01QTFQgICAgICAw eDgwMDAwMDA4DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFJORElTX1NUQVRVU19TVUNDRVNTICAgICAg ICAgICAweDAwMDAwMDAwDQo+ID4gKyNkZWZpbmUgUk5ESVNfU1RBVFVTX0ZBSUxVUkUgICAgICAg ICAgIDB4QzAwMDAwMDENCj4gPiArI2RlZmluZSBSTkRJU19TVEFUVVNfSU5WQUxJRF9EQVRBICAg ICAgMHhDMDAxMDAxNQ0KPiA+ICsjZGVmaW5lIFJORElTX1NUQVRVU19OT1RfU1VQUE9SVEVEICAg ICAweEMwMDAwMEJCDQo+ID4gKyNkZWZpbmUgUk5ESVNfU1RBVFVTX01FRElBX0NPTk5FQ1QgICAg IDB4NDAwMTAwMEINCj4gPiArI2RlZmluZSBSTkRJU19TVEFUVVNfTUVESUFfRElTQ09OTkVDVCAg MHg0MDAxMDAwQw0KPiA+ICsNCj4gPiArI2RlZmluZSBSTkRJU19DT05UUk9MX1RJTUVPVVQgICAg MTAwMDAgICAgICAgICAgICAvLyAxMHNlYw0KPiA+ICsjZGVmaW5lIFJORElTX0tFRVBBTElWRV9U SU1FT1VUICA1MDAwICAgICAgICAgICAgIC8vIDVzZWMNCj4gPiArDQo+ID4gKyNkZWZpbmUgU0VO RF9FTkNBUFNVTEFURURfQ09NTUFORCAgMHgwMDAwMDAwMA0KPiA+ICsjZGVmaW5lIEdFVF9FTkNB UFNVTEFURURfUkVTUE9OU0UgIDB4MDAwMDAwMDENCj4gPiArDQo+ID4gKy8vDQo+ID4gKy8vIEdl bmVyYWwgT2JqZWN0cw0KPiA+ICsvLw0KPiA+ICsvLyBUYWtlbiBmcm9tIE5URERORElTLkgNCj4g PiArI2RlZmluZSBPSURfR0VOX1NVUFBPUlRFRF9MSVNUICAgICAgICAgMHgwMDAxMDEwMQ0KPiA+ ICsjZGVmaW5lIE9JRF9HRU5fSEFSRFdBUkVfU1RBVFVTICAgICAgICAweDAwMDEwMTAyDQo+ID4g KyNkZWZpbmUgT0lEX0dFTl9NRURJQV9TVVBQT1JURUQgICAgICAgIDB4MDAwMTAxMDMNCj4gPiAr I2RlZmluZSBPSURfR0VOX01FRElBX0lOX1VTRSAgICAgICAgICAgMHgwMDAxMDEwNA0KPiA+ICsj ZGVmaW5lIE9JRF9HRU5fTUFYSU1VTV9MT09LQUhFQUQgICAgICAweDAwMDEwMTA1DQo+ID4gKyNk ZWZpbmUgT0lEX0dFTl9NQVhJTVVNX0ZSQU1FX1NJWkUgICAgIDB4MDAwMTAxMDYNCj4gPiArI2Rl ZmluZSBPSURfR0VOX0xJTktfU1BFRUQgICAgICAgICAgICAgMHgwMDAxMDEwNw0KPiA+ICsjZGVm aW5lIE9JRF9HRU5fVFJBTlNNSVRfQlVGRkVSX1NQQUNFICAweDAwMDEwMTA4DQo+ID4gKyNkZWZp bmUgT0lEX0dFTl9SRUNFSVZFX0JVRkZFUl9TUEFDRSAgIDB4MDAwMTAxMDkNCj4gPiArI2RlZmlu ZSBPSURfR0VOX1RSQU5TTUlUX0JMT0NLX1NJWkUgICAgMHgwMDAxMDEwQQ0KPiA+ICsjZGVmaW5l IE9JRF9HRU5fUkVDRUlWRV9CTE9DS19TSVpFICAgICAweDAwMDEwMTBCDQo+ID4gKyNkZWZpbmUg T0lEX0dFTl9WRU5ET1JfSUQgICAgICAgICAgICAgIDB4MDAwMTAxMEMNCj4gPiArI2RlZmluZSBP SURfR0VOX1ZFTkRPUl9ERVNDUklQVElPTiAgICAgMHgwMDAxMDEwRA0KPiA+ICsjZGVmaW5lIE9J RF9HRU5fQ1VSUkVOVF9QQUNLRVRfRklMVEVSICAweDAwMDEwMTBFDQo+ID4gKyNkZWZpbmUgT0lE X0dFTl9DVVJSRU5UX0xPT0tBSEVBRCAgICAgIDB4MDAwMTAxMEYNCj4gPiArI2RlZmluZSBPSURf R0VOX0RSSVZFUl9WRVJTSU9OICAgICAgICAgMHgwMDAxMDExMA0KPiA+ICsjZGVmaW5lIE9JRF9H RU5fTUFYSU1VTV9UT1RBTF9TSVpFICAgICAweDAwMDEwMTExDQo+ID4gKyNkZWZpbmUgT0lEX0dF Tl9QUk9UT0NPTF9PUFRJT05TICAgICAgIDB4MDAwMTAxMTINCj4gPiArI2RlZmluZSBPSURfR0VO X01BQ19PUFRJT05TICAgICAgICAgICAgMHgwMDAxMDExMw0KPiA+ICsjZGVmaW5lIE9JRF9HRU5f TUVESUFfQ09OTkVDVF9TVEFUVVMgICAweDAwMDEwMTE0DQo+ID4gKyNkZWZpbmUgT0lEX0dFTl9N QVhJTVVNX1NFTkRfUEFDS0VUUyAgIDB4MDAwMTAxMTUNCj4gPiArI2RlZmluZSBPSURfR0VOX1ZF TkRPUl9EUklWRVJfVkVSU0lPTiAgMHgwMDAxMDExNg0KPiA+ICsNCj4gPiArI2RlZmluZSBPSURf R0VOX1hNSVRfT0sgICAgICAgIDB4MDAwMjAxMDENCj4gPiArI2RlZmluZSBPSURfR0VOX1JDVl9P SyAgICAgICAgIDB4MDAwMjAxMDINCj4gPiArI2RlZmluZSBPSURfR0VOX1hNSVRfRVJST1IgICAg IDB4MDAwMjAxMDMNCj4gPiArI2RlZmluZSBPSURfR0VOX1JDVl9FUlJPUiAgICAgIDB4MDAwMjAx MDQNCj4gPiArI2RlZmluZSBPSURfR0VOX1JDVl9OT19CVUZGRVIgIDB4MDAwMjAxMDUNCj4gPiAr DQo+ID4gKyNkZWZpbmUgT0lEX0dFTl9ESVJFQ1RFRF9CWVRFU19YTUlUICAgIDB4MDAwMjAyMDEN Cj4gPiArI2RlZmluZSBPSURfR0VOX0RJUkVDVEVEX0ZSQU1FU19YTUlUICAgMHgwMDAyMDIwMg0K PiA+ICsjZGVmaW5lIE9JRF9HRU5fTVVMVElDQVNUX0JZVEVTX1hNSVQgICAweDAwMDIwMjAzDQo+ ID4gKyNkZWZpbmUgT0lEX0dFTl9NVUxUSUNBU1RfRlJBTUVTX1hNSVQgIDB4MDAwMjAyMDQNCj4g PiArI2RlZmluZSBPSURfR0VOX0JST0FEQ0FTVF9CWVRFU19YTUlUICAgMHgwMDAyMDIwNQ0KPiA+ ICsjZGVmaW5lIE9JRF9HRU5fQlJPQURDQVNUX0ZSQU1FU19YTUlUICAweDAwMDIwMjA2DQo+ID4g KyNkZWZpbmUgT0lEX0dFTl9ESVJFQ1RFRF9CWVRFU19SQ1YgICAgIDB4MDAwMjAyMDcNCj4gPiAr I2RlZmluZSBPSURfR0VOX0RJUkVDVEVEX0ZSQU1FU19SQ1YgICAgMHgwMDAyMDIwOA0KPiA+ICsj ZGVmaW5lIE9JRF9HRU5fTVVMVElDQVNUX0JZVEVTX1JDViAgICAweDAwMDIwMjA5DQo+ID4gKyNk ZWZpbmUgT0lEX0dFTl9NVUxUSUNBU1RfRlJBTUVTX1JDViAgIDB4MDAwMjAyMEENCj4gPiArI2Rl ZmluZSBPSURfR0VOX0JST0FEQ0FTVF9CWVRFU19SQ1YgICAgMHgwMDAyMDIwQg0KPiA+ICsjZGVm aW5lIE9JRF9HRU5fQlJPQURDQVNUX0ZSQU1FU19SQ1YgICAweDAwMDIwMjBDDQo+ID4gKyNkZWZp bmUgT0lEX0dFTl9SQ1ZfQ1JDX0VSUk9SICAgICAgICAgIDB4MDAwMjAyMEQNCj4gPiArI2RlZmlu ZSBPSURfR0VOX1RSQU5TTUlUX1FVRVVFX0xFTkdUSCAgMHgwMDAyMDIwRQ0KPiA+ICsNCj4gPiAr I2RlZmluZSBPSURfODAyXzNfQ1VSUkVOVF9BRERSRVNTICAweDAxMDEwMTAyDQo+ID4gKy8vDQo+ ID4gKy8vIE5kaXMgUGFja2V0IEZpbHRlciBCaXRzIChPSURfR0VOX0NVUlJFTlRfUEFDS0VUX0ZJ TFRFUikuDQo+ID4gKy8vDQo+ID4gKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9ESVJFQ1RFRCAg ICAgICAgMHgwMDAxDQo+ID4gKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9NVUxUSUNBU1QgICAg ICAgMHgwMDAyDQo+ID4gKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUICAg MHgwMDA0DQo+ID4gKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9CUk9BRENBU1QgICAgICAgMHgw MDA4DQo+ID4gKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9TT1VSQ0VfUk9VVElORyAgMHgwMDEw DQo+ID4gKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9QUk9NSVNDVU9VUyAgICAgMHgwMDIwDQo+ ID4gKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9TTVQgICAgICAgICAgICAgMHgwMDQwDQo+ID4g KyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9BTExfTE9DQUwgICAgICAgMHgwMDgwDQo+ID4gKyNk ZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9NQUNfRlJBTUUgICAgICAgMHg4MDAwDQo+ID4gKyNkZWZp bmUgTkRJU19QQUNLRVRfVFlQRV9GVU5DVElPTkFMICAgICAgMHg0MDAwDQo+ID4gKyNkZWZpbmUg TkRJU19QQUNLRVRfVFlQRV9BTExfRlVOQ1RJT05BTCAgMHgyMDAwDQo+ID4gKyNkZWZpbmUgTkRJ U19QQUNLRVRfVFlQRV9HUk9VUCAgICAgICAgICAgMHgxMDAwDQo+ID4gKw0KPiA+ICsjcHJhZ21h IHBhY2soMSkNCj4gPiArDQo+ID4gK3R5cGVkZWYgc3RydWN0IF9SRU1PVEVfTkRJU19NU0dfSEVB REVSIHsNCj4gPiArICBVSU5UMzIgICAgTWVzc2FnZVR5cGU7DQo+ID4gKyAgVUlOVDMyICAgIE1l c3NhZ2VMZW5ndGg7DQo+ID4gK30gUkVNT1RFX05ESVNfTVNHX0hFQURFUjsNCj4gPiArDQo+ID4g K3R5cGVkZWYgc3RydWN0IHsNCj4gPiArICBVSU5UMzIgICAgTWVzc2FnZVR5cGU7DQo+ID4gKyAg VUlOVDMyICAgIE1lc3NhZ2VMZW5ndGg7DQo+ID4gKyAgVUlOVDMyICAgIFJlcXVlc3RJRDsNCj4g PiArICBVSU5UMzIgICAgTWFqb3JWZXJzaW9uOw0KPiA+ICsgIFVJTlQzMiAgICBNaW5vclZlcnNp b247DQo+ID4gKyAgVUlOVDMyICAgIE1heFRyYW5zZmVyU2l6ZTsNCj4gPiArfSBSRU1PVEVfTkRJ U19JTklUSUFMSVpFX01TRzsNCj4gPiArDQo+ID4gK3R5cGVkZWYgc3RydWN0IHsNCj4gPiArICBV SU5UMzIgICAgTWVzc2FnZVR5cGU7DQo+ID4gKyAgVUlOVDMyICAgIE1lc3NhZ2VMZW5ndGg7DQo+ ID4gKyAgVUlOVDMyICAgIFJlcXVlc3RJRDsNCj4gPiArfSBSRU1PVEVfTkRJU19IQUxUX01TRzsN Cj4gPiArDQo+ID4gK3R5cGVkZWYgc3RydWN0IHsNCj4gPiArICBVSU5UMzIgICAgTWVzc2FnZVR5 cGU7DQo+ID4gKyAgVUlOVDMyICAgIE1lc3NhZ2VMZW5ndGg7DQo+ID4gKyAgVUlOVDMyICAgIFJl cXVlc3RJRDsNCj4gPiArICBVSU5UMzIgICAgT2lkOw0KPiA+ICsgIFVJTlQzMiAgICBJbmZvcm1h dGlvbkJ1ZmZlckxlbmd0aDsNCj4gPiArICBVSU5UMzIgICAgSW5mb3JtYXRpb25CdWZmZXJPZmZz ZXQ7DQo+ID4gKyAgVUlOVDMyICAgIFJlc2VydmVkOw0KPiA+ICt9IFJFTU9URV9ORElTX1FVRVJZ X01TRzsNCj4gPiArDQo+ID4gK3R5cGVkZWYgc3RydWN0IHsNCj4gPiArICBSRU1PVEVfTkRJU19R VUVSWV9NU0cgICAgUXVlcnlNc2c7DQo+ID4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgIEFk ZHJbNl07DQo+ID4gK30gUkVNT1RFX05ESVNfUVVFUllfTUFDX01TRzsNCj4gPiArDQo+ID4gK3R5 cGVkZWYgc3RydWN0IHsNCj4gPiArICBSRU1PVEVfTkRJU19RVUVSWV9NU0cgICAgUXVlcnlNc2c7 DQo+ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgIE1heFRvdGFsU2l6ZTsNCj4gPiArfSBS RU1PVEVfTkRJU19RVUVSWV9NQVhfVE9UQUxfU0laRV9NU0c7DQo+ID4gKw0KPiA+ICt0eXBlZGVm IHN0cnVjdCB7DQo+ID4gKyAgVUlOVDMyICAgIE1lc3NhZ2VUeXBlOw0KPiA+ICsgIFVJTlQzMiAg ICBNZXNzYWdlTGVuZ3RoOw0KPiA+ICsgIFVJTlQzMiAgICBSZXF1ZXN0SUQ7DQo+ID4gKyAgVUlO VDMyICAgIE9pZDsNCj4gPiArICBVSU5UMzIgICAgSW5mb3JtYXRpb25CdWZmZXJMZW5ndGg7DQo+ ID4gKyAgVUlOVDMyICAgIEluZm9ybWF0aW9uQnVmZmVyT2Zmc2V0Ow0KPiA+ICsgIFVJTlQzMiAg ICBSZXNlcnZlZDsNCj4gPiArfSBSRU1PVEVfTkRJU19TRVRfTVNHOw0KPiA+ICsNCj4gPiArdHlw ZWRlZiBzdHJ1Y3Qgew0KPiA+ICsgIFVJTlQzMiAgICBNZXNzYWdlVHlwZTsNCj4gPiArICBVSU5U MzIgICAgTWVzc2FnZUxlbmd0aDsNCj4gPiArICBVSU5UMzIgICAgUmVzZXJ2ZWQ7DQo+ID4gK30g UkVNT1RFX05ESVNfUkVTRVRfTVNHOw0KPiA+ICsNCj4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ ICsgIFVJTlQzMiAgICBNZXNzYWdlVHlwZTsNCj4gPiArICBVSU5UMzIgICAgTWVzc2FnZUxlbmd0 aDsNCj4gPiArICBVSU5UMzIgICAgU3RhdHVzOw0KPiA+ICsgIFVJTlQzMiAgICBTdGF0dXNCdWZm ZXJMZW5ndGg7DQo+ID4gKyAgVUlOVDMyICAgIFN0YXR1c0J1ZmZlck9mZnNldDsNCj4gPiArfSBS RU1PVEVfTkRJU19JTkRJQ0FURV9TVEFUVVNfTVNHOw0KPiA+ICsNCj4gPiArdHlwZWRlZiBzdHJ1 Y3Qgew0KPiA+ICsgIFVJTlQzMiAgICBEaWFnU3RhdHVzOw0KPiA+ICsgIFVJTlQzMiAgICBFcnJv ck9mZnNldDsNCj4gPiArfSBSTkRJU19ESUFHTk9TVElDX0lORk87DQo+ID4gKw0KPiA+ICt0eXBl ZGVmIHN0cnVjdCB7DQo+ID4gKyAgVUlOVDMyICAgIE1lc3NhZ2VUeXBlOw0KPiA+ICsgIFVJTlQz MiAgICBNZXNzYWdlTGVuZ3RoOw0KPiA+ICsgIFVJTlQzMiAgICBSZXF1ZXN0SUQ7DQo+ID4gK30g UkVNT1RFX05ESVNfS0VFUEFMSVZFX01TRzsNCj4gPiArDQo+ID4gK3R5cGVkZWYgc3RydWN0IHsN Cj4gPiArICBVSU5UMzIgICAgTWVzc2FnZVR5cGU7DQo+ID4gKyAgVUlOVDMyICAgIE1lc3NhZ2VM ZW5ndGg7DQo+ID4gKyAgVUlOVDMyICAgIFJlcXVlc3RJRDsNCj4gPiArICBVSU5UMzIgICAgU3Rh dHVzOw0KPiA+ICsgIFVJTlQzMiAgICBNYWpvclZlcnNpb247DQo+ID4gKyAgVUlOVDMyICAgIE1p bm9yVmVyc2lvbjsNCj4gPiArICBVSU5UMzIgICAgRGV2aWNlRmxhZ3M7DQo+ID4gKyAgVUlOVDMy ICAgIE1lZGl1bTsNCj4gPiArICBVSU5UMzIgICAgTWF4UGFja2V0c1BlclRyYW5zZmVyOw0KPiA+ ICsgIFVJTlQzMiAgICBNYXhUcmFuc2ZlclNpemU7DQo+ID4gKyAgVUlOVDMyICAgIFBhY2tldEFs aWdubWVudEZhY3RvcjsNCj4gPiArICBVSU5UNjQgICAgUmVzZXJ2ZWQ7DQo+ID4gK30gUkVNT1RF X05ESVNfSU5JVElBTElaRV9DTVBMVDsNCj4gPiArDQo+ID4gK3R5cGVkZWYgc3RydWN0IHsNCj4g PiArICBVSU5UMzIgICAgTWVzc2FnZVR5cGU7DQo+ID4gKyAgVUlOVDMyICAgIE1lc3NhZ2VMZW5n dGg7DQo+ID4gKyAgVUlOVDMyICAgIFJlcXVlc3RJRDsNCj4gPiArICBVSU5UMzIgICAgU3RhdHVz Ow0KPiA+ICsgIFVJTlQzMiAgICBJbmZvcm1hdGlvbkJ1ZmZlckxlbmd0aDsNCj4gPiArICBVSU5U MzIgICAgSW5mb3JtYXRpb25CdWZmZXJPZmZzZXQ7DQo+ID4gK30gUkVNT1RFX05ESVNfUVVFUllf Q01QTFQ7DQo+ID4gKw0KPiA+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ID4gKyAgUkVNT1RFX05ESVNf UVVFUllfQ01QTFQgICAgUXVlcnlDbXBsdDsNCj4gPiArICBVSU5UOCAgICAgICAgICAgICAgICAg ICAgICBBZGRyWzZdOw0KPiA+ICt9IFJFTU9URV9ORElTX1FVRVJZX01BQ19DTVBMVDsNCj4gPiAr DQo+ID4gK3R5cGVkZWYgc3RydWN0IHsNCj4gPiArICBSRU1PVEVfTkRJU19RVUVSWV9DTVBMVCAg ICBRdWVyeUNtcGx0Ow0KPiA+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgIE1heFRvdGFs U2l6ZTsNCj4gPiArfSBSRU1PVEVfTkRJU19RVUVSWV9NQVhfVE9UQUxfU0laRV9DTVBMVDsNCj4g PiArDQo+ID4gK3R5cGVkZWYgc3RydWN0IHsNCj4gPiArICBVSU5UMzIgICAgTWVzc2FnZVR5cGU7 DQo+ID4gKyAgVUlOVDMyICAgIE1lc3NhZ2VMZW5ndGg7DQo+ID4gKyAgVUlOVDMyICAgIFJlcXVl c3RJRDsNCj4gPiArICBVSU5UMzIgICAgU3RhdHVzOw0KPiA+ICt9IFJFTU9URV9ORElTX1NFVF9D TVBMVDsNCj4gPiArDQo+ID4gK3R5cGVkZWYgc3RydWN0IHsNCj4gPiArICBVSU5UMzIgICAgTWVz c2FnZVR5cGU7DQo+ID4gKyAgVUlOVDMyICAgIE1lc3NhZ2VMZW5ndGg7DQo+ID4gKyAgVUlOVDMy ICAgIFN0YXR1czsNCj4gPiArICBVSU5UMzIgICAgQWRkcmVzc2luZ1Jlc2V0Ow0KPiA+ICt9IFJF TU9URV9ORElTX1JFU0VUX0NNUExUOw0KPiA+ICsNCj4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ ICsgIFVJTlQzMiAgICBNZXNzYWdlVHlwZTsNCj4gPiArICBVSU5UMzIgICAgTWVzc2FnZUxlbmd0 aDsNCj4gPiArICBVSU5UMzIgICAgUmVxdWVzdElEOw0KPiA+ICsgIFVJTlQzMiAgICBTdGF0dXM7 DQo+ID4gK30gUkVNT1RFX05ESVNfS0VFUEFMSVZFX0NNUExUOw0KPiA+ICsNCj4gPiArdHlwZWRl ZiBzdHJ1Y3Qgew0KPiA+ICsgIFVJTlQzMiAgICBNZXNzYWdlVHlwZTsNCj4gPiArICBVSU5UMzIg ICAgTWVzc2FnZUxlbmd0aDsNCj4gPiArICBVSU5UMzIgICAgRGF0YU9mZnNldDsNCj4gPiArICBV SU5UMzIgICAgRGF0YUxlbmd0aDsNCj4gPiArICBVSU5UMzIgICAgT3V0T2ZCYW5kRGF0YU9mZnNl dDsNCj4gPiArICBVSU5UMzIgICAgT3V0T2ZCYW5kRGF0YUxlbmd0aDsNCj4gPiArICBVSU5UMzIg ICAgTnVtT3V0T2ZCYW5kRGF0YUVsZW1lbnRzOw0KPiA+ICsgIFVJTlQzMiAgICBQZXJQYWNrZXRJ bmZvT2Zmc2V0Ow0KPiA+ICsgIFVJTlQzMiAgICBQZXJQYWNrZXRJbmZvTGVuZ3RoOw0KPiA+ICsg IFVJTlQzMiAgICBSZXNlcnZlZDE7DQo+ID4gKyAgVUlOVDMyICAgIFJlc2VydmVkMjsNCj4gPiAr fSBSRU1PVEVfTkRJU19QQUNLRVRfTVNHOw0KPiA+ICsNCj4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0K PiA+ICsgIFVJTlQzMiAgICBTaXplOw0KPiA+ICsgIFVJTlQzMiAgICBUeXBlOw0KPiA+ICsgIFVJ TlQzMiAgICBDbGFzc0luZm9ybWF0aW9uT2Zmc2V0Ow0KPiA+ICt9IE9VVF9PRl9CQU5EX0RBVEFf UkVDT1JEOw0KPiA+ICsNCj4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ICsgIFVJTlQzMiAgICBT aXplOw0KPiA+ICsgIFVJTlQzMiAgICBUeXBlOw0KPiA+ICsgIFVJTlQzMiAgICBDbGFzc0luZm9y bWF0aW9uT2Zmc2V0Ow0KPiA+ICt9IFBFUl9QQUNLRVRfSU5GT19EQVRBX1JFQ09SRDsNCj4gPiAr DQo+ID4gK3R5cGVkZWYgc3RydWN0IHsNCj4gPiArICBMSVNUX0VOVFJZICAgIFBhY2tldExpc3Q7 DQo+ID4gKyAgVUlOVDggICAgICAgICAqT3JnQnVmZmVyOw0KPiA+ICsgIFVJTlROICAgICAgICAg UmVtYWluaW5nTGVuZ3RoOw0KPiA+ICsgIFVJTlQ4ICAgICAgICAgKlBhY2tldFN0YXJ0QnVmZmVy OyAgICAvLyBWYXJpYWJsZSBzaXplIGRhdGEgdG8gZm9sbG93DQo+ID4gK30gUEFDS0VUX0xJU1Q7 DQo+ID4gKw0KPiA+ICsjcHJhZ21hIHBhY2soKQ0KPiA+ICsNCj4gPiArI2VuZGlmDQo+ID4gZGlm ZiAtLWdpdCBhL1VzYk5ldHdvcmtQa2cvVXNiUm5kaXMvVXNiUm5kaXMuaW5mDQo+IGIvVXNiTmV0 d29ya1BrZy9Vc2JSbmRpcy9Vc2JSbmRpcy5pbmYNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0K PiA+IGluZGV4IDAwMDAwMDAwMDAuLjY0MjA1ZTQyNzcNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4g KysrIGIvVXNiTmV0d29ya1BrZy9Vc2JSbmRpcy9Vc2JSbmRpcy5pbmYNCj4gPiBAQCAtMCwwICsx LDQyIEBADQo+ID4gKyMjIEBmaWxlDQo+ID4gKyMgICBUaGlzIGlzIFVzYiBSbmRpcyBkcml2ZXIg Zm9yIERYRSBwaGFzZS4NCj4gPiArIw0KPiA+ICsjIENvcHlyaWdodCAoYykgMjAyMywgQW1lcmlj YW4gTWVnYXRyZW5kcyBJbnRlcm5hdGlvbmFsIExMQy4gQWxsIHJpZ2h0cw0KPiByZXNlcnZlZC48 QlI+DQo+ID4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQN Cj4gPiArIyMNCj4gPiArDQo+ID4gK1tEZWZpbmVzXQ0KPiA+ICsgIElORl9WRVJTSU9OICAgICAg ICAgICAgICAgICAgICA9IDB4MDAwMTAwMDUNCj4gPiArICBCQVNFX05BTUUgICAgICAgICAgICAg ICAgICAgICAgPSBVc2JSbmRpcw0KPiA+ICsgIEZJTEVfR1VJRCAgICAgICAgICAgICAgICAgICAg ICA9IDExRTMyQzM0LTYwQjUtNDk5MS04REVBLTYzRDNFOEM4NzZERQ0KPiA+ICsgIE1PRFVMRV9U WVBFICAgICAgICAgICAgICAgICAgICA9IERYRV9EUklWRVINCj4gPiArICBWRVJTSU9OX1NUUklO RyAgICAgICAgICAgICAgICAgPSAxLjANCj4gPiArICBFTlRSWV9QT0lOVCAgICAgICAgICAgICAg ICAgICAgPSBVc2JSbmRpc0VudHJ5DQo+ID4gKw0KPiA+ICtbU291cmNlc10NCj4gPiArICBVc2JS bmRpcy5jDQo+ID4gKyAgVXNiUm5kaXMuaA0KPiA+ICsgIFVzYlJuZGlzRnVuY3Rpb24uYw0KPiA+ ICsgIENvbXBvbmVudE5hbWUuYw0KPiA+ICsNCj4gPiArW1BhY2thZ2VzXQ0KPiA+ICsgIE1kZVBr Zy9NZGVQa2cuZGVjDQo+ID4gKyAgVXNiTmV0d29ya1BrZy9Vc2JOZXR3b3JrUGtnLmRlYw0KPiA+ ICsNCj4gPiArW0xpYnJhcnlDbGFzc2VzXQ0KPiA+ICsgIFVlZmlEcml2ZXJFbnRyeVBvaW50DQo+ ID4gKyAgVWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliDQo+ID4gKyAgVWVmaUxpYg0KPiA+ICsgIERl YnVnTGliDQo+ID4gKyAgVWVmaVVzYkxpYg0KPiA+ICsgIE1lbW9yeUFsbG9jYXRpb25MaWINCj4g PiArICBCYXNlTWVtb3J5TGliDQo+ID4gKw0KPiA+ICtbUHJvdG9jb2xzXQ0KPiA+ICsgIGdFZmlV c2JJb1Byb3RvY29sR3VpZA0KPiA+ICsgIGdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkDQo+ID4g KyAgZ0VmaURyaXZlckJpbmRpbmdQcm90b2NvbEd1aWQNCj4gPiArICBnRWRrSUlVc2JFdGhQcm90 b2NvbEd1aWQNCj4gPiArDQo+ID4gK1tEZXBleF0NCj4gPiArICBUUlVFDQo+ID4gZGlmZiAtLWdp dCBhL1VzYk5ldHdvcmtQa2cvVXNiUm5kaXMvVXNiUm5kaXNGdW5jdGlvbi5jDQo+IGIvVXNiTmV0 d29ya1BrZy9Vc2JSbmRpcy9Vc2JSbmRpc0Z1bmN0aW9uLmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEw MDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAuLmUzZmU3MzdjZGUNCj4gPiAtLS0gL2Rldi9udWxs DQo+ID4gKysrIGIvVXNiTmV0d29ya1BrZy9Vc2JSbmRpcy9Vc2JSbmRpc0Z1bmN0aW9uLmMNCj4g PiBAQCAtMCwwICsxLDE3MTggQEANCj4gPiArLyoqIEBmaWxlDQo+ID4gKyAgVGhpcyBmaWxlIGNv bnRhaW5zIGNvZGUgZm9yIFVTQiBFdGhlcm5ldCBkZXNjcmlwdG9yDQo+ID4gKyAgYW5kIHNwZWNp ZmljIHJlcXVlc3RzIGltcGxlbWVudC4NCj4gPiArDQo+ID4gKyAgQ29weXJpZ2h0IChjKSAyMDIz LCBBbWVyaWNhbiBNZWdhdHJlbmRzIEludGVybmF0aW9uYWwgTExDLiBBbGwgcmlnaHRzDQo+IHJl c2VydmVkLjxCUj4NCj4gPiArICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNl LVBhdGVudA0KPiA+ICsqKi8NCj4gPiArDQo+ID4gKyNpbmNsdWRlICJVc2JSbmRpcy5oIg0KPiA+ ICsNCj4gPiArVUlOVDE2ICBnU3RvcEJ1bGtJbkNudCAgPSAwOw0KPiA+ICtVSU5UMTYgIGdCbG9j a0J1bGtJbkNudCA9IDA7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBMb2FkIEFsbCBvZiBkZXZp Y2UgZGVzY3JpcHRvci4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgVXNiSW8gICAgICAgICAg ICAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJX1VTQl9JT19QUk9UT0NPTA0KPiBpbnN0YW5jZS4N Cj4gPiArICBAcGFyYW1bb3V0XSBDb25maWdEZXNjICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRo ZSBjb25maWd1cmF0aW9uIGRlc2NyaXB0b3IuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NV Q0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gPiAr ICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICBUaGUgcmVxdWVzdCBjb3VsZCBub3QgYmUg Y29tcGxldGVkDQo+IGJlY2F1c2UgdGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYnVmZmVyIHNwZWNpZmllZCBieSBEZXNjcmlwdG9yTGVuZ3RoIGFuZCBEZXNjcmlwdG9y DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbm90IGxhcmdlIGVub3Vn aCB0byBob2xkIHRoZSByZXN1bHQgb2YgdGhlIHJlcXVlc3QuDQo+ID4gKyAgQHJldHZhbCBFRklf VElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVz dC4NCj4gPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWls ZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiBUaGUgdHJhbnNmZXINCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgaXMgcmV0dXJuZWQgaW4gU3RhdHVzLg0KPiA+ ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtMb2FkQWxsRGVzY3JpcHRvciAoDQo+ID4gKyAg SU4gIEVGSV9VU0JfSU9fUFJPVE9DT0wgICAgICAgICpVc2JJbywNCj4gPiArICBPVVQgRUZJX1VT Ql9DT05GSUdfREVTQ1JJUFRPUiAgKipDb25maWdEZXNjDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4g KyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+ICsgIFVJTlQzMiAgICAg ICAgICAgICAgICAgICAgIFRyYW5zU3RhdHVzOw0KPiA+ICsgIEVGSV9VU0JfQ09ORklHX0RFU0NS SVBUT1IgIFRtcDsNCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gVXNiSW8tPlVzYkdldENvbmZpZ0Rl c2NyaXB0b3IgKFVzYklvLCAmVG1wKTsNCj4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQo+ID4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6VXNiR2V0Q29uZmlnRGVzY3JpcHRv ciBzdGF0dXMgPSAlclxuIiwNCj4gX19GVU5DVElPTl9fLCBTdGF0dXMpKTsNCj4gPiArICAgIHJl dHVybiBTdGF0dXM7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBnQlMtPkFsbG9j YXRlUG9vbCAoDQo+ID4gKyAgICAgICAgICAgICAgICAgIEVmaUJvb3RTZXJ2aWNlc0RhdGEsDQo+ ID4gKyAgICAgICAgICAgICAgICAgIFRtcC5Ub3RhbExlbmd0aCwNCj4gPiArICAgICAgICAgICAg ICAgICAgKFZPSUQgKiopQ29uZmlnRGVzYw0KPiA+ICsgICAgICAgICAgICAgICAgICApOw0KPiA+ ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgIERFQlVHICgoREVCVUdfRVJS T1IsICIlYTogQWxsb2NhdGVQb29sIHN0YXR1cyA9ICVyXG4iLA0KPiBfX0ZVTkNUSU9OX18sIFN0 YXR1cykpOw0KPiA+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsg IFN0YXR1cyA9IFVzYkdldERlc2NyaXB0b3IgKA0KPiA+ICsgICAgICAgICAgICAgVXNiSW8sDQo+ ID4gKyAgICAgICAgICAgICBVU0JfREVTQ19UWVBFX0NPTkZJRyA8PCA4IHwgKFRtcC5Db25maWd1 cmF0aW9uVmFsdWUgLSAxKSwNCj4gLy8gemVybyBiYXNlZA0KPiA+ICsgICAgICAgICAgICAgMCwN Cj4gPiArICAgICAgICAgICAgIFRtcC5Ub3RhbExlbmd0aCwNCj4gPiArICAgICAgICAgICAgICpD b25maWdEZXNjLA0KPiA+ICsgICAgICAgICAgICAgJlRyYW5zU3RhdHVzDQo+ID4gKyAgICAgICAg ICAgICApOw0KPiA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0K PiA+ICsgIFJldHVybnMgcG9pbnRlciB0byB0aGUgbmV4dCBkZXNjcmlwdG9yIGZvciB0aGUgcGFj ayBvZiBVU0IgZGVzY3JpcHRvcnMNCj4gPiArICBsb2NhdGVkIGluIGNvbnRpbnVlcyBtZW1vcnkg c2VnbWVudA0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICAgICAgRGVzYyAgIEEgcG9pbnRlciB0 byB0aGUgQ09ORklHX0RFU0NSSVBUT1IgaW5zdGFuY2UuDQo+ID4gKyAgQHBhcmFtW2luLCBvdXRd IE9mZnNldCBBIHBvaW50ZXIgdG8gdGhlIHN1bSBvZiBkZXNjcmlwdG9yIGxlbmd0aC4NCj4gPiAr DQo+ID4gKyAgQHJldHZhbCBUUlVFICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5 Lg0KPiA+ICsgIEByZXR2YWwgRkFMU0UgIE5vIG5leHQgZGVzY3JpcHRvci4NCj4gPiArDQo+ID4g KyoqLw0KPiA+ICtCT09MRUFODQo+ID4gK05leHREZXNjcmlwdG9yICgNCj4gPiArICBJTiAgICAg IEVGSV9VU0JfQ09ORklHX0RFU0NSSVBUT1IgICpEZXNjLA0KPiA+ICsgIElOIE9VVCAgVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgKk9mZnNldA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIGlm ICgoRGVzYyA9PSBOVUxMKSB8fCAoKk9mZnNldCA+PSBEZXNjLT5Ub3RhbExlbmd0aCkpIHsNCj4g PiArICAgIHJldHVybiBGQUxTRTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmICgoKEVGSV9V U0JfQ09ORklHX0RFU0NSSVBUT1IgKikoKGNoYXIgKilEZXNjKypPZmZzZXQpKS0+TGVuZ3RoDQo+ ID09IDApIHsNCj4gPiArICAgIHJldHVybiBGQUxTRTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsg ICpPZmZzZXQgKz0gKChFRklfVVNCX0NPTkZJR19ERVNDUklQVE9SICopKChjaGFyICopRGVzYysq T2Zmc2V0KSktDQo+ID5MZW5ndGg7DQo+ID4gKyAgaWYgKCAqT2Zmc2V0ID49IERlc2MtPlRvdGFs TGVuZ3RoICkgew0KPiA+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4g KyAgcmV0dXJuIFRSVUU7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFJlYWQgRnVu Y3Rpb24gZGVzY3JpcHRvcg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBDb25maWcgICAgICAg ICAgICAgQSBwb2ludGVyIHRvIGFsbCBvZiBjb25maWd1cmF0aW9uLg0KPiA+ICsgIEBwYXJhbVtp bl0gIEZ1bkRlc2NyaXB0b3JUeXBlICBVU0IgQ0RDIGNsYXNzIGRlc2NyaXB0b3IgU3ViVHlwZS4N Cj4gPiArICBAcGFyYW1bb3V0XSBEYXRhQnVmZmVyICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBE YXRhIG9mIGNvcnJlc3BvbmRpbmcgdG8NCj4gZGV2aWNlIGNhcGFiaWxpdHkuDQo+ID4gKw0KPiA+ ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgIFRoZSBkZXZpY2UgY2FwYWJpbGl0eSBkZXNj cmlwdG9yIHdhcyByZXRyaWV2ZWQNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dWNjZXNzZnVsbHkuDQo+ID4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgTm8gc3VwcG9y dGVkLg0KPiA+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgIFRoZSBkZXZpY2UgY2FwYWJp bGl0eSBkZXNjcmlwdG9yIHdhcyBub3QNCj4gZm91bmQuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiAr RUZJX1NUQVRVUw0KPiA+ICtHZXRGdW5jdGlvbmFsRGVzY3JpcHRvciAoDQo+ID4gKyAgSU4gIEVG SV9VU0JfQ09ORklHX0RFU0NSSVBUT1IgICpDb25maWcsDQo+ID4gKyAgSU4gIFVJTlQ4ICAgICAg ICAgICAgICAgICAgICAgIEZ1bkRlc2NyaXB0b3JUeXBlLA0KPiA+ICsgIE9VVCBWT0lEICAgICAg ICAgICAgICAgICAgICAgICAqRGF0YUJ1ZmZlcg0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEVG SV9TVEFUVVMgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gPiArICBVSU5UTiAgICAgICAg ICAgICAgICAgICAgICAgICBPZmZzZXQ7DQo+ID4gKyAgRUZJX1VTQl9JTlRFUkZBQ0VfREVTQ1JJ UFRPUiAgKkludGVyZmFjZTsNCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gRUZJX05PVF9GT1VORDsN Cj4gPiArDQo+ID4gKyAgZm9yIChPZmZzZXQgPSAwOyBOZXh0RGVzY3JpcHRvciAoQ29uZmlnLCAm T2Zmc2V0KTspIHsNCj4gPiArICAgIEludGVyZmFjZSA9IChFRklfVVNCX0lOVEVSRkFDRV9ERVND UklQVE9SICopKChVSU5UOCAqKUNvbmZpZyArDQo+IE9mZnNldCk7DQo+ID4gKyAgICBpZiAoSW50 ZXJmYWNlLT5EZXNjcmlwdG9yVHlwZSA9PSBDU19JTlRFUkZBQ0UpIHsNCj4gPiArICAgICAgaWYg KCgoVVNCX0hFQURFUl9GVU5fREVTQ1JJUFRPUiAqKUludGVyZmFjZSktPkRlc2NyaXB0b3JTdWJ0 eXBlDQo+ID09IEZ1bkRlc2NyaXB0b3JUeXBlKSB7DQo+ID4gKyAgICAgICAgc3dpdGNoIChGdW5E ZXNjcmlwdG9yVHlwZSkgew0KPiA+ICsgICAgICAgICAgY2FzZSBIRUFERVJfRlVOX0RFU0NSSVBU T1I6DQo+ID4gKyAgICAgICAgICAgIENvcHlNZW0gKA0KPiA+ICsgICAgICAgICAgICAgIERhdGFC dWZmZXIsDQo+ID4gKyAgICAgICAgICAgICAgKFVTQl9IRUFERVJfRlVOX0RFU0NSSVBUT1IgKilJ bnRlcmZhY2UsDQo+ID4gKyAgICAgICAgICAgICAgc2l6ZW9mIChVU0JfSEVBREVSX0ZVTl9ERVND UklQVE9SKQ0KPiA+ICsgICAgICAgICAgICAgICk7DQo+ID4gKyAgICAgICAgICAgIHJldHVybiBF RklfU1VDQ0VTUzsNCj4gPiArICAgICAgICAgIGNhc2UgVU5JT05fRlVOX0RFU0NSSVBUT1I6DQo+ ID4gKyAgICAgICAgICAgIENvcHlNZW0gKA0KPiA+ICsgICAgICAgICAgICAgIERhdGFCdWZmZXIs DQo+ID4gKyAgICAgICAgICAgICAgKFVTQl9VTklPTl9GVU5fREVTQ1JJUFRPUiAqKUludGVyZmFj ZSwNCj4gPiArICAgICAgICAgICAgICAoKFVTQl9VTklPTl9GVU5fREVTQ1JJUFRPUiAqKUludGVy ZmFjZSktPkZ1bmN0aW9uTGVuZ3RoDQo+ID4gKyAgICAgICAgICAgICAgKTsNCj4gPiArICAgICAg ICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ICsgICAgICAgICAgY2FzZSBFVEhFUk5FVF9G VU5fREVTQ1JJUFRPUjoNCj4gPiArICAgICAgICAgICAgQ29weU1lbSAoDQo+ID4gKyAgICAgICAg ICAgICAgRGF0YUJ1ZmZlciwNCj4gPiArICAgICAgICAgICAgICAoVVNCX0VUSEVSTkVUX0ZVTl9E RVNDUklQVE9SICopSW50ZXJmYWNlLA0KPiA+ICsgICAgICAgICAgICAgIHNpemVvZiAoVVNCX0VU SEVSTkVUX0ZVTl9ERVNDUklQVE9SKQ0KPiA+ICsgICAgICAgICAgICAgICk7DQo+ID4gKyAgICAg ICAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiArICAgICAgICAgIGRlZmF1bHQ6DQo+ID4g KyAgICAgICAgICAgIFN0YXR1cyA9IEVGSV9VTlNVUFBPUlRFRDsNCj4gPiArICAgICAgICAgICAg YnJlYWs7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsgICAgICB9DQo+ID4gKyAgICB9DQo+ID4gKyAg fQ0KPiA+ICsNCj4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioN Cj4gPiArICBHZXQgVVNCIEV0aGVybmV0IElPIGVuZHBvaW50IGFuZCBVU0IgQ0RDIGRhdGEgSU8g ZW5kcG9pbnQuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICBVc2JJbyAgICAgICAgICAg QSBwb2ludGVyIHRvIHRoZSBFRklfVVNCX0lPX1BST1RPQ09MDQo+IGluc3RhbmNlLg0KPiA+ICsg IEBwYXJhbVtpbiwgb3V0XSBVc2JSbmRpc0RldmljZSAgQSBwb2ludGVyIHRvIHRoZSBVU0JfUk5E SVNfREVWSUNFDQo+IGluc3RhbmNlLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1ZPSUQNCj4gPiAr R2V0RW5kcG9pbnQgKA0KPiA+ICsgIElOICAgICAgRUZJX1VTQl9JT19QUk9UT0NPTCAgKlVzYklv LA0KPiA+ICsgIElOIE9VVCAgVVNCX1JORElTX0RFVklDRSAgICAgKlVzYlJuZGlzRGV2aWNlDQo+ ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgU3Rh dHVzOw0KPiA+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiA+ICsg IFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgIFJlc3VsdDsNCj4gPiArICBFRklfVVNCX0lO VEVSRkFDRV9ERVNDUklQVE9SICBJbnRlcmZhY2U7DQo+ID4gKyAgRUZJX1VTQl9FTkRQT0lOVF9E RVNDUklQVE9SICAgRW5kcG9pbnQ7DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IFVzYklvLT5Vc2JH ZXRJbnRlcmZhY2VEZXNjcmlwdG9yIChVc2JJbywgJkludGVyZmFjZSk7DQo+ID4gKyAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOlVz YkdldEludGVyZmFjZURlc2NyaXB0b3Igc3RhdHVzID0NCj4gJXJcbiIsIF9fRlVOQ1RJT05fXywg U3RhdHVzKSk7DQo+ID4gKyAgICByZXR1cm47DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAo SW50ZXJmYWNlLk51bUVuZHBvaW50cyA9PSAwICkgew0KPiA+ICsgICAgU3RhdHVzID0gVXNiU2V0 SW50ZXJmYWNlIChVc2JJbywgMSwgMCwgJlJlc3VsdCk7DQo+ID4gKyAgICBpZiAoRUZJX0VSUk9S IChTdGF0dXMpKSB7DQo+ID4gKyAgICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTpVc2JTZXRJ bnRlcmZhY2Ugc3RhdHVzID0gJXJcbiIsDQo+IF9fRlVOQ1RJT05fXywgU3RhdHVzKSk7DQo+ID4g KyAgICAgIHJldHVybjsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBTdGF0dXMgPSBVc2JJ by0+VXNiR2V0SW50ZXJmYWNlRGVzY3JpcHRvciAoVXNiSW8sICZJbnRlcmZhY2UpOw0KPiA+ICsg ICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgICBERUJVRyAoKERFQlVHX0VS Uk9SLCAiJWE6VXNiR2V0SW50ZXJmYWNlRGVzY3JpcHRvciBzdGF0dXMgPQ0KPiAlclxuIiwgX19G VU5DVElPTl9fLCBTdGF0dXMpKTsNCj4gPiArICAgICAgcmV0dXJuOw0KPiA+ICsgICAgfQ0KPiA+ ICsgIH0NCj4gPiArDQo+ID4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgSW50ZXJmYWNlLk51 bUVuZHBvaW50czsgSW5kZXgrKykgew0KPiA+ICsgICAgU3RhdHVzID0gVXNiSW8tPlVzYkdldEVu ZHBvaW50RGVzY3JpcHRvciAoVXNiSW8sIEluZGV4LCAmRW5kcG9pbnQpOw0KPiA+ICsgICAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAi JWE6VXNiR2V0RW5kcG9pbnREZXNjcmlwdG9yIHN0YXR1cyA9DQo+ICVyXG4iLCBfX0ZVTkNUSU9O X18sIFN0YXR1cykpOw0KPiA+ICsgICAgICByZXR1cm47DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ ICsgICAgc3dpdGNoICgoRW5kcG9pbnQuQXR0cmlidXRlcyAmIChCSVQwIHwgQklUMSkpKSB7DQo+ ID4gKyAgICAgIGNhc2UgVVNCX0VORFBPSU5UX0JVTEs6DQo+ID4gKyAgICAgICAgaWYgKEVuZHBv aW50LkVuZHBvaW50QWRkcmVzcyAmIEJJVDcpIHsNCj4gPiArICAgICAgICAgIFVzYlJuZGlzRGV2 aWNlLT5CdWxrSW5FbmRwb2ludCA9IEVuZHBvaW50LkVuZHBvaW50QWRkcmVzczsNCj4gPiArICAg ICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPkJ1bGtPdXRFbmRw b2ludCA9IEVuZHBvaW50LkVuZHBvaW50QWRkcmVzczsNCj4gPiArICAgICAgICB9DQo+ID4gKw0K PiA+ICsgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgICBjYXNlIFVTQl9FTkRQT0lOVF9JTlRFUlJV UFQ6DQo+ID4gKyAgICAgICAgVXNiUm5kaXNEZXZpY2UtPkludGVycnVwRW5kcG9pbnQgPSBFbmRw b2ludC5FbmRwb2ludEFkZHJlc3M7DQo+ID4gKyAgICAgICAgYnJlYWs7DQo+ID4gKyAgICB9DQo+ ID4gKyAgfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBBc3luYyBVU0IgdHJhbnNm ZXIgY2FsbGJhY2sgcm91dGluZS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgRGF0YSAgICAg ICAgICAgIERhdGEgcmVjZWl2ZWQgb3Igc2VudCB2aWEgdGhlIFVTQiBBc3luY2hyb25vdXMNCj4g VHJhbnNmZXIsIGlmIHRoZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFu c2ZlciBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiA+ICsgIEBwYXJhbVtpbl0gIERhdGFMZW5n dGggICAgICBUaGUgbGVuZ3RoIG9mIERhdGEgcmVjZWl2ZWQgb3Igc2VudCB2aWEgdGhlDQo+IEFz eW5jaHJvbm91cw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zlciwg aWYgdHJhbnNmZXIgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlcy4NCj4gPiArICBAcGFyYW1baW5dICBD b250ZXh0ICAgICAgICAgRGF0YSBwYXNzZWQgZnJvbSBVc2JBc3luY0ludGVycnVwdFRyYW5zZmVy KCkNCj4gcmVxdWVzdC4NCj4gPiArICBAcGFyYW1baW5dICBTdGF0dXMgICAgICAgICAgSW5kaWNh dGVzIHRoZSByZXN1bHQgb2YgdGhlIGFzeW5jaHJvbm91cyB0cmFuc2Zlci4NCj4gPiArDQo+ID4g KyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIGFzeW5jaHJvbm91cyBVU0IgdHJh bnNmZXIgcmVxdWVzdCBoYXMNCj4gYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuDQo+ID4gKyAg QHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIGFzeW5jaHJvbm91cyBVU0IgdHJhbnNm ZXIgcmVxdWVzdA0KPiBmYWlsZWQuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0K PiA+ICtFRklBUEkNCj4gPiArSW50ZXJydXB0Q2FsbGJhY2sgKA0KPiA+ICsgIElOICBWT0lEICAg ICpEYXRhLA0KPiA+ICsgIElOICBVSU5UTiAgIERhdGFMZW5ndGgsDQo+ID4gKyAgSU4gIFZPSUQg ICAgKkNvbnRleHQsDQo+ID4gKyAgSU4gIFVJTlQzMiAgU3RhdHVzDQo+ID4gKyAgKQ0KPiA+ICt7 DQo+ID4gKyAgaWYgKChEYXRhID09IE5VTEwpIHx8IChDb250ZXh0ID09IE5VTEwpKSB7DQo+ID4g KyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4g KyAgaWYgKCgoRUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCAqKURhdGEpLT5SZXF1ZXN0ID09IDApIHsN Cj4gPiArICAgIENvcHlNZW0gKA0KPiA+ICsgICAgICAoRUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCAq KUNvbnRleHQsDQo+ID4gKyAgICAgIChFRklfVVNCX0RFVklDRV9SRVFVRVNUICopRGF0YSwNCj4g PiArICAgICAgc2l6ZW9mIChFRklfVVNCX0RFVklDRV9SRVFVRVNUKQ0KPiA+ICsgICAgICApOw0K PiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICsvKioNCj4gPiArICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gbWFuYWdlIGEgVVNC IGRldmljZSB3aXRoIGFuIGludGVycnVwdCB0cmFuc2Zlcg0KPiBwaXBlLg0KPiA+ICsNCj4gPiAr ICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlDQo+IEVES0lJ X1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gPiArICBAcGFyYW1baW5dICBJc05l d1RyYW5zZmVyICAgICBJZiBUUlVFLCBhIG5ldyB0cmFuc2ZlciB3aWxsIGJlIHN1Ym1pdHRlZA0K PiB0byBVU0IgY29udHJvbGxlci4gSWYNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGQUxTRSwgdGhlIGludGVycnVwdCB0cmFuc2ZlciBpcyBkZWxldGVkIGZyb20gdGhlIGRl dmljZSdzDQo+IGludGVycnVwdA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRyYW5zZmVyIHF1ZXVlLg0KPiA+ICsgIEBwYXJhbVtpbl0gIFBvbGxpbmdJbnRlcnZhbCAgIElu ZGljYXRlcyB0aGUgcGVyaW9kaWMgcmF0ZSwgaW4gbWlsbGlzZWNvbmRzLA0KPiB0aGF0IHRoZSB0 cmFuc2ZlciBpcyB0byBiZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4 ZWN1dGVkLlRoaXMgcGFyYW1ldGVyIGlzIHJlcXVpcmVkIHdoZW4gSXNOZXdUcmFuc2Zlcg0KPiBp cyBUUlVFLiBUaGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBt dXN0IGJlIGJldHdlZW4gMSB0byAyNTUsIG90aGVyd2lzZQ0KPiBFRklfSU5WQUxJRF9QQVJBTUVU RVIgaXMgcmV0dXJuZWQuDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhl IHVuaXRzIGFyZSBpbiBtaWxsaXNlY29uZHMuDQo+ID4gKyAgQHBhcmFtW2luXSAgUmVxdWVzdCAg ICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRklfVVNCX0RFVklDRV9SRVFVRVNUDQo+IGRhdGEu DQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBhc3luY2hy b25vdXMgVVNCIHRyYW5zZmVyIHJlcXVlc3QNCj4gdHJhbnNmZXIgaGFzIGJlZW4gc3VjY2Vzc2Z1 bGx5IGV4ZWN1dGVkLg0KPiA+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSBh c3luY2hyb25vdXMgVVNCIHRyYW5zZmVyIHJlcXVlc3QNCj4gZmFpbGVkLg0KPiA+ICsNCj4gPiAr KiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ID4gK1VzYlJuZGlzSW50ZXJydXB0 ICgNCj4gPiArICBJTiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiA+ICsg IElOIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgSXNOZXdUcmFuc2ZlciwNCj4gPiArICBJ TiBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgIFBvbGxpbmdJbnRlcnZhbCwNCj4gPiArICBJ TiBFRklfVVNCX0RFVklDRV9SRVFVRVNUICAgICAgICpSZXF1c3QNCj4gPiArICApDQo+ID4gK3sN Cj4gPiArICBFRklfU1RBVFVTICAgICAgICBTdGF0dXM7DQo+ID4gKyAgVVNCX1JORElTX0RFVklD RSAgKlVzYlJuZGlzRGV2aWNlOw0KPiA+ICsgIFVJTlROICAgICAgICAgICAgIERhdGFMZW5ndGg7 DQo+ID4gKw0KPiA+ICsgIFVzYlJuZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9NX1RI SVMgKFRoaXMpOw0KPiA+ICsgIERhdGFMZW5ndGggICAgID0gMDsNCj4gPiArDQo+ID4gKyAgaWYg KElzTmV3VHJhbnNmZXIgPT0gVFJVRSkgew0KPiA+ICsgICAgRGF0YUxlbmd0aCA9IHNpemVvZiAo RUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCkgKyBzaXplb2YNCj4gKFVTQl9DT05ORUNUX1NQRUVEX0NI QU5HRSk7DQo+ID4gKyAgICBTdGF0dXMgICAgID0gVXNiUm5kaXNEZXZpY2UtPlVzYklvLT5Vc2JB c3luY0ludGVycnVwdFRyYW5zZmVyICgNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPlVzYklvLA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+SW50ZXJydXBFbmRw b2ludCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXNO ZXdUcmFuc2ZlciwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUG9sbGluZ0ludGVydmFsLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBEYXRhTGVuZ3RoLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBJbnRlcnJ1cHRDYWxsYmFjaywNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUmVxdXN0DQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7DQo+ID4gKw0KPiA+ICsgICAgaWYgKFN0YXR1cyA9PSBF RklfSU5WQUxJRF9QQVJBTUVURVIpIHsNCj4gPiArICAgICAgLy8gQmVjYXVzZSBvZiBTdGFja2Vk IEFzeW5jSW50ZXJydXB0IHJlcXVlc3QgYXJlIG5vdCBzdXBwb3J0ZWQNCj4gPiArICAgICAgU3Rh dHVzID0gVXNiUm5kaXNEZXZpY2UtPlVzYklvLT5Vc2JBc3luY0ludGVycnVwdFRyYW5zZmVyICgN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2 aWNlLT5Vc2JJbywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFVzYlJuZGlzRGV2aWNlLT5JbnRlcnJ1cEVuZHBvaW50LA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDAsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAwLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TlVMTCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ID4gKyAg ICB9DQo+ID4gKyAgfSBlbHNlIHsNCj4gPiArICAgIFN0YXR1cyA9IFVzYlJuZGlzRGV2aWNlLT5V c2JJby0+VXNiQXN5bmNJbnRlcnJ1cHRUcmFuc2ZlciAoDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPlVzYklvLA0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5JbnRlcnJ1cEVu ZHBvaW50LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElzTmV3 VHJhbnNmZXIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICByZXR1cm4gU3Rh dHVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGlzIGZ1bmN0aW9uIGlzIHVz ZWQgdG8gcmVhZCBVU0IgaW50ZXJydXB0IHRyYW5zZmVyIGJlZm9yZSB0aGUgcmVzcG9uc2UNCj4g Uk5ESVMgbWVzc2FnZS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAg ICAgQSBwb2ludGVyIHRvIHRoZSBVU0JfUk5ESVNfREVWSUNFIGluc3RhbmNlLg0KPiA+ICsNCj4g PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgVVNCIGludGVycnVwdCB0cmFu c2ZlciBoYXMgYmVlbg0KPiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuDQo+ID4gKyAgQHJldHZhbCBF RklfREVWSUNFX0VSUk9SICAgICAgVGhlIFVTQiBpbnRlcnJ1cHQgdHJhbnNmZXIgZmFpbGVkLg0K PiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ID4gK1JlYWRS bmRpc1Jlc3BvbnNlSW50ZXJydXB0ICgNCj4gPiArICBJTiBVU0JfUk5ESVNfREVWSUNFICAqVXNi Um5kaXNEZXZpY2UNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RBVFVTICBTdGF0dXM7 DQo+ID4gKyAgVUlOVDMyICAgICAgRGF0YVsyXTsNCj4gPiArICBVSU5UMzIgICAgICBVc2JTdGF0 dXM7DQo+ID4gKyAgVUlOVE4gICAgICAgRGF0YUxlbmd0aDsNCj4gPiArDQo+ID4gKyAgRGF0YUxl bmd0aCA9IDg7DQo+ID4gKw0KPiA+ICsgIFplcm9NZW0gKERhdGEsIHNpemVvZiAoRGF0YSkpOw0K PiA+ICsNCj4gPiArICBTdGF0dXMgPSBVc2JSbmRpc0RldmljZS0+VXNiSW8tPlVzYlN5bmNJbnRl cnJ1cHRUcmFuc2ZlciAoDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFVzYlJuZGlzRGV2aWNlLT5Vc2JJbywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPkludGVycnVwRW5kcG9pbnQsDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZEYXRhLA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmRGF0YUxlbmd0aCwNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMHgyMCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJlVzYlN0YXR1cw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOw0KPiA+ICsNCj4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICsvKioNCj4gPiArICBSZXRyaWV2ZXMgdGhlIFVTQiBFdGhlcm5ldCBNYWMgQWRkcmVzcy4NCj4g PiArDQo+ID4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVE S0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTA0KPiBpbnN0YW5jZS4NCj4gPiArICBAcGFyYW1bb3V0 XSBNYWNBZGRyZXNzICAgIEEgcG9pbnRlciB0byB0aGUgY2FsbGVyIGFsbG9jYXRlZCBVU0INCj4g RXRoZXJuZXQgTWFjIEFkZHJlc3MuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgICAgICAgIFRoZSBVU0IgSGVhZGVyIEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMNCj4gcmV0 cmlldmVkIHN1Y2Nlc3NmdWxseS4NCj4gPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRF UiBVc2JIZWFkZXJGdW5EZXNjcmlwdG9yIGlzIE5VTEwuDQo+ID4gKyAgQHJldHZhbCBFRklfTk9U X0ZPVU5EICAgICAgICAgVGhlIFVTQiBIZWFkZXIgRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcw0K PiBub3QgZm91bmQuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtFRklB UEkNCj4gPiArR2V0VXNiRXRoTWFjQWRkcmVzcyAoDQo+ID4gKyAgSU4gIEVES0lJX1VTQl9FVEhF Uk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ID4gKyAgT1VUIEVGSV9NQUNfQUREUkVTUyAgICAgICAg ICAgICAgKk1hY0FkZHJlc3MNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RBVFVTICAg ICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gPiArICBVU0JfUk5ESVNfREVWSUNFICAgICAgICAg ICAgICpVc2JSbmRpc0RldmljZTsNCj4gPiArICBVU0JfRVRIRVJORVRfRlVOX0RFU0NSSVBUT1Ig IFVzYkV0aERlc2NyaXB0b3I7DQo+ID4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAq RGF0YTsNCj4gPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICpEYXRhUHRyOw0KPiA+ ICsgIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgVG1wU3RyWzFdOw0KPiA+ICsgIFVJTlQ4 ICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ID4gKyAgVUlOVDggICAgICAgICAgICAg ICAgICAgICAgICBIaTsNCj4gPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgIExvdzsN Cj4gPiArDQo+ID4gKyAgUkVNT1RFX05ESVNfUVVFUllfTUFDX01TRyAgICBSbmRpc1F1ZXJ5TXNn Ow0KPiA+ICsgIFJFTU9URV9ORElTX1FVRVJZX01BQ19DTVBMVCAgUm5kaXNRdWVyeU1zZ0NtcGx0 Ow0KPiA+ICsNCj4gPiArICBVc2JSbmRpc0RldmljZSA9IFVTQl9STkRJU19ERVZJQ0VfRlJPTV9U SElTIChUaGlzKTsNCj4gPiArDQo+ID4gKyAgWmVyb01lbSAoJlJuZGlzUXVlcnlNc2csIHNpemVv Zg0KPiAoUkVNT1RFX05ESVNfUVVFUllfTUFDX01TRykpOw0KPiA+ICsgIFplcm9NZW0gKCZSbmRp c1F1ZXJ5TXNnQ21wbHQsIHNpemVvZg0KPiAoUkVNT1RFX05ESVNfUVVFUllfTUFDX0NNUExUKSk7 DQo+ID4gKw0KPiA+ICsgIFJuZGlzUXVlcnlNc2cuUXVlcnlNc2cuTWVzc2FnZVR5cGUgICA9IFJO RElTX1FVRVJZX01TRzsNCj4gPiArICBSbmRpc1F1ZXJ5TXNnLlF1ZXJ5TXNnLk1lc3NhZ2VMZW5n dGggPSBzaXplb2YNCj4gKFJFTU9URV9ORElTX1FVRVJZX01BQ19NU0cpOw0KPiA+ICsgIFJuZGlz UXVlcnlNc2cuUXVlcnlNc2cuUmVxdWVzdElEICAgICA9IFVzYlJuZGlzRGV2aWNlLT5SZXF1ZXN0 SWQ7DQo+ID4gKyAgUm5kaXNRdWVyeU1zZy5RdWVyeU1zZy5PaWQgICAgICAgICAgID0gT0lEXzgw Ml8zX0NVUlJFTlRfQUREUkVTUzsNCj4gPiArDQo+ID4gKyAgUm5kaXNRdWVyeU1zZ0NtcGx0LlF1 ZXJ5Q21wbHQuTWVzc2FnZVR5cGUgICA9DQo+IFJORElTX1FVRVJZX0NNUExUOw0KPiA+ICsgIFJu ZGlzUXVlcnlNc2dDbXBsdC5RdWVyeUNtcGx0Lk1lc3NhZ2VMZW5ndGggPSBzaXplb2YNCj4gKFJF TU9URV9ORElTX1FVRVJZX01BQ19DTVBMVCk7DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IFJuZGlz Q29udHJvbE1zZyAoDQo+ID4gKyAgICAgICAgICAgICBVc2JSbmRpc0RldmljZSwNCj4gPiArICAg ICAgICAgICAgIChSRU1PVEVfTkRJU19NU0dfSEVBREVSICopJlJuZGlzUXVlcnlNc2csDQo+ID4g KyAgICAgICAgICAgICAoUkVNT1RFX05ESVNfTVNHX0hFQURFUiAqKSZSbmRpc1F1ZXJ5TXNnQ21w bHQNCj4gPiArICAgICAgICAgICAgICk7DQo+ID4gKyAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gPiArICAgIERFQlVHICgoREVCVUdfSU5GTywgIlN1Y2Nlc3MgdG8gZ2V0IE1hYyBhZGRy ZXNzIGZyb20gUk5ESVMNCj4gbWVzc2FnZS5cbiIpKTsNCj4gPiArICAgIGZvciAoSW5kZXggPSAw OyBJbmRleCA8IFBYRV9IV0FERFJfTEVOX0VUSEVSOyBJbmRleCsrKSB7DQo+ID4gKyAgICAgIE1h Y0FkZHJlc3MtPkFkZHJbSW5kZXhdID0gUm5kaXNRdWVyeU1zZ0NtcGx0LkFkZHJbSW5kZXhdOw0K PiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIFVzYlJuZGlzRGV2aWNlLT5SZXF1ZXN0SWQrKzsN Cj4gPiArICAgIHJldHVybiBTdGF0dXM7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAvLyBJZiBp dCBpcyBub3Qgc3VwcG9ydCB0aGUgT0lEXzgwMl8zX0NVUlJFTlRfQUREUkVTUy4NCj4gPiArICAv LyBUbyBjaGVjayBVU0IgRXRoZXJuZXQgZnVuY3Rpb25hbCBEZXNjcmlwdG9yDQo+ID4gKyAgU3Rh dHVzID0gVGhpcy0+VXNiRXRoRnVuRGVzY3JpcHRvciAoVGhpcywgJlVzYkV0aERlc2NyaXB0b3Ip Ow0KPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgIERFQlVHICgoREVC VUdfRVJST1IsICIlYTpVc2JFdGhGdW5EZXNjcmlwdG9yIHN0YXR1cyA9ICVyXG4iLA0KPiBfX0ZV TkNUSU9OX18sIFN0YXR1cykpOw0KPiA+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gPiArICB9DQo+ ID4gKw0KPiA+ICsgIFN0YXR1cyA9IFVzYlJuZGlzRGV2aWNlLT5Vc2JJby0+VXNiR2V0U3RyaW5n RGVzY3JpcHRvciAoDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVz YlJuZGlzRGV2aWNlLT5Vc2JJbywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMHg0MDksICAgICAgICAgICAgICAgICAgICAgICAvLyBFbmdsaXNoLVVTIExhbmd1YWdl IElEDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzYkV0aERlc2Ny aXB0b3IuTWFjQWRkcmVzcywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJkRhdGENCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4g PiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICBERUJVRyAoKERFQlVHX0VS Uk9SLCAiJWE6VXNiR2V0U3RyaW5nRGVzY3JpcHRvciBzdGF0dXMgPSAlclxuIiwNCj4gX19GVU5D VElPTl9fLCBTdGF0dXMpKTsNCj4gPiArICAgIHJldHVybiBTdGF0dXM7DQo+ID4gKyAgfQ0KPiA+ ICsNCj4gPiArICBEYXRhUHRyID0gRGF0YTsNCj4gPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXgg PCBQWEVfSFdBRERSX0xFTl9FVEhFUjsgSW5kZXgrKykgew0KPiA+ICsgICAgQ29weU1lbSAoVG1w U3RyLCBEYXRhUHRyLCBzaXplb2YgKENIQVIxNikpOw0KPiA+ICsgICAgRGF0YVB0cisrOw0KPiA+ ICsgICAgSGkgPSAoVUlOVDgpU3RySGV4VG9VaW50biAoVG1wU3RyKTsNCj4gPiArICAgIENvcHlN ZW0gKFRtcFN0ciwgRGF0YVB0ciwgc2l6ZW9mIChDSEFSMTYpKTsNCj4gPiArICAgIERhdGFQdHIr KzsNCj4gPiArICAgIExvdyAgICAgICAgICAgICAgICAgICAgID0gKFVJTlQ4KVN0ckhleFRvVWlu dG4gKFRtcFN0cik7DQo+ID4gKyAgICBNYWNBZGRyZXNzLT5BZGRyW0luZGV4XSA9IChIaSA8PCA0 KSB8IExvdzsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gK30N Cj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFJldHJpZXZlcyB0aGUgVVNCIEV0aGVybmV0IEJ1bGsg dHJhbnNmZXIgZGF0YSBzaXplLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBUaGlzICAgICAg ICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MDQo+IGluc3Rh bmNlLg0KPiA+ICsgIEBwYXJhbVtvdXRdIEJ1bGtTaXplICAgICAgQSBwb2ludGVyIHRvIHRoZSBC dWxrIHRyYW5zZmVyIGRhdGEgc2l6ZS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VT UyAgICAgICBUaGUgYnVsayB0cmFuc2ZlciBkYXRhIHNpemUgd2FzIHJldHJpZXZlZA0KPiBzdWNj ZXNzZnVsbHkuDQo+ID4gKyAgQHJldHZhbCBvdGhlciAgICAgICAgICAgICBGYWlsZWQgdG8gcmV0 cmlldmUgdGhlIGJ1bGsgdHJhbnNmZXIgZGF0YSBzaXplLg0KPiA+ICsNCj4gPiArKiovDQo+ID4g K0VGSV9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ID4gK1VzYkV0aEJ1bGtTaXplICgNCj4gPiArICBJ TiAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4gPiArICBPVVQgVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgICAqQnVsa1NpemUNCj4gPiArICApDQo+ID4gK3sNCj4gPiAr ICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gPiArICBVU0JfRVRIRVJO RVRfRlVOX0RFU0NSSVBUT1IgIFVzYkV0aEZ1bkRlc2NyaXB0b3I7DQo+ID4gKyAgVVNCX1JORElT X0RFVklDRSAgICAgICAgICAgICAqVXNiUm5kaXNEZXZpY2U7DQo+ID4gKw0KPiA+ICsgIFJFTU9U RV9ORElTX1FVRVJZX01BWF9UT1RBTF9TSVpFX01TRyAgICBSbmRpc1F1ZXJ5TXNnOw0KPiA+ICsg IFJFTU9URV9ORElTX1FVRVJZX01BWF9UT1RBTF9TSVpFX0NNUExUDQo+IFJuZGlzUXVlcnlNc2dD bXBsdDsNCj4gPiArDQo+ID4gKyAgVXNiUm5kaXNEZXZpY2UgPSBVU0JfUk5ESVNfREVWSUNFX0ZS T01fVEhJUyAoVGhpcyk7DQo+ID4gKw0KPiA+ICsgIFplcm9NZW0gKCZSbmRpc1F1ZXJ5TXNnLCBz aXplb2YNCj4gKFJFTU9URV9ORElTX1FVRVJZX01BWF9UT1RBTF9TSVpFX01TRykpOw0KPiA+ICsg IFplcm9NZW0gKCZSbmRpc1F1ZXJ5TXNnQ21wbHQsIHNpemVvZg0KPiAoUkVNT1RFX05ESVNfUVVF UllfTUFYX1RPVEFMX1NJWkVfQ01QTFQpKTsNCj4gPiArDQo+ID4gKyAgUm5kaXNRdWVyeU1zZy5R dWVyeU1zZy5NZXNzYWdlVHlwZSAgID0gUk5ESVNfUVVFUllfTVNHOw0KPiA+ICsgIFJuZGlzUXVl cnlNc2cuUXVlcnlNc2cuTWVzc2FnZUxlbmd0aCA9IHNpemVvZg0KPiAoUkVNT1RFX05ESVNfUVVF UllfTUFYX1RPVEFMX1NJWkVfTVNHKTsNCj4gPiArICBSbmRpc1F1ZXJ5TXNnLlF1ZXJ5TXNnLlJl cXVlc3RJRCAgICAgPSBVc2JSbmRpc0RldmljZS0+UmVxdWVzdElkOw0KPiA+ICsgIFJuZGlzUXVl cnlNc2cuUXVlcnlNc2cuT2lkICAgICAgICAgICA9DQo+IE9JRF9HRU5fTUFYSU1VTV9UT1RBTF9T SVpFOw0KPiA+ICsNCj4gPiArICBSbmRpc1F1ZXJ5TXNnQ21wbHQuUXVlcnlDbXBsdC5NZXNzYWdl VHlwZSAgID0NCj4gUk5ESVNfUVVFUllfQ01QTFQ7DQo+ID4gKyAgUm5kaXNRdWVyeU1zZ0NtcGx0 LlF1ZXJ5Q21wbHQuTWVzc2FnZUxlbmd0aCA9IHNpemVvZg0KPiAoUkVNT1RFX05ESVNfUVVFUllf TUFYX1RPVEFMX1NJWkVfQ01QTFQpOw0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBSbmRpc0NvbnRy b2xNc2cgKA0KPiA+ICsgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2UsDQo+ID4gKyAgICAgICAg ICAgICAoUkVNT1RFX05ESVNfTVNHX0hFQURFUiAqKSZSbmRpc1F1ZXJ5TXNnLA0KPiA+ICsgICAg ICAgICAgICAgKFJFTU9URV9ORElTX01TR19IRUFERVIgKikmUm5kaXNRdWVyeU1zZ0NtcGx0DQo+ ID4gKyAgICAgICAgICAgICApOw0KPiA+ICsgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ ID4gKyAgICBERUJVRyAoKERFQlVHX0lORk8sICJTdWNjZXNzIHRvIGdldCBNYXggVG90YWwgc2l6 ZSA6ICVYICBcbiIsDQo+IFJuZGlzUXVlcnlNc2dDbXBsdC5NYXhUb3RhbFNpemUpKTsNCj4gPiAr ICAgICpCdWxrU2l6ZSA9IFJuZGlzUXVlcnlNc2dDbXBsdC5NYXhUb3RhbFNpemU7DQo+ID4gKyAg ICBVc2JSbmRpc0RldmljZS0+UmVxdWVzdElkKys7DQo+ID4gKyAgICByZXR1cm4gU3RhdHVzOw0K PiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gVGhpcy0+VXNiRXRoRnVuRGVzY3JpcHRv ciAoVGhpcywgJlVzYkV0aEZ1bkRlc2NyaXB0b3IpOw0KPiA+ICsgIGlmIChFRklfRVJST1IgKFN0 YXR1cykpIHsNCj4gPiArICAgIHJldHVybiBTdGF0dXM7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiAr ICAqQnVsa1NpemUgPSAoVUlOVE4pVXNiRXRoRnVuRGVzY3JpcHRvci5NYXhTZWdtZW50U2l6ZTsN Cj4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBS ZXRyaWV2ZXMgdGhlIFVTQiBIZWFkZXIgZnVuY3Rpb25hbCBEZXNjcmlwdG9yLg0KPiA+ICsNCj4g PiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUN Cj4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGluc3RhbmNlLg0KPiA+ICsgIEBwYXJhbVtv dXRdIFVzYkhlYWRlckZ1bkRlc2NyaXB0b3IgQSBwb2ludGVyIHRvIHRoZSBjYWxsZXIgYWxsb2Nh dGVkDQo+IFVTQiBIZWFkZXIgRnVuY3Rpb25hbCBEZXNjcmlwdG9yLg0KPiA+ICsNCj4gPiArICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgVVNCIEhlYWRlciBGdW5jdGlvbmFsIGRl c2NyaXB0b3Igd2FzDQo+IHJldHJpZXZlZCBzdWNjZXNzZnVsbHkuDQo+ID4gKyAgQHJldHZhbCBF RklfSU5WQUxJRF9QQVJBTUVURVIgVXNiSGVhZGVyRnVuRGVzY3JpcHRvciBpcyBOVUxMLg0KPiA+ ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgIFRoZSBVU0IgSGVhZGVyIEZ1bmN0aW9u YWwgZGVzY3JpcHRvciB3YXMNCj4gbm90IGZvdW5kLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VG SV9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ID4gK0dldFVzYkhlYWRlckZ1bkRlc2NyaXB0b3IgKA0K PiA+ICsgIElOICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiA+ICsgIE9V VCBVU0JfSEVBREVSX0ZVTl9ERVNDUklQVE9SICAgICpVc2JIZWFkZXJGdW5EZXNjcmlwdG9yDQo+ ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1NUQVRVUyAgICAgICAgU3RhdHVzOw0KPiA+ICsg IFVTQl9STkRJU19ERVZJQ0UgICpVc2JSbmRpc0RldmljZTsNCj4gPiArDQo+ID4gKyAgVXNiUm5k aXNEZXZpY2UgPSBVU0JfUk5ESVNfREVWSUNFX0ZST01fVEhJUyAoVGhpcyk7DQo+ID4gKw0KPiA+ ICsgIGlmIChVc2JIZWFkZXJGdW5EZXNjcmlwdG9yID09IE5VTEwpIHsNCj4gPiArICAgIHJldHVy biBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBTdGF0dXMg PSBHZXRGdW5jdGlvbmFsRGVzY3JpcHRvciAoDQo+ID4gKyAgICAgICAgICAgICBVc2JSbmRpc0Rl dmljZS0+Q29uZmlnLA0KPiA+ICsgICAgICAgICAgICAgSEVBREVSX0ZVTl9ERVNDUklQVE9SLA0K PiA+ICsgICAgICAgICAgICAgVXNiSGVhZGVyRnVuRGVzY3JpcHRvcg0KPiA+ICsgICAgICAgICAg ICAgKTsNCj4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4g PiArICBSZXRyaWV2ZXMgdGhlIFVTQiBVbmlvbiBmdW5jdGlvbmFsIERlc2NyaXB0b3IuDQo+ID4g Kw0KPiA+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgICAgQSBwb2ludGVyIHRv IHRoZQ0KPiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ID4gKyAgQHBh cmFtW291dF0gVXNiVW5pb25GdW5EZXNjcmlwdG9yICBBIHBvaW50ZXIgdG8gdGhlIGNhbGxlciBh bGxvY2F0ZWQNCj4gVVNCIFVuaW9uIEZ1bmN0aW9uYWwgRGVzY3JpcHRvci4NCj4gPiArDQo+ID4g KyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBVU0IgVW5pb24gRnVuY3Rpb25h bCBkZXNjcmlwdG9yIHdhcw0KPiByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiA+ICsgIEByZXR2 YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBVc2JVbmlvbkZ1bkRlc2NyaXB0b3IgaXMgTlVMTC4N Cj4gPiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICAgVGhlIFVTQiBVbmlvbiBGdW5j dGlvbmFsIGRlc2NyaXB0b3Igd2FzDQo+IG5vdCBmb3VuZC4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ ICtFRklfU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtHZXRVc2JVbmlvbkZ1bkRlc2NyaXB0b3Ig KA0KPiA+ICsgIElOICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiA+ICsg IE9VVCBVU0JfVU5JT05fRlVOX0RFU0NSSVBUT1IgICAgICpVc2JVbmlvbkZ1bkRlc2NyaXB0b3IN Cj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RBVFVTICAgICAgICBTdGF0dXM7DQo+ID4g KyAgVVNCX1JORElTX0RFVklDRSAgKlVzYlJuZGlzRGV2aWNlOw0KPiA+ICsNCj4gPiArICBVc2JS bmRpc0RldmljZSA9IFVTQl9STkRJU19ERVZJQ0VfRlJPTV9USElTIChUaGlzKTsNCj4gPiArDQo+ ID4gKyAgaWYgKFVzYlVuaW9uRnVuRGVzY3JpcHRvciA9PSBOVUxMKSB7DQo+ID4gKyAgICByZXR1 cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgU3RhdHVz ID0gR2V0RnVuY3Rpb25hbERlc2NyaXB0b3IgKA0KPiA+ICsgICAgICAgICAgICAgVXNiUm5kaXNE ZXZpY2UtPkNvbmZpZywNCj4gPiArICAgICAgICAgICAgIFVOSU9OX0ZVTl9ERVNDUklQVE9SLA0K PiA+ICsgICAgICAgICAgICAgVXNiVW5pb25GdW5EZXNjcmlwdG9yDQo+ID4gKyAgICAgICAgICAg ICApOw0KPiA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ ICsgIFJldHJpZXZlcyB0aGUgVVNCIEV0aGVybmV0IGZ1bmN0aW9uYWwgRGVzY3JpcHRvci4NCj4g PiArDQo+ID4gKyAgVGhpcyBmdW5jdGlvbiBnZXQgdGhlIE1hYyBBZGRyZXNzLCBFdGhlcm5ldCBz dGF0aXN0aWNzLCBtYXhpbXVtDQo+IHNlZ21lbnQgc2l6ZSwNCj4gPiArICBudW1iZXIgb2YgbXVs dGljYXN0IGZpbHRlcnMsIGFuZCBudW1iZXIgb2YgcGF0dGVybiBmaWx0ZXJzIGZyb20gRXRoZXJu ZXQNCj4gPiArICBmdW5jdGlvbmFsIERlc2NyaXB0b3IuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtp bl0gIFRoaXMgICAgICAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZQ0KPiBFREtJSV9VU0Jf RVRIRVJORVRfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ID4gKyAgQHBhcmFtW291dF0gVXNiRXRoRnVu RGVzY3JpcHRvciAgICBBIHBvaW50ZXIgdG8gdGhlIGNhbGxlciBhbGxvY2F0ZWQNCj4gVVNCIEV0 aGVybmV0IEZ1bmN0aW9uYWwgRGVzY3JpcHRvci4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgICAgICAgIFRoZSBVU0IgRXRoZXJuZXQgRnVuY3Rpb25hbCBkZXNjcmlwdG9y IHdhcw0KPiByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiA+ICsgIEByZXR2YWwgRUZJX0lOVkFM SURfUEFSQU1FVEVSICBVc2JFdGhGdW5EZXNjcmlwdG9yIGlzIE5VTEwuDQo+ID4gKyAgQHJldHZh bCBFRklfTk9UX0ZPVU5EICAgICAgICAgIFRoZSBVU0IgRXRoZXJuZXQgRnVuY3Rpb25hbCBkZXNj cmlwdG9yDQo+IHdhcyBub3QgZm91bmQuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRV Uw0KPiA+ICtFRklBUEkNCj4gPiArR2V0VXNiUm5kaXNGdW5EZXNjcmlwdG9yICgNCj4gPiArICBJ TiAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4gPiArICBPVVQgVVNCX0VU SEVSTkVUX0ZVTl9ERVNDUklQVE9SICAqVXNiRXRoRnVuRGVzY3JpcHRvcg0KPiA+ICsgICkNCj4g PiArew0KPiA+ICsgIEVGSV9TVEFUVVMgICAgICAgIFN0YXR1czsNCj4gPiArICBVU0JfUk5ESVNf REVWSUNFICAqVXNiUm5kaXNEZXZpY2U7DQo+ID4gKw0KPiA+ICsgIFVzYlJuZGlzRGV2aWNlID0g VVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMgKFRoaXMpOw0KPiA+ICsNCj4gPiArICBpZiAoVXNi RXRoRnVuRGVzY3JpcHRvciA9PSBOVUxMKSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURf UEFSQU1FVEVSOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gR2V0RnVuY3Rpb25h bERlc2NyaXB0b3IgKA0KPiA+ICsgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPkNvbmZpZywN Cj4gPiArICAgICAgICAgICAgIEVUSEVSTkVUX0ZVTl9ERVNDUklQVE9SLA0KPiA+ICsgICAgICAg ICAgICAgVXNiRXRoRnVuRGVzY3JpcHRvcg0KPiA+ICsgICAgICAgICAgICAgKTsNCj4gPiArICBy ZXR1cm4gU3RhdHVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGlzIHJlcXVl c3Qgc2V0cyB0aGUgRXRoZXJuZXQgZGV2aWNlIG11bHRpY2FzdCBmaWx0ZXJzIGFzIHNwZWNpZmll ZCBpbiB0aGUNCj4gPiArICBzZXF1ZW50aWFsIGxpc3Qgb2YgNDggYml0IEV0aGVybmV0IG11bHRp Y2FzdCBhZGRyZXNzZXMuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAg ICAgICAgICAgQSBwb2ludGVyIHRvIHRoZQ0KPiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wg aW5zdGFuY2UuDQo+ID4gKyAgQHBhcmFtW2luXSAgVmFsdWUgICAgICAgICAgICAgICAgICBOdW1i ZXIgb2YgZmlsdGVycy4NCj4gPiArICBAcGFyYW1baW5dICBNY2FzdEFkZHIgICAgICAgICAgICAg IEEgcG9pbnRlciB0byB0aGUgdmFsdWUgb2YgdGhlIG11bHRpY2FzdA0KPiBhZGRyZXNzZXMuDQo+ ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgcmVxdWVzdCBl eGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ID4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAg ICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ID4gKyAgQHJl dHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBk ZXZpY2UgZXJyb3IuDQo+ID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIE9uZSBv ZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZA0KPiB2YWx1ZS4NCj4gPiArICBAcmV0dmFs IEVGSV9VTlNVUFBPUlRFRCAgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gPiArDQo+ID4gKyoqLw0K PiA+ICtFRklfU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtTZXRVc2JSbmRpc01jYXN0RmlsdGVy ICgNCj4gPiArICBJTiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiA+ICsg IElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUsDQo+ID4gKyAgSU4gVk9JRCAg ICAgICAgICAgICAgICAgICAgICAgICAqTWNhc3RBZGRyDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4g KyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ID4gKyAgRUZJX1VTQl9E RVZJQ0VfUkVRVUVTVCAgICAgICBSZXF1ZXN0Ow0KPiA+ICsgIFVJTlQzMiAgICAgICAgICAgICAg ICAgICAgICAgVHJhbnNTdGF0dXM7DQo+ID4gKyAgVVNCX0VUSEVSTkVUX0ZVTl9ERVNDUklQVE9S ICBVc2JFdGhGdW5EZXNjcmlwdG9yOw0KPiA+ICsgIFVTQl9STkRJU19ERVZJQ0UgICAgICAgICAg ICAgKlVzYlJuZGlzRGV2aWNlOw0KPiA+ICsNCj4gPiArICBVc2JSbmRpc0RldmljZSA9IFVTQl9S TkRJU19ERVZJQ0VfRlJPTV9USElTIChUaGlzKTsNCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gVGhp cy0+VXNiRXRoRnVuRGVzY3JpcHRvciAoVGhpcywgJlVzYkV0aEZ1bkRlc2NyaXB0b3IpOw0KPiA+ ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgIHJldHVybiBTdGF0dXM7DQo+ ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoKFVzYkV0aEZ1bkRlc2NyaXB0b3IuTnVtYmVyTWNG aWx0ZXJzIDw8IDEpID09IDApIHsNCj4gPiArICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBSZXF1ZXN0LlJlcXVlc3RUeXBlID0gVVNCX0VUSEVSTkVU X1NFVF9SRVFfVFlQRTsNCj4gPiArICBSZXF1ZXN0LlJlcXVlc3QgICAgID0gU0VUX0VUSF9NVUxU SUNBU1RfRklMVEVSU19SRVE7DQo+ID4gKyAgUmVxdWVzdC5WYWx1ZSAgICAgICA9IFZhbHVlOw0K PiA+ICsgIFJlcXVlc3QuSW5kZXggICAgICAgPSBVc2JSbmRpc0RldmljZS0+TnVtT2ZJbnRlcmZh Y2U7DQo+ID4gKyAgUmVxdWVzdC5MZW5ndGggICAgICA9IFZhbHVlICogNjsNCj4gPiArDQo+ID4g KyAgcmV0dXJuIFVzYlJuZGlzRGV2aWNlLT5Vc2JJby0+VXNiQ29udHJvbFRyYW5zZmVyICgNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5Vc2JJ bywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZSZXF1ZXN0LA0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWZpVXNiRGF0YU91dCwNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9FVEhFUk5FVF9UUkFOU0ZFUl9U SU1FT1VULA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWNhc3RBZGRy LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdC5MZW5ndGgs DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmVHJhbnNTdGF0dXMNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ID4gK30NCj4gPiArDQo+ ID4gKy8qKg0KPiA+ICsgIFRoaXMgcmVxdWVzdCBzZXRzIHVwIHRoZSBzcGVjaWZpZWQgRXRoZXJu ZXQgcG93ZXIgbWFuYWdlbWVudCBwYXR0ZXJuDQo+IGZpbHRlciBhcw0KPiA+ICsgIGRlc2NyaWJl ZCBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmUuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIFRoaXMg ICAgICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlDQo+IEVES0lJX1VTQl9FVEhFUk5FVF9Q Uk9UT0NPTCBpbnN0YW5jZS4NCj4gPiArICBAcGFyYW1baW5dICBWYWx1ZSAgICAgICAgICAgICAg ICAgTnVtYmVyIG9mIGZpbHRlcnMuDQo+ID4gKyAgQHBhcmFtW2luXSAgTGVuZ3RoICAgICAgICAg ICAgICAgIFNpemUgb2YgdGhlIHBvd2VyIG1hbmFnZW1lbnQgcGF0dGVybiBmaWx0ZXINCj4gZGF0 YS4NCj4gPiArICBAcGFyYW1baW5dICBQYXR0ZXJuRmlsdGVyICAgICAgICAgQSBwb2ludGVyIHRv IHRoZSBwb3dlciBtYW5hZ2VtZW50DQo+IHBhdHRlcm4gZmlsdGVyIHN0cnVjdHVyZS4NCj4gPiAr DQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1 dGVkIHN1Y2Nlc3NmdWxseS4NCj4gPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICAg QSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gPiArICBAcmV0dmFs IEVGSV9ERVZJQ0VfRVJST1IgICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmlj ZSBlcnJvci4NCj4gPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgT25lIG9mIHRo ZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkDQo+IHZhbHVlLg0KPiA+ICsgIEByZXR2YWwgRUZJ X1VOU1VQUE9SVEVEICAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiA+ICsNCj4gPiArKiovDQo+ID4g K0VGSV9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ID4gK1NldFVzYlJuZGlzUG93ZXJGaWx0ZXIgKA0K PiA+ICsgIElOIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ID4gKyAgSU4g VUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSwNCj4gPiArICBJTiBVSU5UMTYgICAg ICAgICAgICAgICAgICAgICAgIExlbmd0aCwNCj4gPiArICBJTiBWT0lEICAgICAgICAgICAgICAg ICAgICAgICAgICpQYXR0ZXJuRmlsdGVyDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1VT Ql9ERVZJQ0VfUkVRVUVTVCAgUmVxdWVzdDsNCj4gPiArICBVSU5UMzIgICAgICAgICAgICAgICAg ICBUcmFuc1N0YXR1czsNCj4gPiArICBVU0JfUk5ESVNfREVWSUNFICAgICAgICAqVXNiUm5kaXNE ZXZpY2U7DQo+ID4gKw0KPiA+ICsgIFVzYlJuZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9G Uk9NX1RISVMgKFRoaXMpOw0KPiA+ICsNCj4gPiArICBSZXF1ZXN0LlJlcXVlc3RUeXBlID0gVVNC X0VUSEVSTkVUX1NFVF9SRVFfVFlQRTsNCj4gPiArICBSZXF1ZXN0LlJlcXVlc3QgICAgID0NCj4g U0VUX0VUSF9QT1dFUl9NQU5BR0VNRU5UX1BBVFRFUk5fRklMVEVSX1JFUTsNCj4gPiArICBSZXF1 ZXN0LlZhbHVlICAgICAgID0gVmFsdWU7DQo+ID4gKyAgUmVxdWVzdC5JbmRleCAgICAgICA9IFVz YlJuZGlzRGV2aWNlLT5OdW1PZkludGVyZmFjZTsNCj4gPiArICBSZXF1ZXN0Lkxlbmd0aCAgICAg ID0gTGVuZ3RoOw0KPiA+ICsNCj4gPiArICByZXR1cm4gVXNiUm5kaXNEZXZpY2UtPlVzYklvLT5V c2JDb250cm9sVHJhbnNmZXIgKA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVXNiUm5kaXNEZXZpY2UtPlVzYklvLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJlJlcXVlc3QsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBFZmlVc2JEYXRhT3V0LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VVNCX0VUSEVSTkVUX1RSQU5TRkVSX1RJTUVPVVQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQYXR0ZXJuRmlsdGVyLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTGVuZ3RoLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJlRyYW5zU3RhdHVzDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGlzIHJlcXVlc3QgcmV0cmlldmVz IHRoZSBzdGF0dXMgb2YgdGhlIHNwZWNpZmllZCBFdGhlcm5ldCBwb3dlcg0KPiBtYW5hZ2VtZW50 DQo+ID4gKyAgcGF0dGVybiBmaWx0ZXIgZnJvbSB0aGUgZGV2aWNlLg0KPiA+ICsNCj4gPiArICBA cGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUNCj4gRURL SUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGluc3RhbmNlLg0KPiA+ICsgIEBwYXJhbVtpbl0gIFZh bHVlICAgICAgICAgICAgICAgICAgVGhlIGZpbHRlciBudW1iZXIuDQo+ID4gKyAgQHBhcmFtW291 dF0gUGF0dGVybkFjdGl2ZSAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIHBhdHRlcm4gYWN0aXZl IGJvb2xlYW4uDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBU aGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ID4gKyAgQHJldHZhbCBFRklfVElN RU9VVCAgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3Qu DQo+ID4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgIFRoZSByZXF1ZXN0IGZhaWxl ZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJB TUVURVIgIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZA0KPiB2YWx1ZS4NCj4g PiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gPiAr DQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtHZXRVc2JSbmRp c1Bvd2VyRmlsdGVyICgNCj4gPiArICBJTiAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAq VGhpcywNCj4gPiArICBJTiAgVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSwNCj4g PiArICBPVVQgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAqUGF0dGVybkFjdGl2ZQ0KPiA+ ICsgICkNCj4gPiArew0KPiA+ICsgIEVGSV9VU0JfREVWSUNFX1JFUVVFU1QgIFJlcXVlc3Q7DQo+ ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgVHJhbnNTdGF0dXM7DQo+ID4gKyAgVVNCX1JO RElTX0RFVklDRSAgICAgICAgKlVzYlJuZGlzRGV2aWNlOw0KPiA+ICsNCj4gPiArICBVc2JSbmRp c0RldmljZSA9IFVTQl9STkRJU19ERVZJQ0VfRlJPTV9USElTIChUaGlzKTsNCj4gPiArDQo+ID4g KyAgUmVxdWVzdC5SZXF1ZXN0VHlwZSA9IFVTQl9FVEhFUk5FVF9HRVRfUkVRX1RZUEU7DQo+ID4g KyAgUmVxdWVzdC5SZXF1ZXN0ICAgICA9DQo+IEdFVF9FVEhfUE9XRVJfTUFOQUdFTUVOVF9QQVRU RVJOX0ZJTFRFUl9SRVE7DQo+ID4gKyAgUmVxdWVzdC5WYWx1ZSAgICAgICA9IFZhbHVlOw0KPiA+ ICsgIFJlcXVlc3QuSW5kZXggICAgICAgPSBVc2JSbmRpc0RldmljZS0+TnVtT2ZJbnRlcmZhY2U7 DQo+ID4gKyAgUmVxdWVzdC5MZW5ndGggICAgICA9IFVTQl9FVEhfUE9XRVJfRklMVEVSX0xFTkdU SDsNCj4gPiArDQo+ID4gKyAgcmV0dXJuIFVzYlJuZGlzRGV2aWNlLT5Vc2JJby0+VXNiQ29udHJv bFRyYW5zZmVyICgNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzYlJu ZGlzRGV2aWNlLT5Vc2JJbywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZSZXF1ZXN0LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWZpVXNi RGF0YUluLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNCX0VUSEVS TkVUX1RSQU5TRkVSX1RJTUVPVVQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQYXR0ZXJuQWN0aXZlLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVVNCX0VUSF9QT1dFUl9GSUxURVJfTEVOR1RILA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJlRyYW5zU3RhdHVzDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArDQo+ID4gKyAgQ29u dmVydHMgUFhFIGZpbHRlciBzZXR0aW5ncyB0byBSTkRJUyB2YWx1ZXMNCj4gPiArDQo+ID4gKyAg QHBhcmFtW2luXSAgVmFsdWUgICAgICBQWEUgZmlsdGVyIGRhdGEuDQo+ID4gKyAgQHBhcmFtW291 dF0gQ2RjRmlsdGVyICBBIHBvaW50ZXIgdG8gdGhlIEV0aGVybmV0IFBhY2tldCBGaWx0ZXIgQml0 bWFwDQo+IHZhbHVlIGNvbnZlcnRlZCBieSBQWEVfT1BGTEFHUy4NCj4gPiArDQo+ID4gKyoqLw0K PiA+ICtWT0lEDQo+ID4gK0NvbnZlcnRGaWx0ZXIgKA0KPiA+ICsgIElOICBVSU5UMTYgIFZhbHVl LA0KPiA+ICsgIE9VVCBVSU5UMTYgICpDZGNGaWx0ZXINCj4gPiArICApDQo+ID4gK3sNCj4gPiAr ICBVSU5UMzIgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiA+ICsgIFVJTlQzMiAgICAgICAgICAg ICAgICAgQ291bnQ7DQo+ID4gKyAgc3RhdGljIHN0cnVjdCBCSVRfTUFQICBUYWJsZVtdID0gew0K PiA+ICsgICAgeyBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9VTklDQVNULA0KPiBORElTX1BB Q0tFVF9UWVBFX0RJUkVDVEVEICAgICAgfSwNCj4gPiArICAgIHsgUFhFX09QRkxBR1NfUkVDRUlW RV9GSUxURVJfQlJPQURDQVNULA0KPiBORElTX1BBQ0tFVF9UWVBFX0JST0FEQ0FTVCAgICAgfSwN Cj4gPiArICAgIHsgUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfRklMVEVSRURfTVVMVElDQVNU LA0KPiBORElTX1BBQ0tFVF9UWVBFX01VTFRJQ0FTVCAgICAgfSwNCj4gPiArICAgIHsgUFhFX09Q RkxBR1NfUkVDRUlWRV9GSUxURVJfUFJPTUlTQ1VPVVMsDQo+IE5ESVNfUEFDS0VUX1RZUEVfUFJP TUlTQ1VPVVMgICB9LA0KPiA+ICsgICAgeyBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9BTExf TVVMVElDQVNULA0KPiBORElTX1BBQ0tFVF9UWVBFX0FMTF9NVUxUSUNBU1QgfSwNCj4gPiArICB9 Ow0KPiA+ICsNCj4gPiArICBDb3VudCA9IHNpemVvZiAoVGFibGUpL3NpemVvZiAoVGFibGVbMF0p Ow0KPiA+ICsNCj4gPiArICBmb3IgKEluZGV4ID0gMDsgKFRhYmxlW0luZGV4XS5TcmMgIT0gMCkg JiYgKEluZGV4IDwgQ291bnQpOyBJbmRleCsrKSB7DQo+ID4gKyAgICBpZiAoVGFibGVbSW5kZXhd LlNyYyAmIFZhbHVlKSB7DQo+ID4gKyAgICAgICpDZGNGaWx0ZXIgfD0gVGFibGVbSW5kZXhdLkRz dDsNCj4gPiArICAgIH0NCj4gPiArICB9DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsN Cj4gPiArICBVcGRhdGVzIEZpbHRlciBzZXR0aW5ncyBvbiB0aGUgZGV2aWNlLg0KPiA+ICsNCj4g PiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9y IGJsb2NrLg0KPiA+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3Jr IGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NU QVRVUw0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ID4g K1JuZGlzVW5kaVJlY2VpdmVGaWx0ZXIgKA0KPiA+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4g PiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RB VFVTICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gPiArICBVSU5UOCAgICAgICAgICAgICAg ICAgICAgICAgICpNY2FzdExpc3Q7DQo+ID4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAg ICBDb3VudDsNCj4gPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4MTsNCj4g PiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4MjsNCj4gPiArICBVSU5UNjQg ICAgICAgICAgICAgICAgICAgICAgIENwYkFkZHI7DQo+ID4gKyAgVUlOVDMyICAgICAgICAgICAg ICAgICAgICAgICBDcGJTaXplOw0KPiA+ICsgIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAg U2V0RmlsdGVyOw0KPiA+ICsgIFBYRV9DUEJfUkVDRUlWRV9GSUxURVJTICAgICAgKkNwYjsNCj4g PiArICBVU0JfRVRIRVJORVRfRlVOX0RFU0NSSVBUT1IgIFVzYkV0aEZ1bkRlc2NyaXB0b3I7DQo+ ID4gKw0KPiA+ICsgIENvdW50ICAgICA9IDA7DQo+ID4gKyAgQ3BiQWRkciAgID0gQ2RiLT5DUEJh ZGRyOw0KPiA+ICsgIENwYlNpemUgICA9IENkYi0+Q1BCc2l6ZTsNCj4gPiArICBTZXRGaWx0ZXIg PSAoVUlOVDE2KShDZGItPk9wRmxhZ3MgJiAweDFGKTsNCj4gPiArICBDcGIgICAgICAgPSAoUFhF X0NQQl9SRUNFSVZFX0ZJTFRFUlMgKikoVUlOVE4pQ3BiQWRkcjsNCj4gPiArDQo+ID4gKyAgLy8g VGhlIENwYiBjb3VsZCBiZSBOVUxMLihyZWY6UFhFX0NQQkFERFJfTk9UX1VTRUQpDQo+ID4gKyAg TmljLT5SeEZpbHRlciA9IChVSU5UOClTZXRGaWx0ZXI7DQo+ID4gKw0KPiA+ICsgIGlmICgoKFNl dEZpbHRlciAmDQo+IFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX0ZJTFRFUkVEX01VTFRJQ0FT VCkgIT0gMCkgfHwgKENwYiAhPQ0KPiBOVUxMKSkgew0KPiA+ICsgICAgaWYgKENwYiAhPSBOVUxM KSB7DQo+ID4gKyAgICAgIE5pYy0+TWNhc3RDb3VudCA9IChVSU5UOCkoQ3BiU2l6ZSAvIFBYRV9N QUNfTEVOR1RIKTsNCj4gPiArICAgICAgQ29weU1lbSAoJk5pYy0+TWNhc3RMaXN0LCBDcGIsIE5p Yy0+TWNhc3RDb3VudCk7DQo+ID4gKyAgICB9IGVsc2Ugew0KPiA+ICsgICAgICBOaWMtPk1jYXN0 Q291bnQgPSAwOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIE5pYy0+VXNiRXRoLT5Vc2JF dGhGdW5EZXNjcmlwdG9yIChOaWMtPlVzYkV0aCwNCj4gJlVzYkV0aEZ1bkRlc2NyaXB0b3IpOw0K PiA+ICsgICAgaWYgKChVc2JFdGhGdW5EZXNjcmlwdG9yLk51bWJlck1jRmlsdGVycyA8PCAxKSA9 PSAwKSB7DQo+ID4gKyAgICAgIE5pYy0+UnhGaWx0ZXIgfD0gUFhFX09QRkxBR1NfUkVDRUlWRV9G SUxURVJfQUxMX01VTFRJQ0FTVDsNCj4gPiArICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiU2V0 VXNiRXRoUGFja2V0RmlsdGVyIE5pYyAlbHggTmljLT5Vc2JFdGgNCj4gJWx4ICIsIE5pYywgTmlj LT5Vc2JFdGgpKTsNCj4gPiArICAgICAgTmljLT5Vc2JFdGgtPlNldFVzYkV0aFBhY2tldEZpbHRl ciAoTmljLT5Vc2JFdGgsIE5pYy0+UnhGaWx0ZXIpOw0KPiA+ICsgICAgfSBlbHNlIHsNCj4gPiAr ICAgICAgU3RhdHVzID0gZ0JTLT5BbGxvY2F0ZVBvb2wgKEVmaUJvb3RTZXJ2aWNlc0RhdGEsIE5p Yy0+TWNhc3RDb3VudCAqIDYsDQo+IChWT0lEICoqKSZNY2FzdExpc3QpOw0KPiA+ICsgICAgICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICAgICAgcmV0dXJuIFBYRV9TVEFUQ09E RV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiArICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgaWYg KENwYiAhPSBOVUxMKSB7DQo+ID4gKyAgICAgICAgZm9yIChJbmRleDEgPSAwOyBJbmRleDEgPCBO aWMtPk1jYXN0Q291bnQ7IEluZGV4MSsrKSB7DQo+ID4gKyAgICAgICAgICBmb3IgKEluZGV4MiA9 IDA7IEluZGV4MiA8IDY7IEluZGV4MisrKSB7DQo+ID4gKyAgICAgICAgICAgIE1jYXN0TGlzdFtD b3VudCsrXSA9IENwYi0+TUNhc3RMaXN0W0luZGV4MV1bSW5kZXgyXTsNCj4gPiArICAgICAgICAg IH0NCj4gPiArICAgICAgICB9DQo+ID4gKyAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgIE5pYy0+ UnhGaWx0ZXIgfD0NCj4gUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfRklMVEVSRURfTVVMVElD QVNUOw0KPiA+ICsgICAgICBpZiAoQ3BiICE9IE5VTEwpIHsNCj4gPiArICAgICAgICBOaWMtPlVz YkV0aC0+U2V0VXNiRXRoTWNhc3RGaWx0ZXIgKE5pYy0+VXNiRXRoLCBOaWMtPk1jYXN0Q291bnQs DQo+IE1jYXN0TGlzdCk7DQo+ID4gKyAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgIE5pYy0+VXNi RXRoLT5TZXRVc2JFdGhQYWNrZXRGaWx0ZXIgKE5pYy0+VXNiRXRoLCBOaWMtPlJ4RmlsdGVyKTsN Cj4gPiArICAgICAgRnJlZVBvb2wgKE1jYXN0TGlzdCk7DQo+ID4gKyAgICB9DQo+ID4gKyAgfQ0K PiA+ICsNCj4gPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgIFRoaXMgcmVxdWVzdCBpcyB1c2VkIHRvIGNvbmZpZ3VyZSBkZXZpY2UgRXRoZXJu ZXQgcGFja2V0IGZpbHRlciBzZXR0aW5ncy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgVGhp cyAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZQ0KPiBFREtJSV9VU0JfRVRIRVJORVRfUFJP VE9DT0wgaW5zdGFuY2UuDQo+ID4gKyAgQHBhcmFtW2luXSAgVmFsdWUgICAgICAgICAgICAgUGFj a2V0IEZpbHRlciBCaXRtYXAuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gPiArICBAcmV0dmFs IEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSBy ZXF1ZXN0Lg0KPiA+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0 IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ID4gKyAgQHJldHZhbCBFRklfSU5WQUxJ RF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkDQo+IHZhbHVl Lg0KPiA+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArU2V0VXNi Um5kaXNQYWNrZXRGaWx0ZXIgKA0KPiA+ICsgIElOIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NP TCAgKlRoaXMsDQo+ID4gKyAgSU4gVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZQ0K PiA+ICsgICkNCj4gPiArew0KPiA+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhpcyByZXF1ZXN0IGlzIHVzZWQgdG8gcmV0cmlldmUgYSBz dGF0aXN0aWMgYmFzZWQgb24gdGhlIGZlYXR1cmUgc2VsZWN0b3IuDQo+ID4gKw0KPiA+ICsgIEBw YXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlDQo+IEVES0lJ X1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gPiArICBAcGFyYW1baW5dICBGZWF0 dXJlU2VsZWN0b3IgICAgICAgVmFsdWUgb2YgdGhlIGZlYXR1cmUgc2VsZWN0b3IuDQo+ID4gKyAg QHBhcmFtW291dF0gU3RhdGlzdGljICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgMzIgYml0 IHVuc2lnbmVkIGludGVnZXIuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gPiArICBAcmV0dmFs IEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSBy ZXF1ZXN0Lg0KPiA+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0 IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ID4gKyAgQHJldHZhbCBFRklfSU5WQUxJ RF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkDQo+IHZhbHVl Lg0KPiA+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArR2V0Um5k aXNTdGF0aXN0aWMgKA0KPiA+ICsgIElOICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpU aGlzLA0KPiA+ICsgIElOICBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAgIEZlYXR1cmVTZWxl Y3RvciwNCj4gPiArICBPVVQgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAqU3RhdGlzdGlj DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIFVuZGlT dGFydCBpcyBpbnZva2VkLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRl ciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiA+ICsgIEBwYXJhbVtpbl0gIE5p YyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVk IHN1Y2Nlc3NmdWxseS4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0VG SUFQSQ0KPiA+ICtSbmRpc1VuZGlTdGFydCAoDQo+ID4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0K PiA+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEVGSV9T VEFUVVMgIFN0YXR1czsNCj4gPiArDQo+ID4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiUm5kaXNV bmRpU3RhcnQgTmljICVseCBDZGIgJWx4IE5pYyBTdGF0ZSAleFxuIiwNCj4gTmljLCBDZGIsIE5p Yy0+U3RhdGUpKTsNCj4gPiArDQo+ID4gKyAgLy8gSXNzdWUgUm5kaXMgUmVzZXQgYW5kIGJyaW5n IHRoZSBkZXZpY2UgdG8gUk5ESVNfQlVTX0lOSVRJQUxJWkVEDQo+IHN0YXRlDQo+ID4gKyAgU3Rh dHVzID0gUm5kaXNVbmRpUmVzZXQgKENkYiwgTmljKTsNCj4gPiArICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQo+ID4gKyAgICBSbmRpc1VuZGlSZXNldCAoQ2RiLCBOaWMpOw0KPiA+ICsgIH0N Cj4gPiArDQo+ID4gKyAgU3RhdHVzID0gUm5kaXNVbmRpSW5pdGlhbGl6ZSAoQ2RiLCBOaWMpOw0K PiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgIFJuZGlzVW5kaUluaXRp YWxpemUgKENkYiwgTmljKTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIFJuZGlzVW5kaVNodXRk b3duIChDZGIsIE5pYyk7DQo+ID4gKw0KPiA+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBV bmRpc3RvcCBpcyBpbnZva2VkLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9p bnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiA+ICsgIEBwYXJhbVtpbl0g IE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEu DQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgIFRoZSByZXF1ZXN0IGV4ZWN1 dGVkIHN1Y2Nlc3NmdWxseS4NCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArRUZJQVBJ DQo+ID4gK1JuZGlzVW5kaVN0b3AgKA0KPiA+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gPiAr ICBJTiAgTklDX0RBVEEgICpOaWMNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBERUJVRyAoKERF QlVHX0lORk8sICJSbmRpc1VuZGlTdG9wIFN0YXRlICV4XG4iLCBOaWMtPlN0YXRlKSk7DQo+ID4g KyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBU aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIFVuZGlHZXRJbml0SW5mbyBpcyBpbnZva2VkLg0K PiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBk ZXNjcmlwdG9yIGJsb2NrLg0KPiA+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRo ZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ID4gKw0KPiA+ICsgIEByZXR2 YWwgRUZJX1NVQ0NFU1MgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4g PiArDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtSbmRpc1Vu ZGlHZXRJbml0SW5mbyAoDQo+ID4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiA+ICsgIElOICBO SUNfREFUQSAgKk5pYw0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEVES0lJX1VTQl9FVEhFUk5F VF9QUk9UT0NPTCAgKlVzYkV0aERldmljZTsNCj4gPiArICBVU0JfUk5ESVNfREVWSUNFICAgICAg ICAgICAgICpVc2JSbmRpc0RldmljZTsNCj4gPiArICBQWEVfREJfR0VUX0lOSVRfSU5GTyAgICAg ICAgICpEYjsNCj4gPiArDQo+ID4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiUm5kaXNVbmRpR2V0 SW5pdEluZm9cbiIpKTsNCj4gPiArDQo+ID4gKyAgVXNiRXRoRGV2aWNlICAgPSBOaWMtPlVzYkV0 aDsNCj4gPiArICBVc2JSbmRpc0RldmljZSA9IFVTQl9STkRJU19ERVZJQ0VfRlJPTV9USElTIChV c2JFdGhEZXZpY2UpOw0KPiA+ICsNCj4gPiArICBEYiA9IChQWEVfREJfR0VUX0lOSVRfSU5GTyAq KShVSU5UTilDZGItPkRCYWRkcjsNCj4gPiArDQo+ID4gKyAgRGItPkZyYW1lRGF0YUxlbiA9IFVz YlJuZGlzRGV2aWNlLT5NYXhUcmFuc2ZlclNpemUgLSBzaXplb2YNCj4gKFJFTU9URV9ORElTX1BB Q0tFVF9NU0cpIC0gUFhFX01BQ19IRUFERVJfTEVOX0VUSEVSOw0KPiA+ICsgIC8vIExpbWl0IE1h eCBNVFUgc2l6ZSB0byAxNTAwIGJ5dGVzIGFzIFJORElTIHNwZWMuDQo+ID4gKyAgaWYgKERiLT5G cmFtZURhdGFMZW4gPiBQWEVfTUFYX1RYUlhfVU5JVF9FVEhFUikgew0KPiA+ICsgICAgRGItPkZy YW1lRGF0YUxlbiA9IFBYRV9NQVhfVFhSWF9VTklUX0VUSEVSOw0KPiA+ICsgIH0NCj4gPiArDQo+ ID4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiRGItPkZyYW1lRGF0YUxlbiAleFxuIiwgRGItDQo+ ID5GcmFtZURhdGFMZW4pKTsNCj4gPiArDQo+ID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVu IFJuZGlzVW5kaUdldENvbmZpZ0luZm8gaXMgaW52b2tlZC4NCj4gPiArDQo+ID4gKyAgQHBhcmFt W2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4g PiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2Ug Y29udHJvbGxlciBkYXRhLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICBU aGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiAr RUZJX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArUm5kaXNVbmRpR2V0Q29uZmlnSW5mbyAoDQo+ ID4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiA+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiA+ ICsgICkNCj4gPiArew0KPiA+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIlJuZGlzVW5kaUdldENv bmZpZ0luZm9cbiIpKTsNCj4gPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gK30NCj4gPiAr DQo+ID4gKy8qKg0KPiA+ICsgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gVW5kaUluaXRp YWxpemUgaXMgaW52b2tlZC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50 ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gPiArICBAcGFyYW1baW5dICBO aWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0K PiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBl eGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ID4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAg ICAgTm90IHN1cHBvcnRlZC4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4g K0VGSUFQSQ0KPiA+ICtSbmRpc1VuZGlJbml0aWFsaXplICgNCj4gPiArICBJTiAgUFhFX0NEQiAg ICpDZGIsDQo+ID4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4g KyAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAgKlVzYkV0aERyaXZlcjsNCj4gPiArICBV U0JfUk5ESVNfREVWSUNFICAgICAgICAgICAgICAqVXNiUm5kaXNEZXZpY2U7DQo+ID4gKyAgUkVN T1RFX05ESVNfSU5JVElBTElaRV9NU0cgICAgUm5kaXNJbml0TXNnOw0KPiA+ICsgIFJFTU9URV9O RElTX0lOSVRJQUxJWkVfQ01QTFQgIFJuZGlzSW5pdE1zZ0NtcGx0Ow0KPiA+ICsgIEVGSV9TVEFU VVMgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gPiArDQo+ID4gKyAgREVCVUcgKChERUJV R19JTkZPLCAiUm5kaXNVbmRpSW5pdGlhbGl6ZVxuIikpOw0KPiA+ICsNCj4gPiArICBVc2JFdGhE cml2ZXIgICA9IE5pYy0+VXNiRXRoOw0KPiA+ICsgIFVzYlJuZGlzRGV2aWNlID0gVVNCX1JORElT X0RFVklDRV9GUk9NX1RISVMgKFVzYkV0aERyaXZlcik7DQo+ID4gKw0KPiA+ICsgIFplcm9NZW0g KCZSbmRpc0luaXRNc2csIHNpemVvZiAoUkVNT1RFX05ESVNfSU5JVElBTElaRV9NU0cpKTsNCj4g PiArICBaZXJvTWVtICgmUm5kaXNJbml0TXNnQ21wbHQsIHNpemVvZg0KPiAoUkVNT1RFX05ESVNf SU5JVElBTElaRV9DTVBMVCkpOw0KPiA+ICsNCj4gPiArICBSbmRpc0luaXRNc2cuTWVzc2FnZVR5 cGUgICAgID0gUk5ESVNfSU5JVElBTElaRV9NU0c7DQo+ID4gKyAgUm5kaXNJbml0TXNnLk1lc3Nh Z2VMZW5ndGggICA9IHNpemVvZg0KPiAoUkVNT1RFX05ESVNfSU5JVElBTElaRV9NU0cpOw0KPiA+ ICsgIFJuZGlzSW5pdE1zZy5SZXF1ZXN0SUQgICAgICAgPSBVc2JSbmRpc0RldmljZS0+UmVxdWVz dElkOw0KPiA+ICsgIFJuZGlzSW5pdE1zZy5NYWpvclZlcnNpb24gICAgPSBSTkRJU19NQUpPUl9W RVJTSU9OOw0KPiA+ICsgIFJuZGlzSW5pdE1zZy5NaW5vclZlcnNpb24gICAgPSBSTkRJU19NSU5P Ul9WRVJTSU9OOw0KPiA+ICsgIFJuZGlzSW5pdE1zZy5NYXhUcmFuc2ZlclNpemUgPSBSTkRJU19N QVhfVFJBTlNGRVJfU0laRTsNCj4gPiArDQo+ID4gKyAgUm5kaXNJbml0TXNnQ21wbHQuTWVzc2Fn ZVR5cGUgICA9IFJORElTX0lOSVRJQUxJWkVfQ01QTFQ7DQo+ID4gKyAgUm5kaXNJbml0TXNnQ21w bHQuTWVzc2FnZUxlbmd0aCA9IHNpemVvZg0KPiAoUkVNT1RFX05ESVNfSU5JVElBTElaRV9DTVBM VCk7DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IFJuZGlzQ29udHJvbE1zZyAoVXNiUm5kaXNEZXZp Y2UsDQo+IChSRU1PVEVfTkRJU19NU0dfSEVBREVSICopJlJuZGlzSW5pdE1zZywNCj4gKFJFTU9U RV9ORElTX01TR19IRUFERVIgKikmUm5kaXNJbml0TXNnQ21wbHQpOw0KPiA+ICsNCj4gPiArICBV c2JSbmRpc0RldmljZS0+UmVxdWVzdElkKys7DQo+ID4gKw0KPiA+ICsgIGlmIChFRklfRVJST1Ig KFN0YXR1cykgfHwgKFJuZGlzSW5pdE1zZ0NtcGx0LlN0YXR1cyAmIDB4ODAwMDAwMDApKSB7DQo+ ID4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgLy8gT25seSBX aXJlZCBNZWRpdW0gaXMgc3VwcG9ydGVkDQo+ID4gKyAgaWYgKFJuZGlzSW5pdE1zZ0NtcGx0Lk1l ZGl1bSkgew0KPiA+ICsgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gPiArICB9DQo+ID4g Kw0KPiA+ICsgIFVzYlJuZGlzRGV2aWNlLT5NZWRpdW0gICAgICAgICAgICAgICAgPSBSbmRpc0lu aXRNc2dDbXBsdC5NZWRpdW07DQo+ID4gKyAgVXNiUm5kaXNEZXZpY2UtPk1heFBhY2tldHNQZXJU cmFuc2ZlciA9DQo+IFJuZGlzSW5pdE1zZ0NtcGx0Lk1heFBhY2tldHNQZXJUcmFuc2ZlcjsNCj4g PiArICBVc2JSbmRpc0RldmljZS0+TWF4VHJhbnNmZXJTaXplICAgICAgID0NCj4gUm5kaXNJbml0 TXNnQ21wbHQuTWF4VHJhbnNmZXJTaXplOw0KPiA+ICsgIFVzYlJuZGlzRGV2aWNlLT5QYWNrZXRB bGlnbm1lbnRGYWN0b3IgPQ0KPiBSbmRpc0luaXRNc2dDbXBsdC5QYWNrZXRBbGlnbm1lbnRGYWN0 b3I7DQo+ID4gKw0KPiA+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIk1lZGl1bSA6ICV4IFxuIiwg Um5kaXNJbml0TXNnQ21wbHQuTWVkaXVtKSk7DQo+ID4gKyAgREVCVUcgKChERUJVR19JTkZPLCAi TWF4UGFja2V0c1BlclRyYW5zZmVyIDogJXggXG4iLA0KPiBSbmRpc0luaXRNc2dDbXBsdC5NYXhQ YWNrZXRzUGVyVHJhbnNmZXIpKTsNCj4gPiArICBERUJVRyAoKERFQlVHX0lORk8sICJNYXhUcmFu c2ZlclNpemUgOiAleFxuIiwNCj4gUm5kaXNJbml0TXNnQ21wbHQuTWF4VHJhbnNmZXJTaXplKSk7 DQo+ID4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiUGFja2V0QWxpZ25tZW50RmFjdG9yIDogJXhc biIsDQo+IFJuZGlzSW5pdE1zZ0NtcGx0LlBhY2tldEFsaWdubWVudEZhY3RvcikpOw0KPiA+ICsN Cj4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBU aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIFVuZGlSZXNldCBpcyBpbnZva2VkLg0KPiA+ICsN Cj4gPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlw dG9yIGJsb2NrLg0KPiA+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3 b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJ X1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4g PiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVl IHRvIGEgZGV2aWNlIGVycm9yLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4g PiArRUZJQVBJDQo+ID4gK1JuZGlzVW5kaVJlc2V0ICgNCj4gPiArICBJTiAgUFhFX0NEQiAgICpD ZGIsDQo+ID4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAg RURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVXNiRXRoRHJpdmVyOw0KPiA+ICsgIFVTQl9S TkRJU19ERVZJQ0UgICAgICAgICAgICAgKlVzYlJuZGlzRGV2aWNlOw0KPiA+ICsgIFJFTU9URV9O RElTX1JFU0VUX01TRyAgICAgICAgUm5kaXNSZXNldE1zZzsNCj4gPiArICBSRU1PVEVfTkRJU19S RVNFVF9DTVBMVCAgICAgIFJuZGlzUmVzZXRDbXBsdDsNCj4gPiArICBFRklfU1RBVFVTICAgICAg ICAgICAgICAgICAgIFN0YXR1czsNCj4gPiArDQo+ID4gKyAgREVCVUcgKChERUJVR19JTkZPLCAi Um5kaXNVbmRpUmVzZXRcbiIpKTsNCj4gPiArDQo+ID4gKyAgVXNiRXRoRHJpdmVyICAgPSBOaWMt PlVzYkV0aDsNCj4gPiArICBVc2JSbmRpc0RldmljZSA9IFVTQl9STkRJU19ERVZJQ0VfRlJPTV9U SElTIChVc2JFdGhEcml2ZXIpOw0KPiA+ICsNCj4gPiArICBaZXJvTWVtICgmUm5kaXNSZXNldE1z Zywgc2l6ZW9mIChSRU1PVEVfTkRJU19SRVNFVF9NU0cpKTsNCj4gPiArICBaZXJvTWVtICgmUm5k aXNSZXNldENtcGx0LCBzaXplb2YgKFJFTU9URV9ORElTX1JFU0VUX0NNUExUKSk7DQo+ID4gKw0K PiA+ICsgIFJuZGlzUmVzZXRNc2cuTWVzc2FnZVR5cGUgICA9IFJORElTX1JFU0VUX01TRzsNCj4g PiArICBSbmRpc1Jlc2V0TXNnLk1lc3NhZ2VMZW5ndGggPSBzaXplb2YgKFJFTU9URV9ORElTX1JF U0VUX01TRyk7DQo+ID4gKw0KPiA+ICsgIFJuZGlzUmVzZXRDbXBsdC5NZXNzYWdlVHlwZSAgID0g Uk5ESVNfUkVTRVRfQ01QTFQ7DQo+ID4gKyAgUm5kaXNSZXNldENtcGx0Lk1lc3NhZ2VMZW5ndGgg PSBzaXplb2YNCj4gKFJFTU9URV9ORElTX1JFU0VUX0NNUExUKTsNCj4gPiArDQo+ID4gKyAgU3Rh dHVzID0gUm5kaXNDb250cm9sTXNnIChVc2JSbmRpc0RldmljZSwNCj4gKFJFTU9URV9ORElTX01T R19IRUFERVIgKikmUm5kaXNSZXNldE1zZywNCj4gKFJFTU9URV9ORElTX01TR19IRUFERVIgKikm Um5kaXNSZXNldENtcGx0KTsNCj4gPiArDQo+ID4gKyAgVXNiUm5kaXNEZXZpY2UtPlJlcXVlc3RJ ZCA9IDE7ICAgICAgICAgIC8vIExldCdzIHN0YXJ0IHdpdGggMQ0KPiA+ICsNCj4gPiArICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpIHx8IChSbmRpc1Jlc2V0Q21wbHQuU3RhdHVzICYgMHg4MDAwMDAw MCkpIHsNCj4gPiArICAgIHJldHVybiBFRklfREVWSUNFX0VSUk9SOw0KPiA+ICsgIH0NCj4gPiAr DQo+ID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4g PiArICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIFVuZGlTaHV0ZG93biBpcyBpbnZva2Vk Lg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFu ZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiA+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRv IHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ID4gKw0KPiA+ICsgIEBy ZXR2YWwgRUZJX1NVQ0NFU1MgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4N Cj4gPiArDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtSbmRp c1VuZGlTaHV0ZG93biAoDQo+ID4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiA+ICsgIElOICBO SUNfREFUQSAgKk5pYw0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEVES0lJX1VTQl9FVEhFUk5F VF9QUk9UT0NPTCAgKlVzYkV0aERyaXZlcjsNCj4gPiArICBVU0JfUk5ESVNfREVWSUNFICAgICAg ICAgICAgICpVc2JSbmRpc0RldmljZTsNCj4gPiArICBSRU1PVEVfTkRJU19IQUxUX01TRyAgICAg ICAgIFJuZGlzSGx0TXNnOw0KPiA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgU3Rh dHVzOw0KPiA+ICsNCj4gPiArICBERUJVRyAoKERFQlVHX0lORk8sICJSbmRpc1VuZGlTaHV0ZG93 blxuIikpOw0KPiA+ICsNCj4gPiArICBVc2JFdGhEcml2ZXIgICA9IE5pYy0+VXNiRXRoOw0KPiA+ ICsgIFVzYlJuZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMgKFVzYkV0aERy aXZlcik7DQo+ID4gKw0KPiA+ICsgIFplcm9NZW0gKCZSbmRpc0hsdE1zZywgc2l6ZW9mIChSRU1P VEVfTkRJU19IQUxUX01TRykpOw0KPiA+ICsNCj4gPiArICBSbmRpc0hsdE1zZy5NZXNzYWdlVHlw ZSAgID0gUk5ESVNfSExUX01TRzsNCj4gPiArICBSbmRpc0hsdE1zZy5NZXNzYWdlTGVuZ3RoID0g c2l6ZW9mIChSRU1PVEVfTkRJU19IQUxUX01TRyk7DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IFJu ZGlzQ29udHJvbE1zZyAoVXNiUm5kaXNEZXZpY2UsDQo+IChSRU1PVEVfTkRJU19NU0dfSEVBREVS ICopJlJuZGlzSGx0TXNnLCBOVUxMKTsNCj4gPiArDQo+ID4gKyAgaWYgKFN0YXR1cyA9PSBFRklf REVWSUNFX0VSUk9SKSB7DQo+ID4gKyAgICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCj4gPiArICB9 DQo+ID4gKw0KPiA+ICsgIFVzYlJuZGlzRGV2aWNlLT5SZXF1ZXN0SWQgPSAxOw0KPiA+ICsgIHJl dHVybiBTdGF0dXM7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFVwZGF0ZSB0aGUg TWVkaWEgY29ubmVjdGlvbi4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50 ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gPiArICBAcGFyYW1baW5dICBO aWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0K PiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICBUaGUgcmVxdWVzdCBleGVjdXRl ZCBzdWNjZXNzZnVsbHkuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtF RklBUEkNCj4gPiArUm5kaXNVbmRpR2V0U3RhdHVzICgNCj4gPiArICBJTiAgUFhFX0NEQiAgICpD ZGIsDQo+ID4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAg Q2RiLT5TdGF0RmxhZ3MgJj0gfihQWEVfU1RBVEZMQUdTX0dFVF9TVEFUVVNfTk9fTUVESUEpOw0K PiA+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4g KyAgVHJhbnNtaXQgdGhlIGRhdGEgYWZ0ZXIgYXBwZW5kaW5nIFJORElTIGhlYWRlci4NCj4gPiAr DQo+ID4gKyAgQHBhcmFtW2luXSAgICAgIENkYiAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBj b21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgIFRoaXMgICAg ICAgICAgQSBwb2ludGVyIHRvIHRoZQ0KPiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgaW5z dGFuY2UuDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgIEJ1bGtPdXREYXRhICAgQSBwb2ludGVyIHRv IHRoZSBidWZmZXIgb2YgZGF0YSB0aGF0IHdpbGwgYmUNCj4gdHJhbnNtaXR0ZWQgdG8gVVNCDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIG9yIHJlY2VpdmVkIGZy b20gVVNCIGRldmljZS4NCj4gPiArICBAcGFyYW1baW4sIG91dF0gRGF0YUxlbmd0aCAgICBBIHBv aW50ZXIgdG8gdGhlIFBhY2tldExlbmd0aC4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiA+ICsNCj4gPiAr KiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ID4gK1JuZGlzVW5kaVRyYW5zbWl0 ICgNCj4gPiArICBJTiAgICAgIFBYRV9DREIgICAgICAgICAgICAgICAgICAgICAgKkNkYiwNCj4g PiArICBJTiAgICAgIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ID4gKyAg SU4gICAgICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICpCdWxrT3V0RGF0YSwNCj4gPiAr ICBJTiBPVVQgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgKkRhdGFMZW5ndGgNCj4gPiAr ICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICBTdGF0dXM7DQo+ID4g KyAgVVNCX1JORElTX0RFVklDRSAgICAgICAgKlVzYlJuZGlzRGV2aWNlOw0KPiA+ICsgIFJFTU9U RV9ORElTX1BBQ0tFVF9NU0cgICpSbmRpc1BhY2tldE1zZzsNCj4gPiArICBVSU5UTiAgICAgICAg ICAgICAgICAgICBUcmFuc2Zlckxlbmd0aDsNCj4gPiArDQo+ID4gKyAgREVCVUcgKChERUJVR19J TkZPLCAiUm5kaXNVbmRpVHJhbnNtaXQgRGF0YUxlbmd0aCA6ICV4XG4iLA0KPiAqRGF0YUxlbmd0 aCkpOw0KPiA+ICsNCj4gPiArICBVc2JSbmRpc0RldmljZSA9IFVTQl9STkRJU19ERVZJQ0VfRlJP TV9USElTIChUaGlzKTsNCj4gPiArDQo+ID4gKyAgUm5kaXNQYWNrZXRNc2cgPSBBbGxvY2F0ZVpl cm9Qb29sIChzaXplb2YNCj4gKFJFTU9URV9ORElTX1BBQ0tFVF9NU0cpICsgKkRhdGFMZW5ndGgp Ow0KPiA+ICsgIGlmIChSbmRpc1BhY2tldE1zZyA9PSBOVUxMKSB7DQo+ID4gKyAgICByZXR1cm4g RUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBSbmRpc1BhY2tl dE1zZy0+TWVzc2FnZVR5cGUgICA9IFJORElTX1BBQ0tFVF9NU0c7DQo+ID4gKyAgUm5kaXNQYWNr ZXRNc2ctPk1lc3NhZ2VMZW5ndGggPSBzaXplb2YNCj4gKFJFTU9URV9ORElTX1BBQ0tFVF9NU0cp ICsgKFVJTlQzMikqRGF0YUxlbmd0aDsNCj4gPiArICBSbmRpc1BhY2tldE1zZy0+RGF0YU9mZnNl dCAgICA9IHNpemVvZiAoUkVNT1RFX05ESVNfUEFDS0VUX01TRykgLQ0KPiA4Ow0KPiA+ICsgIFJu ZGlzUGFja2V0TXNnLT5EYXRhTGVuZ3RoICAgID0gKFVJTlQzMikqRGF0YUxlbmd0aDsNCj4gPiAr DQo+ID4gKyAgQ29weU1lbSAoDQo+ID4gKyAgICAoKFVJTlQ4ICopUm5kaXNQYWNrZXRNc2cpICsg c2l6ZW9mIChSRU1PVEVfTkRJU19QQUNLRVRfTVNHKSwNCj4gPiArICAgIEJ1bGtPdXREYXRhLA0K PiA+ICsgICAgKkRhdGFMZW5ndGgNCj4gPiArICAgICk7DQo+ID4gKw0KPiA+ICsgIFRyYW5zZmVy TGVuZ3RoID0gUm5kaXNQYWNrZXRNc2ctPk1lc3NhZ2VMZW5ndGg7DQo+ID4gKw0KPiA+ICsgIFN0 YXR1cyA9IFJuZGlzVHJhbnNtaXREYXRhTXNnICgNCj4gPiArICAgICAgICAgICAgIFVzYlJuZGlz RGV2aWNlLA0KPiA+ICsgICAgICAgICAgICAgKFJFTU9URV9ORElTX01TR19IRUFERVIgKilSbmRp c1BhY2tldE1zZywNCj4gPiArICAgICAgICAgICAgICZUcmFuc2Zlckxlbmd0aA0KPiA+ICsgICAg ICAgICAgICAgKTsNCj4gPiArDQo+ID4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiXG5SbmRpc1Vu ZGlUcmFuc21pdCBUcmFuc2Zlckxlbmd0aCAlbHhcbiIsDQo+IFRyYW5zZmVyTGVuZ3RoKSk7DQo+ ID4gKw0KPiA+ICsgIEZyZWVQb29sIChSbmRpc1BhY2tldE1zZyk7DQo+ID4gKw0KPiA+ICsgIHJl dHVybiBTdGF0dXM7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFJlY2VpdmVzIGFu ZCByZW1vdmVzIFJORElTIGhlYWRlciBhbmQgcmV0dXJucyB0aGUgcmF3IGRhdGEuDQo+ID4gKw0K PiA+ICsgIEBwYXJhbVtpbl0gICAgICBDZGIgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgY29t bWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICBUaGlzICAgICAg ICAgIEEgcG9pbnRlciB0byB0aGUNCj4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGluc3Rh bmNlLg0KPiA+ICsgIEBwYXJhbVtpbiwgb3V0XSBCdWxrSW5EYXRhICAgIEEgcG9pbnRlciB0byB0 aGUgYnVmZmVyIG9mIGRhdGEgdGhhdCB3aWxsIGJlDQo+IHRyYW5zbWl0dGVkIHRvIFVTQg0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZSBvciByZWNlaXZlZCBmcm9t IFVTQiBkZXZpY2UuDQo+ID4gKyAgQHBhcmFtW2luLCBvdXRdIERhdGFMZW5ndGggICAgQSBwb2lu dGVyIHRvIHRoZSBQYWNrZXRMZW5ndGguDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NF U1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gPiArICBA cmV0dmFsIEVGSV9CVUZGRVJfVE9PX1NNQUxMICBUaGUgdXNlciBwcm92aWRlZCBidWZmZXIgaXMg dG9vIHNtYWxsDQo+ID4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgTm8gYnVmZmVy IHdhcyBmb3VuZCBpbiB0aGUgbGlzdC4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVT DQo+ID4gK0VGSUFQSQ0KPiA+ICtSbmRpc1VuZGlSZWNlaXZlICgNCj4gPiArICBJTiAgICAgUFhF X0NEQiAgICAgICAgICAgICAgICAgICAgICAqQ2RiLA0KPiA+ICsgIElOICAgICBFREtJSV9VU0Jf RVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiA+ICsgIElOIE9VVCBWT0lEICAgICAgICAgICAg ICAgICAgICAgICAgICpCdWxrSW5EYXRhLA0KPiA+ICsgIElOIE9VVCBVSU5UTiAgICAgICAgICAg ICAgICAgICAgICAgICpEYXRhTGVuZ3RoDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1NU QVRVUyAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+ICsgIFVTQl9STkRJU19ERVZJQ0UgICAgICAg ICpVc2JSbmRpc0RldmljZTsNCj4gPiArICBSRU1PVEVfTkRJU19QQUNLRVRfTVNHICAqUm5kaXNQ YWNrZXRNc2c7DQo+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgVHJhbnNmZXJMZW5ndGg7 DQo+ID4gKyAgVk9JRCAgICAgICAgICAgICAgICAgICAgKkJ1ZmZlcjsNCj4gPiArICBQQUNLRVRf TElTVCAgICAgICAgICAgICAqSGVhZFBhY2tldDsNCj4gPiArICBQQUNLRVRfTElTVCAgICAgICAg ICAgICAqUGFja2V0TGlzdDsNCj4gPiArDQo+ID4gKyAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgYW55 IG91dHN0YW5kaW5nIHBhY2tldCB0byByZWNlaXZlDQo+ID4gKyAgLy8gVGhlIGJ1ZmZlciBhbGxv Y2F0ZWQgaGFzIGEgbGlua2VkIExpc3QgZm9sbG93ZWQgYnkgdGhlIHBhY2tldC4NCj4gPiArDQo+ ID4gKyAgVXNiUm5kaXNEZXZpY2UgPSBVU0JfUk5ESVNfREVWSUNFX0ZST01fVEhJUyAoVGhpcyk7 DQo+ID4gKyAgQnVmZmVyICAgICAgICAgPSBOVUxMOw0KPiA+ICsgIEhlYWRQYWNrZXQgICAgID0g TlVMTDsNCj4gPiArDQo+ID4gKyAgd2hpbGUgKDEpIHsNCj4gPiArICAgIEJ1ZmZlciA9IEFsbG9j YXRlWmVyb1Bvb2wgKHNpemVvZiAoUEFDS0VUX0xJU1QpICsgc2l6ZW9mDQo+IChSRU1PVEVfTkRJ U19QQUNLRVRfTVNHKSArIFVzYlJuZGlzRGV2aWNlLT5NYXhUcmFuc2ZlclNpemUpOw0KPiA+ICsg ICAgaWYgKEJ1ZmZlciA9PSBOVUxMKSB7DQo+ID4gKyAgICAgIHJldHVybiBFRklfT1VUX09GX1JF U09VUkNFUzsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBSbmRpc1BhY2tldE1zZyAgICAg ICAgICAgICAgICA9IChSRU1PVEVfTkRJU19QQUNLRVRfTVNHICopKHNpemVvZg0KPiAoUEFDS0VU X0xJU1QpICsgKFVJTlQ4ICopQnVmZmVyKTsNCj4gPiArICAgIFBhY2tldExpc3QgICAgICAgICAg ICAgICAgICAgID0gKFBBQ0tFVF9MSVNUICopQnVmZmVyOw0KPiA+ICsgICAgUGFja2V0TGlzdC0+ UGFja2V0U3RhcnRCdWZmZXIgPSAoVUlOVDggKilCdWZmZXIgKyBzaXplb2YgKFBBQ0tFVF9MSVNU KTsNCj4gPiArICAgIC8vIFNhdmUgdGhlIG9yaWdpbmFsIGFkZHJlc3MgZm9yIGZyZWVpbmcgaXQg dXANCj4gPiArICAgIFBhY2tldExpc3QtPk9yZ0J1ZmZlciA9IChVSU5UOCAqKUJ1ZmZlcjsNCj4g PiArICAgIFRyYW5zZmVyTGVuZ3RoICAgICAgICA9IFVzYlJuZGlzRGV2aWNlLT5NYXhUcmFuc2Zl clNpemU7DQo+ID4gKw0KPiA+ICsgICAgU3RhdHVzID0gUm5kaXNSZWNlaXZlRGF0YU1zZyAoDQo+ ID4gKyAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLA0KPiA+ICsgICAgICAgICAgICAgICAo UkVNT1RFX05ESVNfTVNHX0hFQURFUiAqKVJuZGlzUGFja2V0TXNnLA0KPiA+ICsgICAgICAgICAg ICAgICAmVHJhbnNmZXJMZW5ndGgNCj4gPiArICAgICAgICAgICAgICAgKTsNCj4gPiArDQo+ID4g KyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpIHx8IChUcmFuc2Zlckxlbmd0aCA9PSAwKSkgew0K PiA+ICsgICAgICBGcmVlUG9vbCAoQnVmZmVyKTsNCj4gPiArICAgICAgYnJlYWs7DQo+ID4gKyAg ICB9DQo+ID4gKw0KPiA+ICsgICAgLy8gQ29sbGVjdCBhbGwgdGhlIFJORElTIHBhY2tldCBpbiBM aW5rZWQgbGlzdC4NCj4gPiArICAgIGlmICgoUm5kaXNQYWNrZXRNc2ctPk1lc3NhZ2VUeXBlID09 IFJORElTX1BBQ0tFVF9NU0cpICYmDQo+ID4gKyAgICAgICAgKFJuZGlzUGFja2V0TXNnLT5EYXRh T2Zmc2V0ID09IHNpemVvZg0KPiAoUkVNT1RFX05ESVNfUEFDS0VUX01TRykgLSBSTkRJU19SRVNF UlZFRF9CWVRFX0xFTkdUSCkgJiYNCj4gPiArICAgICAgICAoVHJhbnNmZXJMZW5ndGggPj0gUm5k aXNQYWNrZXRNc2ctPk1lc3NhZ2VMZW5ndGgpKQ0KPiA+ICsgICAgew0KPiA+ICsgICAgICAvLyBJ bnNlcnQgUGFja2V0DQo+ID4gKyAgICAgIFBhY2tldExpc3QtPlJlbWFpbmluZ0xlbmd0aCA9IFRy YW5zZmVyTGVuZ3RoOw0KPiA+ICsgICAgICBJbnNlcnRUYWlsTGlzdCAoJlVzYlJuZGlzRGV2aWNl LT5SZWNlaXZlUGFja2V0TGlzdCwgQnVmZmVyKTsNCj4gPiArICAgIH0gZWxzZSB7DQo+ID4gKyAg ICAgIEZyZWVQb29sIChCdWZmZXIpOw0KPiA+ICsgICAgfQ0KPiA+ICsgIH0NCj4gPiArDQo+ID4g KyAgd2hpbGUgKCFJc0xpc3RFbXB0eSAoJlVzYlJuZGlzRGV2aWNlLT5SZWNlaXZlUGFja2V0TGlz dCkpIHsNCj4gPiArICAgIEhlYWRQYWNrZXQgPSAoUEFDS0VUX0xJU1QgKilHZXRGaXJzdE5vZGUg KCZVc2JSbmRpc0RldmljZS0NCj4gPlJlY2VpdmVQYWNrZXRMaXN0KTsNCj4gPiArDQo+ID4gKyAg ICBSbmRpc1BhY2tldE1zZyA9IChSRU1PVEVfTkRJU19QQUNLRVRfTVNHICopKFVJTlQ4DQo+ICop SGVhZFBhY2tldC0+UGFja2V0U3RhcnRCdWZmZXI7DQo+ID4gKw0KPiA+ICsgICAgUHJpbnRSbmRp c01zZyAoKFJFTU9URV9ORElTX01TR19IRUFERVIgKilSbmRpc1BhY2tldE1zZyk7DQo+ID4gKw0K PiA+ICsgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgcGFja2V0IGlzIHZhbGlkIFJORElTIHBhY2tl dC4NCj4gPiArICAgIGlmICgoSGVhZFBhY2tldC0+UmVtYWluaW5nTGVuZ3RoID4gc2l6ZW9mDQo+ IChSRU1PVEVfTkRJU19QQUNLRVRfTVNHKSkgJiYgKFJuZGlzUGFja2V0TXNnLT5NZXNzYWdlVHlw ZSA9PQ0KPiBSTkRJU19QQUNLRVRfTVNHKSAmJg0KPiA+ICsgICAgICAgIChSbmRpc1BhY2tldE1z Zy0+RGF0YU9mZnNldCA9PSAoc2l6ZW9mDQo+IChSRU1PVEVfTkRJU19QQUNLRVRfTVNHKSAtIFJO RElTX1JFU0VSVkVEX0JZVEVfTEVOR1RIKSkgJiYNCj4gPiArICAgICAgICAoSGVhZFBhY2tldC0+ UmVtYWluaW5nTGVuZ3RoID49IFJuZGlzUGFja2V0TXNnLQ0KPiA+TWVzc2FnZUxlbmd0aCkpDQo+ ID4gKyAgICB7DQo+ID4gKyAgICAgIGlmICgqRGF0YUxlbmd0aCA+PSBSbmRpc1BhY2tldE1zZy0+ RGF0YUxlbmd0aCkgew0KPiA+ICsgICAgICAgIENvcHlNZW0gKA0KPiA+ICsgICAgICAgICAgQnVs a0luRGF0YSwNCj4gPiArICAgICAgICAgIChVSU5UOCAqKVJuZGlzUGFja2V0TXNnICsgKFJuZGlz UGFja2V0TXNnLT5EYXRhT2Zmc2V0ICsNCj4gUk5ESVNfUkVTRVJWRURfQllURV9MRU5HVEgpLA0K PiA+ICsgICAgICAgICAgUm5kaXNQYWNrZXRNc2ctPkRhdGFMZW5ndGgNCj4gPiArICAgICAgICAg ICk7DQo+ID4gKw0KPiA+ICsgICAgICAgICpEYXRhTGVuZ3RoID0gIFJuZGlzUGFja2V0TXNnLT5E YXRhTGVuZ3RoOw0KPiA+ICsNCj4gPiArICAgICAgICBIZWFkUGFja2V0LT5SZW1haW5pbmdMZW5n dGggICA9IEhlYWRQYWNrZXQtPlJlbWFpbmluZ0xlbmd0aCAtDQo+IFJuZGlzUGFja2V0TXNnLT5N ZXNzYWdlTGVuZ3RoOw0KPiA+ICsgICAgICAgIEhlYWRQYWNrZXQtPlBhY2tldFN0YXJ0QnVmZmVy ID0gKFVJTlQ4ICopUm5kaXNQYWNrZXRNc2cgKw0KPiBSbmRpc1BhY2tldE1zZy0+TWVzc2FnZUxl bmd0aDsNCj4gPiArDQo+ID4gKyAgICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ICsgICAg ICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICpEYXRhTGVuZ3RoID0gUm5kaXNQYWNrZXRNc2ctPkRh dGFMZW5ndGg7DQo+ID4gKyAgICAgICAgcmV0dXJuIEVGSV9CVUZGRVJfVE9PX1NNQUxMOw0KPiA+ ICsgICAgICB9DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgUmVtb3ZlRW50cnlMaXN0ICgm SGVhZFBhY2tldC0+UGFja2V0TGlzdCk7DQo+ID4gKyAgICBGcmVlUG9vbCAoKFBBQ0tFVF9MSVNU ICopSGVhZFBhY2tldC0+T3JnQnVmZmVyKTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIHJldHVy biBFRklfTk9UX0ZPVU5EOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGlzIGlz IGEgZHVtbXkgZnVuY3Rpb24gd2hpY2gganVzdCByZXR1cm5zLiBVbmltcGxlbWVudGVkDQo+IEVE S0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBmdW5jdGlvbnMNCj4gPiArICBwb2ludCB0byB0aGlz IGZ1bmN0aW9uLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0 aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiA+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBw b2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ID4gKw0K PiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nl c3NmdWxseS4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0VGSUFQSQ0K PiA+ICtSbmRpc0R1bW15UmV0dXJuICgNCj4gPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ID4g KyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgREVCVUcgKChE RUJVR19JTkZPLCAiUm5kaXNEdW1teVJldHVybiBjYWxsZWRcbiIpKTsNCj4gPiArICByZXR1cm4g RUZJX1NVQ0NFU1M7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFRoaXMgZnVuY3Rp b24gc2VuZCB0aGUgUk5ESVMgY29tbWFuZCB0aHJvdWdoIHRoZSBkZXZpY2UncyBjb250cm9sDQo+ IGVuZHBvaW50DQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIFVzYlJuZGlzRGV2aWNlICAgIEEg cG9pbnRlciB0byB0aGUgVVNCX1JORElTX0RFVklDRQ0KPiBpbnN0YW5jZS4NCj4gPiArICBAcGFy YW1baW5dICBSbmRpc01zZyAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlDQo+IFJFTU9URV9ORElT X01TR19IRUFERVIgZGF0YS4NCj4gPiArICBAcGFyYW1bb3V0XSBSbmRpc01zZ1Jlc3BvbnNlICBB IHBvaW50ZXIgdG8gdGhlDQo+IFJFTU9URV9ORElTX01TR19IRUFERVIgZGF0YSBmb3IgZ2V0dGlu ZyByZXNwb25zZXMuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAg IFRoZSBidWxrIHRyYW5zZmVyIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseQ0KPiBleGVjdXRlZC4NCj4g PiArDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK1JuZGlzQ29udHJvbE1zZyAoDQo+ ID4gKyAgSU4gIFVTQl9STkRJU19ERVZJQ0UgICAgICAgICpVc2JSbmRpc0RldmljZSwNCj4gPiAr ICBJTiAgUkVNT1RFX05ESVNfTVNHX0hFQURFUiAgKlJuZGlzTXNnLA0KPiA+ICsgIE9VVCBSRU1P VEVfTkRJU19NU0dfSEVBREVSICAqUm5kaXNNc2dSZXNwb25zZQ0KPiA+ICsgICkNCj4gPiArew0K PiA+ICsgIEVGSV9VU0JfSU9fUFJPVE9DT0wgICAgICAgICAgICpVc2JJbyA9IFVzYlJuZGlzRGV2 aWNlLT5Vc2JJbzsNCj4gPiArICBFRklfVVNCX0RFVklDRV9SRVFVRVNUICAgICAgICBEZXZSZXE7 DQo+ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgVXNiU3RhdHVzOw0KPiA+ICsg IEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gPiArICBVSU5UMzIgICAg ICAgICAgICAgICAgICAgICAgICBTYXZlUmVzcG9uc2VUeXBlOw0KPiA+ICsgIFVJTlQzMiAgICAg ICAgICAgICAgICAgICAgICAgIFNhdmVSZXNwb25zZUxlbmd0aDsNCj4gPiArICBVSU5UMzIgICAg ICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gPiArICBSRU1PVEVfTkRJU19JTklUSUFMSVpF X0NNUExUICAqUm5kaXNJbml0Q21wbHQ7DQo+ID4gKw0KPiA+ICsgIFNhdmVSZXNwb25zZVR5cGUg ICA9IDA7DQo+ID4gKyAgU2F2ZVJlc3BvbnNlTGVuZ3RoID0gMDsNCj4gPiArICBSbmRpc0luaXRD bXBsdCAgICAgPSAoUkVNT1RFX05ESVNfSU5JVElBTElaRV9DTVBMVA0KPiAqKVJuZGlzTXNnUmVz cG9uc2U7DQo+ID4gKw0KPiA+ICsgIGlmIChSbmRpc01zZ1Jlc3BvbnNlKSB7DQo+ID4gKyAgICBT YXZlUmVzcG9uc2VUeXBlICAgPSBSbmRpc01zZ1Jlc3BvbnNlLT5NZXNzYWdlVHlwZTsNCj4gPiAr ICAgIFNhdmVSZXNwb25zZUxlbmd0aCA9IFJuZGlzTXNnUmVzcG9uc2UtPk1lc3NhZ2VMZW5ndGg7 DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBaZXJvTWVtICgmRGV2UmVxLCBzaXplb2YgKEVGSV9V U0JfREVWSUNFX1JFUVVFU1QpKTsNCj4gPiArDQo+ID4gKyAgRGV2UmVxLlJlcXVlc3RUeXBlID0g VVNCX1JFUV9UWVBFX0NMQVNTIHwNCj4gVVNCX1RBUkdFVF9JTlRFUkZBQ0U7DQo+ID4gKyAgRGV2 UmVxLlJlcXVlc3QgICAgID0gU0VORF9FTkNBUFNVTEFURURfQ09NTUFORDsNCj4gPiArICBEZXZS ZXEuVmFsdWUgICAgICAgPSAwOw0KPiA+ICsgIERldlJlcS5JbmRleCAgICAgICA9IDA7DQo+ID4g KyAgRGV2UmVxLkxlbmd0aCAgICAgID0gKFVJTlQxNilSbmRpc01zZy0+TWVzc2FnZUxlbmd0aDsN Cj4gPiArDQo+ID4gKyAgUHJpbnRSbmRpc01zZyAoUm5kaXNNc2cpOw0KPiA+ICsNCj4gPiArICBT dGF0dXMgPSBVc2JJby0+VXNiQ29udHJvbFRyYW5zZmVyICgNCj4gPiArICAgICAgICAgICAgICAg ICAgICBVc2JJbywNCj4gPiArICAgICAgICAgICAgICAgICAgICAmRGV2UmVxLA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgIEVmaVVzYkRhdGFPdXQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg VVNCX0VUSEVSTkVUX1RSQU5TRkVSX1RJTUVPVVQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg Um5kaXNNc2csDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgUm5kaXNNc2ctPk1lc3NhZ2VMZW5n dGgsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgJlVzYlN0YXR1cw0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICk7DQo+ID4gKw0KPiA+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIlJuZGlzQ29u dHJvbE1zZzogVXNiU3RhdHVzIDogJXggU3RhdHVzIDogJXINCj4gUm5kaXNNc2dSZXNwb25zZSA6 ICVseFxuIiwgVXNiU3RhdHVzLCBTdGF0dXMsIFJuZGlzTXNnUmVzcG9uc2UpKTsNCj4gPiArDQo+ ID4gKyAgLy8gRXJyb3Igb3Igbm8gcmVzcG9uc2UgZXhwZWN0ZWQNCj4gPiArICBpZiAoKEVGSV9F UlJPUiAoU3RhdHVzKSkgfHwgKFJuZGlzTXNnUmVzcG9uc2UgPT0gTlVMTCkpIHsNCj4gPiArICAg IERFQlVHICgoREVCVUdfSU5GTywgIlJuZGlzQ29udHJvbE1zZzogVXNiU3RhdHVzIDogJXggU3Rh dHVzIDoNCj4gJXJcbiIsIFVzYlN0YXR1cywgU3RhdHVzKSk7DQo+ID4gKyAgICByZXR1cm4gU3Rh dHVzOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgKFJO RElTX0NPTlRST0xfVElNRU9VVC8xMDApOyBJbmRleCsrKSB7DQo+ID4gKyAgICBSZWFkUm5kaXNS ZXNwb25zZUludGVycnVwdCAoVXNiUm5kaXNEZXZpY2UpOw0KPiA+ICsgICAgWmVyb01lbSAoJkRl dlJlcSwgc2l6ZW9mIChFRklfVVNCX0RFVklDRV9SRVFVRVNUKSk7DQo+ID4gKw0KPiA+ICsgICAg RGV2UmVxLlJlcXVlc3RUeXBlID0gVVNCX0VORFBPSU5UX0RJUl9JTiB8DQo+IFVTQl9SRVFfVFlQ RV9DTEFTUyB8IFVTQl9UQVJHRVRfSU5URVJGQUNFOw0KPiA+ICsgICAgRGV2UmVxLlJlcXVlc3Qg ICAgID0gR0VUX0VOQ0FQU1VMQVRFRF9SRVNQT05TRTsNCj4gPiArICAgIERldlJlcS5WYWx1ZSAg ICAgICA9IDA7DQo+ID4gKyAgICBEZXZSZXEuSW5kZXggICAgICAgPSAwOw0KPiA+ICsgICAgRGV2 UmVxLkxlbmd0aCAgICAgID0gKFVJTlQxNilSbmRpc01zZ1Jlc3BvbnNlLT5NZXNzYWdlTGVuZ3Ro Ow0KPiA+ICsNCj4gPiArICAgIFN0YXR1cyA9IFVzYklvLT5Vc2JDb250cm9sVHJhbnNmZXIgKA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgVXNiSW8sDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAmRGV2UmVxLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgRWZpVXNiRGF0YUluLA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgVVNCX0VUSEVSTkVUX1RSQU5TRkVSX1RJTUVPVVQs DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICBSbmRpc01zZ1Jlc3BvbnNlLA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgUm5kaXNNc2dSZXNwb25zZS0+TWVzc2FnZUxlbmd0aCwNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICZVc2JTdGF0dXMNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICk7DQo+ID4gKw0KPiA+ICsgICAgREVCVUcgKChERUJVR19JTkZPLCAiUm5kaXNDb250cm9s TXNnIFJlc3BvbnNlOiBVc2JTdGF0dXMgOiAleA0KPiBTdGF0dXMgOiAlciBcbiIsIFVzYlN0YXR1 cywgU3RhdHVzKSk7DQo+ID4gKw0KPiA+ICsgICAgUHJpbnRSbmRpc01zZyAoUm5kaXNNc2dSZXNw b25zZSk7DQo+ID4gKw0KPiA+ICsgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAr ICAgICAgaWYgKChSbmRpc0luaXRDbXBsdC0+UmVxdWVzdElEICE9ICgoUkVNT1RFX05ESVNfSU5J VElBTElaRV9DTVBMVA0KPiAqKVJuZGlzTXNnKS0+UmVxdWVzdElEKSB8fCAoUm5kaXNJbml0Q21w bHQtPk1lc3NhZ2VUeXBlICE9DQo+IFNhdmVSZXNwb25zZVR5cGUpKSB7DQo+ID4gKyAgICAgICAg REVCVUcgKChERUJVR19JTkZPLCAiUmV0cnkgdGhlIHJlc3BvbnNlXG4iKSk7DQo+ID4gKw0KPiA+ ICsgICAgICAgIFJuZGlzTXNnUmVzcG9uc2UtPk1lc3NhZ2VUeXBlICAgPSBTYXZlUmVzcG9uc2VU eXBlOw0KPiA+ICsgICAgICAgIFJuZGlzTXNnUmVzcG9uc2UtPk1lc3NhZ2VMZW5ndGggPSBTYXZl UmVzcG9uc2VMZW5ndGg7DQo+ID4gKyAgICAgICAgY29udGludWU7DQo+ID4gKyAgICAgIH0NCj4g PiArICAgIH0NCj4gPiArDQo+ID4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiA+ICsgIH0NCj4gPiAr DQo+ID4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiUm5kaXNDb250cm9sTXNnOiBUaW1lT3V0XG4i KSk7DQo+ID4gKw0KPiA+ICsgIHJldHVybiBFRklfVElNRU9VVDsNCj4gPiArfQ0KPiA+ICsNCj4g PiArLyoqDQo+ID4gKyAgVGhpcyBmdW5jdGlvbiBzZW5kIHRoZSBSTkRJUyBjb21tYW5kIHRocm91 Z2ggdGhlIGRldmljZSdzIERhdGENCj4gZW5kcG9pbnQNCj4gPiArDQo+ID4gKyAgQHBhcmFtW2lu XSAgICAgIFVzYlJuZGlzRGV2aWNlICBBIHBvaW50ZXIgdG8gdGhlIFVTQl9STkRJU19ERVZJQ0UN Cj4gaW5zdGFuY2UuDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgIFJuZGlzTXNnICAgICAgICBBIHBv aW50ZXIgdG8gdGhlDQo+IFJFTU9URV9ORElTX01TR19IRUFERVIgdG8gc2VuZCBvdXQuDQo+ID4g KyAgQHBhcmFtW2luLCBvdXRdIFRyYW5zZmVyTGVuZ3RoICBUaGUgbGVuZ3RoIG9mIHRoZSBSbmRp c01zZyBkYXRhIHRvDQo+IHRyYW5zZmVyLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUND RVNTICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ID4gKw0KPiA+ICsq Ki8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtSbmRpc1RyYW5zbWl0RGF0YU1zZyAoDQo+ID4gKyAg SU4gICAgICBVU0JfUk5ESVNfREVWSUNFICAgICAgICAqVXNiUm5kaXNEZXZpY2UsDQo+ID4gKyAg SU4gICAgICBSRU1PVEVfTkRJU19NU0dfSEVBREVSICAqUm5kaXNNc2csDQo+ID4gKyAgSU4gT1VU ICBVSU5UTiAgICAgICAgICAgICAgICAgICAqVHJhbnNmZXJMZW5ndGgNCj4gPiArICApDQo+ID4g K3sNCj4gPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ID4gKyAgVUlOVDMyICAgICAgVXNiU3Rh dHVzOw0KPiA+ICsNCj4gPiArICBpZiAoVXNiUm5kaXNEZXZpY2UtPkJ1bGtJbkVuZHBvaW50ID09 IDApIHsNCj4gPiArICAgIEdldEVuZHBvaW50IChVc2JSbmRpc0RldmljZS0+VXNiSW9DZGNEYXRh LCBVc2JSbmRpc0RldmljZSk7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBQcmludFJuZGlzTXNn IChSbmRpc01zZyk7DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IFVzYlJuZGlzRGV2aWNlLT5Vc2JJ b0NkY0RhdGEtPlVzYkJ1bGtUcmFuc2ZlciAoDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+VXNiSW9DZGNEYXRhLA0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2Ut PkJ1bGtPdXRFbmRwb2ludCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFJuZGlzTXNnLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVHJhbnNmZXJMZW5ndGgsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBVU0JfVFhfRVRIRVJORVRfQlVMS19USU1FT1VULA0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlVzYlN0YXR1cw0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gPiArDQo+ ID4gKyAgaWYgKFN0YXR1cyA9PSBFRklfU1VDQ0VTUykgew0KPiA+ICsgICAgZ1N0b3BCdWxrSW5D bnQgPSBNQVhJTVVNX1NUT1BCVUxLSU5fQ05UOyAgICAgLy8gQWZ0ZXIgc2VuZGluZw0KPiBjbWQg LHdlIHdpbGwgcG9sbGluZyByZWNlaXZlIHBhY2thZ2UgZm9yIE1BWElNVU1fU1RPUEJVTEtJTl9D TlQgdGltZXMNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gK30N Cj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFRoaXMgZnVuY3Rpb24gc2VuZCB0aGUgUk5ESVMgY29t bWFuZCB0aHJvdWdoIHRoZSBkZXZpY2UncyBEYXRhDQo+IGVuZHBvaW50DQo+ID4gKw0KPiA+ICsg IEBwYXJhbVtpbl0gICAgICBVc2JSbmRpc0RldmljZSAgICBBIHBvaW50ZXIgdG8gdGhlIFVTQl9S TkRJU19ERVZJQ0UNCj4gaW5zdGFuY2UuDQo+ID4gKyAgQHBhcmFtW2luLCBvdXRdIFJuZGlzTXNn ICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUNCj4gUkVNT1RFX05ESVNfTVNHX0hFQURFUiB0byBz ZW5kIG91dC4NCj4gPiArICBAcGFyYW1baW4sIG91dF0gVHJhbnNmZXJMZW5ndGggICAgVGhlIGxl bmd0aCBvZiB0aGUgUm5kaXNNc2cgZGF0YSB0bw0KPiB0cmFuc2Zlci4NCj4gPiArDQo+ID4gKyAg QHJldHZhbCBFRklfU1VDQ0VTUyAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5 Lg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArUm5kaXNSZWNlaXZlRGF0 YU1zZyAoDQo+ID4gKyAgSU4gICAgICBVU0JfUk5ESVNfREVWSUNFICAgICAgICAqVXNiUm5kaXNE ZXZpY2UsDQo+ID4gKyAgSU4gT1VUICBSRU1PVEVfTkRJU19NU0dfSEVBREVSICAqUm5kaXNNc2cs DQo+ID4gKyAgSU4gT1VUICBVSU5UTiAgICAgICAgICAgICAgICAgICAqVHJhbnNmZXJMZW5ndGgN Cj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ID4gKyAgVUlO VDMyICAgICAgVXNiU3RhdHVzOw0KPiA+ICsNCj4gPiArICBVc2JTdGF0dXMgPSAwOw0KPiA+ICsN Cj4gPiArICBpZiAoVXNiUm5kaXNEZXZpY2UtPkJ1bGtJbkVuZHBvaW50ID09IDApIHsNCj4gPiAr ICAgIEdldEVuZHBvaW50IChVc2JSbmRpc0RldmljZS0+VXNiSW9DZGNEYXRhLCBVc2JSbmRpc0Rl dmljZSk7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAvLyBVc2UgZ1N0b3BCdWxrSW5DbnQgdG8g c3RvcCBCdWxrSW4gY29tbWFuZA0KPiA+ICsgIGlmIChnU3RvcEJ1bGtJbkNudCB8fCBMQU5fQlVM S0lOX0NNRF9DT05UUk9MKSB7DQo+ID4gKyAgICBTdGF0dXMgPSBVc2JSbmRpc0RldmljZS0+VXNi SW9DZGNEYXRhLT5Vc2JCdWxrVHJhbnNmZXIgKA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+VXNiSW9DZGNEYXRhLA0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JSbmRpc0Rl dmljZS0+QnVsa0luRW5kcG9pbnQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFJuZGlzTXNnLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBUcmFuc2Zlckxlbmd0aCwNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNCX1JYX0VUSEVSTkVUX0JVTEtfVElNRU9V VCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlVz YlN0YXR1cw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApOw0KPiA+ICsNCj4gPiArICAgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAg ICAgIGdTdG9wQnVsa0luQ250ID0gTUlOSU1VTV9TVE9QQlVMS0lOX0NOVDsNCj4gPiArICAgIH0g ZWxzZSB7DQo+ID4gKyAgICAgIGdTdG9wQnVsa0luQ250LS07DQo+ID4gKyAgICB9DQo+ID4gKyAg fSBlbHNlIHsNCj4gPiArICAgIFN0YXR1cyAgICAgICAgICA9IEVGSV9USU1FT1VUOw0KPiA+ICsg ICAgKlRyYW5zZmVyTGVuZ3RoID0gMDsNCj4gPiArICAgIGdCbG9ja0J1bGtJbkNudCsrOw0KPiA+ ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYgKGdCbG9ja0J1bGtJbkNudCA+IEJVTEtJTl9DTURfUE9M TElOR19DTlQpIHsNCj4gPiArICAgIGdTdG9wQnVsa0luQ250ICA9IE1JTklNVU1fU1RPUEJVTEtJ Tl9DTlQ7DQo+ID4gKyAgICBnQmxvY2tCdWxrSW5DbnQgPSAwOw0KPiA+ICsgIH0NCj4gPiArDQo+ ID4gKyAgUHJpbnRSbmRpc01zZyAoUm5kaXNNc2cpOw0KPiA+ICsNCj4gPiArICByZXR1cm4gU3Rh dHVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBQcmludHMgUk5ESVMgSGVhZGVy IGFuZCBEYXRhDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gUm5kaXNNc2cgICAgQSBwb2ludGVy IHRvIHRoZSBSRU1PVEVfTkRJU19NU0dfSEVBREVSDQo+IGRhdGEuDQo+ID4gKw0KPiA+ICsqKi8N Cj4gPiArVk9JRA0KPiA+ICtQcmludFJuZGlzTXNnICgNCj4gPiArICBJTiAgUkVNT1RFX05ESVNf TVNHX0hFQURFUiAgKlJuZGlzTXNnDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgVUlOVE4gICAg ICAgICAgICAgICAgICAgIExlbmd0aDsNCj4gPiArICBSRU1PVEVfTkRJU19RVUVSWV9DTVBMVCAg KlJuZGlzUXVlcnlDbXBsdDsNCj4gPiArDQo+ID4gKyAgTGVuZ3RoID0gMDsNCj4gPiArDQo+ID4g KyAgc3dpdGNoIChSbmRpc01zZy0+TWVzc2FnZVR5cGUpIHsNCj4gPiArICAgIGNhc2UgUk5ESVNf UEFDS0VUX01TRzoNCj4gPiArICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiUk5ESVNfUEFDS0VU X01TRzpcbiIpKTsNCj4gPiArICAgICAgTGVuZ3RoID0gc2l6ZW9mIChSRU1PVEVfTkRJU19QQUNL RVRfTVNHKSArIDB4MTQ7DQo+ID4gKyAgICAgIGJyZWFrOw0KPiA+ICsgICAgY2FzZSBSTkRJU19J TklUSUFMSVpFX01TRzoNCj4gPiArICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiUk5ESVNfSU5J VElBTElaRV9NU0c6XG4iKSk7DQo+ID4gKyAgICAgIExlbmd0aCA9IHNpemVvZiAoUkVNT1RFX05E SVNfSU5JVElBTElaRV9NU0cpOw0KPiA+ICsgICAgICBicmVhazsNCj4gPiArICAgIGNhc2UgUk5E SVNfSU5JVElBTElaRV9DTVBMVDoNCj4gPiArICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiUk5E SVNfSU5JVElBTElaRV9DTVBMVDpcbiIpKTsNCj4gPiArICAgICAgTGVuZ3RoID0gc2l6ZW9mIChS RU1PVEVfTkRJU19JTklUSUFMSVpFX0NNUExUKTsNCj4gPiArICAgICAgYnJlYWs7DQo+ID4gKyAg ICBjYXNlIFJORElTX0hMVF9NU0c6DQo+ID4gKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIlJO RElTX0hMVF9NU0c6XG4iKSk7DQo+ID4gKyAgICAgIExlbmd0aCA9IHNpemVvZiAoUkVNT1RFX05E SVNfSEFMVF9NU0cpOw0KPiA+ICsgICAgICBicmVhazsNCj4gPiArICAgIGNhc2UgUk5ESVNfUVVF UllfTVNHOg0KPiA+ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJSTkRJU19RVUVSWV9NU0c6 XG4iKSk7DQo+ID4gKyAgICAgIExlbmd0aCA9IHNpemVvZiAoUkVNT1RFX05ESVNfUVVFUllfTVNH KTsNCj4gPiArICAgICAgYnJlYWs7DQo+ID4gKyAgICBjYXNlIFJORElTX1FVRVJZX0NNUExUOg0K PiA+ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJSTkRJU19RVUVSWV9DTVBMVDpcbiIpKTsN Cj4gPiArICAgICAgUm5kaXNRdWVyeUNtcGx0ID0gKFJFTU9URV9ORElTX1FVRVJZX0NNUExUICop Um5kaXNNc2c7DQo+ID4gKyAgICAgIExlbmd0aCAgICAgICAgICA9IHNpemVvZiAoUkVNT1RFX05E SVNfUVVFUllfQ01QTFQpICsNCj4gUm5kaXNRdWVyeUNtcGx0LT5JbmZvcm1hdGlvbkJ1ZmZlckxl bmd0aDsNCj4gPiArICAgICAgYnJlYWs7DQo+ID4gKyAgICBjYXNlIFJORElTX1NFVF9NU0c6DQo+ ID4gKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIlJORElTX1NFVF9NU0c6XG4iKSk7DQo+ID4g KyAgICAgIExlbmd0aCA9IHNpemVvZiAoUkVNT1RFX05ESVNfU0VUX01TRyk7DQo+ID4gKyAgICAg IGJyZWFrOw0KPiA+ICsgICAgY2FzZSBSTkRJU19TRVRfQ01QTFQ6DQo+ID4gKyAgICAgIERFQlVH ICgoREVCVUdfSU5GTywgIlJORElTX1NFVF9DTVBMVDpcbiIpKTsNCj4gPiArICAgICAgTGVuZ3Ro ID0gc2l6ZW9mIChSRU1PVEVfTkRJU19TRVRfQ01QTFQpOw0KPiA+ICsgICAgICBicmVhazsNCj4g PiArICAgIGNhc2UgUk5ESVNfUkVTRVRfTVNHOg0KPiA+ICsgICAgICBERUJVRyAoKERFQlVHX0lO Rk8sICJSTkRJU19SRVNFVF9NU0c6XG4iKSk7DQo+ID4gKyAgICAgIExlbmd0aCA9IHNpemVvZiAo UkVNT1RFX05ESVNfUkVTRVRfTVNHKTsNCj4gPiArICAgICAgYnJlYWs7DQo+ID4gKyAgICBjYXNl IFJORElTX1JFU0VUX0NNUExUOg0KPiA+ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJSTkRJ U19SRVNFVF9DTVBMVDpcbiIpKTsNCj4gPiArICAgICAgTGVuZ3RoID0gc2l6ZW9mIChSRU1PVEVf TkRJU19SRVNFVF9DTVBMVCk7DQo+ID4gKyAgICAgIGJyZWFrOw0KPiA+ICsgICAgY2FzZSBSTkRJ U19JTkRJQ0FURV9TVEFUVVNfTVNHOg0KPiA+ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJS TkRJU19JTkRJQ0FURV9TVEFUVVNfTVNHOlxuIikpOw0KPiA+ICsgICAgICBMZW5ndGggPSBzaXpl b2YgKFJFTU9URV9ORElTX0lORElDQVRFX1NUQVRVU19NU0cpOw0KPiA+ICsgICAgICBicmVhazsN Cj4gPiArICAgIGNhc2UgUk5ESVNfS0VFUEFMSVZFX01TRzoNCj4gPiArICAgICAgREVCVUcgKChE RUJVR19JTkZPLCAiUk5ESVNfS0VFUEFMSVZFX01TRzpcbiIpKTsNCj4gPiArICAgICAgTGVuZ3Ro ID0gc2l6ZW9mIChSRU1PVEVfTkRJU19LRUVQQUxJVkVfTVNHKTsNCj4gPiArICAgICAgYnJlYWs7 DQo+ID4gKyAgICBjYXNlIFJORElTX0tFRVBBTElWRV9DTVBMVDoNCj4gPiArICAgICAgREVCVUcg KChERUJVR19JTkZPLCAiUk5ESVNfS0VFUEFMSVZFX0NNUExUOlxuIikpOw0KPiA+ICsgICAgICBM ZW5ndGggPSBzaXplb2YgKFJFTU9URV9ORElTX0tFRVBBTElWRV9DTVBMVCk7DQo+ID4gKyAgfQ0K PiA+ICsNCj4gPiArICBpZiAoTGVuZ3RoKSB7DQo+ID4gKyAgICBVSU5UTiAgSW5kZXggPSAwOw0K PiA+ICsgICAgZm9yICggOyBMZW5ndGg7IExlbmd0aCAtPSA0LCBJbmRleCsrKSB7DQo+ID4gKyAg ICAgIERFQlVHICgoREVCVUdfSU5GTywgIiU4WFx0IiwgKigoVUlOVDMyICopUm5kaXNNc2cgKyBJ bmRleCkpKTsNCj4gPiArICAgICAgaWYgKCgoSW5kZXggJSA0KSA9PSAzKSAmJiAoSW5kZXggIT0g MCkpIHsNCj4gPiArICAgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJcbiIpKTsNCj4gPiArICAg ICAgfQ0KPiA+ICsNCj4gPiArICAgICAgaWYgKChMZW5ndGggPCA4KSAmJiAoTGVuZ3RoID4gNCkp IHsNCj4gPiArICAgICAgICBVSU5UMzIgIERhdGEzMjsNCj4gPiArICAgICAgICBJbmRleCsrOw0K PiA+ICsgICAgICAgIERhdGEzMiA9ICooKFVJTlQzMiAqKVJuZGlzTXNnICsgSW5kZXgpOw0KPiA+ ICsgICAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIiU4WFx0IiwgRGF0YTMyKSk7DQo+ID4gKyAg ICAgICAgYnJlYWs7DQo+ID4gKyAgICAgIH0NCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBp ZiAoSW5kZXggJSA0KSB7DQo+ID4gKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIlxuIikpOw0K PiA+ICsgICAgfQ0KPiA+ICsgIH0NCj4gPiArfQ0KPiA+IC0tDQo+ID4gMi4zNS4xLndpbmRvd3Mu Mg0KPiA+IC1UaGUgaW5mb3JtYXRpb24gY29udGFpbmVkIGluIHRoaXMgbWVzc2FnZSBtYXkgYmUg Y29uZmlkZW50aWFsIGFuZA0KPiBwcm9wcmlldGFyeSB0byBBbWVyaWNhbiBNZWdhdHJlbmRzIChB TUkpLiBUaGlzIGNvbW11bmljYXRpb24gaXMgaW50ZW5kZWQNCj4gdG8gYmUgcmVhZCBvbmx5IGJ5 IHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0byB3aG9tIGl0IGlzIGFkZHJlc3NlZCBvciBieSB0 aGVpcg0KPiBkZXNpZ25lZS4gSWYgdGhlIHJlYWRlciBvZiB0aGlzIG1lc3NhZ2UgaXMgbm90IHRo ZSBpbnRlbmRlZCByZWNpcGllbnQsIHlvdSBhcmUNCj4gb24gbm90aWNlIHRoYXQgYW55IGRpc3Ry aWJ1dGlvbiBvZiB0aGlzIG1lc3NhZ2UsIGluIGFueSBmb3JtLCBpcyBzdHJpY3RseQ0KPiBwcm9o aWJpdGVkLiBQbGVhc2UgcHJvbXB0bHkgbm90aWZ5IHRoZSBzZW5kZXIgYnkgcmVwbHkgZS1tYWls IG9yIGJ5DQo+IHRlbGVwaG9uZSBhdCA3NzAtMjQ2LTg2MDAsIGFuZCB0aGVuIGRlbGV0ZSBvciBk ZXN0cm95IGFsbCBjb3BpZXMgb2YgdGhlDQo+IHRyYW5zbWlzc2lvbi4NCj4gLVRoZSBpbmZvcm1h dGlvbiBjb250YWluZWQgaW4gdGhpcyBtZXNzYWdlIG1heSBiZSBjb25maWRlbnRpYWwgYW5kDQo+ IHByb3ByaWV0YXJ5IHRvIEFtZXJpY2FuIE1lZ2F0cmVuZHMgKEFNSSkuIFRoaXMgY29tbXVuaWNh dGlvbiBpcyBpbnRlbmRlZA0KPiB0byBiZSByZWFkIG9ubHkgYnkgdGhlIGluZGl2aWR1YWwgb3Ig ZW50aXR5IHRvIHdob20gaXQgaXMgYWRkcmVzc2VkIG9yIGJ5IHRoZWlyDQo+IGRlc2lnbmVlLiBJ ZiB0aGUgcmVhZGVyIG9mIHRoaXMgbWVzc2FnZSBpcyBub3QgdGhlIGludGVuZGVkIHJlY2lwaWVu dCwgeW91IGFyZQ0KPiBvbiBub3RpY2UgdGhhdCBhbnkgZGlzdHJpYnV0aW9uIG9mIHRoaXMgbWVz c2FnZSwgaW4gYW55IGZvcm0sIGlzIHN0cmljdGx5DQo+IHByb2hpYml0ZWQuIFBsZWFzZSBwcm9t cHRseSBub3RpZnkgdGhlIHNlbmRlciBieSByZXBseSBlLW1haWwgb3IgYnkNCj4gdGVsZXBob25l IGF0IDc3MC0yNDYtODYwMCwgYW5kIHRoZW4gZGVsZXRlIG9yIGRlc3Ryb3kgYWxsIGNvcGllcyBv ZiB0aGUNCj4gdHJhbnNtaXNzaW9uLg0KPiANCj4gDQo+IA0KPiANCg==