From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by mx.groups.io with SMTP id smtpd.web12.6749.1663851272086165583 for ; Thu, 22 Sep 2022 05:54:32 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=LL5tHQeZ; spf=pass (domain: intel.com, ip: 134.134.136.65, mailfrom: yi1.li@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1663851272; x=1695387272; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=wbz+ddPy+V43N5aSt3EGE5iN/Sjdx5UpMex9u239FMY=; b=LL5tHQeZxT/BGnEXN3CD24qFAEZUyFcZcfmoyapQbC3Et+q+rAdL7/Ot oA/INd0mc6LKDyaPHkwwewnKHJd09BZHvFi+vDopbUaKoiYCf/FqpnjMh QvPg9zUDosbjPc+Z2+z2Kfd6XeoNXEcFDUizV30oRF5zCX3LUajabiXyq LCWhv1sp2xLGRWvZq/T+GTv0efh5lsM9VY37XfbAURmpi8iRiNr3HLpWi B9N2mYDDtgpNthE0nddegNiGifryiuJonESHNicWROw4fACeB5X0Jt/Ma 2mhB45+j4NibUPj0S9oJZGbBfqsF4SmXDM9HfwJ04ZyQQXVvKokOeCn2b w==; X-IronPort-AV: E=McAfee;i="6500,9779,10478"; a="301696112" X-IronPort-AV: E=Sophos;i="5.93,335,1654585200"; d="scan'208";a="301696112" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Sep 2022 05:54:31 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.93,335,1654585200"; d="scan'208";a="597420032" Received: from orsmsx603.amr.corp.intel.com ([10.22.229.16]) by orsmga006.jf.intel.com with ESMTP; 22 Sep 2022 05:54:31 -0700 Received: from orsmsx609.amr.corp.intel.com (10.22.229.22) by ORSMSX603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Thu, 22 Sep 2022 05:54:30 -0700 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx609.amr.corp.intel.com (10.22.229.22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31 via Frontend Transport; Thu, 22 Sep 2022 05:54:30 -0700 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (104.47.58.100) by edgegateway.intel.com (134.134.137.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2375.31; Thu, 22 Sep 2022 05:54:30 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=J6oBPEiLNLNAmrSn/sXFWCcp5mBMlrm7vnaHMIfZ+Z/9gb9HpBM1GegDGqqYHSoPAW4o2d7W4wT8bUH9Dqv/PkKiv94Z+MfZxok/l5/2LH5D0I1QsV1xXU1zNERqPmuNsM7DtPgUgB/Q3yTc/FjdeF54Bj/0FWvWMA28vIojS8QVWrJenG12kDtYSjYiaf1dR1eAgSgbk8P4O+H1htSWtd+baVd/S8OZriZM06Fa++vdSDpERUgDAPz1sZzTg3F1MIFrt2uXuVuqW2jJCR+vRph40plgDa77GW84lMhmqtVkP5o1sS4zrkpfi/LBAXX2O4iEiXIje2/ecK3t59O6JA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=wbz+ddPy+V43N5aSt3EGE5iN/Sjdx5UpMex9u239FMY=; b=jNN4lCLKkkYHBROM/dNT+fPP3r3iykbp1RChw3CG55dlXGJ0JLJ8TROBQ3ufHZ/WzVHqmeypJnsM17h7HUAZCJ8sXXLJa7HbQEQcc9nCoFJO9tbrkIhq/Vlv+8kyfFrKYLVC7pKn7G9JQUCEvJaWXffPDM7noP2UuEHQv35U6poGXolca+h2VLsWwEd+enuGi8Z5VqHW6biK16IQkn8HfM+OFWZheCumSBXRqTrtoKkER/pK+QhQttuYnyWED1DGduWQ28gZgNpVh1YPdYFsem/AXhkKlhz0rYh/3YL82IqLYV25myZ5418Ey61wHoheqDBJfJ1LsG9DU8ofGUUlxw== 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 Received: from SJ1PR11MB6227.namprd11.prod.outlook.com (2603:10b6:a03:45a::10) by CY8PR11MB7106.namprd11.prod.outlook.com (2603:10b6:930:52::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5654.14; Thu, 22 Sep 2022 12:54:27 +0000 Received: from SJ1PR11MB6227.namprd11.prod.outlook.com ([fe80::1d65:f35c:c823:1b51]) by SJ1PR11MB6227.namprd11.prod.outlook.com ([fe80::1d65:f35c:c823:1b51%9]) with mapi id 15.20.5588.011; Thu, 22 Sep 2022 12:54:27 +0000 From: "yi1 li" To: "Kinney, Michael D" , "devel@edk2.groups.io" , "Kishore, Shelly" CC: "Yao, Jiewen" , "Wang, Jian J" , "Lu, Xiaoyu1" , "Jiang, Guomin" Subject: Re: [edk2-devel] [PATCH V2 1/3] CryptoPkg: Add EC support Thread-Topic: [edk2-devel] [PATCH V2 1/3] CryptoPkg: Add EC support Thread-Index: AQHYzXZLD+xvkEQOakOpSaeT6ojkS63qEX6AgACgK5CAACHkgIAARIXw Date: Thu, 22 Sep 2022 12:54:26 +0000 Message-ID: References: <9dcccc674996fa3fdcb8858e3609437e66ce82ac.1663735439.git.yi1.li@intel.com> In-Reply-To: Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 3f4574ad-086f-44cd-580d-08da9c999521 x-ms-traffictypediagnostic: CY8PR11MB7106:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: x1hagzTnL852UzuhBxVDfyyEHy6kcdTon9qicTUyd9pWfFsReghEnPIm3S2ZcHa65mXzVDMMmWMXxHaSzV4nM456Sdidhh2oljtaCNJ58DZtk6oxtCrh64wYl1qDNSelZtmGEVmgKILwFSSrjcz/jhRKURmWr6QdkMGHHkyqsBbi7lnn95hokbfzO3QJBKxalui6mVPsIWOTAUiy4k73dmnvtalTm2VBHt5Q4KK5pUfvuwDb8MjrvLC/DYbsYCG8KFampYcbQEFd2qhrepaf2/rS4iKIi38d3Hf8cigc6Gfb3EmoC424YSO4uRJsVNOhGMOYr3nSRgmhpKolNgsFNWqqnvucXUW9AnQwNNXVCQefC5kxOQ/zD5/yMAu3PjoFZblTxFEKvyLnD6/h2EAJ7r812T3j5gm0GVRzYCPzJtiKQDueh4Fui7dkwLQGHTw8gSVcJ5/2767/MUqqUsnpAGULP8hLtOw8f3nXkfQZ88wyONUixp1aJB/zw6fwMa7tURT2Ko4vt8a1z5hUl61fBoZOWJUwBdYvCDrBOrai4QU4m2G7QfC8QCYxA+dbqs9it6nrZHsyFbBA492uBgPGTvTcZLCl+URuJPjGJCdIO0KZAjuZimJb/1jexlBGWLQojj5HUaGHeT/47aVjhL5S1xqUNAVwBCCejW+TwwTZTtc/5okDb3/RxzFOS21pQ7yAwgn7HjFGAAKSJGmb0jF1bAT9z6tOiy7rHSsmZ8w7+vWthTf8nJcfNMHJ2UlPVMqC22z/Ni/qDb5qeDBpFDxlu2PW+x6dsrSti+ZmH9NAzf147lSFYJ0UEJ09KVIuERLrrvyTQBRttv/sPF/czNxqOA== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SJ1PR11MB6227.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(39860400002)(366004)(376002)(396003)(346002)(136003)(451199015)(478600001)(107886003)(6636002)(966005)(83380400001)(41300700001)(71200400001)(8936002)(86362001)(30864003)(52536014)(4326008)(5660300002)(316002)(110136005)(54906003)(64756008)(76116006)(66556008)(66476007)(19627235002)(66446008)(66946007)(38100700002)(8676002)(38070700005)(122000001)(55016003)(9686003)(186003)(53546011)(7696005)(6506007)(26005)(33656002)(82960400001)(2906002)(579004)(559001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?MGR0REx6MFU2WTNtcVJxeWg1WENBSDVsRlIxdDRldGY0SERrZUpoTUt4MGJ1?= =?utf-8?B?N3Yxd1lpN2tWUW51QXZ4Smtta2t5K0pNZ2NiUkVhY1pwaXQ1RWwxYmNiZU92?= =?utf-8?B?NklBUWhkc2tqVXZjMGRmM3QzTHAxanpCU2RaMWhZakNVZ3lKbXdnNS9tRTQ0?= =?utf-8?B?d3VxL2ZkT2M0NmxPbU96b0hLU2kwWitncmtoMEh1UXJFaHIwdjRveHEwa3Vr?= =?utf-8?B?VFRpV0JUZVZNT1ZIdVE0bnpwSW1wVE9zeG13Mmc0T3ZtYWdIa2lTcHRLNjBj?= =?utf-8?B?UEJqR2NWNXZueklGWHNVUGZncXgwWHdDb3lhN3dZREt6aXNpS1pwZkdCYmdN?= =?utf-8?B?VC9mU0lOTmVsc1VEa0lscFNta082cUoxOW4xS3RZYzdWNFBpblZiQ3RqSStJ?= =?utf-8?B?K2xxeXk0U0NCNE01QUtFWm9pL2VBMzdDaW1QMjNXTGI2dlRjNlFFaDJ3Tm5G?= =?utf-8?B?SW5Gb2F1R3Q1dkhuKzR6VEtFdW1xSnhtN0hGbEJhdkNwZlRSN05kZ2RqVk9R?= =?utf-8?B?T3JBQ3ZUMmJsWVdjSks0eEtvSUZTUVdQNUYvQ0thTExNTWRqVWQwS2hqcjRm?= =?utf-8?B?VnhiWk5UTldzU1JrUzFKSEJPSFgwRW9PdnVVM3hoMU56dHpUN1RpMXBpQ2pT?= =?utf-8?B?NENjc2dFQjl0MEhoVWFTdXJ1Z1Z0dzlDMk5yaGdFTDNteUh4VjJ1OU1HVk1L?= =?utf-8?B?WTl2L0R1MStuaGpaY0h3VzBaSWVGejdEbkNKNUNzRzNmWFVQMVliUTl3RmRp?= =?utf-8?B?SzhaN0EyQk9TdXE0VXhaN1lHU0NzbXJUbnRwUU5ZaklpZ3FUMWt3dWk2NnBH?= =?utf-8?B?MHhPRUhZa29XdWlhNVowWXRGVmNOdCtIeVdWYkMzN08yTnJVM1VpT0gxUzR1?= =?utf-8?B?LzljOTN1YVAvYWxuK3BLZEJHREZoQ0EwT1o3OU44cHk2L1pGclcxT3R4V3Ry?= =?utf-8?B?bnA2UmVsSEQvRlQ2cUg2L1l1OHdoVnFGQW5PUFpvN1N5VWl4SVhMVnAvSC9k?= =?utf-8?B?WHB1VHR2d1cwOXkza2dLSnlFNjhMMUVSd08zaDl5OGlteTRuVnVjanFKeHJ2?= =?utf-8?B?Ym02TWdhdm1waXNwTGpBMUxzcHFOMi93dVBnNWtmRGNFbDNkc29yTkNuRmZu?= =?utf-8?B?a1EvcFVjcUFjd0lvUEFTNHgweWRsSm1sa2RWYm8ybXJqb3lVaHljRTk4WmJS?= =?utf-8?B?cjR4ejU3OFRiMWQ5SkRVdTFWNlowUzM0c2lDZ2FnRFdva2NaTVhCM09ncURv?= =?utf-8?B?cXQwNGpobFRPWEVsUEtqZGVBdUFrdWswdHlOSmV3NEZCVmtHSXZYeXVUNGtX?= =?utf-8?B?UGtqWGtTTk1Td2RYZkc2bTJXTk5ueW40U1gyTTNqVGcwL3pCaDZGZTdEV3pV?= =?utf-8?B?TVJOUm15dCt6STd6N1MyUHp6R3UyWDlWL3IveUJCVmRraHc1bE5kWU8rTUJj?= =?utf-8?B?OEhGV1A5NkRVSXdQL1R6RDZMaWhiaGZJWGUwZVVzejUwcmdVRVRFMVdNaVBl?= =?utf-8?B?bEl3Q0RWR09vSmN1NXVPZzU3d1ZNU1IzclFSYUJCN0RBOHpTZWxiWTBFSnFY?= =?utf-8?B?bDAxYWg2eE4wSnFMTjNiMDdBNzhBaTgzSzIzbGlzc2FHaEhHQmNiU1ZqSTdE?= =?utf-8?B?L1g5QkU5bHUxQm1VS3ozZnBxaG81aFErUHlNQ1puWHA3dzdGRkRBRVZUaGNK?= =?utf-8?B?VE9Wb09jL01kK1F5bm1BUUlOa1lRN1lOREFETUZ4cmZpT3I0T1o3YlpBTXpu?= =?utf-8?B?c2tiZks0YTZtOVFqTkE4WGQ4dDA1VTZWWUhMWGpiRzdZTkF2OVJjR2U1Mmdx?= =?utf-8?B?c0hUTWZzYnZ0R0t4ZmxURnEwNHlMeGVvaVFnekZ6RXcvdnpMZEpqc2s3RHZt?= =?utf-8?B?ODNXbE0wUkYvZ042T1h0MWpNelJDTFNUSDdPSThvZHpYV0xPK2NmK0swZXZW?= =?utf-8?B?dFErMG56Tm5OY2k2YjJtdjdzbW1lbGZ2b0VFQUw5eGxWVm1jYUFVdk1HV0ZW?= =?utf-8?B?YjVBSUhoeDNCdkROWEJLakNlenFScS8zbit6MHZLbXd3dFhaYkdLWE5IRnJs?= =?utf-8?B?Z0lqaTRjTXFMTFBnZHc2aHFLODlqMkFRVUh5QUJIdHVPUFkwZzZCd0FKbFk4?= =?utf-8?Q?6U+E=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SJ1PR11MB6227.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3f4574ad-086f-44cd-580d-08da9c999521 X-MS-Exchange-CrossTenant-originalarrivaltime: 22 Sep 2022 12:54:27.1641 (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: CWPTmGPO2MbDV4lj+vyWV4fIJ2NgbXvxGqj3skBJCeli7w7caoGBi6fAn1rqKj1c2KVMR8rVyCyMpQXlsk67jQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR11MB7106 Return-Path: yi1.li@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgTWlrZSwNCkkgaGF2ZSBkaWQgc29tZSBQT0MgdGhhdCBzZWVtcyBleGlzdGVkIHN0cnVjdHVy ZWQgUENEIGlzIGhhcmQgdG8gY29udHJvbCBiaW5hcnkgc2l6ZSwgDQpIZXJlIGlzIHRoZSBwcmV2 aW91cyBkaXNjdXNzaW9uIGZvciByZWZlcmVuY2UuDQpodHRwczovL2J1Z3ppbGxhLnRpYW5vY29y ZS5vcmcvc2hvd19idWcuY2dpP2lkPTM2NzkNCmh0dHBzOi8vZWRrMi5ncm91cHMuaW8vZy9kZXZl bC90b3BpYy84NjI1NzgxMCM4MTgxNA0KaHR0cHM6Ly9idWd6aWxsYS50aWFub2NvcmUub3JnL3No b3dfYnVnLmNnaT9pZD0xNDQ2DQoNCkFueXdheSBFQyBpcyBhbiBpbXBvcnRhbnQgZmVhdHVyZSB3 aGljaCBjb25zdW1lZCBieSB2YXJ5IG1vZGVybiBzZWN1cml0eSBmZWF0dXJlcyBzdWNoIFdQQTMg LCBTUERNLCBUTFMxLjMgZXRjLg0KSG9wZSBpdCBjYW4gYmUgYWRkZWQgdG8gZWRrMiwgYW5kIEkg YW0gZ2xhZCB0byB0YWtlIHRoZSBjb2RlIGFuZCB0ZXN0IHdvcmsgaWYgdGhlcmUgYXJlIG90aGVy IHdheXMgdG8gY29udHJvbCB0aGUgc2l6ZS4NCg0KVGhhbmtzLA0KWWkNCg0KLS0tLS1PcmlnaW5h bCBNZXNzYWdlLS0tLS0NCkZyb206IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5 QGludGVsLmNvbT4gDQpTZW50OiBUaHVyc2RheSwgU2VwdGVtYmVyIDIyLCAyMDIyIDExOjU2IEFN DQpUbzogTGksIFlpMSA8eWkxLmxpQGludGVsLmNvbT47IGRldmVsQGVkazIuZ3JvdXBzLmlvOyBL aXNob3JlLCBTaGVsbHkgPHNoZWxseS5raXNob3JlQGludGVsLmNvbT4NCkNjOiBZYW8sIEppZXdl biA8amlld2VuLnlhb0BpbnRlbC5jb20+OyBXYW5nLCBKaWFuIEogPGppYW4uai53YW5nQGludGVs LmNvbT47IEx1LCBYaWFveXUxIDx4aWFveXUxLmx1QGludGVsLmNvbT47IEppYW5nLCBHdW9taW4g PGd1b21pbi5qaWFuZ0BpbnRlbC5jb20+DQpTdWJqZWN0OiBSRTogW2VkazItZGV2ZWxdIFtQQVRD SCBWMiAxLzNdIENyeXB0b1BrZzogQWRkIEVDIHN1cHBvcnQNCg0KVGhhdCBjaGFuZ2UgdG8gT3Bl bnNzbExpYi5pbmYgc2hvdWxkIG5vdCBoYXZlIGJlZW4gZG9uZSBlaXRoZXIuDQoNCkxvb2tzIGxp a2UgdGhpcyBFQyBmZWF0dXJlIG5lZWRzIG1vcmUgZXZhbHVhdGlvbiB0byBmaXQgaW50byB0aGUN CnN0cnVjdHVyZWQgUENEIGNvbnRyb2wgb2YgdGhlIGxpYiBzaXplcy4NCg0KTWlrZQ0KDQo+IC0t LS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IExpLCBZaTEgPHlpMS5saUBpbnRlbC5j b20+DQo+IFNlbnQ6IFdlZG5lc2RheSwgU2VwdGVtYmVyIDIxLCAyMDIyIDc6MTYgUE0NCj4gVG86 IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT47IGRldmVsQGVk azIuZ3JvdXBzLmlvDQo+IENjOiBZYW8sIEppZXdlbiA8amlld2VuLnlhb0BpbnRlbC5jb20+OyBX YW5nLCBKaWFuIEogPGppYW4uai53YW5nQGludGVsLmNvbT47IEx1LCBYaWFveXUxIDx4aWFveXUx Lmx1QGludGVsLmNvbT47IEppYW5nLA0KPiBHdW9taW4gPGd1b21pbi5qaWFuZ0BpbnRlbC5jb20+ DQo+IFN1YmplY3Q6IFJFOiBbZWRrMi1kZXZlbF0gW1BBVENIIFYyIDEvM10gQ3J5cHRvUGtnOiBB ZGQgRUMgc3VwcG9ydA0KPiANCj4gSGkgTWlrZSwNCj4gVGhhbmtzIGZvciByZXZpZXcuDQo+IA0K PiBFdmVuIFBDRF9DUllQVE9fU0VSVklDRV9GQU1JTFlfRU5BQkxFIGlzIHNldCB0byAwLCBDcnlw dG9FYy5jIHdpbGwgYWxzbyBiZSBjb21waWxlZCBhbmQgdGhyb3cgYnVpbGQgZXJyb3I6DQo+IA0K PiBkOlx3b3Jrc3BhY2VcdGlhbm9jb3JlXGVkazJcQ3J5cHRvUGtnXExpYnJhcnlcQmFzZUNyeXB0 TGliXFBrXENyeXB0RWMuYyg3Nyk6IGVycm9yIEMyMjIwOiB0aGUgZm9sbG93aW5nIHdhcm5pbmcg aXMgdHJlYXRlZCBhcw0KPiBhbiBlcnJvcg0KPiAgICAgICAgIDEgZmlsZShzKSBjb3BpZWQuDQo+ IGQ6XHdvcmtzcGFjZVx0aWFub2NvcmVcZWRrMlxDcnlwdG9Qa2dcTGlicmFyeVxCYXNlQ3J5cHRM aWJcUGtcQ3J5cHRFYy5jKDc3KTogd2FybmluZyBDNDAxMzogJ0VDX0dST1VQX25ld19ieV9jdXJ2 ZV9uYW1lJw0KPiB1bmRlZmluZWQ7IGFzc3VtaW5nIGV4dGVybiByZXR1cm5pbmcgaW50DQo+IGQ6 XHdvcmtzcGFjZVx0aWFub2NvcmVcZWRrMlxDcnlwdG9Qa2dcTGlicmFyeVxCYXNlQ3J5cHRMaWJc UGtcQ3J5cHRFYy5jKDc3KTogd2FybmluZyBDNDA0NzogJ3JldHVybic6ICd2b2lkIConIGRpZmZl cnMgaW4NCj4gbGV2ZWxzIG9mIGluZGlyZWN0aW9uIGZyb20gJ2ludCcNCj4gZDpcd29ya3NwYWNl XHRpYW5vY29yZVxlZGsyXENyeXB0b1BrZ1xMaWJyYXJ5XEJhc2VDcnlwdExpYlxQa1xDcnlwdEVj LmMoMTA1KTogd2FybmluZyBDNDAxMzogJ0VDX0dST1VQX2dldF9jdXJ2ZScgdW5kZWZpbmVkOw0K PiBhc3N1bWluZyBleHRlcm4gcmV0dXJuaW5nIGludA0KPiANCj4gSSB0aGluayB0aGUgcm9vdCBj YXVzZSBpcyB0aGF0IHdlIGhhdmUgZW5hYmxlZCBjb25kaXRpb25hbCBlYyBpbiBPcGVuc3NsTGli LmluZiBiZWZvcmUgYnkgUGNkT3BlbnNzbEVjRW5hYmxlZCwNCj4gaHR0cHM6Ly9naXRodWIuY29t L3RpYW5vY29yZS9lZGsyL2Jsb2IvMmMxN2Q2NzZlNDAyZDc1YTNhNjc0NDk5MzQyZjdkZGFjY2Yz ODdiZC9DcnlwdG9Qa2cvTGlicmFyeS9PcGVuc3NsTGliL09wZW5zc2xMaWIuaW5mI0wyDQo+IDAy LUwyMzgNCj4gIGlmIFBjZE9wZW5zc2xFY0VuYWJsZWQgbm90IHRydWUsIGFsbCBlYyBmaWxlcyB3 aWxsIG5vdCBiZSBjb21waWxlZC4NCj4gVGhpcyB3aWxsIHNhdmUgMjAwK2tiIG1lbW9yeSBvbiBw bGF0Zm9ybXMgd2hpY2ggdXNlIGR4ZSBkcml2ZXIgYnV0IGRvIG5vdCBuZWVkIGVjIGZlYXR1cmUu DQo+IA0KPiBTbyBJIGFkZCB0aGlzIFBDRCB0byBCYXNlQ3J5cHRMaWIuaW5mIGFsc28gdG8gYXZv aWQgYnVpbGQgZXJyb3IsIE5vdCBzdXJlIGlmIHRoZXJlIGlzIGFueSBvdGhlciB3YXksIG90aGVy IGJldHRlciBpZGVhcyBhcmUNCj4gd2VsY29tZS4NCj4gDQo+IFRoYW5rcywNCj4gWWkNCj4gDQo+ IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEtpbm5leSwgTWljaGFlbCBEIDxt aWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4NCj4gU2VudDogVGh1cnNkYXksIFNlcHRlbWJlciAy MiwgMjAyMiAxMjoyMiBBTQ0KPiBUbzogZGV2ZWxAZWRrMi5ncm91cHMuaW87IExpLCBZaTEgPHlp MS5saUBpbnRlbC5jb20+OyBLaW5uZXksIE1pY2hhZWwgRCA8bWljaGFlbC5kLmtpbm5leUBpbnRl bC5jb20+DQo+IENjOiBZYW8sIEppZXdlbiA8amlld2VuLnlhb0BpbnRlbC5jb20+OyBXYW5nLCBK aWFuIEogPGppYW4uai53YW5nQGludGVsLmNvbT47IEx1LCBYaWFveXUxIDx4aWFveXUxLmx1QGlu dGVsLmNvbT47IEppYW5nLA0KPiBHdW9taW4gPGd1b21pbi5qaWFuZ0BpbnRlbC5jb20+DQo+IFN1 YmplY3Q6IFJFOiBbZWRrMi1kZXZlbF0gW1BBVENIIFYyIDEvM10gQ3J5cHRvUGtnOiBBZGQgRUMg c3VwcG9ydA0KPiANCj4gQ29tbWVudHMgZW1iZWRkZWQgYmVsb3cuDQo+IA0KPiBNaWtlDQo+IA0K PiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gRnJvbTogZGV2ZWxAZWRrMi5ncm91 cHMuaW8gPGRldmVsQGVkazIuZ3JvdXBzLmlvPiBPbiBCZWhhbGYgT2YgeWkxIGxpDQo+ID4gU2Vu dDogVHVlc2RheSwgU2VwdGVtYmVyIDIwLCAyMDIyIDk6NTUgUE0NCj4gPiBUbzogZGV2ZWxAZWRr Mi5ncm91cHMuaW8NCj4gPiBDYzogTGksIFlpMSA8eWkxLmxpQGludGVsLmNvbT47IFlhbywgSmll d2VuIDxqaWV3ZW4ueWFvQGludGVsLmNvbT47IFdhbmcsIEppYW4gSiA8amlhbi5qLndhbmdAaW50 ZWwuY29tPjsgTHUsIFhpYW95dTENCj4gPiA8eGlhb3l1MS5sdUBpbnRlbC5jb20+OyBKaWFuZywg R3VvbWluIDxndW9taW4uamlhbmdAaW50ZWwuY29tPg0KPiA+IFN1YmplY3Q6IFtlZGsyLWRldmVs XSBbUEFUQ0ggVjIgMS8zXSBDcnlwdG9Qa2c6IEFkZCBFQyBzdXBwb3J0DQo+ID4NCj4gPiBSRUY6 IGh0dHBzOi8vYnVnemlsbGEudGlhbm9jb3JlLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzgyOA0KPiA+ DQo+ID4gVGhpcyBwYXRjaCBpcyB1c2VkIHRvIGFkZCBDcnlwdEVjIGxpYnJhcnksIHdoaWNoIGlz IHdyYXBwZWQNCj4gPiBvdmVyIE9wZW5TU0wuDQo+ID4NCj4gPiBDYzogSmlld2VuIFlhbyA8amll d2VuLnlhb0BpbnRlbC5jb20+DQo+ID4gQ2M6IEppYW4gSiBXYW5nIDxqaWFuLmoud2FuZ0BpbnRl bC5jb20+DQo+ID4gQ2M6IFhpYW95dSBMdSA8eGlhb3l1MS5sdUBpbnRlbC5jb20+DQo+ID4gQ2M6 IEd1b21pbiBKaWFuZyA8Z3VvbWluLmppYW5nQGludGVsLmNvbT4NCj4gPg0KPiA+IFNpZ25lZC1v ZmYtYnk6IFlpIExpIDx5aTEubGlAaW50ZWwuY29tPg0KPiA+IC0tLQ0KPiA+ICBDcnlwdG9Qa2cv SW5jbHVkZS9MaWJyYXJ5L0Jhc2VDcnlwdExpYi5oICAgICAgfCA0MjQgKysrKysrKysrKw0KPiA+ ICAuLi4vTGlicmFyeS9CYXNlQ3J5cHRMaWIvQmFzZUNyeXB0TGliLmluZiAgICAgfCAgIDIgKw0K PiA+ICAuLi4vTGlicmFyeS9CYXNlQ3J5cHRMaWIvUGVpQ3J5cHRMaWIuaW5mICAgICAgfCAgIDEg Kw0KPiA+ICBDcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvUGsvQ3J5cHRFYy5jICAgfCA3 NjUgKysrKysrKysrKysrKysrKysrDQo+ID4gIC4uLi9MaWJyYXJ5L0Jhc2VDcnlwdExpYi9Qay9D cnlwdEVjTnVsbC5jICAgICB8IDQ5NiArKysrKysrKysrKysNCj4gPiAgLi4uL0xpYnJhcnkvQmFz ZUNyeXB0TGliL1NtbUNyeXB0TGliLmluZiAgICAgIHwgICAxICsNCj4gPiAgLi4uL0Jhc2VDcnlw dExpYk51bGwvQmFzZUNyeXB0TGliTnVsbC5pbmYgICAgIHwgICAxICsNCj4gPiAgLi4uL0xpYnJh cnkvQmFzZUNyeXB0TGliTnVsbC9Qay9DcnlwdEVjTnVsbC5jIHwgNDk2ICsrKysrKysrKysrKw0K PiA+ICA4IGZpbGVzIGNoYW5nZWQsIDIxODYgaW5zZXJ0aW9ucygrKQ0KPiA+ICBjcmVhdGUgbW9k ZSAxMDA2NDQgQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL1BrL0NyeXB0RWMuYw0KPiA+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL1BrL0Ny eXB0RWNOdWxsLmMNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IENyeXB0b1BrZy9MaWJyYXJ5L0Jh c2VDcnlwdExpYk51bGwvUGsvQ3J5cHRFY051bGwuYw0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL0Ny eXB0b1BrZy9JbmNsdWRlL0xpYnJhcnkvQmFzZUNyeXB0TGliLmggYi9DcnlwdG9Qa2cvSW5jbHVk ZS9MaWJyYXJ5L0Jhc2VDcnlwdExpYi5oDQo+ID4gaW5kZXggYjI1MzkyM2RkOC4uZDc0ZmMyMWMx ZSAxMDA2NDQNCj4gPiAtLS0gYS9DcnlwdG9Qa2cvSW5jbHVkZS9MaWJyYXJ5L0Jhc2VDcnlwdExp Yi5oDQo+ID4gKysrIGIvQ3J5cHRvUGtnL0luY2x1ZGUvTGlicmFyeS9CYXNlQ3J5cHRMaWIuaA0K PiA+IEBAIC0xNCw2ICsxNCwxMyBAQCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xh dXNlLVBhdGVudA0KPiA+DQo+ID4gICNpbmNsdWRlIDxVZWZpL1VlZmlCYXNlVHlwZS5oPg0KPiA+ DQo+ID4gKyNkZWZpbmUgQ1JZUFRPX05JRF9OVUxMICAweDAwMDANCj4gPiArDQo+ID4gKy8vIEtl eSBFeGNoYW5nZQ0KPiA+ICsjZGVmaW5lIENSWVBUT19OSURfU0VDUDI1NlIxICAweDAyMDQNCj4g PiArI2RlZmluZSBDUllQVE9fTklEX1NFQ1AzODRSMSAgMHgwMjA1DQo+ID4gKyNkZWZpbmUgQ1JZ UFRPX05JRF9TRUNQNTIxUjEgIDB4MDIwNg0KPiA+ICsNCj4gPiAgLy8vDQo+ID4gIC8vLyBNRDUg ZGlnZXN0IHNpemUgaW4gYnl0ZXMNCj4gPiAgLy8vDQo+ID4gQEAgLTI4NTAsNCArMjg1Nyw0MjEg QEAgQmlnTnVtQWRkTW9kICgNCj4gPiAgICBPVVQgVk9JRCAgICAgICAqQm5SZXMNCj4gPiAgICAp Ow0KPiA+DQo+ID4gKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCj4gPiArLy8gICAg QmFzaWMgRWxsaXB0aWMgQ3VydmUgUHJpbWl0aXZlcw0KPiA+ICsvLyA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBJbml0aWFsaXplIG5ldyBvcGFx dWUgRWNHcm91cCBvYmplY3QuIFRoaXMgb2JqZWN0IHJlcHJlc2VudHMgYW4gRUMgY3VydmUgYW5k DQo+ID4gKyAgYW5kIGlzIHVzZWQgZm9yIGNhbGN1bGF0aW9uIHdpdGhpbiB0aGlzIGdyb3VwLiBU aGlzIG9iamVjdCBzaG91bGQgYmUgZnJlZWQNCj4gPiArICB1c2luZyBFY0dyb3VwRnJlZSgpIGZ1 bmN0aW9uLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBDcnlwdG9OaWQgICBJZGVudGlmeWlu ZyBudW1iZXIgZm9yIHRoZSBFQ0MgY3VydmUgKERlZmluZWQgaW4NCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICBCYXNlQ3J5cHRMaWIuaCkuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRWNH cm91cCBvYmplY3QgIE9uIHN1Y2Nlc3MuDQo+ID4gKyAgQHJldHZhbCBOVUxMICAgICAgICAgICAg T24gZmFpbHVyZS4NCj4gPiArKiovDQo+ID4gK1ZPSUQgKg0KPiA+ICtFRklBUEkNCj4gPiArRWNH cm91cEluaXQgKA0KPiA+ICsgIElOIFVJTlROICBDcnlwdG9OaWQNCj4gPiArICApOw0KPiA+ICsN Cj4gPiArLyoqDQo+ID4gKyAgR2V0IEVDIGN1cnZlIHBhcmFtZXRlcnMuIFdoaWxlIGVsbGlwdGlj IGN1cnZlIGVxdWF0aW9uIGlzIFleMiBtb2QgUCA9IChYXjMgKyBBWCArIEIpIE1vZCBQLg0KPiA+ ICsgIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgdGhlIHByb3ZpZGVkIEJpZyBOdW1iZXIgb2JqZWN0 cyAgdG8gdGhlIGNvcnJlc3BvbmRpbmcNCj4gPiArICB2YWx1ZXMuIFRoZSBjYWxsZXIgbmVlZHMg dG8gbWFrZSBzdXJlIGFsbCB0aGUgIm91dCIgQmlnTnVtYmVyIHBhcmFtZXRlcnMNCj4gPiArICBh cmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEVjR3Jv dXAgICAgRUMgZ3JvdXAgb2JqZWN0Lg0KPiA+ICsgIEBwYXJhbVtvdXRdIEJuUHJpbWUgICAgR3Jv dXAgcHJpbWUgbnVtYmVyLg0KPiA+ICsgIEBwYXJhbVtvdXRdIEJuQSAgICAgICAgQSBjb2VmZmlj aWVudC4NCj4gPiArICBAcGFyYW1bb3V0XSBCbkIgICAgICAgIEIgY29lZmZpY2llbnQuDQo+ID4g KyAgQHBhcmFtW2luXSAgQm5DdHggICAgICBCTiBjb250ZXh0Lg0KPiA+ICsNCj4gPiArICBAcmV0 dmFsIFRSVUUgICAgICAgICAgT24gc3VjY2Vzcy4NCj4gPiArICBAcmV0dmFsIEZBTFNFICAgICAg ICAgT3RoZXJ3aXNlLg0KPiA+ICsqKi8NCj4gPiArQk9PTEVBTg0KPiA+ICtFRklBUEkNCj4gPiAr RWNHcm91cEdldEN1cnZlICgNCj4gPiArICBJTiBDT05TVCBWT0lEICAqRWNHcm91cCwNCj4gPiAr ICBPVVQgVk9JRCAgICAgICAqQm5QcmltZSwNCj4gPiArICBPVVQgVk9JRCAgICAgICAqQm5BLA0K PiA+ICsgIE9VVCBWT0lEICAgICAgICpCbkIsDQo+ID4gKyAgSU4gVk9JRCAgICAgICAgKkJuQ3R4 DQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEdldCBFQyBncm91cCBvcmRlci4N Cj4gPiArICBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSBwcm92aWRlZCBCaWcgTnVtYmVyIG9i amVjdCB0byB0aGUgY29ycmVzcG9uZGluZw0KPiA+ICsgIHZhbHVlLiBUaGUgY2FsbGVyIG5lZWRz IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSAib3V0IiBCaWdOdW1iZXIgcGFyYW1ldGVyDQo+ID4gKyAg aXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEVjR3Jv dXAgICBFQyBncm91cCBvYmplY3QuDQo+ID4gKyAgQHBhcmFtW291dF0gQm5PcmRlciAgIEdyb3Vw IHByaW1lIG51bWJlci4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBUUlVFICAgICAgICAgIE9uIHN1 Y2Nlc3MuDQo+ID4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90aGVyd2lzZS4NCj4gPiArKiov DQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ID4gK0VjR3JvdXBHZXRPcmRlciAoDQo+ID4g KyAgSU4gVk9JRCAgICpFY0dyb3VwLA0KPiA+ICsgIE9VVCBWT0lEICAqQm5PcmRlcg0KPiA+ICsg ICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBGcmVlIHByZXZpb3VzbHkgYWxsb2NhdGVkIEVD IGdyb3VwIG9iamVjdCB1c2luZyBFY0dyb3VwSW5pdCgpLg0KPiA+ICsNCj4gPiArICBAcGFyYW1b aW5dICBFY0dyb3VwICAgRUMgZ3JvdXAgb2JqZWN0IHRvIGZyZWUuDQo+ID4gKyoqLw0KPiA+ICtW T0lEDQo+ID4gK0VGSUFQSQ0KPiA+ICtFY0dyb3VwRnJlZSAoDQo+ID4gKyAgSU4gVk9JRCAgKkVj R3JvdXANCj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgSW5pdGlhbGl6ZSBuZXcg b3BhcXVlIEVDIFBvaW50IG9iamVjdC4gVGhpcyBvYmplY3QgcmVwcmVzZW50cyBhbiBFQyBwb2lu dA0KPiA+ICsgIHdpdGhpbiB0aGUgZ2l2ZW4gRUMgZ3JvdXAgKGN1cnZlKS4NCj4gPiArDQo+ID4g KyAgQHBhcmFtW2luXSAgRUMgR3JvdXAsIHByb3Blcmx5IGluaXRpYWxpemVkIHVzaW5nIEVjR3Jv dXBJbml0KCkuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUMgUG9pbnQgb2JqZWN0ICBPbiBzdWNj ZXNzLg0KPiA+ICsgIEByZXR2YWwgTlVMTCAgICAgICAgICAgICBPbiBmYWlsdXJlLg0KPiA+ICsq Ki8NCj4gPiArVk9JRCAqDQo+ID4gK0VGSUFQSQ0KPiA+ICtFY1BvaW50SW5pdCAoDQo+ID4gKyAg SU4gQ09OU1QgVk9JRCAgKkVjR3JvdXANCj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4g KyAgRnJlZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBFQyBQb2ludCBvYmplY3QgdXNpbmcgRWNQb2lu dEluaXQoKS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNQb2ludCAgIEVDIFBvaW50IHRv IGZyZWUuDQo+ID4gKyAgQHBhcmFtW2luXSAgQ2xlYXIgICAgIFRSVUUgaWZmIHRoZSBtZW1vcnkg c2hvdWxkIGJlIGNsZWFyZWQuDQo+ID4gKyoqLw0KPiA+ICtWT0lEDQo+ID4gK0VGSUFQSQ0KPiA+ ICtFY1BvaW50RGVJbml0ICgNCj4gPiArICBJTiBWT0lEICAgICAqRWNQb2ludCwNCj4gPiArICBJ TiBCT09MRUFOICBDbGVhcg0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBHZXQg RUMgcG9pbnQgYWZmaW5lICh4LHkpIGNvb3JkaW5hdGVzLg0KPiA+ICsgIFRoaXMgZnVuY3Rpb24g d2lsbCBzZXQgdGhlIHByb3ZpZGVkIEJpZyBOdW1iZXIgb2JqZWN0cyB0byB0aGUgY29ycmVzcG9u ZGluZw0KPiA+ICsgIHZhbHVlcy4gVGhlIGNhbGxlciBuZWVkcyB0byBtYWtlIHN1cmUgYWxsIHRo ZSAib3V0IiBCaWdOdW1iZXIgcGFyYW1ldGVycw0KPiA+ICsgIGFyZSBwcm9wZXJseSBpbml0aWFs aXplZC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNHcm91cCAgICBFQyBncm91cCBvYmpl Y3QuDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNQb2ludCAgICBFQyBwb2ludCBvYmplY3QuDQo+ID4g KyAgQHBhcmFtW291dF0gQm5YICAgICAgICBYIGNvb3JkaW5hdGUuDQo+ID4gKyAgQHBhcmFtW291 dF0gQm5ZICAgICAgICBZIGNvb3JkaW5hdGUuDQo+ID4gKyAgQHBhcmFtW2luXSAgQm5DdHggICAg ICBCTiBjb250ZXh0LCBjcmVhdGVkIHdpdGggQmlnTnVtTmV3Q29udGV4dCgpLg0KPiA+ICsNCj4g PiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgT24gc3VjY2Vzcy4NCj4gPiArICBAcmV0dmFsIEZB TFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiA+ICsqKi8NCj4gPiArQk9PTEVBTg0KPiA+ICtFRklB UEkNCj4gPiArRWNQb2ludEdldEFmZmluZUNvb3JkaW5hdGVzICgNCj4gPiArICBJTiBDT05TVCBW T0lEICAqRWNHcm91cCwNCj4gPiArICBJTiBDT05TVCBWT0lEICAqRWNQb2ludCwNCj4gPiArICBP VVQgVk9JRCAgICAgICAqQm5YLA0KPiA+ICsgIE9VVCBWT0lEICAgICAgICpCblksDQo+ID4gKyAg SU4gVk9JRCAgICAgICAgKkJuQ3R4DQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsg IFNldCBFQyBwb2ludCBhZmZpbmUgKHgseSkgY29vcmRpbmF0ZXMuDQo+ID4gKw0KPiA+ICsgIEBw YXJhbVtpbl0gIEVjR3JvdXAgICAgRUMgZ3JvdXAgb2JqZWN0Lg0KPiA+ICsgIEBwYXJhbVtpbl0g IEVjUG9pbnQgICAgRUMgcG9pbnQgb2JqZWN0Lg0KPiA+ICsgIEBwYXJhbVtpbl0gIEJuWCAgICAg ICAgWCBjb29yZGluYXRlLg0KPiA+ICsgIEBwYXJhbVtpbl0gIEJuWSAgICAgICAgWSBjb29yZGlu YXRlLg0KPiA+ICsgIEBwYXJhbVtpbl0gIEJuQ3R4ICAgICAgQk4gY29udGV4dCwgY3JlYXRlZCB3 aXRoIEJpZ051bU5ld0NvbnRleHQoKS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBUUlVFICAgICAg ICAgIE9uIHN1Y2Nlc3MuDQo+ID4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90aGVyd2lzZS4N Cj4gPiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ID4gK0VjUG9pbnRTZXRBZmZp bmVDb29yZGluYXRlcyAoDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ID4gKyAg SU4gVk9JRCAgICAgICAgKkVjUG9pbnQsDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuWCwNCj4g PiArICBJTiBDT05TVCBWT0lEICAqQm5ZLA0KPiA+ICsgIElOIFZPSUQgICAgICAgICpCbkN0eA0K PiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBFQyBQb2ludCBhZGRpdGlvbi4gRWNQ b2ludFJlc3VsdCA9IEVjUG9pbnRBICsgRWNQb2ludEIuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtp bl0gIEVjR3JvdXAgICAgICAgICAgRUMgZ3JvdXAgb2JqZWN0Lg0KPiA+ICsgIEBwYXJhbVtvdXRd IEVjUG9pbnRSZXN1bHQgICAgRUMgcG9pbnQgdG8gaG9sZCB0aGUgcmVzdWx0LiBUaGUgcG9pbnQg c2hvdWxkDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBwcm9wZXJseSBp bml0aWFsaXplZC4NCj4gPiArICBAcGFyYW1baW5dICBFY1BvaW50QSAgICAgICAgIEVDIFBvaW50 Lg0KPiA+ICsgIEBwYXJhbVtpbl0gIEVjUG9pbnRCICAgICAgICAgRUMgUG9pbnQuDQo+ID4gKyAg QHBhcmFtW2luXSAgQm5DdHggICAgICAgICAgICBCTiBjb250ZXh0LCBjcmVhdGVkIHdpdGggQmln TnVtTmV3Q29udGV4dCgpLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgT24g c3VjY2Vzcy4NCj4gPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiA+ICsq Ki8NCj4gPiArQk9PTEVBTg0KPiA+ICtFRklBUEkNCj4gPiArRWNQb2ludEFkZCAoDQo+ID4gKyAg SU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ID4gKyAgT1VUIFZPSUQgICAgICAgKkVjUG9pbnRS ZXN1bHQsDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjUG9pbnRBLA0KPiA+ICsgIElOIENPTlNU IFZPSUQgICpFY1BvaW50QiwNCj4gPiArICBJTiBWT0lEICAgICAgICAqQm5DdHgNCj4gPiArICAp Ow0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVmFyaWFibGUgRUMgcG9pbnQgbXVsdGlwbGljYXRp b24uIEVjUG9pbnRSZXN1bHQgPSBFY1BvaW50ICogQm5QU2NhbGFyLg0KPiA+ICsNCj4gPiArICBA cGFyYW1baW5dICBFY0dyb3VwICAgICAgICAgIEVDIGdyb3VwIG9iamVjdC4NCj4gPiArICBAcGFy YW1bb3V0XSBFY1BvaW50UmVzdWx0ICAgIEVDIHBvaW50IHRvIGhvbGQgdGhlIHJlc3VsdC4gVGhl IHBvaW50IHNob3VsZA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgcHJv cGVybHkgaW5pdGlhbGl6ZWQuDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNQb2ludCAgICAgICAgICBF QyBQb2ludC4NCj4gPiArICBAcGFyYW1baW5dICBCblBTY2FsYXIgICAgICAgIFAgU2NhbGFyLg0K PiA+ICsgIEBwYXJhbVtpbl0gIEJuQ3R4ICAgICAgICAgICAgQk4gY29udGV4dCwgY3JlYXRlZCB3 aXRoIEJpZ051bU5ld0NvbnRleHQoKS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBUUlVFICAgICAg ICAgIE9uIHN1Y2Nlc3MuDQo+ID4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90aGVyd2lzZS4N Cj4gPiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ID4gK0VjUG9pbnRNdWwgKA0K PiA+ICsgIElOIENPTlNUIFZPSUQgICpFY0dyb3VwLA0KPiA+ICsgIE9VVCBWT0lEICAgICAgICpF Y1BvaW50UmVzdWx0LA0KPiA+ICsgIElOIENPTlNUIFZPSUQgICpFY1BvaW50LA0KPiA+ICsgIElO IENPTlNUIFZPSUQgICpCblBTY2FsYXIsDQo+ID4gKyAgSU4gVk9JRCAgICAgICAgKkJuQ3R4DQo+ ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIENhbGN1bGF0ZSB0aGUgaW52ZXJzZSBv ZiB0aGUgc3VwcGxpZWQgRUMgcG9pbnQuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gICAgIEVj R3JvdXAgICBFQyBncm91cCBvYmplY3QuDQo+ID4gKyAgQHBhcmFtW2luLG91dF0gRWNQb2ludCAg IEVDIHBvaW50IHRvIGludmVydC4NCj4gPiArICBAcGFyYW1baW5dICAgICBCbkN0eCAgICAgQk4g Y29udGV4dCwgY3JlYXRlZCB3aXRoIEJpZ051bU5ld0NvbnRleHQoKS4NCj4gPiArDQo+ID4gKyAg QHJldHZhbCBUUlVFICAgICAgICAgIE9uIHN1Y2Nlc3MuDQo+ID4gKyAgQHJldHZhbCBGQUxTRSAg ICAgICAgIE90aGVyd2lzZS4NCj4gPiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ ID4gK0VjUG9pbnRJbnZlcnQgKA0KPiA+ICsgIElOIENPTlNUIFZPSUQgICpFY0dyb3VwLA0KPiA+ ICsgIElOIE9VVCBWT0lEICAgICpFY1BvaW50LA0KPiA+ICsgIElOIFZPSUQgICAgICAgICpCbkN0 eA0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBDaGVjayBpZiB0aGUgc3VwcGxp ZWQgcG9pbnQgaXMgb24gRUMgY3VydmUuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEVjR3Jv dXAgICBFQyBncm91cCBvYmplY3QuDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNQb2ludCAgIEVDIHBv aW50IHRvIGNoZWNrLg0KPiA+ICsgIEBwYXJhbVtpbl0gIEJuQ3R4ICAgICBCTiBjb250ZXh0LCBj cmVhdGVkIHdpdGggQmlnTnVtTmV3Q29udGV4dCgpLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIFRS VUUgICAgICAgICAgT24gY3VydmUuDQo+ID4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90aGVy d2lzZS4NCj4gPiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ID4gK0VjUG9pbnRJ c09uQ3VydmUgKA0KPiA+ICsgIElOIENPTlNUIFZPSUQgICpFY0dyb3VwLA0KPiA+ICsgIElOIENP TlNUIFZPSUQgICpFY1BvaW50LA0KPiA+ICsgIElOIFZPSUQgICAgICAgICpCbkN0eA0KPiA+ICsg ICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBDaGVjayBpZiB0aGUgc3VwcGxpZWQgcG9pbnQg aXMgYXQgaW5maW5pdHkuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEVjR3JvdXAgICBFQyBn cm91cCBvYmplY3QuDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNQb2ludCAgIEVDIHBvaW50IHRvIGNo ZWNrLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgQXQgaW5maW5pdHkuDQo+ ID4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90aGVyd2lzZS4NCj4gPiArKiovDQo+ID4gK0JP T0xFQU4NCj4gPiArRUZJQVBJDQo+ID4gK0VjUG9pbnRJc0F0SW5maW5pdHkgKA0KPiA+ICsgIElO IENPTlNUIFZPSUQgICpFY0dyb3VwLA0KPiA+ICsgIElOIENPTlNUIFZPSUQgICpFY1BvaW50DQo+ ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIENoZWNrIGlmIEVDIHBvaW50cyBhcmUg ZXF1YWwuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEVjR3JvdXAgICBFQyBncm91cCBvYmpl Y3QuDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNQb2ludEEgIEVDIHBvaW50IEEuDQo+ID4gKyAgQHBh cmFtW2luXSAgRWNQb2ludEIgIEVDIHBvaW50IEIuDQo+ID4gKyAgQHBhcmFtW2luXSAgQm5DdHgg ICAgIEJOIGNvbnRleHQsIGNyZWF0ZWQgd2l0aCBCaWdOdW1OZXdDb250ZXh0KCkuDQo+ID4gKw0K PiA+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICBBID09IEIuDQo+ID4gKyAgQHJldHZhbCBGQUxT RSAgICAgICAgIE90aGVyd2lzZS4NCj4gPiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJ DQo+ID4gK0VjUG9pbnRFcXVhbCAoDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjUG9pbnRBLA0KPiA+ICsgIElOIENPTlNUIFZPSUQgICpF Y1BvaW50QiwNCj4gPiArICBJTiBWT0lEICAgICAgICAqQm5DdHgNCj4gPiArICApOw0KPiA+ICsN Cj4gPiArLyoqDQo+ID4gKyAgU2V0IEVDIHBvaW50IGNvbXByZXNzZWQgY29vcmRpbmF0ZXMuIFBv aW50cyBjYW4gYmUgZGVzY3JpYmVkIGluIHRlcm1zIG9mDQo+ID4gKyAgdGhlaXIgY29tcHJlc3Nl ZCBjb29yZGluYXRlcy4gRm9yIGEgcG9pbnQgKHgsIHkpLCBmb3IgYW55IGdpdmVuIHZhbHVlIGZv ciB4DQo+ID4gKyAgc3VjaCB0aGF0IHRoZSBwb2ludCBpcyBvbiB0aGUgY3VydmUgdGhlcmUgd2ls bCBvbmx5IGV2ZXIgYmUgdHdvIHBvc3NpYmxlDQo+ID4gKyAgdmFsdWVzIGZvciB5LiBUaGVyZWZv cmUsIGEgcG9pbnQgY2FuIGJlIHNldCB1c2luZyB0aGlzIGZ1bmN0aW9uIHdoZXJlIEJuWCBpcw0K PiA+ICsgIHRoZSB4IGNvb3JkaW5hdGUgYW5kIFlCaXQgaXMgYSB2YWx1ZSAwIG9yIDEgdG8gaWRl bnRpZnkgd2hpY2ggb2YgdGhlIHR3bw0KPiA+ICsgIHBvc3NpYmxlIHZhbHVlcyBmb3IgeSBzaG91 bGQgYmUgdXNlZC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNHcm91cCAgICBFQyBncm91 cCBvYmplY3QuDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNQb2ludCAgICBFQyBQb2ludC4NCj4gPiAr ICBAcGFyYW1baW5dICBCblggICAgICAgIFggY29vcmRpbmF0ZS4NCj4gPiArICBAcGFyYW1baW5d ICBZQml0ICAgICAgIDAgb3IgMSB0byBpZGVudGlmeSB3aGljaCBZIHZhbHVlIGlzIHVzZWQuDQo+ ID4gKyAgQHBhcmFtW2luXSAgQm5DdHggICAgICBCTiBjb250ZXh0LCBjcmVhdGVkIHdpdGggQmln TnVtTmV3Q29udGV4dCgpLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgT24g c3VjY2Vzcy4NCj4gPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiA+ICsq Ki8NCj4gPiArQk9PTEVBTg0KPiA+ICtFRklBUEkNCj4gPiArRWNQb2ludFNldENvbXByZXNzZWRD b29yZGluYXRlcyAoDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ID4gKyAgSU4g Vk9JRCAgICAgICAgKkVjUG9pbnQsDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuWCwNCj4gPiAr ICBJTiBVSU5UOCAgICAgICBZQml0LA0KPiA+ICsgIElOIFZPSUQgICAgICAgICpCbkN0eA0KPiA+ ICsgICk7DQo+ID4gKw0KPiA+ICsvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+ID4g Ky8vICAgIEVsbGlwdGljIEN1cnZlIERpZmZpZSBIZWxsbWFuIFByaW1pdGl2ZXMNCj4gPiArLy8g PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgQWxs b2NhdGVzIGFuZCBJbml0aWFsaXplcyBvbmUgRWxsaXB0aWMgQ3VydmUgQ29udGV4dCBmb3Igc3Vi c2VxdWVudCB1c2UNCj4gPiArICB3aXRoIHRoZSBOSUQuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtp bl0gIE5pZCBjaXBoZXIgTklEDQo+ID4gKyAgQHJldHVybiAgICAgUG9pbnRlciB0byB0aGUgRWxs aXB0aWMgQ3VydmUgQ29udGV4dCB0aGF0IGhhcyBiZWVuIGluaXRpYWxpemVkLg0KPiA+ICsgICAg ICAgICAgICAgIElmIHRoZSBhbGxvY2F0aW9ucyBmYWlscywgRWNOZXdCeU5pZCgpIHJldHVybnMg TlVMTC4NCj4gPiArKiovDQo+ID4gK1ZPSUQgKg0KPiA+ICtFRklBUEkNCj4gPiArRWNOZXdCeU5p ZCAoDQo+ID4gKyAgSU4gVUlOVE4gIE5pZA0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4g PiArICBSZWxlYXNlIHRoZSBzcGVjaWZpZWQgRUMgY29udGV4dC4NCj4gPiArDQo+ID4gKyAgQHBh cmFtW2luXSAgRWNDb250ZXh0ICBQb2ludGVyIHRvIHRoZSBFQyBjb250ZXh0IHRvIGJlIHJlbGVh c2VkLg0KPiA+ICsqKi8NCj4gPiArVk9JRA0KPiA+ICtFRklBUEkNCj4gPiArRWNGcmVlICgNCj4g PiArICBJTiAgVk9JRCAgKkVjQ29udGV4dA0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4g PiArICBHZW5lcmF0ZXMgRUMga2V5IGFuZCByZXR1cm5zIEVDIHB1YmxpYyBrZXkgKFgsIFkpLCBQ bGVhc2Ugbm90ZSwgdGhpcyBmdW5jdGlvbiB1c2VzDQo+ID4gKyAgcHNldWRvIHJhbmRvbSBudW1i ZXIgZ2VuZXJhdG9yLiBUaGUgY2FsbGVyIG11c3QgbWFrZSBzdXJlIFJhbmRvbVNlZWQoKQ0KPiA+ ICsgIGZ1bmN0aW9uIHdhcyBwcm9wZXJseSBjYWxsZWQgYmVmb3JlLg0KPiA+ICsgIFRoZSBFYyBj b250ZXh0IHNob3VsZCBiZSBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQgYnkgRWNOZXdCeU5pZC4NCj4g PiArICBUaGlzIGZ1bmN0aW9uIGdlbmVyYXRlcyByYW5kb20gc2VjcmV0LCBhbmQgY29tcHV0ZXMg dGhlIHB1YmxpYyBrZXkgKFgsIFkpLCB3aGljaCBpcw0KPiA+ICsgIHJldHVybmVkIHZpYSBwYXJh bWV0ZXIgUHVibGljLCBQdWJsaWNTaXplLg0KPiA+ICsgIFggaXMgdGhlIGZpcnN0IGhhbGYgb2Yg UHVibGljIHdpdGggc2l6ZSBiZWluZyBQdWJsaWNTaXplIC8gMiwNCj4gPiArICBZIGlzIHRoZSBz ZWNvbmQgaGFsZiBvZiBQdWJsaWMgd2l0aCBzaXplIGJlaW5nIFB1YmxpY1NpemUgLyAyLg0KPiA+ ICsgIEVDIGNvbnRleHQgaXMgdXBkYXRlZCBhY2NvcmRpbmdseS4NCj4gPiArICBJZiB0aGUgUHVi bGljIGJ1ZmZlciBpcyB0b28gc21hbGwgdG8gaG9sZCB0aGUgcHVibGljIFgsIFksIEZBTFNFIGlz IHJldHVybmVkIGFuZA0KPiA+ICsgIFB1YmxpY1NpemUgaXMgc2V0IHRvIHRoZSByZXF1aXJlZCBi dWZmZXIgc2l6ZSB0byBvYnRhaW4gdGhlIHB1YmxpYyBYLCBZLg0KPiA+ICsgIEZvciBQLTI1Niwg dGhlIFB1YmxpY1NpemUgaXMgNjQuIEZpcnN0IDMyLWJ5dGUgaXMgWCwgU2Vjb25kIDMyLWJ5dGUg aXMgWS4NCj4gPiArICBGb3IgUC0zODQsIHRoZSBQdWJsaWNTaXplIGlzIDk2LiBGaXJzdCA0OC1i eXRlIGlzIFgsIFNlY29uZCA0OC1ieXRlIGlzIFkuDQo+ID4gKyAgRm9yIFAtNTIxLCB0aGUgUHVi bGljU2l6ZSBpcyAxMzIuIEZpcnN0IDY2LWJ5dGUgaXMgWCwgU2Vjb25kIDY2LWJ5dGUgaXMgWS4N Cj4gPiArICBJZiBFY0NvbnRleHQgaXMgTlVMTCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ID4gKyAg SWYgUHVibGljU2l6ZSBpcyBOVUxMLCB0aGVuIHJldHVybiBGQUxTRS4NCj4gPiArICBJZiBQdWJs aWNTaXplIGlzIGxhcmdlIGVub3VnaCBidXQgUHVibGljIGlzIE5VTEwsIHRoZW4gcmV0dXJuIEZB TFNFLg0KPiA+ICsgIEBwYXJhbVtpbiwgb3V0XSAgRWNDb250ZXh0ICAgICAgUG9pbnRlciB0byB0 aGUgRUMgY29udGV4dC4NCj4gPiArICBAcGFyYW1bb3V0XSAgICAgIFB1YmxpY0tleSAgICAgIFBv aW50ZXIgdG8gdCBidWZmZXIgdG8gcmVjZWl2ZSBnZW5lcmF0ZWQgcHVibGljIFgsWS4NCj4gPiAr ICBAcGFyYW1baW4sIG91dF0gIFB1YmxpY0tleVNpemUgIE9uIGlucHV0LCB0aGUgc2l6ZSBvZiBQ dWJsaWMgYnVmZmVyIGluIGJ5dGVzLg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgT24gb3V0cHV0LCB0aGUgc2l6ZSBvZiBkYXRhIHJldHVybmVkIGluIFB1YmxpYyBidWZm ZXIgaW4gYnl0ZXMuDQo+ID4gKyAgQHJldHZhbCBUUlVFICAgRUMgcHVibGljIFgsWSBnZW5lcmF0 aW9uIHN1Y2NlZWRlZC4NCj4gPiArICBAcmV0dmFsIEZBTFNFICBFQyBwdWJsaWMgWCxZIGdlbmVy YXRpb24gZmFpbGVkLg0KPiA+ICsgIEByZXR2YWwgRkFMU0UgIFB1YmxpY0tleVNpemUgaXMgbm90 IGxhcmdlIGVub3VnaC4NCj4gPiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ID4g K0VjR2VuZXJhdGVLZXkgKA0KPiA+ICsgIElOIE9VVCAgVk9JRCAgICpFY0NvbnRleHQsDQo+ID4g KyAgT1VUICAgICBVSU5UOCAgKlB1YmxpY0tleSwNCj4gPiArICBJTiBPVVQgIFVJTlROICAqUHVi bGljS2V5U2l6ZQ0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBHZXRzIHRoZSBw dWJsaWMga2V5IGNvbXBvbmVudCBmcm9tIHRoZSBlc3RhYmxpc2hlZCBFQyBjb250ZXh0Lg0KPiA+ ICsgIFRoZSBFYyBjb250ZXh0IHNob3VsZCBiZSBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQgYnkgRWNO ZXdCeU5pZCwgYW5kIHN1Y2Nlc3NmdWxseQ0KPiA+ICsgIGdlbmVyYXRlIGtleSBwYWlyIGZyb20g RWNHZW5lcmF0ZUtleSgpLg0KPiA+ICsgIEZvciBQLTI1NiwgdGhlIFB1YmxpY1NpemUgaXMgNjQu IEZpcnN0IDMyLWJ5dGUgaXMgWCwgU2Vjb25kIDMyLWJ5dGUgaXMgWS4NCj4gPiArICBGb3IgUC0z ODQsIHRoZSBQdWJsaWNTaXplIGlzIDk2LiBGaXJzdCA0OC1ieXRlIGlzIFgsIFNlY29uZCA0OC1i eXRlIGlzIFkuDQo+ID4gKyAgRm9yIFAtNTIxLCB0aGUgUHVibGljU2l6ZSBpcyAxMzIuIEZpcnN0 IDY2LWJ5dGUgaXMgWCwgU2Vjb25kIDY2LWJ5dGUgaXMgWS4NCj4gPiArICBAcGFyYW1baW4sIG91 dF0gIEVjQ29udGV4dCAgICAgIFBvaW50ZXIgdG8gRUMgY29udGV4dCBiZWluZyBzZXQuDQo+ID4g KyAgQHBhcmFtW291dF0gICAgICBQdWJsaWNLZXkgICAgICBQb2ludGVyIHRvIHQgYnVmZmVyIHRv IHJlY2VpdmUgZ2VuZXJhdGVkIHB1YmxpYyBYLFkuDQo+ID4gKyAgQHBhcmFtW2luLCBvdXRdICBQ dWJsaWNLZXlTaXplICBPbiBpbnB1dCwgdGhlIHNpemUgb2YgUHVibGljIGJ1ZmZlciBpbiBieXRl cy4NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uIG91dHB1dCwgdGhl IHNpemUgb2YgZGF0YSByZXR1cm5lZCBpbiBQdWJsaWMgYnVmZmVyIGluIGJ5dGVzLg0KPiA+ICsg IEByZXR2YWwgIFRSVUUgICBFQyBrZXkgY29tcG9uZW50IHdhcyByZXRyaWV2ZWQgc3VjY2Vzc2Z1 bGx5Lg0KPiA+ICsgIEByZXR2YWwgIEZBTFNFICBJbnZhbGlkIEVDIGtleSBjb21wb25lbnQuDQo+ ID4gKyoqLw0KPiA+ICtCT09MRUFODQo+ID4gK0VGSUFQSQ0KPiA+ICtFY0dldFB1YktleSAoDQo+ ID4gKyAgSU4gT1VUICBWT0lEICAgKkVjQ29udGV4dCwNCj4gPiArICBPVVQgICAgIFVJTlQ4ICAq UHVibGljS2V5LA0KPiA+ICsgIElOIE9VVCAgVUlOVE4gICpQdWJsaWNLZXlTaXplDQo+ID4gKyAg KTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIENvbXB1dGVzIGV4Y2hhbmdlZCBjb21tb24ga2V5 Lg0KPiA+ICsgIEdpdmVuIHBlZXIncyBwdWJsaWMga2V5IChYLCBZKSwgdGhpcyBmdW5jdGlvbiBj b21wdXRlcyB0aGUgZXhjaGFuZ2VkIGNvbW1vbiBrZXksDQo+ID4gKyAgYmFzZWQgb24gaXRzIG93 biBjb250ZXh0IGluY2x1ZGluZyB2YWx1ZSBvZiBjdXJ2ZSBwYXJhbWV0ZXIgYW5kIHJhbmRvbSBz ZWNyZXQuDQo+ID4gKyAgWCBpcyB0aGUgZmlyc3QgaGFsZiBvZiBQZWVyUHVibGljIHdpdGggc2l6 ZSBiZWluZyBQZWVyUHVibGljU2l6ZSAvIDIsDQo+ID4gKyAgWSBpcyB0aGUgc2Vjb25kIGhhbGYg b2YgUGVlclB1YmxpYyB3aXRoIHNpemUgYmVpbmcgUGVlclB1YmxpY1NpemUgLyAyLg0KPiA+ICsg IElmIEVjQ29udGV4dCBpcyBOVUxMLCB0aGVuIHJldHVybiBGQUxTRS4NCj4gPiArICBJZiBQZWVy UHVibGljIGlzIE5VTEwsIHRoZW4gcmV0dXJuIEZBTFNFLg0KPiA+ICsgIElmIFBlZXJQdWJsaWNT aXplIGlzIDAsIHRoZW4gcmV0dXJuIEZBTFNFLg0KPiA+ICsgIElmIEtleSBpcyBOVUxMLCB0aGVu IHJldHVybiBGQUxTRS4NCj4gPiArICBJZiBLZXlTaXplIGlzIG5vdCBsYXJnZSBlbm91Z2gsIHRo ZW4gcmV0dXJuIEZBTFNFLg0KPiA+ICsgIEZvciBQLTI1NiwgdGhlIFBlZXJQdWJsaWNTaXplIGlz IDY0LiBGaXJzdCAzMi1ieXRlIGlzIFgsIFNlY29uZCAzMi1ieXRlIGlzIFkuDQo+ID4gKyAgRm9y IFAtMzg0LCB0aGUgUGVlclB1YmxpY1NpemUgaXMgOTYuIEZpcnN0IDQ4LWJ5dGUgaXMgWCwgU2Vj b25kIDQ4LWJ5dGUgaXMgWS4NCj4gPiArICBGb3IgUC01MjEsIHRoZSBQZWVyUHVibGljU2l6ZSBp cyAxMzIuIEZpcnN0IDY2LWJ5dGUgaXMgWCwgU2Vjb25kIDY2LWJ5dGUgaXMgWS4NCj4gPiArICBA cGFyYW1baW4sIG91dF0gIEVjQ29udGV4dCAgICAgICAgICBQb2ludGVyIHRvIHRoZSBFQyBjb250 ZXh0Lg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICAgUGVlclB1YmxpYyAgICAgICAgIFBvaW50ZXIg dG8gdGhlIHBlZXIncyBwdWJsaWMgWCxZLg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICAgUGVlclB1 YmxpY1NpemUgICAgIFNpemUgb2YgcGVlcidzIHB1YmxpYyBYLFkgaW4gYnl0ZXMuDQo+ID4gKyAg QHBhcmFtW2luXSAgICAgICBDb21wcmVzc0ZsYWcgICAgICAgRmxhZyBvZiBQZWVyUHVibGljIGlz IGNvbXByZXNzZWQgb3Igbm90Lg0KPiA+ICsgIEBwYXJhbVtvdXRdICAgICAgS2V5ICAgICAgICAg ICAgICAgIFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0byByZWNlaXZlIGdlbmVyYXRlZCBrZXkuDQo+ ID4gKyAgQHBhcmFtW2luLCBvdXRdICBLZXlTaXplICAgICAgICAgICAgT24gaW5wdXQsIHRoZSBz aXplIG9mIEtleSBidWZmZXIgaW4gYnl0ZXMuDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgT24gb3V0cHV0LCB0aGUgc2l6ZSBvZiBkYXRhIHJldHVybmVkIGluIEtl eSBidWZmZXIgaW4gYnl0ZXMuDQo+ID4gKyAgQHJldHZhbCBUUlVFICAgRUMgZXhjaGFuZ2VkIGtl eSBnZW5lcmF0aW9uIHN1Y2NlZWRlZC4NCj4gPiArICBAcmV0dmFsIEZBTFNFICBFQyBleGNoYW5n ZWQga2V5IGdlbmVyYXRpb24gZmFpbGVkLg0KPiA+ICsgIEByZXR2YWwgRkFMU0UgIEtleVNpemUg aXMgbm90IGxhcmdlIGVub3VnaC4NCj4gPiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJ DQo+ID4gK0VjRGhDb21wdXRlS2V5ICgNCj4gPiArICBJTiBPVVQgIFZPSUQgICAgICAgICAqRWND b250ZXh0LA0KPiA+ICsgIElOICAgICAgQ09OU1QgVUlOVDggICpQZWVyUHVibGljLA0KPiA+ICsg IElOICAgICAgVUlOVE4gICAgICAgIFBlZXJQdWJsaWNTaXplLA0KPiA+ICsgIElOICAgICAgQ09O U1QgSU5UMzIgICpDb21wcmVzc0ZsYWcsDQo+ID4gKyAgT1VUICAgICBVSU5UOCAgICAgICAgKktl eSwNCj4gPiArICBJTiBPVVQgIFVJTlROICAgICAgICAqS2V5U2l6ZQ0KPiA+ICsgICk7DQo+ID4g Kw0KPiA+ICAjZW5kaWYgLy8gX19CQVNFX0NSWVBUX0xJQl9IX18NCj4gPiBkaWZmIC0tZ2l0IGEv Q3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL0Jhc2VDcnlwdExpYi5pbmYgYi9DcnlwdG9Q a2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvQmFzZUNyeXB0TGliLmluZg0KPiA+IGluZGV4IDllNGJl MmZiMGQuLmFkZTZlZTNmZGQgMTAwNjQ0DQo+ID4gLS0tIGEvQ3J5cHRvUGtnL0xpYnJhcnkvQmFz ZUNyeXB0TGliL0Jhc2VDcnlwdExpYi5pbmYNCj4gPiArKysgYi9DcnlwdG9Qa2cvTGlicmFyeS9C YXNlQ3J5cHRMaWIvQmFzZUNyeXB0TGliLmluZg0KPiA+IEBAIC01Miw2ICs1Miw4IEBADQo+ID4g ICAgUGsvQ3J5cHRUcy5jDQo+ID4gICAgUGsvQ3J5cHRSc2FQc3MuYw0KPiA+ICAgIFBrL0NyeXB0 UnNhUHNzU2lnbi5jDQo+ID4gKyAgUGsvQ3J5cHRFY051bGwuYyAgICB8KnwqfCp8IWdFZmlDcnlw dG9Qa2dUb2tlblNwYWNlR3VpZC5QY2RPcGVuc3NsRWNFbmFibGVkDQo+ID4gKyAgUGsvQ3J5cHRF Yy5jICAgIHwqfCp8KnxnRWZpQ3J5cHRvUGtnVG9rZW5TcGFjZUd1aWQuUGNkT3BlbnNzbEVjRW5h YmxlZA0KPiANCj4gVGhlIHVzZSBvZiB0aGUgUENEIHRvIHNlbGVjdCB0aGUgZmlsZSBzaG91bGQg bm90IGJlIG5lZWRlZCBoZXJlLiAgVGhlDQo+IEVjIEZhbWlseSBhbmQgaW5kaXZpZHVhbCBzZXJ2 aWNlIGVuYWJsZS9kaXNhYmxlIGZpZWxkcyBpbiB0aGUNCj4gUENEX0NSWVBUT19TRVJWSUNFX0ZB TUlMWV9FTkFCTEUgc3RydWN0dXJlZCBQQ0QgYXJlIGFsbCB0aGF0IGlzIG5lZWRlZCB0bw0KPiBk aXNhYmxlIHRoZSBFYyBzZXJ2aWNlcy4NCj4gDQo+IFRoZSBQQ0QgZ0VmaUNyeXB0b1BrZ1Rva2Vu U3BhY2VHdWlkLlBjZE9wZW5zc2xFY0VuYWJsZWQgc2hvdWxkIGJlIHJlbW92ZWQNCj4gY29tcGxl dGVseSBhcyBwYXJ0IG9mIHRoaXMgcGF0Y2ggc2VyaWVzLg0KPiANCj4gPiAgICBQZW0vQ3J5cHRQ ZW0uYw0KPiA+ICAgIEJuL0NyeXB0Qm4uYw0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL0NyeXB0b1Br Zy9MaWJyYXJ5L0Jhc2VDcnlwdExpYi9QZWlDcnlwdExpYi5pbmYgYi9DcnlwdG9Qa2cvTGlicmFy eS9CYXNlQ3J5cHRMaWIvUGVpQ3J5cHRMaWIuaW5mDQo+ID4gaW5kZXggNjVhZDIzZmI4MS4uMzgz ZGYyYjIzYyAxMDA2NDQNCj4gPiAtLS0gYS9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIv UGVpQ3J5cHRMaWIuaW5mDQo+ID4gKysrIGIvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGli L1BlaUNyeXB0TGliLmluZg0KPiA+IEBAIC01OCw2ICs1OCw3IEBADQo+ID4gICAgUGsvQ3J5cHRU c051bGwuYw0KPiA+ICAgIFBrL0NyeXB0UnNhUHNzLmMNCj4gPiAgICBQay9DcnlwdFJzYVBzc1Np Z25OdWxsLmMNCj4gPiArICBQay9DcnlwdEVjTnVsbC5jDQo+ID4gICAgUGVtL0NyeXB0UGVtTnVs bC5jDQo+ID4gICAgUmFuZC9DcnlwdFJhbmROdWxsLmMNCj4gPiAgICBCbi9DcnlwdEJuTnVsbC5j DQo+ID4gZGlmZiAtLWdpdCBhL0NyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExpYi9Qay9Dcnlw dEVjLmMgYi9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvUGsvQ3J5cHRFYy5jDQo+ID4g bmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwLi4zOTZjODE5ODM0DQo+ ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL0NyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExp Yi9Qay9DcnlwdEVjLmMNCj4gPiBAQCAtMCwwICsxLDc2NSBAQA0KPiA+ICsvKiogQGZpbGUNCj4g PiArICBFbGxpcHRpYyBDdXJ2ZSBhbmQgRUNESCBBUEkgaW1wbGVtZW50YXRpb24gYmFzZWQgb24g T3BlblNTTA0KPiA+ICsNCj4gPiArICBDb3B5cmlnaHQgKGMpIDIwMjIsIEludGVsIENvcnBvcmF0 aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gPiArICBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ICsNCj4gPiArKiovDQo+ID4gKw0KPiA+ICsj aW5jbHVkZSAiSW50ZXJuYWxDcnlwdExpYi5oIg0KPiA+ICsjaW5jbHVkZSA8b3BlbnNzbC9vYmpl Y3RzLmg+DQo+ID4gKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+DQo+ID4gKyNpbmNsdWRlIDxvcGVu c3NsL2VjLmg+DQo+ID4gKw0KPiA+ICsvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+ ID4gKy8vICAgIEJhc2ljIEVsbGlwdGljIEN1cnZlIFByaW1pdGl2ZXMNCj4gPiArLy8gPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgUmV0dXJuIHRo ZSBOaWQgb2YgY2VydGFpbiBFQ0MgY3VydmUuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIENy eXB0b05pZCAgIElkZW50aWZ5aW5nIG51bWJlciBmb3IgdGhlIEVDQyBjdXJ2ZSAoRGVmaW5lZCBp bg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2VDcnlwdExpYi5oKS4NCj4gPiAr DQo+ID4gKyAgQHJldHZhbCAhPS0xICAgIE9uIHN1Y2Nlc3MuDQo+ID4gKyAgQHJldHZhbCAtMSAg ICAgIEVDQyBjdXJ2ZSBub3Qgc3VwcG9ydGVkLg0KPiA+ICsqKi8NCj4gPiArU1RBVElDDQo+ID4g K0lOVDMyDQo+ID4gK0NyeXB0b05pZFRvT3BlbnNzbE5pZCAoDQo+ID4gKyAgSU4gVUlOVE4gIENy eXB0b05pZA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIElOVDMyICBOaWQ7DQo+ID4gKw0KPiA+ ICsgIHN3aXRjaCAoQ3J5cHRvTmlkKSB7DQo+ID4gKyAgICBjYXNlIENSWVBUT19OSURfU0VDUDI1 NlIxOg0KPiA+ICsgICAgICBOaWQgPSBOSURfWDlfNjJfcHJpbWUyNTZ2MTsNCj4gPiArICAgICAg YnJlYWs7DQo+ID4gKyAgICBjYXNlIENSWVBUT19OSURfU0VDUDM4NFIxOg0KPiA+ICsgICAgICBO aWQgPSBOSURfc2VjcDM4NHIxOw0KPiA+ICsgICAgICBicmVhazsNCj4gPiArICAgIGNhc2UgQ1JZ UFRPX05JRF9TRUNQNTIxUjE6DQo+ID4gKyAgICAgIE5pZCA9IE5JRF9zZWNwNTIxcjE7DQo+ID4g KyAgICAgIGJyZWFrOw0KPiA+ICsgICAgZGVmYXVsdDoNCj4gPiArICAgICAgcmV0dXJuIC0xOw0K PiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgcmV0dXJuIE5pZDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr LyoqDQo+ID4gKyAgSW5pdGlhbGl6ZSBuZXcgb3BhcXVlIEVjR3JvdXAgb2JqZWN0LiBUaGlzIG9i amVjdCByZXByZXNlbnRzIGFuIEVDIGN1cnZlIGFuZA0KPiA+ICsgIGFuZCBpcyB1c2VkIGZvciBj YWxjdWxhdGlvbiB3aXRoaW4gdGhpcyBncm91cC4gVGhpcyBvYmplY3Qgc2hvdWxkIGJlIGZyZWVk DQo+ID4gKyAgdXNpbmcgRWNHcm91cEZyZWUoKSBmdW5jdGlvbi4NCj4gPiArDQo+ID4gKyAgQHBh cmFtW2luXSAgQ3J5cHRvTmlkICAgSWRlbnRpZnlpbmcgbnVtYmVyIGZvciB0aGUgRUNDIGN1cnZl IChEZWZpbmVkIGluDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgQmFzZUNyeXB0TGli LmgpLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVjR3JvdXAgb2JqZWN0ICBPbiBzdWNjZXNzLg0K PiA+ICsgIEByZXR2YWwgTlVMTCAgICAgICAgICAgIE9uIGZhaWx1cmUuDQo+ID4gKyoqLw0KPiA+ ICtWT0lEICoNCj4gPiArRUZJQVBJDQo+ID4gK0VjR3JvdXBJbml0ICgNCj4gPiArICBJTiBVSU5U TiAgQ3J5cHRvTmlkDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgSU5UMzIgIE5pZDsNCj4gPiAr DQo+ID4gKyAgTmlkID0gQ3J5cHRvTmlkVG9PcGVuc3NsTmlkIChDcnlwdG9OaWQpOw0KPiA+ICsN Cj4gPiArICBpZiAoTmlkIDwgMCkgew0KPiA+ICsgICAgcmV0dXJuIE5VTEw7DQo+ID4gKyAgfQ0K PiA+ICsNCj4gPiArICByZXR1cm4gRUNfR1JPVVBfbmV3X2J5X2N1cnZlX25hbWUgKE5pZCk7DQo+ ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEdldCBFQyBjdXJ2ZSBwYXJhbWV0ZXJzLiBX aGlsZSBlbGxpcHRpYyBjdXJ2ZSBlcXVhdGlvbiBpcyBZXjIgbW9kIFAgPSAoWF4zICsgQVggKyBC KSBNb2QgUC4NCj4gPiArICBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSBwcm92aWRlZCBCaWcg TnVtYmVyIG9iamVjdHMgIHRvIHRoZSBjb3JyZXNwb25kaW5nDQo+ID4gKyAgdmFsdWVzLiBUaGUg Y2FsbGVyIG5lZWRzIHRvIG1ha2Ugc3VyZSBhbGwgdGhlICJvdXQiIEJpZ051bWJlciBwYXJhbWV0 ZXJzDQo+ID4gKyAgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLg0KPiA+ICsNCj4gPiArICBAcGFy YW1baW5dICBFY0dyb3VwICAgIEVDIGdyb3VwIG9iamVjdC4NCj4gPiArICBAcGFyYW1bb3V0XSBC blByaW1lICAgIEdyb3VwIHByaW1lIG51bWJlci4NCj4gPiArICBAcGFyYW1bb3V0XSBCbkEgICAg ICAgIEEgY29lZmZpY2llbnQuDQo+ID4gKyAgQHBhcmFtW291dF0gQm5CICAgICAgICBCIGNvZWZm aWNpZW50Li4NCj4gPiArICBAcGFyYW1baW5dICBCbkN0eCAgICAgIEJOIGNvbnRleHQuDQo+ID4g Kw0KPiA+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICBPbiBzdWNjZXNzLg0KPiA+ICsgIEByZXR2 YWwgRkFMU0UgICAgICAgICBPdGhlcndpc2UuDQo+ID4gKyoqLw0KPiA+ICtCT09MRUFODQo+ID4g K0VGSUFQSQ0KPiA+ICtFY0dyb3VwR2V0Q3VydmUgKA0KPiA+ICsgIElOIENPTlNUIFZPSUQgICpF Y0dyb3VwLA0KPiA+ICsgIE9VVCBWT0lEICAgICAgICpCblByaW1lLA0KPiA+ICsgIE9VVCBWT0lE ICAgICAgICpCbkEsDQo+ID4gKyAgT1VUIFZPSUQgICAgICAgKkJuQiwNCj4gPiArICBJTiBWT0lE ICAgICAgICAqQm5DdHgNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICByZXR1cm4gKEJPT0xFQU4p RUNfR1JPVVBfZ2V0X2N1cnZlIChFY0dyb3VwLCBCblByaW1lLCBCbkEsIEJuQiwgQm5DdHgpOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBHZXQgRUMgZ3JvdXAgb3JkZXIuDQo+ID4g KyAgVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgcHJvdmlkZWQgQmlnIE51bWJlciBvYmplY3Qg dG8gdGhlIGNvcnJlc3BvbmRpbmcNCj4gPiArICB2YWx1ZS4gVGhlIGNhbGxlciBuZWVkcyB0byBt YWtlIHN1cmUgdGhhdCB0aGUgIm91dCIgQmlnTnVtYmVyIHBhcmFtZXRlcg0KPiA+ICsgIGlzIHBy b3Blcmx5IGluaXRpYWxpemVkLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBFY0dyb3VwICAg RUMgZ3JvdXAgb2JqZWN0Lg0KPiA+ICsgIEBwYXJhbVtvdXRdIEJuT3JkZXIgICBHcm91cCBwcmlt ZSBudW1iZXIuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICBPbiBzdWNjZXNz Lg0KPiA+ICsgIEByZXR2YWwgRkFMU0UgICAgICAgICBPdGhlcndpc2UuDQo+ID4gKyoqLw0KPiA+ ICtCT09MRUFODQo+ID4gK0VGSUFQSQ0KPiA+ICtFY0dyb3VwR2V0T3JkZXIgKA0KPiA+ICsgIElO IFZPSUQgICAqRWNHcm91cCwNCj4gPiArICBPVVQgVk9JRCAgKkJuT3JkZXINCj4gPiArICApDQo+ ID4gK3sNCj4gPiArICByZXR1cm4gKEJPT0xFQU4pRUNfR1JPVVBfZ2V0X29yZGVyIChFY0dyb3Vw LCBCbk9yZGVyLCBOVUxMKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgRnJlZSBw cmV2aW91c2x5IGFsbG9jYXRlZCBFQyBncm91cCBvYmplY3QgdXNpbmcgRWNHcm91cEluaXQoKS4N Cj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNHcm91cCAgIEVDIGdyb3VwIG9iamVjdCB0byBm cmVlLg0KPiA+ICsqKi8NCj4gPiArVk9JRA0KPiA+ICtFRklBUEkNCj4gPiArRWNHcm91cEZyZWUg KA0KPiA+ICsgIElOIFZPSUQgICpFY0dyb3VwDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUNf R1JPVVBfZnJlZSAoRWNHcm91cCk7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIElu aXRpYWxpemUgbmV3IG9wYXF1ZSBFQyBQb2ludCBvYmplY3QuIFRoaXMgb2JqZWN0IHJlcHJlc2Vu dHMgYW4gRUMgcG9pbnQNCj4gPiArICB3aXRoaW4gdGhlIGdpdmVuIEVDIGdyb3VwIChjdXJ2ZSku DQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEVDIEdyb3VwLCBwcm9wZXJseSBpbml0aWFsaXpl ZCB1c2luZyBFY0dyb3VwSW5pdCgpLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVDIFBvaW50IG9i amVjdCAgT24gc3VjY2Vzcy4NCj4gPiArICBAcmV0dmFsIE5VTEwgICAgICAgICAgICAgT24gZmFp bHVyZS4NCj4gPiArKiovDQo+ID4gK1ZPSUQgKg0KPiA+ICtFRklBUEkNCj4gPiArRWNQb2ludElu aXQgKA0KPiA+ICsgIElOIENPTlNUIFZPSUQgICpFY0dyb3VwDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ ID4gKyAgcmV0dXJuIEVDX1BPSU5UX25ldyAoRWNHcm91cCk7DQo+ID4gK30NCj4gPiArDQo+ID4g Ky8qKg0KPiA+ICsgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgRUMgUG9pbnQgb2JqZWN0IHVz aW5nIEVjUG9pbnRJbml0KCkuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEVjUG9pbnQgICBF QyBQb2ludCB0byBmcmVlLg0KPiA+ICsgIEBwYXJhbVtpbl0gIENsZWFyICAgICBUUlVFIGlmZiB0 aGUgbWVtb3J5IHNob3VsZCBiZSBjbGVhcmVkLg0KPiA+ICsqKi8NCj4gPiArVk9JRA0KPiA+ICtF RklBUEkNCj4gPiArRWNQb2ludERlSW5pdCAoDQo+ID4gKyAgSU4gVk9JRCAgICAgKkVjUG9pbnQs DQo+ID4gKyAgSU4gQk9PTEVBTiAgQ2xlYXINCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBpZiAo Q2xlYXIpIHsNCj4gPiArICAgIEVDX1BPSU5UX2NsZWFyX2ZyZWUgKEVjUG9pbnQpOw0KPiA+ICsg IH0gZWxzZSB7DQo+ID4gKyAgICBFQ19QT0lOVF9mcmVlIChFY1BvaW50KTsNCj4gPiArICB9DQo+ ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEdldCBFQyBwb2ludCBhZmZpbmUgKHgseSkg Y29vcmRpbmF0ZXMuDQo+ID4gKyAgVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgcHJvdmlkZWQg QmlnIE51bWJlciBvYmplY3RzIHRvIHRoZSBjb3JyZXNwb25kaW5nDQo+ID4gKyAgdmFsdWVzLiBU aGUgY2FsbGVyIG5lZWRzIHRvIG1ha2Ugc3VyZSBhbGwgdGhlICJvdXQiIEJpZ051bWJlciBwYXJh bWV0ZXJzDQo+ID4gKyAgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLg0KPiA+ICsNCj4gPiArICBA cGFyYW1baW5dICBFY0dyb3VwICAgIEVDIGdyb3VwIG9iamVjdC4NCj4gPiArICBAcGFyYW1baW5d ICBFY1BvaW50ICAgIEVDIHBvaW50IG9iamVjdC4NCj4gPiArICBAcGFyYW1bb3V0XSBCblggICAg ICAgIFggY29vcmRpbmF0ZS4NCj4gPiArICBAcGFyYW1bb3V0XSBCblkgICAgICAgIFkgY29vcmRp bmF0ZS4NCj4gPiArICBAcGFyYW1baW5dICBCbkN0eCAgICAgIEJOIGNvbnRleHQsIGNyZWF0ZWQg d2l0aCBCaWdOdW1OZXdDb250ZXh0KCkuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgVFJVRSAgICAg ICAgICBPbiBzdWNjZXNzLg0KPiA+ICsgIEByZXR2YWwgRkFMU0UgICAgICAgICBPdGhlcndpc2Uu DQo+ID4gKyoqLw0KPiA+ICtCT09MRUFODQo+ID4gK0VGSUFQSQ0KPiA+ICtFY1BvaW50R2V0QWZm aW5lQ29vcmRpbmF0ZXMgKA0KPiA+ICsgIElOIENPTlNUIFZPSUQgICpFY0dyb3VwLA0KPiA+ICsg IElOIENPTlNUIFZPSUQgICpFY1BvaW50LA0KPiA+ICsgIE9VVCBWT0lEICAgICAgICpCblgsDQo+ ID4gKyAgT1VUIFZPSUQgICAgICAgKkJuWSwNCj4gPiArICBJTiBWT0lEICAgICAgICAqQm5DdHgN Cj4gPiArICApDQo+ID4gK3sNCj4gPiArICByZXR1cm4gKEJPT0xFQU4pRUNfUE9JTlRfZ2V0X2Fm ZmluZV9jb29yZGluYXRlcyAoRWNHcm91cCwgRWNQb2ludCwgQm5YLCBCblksIEJuQ3R4KTsNCj4g PiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgU2V0IEVDIHBvaW50IGFmZmluZSAoeCx5KSBj b29yZGluYXRlcy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNHcm91cCAgICBFQyBncm91 cCBvYmplY3QuDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNQb2ludCAgICBFQyBwb2ludCBvYmplY3Qu DQo+ID4gKyAgQHBhcmFtW2luXSAgQm5YICAgICAgICBYIGNvb3JkaW5hdGUuDQo+ID4gKyAgQHBh cmFtW2luXSAgQm5ZICAgICAgICBZIGNvb3JkaW5hdGUuDQo+ID4gKyAgQHBhcmFtW2luXSAgQm5D dHggICAgICBCTiBjb250ZXh0LCBjcmVhdGVkIHdpdGggQmlnTnVtTmV3Q29udGV4dCgpLg0KPiA+ ICsNCj4gPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgT24gc3VjY2Vzcy4NCj4gPiArICBAcmV0 dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiA+ICsqKi8NCj4gPiArQk9PTEVBTg0KPiA+ ICtFRklBUEkNCj4gPiArRWNQb2ludFNldEFmZmluZUNvb3JkaW5hdGVzICgNCj4gPiArICBJTiBD T05TVCBWT0lEICAqRWNHcm91cCwNCj4gPiArICBJTiBWT0lEICAgICAgICAqRWNQb2ludCwNCj4g PiArICBJTiBDT05TVCBWT0lEICAqQm5YLA0KPiA+ICsgIElOIENPTlNUIFZPSUQgICpCblksDQo+ ID4gKyAgSU4gVk9JRCAgICAgICAgKkJuQ3R4DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgcmV0 dXJuIChCT09MRUFOKUVDX1BPSU5UX3NldF9hZmZpbmVfY29vcmRpbmF0ZXMgKEVjR3JvdXAsIEVj UG9pbnQsIEJuWCwgQm5ZLCBCbkN0eCk7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsg IEVDIFBvaW50IGFkZGl0aW9uLiBFY1BvaW50UmVzdWx0ID0gRWNQb2ludEEgKyBFY1BvaW50Qi4N Cj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNHcm91cCAgICAgICAgICBFQyBncm91cCBvYmpl Y3QuDQo+ID4gKyAgQHBhcmFtW291dF0gRWNQb2ludFJlc3VsdCAgICBFQyBwb2ludCB0byBob2xk IHRoZSByZXN1bHQuIFRoZSBwb2ludCBzaG91bGQNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJlIHByb3Blcmx5IGluaXRpYWxpemVkLg0KPiA+ICsgIEBwYXJhbVtpbl0gIEVj UG9pbnRBICAgICAgICAgRUMgUG9pbnQuDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNQb2ludEIgICAg ICAgICBFQyBQb2ludC4NCj4gPiArICBAcGFyYW1baW5dICBCbkN0eCAgICAgICAgICAgIEJOIGNv bnRleHQsIGNyZWF0ZWQgd2l0aCBCaWdOdW1OZXdDb250ZXh0KCkuDQo+ID4gKw0KPiA+ICsgIEBy ZXR2YWwgVFJVRSAgICAgICAgICBPbiBzdWNjZXNzLg0KPiA+ICsgIEByZXR2YWwgRkFMU0UgICAg ICAgICBPdGhlcndpc2UuDQo+ID4gKyoqLw0KPiA+ICtCT09MRUFODQo+ID4gK0VGSUFQSQ0KPiA+ ICtFY1BvaW50QWRkICgNCj4gPiArICBJTiBDT05TVCBWT0lEICAqRWNHcm91cCwNCj4gPiArICBP VVQgVk9JRCAgICAgICAqRWNQb2ludFJlc3VsdCwNCj4gPiArICBJTiBDT05TVCBWT0lEICAqRWNQ b2ludEEsDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjUG9pbnRCLA0KPiA+ICsgIElOIFZPSUQg ICAgICAgICpCbkN0eA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIHJldHVybiAoQk9PTEVBTilF Q19QT0lOVF9hZGQgKEVjR3JvdXAsIEVjUG9pbnRSZXN1bHQsIEVjUG9pbnRBLCBFY1BvaW50Qiwg Qm5DdHgpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBWYXJpYWJsZSBFQyBwb2lu dCBtdWx0aXBsaWNhdGlvbi4gRWNQb2ludFJlc3VsdCA9IEVjUG9pbnQgKiBCblBTY2FsYXIuDQo+ ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEVjR3JvdXAgICAgICAgICAgRUMgZ3JvdXAgb2JqZWN0 Lg0KPiA+ICsgIEBwYXJhbVtvdXRdIEVjUG9pbnRSZXN1bHQgICAgRUMgcG9pbnQgdG8gaG9sZCB0 aGUgcmVzdWx0LiBUaGUgcG9pbnQgc2hvdWxkDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBiZSBwcm9wZXJseSBpbml0aWFsaXplZC4NCj4gPiArICBAcGFyYW1baW5dICBFY1Bv aW50ICAgICAgICAgIEVDIFBvaW50Lg0KPiA+ICsgIEBwYXJhbVtpbl0gIEJuUFNjYWxhciAgICAg ICAgUCBTY2FsYXIuDQo+ID4gKyAgQHBhcmFtW2luXSAgQm5DdHggICAgICAgICAgICBCTiBjb250 ZXh0LCBjcmVhdGVkIHdpdGggQmlnTnVtTmV3Q29udGV4dCgpLg0KPiA+ICsNCj4gPiArICBAcmV0 dmFsIFRSVUUgICAgICAgICAgT24gc3VjY2Vzcy4NCj4gPiArICBAcmV0dmFsIEZBTFNFICAgICAg ICAgT3RoZXJ3aXNlLg0KPiA+ICsqKi8NCj4gPiArQk9PTEVBTg0KPiA+ICtFRklBUEkNCj4gPiAr RWNQb2ludE11bCAoDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ID4gKyAgT1VU IFZPSUQgICAgICAgKkVjUG9pbnRSZXN1bHQsDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjUG9p bnQsDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuUFNjYWxhciwNCj4gPiArICBJTiBWT0lEICAg ICAgICAqQm5DdHgNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICByZXR1cm4gKEJPT0xFQU4pRUNf UE9JTlRfbXVsIChFY0dyb3VwLCBFY1BvaW50UmVzdWx0LCBOVUxMLCBFY1BvaW50LCBCblBTY2Fs YXIsIEJuQ3R4KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgQ2FsY3VsYXRlIHRo ZSBpbnZlcnNlIG9mIHRoZSBzdXBwbGllZCBFQyBwb2ludC4NCj4gPiArDQo+ID4gKyAgQHBhcmFt W2luXSAgICAgRWNHcm91cCAgIEVDIGdyb3VwIG9iamVjdC4NCj4gPiArICBAcGFyYW1baW4sb3V0 XSBFY1BvaW50ICAgRUMgcG9pbnQgdG8gaW52ZXJ0Lg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgIEJu Q3R4ICAgICBCTiBjb250ZXh0LCBjcmVhdGVkIHdpdGggQmlnTnVtTmV3Q29udGV4dCgpLg0KPiA+ ICsNCj4gPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgT24gc3VjY2Vzcy4NCj4gPiArICBAcmV0 dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiA+ICsqKi8NCj4gPiArQk9PTEVBTg0KPiA+ ICtFRklBUEkNCj4gPiArRWNQb2ludEludmVydCAoDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkVj R3JvdXAsDQo+ID4gKyAgSU4gT1VUIFZPSUQgICAgKkVjUG9pbnQsDQo+ID4gKyAgSU4gVk9JRCAg ICAgICAgKkJuQ3R4DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgcmV0dXJuIChCT09MRUFOKUVD X1BPSU5UX2ludmVydCAoRWNHcm91cCwgRWNQb2ludCwgQm5DdHgpOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICsvKioNCj4gPiArICBDaGVjayBpZiB0aGUgc3VwcGxpZWQgcG9pbnQgaXMgb24gRUMgY3Vy dmUuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEVjR3JvdXAgICBFQyBncm91cCBvYmplY3Qu DQo+ID4gKyAgQHBhcmFtW2luXSAgRWNQb2ludCAgIEVDIHBvaW50IHRvIGNoZWNrLg0KPiA+ICsg IEBwYXJhbVtpbl0gIEJuQ3R4ICAgICBCTiBjb250ZXh0LCBjcmVhdGVkIHdpdGggQmlnTnVtTmV3 Q29udGV4dCgpLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgT24gY3VydmUu DQo+ID4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90aGVyd2lzZS4NCj4gPiArKiovDQo+ID4g K0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ID4gK0VjUG9pbnRJc09uQ3VydmUgKA0KPiA+ICsgIElO IENPTlNUIFZPSUQgICpFY0dyb3VwLA0KPiA+ICsgIElOIENPTlNUIFZPSUQgICpFY1BvaW50LA0K PiA+ICsgIElOIFZPSUQgICAgICAgICpCbkN0eA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIHJl dHVybiBFQ19QT0lOVF9pc19vbl9jdXJ2ZSAoRWNHcm91cCwgRWNQb2ludCwgQm5DdHgpID09IDE7 DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIENoZWNrIGlmIHRoZSBzdXBwbGllZCBw b2ludCBpcyBhdCBpbmZpbml0eS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNHcm91cCAg IEVDIGdyb3VwIG9iamVjdC4NCj4gPiArICBAcGFyYW1baW5dICBFY1BvaW50ICAgRUMgcG9pbnQg dG8gY2hlY2suDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICBBdCBpbmZpbml0 eS4NCj4gPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiA+ICsqKi8NCj4g PiArQk9PTEVBTg0KPiA+ICtFRklBUEkNCj4gPiArRWNQb2ludElzQXRJbmZpbml0eSAoDQo+ID4g KyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjUG9p bnQNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICByZXR1cm4gRUNfUE9JTlRfaXNfYXRfaW5maW5p dHkgKEVjR3JvdXAsIEVjUG9pbnQpID09IDE7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ ICsgIENoZWNrIGlmIEVDIHBvaW50cyBhcmUgZXF1YWwuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtp bl0gIEVjR3JvdXAgICBFQyBncm91cCBvYmplY3QuDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNQb2lu dEEgIEVDIHBvaW50IEEuDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNQb2ludEIgIEVDIHBvaW50IEIu DQo+ID4gKyAgQHBhcmFtW2luXSAgQm5DdHggICAgIEJOIGNvbnRleHQsIGNyZWF0ZWQgd2l0aCBC aWdOdW1OZXdDb250ZXh0KCkuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICBB ID09IEIuDQo+ID4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90aGVyd2lzZS4NCj4gPiArKiov DQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ID4gK0VjUG9pbnRFcXVhbCAoDQo+ID4gKyAg SU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjUG9pbnRB LA0KPiA+ICsgIElOIENPTlNUIFZPSUQgICpFY1BvaW50QiwNCj4gPiArICBJTiBWT0lEICAgICAg ICAqQm5DdHgNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICByZXR1cm4gRUNfUE9JTlRfY21wIChF Y0dyb3VwLCBFY1BvaW50QSwgRWNQb2ludEIsIEJuQ3R4KSA9PSAwOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICsvKioNCj4gPiArICBTZXQgRUMgcG9pbnQgY29tcHJlc3NlZCBjb29yZGluYXRlcy4gUG9p bnRzIGNhbiBiZSBkZXNjcmliZWQgaW4gdGVybXMgb2YNCj4gPiArICB0aGVpciBjb21wcmVzc2Vk IGNvb3JkaW5hdGVzLiBGb3IgYSBwb2ludCAoeCwgeSksIGZvciBhbnkgZ2l2ZW4gdmFsdWUgZm9y IHgNCj4gPiArICBzdWNoIHRoYXQgdGhlIHBvaW50IGlzIG9uIHRoZSBjdXJ2ZSB0aGVyZSB3aWxs IG9ubHkgZXZlciBiZSB0d28gcG9zc2libGUNCj4gPiArICB2YWx1ZXMgZm9yIHkuIFRoZXJlZm9y ZSwgYSBwb2ludCBjYW4gYmUgc2V0IHVzaW5nIHRoaXMgZnVuY3Rpb24gd2hlcmUgQm5YIGlzDQo+ ID4gKyAgdGhlIHggY29vcmRpbmF0ZSBhbmQgWUJpdCBpcyBhIHZhbHVlIDAgb3IgMSB0byBpZGVu dGlmeSB3aGljaCBvZiB0aGUgdHdvDQo+ID4gKyAgcG9zc2libGUgdmFsdWVzIGZvciB5IHNob3Vs ZCBiZSB1c2VkLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBFY0dyb3VwICAgIEVDIGdyb3Vw IG9iamVjdC4NCj4gPiArICBAcGFyYW1baW5dICBFY1BvaW50ICAgIEVDIFBvaW50Lg0KPiA+ICsg IEBwYXJhbVtpbl0gIEJuWCAgICAgICAgWCBjb29yZGluYXRlLg0KPiA+ICsgIEBwYXJhbVtpbl0g IFlCaXQgICAgICAgMCBvciAxIHRvIGlkZW50aWZ5IHdoaWNoIFkgdmFsdWUgaXMgdXNlZC4NCj4g PiArICBAcGFyYW1baW5dICBCbkN0eCAgICAgIEJOIGNvbnRleHQsIGNyZWF0ZWQgd2l0aCBCaWdO dW1OZXdDb250ZXh0KCkuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICBPbiBz dWNjZXNzLg0KPiA+ICsgIEByZXR2YWwgRkFMU0UgICAgICAgICBPdGhlcndpc2UuDQo+ID4gKyoq Lw0KPiA+ICtCT09MRUFODQo+ID4gK0VGSUFQSQ0KPiA+ICtFY1BvaW50U2V0Q29tcHJlc3NlZENv b3JkaW5hdGVzICgNCj4gPiArICBJTiBDT05TVCBWT0lEICAqRWNHcm91cCwNCj4gPiArICBJTiBW T0lEICAgICAgICAqRWNQb2ludCwNCj4gPiArICBJTiBDT05TVCBWT0lEICAqQm5YLA0KPiA+ICsg IElOIFVJTlQ4ICAgICAgIFlCaXQsDQo+ID4gKyAgSU4gVk9JRCAgICAgICAgKkJuQ3R4DQo+ID4g KyAgKQ0KPiA+ICt7DQo+ID4gKyAgcmV0dXJuIChCT09MRUFOKUVDX1BPSU5UX3NldF9jb21wcmVz c2VkX2Nvb3JkaW5hdGVzIChFY0dyb3VwLCBFY1BvaW50LCBCblgsIFlCaXQsIEJuQ3R4KTsNCj4g PiArfQ0KPiA+ICsNCj4gPiArLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KPiA+ICsv LyAgICBFbGxpcHRpYyBDdXJ2ZSBEaWZmaWUgSGVsbG1hbiBQcmltaXRpdmVzDQo+ID4gKy8vID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEFsbG9j YXRlcyBhbmQgSW5pdGlhbGl6ZXMgb25lIEVsbGlwdGljIEN1cnZlIENvbnRleHQgZm9yIHN1YnNl cXVlbnQgdXNlDQo+ID4gKyAgd2l0aCB0aGUgTklELg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5d ICBOaWQgICBJZGVudGlmeWluZyBudW1iZXIgZm9yIHRoZSBFQ0MgY3VydmUgKERlZmluZWQgaW4N Cj4gPiArICAgICAgICAgICAgICAgICAgICBCYXNlQ3J5cHRMaWIuaCkuDQo+ID4gKyAgQHJldHVy biAgICAgUG9pbnRlciB0byB0aGUgRWxsaXB0aWMgQ3VydmUgQ29udGV4dCB0aGF0IGhhcyBiZWVu IGluaXRpYWxpemVkLg0KPiA+ICsgICAgICAgICAgICAgIElmIHRoZSBhbGxvY2F0aW9ucyBmYWls cywgRWNOZXdCeU5pZCgpIHJldHVybnMgTlVMTC4NCj4gPiArKiovDQo+ID4gK1ZPSUQgKg0KPiA+ ICtFRklBUEkNCj4gPiArRWNOZXdCeU5pZCAoDQo+ID4gKyAgSU4gVUlOVE4gIE5pZA0KPiA+ICsg ICkNCj4gPiArew0KPiA+ICsgIElOVDMyICBPcGVuU3NsTmlkOw0KPiA+ICsNCj4gPiArICBPcGVu U3NsTmlkID0gQ3J5cHRvTmlkVG9PcGVuc3NsTmlkIChOaWQpOw0KPiA+ICsgIGlmIChPcGVuU3Ns TmlkIDwgMCkgew0KPiA+ICsgICAgcmV0dXJuIE5VTEw7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiAr ICByZXR1cm4gKFZPSUQgKilFQ19LRVlfbmV3X2J5X2N1cnZlX25hbWUgKE9wZW5Tc2xOaWQpOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBSZWxlYXNlIHRoZSBzcGVjaWZpZWQgRUMg Y29udGV4dC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNDb250ZXh0ICBQb2ludGVyIHRv IHRoZSBFQyBjb250ZXh0IHRvIGJlIHJlbGVhc2VkLg0KPiA+ICsqKi8NCj4gPiArVk9JRA0KPiA+ ICtFRklBUEkNCj4gPiArRWNGcmVlICgNCj4gPiArICBJTiAgVk9JRCAgKkVjQ29udGV4dA0KPiA+ ICsgICkNCj4gPiArew0KPiA+ICsgIEVDX0tFWV9mcmVlICgoRUNfS0VZICopRWNDb250ZXh0KTsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgR2VuZXJhdGVzIEVDIGtleSBhbmQgcmV0 dXJucyBFQyBwdWJsaWMga2V5IChYLCBZKSwgUGxlYXNlIG5vdGUsIHRoaXMgZnVuY3Rpb24gdXNl cw0KPiA+ICsgIHBzZXVkbyByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4gVGhlIGNhbGxlciBtdXN0 IG1ha2Ugc3VyZSBSYW5kb21TZWVkKCkNCj4gPiArICBmdW5jdGlvbiB3YXMgcHJvcGVybHkgY2Fs bGVkIGJlZm9yZS4NCj4gPiArICBUaGUgRWMgY29udGV4dCBzaG91bGQgYmUgY29ycmVjdGx5IGlu aXRpYWxpemVkIGJ5IEVjTmV3QnlOaWQuDQo+ID4gKyAgVGhpcyBmdW5jdGlvbiBnZW5lcmF0ZXMg cmFuZG9tIHNlY3JldCwgYW5kIGNvbXB1dGVzIHRoZSBwdWJsaWMga2V5IChYLCBZKSwgd2hpY2gg aXMNCj4gPiArICByZXR1cm5lZCB2aWEgcGFyYW1ldGVyIFB1YmxpYywgUHVibGljU2l6ZS4NCj4g PiArICBYIGlzIHRoZSBmaXJzdCBoYWxmIG9mIFB1YmxpYyB3aXRoIHNpemUgYmVpbmcgUHVibGlj U2l6ZSAvIDIsDQo+ID4gKyAgWSBpcyB0aGUgc2Vjb25kIGhhbGYgb2YgUHVibGljIHdpdGggc2l6 ZSBiZWluZyBQdWJsaWNTaXplIC8gMi4NCj4gPiArICBFQyBjb250ZXh0IGlzIHVwZGF0ZWQgYWNj b3JkaW5nbHkuDQo+ID4gKyAgSWYgdGhlIFB1YmxpYyBidWZmZXIgaXMgdG9vIHNtYWxsIHRvIGhv bGQgdGhlIHB1YmxpYyBYLCBZLCBGQUxTRSBpcyByZXR1cm5lZCBhbmQNCj4gPiArICBQdWJsaWNT aXplIGlzIHNldCB0byB0aGUgcmVxdWlyZWQgYnVmZmVyIHNpemUgdG8gb2J0YWluIHRoZSBwdWJs aWMgWCwgWS4NCj4gPiArICBGb3IgUC0yNTYsIHRoZSBQdWJsaWNTaXplIGlzIDY0LiBGaXJzdCAz Mi1ieXRlIGlzIFgsIFNlY29uZCAzMi1ieXRlIGlzIFkuDQo+ID4gKyAgRm9yIFAtMzg0LCB0aGUg UHVibGljU2l6ZSBpcyA5Ni4gRmlyc3QgNDgtYnl0ZSBpcyBYLCBTZWNvbmQgNDgtYnl0ZSBpcyBZ Lg0KPiA+ICsgIEZvciBQLTUyMSwgdGhlIFB1YmxpY1NpemUgaXMgMTMyLiBGaXJzdCA2Ni1ieXRl IGlzIFgsIFNlY29uZCA2Ni1ieXRlIGlzIFkuDQo+ID4gKyAgSWYgRWNDb250ZXh0IGlzIE5VTEws IHRoZW4gcmV0dXJuIEZBTFNFLg0KPiA+ICsgIElmIFB1YmxpY1NpemUgaXMgTlVMTCwgdGhlbiBy ZXR1cm4gRkFMU0UuDQo+ID4gKyAgSWYgUHVibGljU2l6ZSBpcyBsYXJnZSBlbm91Z2ggYnV0IFB1 YmxpYyBpcyBOVUxMLCB0aGVuIHJldHVybiBGQUxTRS4NCj4gPiArICBAcGFyYW1baW4sIG91dF0g IEVjQ29udGV4dCAgICAgIFBvaW50ZXIgdG8gdGhlIEVDIGNvbnRleHQuDQo+ID4gKyAgQHBhcmFt W291dF0gICAgICBQdWJsaWNLZXkgICAgICBQb2ludGVyIHRvIHQgYnVmZmVyIHRvIHJlY2VpdmUg Z2VuZXJhdGVkIHB1YmxpYyBYLFkuDQo+ID4gKyAgQHBhcmFtW2luLCBvdXRdICBQdWJsaWNLZXlT aXplICBPbiBpbnB1dCwgdGhlIHNpemUgb2YgUHVibGljIGJ1ZmZlciBpbiBieXRlcy4NCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uIG91dHB1dCwgdGhlIHNpemUgb2Yg ZGF0YSByZXR1cm5lZCBpbiBQdWJsaWMgYnVmZmVyIGluIGJ5dGVzLg0KPiA+ICsgIEByZXR2YWwg VFJVRSAgIEVDIHB1YmxpYyBYLFkgZ2VuZXJhdGlvbiBzdWNjZWVkZWQuDQo+ID4gKyAgQHJldHZh bCBGQUxTRSAgRUMgcHVibGljIFgsWSBnZW5lcmF0aW9uIGZhaWxlZC4NCj4gPiArICBAcmV0dmFs IEZBTFNFICBQdWJsaWNLZXlTaXplIGlzIG5vdCBsYXJnZSBlbm91Z2guDQo+ID4gKyoqLw0KPiA+ ICtCT09MRUFODQo+ID4gK0VGSUFQSQ0KPiA+ICtFY0dlbmVyYXRlS2V5ICgNCj4gPiArICBJTiBP VVQgIFZPSUQgICAqRWNDb250ZXh0LA0KPiA+ICsgIE9VVCAgICAgVUlOVDggICpQdWJsaWNLZXks DQo+ID4gKyAgSU4gT1VUICBVSU5UTiAgKlB1YmxpY0tleVNpemUNCj4gPiArICApDQo+ID4gK3sN Cj4gPiArICBFQ19LRVkgICAgICAgICAgKkVjS2V5Ow0KPiA+ICsgIENPTlNUIEVDX0dST1VQICAq R3JvdXA7DQo+ID4gKyAgQ09OU1QgRUNfUE9JTlQgICpFY1BvaW50Ow0KPiA+ICsgIEJPT0xFQU4g ICAgICAgICBSZXRWYWw7DQo+ID4gKyAgQklHTlVNICAgICAgICAgICpCblg7DQo+ID4gKyAgQklH TlVNICAgICAgICAgICpCblk7DQo+ID4gKyAgVUlOVE4gICAgICAgICAgIEhhbGZTaXplOw0KPiA+ ICsgIElOVE4gICAgICAgICAgICBYU2l6ZTsNCj4gPiArICBJTlROICAgICAgICAgICAgWVNpemU7 DQo+ID4gKw0KPiA+ICsgIGlmICgoRWNDb250ZXh0ID09IE5VTEwpIHx8IChQdWJsaWNLZXlTaXpl ID09IE5VTEwpKSB7DQo+ID4gKyAgICByZXR1cm4gRkFMU0U7DQo+ID4gKyAgfQ0KPiA+ICsNCj4g PiArICBpZiAoKFB1YmxpY0tleSA9PSBOVUxMKSAmJiAoKlB1YmxpY0tleVNpemUgIT0gMCkpIHsN Cj4gPiArICAgIHJldHVybiBGQUxTRTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIEVjS2V5ICAg ID0gKEVDX0tFWSAqKUVjQ29udGV4dDsNCj4gPiArICBHcm91cCAgICA9IEVDX0tFWV9nZXQwX2dy b3VwIChFY0tleSk7DQo+ID4gKyAgSGFsZlNpemUgPSAoRUNfR1JPVVBfZ2V0X2RlZ3JlZSAoR3Jv dXApICsgNykgLyA4Ow0KPiA+ICsNCj4gPiArICAvLyBBc3N1bWUgUkFORF9zZWVkIHdhcyBjYWxs ZWQNCj4gPiArICBpZiAoRUNfS0VZX2dlbmVyYXRlX2tleSAoRWNLZXkpICE9IDEpIHsNCj4gPiAr ICAgIHJldHVybiBGQUxTRTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmICgqUHVibGljS2V5 U2l6ZSA8IEhhbGZTaXplICogMikgew0KPiA+ICsgICAgKlB1YmxpY0tleVNpemUgPSBIYWxmU2l6 ZSAqIDI7DQo+ID4gKyAgICByZXR1cm4gRkFMU0U7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAq UHVibGljS2V5U2l6ZSA9IEhhbGZTaXplICogMjsNCj4gPiArDQo+ID4gKyAgRWNQb2ludCA9IEVD X0tFWV9nZXQwX3B1YmxpY19rZXkgKEVjS2V5KTsNCj4gPiArICBpZiAoRWNQb2ludCA9PSBOVUxM KSB7DQo+ID4gKyAgICByZXR1cm4gRkFMU0U7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBSZXRW YWwgPSBGQUxTRTsNCj4gPiArICBCblggICAgPSBCTl9uZXcgKCk7DQo+ID4gKyAgQm5ZICAgID0g Qk5fbmV3ICgpOw0KPiA+ICsgIGlmICgoQm5YID09IE5VTEwpIHx8IChCblkgPT0gTlVMTCkpIHsN Cj4gPiArICAgIGdvdG8gZmFpbDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmIChFQ19QT0lO VF9nZXRfYWZmaW5lX2Nvb3JkaW5hdGVzIChHcm91cCwgRWNQb2ludCwgQm5YLCBCblksIE5VTEwp ICE9IDEpIHsNCj4gPiArICAgIGdvdG8gZmFpbDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIFhT aXplID0gQk5fbnVtX2J5dGVzIChCblgpOw0KPiA+ICsgIFlTaXplID0gQk5fbnVtX2J5dGVzIChC blkpOw0KPiA+ICsgIGlmICgoWFNpemUgPD0gMCkgfHwgKFlTaXplIDw9IDApKSB7DQo+ID4gKyAg ICBnb3RvIGZhaWw7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBBU1NFUlQgKChVSU5UTilYU2l6 ZSA8PSBIYWxmU2l6ZSAmJiAoVUlOVE4pWVNpemUgPD0gSGFsZlNpemUpOw0KPiA+ICsNCj4gPiAr ICBaZXJvTWVtIChQdWJsaWNLZXksICpQdWJsaWNLZXlTaXplKTsNCj4gPiArICBCTl9ibjJiaW4g KEJuWCwgJlB1YmxpY0tleVswICsgSGFsZlNpemUgLSBYU2l6ZV0pOw0KPiA+ICsgIEJOX2JuMmJp biAoQm5ZLCAmUHVibGljS2V5W0hhbGZTaXplICsgSGFsZlNpemUgLSBZU2l6ZV0pOw0KPiA+ICsN Cj4gPiArICBSZXRWYWwgPSBUUlVFOw0KPiA+ICsNCj4gPiArZmFpbDoNCj4gPiArICBCTl9mcmVl IChCblgpOw0KPiA+ICsgIEJOX2ZyZWUgKEJuWSk7DQo+ID4gKyAgcmV0dXJuIFJldFZhbDsNCj4g PiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgR2V0cyB0aGUgcHVibGljIGtleSBjb21wb25l bnQgZnJvbSB0aGUgZXN0YWJsaXNoZWQgRUMgY29udGV4dC4NCj4gPiArICBUaGUgRWMgY29udGV4 dCBzaG91bGQgYmUgY29ycmVjdGx5IGluaXRpYWxpemVkIGJ5IEVjTmV3QnlOaWQsIGFuZCBzdWNj ZXNzZnVsbHkNCj4gPiArICBnZW5lcmF0ZSBrZXkgcGFpciBmcm9tIEVjR2VuZXJhdGVLZXkoKS4N Cj4gPiArICBGb3IgUC0yNTYsIHRoZSBQdWJsaWNTaXplIGlzIDY0LiBGaXJzdCAzMi1ieXRlIGlz IFgsIFNlY29uZCAzMi1ieXRlIGlzIFkuDQo+ID4gKyAgRm9yIFAtMzg0LCB0aGUgUHVibGljU2l6 ZSBpcyA5Ni4gRmlyc3QgNDgtYnl0ZSBpcyBYLCBTZWNvbmQgNDgtYnl0ZSBpcyBZLg0KPiA+ICsg IEZvciBQLTUyMSwgdGhlIFB1YmxpY1NpemUgaXMgMTMyLiBGaXJzdCA2Ni1ieXRlIGlzIFgsIFNl Y29uZCA2Ni1ieXRlIGlzIFkuDQo+ID4gKyAgQHBhcmFtW2luLCBvdXRdICBFY0NvbnRleHQgICAg ICBQb2ludGVyIHRvIEVDIGNvbnRleHQgYmVpbmcgc2V0Lg0KPiA+ICsgIEBwYXJhbVtvdXRdICAg ICAgUHVibGljS2V5ICAgICAgUG9pbnRlciB0byB0IGJ1ZmZlciB0byByZWNlaXZlIGdlbmVyYXRl ZCBwdWJsaWMgWCxZLg0KPiA+ICsgIEBwYXJhbVtpbiwgb3V0XSAgUHVibGljS2V5U2l6ZSAgT24g aW5wdXQsIHRoZSBzaXplIG9mIFB1YmxpYyBidWZmZXIgaW4gYnl0ZXMuDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBPbiBvdXRwdXQsIHRoZSBzaXplIG9mIGRhdGEgcmV0 dXJuZWQgaW4gUHVibGljIGJ1ZmZlciBpbiBieXRlcy4NCj4gPiArICBAcmV0dmFsICBUUlVFICAg RUMga2V5IGNvbXBvbmVudCB3YXMgcmV0cmlldmVkIHN1Y2Nlc3NmdWxseS4NCj4gPiArICBAcmV0 dmFsICBGQUxTRSAgSW52YWxpZCBFQyBrZXkgY29tcG9uZW50Lg0KPiA+ICsqKi8NCj4gPiArQk9P TEVBTg0KPiA+ICtFRklBUEkNCj4gPiArRWNHZXRQdWJLZXkgKA0KPiA+ICsgIElOIE9VVCAgVk9J RCAgICpFY0NvbnRleHQsDQo+ID4gKyAgT1VUICAgICBVSU5UOCAgKlB1YmxpY0tleSwNCj4gPiAr ICBJTiBPVVQgIFVJTlROICAqUHVibGljS2V5U2l6ZQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsg IEVDX0tFWSAgICAgICAgICAqRWNLZXk7DQo+ID4gKyAgQ09OU1QgRUNfR1JPVVAgICpHcm91cDsN Cj4gPiArICBDT05TVCBFQ19QT0lOVCAgKkVjUG9pbnQ7DQo+ID4gKyAgQklHTlVNICAgICAgICAg ICpCblg7DQo+ID4gKyAgQklHTlVNICAgICAgICAgICpCblk7DQo+ID4gKyAgVUlOVE4gICAgICAg ICAgIEhhbGZTaXplOw0KPiA+ICsgIElOVE4gICAgICAgICAgICBYU2l6ZTsNCj4gPiArICBJTlRO ICAgICAgICAgICAgWVNpemU7DQo+ID4gKyAgQk9PTEVBTiAgICAgICAgIFJldFZhbDsNCj4gPiAr DQo+ID4gKyAgaWYgKChFY0NvbnRleHQgPT0gTlVMTCkgfHwgKFB1YmxpY0tleVNpemUgPT0gTlVM TCkpIHsNCj4gPiArICAgIHJldHVybiBGQUxTRTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlm ICgoUHVibGljS2V5ID09IE5VTEwpICYmICgqUHVibGljS2V5U2l6ZSAhPSAwKSkgew0KPiA+ICsg ICAgcmV0dXJuIEZBTFNFOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgRWNLZXkgICAgPSAoRUNf S0VZICopRWNDb250ZXh0Ow0KPiA+ICsgIEdyb3VwICAgID0gRUNfS0VZX2dldDBfZ3JvdXAgKEVj S2V5KTsNCj4gPiArICBIYWxmU2l6ZSA9IChFQ19HUk9VUF9nZXRfZGVncmVlIChHcm91cCkgKyA3 KSAvIDg7DQo+ID4gKyAgaWYgKCpQdWJsaWNLZXlTaXplIDwgSGFsZlNpemUgKiAyKSB7DQo+ID4g KyAgICAqUHVibGljS2V5U2l6ZSA9IEhhbGZTaXplICogMjsNCj4gPiArICAgIHJldHVybiBGQUxT RTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgICpQdWJsaWNLZXlTaXplID0gSGFsZlNpemUgKiAy Ow0KPiA+ICsNCj4gPiArICBFY1BvaW50ID0gRUNfS0VZX2dldDBfcHVibGljX2tleSAoRWNLZXkp Ow0KPiA+ICsgIGlmIChFY1BvaW50ID09IE5VTEwpIHsNCj4gPiArICAgIHJldHVybiBGQUxTRTsN Cj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIFJldFZhbCA9IEZBTFNFOw0KPiA+ICsgIEJuWCAgICA9 IEJOX25ldyAoKTsNCj4gPiArICBCblkgICAgPSBCTl9uZXcgKCk7DQo+ID4gKyAgaWYgKChCblgg PT0gTlVMTCkgfHwgKEJuWSA9PSBOVUxMKSkgew0KPiA+ICsgICAgZ290byBmYWlsOw0KPiA+ICsg IH0NCj4gPiArDQo+ID4gKyAgaWYgKEVDX1BPSU5UX2dldF9hZmZpbmVfY29vcmRpbmF0ZXMgKEdy b3VwLCBFY1BvaW50LCBCblgsIEJuWSwgTlVMTCkgIT0gMSkgew0KPiA+ICsgICAgZ290byBmYWls Ow0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgWFNpemUgPSBCTl9udW1fYnl0ZXMgKEJuWCk7DQo+ ID4gKyAgWVNpemUgPSBCTl9udW1fYnl0ZXMgKEJuWSk7DQo+ID4gKyAgaWYgKChYU2l6ZSA8PSAw KSB8fCAoWVNpemUgPD0gMCkpIHsNCj4gPiArICAgIGdvdG8gZmFpbDsNCj4gPiArICB9DQo+ID4g Kw0KPiA+ICsgIEFTU0VSVCAoKFVJTlROKVhTaXplIDw9IEhhbGZTaXplICYmIChVSU5UTilZU2l6 ZSA8PSBIYWxmU2l6ZSk7DQo+ID4gKw0KPiA+ICsgIGlmIChQdWJsaWNLZXkgIT0gTlVMTCkgew0K PiA+ICsgICAgWmVyb01lbSAoUHVibGljS2V5LCAqUHVibGljS2V5U2l6ZSk7DQo+ID4gKyAgICBC Tl9ibjJiaW4gKEJuWCwgJlB1YmxpY0tleVswICsgSGFsZlNpemUgLSBYU2l6ZV0pOw0KPiA+ICsg ICAgQk5fYm4yYmluIChCblksICZQdWJsaWNLZXlbSGFsZlNpemUgKyBIYWxmU2l6ZSAtIFlTaXpl XSk7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBSZXRWYWwgPSBUUlVFOw0KPiA+ICsNCj4gPiAr ZmFpbDoNCj4gPiArICBCTl9mcmVlIChCblgpOw0KPiA+ICsgIEJOX2ZyZWUgKEJuWSk7DQo+ID4g KyAgcmV0dXJuIFJldFZhbDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgQ29tcHV0 ZXMgZXhjaGFuZ2VkIGNvbW1vbiBrZXkuDQo+ID4gKyAgR2l2ZW4gcGVlcidzIHB1YmxpYyBrZXkg KFgsIFkpLCB0aGlzIGZ1bmN0aW9uIGNvbXB1dGVzIHRoZSBleGNoYW5nZWQgY29tbW9uIGtleSwN Cj4gPiArICBiYXNlZCBvbiBpdHMgb3duIGNvbnRleHQgaW5jbHVkaW5nIHZhbHVlIG9mIGN1cnZl IHBhcmFtZXRlciBhbmQgcmFuZG9tIHNlY3JldC4NCj4gPiArICBYIGlzIHRoZSBmaXJzdCBoYWxm IG9mIFBlZXJQdWJsaWMgd2l0aCBzaXplIGJlaW5nIFBlZXJQdWJsaWNTaXplIC8gMiwNCj4gPiAr ICBZIGlzIHRoZSBzZWNvbmQgaGFsZiBvZiBQZWVyUHVibGljIHdpdGggc2l6ZSBiZWluZyBQZWVy UHVibGljU2l6ZSAvIDIuDQo+ID4gKyAgSWYgcHVibGljIGtleSBpcyBjb21wcmVzc2VkLCB0aGUg UGVlclB1YmxpYyB3aWxsIG9ubHkgY29udGFpbiBoYWxmIGtleSAoWCkuDQo+ID4gKyAgSWYgRWND b250ZXh0IGlzIE5VTEwsIHRoZW4gcmV0dXJuIEZBTFNFLg0KPiA+ICsgIElmIFBlZXJQdWJsaWMg aXMgTlVMTCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ID4gKyAgSWYgUGVlclB1YmxpY1NpemUgaXMg MCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ID4gKyAgSWYgS2V5IGlzIE5VTEwsIHRoZW4gcmV0dXJu IEZBTFNFLg0KPiA+ICsgIElmIEtleVNpemUgaXMgbm90IGxhcmdlIGVub3VnaCwgdGhlbiByZXR1 cm4gRkFMU0UuDQo+ID4gKyAgRm9yIFAtMjU2LCB0aGUgUGVlclB1YmxpY1NpemUgaXMgNjQuIEZp cnN0IDMyLWJ5dGUgaXMgWCwgU2Vjb25kIDMyLWJ5dGUgaXMgWS4NCj4gPiArICBGb3IgUC0zODQs IHRoZSBQZWVyUHVibGljU2l6ZSBpcyA5Ni4gRmlyc3QgNDgtYnl0ZSBpcyBYLCBTZWNvbmQgNDgt Ynl0ZSBpcyBZLg0KPiA+ICsgIEZvciBQLTUyMSwgdGhlIFBlZXJQdWJsaWNTaXplIGlzIDEzMi4g Rmlyc3QgNjYtYnl0ZSBpcyBYLCBTZWNvbmQgNjYtYnl0ZSBpcyBZLg0KPiA+ICsgIEBwYXJhbVtp biwgb3V0XSAgRWNDb250ZXh0ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIEVDIGNvbnRleHQuDQo+ ID4gKyAgQHBhcmFtW2luXSAgICAgICBQZWVyUHVibGljICAgICAgICAgUG9pbnRlciB0byB0aGUg cGVlcidzIHB1YmxpYyBYLFkuDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgICBQZWVyUHVibGljU2l6 ZSAgICAgU2l6ZSBvZiBwZWVyJ3MgcHVibGljIFgsWSBpbiBieXRlcy4NCj4gPiArICBAcGFyYW1b aW5dICAgICAgIENvbXByZXNzRmxhZyAgICAgICBGbGFnIG9mIFBlZXJQdWJsaWMgaXMgY29tcHJl c3NlZCBvciBub3QuDQo+ID4gKyAgQHBhcmFtW291dF0gICAgICBLZXkgICAgICAgICAgICAgICAg UG9pbnRlciB0byB0aGUgYnVmZmVyIHRvIHJlY2VpdmUgZ2VuZXJhdGVkIGtleS4NCj4gPiArICBA cGFyYW1baW4sIG91dF0gIEtleVNpemUgICAgICAgICAgICBPbiBpbnB1dCwgdGhlIHNpemUgb2Yg S2V5IGJ1ZmZlciBpbiBieXRlcy4NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBPbiBvdXRwdXQsIHRoZSBzaXplIG9mIGRhdGEgcmV0dXJuZWQgaW4gS2V5IGJ1ZmZl ciBpbiBieXRlcy4NCj4gPiArICBAcmV0dmFsIFRSVUUgICBFQyBleGNoYW5nZWQga2V5IGdlbmVy YXRpb24gc3VjY2VlZGVkLg0KPiA+ICsgIEByZXR2YWwgRkFMU0UgIEVDIGV4Y2hhbmdlZCBrZXkg Z2VuZXJhdGlvbiBmYWlsZWQuDQo+ID4gKyAgQHJldHZhbCBGQUxTRSAgS2V5U2l6ZSBpcyBub3Qg bGFyZ2UgZW5vdWdoLg0KPiA+ICsqKi8NCj4gPiArQk9PTEVBTg0KPiA+ICtFRklBUEkNCj4gPiAr RWNEaENvbXB1dGVLZXkgKA0KPiA+ICsgIElOIE9VVCAgVk9JRCAgICAgICAgICpFY0NvbnRleHQs DQo+ID4gKyAgSU4gICAgICBDT05TVCBVSU5UOCAgKlBlZXJQdWJsaWMsDQo+ID4gKyAgSU4gICAg ICBVSU5UTiAgICAgICAgUGVlclB1YmxpY1NpemUsDQo+ID4gKyAgSU4gICAgICBDT05TVCBJTlQz MiAgKkNvbXByZXNzRmxhZywNCj4gPiArICBPVVQgICAgIFVJTlQ4ICAgICAgICAqS2V5LA0KPiA+ ICsgIElOIE9VVCAgVUlOVE4gICAgICAgICpLZXlTaXplDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4g KyAgRUNfS0VZICAgICAgICAgICpFY0tleTsNCj4gPiArICBFQ19LRVkgICAgICAgICAgKlBlZXJF Y0tleTsNCj4gPiArICBDT05TVCBFQ19HUk9VUCAgKkdyb3VwOw0KPiA+ICsgIEJPT0xFQU4gICAg ICAgICBSZXRWYWw7DQo+ID4gKyAgQklHTlVNICAgICAgICAgICpCblg7DQo+ID4gKyAgQklHTlVN ICAgICAgICAgICpCblk7DQo+ID4gKyAgRUNfUE9JTlQgICAgICAgICpQb2ludDsNCj4gPiArICBJ TlQzMiAgICAgICAgICAgT3BlblNzbE5pZDsNCj4gPiArICBVSU5UTiAgICAgICAgICAgSGFsZlNp emU7DQo+ID4gKw0KPiA+ICsgIGlmICgoRWNDb250ZXh0ID09IE5VTEwpIHx8IChQZWVyUHVibGlj ID09IE5VTEwpIHx8IChLZXlTaXplID09IE5VTEwpKSB7DQo+ID4gKyAgICByZXR1cm4gRkFMU0U7 DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoKEtleSA9PSBOVUxMKSAmJiAoKktleVNpemUg IT0gMCkpIHsNCj4gPiArICAgIHJldHVybiBGQUxTRTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsg IGlmIChQZWVyUHVibGljU2l6ZSA+IElOVF9NQVgpIHsNCj4gPiArICAgIHJldHVybiBGQUxTRTsN Cj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIEVjS2V5ICAgID0gKEVDX0tFWSAqKUVjQ29udGV4dDsN Cj4gPiArICBHcm91cCAgICA9IEVDX0tFWV9nZXQwX2dyb3VwIChFY0tleSk7DQo+ID4gKyAgSGFs ZlNpemUgPSAoRUNfR1JPVVBfZ2V0X2RlZ3JlZSAoR3JvdXApICsgNykgLyA4Ow0KPiA+ICsgIGlm ICgoQ29tcHJlc3NGbGFnID09IE5VTEwpICYmIChQZWVyUHVibGljU2l6ZSAhPSBIYWxmU2l6ZSAq IDIpKSB7DQo+ID4gKyAgICByZXR1cm4gRkFMU0U7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBp ZiAoKENvbXByZXNzRmxhZyAhPSBOVUxMKSAmJiAoUGVlclB1YmxpY1NpemUgIT0gSGFsZlNpemUp KSB7DQo+ID4gKyAgICByZXR1cm4gRkFMU0U7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAo KktleVNpemUgPCBIYWxmU2l6ZSkgew0KPiA+ICsgICAgKktleVNpemUgPSBIYWxmU2l6ZTsNCj4g PiArICAgIHJldHVybiBGQUxTRTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgICpLZXlTaXplID0g SGFsZlNpemU7DQo+ID4gKw0KPiA+ICsgIFJldFZhbCAgICA9IEZBTFNFOw0KPiA+ICsgIFBvaW50 ICAgICA9IE5VTEw7DQo+ID4gKyAgQm5YICAgICAgID0gQk5fYmluMmJuIChQZWVyUHVibGljLCAo SU5UMzIpSGFsZlNpemUsIE5VTEwpOw0KPiA+ICsgIEJuWSAgICAgICA9IE5VTEw7DQo+ID4gKyAg UG9pbnQgICAgID0gRUNfUE9JTlRfbmV3IChHcm91cCk7DQo+ID4gKyAgUGVlckVjS2V5ID0gTlVM TDsNCj4gPiArICBpZiAoKEJuWCA9PSBOVUxMKSB8fCAoUG9pbnQgPT0gTlVMTCkpIHsNCj4gPiAr ICAgIGdvdG8gZmFpbDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmIChDb21wcmVzc0ZsYWcg PT0gTlVMTCkgew0KPiA+ICsgICAgQm5ZID0gQk5fYmluMmJuIChQZWVyUHVibGljICsgSGFsZlNp emUsIChJTlQzMilIYWxmU2l6ZSwgTlVMTCk7DQo+ID4gKyAgICBpZiAoQm5ZID09IE5VTEwpIHsN Cj4gPiArICAgICAgZ290byBmYWlsOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIGlmIChF Q19QT0lOVF9zZXRfYWZmaW5lX2Nvb3JkaW5hdGVzIChHcm91cCwgUG9pbnQsIEJuWCwgQm5ZLCBO VUxMKSAhPSAxKSB7DQo+ID4gKyAgICAgIGdvdG8gZmFpbDsNCj4gPiArICAgIH0NCj4gPiArICB9 IGVsc2Ugew0KPiA+ICsgICAgaWYgKEVDX1BPSU5UX3NldF9jb21wcmVzc2VkX2Nvb3JkaW5hdGVz IChHcm91cCwgUG9pbnQsIEJuWCwgKkNvbXByZXNzRmxhZywgTlVMTCkgIT0gMSkgew0KPiA+ICsg ICAgICBnb3RvIGZhaWw7DQo+ID4gKyAgICB9DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAvLyBW YWxpZGF0ZSBOSVNUIEVDREggcHVibGljIGtleQ0KPiA+ICsgIE9wZW5Tc2xOaWQgPSBFQ19HUk9V UF9nZXRfY3VydmVfbmFtZSAoR3JvdXApOw0KPiA+ICsgIFBlZXJFY0tleSAgPSBFQ19LRVlfbmV3 X2J5X2N1cnZlX25hbWUgKE9wZW5Tc2xOaWQpOw0KPiA+ICsgIGlmIChQZWVyRWNLZXkgPT0gTlVM TCkgew0KPiA+ICsgICAgZ290byBmYWlsOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYgKEVD X0tFWV9zZXRfcHVibGljX2tleSAoUGVlckVjS2V5LCBQb2ludCkgIT0gMSkgew0KPiA+ICsgICAg Z290byBmYWlsOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYgKEVDX0tFWV9jaGVja19rZXkg KFBlZXJFY0tleSkgIT0gMSkgew0KPiA+ICsgICAgZ290byBmYWlsOw0KPiA+ICsgIH0NCj4gPiAr DQo+ID4gKyAgaWYgKEVDREhfY29tcHV0ZV9rZXkgKEtleSwgKktleVNpemUsIFBvaW50LCBFY0tl eSwgTlVMTCkgPD0gMCkgew0KPiA+ICsgICAgZ290byBmYWlsOw0KPiA+ICsgIH0NCj4gPiArDQo+ ID4gKyAgUmV0VmFsID0gVFJVRTsNCj4gPiArDQo+ID4gK2ZhaWw6DQo+ID4gKyAgQk5fZnJlZSAo Qm5YKTsNCj4gPiArICBCTl9mcmVlIChCblkpOw0KPiA+ICsgIEVDX1BPSU5UX2ZyZWUgKFBvaW50 KTsNCj4gPiArICBFQ19LRVlfZnJlZSAoUGVlckVjS2V5KTsNCj4gPiArICByZXR1cm4gUmV0VmFs Ow0KPiA+ICt9DQo+ID4gZGlmZiAtLWdpdCBhL0NyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExp Yi9Qay9DcnlwdEVjTnVsbC5jIGIvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL1BrL0Ny eXB0RWNOdWxsLmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAw MDAuLmQ5ZjEwMDRmNmMNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvQ3J5cHRvUGtnL0xp YnJhcnkvQmFzZUNyeXB0TGliL1BrL0NyeXB0RWNOdWxsLmMNCj4gPiBAQCAtMCwwICsxLDQ5NiBA QA0KPiA+ICsvKiogQGZpbGUNCj4gPiArICBFbGxpcHRpYyBDdXJ2ZSBhbmQgRUNESCBBUEkgaW1w bGVtZW50YXRpb24gYmFzZWQgb24gT3BlblNTTA0KPiA+ICsNCj4gPiArICBDb3B5cmlnaHQgKGMp IDIwMjIsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gPiAr ICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ICsNCj4g PiArKiovDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9CYXNlQ3J5cHRMaWIuaD4NCj4g PiArI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsg IEluaXRpYWxpemUgbmV3IG9wYXF1ZSBFY0dyb3VwIG9iamVjdC4gVGhpcyBvYmplY3QgcmVwcmVz ZW50cyBhbiBFQyBjdXJ2ZSBhbmQNCj4gPiArICBhbmQgaXMgdXNlZCBmb3IgY2FsY3VsYXRpb24g d2l0aGluIHRoaXMgZ3JvdXAuIFRoaXMgb2JqZWN0IHNob3VsZCBiZSBmcmVlZA0KPiA+ICsgIHVz aW5nIEVjR3JvdXBGcmVlKCkgZnVuY3Rpb24uDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIENy eXB0b05pZCAgIElkZW50aWZ5aW5nIG51bWJlciBmb3IgdGhlIEVDQyBjdXJ2ZSAoRGVmaW5lZCBp bg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2VDcnlwdExpYi5oKS4NCj4gPiAr DQo+ID4gKyAgQHJldHZhbCBFY0dyb3VwIG9iamVjdCAgT24gc3VjY2Vzcy4NCj4gPiArICBAcmV0 dmFsIE5VTEwgICAgICAgICAgICBPbiBmYWlsdXJlLg0KPiA+ICsqKi8NCj4gPiArVk9JRCAqDQo+ ID4gK0VGSUFQSQ0KPiA+ICtFY0dyb3VwSW5pdCAoDQo+ID4gKyAgSU4gVUlOVE4gIENyeXB0b05p ZA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiA+ICsgIHJldHVy biBOVUxMOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBHZXQgRUMgY3VydmUgcGFy YW1ldGVycy4gV2hpbGUgZWxsaXB0aWMgY3VydmUgZXF1YXRpb24gaXMgWV4yIG1vZCBQID0gKFhe MyArIEFYICsgQikgTW9kIFAuDQo+ID4gKyAgVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgcHJv dmlkZWQgQmlnIE51bWJlciBvYmplY3RzICB0byB0aGUgY29ycmVzcG9uZGluZw0KPiA+ICsgIHZh bHVlcy4gVGhlIGNhbGxlciBuZWVkcyB0byBtYWtlIHN1cmUgYWxsIHRoZSAib3V0IiBCaWdOdW1i ZXIgcGFyYW1ldGVycw0KPiA+ICsgIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4NCj4gPiArDQo+ ID4gKyAgQHBhcmFtW2luXSAgRWNHcm91cCAgICBFQyBncm91cCBvYmplY3QuDQo+ID4gKyAgQHBh cmFtW291dF0gQm5QcmltZSAgICBHcm91cCBwcmltZSBudW1iZXIuDQo+ID4gKyAgQHBhcmFtW291 dF0gQm5BICAgICAgICBBIGNvZWZmaWNpZW50Lg0KPiA+ICsgIEBwYXJhbVtvdXRdIEJuQiAgICAg ICAgQiBjb2VmZmljaWVudC4uDQo+ID4gKyAgQHBhcmFtW2luXSAgQm5DdHggICAgICBCTiBjb250 ZXh0Lg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgT24gc3VjY2Vzcy4NCj4g PiArICBAcmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiA+ICsqKi8NCj4gPiArQk9P TEVBTg0KPiA+ICtFRklBUEkNCj4gPiArRWNHcm91cEdldEN1cnZlICgNCj4gPiArICBJTiBDT05T VCBWT0lEICAqRWNHcm91cCwNCj4gPiArICBPVVQgVk9JRCAgICAgICAqQm5QcmltZSwNCj4gPiAr ICBPVVQgVk9JRCAgICAgICAqQm5BLA0KPiA+ICsgIE9VVCBWT0lEICAgICAgICpCbkIsDQo+ID4g KyAgSU4gVk9JRCAgICAgICAgKkJuQ3R4DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgQVNTRVJU IChGQUxTRSk7DQo+ID4gKyAgcmV0dXJuIEZBTFNFOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioN Cj4gPiArICBHZXQgRUMgZ3JvdXAgb3JkZXIuDQo+ID4gKyAgVGhpcyBmdW5jdGlvbiB3aWxsIHNl dCB0aGUgcHJvdmlkZWQgQmlnIE51bWJlciBvYmplY3QgdG8gdGhlIGNvcnJlc3BvbmRpbmcNCj4g PiArICB2YWx1ZS4gVGhlIGNhbGxlciBuZWVkcyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgIm91dCIg QmlnTnVtYmVyIHBhcmFtZXRlcg0KPiA+ICsgIGlzIHByb3Blcmx5IGluaXRpYWxpemVkLg0KPiA+ ICsNCj4gPiArICBAcGFyYW1baW5dICBFY0dyb3VwICAgRUMgZ3JvdXAgb2JqZWN0Lg0KPiA+ICsg IEBwYXJhbVtvdXRdIEJuT3JkZXIgICBHcm91cCBwcmltZSBudW1iZXIuDQo+ID4gKw0KPiA+ICsg IEByZXR2YWwgVFJVRSAgICAgICAgICBPbiBzdWNjZXNzLg0KPiA+ICsgIEByZXR2YWwgRkFMU0Ug ICAgICAgICBPdGhlcndpc2UuDQo+ID4gKyoqLw0KPiA+ICtCT09MRUFODQo+ID4gK0VGSUFQSQ0K PiA+ICtFY0dyb3VwR2V0T3JkZXIgKA0KPiA+ICsgIElOIFZPSUQgICAqRWNHcm91cCwNCj4gPiAr ICBPVVQgVk9JRCAgKkJuT3JkZXINCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBBU1NFUlQgKEZB TFNFKTsNCj4gPiArICByZXR1cm4gRkFMU0U7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ ICsgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgRUMgZ3JvdXAgb2JqZWN0IHVzaW5nIEVjR3Jv dXBJbml0KCkuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEVjR3JvdXAgICBFQyBncm91cCBv YmplY3QgdG8gZnJlZS4NCj4gPiArKiovDQo+ID4gK1ZPSUQNCj4gPiArRUZJQVBJDQo+ID4gK0Vj R3JvdXBGcmVlICgNCj4gPiArICBJTiBWT0lEICAqRWNHcm91cA0KPiA+ICsgICkNCj4gPiArew0K PiA+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBJ bml0aWFsaXplIG5ldyBvcGFxdWUgRUMgUG9pbnQgb2JqZWN0LiBUaGlzIG9iamVjdCByZXByZXNl bnRzIGFuIEVDIHBvaW50DQo+ID4gKyAgd2l0aGluIHRoZSBnaXZlbiBFQyBncm91cCAoY3VydmUp Lg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBFQyBHcm91cCwgcHJvcGVybHkgaW5pdGlhbGl6 ZWQgdXNpbmcgRWNHcm91cEluaXQoKS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFQyBQb2ludCBv YmplY3QgIE9uIHN1Y2Nlc3MuDQo+ID4gKyAgQHJldHZhbCBOVUxMICAgICAgICAgICAgIE9uIGZh aWx1cmUuDQo+ID4gKyoqLw0KPiA+ICtWT0lEICoNCj4gPiArRUZJQVBJDQo+ID4gK0VjUG9pbnRJ bml0ICgNCj4gPiArICBJTiBDT05TVCBWT0lEICAqRWNHcm91cA0KPiA+ICsgICkNCj4gPiArew0K PiA+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiA+ICsgIHJldHVybiBOVUxMOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICsvKioNCj4gPiArICBGcmVlIHByZXZpb3VzbHkgYWxsb2NhdGVkIEVDIFBvaW50IG9i amVjdCB1c2luZyBFY1BvaW50SW5pdCgpLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBFY1Bv aW50ICAgRUMgUG9pbnQgdG8gZnJlZS4NCj4gPiArICBAcGFyYW1baW5dICBDbGVhciAgICAgVFJV RSBpZmYgdGhlIG1lbW9yeSBzaG91bGQgYmUgY2xlYXJlZC4NCj4gPiArKiovDQo+ID4gK1ZPSUQN Cj4gPiArRUZJQVBJDQo+ID4gK0VjUG9pbnREZUluaXQgKA0KPiA+ICsgIElOIFZPSUQgICAgICpF Y1BvaW50LA0KPiA+ICsgIElOIEJPT0xFQU4gIENsZWFyDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4g KyAgQVNTRVJUIChGQUxTRSk7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEdldCBF QyBwb2ludCBhZmZpbmUgKHgseSkgY29vcmRpbmF0ZXMuDQo+ID4gKyAgVGhpcyBmdW5jdGlvbiB3 aWxsIHNldCB0aGUgcHJvdmlkZWQgQmlnIE51bWJlciBvYmplY3RzIHRvIHRoZSBjb3JyZXNwb25k aW5nDQo+ID4gKyAgdmFsdWVzLiBUaGUgY2FsbGVyIG5lZWRzIHRvIG1ha2Ugc3VyZSBhbGwgdGhl ICJvdXQiIEJpZ051bWJlciBwYXJhbWV0ZXJzDQo+ID4gKyAgYXJlIHByb3Blcmx5IGluaXRpYWxp emVkLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBFY0dyb3VwICAgIEVDIGdyb3VwIG9iamVj dC4NCj4gPiArICBAcGFyYW1baW5dICBFY1BvaW50ICAgIEVDIHBvaW50IG9iamVjdC4NCj4gPiAr ICBAcGFyYW1bb3V0XSBCblggICAgICAgIFggY29vcmRpbmF0ZS4NCj4gPiArICBAcGFyYW1bb3V0 XSBCblkgICAgICAgIFkgY29vcmRpbmF0ZS4NCj4gPiArICBAcGFyYW1baW5dICBCbkN0eCAgICAg IEJOIGNvbnRleHQsIGNyZWF0ZWQgd2l0aCBCaWdOdW1OZXdDb250ZXh0KCkuDQo+ID4gKw0KPiA+ ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICBPbiBzdWNjZXNzLg0KPiA+ICsgIEByZXR2YWwgRkFM U0UgICAgICAgICBPdGhlcndpc2UuDQo+ID4gKyoqLw0KPiA+ICtCT09MRUFODQo+ID4gK0VGSUFQ SQ0KPiA+ICtFY1BvaW50R2V0QWZmaW5lQ29vcmRpbmF0ZXMgKA0KPiA+ICsgIElOIENPTlNUIFZP SUQgICpFY0dyb3VwLA0KPiA+ICsgIElOIENPTlNUIFZPSUQgICpFY1BvaW50LA0KPiA+ICsgIE9V VCBWT0lEICAgICAgICpCblgsDQo+ID4gKyAgT1VUIFZPSUQgICAgICAgKkJuWSwNCj4gPiArICBJ TiBWT0lEICAgICAgICAqQm5DdHgNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBBU1NFUlQgKEZB TFNFKTsNCj4gPiArICByZXR1cm4gRkFMU0U7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ ICsgIFNldCBFQyBwb2ludCBhZmZpbmUgKHgseSkgY29vcmRpbmF0ZXMuDQo+ID4gKw0KPiA+ICsg IEBwYXJhbVtpbl0gIEVjR3JvdXAgICAgRUMgZ3JvdXAgb2JqZWN0Lg0KPiA+ICsgIEBwYXJhbVtp bl0gIEVjUG9pbnQgICAgRUMgcG9pbnQgb2JqZWN0Lg0KPiA+ICsgIEBwYXJhbVtpbl0gIEJuWCAg ICAgICAgWCBjb29yZGluYXRlLg0KPiA+ICsgIEBwYXJhbVtpbl0gIEJuWSAgICAgICAgWSBjb29y ZGluYXRlLg0KPiA+ICsgIEBwYXJhbVtpbl0gIEJuQ3R4ICAgICAgQk4gY29udGV4dCwgY3JlYXRl ZCB3aXRoIEJpZ051bU5ld0NvbnRleHQoKS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBUUlVFICAg ICAgICAgIE9uIHN1Y2Nlc3MuDQo+ID4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90aGVyd2lz ZS4NCj4gPiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ID4gK0VjUG9pbnRTZXRB ZmZpbmVDb29yZGluYXRlcyAoDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ID4g KyAgSU4gVk9JRCAgICAgICAgKkVjUG9pbnQsDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuWCwN Cj4gPiArICBJTiBDT05TVCBWT0lEICAqQm5ZLA0KPiA+ICsgIElOIFZPSUQgICAgICAgICpCbkN0 eA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiA+ICsgIHJldHVy biBGQUxTRTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgRUMgUG9pbnQgYWRkaXRp b24uIEVjUG9pbnRSZXN1bHQgPSBFY1BvaW50QSArIEVjUG9pbnRCLg0KPiA+ICsNCj4gPiArICBA cGFyYW1baW5dICBFY0dyb3VwICAgICAgICAgIEVDIGdyb3VwIG9iamVjdC4NCj4gPiArICBAcGFy YW1bb3V0XSBFY1BvaW50UmVzdWx0ICAgIEVDIHBvaW50IHRvIGhvbGQgdGhlIHJlc3VsdC4gVGhl IHBvaW50IHNob3VsZA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgcHJv cGVybHkgaW5pdGlhbGl6ZWQuDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNQb2ludEEgICAgICAgICBF QyBQb2ludC4NCj4gPiArICBAcGFyYW1baW5dICBFY1BvaW50QiAgICAgICAgIEVDIFBvaW50Lg0K PiA+ICsgIEBwYXJhbVtpbl0gIEJuQ3R4ICAgICAgICAgICAgQk4gY29udGV4dCwgY3JlYXRlZCB3 aXRoIEJpZ051bU5ld0NvbnRleHQoKS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBUUlVFICAgICAg ICAgIE9uIHN1Y2Nlc3MuDQo+ID4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90aGVyd2lzZS4N Cj4gPiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ID4gK0VjUG9pbnRBZGQgKA0K PiA+ICsgIElOIENPTlNUIFZPSUQgICpFY0dyb3VwLA0KPiA+ICsgIE9VVCBWT0lEICAgICAgICpF Y1BvaW50UmVzdWx0LA0KPiA+ICsgIElOIENPTlNUIFZPSUQgICpFY1BvaW50QSwNCj4gPiArICBJ TiBDT05TVCBWT0lEICAqRWNQb2ludEIsDQo+ID4gKyAgSU4gVk9JRCAgICAgICAgKkJuQ3R4DQo+ ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ID4gKyAgcmV0dXJuIEZB TFNFOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBWYXJpYWJsZSBFQyBwb2ludCBt dWx0aXBsaWNhdGlvbi4gRWNQb2ludFJlc3VsdCA9IEVjUG9pbnQgKiBCblBTY2FsYXIuDQo+ID4g Kw0KPiA+ICsgIEBwYXJhbVtpbl0gIEVjR3JvdXAgICAgICAgICAgRUMgZ3JvdXAgb2JqZWN0Lg0K PiA+ICsgIEBwYXJhbVtvdXRdIEVjUG9pbnRSZXN1bHQgICAgRUMgcG9pbnQgdG8gaG9sZCB0aGUg cmVzdWx0LiBUaGUgcG9pbnQgc2hvdWxkDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBiZSBwcm9wZXJseSBpbml0aWFsaXplZC4NCj4gPiArICBAcGFyYW1baW5dICBFY1BvaW50 ICAgICAgICAgIEVDIFBvaW50Lg0KPiA+ICsgIEBwYXJhbVtpbl0gIEJuUFNjYWxhciAgICAgICAg UCBTY2FsYXIuDQo+ID4gKyAgQHBhcmFtW2luXSAgQm5DdHggICAgICAgICAgICBCTiBjb250ZXh0 LCBjcmVhdGVkIHdpdGggQmlnTnVtTmV3Q29udGV4dCgpLg0KPiA+ICsNCj4gPiArICBAcmV0dmFs IFRSVUUgICAgICAgICAgT24gc3VjY2Vzcy4NCj4gPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAg T3RoZXJ3aXNlLg0KPiA+ICsqKi8NCj4gPiArQk9PTEVBTg0KPiA+ICtFRklBUEkNCj4gPiArRWNQ b2ludE11bCAoDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ID4gKyAgT1VUIFZP SUQgICAgICAgKkVjUG9pbnRSZXN1bHQsDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjUG9pbnQs DQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuUFNjYWxhciwNCj4gPiArICBJTiBWT0lEICAgICAg ICAqQm5DdHgNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gPiAr ICByZXR1cm4gRkFMU0U7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIENhbGN1bGF0 ZSB0aGUgaW52ZXJzZSBvZiB0aGUgc3VwcGxpZWQgRUMgcG9pbnQuDQo+ID4gKw0KPiA+ICsgIEBw YXJhbVtpbl0gICAgIEVjR3JvdXAgICBFQyBncm91cCBvYmplY3QuDQo+ID4gKyAgQHBhcmFtW2lu LG91dF0gRWNQb2ludCAgIEVDIHBvaW50IHRvIGludmVydC4NCj4gPiArICBAcGFyYW1baW5dICAg ICBCbkN0eCAgICAgQk4gY29udGV4dCwgY3JlYXRlZCB3aXRoIEJpZ051bU5ld0NvbnRleHQoKS4N Cj4gPiArDQo+ID4gKyAgQHJldHZhbCBUUlVFICAgICAgICAgIE9uIHN1Y2Nlc3MuDQo+ID4gKyAg QHJldHZhbCBGQUxTRSAgICAgICAgIE90aGVyd2lzZS4NCj4gPiArKiovDQo+ID4gK0JPT0xFQU4N Cj4gPiArRUZJQVBJDQo+ID4gK0VjUG9pbnRJbnZlcnQgKA0KPiA+ICsgIElOIENPTlNUIFZPSUQg ICpFY0dyb3VwLA0KPiA+ICsgIElOIE9VVCBWT0lEICAgICpFY1BvaW50LA0KPiA+ICsgIElOIFZP SUQgICAgICAgICpCbkN0eA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEFTU0VSVCAoRkFMU0Up Ow0KPiA+ICsgIHJldHVybiBGQUxTRTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAg Q2hlY2sgaWYgdGhlIHN1cHBsaWVkIHBvaW50IGlzIG9uIEVDIGN1cnZlLg0KPiA+ICsNCj4gPiAr ICBAcGFyYW1baW5dICBFY0dyb3VwICAgRUMgZ3JvdXAgb2JqZWN0Lg0KPiA+ICsgIEBwYXJhbVtp bl0gIEVjUG9pbnQgICBFQyBwb2ludCB0byBjaGVjay4NCj4gPiArICBAcGFyYW1baW5dICBCbkN0 eCAgICAgQk4gY29udGV4dCwgY3JlYXRlZCB3aXRoIEJpZ051bU5ld0NvbnRleHQoKS4NCj4gPiAr DQo+ID4gKyAgQHJldHZhbCBUUlVFICAgICAgICAgIE9uIGN1cnZlLg0KPiA+ICsgIEByZXR2YWwg RkFMU0UgICAgICAgICBPdGhlcndpc2UuDQo+ID4gKyoqLw0KPiA+ICtCT09MRUFODQo+ID4gK0VG SUFQSQ0KPiA+ICtFY1BvaW50SXNPbkN1cnZlICgNCj4gPiArICBJTiBDT05TVCBWT0lEICAqRWNH cm91cCwNCj4gPiArICBJTiBDT05TVCBWT0lEICAqRWNQb2ludCwNCj4gPiArICBJTiBWT0lEICAg ICAgICAqQm5DdHgNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBBU1NFUlQgKEZBTFNFKTsNCj4g PiArICByZXR1cm4gRkFMU0U7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIENoZWNr IGlmIHRoZSBzdXBwbGllZCBwb2ludCBpcyBhdCBpbmZpbml0eS4NCj4gPiArDQo+ID4gKyAgQHBh cmFtW2luXSAgRWNHcm91cCAgIEVDIGdyb3VwIG9iamVjdC4NCj4gPiArICBAcGFyYW1baW5dICBF Y1BvaW50ICAgRUMgcG9pbnQgdG8gY2hlY2suDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgVFJVRSAg ICAgICAgICBBdCBpbmZpbml0eS4NCj4gPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3 aXNlLg0KPiA+ICsqKi8NCj4gPiArQk9PTEVBTg0KPiA+ICtFRklBUEkNCj4gPiArRWNQb2ludElz QXRJbmZpbml0eSAoDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ID4gKyAgSU4g Q09OU1QgVk9JRCAgKkVjUG9pbnQNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBBU1NFUlQgKEZB TFNFKTsNCj4gPiArICByZXR1cm4gRkFMU0U7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ ICsgIENoZWNrIGlmIEVDIHBvaW50cyBhcmUgZXF1YWwuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtp bl0gIEVjR3JvdXAgICBFQyBncm91cCBvYmplY3QuDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNQb2lu dEEgIEVDIHBvaW50IEEuDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNQb2ludEIgIEVDIHBvaW50IEIu DQo+ID4gKyAgQHBhcmFtW2luXSAgQm5DdHggICAgIEJOIGNvbnRleHQsIGNyZWF0ZWQgd2l0aCBC aWdOdW1OZXdDb250ZXh0KCkuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICBB ID09IEIuDQo+ID4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90aGVyd2lzZS4NCj4gPiArKiov DQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ID4gK0VjUG9pbnRFcXVhbCAoDQo+ID4gKyAg SU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjUG9pbnRB LA0KPiA+ICsgIElOIENPTlNUIFZPSUQgICpFY1BvaW50QiwNCj4gPiArICBJTiBWT0lEICAgICAg ICAqQm5DdHgNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gPiAr ICByZXR1cm4gRkFMU0U7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFNldCBFQyBw b2ludCBjb21wcmVzc2VkIGNvb3JkaW5hdGVzLiBQb2ludHMgY2FuIGJlIGRlc2NyaWJlZCBpbiB0 ZXJtcyBvZg0KPiA+ICsgIHRoZWlyIGNvbXByZXNzZWQgY29vcmRpbmF0ZXMuIEZvciBhIHBvaW50 ICh4LCB5KSwgZm9yIGFueSBnaXZlbiB2YWx1ZSBmb3IgeA0KPiA+ICsgIHN1Y2ggdGhhdCB0aGUg cG9pbnQgaXMgb24gdGhlIGN1cnZlIHRoZXJlIHdpbGwgb25seSBldmVyIGJlIHR3byBwb3NzaWJs ZQ0KPiA+ICsgIHZhbHVlcyBmb3IgeS4gVGhlcmVmb3JlLCBhIHBvaW50IGNhbiBiZSBzZXQgdXNp bmcgdGhpcyBmdW5jdGlvbiB3aGVyZSBCblggaXMNCj4gPiArICB0aGUgeCBjb29yZGluYXRlIGFu ZCBZQml0IGlzIGEgdmFsdWUgMCBvciAxIHRvIGlkZW50aWZ5IHdoaWNoIG9mIHRoZSB0d28NCj4g PiArICBwb3NzaWJsZSB2YWx1ZXMgZm9yIHkgc2hvdWxkIGJlIHVzZWQuDQo+ID4gKw0KPiA+ICsg IEBwYXJhbVtpbl0gIEVjR3JvdXAgICAgRUMgZ3JvdXAgb2JqZWN0Lg0KPiA+ICsgIEBwYXJhbVtp bl0gIEVjUG9pbnQgICAgRUMgUG9pbnQuDQo+ID4gKyAgQHBhcmFtW2luXSAgQm5YICAgICAgICBY IGNvb3JkaW5hdGUuDQo+ID4gKyAgQHBhcmFtW2luXSAgWUJpdCAgICAgICAwIG9yIDEgdG8gaWRl bnRpZnkgd2hpY2ggWSB2YWx1ZSBpcyB1c2VkLg0KPiA+ICsgIEBwYXJhbVtpbl0gIEJuQ3R4ICAg ICAgQk4gY29udGV4dCwgY3JlYXRlZCB3aXRoIEJpZ051bU5ld0NvbnRleHQoKS4NCj4gPiArDQo+ ID4gKyAgQHJldHZhbCBUUlVFICAgICAgICAgIE9uIHN1Y2Nlc3MuDQo+ID4gKyAgQHJldHZhbCBG QUxTRSAgICAgICAgIE90aGVyd2lzZS4NCj4gPiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJ QVBJDQo+ID4gK0VjUG9pbnRTZXRDb21wcmVzc2VkQ29vcmRpbmF0ZXMgKA0KPiA+ICsgIElOIENP TlNUIFZPSUQgICpFY0dyb3VwLA0KPiA+ICsgIElOIFZPSUQgICAgICAgICpFY1BvaW50LA0KPiA+ ICsgIElOIENPTlNUIFZPSUQgICpCblgsDQo+ID4gKyAgSU4gVUlOVDggICAgICAgWUJpdCwNCj4g PiArICBJTiBWT0lEICAgICAgICAqQm5DdHgNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBBU1NF UlQgKEZBTFNFKTsNCj4gPiArICByZXR1cm4gRkFMU0U7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgIEFsbG9jYXRlcyBhbmQgSW5pdGlhbGl6ZXMgb25lIEVsbGlwdGljIEN1cnZlIENv bnRleHQgZm9yIHN1YnNlcXVlbnQgdXNlDQo+ID4gKyAgd2l0aCB0aGUgTklELg0KPiA+ICsNCj4g PiArICBAcGFyYW1baW5dICBOaWQgY2lwaGVyIE5JRA0KPiA+ICsgIEByZXR1cm4gICAgIFBvaW50 ZXIgdG8gdGhlIEVsbGlwdGljIEN1cnZlIENvbnRleHQgdGhhdCBoYXMgYmVlbiBpbml0aWFsaXpl ZC4NCj4gPiArICAgICAgICAgICAgICBJZiB0aGUgYWxsb2NhdGlvbnMgZmFpbHMsIEVjTmV3QnlO aWQoKSByZXR1cm5zIE5VTEwuDQo+ID4gKyoqLw0KPiA+ICtWT0lEICoNCj4gPiArRUZJQVBJDQo+ ID4gK0VjTmV3QnlOaWQgKA0KPiA+ICsgIElOIFVJTlROICBOaWQNCj4gPiArICApDQo+ID4gK3sN Cj4gPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gPiArICByZXR1cm4gTlVMTDsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArLyoqDQo+ID4gKyAgUmVsZWFzZSB0aGUgc3BlY2lmaWVkIEVDIGNvbnRleHQuDQo+ ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEVjQ29udGV4dCAgUG9pbnRlciB0byB0aGUgRUMgY29u dGV4dCB0byBiZSByZWxlYXNlZC4NCj4gPiArKiovDQo+ID4gK1ZPSUQNCj4gPiArRUZJQVBJDQo+ ID4gK0VjRnJlZSAoDQo+ID4gKyAgSU4gIFZPSUQgICpFY0NvbnRleHQNCj4gPiArICApDQo+ID4g K3sNCj4gPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4g KyAgR2VuZXJhdGVzIEVDIGtleSBhbmQgcmV0dXJucyBFQyBwdWJsaWMga2V5IChYLCBZKSwgUGxl YXNlIG5vdGUsIHRoaXMgZnVuY3Rpb24gdXNlcw0KPiA+ICsgIHBzZXVkbyByYW5kb20gbnVtYmVy IGdlbmVyYXRvci4gVGhlIGNhbGxlciBtdXN0IG1ha2Ugc3VyZSBSYW5kb21TZWVkKCkNCj4gPiAr ICBmdW5jdGlvbiB3YXMgcHJvcGVybHkgY2FsbGVkIGJlZm9yZS4NCj4gPiArICBUaGUgRWMgY29u dGV4dCBzaG91bGQgYmUgY29ycmVjdGx5IGluaXRpYWxpemVkIGJ5IEVjTmV3QnlOaWQuDQo+ID4g KyAgVGhpcyBmdW5jdGlvbiBnZW5lcmF0ZXMgcmFuZG9tIHNlY3JldCwgYW5kIGNvbXB1dGVzIHRo ZSBwdWJsaWMga2V5IChYLCBZKSwgd2hpY2ggaXMNCj4gPiArICByZXR1cm5lZCB2aWEgcGFyYW1l dGVyIFB1YmxpYywgUHVibGljU2l6ZS4NCj4gPiArICBYIGlzIHRoZSBmaXJzdCBoYWxmIG9mIFB1 YmxpYyB3aXRoIHNpemUgYmVpbmcgUHVibGljU2l6ZSAvIDIsDQo+ID4gKyAgWSBpcyB0aGUgc2Vj b25kIGhhbGYgb2YgUHVibGljIHdpdGggc2l6ZSBiZWluZyBQdWJsaWNTaXplIC8gMi4NCj4gPiAr ICBFQyBjb250ZXh0IGlzIHVwZGF0ZWQgYWNjb3JkaW5nbHkuDQo+ID4gKyAgSWYgdGhlIFB1Ymxp YyBidWZmZXIgaXMgdG9vIHNtYWxsIHRvIGhvbGQgdGhlIHB1YmxpYyBYLCBZLCBGQUxTRSBpcyBy ZXR1cm5lZCBhbmQNCj4gPiArICBQdWJsaWNTaXplIGlzIHNldCB0byB0aGUgcmVxdWlyZWQgYnVm ZmVyIHNpemUgdG8gb2J0YWluIHRoZSBwdWJsaWMgWCwgWS4NCj4gPiArICBGb3IgUC0yNTYsIHRo ZSBQdWJsaWNTaXplIGlzIDY0LiBGaXJzdCAzMi1ieXRlIGlzIFgsIFNlY29uZCAzMi1ieXRlIGlz IFkuDQo+ID4gKyAgRm9yIFAtMzg0LCB0aGUgUHVibGljU2l6ZSBpcyA5Ni4gRmlyc3QgNDgtYnl0 ZSBpcyBYLCBTZWNvbmQgNDgtYnl0ZSBpcyBZLg0KPiA+ICsgIEZvciBQLTUyMSwgdGhlIFB1Ymxp Y1NpemUgaXMgMTMyLiBGaXJzdCA2Ni1ieXRlIGlzIFgsIFNlY29uZCA2Ni1ieXRlIGlzIFkuDQo+ ID4gKyAgSWYgRWNDb250ZXh0IGlzIE5VTEwsIHRoZW4gcmV0dXJuIEZBTFNFLg0KPiA+ICsgIElm IFB1YmxpY1NpemUgaXMgTlVMTCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ID4gKyAgSWYgUHVibGlj U2l6ZSBpcyBsYXJnZSBlbm91Z2ggYnV0IFB1YmxpYyBpcyBOVUxMLCB0aGVuIHJldHVybiBGQUxT RS4NCj4gPiArICBAcGFyYW1baW4sIG91dF0gIEVjQ29udGV4dCAgICAgIFBvaW50ZXIgdG8gdGhl IEVDIGNvbnRleHQuDQo+ID4gKyAgQHBhcmFtW291dF0gICAgICBQdWJsaWNLZXkgICAgICBQb2lu dGVyIHRvIHQgYnVmZmVyIHRvIHJlY2VpdmUgZ2VuZXJhdGVkIHB1YmxpYyBYLFkuDQo+ID4gKyAg QHBhcmFtW2luLCBvdXRdICBQdWJsaWNLZXlTaXplICBPbiBpbnB1dCwgdGhlIHNpemUgb2YgUHVi bGljIGJ1ZmZlciBpbiBieXRlcy4NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE9uIG91dHB1dCwgdGhlIHNpemUgb2YgZGF0YSByZXR1cm5lZCBpbiBQdWJsaWMgYnVmZmVy IGluIGJ5dGVzLg0KPiA+ICsgIEByZXR2YWwgVFJVRSAgIEVDIHB1YmxpYyBYLFkgZ2VuZXJhdGlv biBzdWNjZWVkZWQuDQo+ID4gKyAgQHJldHZhbCBGQUxTRSAgRUMgcHVibGljIFgsWSBnZW5lcmF0 aW9uIGZhaWxlZC4NCj4gPiArICBAcmV0dmFsIEZBTFNFICBQdWJsaWNLZXlTaXplIGlzIG5vdCBs YXJnZSBlbm91Z2guDQo+ID4gKyoqLw0KPiA+ICtCT09MRUFODQo+ID4gK0VGSUFQSQ0KPiA+ICtF Y0dlbmVyYXRlS2V5ICgNCj4gPiArICBJTiBPVVQgIFZPSUQgICAqRWNDb250ZXh0LA0KPiA+ICsg IE9VVCAgICAgVUlOVDggICpQdWJsaWNLZXksDQo+ID4gKyAgSU4gT1VUICBVSU5UTiAgKlB1Ymxp Y0tleVNpemUNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gPiAr ICByZXR1cm4gRkFMU0U7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEdldHMgdGhl IHB1YmxpYyBrZXkgY29tcG9uZW50IGZyb20gdGhlIGVzdGFibGlzaGVkIEVDIGNvbnRleHQuDQo+ ID4gKyAgVGhlIEVjIGNvbnRleHQgc2hvdWxkIGJlIGNvcnJlY3RseSBpbml0aWFsaXplZCBieSBF Y05ld0J5TmlkLCBhbmQgc3VjY2Vzc2Z1bGx5DQo+ID4gKyAgZ2VuZXJhdGUga2V5IHBhaXIgZnJv bSBFY0dlbmVyYXRlS2V5KCkuDQo+ID4gKyAgRm9yIFAtMjU2LCB0aGUgUHVibGljU2l6ZSBpcyA2 NC4gRmlyc3QgMzItYnl0ZSBpcyBYLCBTZWNvbmQgMzItYnl0ZSBpcyBZLg0KPiA+ICsgIEZvciBQ LTM4NCwgdGhlIFB1YmxpY1NpemUgaXMgOTYuIEZpcnN0IDQ4LWJ5dGUgaXMgWCwgU2Vjb25kIDQ4 LWJ5dGUgaXMgWS4NCj4gPiArICBGb3IgUC01MjEsIHRoZSBQdWJsaWNTaXplIGlzIDEzMi4gRmly c3QgNjYtYnl0ZSBpcyBYLCBTZWNvbmQgNjYtYnl0ZSBpcyBZLg0KPiA+ICsgIEBwYXJhbVtpbiwg b3V0XSAgRWNDb250ZXh0ICAgICAgUG9pbnRlciB0byBFQyBjb250ZXh0IGJlaW5nIHNldC4NCj4g PiArICBAcGFyYW1bb3V0XSAgICAgIFB1YmxpY0tleSAgICAgIFBvaW50ZXIgdG8gdCBidWZmZXIg dG8gcmVjZWl2ZSBnZW5lcmF0ZWQgcHVibGljIFgsWS4NCj4gPiArICBAcGFyYW1baW4sIG91dF0g IFB1YmxpY0tleVNpemUgIE9uIGlucHV0LCB0aGUgc2l6ZSBvZiBQdWJsaWMgYnVmZmVyIGluIGJ5 dGVzLg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT24gb3V0cHV0LCB0 aGUgc2l6ZSBvZiBkYXRhIHJldHVybmVkIGluIFB1YmxpYyBidWZmZXIgaW4gYnl0ZXMuDQo+ID4g KyAgQHJldHZhbCAgVFJVRSAgIEVDIGtleSBjb21wb25lbnQgd2FzIHJldHJpZXZlZCBzdWNjZXNz ZnVsbHkuDQo+ID4gKyAgQHJldHZhbCAgRkFMU0UgIEludmFsaWQgRUMga2V5IGNvbXBvbmVudC4N Cj4gPiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ID4gK0VjR2V0UHViS2V5ICgN Cj4gPiArICBJTiBPVVQgIFZPSUQgICAqRWNDb250ZXh0LA0KPiA+ICsgIE9VVCAgICAgVUlOVDgg ICpQdWJsaWNLZXksDQo+ID4gKyAgSU4gT1VUICBVSU5UTiAgKlB1YmxpY0tleVNpemUNCj4gPiAr ICApDQo+ID4gK3sNCj4gPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gPiArICByZXR1cm4gRkFMU0U7 DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIENvbXB1dGVzIGV4Y2hhbmdlZCBjb21t b24ga2V5Lg0KPiA+ICsgIEdpdmVuIHBlZXIncyBwdWJsaWMga2V5IChYLCBZKSwgdGhpcyBmdW5j dGlvbiBjb21wdXRlcyB0aGUgZXhjaGFuZ2VkIGNvbW1vbiBrZXksDQo+ID4gKyAgYmFzZWQgb24g aXRzIG93biBjb250ZXh0IGluY2x1ZGluZyB2YWx1ZSBvZiBjdXJ2ZSBwYXJhbWV0ZXIgYW5kIHJh bmRvbSBzZWNyZXQuDQo+ID4gKyAgWCBpcyB0aGUgZmlyc3QgaGFsZiBvZiBQZWVyUHVibGljIHdp dGggc2l6ZSBiZWluZyBQZWVyUHVibGljU2l6ZSAvIDIsDQo+ID4gKyAgWSBpcyB0aGUgc2Vjb25k IGhhbGYgb2YgUGVlclB1YmxpYyB3aXRoIHNpemUgYmVpbmcgUGVlclB1YmxpY1NpemUgLyAyLg0K PiA+ICsgIElmIEVjQ29udGV4dCBpcyBOVUxMLCB0aGVuIHJldHVybiBGQUxTRS4NCj4gPiArICBJ ZiBQZWVyUHVibGljIGlzIE5VTEwsIHRoZW4gcmV0dXJuIEZBTFNFLg0KPiA+ICsgIElmIFBlZXJQ dWJsaWNTaXplIGlzIDAsIHRoZW4gcmV0dXJuIEZBTFNFLg0KPiA+ICsgIElmIEtleSBpcyBOVUxM LCB0aGVuIHJldHVybiBGQUxTRS4NCj4gPiArICBJZiBLZXlTaXplIGlzIG5vdCBsYXJnZSBlbm91 Z2gsIHRoZW4gcmV0dXJuIEZBTFNFLg0KPiA+ICsgIEZvciBQLTI1NiwgdGhlIFBlZXJQdWJsaWNT aXplIGlzIDY0LiBGaXJzdCAzMi1ieXRlIGlzIFgsIFNlY29uZCAzMi1ieXRlIGlzIFkuDQo+ID4g KyAgRm9yIFAtMzg0LCB0aGUgUGVlclB1YmxpY1NpemUgaXMgOTYuIEZpcnN0IDQ4LWJ5dGUgaXMg WCwgU2Vjb25kIDQ4LWJ5dGUgaXMgWS4NCj4gPiArICBGb3IgUC01MjEsIHRoZSBQZWVyUHVibGlj U2l6ZSBpcyAxMzIuIEZpcnN0IDY2LWJ5dGUgaXMgWCwgU2Vjb25kIDY2LWJ5dGUgaXMgWS4NCj4g PiArICBAcGFyYW1baW4sIG91dF0gIEVjQ29udGV4dCAgICAgICAgICBQb2ludGVyIHRvIHRoZSBF QyBjb250ZXh0Lg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICAgUGVlclB1YmxpYyAgICAgICAgIFBv aW50ZXIgdG8gdGhlIHBlZXIncyBwdWJsaWMgWCxZLg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICAg UGVlclB1YmxpY1NpemUgICAgIFNpemUgb2YgcGVlcidzIHB1YmxpYyBYLFkgaW4gYnl0ZXMuDQo+ ID4gKyAgQHBhcmFtW2luXSAgICAgICBDb21wcmVzc0ZsYWcgICAgICAgRmxhZyBvZiBQZWVyUHVi bGljIGlzIGNvbXByZXNzZWQgb3Igbm90Lg0KPiA+ICsgIEBwYXJhbVtvdXRdICAgICAgS2V5ICAg ICAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0byByZWNlaXZlIGdlbmVyYXRlZCBr ZXkuDQo+ID4gKyAgQHBhcmFtW2luLCBvdXRdICBLZXlTaXplICAgICAgICAgICAgT24gaW5wdXQs IHRoZSBzaXplIG9mIEtleSBidWZmZXIgaW4gYnl0ZXMuDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgT24gb3V0cHV0LCB0aGUgc2l6ZSBvZiBkYXRhIHJldHVybmVk IGluIEtleSBidWZmZXIgaW4gYnl0ZXMuDQo+ID4gKyAgQHJldHZhbCBUUlVFICAgRUMgZXhjaGFu Z2VkIGtleSBnZW5lcmF0aW9uIHN1Y2NlZWRlZC4NCj4gPiArICBAcmV0dmFsIEZBTFNFICBFQyBl eGNoYW5nZWQga2V5IGdlbmVyYXRpb24gZmFpbGVkLg0KPiA+ICsgIEByZXR2YWwgRkFMU0UgIEtl eVNpemUgaXMgbm90IGxhcmdlIGVub3VnaC4NCj4gPiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiAr RUZJQVBJDQo+ID4gK0VjRGhDb21wdXRlS2V5ICgNCj4gPiArICBJTiBPVVQgIFZPSUQgICAgICAg ICAqRWNDb250ZXh0LA0KPiA+ICsgIElOICAgICAgQ09OU1QgVUlOVDggICpQZWVyUHVibGljLA0K PiA+ICsgIElOICAgICAgVUlOVE4gICAgICAgIFBlZXJQdWJsaWNTaXplLA0KPiA+ICsgIElOICAg ICAgQ09OU1QgSU5UMzIgICpDb21wcmVzc0ZsYWcsDQo+ID4gKyAgT1VUICAgICBVSU5UOCAgICAg ICAgKktleSwNCj4gPiArICBJTiBPVVQgIFVJTlROICAgICAgICAqS2V5U2l6ZQ0KPiA+ICsgICkN Cj4gPiArew0KPiA+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiA+ICsgIHJldHVybiBGQUxTRTsNCj4g PiArfQ0KPiA+IGRpZmYgLS1naXQgYS9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvU21t Q3J5cHRMaWIuaW5mIGIvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL1NtbUNyeXB0TGli LmluZg0KPiA+IGluZGV4IGNlNmE3ODlkZmQuLjRiYzMwNjM0ODUgMTAwNjQ0DQo+ID4gLS0tIGEv Q3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL1NtbUNyeXB0TGliLmluZg0KPiA+ICsrKyBi L0NyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExpYi9TbW1DcnlwdExpYi5pbmYNCj4gPiBAQCAt NTksNiArNTksNyBAQA0KPiA+ICAgIFBrL0NyeXB0VHNOdWxsLmMNCj4gPiAgICBQay9DcnlwdFJz YVBzcy5jDQo+ID4gICAgUGsvQ3J5cHRSc2FQc3NTaWduTnVsbC5jDQo+ID4gKyAgUGsvQ3J5cHRF Y051bGwuYw0KPiA+ICAgIFBlbS9DcnlwdFBlbS5jDQo+ID4gICAgQm4vQ3J5cHRCbk51bGwuYw0K PiA+DQo+ID4gZGlmZiAtLWdpdCBhL0NyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExpYk51bGwv QmFzZUNyeXB0TGliTnVsbC5pbmYNCj4gYi9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWJO dWxsL0Jhc2VDcnlwdExpYk51bGwuaW5mDQo+ID4gaW5kZXggMzU0ZjNkODBhYS4uZTFhNTdlZjA5 ZiAxMDA2NDQNCj4gPiAtLS0gYS9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWJOdWxsL0Jh c2VDcnlwdExpYk51bGwuaW5mDQo+ID4gKysrIGIvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0 TGliTnVsbC9CYXNlQ3J5cHRMaWJOdWxsLmluZg0KPiA+IEBAIC00OSw2ICs0OSw3IEBADQo+ID4g ICAgUGsvQ3J5cHRYNTA5TnVsbC5jDQo+ID4gICAgUGsvQ3J5cHRBdXRoZW50aWNvZGVOdWxsLmMN Cj4gPiAgICBQay9DcnlwdFRzTnVsbC5jDQo+ID4gKyAgUGsvQ3J5cHRFY051bGwuYw0KPiA+ICAg IFBlbS9DcnlwdFBlbU51bGwuYw0KPiA+ICAgIFJhbmQvQ3J5cHRSYW5kTnVsbC5jDQo+ID4gICAg UGsvQ3J5cHRSc2FQc3NOdWxsLmMNCj4gPiBkaWZmIC0tZ2l0IGEvQ3J5cHRvUGtnL0xpYnJhcnkv QmFzZUNyeXB0TGliTnVsbC9Qay9DcnlwdEVjTnVsbC5jIGIvQ3J5cHRvUGtnL0xpYnJhcnkvQmFz ZUNyeXB0TGliTnVsbC9Qay9DcnlwdEVjTnVsbC5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQN Cj4gPiBpbmRleCAwMDAwMDAwMDAwLi5kOWYxMDA0ZjZjDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ ICsrKyBiL0NyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExpYk51bGwvUGsvQ3J5cHRFY051bGwu Yw0KPiA+IEBAIC0wLDAgKzEsNDk2IEBADQo+ID4gKy8qKiBAZmlsZQ0KPiA+ICsgIEVsbGlwdGlj IEN1cnZlIGFuZCBFQ0RIIEFQSSBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiBPcGVuU1NMDQo+ID4g Kw0KPiA+ICsgIENvcHlyaWdodCAoYykgMjAyMiwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdo dHMgcmVzZXJ2ZWQuPEJSPg0KPiA+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1D bGF1c2UtUGF0ZW50DQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxMaWJy YXJ5L0Jhc2VDcnlwdExpYi5oPg0KPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0K PiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgSW5pdGlhbGl6ZSBuZXcgb3BhcXVlIEVjR3JvdXAgb2Jq ZWN0LiBUaGlzIG9iamVjdCByZXByZXNlbnRzIGFuIEVDIGN1cnZlIGFuZA0KPiA+ICsgIGFuZCBp cyB1c2VkIGZvciBjYWxjdWxhdGlvbiB3aXRoaW4gdGhpcyBncm91cC4gVGhpcyBvYmplY3Qgc2hv dWxkIGJlIGZyZWVkDQo+ID4gKyAgdXNpbmcgRWNHcm91cEZyZWUoKSBmdW5jdGlvbi4NCj4gPiAr DQo+ID4gKyAgQHBhcmFtW2luXSAgQ3J5cHRvTmlkICAgSWRlbnRpZnlpbmcgbnVtYmVyIGZvciB0 aGUgRUNDIGN1cnZlIChEZWZpbmVkIGluDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg QmFzZUNyeXB0TGliLmgpLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVjR3JvdXAgb2JqZWN0ICBP biBzdWNjZXNzLg0KPiA+ICsgIEByZXR2YWwgTlVMTCAgICAgICAgICAgIE9uIGZhaWx1cmUuDQo+ ID4gKyoqLw0KPiA+ICtWT0lEICoNCj4gPiArRUZJQVBJDQo+ID4gK0VjR3JvdXBJbml0ICgNCj4g PiArICBJTiBVSU5UTiAgQ3J5cHRvTmlkDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgQVNTRVJU IChGQUxTRSk7DQo+ID4gKyAgcmV0dXJuIE5VTEw7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0K PiA+ICsgIEdldCBFQyBjdXJ2ZSBwYXJhbWV0ZXJzLiBXaGlsZSBlbGxpcHRpYyBjdXJ2ZSBlcXVh dGlvbiBpcyBZXjIgbW9kIFAgPSAoWF4zICsgQVggKyBCKSBNb2QgUC4NCj4gPiArICBUaGlzIGZ1 bmN0aW9uIHdpbGwgc2V0IHRoZSBwcm92aWRlZCBCaWcgTnVtYmVyIG9iamVjdHMgIHRvIHRoZSBj b3JyZXNwb25kaW5nDQo+ID4gKyAgdmFsdWVzLiBUaGUgY2FsbGVyIG5lZWRzIHRvIG1ha2Ugc3Vy ZSBhbGwgdGhlICJvdXQiIEJpZ051bWJlciBwYXJhbWV0ZXJzDQo+ID4gKyAgYXJlIHByb3Blcmx5 IGluaXRpYWxpemVkLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBFY0dyb3VwICAgIEVDIGdy b3VwIG9iamVjdC4NCj4gPiArICBAcGFyYW1bb3V0XSBCblByaW1lICAgIEdyb3VwIHByaW1lIG51 bWJlci4NCj4gPiArICBAcGFyYW1bb3V0XSBCbkEgICAgICAgIEEgY29lZmZpY2llbnQuDQo+ID4g KyAgQHBhcmFtW291dF0gQm5CICAgICAgICBCIGNvZWZmaWNpZW50Li4NCj4gPiArICBAcGFyYW1b aW5dICBCbkN0eCAgICAgIEJOIGNvbnRleHQuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgVFJVRSAg ICAgICAgICBPbiBzdWNjZXNzLg0KPiA+ICsgIEByZXR2YWwgRkFMU0UgICAgICAgICBPdGhlcndp c2UuDQo+ID4gKyoqLw0KPiA+ICtCT09MRUFODQo+ID4gK0VGSUFQSQ0KPiA+ICtFY0dyb3VwR2V0 Q3VydmUgKA0KPiA+ICsgIElOIENPTlNUIFZPSUQgICpFY0dyb3VwLA0KPiA+ICsgIE9VVCBWT0lE ICAgICAgICpCblByaW1lLA0KPiA+ICsgIE9VVCBWT0lEICAgICAgICpCbkEsDQo+ID4gKyAgT1VU IFZPSUQgICAgICAgKkJuQiwNCj4gPiArICBJTiBWT0lEICAgICAgICAqQm5DdHgNCj4gPiArICAp DQo+ID4gK3sNCj4gPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gPiArICByZXR1cm4gRkFMU0U7DQo+ ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEdldCBFQyBncm91cCBvcmRlci4NCj4gPiAr ICBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSBwcm92aWRlZCBCaWcgTnVtYmVyIG9iamVjdCB0 byB0aGUgY29ycmVzcG9uZGluZw0KPiA+ICsgIHZhbHVlLiBUaGUgY2FsbGVyIG5lZWRzIHRvIG1h a2Ugc3VyZSB0aGF0IHRoZSAib3V0IiBCaWdOdW1iZXIgcGFyYW1ldGVyDQo+ID4gKyAgaXMgcHJv cGVybHkgaW5pdGlhbGl6ZWQuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEVjR3JvdXAgICBF QyBncm91cCBvYmplY3QuDQo+ID4gKyAgQHBhcmFtW291dF0gQm5PcmRlciAgIEdyb3VwIHByaW1l IG51bWJlci4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBUUlVFICAgICAgICAgIE9uIHN1Y2Nlc3Mu DQo+ID4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90aGVyd2lzZS4NCj4gPiArKiovDQo+ID4g K0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ID4gK0VjR3JvdXBHZXRPcmRlciAoDQo+ID4gKyAgSU4g Vk9JRCAgICpFY0dyb3VwLA0KPiA+ICsgIE9VVCBWT0lEICAqQm5PcmRlcg0KPiA+ICsgICkNCj4g PiArew0KPiA+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiA+ICsgIHJldHVybiBGQUxTRTsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgRnJlZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBFQyBn cm91cCBvYmplY3QgdXNpbmcgRWNHcm91cEluaXQoKS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2lu XSAgRWNHcm91cCAgIEVDIGdyb3VwIG9iamVjdCB0byBmcmVlLg0KPiA+ICsqKi8NCj4gPiArVk9J RA0KPiA+ICtFRklBUEkNCj4gPiArRWNHcm91cEZyZWUgKA0KPiA+ICsgIElOIFZPSUQgICpFY0dy b3VwDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ID4gK30NCj4g PiArDQo+ID4gKy8qKg0KPiA+ICsgIEluaXRpYWxpemUgbmV3IG9wYXF1ZSBFQyBQb2ludCBvYmpl Y3QuIFRoaXMgb2JqZWN0IHJlcHJlc2VudHMgYW4gRUMgcG9pbnQNCj4gPiArICB3aXRoaW4gdGhl IGdpdmVuIEVDIGdyb3VwIChjdXJ2ZSkuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEVDIEdy b3VwLCBwcm9wZXJseSBpbml0aWFsaXplZCB1c2luZyBFY0dyb3VwSW5pdCgpLg0KPiA+ICsNCj4g PiArICBAcmV0dmFsIEVDIFBvaW50IG9iamVjdCAgT24gc3VjY2Vzcy4NCj4gPiArICBAcmV0dmFs IE5VTEwgICAgICAgICAgICAgT24gZmFpbHVyZS4NCj4gPiArKiovDQo+ID4gK1ZPSUQgKg0KPiA+ ICtFRklBUEkNCj4gPiArRWNQb2ludEluaXQgKA0KPiA+ICsgIElOIENPTlNUIFZPSUQgICpFY0dy b3VwDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ID4gKyAgcmV0 dXJuIE5VTEw7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEZyZWUgcHJldmlvdXNs eSBhbGxvY2F0ZWQgRUMgUG9pbnQgb2JqZWN0IHVzaW5nIEVjUG9pbnRJbml0KCkuDQo+ID4gKw0K PiA+ICsgIEBwYXJhbVtpbl0gIEVjUG9pbnQgICBFQyBQb2ludCB0byBmcmVlLg0KPiA+ICsgIEBw YXJhbVtpbl0gIENsZWFyICAgICBUUlVFIGlmZiB0aGUgbWVtb3J5IHNob3VsZCBiZSBjbGVhcmVk Lg0KPiA+ICsqKi8NCj4gPiArVk9JRA0KPiA+ICtFRklBUEkNCj4gPiArRWNQb2ludERlSW5pdCAo DQo+ID4gKyAgSU4gVk9JRCAgICAgKkVjUG9pbnQsDQo+ID4gKyAgSU4gQk9PTEVBTiAgQ2xlYXIN Cj4gPiArICApDQo+ID4gK3sNCj4gPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArLyoqDQo+ID4gKyAgR2V0IEVDIHBvaW50IGFmZmluZSAoeCx5KSBjb29yZGluYXRlcy4N Cj4gPiArICBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSBwcm92aWRlZCBCaWcgTnVtYmVyIG9i amVjdHMgdG8gdGhlIGNvcnJlc3BvbmRpbmcNCj4gPiArICB2YWx1ZXMuIFRoZSBjYWxsZXIgbmVl ZHMgdG8gbWFrZSBzdXJlIGFsbCB0aGUgIm91dCIgQmlnTnVtYmVyIHBhcmFtZXRlcnMNCj4gPiAr ICBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEVj R3JvdXAgICAgRUMgZ3JvdXAgb2JqZWN0Lg0KPiA+ICsgIEBwYXJhbVtpbl0gIEVjUG9pbnQgICAg RUMgcG9pbnQgb2JqZWN0Lg0KPiA+ICsgIEBwYXJhbVtvdXRdIEJuWCAgICAgICAgWCBjb29yZGlu YXRlLg0KPiA+ICsgIEBwYXJhbVtvdXRdIEJuWSAgICAgICAgWSBjb29yZGluYXRlLg0KPiA+ICsg IEBwYXJhbVtpbl0gIEJuQ3R4ICAgICAgQk4gY29udGV4dCwgY3JlYXRlZCB3aXRoIEJpZ051bU5l d0NvbnRleHQoKS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBUUlVFICAgICAgICAgIE9uIHN1Y2Nl c3MuDQo+ID4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90aGVyd2lzZS4NCj4gPiArKiovDQo+ ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ID4gK0VjUG9pbnRHZXRBZmZpbmVDb29yZGluYXRl cyAoDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ID4gKyAgSU4gQ09OU1QgVk9J RCAgKkVjUG9pbnQsDQo+ID4gKyAgT1VUIFZPSUQgICAgICAgKkJuWCwNCj4gPiArICBPVVQgVk9J RCAgICAgICAqQm5ZLA0KPiA+ICsgIElOIFZPSUQgICAgICAgICpCbkN0eA0KPiA+ICsgICkNCj4g PiArew0KPiA+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiA+ICsgIHJldHVybiBGQUxTRTsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgU2V0IEVDIHBvaW50IGFmZmluZSAoeCx5KSBjb29y ZGluYXRlcy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNHcm91cCAgICBFQyBncm91cCBv YmplY3QuDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNQb2ludCAgICBFQyBwb2ludCBvYmplY3QuDQo+ ID4gKyAgQHBhcmFtW2luXSAgQm5YICAgICAgICBYIGNvb3JkaW5hdGUuDQo+ID4gKyAgQHBhcmFt W2luXSAgQm5ZICAgICAgICBZIGNvb3JkaW5hdGUuDQo+ID4gKyAgQHBhcmFtW2luXSAgQm5DdHgg ICAgICBCTiBjb250ZXh0LCBjcmVhdGVkIHdpdGggQmlnTnVtTmV3Q29udGV4dCgpLg0KPiA+ICsN Cj4gPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgT24gc3VjY2Vzcy4NCj4gPiArICBAcmV0dmFs IEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiA+ICsqKi8NCj4gPiArQk9PTEVBTg0KPiA+ICtF RklBUEkNCj4gPiArRWNQb2ludFNldEFmZmluZUNvb3JkaW5hdGVzICgNCj4gPiArICBJTiBDT05T VCBWT0lEICAqRWNHcm91cCwNCj4gPiArICBJTiBWT0lEICAgICAgICAqRWNQb2ludCwNCj4gPiAr ICBJTiBDT05TVCBWT0lEICAqQm5YLA0KPiA+ICsgIElOIENPTlNUIFZPSUQgICpCblksDQo+ID4g KyAgSU4gVk9JRCAgICAgICAgKkJuQ3R4DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgQVNTRVJU IChGQUxTRSk7DQo+ID4gKyAgcmV0dXJuIEZBTFNFOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioN Cj4gPiArICBFQyBQb2ludCBhZGRpdGlvbi4gRWNQb2ludFJlc3VsdCA9IEVjUG9pbnRBICsgRWNQ b2ludEIuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEVjR3JvdXAgICAgICAgICAgRUMgZ3Jv dXAgb2JqZWN0Lg0KPiA+ICsgIEBwYXJhbVtvdXRdIEVjUG9pbnRSZXN1bHQgICAgRUMgcG9pbnQg dG8gaG9sZCB0aGUgcmVzdWx0LiBUaGUgcG9pbnQgc2hvdWxkDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBiZSBwcm9wZXJseSBpbml0aWFsaXplZC4NCj4gPiArICBAcGFyYW1b aW5dICBFY1BvaW50QSAgICAgICAgIEVDIFBvaW50Lg0KPiA+ICsgIEBwYXJhbVtpbl0gIEVjUG9p bnRCICAgICAgICAgRUMgUG9pbnQuDQo+ID4gKyAgQHBhcmFtW2luXSAgQm5DdHggICAgICAgICAg ICBCTiBjb250ZXh0LCBjcmVhdGVkIHdpdGggQmlnTnVtTmV3Q29udGV4dCgpLg0KPiA+ICsNCj4g PiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgT24gc3VjY2Vzcy4NCj4gPiArICBAcmV0dmFsIEZB TFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiA+ICsqKi8NCj4gPiArQk9PTEVBTg0KPiA+ICtFRklB UEkNCj4gPiArRWNQb2ludEFkZCAoDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ ID4gKyAgT1VUIFZPSUQgICAgICAgKkVjUG9pbnRSZXN1bHQsDQo+ID4gKyAgSU4gQ09OU1QgVk9J RCAgKkVjUG9pbnRBLA0KPiA+ICsgIElOIENPTlNUIFZPSUQgICpFY1BvaW50QiwNCj4gPiArICBJ TiBWT0lEICAgICAgICAqQm5DdHgNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBBU1NFUlQgKEZB TFNFKTsNCj4gPiArICByZXR1cm4gRkFMU0U7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ ICsgIFZhcmlhYmxlIEVDIHBvaW50IG11bHRpcGxpY2F0aW9uLiBFY1BvaW50UmVzdWx0ID0gRWNQ b2ludCAqIEJuUFNjYWxhci4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNHcm91cCAgICAg ICAgICBFQyBncm91cCBvYmplY3QuDQo+ID4gKyAgQHBhcmFtW291dF0gRWNQb2ludFJlc3VsdCAg ICBFQyBwb2ludCB0byBob2xkIHRoZSByZXN1bHQuIFRoZSBwb2ludCBzaG91bGQNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHByb3Blcmx5IGluaXRpYWxpemVkLg0KPiA+ ICsgIEBwYXJhbVtpbl0gIEVjUG9pbnQgICAgICAgICAgRUMgUG9pbnQuDQo+ID4gKyAgQHBhcmFt W2luXSAgQm5QU2NhbGFyICAgICAgICBQIFNjYWxhci4NCj4gPiArICBAcGFyYW1baW5dICBCbkN0 eCAgICAgICAgICAgIEJOIGNvbnRleHQsIGNyZWF0ZWQgd2l0aCBCaWdOdW1OZXdDb250ZXh0KCku DQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICBPbiBzdWNjZXNzLg0KPiA+ICsg IEByZXR2YWwgRkFMU0UgICAgICAgICBPdGhlcndpc2UuDQo+ID4gKyoqLw0KPiA+ICtCT09MRUFO DQo+ID4gK0VGSUFQSQ0KPiA+ICtFY1BvaW50TXVsICgNCj4gPiArICBJTiBDT05TVCBWT0lEICAq RWNHcm91cCwNCj4gPiArICBPVVQgVk9JRCAgICAgICAqRWNQb2ludFJlc3VsdCwNCj4gPiArICBJ TiBDT05TVCBWT0lEICAqRWNQb2ludCwNCj4gPiArICBJTiBDT05TVCBWT0lEICAqQm5QU2NhbGFy LA0KPiA+ICsgIElOIFZPSUQgICAgICAgICpCbkN0eA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsg IEFTU0VSVCAoRkFMU0UpOw0KPiA+ICsgIHJldHVybiBGQUxTRTsNCj4gPiArfQ0KPiA+ICsNCj4g PiArLyoqDQo+ID4gKyAgQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIG9mIHRoZSBzdXBwbGllZCBFQyBw b2ludC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgRWNHcm91cCAgIEVDIGdyb3VwIG9i amVjdC4NCj4gPiArICBAcGFyYW1baW4sb3V0XSBFY1BvaW50ICAgRUMgcG9pbnQgdG8gaW52ZXJ0 Lg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgIEJuQ3R4ICAgICBCTiBjb250ZXh0LCBjcmVhdGVkIHdp dGggQmlnTnVtTmV3Q29udGV4dCgpLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIFRSVUUgICAgICAg ICAgT24gc3VjY2Vzcy4NCj4gPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0K PiA+ICsqKi8NCj4gPiArQk9PTEVBTg0KPiA+ICtFRklBUEkNCj4gPiArRWNQb2ludEludmVydCAo DQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ID4gKyAgSU4gT1VUIFZPSUQgICAg KkVjUG9pbnQsDQo+ID4gKyAgSU4gVk9JRCAgICAgICAgKkJuQ3R4DQo+ID4gKyAgKQ0KPiA+ICt7 DQo+ID4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ID4gKyAgcmV0dXJuIEZBTFNFOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICsvKioNCj4gPiArICBDaGVjayBpZiB0aGUgc3VwcGxpZWQgcG9pbnQgaXMgb24g RUMgY3VydmUuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEVjR3JvdXAgICBFQyBncm91cCBv YmplY3QuDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNQb2ludCAgIEVDIHBvaW50IHRvIGNoZWNrLg0K PiA+ICsgIEBwYXJhbVtpbl0gIEJuQ3R4ICAgICBCTiBjb250ZXh0LCBjcmVhdGVkIHdpdGggQmln TnVtTmV3Q29udGV4dCgpLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgT24g Y3VydmUuDQo+ID4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90aGVyd2lzZS4NCj4gPiArKiov DQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ID4gK0VjUG9pbnRJc09uQ3VydmUgKA0KPiA+ ICsgIElOIENPTlNUIFZPSUQgICpFY0dyb3VwLA0KPiA+ICsgIElOIENPTlNUIFZPSUQgICpFY1Bv aW50LA0KPiA+ICsgIElOIFZPSUQgICAgICAgICpCbkN0eA0KPiA+ICsgICkNCj4gPiArew0KPiA+ ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiA+ICsgIHJldHVybiBGQUxTRTsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArLyoqDQo+ID4gKyAgQ2hlY2sgaWYgdGhlIHN1cHBsaWVkIHBvaW50IGlzIGF0IGluZmlu aXR5Lg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBFY0dyb3VwICAgRUMgZ3JvdXAgb2JqZWN0 Lg0KPiA+ICsgIEBwYXJhbVtpbl0gIEVjUG9pbnQgICBFQyBwb2ludCB0byBjaGVjay4NCj4gPiAr DQo+ID4gKyAgQHJldHZhbCBUUlVFICAgICAgICAgIEF0IGluZmluaXR5Lg0KPiA+ICsgIEByZXR2 YWwgRkFMU0UgICAgICAgICBPdGhlcndpc2UuDQo+ID4gKyoqLw0KPiA+ICtCT09MRUFODQo+ID4g K0VGSUFQSQ0KPiA+ICtFY1BvaW50SXNBdEluZmluaXR5ICgNCj4gPiArICBJTiBDT05TVCBWT0lE ICAqRWNHcm91cCwNCj4gPiArICBJTiBDT05TVCBWT0lEICAqRWNQb2ludA0KPiA+ICsgICkNCj4g PiArew0KPiA+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiA+ICsgIHJldHVybiBGQUxTRTsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgQ2hlY2sgaWYgRUMgcG9pbnRzIGFyZSBlcXVhbC4N Cj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNHcm91cCAgIEVDIGdyb3VwIG9iamVjdC4NCj4g PiArICBAcGFyYW1baW5dICBFY1BvaW50QSAgRUMgcG9pbnQgQS4NCj4gPiArICBAcGFyYW1baW5d ICBFY1BvaW50QiAgRUMgcG9pbnQgQi4NCj4gPiArICBAcGFyYW1baW5dICBCbkN0eCAgICAgQk4g Y29udGV4dCwgY3JlYXRlZCB3aXRoIEJpZ051bU5ld0NvbnRleHQoKS4NCj4gPiArDQo+ID4gKyAg QHJldHZhbCBUUlVFICAgICAgICAgIEEgPT0gQi4NCj4gPiArICBAcmV0dmFsIEZBTFNFICAgICAg ICAgT3RoZXJ3aXNlLg0KPiA+ICsqKi8NCj4gPiArQk9PTEVBTg0KPiA+ICtFRklBUEkNCj4gPiAr RWNQb2ludEVxdWFsICgNCj4gPiArICBJTiBDT05TVCBWT0lEICAqRWNHcm91cCwNCj4gPiArICBJ TiBDT05TVCBWT0lEICAqRWNQb2ludEEsDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjUG9pbnRC LA0KPiA+ICsgIElOIFZPSUQgICAgICAgICpCbkN0eA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsg IEFTU0VSVCAoRkFMU0UpOw0KPiA+ICsgIHJldHVybiBGQUxTRTsNCj4gPiArfQ0KPiA+ICsNCj4g PiArLyoqDQo+ID4gKyAgU2V0IEVDIHBvaW50IGNvbXByZXNzZWQgY29vcmRpbmF0ZXMuIFBvaW50 cyBjYW4gYmUgZGVzY3JpYmVkIGluIHRlcm1zIG9mDQo+ID4gKyAgdGhlaXIgY29tcHJlc3NlZCBj b29yZGluYXRlcy4gRm9yIGEgcG9pbnQgKHgsIHkpLCBmb3IgYW55IGdpdmVuIHZhbHVlIGZvciB4 DQo+ID4gKyAgc3VjaCB0aGF0IHRoZSBwb2ludCBpcyBvbiB0aGUgY3VydmUgdGhlcmUgd2lsbCBv bmx5IGV2ZXIgYmUgdHdvIHBvc3NpYmxlDQo+ID4gKyAgdmFsdWVzIGZvciB5LiBUaGVyZWZvcmUs IGEgcG9pbnQgY2FuIGJlIHNldCB1c2luZyB0aGlzIGZ1bmN0aW9uIHdoZXJlIEJuWCBpcw0KPiA+ ICsgIHRoZSB4IGNvb3JkaW5hdGUgYW5kIFlCaXQgaXMgYSB2YWx1ZSAwIG9yIDEgdG8gaWRlbnRp Znkgd2hpY2ggb2YgdGhlIHR3bw0KPiA+ICsgIHBvc3NpYmxlIHZhbHVlcyBmb3IgeSBzaG91bGQg YmUgdXNlZC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNHcm91cCAgICBFQyBncm91cCBv YmplY3QuDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNQb2ludCAgICBFQyBQb2ludC4NCj4gPiArICBA cGFyYW1baW5dICBCblggICAgICAgIFggY29vcmRpbmF0ZS4NCj4gPiArICBAcGFyYW1baW5dICBZ Qml0ICAgICAgIDAgb3IgMSB0byBpZGVudGlmeSB3aGljaCBZIHZhbHVlIGlzIHVzZWQuDQo+ID4g KyAgQHBhcmFtW2luXSAgQm5DdHggICAgICBCTiBjb250ZXh0LCBjcmVhdGVkIHdpdGggQmlnTnVt TmV3Q29udGV4dCgpLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgT24gc3Vj Y2Vzcy4NCj4gPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiA+ICsqKi8N Cj4gPiArQk9PTEVBTg0KPiA+ICtFRklBUEkNCj4gPiArRWNQb2ludFNldENvbXByZXNzZWRDb29y ZGluYXRlcyAoDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ID4gKyAgSU4gVk9J RCAgICAgICAgKkVjUG9pbnQsDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuWCwNCj4gPiArICBJ TiBVSU5UOCAgICAgICBZQml0LA0KPiA+ICsgIElOIFZPSUQgICAgICAgICpCbkN0eA0KPiA+ICsg ICkNCj4gPiArew0KPiA+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiA+ICsgIHJldHVybiBGQUxTRTsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgQWxsb2NhdGVzIGFuZCBJbml0aWFsaXpl cyBvbmUgRWxsaXB0aWMgQ3VydmUgQ29udGV4dCBmb3Igc3Vic2VxdWVudCB1c2UNCj4gPiArICB3 aXRoIHRoZSBOSUQuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIE5pZCBjaXBoZXIgTklEDQo+ ID4gKyAgQHJldHVybiAgICAgUG9pbnRlciB0byB0aGUgRWxsaXB0aWMgQ3VydmUgQ29udGV4dCB0 aGF0IGhhcyBiZWVuIGluaXRpYWxpemVkLg0KPiA+ICsgICAgICAgICAgICAgIElmIHRoZSBhbGxv Y2F0aW9ucyBmYWlscywgRWNOZXdCeU5pZCgpIHJldHVybnMgTlVMTC4NCj4gPiArKiovDQo+ID4g K1ZPSUQgKg0KPiA+ICtFRklBUEkNCj4gPiArRWNOZXdCeU5pZCAoDQo+ID4gKyAgSU4gVUlOVE4g IE5pZA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiA+ICsgIHJl dHVybiBOVUxMOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBSZWxlYXNlIHRoZSBz cGVjaWZpZWQgRUMgY29udGV4dC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNDb250ZXh0 ICBQb2ludGVyIHRvIHRoZSBFQyBjb250ZXh0IHRvIGJlIHJlbGVhc2VkLg0KPiA+ICsqKi8NCj4g PiArVk9JRA0KPiA+ICtFRklBUEkNCj4gPiArRWNGcmVlICgNCj4gPiArICBJTiAgVk9JRCAgKkVj Q29udGV4dA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBHZW5lcmF0ZXMgRUMga2V5IGFuZCByZXR1cm5zIEVD IHB1YmxpYyBrZXkgKFgsIFkpLCBQbGVhc2Ugbm90ZSwgdGhpcyBmdW5jdGlvbiB1c2VzDQo+ID4g KyAgcHNldWRvIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLiBUaGUgY2FsbGVyIG11c3QgbWFrZSBz dXJlIFJhbmRvbVNlZWQoKQ0KPiA+ICsgIGZ1bmN0aW9uIHdhcyBwcm9wZXJseSBjYWxsZWQgYmVm b3JlLg0KPiA+ICsgIFRoZSBFYyBjb250ZXh0IHNob3VsZCBiZSBjb3JyZWN0bHkgaW5pdGlhbGl6 ZWQgYnkgRWNOZXdCeU5pZC4NCj4gPiArICBUaGlzIGZ1bmN0aW9uIGdlbmVyYXRlcyByYW5kb20g c2VjcmV0LCBhbmQgY29tcHV0ZXMgdGhlIHB1YmxpYyBrZXkgKFgsIFkpLCB3aGljaCBpcw0KPiA+ ICsgIHJldHVybmVkIHZpYSBwYXJhbWV0ZXIgUHVibGljLCBQdWJsaWNTaXplLg0KPiA+ICsgIFgg aXMgdGhlIGZpcnN0IGhhbGYgb2YgUHVibGljIHdpdGggc2l6ZSBiZWluZyBQdWJsaWNTaXplIC8g MiwNCj4gPiArICBZIGlzIHRoZSBzZWNvbmQgaGFsZiBvZiBQdWJsaWMgd2l0aCBzaXplIGJlaW5n IFB1YmxpY1NpemUgLyAyLg0KPiA+ICsgIEVDIGNvbnRleHQgaXMgdXBkYXRlZCBhY2NvcmRpbmds eS4NCj4gPiArICBJZiB0aGUgUHVibGljIGJ1ZmZlciBpcyB0b28gc21hbGwgdG8gaG9sZCB0aGUg cHVibGljIFgsIFksIEZBTFNFIGlzIHJldHVybmVkIGFuZA0KPiA+ICsgIFB1YmxpY1NpemUgaXMg c2V0IHRvIHRoZSByZXF1aXJlZCBidWZmZXIgc2l6ZSB0byBvYnRhaW4gdGhlIHB1YmxpYyBYLCBZ Lg0KPiA+ICsgIEZvciBQLTI1NiwgdGhlIFB1YmxpY1NpemUgaXMgNjQuIEZpcnN0IDMyLWJ5dGUg aXMgWCwgU2Vjb25kIDMyLWJ5dGUgaXMgWS4NCj4gPiArICBGb3IgUC0zODQsIHRoZSBQdWJsaWNT aXplIGlzIDk2LiBGaXJzdCA0OC1ieXRlIGlzIFgsIFNlY29uZCA0OC1ieXRlIGlzIFkuDQo+ID4g KyAgRm9yIFAtNTIxLCB0aGUgUHVibGljU2l6ZSBpcyAxMzIuIEZpcnN0IDY2LWJ5dGUgaXMgWCwg U2Vjb25kIDY2LWJ5dGUgaXMgWS4NCj4gPiArICBJZiBFY0NvbnRleHQgaXMgTlVMTCwgdGhlbiBy ZXR1cm4gRkFMU0UuDQo+ID4gKyAgSWYgUHVibGljU2l6ZSBpcyBOVUxMLCB0aGVuIHJldHVybiBG QUxTRS4NCj4gPiArICBJZiBQdWJsaWNTaXplIGlzIGxhcmdlIGVub3VnaCBidXQgUHVibGljIGlz IE5VTEwsIHRoZW4gcmV0dXJuIEZBTFNFLg0KPiA+ICsgIEBwYXJhbVtpbiwgb3V0XSAgRWNDb250 ZXh0ICAgICAgUG9pbnRlciB0byB0aGUgRUMgY29udGV4dC4NCj4gPiArICBAcGFyYW1bb3V0XSAg ICAgIFB1YmxpY0tleSAgICAgIFBvaW50ZXIgdG8gdCBidWZmZXIgdG8gcmVjZWl2ZSBnZW5lcmF0 ZWQgcHVibGljIFgsWS4NCj4gPiArICBAcGFyYW1baW4sIG91dF0gIFB1YmxpY0tleVNpemUgIE9u IGlucHV0LCB0aGUgc2l6ZSBvZiBQdWJsaWMgYnVmZmVyIGluIGJ5dGVzLg0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgT24gb3V0cHV0LCB0aGUgc2l6ZSBvZiBkYXRhIHJl dHVybmVkIGluIFB1YmxpYyBidWZmZXIgaW4gYnl0ZXMuDQo+ID4gKyAgQHJldHZhbCBUUlVFICAg RUMgcHVibGljIFgsWSBnZW5lcmF0aW9uIHN1Y2NlZWRlZC4NCj4gPiArICBAcmV0dmFsIEZBTFNF ICBFQyBwdWJsaWMgWCxZIGdlbmVyYXRpb24gZmFpbGVkLg0KPiA+ICsgIEByZXR2YWwgRkFMU0Ug IFB1YmxpY0tleVNpemUgaXMgbm90IGxhcmdlIGVub3VnaC4NCj4gPiArKiovDQo+ID4gK0JPT0xF QU4NCj4gPiArRUZJQVBJDQo+ID4gK0VjR2VuZXJhdGVLZXkgKA0KPiA+ICsgIElOIE9VVCAgVk9J RCAgICpFY0NvbnRleHQsDQo+ID4gKyAgT1VUICAgICBVSU5UOCAgKlB1YmxpY0tleSwNCj4gPiAr ICBJTiBPVVQgIFVJTlROICAqUHVibGljS2V5U2l6ZQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsg IEFTU0VSVCAoRkFMU0UpOw0KPiA+ICsgIHJldHVybiBGQUxTRTsNCj4gPiArfQ0KPiA+ICsNCj4g PiArLyoqDQo+ID4gKyAgR2V0cyB0aGUgcHVibGljIGtleSBjb21wb25lbnQgZnJvbSB0aGUgZXN0 YWJsaXNoZWQgRUMgY29udGV4dC4NCj4gPiArICBUaGUgRWMgY29udGV4dCBzaG91bGQgYmUgY29y cmVjdGx5IGluaXRpYWxpemVkIGJ5IEVjTmV3QnlOaWQsIGFuZCBzdWNjZXNzZnVsbHkNCj4gPiAr ICBnZW5lcmF0ZSBrZXkgcGFpciBmcm9tIEVjR2VuZXJhdGVLZXkoKS4NCj4gPiArICBGb3IgUC0y NTYsIHRoZSBQdWJsaWNTaXplIGlzIDY0LiBGaXJzdCAzMi1ieXRlIGlzIFgsIFNlY29uZCAzMi1i eXRlIGlzIFkuDQo+ID4gKyAgRm9yIFAtMzg0LCB0aGUgUHVibGljU2l6ZSBpcyA5Ni4gRmlyc3Qg NDgtYnl0ZSBpcyBYLCBTZWNvbmQgNDgtYnl0ZSBpcyBZLg0KPiA+ICsgIEZvciBQLTUyMSwgdGhl IFB1YmxpY1NpemUgaXMgMTMyLiBGaXJzdCA2Ni1ieXRlIGlzIFgsIFNlY29uZCA2Ni1ieXRlIGlz IFkuDQo+ID4gKyAgQHBhcmFtW2luLCBvdXRdICBFY0NvbnRleHQgICAgICBQb2ludGVyIHRvIEVD IGNvbnRleHQgYmVpbmcgc2V0Lg0KPiA+ICsgIEBwYXJhbVtvdXRdICAgICAgUHVibGljS2V5ICAg ICAgUG9pbnRlciB0byB0IGJ1ZmZlciB0byByZWNlaXZlIGdlbmVyYXRlZCBwdWJsaWMgWCxZLg0K PiA+ICsgIEBwYXJhbVtpbiwgb3V0XSAgUHVibGljS2V5U2l6ZSAgT24gaW5wdXQsIHRoZSBzaXpl IG9mIFB1YmxpYyBidWZmZXIgaW4gYnl0ZXMuDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBPbiBvdXRwdXQsIHRoZSBzaXplIG9mIGRhdGEgcmV0dXJuZWQgaW4gUHVibGlj IGJ1ZmZlciBpbiBieXRlcy4NCj4gPiArICBAcmV0dmFsICBUUlVFICAgRUMga2V5IGNvbXBvbmVu dCB3YXMgcmV0cmlldmVkIHN1Y2Nlc3NmdWxseS4NCj4gPiArICBAcmV0dmFsICBGQUxTRSAgSW52 YWxpZCBFQyBrZXkgY29tcG9uZW50Lg0KPiA+ICsqKi8NCj4gPiArQk9PTEVBTg0KPiA+ICtFRklB UEkNCj4gPiArRWNHZXRQdWJLZXkgKA0KPiA+ICsgIElOIE9VVCAgVk9JRCAgICpFY0NvbnRleHQs DQo+ID4gKyAgT1VUICAgICBVSU5UOCAgKlB1YmxpY0tleSwNCj4gPiArICBJTiBPVVQgIFVJTlRO ICAqUHVibGljS2V5U2l6ZQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEFTU0VSVCAoRkFMU0Up Ow0KPiA+ICsgIHJldHVybiBGQUxTRTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAg Q29tcHV0ZXMgZXhjaGFuZ2VkIGNvbW1vbiBrZXkuDQo+ID4gKyAgR2l2ZW4gcGVlcidzIHB1Ymxp YyBrZXkgKFgsIFkpLCB0aGlzIGZ1bmN0aW9uIGNvbXB1dGVzIHRoZSBleGNoYW5nZWQgY29tbW9u IGtleSwNCj4gPiArICBiYXNlZCBvbiBpdHMgb3duIGNvbnRleHQgaW5jbHVkaW5nIHZhbHVlIG9m IGN1cnZlIHBhcmFtZXRlciBhbmQgcmFuZG9tIHNlY3JldC4NCj4gPiArICBYIGlzIHRoZSBmaXJz dCBoYWxmIG9mIFBlZXJQdWJsaWMgd2l0aCBzaXplIGJlaW5nIFBlZXJQdWJsaWNTaXplIC8gMiwN Cj4gPiArICBZIGlzIHRoZSBzZWNvbmQgaGFsZiBvZiBQZWVyUHVibGljIHdpdGggc2l6ZSBiZWlu ZyBQZWVyUHVibGljU2l6ZSAvIDIuDQo+ID4gKyAgSWYgRWNDb250ZXh0IGlzIE5VTEwsIHRoZW4g cmV0dXJuIEZBTFNFLg0KPiA+ICsgIElmIFBlZXJQdWJsaWMgaXMgTlVMTCwgdGhlbiByZXR1cm4g RkFMU0UuDQo+ID4gKyAgSWYgUGVlclB1YmxpY1NpemUgaXMgMCwgdGhlbiByZXR1cm4gRkFMU0Uu DQo+ID4gKyAgSWYgS2V5IGlzIE5VTEwsIHRoZW4gcmV0dXJuIEZBTFNFLg0KPiA+ICsgIElmIEtl eVNpemUgaXMgbm90IGxhcmdlIGVub3VnaCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ID4gKyAgRm9y IFAtMjU2LCB0aGUgUGVlclB1YmxpY1NpemUgaXMgNjQuIEZpcnN0IDMyLWJ5dGUgaXMgWCwgU2Vj b25kIDMyLWJ5dGUgaXMgWS4NCj4gPiArICBGb3IgUC0zODQsIHRoZSBQZWVyUHVibGljU2l6ZSBp cyA5Ni4gRmlyc3QgNDgtYnl0ZSBpcyBYLCBTZWNvbmQgNDgtYnl0ZSBpcyBZLg0KPiA+ICsgIEZv ciBQLTUyMSwgdGhlIFBlZXJQdWJsaWNTaXplIGlzIDEzMi4gRmlyc3QgNjYtYnl0ZSBpcyBYLCBT ZWNvbmQgNjYtYnl0ZSBpcyBZLg0KPiA+ICsgIEBwYXJhbVtpbiwgb3V0XSAgRWNDb250ZXh0ICAg ICAgICAgIFBvaW50ZXIgdG8gdGhlIEVDIGNvbnRleHQuDQo+ID4gKyAgQHBhcmFtW2luXSAgICAg ICBQZWVyUHVibGljICAgICAgICAgUG9pbnRlciB0byB0aGUgcGVlcidzIHB1YmxpYyBYLFkuDQo+ ID4gKyAgQHBhcmFtW2luXSAgICAgICBQZWVyUHVibGljU2l6ZSAgICAgU2l6ZSBvZiBwZWVyJ3Mg cHVibGljIFgsWSBpbiBieXRlcy4NCj4gPiArICBAcGFyYW1baW5dICAgICAgIENvbXByZXNzRmxh ZyAgICAgICBGbGFnIG9mIFBlZXJQdWJsaWMgaXMgY29tcHJlc3NlZCBvciBub3QuDQo+ID4gKyAg QHBhcmFtW291dF0gICAgICBLZXkgICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgYnVmZmVy IHRvIHJlY2VpdmUgZ2VuZXJhdGVkIGtleS4NCj4gPiArICBAcGFyYW1baW4sIG91dF0gIEtleVNp emUgICAgICAgICAgICBPbiBpbnB1dCwgdGhlIHNpemUgb2YgS2V5IGJ1ZmZlciBpbiBieXRlcy4N Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiBvdXRwdXQsIHRo ZSBzaXplIG9mIGRhdGEgcmV0dXJuZWQgaW4gS2V5IGJ1ZmZlciBpbiBieXRlcy4NCj4gPiArICBA cmV0dmFsIFRSVUUgICBFQyBleGNoYW5nZWQga2V5IGdlbmVyYXRpb24gc3VjY2VlZGVkLg0KPiA+ ICsgIEByZXR2YWwgRkFMU0UgIEVDIGV4Y2hhbmdlZCBrZXkgZ2VuZXJhdGlvbiBmYWlsZWQuDQo+ ID4gKyAgQHJldHZhbCBGQUxTRSAgS2V5U2l6ZSBpcyBub3QgbGFyZ2UgZW5vdWdoLg0KPiA+ICsq Ki8NCj4gPiArQk9PTEVBTg0KPiA+ICtFRklBUEkNCj4gPiArRWNEaENvbXB1dGVLZXkgKA0KPiA+ ICsgIElOIE9VVCAgVk9JRCAgICAgICAgICpFY0NvbnRleHQsDQo+ID4gKyAgSU4gICAgICBDT05T VCBVSU5UOCAgKlBlZXJQdWJsaWMsDQo+ID4gKyAgSU4gICAgICBVSU5UTiAgICAgICAgUGVlclB1 YmxpY1NpemUsDQo+ID4gKyAgSU4gICAgICBDT05TVCBJTlQzMiAgKkNvbXByZXNzRmxhZywNCj4g PiArICBPVVQgICAgIFVJTlQ4ICAgICAgICAqS2V5LA0KPiA+ICsgIElOIE9VVCAgVUlOVE4gICAg ICAgICpLZXlTaXplDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ ID4gKyAgcmV0dXJuIEZBTFNFOw0KPiA+ICt9DQo+ID4gLS0NCj4gPiAyLjMxLjEud2luZG93cy4x DQo+ID4NCj4gPg0KPiA+DQo+ID4gDQo+ID4NCg0K