From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0a-002e3701.pphosted.com (mx0a-002e3701.pphosted.com [148.163.147.86]) by mx.groups.io with SMTP id smtpd.web11.4082.1612499699949251879 for ; Thu, 04 Feb 2021 20:35:00 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@hpe.com header.s=pps0720 header.b=WDm/SeFn; spf=pass (domain: hpe.com, ip: 148.163.147.86, mailfrom: prvs=0670c6bb95=abner.chang@hpe.com) Received: from pps.filterd (m0150241.ppops.net [127.0.0.1]) by mx0a-002e3701.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 1154XSMl023197; Fri, 5 Feb 2021 04:34:47 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hpe.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : mime-version; s=pps0720; bh=+t7+SQn/tPOGRtwmCr5BPslDO5ylZDPDNbApsZ6Q4cQ=; b=WDm/SeFnicfEZ3gOIbAumPKyDvyITnbGTe6PGaPRwZ4Jh1hRBc2EbuqhVBmAsrNpY1iq cOhqnHvd9w/3uGh7dQm4a0hXyP+8PSjFX802q+g1O/WbCV+aEBySxpZvHL7bC+129F6r UxGvDlEbGgSczjPynMgjlfi40/jQ6zkjhmHeS96ku5fGZEye+9JJRwU9a8WULMbYlm+6 ksBL7nmPuiZQ7LMKqo+xX52p0epOAsG9ZW10rbUga5tUdWoNKpeHOemYXjahcez8fzZY Pu96FgEX3NHwTxFmP0jqThxrFteXVBmkZL0M5D5QHljjEPI+Sd1JoThuG0PRJYV7HMQ4 uw== Received: from g4t3427.houston.hpe.com (g4t3427.houston.hpe.com [15.241.140.73]) by mx0a-002e3701.pphosted.com with ESMTP id 36fqkwar8v-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 05 Feb 2021 04:34:47 +0000 Received: from G2W6310.americas.hpqcorp.net (g2w6310.austin.hp.com [16.197.64.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by g4t3427.houston.hpe.com (Postfix) with ESMTPS id 3EF5B57; Fri, 5 Feb 2021 04:34:46 +0000 (UTC) Received: from G9W8455.americas.hpqcorp.net (2002:10d8:a15e::10d8:a15e) by G2W6310.americas.hpqcorp.net (2002:10c5:4034::10c5:4034) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 5 Feb 2021 04:34:45 +0000 Received: from NAM02-BL2-obe.outbound.protection.outlook.com (15.241.52.10) by G9W8455.americas.hpqcorp.net (16.216.161.94) with Microsoft SMTP Server (TLS) id 15.0.1497.2 via Frontend Transport; Fri, 5 Feb 2021 04:34:45 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PbDkCB0JDKIUrNN5Uf4Ae9nfoAiX/FmQ8+r02p3qbUbas2Hm4BrNNC359D+/woasnxM3exMw07dek+zrcNU/jdbkK5WXZKoNL9t0A3d7zkB15DLA6EifxoyLPpatK2bBLzDZ1CLz4gViuQ3zVb+b9U+kPNOYMKnV8fc+voeG81B7sFwS0txQ22vSKbPszAYdXDwEFfU1hfGchRim20lOp+cV+QzbqLIJdtaKLq6Usah3Vhw5M7Csw9Oy1G0qhAVV+jC+kjYCcoJnf1nXIDwW3OzG/wv1PfgykTwkJubC0j7H5rNtVAgt6eU6FO8IQjP5b85Z6EbEfdsIWEUbOshW/g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ynTZkGz3Pb7HsU2yCvR04o1j5bKhTzKwk6dnQfKOk8E=; b=bkZ7h7ZbPvXNq44Ec6ONgh0nr+vJy4I4bmuLBuz/RDT6wuYdpOUdxbx40n4GbymrONbYz+KH3OfjVPh0C4jNfN+XKc/6eohKGVogNyAzd1cddMLtmED9gwWP9Phk6Jr9LNdv+xtM0DJ3YAXeg/ozOP90Y/ONiLlV5MBtp0G/io0MnALqvznuEg1iX1T4FK/vDpgE3JHCJfeSx14lGhV5AUW92LXxVfMb3dP/abQcAgRuLWJujjfGg84IM6XqRQMJHSFgL/WgO8bLyVNwCTsTsKnkrjh4ADHvzXEzxvwOplTeagAFEciZX4dFY075L3LanYGS1cXp+uUkroheuILm7Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=hpe.com; dmarc=pass action=none header.from=hpe.com; dkim=pass header.d=hpe.com; arc=none Received: from CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM (2a01:111:e400:7508::16) by CS1PR8401MB0469.NAMPRD84.PROD.OUTLOOK.COM (2a01:111:e400:7507::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3825.20; Fri, 5 Feb 2021 04:34:41 +0000 Received: from CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM ([fe80::adb6:a875:93ca:b54a]) by CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM ([fe80::adb6:a875:93ca:b54a%12]) with mapi id 15.20.3805.028; Fri, 5 Feb 2021 04:34:41 +0000 From: "Abner Chang" To: gaoliming , "devel@edk2.groups.io" , "dandan.bi@intel.com" CC: "'Dong, Eric'" , "Wang, Nickle (HPS SW)" Subject: Re: [edk2-devel] [PATCH v3] MdeModulePkg/Library: Add HiiGetStringEx to UefiHiiLib for EDK2 Redfish Thread-Topic: [edk2-devel] [PATCH v3] MdeModulePkg/Library: Add HiiGetStringEx to UefiHiiLib for EDK2 Redfish Thread-Index: AQHW+E38alKsDp1akUCgbH27fkLXf6pGTecwgABAqICAAQtOgIAAFaqygAEh2WCAACKJAIAAC7Sw Date: Fri, 5 Feb 2021 04:34:41 +0000 Message-ID: References: <20210201030542.22997-1-abner.chang@hpe.com> ,<006401d6fac5$3d48f0a0$b7dad1e0$@byosoft.com.cn> <16607E7DFB87792F.10090@groups.io> <003901d6fb72$438dac50$caa904f0$@byosoft.com.cn> In-Reply-To: <003901d6fb72$438dac50$caa904f0$@byosoft.com.cn> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: byosoft.com.cn; dkim=none (message not signed) header.d=none;byosoft.com.cn; dmarc=none action=none header.from=hpe.com; x-originating-ip: [16.242.247.131] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 847eea77-781e-4ae2-9b7c-08d8c98f5ab6 x-ms-traffictypediagnostic: CS1PR8401MB0469: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:5236; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: RZeoSjghE338PfIp9R8JSNtr3oFmLQVq5DiX5yuXpoHtKwmZfx8MFQbbMZHrxRVSgu9yhuvU51Yj0oHuvNiNlvCcozeCgLyEGyLg/Y+0HZ1oEnvsjH8f4dAbv7zpAZGDp0T20wEFQv6mN4Cyv//I8fu+MNlJFICC9L9xoP4drXnSDggJPI0GwQgz8bLm6hplEq0czLgXv5ee8OmYYfD96DihyrEVFt3fA9fQf7q94fBMVnBS4iR7HWUwKirargZaHLzzElwcHPrikeMwR2FjSJ2WdI9FFma4W9o3VgSIZKu5AVxgbokLgmKEXh5/HWkTixcwlv4P3GjZUbUVEgmMk8vCuJC9DfyCmVIGNQ2X+zz4mGnydZ4ZqyHspuOZV/Eievod87Rw5M4aS6QsKoJAJX791mG0b6XJcAqi4Ghrvyor1tYAFIZ2MmT3Oc0dAEXKw/x5uyN7lwIE3by6neoPQA== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(136003)(39860400002)(346002)(396003)(376002)(366004)(52536014)(66476007)(66446008)(8676002)(7696005)(186003)(86362001)(30864003)(33656002)(55016002)(4326008)(9686003)(76116006)(64756008)(53546011)(6506007)(2906002)(66946007)(26005)(5660300002)(54906003)(8936002)(83380400001)(316002)(478600001)(66556008)(45080400002)(110136005)(71200400001)(166002)(76236003);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: =?gb2312?B?a2ZKQTlmY0dwV3pwMEp6MmQzZHBsZmhCblhJYUdXYTNIOUIvV2xqVUNFckFp?= =?gb2312?B?NWRuZjhqTlFnVWRZSXo5MGFBKzFKRjlGbnBLbFg2ZlF3UGp0WlB3NDVjUVFy?= =?gb2312?B?aytmK0o4bnNrcWc2RzhBaHBMNm81bmlyTTJWaHFQZkY4cDd4UHNzYkF1NVJl?= =?gb2312?B?STFXRU0zd013eExJdEVHdjI1TEJNL1UvZklYOERvNjFSVjh1cFBEYTNRZlR5?= =?gb2312?B?R2hsWGJHNWMzMlV0ekh2UDJydHRPVHhvU2diNk4zc0Z4NnJrbjdaa1E5QTI5?= =?gb2312?B?WVNPcVVHazdhUDg2SlFyYmRHZlhoV3hJNHlBeHJvY25mVUtIdC8rZDBlTXF4?= =?gb2312?B?RTh1RHU2WGZkZUNybjdQekcxN0Z4SXJLcWNTU09LTmZ6QWN4WnNhOEpnRnVL?= =?gb2312?B?L3R2UkQwWkJDY01OOW9zUkEvWDVsU3Z6RDRmc0x1dVhWb3BYQ1BzOWgzblQ0?= =?gb2312?B?WDdjYWdXaHlQdGdnek9ZSlhjeUtRTmlZamZmZUlXTjJzeWRlb0pXbktZZWd0?= =?gb2312?B?bWZRcVRwMmp2NVVBcUtSU2U3Qnhxb29vSHZINENLR0h2TDZYTGJJbWRWMmdW?= =?gb2312?B?a1h6Y3VhQ0J5bzRMcFh2ZVRvK0pRVmpBUE1KR25NQTdNZ284U2pkNWtzZERG?= =?gb2312?B?ZUh5bmxaVmwwVzAreGpZM0xxUzJHVFdOeCt0MC84THZuSE0vS3VRZVlDU2E4?= =?gb2312?B?TnJycytKTm9OZVBicUhMQXRIZzZQeHpOOFBERm5CdUtiaTFYZGtuSS9JUGhI?= =?gb2312?B?OUczYlcvUDJJL1NiN2FVS3ZBWU5ZNkZJeWdTb0owU0V4WmJ0YWxPdDVIbUZD?= =?gb2312?B?NHBPSGlQcTNyb1ltRExuYm51Z2x3bmJPMW5kbzgwVEFQWEZQQTRrL3dKaHh3?= =?gb2312?B?K05WRnZKcmpjdFdNRzViWGlSangzRG5zTWpuczU1bW1oT3V0bDJrSnhSTHdi?= =?gb2312?B?T2x6cWNaYk1mWUl1RDJ2MUNaaU1RTTFDYWtVWjJ3K3RQMUhtcmtmeEhTbGI2?= =?gb2312?B?T2U0TWJMVklPaTRUTFhPVnRvd3ZydFNHR2xvaDZUVVY0ZkYrSldVeVRVbWFH?= =?gb2312?B?aTdMK3RPSUJBSDBEdGtvM0Y4K2owUWxBRHdOM2o2NzBWSlhtNkptbDRlWmIr?= =?gb2312?B?T01aUGxnU3doTmhJSUROc0FkSDFRbTh5SHNadlBycGF3ZTBUallQdy90SC8x?= =?gb2312?B?d2E2Y1oxcXRBTW94WlpMd1VSVEVwTkZEOEtob0lWZnBnM3FWRWRXczJjMDds?= =?gb2312?B?ZXZzZ2JLYllTTlFtUVlYQzcxcVpRcU9MREFZQVJLeWR6SVFNclNrN3JLRWNT?= =?gb2312?B?bWI1Zk9nT3crUitHWEJ4UC9hV2NoU1JMYmlvMExlQXZwMzRQemJLNVQ1YWdW?= =?gb2312?B?WEZxbVpHb25jM2l1eXJDZVRnMG9ROWdRdXN3UjhUNHFUNEJwRmpSNmRmVjRJ?= =?gb2312?B?YVlEZlFrMC9nbHZ6VjM4QUQ1TlhkRE0wd2s0d0cxMzVZaWxpRXFYT0dpQmox?= =?gb2312?B?dGFZZ1pIb0tOWEgydTJEYjlRTlhLUnBhVFExMG5NenZwSHpoeTN1V1llWElN?= =?gb2312?B?ZHAwZzhNelZ6Ump2QlN1SVN3eTM0S3N6TDhMTjVlU25pd05XTURVQVc1cnJC?= =?gb2312?B?bWFUcXc5M1ZvYWRGaFkvQlJob25Ua0R2QXVISDlXcjdITkl0WHg4aFc4ajdi?= =?gb2312?B?N0NEaFBFV1RXaGhmRzF3bVpLTEtwVnJpVzBLTVZOSmFwV1VTWGtyMXduS2lk?= =?gb2312?Q?aOoUtODzDuJo3kobYcKh83JwaIJbaQtuO16Uo4y?= X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: 847eea77-781e-4ae2-9b7c-08d8c98f5ab6 X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Feb 2021 04:34:41.0749 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 105b2061-b669-4b31-92ac-24d304d195dc X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: ji7riBZ9NgAakpVT8VUHp8qGhWOjzTXnhUX0kggDYkNDEGjL24Eq55BJ9KG+Bwn3pB3YKygJbHUTRjHfPRzC4Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CS1PR8401MB0469 X-OriginatorOrg: hpe.com X-Proofpoint-UnRewURL: 12 URL's were un-rewritten MIME-Version: 1.0 X-HPE-SCL: -1 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.369,18.0.737 definitions=2021-02-05_02:2021-02-04,2021-02-05 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 suspectscore=0 clxscore=1015 mlxlogscore=999 phishscore=0 lowpriorityscore=0 adultscore=0 impostorscore=0 bulkscore=0 spamscore=0 malwarescore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2009150000 definitions=main-2102050029 Content-Language: en-US Content-Type: multipart/alternative; boundary="_000_CS1PR8401MB1144F23B18212DA3CDB27EF8FFB29CS1PR8401MB1144_" --_000_CS1PR8401MB1144F23B18212DA3CDB27EF8FFB29CS1PR8401MB1144_ Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 VGhhbmtzIExpbWluZw0KDQpGcm9tOiBnYW9saW1pbmcgW21haWx0bzpnYW9saW1pbmdAYnlvc29m dC5jb20uY25dDQpTZW50OiBGcmlkYXksIEZlYnJ1YXJ5IDUsIDIwMjEgMTE6NTIgQU0NClRvOiBk ZXZlbEBlZGsyLmdyb3Vwcy5pbzsgQ2hhbmcsIEFibmVyIChIUFMgU1cvRlcgVGVjaG5vbG9naXN0 KSA8YWJuZXIuY2hhbmdAaHBlLmNvbT47IGRhbmRhbi5iaUBpbnRlbC5jb20NCkNjOiAnRG9uZywg RXJpYycgPGVyaWMuZG9uZ0BpbnRlbC5jb20+OyBXYW5nLCBOaWNrbGUgKEhQUyBTVykgPG5pY2ts ZS53YW5nQGhwZS5jb20+DQpTdWJqZWN0OiC72Li0OiBbZWRrMi1kZXZlbF0gW1BBVENIIHYzXSBN ZGVNb2R1bGVQa2cvTGlicmFyeTogQWRkIEhpaUdldFN0cmluZ0V4IHRvIFVlZmlIaWlMaWIgZm9y IEVESzIgUmVkZmlzaA0KDQpJIGFtIE9LIGZvciBhbnkgb3B0aW9uLiBSZXZpZXdlZC1ieTogTGlt aW5nIEdhbyA8Z2FvbGltaW5nQGJ5b3NvZnQuY29tLmNuPG1haWx0bzpnYW9saW1pbmdAYnlvc29m dC5jb20uY24+Pg0KDQpUaGFua3MNCkxJbWluZw0Kt6K8/sjLOiBib3VuY2UrMjc5NTIrNzEyNzcr NDkwNTk1Mys4NzYxMDQ1QGdyb3Vwcy5pbzxtYWlsdG86Ym91bmNlKzI3OTUyKzcxMjc3KzQ5MDU5 NTMrODc2MTA0NUBncm91cHMuaW8+IDxib3VuY2UrMjc5NTIrNzEyNzcrNDkwNTk1Mys4NzYxMDQ1 QGdyb3Vwcy5pbzxtYWlsdG86Ym91bmNlKzI3OTUyKzcxMjc3KzQ5MDU5NTMrODc2MTA0NUBncm91 cHMuaW8+PiC0+rHtIEFibmVyIENoYW5nDQq3osvNyrG85DogMjAyMcTqMtTCNcjVIDk6NTENCsrV vP7IyzogZGV2ZWxAZWRrMi5ncm91cHMuaW88bWFpbHRvOmRldmVsQGVkazIuZ3JvdXBzLmlvPjsg Q2hhbmcsIEFibmVyIChIUFMgU1cvRlcgVGVjaG5vbG9naXN0KSA8YWJuZXIuY2hhbmdAaHBlLmNv bTxtYWlsdG86YWJuZXIuY2hhbmdAaHBlLmNvbT4+OyBkYW5kYW4uYmlAaW50ZWwuY29tPG1haWx0 bzpkYW5kYW4uYmlAaW50ZWwuY29tPg0Ks63LzTogJ0RvbmcsIEVyaWMnIDxlcmljLmRvbmdAaW50 ZWwuY29tPG1haWx0bzplcmljLmRvbmdAaW50ZWwuY29tPj47IFdhbmcsIE5pY2tsZSAoSFBTIFNX KSA8bmlja2xlLndhbmdAaHBlLmNvbTxtYWlsdG86bmlja2xlLndhbmdAaHBlLmNvbT4+DQrW98zi OiBSZTogW2VkazItZGV2ZWxdIFtQQVRDSCB2M10gTWRlTW9kdWxlUGtnL0xpYnJhcnk6IEFkZCBI aWlHZXRTdHJpbmdFeCB0byBVZWZpSGlpTGliIGZvciBFREsyIFJlZGZpc2gNCg0KSGkgTGltaW5n LA0KRG8geW91IGFncmVlIHRvIGtlZXAgdGhlIG9uZSBEYW5kYW4gc3VnZ2VzdGVkPw0KDQpSZWdh cmRzLA0KQWJuZXINCg0KRnJvbTogZGV2ZWxAZWRrMi5ncm91cHMuaW88bWFpbHRvOmRldmVsQGVk azIuZ3JvdXBzLmlvPiBbbWFpbHRvOmRldmVsQGVkazIuZ3JvdXBzLmlvXSBPbiBCZWhhbGYgT2Yg QWJuZXIgQ2hhbmcNClNlbnQ6IFRodXJzZGF5LCBGZWJydWFyeSA0LCAyMDIxIDQ6MzYgUE0NClRv OiBkZXZlbEBlZGsyLmdyb3Vwcy5pbzxtYWlsdG86ZGV2ZWxAZWRrMi5ncm91cHMuaW8+OyBkYW5k YW4uYmlAaW50ZWwuY29tPG1haWx0bzpkYW5kYW4uYmlAaW50ZWwuY29tPg0KQ2M6ICdEb25nLCBF cmljJyA8ZXJpYy5kb25nQGludGVsLmNvbTxtYWlsdG86ZXJpYy5kb25nQGludGVsLmNvbT4+OyBX YW5nLCBOaWNrbGUgKEhQUyBTVykgPG5pY2tsZS53YW5nQGhwZS5jb208bWFpbHRvOm5pY2tsZS53 YW5nQGhwZS5jb20+Pg0KU3ViamVjdDogUmU6IFtlZGsyLWRldmVsXSBbUEFUQ0ggdjNdIE1kZU1v ZHVsZVBrZy9MaWJyYXJ5OiBBZGQgSGlpR2V0U3RyaW5nRXggdG8gVWVmaUhpaUxpYiBmb3IgRURL MiBSZWRmaXNoDQoNClRoaXMgbG9va3MgdG8gbWUgbm90IHF1aXRlIGludHVpdGlvbmFsLg0KICEo IVRyeUJlc3RMYW5ndWFnZSAmJiBMYW5ndWFnZSA9PSBOVUxMKSBzZWVtcyBtb3JlIHN0cmFpZ2h0 Zm9yd2FyZCBhbmQgZXhhY3RseSB3aGF0IHdlIHdvdWxkIGxpa2UgdG8gY2F0Y2guDQoNCkFibmVy DQoNCkdldCBPdXRsb29rIGZvciBBbmRyb2lkPGh0dHBzOi8vYWthLm1zL2doZWkzNj4NCg0KX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCkZyb206IGRldmVsQGVkazIuZ3JvdXBzLmlv PG1haWx0bzpkZXZlbEBlZGsyLmdyb3Vwcy5pbz4gPGRldmVsQGVkazIuZ3JvdXBzLmlvPG1haWx0 bzpkZXZlbEBlZGsyLmdyb3Vwcy5pbz4+IG9uIGJlaGFsZiBvZiBnYW9saW1pbmcgPGdhb2xpbWlu Z0BieW9zb2Z0LmNvbS5jbjxtYWlsdG86Z2FvbGltaW5nQGJ5b3NvZnQuY29tLmNuPj4NClNlbnQ6 IFRodXJzZGF5LCBGZWJydWFyeSA0LCAyMDIxLCAzOjEzIFBNDQpUbzogZGV2ZWxAZWRrMi5ncm91 cHMuaW88bWFpbHRvOmRldmVsQGVkazIuZ3JvdXBzLmlvPjsgQ2hhbmcsIEFibmVyIChIUFMgU1cv RlcgVGVjaG5vbG9naXN0KTsgZGFuZGFuLmJpQGludGVsLmNvbTxtYWlsdG86ZGFuZGFuLmJpQGlu dGVsLmNvbT4NCkNjOiAnRG9uZywgRXJpYyc7IFdhbmcsIE5pY2tsZSAoSFBTIFNXKQ0KU3ViamVj dDogu9i4tDogW2VkazItZGV2ZWxdIFtQQVRDSCB2M10gTWRlTW9kdWxlUGtnL0xpYnJhcnk6IEFk ZCBIaWlHZXRTdHJpbmdFeCB0byBVZWZpSGlpTGliIGZvciBFREsyIFJlZGZpc2gNCg0KSWYgVHJ5 QmVzdExhbmd1YWdlIGlzIEZBTEUgYW5kIExhbmd1YWdlIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCku DQoNClNvLCBBU1NFUlQgc3RhdGVtZW50IHNob3VsZCBiZSBBU1NFUlQgKFRyeUJlc3RMYW5ndWFn ZSB8fCAoTGFuZ3VhZ2UgIT0NCk5VTEwpKTsNCg0KSXMgdGhpcyBjbGVhcj8NCg0KVGhhbmtzDQpM aW1pbmcNCj4gLS0tLS3Tyrz+1K28/i0tLS0tDQo+ILeivP7IyzogYm91bmNlKzI3OTUyKzcxMTEw KzQ5MDU5NTMrODc2MTA0NUBncm91cHMuaW88bWFpbHRvOmJvdW5jZSsyNzk1Mis3MTExMCs0OTA1 OTUzKzg3NjEwNDVAZ3JvdXBzLmlvPg0KPiA8Ym91bmNlKzI3OTUyKzcxMTEwKzQ5MDU5NTMrODc2 MTA0NUBncm91cHMuaW88bWFpbHRvOmJvdW5jZSsyNzk1Mis3MTExMCs0OTA1OTUzKzg3NjEwNDVA Z3JvdXBzLmlvPj4gtPqx7SBBYm5lciBDaGFuZw0KPiC3osvNyrG85DogMjAyMcTqMtTCM8jVIDIz OjIxDQo+IMrVvP7IyzogZGV2ZWxAZWRrMi5ncm91cHMuaW88bWFpbHRvOmRldmVsQGVkazIuZ3Jv dXBzLmlvPjsgZGFuZGFuLmJpQGludGVsLmNvbTxtYWlsdG86ZGFuZGFuLmJpQGludGVsLmNvbT4N Cj4gs63LzTogRG9uZywgRXJpYyA8ZXJpYy5kb25nQGludGVsLmNvbTxtYWlsdG86ZXJpYy5kb25n QGludGVsLmNvbT4+OyBXYW5nLCBOaWNrbGUgKEhQUyBTVykNCj4gPG5pY2tsZS53YW5nQGhwZS5j b208bWFpbHRvOm5pY2tsZS53YW5nQGhwZS5jb20+Pg0KPiDW98ziOiBSZTogW2VkazItZGV2ZWxd IFtQQVRDSCB2M10gTWRlTW9kdWxlUGtnL0xpYnJhcnk6IEFkZA0KPiBIaWlHZXRTdHJpbmdFeCB0 byBVZWZpSGlpTGliIGZvciBFREsyIFJlZGZpc2gNCj4NCj4gWWVzIERhbmRhbiwgeW91cnMgZm9s bG93IGNvZGluZyBzdGFuZGFyZC4gSSB3aWxsIGhhbmRsZSB0aGF0Lg0KPiBBbHNvLCBJIHdpbGwg aGVscCB0byBwdXNoIHRoZSBwYXRjaCB0byB1cHN0cmVhbSB3aXRoIHlvdXIgcmV2aWV3IHRhZy4N Cj4NCj4gVGhhbmtzDQo+IEFibmVyDQo+DQo+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0N Cj4gPiBGcm9tOiBkZXZlbEBlZGsyLmdyb3Vwcy5pbzxtYWlsdG86ZGV2ZWxAZWRrMi5ncm91cHMu aW8+IFttYWlsdG86ZGV2ZWxAZWRrMi5ncm91cHMuaW9dIE9uIEJlaGFsZiBPZg0KPiA+IERhbmRh biBCaQ0KPiA+IFNlbnQ6IFdlZG5lc2RheSwgRmVicnVhcnkgMywgMjAyMSA3OjM0IFBNDQo+ID4g VG86IENoYW5nLCBBYm5lciAoSFBTIFNXL0ZXIFRlY2hub2xvZ2lzdCkgPGFibmVyLmNoYW5nQGhw ZS5jb208bWFpbHRvOmFibmVyLmNoYW5nQGhwZS5jb20+PjsNCj4gPiBkZXZlbEBlZGsyLmdyb3Vw cy5pbzxtYWlsdG86ZGV2ZWxAZWRrMi5ncm91cHMuaW8+DQo+ID4gQ2M6IERvbmcsIEVyaWMgPGVy aWMuZG9uZ0BpbnRlbC5jb208bWFpbHRvOmVyaWMuZG9uZ0BpbnRlbC5jb20+PjsgV2FuZywgTmlj a2xlIChIUFMgU1cpDQo+ID4gPG5pY2tsZS53YW5nQGhwZS5jb208bWFpbHRvOm5pY2tsZS53YW5n QGhwZS5jb20+Pg0KPiA+IFN1YmplY3Q6IFJlOiBbZWRrMi1kZXZlbF0gW1BBVENIIHYzXSBNZGVN b2R1bGVQa2cvTGlicmFyeTogQWRkDQo+ID4gSGlpR2V0U3RyaW5nRXggdG8gVWVmaUhpaUxpYiBm b3IgRURLMiBSZWRmaXNoDQo+ID4NCj4gPiBPbmUgbWlub3IgY29tbWVudCBpbmxpbmUgYmVsb3cu DQo+ID4gUmV2aWV3ZWQtYnk6IERhbmRhbiBCaSA8ZGFuZGFuLmJpQGludGVsLmNvbTxtYWlsdG86 ZGFuZGFuLmJpQGludGVsLmNvbT4+IHdpdGggdGhpcyBpcyBoYW5kbGVkLg0KPiA+DQo+ID4gVGhh bmtzLA0KPiA+IERhbmRhbg0KPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+ IEZyb206IEFibmVyIENoYW5nIDxhYm5lci5jaGFuZ0BocGUuY29tPG1haWx0bzphYm5lci5jaGFu Z0BocGUuY29tPj4NCj4gPiA+IFNlbnQ6IE1vbmRheSwgRmVicnVhcnkgMSwgMjAyMSAxMTowNiBB TQ0KPiA+ID4gVG86IGRldmVsQGVkazIuZ3JvdXBzLmlvPG1haWx0bzpkZXZlbEBlZGsyLmdyb3Vw cy5pbz4NCj4gPiA+IENjOiBCaSwgRGFuZGFuIDxkYW5kYW4uYmlAaW50ZWwuY29tPG1haWx0bzpk YW5kYW4uYmlAaW50ZWwuY29tPj47IERvbmcsIEVyaWMNCj4gPiA+IDxlcmljLmRvbmdAaW50ZWwu Y29tPG1haWx0bzplcmljLmRvbmdAaW50ZWwuY29tPj47IE5pY2tsZSBXYW5nIDxuaWNrbGUud2Fu Z0BocGUuY29tPG1haWx0bzpuaWNrbGUud2FuZ0BocGUuY29tPj4NCj4gPiA+IFN1YmplY3Q6IFtQ QVRDSCB2M10gTWRlTW9kdWxlUGtnL0xpYnJhcnk6IEFkZCBIaWlHZXRTdHJpbmdFeCB0bw0KPiA+ ID4gVWVmaUhpaUxpYiBmb3IgRURLMiBSZWRmaXNoDQo+ID4gPg0KPiA+ID4gQWRkIEhpaUdldFN0 cmluZ0V4IGFuZCBsZXZlcmFnZWQgYnkgSGlpR2V0U3RyaW5nIGZ1bmN0aW9uIHRvIHN1cHBvcnQN Cj4gPiA+IGdldHRpbmcgc3RyaW5nIHdpdGggdGhlIGJlc3QgbGFuZ3VhZ2UgaW4gb3B0aW9uYWxs eS4gVGhpcyBhdm9pZHMgdGhlDQo+ID4gPiBzdHJpbmcgaW4geC11ZWZpIGxhbmd1YWdlIGlzIG1p c2xlZCB0byB0aGUgbGFuZ3VhZ2UgZGVmaW5lZCBieQ0KPiA+ID4gIlBsYXRmb3JtTGFuZyIgb3Ig dGhlICJTdXBwb3J0ZWQgTGFuZ3VhZ2VzIi4gVGhpcyBjaGFuZ2UgaXMgaW50cm9kdWNlZA0KPiA+ ID4gdG8gc3VwcG9ydCB4LXVlZmkga2V5d29yZCBsYW5ndWFnZSBmb3IgY29uZmlndXJpbmcgQklP UyBzZXR0aW5nLg0KPiA+ID4NCj4gPiA+IFNpZ25lZC1vZmYtYnk6IEppYXhpbiBXdSA8amlheGlu Lnd1QGludGVsLmNvbTxtYWlsdG86amlheGluLnd1QGludGVsLmNvbT4+DQo+ID4gPiBTaWduZWQt b2ZmLWJ5OiBTaXl1YW4gRnUgPHNpeXVhbi5mdUBpbnRlbC5jb208bWFpbHRvOnNpeXVhbi5mdUBp bnRlbC5jb20+Pg0KPiA+ID4gU2lnbmVkLW9mZi1ieTogRmFuIFdhbmcgPGZhbi53YW5nQGludGVs LmNvbTxtYWlsdG86ZmFuLndhbmdAaW50ZWwuY29tPj4NCj4gPiA+IFNpZ25lZC1vZmYtYnk6IEFi bmVyIENoYW5nIDxhYm5lci5jaGFuZ0BocGUuY29tPG1haWx0bzphYm5lci5jaGFuZ0BocGUuY29t Pj4NCj4gPiA+IENjOiBEYW5kYW4gQmkgPGRhbmRhbi5iaUBpbnRlbC5jb208bWFpbHRvOmRhbmRh bi5iaUBpbnRlbC5jb20+Pg0KPiA+ID4gQ2M6IEVyaWMgRG9uZyA8ZXJpYy5kb25nQGludGVsLmNv bTxtYWlsdG86ZXJpYy5kb25nQGludGVsLmNvbT4+DQo+ID4gPiBDYzogTmlja2xlIFdhbmcgPG5p Y2tsZS53YW5nQGhwZS5jb208bWFpbHRvOm5pY2tsZS53YW5nQGhwZS5jb20+Pg0KPiA+ID4gLS0t DQo+ID4gPiAgTWRlTW9kdWxlUGtnL0luY2x1ZGUvTGlicmFyeS9IaWlMaWIuaCAgICAgICB8IDYw ICsrKysrKysrKystLS0NCj4gPiA+ICBNZGVNb2R1bGVQa2cvTGlicmFyeS9VZWZpSGlpTGliL0hp aVN0cmluZy5jIHwgOTgNCj4gPiA+ICsrKysrKysrKysrKysrKy0tLS0tLQ0KPiA+ID4gIDIgZmls ZXMgY2hhbmdlZCwgMTE5IGluc2VydGlvbnMoKyksIDM5IGRlbGV0aW9ucygtKQ0KPiA+ID4NCj4g PiA+IGRpZmYgLS1naXQgYS9NZGVNb2R1bGVQa2cvSW5jbHVkZS9MaWJyYXJ5L0hpaUxpYi5oDQo+ ID4gPiBiL01kZU1vZHVsZVBrZy9JbmNsdWRlL0xpYnJhcnkvSGlpTGliLmgNCj4gPiA+IGluZGV4 IGM0NzVjYjc0YTEuLmNkOTAyN2ZlZmQgMTAwNjQ0DQo+ID4gPiAtLS0gYS9NZGVNb2R1bGVQa2cv SW5jbHVkZS9MaWJyYXJ5L0hpaUxpYi5oDQo+ID4gPiArKysgYi9NZGVNb2R1bGVQa2cvSW5jbHVk ZS9MaWJyYXJ5L0hpaUxpYi5oDQo+ID4gPiBAQCAtMSw3ICsxLDggQEANCj4gPiA+ICAvKiogQGZp bGUNCj4gPiA+ICAgIFB1YmxpYyBpbmNsdWRlIGZpbGUgZm9yIHRoZSBISUkgTGlicmFyeQ0KPiA+ ID4NCj4gPiA+IC1Db3B5cmlnaHQgKGMpIDIwMDcgLSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4g QWxsIHJpZ2h0cw0KPiA+ID4gcmVzZXJ2ZWQuPEJSPg0KPiA+ID4gK0NvcHlyaWdodCAoYykgMjAw NyAtIDIwMjEsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzDQo+ID4gPiArcmVzZXJ2ZWQu PEJSPg0KPiA+ID4gKyhDKSBDb3B5cmlnaHQgMjAyMSBIZXdsZXR0IFBhY2thcmQgRW50ZXJwcmlz ZSBEZXZlbG9wbWVudCBMUDxCUj4NCj4gPiA+ICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNE LTItQ2xhdXNlLVBhdGVudA0KPiA+ID4NCj4gPiA+ICAqKi8NCj4gPiA+IEBAIC0xMjMsMTYgKzEy NCw4IEBAIEhpaVNldFN0cmluZyAoDQo+ID4gPiAgOw0KPiA+ID4NCj4gPiA+ICAvKioNCj4gPiA+ IC0gIFJldHJpZXZlcyBhIHN0cmluZyBmcm9tIGEgc3RyaW5nIHBhY2thZ2UgaW4gYSBzcGVjaWZp YyBsYW5ndWFnZS4NCj4gPiA+IElmIHRoZSBsYW5ndWFnZQ0KPiA+ID4gLSAgaXMgbm90IHNwZWNp ZmllZCwgdGhlbiBhIHN0cmluZyBmcm9tIGEgc3RyaW5nIHBhY2thZ2UgaW4gdGhlDQo+ID4gPiBj dXJyZW50IHBsYXRmb3JtDQo+ID4gPiAtICBsYW5ndWFnZSBpcyByZXRyaWV2ZWQuICBJZiB0aGUg c3RyaW5nIGNhbm5vdCBiZSByZXRyaWV2ZWQgdXNpbmcgdGhlDQo+ID4gPiBzcGVjaWZpZWQNCj4g PiA+IC0gIGxhbmd1YWdlIG9yIHRoZSBjdXJyZW50IHBsYXRmb3JtIGxhbmd1YWdlLCB0aGVuIHRo ZSBzdHJpbmcgaXMNCj4gPiA+IHJldHJpZXZlZCBmcm9tDQo+ID4gPiAtICB0aGUgc3RyaW5nIHBh Y2thZ2UgaW4gdGhlIGZpcnN0IGxhbmd1YWdlIHRoZSBzdHJpbmcgcGFja2FnZQ0KPiA+ID4gc3Vw cG9ydHMuICBUaGUNCj4gPiA+IC0gIHJldHVybmVkIHN0cmluZyBpcyBhbGxvY2F0ZWQgdXNpbmcg QWxsb2NhdGVQb29sKCkuICBUaGUgY2FsbGVyIGlzDQo+ID4gPiByZXNwb25zaWJsZQ0KPiA+ID4g LSAgZm9yIGZyZWVpbmcgdGhlIGFsbG9jYXRlZCBidWZmZXIgdXNpbmcgRnJlZVBvb2woKS4NCj4g PiA+IC0NCj4gPiA+IC0gIElmIEhpaUhhbmRsZSBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiA+ ID4gLSAgSWYgU3RyaW5nSWQgaXMgMCwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ICsgIFJldHJpZXZl cyBhIHN0cmluZyBmcm9tIGEgc3RyaW5nIHBhY2thZ2UgaW4gYSBzcGVjaWZpYyBsYW5ndWFnZQ0K PiA+ID4gKyBzcGVjaWZpZWQgaW4gTGFuZ3VhZ2UgIG9yIGluIHRoZSBiZXN0IGxhbmFndWFnZS4g U2VlIEhpaUdldFN0cmluZ0V4DQo+ID4gPiArICgpIGZvcg0KPiA+ID4gdGhlIGRldGFpbHMuDQo+ ID4gPg0KPiA+ID4gICAgQHBhcmFtW2luXSAgSGlpSGFuZGxlICBBIGhhbmRsZSB0aGF0IHdhcyBw cmV2aW91c2x5IHJlZ2lzdGVyZWQgaW4NCj4gPiA+IHRoZSBISUkgRGF0YWJhc2UuDQo+ID4gPiAg ICBAcGFyYW1baW5dICBTdHJpbmdJZCAgIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBzdHJpbmcgdG8g cmV0cmlldmVkDQpmcm9tDQo+IHRoZQ0KPiA+ID4gc3RyaW5nDQo+ID4gPiBAQCAtMTUyLDggKzE0 NSw0OSBAQCBIaWlHZXRTdHJpbmcgKA0KPiA+ID4gICAgSU4gRUZJX0hJSV9IQU5ETEUgIEhpaUhh bmRsZSwNCj4gPiA+ICAgIElOIEVGSV9TVFJJTkdfSUQgICBTdHJpbmdJZCwNCj4gPiA+ICAgIElO IENPTlNUIENIQVI4ICAgICAqTGFuZ3VhZ2UgIE9QVElPTkFMDQo+ID4gPiAtICApDQo+ID4gPiAt Ow0KPiA+ID4gKyAgKTsNCj4gPiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsgIFJldHJpZXZlcyBh IHN0cmluZyBmcm9tIGEgc3RyaW5nIHBhY2thZ2UgaW4gYSBzcGVjaWZpYyBsYW5ndWFnZSBvcg0K PiA+ID4gK2luIHRoZSBiZXN0DQo+ID4gPiArICBsYW5ndWFnZSBhdCBkaXNjcmV0aW9uIG9mIHRo aXMgZnVuY3Rpb24gYWNjb3JkaW5nIHRvIHRoZSBwcmlvcml0eQ0Kb2YNCj4gPiBsYW5ndWFnZXMu DQo+ID4gPiArICBUcnlCZXN0TGFuZ3VhZ2UgaXMgdXNlZCB0byBnZXQgdGhlIHN0cmluZyBpbiB0 aGUgYmVzdCBsYW5ndWFnZSBvcg0KPiA+ID4gK2luIHRoZSBsYW5ndWFnZQ0KPiA+ID4gKyAgc3Bl Y2lmaWVkIGluIExhbmd1YWdlIHBhcmFtZXRlci4gVGhlIGJlaGF2aW9yIGlzLA0KPiA+ID4gKyAg SWYgVHJ5QmVzdExhbmd1YWdlIGlzIFRSVUUsIHRoaXMgZnVuY3Rpb24gbG9va3MgZm9yIHRoZSBi ZXN0DQo+ID4gPiArbGFuZ3VhZ2UgZm9yDQo+ID4gPiB0aGUgc3RyaW5nLg0KPiA+ID4gKyAgIC0g SWYgdGhlIHN0cmluZyBjYW4gbm90IGJlIHJldHJpZXZlZCB1c2luZyB0aGUgc3BlY2lmaWVkIGxh bmd1YWdlDQo+ID4gPiArIG9yIHRoZQ0KPiA+ID4gY3VycmVudA0KPiA+ID4gKyAgICAgcGxhdGZv cm0gbGFuZ3VhZ2UsIHRoZW4gdGhlIHN0cmluZyBpcyByZXRyaWV2ZWQgZnJvbSB0aGUgc3RyaW5n DQo+ID4gPiArIHBhY2thZ2UgaW4NCj4gPiA+IHRoZQ0KPiA+ID4gKyAgICAgZmlyc3QgbGFuZ3Vh Z2UgdGhlIHN0cmluZyBwYWNrYWdlIHN1cHBvcnRzLg0KPiA+ID4gKyAgSWYgVHJ5QmVzdExhbmd1 YWdlIGlzIEZBTFNFLCBMYW5ndWFnZSBtdXN0IGJlIHNwZWNpZmllZCBmb3INCj4gPiA+ICsgcmV0 cmlldmluZyB0aGUNCj4gPiA+IHN0cmluZy4NCj4gPiA+ICsNCj4gPiA+ICsgIFRoZSByZXR1cm5l ZCBzdHJpbmcgaXMgYWxsb2NhdGVkIHVzaW5nIEFsbG9jYXRlUG9vbCgpLiAgVGhlIGNhbGxlcg0K PiA+ID4gKyBpcyByZXNwb25zaWJsZSAgZm9yIGZyZWVpbmcgdGhlIGFsbG9jYXRlZCBidWZmZXIg dXNpbmcgRnJlZVBvb2woKS4NCj4gPiA+ICsNCj4gPiA+ICsgIElmIEhpaUhhbmRsZSBpcyBOVUxM LCB0aGVuIEFTU0VSVCgpLg0KPiA+ID4gKyAgSWYgU3RyaW5nSWQgaXMgMCwgdGhlbiBBU1NFVC4N Cj4gPiA+ICsgIElmIFRyeUJlc3RMYW5ndWFnZSBpcyBGQUxFIGFuZCBMYW5ndWFnZSBpcyBOVUxM LCB0aGVuIEFTU0VSVCgpLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHBhcmFtW2luXSAgSGlpSGFuZGxl ICAgICAgICAgQSBoYW5kbGUgdGhhdCB3YXMgcHJldmlvdXNseQ0KPiByZWdpc3RlcmVkIGluIHRo ZQ0KPiA+ID4gSElJIERhdGFiYXNlLg0KPiA+ID4gKyAgQHBhcmFtW2luXSAgU3RyaW5nSWQgICAg ICAgICAgVGhlIGlkZW50aWZpZXIgb2YgdGhlIHN0cmluZyB0bw0KPiByZXRyaWV2ZWQgZnJvbQ0K PiA+IHRoZQ0KPiA+ID4gc3RyaW5nDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwYWNrYWdlIGFzc29jaWF0ZWQgd2l0aA0KPiBIaWlIYW5kbGUuDQo+ID4gPiArICBAcGFy YW1baW5dICBMYW5ndWFnZSAgICAgICAgICBUaGUgbGFuZ3VhZ2Ugb2YgdGhlIHN0cmluZyB0bw0K PiByZXRyaWV2ZS4gIElmIHRoaXMNCj4gPiA+IHBhcmFtZXRlcg0KPiA+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaXMgTlVMTCwgdGhlbiB0aGUgY3VycmVudA0KPiBwbGF0Zm9y bSBsYW5ndWFnZSBpcyB1c2VkLiAgVGhlDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBmb3JtYXQgb2YgTGFuZ3VhZ2UgbXVzdCBmb2xsb3cNCj4gdGhlDQo+ID4gPiArIGxh bmd1YWdlIGZvcm1hdA0KPiA+ID4gYXNzdW1lZA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdGhlIEhJSSBEYXRhYmFzZS4NCj4gPiA+ICsgIEBwYXJhbVtpbl0gIFRyeUJl c3RMYW5ndWFnZSAgIElmIFRSVUUsIHRyeSB0byBnZXQgdGhlIGJlc3QNCj4gbWF0Y2hpbmcNCj4g PiA+IGxhbmd1YWdlIGZyb20gYWxsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdXBwb3J0ZWQgbGFuZ3VhZ2VzLklmIEZBTFNFLA0KPiB0aGUNCj4gPiA+ICsgTGFuZ3Vh Z2UgbXVzdCBiZQ0KPiA+ID4gYXNzaWduZWQNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGZvciB0aGUgU3RyaW5nSUQuDQo+ID4gPiArDQo+ID4gPiArICBAcmV0dmFsIE5V TEwgICBUaGUgc3RyaW5nIHNwZWNpZmllZCBieSBTdHJpbmdJZCBpcyBub3QgcHJlc2VudCBpbg0K dGhlDQo+IHN0cmluZw0KPiA+ID4gcGFja2FnZS4NCj4gPiA+ICsgIEByZXR2YWwgT3RoZXIgIFRo ZSBzdHJpbmcgd2FzIHJldHVybmVkLg0KPiA+ID4gKw0KPiA+ID4gKyoqLw0KPiA+ID4gK0VGSV9T VFJJTkcNCj4gPiA+ICtFRklBUEkNCj4gPiA+ICtIaWlHZXRTdHJpbmdFeCAoDQo+ID4gPiArICBJ TiBFRklfSElJX0hBTkRMRSAgSGlpSGFuZGxlLA0KPiA+ID4gKyAgSU4gRUZJX1NUUklOR19JRCAg IFN0cmluZ0lkLA0KPiA+ID4gKyAgSU4gQ09OU1QgQ0hBUjggICAgICpMYW5ndWFnZSAgT1BUSU9O QUwsDQo+ID4gPiArICBJTiBCT09MRUFOICAgICAgICAgVHJ5QmVzdExhbmd1YWdlDQo+ID4gPiAr ICApOw0KPiA+ID4NCj4gPiA+ICAvKioNCj4gPiA+ICAgIFJldHJpZXZlcyBhIHN0cmluZyBmcm9t IGEgc3RyaW5nIHBhY2thZ2UgbmFtZWQgYnkgR1VJRCwgaW4gdGhlDQo+ID4gPiBzcGVjaWZpZWQg bGFuZ3VhZ2UuDQo+ID4gPiBkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtnL0xpYnJhcnkvVWVmaUhp aUxpYi9IaWlTdHJpbmcuYw0KPiA+ID4gYi9NZGVNb2R1bGVQa2cvTGlicmFyeS9VZWZpSGlpTGli L0hpaVN0cmluZy5jDQo+ID4gPiBpbmRleCA5NTIyOWY4YThjLi5hOWExMWFlZjk4IDEwMDY0NA0K PiA+ID4gLS0tIGEvTWRlTW9kdWxlUGtnL0xpYnJhcnkvVWVmaUhpaUxpYi9IaWlTdHJpbmcuYw0K PiA+ID4gKysrIGIvTWRlTW9kdWxlUGtnL0xpYnJhcnkvVWVmaUhpaUxpYi9IaWlTdHJpbmcuYw0K PiA+ID4gQEAgLTEsNyArMSw4IEBADQo+ID4gPiAgLyoqIEBmaWxlDQo+ID4gPiAgICBISUkgTGli cmFyeSBpbXBsZW1lbnRhdGlvbiB0aGF0IHVzZXMgRFhFIHByb3RvY29scyBhbmQgc2VydmljZXMu DQo+ID4gPg0KPiA+ID4gLSAgQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAxOCwgSW50ZWwgQ29ycG9y YXRpb24uIEFsbCByaWdodHMNCj4gPiA+IHJlc2VydmVkLjxCUj4NCj4gPiA+ICsgIENvcHlyaWdo dCAoYykgMjAwNiAtIDIwMjEsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzDQo+ID4gPiAr IHJlc2VydmVkLjxCUj4NCj4gPiA+ICsgKEMpIENvcHlyaWdodCAyMDIxIEhld2xldHQgUGFja2Fy ZCBFbnRlcnByaXNlIERldmVsb3BtZW50IExQPEJSPg0KPiA+ID4gICAgU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gPiA+DQo+ID4gPiAgKiovDQo+ID4gPiBA QCAtMTkwLDE2ICsxOTEsOCBAQCBIaWlHZXRQYWNrYWdlU3RyaW5nICggIH0NCj4gPiA+DQo+ID4g PiAgLyoqDQo+ID4gPiAtICBSZXRyaWV2ZXMgYSBzdHJpbmcgZnJvbSBhIHN0cmluZyBwYWNrYWdl IGluIGEgc3BlY2lmaWMgbGFuZ3VhZ2UuDQo+ID4gPiBJZiB0aGUgbGFuZ3VhZ2UNCj4gPiA+IC0g IGlzIG5vdCBzcGVjaWZpZWQsIHRoZW4gYSBzdHJpbmcgZnJvbSBhIHN0cmluZyBwYWNrYWdlIGlu IHRoZQ0KPiA+ID4gY3VycmVudCBwbGF0Zm9ybQ0KPiA+ID4gLSAgbGFuZ3VhZ2UgaXMgcmV0cmll dmVkLiAgSWYgdGhlIHN0cmluZyBjYW4gbm90IGJlIHJldHJpZXZlZCB1c2luZw0KPiA+ID4gdGhl IHNwZWNpZmllZA0KPiA+ID4gLSAgbGFuZ3VhZ2Ugb3IgdGhlIGN1cnJlbnQgcGxhdGZvcm0gbGFu Z3VhZ2UsIHRoZW4gdGhlIHN0cmluZyBpcw0KPiA+ID4gcmV0cmlldmVkIGZyb20NCj4gPiA+IC0g IHRoZSBzdHJpbmcgcGFja2FnZSBpbiB0aGUgZmlyc3QgbGFuZ3VhZ2UgdGhlIHN0cmluZyBwYWNr YWdlDQo+ID4gPiBzdXBwb3J0cy4gIFRoZQ0KPiA+ID4gLSAgcmV0dXJuZWQgc3RyaW5nIGlzIGFs bG9jYXRlZCB1c2luZyBBbGxvY2F0ZVBvb2woKS4gIFRoZSBjYWxsZXIgaXMNCj4gPiA+IHJlc3Bv bnNpYmxlDQo+ID4gPiAtICBmb3IgZnJlZWluZyB0aGUgYWxsb2NhdGVkIGJ1ZmZlciB1c2luZyBG cmVlUG9vbCgpLg0KPiA+ID4gLQ0KPiA+ID4gLSAgSWYgSGlpSGFuZGxlIGlzIE5VTEwsIHRoZW4g QVNTRVJUKCkuDQo+ID4gPiAtICBJZiBTdHJpbmdJZCBpcyAwLCB0aGVuIEFTU0VULg0KPiA+ID4g KyAgUmV0cmlldmVzIGEgc3RyaW5nIGZyb20gYSBzdHJpbmcgcGFja2FnZSBpbiBhIHNwZWNpZmlj IGxhbmd1YWdlDQo+ID4gPiArIHNwZWNpZmllZCBpbiBMYW5ndWFnZSAgb3IgaW4gdGhlIGJlc3Qg bGFuYWd1YWdlLiBTZWUgSGlpR2V0U3RyaW5nRXgNCj4gPiA+ICsgKCkgZm9yDQo+ID4gPiB0aGUg ZGV0YWlscy4NCj4gPiA+DQo+ID4gPiAgICBAcGFyYW1baW5dICBIaWlIYW5kbGUgIEEgaGFuZGxl IHRoYXQgd2FzIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBpbg0KPiA+ID4gdGhlIEhJSSBEYXRhYmFz ZS4NCj4gPiA+ICAgIEBwYXJhbVtpbl0gIFN0cmluZ0lkICAgVGhlIGlkZW50aWZpZXIgb2YgdGhl IHN0cmluZyB0byByZXRyaWV2ZWQNCmZyb20NCj4gdGhlDQo+ID4gPiBzdHJpbmcNCj4gPiA+IEBA IC0yMjAsNiArMjEzLDUxIEBAIEhpaUdldFN0cmluZyAoDQo+ID4gPiAgICBJTiBFRklfU1RSSU5H X0lEICAgU3RyaW5nSWQsDQo+ID4gPiAgICBJTiBDT05TVCBDSEFSOCAgICAgKkxhbmd1YWdlICBP UFRJT05BTA0KPiA+ID4gICAgKQ0KPiA+ID4gK3sNCj4gPiA+ICsgIHJldHVybiBIaWlHZXRTdHJp bmdFeCAoSGlpSGFuZGxlLCBTdHJpbmdJZCwgTGFuZ3VhZ2UsIFRSVUUpOyB9DQo+ID4gPiArDQo+ ID4gPiArLyoqDQo+ID4gPiArICBSZXRyaWV2ZXMgYSBzdHJpbmcgZnJvbSBhIHN0cmluZyBwYWNr YWdlIGluIGEgc3BlY2lmaWMgbGFuZ3VhZ2Ugb3INCj4gPiA+ICtpbiB0aGUgYmVzdA0KPiA+ID4g KyAgbGFuZ3VhZ2UgYXQgZGlzY3JldGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGFjY29yZGluZyB0byB0 aGUgcHJpb3JpdHkNCm9mDQo+ID4gbGFuZ3VhZ2VzLg0KPiA+ID4gKyAgVHJ5QmVzdExhbmd1YWdl IGlzIHVzZWQgdG8gZ2V0IHRoZSBzdHJpbmcgaW4gdGhlIGJlc3QgbGFuZ3VhZ2Ugb3INCj4gPiA+ ICtpbiB0aGUgbGFuZ3VhZ2UNCj4gPiA+ICsgIHNwZWNpZmllZCBpbiBMYW5ndWFnZSBwYXJhbWV0 ZXIuIFRoZSBiZWhhdmlvciBpcywNCj4gPiA+ICsgIElmIFRyeUJlc3RMYW5ndWFnZSBpcyBUUlVF LCB0aGlzIGZ1bmN0aW9uIGxvb2tzIGZvciB0aGUgYmVzdA0KPiA+ID4gK2xhbmd1YWdlIGZvcg0K PiA+ID4gdGhlIHN0cmluZy4NCj4gPiA+ICsgICAtIElmIHRoZSBzdHJpbmcgY2FuIG5vdCBiZSBy ZXRyaWV2ZWQgdXNpbmcgdGhlIHNwZWNpZmllZCBsYW5ndWFnZQ0KPiA+ID4gKyBvciB0aGUNCj4g PiA+IGN1cnJlbnQNCj4gPiA+ICsgICAgIHBsYXRmb3JtIGxhbmd1YWdlLCB0aGVuIHRoZSBzdHJp bmcgaXMgcmV0cmlldmVkIGZyb20gdGhlIHN0cmluZw0KPiA+ID4gKyBwYWNrYWdlIGluDQo+ID4g PiB0aGUNCj4gPiA+ICsgICAgIGZpcnN0IGxhbmd1YWdlIHRoZSBzdHJpbmcgcGFja2FnZSBzdXBw b3J0cy4NCj4gPiA+ICsgIElmIFRyeUJlc3RMYW5ndWFnZSBpcyBGQUxTRSwgTGFuZ3VhZ2UgbXVz dCBiZSBzcGVjaWZpZWQgZm9yDQo+ID4gPiArIHJldHJpZXZpbmcgdGhlDQo+ID4gPiBzdHJpbmcu DQo+ID4gPiArDQo+ID4gPiArICBUaGUgcmV0dXJuZWQgc3RyaW5nIGlzIGFsbG9jYXRlZCB1c2lu ZyBBbGxvY2F0ZVBvb2woKS4gIFRoZSBjYWxsZXINCj4gPiA+ICsgaXMgcmVzcG9uc2libGUgIGZv ciBmcmVlaW5nIHRoZSBhbGxvY2F0ZWQgYnVmZmVyIHVzaW5nIEZyZWVQb29sKCkuDQo+ID4gPiAr DQo+ID4gPiArICBJZiBIaWlIYW5kbGUgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ICsg IElmIFN0cmluZ0lkIGlzIDAsIHRoZW4gQVNTRVQuDQo+ID4gPiArICBJZiBUcnlCZXN0TGFuZ3Vh Z2UgaXMgRkFMRSBhbmQgTGFuZ3VhZ2UgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ICsN Cj4gPiA+ICsgIEBwYXJhbVtpbl0gIEhpaUhhbmRsZSAgICAgICAgIEEgaGFuZGxlIHRoYXQgd2Fz IHByZXZpb3VzbHkNCj4gcmVnaXN0ZXJlZCBpbiB0aGUNCj4gPiA+IEhJSSBEYXRhYmFzZS4NCj4g PiA+ICsgIEBwYXJhbVtpbl0gIFN0cmluZ0lkICAgICAgICAgIFRoZSBpZGVudGlmaWVyIG9mIHRo ZSBzdHJpbmcgdG8NCj4gcmV0cmlldmVkIGZyb20NCj4gPiB0aGUNCj4gPiA+IHN0cmluZw0KPiA+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBhc3NvY2lhdGVkIHdp dGgNCj4gSGlpSGFuZGxlLg0KPiA+ID4gKyAgQHBhcmFtW2luXSAgTGFuZ3VhZ2UgICAgICAgICAg VGhlIGxhbmd1YWdlIG9mIHRoZSBzdHJpbmcgdG8NCj4gcmV0cmlldmUuICBJZiB0aGlzDQo+ID4g PiBwYXJhbWV0ZXINCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIE5V TEwsIHRoZW4gdGhlIGN1cnJlbnQNCj4gcGxhdGZvcm0gbGFuZ3VhZ2UgaXMgdXNlZC4gIFRoZQ0K PiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0IG9mIExhbmd1YWdl IG11c3QgZm9sbG93DQo+IHRoZQ0KPiA+ID4gKyBsYW5ndWFnZSBmb3JtYXQNCj4gPiA+IGFzc3Vt ZWQNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBISUkgRGF0YWJh c2UuDQo+ID4gPiArICBAcGFyYW1baW5dICBUcnlCZXN0TGFuZ3VhZ2UgICBJZiBUUlVFLCB0cnkg dG8gZ2V0IHRoZSBiZXN0DQo+IG1hdGNoaW5nDQo+ID4gPiBsYW5ndWFnZSBmcm9tIGFsbA0KPiA+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkIGxhbmd1YWdlcy5J ZiBGQUxTRSwNCj4gdGhlDQo+ID4gPiArIExhbmd1YWdlIG11c3QgYmUNCj4gPiA+IGFzc2lnbmVk DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIFN0cmluZ0lE Lg0KPiA+ID4gKw0KPiA+ID4gKyAgQHJldHZhbCBOVUxMICAgVGhlIHN0cmluZyBzcGVjaWZpZWQg YnkgU3RyaW5nSWQgaXMgbm90IHByZXNlbnQgaW4NCnRoZQ0KPiBzdHJpbmcNCj4gPiA+IHBhY2th Z2UuDQo+ID4gPiArICBAcmV0dmFsIE90aGVyICBUaGUgc3RyaW5nIHdhcyByZXR1cm5lZC4NCj4g PiA+ICsNCj4gPiA+ICsqKi8NCj4gPiA+ICtFRklfU1RSSU5HDQo+ID4gPiArRUZJQVBJDQo+ID4g PiArSGlpR2V0U3RyaW5nRXggKA0KPiA+ID4gKyAgSU4gRUZJX0hJSV9IQU5ETEUgIEhpaUhhbmRs ZSwNCj4gPiA+ICsgIElOIEVGSV9TVFJJTkdfSUQgICBTdHJpbmdJZCwNCj4gPiA+ICsgIElOIENP TlNUIENIQVI4ICAgICAqTGFuZ3VhZ2UgIE9QVElPTkFMLA0KPiA+ID4gKyAgSU4gQk9PTEVBTiAg ICAgICAgIFRyeUJlc3RMYW5ndWFnZQ0KPiA+ID4gKyAgKQ0KPiA+ID4gIHsNCj4gPiA+ICAgIEVG SV9TVEFUVVMgIFN0YXR1czsNCj4gPiA+ICAgIFVJTlROICAgICAgIFN0cmluZ1NpemU7DQo+ID4g PiBAQCAtMjMxLDcgKzI2OSwxMCBAQCBIaWlHZXRTdHJpbmcgKA0KPiA+ID4NCj4gPiA+ICAgIEFT U0VSVCAoSGlpSGFuZGxlICE9IE5VTEwpOw0KPiA+ID4gICAgQVNTRVJUIChTdHJpbmdJZCAhPSAw KTsNCj4gPiA+IC0NCj4gPiA+ICsgIC8vDQo+ID4gPiArICAvLyBMYW5ndWFnZSBtdXN0IGJlIHNw ZWNpZmllZCBpZiBUcnlCZXN0TGFuZ3VhZ2UgPSBGQUxTRS4NCj4gPiA+ICsgIC8vDQo+ID4gPiAr ICBBU1NFUlQgKCEoVHJ5QmVzdExhbmd1YWdlID09IEZBTFNFICYmIExhbmd1YWdlID09IE5VTEwp KTsNCj4gPiBPbmUgbWlub3IgaGVyZSwgaW4gb3JkZXIgdG8gZm9sbG93aW5nIHRoZSBjb2Rpbmcg c3R5bGUsIHRoaXMgc2VlbXMNCnNob3VsZCBiZQ0KPiA+IEFTU0VSVCAoISghVHJ5QmVzdExhbmd1 YWdlICYmIExhbmd1YWdlID09IE5VTEwpKTsgUGxlYXNlIGhlbHAgZG91YmxlDQo+ID4gY2hlY2su DQo+ID4NCj4gPiA+ICAgIC8vDQo+ID4gPiAgICAvLyBJbml0aWFsaXplIGFsbCBhbGxvY2F0ZWQg YnVmZmVycyB0byBOVUxMDQo+ID4gPiAgICAvLw0KPiA+ID4gQEAgLTI2MSwyMSArMzAyLDI2IEBA IEhpaUdldFN0cmluZyAoDQo+ID4gPiAgICAgIExhbmd1YWdlID0gIiI7DQo+ID4gPiAgICB9DQo+ ID4gPg0KPiA+ID4gLSAgLy8NCj4gPiA+IC0gIC8vIEdldCB0aGUgYmVzdCBtYXRjaGluZyBsYW5n dWFnZSBmcm9tIFN1cHBvcnRlZExhbmd1YWdlcw0KPiA+ID4gLSAgLy8NCj4gPiA+IC0gIEJlc3RM YW5ndWFnZSA9IEdldEJlc3RMYW5ndWFnZSAoDQo+ID4gPiAtICAgICAgICAgICAgICAgICAgIFN1 cHBvcnRlZExhbmd1YWdlcywNCj4gPiA+IC0gICAgICAgICAgICAgICAgICAgRkFMU0UsDQo+IC8v IFJGQyA0NjQ2IG1vZGUNCj4gPiA+IC0gICAgICAgICAgICAgICAgICAgTGFuZ3VhZ2UsDQo+IC8v IEhpZ2hlc3QgcHJpb3JpdHkNCj4gPiA+IC0gICAgICAgICAgICAgICAgICAgUGxhdGZvcm1MYW5n dWFnZSAhPSBOVUxMID8gUGxhdGZvcm1MYW5ndWFnZSA6DQo+ICIiLCAgLy8gTmV4dA0KPiA+ID4g aGlnaGVzdCBwcmlvcml0eQ0KPiA+ID4gLSAgICAgICAgICAgICAgICAgICBTdXBwb3J0ZWRMYW5n dWFnZXMsDQo+IC8vIExvd2VzdCBwcmlvcml0eQ0KPiA+ID4gLSAgICAgICAgICAgICAgICAgICBO VUxMDQo+ID4gPiAtICAgICAgICAgICAgICAgICAgICk7DQo+ID4gPiAtICBpZiAoQmVzdExhbmd1 YWdlID09IE5VTEwpIHsNCj4gPiA+IC0gICAgZ290byBFcnJvcjsNCj4gPiA+ICsgIGlmIChUcnlC ZXN0TGFuZ3VhZ2UpIHsNCj4gPiA+ICsgICAgLy8NCj4gPiA+ICsgICAgLy8gR2V0IHRoZSBiZXN0 IG1hdGNoaW5nIGxhbmd1YWdlIGZyb20gU3VwcG9ydGVkTGFuZ3VhZ2VzDQo+ID4gPiArICAgIC8v DQo+ID4gPiArICAgIEJlc3RMYW5ndWFnZSA9IEdldEJlc3RMYW5ndWFnZSAoDQo+ID4gPiArICAg ICAgICAgICAgICAgICAgICAgU3VwcG9ydGVkTGFuZ3VhZ2VzLA0KPiA+ID4gKyAgICAgICAgICAg ICAgICAgICAgIEZBTFNFLA0KPiAvLyBSRkMgNDY0NiBtb2RlDQo+ID4gPiArICAgICAgICAgICAg ICAgICAgICAgTGFuZ3VhZ2UsDQo+IC8vIEhpZ2hlc3QgcHJpb3JpdHkNCj4gPiA+ICsgICAgICAg ICAgICAgICAgICAgICBQbGF0Zm9ybUxhbmd1YWdlICE9IE5VTEwgPw0KPiBQbGF0Zm9ybUxhbmd1 YWdlIDoNCj4gPiA+ICsgIiIsICAvLyBOZXh0DQo+ID4gPiBoaWdoZXN0IHByaW9yaXR5DQo+ID4g PiArICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydGVkTGFuZ3VhZ2VzLA0KPiAvLyBMb3dlc3Qg cHJpb3JpdHkNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICBOVUxMDQo+ID4gPiArICAgICAg ICAgICAgICAgICAgICAgKTsNCj4gPiA+ICsgICAgaWYgKEJlc3RMYW5ndWFnZSA9PSBOVUxMKSB7 DQo+ID4gPiArICAgICAgZ290byBFcnJvcjsNCj4gPiA+ICsgICAgfQ0KPiA+ID4gKyAgfSBlbHNl IHsNCj4gPiA+ICsgICAgQmVzdExhbmd1YWdlID0gKENIQVI4ICopIExhbmd1YWdlOw0KPiA+ID4g ICAgfQ0KPiA+ID4NCj4gPiA+ICsNCj4gPiA+ICAgIC8vDQo+ID4gPiAgICAvLyBSZXRyaWV2ZSB0 aGUgc2l6ZSBvZiB0aGUgc3RyaW5nIGluIHRoZSBzdHJpbmcgcGFja2FnZSBmb3IgdGhlDQo+ID4g QmVzdExhbmd1YWdlDQo+ID4gPiAgICAvLw0KPiA+ID4gQEAgLTMzNyw3ICszODMsNyBAQCBFcnJv cjoNCj4gPiA+ICAgIGlmIChQbGF0Zm9ybUxhbmd1YWdlICE9IE5VTEwpIHsNCj4gPiA+ICAgICAg RnJlZVBvb2wgKFBsYXRmb3JtTGFuZ3VhZ2UpOw0KPiA+ID4gICAgfQ0KPiA+ID4gLSAgaWYgKEJl c3RMYW5ndWFnZSAhPSBOVUxMKSB7DQo+ID4gPiArICBpZiAoVHJ5QmVzdExhbmd1YWdlICYmIEJl c3RMYW5ndWFnZSAhPSBOVUxMKSB7DQo+ID4gPiAgICAgIEZyZWVQb29sIChCZXN0TGFuZ3VhZ2Up Ow0KPiA+ID4gICAgfQ0KPiA+ID4NCj4gPiA+IC0tDQo+ID4gPiAyLjE3LjENCj4gPg0KPiA+DQo+ ID4NCj4gPg0KPiA+DQo+DQo+DQo+DQo+DQo+DQoNCg0KDQoNCg0KDQoNCg== --_000_CS1PR8401MB1144F23B18212DA3CDB27EF8FFB29CS1PR8401MB1144_ Content-Type: text/html; charset="gb2312" Content-Transfer-Encoding: quoted-printable

Thanks Li= ming

&nbs= p;

From: gaoliming [mailto:gaoliming@b= yosoft.com.cn]
Sent: Friday, February 5, 2021 11:52 AM
To: devel@edk2.groups.io; Chang, Abner (HPS SW/FW Technologist) <= ;abner.chang@hpe.com>; dandan.bi@intel.com
Cc: 'Dong, Eric' <eric.dong@intel.com>; Wang, Nickle (HPS SW)= <nickle.wang@hpe.com>
Subject:
=BB= = =D8=B8=B4: [edk2-devel] [PATCH v3] MdeModulePkg/Library: Add HiiGe= tStringEx to UefiHiiLib for EDK2 Redfish

 

I am OK for any option. Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn><= /p>

 

Thanks

LIming

=B7=A2=BC=FE=C8=CB: bounce+279= 52+71277+4905953+8761045@groups.io <bounce+27952+71277+4905953+8761045@groups.i= o> =B4=FA=B1=ED Abner Chang
=B7=A2=CB=CD=CA=B1=BC=E4: 2021=C4=EA2=D4=C25=C8=D5 9:51
=CA=D5=BC=FE=C8=CB: devel@edk2.groups.io; Chang, Abner (HPS SW/FW Tech= nologist) <abner.chang@hpe.com>; dandan.bi@intel.com
=B3=AD=CB=CD: 'Dong, Eric' <eric.dong@intel.com>; Wang, Nickle = (HPS SW) <nickle.wang@hpe.com= >
=D6=F7=CC=E2: Re: [edk2-devel] [PATCH v= 3] MdeModulePkg/Library: Add HiiGetStringEx to UefiHiiLib for EDK2 Redfish<= o:p>

 

Hi Liming= ,

Do you ag= ree to keep the one Dandan suggested?

&nbs= p;

Regards,<= o:p>

Abner

&nbs= p;

From: devel@edk2.groups.io [mailto:devel@edk2.groups.io] On Behalf Of Abner Chang
Sent: Thursday, February 4, 2021 4:36 PM
To: devel@edk2.groups.io; dandan.bi@intel.com
Cc: 'Dong, Eric' <eric.do= ng@intel.com>; Wang, Nickle (HPS SW) <nickle.wang@hpe.com>
Subject: Re: [edk2-devel] [PATCH v3] MdeModulePkg/Library: Add HiiG= etStringEx to UefiHiiLib for EDK2 Redfish

 

This looks to me not quite intuitional.

 !(!TryBestLanguage && Language =3D=3D NULL) seems more = straightforward and exactly what we would like to catch.<= /p>

 

Abner 

 

Get Outlook for A= ndroid

 


From: devel@edk2.groups.io <devel@edk2.groups.io> on behalf o= f gaoliming <gaoliming@byoso= ft.com.cn>
Sent: Thursday,= February 4, 2021, 3:13 PM
To: devel@edk2.groups.io; Chang, Abner (HPS SW= /FW Technologist); dandan.bi@intel.c= om
Cc: 'Dong, Eric= '; Wang, Nickle (HPS SW)
Subject: =BB=D8=B8=B4: [edk2-devel] [PATCH v3] MdeModulePkg/Library: Add Hii= GetStringEx to UefiHiiLib for EDK2 Redfish

 

If TryBestLanguage is FALE and Language is NULL, then ASSERT()= .

So, ASSERT statement should be ASSERT (TryBestLanguage || (Language !=3D NULL));

Is this clear?

Thanks
Liming
> -----=D3=CA=BC=FE=D4=AD=BC=FE-----
> =B7=A2=BC=FE=C8=CB: bounce+27952+71110+4905953+87610= 45@groups.io
> <b= ounce+27952+71110+4905953+8761045@groups.io> =B4=FA=B1=ED Abner Chang
> =B7=A2=CB=CD=CA=B1=BC=E4: 2021=C4=EA2=D4=C23=C8=D5 23:21
> =CA=D5=BC=FE=C8=CB: devel@edk2.groups.io; dandan.bi@intel.com
> =B3=AD=CB=CD: Dong, Eric <eric.dong@intel.com>; Wang, Nickle (HPS S= W)
> <nickle.wang@hpe.com>= ;
> =D6=F7=CC=E2: Re: [edk2-devel] [PATCH v3]= MdeModulePkg/Library: Add
> HiiGetStringEx to UefiHiiLib for EDK2 Redfish
>
> Yes Dandan, yours follow coding standard. I will handle that.
> Also, I will help to push the patch to upstream with your review tag.=
>
> Thanks
> Abner
>
> > -----Original Message-----
> > From: devel@edk2.groups.= io [mailto:devel@edk2.groups.io= ] On Behalf Of
> > Dandan Bi
> > Sent: Wednesday, February 3, 2021 7:34 PM
> > To: Chang, Abner (HPS SW/FW Technologist) <abner.chang@hpe.com>;
> > devel@edk2.groups.io=
> > Cc: Dong, Eric <eric.d= ong@intel.com>; Wang, Nickle (HPS SW)
> > <nickle.wang@hpe.com>
> > Subject: Re: [edk2-devel] [PATCH v3] MdeModulePkg/Library: Add > > HiiGetStringEx to UefiHiiLib for EDK2 Redfish
> >
> > One minor comment inline below.
> > Reviewed-by: Dandan Bi <
dandan.bi@intel.com> with this is handled.
> >
> > Thanks,
> > Dandan
> > > -----Original Message-----
> > > From: Abner Chang <abner.chang@hpe.com>
> > > Sent: Monday, February 1, 2021 11:06 AM
> > > To: devel@edk2.grou= ps.io
> > > Cc: Bi, Dandan <d= andan.bi@intel.com>; Dong, Eric
> > > <eric.dong@intel.= com>; Nickle Wang <nickle.= wang@hpe.com>
> > > Subject: [PATCH v3] MdeModulePkg/Library: Add HiiGetStringE= x to
> > > UefiHiiLib for EDK2 Redfish
> > >
> > > Add HiiGetStringEx and leveraged by HiiGetString function t= o support
> > > getting string with the best language in optionally. This a= voids the
> > > string in x-uefi language is misled to the language defined= by
> > > "PlatformLang" or the "Supported Languages&q= uot;. This change is introduced
> > > to support x-uefi keyword language for configuring BIOS set= ting.
> > >
> > > Signed-off-by: Jiaxin Wu <jiaxin.wu@intel.com>
> > > Signed-off-by: Siyuan Fu <siyuan.fu@intel.com>
> > > Signed-off-by: Fan Wang <fan.wang@intel.com>
> > > Signed-off-by: Abner Chang <abner.chang@hpe.com>
> > > Cc: Dandan Bi <da= ndan.bi@intel.com>
> > > Cc: Eric Dong <er= ic.dong@intel.com>
> > > Cc: Nickle Wang <= nickle.wang@hpe.com>
> > > ---
> > >  MdeModulePkg/Include/Library/HiiLib.h  &nbs= p;    | 60 ++++++++++---
> > >  MdeModulePkg/Library/UefiHiiLib/HiiString.c | 98
> > > +++++++++++++++------
> > >  2 files changed, 119 insertions(+), 39 deletions(-) > > >
> > > diff --git a/MdeModulePkg/Include/Library/HiiLib.h
> > > b/MdeModulePkg/Include/Library/HiiLib.h
> > > index c475cb74a1..cd9027fefd 100644
> > > --- a/MdeModulePkg/Include/Library/HiiLib.h
> > > +++ b/MdeModulePkg/Include/Library/HiiLib.h
> > > @@ -1,7 +1,8 @@
> > >  /** @file
> > >    Public include file for the HII Library > > >
> > > -Copyright (c) 2007 - 2018, Intel Corporation. All rights > > > reserved.<BR>
> > > +Copyright (c) 2007 - 2021, Intel Corporation. All rights > > > +reserved.<BR>
> > > +(C) Copyright 2021 Hewlett Packard Enterprise Development = LP<BR>
> > >  SPDX-License-Identifier: BSD-2-Clause-Patent
> > >
> > >  **/
> > > @@ -123,16 +124,8 @@ HiiSetString (
> > >  ;
> > >
> > >  /**
> > > -  Retrieves a string from a string package in a speci= fic language.
> > > If the language
> > > -  is not specified, then a string from a string packa= ge in the
> > > current platform
> > > -  language is retrieved.  If the string cannot b= e retrieved using the
> > > specified
> > > -  language or the current platform language, then the= string is
> > > retrieved from
> > > -  the string package in the first language the string= package
> > > supports.  The
> > > -  returned string is allocated using AllocatePool().&= nbsp; The caller is
> > > responsible
> > > -  for freeing the allocated buffer using FreePool().<= br> > > > -
> > > -  If HiiHandle is NULL, then ASSERT().
> > > -  If StringId is 0, then ASSERT().
> > > +  Retrieves a string from a string package in a speci= fic language
> > > + specified in Language  or in the best lanaguage. See= HiiGetStringEx
> > > + () for
> > > the details.
> > >
> > >    @param[in]  HiiHandle  A handle= that was previously registered in
> > > the HII Database.
> > >    @param[in]  StringId   The= identifier of the string to retrieved
from
> the
> > > string
> > > @@ -152,8 +145,49 @@ HiiGetString (
> > >    IN EFI_HII_HANDLE  HiiHandle,
> > >    IN EFI_STRING_ID   StringId, > > >    IN CONST CHAR8     *L= anguage  OPTIONAL
> > > -  )
> > > -;
> > > +  );
> > > +
> > > +/**
> > > +  Retrieves a string from a string package in a speci= fic language or
> > > +in the best
> > > +  language at discretion of this function according t= o the priority
of
> > languages.
> > > +  TryBestLanguage is used to get the string in the be= st language or
> > > +in the language
> > > +  specified in Language parameter. The behavior is, > > > +  If TryBestLanguage is TRUE, this function looks for= the best
> > > +language for
> > > the string.
> > > +   - If the string can not be retrieved using th= e specified language
> > > + or the
> > > current
> > > +     platform language, then the strin= g is retrieved from the string
> > > + package in
> > > the
> > > +     first language the string package= supports.
> > > +  If TryBestLanguage is FALSE, Language must be speci= fied for
> > > + retrieving the
> > > string.
> > > +
> > > +  The returned string is allocated using AllocatePool= ().  The caller
> > > + is responsible  for freeing the allocated buffer usi= ng FreePool().
> > > +
> > > +  If HiiHandle is NULL, then ASSERT().
> > > +  If StringId is 0, then ASSET.
> > > +  If TryBestLanguage is FALE and Language is NULL, th= en ASSERT().
> > > +
> > > +  @param[in]  HiiHandle    &= nbsp;    A handle that was previously
> registered in the
> > > HII Database.
> > > +  @param[in]  StringId    &n= bsp;     The identifier of the string to
> retrieved from
> > the
> > > string
> > > +         &nbs= p;            &= nbsp;         package associated wi= th
> HiiHandle.
> > > +  @param[in]  Language    &n= bsp;     The language of the string to
> retrieve.  If this
> > > parameter
> > > +         &nbs= p;            &= nbsp;         is NULL, then the cur= rent
> platform language is used.  The
> > > +         &nbs= p;            &= nbsp;         format of Language mu= st follow
> the
> > > + language format
> > > assumed
> > > +         &nbs= p;            &= nbsp;         the HII Database.
> > > +  @param[in]  TryBestLanguage   If TRU= E, try to get the best
> matching
> > > language from all
> > > +         &nbs= p;            &= nbsp;         supported languages.I= f FALSE,
> the
> > > + Language must be
> > > assigned
> > > +         &nbs= p;            &= nbsp;         for the StringID.
> > > +
> > > +  @retval NULL   The string specified by St= ringId is not present in
the
> string
> > > package.
> > > +  @retval Other  The string was returned.
> > > +
> > > +**/
> > > +EFI_STRING
> > > +EFIAPI
> > > +HiiGetStringEx (
> > > +  IN EFI_HII_HANDLE  HiiHandle,
> > > +  IN EFI_STRING_ID   StringId,
> > > +  IN CONST CHAR8     *Language&nb= sp; OPTIONAL,
> > > +  IN BOOLEAN       = ;  TryBestLanguage
> > > +  );
> > >
> > >  /**
> > >    Retrieves a string from a string package = named by GUID, in the
> > > specified language.
> > > diff --git a/MdeModulePkg/Library/UefiHiiLib/HiiString.c > > > b/MdeModulePkg/Library/UefiHiiLib/HiiString.c
> > > index 95229f8a8c..a9a11aef98 100644
> > > --- a/MdeModulePkg/Library/UefiHiiLib/HiiString.c
> > > +++ b/MdeModulePkg/Library/UefiHiiLib/HiiString.c
> > > @@ -1,7 +1,8 @@
> > >  /** @file
> > >    HII Library implementation that uses DXE = protocols and services.
> > >
> > > -  Copyright (c) 2006 - 2018, Intel Corporation. All r= ights
> > > reserved.<BR>
> > > +  Copyright (c) 2006 - 2021, Intel Corporation. All r= ights
> > > + reserved.<BR>
> > > + (C) Copyright 2021 Hewlett Packard Enterprise Development= LP<BR>
> > >    SPDX-License-Identifier: BSD-2-Clause-Pat= ent
> > >
> > >  **/
> > > @@ -190,16 +191,8 @@ HiiGetPackageString (  }
> > >
> > >  /**
> > > -  Retrieves a string from a string package in a speci= fic language.
> > > If the language
> > > -  is not specified, then a string from a string packa= ge in the
> > > current platform
> > > -  language is retrieved.  If the string can not = be retrieved using
> > > the specified
> > > -  language or the current platform language, then the= string is
> > > retrieved from
> > > -  the string package in the first language the string= package
> > > supports.  The
> > > -  returned string is allocated using AllocatePool().&= nbsp; The caller is
> > > responsible
> > > -  for freeing the allocated buffer using FreePool().<= br> > > > -
> > > -  If HiiHandle is NULL, then ASSERT().
> > > -  If StringId is 0, then ASSET.
> > > +  Retrieves a string from a string package in a speci= fic language
> > > + specified in Language  or in the best lanaguage. See= HiiGetStringEx
> > > + () for
> > > the details.
> > >
> > >    @param[in]  HiiHandle  A handle= that was previously registered in
> > > the HII Database.
> > >    @param[in]  StringId   The= identifier of the string to retrieved
from
> the
> > > string
> > > @@ -220,6 +213,51 @@ HiiGetString (
> > >    IN EFI_STRING_ID   StringId, > > >    IN CONST CHAR8     *L= anguage  OPTIONAL
> > >    )
> > > +{
> > > +  return HiiGetStringEx (HiiHandle, StringId, Languag= e, TRUE); }
> > > +
> > > +/**
> > > +  Retrieves a string from a string package in a speci= fic language or
> > > +in the best
> > > +  language at discretion of this function according t= o the priority
of
> > languages.
> > > +  TryBestLanguage is used to get the string in the be= st language or
> > > +in the language
> > > +  specified in Language parameter. The behavior is, > > > +  If TryBestLanguage is TRUE, this function looks for= the best
> > > +language for
> > > the string.
> > > +   - If the string can not be retrieved using th= e specified language
> > > + or the
> > > current
> > > +     platform language, then the strin= g is retrieved from the string
> > > + package in
> > > the
> > > +     first language the string package= supports.
> > > +  If TryBestLanguage is FALSE, Language must be speci= fied for
> > > + retrieving the
> > > string.
> > > +
> > > +  The returned string is allocated using AllocatePool= ().  The caller
> > > + is responsible  for freeing the allocated buffer usi= ng FreePool().
> > > +
> > > +  If HiiHandle is NULL, then ASSERT().
> > > +  If StringId is 0, then ASSET.
> > > +  If TryBestLanguage is FALE and Language is NULL, th= en ASSERT().
> > > +
> > > +  @param[in]  HiiHandle    &= nbsp;    A handle that was previously
> registered in the
> > > HII Database.
> > > +  @param[in]  StringId    &n= bsp;     The identifier of the string to
> retrieved from
> > the
> > > string
> > > +         &nbs= p;            &= nbsp;         package associated wi= th
> HiiHandle.
> > > +  @param[in]  Language    &n= bsp;     The language of the string to
> retrieve.  If this
> > > parameter
> > > +         &nbs= p;            &= nbsp;         is NULL, then the cur= rent
> platform language is used.  The
> > > +         &nbs= p;            &= nbsp;         format of Language mu= st follow
> the
> > > + language format
> > > assumed
> > > +         &nbs= p;            &= nbsp;         the HII Database.
> > > +  @param[in]  TryBestLanguage   If TRU= E, try to get the best
> matching
> > > language from all
> > > +         &nbs= p;            &= nbsp;         supported languages.I= f FALSE,
> the
> > > + Language must be
> > > assigned
> > > +         &nbs= p;            &= nbsp;         for the StringID.
> > > +
> > > +  @retval NULL   The string specified by St= ringId is not present in
the
> string
> > > package.
> > > +  @retval Other  The string was returned.
> > > +
> > > +**/
> > > +EFI_STRING
> > > +EFIAPI
> > > +HiiGetStringEx (
> > > +  IN EFI_HII_HANDLE  HiiHandle,
> > > +  IN EFI_STRING_ID   StringId,
> > > +  IN CONST CHAR8     *Language&nb= sp; OPTIONAL,
> > > +  IN BOOLEAN       = ;  TryBestLanguage
> > > +  )
> > >  {
> > >    EFI_STATUS  Status;
> > >    UINTN      = StringSize;
> > > @@ -231,7 +269,10 @@ HiiGetString (
> > >
> > >    ASSERT (HiiHandle !=3D NULL);
> > >    ASSERT (StringId !=3D 0);
> > > -
> > > +  //
> > > +  // Language must be specified if TryBestLanguage = =3D FALSE.
> > > +  //
> > > +  ASSERT (!(TryBestLanguage =3D=3D FALSE && L= anguage =3D=3D NULL));
> > One minor here, in order to following the coding style, this see= ms
should be
> > ASSERT (!(!TryBestLanguage && Language =3D=3D NULL)); Pl= ease help double
> > check.
> >
> > >    //
> > >    // Initialize all allocated buffers to NU= LL
> > >    //
> > > @@ -261,21 +302,26 @@ HiiGetString (
> > >      Language =3D ""; > > >    }
> > >
> > > -  //
> > > -  // Get the best matching language from SupportedLan= guages
> > > -  //
> > > -  BestLanguage =3D GetBestLanguage (
> > > -         &nbs= p;         SupportedLanguages,
> > > -         &nbs= p;         FALSE,
> // RFC 4646 mode
> > > -         &nbs= p;         Language,
> // Highest priority
> > > -         &nbs= p;         PlatformLanguage !=3D NU= LL ? PlatformLanguage :
> "",  // Next
> > > highest priority
> > > -         &nbs= p;         SupportedLanguages,
> // Lowest priority
> > > -         &nbs= p;         NULL
> > > -         &nbs= p;         );
> > > -  if (BestLanguage =3D=3D NULL) {
> > > -    goto Error;
> > > +  if (TryBestLanguage) {
> > > +    //
> > > +    // Get the best matching language from = SupportedLanguages
> > > +    //
> > > +    BestLanguage =3D GetBestLanguage (
> > > +         &nbs= p;           SupportedLan= guages,
> > > +         &nbs= p;           FALSE,
> // RFC 4646 mode
> > > +         &nbs= p;           Language, > // Highest priority
> > > +         &nbs= p;           PlatformLang= uage !=3D NULL ?
> PlatformLanguage :
> > > + "",  // Next
> > > highest priority
> > > +         &nbs= p;           SupportedLan= guages,
> // Lowest priority
> > > +         &nbs= p;           NULL
> > > +         &nbs= p;           );
> > > +    if (BestLanguage =3D=3D NULL) {
> > > +      goto Error;
> > > +    }
> > > +  } else {
> > > +    BestLanguage =3D (CHAR8 *) Language; > > >    }
> > >
> > > +
> > >    //
> > >    // Retrieve the size of the string in the= string package for the
> > BestLanguage
> > >    //
> > > @@ -337,7 +383,7 @@ Error:
> > >    if (PlatformLanguage !=3D NULL) {
> > >      FreePool (PlatformLanguage);<= br> > > >    }
> > > -  if (BestLanguage !=3D NULL) {
> > > +  if (TryBestLanguage && BestLanguage !=3D NU= LL) {
> > >      FreePool (BestLanguage);
> > >    }
> > >
> > > --
> > > 2.17.1
> >
> >
> >
> >
> >
>
>
>
>
>





 

--_000_CS1PR8401MB1144F23B18212DA3CDB27EF8FFB29CS1PR8401MB1144_--