From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by sourceware.org (Postfix) with ESMTPS id D5BC93858C53 for ; Thu, 29 Jun 2023 04:14:29 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D5BC93858C53 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1688012069; x=1719548069; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=WVlULl73N6jlY9tLE22g2Pvq6FqlvjpxCIyOukedCC4=; b=Uw7mWTZmSYY7rJf8COVWWwqvFswOJsM60rDdEdB1yjeAKKJoxAjfhB7b yhtN/6m1tD+GMWb5rvma49hwvtZkfpaWq+bAdaFHglpZC7tiuZdDbuPqm zxEnXPUdU0s4bzEyTnWaatTk41/EiLdgzQ5UfpRYy4ScAFlCXT8mZOvmf Vy79Mpzcxeww9y6m0jEsQofS4TZ2WsRMtpGRTXrqGCBss4snY5lQLuad8 FjPt+Vahj28GncyKuoJWWCSoMTNNWylhA+FSfju5kVivV/SOcEQrJGDNb RsN+dXEzKDcESsUKx8V3G92YydJtWq3KoyNd4Agtw+RkRlGsxKSNuT00c A==; X-IronPort-AV: E=McAfee;i="6600,9927,10755"; a="365481641" X-IronPort-AV: E=Sophos;i="6.01,167,1684825200"; d="scan'208";a="365481641" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Jun 2023 21:14:28 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10755"; a="752516022" X-IronPort-AV: E=Sophos;i="6.01,167,1684825200"; d="scan'208";a="752516022" Received: from fmsmsx603.amr.corp.intel.com ([10.18.126.83]) by orsmga001.jf.intel.com with ESMTP; 28 Jun 2023 21:14:28 -0700 Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Wed, 28 Jun 2023 21:14:27 -0700 Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) by fmsmsx610.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Wed, 28 Jun 2023 21:14:27 -0700 Received: from FMSEDG603.ED.cps.intel.com (10.1.192.133) by fmsmsx610.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27 via Frontend Transport; Wed, 28 Jun 2023 21:14:27 -0700 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (104.47.55.100) by edgegateway.intel.com (192.55.55.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.27; Wed, 28 Jun 2023 21:14:26 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FW+0+8r3rTrVgCSEwJVFkuNq8GV8nPwqqrozPqrVtIUAgZLPFIy3vzBlwGu9ffUzon9ivOUAqSehmzAYgatn00m8KA0y6SVDHMU7Kt6TmQUS75y2CD1eJl22e9tPjEqYYtr6ekxpjtQ9yBCpe4U6uhxhQQq4qhcQRwTosc6ErfO0+yEpTVB+tn7gJqUtTa/cuuMh/MZp5bFZIG6qACO9ftpJrcsYe2Q4gDkOgo2Yz1z4BSMnMmEDSf2cT2JiIsE6VSHrxYt37VntpsXS5+smBGuRcZ7WqqJ4cVfmSMw4RaqluHmfBp+e+/RQoh8Dx9hGeLufW3d2MqhToWfiQ9NcGw== 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=WVlULl73N6jlY9tLE22g2Pvq6FqlvjpxCIyOukedCC4=; b=KDBQWiUsKLpQ+KSNaPHTs6uSaT81fLgNwZytw1C5MZkKCKDsPeD4Jt6+u5XrGhqXmEsTwvI+VTLyLOY0BHCJHAqmlocQgBKWSUS3eSar/zOdQyUhYfO6u/2WsdztNM/pEz8P7fk+crlEVYdnmys49T2repGle7IUUJtzlibn80O774zcPjn2yIhr4qzZjfZeKgbx6n9hLyKs4E32y8FdrXih5xVcCI2laxY95bMVs8+s2oy/fDRhJ28YH6aUgCE0UdQhkaU3nkHDjrnuHM8L+LrGBeBGfxSLHzdZBrBi4bS8fLi7OKe2BrbjW2CsgunMGYmQ1PV7VdXEo9f/NBHaNA== 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 MW5PR11MB5908.namprd11.prod.outlook.com (2603:10b6:303:194::10) by BN9PR11MB5387.namprd11.prod.outlook.com (2603:10b6:408:11c::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6521.24; Thu, 29 Jun 2023 04:14:19 +0000 Received: from MW5PR11MB5908.namprd11.prod.outlook.com ([fe80::127c:f4cc:e699:8f73]) by MW5PR11MB5908.namprd11.prod.outlook.com ([fe80::127c:f4cc:e699:8f73%6]) with mapi id 15.20.6521.023; Thu, 29 Jun 2023 04:14:19 +0000 From: "Li, Pan2" To: Kito Cheng CC: "juzhe.zhong@rivai.ai" , gcc-patches , "Wang, Yanzhang" , jeffreyalaw Subject: RE: [PATCH v1] RISC-V: Allow rounding mode control for RVV floating-point add Thread-Topic: [PATCH v1] RISC-V: Allow rounding mode control for RVV floating-point add Thread-Index: AQHZqL2EsMKsx+RUVkWkCfXAwHfC8a+eOMOYgAAALxCAAtpHAIAAG5YA Date: Thu, 29 Jun 2023 04:14:19 +0000 Message-ID: References: <20230627060617.2250903-1-pan2.li@intel.com> <096CC5E509CCA85A+202306271459302062266@rivai.ai> In-Reply-To: Accept-Language: en-US Content-Language: 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-traffictypediagnostic: MW5PR11MB5908:EE_|BN9PR11MB5387:EE_ x-ms-office365-filtering-correlation-id: 248981f2-a21b-4306-b9ec-08db78574f8f x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: VjbLHDsO6O5giqpd6HUWAISHCWIQAWIKeYieC/aY/qGWnPNpnLQnHT35wjawz92HooabCJjo/1xs1PcUSMMkfcTPWrokiniy9RUs8huyswrDRb36W70fdxVpkiGuHZkQfi3HwAd0cEA6AR/UFIIBdEXsVD4EkoQ4jdsnmxdoFSs0UrdWeHolEi76NG+Mr4vcWb1mjhw1ldbcsIHhqhYg7fkn9qfLYW54WhD0nM3YjWcLo+1L9Xb1574RU4qihM12v57jZEIuN1j3kuDnFY1funulg5SXIzGarQNODxPi38bC0c0OGtLnAfk+vO65GlGS0KK6iuGGQvwEEvIXx124EyGbJ3m0KPK27REcqHSga4ReqgJeI4FpNa/+T96RijLSJpjJCAgy/PQT/M0571HgFaF6YvHE8cP0VQx6Mx+9WFUXHVIMcZ997lvhxBv3bEdo8qNDR3O61JR59+P1mH2CXkYU5Wbau2nbb+zF2xhWCFWAF1APSaL3GxToZvlWLaEBU0wI43oPXbMDTQ9OKIrMJVbgEFuYBc9R2y1xGTgVdmRI48kt1zvEoTShcOSoYByc1OkmNFZUKiYAqQGoByC7OZfcTMU15JWSEOQu09sFAqc= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW5PR11MB5908.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(396003)(346002)(136003)(376002)(366004)(39860400002)(451199021)(66446008)(76116006)(66946007)(64756008)(316002)(66476007)(33656002)(6916009)(66556008)(38070700005)(478600001)(4326008)(8936002)(52536014)(84970400001)(8676002)(5660300002)(55016003)(86362001)(2906002)(54906003)(41300700001)(9686003)(7696005)(30864003)(966005)(53546011)(6506007)(186003)(71200400001)(83380400001)(38100700002)(82960400001)(122000001)(26005);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?K0JXWDlRSnlvUnNhSHdZZktleEszK2Q5QnNWS1d5bjRyWk8zalE1MkQ5S1F6?= =?utf-8?B?UVd4ZnJneHFUc3A5MExnZm9mS01FaU5VN2xlcjdrTHhrNi9TY3VnZytUcTZ3?= =?utf-8?B?Q0hPcmVDQ0YyMFcrVWUyc2lkNktYQmRab2M2UjlxTDJNSkVxRG1FeWZyOVhm?= =?utf-8?B?eVRTNGNabTdxMm9scEViWUkvTlVXZWNnYkV4bEpJMWVIendJTGZhVTYyaFd0?= =?utf-8?B?Mkc2d1EyTmE4VTdnNjFrQlNOekluUUtsdnJwQlFqdnE1bXVkWHE0Um5uV0t5?= =?utf-8?B?di9LWDJCVmQzRzhGMEVENEljKzBrMDZMZGdka1ZKc1puTTVyMW5TWU5TK0lY?= =?utf-8?B?blFRc3JRUEtmc3hIdkFLOCs4U3poUHZOR0E5OEdRWVR1R0IwVjR2ejlOTnJq?= =?utf-8?B?MFF1cS9lUU1BTlIrV2hSeHZlKzJ0U2h1M3c1SDJST1BRaFdLOWVlN1VTT0FT?= =?utf-8?B?WUdQZ1hpY1dYRXhNUG1qRytRMXFWNTJLZnl1ZC9pZ2toNXdtaEhWeFBXNHpM?= =?utf-8?B?T2tSMUdqblY2RWRKNG9DQkZNb1Y3N09YYlpTYU5UT3lEcFlwdzcyT2hPNWdr?= =?utf-8?B?ZzNWN2hoTnZXNG80Sno3K2w2dlZyYVNqTGhzMkE3RG94TEhQVVV4YTJidU1v?= =?utf-8?B?MWZQVkRTMUh4eWtIMFM4bzYxK2xnUDZXcHJyRzdybGpuZHpTVFNmelNZd25y?= =?utf-8?B?dVI4ZzQ2MmxITi9aT1JXdWh6dlJ4MWlmNzJDeXZBUW5ibXlXZnRPREF2VmZ4?= =?utf-8?B?R3lLZlY4a1Y2S2JxQUpNZjU4WXBvSUd5bndwZVRjSTVOVzlEZHdzd1V1NEZn?= =?utf-8?B?TXY0SWRtMkVodWhpdVBFdXZFTTdmYklqTWNQbW1ZVVkveUFHZ3pVSUZRa1BX?= =?utf-8?B?TXJCWmMwMUNFWXdoaUpFUnVnZTc4OFNqZ1ZDcFNzbm5Cd0M1VTU3WlNzNTZV?= =?utf-8?B?NXorSXRuTnQ1dGJBVFo2dXRPeHlML3pDMjQ3VXZaanJFR0VJd0tOeXdFeFF2?= =?utf-8?B?Uk45NEZIVVRCUFRCdnZXVml5WnB3MXZNelc2MkhWdTh2V2tlVHUySGpiM1FQ?= =?utf-8?B?YndqL05GRi8ya21DOUdDWHN1cVZReUF6bXdUcUVUUWQrOVMxaHFTeFhIN1pZ?= =?utf-8?B?clAvNkUzNHpFc2xqbDhUK2FsZUdNYTFvRUtSdWhHVkVtZjd3bTBPU0g2b2xH?= =?utf-8?B?RVZmUWZ0RG9lSnJ0N3dUeGIvV3dYTjE2RHIyU0IySVEwUTBpL3lBTUdzdlAy?= =?utf-8?B?V2RPLytHcnhsbk81NEVXTXh2WlJJSzZhNTFuVmRIREdUckFLZzd2Y0I1U3FB?= =?utf-8?B?WXF4VlY4QVAxWmFiMlZOTjlmMm9TY045bGRkbGovSEtBV05WT25yY2pUMmgy?= =?utf-8?B?b1cxakNEanV0aVNBdnZtM0FxVkpLNTkydmVRSFBmSEk2Q1owelZBcVExUTVp?= =?utf-8?B?ZXlSdGljZ2FMYzFmZTR5M1lpVkhQYUh2eHBiNHVoU2lNa1lHelVla09WQWNC?= =?utf-8?B?YWhUckxiVlg2SEhQZEFIWVNwSFJNNTBwUFZGTDIrUlFPcThhMHBiQ3RieHly?= =?utf-8?B?alFwcXp6OVRCTG5qNW92dDMzenhleUUvd0hRYzRsUTYrVzYvektOMTRacFRx?= =?utf-8?B?YW0xWmdJU214cVhRMVJqcTl5SUwzRnZTdUhXdXdyR05GSlpyVm4rRGJleVI4?= =?utf-8?B?cUNxamxQWGhCL2IvbHQ0SWNMVWxsUlN2N0puTmdXSTlLNm8vK0EybEZxWFAw?= =?utf-8?B?SXZIRm5VV1FIMGxZaXMvcXZYdzk4Q0d2L2FGSDg4OHlnWDB6ZXV2RTZaY1dR?= =?utf-8?B?RCtMRkpUWFRjZ05VUUhBQ1BxRFpxQnc0SnNjVERaL3hyRUZ4T2o5MG1aSzhI?= =?utf-8?B?dnVvb1E2NFVGYzFSUm81NXhvdFhkUUxBeDR4SjdxWXBxemg0RngyYXM1ZDU5?= =?utf-8?B?YnBKSDdGOXRnVzd4eU4zMFBXeTRxaWlDZ0VjalgzbkdXZ2wyVFV0YzF6ZUJn?= =?utf-8?B?YUZNN2dlVzBxVWxhTzAvZCtGOWI3WDZUd3l2RmlmZ1prdmg0b3FuOTNLaTJh?= =?utf-8?B?VTZRVmNSY0JHeFlIa2xPZkI1Q3h4ZWRKNWxGYTR1L2w5L0VKdGdLcll0dnh1?= =?utf-8?Q?emg8=3D?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW5PR11MB5908.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 248981f2-a21b-4306-b9ec-08db78574f8f X-MS-Exchange-CrossTenant-originalarrivaltime: 29 Jun 2023 04:14:19.4953 (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: OumTvZVt0lCRg98Ko6hSM8lIeBjHw3Ki54DA+qKi9hfXHZtEzJ+BqrEByweIp5yfcyJQQh/6HI8bkBFgApX2PA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN9PR11MB5387 X-OriginatorOrg: intel.com X-Spam-Status: No, score=-11.9 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_SHORT,SPF_HELO_NONE,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Q29tbWl0dGVkLCB0aGFua3MgS2l0byBhbmQgSnV6aGUuDQoNClBhbg0KDQotLS0tLU9yaWdpbmFs IE1lc3NhZ2UtLS0tLQ0KRnJvbTogS2l0byBDaGVuZyA8a2l0by5jaGVuZ0BzaWZpdmUuY29tPiAN ClNlbnQ6IFRodXJzZGF5LCBKdW5lIDI5LCAyMDIzIDEwOjM1IEFNDQpUbzogTGksIFBhbjIgPHBh bjIubGlAaW50ZWwuY29tPg0KQ2M6IGp1emhlLnpob25nQHJpdmFpLmFpOyBnY2MtcGF0Y2hlcyA8 Z2NjLXBhdGNoZXNAZ2NjLmdudS5vcmc+OyBXYW5nLCBZYW56aGFuZyA8eWFuemhhbmcud2FuZ0Bp bnRlbC5jb20+OyBqZWZmcmV5YWxhdyA8amVmZnJleWFsYXdAZ21haWwuY29tPg0KU3ViamVjdDog UmU6IFtQQVRDSCB2MV0gUklTQy1WOiBBbGxvdyByb3VuZGluZyBtb2RlIGNvbnRyb2wgZm9yIFJW ViBmbG9hdGluZy1wb2ludCBhZGQNCg0KTEdUTSwgdGhhbmtzIQ0KDQpPbiBUdWUsIEp1biAyNywg MjAyMyBhdCAzOjAy4oCvUE0gTGksIFBhbjIgPHBhbjIubGlAaW50ZWwuY29tPiB3cm90ZToNCj4N Cj4gQWNrLCB0aGFua3MgSnV6aGUuDQo+DQo+DQo+DQo+IFBhbg0KPg0KPg0KPg0KPiBGcm9tOiBq dXpoZS56aG9uZ0ByaXZhaS5haSA8anV6aGUuemhvbmdAcml2YWkuYWk+DQo+IFNlbnQ6IFR1ZXNk YXksIEp1bmUgMjcsIDIwMjMgMzowMCBQTQ0KPiBUbzogTGksIFBhbjIgPHBhbjIubGlAaW50ZWwu Y29tPjsgZ2NjLXBhdGNoZXMgPGdjYy1wYXRjaGVzQGdjYy5nbnUub3JnPg0KPiBDYzogS2l0by5j aGVuZyA8a2l0by5jaGVuZ0BzaWZpdmUuY29tPjsgTGksIFBhbjIgPHBhbjIubGlAaW50ZWwuY29t PjsgV2FuZywgWWFuemhhbmcgPHlhbnpoYW5nLndhbmdAaW50ZWwuY29tPjsgamVmZnJleWFsYXcg PGplZmZyZXlhbGF3QGdtYWlsLmNvbT4NCj4gU3ViamVjdDogUmU6IFtQQVRDSCB2MV0gUklTQy1W OiBBbGxvdyByb3VuZGluZyBtb2RlIGNvbnRyb2wgZm9yIFJWViBmbG9hdGluZy1wb2ludCBhZGQN Cj4NCj4NCj4NCj4gTEdUTS4NCj4NCj4gWW91IGNhbiBnbyBhaGVhZCB0byBpbXBsZW1lbnQgcm91 bmRpbmcgbW9kZSBvZiBmbG9hdGluZy1wb2ludCBieSBtb2RlLXN3aXRjaGluZzoNCj4NCj4NCj4N Cj4gU3VnZ2VzdCB5b3UgaW1wbGVtZW50IHJvdW5kaW5nIG1vZGUgZm9yIGZsb2F0aW5nLXBvaW5n IGFzIGZvbGxvd3M6DQo+DQo+DQo+DQo+IDFzdCBzdGVwOiBJbXBsZW1lbnQgbW9kZS1zd2l0Y2hp bmcgZm9yIGZsb2F0aW5nLXBvaW50IHJvdW5kaW5nIG1vZGUgZXhjZXB0IERZTkFNSUMgd2hpY2gg c2hvdWxkIGJlIHRvdGFsbHkgc2FtZSBhcyBmaXhlZC1wb2ludC4NCj4NCj4gMm5kIHN0ZXA6IFN1 cHBvcnQgRFlOQU1JQyByb3VuZGluZyBtb2RlIG9uIG1vZGUtc3dpdGNoaW5nIHdoaWNoIG1heSBu ZWVkIHRvIG1vZGlmeSB0aGUgbW9kZS1zd2l0Y2hpbmcgUEFTUy4NCj4NCj4NCj4NCj4gVGhhbmtz Lg0KPg0KPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KPg0KPiBqdXpoZS56aG9u Z0ByaXZhaS5haQ0KPg0KPg0KPg0KPiBGcm9tOiBwYW4yLmxpDQo+DQo+IERhdGU6IDIwMjMtMDYt MjcgMTQ6MDYNCj4NCj4gVG86IGdjYy1wYXRjaGVzDQo+DQo+IENDOiBqdXpoZS56aG9uZzsga2l0 by5jaGVuZzsgcGFuMi5saTsgeWFuemhhbmcud2FuZzsgamVmZnJleWFsYXcNCj4NCj4gU3ViamVj dDogW1BBVENIIHYxXSBSSVNDLVY6IEFsbG93IHJvdW5kaW5nIG1vZGUgY29udHJvbCBmb3IgUlZW IGZsb2F0aW5nLXBvaW50IGFkZA0KPg0KPiBGcm9tOiBQYW4gTGkgPHBhbjIubGlAaW50ZWwuY29t Pg0KPg0KPg0KPg0KPiBBY2NvcmRpbmcgdG8gdGhlIGRvYyBhcyBiZWxvdywgd2UgbmVlZCB0byBz dXBwb3J0IHRoZSByb3VuZGluZyBtb2RlIG9mDQo+DQo+IHRoZSBSVlYgZmxvYXRpbmctcG9pbnQs IGJvdGggdGhlIHN0YXRpYyBhbmQgZHluYW1pY2UgZnJtLg0KPg0KPg0KPg0KPiBodHRwczovL2dp dGh1Yi5jb20vcmlzY3Ytbm9uLWlzYS9ydnYtaW50cmluc2ljLWRvYy9wdWxsLzIyNg0KPg0KPg0K Pg0KPiBGb3IgdHJhY2tpbmcgYW5kIGRldmVsb3BtZW50IGZyaWVuZGx5LCBXZSB3aWxsIHRha2Ug c29tZSBzdGVwcyB0byBzdXBwb3J0DQo+DQo+IGFsbCByb3VuZGluZyBtb2RlcyBmb3IgdGhlIFJW ViBmbG9hdGluZy1wb2ludCByb3VuZGluZyBtb2Rlcy4NCj4NCj4NCj4NCj4gMS4gQWxsb3cgcm91 bmRpbmcgbW9kZSBjb250cm9sIGJ5IG9uZSBpbnRyaW5zaWMgKGFrYSB0aGlzIHBhdGNoKSwgdmZh ZGQuDQo+DQo+IDIuIFN1cHBvcnQgc3RhdGljIHJvdW5kaW5nIG1vZGUgY29udHJvbCBieSBtb2Rl IHN3aXRjaCwgbGlrZSBmaXhlZC1wb2ludC4NCj4NCj4gMy4gU3VwcG9ydCBkeW5hbWljZSByb3Vu ZCBtb2RlIGNvbnRyb2wgYnkgbW9kZSBzd2l0Y2guDQo+DQo+IDQuIFN1cHBvcnQgdGhlIHJlc3Qg ZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb25zIGZvciBmcm0uDQo+DQo+DQo+DQo+IFBsZWFzZSAq Tk9URSogdGhpcyBwYXRjaCBvbmx5IGFsbG93IHRoZSByb3VuZGluZyBtb2RlIGNvbnRyb2wgZm9y IHRoZQ0KPg0KPiB2ZmFkZCBpbnRyaW5zaWMgQVBJLCBhbmQgdGhlIHJlbGF0ZWQgZnJtIHdpbGwg YmUgY292ZXJyZWQgYnkgc3RlcCAyLg0KPg0KPg0KPg0KPiBTaWduZWQtb2ZmLWJ5OiBQYW4gTGkg PHBhbjIubGlAaW50ZWwuY29tPg0KPg0KPiBDby1BdXRob3JlZCBieTogSnV6aGUtWmhvbmcgPGp1 emhlLnpob25nQHJpdmFpLmFpPg0KPg0KPg0KPg0KPiBnY2MvQ2hhbmdlTG9nOg0KPg0KPg0KPg0K PiAqIGNvbmZpZy9yaXNjdi9yaXNjdi1wcm90b3MuaCAoZW51bSBmbG9hdGluZ19wb2ludF9yb3Vu ZGluZ19tb2RlKToNCj4NCj4gQWRkIG1hY3JvIGZvciBzdGF0aWMgZnJtIG1pbiBhbmQgbWF4Lg0K Pg0KPiAqIGNvbmZpZy9yaXNjdi9yaXNjdi12ZWN0b3ItYnVpbHRpbnMtYmFzZXMuY2MNCj4NCj4g KGNsYXNzIGJpbm9wX2ZybSk6IE5ldyBjbGFzcyBmb3IgZmxvYXRpbmctcG9pbnQgd2l0aCBmcm0u DQo+DQo+IChCQVNFKTogQWRkIHZmYWRkIGZvciBmcm0uDQo+DQo+ICogY29uZmlnL3Jpc2N2L3Jp c2N2LXZlY3Rvci1idWlsdGlucy1iYXNlcy5oOiBMaWtld2lzZS4NCj4NCj4gKiBjb25maWcvcmlz Y3YvcmlzY3YtdmVjdG9yLWJ1aWx0aW5zLWZ1bmN0aW9ucy5kZWYNCj4NCj4gKHZmYWRkX2ZybSk6 IExpa2V3aXNlLg0KPg0KPiAqIGNvbmZpZy9yaXNjdi9yaXNjdi12ZWN0b3ItYnVpbHRpbnMtc2hh cGVzLmNjDQo+DQo+IChzdHJ1Y3QgYWx1X2ZybV9kZWYpOiBOZXcgc3RydWN0IGZvciBhbHUgd2l0 aCBmcm0uDQo+DQo+IChTSEFQRSk6IEFkZCBhbHUgd2l0aCBmcm0uDQo+DQo+ICogY29uZmlnL3Jp c2N2L3Jpc2N2LXZlY3Rvci1idWlsdGlucy1zaGFwZXMuaDogTGlrZXdpc2UuDQo+DQo+ICogY29u ZmlnL3Jpc2N2L3Jpc2N2LXZlY3Rvci1idWlsdGlucy5jYw0KPg0KPiAoZnVuY3Rpb25fY2hlY2tl cjo6cmVwb3J0X291dF9vZl9yYW5nZV9hbmRfbm90KTogTmV3IGZ1bmN0aW9uDQo+DQo+IGZvciBy ZXBvcnQgb3V0IG9mIHJhbmdlIGFuZCBub3QgdmFsLg0KPg0KPiAoZnVuY3Rpb25fY2hlY2tlcjo6 cmVxdWlyZV9pbW1lZGlhdGVfcmFuZ2Vfb3IpOiBOZXcgZnVuY3Rpb24NCj4NCj4gZm9yIGNoZWNr aW5nIGluIHJhbmdlIG9yIG9uZSB2YWwuDQo+DQo+ICogY29uZmlnL3Jpc2N2L3Jpc2N2LXZlY3Rv ci1idWlsdGlucy5oOiBBZGQgZnVuY3Rpb24gZGVjbC4NCj4NCj4NCj4NCj4gZ2NjL3Rlc3RzdWl0 ZS9DaGFuZ2VMb2c6DQo+DQo+DQo+DQo+ICogZ2NjLnRhcmdldC9yaXNjdi9ydnYvYmFzZS9mbG9h dC1wb2ludC1mcm0tZXJyb3IuYzogTmV3IHRlc3QuDQo+DQo+ICogZ2NjLnRhcmdldC9yaXNjdi9y dnYvYmFzZS9mbG9hdC1wb2ludC1mcm0uYzogTmV3IHRlc3QuDQo+DQo+IC0tLQ0KPg0KPiBnY2Mv Y29uZmlnL3Jpc2N2L3Jpc2N2LXByb3Rvcy5oICAgICAgICAgICAgICAgfCAgMiArDQo+DQo+IC4u Li9yaXNjdi9yaXNjdi12ZWN0b3ItYnVpbHRpbnMtYmFzZXMuY2MgICAgICB8IDI1ICsrKysrKysN Cj4NCj4gLi4uL3Jpc2N2L3Jpc2N2LXZlY3Rvci1idWlsdGlucy1iYXNlcy5oICAgICAgIHwgIDEg Kw0KPg0KPiAuLi4vcmlzY3YvcmlzY3YtdmVjdG9yLWJ1aWx0aW5zLWZ1bmN0aW9ucy5kZWYgfCAg MiArDQo+DQo+IC4uLi9yaXNjdi9yaXNjdi12ZWN0b3ItYnVpbHRpbnMtc2hhcGVzLmNjICAgICB8 IDY4ICsrKysrKysrKysrKysrKysrKysNCj4NCj4gLi4uL3Jpc2N2L3Jpc2N2LXZlY3Rvci1idWls dGlucy1zaGFwZXMuaCAgICAgIHwgIDEgKw0KPg0KPiBnY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LXZl Y3Rvci1idWlsdGlucy5jYyAgICAgfCA0MSArKysrKysrKysrKw0KPg0KPiBnY2MvY29uZmlnL3Jp c2N2L3Jpc2N2LXZlY3Rvci1idWlsdGlucy5oICAgICAgfCAgNCArKw0KPg0KPiAuLi4vcmlzY3Yv cnZ2L2Jhc2UvZmxvYXQtcG9pbnQtZnJtLWVycm9yLmMgICAgfCAxNSArKysrDQo+DQo+IC4uLi9y aXNjdi9ydnYvYmFzZS9mbG9hdC1wb2ludC1mcm0uYyAgICAgICAgICB8IDMwICsrKysrKysrDQo+ DQo+IDEwIGZpbGVzIGNoYW5nZWQsIDE4OSBpbnNlcnRpb25zKCspDQo+DQo+IGNyZWF0ZSBtb2Rl IDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvcmlzY3YvcnZ2L2Jhc2UvZmxvYXQtcG9p bnQtZnJtLWVycm9yLmMNCj4NCj4gY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2Nj LnRhcmdldC9yaXNjdi9ydnYvYmFzZS9mbG9hdC1wb2ludC1mcm0uYw0KPg0KPg0KPg0KPiBkaWZm IC0tZ2l0IGEvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi1wcm90b3MuaCBiL2djYy9jb25maWcvcmlz Y3YvcmlzY3YtcHJvdG9zLmgNCj4NCj4gaW5kZXggZjY4NmVkYWIzZDEuLmJlZTY0ZWVlNTA0IDEw MDY0NA0KPg0KPiAtLS0gYS9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LXByb3Rvcy5oDQo+DQo+ICsr KyBiL2djYy9jb25maWcvcmlzY3YvcmlzY3YtcHJvdG9zLmgNCj4NCj4gQEAgLTI3OCw2ICsyNzgs OCBAQCBlbnVtIGZsb2F0aW5nX3BvaW50X3JvdW5kaW5nX21vZGUNCj4NCj4gICAgRlJNX1JVUCA9 IDMsIC8qIEFrYSAwYjAxMS4gICovDQo+DQo+ICAgIEZSTV9STU0gPSA0LCAvKiBBa2EgMGIxMDAu ICAqLw0KPg0KPiAgICBGUk1fRFlOID0gNywgLyogQWthIDBiMTExLiAgKi8NCj4NCj4gKyAgRlJN X1NUQVRJQ19NSU4gPSBGUk1fUk5FLA0KPg0KPiArICBGUk1fU1RBVElDX01BWCA9IEZSTV9STU0s DQo+DQo+IH07DQo+DQo+IG9wdF9tYWNoaW5lX21vZGUgdmVjdG9yaXplX3JlbGF0ZWRfbW9kZSAo bWFjaGluZV9tb2RlLCBzY2FsYXJfbW9kZSwNCj4NCj4gZGlmZiAtLWdpdCBhL2djYy9jb25maWcv cmlzY3YvcmlzY3YtdmVjdG9yLWJ1aWx0aW5zLWJhc2VzLmNjIGIvZ2NjL2NvbmZpZy9yaXNjdi9y aXNjdi12ZWN0b3ItYnVpbHRpbnMtYmFzZXMuY2MNCj4NCj4gaW5kZXggNWM4ZGVkYTkwMGQuLjFi NGMyYzZhZDY2IDEwMDY0NA0KPg0KPiAtLS0gYS9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LXZlY3Rv ci1idWlsdGlucy1iYXNlcy5jYw0KPg0KPiArKysgYi9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LXZl Y3Rvci1idWlsdGlucy1iYXNlcy5jYw0KPg0KPiBAQCAtMjgxLDYgKzI4MSwyOSBAQCBwdWJsaWM6 DQo+DQo+ICAgIH0NCj4NCj4gfTsNCj4NCj4gKy8qIEltcGxlbWVudHMgYmVsb3cgaW5zdHJ1Y3Rp b25zIGZvciBub3cuDQo+DQo+ICsgICAtIHZmYWRkDQo+DQo+ICsqLw0KPg0KPiArdGVtcGxhdGU8 cnR4X2NvZGUgQ09ERT4NCj4NCj4gK2NsYXNzIGJpbm9wX2ZybSA6IHB1YmxpYyBmdW5jdGlvbl9i YXNlDQo+DQo+ICt7DQo+DQo+ICtwdWJsaWM6DQo+DQo+ICsgIGJvb2wgaGFzX3JvdW5kaW5nX21v ZGVfb3BlcmFuZF9wICgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0NCj4NCj4gKw0K Pg0KPiArICBydHggZXhwYW5kIChmdW5jdGlvbl9leHBhbmRlciAmZSkgY29uc3Qgb3ZlcnJpZGUN Cj4NCj4gKyAgew0KPg0KPiArICAgIHN3aXRjaCAoZS5vcF9pbmZvLT5vcCkNCj4NCj4gKyAgICAg IHsNCj4NCj4gKyAgICAgIGNhc2UgT1BfVFlQRV92ZjoNCj4NCj4gKyByZXR1cm4gZS51c2VfZXhh Y3RfaW5zbiAoY29kZV9mb3JfcHJlZF9zY2FsYXIgKENPREUsIGUudmVjdG9yX21vZGUgKCkpKTsN Cj4NCj4gKyAgICAgIGNhc2UgT1BfVFlQRV92djoNCj4NCj4gKyByZXR1cm4gZS51c2VfZXhhY3Rf aW5zbiAoY29kZV9mb3JfcHJlZCAoQ09ERSwgZS52ZWN0b3JfbW9kZSAoKSkpOw0KPg0KPiArICAg ICAgZGVmYXVsdDoNCj4NCj4gKyBnY2NfdW5yZWFjaGFibGUgKCk7DQo+DQo+ICsgICAgICB9DQo+ DQo+ICsgIH0NCj4NCj4gK307DQo+DQo+ICsNCj4NCj4gLyogSW1wbGVtZW50cyB2cnN1Yi4gICov DQo+DQo+IGNsYXNzIHZyc3ViIDogcHVibGljIGZ1bmN0aW9uX2Jhc2UNCj4NCj4gew0KPg0KPiBA QCAtMjAwNiw2ICsyMDI5LDcgQEAgc3RhdGljIENPTlNURVhQUiBjb25zdCB2aW90YSB2aW90YV9v Ymo7DQo+DQo+IHN0YXRpYyBDT05TVEVYUFIgY29uc3QgdmlkIHZpZF9vYmo7DQo+DQo+IHN0YXRp YyBDT05TVEVYUFIgY29uc3QgYmlub3A8UExVUz4gdmZhZGRfb2JqOw0KPg0KPiBzdGF0aWMgQ09O U1RFWFBSIGNvbnN0IGJpbm9wPE1JTlVTPiB2ZnN1Yl9vYmo7DQo+DQo+ICtzdGF0aWMgQ09OU1RF WFBSIGNvbnN0IGJpbm9wX2ZybTxQTFVTPiB2ZmFkZF9mcm1fb2JqOw0KPg0KPiBzdGF0aWMgQ09O U1RFWFBSIGNvbnN0IHJldmVyc2VfYmlub3A8TUlOVVM+IHZmcnN1Yl9vYmo7DQo+DQo+IHN0YXRp YyBDT05TVEVYUFIgY29uc3Qgd2lkZW5fYmlub3A8UExVUz4gdmZ3YWRkX29iajsNCj4NCj4gc3Rh dGljIENPTlNURVhQUiBjb25zdCB3aWRlbl9iaW5vcDxNSU5VUz4gdmZ3c3ViX29iajsNCj4NCj4g QEAgLTIyMzEsNiArMjI1NSw3IEBAIEJBU0UgKHZtc29mKQ0KPg0KPiBCQVNFICh2aW90YSkNCj4N Cj4gQkFTRSAodmlkKQ0KPg0KPiBCQVNFICh2ZmFkZCkNCj4NCj4gK0JBU0UgKHZmYWRkX2ZybSkN Cj4NCj4gQkFTRSAodmZzdWIpDQo+DQo+IEJBU0UgKHZmcnN1YikNCj4NCj4gQkFTRSAodmZ3YWRk KQ0KPg0KPiBkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi12ZWN0b3ItYnVpbHRp bnMtYmFzZXMuaCBiL2djYy9jb25maWcvcmlzY3YvcmlzY3YtdmVjdG9yLWJ1aWx0aW5zLWJhc2Vz LmgNCj4NCj4gaW5kZXggNjJmZjM4YTI4MTEuLjU0YTgxZWFiMjY5IDEwMDY0NA0KPg0KPiAtLS0g YS9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LXZlY3Rvci1idWlsdGlucy1iYXNlcy5oDQo+DQo+ICsr KyBiL2djYy9jb25maWcvcmlzY3YvcmlzY3YtdmVjdG9yLWJ1aWx0aW5zLWJhc2VzLmgNCj4NCj4g QEAgLTE0NSw2ICsxNDUsNyBAQCBleHRlcm4gY29uc3QgZnVuY3Rpb25fYmFzZSAqY29uc3Qgdmlv dGE7DQo+DQo+IGV4dGVybiBjb25zdCBmdW5jdGlvbl9iYXNlICpjb25zdCB2aWQ7DQo+DQo+IGV4 dGVybiBjb25zdCBmdW5jdGlvbl9iYXNlICpjb25zdCB2ZmFkZDsNCj4NCj4gZXh0ZXJuIGNvbnN0 IGZ1bmN0aW9uX2Jhc2UgKmNvbnN0IHZmYWRkOw0KPg0KPiArZXh0ZXJuIGNvbnN0IGZ1bmN0aW9u X2Jhc2UgKmNvbnN0IHZmYWRkX2ZybTsNCj4NCj4gZXh0ZXJuIGNvbnN0IGZ1bmN0aW9uX2Jhc2Ug KmNvbnN0IHZmc3ViOw0KPg0KPiBleHRlcm4gY29uc3QgZnVuY3Rpb25fYmFzZSAqY29uc3QgdmZz dWI7DQo+DQo+IGV4dGVybiBjb25zdCBmdW5jdGlvbl9iYXNlICpjb25zdCB2ZnJzdWI7DQo+DQo+ IGRpZmYgLS1naXQgYS9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LXZlY3Rvci1idWlsdGlucy1mdW5j dGlvbnMuZGVmIGIvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi12ZWN0b3ItYnVpbHRpbnMtZnVuY3Rp b25zLmRlZg0KPg0KPiBpbmRleCA4OWFmZjI3YmYyNi4uMDM1YzllNDI1MmYgMTAwNjQ0DQo+DQo+ IC0tLSBhL2djYy9jb25maWcvcmlzY3YvcmlzY3YtdmVjdG9yLWJ1aWx0aW5zLWZ1bmN0aW9ucy5k ZWYNCj4NCj4gKysrIGIvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi12ZWN0b3ItYnVpbHRpbnMtZnVu Y3Rpb25zLmRlZg0KPg0KPiBAQCAtMjg5LDYgKzI4OSw4IEBAIERFRl9SVlZfRlVOQ1RJT04gKHZm YWRkLCBhbHUsIGZ1bGxfcHJlZHMsIGZfdnZmX29wcykNCj4NCj4gREVGX1JWVl9GVU5DVElPTiAo dmZzdWIsIGFsdSwgZnVsbF9wcmVkcywgZl92dnZfb3BzKQ0KPg0KPiBERUZfUlZWX0ZVTkNUSU9O ICh2ZnN1YiwgYWx1LCBmdWxsX3ByZWRzLCBmX3Z2Zl9vcHMpDQo+DQo+IERFRl9SVlZfRlVOQ1RJ T04gKHZmcnN1YiwgYWx1LCBmdWxsX3ByZWRzLCBmX3Z2Zl9vcHMpDQo+DQo+ICtERUZfUlZWX0ZV TkNUSU9OICh2ZmFkZF9mcm0sIGFsdV9mcm0sIGZ1bGxfcHJlZHMsIGZfdnZ2X29wcykNCj4NCj4g K0RFRl9SVlZfRlVOQ1RJT04gKHZmYWRkX2ZybSwgYWx1X2ZybSwgZnVsbF9wcmVkcywgZl92dmZf b3BzKQ0KPg0KPiAvLyAxMy4zLiBWZWN0b3IgV2lkZW5pbmcgRmxvYXRpbmctUG9pbnQgQWRkL1N1 YnRyYWN0IEluc3RydWN0aW9ucw0KPg0KPiBERUZfUlZWX0ZVTkNUSU9OICh2ZndhZGQsIHdpZGVu X2FsdSwgZnVsbF9wcmVkcywgZl93dnZfb3BzKQ0KPg0KPiBkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZp Zy9yaXNjdi9yaXNjdi12ZWN0b3ItYnVpbHRpbnMtc2hhcGVzLmNjIGIvZ2NjL2NvbmZpZy9yaXNj di9yaXNjdi12ZWN0b3ItYnVpbHRpbnMtc2hhcGVzLmNjDQo+DQo+IGluZGV4IGM4ZGFhZTAxZjkx Li42OWE2NzEwNjQxOCAxMDA2NDQNCj4NCj4gLS0tIGEvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi12 ZWN0b3ItYnVpbHRpbnMtc2hhcGVzLmNjDQo+DQo+ICsrKyBiL2djYy9jb25maWcvcmlzY3Yvcmlz Y3YtdmVjdG9yLWJ1aWx0aW5zLXNoYXBlcy5jYw0KPg0KPiBAQCAtMjI2LDYgKzIyNiw3MyBAQCBz dHJ1Y3QgYWx1X2RlZiA6IHB1YmxpYyBidWlsZF9iYXNlDQo+DQo+ICAgIH0NCj4NCj4gfTsNCj4N Cj4gKy8qIGFsdV9mcm1fZGVmIGNsYXNzLiAgKi8NCj4NCj4gK3N0cnVjdCBhbHVfZnJtX2RlZiA6 IHB1YmxpYyBidWlsZF9iYXNlDQo+DQo+ICt7DQo+DQo+ICsgIC8qIE5vcm1hbGl6ZSB2ZjxvcD5f ZnJtIHRvIHZmPG9wPi4gICovDQo+DQo+ICsgIHN0YXRpYyB2b2lkIG5vcm1hbGl6ZV9iYXNlX25h bWUgKGNoYXIgKnRvLCBjb25zdCBjaGFyICpmcm9tLCBpbnQgbGltaXQpDQo+DQo+ICsgIHsNCj4N Cj4gKyAgICBzdHJuY3B5ICh0bywgZnJvbSwgbGltaXQgLSAxKTsNCj4NCj4gKyAgICBjaGFyICpz dWZmaXggPSBzdHJzdHIgKHRvLCAiX2ZybSIpOw0KPg0KPiArDQo+DQo+ICsgICAgaWYgKHN1ZmZp eCkNCj4NCj4gKyAgICAgICpzdWZmaXggPSAnXDAnOw0KPg0KPiArDQo+DQo+ICsgICAgdG9bbGlt aXQgLSAxXSA9ICdcMCc7DQo+DQo+ICsgIH0NCj4NCj4gKw0KPg0KPiArICBjaGFyICpnZXRfbmFt ZSAoZnVuY3Rpb25fYnVpbGRlciAmYiwgY29uc3QgZnVuY3Rpb25faW5zdGFuY2UgJmluc3RhbmNl LA0KPg0KPiArICAgYm9vbCBvdmVybG9hZGVkX3ApIGNvbnN0IG92ZXJyaWRlDQo+DQo+ICsgIHsN Cj4NCj4gKyAgICBjaGFyIGJhc2VfbmFtZVsxNl0gPSB7fTsNCj4NCj4gKw0KPg0KPiArICAgIC8q IFJldHVybiBudWxscHRyIGlmIGl0IGNhbiBub3QgYmUgb3ZlcmxvYWRlZC4gICovDQo+DQo+ICsg ICAgaWYgKG92ZXJsb2FkZWRfcCAmJiAhaW5zdGFuY2UuYmFzZS0+Y2FuX2JlX292ZXJsb2FkZWRf cCAoaW5zdGFuY2UucHJlZCkpDQo+DQo+ICsgICAgICByZXR1cm4gbnVsbHB0cjsNCj4NCj4gKw0K Pg0KPiArICAgIG5vcm1hbGl6ZV9iYXNlX25hbWUgKGJhc2VfbmFtZSwgaW5zdGFuY2UuYmFzZV9u YW1lLCBzaXplb2YgKGJhc2VfbmFtZSkpOw0KPg0KPiArDQo+DQo+ICsgICAgYi5hcHBlbmRfYmFz ZV9uYW1lIChiYXNlX25hbWUpOw0KPg0KPiArDQo+DQo+ICsgICAgLyogdm9wPHNldz5fPG9wPiAt LT4gdm9wPHNldz5fPG9wPl88dHlwZT4uICAqLw0KPg0KPiArICAgIGlmICghb3ZlcmxvYWRlZF9w KQ0KPg0KPiArICAgICAgew0KPg0KPiArIGIuYXBwZW5kX25hbWUgKG9wZXJhbmRfc3VmZml4ZXNb aW5zdGFuY2Uub3BfaW5mby0+b3BdKTsNCj4NCj4gKyBiLmFwcGVuZF9uYW1lICh0eXBlX3N1ZmZp eGVzW2luc3RhbmNlLnR5cGUuaW5kZXhdLnZlY3Rvcik7DQo+DQo+ICsgICAgICB9DQo+DQo+ICsN Cj4NCj4gKyAgICAvKiBBY2NvcmRpbmcgdG8gcnZ2LWludHJpbnNpYy1kb2MsIGl0IGRvZXMgbm90 IGFkZCAiX20iIHN1ZmZpeA0KPg0KPiArICAgICAgIGZvciB2b3BfbSBDKysgb3ZlcmxvYWRlZCBB UEkuICAqLw0KPg0KPiArICAgIGlmIChvdmVybG9hZGVkX3AgJiYgaW5zdGFuY2UucHJlZCA9PSBQ UkVEX1RZUEVfbSkNCj4NCj4gKyAgICAgIHJldHVybiBiLmZpbmlzaF9uYW1lICgpOw0KPg0KPiAr DQo+DQo+ICsgICAgYi5hcHBlbmRfbmFtZSAocHJlZGljYXRpb25fc3VmZml4ZXNbaW5zdGFuY2Uu cHJlZF0pOw0KPg0KPiArDQo+DQo+ICsgICAgLyogQWNjb3JkaW5nIHRvIHJ2di1pbnRyaW5zaWMt ZG9jLCBpdCBkb2VzIG5vdCBhZGQgIl9ybSIgc3VmZml4DQo+DQo+ICsgICAgICAgZm9yIHZvcF9y bSBDKysgb3ZlcmxvYWRlZCBBUEkuICAqLw0KPg0KPiArICAgIGlmICghb3ZlcmxvYWRlZF9wKQ0K Pg0KPiArICAgICAgYi5hcHBlbmRfbmFtZSAoIl9ybSIpOw0KPg0KPiArDQo+DQo+ICsgICAgcmV0 dXJuIGIuZmluaXNoX25hbWUgKCk7DQo+DQo+ICsgIH0NCj4NCj4gKw0KPg0KPiArICBib29sIGNo ZWNrIChmdW5jdGlvbl9jaGVja2VyICZjKSBjb25zdCBvdmVycmlkZQ0KPg0KPiArICB7DQo+DQo+ ICsgICAgZ2NjX2Fzc2VydCAoYy5hbnlfdHlwZV9mbG9hdF9wICgpKTsNCj4NCj4gKw0KPg0KPiAr ICAgIC8qIENoZWNrIHdoZXRoZXIgcm91bmRpbmcgbW9kZSBhcmd1bWVudCBpcyBhIHZhbGlkIGlt bWVkaWF0ZS4gICovDQo+DQo+ICsgICAgaWYgKGMuYmFzZS0+aGFzX3JvdW5kaW5nX21vZGVfb3Bl cmFuZF9wICgpKQ0KPg0KPiArICAgICAgew0KPg0KPiArIHVuc2lnbmVkIGludCBmcm1fbnVtID0g Yy5hcmdfbnVtICgpIC0gMjsNCj4NCj4gKw0KPg0KPiArIHJldHVybiBjLnJlcXVpcmVfaW1tZWRp YXRlX3JhbmdlX29yIChmcm1fbnVtLCBGUk1fU1RBVElDX01JTiwNCj4NCj4gKyAgICAgIEZSTV9T VEFUSUNfTUFYLCBGUk1fRFlOKTsNCj4NCj4gKyAgICAgIH0NCj4NCj4gKw0KPg0KPiArICAgIHJl dHVybiB0cnVlOw0KPg0KPiArICB9DQo+DQo+ICt9Ow0KPg0KPiArDQo+DQo+IC8qIHdpZGVuX2Fs dV9kZWYgY2xhc3MuIEhhbmRsZSB2d2FkZC92d3N1Yi4gVW5saWtlDQo+DQo+ICAgICB2YWRkLnZ4 L3ZhZGQudnYvdndtdWwudnYvdndtdWwudngsIHZ3YWRkLnZ2L3Z3YWRkLnZ4L3Z3YWRkLnd2L3Z3 YWRkLnd4IGhhcw0KPg0KPiAgICAgJ09QJyBzdWZmaXggaW4gb3ZlcmxvYWRlZCBBUEkuICAqLw0K Pg0KPiBAQCAtNzQzLDYgKzgxMCw3IEBAIFNIQVBFKHZzZXR2bCwgdnNldHZsbWF4KQ0KPg0KPiBT SEFQRShsb2Fkc3RvcmUsIGxvYWRzdG9yZSkNCj4NCj4gU0hBUEUoaW5kZXhlZF9sb2Fkc3RvcmUs IGluZGV4ZWRfbG9hZHN0b3JlKQ0KPg0KPiBTSEFQRShhbHUsIGFsdSkNCj4NCj4gK1NIQVBFKGFs dV9mcm0sIGFsdV9mcm0pDQo+DQo+IFNIQVBFKHdpZGVuX2FsdSwgd2lkZW5fYWx1KQ0KPg0KPiBT SEFQRShub19tYXNrX3BvbGljeSwgbm9fbWFza19wb2xpY3kpDQo+DQo+IFNIQVBFKHJldHVybl9t YXNrLCByZXR1cm5fbWFzaykNCj4NCj4gZGlmZiAtLWdpdCBhL2djYy9jb25maWcvcmlzY3Yvcmlz Y3YtdmVjdG9yLWJ1aWx0aW5zLXNoYXBlcy5oIGIvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi12ZWN0 b3ItYnVpbHRpbnMtc2hhcGVzLmgNCj4NCj4gaW5kZXggNmE1MTcxM2MxMmMuLjE1ZmVmODM0MmVj IDEwMDY0NA0KPg0KPiAtLS0gYS9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LXZlY3Rvci1idWlsdGlu cy1zaGFwZXMuaA0KPg0KPiArKysgYi9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LXZlY3Rvci1idWls dGlucy1zaGFwZXMuaA0KPg0KPiBAQCAtMjksNiArMjksNyBAQCBleHRlcm4gY29uc3QgZnVuY3Rp b25fc2hhcGUgKmNvbnN0IHZzZXR2bG1heDsNCj4NCj4gZXh0ZXJuIGNvbnN0IGZ1bmN0aW9uX3No YXBlICpjb25zdCBsb2Fkc3RvcmU7DQo+DQo+IGV4dGVybiBjb25zdCBmdW5jdGlvbl9zaGFwZSAq Y29uc3QgaW5kZXhlZF9sb2Fkc3RvcmU7DQo+DQo+IGV4dGVybiBjb25zdCBmdW5jdGlvbl9zaGFw ZSAqY29uc3QgYWx1Ow0KPg0KPiArZXh0ZXJuIGNvbnN0IGZ1bmN0aW9uX3NoYXBlICpjb25zdCBh bHVfZnJtOw0KPg0KPiBleHRlcm4gY29uc3QgZnVuY3Rpb25fc2hhcGUgKmNvbnN0IHdpZGVuX2Fs dTsNCj4NCj4gZXh0ZXJuIGNvbnN0IGZ1bmN0aW9uX3NoYXBlICpjb25zdCBub19tYXNrX3BvbGlj eTsNCj4NCj4gZXh0ZXJuIGNvbnN0IGZ1bmN0aW9uX3NoYXBlICpjb25zdCByZXR1cm5fbWFzazsN Cj4NCj4gZGlmZiAtLWdpdCBhL2djYy9jb25maWcvcmlzY3YvcmlzY3YtdmVjdG9yLWJ1aWx0aW5z LmNjIGIvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi12ZWN0b3ItYnVpbHRpbnMuY2MNCj4NCj4gaW5k ZXggNDY2ZTM2ZDUwYjcuLjY0OGM3NjVhNWQxIDEwMDY0NA0KPg0KPiAtLS0gYS9nY2MvY29uZmln L3Jpc2N2L3Jpc2N2LXZlY3Rvci1idWlsdGlucy5jYw0KPg0KPiArKysgYi9nY2MvY29uZmlnL3Jp c2N2L3Jpc2N2LXZlY3Rvci1idWlsdGlucy5jYw0KPg0KPiBAQCAtMzg1Miw2ICszODUyLDIzIEBA IGZ1bmN0aW9uX2NoZWNrZXI6OnJlcG9ydF9vdXRfb2ZfcmFuZ2UgKHVuc2lnbmVkIGludCBhcmdu bywgSE9TVF9XSURFX0lOVCBhY3R1YWwsDQo+DQo+ICAgICBhY3R1YWwsIGFyZ25vICsgMSwgZm5k ZWNsLCBtaW4sIG1heCk7DQo+DQo+IH0NCj4NCj4gKy8qIFJlcG9ydCB0aGF0IExPQ0FUSU9OIGhh cyBhIGNhbGwgdG8gRk5ERUNMIGluIHdoaWNoIGFyZ3VtZW50IEFSR05PIGhhcw0KPg0KPiArICAg dGhlIHZhbHVlIEFDVFVBTCwgd2hlcmVhcyB0aGUgZnVuY3Rpb24gcmVxdWlyZXMgYSB2YWx1ZSBp biB0aGUgcmFuZ2UNCj4NCj4gKyAgIFtNSU4sIE1BWF0gb3IgT1JfVkFMLiAgQVJHTk8gY291bnRz IGZyb20gemVyby4gICovDQo+DQo+ICt2b2lkDQo+DQo+ICtmdW5jdGlvbl9jaGVja2VyOjpyZXBv cnRfb3V0X29mX3JhbmdlX2FuZF9ub3QgKHVuc2lnbmVkIGludCBhcmdubywNCj4NCj4gKyAgICAg ICAgSE9TVF9XSURFX0lOVCBhY3R1YWwsDQo+DQo+ICsgICAgICAgIEhPU1RfV0lERV9JTlQgbWlu LA0KPg0KPiArICAgICAgICBIT1NUX1dJREVfSU5UIG1heCwNCj4NCj4gKyAgICAgICAgSE9TVF9X SURFX0lOVCBvcl92YWwpIGNvbnN0DQo+DQo+ICt7DQo+DQo+ICsgIGVycm9yX2F0IChsb2NhdGlv biwNCj4NCj4gKyAgICAgInBhc3NpbmcgJXdkIHRvIGFyZ3VtZW50ICVkIG9mICVxRSwgd2hpY2gg ZXhwZWN0cyINCj4NCj4gKyAgICAgIiBhIHZhbHVlIGluIHRoZSByYW5nZSBbJXdkLCAld2RdIG9y ICV3ZCIsDQo+DQo+ICsgICAgIGFjdHVhbCwgYXJnbm8gKyAxLCBmbmRlY2wsIG1pbiwgbWF4LCBv cl92YWwpOw0KPg0KPiArfQ0KPg0KPiArDQo+DQo+ICsNCj4NCj4gLyogQ2hlY2sgdGhhdCBhcmd1 bWVudCBBUkdOTyBpcyBhbiBpbnRlZ2VyIGNvbnN0YW50IGV4cHJlc3Npb24gYW5kDQo+DQo+ICAg ICBzdG9yZSBpdHMgdmFsdWUgaW4gVkFMVUVfT1VUIGlmIHNvLiAgVGhlIGNhbGxlciBzaG91bGQg Zmlyc3QNCj4NCj4gICAgIGNoZWNrIHRoYXQgYXJndW1lbnQgQVJHTk8gZXhpc3RzLiAgKi8NCj4N Cj4gQEAgLTM4OTMsNiArMzkxMCwzMCBAQCBmdW5jdGlvbl9jaGVja2VyOjpyZXF1aXJlX2ltbWVk aWF0ZV9yYW5nZSAodW5zaWduZWQgaW50IGFyZ25vLA0KPg0KPiAgICByZXR1cm4gdHJ1ZTsNCj4N Cj4gfQ0KPg0KPiArLyogQ2hlY2sgdGhhdCBhcmd1bWVudCBSRUxfQVJHTk8gaXMgYW4gaW50ZWdl ciBjb25zdGFudCBleHByZXNzaW9uIGluIHRoZQ0KPg0KPiArICAgcmFuZ2UgW01JTiwgTUFYXSBv ciBPUl9WQUwuICBSRUxfQVJHTk8gY291bnRzIGZyb20gdGhlIGVuZCBvZiB0aGUNCj4NCj4gKyAg IHByZWRpY2F0aW9uIGFyZ3VtZW50cy4gICovDQo+DQo+ICtib29sDQo+DQo+ICtmdW5jdGlvbl9j aGVja2VyOjpyZXF1aXJlX2ltbWVkaWF0ZV9yYW5nZV9vciAodW5zaWduZWQgaW50IGFyZ25vLA0K Pg0KPiArICAgICAgIEhPU1RfV0lERV9JTlQgbWluLA0KPg0KPiArICAgICAgIEhPU1RfV0lERV9J TlQgbWF4LA0KPg0KPiArICAgICAgIEhPU1RfV0lERV9JTlQgb3JfdmFsKSBjb25zdA0KPg0KPiAr ew0KPg0KPiArICBnY2NfYXNzZXJ0IChtaW4gPj0gMCAmJiBtaW4gPD0gbWF4KTsNCj4NCj4gKyAg Z2NjX2Fzc2VydCAoYXJnbm8gPCBtX25hcmdzKTsNCj4NCj4gKw0KPg0KPiArICB0cmVlIGFyZyA9 IG1fYXJnc1thcmdub107DQo+DQo+ICsgIEhPU1RfV0lERV9JTlQgYWN0dWFsID0gdHJlZV90b191 aHdpIChhcmcpOw0KPg0KPiArDQo+DQo+ICsgIGlmICghSU5fUkFOR0UgKGFjdHVhbCwgbWluLCBt YXgpICYmIGFjdHVhbCAhPSBvcl92YWwpDQo+DQo+ICsgICAgew0KPg0KPiArICAgICAgcmVwb3J0 X291dF9vZl9yYW5nZV9hbmRfbm90IChhcmdubywgYWN0dWFsLCBtaW4sIG1heCwgb3JfdmFsKTsN Cj4NCj4gKyAgICAgIHJldHVybiBmYWxzZTsNCj4NCj4gKyAgICB9DQo+DQo+ICsNCj4NCj4gKyAg cmV0dXJuIHRydWU7DQo+DQo+ICt9DQo+DQo+ICsNCj4NCj4gLyogUGVyZm9ybSBzZW1hbnRpYyBj aGVja3Mgb24gdGhlIGNhbGwuICBSZXR1cm4gdHJ1ZSBpZiB0aGUgY2FsbCBpcyB2YWxpZCwNCj4N Cj4gICAgIG90aGVyd2lzZSByZXBvcnQgYSBzdWl0YWJsZSBlcnJvci4gICovDQo+DQo+IGJvb2wN Cj4NCj4gZGlmZiAtLWdpdCBhL2djYy9jb25maWcvcmlzY3YvcmlzY3YtdmVjdG9yLWJ1aWx0aW5z LmggYi9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LXZlY3Rvci1idWlsdGlucy5oDQo+DQo+IGluZGV4 IGIwYzNhNDJkODIwLi5lMzU4YThlNGQ5MSAxMDA2NDQNCj4NCj4gLS0tIGEvZ2NjL2NvbmZpZy9y aXNjdi9yaXNjdi12ZWN0b3ItYnVpbHRpbnMuaA0KPg0KPiArKysgYi9nY2MvY29uZmlnL3Jpc2N2 L3Jpc2N2LXZlY3Rvci1idWlsdGlucy5oDQo+DQo+IEBAIC00NDIsNiArNDQyLDggQEAgcHVibGlj Og0KPg0KPiAgICBib29sIGNoZWNrICh2b2lkKTsNCj4NCj4gICAgYm9vbCByZXF1aXJlX2ltbWVk aWF0ZSAodW5zaWduZWQgaW50LCBIT1NUX1dJREVfSU5ULCBIT1NUX1dJREVfSU5UKSBjb25zdDsN Cj4NCj4gKyAgYm9vbCByZXF1aXJlX2ltbWVkaWF0ZV9yYW5nZV9vciAodW5zaWduZWQgaW50LCBI T1NUX1dJREVfSU5ULA0KPg0KPiArICAgIEhPU1RfV0lERV9JTlQsIEhPU1RfV0lERV9JTlQpIGNv bnN0Ow0KPg0KPiBwcml2YXRlOg0KPg0KPiAgICBib29sIHJlcXVpcmVfaW1tZWRpYXRlX3Jhbmdl ICh1bnNpZ25lZCBpbnQsIEhPU1RfV0lERV9JTlQsDQo+DQo+IEBAIC00NDksNiArNDUxLDggQEAg cHJpdmF0ZToNCj4NCj4gICAgdm9pZCByZXBvcnRfbm9uX2ljZSAodW5zaWduZWQgaW50KSBjb25z dDsNCj4NCj4gICAgdm9pZCByZXBvcnRfb3V0X29mX3JhbmdlICh1bnNpZ25lZCBpbnQsIEhPU1Rf V0lERV9JTlQsIEhPU1RfV0lERV9JTlQsDQo+DQo+ICAgICBIT1NUX1dJREVfSU5UKSBjb25zdDsN Cj4NCj4gKyAgdm9pZCByZXBvcnRfb3V0X29mX3JhbmdlX2FuZF9ub3QgKHVuc2lnbmVkIGludCwg SE9TVF9XSURFX0lOVCwgSE9TVF9XSURFX0lOVCwNCj4NCj4gKyAgICAgSE9TVF9XSURFX0lOVCwg SE9TVF9XSURFX0lOVCkgY29uc3Q7DQo+DQo+ICAgIC8qIFRoZSB0eXBlIG9mIHRoZSByZXNvbHZl ZCBmdW5jdGlvbi4gICovDQo+DQo+ICAgIHRyZWUgbV9mbnR5cGU7DQo+DQo+IGRpZmYgLS1naXQg YS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvcmlzY3YvcnZ2L2Jhc2UvZmxvYXQtcG9pbnQtZnJt LWVycm9yLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvcmlzY3YvcnZ2L2Jhc2UvZmxvYXQt cG9pbnQtZnJtLWVycm9yLmMNCj4NCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4NCj4gaW5kZXgg MDAwMDAwMDAwMDAuLjRlYmFhMTVhYjBiDQo+DQo+IC0tLSAvZGV2L251bGwNCj4NCj4gKysrIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L3Jpc2N2L3J2di9iYXNlL2Zsb2F0LXBvaW50LWZybS1l cnJvci5jDQo+DQo+IEBAIC0wLDAgKzEsMTUgQEANCj4NCj4gKy8qIHsgZGctZG8gY29tcGlsZSB9 ICovDQo+DQo+ICsvKiB7IGRnLW9wdGlvbnMgIi1tYXJjaD1ydjY0Z2N2IC1tYWJpPWxwNjQgLU8z IC1Xbm8tcHNhYmkiIH0gKi8NCj4NCj4gKw0KPg0KPiArI2luY2x1ZGUgInJpc2N2X3ZlY3Rvci5o Ig0KPg0KPiArDQo+DQo+ICt0eXBlZGVmIGZsb2F0IGZsb2F0MzJfdDsNCj4NCj4gKw0KPg0KPiAr dm9pZCB0ZXN0X2Zsb2F0X3BvaW50X2ZybV9lcnJvciAoZmxvYXQzMl90ICpvdXQsIHZmbG9hdDMy bTFfdCBvcDEsIHZmbG9hdDMybTFfdCBvcDIsIHNpemVfdCB2bCkNCj4NCj4gK3sNCj4NCj4gKyAg dmZsb2F0MzJtMV90IHYxID0gX19yaXNjdl92ZmFkZF92dl9mMzJtMV9ybSAob3AxLCBvcDIsIDUs IHZsKTsgLyogeyBkZy1lcnJvciB7cGFzc2luZyA1IHRvIGFyZ3VtZW50IDMgb2YgJ19fcmlzY3Zf dmZhZGRfdnZfZjMybTFfcm0nLCB3aGljaCBleHBlY3RzIGEgdmFsdWUgaW4gdGhlIHJhbmdlIFxb MCwgNFxdIG9yIDd9IH0gKi8NCj4NCj4gKyAgdmZsb2F0MzJtMV90IHYyID0gX19yaXNjdl92ZmFk ZF92dl9mMzJtMV9ybSAodjEsIHYxLCA2LCB2bCk7ICAgLyogeyBkZy1lcnJvciB7cGFzc2luZyA2 IHRvIGFyZ3VtZW50IDMgb2YgJ19fcmlzY3ZfdmZhZGRfdnZfZjMybTFfcm0nLCB3aGljaCBleHBl Y3RzIGEgdmFsdWUgaW4gdGhlIHJhbmdlIFxbMCwgNFxdIG9yIDd9IH0gKi8NCj4NCj4gKyAgdmZs b2F0MzJtMV90IHYzID0gX19yaXNjdl92ZmFkZF92dl9mMzJtMV9ybSAodjIsIHYyLCA4LCB2bCk7 ICAgLyogeyBkZy1lcnJvciB7cGFzc2luZyA4IHRvIGFyZ3VtZW50IDMgb2YgJ19fcmlzY3ZfdmZh ZGRfdnZfZjMybTFfcm0nLCB3aGljaCBleHBlY3RzIGEgdmFsdWUgaW4gdGhlIHJhbmdlIFxbMCwg NFxdIG9yIDd9IH0gKi8NCj4NCj4gKw0KPg0KPiArICBfX3Jpc2N2X3ZzZTMyX3ZfZjMybTEgKG91 dCwgdjMsIHZsKTsNCj4NCj4gK30NCj4NCj4gZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2Nj LnRhcmdldC9yaXNjdi9ydnYvYmFzZS9mbG9hdC1wb2ludC1mcm0uYyBiL2djYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9yaXNjdi9ydnYvYmFzZS9mbG9hdC1wb2ludC1mcm0uYw0KPg0KPiBuZXcgZmls ZSBtb2RlIDEwMDY0NA0KPg0KPiBpbmRleCAwMDAwMDAwMDAwMC4uOTUyNzFiMmM4MjINCj4NCj4g LS0tIC9kZXYvbnVsbA0KPg0KPiArKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvcmlzY3Yv cnZ2L2Jhc2UvZmxvYXQtcG9pbnQtZnJtLmMNCj4NCj4gQEAgLTAsMCArMSwzMCBAQA0KPg0KPiAr LyogeyBkZy1kbyBjb21waWxlIH0gKi8NCj4NCj4gKy8qIHsgZGctb3B0aW9ucyAiLW1hcmNoPXJ2 NjRnY3YgLW1hYmk9bHA2NCAtTzMgLVduby1wc2FiaSIgfSAqLw0KPg0KPiArDQo+DQo+ICsjaW5j bHVkZSAicmlzY3ZfdmVjdG9yLmgiDQo+DQo+ICsNCj4NCj4gK3R5cGVkZWYgZmxvYXQgZmxvYXQz Ml90Ow0KPg0KPiArDQo+DQo+ICt2ZmxvYXQzMm0xX3QNCj4NCj4gK3Rlc3RfcmlzY3ZfdmZhZGRf dnZfZjMybTFfcm0gKHZmbG9hdDMybTFfdCBvcDEsIHZmbG9hdDMybTFfdCBvcDIsIHNpemVfdCB2 bCkgew0KPg0KPiArICByZXR1cm4gX19yaXNjdl92ZmFkZF92dl9mMzJtMV9ybSAob3AxLCBvcDIs IDAsIHZsKTsNCj4NCj4gK30NCj4NCj4gKw0KPg0KPiArdmZsb2F0MzJtMV90DQo+DQo+ICt0ZXN0 X3ZmYWRkX3Z2X2YzMm0xX21fcm0odmJvb2wzMl90IG1hc2ssIHZmbG9hdDMybTFfdCBvcDEsIHZm bG9hdDMybTFfdCBvcDIsDQo+DQo+ICsgc2l6ZV90IHZsKSB7DQo+DQo+ICsgIHJldHVybiBfX3Jp c2N2X3ZmYWRkX3Z2X2YzMm0xX21fcm0obWFzaywgb3AxLCBvcDIsIDAsIHZsKTsNCj4NCj4gK30N Cj4NCj4gKw0KPg0KPiArdmZsb2F0MzJtMV90DQo+DQo+ICt0ZXN0X3ZmYWRkX3ZmX2YzMm0xX3Jt KHZmbG9hdDMybTFfdCBvcDEsIGZsb2F0MzJfdCBvcDIsIHNpemVfdCB2bCkgew0KPg0KPiArICBy ZXR1cm4gX19yaXNjdl92ZmFkZF92Zl9mMzJtMV9ybShvcDEsIG9wMiwgMCwgdmwpOw0KPg0KPiAr fQ0KPg0KPiArDQo+DQo+ICt2ZmxvYXQzMm0xX3QNCj4NCj4gK3Rlc3RfdmZhZGRfdmZfZjMybTFf bV9ybSh2Ym9vbDMyX3QgbWFzaywgdmZsb2F0MzJtMV90IG9wMSwgZmxvYXQzMl90IG9wMiwNCj4N Cj4gKyBzaXplX3QgdmwpIHsNCj4NCj4gKyAgcmV0dXJuIF9fcmlzY3ZfdmZhZGRfdmZfZjMybTFf bV9ybShtYXNrLCBvcDEsIG9wMiwgMCwgdmwpOw0KPg0KPiArfQ0KPg0KPiArDQo+DQo+ICsvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge3ZmYWRkXC52W3ZmXVxzK3ZbMC05XSss XHMqdlswLTldKyxccypbZmF2XStbMC05XSt9IDQgfSB9ICovDQo+DQo+IC0tDQo+DQo+IDIuMzQu MQ0KPg0KPg0KPg0KPg0K