From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=192.55.52.93; helo=mga11.intel.com; envelope-from=michael.d.kinney@intel.com; receiver=edk2-devel@lists.01.org Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 8027A21A07A82 for ; Wed, 14 Nov 2018 08:34:11 -0800 (PST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 14 Nov 2018 08:34:10 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,233,1539673200"; d="scan'208,217";a="108544569" Received: from orsmsx107.amr.corp.intel.com ([10.22.240.5]) by orsmga002.jf.intel.com with ESMTP; 14 Nov 2018 08:34:10 -0800 Received: from orsmsx115.amr.corp.intel.com (10.22.240.11) by ORSMSX107.amr.corp.intel.com (10.22.240.5) with Microsoft SMTP Server (TLS) id 14.3.408.0; Wed, 14 Nov 2018 08:34:10 -0800 Received: from orsmsx113.amr.corp.intel.com ([169.254.9.125]) by ORSMSX115.amr.corp.intel.com ([169.254.4.106]) with mapi id 14.03.0415.000; Wed, 14 Nov 2018 08:34:09 -0800 From: "Kinney, Michael D" To: "Cohen, Eugene" , "Zhang, Chao B" , "edk2-devel@lists.01.org" , "Yao, Jiewen" , "Kinney, Michael D" , "Kinney, Michael D" CC: "Bin, Sung-Uk (???)" Thread-Topic: [PATCH 3/4] SecurityPkg: add TpmIoLibMmio instance Thread-Index: AdR7nYTa2kHXzqxsRUyIavAWgtxLkAABiLTgAACfbXAAAtyyEAACXJPAABpUw/AABJuAIA== Date: Wed, 14 Nov 2018 16:34:08 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.0.400.15 dlp-reaction: no-action x-originating-ip: [10.22.254.138] MIME-Version: 1.0 X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [PATCH 3/4] SecurityPkg: add TpmIoLibMmio instance X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 14 Nov 2018 16:34:11 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 RXVnZW5lLA0KDQpVbmRlcnN0b29kIG9uIHRoZSBIVyBlbGVtZW50cy4gIEFzIGxvbmcgYXMgeW91 IGNhbiBwcm92aWRlIGV2aWRlbmNlL2RvY3VtZW50YXRpb24gdGhhdCB0aGUgc3RhY2sgaGFzIGJl ZW4gdmFsaWRhdGVkIHNvIHdlIGFyZSBhbGwgY29uZmlkZW50IHRoZSBzdGFjayBjYW4gd29yayBv biBhbGwgY29uZm9ybWFudCBUUE0gZGV2aWNlcywgd2Ugc2hvdWxkIGJlIGdvb2QuICBXZSBjYW4g YWxzbyBzZWUgaWYgdGhlcmUgYXJlIHNvbWUgcHVibGljYWxseSBhdmFpbGFibGUgVFBNIGRldmlj ZXMgdGhhdCBjYW4gYmUgdXNlZCB0byB2YWxpZGF0ZS4NCg0KUXVhcmsgZGlkIG5vdCBoYXZlIGl0 cyBvd24gVFBNLiAgVGhlIGRyaXZlcnMgYWRkZWQgd2VyZSBmb3IgVFBNIGRldmljZXMgY29ubmVj dGVkIHRvIHRoZSBJMkMgYnVzIG9uIHRoZSBBcmR1aW5vIGhlYWRlci4gIFNvIHVzaW5nIHBsYXRm b3JtcyB0aGF0IGhhdmUgZXh0ZXJuYWwgSTJDIGFuZCBTUEkgYnVzc2VzIGNhbiBwb3RlbnRpYWxs eSBiZSB1c2VkIHRvIHZhbGlkYXRlIG5ldyBmZWF0dXJlcyBsaWtlIHRoZSBvbmVzIHlvdSBhcmUg cHJvcG9zaW5nLg0KDQpPbmUgbm90ZSBvbiB0aGUgY3VycmVudCBwcm9jZXNzLiAgVGhlIHByb2Nl c3MgZG9lcyByZXF1aXJlIHBhdGNoIGVtYWlscywgYnV0IHRoZSBwYXRjaCBlbWFpbHMgY2FuIGFs c28gcG9pbnQgdG8gYSBwdWJsaWMgR2l0SHViIGJyYW5jaCB0byBtYWtlIGl0IGVhc3kgZm9yIG90 aGVycyB0byByZXZpZXcgYW5kIHRlc3QgdGhlIGNoYW5nZXMgd2l0aG91dCBoYXZpbmcgdG8gdXNl IHRoZSBlbWFpbHMuICBFc3BlY2lhbGx5IHVzZWZ1bCBmb3IgbGFyZ2VyIHBhdGNoIHNldHMuICBJ IGhhdmUgdXNlIHRoaXMgbWV0aG9kIGZvciBhIG51bWJlciBvZiBjaGFuZ2VzLiAgSSBkbyB0aGUg c2FtZSBmb3IgZG9jdW1lbnQgY2hhbmdlIGluIEdpdEJvb2sgYmVjYXVzZSBHaXRIdWIgcHJvdmlk ZXMgYSBnb29kIHdheSB0byB2aWV3IG1hcmtkb3duIGRvY3VtZW50IGNoYW5nZXMgb24gYSBicmFu Y2guDQoNClRoYW5rcywNCg0KTWlrZQ0KDQpGcm9tOiBDb2hlbiwgRXVnZW5lIFttYWlsdG86ZXVn ZW5lQGhwLmNvbV0NClNlbnQ6IFdlZG5lc2RheSwgTm92ZW1iZXIgMTQsIDIwMTggNjo1OSBBTQ0K VG86IFpoYW5nLCBDaGFvIEIgPGNoYW8uYi56aGFuZ0BpbnRlbC5jb20+OyBLaW5uZXksIE1pY2hh ZWwgRCA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+OyBlZGsyLWRldmVsQGxpc3RzLjAxLm9y ZzsgWWFvLCBKaWV3ZW4gPGppZXdlbi55YW9AaW50ZWwuY29tPg0KQ2M6IEJpbiwgU3VuZy1VayAo 67mI7ISx7JqxKSA8c3VuZ3VrLWJpbkBocC5jb20+DQpTdWJqZWN0OiBSRTogW1BBVENIIDMvNF0g U2VjdXJpdHlQa2c6IGFkZCBUcG1Jb0xpYk1taW8gaW5zdGFuY2UNCg0KTWlrZSwgQ2hhbywgSmll d2VuDQoNCsOYICBbQ2hhb10gSW5maW5lb24gY2hpcCBtZW50aW9uZWQgYnkgTWlrZSBpcyBhbiBl eGFtcGxlIGJ1dCBpdHMgcmVnaXN0ZXIgc3BhY2UgZG9lc27igJl0IGNvbXBseSB0byBQVFAgc3Bl Yw0Kw5ggIFtNaWtlXSBNeSBleHBlcmllbmNlIGlzIHdpdGggRFRQTSBhbmQgc29tZSBJMkMgVFBN cyBhdCAxLjIgbGV2ZWwuDQoNCldlIGhhdmUgZXhwZXJpZW5jZSB3aXRoIHRoZSBUUE0gMS4yIElu ZmluZW9uIEkyQyBkZXZpY2UgYW5kIHVzZWQgYSBjb21wbGV0ZWx5IGN1c3RvbSBzb2x1dGlvbi4g IEJ1dCBJIHRoaW5rIHRoYXQgbWF5IGJlIGEgMS4yIHZlcnN1cyAyLjAgZGlmZmVyZW5jZS4gIEkg Z2V0IHRoZSBpbXByZXNzaW9uIHRoYXQgVENHIGNsZWFuZWQgdXAgdGhlaXIgYWN0IGEgYml0IGZv ciB0aGUgMi4wIHNwZWMg4oCTIGluIGZhY3Qgd2UgY2FuIHNlZSB0ZXh0IHRvIHRoaXMgZWZmZWN0 IGluIHRoZSBQVFAgMS4wMyBzcGVjPGh0dHBzOi8vdHJ1c3RlZGNvbXB1dGluZ2dyb3VwLm9yZy93 cC1jb250ZW50L3VwbG9hZHMvVENHX1BDX0NsaWVudF9QbGF0Zm9ybV9UUE1fUHJvZmlsZV9QVFBf Mi4wX3IxLjAzX3YyMi5wZGY+IFNlY2l0b24gMi4zOg0KDQpUaGUgQ1JCIEludGVyZmFjZSBpcyBp bnRlbmRlZCB0byBiZSBwaHlzaWNhbC1idXMgYWdub3N0aWMsIHNvIHRoYXQgaXQgY291bGQNCmJl IGltcGxlbWVudGVkIG9uIGFuIExQQyBvciBTUEkgaW50ZXJmYWNlLCBhcyBzcGVjaWZpZWQgaW4g dGhpcyBzcGVjaWZpY2F0aW9uIG9yIG9uDQphbm90aGVyIHBoeXNpY2FsIGludGVyZmFjZSBub3Qg c3BlY2lmaWVkLg0KDQpSZWFkaW5nIGEgYml0IGRlZXBlciBpbiB0aGUgUFRQIHNwZWMgaXQgbG9v a3MgbGlrZSB0aGVyZSBhcmUgdHdvIHJlZ2lzdGVyIGxheW91dHMgYnV0IG5vdCBkcml2ZW4gYnkg dGhlIHBoeXNpY2FsIGJ1cyAoTFBDLCBTUEksIEkyQykgYnV0IHJhdGhlciB0aGUgYWNjZXNzIG1l dGhvZCAoRklGTyBvciBDUkIgYWNjZXNzIG1vZGUpIOKAkyBzZWUgc2VjdGlvbiA1LjMuMiBjYWxs ZWQgIlJlZ2lzdGVyIFNwYWNlIEFkZHJlc3NlcyIgdG8gc2VlIHRoZSBGSUZPIGFuZCBDUkIgcmVn aXN0ZXIgbGF5b3V0cyBqdXh0YXBvc2VkLg0KDQpMb29raW5nIGF0IEkyQyBpbiB0aGUgUFRQIHNw ZWMgSSBjYW4gbm93IHNlZSB0aGUgc2l0dWF0aW9uIGlzIHRvdGFsbHkgZGlmZmVyZW50IOKAkyBJ MkMgdXNlcyBhIHZhcmlhdGlvbiBvZiBGSUZPIG1vZGUgYW5kIGhhcyBhIHNpZ25pZmljYW50bHkg ZGlmZmVyZW50IGxheW91dCBvZiByZWdpc3RlcnMsIGNvbXBhcmluZyBUYWJsZSAxMCB0byBUYWJs ZSA0OCBpbiB0aGUgUFRQIHNwZWMuICBTbyBub3cgSSBzZWUgd2hlcmUgeW91J3JlIGNvbWluZyBm cm9tIChhbmQgd2h5IHdlIGRpZG4ndCBpbml0aWFsbHkgdW5kZXJzdGFuZCB0aGUgY29uY2Vybiku DQoNCg0KR2l2ZW4gdGhhdCBIUCdzIHVzZSBjYXNlIGlzIFNQSSBhbmQgU1BJIGlzIGFsaWduZWQg dG8gTFBDLCB3ZSBiZWxpZXZlIGdvaW5nIGZvcndhcmQgd2l0aCB0aGUgVHBtSW9MaWIgYWJzdHJh Y3Rpb24gaXMgc3RpbGwgcXVpdGUgdXNlZnVsLiAgV2hlbmV2ZXIgc29tZWJvZHkgbmVlZHMgdG8g c3VwcG9ydCBJMkMgVFBNMiBkZXZpY2VzIHRoZW4gdGhleSB3aWxsIG5lZWQgdG8gYXV0aG9yIGFu b3RoZXIgRGV2aWNlTGliIGluc3RhbmNlIHNpbmNlIHRoZSByZWdpc3RlciBsYXlvdXQgaXMgZGlm ZmVyZW50LiAgKFdpbGwgdGhlcmUgZXZlciBiZSBhIFF1YXJrIHdpdGggYW4gSTJDIFRQTTI/KQ0K DQpUUE0gZXhwZXJ0cywgSSdkIGFwcHJlY2lhdGUgaWYgeW91IGNvdWxkIGNvbmZpcm0gdGhhdCBt eSBhbmFseXNpcyBvZiBMUEMvSTJDL1NQSSBhbmQgQ1JCL0ZJRk8gaXMgY29ycmVjdC4NCg0KDQrD mCAgW01pa2VdIEkgd291bGQgcmVjb21tZW5kIHRoYXQgYSBmdWxsIGltcGxlbWVudGF0aW9uIG9m IFRwbUlvTGliIGZvciBhIGZldyBub24gTU1JTyBUUE0gZGV2aWNlcyBiZSBjb21wbGV0ZWQgYW5k IHBhc3MgdmFsaWRhdGlvbiBiZWZvcmUgd2UgY29uc2lkZXIgYWRkaW5nIG5ldyBsaWIgY2xhc3Mg dG8gZWRrMi4gIFBlcmhhcHMgdXNpbmcgYW4gZWRrMi1zdGFnaW5nIGJyYW5jaCB3b3VsZCBiZSBh IGJldHRlciBwbGFjZSB0byBzdGFydCBhbmQgeW91IGNhbiBkb2N1bWVudCBpbiB0aGUgUmVhZG1l Lm1kIHRoZSBjcml0ZXJpYSB0aGF0IG11c3QgYmUgbWV0IGJlZm9yZSB0aGUgbmV3IGxpYiBjbGFz cyBtZWV0cyB0aGUgcmVxdWlyZW1lbnRzIGZvciBlZGsyL21hc3Rlci4NCg0KVGhpcyBwbGFuIGlz IGZpbmUgYnkgbWUg4oCTIG91ciBpbnRlbnQgaW4gdGhlIG9yaWdpbmFsIFJlcXVlc3QgZm9yIENv bW1lbnQgZW1haWxzIHdhcyB0byB1bmRlcnN0YW5kIGlmIGEgVHBtSW9MaWIgc3R5bGUgYWJzdHJh Y3Rpb24gd291bGQgYmUgYWNjZXB0YWJsZSB0byBzYXZlIHVzIHRoZSB3b3JrIG9mIGdvaW5nIGRv d24gYSBwYXRoIHRoYXQgY2FuJ3QgYmUgdXBzdHJlYW1lZCBhbmQgaGF2aW5nIHRvIGZpeCBpdCBs YXRlci4gIEkgdGhpbmsgdGhlIGFuc3dlciB5b3UgYXJlIGdpdmluZyBpcyAieWVzLCBhcyBsb25n IGFzIGl0IHJlYWxseSB3b3JrcyIuICBXZSBhcmUgZGV2ZWxvcGluZyBhbmQgdmFsaWRhdGluZyB0 aGlzIHN1cHBvcnQgcmlnaHQgbm93IHNvIGFzIGxvbmcgYXMgdGhlIFRQTSBzdGFjayBkb2Vzbid0 IGNoYW5nZSBvdXQgZnJvbSB1bmRlciB1cyBvbiBlZGsyL21hc3RlciB3aGlsZSB3ZSBhcmUgZGV2 ZWxvcGluZyBpdCBzaG91bGQgYmUgc3RyYWlnaHRmb3J3YXJkIHRvIHVwc3RyZWFtIHRoZSBwb3J0 aW9ucyB3ZSBjYW4gc2hhcmUgYW5kIHRoZSByZXN1bHRzLCBzbyBsb25nIGFzIGl0IGlzIHVuZGVy c3Rvb2QgdGhhdCB3ZSBjYW5ub3QgdXBzdHJlYW0gdGhlIGZ1bGwgc3RhY2sgZHVlIHRvIHRoZSBw cm9wcmlldGFyeSBIVyBlbGVtZW50cyDigJMgYXMgc3VjaCBJJ20gbm90IHN1cmUgaG93IHVzZWZ1 bCB0aGUgc3RhZ2luZyBicmFuY2ggd291bGQgYmUgYWx0aG91Z2ggSSBkb24ndCBtaW5kIGRvaW5n IGl0LiAgKEluIGZhY3QgSSB0aGluayBicmFuY2gtYmFzZWQgcHVsbCByZXF1ZXN0cyBhcmUgbW9y ZSByZXZpZXdhYmxlIHRoYW4gZW1haWwgcGF0Y2hzZXRzIGJ1dCBJIHRoaW5rIEkgbWF5IGJlIGlu IHRoZSBtaW5vcml0eSBvbiB0aGlzIG1haWxpbmcgbGlzdCkuDQoNClRoYW5rcywNCg0KRXVnZW5l DQoNCg0KRnJvbTogWmhhbmcsIENoYW8gQiA8Y2hhby5iLnpoYW5nQGludGVsLmNvbTxtYWlsdG86 Y2hhby5iLnpoYW5nQGludGVsLmNvbT4+DQpTZW50OiBUdWVzZGF5LCBOb3ZlbWJlciAxMywgMjAx OCA2OjUzIFBNDQpUbzogS2lubmV5LCBNaWNoYWVsIEQgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwu Y29tPG1haWx0bzptaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4+OyBDb2hlbiwgRXVnZW5lIDxl dWdlbmVAaHAuY29tPG1haWx0bzpldWdlbmVAaHAuY29tPj47IGVkazItZGV2ZWxAbGlzdHMuMDEu b3JnPG1haWx0bzplZGsyLWRldmVsQGxpc3RzLjAxLm9yZz47IFlhbywgSmlld2VuIDxqaWV3ZW4u eWFvQGludGVsLmNvbTxtYWlsdG86amlld2VuLnlhb0BpbnRlbC5jb20+Pg0KQ2M6IEJpbiwgU3Vu Zy1VayAo67mI7ISx7JqxKSA8c3VuZ3VrLWJpbkBocC5jb208bWFpbHRvOnN1bmd1ay1iaW5AaHAu Y29tPj4NClN1YmplY3Q6IFJFOiBbUEFUQ0ggMy80XSBTZWN1cml0eVBrZzogYWRkIFRwbUlvTGli TW1pbyBpbnN0YW5jZQ0KDQpIaSBBbGw6DQogICBQVFAgMS4zIHNwZWMgYWxyZWFkeSBpbmNsdWRl IEkyQyBzdXBwb3J0LiBJdCBzZWVzIEkyQyBUUE0gY29tbXVuaWNhdGlvbiBpbnRvIDMgbGF5ZXJz DQogICAgICBBcHBsaWNhdGlvbiAgTGF5ZXIgIC0+IEFscmVhZHkgaW1wbGVtZW50ZWQgVENHIFBF SS9UQ0cgRFhFDQogICAgICBUQ0ctSTJDICAgICAgICAgICAgICAgICAgIC0+ICBOb3QgaW1wbGVt ZW50ZWQgYnkgVUVGSSBUQ0cgKEluZmluZW9uIGNoaXAgbWVudGlvbmVkIGJ5IE1pa2UgaXMgYW4g ZXhhbXBsZSBidXQgaXRzIHJlZ2lzdGVyIHNwYWNlIGRvZXNu4oCZdCBjb21wbHkgdG8gUFRQIHNw ZWMpDQogICAgICAgIEkyQyAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFdoYXQgVHBtSW9M aWIgYWxzbyBuZWVkIHRvIGFkZHJlc3MNCiAgIEl0IHdpbGwgYmUgZ29vZCB0byBoYXZlIG1vcmUg dXNlIGNhc2VzIHRvIHNlZSBpZiBUcG1Jb0xpYiBpcyBzdWZmaWNpZW50bHkgZGVzaWduZWQgdG8g bWVldCBnZW5lcmljIFRQTSBkZXZpY2VzIGNvdmVyZWQgYnkgVENHIHNwZWMuDQoNCg0KRnJvbTog S2lubmV5LCBNaWNoYWVsIEQNClNlbnQ6IFdlZG5lc2RheSwgTm92ZW1iZXIgMTQsIDIwMTggODo0 NCBBTQ0KVG86IENvaGVuLCBFdWdlbmUgPGV1Z2VuZUBocC5jb208bWFpbHRvOmV1Z2VuZUBocC5j b20+PjsgZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc8bWFpbHRvOmVkazItZGV2ZWxAbGlzdHMuMDEu b3JnPjsgWWFvLCBKaWV3ZW4gPGppZXdlbi55YW9AaW50ZWwuY29tPG1haWx0bzpqaWV3ZW4ueWFv QGludGVsLmNvbT4+OyBaaGFuZywgQ2hhbyBCIDxjaGFvLmIuemhhbmdAaW50ZWwuY29tPG1haWx0 bzpjaGFvLmIuemhhbmdAaW50ZWwuY29tPj47IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQu a2lubmV5QGludGVsLmNvbTxtYWlsdG86bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+Pg0KQ2M6 IEJpbiwgU3VuZy1VayAoPz8/KSA8c3VuZ3VrLWJpbkBocC5jb208bWFpbHRvOnN1bmd1ay1iaW5A aHAuY29tPj4NClN1YmplY3Q6IFJFOiBbUEFUQ0ggMy80XSBTZWN1cml0eVBrZzogYWRkIFRwbUlv TGliTW1pbyBpbnN0YW5jZQ0KDQpIaSBFdWdlbmUsDQoNCk15IGV4cGVyaWVuY2UgaXMgd2l0aCBE VFBNIGFuZCBzb21lIEkyQyBUUE1zIGF0IDEuMiBsZXZlbC4NCg0KT25lIG9mIHRoZSBJMkMgVFBN cyB3YXMgc2lnbmlmaWNhbnRseSBkaWZmZXJlbnQsIHNvIHRoZSBUcG1Jb0xpYiBjb25jZXB0IGRv ZXMgbm90IGFwcGx5Lg0KDQpRdWFya1BsYXRmb3JtUGtnXExpYnJhcnlcVHBtMTJEZXZpY2VMaWJB dG1lbEkyYw0KDQpUaGUgb3RoZXIgY291bGQgcG90ZW50aWFsbHkgdXNlIHNvbWV0aGluZyBsaWtl IFRwbUlvTGliLCBidXQgbWF5IHJlcXVpcmUgc29tZSBkaWZmZXJlbnQgZGVsYXlzIGFuZCB0aW1l b3V0IHZhbHVlcyB0aGFuIERUUE0uDQoNClF1YXJrUGxhdGZvcm1Qa2dcTGlicmFyeVxUcG0xMkRl dmljZUxpYkluZmluZW9uSTJjDQoNClNvIG1heWJlIHdlIG9mZmVyIDIgbWV0aG9kcyB0byBwb3J0 IGEgVFBNLiAgT25jZSBpcyBUcG1Jb0xpYiBpZiB0aGUgcmVnaXN0ZXIgbGF5b3V0IGFuZCByZXF1 aXJlZCBkZWxheXMgYXJlIHRoZSBzYW1lIGFzIERUUE0gd2l0aCBwb3RlbnRpYWxseSBhIGRpZmZl cmVudCBiYXNlLCBhbmQgdGhlIG90aGVyIGlzIHRvIGp1c3QgaW1wbGVtZW50IHRoZSBEZXZpY2VM aWIuDQoNCkkgd291bGQgcmVjb21tZW5kIHRoYXQgYSBmdWxsIGltcGxlbWVudGF0aW9uIG9mIFRw bUlvTGliIGZvciBhIGZldyBub24gTU1JTyBUUE0gZGV2aWNlcyBiZSBjb21wbGV0ZWQgYW5kIHBh c3MgdmFsaWRhdGlvbiBiZWZvcmUgd2UgY29uc2lkZXIgYWRkaW5nIG5ldyBsaWIgY2xhc3MgdG8g ZWRrMi4gIFBlcmhhcHMgdXNpbmcgYW4gZWRrMi1zdGFnaW5nIGJyYW5jaCB3b3VsZCBiZSBhIGJl dHRlciBwbGFjZSB0byBzdGFydCBhbmQgeW91IGNhbiBkb2N1bWVudCBpbiB0aGUgUmVhZG1lLm1k IHRoZSBjcml0ZXJpYSB0aGF0IG11c3QgYmUgbWV0IGJlZm9yZSB0aGUgbmV3IGxpYiBjbGFzcyBt ZWV0cyB0aGUgcmVxdWlyZW1lbnRzIGZvciBlZGsyL21hc3Rlci4NCg0KTWlrZQ0KDQpGcm9tOiBD b2hlbiwgRXVnZW5lIFttYWlsdG86ZXVnZW5lQGhwLmNvbV0NClNlbnQ6IFR1ZXNkYXksIE5vdmVt YmVyIDEzLCAyMDE4IDM6MjQgUE0NClRvOiBLaW5uZXksIE1pY2hhZWwgRCA8bWljaGFlbC5kLmtp bm5leUBpbnRlbC5jb208bWFpbHRvOm1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPj47IGVkazIt ZGV2ZWxAbGlzdHMuMDEub3JnPG1haWx0bzplZGsyLWRldmVsQGxpc3RzLjAxLm9yZz47IFlhbywg Smlld2VuIDxqaWV3ZW4ueWFvQGludGVsLmNvbTxtYWlsdG86amlld2VuLnlhb0BpbnRlbC5jb20+ PjsgWmhhbmcsIENoYW8gQiA8Y2hhby5iLnpoYW5nQGludGVsLmNvbTxtYWlsdG86Y2hhby5iLnpo YW5nQGludGVsLmNvbT4+DQpDYzogQmluLCBTdW5nLVVrICjruYjshLHsmrEpIDxzdW5ndWstYmlu QGhwLmNvbTxtYWlsdG86c3VuZ3VrLWJpbkBocC5jb20+Pg0KU3ViamVjdDogUkU6IFtQQVRDSCAz LzRdIFNlY3VyaXR5UGtnOiBhZGQgVHBtSW9MaWJNbWlvIGluc3RhbmNlDQoNCk1pa2UsDQoNClRo ZXJlIGlzIGEgcHJldmFsZW5jZSBvZiBiYXNlIGFkZHJlc3Mgbm9tZW5jbGF0dXJlIGluIHRoZSBE VFBNIGxpYnJhcnkgbGlrZToNCg0KICAgICAgICAgICAgICAgIHJldHVybiBUaXNQY1JlcXVlc3RV c2VUcG0gKChUSVNfUENfUkVHSVNURVJTX1BUUikgKFVJTlROKSBQY2RHZXQ2NCAoUGNkVHBtQmFz ZUFkZHJlc3MpKTsNCg0KbGlrZSBmcm9tIFRwbTJUaXMuYy4NCg0Kw5ggIHNob3VsZG7igJl0IHRo ZSBBZGRyZXNzIGJlIHRoZSByZWxhdGl2ZSBhZGRyZXNzIGZyb20gYSBiYXNlPw0KDQpJIHRoaW5r IGl0IGlzLCB0byB0aGUgZXh0ZW50IHRoYXQgdGhlIFBjZFRwbUJhc2VBZGRyZXNzIGFscmVhZHkg ZXhpc3RzLg0KDQrDmCAgT3IgYXJlIHlvdSB1c2luZyB0aGUgZnVsbCBEVFBNIE1NSU8gYWRkcmVz cyBvbiBwdXJwb3NlIGFuZCB5b3UgZXhwZWN0IG5vbiBEVFBNIE1NSU8gaW1wbGVtZW50YXRpb25z IHRvIHRyYW5zbGF0ZSBmcm9tIHRoZSBEVFBNIE1NSU8gYWRkcmVzcyB0byB0aGUgZXF1aXZhbGVu dCByZWdpc3RlciBhY2Nlc3MgaW4gb24gYW4gYWx0ZXJuYXRlIGJ1cyB0eXBlPw0KDQpNeSB0aG91 Z2h0IGlzIHRoYXQgdGhlIFBjZFRwbUJhc2VBZGRyZXNzIGNvdWxkIGJlIHNldCB0byB6ZXJvIChv ciB3aGF0ZXZlciBub24tTU1JTyBvZmZzZXQgbWFrZXMgc2Vuc2UpLg0KDQrDmCAgV291bGRuJ3Qg aXQgYmUgYmV0dGVyIHRvIGhhdmUgYW4gYWJzdHJhY3Rpb24gZm9yIGRpZmZlcmVudCBUUE0gcmVn aXN0ZXJzIGFuZCB0aGUgRFRQTSBpbXBsZW1lbnRhdGlvbiB3b3VsZCBjb252ZXJ0IHRvIGEgZnVs bCBNTUlPIGFkZHJlc3MgaW4gdGhlIGxpYiBpbXBsZW1lbnRhdGlvbj8NCg0KSSd2ZSBiZWVuIGxl ZCB0byB1bmRlcnN0YW5kIHRoYXQgdGhlIFRQTSByZWdpc3RlcnMgYXJlIHRoZSBzYW1lIGluIGJv dGggY2FzZXMuICBJIGhhdmVuJ3QgdmVyaWZpZWQgdGhpcyBteXNlbGYgLSBidXQgaWYgeW91IGhh dmUgZGF0YSB0byB0aGUgY29udHJhcnkgcGxlYXNlIGxldCB1cyBrbm93IHNvIHdlIHN0b3AgZ29p bmcgZG93biB0aGlzIHBhdGguDQoNCk15IG1haW4gcmVhc29uIGZvciByZXNpc3RpbmcgY3JlYXRp bmcgYSBuZXcgbGlicmFyeSBhdCB0aGUgVHBtMkRldmljZUxpYiBsYXllciBiZWNhdXNlIHRoZSBE VFBNIGxpYnJhcnkgY29udGFpbnMgYSBsb3Qgb2YgbG9naWMgYXJvdW5kIGhvdyB0byB0YWxrIHRv IHRoZSBUUE0gdGhhdCBleHRlbmRzIHdlbGwgYmV5b25kIHRoZSBhY2Nlc3MgbWVjaGFuaXNtIHRo YXQgd2Ugd291bGQgbm90IHdhbnQgdG8gZHVwbGljYXRlIHRvIGFub3RoZXIgbGlicmFyeSBpbnN0 YW5jZS4gIEknbSBsb29raW5nIGluc2lkZSBUcG0yVGlzLmMgYW5kIFRwbTJQdHAuYyB0byBnZXQg dGhpcyBwZXJzcGVjdGl2ZS4NCg0KVGhhbmtzLA0KDQpFdWdlbmUNCg0KRnJvbTogS2lubmV5LCBN aWNoYWVsIEQgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPG1haWx0bzptaWNoYWVsLmQua2lu bmV5QGludGVsLmNvbT4+DQpTZW50OiBUdWVzZGF5LCBOb3ZlbWJlciAxMywgMjAxOCAzOjU4IFBN DQpUbzogQ29oZW4sIEV1Z2VuZSA8ZXVnZW5lQGhwLmNvbTxtYWlsdG86ZXVnZW5lQGhwLmNvbT4+ OyBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZzxtYWlsdG86ZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc+ OyBZYW8sIEppZXdlbiA8amlld2VuLnlhb0BpbnRlbC5jb208bWFpbHRvOmppZXdlbi55YW9AaW50 ZWwuY29tPj47IFpoYW5nLCBDaGFvIEIgPGNoYW8uYi56aGFuZ0BpbnRlbC5jb208bWFpbHRvOmNo YW8uYi56aGFuZ0BpbnRlbC5jb20+PjsgS2lubmV5LCBNaWNoYWVsIEQgPG1pY2hhZWwuZC5raW5u ZXlAaW50ZWwuY29tPG1haWx0bzptaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4+DQpDYzogQmlu LCBTdW5nLVVrICjruYjshLHsmrEpIDxzdW5ndWstYmluQGhwLmNvbTxtYWlsdG86c3VuZ3VrLWJp bkBocC5jb20+Pg0KU3ViamVjdDogUkU6IFtQQVRDSCAzLzRdIFNlY3VyaXR5UGtnOiBhZGQgVHBt SW9MaWJNbWlvIGluc3RhbmNlDQoNCkV1Z2VuZSwNCg0KSXQgYXBwZWFycyB5b3UgYXJlIGV4cGVj dGluZyB0aGUgQWRkcmVzcyBwYXJhbWV0ZXINCnRvIGJlIHRoZSBmdWxsIE1NSU8gYWRkcmVzcyBm b3IgRFRQTS4gSWYgeW91IGFyZQ0Kd2FudGluZyB0aGlzIGxpYiBjbGFzcyB0byBhYnN0cmFjdCB0 aGUgYWNjZXNzIGZvcg0KZGlmZmVyZW50IGJ1cyB0eXBlcywgc2hvdWxkbuKAmXQgdGhlIEFkZHJl c3MgYmUgdGhlDQpyZWxhdGl2ZSBhZGRyZXNzIGZyb20gYSBiYXNlPw0KDQpPciBhcmUgeW91IHVz aW5nIHRoZSBmdWxsIERUUE0gTU1JTyBhZGRyZXNzIG9uDQpwdXJwb3NlIGFuZCB5b3UgZXhwZWN0 IG5vbiBEVFBNIE1NSU8gaW1wbGVtZW50YXRpb25zDQp0byB0cmFuc2xhdGUgZnJvbSB0aGUgRFRQ TSBNTUlPIGFkZHJlc3MgdG8gdGhlDQplcXVpdmFsZW50IHJlZ2lzdGVyIGFjY2VzcyBpbiBvbiBh biBhbHRlcm5hdGUgYnVzDQp0eXBlPw0KDQpXb3VsZG4ndCBpdCBiZSBiZXR0ZXIgdG8gaGF2ZSBh biBhYnN0cmFjdGlvbiBmb3INCmRpZmZlcmVudCBUUE0gcmVnaXN0ZXJzIGFuZCB0aGUgRFRQTSBp bXBsZW1lbnRhdGlvbg0Kd291bGQgY29udmVydCB0byBhIGZ1bGwgTU1JTyBhZGRyZXNzIGluIHRo ZSBsaWINCmltcGxlbWVudGF0aW9uPw0KDQpUaGFua3MsDQoNCk1pa2UNCg0KDQo+IC0tLS0tT3Jp Z2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IGVkazItZGV2ZWwgW21haWx0bzplZGsyLWRldmVs LQ0KPiBib3VuY2VzQGxpc3RzLjAxLm9yZzxtYWlsdG86Ym91bmNlc0BsaXN0cy4wMS5vcmc+XSBP biBCZWhhbGYgT2YgQ29oZW4sIEV1Z2VuZQ0KPiBTZW50OiBUdWVzZGF5LCBOb3ZlbWJlciAxMywg MjAxOCAyOjEzIFBNDQo+IFRvOiBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZzxtYWlsdG86ZWRrMi1k ZXZlbEBsaXN0cy4wMS5vcmc+OyBZYW8sIEppZXdlbg0KPiA8amlld2VuLnlhb0BpbnRlbC5jb208 bWFpbHRvOmppZXdlbi55YW9AaW50ZWwuY29tPj47IFpoYW5nLCBDaGFvIEINCj4gPGNoYW8uYi56 aGFuZ0BpbnRlbC5jb208bWFpbHRvOmNoYW8uYi56aGFuZ0BpbnRlbC5jb20+Pg0KPiBDYzogQmlu LCBTdW5nLVVrICjruYjshLHsmrEpIDxzdW5ndWstYmluQGhwLmNvbTxtYWlsdG86c3VuZ3VrLWJp bkBocC5jb20+Pg0KPiBTdWJqZWN0OiBbZWRrMl0gW1BBVENIIDMvNF0gU2VjdXJpdHlQa2c6IGFk ZA0KPiBUcG1Jb0xpYk1taW8gaW5zdGFuY2UNCj4NCj4gU2VjdXJpdHlQa2c6IGFkZCBUcG1Jb0xp Yk1taW8gaW5zdGFuY2UNCj4NCj4gQ29udHJpYnV0ZWQtdW5kZXI6IFRpYW5vQ29yZSBDb250cmli dXRpb24gQWdyZWVtZW50IDEuMQ0KPiBDYzogQ2hhbyBaaGFuZyA8Y2hhby5iLnpoYW5nQGludGVs LmNvbTxtYWlsdG86Y2hhby5iLnpoYW5nQGludGVsLmNvbT4+DQo+IENjOiBKaWV3ZW4gWWFvIDxq aWV3ZW4ueWFvQGludGVsLmNvbTxtYWlsdG86amlld2VuLnlhb0BpbnRlbC5jb20+Pg0KPiBTaWdu ZWQtb2ZmLWJ5OiBFdWdlbmUgQ29oZW4gPGV1Z2VuZUBocC5jb208bWFpbHRvOmV1Z2VuZUBocC5j b20+Pg0KPiAtLS0NCj4gU2VjdXJpdHlQa2cvTGlicmFyeS9UcG1Jb0xpYk1taW8vVHBtSW9MaWJN bWlvLmMgfA0KPiAyMjEgKysrKysrKysrKysrKysrKysrKysNCj4gU2VjdXJpdHlQa2cvTGlicmFy eS9UcG1Jb0xpYk1taW8vVHBtSW9MaWJNbWlvLmluZiB8DQo+IDQxICsrKysNCj4gMiBmaWxlcyBj aGFuZ2VkLCAyNjIgaW5zZXJ0aW9ucygrKQ0KPg0KPiBkaWZmIC0tZ2l0DQo+IGEvU2VjdXJpdHlQ a2cvTGlicmFyeS9UcG1Jb0xpYk1taW8vVHBtSW9MaWJNbWlvLmMNCj4gYi9TZWN1cml0eVBrZy9M aWJyYXJ5L1RwbUlvTGliTW1pby9UcG1Jb0xpYk1taW8uYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NA0KPiBpbmRleCAwMDAwMDAwLi41NmYzMTg3DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvU2Vj dXJpdHlQa2cvTGlicmFyeS9UcG1Jb0xpYk1taW8vVHBtSW9MaWJNbWlvLmMNCj4gQEAgLTAsMCAr MSwyMjEgQEANCj4gKy8qKiBAZmlsZQ0KPiArIFRoaXMgbGlicmFyeSBpcyB0byBhYnN0cmFjdCBU UE0yIHJlZ2lzdGVyIGFjY2Vzc2VzDQo+IHNvIHRoYXQgYSBjb21tb24NCj4gKyBpbnRlcmZhY2Ug Y2FuIGJlIHVzZWQgZm9yIG11bHRpcGxlIHVuZGVybHlpbmcgYnVzc2VzDQo+IHN1Y2ggYXMgVFBN LA0KPiArIFNQSSwgb3IgSTJDIGFjY2Vzcy4NCj4gKw0KPiArQ29weXJpZ2h0IChjKSAyMDE4IEhQ IERldmVsb3BtZW50IENvbXBhbnksIEwuUC4NCj4gK1RoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29t cGFueWluZyBtYXRlcmlhbHMNCj4gK2FyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5k ZXIgdGhlIHRlcm1zIGFuZA0KPiBjb25kaXRpb25zIG9mIHRoZSBCU0QgTGljZW5zZQ0KPiArd2hp Y2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uIFRoZSBmdWxsIHRleHQgb2YNCj4gdGhl IGxpY2Vuc2UgbWF5IGJlIGZvdW5kIGF0DQo+ICtodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5z ZXMvYnNkLWxpY2Vuc2UucGhwDQo+ICsNCj4gK1RIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVO REVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTg0KPiAiQVMgSVMiIEJBU0lTLA0KPiArV0lUSE9VVCBX QVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwNCj4gRUlUSEVSIEVYUFJF U1MgT1IgSU1QTElFRC4NCj4gKw0KPiArKiovDQo+ICsNCj4gKyNpbmNsdWRlIDxCYXNlLmg+DQo+ ICsNCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1RwbUlvTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFy eS9Jb0xpYi5oPg0KPiArDQo+ICsNCj4gKw0KPiArLyoqDQo+ICsgUmVhZHMgYW4gOC1iaXQgVFBN IHJlZ2lzdGVyLg0KPiArDQo+ICsgUmVhZHMgdGhlIDgtYml0IFRQTSByZWdpc3RlciBzcGVjaWZp ZWQgYnkgQWRkcmVzcy4NCj4gVGhlIDgtYml0IHJlYWQgdmFsdWUgaXMNCj4gKyByZXR1cm5lZC4g VGhpcyBmdW5jdGlvbiBtdXN0IGd1YXJhbnRlZSB0aGF0IGFsbCBUUE0NCj4gcmVhZCBhbmQgd3Jp dGUNCj4gKyBvcGVyYXRpb25zIGFyZSBzZXJpYWxpemVkLg0KPiArDQo+ICsgSWYgOC1iaXQgVFBN IHJlZ2lzdGVyIG9wZXJhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQsDQo+IHRoZW4gQVNTRVJUKCku DQo+ICsNCj4gKyBAcGFyYW0gQWRkcmVzcyBUaGUgVFBNIHJlZ2lzdGVyIHRvIHJlYWQuDQo+ICsN Cj4gKyBAcmV0dXJuIFRoZSB2YWx1ZSByZWFkLg0KPiArDQo+ICsqKi8NCj4gK1VJTlQ4DQo+ICtF RklBUEkNCj4gK1RwbVJlYWQ4ICgNCj4gKyBJTiBVSU5UTiBBZGRyZXNzDQo+ICsgKQ0KPiArew0K PiArIHJldHVybiBNbWlvUmVhZDggKEFkZHJlc3MpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyBX cml0ZXMgYW4gOC1iaXQgVFBNIHJlZ2lzdGVyLg0KPiArDQo+ICsgV3JpdGVzIHRoZSA4LWJpdCBU UE0gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFkZHJlc3MNCj4gd2l0aCB0aGUgdmFsdWUgc3BlY2lm aWVkDQo+ICsgYnkgVmFsdWUgYW5kIHJldHVybnMgVmFsdWUuIFRoaXMgZnVuY3Rpb24gbXVzdA0K PiBndWFyYW50ZWUgdGhhdCBhbGwgVFBNIHJlYWQNCj4gKyBhbmQgd3JpdGUgb3BlcmF0aW9ucyBh cmUgc2VyaWFsaXplZC4NCj4gKw0KPiArIElmIDgtYml0IFRQTSByZWdpc3RlciBvcGVyYXRpb25z IGFyZSBub3Qgc3VwcG9ydGVkLA0KPiB0aGVuIEFTU0VSVCgpLg0KPiArDQo+ICsgQHBhcmFtIEFk ZHJlc3MgVGhlIFRQTSByZWdpc3RlciB0byB3cml0ZS4NCj4gKyBAcGFyYW0gVmFsdWUgVGhlIHZh bHVlIHRvIHdyaXRlIHRvIHRoZSBUUE0NCj4gcmVnaXN0ZXIuDQo+ICsNCj4gKyBAcmV0dXJuIFZh bHVlLg0KPiArDQo+ICsqKi8NCj4gK1VJTlQ4DQo+ICtFRklBUEkNCj4gK1RwbVdyaXRlOCAoDQo+ ICsgSU4gVUlOVE4gQWRkcmVzcywNCj4gKyBJTiBVSU5UOCBWYWx1ZQ0KPiArICkNCj4gK3sNCj4g KyByZXR1cm4gTW1pb1dyaXRlOCAoQWRkcmVzcywgVmFsdWUpOw0KPiArfQ0KPiArDQo+ICsNCj4g Ky8qKg0KPiArIFJlYWRzIGEgMTYtYml0IFRQTSByZWdpc3Rlci4NCj4gKw0KPiArIFJlYWRzIHRo ZSAxNi1iaXQgVFBNIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBBZGRyZXNzLg0KPiBUaGUgMTYtYml0 IHJlYWQgdmFsdWUgaXMNCj4gKyByZXR1cm5lZC4gVGhpcyBmdW5jdGlvbiBtdXN0IGd1YXJhbnRl ZSB0aGF0IGFsbCBUUE0NCj4gcmVhZCBhbmQgd3JpdGUNCj4gKyBvcGVyYXRpb25zIGFyZSBzZXJp YWxpemVkLg0KPiArDQo+ICsgSWYgMTYtYml0IFRQTSByZWdpc3RlciBvcGVyYXRpb25zIGFyZSBu b3Qgc3VwcG9ydGVkLA0KPiB0aGVuIEFTU0VSVCgpLg0KPiArIElmIEFkZHJlc3MgaXMgbm90IGFs aWduZWQgb24gYSAxNi1iaXQgYm91bmRhcnksIHRoZW4NCj4gQVNTRVJUKCkuDQo+ICsNCj4gKyBA cGFyYW0gQWRkcmVzcyBUaGUgVFBNIHJlZ2lzdGVyIHRvIHJlYWQuDQo+ICsNCj4gKyBAcmV0dXJu IFRoZSB2YWx1ZSByZWFkLg0KPiArDQo+ICsqKi8NCj4gK1VJTlQxNg0KPiArRUZJQVBJDQo+ICtU cG1SZWFkMTYgKA0KPiArIElOIFVJTlROIEFkZHJlc3MNCj4gKyApDQo+ICt7DQo+ICsgcmV0dXJu IE1taW9SZWFkMTYgKEFkZHJlc3MpOw0KPiArfQ0KPiArDQo+ICsNCj4gKy8qKg0KPiArIFdyaXRl cyBhIDE2LWJpdCBUUE0gcmVnaXN0ZXIuDQo+ICsNCj4gKyBXcml0ZXMgdGhlIDE2LWJpdCBUUE0g cmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFkZHJlc3MNCj4gd2l0aCB0aGUgdmFsdWUgc3BlY2lmaWVk DQo+ICsgYnkgVmFsdWUgYW5kIHJldHVybnMgVmFsdWUuIFRoaXMgZnVuY3Rpb24gbXVzdA0KPiBn dWFyYW50ZWUgdGhhdCBhbGwgVFBNIHJlYWQNCj4gKyBhbmQgd3JpdGUgb3BlcmF0aW9ucyBhcmUg c2VyaWFsaXplZC4NCj4gKw0KPiArIElmIDE2LWJpdCBUUE0gcmVnaXN0ZXIgb3BlcmF0aW9ucyBh cmUgbm90IHN1cHBvcnRlZCwNCj4gdGhlbiBBU1NFUlQoKS4NCj4gKyBJZiBBZGRyZXNzIGlzIG5v dCBhbGlnbmVkIG9uIGEgMTYtYml0IGJvdW5kYXJ5LCB0aGVuDQo+IEFTU0VSVCgpLg0KPiArDQo+ ICsgQHBhcmFtIEFkZHJlc3MgVGhlIFRQTSByZWdpc3RlciB0byB3cml0ZS4NCj4gKyBAcGFyYW0g VmFsdWUgVGhlIHZhbHVlIHRvIHdyaXRlIHRvIHRoZSBUUE0NCj4gcmVnaXN0ZXIuDQo+ICsNCj4g KyBAcmV0dXJuIFZhbHVlLg0KPiArDQo+ICsqKi8NCj4gK1VJTlQxNg0KPiArRUZJQVBJDQo+ICtU cG1Xcml0ZTE2ICgNCj4gKyBJTiBVSU5UTiBBZGRyZXNzLA0KPiArIElOIFVJTlQxNiBWYWx1ZQ0K PiArICkNCj4gK3sNCj4gKyByZXR1cm4gTW1pb1dyaXRlMTYgKEFkZHJlc3MsIFZhbHVlKTsNCj4g K30NCj4gKw0KPiArLyoqDQo+ICsgUmVhZHMgYSAzMi1iaXQgVFBNIHJlZ2lzdGVyLg0KPiArDQo+ ICsgUmVhZHMgdGhlIDMyLWJpdCBUUE0gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFkZHJlc3MuDQo+ IFRoZSAzMi1iaXQgcmVhZCB2YWx1ZSBpcw0KPiArIHJldHVybmVkLiBUaGlzIGZ1bmN0aW9uIG11 c3QgZ3VhcmFudGVlIHRoYXQgYWxsIFRQTQ0KPiByZWFkIGFuZCB3cml0ZQ0KPiArIG9wZXJhdGlv bnMgYXJlIHNlcmlhbGl6ZWQuDQo+ICsNCj4gKyBJZiAzMi1iaXQgVFBNIHJlZ2lzdGVyIG9wZXJh dGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQsDQo+IHRoZW4gQVNTRVJUKCkuDQo+ICsgSWYgQWRkcmVz cyBpcyBub3QgYWxpZ25lZCBvbiBhIDMyLWJpdCBib3VuZGFyeSwgdGhlbg0KPiBBU1NFUlQoKS4N Cj4gKw0KPiArIEBwYXJhbSBBZGRyZXNzIFRoZSBUUE0gcmVnaXN0ZXIgdG8gcmVhZC4NCj4gKw0K PiArIEByZXR1cm4gVGhlIHZhbHVlIHJlYWQuDQo+ICsNCj4gKyoqLw0KPiArVUlOVDMyDQo+ICtF RklBUEkNCj4gK1RwbVJlYWQzMiAoDQo+ICsgSU4gVUlOVE4gQWRkcmVzcw0KPiArICkNCj4gK3sN Cj4gKyByZXR1cm4gTW1pb1JlYWQzMiAoQWRkcmVzcyk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiAr IFdyaXRlcyBhIDMyLWJpdCBUUE0gcmVnaXN0ZXIuDQo+ICsNCj4gKyBXcml0ZXMgdGhlIDMyLWJp dCBUUE0gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFkZHJlc3MNCj4gd2l0aCB0aGUgdmFsdWUgc3Bl Y2lmaWVkDQo+ICsgYnkgVmFsdWUgYW5kIHJldHVybnMgVmFsdWUuIFRoaXMgZnVuY3Rpb24gbXVz dA0KPiBndWFyYW50ZWUgdGhhdCBhbGwgVFBNIHJlYWQNCj4gKyBhbmQgd3JpdGUgb3BlcmF0aW9u cyBhcmUgc2VyaWFsaXplZC4NCj4gKw0KPiArIElmIDMyLWJpdCBUUE0gcmVnaXN0ZXIgb3BlcmF0 aW9ucyBhcmUgbm90IHN1cHBvcnRlZCwNCj4gdGhlbiBBU1NFUlQoKS4NCj4gKyBJZiBBZGRyZXNz IGlzIG5vdCBhbGlnbmVkIG9uIGEgMzItYml0IGJvdW5kYXJ5LCB0aGVuDQo+IEFTU0VSVCgpLg0K PiArDQo+ICsgQHBhcmFtIEFkZHJlc3MgVGhlIFRQTSByZWdpc3RlciB0byB3cml0ZS4NCj4gKyBA cGFyYW0gVmFsdWUgVGhlIHZhbHVlIHRvIHdyaXRlIHRvIHRoZSBUUE0NCj4gcmVnaXN0ZXIuDQo+ ICsNCj4gKyBAcmV0dXJuIFZhbHVlLg0KPiArDQo+ICsqKi8NCj4gK1VJTlQzMg0KPiArRUZJQVBJ DQo+ICtUcG1Xcml0ZTMyICgNCj4gKyBJTiBVSU5UTiBBZGRyZXNzLA0KPiArIElOIFVJTlQzMiBW YWx1ZQ0KPiArICkNCj4gK3sNCj4gKyByZXR1cm4gTW1pb1dyaXRlMzIgKEFkZHJlc3MsIFZhbHVl KTsNCj4gK30NCj4gKw0KPiArDQo+ICsvKioNCj4gKyBSZWFkcyBhIDY0LWJpdCBUUE0gcmVnaXN0 ZXIuDQo+ICsNCj4gKyBSZWFkcyB0aGUgNjQtYml0IFRQTSByZWdpc3RlciBzcGVjaWZpZWQgYnkg QWRkcmVzcy4NCj4gVGhlIDY0LWJpdCByZWFkIHZhbHVlIGlzDQo+ICsgcmV0dXJuZWQuIFRoaXMg ZnVuY3Rpb24gbXVzdCBndWFyYW50ZWUgdGhhdCBhbGwgVFBNDQo+IHJlYWQgYW5kIHdyaXRlDQo+ ICsgb3BlcmF0aW9ucyBhcmUgc2VyaWFsaXplZC4NCj4gKw0KPiArIElmIDY0LWJpdCBUUE0gcmVn aXN0ZXIgb3BlcmF0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCwNCj4gdGhlbiBBU1NFUlQoKS4NCj4g KyBJZiBBZGRyZXNzIGlzIG5vdCBhbGlnbmVkIG9uIGEgNjQtYml0IGJvdW5kYXJ5LCB0aGVuDQo+ IEFTU0VSVCgpLg0KPiArDQo+ICsgQHBhcmFtIEFkZHJlc3MgVGhlIFRQTSByZWdpc3RlciB0byBy ZWFkLg0KPiArDQo+ICsgQHJldHVybiBUaGUgdmFsdWUgcmVhZC4NCj4gKw0KPiArKiovDQo+ICtV SU5UNjQNCj4gK0VGSUFQSQ0KPiArVHBtUmVhZDY0ICgNCj4gKyBJTiBVSU5UTiBBZGRyZXNzDQo+ ICsgKQ0KPiArew0KPiArIHJldHVybiBNbWlvUmVhZDY0IChBZGRyZXNzKTsNCj4gK30NCj4gKw0K PiArLyoqDQo+ICsgV3JpdGVzIGEgNjQtYml0IFRQTSByZWdpc3Rlci4NCj4gKw0KPiArIFdyaXRl cyB0aGUgNjQtYml0IFRQTSByZWdpc3RlciBzcGVjaWZpZWQgYnkgQWRkcmVzcw0KPiB3aXRoIHRo ZSB2YWx1ZSBzcGVjaWZpZWQNCj4gKyBieSBWYWx1ZSBhbmQgcmV0dXJucyBWYWx1ZS4gVGhpcyBm dW5jdGlvbiBtdXN0DQo+IGd1YXJhbnRlZSB0aGF0IGFsbCBUUE0gcmVhZA0KPiArIGFuZCB3cml0 ZSBvcGVyYXRpb25zIGFyZSBzZXJpYWxpemVkLg0KPiArDQo+ICsgSWYgNjQtYml0IFRQTSByZWdp c3RlciBvcGVyYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkLA0KPiB0aGVuIEFTU0VSVCgpLg0KPiAr IElmIEFkZHJlc3MgaXMgbm90IGFsaWduZWQgb24gYSA2NC1iaXQgYm91bmRhcnksIHRoZW4NCj4g QVNTRVJUKCkuDQo+ICsNCj4gKyBAcGFyYW0gQWRkcmVzcyBUaGUgVFBNIHJlZ2lzdGVyIHRvIHdy aXRlLg0KPiArIEBwYXJhbSBWYWx1ZSBUaGUgdmFsdWUgdG8gd3JpdGUgdG8gdGhlIFRQTQ0KPiBy ZWdpc3Rlci4NCj4gKw0KPiArKiovDQo+ICtVSU5UNjQNCj4gK0VGSUFQSQ0KPiArVHBtV3JpdGU2 NCAoDQo+ICsgSU4gVUlOVE4gQWRkcmVzcywNCj4gKyBJTiBVSU5UNjQgVmFsdWUNCj4gKyApDQo+ ICt7DQo+ICsgcmV0dXJuIE1taW9Xcml0ZTY0IChBZGRyZXNzLCBWYWx1ZSk7DQo+ICt9DQo+IGRp ZmYgLS1naXQNCj4gYS9TZWN1cml0eVBrZy9MaWJyYXJ5L1RwbUlvTGliTW1pby9UcG1Jb0xpYk1t aW8uaW5mDQo+IGIvU2VjdXJpdHlQa2cvTGlicmFyeS9UcG1Jb0xpYk1taW8vVHBtSW9MaWJNbWlv LmluZg0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwLi5hNDBmOTBlDQo+ IC0tLSAvZGV2L251bGwNCj4gKysrIGIvU2VjdXJpdHlQa2cvTGlicmFyeS9UcG1Jb0xpYk1taW8v VHBtSW9MaWJNbWlvLmluZg0KPiBAQCAtMCwwICsxLDQxIEBADQo+ICsjIyBAZmlsZQ0KPiArIyBQ cm92aWRlcyBCYXNlQ3J5cHRvIFNIQTEgaGFzaCBzZXJ2aWNlDQo+ICsjDQo+ICsjIFRoaXMgbGli cmFyeSBpcyB0byBhYnN0cmFjdCBUUE0yIHJlZ2lzdGVyIGFjY2Vzc2VzDQo+IHNvIHRoYXQgYSBj b21tb24NCj4gKyMgaW50ZXJmYWNlIGNhbiBiZSB1c2VkIGZvciBtdWx0aXBsZSB1bmRlcmx5aW5n DQo+IGJ1c3NlcyBzdWNoIGFzIFRQTSwNCj4gKyMgU1BJLCBvciBJMkMgYWNjZXNzLg0KPiArIw0K PiArIyBDb3B5cmlnaHQgKGMpIDIwMTggSFAgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLg0KPiAr IyBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+ICsjIGFyZSBs aWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZA0KPiBjb25kaXRp b25zIG9mIHRoZSBCU0QgTGljZW5zZQ0KPiArIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3Ry aWJ1dGlvbi4gVGhlIGZ1bGwgdGV4dA0KPiBvZiB0aGUgbGljZW5zZSBtYXkgYmUgZm91bmQgYXQN Cj4gKyMgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPiAr IyBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04NCj4g QU4gIkFTIElTIiBCQVNJUywNCj4gKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFU SU9OUyBPRiBBTlkgS0lORCwNCj4gRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRC4NCj4gKyMNCj4g KyMjDQo+ICsNCj4gK1tEZWZpbmVzXQ0KPiArIElORl9WRVJTSU9OID0gMHgwMDAxMDAwNQ0KPiAr IEJBU0VfTkFNRSA9IFRwbUlvTGliTW1pbw0KPiArIEZJTEVfR1VJRCA9IEI1MURFMEM2LThBNDgt NEFGOS0NCj4gQkY4OC01QTQ2Q0M4NTNGQzgNCj4gKyBNT0RVTEVfVFlQRSA9IEJBU0UNCj4gKyBW RVJTSU9OX1NUUklORyA9IDEuMA0KPiArIExJQlJBUllfQ0xBU1MgPSBOVUxMDQo+ICsNCj4gKyMN Cj4gKyMgVGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBpcyBmb3IgcmVmZXJlbmNlIG9ubHkgYW5k DQo+IG5vdCByZXF1aXJlZCBieSB0aGUgYnVpbGQgdG9vbHMuDQo+ICsjDQo+ICsjIFZBTElEX0FS Q0hJVEVDVFVSRVMgPSBJQTMyIFg2NCBBUk0NCj4gQUFSQ0g2NA0KPiArIw0KPiArDQo+ICtbU291 cmNlc10NCj4gKyBUcG1Jb0xpYk1taW8uYw0KPiArDQo+ICtbUGFja2FnZXNdDQo+ICsgTWRlUGtn L01kZVBrZy5kZWMNCj4gKyBTZWN1cml0eVBrZy9TZWN1cml0eVBrZy5kZWMNCj4gKw0KPiArW0xp YnJhcnlDbGFzc2VzXQ0KPiArIEJhc2VMaWINCj4gKyBJb0xpYg0KPiAtLQ0KPiAyLjcuNA0KPg0K PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KPiBlZGsy LWRldmVsIG1haWxpbmcgbGlzdA0KPiBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZzxtYWlsdG86ZWRr Mi1kZXZlbEBsaXN0cy4wMS5vcmc+DQo+IGh0dHBzOi8vbGlzdHMuMDEub3JnL21haWxtYW4vbGlz dGluZm8vZWRrMi1kZXZlbA0K