From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from EUR05-DB8-obe.outbound.protection.outlook.com (EUR05-DB8-obe.outbound.protection.outlook.com [40.107.20.56]) by mx.groups.io with SMTP id smtpd.web10.13821.1589209486311845710 for ; Mon, 11 May 2020 08:04:47 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@armh.onmicrosoft.com header.s=selector2-armh-onmicrosoft-com header.b=lbgefCjf; spf=pass (domain: arm.com, ip: 40.107.20.56, mailfrom: samer.el-haj-mahmoud@arm.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rJ83lFyU3DDhVOlwDI1UeadR9a9euUf5cDn3/4tcsKc=; b=lbgefCjfv6WlzTgRs8l6YGTPDKjZMUjfk97y/D83e5zzCTDzAIgw/if15DUXcQdVuW38WjLf7sVBgpXYz2LQvKkbcpItgSlE+3DjfEpFQH+9R7F+OGW0vSNV74l004E/nb0knQ2zKDzYCTp1uyA6HaU0A1G46DNdsQ5snovEw4c= Received: from MR2P264CA0020.FRAP264.PROD.OUTLOOK.COM (2603:10a6:500:1::32) by VI1PR08MB4525.eurprd08.prod.outlook.com (2603:10a6:803:101::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2979.26; Mon, 11 May 2020 15:04:36 +0000 Received: from VE1EUR03FT053.eop-EUR03.prod.protection.outlook.com (2603:10a6:500:1:cafe::13) by MR2P264CA0020.outlook.office365.com (2603:10a6:500:1::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2979.26 via Frontend Transport; Mon, 11 May 2020 15:04:36 +0000 Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; edk2.groups.io; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;edk2.groups.io; dmarc=bestguesspass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by VE1EUR03FT053.mail.protection.outlook.com (10.152.19.198) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2979.27 via Frontend Transport; Mon, 11 May 2020 15:04:35 +0000 Received: ("Tessian outbound ff098c684b24:v54"); Mon, 11 May 2020 15:04:35 +0000 X-CR-MTA-TID: 64aa7808 Received: from e24679499766.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 60624EC8-4531-4B1C-A23F-DA5956FC7BD0.1; Mon, 11 May 2020 15:04:29 +0000 Received: from EUR01-DB5-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id e24679499766.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Mon, 11 May 2020 15:04:29 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ke1ZkDz+yt6e5T+NfYjljvpPdqqlVQivAiaa12N5Xq5p1KfnrTKOli/wcW2s4lVe38h9kbuq1oIeWD6MObggH20VROsHzP9D/eCoDsubn0GVPttn8O8jMogYDlH8SBgcBCqom42W3HF47sca7Lmhwx16fWQsyvEjH7C5Tx2WfJ8ObBJBxilXDs8gy28EEmTtnr8J+Q60fPX/VkNv6se0Z1fybiRoF+WLBt5WUddP/EFTkGY10XD/yLVfePJJC6SRI5Zgw9tYZZuyVooXod4bU3f356fhapyl7ZMN8W1NNT5acHCQCZMQTceKN9pCRKQtmAxauG9KcgwROYKw5O0yeg== 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-SenderADCheck; bh=rJ83lFyU3DDhVOlwDI1UeadR9a9euUf5cDn3/4tcsKc=; b=jokfLfuH4lCowzh2U5T7W463v2tWGG+AXLbKtjeBF+cBQ7IaMGAKwzZCa6qdMmllYiN+dgQ4JZpRKWpfXd5qZQuteYsEyCZNn1+et9jKEVyseLDoJng6WCmfp9/6TFnbZ/8lK23jJW/a51Nyr7H1Cu1qF+fTi+6Gmy1DG/06d1RYudn82ahuj6GttM9dGQTzRPayb/lcF3Xh8Q7YVCXx+G0qX2BFDvUPUWG6WvXCBPhaWJ+KQ/aZIl/lR9D2rzxC2CTHpwTtVeKa3ZMu+dcz2l/B/q5GwNsjlRAdu7OuZteztigOHOzFPTknrdGWBqYq5Ix8DSHgO9FVY3ohd8lAAw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rJ83lFyU3DDhVOlwDI1UeadR9a9euUf5cDn3/4tcsKc=; b=lbgefCjfv6WlzTgRs8l6YGTPDKjZMUjfk97y/D83e5zzCTDzAIgw/if15DUXcQdVuW38WjLf7sVBgpXYz2LQvKkbcpItgSlE+3DjfEpFQH+9R7F+OGW0vSNV74l004E/nb0knQ2zKDzYCTp1uyA6HaU0A1G46DNdsQ5snovEw4c= Received: from DB7PR08MB3260.eurprd08.prod.outlook.com (2603:10a6:5:21::23) by DB7PR08MB3418.eurprd08.prod.outlook.com (2603:10a6:10:27::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2958.20; Mon, 11 May 2020 15:04:21 +0000 Received: from DB7PR08MB3260.eurprd08.prod.outlook.com ([fe80::990e:ed79:bec0:9dac]) by DB7PR08MB3260.eurprd08.prod.outlook.com ([fe80::990e:ed79:bec0:9dac%7]) with mapi id 15.20.2979.033; Mon, 11 May 2020 15:04:21 +0000 From: "Samer El-Haj-Mahmoud" To: "devel@edk2.groups.io" , Ard Biesheuvel CC: Ray Ni , Leif Lindholm , Michael D Kinney , Samer El-Haj-Mahmoud Subject: Re: [edk2-devel] [edk2-platform][PATCH v1 3/4] Silicon/AsixPkg: Add ASIX Ax88179 driver Thread-Topic: [edk2-devel] [edk2-platform][PATCH v1 3/4] Silicon/AsixPkg: Add ASIX Ax88179 driver Thread-Index: AQHWJ6HNCddI4OUVQUKimkb0MJfcb6ii+y0g Date: Mon, 11 May 2020 15:04:20 +0000 Message-ID: References: <20200510111530.26225-1-Samer.El-Haj-Mahmoud@arm.com> <20200510111530.26225-4-Samer.El-Haj-Mahmoud@arm.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ts-tracking-id: 5b64c17b-b827-4a35-8e98-e987da5a638d.1 x-checkrecipientchecked: true Authentication-Results-Original: edk2.groups.io; dkim=none (message not signed) header.d=none;edk2.groups.io; dmarc=none action=none header.from=arm.com; x-originating-ip: [99.132.126.10] x-ms-publictraffictype: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 651d518a-53b1-40e1-8345-08d7f5bc9e43 x-ms-traffictypediagnostic: DB7PR08MB3418:|DB7PR08MB3418:|VI1PR08MB4525: x-ms-exchange-transport-forked: True X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true nodisclaimer: true x-ms-oob-tlc-oobclassifiers: OLM:9508;OLM:9508; x-forefront-prvs: 04004D94E2 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: Y6lS7aWVPUHVAdHhrSB/XUaQUGdzld+iFIwmezMrGl7QpTNm+TRHGECN+6zVfWQddkzFqZ54t2A7eBMkoGUftTACMsHEgvF0Fmj2Akq6LsUCmBLQpC5Y0QPU9Dz9HtAguR6jUZRvUSgFtI1+7AdHa8YMRxv8dRlAW86ABMe2Dw5oOZ+Si8CesG0LI4lsPuxiQBafnRfmOnpT/74NV3IHBW61BS4qv8qJDt0CdQzamj8TMiw5SQBliEnNOacuUC1+qhIA2jLIvFt3V0uueqVQMYqwT9tZlwQNOyTUypUX6vWFlJTyoWXKNjeknzoh7IVHy9gNHkGzFM89R07I18ZW3OHpz9IQuI+QpW9Z6X9RBMdGcIm4BUCu74yPKm+r+Gi9DzlPL6yRg70gZ34jYwWvdrjPBl/t34sz/dAxUQQVMI3Gz0E3TW8lWnxwiNB+cFGruE4/DkZIrZ06jPGIgDuDnA6HcfTJsvGJ3BrD1CQMb+affhFTz/nN4IJlWtwHmvZRyXfNj3v7Q+Y98R9Rypmt7lVyIei3SEMTes7wDoFa3OS8O9BTzuHgtoFYjJx2HnGLchNkltP58F0VXa8uZ7LdJsfa4waMnPE/8tck9wTVLUXIX4WmyTND2rvYgyVfOBBa X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB7PR08MB3260.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(4636009)(346002)(136003)(366004)(396003)(376002)(39860400002)(33430700001)(9686003)(966005)(71200400001)(26005)(53546011)(7696005)(186003)(110136005)(4326008)(316002)(5660300002)(6506007)(33440700001)(30864003)(54906003)(33656002)(19627235002)(478600001)(66946007)(76116006)(45080400002)(8936002)(2906002)(6636002)(55016002)(16799955002)(8676002)(86362001)(66556008)(66476007)(66446008)(52536014)(64756008)(569008);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata: OjkAOX0ccqkZm6wXCnUnX/BrZCiGm97phmkCWoPGsG5vIKIJWXQ5MkAJOIuSPi8/WBwYmeQGhPKYC4Yq19+lfzmuEw4LYwRD9PKgsU/SNuCqdWaTHyFH6phVPF9oNKl2ngVZMFoLneyjRVDanRUKJ9LgenWuw+SQgoxlqXTcFsP1c2SYx5V8EhqAVKUkC2KHXuMVaV9Rn7bu2UJukg8K2Nv7F/pcpI7y+sz5lL7D2FwSjpQeAi26PrX5YTl3kSCzVNV+2TUedeFxhK0uD22JUQ4wgGI0sIDzEYQ0j3PSamdCUI8SjSwsrkStLyjJt97uDoD+C+Wy6YtzuXiy8z0o8hVulW98dP1OoAihvAJLkZtGMja4ZU9z8Br2GgPcl4UTC9E1zD3WROhkwXsfnNabztjm2VRuTq3qKtLnpL0o5PiOhSQpbaeMaiHFoiWxLgt8qan6cgzSmbXLbU+LbEnP68Ka5yUJvkotA3ZvZ35X5uw= MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB3418 Original-Authentication-Results: edk2.groups.io; dkim=none (message not signed) header.d=none;edk2.groups.io; dmarc=none action=none header.from=arm.com; Return-Path: Samer.El-Haj-Mahmoud@arm.com X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: VE1EUR03FT053.eop-EUR03.prod.protection.outlook.com X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFTY:;SFS:(4636009)(39860400002)(376002)(396003)(136003)(346002)(46966005)(33430700001)(7696005)(186003)(82740400003)(86362001)(6636002)(26005)(36906005)(336012)(8676002)(8936002)(81166007)(5660300002)(30864003)(47076004)(16799955002)(19627235002)(33656002)(6506007)(70206006)(4326008)(2906002)(316002)(45080400002)(70586007)(54906003)(82310400002)(110136005)(53546011)(356005)(966005)(478600001)(9686003)(33440700001)(55016002)(52536014)(579004)(559001)(44824005);DIR:OUT;SFP:1101; X-MS-Office365-Filtering-Correlation-Id-Prvs: 3480a35c-e7cc-48e5-f6a0-08d7f5bc963d X-Forefront-PRVS: 04004D94E2 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ylH3vqWJVtsbVugZucNoVtNSZCaNbG9bSJQ7rDzkUwh88qMY3nI5OCUdHPQ3RN2T5D7CwiWukjYOhq6OIbo33ALztUXRGI0rmROEeCjHi5vikOI477i32lO6KUrP9MJ9hDhZLpKmRMyKLyj9bHGInRolo26qIRpbMzKByrdNSc+KiPAQB7GQNrrmFpHnzU6faPQAqtPVN1a9MKFCeDM0tInMp0nwx5G7YMaEkop7zbZRbAVlwTSqrcs8CUbEkOWhLquNahqh1CENTCiR+7pAJLvmR62DiP0fJiH6MN+RR8CAFpAm3YMnoI0TsjDUO8ItmGaU3fLLa7udmizlrCbS8pBI7WPWILkjHo5SeD1pfkRP2zCxz5XjgMlRkDiYzOklhOh5Z8oNHRKgaT/250u9+gDhmx2JTk9ETSXeuMXdOyiO62Y7EdS75hx49BcnY417uv91PotsdUcEm6i0Xu+XUes4vleTPGPQ3DZnu06P/htwTECaKqO2AkLsTWLzKebIYqw8DOF9dFL6UX83WpE4U02bhUbCP/FBNkk9yIn9jIw37ph2RcakKv1fCWoDVEcU5+/ykSAKGutV8R9HDz1O6JP2tXrou6B91jCqDayzTqWT2LeaTJ4c14gyZ9XAAuZpJtx6eqxEWLbTEiyW6VF5FcyS5OWYVRJ3fVCUbclU1mLR2lAZK0dvz7CkUCpTeQjG X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2020 15:04:35.2563 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 651d518a-53b1-40e1-8345-08d7f5bc9e43 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB4525 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 VGhhbmtzIEFyZCBmb3IgdGhlIHJldmlldy4gVGhlIGNvc21ldGljL2NvZGUgc3R5bGUgY2hhbmdl cyBhcmUgZWFzeSBlbm91Z2guIEZvciB0aGUgb3RoZXIgY2hhbmdlcywgSSB3aWxsIG5lZWQgdG8g dGVzdCB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyBzdGlsbCB3b3Jrcy4gSSBndWVzcyBJIHdpbGwg aGF2ZSB0byBvcmRlciBhbiBBeDg4MTc5IGFkYXB0ZXIuLi4NCg0KVGhhbmtzLA0KLS1TYW1lcg0K DQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IGRldmVsQGVkazIuZ3JvdXBz LmlvIDxkZXZlbEBlZGsyLmdyb3Vwcy5pbz4gT24gQmVoYWxmIE9mIEFyZA0KPiBCaWVzaGV1dmVs IHZpYSBncm91cHMuaW8NCj4gU2VudDogTW9uZGF5LCBNYXkgMTEsIDIwMjAgMTA6MzggQU0NCj4g VG86IFNhbWVyIEVsLUhhai1NYWhtb3VkIDxTYW1lci5FbC1IYWotTWFobW91ZEBhcm0uY29tPjsN Cj4gZGV2ZWxAZWRrMi5ncm91cHMuaW8NCj4gQ2M6IFJheSBOaSA8cmF5Lm5pQGludGVsLmNvbT47 IExlaWYgTGluZGhvbG0gPGxlaWZAbnV2aWFpbmMuY29tPjsgTWljaGFlbA0KPiBEIEtpbm5leSA8 bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+DQo+IFN1YmplY3Q6IFJlOiBbZWRrMi1kZXZlbF0g W2VkazItcGxhdGZvcm1dW1BBVENIIHYxIDMvNF0gU2lsaWNvbi9Bc2l4UGtnOg0KPiBBZGQgQVNJ WCBBeDg4MTc5IGRyaXZlcg0KPg0KPiBPbiA1LzEwLzIwIDE6MTUgUE0sIFNhbWVyIEVsLUhhai1N YWhtb3VkIHdyb3RlOg0KPiA+IFRoaXMgaXMgdGhlIGluaXRpYWwgcmV2aXNpb24gb2YgQVNJWCBV U0IgbmV0d29ya2luZyBVRUZJIGRyaXZlcg0KPiA+IHZlcnNpb24gMi45LjAgZm9yIEF4ODgxNzkg YW5kIEF4ODgxNzhhDQo+ID4NCj4gaHR0cHM6Ly93d3cuYXNpeC5jb20udHcvcHJvZHVjdHMucGhw P29wPXBJdGVtZGV0YWlsJlBJdGVtSUQ9MTMxOzcxOzENCj4gMTINCj4gPg0KPiA+IFNvdXJjZSBj b2RlIGNvbnRyaWJ1dGVkIGJ5IEFTSVguDQo+ID4NCj4gPiBDYzogUmF5IE5pIDxyYXkubmlAaW50 ZWwuY29tPg0KPiA+IENjOiBMZWlmIExpbmRob2xtIDxsZWlmQG51dmlhaW5jLmNvbT4NCj4gPiBD YzogQXJkIEJpZXNoZXV2ZWwgPGFyZC5iaWVzaGV1dmVsQGFybS5jb20+DQo+ID4gQ2M6IE1pY2hh ZWwgRCBLaW5uZXkgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPg0KPiA+DQo+ID4gU2lnbmVk LW9mZi1ieTogU2FtZXIgRWwtSGFqLU1haG1vdWQgPHNhbWVyLmVsLWhhai0NCj4gbWFobW91ZEBh cm0uY29tPg0KPg0KPiBUaGFua3MgZm9yIHNlbmRpbmcgdGhpcy4NCj4NCj4gQ29tbWVudHMgaW5s aW5lLg0KPg0KPiA+IC0tLQ0KPiA+ICAgU2lsaWNvbi9BU0lYL0FzaXhQa2cuZHNjICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSArDQo+ID4gICBTaWxpY29u L0FTSVgvRHJpdmVycy9CdXMvVXNiL1VzYk5ldHdvcmtpbmcvQXg4ODE3OS9BeDg4MTc5LmluZiAg ICAgfA0KPiA2NiArDQo+ID4gICBTaWxpY29uL0FTSVgvRHJpdmVycy9CdXMvVXNiL1VzYk5ldHdv cmtpbmcvQXg4ODE3OS9BeDg4MTc5LmggICAgICAgfA0KPiAxMTI3ICsrKysrKysrKysrKysrDQo+ ID4gICBTaWxpY29uL0FTSVgvRHJpdmVycy9CdXMvVXNiL1VzYk5ldHdvcmtpbmcvQXg4ODE3OS9B eDg4MTc5LmMgICAgICAgfA0KPiAxMDI2ICsrKysrKysrKysrKysNCj4gPg0KPiBTaWxpY29uL0FT SVgvRHJpdmVycy9CdXMvVXNiL1VzYk5ldHdvcmtpbmcvQXg4ODE3OS9Db21wb25lbnROYW1lLmMN Cj4gfCAgMjkwICsrKysNCj4gPiAgIFNpbGljb24vQVNJWC9Ecml2ZXJzL0J1cy9Vc2IvVXNiTmV0 d29ya2luZy9BeDg4MTc5L0RyaXZlckJpbmRpbmcuYyB8DQo+IDYyMCArKysrKysrKw0KPiA+ICAg U2lsaWNvbi9BU0lYL0RyaXZlcnMvQnVzL1VzYi9Vc2JOZXR3b3JraW5nL0F4ODgxNzkvU2ltcGxl TmV0d29yay5jDQo+IHwgMTU4NSArKysrKysrKysrKysrKysrKysrKw0KPiA+ICAgNyBmaWxlcyBj aGFuZ2VkLCA0NzE1IGluc2VydGlvbnMoKykNCj4gPg0KPg0KPiBUaGlzIGlzIGdlbmVyYWxseSB0 b28gYmlnIHRvIHJldmlldywgYnV0IEkgZG9uJ3Qgc2VlIGEgYmV0dGVyIHdheSB0YmgsDQo+IGdp dmVuIHRoYXQgdGhpcyB3YXMgY29udHJpYnV0ZWQgYXMgaXMuDQo+DQo+IENvbW1lbnRzIGlubGlu ZS4gQ29kaW5nIHN0eWxlIHJlbWFya3MgYXBwbHkgZ2xvYmFsbHksIG5vdCBqdXN0IHdoZXJlIG5v dGVkLg0KPg0KPiA+IGRpZmYgLS1naXQgYS9TaWxpY29uL0FTSVgvQXNpeFBrZy5kc2MgYi9TaWxp Y29uL0FTSVgvQXNpeFBrZy5kc2MNCj4gPiBpbmRleCAwZTRmZmQwZjE3NDMuLjVlODYwZDdiM2M4 ZiAxMDA2NDQNCj4gPiAtLS0gYS9TaWxpY29uL0FTSVgvQXNpeFBrZy5kc2MNCj4gPiArKysgYi9T aWxpY29uL0FTSVgvQXNpeFBrZy5kc2MNCj4gPiBAQCAtNjQsNSArNjQsNiBAQCBbUGNkc0ZpeGVk QXRCdWlsZF0NCj4gPiAgICMNCj4gPg0KPiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KPiAjIyMjIyMjIyMjIyMjIyMjIyMNCj4g PiAgIFtDb21wb25lbnRzXQ0KPiA+ICtTaWxpY29uL0FTSVgvRHJpdmVycy9CdXMvVXNiL1VzYk5l dHdvcmtpbmcvQXg4ODE3OS9BeDg4MTc5LmluZg0KPiA+ICAgU2lsaWNvbi9BU0lYL0RyaXZlcnMv QnVzL1VzYi9Vc2JOZXR3b3JraW5nL0F4ODg3NzIvQXg4ODc3Mi5pbmYNCj4gPiAgIFNpbGljb24v QVNJWC9Ecml2ZXJzL0J1cy9Vc2IvVXNiTmV0d29ya2luZy9BeDg4NzcyYi9BeDg4NzcyYi5pbmYN Cj4gPiBkaWZmIC0tZ2l0DQo+IGEvU2lsaWNvbi9BU0lYL0RyaXZlcnMvQnVzL1VzYi9Vc2JOZXR3 b3JraW5nL0F4ODgxNzkvQXg4ODE3OS5pbmYNCj4gYi9TaWxpY29uL0FTSVgvRHJpdmVycy9CdXMv VXNiL1VzYk5ldHdvcmtpbmcvQXg4ODE3OS9BeDg4MTc5LmluZg0KPiA+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi5hMTg4M2U5ZGExZmQNCj4gPiAtLS0gL2Rl di9udWxsDQo+ID4gKysrIGIvU2lsaWNvbi9BU0lYL0RyaXZlcnMvQnVzL1VzYi9Vc2JOZXR3b3Jr aW5nL0F4ODgxNzkvQXg4ODE3OS5pbmYNCj4gPiBAQCAtMCwwICsxLDY2IEBADQo+ID4gKyMjIEBm aWxlDQo+ID4gKyMgQ29tcG9uZW50IGRlc2NyaXB0aW9uIGZpbGUgZm9yIEFTSVggQVg4ODc3MiBV U0IvRXRoZXJuZXQgZHJpdmVyLg0KPiA+ICsjDQo+ID4gKyMgVGhpcyBtb2R1bGUgcHJvdmlkZXMg c3VwcG9ydCBmb3IgdGhlIEFTSVggQVg4ODc3MiBVU0IvRXRoZXJuZXQNCj4gYWRhcHRlci4NCj4g PiArIyBDb3B5cmlnaHQgKGMpIDIwMTEsIEludGVsIENvcnBvcmF0aW9uDQo+ID4gKyMNCj4gPiAr IyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gPiArIw0K PiA+ICsjIw0KPiA+ICsNCj4gPiArW0RlZmluZXNdDQo+ID4gKyAgSU5GX1ZFUlNJT04gICAgICAg ICAgICAgICAgICAgID0gMHgwMDAxMDAxOA0KPiA+ICsgIEJBU0VfTkFNRSAgICAgICAgICAgICAg ICAgICAgICA9IEF4ODgxNzkNCj4gPiArICBGSUxFX0dVSUQgICAgICAgICAgICAgICAgICAgICAg PSAyN0U1RDNCNi03ODM5LTQ3QzItODYxOC01RDIxOTA3MjlCQzcNCj4gPiArICBNT0RVTEVfVFlQ RSAgICAgICAgICAgICAgICAgICAgPSBEWEVfUlVOVElNRV9EUklWRVINCj4NCj4gVGhpcyBpcyBk b2RneS4gVGhlIFVTQiBzdGFjayBpcyBub3QgcnVudGltZSBzYWZlLCBzbyBJIGRvbid0IHNlZSBo b3cNCj4gdGhpcyBkcml2ZXIgY291bGQgZG8gYW55dGhpbmcgdXNlZnVsIGFmdGVyIHRoZSB1bmRl cmx5aW5nIGluZnJhc3RydWN0dXJlDQo+IGhhcyBiZWVuIHRvcm4gZG93bi4NCj4NCj4gPiArICBW RVJTSU9OX1NUUklORyAgICAgICAgICAgICAgICAgPSAxLjANCj4gPiArDQo+ID4gKyAgRU5UUllf UE9JTlQgICAgICAgICAgICAgICAgICAgID0gRW50cnlQb2ludA0KPiA+ICsNCj4gPiArIw0KPiA+ ICsjICBWQUxJRF9BUkNISVRFQ1RVUkVTICAgICAgICAgICA9IElBMzIgWDY0IEVCQw0KPiA+ICsj DQo+DQo+IEp1c3QgZHJvcCB0aGlzLiBObyBwb2ludCBpbiBmaXhpbmcgaXQuDQo+DQo+DQo+ID4g Kw0KPiA+ICtbU291cmNlcy5jb21tb25dDQo+ID4gKyAgQXg4ODE3OS5oDQo+ID4gKyAgQXg4ODE3 OS5jDQo+ID4gKyAgQ29tcG9uZW50TmFtZS5jDQo+ID4gKyAgRHJpdmVyQmluZGluZy5jDQo+ID4g KyAgU2ltcGxlTmV0d29yay5jDQo+ID4gKw0KPiA+ICsNCj4gPiArW1BhY2thZ2VzXQ0KPiA+ICsg IE1kZVBrZy9NZGVQa2cuZGVjDQo+ID4gKyAgTWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy5kZWMN Cj4gPiArDQo+ID4gK1tMaWJyYXJ5Q2xhc3Nlc10NCj4gPiArICBVZWZpTGliDQo+ID4gKyAgVWVm aUJvb3RTZXJ2aWNlc1RhYmxlTGliDQo+ID4gKyAgQmFzZU1lbW9yeUxpYg0KPiA+ICsgIERlYnVn TGliDQo+ID4gKyAgVWVmaVJ1bnRpbWVMaWINCj4gPiArICBVZWZpRHJpdmVyRW50cnlQb2ludA0K PiA+ICsNCj4NCj4gUHV0IHRoaXMgaW4gdGhlIHJpZ2h0IG9yZGVyIHBsZWFzZS4NCj4NCj4gPiAr W1Byb3RvY29sc10NCj4gPiArICBnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCAgICAgICAgICAg IyMgQllfU1RBUlQNCj4gPiArICBnRWZpU2ltcGxlTmV0d29ya1Byb3RvY29sR3VpZCAgICAgICAg IyMgQllfU1RBUlQNCj4gPiArICBnRWZpVXNiSW9Qcm90b2NvbEd1aWQgICAgICAgICAgICAgICAg IyMgVE9fU1RBUlQNCj4gPiArDQo+ID4gKyNbR3VpZHNdDQo+ID4gKyAgI2dFZmlFdmVudEV4aXRC b290U2VydmljZXNHdWlkICAgICAgICAjIyBQUk9EVUNFUyAjIyBFdmVudA0KPiA+ICsgICNnRWZp RXZlbnRWaXJ0dWFsQWRkcmVzc0NoYW5nZUd1aWQgICAgIyMgUFJPRFVDRVMgIyMgRXZlbnQNCj4g PiArICAjZ0VmaU5pY0lwNENvbmZpZ1ZhcmlhYmxlR3VpZA0KPiA+ICsNCj4NCj4gVGhpcyBpcyBy dW50aW1lIHN0dWZmLg0KPg0KPiA+ICtbRGVwZXhdDQo+ID4gKyAgZ0VmaUJkc0FyY2hQcm90b2Nv bEd1aWQgQU5EDQo+ID4gKyAgZ0VmaUNwdUFyY2hQcm90b2NvbEd1aWQgQU5EDQo+ID4gKyAgZ0Vm aU1ldHJvbm9tZUFyY2hQcm90b2NvbEd1aWQgQU5EDQo+ID4gKyAgZ0VmaU1vbm90b25pY0NvdW50 ZXJBcmNoUHJvdG9jb2xHdWlkIEFORA0KPiA+ICsgIGdFZmlSZWFsVGltZUNsb2NrQXJjaFByb3Rv Y29sR3VpZCBBTkQNCj4gPiArICBnRWZpUmVzZXRBcmNoUHJvdG9jb2xHdWlkIEFORA0KPiA+ICsg IGdFZmlSdW50aW1lQXJjaFByb3RvY29sR3VpZCBBTkQNCj4gPiArICBnRWZpU2VjdXJpdHlBcmNo UHJvdG9jb2xHdWlkIEFORA0KPiA+ICsgIGdFZmlUaW1lckFyY2hQcm90b2NvbEd1aWQgQU5EDQo+ ID4gKyAgZ0VmaVZhcmlhYmxlV3JpdGVBcmNoUHJvdG9jb2xHdWlkIEFORA0KPiA+ICsgIGdFZmlW YXJpYWJsZUFyY2hQcm90b2NvbEd1aWQgQU5EDQo+ID4gKyAgZ0VmaVdhdGNoZG9nVGltZXJBcmNo UHJvdG9jb2xHdWlkDQo+DQo+IFRoaXMgZGVwZXggc2hvdWxkIGp1c3QgYmUgZHJvcHBlZCBvbmNl IHdlIGNoYW5nZSB0aGUgdHlwZSB0byBVRUZJX0RSSVZFUg0KPg0KPiA+IGRpZmYgLS1naXQNCj4g YS9TaWxpY29uL0FTSVgvRHJpdmVycy9CdXMvVXNiL1VzYk5ldHdvcmtpbmcvQXg4ODE3OS9BeDg4 MTc5LmgNCj4gYi9TaWxpY29uL0FTSVgvRHJpdmVycy9CdXMvVXNiL1VzYk5ldHdvcmtpbmcvQXg4 ODE3OS9BeDg4MTc5LmgNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAw MDAwMDAwMC4uODJjOWEzNjY4ZDg2DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL1NpbGlj b24vQVNJWC9Ecml2ZXJzL0J1cy9Vc2IvVXNiTmV0d29ya2luZy9BeDg4MTc5L0F4ODgxNzkuaA0K PiA+IEBAIC0wLDAgKzEsMTEyNyBAQA0KPiA+ICsvKiogQGZpbGUNCj4gPiArICBEZWZpbml0aW9u cyBmb3IgQVNJWCBBWDg4MTc5IEV0aGVybmV0IGFkYXB0ZXIuDQo+ID4gKw0KPiA+ICsgIENvcHly aWdodCAoYykgMjAxMSwgSW50ZWwgQ29ycG9yYXRpb24NCj4gPiArICBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ICsNCj4gPiArKiovDQo+ID4gKw0KPiA+ ICsjaWZuZGVmIF9BWDg4MTc5X0hfDQo+ID4gKyNkZWZpbmUgX0FYODgxNzlfSF8NCj4gPiArDQo+ ID4gKyNpbmNsdWRlIDxVZWZpLmg+DQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8R3VpZC9FdmVudEdy b3VwLmg+DQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8SW5kdXN0cnlTdGFuZGFyZC9QY2kuaD4NCj4g PiArDQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VNZW1vcnlMaWIuaD4NCj4gPiArI2luY2x1 ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCj4gPiArI2luY2x1ZGUgPExpYnJhcnkvRGV2aWNlUGF0 aExpYi5oPg0KPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpQm9vdFNlcnZpY2VzVGFibGVMaWIu aD4NCj4gPiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaURyaXZlckVudHJ5UG9pbnQuaD4NCj4gPiAr I2luY2x1ZGUgPExpYnJhcnkvVWVmaUxpYi5oPg0KPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZp UnVudGltZUxpYi5oPg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPFByb3RvY29sL0RldmljZVBhdGgu aD4NCj4gPiArI2luY2x1ZGUgPFByb3RvY29sL0xvYWRlZEltYWdlLmg+DQo+ID4gKyNpbmNsdWRl IDxQcm90b2NvbC9OZXR3b3JrSW50ZXJmYWNlSWRlbnRpZmllci5oPg0KPiA+ICsjaW5jbHVkZSA8 UHJvdG9jb2wvU2ltcGxlTmV0d29yay5oPg0KPiA+ICsjaW5jbHVkZSA8UHJvdG9jb2wvVXNiSW8u aD4NCj4gPiArDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFBBU1NfU0NUICAgICAgMA0KPiA+ICsjZGVm aW5lIEZPUkNFXzEwME1icHMgMA0KPiA+ICsjZGVmaW5lIFJFUE9SVExJTksgICAgMQ0KPiA+ICsN Cj4gPiArDQo+ID4gKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4gKy8vICBNYWNyb3MNCj4g PiArLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gPiArDQo+ID4gKy8vI2lmIGRlZmluZWQoX01T Q19WRVIpICAgICAgICAgICAvKiBIYW5kbGUgTWljcm9zb2Z0IFZDKysgY29tcGlsZXINCj4gc3Bl Y2lmaWNzLiAqLw0KPiA+ICsjZGVmaW5lIERCR19FTlRFUigpICAgICAgICAgICAgIERFQlVHICgo IDB4ZmZmZmZmZmYsICJFbnRlcmluZyAiDQo+IF9fRlVOQ1RJT05fXyAiXG4iICkpIC8vLzwgIERp c3BsYXkgcm91dGluZSBlbnRyeQ0KPiA+ICsjZGVmaW5lIERCR19FWElUKCkgICAgICAgICAgICAg IERFQlVHICgoIDB4ZmZmZmZmZmYsICJFeGl0aW5nICIgX19GVU5DVElPTl9fDQo+ICJcbiIgKSkg IC8vLzwgIERpc3BsYXkgcm91dGluZSBleGl0DQo+ID4gKyNkZWZpbmUgREJHX0VYSVRfREVDKFN0 YXR1cykgICAgREVCVUcgKCggMHhmZmZmZmZmZiwgIkV4aXRpbmcgIg0KPiBfX0ZVTkNUSU9OX18g IiwgU3RhdHVzOiAlZFxuIiwgU3RhdHVzICkpICAgICAgLy8vPCAgRGlzcGxheSByb3V0aW5lIGV4 aXQgd2l0aA0KPiBkZWNpbWFsIHZhbHVlDQo+ID4gKyNkZWZpbmUgREJHX0VYSVRfSEVYKFN0YXR1 cykgICAgREVCVUcgKCggMHhmZmZmZmZmZiwgIkV4aXRpbmcgIg0KPiBfX0ZVTkNUSU9OX18gIiwg U3RhdHVzOiAweCUwOHhcbiIsIFN0YXR1cyApKSAgLy8vPCAgRGlzcGxheSByb3V0aW5lIGV4aXQg d2l0aA0KPiBoZXggdmFsdWUNCj4gPiArI2RlZmluZSBEQkdfRVhJVF9TVEFUVVMoU3RhdHVzKSBE RUJVRyAoKCAweGZmZmZmZmZmLCAiRXhpdGluZyAiDQo+IF9fRlVOQ1RJT05fXyAiLCBTdGF0dXM6 ICVyXG4iLCBTdGF0dXMgKSkgICAgICAvLy88ICBEaXNwbGF5IHJvdXRpbmUgZXhpdCB3aXRoDQo+ IHN0YXR1cyB2YWx1ZQ0KPiA+ICsjZGVmaW5lIERCR19FWElUX1RGKFN0YXR1cykgICAgIERFQlVH ICgoIDB4ZmZmZmZmZmYsICJFeGl0aW5nICINCj4gX19GVU5DVElPTl9fICIsIHJldHVybmluZyAl c1xuIiwgKEZBTFNFID09IFN0YXR1cykgPyBMIkZBTFNFIiA6IEwiVFJVRSIgKSkNCj4gLy8vPCAg RGlzcGxheSByb3V0aW5lIHdpdGggVFJVRS9GQUxTRSB2YWx1ZQ0KPiA+ICsvLyNlbHNlICAgLy8g IF9NU0NfVkVSDQo+ID4gKy8vI2RlZmluZSBEQkdfRU5URVIoKSAgICAgICAgICAgICAgIC8vLzwg IERpc3BsYXkgcm91dGluZSBlbnRyeQ0KPiA+ICsvLyNkZWZpbmUgREJHX0VYSVQoKSAgICAgICAg ICAgICAgICAvLy88ICBEaXNwbGF5IHJvdXRpbmUgZXhpdA0KPiA+ICsvLyNkZWZpbmUgREJHX0VY SVRfREVDKFN0YXR1cykgICAgICAvLy88ICBEaXNwbGF5IHJvdXRpbmUgZXhpdCB3aXRoIGRlY2lt YWwNCj4gdmFsdWUNCj4gPiArLy8jZGVmaW5lIERCR19FWElUX0hFWChTdGF0dXMpICAgICAgLy8v PCAgRGlzcGxheSByb3V0aW5lIGV4aXQgd2l0aCBoZXgNCj4gdmFsdWUNCj4gPiArLy8jZGVmaW5l IERCR19FWElUX1NUQVRVUyhTdGF0dXMpICAgLy8vPCAgRGlzcGxheSByb3V0aW5lIGV4aXQgd2l0 aCBzdGF0dXMNCj4gdmFsdWUNCj4gPiArLy8jZGVmaW5lIERCR19FWElUX1RGKFN0YXR1cykgICAg ICAgLy8vPCAgRGlzcGxheSByb3V0aW5lIHdpdGggVFJVRS9GQUxTRQ0KPiB2YWx1ZQ0KPiA+ICsv LyNlbmRpZiAgLy8gIF9NU0NfVkVSDQo+ID4gKw0KPg0KPiBZdWNrLiBTbyBubyBERUJVRygpIGF0 IGFsbCBvbiBub24tVlM/DQo+DQo+ID4gKyNkZWZpbmUgVVNCX0lTX0lOX0VORFBPSU5UKEVuZFBv aW50QWRkcikgICAgICAoKChFbmRQb2ludEFkZHIpICYgQklUNykNCj4gIT0gMCkgIC8vLzwgIFJl dHVybiBUUlVFL0ZBTFNFIGZvciBJTiBkaXJlY3Rpb24NCj4gPiArI2RlZmluZSBVU0JfSVNfT1VU X0VORFBPSU5UKEVuZFBvaW50QWRkcikgICAgICgoKEVuZFBvaW50QWRkcikgJg0KPiBCSVQ3KSA9 PSAwKSAgLy8vPCAgUmV0dXJuIFRSVUUvRkFMU0UgZm9yIE9VVCBkaXJlY3Rpb24NCj4gPiArI2Rl ZmluZSBVU0JfSVNfQlVMS19FTkRQT0lOVChBdHRyaWJ1dGUpICAgICAgICgoKEF0dHJpYnV0ZSkg JiAoQklUMCB8DQo+IEJJVDEpKSA9PSBVU0JfRU5EUE9JTlRfQlVMSykgICAgICAvLy88ICBSZXR1 cm4gVFJVRS9GQUxTRSBmb3IgQlVMSyB0eXBlDQo+ID4gKyNkZWZpbmUgVVNCX0lTX0lOVEVSUlVQ VF9FTkRQT0lOVChBdHRyaWJ1dGUpICAoKChBdHRyaWJ1dGUpICYgKEJJVDAgfA0KPiBCSVQxKSkg PT0gVVNCX0VORFBPSU5UX0lOVEVSUlVQVCkgLy8vPCAgUmV0dXJuIFRSVUUvRkFMU0UgZm9yDQo+ IElOVEVSUlVQVCB0eXBlDQo+ID4gKw0KPiA+ICsvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiA+ ICsvLyAgQ29uc3RhbnRzDQo+ID4gKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4gKw0KPiA+ ICsjZGVmaW5lIERFQlVHX1JYX0JST0FEQ0FTVCAgMHg0MDAwMDAwMCAgLy8vPCAgRGlzcGxheSBS WCBicm9hZGNhc3QNCj4gbWVzc2FnZXMNCj4gPiArI2RlZmluZSBERUJVR19SWF9NVUxUSUNBU1Qg IDB4MjAwMDAwMDAgIC8vLzwgIERpc3BsYXkgUlggbXVsdGljYXN0DQo+IG1lc3NhZ2VzDQo+ID4g KyNkZWZpbmUgREVCVUdfUlhfVU5JQ0FTVCAgICAweDEwMDAwMDAwICAvLy88ICBEaXNwbGF5IFJY IHVuaWNhc3QNCj4gbWVzc2FnZXMNCj4gPiArI2RlZmluZSBERUJVR19NQUNfQUREUkVTUyAgIDB4 MDgwMDAwMDAgIC8vLzwgIERpc3BsYXkgdGhlIE1BQw0KPiBhZGRyZXNzDQo+ID4gKyNkZWZpbmUg REVCVUdfTElOSyAgICAgICAgICAweDA0MDAwMDAwICAvLy88ICBEaXNwbGF5IHRoZSBsaW5rIHN0 YXR1cw0KPiA+ICsjZGVmaW5lIERFQlVHX1RYICAgICAgICAgICAgMHgwMjAwMDAwMCAgLy8vPCAg RGlzcGxheSB0aGUgVFggbWVzc2FnZXMNCj4gPiArI2RlZmluZSBERUJVR19QSFkgICAgICAgICAg IDB4MDEwMDAwMDAgIC8vLzwgIERpc3BsYXkgdGhlIFBIWSByZWdpc3Rlcg0KPiB2YWx1ZXMNCj4g PiArI2RlZmluZSBERUJVR19TUk9NICAgICAgICAgIDB4MDA4MDAwMDAgIC8vLzwgIERpc3BsYXkg dGhlIFNST00gY29udGVudHMNCj4gPiArI2RlZmluZSBERUJVR19USU1FUiAgICAgICAgIDB4MDA0 MDAwMDAgIC8vLzwgIERpc3BsYXkgdGhlIHRpbWVyIHJvdXRpbmUNCj4gZW50cnkvZXhpdA0KPiA+ ICsjZGVmaW5lIERFQlVHX1RQTCAgICAgICAgICAgMHgwMDIwMDAwMCAgLy8vPCAgRGlzcGxheSB0 aGUgdGltZXIgcm91dGluZQ0KPiBlbnRyeS9leGl0DQo+ID4gKw0KPiA+ICsNCj4gPiArI2RlZmlu ZSBFVEhFUk5FVF9IRUFERVJfU0laRSAgc2l6ZW9mICggRVRIRVJORVRfSEVBREVSICkgIC8vLzwg IFNpemUNCj4gaW4gYnl0ZXMgb2YgdGhlIEV0aGVybmV0IGhlYWRlcg0KPg0KPiBObyBzcGFjZXMg aW5zaWRlICgpDQo+DQo+ID4gKyNkZWZpbmUgTUlOX0VUSEVSTkVUX1BLVF9TSVpFIDYwICAgIC8v LzwgIE1pbmltdW0gcGFja2V0IHNpemUNCj4gaW5jbHVkaW5nIEV0aGVybmV0IGhlYWRlcg0KPiA+ ICsjZGVmaW5lIE1BWF9FVEhFUk5FVF9QS1RfU0laRSAxNTAwDQo+ID4gKw0KPiA+ICsjZGVmaW5l IFVTQl9ORVRXT1JLX0NMQVNTICAgMHgwOSAgICAvLy88ICBVU0IgTmV0d29yayBjbGFzcyBjb2Rl DQo+ID4gKyNkZWZpbmUgVVNCX0JVU19USU1FT1VUICAgICAxMDAwICAgIC8vLzwgIFVTQiB0aW1l b3V0IGluIG1pbGxpc2Vjb25kcw0KPiA+ICsNCj4gPiArLy8jZGVmaW5lIFRJTUVSX01TRUMgICAg ICAgICAgMjAgICAgICAgICAgICAvLy88ICBQb2xsaW5nIGludGVydmFsIGZvciB0aGUgTklDDQo+ ID4gKy8vI2RlZmluZSBUUExfQVg4ODE3OSAgICAgICAgIFRQTF9DQUxMQkFDSyAgICAvLy88ICBU UEwgZm9yIHJvdXRpbmUNCj4gc3luY2hyb25pemF0aW9uDQo+ID4gKw0KPiA+ICsNCj4gPiArI2Rl ZmluZSBBWDg4MTc5X0JVTEtJTl9TSVpFX0lOSyAgICAgMg0KPiA+ICsjZGVmaW5lIEFYODgxNzlf TUFYX0JVTEtJTl9TSVpFICAgIDEwMjQgKg0KPiBBWDg4MTc5X0JVTEtJTl9TSVpFX0lOSw0KPg0K PiB0aGlzIG5lZWRzICgpDQo+DQo+ID4gKyNkZWZpbmUgQVg4ODE3OV9NQVhfUEtUX1NJWkUgIDIw NDgNCj4gPiArDQo+ID4gKyNkZWZpbmUgSENfREVCVUcgIDANCj4gPiArI2RlZmluZSBBRERfTUFD UEFUSE5PRCAgMQ0KPiA+ICsjZGVmaW5lIEJVTEtJTl9USU1FT1VUICAzIC8vNTAwMA0KPiA+ICsj ZGVmaW5lIFRYX1JFVFJZIDANCj4gPiArI2RlZmluZSBBVVRPTkVHX0RFTEFZIDEwMDAwMDANCj4N Cj4gbmV3bGluZSBoZXJlLCBhbmQgcGxlYXNlIGFsaWduIHRoZSBtYWNyb3MgYWJvdmUNCj4NCj4g PiArLyoqDQo+ID4gKyAgVmVyaWZ5IG5ldyBUUEwgdmFsdWUNCj4gPiArDQo+ID4gKyAgVGhpcyBt YWNybyB3aGljaCBpcyBlbmFibGVkIHdoZW4gZGVidWcgaXMgZW5hYmxlZCB2ZXJpZmllcyB0aGF0 DQo+ID4gKyAgdGhlIG5ldyBUUEwgdmFsdWUgaXMgPj0gdGhlIGN1cnJlbnQgVFBMIHZhbHVlLg0K PiA+ICsqKi8NCj4gPiArI2lmZGVmIFZFUklGWV9UUEwNCj4gPiArI3VuZGVmIFZFUklGWV9UUEwN Cj4gPiArI2VuZGlmICAvLyAgVkVSSUZZX1RQTA0KPiA+ICsNCj4gPiArI2lmICFkZWZpbmVkKE1E RVBLR19OREVCVUcpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFZFUklGWV9UUEwodHBsKSAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwNCj4gPiAreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcDQo+ID4gKyAgRUZJX1RQTCBQcmV2aW91c1RwbDsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwNCj4gPiArICBQcmV2aW91c1RwbCA9IGdCUy0+UmFpc2VU UEwgKCBUUExfSElHSF9MRVZFTCApOyBcDQo+ID4gKyAgZ0JTLT5SZXN0b3JlVFBMICggUHJldmlv dXNUcGwgKTsgICAgICAgICAgICAgICAgXA0KPiA+ICsgIGlmICggUHJldmlvdXNUcGwgPiB0cGwg KSB7ICAgICAgICAgICAgICAgICAgICAgIFwNCj4gPiArICAgIERFQlVHICgoIERFQlVHX0VSUk9S LCAiQ3VycmVudCBUUEw6ICVkLCBOZXcgVFBMOiAlZFxyXG4iLA0KPiBQcmV2aW91c1RwbCwgdHBs ICkpOyAgXA0KPiA+ICsgICAgQVNTRVJUICggUHJldmlvdXNUcGwgPD0gdHBsICk7ICAgICAgICAg ICAgICAgIFwNCj4gPiArICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcDQo+ID4gK30NCj4gPiArDQo+ID4gKyNlbHNlICAgLy8gIE1ERVBLR19OREVCVUcN Cj4gPiArDQo+ID4gKyNkZWZpbmUgVkVSSUZZX1RQTCh0cGwpDQo+ID4gKw0KPiA+ICsjZW5kaWYg IC8vICBNREVQS0dfTkRFQlVHDQo+ID4gKw0KPiA+ICsvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K PiA+ICsvLyAgSGFyZHdhcmUgRGVmaW5pdGlvbg0KPiA+ICsvLy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KPiA+ICsNCj4gPiArI2RlZmluZSBERVZfU0lHTkFUVVJFICAgICBTSUdOQVRVUkVfMzIgKCdB JywnWCcsJzgnLCc4JykgIC8vLzwgIFNpZ25hdHVyZQ0KPiBvZiBkYXRhIHN0cnVjdHVyZXMgaW4g bWVtb3J5DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFZFTkRPUl9JRCAgICAgICAgIDB4MEI5NSAgLy8v PCAgVmVuZG9yIElEIGZvciBBc2l4DQo+ID4gKyNkZWZpbmUgUFJPRFVDVF9JRCAgICAgICAgMHgx NzkwICAvLy88ICBQcm9kdWN0IElEIGZvciB0aGUgQVg4ODE3OSBVU0INCj4gMTAvMTAwIEV0aGVy bmV0IGNvbnRyb2xsZXINCj4gPiArI2RlZmluZSBQUk9EVUNUX0lEXzE3OEEgICAweDE3OEENCj4g PiArDQo+ID4gKyNkZWZpbmUgUkVTRVRfTVNFQyAgICAgICAgMTAwMCAgICAvLy88ICBSZXNldCBk dXJhdGlvbg0KPiA+ICsjZGVmaW5lIFBIWV9SRVNFVF9NU0VDICAgICAxMDAgICAgLy8vPCAgUEhZ IHJlc2V0IGR1cmF0aW9uDQo+ID4gKw0KPiA+ICsvLw0KPiA+ICsvLyAgUlggQ29udHJvbCByZWdp c3Rlcg0KPiA+ICsvLw0KPiA+ICsNCj4gPiArDQo+ID4gKw0KPiA+ICsvKkZyZWRkeSovDQo+ID4g KyNkZWZpbmUgUlhDX1JIMU0gICAgICAgICAgMHgwMTAwICAvLy88ICBSeCBoZWFkZXIgMQ0KPiA+ ICsjZGVmaW5lIFJYQ19SSDJNICAgICAgICAgIDB4MDIwMCAgLy8vPCAgUnggaGVhZGVyIDINCj4g PiArI2RlZmluZSBSWENfUkgzTSAgICAgICAgICAweDA0MDAgIC8vLzwgIFJ4IGhlYWRlciAzDQo+ ID4gKy8qRnJlZGR5Ki8NCj4gPiArDQo+DQo+IFdobyBpcyBGcmVkZHk/DQo+DQo+ID4gKy8vDQo+ ID4gKy8vICBNZWRpdW0gU3RhdHVzIHJlZ2lzdGVyDQo+ID4gKy8vDQo+ID4gKw0KPiA+ICsNCj4g PiArDQo+ID4gKy8vDQo+ID4gKy8vICBTb2Z0d2FyZSBQSFkgU2VsZWN0IHJlZ2lzdGVyDQo+ID4g Ky8vDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFNQSFlfUFNFTCAgICAgICAgIDB4MDEgICAgLy8vPCAg U2VsZWN0IGludGVybmFsIFBIWQ0KPiA+ICsjZGVmaW5lIFNQSFlfQVNFTCAgICAgICAgIDB4MDIg ICAgLy8vPCAgMT1BdXRvIHNlbGVjdCwgMD1NYW51YWwgc2VsZWN0DQo+ID4gKw0KPiA+ICsvLw0K PiA+ICsvLyAgU29mdHdhcmUgUmVzZXQgcmVnaXN0ZXINCj4gPiArLy8NCj4gPiArDQo+ID4gKyNk ZWZpbmUgU1JSX1JSICAgICAgICAgICAgMHgwMSAgICAvLy88ICBDbGVhciByZWNlaXZlIGZyYW1l IGxlbmd0aCBlcnJvcg0KPiA+ICsjZGVmaW5lIFNSUl9SVCAgICAgICAgICAgIDB4MDIgICAgLy8v PCAgQ2xlYXIgdHJhbnNtaXQgZnJhbWUgbGVuZ3RoIGVycm9yDQo+ID4gKyNkZWZpbmUgU1JSX1BS VEUgICAgICAgICAgMHgwNCAgICAvLy88ICBFeHRlcm5hbCBQSFkgcmVzZXQgcGluIHRyaS1zdGF0 ZSBlbmFibGUNCj4gPiArI2RlZmluZSBTUlJfUFJMICAgICAgICAgICAweDA4ICAgIC8vLzwgIEV4 dGVybmFsIFBIWSByZXNldCBwaW4gbGV2ZWwNCj4gPiArI2RlZmluZSBTUlJfQlogICAgICAgICAg ICAweDEwICAgIC8vLzwgIEZvcmNlIEJ1bGsgdG8gcmV0dXJuIHplcm8gbGVuZ3RoIHBhY2tldA0K PiA+ICsjZGVmaW5lIFNSUl9JUFJMICAgICAgICAgIDB4MjAgICAgLy8vPCAgSW50ZXJuYWwgUEhZ IHJlc2V0IGNvbnRyb2wNCj4gPiArI2RlZmluZSBTUlJfSVBQRCAgICAgICAgICAweDQwICAgIC8v LzwgIEludGVybmFsIFBIWSBwb3dlciBkb3duDQo+ID4gKw0KPiA+ICsvLw0KPiA+ICsvLyAgUEhZ IElEIHZhbHVlcw0KPiA+ICsvLw0KPiA+ICsNCj4gPiArI2RlZmluZSBQSFlfSURfSU5URVJOQUwg ICAweDAwMDMgIC8vLzwgIEludGVybmFsIFBIWQ0KPiA+ICsNCj4gPiArLy8NCj4gPiArLy8gIFVT QiBDb21tYW5kcw0KPiA+ICsvLw0KPiA+ICsNCj4gPiArI2RlZmluZSBDTURfUEhZX0FDQ0VTU19T T0ZUV0FSRSAgIDB4MDYgIC8vLzwgIFNvZnR3YXJlIGluIGNvbnRyb2wNCj4gb2YgUEhZDQo+ID4g KyNkZWZpbmUgQ01EX1BIWV9SRUdfUkVBRCAgICAgICAgICAweDA3ICAvLy88ICBSZWFkIFBIWSBy ZWdpc3RlciwgVmFsdWU6DQo+IFBIWSwgSW5kZXg6IFJlZ2lzdGVyLCBEYXRhOiBSZWdpc3RlciB2 YWx1ZQ0KPiA+ICsjZGVmaW5lIENNRF9QSFlfUkVHX1dSSVRFICAgICAgICAgMHgwOCAgLy8vPCAg V3JpdGUgUEhZIHJlZ2lzdGVyLCBWYWx1ZToNCj4gUEhZLCBJbmRleDogUmVnaXN0ZXIsIERhdGE6 IE5ldyAxNi1iaXQgdmFsdWUNCj4gPiArI2RlZmluZSBDTURfUEhZX0FDQ0VTU19IQVJEV0FSRSAg IDB4MGEgIC8vLzwgIEhhcmR3YXJlIGluIGNvbnRyb2wNCj4gb2YgUEhZDQo+ID4gKyNkZWZpbmUg Q01EX1NST01fUkVBRCAgICAgICAgICAgICAweDBiICAvLy88ICBSZWFkIFNST00gcmVnaXN0ZXI6 IFZhbHVlOg0KPiBBZGRyZXNzLCBEYXRhOiBWYWx1ZQ0KPiA+ICsjZGVmaW5lIENNRF9SWF9DT05U Uk9MX1dSSVRFICAgICAgMHgxMCAgLy8vPCAgU2V0IHRoZSBSWCBjb250cm9sDQo+IHJlZ2lzdGVy LCBWYWx1ZTogTmV3IHZhbHVlDQo+ID4gKyNkZWZpbmUgQ01EX0dBUFNfV1JJVEUgICAgICAgICAg ICAweDEyICAvLy88ICBXcml0ZSB0aGUgZ2FwcyByZWdpc3RlciwNCj4gVmFsdWU6IE5ldyB2YWx1 ZQ0KPiA+ICsjZGVmaW5lIENNRF9NQUNfQUREUkVTU19SRUFEICAgICAgMHgxMSAgLy8vPCAgUmVh ZCB0aGUgTUFDIGFkZHJlc3MsDQo+IERhdGE6IDYgYnl0ZSBNQUMgYWRkcmVzcw0KPiA+ICsjZGVm aW5lIENNRF9NQUNfQUREUkVTU19XUklURSAgICAgMHgxNCAgLy8vPCAgU2V0IHRoZSBNQUMgYWRk cmVzcywNCj4gRGF0YTogTmV3IDYgYnl0ZSBNQUMgYWRkcmVzcw0KPiA+ICsNCj4gPiArI2RlZmlu ZSBDTURfTUVESVVNX1NUQVRVU19SRUFEICAgIDB4MWEgIC8vLzwgIFJlYWQgbWVkaXVtIHN0YXR1 cw0KPiByZWdpc3RlciwgRGF0YTogUmVnaXN0ZXIgdmFsdWUNCj4gPiArI2RlZmluZSBDTURfTUVE SVVNX1NUQVRVU19XUklURSAgIDB4MWIgIC8vLzwgIFdyaXRlIG1lZGl1bSBzdGF0dXMNCj4gcmVn aXN0ZXIsIFZhbHVlOiBOZXcgdmFsdWUNCj4gPiArI2RlZmluZSBDTURfUkVTRVQgICAgICAgICAg ICAgICAgIDB4MjAgIC8vLzwgIFJlc2V0IHJlZ2lzdGVyLCBWYWx1ZTogTmV3IHZhbHVlDQo+ID4g KyNkZWZpbmUgQ01EX1BIWV9TRUxFQ1QgICAgICAgICAgICAweDIyICAvLy88ICBQSFkgc2VsZWN0 IHJlZ2lzdGVyLCBWYWx1ZToNCj4gTmV3IHZhbHVlDQo+ID4gKw0KPiA+ICsvKkZyZWRkeSovDQo+ ID4gKyNkZWZpbmUgQ01EX1JYUVRDICAgICAgICAgICAgICAgICAweDJhICAvLy88ICBSWCBRdWV1 ZSBDYXNjYWRlIFRocmVzaG9sZA0KPiBDb250cm9sIFJlZ2lzdGVyDQo+ID4gKy8qRnJlZGR5Ki8N Cj4gPiArDQo+ID4gKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4gKy8vICBV U0IgRW5kcG9pbnRzDQo+ID4gKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4g Kw0KPiA+ICsjZGVmaW5lIENPTlRST0xfRU5EUE9JTlQgICAgICAgICAgICAgICAgMCAgICAgICAv Ly88ICBDb250cm9sIGVuZHBvaW50DQo+ID4gKyNkZWZpbmUgSU5URVJSVVBUX0VORFBPSU5UICAg ICAgICAgICAgICAxICAgICAgIC8vLzwgIEludGVycnVwdCBlbmRwb2ludA0KPiA+ICsjZGVmaW5l IEJVTEtfSU5fRU5EUE9JTlQgICAgICAgICAgICAgICAgMiAgICAgICAvLy88ICBSZWNlaXZlIGVu ZHBvaW50DQo+ID4gKyNkZWZpbmUgQlVMS19PVVRfRU5EUE9JTlQgICAgICAgICAgICAgICAzICAg ICAgIC8vLzwgIFRyYW5zbWl0IGVuZHBvaW50DQo+ID4gKw0KPiA+ICsvLy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQ0KPiA+ICsvLyAgUEhZIFJlZ2lzdGVycw0KPiA+ICsvLy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiA+ICsNCj4gPiArDQo+ID4gKw0KPiA+ICsNCj4gPiAr DQo+ID4gKyNkZWZpbmUgUEhZX0FORVIgICAgICAgICAgICAgICAgICAgICAgICA2ICAgICAgIC8v LzwgIEF1dG9uZWdvdGlhdGlvbiBleHBhbnNpb24NCj4gcmVnaXN0ZXINCj4gPiArDQo+ID4gKw0K PiA+ICsNCj4gPiArLy8gIEJTTVIgLSBSZWdpc3RlciAxDQo+ID4gKw0KPiA+ICsNCj4gPiArDQo+ ID4gKy8vICBBTkFSIGFuZCBBTkxQQVIgUmVnaXN0ZXJzIDQsIDUNCj4gPiArDQo+ID4gKyNkZWZp bmUgUlhIRFJfRFJPUCAweDgwMDANCj4gPiArLy8jZGVmaW5lIFJYSERSX01JSUVSUiAweDQwMDAN Cj4gPiArI2RlZmluZSBSWEhEUl9DUkNFUlIgMHgyMDAwDQo+ID4gKw0KPiA+ICsNCj4gPiArLy8t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gPiArLy8gIERhdGEgVHlwZXMNCj4gPiArLy8tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEV0aGVybmV0IGhlYWRlciBs YXlvdXQNCj4gPiArDQo+ID4gKyAgSUVFRSA4MDIuMy0yMDAyIFBhcnQgMyBzcGVjaWZpY2F0aW9u LCBzZWN0aW9uIDMuMS4xLg0KPiA+ICsqKi8NCj4gPiArI3ByYWdtYSBwYWNrKDEpDQo+ID4gK3R5 cGVkZWYgc3RydWN0IHsNCj4gPiArICBVSU5UOCBkZXN0X2FkZHJbUFhFX0hXQUREUl9MRU5fRVRI RVJdOyAgLy8vPCAgRGVzdGluYXRpb24gTEFODQo+IGFkZHJlc3MNCj4gPiArICBVSU5UOCBzcmNf YWRkcltQWEVfSFdBRERSX0xFTl9FVEhFUl07ICAgLy8vPCAgU291cmNlIExBTiBhZGRyZXNzDQo+ ID4gKyAgVUlOVDE2IHR5cGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgIFByb3Rv Y29sIG9yIGxlbmd0aA0KPiA+ICt9IEVUSEVSTkVUX0hFQURFUjsNCj4gPiArI3ByYWdtYSBwYWNr KCkNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFJlY2VpdmUgYW5kIFRyYW5zbWl0IHBhY2tldCBz dHJ1Y3R1cmUNCj4gPiArKiovDQo+ID4gKw0KPiA+ICsNCj4gPiArDQo+ID4gKw0KPiA+ICsjcHJh Z21hIHBhY2soMSkNCj4gPiArdHlwZWRlZiBzdHJ1Y3QgX1RYX1BBQ0tFVCB7DQo+ID4gKy8vICBz dHJ1Y3QgX1RYX1BBQ0tFVCAqIHBOZXh0OyAgICAgICAvLy88ICBOZXh0IHJlY2VpdmUgcGFja2V0 DQo+ID4gKyAgVUlOVDMyICBUeEhkcjE7DQo+ID4gKyAgVUlOVDMyICBUeEhkcjI7DQo+ID4gKyAg VUlOVDggRGF0YVsgQVg4ODE3OV9NQVhfUEtUX1NJWkUgXTsgLy8vPCAgUmVjZWl2ZWQgcGFja2V0 IGRhdGENCj4gPiArfSBUWF9QQUNLRVQ7DQo+ID4gKyNwcmFnbWEgcGFjaygpDQo+ID4gKw0KPiA+ ICsjcHJhZ21hIHBhY2soMSkNCj4gPiArdHlwZWRlZiBzdHJ1Y3QgX1JYX1BBQ0tFVCB7DQo+ID4g KyAgc3RydWN0IF9SWF9QQUNLRVQgKiBwTmV4dDsNCj4gPiArICBVSU5UMTYgIExlbmd0aDsNCj4g PiArICBVSU5UMTYgIEVFRUU7DQo+ID4gKyAgVUlOVDggRGF0YVsgQVg4ODE3OV9NQVhfUEtUX1NJ WkUgXTsNCj4gPiArfSBSWF9QQUNLRVQ7DQo+ID4gKyNwcmFnbWEgcGFjaygpDQo+ID4gKw0KPiA+ ICsNCj4gPiArDQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBBWDg4MTc5IGNvbnRyb2wgc3RydWN0 dXJlDQo+ID4gKw0KPiA+ICsgIFRoZSBkcml2ZXIgdXNlcyB0aGlzIHN0cnVjdHVyZSB0byBtYW5h Z2UgdGhlIEFzaXggQVg4ODE3OSAxMC8xMDANCj4gPiArICBFdGhlcm5ldCBjb250cm9sbGVyLg0K PiA+ICsqKi8NCj4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ICsgIFVJTlROIFNpZ25hdHVyZTsg ICAgICAgICAgLy8vPCAgU3RydWN0dXJlIGlkZW50aWZpY2F0aW9uDQo+ID4gKw0KPiA+ICsgIC8v DQo+ID4gKyAgLy8gIFVTQiBkYXRhDQo+ID4gKyAgLy8NCj4gPiArICBFRklfSEFORExFIENvbnRy b2xsZXI7ICAgICAgICAvLy88ICBDb250cm9sbGVyIGhhbmRsZQ0KPiA+ICsgIEVGSV9VU0JfSU9f UFJPVE9DT0wgKiBwVXNiSW87IC8vLzwgIFVTQiBkcml2ZXIgaW50ZXJmYWNlDQo+ID4gKw0KPg0K PiBObyAncCcgcHJlZml4ZXMgZm9yIHBvaW50ZXJzLg0KPg0KPiA+ICsgIC8vDQo+ID4gKyAgLy8g IFNpbXBsZSBuZXR3b3JrIHByb3RvY29sIGRhdGENCj4gPiArICAvLw0KPiA+ICsgIEVGSV9TSU1Q TEVfTkVUV09SS19QUk9UT0NPTCBTaW1wbGVOZXR3b3JrOyAgLy8vPCAgRHJpdmVyJ3MNCj4gbmV0 d29yayBzdGFjayBpbnRlcmZhY2UNCj4gPiArICBFRklfU0lNUExFX05FVFdPUktfTU9ERSBTaW1w bGVOZXR3b3JrRGF0YTsgIC8vLzwgIERhdGEgZm9yDQo+IHNpbXBsZSBuZXR3b3JrDQo+ID4gKw0K PiA+ICsgIC8vDQo+ID4gKyAgLy8gRXRoZXJuZXQgY29udHJvbGxlciBkYXRhDQo+ID4gKyAgLy8N Cj4gPiArICBCT09MRUFOIGJJbml0aWFsaXplZDsgICAgIC8vLzwgIENvbnRyb2xsZXIgaW5pdGlh bGl6ZWQNCj4NCj4gTm8gJ2InIHByZWZpeGVzIGZvciBib29sZWFucw0KPg0KPiA+ICsgIFVJTlQx NiBQaHlJZDsgICAgICAgICAgICAgLy8vPCAgUEhZIElEDQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4g KyAgLy8gIExpbmsgc3RhdGUNCj4gPiArICAvLw0KPiA+ICsgIEJPT0xFQU4gYjEwME1icHM7ICAg ICAgICAgLy8vPCAgQ3VycmVudCBsaW5rIHNwZWVkLCBGQUxTRSA9IDEwIE1icHMNCj4gPiArICBC T09MRUFOIGIxMDAwTWJwczsgICAgICAgIC8vLzwgIEN1cnJlbnQgbGluayBzcGVlZCwgRkFMU0Ug PSAxMDAvMTAgYnBzDQo+ID4gKyAgQk9PTEVBTiBiQ29tcGxldGU7ICAgICAgICAvLy88ICBDdXJy ZW50IHN0YXRlIG9mIGF1dG8tbmVnb3RpYXRpb24NCj4gPiArICBCT09MRUFOIGJGdWxsRHVwbGV4 OyAgICAgIC8vLzwgIEN1cnJlbnQgZHVwbGV4DQo+ID4gKyAgQk9PTEVBTiBiTGlua1VwOyAgICAg ICAgICAvLy88ICBDdXJyZW50IGxpbmsgc3RhdGUNCj4gPiArICBCT09MRUFOIGJMaW5rSWRsZTsg ICAgICAgIC8vLzwgIFRSVUUgPSBObyByZWNlaXZlZCB0cmFmZmljDQo+ID4gKyAgRUZJX0VWRU5U IFRpbWVyOyAgICAgICAgICAvLy88ICBUaW1lciB0byBtb25pdG9yIGxpbmsgc3RhdGUgYW5kIHJl Y2VpdmUNCj4gcGFja2V0cw0KPiA+ICsgIFVJTlROIFBvbGxDb3VudDsgICAgICAgICAgLy8vPCAg TnVtYmVyIG9mIHRpbWVzIHRoZSBhdXRvbmVnb3RpYXRpb24gc3RhdHVzDQo+IHdhcyBwb2xsZWQN Cj4gPiArICBVSU5UTiBTa2lwUlhDbnQ7DQo+ID4gKw0KPiA+ICsgIFVJTlQ4ICAgICAqcEJ1bGtJ bmJ1ZjsNCj4gPiArICBVSU5UMTYgICAgUGt0Q250Ow0KPiA+ICsgIFVJTlQ4ICAgICogcEN1clBr dEhkck9mZjsNCj4gPiArICBVSU5UOCAgICAgKnBDdXJQa3RPZmY7DQo+ID4gKw0KPiA+ICsgIFRY X1BBQ0tFVCAqIHBUeFRlc3Q7DQo+ID4gKw0KPiA+ICsgIElOVDggTXVsdGljYXN0SGFzaFs4XTsN Cj4gPiArICBFRklfTUFDX0FERFJFU1MgTUFDOw0KPiA+ICsNCj4gPiArICBVSU5UMTYgQ3VyTWVk aXVtU3RhdHVzOw0KPiA+ICsgIFVJTlQxNiBDdXJSeENvbnRyb2w7DQo+ID4gKyAgVk9JRCAqIHBU eEJ1ZmZlcjsNCj4gPiArDQo+ID4gKyAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAgICAg ICAgICAgICAgKk15RGV2UGF0aDsNCj4gPiArICBCT09MRUFOICAgR3J1Yl9mOw0KPg0KPiB3dGY/ DQo+DQo+ID4gKyAgQk9PTEVBTiAgIGJGaXJzdFJzdDsNCj4gPiArICBCT09MRUFOICAgYlNldFpl cm9MZW47DQo+ID4gKyAgVUlOVDggcnhidXJzdDsNCj4NCj4gQ2FtZWxDYXNlIGZvciB2YXJpYWJs ZSBuYW1lcw0KPg0KPiA+ICsgIFVJTlROIHVzYk1heFBrdFNpemU7DQo+ID4gKw0KPiA+ICt9IE5J Q19ERVZJQ0U7DQo+ID4gKw0KPiA+ICsjZGVmaW5lIERFVl9GUk9NX1NJTVBMRV9ORVRXT1JLKGEp ICBDUiAoYSwgTklDX0RFVklDRSwNCj4gU2ltcGxlTmV0d29yaywgREVWX1NJR05BVFVSRSkgIC8v LzwgTG9jYXRlIE5JQ19ERVZJQ0UgZnJvbSBTaW1wbGUNCj4gTmV0d29yayBQcm90b2NvbA0KPiA+ ICsNCj4gPiArLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gPiArLy8gU2ltcGxlIE5ldHdvcmsg UHJvdG9jb2wNCj4gPiArLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gPiArDQo+ID4gKy8qKg0K PiA+ICsgIFJlc2V0IHRoZSBuZXR3b3JrIGFkYXB0ZXIuDQo+ID4gKw0KPiA+ICsgIFJlc2V0cyBh IG5ldHdvcmsgYWRhcHRlciBhbmQgcmVpbml0aWFsaXplcyBpdCB3aXRoIHRoZSBwYXJhbWV0ZXJz IHRoYXQNCj4gPiArICB3ZXJlIHByb3ZpZGVkIGluIHRoZSBwcmV2aW91cyBjYWxsIHRvIEluaXRp YWxpemUgKCkuICBUaGUgdHJhbnNtaXQgYW5kDQo+ID4gKyAgcmVjZWl2ZSBxdWV1ZXMgYXJlIGNs ZWFyZWQuICBSZWNlaXZlIGZpbHRlcnMsIHRoZSBzdGF0aW9uIGFkZHJlc3MsIHRoZQ0KPiA+ICsg IHN0YXRpc3RpY3MsIGFuZCB0aGUgbXVsdGljYXN0LUlQLXRvLUhXIE1BQyBhZGRyZXNzZXMgYXJl IG5vdCByZXNldCBieQ0KPiA+ICsgIHRoaXMgY2FsbC4NCj4gPiArDQo+ID4gKyAgVGhpcyByb3V0 aW5lIGNhbGxzIDo6QXg4ODE3OVJlc2V0IHRvIHBlcmZvcm0gdGhlIGFkYXB0ZXIgc3BlY2lmaWMN Cj4gPiArICByZXNldCBvcGVyYXRpb24uICBUaGlzIHJvdXRpbmUgYWxzbyBzdGFydHMgdGhlIGxp bmsgbmVnb3RpYXRpb24NCj4gPiArICBieSBjYWxsaW5nIDo6QXg4ODE3OU5lZ290aWF0ZUxpbmtT dGFydC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtIFtpbl0gcFNpbXBsZU5ldHdvcmsgICAgUHJvdG9j b2wgaW5zdGFuY2UgcG9pbnRlcg0KPiA+ICsgIEBwYXJhbSBbaW5dIGJFeHRlbmRlZFZlcmlmaWNh dGlvbiAgSW5kaWNhdGVzIHRoYXQgdGhlIGRyaXZlciBtYXkNCj4gcGVyZm9ybSBhIG1vcmUNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGhhdXN0aXZlIHZlcmlmaWNhdGlv biBvcGVyYXRpb24gb2YgdGhlIGRldmljZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGR1cmluZyByZXNldC4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICAgICAgVGhpcyBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwuDQo+ID4gKyAgQHJldHZhbCBF RklfTk9UX1NUQVJURUQgICAgICAgVGhlIG5ldHdvcmsgaW50ZXJmYWNlIHdhcyBub3Qgc3RhcnRl ZC4NCj4gPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBwU2ltcGxlTmV0d29yayBw YXJhbWV0ZXIgd2FzDQo+IE5VTEwgb3IgZGlkIG5vdCBwb2ludCB0byBhIHZhbGlkDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX1NJTVBMRV9ORVRXT1JLX1BST1RPQ09M IHN0cnVjdHVyZS4NCj4gPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgY29t bWFuZCBjb3VsZCBub3QgYmUgc2VudCB0byB0aGUNCj4gbmV0d29yayBpbnRlcmZhY2UuDQo+ID4g KyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgVGhlIGluY3JlYXNlZCBidWZmZXIgc2l6 ZSBmZWF0dXJlIGlzIG5vdA0KPiBzdXBwb3J0ZWQuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJ X1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArU05fUmVzZXQgKA0KPiA+ICsgIElOIEVGSV9TSU1Q TEVfTkVUV09SS19QUk9UT0NPTCAqIHBTaW1wbGVOZXR3b3JrLA0KPiA+ICsgIElOIEJPT0xFQU4g YkV4dGVuZGVkVmVyaWZpY2F0aW9uDQo+DQo+IEtlZXAgdGhlICogd2l0aCB0aGUgdmFyaWFibGUg bmFtZSwgYW5kIGFsaWduIHZlcnRpY2FsbHkNCj4NCj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoq DQo+ID4gKyAgSW5pdGlhbGl6ZSB0aGUgc2ltcGxlIG5ldHdvcmsgcHJvdG9jb2wuDQo+ID4gKw0K PiA+ICsgIFRoaXMgcm91dGluZSBjYWxscyA6OkF4ODgxNzlNYWNBZGRyZXNzR2V0IHRvIG9idGFp biB0aGUNCj4gPiArICBNQUMgYWRkcmVzcy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtIFtpbl0gcE5p Y0RldmljZSAgICAgICBOSUNfREVWSUNFX0lOU1RBTkNFIHBvaW50ZXINCj4gPiArDQo+ID4gKyAg QHJldHZhbCBFRklfU1VDQ0VTUyAgICAgU2V0dXAgd2FzIHN1Y2Nlc3NmdWwNCj4gPiArDQo+ID4g KyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK1NOX1NldHVwICgNCj4gPiArICBJTiBOSUNfREVW SUNFICogcE5pY0RldmljZQ0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGlz IHJvdXRpbmUgc3RhcnRzIHRoZSBuZXR3b3JrIGludGVyZmFjZS4NCj4gPiArDQo+ID4gKyAgQHBh cmFtIFtpbl0gcFNpbXBsZU5ldHdvcmsgICAgUHJvdG9jb2wgaW5zdGFuY2UgcG9pbnRlcg0KPiA+ ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGlzIG9wZXJhdGlvbiB3 YXMgc3VjY2Vzc2Z1bC4NCj4gPiArICBAcmV0dmFsIEVGSV9BTFJFQURZX1NUQVJURUQgICBUaGUg bmV0d29yayBpbnRlcmZhY2Ugd2FzIGFscmVhZHkNCj4gc3RhcnRlZC4NCj4gPiArICBAcmV0dmFs IEVGSV9JTlZBTElEX1BBUkFNRVRFUiBwU2ltcGxlTmV0d29yayBwYXJhbWV0ZXIgd2FzDQo+IE5V TEwgb3IgZGlkIG5vdCBwb2ludCB0byBhIHZhbGlkDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRUZJX1NJTVBMRV9ORVRXT1JLX1BST1RPQ09MIHN0cnVjdHVyZS4NCj4gPiAr ICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgY29tbWFuZCBjb3VsZCBub3QgYmUg c2VudCB0byB0aGUNCj4gbmV0d29yayBpbnRlcmZhY2UuDQo+ID4gKyAgQHJldHZhbCBFRklfVU5T VVBQT1JURUQgICAgICAgVGhlIGluY3JlYXNlZCBidWZmZXIgc2l6ZSBmZWF0dXJlIGlzIG5vdA0K PiBzdXBwb3J0ZWQuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtFRklB UEkNCj4gPiArU05fU3RhcnQgKA0KPiA+ICsgIElOIEVGSV9TSU1QTEVfTkVUV09SS19QUk9UT0NP TCAqIHBTaW1wbGVOZXR3b3JrDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFNl dCB0aGUgTUFDIGFkZHJlc3MuDQo+ID4gKw0KPiA+ICsgIFRoaXMgZnVuY3Rpb24gbW9kaWZpZXMg b3IgcmVzZXRzIHRoZSBjdXJyZW50IHN0YXRpb24gYWRkcmVzcyBvZiBhDQo+ID4gKyAgbmV0d29y ayBpbnRlcmZhY2UuICBJZiBSZXNldCBpcyBUUlVFLCB0aGVuIHRoZSBjdXJyZW50IHN0YXRpb24g YWRkcmVzcw0KPiA+ICsgIGlzIHNldCBvdCB0aGUgbmV0d29yayBpbnRlcmZhY2UncyBwZXJtYW5l bnQgYWRkcmVzcy4gIElmIFJlc2V0IGlmIEZBTFNFDQo+ID4gKyAgdGhlbiB0aGUgY3VycmVudCBz dGF0aW9uIGFkZHJlc3MgaXMgY2hhbmdlZCB0byB0aGUgYWRkcmVzcyBzcGVjaWZpZWQgYnkNCj4g PiArICBwTmV3Lg0KPiA+ICsNCj4gPiArICBUaGlzIHJvdXRpbmUgY2FsbHMgOjpBeDg4MTc5TWFj QWRkcmVzc1NldCB0byB1cGRhdGUgdGhlIE1BQyBhZGRyZXNzDQo+ID4gKyAgaW4gdGhlIG5ldHdv cmsgYWRhcHRlci4NCj4gPiArDQo+ID4gKyAgQHBhcmFtIFtpbl0gcFNpbXBsZU5ldHdvcmsgICAg UHJvdG9jb2wgaW5zdGFuY2UgcG9pbnRlcg0KPiA+ICsgIEBwYXJhbSBbaW5dIGJSZXNldCAgICAg ICAgICAgIEZsYWcgdXNlZCB0byByZXNldCB0aGUgc3RhdGlvbiBhZGRyZXNzIHRvIHRoZQ0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHdvcmsgaW50ZXJmYWNlJ3MgcGVy bWFuZW50IGFkZHJlc3MuDQo+ID4gKyAgQHBhcmFtIFtpbl0gcE5ldyAgICAgICAgICAgICAgTmV3 IHN0YXRpb24gYWRkcmVzcyB0byBiZSB1c2VkIGZvciB0aGUNCj4gbmV0d29yaw0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZS4NCj4gPiArDQo+ID4gKyAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhpcyBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwu DQo+ID4gKyAgQHJldHZhbCBFRklfTk9UX1NUQVJURUQgICAgICAgVGhlIG5ldHdvcmsgaW50ZXJm YWNlIHdhcyBub3Qgc3RhcnRlZC4NCj4gPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRF UiBwU2ltcGxlTmV0d29yayBwYXJhbWV0ZXIgd2FzDQo+IE5VTEwgb3IgZGlkIG5vdCBwb2ludCB0 byBhIHZhbGlkDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX1NJTVBM RV9ORVRXT1JLX1BST1RPQ09MIHN0cnVjdHVyZS4NCj4gPiArICBAcmV0dmFsIEVGSV9ERVZJQ0Vf RVJST1IgICAgICBUaGUgY29tbWFuZCBjb3VsZCBub3QgYmUgc2VudCB0byB0aGUNCj4gbmV0d29y ayBpbnRlcmZhY2UuDQo+ID4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgVGhlIGlu Y3JlYXNlZCBidWZmZXIgc2l6ZSBmZWF0dXJlIGlzIG5vdA0KPiBzdXBwb3J0ZWQuDQo+ID4gKw0K PiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArU05fU3RhdGlvbkFk ZHJlc3MgKA0KPiA+ICsgIElOIEVGSV9TSU1QTEVfTkVUV09SS19QUk9UT0NPTCAqIHBTaW1wbGVO ZXR3b3JrLA0KPiA+ICsgIElOIEJPT0xFQU4gYlJlc2V0LA0KPiA+ICsgIElOIEVGSV9NQUNfQURE UkVTUyAqIHBOZXcNCj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhpcyBmdW5j dGlvbiByZXNldHMgb3IgY29sbGVjdHMgdGhlIHN0YXRpc3RpY3Mgb24gYSBuZXR3b3JrIGludGVy ZmFjZS4NCj4gPiArICBJZiB0aGUgc2l6ZSBvZiB0aGUgc3RhdGlzdGljcyB0YWJsZSBzcGVjaWZp ZWQgYnkgU3RhdGlzdGljc1NpemUgaXMgbm90DQo+ID4gKyAgYmlnIGVub3VnaCBmb3IgYWxsIG9m IHRoZSBzdGF0aXN0aWNzIHRoYXQgYXJlIGNvbGxlY3RlZCBieSB0aGUgbmV0d29yaw0KPiA+ICsg IGludGVyZmFjZSwgdGhlbiBhIHBhcnRpYWwgYnVmZmVyIG9mIHN0YXRpc3RpY3MgaXMgcmV0dXJu ZWQgaW4NCj4gPiArICBTdGF0aXN0aWNzVGFibGUuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbSBbaW5d IHBTaW1wbGVOZXR3b3JrICAgIFByb3RvY29sIGluc3RhbmNlIHBvaW50ZXINCj4gPiArICBAcGFy YW0gW2luXSBiUmVzZXQgICAgICAgICAgICBTZXQgdG8gVFJVRSB0byByZXNldCB0aGUgc3RhdGlz dGljcyBmb3IgdGhlDQo+IG5ldHdvcmsgaW50ZXJmYWNlLg0KPiA+ICsgIEBwYXJhbSBbaW4sIG91 dF0gcFN0YXRpc3RpY3NTaXplICBPbiBpbnB1dCB0aGUgc2l6ZSwgaW4gYnl0ZXMsIG9mDQo+IFN0 YXRpc3RpY3NUYWJsZS4gIE9uIG91dHB1dA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRoZSBzaXplLCBpbiBieXRlcywgb2YgdGhlIHJlc3VsdGluZyB0YWJsZSBvZiBzdGF0 aXN0aWNzLg0KPiA+ICsgIEBwYXJhbSBbb3V0XSBwU3RhdGlzdGljc1RhYmxlIEEgcG9pbnRlciB0 byB0aGUNCj4gRUZJX05FVFdPUktfU1RBVElTVElDUyBzdHJ1Y3R1cmUgdGhhdA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmFpbnMgdGhlIHN0YXRpc3RpY3MuDQo+ID4g Kw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoaXMgb3BlcmF0aW9uIHdh cyBzdWNjZXNzZnVsLg0KPiA+ICsgIEByZXR2YWwgRUZJX05PVF9TVEFSVEVEICAgICAgIFRoZSBu ZXR3b3JrIGludGVyZmFjZSB3YXMgbm90IHN0YXJ0ZWQuDQo+ID4gKyAgQHJldHZhbCBFRklfQlVG RkVSX1RPT19TTUFMTCAgVGhlIHBTdGF0aXN0aWNzVGFibGUgaXMgTlVMTCBvciB0aGUNCj4gYnVm ZmVyIGlzIHRvbyBzbWFsbC4NCj4gPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBw U2ltcGxlTmV0d29yayBwYXJhbWV0ZXIgd2FzDQo+IE5VTEwgb3IgZGlkIG5vdCBwb2ludCB0byBh IHZhbGlkDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX1NJTVBMRV9O RVRXT1JLX1BST1RPQ09MIHN0cnVjdHVyZS4NCj4gPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJS T1IgICAgICBUaGUgY29tbWFuZCBjb3VsZCBub3QgYmUgc2VudCB0byB0aGUNCj4gbmV0d29yayBp bnRlcmZhY2UuDQo+ID4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgVGhlIGluY3Jl YXNlZCBidWZmZXIgc2l6ZSBmZWF0dXJlIGlzIG5vdA0KPiBzdXBwb3J0ZWQuDQo+ID4gKw0KPiA+ ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArU05fU3RhdGlzdGljcyAo DQo+ID4gKyAgSU4gRUZJX1NJTVBMRV9ORVRXT1JLX1BST1RPQ09MICogcFNpbXBsZU5ldHdvcmss DQo+ID4gKyAgSU4gQk9PTEVBTiBiUmVzZXQsDQo+ID4gKyAgSU4gT1VUIFVJTlROICogcFN0YXRp c3RpY3NTaXplLA0KPiA+ICsgIE9VVCBFRklfTkVUV09SS19TVEFUSVNUSUNTICogcFN0YXRpc3Rp Y3NUYWJsZQ0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGlzIGZ1bmN0aW9u IHN0b3BzIGEgbmV0d29yayBpbnRlcmZhY2UuICBUaGlzIGNhbGwgaXMgb25seSB2YWxpZA0KPiA+ ICsgIGlmIHRoZSBuZXR3b3JrIGludGVyZmFjZSBpcyBpbiB0aGUgc3RhcnRlZCBzdGF0ZS4NCj4g PiArDQo+ID4gKyAgQHBhcmFtIFtpbl0gcFNpbXBsZU5ldHdvcmsgICAgUHJvdG9jb2wgaW5zdGFu Y2UgcG9pbnRlcg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBU aGlzIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bC4NCj4gPiArICBAcmV0dmFsIEVGSV9OT1RfU1RB UlRFRCAgICAgICBUaGUgbmV0d29yayBpbnRlcmZhY2Ugd2FzIG5vdCBzdGFydGVkLg0KPiA+ICsg IEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIHBTaW1wbGVOZXR3b3JrIHBhcmFtZXRlciB3 YXMNCj4gTlVMTCBvciBkaWQgbm90IHBvaW50IHRvIGEgdmFsaWQNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBFRklfU0lNUExFX05FVFdPUktfUFJPVE9DT0wgc3RydWN0dXJl Lg0KPiA+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSBjb21tYW5kIGNvdWxk IG5vdCBiZSBzZW50IHRvIHRoZQ0KPiBuZXR3b3JrIGludGVyZmFjZS4NCj4gPiArICBAcmV0dmFs IEVGSV9VTlNVUFBPUlRFRCAgICAgICBUaGUgaW5jcmVhc2VkIGJ1ZmZlciBzaXplIGZlYXR1cmUg aXMgbm90DQo+IHN1cHBvcnRlZC4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ ID4gK0VGSUFQSQ0KPiA+ICtTTl9TdG9wICgNCj4gPiArICBJTiBFRklfU0lNUExFX05FVFdPUktf UFJPVE9DT0wgKiBwU2ltcGxlTmV0d29yaw0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4g PiArICBUaGlzIGZ1bmN0aW9uIHJlbGVhc2VzIHRoZSBtZW1vcnkgYnVmZmVycyBhc3NpZ25lZCBp biB0aGUgSW5pdGlhbGl6ZSgpIGNhbGwuDQo+ID4gKyAgUGVuZGluZyB0cmFuc21pdHMgYW5kIHJl Y2VpdmVzIGFyZSBsb3N0LCBhbmQgaW50ZXJydXB0cyBhcmUgY2xlYXJlZCBhbmQNCj4gZGlzYWJs ZWQuDQo+ID4gKyAgQWZ0ZXIgdGhpcyBjYWxsLCBvbmx5IEluaXRpYWxpemUoKSBhbmQgU3RvcCgp IGNhbGxzIG1heSBiZSB1c2VkLg0KPiA+ICsNCj4gPiArICBAcGFyYW0gW2luXSBwU2ltcGxlTmV0 d29yayAgICBQcm90b2NvbCBpbnN0YW5jZSBwb2ludGVyDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgICAgIFRoaXMgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsLg0KPiA+ ICsgIEByZXR2YWwgRUZJX05PVF9TVEFSVEVEICAgICAgIFRoZSBuZXR3b3JrIGludGVyZmFjZSB3 YXMgbm90IHN0YXJ0ZWQuDQo+ID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgcFNp bXBsZU5ldHdvcmsgcGFyYW1ldGVyIHdhcw0KPiBOVUxMIG9yIGRpZCBub3QgcG9pbnQgdG8gYSB2 YWxpZA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9TSU1QTEVfTkVU V09SS19QUk9UT0NPTCBzdHJ1Y3R1cmUuDQo+ID4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9S ICAgICAgVGhlIGNvbW1hbmQgY291bGQgbm90IGJlIHNlbnQgdG8gdGhlDQo+IG5ldHdvcmsgaW50 ZXJmYWNlLg0KPiA+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIFRoZSBpbmNyZWFz ZWQgYnVmZmVyIHNpemUgZmVhdHVyZSBpcyBub3QNCj4gc3VwcG9ydGVkLg0KPiA+ICsNCj4gPiAr KiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ID4gK1NOX1NodXRkb3duICgNCj4g PiArICBJTiBFRklfU0lNUExFX05FVFdPUktfUFJPVE9DT0wgKiBwU2ltcGxlTmV0d29yaw0KPiA+ ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBTZW5kIGEgcGFja2V0IG92ZXIgdGhlIG5l dHdvcmsuDQo+ID4gKw0KPiA+ICsgIFRoaXMgZnVuY3Rpb24gcGxhY2VzIHRoZSBwYWNrZXQgc3Bl Y2lmaWVkIGJ5IEhlYWRlciBhbmQgQnVmZmVyIG9uDQo+ID4gKyAgdGhlIHRyYW5zbWl0IHF1ZXVl LiAgVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBhIG5vbi1ibG9ja2luZyB0cmFuc21pdA0KPiA+ICsg IG9wZXJhdGlvbi4gIFdoZW4gdGhlIHRyYW5zbWl0IGlzIGNvbXBsZXRlLCB0aGUgYnVmZmVyIGlz IHJldHVybmVkDQo+ID4gKyAgdmlhIHRoZSBHZXRTdGF0dXMoKSBjYWxsLg0KPiA+ICsNCj4gPiAr ICBUaGlzIHJvdXRpbmUgY2FsbHMgOjpBeDg4MTc5UnggdG8gZW1wdHkgdGhlIG5ldHdvcmsgYWRh cHRlciBvZg0KPiA+ICsgIHJlY2VpdmUgcGFja2V0cy4gIFRoZSByb3V0aW5lIHRoZW4gcGFzc2Vz IHRoZSB0cmFuc21pdCBwYWNrZXQNCj4gPiArICB0byB0aGUgbmV0d29yayBhZGFwdGVyLg0KPiA+ ICsNCj4gPiArICBAcGFyYW0gW2luXSBwU2ltcGxlTmV0d29yayAgICBQcm90b2NvbCBpbnN0YW5j ZSBwb2ludGVyDQo+ID4gKyAgQHBhcmFtIFtpbl0gSGVhZGVyU2l6ZSAgICAgICAgVGhlIHNpemUs IGluIGJ5dGVzLCBvZiB0aGUgbWVkaWEgaGVhZGVyIHRvIGJlDQo+IGZpbGxlZCBpbiBieQ0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBUcmFuc21pdCgpIGZ1bmN0aW9u LiAgSWYgSGVhZGVyU2l6ZSBpcyBub24temVybywgdGhlbg0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGl0IG11c3QgYmUgZXF1YWwgdG8gU2ltcGxlTmV0d29yay0+TW9kZS0N Cj4gPk1lZGlhSGVhZGVyU2l6ZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGFuZCBEZXN0QWRkciBhbmQgUHJvdG9jb2wgcGFyYW1ldGVycyBtdXN0IG5vdCBiZQ0KPiBOVUxM Lg0KPiA+ICsgIEBwYXJhbSBbaW5dIEJ1ZmZlclNpemUgICAgICAgIFRoZSBzaXplLCBpbiBieXRl cywgb2YgdGhlIGVudGlyZSBwYWNrZXQgKG1lZGlhDQo+IGhlYWRlciBhbmQNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhKSB0byBiZSB0cmFuc21pdHRlZCB0aHJvdWdo IHRoZSBuZXR3b3JrIGludGVyZmFjZS4NCj4gPiArICBAcGFyYW0gW2luXSBwQnVmZmVyICAgICAg ICAgICBBIHBvaW50ZXIgdG8gdGhlIHBhY2tldCAobWVkaWEgaGVhZGVyDQo+IGZvbGxvd2VkIGJ5 IGRhdGEpIHRvDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYmUgdHJh bnNtaXR0ZWQuICBUaGlzIHBhcmFtZXRlciBjYW4gbm90IGJlIE5VTEwuICBJZg0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhlYWRlclNpemUgaXMgemVybywgdGhlbiB0aGUg bWVkaWEgaGVhZGVyIGlzIEJ1ZmZlciBtdXN0DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYWxyZWFkeSBiZSBmaWxsZWQgaW4gYnkgdGhlIGNhbGxlci4gIElmIEhlYWRlclNp emUgaXMNCj4gbm9uemVybywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 aGVuIHRoZSBtZWRpYSBoZWFkZXIgd2lsbCBiZSBmaWxsZWQgaW4gYnkgdGhlIFRyYW5zbWl0KCkN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbi4NCj4gPiArICBA cGFyYW0gW2luXSBwU3JjQWRkciAgICAgICAgICBUaGUgc291cmNlIEhXIE1BQyBhZGRyZXNzLiAg SWYgSGVhZGVyU2l6ZQ0KPiBpcyB6ZXJvLCB0aGVuDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZC4gIElmIEhlYWRlclNpemUgaXMg bm9uemVybyBhbmQNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTcmNBZGRy IGlzIE5VTEwsIHRoZW4gU2ltcGxlTmV0d29yay0+TW9kZS0NCj4gPkN1cnJlbnRBZGRyZXNzDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgdXNlZCBmb3IgdGhlIHNvdXJj ZSBIVyBNQUMgYWRkcmVzcy4NCj4gPiArICBAcGFyYW0gW2luXSBwRGVzdEFkZHIgICAgICAgICBU aGUgZGVzdGluYXRpb24gSFcgTUFDIGFkZHJlc3MuICBJZg0KPiBIZWFkZXJTaXplIGlzIHplcm8s IHRoZW4NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHBhcmFtZXRl ciBpcyBpZ25vcmVkLg0KPiA+ICsgIEBwYXJhbSBbaW5dIHBQcm90b2NvbCAgICAgICAgIFRoZSB0 eXBlIG9mIGhlYWRlciB0byBidWlsZC4gIElmIEhlYWRlclNpemUgaXMNCj4gemVybywgdGhlbg0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgcGFyYW1ldGVyIGlzIGln bm9yZWQuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoaXMg b3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsLg0KPiA+ICsgIEByZXR2YWwgRUZJX05PVF9TVEFSVEVE ICAgICAgIFRoZSBuZXR3b3JrIGludGVyZmFjZSB3YXMgbm90IHN0YXJ0ZWQuDQo+ID4gKyAgQHJl dHZhbCBFRklfTk9UX1JFQURZICAgICAgICAgVGhlIG5ldHdvcmsgaW50ZXJmYWNlIGlzIHRvbyBi dXN5IHRvDQo+IGFjY2VwdCB0aGlzIHRyYW5zbWl0IHJlcXVlc3QuDQo+ID4gKyAgQHJldHZhbCBF RklfQlVGRkVSX1RPT19TTUFMTCAgVGhlIEJ1ZmZlclNpemUgcGFyYW1ldGVyIGlzIHRvbw0KPiBz bWFsbC4NCj4gPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBwU2ltcGxlTmV0d29y ayBwYXJhbWV0ZXIgd2FzDQo+IE5VTEwgb3IgZGlkIG5vdCBwb2ludCB0byBhIHZhbGlkDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX1NJTVBMRV9ORVRXT1JLX1BST1RP Q09MIHN0cnVjdHVyZS4NCj4gPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUg Y29tbWFuZCBjb3VsZCBub3QgYmUgc2VudCB0byB0aGUNCj4gbmV0d29yayBpbnRlcmZhY2UuDQo+ ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArU05fVHJh bnNtaXQgKA0KPiA+ICsgIElOIEVGSV9TSU1QTEVfTkVUV09SS19QUk9UT0NPTCAqIHBTaW1wbGVO ZXR3b3JrLA0KPiA+ICsgIElOIFVJTlROIEhlYWRlclNpemUsDQo+ID4gKyAgSU4gVUlOVE4gQnVm ZmVyU2l6ZSwNCj4gPiArICBJTiBWT0lEICogcEJ1ZmZlciwNCj4gPiArICBJTiBFRklfTUFDX0FE RFJFU1MgKiBwU3JjQWRkciwNCj4gPiArICBJTiBFRklfTUFDX0FERFJFU1MgKiBwRGVzdEFkZHIs DQo+ID4gKyAgSU4gVUlOVDE2ICogcFByb3RvY29sDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8v LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4gKy8vIFN1cHBvcnQgUm91dGluZXMNCj4gPiArLy8t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEdldCB0aGUgTUFD IGFkZHJlc3MNCj4gPiArDQo+ID4gKyAgVGhpcyByb3V0aW5lIGNhbGxzIDo6QXg4ODE3OVVzYkNv bW1hbmQgdG8gcmVxdWVzdCB0aGUgTUFDDQo+ID4gKyAgYWRkcmVzcyBmcm9tIHRoZSBuZXR3b3Jr IGFkYXB0ZXIuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbSBbaW5dIHBOaWNEZXZpY2UgICAgICAgUG9p bnRlciB0byB0aGUgTklDX0RFVklDRSBzdHJ1Y3R1cmUNCj4gPiArICBAcGFyYW0gW291dF0gcE1h Y0FkZHJlc3MgICAgICBBZGRyZXNzIG9mIGEgc2l4IGJ5dGUgYnVmZmVyIHRvIHJlY2VpdmUgdGhl DQo+IE1BQyBhZGRyZXNzLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg ICAgIFRoZSBNQUMgYWRkcmVzcyBpcyBhdmFpbGFibGUuDQo+ID4gKyAgQHJldHZhbCBvdGhlciAg ICAgICAgICAgICAgICBUaGUgTUFDIGFkZHJlc3MgaXMgbm90IHZhbGlkLg0KPiA+ICsNCj4gPiAr KiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArQXg4ODE3OU1hY0FkZHJlc3NHZXQgKA0KPiA+ICsg IElOIE5JQ19ERVZJQ0UgKiBwTmljRGV2aWNlLA0KPiA+ICsgIE9VVCBVSU5UOCAqIHBNYWNBZGRy ZXNzDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBDbGVhciB0aGUg bXVsdGljYXN0IGhhc2ggdGFibGUNCj4gPiArDQo+ID4gKyAgQHBhcmFtIFtpbl0gcE5pY0Rldmlj ZSAgICAgICBQb2ludGVyIHRvIHRoZSBOSUNfREVWSUNFIHN0cnVjdHVyZQ0KPiA+ICsNCj4gPiAr KiovDQo+ID4gK1ZPSUQNCj4gPiArQXg4ODE3OU11bHRpY2FzdENsZWFyICgNCj4gPiArICBJTiBO SUNfREVWSUNFICogcE5pY0RldmljZQ0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiAr ICBFbmFibGUgYSBtdWx0aWNhc3QgYWRkcmVzcyBpbiB0aGUgbXVsdGljYXN0IGhhc2ggdGFibGUN Cj4gPiArDQo+ID4gKyAgVGhpcyByb3V0aW5lIGNhbGxzIDo6QXg4ODE3OUNyYyB0byBjb21wdXRl IHRoZSBoYXNoIGJpdCBmb3INCj4gPiArICB0aGlzIE1BQyBhZGRyZXNzLg0KPiA+ICsNCj4gPiAr ICBAcGFyYW0gW2luXSBwTmljRGV2aWNlICAgICAgIFBvaW50ZXIgdG8gdGhlIE5JQ19ERVZJQ0Ug c3RydWN0dXJlDQo+ID4gKyAgQHBhcmFtIFtpbl0gcE1hY0FkZHJlc3MgICAgICBBZGRyZXNzIG9m IGEgc2l4IGJ5dGUgYnVmZmVyIHRvIGNvbnRhaW5pbmcNCj4gdGhlIE1BQyBhZGRyZXNzLg0KPiA+ ICsNCj4gPiArKiovDQo+ID4gK1ZPSUQNCj4gPiArQXg4ODE3OU11bHRpY2FzdFNldCAoDQo+ID4g KyAgSU4gTklDX0RFVklDRSAqIHBOaWNEZXZpY2UsDQo+ID4gKyAgSU4gVUlOVDggKiBwTWFjQWRk cmVzcw0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBTdGFydCB0aGUgbGluayBu ZWdvdGlhdGlvbg0KPiA+ICsNCj4gPiArICBUaGlzIHJvdXRpbmUgY2FsbHMgOjpBeDg4MTc5UGh5 V3JpdGUgdG8gc3RhcnQgdGhlIFBIWSdzIGxpbmsNCj4gPiArICBuZWdvdGlhdGlvbi4NCj4gPiAr DQo+ID4gKyAgQHBhcmFtIFtpbl0gcE5pY0RldmljZSAgICAgICBQb2ludGVyIHRvIHRoZSBOSUNf REVWSUNFIHN0cnVjdHVyZQ0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg ICAgIFRoZSBsaW5rIG5lZ290aWF0aW9uIHdhcyBzdGFydGVkLg0KPiA+ICsgIEByZXR2YWwgb3Ro ZXIgICAgICAgICAgICAgICAgRmFpbGVkIHRvIHN0YXJ0IHRoZSBsaW5rIG5lZ290aWF0aW9uLg0K PiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArQXg4ODE3OU5lZ290aWF0ZUxp bmtTdGFydCAoDQo+ID4gKyAgSU4gTklDX0RFVklDRSAqIHBOaWNEZXZpY2UNCj4gPiArICApOw0K PiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgQ29tcGxldGUgdGhlIG5lZ290aWF0aW9uIG9mIHRoZSBQ SFkgbGluaw0KPiA+ICsNCj4gPiArICBUaGlzIHJvdXRpbmUgY2FsbHMgOjpBeDg4MTc5UGh5UmVh ZCB0byBkZXRlcm1pbmUgaWYgdGhlDQo+ID4gKyAgbGluayBuZWdvdGlhdGlvbiBpcyBjb21wbGV0 ZS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtIFtpbl0gcE5pY0RldmljZSAgICAgICBQb2ludGVyIHRv IHRoZSBOSUNfREVWSUNFIHN0cnVjdHVyZQ0KPiA+ICsgIEBwYXJhbSBbaW4sIG91dF0gcFBvbGxD b3VudCAgQWRkcmVzcyBvZiBudW1iZXIgb2YgdGltZXMgdGhpcyByb3V0aW5lDQo+IHdhcyBwb2xs ZWQNCj4gPiArICBAcGFyYW0gW291dF0gcGJDb21wbGV0ZSAgICAgIEFkZHJlc3Mgb2YgYm9vbGVh biB0byByZWNlaXZlIGNvbXBsYXRlDQo+IHN0YXR1cy4NCj4gPiArICBAcGFyYW0gW291dF0gcGJM aW5rVXAgICAgICAgIEFkZHJlc3Mgb2YgYm9vbGVhbiB0byByZWNlaXZlIGxpbmsgc3RhdHVzLA0K PiBUUlVFPXVwLg0KPiA+ICsgIEBwYXJhbSBbb3V0XSBwYkhpU3BlZWQgICAgICAgQWRkcmVzcyBv ZiBib29sZWFuIHRvIHJlY2VpdmUgbGluayBzcGVlZCwNCj4gVFJVRT0xMDBNYnBzLg0KPiA+ICsg IEBwYXJhbSBbb3V0XSBwYkZ1bGxEdXBsZXggICAgQWRkcmVzcyBvZiBib29sZWFuIHRvIHJlY2Vp dmUgbGluayBkdXBsZXgsDQo+IFRSVUU9ZnVsbC4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgICAgICBUaGUgTUFDIGFkZHJlc3MgaXMgYXZhaWxhYmxlLg0KPiA+ICsgIEBy ZXR2YWwgb3RoZXIgICAgICAgICAgICAgICAgVGhlIE1BQyBhZGRyZXNzIGlzIG5vdCB2YWxpZC4N Cj4gPiArDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0F4ODgxNzlOZWdvdGlhdGVM aW5rQ29tcGxldGUgKA0KPiA+ICsgIElOIE5JQ19ERVZJQ0UgKiBwTmljRGV2aWNlLA0KPiA+ICsg IElOIE9VVCBVSU5UTiAqIHBQb2xsQ291bnQsDQo+ID4gKyAgT1VUIEJPT0xFQU4gKiBwYkNvbXBs ZXRlLA0KPiA+ICsgIE9VVCBCT09MRUFOICogcGJMaW5rVXAsDQo+ID4gKyAgT1VUIEJPT0xFQU4g KiBwYkhpU3BlZWQsDQo+ID4gKyAgT1VUIEJPT0xFQU4gKiBwYkdpZ2FTcGVlZCwNCj4gPiArICBP VVQgQk9PTEVBTiAqIHBiRnVsbER1cGxleA0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4g PiArICBSZWFkIGEgcmVnaXN0ZXIgZnJvbSB0aGUgUEhZDQo+ID4gKw0KPiA+ICsgIFRoaXMgcm91 dGluZSBjYWxscyA6OkF4ODgxNzlVc2JDb21tYW5kIHRvIHJlYWQgYSBQSFkgcmVnaXN0ZXIuDQo+ ID4gKw0KPiA+ICsgIEBwYXJhbSBbaW5dIHBOaWNEZXZpY2UgICAgICAgUG9pbnRlciB0byB0aGUg TklDX0RFVklDRSBzdHJ1Y3R1cmUNCj4gPiArICBAcGFyYW0gW2luXSBSZWdpc3RlckFkZHJlc3Mg IE51bWJlciBvZiB0aGUgcmVnaXN0ZXIgdG8gcmVhZC4NCj4gPiArICBAcGFyYW0gW2luLCBvdXRd IHBQaHlEYXRhICAgIEFkZHJlc3Mgb2YgYSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgUEhZDQo+IHJl Z2lzdGVyIHZhbHVlDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAg VGhlIFBIWSBkYXRhIGlzIGF2YWlsYWJsZS4NCj4gPiArICBAcmV0dmFsIG90aGVyICAgICAgICAg ICAgICAgIFRoZSBQSFkgZGF0YSBpcyBub3QgdmFsaWQuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiAr DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBSZXNldCB0aGUgQVg4ODE3OQ0KPiA+ICsNCj4gPiAr ICBUaGlzIHJvdXRpbmUgdXNlcyA6OkF4ODgxNzlVc2JDb21tYW5kIHRvIHJlc2V0IHRoZSBuZXR3 b3JrDQo+ID4gKyAgYWRhcHRlci4gIFRoaXMgcm91dGluZSBhbHNvIHVzZXMgOjpBeDg4MTc5UGh5 V3JpdGUgdG8gcmVzZXQNCj4gPiArICB0aGUgUEhZLg0KPiA+ICsNCj4gPiArICBAcGFyYW0gW2lu XSBwTmljRGV2aWNlICAgICAgIFBvaW50ZXIgdG8gdGhlIE5JQ19ERVZJQ0Ugc3RydWN0dXJlDQo+ ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgVGhlIE1BQyBhZGRyZXNz IGlzIGF2YWlsYWJsZS4NCj4gPiArICBAcmV0dmFsIG90aGVyICAgICAgICAgICAgICAgIFRoZSBN QUMgYWRkcmVzcyBpcyBub3QgdmFsaWQuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRV Uw0KPiA+ICtBeDg4MTc5UmVzZXQgKA0KPiA+ICsgIElOIE5JQ19ERVZJQ0UgKiBwTmljRGV2aWNl DQo+ID4gKyAgKTsNCj4gPiArI2lmIDANCj4gPiArLyoqDQo+ID4gKyAgUmVjZWl2ZSBhIGZyYW1l IGZyb20gdGhlIG5ldHdvcmsuDQo+ID4gKw0KPiA+ICsgIFRoaXMgcm91dGluZSBwb2xscyB0aGUg VVNCIHJlY2VpdmUgaW50ZXJmYWNlIGZvciBhIHBhY2tldC4gIElmIGEgcGFja2V0DQo+ID4gKyAg aXMgYXZhaWxhYmxlLCB0aGlzIHJvdXRpbmUgYWRkcyB0aGUgcmVjZWl2ZSBwYWNrZXQgdG8gdGhl IGxpc3Qgb2YNCj4gPiArICBwZW5kaW5nIHJlY2VpdmUgcGFja2V0cy4NCj4gPiArDQo+ID4gKyAg VGhpcyByb3V0aW5lIGNhbGxzIDo6QXg4ODE3OU5lZ290aWF0ZUxpbmtDb21wbGV0ZSB0byB2ZXJp ZnkNCj4gPiArICB0aGF0IHRoZSBsaW5rIGlzIHVwLiAgVGhpcyByb3V0aW5lIGFsc28gY2FsbHMg OjpTTl9SZXNldCB0bw0KPiA+ICsgIHJlc2V0IHRoZSBuZXR3b3JrIGFkYXB0ZXIgd2hlbiBuZWNl c3NhcnkuICBGaW5hbGx5IHRoaXMNCj4gPiArICByb3V0aW5lIGF0dGVtcHRzIHRvIHJlY2VpdmUg b25lIG9yIG1vcmUgcGFja2V0cyBmcm9tIHRoZQ0KPiA+ICsgIG5ldHdvcmsgYWRhcHRlci4NCj4g PiArDQo+ID4gKyAgQHBhcmFtIFtpbl0gcE5pY0RldmljZSAgUG9pbnRlciB0byB0aGUgTklDX0RF VklDRSBzdHJ1Y3R1cmUNCj4gPiArICBAcGFyYW0gW2luXSBiVXBkYXRlTGluayBUUlVFID0gVXBk YXRlIGxpbmsgc3RhdHVzDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArVk9JRA0KPiA+ICtBeDg4MTc5 UnggKA0KPiA+ICsgIElOIE5JQ19ERVZJQ0UgKiBwTmljRGV2aWNlLA0KPiA+ICsgIElOIEJPT0xF QU4gYlVwZGF0ZUxpbmsNCj4gPiArICApOw0KPiA+ICsjZW5kaWYNCj4gPiArLyoqDQo+ID4gKyAg RW5hYmxlIG9yIGRpc2FibGUgdGhlIHJlY2VpdmVyDQo+ID4gKw0KPiA+ICsgIFRoaXMgcm91dGlu ZSBjYWxscyA6OkF4ODgxNzlVc2JDb21tYW5kIHRvIHVwZGF0ZSB0aGUNCj4gPiArICByZWNlaXZl ciBzdGF0ZS4gIFRoaXMgcm91dGluZSBhbHNvIGNhbGxzIDo6QXg4ODE3OU1hY0FkZHJlc3NTZXQN Cj4gPiArICB0byBlc3RhYmxpc2ggdGhlIE1BQyBhZGRyZXNzIGZvciB0aGUgbmV0d29yayBhZGFw dGVyLg0KPiA+ICsNCj4gPiArICBAcGFyYW0gW2luXSBwTmljRGV2aWNlICAgICAgIFBvaW50ZXIg dG8gdGhlIE5JQ19ERVZJQ0Ugc3RydWN0dXJlDQo+ID4gKyAgQHBhcmFtIFtpbl0gUnhGaWx0ZXIg ICAgICAgICBTaW1wbGUgbmV0d29yayBSWCBmaWx0ZXIgbWFzayB2YWx1ZQ0KPiA+ICsNCj4gPiAr ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgIFRoZSBNQUMgYWRkcmVzcyB3YXMgc2V0Lg0K PiA+ICsgIEByZXR2YWwgb3RoZXIgICAgICAgICAgICAgICAgVGhlIE1BQyBhZGRyZXNzIHdhcyBu b3Qgc2V0Lg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArQXg4ODE3OVJ4 Q29udHJvbCAoDQo+ID4gKyAgSU4gTklDX0RFVklDRSAqIHBOaWNEZXZpY2UsDQo+ID4gKyAgSU4g VUlOVDMyIFJ4RmlsdGVyDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKyAgRUZJX1NUQVRVUw0KPiA+ ICtBeDg4MTc5UmVsb2FkU3JvbSAgKA0KPiA+ICsgIElOIE5JQ19ERVZJQ0UgKiBwTmljRGV2aWNl DQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFJlYWQgYW4gU1JPTSBsb2NhdGlv bg0KPiA+ICsNCj4gPiArICBUaGlzIHJvdXRpbmUgY2FsbHMgOjpBeDg4MTc5VXNiQ29tbWFuZCB0 byByZWFkIGRhdGEgZnJvbSB0aGUNCj4gPiArICBTUk9NLg0KPiA+ICsNCj4gPiArICBAcGFyYW0g W2luXSBwTmljRGV2aWNlICAgICAgIFBvaW50ZXIgdG8gdGhlIE5JQ19ERVZJQ0Ugc3RydWN0dXJl DQo+ID4gKyAgQHBhcmFtIFtpbl0gQWRkcmVzcyAgICAgICAgICBTUk9NIGFkZHJlc3MNCj4gPiAr ICBAcGFyYW0gW291dF0gcERhdGEgICAgICAgICAgIEJ1ZmZlciB0byByZWNlaXZlIHRoZSBkYXRh DQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgVGhlIHJlYWQgd2Fz IHN1Y2Nlc3NmdWwNCj4gPiArICBAcmV0dmFsIG90aGVyICAgICAgICAgICAgICAgIFRoZSByZWFk IGZhaWxlZA0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArQXg4ODE3OVNy b21SZWFkICgNCj4gPiArICBJTiBOSUNfREVWSUNFICogcE5pY0RldmljZSwNCj4gPiArICBJTiBV SU5UMzIgQWRkcmVzcywNCj4gPiArICBPVVQgVUlOVDE2ICogcERhdGENCj4gPiArICApOw0KPiA+ ICsNCj4gPiArDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArQXg4ODE3OUVuYWJsZVNyb21Xcml0ZSAg KA0KPiA+ICsgIElOIE5JQ19ERVZJQ0UgKiBwTmljRGV2aWNlDQo+ID4gKyAgKTsNCj4gPiArDQo+ ID4gKw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0F4ODgxNzlEaXNhYmxlU3JvbVdyaXRlICAoDQo+ ID4gKyAgSU4gTklDX0RFVklDRSAqIHBOaWNEZXZpY2UNCj4gPiArICApOw0KPiA+ICsNCj4gPiAr RUZJX1NUQVRVUw0KPiA+ICtBeDg4MTc5U3JvbVdyaXRlICgNCj4gPiArICBJTiBOSUNfREVWSUNF ICogcE5pY0RldmljZSwNCj4gPiArICBJTiBVSU5UMzIgQWRkcmVzcywNCj4gPiArICBPVVQgVUlO VDE2ICogcERhdGENCj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgU2VuZCBhIGNv bW1hbmQgdG8gdGhlIFVTQiBkZXZpY2UuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbSBbaW5dIHBOaWNE ZXZpY2UgICAgICAgUG9pbnRlciB0byB0aGUgTklDX0RFVklDRSBzdHJ1Y3R1cmUNCj4gPiArICBA cGFyYW0gW2luXSBwUmVxdWVzdCAgICAgICAgIFBvaW50ZXIgdG8gdGhlIHJlcXVlc3Qgc3RydWN0 dXJlDQo+ID4gKyAgQHBhcmFtIFtpbiwgb3V0XSBwQnVmZmVyICAgICBEYXRhIGJ1ZmZlciBhZGRy ZXNzDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgVGhlIFVTQiB0 cmFuc2ZlciB3YXMgc3VjY2Vzc2Z1bA0KPiA+ICsgIEByZXR2YWwgb3RoZXIgICAgICAgICAgICAg ICAgVGhlIFVTQiB0cmFuc2ZlciBmYWlsZWQNCj4gPiArDQo+ID4gKyoqLw0KPiA+ICsNCj4gPiAr RUZJX1NUQVRVUw0KPiA+ICtBeDg4MTc5VXNiQ29tbWFuZCAoDQo+ID4gKyAgSU4gTklDX0RFVklD RSAqIHBOaWNEZXZpY2UsDQo+ID4gKyAgSU4gVVNCX0RFVklDRV9SRVFVRVNUICogcFJlcXVlc3Qs DQo+ID4gKyAgSU4gT1VUIFZPSUQgKiBwQnVmZmVyDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8v LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4gKy8vIEVGSSBDb21wb25lbnQgTmFtZSBQcm90b2Nv bCBTdXBwb3J0DQo+ID4gKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4gK2V4dGVybiBFRklf RFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgICBnRHJpdmVyQmluZGluZzsNCj4gPiArZXh0ZXJuIEVG SV9DT01QT05FTlRfTkFNRV9QUk9UT0NPTCAgIGdDb21wb25lbnROYW1lOyAgLy8vPA0KPiBDb21w b25lbnQgbmFtZSBwcm90b2NvbCBkZWNsYXJhdGlvbg0KPiA+ICtleHRlcm4gRUZJX0NPTVBPTkVO VF9OQU1FMl9QUk9UT0NPTCAgZ0NvbXBvbmVudE5hbWUyOyAvLy88DQo+IENvbXBvbmVudCBuYW1l IDIgcHJvdG9jb2wgZGVjbGFyYXRpb24NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFJldHJpZXZl cyBhIFVuaWNvZGUgc3RyaW5nIHRoYXQgaXMgdGhlIHVzZXIgcmVhZGFibGUgbmFtZSBvZiB0aGUg ZHJpdmVyLg0KPiA+ICsNCj4gPiArICBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgdXNlciBy ZWFkYWJsZSBuYW1lIG9mIGEgZHJpdmVyIGluIHRoZSBmb3JtIG9mDQo+IGENCj4gPiArICBVbmlj b2RlIHN0cmluZy4gSWYgdGhlIGRyaXZlciBzcGVjaWZpZWQgYnkgVGhpcyBoYXMgYSB1c2VyIHJl YWRhYmxlIG5hbWUgaW4NCj4gPiArICB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5IExhbmd1YWdl LCB0aGVuIGEgcG9pbnRlciB0byB0aGUgZHJpdmVyIG5hbWUgaXMNCj4gPiArICByZXR1cm5lZCBp biBEcml2ZXJOYW1lLCBhbmQgRUZJX1NVQ0NFU1MgaXMgcmV0dXJuZWQuIElmIHRoZSBkcml2ZXIN Cj4gc3BlY2lmaWVkDQo+ID4gKyAgYnkgVGhpcyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBsYW5ndWFn ZSBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2UsDQo+ID4gKyAgdGhlbiBFRklfVU5TVVBQT1JURUQgaXMg cmV0dXJuZWQuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbSBbaW5dIHBUaGlzICAgICAgICAgICAgIEEg cG9pbnRlciB0byB0aGUNCj4gRUZJX0NPTVBPTkVOVF9OQU1FMl9QUk9UT0NPTCBvcg0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9DT01QT05FTlRfTkFNRV9QUk9UT0NP TCBpbnN0YW5jZS4NCj4gPiArICBAcGFyYW0gW2luXSBwTGFuZ3VhZ2UgICAgICAgICBBIHBvaW50 ZXIgdG8gYSBOdWxsLXRlcm1pbmF0ZWQgQVNDSUkgc3RyaW5nDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYXJyYXkgaW5kaWNhdGluZyB0aGUgbGFuZ3VhZ2UuIFRoaXMgaXMg dGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2Ugb2YgdGhl IGRyaXZlciBuYW1lIHRoYXQgdGhlIGNhbGxlciBpcw0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJlcXVlc3RpbmcsIGFuZCBpdCBtdXN0IG1hdGNoIG9uZSBvZiB0aGUNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZXMgc3BlY2lmaWVkIGlu IFN1cHBvcnRlZExhbmd1YWdlcy4gVGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbnVtYmVyIG9mIGxhbmd1YWdlcyBzdXBwb3J0ZWQgYnkgYSBkcml2ZXIgaXMgdXANCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgZHJpdmVyIHdyaXRlci4g TGFuZ3VhZ2UgaXMgc3BlY2lmaWVkDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW4gUkZDIDMwNjYgb3IgSVNPIDYzOS0yIGxhbmd1YWdlIGNvZGUgZm9ybWF0Lg0KPiA+ICsg IEBwYXJhbSBbb3V0XSBwcERyaXZlck5hbWUgICAgIEEgcG9pbnRlciB0byB0aGUgVW5pY29kZSBz dHJpbmcgdG8gcmV0dXJuLg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRo aXMgVW5pY29kZSBzdHJpbmcgaXMgdGhlIG5hbWUgb2YgdGhlDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGluIHRoZSBsYW5ndWFn ZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBieSBMYW5n dWFnZS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIFVu aWNvZGUgc3RyaW5nIGZvciB0aGUgRHJpdmVyIHNwZWNpZmllZCBieQ0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFRoaXMgYW5kIHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkg TGFuZ3VhZ2Ugd2FzDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu ZWQgaW4gRHJpdmVyTmFtZS4NCj4gPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBM YW5ndWFnZSBpcyBOVUxMLg0KPiA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIERy aXZlck5hbWUgaXMgTlVMTC4NCj4gPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBU aGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGRvZXMgbm90DQo+IHN1cHBvcnQNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5IExh bmd1YWdlLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ ID4gK0dldERyaXZlck5hbWUgKA0KPiA+ICsgIElOICBFRklfQ09NUE9ORU5UX05BTUVfUFJPVE9D T0wgKiBwVGhpcywNCj4gPiArICBJTiAgQ0hBUjggKiBwTGFuZ3VhZ2UsDQo+ID4gKyAgT1VUIENI QVIxNiAqKiBwcERyaXZlck5hbWUNCj4gPiArICApOw0KPiA+ICsNCj4gPiArDQo+ID4gKy8qKg0K PiA+ICsgIFJldHJpZXZlcyBhIFVuaWNvZGUgc3RyaW5nIHRoYXQgaXMgdGhlIHVzZXIgcmVhZGFi bGUgbmFtZSBvZiB0aGUNCj4gY29udHJvbGxlcg0KPiA+ICsgIHRoYXQgaXMgYmVpbmcgbWFuYWdl ZCBieSBhIGRyaXZlci4NCj4gPiArDQo+ID4gKyAgVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhl IHVzZXIgcmVhZGFibGUgbmFtZSBvZiB0aGUgY29udHJvbGxlciBzcGVjaWZpZWQNCj4gYnkNCj4g PiArICBDb250cm9sbGVySGFuZGxlIGFuZCBDaGlsZEhhbmRsZSBpbiB0aGUgZm9ybSBvZiBhIFVu aWNvZGUgc3RyaW5nLiBJZiB0aGUNCj4gPiArICBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgaGFz IGEgdXNlciByZWFkYWJsZSBuYW1lIGluIHRoZSBsYW5ndWFnZQ0KPiBzcGVjaWZpZWQgYnkNCj4g PiArICBMYW5ndWFnZSwgdGhlbiBhIHBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIgbmFtZSBpcyBy ZXR1cm5lZCBpbg0KPiBDb250cm9sbGVyTmFtZSwNCj4gPiArICBhbmQgRUZJX1NVQ0NFU1MgaXMg cmV0dXJuZWQuICBJZiB0aGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGlzIG5vdA0KPiBjdXJy ZW50bHkNCj4gPiArICBtYW5hZ2luZyB0aGUgY29udHJvbGxlciBzcGVjaWZpZWQgYnkgQ29udHJv bGxlckhhbmRsZSBhbmQgQ2hpbGRIYW5kbGUsDQo+ID4gKyAgdGhlbiBFRklfVU5TVVBQT1JURUQg aXMgcmV0dXJuZWQuICBJZiB0aGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGRvZXMNCj4gbm90 DQo+ID4gKyAgc3VwcG9ydCB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5IExhbmd1YWdlLCB0aGVu IEVGSV9VTlNVUFBPUlRFRCBpcw0KPiByZXR1cm5lZC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtIFtp bl0gcFRoaXMgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZQ0KPiBFRklfQ09NUE9ORU5UX05B TUUyX1BST1RPQ09MIG9yDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJ X0NPTVBPTkVOVF9OQU1FX1BST1RPQ09MIGluc3RhbmNlLg0KPiA+ICsgIEBwYXJhbSBbaW5dIENv bnRyb2xsZXJIYW5kbGUgIFRoZSBoYW5kbGUgb2YgYSBjb250cm9sbGVyIHRoYXQgdGhlIGRyaXZl cg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBieSBUaGlz IGlzIG1hbmFnaW5nLiAgVGhpcyBoYW5kbGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzcGVjaWZpZXMgdGhlIGNvbnRyb2xsZXIgd2hvc2UgbmFtZSBpcyB0byBiZQ0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmVkLg0KPiA+ICsgIEBwYXJh bSBbaW5dIENoaWxkSGFuZGxlICAgICAgIFRoZSBoYW5kbGUgb2YgdGhlIGNoaWxkIGNvbnRyb2xs ZXIgdG8NCj4gcmV0cmlldmUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 aGUgbmFtZSBvZi4gIFRoaXMgaXMgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXkgYmUgTlVMTC4gIEl0IHdpbGwgYmUgTlVM TCBmb3IgZGV2aWNlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVy cy4gIEl0IHdpbGwgYWxzbyBiZSBOVUxMIGZvciBhIGJ1cyBkcml2ZXJzDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCB3aXNoIHRvIHJldHJpZXZlIHRoZSBuYW1lIG9m IHRoZSBidXMNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVy LiAgSXQgd2lsbCBub3QgYmUgTlVMTCBmb3IgYSBidXMNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkcml2ZXIgdGhhdCB3aXNoZXMgdG8gcmV0cmlldmUgdGhlIG5hbWUgb2Yg YQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkIGNvbnRyb2xsZXIu DQo+ID4gKyAgQHBhcmFtIFtpbl0gcExhbmd1YWdlICAgICAgICAgQSBwb2ludGVyIHRvIGEgTnVs bC10ZXJtaW5hdGVkIEFTQ0lJIHN0cmluZw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGFycmF5IGluZGljYXRpbmcgdGhlIGxhbmd1YWdlLiAgVGhpcyBpcyB0aGUNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZSBvZiB0aGUgZHJpdmVyIG5h bWUgdGhhdCB0aGUgY2FsbGVyIGlzDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmVxdWVzdGluZywgYW5kIGl0IG11c3QgbWF0Y2ggb25lIG9mIHRoZQ0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlcyBzcGVjaWZpZWQgaW4gU3VwcG9ydGVk TGFuZ3VhZ2VzLiBUaGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1i ZXIgb2YgbGFuZ3VhZ2VzIHN1cHBvcnRlZCBieSBhIGRyaXZlciBpcyB1cA0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBkcml2ZXIgd3JpdGVyLiBMYW5ndWFnZSBp cyBzcGVjaWZpZWQgaW4NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRkMg MzA2NiBvciBJU08gNjM5LTIgbGFuZ3VhZ2UgY29kZSBmb3JtYXQuDQo+ID4gKyAgQHBhcmFtIFtv dXRdIHBwQ29udHJvbGxlck5hbWUgQSBwb2ludGVyIHRvIHRoZSBVbmljb2RlIHN0cmluZyB0bw0K PiByZXR1cm4uDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBVbmlj b2RlIHN0cmluZyBpcyB0aGUgbmFtZSBvZiB0aGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb250cm9sbGVyIHNwZWNpZmllZCBieSBDb250cm9sbGVySGFuZGxlIGFuZA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoaWxkSGFuZGxlIGluIHRoZSBs YW5ndWFnZSBzcGVjaWZpZWQgYnkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBMYW5ndWFnZSBmcm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mIHRoZSBkcml2ZXINCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgYnkgVGhpcy4NCj4gPiArDQo+ ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIFVuaWNvZGUgc3RyaW5nIGZv ciB0aGUgdXNlciByZWFkYWJsZQ0KPiBuYW1lIGluDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZSBmb3IgdGhlDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVyIHNwZWNpZmllZCBieSBU aGlzIHdhcyByZXR1cm5lZCBpbg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IERyaXZlck5hbWUuDQo+ID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgQ29udHJv bGxlckhhbmRsZSBpcyBub3QgYSB2YWxpZA0KPiBFRklfSEFORExFLg0KPiA+ICsgIEByZXR2YWwg RUZJX0lOVkFMSURfUEFSQU1FVEVSIENoaWxkSGFuZGxlIGlzIG5vdCBOVUxMIGFuZCBpdCBpcyBu b3QNCj4gYSB2YWxpZA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9I QU5ETEUuDQo+ID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgTGFuZ3VhZ2UgaXMg TlVMTC4NCj4gPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBDb250cm9sbGVyTmFt ZSBpcyBOVUxMLg0KPiA+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIFRoZSBkcml2 ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgaXMgbm90DQo+IGN1cnJlbnRseQ0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG1hbmFnaW5nIHRoZSBjb250cm9sbGVyIHNwZWNpZmllZCBi eQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUg YW5kIENoaWxkSGFuZGxlLg0KPiA+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIFRo ZSBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgZG9lcyBub3QNCj4gc3VwcG9ydA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgTGFu Z3VhZ2UuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4g PiArR2V0Q29udHJvbGxlck5hbWUgKA0KPiA+ICsgIElOICBFRklfQ09NUE9ORU5UX05BTUVfUFJP VE9DT0wgKiBwVGhpcywNCj4gPiArICBJTiAgRUZJX0hBTkRMRSBDb250cm9sbGVySGFuZGxlLA0K PiA+ICsgIElOIE9QVElPTkFMIEVGSV9IQU5ETEUgQ2hpbGRIYW5kbGUsDQo+ID4gKyAgSU4gIENI QVI4ICogcExhbmd1YWdlLA0KPiA+ICsgIE9VVCBDSEFSMTYgKiogcHBDb250cm9sbGVyTmFtZQ0K PiA+ICsgICk7DQo+ID4gKw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0F4ODgxNzlTZXRNZWRpdW0g KA0KPiA+ICsgIElOIE5JQ19ERVZJQ0UgKiBwTmljRGV2aWNlDQo+ID4gKyAgKTsNCj4gPiArLy8t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiA+ICsNCj4gPiArDQo+ID4gKw0KPiA+ICsNCj4gPiArDQo+ ID4gKyNkZWZpbmUgQUNDRVNTX01BQyAgMHgwMQ0KPiA+ICsjZGVmaW5lIEFDQ0VTU19QSFkgIDB4 MDINCj4gPiArDQo+ID4gKyNkZWZpbmUgUExTUiAgICAgICAgICAgICAgICAweDAyDQo+ID4gKyAg I2RlZmluZSBQTFNSX1VTQl9GUyAgMHgwMQ0KPiA+ICsgICNkZWZpbmUgUExTUl9VU0JfSFMgIDB4 MDINCj4gPiArICAjZGVmaW5lIFBMU1JfVVNCX1NTICAweDA0DQo+ID4gKw0KPiA+ICsjZGVmaW5l IE5PREVfSUQgICAgICAgICAgICAgICAweDEwDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFJYQ1RMICAg ICAgICAgICAgICAgICAweDBiDQo+ID4gKyAgI2RlZmluZSBSWENUTF9QUk8gICAgICAgICAweDAw MDEgIC8vLzwgIFJlY2VpdmUgYWxsIHBhY2tldHMNCj4gPiArICAjZGVmaW5lIFJYQ1RMX0FNQUxM ICAgICAgIDB4MDAwMiAgLy8vPCAgUmVjZWl2ZSBhbGwgbXVsdGljYXN0IHBhY2tldHMNCj4gPiAr ICAjZGVmaW5lIFJYQ1RMX1NFUCAgICAgICAgIDB4MDAwNCAgLy8vPCAgU2F2ZSBlcnJvciBwYWNr ZXRzDQo+ID4gKyAgI2RlZmluZSBSWENUTF9BQiAgICAgICAgICAweDAwMDggIC8vLzwgIFJlY2Vp dmUgYnJvYWRjYXN0IHBhY2tldHMNCj4gPiArICAjZGVmaW5lIFJYQ1RMX0FNICAgICAgICAgIDB4 MDAxMCAgLy8vPCAgVXNlIG11bHRpY2FzdCBkZXN0aW5hdGlvbiBhZGRyZXNzDQo+IGhhc2ggdGFi bGUNCj4gPiArICAjZGVmaW5lIFJYQ1RMX0FQICAgICAgICAgIDB4MDAyMCAgLy8vPCAgQWNjZXB0 IHBoeXNpY2FsIGFkZHJlc3MgZnJvbQ0KPiBNdWx0aWNhc3QgRmlsdGVyDQo+ID4gKyAgI2RlZmlu ZSBSWENUTF9BUlAgICAgICAgICAweDAwNDAgIC8vLzwgIEFjY2VwdCBydW50IHBhY2tldA0KPiA+ ICsgICNkZWZpbmUgUlhDVExfU08gICAgICAgICAgMHgwMDgwICAvLy88ICBTdGFydCBvcGVyYXRp b24NCj4gPiArICAjZGVmaW5lIFJYQ1RMX0RST1BDUkNFUlIgIDB4MDEwMCAgLy8vPCAgUlggaGVh ZGVyIDEgZm9ybWF0ZQ0KPiBzZWxlY3Rpb24NCj4gPiArICAjZGVmaW5lIFJYQ1RMX0lQRSAgICAg ICAgIDB4MDIwMCAgLy8vPCAgUlggaGVhZGVyIDIgZm9ybWF0ZSBzZWxlY3Rpb24NCj4gPiArICAj ZGVmaW5lIFJYQ1RMX1RYUEFEQ1JDICAgIDB4MDQwMCAgLy8vPCAgUlggaGVhZGVyIDMgZm9ybWF0 ZSBzZWxlY3Rpb24NCj4gPiArICAjZGVmaW5lIFJYQ1RMX0xQQksgICAgICAgIDB4MTAwMCAgLy8v PCAgTUFDIGxvb3AgYmFjayBmb3IgZGlhZ25vc3RpYw0KPiA+ICsNCj4gPiArI2RlZmluZSBNVUxD QVRGTFRBUlJZICAgICAgIDB4MTYgIC8vLzwgIFdyaXRlIHRoZSBtdWx0aWNhc3QgaGFzaCB0YWJs ZSwNCj4gRGF0YTogTmV3IDggYnl0ZSB2YWx1ZQ0KPiA+ICsNCj4gPiArI2RlZmluZSBNRURJVU1T VFNNT0QgICAgICAgICAgMHgyMg0KPiA+ICsgICNkZWZpbmUgTUVESVVNU1RTTU9EX0dNICAgMHgw MDAxICAvLy88ICBHaWdhYml0IE1vZGUNCj4gPiArICAjZGVmaW5lIE1FRElVTVNUU01PRF9GRCAg IDB4MDAwMiAgLy8vPCAgRnVsbCBkdXBsZXgNCj4gPiArICAjZGVmaW5lIE1FRElVTVNUU01PRF9P TkUgIDB4MDAwNCAgLy8vPCAgTXVzdCBiZSBvbmUNCj4gPiArICAjZGVmaW5lIE1FRElVTVNUU01P RF9FTkNLIDB4MDAwOCAgLy8vPCAgQWRkIGluIDA0aA0KPiA+ICsgICNkZWZpbmUgTUVESVVNU1RT TU9EX1JGQyAgMHgwMDEwICAvLy88ICBSWCBmbG93IGNvbnRyb2wgZW5hYmxlDQo+ID4gKyAgI2Rl ZmluZSBNRURJVU1TVFNNT0RfVEZDICAweDAwMjAgIC8vLzwgIFRYIGZsb3cgY29udHJvbCBlbmFi bGUNCj4gPiArICAjZGVmaW5lIE1FRElVTVNUU01PRF9KRkUgIDB4MDA0MCAgLy8vPCAgUGF1c2Ug ZnJhbWUgZW5hYmxlDQo+ID4gKyAgI2RlZmluZSBNRURJVU1TVFNNT0RfUEYgICAweDAwODAgIC8v LzwgIFBhdXNlIGZyYW1lIGVuYWJsZQ0KPiA+ICsgICNkZWZpbmUgTUVESVVNU1RTTU9EX1JFICAg MHgwMTAwICAvLy88ICBSZWNlaXZlIGVuYWJsZQ0KPiA+ICsgICNkZWZpbmUgTUVESVVNU1RTTU9E X1BTICAgMHgwMjAwICAvLy88ICBQb3J0IHNwZWVkIDE9MTAwLCAwPTEwDQo+IE1icHMNCj4gPiAr ICAjZGVmaW5lIE1FRElVTVNUU01PRF9TQlAgIDB4MDgwMCAgLy8vPCAgU3RvcCBiYWNrIHByZXNz dXJlDQo+ID4gKyAgI2RlZmluZSBNRURJVU1TVFNNT0RfU00gICAweDEwMDAgIC8vLzwgIFN1cGVy IE1BQyBzdXBwb3J0DQo+ID4gKw0KPiA+ICsjZGVmaW5lIE1PTklUT1JTVEFVUyAgICAgICAgICAw eDI0DQo+ID4gKyAgI2RlZmluZSAgTU9OSVRPUlNUQVVTX1BNRVRZUEUgICAweDQwDQo+ID4gKyAg I2RlZmluZSAgTU9OSVRPUlNUQVVTX1BNRVBPTCAgICAweDIwDQo+ID4gKw0KPiA+ICsjZGVmaW5l IFBIWVBXUlJTVENUTCAgICAgICAgICAweDI2DQo+ID4gKyAgI2RlZmluZSBQSFlQV1JSU1RDVExf SVBSTCAgICAgMHgyMA0KPiA+ICsgICNkZWZpbmUgUEhZUFdSUlNUQ1RMX09TQ0RTU0VMIDB4ODAN Cj4gPiArICAjZGVmaW5lIFBIWVBXUlJTVENUTF9CWlRZUEUgICAgICAgMHg0DQo+ID4gKyAgI2Rl ZmluZSBQSFlQV1JSU1RDVExfQlogICAgICAweDEwDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFNJU1NS ICAgICAgICAgICAgICAgICAweDI4DQo+ID4gKyAgI2RlZmluZSBTSVNTUl9QU0VMICAgICAgICAw eDAxDQo+ID4gKyAgI2RlZmluZSBTSVNTUl9BU0VMICAgICAgICAweDAyDQo+ID4gKw0KPiA+ICsj ZGVmaW5lIFJYQklOUUNUUkwgICAgICAgICAgICAweDJlDQo+ID4gKyAgI2RlZmluZSBSWEJJTlFD VFJMX1RJTUVOICAweDAxDQo+ID4gKyAgI2RlZmluZSBSWEJJTlFDVFJMX0lGR0VOICAweDAyDQo+ ID4gKyAgI2RlZmluZSBSWEJJTlFDVFJMX1NJWkVOICAweDA0DQo+ID4gKw0KPiA+ICsjZGVmaW5l IFJYQklOUVRJTUVSTCAgICAgICAgICAweDJmDQo+ID4gKyNkZWZpbmUgUlhCSU5RVElNRVJIICAg ICAgICAgIDB4MzANCj4gPiArI2RlZmluZSBSWEJJTlFTSVpFICAgICAgICAgICAgMHgzMQ0KPiA+ ICsjZGVmaW5lIFJYQklOUUlGRyAgICAgICAgICAgICAweDMyDQo+ID4gKw0KPiA+ICsjZGVmaW5l IENMS1NFTEVDVCAgICAgICAgICAgICAweDMzDQo+ID4gKyAgI2RlZmluZSBDTEtTRUxFQ1RfQUNT ICAgICAgIDB4MDINCj4gPiArICAjZGVmaW5lIENMS1NFTEVDVF9CQ1MgICAgICAgMHgwMQ0KPiA+ ICsNCj4gPiArI2RlZmluZSBQQVVTRV9XQVRFUkxWTF9ISUdIICAgMHg1NA0KPiA+ICsjZGVmaW5l IFBBVVNFX1dBVEVSTFZMX0xPVyAgICAweDU1DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFJYRlJFRUJV RiAgICAgICAgICAgICAweDU3DQo+ID4gKyAgI2RlZmluZSBNQVhfUlhCVUZfUEFHRSAgICAweDA2 N0YNCj4gPiArDQo+ID4gKyNkZWZpbmUgUEhZX0JNQ1IgICAgICAgICAgICAgICAgICAgICAgICAw ICAgICAgIC8vLzwgIENvbnRyb2wgcmVnaXN0ZXINCj4gPiArICAjZGVmaW5lIEJNQ1JfUkVTRVQg ICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvLy88ICAxID0gUmVzZXQgdGhlIFBIWSwgYml0 DQo+IGNsZWFycyBhZnRlciByZXNldA0KPiA+ICsgICNkZWZpbmUgQk1DUl9MT09QQkFDSyAgICAg ICAgICAgICAgICAgICAweDQwMDAgIC8vLzwgIDEgPSBMb29wYmFjayBlbmFibGVkDQo+ID4gKyAg I2RlZmluZSBCTUNSX0FVVE9ORUdPVElBVElPTl9FTkFCTEUgICAgIDB4MTAwMCAgLy8vPCAgMSA9 IEVuYWJsZQ0KPiBhdXRvbmVnb3RpYXRpb24NCj4gPiArICAjZGVmaW5lIEJNQ1JfUE9XRVJfRE9X TiAgICAgICAgICAgICAgICAgMHgwODAwICAvLy88ICAxID0gUG93ZXIgZG93bg0KPiA+ICsgICNk ZWZpbmUgQk1DUl9JU09MQVRFICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8vLzwgIDAgPSBJ c29sYXRlIFBIWQ0KPiA+ICsgICNkZWZpbmUgQk1DUl9SRVNUQVJUX0FVVE9ORUdPVElBVElPTiAg ICAweDAyMDAgIC8vLzwgIDEgPSBSZXN0YXJ0DQo+IGF1dG9uZWdvdGlhdGlvbg0KPiA+ICsgICNk ZWZpbmUgQk1DUl9GVUxMX0RVUExFWCAgICAgICAgICAgICAgICAweDAxMDAgIC8vLzwgIEZ1bGwg ZHVwbGV4IG9wZXJhdGlvbg0KPiA+ICsgICNkZWZpbmUgQk1DUl9DT0xMSVNJT05fVEVTVCAgICAg ICAgICAgICAweDAwODAgIC8vLzwgIDEgPSBDb2xsaXNpb24gdGVzdA0KPiBlbmFibGVkDQo+ID4g KyAgI2RlZmluZSBCTUNSXzEwMDBNQlBTICAgICAgICAgICAgICAgICAgIDB4NDAgIC8vLzwgIEZv cmNlZCBtb2RlIGluDQo+IDEwMDBNYnBzDQo+ID4gKyAgI2RlZmluZSBCTUNSXzEwME1CUFMgICAg ICAgICAgICAgICAgICAgIDB4MjAwMCAgICAvLy88ICBGb3JjZWQgbW9kZSBpbg0KPiAxME1icHMN Cj4gPiArDQo+ID4gKyNkZWZpbmUgUEhZX0JNU1IgICAgICAgICAgICAgICAgICAgICAgICAxICAg ICAgIC8vLzwgIFN0YXR1cyByZWdpc3Rlcg0KPiA+ICsgICNkZWZpbmUgQk1TUl8xMDBCQVNFVDQg ICAgICAgICAgICAgICAgICAweDgwMDAgIC8vLzwgIDEgPSAxMDBCQVNFLVQ0IG1vZGUNCj4gPiAr ICAjZGVmaW5lIEJNU1JfMTAwQkFTRVRYX0ZEWCAgICAgICAgICAgICAgMHg0MDAwICAvLy88ICAx ID0gMTAwQkFTRS1UWCBmdWxsDQo+IGR1cGxleA0KPiA+ICsgICNkZWZpbmUgQk1TUl8xMDBCQVNF VFhfSERYICAgICAgICAgICAgICAweDIwMDAgIC8vLzwgIDEgPSAxMDBCQVNFLVRYDQo+IGhhbGYg ZHVwbGV4DQo+ID4gKyAgI2RlZmluZSBCTVNSXzEwQkFTRVRfRkRYICAgICAgICAgICAgICAgIDB4 MTAwMCAgLy8vPCAgMSA9IDEwQkFTRS1UIGZ1bGwNCj4gZHVwbGV4DQo+ID4gKyAgI2RlZmluZSBC TVNSXzEwQkFTRVRfSERYICAgICAgICAgICAgICAgIDB4MDgwMCAgLy8vPCAgMSA9IDEwQkFTRS1U IGhhbGYNCj4gZHVwbGV4DQo+ID4gKyAgI2RlZmluZSBCTVNSX01GICAgICAgICAgICAgICAgICAg ICAgICAgIDB4MDA0MCAgLy8vPCAgMSA9IFBIWSBhY2NlcHRzIGZyYW1lcw0KPiB3aXRoIHByZWFt YmxlIHN1cHByZXNzZWQNCj4gPiArICAjZGVmaW5lIEJNU1JfQVVUT05FR19DTVBMVCAgICAgICAg ICAgICAgMHgwMDIwICAvLy88ICAxID0NCj4gQXV0b25lZ290aWF0aW9uIGNvbXBsZXRlDQo+ID4g KyAgI2RlZmluZSBCTVNSX1JGICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLy8vPCAg MSA9IFJlbW90ZSBmYXVsdA0KPiA+ICsgICNkZWZpbmUgQk1TUl9BVVRPTkVHICAgICAgICAgICAg ICAgICAgICAweDAwMDggIC8vLzwgIDEgPSBBYmxlIHRvIHBlcmZvcm0NCj4gYXV0b25lZ290aWF0 aW9uDQo+ID4gKyAgI2RlZmluZSBCTVNSX0xJTktTVCAgICAgICAgICAgICAgICAgICAgIDB4MDAw NCAgLy8vPCAgMSA9IExpbmsgdXANCj4gPiArICAjZGVmaW5lIEJNU1JfSkFCQkVSX0RFVEVDVCAg ICAgICAgICAgICAgMHgwMDAyICAvLy88ICAxID0gamFiYmVyIGNvbmRpdGlvbg0KPiBkZXRlY3Rl ZA0KPiA+ICsgICNkZWZpbmUgQk1TUl9FWFRFTkRFRF9DQVBBQklMSVRZICAgICAgICAweDAwMDEg IC8vLzwgIDEgPSBFeHRlbmRlZA0KPiByZWdpc3RlciBjYXBhYmxlDQo+ID4gKw0KPiA+ICsjZGVm aW5lIFBIWV9BTkFSICAgICAgICAgICAgICAgICAgICAgICAgNCAgICAgICAvLy88ICBBdXRvbmVn b3RpYXRpb24gYWR2ZXJ0aXNlbWVudA0KPiByZWdpc3Rlcg0KPiA+ICsgICNkZWZpbmUgQU5fTlAg ICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8vLzwgIDEgPSBOZXh0IHBhZ2UgYXZh aWxhYmxlDQo+ID4gKyAgI2RlZmluZSBBTl9SRiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4 MjAwMCAgLy8vPCAgMSA9IFJlbW90ZSBmYXVsdCBpbmRpY2F0ZWQgYnkNCj4gbGluayBwYXJ0bmVy DQo+ID4gKyAgI2RlZmluZSBBTl9GQ1MgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAg Ly8vPCAgMSA9IEZsb3cgY29udHJvbCBhYmlsaXR5DQo+ID4gKyAgI2RlZmluZSBBTl9UNCAgICAg ICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLy8vPCAgMSA9IDEwMEJBU0UtVDQgc3VwcG9y dA0KPiA+ICsgICNkZWZpbmUgQU5fVFhfRkRYICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAg IC8vLzwgIDEgPSAxMDBCQVNFLVRYIEZ1bGwgZHVwbGV4DQo+ID4gKyAgI2RlZmluZSBBTl9UWF9I RFggICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLy8vPCAgMSA9IDEwMEJBU0UtVFggc3Vw cG9ydA0KPiA+ICsgICNkZWZpbmUgQU5fMTBfRkRYICAgICAgICAgICAgICAgICAgICAgICAweDAw NDAgIC8vLzwgIDEgPSAxMEJBU0UtVCBGdWxsIGR1cGxleA0KPiA+ICsgICNkZWZpbmUgQU5fMTBf SERYICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8vLzwgIDEgPSAxMEJBU0UtVCBzdXBw b3J0DQo+ID4gKyAgI2RlZmluZSBBTl9DU01BX0NEICAgICAgICAgICAgICAgICAgICAgIDB4MDAw MSAgLy8vPCAgMSA9IElFRUUgODAyLjMgQ1NNQS9DRA0KPiBzdXBwb3J0DQo+ID4gKw0KPiA+ICsj ZGVmaW5lIFBIWV9BTkxQQVIgICAgICAgICAgICAgICAgICAgICAgNSAgICAgICAvLy88ICBBdXRv bmVnb3RpYXRpb24gbGluayBwYXJ0ZXINCj4gYWJpbGl0eSByZWdpc3Rlcg0KPiA+ICsNCj4gPiAr I2RlZmluZSBQSFlfUEhZU1IgICAgICAgICAgICAgICAgICAgICAgIDB4MTENCj4gPiArICAjZGVm aW5lIFBIWVNSX1NQRUVEX01BU0sgICAgICAgICAgICAgICAgMHhDMDAwDQo+ID4gKyAgI2RlZmlu ZSBQSFlTUl8xMDAwICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMA0KPiA+ICsgICNkZWZpbmUg UEhZU1JfMTAwICAgICAgICAgICAgICAgICAgICAgICAweDQwMDANCj4gPiArICAjZGVmaW5lIFBI WVNSX0ZVTExEVVAgICAgICAgICAgICAgICAgICAgMHgyMDAwDQo+ID4gKyAgI2RlZmluZSBQSFlT Ul9MSU5LICAgICAgICAgICAgICAgICAgICAgIDB4NDAwDQo+ID4gKw0KPiA+ICtFRklfU1RBVFVT DQo+ID4gK0F4ODgxNzlQaHlSZWFkICgNCj4gPiArICBJTiBOSUNfREVWSUNFICogcE5pY0Rldmlj ZSwNCj4gPiArICBJTiBVSU5UOCBSZWdpc3RlckFkZHJlc3MsDQo+ID4gKyAgSU4gT1VUIFVJTlQx NiAqIHBQaHlEYXRhDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArQXg4 ODE3OVBoeVdyaXRlICgNCj4gPiArICBJTiBOSUNfREVWSUNFICogcE5pY0RldmljZSwNCj4gPiAr ICBJTiBVSU5UOCBSZWdpc3RlckFkZHJlc3MsDQo+ID4gKyAgSU4gVUlOVDE2IFBoeURhdGENCj4g PiArICApOw0KPiA+ICsNCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtBeDg4MTc5TWFjUmVhZCAoDQo+ ID4gKyAgSU4gIFVJTlQ4IE9mZnNldCwNCj4gPiArICBJTiAgVUlOVDggTGVuZ3RoLA0KPiA+ICsg IElOICBOSUNfREVWSUNFICogcE5pY0RldmljZSwNCj4gPiArICBJTiAgT1VUICBWT0lEICogcERh dGENCj4gPiArICApOw0KPiA+ICsNCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtBeDg4MTc5U2V0SUlu SW50ZXJ2YWwgKA0KPiA+ICsgIElOICBOSUNfREVWSUNFICogcE5pY0RldmljZSwNCj4gPiArICBJ TiAgVUlOVDggT2Zmc2V0DQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiAr QXg4ODE3OU1hY1dyaXRlICgNCj4gPiArICBJTiAgVUlOVDggT2Zmc2V0LA0KPiA+ICsgIElOICBV SU5UOCBMZW5ndGgsDQo+ID4gKyAgSU4gIE5JQ19ERVZJQ0UgKiBwTmljRGV2aWNlLA0KPiA+ICsg IElOICBPVVQgIFZPSUQgKiBwRGF0YQ0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICtFRklfU1RBVFVT DQo+ID4gK0F4ODgxNzlNYWNBZGRyZXNzR2V0ICgNCj4gPiArICBJTiBOSUNfREVWSUNFICogcE5p Y0RldmljZSwNCj4gPiArICBPVVQgVUlOVDggKiBwTWFjQWRkcmVzcw0KPiA+ICsgICk7DQo+ID4g Kw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0F4ODgxNzlNYWNBZGRyZXNzU2V0ICgNCj4gPiArICBJ TiBOSUNfREVWSUNFICogcE5pY0RldmljZSwNCj4gPiArICBPVVQgVUlOVDggKiBwTWFjQWRkcmVz cw0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICtCT09MRUFODQo+ID4gK0F4ODgxNzlHZXRMaW5rU3Rh dHVzICgNCj4gPiArICBJTiBOSUNfREVWSUNFICogcE5pY0RldmljZQ0KPiA+ICspOw0KPiA+ICsN Cj4gPiArRUZJX1NUQVRVUw0KPiA+ICtBeDg4MTc5QnVsa0luKA0KPiA+ICsgIElOIE5JQ19ERVZJ Q0UgKiBwTmljRGV2aWNlDQo+ID4gKyk7DQo+ID4gKw0KPiA+ICsNCj4gPiArI2VuZGlmICAvLyAg X0FYODgxNzlfSF8NCj4gPiBkaWZmIC0tZ2l0DQo+IGEvU2lsaWNvbi9BU0lYL0RyaXZlcnMvQnVz L1VzYi9Vc2JOZXR3b3JraW5nL0F4ODgxNzkvQXg4ODE3OS5jDQo+IGIvU2lsaWNvbi9BU0lYL0Ry aXZlcnMvQnVzL1VzYi9Vc2JOZXR3b3JraW5nL0F4ODgxNzkvQXg4ODE3OS5jDQo+ID4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjdiMmRiOWI3NDI4NQ0KPiA+ IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9TaWxpY29uL0FTSVgvRHJpdmVycy9CdXMvVXNiL1Vz Yk5ldHdvcmtpbmcvQXg4ODE3OS9BeDg4MTc5LmMNCj4gPiBAQCAtMCwwICsxLDEwMjYgQEANCj4g PiArIC8qKiBAZmlsZQ0KPiA+ICsgIEltcGxlbWVudCB0aGUgaW50ZXJmYWNlIHRvIHRoZSBBWDg4 MTc5IEV0aGVybmV0IGNvbnRyb2xsZXIuDQo+ID4gKw0KPiA+ICsgIFRoaXMgbW9kdWxlIGltcGxl bWVudHMgdGhlIGludGVyZmFjZSB0byB0aGUgQVNJWCBBWDg4MTc5DQo+ID4gKyAgVVNCIHRvIEV0 aGVybmV0IE1BQyB3aXRoIGludGVncmF0ZWQgMTAvMTAwIFBIWS4gIE5vdGUgdGhhdCB0aGlzDQo+ IGltcGxlbWVudGF0aW9uDQo+ID4gKyAgb25seSBzdXBwb3J0cyB0aGUgaW50ZWdyYXRlZCBQSFkg c2luY2Ugbm8gb3RoZXIgdGVzdCBjYXNlcyB3ZXJlDQo+IGF2YWlsYWJsZS4NCj4gPiArDQo+ID4g KyAgQ29weXJpZ2h0IChjKSAyMDExLCBJbnRlbCBDb3Jwb3JhdGlvbg0KPiA+ICsgIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gKw0KPiA+ICsqKi8NCj4g PiArDQo+ID4gKyNpbmNsdWRlICJBeDg4MTc5LmgiDQo+ID4gKw0KPiA+ICsNCj4gPiArLyoqDQo+ ID4gKyAgQ29tcHV0ZSB0aGUgQ1JDDQo+ID4gKw0KPiA+ICsgIEBwYXJhbSBbaW5dIHBNYWNBZGRy ZXNzICAgICAgQWRkcmVzcyBvZiBhIHNpeCBieXRlIGJ1ZmZlciB0byBjb250YWluaW5nDQo+IHRo ZSBNQUMgYWRkcmVzcy4NCj4gPiArDQo+ID4gKyAgQHJldHVybnMgVGhlIENSQy0zMiB2YWx1ZSBh c3NvY2lhdGVkIHdpdGggdGhpcyBNQUMgYWRkcmVzcw0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1VJ TlQzMg0KPiA+ICtBeDg4MTc5Q3JjICgNCj4NCj4gRG8gd2UgcmVhbGx5IG5lZWQgb3VyIG93biBD UkMgaW1wbGVtZW50YXRpb24/DQo+DQo+ID4gKyAgSU4gVUlOVDggKiBwTWFjQWRkcmVzcw0KPiA+ ICsgICkNCj4gPiArew0KPiA+ICsgIFVJTlQzMiBCaXROdW1iZXI7DQo+ID4gKyAgSU5UMzIgQ2Fy cnk7DQo+ID4gKyAgSU5UMzIgQ3JjOw0KPiA+ICsgIFVJTlQzMiBEYXRhOw0KPiA+ICsgIFVJTlQ4 ICogcEVuZDsNCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyAgV2FsayB0aGUgTUFDIGFkZHJl c3MNCj4gPiArICAvLw0KPiA+ICsgIENyYyA9IC0xOw0KPiA+ICsgIHBFbmQgPSAmcE1hY0FkZHJl c3NbIFBYRV9IV0FERFJfTEVOX0VUSEVSIF07DQo+ID4gKyAgd2hpbGUgKCBwRW5kID4gcE1hY0Fk ZHJlc3MgKSB7DQo+ID4gKyAgICBEYXRhID0gKnBNYWNBZGRyZXNzKys7DQo+ID4gKw0KPiA+ICsN Cj4gPiArICAgIC8vDQo+ID4gKyAgICAvLyAgQ1JDMzI6IHgzMiArIHgyNiArIHgyMyArIHgyMiAr IHgxNiArIHgxMiArIHgxMSArIHgxMCArIHg4ICsgeDcgKyB4NSArDQo+IHg0ICsgeDIgKyB4ICsg MQ0KPiA+ICsgICAgLy8NCj4gPiArICAgIC8vICAgICAgICAgIDEgMDAwMCAwMTAwIDExMDAgMDAw MSAwMDAxIDExMDEgMTAxMSAwMTExDQo+ID4gKyAgICAvLw0KPiA+ICsgICAgZm9yICggQml0TnVt YmVyID0gMDsgOCA+IEJpdE51bWJlcjsgQml0TnVtYmVyKysgKSB7DQo+ID4gKyAgICAgIENhcnJ5 ID0gKCggQ3JjID4+IDMxICkgJiAxICkgXiAoIERhdGEgJiAxICk7DQo+ID4gKyAgICAgIENyYyA8 PD0gMTsNCj4gPiArICAgICAgaWYgKCAwICE9IENhcnJ5ICkgew0KPiA+ICsgICAgICAgIENyYyBe PSAweDA0YzExZGI3Ow0KPiA+ICsgICAgICB9DQo+ID4gKyAgICAgIERhdGEgPj49IDE7DQo+ID4g KyAgICB9DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vICBSZXR1cm4gdGhl IENSQyB2YWx1ZQ0KPiA+ICsgIC8vDQo+ID4gKyAgcmV0dXJuIChVSU5UMzIpIENyYzsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgR2V0IHRoZSBNQUMgYWRkcmVzcw0KPiA+ICsNCj4g PiArICBUaGlzIHJvdXRpbmUgY2FsbHMgOjpBeDg4MTc5VXNiQ29tbWFuZCB0byByZXF1ZXN0IHRo ZSBNQUMNCj4gPiArICBhZGRyZXNzIGZyb20gdGhlIG5ldHdvcmsgYWRhcHRlci4NCj4gPiArDQo+ ID4gKyAgQHBhcmFtIFtpbl0gcE5pY0RldmljZSAgICAgICBQb2ludGVyIHRvIHRoZSBOSUNfREVW SUNFIHN0cnVjdHVyZQ0KPiA+ICsgIEBwYXJhbSBbb3V0XSBwTWFjQWRkcmVzcyAgICAgIEFkZHJl c3Mgb2YgYSBzaXggYnl0ZSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUNCj4gTUFDIGFkZHJlc3MuDQo+ ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgVGhlIE1BQyBhZGRyZXNz IGlzIGF2YWlsYWJsZS4NCj4gPiArICBAcmV0dmFsIG90aGVyICAgICAgICAgICAgICAgIFRoZSBN QUMgYWRkcmVzcyBpcyBub3QgdmFsaWQuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRV Uw0KPiA+ICtBeDg4MTc5TWFjQWRkcmVzc0dldCAoDQo+ID4gKyAgSU4gTklDX0RFVklDRSAqIHBO aWNEZXZpY2UsDQo+ID4gKyAgT1VUIFVJTlQ4ICogcE1hY0FkZHJlc3MNCj4gPiArICApDQo+ID4g K3sNCj4gPiArICBFRklfU1RBVFVTIFN0YXR1czsNCj4gPiArDQo+ID4gKyAgU3RhdHVzICA9IEF4 ODgxNzlNYWNSZWFkIChOT0RFX0lELA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg UFhFX0hXQUREUl9MRU5fRVRIRVIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBw TmljRGV2aWNlLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgcE1hY0FkZHJlc3Mp Ow0KPiA+ICsNCj4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioN Cj4gPiArICBTZXQgdGhlIE1BQyBhZGRyZXNzDQo+ID4gKw0KPiA+ICsgIFRoaXMgcm91dGluZSBj YWxscyA6OkF4ODgxNzlVc2JDb21tYW5kIHRvIHNldCB0aGUgTUFDIGFkZHJlc3MNCj4gPiArICBp biB0aGUgbmV0d29yayBhZGFwdGVyLg0KPiA+ICsNCj4gPiArICBAcGFyYW0gW2luXSBwTmljRGV2 aWNlICAgICAgIFBvaW50ZXIgdG8gdGhlIE5JQ19ERVZJQ0Ugc3RydWN0dXJlDQo+ID4gKyAgQHBh cmFtIFtpbl0gcE1hY0FkZHJlc3MgICAgICBBZGRyZXNzIG9mIGEgc2l4IGJ5dGUgYnVmZmVyIHRv IGNvbnRhaW5pbmcNCj4gdGhlIG5ldyBNQUMgYWRkcmVzcy4NCj4gPiArDQo+ID4gKyAgQHJldHZh bCBFRklfU1VDQ0VTUyAgICAgICAgICBUaGUgTUFDIGFkZHJlc3Mgd2FzIHNldC4NCj4gPiArICBA cmV0dmFsIG90aGVyICAgICAgICAgICAgICAgIFRoZSBNQUMgYWRkcmVzcyB3YXMgbm90IHNldC4N Cj4gPiArDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0F4ODgxNzlNYWNBZGRyZXNz U2V0ICgNCj4gPiArICBJTiBOSUNfREVWSUNFICogcE5pY0RldmljZSwNCj4gPiArICBPVVQgVUlO VDggKiBwTWFjQWRkcmVzcw0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEVGSV9TVEFUVVMgU3Rh dHVzOw0KPiA+ICsNCj4gPiArICBTdGF0dXMgID0gQXg4ODE3OU1hY1dyaXRlIChOT0RFX0lELA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBYRV9IV0FERFJfTEVOX0VUSEVSLA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBOaWNEZXZpY2UsDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcE1hY0FkZHJlc3MpOw0KPiA+ICsNCj4gPiArICByZXR1 cm4gU3RhdHVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBDbGVhciB0aGUgbXVs dGljYXN0IGhhc2ggdGFibGUNCj4gPiArDQo+ID4gKyAgQHBhcmFtIFtpbl0gcE5pY0RldmljZSAg ICAgICBQb2ludGVyIHRvIHRoZSBOSUNfREVWSUNFIHN0cnVjdHVyZQ0KPiA+ICsNCj4gPiArKiov DQo+ID4gK1ZPSUQNCj4gPiArQXg4ODE3OU11bHRpY2FzdENsZWFyICgNCj4gPiArICBJTiBOSUNf REVWSUNFICogcE5pY0RldmljZQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIGludCBpID0gMDsN Cj4gPiArICAvLw0KPiA+ICsgIC8vIENsZWFyIHRoZSBtdWx0aWNhc3QgaGFzaCB0YWJsZQ0KPiA+ ICsgIC8vDQo+ID4gKw0KPiA+ICsgIGZvciAoIGkgPSAwIDsgaSA8IDggOyBpKysgKQ0KPiA+ICsg ICAgICBwTmljRGV2aWNlLT5NdWx0aWNhc3RIYXNoW2ldID0gMDsNCj4gPiArfQ0KPiA+ICsvKioN Cj4gPiArICBFbmFibGUgYSBtdWx0aWNhc3QgYWRkcmVzcyBpbiB0aGUgbXVsdGljYXN0IGhhc2gg dGFibGUNCj4gPiArDQo+ID4gKyAgVGhpcyByb3V0aW5lIGNhbGxzIDo6QXg4ODE3OUNyYyB0byBj b21wdXRlIHRoZSBoYXNoIGJpdCBmb3INCj4gPiArICB0aGlzIE1BQyBhZGRyZXNzLg0KPiA+ICsN Cj4gPiArICBAcGFyYW0gW2luXSBwTmljRGV2aWNlICAgICAgIFBvaW50ZXIgdG8gdGhlIE5JQ19E RVZJQ0Ugc3RydWN0dXJlDQo+ID4gKyAgQHBhcmFtIFtpbl0gcE1hY0FkZHJlc3MgICAgICBBZGRy ZXNzIG9mIGEgc2l4IGJ5dGUgYnVmZmVyIHRvIGNvbnRhaW5pbmcNCj4gdGhlIE1BQyBhZGRyZXNz Lg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1ZPSUQNCj4gPiArQXg4ODE3OU11bHRpY2FzdFNldCAo DQo+ID4gKyAgSU4gTklDX0RFVklDRSAqIHBOaWNEZXZpY2UsDQo+ID4gKyAgSU4gVUlOVDggKiBw TWFjQWRkcmVzcw0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIFVJTlQzMiBDcmM7DQo+ID4gKyAg Ly8NCj4gPiArICAvLyBDb21wdXRlIHRoZSBDUkMgb24gdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MN Cj4gPiArICAvLw0KPiA+ICsgIENyYyA9IEF4ODgxNzlDcmMgKHBNYWNBZGRyZXNzKSA+PiAyNjsN Cj4gPiArICAvLw0KPiA+ICsgIC8vICBTZXQgdGhlIGJpdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBk ZXN0aW5hdGlvbiBhZGRyZXNzDQo+ID4gKyAgLy8NCj4gPiArICBwTmljRGV2aWNlLT5NdWx0aWNh c3RIYXNoIFsgQ3JjID4+IDMgXSB8PSAoIDE8PCAoQ3JjJiA3KSk7DQo+DQo+IE5vIHNwYWNlIGlu c2lkZSBbXSBvciBiZWZvcmUgWw0KPiBTcGFjZXMgYXJvdW5kIDw8IGFuZCAmDQo+DQo+DQo+ID4g K30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFN0YXJ0IHRoZSBsaW5rIG5lZ290aWF0aW9uDQo+ ID4gKw0KPiA+ICsgIFRoaXMgcm91dGluZSBjYWxscyA6OkF4ODgxNzlQaHlXcml0ZSB0byBzdGFy dCB0aGUgUEhZJ3MgbGluaw0KPiA+ICsgIG5lZ290aWF0aW9uLg0KPiA+ICsNCj4gPiArICBAcGFy YW0gW2luXSBwTmljRGV2aWNlICAgICAgIFBvaW50ZXIgdG8gdGhlIE5JQ19ERVZJQ0Ugc3RydWN0 dXJlDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgVGhlIGxpbmsg bmVnb3RpYXRpb24gd2FzIHN0YXJ0ZWQuDQo+ID4gKyAgQHJldHZhbCBvdGhlciAgICAgICAgICAg ICAgICBGYWlsZWQgdG8gc3RhcnQgdGhlIGxpbmsgbmVnb3RpYXRpb24uDQo+ID4gKw0KPiA+ICsq Ki8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtBeDg4MTc5TmVnb3RpYXRlTGlua1N0YXJ0ICgNCj4g PiArICBJTiBOSUNfREVWSUNFICogcE5pY0RldmljZQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsg IFVJTlQxNiBDb250cm9sID0gMDsNCj4gPiArICBFRklfU1RBVFVTIFN0YXR1czsNCj4gPiArDQo+ ID4gKyNpZiBGT1JDRV8xMDBNYnBzDQo+ID4gKyAgQXg4ODE3OVBoeVJlYWQgKCBwTmljRGV2aWNl LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgMHgwOSwNCj4gPiArICAgICAgICAgICAgICAgICAg ICZDb250cm9sICk7DQo+ID4gKyAgQ29udHJvbCAmPSAweEZDRkY7DQo+ID4gKyAgQXg4ODE3OVBo eVdyaXRlICggcE5pY0RldmljZSwgMHgwOSwgQ29udHJvbCApOw0KPiA+ICsjZW5kaWYNCj4gPiAr DQo+ID4gKyAgLy8NCj4gPiArICAvLyBTZXQgdGhlIGxpbmsgc3BlZWQgYW5kIGR1cGxleA0KPiA+ ICsgIC8vDQo+ID4gKyAgQ29udHJvbCA9IEJNQ1JfQVVUT05FR09USUFUSU9OX0VOQUJMRQ0KPiA+ ICsgICAgICAgICAgfCBCTUNSX1JFU1RBUlRfQVVUT05FR09USUFUSU9OOw0KPiA+ICsgIGlmICgg cE5pY0RldmljZS0+YjEwMDBNYnBzICkgew0KPiA+ICsgICAgQ29udHJvbCB8PSBCTUNSXzEwMDBN QlBTOw0KPiA+ICsgIH0gZWxzZSBpZiAoIHBOaWNEZXZpY2UtPmIxMDBNYnBzICkgew0KPiA+ICsg ICAgQ29udHJvbCB8PSBCTUNSXzEwME1CUFM7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAo IHBOaWNEZXZpY2UtPmJGdWxsRHVwbGV4ICkgew0KPiA+ICsgICAgQ29udHJvbCB8PSBCTUNSX0ZV TExfRFVQTEVYOw0KPiA+ICsgIH0NCj4gPiArICBTdGF0dXMgPSBBeDg4MTc5UGh5V3JpdGUgKCBw TmljRGV2aWNlLCBQSFlfQk1DUiwgQ29udHJvbCApOw0KPiA+ICsgIGlmICghRUZJX0VSUk9SKFN0 YXR1cykpDQo+ID4gKyAgICBnQlMtPlN0YWxsKDMwMDAwMDApOw0KPiA+ICsgIC8vDQo+ID4gKyAg Ly8gUmV0dXJuIHRoZSBvcGVyYXRpb24gc3RhdHVzDQo+ID4gKyAgLy8NCj4gPiArICByZXR1cm4g U3RhdHVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBDb21wbGV0ZSB0aGUgbmVn b3RpYXRpb24gb2YgdGhlIFBIWSBsaW5rDQo+ID4gKw0KPiA+ICsgIFRoaXMgcm91dGluZSBjYWxs cyA6OkF4ODgxNzlQaHlSZWFkIHRvIGRldGVybWluZSBpZiB0aGUNCj4gPiArICBsaW5rIG5lZ290 aWF0aW9uIGlzIGNvbXBsZXRlLg0KPiA+ICsNCj4gPiArICBAcGFyYW0gW2luXSBwTmljRGV2aWNl ICAgICAgIFBvaW50ZXIgdG8gdGhlIE5JQ19ERVZJQ0Ugc3RydWN0dXJlDQo+ID4gKyAgQHBhcmFt IFtpbiwgb3V0XSBwUG9sbENvdW50ICBBZGRyZXNzIG9mIG51bWJlciBvZiB0aW1lcyB0aGlzIHJv dXRpbmUNCj4gd2FzIHBvbGxlZA0KPiA+ICsgIEBwYXJhbSBbb3V0XSBwYkNvbXBsZXRlICAgICAg QWRkcmVzcyBvZiBib29sZWFuIHRvIHJlY2VpdmUgY29tcGxhdGUNCj4gc3RhdHVzLg0KPiA+ICsg IEBwYXJhbSBbb3V0XSBwYkxpbmtVcCAgICAgICAgQWRkcmVzcyBvZiBib29sZWFuIHRvIHJlY2Vp dmUgbGluayBzdGF0dXMsDQo+IFRSVUU9dXAuDQo+ID4gKyAgQHBhcmFtIFtvdXRdIHBiSGlTcGVl ZCAgICAgICBBZGRyZXNzIG9mIGJvb2xlYW4gdG8gcmVjZWl2ZSBsaW5rIHNwZWVkLA0KPiBUUlVF PTEwME1icHMuDQo+ID4gKyAgQHBhcmFtIFtvdXRdIHBiRnVsbER1cGxleCAgICBBZGRyZXNzIG9m IGJvb2xlYW4gdG8gcmVjZWl2ZSBsaW5rIGR1cGxleCwNCj4gVFJVRT1mdWxsLg0KPiA+ICsNCj4g PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgIFRoZSBNQUMgYWRkcmVzcyBpcyBhdmFp bGFibGUuDQo+ID4gKyAgQHJldHZhbCBvdGhlciAgICAgICAgICAgICAgICBUaGUgTUFDIGFkZHJl c3MgaXMgbm90IHZhbGlkLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiAr QXg4ODE3OU5lZ290aWF0ZUxpbmtDb21wbGV0ZSAoDQo+ID4gKyAgSU4gTklDX0RFVklDRSAqIHBO aWNEZXZpY2UsDQo+ID4gKyAgSU4gT1VUIFVJTlROICogcFBvbGxDb3VudCwNCj4gPiArICBPVVQg Qk9PTEVBTiAqIHBiQ29tcGxldGUsDQo+ID4gKyAgT1VUIEJPT0xFQU4gKiBwYkxpbmtVcCwNCj4g PiArICBPVVQgQk9PTEVBTiAqIHBiSGlTcGVlZCwNCj4gPiArICBPVVQgQk9PTEVBTiAqIHBiR2ln YVNwZWVkLA0KPiA+ICsgIE9VVCBCT09MRUFOICogcGJGdWxsRHVwbGV4DQo+ID4gKyAgKQ0KPiA+ ICt7DQo+ID4gKyAgVUlOVDE2IFBoeURhdGE7DQo+ID4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0K PiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vICBEZXRlcm1pbmUgaWYgdGhlIGxpbmsgaXMgdXAu DQo+ID4gKyAgLy8NCj4gPiArICAqcGJDb21wbGV0ZSA9IEZBTFNFOw0KPiA+ICsNCj4gPiArICAv Lw0KPiA+ICsgIC8vICBHZXQgdGhlIGxpbmsgc3RhdHVzDQo+ID4gKyAgLy8NCj4gPiArICBTdGF0 dXMgPSBBeDg4MTc5UGh5UmVhZCAoIHBOaWNEZXZpY2UsDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQSFlfUEhZU1IsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAm UGh5RGF0YSApOw0KPiA+ICsNCj4gPiArICBpZiAoICFFRklfRVJST1IgKCBTdGF0dXMgKSkgew0K PiA+ICsgICAgKnBiTGlua1VwID0gIChCT09MRUFOKSggMCAhPSAoIFBoeURhdGEgJiBQSFlTUl9M SU5LICkpOw0KPg0KPiBObyB5b2RhIHN0eWxlIGNvbXBhcmlzb25zIHBsZWFzZS4NCj4gTm8gcmVk dW5kYW50IGNhc3RzIG9mIGJvb2xlYW4gZXhwcmVzc2lvbnMgdG8gQk9PTEVBTg0KPg0KPiA+ICsg ICAgaWYgKCpwYkxpbmtVcCkgew0KPiA+ICsgICAgICAvLw0KPiA+ICsgICAgICAvLyAgRGV0ZXJt aW5lIGlmIHRoZSBhdXRvbmVnb3RpYXRpb24gaXMgY29tcGxldGUuDQo+ID4gKyAgICAgIC8vDQo+ ID4gKyAgICAgIFN0YXR1cyA9IEF4ODgxNzlQaHlSZWFkICggcE5pY0RldmljZSwNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFBIWV9CTVNSLA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJlBoeURhdGEgKTsNCj4gPiArICAgICAgaWYgKCAhRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQo+ID4gKyAgICAgICAgICAqcGJDb21wbGV0ZSA9ICAoQk9PTEVBTikoIDAgIT0gKCBQ aHlEYXRhICYNCj4gQk1TUl9BVVRPTkVHX0NNUExUICkpOw0KPiA+ICsNCj4gPiArICAgICAgICAg IGlmICggMCAhPSAqcGJDb21wbGV0ZSApIHsNCj4gPiArICAgICAgICAgICAgLy8NCj4gPiArICAg ICAgICAgICAgLy8gIEdldCB0aGUgcGFydG5lcnMgY2FwYWJpbGl0aWVzLg0KPiA+ICsgICAgICAg ICAgICAvLw0KPiA+ICsgICAgICAgICAgICBTdGF0dXMgPSBBeDg4MTc5UGh5UmVhZCAoIHBOaWNE ZXZpY2UsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEhZX1BI WVNSLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQaHlEYXRh ICk7DQo+ID4gKyAgICAgICAgICAgIGlmICggIUVGSV9FUlJPUiAoIFN0YXR1cyApKSB7DQo+ID4g KyAgICAgICAgICAgICAgLy8NCj4gPiArICAgICAgICAgICAgICAvLyAgQXV0b25lZ290aWF0aW9u IGlzIGNvbXBsZXRlDQo+ID4gKyAgICAgICAgICAgICAgLy8gIERldGVybWluZSB0aGUgbGluayBz cGVlZC4NCj4gPiArICAgICAgICAgICAgICAvLw0KPiA+ICsgICAgICAgICAgICAgICpwYkdpZ2FT cGVlZCA9IChCT09MRUFOKSAoKCBQaHlEYXRhICYgUEhZU1JfU1BFRURfTUFTSyApDQo+ID09IFBI WVNSXzEwMDAgKTsNCj4gPiArICAgICAgICAgICAgICAqcGJIaVNwZWVkID0gKEJPT0xFQU4pKCgg UGh5RGF0YSAmIFBIWVNSX1NQRUVEX01BU0sgKSA9PQ0KPiBQSFlTUl8xMDAgKTsNCj4gPiArDQo+ ID4gKyAgICAgICAgICAgICAgLy8NCj4gPiArICAgICAgICAgICAgICAvLyAgRGV0ZXJtaW5lIHRo ZSBsaW5rIGR1cGxleC4NCj4gPiArICAgICAgICAgICAgICAvLw0KPiA+ICsgICAgICAgICAgICAg ICpwYkZ1bGxEdXBsZXggPSAoQk9PTEVBTikoIChQaHlEYXRhICYgUEhZU1JfRlVMTERVUCkgPT0N Cj4gUEhZU1JfRlVMTERVUCk7DQo+ID4gKyAgICAgICAgICB9DQo+ID4gKyAgICAgICAgfQ0KPiA+ ICsgICAgICB9DQo+ID4gKyAgICB9DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArDQo+ID4gKyAgLy8N Cj4gPiArICAvLyBSZXR1cm4gdGhlIG9wZXJhdGlvbiBzdGF0dXMNCj4gPiArICAvLw0KPiA+ICsg IHJldHVybiBTdGF0dXM7DQo+ID4gK30NCj4gPiArDQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBS ZWFkIGEgcmVnaXN0ZXIgZnJvbSB0aGUgUEhZDQo+ID4gKw0KPiA+ICsgIFRoaXMgcm91dGluZSBj YWxscyA6OkF4ODgxNzlVc2JDb21tYW5kIHRvIHJlYWQgYSBQSFkgcmVnaXN0ZXIuDQo+ID4gKw0K PiA+ICsgIEBwYXJhbSBbaW5dIHBOaWNEZXZpY2UgICAgICAgUG9pbnRlciB0byB0aGUgTklDX0RF VklDRSBzdHJ1Y3R1cmUNCj4gPiArICBAcGFyYW0gW2luXSBSZWdpc3RlckFkZHJlc3MgIE51bWJl ciBvZiB0aGUgcmVnaXN0ZXIgdG8gcmVhZC4NCj4gPiArICBAcGFyYW0gW2luLCBvdXRdIHBQaHlE YXRhICAgIEFkZHJlc3Mgb2YgYSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgUEhZDQo+IHJlZ2lzdGVy IHZhbHVlDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgVGhlIFBI WSBkYXRhIGlzIGF2YWlsYWJsZS4NCj4gPiArICBAcmV0dmFsIG90aGVyICAgICAgICAgICAgICAg IFRoZSBQSFkgZGF0YSBpcyBub3QgdmFsaWQuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NU QVRVUw0KPiA+ICtBeDg4MTc5UGh5UmVhZCAoDQo+ID4gKyAgSU4gTklDX0RFVklDRSAqIHBOaWNE ZXZpY2UsDQo+ID4gKyAgSU4gVUlOVDggUmVnaXN0ZXJBZGRyZXNzLA0KPiA+ICsgIElOIE9VVCBV SU5UMTYgKiBwUGh5RGF0YQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIFVTQl9ERVZJQ0VfUkVR VUVTVCBTZXR1cE1zZzsNCj4gPiArICBFRklfU1RBVFVTIFN0YXR1czsNCj4gPiArDQo+ID4gKyAg Ly8NCj4gPiArICAvLyAgUmVhZCB0aGUgUEhZIHJlZ2lzdGVyIGFkZHJlc3MuDQo+ID4gKyAgLy8N Cj4gPiArICBTZXR1cE1zZy5SZXF1ZXN0VHlwZSA9IFVTQl9FTkRQT0lOVF9ESVJfSU4NCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICB8IFVTQl9SRVFfVFlQRV9WRU5ET1INCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICB8IFVTQl9UQVJHRVRfREVWSUNFOw0KPiA+ICsgIFNldHVwTXNnLlJl cXVlc3QgPSBBQ0NFU1NfUEhZOw0KPiA+ICsgIFNldHVwTXNnLlZhbHVlID0gcE5pY0RldmljZS0+ UGh5SWQ7DQo+ID4gKyAgU2V0dXBNc2cuSW5kZXggPSBSZWdpc3RlckFkZHJlc3M7DQo+ID4gKyAg U2V0dXBNc2cuTGVuZ3RoID0gc2l6ZW9mICggKnBQaHlEYXRhICk7DQo+ID4gKyAgU3RhdHVzID0g QXg4ODE3OVVzYkNvbW1hbmQgKCBwTmljRGV2aWNlLA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJlNldHVwTXNnLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcFBoeURhdGEgKTsNCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyAgUmV0dXJuIHRoZSBv cGVyYXRpb24gc3RhdHVzLg0KPiA+ICsgIC8vDQo+ID4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFdyaXRlIHRvIGEgUEhZIHJlZ2lzdGVy DQo+ID4gKw0KPiA+ICsgIFRoaXMgcm91dGluZSBjYWxscyA6OkF4ODgxNzlVc2JDb21tYW5kIHRv IHdyaXRlIGEgUEhZIHJlZ2lzdGVyLg0KPiA+ICsNCj4gPiArICBAcGFyYW0gW2luXSBwTmljRGV2 aWNlICAgICAgIFBvaW50ZXIgdG8gdGhlIE5JQ19ERVZJQ0Ugc3RydWN0dXJlDQo+ID4gKyAgQHBh cmFtIFtpbl0gUmVnaXN0ZXJBZGRyZXNzICBOdW1iZXIgb2YgdGhlIHJlZ2lzdGVyIHRvIHJlYWQu DQo+ID4gKyAgQHBhcmFtIFtpbl0gUGh5RGF0YSAgICAgICAgICBBZGRyZXNzIG9mIGEgYnVmZmVy IHRvIHJlY2VpdmUgdGhlIFBIWQ0KPiByZWdpc3RlciB2YWx1ZQ0KPiA+ICsNCj4gPiArICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgICAgIFRoZSBQSFkgZGF0YSB3YXMgd3JpdHRlbi4NCj4gPiAr ICBAcmV0dmFsIG90aGVyICAgICAgICAgICAgICAgIEZhaWxlZCB0byB3d3JpdGUgdGhlIFBIWSBy ZWdpc3Rlci4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0F4ODgxNzlQ aHlXcml0ZSAoDQo+ID4gKyAgSU4gTklDX0RFVklDRSAqIHBOaWNEZXZpY2UsDQo+ID4gKyAgSU4g VUlOVDggUmVnaXN0ZXJBZGRyZXNzLA0KPiA+ICsgIElOIFVJTlQxNiBQaHlEYXRhDQo+ID4gKyAg KQ0KPiA+ICt7DQo+ID4gKyAgVVNCX0RFVklDRV9SRVFVRVNUIFNldHVwTXNnOw0KPiA+ICsgIEVG SV9TVEFUVVMgU3RhdHVzOw0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vICBXcml0ZSB0aGUg UEhZIHJlZ2lzdGVyDQo+ID4gKyAgLy8NCj4gPiArICBTZXR1cE1zZy5SZXF1ZXN0VHlwZSA9IFVT Ql9SRVFfVFlQRV9WRU5ET1INCj4gPiArICAgICAgICAgICAgICAgICAgICAgICB8IFVTQl9UQVJH RVRfREVWSUNFOw0KPiA+ICsgIFNldHVwTXNnLlJlcXVlc3QgPSBBQ0NFU1NfUEhZOw0KPiA+ICsg IFNldHVwTXNnLlZhbHVlID0gcE5pY0RldmljZS0+UGh5SWQ7DQo+ID4gKyAgU2V0dXBNc2cuSW5k ZXggPSBSZWdpc3RlckFkZHJlc3M7DQo+ID4gKyAgU2V0dXBNc2cuTGVuZ3RoID0gc2l6ZW9mICgg UGh5RGF0YSApOw0KPiA+ICsgIFN0YXR1cyA9IEF4ODgxNzlVc2JDb21tYW5kICggcE5pY0Rldmlj ZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZTZXR1cE1zZywNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQaHlEYXRhICk7DQo+ID4gKyAgLy8NCj4g PiArICAvLyAgUmV0dXJuIHRoZSBvcGVyYXRpb24gc3RhdHVzLg0KPiA+ICsgIC8vDQo+ID4gKyAg cmV0dXJuIFN0YXR1czsNCj4gPiArfQ0KPiA+ICsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFJl c2V0IHRoZSBBWDg4MTc5DQo+ID4gKw0KPiA+ICsgIFRoaXMgcm91dGluZSB1c2VzIDo6QXg4ODE3 OVVzYkNvbW1hbmQgdG8gcmVzZXQgdGhlIG5ldHdvcmsNCj4gPiArICBhZGFwdGVyLiAgVGhpcyBy b3V0aW5lIGFsc28gdXNlcyA6OkF4ODgxNzlQaHlXcml0ZSB0byByZXNldA0KPiA+ICsgIHRoZSBQ SFkuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbSBbaW5dIHBOaWNEZXZpY2UgICAgICAgUG9pbnRlciB0 byB0aGUgTklDX0RFVklDRSBzdHJ1Y3R1cmUNCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgICAgICBUaGUgTUFDIGFkZHJlc3MgaXMgYXZhaWxhYmxlLg0KPiA+ICsgIEByZXR2 YWwgb3RoZXIgICAgICAgICAgICAgICAgVGhlIE1BQyBhZGRyZXNzIGlzIG5vdCB2YWxpZC4NCj4g PiArDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0F4ODgxNzlSZXNldCAoDQo+ID4g KyAgSU4gTklDX0RFVklDRSAqIHBOaWNEZXZpY2UNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBF RklfU1RBVFVTIFN0YXR1czsNCj4gPiArICBVSU5UMTYgIHZhbDsNCj4gPiArICBVSU5UOCB2YWw4 Ow0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBBeDg4MTc5U2V0SUluSW50ZXJ2YWwocE5pY0Rldmlj ZSwgMHhmZik7DQo+ID4gKw0KPiA+ICsgIGlmIChFRklfRVJST1IoU3RhdHVzKSkgZ290byBlcnI7 DQo+ID4gKw0KPiA+ICsgIHZhbDggPSAwOw0KPiA+ICsgIFN0YXR1cyAgPSBBeDg4MTc5TWFjUmVh ZCAoUExTUiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih2YWw4KSwN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBOaWNEZXZpY2UsDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmdmFsOCk7DQo+ID4gKw0KPiA+ICsgIGlmIChFRklfRVJS T1IoU3RhdHVzKSkgZ290byBlcnI7DQo+ID4gKw0KPiA+ICsgIGlmICh2YWw4ICYgUExTUl9VU0Jf U1MpDQo+ID4gKyAgICBwTmljRGV2aWNlLT51c2JNYXhQa3RTaXplID0gMTAyNDsNCj4gPiArICBl bHNlDQo+ID4gKyAgICBwTmljRGV2aWNlLT51c2JNYXhQa3RTaXplID0gNTEyOw0KPiA+ICsNCj4g PiArICB2YWwgPSAwOw0KPiA+ICsgIFN0YXR1cyA9IEF4ODgxNzlNYWNXcml0ZSAoIFBIWVBXUlJT VENUTCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKHZhbCksDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcE5pY0RldmljZSwNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmdmFsKTsNCj4gPiArDQo+ID4gKyAgaWYgKEVGSV9FUlJP UihTdGF0dXMpKSBnb3RvIGVycjsNCj4gPiArDQo+ID4gKyAgZ0JTLT5TdGFsbCAoIDEwMDAwICk7 DQo+ID4gKw0KPiA+ICsgIHZhbCA9ICBQSFlQV1JSU1RDVExfSVBSTDsNCj4gPiArICBTdGF0dXMg PSBBeDg4MTc5TWFjV3JpdGUgKCBQSFlQV1JSU1RDVEwsDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZW9mICh2YWwpLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBOaWNEZXZpY2UsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZhbCk7 DQo+ID4gKw0KPiA+ICsgIGlmIChFRklfRVJST1IoU3RhdHVzKSkgZ290byBlcnI7DQo+ID4gKw0K PiA+ICsgIGdCUy0+U3RhbGwgKCAyMDAwMDAgKTsNCj4gPiArDQo+ID4gKyAgdmFsID0gQ0xLU0VM RUNUX0JDUyB8IENMS1NFTEVDVF9BQ1M7DQo+ID4gKyAgU3RhdHVzID0gQXg4ODE3OU1hY1dyaXRl ICggQ0xLU0VMRUNULA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcE5pY0RldmljZSwNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmdmFsKTsNCj4gPiArDQo+ID4gKyAgaWYgKEVGSV9FUlJPUihT dGF0dXMpKSBnb3RvIGVycjsNCj4gPiArDQo+ID4gKyAgZ0JTLT5TdGFsbCAoIDEwMDAwMCApOw0K PiA+ICsNCj4gPiArICB2YWwgPSAweDUyOw0KPiA+ICsgIFN0YXR1cyA9IEF4ODgxNzlNYWNXcml0 ZSAoIFBBVVNFX1dBVEVSTFZMX0hJR0gsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTmljRGV2aWNlLA0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YWwpOw0KPiA+ICsNCj4gPiArICBpZiAo RUZJX0VSUk9SKFN0YXR1cykpIGdvdG8gZXJyOw0KPiA+ICsNCj4gPiArICB2YWwgPSAweDM0Ow0K PiA+ICsgIFN0YXR1cyA9IEF4ODgxNzlNYWNXcml0ZSAoIFBBVVNFX1dBVEVSTFZMX0xPVywNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHBOaWNEZXZpY2UsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJnZhbCk7DQo+ID4gKw0KPiA+ICsgIGlmIChFRklfRVJST1IoU3RhdHVzKSkgZ290byBlcnI7 DQo+ID4gKw0KPiA+ICsgIHZhbCA9IFJYQklOUUNUUkxfVElNRU4gfCBSWEJJTlFDVFJMX0lGR0VO IHwgUlhCSU5RQ1RSTF9TSVpFTjsNCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gIEF4ODgxNzlNYWNX cml0ZSAoIFJYQklOUUNUUkwsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4 MDEsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBOaWNEZXZpY2UsDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YWwpOw0KPiA+ICsNCj4gPiArICBpZiAo RUZJX0VSUk9SKFN0YXR1cykpIGdvdG8gZXJyOw0KPiA+ICsNCj4gPiArICB2YWwgPSAwOw0KPiA+ ICsgIFN0YXR1cyA9ICBBeDg4MTc5TWFjV3JpdGUgKCBSWEJJTlFUSU1FUkwsDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHBOaWNEZXZpY2UsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZ2YWwpOw0KPiA+ICsNCj4gPiArICBpZiAoRUZJX0VSUk9SKFN0YXR1cykpIGdvdG8gZXJyOw0K PiA+ICsNCj4gPiArICB2YWwgPSAwOw0KPiA+ICsgIFN0YXR1cyA9ICBBeDg4MTc5TWFjV3JpdGUg KCBSWEJJTlFUSU1FUkgsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEs DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBOaWNEZXZpY2UsDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YWwpOw0KPiA+ICsNCj4gPiArICBpZiAoRUZJ X0VSUk9SKFN0YXR1cykpIGdvdG8gZXJyOw0KPiA+ICsNCj4gPiArICB2YWwgPSAxMjsgLy9BWDg4 MTc5X0JVTEtJTl9TSVpFX0lOSyAtIDE7DQo+ID4gKyAgU3RhdHVzID0gIEF4ODgxNzlNYWNXcml0 ZSAoIFJYQklOUVNJWkUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEs DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBOaWNEZXZpY2UsDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YWwpOw0KPiA+ICsNCj4gPiArICBpZiAoRUZJ X0VSUk9SKFN0YXR1cykpIGdvdG8gZXJyOw0KPiA+ICsNCj4gPiArICB2YWwgPSAweDBGOw0KPiA+ ICsgIFN0YXR1cyA9ICBBeDg4MTc5TWFjV3JpdGUgKCBSWEJJTlFJRkcsDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDB4MDEsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHBOaWNEZXZpY2UsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2 YWwpOw0KPiA+ICsNCj4gPiArZXJyOg0KPg0KPiBMZWFkaW5nIHVwcGVyY2FzZSBmb3IgbGFiZWxz IHBsZWFzZQ0KPg0KPiA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gK30NCj4gPiArDQo+ID4gK0VG SV9TVEFUVVMNCj4gPiArQXg4ODE3OVJ4Q29udHJvbCAoDQo+ID4gKyAgSU4gTklDX0RFVklDRSAq IHBOaWNEZXZpY2UsDQo+ID4gKyAgSU4gVUlOVDMyIFJ4RmlsdGVyDQo+ID4gKyAgKQ0KPiA+ICt7 DQo+ID4gKyAgVUlOVDE2IE1lZGl1bVN0YXR1czsNCj4gPiArICBVSU5UMTYgUnhDb250cm9sID0g MDsNCj4gPiArICBFRklfU1RBVFVTIFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KPiA+ICsgIC8vDQo+ ID4gKyAgLy8gRW5hYmxlIHRoZSByZWNlaXZlciBpZiBzb21ldGhpbmcgaXMgdG8gYmUgcmVjZWl2 ZWQNCj4gPiArICAvLw0KPiA+ICsgIGlmICggMCAhPSBSeEZpbHRlciApIHsNCj4gPiArICAgIC8v DQo+ID4gKyAgICAvLyAgRW5hYmxlIHRoZSByZWNlaXZlcg0KPiA+ICsgICAgLy8NCj4gPiArICAg IFN0YXR1cyAgPSBBeDg4MTc5TWFjUmVhZCAoTUVESVVNU1RTTU9ELA0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplb2YgKCBNZWRpdW1TdGF0dXMgKSwNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcE5pY0RldmljZSwNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJk1lZGl1bVN0YXR1cyk7DQo+ID4gKw0KPiA+ICsgICAgaWYgKCAhRUZJ X0VSUk9SICggU3RhdHVzICkgJiYgcE5pY0RldmljZS0+Q3VyTWVkaXVtU3RhdHVzICE9DQo+IE1l ZGl1bVN0YXR1cykgew0KPiA+ICsgICAgICAgIE1lZGl1bVN0YXR1cyA9IE1FRElVTVNUU01PRF9S RSB8IE1FRElVTVNUU01PRF9PTkU7DQo+ID4gKyAgICAgICAgaWYgKCBwTmljRGV2aWNlLT5iRnVs bER1cGxleCApIHsNCj4gPiArICAgICAgICAgIE1lZGl1bVN0YXR1cyB8PSBNRURJVU1TVFNNT0Rf VEZDIHwgTUVESVVNU1RTTU9EX1JGQyB8DQo+IE1FRElVTVNUU01PRF9GRDsNCj4gPiArICAgICAg ICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAgTWVkaXVtU3RhdHVzICY9IH4oTUVESVVNU1RTTU9E X1RGQyB8IE1FRElVTVNUU01PRF9SRkMNCj4gfCBNRURJVU1TVFNNT0RfRkQpOw0KPiA+ICsgICAg ICAgIH0NCj4gPiArICAgICAgICBpZiAoIHBOaWNEZXZpY2UtPmIxMDAwTWJwcyApIHsNCj4gPiAr ICAgICAgICAgIE1lZGl1bVN0YXR1cyB8PSBNRURJVU1TVFNNT0RfR007DQo+ID4gKyAgICAgICAg ICBNZWRpdW1TdGF0dXMgfD0gTUVESVVNU1RTTU9EX0VOQ0s7DQo+ID4gKyAgICAgICAgICBNZWRp dW1TdGF0dXMgJj0gfk1FRElVTVNUU01PRF9QUzsNCj4gPiArICAgICAgICB9IGVsc2Ugew0KPiA+ ICsgICAgICAgICAgTWVkaXVtU3RhdHVzICY9IH5NRURJVU1TVFNNT0RfR007DQo+ID4gKyAgICAg ICAgICBNZWRpdW1TdGF0dXMgJj0gfk1FRElVTVNUU01PRF9FTkNLOw0KPiA+ICsgICAgICAgICAg aWYgKCBwTmljRGV2aWNlLT5iMTAwTWJwcyApIHsNCj4gPiArICAgICAgICAgICAgTWVkaXVtU3Rh dHVzIHw9IE1FRElVTVNUU01PRF9QUzsNCj4gPiArICAgICAgICAgIH0gIGVsc2Ugew0KPiA+ICsg ICAgICAgICAgICBNZWRpdW1TdGF0dXMgJj0gfk1FRElVTVNUU01PRF9QUzsNCj4gPiArICAgICAg ICAgIH0NCj4gPiArICAgICAgICB9DQo+ID4gKyAgICAgICAgU3RhdHVzICA9IEF4ODgxNzlNYWNX cml0ZSAoTUVESVVNU1RTTU9ELA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVvZiAoIE1lZGl1bVN0YXR1cyApLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHBOaWNEZXZpY2UsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJk1lZGl1bVN0YXR1cyk7DQo+ID4gKyAgICAgICAgaWYgKCAhRUZJX0VSUk9SICgg U3RhdHVzICkpDQo+ID4gKyAgICAgICAgICBwTmljRGV2aWNlLT5DdXJNZWRpdW1TdGF0dXMgPSBN ZWRpdW1TdGF0dXM7DQo+ID4gKyAgICB9DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBSeENvbnRy b2wgPSBSWENUTF9TTyB8IFJYQ1RMX0lQRTsNCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyAg RW5hYmxlIG11bHRpY2FzdCBpZiByZXF1ZXN0ZWQNCj4gPiArICAvLw0KPiA+ICsgIGlmICggMCAh PSAoIFJ4RmlsdGVyICYgRUZJX1NJTVBMRV9ORVRXT1JLX1JFQ0VJVkVfTVVMVElDQVNUICkpIHsN Cj4gPiArICAgIFJ4Q29udHJvbCB8PSBSWENUTF9BTTsNCj4gPiArICAgIC8vDQo+ID4gKyAgICAv LyAgVXBkYXRlIHRoZSBtdWx0aWNhc3QgaGFzaCB0YWJsZQ0KPiA+ICsgICAgLy8NCj4gPiArICAg IFN0YXR1cyAgPSBBeDg4MTc5TWFjV3JpdGUgKE1VTENBVEZMVEFSUlksDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA4LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcE5pY0RldmljZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZw TmljRGV2aWNlLT5NdWx0aWNhc3RIYXNoICk7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAvLw0K PiA+ICsgIC8vICBFbmFibGUgYWxsIG11bHRpY2FzdCBpZiByZXF1ZXN0ZWQNCj4gPiArICAvLw0K PiA+ICsgIGlmICggMCAhPSAoIFJ4RmlsdGVyICYNCj4gRUZJX1NJTVBMRV9ORVRXT1JLX1JFQ0VJ VkVfUFJPTUlTQ1VPVVNfTVVMVElDQVNUICkpIHsNCj4gPiArICAgIFJ4Q29udHJvbCB8PSBSWENU TF9BTUFMTDsNCj4gPiArICB9DQo+ID4gKyAgLy8NCj4gPiArICAvLyAgRW5hYmxlIGJyb2FkY2Fz dCBpZiByZXF1ZXN0ZWQNCj4gPiArICAvLw0KPiA+ICsgIGlmICggMCAhPSAoIFJ4RmlsdGVyICYg RUZJX1NJTVBMRV9ORVRXT1JLX1JFQ0VJVkVfQlJPQURDQVNUICkpIHsNCj4gPiArICAgIFJ4Q29u dHJvbCB8PSBSWENUTF9BQjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8g IEVuYWJsZSBwcm9taXNjdW91cyBtb2RlIGlmIHJlcXVlc3RlZA0KPiA+ICsgIC8vDQo+ID4gKyAg aWYgKCAwICE9ICggUnhGaWx0ZXIgJiBFRklfU0lNUExFX05FVFdPUktfUkVDRUlWRV9QUk9NSVND VU9VUyApKSB7DQo+ID4gKyAgICBSeENvbnRyb2wgfD0gUlhDVExfUFJPOw0KPiA+ICsgIH0NCj4g PiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyAgVXBkYXRlIHRoZSByZWNlaXZlciBjb250cm9sDQo+ ID4gKyAgLy8NCj4gPiArICBpZiAocE5pY0RldmljZS0+Q3VyUnhDb250cm9sICE9IFJ4Q29udHJv bCkgew0KPiA+ICsgICAgU3RhdHVzICA9IEF4ODgxNzlNYWNXcml0ZSAoUlhDVEwsDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyLA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcE5pY0RldmljZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZSeENvbnRyb2wpOw0KPiA+ICsgICAgaWYgKCAhRUZJX0VSUk9SICggU3RhdHVzICkp DQo+ID4gKyAgICAgIHBOaWNEZXZpY2UtPkN1clJ4Q29udHJvbCA9IFJ4Q29udHJvbDsNCj4gPiAr ICB9DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gUmV0dXJuIHRoZSBvcGVyYXRpb24gc3Rh dHVzDQo+ID4gKyAgLy8NCj4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtFRklfU1RBVFVTDQo+ID4gK0F4ODgxNzlSZWxvYWRTcm9tICAoDQo+ID4gKyAgSU4gTklDX0RF VklDRSAqIHBOaWNEZXZpY2UNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RBVFVTIFN0 YXR1czsNCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gRUZJX1VOU1VQUE9SVEVEOw0KPiA+ICsgIHJl dHVybiBTdGF0dXM7DQo+ID4gKw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBSZWFk IGFuIFNST00gbG9jYXRpb24NCj4gPiArDQo+ID4gKyAgVGhpcyByb3V0aW5lIGNhbGxzIDo6QXg4 ODE3OVVzYkNvbW1hbmQgdG8gcmVhZCBkYXRhIGZyb20gdGhlDQo+ID4gKyAgU1JPTS4NCj4gPiAr DQo+ID4gKyAgQHBhcmFtIFtpbl0gcE5pY0RldmljZSAgICAgICBQb2ludGVyIHRvIHRoZSBOSUNf REVWSUNFIHN0cnVjdHVyZQ0KPiA+ICsgIEBwYXJhbSBbaW5dIEFkZHJlc3MgICAgICAgICAgU1JP TSBhZGRyZXNzDQo+ID4gKyAgQHBhcmFtIFtvdXRdIHBEYXRhICAgICAgICAgICBCdWZmZXIgdG8g cmVjZWl2ZSB0aGUgZGF0YQ0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg ICAgIFRoZSByZWFkIHdhcyBzdWNjZXNzZnVsDQo+ID4gKyAgQHJldHZhbCBvdGhlciAgICAgICAg ICAgICAgICBUaGUgcmVhZCBmYWlsZWQNCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVT DQo+ID4gK0F4ODgxNzlTcm9tUmVhZCAoDQo+ID4gKyAgSU4gTklDX0RFVklDRSAqIHBOaWNEZXZp Y2UsDQo+ID4gKyAgSU4gVUlOVDMyIEFkZHJlc3MsDQo+ID4gKyAgT1VUIFVJTlQxNiAqIHBEYXRh DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1NUQVRVUyBTdGF0dXM7DQo+ID4gKw0KPiA+ ICsgIFN0YXR1cyA9IEVGSV9VTlNVUFBPUlRFRDsNCj4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0F4ODgxNzlFbmFibGVTcm9tV3JpdGUg ICgNCj4gPiArICBJTiBOSUNfREVWSUNFICogcE5pY0RldmljZQ0KPiA+ICsgICkNCj4gPiArew0K PiA+ICsgIEVGSV9TVEFUVVMgU3RhdHVzOw0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBFRklfVU5T VVBQT1JURUQ7DQo+ID4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPiArfQ0KPiA+ICsNCj4gPiArDQo+ ID4gK0VGSV9TVEFUVVMNCj4gPiArQXg4ODE3OURpc2FibGVTcm9tV3JpdGUgICgNCj4gPiArICBJ TiBOSUNfREVWSUNFICogcE5pY0RldmljZQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEVGSV9T VEFUVVMgU3RhdHVzOw0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBFRklfVU5TVVBQT1JURUQ7DQo+ ID4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgV3Jp dGUgYW4gU1JPTSBsb2NhdGlvbg0KPiA+ICsNCj4gPiArICBUaGlzIHJvdXRpbmUgY2FsbHMgOjpB eDg4MTc5VXNiQ29tbWFuZCB0byB3cml0ZSBkYXRhIGZyb20gdGhlDQo+ID4gKyAgU1JPTS4NCj4g PiArDQo+ID4gKyAgQHBhcmFtIFtpbl0gcE5pY0RldmljZSAgICAgICBQb2ludGVyIHRvIHRoZSBO SUNfREVWSUNFIHN0cnVjdHVyZQ0KPiA+ICsgIEBwYXJhbSBbaW5dIEFkZHJlc3MgICAgICAgICAg U1JPTSBhZGRyZXNzDQo+ID4gKyAgQHBhcmFtIFtvdXRdIHBEYXRhICAgICAgICAgICBCdWZmZXIg b2YgZGF0YSB0byB3cml0ZQ0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg ICAgIFRoZSB3cml0ZSB3YXMgc3VjY2Vzc2Z1bA0KPiA+ICsgIEByZXR2YWwgb3RoZXIgICAgICAg ICAgICAgICAgVGhlIHdyaXRlIGZhaWxlZA0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFU VVMNCj4gPiArQXg4ODE3OVNyb21Xcml0ZSAoDQo+ID4gKyAgSU4gTklDX0RFVklDRSAqIHBOaWNE ZXZpY2UsDQo+ID4gKyAgSU4gVUlOVDMyIEFkZHJlc3MsDQo+ID4gKyAgSU4gVUlOVDE2ICogcERh dGENCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RBVFVTIFN0YXR1czsNCj4gPiArDQo+ ID4gKyAgU3RhdHVzID0gRUZJX1VOU1VQUE9SVEVEOw0KPiA+ICsgIHJldHVybiBTdGF0dXM7DQo+ ID4gK30NCj4gPiArDQo+ID4gKw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgU2VuZCBhIGNvbW1h bmQgdG8gdGhlIFVTQiBkZXZpY2UuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbSBbaW5dIHBOaWNEZXZp Y2UgICAgICAgUG9pbnRlciB0byB0aGUgTklDX0RFVklDRSBzdHJ1Y3R1cmUNCj4gPiArICBAcGFy YW0gW2luXSBwUmVxdWVzdCAgICAgICAgIFBvaW50ZXIgdG8gdGhlIHJlcXVlc3Qgc3RydWN0dXJl DQo+ID4gKyAgQHBhcmFtIFtpbiwgb3V0XSBwQnVmZmVyICAgICBEYXRhIGJ1ZmZlciBhZGRyZXNz DQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgVGhlIFVTQiB0cmFu c2ZlciB3YXMgc3VjY2Vzc2Z1bA0KPiA+ICsgIEByZXR2YWwgb3RoZXIgICAgICAgICAgICAgICAg VGhlIFVTQiB0cmFuc2ZlciBmYWlsZWQNCj4gPiArDQo+ID4gKyoqLw0KPiA+ICsNCj4gPiArRUZJ X1NUQVRVUw0KPiA+ICtBeDg4MTc5VXNiQ29tbWFuZCAoDQo+ID4gKyAgSU4gTklDX0RFVklDRSAq IHBOaWNEZXZpY2UsDQo+ID4gKyAgSU4gVVNCX0RFVklDRV9SRVFVRVNUICogcFJlcXVlc3QsDQo+ ID4gKyAgSU4gT1VUIFZPSUQgKiBwQnVmZmVyDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKw0KPiA+ ICsgIEVGSV9VU0JfREFUQV9ESVJFQ1RJT04gRGlyZWN0aW9uOw0KPiA+ICsgIEVGSV9VU0JfSU9f UFJPVE9DT0wgKiBwVXNiSW87DQo+ID4gKyAgRUZJX1NUQVRVUyBTdGF0dXMgPSBFRklfVElNRU9V VDsNCj4gPiArICBVSU5UMzIgQ21kU3RhdHVzID0gRUZJX1VTQl9OT0VSUk9SOw0KPiA+ICsgIGlu dCBpOw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gRGV0ZXJtaW5lIHRoZSB0cmFuc2ZlciBkaXJlY3Rp b24NCj4gPiArICAvLw0KPiA+ICsgIERpcmVjdGlvbiA9IEVmaVVzYk5vRGF0YTsNCj4gPiArICBp ZiAoIDAgIT0gcFJlcXVlc3QtPkxlbmd0aCApIHsNCj4gPiArICAgIERpcmVjdGlvbiA9ICggMCAh PSAoIHBSZXF1ZXN0LT5SZXF1ZXN0VHlwZSAmIFVTQl9FTkRQT0lOVF9ESVJfSU4gKSkNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgPyBFZmlVc2JEYXRhSW4gOiBFZmlVc2JEYXRhT3V0Ow0K PiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBJc3N1ZSB0aGUgY29tbWFuZA0K PiA+ICsgIC8vDQo+ID4gKyAgcFVzYklvID0gcE5pY0RldmljZS0+cFVzYklvOw0KPiA+ICsNCj4g PiArICBmb3IgKCBpID0gMCA7IGkgPCAzICYmIEVGSV9USU1FT1VUID09IFN0YXR1czsgaSsrKSB7 DQo+ID4gKyAgICBTdGF0dXMgPSBwVXNiSW8tPlVzYkNvbnRyb2xUcmFuc2ZlciAoIHBVc2JJbywN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBSZXF1ZXN0LA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlyZWN0aW9uLA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNCX0JVU19USU1F T1VULA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEJ1ZmZl ciwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBSZXF1ZXN0 LT5MZW5ndGgsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm Q21kU3RhdHVzICk7DQo+ID4gKyAgfQ0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gRGV0ZXJtaW5lIHRo ZSBvcGVyYXRpb24gc3RhdHVzDQo+ID4gKyAgLy8NCj4gPiArICBpZiAoRUZJX0VSUk9SKFN0YXR1 cykgfHwgRUZJX0VSUk9SKENtZFN0YXR1cykpDQo+DQo+IFNwYWNlIGJlZm9yZSAoDQo+DQo+ID4g KyAgICBTdGF0dXMgPSBFRklfREVWSUNFX0VSUk9SOw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gUmV0 dXJuIHRoZSBvcGVyYXRpb24gc3RhdHVzDQo+ID4gKyAgLy8NCj4gPiArICByZXR1cm4gU3RhdHVz Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0F4ODgxNzlNYWNSZWFkICgN Cj4gPiArICBJTiAgVUlOVDggT2Zmc2V0LA0KPiA+ICsgIElOICBVSU5UOCBMZW5ndGgsDQo+ID4g KyAgSU4gIE5JQ19ERVZJQ0UgKiBwTmljRGV2aWNlLA0KPiA+ICsgIElOICBPVVQgIFZPSUQgKiBw RGF0YQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsNCj4gPiArICBFRklfU1RBVFVTIFN0YXR1czsN Cj4gPiArICBVU0JfREVWSUNFX1JFUVVFU1QgU2V0dXBNc2c7DQo+ID4gKyAgU2V0dXBNc2cuUmVx dWVzdFR5cGUgPSBVU0JfUkVRX1RZUEVfVkVORE9SDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgfCBVU0JfVEFSR0VUX0RFVklDRQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHwgVVNC X0VORFBPSU5UX0RJUl9JTjsNCj4gPiArDQo+ID4gKyAgU2V0dXBNc2cuUmVxdWVzdCA9IEFDQ0VT U19NQUM7DQo+ID4gKyAgU2V0dXBNc2cuVmFsdWUgID0gT2Zmc2V0Ow0KPiA+ICsgIFNldHVwTXNn LkluZGV4ICA9IExlbmd0aDsNCj4gPiArICBTZXR1cE1zZy5MZW5ndGggPSBTZXR1cE1zZy5JbmRl eDsNCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gQXg4ODE3OVVzYkNvbW1hbmQgKCBwTmljRGV2aWNl LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlNldHVwTXNnLA0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcERhdGEgKTsNCj4gPiArDQo+ID4gKyAgcmV0 dXJuIFN0YXR1czsNCj4gPiArDQo+ID4gK30NCj4gPiArDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiAr QXg4ODE3OU1hY1dyaXRlICgNCj4gPiArICBJTiAgVUlOVDggT2Zmc2V0LA0KPiA+ICsgIElOICBV SU5UOCBMZW5ndGgsDQo+ID4gKyAgSU4gIE5JQ19ERVZJQ0UgKiBwTmljRGV2aWNlLA0KPiA+ICsg IElOICBPVVQgIFZPSUQgKiBwRGF0YQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsNCj4gPiArICBF RklfU1RBVFVTIFN0YXR1czsNCj4gPiArICBVU0JfREVWSUNFX1JFUVVFU1QgU2V0dXBNc2c7DQo+ ID4gKyAgU2V0dXBNc2cuUmVxdWVzdFR5cGUgPSBVU0JfUkVRX1RZUEVfVkVORE9SDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgfCBVU0JfVEFSR0VUX0RFVklDRTsNCj4gPiArDQo+ID4gKyAg U2V0dXBNc2cuUmVxdWVzdCA9IEFDQ0VTU19NQUM7DQo+ID4gKyAgU2V0dXBNc2cuVmFsdWUgID0g T2Zmc2V0Ow0KPiA+ICsgIFNldHVwTXNnLkluZGV4ICA9IExlbmd0aDsNCj4gPiArICBTZXR1cE1z Zy5MZW5ndGggPSBTZXR1cE1zZy5JbmRleDsNCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gQXg4ODE3 OVVzYkNvbW1hbmQgKCBwTmljRGV2aWNlLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJlNldHVwTXNnLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcERh dGEgKTsNCj4gPiArDQo+ID4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPiArDQo+ID4gK30NCj4gPiAr DQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArQXg4ODE3OVNldElJbkludGVydmFsICgNCj4gPiArICBJ TiAgTklDX0RFVklDRSAqIHBOaWNEZXZpY2UsDQo+ID4gKyAgSU4gIFVJTlQ4IEludGVydmFsDQo+ ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKw0KPiA+ICsgIEVGSV9TVEFUVVMgU3RhdHVzOw0KPiA+ICsg IFVTQl9ERVZJQ0VfUkVRVUVTVCBTZXR1cE1zZzsNCj4gPiArICBTZXR1cE1zZy5SZXF1ZXN0VHlw ZSA9IFVTQl9SRVFfVFlQRV9WRU5ET1INCj4gPiArICAgICAgICAgICAgICAgICAgICAgICB8IFVT Ql9UQVJHRVRfREVWSUNFOw0KPiA+ICsNCj4gPiArICBTZXR1cE1zZy5SZXF1ZXN0ID0gMHg5MTsN Cj4gPiArICBTZXR1cE1zZy5WYWx1ZSAgPSBJbnRlcnZhbDsNCj4gPiArICBTZXR1cE1zZy5JbmRl eCAgPSAwOw0KPiA+ICsgIFNldHVwTXNnLkxlbmd0aCA9IDA7DQo+ID4gKw0KPiA+ICsgIFN0YXR1 cyA9IEF4ODgxNzlVc2JDb21tYW5kICggcE5pY0RldmljZSwNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZTZXR1cE1zZywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE5VTEwgKTsNCj4gPiArDQo+ID4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPiArDQo+ID4g K30NCj4gPiArDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArQXg4ODE3OVNldE1lZGl1bSAoDQo+ID4g KyAgSU4gTklDX0RFVklDRSAqIHBOaWNEZXZpY2UNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBV SU5UMTYgTWVkaXVtU3RhdHVzOw0KPiA+ICsgIEVGSV9TVEFUVVMgU3RhdHVzOw0KPiA+ICsNCj4g PiArICBNZWRpdW1TdGF0dXMgPSBNRURJVU1TVFNNT0RfUkUgfCBNRURJVU1TVFNNT0RfT05FOw0K PiA+ICsgIGlmICggcE5pY0RldmljZS0+YkZ1bGxEdXBsZXggKSB7DQo+ID4gKyAgICBNZWRpdW1T dGF0dXMgfD0gTUVESVVNU1RTTU9EX1RGQyB8IE1FRElVTVNUU01PRF9SRkMgfA0KPiBNRURJVU1T VFNNT0RfRkQ7DQo+ID4gKyAgfSBlbHNlIHsNCj4gPiArICAgIE1lZGl1bVN0YXR1cyAmPSB+KE1F RElVTVNUU01PRF9URkMgfCBNRURJVU1TVFNNT0RfUkZDIHwNCj4gTUVESVVNU1RTTU9EX0ZEKTsN Cj4gPiArICB9DQo+ID4gKyAgaWYgKCBwTmljRGV2aWNlLT5iMTAwME1icHMgKSB7DQo+ID4gKyAg ICBNZWRpdW1TdGF0dXMgfD0gTUVESVVNU1RTTU9EX0dNOw0KPiA+ICsgICAgTWVkaXVtU3RhdHVz ICY9IH5NRURJVU1TVFNNT0RfUFM7DQo+ID4gKyAgfSBlbHNlIHsNCj4gPiArICAgIE1lZGl1bVN0 YXR1cyAmPSB+TUVESVVNU1RTTU9EX0dNOw0KPiA+ICsgICAgaWYgKCBwTmljRGV2aWNlLT5iMTAw TWJwcyApIHsNCj4gPiArICAgICAgTWVkaXVtU3RhdHVzIHw9IE1FRElVTVNUU01PRF9QUzsNCj4g PiArICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgIE1lZGl1bVN0YXR1cyAmPSB+TUVESVVNU1RTTU9E X1BTOw0KPiA+ICsgICAgfQ0KPiA+ICsgIH0NCj4gPiArICBTdGF0dXMgID0gQXg4ODE3OU1hY1dy aXRlIChNRURJVU1TVFNNT0QsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZW9mICggTWVkaXVtU3RhdHVzICksDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cE5pY0RldmljZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmTWVkaXVtU3Rh dHVzKTsNCj4gPiArICBpZiAoICFFRklfRVJST1IgKCBTdGF0dXMgKSkNCj4NCj4gQWx3YXlzIHVz ZSB7fQ0KPg0KPiA+ICsgIHBOaWNEZXZpY2UtPkN1ck1lZGl1bVN0YXR1cyA9IE1lZGl1bVN0YXR1 czsNCj4NCj4gaW5kZW50DQo+DQo+ID4gKw0KPiA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gK30N Cj4gPiArDQo+ID4gKw0KPiA+ICtCT09MRUFODQo+ID4gK0F4ODgxNzlHZXRMaW5rU3RhdHVzICgN Cj4gPiArICBJTiBOSUNfREVWSUNFICogcE5pY0RldmljZQ0KPiA+ICspDQo+ID4gK3sNCj4gPiAr ICBVSU5UMzIgQ21kU3RhdHVzOw0KPiA+ICsgIEVGSV9VU0JfSU9fUFJPVE9DT0wgKiBwVXNiSW87 DQo+ID4gKyAgVUlOVDY0ICAgIEludERhdGEgPSAwOw0KPiA+ICsgIFVJTlROICAgICBJbnREYXRh TGVuZyA9IDg7DQo+ID4gKyAgRUZJX1NUQVRVUyBTdGF0dXM7DQo+ID4gKw0KPiA+ICsgIC8vDQo+ ID4gKyAgLy8gSXNzdWUgdGhlIGNvbW1hbmQNCj4gPiArICAvLw0KPiA+ICsgIHBVc2JJbyA9IHBO aWNEZXZpY2UtPnBVc2JJbzsNCj4gPiArICBTdGF0dXMgPSBwVXNiSW8tPlVzYlN5bmNJbnRlcnJ1 cHRUcmFuc2ZlciggcFVzYklvLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVVNCX0VORFBPSU5UX0RJUl9JTiB8IElOVEVSUlVQVF9FTkRQT0lOVCwNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZJbnREYXRhLA0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkludERhdGFMZW5nLA0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNCX0JVU19USU1FT1VU LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkNtZFN0YXR1 cyApOw0KPiA+ICsNCj4gPiArICBpZiAoIEVGSV9FUlJPUihTdGF0dXMpIHx8IEVGSV9FUlJPUihD bWRTdGF0dXMpIHx8IDAgPT0gSW50RGF0YUxlbmcpDQo+ID4gKyAgICByZXR1cm4gRkFMU0U7DQo+ ID4gKw0KPiA+ICsgIHJldHVybiAoSW50RGF0YSAmIDB4MTAwMDApPyBUUlVFIDogRkFMU0U7DQo+ ID4gKw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0F4ODgxNzlCdWxrSW4o DQo+ID4gKyAgSU4gTklDX0RFVklDRSAqIHBOaWNEZXZpY2UNCj4gPiArKQ0KPiA+ICt7DQo+ID4g KyAgaW50IGk7DQo+ID4gKyAgVUlOVDE2ICB2YWw7DQo+ID4gKyAgVUlOVE4gTGVuZ3RoSW5CeXRl cyA9IDA7DQo+ID4gKyAgVUlOVE4gVE1QX0xFTkcgPSBBWDg4MTc5X01BWF9CVUxLSU5fU0laRTsN Cj4gPiArICBVSU5UTiBDVVJCdWZTaXplID0gQVg4ODE3OV9NQVhfQlVMS0lOX1NJWkU7DQo+ID4g KyAgVUlOVE4gUFJFQnVmU2l6ZSA9IDA7DQo+ID4gKyAgRUZJX1NUQVRVUyBTdGF0dXMgPSBFRklf Tk9UX1JFQURZOw0KPiA+ICsgIEVGSV9VU0JfSU9fUFJPVE9DT0wgKnBVc2JJbzsNCj4gPiArICBV SU5UMzIgVHJhbnNmZXJTdGF0dXM7DQo+ID4gKw0KPiA+ICsgIHBOaWNEZXZpY2UtPlNraXBSWENu dCA9IDA7DQo+ID4gKw0KPiA+ICsgIHBVc2JJbyA9IHBOaWNEZXZpY2UtPnBVc2JJbzsNCj4gPiAr ICBmb3IgKCBpID0gMCA7IGkgPCAoQVg4ODE3OV9NQVhfQlVMS0lOX1NJWkUgLyA1MTIpICYmIHBV c2JJbyAhPSBOVUxMOw0KPiBpKyspIHsNCj4gPiArICAgIFZPSUQqIHRtcEFkZHIgPSAwOw0KPiA+ ICsNCj4gPiArICAgIGlmIChwTmljRGV2aWNlLT5iU2V0WmVyb0xlbikgew0KPiA+ICsgICAgICB2 YWwgPSAgUEhZUFdSUlNUQ1RMX0lQUkwgfCBQSFlQV1JSU1RDVExfQlo7DQo+ID4gKyAgICAgIFN0 YXR1cyA9IEF4ODgxNzlNYWNXcml0ZSAoIFBIWVBXUlJTVENUTCwNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mICh2YWwpLA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwTmljRGV2aWNlLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmdmFsKTsNCj4gPiArICAgICAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ ID4gKyAgICAgICAgTGVuZ3RoSW5CeXRlcyA9IDA7DQo+ID4gKyAgICAgICAgU3RhdHVzID0gRUZJ X05PVF9SRUFEWTsNCj4gPiArICAgICAgICBnb3RvIG5vX3BrdDsNCj4gPiArICAgICAgfQ0KPiA+ ICsgICAgICBwTmljRGV2aWNlLT5iU2V0WmVyb0xlbiA9IEZBTFNFOw0KPiA+ICsgICAgfQ0KPiA+ ICsgICAgdG1wQWRkciA9IChWT0lEKikgJnBOaWNEZXZpY2UtPnBCdWxrSW5idWZbTGVuZ3RoSW5C eXRlc107DQo+ID4gKw0KPiA+ICsgICAgU3RhdHVzID0gIEVGSV9OT1RfUkVBRFk7DQo+ID4gKyAg ICBTdGF0dXMgPSBwVXNiSW8tPlVzYkJ1bGtUcmFuc2ZlciAoIHBVc2JJbywNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICBVU0JfRU5EUE9JTlRfRElSX0lOIHwgQlVMS19JTl9FTkRQT0lO VCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBBZGRyLA0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICZUTVBfTEVORywNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICBCVUxLSU5fVElNRU9VVCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAmVHJh bnNmZXJTdGF0dXMgKTsNCj4gPiArDQo+ID4gKyAgICBpZiAoKCAhRUZJX0VSUk9SICggU3RhdHVz ICkpICYmICggIUVGSV9FUlJPUiAoIFRyYW5zZmVyU3RhdHVzICkpICYmDQo+IFRNUF9MRU5HICE9 IDApIHsNCj4gPiArICAgICAgTGVuZ3RoSW5CeXRlcyArPSBUTVBfTEVORzsNCj4gPiArICAgICAg aWYgKChUTVBfTEVORyAlIHBOaWNEZXZpY2UtPnVzYk1heFBrdFNpemUpICE9IDApIHsNCj4gPiAr ICAgICAgICBnb3RvIGRvbmU7DQo+ID4gKyAgICAgIH0NCj4gPiArICAgICAgQ1VSQnVmU2l6ZSA9 IENVUkJ1ZlNpemUgLSBUTVBfTEVORzsNCj4gPiArICAgICAgVE1QX0xFTkcgPSBDVVJCdWZTaXpl Ow0KPiA+ICsgICAgICBwTmljRGV2aWNlLT5iU2V0WmVyb0xlbiA9IFRSVUU7DQo+ID4gKyAgICB9 IGVsc2UgaWYgKCggIUVGSV9FUlJPUiAoIFN0YXR1cyApKSAmJg0KPiA+ICsgICAgICAgICAgICAg ICAoICFFRklfRVJST1IgKCBUcmFuc2ZlclN0YXR1cyApKSAmJg0KPiA+ICsgICAgICAgICAgICAg ICAoIFRNUF9MRU5HID09IDApICYmDQo+ID4gKyAgICAgICAgICAgICAgIExlbmd0aEluQnl0ZXMp IHsNCj4gPiArICAgICAgaWYgKFBSRUJ1ZlNpemUgPT0gQ1VSQnVmU2l6ZSkgew0KPiA+ICsgICAg ICAgIGdvdG8gZG9uZTsNCj4gPiArICAgICAgfQ0KPiA+ICsgICAgICBUTVBfTEVORyA9IENVUkJ1 ZlNpemU7DQo+ID4gKyAgICAgIFBSRUJ1ZlNpemUgPSBDVVJCdWZTaXplOw0KPiA+ICsgICAgICBw TmljRGV2aWNlLT5iU2V0WmVyb0xlbiA9IFRSVUU7DQo+ID4gKyAgICB9IGVsc2UgaWYgKCggIUVG SV9FUlJPUiAoIFN0YXR1cyApKSAmJg0KPiA+ICsgICAgICAgICAgICAgICAoICFFRklfRVJST1Ig KCBUcmFuc2ZlclN0YXR1cyApKSAmJg0KPiA+ICsgICAgICAgICAgICAgICAoIFRNUF9MRU5HID09 IDApKSB7DQo+ID4gKyAgICAgIHBOaWNEZXZpY2UtPmJTZXRaZXJvTGVuID0gVFJVRTsNCj4gPiAr ICAgICAgTGVuZ3RoSW5CeXRlcyA9IDA7DQo+ID4gKyAgICAgIFN0YXR1cyA9IEVGSV9OT1RfUkVB RFk7DQo+ID4gKyAgICAgIGdvdG8gZG9uZTsNCj4gPiArICAgIH0gZWxzZSBpZiAoRUZJX1RJTUVP VVQgPT0gU3RhdHVzICYmIEVGSV9VU0JfRVJSX1RJTUVPVVQgPT0NCj4gVHJhbnNmZXJTdGF0dXMp IHsNCj4gPiArICAgICAgcE5pY0RldmljZS0+YlNldFplcm9MZW4gPSBUUlVFOw0KPiA+ICsgICAg ICBMZW5ndGhJbkJ5dGVzID0gMDsNCj4gPiArICAgICAgU3RhdHVzID0gRUZJX05PVF9SRUFEWTsN Cj4gPiArICAgICAgZ290byBkb25lOw0KPiA+ICsgICAgfSBlbHNlIHsNCj4gPiArICAgICAgcE5p Y0RldmljZS0+YlNldFplcm9MZW4gPSBUUlVFOw0KPiA+ICsgICAgICBMZW5ndGhJbkJ5dGVzID0g MDsNCj4gPiArICAgICAgU3RhdHVzID0gRUZJX05PVF9SRUFEWTsNCj4gPiArICAgICAgZ290byBk b25lOw0KPiA+ICsgICAgfQ0KPiA+ICsgIH0NCj4gPiArDQo+ID4gK2RvbmU6DQo+ID4gKyAgaWYg KExlbmd0aEluQnl0ZXMgIT0gMCkgew0KPiA+ICsgICAgVUlOVDE2IHRtcGxlbiA9IDA7DQo+ID4g KyAgICBVSU5UMTYgdG1wUGt0Q250ID0gMDsNCj4gPiArDQo+ID4gKyAgICB0bXBQa3RDbnQgPSAq KChVSU5UMTYgKikgKHBOaWNEZXZpY2UtPnBCdWxrSW5idWYgKyBMZW5ndGhJbkJ5dGVzIC0NCj4g NCkpOw0KPiA+ICsgICAgdG1wbGVuID0gICooKFVJTlQxNiopIChwTmljRGV2aWNlLT5wQnVsa0lu YnVmICsgTGVuZ3RoSW5CeXRlcyAtIDIpKTsNCj4gPiArDQo+ID4gKyAgICBpZiAoKChVSU5UTiko KCh0bXBQa3RDbnQgKiA0ICsgNCArIDcpICYgMHhmZmY4KSArIHRtcGxlbikpID09DQo+IExlbmd0 aEluQnl0ZXMpIHsNCj4gPiArICAgICAgcE5pY0RldmljZS0+UGt0Q250ID0gdG1wUGt0Q250Ow0K PiA+ICsgICAgICBwTmljRGV2aWNlLT5wQ3VyUGt0SGRyT2ZmID0gcE5pY0RldmljZS0+cEJ1bGtJ bmJ1ZiArIHRtcGxlbjsNCj4gPiArICAgICAgcE5pY0RldmljZS0+cEN1clBrdE9mZiA9IHBOaWNE ZXZpY2UtPnBCdWxrSW5idWY7DQo+ID4gKyAgICAgICooKFVJTlQxNiAqKSAocE5pY0RldmljZS0+ cEJ1bGtJbmJ1ZiArIExlbmd0aEluQnl0ZXMgLSA0KSkgPSAwOw0KPiA+ICsgICAgICAqKChVSU5U MTYqKSAocE5pY0RldmljZS0+cEJ1bGtJbmJ1ZiArIExlbmd0aEluQnl0ZXMgLSAyKSkgPSAwOw0K PiA+ICsgICAgICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCj4gPiArICAgIH0gZWxzZSB7DQo+ID4g KyAgICAgIFN0YXR1cyA9IEVGSV9OT1RfUkVBRFk7DQo+ID4gKyAgICB9DQo+ID4gKyAgfSBlbHNl IHsNCj4gPiArICAgIFN0YXR1cyA9IEVGSV9OT1RfUkVBRFk7DQo+ID4gKyAgfQ0KPiA+ICtub19w a3Q6DQo+ID4gKyAgIHJldHVybiBTdGF0dXM7DQo+ID4gK30NCj4gPiBkaWZmIC0tZ2l0DQo+IGEv U2lsaWNvbi9BU0lYL0RyaXZlcnMvQnVzL1VzYi9Vc2JOZXR3b3JraW5nL0F4ODgxNzkvQ29tcG9u ZW50TmFtZS4NCj4gYw0KPiBiL1NpbGljb24vQVNJWC9Ecml2ZXJzL0J1cy9Vc2IvVXNiTmV0d29y a2luZy9BeDg4MTc5L0NvbXBvbmVudE5hbWUuDQo+IGMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uYmI3ZWExNDZiZTAyDQo+ID4gLS0tIC9kZXYvbnVs bA0KPiA+ICsrKw0KPiBiL1NpbGljb24vQVNJWC9Ecml2ZXJzL0J1cy9Vc2IvVXNiTmV0d29ya2lu Zy9BeDg4MTc5L0NvbXBvbmVudE5hbWUuDQo+IGMNCj4gPiBAQCAtMCwwICsxLDI5MCBAQA0KPiA+ ICsvKiogQGZpbGUNCj4gPiArICBVRUZJIENvbXBvbmVudCBOYW1lKDIpIHByb3RvY29sIGltcGxl bWVudGF0aW9uLg0KPiA+ICsNCj4gPiArICBDb3B5cmlnaHQgKGMpIDIwMTEsIEludGVsIENvcnBv cmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KPiA+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArDQo+ID4gKyNp bmNsdWRlICJBeDg4MTc5LmgiDQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBFRkkgQ29tcG9uZW50 IE5hbWUgUHJvdG9jb2wgZGVjbGFyYXRpb24NCj4gPiArKiovDQo+ID4gK0dMT0JBTF9SRU1PVkVf SUZfVU5SRUZFUkVOQ0VEDQo+IEVGSV9DT01QT05FTlRfTkFNRV9QUk9UT0NPTCAgZ0NvbXBvbmVu dE5hbWUgPSB7DQo+ID4gKyAgR2V0RHJpdmVyTmFtZSwNCj4gPiArICBHZXRDb250cm9sbGVyTmFt ZSwNCj4gPiArICAiZW5nIg0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgRUZJIENv bXBvbmVudCBOYW1lIDIgUHJvdG9jb2wgZGVjbGFyYXRpb24NCj4gPiArKiovDQo+ID4gK0dMT0JB TF9SRU1PVkVfSUZfVU5SRUZFUkVOQ0VEDQo+IEVGSV9DT01QT05FTlRfTkFNRTJfUFJPVE9DT0wg Z0NvbXBvbmVudE5hbWUyID0gew0KPiA+ICsgIChFRklfQ09NUE9ORU5UX05BTUUyX0dFVF9EUklW RVJfTkFNRSkgR2V0RHJpdmVyTmFtZSwNCj4gPiArICAoRUZJX0NPTVBPTkVOVF9OQU1FMl9HRVRf Q09OVFJPTExFUl9OQU1FKQ0KPiBHZXRDb250cm9sbGVyTmFtZSwNCj4gPiArICAiZW4iDQo+ID4g K307DQo+ID4gKw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgRHJpdmVyIG5hbWUgdGFibGUgZGVj bGFyYXRpb24NCj4gPiArKiovDQo+ID4gK0dMT0JBTF9SRU1PVkVfSUZfVU5SRUZFUkVOQ0VEIEVG SV9VTklDT0RFX1NUUklOR19UQUJMRQ0KPiA+ICttRHJpdmVyTmFtZVRhYmxlW10gPSB7DQo+ID4g KyAgeyJlbmc7ZW4iLCBMIkFTSVggQVg4ODE3OSBFdGhlcm5ldCBEcml2ZXIgMi45LjAifSwNCj4g PiArICB7TlVMTCwgIE5VTEx9DQo+ID4gK307DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBDb250 cm9sbGVyIG5hbWUgdGFibGUgZGVjbGFyYXRpb24NCj4gPiArKiovDQo+ID4gK0dMT0JBTF9SRU1P VkVfSUZfVU5SRUZFUkVOQ0VEIEVGSV9VTklDT0RFX1NUUklOR19UQUJMRQ0KPiA+ICttQ29udHJv bGxlck5hbWVUYWJsZVtdID0gew0KPiA+ICsgIHsiZW5nO2VuIiwgTCJBWDg4MTc5IFVTQjMuMCBH aWdhYml0IEV0aGVybmV0IENvbnRyb2xsZXIifSwNCj4gPiArICB7TlVMTCwgIE5VTEx9DQo+ID4g K307DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBSZXRyaWV2ZXMgYSBVbmljb2RlIHN0cmluZyB0 aGF0IGlzIHRoZSB1c2VyIHJlYWRhYmxlIG5hbWUgb2YgdGhlIGRyaXZlci4NCj4gPiArDQo+ID4g KyAgVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIHVzZXIgcmVhZGFibGUgbmFtZSBvZiBhIGRy aXZlciBpbiB0aGUgZm9ybSBvZg0KPiBhDQo+ID4gKyAgVW5pY29kZSBzdHJpbmcuIElmIHRoZSBk cml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgaGFzIGEgdXNlciByZWFkYWJsZSBuYW1lIGluDQo+ID4g KyAgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZSwgdGhlbiBhIHBvaW50ZXIgdG8g dGhlIGRyaXZlciBuYW1lIGlzDQo+ID4gKyAgcmV0dXJuZWQgaW4gRHJpdmVyTmFtZSwgYW5kIEVG SV9TVUNDRVNTIGlzIHJldHVybmVkLiBJZiB0aGUgZHJpdmVyDQo+IHNwZWNpZmllZA0KPiA+ICsg IGJ5IFRoaXMgZG9lcyBub3Qgc3VwcG9ydCB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5IExhbmd1 YWdlLA0KPiA+ICsgIHRoZW4gRUZJX1VOU1VQUE9SVEVEIGlzIHJldHVybmVkLg0KPiA+ICsNCj4g PiArICBAcGFyYW0gW2luXSBwVGhpcyAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlDQo+IEVG SV9DT01QT05FTlRfTkFNRTJfUFJPVE9DT0wgb3INCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBFRklfQ09NUE9ORU5UX05BTUVfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ID4gKyAg QHBhcmFtIFtpbl0gcExhbmd1YWdlICAgICAgICAgQSBwb2ludGVyIHRvIGEgTnVsbC10ZXJtaW5h dGVkIEFTQ0lJIHN0cmluZw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFy cmF5IGluZGljYXRpbmcgdGhlIGxhbmd1YWdlLiBUaGlzIGlzIHRoZQ0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlIG9mIHRoZSBkcml2ZXIgbmFtZSB0aGF0IHRo ZSBjYWxsZXIgaXMNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0 aW5nLCBhbmQgaXQgbXVzdCBtYXRjaCBvbmUgb2YgdGhlDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbGFuZ3VhZ2VzIHNwZWNpZmllZCBpbiBTdXBwb3J0ZWRMYW5ndWFnZXMu IFRoZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBsYW5n dWFnZXMgc3VwcG9ydGVkIGJ5IGEgZHJpdmVyIGlzIHVwDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdG8gdGhlIGRyaXZlciB3cml0ZXIuIExhbmd1YWdlIGlzIHNwZWNpZmll ZA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFJGQyAzMDY2IG9yIElT TyA2MzktMiBsYW5ndWFnZSBjb2RlIGZvcm1hdC4NCj4gPiArICBAcGFyYW0gW291dF0gcHBEcml2 ZXJOYW1lICAgICBBIHBvaW50ZXIgdG8gdGhlIFVuaWNvZGUgc3RyaW5nIHRvIHJldHVybi4NCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIFVuaWNvZGUgc3RyaW5nIGlz IHRoZSBuYW1lIG9mIHRoZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRy aXZlciBzcGVjaWZpZWQgYnkgVGhpcyBpbiB0aGUgbGFuZ3VhZ2UNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2UuDQo+ID4gKw0KPiA+ICsg IEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBVbmljb2RlIHN0cmluZyBmb3IgdGhl IERyaXZlciBzcGVjaWZpZWQgYnkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBUaGlzIGFuZCB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5IExhbmd1YWdlIHdhcw0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmVkIGluIERyaXZlck5hbWUuDQo+ ID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgTGFuZ3VhZ2UgaXMgTlVMTC4NCj4g PiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBEcml2ZXJOYW1lIGlzIE5VTEwuDQo+ ID4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgVGhlIGRyaXZlciBzcGVjaWZpZWQg YnkgVGhpcyBkb2VzIG5vdA0KPiBzdXBwb3J0DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZS4NCj4gPiArDQo+ID4g KyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtHZXREcml2ZXJOYW1lICgN Cj4gPiArICBJTiAgRUZJX0NPTVBPTkVOVF9OQU1FX1BST1RPQ09MICogcFRoaXMsDQo+ID4gKyAg SU4gIENIQVI4ICogcExhbmd1YWdlLA0KPiA+ICsgIE9VVCBDSEFSMTYgKiogcHBEcml2ZXJOYW1l DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1NUQVRVUyBTdGF0dXM7DQo+ID4gKw0KPiA+ ICsNCj4gPiArICBTdGF0dXMgPSBMb29rdXBVbmljb2RlU3RyaW5nMiAoDQo+ID4gKyAgICAgICAg ICAgICBwTGFuZ3VhZ2UsDQo+ID4gKyAgICAgICAgICAgICBwVGhpcy0+U3VwcG9ydGVkTGFuZ3Vh Z2VzLA0KPiA+ICsgICAgICAgICAgICAgbURyaXZlck5hbWVUYWJsZSwNCj4gPiArICAgICAgICAg ICAgIHBwRHJpdmVyTmFtZSwNCj4gPiArICAgICAgICAgICAgIChCT09MRUFOKShwVGhpcyA9PSAm Z0NvbXBvbmVudE5hbWUpDQo+ID4gKyAgICAgICAgICAgICApOw0KPiA+ICsNCj4gPiArICByZXR1 cm4gU3RhdHVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBSZXRyaWV2ZXMgYSBV bmljb2RlIHN0cmluZyB0aGF0IGlzIHRoZSB1c2VyIHJlYWRhYmxlIG5hbWUgb2YgdGhlDQo+IGNv bnRyb2xsZXINCj4gPiArICB0aGF0IGlzIGJlaW5nIG1hbmFnZWQgYnkgYSBkcml2ZXIuDQo+ID4g Kw0KPiA+ICsgIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSB1c2VyIHJlYWRhYmxlIG5hbWUg b2YgdGhlIGNvbnRyb2xsZXIgc3BlY2lmaWVkDQo+IGJ5DQo+ID4gKyAgQ29udHJvbGxlckhhbmRs ZSBhbmQgQ2hpbGRIYW5kbGUgaW4gdGhlIGZvcm0gb2YgYSBVbmljb2RlIHN0cmluZy4gSWYgdGhl DQo+ID4gKyAgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGhhcyBhIHVzZXIgcmVhZGFibGUgbmFt ZSBpbiB0aGUgbGFuZ3VhZ2UNCj4gc3BlY2lmaWVkIGJ5DQo+ID4gKyAgTGFuZ3VhZ2UsIHRoZW4g YSBwb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIG5hbWUgaXMgcmV0dXJuZWQgaW4NCj4gQ29udHJv bGxlck5hbWUsDQo+ID4gKyAgYW5kIEVGSV9TVUNDRVNTIGlzIHJldHVybmVkLiAgSWYgdGhlIGRy aXZlciBzcGVjaWZpZWQgYnkgVGhpcyBpcyBub3QNCj4gY3VycmVudGx5DQo+ID4gKyAgbWFuYWdp bmcgdGhlIGNvbnRyb2xsZXIgc3BlY2lmaWVkIGJ5IENvbnRyb2xsZXJIYW5kbGUgYW5kIENoaWxk SGFuZGxlLA0KPiA+ICsgIHRoZW4gRUZJX1VOU1VQUE9SVEVEIGlzIHJldHVybmVkLiAgSWYgdGhl IGRyaXZlciBzcGVjaWZpZWQgYnkgVGhpcyBkb2VzDQo+IG5vdA0KPiA+ICsgIHN1cHBvcnQgdGhl IGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZSwgdGhlbiBFRklfVU5TVVBQT1JURUQgaXMN Cj4gcmV0dXJuZWQuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbSBbaW5dIHBUaGlzICAgICAgICAgICAg IEEgcG9pbnRlciB0byB0aGUNCj4gRUZJX0NPTVBPTkVOVF9OQU1FMl9QUk9UT0NPTCBvcg0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9DT01QT05FTlRfTkFNRV9QUk9U T0NPTCBpbnN0YW5jZS4NCj4gPiArICBAcGFyYW0gW2luXSBDb250cm9sbGVySGFuZGxlICBUaGUg aGFuZGxlIG9mIGEgY29udHJvbGxlciB0aGF0IHRoZSBkcml2ZXINCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgYnkgVGhpcyBpcyBtYW5hZ2luZy4gIFRoaXMg aGFuZGxlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVzIHRo ZSBjb250cm9sbGVyIHdob3NlIG5hbWUgaXMgdG8gYmUNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm5lZC4NCj4gPiArICBAcGFyYW0gW2luXSBDaGlsZEhhbmRsZSAg ICAgICBUaGUgaGFuZGxlIG9mIHRoZSBjaGlsZCBjb250cm9sbGVyIHRvDQo+IHJldHJpZXZlDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG5hbWUgb2YuICBUaGlzIGlz IGFuIG9wdGlvbmFsIHBhcmFtZXRlciB0aGF0DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbWF5IGJlIE5VTEwuICBJdCB3aWxsIGJlIE5VTEwgZm9yIGRldmljZQ0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlcnMuICBJdCB3aWxsIGFsc28gYmUg TlVMTCBmb3IgYSBidXMgZHJpdmVycw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRoYXQgd2lzaCB0byByZXRyaWV2ZSB0aGUgbmFtZSBvZiB0aGUgYnVzDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci4gIEl0IHdpbGwgbm90IGJlIE5V TEwgZm9yIGEgYnVzDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVy IHRoYXQgd2lzaGVzIHRvIHJldHJpZXZlIHRoZSBuYW1lIG9mIGENCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjaGlsZCBjb250cm9sbGVyLg0KPiA+ICsgIEBwYXJhbSBbaW5d IHBMYW5ndWFnZSAgICAgICAgIEEgcG9pbnRlciB0byBhIE51bGwtdGVybWluYXRlZCBBU0NJSSBz dHJpbmcNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSBpbmRpY2F0 aW5nIHRoZSBsYW5ndWFnZS4gIFRoaXMgaXMgdGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGFuZ3VhZ2Ugb2YgdGhlIGRyaXZlciBuYW1lIHRoYXQgdGhlIGNhbGxlciBp cw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RpbmcsIGFuZCBp dCBtdXN0IG1hdGNoIG9uZSBvZiB0aGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBsYW5ndWFnZXMgc3BlY2lmaWVkIGluIFN1cHBvcnRlZExhbmd1YWdlcy4gVGhlDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIGxhbmd1YWdlcyBzdXBw b3J0ZWQgYnkgYSBkcml2ZXIgaXMgdXANCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0byB0aGUgZHJpdmVyIHdyaXRlci4gTGFuZ3VhZ2UgaXMgc3BlY2lmaWVkIGluDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkZDIDMwNjYgb3IgSVNPIDYzOS0yIGxh bmd1YWdlIGNvZGUgZm9ybWF0Lg0KPiA+ICsgIEBwYXJhbSBbb3V0XSBwcENvbnRyb2xsZXJOYW1l IEEgcG9pbnRlciB0byB0aGUgVW5pY29kZSBzdHJpbmcgdG8NCj4gcmV0dXJuLg0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgVW5pY29kZSBzdHJpbmcgaXMgdGhlIG5h bWUgb2YgdGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxl ciBzcGVjaWZpZWQgYnkgQ29udHJvbGxlckhhbmRsZSBhbmQNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBDaGlsZEhhbmRsZSBpbiB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5 DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFuZ3VhZ2UgZnJvbSB0aGUg cG9pbnQgb2YgdmlldyBvZiB0aGUgZHJpdmVyDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3BlY2lmaWVkIGJ5IFRoaXMuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NV Q0NFU1MgICAgICAgICAgIFRoZSBVbmljb2RlIHN0cmluZyBmb3IgdGhlIHVzZXIgcmVhZGFibGUN Cj4gbmFtZSBpbg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsYW5n dWFnZSBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2UgZm9yIHRoZQ0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRyaXZlciBzcGVjaWZpZWQgYnkgVGhpcyB3YXMgcmV0dXJuZWQgaW4N Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEcml2ZXJOYW1lLg0KPiA+ICsg IEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIENvbnRyb2xsZXJIYW5kbGUgaXMgbm90IGEg dmFsaWQNCj4gRUZJX0hBTkRMRS4NCj4gPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRF UiBDaGlsZEhhbmRsZSBpcyBub3QgTlVMTCBhbmQgaXQgaXMgbm90DQo+IGEgdmFsaWQNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFRklfSEFORExFLg0KPiA+ICsgIEByZXR2 YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIExhbmd1YWdlIGlzIE5VTEwuDQo+ID4gKyAgQHJldHZh bCBFRklfSU5WQUxJRF9QQVJBTUVURVIgQ29udHJvbGxlck5hbWUgaXMgTlVMTC4NCj4gPiArICBA cmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBUaGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlz IGlzIG5vdA0KPiBjdXJyZW50bHkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBtYW5hZ2luZyB0aGUgY29udHJvbGxlciBzcGVjaWZpZWQgYnkNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlIGFuZCBDaGlsZEhhbmRsZS4NCj4g PiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBUaGUgZHJpdmVyIHNwZWNpZmllZCBi eSBUaGlzIGRvZXMgbm90DQo+IHN1cHBvcnQNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5IExhbmd1YWdlLg0KPiA+ICsNCj4gPiAr KiovDQo+ID4gKw0KPiA+ICsNCj4gPiArDQo+ID4gKyNpZiBQQVNTX1NDVA0KPiA+ICtFRklfU1RB VFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtHZXRDb250cm9sbGVyTmFtZSAoDQo+ID4gKyAgSU4gIEVG SV9DT01QT05FTlRfTkFNRV9QUk9UT0NPTCAqIHBUaGlzLA0KPiA+ICsgIElOICBFRklfSEFORExF IENvbnRyb2xsZXJIYW5kbGUsDQo+ID4gKyAgSU4gT1BUSU9OQUwgRUZJX0hBTkRMRSBDaGlsZEhh bmRsZSwNCj4gPiArICBJTiAgQ0hBUjggKiBwTGFuZ3VhZ2UsDQo+ID4gKyAgT1VUIENIQVIxNiAq KiBwcENvbnRyb2xsZXJOYW1lDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKw0KPiA+ICsgIEVGSV9T VEFUVVMgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ID4gKyAgRUZJX1VTQl9JT19QUk9UT0NP TCAgICAgICAgICpVc2JJb1Byb3RvY29sOw0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIFRo aXMgaXMgYSBkZXZpY2UgZHJpdmVyLCBzbyBDaGlsZEhhbmRsZSBtdXN0IGJlIE5VTEwuDQo+ID4g KyAgLy8NCj4gPiArICBpZiAoQ2hpbGRIYW5kbGUgIT0gTlVMTCkgew0KPiA+ICsgICAgcmV0dXJu IEVGSV9VTlNVUFBPUlRFRDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8g Q2hlY2sgQ29udHJvbGxlcidzIGhhbmRsZQ0KPiA+ICsgIC8vDQo+ID4gKyAgU3RhdHVzID0gZ0JT LT5PcGVuUHJvdG9jb2wgKA0KPiA+ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxl LA0KPiA+ICsgICAgICAgICAgICAgICAgICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KPiA+ICsg ICAgICAgICAgICAgICAgICAoVk9JRCAqKikgJlVzYklvUHJvdG9jb2wsDQo+ID4gKyAgICAgICAg ICAgICAgICAgIGdEcml2ZXJCaW5kaW5nLkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ID4gKyAgICAg ICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ID4gKyAgICAgICAgICAgICAgICAgIEVG SV9PUEVOX1BST1RPQ09MX0JZX0RSSVZFUg0KPiA+ICsgICAgICAgICAgICAgICAgICApOw0KPiA+ ICsgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICBnQlMtPkNsb3NlUHJvdG9j b2wgKA0KPiA+ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ID4gKyAgICAgICAgICAg JmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCj4gPiArICAgICAgICAgICBnRHJpdmVyQmluZGluZy5E cml2ZXJCaW5kaW5nSGFuZGxlLA0KPiA+ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4g PiArICAgICAgICAgICApOw0KPiA+ICsgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gPiAr ICB9DQo+ID4gKw0KPiA+ICsgIGlmIChTdGF0dXMgIT0gRUZJX0FMUkVBRFlfU1RBUlRFRCkgew0K PiA+ICsgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsg IFN0YXR1cyA9ICBMb29rdXBVbmljb2RlU3RyaW5nMiAoDQo+ID4gKyAgICAgICAgICAgcExhbmd1 YWdlLA0KPiA+ICsgICAgICAgICAgICBwVGhpcy0+U3VwcG9ydGVkTGFuZ3VhZ2VzLA0KPiA+ICsg ICAgICAgICAgIG1Db250cm9sbGVyTmFtZVRhYmxlLA0KPiA+ICsgICAgICAgICAgIHBwQ29udHJv bGxlck5hbWUsDQo+ID4gKyAgICAgICAgICAgKEJPT0xFQU4pKHBUaGlzID09ICZnQ29tcG9uZW50 TmFtZSkNCj4gPiArICAgICAgICAgICApOw0KPiA+ICsNCj4gPiArICByZXR1cm4gIFN0YXR1czsN Cj4gPiArfQ0KPiA+ICsjZWxzZQ0KPiA+ICsNCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtFRklBUEkN Cj4gPiArR2V0Q29udHJvbGxlck5hbWUgKA0KPiA+ICsgIElOICBFRklfQ09NUE9ORU5UX05BTUVf UFJPVE9DT0wgKiBwVGhpcywNCj4gPiArICBJTiAgRUZJX0hBTkRMRSBDb250cm9sbGVySGFuZGxl LA0KPiA+ICsgIElOIE9QVElPTkFMIEVGSV9IQU5ETEUgQ2hpbGRIYW5kbGUsDQo+ID4gKyAgSU4g IENIQVI4ICogcExhbmd1YWdlLA0KPiA+ICsgIE9VVCBDSEFSMTYgKiogcHBDb250cm9sbGVyTmFt ZQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEVGSV9TVEFUVVMgU3RhdHVzOw0KPiA+ICsgIEVG SV9VU0JfSU9fUFJPVE9DT0wgICAgICAgICAqVXNiSW9Qcm90b2NvbDsNCj4gPiArICBFRklfVVNC X0RFVklDRV9ERVNDUklQVE9SIERldmljZTsNCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyAg Q29ubmVjdCB0byB0aGUgVVNCIHN0YWNrDQo+ID4gKyAgLy8NCj4gPiArICBTdGF0dXMgPSBnQlMt Pk9wZW5Qcm90b2NvbCAoDQo+ID4gKyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUs DQo+ID4gKyAgICAgICAgICAgICAgICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQsDQo+ID4gKyAg ICAgICAgICAgICAgICAgIChWT0lEICoqKSAmVXNiSW9Qcm90b2NvbCwNCj4gPiArICAgICAgICAg ICAgICAgICAgZ0RyaXZlckJpbmRpbmcuRHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gPiArICAgICAg ICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gPiArICAgICAgICAgICAgICAgICAgRUZJ X09QRU5fUFJPVE9DT0xfQllfRFJJVkVSDQo+ID4gKyAgICAgICAgICAgICAgICAgICk7DQo+ID4g Kw0KPiA+ICsNCj4gPiArICBpZiAoIUVGSV9FUlJPUiAoIFN0YXR1cyApKSB7DQo+ID4gKyAgICAg IFN0YXR1cyA9IFVzYklvUHJvdG9jb2wtPlVzYkdldERldmljZURlc2NyaXB0b3IgKCBVc2JJb1By b3RvY29sLA0KPiAmRGV2aWNlICk7DQo+ID4gKyAgICAgIGlmIChFRklfRVJST1IoU3RhdHVzKSkg ew0KPiA+ICsgICAgICAgIFN0YXR1cyA9IEVGSV9VTlNVUFBPUlRFRDsNCj4gPiArICAgICAgfSBl bHNlIHsNCj4gPiArICAgICAgICAgIC8vDQo+ID4gKyAgICAgICAgICAvLyAgVmFsaWRhdGUgdGhl IGFkYXB0ZXINCj4gPiArICAgICAgICAgIC8vDQo+ID4gKyAgICAgICAgICBpZiAoKCBWRU5ET1Jf SUQgPT0gRGV2aWNlLklkVmVuZG9yICkNCj4gPiArICAgICAgICAgICAgJiYgKCBQUk9EVUNUX0lE ID09IERldmljZS5JZFByb2R1Y3QgKSkgew0KPiA+ICsgICAgICAgICAgICAqcHBDb250cm9sbGVy TmFtZSA9IEwiQVg4ODE3OSBVU0IzLjAgR2lnYWJpdCBFdGhlcm5ldA0KPiBDb250cm9sbGVyIjsN Cj4gPiArICAgICAgICAgICAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQo+ID4gKyAgICAgICAgICB9 IGVsc2UgaWYgKCggVkVORE9SX0lEID09IERldmljZS5JZFZlbmRvciApDQo+ID4gKyAgICAgICAg ICAgICYmICggUFJPRFVDVF9JRF8xNzhBID09IERldmljZS5JZFByb2R1Y3QgKSkgew0KPiA+ICsg ICAgICAgICAgICAqcHBDb250cm9sbGVyTmFtZSA9IEwiQVg4ODE3OEEgVVNCMi4wIEdpZ2FiaXQg RXRoZXJuZXQNCj4gQ29udHJvbGxlciI7DQo+ID4gKyAgICAgICAgICAgIFN0YXR1cyA9IEVGSV9T VUNDRVNTOw0KPiA+ICsgICAgICAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICAgU3RhdHVz ID0gRUZJX1VOU1VQUE9SVEVEOw0KPiA+ICsgICAgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAg fQ0KPiA+ICsNCj4gPiArICAgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gPiArICAgICAgICAg ICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gPiArICAgICAgICAgICAgICAgJmdFZmlVc2JJb1By b3RvY29sR3VpZCwNCj4gPiArICAgICAgICAgICAgICAgZ0RyaXZlckJpbmRpbmcuRHJpdmVyQmlu ZGluZ0hhbmRsZSwNCj4gPiArICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiA+ICsg ICAgICAgICAgICAgICApOw0KPiA+ICsgIH0NCj4gPiArICAvLw0KPiA+ICsgIC8vIFJldHVybiB0 aGUgb3BlcmF0aW9uIHN0YXR1cw0KPiA+ICsgIC8vDQo+ID4gKyAgaWYgKFN0YXR1cyAhPSBFRklf U1VDQ0VTUykgew0KPiA+ICsgICAgKnBwQ29udHJvbGxlck5hbWUgPSBMIkFYODgxNzlfMTc4QSBH aWdhYml0IEV0aGVybmV0IENvbnRyb2xsZXIiOw0KPiA+ICsgICAgICAgIFN0YXR1cyA9IEVGSV9T VUNDRVNTOw0KPiA+ICsgIH0NCj4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICsjZW5kaWYNCj4gPiBkaWZmIC0tZ2l0DQo+IGEvU2lsaWNvbi9BU0lYL0RyaXZlcnMvQnVz L1VzYi9Vc2JOZXR3b3JraW5nL0F4ODgxNzkvRHJpdmVyQmluZGluZy5jDQo+IGIvU2lsaWNvbi9B U0lYL0RyaXZlcnMvQnVzL1VzYi9Vc2JOZXR3b3JraW5nL0F4ODgxNzkvRHJpdmVyQmluZGluZy5j DQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjgyNmE1 MzllM2YzNA0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysNCj4gYi9TaWxpY29uL0FTSVgvRHJp dmVycy9CdXMvVXNiL1VzYk5ldHdvcmtpbmcvQXg4ODE3OS9Ecml2ZXJCaW5kaW5nLmMNCj4gPiBA QCAtMCwwICsxLDYyMCBAQA0KPiA+ICsvKiogQGZpbGUNCj4gPiArICBJbXBsZW1lbnQgdGhlIGRy aXZlciBiaW5kaW5nIHByb3RvY29sIGZvciBBc2l4IEFYODgxNzkgRXRoZXJuZXQgZHJpdmVyLg0K PiA+ICsNCj4gPiArICBDb3B5cmlnaHQgKGMpIDIwMTEsIEludGVsIENvcnBvcmF0aW9uDQo+ID4g KyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gPiArDQo+ ID4gKyoqLw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgIkF4ODgxNzkuaCINCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgIFZlcmlmeSB0aGUgY29udHJvbGxlciB0eXBlDQo+ID4gKw0KPiA+ICsgIEBwYXJh bSBbaW5dIHBUaGlzICAgICAgICAgICAgICAgIFByb3RvY29sIGluc3RhbmNlIHBvaW50ZXIuDQo+ ID4gKyAgQHBhcmFtIFtpbl0gQ29udHJvbGxlciAgICAgICAgICAgSGFuZGxlIG9mIGRldmljZSB0 byB0ZXN0Lg0KPiA+ICsgIEBwYXJhbSBbaW5dIHBSZW1haW5pbmdEZXZpY2VQYXRoIE5vdCB1c2Vk Lg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgIFRoaXMgZHJpdmVy IHN1cHBvcnRzIHRoaXMgZGV2aWNlLg0KPiA+ICsgIEByZXR2YWwgb3RoZXIgICAgICAgICAgICAg ICAgVGhpcyBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGRldmljZS4NCj4gPiArDQo+ID4g KyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtEcml2ZXJTdXBwb3J0ZWQg KA0KPiA+ICsgIElOIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAqIHBUaGlzLA0KPiA+ICsg IElOIEVGSV9IQU5ETEUgQ29udHJvbGxlciwNCj4gPiArICBJTiBFRklfREVWSUNFX1BBVEhfUFJP VE9DT0wgKiBwUmVtYWluaW5nRGV2aWNlUGF0aA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEVG SV9VU0JfREVWSUNFX0RFU0NSSVBUT1IgRGV2aWNlOw0KPiA+ICsgIEVGSV9VU0JfSU9fUFJPVE9D T0wgKiBwVXNiSW87DQo+ID4gKyAgRUZJX1NUQVRVUyBTdGF0dXM7DQo+ID4gKw0KPiA+ICsgIC8v DQo+ID4gKyAgLy8gIENvbm5lY3QgdG8gdGhlIFVTQiBzdGFjaw0KPiA+ICsgIC8vDQo+ID4gKyAg U3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KPiA+ICsgICAgICAgICAgICAgICAgICBDb250 cm9sbGVyLA0KPiA+ICsgICAgICAgICAgICAgICAgICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0K PiA+ICsgICAgICAgICAgICAgICAgICAoVk9JRCAqKikgJnBVc2JJbywNCj4gPiArICAgICAgICAg ICAgICAgICAgcFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ID4gKyAgICAgICAgICAgICAg ICAgIENvbnRyb2xsZXIsDQo+ID4gKyAgICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09M X0JZX0RSSVZFUg0KPiA+ICsgICAgICAgICAgICAgICAgICApOw0KPiA+ICsgIGlmICghRUZJX0VS Uk9SICggU3RhdHVzICkpIHsNCj4gPiArDQo+ID4gKyAgICAvLw0KPiA+ICsgICAgLy8gIEdldCB0 aGUgaW50ZXJmYWNlIGRlc2NyaXB0b3IgdG8gY2hlY2sgdGhlIFVTQiBjbGFzcyBhbmQgZmluZCBh DQo+IHRyYW5zcG9ydA0KPiA+ICsgICAgLy8gIHByb3RvY29sIGhhbmRsZXIuDQo+ID4gKyAgICAv Lw0KPiA+ICsgICAgU3RhdHVzID0gcFVzYklvLT5Vc2JHZXREZXZpY2VEZXNjcmlwdG9yICggcFVz YklvLCAmRGV2aWNlICk7DQo+ID4gKyAgICBpZiAoRUZJX0VSUk9SKFN0YXR1cykpIHsNCj4gPiAr ICAgICAgU3RhdHVzID0gRUZJX1VOU1VQUE9SVEVEOw0KPiA+ICsgICAgfSBlbHNlIHsNCj4gPiAr ICAgICAgLy8NCj4gPiArICAgICAgLy8gIFZhbGlkYXRlIHRoZSBhZGFwdGVyDQo+ID4gKyAgICAg IC8vDQo+ID4gKyAgICAgIGlmICgoIFZFTkRPUl9JRCA9PSBEZXZpY2UuSWRWZW5kb3IgKSAmJg0K PiA+ICsgICAgICAgICAgKCBQUk9EVUNUX0lEID09IERldmljZS5JZFByb2R1Y3QgKSkgew0KPiA+ ICsgICAgICAgIFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KPiA+ICsgICAgICB9IGVsc2UgaWYgKCgg VkVORE9SX0lEID09IERldmljZS5JZFZlbmRvciApICYmDQo+ID4gKyAgICAgICAgICAgICAgICAg KCBQUk9EVUNUX0lEXzE3OEEgPT0gRGV2aWNlLklkUHJvZHVjdCApKSB7DQo+ID4gKyAgICAgICAg U3RhdHVzID0gRUZJX1NVQ0NFU1M7DQo+ID4gKyAgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAg U3RhdHVzID0gRUZJX1VOU1VQUE9SVEVEOw0KPiA+ICsgICAgICB9DQo+ID4gKyAgICB9DQo+ID4g KyAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiA+ICsgICAgICAgICAgIENvbnRyb2xsZXIsDQo+ ID4gKyAgICAgICAgICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCj4gPiArICAgICAgICAgICBw VGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gPiArICAgICAgICAgICBDb250cm9sbGVyDQo+ ID4gKyAgICAgICAgICAgKTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8g IFJldHVybiB0aGUgZGV2aWNlIHN1cHBvcnRlZCBzdGF0dXMNCj4gPiArICAvLw0KPiA+ICsNCj4g PiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsNCj4gPiArLyoqDQo+ID4g KyAgU3RhcnQgdGhpcyBkcml2ZXIgb24gQ29udHJvbGxlciBieSBvcGVuaW5nIFVzYklvIGFuZCBE ZXZpY2VQYXRoDQo+IHByb3RvY29scy4NCj4gPiArICBJbml0aWFsaXplIFBYRSBzdHJ1Y3R1cmVz LCBjcmVhdGUgYSBjb3B5IG9mIHRoZSBDb250cm9sbGVyIERldmljZSBQYXRoIHdpdGgNCj4gdGhl DQo+ID4gKyAgTklDJ3MgTUFDIGFkZHJlc3MgYXBwZW5kZWQgdG8gaXQsIGluc3RhbGwgdGhlIE5l dHdvcmtJbnRlcmZhY2VJZGVudGlmaWVyDQo+IHByb3RvY29sDQo+ID4gKyAgb24gdGhlIG5ld2x5 IGNyZWF0ZWQgRGV2aWNlIFBhdGguDQo+ID4gKw0KPiA+ICsgIEBwYXJhbSBbaW5dIHBUaGlzICAg ICAgICAgICAgICAgIFByb3RvY29sIGluc3RhbmNlIHBvaW50ZXIuDQo+ID4gKyAgQHBhcmFtIFtp bl0gQ29udHJvbGxlciAgICAgICAgICAgSGFuZGxlIG9mIGRldmljZSB0byB3b3JrIHdpdGguDQo+ ID4gKyAgQHBhcmFtIFtpbl0gcFJlbWFpbmluZ0RldmljZVBhdGggTm90IHVzZWQsIGFsd2F5cyBw cm9kdWNlIGFsbA0KPiBwb3NzaWJsZSBjaGlsZHJlbi4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBF RklfU1VDQ0VTUyAgICAgICAgICBUaGlzIGRyaXZlciBpcyBhZGRlZCB0byBDb250cm9sbGVyLg0K PiA+ICsgIEByZXR2YWwgb3RoZXIgICAgICAgICAgICAgICAgVGhpcyBkcml2ZXIgZG9lcyBub3Qg c3VwcG9ydCB0aGlzIGRldmljZS4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ ID4gK0VGSUFQSQ0KPiA+ICtEcml2ZXJTdGFydCAoDQo+ID4gKyAgSU4gRUZJX0RSSVZFUl9CSU5E SU5HX1BST1RPQ09MICogcFRoaXMsDQo+ID4gKyAgSU4gRUZJX0hBTkRMRSBDb250cm9sbGVyLA0K PiA+ICsgIElOIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAqIHBSZW1haW5pbmdEZXZpY2VQYXRo DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1NUQVRVUyBTdGF0dXM7DQo+ID4gKyAgTklD X0RFVklDRSAqcE5pY0RldmljZTsNCj4gPiArICBVSU5UTiBMZW5ndGhJbkJ5dGVzOw0KPiA+ICsg IEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAqUGFyZW50RGV2aWNlUGF0aCA9IE5VTEw7DQo+ID4g KyAgTUFDX0FERFJfREVWSUNFX1BBVEggTWFjRGV2aWNlTm9kZTsNCj4gPiArDQo+ID4gKyAgLy8N Cj4gPiArICAvLyAgQWxsb2NhdGUgdGhlIGRldmljZSBzdHJ1Y3R1cmUNCj4gPiArICAvLw0KPiA+ ICsgIExlbmd0aEluQnl0ZXMgPSBzaXplb2YgKCAqcE5pY0RldmljZSApOw0KPiA+ICsgIFN0YXR1 cyA9IGdCUy0+QWxsb2NhdGVQb29sICgNCj4gPiArICAgICAgICAgICAgICAgICAgRWZpUnVudGlt ZVNlcnZpY2VzRGF0YSwNCj4NCj4gV2h5IGlzIHRoaXMgcnVudGltZSBtZW1vcnk/DQo+DQo+ID4g KyAgICAgICAgICAgICAgICAgIExlbmd0aEluQnl0ZXMsDQo+ID4gKyAgICAgICAgICAgICAgICAg IChWT0lEICoqKSAmcE5pY0RldmljZQ0KPiA+ICsgICAgICAgICAgICAgICAgICApOw0KPiA+ICsN Cj4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICBnb3RvIEVSUjsNCj4g PiArICB9DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gIFNldCB0aGUgc3RydWN0dXJlIHNp Z25hdHVyZQ0KPiA+ICsgIC8vDQo+ID4gKyAgWmVyb01lbSAoIHBOaWNEZXZpY2UsIExlbmd0aElu Qnl0ZXMgKTsNCj4gPiArICBwTmljRGV2aWNlLT5TaWduYXR1cmUgPSBERVZfU0lHTkFUVVJFOw0K PiA+ICsNCj4gPiArICBTdGF0dXMgPSBnQlMtPk9wZW5Qcm90b2NvbCAoDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgQ29udHJvbGxlciwNCj4gPiArICAgICAgICAgICAgICAgICAgICAmZ0VmaVVz YklvUHJvdG9jb2xHdWlkLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgIChWT0lEICoqKSAmcE5p Y0RldmljZS0+cFVzYklvLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgIHBUaGlzLT5Ecml2ZXJC aW5kaW5nSGFuZGxlLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXIsDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgRUZJX09QRU5fUFJPVE9DT0xfQllfRFJJVkVSDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgKTsNCj4gPiArDQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPiA+ICsgICAgZ290byBFUlI7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAvLw0KPiA+ ICsgIC8vICBJbml0aWFsaXplIHRoZSBzaW1wbGUgbmV0d29yayBwcm90b2NvbA0KPiA+ICsgIC8v DQo+ID4gKyAgU3RhdHVzID0gU05fU2V0dXAgKCBwTmljRGV2aWNlICk7DQo+ID4gKw0KPiA+ICsg IGlmIChFRklfRVJST1IoU3RhdHVzKSl7DQo+ID4gKyAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0K PiA+ICsgICAgICAgICAgICAgIENvbnRyb2xsZXIsDQo+ID4gKyAgICAgICAgICAgICAgJmdFZmlV c2JJb1Byb3RvY29sR3VpZCwNCj4gPiArICAgICAgICAgICAgICBwVGhpcy0+RHJpdmVyQmluZGlu Z0hhbmRsZSwNCj4gPiArICAgICAgICAgICAgICBDb250cm9sbGVyDQo+ID4gKyAgICAgICAgICAg ICAgKTsNCj4gPiArICAgIGdvdG8gRVJSOw0KPiA+ICsgIH0NCj4gPiArICAvLw0KPiA+ICsgIC8v IFNldCBEZXZpY2UgUGF0aA0KPiA+ICsgIC8vDQo+ID4gKyAgU3RhdHVzID0gZ0JTLT5PcGVuUHJv dG9jb2wgKA0KPiA+ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVyLA0KPiA+ICsgICAgICAg ICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQo+ID4gKyAgICAgICAgICAg ICAgICAgIChWT0lEICoqKSAmUGFyZW50RGV2aWNlUGF0aCwNCj4gPiArICAgICAgICAgICAgICAg ICAgcFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ID4gKyAgICAgICAgICAgICAgICAgIENv bnRyb2xsZXIsDQo+ID4gKyAgICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0JZX0RS SVZFUg0KPiA+ICsgICAgICAgICAgICAgICAgICApOw0KPiA+ICsgIGlmIChFRklfRVJST1IoU3Rh dHVzKSkgew0KPiA+ICsgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gPiArICAgICAgICAgICAg ICBDb250cm9sbGVyLA0KPiA+ICsgICAgICAgICAgICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQs DQo+ID4gKyAgICAgICAgICAgICAgcFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ID4gKyAg ICAgICAgICAgICAgQ29udHJvbGxlcg0KPiA+ICsgICAgICAgICAgICAgICk7DQo+ID4gKyAgICBn b3RvIEVSUjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIFplcm9NZW0gKCZNYWNEZXZpY2VOb2Rl LCBzaXplb2YgKE1BQ19BRERSX0RFVklDRV9QQVRIKSk7DQo+ID4gKyAgTWFjRGV2aWNlTm9kZS5I ZWFkZXIuVHlwZSA9IE1FU1NBR0lOR19ERVZJQ0VfUEFUSDsNCj4gPiArICBNYWNEZXZpY2VOb2Rl LkhlYWRlci5TdWJUeXBlID0gTVNHX01BQ19BRERSX0RQOw0KPiA+ICsNCj4gPiArICBTZXREZXZp Y2VQYXRoTm9kZUxlbmd0aCAoJk1hY0RldmljZU5vZGUuSGVhZGVyLCBzaXplb2YNCj4gKE1BQ19B RERSX0RFVklDRV9QQVRIKSk7DQo+ID4gKw0KPiA+ICsgIENvcHlNZW0gKCZNYWNEZXZpY2VOb2Rl Lk1hY0FkZHJlc3MsDQo+ID4gKyAgICAgICAgICAgJnBOaWNEZXZpY2UtPlNpbXBsZU5ldHdvcmtE YXRhLkN1cnJlbnRBZGRyZXNzLA0KPiA+ICsgICAgICAgICAgIFBYRV9IV0FERFJfTEVOX0VUSEVS KTsNCj4gPiArDQo+ID4gKyAgTWFjRGV2aWNlTm9kZS5JZlR5cGUgPSBwTmljRGV2aWNlLT5TaW1w bGVOZXR3b3JrRGF0YS5JZlR5cGU7DQo+ID4gKw0KPiA+ICsgIHBOaWNEZXZpY2UtPk15RGV2UGF0 aCA9IEFwcGVuZERldmljZVBhdGhOb2RlICgNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUGFyZW50RGV2aWNlUGF0aCwNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAqKQ0K PiAmTWFjRGV2aWNlTm9kZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOw0KPiA+ICsgIHBOaWNEZXZpY2UtPkNvbnRyb2xsZXIgPSBOVUxMOw0KPiA+ICsN Cj4gPiArICAvLw0KPiA+ICsgIC8vICBJbnN0YWxsIGJvdGggdGhlIHNpbXBsZSBuZXR3b3JrIGFu ZCBkZXZpY2UgcGF0aCBwcm90b2NvbHMuDQo+ID4gKyAgLy8NCj4gPiArICBTdGF0dXMgPSBnQlMt Pkluc3RhbGxNdWx0aXBsZVByb3RvY29sSW50ZXJmYWNlcyAoDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgJnBOaWNEZXZpY2UtPkNvbnRyb2xsZXIsDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgJmdFZmlDYWxsZXJJZEd1aWQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgcE5pY0RldmljZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAmZ0VmaVNp bXBsZU5ldHdvcmtQcm90b2NvbEd1aWQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg JnBOaWNEZXZpY2UtPlNpbXBsZU5ldHdvcmssDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgIHBOaWNEZXZpY2UtPk15RGV2UGF0aCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICBOVUxMDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gPiArDQo+ID4g KyAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKXsNCj4gPiArICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAo DQo+ID4gKyAgICAgICAgICAgICAgQ29udHJvbGxlciwNCj4gPiArICAgICAgICAgICAgICAmZ0Vm aURldmljZVBhdGhQcm90b2NvbEd1aWQsDQo+ID4gKyAgICAgICAgICAgICAgcFRoaXMtPkRyaXZl ckJpbmRpbmdIYW5kbGUsDQo+ID4gKyAgICAgICAgICAgICAgQ29udHJvbGxlcik7DQo+ID4gKyAg ICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiA+ICsgICAgICAgICAgICAgIENvbnRyb2xsZXIsDQo+ ID4gKyAgICAgICAgICAgICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCj4gPiArICAgICAgICAg ICAgICBwVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gPiArICAgICAgICAgICAgICBDb250 cm9sbGVyDQo+ID4gKyAgICAgICAgICAgICAgKTsNCj4gPiArICAgIGdvdG8gRVJSOw0KPiA+ICsg IH0NCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBPcGVuIEZvciBDaGlsZCBEZXZpY2UNCj4g PiArICAvLw0KPiA+ICsgIFN0YXR1cyA9IGdCUy0+T3BlblByb3RvY29sICgNCj4gPiArICAgICAg ICAgICAgICAgICAgQ29udHJvbGxlciwNCj4gPiArICAgICAgICAgICAgICAgICAgJmdFZmlVc2JJ b1Byb3RvY29sR3VpZCwNCj4gPiArICAgICAgICAgICAgICAgICAgKFZPSUQgKiopICZwTmljRGV2 aWNlLT5wVXNiSW8sDQo+ID4gKyAgICAgICAgICAgICAgICAgIHBUaGlzLT5Ecml2ZXJCaW5kaW5n SGFuZGxlLA0KPiA+ICsgICAgICAgICAgICAgICAgICBwTmljRGV2aWNlLT5Db250cm9sbGVyLA0K PiA+ICsgICAgICAgICAgICAgICAgICBFRklfT1BFTl9QUk9UT0NPTF9CWV9DSElMRF9DT05UUk9M TEVSDQo+ID4gKyAgICAgICAgICAgICAgICAgICk7DQo+ID4gKw0KPiA+ICsgIGlmIChFRklfRVJS T1IoU3RhdHVzKSl7DQo+ID4gKyAgICBnQlMtPlVuaW5zdGFsbE11bHRpcGxlUHJvdG9jb2xJbnRl cmZhY2VzICgNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAmcE5pY0RldmljZS0+Q29u dHJvbGxlciwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAmZ0VmaUNhbGxlcklkR3Vp ZCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICBwTmljRGV2aWNlLA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICZnRWZpU2ltcGxlTmV0d29ya1Byb3RvY29sR3VpZCwNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAmcE5pY0RldmljZS0+U2ltcGxlTmV0d29yaywN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1 aWQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgcE5pY0RldmljZS0+TXlEZXZQYXRo LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICApOw0KPiA+ICsgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gPiArICAg ICAgICAgICAgICBDb250cm9sbGVyLA0KPiA+ICsgICAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0 aFByb3RvY29sR3VpZCwNCj4gPiArICAgICAgICAgICAgICBwVGhpcy0+RHJpdmVyQmluZGluZ0hh bmRsZSwNCj4gPiArICAgICAgICAgICAgICBDb250cm9sbGVyKTsNCj4gPiArICAgIGdCUy0+Q2xv c2VQcm90b2NvbCAoDQo+ID4gKyAgICAgICAgICAgICAgQ29udHJvbGxlciwNCj4gPiArICAgICAg ICAgICAgICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KPiA+ICsgICAgICAgICAgICAgIHBUaGlz LT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiA+ICsgICAgICAgICAgICAgIENvbnRyb2xsZXINCj4g PiArICAgICAgICAgICAgICApOw0KPiA+ICsgICAgZ290byBFUlI7DQo+ID4gKyAgfQ0KPiA+ICsN Cj4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICsNCj4gPiArDQo+ID4gK0VSUjoNCj4gPiArDQo+ ID4gKyAgaWYgKCBOVUxMICE9IHBOaWNEZXZpY2UtPnBCdWxrSW5idWYpDQo+ID4gKyAgICBnQlMt PkZyZWVQb29sIChwTmljRGV2aWNlLT5wQnVsa0luYnVmKTsNCj4gPiArICBpZiAoIE5VTEwgIT0g cE5pY0RldmljZS0+cFR4VGVzdCkNCj4gPiArICAgIGdCUy0+RnJlZVBvb2wgKHBOaWNEZXZpY2Ut PnBUeFRlc3QpOw0KPiA+ICsgIGlmICggTlVMTCAhPSBwTmljRGV2aWNlLT5NeURldlBhdGgpDQo+ ID4gKyAgICBnQlMtPkZyZWVQb29sIChwTmljRGV2aWNlLT5NeURldlBhdGgpOw0KPiA+ICsgIGlm IChOVUxMICE9IHBOaWNEZXZpY2UpDQo+ID4gKyAgICBnQlMtPkZyZWVQb29sICggcE5pY0Rldmlj ZSApOw0KPiA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gKw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsv KioNCj4gPiArICBTdG9wIHRoaXMgZHJpdmVyIG9uIENvbnRyb2xsZXIgYnkgcmVtb3ZpbmcgTmV0 d29ya0ludGVyZmFjZUlkZW50aWZpZXINCj4gcHJvdG9jb2wgYW5kDQo+ID4gKyAgY2xvc2luZyB0 aGUgRGV2aWNlUGF0aCBhbmQgUGNpSW8gcHJvdG9jb2xzIG9uIENvbnRyb2xsZXIuDQo+ID4gKw0K PiA+ICsgIEBwYXJhbSBbaW5dIHBUaGlzICAgICAgICAgICAgICAgIFByb3RvY29sIGluc3RhbmNl IHBvaW50ZXIuDQo+ID4gKyAgQHBhcmFtIFtpbl0gQ29udHJvbGxlciAgICAgICAgICAgSGFuZGxl IG9mIGRldmljZSB0byBzdG9wIGRyaXZlciBvbi4NCj4gPiArICBAcGFyYW0gW2luXSBOdW1iZXJP ZkNoaWxkcmVuICAgICBIb3cgbWFueSBjaGlsZHJlbiBuZWVkIHRvIGJlDQo+IHN0b3BwZWQuDQo+ ID4gKyAgQHBhcmFtIFtpbl0gcENoaWxkSGFuZGxlQnVmZmVyICAgTm90IHVzZWQuDQo+ID4gKw0K PiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgVGhpcyBkcml2ZXIgaXMgcmVtb3Zl ZCBDb250cm9sbGVyLg0KPiA+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgVGhlIGRl dmljZSBjb3VsZCBub3QgYmUgc3RvcHBlZCBkdWUgdG8gYQ0KPiBkZXZpY2UgZXJyb3IuDQo+ID4g KyAgQHJldHZhbCBvdGhlciAgICAgICAgICAgICAgICBUaGlzIGRyaXZlciB3YXMgbm90IHJlbW92 ZWQgZnJvbSB0aGlzIGRldmljZS4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ ID4gK0VGSUFQSQ0KPiA+ICtEcml2ZXJTdG9wICgNCj4gPiArICBJTiAgRUZJX0RSSVZFUl9CSU5E SU5HX1BST1RPQ09MICogcFRoaXMsDQo+ID4gKyAgSU4gIEVGSV9IQU5ETEUgQ29udHJvbGxlciwN Cj4gPiArICBJTiAgVUlOVE4gTnVtYmVyT2ZDaGlsZHJlbiwNCj4gPiArICBJTiAgRUZJX0hBTkRM RSAqIENoaWxkSGFuZGxlQnVmZmVyDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgQk9PTEVBTiBB bGxDaGlsZHJlblN0b3BwZWQ7DQo+ID4gKyAgRUZJX1NJTVBMRV9ORVRXT1JLX1BST1RPQ09MICpT aW1wbGVOZXR3b3JrOw0KPiA+ICsgIEVGSV9TVEFUVVMgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQo+ ID4gKyAgTklDX0RFVklDRSAqcE5pY0RldmljZTsNCj4gPiArICBVSU5UTiBJbmRleDsNCj4gPiAr DQo+ID4gKyAgLy8NCj4gPiArICAvLyBDb21wbGV0ZSBhbGwgb3V0c3RhbmRpbmcgdHJhbnNhY3Rp b25zIHRvIENvbnRyb2xsZXIuDQo+ID4gKyAgLy8gRG9uJ3QgYWxsb3cgYW55IG5ldyB0cmFuc2Fj dGlvbiB0byBDb250cm9sbGVyIHRvIGJlIHN0YXJ0ZWQuDQo+ID4gKyAgLy8NCj4gPiArICBpZiAo TnVtYmVyT2ZDaGlsZHJlbiA9PSAwKSB7DQo+ID4gKyAgICBTdGF0dXMgPSBnQlMtPk9wZW5Qcm90 b2NvbCAoDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVyLA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgJmdFZmlTaW1wbGVOZXR3b3JrUHJvdG9jb2xHdWlkLA0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgKFZPSUQgKiopICZTaW1wbGVOZXR3b3JrLA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgcFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICBDb250cm9sbGVyLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg RUZJX09QRU5fUFJPVE9DT0xfR0VUX1BST1RPQ09MDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICApOw0KPiA+ICsNCj4gPiArICAgIGlmIChFRklfRVJST1IoU3RhdHVzKSkgew0KPiA+ICsgICAg ICAvLw0KPiA+ICsgICAgICAvLyBUaGlzIGlzIGEgMm5kIHR5cGUgaGFuZGxlKG11bHRpLWx1biBy b290KSwgaXQgbmVlZHMgdG8gY2xvc2UNCj4gZGV2aWNlcGF0aA0KPiA+ICsgICAgICAvLyBhbmQg dXNiaW8gcHJvdG9jb2wuDQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIGdCUy0+Q2xvc2VQcm90 b2NvbCAoDQo+ID4gKyAgICAgICAgICAgICAgICBDb250cm9sbGVyLA0KPiA+ICsgICAgICAgICAg ICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiA+ICsgICAgICAgICAgICAgICAg cFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ID4gKyAgICAgICAgICAgICAgICBDb250cm9s bGVyDQo+ID4gKyAgICAgICAgICAgICAgICApOw0KPiA+ICsgICAgICBnQlMtPkNsb3NlUHJvdG9j b2wgKA0KPiA+ICsgICAgICAgICAgICAgICAgQ29udHJvbGxlciwNCj4gPiArICAgICAgICAgICAg ICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQsDQo+ID4gKyAgICAgICAgICAgICAgICBwVGhpcy0+ RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gPiArICAgICAgICAgICAgICAgIENvbnRyb2xsZXINCj4g PiArICAgICAgICAgICAgICAgICk7DQo+ID4gKyAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4g PiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBwTmljRGV2aWNlID0gREVWX0ZST01fU0lNUExFX05F VFdPUksgKCBTaW1wbGVOZXR3b3JrICk7DQo+ID4gKw0KPiA+ICsgICAgU3RhdHVzID0gZ0JTLT5V bmluc3RhbGxNdWx0aXBsZVByb3RvY29sSW50ZXJmYWNlcyAoDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgQ29udHJvbGxlciwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAm Z0VmaUNhbGxlcklkR3VpZCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICBwTmljRGV2 aWNlLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICZnRWZpU2ltcGxlTmV0d29ya1By b3RvY29sR3VpZCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAmcE5pY0RldmljZS0+ U2ltcGxlTmV0d29yaywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAmZ0VmaURldmlj ZVBhdGhQcm90b2NvbEd1aWQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgcE5pY0Rl dmljZS0+TXlEZXZQYXRoLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiA+ICsNCj4gPiArICAgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgICAgcmV0dXJuIFN0YXR1czsNCj4gPiArICAgIH0N Cj4gPiArICAgIC8vDQo+ID4gKyAgICAvLyBDbG9zZSB0aGUgYnVzIGRyaXZlcg0KPiA+ICsgICAg Ly8NCj4gPiArICAgIFN0YXR1cyA9IGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgIENvbnRyb2xsZXIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgcFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgIENvbnRyb2xsZXINCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gPiArDQo+ ID4gKyAgICBTdGF0dXMgPSBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICBDb250cm9sbGVyLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAmZ0Vm aVVzYklvUHJvdG9jb2xHdWlkLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICBwVGhpcy0+ RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgQ29udHJv bGxlcg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiA+ICsgICAgcmV0dXJuIEVG SV9TVUNDRVNTOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgQWxsQ2hpbGRyZW5TdG9wcGVkID0g VFJVRTsNCj4gPiArDQo+ID4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgTnVtYmVyT2ZDaGls ZHJlbjsgSW5kZXgrKykgew0KPg0KPiBUaGlzIGlzIG5vdCBhIGJ1cyBkcml2ZXIsIHNvIEkgZG9u J3QgdGhpbmsgd2UgbmVlZCBhbnkgb2YgdGhpcyBzdHVmZi4NCj4NCj4gPiArICAgIFN0YXR1cyA9 IGdCUy0+T3BlblByb3RvY29sICgNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIENoaWxkSGFu ZGxlQnVmZmVyW0luZGV4XSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICZnRWZpU2ltcGxl TmV0d29ya1Byb3RvY29sR3VpZCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIChWT0lEICoq KSAmU2ltcGxlTmV0d29yaywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIHBUaGlzLT5Ecml2 ZXJCaW5kaW5nSGFuZGxlLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlciwN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0dFVF9QUk9UT0NP TA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gPiArDQo+ID4gKyAgICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICAgIEFsbENoaWxkcmVuU3RvcHBlZCA9IEZBTFNF Ow0KPiA+ICsgICAgICBjb250aW51ZTsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBwTmlj RGV2aWNlID0gREVWX0ZST01fU0lNUExFX05FVFdPUksgKCBTaW1wbGVOZXR3b3JrICk7DQo+ID4g Kw0KPiA+ICsgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gPiArICAgICAgICAgICAgICBDb250 cm9sbGVyLA0KPiA+ICsgICAgICAgICAgICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQsDQo+ID4g KyAgICAgICAgICAgICAgcFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ID4gKyAgICAgICAg ICAgICAgQ2hpbGRIYW5kbGVCdWZmZXJbSW5kZXhdDQo+ID4gKyAgICAgICAgICAgICAgKTsNCj4g PiArDQo+ID4gKyAgICBTdGF0dXMgPSBnQlMtPlVuaW5zdGFsbE11bHRpcGxlUHJvdG9jb2xJbnRl cmZhY2VzICgNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICBDaGlsZEhhbmRsZUJ1ZmZl cltJbmRleF0sDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmdFZmlDYWxsZXJJZEd1 aWQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgcE5pY0RldmljZSwNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAmZ0VmaVNpbXBsZU5ldHdvcmtQcm90b2NvbEd1aWQsDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnBOaWNEZXZpY2UtPlNpbXBsZU5ldHdvcmss DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xH dWlkLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIHBOaWNEZXZpY2UtPk15RGV2UGF0 aCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsNCj4gPiArDQo+ID4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+ID4gKyAgICAgIFN0YXR1cyA9IGdCUy0+T3BlblByb3RvY29sICgNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgQ29udHJvbGxlciwNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg KFZPSUQgKiopICZwTmljRGV2aWNlLT5wVXNiSW8sDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgIHBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICBDaGlsZEhhbmRsZUJ1ZmZlcltJbmRleF0sDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgIEVGSV9PUEVOX1BST1RPQ09MX0JZX0NISUxEX0NPTlRST0xMRVINCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgKTsNCj4gPiArICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgIGlmICggTlVM TCAhPSBwTmljRGV2aWNlLT5wQnVsa0luYnVmKQ0KPiA+ICsgICAgICAgIGdCUy0+RnJlZVBvb2wg KHBOaWNEZXZpY2UtPnBCdWxrSW5idWYpOw0KPiA+ICsgICAgICBpZiAoIE5VTEwgIT0gcE5pY0Rl dmljZS0+cFR4VGVzdCkNCj4gPiArICAgICAgICBnQlMtPkZyZWVQb29sIChwTmljRGV2aWNlLT5w VHhUZXN0KTsNCj4gPiArICAgICAgaWYgKCBOVUxMICE9IHBOaWNEZXZpY2UtPk15RGV2UGF0aCkN Cj4gPiArICAgICAgICBnQlMtPkZyZWVQb29sIChwTmljRGV2aWNlLT5NeURldlBhdGgpOw0KPiA+ ICsgICAgICBpZiAoIE5VTEwgIT0gcE5pY0RldmljZSkNCj4gPiArICAgICAgICBnQlMtPkZyZWVQ b29sIChwTmljRGV2aWNlKTsNCj4gPiArICAgIH0NCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlm ICghQWxsQ2hpbGRyZW5TdG9wcGVkKSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX0RFVklDRV9FUlJP UjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiArfQ0K PiA+ICsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIERyaXZlciBiaW5kaW5nIHByb3RvY29sIGRl Y2xhcmF0aW9uDQo+ID4gKyoqLw0KPiA+ICtFRklfRFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgIGdE cml2ZXJCaW5kaW5nID0gew0KPiA+ICsgIERyaXZlclN1cHBvcnRlZCwNCj4gPiArICBEcml2ZXJT dGFydCwNCj4gPiArICBEcml2ZXJTdG9wLA0KPiA+ICsgIDB4YSwNCj4gPiArICBOVUxMLA0KPiA+ ICsgIE5VTEwNCj4gPiArfTsNCj4gPiArDQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBBeDg4MTc5 IGRyaXZlciB1bmxvYWQgcm91dGluZS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtIFtpbl0gSW1hZ2VI YW5kbGUgICAgICAgSGFuZGxlIGZvciB0aGUgaW1hZ2UuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgICAgIEltYWdlIG1heSBiZSB1bmxvYWRlZA0KPiA+ICsNCj4gPiAr KiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ID4gK0RyaXZlclVubG9hZCAoDQo+ ID4gKyAgSU4gRUZJX0hBTkRMRSBJbWFnZUhhbmRsZQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsg IFVJTlROIEJ1ZmZlclNpemU7DQo+ID4gKyAgVUlOVE4gSW5kZXg7DQo+ID4gKyAgVUlOVE4gTWF4 Ow0KPiA+ICsgIEVGSV9IQU5ETEUgKiBwSGFuZGxlOw0KPiA+ICsgIEVGSV9TVEFUVVMgU3RhdHVz Ow0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vICBEZXRlcm1pbmUgd2hpY2ggZGV2aWNlcyBh cmUgdXNpbmcgdGhpcyBkcml2ZXINCj4gPiArICAvLw0KPiA+ICsgIEJ1ZmZlclNpemUgPSAwOw0K PiA+ICsgIHBIYW5kbGUgPSBOVUxMOw0KPiA+ICsgIFN0YXR1cyA9IGdCUy0+TG9jYXRlSGFuZGxl ICgNCj4gPiArICAgICAgICAgICAgICAgICAgQnlQcm90b2NvbCwNCj4gPiArICAgICAgICAgICAg ICAgICAgJmdFZmlDYWxsZXJJZEd1aWQsDQo+ID4gKyAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ ID4gKyAgICAgICAgICAgICAgICAgICZCdWZmZXJTaXplLA0KPiA+ICsgICAgICAgICAgICAgICAg ICBOVUxMICk7DQo+ID4gKyAgaWYgKCBFRklfQlVGRkVSX1RPT19TTUFMTCA9PSBTdGF0dXMgKSB7 DQo+ID4gKyAgICBmb3IgKCA7IDsgKSB7DQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIC8vICBP bmUgb3IgbW9yZSBibG9jayBJTyBkZXZpY2VzIGFyZSBwcmVzZW50DQo+ID4gKyAgICAgIC8vDQo+ ID4gKyAgICAgIFN0YXR1cyA9IGdCUy0+QWxsb2NhdGVQb29sICgNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgIEVmaVJ1bnRpbWVTZXJ2aWNlc0RhdGEsDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICBCdWZmZXJTaXplLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgKFZPSUQgKiopICZw SGFuZGxlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICApOw0KPiA+ICsgICAgICBpZiAoIEVG SV9FUlJPUiAoIFN0YXR1cyApKSB7DQo+ID4gKyAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgIH0N Cj4gPiArDQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIC8vICBMb2NhdGUgdGhlIGJsb2NrIElP IGRldmljZXMNCj4gPiArICAgICAgLy8NCj4gPiArICAgICAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVI YW5kbGUgKA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgQnlQcm90b2NvbCwNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICZnRWZpQ2FsbGVySWRHdWlkLA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgTlVMTCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICZCdWZmZXJTaXplLA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgcEhhbmRsZSApOw0KPiA+ICsgICAgICBpZiAoIEVG SV9FUlJPUiAoIFN0YXR1cyApKSB7DQo+ID4gKyAgICAgICAgLy8NCj4gPiArICAgICAgICAvLyAg RXJyb3IgZ2V0dGluZyBoYW5kbGVzDQo+ID4gKyAgICAgICAgLy8NCj4gPiArDQo+ID4gKyAgICAg ICAgYnJlYWs7DQo+ID4gKyAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAg IC8vICBSZW1vdmUgYW55IHVzZSBvZiB0aGUgZHJpdmVyDQo+ID4gKyAgICAgIC8vDQo+ID4gKyAg ICAgIE1heCA9IEJ1ZmZlclNpemUgLyBzaXplb2YgKCBwSGFuZGxlWyAwIF0pOw0KPiA+ICsgICAg ICBmb3IgKCBJbmRleCA9IDA7IE1heCA+IEluZGV4OyBJbmRleCsrICkgew0KPiA+ICsgICAgICAg IFN0YXR1cyA9IERyaXZlclN0b3AgKCAmZ0RyaXZlckJpbmRpbmcsDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBIYW5kbGVbIEluZGV4IF0sDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDAsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5V TEwgKTsNCj4gPiArICAgICAgICBpZiAoIEVGSV9FUlJPUiAoIFN0YXR1cyApKSB7DQo+ID4gKyAg ICAgICAgICBicmVhazsNCj4gPiArICAgICAgICB9DQo+ID4gKyAgICAgIH0NCj4gPiArICAgICAg YnJlYWs7DQo+ID4gKyAgICB9DQo+ID4gKyAgfSBlbHNlIHsNCj4gPiArICAgIGlmICggRUZJX05P VF9GT1VORCA9PSBTdGF0dXMgKSB7DQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIC8vICBObyBk ZXZpY2VzIHdlcmUgZm91bmQNCj4gPiArICAgICAgLy8NCj4gPiArICAgICAgU3RhdHVzID0gRUZJ X1NVQ0NFU1M7DQo+ID4gKyAgICB9DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsg IC8vICBGcmVlIHRoZSBoYW5kbGUgYXJyYXkNCj4gPiArICAvLw0KPiA+ICsgIGlmICggTlVMTCAh PSBwSGFuZGxlICkgew0KPiA+ICsgICAgZ0JTLT5GcmVlUG9vbCAoIHBIYW5kbGUgKTsNCj4gPiAr ICB9DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gIFJlbW92ZSB0aGUgcHJvdG9jb2xzIGlu c3RhbGxlZCBieSB0aGUgRW50cnlQb2ludCByb3V0aW5lLg0KPiA+ICsgIC8vDQo+ID4gKyAgaWYg KCAhRUZJX0VSUk9SICggU3RhdHVzICkpIHsNCj4gPiArICAgIGdCUy0+VW5pbnN0YWxsTXVsdGlw bGVQcm90b2NvbEludGVyZmFjZXMgKA0KPiA+ICsgICAgICAgICAgICBJbWFnZUhhbmRsZSwNCj4g PiArICAgICAgICAgICAgJmdFZmlEcml2ZXJCaW5kaW5nUHJvdG9jb2xHdWlkLA0KPiA+ICsgICAg ICAgICAgICAmZ0RyaXZlckJpbmRpbmcsDQo+ID4gKyAgICAgICAgICAgICZnRWZpQ29tcG9uZW50 TmFtZVByb3RvY29sR3VpZCwNCj4gPiArICAgICAgICAgICAgJmdDb21wb25lbnROYW1lLA0KPiA+ ICsgICAgICAgICAgICAmZ0VmaUNvbXBvbmVudE5hbWUyUHJvdG9jb2xHdWlkLA0KPiA+ICsgICAg ICAgICAgICAmZ0NvbXBvbmVudE5hbWUyLA0KPiA+ICsgICAgICAgICAgICBOVUxMDQo+ID4gKyAg ICAgICAgICAgICk7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vICBSZXR1 cm4gdGhlIHVubG9hZCBzdGF0dXMNCj4gPiArICAvLw0KPiA+ICsNCj4gPiArICByZXR1cm4gU3Rh dHVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gK0F4ODgxNzkgZHJpdmVy IGVudHJ5IHBvaW50Lg0KPiA+ICsNCj4gPiArQHBhcmFtIFtpbl0gSW1hZ2VIYW5kbGUgICAgICAg SGFuZGxlIGZvciB0aGUgaW1hZ2UuDQo+ID4gK0BwYXJhbSBbaW5dIHBTeXN0ZW1UYWJsZSAgICAg IEFkZHJlc3Mgb2YgdGhlIHN5c3RlbSB0YWJsZS4NCj4gPiArDQo+ID4gK0ByZXR2YWwgRUZJX1NV Q0NFU1MgICAgICAgICAgIEltYWdlIHN1Y2Nlc3NmdWxseSBsb2FkZWQuDQo+ID4gKw0KPiA+ICsq Ki8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArRW50cnlQb2ludCAoDQo+ID4g KyAgSU4gRUZJX0hBTkRMRSBJbWFnZUhhbmRsZSwNCj4gPiArICBJTiBFRklfU1lTVEVNX1RBQkxF ICogcFN5c3RlbVRhYmxlDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX0xPQURFRF9JTUFH RV9QUk9UT0NPTCAqIHBMb2FkZWRJbWFnZTsNCj4gPiArICBFRklfU1RBVFVTICAgIFN0YXR1czsN Cj4gPiArDQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gIEVuYWJsZSB1bmxvYWQgc3VwcG9y dA0KPiA+ICsgIC8vDQo+ID4gKyAgU3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2NvbCAoDQo+ID4g KyAgICAgICAgICAgICAgICAgIGdJbWFnZUhhbmRsZSwNCj4gPiArICAgICAgICAgICAgICAgICAg JmdFZmlMb2FkZWRJbWFnZVByb3RvY29sR3VpZCwNCj4gPiArICAgICAgICAgICAgICAgICAgKFZP SUQgKiopJnBMb2FkZWRJbWFnZQ0KPiA+ICsgICAgICAgICAgICAgICAgICApOw0KPiA+ICsgIGlm ICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICBwTG9hZGVkSW1hZ2UtPlVubG9hZCA9 IERyaXZlclVubG9hZDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gIEFk ZCB0aGUgZHJpdmVyIHRvIHRoZSBsaXN0IG9mIGRyaXZlcnMNCj4gPiArICAvLw0KPiA+ICsgIFN0 YXR1cyA9IEVmaUxpYkluc3RhbGxEcml2ZXJCaW5kaW5nQ29tcG9uZW50TmFtZTIgKA0KPiA+ICsg ICAgICAgICAgICAgSW1hZ2VIYW5kbGUsDQo+ID4gKyAgICAgICAgICAgICBwU3lzdGVtVGFibGUs DQo+ID4gKyAgICAgICAgICAgICAmZ0RyaXZlckJpbmRpbmcsDQo+ID4gKyAgICAgICAgICAgICBJ bWFnZUhhbmRsZSwNCj4gPiArICAgICAgICAgICAgICZnQ29tcG9uZW50TmFtZSwNCj4gPiArICAg ICAgICAgICAgICZnQ29tcG9uZW50TmFtZTINCj4gPiArICAgICAgICAgICAgICk7DQo+ID4gKw0K PiA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gK30NCj4gPiBkaWZmIC0tZ2l0DQo+IGEvU2lsaWNv bi9BU0lYL0RyaXZlcnMvQnVzL1VzYi9Vc2JOZXR3b3JraW5nL0F4ODgxNzkvU2ltcGxlTmV0d29y ay5jDQo+IGIvU2lsaWNvbi9BU0lYL0RyaXZlcnMvQnVzL1VzYi9Vc2JOZXR3b3JraW5nL0F4ODgx NzkvU2ltcGxlTmV0d29yay5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAw MDAwMDAwMDAwMDAuLjI1OTg2NDUxZGNiYw0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysNCj4g Yi9TaWxpY29uL0FTSVgvRHJpdmVycy9CdXMvVXNiL1VzYk5ldHdvcmtpbmcvQXg4ODE3OS9TaW1w bGVOZXR3b3JrLmMNCj4gPiBAQCAtMCwwICsxLDE1ODUgQEANCj4gPiArLyoqIEBmaWxlDQo+ID4g KyAgUHJvdmlkZXMgdGhlIFNpbXBsZSBOZXR3b3JrIGZ1bmN0aW9ucy4NCj4gPiArDQo+ID4gKyAg Q29weXJpZ2h0IChjKSAyMDExLCBJbnRlbCBDb3Jwb3JhdGlvbg0KPiA+ICsgIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gKw0KPiA+ICsqKi8NCj4gPiAr DQo+ID4gKyNpbmNsdWRlICJBeDg4MTc5LmgiDQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGlz IGZ1bmN0aW9uIHVwZGF0ZXMgdGhlIGZpbHRlcmluZyBvbiB0aGUgcmVjZWl2ZXIuDQo+ID4gKw0K PiA+ICsgIFRoaXMgc3VwcG9ydCByb3V0aW5lIGNhbGxzIDo6QXg4ODE3OU1hY0FkZHJlc3NTZXQg dG8gdXBkYXRlDQo+ID4gKyAgdGhlIE1BQyBhZGRyZXNzLiAgVGhpcyByb3V0aW5lIHRoZW4gcmVi dWlsZHMgdGhlIG11bHRpY2FzdA0KPiA+ICsgIGhhc2ggYnkgY2FsbGluZyA6OkF4ODgxNzlNdWx0 aWNhc3RDbGVhciBhbmQgOjpBeDg4MTc5TXVsdGljYXN0U2V0Lg0KPiA+ICsgIEZpbmFsbHkgdGhp cyByb3V0aW5lIGVuYWJsZXMgdGhlIHJlY2VpdmVyIGJ5IGNhbGxpbmcNCj4gPiArICA6OkF4ODgx NzlSeENvbnRyb2wuDQo+ID4gKyAgQHBhcmFtIFtpbl0gcFNpbXBsZU5ldHdvcmsgICAgU2ltcGxl IG5ldHdvcmsgbW9kZSBwb2ludGVyDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgICAgICAgIFRoaXMgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsLg0KPiA+ICsgIEByZXR2YWwg RUZJX05PVF9TVEFSVEVEICAgICAgIFRoZSBuZXR3b3JrIGludGVyZmFjZSB3YXMgbm90IHN0YXJ0 ZWQuDQo+ID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgcFNpbXBsZU5ldHdvcmsg cGFyYW1ldGVyIHdhcw0KPiBOVUxMIG9yIGRpZCBub3QgcG9pbnQgdG8gYSB2YWxpZA0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9TSU1QTEVfTkVUV09SS19QUk9UT0NP TCBzdHJ1Y3R1cmUuDQo+ID4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIGNv bW1hbmQgY291bGQgbm90IGJlIHNlbnQgdG8gdGhlDQo+IG5ldHdvcmsgaW50ZXJmYWNlLg0KPiA+ ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIFRoZSBpbmNyZWFzZWQgYnVmZmVyIHNp emUgZmVhdHVyZSBpcyBub3QNCj4gc3VwcG9ydGVkLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VG SV9TVEFUVVMNCj4gPiArUmVjZWl2ZUZpbHRlclVwZGF0ZSAoDQo+ID4gKyAgSU4gRUZJX1NJTVBM RV9ORVRXT1JLX1BST1RPQ09MICogcFNpbXBsZU5ldHdvcmsNCj4gPiArICApDQo+ID4gK3sNCj4g PiArICBFRklfU0lNUExFX05FVFdPUktfTU9ERSAqIHBNb2RlOw0KPiA+ICsgIE5JQ19ERVZJQ0Ug KiBwTmljRGV2aWNlOw0KPiA+ICsgIEVGSV9TVEFUVVMgU3RhdHVzOw0KPiA+ICsgIFVJTlQzMiBJ bmRleDsNCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBTZXQgdGhlIE1BQyBhZGRyZXNzDQo+ ID4gKyAgLy8NCj4gPiArICBwTmljRGV2aWNlID0gREVWX0ZST01fU0lNUExFX05FVFdPUksgKCBw U2ltcGxlTmV0d29yayApOw0KPiA+ICsgIHBNb2RlID0gcFNpbXBsZU5ldHdvcmstPk1vZGU7DQo+ ID4gKyAgLy8NCj4gPiArICAvLyBDbGVhciB0aGUgbXVsdGljYXN0IGhhc2ggdGFibGUNCj4gPiAr ICAvLw0KPiA+ICsgIEF4ODgxNzlNdWx0aWNhc3RDbGVhciAoIHBOaWNEZXZpY2UgKTsNCj4gPiAr DQo+ID4gKyAgLy8NCj4gPiArICAvLyBMb2FkIHRoZSBtdWx0aWNhc3QgaGFzaCB0YWJsZQ0KPiA+ ICsgIC8vDQo+ID4gKyAgaWYgKCAwICE9ICggcE1vZGUtPlJlY2VpdmVGaWx0ZXJTZXR0aW5nICYN Cj4gRUZJX1NJTVBMRV9ORVRXT1JLX1JFQ0VJVkVfTVVMVElDQVNUICkpIHsNCj4gPiArICAgIGZv ciAoIEluZGV4ID0gMDsgSW5kZXggPCBwTW9kZS0+TUNhc3RGaWx0ZXJDb3VudDsgSW5kZXgrKyAp IHsNCj4gPiArICAgICAgLy8NCj4gPiArICAgICAgLy8gRW5hYmxlIHRoZSBuZXh0IG11bHRpY2Fz dCBhZGRyZXNzDQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIEF4ODgxNzlNdWx0aWNhc3RTZXQg KCBwTmljRGV2aWNlLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBNb2RlLT5N Q2FzdEZpbHRlclsgSW5kZXggXS5BZGRyWzBdKTsNCj4gPiArICAgIH0NCj4gPiArICB9DQo+ID4g Kw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gRW5hYmxlIHRoZSByZWNlaXZlcg0KPiA+ICsgIC8vDQo+ ID4gKyAgU3RhdHVzID0gQXg4ODE3OVJ4Q29udHJvbCAoIHBOaWNEZXZpY2UsIHBNb2RlLT5SZWNl aXZlRmlsdGVyU2V0dGluZyApOw0KPiA+ICsNCj4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhpcyBmdW5jdGlvbiB1cGRhdGVzIHRo ZSBTTlAgZHJpdmVyIHN0YXR1cy4NCj4gPiArDQo+ID4gKyAgVGhpcyBmdW5jdGlvbiBnZXRzIHRo ZSBjdXJyZW50IGludGVycnVwdCBhbmQgcmVjeWNsZWQgdHJhbnNtaXQNCj4gPiArICBidWZmZXIg c3RhdHVzIGZyb20gdGhlIG5ldHdvcmsgaW50ZXJmYWNlLiAgVGhlIGludGVycnVwdCBzdGF0dXMN Cj4gPiArICBhbmQgdGhlIG1lZGlhIHN0YXR1cyBhcmUgcmV0dXJuZWQgYXMgYSBiaXQgbWFzayBp biBJbnRlcnJ1cHRTdGF0dXMuDQo+ID4gKyAgSWYgSW50ZXJydXB0U3RhdHVzIGlzIE5VTEwsIHRo ZSBpbnRlcnJ1cHQgc3RhdHVzIHdpbGwgbm90IGJlIHJlYWQuDQo+ID4gKyAgVXBvbiBzdWNjZXNz ZnVsIHJldHVybiBvZiB0aGUgbWVkaWEgc3RhdHVzLCB0aGUgTWVkaWFQcmVzZW50IGZpZWxkDQo+ ID4gKyAgb2YgRUZJX1NJTVBMRV9ORVRXT1JLX01PREUgd2lsbCBiZSB1cGRhdGVkIHRvIHJlZmxl Y3QgYW55IGNoYW5nZQ0KPiA+ICsgIG9mIG1lZGlhIHN0YXR1cy4gIElmIFR4QnVmIGlzIG5vdCBO VUxMLCBhIHJlY3ljbGVkIHRyYW5zbWl0IGJ1ZmZlcg0KPiA+ICsgIGFkZHJlc3Mgd2lsbCBiZSBy ZXRyaXZlZC4gIElmIGEgcmVjeWNsZWQgdHJhbnNtaXQgYnVmZmVyIGFkZHJlc3MNCj4gPiArICBp cyByZXR1cm5lZCBpbiBUeEJ1ZiwgdGhlbiB0aGUgYnVmZmVyIGhhcyBiZWVuIHN1Y2Nlc3NmdWxs eQ0KPiA+ICsgIHRyYW5zbWl0dGVkLCBhbmQgdGhlIHN0YXR1cyBmb3IgdGhhdCBidWZmZXIgaXMg Y2xlYXJlZC4NCj4gPiArDQo+ID4gKyAgVGhpcyBmdW5jdGlvbiBjYWxscyA6OkF4ODgxNzlSeCB0 byB1cGRhdGUgdGhlIG1lZGlhIHN0YXR1cyBhbmQNCj4gPiArICBxdWV1ZSBhbnkgcmVjZWl2ZSBw YWNrZXRzLg0KPiA+ICsNCj4gPiArICBAcGFyYW0gW2luXSBwU2ltcGxlTmV0d29yayAgICBQcm90 b2NvbCBpbnN0YW5jZSBwb2ludGVyDQo+ID4gKyAgQHBhcmFtIFtpbl0gcEludGVycnVwdFN0YXR1 cyAgQSBwb2ludGVyIHRvIHRoZSBiaXQgbWFzayBvZiB0aGUgY3VycmVudA0KPiBhY3RpdmUgaW50 ZXJydXB0cy4NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGlzIGlz IE5VTEwsIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHdpbGwgbm90IGJlIHJlYWQgZnJvbQ0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBkZXZpY2UuICBJZiB0aGlzIGlzIG5v dCBOVUxMLCB0aGUgaW50ZXJydXB0IHN0YXR1cyB3aWxsDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYmUgcmVhZCBmcm9tIHRlaCBkZXZpY2UuICBXaGVuIHRoZSBpbnRlcnJ1 cHQgc3RhdHVzIGlzDQo+IHJlYWQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaXQgd2lsbCBhbHNvIGJlIGNsZWFyZWQuICBDbGVhcmluZyB0aGUgdHJhbnNtaXQgaW50ZXJy dXB0DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9lcyBub3QgZW1wdHkg dGhlIHJlY3ljbGVkIHRyYW5zbWl0IGJ1ZmZlciBhcnJheS4NCj4gPiArICBAcGFyYW0gW291dF0g cHBUeEJ1ZiAgICAgICAgICBSZWN5Y2xlZCB0cmFuc21pdCBidWZmZXIgYWRkcmVzcy4gIFRoZQ0K PiBuZXR3b3JrIGludGVyZmFjZSB3aWxsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbm90IHRyYW5zbWl0IGlmIGl0cyBpbnRlcm5hbCByZWN5Y2xlZCB0cmFuc21pdCBidWZm ZXIgYXJyYXkNCj4gaXMNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxs LiAgUmVhZGluZyB0aGUgdHJhbnNtaXQgYnVmZmVyIGRvZXMgbm90IGNsZWFyIHRoZQ0KPiB0cmFu c21pdA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdC4gIElm IHRoaXMgaXMgTlVMTCwgdGhlbiB0aGUgdHJhbnNtaXQgYnVmZmVyIHN0YXR1cw0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgbm90IGJlIHJlYWQuICBJZiB0aGVyZSBh cmUgbm90IHRyYW5zbWl0IGJ1ZmZlcnMgdG8NCj4gcmVjeWNsZQ0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGFuZCBUeEJ1ZiBpcyBub3QgTlVMTCwgKlR4QnVmIHdpbGwgYmUg c2V0IHRvIE5VTEwuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAg IFRoaXMgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsLg0KPiA+ICsgIEByZXR2YWwgRUZJX05PVF9T VEFSVEVEICAgICAgIFRoZSBuZXR3b3JrIGludGVyZmFjZSB3YXMgbm90IHN0YXJ0ZWQuDQo+ID4g KyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgcFNpbXBsZU5ldHdvcmsgcGFyYW1ldGVy IHdhcw0KPiBOVUxMIG9yIGRpZCBub3QgcG9pbnQgdG8gYSB2YWxpZA0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEVGSV9TSU1QTEVfTkVUV09SS19QUk9UT0NPTCBzdHJ1Y3R1 cmUuDQo+ID4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIGNvbW1hbmQgY291 bGQgbm90IGJlIHNlbnQgdG8gdGhlDQo+IG5ldHdvcmsgaW50ZXJmYWNlLg0KPiA+ICsNCj4gPiAr KiovDQo+ID4gKw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtTTl9HZXRTdGF0 dXMgKA0KPiA+ICsgIElOIEVGSV9TSU1QTEVfTkVUV09SS19QUk9UT0NPTCAqIHBTaW1wbGVOZXR3 b3JrLA0KPiA+ICsgIE9VVCBVSU5UMzIgKiBwSW50ZXJydXB0U3RhdHVzLA0KPiA+ICsgIE9VVCBW T0lEICoqIHBwVHhCdWYNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU0lNUExFX05FVFdP UktfTU9ERSAqIHBNb2RlOw0KPiA+ICsgIE5JQ19ERVZJQ0UgKiBwTmljRGV2aWNlOw0KPiA+ICsg IEVGSV9TVEFUVVMgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQo+ID4gKyAgRUZJX1RQTCBUcGxQcmV2 aW91czsNCj4gPiArDQo+ID4gKyAgVHBsUHJldmlvdXMgPSBnQlMtPlJhaXNlVFBMKFRQTF9DQUxM QkFDSyk7DQo+ID4gKyAgLy8NCj4gPiArICAvLyBWZXJpZnkgdGhlIHBhcmFtZXRlcnMNCj4gPiAr ICAvLw0KPiA+ICsgIGlmICgoIE5VTEwgIT0gcFNpbXBsZU5ldHdvcmsgKSAmJiAoIE5VTEwgIT0g cFNpbXBsZU5ldHdvcmstPk1vZGUgKSkgew0KPiA+ICsgICAgLy8NCj4gPiArICAgIC8vIFJldHVy biB0aGUgdHJhbnNtaXQgYnVmZmVyDQo+ID4gKyAgICAvLw0KPiA+ICsgICAgcE5pY0RldmljZSA9 IERFVl9GUk9NX1NJTVBMRV9ORVRXT1JLICggcFNpbXBsZU5ldHdvcmsgKTsNCj4gPiArDQo+ID4g KyAgICBpZiAoKCBOVUxMICE9IHBwVHhCdWYgKSAmJiAoIE5VTEwgIT0gcE5pY0RldmljZS0+cFR4 QnVmZmVyICkpIHsNCj4gPiArICAgICAgKnBwVHhCdWYgPSBwTmljRGV2aWNlLT5wVHhCdWZmZXI7 DQo+ID4gKyAgICAgIHBOaWNEZXZpY2UtPnBUeEJ1ZmZlciA9IE5VTEw7DQo+ID4gKyAgICB9DQo+ ID4gKw0KPiA+ICsgICAgcE1vZGUgPSBwU2ltcGxlTmV0d29yay0+TW9kZTsNCj4gPiArICAgIGlm IChFZmlTaW1wbGVOZXR3b3JrSW5pdGlhbGl6ZWQgPT0gcE1vZGUtPlN0YXRlKSB7DQo+ID4gKyAg ICAgIGlmIChOVUxMID09IHBwVHhCdWYgJiYgTlVMTCA9PSBwSW50ZXJydXB0U3RhdHVzKSB7DQo+ ID4gKyAgICAgICAgU3RhdHVzID0gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICsgICAgICAg IGdvdG8gRVhJVDsNCj4gPiArICAgICAgfQ0KPiA+ICsjaWYgUkVQT1JUTElOSw0KPiA+ICsjZWxz ZQ0KPiA+ICsgICAgICBpZiAoIXBOaWNEZXZpY2UtPmJMaW5rVXAgfHwgIXBOaWNEZXZpY2UtPmJD b21wbGV0ZSkgew0KPiA+ICsjZW5kaWYNCj4gPiArICAgICAgICBTdGF0dXMgPSBBeDg4MTc5TmVn b3RpYXRlTGlua0NvbXBsZXRlICggcE5pY0RldmljZSwNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBOaWNEZXZpY2UtPlBvbGxDb3VudCwNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBOaWNE ZXZpY2UtPmJDb21wbGV0ZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJnBOaWNEZXZpY2UtPmJMaW5rVXAsDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwTmljRGV2aWNlLT5iMTAwTWJwcywN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBO aWNEZXZpY2UtPmIxMDAwTWJwcywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJnBOaWNEZXZpY2UtPmJGdWxsRHVwbGV4ICk7DQo+ID4gKw0KPiA+ ICsgICAgICAgIGlmIChFRklfRVJST1IoU3RhdHVzKSkNCj4gPiArICAgICAgICAgIGdvdG8gRVhJ VDsNCj4gPiArI2lmIFJFUE9SVExJTksNCj4gPiArICAgICAgICBpZiAocE5pY0RldmljZS0+Ykxp bmtVcCAmJiBwTmljRGV2aWNlLT5iQ29tcGxldGUpIHsNCj4gPiArICAgICAgICAgIHBNb2RlLT5N ZWRpYVByZXNlbnQgPSBUUlVFOw0KPiA+ICsgICAgICAgICAgU3RhdHVzID0gQXg4ODE3OVNldE1l ZGl1bSAocE5pY0RldmljZSk7DQo+ID4gKyAgICAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAg IHBNb2RlLT5NZWRpYVByZXNlbnQgPSBGQUxTRTsNCj4gPiArICAgICAgICB9DQo+ID4gKyNlbHNl DQo+ID4gKyAgICAgICAgaWYgKHBOaWNEZXZpY2UtPmJMaW5rVXAgJiYgcE5pY0RldmljZS0+YkNv bXBsZXRlKSB7DQo+ID4gKyAgICAgICAgICBwTW9kZS0+TWVkaWFQcmVzZW50ID0gVFJVRTsNCj4g PiArICAgICAgICAgIHBNb2RlLT5NZWRpYVByZXNlbnRTdXBwb3J0ZWQgPSBGQUxTRTsNCj4gPiAr ICAgICAgICAgIFN0YXR1cyA9IEF4ODgxNzlTZXRNZWRpdW0gKHBOaWNEZXZpY2UpOw0KPiA+ICsN Cj4gPiArICAgICAgICB9DQo+ID4gKyAgICAgIH0NCj4gPiArI2VuZGlmDQo+ID4gKyAgICB9IGVs c2Ugew0KPiA+ICsgICAgICBpZiAoRWZpU2ltcGxlTmV0d29ya1N0YXJ0ZWQgPT0gcE1vZGUtPlN0 YXRlKSB7DQo+ID4gKyAgICAgICAgU3RhdHVzID0gRUZJX0RFVklDRV9FUlJPUjsgOw0KPiA+ICsg ICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgIFN0YXR1cyA9IEVGSV9OT1RfU1RBUlRFRCA7DQo+ ID4gKyAgICAgIH0NCj4gPiArICAgIH0NCj4gPiArICB9IGVsc2Ugew0KPiA+ICsgICAgU3RhdHVz ID0gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICsgIH0NCj4gPiArICBpZiAoIE5VTEwgIT0g cEludGVycnVwdFN0YXR1cyApIHsNCj4gPiArICAgICpwSW50ZXJydXB0U3RhdHVzID0gMDsNCj4g PiArICB9DQo+ID4gKw0KPiA+ICtFWElUOg0KPiA+ICsgIGdCUy0+UmVzdG9yZVRQTChUcGxQcmV2 aW91cykgOw0KPiA+ICsNCj4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICsvKioNCj4gPiArICBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHJlYWQgYW5kIHdyaXRlIG9wZXJh dGlvbnMgb24gdGhlIE5WUkFNIGRldmljZQ0KPiA+ICsgIGF0dGFjaGVkIHRvIGEgbmV0d29yayBp bnRlcmZhY2UuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbSBbaW5dIHBTaW1wbGVOZXR3b3JrICAgIFBy b3RvY29sIGluc3RhbmNlIHBvaW50ZXINCj4gPiArICBAcGFyYW0gW2luXSBSZWFkV3JpdGUgICAg ICAgICBUUlVFIGZvciByZWFkIG9wZXJhdGlvbnMsIEZBTFNFIGZvciB3cml0ZQ0KPiBvcGVyYXRp b25zLg0KPiA+ICsgIEBwYXJhbSBbaW5dIE9mZnNldCAgICAgICAgICAgIEJ5dGUgb2Zmc2V0IGlu IHRoZSBOVlJBTSBkZXZpY2UgYXQgd2hpY2ggdG8NCj4gc3RhcnQgdGhlDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmVhZCBvciB3cml0ZSBvcGVyYXRpb24uICBUaGlzIG11 c3QgYmUgYSBtdWx0aXBsZSBvZg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE52UmFtQWNjZXNzU2l6ZSBhbmQgbGVzcyB0aGFuIE52UmFtU2l6ZS4NCj4gPiArICBAcGFyYW0g W2luXSBCdWZmZXJTaXplICAgICAgICBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQgb3Igd3Jp dGUgZnJvbQ0KPiB0aGUgTlZSQU0gZGV2aWNlLg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFRoaXMgbXVzdCBhbHNvIGJlIGEgbXVsdGlwbGUgb2YgTnZyYW1BY2Nlc3NTaXpl Lg0KPiA+ICsgIEBwYXJhbSBbaW4sIG91dF0gcEJ1ZmZlciAgICAgIEEgcG9pbnRlciB0byB0aGUg ZGF0YSBidWZmZXIuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAg IFRoaXMgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsLg0KPiA+ICsgIEByZXR2YWwgRUZJX05PVF9T VEFSVEVEICAgICAgIFRoZSBuZXR3b3JrIGludGVyZmFjZSB3YXMgbm90IHN0YXJ0ZWQuDQo+ID4g KyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgcFNpbXBsZU5ldHdvcmsgcGFyYW1ldGVy IHdhcw0KPiBOVUxMIG9yIGRpZCBub3QgcG9pbnQgdG8gYSB2YWxpZA0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEVGSV9TSU1QTEVfTkVUV09SS19QUk9UT0NPTCBzdHJ1Y3R1 cmUuDQo+ID4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIGNvbW1hbmQgY291 bGQgbm90IGJlIHNlbnQgdG8gdGhlDQo+IG5ldHdvcmsgaW50ZXJmYWNlLg0KPiA+ICsgIEByZXR2 YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIFRoZSBpbmNyZWFzZWQgYnVmZmVyIHNpemUgZmVhdHVy ZSBpcyBub3QNCj4gc3VwcG9ydGVkLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMN Cj4gPiArRUZJQVBJDQo+ID4gK1NOX052RGF0YSAoDQo+ID4gKyAgSU4gRUZJX1NJTVBMRV9ORVRX T1JLX1BST1RPQ09MICogcFNpbXBsZU5ldHdvcmssDQo+ID4gKyAgSU4gQk9PTEVBTiBSZWFkV3Jp dGUsDQo+ID4gKyAgSU4gVUlOVE4gT2Zmc2V0LA0KPiA+ICsgIElOIFVJTlROIEJ1ZmZlclNpemUs DQo+ID4gKyAgSU4gT1VUIFZPSUQgKiBwQnVmZmVyDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAg RUZJX1NUQVRVUyBTdGF0dXMgPSBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gKyAgRUZJX1RQ TCBUcGxQcmV2aW91czsNCj4gPiArICBFRklfU0lNUExFX05FVFdPUktfTU9ERSAqIHBNb2RlOw0K PiA+ICsgIE5JQ19ERVZJQ0UgKiBwTmljRGV2aWNlOw0KPiA+ICsNCj4gPiArICBUcGxQcmV2aW91 cyA9IGdCUy0+UmFpc2VUUEwoVFBMX0NBTExCQUNLKTsNCj4gPiArDQo+ID4gKyAgaWYgKCggTlVM TCA9PSBwU2ltcGxlTmV0d29yayApIHx8ICggTlVMTCA9PSBwU2ltcGxlTmV0d29yay0+TW9kZSAp KSB7DQo+ID4gKyAgICBTdGF0dXMgPSBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gKyAgICBn b3RvICBFWElUOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgcE5pY0RldmljZSA9IERFVl9GUk9N X1NJTVBMRV9ORVRXT1JLICggcFNpbXBsZU5ldHdvcmsgKTsNCj4gPiArICBwTW9kZSA9IHBTaW1w bGVOZXR3b3JrLT5Nb2RlOw0KPiA+ICsNCj4gPiArI2lmIFBBU1NfU0NUDQo+ID4gKyAgaWYgKEVm aVNpbXBsZU5ldHdvcmtJbml0aWFsaXplZCAhPSBwTW9kZS0+U3RhdGUpIHsNCj4gPiArICAgIFN0 YXR1cyA9IEVGSV9OT1RfU1RBUlRFRDsNCj4gPiArICAgIGdvdG8gIEVYSVQ7DQo+ID4gKyAgfQ0K PiA+ICsjZW5kaWYNCj4gPiArDQo+ID4gKyAgaWYgKCAwICE9IE9mZnNldCApIHsNCj4gPiArICAg IGlmICgoMCAhPSAoT2Zmc2V0ICUgcE1vZGUtPk52UmFtQWNjZXNzU2l6ZSkgKSB8fCAoT2Zmc2V0 ID49IHBNb2RlLQ0KPiA+TnZSYW1TaXplKSkgew0KPiA+ICsgICAgICBTdGF0dXMgPSBFRklfSU5W QUxJRF9QQVJBTUVURVI7DQo+ID4gKyAgICAgIGdvdG8gIEVYSVQ7DQo+ID4gKyAgICB9DQo+ID4g KyAgfQ0KPiA+ICsgIC8vDQo+ID4gKyAgLy9PZmZzZXQgbXVzdCBiZSBhIG11bHRpcGxlIG9mIE52 UmFtQWNjZXNzU2l6ZSBhbmQgbGVzcyB0aGFuDQo+IE52UmFtU2l6ZS4NCj4NCj4gc3BhY2UgYWZ0 ZXIgLy8NCj4NCj4gPiArICAvLw0KPiA+ICsgIGlmICgwICE9IChCdWZmZXJTaXplICUgcE1vZGUt Pk52UmFtQWNjZXNzU2l6ZSkpIHsNCj4gPiArICAgIFN0YXR1cyA9IEVGSV9JTlZBTElEX1BBUkFN RVRFUjsNCj4gPiArICAgIGdvdG8gIEVYSVQ7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAo QnVmZmVyU2l6ZSArIE9mZnNldCA+IHBNb2RlLT5OdlJhbVNpemUpIHsNCj4gPiArICAgIFN0YXR1 cyA9IEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiArICAgIGdvdG8gIEVYSVQ7DQo+ID4gKyAg fQ0KPiA+ICsNCj4gPiArICBpZiAoTlVMTCA9PSBwQnVmZmVyKSB7DQo+ID4gKyAgICBTdGF0dXMg PSBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gKyAgICBnb3RvICBFWElUOw0KPiA+ICsgIH0N Cj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvL1JlYWRXcml0ZTogVFJVRSBGT1IgUkVBRCBGQUxT RSBGT1IgV1JJVEUNCj4gPiArICAvLw0KPiA+ICsgIGlmIChSZWFkV3JpdGUpew0KPg0KPiBzcGFj ZSBiZXR3ZWVuICkgYW5kIHsNCj4NCj4gPiArICAgIFVJTlROIGk7DQo+ID4gKw0KPg0KPiBQbGVh c2UgZGVjbGFyZSBhdCBmdW5jdGlvbiBzY29wZSwgYW5kIHJlbmFtZSB0byBzb21ldGhpbmcgbW9y ZSBpZGlvbWF0aWMNCj4gKElkeCkNCj4NCj4gPiArICAgIGZvciAoaSA9IDA7IGkgPCBCdWZmZXJT aXplIC8gMiA7IGkrKykgew0KPiA+ICsgICAgICBTdGF0dXMgPSBBeDg4MTc5U3JvbVJlYWQgKCBw TmljRGV2aWNlLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVUlOVDMy KShPZmZzZXQvMiArIGkpLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo KChVSU5UMTYqKXBCdWZmZXIpICsgaSkpOw0KPiA+ICsgICAgfQ0KPiA+ICsgIH0gZWxzZSB7DQo+ ID4gKyAgICBVSU5UTiBpOw0KPiA+ICsNCj4gPiArICAgIFN0YXR1cyA9IEF4ODgxNzlFbmFibGVT cm9tV3JpdGUocE5pY0RldmljZSk7DQo+ID4gKyAgICBpZiAoRUZJX0VSUk9SKFN0YXR1cykpIGdv dG8gRVhJVDsNCj4gPiArDQo+ID4gKyAgICBmb3IgKGkgPSAwOyBpIDwgQnVmZmVyU2l6ZSAvIDIg OyBpKyspew0KPiA+ICsgICAgICBTdGF0dXMgPSBBeDg4MTc5U3JvbVdyaXRlICggcE5pY0Rldmlj ZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVSU5UMzIpKE9mZnNl dC8yICsgaSksDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChVSU5U MTYqKXBCdWZmZXIpICsgaSkpOw0KPiA+ICsgICAgfQ0KPiA+ICsgICAgU3RhdHVzID0gQXg4ODE3 OURpc2FibGVTcm9tV3JpdGUocE5pY0RldmljZSk7DQo+ID4gKw0KPiA+ICsgICAgaWYgKEJ1ZmZl clNpemUgPT0gMjcyKQ0KPiA+ICsgICAgICBTdGF0dXMgPSBBeDg4MTc5UmVsb2FkU3JvbShwTmlj RGV2aWNlKTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gUmV0dXJuIHRo ZSBvcGVyYXRpb24gc3RhdHVzDQo+ID4gKyAgLy8NCj4gPiArRVhJVDoNCj4gPiArICBnQlMtPlJl c3RvcmVUUEwgKFRwbFByZXZpb3VzKTsNCj4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICsvKioNCj4gPiArICBSZXNldHMgdGhlIG5ldHdvcmsgYWRhcHRlciBhbmQgYWxs b2NhdGVzIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZQ0KPiBidWZmZXJzDQo+ID4gKyAgcmVxdWly ZWQgYnkgdGhlIG5ldHdvcmsgaW50ZXJmYWNlOyBvcHRpb25hbGx5LCBhbHNvIHJlcXVlc3RzIGFs bG9jYXRpb24gb2YNCj4gPiArICBhZGRpdGlvbmFsIHRyYW5zbWl0IGFuZCByZWNlaXZlIGJ1ZmZl cnMuICBUaGlzIHJvdXRpbmUgbXVzdCBiZSBjYWxsZWQNCj4gYmVmb3JlDQo+ID4gKyAgYW55IG90 aGVyIHJvdXRpbmUgaW4gdGhlIFNpbXBsZSBOZXR3b3JrIHByb3RvY29sIGlzIGNhbGxlZC4NCj4g PiArDQo+ID4gKyAgQHBhcmFtIFtpbl0gcFNpbXBsZU5ldHdvcmsgICAgUHJvdG9jb2wgaW5zdGFu Y2UgcG9pbnRlcg0KPiA+ICsgIEBwYXJhbSBbaW5dIEV4dHJhUnhCdWZmZXJTaXplIFNpemUgaW4g Ynl0ZXMgdG8gYWRkIHRvIHRoZSByZWNlaXZlIGJ1ZmZlcg0KPiBhbGxvY2F0aW9uDQo+ID4gKyAg QHBhcmFtIFtpbl0gRXh0cmFUeEJ1ZmZlclNpemUgU2l6ZSBpbiBieXRlcyB0byBhZGQgdG8gdGhl IHRyYW5zbWl0IGJ1ZmZlcg0KPiBhbGxvY2F0aW9uDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJ X1NVQ0NFU1MgICAgICAgICAgIFRoaXMgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsLg0KPiA+ICsg IEByZXR2YWwgRUZJX05PVF9TVEFSVEVEICAgICAgIFRoZSBuZXR3b3JrIGludGVyZmFjZSB3YXMg bm90IHN0YXJ0ZWQuDQo+ID4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgVGhlcmUg d2FzIG5vdCBlbm91Z2ggbWVtb3J5IGZvcg0KPiB0aGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUgYnVm ZmVycw0KPiA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIHBTaW1wbGVOZXR3b3Jr IHBhcmFtZXRlciB3YXMNCj4gTlVMTCBvciBkaWQgbm90IHBvaW50IHRvIGEgdmFsaWQNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFRklfU0lNUExFX05FVFdPUktfUFJPVE9D T0wgc3RydWN0dXJlLg0KPiA+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSBj b21tYW5kIGNvdWxkIG5vdCBiZSBzZW50IHRvIHRoZQ0KPiBuZXR3b3JrIGludGVyZmFjZS4NCj4g PiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBUaGUgaW5jcmVhc2VkIGJ1ZmZlciBz aXplIGZlYXR1cmUgaXMgbm90DQo+IHN1cHBvcnRlZC4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtF RklfU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtTTl9Jbml0aWFsaXplICgNCj4gPiArICBJTiBF RklfU0lNUExFX05FVFdPUktfUFJPVE9DT0wgKiBwU2ltcGxlTmV0d29yaywNCj4gPiArICBJTiBV SU5UTiBFeHRyYVJ4QnVmZmVyU2l6ZSwNCj4gPiArICBJTiBVSU5UTiBFeHRyYVR4QnVmZmVyU2l6 ZQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEVGSV9TSU1QTEVfTkVUV09SS19NT0RFICogcE1v ZGU7DQo+ID4gKyAgRUZJX1NUQVRVUyBTdGF0dXM7DQo+ID4gKyAgVUlOVDMyICBUbXBTdGF0ZTsN Cj4gPiArICBFRklfVFBMIFRwbFByZXZpb3VzOw0KPiA+ICsgIE5JQ19ERVZJQ0UgKiBwTmljRGV2 aWNlOw0KPg0KPiBuZXdsaW5lDQo+DQo+ID4gKyAgVHBsUHJldmlvdXMgPSBnQlMtPlJhaXNlVFBM IChUUExfQ0FMTEJBQ0spOw0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIFZlcmlmeSB0aGUg cGFyYW1ldGVycw0KPiA+ICsgIC8vDQo+ID4gKyAgaWYgKCggTlVMTCAhPSBwU2ltcGxlTmV0d29y ayApICYmICggTlVMTCAhPSBwU2ltcGxlTmV0d29yay0+TW9kZSApKSB7DQo+ID4gKyAgICAvLw0K PiA+ICsgICAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBpbnRlcmZhY2UgaXMgYWxyZWFkeSBzdGFydGVk DQo+ID4gKyAgICAvLw0KPiA+ICsgICAgcE1vZGUgPSBwU2ltcGxlTmV0d29yay0+TW9kZTsNCj4g PiArICAgIGlmICggRWZpU2ltcGxlTmV0d29ya1N0YXJ0ZWQgPT0gcE1vZGUtPlN0YXRlICkgew0K PiA+ICsgICAgICBpZiAoKCAwID09IEV4dHJhUnhCdWZmZXJTaXplICkgJiYgKCAwID09IEV4dHJh VHhCdWZmZXJTaXplICkpIHsNCj4gPiArICAgICAgICAvLw0KPiA+ICsgICAgICAgIC8vIFN0YXJ0 IHRoZSBhZGFwdGVyDQo+ID4gKyAgICAgICAgLy8NCj4gPiArICAgICAgICBUbXBTdGF0ZSA9IHBN b2RlLT5TdGF0ZTsNCj4gPiArICAgICAgICBwTW9kZS0+U3RhdGUgPSBFZmlTaW1wbGVOZXR3b3Jr SW5pdGlhbGl6ZWQ7DQo+ID4gKyAgICAgICAgU3RhdHVzID0gU05fUmVzZXQgKCBwU2ltcGxlTmV0 d29yaywgRkFMU0UgKTsNCj4gPiArICAgICAgICBpZiAoIEVGSV9FUlJPUiAoIFN0YXR1cyApKSB7 DQo+ID4gKyAgICAgICAgICAvLw0KPiA+ICsgICAgICAgICAgLy8gVXBkYXRlIHRoZSBuZXR3b3Jr IHN0YXRlDQo+ID4gKyAgICAgICAgICAvLw0KPiA+ICsgICAgICAgICAgcE1vZGUtPlN0YXRlID0g VG1wU3RhdGU7DQo+ID4gKyAgICAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgIHBNb2RlLT5N ZWRpYVByZXNlbnRTdXBwb3J0ZWQgPSBUUlVFOw0KPiA+ICsgICAgICAgICAgcE5pY0RldmljZSA9 IERFVl9GUk9NX1NJTVBMRV9ORVRXT1JLICggcFNpbXBsZU5ldHdvcmsgKTsNCj4gPiArICAgICAg ICAgIHBNb2RlLT5NZWRpYVByZXNlbnQgPSBBeDg4MTc5R2V0TGlua1N0YXR1cyAocE5pY0Rldmlj ZSk7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsgICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgIFN0 YXR1cyA9IEVGSV9VTlNVUFBPUlRFRDsNCj4gPiArICAgICAgfQ0KPiA+ICsgICAgfSBlbHNlIHsN Cj4gPiArICAgICAgU3RhdHVzID0gRUZJX05PVF9TVEFSVEVEOw0KPiA+ICsgICAgfQ0KPiA+ICsg IH0gZWxzZSB7DQo+ID4gKyAgICBTdGF0dXMgPSBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4g KyAgfQ0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gUmV0dXJuIHRoZSBvcGVyYXRpb24gc3RhdHVzDQo+ ID4gKyAgLy8NCj4gPiArICBnQlMtPlJlc3RvcmVUUEwgKFRwbFByZXZpb3VzKTsNCj4gPiArDQo+ ID4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPiArfQ0KPiA+ICsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ ICsgIFRoaXMgZnVuY3Rpb24gY29udmVydHMgYSBtdWx0aWNhc3QgSVAgYWRkcmVzcyB0byBhIG11 bHRpY2FzdCBIVyBNQUMNCj4gYWRkcmVzcw0KPiA+ICsgIGZvciBhbGwgcGFja2V0IHRyYW5zYWN0 aW9ucy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtIFtpbl0gcFNpbXBsZU5ldHdvcmsgICAgUHJvdG9j b2wgaW5zdGFuY2UgcG9pbnRlcg0KPiA+ICsgIEBwYXJhbSBbaW5dIGJJUHY2ICAgICAgICAgICAg IFNldCB0byBUUlVFIGlmIHRoZSBtdWx0aWNhc3QgSVAgYWRkcmVzcyBpcyBJUHY2DQo+IFtSRkMy NDYwXS4NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXQgdG8gRkFMU0Ug aWYgdGhlIG11bHRpY2FzdCBJUCBhZGRyZXNzIGlzIElQdjQgW1JGQyA3OTFdLg0KPiA+ICsgIEBw YXJhbSBbaW5dIHBJUCAgICAgICAgICAgICAgIFRoZSBtdWx0aWNhc3QgSVAgYWRkcmVzcyB0aGF0 IGlzIHRvIGJlIGNvbnZlcnRlZA0KPiB0byBhDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbXVsdGljYXN0IEhXIE1BQyBhZGRyZXNzLg0KPiA+ICsgIEBwYXJhbSBbaW5dIHBN QUMgICAgICAgICAgICAgIFRoZSBtdWx0aWNhc3QgSFcgTUFDIGFkZHJlc3MgdGhhdCBpcyB0byBi ZQ0KPiBnZW5lcmF0ZWQgZnJvbSBJUC4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VT UyAgICAgICAgICAgVGhpcyBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwuDQo+ID4gKyAgQHJldHZh bCBFRklfTk9UX1NUQVJURUQgICAgICAgVGhlIG5ldHdvcmsgaW50ZXJmYWNlIHdhcyBub3Qgc3Rh cnRlZC4NCj4gPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBwU2ltcGxlTmV0d29y ayBwYXJhbWV0ZXIgd2FzDQo+IE5VTEwgb3IgZGlkIG5vdCBwb2ludCB0byBhIHZhbGlkDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX1NJTVBMRV9ORVRXT1JLX1BST1RP Q09MIHN0cnVjdHVyZS4NCj4gPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUg Y29tbWFuZCBjb3VsZCBub3QgYmUgc2VudCB0byB0aGUNCj4gbmV0d29yayBpbnRlcmZhY2UuDQo+ ID4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgVGhlIGluY3JlYXNlZCBidWZmZXIg c2l6ZSBmZWF0dXJlIGlzIG5vdA0KPiBzdXBwb3J0ZWQuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiAr RUZJX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArU05fTUNhc3RJUHRvTUFDICgNCj4gPiArICBJ TiBFRklfU0lNUExFX05FVFdPUktfUFJPVE9DT0wgKiBwU2ltcGxlTmV0d29yaywNCj4gPiArICBJ TiBCT09MRUFOIGJJUHY2LA0KPiA+ICsgIElOIEVGSV9JUF9BRERSRVNTICogcElQLA0KPiA+ICsg IElOIEVGSV9NQUNfQUREUkVTUyAqIHBNQUMNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklf U1RBVFVTIFN0YXR1czsNCj4gPiArICBFRklfVFBMIFRwbFByZXZpb3VzOw0KPiA+ICsgIEVGSV9T SU1QTEVfTkVUV09SS19NT0RFICogcE1vZGU7DQo+ID4gKw0KPiA+ICsgIFRwbFByZXZpb3VzID0g Z0JTLT5SYWlzZVRQTChUUExfQ0FMTEJBQ0spOw0KPiA+ICsNCj4gPiArICBpZiAoKCBOVUxMICE9 IHBTaW1wbGVOZXR3b3JrICkgJiYgKCBOVUxMICE9IHBTaW1wbGVOZXR3b3JrLT5Nb2RlICkpIHsN Cj4gPiArICAgIC8vDQo+ID4gKyAgICAvLyBUaGUgaW50ZXJmYWNlIG11c3QgYmUgcnVubmluZw0K PiA+ICsgICAgLy8NCj4gPiArICAgIHBNb2RlID0gcFNpbXBsZU5ldHdvcmstPk1vZGU7DQo+ID4g KyAgICBpZiAoIEVmaVNpbXBsZU5ldHdvcmtJbml0aWFsaXplZCA9PSBwTW9kZS0+U3RhdGUgKSB7 DQo+ID4gKyAgICAgIGlmIChwSVAgPT0gTlVMTCB8fCBwTUFDID09IE5VTEwpIHsNCj4gPiArICAg ICAgICBTdGF0dXMgPSBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gKyAgICAgICAgZ290byBF WElUOw0KPiA+ICsgICAgICB9DQo+ID4gKyAgICAgIGlmIChiSVB2Nil7DQo+ID4gKyAgICAgICAg U3RhdHVzID0gRUZJX1VOU1VQUE9SVEVEOw0KPiA+ICsgICAgICAgIGdvdG8gRVhJVDsNCj4gPiAr ICAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAvLw0KPiA+ICsgICAgICAgIC8vIGNoZWNrIGlm IHRoZSBpcCBnaXZlbiBpcyBhIG1jYXN0IElQDQo+ID4gKyAgICAgICAgLy8NCj4gPiArICAgICAg ICBpZiAoKHBJUC0+djQuQWRkclswXSAmIDB4RjApICE9IDB4RTApIHsNCj4gPiArICAgICAgICAg IFN0YXR1cyA9IEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiArICAgICAgICAgIGdvdG8gRVhJ VDsNCj4gPiArICAgICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAgcE1BQy0+QWRkclswXSA9 IDB4MDE7DQo+ID4gKyAgICAgICAgICBwTUFDLT5BZGRyWzFdID0gMHgwMDsNCj4gPiArICAgICAg ICAgIHBNQUMtPkFkZHJbMl0gPSAweDVlOw0KPiA+ICsgICAgICAgICAgcE1BQy0+QWRkclszXSA9 IChVSU5UOCkgKHBJUC0+djQuQWRkclsxXSAmIDB4N2YpOw0KPiA+ICsgICAgICAgICAgcE1BQy0+ QWRkcls0XSA9IChVSU5UOCkgcElQLT52NC5BZGRyWzJdOw0KPiA+ICsgICAgICAgICAgcE1BQy0+ QWRkcls1XSA9IChVSU5UOCkgcElQLT52NC5BZGRyWzNdOw0KPiA+ICsgICAgICAgICAgU3RhdHVz ID0gRUZJX1NVQ0NFU1M7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsgICAgICB9DQo+ID4gKyAgICB9 IGVsc2Ugew0KPiA+ICsgICAgICBpZiAoRWZpU2ltcGxlTmV0d29ya1N0YXJ0ZWQgPT0gcE1vZGUt PlN0YXRlKSB7DQo+ID4gKyAgICAgICAgU3RhdHVzID0gRUZJX0RFVklDRV9FUlJPUjsgOw0KPiA+ ICsgICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgIFN0YXR1cyA9IEVGSV9OT1RfU1RBUlRFRCA7 DQo+ID4gKyAgICAgIH0NCj4gPiArICAgIH0NCj4gPiArICB9IGVsc2Ugew0KPiA+ICsgICAgU3Rh dHVzID0gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gK0VYSVQ6 DQo+ID4gKyAgZ0JTLT5SZXN0b3JlVFBMKFRwbFByZXZpb3VzKTsNCj4gPiArICByZXR1cm4gU3Rh dHVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBBdHRlbXB0IHRvIHJlY2VpdmUg YSBwYWNrZXQgZnJvbSB0aGUgbmV0d29yayBhZGFwdGVyLg0KPiA+ICsNCj4gPiArICBUaGlzIGZ1 bmN0aW9uIHJldHJpZXZlcyBvbmUgcGFja2V0IGZyb20gdGhlIHJlY2VpdmUgcXVldWUgb2YgdGhl DQo+IG5ldHdvcmsNCj4gPiArICBpbnRlcmZhY2UuICBJZiB0aGVyZSBhcmUgbm8gcGFja2V0cyBv biB0aGUgcmVjZWl2ZSBxdWV1ZSwgdGhlbg0KPiBFRklfTk9UX1JFQURZDQo+ID4gKyAgd2lsbCBi ZSByZXR1cm5lZC4gIElmIHRoZXJlIGlzIGEgcGFja2V0IG9uIHRoZSByZWNlaXZlIHF1ZXVlLCBh bmQgdGhlIHNpemUNCj4gPiArICBvZiB0aGUgcGFja2V0IGlzIHNtYWxsZXIgdGhhbiBCdWZmZXJT aXplLCB0aGVuIHRoZSBjb250ZW50cyBvZiB0aGUgcGFja2V0DQo+ID4gKyAgd2lsbCBiZSBwbGFj ZWQgaW4gQnVmZmVyLCBhbmQgQnVmZmVyU2l6ZSB3aWxsIGJlIHVkcGF0ZWQgd2l0aCB0aGUgYWN0 dWFsDQo+ID4gKyAgc2l6ZSBvZiB0aGUgcGFja2V0LiAgSW4gYWRkaXRpb24sIGlmIFNyY0FkZHIs IERlc3RBZGRyLCBhbmQgUHJvdG9jb2wgYXJlDQo+ID4gKyAgbm90IE5VTEwsIHRoZW4gdGhlc2Ug dmFsdWVzIHdpbGwgYmUgZXh0cmFjdGVkIGZyb20gdGhlIG1lZGlhIGhlYWRlciBhbmQNCj4gPiAr ICByZXR1cm5lZC4gIElmIEJ1ZmZlclNpemUgaXMgc21hbGxlciB0aGFuIHRoZSByZWNlaXZlZCBw YWNrZXQsIHRoZW4gdGhlDQo+ID4gKyAgc2l6ZSBvZiB0aGUgcmVjZWl2ZSBwYWNrZXQgd2lsbCBi ZSBwbGFjZWQgaW4gQnVmZmVyU2l6ZSBhbmQNCj4gPiArICBFRklfQlVGRkVSX1RPT19TTUFMTCB3 aWxsIGJlIHJldHVybmVkLg0KPiA+ICsNCj4gPiArICBUaGlzIHJvdXRpbmUgY2FsbHMgOjpBeDg4 MTc5UnggdG8gdXBkYXRlIHRoZSBtZWRpYSBzdGF0dXMgYW5kDQo+ID4gKyAgZW1wdHkgdGhlIG5l dHdvcmsgYWRhcHRlciBvZiByZWNlaXZlIHBhY2tldHMuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbSBb aW5dIHBTaW1wbGVOZXR3b3JrICAgIFByb3RvY29sIGluc3RhbmNlIHBvaW50ZXINCj4gPiArICBA cGFyYW0gW291dF0gcEhlYWRlclNpemUgICAgICBUaGUgc2l6ZSwgaW4gYnl0ZXMsIG9mIHRoZSBt ZWRpYSBoZWFkZXIgdG8NCj4gYmUgZmlsbGVkIGluIGJ5DQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGhlIFRyYW5zbWl0KCkgZnVuY3Rpb24uICBJZiBIZWFkZXJTaXplIGlz IG5vbi16ZXJvLCB0aGVuDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQg bXVzdCBiZSBlcXVhbCB0byBTaW1wbGVOZXR3b3JrLT5Nb2RlLQ0KPiA+TWVkaWFIZWFkZXJTaXpl DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIERlc3RBZGRyIGFuZCBQ cm90b2NvbCBwYXJhbWV0ZXJzIG11c3Qgbm90IGJlDQo+IE5VTEwuDQo+ID4gKyAgQHBhcmFtIFtv dXRdIHBCdWZmZXJTaXplICAgICAgVGhlIHNpemUsIGluIGJ5dGVzLCBvZiB0aGUgZW50aXJlIHBh Y2tldA0KPiAobWVkaWEgaGVhZGVyIGFuZA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRhdGEpIHRvIGJlIHRyYW5zbWl0dGVkIHRocm91Z2ggdGhlIG5ldHdvcmsgaW50ZXJm YWNlLg0KPiA+ICsgIEBwYXJhbSBbb3V0XSBwQnVmZmVyICAgICAgICAgIEEgcG9pbnRlciB0byB0 aGUgcGFja2V0IChtZWRpYSBoZWFkZXINCj4gZm9sbG93ZWQgYnkgZGF0YSkgdG8NCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBiZSB0cmFuc21pdHRlZC4gIFRoaXMgcGFy YW1ldGVyIGNhbiBub3QgYmUgTlVMTC4gIElmDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgSGVhZGVyU2l6ZSBpcyB6ZXJvLCB0aGVuIHRoZSBtZWRpYSBoZWFkZXIgaXMgQnVm ZmVyIG11c3QNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHJlYWR5IGJl IGZpbGxlZCBpbiBieSB0aGUgY2FsbGVyLiAgSWYgSGVhZGVyU2l6ZSBpcw0KPiBub256ZXJvLA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4gdGhlIG1lZGlhIGhlYWRl ciB3aWxsIGJlIGZpbGxlZCBpbiBieSB0aGUgVHJhbnNtaXQoKQ0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uLg0KPiA+ICsgIEBwYXJhbSBbb3V0XSBwU3JjQWRk ciAgICAgICAgIFRoZSBzb3VyY2UgSFcgTUFDIGFkZHJlc3MuICBJZiBIZWFkZXJTaXplDQo+IGlz IHplcm8sIHRoZW4NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHBh cmFtZXRlciBpcyBpZ25vcmVkLiAgSWYgSGVhZGVyU2l6ZSBpcyBub256ZXJvIGFuZA0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNyY0FkZHIgaXMgTlVMTCwgdGhlbiBTaW1w bGVOZXR3b3JrLT5Nb2RlLQ0KPiA+Q3VycmVudEFkZHJlc3MNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpcyB1c2VkIGZvciB0aGUgc291cmNlIEhXIE1BQyBhZGRyZXNzLg0K PiA+ICsgIEBwYXJhbSBbb3V0XSBwRGVzdEFkZHIgICAgICAgIFRoZSBkZXN0aW5hdGlvbiBIVyBN QUMgYWRkcmVzcy4gIElmDQo+IEhlYWRlclNpemUgaXMgemVybywgdGhlbg0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgcGFyYW1ldGVyIGlzIGlnbm9yZWQuDQo+ID4g KyAgQHBhcmFtIFtvdXRdIHBQcm90b2NvbCAgICAgICAgVGhlIHR5cGUgb2YgaGVhZGVyIHRvIGJ1 aWxkLiAgSWYgSGVhZGVyU2l6ZSBpcw0KPiB6ZXJvLCB0aGVuDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZC4NCj4gPiArDQo+ID4g KyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhpcyBvcGVyYXRpb24gd2FzIHN1Y2Nl c3NmdWwuDQo+ID4gKyAgQHJldHZhbCBFRklfTk9UX1NUQVJURUQgICAgICAgVGhlIG5ldHdvcmsg aW50ZXJmYWNlIHdhcyBub3Qgc3RhcnRlZC4NCj4gPiArICBAcmV0dmFsIEVGSV9OT1RfUkVBRFkg ICAgICAgICBObyBwYWNrZXRzIGhhdmUgYmVlbiByZWNlaXZlZCBvbiB0aGUNCj4gbmV0d29yayBp bnRlcmZhY2UuDQo+ID4gKyAgQHJldHZhbCBFRklfQlVGRkVSX1RPT19TTUFMTCAgVGhlIHBhY2tl dCBpcyBsYXJnZXIgdGhhbiBCdWZmZXJTaXplDQo+IGJ5dGVzLg0KPiA+ICsgIEByZXR2YWwgRUZJ X0lOVkFMSURfUEFSQU1FVEVSIHBTaW1wbGVOZXR3b3JrIHBhcmFtZXRlciB3YXMNCj4gTlVMTCBv ciBkaWQgbm90IHBvaW50IHRvIGEgdmFsaWQNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBFRklfU0lNUExFX05FVFdPUktfUFJPVE9DT0wgc3RydWN0dXJlLg0KPiA+ICsgIEBy ZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSBjb21tYW5kIGNvdWxkIG5vdCBiZSBzZW50 IHRvIHRoZQ0KPiBuZXR3b3JrIGludGVyZmFjZS4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtFRklf U1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtTTl9SZWNlaXZlICgNCj4gPiArICBJTiBFRklfU0lN UExFX05FVFdPUktfUFJPVE9DT0wgKiBwU2ltcGxlTmV0d29yaywNCj4gPiArICBPVVQgVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgKiBwSGVhZGVyU2l6ZSwNCj4gPiArICBPVVQgVUlOVE4gICAg ICAgICAgICAgICAgICAgICAgKiBwQnVmZmVyU2l6ZSwNCj4gPiArICBPVVQgVk9JRCAgICAgICAg ICAgICAgICAgICAgICAgKiBwQnVmZmVyLA0KPiA+ICsgIE9VVCBFRklfTUFDX0FERFJFU1MgICAg ICAgICAgICAqIHBTcmNBZGRyLA0KPiA+ICsgIE9VVCBFRklfTUFDX0FERFJFU1MgICAgICAgICAg ICAqIHBEZXN0QWRkciwNCj4gPiArICBPVVQgVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgKiBw UHJvdG9jb2wNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFVEhFUk5FVF9IRUFERVIgKiBwSGVh ZGVyOw0KPiA+ICsgIEVGSV9TSU1QTEVfTkVUV09SS19NT0RFICogcE1vZGU7DQo+ID4gKyAgTklD X0RFVklDRSAqIHBOaWNEZXZpY2U7DQo+ID4gKyAgRUZJX1NUQVRVUyBTdGF0dXM7DQo+ID4gKyAg VUlOVDE2IFR5cGUgPSAwOw0KPiA+ICsgIFVJTlQxNiAgQ3VycmVudFBrdExlbjsNCj4gPiArICBC T09MRUFOIGJWYWxpZCA9IFRSVUU7DQo+ID4gKyAgRUZJX1RQTCBUcGxQcmV2aW91czsNCj4gPiAr ICBUcGxQcmV2aW91cyA9IGdCUy0+UmFpc2VUUEwgKFRQTF9DQUxMQkFDSyk7DQo+ID4gKyAgLy8N Cj4gPiArICAvLyBWZXJpZnkgdGhlIHBhcmFtZXRlcnMNCj4gPiArICAvLw0KPiA+ICsgIGlmICgo IE5VTEwgIT0gcFNpbXBsZU5ldHdvcmsgKSAmJiAoIE5VTEwgIT0gcFNpbXBsZU5ldHdvcmstPk1v ZGUgKSkgew0KPiA+ICsgICAgLy8NCj4gPiArICAgIC8vIFRoZSBpbnRlcmZhY2UgbXVzdCBiZSBy dW5uaW5nDQo+ID4gKyAgICAvLw0KPiA+ICsgICAgcE1vZGUgPSBwU2ltcGxlTmV0d29yay0+TW9k ZTsNCj4gPiArICAgIGlmICggRWZpU2ltcGxlTmV0d29ya0luaXRpYWxpemVkID09IHBNb2RlLT5T dGF0ZSApIHsNCj4gPiArICAgICAgaWYgKChwQnVmZmVyU2l6ZSA9PSBOVUxMKSB8fCAocEJ1ZmZl ciA9PSBOVUxMKSkgew0KPiA+ICsgICAgICAgIFN0YXR1cyA9IEVGSV9JTlZBTElEX1BBUkFNRVRF UjsNCj4gPiArICAgICAgICBnQlMtPlJlc3RvcmVUUEwgKFRwbFByZXZpb3VzKTsNCj4gPiArICAg ICAgICByZXR1cm4gU3RhdHVzOw0KPiA+ICsgICAgICB9DQo+ID4gKyAgICAgIC8vDQo+ID4gKyAg ICAgIC8vIFVwZGF0ZSB0aGUgbGluayBzdGF0dXMNCj4gPiArICAgICAgLy8NCj4gPiArICAgICAg cE5pY0RldmljZSA9IERFVl9GUk9NX1NJTVBMRV9ORVRXT1JLICggcFNpbXBsZU5ldHdvcmsgKTsN Cj4gPiArICAgICAgaWYgKCBwTmljRGV2aWNlLT5iTGlua1VwICYmIHBOaWNEZXZpY2UtPmJDb21w bGV0ZSkgew0KPiA+ICsgICAgICAgIGlmICgoTlVMTCAhPSBwSGVhZGVyU2l6ZSkgJiYgKDc3MjAg PT0gKnBIZWFkZXJTaXplKSkgew0KPiA+ICsgICAgICAgICAgcE5pY0RldmljZS0+R3J1Yl9mID0g VFJVRTsNCj4gPiArICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgIGlmICgocE5pY0Rldmlj ZS0+R3J1Yl9mKSAmJiAoNzcyMCAhPSAqcEhlYWRlclNpemUpKSB7DQo+ID4gKyAgICAgICAgICBn QlMtPlJlc3RvcmVUUEwgKFRwbFByZXZpb3VzKTsNCj4gPiArICAgICAgICAgIHJldHVybiBFRklf Tk9UX1JFQURZOw0KPiA+ICsgICAgICAgIH0NCj4gPiArICAgICAgICAvLw0KPiA+ICsgICAgICAg IC8vICBBdHRlbXB0IHRvIGRvIGJ1bGsgaW4NCj4gPiArICAgICAgICAvLw0KPiA+ICsgICAgICAg IGlmICgwID09IHBOaWNEZXZpY2UtPlBrdENudCkgew0KPiA+ICsgICAgICAgICAgU3RhdHVzID0g QXg4ODE3OUJ1bGtJbihwTmljRGV2aWNlKTsNCj4gPiArICAgICAgICAgIGlmIChFRklfRVJST1Io U3RhdHVzKSkNCj4gPiArICAgICAgICAgICAgZ290byAgbm9fcGt0Ow0KPiA+ICsgICAgICAgIH0N Cj4gPiArICAgICAgICBDdXJyZW50UGt0TGVuID0gKigoVUlOVDE2KikgKHBOaWNEZXZpY2UtPnBD dXJQa3RIZHJPZmYgKyAyKSk7DQo+ID4gKyAgICAgICAgaWYgKEN1cnJlbnRQa3RMZW4gJiAoUlhI RFJfRFJPUCB8IFJYSERSX0NSQ0VSUikpDQo+ID4gKyAgICAgICAgICBiVmFsaWQgPSBGQUxTRTsN Cj4gPiArICAgICAgICBDdXJyZW50UGt0TGVuICY9ICAweDFmZmY7DQo+ID4gKyAgICAgICAgQ3Vy cmVudFBrdExlbiAtPSAyOyAvKkVFRUUqLw0KPiA+ICsNCj4gPiArICAgICAgICBpZiAoYlZhbGlk ICYmICggNjAgPD0gQ3VycmVudFBrdExlbiApICYmDQo+ID4gKyAgICAgICAgKChDdXJyZW50UGt0 TGVuIC0gMTQpIDw9IE1BWF9FVEhFUk5FVF9QS1RfU0laRSkgJiYNCj4gPiArICAgICAgICAgICAg KCooKFVJTlQxNiopcE5pY0RldmljZS0+cEN1clBrdE9mZikpID09IDB4RUVFRSkgew0KPiA+ICsg ICAgICAgICAgaWYgKCpwQnVmZmVyU2l6ZSA8IChVSU5UTilDdXJyZW50UGt0TGVuKSB7DQo+ID4g KyAgICAgICAgICAgIGdCUy0+UmVzdG9yZVRQTCAoVHBsUHJldmlvdXMpOw0KPiA+ICsgICAgICAg ICAgICByZXR1cm4gRUZJX0JVRkZFUl9UT09fU01BTEw7DQo+ID4gKyAgICAgICAgICB9DQo+ID4g KyAgICAgICAgICAqcEJ1ZmZlclNpemUgPSBDdXJyZW50UGt0TGVuOw0KPiA+ICsgICAgICAgICAg Q29weU1lbSAoIHBCdWZmZXIsIHBOaWNEZXZpY2UtPnBDdXJQa3RPZmYgKyAyLCBDdXJyZW50UGt0 TGVuICk7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgcEhlYWRlciA9IChFVEhFUk5FVF9IRUFERVIg KikgcE5pY0RldmljZS0+cEN1clBrdE9mZiArIDI7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgaWYg KCBOVUxMICE9IHBIZWFkZXJTaXplICAmJiAoNzcyMCAhPSAqcEhlYWRlclNpemUpKSB7DQo+ID4g KyAgICAgICAgICAgICpwSGVhZGVyU2l6ZSA9IHNpemVvZiAoICpwSGVhZGVyICk7DQo+ID4gKyAg ICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgICAgaWYgKCBOVUxMICE9IHBEZXN0QWRkciAp IHsNCj4gPiArICAgICAgICAgICAgQ29weU1lbSAoIHBEZXN0QWRkciwgJnBIZWFkZXItPmRlc3Rf YWRkciwNCj4gUFhFX0hXQUREUl9MRU5fRVRIRVIgKTsNCj4gPiArICAgICAgICAgIH0NCj4gPiAr ICAgICAgICAgIGlmICggTlVMTCAhPSBwU3JjQWRkciApIHsNCj4gPiArICAgICAgICAgICAgQ29w eU1lbSAoIHBTcmNBZGRyLCAmcEhlYWRlci0+c3JjX2FkZHIsDQo+IFBYRV9IV0FERFJfTEVOX0VU SEVSICk7DQo+ID4gKyAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICBpZiAoIE5VTEwgIT0gcFBy b3RvY29sICkgew0KPiA+ICsgICAgICAgICAgICBUeXBlID0gcEhlYWRlci0+dHlwZTsNCj4gPiAr ICAgICAgICAgICAgVHlwZSA9IChVSU5UMTYpKCggVHlwZSA+PiA4ICkgfCAoIFR5cGUgPDwgOCAp KTsNCj4gPiArICAgICAgICAgICAgKnBQcm90b2NvbCA9IFR5cGU7DQo+ID4gKyAgICAgICAgICB9 DQo+ID4gKyAgICAgICAgICBwTmljRGV2aWNlLT5Qa3RDbnQtLTsNCj4gPiArICAgICAgICAgIHBO aWNEZXZpY2UtPnBDdXJQa3RIZHJPZmYgKz0gNDsNCj4gPiArICAgICAgICAgIHBOaWNEZXZpY2Ut PnBDdXJQa3RPZmYgKz0gKEN1cnJlbnRQa3RMZW4gKyAyICsgNykgJiAweGZmZjg7DQo+ID4gKyAg ICAgICAgICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCj4gPiArICAgICAgICB9IGVsc2Ugew0KPiA+ ICsgICAgICAgICAgcE5pY0RldmljZS0+UGt0Q250ID0gMDsNCj4gPiArICAgICAgICAgIFN0YXR1 cyA9IEVGSV9OT1RfUkVBRFk7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsgICAgICB9IGVsc2Ugew0K PiA+ICsgICAgICAgIFN0YXR1cyA9IEVGSV9OT1RfUkVBRFk7DQo+ID4gKyAgICAgIH0NCj4gPiAr ICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgIGlmIChFZmlTaW1wbGVOZXR3b3JrU3RhcnRlZCA9PSBw TW9kZS0+U3RhdGUpIHsNCj4gPiArICAgICAgICBTdGF0dXMgPSBFRklfREVWSUNFX0VSUk9SOw0K PiA+ICsgICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgIFN0YXR1cyA9IEVGSV9OT1RfU1RBUlRF RCA7DQo+ID4gKyAgICAgIH0NCj4gPiArICAgIH0NCj4gPiArICB9IGVsc2Ugew0KPiA+ICsgICAg U3RhdHVzID0gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICsgIH0NCj4gPiArICAvLw0KPiA+ ICsgIC8vIFJldHVybiB0aGUgb3BlcmF0aW9uIHN0YXR1cw0KPiA+ICsgIC8vDQo+ID4gK25vX3Br dDoNCj4gPiArICBnQlMtPlJlc3RvcmVUUEwgKFRwbFByZXZpb3VzKTsNCj4gPiArICByZXR1cm4g U3RhdHVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhpcyBmdW5j dGlvbiBpcyB1c2VkIHRvIGVuYWJsZSBhbmQgZGlzYWJsZSB0aGUgaGFyZHdhcmUgYW5kIHNvZnR3 YXJlDQo+IHJlY2VpdmUNCj4gPiArICBmaWx0ZXJzIGZvciB0aGUgdW5kZXJseWluZyBuZXR3b3Jr IGRldmljZS4NCj4gPiArDQo+ID4gKyAgVGhlIHJlY2VpdmUgZmlsdGVyIGNoYW5nZSBpcyBicm9r ZW4gZG93biBpbnRvIHRocmVlIHN0ZXBzOg0KPiA+ICsNCj4gPiArICAgIDEuICBUaGUgZmlsdGVy IG1hc2sgYml0cyB0aGF0IGFyZSBzZXQgKE9OKSBpbiB0aGUgRW5hYmxlIHBhcmFtZXRlcg0KPiA+ ICsgICAgICAgIGFyZSBhZGRlZCB0byB0aGUgY3VycmVudCByZWNlaXZlIGZpbHRlciBzZXR0aW5n cy4NCj4gPiArDQo+ID4gKyAgICAyLiAgVGhlIGZpbHRlciBtYXNrIGJpdHMgdGhhdCBhcmUgc2V0 IChPTikgaW4gdGhlIERpc2FibGUgcGFyYW1ldGVyDQo+ID4gKyAgICAgICAgYXJlIHN1YnRyYWN0 ZWQgZnJvbSB0aGUgdXBkYXRlZCByZWNlaXZlIGZpbHRlciBzZXR0aW5zLg0KPiA+ICsNCj4gPiAr ICAgIDMuICBJZiB0aGUgcmVzdWx0aW5nIGZpbHRlciBzZXR0aWducyBpcyBub3Qgc3VwcG9ydGVk IGJ5IHRoZSBoYXJkd2FyZQ0KPiA+ICsgICAgICAgIGEgbW9yZSBsaWJlcmFsIHNldHRpbmcgaXMg c2VsZWN0ZWQuDQo+ID4gKw0KPiA+ICsgIElmIHRoZSBzYW1lIGJpdHMgYXJlIHNldCBpbiB0aGUg RW5hYmxlIGFuZCBEaXNhYmxlIHBhcmFtZXRlcnMsIHRoZW4gdGhlDQo+IGJpdHMNCj4gPiArICBp biB0aGUgRGlzYWJsZSBwYXJhbWV0ZXIgdGFrZXMgcHJlY2VkZW5jZS4NCj4gPiArDQo+ID4gKyAg SWYgdGhlIFJlc2V0TUNhc3RGaWx0ZXIgcGFyYW1ldGVyIGlzIFRSVUUsIHRoZW4gdGhlIG11bHRp Y2FzdCBhZGRyZXNzDQo+IGxpc3QNCj4gPiArICBmaWx0ZXIgaXMgZGlzYWJsZWQgKGlycmVnYXJk bGVzcyBvZiB3aGF0IG90aGVyIG11bHRpY2FzdCBiaXRzIGFyZSBzZXQgaW4NCj4gPiArICB0aGUg ZW5hYmxlIGFuZCBEaXNhYmxlIHBhcmFtZXRlcnMpLiAgVGhlIFNOUC0+TW9kZS0+TUNhc3RGaWx0 ZXJDb3VudA0KPiBmaWVsZA0KPiA+ICsgIGlzIHNldCB0byB6ZXJvLiAgVGhlIFNOUC0+TW9kZS0+ TUNhc3RGaWx0ZXIgY29udGVudHMgYXJlIHVuZGVmaW5lZC4NCj4gPiArDQo+ID4gKyAgQWZ0ZXIg ZW5hYmxlaW5nIG9yIGRpc2FibGluZyByZWNlaXZlIGZpbHRlciBzZXR0aW5ncywgc29mdHdhcmUg c2hvdWxkDQo+ID4gKyAgdmVyaWZ5IHRoZSBuZXcgc2V0dGluZ3MgYnkgY2hlY2tpbmcgdGhlIFNO UC0+TW9kZS0NCj4gPlJlY2VlaXZlRmlsdGVyU2V0dGluZ3MsDQo+ID4gKyAgU05QLT5Nb2RlLT5N Q2FzdEZpbHRlckNvdW50IGFuZCBTTlAtPk1vZGUtPk1DYXN0RmlsdGVyIGZpZWxkcy4NCj4gPiAr DQo+ID4gKyAgTm90ZTogU29tZSBuZXR3b3JrIGRyaXZlcnMgYW5kL29yIGRldmljZXMgd2lsbCBh dXRvbWF0aWNhbGx5IHByb21vdGUNCj4gPiArICByZWNlaXZlIGZpbHRlciBzZXR0aW5ncyBpZiB0 aGUgcmVxdWVzdGVkIHNldHRpbmcgY2FuIG5vdCBiZSBob25vcmVkLg0KPiA+ICsgIEZvciBleGFt cGxlLCBpZiBhIHJlcXVlc3QgZm9yIGZvdXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpcyBtYWRlIGFu ZA0KPiA+ICsgIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIG9ubHkgc3VwcG9ydHMgdHdvIG11bHRp Y2FzdCBhZGRyZXNzZXMgdGhlDQo+ID4gKyAgZHJpdmVyIG1pZ2h0IHNldCB0aGUgcHJvbWlzY3Vv dXMgb3IgcHJvbWlzY3VvdXMgbXVsdGljYXN0IHJlY2VpdmUgZmlsdGVycw0KPiA+ICsgIGluc3Rl YWQuICBUaGUgcmVjZWl2aW5nIHNvZnR3YXJlIGlzIHJlc3BvbnNpYmxlIGZvciBkaXNjYXJkaW5n IGFueSBleHRyYQ0KPiA+ICsgIHBhY2tldHMgdGhhdCBnZXQgdGhyb3VnaCB0aGUgaGFyZHdhcmUg cmVjZWl2ZSBmaWx0ZXJzLg0KPiA+ICsNCj4gPiArICBJZiBSZXNldE1DYXN0RmlsdGVyIGlzIFRS VUUsIHRoZW4gdGhlIG11bHRpY2FzdCByZWNlaXZlIGZpbHRlciBsaXN0DQo+ID4gKyAgb24gdGhl IG5ldHdvcmsgaW50ZXJmYWNlIHdpbGwgYmUgcmVzZXQgdG8gdGhlIGRlZmF1bHQgbXVsdGljYXN0 IHJlY2VpdmUNCj4gPiArICBmaWx0ZXIgbGlzdC4gIElmIFJlc2V0TUNhc3RGaWx0ZXIgaXMgRkFM U0UsIGFuZCB0aGlzIG5ldHdvcmsgaW50ZXJmYWNlDQo+ID4gKyAgYWxsb3dzIHRoZSBtdWx0aWNh c3QgcmVjZWl2ZSBmaWx0ZXIgbGlzdCB0byBiZSBtb2RpZmllZCwgdGhlbiB0aGUNCj4gPiArICBN Q2FzdEZpbHRlckNudCBhbmQgTUNhc3RGaWx0ZXIgYXJlIHVzZWQgdG8gdXBkYXRlIHRoZSBjdXJy ZW50IG11bHRpY2FzdA0KPiA+ICsgIHJlY2VpdmUgZmlsdGVyIGxpc3QuICBUaGUgbW9kaWZpZWQg cmVjZWl2ZSBmaWx0ZXIgbGlzdCBzZXR0aW5ncyBjYW4gYmUNCj4gPiArICBmb3VuZCBpbiB0aGUg TUNhc3RGaWx0ZXIgZmllbGQgb2YgRUZJX1NJTVBMRV9ORVRXT1JLX01PREUuDQo+ID4gKw0KPiA+ ICsgIFRoaXMgcm91dGluZSBjYWxscyA6OlJlY2VpdmVGaWx0ZXJVcGRhdGUgdG8gdXBkYXRlIHRo ZSByZWNlaXZlDQo+ID4gKyAgc3RhdGUgaW4gdGhlIG5ldHdvcmsgYWRhcHRlci4NCj4gPiArDQo+ ID4gKyAgQHBhcmFtIFtpbl0gcFNpbXBsZU5ldHdvcmsgICAgUHJvdG9jb2wgaW5zdGFuY2UgcG9p bnRlcg0KPiA+ICsgIEBwYXJhbSBbaW5dIEVuYWJsZSAgICAgICAgICAgIEEgYml0IG1hc2sgb2Yg cmVjZWl2ZSBmaWx0ZXJzIHRvIGVuYWJsZSBvbiB0aGUNCj4gbmV0d29yayBpbnRlcmZhY2UuDQo+ ID4gKyAgQHBhcmFtIFtpbl0gRGlzYWJsZSAgICAgICAgICAgQSBiaXQgbWFzayBvZiByZWNlaXZl IGZpbHRlcnMgdG8gZGlzYWJsZSBvbiB0aGUNCj4gbmV0d29yayBpbnRlcmZhY2UuDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkg d2l0aCBFRkkgMS4xIHBsYXRmb3JtcywgdGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRUZJX1NJTVBMRV9ORVRXT1JLX1JFQ0VJVkVfTVVMVElDQVNUIGJpdCBtdXN0DQo+ IGJlIHNldA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gdGhlIFJl c2V0TUNhc3RGaWx0ZXIgcGFyYW1ldGVyIGlzIFRSVUUuDQo+ID4gKyAgQHBhcmFtIFtpbl0gYlJl c2V0TUNhc3RGaWx0ZXIgU2V0IHRvIFRSVUUgdG8gcmVzZXQgdGhlIGNvbnRlbnRzIG9mIHRoZQ0K PiBtdWx0aWNhc3QgcmVjZWl2ZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGZpbHRlcnMgb24gdGhlIG5ldHdvcmsgaW50ZXJmYWNlIHRvIHRoZWlyIGRlZmF1bHQgdmFsdWVz Lg0KPiA+ICsgIEBwYXJhbSBbaW5dIE1DYXN0RmlsdGVyQ250ICAgIE51bWJlciBvZiBtdWx0aWNh c3QgSFcgTUFDIGFkZHJlc3MgaW4NCj4gdGhlIG5ldyBNQ2FzdEZpbHRlciBsaXN0Lg0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFsdWUgbXVzdCBiZSBsZXNzIHRo YW4gb3IgZXF1YWwgdG8gdGhlDQo+IE1heE1DYXN0RmlsdGVyQ250DQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZmllbGQgb2YgRUZJX1NJTVBMRV9ORVRXT1JLX01PREUuICBU aGlzIGZpZWxkIGlzDQo+IG9wdGlvbmFsIGlmDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUmVzZXRNQ2FzdEZpbHRlciBpcyBUUlVFLg0KPiA+ICsgIEBwYXJhbSBbaW5dIHBN Q2FzdEZpbHRlciAgICAgIEEgcG9pbnRlciB0byBhIGxpc3Qgb2YgbmV3IG11bHRpY2FzdCByZWNl aXZlDQo+IGZpbHRlciBIVyBNQUMNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBhZGRyZXNzZXMuICBUaGlzIGxpc3Qgd2lsbCByZXBsYWNlIGFueSBleGlzdGluZyBtdWx0aWNh c3QNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVyBNQUMgYWRkcmVzcyBs aXN0LiAgVGhpcyBmaWVsZCBpcyBvcHRpb25hbCBpZg0KPiBSZXNldE1DYXN0RmlsdGVyDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgVFJVRS4NCj4gPiArDQo+ID4gKyAg QHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhpcyBvcGVyYXRpb24gd2FzIHN1Y2Nlc3Nm dWwuDQo+ID4gKyAgQHJldHZhbCBFRklfTk9UX1NUQVJURUQgICAgICAgVGhlIG5ldHdvcmsgaW50 ZXJmYWNlIHdhcyBub3Qgc3RhcnRlZC4NCj4gPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFN RVRFUiBwU2ltcGxlTmV0d29yayBwYXJhbWV0ZXIgd2FzDQo+IE5VTEwgb3IgZGlkIG5vdCBwb2lu dCB0byBhIHZhbGlkDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX1NJ TVBMRV9ORVRXT1JLX1BST1RPQ09MIHN0cnVjdHVyZS4NCj4gPiArICBAcmV0dmFsIEVGSV9ERVZJ Q0VfRVJST1IgICAgICBUaGUgY29tbWFuZCBjb3VsZCBub3QgYmUgc2VudCB0byB0aGUNCj4gbmV0 d29yayBpbnRlcmZhY2UuDQo+ID4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgVGhl IGluY3JlYXNlZCBidWZmZXIgc2l6ZSBmZWF0dXJlIGlzIG5vdA0KPiBzdXBwb3J0ZWQuDQo+ID4g Kw0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArU05fUmVjZWl2 ZUZpbHRlcnMgKA0KPiA+ICsgIElOIEVGSV9TSU1QTEVfTkVUV09SS19QUk9UT0NPTCAqIHBTaW1w bGVOZXR3b3JrLA0KPiA+ICsgIElOIFVJTlQzMiBFbmFibGUsDQo+ID4gKyAgSU4gVUlOVDMyIERp c2FibGUsDQo+ID4gKy8qDQo+ID4gKyNkZWZpbmUgRUZJX1NJTVBMRV9ORVRXT1JLX1JFQ0VJVkVf VU5JQ0FTVCAgICAgICAgICAgICAgIDB4MDENCj4gPiArI2RlZmluZSBFRklfU0lNUExFX05FVFdP UktfUkVDRUlWRV9NVUxUSUNBU1QgICAgICAgICAgICAgMHgwMg0KPiA+ICsjZGVmaW5lIEVGSV9T SU1QTEVfTkVUV09SS19SRUNFSVZFX0JST0FEQ0FTVCAgICAgICAgICAgICAweDA0DQo+ID4gKyNk ZWZpbmUgRUZJX1NJTVBMRV9ORVRXT1JLX1JFQ0VJVkVfUFJPTUlTQ1VPVVMgICAgICAgICAgIDB4 MDgNCj4gPiArI2RlZmluZSBFRklfU0lNUExFX05FVFdPUktfUkVDRUlWRV9QUk9NSVNDVU9VU19N VUxUSUNBU1QNCj4gMHgxMA0KPiA+ICsqLw0KPg0KPiBEcm9wIHRoaXMNCj4NCj4gPiArICBJTiBC T09MRUFOIGJSZXNldE1DYXN0RmlsdGVyLA0KPiA+ICsgIElOIFVJTlROIE1DYXN0RmlsdGVyQ250 LA0KPiA+ICsgIElOIEVGSV9NQUNfQUREUkVTUyAqIHBNQ2FzdEZpbHRlcg0KPiA+ICsgICkNCj4g PiArew0KPiA+ICsgIEVGSV9TSU1QTEVfTkVUV09SS19NT0RFICogcE1vZGU7DQo+ID4gKyAgRUZJ X1NUQVRVUyBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCj4gPiArICBFRklfVFBMIFRwbFByZXZpb3Vz Ow0KPiA+ICsgIE5JQ19ERVZJQ0UgKiBwTmljRGV2aWNlOw0KPiA+ICsNCj4gPiArICBUcGxQcmV2 aW91cyA9IGdCUy0+UmFpc2VUUEwoVFBMX0NBTExCQUNLKTsNCj4gPiArICBwTmljRGV2aWNlID0g REVWX0ZST01fU0lNUExFX05FVFdPUksgKCBwU2ltcGxlTmV0d29yayApOw0KPiA+ICsgIHBNb2Rl ID0gcFNpbXBsZU5ldHdvcmstPk1vZGU7DQo+ID4gKw0KPiA+ICsgIGlmIChwU2ltcGxlTmV0d29y ayA9PSBOVUxMKSB7DQo+ID4gKyAgICBnQlMtPlJlc3RvcmVUUEwoVHBsUHJldmlvdXMpOw0KPiA+ ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ ICsgIHN3aXRjaCAocE1vZGUtPlN0YXRlKSB7DQo+ID4gKyAgY2FzZSBFZmlTaW1wbGVOZXR3b3Jr SW5pdGlhbGl6ZWQ6DQo+ID4gKyAgICBicmVhazsNCj4gPiArICBjYXNlIEVmaVNpbXBsZU5ldHdv cmtTdG9wcGVkOg0KPiA+ICsgICAgU3RhdHVzID0gRUZJX05PVF9TVEFSVEVEOw0KPiA+ICsgICAg Z0JTLT5SZXN0b3JlVFBMKFRwbFByZXZpb3VzKTsNCj4gPiArICAgIHJldHVybiBTdGF0dXM7DQo+ ID4gKw0KPiA+ICsgIGRlZmF1bHQ6DQo+ID4gKyAgICBTdGF0dXMgPSBFRklfREVWSUNFX0VSUk9S Ow0KPiA+ICsgICAgZ0JTLT5SZXN0b3JlVFBMKFRwbFByZXZpb3VzKTsNCj4gPiArICAgIHJldHVy biBTdGF0dXM7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIGNoZWNrIGlm IHdlIGFyZSBhc2tlZCB0byBlbmFibGUgb3IgZGlzYWJsZSBzb21ldGhpbmcgdGhhdCB0aGUgVU5E SQ0KPg0KPiBVTkRJPw0KPg0KPiA+ICsgIC8vIGRvZXMgbm90IGV2ZW4gc3VwcG9ydCENCj4gPiAr ICAvLw0KPiA+ICsgIGlmICgoKEVuYWJsZSAmfnBNb2RlLT5SZWNlaXZlRmlsdGVyTWFzaykgIT0g MCkgfHwNCj4gPiArICAgICAgKChEaXNhYmxlICZ+cE1vZGUtPlJlY2VpdmVGaWx0ZXJNYXNrKSAh PSAwKSkgew0KPiA+ICsgICAgU3RhdHVzID0gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICsg ICAgZ0JTLT5SZXN0b3JlVFBMKFRwbFByZXZpb3VzKTsNCj4gPiArICAgIHJldHVybiBTdGF0dXM7 DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoYlJlc2V0TUNhc3RGaWx0ZXIpIHsNCj4gPiAr ICAgIERpc2FibGUgfD0gKEVGSV9TSU1QTEVfTkVUV09SS19SRUNFSVZFX01VTFRJQ0FTVCAmIHBN b2RlLQ0KPiA+UmVjZWl2ZUZpbHRlck1hc2spOw0KPiA+ICsgICAgTUNhc3RGaWx0ZXJDbnQgPSAw Ow0KPiA+ICsgICAgcE1vZGUtPk1DYXN0RmlsdGVyQ291bnQgPSAwOw0KPiA+ICsgICAgaWYgKCAo MCA9PSAocE1vZGUtPlJlY2VpdmVGaWx0ZXJTZXR0aW5nICYNCj4gRUZJX1NJTVBMRV9ORVRXT1JL X1JFQ0VJVkVfTVVMVElDQVNUKSkgJiYNCj4gPiArICAgRW5hYmxlID09IDAgJiYgRGlzYWJsZSA9 PSAyKSB7DQo+ID4gKyAgICAgIGdCUy0+UmVzdG9yZVRQTChUcGxQcmV2aW91cyk7DQo+ID4gKyAg ICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiArICAgIH0NCj4gPiArICB9IGVsc2Ugew0KPiA+ ICsgICAgaWYgKE1DYXN0RmlsdGVyQ250ICE9IDApIHsNCj4gPiArICAgICAgVUlOVE4gaTsNCj4g PiArDQo+ID4gKyAgICAgIEVGSV9NQUNfQUREUkVTUyAqIHBNdWx0aWNhc3RBZGRyZXNzOw0KPiA+ ICsgICAgICBwTXVsdGljYXN0QWRkcmVzcyA9ICBwTUNhc3RGaWx0ZXI7DQo+ID4gKw0KPiA+ICsg ICAgICBpZiAoKE1DYXN0RmlsdGVyQ250ID4gcE1vZGUtPk1heE1DYXN0RmlsdGVyQ291bnQpIHx8 DQo+ID4gKyAgICAgICAgICAocE1DYXN0RmlsdGVyID09IE5VTEwpKSB7DQo+ID4gKyAgICAgICAg U3RhdHVzID0gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICsgICAgICAgIGdCUy0+UmVzdG9y ZVRQTChUcGxQcmV2aW91cyk7DQo+ID4gKyAgICAgICAgcmV0dXJuIFN0YXR1czsNCj4gPiArICAg ICAgfQ0KPiA+ICsNCj4gPiArICAgICAgZm9yICggaSA9IDAgOyBpIDwgTUNhc3RGaWx0ZXJDbnQg OyBpKysgKSB7DQo+ID4gKyAgICAgICAgICBVSU5UOCAgdG1wOw0KPiA+ICsNCj4gPiArICAgICAg ICAgIHRtcCA9IHBNdWx0aWNhc3RBZGRyZXNzLT5BZGRyWzBdOw0KPiA+ICsgICAgICAgICAgaWYg KCAodG1wICYgMHgwMSkgIT0gMHgwMSApIHsNCj4gPiArICAgICAgICAgICAgZ0JTLT5SZXN0b3Jl VFBMKFRwbFByZXZpb3VzKTsNCj4gPiArICAgICAgICAgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BB UkFNRVRFUjsNCj4gPiArICAgICAgICAgIH0NCj4gPiArICAgICAgICAgIHBNdWx0aWNhc3RBZGRy ZXNzKys7DQo+ID4gKyAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgIHBNb2RlLT5NQ2FzdEZpbHRl ckNvdW50ID0gKFVJTlQzMilNQ2FzdEZpbHRlckNudDsNCj4gPiArICAgICAgQ29weU1lbSAoJnBN b2RlLT5NQ2FzdEZpbHRlclswXSwNCj4gPiArICAgICAgICAgICAgICAgcE1DYXN0RmlsdGVyLA0K PiA+ICsgICAgICAgICAgICAgICBNQ2FzdEZpbHRlckNudCAqIHNpemVvZiAoIEVGSV9NQUNfQURE UkVTUy8qKnBNQ2FzdEZpbHRlciovICkpOw0KPiA+ICsgICAgfQ0KPiA+ICsgIH0NCj4gPiArDQo+ ID4gKyAgaWYgKEVuYWJsZSA9PSAwICYmIERpc2FibGUgPT0gMCAmJiAhYlJlc2V0TUNhc3RGaWx0 ZXIgJiYNCj4gTUNhc3RGaWx0ZXJDbnQgPT0gMCkgew0KPiA+ICsgICAgU3RhdHVzID0gRUZJX1NV Q0NFU1M7DQo+ID4gKyAgICBnQlMtPlJlc3RvcmVUUEwoVHBsUHJldmlvdXMpOw0KPiA+ICsgICAg cmV0dXJuIFN0YXR1czsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmICgoRW5hYmxlICYgRUZJ X1NJTVBMRV9ORVRXT1JLX1JFQ0VJVkVfTVVMVElDQVNUKSAhPSAwICYmDQo+IE1DYXN0RmlsdGVy Q250ID09IDApIHsNCj4gPiArICAgIFN0YXR1cyA9IEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4g PiArICAgIGdCUy0+UmVzdG9yZVRQTChUcGxQcmV2aW91cyk7DQo+ID4gKyAgICByZXR1cm4gU3Rh dHVzOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgcE1vZGUtPlJlY2VpdmVGaWx0ZXJTZXR0aW5n IHw9IEVuYWJsZTsNCj4gPiArICBwTW9kZS0+UmVjZWl2ZUZpbHRlclNldHRpbmcgJj0gfkRpc2Fi bGU7DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IFJlY2VpdmVGaWx0ZXJVcGRhdGUgKHBTaW1wbGVO ZXR3b3JrKTsNCj4gPiArDQo+ID4gKyAgZ0JTLT5SZXN0b3JlVFBMKFRwbFByZXZpb3VzKTsNCj4g PiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBSZXNl dCB0aGUgbmV0d29yayBhZGFwdGVyLg0KPiA+ICsNCj4gPiArICBSZXNldHMgYSBuZXR3b3JrIGFk YXB0ZXIgYW5kIHJlaW5pdGlhbGl6ZXMgaXQgd2l0aCB0aGUgcGFyYW1ldGVycyB0aGF0DQo+ID4g KyAgd2VyZSBwcm92aWRlZCBpbiB0aGUgcHJldmlvdXMgY2FsbCB0byBJbml0aWFsaXplICgpLiAg VGhlIHRyYW5zbWl0IGFuZA0KPiA+ICsgIHJlY2VpdmUgcXVldWVzIGFyZSBjbGVhcmVkLiAgUmVj ZWl2ZSBmaWx0ZXJzLCB0aGUgc3RhdGlvbiBhZGRyZXNzLCB0aGUNCj4gPiArICBzdGF0aXN0aWNz LCBhbmQgdGhlIG11bHRpY2FzdC1JUC10by1IVyBNQUMgYWRkcmVzc2VzIGFyZSBub3QgcmVzZXQg YnkNCj4gPiArICB0aGlzIGNhbGwuDQo+ID4gKw0KPiA+ICsgIFRoaXMgcm91dGluZSBjYWxscyA6 OkF4ODgxNzlSZXNldCB0byBwZXJmb3JtIHRoZSBhZGFwdGVyIHNwZWNpZmljDQo+ID4gKyAgcmVz ZXQgb3BlcmF0aW9uLiAgVGhpcyByb3V0aW5lIGFsc28gc3RhcnRzIHRoZSBsaW5rIG5lZ290aWF0 aW9uDQo+ID4gKyAgYnkgY2FsbGluZyA6OkF4ODgxNzlOZWdvdGlhdGVMaW5rU3RhcnQuDQo+ID4g Kw0KPiA+ICsgIEBwYXJhbSBbaW5dIHBTaW1wbGVOZXR3b3JrICAgIFByb3RvY29sIGluc3RhbmNl IHBvaW50ZXINCj4gPiArICBAcGFyYW0gW2luXSBiRXh0ZW5kZWRWZXJpZmljYXRpb24gIEluZGlj YXRlcyB0aGF0IHRoZSBkcml2ZXIgbWF5DQo+IHBlcmZvcm0gYSBtb3JlDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZXhoYXVzdGl2ZSB2ZXJpZmljYXRpb24gb3BlcmF0aW9u IG9mIHRoZSBkZXZpY2UNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJp bmcgcmVzZXQuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRo aXMgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsLg0KPiA+ICsgIEByZXR2YWwgRUZJX05PVF9TVEFS VEVEICAgICAgIFRoZSBuZXR3b3JrIGludGVyZmFjZSB3YXMgbm90IHN0YXJ0ZWQuDQo+ID4gKyAg QHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgcFNpbXBsZU5ldHdvcmsgcGFyYW1ldGVyIHdh cw0KPiBOVUxMIG9yIGRpZCBub3QgcG9pbnQgdG8gYSB2YWxpZA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEVGSV9TSU1QTEVfTkVUV09SS19QUk9UT0NPTCBzdHJ1Y3R1cmUu DQo+ID4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIGNvbW1hbmQgY291bGQg bm90IGJlIHNlbnQgdG8gdGhlDQo+IG5ldHdvcmsgaW50ZXJmYWNlLg0KPiA+ICsgIEByZXR2YWwg RUZJX1VOU1VQUE9SVEVEICAgICAgIFRoZSBpbmNyZWFzZWQgYnVmZmVyIHNpemUgZmVhdHVyZSBp cyBub3QNCj4gc3VwcG9ydGVkLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4g PiArRUZJQVBJDQo+ID4gK1NOX1Jlc2V0ICgNCj4gPiArICBJTiBFRklfU0lNUExFX05FVFdPUktf UFJPVE9DT0wgKiBwU2ltcGxlTmV0d29yaywNCj4gPiArICBJTiBCT09MRUFOIGJFeHRlbmRlZFZl cmlmaWNhdGlvbg0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEVGSV9TSU1QTEVfTkVUV09SS19N T0RFICogcE1vZGU7DQo+ID4gKyAgTklDX0RFVklDRSAqIHBOaWNEZXZpY2U7DQo+ID4gKyAgRUZJ X1NUQVRVUyBTdGF0dXM7DQo+ID4gKyAgRUZJX1RQTCBUcGxQcmV2aW91czsNCj4gPiArDQo+ID4g Kw0KPiA+ICsgIFRwbFByZXZpb3VzID0gZ0JTLT5SYWlzZVRQTChUUExfQ0FMTEJBQ0spOw0KPiA+ ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vICBWZXJpZnkgdGhlIHBhcmFtZXRlcnMNCj4gPiArICAv Lw0KPiA+ICsgIGlmICgoIE5VTEwgIT0gcFNpbXBsZU5ldHdvcmsgKSAmJiAoIE5VTEwgIT0gcFNp bXBsZU5ldHdvcmstPk1vZGUgKSkgew0KPiA+ICsgICAgcE1vZGUgPSBwU2ltcGxlTmV0d29yay0+ TW9kZTsNCj4gPiArICAgIGlmICggRWZpU2ltcGxlTmV0d29ya0luaXRpYWxpemVkID09IHBNb2Rl LT5TdGF0ZSApIHsNCj4gPiArICAgICAgLy8NCj4gPiArICAgICAgLy8gIFVwZGF0ZSB0aGUgZGV2 aWNlIHN0YXRlDQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIHBOaWNEZXZpY2UgPSBERVZfRlJP TV9TSU1QTEVfTkVUV09SSyAoIHBTaW1wbGVOZXR3b3JrICk7DQo+ID4gKw0KPiA+ICsgICAgICAv Lw0KPiA+ICsgICAgICAvLyAgUmVzZXQgdGhlIGRldmljZQ0KPiA+ICsgICAgICAvLw0KPiA+ICsg ICAgICBpZiAoIXBOaWNEZXZpY2UtPmJGaXJzdFJzdCkgew0KPiA+ICsgICAgICAgIFN0YXR1cyA9 IEVGSV9TVUNDRVNTOw0KPiA+ICsgICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgIFN0YXR1cyA9 IEF4ODgxNzlSZXNldCAoIHBOaWNEZXZpY2UgKTsNCj4gPiArICAgICAgICBpZiAoICFFRklfRVJS T1IgKCBTdGF0dXMgKSkgew0KPiA+ICsgICAgICAgICAgU3RhdHVzID0gUmVjZWl2ZUZpbHRlclVw ZGF0ZSAoIHBTaW1wbGVOZXR3b3JrICk7DQo+ID4gKyAgICAgICAgICBpZiAoICFFRklfRVJST1Ig KCBTdGF0dXMgKSAmJiAhcE5pY0RldmljZS0+YkxpbmtVcCAmJiBwTmljRGV2aWNlLQ0KPiA+YkZp cnN0UnN0KSB7DQo+ID4gKyAgICAgICAgICAgIFN0YXR1cyA9IEF4ODgxNzlOZWdvdGlhdGVMaW5r U3RhcnQgKCBwTmljRGV2aWNlICk7DQo+ID4gKyAgICAgICAgICAgIHBOaWNEZXZpY2UtPmJGaXJz dFJzdCA9IEZBTFNFOw0KPiA+ICsgICAgICAgICAgfQ0KPiA+ICsgICAgICAgIH0NCj4gPiArICAg ICAgfQ0KPiA+ICsgICAgfSBlbHNlIHsNCj4gPiArICAgICAgU3RhdHVzID0gRUZJX05PVF9TVEFS VEVEOw0KPiA+ICsgICAgfQ0KPiA+ICsgIH0gZWxzZSB7DQo+ID4gKyAgICBTdGF0dXMgPSBFRklf SU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gKyAgfQ0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gUmV0dXJu IHRoZSBvcGVyYXRpb24gc3RhdHVzDQo+ID4gKyAgLy8NCj4gPiArICBnQlMtPlJlc3RvcmVUUEwo VHBsUHJldmlvdXMpOw0KPiA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gK30NCj4gPiArDQo+ID4g Ky8qKg0KPiA+ICsgIEluaXRpYWxpemUgdGhlIHNpbXBsZSBuZXR3b3JrIHByb3RvY29sLg0KPiA+ ICsNCj4gPiArICBUaGlzIHJvdXRpbmUgY2FsbHMgOjpBeDg4MTc5TWFjQWRkcmVzc0dldCB0byBv YnRhaW4gdGhlDQo+ID4gKyAgTUFDIGFkZHJlc3MuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbSBbaW5d IHBOaWNEZXZpY2UgICAgICAgTklDX0RFVklDRV9JTlNUQU5DRSBwb2ludGVyDQo+ID4gKw0KPiA+ ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgIFNldHVwIHdhcyBzdWNjZXNzZnVsDQo+ID4gKw0K PiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtTTl9TZXR1cCAoDQo+ID4gKyAgSU4gTklD X0RFVklDRSAqIHBOaWNEZXZpY2UNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU0lNUExF X05FVFdPUktfTU9ERSAqIHBNb2RlOw0KPiA+ICsgIEVGSV9TSU1QTEVfTkVUV09SS19QUk9UT0NP TCAqIHBTaW1wbGVOZXR3b3JrOw0KPiA+ICsgIEVGSV9TVEFUVVMgU3RhdHVzOw0KPiA+ICsNCj4g PiArICAvLw0KPiA+ICsgIC8vIEluaXRpYWxpemUgdGhlIHNpbXBsZSBuZXR3b3JrIHByb3RvY29s DQo+ID4gKyAgLy8NCj4gPiArICBwU2ltcGxlTmV0d29yayA9ICZwTmljRGV2aWNlLT5TaW1wbGVO ZXR3b3JrOw0KPiA+ICsgIHBTaW1wbGVOZXR3b3JrLT5SZXZpc2lvbiA9DQo+IEVGSV9TSU1QTEVf TkVUV09SS19QUk9UT0NPTF9SRVZJU0lPTjsNCj4gPiArICBwU2ltcGxlTmV0d29yay0+U3RhcnQg PSAoRUZJX1NJTVBMRV9ORVRXT1JLX1NUQVJUKVNOX1N0YXJ0Ow0KPiA+ICsgIHBTaW1wbGVOZXR3 b3JrLT5TdG9wID0gKEVGSV9TSU1QTEVfTkVUV09SS19TVE9QKVNOX1N0b3A7DQo+ID4gKyAgcFNp bXBsZU5ldHdvcmstPkluaXRpYWxpemUgPQ0KPiAoRUZJX1NJTVBMRV9ORVRXT1JLX0lOSVRJQUxJ WkUpU05fSW5pdGlhbGl6ZTsNCj4gPiArICBwU2ltcGxlTmV0d29yay0+UmVzZXQgPSAoRUZJX1NJ TVBMRV9ORVRXT1JLX1JFU0VUKVNOX1Jlc2V0Ow0KPiA+ICsgIHBTaW1wbGVOZXR3b3JrLT5TaHV0 ZG93biA9DQo+IChFRklfU0lNUExFX05FVFdPUktfU0hVVERPV04pU05fU2h1dGRvd247DQo+ID4g KyAgcFNpbXBsZU5ldHdvcmstPlJlY2VpdmVGaWx0ZXJzID0NCj4gKEVGSV9TSU1QTEVfTkVUV09S S19SRUNFSVZFX0ZJTFRFUlMpU05fUmVjZWl2ZUZpbHRlcnM7DQo+ID4gKyAgcFNpbXBsZU5ldHdv cmstPlN0YXRpb25BZGRyZXNzID0NCj4gKEVGSV9TSU1QTEVfTkVUV09SS19TVEFUSU9OX0FERFJF U1MpU05fU3RhdGlvbkFkZHJlc3M7DQo+ID4gKyAgcFNpbXBsZU5ldHdvcmstPlN0YXRpc3RpY3Mg PQ0KPiAoRUZJX1NJTVBMRV9ORVRXT1JLX1NUQVRJU1RJQ1MpU05fU3RhdGlzdGljczsNCj4gPiAr ICBwU2ltcGxlTmV0d29yay0+TUNhc3RJcFRvTWFjID0NCj4gKEVGSV9TSU1QTEVfTkVUV09SS19N Q0FTVF9JUF9UT19NQUMpU05fTUNhc3RJUHRvTUFDOw0KPiA+ICsgIHBTaW1wbGVOZXR3b3JrLT5O dkRhdGEgPQ0KPiAoRUZJX1NJTVBMRV9ORVRXT1JLX05WREFUQSlTTl9OdkRhdGE7DQo+ID4gKyAg cFNpbXBsZU5ldHdvcmstPkdldFN0YXR1cyA9DQo+IChFRklfU0lNUExFX05FVFdPUktfR0VUX1NU QVRVUylTTl9HZXRTdGF0dXM7DQo+ID4gKyAgcFNpbXBsZU5ldHdvcmstPlRyYW5zbWl0ID0NCj4g KEVGSV9TSU1QTEVfTkVUV09SS19UUkFOU01JVClTTl9UcmFuc21pdDsNCj4gPiArICBwU2ltcGxl TmV0d29yay0+UmVjZWl2ZSA9DQo+IChFRklfU0lNUExFX05FVFdPUktfUkVDRUlWRSlTTl9SZWNl aXZlOw0KPg0KPiBBcmUgdGhlc2UgY2FzdHMgbmVjZXNzYXJ5Pw0KPg0KPiA+ICsgIHBTaW1wbGVO ZXR3b3JrLT5XYWl0Rm9yUGFja2V0ID0gTlVMTDsNCj4gPiArICBwTW9kZSA9ICZwTmljRGV2aWNl LT5TaW1wbGVOZXR3b3JrRGF0YTsNCj4gPiArICBwU2ltcGxlTmV0d29yay0+TW9kZSA9IHBNb2Rl Ow0KPiA+ICsgIHBNb2RlLT5TdGF0ZSA9IEVmaVNpbXBsZU5ldHdvcmtTdG9wcGVkOw0KPiA+ICsg IHBNb2RlLT5Id0FkZHJlc3NTaXplID0gUFhFX0hXQUREUl9MRU5fRVRIRVI7DQo+ID4gKyAgcE1v ZGUtPk1lZGlhSGVhZGVyU2l6ZSA9IHNpemVvZiAoIEVUSEVSTkVUX0hFQURFUiApOw0KPiA+ICsg IHBNb2RlLT5NYXhQYWNrZXRTaXplID0gTUFYX0VUSEVSTkVUX1BLVF9TSVpFOw0KPiA+ICsgIHBN b2RlLT5SZWNlaXZlRmlsdGVyTWFzayA9DQo+IEVGSV9TSU1QTEVfTkVUV09SS19SRUNFSVZFX1VO SUNBU1QNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRklfU0lNUExFX05FVFdP UktfUkVDRUlWRV9NVUxUSUNBU1QNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBF RklfU0lNUExFX05FVFdPUktfUkVDRUlWRV9CUk9BRENBU1QNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgfCBFRklfU0lNUExFX05FVFdPUktfUkVDRUlWRV9QUk9NSVNDVU9VUw0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQo+IEVGSV9TSU1QTEVfTkVUV09SS19SRUNF SVZFX1BST01JU0NVT1VTX01VTFRJQ0FTVDsNCj4gPiArICBwTW9kZS0+UmVjZWl2ZUZpbHRlclNl dHRpbmcgPQ0KPiBFRklfU0lNUExFX05FVFdPUktfUkVDRUlWRV9VTklDQVNUDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUZJX1NJTVBMRV9ORVRXT1JLX1JFQ0VJVkVfQlJP QURDQVNUOw0KPiA+ICsgIHBNb2RlLT5NYXhNQ2FzdEZpbHRlckNvdW50ID0gTUFYX01DQVNUX0ZJ TFRFUl9DTlQ7DQo+ID4gKyAgcE1vZGUtPk1DYXN0RmlsdGVyQ291bnQgPSAwOw0KPiA+ICsgIHBN b2RlLT5OdlJhbVNpemUgPSA1MTI7DQo+ID4gKyAgcE1vZGUtPk52UmFtQWNjZXNzU2l6ZSA9IDI7 DQo+ID4gKyAgU2V0TWVtICggJnBNb2RlLT5Ccm9hZGNhc3RBZGRyZXNzLA0KPiA+ICsgICAgICAg ICAgIFBYRV9IV0FERFJfTEVOX0VUSEVSLA0KPiA+ICsgICAgICAgICAgIDB4ZmYgKTsNCj4gPiAr ICBwTW9kZS0+SWZUeXBlID0gRWZpTmV0d29ya0ludGVyZmFjZVVuZGk7DQo+DQo+IE5FVF9JRlRZ UEVfRVRIRVJORVQ/DQo+DQo+ID4gKyAgcE1vZGUtPk1hY0FkZHJlc3NDaGFuZ2VhYmxlID0gVFJV RTsNCj4gPiArICBwTW9kZS0+TXVsdGlwbGVUeFN1cHBvcnRlZCA9IEZBTFNFOw0KPiA+ICsgIHBN b2RlLT5NZWRpYVByZXNlbnRTdXBwb3J0ZWQgPSBUUlVFOw0KPiA+ICsgIHBNb2RlLT5NZWRpYVBy ZXNlbnQgPSBGQUxTRTsNCj4gPiArICAvLw0KPiA+ICsgIC8vICBSZWFkIHRoZSBNQUMgYWRkcmVz cw0KPiA+ICsgIC8vDQo+ID4gKyAgcE5pY0RldmljZS0+UGh5SWQgPSBQSFlfSURfSU5URVJOQUw7 DQo+ID4gKyAgcE5pY0RldmljZS0+YjEwME1icHMgPSBGQUxTRTsNCj4gPiArICBwTmljRGV2aWNl LT5iMTAwME1icHMgPSBUUlVFOw0KPiA+ICsgIHBOaWNEZXZpY2UtPmJGdWxsRHVwbGV4ID0gVFJV RTsNCj4gPiArICBwTmljRGV2aWNlLT5iQ29tcGxldGUgPSBGQUxTRTsNCj4gPiArICBwTmljRGV2 aWNlLT5iTGlua1VwID0gRkFMU0U7DQo+ID4gKyAgcE5pY0RldmljZS0+R3J1Yl9mID0gRkFMU0U7 DQo+ID4gKyAgcE5pY0RldmljZS0+YkZpcnN0UnN0ID0gVFJVRTsNCj4gPiArICBwTmljRGV2aWNl LT5Qa3RDbnQgPSAwOw0KPiA+ICsgIHBOaWNEZXZpY2UtPlNraXBSWENudCA9IDA7DQo+ID4gKyAg cE5pY0RldmljZS0+dXNiTWF4UGt0U2l6ZSA9IDUxMjsNCj4gPiArICBwTmljRGV2aWNlLT5iU2V0 WmVyb0xlbiA9IFRSVUU7DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IEF4ODgxNzlNYWNBZGRyZXNz R2V0ICggcE5pY0RldmljZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZwTW9kZS0+UGVybWFuZW50QWRkcmVzcy5BZGRyWzBdKTsNCj4gPiArICBpZiAoICFFRklfRVJS T1IgKCBTdGF0dXMgKSkgew0KPg0KPiBObyAnc3VjY2VzcyBoYW5kbGluZycgcGxlYXNlLiBUaGlz IHdpbGwgcmV0dXJuIG9uIGVycm9yLCBzbyB0aGUNCj4gcmVtYWluaW5nIGNvZGUgY2FuIHJ1biB1 bmNvbmRpdGlvbmFsbHkuDQo+DQo+DQo+ID4gKyAgICAvLw0KPiA+ICsgICAgLy8gIFVzZSB0aGUg aGFyZHdhcmUgYWRkcmVzcyBhcyB0aGUgY3VycmVudCBhZGRyZXNzDQo+ID4gKyAgICAvLw0KPiA+ ICsgICAgQ29weU1lbSAoICZwTW9kZS0+Q3VycmVudEFkZHJlc3MsDQo+ID4gKyAgICAgICAgICAg ICAgJnBNb2RlLT5QZXJtYW5lbnRBZGRyZXNzLA0KPiA+ICsgICAgICAgICAgICAgIFBYRV9IV0FE RFJfTEVOX0VUSEVSICk7DQo+ID4gKw0KPiA+ICsgICAgQ29weU1lbSAoICZwTmljRGV2aWNlLT5N QUMsDQo+ID4gKyAgICAgICAgICAgICAgJnBNb2RlLT5QZXJtYW5lbnRBZGRyZXNzLA0KPiA+ICsg ICAgICAgICAgICAgIFBYRV9IV0FERFJfTEVOX0VUSEVSICk7DQo+ID4gKw0KPiA+ICsgIH0gZWxz ZSB7DQo+ID4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgU3Rh dHVzID0gZ0JTLT5BbGxvY2F0ZVBvb2wgKCBFZmlSdW50aW1lU2VydmljZXNEYXRhLA0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVg4ODE3OV9NQVhfQlVMS0lOX1NJWkUsDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVk9JRCAqKikgJnBOaWNEZXZpY2Ut PnBCdWxrSW5idWYgKTsNCj4gPiArDQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K PiA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBn QlMtPkFsbG9jYXRlUG9vbCAoIEVmaVJ1bnRpbWVTZXJ2aWNlc0RhdGEsDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKCBUWF9QQUNLRVQgKSwNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChWT0lEICoqKSAmcE5pY0RldmljZS0+cFR4VGVzdCAp Ow0KPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICBnQlMtPkZyZWVQb29s IChwTmljRGV2aWNlLT5wQnVsa0luYnVmKTsNCj4NCj4gaW5kZW50YXRpb24NCj4NCj4gPiArICB9 DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gIFJldHVybiB0aGUgc2V0dXAgc3RhdHVzDQo+ ID4gKyAgLy8NCj4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsNCj4g PiArLyoqDQo+ID4gKyAgVGhpcyByb3V0aW5lIHN0YXJ0cyB0aGUgbmV0d29yayBpbnRlcmZhY2Uu DQo+ID4gKw0KPiA+ICsgIEBwYXJhbSBbaW5dIHBTaW1wbGVOZXR3b3JrICAgIFByb3RvY29sIGlu c3RhbmNlIHBvaW50ZXINCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAg ICAgVGhpcyBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwuDQo+ID4gKyAgQHJldHZhbCBFRklfQUxS RUFEWV9TVEFSVEVEICAgVGhlIG5ldHdvcmsgaW50ZXJmYWNlIHdhcyBhbHJlYWR5DQo+IHN0YXJ0 ZWQuDQo+ID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgcFNpbXBsZU5ldHdvcmsg cGFyYW1ldGVyIHdhcw0KPiBOVUxMIG9yIGRpZCBub3QgcG9pbnQgdG8gYSB2YWxpZA0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9TSU1QTEVfTkVUV09SS19QUk9UT0NP TCBzdHJ1Y3R1cmUuDQo+ID4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIGNv bW1hbmQgY291bGQgbm90IGJlIHNlbnQgdG8gdGhlDQo+IG5ldHdvcmsgaW50ZXJmYWNlLg0KPiA+ ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIFRoZSBpbmNyZWFzZWQgYnVmZmVyIHNp emUgZmVhdHVyZSBpcyBub3QNCj4gc3VwcG9ydGVkLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VG SV9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ID4gK1NOX1N0YXJ0ICgNCj4gPiArICBJTiBFRklfU0lN UExFX05FVFdPUktfUFJPVE9DT0wgKiBwU2ltcGxlTmV0d29yaw0KPiA+ICsgICkNCj4gPiArew0K PiA+ICsgIE5JQ19ERVZJQ0UgKiBwTmljRGV2aWNlOw0KPiA+ICsgIEVGSV9TSU1QTEVfTkVUV09S S19NT0RFICogcE1vZGU7DQo+ID4gKyAgRUZJX1NUQVRVUyBTdGF0dXM7DQo+ID4gKyAgRUZJX1RQ TCBUcGxQcmV2aW91czsNCj4gPiArDQo+ID4gKw0KPiA+ICsgIFRwbFByZXZpb3VzID0gZ0JTLT5S YWlzZVRQTChUUExfQ0FMTEJBQ0spOw0KPiA+ICsNCj4gPiArDQo+ID4gKw0KPg0KPiByZWR1bmRh bnQgd2hpdGVzcGFjZQ0KPg0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gVmVyaWZ5IHRoZSBwYXJhbWV0 ZXJzDQo+ID4gKyAgLy8NCj4gPiArICBTdGF0dXMgPSBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ ID4gKyAgaWYgKCggTlVMTCAhPSBwU2ltcGxlTmV0d29yayApICYmICggTlVMTCAhPSBwU2ltcGxl TmV0d29yay0+TW9kZSApKSB7DQo+ID4gKyAgICBwTW9kZSA9IHBTaW1wbGVOZXR3b3JrLT5Nb2Rl Ow0KPiA+ICsgICAgaWYgKCBFZmlTaW1wbGVOZXR3b3JrU3RvcHBlZCA9PSBwTW9kZS0+U3RhdGUg KSB7DQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIC8vIEluaXRpYWxpemUgdGhlIG1vZGUgc3Ry dWN0dXJlDQo+ID4gKyAgICAgIC8vIE5WUkFNIGFjY2VzcyBpcyBub3Qgc3VwcG9ydGVkDQo+ID4g KyAgICAgIC8vDQo+ID4gKyAgICAgIFplcm9NZW0gKCBwTW9kZSwgc2l6ZW9mICggKnBNb2RlICkp Ow0KPiA+ICsNCj4gPiArICAgICAgcE1vZGUtPlN0YXRlID0gRWZpU2ltcGxlTmV0d29ya1N0YXJ0 ZWQ7DQo+ID4gKyAgICAgIHBNb2RlLT5Id0FkZHJlc3NTaXplID0gUFhFX0hXQUREUl9MRU5fRVRI RVI7DQo+ID4gKyAgICAgIHBNb2RlLT5NZWRpYUhlYWRlclNpemUgPSBzaXplb2YgKCBFVEhFUk5F VF9IRUFERVIgKTsNCj4gPiArICAgICAgcE1vZGUtPk1heFBhY2tldFNpemUgPSBNQVhfRVRIRVJO RVRfUEtUX1NJWkU7DQo+ID4gKyAgICAgIHBNb2RlLT5SZWNlaXZlRmlsdGVyTWFzayA9DQo+IEVG SV9TSU1QTEVfTkVUV09SS19SRUNFSVZFX1VOSUNBU1QNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgRUZJX1NJTVBMRV9ORVRXT1JLX1JFQ0VJVkVfTVVMVElDQVNUDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVGSV9TSU1QTEVfTkVUV09SS19SRUNF SVZFX0JST0FEQ0FTVA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRklf U0lNUExFX05FVFdPUktfUkVDRUlWRV9QUk9NSVNDVU9VUw0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfA0KPiBFRklfU0lNUExFX05FVFdPUktfUkVDRUlWRV9QUk9NSVNDVU9V U19NVUxUSUNBU1Q7DQo+ID4gKyAgICAgIHBNb2RlLT5SZWNlaXZlRmlsdGVyU2V0dGluZyA9DQo+ IEVGSV9TSU1QTEVfTkVUV09SS19SRUNFSVZFX1VOSUNBU1Q7DQo+ID4gKyAgICAgIHBNb2RlLT5N YXhNQ2FzdEZpbHRlckNvdW50ID0gTUFYX01DQVNUX0ZJTFRFUl9DTlQ7DQo+ID4gKyAgICAgIHBN b2RlLT5NQ2FzdEZpbHRlckNvdW50ID0gMDsNCj4gPiArICAgICAgcE1vZGUtPk52UmFtU2l6ZSA9 IDUxMjsNCj4gPiArICAgICAgcE1vZGUtPk52UmFtQWNjZXNzU2l6ZSA9IDI7DQo+ID4gKyAgICAg IHBOaWNEZXZpY2UgPSBERVZfRlJPTV9TSU1QTEVfTkVUV09SSyAoIHBTaW1wbGVOZXR3b3JrICk7 DQo+ID4gKyAgICAgIFN0YXR1cyA9IEF4ODgxNzlNYWNBZGRyZXNzR2V0ICggcE5pY0RldmljZSwg JnBNb2RlLQ0KPiA+UGVybWFuZW50QWRkcmVzcy5BZGRyWzBdKTsNCj4gPiArICAgICAgQ29weU1l bSAoICZwTW9kZS0+Q3VycmVudEFkZHJlc3MsDQo+ID4gKyAgICAgICAgICAgICAgICAmcE1vZGUt PlBlcm1hbmVudEFkZHJlc3MsDQo+ID4gKyAgICAgICAgICAgICAgICBzaXplb2YgKCBwTW9kZS0+ Q3VycmVudEFkZHJlc3MgKSk7DQo+ID4gKyAgICAgIFNldE1lbSgmcE1vZGUtPkJyb2FkY2FzdEFk ZHJlc3MsIFBYRV9IV0FERFJfTEVOX0VUSEVSLA0KPiAweGZmKTsNCj4gPiArICAgICAgcE1vZGUt PklmVHlwZSA9IEVmaU5ldHdvcmtJbnRlcmZhY2VVbmRpOw0KPiA+ICsgICAgICBwTW9kZS0+TWFj QWRkcmVzc0NoYW5nZWFibGUgPSBUUlVFOw0KPiA+ICsgICAgICBwTW9kZS0+TXVsdGlwbGVUeFN1 cHBvcnRlZCA9IEZBTFNFOw0KPiA+ICsgICAgICBwTW9kZS0+TWVkaWFQcmVzZW50U3VwcG9ydGVk ID0gVFJVRTsNCj4gPiArICAgICAgcE1vZGUtPk1lZGlhUHJlc2VudCA9IEZBTFNFOw0KPiA+ICsN Cj4gPiArICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgIFN0YXR1cyA9IEVGSV9BTFJFQURZX1NUQVJU RUQ7DQo+ID4gKyAgICB9DQo+ID4gKyAgfQ0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gUmV0dXJuIHRo ZSBvcGVyYXRpb24gc3RhdHVzDQo+ID4gKyAgLy8NCj4gPiArICBnQlMtPlJlc3RvcmVUUEwoVHBs UHJldmlvdXMpOw0KPiA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gK30NCj4gPiArDQo+ID4gKw0K PiA+ICsvKioNCj4gPiArICBTZXQgdGhlIE1BQyBhZGRyZXNzLg0KPiA+ICsNCj4gPiArICBUaGlz IGZ1bmN0aW9uIG1vZGlmaWVzIG9yIHJlc2V0cyB0aGUgY3VycmVudCBzdGF0aW9uIGFkZHJlc3Mg b2YgYQ0KPiA+ICsgIG5ldHdvcmsgaW50ZXJmYWNlLiAgSWYgUmVzZXQgaXMgVFJVRSwgdGhlbiB0 aGUgY3VycmVudCBzdGF0aW9uIGFkZHJlc3MNCj4gPiArICBpcyBzZXQgb3QgdGhlIG5ldHdvcmsg aW50ZXJmYWNlJ3MgcGVybWFuZW50IGFkZHJlc3MuICBJZiBSZXNldCBpZiBGQUxTRQ0KPiA+ICsg IHRoZW4gdGhlIGN1cnJlbnQgc3RhdGlvbiBhZGRyZXNzIGlzIGNoYW5nZWQgdG8gdGhlIGFkZHJl c3Mgc3BlY2lmaWVkIGJ5DQo+ID4gKyAgcE5ldy4NCj4gPiArDQo+ID4gKyAgVGhpcyByb3V0aW5l IGNhbGxzIDo6QXg4ODE3OU1hY0FkZHJlc3NTZXQgdG8gdXBkYXRlIHRoZSBNQUMgYWRkcmVzcw0K PiA+ICsgIGluIHRoZSBuZXR3b3JrIGFkYXB0ZXIuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbSBbaW5d IHBTaW1wbGVOZXR3b3JrICAgIFByb3RvY29sIGluc3RhbmNlIHBvaW50ZXINCj4gPiArICBAcGFy YW0gW2luXSBiUmVzZXQgICAgICAgICAgICBGbGFnIHVzZWQgdG8gcmVzZXQgdGhlIHN0YXRpb24g YWRkcmVzcyB0byB0aGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXR3 b3JrIGludGVyZmFjZSdzIHBlcm1hbmVudCBhZGRyZXNzLg0KPiA+ICsgIEBwYXJhbSBbaW5dIHBO ZXcgICAgICAgICAgICAgIE5ldyBzdGF0aW9uIGFkZHJlc3MgdG8gYmUgdXNlZCBmb3IgdGhlDQo+ IG5ldHdvcmsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2Uu DQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoaXMgb3BlcmF0 aW9uIHdhcyBzdWNjZXNzZnVsLg0KPiA+ICsgIEByZXR2YWwgRUZJX05PVF9TVEFSVEVEICAgICAg IFRoZSBuZXR3b3JrIGludGVyZmFjZSB3YXMgbm90IHN0YXJ0ZWQuDQo+ID4gKyAgQHJldHZhbCBF RklfSU5WQUxJRF9QQVJBTUVURVIgcFNpbXBsZU5ldHdvcmsgcGFyYW1ldGVyIHdhcw0KPiBOVUxM IG9yIGRpZCBub3QgcG9pbnQgdG8gYSB2YWxpZA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEVGSV9TSU1QTEVfTkVUV09SS19QUk9UT0NPTCBzdHJ1Y3R1cmUuDQo+ID4gKyAg QHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIGNvbW1hbmQgY291bGQgbm90IGJlIHNl bnQgdG8gdGhlDQo+IG5ldHdvcmsgaW50ZXJmYWNlLg0KPiA+ICsgIEByZXR2YWwgRUZJX1VOU1VQ UE9SVEVEICAgICAgIFRoZSBpbmNyZWFzZWQgYnVmZmVyIHNpemUgZmVhdHVyZSBpcyBub3QNCj4g c3VwcG9ydGVkLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArRUZJQVBJ DQo+ID4gK1NOX1N0YXRpb25BZGRyZXNzICgNCj4gPiArICBJTiBFRklfU0lNUExFX05FVFdPUktf UFJPVE9DT0wgKiBwU2ltcGxlTmV0d29yaywNCj4gPiArICBJTiBCT09MRUFOIGJSZXNldCwNCj4g PiArICBJTiBFRklfTUFDX0FERFJFU1MgKiBwTmV3DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAg TklDX0RFVklDRSAqIHBOaWNEZXZpY2U7DQo+ID4gKyAgRUZJX1NJTVBMRV9ORVRXT1JLX01PREUg KiBwTW9kZTsNCj4gPiArICBFRklfU1RBVFVTIFN0YXR1czsNCj4gPiArDQo+ID4gKyAgRUZJX1RQ TCBUcGxQcmV2aW91czsNCj4gPiArDQo+ID4gKw0KPiA+ICsgIFRwbFByZXZpb3VzID0gZ0JTLT5S YWlzZVRQTChUUExfQ0FMTEJBQ0spOw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gVmVyaWZ5IHRoZSBw YXJhbWV0ZXJzDQo+ID4gKyAgLy8NCj4gPiArICBpZiAoKCBOVUxMICE9IHBTaW1wbGVOZXR3b3Jr ICkgJiYNCj4gPiArICAgICAgKCBOVUxMICE9IHBTaW1wbGVOZXR3b3JrLT5Nb2RlICkgJiYNCj4g PiArICAgICAgKCggIWJSZXNldCApIHx8ICggYlJlc2V0ICYmICggTlVMTCAhPSBwTmV3ICkpKSkg ew0KPiA+ICsgICAgLy8NCj4gPiArICAgIC8vIFZlcmlmeSB0aGF0IHRoZSBhZGFwdGVyIGlzIGFs cmVhZHkgc3RhcnRlZA0KPiA+ICsgICAgLy8NCj4gPiArICAgIHBOaWNEZXZpY2UgPSBERVZfRlJP TV9TSU1QTEVfTkVUV09SSyAoIHBTaW1wbGVOZXR3b3JrICk7DQo+ID4gKyAgICBwTW9kZSA9IHBT aW1wbGVOZXR3b3JrLT5Nb2RlOw0KPiA+ICsgICAgaWYgKCBFZmlTaW1wbGVOZXR3b3JrSW5pdGlh bGl6ZWQgPT0gcE1vZGUtPlN0YXRlICkgew0KPiA+ICsgICAgICAvLw0KPiA+ICsgICAgICAvLyBE ZXRlcm1pbmUgdGhlIGFkYXB0ZXIgTUFDIGFkZHJlc3MNCj4gPiArICAgICAgLy8NCj4gPiArICAg ICAgaWYgKCBiUmVzZXQgKSB7DQo+ID4gKyAgICAgICAgLy8NCj4gPiArICAgICAgICAvLyBVc2Ug dGhlIHBlcm1hbmVudCBhZGRyZXNzDQo+ID4gKyAgICAgICAgLy8NCj4gPiArICAgICAgICBDb3B5 TWVtICggJnBNb2RlLT5DdXJyZW50QWRkcmVzcywNCj4gPiArICAgICAgICAgICAgICAgICAgJnBN b2RlLT5QZXJtYW5lbnRBZGRyZXNzLA0KPiA+ICsgICAgICAgICAgICAgICAgICBzaXplb2YgKCBw TW9kZS0+Q3VycmVudEFkZHJlc3MgKSk7DQo+ID4gKyAgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAg ICAgLy8NCj4gPiArICAgICAgICAvLyBVc2UgdGhlIHNwZWNpZmllZCBhZGRyZXNzDQo+ID4gKyAg ICAgICAgLy8NCj4gPiArICAgICAgICBDb3B5TWVtICggJnBNb2RlLT5DdXJyZW50QWRkcmVzcywN Cj4gPiArICAgICAgICAgICAgICAgICAgcE5ldywNCj4gPiArICAgICAgICAgICAgICAgICAgc2l6 ZW9mICggcE1vZGUtPkN1cnJlbnRBZGRyZXNzICkpOw0KPiA+ICsgICAgICB9DQo+ID4gKw0KPiA+ ICsgICAgICAvLw0KPiA+ICsgICAgICAvLyBVcGRhdGUgdGhlIGFkZHJlc3Mgb24gdGhlIGFkYXB0 ZXINCj4gPiArICAgICAgLy8NCj4gPiArICAgICAgU3RhdHVzID0gQXg4ODE3OU1hY0FkZHJlc3NT ZXQgKCBwTmljRGV2aWNlLCAmcE1vZGUtDQo+ID5DdXJyZW50QWRkcmVzcy5BZGRyWzBdKTsNCj4g PiArICAgIH0gIGVsc2Ugew0KPiA+ICsgICAgICBpZiAoRWZpU2ltcGxlTmV0d29ya1N0YXJ0ZWQg PT0gcE1vZGUtPlN0YXRlKSB7DQo+ID4gKyAgICAgICAgICBTdGF0dXMgPSBFRklfREVWSUNFX0VS Uk9SOyA7DQo+ID4gKyAgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICBTdGF0dXMgPSBFRklf Tk9UX1NUQVJURUQgOw0KPiA+ICsgICAgICB9DQo+ID4gKyAgICB9DQo+ID4gKyAgfSBlbHNlIHsN Cj4gPiArICAgIFN0YXR1cyA9IEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiArICB9DQo+ID4g Kw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gUmV0dXJuIHRoZSBvcGVyYXRpb24gc3RhdHVzDQo+ID4g KyAgLy8NCj4gPiArICBnQlMtPlJlc3RvcmVUUEwoVHBsUHJldmlvdXMpOw0KPiA+ICsgIHJldHVy biBTdGF0dXM7DQo+ID4gK30NCj4gPiArDQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGlzIGZ1 bmN0aW9uIHJlc2V0cyBvciBjb2xsZWN0cyB0aGUgc3RhdGlzdGljcyBvbiBhIG5ldHdvcmsgaW50 ZXJmYWNlLg0KPiA+ICsgIElmIHRoZSBzaXplIG9mIHRoZSBzdGF0aXN0aWNzIHRhYmxlIHNwZWNp ZmllZCBieSBTdGF0aXN0aWNzU2l6ZSBpcyBub3QNCj4gPiArICBiaWcgZW5vdWdoIGZvciBhbGwg b2YgdGhlIHN0YXRpc3RpY3MgdGhhdCBhcmUgY29sbGVjdGVkIGJ5IHRoZSBuZXR3b3JrDQo+ID4g KyAgaW50ZXJmYWNlLCB0aGVuIGEgcGFydGlhbCBidWZmZXIgb2Ygc3RhdGlzdGljcyBpcyByZXR1 cm5lZCBpbg0KPiA+ICsgIFN0YXRpc3RpY3NUYWJsZS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtIFtp bl0gcFNpbXBsZU5ldHdvcmsgICAgUHJvdG9jb2wgaW5zdGFuY2UgcG9pbnRlcg0KPiA+ICsgIEBw YXJhbSBbaW5dIGJSZXNldCAgICAgICAgICAgIFNldCB0byBUUlVFIHRvIHJlc2V0IHRoZSBzdGF0 aXN0aWNzIGZvciB0aGUNCj4gbmV0d29yayBpbnRlcmZhY2UuDQo+ID4gKyAgQHBhcmFtIFtpbiwg b3V0XSBwU3RhdGlzdGljc1NpemUgIE9uIGlucHV0IHRoZSBzaXplLCBpbiBieXRlcywgb2YNCj4g U3RhdGlzdGljc1RhYmxlLiAgT24gb3V0cHV0DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGhlIHNpemUsIGluIGJ5dGVzLCBvZiB0aGUgcmVzdWx0aW5nIHRhYmxlIG9mIHN0 YXRpc3RpY3MuDQo+ID4gKyAgQHBhcmFtIFtvdXRdIHBTdGF0aXN0aWNzVGFibGUgQSBwb2ludGVy IHRvIHRoZQ0KPiBFRklfTkVUV09SS19TVEFUSVNUSUNTIHN0cnVjdHVyZSB0aGF0DQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uYWlucyB0aGUgc3RhdGlzdGljcy4NCj4g PiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhpcyBvcGVyYXRpb24g d2FzIHN1Y2Nlc3NmdWwuDQo+ID4gKyAgQHJldHZhbCBFRklfTk9UX1NUQVJURUQgICAgICAgVGhl IG5ldHdvcmsgaW50ZXJmYWNlIHdhcyBub3Qgc3RhcnRlZC4NCj4gPiArICBAcmV0dmFsIEVGSV9C VUZGRVJfVE9PX1NNQUxMICBUaGUgcFN0YXRpc3RpY3NUYWJsZSBpcyBOVUxMIG9yIHRoZQ0KPiBi dWZmZXIgaXMgdG9vIHNtYWxsLg0KPiA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVS IHBTaW1wbGVOZXR3b3JrIHBhcmFtZXRlciB3YXMNCj4gTlVMTCBvciBkaWQgbm90IHBvaW50IHRv IGEgdmFsaWQNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFRklfU0lNUExF X05FVFdPUktfUFJPVE9DT0wgc3RydWN0dXJlLg0KPiA+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9F UlJPUiAgICAgIFRoZSBjb21tYW5kIGNvdWxkIG5vdCBiZSBzZW50IHRvIHRoZQ0KPiBuZXR3b3Jr IGludGVyZmFjZS4NCj4gPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBUaGUgaW5j cmVhc2VkIGJ1ZmZlciBzaXplIGZlYXR1cmUgaXMgbm90DQo+IHN1cHBvcnRlZC4NCj4gPiArDQo+ ID4gKyAgdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ICsgIFVJTlQ2NCBSeFRvdGFsRnJhbWVzOw0KPiA+ ICsgIFVJTlQ2NCBSeEdvb2RGcmFtZXM7DQo+ID4gKyAgVUlOVDY0IFJ4VW5kZXJzaXplRnJhbWVz Ow0KPiA+ICsgIFVJTlQ2NCBSeE92ZXJzaXplRnJhbWVzOw0KPiA+ICsgIFVJTlQ2NCBSeERyb3Bw ZWRGcmFtZXM7DQo+ID4gKyAgVUlOVDY0IFJ4VW5pY2FzdEZyYW1lczsNCj4gPiArICBVSU5UNjQg UnhCcm9hZGNhc3RGcmFtZXM7DQo+ID4gKyAgVUlOVDY0IFJ4TXVsdGljYXN0RnJhbWVzOw0KPiA+ ICsgIFVJTlQ2NCBSeENyY0Vycm9yRnJhbWVzOw0KPiA+ICsgIFVJTlQ2NCBSeFRvdGFsQnl0ZXM7 DQo+ID4gKyAgVUlOVDY0IFR4VG90YWxGcmFtZXM7DQo+ID4gKyAgVUlOVDY0IFR4R29vZEZyYW1l czsNCj4gPiArICBVSU5UNjQgVHhVbmRlcnNpemVGcmFtZXM7DQo+ID4gKyAgVUlOVDY0IFR4T3Zl cnNpemVGcmFtZXM7DQo+ID4gKyAgVUlOVDY0IFR4RHJvcHBlZEZyYW1lczsNCj4gPiArICBVSU5U NjQgVHhVbmljYXN0RnJhbWVzOw0KPiA+ICsgIFVJTlQ2NCBUeEJyb2FkY2FzdEZyYW1lczsNCj4g PiArICBVSU5UNjQgVHhNdWx0aWNhc3RGcmFtZXM7DQo+ID4gKyAgVUlOVDY0IFR4Q3JjRXJyb3JG cmFtZXM7DQo+ID4gKyAgVUlOVDY0IFR4VG90YWxCeXRlczsNCj4gPiArICBVSU5UNjQgQ29sbGlz aW9uczsNCj4gPiArICBVSU5UNjQgVW5zdXBwb3J0ZWRQcm90b2NvbDsNCj4gPiArICB9IEVGSV9O RVRXT1JLX1NUQVRJU1RJQ1M7DQo+DQo+IGRyb3AgdGhpcw0KPg0KPiA+ICsqKi8NCj4gPiArRUZJ X1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArU05fU3RhdGlzdGljcyAoDQo+ID4gKyAgSU4gRUZJ X1NJTVBMRV9ORVRXT1JLX1BST1RPQ09MICogcFNpbXBsZU5ldHdvcmssDQo+ID4gKyAgSU4gQk9P TEVBTiBiUmVzZXQsDQo+ID4gKyAgSU4gT1VUIFVJTlROICogcFN0YXRpc3RpY3NTaXplLA0KPiA+ ICsgIE9VVCBFRklfTkVUV09SS19TVEFUSVNUSUNTICogcFN0YXRpc3RpY3NUYWJsZQ0KPiA+ICsg ICkNCj4gPiArew0KPiA+ICsgIEVGSV9TVEFUVVMgU3RhdHVzOw0KPiA+ICsgIEVGSV9UUEwgVHBs UHJldmlvdXM7DQo+ID4gKyAgRUZJX1NJTVBMRV9ORVRXT1JLX01PREUgKiBwTW9kZTsNCj4gPiAr DQo+ID4gKw0KPiA+ICsNCj4gPiArICBUcGxQcmV2aW91cyA9IGdCUy0+UmFpc2VUUEwoVFBMX0NB TExCQUNLKTsNCj4gPiArDQo+ID4gKyAgcE1vZGUgPSBwU2ltcGxlTmV0d29yay0+TW9kZTsNCj4g PiArDQo+ID4gKyAgaWYgKCBFZmlTaW1wbGVOZXR3b3JrSW5pdGlhbGl6ZWQgPT0gcE1vZGUtPlN0 YXRlICkgew0KPiA+ICsgICAgaWYgKE5VTEwgIT0gcFN0YXRpc3RpY3NTaXplICYmIDAgPT0gKnBT dGF0aXN0aWNzU2l6ZSkgew0KPiA+ICsgICAgICBTdGF0dXMgPSBFRklfQlVGRkVSX1RPT19TTUFM TDsNCj4gPiArICAgICAgZ290byBFWElUOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIGlm KGJSZXNldCkgew0KPiA+ICsgICAgICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCj4gPiArICAgIH0g ZWxzZSB7DQo+ID4gKyAgICAgIFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KPiA+ICsgICAgfQ0KPiA+ ICsgIH0gZWxzZSB7DQo+ID4gKyAgICBpZiAoRWZpU2ltcGxlTmV0d29ya1N0YXJ0ZWQgPT0gcE1v ZGUtPlN0YXRlKSB7DQo+ID4gKyAgICAgIFN0YXR1cyA9IEVGSV9ERVZJQ0VfRVJST1I7IDsNCj4g PiArICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgIFN0YXR1cyA9IEVGSV9OT1RfU1RBUlRFRCA7DQo+ ID4gKyAgICB9DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBFRklfVU5TVVBQT1JU RUQ7DQo+ID4gK0VYSVQ6DQo+ID4gKyAgZ0JTLT5SZXN0b3JlVFBMKFRwbFByZXZpb3VzKTsNCj4g PiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsNCj4gPiArLyoqDQo+ID4g KyAgVGhpcyBmdW5jdGlvbiBzdG9wcyBhIG5ldHdvcmsgaW50ZXJmYWNlLiAgVGhpcyBjYWxsIGlz IG9ubHkgdmFsaWQNCj4gPiArICBpZiB0aGUgbmV0d29yayBpbnRlcmZhY2UgaXMgaW4gdGhlIHN0 YXJ0ZWQgc3RhdGUuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbSBbaW5dIHBTaW1wbGVOZXR3b3JrICAg IFByb3RvY29sIGluc3RhbmNlIHBvaW50ZXINCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgICAgICAgVGhpcyBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwuDQo+ID4gKyAgQHJl dHZhbCBFRklfTk9UX1NUQVJURUQgICAgICAgVGhlIG5ldHdvcmsgaW50ZXJmYWNlIHdhcyBub3Qg c3RhcnRlZC4NCj4gPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBwU2ltcGxlTmV0 d29yayBwYXJhbWV0ZXIgd2FzDQo+IE5VTEwgb3IgZGlkIG5vdCBwb2ludCB0byBhIHZhbGlkDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX1NJTVBMRV9ORVRXT1JLX1BS T1RPQ09MIHN0cnVjdHVyZS4NCj4gPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBU aGUgY29tbWFuZCBjb3VsZCBub3QgYmUgc2VudCB0byB0aGUNCj4gbmV0d29yayBpbnRlcmZhY2Uu DQo+ID4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgVGhlIGluY3JlYXNlZCBidWZm ZXIgc2l6ZSBmZWF0dXJlIGlzIG5vdA0KPiBzdXBwb3J0ZWQuDQo+ID4gKw0KPiA+ICsqKi8NCj4g PiArRUZJX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArU05fU3RvcCAoDQo+ID4gKyAgSU4gRUZJ X1NJTVBMRV9ORVRXT1JLX1BST1RPQ09MICogcFNpbXBsZU5ldHdvcmsNCj4gPiArICApDQo+ID4g K3sNCj4gPiArICBFRklfU0lNUExFX05FVFdPUktfTU9ERSAqIHBNb2RlOw0KPiA+ICsgIEVGSV9T VEFUVVMgU3RhdHVzOw0KPiA+ICsgIEVGSV9UUEwgVHBsUHJldmlvdXM7DQo+ID4gKw0KPiA+ICsg IFRwbFByZXZpb3VzID0gZ0JTLT5SYWlzZVRQTChUUExfQ0FMTEJBQ0spOw0KPiA+ICsNCj4gPiAr ICAvLw0KPiA+ICsgIC8vIFZlcmlmeSB0aGUgcGFyYW1ldGVycw0KPiA+ICsgIC8vDQo+ID4gKyAg aWYgKCggTlVMTCAhPSBwU2ltcGxlTmV0d29yayApICYmICggTlVMTCAhPSBwU2ltcGxlTmV0d29y ay0+TW9kZSApKSB7DQo+ID4gKyAgICAvLw0KPiA+ICsgICAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBp bnRlcmZhY2UgaXMgc3RhcnRlZA0KPiA+ICsgICAgLy8NCj4gPiArICAgIHBNb2RlID0gcFNpbXBs ZU5ldHdvcmstPk1vZGU7DQo+ID4gKyAgICBpZiAoIEVmaVNpbXBsZU5ldHdvcmtTdGFydGVkID09 IHBNb2RlLT5TdGF0ZSApIHsNCj4gPiArICAgICAgICBwTW9kZS0+U3RhdGUgPSBFZmlTaW1wbGVO ZXR3b3JrU3RvcHBlZDsNCj4gPiArICAgICAgICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCj4gPiAr ICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgU3RhdHVzID0gRUZJX05PVF9TVEFSVEVEOw0KPiA+ ICsgICAgfQ0KPiA+ICsgIH0gZWxzZSB7DQo+ID4gKyAgICBTdGF0dXMgPSBFRklfSU5WQUxJRF9Q QVJBTUVURVI7DQo+ID4gKyAgfQ0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gUmV0dXJuIHRoZSBvcGVy YXRpb24gc3RhdHVzDQo+ID4gKyAgLy8NCj4gPiArICBnQlMtPlJlc3RvcmVUUEwoVHBsUHJldmlv dXMpOw0KPiA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ ICsgIFRoaXMgZnVuY3Rpb24gcmVsZWFzZXMgdGhlIG1lbW9yeSBidWZmZXJzIGFzc2lnbmVkIGlu IHRoZSBJbml0aWFsaXplKCkgY2FsbC4NCj4gPiArICBQZW5kaW5nIHRyYW5zbWl0cyBhbmQgcmVj ZWl2ZXMgYXJlIGxvc3QsIGFuZCBpbnRlcnJ1cHRzIGFyZSBjbGVhcmVkIGFuZA0KPiBkaXNhYmxl ZC4NCj4gPiArICBBZnRlciB0aGlzIGNhbGwsIG9ubHkgSW5pdGlhbGl6ZSgpIGFuZCBTdG9wKCkg Y2FsbHMgbWF5IGJlIHVzZWQuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbSBbaW5dIHBTaW1wbGVOZXR3 b3JrICAgIFByb3RvY29sIGluc3RhbmNlIHBvaW50ZXINCj4gPiArDQo+ID4gKyAgQHJldHZhbCBF RklfU1VDQ0VTUyAgICAgICAgICAgVGhpcyBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwuDQo+ID4g KyAgQHJldHZhbCBFRklfTk9UX1NUQVJURUQgICAgICAgVGhlIG5ldHdvcmsgaW50ZXJmYWNlIHdh cyBub3Qgc3RhcnRlZC4NCj4gPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBwU2lt cGxlTmV0d29yayBwYXJhbWV0ZXIgd2FzDQo+IE5VTEwgb3IgZGlkIG5vdCBwb2ludCB0byBhIHZh bGlkDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX1NJTVBMRV9ORVRX T1JLX1BST1RPQ09MIHN0cnVjdHVyZS4NCj4gPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1Ig ICAgICBUaGUgY29tbWFuZCBjb3VsZCBub3QgYmUgc2VudCB0byB0aGUNCj4gbmV0d29yayBpbnRl cmZhY2UuDQo+ID4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgVGhlIGluY3JlYXNl ZCBidWZmZXIgc2l6ZSBmZWF0dXJlIGlzIG5vdA0KPiBzdXBwb3J0ZWQuDQo+ID4gKw0KPiA+ICsq Ki8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArU05fU2h1dGRvd24gKA0KPiA+ ICsgIElOIEVGSV9TSU1QTEVfTkVUV09SS19QUk9UT0NPTCAqIHBTaW1wbGVOZXR3b3JrDQo+ID4g KyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1NJTVBMRV9ORVRXT1JLX01PREUgKiBwTW9kZTsNCj4g PiArICBFRklfU1RBVFVTIFN0YXR1czsNCj4gPiArICBOSUNfREVWSUNFICogcE5pY0RldmljZTsN Cj4gPiArICBFRklfVFBMIFRwbFByZXZpb3VzOw0KPiA+ICsNCj4gPiArDQo+ID4gKyAgVHBsUHJl dmlvdXMgPSBnQlMtPlJhaXNlVFBMKFRQTF9DQUxMQkFDSyk7DQo+ID4gKw0KPiA+ICsgIC8vDQo+ ID4gKyAgLy8gVmVyaWZ5IHRoZSBwYXJhbWV0ZXJzDQo+ID4gKyAgLy8NCj4gPiArICBpZiAoKCBO VUxMICE9IHBTaW1wbGVOZXR3b3JrICkgJiYgKCBOVUxMICE9IHBTaW1wbGVOZXR3b3JrLT5Nb2Rl ICkpIHsNCj4gPiArICAgIC8vDQo+ID4gKyAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIGludGVyZmFj ZSBpcyBhbHJlYWR5IHN0YXJ0ZWQNCj4gPiArICAgIC8vDQo+ID4gKyAgICBwTW9kZSA9IHBTaW1w bGVOZXR3b3JrLT5Nb2RlOw0KPiA+ICsgICAgaWYgKCBFZmlTaW1wbGVOZXR3b3JrSW5pdGlhbGl6 ZWQgPT0gcE1vZGUtPlN0YXRlICkgew0KPiA+ICsgICAgICAvLw0KPiA+ICsgICAgICAvLyBTdG9w IHRoZSBhZGFwdGVyDQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIHBOaWNEZXZpY2UgPSBERVZf RlJPTV9TSU1QTEVfTkVUV09SSyAoIHBTaW1wbGVOZXR3b3JrICk7DQo+ID4gKw0KPiA+ICsgICAg ICBTdGF0dXMgPSBBeDg4MTc5TWFjQWRkcmVzc0dldCAoIHBOaWNEZXZpY2UsICZwTW9kZS0NCj4g PlBlcm1hbmVudEFkZHJlc3MuQWRkclswXSk7DQo+ID4gKyAgICAgIGlmICggIUVGSV9FUlJPUiAo IFN0YXR1cyApKSB7DQo+ID4gKyAgICAgICAgLy8NCj4gPiArICAgICAgICAvLyBVcGRhdGUgdGhl IG5ldHdvcmsgc3RhdGUNCj4gPiArICAgICAgICAvLw0KPiA+ICsgICAgICAgIHBNb2RlLT5TdGF0 ZSA9IEVmaVNpbXBsZU5ldHdvcmtTdGFydGVkOw0KPiA+ICsgICAgICB9IGVsc2UgaWYgKCBFRklf REVWSUNFX0VSUk9SID09IFN0YXR1cyApIHsNCj4gPiArICAgICAgICBwTW9kZS0+U3RhdGUgPSBF ZmlTaW1wbGVOZXR3b3JrU3RvcHBlZDsNCj4gPiArICAgICAgfQ0KPiA+ICsgICAgfSBlbHNlIHsN Cj4gPiArICAgICAgU3RhdHVzID0gRUZJX05PVF9TVEFSVEVEOw0KPiA+ICsgICAgfQ0KPiA+ICsg IH0gZWxzZSB7DQo+ID4gKyAgICBTdGF0dXMgPSBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4g KyAgfQ0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gUmV0dXJuIHRoZSBvcGVyYXRpb24gc3RhdHVzDQo+ ID4gKyAgLy8NCj4gPiArICBnQlMtPlJlc3RvcmVUUEwoVHBsUHJldmlvdXMgKTsNCj4gPiArICBy ZXR1cm4gU3RhdHVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgU2Vu ZCBhIHBhY2tldCBvdmVyIHRoZSBuZXR3b3JrLg0KPiA+ICsNCj4gPiArICBUaGlzIGZ1bmN0aW9u IHBsYWNlcyB0aGUgcGFja2V0IHNwZWNpZmllZCBieSBIZWFkZXIgYW5kIEJ1ZmZlciBvbg0KPiA+ ICsgIHRoZSB0cmFuc21pdCBxdWV1ZS4gIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgYSBub24tYmxv Y2tpbmcgdHJhbnNtaXQNCj4gPiArICBvcGVyYXRpb24uICBXaGVuIHRoZSB0cmFuc21pdCBpcyBj b21wbGV0ZSwgdGhlIGJ1ZmZlciBpcyByZXR1cm5lZA0KPiA+ICsgIHZpYSB0aGUgR2V0U3RhdHVz KCkgY2FsbC4NCj4gPiArDQo+ID4gKyAgVGhpcyByb3V0aW5lIGNhbGxzIDo6QXg4ODE3OVJ4IHRv IGVtcHR5IHRoZSBuZXR3b3JrIGFkYXB0ZXIgb2YNCj4gPiArICByZWNlaXZlIHBhY2tldHMuICBU aGUgcm91dGluZSB0aGVuIHBhc3NlcyB0aGUgdHJhbnNtaXQgcGFja2V0DQo+ID4gKyAgdG8gdGhl IG5ldHdvcmsgYWRhcHRlci4NCj4gPiArDQo+ID4gKyAgQHBhcmFtIFtpbl0gcFNpbXBsZU5ldHdv cmsgICAgUHJvdG9jb2wgaW5zdGFuY2UgcG9pbnRlcg0KPiA+ICsgIEBwYXJhbSBbaW5dIEhlYWRl clNpemUgICAgICAgIFRoZSBzaXplLCBpbiBieXRlcywgb2YgdGhlIG1lZGlhIGhlYWRlciB0byBi ZQ0KPiBmaWxsZWQgaW4gYnkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 aGUgVHJhbnNtaXQoKSBmdW5jdGlvbi4gIElmIEhlYWRlclNpemUgaXMgbm9uLXplcm8sIHRoZW4N Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCBtdXN0IGJlIGVxdWFsIHRv IFNpbXBsZU5ldHdvcmstPk1vZGUtDQo+ID5NZWRpYUhlYWRlclNpemUNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBhbmQgRGVzdEFkZHIgYW5kIFByb3RvY29sIHBhcmFtZXRl cnMgbXVzdCBub3QgYmUNCj4gTlVMTC4NCj4gPiArICBAcGFyYW0gW2luXSBCdWZmZXJTaXplICAg ICAgICBUaGUgc2l6ZSwgaW4gYnl0ZXMsIG9mIHRoZSBlbnRpcmUgcGFja2V0IChtZWRpYQ0KPiBo ZWFkZXIgYW5kDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSkgdG8g YmUgdHJhbnNtaXR0ZWQgdGhyb3VnaCB0aGUgbmV0d29yayBpbnRlcmZhY2UuDQo+ID4gKyAgQHBh cmFtIFtpbl0gcEJ1ZmZlciAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBwYWNrZXQgKG1lZGlh IGhlYWRlcg0KPiBmb2xsb3dlZCBieSBkYXRhKSB0bw0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRvIGJlIHRyYW5zbWl0dGVkLiAgVGhpcyBwYXJhbWV0ZXIgY2FuIG5vdCBi ZSBOVUxMLiAgSWYNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIZWFkZXJT aXplIGlzIHplcm8sIHRoZW4gdGhlIG1lZGlhIGhlYWRlciBpcyBCdWZmZXIgbXVzdA0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHkgYmUgZmlsbGVkIGluIGJ5IHRo ZSBjYWxsZXIuICBJZiBIZWFkZXJTaXplIGlzDQo+IG5vbnplcm8sDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdGhlbiB0aGUgbWVkaWEgaGVhZGVyIHdpbGwgYmUgZmlsbGVk IGluIGJ5IHRoZSBUcmFuc21pdCgpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZnVuY3Rpb24uDQo+ID4gKyAgQHBhcmFtIFtpbl0gcFNyY0FkZHIgICAgICAgICAgVGhlIHNv dXJjZSBIVyBNQUMgYWRkcmVzcy4gIElmIEhlYWRlclNpemUNCj4gaXMgemVybywgdGhlbg0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgcGFyYW1ldGVyIGlzIGlnbm9y ZWQuICBJZiBIZWFkZXJTaXplIGlzIG5vbnplcm8gYW5kDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgU3JjQWRkciBpcyBOVUxMLCB0aGVuIFNpbXBsZU5ldHdvcmstPk1vZGUt DQo+ID5DdXJyZW50QWRkcmVzcw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGlzIHVzZWQgZm9yIHRoZSBzb3VyY2UgSFcgTUFDIGFkZHJlc3MuDQo+ID4gKyAgQHBhcmFtIFtp bl0gcERlc3RBZGRyICAgICAgICAgVGhlIGRlc3RpbmF0aW9uIEhXIE1BQyBhZGRyZXNzLiAgSWYN Cj4gSGVhZGVyU2l6ZSBpcyB6ZXJvLCB0aGVuDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZC4NCj4gPiArICBAcGFyYW0gW2luXSBw UHJvdG9jb2wgICAgICAgICBUaGUgdHlwZSBvZiBoZWFkZXIgdG8gYnVpbGQuICBJZiBIZWFkZXJT aXplIGlzDQo+IHplcm8sIHRoZW4NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0aGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgICAgICAgICBUaGlzIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bC4NCj4gPiArICBA cmV0dmFsIEVGSV9OT1RfU1RBUlRFRCAgICAgICBUaGUgbmV0d29yayBpbnRlcmZhY2Ugd2FzIG5v dCBzdGFydGVkLg0KPiA+ICsgIEByZXR2YWwgRUZJX05PVF9SRUFEWSAgICAgICAgIFRoZSBuZXR3 b3JrIGludGVyZmFjZSBpcyB0b28gYnVzeSB0bw0KPiBhY2NlcHQgdGhpcyB0cmFuc21pdCByZXF1 ZXN0Lg0KPiA+ICsgIEByZXR2YWwgRUZJX0JVRkZFUl9UT09fU01BTEwgIFRoZSBCdWZmZXJTaXpl IHBhcmFtZXRlciBpcyB0b28NCj4gc21hbGwuDQo+ID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9Q QVJBTUVURVIgcFNpbXBsZU5ldHdvcmsgcGFyYW1ldGVyIHdhcw0KPiBOVUxMIG9yIGRpZCBub3Qg cG9pbnQgdG8gYSB2YWxpZA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVG SV9TSU1QTEVfTkVUV09SS19QUk9UT0NPTCBzdHJ1Y3R1cmUuDQo+ID4gKyAgQHJldHZhbCBFRklf REVWSUNFX0VSUk9SICAgICAgVGhlIGNvbW1hbmQgY291bGQgbm90IGJlIHNlbnQgdG8gdGhlDQo+ IG5ldHdvcmsgaW50ZXJmYWNlLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4g PiArRUZJQVBJDQo+ID4gK1NOX1RyYW5zbWl0ICgNCj4gPiArICBJTiBFRklfU0lNUExFX05FVFdP UktfUFJPVE9DT0wgKiBwU2ltcGxlTmV0d29yaywNCj4gPiArICBJTiBVSU5UTiBIZWFkZXJTaXpl LA0KPiA+ICsgIElOIFVJTlROIEJ1ZmZlclNpemUsDQo+ID4gKyAgSU4gVk9JRCAqIHBCdWZmZXIs DQo+ID4gKyAgSU4gRUZJX01BQ19BRERSRVNTICogcFNyY0FkZHIsDQo+ID4gKyAgSU4gRUZJX01B Q19BRERSRVNTICogcERlc3RBZGRyLA0KPiA+ICsgIElOIFVJTlQxNiAqIHBQcm90b2NvbA0KPiA+ ICsgICkNCj4gPiArew0KPiA+ICsgIEVUSEVSTkVUX0hFQURFUiAqIHBIZWFkZXI7DQo+ID4gKyAg RUZJX1NJTVBMRV9ORVRXT1JLX01PREUgKiBwTW9kZTsNCj4gPiArICBOSUNfREVWSUNFICogcE5p Y0RldmljZTsNCj4gPiArICBFRklfVVNCX0lPX1BST1RPQ09MICogcFVzYklvOw0KPiA+ICsgIEVG SV9TVEFUVVMgU3RhdHVzOw0KPiA+ICsgIFVJTlROIFRyYW5zZmVyTGVuZ3RoOw0KPiA+ICsgIFVJ TlQzMiBUcmFuc2ZlclN0YXR1czsNCj4gPiArICBVSU5UMTYgVHlwZSA9IDA7DQo+ID4gKyAgRUZJ X1RQTCBUcGxQcmV2aW91czsNCj4gPiArDQo+ID4gKyAgVHBsUHJldmlvdXMgPSBnQlMtPlJhaXNl VFBMKFRQTF9DQUxMQkFDSyk7DQo+ID4gKyAgLy8NCj4gPiArICAvLyBWZXJpZnkgdGhlIHBhcmFt ZXRlcnMNCj4gPiArICAvLw0KPiA+ICsgIGlmICgoIE5VTEwgIT0gcFNpbXBsZU5ldHdvcmsgKSAm JiAoIE5VTEwgIT0gcFNpbXBsZU5ldHdvcmstPk1vZGUgKSkgew0KPiA+ICsgICAgLy8NCj4gPiAr ICAgIC8vIFRoZSBpbnRlcmZhY2UgbXVzdCBiZSBydW5uaW5nDQo+ID4gKyAgICAvLw0KPiA+ICsg ICAgcE1vZGUgPSBwU2ltcGxlTmV0d29yay0+TW9kZTsNCj4gPiArICAgIGlmICggRWZpU2ltcGxl TmV0d29ya0luaXRpYWxpemVkID09IHBNb2RlLT5TdGF0ZSApIHsNCj4gPiArICAgICAgLy8NCj4g PiArICAgICAgLy8gVXBkYXRlIHRoZSBsaW5rIHN0YXR1cw0KPiA+ICsgICAgICAvLw0KPiA+ICsg ICAgICBwTmljRGV2aWNlID0gREVWX0ZST01fU0lNUExFX05FVFdPUksgKCBwU2ltcGxlTmV0d29y ayApOw0KPiA+ICsNCj4gPiArICAgICAgaWYgKCBwTmljRGV2aWNlLT5iTGlua1VwICYmIHBOaWNE ZXZpY2UtPmJDb21wbGV0ZSkgew0KPiA+ICsgICAgICAgIGlmICgwICE9IEhlYWRlclNpemUgJiYg cE1vZGUtPk1lZGlhSGVhZGVyU2l6ZSAhPSBIZWFkZXJTaXplKSAgew0KPiA+ICsgICAgICAgICAg ICBTdGF0dXMgPSBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gKyAgICAgICAgICAgIGdvdG8g RVhJVDsNCj4gPiArICAgICAgICB9DQo+ID4gKyAgICAgICAgaWYgKEJ1ZmZlclNpemUgPCAgcE1v ZGUtPk1lZGlhSGVhZGVyU2l6ZSkgew0KPiA+ICsgICAgICAgICAgICBTdGF0dXMgPSBFRklfSU5W QUxJRF9QQVJBTUVURVI7DQo+ID4gKyAgICAgICAgICAgIGdvdG8gRVhJVDsNCj4gPiArICAgICAg ICB9DQo+ID4gKyAgICAgICAgaWYgKE5VTEwgPT0gcEJ1ZmZlcikgew0KPiA+ICsgICAgICAgICAg ICBTdGF0dXMgPSBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gKyAgICAgICAgICAgIGdvdG8g RVhJVDsNCj4gPiArICAgICAgICB9DQo+ID4gKyAgICAgICAgaWYgKDAgIT0gSGVhZGVyU2l6ZSAm JiBOVUxMID09IHBEZXN0QWRkcikgew0KPiA+ICsgICAgICAgICAgICBTdGF0dXMgPSBFRklfSU5W QUxJRF9QQVJBTUVURVI7DQo+ID4gKyAgICAgICAgICAgIGdvdG8gRVhJVDsNCj4gPiArICAgICAg ICB9DQo+ID4gKyAgICAgICAgaWYgKDAgIT0gSGVhZGVyU2l6ZSAmJiBOVUxMID09IHBQcm90b2Nv bCkgew0KPiA+ICsgICAgICAgICAgICBTdGF0dXMgPSBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ ID4gKyAgICAgICAgICAgIGdvdG8gRVhJVDsNCj4gPiArICAgICAgICB9DQo+ID4gKyAgICAgICAg Ly8NCj4gPiArICAgICAgICAvLyAgQ29weSB0aGUgcGFja2V0IGludG8gdGhlIFVTQiBidWZmZXIN Cj4gPiArICAgICAgICAvLw0KPiA+ICsgICAgICAgIC8vIHBCdWZmZXIgc3RhcnRpbmcgd2l0aCAx NCBieXRlcyAwDQo+ID4gKyAgICAgICAgQ29weU1lbSAoICZwTmljRGV2aWNlLT5wVHhUZXN0LT5E YXRhWzBdLCBwQnVmZmVyLCBCdWZmZXJTaXplKTsNCj4gPiArICAgICAgICBwTmljRGV2aWNlLT5w VHhUZXN0LT5UeEhkcjEgPSAoVUlOVDMyKSBCdWZmZXJTaXplOw0KPiA+ICsgICAgICAgIHBOaWNE ZXZpY2UtPnBUeFRlc3QtPlR4SGRyMiA9IDA7DQo+ID4gKyAgICAgICAgLy8NCj4gPiArICAgICAg ICAvLyAgVHJhbnNtaXQgdGhlIHBhY2tldA0KPiA+ICsgICAgICAgIC8vDQo+ID4gKyAgICAgICAg cEhlYWRlciA9IChFVEhFUk5FVF9IRUFERVIgKikgJnBOaWNEZXZpY2UtPnBUeFRlc3QtPkRhdGFb MF07DQo+ID4gKyAgICAgICAgaWYgKCAwICE9IEhlYWRlclNpemUgKSB7DQo+ID4gKyAgICAgICAg ICBpZiAoIE5VTEwgIT0gcERlc3RBZGRyICkgew0KPiA+ICsgICAgICAgICAgICBDb3B5TWVtICgg JnBIZWFkZXItPmRlc3RfYWRkciwgcERlc3RBZGRyLA0KPiBQWEVfSFdBRERSX0xFTl9FVEhFUiAp Ow0KPiA+ICsgICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAgaWYgKCBOVUxMICE9IHBTcmNBZGRy ICkgew0KPiA+ICsgICAgICAgICAgICBDb3B5TWVtICggJnBIZWFkZXItPnNyY19hZGRyLCBwU3Jj QWRkciwNCj4gUFhFX0hXQUREUl9MRU5fRVRIRVIgKTsNCj4gPiArICAgICAgICAgIH0gZWxzZSB7 DQo+ID4gKyAgICAgICAgICAgIENvcHlNZW0gKCAmcEhlYWRlci0+c3JjX2FkZHIsICZwTW9kZS0N Cj4gPkN1cnJlbnRBZGRyZXNzLkFkZHJbMF0sIFBYRV9IV0FERFJfTEVOX0VUSEVSICk7DQo+ID4g KyAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICBpZiAoIE5VTEwgIT0gcFByb3RvY29sICkgew0K PiA+ICsgICAgICAgICAgICBUeXBlID0gKnBQcm90b2NvbDsNCj4gPiArICAgICAgICAgIH0gZWxz ZSB7DQo+ID4gKyAgICAgICAgICAgICAgVHlwZSA9IChVSU5UMTYpIEJ1ZmZlclNpemU7DQo+ID4g KyAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICBUeXBlID0gKFVJTlQxNikoKCBUeXBlID4+IDgg KSB8ICggVHlwZSA8PCA4ICkpOw0KPiA+ICsgICAgICAgICAgcEhlYWRlci0+dHlwZSA9IFR5cGU7 DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICBpZiAoIHBOaWNEZXZpY2UtPnBU eFRlc3QtPlR4SGRyMSA8IE1JTl9FVEhFUk5FVF9QS1RfU0laRSApIHsNCj4gPiArICAgICAgICAg IHBOaWNEZXZpY2UtPnBUeFRlc3QtPlR4SGRyMSA9IE1JTl9FVEhFUk5FVF9QS1RfU0laRTsNCj4g PiArICAgICAgICAgIFplcm9NZW0gKCAmcE5pY0RldmljZS0+cFR4VGVzdC0+RGF0YVtCdWZmZXJT aXplXSwNCj4gPiArICAgICAgICAgICAgICAgICAgICBNSU5fRVRIRVJORVRfUEtUX1NJWkUgLSBC dWZmZXJTaXplICk7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICBUcmFuc2Zl ckxlbmd0aCA9IHNpemVvZiAoIHBOaWNEZXZpY2UtPnBUeFRlc3QtPlR4SGRyMSApDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgKyBzaXplb2YgKCBwTmljRGV2aWNlLT5wVHhUZXN0LT5UeEhk cjIgKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICsgcE5pY0RldmljZS0+cFR4VGVzdC0+ VHhIZHIxOw0KPiA+ICsgICAgICAgIC8vDQo+ID4gKyAgICAgICAgLy8gIFdvcmsgYXJvdW5kIFVT QiBidXMgZHJpdmVyIGJ1ZyB3aGVyZSBhIHRpbWVvdXQgc2V0IGJ5IHJlY2VpdmUNCj4gPiArICAg ICAgICAvLyAgc3VjY2VlZHMgYnV0IHRoZSB0aW1lb3V0IGV4cGlyZXMgaW1tZWRpYXRlbHkgYWZ0 ZXIsIGNhdXNpbmcgdGhlDQo+ID4gKyAgICAgICAgLy8gIHRyYW5zbWl0IG9wZXJhdGlvbiB0byB0 aW1lb3V0Lg0KPiA+ICsgICAgICAgIC8vDQo+ID4gKyAgICAgICAgcFVzYklvID0gcE5pY0Rldmlj ZS0+cFVzYklvOw0KPiA+ICsgICAgICAgIFN0YXR1cyA9IHBVc2JJby0+VXNiQnVsa1RyYW5zZmVy ICggcFVzYklvLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQlVMS19PVVRfRU5EUE9JTlQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmcE5pY0RldmljZS0+cFR4VGVzdC0+VHhIZHIxLA0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlRyYW5zZmVyTGVuZ3RoLA0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZmZmZmZmZSwN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZUcmFuc2Zl clN0YXR1cyApOw0KPiA+ICsNCj4gPiArICAgICAgICBpZiAoIUVGSV9FUlJPUihTdGF0dXMpICYm ICFFRklfRVJST1IoU3RhdHVzKSkgew0KPiA+ICsgICAgICAgICAgICAgIHBOaWNEZXZpY2UtPnBU eEJ1ZmZlciA9IHBCdWZmZXI7DQo+ID4gKyAgICAgICAgICAgICAgU3RhdHVzID0gRUZJX1NVQ0NF U1M7DQo+ID4gKyAgICAgICAgfSBlbHNlIGlmIChFRklfVElNRU9VVCA9PSBTdGF0dXMgJiYgRUZJ X1VTQl9FUlJfVElNRU9VVCA9PQ0KPiBUcmFuc2ZlclN0YXR1cykgew0KPiA+ICsgICAgICAgICAg ICAgIFN0YXR1cyA9IEVGSV9OT1RfUkVBRFk7DQo+ID4gKyAgICAgICAgfSBlbHNlIHsNCj4gPiAr ICAgICAgICAgICAgICBTdGF0dXMgPSBFRklfREVWSUNFX0VSUk9SOw0KPiA+ICsgICAgICAgIH0N Cj4gPiArICAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAvLw0KPiA+ICsgICAgICAgIC8vIE5v IHBhY2tldHMgYXZhaWxhYmxlLg0KPiA+ICsgICAgICAgIC8vDQo+ID4gKyAgICAgICAgU3RhdHVz ID0gRUZJX05PVF9SRUFEWTsNCj4gPiArICAgICAgfQ0KPiA+ICsgICAgfSBlbHNlIHsNCj4gPiAr ICAgICAgaWYgKEVmaVNpbXBsZU5ldHdvcmtTdGFydGVkID09IHBNb2RlLT5TdGF0ZSkgew0KPiA+ ICsgICAgICAgICAgU3RhdHVzID0gRUZJX0RFVklDRV9FUlJPUjsgOw0KPiA+ICsgICAgICB9IGVs c2Ugew0KPiA+ICsgICAgICAgICAgU3RhdHVzID0gRUZJX05PVF9TVEFSVEVEIDsNCj4gPiArICAg ICAgfQ0KPiA+ICsgICAgfQ0KPiA+ICsgIH0gZWxzZSB7DQo+ID4gKyAgICBTdGF0dXMgPSBFRklf SU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gKyAgfQ0KPiA+ICtFWElUOg0KPiA+ICsgIGdCUy0+UmVz dG9yZVRQTCAoVHBsUHJldmlvdXMpOw0KPiA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gK30NCj4g Pg0KPg0KPg0KPiANCg0KSU1QT1JUQU5UIE5PVElDRTogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZW1h aWwgYW5kIGFueSBhdHRhY2htZW50cyBhcmUgY29uZmlkZW50aWFsIGFuZCBtYXkgYWxzbyBiZSBw cml2aWxlZ2VkLiBJZiB5b3UgYXJlIG5vdCB0aGUgaW50ZW5kZWQgcmVjaXBpZW50LCBwbGVhc2Ug bm90aWZ5IHRoZSBzZW5kZXIgaW1tZWRpYXRlbHkgYW5kIGRvIG5vdCBkaXNjbG9zZSB0aGUgY29u dGVudHMgdG8gYW55IG90aGVyIHBlcnNvbiwgdXNlIGl0IGZvciBhbnkgcHVycG9zZSwgb3Igc3Rv cmUgb3IgY29weSB0aGUgaW5mb3JtYXRpb24gaW4gYW55IG1lZGl1bS4gVGhhbmsgeW91Lg0K