From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from EUR04-HE1-obe.outbound.protection.outlook.com (EUR04-HE1-obe.outbound.protection.outlook.com [40.107.7.77]) by mx.groups.io with SMTP id smtpd.web10.8555.1666107398652998438 for ; Tue, 18 Oct 2022 08:36:40 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@armh.onmicrosoft.com header.s=selector2-armh-onmicrosoft-com header.b=ADRWExSQ; spf=pass (domain: arm.com, ip: 40.107.7.77, mailfrom: sami.mujawar@arm.com) ARC-Seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=idc+6XZAhWjfw67Ano+KnpqWzZqs3XpfYQ3oFrh6fWBDUn6FhR6Z9Cu2f3z1WNgkFEZnynd82D2iaMSWYPenI1xRM+6yFIh0ZGK/zp1QaCyy4UULXx6M7pZPkUZ2+KTX5ttgAO+cLJxUcRAEjapSc1UW0uultrT/DWb6iMfSrtM1KNpTb5VfEL49tIameDr3oodtteJ5xh0Afk1YRMVT7Afrt1O9pR+5U/y99acj7wm9JU25Ep2qkknIdg75jKxD9QtWNPT9BnfJR3N2WfS/EO9rutoev5mJkIIywkwNVbHGf0XapAPu40BIDODohTDeuLQsvPaMgPH+s26YpBPcDA== ARC-Message-Signature: i=2; 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=sGMQUONbXhugltd40Zx7n0OLBepyLFOzhFdM3Qy2++Y=; b=gG5WpuM2jZMAOnZlqpPWHx7YmANd7swO2RP59XzYKym4Xoocn63UZkOhlH1PPnPpSY2WRsWEIdebSDTqMJJoIn+7owUUvMQ/qMLIbRox16dJKqKLkZ+mVJKFNPNSY7c0Ix3z7m03ZMfLmA5crulUS043jTpAshW1bMbdLW0QPmZrAd2XrTDi4s1DocTnYiIcK4ujB/mwn+X4SdVlcQwC4+N+9FzxAKO23JL6+6YruyKu5dCeltRU2/2/+1C2JJxXI5Ck5y6NN+FdDGEdYqw+FZEPvjKvEZg/dOwtGD079N5tmySLyCjGNY0lWQq78xm6X/B6VtbN/CjIMG3LKSLYsw== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 63.35.35.123) smtp.rcpttodomain=edk2.groups.io smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=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=sGMQUONbXhugltd40Zx7n0OLBepyLFOzhFdM3Qy2++Y=; b=ADRWExSQWgGdPoZzS+o3XVxH1g8gOBrJtg8UpTpZuBJ2eEjJIZSyP0lIdY6Apqsdbm7cs6sgobQiwwlLwQe+R1HZ2PMv0HOW0kqmunEKHW3K21HsX19P/yCZBzX5aVrb35Eba1086jq1ULV4DQQAD50PiklCTMAuYctAGUxc4uA= Received: from FR3P281CA0030.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:1c::16) by PAWPR08MB9032.eurprd08.prod.outlook.com (2603:10a6:102:341::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.33; Tue, 18 Oct 2022 15:36:33 +0000 Received: from VI1EUR03FT003.eop-EUR03.prod.protection.outlook.com (2603:10a6:d10:1c:cafe::2) by FR3P281CA0030.outlook.office365.com (2603:10a6:d10:1c::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.6 via Frontend Transport; Tue, 18 Oct 2022 15:36:33 +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 VI1EUR03FT003.mail.protection.outlook.com (100.127.144.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20 via Frontend Transport; Tue, 18 Oct 2022 15:36:33 +0000 Received: ("Tessian outbound 58faf9791229:v130"); Tue, 18 Oct 2022 15:36:32 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: aefad8c80ad40191 X-CR-MTA-TID: 64aa7808 Received: from d9d31720c3e2.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id B37A2353-EBC5-492C-97DC-1EADBCD2AE56.1; Tue, 18 Oct 2022 15:36:29 +0000 Received: from EUR04-DB3-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id d9d31720c3e2.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 18 Oct 2022 15:36:29 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XDJcWpycYHA/DmXMXH9QJqzny5XmIj07/XqOsM6ofVcn/tidoCsHljA3dmdU+dFqcqxeYZj8H1a3F/U8U/NjU7heGvhFdt3nnWCHgg8kSu1EiyiUkCYKKSZ6bdYUAyroD/RBC7dMrTWWr/uwgiiB7+7N05e/RR/HHnXb55Ikles/UcKcUb9RfHWJNZOA6b0s1t0gt3NZEDaw/LEIcf6MrZlPmkq/nzQs9uIwPoZY4Gk5R4MkOuYCDI76/2nx9DymEhANwoicJa6Yl4lVAiJOpd62JEBqqopsVUiDj0ALo8apDj3BU8Pj+y5ftAy89cyGTfL1do/HdKPjEtajQ2DHHg== 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=sGMQUONbXhugltd40Zx7n0OLBepyLFOzhFdM3Qy2++Y=; b=UoMXU9vbUmllvW4oCohXqP+RQWVTkyEhqo7jHzQtyJnT9OR+9YgmlFaUUE9MyRGmj2PyvFFjhQTjoLbvY4AWYSfv+nC98r7W8OJ1tzhrjhFmQpCJuYq18nGPfnp/bfzw9/ifx7b9rnv+vt0o3daKaLegiEk/VPCmDcEdCHcs0/vf3CRxgCe4c4v+Y/PTAaujdG6DHclWDBGiSjHo2S5GdNPndVCZ8npCyM1yeRTWm2gBcYA+2gy8Se6bzEv9OujTyYzqlB/YUSdGJATFKOJSt9MZm/P/kfES30XG+Dbmc6AZ9CH+KQm7KkwxtErZa6s8Y0sdCet82OADTwbFZbpEKQ== 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=sGMQUONbXhugltd40Zx7n0OLBepyLFOzhFdM3Qy2++Y=; b=ADRWExSQWgGdPoZzS+o3XVxH1g8gOBrJtg8UpTpZuBJ2eEjJIZSyP0lIdY6Apqsdbm7cs6sgobQiwwlLwQe+R1HZ2PMv0HOW0kqmunEKHW3K21HsX19P/yCZBzX5aVrb35Eba1086jq1ULV4DQQAD50PiklCTMAuYctAGUxc4uA= Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Received: from AS8PR08MB6806.eurprd08.prod.outlook.com (2603:10a6:20b:39b::12) by AS8PR08MB6007.eurprd08.prod.outlook.com (2603:10a6:20b:29e::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.29; Tue, 18 Oct 2022 15:36:21 +0000 Received: from AS8PR08MB6806.eurprd08.prod.outlook.com ([fe80::283c:fe2e:699d:2bf]) by AS8PR08MB6806.eurprd08.prod.outlook.com ([fe80::283c:fe2e:699d:2bf%5]) with mapi id 15.20.5723.033; Tue, 18 Oct 2022 15:36:21 +0000 Message-ID: Date: Tue, 18 Oct 2022 16:36:19 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.3.3 Subject: Re: [edk2-devel] [PATCH 2/2] DynamicTablesPkg: Add Smbios Type17 Table generator To: devel@edk2.groups.io, gmahadevan@nvidia.com, Alexei Fedorov , Pierre Gondois , Abner.Chang@amd.com Cc: Samer El-Haj-Mahmoud , Jeff Brasen , Ashish Singhal , Akanksha Jain , Matteo Carlini , Hemendra Dassanayake , Nick Ramirez , William Watson , "nd@arm.com" References: <90bcdad9b53f1ca184a857da720aac1ab89882f7.1661534045.git.gmahadevan@nvidia.com> <2204e785-d05a-a47d-2da6-a9b6b8e608a0@nvidia.com> From: "Sami Mujawar" In-Reply-To: <2204e785-d05a-a47d-2da6-a9b6b8e608a0@nvidia.com> X-ClientProxiedBy: LO4P123CA0117.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:192::14) To AS8PR08MB6806.eurprd08.prod.outlook.com (2603:10a6:20b:39b::12) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: AS8PR08MB6806:EE_|AS8PR08MB6007:EE_|VI1EUR03FT003:EE_|PAWPR08MB9032:EE_ X-MS-Office365-Filtering-Correlation-Id: 6b220dc6-0651-46a4-ef0e-08dab11e890a X-LD-Processed: f34e5979-57d9-4aaa-ad4d-b122a662184d,ExtAddr 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: cxzUov5EwjwY/bV+KHkI5mStYKJ73RvRavexOTMZIG4sh5PzUA4mSPV1wVMpCe+TEEtJNgOaj1a2OHOsOMm7wu8u38nDQUzI5PXXlQEThXpW5ssPLF8mfDcW28D3CiVAWAkAuPWRlt+/rXGCC6Gmj+mwhDsFDSSecorojeGN3BtbdHSaCzuM+jlXC7kejlSpfLDzEwVBBtw/H4lkb9pIv3v8a4EepA5T5/iq3cQz9OCaDAjzH0YYfmypQOEZnZViSA+jiT0J/ovjYlUYqKgkC/yDkViIGlrvznAjKNbL/0q5rIUuVVu83NPXb1w0EPBeXCwDHgYUyHlcQUtmQAkmq0ht2KRakwAfNHRZPurCOc6YGIvLKyD0lrQX5mDkLnpR3vzhIIlhF+EzxRfp9dDjCOaVxZbiKJ/Vml3kS9EMY3ErnXOkoaxs+YSQOu4QNbdPGW5+dxXiw6ekbeRIwObGjHNq59YZYfgu/LkQ9hOP3BpYQhuicgm9hET7USpDuTzJSYCixQ4k4tfBjx+jSWrLe4tOKkmeEvrdYi+jkRRj8tK2UVIvyZ8EPixjO/PwlajAmYCS6/H4a8tTqUbEiJ3663JVToIBiAErotTD4zBHUWPIjPKi2wlTjjTMrS2qyJc2BaIvgoOufV/NW/FFCT3nzyMQiGY+FNfQPRQ4RQR6KsLlv5dKqq39T26jczn3KKBGP+MsKfLiBA9H/QGhrvWzy9wTmZTR8xn94cGkpYvaq416qPva29OHj+kQDpgCejm0m6JLuodni6TMGPCf2VoxufRHrQeTBFrgBSQHW3zW38Jz4JOgBoOKpfV7MjclQvVQ4D9dpUsMmFxgNb/J/84O3Gfb6kKOpYlNIsnvTDXCKyjHpwRDxJMWRHskx7OQ0ERf X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS8PR08MB6806.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(366004)(376002)(346002)(39860400002)(396003)(136003)(451199015)(31686004)(83380400001)(2906002)(2616005)(186003)(66899015)(4326008)(8676002)(6506007)(26005)(53546011)(33964004)(6512007)(166002)(45080400002)(86362001)(31696002)(36756003)(19627235002)(316002)(54906003)(38100700002)(66476007)(30864003)(41300700001)(66556008)(5660300002)(8936002)(66946007)(110136005)(44832011)(966005)(478600001)(6486002)(21314003)(45980500001)(43740500002)(579004)(559001);DIR:OUT;SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB6007 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Return-Path: Sami.Mujawar@arm.com X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: VI1EUR03FT003.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 9843262e-b30b-4781-94ad-08dab11e81b3 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: GeH7dxGDFhb50Xgjbtp6s5/uKglsYgst/zQW4zXW3QMkt5nLSoUTMx3FpV8s2ducHkBbjyF/5Ws1WLpSB1f7fBN+2EJT9Fo4Yq5baz7E/u+DJw+2X1es5BcGY0TzrjxpwN8Ozv3GimHeTGXM9zcNCyytx/9m+m/Ngb8qQkqdVpxZM40vYGgNonhCJyj4uA8LFzBOuoqNoRkJDGfV9L+z/FrjL2WvSuearqDzlMmgPOFPM0Tk73nC1nwsS8Ch53VaIPHnry1u2qDM7gnIw9cXKLoohHLrltWhIycNslS58VuCD7J6owfeCWfeYOObQs6NjNuiaTWKuyGFzY2syvg0qUqQoFz4KWp6ZCBsIEmdVo21/7R+J3mfDGv62MTDd4EOUVgyOh1iFdNvEZPaRcwGwKPoKBvQPbhYX4I0G597+TlZy1si53laW4jhoWp4Mbou2iRkqFXo8cIrlU8/Ncu7WTAnT1u3Mk2A3Frm+Wp5l6xhJw3lXO93+5V9gnrYf+klwYq/+19H27YbRUDHhA+mb5FS76qltE0dPQS7tf7eIfCKXUZbYhKynlTLnbwUkRiO/o9lCs/u3OH7O8kEW/bzaBTnopQPvDtHurdMaJCp3kbkgYfmmLFjz/zU1TE/Ckr5KWw1kBkRwHZjq9cfUUDPRTyKK4RkUEJtE1jldYHhWzI9Pzo7FpSBJGeXbIETMPLY6OjDTDYsPBanWG+O4ytEoTC1sPqHsrYFFbcUaeGS+nezXdg6O5rB2YOOPrykrplVlFKmg/+pP3nnrWYZg6jOy4HgIQuV6oGtYzW7GEa9+1H/+FrNKzFD3jf/dj3ylPg4BrdSouEV0gxcbgSAoUiPPmafEYAdJit0K3Ifu5GkPXIay2oVGal8E4KlyHNMMMMxy8kWddD2aUW1y7wdRJKdFA== 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)(346002)(376002)(136003)(451199015)(36840700001)(40470700004)(46966006)(478600001)(30864003)(82310400005)(5660300002)(356005)(81166007)(166002)(36756003)(44832011)(966005)(6486002)(6506007)(33964004)(45080400002)(70206006)(47076005)(4326008)(70586007)(40480700001)(31696002)(8676002)(8936002)(41300700001)(86362001)(53546011)(6512007)(83380400001)(26005)(36860700001)(336012)(110136005)(54906003)(31686004)(2616005)(40460700003)(82740400003)(19627235002)(66899015)(316002)(186003)(2906002)(21314003)(43740500002)(559001)(579004);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Oct 2022 15:36:33.1114 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 6b220dc6-0651-46a4-ef0e-08dab11e890a 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: VI1EUR03FT003.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAWPR08MB9032 Content-Type: multipart/alternative; boundary="------------YiBaZIWrlQzCmvVlSDS3UEAk" --------------YiBaZIWrlQzCmvVlSDS3UEAk Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi Girish, Please find my response inline marked [SAMI]. Regards, Sami Mujawar On 04/10/2022 11:43 pm, Girish Mahadevan via groups.io wrote: > Hello Sami > > Thank you so much for your review, I apologize for the late response. > > My comment in line about the handle manager [GM]. > > Best Regards > Girish > > On 9/12/2022 8:57 AM, Sami Mujawar wrote: >> External email: Use caution opening links or attachments >> >> >> Hi Girish, >> >> Thank you for this patch and for the effort for bringing forward dynamic >> SMBIOS generation. >> >> Please find my feedback inline marked [SAMI]. >> >> Regards, >> >> Sami Mujawar >> >> On 26/08/2022 06:37 pm, Girish Mahadevan wrote: >>> Add a new CM object to describe memory devices and setup a new >>> Generator Library for SMBIOS Type17 table. >>> >>> Signed-off-by: Girish Mahadevan >>> --- >>>   .../Include/ArmNameSpaceObjects.h             |  59 +++ >>>   .../SmbiosType17Lib/SmbiosType17Generator.c   | 338 >>> ++++++++++++++++++ >>>   .../SmbiosType17Lib/SmbiosType17LibArm.inf    |  32 ++ >>>   3 files changed, 429 insertions(+) >>>   create mode 100644 >>> DynamicTablesPkg/Library/Smbios/Arm/SmbiosType17Lib/SmbiosType17Generator.c >>>   create mode 100644 >>> DynamicTablesPkg/Library/Smbios/Arm/SmbiosType17Lib/SmbiosType17LibArm.inf >>> >>> diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h >>> b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h >>> index 102e0f96be..199a19e997 100644 >>> --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h >>> +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h >>> @@ -63,6 +63,7 @@ typedef enum ArmObjectID { >>>     EArmObjPciInterruptMapInfo,          ///< 39 - Pci Interrupt Map >>> Info >>>     EArmObjRmr,                          ///< 40 - Reserved Memory >>> Range Node >>>     EArmObjMemoryRangeDescriptor,        ///< 41 - Memory Range >>> Descriptor >>> +  EArmObjMemoryDeviceInfo,             ///< 42 - Memory Device >>> Information >>>     EArmObjMax >>>   } EARM_OBJECT_ID; >>> >>> @@ -1070,6 +1071,64 @@ typedef struct CmArmRmrDescriptor { >>>     UINT64    Length; >>>   } CM_ARM_MEMORY_RANGE_DESCRIPTOR; >>> >>> +/** A structure that describes the physical memory device. >>> + >>> +  The physical memory devices on the system are described by this >>> object. >>> + >>> +  SMBIOS Specification v3.5.0 Type17 >>> + >>> +  ID: EArmObjMemoryDeviceInfo, >>> +*/ >>> +typedef struct CmArmMemoryDeviceInfo { >> [SAMI] I think we may need a Token pointing to the Type 16 object so >> that the Physical Memory Array Handle can be setup, see my comment below >> about the HandleManager. >>> +  /** Size of the device. >>> +    Size of the device in bytes. >>> +  */ >>> +  UINT64  Size; >>> + >>> +  /** Device Set */ >>> +  UINT8   DeviceSet; >>> + >>> +  /** Speed of the device >>> +    Speed of the device in MegaTransfers/second. >>> +  */ >>> +  UINT32  Speed; >>> + >>> +  /** Serial Number of device  */ >>> +  CHAR8   *SerialNum; >>> + >>> +  /** AssetTag identifying the device */ >>> +  CHAR8   *AssetTag; >>> + >>> +  /** Device Locator String for the device. >>> +   String that describes the slot or position of the device on the >>> board. >>> +   */ >>> +  CHAR8   *DeviceLocator; >>> + >>> +  /** Bank locator string for the device. >>> +   String that describes the bank where the device is located. >>> +   */ >>> +  CHAR8   *BankLocator; >>> + >>> +  /** Firmware version of the memory device */ >>> +  CHAR8   *FirmwareVersion; >>> + >>> +  /** Manufacturer Id. >>> +   2 byte Manufacturer Id as per JEDEC Standard JEP106AV >>> +  */ >>> +  UINT16  ModuleManufacturerId; >>> + >>> +  /** Manufacturer Product Id >>> +   2 byte Manufacturer Id as designated by Manufacturer. >>> +  */ >>> +  UINT16  ModuleProductId; >>> + >>> +  /** Device Attributes */ >>> +  UINT8   Attributes; >>> + >>> +  /** Device Configured Voltage in millivolts */ >>> +  UINT16  ConfiguredVoltage; >> [SAMI] This field does not appear to be used in the generator. If the >> intention is to use this in the future, then it may be better to add >> this at a later stage. >>> +} CM_ARM_MEMORY_DEVICE_INFO; >>> + >>>   #pragma pack() >>> >>>   #endif // ARM_NAMESPACE_OBJECTS_H_ >>> diff --git >>> a/DynamicTablesPkg/Library/Smbios/Arm/SmbiosType17Lib/SmbiosType17Generator.c >>> b/DynamicTablesPkg/Library/Smbios/Arm/SmbiosType17Lib/SmbiosType17Generator.c >>> >>> new file mode 100644 >>> index 0000000000..5683ca570f >>> --- /dev/null >>> +++ >>> b/DynamicTablesPkg/Library/Smbios/Arm/SmbiosType17Lib/SmbiosType17Generator.c >>> @@ -0,0 +1,338 @@ >>> +/** @file >>> +  SMBIOS Type17 Table Generator. >>> + >>> +  Copyright (c) 2022, NVIDIA CORPORATION & AFFILIATES. All rights >>> reserved. >>> +  Copyright (c) 2020 - 2021, Arm Limited. All rights reserved.
>>> + >>> +  SPDX-License-Identifier: BSD-2-Clause-Patent >>> +**/ >>> + >>> +#include >>> +#include >>> +#include >>> +#include >>> +#include >>> +#include >> [SAMI] I could not find SmbiosType17FixupLib.h in this patch series. Can >> you check, please? >>> + >>> +// Module specific include files. >>> +#include >>> +#include >>> +#include >>> +#include >> [SAMI] I think Protocol/Smbios.h may not be required in this file. Can >> you check, please? >>> +#include >>> + >>> +/** This macro expands to a function that retrieves the Memory Device >>> +    information from the Configuration Manager. >>> +*/ >>> +GET_OBJECT_LIST ( >>> +  EObjNameSpaceArm, >>> +  EArmObjMemoryDeviceInfo, >>> +  CM_ARM_MEMORY_DEVICE_INFO >>> +  ) >>> + >>> +// Default Values for Memory Device >>> +STATIC SMBIOS_TABLE_TYPE17 MemDeviceInfoTemplate = { >>> +  {                                      // Hdr >>> +    EFI_SMBIOS_TYPE_MEMORY_DEVICE,       // Type >>> +    sizeof (SMBIOS_TABLE_TYPE17),        // Length >>> +    0                                    // Handle >>> +  }, >>> +  0,                                     // MemoryArrayHandle >> >> [SAMI] Do you have any thoughts on how the MemoryArrayHandle can be >> setup? >> >> The same applies for the following MemoryErrorInformationHandle field. >> >> I think we need some sort of a HandleManager in DynamicTablesFramework >> that can keep track of the mappings between SMBIOS Objects and Table >> Handles. >> >> e.g. Smbios - HandleManager >> >> +-------------------------------+-------------------------------+ >> >>        |    Object Token               | Table Handle                  | >> >> +-------------------------------+-------------------------------+ >> >>        | Type16Obj_token         | Type 16 Table handle    | >> >> +-------------------------------+-------------------------------+ >> >>        ... >> >> - The Type17Object i.e. CM_ARM_MEMORY_DEVICE_INFO can then hold a token >> for the Type16Object. >> >>   - If Type 17 table is to be installed, DynamicTablemanager shall >> search the SMBIOS table list to see if a Type16 table is requested to be >> installed. >> >> - If a Type16 table is present in the list of SMBIOS table to install, >> the Type16 table shall be installed first and an entry is made in the >> Smbios HandleManager to create a mapping of Type16Obj_token <==> Type16 >> Table Handle. >> >> - The Type17 table can now be built and if a the Type16Object token is >> provided in CM_ARM_MEMORY_DEVICE_INFO, the Smbios HandleManager shall be >> searched (using Type16Obj_token) to retrieve the Type16 Table handle and >> populate the Type 17 Physical Memory Array Handle field. >> >> I think we may have to experiment a bit before we arrive at the correct >> design. However, please do let me know your thoughts on the above. >> > > [GM] I agree with the idea of having a map of CM_OBJECT_TOKENs to > SMBIOS handles. I've added this to the DynamicTableFactoryProtocol. > > However when it comes to actually figuring out and adding the > reference SMBIOS handle We've come up with a slightly different approach. > > If I understood what you were saying above is: >  If we happen to parse a Type17 table >    if that Type17 table has a token to a Physical memory array CM_OBJ >      if there is an existing Smbios Handle (look up this handle using >                                              the CM_OBJECT_TOKEN) >          then use this handle. >      else if there is a generator for Type16 registered >          call the Type16 generator code first > > IMO this gets a bit difficult to manage. Right now the > DynamicTableManagerDxe walks the array of EStdObjSmbiosTableList CM > objects, finds the generator for each Table, invokes it, gets an > SMBIOS record that it then installs via the SmbiosDxe driver. > It seemed a bit convoluted to call the generator and install an SMBIOS > table while within the generator of another Smbios table. > And if there are layers of dependencies (or multiple dependencies) it > could add to the complexities. > > Instead what we came up with is: > > If we happen to parse a Type17 table >   if that Type17 table has a token to a Physical memory array CM_OBJ >      if there is an existing Smbios Handle (look up this handle using >                                              the CM_OBJECT_TOKEN ) >          then use this handle. >      else if there is a generator for Type16 Registered >            Generate an SMBIOS handle [since SmbiosDxe maintains the >                                       handle DB privately I had to >                                       pick a handle and check if it >                                       clashes with existing records] >            Add this SMBIOS handle to the map. >      else // No generator present >           Proceed without adding any reference > > > Before Adding any SMBIOS table, we check if there is an existing > SMBIOS handle for the CM_OBJECT_TOKEN (the generator will return a > CM_OBJECT_TOKEN for each SMBIOS record created). > If there is an existing SMBIOS handle, pass that in, else pass in > SMBIOS_HANDLE_PI_RESERVED and let SmbiosDxe assign the handle. > > Here is a sample implementation of this approach (it is a WIP, but I > wanted to get your thoughts on it) > > https://github.com/tianocore/edk2/compare/master...gmahadevan:edk2-upstream:RFC/smbios-dyntables > [SAMI] I had a look at the above branch and have the following suggestions: a. To resolve the dependency order, please see my patches for SMBIOS table dispatcher at: https://edk2.groups.io/g/devel/message/95340 You should be able to apply these patches on your 'edk2-upstream:RFC/smbios-dyntables' branch and enable the dispatcher in ProcessSmbiosTables(). e.g. In file DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManagerDxe.c, the SMBIOS table dispatcher can be invoked once it is initialised as shown below. @@ -1007,19 +1007,24 @@ ProcessSmbiosTables (      SmbiosTableCount      )); +  // Initialise the SMBIOS Table Dispatcher state machine. +  InitSmbiosTableDispatcher (SmbiosTableInfo, SmbiosTableCount); +    for (Idx = 0; Idx < SmbiosTableCount; Idx++) { -    Status = BuildAndInstallSmbiosTable ( +    Status = DispatchSmbiosTable ( +               SmbiosTableInfo[Idx].TableType,                 TableFactoryProtocol,                 CfgMgrProtocol,                 SmbiosProtocol, -               &SmbiosTableInfo[Idx] +               SmbiosTableInfo, +               SmbiosTableCount                 );      if (EFI_ERROR (Status)) {        DEBUG ((          DEBUG_ERROR, -        "ERROR: Failed to install SMBIOS Table." \ -        " Id = %u Status = %r\n", -        SmbiosTableInfo[Idx].TableGeneratorId, +        "ERROR: Failed to dispatch SMBIOS Table for installation." \ +        " Table Type = %u Status = %r\n", +        SmbiosTableInfo[Idx].TableType,          Status          ));      } b. With the SMBIOS dispatcher patch and the handle manager, it should be possible to update the handles for dependent tables. This should remove the need for the handle generation and management. c. With regards to the SMBIOS handle manager, I think it would be better to add CM_OBJECT_ID for the SmbiosCmTokenin SMBIOS_HANDLE_MAP. d. A new SMBIOS object namespace should be defined.     e.g Namespace ID 1010b or 1100b - SMBIOS Objects, see https://github.com/tianocore/edk2/blob/master/DynamicTablesPkg/Include/ConfigurationManagerObject.h#L30-L34    With this change, CM_ARM_MEMORY_DEVICE_INFO becomes CM_SMBIOS_MEMORY_DEVICE_INFO     Similarly, EArmObjMemoryDeviceInfo becomes ESmbiosObjMemoryDeviceInfo e. With regards to DynamicTableManager.c, I think we should split the ACPI & SMBIOS processing in individual files (e.g. AcpiBuilder.c & SmbiosBuilder.c) under DynamicTableManagerDxe. f. Status appears to be returned uninitialised in DynamicTableManagerDxeInitialize(). g. DynamicTablesPkg\Library\Smbios\Arm\SmbiosType17Lib can be moved to DynamicTablesPkg\Library\Smbios\SmbiosType17Lib. I prefer a github branch with the patch as it is very helpful to view the code being reviewed. However, it is difficult to provide feedback. Is it possible to submit a patch for the changes with the link for the guthub branch in the future, please? I am not sure if we need an edk2-staging branch for this feature. But if you think it would be helpful then please let me know and I will send out a request to create a new feature branch. [/SAMI] > Sorry for the long message, please let me know your thoughts. > > [/GM] > >> [SAMI] >>> + 0,                                     // >>> MemoryErrorInformationHandle >>> +  0xFFFF,                                // TotalWidth >>> +  0xFFFF,                                // DataWIdth >> >> [SAMI] I need to find out how these fields should be populated, but the >> Annex A, SMBIOS specification version 3.6.0 says the following: >> >> 4.8.4 Total Width is not 0FFFFh (Unknown) if the memory device is >> installed. (Size is not 0.) >> >> 4.8.5 Data Width is not 0FFFFh (Unknown). >> >> Can you explain how this field is used, please? >> >> [/SAMI] >> >>> + 0x7FFF,                                // Size (always use >>> Extended Size) >> >> [SAMI] I think this field should be set based on the Size. >> >> The spec says "If the size is 32 GB-1 MB or greater, the field value is >> 7FFFh and the actual size is stored in the Extended Size field." >> >> I think it would be good to have a static function  that encodes the >> size in wither the Size field or the Extended Size field. >> >> e.g. UpdateSmbiosTable17Size (SMBIOS_TABLE_TYPE17 *SmbiosRecord, UINTN >> Size) { >> >>           if (Size > 32GB-1MB) { >> >>              SmbiosRecord->Size = EncodeSize (xxx); >> >>            } else { >> >>               SmbiosRecord->ExtendedSize = EncodeExtendedSize (xxx); >> >>           } >> >>      } >> >> [/SAMI] >> >>> + MemoryTypeUnknown,                     // FormFactor >>> +  0xFF,                                  // DeviceSet >>> +  1,                                     // Device Locator >>> +  2,                                     // Bank Locator >>> +  MemoryTypeSdram,                       // MemoryType >>> +  {                                      // TypeDetail >>> +    0 >>> +  }, >>> +  0xFFFF,                                // Speed (Use Extended Speed) >> [SAMI] Maybe we need a helper function (similar to >> UpdateSmbiosTable17Size()) for this field as well. >>> + 0,                                     // Manufacturer >>> +                                         // (Unused Use >>> ModuleManufactuerId) >>> +  3,                                     // SerialNumber >>> +  4,                                     // AssetTag >>> +  0,                                     // PartNumber >>> +                                         // (Unused Use >>> ModuleProductId) >>> +  0,                                     // Attributes >>> +  0,                                     // ExtendedSize >>> +  2000,                                  // ConfiguredMemoryClockSpeed >> [SAMI] Should this be provided through CM_ARM_MEMORY_DEVICE_INFO? >>> + 0,                                     // MinimumVoltage >>> +  0,                                     // MaximumVoltage >>> +  0,                                     // ConfiguredVoltage >>> +  MemoryTechnologyDram,                  // MemoryTechnology >> [SAMI] Should this be provided through CM_ARM_MEMORY_DEVICE_INFO? >>> + {                                      // >>> MemoryOperatingModeCapability >>> +    .Uint16 = 0x000 >>> +  }, >> [SAMI] I think the above initialisation may not be portable. >>> +  5, // FirmwareVersion >>> +  0,                                    // ModuleManufacturerId >>> +  0,                                    // ModuleProductId >>> +  0,                                    // >>> MemorySubsystemContollerManufacturerId >>> +  0,                                    // >>> MemorySybsystemControllerProductId >>> +  0,                                    // NonVolatileSize >>> +  0,                                    // VolatileSize >>> +  0,                                    // CacheSize >>> +  0,                                    // LogicalSize >>> +  0,                                    // ExtendedSpeed >>> +  0,                                    // >>> ExtendedConfiguredMemorySpeed >>> +}; >>> + >>> +STATIC CHAR8  UnknownStr[] = "Unknown\0"; >> [SAMI] Would it be possible to add the CONST qualifier, please? >>> + >>> +STATIC >>> +EFI_STATUS >>> +EFIAPI >>> +FreeSmbiosType17TableEx ( >>> +  IN      CONST SMBIOS_TABLE_GENERATOR *CONST    This, >>> +  IN      CONST CM_STD_OBJ_SMBIOS_TABLE_INFO *CONST    >>> SmbiosTableInfo, >>> +  IN      CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST    >>> CfgMgrProtocol, >>> +  IN OUT        SMBIOS_STRUCTURE ***CONST  Table, >>> +  IN      CONST UINTN                                              >>> TableCount >>> +  ) >>> +{ >>> +  return EFI_SUCCESS; >>> +} >>> + >>> +/** Construct SMBIOS Type17 Table describing memory devices. >>> + >>> +  If this function allocates any resources then they must be freed >>> +  in the FreeXXXXTableResources function. >>> + >>> +  @param [in]  This            Pointer to the SMBIOS table generator. >>> +  @param [in]  SmbiosTableInfo Pointer to the SMBIOS table >>> information. >>> +  @param [in]  CfgMgrProtocol  Pointer to the Configuration Manager >>> +                               Protocol interface. >>> +  @param [out] Table           Pointer to the SMBIOS table. >>> + >>> +  @retval EFI_SUCCESS            Table generated successfully. >>> +  @retval EFI_BAD_BUFFER_SIZE    The size returned by the >>> Configuration >>> +                                 Manager is less than the Object >>> size for >>> +                                 the requested object. >>> +  @retval EFI_INVALID_PARAMETER  A parameter is invalid. >>> +  @retval EFI_NOT_FOUND          Could not find information. >>> +  @retval EFI_OUT_OF_RESOURCES   Could not allocate memory. >>> +  @retval EFI_UNSUPPORTED        Unsupported configuration. >>> +**/ >>> +STATIC >>> +EFI_STATUS >>> +EFIAPI >>> +BuildSmbiosType17TableEx ( >>> +  IN  CONST SMBIOS_TABLE_GENERATOR *This, >>> +  IN        CM_STD_OBJ_SMBIOS_TABLE_INFO           *CONST >>> SmbiosTableInfo, >>> +  IN  CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL   *CONST >>> CfgMgrProtocol, >>> +  OUT       SMBIOS_STRUCTURE ***Table, >>> +  OUT       UINTN                                  *CONST TableCount >>> +  ) >>> +{ >>> +  EFI_STATUS                 Status; >>> +  UINT32                     NumMemDevices; >>> +  SMBIOS_STRUCTURE           **TableList; >>> +  CM_ARM_MEMORY_DEVICE_INFO  *MemoryDevicesInfo; >>> +  UINTN                      Index; >>> +  UINTN                      SerialNumLen; >>> +  CHAR8                      *SerialNum; >>> +  UINTN                      AssetTagLen; >>> +  CHAR8                      *AssetTag; >>> +  UINTN                      DeviceLocatorLen; >>> +  CHAR8                      *DeviceLocator; >>> +  UINTN                      BankLocatorLen; >>> +  CHAR8                      *BankLocator; >>> +  UINTN                      FirmwareVersionLen; >>> +  CHAR8                      *FirmwareVersion; >>> +  CHAR8                      *OptionalStrings; >>> +  SMBIOS_TABLE_TYPE17        *SmbiosRecord; >>> + >>> +  ASSERT (This != NULL); >>> +  ASSERT (SmbiosTableInfo != NULL); >>> +  ASSERT (CfgMgrProtocol != NULL); >>> +  ASSERT (Table != NULL); >>> +  ASSERT (TableCount != NULL); >>> +  ASSERT (SmbiosTableInfo->TableGeneratorId == This->GeneratorID); >>> + >>> +  DEBUG ((DEBUG_ERROR, "%a : Start \n", __FUNCTION__)); >>> +  *Table = NULL; >>> +  Status = GetEArmObjMemoryDeviceInfo ( >>> +             CfgMgrProtocol, >>> +             CM_NULL_TOKEN, >>> +             &MemoryDevicesInfo, >>> +             &NumMemDevices >>> +             ); >>> +  if (EFI_ERROR (Status)) { >>> +    DEBUG (( >>> +      DEBUG_ERROR, >>> +      "Failed to get Memory Devices CM Object %r\n", >>> +      Status >>> +      )); >>> +    return Status; >>> +  } >>> + >>> +  TableList = (SMBIOS_STRUCTURE **)AllocateZeroPool (sizeof >>> (SMBIOS_STRUCTURE *) * NumMemDevices); >> [SAMI] The memory allocated here should be freed in >> FreeSmbiosType17TableEx. >>> +  if (TableList == NULL) { >>> +    DEBUG ((DEBUG_ERROR, "Failed to alloc memory for %u devices >>> table\n")); >>> +    Status = EFI_OUT_OF_RESOURCES; >>> +    goto exit; >>> +  } >>> + >>> +  for (Index = 0; Index < NumMemDevices; Index++) { >>> +    if (MemoryDevicesInfo[Index].SerialNum != NULL) { >>> +      SerialNumLen = AsciiStrLen (MemoryDevicesInfo[Index].SerialNum); >>> +      SerialNum    = MemoryDevicesInfo[Index].SerialNum; >>> +    } else { >>> +      SerialNumLen = AsciiStrLen (UnknownStr); >>> +      SerialNum    = UnknownStr; >> >> [SAMI] If the serial number is not provided, then should the string >> field be set to 0? >> >> See Section 6.1.3, SMBIOS Spec Version 3.6.0 which states >> >> "If a string field references no string, a null (0) is placed in that >> string field." >> >> [/SAMI] >> >>> +    } >>> + >>> +    if (MemoryDevicesInfo[Index].AssetTag != NULL) { >>> +      AssetTagLen = AsciiStrLen (MemoryDevicesInfo[Index].AssetTag); >>> +      AssetTag    = MemoryDevicesInfo[Index].AssetTag; >>> +    } else { >>> +      AssetTagLen = AsciiStrLen (UnknownStr); >>> +      AssetTag    = UnknownStr; >>> +    } >>> + >>> +    if (MemoryDevicesInfo[Index].DeviceLocator != NULL) { >>> +      DeviceLocatorLen = AsciiStrLen >>> (MemoryDevicesInfo[Index].DeviceLocator); >>> +      DeviceLocator    = MemoryDevicesInfo[Index].DeviceLocator; >>> +    } else { >>> +      DeviceLocatorLen = AsciiStrLen (UnknownStr); >>> +      DeviceLocator    = UnknownStr; >>> +    } >>> + >>> +    if (MemoryDevicesInfo[Index].BankLocator != NULL) { >>> +      BankLocatorLen = AsciiStrLen >>> (MemoryDevicesInfo[Index].BankLocator); >>> +      BankLocator    = MemoryDevicesInfo[Index].BankLocator; >>> +    } else { >>> +      BankLocatorLen = AsciiStrLen (UnknownStr); >>> +      BankLocator    = UnknownStr; >>> +    } >>> + >>> +    if (MemoryDevicesInfo[Index].FirmwareVersion != NULL) { >>> +      FirmwareVersionLen = AsciiStrLen >>> (MemoryDevicesInfo[Index].FirmwareVersion); >>> +      FirmwareVersion    = MemoryDevicesInfo[Index].FirmwareVersion; >>> +    } else { >>> +      FirmwareVersionLen = AsciiStrLen (UnknownStr); >>> +      FirmwareVersion    = UnknownStr; >>> +    } >>> + >>> +    SmbiosRecord = (SMBIOS_TABLE_TYPE17 *)AllocateZeroPool ( >>> +                                            sizeof >>> (SMBIOS_TABLE_TYPE17) + >>> +                                            SerialNumLen + 1 + >>> +                                            AssetTagLen + 1 + >>> DeviceLocatorLen + 1 + >>> +                                            BankLocatorLen + 1 + >>> FirmwareVersionLen + 1 + 1 >>> +                                            ); >> [SAMI] The memory allocated here needs to be freed in >> FreeSmbiosType17TableEx as  SmbiosProtocol->Add () makes a copy of the >> SmbiosTable, see >> https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Ftianocore%2Fedk2%2Fblob%2Fmaster%2FMdeModulePkg%2FUniversal%2FSmbiosDxe%2FSmbiosDxe.c%23L476&data=05%7C01%7Cgmahadevan%40nvidia.com%7C1169a52a2ad140a8d79308da94cf2762%7C43083d15727340c1b7db39efd9ccc17a%7C0%7C0%7C637985914717380634%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=EnTxn07ekjA7bGUeCg2c0BaUMVW0yU5JFjXNOcZuhQA%3D&reserved=0 >> >> and >> https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Ftianocore%2Fedk2%2Fblob%2Fmaster%2FMdeModulePkg%2FUniversal%2FSmbiosDxe%2FSmbiosDxe.c%23L516&data=05%7C01%7Cgmahadevan%40nvidia.com%7C1169a52a2ad140a8d79308da94cf2762%7C43083d15727340c1b7db39efd9ccc17a%7C0%7C0%7C637985914717380634%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=d6kU6CdywK4fnOdxE8CyTTM9eQHDE38FzZB7SA2FTqc%3D&reserved=0. >> >> >>> +    if (SmbiosRecord == NULL) { >>> +      Status = EFI_OUT_OF_RESOURCES; >>> +      goto exit; >>> +    } >>> + >>> +    CopyMem (SmbiosRecord, &MemDeviceInfoTemplate, sizeof >>> (SMBIOS_TABLE_TYPE17)); >>> +    SmbiosRecord->ExtendedSize         = >>> MemoryDevicesInfo[Index].Size; >> >> [SAMI] CM_ARM_MEMORY_DEVICE_INFO.Size is documented as size in bytes, >> while looking at the SMBIOS specification, section 7.18.5 for the >> Extended Size Bits 30:0 represent the size of the memory device in >> megabytes. >> >> I think it will be useful to create UpdateSmbiosTable17Size() which does >> the appropriate encoding and updation of the SMBIOS table fieds. >> >> [/SAMI] >> >>> + SmbiosRecord->DeviceSet            = >>> MemoryDevicesInfo[Index].DeviceSet; >>> +    SmbiosRecord->ModuleManufacturerID = >>> +      MemoryDevicesInfo[Index].ModuleManufacturerId; >>> +    SmbiosRecord->ModuleProductID = >>> +      MemoryDevicesInfo[Index].ModuleProductId; >>> +    SmbiosRecord->Attributes = >>> +      MemoryDevicesInfo[Index].Attributes; >>> +    SmbiosRecord->ExtendedSpeed = MemoryDevicesInfo[Index].Speed; >>> +    OptionalStrings             = (CHAR8 *)(SmbiosRecord + 1); >>> +    AsciiSPrint (OptionalStrings, DeviceLocatorLen + 1, >>> DeviceLocator); >> [SAMI] I think we can simplify the publishing of the SMBIOS strings >> using SmbiosStringTableLib. Please see the patch at >> https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fedk2.groups.io%2Fg%2Fdevel%2Fmessage%2F93651&data=05%7C01%7Cgmahadevan%40nvidia.com%7C1169a52a2ad140a8d79308da94cf2762%7C43083d15727340c1b7db39efd9ccc17a%7C0%7C0%7C637985914717380634%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=4xHMP2KfNlcdeBrtH%2FIT1F249uWIoz0XZreF3FSugq8%3D&reserved=0 >> >>> +    OptionalStrings = OptionalStrings + DeviceLocatorLen + 1; >>> +    AsciiSPrint (OptionalStrings, BankLocatorLen + 1, BankLocator); >>> +    OptionalStrings = OptionalStrings + BankLocatorLen + 1; >>> +    AsciiSPrint (OptionalStrings, SerialNumLen + 1, SerialNum); >>> +    OptionalStrings = OptionalStrings + SerialNumLen + 1; >>> +    AsciiSPrint (OptionalStrings, AssetTagLen + 1, AssetTag); >>> +    OptionalStrings = OptionalStrings + AssetTagLen + 1; >>> +    AsciiSPrint (OptionalStrings, FirmwareVersionLen + 1, >>> FirmwareVersion); >>> +    OptionalStrings  = OptionalStrings + FirmwareVersionLen + 1; >>> +    TableList[Index] = (SMBIOS_STRUCTURE *)SmbiosRecord; >>> +  } >>> + >>> +  *Table      = TableList; >>> +  *TableCount = NumMemDevices; >>> + >>> +exit: >>> +  DEBUG ((DEBUG_ERROR, "%a : Done \n", __FUNCTION__)); >>> +  return Status; >>> +} >>> + >>> +/** The interface for the SMBIOS Type17 Table Generator. >>> +*/ >>> +STATIC >>> +CONST >>> +SMBIOS_TABLE_GENERATOR  SmbiosType17Generator = { >>> +  // Generator ID >>> +  CREATE_STD_SMBIOS_TABLE_GEN_ID (EStdSmbiosTableIdType17), >>> +  // Generator Description >>> +  L"SMBIOS.TYPE17.GENERATOR", >>> +  // SMBIOS Table Type >>> +  EFI_SMBIOS_TYPE_MEMORY_DEVICE, >>> +  NULL, >>> +  NULL, >>> +  // Build table function Extended. >>> +  BuildSmbiosType17TableEx, >>> +  // Free function Extended. >>> +  FreeSmbiosType17TableEx >>> +}; >>> + >>> +/** Register the Generator with the SMBIOS Table Factory. >>> + >>> +  @param [in]  ImageHandle  The handle to the image. >>> +  @param [in]  SystemTable  Pointer to the System Table. >>> + >>> +  @retval EFI_SUCCESS           The Generator is registered. >>> +  @retval EFI_INVALID_PARAMETER A parameter is invalid. >>> +  @retval EFI_ALREADY_STARTED   The Generator for the Table ID >>> +                                is already registered. >>> +**/ >>> +EFI_STATUS >>> +EFIAPI >>> +SmbiosType17LibConstructor ( >>> +  IN  EFI_HANDLE        ImageHandle, >>> +  IN  EFI_SYSTEM_TABLE  *SystemTable >>> +  ) >>> +{ >>> +  EFI_STATUS  Status; >>> + >>> +  Status = RegisterSmbiosTableGenerator (&SmbiosType17Generator); >>> +  DEBUG (( >>> +    DEBUG_INFO, >>> +    "SMBIOS Type 17: Register Generator. Status = %r\n", >>> +    Status >>> +    )); >>> +  ASSERT_EFI_ERROR (Status); >>> + >>> +  return Status; >>> +} >>> + >>> +/** Deregister the Generator from the SMBIOS Table Factory. >>> + >>> +  @param [in]  ImageHandle  The handle to the image. >>> +  @param [in]  SystemTable  Pointer to the System Table. >>> + >>> +  @retval EFI_SUCCESS           The Generator is deregistered. >>> +  @retval EFI_INVALID_PARAMETER A parameter is invalid. >>> +  @retval EFI_NOT_FOUND         The Generator is not registered. >>> +**/ >>> +EFI_STATUS >>> +EFIAPI >>> +SmbiosType17LibDestructor ( >>> +  IN  EFI_HANDLE        ImageHandle, >>> +  IN  EFI_SYSTEM_TABLE  *SystemTable >>> +  ) >>> +{ >>> +  EFI_STATUS  Status; >>> + >>> +  Status = DeregisterSmbiosTableGenerator (&SmbiosType17Generator); >>> +  DEBUG (( >>> +    DEBUG_INFO, >>> +    "SMBIOS Type17: Deregister Generator. Status = %r\n", >>> +    Status >>> +    )); >>> +  ASSERT_EFI_ERROR (Status); >>> +  return Status; >>> +} >>> diff --git >>> a/DynamicTablesPkg/Library/Smbios/Arm/SmbiosType17Lib/SmbiosType17LibArm.inf >>> b/DynamicTablesPkg/Library/Smbios/Arm/SmbiosType17Lib/SmbiosType17LibArm.inf >>> >>> new file mode 100644 >>> index 0000000000..78a80b75f0 >>> --- /dev/null >>> +++ >>> b/DynamicTablesPkg/Library/Smbios/Arm/SmbiosType17Lib/SmbiosType17LibArm.inf >>> @@ -0,0 +1,32 @@ >>> +## @file >>> +# SMBIOS Type17 Table Generator >>> +# >>> +#  Copyright (c) 2022, NVIDIA CORPORATION & AFFILIATES. All rights >>> reserved. >>> +#  Copyright (c) 2019 - 2021, Arm Limited. All rights reserved.
>>> +# >>> +#  SPDX-License-Identifier: BSD-2-Clause-Patent >>> +## >>> + >>> +[Defines] >>> +  INF_VERSION    = 0x0001001B >>> +  BASE_NAME      = SmbiosType17LibArm >>> +  FILE_GUID      = 1f063bac-f8f1-4e08-8ffd-9aae52c75497 >>> +  VERSION_STRING = 1.0 >>> +  MODULE_TYPE    = DXE_DRIVER >>> +  LIBRARY_CLASS  = NULL|DXE_DRIVER >>> +  CONSTRUCTOR    = SmbiosType17LibConstructor >>> +  DESTRUCTOR     = SmbiosType17LibDestructor >>> + >>> +[Sources] >>> +  SmbiosType17Generator.c >>> + >>> +[Packages] >>> +  MdePkg/MdePkg.dec >>> +  MdeModulePkg/MdeModulePkg.dec >>> +  EmbeddedPkg/EmbeddedPkg.dec >>> +  ArmPlatformPkg/ArmPlatformPkg.dec >>> +  DynamicTablesPkg/DynamicTablesPkg.dec >>> + >>> +[LibraryClasses] >>> +  BaseLib >>> +  DebugLib > > > > > --------------YiBaZIWrlQzCmvVlSDS3UEAk Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: base64 PGh0bWw+PGhlYWQ+DQo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRl eHQvaHRtbDsgY2hhcnNldD11dGYtOCI+DQogIDwvaGVhZD4NCiAgPGJvZHk+DQogICAgPHA+SGkg R2lyaXNoLDwvcD4NCiAgICA8cD5QbGVhc2UgZmluZCBteSByZXNwb25zZSBpbmxpbmUgbWFya2Vk IFtTQU1JXS48L3A+DQogICAgPHA+UmVnYXJkcyw8L3A+DQogICAgPHA+U2FtaSBNdWphd2FyPGJy Pg0KICAgIDwvcD4NCiAgICA8ZGl2IGNsYXNzPSJtb3otY2l0ZS1wcmVmaXgiPk9uIDA0LzEwLzIw MjIgMTE6NDMgcG0sIEdpcmlzaA0KICAgICAgTWFoYWRldmFuIHZpYSBncm91cHMuaW8gd3JvdGU6 PGJyPg0KICAgIDwvZGl2Pg0KICAgIDxibG9ja3F1b3RlIHR5cGU9ImNpdGUiIGNpdGU9Im1pZDoy MjA0ZTc4NS1kMDVhLWE0N2QtMmRhNi1hOWI2YjhlNjA4YTBAbnZpZGlhLmNvbSI+SGVsbG8NCiAg ICAgIFNhbWkNCiAgICAgIDxicj4NCiAgICAgIDxicj4NCiAgICAgIFRoYW5rIHlvdSBzbyBtdWNo IGZvciB5b3VyIHJldmlldywgSSBhcG9sb2dpemUgZm9yIHRoZSBsYXRlDQogICAgICByZXNwb25z ZS4NCiAgICAgIDxicj4NCiAgICAgIDxicj4NCiAgICAgIE15IGNvbW1lbnQgaW4gbGluZSBhYm91 dCB0aGUgaGFuZGxlIG1hbmFnZXIgW0dNXS4NCiAgICAgIDxicj4NCiAgICAgIDxicj4NCiAgICAg IEJlc3QgUmVnYXJkcw0KICAgICAgPGJyPg0KICAgICAgR2lyaXNoDQogICAgICA8YnI+DQogICAg ICA8YnI+DQogICAgICBPbiA5LzEyLzIwMjIgODo1NyBBTSwgU2FtaSBNdWphd2FyIHdyb3RlOg0K ICAgICAgPGJyPg0KICAgICAgPGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSI+RXh0ZXJuYWwgZW1haWw6 IFVzZSBjYXV0aW9uIG9wZW5pbmcgbGlua3MNCiAgICAgICAgb3IgYXR0YWNobWVudHMNCiAgICAg ICAgPGJyPg0KICAgICAgICA8YnI+DQogICAgICAgIDxicj4NCiAgICAgICAgSGkgR2lyaXNoLA0K ICAgICAgICA8YnI+DQogICAgICAgIDxicj4NCiAgICAgICAgVGhhbmsgeW91IGZvciB0aGlzIHBh dGNoIGFuZCBmb3IgdGhlIGVmZm9ydCBmb3IgYnJpbmdpbmcgZm9yd2FyZA0KICAgICAgICBkeW5h bWljDQogICAgICAgIDxicj4NCiAgICAgICAgU01CSU9TIGdlbmVyYXRpb24uDQogICAgICAgIDxi cj4NCiAgICAgICAgPGJyPg0KICAgICAgICBQbGVhc2UgZmluZCBteSBmZWVkYmFjayBpbmxpbmUg bWFya2VkIFtTQU1JXS4NCiAgICAgICAgPGJyPg0KICAgICAgICA8YnI+DQogICAgICAgIFJlZ2Fy ZHMsDQogICAgICAgIDxicj4NCiAgICAgICAgPGJyPg0KICAgICAgICBTYW1pIE11amF3YXINCiAg ICAgICAgPGJyPg0KICAgICAgICA8YnI+DQogICAgICAgIE9uIDI2LzA4LzIwMjIgMDY6MzcgcG0s IEdpcmlzaCBNYWhhZGV2YW4gd3JvdGU6DQogICAgICAgIDxicj4NCiAgICAgICAgPGJsb2NrcXVv dGUgdHlwZT0iY2l0ZSI+QWRkIGEgbmV3IENNIG9iamVjdCB0byBkZXNjcmliZSBtZW1vcnkNCiAg ICAgICAgICBkZXZpY2VzIGFuZCBzZXR1cCBhIG5ldw0KICAgICAgICAgIDxicj4NCiAgICAgICAg ICBHZW5lcmF0b3IgTGlicmFyeSBmb3IgU01CSU9TIFR5cGUxNyB0YWJsZS4NCiAgICAgICAgICA8 YnI+DQogICAgICAgICAgPGJyPg0KICAgICAgICAgIFNpZ25lZC1vZmYtYnk6IEdpcmlzaCBNYWhh ZGV2YW48YSBjbGFzcz0ibW96LXR4dC1saW5rLXJmYzIzOTZFIiBocmVmPSJtYWlsdG86Z21haGFk ZXZhbkBudmlkaWEuY29tIj4mbHQ7Z21haGFkZXZhbkBudmlkaWEuY29tJmd0OzwvYT4NCiAgICAg ICAgICA8YnI+DQogICAgICAgICAgLS0tDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICZuYnNw OyAuLi4vSW5jbHVkZS9Bcm1OYW1lU3BhY2VPYmplY3RzLmgmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgfCZuYnNw OyA1OSArKysNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgJm5ic3A7IC4uLi9TbWJpb3NUeXBl MTdMaWIvU21iaW9zVHlwZTE3R2VuZXJhdG9yLmMmbmJzcDsmbmJzcDsgfCAzMzgNCiAgICAgICAg ICArKysrKysrKysrKysrKysrKysNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgJm5ic3A7IC4u Li9TbWJpb3NUeXBlMTdMaWIvU21iaW9zVHlwZTE3TGliQXJtLmluZiZuYnNwOyZuYnNwOyZuYnNw OyB8Jm5ic3A7IDMyICsrDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICZuYnNwOyAzIGZpbGVz IGNoYW5nZWQsIDQyOSBpbnNlcnRpb25zKCspDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICZu YnNwOyBjcmVhdGUgbW9kZSAxMDA2NDQNCkR5bmFtaWNUYWJsZXNQa2cvTGlicmFyeS9TbWJpb3Mv QXJtL1NtYmlvc1R5cGUxN0xpYi9TbWJpb3NUeXBlMTdHZW5lcmF0b3IuYzxicj4NCiAgICAgICAg ICAmbmJzcDsgY3JlYXRlIG1vZGUgMTAwNjQ0DQpEeW5hbWljVGFibGVzUGtnL0xpYnJhcnkvU21i aW9zL0FybS9TbWJpb3NUeXBlMTdMaWIvU21iaW9zVHlwZTE3TGliQXJtLmluZjxicj4NCiAgICAg ICAgICA8YnI+DQogICAgICAgICAgZGlmZiAtLWdpdCBhL0R5bmFtaWNUYWJsZXNQa2cvSW5jbHVk ZS9Bcm1OYW1lU3BhY2VPYmplY3RzLmgNCiAgICAgICAgICBiL0R5bmFtaWNUYWJsZXNQa2cvSW5j bHVkZS9Bcm1OYW1lU3BhY2VPYmplY3RzLmgNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgaW5k ZXggMTAyZTBmOTZiZS4uMTk5YTE5ZTk5NyAxMDA2NDQNCiAgICAgICAgICA8YnI+DQogICAgICAg ICAgLS0tIGEvRHluYW1pY1RhYmxlc1BrZy9JbmNsdWRlL0FybU5hbWVTcGFjZU9iamVjdHMuaA0K ICAgICAgICAgIDxicj4NCiAgICAgICAgICArKysgYi9EeW5hbWljVGFibGVzUGtnL0luY2x1ZGUv QXJtTmFtZVNwYWNlT2JqZWN0cy5oDQogICAgICAgICAgPGJyPg0KICAgICAgICAgIEBAIC02Myw2 ICs2Myw3IEBAIHR5cGVkZWYgZW51bSBBcm1PYmplY3RJRCB7DQogICAgICAgICAgPGJyPg0KICAg ICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyBFQXJtT2JqUGNpSW50ZXJydXB0TWFwSW5mbywmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgLy8vJmx0 OyAzOSAtIFBjaQ0KICAgICAgICAgIEludGVycnVwdCBNYXAgSW5mbw0KICAgICAgICAgIDxicj4N CiAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsgRUFybU9ialJtciwmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsgLy8vJmx0OyA0MCAtIFJlc2VydmVkDQogICAgICAgICAgTWVt b3J5IFJhbmdlIE5vZGUNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5i c3A7IEVBcm1PYmpNZW1vcnlSYW5nZURlc2NyaXB0b3IsJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7IC8vLyZsdDsgNDEgLSBNZW1vcnkNCiAgICAgICAgICBSYW5nZSBE ZXNjcmlwdG9yDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsgRUFybU9iak1lbW9y eURldmljZUluZm8sJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IC8vLyZsdDsgNDIgLSBNZW1vcnkNCiAgICAgICAg ICBEZXZpY2UgSW5mb3JtYXRpb24NCiAgICAgICAgICA8YnI+DQogICAgICAgICAgJm5ic3A7Jm5i c3A7Jm5ic3A7IEVBcm1PYmpNYXgNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgJm5ic3A7IH0g RUFSTV9PQkpFQ1RfSUQ7DQogICAgICAgICAgPGJyPg0KICAgICAgICAgIDxicj4NCiAgICAgICAg ICBAQCAtMTA3MCw2ICsxMDcxLDY0IEBAIHR5cGVkZWYgc3RydWN0IENtQXJtUm1yRGVzY3JpcHRv ciB7DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyBVSU5UNjQm bmJzcDsmbmJzcDsmbmJzcDsgTGVuZ3RoOw0KICAgICAgICAgIDxicj4NCiAgICAgICAgICAmbmJz cDsgfSBDTV9BUk1fTUVNT1JZX1JBTkdFX0RFU0NSSVBUT1I7DQogICAgICAgICAgPGJyPg0KICAg ICAgICAgIDxicj4NCiAgICAgICAgICArLyoqIEEgc3RydWN0dXJlIHRoYXQgZGVzY3JpYmVzIHRo ZSBwaHlzaWNhbCBtZW1vcnkgZGV2aWNlLg0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArDQog ICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsgVGhlIHBoeXNpY2FsIG1lbW9yeSBkZXZp Y2VzIG9uIHRoZSBzeXN0ZW0gYXJlIGRlc2NyaWJlZCBieQ0KICAgICAgICAgIHRoaXMgb2JqZWN0 Lg0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArDQogICAgICAgICAgPGJyPg0KICAgICAgICAg ICsmbmJzcDsgU01CSU9TIFNwZWNpZmljYXRpb24gdjMuNS4wIFR5cGUxNw0KICAgICAgICAgIDxi cj4NCiAgICAgICAgICArDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsgSUQ6IEVB cm1PYmpNZW1vcnlEZXZpY2VJbmZvLA0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArKi8NCiAg ICAgICAgICA8YnI+DQogICAgICAgICAgK3R5cGVkZWYgc3RydWN0IENtQXJtTWVtb3J5RGV2aWNl SW5mbyB7DQogICAgICAgICAgPGJyPg0KICAgICAgICA8L2Jsb2NrcXVvdGU+DQogICAgICAgIFtT QU1JXSBJIHRoaW5rIHdlIG1heSBuZWVkIGEgVG9rZW4gcG9pbnRpbmcgdG8gdGhlIFR5cGUgMTYN CiAgICAgICAgb2JqZWN0IHNvDQogICAgICAgIDxicj4NCiAgICAgICAgdGhhdCB0aGUgUGh5c2lj YWwgTWVtb3J5IEFycmF5IEhhbmRsZSBjYW4gYmUgc2V0dXAsIHNlZSBteQ0KICAgICAgICBjb21t ZW50IGJlbG93DQogICAgICAgIDxicj4NCiAgICAgICAgYWJvdXQgdGhlIEhhbmRsZU1hbmFnZXIu DQogICAgICAgIDxicj4NCiAgICAgICAgPGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSI+KyZuYnNwOyAv KiogU2l6ZSBvZiB0aGUgZGV2aWNlLg0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7 Jm5ic3A7Jm5ic3A7IFNpemUgb2YgdGhlIGRldmljZSBpbiBieXRlcy4NCiAgICAgICAgICA8YnI+ DQogICAgICAgICAgKyZuYnNwOyAqLw0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7 IFVJTlQ2NCZuYnNwOyBTaXplOw0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArDQogICAgICAg ICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsgLyoqIERldmljZSBTZXQgKi8NCiAgICAgICAgICA8 YnI+DQogICAgICAgICAgKyZuYnNwOyBVSU5UOCZuYnNwOyZuYnNwOyBEZXZpY2VTZXQ7DQogICAg ICAgICAgPGJyPg0KICAgICAgICAgICsNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNw OyAvKiogU3BlZWQgb2YgdGhlIGRldmljZQ0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5i c3A7Jm5ic3A7Jm5ic3A7IFNwZWVkIG9mIHRoZSBkZXZpY2UgaW4gTWVnYVRyYW5zZmVycy9zZWNv bmQuDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsgKi8NCiAgICAgICAgICA8YnI+ DQogICAgICAgICAgKyZuYnNwOyBVSU5UMzImbmJzcDsgU3BlZWQ7DQogICAgICAgICAgPGJyPg0K ICAgICAgICAgICsNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyAvKiogU2VyaWFs IE51bWJlciBvZiBkZXZpY2UmbmJzcDsgKi8NCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZu YnNwOyBDSEFSOCZuYnNwOyZuYnNwOyAqU2VyaWFsTnVtOw0KICAgICAgICAgIDxicj4NCiAgICAg ICAgICArDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsgLyoqIEFzc2V0VGFnIGlk ZW50aWZ5aW5nIHRoZSBkZXZpY2UgKi8NCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNw OyBDSEFSOCZuYnNwOyZuYnNwOyAqQXNzZXRUYWc7DQogICAgICAgICAgPGJyPg0KICAgICAgICAg ICsNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyAvKiogRGV2aWNlIExvY2F0b3Ig U3RyaW5nIGZvciB0aGUgZGV2aWNlLg0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7 Jm5ic3A7IFN0cmluZyB0aGF0IGRlc2NyaWJlcyB0aGUgc2xvdCBvciBwb3NpdGlvbiBvZiB0aGUg ZGV2aWNlDQogICAgICAgICAgb24gdGhlIGJvYXJkLg0KICAgICAgICAgIDxicj4NCiAgICAgICAg ICArJm5ic3A7Jm5ic3A7ICovDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsgQ0hB UjgmbmJzcDsmbmJzcDsgKkRldmljZUxvY2F0b3I7DQogICAgICAgICAgPGJyPg0KICAgICAgICAg ICsNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyAvKiogQmFuayBsb2NhdG9yIHN0 cmluZyBmb3IgdGhlIGRldmljZS4NCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyZu YnNwOyBTdHJpbmcgdGhhdCBkZXNjcmliZXMgdGhlIGJhbmsgd2hlcmUgdGhlIGRldmljZSBpcw0K ICAgICAgICAgIGxvY2F0ZWQuDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsmbmJz cDsgKi8NCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyBDSEFSOCZuYnNwOyZuYnNw OyAqQmFua0xvY2F0b3I7DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsNCiAgICAgICAgICA8 YnI+DQogICAgICAgICAgKyZuYnNwOyAvKiogRmlybXdhcmUgdmVyc2lvbiBvZiB0aGUgbWVtb3J5 IGRldmljZSAqLw0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7IENIQVI4Jm5ic3A7 Jm5ic3A7ICpGaXJtd2FyZVZlcnNpb247DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsNCiAg ICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyAvKiogTWFudWZhY3R1cmVyIElkLg0KICAg ICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7Jm5ic3A7IDIgYnl0ZSBNYW51ZmFjdHVyZXIg SWQgYXMgcGVyIEpFREVDIFN0YW5kYXJkIEpFUDEwNkFWDQogICAgICAgICAgPGJyPg0KICAgICAg ICAgICsmbmJzcDsgKi8NCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyBVSU5UMTYm bmJzcDsgTW9kdWxlTWFudWZhY3R1cmVySWQ7DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsN CiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyAvKiogTWFudWZhY3R1cmVyIFByb2R1 Y3QgSWQNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyZuYnNwOyAyIGJ5dGUgTWFu dWZhY3R1cmVyIElkIGFzIGRlc2lnbmF0ZWQgYnkgTWFudWZhY3R1cmVyLg0KICAgICAgICAgIDxi cj4NCiAgICAgICAgICArJm5ic3A7ICovDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJz cDsgVUlOVDE2Jm5ic3A7IE1vZHVsZVByb2R1Y3RJZDsNCiAgICAgICAgICA8YnI+DQogICAgICAg ICAgKw0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7IC8qKiBEZXZpY2UgQXR0cmli dXRlcyAqLw0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7IFVJTlQ4Jm5ic3A7Jm5i c3A7IEF0dHJpYnV0ZXM7DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsNCiAgICAgICAgICA8 YnI+DQogICAgICAgICAgKyZuYnNwOyAvKiogRGV2aWNlIENvbmZpZ3VyZWQgVm9sdGFnZSBpbiBt aWxsaXZvbHRzICovDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsgVUlOVDE2Jm5i c3A7IENvbmZpZ3VyZWRWb2x0YWdlOw0KICAgICAgICAgIDxicj4NCiAgICAgICAgPC9ibG9ja3F1 b3RlPg0KICAgICAgICBbU0FNSV0gVGhpcyBmaWVsZCBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgdXNl ZCBpbiB0aGUgZ2VuZXJhdG9yLg0KICAgICAgICBJZiB0aGUNCiAgICAgICAgPGJyPg0KICAgICAg ICBpbnRlbnRpb24gaXMgdG8gdXNlIHRoaXMgaW4gdGhlIGZ1dHVyZSwgdGhlbiBpdCBtYXkgYmUg YmV0dGVyIHRvDQogICAgICAgIGFkZA0KICAgICAgICA8YnI+DQogICAgICAgIHRoaXMgYXQgYSBs YXRlciBzdGFnZS4NCiAgICAgICAgPGJyPg0KICAgICAgICA8YmxvY2txdW90ZSB0eXBlPSJjaXRl Ij4rfSBDTV9BUk1fTUVNT1JZX0RFVklDRV9JTkZPOw0KICAgICAgICAgIDxicj4NCiAgICAgICAg ICArDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICZuYnNwOyAjcHJhZ21hIHBhY2soKQ0KICAg ICAgICAgIDxicj4NCiAgICAgICAgICA8YnI+DQogICAgICAgICAgJm5ic3A7ICNlbmRpZiAvLyBB Uk1fTkFNRVNQQUNFX09CSkVDVFNfSF8NCiAgICAgICAgICA8YnI+DQogICAgICAgICAgZGlmZiAt LWdpdA0KYS9EeW5hbWljVGFibGVzUGtnL0xpYnJhcnkvU21iaW9zL0FybS9TbWJpb3NUeXBlMTdM aWIvU21iaW9zVHlwZTE3R2VuZXJhdG9yLmMNCmIvRHluYW1pY1RhYmxlc1BrZy9MaWJyYXJ5L1Nt Ymlvcy9Bcm0vU21iaW9zVHlwZTE3TGliL1NtYmlvc1R5cGUxN0dlbmVyYXRvci5jDQogICAgICAg ICAgPGJyPg0KICAgICAgICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgICAgICAgPGJyPg0K ICAgICAgICAgIGluZGV4IDAwMDAwMDAwMDAuLjU2ODNjYTU3MGYNCiAgICAgICAgICA8YnI+DQog ICAgICAgICAgLS0tIC9kZXYvbnVsbA0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArKysNCmIv RHluYW1pY1RhYmxlc1BrZy9MaWJyYXJ5L1NtYmlvcy9Bcm0vU21iaW9zVHlwZTE3TGliL1NtYmlv c1R5cGUxN0dlbmVyYXRvci5jPGJyPg0KICAgICAgICAgIEBAIC0wLDAgKzEsMzM4IEBADQogICAg ICAgICAgPGJyPg0KICAgICAgICAgICsvKiogQGZpbGUNCiAgICAgICAgICA8YnI+DQogICAgICAg ICAgKyZuYnNwOyBTTUJJT1MgVHlwZTE3IFRhYmxlIEdlbmVyYXRvci4NCiAgICAgICAgICA8YnI+ DQogICAgICAgICAgKw0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7IENvcHlyaWdo dCAoYykgMjAyMiwgTlZJRElBIENPUlBPUkFUSU9OICZhbXA7IEFGRklMSUFURVMuDQogICAgICAg ICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNw OyBDb3B5cmlnaHQgKGMpIDIwMjAgLSAyMDIxLCBBcm0gTGltaXRlZC4gQWxsIHJpZ2h0cw0KICAg ICAgICAgIHJlc2VydmVkLiZsdDtCUiZndDsNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKw0K ICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7IFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBCU0QtMi1DbGF1c2UtUGF0ZW50DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsqKi8NCiAg ICAgICAgICA8YnI+DQogICAgICAgICAgKw0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArI2lu Y2x1ZGUgJmx0O0xpYnJhcnkvQmFzZUxpYi5oJmd0Ow0KICAgICAgICAgIDxicj4NCiAgICAgICAg ICArI2luY2x1ZGUgJmx0O0xpYnJhcnkvQmFzZU1lbW9yeUxpYi5oJmd0Ow0KICAgICAgICAgIDxi cj4NCiAgICAgICAgICArI2luY2x1ZGUgJmx0O0xpYnJhcnkvRGVidWdMaWIuaCZndDsNCiAgICAg ICAgICA8YnI+DQogICAgICAgICAgKyNpbmNsdWRlICZsdDtMaWJyYXJ5L1ByaW50TGliLmgmZ3Q7 DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsjaW5jbHVkZSAmbHQ7TGlicmFyeS9NZW1vcnlB bGxvY2F0aW9uTGliLmgmZ3Q7DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsjaW5jbHVkZSAm bHQ7TGlicmFyeS9TbWJpb3NUeXBlMTdGaXh1cExpYi5oJmd0Ow0KICAgICAgICAgIDxicj4NCiAg ICAgICAgPC9ibG9ja3F1b3RlPg0KICAgICAgICBbU0FNSV0gSSBjb3VsZCBub3QgZmluZCBTbWJp b3NUeXBlMTdGaXh1cExpYi5oIGluIHRoaXMgcGF0Y2gNCiAgICAgICAgc2VyaWVzLiBDYW4NCiAg ICAgICAgPGJyPg0KICAgICAgICB5b3UgY2hlY2ssIHBsZWFzZT8NCiAgICAgICAgPGJyPg0KICAg ICAgICA8YmxvY2txdW90ZSB0eXBlPSJjaXRlIj4rDQogICAgICAgICAgPGJyPg0KICAgICAgICAg ICsvLyBNb2R1bGUgc3BlY2lmaWMgaW5jbHVkZSBmaWxlcy4NCiAgICAgICAgICA8YnI+DQogICAg ICAgICAgKyNpbmNsdWRlICZsdDtDb25maWd1cmF0aW9uTWFuYWdlck9iamVjdC5oJmd0Ow0KICAg ICAgICAgIDxicj4NCiAgICAgICAgICArI2luY2x1ZGUgJmx0O0NvbmZpZ3VyYXRpb25NYW5hZ2Vy SGVscGVyLmgmZ3Q7DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsjaW5jbHVkZSAmbHQ7UHJv dG9jb2wvQ29uZmlndXJhdGlvbk1hbmFnZXJQcm90b2NvbC5oJmd0Ow0KICAgICAgICAgIDxicj4N CiAgICAgICAgICArI2luY2x1ZGUgJmx0O1Byb3RvY29sL1NtYmlvcy5oJmd0Ow0KICAgICAgICAg IDxicj4NCiAgICAgICAgPC9ibG9ja3F1b3RlPg0KICAgICAgICBbU0FNSV0gSSB0aGluayBQcm90 b2NvbC9TbWJpb3MuaCBtYXkgbm90IGJlIHJlcXVpcmVkIGluIHRoaXMNCiAgICAgICAgZmlsZS4g Q2FuDQogICAgICAgIDxicj4NCiAgICAgICAgeW91IGNoZWNrLCBwbGVhc2U/DQogICAgICAgIDxi cj4NCiAgICAgICAgPGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSI+KyNpbmNsdWRlDQogICAgICAgICAg Jmx0O0luZHVzdHJ5U3RhbmRhcmQvU21CaW9zLmgmZ3Q7DQogICAgICAgICAgPGJyPg0KICAgICAg ICAgICsNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKy8qKiBUaGlzIG1hY3JvIGV4cGFuZHMg dG8gYSBmdW5jdGlvbiB0aGF0IHJldHJpZXZlcyB0aGUNCiAgICAgICAgICBNZW1vcnkgRGV2aWNl DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsmbmJzcDsmbmJzcDsgaW5mb3JtYXRp b24gZnJvbSB0aGUgQ29uZmlndXJhdGlvbiBNYW5hZ2VyLg0KICAgICAgICAgIDxicj4NCiAgICAg ICAgICArKi8NCiAgICAgICAgICA8YnI+DQogICAgICAgICAgK0dFVF9PQkpFQ1RfTElTVCAoDQog ICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsgRU9iak5hbWVTcGFjZUFybSwNCiAgICAg ICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyBFQXJtT2JqTWVtb3J5RGV2aWNlSW5mbywNCiAg ICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyBDTV9BUk1fTUVNT1JZX0RFVklDRV9JTkZP DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsgKQ0KICAgICAgICAgIDxicj4NCiAg ICAgICAgICArDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsvLyBEZWZhdWx0IFZhbHVlcyBm b3IgTWVtb3J5IERldmljZQ0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArU1RBVElDIFNNQklP U19UQUJMRV9UWVBFMTcgTWVtRGV2aWNlSW5mb1RlbXBsYXRlID0gew0KICAgICAgICAgIDxicj4N CiAgICAgICAgICArJm5ic3A7IHsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsgLy8gSGRyDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsm bmJzcDsmbmJzcDsgRUZJX1NNQklPU19UWVBFX01FTU9SWV9ERVZJQ0UsJm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IC8vIFR5cGUNCiAgICAgICAgICA8YnI+DQogICAgICAgICAg KyZuYnNwOyZuYnNwOyZuYnNwOyBzaXplb2YgKFNNQklPU19UQUJMRV9UWVBFMTcpLCZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAvLyBMZW5ndGgNCiAgICAgICAgICA8 YnI+DQogICAgICAgICAgKyZuYnNwOyZuYnNwOyZuYnNwOyAwJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7IC8vIEhhbmRsZQ0KICAgICAgICAgIDxicj4NCiAgICAgICAgICAr Jm5ic3A7IH0sDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsgMCwmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgLy8gTWVtb3J5QXJyYXlIYW5kbGUN CiAgICAgICAgICA8YnI+DQogICAgICAgIDwvYmxvY2txdW90ZT4NCiAgICAgICAgPGJyPg0KICAg ICAgICBbU0FNSV0gRG8geW91IGhhdmUgYW55IHRob3VnaHRzIG9uIGhvdyB0aGUgTWVtb3J5QXJy YXlIYW5kbGUgY2FuDQogICAgICAgIGJlIHNldHVwPw0KICAgICAgICA8YnI+DQogICAgICAgIDxi cj4NCiAgICAgICAgVGhlIHNhbWUgYXBwbGllcyBmb3IgdGhlIGZvbGxvd2luZyBNZW1vcnlFcnJv ckluZm9ybWF0aW9uSGFuZGxlDQogICAgICAgIGZpZWxkLg0KICAgICAgICA8YnI+DQogICAgICAg IDxicj4NCiAgICAgICAgSSB0aGluayB3ZSBuZWVkIHNvbWUgc29ydCBvZiBhIEhhbmRsZU1hbmFn ZXIgaW4NCiAgICAgICAgRHluYW1pY1RhYmxlc0ZyYW1ld29yaw0KICAgICAgICA8YnI+DQogICAg ICAgIHRoYXQgY2FuIGtlZXAgdHJhY2sgb2YgdGhlIG1hcHBpbmdzIGJldHdlZW4gU01CSU9TIE9i amVjdHMgYW5kDQogICAgICAgIFRhYmxlDQogICAgICAgIDxicj4NCiAgICAgICAgSGFuZGxlcy4N CiAgICAgICAgPGJyPg0KICAgICAgICA8YnI+DQogICAgICAgIGUuZy4gU21iaW9zIC0gSGFuZGxl TWFuYWdlcg0KICAgICAgICA8YnI+DQogICAgICAgIDxicj4NCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQogICAgICAgIDxi cj4NCiAgICAgICAgPGJyPg0KICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsgfCZuYnNwOyZuYnNwOyZuYnNwOyBPYmplY3QgVG9rZW4mbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsgfCBUYWJsZQ0KICAgICAgICBIYW5kbGUmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsgfA0KICAgICAgICA8YnI+DQogICAgICAgIDxicj4NCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rDQogICAgICAgIDxicj4NCiAgICAgICAgPGJyPg0KICAgICAgICAmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsgfCBUeXBlMTZPYmpfdG9rZW4mbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgfCBUeXBlIDE2IFRhYmxlIGhhbmRsZSZuYnNw OyZuYnNwOyZuYnNwOyB8DQogICAgICAgIDxicj4NCiAgICAgICAgPGJyPg0KKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCiAg ICAgICAgPGJyPg0KICAgICAgICA8YnI+DQogICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyAuLi4NCiAgICAgICAgPGJyPg0KICAgICAgICA8YnI+DQogICAgICAgIC0g VGhlIFR5cGUxN09iamVjdCBpLmUuIENNX0FSTV9NRU1PUllfREVWSUNFX0lORk8gY2FuIHRoZW4g aG9sZA0KICAgICAgICBhIHRva2VuDQogICAgICAgIDxicj4NCiAgICAgICAgZm9yIHRoZSBUeXBl MTZPYmplY3QuDQogICAgICAgIDxicj4NCiAgICAgICAgPGJyPg0KICAgICAgICAmbmJzcDsmbmJz cDstIElmIFR5cGUgMTcgdGFibGUgaXMgdG8gYmUgaW5zdGFsbGVkLCBEeW5hbWljVGFibGVtYW5h Z2VyDQogICAgICAgIHNoYWxsDQogICAgICAgIDxicj4NCiAgICAgICAgc2VhcmNoIHRoZSBTTUJJ T1MgdGFibGUgbGlzdCB0byBzZWUgaWYgYSBUeXBlMTYgdGFibGUgaXMNCiAgICAgICAgcmVxdWVz dGVkIHRvIGJlDQogICAgICAgIDxicj4NCiAgICAgICAgaW5zdGFsbGVkLg0KICAgICAgICA8YnI+ DQogICAgICAgIDxicj4NCiAgICAgICAgLSBJZiBhIFR5cGUxNiB0YWJsZSBpcyBwcmVzZW50IGlu IHRoZSBsaXN0IG9mIFNNQklPUyB0YWJsZSB0bw0KICAgICAgICBpbnN0YWxsLA0KICAgICAgICA8 YnI+DQogICAgICAgIHRoZSBUeXBlMTYgdGFibGUgc2hhbGwgYmUgaW5zdGFsbGVkIGZpcnN0IGFu ZCBhbiBlbnRyeSBpcyBtYWRlDQogICAgICAgIGluIHRoZQ0KICAgICAgICA8YnI+DQogICAgICAg IFNtYmlvcyBIYW5kbGVNYW5hZ2VyIHRvIGNyZWF0ZSBhIG1hcHBpbmcgb2YgVHlwZTE2T2JqX3Rv a2VuJm5ic3A7DQogICAgICAgICZsdDs9PSZndDsgVHlwZTE2DQogICAgICAgIDxicj4NCiAgICAg ICAgVGFibGUgSGFuZGxlLg0KICAgICAgICA8YnI+DQogICAgICAgIDxicj4NCiAgICAgICAgLSBU aGUgVHlwZTE3IHRhYmxlIGNhbiBub3cgYmUgYnVpbHQgYW5kIGlmIGEgdGhlIFR5cGUxNk9iamVj dA0KICAgICAgICB0b2tlbiBpcw0KICAgICAgICA8YnI+DQogICAgICAgIHByb3ZpZGVkIGluIENN X0FSTV9NRU1PUllfREVWSUNFX0lORk8sIHRoZSBTbWJpb3MgSGFuZGxlTWFuYWdlcg0KICAgICAg ICBzaGFsbCBiZQ0KICAgICAgICA8YnI+DQogICAgICAgIHNlYXJjaGVkICh1c2luZyBUeXBlMTZP YmpfdG9rZW4pIHRvIHJldHJpZXZlIHRoZSBUeXBlMTYgVGFibGUNCiAgICAgICAgaGFuZGxlIGFu ZA0KICAgICAgICA8YnI+DQogICAgICAgIHBvcHVsYXRlIHRoZSBUeXBlIDE3IFBoeXNpY2FsIE1l bW9yeSBBcnJheSBIYW5kbGUgZmllbGQuDQogICAgICAgIDxicj4NCiAgICAgICAgPGJyPg0KICAg ICAgICBJIHRoaW5rIHdlIG1heSBoYXZlIHRvIGV4cGVyaW1lbnQgYSBiaXQgYmVmb3JlIHdlIGFy cml2ZSBhdCB0aGUNCiAgICAgICAgY29ycmVjdA0KICAgICAgICA8YnI+DQogICAgICAgIGRlc2ln bi4gSG93ZXZlciwgcGxlYXNlIGRvIGxldCBtZSBrbm93IHlvdXIgdGhvdWdodHMgb24gdGhlDQog ICAgICAgIGFib3ZlLg0KICAgICAgICA8YnI+DQogICAgICAgIDxicj4NCiAgICAgIDwvYmxvY2tx dW90ZT4NCiAgICAgIDxicj4NCiAgICAgIFtHTV0gSSBhZ3JlZSB3aXRoIHRoZSBpZGVhIG9mIGhh dmluZyBhIG1hcCBvZiBDTV9PQkpFQ1RfVE9LRU5zIHRvDQogICAgICBTTUJJT1MgaGFuZGxlcy4g SSd2ZSBhZGRlZCB0aGlzIHRvIHRoZQ0KICAgICAgRHluYW1pY1RhYmxlRmFjdG9yeVByb3RvY29s Lg0KICAgICAgPGJyPg0KICAgICAgPGJyPg0KICAgICAgSG93ZXZlciB3aGVuIGl0IGNvbWVzIHRv IGFjdHVhbGx5IGZpZ3VyaW5nIG91dCBhbmQgYWRkaW5nIHRoZQ0KICAgICAgcmVmZXJlbmNlIFNN QklPUyBoYW5kbGUgV2UndmUgY29tZSB1cCB3aXRoIGEgc2xpZ2h0bHkgZGlmZmVyZW50DQogICAg ICBhcHByb2FjaC4NCiAgICAgIDxicj4NCiAgICAgIDxicj4NCiAgICAgIElmIEkgdW5kZXJzdG9v ZCB3aGF0IHlvdSB3ZXJlIHNheWluZyBhYm92ZSBpczoNCiAgICAgIDxicj4NCiAgICAgICZuYnNw O0lmIHdlIGhhcHBlbiB0byBwYXJzZSBhIFR5cGUxNyB0YWJsZQ0KICAgICAgPGJyPg0KICAgICAg Jm5ic3A7Jm5ic3A7IGlmIHRoYXQgVHlwZTE3IHRhYmxlIGhhcyBhIHRva2VuIHRvIGEgUGh5c2lj YWwgbWVtb3J5IGFycmF5DQogICAgICBDTV9PQkoNCiAgICAgIDxicj4NCiAgICAgICZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyBpZiB0aGVyZSBpcyBhbiBleGlzdGluZyBTbWJpb3MgSGFuZGxlIChs b29rIHVwIHRoaXMgaGFuZGxlDQogICAgICB1c2luZw0KICAgICAgPGJyPg0KICAgICAgJm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHRoZSBDTV9PQkpFQ1RfVE9LRU4pDQogICAg ICA8YnI+DQogICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsgdGhlbiB1c2UgdGhpcyBoYW5kbGUuDQogICAgICA8YnI+DQogICAgICAmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsgZWxzZSBpZiB0aGVyZSBpcyBhIGdlbmVyYXRvciBmb3IgVHlwZTE2IHJl Z2lzdGVyZWQNCiAgICAgIDxicj4NCiAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyBjYWxsIHRoZSBUeXBlMTYgZ2VuZXJhdG9yIGNvZGUgZmlyc3QN CiAgICAgIDxicj4NCiAgICAgIDxicj4NCiAgICAgIElNTyB0aGlzIGdldHMgYSBiaXQgZGlmZmlj dWx0IHRvIG1hbmFnZS4gUmlnaHQgbm93IHRoZQ0KICAgICAgRHluYW1pY1RhYmxlTWFuYWdlckR4 ZSB3YWxrcyB0aGUgYXJyYXkgb2YgRVN0ZE9ialNtYmlvc1RhYmxlTGlzdA0KICAgICAgQ00gb2Jq ZWN0cywgZmluZHMgdGhlIGdlbmVyYXRvciBmb3IgZWFjaCBUYWJsZSwgaW52b2tlcyBpdCwgZ2V0 cw0KICAgICAgYW4gU01CSU9TIHJlY29yZCB0aGF0IGl0IHRoZW4gaW5zdGFsbHMgdmlhIHRoZSBT bWJpb3NEeGUgZHJpdmVyLg0KICAgICAgPGJyPg0KICAgICAgSXQgc2VlbWVkIGEgYml0IGNvbnZv bHV0ZWQgdG8gY2FsbCB0aGUgZ2VuZXJhdG9yIGFuZCBpbnN0YWxsIGFuDQogICAgICBTTUJJT1Mg dGFibGUgd2hpbGUgd2l0aGluIHRoZSBnZW5lcmF0b3Igb2YgYW5vdGhlciBTbWJpb3MgdGFibGUu DQogICAgICA8YnI+DQogICAgICBBbmQgaWYgdGhlcmUgYXJlIGxheWVycyBvZiBkZXBlbmRlbmNp ZXMgKG9yIG11bHRpcGxlIGRlcGVuZGVuY2llcykNCiAgICAgIGl0IGNvdWxkIGFkZCB0byB0aGUg Y29tcGxleGl0aWVzLg0KICAgICAgPGJyPg0KICAgICAgPGJyPg0KICAgICAgSW5zdGVhZCB3aGF0 IHdlIGNhbWUgdXAgd2l0aCBpczoNCiAgICAgIDxicj4NCiAgICAgIDxicj4NCiAgICAgIElmIHdl IGhhcHBlbiB0byBwYXJzZSBhIFR5cGUxNyB0YWJsZQ0KICAgICAgPGJyPg0KICAgICAgJm5ic3A7 IGlmIHRoYXQgVHlwZTE3IHRhYmxlIGhhcyBhIHRva2VuIHRvIGEgUGh5c2ljYWwgbWVtb3J5IGFy cmF5DQogICAgICBDTV9PQkoNCiAgICAgIDxicj4NCiAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyBpZiB0aGVyZSBpcyBhbiBleGlzdGluZyBTbWJpb3MgSGFuZGxlIChsb29rIHVwIHRoaXMg aGFuZGxlDQogICAgICB1c2luZw0KICAgICAgPGJyPg0KICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7IHRoZSBDTV9PQkpFQ1RfVE9LRU4gKQ0KICAgICAgPGJyPg0KICAg ICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHRoZW4g dXNlIHRoaXMgaGFuZGxlLg0KICAgICAgPGJyPg0KICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7IGVsc2UgaWYgdGhlcmUgaXMgYSBnZW5lcmF0b3IgZm9yIFR5cGUxNiBSZWdpc3RlcmVkDQog ICAgICA8YnI+DQogICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsgR2VuZXJhdGUgYW4gU01CSU9TIGhhbmRsZSBbc2luY2UgU21i aW9zRHhlIG1haW50YWlucw0KICAgICAgdGhlDQogICAgICA8YnI+DQogICAgICAmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgaGFuZGxlIERCIHByaXZh dGVseSBJIGhhZCB0bw0KICAgICAgPGJyPg0KICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHBpY2sgYSBoYW5kbGUgYW5kIGNoZWNrIGlmDQog ICAgICBpdA0KICAgICAgPGJyPg0KICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGNsYXNoZXMgd2l0aCBleGlzdGluZw0KICAgICAgcmVjb3Jk c10NCiAgICAgIDxicj4NCiAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBBZGQgdGhpcyBTTUJJT1MgaGFuZGxlIHRvIHRoZSBt YXAuDQogICAgICA8YnI+DQogICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgZWxzZSAvLyBO byBnZW5lcmF0b3IgcHJlc2VudA0KICAgICAgPGJyPg0KICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IFByb2NlZWQgd2l0aG91dCBhZGRp bmcgYW55IHJlZmVyZW5jZQ0KICAgICAgPGJyPg0KICAgICAgPGJyPg0KICAgICAgPGJyPg0KICAg ICAgQmVmb3JlIEFkZGluZyBhbnkgU01CSU9TIHRhYmxlLCB3ZSBjaGVjayBpZiB0aGVyZSBpcyBh biBleGlzdGluZw0KICAgICAgU01CSU9TIGhhbmRsZSBmb3IgdGhlIENNX09CSkVDVF9UT0tFTiAo dGhlIGdlbmVyYXRvciB3aWxsIHJldHVybiBhDQogICAgICBDTV9PQkpFQ1RfVE9LRU4gZm9yIGVh Y2ggU01CSU9TIHJlY29yZCBjcmVhdGVkKS4NCiAgICAgIDxicj4NCiAgICAgIElmIHRoZXJlIGlz IGFuIGV4aXN0aW5nIFNNQklPUyBoYW5kbGUsIHBhc3MgdGhhdCBpbiwgZWxzZSBwYXNzIGluDQog ICAgICBTTUJJT1NfSEFORExFX1BJX1JFU0VSVkVEIGFuZCBsZXQgU21iaW9zRHhlIGFzc2lnbiB0 aGUgaGFuZGxlLg0KICAgICAgPGJyPg0KICAgICAgPGJyPg0KICAgICAgSGVyZSBpcyBhIHNhbXBs ZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGFwcHJvYWNoIChpdCBpcyBhIFdJUCwgYnV0DQogICAg ICBJIHdhbnRlZCB0byBnZXQgeW91ciB0aG91Z2h0cyBvbiBpdCkNCiAgICAgIDxicj4NCiAgICAg IDxicj4NCjxhIGNsYXNzPSJtb3otdHh0LWxpbmstZnJlZXRleHQiIGhyZWY9Imh0dHBzOi8vZ2l0 aHViLmNvbS90aWFub2NvcmUvZWRrMi9jb21wYXJlL21hc3Rlci4uLmdtYWhhZGV2YW46ZWRrMi11 cHN0cmVhbTpSRkMvc21iaW9zLWR5bnRhYmxlcyI+aHR0cHM6Ly9naXRodWIuY29tL3RpYW5vY29y ZS9lZGsyL2NvbXBhcmUvbWFzdGVyLi4uZ21haGFkZXZhbjplZGsyLXVwc3RyZWFtOlJGQy9zbWJp b3MtZHludGFibGVzPC9hPg0KICAgICAgPGJyPg0KICAgIDwvYmxvY2txdW90ZT4NCiAgICA8cD5b U0FNSV0gSSBoYWQgYSBsb29rIGF0IHRoZSBhYm92ZSBicmFuY2ggYW5kIGhhdmUgdGhlIGZvbGxv d2luZw0KICAgICAgc3VnZ2VzdGlvbnM6PGJyPg0KICAgIDwvcD4NCiAgICA8cD5hLiBUbyByZXNv bHZlIHRoZSBkZXBlbmRlbmN5IG9yZGVyLCBwbGVhc2Ugc2VlIG15IHBhdGNoZXMgZm9yDQogICAg ICBTTUJJT1MgdGFibGUgZGlzcGF0Y2hlciBhdDoNCiAgICAgIDxhIGNsYXNzPSJtb3otdHh0LWxp bmstZnJlZXRleHQiIGhyZWY9Imh0dHBzOi8vZWRrMi5ncm91cHMuaW8vZy9kZXZlbC9tZXNzYWdl Lzk1MzQwIj5odHRwczovL2VkazIuZ3JvdXBzLmlvL2cvZGV2ZWwvbWVzc2FnZS85NTM0MDwvYT48 YnI+DQogICAgPC9wPg0KICAgIDxwPllvdSBzaG91bGQgYmUgYWJsZSB0byBhcHBseSB0aGVzZSBw YXRjaGVzIG9uIHlvdXINCiAgICAgICdlZGsyLXVwc3RyZWFtOlJGQy9zbWJpb3MtZHludGFibGVz JyBicmFuY2ggYW5kIGVuYWJsZSB0aGUNCiAgICAgIGRpc3BhdGNoZXIgaW4gUHJvY2Vzc1NtYmlv c1RhYmxlcygpLjwvcD4NCiAgICA8cD5lLmcuIEluIGZpbGUNCkR5bmFtaWNUYWJsZXNQa2cvRHJp dmVycy9EeW5hbWljVGFibGVNYW5hZ2VyRHhlL0R5bmFtaWNUYWJsZU1hbmFnZXJEeGUuYywNCiAg ICAgIHRoZSBTTUJJT1MgdGFibGUgZGlzcGF0Y2hlciBjYW4gYmUgaW52b2tlZCBvbmNlIGl0IGlz IGluaXRpYWxpc2VkDQogICAgICBhcyBzaG93biBiZWxvdy48YnI+DQogICAgPC9wPg0KICAgIDxw PkBAIC0xMDA3LDE5ICsxMDA3LDI0IEBAIFByb2Nlc3NTbWJpb3NUYWJsZXMgKDxicj4NCiAgICAg ICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBTbWJpb3NUYWJsZUNvdW50PGJyPg0KICAgICAgJm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICkpOzxicj4NCiAgICAgIDxicj4NCiAgICAgICsmbmJzcDsg Ly8gSW5pdGlhbGlzZSB0aGUgU01CSU9TIFRhYmxlIERpc3BhdGNoZXIgc3RhdGUgbWFjaGluZS48 YnI+DQogICAgICArJm5ic3A7IEluaXRTbWJpb3NUYWJsZURpc3BhdGNoZXIgKFNtYmlvc1RhYmxl SW5mbywgU21iaW9zVGFibGVDb3VudCk7PGJyPg0KICAgICAgKzxicj4NCiAgICAgICZuYnNwOyZu YnNwOyBmb3IgKElkeCA9IDA7IElkeCAmbHQ7IFNtYmlvc1RhYmxlQ291bnQ7IElkeCsrKSB7PGJy Pg0KICAgICAgLSZuYnNwOyZuYnNwOyZuYnNwOyBTdGF0dXMgPSBCdWlsZEFuZEluc3RhbGxTbWJp b3NUYWJsZSAoPGJyPg0KICAgICAgKyZuYnNwOyZuYnNwOyZuYnNwOyBTdGF0dXMgPSBEaXNwYXRj aFNtYmlvc1RhYmxlICg8YnI+DQogICAgICArJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IFNt Ymlvc1RhYmxlSW5mb1tJZHhdLlRhYmxlVHlwZSw8YnI+DQogICAgICAmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsgVGFibGVGYWN0b3J5UHJvdG9jb2wsPGJyPg0KICAgICAgJm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IENmZ01nclByb3RvY29sLDxicj4NCiAgICAgICZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBTbWJpb3NQcm90b2NvbCw8YnI+DQogICAg ICAtJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZhbXA7U21iaW9zVGFibGVJbmZvW0lkeF08 YnI+DQogICAgICArJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IFNtYmlvc1RhYmxlSW5mbyw8 YnI+DQogICAgICArJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IFNtYmlvc1RhYmxlQ291bnQ8 YnI+DQogICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgKTs8YnI+DQogICAg ICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgezxicj4N CiAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBERUJVRyAoKDxicj4N CiAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBE RUJVR19FUlJPUiw8YnI+DQogICAgICAtJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7ICZxdW90O0VSUk9SOiBGYWlsZWQgdG8gaW5zdGFsbCBTTUJJT1MgVGFibGUuJnF1 b3Q7IFw8YnI+DQogICAgICAtJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7ICZxdW90OyBJZCA9ICV1IFN0YXR1cyA9ICVyXG4mcXVvdDssPGJyPg0KICAgICAgLSZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBTbWJpb3NUYWJsZUluZm9bSWR4 XS5UYWJsZUdlbmVyYXRvcklkLDxicj4NCiAgICAgICsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsgJnF1b3Q7RVJST1I6IEZhaWxlZCB0byBkaXNwYXRjaCBTTUJJT1Mg VGFibGUgZm9yDQogICAgICBpbnN0YWxsYXRpb24uJnF1b3Q7IFw8YnI+DQogICAgICArJm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZxdW90OyBUYWJsZSBUeXBlID0g JXUgU3RhdHVzID0gJXJcbiZxdW90Oyw8YnI+DQogICAgICArJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IFNtYmlvc1RhYmxlSW5mb1tJZHhdLlRhYmxlVHlwZSw8YnI+ DQogICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsg U3RhdHVzPGJyPg0KICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7ICkpOzxicj4NCiAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyB9PGJyPg0K ICAgIDwvcD4NCiAgICA8cD5iLiBXaXRoIHRoZSBTTUJJT1MgZGlzcGF0Y2hlciBwYXRjaCBhbmQg dGhlIGhhbmRsZSBtYW5hZ2VyLCBpdA0KICAgICAgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHVwZGF0 ZSB0aGUgaGFuZGxlcyBmb3IgZGVwZW5kZW50IHRhYmxlcy4NCiAgICAgIFRoaXMgc2hvdWxkIHJl bW92ZSB0aGUgbmVlZCBmb3IgdGhlIGhhbmRsZSBnZW5lcmF0aW9uIGFuZA0KICAgICAgbWFuYWdl bWVudC48YnI+DQogICAgPC9wPg0KICAgIDxwPmMuIFdpdGggcmVnYXJkcyB0byB0aGUgU01CSU9T IGhhbmRsZSBtYW5hZ2VyLCBJIHRoaW5rIGl0IHdvdWxkIGJlDQogICAgICBiZXR0ZXIgdG8gYWRk IDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwMDAwMDsiPkNNX09CSkVDVF9JRCBmb3IgdGhlDQogICAg ICA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDAwMDAwOyI+U21iaW9zQ21Ub2tlbjwvc3Bh bj48c3BhbiBzdHlsZT0iY29sb3I6ICMwMDAwMDA7Ij4gaW4gU01CSU9TX0hBTkRMRV9NQVAuPGJy Pg0KICAgICAgPC9zcGFuPjwvcD4NCiAgICA8cD48c3BhbiBzdHlsZT0iY29sb3I6ICMwMDAwMDA7 Ij5kLjwvc3Bhbj4gQSBuZXcgU01CSU9TIG9iamVjdA0KICAgICAgbmFtZXNwYWNlIHNob3VsZCBi ZSBkZWZpbmVkLjwvcD4NCiAgICA8cD4mbmJzcDsmbmJzcDsmbmJzcDsgZS5nIE5hbWVzcGFjZSBJ RCAxMDEwYiBvciAxMTAwYiAtIFNNQklPUyBPYmplY3RzLCBzZWUgPGEgY2xhc3M9Im1vei10eHQt bGluay1mcmVldGV4dCIgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RpYW5vY29yZS9lZGsyL2Js b2IvbWFzdGVyL0R5bmFtaWNUYWJsZXNQa2cvSW5jbHVkZS9Db25maWd1cmF0aW9uTWFuYWdlck9i amVjdC5oI0wzMC1MMzQiPmh0dHBzOi8vZ2l0aHViLmNvbS90aWFub2NvcmUvZWRrMi9ibG9iL21h c3Rlci9EeW5hbWljVGFibGVzUGtnL0luY2x1ZGUvQ29uZmlndXJhdGlvbk1hbmFnZXJPYmplY3Qu aCNMMzAtTDM0PC9hPjwvcD4NCiAgICA8cD4mbmJzcDsmbmJzcDsgV2l0aCB0aGlzIGNoYW5nZSwg PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDAwMDAwOyI+Q01fQVJNX01FTU9SWV9ERVZJQ0VfSU5GTw0K ICAgICAgICBiZWNvbWVzIDwvc3Bhbj5DTV9TTUJJT1NfTUVNT1JZX0RFVklDRV9JTkZPIDxicj4N CiAgICA8L3A+DQogICAgPHA+Jm5ic3A7Jm5ic3A7Jm5ic3A7IFNpbWlsYXJseSwgPHNwYW4gc3R5 bGU9ImNvbG9yOiAjMDk4NjU4OyI+RUFybU9iak1lbW9yeURldmljZUluZm88L3NwYW4+DQogICAg ICBiZWNvbWVzIDxzcGFuIHN0eWxlPSJjb2xvcjogIzA5ODY1ODsiPkVTbWJpb3NPYmpNZW1vcnlE ZXZpY2VJbmZvPC9zcGFuPjxicj4NCiAgICA8L3A+DQogICAgZS4gV2l0aCByZWdhcmRzIHRvIER5 bmFtaWNUYWJsZU1hbmFnZXIuYywgSSB0aGluayB3ZSBzaG91bGQgc3BsaXQNCiAgICB0aGUgQUNQ SSAmYW1wOyBTTUJJT1MgcHJvY2Vzc2luZyBpbiBpbmRpdmlkdWFsIGZpbGVzIChlLmcuDQogICAg QWNwaUJ1aWxkZXIuYyAmYW1wOyBTbWJpb3NCdWlsZGVyLmMpIHVuZGVyIER5bmFtaWNUYWJsZU1h bmFnZXJEeGUuIDxicj4NCiAgICA8cD5mLiBTdGF0dXMgYXBwZWFycyB0byBiZSByZXR1cm5lZCB1 bmluaXRpYWxpc2VkIGluIDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwMDAwMDsiPkR5bmFtaWNUYWJs ZU1hbmFnZXJEeGVJbml0aWFsaXplKCkuPC9zcGFuPjwvcD4NCiAgICA8cD48c3BhbiBzdHlsZT0i Y29sb3I6ICMwMDAwMDA7Ij5nLg0KICAgICAgICBEeW5hbWljVGFibGVzUGtnXExpYnJhcnlcU21i aW9zXEFybVxTbWJpb3NUeXBlMTdMaWIgY2FuIGJlIG1vdmVkDQogICAgICAgIHRvIER5bmFtaWNU YWJsZXNQa2dcTGlicmFyeVxTbWJpb3NcU21iaW9zVHlwZTE3TGliLjxicj4NCiAgICAgIDwvc3Bh bj48L3A+DQogICAgSSBwcmVmZXIgYSBnaXRodWIgYnJhbmNoIHdpdGggdGhlIHBhdGNoIGFzIGl0 IGlzIHZlcnkgaGVscGZ1bCB0bw0KICAgIHZpZXcgdGhlIGNvZGUgYmVpbmcgcmV2aWV3ZWQuIEhv d2V2ZXIsIGl0IGlzIGRpZmZpY3VsdCB0byBwcm92aWRlDQogICAgZmVlZGJhY2suIElzIGl0IHBv c3NpYmxlIHRvIHN1Ym1pdCBhIHBhdGNoIGZvciB0aGUgY2hhbmdlcyB3aXRoIHRoZQ0KICAgIGxp bmsgZm9yIHRoZSBndXRodWIgYnJhbmNoIGluIHRoZSBmdXR1cmUsIHBsZWFzZT8gPGJyPg0KICAg IDxwPkkgYW0gbm90IHN1cmUgaWYgd2UgbmVlZCBhbiBlZGsyLXN0YWdpbmcgYnJhbmNoIGZvciB0 aGlzIGZlYXR1cmUuDQogICAgICBCdXQgaWYgeW91IHRoaW5rIGl0IHdvdWxkIGJlIGhlbHBmdWwg dGhlbiBwbGVhc2UgbGV0IG1lIGtub3cgYW5kIEkNCiAgICAgIHdpbGwgc2VuZCBvdXQgYSByZXF1 ZXN0IHRvIGNyZWF0ZSBhIG5ldyBmZWF0dXJlIGJyYW5jaC48YnI+DQogICAgPC9wPg0KICAgIDxw PlsvU0FNSV08L3A+DQogICAgPGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSIgY2l0ZT0ibWlkOjIyMDRl Nzg1LWQwNWEtYTQ3ZC0yZGE2LWE5YjZiOGU2MDhhMEBudmlkaWEuY29tIj5Tb3JyeQ0KICAgICAg Zm9yIHRoZSBsb25nIG1lc3NhZ2UsIHBsZWFzZSBsZXQgbWUga25vdyB5b3VyIHRob3VnaHRzLg0K ICAgICAgPGJyPg0KICAgICAgPGJyPg0KICAgICAgWy9HTV0NCiAgICAgIDxicj4NCiAgICAgIDxi cj4NCiAgICAgIDxibG9ja3F1b3RlIHR5cGU9ImNpdGUiPltTQU1JXQ0KICAgICAgICA8YnI+DQog ICAgICAgIDxibG9ja3F1b3RlIHR5cGU9ImNpdGUiPismbmJzcDsNCiAgICAgICAgICAwLCZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAvLw0KICAgICAgICAgIE1l bW9yeUVycm9ySW5mb3JtYXRpb25IYW5kbGUNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZu YnNwOyAweEZGRkYsJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IC8vIFRvdGFsV2lkdGgNCiAgICAgICAgICA8YnI+ DQogICAgICAgICAgKyZuYnNwOyAweEZGRkYsJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IC8vIERhdGFXSWR0aA0K ICAgICAgICAgIDxicj4NCiAgICAgICAgPC9ibG9ja3F1b3RlPg0KICAgICAgICA8YnI+DQogICAg ICAgIFtTQU1JXSBJIG5lZWQgdG8gZmluZCBvdXQgaG93IHRoZXNlIGZpZWxkcyBzaG91bGQgYmUg cG9wdWxhdGVkLA0KICAgICAgICBidXQgdGhlDQogICAgICAgIDxicj4NCiAgICAgICAgQW5uZXgg QSwgU01CSU9TIHNwZWNpZmljYXRpb24gdmVyc2lvbiAzLjYuMCBzYXlzIHRoZSBmb2xsb3dpbmc6 DQogICAgICAgIDxicj4NCiAgICAgICAgPGJyPg0KICAgICAgICA0LjguNCBUb3RhbCBXaWR0aCBp cyBub3QgMEZGRkZoIChVbmtub3duKSBpZiB0aGUgbWVtb3J5IGRldmljZQ0KICAgICAgICBpcw0K ICAgICAgICA8YnI+DQogICAgICAgIGluc3RhbGxlZC4gKFNpemUgaXMgbm90IDAuKQ0KICAgICAg ICA8YnI+DQogICAgICAgIDxicj4NCiAgICAgICAgNC44LjUgRGF0YSBXaWR0aCBpcyBub3QgMEZG RkZoIChVbmtub3duKS4NCiAgICAgICAgPGJyPg0KICAgICAgICA8YnI+DQogICAgICAgIENhbiB5 b3UgZXhwbGFpbiBob3cgdGhpcyBmaWVsZCBpcyB1c2VkLCBwbGVhc2U/DQogICAgICAgIDxicj4N CiAgICAgICAgPGJyPg0KICAgICAgICBbL1NBTUldDQogICAgICAgIDxicj4NCiAgICAgICAgPGJy Pg0KICAgICAgICA8YmxvY2txdW90ZSB0eXBlPSJjaXRlIj4rJm5ic3A7DQogICAgICAgICAgMHg3 RkZGLCZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyAvLyBTaXplIChhbHdheXMgdXNlDQogICAgICAgICAgRXh0ZW5k ZWQgU2l6ZSkNCiAgICAgICAgICA8YnI+DQogICAgICAgIDwvYmxvY2txdW90ZT4NCiAgICAgICAg PGJyPg0KICAgICAgICBbU0FNSV0gSSB0aGluayB0aGlzIGZpZWxkIHNob3VsZCBiZSBzZXQgYmFz ZWQgb24gdGhlIFNpemUuDQogICAgICAgIDxicj4NCiAgICAgICAgPGJyPg0KICAgICAgICBUaGUg c3BlYyBzYXlzICZxdW90O0lmIHRoZSBzaXplIGlzIDMyIEdCLTEgTUIgb3IgZ3JlYXRlciwgdGhl IGZpZWxkDQogICAgICAgIHZhbHVlIGlzDQogICAgICAgIDxicj4NCiAgICAgICAgN0ZGRmggYW5k IHRoZSBhY3R1YWwgc2l6ZSBpcyBzdG9yZWQgaW4gdGhlIEV4dGVuZGVkIFNpemUgZmllbGQuJnF1 b3Q7DQogICAgICAgIDxicj4NCiAgICAgICAgPGJyPg0KICAgICAgICBJIHRoaW5rIGl0IHdvdWxk IGJlIGdvb2QgdG8gaGF2ZSBhIHN0YXRpYyBmdW5jdGlvbiZuYnNwOyB0aGF0IGVuY29kZXMNCiAg ICAgICAgdGhlDQogICAgICAgIDxicj4NCiAgICAgICAgc2l6ZSBpbiB3aXRoZXIgdGhlIFNpemUg ZmllbGQgb3IgdGhlIEV4dGVuZGVkIFNpemUgZmllbGQuDQogICAgICAgIDxicj4NCiAgICAgICAg PGJyPg0KICAgICAgICBlLmcuIFVwZGF0ZVNtYmlvc1RhYmxlMTdTaXplIChTTUJJT1NfVEFCTEVf VFlQRTE3ICpTbWJpb3NSZWNvcmQsDQogICAgICAgIFVJTlRODQogICAgICAgIDxicj4NCiAgICAg ICAgU2l6ZSkgew0KICAgICAgICA8YnI+DQogICAgICAgIDxicj4NCiAgICAgICAgJm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGlmIChTaXplICZn dDsgMzJHQi0xTUIpIHsNCiAgICAgICAgPGJyPg0KICAgICAgICA8YnI+DQogICAgICAgICZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyBTbWJpb3NSZWNvcmQtJmd0O1NpemUgPSBFbmNvZGVTaXplICh4eHgpOw0KICAg ICAgICA8YnI+DQogICAgICAgIDxicj4NCiAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IH0gZWxzZSB7DQogICAgICAgIDxi cj4NCiAgICAgICAgPGJyPg0KICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgU21iaW9zUmVj b3JkLSZndDtFeHRlbmRlZFNpemUgPSBFbmNvZGVFeHRlbmRlZFNpemUNCiAgICAgICAgKHh4eCk7 DQogICAgICAgIDxicj4NCiAgICAgICAgPGJyPg0KICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgfQ0KICAgICAgICA8YnI+DQogICAg ICAgIDxicj4NCiAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IH0NCiAgICAgICAgPGJy Pg0KICAgICAgICA8YnI+DQogICAgICAgIFsvU0FNSV0NCiAgICAgICAgPGJyPg0KICAgICAgICA8 YnI+DQogICAgICAgIDxibG9ja3F1b3RlIHR5cGU9ImNpdGUiPismbmJzcDsNCiAgICAgICAgICBN ZW1vcnlUeXBlVW5rbm93biwmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgLy8gRm9ybUZhY3Rvcg0KICAgICAgICAgIDxicj4NCiAg ICAgICAgICArJm5ic3A7IDB4RkYsJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IC8vIERldmlj ZVNldA0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7IDEsJm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IC8vIERldmljZSBMb2NhdG9yDQogICAgICAg ICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsgMiwmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsgLy8gQmFuayBMb2NhdG9yDQogICAgICAgICAgPGJyPg0KICAgICAg ICAgICsmbmJzcDsgTWVtb3J5VHlwZVNkcmFtLCZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAvLyBNZW1vcnlU eXBlDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsgeyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAvLyBUeXBlRGV0YWlsDQogICAgICAg ICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsmbmJzcDsmbmJzcDsgMA0KICAgICAgICAgIDxicj4N CiAgICAgICAgICArJm5ic3A7IH0sDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsg MHhGRkZGLCZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAvLyBTcGVlZCAoVXNlDQogICAgICAgICAgRXh0ZW5kZWQg U3BlZWQpDQogICAgICAgICAgPGJyPg0KICAgICAgICA8L2Jsb2NrcXVvdGU+DQogICAgICAgIFtT QU1JXSBNYXliZSB3ZSBuZWVkIGEgaGVscGVyIGZ1bmN0aW9uIChzaW1pbGFyIHRvDQogICAgICAg IDxicj4NCiAgICAgICAgVXBkYXRlU21iaW9zVGFibGUxN1NpemUoKSkgZm9yIHRoaXMgZmllbGQg YXMgd2VsbC4NCiAgICAgICAgPGJyPg0KICAgICAgICA8YmxvY2txdW90ZSB0eXBlPSJjaXRlIj4r Jm5ic3A7DQogICAgICAgICAgMCwmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsgLy8gTWFudWZhY3R1cmVyDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsgLy8gKFVudXNlZCBVc2UNCiAgICAgICAgICBNb2R1bGVNYW51ZmFjdHVlcklkKQ0K ICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7IDMsJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IC8vIFNlcmlhbE51bWJlcg0KICAgICAgICAgIDxicj4N CiAgICAgICAgICArJm5ic3A7IDQsJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7IC8vIEFzc2V0VGFnDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsg MCwmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgLy8gUGFydE51 bWJlcg0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IC8vIChVbnVzZWQg VXNlDQogICAgICAgICAgTW9kdWxlUHJvZHVjdElkKQ0KICAgICAgICAgIDxicj4NCiAgICAgICAg ICArJm5ic3A7IDAsJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 IC8vIEF0dHJpYnV0ZXMNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyAwLCZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAvLyBFeHRlbmRlZFNpemUN CiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyAyMDAwLCZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyAvLw0KICAgICAgICAgIENvbmZpZ3VyZWRNZW1vcnlDbG9ja1NwZWVkDQogICAg ICAgICAgPGJyPg0KICAgICAgICA8L2Jsb2NrcXVvdGU+DQogICAgICAgIFtTQU1JXSBTaG91bGQg dGhpcyBiZSBwcm92aWRlZCB0aHJvdWdoDQogICAgICAgIENNX0FSTV9NRU1PUllfREVWSUNFX0lO Rk8/DQogICAgICAgIDxicj4NCiAgICAgICAgPGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSI+KyZuYnNw Ow0KICAgICAgICAgIDAsJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7IC8vIE1pbmltdW1Wb2x0YWdlDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsg MCwmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgLy8gTWF4aW11 bVZvbHRhZ2UNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyAwLCZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAvLyBDb25maWd1cmVkVm9sdGFnZQ0K ICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7IE1lbW9yeVRlY2hub2xvZ3lEcmFtLCZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAvLyBNZW1vcnlUZWNo bm9sb2d5DQogICAgICAgICAgPGJyPg0KICAgICAgICA8L2Jsb2NrcXVvdGU+DQogICAgICAgIFtT QU1JXSBTaG91bGQgdGhpcyBiZSBwcm92aWRlZCB0aHJvdWdoDQogICAgICAgIENNX0FSTV9NRU1P UllfREVWSUNFX0lORk8/DQogICAgICAgIDxicj4NCiAgICAgICAgPGJsb2NrcXVvdGUgdHlwZT0i Y2l0ZSI+KyZuYnNwOw0KICAgICAgICAgIHsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsgLy8NCiAgICAgICAgICBNZW1vcnlPcGVyYXRpbmdNb2RlQ2Fw YWJpbGl0eQ0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7Jm5ic3A7Jm5ic3A7IC5V aW50MTYgPSAweDAwMA0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7IH0sDQogICAg ICAgICAgPGJyPg0KICAgICAgICA8L2Jsb2NrcXVvdGU+DQogICAgICAgIFtTQU1JXSBJIHRoaW5r IHRoZSBhYm92ZSBpbml0aWFsaXNhdGlvbiBtYXkgbm90IGJlIHBvcnRhYmxlLg0KICAgICAgICA8 YnI+DQogICAgICAgIDxibG9ja3F1b3RlIHR5cGU9ImNpdGUiPismbmJzcDsgNSwmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAvLyBGaXJtd2FyZVZlcnNp b24NCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyAwLCZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAvLw0KICAgICAgICAgIE1vZHVsZU1hbnVmYWN0dXJlcklk DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsgMCwmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsgLy8gTW9kdWxlUHJvZHVjdElkDQogICAgICAgICAgPGJyPg0K ICAgICAgICAgICsmbmJzcDsgMCwmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsgLy8NCiAgICAgICAgICBNZW1vcnlTdWJzeXN0ZW1Db250b2xsZXJNYW51ZmFjdHVyZXJJZA0K ICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7IDAsJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7IC8vDQogICAgICAgICAgTWVtb3J5U3lic3lzdGVtQ29udHJvbGxl clByb2R1Y3RJZA0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7IDAsJm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IC8vIE5vblZvbGF0aWxlU2l6ZQ0KICAgICAg ICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7IDAsJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7IC8vIFZvbGF0aWxlU2l6ZQ0KICAgICAgICAgIDxicj4NCiAgICAgICAgICAr Jm5ic3A7IDAsJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IC8vIENhY2hl U2l6ZQ0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7IDAsJm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IC8vIExvZ2ljYWxTaXplDQogICAgICAgICAgPGJyPg0K ICAgICAgICAgICsmbmJzcDsgMCwmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsgLy8gRXh0ZW5kZWRTcGVlZA0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7IDAs Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IC8vDQogICAgICAgICAgRXh0 ZW5kZWRDb25maWd1cmVkTWVtb3J5U3BlZWQNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgK307 DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsNCiAgICAgICAgICA8YnI+DQogICAgICAgICAg K1NUQVRJQyBDSEFSOCZuYnNwOyBVbmtub3duU3RyW10gPSAmcXVvdDtVbmtub3duXDAmcXVvdDs7 DQogICAgICAgICAgPGJyPg0KICAgICAgICA8L2Jsb2NrcXVvdGU+DQogICAgICAgIFtTQU1JXSBX b3VsZCBpdCBiZSBwb3NzaWJsZSB0byBhZGQgdGhlIENPTlNUIHF1YWxpZmllciwgcGxlYXNlPw0K ICAgICAgICA8YnI+DQogICAgICAgIDxibG9ja3F1b3RlIHR5cGU9ImNpdGUiPisNCiAgICAgICAg ICA8YnI+DQogICAgICAgICAgK1NUQVRJQw0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArRUZJ X1NUQVRVUw0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArRUZJQVBJDQogICAgICAgICAgPGJy Pg0KICAgICAgICAgICtGcmVlU21iaW9zVHlwZTE3VGFibGVFeCAoDQogICAgICAgICAgPGJyPg0K ICAgICAgICAgICsmbmJzcDsgSU4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgQ09OU1Qg U01CSU9TX1RBQkxFX0dFTkVSQVRPUiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICpDT05TVCZuYnNwOyZuYnNwOyZuYnNwOyBUaGlz LA0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7IElOJm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7IENPTlNUIENNX1NURF9PQkpfU01CSU9TX1RBQkxFX0lORk8mbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsNCiAgICAgICAgICAqQ09OU1QmbmJzcDsmbmJzcDsmbmJzcDsgU21iaW9zVGFibGVJbmZv LA0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7IElOJm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7IENPTlNUIEVES0lJX0NPTkZJR1VSQVRJT05fTUFOQUdFUl9QUk9UT0NPTCZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICpDT05TVCZuYnNwOyZuYnNwOyZuYnNw OyBDZmdNZ3JQcm90b2NvbCwNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyBJTiBP VVQmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgU01CSU9TX1NUUlVD VFVSRSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICoqKkNPTlNUJm5i c3A7IFRhYmxlLA0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7IElOJm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IENPTlNUDQogICAgICAgICAgVUlOVE4mbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgVGFibGVDb3VudA0KICAgICAgICAgIDxicj4N CiAgICAgICAgICArJm5ic3A7ICkNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgK3sNCiAgICAg ICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyByZXR1cm4gRUZJX1NVQ0NFU1M7DQogICAgICAg ICAgPGJyPg0KICAgICAgICAgICt9DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsNCiAgICAg ICAgICA8YnI+DQogICAgICAgICAgKy8qKiBDb25zdHJ1Y3QgU01CSU9TIFR5cGUxNyBUYWJsZSBk ZXNjcmliaW5nIG1lbW9yeSBkZXZpY2VzLg0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArDQog ICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsgSWYgdGhpcyBmdW5jdGlvbiBhbGxvY2F0 ZXMgYW55IHJlc291cmNlcyB0aGVuIHRoZXkgbXVzdCBiZQ0KICAgICAgICAgIGZyZWVkDQogICAg ICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsgaW4gdGhlIEZyZWVYWFhYVGFibGVSZXNvdXJj ZXMgZnVuY3Rpb24uDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsNCiAgICAgICAgICA8YnI+ DQogICAgICAgICAgKyZuYnNwOyBAcGFyYW0gW2luXSZuYnNwOyBUaGlzJm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IFBvaW50 ZXIgdG8gdGhlIFNNQklPUyB0YWJsZQ0KICAgICAgICAgIGdlbmVyYXRvci4NCiAgICAgICAgICA8 YnI+DQogICAgICAgICAgKyZuYnNwOyBAcGFyYW0gW2luXSZuYnNwOyBTbWJpb3NUYWJsZUluZm8g UG9pbnRlciB0byB0aGUgU01CSU9TIHRhYmxlDQogICAgICAgICAgaW5mb3JtYXRpb24uDQogICAg ICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsgQHBhcmFtIFtpbl0mbmJzcDsgQ2ZnTWdyUHJv dG9jb2wmbmJzcDsgUG9pbnRlciB0byB0aGUgQ29uZmlndXJhdGlvbg0KICAgICAgICAgIE1hbmFn ZXINCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBQcm90b2NvbCBpbnRlcmZh Y2UuDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsgQHBhcmFtIFtvdXRdIFRhYmxl Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7IFBvaW50ZXIgdG8gdGhlIFNNQklPUyB0YWJsZS4NCiAgICAgICAgICA8YnI+DQogICAgICAg ICAgKw0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7IEByZXR2YWwgRUZJX1NVQ0NF U1MmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsgVGFibGUgZ2VuZXJhdGVkDQogICAgICAgICAgc3VjY2Vzc2Z1bGx5Lg0KICAg ICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7IEByZXR2YWwgRUZJX0JBRF9CVUZGRVJfU0la RSZuYnNwOyZuYnNwOyZuYnNwOyBUaGUgc2l6ZSByZXR1cm5lZCBieSB0aGUNCiAgICAgICAgICBD b25maWd1cmF0aW9uDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsgTWFuYWdlciBpcyBsZXNzIHRoYW4gdGhlDQogICAgICAgICAgT2JqZWN0IHNpemUgZm9y DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgdGhlIHJl cXVlc3RlZCBvYmplY3QuDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsgQHJldHZh bCBFRklfSU5WQUxJRF9QQVJBTUVURVImbmJzcDsgQSBwYXJhbWV0ZXIgaXMgaW52YWxpZC4NCiAg ICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyBAcmV0dmFsIEVGSV9OT1RfRk9VTkQmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgQ291bGQg bm90IGZpbmQgaW5mb3JtYXRpb24uDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsg QHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyZuYnNwOyZuYnNwOyBDb3VsZCBub3QgYWxsb2Nh dGUgbWVtb3J5Lg0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7IEByZXR2YWwgRUZJ X1VOU1VQUE9SVEVEJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IFVu c3VwcG9ydGVkIGNvbmZpZ3VyYXRpb24uDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsqKi8N CiAgICAgICAgICA8YnI+DQogICAgICAgICAgK1NUQVRJQw0KICAgICAgICAgIDxicj4NCiAgICAg ICAgICArRUZJX1NUQVRVUw0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArRUZJQVBJDQogICAg ICAgICAgPGJyPg0KICAgICAgICAgICtCdWlsZFNtYmlvc1R5cGUxN1RhYmxlRXggKA0KICAgICAg ICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7IElOJm5ic3A7IENPTlNUIFNNQklPU19UQUJMRV9H RU5FUkFUT1ImbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAqVGhpcywN CiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyBJTiZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBDTV9TVERfT0JKX1NNQklPU19UQUJMRV9JTkZPJm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICpD T05TVCZuYnNwOw0KICAgICAgICAgIFNtYmlvc1RhYmxlSW5mbywNCiAgICAgICAgICA8YnI+DQog ICAgICAgICAgKyZuYnNwOyBJTiZuYnNwOyBDT05TVCBFREtJSV9DT05GSUdVUkFUSU9OX01BTkFH RVJfUFJPVE9DT0wmbmJzcDsmbmJzcDsgKkNPTlNUJm5ic3A7DQogICAgICAgICAgQ2ZnTWdyUHJv dG9jb2wsDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsgT1VUJm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IFNNQklPU19TVFJVQ1RVUkUmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAg ICAgICAqKipUYWJsZSwNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyBPVVQmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgVUlOVE4mbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsgKkNPTlNUJm5ic3A7DQogICAgICAgICAgVGFibGVDb3VudA0KICAgICAgICAgIDxi cj4NCiAgICAgICAgICArJm5ic3A7ICkNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgK3sNCiAg ICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyBFRklfU1RBVFVTJm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IFN0YXR1czsNCiAgICAgICAgICA8YnI+DQogICAgICAg ICAgKyZuYnNwOyBVSU5UMzImbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgTnVtTWVtRGV2aWNlczsNCiAgICAgICAgICA8YnI+DQog ICAgICAgICAgKyZuYnNwOyBTTUJJT1NfU1RSVUNUVVJFJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICoqVGFibGVMaXN0Ow0KICAgICAg ICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7IENNX0FSTV9NRU1PUllfREVWSUNFX0lORk8mbmJz cDsgKk1lbW9yeURldmljZXNJbmZvOw0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7 IFVJTlROJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7IEluZGV4Ow0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5i c3A7IFVJTlROJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IFNlcmlhbE51bUxlbjsNCiAgICAgICAgICA8YnI+DQogICAg ICAgICAgKyZuYnNwOyBDSEFSOCZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAqU2VyaWFsTnVtOw0KICAgICAgICAgIDxi cj4NCiAgICAgICAgICArJm5ic3A7IFVJTlROJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IEFzc2V0VGFnTGVuOw0KICAg ICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7IENIQVI4Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICpBc3NldFRh ZzsNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyBVSU5UTiZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBE ZXZpY2VMb2NhdG9yTGVuOw0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7IENIQVI4 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7ICpEZXZpY2VMb2NhdG9yOw0KICAgICAgICAgIDxicj4NCiAgICAgICAgICAr Jm5ic3A7IFVJTlROJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IEJhbmtMb2NhdG9yTGVuOw0KICAgICAgICAgIDxicj4N CiAgICAgICAgICArJm5ic3A7IENIQVI4Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICpCYW5rTG9jYXRvcjsNCiAgICAg ICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyBVSU5UTiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBGaXJtd2FyZVZl cnNpb25MZW47DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsgQ0hBUjgmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsgKkZpcm13YXJlVmVyc2lvbjsNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNw OyBDSEFSOCZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyAqT3B0aW9uYWxTdHJpbmdzOw0KICAgICAgICAgIDxicj4NCiAg ICAgICAgICArJm5ic3A7IFNNQklPU19UQUJMRV9UWVBFMTcmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsgKlNtYmlvc1JlY29yZDsNCiAgICAgICAgICA8YnI+DQogICAg ICAgICAgKw0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7IEFTU0VSVCAoVGhpcyAh PSBOVUxMKTsNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyBBU1NFUlQgKFNtYmlv c1RhYmxlSW5mbyAhPSBOVUxMKTsNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyBB U1NFUlQgKENmZ01nclByb3RvY29sICE9IE5VTEwpOw0KICAgICAgICAgIDxicj4NCiAgICAgICAg ICArJm5ic3A7IEFTU0VSVCAoVGFibGUgIT0gTlVMTCk7DQogICAgICAgICAgPGJyPg0KICAgICAg ICAgICsmbmJzcDsgQVNTRVJUIChUYWJsZUNvdW50ICE9IE5VTEwpOw0KICAgICAgICAgIDxicj4N CiAgICAgICAgICArJm5ic3A7IEFTU0VSVCAoU21iaW9zVGFibGVJbmZvLSZndDtUYWJsZUdlbmVy YXRvcklkID09DQogICAgICAgICAgVGhpcy0mZ3Q7R2VuZXJhdG9ySUQpOw0KICAgICAgICAgIDxi cj4NCiAgICAgICAgICArDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsgREVCVUcg KChERUJVR19FUlJPUiwgJnF1b3Q7JWEgOiBTdGFydCBcbiZxdW90OywgX19GVU5DVElPTl9fKSk7 DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsgKlRhYmxlID0gTlVMTDsNCiAgICAg ICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyBTdGF0dXMgPSBHZXRFQXJtT2JqTWVtb3J5RGV2 aWNlSW5mbyAoDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgQ2Zn TWdyUHJvdG9jb2wsDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsg Q01fTlVMTF9UT0tFTiwNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyAmYW1wO01lbW9yeURldmljZXNJbmZvLA0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7ICZhbXA7TnVtTWVtRGV2aWNlcw0KICAgICAgICAgIDxicj4NCiAgICAgICAg ICArJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7ICk7DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5i c3A7Jm5ic3A7Jm5ic3A7IERFQlVHICgoDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgREVCVUdfRVJST1IsDQogICAgICAgICAgPGJyPg0K ICAgICAgICAgICsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJnF1b3Q7RmFpbGVkIHRv IGdldCBNZW1vcnkgRGV2aWNlcyBDTSBPYmplY3QgJXJcbiZxdW90OywNCiAgICAgICAgICA8YnI+ DQogICAgICAgICAgKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBTdGF0dXMNCiAgICAg ICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyApKTsN CiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyZuYnNwOyZuYnNwOyByZXR1cm4gU3Rh dHVzOw0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7IH0NCiAgICAgICAgICA8YnI+ DQogICAgICAgICAgKw0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7IFRhYmxlTGlz dCA9IChTTUJJT1NfU1RSVUNUVVJFICoqKUFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZg0KICAgICAg ICAgIChTTUJJT1NfU1RSVUNUVVJFICopICogTnVtTWVtRGV2aWNlcyk7DQogICAgICAgICAgPGJy Pg0KICAgICAgICA8L2Jsb2NrcXVvdGU+DQogICAgICAgIFtTQU1JXSBUaGUgbWVtb3J5IGFsbG9j YXRlZCBoZXJlIHNob3VsZCBiZSBmcmVlZCBpbg0KICAgICAgICA8YnI+DQogICAgICAgIEZyZWVT bWJpb3NUeXBlMTdUYWJsZUV4Lg0KICAgICAgICA8YnI+DQogICAgICAgIDxibG9ja3F1b3RlIHR5 cGU9ImNpdGUiPismbmJzcDsgaWYgKFRhYmxlTGlzdCA9PSBOVUxMKSB7DQogICAgICAgICAgPGJy Pg0KICAgICAgICAgICsmbmJzcDsmbmJzcDsmbmJzcDsgREVCVUcgKChERUJVR19FUlJPUiwgJnF1 b3Q7RmFpbGVkIHRvIGFsbG9jIG1lbW9yeSBmb3IgJXUNCiAgICAgICAgICBkZXZpY2VzIHRhYmxl XG4mcXVvdDspKTsNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyZuYnNwOyZuYnNw OyBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCiAgICAgICAgICA8YnI+DQogICAgICAg ICAgKyZuYnNwOyZuYnNwOyZuYnNwOyBnb3RvIGV4aXQ7DQogICAgICAgICAgPGJyPg0KICAgICAg ICAgICsmbmJzcDsgfQ0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArDQogICAgICAgICAgPGJy Pg0KICAgICAgICAgICsmbmJzcDsgZm9yIChJbmRleCA9IDA7IEluZGV4ICZsdDsgTnVtTWVtRGV2 aWNlczsgSW5kZXgrKykgew0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7Jm5ic3A7 Jm5ic3A7IGlmIChNZW1vcnlEZXZpY2VzSW5mb1tJbmRleF0uU2VyaWFsTnVtICE9IE5VTEwpIHsN CiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyBTZXJpYWxOdW1MZW4gPSBBc2NpaVN0ckxlbg0KICAgICAgICAgIChNZW1vcnlEZXZpY2VzSW5m b1tJbmRleF0uU2VyaWFsTnVtKTsNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBTZXJpYWxOdW0mbmJzcDsmbmJzcDsmbmJzcDsgPSBNZW1v cnlEZXZpY2VzSW5mb1tJbmRleF0uU2VyaWFsTnVtOw0KICAgICAgICAgIDxicj4NCiAgICAgICAg ICArJm5ic3A7Jm5ic3A7Jm5ic3A7IH0gZWxzZSB7DQogICAgICAgICAgPGJyPg0KICAgICAgICAg ICsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgU2VyaWFsTnVtTGVuID0gQXNjaWlTdHJM ZW4gKFVua25vd25TdHIpOw0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7IFNlcmlhbE51bSZuYnNwOyZuYnNwOyZuYnNwOyA9IFVua25vd25T dHI7DQogICAgICAgICAgPGJyPg0KICAgICAgICA8L2Jsb2NrcXVvdGU+DQogICAgICAgIDxicj4N CiAgICAgICAgW1NBTUldIElmIHRoZSBzZXJpYWwgbnVtYmVyIGlzIG5vdCBwcm92aWRlZCwgdGhl biBzaG91bGQgdGhlDQogICAgICAgIHN0cmluZw0KICAgICAgICA8YnI+DQogICAgICAgIGZpZWxk IGJlIHNldCB0byAwPw0KICAgICAgICA8YnI+DQogICAgICAgIDxicj4NCiAgICAgICAgU2VlIFNl Y3Rpb24gNi4xLjMsIFNNQklPUyBTcGVjIFZlcnNpb24gMy42LjAgd2hpY2ggc3RhdGVzDQogICAg ICAgIDxicj4NCiAgICAgICAgPGJyPg0KICAgICAgICAmcXVvdDtJZiBhIHN0cmluZyBmaWVsZCBy ZWZlcmVuY2VzIG5vIHN0cmluZywgYSBudWxsICgwKSBpcyBwbGFjZWQgaW4NCiAgICAgICAgdGhh dA0KICAgICAgICA8YnI+DQogICAgICAgIHN0cmluZyBmaWVsZC4mcXVvdDsNCiAgICAgICAgPGJy Pg0KICAgICAgICA8YnI+DQogICAgICAgIFsvU0FNSV0NCiAgICAgICAgPGJyPg0KICAgICAgICA8 YnI+DQogICAgICAgIDxibG9ja3F1b3RlIHR5cGU9ImNpdGUiPismbmJzcDsmbmJzcDsmbmJzcDsg fQ0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArDQogICAgICAgICAgPGJyPg0KICAgICAgICAg ICsmbmJzcDsmbmJzcDsmbmJzcDsgaWYgKE1lbW9yeURldmljZXNJbmZvW0luZGV4XS5Bc3NldFRh ZyAhPSBOVUxMKSB7DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsgQXNzZXRUYWdMZW4gPSBBc2NpaVN0ckxlbg0KICAgICAgICAgIChNZW1v cnlEZXZpY2VzSW5mb1tJbmRleF0uQXNzZXRUYWcpOw0KICAgICAgICAgIDxicj4NCiAgICAgICAg ICArJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IEFzc2V0VGFnJm5ic3A7Jm5ic3A7Jm5i c3A7ID0gTWVtb3J5RGV2aWNlc0luZm9bSW5kZXhdLkFzc2V0VGFnOw0KICAgICAgICAgIDxicj4N CiAgICAgICAgICArJm5ic3A7Jm5ic3A7Jm5ic3A7IH0gZWxzZSB7DQogICAgICAgICAgPGJyPg0K ICAgICAgICAgICsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgQXNzZXRUYWdMZW4gPSBB c2NpaVN0ckxlbiAoVW5rbm93blN0cik7DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgQXNzZXRUYWcmbmJzcDsmbmJzcDsmbmJzcDsgPSBV bmtub3duU3RyOw0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7Jm5ic3A7Jm5ic3A7 IH0NCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKw0KICAgICAgICAgIDxicj4NCiAgICAgICAg ICArJm5ic3A7Jm5ic3A7Jm5ic3A7IGlmIChNZW1vcnlEZXZpY2VzSW5mb1tJbmRleF0uRGV2aWNl TG9jYXRvciAhPSBOVUxMKSB7DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsgRGV2aWNlTG9jYXRvckxlbiA9IEFzY2lpU3RyTGVuDQogICAg ICAgICAgKE1lbW9yeURldmljZXNJbmZvW0luZGV4XS5EZXZpY2VMb2NhdG9yKTsNCiAgICAgICAg ICA8YnI+DQogICAgICAgICAgKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBEZXZpY2VM b2NhdG9yJm5ic3A7Jm5ic3A7Jm5ic3A7ID0NCiAgICAgICAgICBNZW1vcnlEZXZpY2VzSW5mb1tJ bmRleF0uRGV2aWNlTG9jYXRvcjsNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyZu YnNwOyZuYnNwOyB9IGVsc2Ugew0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IERldmljZUxvY2F0b3JMZW4gPSBBc2NpaVN0ckxlbiAoVW5r bm93blN0cik7DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsgRGV2aWNlTG9jYXRvciZuYnNwOyZuYnNwOyZuYnNwOyA9IFVua25vd25TdHI7 DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsmbmJzcDsmbmJzcDsgfQ0KICAgICAg ICAgIDxicj4NCiAgICAgICAgICArDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsm bmJzcDsmbmJzcDsgaWYgKE1lbW9yeURldmljZXNJbmZvW0luZGV4XS5CYW5rTG9jYXRvciAhPSBO VUxMKSB7DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsgQmFua0xvY2F0b3JMZW4gPSBBc2NpaVN0ckxlbg0KICAgICAgICAgIChNZW1vcnlE ZXZpY2VzSW5mb1tJbmRleF0uQmFua0xvY2F0b3IpOw0KICAgICAgICAgIDxicj4NCiAgICAgICAg ICArJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IEJhbmtMb2NhdG9yJm5ic3A7Jm5ic3A7 Jm5ic3A7ID0gTWVtb3J5RGV2aWNlc0luZm9bSW5kZXhdLkJhbmtMb2NhdG9yOw0KICAgICAgICAg IDxicj4NCiAgICAgICAgICArJm5ic3A7Jm5ic3A7Jm5ic3A7IH0gZWxzZSB7DQogICAgICAgICAg PGJyPg0KICAgICAgICAgICsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgQmFua0xvY2F0 b3JMZW4gPSBBc2NpaVN0ckxlbiAoVW5rbm93blN0cik7DQogICAgICAgICAgPGJyPg0KICAgICAg ICAgICsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgQmFua0xvY2F0b3ImbmJzcDsmbmJz cDsmbmJzcDsgPSBVbmtub3duU3RyOw0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7 Jm5ic3A7Jm5ic3A7IH0NCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKw0KICAgICAgICAgIDxi cj4NCiAgICAgICAgICArJm5ic3A7Jm5ic3A7Jm5ic3A7IGlmIChNZW1vcnlEZXZpY2VzSW5mb1tJ bmRleF0uRmlybXdhcmVWZXJzaW9uICE9IE5VTEwpIHsNCiAgICAgICAgICA8YnI+DQogICAgICAg ICAgKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBGaXJtd2FyZVZlcnNpb25MZW4gPSBB c2NpaVN0ckxlbg0KICAgICAgICAgIChNZW1vcnlEZXZpY2VzSW5mb1tJbmRleF0uRmlybXdhcmVW ZXJzaW9uKTsNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyBGaXJtd2FyZVZlcnNpb24mbmJzcDsmbmJzcDsmbmJzcDsgPQ0KICAgICAgICAg IE1lbW9yeURldmljZXNJbmZvW0luZGV4XS5GaXJtd2FyZVZlcnNpb247DQogICAgICAgICAgPGJy Pg0KICAgICAgICAgICsmbmJzcDsmbmJzcDsmbmJzcDsgfSBlbHNlIHsNCiAgICAgICAgICA8YnI+ DQogICAgICAgICAgKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBGaXJtd2FyZVZlcnNp b25MZW4gPSBBc2NpaVN0ckxlbiAoVW5rbm93blN0cik7DQogICAgICAgICAgPGJyPg0KICAgICAg ICAgICsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgRmlybXdhcmVWZXJzaW9uJm5ic3A7 Jm5ic3A7Jm5ic3A7ID0gVW5rbm93blN0cjsNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZu YnNwOyZuYnNwOyZuYnNwOyB9DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsNCiAgICAgICAg ICA8YnI+DQogICAgICAgICAgKyZuYnNwOyZuYnNwOyZuYnNwOyBTbWJpb3NSZWNvcmQgPSAoU01C SU9TX1RBQkxFX1RZUEUxNyAqKUFsbG9jYXRlWmVyb1Bvb2wgKA0KICAgICAgICAgIDxicj4NCiAg ICAgICAgICArJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHNpemVvZg0KICAgICAgICAg IChTTUJJT1NfVEFCTEVfVFlQRTE3KSArDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgU2VyaWFsTnVtTGVuICsgMQ0KICAgICAgICAgICsN CiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyBBc3NldFRhZ0xlbiArIDEgKw0KICAgICAgICAgIERldmljZUxvY2F0b3JMZW4gKyAxICsNCiAg ICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBC YW5rTG9jYXRvckxlbiArDQogICAgICAgICAgMSArIEZpcm13YXJlVmVyc2lvbkxlbiArIDEgKyAx DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsgKTsNCiAgICAgICAgICA8YnI+DQogICAgICAgIDwvYmxvY2txdW90ZT4NCiAgICAgICAgW1NB TUldIFRoZSBtZW1vcnkgYWxsb2NhdGVkIGhlcmUgbmVlZHMgdG8gYmUgZnJlZWQgaW4NCiAgICAg ICAgPGJyPg0KICAgICAgICBGcmVlU21iaW9zVHlwZTE3VGFibGVFeCBhcyZuYnNwOyBTbWJpb3NQ cm90b2NvbC0mZ3Q7QWRkICgpIG1ha2VzIGENCiAgICAgICAgY29weSBvZiB0aGUNCiAgICAgICAg PGJyPg0KICAgICAgICBTbWJpb3NUYWJsZSwgc2VlDQogICAgICAgIDxicj4NCjxhIGNsYXNzPSJt b3otdHh0LWxpbmstZnJlZXRleHQiIGhyZWY9Imh0dHBzOi8vbmFtMTEuc2FmZWxpbmtzLnByb3Rl Y3Rpb24ub3V0bG9vay5jb20vP3VybD1odHRwcyUzQSUyRiUyRmdpdGh1Yi5jb20lMkZ0aWFub2Nv cmUlMkZlZGsyJTJGYmxvYiUyRm1hc3RlciUyRk1kZU1vZHVsZVBrZyUyRlVuaXZlcnNhbCUyRlNt Ymlvc0R4ZSUyRlNtYmlvc0R4ZS5jJTIzTDQ3NiZhbXA7YW1wO2RhdGE9MDUlN0MwMSU3Q2dtYWhh ZGV2YW4lNDBudmlkaWEuY29tJTdDMTE2OWE1MmEyYWQxNDBhOGQ3OTMwOGRhOTRjZjI3NjIlN0M0 MzA4M2QxNTcyNzM0MGMxYjdkYjM5ZWZkOWNjYzE3YSU3QzAlN0MwJTdDNjM3OTg1OTE0NzE3Mzgw NjM0JTdDVW5rbm93biU3Q1RXRnBiR1pzYjNkOGV5SldJam9pTUM0d0xqQXdNREFpTENKUUlqb2lW Mmx1TXpJaUxDSkJUaUk2SWsxaGFXd2lMQ0pYVkNJNk1uMCUzRCU3QzMwMDAlN0MlN0MlN0MmYW1w O2FtcDtzZGF0YT1FblR4bjA3ZWtqQTdiR1VlQ2cyYzBCYVVNVlcweVU1SkZqWE5PY1p1aFFBJTNE JmFtcDthbXA7cmVzZXJ2ZWQ9MCI+aHR0cHM6Ly9uYW0xMS5zYWZlbGlua3MucHJvdGVjdGlvbi5v dXRsb29rLmNvbS8/dXJsPWh0dHBzJTNBJTJGJTJGZ2l0aHViLmNvbSUyRnRpYW5vY29yZSUyRmVk azIlMkZibG9iJTJGbWFzdGVyJTJGTWRlTW9kdWxlUGtnJTJGVW5pdmVyc2FsJTJGU21iaW9zRHhl JTJGU21iaW9zRHhlLmMlMjNMNDc2JmFtcDthbXA7ZGF0YT0wNSU3QzAxJTdDZ21haGFkZXZhbiU0 MG52aWRpYS5jb20lN0MxMTY5YTUyYTJhZDE0MGE4ZDc5MzA4ZGE5NGNmMjc2MiU3QzQzMDgzZDE1 NzI3MzQwYzFiN2RiMzllZmQ5Y2NjMTdhJTdDMCU3QzAlN0M2Mzc5ODU5MTQ3MTczODA2MzQlN0NV bmtub3duJTdDVFdGcGJHWnNiM2Q4ZXlKV0lqb2lNQzR3TGpBd01EQWlMQ0pRSWpvaVYybHVNeklp TENKQlRpSTZJazFoYVd3aUxDSlhWQ0k2TW4wJTNEJTdDMzAwMCU3QyU3QyU3QyZhbXA7YW1wO3Nk YXRhPUVuVHhuMDdla2pBN2JHVWVDZzJjMEJhVU1WVzB5VTVKRmpYTk9jWnVoUUElM0QmYW1wO2Ft cDtyZXNlcnZlZD0wPC9hPg0KICAgICAgICA8YnI+DQogICAgICAgIGFuZA0KICAgICAgICA8YnI+ DQo8YSBjbGFzcz0ibW96LXR4dC1saW5rLWZyZWV0ZXh0IiBocmVmPSJodHRwczovL25hbTExLnNh ZmVsaW5rcy5wcm90ZWN0aW9uLm91dGxvb2suY29tLz91cmw9aHR0cHMlM0ElMkYlMkZnaXRodWIu Y29tJTJGdGlhbm9jb3JlJTJGZWRrMiUyRmJsb2IlMkZtYXN0ZXIlMkZNZGVNb2R1bGVQa2clMkZV bml2ZXJzYWwlMkZTbWJpb3NEeGUlMkZTbWJpb3NEeGUuYyUyM0w1MTYmYW1wO2FtcDtkYXRhPTA1 JTdDMDElN0NnbWFoYWRldmFuJTQwbnZpZGlhLmNvbSU3QzExNjlhNTJhMmFkMTQwYThkNzkzMDhk YTk0Y2YyNzYyJTdDNDMwODNkMTU3MjczNDBjMWI3ZGIzOWVmZDljY2MxN2ElN0MwJTdDMCU3QzYz Nzk4NTkxNDcxNzM4MDYzNCU3Q1Vua25vd24lN0NUV0ZwYkdac2IzZDhleUpXSWpvaU1DNHdMakF3 TURBaUxDSlFJam9pVjJsdU16SWlMQ0pCVGlJNklrMWhhV3dpTENKWFZDSTZNbjAlM0QlN0MzMDAw JTdDJTdDJTdDJmFtcDthbXA7c2RhdGE9ZDZrVTZDZHl3SzRmbk9keEU4Q3lUVE05ZVFIREUzOEZ6 WkI3U0EyRlRxYyUzRCZhbXA7YW1wO3Jlc2VydmVkPTAiPmh0dHBzOi8vbmFtMTEuc2FmZWxpbmtz LnByb3RlY3Rpb24ub3V0bG9vay5jb20vP3VybD1odHRwcyUzQSUyRiUyRmdpdGh1Yi5jb20lMkZ0 aWFub2NvcmUlMkZlZGsyJTJGYmxvYiUyRm1hc3RlciUyRk1kZU1vZHVsZVBrZyUyRlVuaXZlcnNh bCUyRlNtYmlvc0R4ZSUyRlNtYmlvc0R4ZS5jJTIzTDUxNiZhbXA7YW1wO2RhdGE9MDUlN0MwMSU3 Q2dtYWhhZGV2YW4lNDBudmlkaWEuY29tJTdDMTE2OWE1MmEyYWQxNDBhOGQ3OTMwOGRhOTRjZjI3 NjIlN0M0MzA4M2QxNTcyNzM0MGMxYjdkYjM5ZWZkOWNjYzE3YSU3QzAlN0MwJTdDNjM3OTg1OTE0 NzE3MzgwNjM0JTdDVW5rbm93biU3Q1RXRnBiR1pzYjNkOGV5SldJam9pTUM0d0xqQXdNREFpTENK UUlqb2lWMmx1TXpJaUxDSkJUaUk2SWsxaGFXd2lMQ0pYVkNJNk1uMCUzRCU3QzMwMDAlN0MlN0Ml N0MmYW1wO2FtcDtzZGF0YT1kNmtVNkNkeXdLNGZuT2R4RThDeVRUTTllUUhERTM4RnpaQjdTQTJG VHFjJTNEJmFtcDthbXA7cmVzZXJ2ZWQ9MDwvYT4uDQogICAgICAgIDxicj4NCiAgICAgICAgPGJy Pg0KICAgICAgICA8YmxvY2txdW90ZSB0eXBlPSJjaXRlIj4rJm5ic3A7Jm5ic3A7Jm5ic3A7IGlm IChTbWJpb3NSZWNvcmQgPT0gTlVMTCkgew0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VT Ow0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7IGdvdG8gZXhpdDsNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyZuYnNwOyZu YnNwOyB9DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsNCiAgICAgICAgICA8YnI+DQogICAg ICAgICAgKyZuYnNwOyZuYnNwOyZuYnNwOyBDb3B5TWVtIChTbWJpb3NSZWNvcmQsICZhbXA7TWVt RGV2aWNlSW5mb1RlbXBsYXRlLCBzaXplb2YNCiAgICAgICAgICAoU01CSU9TX1RBQkxFX1RZUEUx NykpOw0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7Jm5ic3A7Jm5ic3A7IFNtYmlv c1JlY29yZC0mZ3Q7RXh0ZW5kZWRTaXplJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7ID0NCiAgICAgICAgICBNZW1vcnlEZXZpY2VzSW5mb1tJbmRleF0uU2l6 ZTsNCiAgICAgICAgICA8YnI+DQogICAgICAgIDwvYmxvY2txdW90ZT4NCiAgICAgICAgPGJyPg0K ICAgICAgICBbU0FNSV0gQ01fQVJNX01FTU9SWV9ERVZJQ0VfSU5GTy5TaXplIGlzIGRvY3VtZW50 ZWQgYXMgc2l6ZSBpbg0KICAgICAgICBieXRlcywNCiAgICAgICAgPGJyPg0KICAgICAgICB3aGls ZSBsb29raW5nIGF0IHRoZSBTTUJJT1Mgc3BlY2lmaWNhdGlvbiwgc2VjdGlvbiA3LjE4LjUgZm9y DQogICAgICAgIHRoZQ0KICAgICAgICA8YnI+DQogICAgICAgIEV4dGVuZGVkIFNpemUgQml0cyAz MDowIHJlcHJlc2VudCB0aGUgc2l6ZSBvZiB0aGUgbWVtb3J5IGRldmljZQ0KICAgICAgICBpbg0K ICAgICAgICA8YnI+DQogICAgICAgIG1lZ2FieXRlcy4NCiAgICAgICAgPGJyPg0KICAgICAgICA8 YnI+DQogICAgICAgIEkgdGhpbmsgaXQgd2lsbCBiZSB1c2VmdWwgdG8gY3JlYXRlIFVwZGF0ZVNt Ymlvc1RhYmxlMTdTaXplKCkNCiAgICAgICAgd2hpY2ggZG9lcw0KICAgICAgICA8YnI+DQogICAg ICAgIHRoZSBhcHByb3ByaWF0ZSBlbmNvZGluZyBhbmQgdXBkYXRpb24gb2YgdGhlIFNNQklPUyB0 YWJsZSBmaWVkcy4NCiAgICAgICAgPGJyPg0KICAgICAgICA8YnI+DQogICAgICAgIFsvU0FNSV0N CiAgICAgICAgPGJyPg0KICAgICAgICA8YnI+DQogICAgICAgIDxibG9ja3F1b3RlIHR5cGU9ImNp dGUiPismbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICBTbWJpb3NSZWNvcmQtJmd0O0Rldmlj ZVNldCZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyA9DQogICAgICAgICAgTWVtb3J5RGV2aWNlc0luZm9bSW5kZXhdLkRldmlj ZVNldDsNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyZuYnNwOyZuYnNwOyBTbWJp b3NSZWNvcmQtJmd0O01vZHVsZU1hbnVmYWN0dXJlcklEID0NCiAgICAgICAgICA8YnI+DQogICAg ICAgICAgKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBNZW1vcnlEZXZpY2VzSW5mb1tJ bmRleF0uTW9kdWxlTWFudWZhY3R1cmVySWQ7DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsm bmJzcDsmbmJzcDsmbmJzcDsgU21iaW9zUmVjb3JkLSZndDtNb2R1bGVQcm9kdWN0SUQgPQ0KICAg ICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IE1l bW9yeURldmljZXNJbmZvW0luZGV4XS5Nb2R1bGVQcm9kdWN0SWQ7DQogICAgICAgICAgPGJyPg0K ICAgICAgICAgICsmbmJzcDsmbmJzcDsmbmJzcDsgU21iaW9zUmVjb3JkLSZndDtBdHRyaWJ1dGVz ID0NCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyBNZW1vcnlEZXZpY2VzSW5mb1tJbmRleF0uQXR0cmlidXRlczsNCiAgICAgICAgICA8YnI+ DQogICAgICAgICAgKyZuYnNwOyZuYnNwOyZuYnNwOyBTbWJpb3NSZWNvcmQtJmd0O0V4dGVuZGVk U3BlZWQgPQ0KICAgICAgICAgIE1lbW9yeURldmljZXNJbmZvW0luZGV4XS5TcGVlZDsNCiAgICAg ICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyZuYnNwOyZuYnNwOyBPcHRpb25hbFN0cmluZ3Mm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsgPSAoQ0hBUjggKikoU21iaW9zUmVjb3JkICsNCiAgICAgICAgICAxKTsN CiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyZuYnNwOyZuYnNwOyBBc2NpaVNQcmlu dCAoT3B0aW9uYWxTdHJpbmdzLCBEZXZpY2VMb2NhdG9yTGVuICsgMSwNCiAgICAgICAgICBEZXZp Y2VMb2NhdG9yKTsNCiAgICAgICAgICA8YnI+DQogICAgICAgIDwvYmxvY2txdW90ZT4NCiAgICAg ICAgW1NBTUldIEkgdGhpbmsgd2UgY2FuIHNpbXBsaWZ5IHRoZSBwdWJsaXNoaW5nIG9mIHRoZSBT TUJJT1MNCiAgICAgICAgc3RyaW5ncw0KICAgICAgICA8YnI+DQogICAgICAgIHVzaW5nIFNtYmlv c1N0cmluZ1RhYmxlTGliLiBQbGVhc2Ugc2VlIHRoZSBwYXRjaCBhdA0KICAgICAgICA8YnI+DQo8 YSBjbGFzcz0ibW96LXR4dC1saW5rLWZyZWV0ZXh0IiBocmVmPSJodHRwczovL25hbTExLnNhZmVs aW5rcy5wcm90ZWN0aW9uLm91dGxvb2suY29tLz91cmw9aHR0cHMlM0ElMkYlMkZlZGsyLmdyb3Vw cy5pbyUyRmclMkZkZXZlbCUyRm1lc3NhZ2UlMkY5MzY1MSZhbXA7YW1wO2RhdGE9MDUlN0MwMSU3 Q2dtYWhhZGV2YW4lNDBudmlkaWEuY29tJTdDMTE2OWE1MmEyYWQxNDBhOGQ3OTMwOGRhOTRjZjI3 NjIlN0M0MzA4M2QxNTcyNzM0MGMxYjdkYjM5ZWZkOWNjYzE3YSU3QzAlN0MwJTdDNjM3OTg1OTE0 NzE3MzgwNjM0JTdDVW5rbm93biU3Q1RXRnBiR1pzYjNkOGV5SldJam9pTUM0d0xqQXdNREFpTENK UUlqb2lWMmx1TXpJaUxDSkJUaUk2SWsxaGFXd2lMQ0pYVkNJNk1uMCUzRCU3QzMwMDAlN0MlN0Ml N0MmYW1wO2FtcDtzZGF0YT00eEhNUDJLZk5sY2RlQnJ0SCUyRklUMUYyNDl1V0lvejBYWnJlRjNG U3VncTglM0QmYW1wO2FtcDtyZXNlcnZlZD0wIj5odHRwczovL25hbTExLnNhZmVsaW5rcy5wcm90 ZWN0aW9uLm91dGxvb2suY29tLz91cmw9aHR0cHMlM0ElMkYlMkZlZGsyLmdyb3Vwcy5pbyUyRmcl MkZkZXZlbCUyRm1lc3NhZ2UlMkY5MzY1MSZhbXA7YW1wO2RhdGE9MDUlN0MwMSU3Q2dtYWhhZGV2 YW4lNDBudmlkaWEuY29tJTdDMTE2OWE1MmEyYWQxNDBhOGQ3OTMwOGRhOTRjZjI3NjIlN0M0MzA4 M2QxNTcyNzM0MGMxYjdkYjM5ZWZkOWNjYzE3YSU3QzAlN0MwJTdDNjM3OTg1OTE0NzE3MzgwNjM0 JTdDVW5rbm93biU3Q1RXRnBiR1pzYjNkOGV5SldJam9pTUM0d0xqQXdNREFpTENKUUlqb2lWMmx1 TXpJaUxDSkJUaUk2SWsxaGFXd2lMQ0pYVkNJNk1uMCUzRCU3QzMwMDAlN0MlN0MlN0MmYW1wO2Ft cDtzZGF0YT00eEhNUDJLZk5sY2RlQnJ0SCUyRklUMUYyNDl1V0lvejBYWnJlRjNGU3VncTglM0Qm YW1wO2FtcDtyZXNlcnZlZD0wPC9hPg0KICAgICAgICA8YnI+DQogICAgICAgIDxibG9ja3F1b3Rl IHR5cGU9ImNpdGUiPismbmJzcDsmbmJzcDsmbmJzcDsgT3B0aW9uYWxTdHJpbmdzID0gT3B0aW9u YWxTdHJpbmdzICsNCiAgICAgICAgICBEZXZpY2VMb2NhdG9yTGVuICsgMTsNCiAgICAgICAgICA8 YnI+DQogICAgICAgICAgKyZuYnNwOyZuYnNwOyZuYnNwOyBBc2NpaVNQcmludCAoT3B0aW9uYWxT dHJpbmdzLCBCYW5rTG9jYXRvckxlbiArIDEsDQogICAgICAgICAgQmFua0xvY2F0b3IpOw0KICAg ICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7Jm5ic3A7Jm5ic3A7IE9wdGlvbmFsU3RyaW5n cyA9IE9wdGlvbmFsU3RyaW5ncyArIEJhbmtMb2NhdG9yTGVuICsgMTsNCiAgICAgICAgICA8YnI+ DQogICAgICAgICAgKyZuYnNwOyZuYnNwOyZuYnNwOyBBc2NpaVNQcmludCAoT3B0aW9uYWxTdHJp bmdzLCBTZXJpYWxOdW1MZW4gKyAxLA0KICAgICAgICAgIFNlcmlhbE51bSk7DQogICAgICAgICAg PGJyPg0KICAgICAgICAgICsmbmJzcDsmbmJzcDsmbmJzcDsgT3B0aW9uYWxTdHJpbmdzID0gT3B0 aW9uYWxTdHJpbmdzICsgU2VyaWFsTnVtTGVuICsgMTsNCiAgICAgICAgICA8YnI+DQogICAgICAg ICAgKyZuYnNwOyZuYnNwOyZuYnNwOyBBc2NpaVNQcmludCAoT3B0aW9uYWxTdHJpbmdzLCBBc3Nl dFRhZ0xlbiArIDEsIEFzc2V0VGFnKTsNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNw OyZuYnNwOyZuYnNwOyBPcHRpb25hbFN0cmluZ3MgPSBPcHRpb25hbFN0cmluZ3MgKyBBc3NldFRh Z0xlbiArIDE7DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsmbmJzcDsmbmJzcDsg QXNjaWlTUHJpbnQgKE9wdGlvbmFsU3RyaW5ncywgRmlybXdhcmVWZXJzaW9uTGVuICsgMSwNCiAg ICAgICAgICBGaXJtd2FyZVZlcnNpb24pOw0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5i c3A7Jm5ic3A7Jm5ic3A7IE9wdGlvbmFsU3RyaW5ncyZuYnNwOyA9IE9wdGlvbmFsU3RyaW5ncyAr IEZpcm13YXJlVmVyc2lvbkxlbiArDQogICAgICAgICAgMTsNCiAgICAgICAgICA8YnI+DQogICAg ICAgICAgKyZuYnNwOyZuYnNwOyZuYnNwOyBUYWJsZUxpc3RbSW5kZXhdID0gKFNNQklPU19TVFJV Q1RVUkUgKilTbWJpb3NSZWNvcmQ7DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsg fQ0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArDQogICAgICAgICAgPGJyPg0KICAgICAgICAg ICsmbmJzcDsgKlRhYmxlJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ID0gVGFibGVMaXN0 Ow0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7ICpUYWJsZUNvdW50ID0gTnVtTWVt RGV2aWNlczsNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKw0KICAgICAgICAgIDxicj4NCiAg ICAgICAgICArZXhpdDoNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyBERUJVRyAo KERFQlVHX0VSUk9SLCAmcXVvdDslYSA6IERvbmUgXG4mcXVvdDssIF9fRlVOQ1RJT05fXykpOw0K ICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7IHJldHVybiBTdGF0dXM7DQogICAgICAg ICAgPGJyPg0KICAgICAgICAgICt9DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsNCiAgICAg ICAgICA8YnI+DQogICAgICAgICAgKy8qKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgU01CSU9TIFR5 cGUxNyBUYWJsZSBHZW5lcmF0b3IuDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsqLw0KICAg ICAgICAgIDxicj4NCiAgICAgICAgICArU1RBVElDDQogICAgICAgICAgPGJyPg0KICAgICAgICAg ICtDT05TVA0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArU01CSU9TX1RBQkxFX0dFTkVSQVRP UiZuYnNwOyBTbWJpb3NUeXBlMTdHZW5lcmF0b3IgPSB7DQogICAgICAgICAgPGJyPg0KICAgICAg ICAgICsmbmJzcDsgLy8gR2VuZXJhdG9yIElEDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsm bmJzcDsgQ1JFQVRFX1NURF9TTUJJT1NfVEFCTEVfR0VOX0lEIChFU3RkU21iaW9zVGFibGVJZFR5 cGUxNyksDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsgLy8gR2VuZXJhdG9yIERl c2NyaXB0aW9uDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsgTCZxdW90O1NNQklP Uy5UWVBFMTcuR0VORVJBVE9SJnF1b3Q7LA0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5i c3A7IC8vIFNNQklPUyBUYWJsZSBUeXBlDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJz cDsgRUZJX1NNQklPU19UWVBFX01FTU9SWV9ERVZJQ0UsDQogICAgICAgICAgPGJyPg0KICAgICAg ICAgICsmbmJzcDsgTlVMTCwNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyBOVUxM LA0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7IC8vIEJ1aWxkIHRhYmxlIGZ1bmN0 aW9uIEV4dGVuZGVkLg0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7IEJ1aWxkU21i aW9zVHlwZTE3VGFibGVFeCwNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyAvLyBG cmVlIGZ1bmN0aW9uIEV4dGVuZGVkLg0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7 IEZyZWVTbWJpb3NUeXBlMTdUYWJsZUV4DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICt9Ow0K ICAgICAgICAgIDxicj4NCiAgICAgICAgICArDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsv KiogUmVnaXN0ZXIgdGhlIEdlbmVyYXRvciB3aXRoIHRoZSBTTUJJT1MgVGFibGUgRmFjdG9yeS4N CiAgICAgICAgICA8YnI+DQogICAgICAgICAgKw0KICAgICAgICAgIDxicj4NCiAgICAgICAgICAr Jm5ic3A7IEBwYXJhbSBbaW5dJm5ic3A7IEltYWdlSGFuZGxlJm5ic3A7IFRoZSBoYW5kbGUgdG8g dGhlIGltYWdlLg0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7IEBwYXJhbSBbaW5d Jm5ic3A7IFN5c3RlbVRhYmxlJm5ic3A7IFBvaW50ZXIgdG8gdGhlIFN5c3RlbSBUYWJsZS4NCiAg ICAgICAgICA8YnI+DQogICAgICAgICAgKw0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5i c3A7IEByZXR2YWwgRUZJX1NVQ0NFU1MmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgVGhlIEdlbmVyYXRvciBpcyByZWdpc3RlcmVkLg0K ICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7IEByZXR2YWwgRUZJX0lOVkFMSURfUEFS QU1FVEVSIEEgcGFyYW1ldGVyIGlzIGludmFsaWQuDQogICAgICAgICAgPGJyPg0KICAgICAgICAg ICsmbmJzcDsgQHJldHZhbCBFRklfQUxSRUFEWV9TVEFSVEVEJm5ic3A7Jm5ic3A7IFRoZSBHZW5l cmF0b3IgZm9yIHRoZSBUYWJsZQ0KICAgICAgICAgIElEDQogICAgICAgICAgPGJyPg0KICAgICAg ICAgICsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsgaXMgYWxyZWFkeSByZWdpc3RlcmVkLg0KICAgICAgICAgIDxi cj4NCiAgICAgICAgICArKiovDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICtFRklfU1RBVFVT DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICtFRklBUEkNCiAgICAgICAgICA8YnI+DQogICAg ICAgICAgK1NtYmlvc1R5cGUxN0xpYkNvbnN0cnVjdG9yICgNCiAgICAgICAgICA8YnI+DQogICAg ICAgICAgKyZuYnNwOyBJTiZuYnNwOyBFRklfSEFORExFJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7IEltYWdlSGFuZGxlLA0KICAgICAgICAgIDxicj4NCiAgICAgICAg ICArJm5ic3A7IElOJm5ic3A7IEVGSV9TWVNURU1fVEFCTEUmbmJzcDsgKlN5c3RlbVRhYmxlDQog ICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsgKQ0KICAgICAgICAgIDxicj4NCiAgICAg ICAgICArew0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7IEVGSV9TVEFUVVMmbmJz cDsgU3RhdHVzOw0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArDQogICAgICAgICAgPGJyPg0K ICAgICAgICAgICsmbmJzcDsgU3RhdHVzID0gUmVnaXN0ZXJTbWJpb3NUYWJsZUdlbmVyYXRvcg0K ICAgICAgICAgICgmYW1wO1NtYmlvc1R5cGUxN0dlbmVyYXRvcik7DQogICAgICAgICAgPGJyPg0K ICAgICAgICAgICsmbmJzcDsgREVCVUcgKCgNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZu YnNwOyZuYnNwOyZuYnNwOyBERUJVR19JTkZPLA0KICAgICAgICAgIDxicj4NCiAgICAgICAgICAr Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZxdW90O1NNQklPUyBUeXBlIDE3OiBSZWdpc3RlciBHZW5lcmF0 b3IuIFN0YXR1cyA9ICVyXG4mcXVvdDssDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJz cDsmbmJzcDsmbmJzcDsgU3RhdHVzDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsm bmJzcDsmbmJzcDsgKSk7DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsgQVNTRVJU X0VGSV9FUlJPUiAoU3RhdHVzKTsNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKw0KICAgICAg ICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7IHJldHVybiBTdGF0dXM7DQogICAgICAgICAgPGJy Pg0KICAgICAgICAgICt9DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsNCiAgICAgICAgICA8 YnI+DQogICAgICAgICAgKy8qKiBEZXJlZ2lzdGVyIHRoZSBHZW5lcmF0b3IgZnJvbSB0aGUgU01C SU9TIFRhYmxlIEZhY3RvcnkuDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsNCiAgICAgICAg ICA8YnI+DQogICAgICAgICAgKyZuYnNwOyBAcGFyYW0gW2luXSZuYnNwOyBJbWFnZUhhbmRsZSZu YnNwOyBUaGUgaGFuZGxlIHRvIHRoZSBpbWFnZS4NCiAgICAgICAgICA8YnI+DQogICAgICAgICAg KyZuYnNwOyBAcGFyYW0gW2luXSZuYnNwOyBTeXN0ZW1UYWJsZSZuYnNwOyBQb2ludGVyIHRvIHRo ZSBTeXN0ZW0gVGFibGUuDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsNCiAgICAgICAgICA8 YnI+DQogICAgICAgICAgKyZuYnNwOyBAcmV0dmFsIEVGSV9TVUNDRVNTJm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IFRoZSBHZW5lcmF0 b3IgaXMNCiAgICAgICAgICBkZXJlZ2lzdGVyZWQuDQogICAgICAgICAgPGJyPg0KICAgICAgICAg ICsmbmJzcDsgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgQSBwYXJhbWV0ZXIgaXMgaW52 YWxpZC4NCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyBAcmV0dmFsIEVGSV9OT1Rf Rk9VTkQmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgVGhl IEdlbmVyYXRvciBpcyBub3QNCiAgICAgICAgICByZWdpc3RlcmVkLg0KICAgICAgICAgIDxicj4N CiAgICAgICAgICArKiovDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICtFRklfU1RBVFVTDQog ICAgICAgICAgPGJyPg0KICAgICAgICAgICtFRklBUEkNCiAgICAgICAgICA8YnI+DQogICAgICAg ICAgK1NtYmlvc1R5cGUxN0xpYkRlc3RydWN0b3IgKA0KICAgICAgICAgIDxicj4NCiAgICAgICAg ICArJm5ic3A7IElOJm5ic3A7IEVGSV9IQU5ETEUmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsgSW1hZ2VIYW5kbGUsDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsm bmJzcDsgSU4mbmJzcDsgRUZJX1NZU1RFTV9UQUJMRSZuYnNwOyAqU3lzdGVtVGFibGUNCiAgICAg ICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyApDQogICAgICAgICAgPGJyPg0KICAgICAgICAg ICt7DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsgRUZJX1NUQVRVUyZuYnNwOyBT dGF0dXM7DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsNCiAgICAgICAgICA8YnI+DQogICAg ICAgICAgKyZuYnNwOyBTdGF0dXMgPSBEZXJlZ2lzdGVyU21iaW9zVGFibGVHZW5lcmF0b3INCiAg ICAgICAgICAoJmFtcDtTbWJpb3NUeXBlMTdHZW5lcmF0b3IpOw0KICAgICAgICAgIDxicj4NCiAg ICAgICAgICArJm5ic3A7IERFQlVHICgoDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJz cDsmbmJzcDsmbmJzcDsgREVCVUdfSU5GTywNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZu YnNwOyZuYnNwOyZuYnNwOyAmcXVvdDtTTUJJT1MgVHlwZTE3OiBEZXJlZ2lzdGVyIEdlbmVyYXRv ci4gU3RhdHVzID0gJXJcbiZxdW90OywNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNw OyZuYnNwOyZuYnNwOyBTdGF0dXMNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyZu YnNwOyZuYnNwOyApKTsNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyBBU1NFUlRf RUZJX0VSUk9SIChTdGF0dXMpOw0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArJm5ic3A7IHJl dHVybiBTdGF0dXM7DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICt9DQogICAgICAgICAgPGJy Pg0KICAgICAgICAgIGRpZmYgLS1naXQNCmEvRHluYW1pY1RhYmxlc1BrZy9MaWJyYXJ5L1NtYmlv cy9Bcm0vU21iaW9zVHlwZTE3TGliL1NtYmlvc1R5cGUxN0xpYkFybS5pbmYNCmIvRHluYW1pY1Rh Ymxlc1BrZy9MaWJyYXJ5L1NtYmlvcy9Bcm0vU21iaW9zVHlwZTE3TGliL1NtYmlvc1R5cGUxN0xp YkFybS5pbmYNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQN CiAgICAgICAgICA8YnI+DQogICAgICAgICAgaW5kZXggMDAwMDAwMDAwMC4uNzhhODBiNzVmMA0K ICAgICAgICAgIDxicj4NCiAgICAgICAgICAtLS0gL2Rldi9udWxsDQogICAgICAgICAgPGJyPg0K ICAgICAgICAgICsrKw0KYi9EeW5hbWljVGFibGVzUGtnL0xpYnJhcnkvU21iaW9zL0FybS9TbWJp b3NUeXBlMTdMaWIvU21iaW9zVHlwZTE3TGliQXJtLmluZjxicj4NCiAgICAgICAgICBAQCAtMCww ICsxLDMyIEBADQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsjIyBAZmlsZQ0KICAgICAgICAg IDxicj4NCiAgICAgICAgICArIyBTTUJJT1MgVHlwZTE3IFRhYmxlIEdlbmVyYXRvcg0KICAgICAg ICAgIDxicj4NCiAgICAgICAgICArIw0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArIyZuYnNw OyBDb3B5cmlnaHQgKGMpIDIwMjIsIE5WSURJQSBDT1JQT1JBVElPTiAmYW1wOyBBRkZJTElBVEVT Lg0KICAgICAgICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQogICAgICAgICAgPGJyPg0KICAgICAg ICAgICsjJm5ic3A7IENvcHlyaWdodCAoYykgMjAxOSAtIDIwMjEsIEFybSBMaW1pdGVkLiBBbGwg cmlnaHRzDQogICAgICAgICAgcmVzZXJ2ZWQuJmx0O0JSJmd0Ow0KICAgICAgICAgIDxicj4NCiAg ICAgICAgICArIw0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArIyZuYnNwOyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KICAgICAgICAgIDxicj4NCiAgICAg ICAgICArIyMNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKw0KICAgICAgICAgIDxicj4NCiAg ICAgICAgICArW0RlZmluZXNdDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsgSU5G X1ZFUlNJT04mbmJzcDsmbmJzcDsmbmJzcDsgPSAweDAwMDEwMDFCDQogICAgICAgICAgPGJyPg0K ICAgICAgICAgICsmbmJzcDsgQkFTRV9OQU1FJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 ID0gU21iaW9zVHlwZTE3TGliQXJtDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsg RklMRV9HVUlEJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ID0gMWYwNjNiYWMtZjhmMS00 ZTA4LThmZmQtOWFhZTUyYzc1NDk3DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsg VkVSU0lPTl9TVFJJTkcgPSAxLjANCiAgICAgICAgICA8YnI+DQogICAgICAgICAgKyZuYnNwOyBN T0RVTEVfVFlQRSZuYnNwOyZuYnNwOyZuYnNwOyA9IERYRV9EUklWRVINCiAgICAgICAgICA8YnI+ DQogICAgICAgICAgKyZuYnNwOyBMSUJSQVJZX0NMQVNTJm5ic3A7ID0gTlVMTHxEWEVfRFJJVkVS DQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsgQ09OU1RSVUNUT1ImbmJzcDsmbmJz cDsmbmJzcDsgPSBTbWJpb3NUeXBlMTdMaWJDb25zdHJ1Y3Rvcg0KICAgICAgICAgIDxicj4NCiAg ICAgICAgICArJm5ic3A7IERFU1RSVUNUT1ImbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgPSBTbWJp b3NUeXBlMTdMaWJEZXN0cnVjdG9yDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsNCiAgICAg ICAgICA8YnI+DQogICAgICAgICAgK1tTb3VyY2VzXQ0KICAgICAgICAgIDxicj4NCiAgICAgICAg ICArJm5ic3A7IFNtYmlvc1R5cGUxN0dlbmVyYXRvci5jDQogICAgICAgICAgPGJyPg0KICAgICAg ICAgICsNCiAgICAgICAgICA8YnI+DQogICAgICAgICAgK1tQYWNrYWdlc10NCiAgICAgICAgICA8 YnI+DQogICAgICAgICAgKyZuYnNwOyBNZGVQa2cvTWRlUGtnLmRlYw0KICAgICAgICAgIDxicj4N CiAgICAgICAgICArJm5ic3A7IE1kZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cuZGVjDQogICAgICAg ICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsgRW1iZWRkZWRQa2cvRW1iZWRkZWRQa2cuZGVjDQog ICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsgQXJtUGxhdGZvcm1Qa2cvQXJtUGxhdGZv cm1Qa2cuZGVjDQogICAgICAgICAgPGJyPg0KICAgICAgICAgICsmbmJzcDsgRHluYW1pY1RhYmxl c1BrZy9EeW5hbWljVGFibGVzUGtnLmRlYw0KICAgICAgICAgIDxicj4NCiAgICAgICAgICArDQog ICAgICAgICAgPGJyPg0KICAgICAgICAgICtbTGlicmFyeUNsYXNzZXNdDQogICAgICAgICAgPGJy Pg0KICAgICAgICAgICsmbmJzcDsgQmFzZUxpYg0KICAgICAgICAgIDxicj4NCiAgICAgICAgICAr Jm5ic3A7IERlYnVnTGliDQogICAgICAgICAgPGJyPg0KICAgICAgICA8L2Jsb2NrcXVvdGU+DQog ICAgICA8L2Jsb2NrcXVvdGU+DQogICAgICA8YnI+DQogICAgICA8YnI+DQogICAgICANCiAgICAg IDxicj4NCiAgICAgIDxicj4NCiAgICAgIDxicj4NCiAgICA8L2Jsb2NrcXVvdGU+DQogIDwvYm9k eT4NCjwvaHRtbD4NCg== --------------YiBaZIWrlQzCmvVlSDS3UEAk--