From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.126; helo=mga18.intel.com; envelope-from=chao.b.zhang@intel.com; receiver=edk2-devel@lists.01.org Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) (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 8F0072119172A for ; Thu, 15 Nov 2018 06:30:30 -0800 (PST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 15 Nov 2018 06:30:30 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,236,1539673200"; d="scan'208,217";a="100494898" Received: from fmsmsx108.amr.corp.intel.com ([10.18.124.206]) by orsmga003.jf.intel.com with ESMTP; 15 Nov 2018 06:30:29 -0800 Received: from fmsmsx158.amr.corp.intel.com (10.18.116.75) by FMSMSX108.amr.corp.intel.com (10.18.124.206) with Microsoft SMTP Server (TLS) id 14.3.408.0; Thu, 15 Nov 2018 06:30:29 -0800 Received: from shsmsx103.ccr.corp.intel.com (10.239.4.69) by fmsmsx158.amr.corp.intel.com (10.18.116.75) with Microsoft SMTP Server (TLS) id 14.3.408.0; Thu, 15 Nov 2018 06:30:28 -0800 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.84]) by SHSMSX103.ccr.corp.intel.com ([169.254.4.161]) with mapi id 14.03.0415.000; Thu, 15 Nov 2018 22:30:25 +0800 From: "Zhang, Chao B" To: "Cohen, Eugene" , "Kinney, Michael D" , "edk2-devel@lists.01.org" , "Yao, Jiewen" CC: "Bin, Sung-Uk (???)" Thread-Topic: [PATCH 3/4] SecurityPkg: add TpmIoLibMmio instance Thread-Index: AdR7nYTa2kHXzqxsRUyIavAWgtxLkAABiLTgAACfbXAAAtyyEAACXJPAABpUw/AAMnOiEA== Date: Thu, 15 Nov 2018 14:30:25 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ctpclassification: CTP_NT x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMTE1M2E5MjktY2NmNS00MTk4LTkzZjYtOTAyNGQzYTA2MDFhIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoia1pFOVNERjk5K3dcL01aRjlPZTJQYnB3ZUtoXC9Xa3RlSlZXdTV4UkdTeUNJQURBeWU0RjA0ZUFUdkNtYWZod1U3In0= dlp-product: dlpe-windows dlp-version: 11.0.400.15 dlp-reaction: no-action x-originating-ip: [10.239.127.40] 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: Thu, 15 Nov 2018 14:30:31 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgRXVnZW5lOg0KICAgICBUcG1Jb0xpYiBpcyBkZXNpZ25lZCB0byBhYnN0cmFjdCB0aGUgdmFy aW91cyB3YXlzIG9mIGFjY2VzcyhNTUlPL1NQSS9JMkMgR1BJTyBwcm9ncmFtaW5n4oCm4oCmKSB0 byBUUE0gcmVnaXN0ZXIgc3BhY2UuIEZyb20gbXkgcGVyc3BlY3RpdmUsIEl0IGlzIG5lY2Vzc2Fy eSB0byBoYXZlIGxpYnJhcnkgaW50ZXJmYWNlIHdlbGwgZGVzaWduZWQgdG8gZml0IGFsbCB0aGUg Y2FzZXMgd2UgY2FuIHNlZS4NCg0KRnJvbTogQ29oZW4sIEV1Z2VuZSBbbWFpbHRvOmV1Z2VuZUBo cC5jb21dDQpTZW50OiBXZWRuZXNkYXksIE5vdmVtYmVyIDE0LCAyMDE4IDEwOjU5IFBNDQpUbzog WmhhbmcsIENoYW8gQiA8Y2hhby5iLnpoYW5nQGludGVsLmNvbT47IEtpbm5leSwgTWljaGFlbCBE IDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT47IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnOyBZ YW8sIEppZXdlbiA8amlld2VuLnlhb0BpbnRlbC5jb20+DQpDYzogQmluLCBTdW5nLVVrICjruYjs hLHsmrEpIDxzdW5ndWstYmluQGhwLmNvbT4NClN1YmplY3Q6IFJFOiBbUEFUQ0ggMy80XSBTZWN1 cml0eVBrZzogYWRkIFRwbUlvTGliTW1pbyBpbnN0YW5jZQ0KDQpNaWtlLCBDaGFvLCBKaWV3ZW4N Cg0Kw5ggIFtDaGFvXSBJbmZpbmVvbiBjaGlwIG1lbnRpb25lZCBieSBNaWtlIGlzIGFuIGV4YW1w bGUgYnV0IGl0cyByZWdpc3RlciBzcGFjZSBkb2VzbuKAmXQgY29tcGx5IHRvIFBUUCBzcGVjDQrD mCAgW01pa2VdIE15IGV4cGVyaWVuY2UgaXMgd2l0aCBEVFBNIGFuZCBzb21lIEkyQyBUUE1zIGF0 IDEuMiBsZXZlbC4NCg0KV2UgaGF2ZSBleHBlcmllbmNlIHdpdGggdGhlIFRQTSAxLjIgSW5maW5l b24gSTJDIGRldmljZSBhbmQgdXNlZCBhIGNvbXBsZXRlbHkgY3VzdG9tIHNvbHV0aW9uLiAgQnV0 IEkgdGhpbmsgdGhhdCBtYXkgYmUgYSAxLjIgdmVyc3VzIDIuMCBkaWZmZXJlbmNlLiAgSSBnZXQg dGhlIGltcHJlc3Npb24gdGhhdCBUQ0cgY2xlYW5lZCB1cCB0aGVpciBhY3QgYSBiaXQgZm9yIHRo ZSAyLjAgc3BlYyDigJMgaW4gZmFjdCB3ZSBjYW4gc2VlIHRleHQgdG8gdGhpcyBlZmZlY3QgaW4g dGhlIFBUUCAxLjAzIHNwZWM8aHR0cHM6Ly90cnVzdGVkY29tcHV0aW5nZ3JvdXAub3JnL3dwLWNv bnRlbnQvdXBsb2Fkcy9UQ0dfUENfQ2xpZW50X1BsYXRmb3JtX1RQTV9Qcm9maWxlX1BUUF8yLjBf cjEuMDNfdjIyLnBkZj4gU2VjaXRvbiAyLjM6DQoNClRoZSBDUkIgSW50ZXJmYWNlIGlzIGludGVu ZGVkIHRvIGJlIHBoeXNpY2FsLWJ1cyBhZ25vc3RpYywgc28gdGhhdCBpdCBjb3VsZA0KYmUgaW1w bGVtZW50ZWQgb24gYW4gTFBDIG9yIFNQSSBpbnRlcmZhY2UsIGFzIHNwZWNpZmllZCBpbiB0aGlz IHNwZWNpZmljYXRpb24gb3Igb24NCmFub3RoZXIgcGh5c2ljYWwgaW50ZXJmYWNlIG5vdCBzcGVj aWZpZWQuDQoNClJlYWRpbmcgYSBiaXQgZGVlcGVyIGluIHRoZSBQVFAgc3BlYyBpdCBsb29rcyBs aWtlIHRoZXJlIGFyZSB0d28gcmVnaXN0ZXIgbGF5b3V0cyBidXQgbm90IGRyaXZlbiBieSB0aGUg cGh5c2ljYWwgYnVzIChMUEMsIFNQSSwgSTJDKSBidXQgcmF0aGVyIHRoZSBhY2Nlc3MgbWV0aG9k IChGSUZPIG9yIENSQiBhY2Nlc3MgbW9kZSkg4oCTIHNlZSBzZWN0aW9uIDUuMy4yIGNhbGxlZCAi UmVnaXN0ZXIgU3BhY2UgQWRkcmVzc2VzIiB0byBzZWUgdGhlIEZJRk8gYW5kIENSQiByZWdpc3Rl ciBsYXlvdXRzIGp1eHRhcG9zZWQuDQoNCkxvb2tpbmcgYXQgSTJDIGluIHRoZSBQVFAgc3BlYyBJ IGNhbiBub3cgc2VlIHRoZSBzaXR1YXRpb24gaXMgdG90YWxseSBkaWZmZXJlbnQg4oCTIEkyQyB1 c2VzIGEgdmFyaWF0aW9uIG9mIEZJRk8gbW9kZSBhbmQgaGFzIGEgc2lnbmlmaWNhbnRseSBkaWZm ZXJlbnQgbGF5b3V0IG9mIHJlZ2lzdGVycywgY29tcGFyaW5nIFRhYmxlIDEwIHRvIFRhYmxlIDQ4 IGluIHRoZSBQVFAgc3BlYy4gIFNvIG5vdyBJIHNlZSB3aGVyZSB5b3UncmUgY29taW5nIGZyb20g KGFuZCB3aHkgd2UgZGlkbid0IGluaXRpYWxseSB1bmRlcnN0YW5kIHRoZSBjb25jZXJuKS4NCg0K DQpHaXZlbiB0aGF0IEhQJ3MgdXNlIGNhc2UgaXMgU1BJIGFuZCBTUEkgaXMgYWxpZ25lZCB0byBM UEMsIHdlIGJlbGlldmUgZ29pbmcgZm9yd2FyZCB3aXRoIHRoZSBUcG1Jb0xpYiBhYnN0cmFjdGlv biBpcyBzdGlsbCBxdWl0ZSB1c2VmdWwuICBXaGVuZXZlciBzb21lYm9keSBuZWVkcyB0byBzdXBw b3J0IEkyQyBUUE0yIGRldmljZXMgdGhlbiB0aGV5IHdpbGwgbmVlZCB0byBhdXRob3IgYW5vdGhl ciBEZXZpY2VMaWIgaW5zdGFuY2Ugc2luY2UgdGhlIHJlZ2lzdGVyIGxheW91dCBpcyBkaWZmZXJl bnQuICAoV2lsbCB0aGVyZSBldmVyIGJlIGEgUXVhcmsgd2l0aCBhbiBJMkMgVFBNMj8pDQoNClRQ TSBleHBlcnRzLCBJJ2QgYXBwcmVjaWF0ZSBpZiB5b3UgY291bGQgY29uZmlybSB0aGF0IG15IGFu YWx5c2lzIG9mIExQQy9JMkMvU1BJIGFuZCBDUkIvRklGTyBpcyBjb3JyZWN0Lg0KDQoNCsOYICBb TWlrZV0gSSB3b3VsZCByZWNvbW1lbmQgdGhhdCBhIGZ1bGwgaW1wbGVtZW50YXRpb24gb2YgVHBt SW9MaWIgZm9yIGEgZmV3IG5vbiBNTUlPIFRQTSBkZXZpY2VzIGJlIGNvbXBsZXRlZCBhbmQgcGFz cyB2YWxpZGF0aW9uIGJlZm9yZSB3ZSBjb25zaWRlciBhZGRpbmcgbmV3IGxpYiBjbGFzcyB0byBl ZGsyLiAgUGVyaGFwcyB1c2luZyBhbiBlZGsyLXN0YWdpbmcgYnJhbmNoIHdvdWxkIGJlIGEgYmV0 dGVyIHBsYWNlIHRvIHN0YXJ0IGFuZCB5b3UgY2FuIGRvY3VtZW50IGluIHRoZSBSZWFkbWUubWQg dGhlIGNyaXRlcmlhIHRoYXQgbXVzdCBiZSBtZXQgYmVmb3JlIHRoZSBuZXcgbGliIGNsYXNzIG1l ZXRzIHRoZSByZXF1aXJlbWVudHMgZm9yIGVkazIvbWFzdGVyLg0KDQpUaGlzIHBsYW4gaXMgZmlu ZSBieSBtZSDigJMgb3VyIGludGVudCBpbiB0aGUgb3JpZ2luYWwgUmVxdWVzdCBmb3IgQ29tbWVu dCBlbWFpbHMgd2FzIHRvIHVuZGVyc3RhbmQgaWYgYSBUcG1Jb0xpYiBzdHlsZSBhYnN0cmFjdGlv biB3b3VsZCBiZSBhY2NlcHRhYmxlIHRvIHNhdmUgdXMgdGhlIHdvcmsgb2YgZ29pbmcgZG93biBh IHBhdGggdGhhdCBjYW4ndCBiZSB1cHN0cmVhbWVkIGFuZCBoYXZpbmcgdG8gZml4IGl0IGxhdGVy LiAgSSB0aGluayB0aGUgYW5zd2VyIHlvdSBhcmUgZ2l2aW5nIGlzICJ5ZXMsIGFzIGxvbmcgYXMg aXQgcmVhbGx5IHdvcmtzIi4gIFdlIGFyZSBkZXZlbG9waW5nIGFuZCB2YWxpZGF0aW5nIHRoaXMg c3VwcG9ydCByaWdodCBub3cgc28gYXMgbG9uZyBhcyB0aGUgVFBNIHN0YWNrIGRvZXNuJ3QgY2hh bmdlIG91dCBmcm9tIHVuZGVyIHVzIG9uIGVkazIvbWFzdGVyIHdoaWxlIHdlIGFyZSBkZXZlbG9w aW5nIGl0IHNob3VsZCBiZSBzdHJhaWdodGZvcndhcmQgdG8gdXBzdHJlYW0gdGhlIHBvcnRpb25z IHdlIGNhbiBzaGFyZSBhbmQgdGhlIHJlc3VsdHMsIHNvIGxvbmcgYXMgaXQgaXMgdW5kZXJzdG9v ZCB0aGF0IHdlIGNhbm5vdCB1cHN0cmVhbSB0aGUgZnVsbCBzdGFjayBkdWUgdG8gdGhlIHByb3By aWV0YXJ5IEhXIGVsZW1lbnRzIOKAkyBhcyBzdWNoIEknbSBub3Qgc3VyZSBob3cgdXNlZnVsIHRo ZSBzdGFnaW5nIGJyYW5jaCB3b3VsZCBiZSBhbHRob3VnaCBJIGRvbid0IG1pbmQgZG9pbmcgaXQu ICAoSW4gZmFjdCBJIHRoaW5rIGJyYW5jaC1iYXNlZCBwdWxsIHJlcXVlc3RzIGFyZSBtb3JlIHJl dmlld2FibGUgdGhhbiBlbWFpbCBwYXRjaHNldHMgYnV0IEkgdGhpbmsgSSBtYXkgYmUgaW4gdGhl IG1pbm9yaXR5IG9uIHRoaXMgbWFpbGluZyBsaXN0KS4NCg0KVGhhbmtzLA0KDQpFdWdlbmUNCg0K DQpGcm9tOiBaaGFuZywgQ2hhbyBCIDxjaGFvLmIuemhhbmdAaW50ZWwuY29tPG1haWx0bzpjaGFv LmIuemhhbmdAaW50ZWwuY29tPj4NClNlbnQ6IFR1ZXNkYXksIE5vdmVtYmVyIDEzLCAyMDE4IDY6 NTMgUE0NClRvOiBLaW5uZXksIE1pY2hhZWwgRCA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb208 bWFpbHRvOm1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPj47IENvaGVuLCBFdWdlbmUgPGV1Z2Vu ZUBocC5jb208bWFpbHRvOmV1Z2VuZUBocC5jb20+PjsgZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc8 bWFpbHRvOmVkazItZGV2ZWxAbGlzdHMuMDEub3JnPjsgWWFvLCBKaWV3ZW4gPGppZXdlbi55YW9A aW50ZWwuY29tPG1haWx0bzpqaWV3ZW4ueWFvQGludGVsLmNvbT4+DQpDYzogQmluLCBTdW5nLVVr ICjruYjshLHsmrEpIDxzdW5ndWstYmluQGhwLmNvbTxtYWlsdG86c3VuZ3VrLWJpbkBocC5jb20+ Pg0KU3ViamVjdDogUkU6IFtQQVRDSCAzLzRdIFNlY3VyaXR5UGtnOiBhZGQgVHBtSW9MaWJNbWlv IGluc3RhbmNlDQoNCkhpIEFsbDoNCiAgIFBUUCAxLjMgc3BlYyBhbHJlYWR5IGluY2x1ZGUgSTJD IHN1cHBvcnQuIEl0IHNlZXMgSTJDIFRQTSBjb21tdW5pY2F0aW9uIGludG8gMyBsYXllcnMNCiAg ICAgIEFwcGxpY2F0aW9uICBMYXllciAgLT4gQWxyZWFkeSBpbXBsZW1lbnRlZCBUQ0cgUEVJL1RD RyBEWEUNCiAgICAgIFRDRy1JMkMgICAgICAgICAgICAgICAgICAgLT4gIE5vdCBpbXBsZW1lbnRl ZCBieSBVRUZJIFRDRyAoSW5maW5lb24gY2hpcCBtZW50aW9uZWQgYnkgTWlrZSBpcyBhbiBleGFt cGxlIGJ1dCBpdHMgcmVnaXN0ZXIgc3BhY2UgZG9lc27igJl0IGNvbXBseSB0byBQVFAgc3BlYykN CiAgICAgICAgSTJDICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgV2hhdCBUcG1Jb0xpYiBh bHNvIG5lZWQgdG8gYWRkcmVzcw0KICAgSXQgd2lsbCBiZSBnb29kIHRvIGhhdmUgbW9yZSB1c2Ug Y2FzZXMgdG8gc2VlIGlmIFRwbUlvTGliIGlzIHN1ZmZpY2llbnRseSBkZXNpZ25lZCB0byBtZWV0 IGdlbmVyaWMgVFBNIGRldmljZXMgY292ZXJlZCBieSBUQ0cgc3BlYy4NCg0KDQpGcm9tOiBLaW5u ZXksIE1pY2hhZWwgRA0KU2VudDogV2VkbmVzZGF5LCBOb3ZlbWJlciAxNCwgMjAxOCA4OjQ0IEFN DQpUbzogQ29oZW4sIEV1Z2VuZSA8ZXVnZW5lQGhwLmNvbTxtYWlsdG86ZXVnZW5lQGhwLmNvbT4+ OyBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZzxtYWlsdG86ZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc+ OyBZYW8sIEppZXdlbiA8amlld2VuLnlhb0BpbnRlbC5jb208bWFpbHRvOmppZXdlbi55YW9AaW50 ZWwuY29tPj47IFpoYW5nLCBDaGFvIEIgPGNoYW8uYi56aGFuZ0BpbnRlbC5jb208bWFpbHRvOmNo YW8uYi56aGFuZ0BpbnRlbC5jb20+PjsgS2lubmV5LCBNaWNoYWVsIEQgPG1pY2hhZWwuZC5raW5u ZXlAaW50ZWwuY29tPG1haWx0bzptaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4+DQpDYzogQmlu LCBTdW5nLVVrICg/Pz8pIDxzdW5ndWstYmluQGhwLmNvbTxtYWlsdG86c3VuZ3VrLWJpbkBocC5j b20+Pg0KU3ViamVjdDogUkU6IFtQQVRDSCAzLzRdIFNlY3VyaXR5UGtnOiBhZGQgVHBtSW9MaWJN bWlvIGluc3RhbmNlDQoNCkhpIEV1Z2VuZSwNCg0KTXkgZXhwZXJpZW5jZSBpcyB3aXRoIERUUE0g YW5kIHNvbWUgSTJDIFRQTXMgYXQgMS4yIGxldmVsLg0KDQpPbmUgb2YgdGhlIEkyQyBUUE1zIHdh cyBzaWduaWZpY2FudGx5IGRpZmZlcmVudCwgc28gdGhlIFRwbUlvTGliIGNvbmNlcHQgZG9lcyBu b3QgYXBwbHkuDQoNClF1YXJrUGxhdGZvcm1Qa2dcTGlicmFyeVxUcG0xMkRldmljZUxpYkF0bWVs STJjDQoNClRoZSBvdGhlciBjb3VsZCBwb3RlbnRpYWxseSB1c2Ugc29tZXRoaW5nIGxpa2UgVHBt SW9MaWIsIGJ1dCBtYXkgcmVxdWlyZSBzb21lIGRpZmZlcmVudCBkZWxheXMgYW5kIHRpbWVvdXQg dmFsdWVzIHRoYW4gRFRQTS4NCg0KUXVhcmtQbGF0Zm9ybVBrZ1xMaWJyYXJ5XFRwbTEyRGV2aWNl TGliSW5maW5lb25JMmMNCg0KU28gbWF5YmUgd2Ugb2ZmZXIgMiBtZXRob2RzIHRvIHBvcnQgYSBU UE0uICBPbmNlIGlzIFRwbUlvTGliIGlmIHRoZSByZWdpc3RlciBsYXlvdXQgYW5kIHJlcXVpcmVk IGRlbGF5cyBhcmUgdGhlIHNhbWUgYXMgRFRQTSB3aXRoIHBvdGVudGlhbGx5IGEgZGlmZmVyZW50 IGJhc2UsIGFuZCB0aGUgb3RoZXIgaXMgdG8ganVzdCBpbXBsZW1lbnQgdGhlIERldmljZUxpYi4N Cg0KSSB3b3VsZCByZWNvbW1lbmQgdGhhdCBhIGZ1bGwgaW1wbGVtZW50YXRpb24gb2YgVHBtSW9M aWIgZm9yIGEgZmV3IG5vbiBNTUlPIFRQTSBkZXZpY2VzIGJlIGNvbXBsZXRlZCBhbmQgcGFzcyB2 YWxpZGF0aW9uIGJlZm9yZSB3ZSBjb25zaWRlciBhZGRpbmcgbmV3IGxpYiBjbGFzcyB0byBlZGsy LiAgUGVyaGFwcyB1c2luZyBhbiBlZGsyLXN0YWdpbmcgYnJhbmNoIHdvdWxkIGJlIGEgYmV0dGVy IHBsYWNlIHRvIHN0YXJ0IGFuZCB5b3UgY2FuIGRvY3VtZW50IGluIHRoZSBSZWFkbWUubWQgdGhl IGNyaXRlcmlhIHRoYXQgbXVzdCBiZSBtZXQgYmVmb3JlIHRoZSBuZXcgbGliIGNsYXNzIG1lZXRz IHRoZSByZXF1aXJlbWVudHMgZm9yIGVkazIvbWFzdGVyLg0KDQpNaWtlDQoNCkZyb206IENvaGVu LCBFdWdlbmUgW21haWx0bzpldWdlbmVAaHAuY29tXQ0KU2VudDogVHVlc2RheSwgTm92ZW1iZXIg MTMsIDIwMTggMzoyNCBQTQ0KVG86IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5 QGludGVsLmNvbTxtYWlsdG86bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+PjsgZWRrMi1kZXZl bEBsaXN0cy4wMS5vcmc8bWFpbHRvOmVkazItZGV2ZWxAbGlzdHMuMDEub3JnPjsgWWFvLCBKaWV3 ZW4gPGppZXdlbi55YW9AaW50ZWwuY29tPG1haWx0bzpqaWV3ZW4ueWFvQGludGVsLmNvbT4+OyBa aGFuZywgQ2hhbyBCIDxjaGFvLmIuemhhbmdAaW50ZWwuY29tPG1haWx0bzpjaGFvLmIuemhhbmdA aW50ZWwuY29tPj4NCkNjOiBCaW4sIFN1bmctVWsgKOu5iOyEseyasSkgPHN1bmd1ay1iaW5AaHAu Y29tPG1haWx0bzpzdW5ndWstYmluQGhwLmNvbT4+DQpTdWJqZWN0OiBSRTogW1BBVENIIDMvNF0g U2VjdXJpdHlQa2c6IGFkZCBUcG1Jb0xpYk1taW8gaW5zdGFuY2UNCg0KTWlrZSwNCg0KVGhlcmUg aXMgYSBwcmV2YWxlbmNlIG9mIGJhc2UgYWRkcmVzcyBub21lbmNsYXR1cmUgaW4gdGhlIERUUE0g bGlicmFyeSBsaWtlOg0KDQogICAgICAgICAgICAgICAgcmV0dXJuIFRpc1BjUmVxdWVzdFVzZVRw bSAoKFRJU19QQ19SRUdJU1RFUlNfUFRSKSAoVUlOVE4pIFBjZEdldDY0IChQY2RUcG1CYXNlQWRk cmVzcykpOw0KDQpsaWtlIGZyb20gVHBtMlRpcy5jLg0KDQrDmCAgc2hvdWxkbuKAmXQgdGhlIEFk ZHJlc3MgYmUgdGhlIHJlbGF0aXZlIGFkZHJlc3MgZnJvbSBhIGJhc2U/DQoNCkkgdGhpbmsgaXQg aXMsIHRvIHRoZSBleHRlbnQgdGhhdCB0aGUgUGNkVHBtQmFzZUFkZHJlc3MgYWxyZWFkeSBleGlz dHMuDQoNCsOYICBPciBhcmUgeW91IHVzaW5nIHRoZSBmdWxsIERUUE0gTU1JTyBhZGRyZXNzIG9u IHB1cnBvc2UgYW5kIHlvdSBleHBlY3Qgbm9uIERUUE0gTU1JTyBpbXBsZW1lbnRhdGlvbnMgdG8g dHJhbnNsYXRlIGZyb20gdGhlIERUUE0gTU1JTyBhZGRyZXNzIHRvIHRoZSBlcXVpdmFsZW50IHJl Z2lzdGVyIGFjY2VzcyBpbiBvbiBhbiBhbHRlcm5hdGUgYnVzIHR5cGU/DQoNCk15IHRob3VnaHQg aXMgdGhhdCB0aGUgUGNkVHBtQmFzZUFkZHJlc3MgY291bGQgYmUgc2V0IHRvIHplcm8gKG9yIHdo YXRldmVyIG5vbi1NTUlPIG9mZnNldCBtYWtlcyBzZW5zZSkuDQoNCsOYICBXb3VsZG4ndCBpdCBi ZSBiZXR0ZXIgdG8gaGF2ZSBhbiBhYnN0cmFjdGlvbiBmb3IgZGlmZmVyZW50IFRQTSByZWdpc3Rl cnMgYW5kIHRoZSBEVFBNIGltcGxlbWVudGF0aW9uIHdvdWxkIGNvbnZlcnQgdG8gYSBmdWxsIE1N SU8gYWRkcmVzcyBpbiB0aGUgbGliIGltcGxlbWVudGF0aW9uPw0KDQpJJ3ZlIGJlZW4gbGVkIHRv IHVuZGVyc3RhbmQgdGhhdCB0aGUgVFBNIHJlZ2lzdGVycyBhcmUgdGhlIHNhbWUgaW4gYm90aCBj YXNlcy4gIEkgaGF2ZW4ndCB2ZXJpZmllZCB0aGlzIG15c2VsZiAtIGJ1dCBpZiB5b3UgaGF2ZSBk YXRhIHRvIHRoZSBjb250cmFyeSBwbGVhc2UgbGV0IHVzIGtub3cgc28gd2Ugc3RvcCBnb2luZyBk b3duIHRoaXMgcGF0aC4NCg0KTXkgbWFpbiByZWFzb24gZm9yIHJlc2lzdGluZyBjcmVhdGluZyBh IG5ldyBsaWJyYXJ5IGF0IHRoZSBUcG0yRGV2aWNlTGliIGxheWVyIGJlY2F1c2UgdGhlIERUUE0g bGlicmFyeSBjb250YWlucyBhIGxvdCBvZiBsb2dpYyBhcm91bmQgaG93IHRvIHRhbGsgdG8gdGhl IFRQTSB0aGF0IGV4dGVuZHMgd2VsbCBiZXlvbmQgdGhlIGFjY2VzcyBtZWNoYW5pc20gdGhhdCB3 ZSB3b3VsZCBub3Qgd2FudCB0byBkdXBsaWNhdGUgdG8gYW5vdGhlciBsaWJyYXJ5IGluc3RhbmNl LiAgSSdtIGxvb2tpbmcgaW5zaWRlIFRwbTJUaXMuYyBhbmQgVHBtMlB0cC5jIHRvIGdldCB0aGlz IHBlcnNwZWN0aXZlLg0KDQpUaGFua3MsDQoNCkV1Z2VuZQ0KDQpGcm9tOiBLaW5uZXksIE1pY2hh ZWwgRCA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb208bWFpbHRvOm1pY2hhZWwuZC5raW5uZXlA aW50ZWwuY29tPj4NClNlbnQ6IFR1ZXNkYXksIE5vdmVtYmVyIDEzLCAyMDE4IDM6NTggUE0NClRv OiBDb2hlbiwgRXVnZW5lIDxldWdlbmVAaHAuY29tPG1haWx0bzpldWdlbmVAaHAuY29tPj47IGVk azItZGV2ZWxAbGlzdHMuMDEub3JnPG1haWx0bzplZGsyLWRldmVsQGxpc3RzLjAxLm9yZz47IFlh bywgSmlld2VuIDxqaWV3ZW4ueWFvQGludGVsLmNvbTxtYWlsdG86amlld2VuLnlhb0BpbnRlbC5j b20+PjsgWmhhbmcsIENoYW8gQiA8Y2hhby5iLnpoYW5nQGludGVsLmNvbTxtYWlsdG86Y2hhby5i LnpoYW5nQGludGVsLmNvbT4+OyBLaW5uZXksIE1pY2hhZWwgRCA8bWljaGFlbC5kLmtpbm5leUBp bnRlbC5jb208bWFpbHRvOm1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPj4NCkNjOiBCaW4sIFN1 bmctVWsgKOu5iOyEseyasSkgPHN1bmd1ay1iaW5AaHAuY29tPG1haWx0bzpzdW5ndWstYmluQGhw LmNvbT4+DQpTdWJqZWN0OiBSRTogW1BBVENIIDMvNF0gU2VjdXJpdHlQa2c6IGFkZCBUcG1Jb0xp Yk1taW8gaW5zdGFuY2UNCg0KRXVnZW5lLA0KDQpJdCBhcHBlYXJzIHlvdSBhcmUgZXhwZWN0aW5n IHRoZSBBZGRyZXNzIHBhcmFtZXRlcg0KdG8gYmUgdGhlIGZ1bGwgTU1JTyBhZGRyZXNzIGZvciBE VFBNLiBJZiB5b3UgYXJlDQp3YW50aW5nIHRoaXMgbGliIGNsYXNzIHRvIGFic3RyYWN0IHRoZSBh Y2Nlc3MgZm9yDQpkaWZmZXJlbnQgYnVzIHR5cGVzLCBzaG91bGRu4oCZdCB0aGUgQWRkcmVzcyBi ZSB0aGUNCnJlbGF0aXZlIGFkZHJlc3MgZnJvbSBhIGJhc2U/DQoNCk9yIGFyZSB5b3UgdXNpbmcg dGhlIGZ1bGwgRFRQTSBNTUlPIGFkZHJlc3Mgb24NCnB1cnBvc2UgYW5kIHlvdSBleHBlY3Qgbm9u IERUUE0gTU1JTyBpbXBsZW1lbnRhdGlvbnMNCnRvIHRyYW5zbGF0ZSBmcm9tIHRoZSBEVFBNIE1N SU8gYWRkcmVzcyB0byB0aGUNCmVxdWl2YWxlbnQgcmVnaXN0ZXIgYWNjZXNzIGluIG9uIGFuIGFs dGVybmF0ZSBidXMNCnR5cGU/DQoNCldvdWxkbid0IGl0IGJlIGJldHRlciB0byBoYXZlIGFuIGFi c3RyYWN0aW9uIGZvcg0KZGlmZmVyZW50IFRQTSByZWdpc3RlcnMgYW5kIHRoZSBEVFBNIGltcGxl bWVudGF0aW9uDQp3b3VsZCBjb252ZXJ0IHRvIGEgZnVsbCBNTUlPIGFkZHJlc3MgaW4gdGhlIGxp Yg0KaW1wbGVtZW50YXRpb24/DQoNClRoYW5rcywNCg0KTWlrZQ0KDQoNCj4gLS0tLS1PcmlnaW5h bCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogZWRrMi1kZXZlbCBbbWFpbHRvOmVkazItZGV2ZWwtDQo+ IGJvdW5jZXNAbGlzdHMuMDEub3JnPG1haWx0bzpib3VuY2VzQGxpc3RzLjAxLm9yZz5dIE9uIEJl aGFsZiBPZiBDb2hlbiwgRXVnZW5lDQo+IFNlbnQ6IFR1ZXNkYXksIE5vdmVtYmVyIDEzLCAyMDE4 IDI6MTMgUE0NCj4gVG86IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnPG1haWx0bzplZGsyLWRldmVs QGxpc3RzLjAxLm9yZz47IFlhbywgSmlld2VuDQo+IDxqaWV3ZW4ueWFvQGludGVsLmNvbTxtYWls dG86amlld2VuLnlhb0BpbnRlbC5jb20+PjsgWmhhbmcsIENoYW8gQg0KPiA8Y2hhby5iLnpoYW5n QGludGVsLmNvbTxtYWlsdG86Y2hhby5iLnpoYW5nQGludGVsLmNvbT4+DQo+IENjOiBCaW4sIFN1 bmctVWsgKOu5iOyEseyasSkgPHN1bmd1ay1iaW5AaHAuY29tPG1haWx0bzpzdW5ndWstYmluQGhw LmNvbT4+DQo+IFN1YmplY3Q6IFtlZGsyXSBbUEFUQ0ggMy80XSBTZWN1cml0eVBrZzogYWRkDQo+ IFRwbUlvTGliTW1pbyBpbnN0YW5jZQ0KPg0KPiBTZWN1cml0eVBrZzogYWRkIFRwbUlvTGliTW1p byBpbnN0YW5jZQ0KPg0KPiBDb250cmlidXRlZC11bmRlcjogVGlhbm9Db3JlIENvbnRyaWJ1dGlv biBBZ3JlZW1lbnQgMS4xDQo+IENjOiBDaGFvIFpoYW5nIDxjaGFvLmIuemhhbmdAaW50ZWwuY29t PG1haWx0bzpjaGFvLmIuemhhbmdAaW50ZWwuY29tPj4NCj4gQ2M6IEppZXdlbiBZYW8gPGppZXdl bi55YW9AaW50ZWwuY29tPG1haWx0bzpqaWV3ZW4ueWFvQGludGVsLmNvbT4+DQo+IFNpZ25lZC1v ZmYtYnk6IEV1Z2VuZSBDb2hlbiA8ZXVnZW5lQGhwLmNvbTxtYWlsdG86ZXVnZW5lQGhwLmNvbT4+ DQo+IC0tLQ0KPiBTZWN1cml0eVBrZy9MaWJyYXJ5L1RwbUlvTGliTW1pby9UcG1Jb0xpYk1taW8u YyB8DQo+IDIyMSArKysrKysrKysrKysrKysrKysrKw0KPiBTZWN1cml0eVBrZy9MaWJyYXJ5L1Rw bUlvTGliTW1pby9UcG1Jb0xpYk1taW8uaW5mIHwNCj4gNDEgKysrKw0KPiAyIGZpbGVzIGNoYW5n ZWQsIDI2MiBpbnNlcnRpb25zKCspDQo+DQo+IGRpZmYgLS1naXQNCj4gYS9TZWN1cml0eVBrZy9M aWJyYXJ5L1RwbUlvTGliTW1pby9UcG1Jb0xpYk1taW8uYw0KPiBiL1NlY3VyaXR5UGtnL0xpYnJh cnkvVHBtSW9MaWJNbWlvL1RwbUlvTGliTW1pby5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ IGluZGV4IDAwMDAwMDAuLjU2ZjMxODcNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9TZWN1cml0 eVBrZy9MaWJyYXJ5L1RwbUlvTGliTW1pby9UcG1Jb0xpYk1taW8uYw0KPiBAQCAtMCwwICsxLDIy MSBAQA0KPiArLyoqIEBmaWxlDQo+ICsgVGhpcyBsaWJyYXJ5IGlzIHRvIGFic3RyYWN0IFRQTTIg cmVnaXN0ZXIgYWNjZXNzZXMNCj4gc28gdGhhdCBhIGNvbW1vbg0KPiArIGludGVyZmFjZSBjYW4g YmUgdXNlZCBmb3IgbXVsdGlwbGUgdW5kZXJseWluZyBidXNzZXMNCj4gc3VjaCBhcyBUUE0sDQo+ ICsgU1BJLCBvciBJMkMgYWNjZXNzLg0KPiArDQo+ICtDb3B5cmlnaHQgKGMpIDIwMTggSFAgRGV2 ZWxvcG1lbnQgQ29tcGFueSwgTC5QLg0KPiArVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55 aW5nIG1hdGVyaWFscw0KPiArYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0 aGUgdGVybXMgYW5kDQo+IGNvbmRpdGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNlDQo+ICt3aGljaCBh Y2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIGZ1bGwgdGV4dCBvZg0KPiB0aGUgbGlj ZW5zZSBtYXkgYmUgZm91bmQgYXQNCj4gK2h0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9i c2QtbGljZW5zZS5waHANCj4gKw0KPiArVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIg VEhFIEJTRCBMSUNFTlNFIE9OIEFODQo+ICJBUyBJUyIgQkFTSVMsDQo+ICtXSVRIT1VUIFdBUlJB TlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELA0KPiBFSVRIRVIgRVhQUkVTUyBP UiBJTVBMSUVELg0KPiArDQo+ICsqKi8NCj4gKw0KPiArI2luY2x1ZGUgPEJhc2UuaD4NCj4gKw0K PiArI2luY2x1ZGUgPExpYnJhcnkvVHBtSW9MaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0lv TGliLmg+DQo+ICsNCj4gKw0KPiArDQo+ICsvKioNCj4gKyBSZWFkcyBhbiA4LWJpdCBUUE0gcmVn aXN0ZXIuDQo+ICsNCj4gKyBSZWFkcyB0aGUgOC1iaXQgVFBNIHJlZ2lzdGVyIHNwZWNpZmllZCBi eSBBZGRyZXNzLg0KPiBUaGUgOC1iaXQgcmVhZCB2YWx1ZSBpcw0KPiArIHJldHVybmVkLiBUaGlz IGZ1bmN0aW9uIG11c3QgZ3VhcmFudGVlIHRoYXQgYWxsIFRQTQ0KPiByZWFkIGFuZCB3cml0ZQ0K PiArIG9wZXJhdGlvbnMgYXJlIHNlcmlhbGl6ZWQuDQo+ICsNCj4gKyBJZiA4LWJpdCBUUE0gcmVn aXN0ZXIgb3BlcmF0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCwNCj4gdGhlbiBBU1NFUlQoKS4NCj4g Kw0KPiArIEBwYXJhbSBBZGRyZXNzIFRoZSBUUE0gcmVnaXN0ZXIgdG8gcmVhZC4NCj4gKw0KPiAr IEByZXR1cm4gVGhlIHZhbHVlIHJlYWQuDQo+ICsNCj4gKyoqLw0KPiArVUlOVDgNCj4gK0VGSUFQ SQ0KPiArVHBtUmVhZDggKA0KPiArIElOIFVJTlROIEFkZHJlc3MNCj4gKyApDQo+ICt7DQo+ICsg cmV0dXJuIE1taW9SZWFkOCAoQWRkcmVzcyk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArIFdyaXRl cyBhbiA4LWJpdCBUUE0gcmVnaXN0ZXIuDQo+ICsNCj4gKyBXcml0ZXMgdGhlIDgtYml0IFRQTSBy ZWdpc3RlciBzcGVjaWZpZWQgYnkgQWRkcmVzcw0KPiB3aXRoIHRoZSB2YWx1ZSBzcGVjaWZpZWQN Cj4gKyBieSBWYWx1ZSBhbmQgcmV0dXJucyBWYWx1ZS4gVGhpcyBmdW5jdGlvbiBtdXN0DQo+IGd1 YXJhbnRlZSB0aGF0IGFsbCBUUE0gcmVhZA0KPiArIGFuZCB3cml0ZSBvcGVyYXRpb25zIGFyZSBz ZXJpYWxpemVkLg0KPiArDQo+ICsgSWYgOC1iaXQgVFBNIHJlZ2lzdGVyIG9wZXJhdGlvbnMgYXJl IG5vdCBzdXBwb3J0ZWQsDQo+IHRoZW4gQVNTRVJUKCkuDQo+ICsNCj4gKyBAcGFyYW0gQWRkcmVz cyBUaGUgVFBNIHJlZ2lzdGVyIHRvIHdyaXRlLg0KPiArIEBwYXJhbSBWYWx1ZSBUaGUgdmFsdWUg dG8gd3JpdGUgdG8gdGhlIFRQTQ0KPiByZWdpc3Rlci4NCj4gKw0KPiArIEByZXR1cm4gVmFsdWUu DQo+ICsNCj4gKyoqLw0KPiArVUlOVDgNCj4gK0VGSUFQSQ0KPiArVHBtV3JpdGU4ICgNCj4gKyBJ TiBVSU5UTiBBZGRyZXNzLA0KPiArIElOIFVJTlQ4IFZhbHVlDQo+ICsgKQ0KPiArew0KPiArIHJl dHVybiBNbWlvV3JpdGU4IChBZGRyZXNzLCBWYWx1ZSk7DQo+ICt9DQo+ICsNCj4gKw0KPiArLyoq DQo+ICsgUmVhZHMgYSAxNi1iaXQgVFBNIHJlZ2lzdGVyLg0KPiArDQo+ICsgUmVhZHMgdGhlIDE2 LWJpdCBUUE0gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFkZHJlc3MuDQo+IFRoZSAxNi1iaXQgcmVh ZCB2YWx1ZSBpcw0KPiArIHJldHVybmVkLiBUaGlzIGZ1bmN0aW9uIG11c3QgZ3VhcmFudGVlIHRo YXQgYWxsIFRQTQ0KPiByZWFkIGFuZCB3cml0ZQ0KPiArIG9wZXJhdGlvbnMgYXJlIHNlcmlhbGl6 ZWQuDQo+ICsNCj4gKyBJZiAxNi1iaXQgVFBNIHJlZ2lzdGVyIG9wZXJhdGlvbnMgYXJlIG5vdCBz dXBwb3J0ZWQsDQo+IHRoZW4gQVNTRVJUKCkuDQo+ICsgSWYgQWRkcmVzcyBpcyBub3QgYWxpZ25l ZCBvbiBhIDE2LWJpdCBib3VuZGFyeSwgdGhlbg0KPiBBU1NFUlQoKS4NCj4gKw0KPiArIEBwYXJh bSBBZGRyZXNzIFRoZSBUUE0gcmVnaXN0ZXIgdG8gcmVhZC4NCj4gKw0KPiArIEByZXR1cm4gVGhl IHZhbHVlIHJlYWQuDQo+ICsNCj4gKyoqLw0KPiArVUlOVDE2DQo+ICtFRklBUEkNCj4gK1RwbVJl YWQxNiAoDQo+ICsgSU4gVUlOVE4gQWRkcmVzcw0KPiArICkNCj4gK3sNCj4gKyByZXR1cm4gTW1p b1JlYWQxNiAoQWRkcmVzcyk7DQo+ICt9DQo+ICsNCj4gKw0KPiArLyoqDQo+ICsgV3JpdGVzIGEg MTYtYml0IFRQTSByZWdpc3Rlci4NCj4gKw0KPiArIFdyaXRlcyB0aGUgMTYtYml0IFRQTSByZWdp c3RlciBzcGVjaWZpZWQgYnkgQWRkcmVzcw0KPiB3aXRoIHRoZSB2YWx1ZSBzcGVjaWZpZWQNCj4g KyBieSBWYWx1ZSBhbmQgcmV0dXJucyBWYWx1ZS4gVGhpcyBmdW5jdGlvbiBtdXN0DQo+IGd1YXJh bnRlZSB0aGF0IGFsbCBUUE0gcmVhZA0KPiArIGFuZCB3cml0ZSBvcGVyYXRpb25zIGFyZSBzZXJp YWxpemVkLg0KPiArDQo+ICsgSWYgMTYtYml0IFRQTSByZWdpc3RlciBvcGVyYXRpb25zIGFyZSBu b3Qgc3VwcG9ydGVkLA0KPiB0aGVuIEFTU0VSVCgpLg0KPiArIElmIEFkZHJlc3MgaXMgbm90IGFs aWduZWQgb24gYSAxNi1iaXQgYm91bmRhcnksIHRoZW4NCj4gQVNTRVJUKCkuDQo+ICsNCj4gKyBA cGFyYW0gQWRkcmVzcyBUaGUgVFBNIHJlZ2lzdGVyIHRvIHdyaXRlLg0KPiArIEBwYXJhbSBWYWx1 ZSBUaGUgdmFsdWUgdG8gd3JpdGUgdG8gdGhlIFRQTQ0KPiByZWdpc3Rlci4NCj4gKw0KPiArIEBy ZXR1cm4gVmFsdWUuDQo+ICsNCj4gKyoqLw0KPiArVUlOVDE2DQo+ICtFRklBUEkNCj4gK1RwbVdy aXRlMTYgKA0KPiArIElOIFVJTlROIEFkZHJlc3MsDQo+ICsgSU4gVUlOVDE2IFZhbHVlDQo+ICsg KQ0KPiArew0KPiArIHJldHVybiBNbWlvV3JpdGUxNiAoQWRkcmVzcywgVmFsdWUpOw0KPiArfQ0K PiArDQo+ICsvKioNCj4gKyBSZWFkcyBhIDMyLWJpdCBUUE0gcmVnaXN0ZXIuDQo+ICsNCj4gKyBS ZWFkcyB0aGUgMzItYml0IFRQTSByZWdpc3RlciBzcGVjaWZpZWQgYnkgQWRkcmVzcy4NCj4gVGhl IDMyLWJpdCByZWFkIHZhbHVlIGlzDQo+ICsgcmV0dXJuZWQuIFRoaXMgZnVuY3Rpb24gbXVzdCBn dWFyYW50ZWUgdGhhdCBhbGwgVFBNDQo+IHJlYWQgYW5kIHdyaXRlDQo+ICsgb3BlcmF0aW9ucyBh cmUgc2VyaWFsaXplZC4NCj4gKw0KPiArIElmIDMyLWJpdCBUUE0gcmVnaXN0ZXIgb3BlcmF0aW9u cyBhcmUgbm90IHN1cHBvcnRlZCwNCj4gdGhlbiBBU1NFUlQoKS4NCj4gKyBJZiBBZGRyZXNzIGlz IG5vdCBhbGlnbmVkIG9uIGEgMzItYml0IGJvdW5kYXJ5LCB0aGVuDQo+IEFTU0VSVCgpLg0KPiAr DQo+ICsgQHBhcmFtIEFkZHJlc3MgVGhlIFRQTSByZWdpc3RlciB0byByZWFkLg0KPiArDQo+ICsg QHJldHVybiBUaGUgdmFsdWUgcmVhZC4NCj4gKw0KPiArKiovDQo+ICtVSU5UMzINCj4gK0VGSUFQ SQ0KPiArVHBtUmVhZDMyICgNCj4gKyBJTiBVSU5UTiBBZGRyZXNzDQo+ICsgKQ0KPiArew0KPiAr IHJldHVybiBNbWlvUmVhZDMyIChBZGRyZXNzKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgV3Jp dGVzIGEgMzItYml0IFRQTSByZWdpc3Rlci4NCj4gKw0KPiArIFdyaXRlcyB0aGUgMzItYml0IFRQ TSByZWdpc3RlciBzcGVjaWZpZWQgYnkgQWRkcmVzcw0KPiB3aXRoIHRoZSB2YWx1ZSBzcGVjaWZp ZWQNCj4gKyBieSBWYWx1ZSBhbmQgcmV0dXJucyBWYWx1ZS4gVGhpcyBmdW5jdGlvbiBtdXN0DQo+ IGd1YXJhbnRlZSB0aGF0IGFsbCBUUE0gcmVhZA0KPiArIGFuZCB3cml0ZSBvcGVyYXRpb25zIGFy ZSBzZXJpYWxpemVkLg0KPiArDQo+ICsgSWYgMzItYml0IFRQTSByZWdpc3RlciBvcGVyYXRpb25z IGFyZSBub3Qgc3VwcG9ydGVkLA0KPiB0aGVuIEFTU0VSVCgpLg0KPiArIElmIEFkZHJlc3MgaXMg bm90IGFsaWduZWQgb24gYSAzMi1iaXQgYm91bmRhcnksIHRoZW4NCj4gQVNTRVJUKCkuDQo+ICsN Cj4gKyBAcGFyYW0gQWRkcmVzcyBUaGUgVFBNIHJlZ2lzdGVyIHRvIHdyaXRlLg0KPiArIEBwYXJh bSBWYWx1ZSBUaGUgdmFsdWUgdG8gd3JpdGUgdG8gdGhlIFRQTQ0KPiByZWdpc3Rlci4NCj4gKw0K PiArIEByZXR1cm4gVmFsdWUuDQo+ICsNCj4gKyoqLw0KPiArVUlOVDMyDQo+ICtFRklBUEkNCj4g K1RwbVdyaXRlMzIgKA0KPiArIElOIFVJTlROIEFkZHJlc3MsDQo+ICsgSU4gVUlOVDMyIFZhbHVl DQo+ICsgKQ0KPiArew0KPiArIHJldHVybiBNbWlvV3JpdGUzMiAoQWRkcmVzcywgVmFsdWUpOw0K PiArfQ0KPiArDQo+ICsNCj4gKy8qKg0KPiArIFJlYWRzIGEgNjQtYml0IFRQTSByZWdpc3Rlci4N Cj4gKw0KPiArIFJlYWRzIHRoZSA2NC1iaXQgVFBNIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBBZGRy ZXNzLg0KPiBUaGUgNjQtYml0IHJlYWQgdmFsdWUgaXMNCj4gKyByZXR1cm5lZC4gVGhpcyBmdW5j dGlvbiBtdXN0IGd1YXJhbnRlZSB0aGF0IGFsbCBUUE0NCj4gcmVhZCBhbmQgd3JpdGUNCj4gKyBv cGVyYXRpb25zIGFyZSBzZXJpYWxpemVkLg0KPiArDQo+ICsgSWYgNjQtYml0IFRQTSByZWdpc3Rl ciBvcGVyYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkLA0KPiB0aGVuIEFTU0VSVCgpLg0KPiArIElm IEFkZHJlc3MgaXMgbm90IGFsaWduZWQgb24gYSA2NC1iaXQgYm91bmRhcnksIHRoZW4NCj4gQVNT RVJUKCkuDQo+ICsNCj4gKyBAcGFyYW0gQWRkcmVzcyBUaGUgVFBNIHJlZ2lzdGVyIHRvIHJlYWQu DQo+ICsNCj4gKyBAcmV0dXJuIFRoZSB2YWx1ZSByZWFkLg0KPiArDQo+ICsqKi8NCj4gK1VJTlQ2 NA0KPiArRUZJQVBJDQo+ICtUcG1SZWFkNjQgKA0KPiArIElOIFVJTlROIEFkZHJlc3MNCj4gKyAp DQo+ICt7DQo+ICsgcmV0dXJuIE1taW9SZWFkNjQgKEFkZHJlc3MpOw0KPiArfQ0KPiArDQo+ICsv KioNCj4gKyBXcml0ZXMgYSA2NC1iaXQgVFBNIHJlZ2lzdGVyLg0KPiArDQo+ICsgV3JpdGVzIHRo ZSA2NC1iaXQgVFBNIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBBZGRyZXNzDQo+IHdpdGggdGhlIHZh bHVlIHNwZWNpZmllZA0KPiArIGJ5IFZhbHVlIGFuZCByZXR1cm5zIFZhbHVlLiBUaGlzIGZ1bmN0 aW9uIG11c3QNCj4gZ3VhcmFudGVlIHRoYXQgYWxsIFRQTSByZWFkDQo+ICsgYW5kIHdyaXRlIG9w ZXJhdGlvbnMgYXJlIHNlcmlhbGl6ZWQuDQo+ICsNCj4gKyBJZiA2NC1iaXQgVFBNIHJlZ2lzdGVy IG9wZXJhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQsDQo+IHRoZW4gQVNTRVJUKCkuDQo+ICsgSWYg QWRkcmVzcyBpcyBub3QgYWxpZ25lZCBvbiBhIDY0LWJpdCBib3VuZGFyeSwgdGhlbg0KPiBBU1NF UlQoKS4NCj4gKw0KPiArIEBwYXJhbSBBZGRyZXNzIFRoZSBUUE0gcmVnaXN0ZXIgdG8gd3JpdGUu DQo+ICsgQHBhcmFtIFZhbHVlIFRoZSB2YWx1ZSB0byB3cml0ZSB0byB0aGUgVFBNDQo+IHJlZ2lz dGVyLg0KPiArDQo+ICsqKi8NCj4gK1VJTlQ2NA0KPiArRUZJQVBJDQo+ICtUcG1Xcml0ZTY0ICgN Cj4gKyBJTiBVSU5UTiBBZGRyZXNzLA0KPiArIElOIFVJTlQ2NCBWYWx1ZQ0KPiArICkNCj4gK3sN Cj4gKyByZXR1cm4gTW1pb1dyaXRlNjQgKEFkZHJlc3MsIFZhbHVlKTsNCj4gK30NCj4gZGlmZiAt LWdpdA0KPiBhL1NlY3VyaXR5UGtnL0xpYnJhcnkvVHBtSW9MaWJNbWlvL1RwbUlvTGliTW1pby5p bmYNCj4gYi9TZWN1cml0eVBrZy9MaWJyYXJ5L1RwbUlvTGliTW1pby9UcG1Jb0xpYk1taW8uaW5m DQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAuLmE0MGY5MGUNCj4gLS0t IC9kZXYvbnVsbA0KPiArKysgYi9TZWN1cml0eVBrZy9MaWJyYXJ5L1RwbUlvTGliTW1pby9UcG1J b0xpYk1taW8uaW5mDQo+IEBAIC0wLDAgKzEsNDEgQEANCj4gKyMjIEBmaWxlDQo+ICsjIFByb3Zp ZGVzIEJhc2VDcnlwdG8gU0hBMSBoYXNoIHNlcnZpY2UNCj4gKyMNCj4gKyMgVGhpcyBsaWJyYXJ5 IGlzIHRvIGFic3RyYWN0IFRQTTIgcmVnaXN0ZXIgYWNjZXNzZXMNCj4gc28gdGhhdCBhIGNvbW1v bg0KPiArIyBpbnRlcmZhY2UgY2FuIGJlIHVzZWQgZm9yIG11bHRpcGxlIHVuZGVybHlpbmcNCj4g YnVzc2VzIHN1Y2ggYXMgVFBNLA0KPiArIyBTUEksIG9yIEkyQyBhY2Nlc3MuDQo+ICsjDQo+ICsj IENvcHlyaWdodCAoYykgMjAxOCBIUCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuDQo+ICsjIFRo aXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4gKyMgYXJlIGxpY2Vu c2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kDQo+IGNvbmRpdGlvbnMg b2YgdGhlIEJTRCBMaWNlbnNlDQo+ICsjIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0 aW9uLiBUaGUgZnVsbCB0ZXh0DQo+IG9mIHRoZSBsaWNlbnNlIG1heSBiZSBmb3VuZCBhdA0KPiAr IyBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+ICsjIFRI RSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTg0KPiBBTiAi QVMgSVMiIEJBU0lTLA0KPiArIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05T IE9GIEFOWSBLSU5ELA0KPiBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELg0KPiArIw0KPiArIyMN Cj4gKw0KPiArW0RlZmluZXNdDQo+ICsgSU5GX1ZFUlNJT04gPSAweDAwMDEwMDA1DQo+ICsgQkFT RV9OQU1FID0gVHBtSW9MaWJNbWlvDQo+ICsgRklMRV9HVUlEID0gQjUxREUwQzYtOEE0OC00QUY5 LQ0KPiBCRjg4LTVBNDZDQzg1M0ZDOA0KPiArIE1PRFVMRV9UWVBFID0gQkFTRQ0KPiArIFZFUlNJ T05fU1RSSU5HID0gMS4wDQo+ICsgTElCUkFSWV9DTEFTUyA9IE5VTEwNCj4gKw0KPiArIw0KPiAr IyBUaGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGlzIGZvciByZWZlcmVuY2Ugb25seSBhbmQNCj4g bm90IHJlcXVpcmVkIGJ5IHRoZSBidWlsZCB0b29scy4NCj4gKyMNCj4gKyMgVkFMSURfQVJDSElU RUNUVVJFUyA9IElBMzIgWDY0IEFSTQ0KPiBBQVJDSDY0DQo+ICsjDQo+ICsNCj4gK1tTb3VyY2Vz XQ0KPiArIFRwbUlvTGliTW1pby5jDQo+ICsNCj4gK1tQYWNrYWdlc10NCj4gKyBNZGVQa2cvTWRl UGtnLmRlYw0KPiArIFNlY3VyaXR5UGtnL1NlY3VyaXR5UGtnLmRlYw0KPiArDQo+ICtbTGlicmFy eUNsYXNzZXNdDQo+ICsgQmFzZUxpYg0KPiArIElvTGliDQo+IC0tDQo+IDIuNy40DQo+DQo+IF9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQo+IGVkazItZGV2 ZWwgbWFpbGluZyBsaXN0DQo+IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnPG1haWx0bzplZGsyLWRl dmVsQGxpc3RzLjAxLm9yZz4NCj4gaHR0cHM6Ly9saXN0cy4wMS5vcmcvbWFpbG1hbi9saXN0aW5m by9lZGsyLWRldmVsDQo=