From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by mx.groups.io with SMTP id smtpd.web10.65853.1597756348865649585 for ; Tue, 18 Aug 2020 06:12:29 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=FC97vSsh; spf=pass (domain: intel.com, ip: 134.134.136.100, mailfrom: jiewen.yao@intel.com) IronPort-SDR: M2sA7sngRjLFg1r65vTDgB+doFNOgluwvydjwmBq8cMztz6vKFapL3oB8/I+shxxC8f3S4jVmg nWevE3zK9cjQ== X-IronPort-AV: E=McAfee;i="6000,8403,9716"; a="219208133" X-IronPort-AV: E=Sophos;i="5.76,327,1592895600"; d="scan'208";a="219208133" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Aug 2020 06:12:26 -0700 IronPort-SDR: 6jenNLfjR0+9JrZ0bIOY6Vm2lEG5gEvCLy250xSln+IwcgPDU0tv60O+YIPaURZjH6BD5/jxeD z5iZ1QlZB0CA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.76,327,1592895600"; d="scan'208";a="441216863" Received: from fmsmsx602-2.cps.intel.com (HELO fmsmsx602.amr.corp.intel.com) ([10.18.84.212]) by orsmga004.jf.intel.com with ESMTP; 18 Aug 2020 06:12:25 -0700 Received: from fmsmsx607.amr.corp.intel.com (10.18.126.87) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 18 Aug 2020 06:12:25 -0700 Received: from fmsmsx612.amr.corp.intel.com (10.18.126.92) by fmsmsx607.amr.corp.intel.com (10.18.126.87) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 18 Aug 2020 06:12:24 -0700 Received: from FMSEDG001.ED.cps.intel.com (10.1.192.133) by fmsmsx612.amr.corp.intel.com (10.18.126.92) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.1713.5 via Frontend Transport; Tue, 18 Aug 2020 06:12:24 -0700 Received: from NAM02-DM3-obe.outbound.protection.outlook.com (104.47.56.40) by edgegateway.intel.com (192.55.55.68) with Microsoft SMTP Server (TLS) id 14.3.439.0; Tue, 18 Aug 2020 06:12:24 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=NXE2VliV6jmuj674aJWpha1BrAb2JTAWVQ9NelTkmnFzNsx614TY9ttkRNf2UFK7vyq4hzycKvUNxVKc9osdmzKIvFoC+ri7zuPe+3Y5kLbzFi8Hh8ZmGW3+4ixIYMmVrUhFnejEKRrKzGWMltHNMmeeSBBtxbYsoBM6VaLEtIvHqFPmYsqSe8y2QqczOdU2uUQu4wTZJDfyE9VxPxqOT6RUd1AAbGgeQEOpk4oPWXdmD+yVlgQr+TI/8wfDL+VmmAgUphLK5iBBlyXGuQncfgWt1qotp4WqtDiM7Jf6WsVhczEV9qYgBVhuVCqffmKuAZ75KZFIpDtajGdc8qogKw== 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=cJU42D75UBqXzIrejlTR3OQFGMKpXezv3txbIw2XeLQ=; b=hPZq2r7P+o523tU3LYQVJNJsxAf9j3tXVK5ogQl/bdpxjn600lOiUrOhM6HV34zy8JikgGdspZeDMN7D79YXuii8DDBXL7ncN05wkxSMIWkWuC8TmrjGwoCG171HOV1fAOKPbNpI8LDrfwtnYQ2ausDbIME4jH4k4tDqSAhWwh0cFSSsEa+dwN8tIn+zBHSaToLY0HgtGr4VxVPYWyzyekwRrXuR9EANswdnZzGo2Oebk0NbRn7ezmST2jkcXsGnGd3trshSL9euFf7GilMtHpxQA+jPFaN47H+L82UHwf1FyTRlZcDIFmM73PLrYWmXIU23xbiYbGwIhFOpvFP38A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=cJU42D75UBqXzIrejlTR3OQFGMKpXezv3txbIw2XeLQ=; b=FC97vSshelzkWt96UNQaCMu5FCU2K4gy4lG4YghCz2nzssC3F5KRqloCd80LfWw2WXIKTigReSHdPoxvqUo0vfr82BDrveYU4N2WEv4O3ArOB/ugXhkBHou6uEqRlFackrgD7XFeFwIOem1BcqdojNJC9yf8z8hIxWUnxyCs6KE= Received: from CY4PR11MB1288.namprd11.prod.outlook.com (2603:10b6:903:23::8) by CY4PR1101MB2168.namprd11.prod.outlook.com (2603:10b6:910:18::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3283.22; Tue, 18 Aug 2020 13:12:23 +0000 Received: from CY4PR11MB1288.namprd11.prod.outlook.com ([fe80::163:9209:a92d:812]) by CY4PR11MB1288.namprd11.prod.outlook.com ([fe80::163:9209:a92d:812%6]) with mapi id 15.20.3283.028; Tue, 18 Aug 2020 13:12:22 +0000 From: "Yao, Jiewen" To: "devel@edk2.groups.io" , "lersek@redhat.com" CC: "xiewenyi2@huawei.com" , "Wang, Jian J" , "huangming23@huawei.com" , "songdongkuang@huawei.com" , =?utf-8?B?TWFydmluIEjDpHVzZXI=?= , Vitaly Cheptsov Subject: Re: [edk2-devel] [PATCH EDK2 v2 1/1] SecurityPkg/DxeImageVerificationLib:Enhanced verification of Offset Thread-Topic: [edk2-devel] [PATCH EDK2 v2 1/1] SecurityPkg/DxeImageVerificationLib:Enhanced verification of Offset Thread-Index: AQHWcWlFNRwdlg90V0KlansqAmSeZak2Ym0AgADa0ICAABAfoIAFPYAAgABdzpCAAMXvgIAAMP+d Date: Tue, 18 Aug 2020 13:12:22 +0000 Message-ID: References: <1597319741-59646-1-git-send-email-xiewenyi2@huawei.com> <1597319741-59646-2-git-send-email-xiewenyi2@huawei.com> <024b1279-609d-fefa-8535-5af072815bf8@huawei.com> <250fc485-8705-88b7-21c9-ecd28132934d@redhat.com> ,<56d0af8e-39ae-ae3f-1561-a532b697ba5d@redhat.com> In-Reply-To: <56d0af8e-39ae-ae3f-1561-a532b697ba5d@redhat.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: huawei.com; dkim=none (message not signed) header.d=none;huawei.com; dmarc=none action=none header.from=intel.com; x-originating-ip: [101.87.137.65] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 432f9d45-6195-4fef-1f6b-08d843785854 x-ms-traffictypediagnostic: CY4PR1101MB2168: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: S5rU40JPWQ6NbIlW9JLfWdWNdgumN8GNwOTcnBPPE645+MIdcII9owhp+anAJPYBdwcjSBsO7by0ypS1fqIepBXWp2Q68fN9Uf+ZboRv7vKnNJOQb0LeL0WFgLHqgjeu7K2yQT1m70HaZDpSl9AzP/+X0BDnXJqPNjOsSYFn4V2fi86ILCQiA9jEYvsKWUHSJDee2TZGosjdorQAqkD/y0hK+nJf6cwTe8ZDcJlBS7KZ9OsTThXgxI+JnHcCe7EncDOswjJ6bfiFQdUeItau1NiLMO0cBcPXyUoZLnKD79dH0T9LKIUiza92YYECRygsIfq++VPB9fWzm/2S56DMQltUFmWsHUPi5PKhiEq4/Q4V5NNxlgGqtdHX5OjT8FQIV6noC3ibWugxF5HmB+f0lA== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CY4PR11MB1288.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(39860400002)(396003)(376002)(136003)(366004)(15650500001)(30864003)(6486002)(966005)(478600001)(33656002)(71200400001)(54906003)(110136005)(66574015)(2616005)(316002)(83380400001)(8936002)(66556008)(4326008)(2906002)(6512007)(36756003)(64756008)(6506007)(76116006)(86362001)(186003)(5660300002)(53546011)(66476007)(66946007)(66446008)(91956017)(8676002)(26005);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: uwt4r4L+ga8/SjDxL4eyeZvCvJK9eF3H0e4JKKkrgIWZq8SW9Fj1cKjjj7gFUNeiBnU2ymhYybUd3B2LjFUhIOxjPH1BKil1ZJirN4w/VV0Ftb41qRAG1wuG5ZOGOFjSJtBK3pxPUxpLhAXtwZunvIJAfeJhmbxcDNUprc4yXL0RXKuAlI7ogLEPX3Qs3dfHxLXkCwifJYojGlEGLBGC3Yz5GUj36Tcmzd3AX+oHETaXG+4vvFzvGMoiR+m7CKhiI6Np7RromfT9FX/6O15NMH1v6Nb5UeuC5DAXeDAYM8gYmn6/sHNq8WDucH3iV+A0UbSzMOYKfKbyJw3lfXU5m9Y7g7V/e6OYXEkMDEn3WFYIEin+cHiDFseyTa1+BEfWqJZ5PJNY4poiuL4DTfE1P42jtccbgKZxe1hYm9Cw6K45/x8oTwR9to1CD1Cw5U6x8kAd5vsB9+WWt/Fr0DUSnK+jYlbdSljNP1b9fAvmvD1WfmhvoJcfIkBr67FktPnxzzV+vfY6M9Sgd/GUrZJlC7xvn2a/FM9JhNwVvn6EE+FqCb64OMSD5FaeHTyhACMukSTapmHmkt7f0MFLhJYHSJpPM2Pv+v/OiuNtqSrV5AWJ8uVAzqV91Zs19mDQ3G93EhxtFmPbReG3FU5H8uLcgQ== MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CY4PR11MB1288.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 432f9d45-6195-4fef-1f6b-08d843785854 X-MS-Exchange-CrossTenant-originalarrivaltime: 18 Aug 2020 13:12:22.8950 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: vfvusznWkgaY9HVLBJanDkD4O/hSfHOXpy2uy1Lq9dvfsBj6vA93TGPbZcRIoTOuRhXbneFli38LmvdlYEA95g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR1101MB2168 Return-Path: jiewen.yao@intel.com X-OriginatorOrg: intel.com Content-Language: zh-CN Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgTGFzemxvDQpJIGFncmVlIHdpdGggb24geW91ciBtb3N0IHBvaW50cy4NCkl0IGlzIGFsbCBh Ym91dCAqcmV0dXJuIG9mIGludmVzdG1lbnQqIG9yICpyaXNrIGNvbnRyb2wqLiBMaWtlIHdlIGNh bm5vdCBwdXJzdWUgMTAwJSBzZWN1cml0eSBiZWNhdXNlIHdlIHdpbGwgYmFua3J1cHQgb3Vyc2Vs dmVzIGlmIHNvLg0KDQpIZXJlIEkganVzdCByYWlzZSBteSBjb25jZXJuLg0KMSkgSWYgd2UgYWx3 YXkgYWxsb3cgZGV2ZWxvcGVyc+KAmSBsb3cgcXVhbGl0eSBwYXRjaCB3aXRob3V0IHRlc3QsIHRo ZSBvdmVyYWxsIHF1YWxpdHkgd2lsbCBiZWNvbWUgbG93ZXIgYW5kIGxvd2VyLiBQZXJzb25hbGx5 IEkgaGF2ZSBubyBjb25maWRlbmNlIHRvIGhlbHAgY2F0Y2ggYWxsIHRob3NlIGlzc3Vlcy4gWW91 IGFyZSB0aGUgcm9sZSBtb2RlbCBvbiBjb2RlIHJldmlldy4gQnV0IG5vdCBhbGwgcGVvcGxlIHJl dmlldyB0aGUgY29kZSBsaWtlIHlvdS4gV2UgbmVlZCBib3RoIGV4cGVydGlzZSBhbmQgdGltZSBm b3IgY29kZSByZXZpZXcuIA0KDQoyKSBJIHB1cnBvc2VseSBzZXBhcmF0ZSBzZWN1cml0eSBmaXgg ZnJvbSBub24gc2VjdXJpdHkgb25lLCBiZWNhdXNlIHRoZSBwcm9jZXNzIGlzIGRpZmZlcmVudC4g VGhlIGVtYmFyZ28gbWlnaHQgYmUgNiBtb250aHMuIFdoYXQgaWYgd2UgZm91bmQgdGhlIHNlY3Vy aXR5IHBhdGNoIGRvZXMgbm90IGZpeCB0aGUgcHJvYmxlbSBhZnRlciBlbWJhcmdvPyBVbmxpa2Ug d2Ugc2VuZCBvbmUgbW9yZSBwYXRjaCB0b21vcnJvdywgd2UgbmVlZCB3YWl0IGZvciBhbm90aGVy IDYgbW9udGhzLi4uDQoNCnRoYW5rIHlvdSENCllhbywgSmlld2VuDQoNCg0KPiDlnKggMjAyMOW5 tDjmnIgxOOaXpe+8jOS4i+WNiDY6MTfvvIxMYXN6bG8gRXJzZWsgPGxlcnNla0ByZWRoYXQuY29t PiDlhpnpgZPvvJoNCj4gDQo+IO+7v0hpIEppZXdlbiwNCj4gDQo+ICgrTWFydmluLCArVml0YWx5 KQ0KPiANCj4gT24gMDgvMTgvMjAgMDE6MjMsIFlhbywgSmlld2VuIHdyb3RlOg0KPj4+IC0tLS0t T3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+Pj4gRnJvbTogZGV2ZWxAZWRrMi5ncm91cHMuaW8gPGRl dmVsQGVkazIuZ3JvdXBzLmlvPiBPbiBCZWhhbGYgT2YgTGFzemxvDQo+Pj4gRXJzZWsNCj4+PiBT ZW50OiBUdWVzZGF5LCBBdWd1c3QgMTgsIDIwMjAgMTI6NTMgQU0NCj4+PiBUbzogWWFvLCBKaWV3 ZW4gPGppZXdlbi55YW9AaW50ZWwuY29tPjsgZGV2ZWxAZWRrMi5ncm91cHMuaW87DQo+Pj4geGll d2VueWkyQGh1YXdlaS5jb207IFdhbmcsIEppYW4gSiA8amlhbi5qLndhbmdAaW50ZWwuY29tPg0K Pj4+IENjOiBodWFuZ21pbmcyM0BodWF3ZWkuY29tOyBzb25nZG9uZ2t1YW5nQGh1YXdlaS5jb20N Cj4+PiBTdWJqZWN0OiBSZTogW2VkazItZGV2ZWxdIFtQQVRDSCBFREsyIHYyIDEvMV0NCj4+PiBT ZWN1cml0eVBrZy9EeGVJbWFnZVZlcmlmaWNhdGlvbkxpYjpFbmhhbmNlZCB2ZXJpZmljYXRpb24g b2YgT2Zmc2V0DQo+IA0KPiBbLi4uXQ0KPiANCj4+IEhvd2V2ZXIsIEkgZG8gdGhpbmsgdGhlIHBy b2R1Y2VyIGlzIG1hbmRhdG9yeSBmb3IgYSBmaXggb3IgYXQgbGVhc3QgYQ0KPj4gc2VjdXJpdHkg Zml4Lg0KPj4gVGhlIG93bmVyIHRvIGZpeCB0aGUgaXNzdWUgc2hvdWxkIGd1YXJhbnRlZSB0aGUg cGF0Y2ggaXMgZ29vZC4NCj4+IFRoZSBvd25lciBzaGFsbCBuZXZlciByZWx5IG9uIHRoZSBjb2Rl IHJldmlld2VyIHRvIGZpZ3VyZSBvdXQgaWYgdGhlDQo+PiBwYXRjaCBpcyBnb29kIGFuZCBjb21w bGV0ZS4NCj4+IA0KPj4gSSBoYXZlIHNvbWUgYmFkIGV4cGVyaWVuY2UgdGhhdCBidWcgb3duZXIg anVzdCB3cm90ZSBhIHBhdGNoIGFuZCB0cmllZA0KPj4gdG8gZml4IGEgcHJvYmxlbSwgd2l0aG91 dCBhbnkgdGVzdC4NCj4+IEFuZCBpdCBoYXBwZW5lZCBwYXNzZWQgY29kZSByZXZpZXcgZnJvbSBz b21lb25lIHdobyBkb2VzIG5vdCB3ZWxsDQo+PiB1bmRlcnN0YW5kIHRoZSBwcm9ibGVtLCBidXQg Z2l2ZSByYiBiYXNlZCB1cG9uIHRoZSB0aW1lIHByZXNzdXJlLg0KPj4gTGF0ZXIsIHRoZSBmaXgg d2FzIGFwcHJvdmVkIHRvIGJlIHVzZWxlc3MuDQo+PiANCj4+IEluIG15IG1lbW9yeSwgYXQgbGVh c3QgMyBjYXNlcyB3ZXJlIHNlY3VyaXR5IGZpeC4gVGhleSBhcmUgZm91bmQsIGp1c3QNCj4+IGJl Y2F1c2UgdGhleSBhcmUgc2Vuc2l0aXZlLCBtb3JlIHBlb3BsZSB0b29rIGEgbG9vayBsYXRlci4N Cj4+ICAgIEl0IHdhcyBzaW1wbGUuIEl0IHdhcyBvbmUtbGluZSBjaGFuZ2UuDQo+PiAgIEJ1dCBp dCBoYXMgbm90IHRlc3QsIGFuZCBpdCB3YXMgd3JvbmcuDQo+PiAiSXQgd2FzIHJpZGljdWxvdXMi IC0tIGNvbW1lbnRlZCBieSB0aGUgcGVvcGxlIHdobyBmaW5kIHRoZSBzby1jYWxsZWQNCj4+IHNl Y3VyaXR5IGZpeCBkb2VzIG5vdCBmaXggdGhlIGlzc3VlLg0KPiANCj4gSnVzdCBiZWNhdXNlIHNs b3BweS9ydXNoZWQgcmV2aWV3cyBleGlzdCwgYW5kIGp1c3QgYmVjYXVzZSByZXZpZXdlcnMNCj4g b3BlcmF0ZSB1bmRlciB0aW1lIHByZXNzdXJlLCB3ZSBzaG91bGQgbm90IGF1dG9tYXRpY2FsbHkg cmVqZWN0IHNlY3VyaXR5DQo+IGZpeGVzIHRoYXQgY29tZSB3aXRob3V0IGEgcmVwcm9kdWNlci4N Cj4gDQo+IFNvbWUgb3JnYW5pemF0aW9ucyBkbyBkZXZlbG9wIHJlcHJvZHVjZXJzLCBidXQgdGhl eSBuZXZlciBzaGFyZSB0aGVtDQo+IHB1YmxpY2x5IChmb3IgZmVhciBvZiBhYnVzZSBieSBvdGhl cnMpLg0KPiANCj4gQnV0IG1vcmUgaW1wb3J0YW50bHksIGluIGFuIG9wZW4gZGV2ZWxvcG1lbnQg cHJvamVjdCwgYSBkZXZlbG9wZXIgY291bGQNCj4gaGF2ZSB0aW1lIGFuZCBleHBlcnRpc2UgdG8g Y29udHJpYnV0ZSBhIGZpeCwgYnV0IG5vdCB0byBjcmVhdGUgYQ0KPiByZXByb2R1Y2VyLg0KPiAN Cj4gLSBJZiB3ZSBtYWtlIGNvbnRyaWJ1dGluZyBoYXJkZXIsIGZld2VyIHBlb3BsZSB3aWxsIHVw c3RyZWFtIHRoZWlyDQo+ICBmaXhlcy4NCj4gDQo+IC0gSWYgd2UgbWFrZSBjb250cmlidXRpbmcg aGFyZGVyLCB0aGVuIGNvbnRyaWJ1dGlvbnMgdGhhdCBkbyBtYWtlIGl0IHRvDQo+ICB0aGUgdHJl ZSB3aWxsIGJlIG9mIGhpZ2hlciBxdWFsaXR5Lg0KPiANCj4gQm90aCBzdGF0ZW1lbnRzIHJpbmcg dHJ1ZSB0byBtZSAtLSBzbyBpdCdzIGEgdHJhZGVvZmYuDQo+IA0KPiAoQnkgIndlIiwgSSBtZWFu IHRoZSBlZGsyIGNvbW11bml0eS4pDQo+IA0KPj4+IEFkZGl0aW9uYWxseSwgdGhlIGV4YWN0IHN0 YXRlbWVudCB0aGF0IHRoZSBidWcgcmVwb3J0IGRvZXMgbWFrZSwNCj4+PiBuYW1lbHkNCj4+PiAN Cj4+PiAgaXQncyBwb3NzaWJsZSB0byBvdmVyZmxvdyBPZmZzZXQgYmFjayB0byAwIGNhdXNpbmcg YW4gZW5kbGVzcyBsb29wDQo+Pj4gDQo+Pj4gaXMgd3JvbmcgKGFzIGZhciBhcyBJIGNhbiB0ZWxs IGFueXdheSkuIEl0IGlzIG5vdCAiT2ZmU2V0IiB0aGF0IGNhbg0KPj4+IGJlIG92ZXJmbG93ZWQg dG8gemVybywgYnV0IHRoZSAqYWRkZW5kKiB0aGF0IGlzIGFkZGVkIHRvIE9mZlNldCBjYW4NCj4+ PiBiZSBvdmVyZmxvd2VkIHRvIHplcm8uIFRoZXJlZm9yZSB0aGUgaW5maW5pdGUgbG9vcCB3aWxs IGFyaXNlIGJlY2F1c2UNCj4+PiBPZmZTZXQgcmVtYWlucyBzdHVjayBhdCBpdHMgcHJlc2VudCB2 YWx1ZSwgYW5kIG5vdCBiZWNhdXNlIE9mZlNldA0KPj4+IHdpbGwgYmUgcmUtc2V0IHRvIHplcm8u DQo+Pj4gDQo+Pj4gRm9yIHRoZSByZWFzb25zLCB3ZSBjYW4gb25seSBzcGVjdWxhdGUgYXMgdG8g d2hhdCB0aGUgYWN0dWFsIHByb2JsZW0NCj4+PiBpcywgdW5sZXNzIEppYW4gZGVjaWRlcyB0byBq b2luIHRoZSBkaXNjdXNzaW9uIGFuZCBjbGFyaWZpZXMgd2hhdCBoZQ0KPj4+IGhhZCBpbiBtaW5k IG9yaWdpbmFsbHkuDQo+PiANCj4+IFtKaWV3ZW5dIFdvdWxkIHlvdSBwbGVhc2UgY2xhcmlmeSB3 aGF0IGRvIHlvdSBtZWFuICJ3ZSIgaGVyZT8NCj4+IElmICJ3ZSIgbWVhbnMgdGhlIGJ1ZyBkaXNw YXRjaGVyLCBpdCBpcyB0b3RhbGx5IE9LLiBUaGUgZGlzcGF0Y2hlcg0KPj4ganVzdCBhc3NpZ24g dGhlIGJ1Zy4NCj4+IElmICJ3ZSIgbWVhbnMgdGhlIGRldmVsb3BlciBhc3NpZ25lZCB0byBmaXgg dGhlIGJ1ZywgaXQgaXMgTk9UIE9LLiBUaGUNCj4+IGRldmVsb3BlciBzaG91bGQgdGFrZSB0aGUg cmVzcG9uc2liaWxpdHkgdG8gdW5kZXJzdGFuZCB0aGUgcHJvYmxlbS4NCj4gDQo+IEJ5ICJ3ZSIs IEkgbWVhbiB0aGUgZWRrMiBjb21tdW5pdHkuDQo+IA0KPj4+IFdlIGNhbiB3cml0ZSBhIHBhdGNo IGJhc2VkIG9uIGNvZGUgYW5hbHlzaXMuIEl0J3MgcG9zc2libGUgdG8NCj4+PiBpZGVudGlmeSBp bnRlZ2VyIG92ZXJmbG93cyBiYXNlZCBvbiBjb2RlIGFuYWx5c2lzLCBhbmQgaXQncyBwb3NzaWJs ZQ0KPj4+IHRvIHZlcmlmeSB0aGUgY29ycmVjdG5lc3Mgb2YgZml4ZXMgYnkgY29kZSByZXZpZXcu IE9idmlvdXNseSB0ZXN0aW5nDQo+Pj4gaXMgYWx3YXlzIGdvb2QsIGJ1dCBtYW55IHRpbWVzLCBj b25zdHJ1Y3RpbmcgcmVwcm9kdWNlcnMgZm9yIHN1Y2gNCj4+PiBpc3N1ZXMgdGhhdCB3ZXJlIGZv dW5kIGJ5IGNvZGUgcmV2aWV3LCBpcyBkaWZmaWN1bHQgYW5kIHRpbWUNCj4+PiBjb25zdW1pbmcu IFdlIGNhbiBzYXkgdGhhdCB3ZSBkb24ndCBmaXggdnVsbmVyYWJpbGl0aWVzIHdpdGhvdXQNCj4+ PiByZXByb2R1Y2Vycywgb3Igd2UgY2FuIHNheSB0aGF0IHdlIG1ha2UgYW4gZWZmb3J0IHRvIGZp eCB0aGVtIGV2ZW4gaWYNCj4+PiBhbGwgd2UgaGF2ZSBpcyBjb2RlIGFuYWx5c2lzIChhbmQgbm90 IGEgcmVwcm9kdWNlcikuDQo+PiANCj4+IFtKaWV3ZW5dIEkgd291bGQgc2F5OiB5ZXMgYW5kIG5v Lg0KPj4gWWVzLCBJIGFncmVlIHdpdGggeW91IHRoYXQgaXQgbWlnaHQgYmUgZGlmZmljdWx0IGFu ZCB0aW1lIGNvbnN1bWluZyB0bw0KPj4gY29uc3RydWN0IHRoZSByZXByb2R1Y2VyLg0KPj4gSG93 ZXZlciwgIm9idmlvdXNseSIgaXMgYSBzdWJqZWN0IHRlcm0uIFNvbWVvbmUgbWF5IHRoaW5rIHNv bWV0aGluZyBpcw0KPj4gb2J2aW91cywgYnV0IG90aGVyIHBlb3BsZSBkb2VzIG5vdC4NCj4+IFdl IHNob3VsZCBiZSBjbGVhciB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIHBhdGNoIHByb3ZpZGVy IGlzIHRvDQo+PiBwcm92aWRlIGhpZ2ggcXVhbGl0eSBwYXRjaC4NCj4+IEhhdmluZyBiYXNpYyB1 bml0IHRlc3QgaXMgdGhlIGJlc3Qgd2F5IHRvIHByb3ZlIHRoYXQgdGhlIGZpeCBpcyBnb29kLg0K Pj4gDQo+PiBJIGhhdmUgc2VlbiBiYWQgY2FzZXMgd2hlbiBJIGFzayBmb3IgdGhlIHRlc3QgZm9y IHBhdGNoLCB0aGVuIHRoZQ0KPj4gYW5zd2VyIEkgZ290IGlzOiAiSSB0ZXN0IHRoZSB3aW5kb3dz IGJvb3QiLg0KPj4gQnV0IHRoZSB0ZXN0IC0gd2luZG93cyBib290IC0gaGFzIG5vdGhpbmcgcmVs YXRlZCB0byB0aGUgcGF0Y2guIEl0DQo+PiBvbmx5IHByb3ZlcyBubyByZWdyZXNzaW9uLCBidXQg Y2Fubm90IHByb3ZlIHRoZSBpc3N1ZSBkZXNjcmliZWQgaXMNCj4+IHJlc29sdmVkLg0KPiANCj4g UmlnaHQuIEl0IHdvdWxkIGJlIGlkZWFsIGlmIGV2ZXJ5IHBhdGNoIGNhbWUgd2l0aCBhIHVuaXQg dGVzdC4gQnV0IHRoYXQNCj4gYWxzbyBtZWFucyBzb21lIGZvbGtzIHdpbGwgY29udHJpYnV0ZSBs ZXNzLg0KPiANCj4gQ29uc2lkZXIgbm9ybWFsIChub3Qgc2VjdXJpdHkpIHBhdGNoZXMuIFdlIHJl cXVpcmUgdGhhdCBhbGwgZnVuY3Rpb24NCj4gcmV0dXJuIHZhbHVlcyBiZSBjaGVja2VkICh1bmxl c3MgaXQgcmVhbGx5IGRvZXNuJ3QgbWF0dGVyIGlmIGEgZnVuY3Rpb24NCj4gY2FsbCBmYWlscyku IElmIGEgZnVuY3Rpb24gY2FsbCBmYWlscywgd2UgbmVlZCB0byByb2xsIGJhY2sgdGhlIGFjdGlv bnMNCj4gdGFrZW4gdGh1cyBmYXIuIFJlbGVhc2UgcmVzb3VyY2VzIGFuZCBzbyBvbi4gVGhpcyBp cyB3aHkgd2UgaGF2ZSB0aGUNCj4gImNhc2NhZGUgb2YgZXJyb3IgaGFuZGxpbmcgbGFiZWxzIiBw YXR0ZXJuLg0KPiANCj4gQnV0LCBvZiBjb3Vyc2UsIHdlIGRvbid0IHRlc3QgZXZlcnkgcG9zc2li bGUgZXJyb3IgcGF0aCBpbiB0aGUgY29kZS4gU28NCj4gd2hhdCdzIHRoZSBzb2x1dGlvbiB0aGVy ZToNCj4gDQo+IC0gcmVqZWN0IHN1Y2ggcGF0Y2hlcyB0aGF0IGNhcmVmdWxseSBjb25zdHJ1Y3Qg dGhlIGVycm9yIHBhdGhzLCBidXQgZG8NCj4gIG5vdCBwcm92aWRlIHVuaXQgdGVzdHMgd2l0aCBj b21wbGV0ZSBlcnJvciBwYXRoIGNvdmVyYWdlPw0KPiANCj4gLSBzYXkgdGhhdCB3ZSBkb24ndCBj YXJlIGFib3V0IHRob3JvdWdoIGVycm9yIHBhdGhzLCBzbyBsZXQncyBqdXN0IGhhbmcsDQo+ICBv ciBsZWFrIHJlc291cmNlcywgd2hlbmV2ZXIgc29tZXRoaW5nIGZhaWxzPw0KPiANCj4gUGVyc29u YWxseSBJIHByZWZlciB0aGUgZGV0YWlsZWQgZXJyb3IgcGF0aHMuIFRoZXkgbmVlZCB0byBiZSB3 cml0dGVuDQo+IGFuZCByZXZpZXdlZCBjYXJlZnVsbHkuIEFuZCB0aGV5IGNhbiBiZSBhY2NlcHRl ZCBldmVuIGlmIHRoZXkgYXJlIG5vdA0KPiB0ZXN0ZWQgd2l0aCBjb21wbGV0ZSBjb3ZlcmFnZS4N Cj4gDQo+IFNvbWUgcGVvcGxlIHRoaW5rIG90aGVyd2lzZTsgdGhleSBzYXkgbm8gdW50ZXN0ZWQg KHVudGVzdGFibGUpIGNvZGUNCj4gc2hvdWxkIGV2ZXIgYmUgbWVyZ2VkLg0KPiANCj4gQmFjayB0 byBzZWN1cml0eSBwYXRjaGVzIC0tIGNyZWF0aW5nIHJlcHJvZHVjZXJzIHVzdWFsbHkgcmVxdWly ZXMgYQ0KPiBzZXR1cCAodG9vbHMsIGV4cGVydGlzZSwgdGltZSBhbGxvY2F0aW9uIGV0YykgdGhh dCBpcyBkaWZmZXJlbnQgZnJvbSBhDQo+ICJub3JtYWwiIHNldHVwLiBJdCBtYXkgcmVxdWlyZSBz cGVjaWFsaXplZCBiaW5hcnkgZm9ybWF0IGVkaXRvcnMsDQo+IGV4cGVydGlzZSBpbiAicGVuZXRy YXRpb24gdGVzdGluZyIsIGFuZCBzbyBvbi4NCj4gDQo+IEkgbW9zdGx5IGtub3cgdGhlIEMgbGFu Z3VhZ2UgcnVsZXMgdGhhdCBwZXJ0YWluIHRvIGludGVnZXIgYW5kIGJ1ZmZlcg0KPiBvdmVyZmxv d3MsIHNvIEkgY2FuIHVzdWFsbHkgc3BvdCB0aGVpciB2aW9sYXRpb25zIGluIEMgY29kZSwgYW5k IHByb3Bvc2UNCj4gZml4ZXMgZm9yIHRoZW0gdG9vLiBCdXQgSSdtIG5vdCBhIHNlY3VyaXR5IHJl c2VhcmNoZXIsIHNvIEkgZG9uJ3Qgd3JpdGUNCj4gZXhwbG9pdHMgYXMgYSBub3JtIC0tIEkgZG9u J3QgZXZlbiBpbnZlc3RpZ2F0ZSwgZ2VuZXJhbGx5IHNwZWFraW5nLCB0aGUNCj4gcG90ZW50aWFs IHByYWN0aWNhbCBpbXBhY3Qgb2YgInVuZGVmaW5lZCBiZWhhdmlvciIuIFdoZW4gdGhlcmUncyBh DQo+IGJ1ZmZlciBvdmVyZmxvdyBvciBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSBjb2RlLCB0aGF0 J3MgdGhlICplbmQqIG9mIHRoZQ0KPiBzdG9yeSBmb3IgbWUsIHdoaWxlIGl0J3MgdGhlICpzdGFy dCogb2YgdGhlIHdvcmsgZm9yIGEgc2VjdXJpdHkNCj4gcmVzZWFyY2hlci4NCj4gDQo+IFdoZW4g eW91IHJlcXVpcmUgcmVwcm9kdWNlcnMgZm9yIGFsbCBzZWN1cml0eSBwYXRjaGVzLCB5b3UgcmVz dHJpY3QgdGhlDQo+IHBvdGVudGlhbCBjb250cmlidXRvciBwb29sIHRvIHNlY3VyaXR5IHJlc2Vh cmNoZXJzLg0KPiANCj4+IExldCdzIHRoaW5rIGFnYWluIGluIHRoaXMgY2FzZSwgaWYgdGhlIHBh dGNoIHByb3ZpZGVyIGRvZXMgc29tZSBiYXNpYw0KPj4gdW5pdCB0ZXN0LCBoZS9zaGUgbWF5IGZp bmQgb3V0IHRoZSBwcm9ibGVtIGJ5IGhpbXNlbGYvaGVyc2VsZi4NCj4+IFRoYXQgY2FuIHNhdmUg b3RoZXIgcGVvcGxlJ3MgdGltZSB0byByZXZpZXcuDQo+PiANCj4+IEkgZG9uJ3QgcHJlZmVyIHRv IG1vdmUgdGhlIHJlc3BvbnNpYmlsaXR5IGZyb20gcGF0Y2ggcHJvdmlkZXIgdG8gdGhlDQo+PiBj b2RlIHJldmlld2VyIHRvIGNoZWNrIGlmIHRoZSBmaXggaXMgZ29vZC4NCj4+IE90aGVyd2lzZSwg dGhlIGNvZGUgcmV2aWV3ZXIgbWF5IGJlIG92ZXJ3aGVsbWVkLg0KPj4gDQo+PiBXZSBtYXkgY2xh cmlmeSBhbmQgZG9jdW1lbnQgdGhlIHJvbGUgYW5kIHJlc3BvbnNpYmlsaXR5IGluIEVES0lJDQo+ PiBjbGVhcmx5LiBPbmNlIHRoYXQgaXMgcmVhZHksIHdlIGNhbiBmb2xsb3cgdGhlIHJ1bGUuDQo+ PiBCZWZvcmUgdGhhdCBpcyByZWFkeSwgaW4gdGhpcyBwYXJ0aWN1bGFyIGNhc2UsIEkgc3RpbGwg cHJlZmVyIHdlIGhhdmUNCj4+IHByb2R1Y2VyIHRvIHByb3ZlIHRoZSBwYXRjaCBpcyBnb29kLg0K PiANCj4gT0ssIHRoYW5rcyBmb3IgZXhwbGFpbmluZy4NCj4gDQo+IEdpdmVuIHRoYXQgSSdtIHVu YWJsZSB0byBjcmVhdGUgc3VjaCBhIFBFIGZpbGUgKGZyb20gc2NyYXRjaCBvciBieQ0KPiBtb2Rp ZnlpbmcgYW5vdGhlciBvbmUpLCBJIHdvbid0IHBvc3QgdGhlIHBhdGNoZXMgc3RhbmQtYWxvbmUu DQo+IA0KPj4+IFNvIHRoZSBhYm92ZSBwYXJhZ3JhcGggY29uY2VybnMgImNvcnJlY3RuZXNzIi4g UmVnYXJkaW5nDQo+Pj4gImNvbXBsZXRlbmVzcyIsIEkgZ3VhcmFudGVlIHlvdSB0aGF0IHRoaXMg cGF0Y2ggZG9lcyBub3QgZml4ICphbGwqDQo+Pj4gcHJvYmxlbXMgcmVsYXRlZCB0byBQRSBwYXJz aW5nLiAoU2VlIHRoZSBvdGhlciBCWiB0aWNrZXRzLikgSXQgZG9lcw0KPj4+IGZpeCAqb25lKiBp c3N1ZSB3aXRoIFBFIHBhcnNpbmcuIFdlIGNhbiBzYXkgdGhhdCB3ZSB0cnkgdG8gZml4IHN1Y2gN Cj4+PiBpc3N1ZXMgZ3JhZHVhbGx5IChnaXZlIGRpZmZlcmVudCBDVkUgbnVtYmVycyB0byBkaWZm ZXJlbnQgaXNzdWVzLCBhbmQNCj4+PiBhZGRyZXNzIHRoZW0gb25lIGF0IGEgdGltZSksIG9yIHdl IGNhbiBzYXkgdGhhdCB3ZSByZXdyaXRlIFBFIHBhcnNpbmcNCj4+PiBmcm9tIHRoZSBncm91bmQg dXAuIChCVFc6IEkgaGF2ZSBzZXJpb3VzbHkgYXR0ZW1wdGVkIHRoYXQgaW4gdGhlDQo+Pj4gcGFz dCwgYW5kIEkgZ2F2ZSB1cCwgYmVjYXVzZSB0aGUgUEUgZm9ybWF0IGlzIEZVQkFSLikNCj4+IA0K Pj4gW0ppZXdlbl0gTWF5YmUgdGhlcmUgaXMgbWlzdW5kZXJzdGFuZGluZy4NCj4+IEkgZG8gbm90 IG1lYW4gdG8gbGV0IHBhdGNoIHByb3ZpZGVyIHRvIGZpeCBhbGwgaXNzdWUgaW4gUEUgcGFyc2lu Zy4NCj4+IEp1c3QgbGlrZSB3ZSBjYW5ub3QgZmlsZSBvbmUgQnVnemlsbGEgdG8gZml4IGFsbCBp c3N1ZSBpbiBFREtJSSAtIGl0DQo+PiBpcyB1bmZhaXIuDQo+PiANCj4+IFdoYXQgSSBtZWFuIGlz IHRoYXQgdGhlIHBhdGNoIHByb3ZpZGVyIHNob3VsZCBndWFyYW50ZWUgdGhlDQo+PiBjb3JyZWN0 bmVzcyBhbmQgY29tcGxldGVuZXNzIG9mIHRoZSBpc3N1ZSBpbiB0aGUgYnVnIHJlcG9ydC4NCj4+ IA0KPj4gT25lIGZha2VkIGJhZCBleGFtcGxlIG9mIGNvcnJlY3RuZXNzIGlzOg0KPj4gICAgQSBi dWcgcmVwb3J0IGlzIGZpbGUgdG8gc2F5OiB0aGUgY29kZSBoYXMgb3ZlcmZsb3cgY2xhc3MgQS4N Cj4+ICAgIFRoZSBmYWN0b3IgaXM6IHRoZSBjb2RlIGhhcyBvdmVyZmxvdyBjbGFzcyBBIGF0IGxp bmUgWCBhbmQgbGluZSBZLg0KPj4gICAgVGhlIHBhdGNoIG9ubHkgbW9kaWZpZWQgc29tZSBjb2Rl IGF0IGxpbmUgWCwgYnV0IHRoZSBvdmVyZmxvdw0KPj4gICAgY2xhc3MgQSBhdCBsaW5lIFggc3Rp bGwgZXhpc3RzLg0KPj4gDQo+PiBPbmUgZmFrZWQgYmFkIGV4YW1wbGUgb2YgY29tcGxldGVuZXNz IGlzOg0KPj4gICAgQSBidWcgcmVwb3J0IGlzIGZpbGUgdG8gc2F5OiB0aGUgY29kZSBoYXMgb3Zl cmZsb3cgY2xhc3MgQS4NCj4+ICAgIFRoZSBmYWN0b3IgaXM6IHRoZSBjb2RlIGhhcyBvdmVyZmxv dyBjbGFzcyBBIGF0IGxpbmUgWCBhbmQgbGluZSBZLg0KPj4gICAgVGhlIHBhdGNoIG9ubHkgZml4 ZWQgdGhlIG92ZXJmbG93IGNsYXNzIEEgYXQgbGluZSBYIGJ1dCBub3QgbGluZQ0KPj4gICAgWS4N Cj4+IA0KPj4gVGhlIHBhdGNoIHByb3ZpZGVyIHNob3VsZCB0YWtlIHJlc3BvbnNpYmlsaXR5IHRv IGRvIHRoYXQgd29yaw0KPj4gc2VyaW91c2x5IHRvIGZpbmQgb3V0IGlzc3VlIGluIGxpbmUgWCBh bmQgbGluZSBZIGFuZCBmaXggdGhlbS4NCj4+IEhlL3NoZSBtYXkgY2hvb3NlIHRvIGp1c3QgZml4 IGxpbmUgWCBhbmQgbGluZSBZLiBSZXdyaXRlIGlzIHdob2xlDQo+PiBtb2R1bGUgaXMgTk9UIHJl cXVpcmVkLg0KPiANCj4gSSBhZ3JlZSBjb21wbGV0ZWx5Lg0KPiANCj4gTXkgcG9pbnQgd2FzIHRo YXQgd2UgbmVlZCB0aGUgYnVnIHJlcG9ydCB0byBiZSBwcmVjaXNlLCBpbiB0aGUgZmlyc3QNCj4g cGxhY2UuIElmIHRoZSBidWcgcmVwb3J0IGRvZXNuJ3QgY2xlYXJseSBpZGVudGlmeSBsaW5lcyBY IGFuZCBZLCB3ZSB3aWxsDQo+IGxpa2VseSBub3QgZ2V0IHRoZSBjb21wbGV0ZW5lc3MgcGFydCBy aWdodC4NCj4gDQo+ICJDbGVhcmx5IGlkZW50aWZ5IiBtYXkgbWVhbiBzcGVsbGluZyBvdXQgbGlu ZXMgWCBhbmQgWSBzcGVjaWZpY2FsbHkuIE9yDQo+IGl0IG1heSBtZWFuIGRlZmluaW5nICJjbGFz cyBBIiBzdWZmaWNpZW50bHkgY2xlYXJseSB0aGF0IHNvbWVvbmUgZWxzZQ0KPiByZWFkaW5nIHRo ZSBhZmZlY3RlZCBmdW5jdGlvbiBjYW4gZmluZCBYIGFuZCBZIHRoZW1zZWx2ZXMuDQo+IA0KPj4g SWYgSSBjYW4gZ2l2ZSBzb21lIGNvbW1lbnQsIEkgd291bGQgdGhpbmsgYWJvdXQgdGhlIHByb3Zp ZGUgdGhlIGZpeCBpbg0KPj4gQmFzZVBlQ29mZkxpYi4NCj4gDQo+IEZyb20gYSBzb2Z0d2FyZSBk ZXNpZ24gcGVyc3BlY3RpdmUsIHlvdSBhcmUgMTAwJSByaWdodC4NCj4gDQo+IFVuZm9ydHVuYXRl bHksIEkgY2FuJ3QgZG8gaXQuDQo+IA0KPiBUaGF0J3Mgd2hhdCBJIG1lbnRpb25lZCBiZWZvcmUg LS0gSSBoYWQgdHJpZWQgcmV3cml0aW5nIEJhc2VQZUNvZmZMaWIsDQo+IGJlY2F1c2UgaW4gbXkg b3BpbmlvbiwgQmFzZVBlQ29mZkxpYiBpcyB1bnNhbHZhZ2VhYmxlIGluIGl0cyBjdXJyZW50DQo+ IGZvcm0uIEFuZCBJIGdhdmUgdXAgb24gdGhlIHJld3JpdGUuDQo+IA0KPiBQbGVhc2Ugc2VlIHRo ZSBmb2xsb3dpbmcgZW1haWwuIEkgc2VudCBpdCB0byBzb21lIHBlb3BsZSBvZmYtbGlzdCwgb24N Cj4gMjAyMC1GZWItMTQ6DQo+IA0KPj4gVGhlcmUgYXJlIGN1cnJlbnRseSBmb3VyICg0KSBUaWFu b0NvcmUgc2VjdXJpdHkgQlpzICgxOTU3LCAxOTkwLCAxOTkzLA0KPj4gMjIxNSksIGVtYmFyZ29l ZCwgdGhhdCBkZXNjcmliZSB2YXJpb3VzIHdheXMgaW4gd2hpY2ggY3VubmluZ2x5DQo+PiBjcmFm dGVkIFBFIGltYWdlcyBjYW4gZXZhZGUgU2VjdXJlIEJvb3QgdmVyaWZpY2F0aW9uLg0KPj4gDQo+ PiBbLi4uXQ0KPj4gDQo+PiBQcmltYXJpbHksIEkganVzdCBjb3VsZG4ndCBmaW5kIG15IHBlYWNl IHdpdGggdGhlIGlkZWEgdGhhdCBmaXhpbmcNCj4+IHN1Y2ggUEUvQ09GRiBwYXJzaW5nIG1pc3Rh a2VzIChpbnRlZ2VyIG92ZXJmbG93cywgYnVmZmVyIG92ZXJmbG93cykNCj4+ICptdXN0KiBiZSBh IG9uZS1ieS1vbmUgZml4aW5nIGdhbWUuIEkgd2FudGVkIGFuIGFwcHJvYWNoIHRoYXQgd291bGQN Cj4+IGZpeCB0aGVzZSAqY2xhc3Nlcyogb2YgdnVsbmVyYWJpbGl0aWVzLCBpbiBQRS9DT0ZGIHBh cnNpbmcuDQo+PiANCj4+IFNvLCBiZWdpbm5uaW5nIG9mIHRoaXMgRmVicnVhcnkgSSByZXR1cm5l ZCB0byB0aGlzIHRvcGljLCBhbmQgc3BlbnQNCj4+IHR3byBkYXlzIG9uIHByb3RvdHlwaW5nIC8g cmVzZWFyY2hpbmcgYSBjb250YWluZXIgLyBpbnRlcnZhbCBiYXNlZA0KPj4gYXBwcm9hY2guIEhl cmUncyBvbmUgb2YgdGhlIGNvbW1pdCBtZXNzYWdlcywgYXMgYSB3YXkgb2YgZXhwbGFpbmluZzoN Cj4+IA0KPj4gICAgT3ZtZlBrZy9EeGVQZUNvZmZWYWxpZGF0b3JMaWI6IGludHJvZHVjZSBDT05U QUlORVIgdHlwZSBhbmQgaGVscGVyIGZ1bmNzDQo+PiANCj4+ICAgIEZvciB2YWxpZGF0aW5nIHRo ZSB3ZWxsLWZvcm1lZG5lc3Mgb2YgYSBQRS9DT0ZGIGZpbGUsIGludHJvZHVjZSB0aGUNCj4+ICAg IENPTlRBSU5FUiB0eXBlLCBhbmQgc29tZSB3b3JraG9yc2UgZnVuY3Rpb25zLiAoVGhlIGZ1bmN0 aW9ucyBhZGRlZCBpbiB0aGlzDQo+PiAgICBwYXRjaCB3aWxsIG5vdCBiZSBjYWxsZWQgZGlyZWN0 bHkgZnJvbSB0aGUgY29kZSB0aGF0IHdpbGwgcHJvY2VzcyBQRS9DT0ZGDQo+PiAgICBzdHJ1Y3R1 cmVzLikNCj4+IA0KPj4gICAgVGhlIENPTlRBSU5FUiB0eXBlIGRlc2NyaWJlcyBhIGNvbnRpZ3Vv dXMgbm9uLWVtcHR5IGludGVydmFsIGluIGEgUEUvQ09GRg0KPj4gICAgZmlsZSAob24tZGlzayBy ZXByZXNlbnRhdGlvbiwgb3IgaW4tbWVtb3J5IHJlcHJlc2VudGF0aW9uKS4gQ29udGFpbmVycyBj YW4NCj4+ICAgIGJlIG5lc3RlZC4gVGhlIGRhdGEgZnJvbSBzY2FsYXItc2l6ZWQgY29udGFpbmVy cyBjYW4gYmUgcmVhZCBvdXQsIGFzIHBhcnQNCj4+ICAgIG9mIHRoZWlyIGNyZWF0aW9uLiBGb3Ig b24tZGlzayByZXByZXNlbnRhdGlvbnMgb2YgUEUvQ09GRiBmaWxlcywgc2NhbGFyDQo+PiAgICBy ZWFkcyBhcmUgcGVybWl0dGVkOyBmb3IgaW4tbWVtb3J5IHJlcHJlc2VudGF0aW9ucywgbm8gZGF0 YSBhY2Nlc3MgaXMNCj4+ICAgIHBlcm1pdHRlZCAob25seSBDT05UQUlORVIgdHJhY2tpbmcgLyBu ZXN0aW5nKS4NCj4+IA0KPj4gICAgVGhlIGdvYWxzIG9mIENPTlRBSU5FUiBhcmUgdGhlIGZvbGxv d2luZzoNCj4+IA0KPj4gICAgLSBlbmZvcmNlIHRoZSBwcm9wZXIgbmVzdGluZyBvZiBQRS9DT0ZG IHN0cnVjdHVyZXMgKHN0cnVjdHVyZSBib3VuZGFyaWVzDQo+PiAgICAgIG11c3Qgbm90IGJlIGNy b3NzZWQgYnkgcnVucyBvZiBkYXRhKTsNCj4+IA0KPj4gICAgLSBwcmV2ZW50IGludGVnZXIgb3Zl cmZsb3dzIGFuZCBidWZmZXIgb3ZlcmZsb3dzOw0KPj4gDQo+PiAgICAtIHByZXZlbnQgemVyby1z aXplIHN0cnVjdHVyZXM7DQo+PiANCj4+ICAgIC0gcHJldmVudCBpbmZpbml0ZSBuZXN0aW5nIGJ5 IHJlcXVpcmluZyBwcm9wZXIgc3ViLWludGVydmFsczsNCj4+IA0KPj4gICAgLSBwcmV2ZW50IGlu dGVybmFsIFBFL0NPRkYgcG9pbnRlcnMgZnJvbSBhbGlhc2luZyBlYWNoIG90aGVyICh1bmxlc3Mg dGhleQ0KPj4gICAgICBwb2ludCBhdCBjb250YWluZXIgYW5kIGNvbnRhaW5lZSBzdHJ1Y3R1cmVz KTsNCj4+IA0KPj4gICAgLSB0ZXJtaW5hdGUgbmVzdGluZyBhdCBzY2FsYXItc2l6ZWQgY29udGFp bmVyczsNCj4+IA0KPj4gICAgLSBhc3N1bWluZyBhbiBhcnJheSBvZiBwb2ludGVycyBpcyBwcm9j ZXNzZWQgaW4gaW5jcmVhc2luZyBlbGVtZW50IG9yZGVyLA0KPj4gICAgICBlbmZvcmNlIHRoYXQg dGhlIHBvaW50ZWQtdG8gb2JqZWN0cyBhcmUgbG9jYXRlZCBhdCBpbmNyZWFzaW5nIG9mZnNldHMN Cj4+ICAgICAgdG9vOw0KPj4gDQo+PiAgICAtIGFzc2lnbiBodW1hbi1yZWFkYWJsZSBuYW1lcyB0 byBQRS9DT0ZGIHN0cnVjdHVyZXMgYW5kIGZpZWxkcywgZm9yDQo+PiAgICAgIGRlYnVnZ2luZyBQ RS9DT0ZGIG1hbGZvcm1hdGlvbnMuDQo+PiANCj4+IEJlY2F1c2UsIHNldmVyYWwgb2YgdGhlIHZ1 bG5lcmFiaWxpdGllcyBleHBsb2l0ZWQgY3Jvc3MtZGlyZWN0ZWQgYW5kDQo+PiBhbGlhc2VkIGlu dGVybmFsIHBvaW50ZXJzIGluIFBFL0NPRkYgZmlsZXMuDQo+PiANCj4+IFR3byBkYXlzIG9mIGRl bGlyaW91cyBzcGVjIHJlYWRpbmcgYW5kIGNvZGluZyBsYXRlciwgYW5kIDIwMDArIGxpbmVzDQo+ PiBsYXRlciwgSSBkZWNpZGVkIHRoYXQgbXkgaWRlYSB3YXMgdW52aWFibGUuIFRoZSBQRS9DT0ZG IHNwZWMgd2FzIHNvDQo+PiBpbmNyZWRpYmx5IG1pcy1kZXNpZ25lZCBhbmQgY3J1ZnR5IHRoYXQg ZW5mb3JjaW5nIHRoZSAqaW50ZXJuYWwqDQo+PiBjb25zaXN0ZW5jeSBvZiBhbGwgdGhlIHNpemUg ZmllbGRzIGFuZCB0aGUgaW50ZXJuYWwgcG9pbnRlcnMgd291bGQNCj4+IGluZXZpdGFibHkgZmFs bCBpbnRvIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNhdGVnb3JpZXM6DQo+PiANCj4+IC0gdGhlIGNo ZWNrcyB3b3VsZG4ndCBiZSBzdHJpY3QgZW5vdWdoLCBhbmQgc29tZSBuYXN0eSBpbWFnZXMgd291 bGQNCj4+ICBzbGlwIHRocm91Z2gsDQo+PiANCj4+IC0gdGhlIGNoZWNrcyB3b3VsZCBiZSB0b28g c3RyaWN0LCBhbmQgc29tZSBxdWlya3ksIGJ1dCB2YWxpZCwgaW1hZ2VzDQo+PiAgd291bGQgYmUg dW5qdXN0aWZpZWRseSBjYXVnaHQuDQo+PiANCj4+IFNvIEkgZ2F2ZSB1cCBhbmQgSSd2ZSBhY2Nl cHRlZCB0aGF0IGl0IHJlbWFpbnMgYSB3aGFjay1hLW1vbGUgZ2FtZS4NCj4+IFsuLi5dDQo+PiAN Cj4+IChOQjogSSBkb24ndCBjbGFpbSB0aGF0IEVMRiBpcyBub3Qgc2ltaWxhcmx5IGJyYWluLWRh bWFnZWQuKQ0KPiANCj4gU28gbm93LCBJJ3ZlIG9ubHkgY29uc2lkZXJlZCBjb250cmlidXRpbmcg cGF0Y2hlcyBmb3IgYnVnIzIyMTUgYmVjYXVzZQ0KPiB0aGUgY29kZSBpbiBxdWVzdGlvbiByZXNp ZGVzIGluIER4ZUltYWdlVmVyaWZpY2F0aW9uTGliLCBhbmQgKm5vdCogaW4NCj4gQmFzZVBlQ29m ZkxpYi4gSSdtIG5vdCBnb2luZyB0byB0b3VjaCBCYXNlUGVDb2ZmTGliIC0tIGluIG15IG9waW5p b24sDQo+IEJhc2VQZUNvZmZMaWIgaXMgdW5maXhhYmxlIHdpdGhvdXQgYSBjb21wbGV0ZSByZXdy aXRlLg0KPiANCj4gSSB3b3VsZCAqbGlrZSogaWYgQmFzZVBlQ29mZkxpYiB3ZXJlIGZpeGFibGUg aW5jcmVtZW50YWxseSwgYnV0IEkganVzdA0KPiBkb24ndCBzZWUgaG93IHRoYXQncyBwb3NzaWJs ZS4NCj4gDQo+IEluIHN1cHBvcnQgb2YgbXkgb3BpbmlvbiwgcGxlYXNlIG9wZW4gdGhlIGZvbGxv d2luZyBidWd6aWxsYSB0aWNrZXQ6DQo+IA0KPiAgaHR0cHM6Ly9idWd6aWxsYS50aWFub2NvcmUu b3JnL3Nob3dfYnVnLmNnaT9pZD0yNjQzDQo+IA0KPiBhbmQgc2VhcmNoIHRoZSBjb21tZW50cyAo d2l0aCB0aGUgYnJvd3NlcidzIGluLXBhZ2Ugc2VhcmNoIGZlYXR1cmUsIHN1Y2gNCj4gYXMgQ3Ry bCtGKSBmb3IgdGhlIGZvbGxvd2luZyBleHByZXNzaW9uOg0KPiANCj4gIG5ldyBQRSBsb2FkZXIN Cj4gDQo+IEkgdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgVml0YWx5IGFuZCBNYXJ2aW4gbWVhbnQg aW4gdGhvc2UgY29tbWVudHMuIDooDQo+IA0KPiBUaGFua3MsDQo+IExhc3psbw0KPiANCj4gDQo+ IA0KPiANCg==