From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (NAM11-DM6-obe.outbound.protection.outlook.com [40.107.223.65]) by mx.groups.io with SMTP id smtpd.web08.2039.1663727674811948755 for ; Tue, 20 Sep 2022 19:34:35 -0700 Authentication-Results: mx.groups.io; dkim=fail, err=mail: missing word in phrase: charset not supported: "big5"; spf=pass (domain: ami.com, ip: 40.107.223.65, mailfrom: richardho@ami.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cP+w6lOWc5czuDWisbGpfnieunvwxgEHEZzrlH7YASYBATOfA+glvyxB9bCpC2M0yl0NI3U7uSJX5lj/svwEfwupnjseba8R8wH+l/08o1qcaCBG07xYgodBfowPyg/aD2go/RykaS7BJ1CCs1u9quq3E6ABFf2DEVFeRvBFvx02kNuerfvq53rM6qrDnbnDtXcrpBBsyddXel7mxlypBeHYJ6QcJt5lGn6nDHFNg50x9iug1+0RMNxE++IiSDmKA97b2UK3v/c7cyDltTO/7bmZJBx7wGndnirqwN3u/krjBK1ROl68MRzNKhu5+CFty1MB4fSSCjKurH8b6inrYA== 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=JAMwqdpSjqOsKj5SC3g7WU2ZBJJmhYDZ0auFgl3ugSY=; b=UYPHzitupPS6d5wDkz/rua7+4uIlX1UQFjKsxrqJmBayRwZSxS1yN6HS03tggvNvQcQ9/E1fi4kVlS/HwIEazhoLohDM5J828fpr64FD3JHFyJ5WXuxncp0nrmisKVW5YesfiuqYyvaxLZiF+ZQNH2bYIuxEMaGMInqpJIZXuLGhM2+vcdWmM1BJ4rz6F25ibgG3egquZ5DsCM0lhXgvH6VqtpescPhun5dtbepY2vLzQpEu98cJw5mgniuv3M4KWLSFQhnJe2UDIPtHEXxaFJcPq8ssnRh1gCVge1BBpM7VZsO6iW216HOlkHmkkY1pKlnEwpFMeVadHK9muVlfYA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=ami.com; dmarc=pass action=none header.from=ami.com; dkim=pass header.d=ami.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ami.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=JAMwqdpSjqOsKj5SC3g7WU2ZBJJmhYDZ0auFgl3ugSY=; b=gkwy099FiK0rrRo94eV5jxgfSarYL+w7+p8BcNBgtlU/T69hXlR1hmuZEQqi92muvmMlyoBAsqdG1Fgsx0EkT/hMiRug8HHs1YrpV/B6Zxnh5Fh+tKQg7DLV8OK6lwUFv35zMs6xwcfOrqgLI5rkv8yKt4JFc6UNqkZCxk/fNfA= Received: from DM5PR10MB1660.namprd10.prod.outlook.com (2603:10b6:4:6::13) by SA2PR10MB4521.namprd10.prod.outlook.com (2603:10b6:806:117::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5654.14; Wed, 21 Sep 2022 02:34:32 +0000 Received: from DM5PR10MB1660.namprd10.prod.outlook.com ([fe80::d52b:e905:f4fb:2b52]) by DM5PR10MB1660.namprd10.prod.outlook.com ([fe80::d52b:e905:f4fb:2b52%10]) with mapi id 15.20.5632.021; Wed, 21 Sep 2022 02:34:32 +0000 From: =?UTF-8?B?UmljaGFyZEhvIFvkvZXmmI7lv6Bd?= To: "devel@edk2.groups.io" , "abner.chang@amd.com" , "quic_rcran@quicinc.com" CC: Andrew Fish , Leif Lindholm , Michael D Kinney , Michael Kubacki , Zhiguang Liu , Liming Gao , =?big5?B?VG9ueUxvIFvDuar3qlFd?= Subject: Re: [edk2-devel] [PATCH] UsbNetworkPkg: add USB network devices support Thread-Topic: [EXTERNAL] Re: [edk2-devel] [PATCH] UsbNetworkPkg: add USB network devices support Thread-Index: AQHYvoxJHCaS+XfGmkKn0h/vNPlrZ63MrkMAgAoAM9CABHir8IAATFFwgA3Uz+A= Date: Wed, 21 Sep 2022 02:34:32 +0000 Message-ID: References: <20220902052418.2253-1-richardho@ami.com> In-Reply-To: Accept-Language: zh-TW, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Enabled=true; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_SetDate=2022-09-12T07:55:52Z; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Method=Standard; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Name=General; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_SiteId=3dd8961f-e488-4e60-8e11-a82d994e183d; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_ActionId=1f56ead5-c03e-484c-9b09-88011bb4db9f; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_ContentBits=1 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=ami.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DM5PR10MB1660:EE_|SA2PR10MB4521:EE_ x-ms-office365-filtering-correlation-id: b7f2683c-fa23-4e78-c6f5-08da9b79d0bc x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: /if36GMOM3CwegcUHEseVmvWXATj5swm6So2k+dK2NCwOmPJ1gXuYHVInET83RaEjEIHCuqgsBabbwAhkup45HmKLJR5tZujTCky8obgkZH21BqGR+SDpA670kvu5vJv6EXUusgXEjF5rH1uRP4cEM0Y8fsa/80vn4FWGZtUUCQTSlwrezeyArJpLI7MZlK6o2y0qQHC/hIrMd3EH90k9ujQjs0BHSbJNp56SAmoikOkQ0x8KkcsL9MqnjmVQWtwzzoo01FpkzgqefIzgUlEW+tE2Mb1ibiLrSqBPL6C9CNiT6LlMKEhcWiiGYrOLa8fsjGApiVCwvRKcl50vi3u7hrYxlqSEk+TWH8B8clrcAhRWK1UMhSlWg8q0GCRgru8T8HM7gP4Vk+mrsMleZ5sYHuntmdkTHwjyz2y0rJI7AFVX42erel1iFK2K2HrwNxfpCDPa3vDKjl7VmThKH5DhC/Y0UnGTo7Go1V3ND67E8GVQ+He3UpEGNEz5YwDMmIci2fGH/YECy2PsA2tOHMPfftEbnAy3C+WoMpjrPtB4SIFmvVIXr23sP2PVh5XBFpG08H93wBrVCflmbpVo4X0z0Lyhwb3k3pKg1zscllVSAd8EPle6CYeeYX3iyIwC5BN+ItpGKfNKZ6YCW9/j9Mu8SOIsMguktDWYu41wQv6dWLSaCGkRL7+CImaFy0+kdfk9v6oFjOClSgakVrdnzKXwa4wQKiwZGaz0QNePGVVf7MSH8fzcuz7WklZjmveAvGUDz74IhAkdtdxmcdtODeKJRT/qXyt0jI6sIbOb+dT+z8= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM5PR10MB1660.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(376002)(366004)(136003)(39850400004)(346002)(396003)(451199015)(186003)(83380400001)(26005)(9686003)(53546011)(30864003)(33656002)(86362001)(4326008)(66556008)(66476007)(66446008)(64756008)(8676002)(110136005)(40140700001)(66946007)(54906003)(316002)(122000001)(966005)(52536014)(2906002)(5660300002)(478600001)(38100700002)(8936002)(7696005)(55016003)(76116006)(85182001)(38070700005)(45080400002)(6506007)(71200400001)(41300700001)(579004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?big5?B?L0IzRG1nVkIrNGViQ1JnYWVvZGNRYS9JOTJBa3RES2ZaNkk0ejRVNHh4aGpIUU1O?= =?big5?B?ZllUZkpwdVVWcEVVZDI2cWROdnZ2ZXliMlU4cWVXUm9UV1dwOUxVd0ZyL3EvUkNP?= =?big5?B?c0FJQzI4SWFwL1FZQ1ROb0RkU1NKUHRBZ091eXdUdUlVQ2J0eU9odUJqaElFd1Zm?= =?big5?B?U0pnb1hwamtyL0NOV2JmZHdsQWpRT1JXbUZjanArcVNaS2pSclo3aWdaYnRLOEdE?= =?big5?B?TGQzWThHTzhSN2g3T0hCZ29RUk5XTDlXcHBzdTdTRDNyTkpMRFVFZGFhSWJGY042?= =?big5?B?MjdwZWZoUWRXdDduaWQwK1czNkxnL0ZZQ1hOdHluYmQxVnYxOW0rTVJPNDJJUllh?= =?big5?B?YmkxVitWckZXY00zcHpiT3ZsaStmeDUzZTJWcmJrWG5TZzhvM3o3YkR1ZkhSYzZR?= =?big5?B?K1NPMXdiRlkrK2FUVld5U2djU3QxTFg0czlsOHd0U2l4QVhhTDk0NS9yS21rc1NJ?= =?big5?B?ZTgyREFaZzRiM01mTVZIL0dXTzBpeDhoNWRCWXU3c0dIOUxiWVdRT2x6ODJqamZO?= =?big5?B?SC9SVTU1ZExadXMwTUwyWjJoejlkbmlMTTVndjEwdTRyelIxa0NCbkp3dnFxS3Rt?= =?big5?B?REdjZ1lmbVVIemkvRVNIbHVRSGF0UHYxNWUzbW9rMG9yd2NoVGRNWmdlWnA4cXZ0?= =?big5?B?eHE4ZHk2ZG9PZWVQZXZaUS9LL3dnQysveHpoTEVtVnZtTnFKVEp3SnRpYVlhazJs?= =?big5?B?NnRKMGZCYXlwZFE2MExyaXpZM1Q1TE94cTRVMGVPU2loUXFuWnB6K2FZM0hFUC83?= =?big5?B?cjE4UmtvaWJFVGhSZjh6VFdVR29HdGZoVkRKQmdBdkdJTTZ2WlRNQncrVVZOVXRt?= =?big5?B?QzZva1M1SStTaHlGWDdIK3VIeGRZUmhibzdCUnV4Qm9HbE1KWkJvNklHVnZFWDBh?= =?big5?B?dHd6V0c5RnVpOWgwQU40WVFwOTUvVXFUVVdaMGNvbE9SY1BlWGw5VUUxbjJ4M2hn?= =?big5?B?ZkF4a0NQSWk3eTE2MUxrbXpOSXRkNXF1akFNZHVScjU3MnBVbzhqOEgyL2hIME1P?= =?big5?B?VTRTcE5sZ05XOGUwZHh0WE5vMWhNc0l0VWF4KzI4MlF4YVBDK2FDUzRhRHB2STlJ?= =?big5?B?czFrb2NaUi8wUTU1YmdlUjB1dTJ6NlJDQ3RoUExUQzF3ZHFGUDNVNXBPYlZ2WnFp?= =?big5?B?eHN0OU9TcTFoOWZ2RWU2Q0kvNDVGKzlmQURuZkdFbThLNFZldlZpb3d6WS80T2lv?= =?big5?B?ZXg0OGQ1OGp0NDJYNzlqYThwRjZFSXdxaFZjWEtheE8zWkNheHhnVzBRa055Wm9i?= =?big5?B?UHk3RnZVdkxWSUI5K1h6blFrVW81eE1ONnN1ZkRxQzVGczN2TWVUQUQvWE1RTDBq?= =?big5?B?ZkVjWjhpSjR5VDhRdlY4bnR5ZkpPOHZpbVV3TXp5ZGl1b0d1aUo4YmZVa1FnQ0tI?= =?big5?B?WHpZQ1NhTjJaVzVTeEhiZU1nNy9qaVdjK1RQaDhsaXFLK3BXNG8ySW1pcGhROUx0?= =?big5?B?bzVmUFVJMnZleUI4YVhGcFFmWW5Yc0ZiZ2tWdG5ISmNNYzVaUDNTZFJUV21ncVpD?= =?big5?B?UUFzYU5TaWJ2ZXFZV2RzNmRQR0Y3OGdIOHcwODJaYzVjSzBsYk1OcGZWYmxVVmhP?= =?big5?B?UzR2Zk02Ris4ODY0Wi9aUWFJVUtRZGl3U0I0L0dwU05HL01PQ3JxS0ZxQ01WK0lH?= =?big5?B?dGZmZUJtTFJBU3NISUQ4amRhYjF3MzFWYm1kSXk5c1NtME1mU0VzbTBFVVp6d1gw?= =?big5?B?YWJvcXk5TlIvKzJHdXZ1bjhuRkxqaFNvd2tOR0VITld2d3E1MmtqY1htOTVpWnNQ?= =?big5?B?QmZibXV5dGViby9KWndmemRVVUxCOC92LzkxUy9HdFBlUFNseHVZNDRkSVl4cFJB?= =?big5?B?aW1WRXNIeGREWUs5cTZLUUt1RVRQYkVNemF6SzdoME1XMHRCdXQ2YmthWTErd1k1?= =?big5?B?d3hhRVNOU216RlFyMTNKaHhQVWVJQ3V5a0NFcE9kdklodUEycGc2Z0laM0JPVDU1?= =?big5?B?TldJQkNrdVhKTUFZKzdRcHZHRkdFYllweE5KczdCZ0FreG9nN1R0NU9sZERLdXAy?= =?big5?Q?uv9iXw7tSApzUODh?= MIME-Version: 1.0 X-OriginatorOrg: ami.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM5PR10MB1660.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: b7f2683c-fa23-4e78-c6f5-08da9b79d0bc X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Sep 2022 02:34:32.1102 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 27e97857-e15f-486c-b58e-86c2b3040f93 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: zeqWiGr3f7ZgGLGqmgS0Hx+O2AxIM0HF9wNXol/jczc0pHBMGFZEdLlHO3jDcpYpHucET4Ic8sc4fA2+zmS/eQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR10MB4521 Content-Language: zh-TW Content-Type: text/plain; charset="big5" Content-Transfer-Encoding: base64 SGkgQWJuZXIsDQoNCkZvciAjNCwgVG8gc2VlIGJlbG93IGNvZGUuIFJORElTIGRyaXZlciBwcm92 aWRlIHRoZSBSbmRpc1VuZGlTdGFydCByb3V0aW5lLg0KICAgICAgICAgICAgICBJdCBjb3VsZCBl eGVjdXRlIFJuZGlzVW5kaVN0YXJ0IGluIFVuZGlTdGFydCByb3V0aW5lIGVuZC4NCiAgICAgICAg ICAgICAgVGhlIHVwcGVyIGxheWVyIGRyaXZlciBub3QgbmVlZCB0byBrbm93IHRoZSBVU0IgQ0RD IGRyaXZlciBpbnRlcmZhY2UgY2xhc3MuDQogICAgICAgICAgICAgIEl0IG9ubHkgcHJvdmlkZSB0 aGUgVVNCX0VUSEVSTkVUX1BST1RPQ09MLiBUaGUgVU5ESSBwcm90b2NvbCBpcyBlYXN5IHRvIGNv bnRyb2wgYnkgTmV0d29ya0NvbW1vbiBkcml2ZXIuDQoNCkkgaGF2ZSBjb252ZXJ0IHRoZSBVU0Jf RVRIRVJORVRfUFJPVE9DT0wgdG8gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MLCB3aWxsIHNl bmQgdGhlIHBhdGNoIG5leHQuDQoNCiAgVXNiUm5kaXNEZXZpY2UtPlNpZ25hdHVyZSAgICAgICAg ICAgICAgICAgICAgICAgICAgPSBVU0JfUk5ESVNfU0lHTkFUVVJFOw0KICBVc2JSbmRpc0Rldmlj ZS0+TnVtT2ZJbnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICA9IEludGVyZmFjZS5JbnRlcmZh Y2VOdW1iZXI7DQogIFVzYlJuZGlzRGV2aWNlLT5Vc2JSbmRpc0hhbmRsZSAgICAgICAgICAgICAg ICAgICAgID0gUm5kaXNIYW5kbGU7DQogIFVzYlJuZGlzRGV2aWNlLT5Vc2JDZGNEYXRhSGFuZGxl ICAgICAgICAgICAgICAgICAgID0gMDsNCiAgVXNiUm5kaXNEZXZpY2UtPlVzYklvICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgPSBVc2JJbzsNCg0KLy8gLS0tLS0tIEJlbG93IGlzIGZvciBV U0JfRVRIRVJORVRfUFJPVE9DT0wNCiAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhSZWNl aXZlICAgICAgICAgICAgICAgPSBSbmRpc1VuZGlSZWNlaXZlOw0KICBVc2JSbmRpc0RldmljZS0+ VXNiRXRoLlVzYkV0aFRyYW5zbWl0ICAgICAgICAgICAgICA9IFJuZGlzVW5kaVRyYW5zbWl0Ow0K ICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aEludGVycnVwdCAgICAgICAgICAgICA9IFVz YlJuZGlzSW50ZXJydXB0Ow0KICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aE1hY0FkZHJl c3MgICAgICAgICAgICA9IEdldFVzYkV0aE1hY0FkZHJlc3M7DQogIFVzYlJuZGlzRGV2aWNlLT5V c2JFdGguVXNiRXRoTWF4QnVsa1NpemUgICAgICAgICAgID0gVXNiRXRoQnVsa1NpemU7DQogIFVz YlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiSGVhZGVyRnVuRGVzY3JpcHRvciAgICAgID0gR2V0VXNi SGVhZGVyRnVuRGVzY3JpcHRvcjsNCiAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JVbmlvbkZ1 bkRlc2NyaXB0b3IgICAgICAgPSBHZXRVc2JVbmlvbkZ1bkRlc2NyaXB0b3I7DQogIFVzYlJuZGlz RGV2aWNlLT5Vc2JFdGguVXNiRXRoRnVuRGVzY3JpcHRvciAgICAgICAgID0gR2V0VXNiUm5kaXNG dW5EZXNjcmlwdG9yOw0KICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlNldFVzYkV0aE1jYXN0Rmls dGVyICAgICAgICA9IFNldFVzYlJuZGlzTWNhc3RGaWx0ZXI7DQogIFVzYlJuZGlzRGV2aWNlLT5V c2JFdGguU2V0VXNiRXRoUG93ZXJQYXR0ZXJuRmlsdGVyID0gU2V0VXNiUm5kaXNQb3dlckZpbHRl cjsNCiAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5HZXRVc2JFdGhQb2V3clBhdHRlcm5GaWx0ZXIg PSBHZXRVc2JSbmRpc1Bvd2VyRmlsdGVyOw0KICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlNldFVz YkV0aFBhY2tldEZpbHRlciAgICAgICA9IFNldFVzYlJuZGlzUGFja2V0RmlsdGVyOw0KICBVc2JS bmRpc0RldmljZS0+VXNiRXRoLkdldFVzYkV0aFN0YXRpc3RpYyAgICAgICAgICA9IEdldFJuZGlz U3RhdGlzdGljOw0KDQovLyAtLS0tLS0tIEJlbG93IGlzIGZvciBVTkRJIEhvb2sNCiAgVXNiUm5k aXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlHZXRTdGF0ZSAgICAgICAgPSBS bmRpc0R1bW15UmV0dXJuOw0KICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNi RXRoVW5kaVN0YXJ0ICAgICAgICAgICA9IFJuZGlzVW5kaVN0YXJ0Ow0KICBVc2JSbmRpc0Rldmlj ZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaVN0b3AgICAgICAgICAgICA9IFJuZGlzVW5k aVN0b3A7DQogIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpR2V0 SW5pdEluZm8gICAgID0gUm5kaXNVbmRpR2V0SW5pdEluZm87DQogIFVzYlJuZGlzRGV2aWNlLT5V c2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpR2V0Q29uZmlnSW5mbyAgID0gUm5kaXNVbmRpR2V0 Q29uZmlnSW5mbzsNCiAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhVbmRpLlVzYkV0aFVu ZGlJbml0aWFsaXplICAgICAgPSBSbmRpc1VuZGlJbml0aWFsaXplOw0KICBVc2JSbmRpc0Rldmlj ZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaVJlc2V0ICAgICAgICAgICA9IFJuZGlzVW5k aVJlc2V0Ow0KICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaVNo dXRkb3duICAgICAgICA9IFJuZGlzVW5kaVNodXRkb3duOw0KICBVc2JSbmRpc0RldmljZS0+VXNi RXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaUludGVycnVwdEVuYWJsZSA9IFJuZGlzRHVtbXlSZXR1 cm47DQogIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpUmVjZWl2 ZUZpbHRlciAgID0gUm5kaXNVbmRpUmVjZWl2ZUZpbHRlcjsNCiAgVXNiUm5kaXNEZXZpY2UtPlVz YkV0aC5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlTdGF0aW9uQWRkcmVzcyAgPSBSbmRpc0R1bW15UmV0 dXJuOw0KICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaVN0YXRp c3RpY3MgICAgICA9IE5VTEw7DQogIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5V c2JFdGhVbmRpTWNhc3RJcDJNYWMgICAgID0gUm5kaXNEdW1teVJldHVybjsNCiAgVXNiUm5kaXNE ZXZpY2UtPlVzYkV0aC5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlOdkRhdGEgICAgICAgICAgPSBSbmRp c0R1bW15UmV0dXJuOw0KICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRo VW5kaUdldFN0YXR1cyAgICAgICA9IFJuZGlzVW5kaUdldFN0YXR1czsNCiAgVXNiUm5kaXNEZXZp Y2UtPlVzYkV0aC5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlGaWxsSGVhZGVyICAgICAgPSBSbmRpc0R1 bW15UmV0dXJuOw0KICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5k aVRyYW5zbWl0ICAgICAgICA9IE5VTEw7DQogIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRo VW5kaS5Vc2JFdGhVbmRpUmVjZWl2ZSAgICAgICAgID0gTlVMTDsNCg0KVW5kaVN0YXJ0ICgNCiAg SU4gIFBYRV9DREIgICAqQ2RiLA0KICBJTiAgTklDX0RBVEEgICpOaWMNCiAgKQ0Kew0KICBQWEVf Q1BCX1NUQVJUXzMxICAqQ3BiOw0KICBFRklfU1RBVFVTICAgICAgICBTdGF0dXM7DQoNCiAgaWYg KChDZGItPk9wQ29kZSAhPSBQWEVfT1BDT0RFX1NUQVJUKSB8fA0KICAgICAgKENkYi0+U3RhdENv ZGUgIT0gUFhFX1NUQVRDT0RFX0lOSVRJQUxJWkUpIHx8DQogICAgICAoQ2RiLT5TdGF0RmxhZ3Mg IT0gUFhFX1NUQVRGTEFHU19JTklUSUFMSVpFKSB8fA0KICAgICAgKENkYi0+SUZudW0gPj0gKGdQ eGUtPklGY250IHwgZ1B4ZS0+SUZjbnRFeHQgPDwgOCkpIHx8DQogICAgICAoQ2RiLT5DUEJzaXpl ICE9IHNpemVvZiAoUFhFX0NQQl9TVEFSVF8zMSkpIHx8DQogICAgICAoQ2RiLT5EQnNpemUgIT0g UFhFX0RCU0laRV9OT1RfVVNFRCkgfHwNCiAgICAgIChDZGItPkRCYWRkciAhPSBQWEVfREJBRERS X05PVF9VU0VEKSB8fA0KICAgICAgKENkYi0+T3BGbGFncyAhPSBQWEVfT1BGTEFHU19OT1RfVVNF RCkpDQogIHsNCiAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlM RUQ7DQogICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQogICAg cmV0dXJuOw0KICB9IGVsc2Ugew0KICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19D T01NQU5EX0NPTVBMRVRFOw0KICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX1NVQ0NF U1M7DQogIH0NCg0KICBpZiAoTmljLT5TdGF0ZSAhPSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9T VE9QUEVEKSB7DQogICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJ TEVEOw0KICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0FMUkVBRFlfU1RBUlRFRDsN CiAgICByZXR1cm47DQogIH0NCg0KICBDcGIgPSAoUFhFX0NQQl9TVEFSVF8zMSAqKShVSU5UTilD ZGItPkNQQmFkZHI7DQoNCiAgTmljLT5QeGVTdGFydC5EZWxheSAgICAgPSBDcGItPkRlbGF5Ow0K ICBOaWMtPlB4ZVN0YXJ0LlZpcnQyUGh5cyA9IENwYi0+VmlydDJQaHlzOw0KICBOaWMtPlB4ZVN0 YXJ0LkJsb2NrICAgICA9IENwYi0+QmxvY2s7DQogIE5pYy0+UHhlU3RhcnQuTWFwX01lbSAgID0g MDsNCiAgTmljLT5QeGVTdGFydC5Vbk1hcF9NZW0gPSAwOw0KICBOaWMtPlB4ZVN0YXJ0LlN5bmNf TWVtICA9IENwYi0+U3luY19NZW07DQogIE5pYy0+UHhlU3RhcnQuVW5pcXVlX0lEID0gQ3BiLT5V bmlxdWVfSUQ7DQogIE5pYy0+U3RhdGUgICAgICAgICAgICAgID0gUFhFX1NUQVRGTEFHU19HRVRf U1RBVEVfU1RBUlRFRDsNCg0KICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5k aVN0YXJ0ICE9IE5VTEwpIHsNCiAgICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5V c2JFdGhVbmRpU3RhcnQgKENkYiwgTmljKTsgICAgPC0tLSBSbmRpc1VuZGlTdGFydA0KICAgIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCiAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRG TEFHU19DT01NQU5EX0ZBSUxFRDsNCiAgICB9DQogIH0NCn0NCg0KVGhhbmtzLA0KUmljaGFyZA0K DQoNCi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBkZXZlbEBlZGsyLmdyb3Vwcy5p byA8ZGV2ZWxAZWRrMi5ncm91cHMuaW8+IE9uIEJlaGFsZiBPZiBDaGFuZywgQWJuZXIgdmlhIGdy b3Vwcy5pbw0KU2VudDogMjAyMqZ+OaTrMTKk6SAzOjU2IFBNDQpUbzogUmljaGFyZEhvIFum86n6 qb5dIDxSaWNoYXJkSG9AYW1pLmNvbT47IGRldmVsQGVkazIuZ3JvdXBzLmlvOyBxdWljX3JjcmFu QHF1aWNpbmMuY29tDQpDYzogQW5kcmV3IEZpc2ggPGFmaXNoQGFwcGxlLmNvbT47IExlaWYgTGlu ZGhvbG0gPHF1aWNfbGxpbmRob2xAcXVpY2luYy5jb20+OyBNaWNoYWVsIEQgS2lubmV5IDxtaWNo YWVsLmQua2lubmV5QGludGVsLmNvbT47IE1pY2hhZWwgS3ViYWNraSA8bWljaGFlbC5rdWJhY2tp QG1pY3Jvc29mdC5jb20+OyBaaGlndWFuZyBMaXUgPHpoaWd1YW5nLmxpdUBpbnRlbC5jb20+OyBM aW1pbmcgR2FvIDxnYW9saW1pbmdAYnlvc29mdC5jb20uY24+OyBUb255TG8gW8O5qveqUV0gPFRv bnlMb0BhbWkuY29tPg0KU3ViamVjdDogW0VYVEVSTkFMXSBSZTogW2VkazItZGV2ZWxdIFtQQVRD SF0gVXNiTmV0d29ya1BrZzogYWRkIFVTQiBuZXR3b3JrIGRldmljZXMgc3VwcG9ydA0KDQoNCioq Q0FVVElPTjogVGhlIGUtbWFpbCBiZWxvdyBpcyBmcm9tIGFuIGV4dGVybmFsIHNvdXJjZS4gUGxl YXNlIGV4ZXJjaXNlIGNhdXRpb24gYmVmb3JlIG9wZW5pbmcgYXR0YWNobWVudHMsIGNsaWNraW5n IGxpbmtzLCBvciBmb2xsb3dpbmcgZ3VpZGFuY2UuKioNCg0KW0FNRCBPZmZpY2lhbCBVc2UgT25s eSAtIEdlbmVyYWxdDQoNCkhpIFJpY2hhcmQsIHRoYW5rcyBmb3IgdGhlIHJlcGx5LiBNeSBmZWVk YmFjayBpbiBsaW5lIGJlbG93LA0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZy b206IFJpY2hhcmRIbyBbpvOp+qm+XSA8UmljaGFyZEhvQGFtaS5jb20+DQo+IFNlbnQ6IE1vbmRh eSwgU2VwdGVtYmVyIDEyLCAyMDIyIDExOjQ4IEFNDQo+IFRvOiBDaGFuZywgQWJuZXIgPEFibmVy LkNoYW5nQGFtZC5jb20+OyBkZXZlbEBlZGsyLmdyb3Vwcy5pbzsNCj4gcXVpY19yY3JhbkBxdWlj aW5jLmNvbQ0KPiBDYzogQW5kcmV3IEZpc2ggPGFmaXNoQGFwcGxlLmNvbT47IExlaWYgTGluZGhv bG0NCj4gPHF1aWNfbGxpbmRob2xAcXVpY2luYy5jb20+OyBNaWNoYWVsIEQgS2lubmV5DQo+IDxt aWNoYWVsLmQua2lubmV5QGludGVsLmNvbT47IE1pY2hhZWwgS3ViYWNraQ0KPiA8bWljaGFlbC5r dWJhY2tpQG1pY3Jvc29mdC5jb20+OyBaaGlndWFuZyBMaXUNCj4gPHpoaWd1YW5nLmxpdUBpbnRl bC5jb20+OyBMaW1pbmcgR2FvIDxnYW9saW1pbmdAYnlvc29mdC5jb20uY24+Ow0KPiBUb255TG8g W8O5qveqUV0NCj4gPFRvbnlMb0BhbWkuY29tPg0KPiBTdWJqZWN0OiBSRTogW0VYVEVSTkFMXSBS RTogW2VkazItZGV2ZWxdIFtQQVRDSF0gVXNiTmV0d29ya1BrZzogYWRkDQo+IFVTQiBuZXR3b3Jr IGRldmljZXMgc3VwcG9ydA0KPg0KPiBbQ0FVVElPTjogRXh0ZXJuYWwgRW1haWxdDQo+DQo+IEhp IEFibmVyLA0KPg0KPiBBbnMgIzEuIEkgdGhpbmsgdGhlIFVTQiBuZXR3b3JrIGZlYXR1cmUgaXMg YmV0dGVyIGluIHRoZQ0KPiBVc2JOZXR3b3JrUGtnLiBJdCBpcyBlYXN5IHRvIGNvbnRyb2wgVVNC IG5ldHdvcmsgc3RhY2sgaW4gdGhpcyBwYWNrYWdlLg0KPiAgICAgICAgICAgICAgIFRoZSBwYWNr YWdlIGlzIHNhbWUgYXMgTmV0d29ya1BrZyhUaGUgTmV0d29ya1BrZyBnYXRoZXJzDQo+IGFsbCBu ZXR3b3JrIHN0YWNrIGZlYXR1cmVzKS4gVGhlIFVzYk5ldHdvcmtQa2cgY291bGQgZ2F0aGVyIHRo ZSBVU0INCj4gbmV0d29yayBzdGFjay4NClVzYk5ldHdvcmtQa2cgaGFzIHRoZSBmZWF0dXJlIHRo YXQgb3ZlcmxhcHMgd2l0aCBCdXNcVXNiIGFuZCBcTmV0d29ya1BrZyBpbiBteSBvcGluaW9uLCB0 aGF0IGlzIHRoZSByZWFzb24gSSB0aGluayB3ZSBjYW4gaGF2ZSB0aGVzZSBtb2R1bGVzIGluIHRo ZSBleGlzdGluZyBwYWNrYWdlLiBQbHVzIGFzIEkga25vdyBmcm9tIHRoZSBlZGsyIGNvbW11bml0 eSB2aWV3IHBvaW50LCB3ZSBvbmx5IGNyZWF0ZSBhIG5ldyBwYWNrYWdlIHdoZW4gbmVjZXNzYXJ5 IGZvciBhIHRvdGFsbHkgbmV3IGZlYXR1cmUuIEhvd2V2ZXIsIHRoaXMgaXMgYXQgdGhlIGRpc2Ny ZXRpb24gb2YgZWRrMiBzdGV3YXJkcy4gWW91IGNhbiBjb25maXJtIHRoaXMgd2l0aCB0aGVtLg0K DQo+IEFucyAjMi4gT0suIEkgd2lsbCByZW5hbWUgaXQgbmV4dC4NCj4gQW5zICM0ICBPdGhlciBk cml2ZXIgY291bGQgdXNlIEVGSV9PUEVOX1BST1RPQ09MX0JZX0RSSVZFUiB3aXRoDQo+IFVTQl9F VEhFUk5FVF9QUk9UT0NPTCB0byBvd24gb24gdGhlIHNwZWNpZmljIFVTQiBDREMgZGV2aWNlLg0K PiAgICAgICAgICAgICAgIEJ1dCwgdGhlIHNwZWNpZmljIFVTQiBDREMgZHJpdmVyIG5lZWQgdG8g aW5zdGFsbCB0aGUNCj4gYmluZGluZyBkcml2ZXIgYmVmb3JlIE5ldHdvcmtDb21tb24gZHJpdmVy Lg0KTXkgcXVlc3Rpb24gd2FzIFVTQl9FVEhFUk5FVF9QUk9UT0NPTCBpcyBkZXNpZ25lZCBhcyBh biBhYnN0cmFjdCBwcm90b2NvbCwgd2l0aCB0aGlzIHRoZSB1bmRlcmx5aW5nIHRyYW5zcG9ydCAo VXNiSW8gb3IgUGNpSW8pIGlzIGFnbm9zdGljIHRvIHRoZSB1cHBlciBsYXllciBkcml2ZXIuIFVw cGVyIGxheWVyIGRyaXZlciAoZS5nLiwgVVNCX0VUSEVSTkVUX1BST1RPQ09MIGJhc2VkIFNOUCBk cml2ZXIpIGNhbiBjaGVjayB3aGV0aGVyIFVTQl9FVEhFUk5FVF9QUk9UT0NPTCBpcyBpbnN0YWxs ZWQgb24gdGhlIGdpdmVuIENvbnRyb2xsZXIgaGFuZGxlIGF0IFN1cHBvcnRlZCgpIGZ1bmN0aW9u LiBIb3dldmVyLCBzZWVtcyB0aGUgdXBwZXIgbGF5ZXIgZHJpdmVyIGhhcyBubyB3YXkgdG8gZGlz dGluZ3Vpc2ggdGhlIFVTQiBDREMgZHJpdmVyIGludGVyZmFjZSBjbGFzcyBpZiBJIHJlYWQgeW91 ciBjb2RlIHJpZ2h0OyB0aGVuIG1hbmFnZXMgdGhlIHJpZ2h0IGRldmljZSAoaW4gdGhlIGNhc2Ug b2YgbXVsdGlwbGUgVVNCIENEQyBkZXZpY2VzIGFyZSBhdHRhY2hlZCB0byB0aGUgc3lzdGVtKS4g V2UgY2FuIGVpdGhlciBhdHRhY2ggVVNCIENsYXNzIERldmljZSBQYXRoIHRvIHRoZSBkZXZpY2Ug cGF0aCBpbiBVc2IgQ0RDIGRyaXZlciBvciBwcm92aWRlIGEgZnVuY3Rpb24gdG8gcmV0cmlldmUg dGhlIFVTQiBDREMgaW50ZXJmYWNlIGNsYXNzL3N1YmNsYXNzL3Byb3RvY29sIHZpYSBVU0JfRVRI RVJORVRfUFJPVE9DT0wuIEkgd291bGQgcHJlZmVyIHRoZSBmb3JtZXIgb25lLg0KDQpUaGFua3MN CkFibmVyDQoNCj4gQW5zICM1ICBOZXR3b3JrQ29tbW9uIGRyaXZlciBidWlsZCBhIE1hYyBkZXZp Y2UgcGF0aCB0aGF0IGxpbmsgUGNpSW8NCj4gZGV2aWNlIHBhdGguDQo+ICAgICAgICAgICAgICAg U28sIFNOUCBkcml2ZXIgY291bGQgZm91bmQgUGNpSW8gZGV2aWNlIHBhdGggd2hlbg0KPiBOZXR3 b3JrQ29tbW9uIGRyaXZlciB0byBpbnN0YWxsIHRoZSBFRklfTkVUV09SS19JTlRFUkZBQ0VfSURF TlRJRklFUl9QUk9UT0NPTC4NCj4NCj4gVGhhbmtzLA0KPiBSaWNoYXJkDQo+DQo+IC0tLS0tT3Jp Z2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IENoYW5nLCBBYm5lciA8QWJuZXIuQ2hhbmdAYW1k LmNvbT4NCj4gU2VudDogMjAyMqZ+OaTrOaTpIDM6MDcgUE0NCj4gVG86IGRldmVsQGVkazIuZ3Jv dXBzLmlvOyBxdWljX3JjcmFuQHF1aWNpbmMuY29tOyBSaWNoYXJkSG8gW6bzqfqpvl0NCj4gPFJp Y2hhcmRIb0BhbWkuY29tPg0KPiBDYzogQW5kcmV3IEZpc2ggPGFmaXNoQGFwcGxlLmNvbT47IExl aWYgTGluZGhvbG0NCj4gPHF1aWNfbGxpbmRob2xAcXVpY2luYy5jb20+OyBNaWNoYWVsIEQgS2lu bmV5DQo+IDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT47IE1pY2hhZWwgS3ViYWNraQ0KPiA8 bWljaGFlbC5rdWJhY2tpQG1pY3Jvc29mdC5jb20+OyBaaGlndWFuZyBMaXUNCj4gPHpoaWd1YW5n LmxpdUBpbnRlbC5jb20+OyBMaW1pbmcgR2FvIDxnYW9saW1pbmdAYnlvc29mdC5jb20uY24+Ow0K PiBUb255TG8gW8O5qveqUV0NCj4gPFRvbnlMb0BhbWkuY29tPg0KPiBTdWJqZWN0OiBbRVhURVJO QUxdIFJFOiBbZWRrMi1kZXZlbF0gW1BBVENIXSBVc2JOZXR3b3JrUGtnOiBhZGQgVVNCDQo+IG5l dHdvcmsgZGV2aWNlcyBzdXBwb3J0DQo+DQo+DQo+ICoqQ0FVVElPTjogVGhlIGUtbWFpbCBiZWxv dyBpcyBmcm9tIGFuIGV4dGVybmFsIHNvdXJjZS4gUGxlYXNlDQo+IGV4ZXJjaXNlIGNhdXRpb24g YmVmb3JlIG9wZW5pbmcgYXR0YWNobWVudHMsIGNsaWNraW5nIGxpbmtzLCBvcg0KPiBmb2xsb3dp bmcgZ3VpZGFuY2UuKioNCj4NCj4gW0FNRCBPZmZpY2lhbCBVc2UgT25seSAtIEdlbmVyYWxdDQo+ DQo+IEhpIFJpY2hhcmQsDQo+IFRoYXQgaXMgcHJldHR5IGhhcmQgdG8gZ2l2ZSB0aGUgaW4tbGlu ZSBjb21tZW50IGluIHRoaXMgaHVnZSBwYXRjaA0KPiBlbWFpbC4gWW91IHdvdWxkIGJlIGFsc28g aGFyZCB0byBmaW5kIHRoZSBjb21tZW50cyBnaXZlbiB0byBlYWNoDQo+IG1vZHVsZSBvciB0aGUg cHJvdG9jb2wgaGVhZGVyIGZpbGUuDQo+IFNvIGZpc3QgYWxsIG9mLCBwbGVhc2Ugb3JnYW5pemUg eW91ciBjaGFuZ2UgaW50byBzZXZlcmFsIHBhdGNoZXMuIEZvcg0KPiBleGFtcGxlLCAxLiBVc2JF dGhlcm5ldFByb3RvY29sLmggMi4gVXNiUm5kaXMgbW9kdWxlIDMuIFVzYkNkY05jbSBtb2R1bGUg NC4NCj4gVXNiQ2RjRWNtIG1vZHVsZSA1LiBOZXR3b3JrQ29tbW9uIG1vZHVsZQ0KPg0KPiBTb21l IHJvdWdoIGZlZWRiYWNrcyB0byB0aGlzIGNoYW5nZSBiZWZvcmUgSSBnaXZpbmcgdGhlIGNvbW1l bnRzIHRvDQo+IGVhY2ggcGF0Y2ggYWZ0ZXIgeW91IHJlc2VuZGluZyB0aGUgbmV3IHBhdGNoIHNl dC4NCj4gMS4gSSBzdWdnZXN0IGhhdmluZyBVc2JOZXR3b3JrIGZvbGRlciB1bmRlciBNZGVNb2R1 bGVQa2cvVXNiLy4gVGhlbg0KPiB1bmRlciBVc2JOZXR3b3JrLCB5b3UgY2FuIGhhdmUgdGhvc2Ug Zm91ciBVU0IgbmV0d29yayByZWxhdGVkIG1vZHVsZXMuDQo+IEhvd2V2ZXIsIHdlIGNhbiBSZW5h bWUgTmV0d3Jva0NvbW1vbiB0byBVc2JOZXR3b3JrIGlmIHlvdXIgYXJlIG9rIHdpdGgNCj4gaXQu DQo+IDIuIFVzYkVoZXJuZXRQcm90b2NvbCBpcyBub3QgYW4gRUZJIHByb3RvY29sLCBzbyBwbGVh c2UgYWRkIEVka0lJIGFzDQo+IHRoZSBwcmVmaXggdG8gVXNiRXRoZXJuZXRQcm90b2NvbCwgaXQg d291bGQgYmUNCj4gRWRrSUlVc2JFdGhlcm5ldFByb3RvY29sLiAgQW5kIHdlIGNhbiBoYXZlIFVz YkV0aGVybmV0UHJvdG9jb2wuaCB1bmRlciBNZGVNb2R1bGVQa2cvSW5jbHVkZS9Qcm90b2NvbCA0 Lg0KPiBGcm9tIHRoaXMgY2hhbmdlLCBOZXR3cm9rQ29tbW9uIGRyaXZlciBsaXN0ZW5zIHRvDQo+ IFVTQl9FVEhFUk5FVF9QUk9UT0NPTCBhbmQgaW5zdGFsbCBFRkkgTklJIHByb3RvY29sIGZvciBl YWNoIGluc3RhbmNlLg0KPiBIb3dldmVyLCB0aGUgdXBwZXIgbGF5ZXIgZHJpdmVyIHdvdWxkbid0 IGtub3cgdGhlIENEQyBpbnRlcmZhY2UNCj4gY2xhc3Mvc3ViY2xhc3MvcHJvdG9jb2wgaWYgaXQg b25seSBsaXN0ZW4gdG8gVVNCX0VUSEVSTkVUX1BST1RPQ09MIGFuZA0KPiBpbnN0YWxsIGl0cyBv d24gU05QIG9uIHRoZSBzcGVjaWZpYyBVU0IgQ0RDIGRldmljZTsgaW4gdGhlIGNhc2UgaWYNCj4g dGhlcmUgYXJlIG11bHRpcGxlIFVTQiBDREMgZGV2aWNlcyBhdHRhY2hlZCBvbiB0aGUgc3lzdGVt LiBJcyBteQ0KPiB1bmRlcnN0YW5kaW5nIGNvcnJlY3Q/DQo+IDUuIEkgZG9uoaZ0IHNlZSB0aGUg VXNiRXRoZXJuZXRQcm90b2NvbCBiYXNlZCBTTlAgcHJvdG9jb2wgaXMgaW5zdGFsbGVkDQo+IGFu ZCB0aGUgU05QIGRyaXZlciB1bmRlciBOZXR3b3JrUGtnIGhhcyB0aGUgZGVwZW5kZW5jeSB3aXRo IFBjaUlvLiBEbw0KPiB3ZSBoYXZlIHRvIGltcGxlbWVudCBVc2JFdGhlcm5ldFByb3RvY29sIGJh c2VkIFNOUCBieSBvdXIgb3duPw0KPg0KPiBJIHdpbGwgY2hlY2sgdGhlIGZ1bmN0aW9uYWxpdHkg b24gb3VyIHBsYXRmb3JtIGlmIEkgZ2V0IHRoZSBjaGFuY2UuDQo+IFRoYW5rcw0KPiBBYm5lcg0K Pg0KPg0KPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gRnJvbTogZGV2ZWxAZWRr Mi5ncm91cHMuaW8gPGRldmVsQGVkazIuZ3JvdXBzLmlvPiBPbiBCZWhhbGYgT2YNCj4gUmViZWNj YQ0KPiA+IENyYW4gdmlhIGdyb3Vwcy5pbw0KPiA+IFNlbnQ6IFNhdHVyZGF5LCBTZXB0ZW1iZXIg MywgMjAyMiA1OjQ4IEFNDQo+ID4gVG86IGRldmVsQGVkazIuZ3JvdXBzLmlvOyByaWNoYXJkaG9A YW1pLmNvbQ0KPiA+IENjOiBBbmRyZXcgRmlzaCA8YWZpc2hAYXBwbGUuY29tPjsgTGVpZiBMaW5k aG9sbQ0KPiA+IDxxdWljX2xsaW5kaG9sQHF1aWNpbmMuY29tPjsgTWljaGFlbCBEIEtpbm5leQ0K PiA+IDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT47IE1pY2hhZWwgS3ViYWNraQ0KPiA+IDxt aWNoYWVsLmt1YmFja2lAbWljcm9zb2Z0LmNvbT47IFpoaWd1YW5nIExpdQ0KPiA+IDx6aGlndWFu Zy5saXVAaW50ZWwuY29tPjsgTGltaW5nIEdhbyA8Z2FvbGltaW5nQGJ5b3NvZnQuY29tLmNuPjsN Cj4gPiBUb255TG8gW8O5qveqUV0NCj4gPiA8VG9ueUxvQGFtaS5jb20+DQo+ID4gU3ViamVjdDog UmU6IFtlZGsyLWRldmVsXSBbUEFUQ0hdIFVzYk5ldHdvcmtQa2c6IGFkZCBVU0IgbmV0d29yaw0K PiA+IGRldmljZXMgc3VwcG9ydA0KPiA+DQo+ID4gW0NBVVRJT046IEV4dGVybmFsIEVtYWlsXQ0K PiA+DQo+ID4gSSd2ZSBwdXNoZWQgdGhpcyBwYXRjaCB0byBhIGJyYW5jaCBhdA0KPiA+DQo+IGh0 dHBzOi8vbmFtMTIuc2FmZWxpbmtzLnByb3RlY3Rpb24ub3V0bG9vay5jb20vP3VybD1odHRwcyUz QSUyRiUyRm5hbTENCj4gMS5zYWZlbGlua3MucHJvdGVjdGlvbi5vdXRsb29rLmNvbSUyRiUzRnVy bCUzRGh0dHBzJTI1M0ElMjUyRiUyNTJGbmFtJg0KPiBhbXA7ZGF0YT0wNSU3QzAxJTdDaWdvcmsl NDBhbWkuY29tJTdDMmRiYmIzN2NkNWFhNDY0MzcyZDQwOGRhOTQ5NDQzODklDQo+IDdDMjdlOTc4 NTdlMTVmNDg2Y2I1OGU4NmMyYjMwNDBmOTMlN0MxJTdDMCU3QzYzNzk4NTY2MTc4NTEzOTQzNyU3 Q1Vua24NCj4gb3duJTdDVFdGcGJHWnNiM2Q4ZXlKV0lqb2lNQzR3TGpBd01EQWlMQ0pRSWpvaVYy bHVNeklpTENKQlRpSTZJazFoYVd3aQ0KPiBMQ0pYVkNJNk1uMCUzRCU3QzMwMDAlN0MlN0MlN0Mm YW1wO3NkYXRhPTZrSjdkanpZQWJXYXk3NW5FTWZIMmVBVEtFV0MyDQo+IGolMkZvRllha0ZFMlB1 SnclM0QmYW1wO3Jlc2VydmVkPTANCj4gMQ0KPiA+DQo+IDIuc2FmZWxpbmtzLnByb3RlY3Rpb24u b3V0bG9vay5jb20lMkYlM0Z1cmwlM0RodHRwcyUyNTNBJTI1MkYlMjUyRm4NCj4gYW0xDQo+ID4N Cj4gJmFtcDtkYXRhPTA1JTdDMDElN0NBYm5lci5DaGFuZyU0MGFtZC5jb20lN0M5MmUwZGMzNGVj MmE0YzlhOWYNCj4gNjkwOGRhOTQNCj4gPg0KPiA3MWEyOWUlN0MzZGQ4OTYxZmU0ODg0ZTYwOGUx MWE4MmQ5OTRlMTgzZCU3QzAlN0MwJTdDNjM3OTg1NTEzMDYNCj4gMTAyNDcyNw0KPiA+DQo+ICU3 Q1Vua25vd24lN0NUV0ZwYkdac2IzZDhleUpXSWpvaU1DNHdMakF3TURBaUxDSlFJam9pVjJsdU16 SWlMDQo+IENKQlRpSTZJDQo+ID4NCj4gazFoYVd3aUxDSlhWQ0k2TW4wJTNEJTdDMzAwMCU3QyU3 QyU3QyZhbXA7c2RhdGE9NzglMkZ5WDlTQlANCj4gNHdyZnRPWXJtblANCj4gPiBtdUY1ZSUyRjNO c21xWTdKVnc0YXRjb0dNJTNEJmFtcDtyZXNlcnZlZD0wDQo+ID4NCj4gMS5zYWZlbGlua3MucHJv dGVjdGlvbi5vdXRsb29rLmNvbSUyRiUzRnVybCUzRGh0dHBzJTI1M0ElMjUyRiUyNTJGZ2kNCj4g dGgNCj4gPg0KPiAmYW1wO2RhdGE9MDUlN0MwMSU3Q3JpY2hhcmRobyU0MGFtaS5jb20lN0MxZmZk MmE4ZGJmNmY0Y2RhOWRhOTA4DQo+IGRhOTIzMQ0KPiA+DQo+IGU0MjYlN0MyN2U5Nzg1N2UxNWY0 ODZjYjU4ZTg2YzJiMzA0MGY5MyU3QzElN0MwJTdDNjM3OTgzMDQwMjMyNDkNCj4gMzE2MSU3DQo+ ID4NCj4gQ1Vua25vd24lN0NUV0ZwYkdac2IzZDhleUpXSWpvaU1DNHdMakF3TURBaUxDSlFJam9p VjJsdU16SWlMQ0oNCj4gQlRpSTZJazENCj4gPg0KPiBoYVd3aUxDSlhWQ0k2TW4wJTNEJTdDMzAw MCU3QyU3QyU3QyZhbXA7c2RhdGE9WEszZHc4dkdNdGxuMg0KPiBJZzZSY2lleXc2bA0KPiA+IG9y TGRzdnkyT2tvOWdBbGxTSzAlM0QmYW1wO3Jlc2VydmVkPTANCj4gPiB1Yi5jb20lMkZiY3JhbiUy RmVkazIlMkZ0cmVlJTJGdXNiLQ0KPiA+DQo+IG5ldCZhbXA7ZGF0YT0wNSU3QzAxJTdDYWJuZXIu Y2hhbmclNDBhbWQuY29tJTdDMmM4MTJkYzE1Yjk1NDJiDQo+ID4NCj4gOGE2NDMwOGRhOGQyY2Rm MmIlN0MzZGQ4OTYxZmU0ODg0ZTYwOGUxMWE4MmQ5OTRlMTgzZCU3QzAlN0MwJTdDDQo+ID4NCj4g NjM3OTc3NTIxMTIwNjYyNjczJTdDVW5rbm93biU3Q1RXRnBiR1pzYjNkOGV5SldJam9pTUM0d0xq QXdNDQo+ID4NCj4gREFpTENKUUlqb2lWMmx1TXpJaUxDSkJUaUk2SWsxaGFXd2lMQ0pYVkNJNk1u MCUzRCU3QzMwMDAlN0MlN0MlNw0KPiA+DQo+IEMmYW1wO3NkYXRhPVpGY1N3M0FMME1ubGp2eU9E cnYxZFlBTDhMdWFkd0NZZTY1eGhFMWhYV1klM0QmYQ0KPiA+IG1wO3Jlc2VydmVkPTAgLg0KPiA+ DQo+ID4gLS0NCj4gPiBSZWJlY2NhIENyYW4NCj4gPg0KPiA+IE9uIDkvMS8yMiAyMzoyNCwgUmlj aGFyZEhvIFum86n6qb5dIHZpYSBncm91cHMuaW8gd3JvdGU6DQo+ID4gPiBVc2JOZXR3b3JrUGtn IHByb3ZpZGVzIG5ldHdvcmsgZnVuY3Rpb25zIGZvciBVU0IgQUNNLCBVU0IgTkNNLA0KPiBhbmQN Cj4gPiBVU0INCj4gPiA+IFJORElTIG5ldHdvcmsgZGV2aWNlLg0KPiA+ID4NCj4gPiA+IFNpZ25l ZC1vZmYtYnk6IFJpY2hhcmQgSG8gPHJpY2hhcmRob0BhbWkuY29tPg0KPiA+ID4gQ2M6IEFuZHJl dyBGaXNoIDxhZmlzaEBhcHBsZS5jb20+DQo+ID4gPiBDYzogTGVpZiBMaW5kaG9sbSA8cXVpY19s bGluZGhvbEBxdWljaW5jLmNvbT4NCj4gPiA+IENjOiBNaWNoYWVsIEQgS2lubmV5IDxtaWNoYWVs LmQua2lubmV5QGludGVsLmNvbT4NCj4gPiA+IENjOiBNaWNoYWVsIEt1YmFja2kgPG1pY2hhZWwu a3ViYWNraUBtaWNyb3NvZnQuY29tPg0KPiA+ID4gQ2M6IFpoaWd1YW5nIExpdSA8emhpZ3Vhbmcu bGl1QGludGVsLmNvbT4NCj4gPiA+IENjOiBMaW1pbmcgR2FvIDxnYW9saW1pbmdAYnlvc29mdC5j b20uY24+DQo+ID4gPiBSZXZpZXdlZC1ieTogVG9ueSBMbyA8dG9ueWxvQGFtaS5jb20+DQo+ID4g PiAtLS0NCj4gPiA+ICAgVXNiTmV0d29ya1BrZy9Db25maWcvVXNiTmV0d29ya1BrZy5pbmMuZHNj ICAgIHwgICAgOSArDQo+ID4gPiAgIC4uLi9Db25maWcvVXNiTmV0d29ya1BrZ0NvbXBvbmVudHNE eGUuaW5jLmRzYyB8ICAgMjAgKw0KPiA+ID4gICAuLi4vQ29uZmlnL1VzYk5ldHdvcmtQa2dDb21w b25lbnRzRHhlLmluYy5mZGYgfCAgIDIwICsNCj4gPiA+ICAgLi4uL0NvbmZpZy9Vc2JOZXR3b3Jr UGtnRGVmaW5lcy5pbmMuZHNjICAgICAgIHwgICAyMyArDQo+ID4gPiAgIC4uLi9JbmNsdWRlL1By b3RvY29sL1VzYkV0aGVybmV0UHJvdG9jb2wuaCAgICB8ICA4NzIgKysrKysrKysrDQo+ID4gPiAg IFVzYk5ldHdvcmtQa2cvTmV0d29ya0NvbW1vbi9Db21wb25lbnROYW1lLmMgICB8ICAyNjQgKysr DQo+ID4gPiAgIFVzYk5ldHdvcmtQa2cvTmV0d29ya0NvbW1vbi9Ecml2ZXJCaW5kaW5nLmMgICB8 ICA1ODMgKysrKysrDQo+ID4gPiAgIFVzYk5ldHdvcmtQa2cvTmV0d29ya0NvbW1vbi9Ecml2ZXJC aW5kaW5nLmggICB8ICAyNjMgKysrDQo+ID4gPiAgIFVzYk5ldHdvcmtQa2cvTmV0d29ya0NvbW1v bi9OZXR3b3JrQ29tbW9uLmluZiB8ICAgNDMgKw0KPiA+ID4gICBVc2JOZXR3b3JrUGtnL05ldHdv cmtDb21tb24vUHhlRnVuY3Rpb24uYyAgICAgfCAxNzM0DQo+ID4gKysrKysrKysrKysrKysrKysN Cj4gPiA+ICAgVXNiTmV0d29ya1BrZy9SZWFkTWUubWQgICAgICAgICAgICAgICAgICAgICAgIHwg ICA2NSArDQo+ID4gPiAgIFVzYk5ldHdvcmtQa2cvUmVsZWFzZU5vdGVzLm1kICAgICAgICAgICAg ICAgICB8ICAgMTEgKw0KPiA+ID4gICBVc2JOZXR3b3JrUGtnL1VzYkNkY0VjbS9Db21wb25lbnRO YW1lLmMgICAgICAgfCAgMTcwICsrDQo+ID4gPiAgIFVzYk5ldHdvcmtQa2cvVXNiQ2RjRWNtL1Vz YkNkY0VjbS5jICAgICAgICAgICB8ICA1MDQgKysrKysNCj4gPiA+ICAgVXNiTmV0d29ya1BrZy9V c2JDZGNFY20vVXNiQ2RjRWNtLmggICAgICAgICAgIHwgIDIxMSArKw0KPiA+ID4gICBVc2JOZXR3 b3JrUGtnL1VzYkNkY0VjbS9Vc2JDZGNFY20uaW5mICAgICAgICAgfCAgIDQxICsNCj4gPiA+ICAg VXNiTmV0d29ya1BrZy9Vc2JDZGNFY20vVXNiRWNtRnVuY3Rpb24uYyAgICAgIHwgIDg2MSArKysr KysrKw0KPiA+ID4gICBVc2JOZXR3b3JrUGtnL1VzYkNkY05jbS9Db21wb25lbnROYW1lLmMgICAg ICAgfCAgMTcwICsrDQo+ID4gPiAgIFVzYk5ldHdvcmtQa2cvVXNiQ2RjTmNtL1VzYkNkY05jbS5j ICAgICAgICAgICB8ICA1MDggKysrKysNCj4gPiA+ICAgVXNiTmV0d29ya1BrZy9Vc2JDZGNOY20v VXNiQ2RjTmNtLmggICAgICAgICAgIHwgIDI0NSArKysNCj4gPiA+ICAgVXNiTmV0d29ya1BrZy9V c2JDZGNOY20vVXNiQ2RjTmNtLmluZiAgICAgICAgIHwgICA0MSArDQo+ID4gPiAgIFVzYk5ldHdv cmtQa2cvVXNiQ2RjTmNtL1VzYk5jbUZ1bmN0aW9uLmMgICAgICB8ICA5NDYgKysrKysrKysrDQo+ ID4gPiAgIFVzYk5ldHdvcmtQa2cvVXNiTmV0d29ya1BrZy5kZWMgICAgICAgICAgICAgICB8ICAg MzIgKw0KPiA+ID4gICBVc2JOZXR3b3JrUGtnL1VzYlJuZGlzL0NvbXBvbmVudE5hbWUuYyAgICAg ICAgfCAgMTcyICsrDQo+ID4gPiAgIFVzYk5ldHdvcmtQa2cvVXNiUm5kaXMvVXNiUm5kaXMuYyAg ICAgICAgICAgICB8ICA4NDggKysrKysrKysNCj4gPiA+ICAgVXNiTmV0d29ya1BrZy9Vc2JSbmRp cy9Vc2JSbmRpcy5oICAgICAgICAgICAgIHwgIDU2OSArKysrKysNCj4gPiA+ICAgVXNiTmV0d29y a1BrZy9Vc2JSbmRpcy9Vc2JSbmRpcy5pbmYgICAgICAgICAgIHwgICA0MSArDQo+ID4gPiAgIFVz Yk5ldHdvcmtQa2cvVXNiUm5kaXMvVXNiUm5kaXNGdW5jdGlvbi5jICAgICB8IDE1ODcNCj4gPiAr KysrKysrKysrKysrKysNCj4gPiA+ICAgMjggZmlsZXMgY2hhbmdlZCwgMTA4NTMgaW5zZXJ0aW9u cygrKQ0KPiA+ID4gICBjcmVhdGUgbW9kZSAxMDA2NDQgVXNiTmV0d29ya1BrZy9Db25maWcvVXNi TmV0d29ya1BrZy5pbmMuZHNjDQo+ID4gPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NA0KPiA+IFVzYk5l dHdvcmtQa2cvQ29uZmlnL1VzYk5ldHdvcmtQa2dDb21wb25lbnRzRHhlLmluYy5kc2MNCj4gPiA+ ICAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+ID4gVXNiTmV0d29ya1BrZy9Db25maWcvVXNiTmV0d29y a1BrZ0NvbXBvbmVudHNEeGUuaW5jLmZkZg0KPiA+ID4gICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4g PiBVc2JOZXR3b3JrUGtnL0NvbmZpZy9Vc2JOZXR3b3JrUGtnRGVmaW5lcy5pbmMuZHNjDQo+ID4g PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NA0KPiA+IFVzYk5ldHdvcmtQa2cvSW5jbHVkZS9Qcm90b2Nv bC9Vc2JFdGhlcm5ldFByb3RvY29sLmgNCj4gPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+ID4g VXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL0NvbXBvbmVudE5hbWUuYw0KPiA+ID4gICBjcmVh dGUgbW9kZSAxMDA2NDQgVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL0RyaXZlckJpbmRpbmcu Yw0KPiA+ID4gICBjcmVhdGUgbW9kZSAxMDA2NDQgVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9u L0RyaXZlckJpbmRpbmcuaA0KPiA+ID4gICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4gPiBVc2JOZXR3 b3JrUGtnL05ldHdvcmtDb21tb24vTmV0d29ya0NvbW1vbi5pbmYNCj4gPiA+ICAgY3JlYXRlIG1v ZGUgMTAwNjQ0IFVzYk5ldHdvcmtQa2cvTmV0d29ya0NvbW1vbi9QeGVGdW5jdGlvbi5jDQo+ID4g PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBVc2JOZXR3b3JrUGtnL1JlYWRNZS5tZA0KPiA+ID4gICBj cmVhdGUgbW9kZSAxMDA2NDQgVXNiTmV0d29ya1BrZy9SZWxlYXNlTm90ZXMubWQNCj4gPiA+ICAg Y3JlYXRlIG1vZGUgMTAwNjQ0IFVzYk5ldHdvcmtQa2cvVXNiQ2RjRWNtL0NvbXBvbmVudE5hbWUu Yw0KPiA+ID4gICBjcmVhdGUgbW9kZSAxMDA2NDQgVXNiTmV0d29ya1BrZy9Vc2JDZGNFY20vVXNi Q2RjRWNtLmMNCj4gPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IFVzYk5ldHdvcmtQa2cvVXNiQ2Rj RWNtL1VzYkNkY0VjbS5oDQo+ID4gPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBVc2JOZXR3b3JrUGtn L1VzYkNkY0VjbS9Vc2JDZGNFY20uaW5mDQo+ID4gPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBVc2JO ZXR3b3JrUGtnL1VzYkNkY0VjbS9Vc2JFY21GdW5jdGlvbi5jDQo+ID4gPiAgIGNyZWF0ZSBtb2Rl IDEwMDY0NCBVc2JOZXR3b3JrUGtnL1VzYkNkY05jbS9Db21wb25lbnROYW1lLmMNCj4gPiA+ICAg Y3JlYXRlIG1vZGUgMTAwNjQ0IFVzYk5ldHdvcmtQa2cvVXNiQ2RjTmNtL1VzYkNkY05jbS5jDQo+ ID4gPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBVc2JOZXR3b3JrUGtnL1VzYkNkY05jbS9Vc2JDZGNO Y20uaA0KPiA+ID4gICBjcmVhdGUgbW9kZSAxMDA2NDQgVXNiTmV0d29ya1BrZy9Vc2JDZGNOY20v VXNiQ2RjTmNtLmluZg0KPiA+ID4gICBjcmVhdGUgbW9kZSAxMDA2NDQgVXNiTmV0d29ya1BrZy9V c2JDZGNOY20vVXNiTmNtRnVuY3Rpb24uYw0KPiA+ID4gICBjcmVhdGUgbW9kZSAxMDA2NDQgVXNi TmV0d29ya1BrZy9Vc2JOZXR3b3JrUGtnLmRlYw0KPiA+ID4gICBjcmVhdGUgbW9kZSAxMDA2NDQg VXNiTmV0d29ya1BrZy9Vc2JSbmRpcy9Db21wb25lbnROYW1lLmMNCj4gPiA+ICAgY3JlYXRlIG1v ZGUgMTAwNjQ0IFVzYk5ldHdvcmtQa2cvVXNiUm5kaXMvVXNiUm5kaXMuYw0KPiA+ID4gICBjcmVh dGUgbW9kZSAxMDA2NDQgVXNiTmV0d29ya1BrZy9Vc2JSbmRpcy9Vc2JSbmRpcy5oDQo+ID4gPiAg IGNyZWF0ZSBtb2RlIDEwMDY0NCBVc2JOZXR3b3JrUGtnL1VzYlJuZGlzL1VzYlJuZGlzLmluZg0K PiA+ID4gICBjcmVhdGUgbW9kZSAxMDA2NDQgVXNiTmV0d29ya1BrZy9Vc2JSbmRpcy9Vc2JSbmRp c0Z1bmN0aW9uLmMNCj4gPg0KPiA+DQo+ID4NCj4gPg0KPiA+DQo+IC1UaGUgaW5mb3JtYXRpb24g Y29udGFpbmVkIGluIHRoaXMgbWVzc2FnZSBtYXkgYmUgY29uZmlkZW50aWFsIGFuZA0KPiBwcm9w cmlldGFyeSB0byBBbWVyaWNhbiBNZWdhdHJlbmRzIChBTUkpLiBUaGlzIGNvbW11bmljYXRpb24g aXMNCj4gaW50ZW5kZWQgdG8gYmUgcmVhZCBvbmx5IGJ5IHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0 eSB0byB3aG9tIGl0IGlzDQo+IGFkZHJlc3NlZCBvciBieSB0aGVpciBkZXNpZ25lZS4gSWYgdGhl IHJlYWRlciBvZiB0aGlzIG1lc3NhZ2UgaXMgbm90DQo+IHRoZSBpbnRlbmRlZCByZWNpcGllbnQs IHlvdSBhcmUgb24gbm90aWNlIHRoYXQgYW55IGRpc3RyaWJ1dGlvbiBvZg0KPiB0aGlzIG1lc3Nh Z2UsIGluIGFueSBmb3JtLCBpcyBzdHJpY3RseSBwcm9oaWJpdGVkLiBQbGVhc2UgcHJvbXB0bHkN Cj4gbm90aWZ5IHRoZSBzZW5kZXIgYnkgcmVwbHkgZS1tYWlsIG9yIGJ5IHRlbGVwaG9uZSBhdCA3 NzAtMjQ2LTg2MDAsIGFuZA0KPiB0aGVuIGRlbGV0ZSBvciBkZXN0cm95IGFsbCBjb3BpZXMgb2Yg dGhlIHRyYW5zbWlzc2lvbi4NCg0KDQoNCg0KDQotVGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBp biB0aGlzIG1lc3NhZ2UgbWF5IGJlIGNvbmZpZGVudGlhbCBhbmQgcHJvcHJpZXRhcnkgdG8gQW1l cmljYW4gTWVnYXRyZW5kcyAoQU1JKS4gVGhpcyBjb21tdW5pY2F0aW9uIGlzIGludGVuZGVkIHRv IGJlIHJlYWQgb25seSBieSB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdG8gd2hvbSBpdCBpcyBh ZGRyZXNzZWQgb3IgYnkgdGhlaXIgZGVzaWduZWUuIElmIHRoZSByZWFkZXIgb2YgdGhpcyBtZXNz YWdlIGlzIG5vdCB0aGUgaW50ZW5kZWQgcmVjaXBpZW50LCB5b3UgYXJlIG9uIG5vdGljZSB0aGF0 IGFueSBkaXN0cmlidXRpb24gb2YgdGhpcyBtZXNzYWdlLCBpbiBhbnkgZm9ybSwgaXMgc3RyaWN0 bHkgcHJvaGliaXRlZC4gUGxlYXNlIHByb21wdGx5IG5vdGlmeSB0aGUgc2VuZGVyIGJ5IHJlcGx5 IGUtbWFpbCBvciBieSB0ZWxlcGhvbmUgYXQgNzcwLTI0Ni04NjAwLCBhbmQgdGhlbiBkZWxldGUg b3IgZGVzdHJveSBhbGwgY29waWVzIG9mIHRoZSB0cmFuc21pc3Npb24uDQo=