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.45]) by mx.groups.io with SMTP id smtpd.web11.14112.1669184780275081313 for ; Tue, 22 Nov 2022 22:26:21 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@armh.onmicrosoft.com header.s=selector2-armh-onmicrosoft-com header.b=YAkWJAPz; spf=pass (domain: arm.com, ip: 40.107.20.45, mailfrom: jianyong.wu@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=ADPSwf9qnCdQURKRQVB22nuCfyfnIA7M1kjCfo0N7kY=; b=YAkWJAPzR8bhXHneOhXqishaRoln4CY0CMVOR4nlbE/awhaPBV9lks0WXdu4RGH+HwZ2MDcKRrLgTJDtcufIj0DrELMs4M0Kmj67q3gLniDqur7xdkqPw+qsWt0wsbBAHILgNeKEWhDXW0CIj+Lt7au0uB3t1NpUc6B6mYKIjlo= Received: from FR0P281CA0129.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:97::15) by PA4PR08MB5886.eurprd08.prod.outlook.com (2603:10a6:102:e2::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5857.17; Wed, 23 Nov 2022 06:26:16 +0000 Received: from VI1EUR03FT061.eop-EUR03.prod.protection.outlook.com (2603:10a6:d10:97:cafe::f6) by FR0P281CA0129.outlook.office365.com (2603:10a6:d10:97::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5857.17 via Frontend Transport; Wed, 23 Nov 2022 06:26:16 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass 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; pr=C Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by VI1EUR03FT061.mail.protection.outlook.com (100.127.144.125) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5834.8 via Frontend Transport; Wed, 23 Nov 2022 06:26:16 +0000 Received: ("Tessian outbound 2ff13c8f2c05:v130"); Wed, 23 Nov 2022 06:26:15 +0000 X-CR-MTA-TID: 64aa7808 Received: from b9fa3a243753.3 by 64aa7808-outbound-1.mta.getcheckrecipient.com id D4343E0B-0ED9-44E6-B46B-08B5675AB0BA.1; Wed, 23 Nov 2022 06:26:05 +0000 Received: from EUR01-VE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id b9fa3a243753.3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Wed, 23 Nov 2022 06:26:04 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dC8ARx6JRuUbMPFsr+Dpeg6W3DKk9USz40EShTI96ikZMMTgx/4+2mDebgXa0tWlrVZR7fWCvNOS8v5WygrT7tJDbCUIVBs/fwZghn5WukkYalj1tmq4xl8IlSuz2YKdvvgUi1QMq3kBpYRl5giLbeJ/g/Cwv3sdTgOF1QnQHM3CMHzva4f7l+JWrwv7krjCvP9+kHs+zYAoco0/zYmf7D2BRFTWy0ztQj+Een77hxPexf46IKZ+AycPYelVWxgD+v5KLGHaZKMm0vYz3VSThKeHQnUKNkle5dQ0l5efKT7bM97hPJB/LK/oVqRLLFs5yz+KbgoD2k57EME0yLmL2Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ADPSwf9qnCdQURKRQVB22nuCfyfnIA7M1kjCfo0N7kY=; b=nyqRIdpl0yivRF714H7iN1rQ+NS0xjubFUBUgZLq9qjxDYvLcItDz0bLbgSZP9Epd3uaHG+X5sprHsQ1aRAujNH564eSiAp+D6NhsXben1uMasVXx+M9vavmdIZiJhcjebL9Ha/8OwpAVw8SPtob+MKBEVzgUEOtykKAYqWVOwf61IzJr1Yqdk6oVnpUEJNBrpT/2JDd3r1MjBlClmnK07GS5Gygiu8NKMTH8y1pg+jAGV836Cik3Y1OWb2+bx+xk4CwclxiBbuYfzUN7bnWpV93YkoVLpG1Ge8r+kLmVK1etbLzzy6uoW2JkTk0Gqemygl0YlmVC6BT0ZeGHPgj2g== 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=ADPSwf9qnCdQURKRQVB22nuCfyfnIA7M1kjCfo0N7kY=; b=YAkWJAPzR8bhXHneOhXqishaRoln4CY0CMVOR4nlbE/awhaPBV9lks0WXdu4RGH+HwZ2MDcKRrLgTJDtcufIj0DrELMs4M0Kmj67q3gLniDqur7xdkqPw+qsWt0wsbBAHILgNeKEWhDXW0CIj+Lt7au0uB3t1NpUc6B6mYKIjlo= Received: from DB9PR08MB7511.eurprd08.prod.outlook.com (2603:10a6:10:302::21) by AS8PR08MB7321.eurprd08.prod.outlook.com (2603:10a6:20b:440::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5857.17; Wed, 23 Nov 2022 06:26:02 +0000 Received: from DB9PR08MB7511.eurprd08.prod.outlook.com ([fe80::52b0:ad37:1be3:5b67]) by DB9PR08MB7511.eurprd08.prod.outlook.com ([fe80::52b0:ad37:1be3:5b67%7]) with mapi id 15.20.5857.017; Wed, 23 Nov 2022 06:26:02 +0000 From: "Jianyong Wu" To: Sami Mujawar , "devel@edk2.groups.io" CC: "ardb+tianocore@kernel.org" , Justin He , nd Subject: Re: [PATCH 1/3] CloudHv:arm: add kernel load fs driver Thread-Topic: [PATCH 1/3] CloudHv:arm: add kernel load fs driver Thread-Index: AQHYyXaNgmAYW/gUTECHHSxln+ZMva5LgEaAgADqOjA= Date: Wed, 23 Nov 2022 06:26:02 +0000 Message-ID: References: <20220916024620.114084-1-jianyong.wu@arm.com> <20220916024620.114084-2-jianyong.wu@arm.com> <3bda482a-8fb7-0e05-1413-bd87b9112bc8@arm.com> In-Reply-To: <3bda482a-8fb7-0e05-1413-bd87b9112bc8@arm.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ts-tracking-id: 3E7B414F2B28D24D904DB0BC59DCFC66.0 x-checkrecipientchecked: true Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; x-ms-traffictypediagnostic: DB9PR08MB7511:EE_|AS8PR08MB7321:EE_|VI1EUR03FT061:EE_|PA4PR08MB5886:EE_ X-MS-Office365-Filtering-Correlation-Id: b8f05bcf-1088-40c3-854c-08dacd1ba058 x-checkrecipientrouted: true nodisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: v47wCcIT1vjHOZNMJSARfZymlY2cO+i93dV2LN50AbGGOXtus0012l43FDvUdz4heqhkzYbmPPJg75yV4IxKyTAaztmwPsOIY56b1kKRnZx/HmlmoSkPS9kmlESvcDLUN9k+eEgBbTyP1OKwyAdTz3bZua6gYnmVpfoUnsHpR8tdIZpEqW/T5wZx2vVFJ4INo9KbYCoIsTMnEz+fWv7vVEcp5mFxYoVEDP86wD8VuGaPr29631bUes24hBJlodynGuq0cCRWTJr7nwbavo8ag+5vEa4txelgtdguANoqIs4i0Y8aW2hKteF0TCqsqbW22JA0pXikgyhZQ6KIBUl9ufl+NRd/jMZAx7pKB3vjQvDEpQgtclzCRj0nILKCVpPOjEG8Lu4Kqr//T1Y/rjkU7tiMZpvLRZ7PUY0WYHQGx08EkS3lkYrwclZ7SaX3DS+MbjJlGjazJvk6tdbxIoG5gjAtxyOzCJl7HT6I3uGzKgfQsxmrOc052G7PnEYWbdZm96/4ijpaVbeVqa64I0egwpkM9VMS2R+KP2/jDggP8psUNl+xokbqSHr4HSbY19L5H6f/S6brN/fA/QxinXyoFa8Iz33zq+GcmxQ8/I5LMf0MTojCE6fjg4wFUePfTew1IwDN9wx75myBpOt3QDVaEi4+U+5/ZPpoKfwu/cmtTSCwqD4MvnW+ZTNCzmTIg4us5TBCFMFTNnJgiNiN/t12QM5QjHCGr5y8uoVJ66YBfT1TA8xBfxCHm8ubALtvNoZndjOfoVJEhTJ3oejSgD39YslBvUjcwY1qoqQpMurTrIQ= X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB9PR08MB7511.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(366004)(39860400002)(376002)(396003)(346002)(136003)(451199015)(478600001)(52536014)(966005)(19627235002)(66556008)(66446008)(64756008)(33656002)(4326008)(55016003)(66476007)(8676002)(66946007)(41300700001)(76116006)(5660300002)(316002)(110136005)(54906003)(83380400001)(38100700002)(38070700005)(7696005)(71200400001)(9686003)(53546011)(186003)(122000001)(86362001)(6506007)(2906002)(26005)(8936002)(30864003)(559001)(579004)(44824005);DIR:OUT;SFP:1101; MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB7321 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Return-Path: Jianyong.Wu@arm.com X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: VI1EUR03FT061.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 10867f6b-edbc-4747-76dc-08dacd1b97d6 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: eoE96A1dXOYkhoT2Nw2c5dLcw6Zi18JccZlbo/O1Zlnfqj5Tw3TcKaRJHdQwj9B8u8ombLrQ/pDCyylAjO/UeLdw1rCGm9H+EkFJEGV841Q4Z1wyVRGHFESjFnF/9N+HsXV6HLXOdCL3tw8eJnthOwy4JGg+eL5oWhMhzp2jvW4VrlN4h72dVPuHmqtM2KJRRtMQT7TQfj7zRRivllZmlhf1OuIigHl6QAZtO7r9iCbvhSqfe5T8Ie2ZZ/dhQvhg5+Yun2DlIXirBkTKO8jV1ti9IqpS6xJxL8yi+GykVZzS0LuOAwGTYLxKUByugm3lv9ug6Hm3vAen1JclpEWA4fBBKmOYidRPrBoQ9ugrdAbJG8Ivw9CpLiMdUrM/LdfVke8Hm84T18Kfd/ETZT+7THMO/RY0bwFXKaGvZfUBYcR2jR0kuoRCUjLE6yf8x6d024PinpujRsqRPly6o9pn2pmH7VOWwiGwd7xhw9rWz+Fjzb4CJSxnFL5l+Nc1hPfs5SPd/lUPnicQ+LVFwggh+hHGgP29LXcHssPMVwY+Gi/2TZ1tAtO21C0citbLd5DBa7F/m/5e8eUIEoGciRycOmorIvd7egxJIY6rLjrPItt+8ct7yymmqz4Zx5EzaoF4mKPtToZNzTCy1P1msN0SpjKgiOvV0MooTeU95ppe8PDQQ7NJWNw2vO3TfIO8lS8kV1Y68XGgkDkFxKrgoZlMo+U4oh+iaNcKLHu4tprh3SdSG3sdT7lmWF4uncTEi4dWLHCiKWAWtN4+Eh52MYfO9MzpIq4OmWE4aJoKG2CtR1I= 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;SFS:(13230022)(4636009)(396003)(39860400002)(136003)(346002)(376002)(451199015)(46966006)(40470700004)(36840700001)(36860700001)(4326008)(83380400001)(356005)(2906002)(8936002)(6506007)(40460700003)(5660300002)(41300700001)(30864003)(53546011)(52536014)(70586007)(9686003)(478600001)(82310400005)(55016003)(7696005)(26005)(40480700001)(47076005)(70206006)(54906003)(8676002)(316002)(82740400003)(336012)(19627235002)(186003)(110136005)(966005)(81166007)(86362001)(33656002)(579004)(44824005);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Nov 2022 06:26:16.2907 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b8f05bcf-1088-40c3-854c-08dacd1ba058 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-AuthSource: VI1EUR03FT061.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR08MB5886 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgU2FtaSwNCg0KWW91IGNhbiB0cnkgaXQgYXMgZm9sbG93aW5nIHN0ZXBzOg0KDQoxLiBidWls ZCBlZGsyIGZvciBDTE9VREh2IGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2pvbmd3dS9lZGsyL3Ry ZWUvZGlyZWN0X2tlcm5lbA0KMi4gYnVpbGQgY2xvdWQgaHlwZXJ2aXNvciB3aXRoIG15IHBhdGNo IHNldCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9qb25nd3UvY2xvdWQtaHlwZXJ2aXNvci90cmVl L2RpcmVjdF9rZXJuZWwNCglhLiBpbnN0YWxsIHJ1c3QgZW52aXJvbm1lbnQsIHNlZSBodHRwczov L3d3dy5ydXN0LWxhbmcub3JnL3Rvb2xzL2luc3RhbGwNCgliLiBjbG9uZSBjb2RlIGFuZCB1c2Ug ImNhcmdvIGJ1aWxkIiBpbiB0aGUgdG9wIGRpciBvZiB0aGUgY29kZSB0cmVlDQoJYyBmaW5kIHRo ZSBiaW5hcnkgdXNpbmcgImZpbmQgLi8gLW5hbWUgY2xvdWQtaHlwZXJ2aXNvciINCjMuIHByZXBh cmUga2VybmVsIGltYWdlLCBJIHRoaW5rIGRlZmF1bHQgY29uZmlnIGNhbiBkby4NCjQgcHJlcGFy ZSBhIGRpc2sgaW1hZ2UuIEkgb2Z0ZW4gZG93bmxvYWQgdWJ1bnR1IGltYWdlIGZyb20gaHR0cHM6 Ly9jbG91ZC1pbWFnZXMudWJ1bnR1LmNvbS9mb2NhbC9jdXJyZW50LyAsIHRoZW4gY29udmVydCBp dCBpbnRvIHJhdyB1c2luZzoNCiAgICBxZW11LWltZyBjb252ZXJ0IC1wIC1mIHFjb3cyIC1PIHJh dyAqLmltZyAqLnJhdw0KNS4gdHJ5IHRvIHJ1biBhIGNsb3VkIGh5cGVydmlzb3IgVk0gYnkgdGhl IGZvbGxvd2luZyBjb21tYW5kIGxpbmU6DQoNCiAgICAgICAuL2Nsb3VkLWh5cGVydmlzb3IgXA0K ICAgICAgICAtLWNwdXMgYm9vdD0xIFwNCiAgICAgICAgLS1tZW1vcnkgc2l6ZT0yRyBcDQogICAg ICAgIC0tc2VyaWFsIHR0eSBcDQogICAgICAgIC0tY29uc29sZSBvZmYgXA0KICAgICAgICAtLWRp c2sgXA0KICAgICAgICBwYXRoPWZvY2FsLXNlcnZlci1jbG91ZGltZy1hcm02NC5yYXcgXA0KICAg ICAgICAtLWNtZGxpbmUgInJvb3Q9L2Rldi92ZGExIGNvbnNvbGU9dHR5QU1BMCBlYXJseWNvbiBy dyIgXA0KICAgICAgICAtLWZpcm13YXJlIENMT1VESFZfRUZJLmZkIFwNCiAgICAgICAgLS1rZXJu ZWwgSW1hZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIGNvbW1lbnQgb3V0IHRoaXMg bGluZSB0byB0cnkgZ3J1YiBrZXJuZWwgbG9hZA0KDQpZb3UgY2FuIHNlZSB0aGF0IHRoZSBrZXJu ZWwgbG9hZCByb2xlIGlzIHRha2VuIGJ5IGVkazIgYW5kIGlzIGZhc3RlciBjb21wYXJlZCB0byBn cnViIGxvYWQuIFdoYXQncyBtb3JlIHdlIGNhbiBzcGVjaWZ5IGtlcm5lbCBpbWFnZSB3aXRob3V0 IGxvYWRpbmcga2VybmVsIGZyb20gZGlzay4NCkFueSBwcm9ibGVtLCBjb250YWN0IG1lLg0KDQpU aGFua3MNCkppYW55b25nDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTog U2FtaSBNdWphd2FyIDxTYW1pLk11amF3YXJAYXJtLmNvbT4NCj4gU2VudDogVHVlc2RheSwgTm92 ZW1iZXIgMjIsIDIwMjIgMTE6NDcgUE0NCj4gVG86IEppYW55b25nIFd1IDxKaWFueW9uZy5XdUBh cm0uY29tPjsgZGV2ZWxAZWRrMi5ncm91cHMuaW8NCj4gQ2M6IGFyZGIrdGlhbm9jb3JlQGtlcm5l bC5vcmc7IEp1c3RpbiBIZSA8SnVzdGluLkhlQGFybS5jb20+OyBuZA0KPiA8bmRAYXJtLmNvbT4N Cj4gU3ViamVjdDogUmU6IFtQQVRDSCAxLzNdIENsb3VkSHY6YXJtOiBhZGQga2VybmVsIGxvYWQg ZnMgZHJpdmVyDQo+IA0KPiBIaSBKaWFueW91bmcsDQo+IA0KPiBJIGFtIHRyeWluZyB0byB1bmRl cnN0YW5kIHlvdXIgcGF0Y2ggc2VyaWVzLiBJcyBpdCBwb3NzaWJsZSB0byBzZW5kIG1lIHRoZQ0K PiBzdGVwcyB0byB0ZXN0IHlvdXIgcGF0Y2hlcyB1c2luZyBDbG91ZEh2LCBwbGVhc2U/DQo+IA0K PiBBbHNvLCBwbGVhc2Ugc2VlIG15IHJlc3BvbnNlIGZvciBwYXRjaCAyLzMgYXMgSSBoYXZlIHNv bWUgcXVlcmllcy4NCj4gDQo+IFJlZ2FyZHMsDQo+IA0KPiBTYW1pIE11amF3YXINCj4gDQo+IA0K PiBPbiAxNi8wOS8yMDIyIDAzOjQ2IGFtLCBKaWFueW9uZyBXdSB3cm90ZToNCj4gPiBUaGlzIGlz IHVzZWQgZm9yIHN1cHBvcnRpbmcgZGlyZWN0IGtlcm5lbCBib290IGluIENsb3VkSHYuIENsb3Vk SHYNCj4gPiB3aWxsIHN0b3JlIGtlcm5lbCBpbWFnZSBpbiBzeXN0ZW0gcmFtIGFuZCBwYXNzIGtl cm5lbCBpbmZvIHRocm91Z2ggRFQuDQo+ID4gSXQncyBmaXJtd2FyZSdzIHJlc3BvbnNpYmlsaXR5 IHRvIGZldGNoIHRoZSBrZXJuZWwgZGF0YSBhbmQgY3JlYXRlIGENCj4gPiBmaWxlIGRldmljZSB0 byBmZWVkIGZvciBsb2FkSW1hZ2UNCj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6IEppYW55b25nIFd1 IDxqaWFueW9uZy53dUBhcm0uY29tPg0KPiA+IC0tLQ0KPiA+ICAgLi4uL0Nsb3VkSHZLZXJuZWxM b2FkZXJGc0R4ZS5jICAgICAgICAgICAgICAgIHwgOTY5ICsrKysrKysrKysrKysrKysrKw0KPiA+ ICAgLi4uL0Nsb3VkSHZLZXJuZWxMb2FkZXJGc0R4ZS5pbmYgICAgICAgICAgICAgIHwgIDU2ICsN Cj4gPiAgIDIgZmlsZXMgY2hhbmdlZCwgMTAyNSBpbnNlcnRpb25zKCspDQo+ID4gICBjcmVhdGUg bW9kZSAxMDA2NDQNCj4gQXJtVmlydFBrZy9DbG91ZEh2S2VybmVsTG9hZGVyRnNEeGUvQ2xvdWRI dktlcm5lbExvYWRlckZzRHhlLmMNCj4gPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NA0KPiA+IEFybVZp cnRQa2cvQ2xvdWRIdktlcm5lbExvYWRlckZzRHhlL0Nsb3VkSHZLZXJuZWxMb2FkZXJGc0R4ZS5p bmYNCj4gPg0KPiA+IGRpZmYgLS1naXQNCj4gPiBhL0FybVZpcnRQa2cvQ2xvdWRIdktlcm5lbExv YWRlckZzRHhlL0Nsb3VkSHZLZXJuZWxMb2FkZXJGc0R4ZS5jDQo+ID4gYi9Bcm1WaXJ0UGtnL0Ns b3VkSHZLZXJuZWxMb2FkZXJGc0R4ZS9DbG91ZEh2S2VybmVsTG9hZGVyRnNEeGUuYw0KPiA+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMC4uZTRjZmNmYWI3Mg0KPiA+ IC0tLSAvZGV2L251bGwNCj4gPiArKysNCj4gYi9Bcm1WaXJ0UGtnL0Nsb3VkSHZLZXJuZWxMb2Fk ZXJGc0R4ZS9DbG91ZEh2S2VybmVsTG9hZGVyRnNEeGUuYw0KPiA+IEBAIC0wLDAgKzEsOTY5IEBA DQo+ID4gKy8qKiBAZmlsZQ0KPiA+ICsgIERYRSBkcml2ZXIgdG8gZXhwb3NlIHRoZSAna2VybmVs JywgJ2luaXRyZCcgYW5kICdjbWRsaW5lJyBibG9icw0KPiA+ICsgIHByb3ZpZGVkIGJ5IENsb3Vk IEh5cGVydmlzb3IgYXMgZmlsZXMgaW4gYW4gYWJzdHJhY3QgZmlsZSBzeXN0ZW0NCj4gPiArDQo+ ID4gKyAgQ29weXJpZ2h0IChDKSAyMDIyLCBBcm0sIExpbWl0ZWQuDQo+ID4gKw0KPiA+ICsgIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50ICoqLw0KPiA+ICsNCj4g PiArI2luY2x1ZGUgPFBpUGVpLmg+DQo+ID4gKyNpbmNsdWRlIDxQaUR4ZS5oPg0KPiA+ICsNCj4g PiArI2luY2x1ZGUgPGxpYmZkdC5oPg0KPiA+ICsjaW5jbHVkZSA8R3VpZC9GaWxlSW5mby5oPg0K PiA+ICsjaW5jbHVkZSA8R3VpZC9GaWxlU3lzdGVtSW5mby5oPg0KPiA+ICsjaW5jbHVkZSA8R3Vp ZC9GaWxlU3lzdGVtVm9sdW1lTGFiZWxJbmZvLmg+DQo+ID4gKyNpbmNsdWRlIDxHdWlkL0xpbnV4 RWZpSW5pdHJkTWVkaWEuaD4gI2luY2x1ZGUNCj4gPiArPEd1aWQvUWVtdUtlcm5lbExvYWRlckZz TWVkaWEuaD4gI2luY2x1ZGUgPExpYnJhcnkvQmFzZUxpYi5oPg0KPiA+ICsjaW5jbHVkZSA8TGli cmFyeS9CYXNlTWVtb3J5TGliLmg+ICNpbmNsdWRlDQo+ID4gKzxMaWJyYXJ5L0Jsb2JWZXJpZmll ckxpYi5oPiAjaW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPiAjaW5jbHVkZQ0KPiA+ICs8TGli cmFyeS9EZXZpY2VQYXRoTGliLmg+ICNpbmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRpb25M aWIuaD4NCj4gPiArI2luY2x1ZGUgPExpYnJhcnkvUGNkTGliLmg+ICNpbmNsdWRlIDxMaWJyYXJ5 L1ByZVBpTGliLmg+ICNpbmNsdWRlDQo+ID4gKzxMaWJyYXJ5L1VlZmlCb290U2VydmljZXNUYWJs ZUxpYi5oPg0KPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpUnVudGltZVNlcnZpY2VzVGFibGVM aWIuaD4NCj4gPiArI2luY2x1ZGUgPFByb3RvY29sL0RldmljZVBhdGguaD4NCj4gPiArI2luY2x1 ZGUgPFByb3RvY29sL0xvYWRGaWxlMi5oPg0KPiA+ICsjaW5jbHVkZSA8UHJvdG9jb2wvU2ltcGxl RmlsZVN5c3RlbS5oPg0KPiA+ICsNCj4gPiArLy8NCj4gPiArLy8gU3RhdGljIGRhdGEgdGhhdCBo b3N0cyB0aGUgZGF0YSBibG9icyBhbmQgc2VydmVzIGZpbGUgcmVxdWVzdHMuDQo+ID4gKy8vDQo+ ID4gK3R5cGVkZWYgZW51bSB7DQo+ID4gKyAgS2VybmVsQmxvYlR5cGVLZXJuZWwsDQo+ID4gKyAg S2VybmVsQmxvYlR5cGVJbml0cmQsDQo+ID4gKyAgS2VybmVsQmxvYlR5cGVDb21tYW5kTGluZSwN Cj4gPiArICBLZXJuZWxCbG9iVHlwZU1heA0KPiA+ICt9IEtFUk5FTF9CTE9CX1RZUEU7DQo+ID4g Kw0KPiA+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ID4gKyAgQ09OU1QgQ0hBUjE2ICAgIE5hbWVbOF07 DQo+ID4gKyAgVUlOVDMyICAgICAgICAgIFNpemU7DQo+ID4gKyAgVUlOVDggICAgICAgICAgICpE YXRhOw0KPiA+ICt9IEtFUk5FTF9CTE9COw0KPiA+ICsNCj4gPiArU1RBVElDIEtFUk5FTF9CTE9C ICBtS2VybmVsQmxvYltLZXJuZWxCbG9iVHlwZU1heF0gPSB7DQo+ID4gKyAgew0KPiA+ICsgICAg TCJrZXJuZWwiLA0KPiA+ICsgIH0sew0KPiA+ICsgICAgTCJpbml0cmQiLA0KPiA+ICsgIH0sew0K PiA+ICsgICAgTCJjbWRsaW5lIiwNCj4gPiArICB9DQo+ID4gK307DQo+ID4gKw0KPiA+ICsvLw0K PiA+ICsvLyBEZXZpY2UgcGF0aCBmb3IgdGhlIGhhbmRsZSB0aGF0IGluY29ycG9yYXRlcyBvdXIg IkVGSSBzdHViIGZpbGVzeXN0ZW0iLg0KPiA+ICsvLw0KPiA+ICsjcHJhZ21hIHBhY2sgKDEpDQo+ ID4gK3R5cGVkZWYgc3RydWN0IHsNCj4gPiArICBWRU5ET1JfREVWSUNFX1BBVEggICAgICAgICAg VmVuTWVkaWFOb2RlOw0KPiA+ICsgIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICBFbmROb2Rl Ow0KPiA+ICt9IFNJTkdMRV9WRU5NRURJQV9OT0RFX0RFVlBBVEg7DQo+ID4gKyNwcmFnbWEgcGFj ayAoKQ0KPiA+ICsNCj4gPiArU1RBVElDIENPTlNUIFNJTkdMRV9WRU5NRURJQV9OT0RFX0RFVlBB VEgNCj4gbUZpbGVTeXN0ZW1EZXZpY2VQYXRoID0gew0KPiA+ICsgIHsNCj4gPiArICAgIHsNCj4g PiArICAgICAgTUVESUFfREVWSUNFX1BBVEgsIE1FRElBX1ZFTkRPUl9EUCwNCj4gPiArICAgICAg eyBzaXplb2YgKFZFTkRPUl9ERVZJQ0VfUEFUSCkgICAgICAgfQ0KPiA+ICsgICAgfSwNCj4gPiAr ICAgIFFFTVVfS0VSTkVMX0xPQURFUl9GU19NRURJQV9HVUlEDQo+ID4gKyAgfSwgIHsNCj4gPiAr ICAgIEVORF9ERVZJQ0VfUEFUSF9UWVBFLCBFTkRfRU5USVJFX0RFVklDRV9QQVRIX1NVQlRZUEUs DQo+ID4gKyAgICB7IHNpemVvZiAoRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MKSB9DQo+ID4gKyAg fQ0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArU1RBVElDIENPTlNUIFNJTkdMRV9WRU5NRURJQV9OT0RF X0RFVlBBVEggIG1Jbml0cmREZXZpY2VQYXRoID0NCj4gew0KPiA+ICsgIHsNCj4gPiArICAgIHsN Cj4gPiArICAgICAgTUVESUFfREVWSUNFX1BBVEgsIE1FRElBX1ZFTkRPUl9EUCwNCj4gPiArICAg ICAgeyBzaXplb2YgKFZFTkRPUl9ERVZJQ0VfUEFUSCkgICAgICAgfQ0KPiA+ICsgICAgfSwNCj4g PiArICAgIExJTlVYX0VGSV9JTklUUkRfTUVESUFfR1VJRA0KPiA+ICsgIH0sICB7DQo+ID4gKyAg ICBFTkRfREVWSUNFX1BBVEhfVFlQRSwgRU5EX0VOVElSRV9ERVZJQ0VfUEFUSF9TVUJUWVBFLA0K PiA+ICsgICAgeyBzaXplb2YgKEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCkgfQ0KPiA+ICsgIH0N Cj4gPiArfTsNCj4gPiArDQo+ID4gKy8vDQo+ID4gKy8vIFRoZSAiZmlsZSBpbiB0aGUgRUZJIHN0 dWIgZmlsZXN5c3RlbSIgYWJzdHJhY3Rpb24uDQo+ID4gKy8vDQo+ID4gK1NUQVRJQyBFRklfVElN RSAgbUluaXRUaW1lOw0KPiA+ICtTVEFUSUMgVUlOVDY0ICAgIG1Ub3RhbEJsb2JCeXRlczsNCj4g PiArDQo+ID4gKyNkZWZpbmUgU1RVQl9GSUxFX1NJRyAgU0lHTkFUVVJFXzY0ICgnUycsICdUJywg J1UnLCAnQicsICdGJywgJ0knLCAnTCcsICdFJykNCj4gPiArDQo+ID4gK3R5cGVkZWYgc3RydWN0 IHsNCj4gPiArICBVSU5UNjQgICAgICAgICAgICAgICBTaWduYXR1cmU7IC8vIENhcnJpZXMgU1RV Ql9GSUxFX1NJRy4NCj4gPiArDQo+ID4gKyAgS0VSTkVMX0JMT0JfVFlQRSAgICAgQmxvYlR5cGU7 IC8vIEluZGV4IGludG8gbUtlcm5lbEJsb2IuDQo+IEtlcm5lbEJsb2JUeXBlTWF4DQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlbm90ZXMgdGhlIHJvb3QgZGlyZWN0 b3J5IG9mIHRoZSBmaWxlc3lzdGVtLg0KPiA+ICsNCj4gPiArICBVSU5UNjQgICAgICAgICAgICAg ICBQb3NpdGlvbjsgLy8gQnl0ZSBwb3NpdGlvbiBmb3IgcmVndWxhciBmaWxlczsNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBkaXJlY3RvcnkgZW50cnkgdG8g cmV0dXJuIGZvciB0aGUgcm9vdA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvLyBkaXJlY3RvcnkuDQo+ID4gKw0KPiA+ICsgIEVGSV9GSUxFX1BST1RPQ09MICAgIEZpbGU7 ICAgLy8gU3RhbmRhcmQgcHJvdG9jb2wgaW50ZXJmYWNlLg0KPiA+ICt9IFNUVUJfRklMRTsNCj4g PiArDQo+ID4gKyNkZWZpbmUgU1RVQl9GSUxFX0ZST01fRklMRShGaWxlUG9pbnRlcikgXA0KPiA+ ICsgICAgICAgIENSIChGaWxlUG9pbnRlciwgU1RVQl9GSUxFLCBGaWxlLCBTVFVCX0ZJTEVfU0lH KQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgSGVscGVyIGZ1bmN0aW9uIHRoYXQgZm9ybWF0cyBh biBFRklfRklMRV9JTkZPIHN0cnVjdHVyZSBpbnRvIHRoZQ0KPiA+ICsgIHVzZXItYWxsb2NhdGVk IGJ1ZmZlciwgZm9yIGFueSB2YWxpZCBLRVJORUxfQkxPQl9UWVBFIHZhbHVlIChpbmNsdWRpbmcN Cj4gPiArICBLZXJuZWxCbG9iVHlwZU1heCwgd2hpY2ggc3RhbmRzIGZvciB0aGUgcm9vdCBkaXJl Y3RvcnkpLg0KPiA+ICsNCj4gPiArICBUaGUgaW50ZXJmYWNlIGZvbGxvd3MgdGhlIEVGSV9GSUxF X0dFVF9JTkZPIC0tIGFuZCBmb3IgZGlyZWN0b3JpZXMsIHRoZQ0KPiA+ICsgIEVGSV9GSUxFX1JF QUQgLS0gaW50ZXJmYWNlcy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgQmxvYlR5cGUg ICAgIFRoZSBLRVJORUxfQkxPQl9UWVBFIHZhbHVlIGlkZW50aWZ5aW5nIHRoZQ0KPiBmd19jZmcN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvYiBiYWNraW5nIHRoZSBTVFVC X0ZJTEUgdGhhdCBpbmZvcm1hdGlvbiBpcw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBiZWluZyByZXF1ZXN0ZWQgYWJvdXQuIElmIEJsb2JUeXBlIGVxdWFscw0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBLZXJuZWxCbG9iVHlwZU1heCwgdGhlbiBpbmZvcm1h dGlvbiB3aWxsIGJlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVk IGFib3V0IHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZmlsZXN5c3RlbS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luLG91dF0gQnVm ZmVyU2l6ZSAgT24gaW5wdXQsIHRoZSBzaXplIG9mIEJ1ZmZlci4gT24gb3V0cHV0LCB0aGUNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbW91bnQgb2YgZGF0YSByZXR1cm5lZCBp biBCdWZmZXIuIEluIGJvdGggY2FzZXMsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdGhlIHNpemUgaXMgbWVhc3VyZWQgaW4gYnl0ZXMuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtv dXRdICAgIEJ1ZmZlciAgICAgIEEgcG9pbnRlciB0byB0aGUgZGF0YSBidWZmZXIgdG8gcmV0dXJu LiBUaGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIncyB0eXBlIGlz IEVGSV9GSUxFX0lORk8uDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAg ICAgIFRoZSBpbmZvcm1hdGlvbiB3YXMgcmV0dXJuZWQuDQo+ID4gKyAgQHJldHZhbCBFRklfQlVG RkVSX1RPT19TTUFMTCAgQnVmZmVyU2l6ZSBpcyB0b28gc21hbGwgdG8gc3RvcmUgdGhlDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX0ZJTEVfSU5GTyBzdHJ1Y3R1cmUu IEJ1ZmZlclNpemUgaGFzIGJlZW4NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1cGRhdGVkIHdpdGggdGhlIHNpemUgbmVlZGVkIHRvIGNvbXBsZXRlIHRoZQ0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuDQo+ID4gKyoqLw0KPiA+ICtFRklf U1RBVFVTDQo+ID4gK0NvbnZlcnRLZXJuZWxCbG9iVHlwZVRvRmlsZUluZm8gKA0KPiA+ICsgIElO IEtFUk5FTF9CTE9CX1RZUEUgIEJsb2JUeXBlLA0KPiA+ICsgIElOIE9VVCBVSU5UTiAgICAgICAg ICpCdWZmZXJTaXplLA0KPiA+ICsgIE9VVCBWT0lEICAgICAgICAgICAgICpCdWZmZXINCj4gPiAr ICApDQo+ID4gK3sNCj4gPiArICBDT05TVCBDSEFSMTYgICpOYW1lOw0KPiA+ICsgIFVJTlQ2NCAg ICAgICAgRmlsZVNpemU7DQo+ID4gKyAgVUlOVDY0ICAgICAgICBBdHRyaWJ1dGU7DQo+ID4gKw0K PiA+ICsgIFVJTlROICAgICAgICAgIE5hbWVTaXplOw0KPiA+ICsgIFVJTlROICAgICAgICAgIEZp bGVJbmZvU2l6ZTsNCj4gPiArICBFRklfRklMRV9JTkZPICAqRmlsZUluZm87DQo+ID4gKyAgVUlO VE4gICAgICAgICAgT3JpZ2luYWxCdWZmZXJTaXplOw0KPiA+ICsNCj4gPiArICBpZiAoQmxvYlR5 cGUgPT0gS2VybmVsQmxvYlR5cGVNYXgpIHsNCj4gPiArICAgIC8vDQo+ID4gKyAgICAvLyBnZXR0 aW5nIGZpbGUgaW5mbyBhYm91dCB0aGUgcm9vdCBkaXJlY3RvcnkNCj4gPiArICAgIC8vDQo+ID4g KyAgICBOYW1lICAgICAgPSBMIlxcIjsNCj4gPiArICAgIEZpbGVTaXplICA9IEtlcm5lbEJsb2JU eXBlTWF4Ow0KPiA+ICsgICAgQXR0cmlidXRlID0gRUZJX0ZJTEVfUkVBRF9PTkxZIHwgRUZJX0ZJ TEVfRElSRUNUT1JZOw0KPiA+ICsgIH0gZWxzZSB7DQo+ID4gKyAgICBDT05TVCBLRVJORUxfQkxP QiAgKkJsb2I7DQo+ID4gKw0KPiA+ICsgICAgQmxvYiAgICAgID0gJm1LZXJuZWxCbG9iW0Jsb2JU eXBlXTsNCj4gPiArICAgIE5hbWUgICAgICA9IEJsb2ItPk5hbWU7DQo+ID4gKyAgICBGaWxlU2l6 ZSAgPSBCbG9iLT5TaXplOw0KPiA+ICsgICAgQXR0cmlidXRlID0gRUZJX0ZJTEVfUkVBRF9PTkxZ Ow0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgTmFtZVNpemUgICAgID0gKFN0ckxlbiAoTmFtZSkg KyAxKSAqIDI7DQo+ID4gKyAgRmlsZUluZm9TaXplID0gT0ZGU0VUX09GIChFRklfRklMRV9JTkZP LCBGaWxlTmFtZSkgKyBOYW1lU2l6ZTsNCj4gPiArICBBU1NFUlQgKEZpbGVJbmZvU2l6ZSA+PSBz aXplb2YgKkZpbGVJbmZvKTsNCj4gPiArDQo+ID4gKyAgT3JpZ2luYWxCdWZmZXJTaXplID0gKkJ1 ZmZlclNpemU7DQo+ID4gKyAgKkJ1ZmZlclNpemUgICAgICAgID0gRmlsZUluZm9TaXplOw0KPiA+ ICsgIGlmIChPcmlnaW5hbEJ1ZmZlclNpemUgPCAqQnVmZmVyU2l6ZSkgew0KPiA+ICsgICAgcmV0 dXJuIEVGSV9CVUZGRVJfVE9PX1NNQUxMOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgRmlsZUlu Zm8gICAgICAgICAgICAgICA9IChFRklfRklMRV9JTkZPICopQnVmZmVyOw0KPiA+ICsgIEZpbGVJ bmZvLT5TaXplICAgICAgICAgPSBGaWxlSW5mb1NpemU7DQo+ID4gKyAgRmlsZUluZm8tPkZpbGVT aXplICAgICA9IEZpbGVTaXplOw0KPiA+ICsgIEZpbGVJbmZvLT5QaHlzaWNhbFNpemUgPSBGaWxl U2l6ZTsNCj4gPiArICBGaWxlSW5mby0+QXR0cmlidXRlICAgID0gQXR0cmlidXRlOw0KPiA+ICsN Cj4gPiArICBDb3B5TWVtICgmRmlsZUluZm8tPkNyZWF0ZVRpbWUsICZtSW5pdFRpbWUsIHNpemVv ZiBtSW5pdFRpbWUpOw0KPiA+ICsgIENvcHlNZW0gKCZGaWxlSW5mby0+TGFzdEFjY2Vzc1RpbWUs ICZtSW5pdFRpbWUsIHNpemVvZiBtSW5pdFRpbWUpOw0KPiA+ICsgIENvcHlNZW0gKCZGaWxlSW5m by0+TW9kaWZpY2F0aW9uVGltZSwgJm1Jbml0VGltZSwgc2l6ZW9mIG1Jbml0VGltZSk7DQo+ID4g KyAgQ29weU1lbSAoRmlsZUluZm8tPkZpbGVOYW1lLCBOYW1lLCBOYW1lU2l6ZSk7DQo+ID4gKw0K PiA+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4g KyAgUmVhZHMgZGF0YSBmcm9tIGEgZmlsZSwgb3IgY29udGludWVzIHNjYW5uaW5nIGEgZGlyZWN0 b3J5Lg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICAgICBUaGlzICAgICAgICBBIHBvaW50ZXIg dG8gdGhlIEVGSV9GSUxFX1BST1RPQ09MIGluc3RhbmNlIHRoYXQNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpcyB0aGUgZmlsZSBoYW5kbGUgdG8gcmVhZCBkYXRhIGZyb20uDQo+ ID4gKw0KPiA+ICsgIEBwYXJhbVtpbixvdXRdIEJ1ZmZlclNpemUgIE9uIGlucHV0LCB0aGUgc2l6 ZSBvZiB0aGUgQnVmZmVyLiBPbiBvdXRwdXQsDQo+IHRoZQ0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGFtb3VudCBvZiBkYXRhIHJldHVybmVkIGluIEJ1ZmZlci4gSW4gYm90aCBj YXNlcywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc2l6ZSBpcyBtZWFz dXJlZCBpbiBieXRlcy4gSWYgdGhlIHJlYWQgZ29lcw0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBmaWxlLCB0aGUgcmVhZCBsZW5ndGggaXMN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVuY2F0ZWQgdG8gdGhlIGVuZCBv ZiB0aGUgZmlsZS4NCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYg VGhpcyBpcyBhIGRpcmVjdG9yeSwgdGhlIGZ1bmN0aW9uIHJlYWRzIHRoZQ0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBlbnRyeSBhdCB0aGUgY3VycmVudCBwb3Np dGlvbiBhbmQNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5zIHRoZSBl bnRyeSAoYXMgRUZJX0ZJTEVfSU5GTykgaW4gQnVmZmVyLiBJZg0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRoZXJlIGFyZSBubyBtb3JlIGRpcmVjdG9yeSBlbnRyaWVzLCB0aGUN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJTaXplIGlzIHNldCB0byB6 ZXJvIG9uIG91dHB1dC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW291dF0gICAgQnVmZmVyICAgICAg VGhlIGJ1ZmZlciBpbnRvIHdoaWNoIHRoZSBkYXRhIGlzIHJlYWQuDQo+ID4gKw0KPiA+ICsgIEBy ZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIERhdGEgd2FzIHJlYWQuDQo+ID4gKyAgQHJldHZh bCBFRklfTk9fTUVESUEgICAgICAgICAgVGhlIGRldmljZSBoYXMgbm8gbWVkaXVtLg0KPiA+ICsg IEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSBkZXZpY2UgcmVwb3J0ZWQgYW4gZXJy b3IuDQo+ID4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgQW4gYXR0ZW1wdCB3YXMg bWFkZSB0byByZWFkIGZyb20gYQ0KPiBkZWxldGVkDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZmlsZS4NCj4gPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBP biBlbnRyeSwgdGhlIGN1cnJlbnQgZmlsZSBwb3NpdGlvbiBpcw0KPiBiZXlvbmQNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZW5kIG9mIHRoZSBmaWxlLg0KPiA+ICsg IEByZXR2YWwgRUZJX1ZPTFVNRV9DT1JSVVBURUQgIFRoZSBmaWxlIHN5c3RlbSBzdHJ1Y3R1cmVz IGFyZQ0KPiBjb3JydXB0ZWQuDQo+ID4gKyAgQHJldHZhbCBFRklfQlVGRkVSX1RPT19TTUFMTCAg VGhlIEJ1ZmZlclNpemUgaXMgdG9vIHNtYWxsIHRvIHN0b3JlDQo+IHRoZQ0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgZGlyZWN0b3J5IGVudHJ5IGFzIGEgRUZJ X0ZJTEVfSU5GTw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVy ZS4gQnVmZmVyU2l6ZSBoYXMgYmVlbiB1cGRhdGVkIHdpdGggdGhlDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZSBuZWVkZWQgdG8gY29tcGxldGUgdGhlIHJlcXVlc3Qs IGFuZCB0aGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnkg cG9zaXRpb24gaGFzIG5vdCBiZWVuIGFkdmFuY2VkLg0KPiA+ICsqKi8NCj4gPiArU1RBVElDDQo+ ID4gK0VGSV9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ID4gK1N0dWJGaWxlUmVhZCAoDQo+ID4gKyAg SU4gRUZJX0ZJTEVfUFJPVE9DT0wgICpUaGlzLA0KPiA+ICsgIElOIE9VVCBVSU5UTiAgICAgICAg ICAqQnVmZmVyU2l6ZSwNCj4gPiArICBPVVQgVk9JRCAgICAgICAgICAgICAgKkJ1ZmZlcg0KPiA+ ICsgICkNCj4gPiArew0KPiA+ICsgIFNUVUJfRklMRSAgICAgICAgICAqU3R1YkZpbGU7DQo+ID4g KyAgQ09OU1QgS0VSTkVMX0JMT0IgICpCbG9iOw0KPiA+ICsgIFVJTlQ2NCAgICAgICAgICAgICBM ZWZ0Ow0KPiA+ICsNCj4gPiArICBTdHViRmlsZSA9IFNUVUJfRklMRV9GUk9NX0ZJTEUgKFRoaXMp Ow0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIFNjYW5uaW5nIHRoZSByb290IGRpcmVjdG9y eT8NCj4gPiArICAvLw0KPiA+ICsgIGlmIChTdHViRmlsZS0+QmxvYlR5cGUgPT0gS2VybmVsQmxv YlR5cGVNYXgpIHsNCj4gPiArICAgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiArDQo+ID4gKyAg ICBpZiAoU3R1YkZpbGUtPlBvc2l0aW9uID09IEtlcm5lbEJsb2JUeXBlTWF4KSB7DQo+ID4gKyAg ICAgIC8vDQo+ID4gKyAgICAgIC8vIFNjYW5uaW5nIGNvbXBsZXRlLg0KPiA+ICsgICAgICAvLw0K PiA+ICsgICAgICAqQnVmZmVyU2l6ZSA9IDA7DQo+ID4gKyAgICAgIHJldHVybiBFRklfU1VDQ0VT UzsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBTdGF0dXMgPSBDb252ZXJ0S2VybmVsQmxv YlR5cGVUb0ZpbGVJbmZvICgNCj4gPiArICAgICAgICAgICAgICAgKEtFUk5FTF9CTE9CX1RZUEUp U3R1YkZpbGUtPlBvc2l0aW9uLA0KPiA+ICsgICAgICAgICAgICAgICBCdWZmZXJTaXplLA0KPiA+ ICsgICAgICAgICAgICAgICBCdWZmZXINCj4gPiArICAgICAgICAgICAgICAgKTsNCj4gPiArICAg IGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgICAgcmV0dXJuIFN0YXR1czsNCj4g PiArICAgIH0NCj4gPiArDQo+ID4gKyAgICArK1N0dWJGaWxlLT5Qb3NpdGlvbjsNCj4gPiArICAg IHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAg Ly8gUmVhZGluZyBhIGZpbGUuDQo+ID4gKyAgLy8NCj4gPiArICBCbG9iID0gJm1LZXJuZWxCbG9i W1N0dWJGaWxlLT5CbG9iVHlwZV07DQo+ID4gKyAgaWYgKFN0dWJGaWxlLT5Qb3NpdGlvbiA+IEJs b2ItPlNpemUpIHsNCj4gPiArICAgIHJldHVybiBFRklfREVWSUNFX0VSUk9SOw0KPiA+ICsgIH0N Cj4gPiArDQo+ID4gKyAgTGVmdCA9IEJsb2ItPlNpemUgLSBTdHViRmlsZS0+UG9zaXRpb247DQo+ ID4gKyAgaWYgKCpCdWZmZXJTaXplID4gTGVmdCkgew0KPiA+ICsgICAgKkJ1ZmZlclNpemUgPSAo VUlOVE4pTGVmdDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmIChCbG9iLT5EYXRhICE9IE5V TEwpIHsNCj4gPiArICAgIENvcHlNZW0gKEJ1ZmZlciwgQmxvYi0+RGF0YSArIFN0dWJGaWxlLT5Q b3NpdGlvbiwgKkJ1ZmZlclNpemUpOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgU3R1YkZpbGUt PlBvc2l0aW9uICs9ICpCdWZmZXJTaXplOw0KPiA+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4g PiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgQ2xvc2VzIGEgc3BlY2lmaWVkIGZpbGUgaGFu ZGxlLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dIFRoaXMgIEEgcG9pbnRlciB0byB0aGUgRUZJ X0ZJTEVfUFJPVE9DT0wgaW5zdGFuY2UgdGhhdCBpcw0KPiB0aGUgZmlsZQ0KPiA+ICsgICAgICAg ICAgICAgICAgICAgaGFuZGxlIHRvIGNsb3NlLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9T VUNDRVNTICBUaGUgZmlsZSB3YXMgY2xvc2VkLg0KPiA+ICsqKi8NCj4gPiArU1RBVElDDQo+ID4g K0VGSV9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ID4gK1N0dWJGaWxlQ2xvc2UgKA0KPiA+ICsgIElO IEVGSV9GSUxFX1BST1RPQ09MICAqVGhpcw0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEZyZWVQ b29sIChTVFVCX0ZJTEVfRlJPTV9GSUxFIChUaGlzKSk7DQo+ID4gKyAgcmV0dXJuIEVGSV9TVUND RVNTOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBDbG9zZSBhbmQgZGVsZXRlIHRo ZSBmaWxlIGhhbmRsZS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSBUaGlzICBBIHBvaW50ZXIg dG8gdGhlIEVGSV9GSUxFX1BST1RPQ09MIGluc3RhbmNlIHRoYXQgaXMNCj4gdGhlDQo+ID4gKyAg ICAgICAgICAgICAgICAgICBoYW5kbGUgdG8gdGhlIGZpbGUgdG8gZGVsZXRlLg0KPiA+ICsNCj4g PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICBUaGUgZmlsZSB3YXMgY2xvc2Vk IGFuZCBkZWxldGVkLCBhbmQgdGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaGFuZGxlIHdhcyBjbG9zZWQuDQo+ID4gKyAgQHJldHZhbCBFRklfV0FSTl9ERUxFVEVf RkFJTFVSRSAgVGhlIGhhbmRsZSB3YXMgY2xvc2VkLCBidXQgdGhlIGZpbGUNCj4gd2FzIG5vdA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZWQuDQo+ID4gKw0K PiA+ICsqKi8NCj4gPiArU1RBVElDDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ID4g K1N0dWJGaWxlRGVsZXRlICgNCj4gPiArICBJTiBFRklfRklMRV9QUk9UT0NPTCAgKlRoaXMNCj4g PiArICApDQo+ID4gK3sNCj4gPiArICBGcmVlUG9vbCAoU1RVQl9GSUxFX0ZST01fRklMRSAoVGhp cykpOw0KPiA+ICsgIHJldHVybiBFRklfV0FSTl9ERUxFVEVfRkFJTFVSRTsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArLy8NCj4gPiArLy8gUHJvdG9jb2wgbWVtYmVyIGZ1bmN0aW9ucyBmb3IgRmlsZS4N Cj4gPiArLy8NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIE9wZW5zIGEgbmV3IGZpbGUgcmVsYXRp dmUgdG8gdGhlIHNvdXJjZSBmaWxlJ3MgbG9jYXRpb24uDQo+ID4gKw0KPiA+ICsgIChGb3J3YXJk IGRlY2xhcmF0aW9uLikNCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgQSBw b2ludGVyIHRvIHRoZSBFRklfRklMRV9QUk9UT0NPTCBpbnN0YW5jZSB0aGF0DQo+IGlzDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZpbGUgaGFuZGxlIHRvIHRoZSBzb3VyY2Ug bG9jYXRpb24uIFRoaXMgd291bGQNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBp Y2FsbHkgYmUgYW4gb3BlbiBoYW5kbGUgdG8gYSBkaXJlY3RvcnkuDQo+ID4gKw0KPiA+ICsgIEBw YXJhbVtvdXRdIE5ld0hhbmRsZSAgIEEgcG9pbnRlciB0byB0aGUgbG9jYXRpb24gdG8gcmV0dXJu IHRoZQ0KPiBvcGVuZWQgaGFuZGxlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y IHRoZSBuZXcgZmlsZS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgRmlsZU5hbWUgICAgVGhl IE51bGwtdGVybWluYXRlZCBzdHJpbmcgb2YgdGhlIG5hbWUgb2YgdGhlDQo+IGZpbGUgdG8NCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBvcGVuZWQuIFRoZSBmaWxlIG5hbWUgbWF5 IGNvbnRhaW4gdGhlIGZvbGxvd2luZw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIHBh dGggbW9kaWZpZXJzOiAiXCIsICIuIiwgYW5kICIuLiIuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtp bl0gIE9wZW5Nb2RlICAgIFRoZSBtb2RlIHRvIG9wZW4gdGhlIGZpbGUuIFRoZSBvbmx5IHZhbGlk DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29tYmluYXRpb25zIHRoYXQgdGhlIGZp bGUgbWF5IGJlIG9wZW5lZCB3aXRoIGFyZToNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICBSZWFkLCBSZWFkL1dyaXRlLCBvciBDcmVhdGUvUmVhZC9Xcml0ZS4NCj4gPiArDQo+ID4gKyAg QHBhcmFtW2luXSAgQXR0cmlidXRlcyAgT25seSB2YWxpZCBmb3IgRUZJX0ZJTEVfTU9ERV9DUkVB VEUsIGluIHdoaWNoDQo+IGNhc2UNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVz ZSBhcmUgdGhlIGF0dHJpYnV0ZSBiaXRzIGZvciB0aGUgbmV3bHkgY3JlYXRlZA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgIGZpbGUuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NV Q0NFU1MgICAgICAgICAgIFRoZSBmaWxlIHdhcyBvcGVuZWQuDQo+ID4gKyAgQHJldHZhbCBFRklf Tk9UX0ZPVU5EICAgICAgICAgVGhlIHNwZWNpZmllZCBmaWxlIGNvdWxkIG5vdCBiZSBmb3VuZCBv bg0KPiB0aGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UuDQo+ ID4gKyAgQHJldHZhbCBFRklfTk9fTUVESUEgICAgICAgICAgVGhlIGRldmljZSBoYXMgbm8gbWVk aXVtLg0KPiA+ICsgIEByZXR2YWwgRUZJX01FRElBX0NIQU5HRUQgICAgIFRoZSBkZXZpY2UgaGFz IGEgZGlmZmVyZW50IG1lZGl1bSBpbiBpdA0KPiBvciB0aGUNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBtZWRpdW0gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4NCj4gPiArICBA cmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgZGV2aWNlIHJlcG9ydGVkIGFuIGVycm9y Lg0KPiA+ICsgIEByZXR2YWwgRUZJX1ZPTFVNRV9DT1JSVVBURUQgIFRoZSBmaWxlIHN5c3RlbSBz dHJ1Y3R1cmVzIGFyZQ0KPiBjb3JydXB0ZWQuDQo+ID4gKyAgQHJldHZhbCBFRklfV1JJVEVfUFJP VEVDVEVEICAgQW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBjcmVhdGUgYSBmaWxlLA0KPiBvciBvcGVu IGENCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIGZvciB3cml0ZSB3 aGVuIHRoZSBtZWRpYSBpcw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdy aXRlLXByb3RlY3RlZC4NCj4gPiArICBAcmV0dmFsIEVGSV9BQ0NFU1NfREVOSUVEICAgICBUaGUg c2VydmljZSBkZW5pZWQgYWNjZXNzIHRvIHRoZSBmaWxlLg0KPiA+ICsgIEByZXR2YWwgRUZJX09V VF9PRl9SRVNPVVJDRVMgIE5vdCBlbm91Z2ggcmVzb3VyY2VzIHdlcmUgYXZhaWxhYmxlDQo+IHRv IG9wZW4gdGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS4NCj4g PiArICBAcmV0dmFsIEVGSV9WT0xVTUVfRlVMTCAgICAgICBUaGUgdm9sdW1lIGlzIGZ1bGwuDQo+ ID4gKyoqLw0KPiA+ICtTVEFUSUMNCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiAr U3R1YkZpbGVPcGVuICgNCj4gPiArICBJTiBFRklfRklMRV9QUk9UT0NPTCAgICpUaGlzLA0KPiA+ ICsgIE9VVCBFRklfRklMRV9QUk9UT0NPTCAgKipOZXdIYW5kbGUsDQo+ID4gKyAgSU4gQ0hBUjE2 ICAgICAgICAgICAgICAqRmlsZU5hbWUsDQo+ID4gKyAgSU4gVUlOVDY0ICAgICAgICAgICAgICBP cGVuTW9kZSwNCj4gPiArICBJTiBVSU5UNjQgICAgICAgICAgICAgIEF0dHJpYnV0ZXMNCj4gPiAr ICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgUmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBh IGZpbGUuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gICAgIFRoaXMgICAgICAgICAgICAgQSBw b2ludGVyIHRvIHRoZSBFRklfRklMRV9QUk9UT0NPTCBpbnN0YW5jZQ0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBpcyB0aGUgZmlsZSBoYW5kbGUgdGhlIHJlcXVl c3RlZA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24g aXMgZm9yLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICAgICBJbmZvcm1hdGlvblR5cGUgIFRo ZSB0eXBlIGlkZW50aWZpZXIgR1VJRCBmb3IgdGhlDQo+IGluZm9ybWF0aW9uDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWluZyByZXF1ZXN0ZWQuIFRoZSBmb2xsb3dp bmcgaW5mb3JtYXRpb24NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5 cGVzIGFyZSBzdXBwb3J0ZWQsIHN0b3JpbmcgdGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHN0cnVjdHVyZXMgaW4gQnVmZmVyOg0KPiA+ICsN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gZ0VmaUZpbGVJbmZvR3Vp ZDogRUZJX0ZJTEVfSU5GTw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC0gZ0VmaUZpbGVTeXN0ZW1JbmZvR3VpZDoNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRUZJX0ZJTEVfU1lTVEVNX0lORk8NCj4gPiArDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIGdFZmlGaWxlU3lzdGVtVm9sdW1lTGFiZWxJ bmZvSWRHdWlkOg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFRklf RklMRV9TWVNURU1fVk9MVU1FX0xBQkVMDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbixvdXRdIEJ1 ZmZlclNpemUgICAgICAgT24gaW5wdXQsIHRoZSBzaXplIG9mIEJ1ZmZlci4gT24gb3V0cHV0LA0K PiB0aGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFtb3VudCBvZiBk YXRhIHJldHVybmVkIGluIEJ1ZmZlci4gSW4gYm90aA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2FzZXMsIHRoZSBzaXplIGlzIG1lYXN1cmVkIGluIGJ5dGVzLg0KPiA+ ICsNCj4gPiArICBAcGFyYW1bb3V0XSAgICBCdWZmZXIgICAgICAgICAgIEEgcG9pbnRlciB0byB0 aGUgZGF0YSBidWZmZXIgdG8gcmV0dXJuLiBUaGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJ1ZmZlcidzIHR5cGUgaXMgaW5kaWNhdGVkIGJ5DQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBJbmZvcm1hdGlvblR5cGUuDQo+ID4gKw0KPiA+ICsg IEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBpbmZvcm1hdGlvbiB3YXMgcmV0dXJu ZWQuDQo+ID4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgVGhlIEluZm9ybWF0aW9u VHlwZSBpcyBub3Qga25vd24uDQo+ID4gKyAgQHJldHZhbCBFRklfTk9fTUVESUEgICAgICAgICAg VGhlIGRldmljZSBoYXMgbm8gbWVkaXVtLg0KPiA+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJP UiAgICAgIFRoZSBkZXZpY2UgcmVwb3J0ZWQgYW4gZXJyb3IuDQo+ID4gKyAgQHJldHZhbCBFRklf Vk9MVU1FX0NPUlJVUFRFRCAgVGhlIGZpbGUgc3lzdGVtIHN0cnVjdHVyZXMgYXJlDQo+IGNvcnJ1 cHRlZC4NCj4gPiArICBAcmV0dmFsIEVGSV9CVUZGRVJfVE9PX1NNQUxMICBUaGUgQnVmZmVyU2l6 ZSBpcyB0b28gc21hbGwgdG8gc3RvcmUNCj4gdGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW5mb3JtYXRpb24gc3RydWN0dXJlIHJlcXVlc3RlZCBieQ0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZm9ybWF0aW9uVHlwZS4gQnVmZmVyU2l6ZSBo YXMgYmVlbiB1cGRhdGVkDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0 aCB0aGUgc2l6ZSBuZWVkZWQgdG8gY29tcGxldGUgdGhlIHJlcXVlc3QuDQo+ID4gKyoqLw0KPiA+ ICtTVEFUSUMNCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArU3R1YkZpbGVHZXRJ bmZvICgNCj4gPiArICBJTiBFRklfRklMRV9QUk9UT0NPTCAgKlRoaXMsDQo+ID4gKyAgSU4gRUZJ X0dVSUQgICAgICAgICAgICpJbmZvcm1hdGlvblR5cGUsDQo+ID4gKyAgSU4gT1VUIFVJTlROICAg ICAgICAgICpCdWZmZXJTaXplLA0KPiA+ICsgIE9VVCBWT0lEICAgICAgICAgICAgICAqQnVmZmVy DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgQ09OU1QgU1RVQl9GSUxFICAqU3R1YkZpbGU7DQo+ ID4gKyAgVUlOVE4gICAgICAgICAgICBPcmlnaW5hbEJ1ZmZlclNpemU7DQo+ID4gKw0KPiA+ICsg IFN0dWJGaWxlID0gU1RVQl9GSUxFX0ZST01fRklMRSAoVGhpcyk7DQo+ID4gKw0KPiA+ICsgIGlm IChDb21wYXJlR3VpZCAoSW5mb3JtYXRpb25UeXBlLCAmZ0VmaUZpbGVJbmZvR3VpZCkpIHsNCj4g PiArICAgIHJldHVybiBDb252ZXJ0S2VybmVsQmxvYlR5cGVUb0ZpbGVJbmZvICgNCj4gPiArICAg ICAgICAgICAgIFN0dWJGaWxlLT5CbG9iVHlwZSwNCj4gPiArICAgICAgICAgICAgIEJ1ZmZlclNp emUsDQo+ID4gKyAgICAgICAgICAgICBCdWZmZXINCj4gPiArICAgICAgICAgICAgICk7DQo+ID4g KyAgfQ0KPiA+ICsNCj4gPiArICBPcmlnaW5hbEJ1ZmZlclNpemUgPSAqQnVmZmVyU2l6ZTsNCj4g PiArDQo+ID4gKyAgaWYgKENvbXBhcmVHdWlkIChJbmZvcm1hdGlvblR5cGUsICZnRWZpRmlsZVN5 c3RlbUluZm9HdWlkKSkgew0KPiA+ICsgICAgRUZJX0ZJTEVfU1lTVEVNX0lORk8gICpGaWxlU3lz dGVtSW5mbzsNCj4gPiArDQo+ID4gKyAgICAqQnVmZmVyU2l6ZSA9IHNpemVvZiAqRmlsZVN5c3Rl bUluZm87DQo+ID4gKyAgICBpZiAoT3JpZ2luYWxCdWZmZXJTaXplIDwgKkJ1ZmZlclNpemUpIHsN Cj4gPiArICAgICAgcmV0dXJuIEVGSV9CVUZGRVJfVE9PX1NNQUxMOw0KPiA+ICsgICAgfQ0KPiA+ ICsNCj4gPiArICAgIEZpbGVTeXN0ZW1JbmZvICAgICAgICAgICAgICAgICA9IChFRklfRklMRV9T WVNURU1fSU5GTyAqKUJ1ZmZlcjsNCj4gPiArICAgIEZpbGVTeXN0ZW1JbmZvLT5TaXplICAgICAg ICAgICA9IHNpemVvZiAqRmlsZVN5c3RlbUluZm87DQo+ID4gKyAgICBGaWxlU3lzdGVtSW5mby0+ UmVhZE9ubHkgICAgICAgPSBUUlVFOw0KPiA+ICsgICAgRmlsZVN5c3RlbUluZm8tPlZvbHVtZVNp emUgICAgID0gbVRvdGFsQmxvYkJ5dGVzOw0KPiA+ICsgICAgRmlsZVN5c3RlbUluZm8tPkZyZWVT cGFjZSAgICAgID0gMDsNCj4gPiArICAgIEZpbGVTeXN0ZW1JbmZvLT5CbG9ja1NpemUgICAgICA9 IDE7DQo+ID4gKyAgICBGaWxlU3lzdGVtSW5mby0+Vm9sdW1lTGFiZWxbMF0gPSBMJ1wwJzsNCj4g PiArDQo+ID4gKyAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiAr ICBpZiAoQ29tcGFyZUd1aWQgKEluZm9ybWF0aW9uVHlwZSwNCj4gJmdFZmlGaWxlU3lzdGVtVm9s dW1lTGFiZWxJbmZvSWRHdWlkKSkgew0KPiA+ICsgICAgRUZJX0ZJTEVfU1lTVEVNX1ZPTFVNRV9M QUJFTCAgKkZpbGVTeXN0ZW1Wb2x1bWVMYWJlbDsNCj4gPiArDQo+ID4gKyAgICAqQnVmZmVyU2l6 ZSA9IHNpemVvZiAqRmlsZVN5c3RlbVZvbHVtZUxhYmVsOw0KPiA+ICsgICAgaWYgKE9yaWdpbmFs QnVmZmVyU2l6ZSA8ICpCdWZmZXJTaXplKSB7DQo+ID4gKyAgICAgIHJldHVybiBFRklfQlVGRkVS X1RPT19TTUFMTDsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBGaWxlU3lzdGVtVm9sdW1l TGFiZWwgICAgICAgICAgICAgICAgID0gKEVGSV9GSUxFX1NZU1RFTV9WT0xVTUVfTEFCRUwNCj4g KilCdWZmZXI7DQo+ID4gKyAgICBGaWxlU3lzdGVtVm9sdW1lTGFiZWwtPlZvbHVtZUxhYmVsWzBd ID0gTCdcMCc7DQo+ID4gKw0KPiA+ICsgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ICsgIH0N Cj4gPiArDQo+ID4gKyAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gPiArfQ0KPiA+ICsNCj4g PiArLy8NCj4gPiArLy8gRXh0ZXJuYWwgZGVmaW5pdGlvbiBvZiB0aGUgZmlsZSBwcm90b2NvbCB0 ZW1wbGF0ZS4NCj4gPiArLy8NCj4gPiArU1RBVElDIENPTlNUIEVGSV9GSUxFX1BST1RPQ09MICBt RWZpRmlsZVByb3RvY29sVGVtcGxhdGUgPSB7DQo+ID4gKyAgRUZJX0ZJTEVfUFJPVE9DT0xfUkVW SVNJT04sIC8vIHJldmlzaW9uIDENCj4gPiArICBTdHViRmlsZU9wZW4sDQo+ID4gKyAgU3R1YkZp bGVDbG9zZSwNCj4gPiArICBTdHViRmlsZURlbGV0ZSwNCj4gPiArICBTdHViRmlsZVJlYWQsDQo+ ID4gKyAgTlVMTCwNCj4gPiArICBOVUxMLA0KPiA+ICsgIE5VTEwsDQo+ID4gKyAgU3R1YkZpbGVH ZXRJbmZvLA0KPiA+ICsgIE5VTEwsDQo+ID4gKyAgTlVMTCwNCj4gPiArICBOVUxMLCAgICAgICAg ICAgICAgICAgICAgICAgLy8gT3BlbkV4LCByZXZpc2lvbiAyDQo+ID4gKyAgTlVMTCwgICAgICAg ICAgICAgICAgICAgICAgIC8vIFJlYWRFeCwgcmV2aXNpb24gMg0KPiA+ICsgIE5VTEwsICAgICAg ICAgICAgICAgICAgICAgICAvLyBXcml0ZUV4LCByZXZpc2lvbiAyDQo+ID4gKyAgTlVMTCAgICAg ICAgICAgICAgICAgICAgICAgIC8vIEZsdXNoRXgsIHJldmlzaW9uIDINCj4gPiArfTsNCj4gPiAr DQo+ID4gKy8qKg0KPiA+ICsgIE9wZW5zIGEgbmV3IGZpbGUgcmVsYXRpdmUgdG8gdGhlIHNvdXJj ZSBmaWxlJ3MgbG9jYXRpb24uDQo+ID4gKw0KPiA+ICsgIChGb3J3YXJkIGRlY2xhcmF0aW9uLikN Cj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBF RklfRklMRV9QUk9UT0NPTCBpbnN0YW5jZSB0aGF0DQo+IGlzDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgdGhlIGZpbGUgaGFuZGxlIHRvIHRoZSBzb3VyY2UgbG9jYXRpb24uIFRoaXMg d291bGQNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBpY2FsbHkgYmUgYW4gb3Bl biBoYW5kbGUgdG8gYSBkaXJlY3RvcnkuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtvdXRdIE5ld0hh bmRsZSAgIEEgcG9pbnRlciB0byB0aGUgbG9jYXRpb24gdG8gcmV0dXJuIHRoZQ0KPiBvcGVuZWQg aGFuZGxlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBuZXcgZmlsZS4N Cj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgRmlsZU5hbWUgICAgVGhlIE51bGwtdGVybWluYXRl ZCBzdHJpbmcgb2YgdGhlIG5hbWUgb2YgdGhlDQo+IGZpbGUgdG8NCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICBiZSBvcGVuZWQuIFRoZSBmaWxlIG5hbWUgbWF5IGNvbnRhaW4gdGhlIGZv bGxvd2luZw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggbW9kaWZpZXJzOiAi XCIsICIuIiwgYW5kICIuLiIuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIE9wZW5Nb2RlICAg IFRoZSBtb2RlIHRvIG9wZW4gdGhlIGZpbGUuIFRoZSBvbmx5IHZhbGlkDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgY29tYmluYXRpb25zIHRoYXQgdGhlIGZpbGUgbWF5IGJlIG9wZW5l ZCB3aXRoIGFyZToNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkLCBSZWFkL1dy aXRlLCBvciBDcmVhdGUvUmVhZC9Xcml0ZS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgQXR0 cmlidXRlcyAgT25seSB2YWxpZCBmb3IgRUZJX0ZJTEVfTU9ERV9DUkVBVEUsIGluIHdoaWNoDQo+ IGNhc2UNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVzZSBhcmUgdGhlIGF0dHJp YnV0ZSBiaXRzIGZvciB0aGUgbmV3bHkgY3JlYXRlZA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgIGZpbGUuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAg IFRoZSBmaWxlIHdhcyBvcGVuZWQuDQo+ID4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAg ICAgVGhlIHNwZWNpZmllZCBmaWxlIGNvdWxkIG5vdCBiZSBmb3VuZCBvbg0KPiB0aGUNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UuDQo+ID4gKyAgQHJldHZhbCBF RklfTk9fTUVESUEgICAgICAgICAgVGhlIGRldmljZSBoYXMgbm8gbWVkaXVtLg0KPiA+ICsgIEBy ZXR2YWwgRUZJX01FRElBX0NIQU5HRUQgICAgIFRoZSBkZXZpY2UgaGFzIGEgZGlmZmVyZW50IG1l ZGl1bSBpbiBpdA0KPiBvciB0aGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBtZWRpdW0gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4NCj4gPiArICBAcmV0dmFsIEVGSV9ERVZJ Q0VfRVJST1IgICAgICBUaGUgZGV2aWNlIHJlcG9ydGVkIGFuIGVycm9yLg0KPiA+ICsgIEByZXR2 YWwgRUZJX1ZPTFVNRV9DT1JSVVBURUQgIFRoZSBmaWxlIHN5c3RlbSBzdHJ1Y3R1cmVzIGFyZQ0K PiBjb3JydXB0ZWQuDQo+ID4gKyAgQHJldHZhbCBFRklfV1JJVEVfUFJPVEVDVEVEICAgQW4gYXR0 ZW1wdCB3YXMgbWFkZSB0byBjcmVhdGUgYSBmaWxlLA0KPiBvciBvcGVuIGENCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIGZvciB3cml0ZSB3aGVuIHRoZSBtZWRpYSBp cw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlLXByb3RlY3RlZC4N Cj4gPiArICBAcmV0dmFsIEVGSV9BQ0NFU1NfREVOSUVEICAgICBUaGUgc2VydmljZSBkZW5pZWQg YWNjZXNzIHRvIHRoZSBmaWxlLg0KPiA+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMg IE5vdCBlbm91Z2ggcmVzb3VyY2VzIHdlcmUgYXZhaWxhYmxlDQo+IHRvIG9wZW4gdGhlDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS4NCj4gPiArICBAcmV0dmFsIEVG SV9WT0xVTUVfRlVMTCAgICAgICBUaGUgdm9sdW1lIGlzIGZ1bGwuDQo+ID4gKyoqLw0KPiA+ICtT VEFUSUMNCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArU3R1YkZpbGVPcGVuICgN Cj4gPiArICBJTiBFRklfRklMRV9QUk9UT0NPTCAgICpUaGlzLA0KPiA+ICsgIE9VVCBFRklfRklM RV9QUk9UT0NPTCAgKipOZXdIYW5kbGUsDQo+ID4gKyAgSU4gQ0hBUjE2ICAgICAgICAgICAgICAq RmlsZU5hbWUsDQo+ID4gKyAgSU4gVUlOVDY0ICAgICAgICAgICAgICBPcGVuTW9kZSwNCj4gPiAr ICBJTiBVSU5UNjQgICAgICAgICAgICAgIEF0dHJpYnV0ZXMNCj4gPiArICApDQo+ID4gK3sNCj4g PiArICBDT05TVCBTVFVCX0ZJTEUgICpTdHViRmlsZTsNCj4gPiArICBVSU5UTiAgICAgICAgICAg IEJsb2JUeXBlOw0KPiA+ICsgIFNUVUJfRklMRSAgICAgICAgKk5ld1N0dWJGaWxlOw0KPiA+ICsN Cj4gPiArICAvLw0KPiA+ICsgIC8vIFdlJ3JlIHJlYWQtb25seS4NCj4gPiArICAvLw0KPiA+ICsg IHN3aXRjaCAoT3Blbk1vZGUpIHsNCj4gPiArICAgIGNhc2UgRUZJX0ZJTEVfTU9ERV9SRUFEOg0K PiA+ICsgICAgICBicmVhazsNCj4gPiArDQo+ID4gKyAgICBjYXNlIEVGSV9GSUxFX01PREVfUkVB RCB8IEVGSV9GSUxFX01PREVfV1JJVEU6DQo+ID4gKyAgICBjYXNlIEVGSV9GSUxFX01PREVfUkVB RCB8IEVGSV9GSUxFX01PREVfV1JJVEUgfA0KPiBFRklfRklMRV9NT0RFX0NSRUFURToNCj4gPiAr ICAgICAgcmV0dXJuIEVGSV9XUklURV9QUk9URUNURUQ7DQo+ID4gKw0KPiA+ICsgICAgZGVmYXVs dDoNCj4gPiArICAgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiArICB9DQo+ ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gT25seSB0aGUgcm9vdCBkaXJlY3Rvcnkgc3VwcG9y dHMgb3BlbmluZyBmaWxlcyBpbiBpdC4NCj4gPiArICAvLw0KPiA+ICsgIFN0dWJGaWxlID0gU1RV Ql9GSUxFX0ZST01fRklMRSAoVGhpcyk7DQo+ID4gKyAgaWYgKFN0dWJGaWxlLT5CbG9iVHlwZSAh PSBLZXJuZWxCbG9iVHlwZU1heCkgew0KPiA+ICsgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsN Cj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gTG9jYXRlIHRoZSBmaWxlLg0K PiA+ICsgIC8vDQo+ID4gKyAgZm9yIChCbG9iVHlwZSA9IDA7IEJsb2JUeXBlIDwgS2VybmVsQmxv YlR5cGVNYXg7ICsrQmxvYlR5cGUpIHsNCj4gPiArICAgIGlmIChTdHJDbXAgKEZpbGVOYW1lLCBt S2VybmVsQmxvYltCbG9iVHlwZV0uTmFtZSkgPT0gMCkgew0KPiA+ICsgICAgICBicmVhazsNCj4g PiArICAgIH0NCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmIChCbG9iVHlwZSA9PSBLZXJuZWxC bG9iVHlwZU1heCkgew0KPiA+ICsgICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+ID4gKyAgfQ0K PiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIEZvdW5kIGl0Lg0KPiA+ICsgIC8vDQo+ID4gKyAg TmV3U3R1YkZpbGUgPSBBbGxvY2F0ZVBvb2wgKHNpemVvZiAqTmV3U3R1YkZpbGUpOw0KPiA+ICsg IGlmIChOZXdTdHViRmlsZSA9PSBOVUxMKSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX09VVF9PRl9S RVNPVVJDRVM7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBOZXdTdHViRmlsZS0+U2lnbmF0dXJl ID0gU1RVQl9GSUxFX1NJRzsNCj4gPiArICBOZXdTdHViRmlsZS0+QmxvYlR5cGUgID0gKEtFUk5F TF9CTE9CX1RZUEUpQmxvYlR5cGU7DQo+ID4gKyAgTmV3U3R1YkZpbGUtPlBvc2l0aW9uICA9IDA7 DQo+ID4gKyAgQ29weU1lbSAoDQo+ID4gKyAgICAmTmV3U3R1YkZpbGUtPkZpbGUsDQo+ID4gKyAg ICAmbUVmaUZpbGVQcm90b2NvbFRlbXBsYXRlLA0KPiA+ICsgICAgc2l6ZW9mIG1FZmlGaWxlUHJv dG9jb2xUZW1wbGF0ZQ0KPiA+ICsgICAgKTsNCj4gPiArICAqTmV3SGFuZGxlID0gJk5ld1N0dWJG aWxlLT5GaWxlOw0KPiA+ICsNCj4gPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gK30NCj4g PiArDQo+ID4gKy8vDQo+ID4gKy8vIFByb3RvY29sIG1lbWJlciBmdW5jdGlvbnMgZm9yIFNpbXBs ZUZpbGVTeXN0ZW0uDQo+ID4gKy8vDQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBPcGVuIHRoZSBy b290IGRpcmVjdG9yeSBvbiBhIHZvbHVtZS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgVGhp cyAgQSBwb2ludGVyIHRvIHRoZSB2b2x1bWUgdG8gb3BlbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb24u DQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtvdXRdIFJvb3QgIEEgcG9pbnRlciB0byB0aGUgbG9jYXRp b24gdG8gcmV0dXJuIHRoZSBvcGVuZWQgZmlsZQ0KPiBoYW5kbGUNCj4gPiArICAgICAgICAgICAg ICAgICAgICBmb3IgdGhlIHJvb3QgZGlyZWN0b3J5IGluLg0KPiA+ICsNCj4gPiArICBAcmV0dmFs IEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgZGV2aWNlIHdhcyBvcGVuZWQuDQo+ID4gKyAgQHJl dHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgVGhpcyB2b2x1bWUgZG9lcyBub3Qgc3VwcG9ydCB0 aGUNCj4gcmVxdWVzdGVkIGZpbGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzeXN0ZW0gdHlwZS4NCj4gPiArICBAcmV0dmFsIEVGSV9OT19NRURJQSAgICAgICAgICBUaGUg ZGV2aWNlIGhhcyBubyBtZWRpdW0uDQo+ID4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAg ICAgVGhlIGRldmljZSByZXBvcnRlZCBhbiBlcnJvci4NCj4gPiArICBAcmV0dmFsIEVGSV9WT0xV TUVfQ09SUlVQVEVEICBUaGUgZmlsZSBzeXN0ZW0gc3RydWN0dXJlcyBhcmUNCj4gY29ycnVwdGVk Lg0KPiA+ICsgIEByZXR2YWwgRUZJX0FDQ0VTU19ERU5JRUQgICAgIFRoZSBzZXJ2aWNlIGRlbmll ZCBhY2Nlc3MgdG8gdGhlIGZpbGUuDQo+ID4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNF UyAgVGhlIHZvbHVtZSB3YXMgbm90IG9wZW5lZCBkdWUgdG8NCj4gbGFjayBvZg0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlcy4NCj4gPiArICBAcmV0dmFsIEVG SV9NRURJQV9DSEFOR0VEICAgICBUaGUgZGV2aWNlIGhhcyBhIGRpZmZlcmVudCBtZWRpdW0gaW4g aXQNCj4gb3IgdGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaXVt IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIEFueSBleGlzdGluZw0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZpbGUgaGFuZGxlcyBmb3IgdGhpcyB2b2x1bWUgYXJlIG5vIGxv bmdlcg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkLiBUbyBhY2Nl c3MgdGhlIGZpbGVzIG9uIHRoZSBuZXcgbWVkaXVtLA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRoZSB2b2x1bWUgbXVzdCBiZSByZW9wZW5lZCB3aXRoIE9wZW5Wb2x1bWUo KS4NCj4gPiArKiovDQo+ID4gK1NUQVRJQw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0VGSUFQSQ0K PiA+ICtTdHViRmlsZVN5c3RlbU9wZW5Wb2x1bWUgKA0KPiA+ICsgIElOIEVGSV9TSU1QTEVfRklM RV9TWVNURU1fUFJPVE9DT0wgICpUaGlzLA0KPiA+ICsgIE9VVCBFRklfRklMRV9QUk9UT0NPTCAg ICAgICAgICAgICAgICoqUm9vdA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIFNUVUJfRklMRSAg KlN0dWJGaWxlOw0KPiA+ICsNCj4gPiArICBTdHViRmlsZSA9IEFsbG9jYXRlUG9vbCAoc2l6ZW9m ICpTdHViRmlsZSk7DQo+ID4gKyAgaWYgKFN0dWJGaWxlID09IE5VTEwpIHsNCj4gPiArICAgIHJl dHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIFN0dWJG aWxlLT5TaWduYXR1cmUgPSBTVFVCX0ZJTEVfU0lHOw0KPiA+ICsgIFN0dWJGaWxlLT5CbG9iVHlw ZSAgPSBLZXJuZWxCbG9iVHlwZU1heDsNCj4gPiArICBTdHViRmlsZS0+UG9zaXRpb24gID0gMDsN Cj4gPiArICBDb3B5TWVtICgNCj4gPiArICAgICZTdHViRmlsZS0+RmlsZSwNCj4gPiArICAgICZt RWZpRmlsZVByb3RvY29sVGVtcGxhdGUsDQo+ID4gKyAgICBzaXplb2YgbUVmaUZpbGVQcm90b2Nv bFRlbXBsYXRlDQo+ID4gKyAgICApOw0KPiA+ICsgICpSb290ID0gJlN0dWJGaWxlLT5GaWxlOw0K PiA+ICsNCj4gPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gK30NCj4gPiArDQo+ID4gK1NU QVRJQyBDT05TVCBFRklfU0lNUExFX0ZJTEVfU1lTVEVNX1BST1RPQ09MICBtRmlsZVN5c3RlbSA9 IHsNCj4gPiArICBFRklfU0lNUExFX0ZJTEVfU1lTVEVNX1BST1RPQ09MX1JFVklTSU9OLA0KPiA+ ICsgIFN0dWJGaWxlU3lzdGVtT3BlblZvbHVtZQ0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArLyoqDQo+ ID4gKyAgTG9hZCBpbml0cmQgZGF0YSB0byBtZW1vcnkNCj4gPiArDQo+ID4gKyAgQHBhcmFtW2lu XSAgICAgIFRoaXMgICAgICAgIE5vdCB1c2VkIGhlcmUuDQo+ID4gKyAgQHBhcmFtW2luXSAgICAg IEZpbGVQYXRoICAgIENvbnRhaW4gc29tZSBtZXRhZGF0YSBvZiBmaWxlIGRldmljZSB3aGVyZQ0K PiBob2xkcyB0aGUgaW5pdHJkLg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICBCb290UG9saWN5ICBO b3Qgc3VwcG9ydCBoZXJlLg0KPiA+ICsgIEBwYXJhbVtpbixvdXRdICBCdWZmZXJTaXplICBPbiBp bnB1dCwgY29udGFpbnMgdGhlIG1lbW9yeSBidWZmIHNpemUuDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE9uIG91dHB1dCwgY29udGFpbnMgdGhlIGluaXRyZCBibG9iIHNpemUu DQo+ID4gKyAgQHBhcmFtW291dF0gICAgIEJ1ZmZlciAgICAgIEEgcG9pbnRlciBwb2ludCB0byBt ZW1vcnkgd2hpY2ggY29udGFpbnMNCj4gaW5pdHJkIGRhdGEuDQo+ID4gKw0KPiA+ICsgIEByZXR2 YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgICBPbmNlIHRoZSBCb290IFBvbGljeSBpcyB0cnVlLg0K PiA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBPbmNlIHRoZXJlIGlzIG5vIEJ1 ZmZTaXplIGdpdmVuIG9yIG5vDQo+IGF2YWlsYWJsZSBmaWxlIGRldmljZS4NCj4gPiArICBAcmV0 dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICAgRmlsZSBwYXRoIGRvZXNuJ3QgbWF0Y2guDQo+ID4g KyAgQHJldHZhbCBFRklfQlVGRkVSX1RPT19TTUFMTCAgIEJ1ZmYgc2l6ZSB0b28gc21hbGwuDQo+ ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFN1Y2Nlc3MuDQo+ID4gKyoqLw0K PiA+ICtTVEFUSUMNCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArSW5pdHJkTG9h ZEZpbGUyICgNCj4gPiArICBJTiAgICAgIEVGSV9MT0FEX0ZJTEUyX1BST1RPQ09MICAgKlRoaXMs DQo+ID4gKyAgSU4gICAgICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICpGaWxlUGF0aCwNCj4g PiArICBJTiAgICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgQm9vdFBvbGljeSwNCj4gPiAr ICBJTiAgT1VUIFVJTlROICAgICAgICAgICAgICAgICAgICAgKkJ1ZmZlclNpemUsDQo+ID4gKyAg T1VUICAgICBWT0lEICAgICAgICAgICAgICAgICAgICAgICpCdWZmZXIgICAgIE9QVElPTkFMDQo+ ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgQ09OU1QgS0VSTkVMX0JMT0IgICpJbml0cmRCbG9iID0N Cj4gJm1LZXJuZWxCbG9iW0tlcm5lbEJsb2JUeXBlSW5pdHJkXTsNCj4gPiArDQo+ID4gKyAgQVNT RVJUIChJbml0cmRCbG9iLT5TaXplID4gMCk7DQo+ID4gKw0KPiA+ICsgIGlmIChCb290UG9saWN5 KSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiA+ICsgIH0NCj4gPiArDQo+ ID4gKyAgaWYgKChCdWZmZXJTaXplID09IE5VTEwpIHx8ICFJc0RldmljZVBhdGhWYWxpZCAoRmls ZVBhdGgsIDApKSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYgKChGaWxlUGF0aC0+VHlwZSAhPSBFTkRfREVWSUNFX1BB VEhfVFlQRSkgfHwNCj4gPiArICAgICAgKEZpbGVQYXRoLT5TdWJUeXBlICE9IEVORF9FTlRJUkVf REVWSUNFX1BBVEhfU1VCVFlQRSkpDQo+ID4gKyAgew0KPiA+ICsgICAgcmV0dXJuIEVGSV9OT1Rf Rk9VTkQ7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoKEJ1ZmZlciA9PSBOVUxMKSB8fCAo KkJ1ZmZlclNpemUgPCBJbml0cmRCbG9iLT5TaXplKSkgew0KPiA+ICsgICAgKkJ1ZmZlclNpemUg PSBJbml0cmRCbG9iLT5TaXplOw0KPiA+ICsgICAgcmV0dXJuIEVGSV9CVUZGRVJfVE9PX1NNQUxM Ow0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgQ29weU1lbSAoQnVmZmVyLCBJbml0cmRCbG9iLT5E YXRhLCBJbml0cmRCbG9iLT5TaXplKTsNCj4gPiArDQo+ID4gKyAgKkJ1ZmZlclNpemUgPSBJbml0 cmRCbG9iLT5TaXplOw0KPiA+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArU1RBVElDIENPTlNUIEVGSV9MT0FEX0ZJTEUyX1BST1RPQ09MICBtSW5pdHJkTG9hZEZp bGUyID0gew0KPiA+ICsgIEluaXRyZExvYWRGaWxlMiwNCj4gPiArfTsNCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgIEZldGNoIGtlcm5lbCwgaW5pdHJkIGFuZCBjb21tYW5kbGluZSBpbnRvIEJsb2Iu DQo+ID4gKw0KPiA+ICsgIEBwYXJhbSBCbG9iICAgIE9uIGlucHV0LCBjaG9vc2Ugd2hpY2ggYmxv YiB0byBiZSBmZXRjaGVkLg0KPiA+ICsgICAgICAgICAgICAgICAgIE9uIG91dHB1dCwgY2Fycnkg dGhlIGZ1bGwgYmxvYiBpbmZvLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQg ICAgS2VybmVsIGlzIG5vdCBmZXRjaGVkIG9yIG5vIGNob3NlbiBub2RlDQo+IGZvdW5kIGluIERU Lg0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICBJZiB0aGVyZSBpcyBrZXJuZWwgZmV0 Y2hlZCBvciB0aGUgQmxvY2stPk5hbWUgaXMNCj4gbm90IGtlcm5lbC4NCj4gPiArDQo+ID4gKyoq Lw0KPiA+ICtTVEFUSUMNCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtGZXRjaEJsb2IgKA0KPiA+ICsg IElOIE9VVCBLRVJORUxfQkxPQiAgKkJsb2INCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBWT0lE ICAgICAgICAgICpEZXZpY2VUcmVlQmFzZTsNCj4gPiArICBVSU5UNjQgICAgICAgIEluaXRyZFN0 YXJ0LCBJbml0cmRFbmQ7DQo+ID4gKyAgSU5UMzIgICAgICAgICBMZW47DQo+ID4gKyAgQ09OU1Qg VUlOVDY0ICAqUHJvcDsNCj4gPiArICBJTlQzMiAgICAgICAgIENob3Nlbk5vZGU7DQo+ID4gKw0K PiA+ICsgIERldmljZVRyZWVCYXNlID0gKFZPSUQgKikoVUlOVE4pUGNkR2V0NjQNCj4gKFBjZERl dmljZVRyZWVJbml0aWFsQmFzZUFkZHJlc3MpOw0KPiA+ICsgIEFTU0VSVCAoRGV2aWNlVHJlZUJh c2UgIT0gTlVMTCk7DQo+ID4gKw0KPiA+ICsgIEJsb2ItPlNpemUgPSAwOw0KPiA+ICsNCj4gPiAr ICAvLw0KPiA+ICsgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGEgdmFsaWQgZGV2aWNlIHRyZWUgYmxv Yg0KPiA+ICsgIC8vDQo+ID4gKyAgQVNTRVJUIChmZHRfY2hlY2tfaGVhZGVyIChEZXZpY2VUcmVl QmFzZSkgPT0gMCk7DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gRmluZCBjaG9zZW4gbm9k ZQ0KPiA+ICsgIC8vDQo+ID4gKyAgQ2hvc2VuTm9kZSA9IGZkdF9wYXRoX29mZnNldCAoRGV2aWNl VHJlZUJhc2UsICIvY2hvc2VuIik7DQo+ID4gKyAgaWYgKENob3Nlbk5vZGUgPCAwKSB7DQo+ID4g KyAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIHN3aXRj aCAoQmxvYi0+TmFtZVswXSkgew0KPiA+ICsgICAgY2FzZSAnayc6DQo+ID4gKyAgICAgIFByb3Ag PSBmZHRfZ2V0cHJvcCAoRGV2aWNlVHJlZUJhc2UsIENob3Nlbk5vZGUsICJsaW51eCxrZXJuZWwt DQo+IHN0YXJ0IiwgJkxlbik7DQo+ID4gKyAgICAgIGlmICgoUHJvcCA9PSBOVUxMKSB8fCAoTGVu IDwgMCkpIHsNCj4gPiArICAgICAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4gPiArICAgICAg fQ0KPiA+ICsNCj4gPiArICAgICAgQmxvYi0+RGF0YSA9IChVSU5UOCAqKWZkdDY0X3RvX2NwdSAo UmVhZFVuYWxpZ25lZDY0IChQcm9wKSk7DQo+ID4gKyAgICAgIFByb3AgICAgICAgPSBmZHRfZ2V0 cHJvcCAoRGV2aWNlVHJlZUJhc2UsIENob3Nlbk5vZGUsICJsaW51eCxrZXJuZWwtDQo+IHNpemUi LCAmTGVuKTsNCj4gPiArICAgICAgaWYgKChQcm9wID09IE5VTEwpIHx8IChMZW4gPCAwKSkgew0K PiA+ICsgICAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiArICAgICAgfQ0KPiA+ICsNCj4g PiArICAgICAgQmxvYi0+U2l6ZSA9IGZkdDY0X3RvX2NwdSAoUmVhZFVuYWxpZ25lZDY0IChQcm9w KSk7DQo+ID4gKyAgICAgIGJyZWFrOw0KPiA+ICsgICAgY2FzZSAnaSc6DQo+ID4gKyAgICAgIFBy b3AgPSBmZHRfZ2V0cHJvcCAoRGV2aWNlVHJlZUJhc2UsIENob3Nlbk5vZGUsICJsaW51eCxpbml0 cmQtc3RhcnQiLA0KPiAmTGVuKTsNCj4gPiArICAgICAgaWYgKChQcm9wID09IE5VTEwpIHx8IChM ZW4gPCAwKSkgew0KPiA+ICsgICAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiArICAgICAg fQ0KPiA+ICsNCj4gPiArICAgICAgSW5pdHJkU3RhcnQgPSBmZHQ2NF90b19jcHUgKFJlYWRVbmFs aWduZWQ2NCAoUHJvcCkpOw0KPiA+ICsgICAgICBCbG9iLT5EYXRhICA9IChVSU5UOCAqKUluaXRy ZFN0YXJ0Ow0KPiA+ICsgICAgICBQcm9wICAgICAgICA9IGZkdF9nZXRwcm9wIChEZXZpY2VUcmVl QmFzZSwgQ2hvc2VuTm9kZSwgImxpbnV4LGluaXRyZC0NCj4gZW5kIiwgJkxlbik7DQo+ID4gKyAg ICAgIGlmICgoUHJvcCA9PSBOVUxMKSB8fCAoTGVuIDwgMCkpIHsNCj4gPiArICAgICAgICByZXR1 cm4gRUZJX1NVQ0NFU1M7DQo+ID4gKyAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgIEluaXRyZEVu ZCAgPSBmZHQ2NF90b19jcHUgKFJlYWRVbmFsaWduZWQ2NCAoUHJvcCkpOw0KPiA+ICsgICAgICBC bG9iLT5TaXplID0gSW5pdHJkRW5kIC0gSW5pdHJkU3RhcnQ7DQo+ID4gKyAgICAgIGJyZWFrOw0K PiA+ICsgICAgY2FzZSAnYyc6DQo+ID4gKyAgICAgIFByb3AgPSBmZHRfZ2V0cHJvcCAoRGV2aWNl VHJlZUJhc2UsIENob3Nlbk5vZGUsICJib290YXJncyIsICZMZW4pOw0KPiA+ICsgICAgICBpZiAo KFByb3AgPT0gTlVMTCkgfHwgKExlbiA8IDApKSB7DQo+ID4gKyAgICAgICAgcmV0dXJuIEVGSV9T VUNDRVNTOw0KPiA+ICsgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICBCbG9iLT5EYXRhID0gKFVJ TlQ4ICopUHJvcDsNCj4gPiArICAgICAgQmxvYi0+U2l6ZSA9IExlbjsNCj4gPiArICAgICAgYnJl YWs7DQo+ID4gKyAgICBkZWZhdWx0Og0KPiA+ICsgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ ID4gKyAgfQ0KPiA+ICsNCj4gPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gK30NCj4gPiAr DQo+ID4gKy8vDQo+ID4gKy8vIFRoZSBlbnRyeSBwb2ludCBvZiB0aGUgZmVhdHVyZS4NCj4gPiAr Ly8NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIERvd25sb2FkIHRoZSBrZXJuZWwsIHRoZSBpbml0 aWFsIHJhbWRpc2ssIGFuZCB0aGUga2VybmVsIGNvbW1hbmQgbGluZQ0KPiBmcm9tDQo+ID4gKyAg bWVtb3J5IG9yIERULiBDb25zdHJ1Y3QgYSBtaW5pbWFsIFNpbXBsZUZpbGVTeXN0ZW0gdGhhdCBj b250YWlucyB0aGUNCj4gdHdvDQo+ID4gKyAgaW1hZ2UgZmlsZXMuDQo+ID4gKw0KPiA+ICsgIEBw YXJhbSBJbWFnZUhhbmRsZSAgSW1hZ2UgaGFuZGxlLg0KPiA+ICsgIEBwYXJhbSBTeXN0ZW1UYWJs ZSAgRUZJIHN5c3RlbSB0YWJsZS4NCj4gPiArDQo+ID4gKyAgQHJldHVybiAgICAgICAgICAgICAg ICAgICAgICAgRXJyb3IgY29kZXMgZnJvbSBhbnkgb2YgdGhlIHVuZGVybHlpbmcNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbnMuIE9uIHN1Y2Nlc3MsIHRoZSBm dW5jdGlvbiBkb2Vzbid0DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuLg0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArQ2xvdWRI dktlcm5lbExvYWRlckZzRHhlRW50cnlwb2ludCAoDQo+ID4gKyAgSU4gRUZJX0hBTkRMRSAgICAg ICAgSW1hZ2VIYW5kbGUsDQo+ID4gKyAgSU4gRUZJX1NZU1RFTV9UQUJMRSAgKlN5c3RlbVRhYmxl DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgVUlOVE4gICAgICAgIEJsb2JUeXBlOw0KPiA+ICsg IEtFUk5FTF9CTE9CICAqQ3VycmVudEJsb2I7DQo+ID4gKyAgS0VSTkVMX0JMT0IgICpLZXJuZWxC bG9iOw0KPiA+ICsgIEVGSV9TVEFUVVMgICBTdGF0dXM7DQo+ID4gKyAgRUZJX0hBTkRMRSAgIEZp bGVTeXN0ZW1IYW5kbGU7DQo+ID4gKyAgRUZJX0hBTkRMRSAgIEluaXRyZExvYWRGaWxlMkhhbmRs ZTsNCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gZ1JULT5HZXRUaW1lICgmbUluaXRUaW1lLCBOVUxM IC8qIENhcGFiaWxpdGllcyAqLyk7DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K PiA+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOiBHZXRUaW1lKCk6ICVyXG4iLCBfX0ZV TkNUSU9OX18sDQo+IFN0YXR1cykpOw0KPiA+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gPiArICB9 DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gRmV0Y2ggYWxsIGJsb2JzLg0KPiA+ICsgIC8v DQo+ID4gKyAgZm9yIChCbG9iVHlwZSA9IDA7IEJsb2JUeXBlIDwgS2VybmVsQmxvYlR5cGVNYXg7 ICsrQmxvYlR5cGUpIHsNCj4gPiArICAgIEN1cnJlbnRCbG9iID0gJm1LZXJuZWxCbG9iW0Jsb2JU eXBlXTsNCj4gPiArICAgIFN0YXR1cyAgICAgID0gRmV0Y2hCbG9iIChDdXJyZW50QmxvYik7DQo+ ID4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICAgIGdvdG8gRnJlZUJs b2JzOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIFN0YXR1cyA9IFZlcmlmeUJsb2IgKA0K PiA+ICsgICAgICAgICAgICAgICBDdXJyZW50QmxvYi0+TmFtZSwNCj4gPiArICAgICAgICAgICAg ICAgQ3VycmVudEJsb2ItPkRhdGEsDQo+ID4gKyAgICAgICAgICAgICAgIEN1cnJlbnRCbG9iLT5T aXplDQo+ID4gKyAgICAgICAgICAgICAgICk7DQo+ID4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQo+ID4gKyAgICAgIGdvdG8gRnJlZUJsb2JzOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4g PiArICAgIG1Ub3RhbEJsb2JCeXRlcyArPSBDdXJyZW50QmxvYi0+U2l6ZTsNCj4gPiArICB9DQo+ ID4gKw0KPiA+ICsgIEtlcm5lbEJsb2IgPSAmbUtlcm5lbEJsb2JbS2VybmVsQmxvYlR5cGVLZXJu ZWxdOw0KPiA+ICsNCj4gPiArICBpZiAoS2VybmVsQmxvYi0+RGF0YSA9PSBOVUxMKSB7DQo+ID4g KyAgICBTdGF0dXMgPSBFRklfTk9UX0ZPVU5EOw0KPiA+ICsgICAgZ290byBGcmVlQmxvYnM7DQo+ ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIENyZWF0ZSBhIG5ldyBoYW5kbGUg d2l0aCBhIHNpbmdsZSBWZW5NZWRpYSgpIG5vZGUgZGV2aWNlIHBhdGgNCj4gcHJvdG9jb2wgb24N Cj4gPiArICAvLyBpdCwgcGx1cyBhIGN1c3RvbSBTaW1wbGVGaWxlU3lzdGVtIHByb3RvY29sIG9u IGl0Lg0KPiA+ICsgIC8vDQo+ID4gKyAgRmlsZVN5c3RlbUhhbmRsZSA9IE5VTEw7DQo+ID4gKyAg U3RhdHVzICAgICAgICAgICA9IGdCUy0+SW5zdGFsbE11bHRpcGxlUHJvdG9jb2xJbnRlcmZhY2Vz ICgNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICZGaWxlU3lzdGVtSGFuZGxlLA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xH dWlkLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1GaWxlU3lzdGVtRGV2aWNl UGF0aCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnRWZpU2ltcGxlRmlsZVN5 c3RlbVByb3RvY29sR3VpZCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtRmls ZVN5c3RlbSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPiA+ICsgICAgREVCVUcgKCgNCj4gPiArICAgICAgREVCVUdfRVJST1IsDQo+ID4gKyAg ICAgICIlYTogSW5zdGFsbE11bHRpcGxlUHJvdG9jb2xJbnRlcmZhY2VzKCk6ICVyXG4iLA0KPiA+ ICsgICAgICBfX0ZVTkNUSU9OX18sDQo+ID4gKyAgICAgIFN0YXR1cw0KPiA+ICsgICAgICApKTsN Cj4gPiArICAgIGdvdG8gRnJlZUJsb2JzOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYgKEtl cm5lbEJsb2JbS2VybmVsQmxvYlR5cGVJbml0cmRdLlNpemUgPiAwKSB7DQo+ID4gKyAgICBJbml0 cmRMb2FkRmlsZTJIYW5kbGUgPSBOVUxMOw0KPiA+ICsgICAgU3RhdHVzICAgICAgICAgICAgICAg ID0gZ0JTLT5JbnN0YWxsTXVsdGlwbGVQcm90b2NvbEludGVyZmFjZXMgKA0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZJbml0cmRMb2FkRmlsZTJIYW5kbGUsDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9j b2xHdWlkLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtSW5pdHJk RGV2aWNlUGF0aCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ0Vm aUxvYWRGaWxlMlByb3RvY29sR3VpZCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmbUluaXRyZExvYWRGaWxlMiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBOVUxMDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsNCj4gPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgICAgREVCVUcg KCgNCj4gPiArICAgICAgICBERUJVR19FUlJPUiwNCj4gPiArICAgICAgICAiJWE6IEluc3RhbGxN dWx0aXBsZVByb3RvY29sSW50ZXJmYWNlcygpOiAlclxuIiwNCj4gPiArICAgICAgICBfX0ZVTkNU SU9OX18sDQo+ID4gKyAgICAgICAgU3RhdHVzDQo+ID4gKyAgICAgICAgKSk7DQo+ID4gKyAgICAg IGdvdG8gVW5pbnN0YWxsRmlsZVN5c3RlbUhhbmRsZTsNCj4gPiArICAgIH0NCj4gPiArICB9DQo+ ID4gKw0KPiA+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiArDQo+ID4gK1VuaW5zdGFsbEZp bGVTeXN0ZW1IYW5kbGU6DQo+ID4gKyAgU3RhdHVzID0gZ0JTLT5Vbmluc3RhbGxNdWx0aXBsZVBy b3RvY29sSW50ZXJmYWNlcyAoDQo+ID4gKyAgICAgICAgICAgICAgICAgIEZpbGVTeXN0ZW1IYW5k bGUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwN Cj4gPiArICAgICAgICAgICAgICAgICAgJm1GaWxlU3lzdGVtRGV2aWNlUGF0aCwNCj4gPiArICAg ICAgICAgICAgICAgICAgJmdFZmlTaW1wbGVGaWxlU3lzdGVtUHJvdG9jb2xHdWlkLA0KPiA+ICsg ICAgICAgICAgICAgICAgICAmbUZpbGVTeXN0ZW0sDQo+ID4gKyAgICAgICAgICAgICAgICAgIE5V TEwNCj4gPiArICAgICAgICAgICAgICAgICAgKTsNCj4gPiArICBBU1NFUlRfRUZJX0VSUk9SIChT dGF0dXMpOw0KPiA+ICsNCj4gPiArRnJlZUJsb2JzOg0KPiA+ICsgIHdoaWxlIChCbG9iVHlwZSA+ IDApIHsNCj4gPiArICAgIEN1cnJlbnRCbG9iID0gJm1LZXJuZWxCbG9iWy0tQmxvYlR5cGVdOw0K PiA+ICsgICAgaWYgKEN1cnJlbnRCbG9iLT5EYXRhICE9IE5VTEwpIHsNCj4gPiArICAgICAgRnJl ZVBvb2wgKEN1cnJlbnRCbG9iLT5EYXRhKTsNCj4gPiArICAgICAgQ3VycmVudEJsb2ItPlNpemUg PSAwOw0KPiA+ICsgICAgICBDdXJyZW50QmxvYi0+RGF0YSA9IE5VTEw7DQo+ID4gKyAgICB9DQo+ ID4gKyAgfQ0KPiA+ICsNCj4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICt9DQo+ID4gZGlmZiAt LWdpdA0KPiBhL0FybVZpcnRQa2cvQ2xvdWRIdktlcm5lbExvYWRlckZzRHhlL0Nsb3VkSHZLZXJu ZWxMb2FkZXJGc0R4ZS5pbmYNCj4gYi9Bcm1WaXJ0UGtnL0Nsb3VkSHZLZXJuZWxMb2FkZXJGc0R4 ZS9DbG91ZEh2S2VybmVsTG9hZGVyRnNEeGUuaW5mDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQN Cj4gPiBpbmRleCAwMDAwMDAwMDAwLi5iN2FhNmViYjRlDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ ICsrKw0KPiBiL0FybVZpcnRQa2cvQ2xvdWRIdktlcm5lbExvYWRlckZzRHhlL0Nsb3VkSHZLZXJu ZWxMb2FkZXJGc0R4ZS5pbmYNCj4gPiBAQCAtMCwwICsxLDU2IEBADQo+ID4gKyMjICBAZmlsZQ0K PiA+ICsjICBEWEUgZHJpdmVyIHRvIGV4cG9zZSB0aGUgJ2tlcm5lbCcsICdpbml0cmQnIGFuZCAn Y21kbGluZScgYmxvYnMNCj4gPiArIyAgcHJvdmlkZWQgYnkgQ2xvdWQgSHlwZXJ2aXNvciBhcyBm aWxlcyBpbiBhbiBhYnN0cmFjdCBmaWxlIHN5c3RlbQ0KPiA+ICsjDQo+ID4gKyMgIENvcHlyaWdo dCAoQykgMjAyMiwgQXJtLCBMaW1pdGVkLg0KPiA+ICsjDQo+ID4gKyMgIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gKyMjDQo+ID4gKw0KPiA+ICtbRGVm aW5lc10NCj4gPiArICBJTkZfVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgPSAweDAwMDEwMDFC DQo+ID4gKyAgQkFTRV9OQU1FICAgICAgICAgICAgICAgICAgICAgID0gQ2xvdWRIdktlcm5lbExv YWRlckZzRHhlDQo+ID4gKyAgRklMRV9HVUlEICAgICAgICAgICAgICAgICAgICAgID0gNTdjZGY1 NDEtMmEyOS00YWU0LTk3ZTUtNzZhNGFhMmZlMDkwDQo+ID4gKyAgTU9EVUxFX1RZUEUgICAgICAg ICAgICAgICAgICAgID0gRFhFX0RSSVZFUg0KPiA+ICsgIFZFUlNJT05fU1RSSU5HICAgICAgICAg ICAgICAgICA9IDEuMA0KPiA+ICsgIEVOVFJZX1BPSU5UICAgICAgICAgICAgICAgICAgICA9IENs b3VkSHZLZXJuZWxMb2FkZXJGc0R4ZUVudHJ5cG9pbnQNCj4gPiArDQo+ID4gK1tTb3VyY2VzXQ0K PiA+ICsgIENsb3VkSHZLZXJuZWxMb2FkZXJGc0R4ZS5jDQo+ID4gKw0KPiA+ICtbUGFja2FnZXNd DQo+ID4gKyAgQXJtVmlydFBrZy9Bcm1WaXJ0UGtnLmRlYw0KPiA+ICsgIE1kZU1vZHVsZVBrZy9N ZGVNb2R1bGVQa2cuZGVjDQo+ID4gKyAgRW1iZWRkZWRQa2cvRW1iZWRkZWRQa2cuZGVjDQo+ID4g KyAgTWRlUGtnL01kZVBrZy5kZWMNCj4gPiArICBPdm1mUGtnL092bWZQa2cuZGVjDQo+ID4gKyAg VW5pdFRlc3RGcmFtZXdvcmtQa2cvVW5pdFRlc3RGcmFtZXdvcmtQa2cuZGVjDQo+ID4gKw0KPiA+ ICtbTGlicmFyeUNsYXNzZXNdDQo+ID4gKyAgQmFzZUxpYg0KPiA+ICsgIEJhc2VNZW1vcnlMaWIN Cj4gPiArICBEZWJ1Z0xpYg0KPiA+ICsgIERldmljZVBhdGhMaWINCj4gPiArICBGZHRMaWINCj4g PiArICBNZW1vcnlBbGxvY2F0aW9uTGliDQo+ID4gKyAgUGNkTGliDQo+ID4gKyAgVWVmaUJvb3RT ZXJ2aWNlc1RhYmxlTGliDQo+ID4gKyAgVWVmaURyaXZlckVudHJ5UG9pbnQNCj4gPiArICBVZWZp UnVudGltZVNlcnZpY2VzVGFibGVMaWINCj4gPiArDQo+ID4gK1tHdWlkc10NCj4gPiArICBnRWZp RmlsZUluZm9HdWlkDQo+ID4gKyAgZ0VmaUZpbGVTeXN0ZW1JbmZvR3VpZA0KPiA+ICsgIGdFZmlG aWxlU3lzdGVtVm9sdW1lTGFiZWxJbmZvSWRHdWlkDQo+ID4gKyAgZ1FlbXVLZXJuZWxMb2FkZXJG c01lZGlhR3VpZA0KPiA+ICsNCj4gPiArW1Byb3RvY29sc10NCj4gPiArICBnRWZpRGV2aWNlUGF0 aFByb3RvY29sR3VpZCAgICAgICAgICAgICAgICAjIyBQUk9EVUNFUw0KPiA+ICsgIGdFZmlMb2Fk RmlsZTJQcm90b2NvbEd1aWQgICAgICAgICAgICAgICAgICMjIFBST0RVQ0VTDQo+ID4gKyAgZ0Vm aVNpbXBsZUZpbGVTeXN0ZW1Qcm90b2NvbEd1aWQgICAgICAgICAgIyMgUFJPRFVDRVMNCj4gPiAr DQo+ID4gK1tEZXBleF0NCj4gPiArICBnRWZpUmVhbFRpbWVDbG9ja0FyY2hQcm90b2NvbEd1aWQN Cj4gPiArDQo+ID4gK1tGaXhlZFBjZF0NCj4gPiArICBnQXJtVmlydFRva2VuU3BhY2VHdWlkLlBj ZERldmljZVRyZWVJbml0aWFsQmFzZUFkZHJlc3MNCg==