From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id BA39DFF885A for ; Mon, 4 May 2026 17:36:14 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id F071D10E7CA; Mon, 4 May 2026 17:36:13 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.b="ZVCe/C/g"; dkim-atps=neutral Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.11]) by gabe.freedesktop.org (Postfix) with ESMTPS id DFDF210E7CA; Mon, 4 May 2026 17:36:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1777916173; x=1809452173; h=date:from:to:cc:subject:message-id:references: content-transfer-encoding:in-reply-to:mime-version; bh=Golc/wAhV8+ewkCiuEFtHlKrNgffTIcrTzOMSBZNN7Y=; b=ZVCe/C/gFjibcU1LMSSAM1PvxODgrqKxoaV+KpCS/g38rCxGxMJWSoRu ofpqYdSpipEXAt1ni9kWSStaDj+gJiIJvSx/Uah3eU9kz5mKOkz+rl8LA kS2UlvztXokHz26tuMTlKKtafU1j9AWU+31Yc0RmnUVRSOqhYDxjQNUOs n2h7Xtml2qDZRd675iLtSEP0Ax2rgr1dz84NTq8cchJCFkbgdPBNLgwQI D/uPjzjCyPF0HChe/ItWfBCCh7JKm5Ahk8GhF5ad1r/wPUMWDPMgJWGur juk2VstnMclVj6iWcHNJdph3DTjR0lshIp5O33ns99RopUBj4QtBBIGsE w==; X-CSE-ConnectionGUID: fcKvtb3jSmmWteVda8A/YQ== X-CSE-MsgGUID: q7yUopJyQ0OMqK5b0/Y94A== X-IronPort-AV: E=McAfee;i="6800,10657,11776"; a="89083925" X-IronPort-AV: E=Sophos;i="6.23,215,1770624000"; d="scan'208";a="89083925" Received: from fmviesa010.fm.intel.com ([10.60.135.150]) by orvoesa103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 May 2026 10:36:11 -0700 X-CSE-ConnectionGUID: RxjTNNI/QjWMO6454t5W2Q== X-CSE-MsgGUID: H30KRS8fSkC3EMOvJ36E4A== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.23,215,1770624000"; d="scan'208";a="231208189" Received: from fmsmsx903.amr.corp.intel.com ([10.18.126.92]) by fmviesa010.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 May 2026 10:36:11 -0700 Received: from FMSMSX902.amr.corp.intel.com (10.18.126.91) by fmsmsx903.amr.corp.intel.com (10.18.126.92) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.37; Mon, 4 May 2026 10:36:07 -0700 Received: from fmsedg901.ED.cps.intel.com (10.1.192.143) by FMSMSX902.amr.corp.intel.com (10.18.126.91) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.37 via Frontend Transport; Mon, 4 May 2026 10:36:07 -0700 Received: from DM5PR21CU001.outbound.protection.outlook.com (52.101.62.42) by edgegateway.intel.com (192.55.55.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.37; Mon, 4 May 2026 10:36:01 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=i9EbHEXhMED2o8Reo9DxA7gs0PT/AWdcUEV63lBzg6O04YivAnX1kVhdOWTrfbm4/LUBCYk7A+RPq+UQF2i8eatSLnouEYYDNE3vp1MgTyGJGXsHT5KkkHcJ3UMU9A+rQHEbc79B2cPuvwp3g2cIBYcdJPwhhZHYW161gpgf2RPaashLvVZ+1vIASZgpQ2rEMUH+IkbupH2ReOTE0kO/198CUg8Eh8qRvlmzaw9g/VbiRUzIfWB3cnWKMrSQJB1B0H70FfnTwigxj6hucA4WPefJh487ogL5StxpMhUXzy1nCx7JsEHzDQuFDMCjhj1qPyGMEKxhsauFUJ8bVvte2Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=9ncIXBOA67lAnBqLe5Tw51kNWWfhn1TMAAhl0FXE0ZQ=; b=BG/mbd6e64bXQg+09/2hLAcrU+EQQKE4s4IBEOnsiqIoE5ED1iuDPgqg5EacGrvO6TyuFLXdsrLxVQ1AFApEV4/jgnhv+YgvNFJnX9qE7ZT8zpDUNxphqOYA0JR4gE1YU54ZNW/cq7+HBT969An8HNyuJac8RIyls1+XLU9UhFvO1knb+nQpkHrit2n1H0tREJxRuCczy+AjClt1jwkDCUBw5/P6iA7wqjlui3cQ1MLB48jc9tOrQ9Ccu7lZ3nc0XyS8Mow6crxn1iBn2XQ6iQMGE1oiu/P9+94jGDPk4jPR3w/j9xtN1d8+JWAozsyz2XgVnM+JZgDtxiXZd/x9lw== 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 Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; Received: from PH7PR11MB6522.namprd11.prod.outlook.com (2603:10b6:510:212::12) by LV0PR11MB9838.namprd11.prod.outlook.com (2603:10b6:408:384::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9870.25; Mon, 4 May 2026 17:35:59 +0000 Received: from PH7PR11MB6522.namprd11.prod.outlook.com ([fe80::e0c5:6cd8:6e67:dc0c]) by PH7PR11MB6522.namprd11.prod.outlook.com ([fe80::e0c5:6cd8:6e67:dc0c%7]) with mapi id 15.20.9870.023; Mon, 4 May 2026 17:35:59 +0000 Date: Mon, 4 May 2026 10:35:56 -0700 From: Matthew Brost To: Thomas =?iso-8859-1?Q?Hellstr=F6m?= CC: , , Christian Koenig , Huang Rui , Matthew Auld , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , , Subject: Re: [PATCH] drm/ttm/pool: back up at native page order Message-ID: References: <20260504042619.2896273-1-matthew.brost@intel.com> <58ea6837e2aa808bf9f3ba304395058a2d08b8d0.camel@linux.intel.com> <017d25edabb2e4f60da7421278bffa20f51b0142.camel@linux.intel.com> Content-Type: text/plain; charset="utf-8" Content-Disposition: inline Content-Transfer-Encoding: base64 In-Reply-To: <017d25edabb2e4f60da7421278bffa20f51b0142.camel@linux.intel.com> X-ClientProxiedBy: BY1P220CA0009.NAMP220.PROD.OUTLOOK.COM (2603:10b6:a03:59d::7) To PH7PR11MB6522.namprd11.prod.outlook.com (2603:10b6:510:212::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PH7PR11MB6522:EE_|LV0PR11MB9838:EE_ X-MS-Office365-Filtering-Correlation-Id: 97b89a97-6393-402a-0c1b-08deaa039a8e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|366016|1800799024|7416014|376014|22082099003|18002099003|56012099003|20046099003; X-Microsoft-Antispam-Message-Info: Dvm60QuSjm572OQcWGga2o8OH4tqfKRnX3Ycmd5bwqyhlXS4bqq80RCziazjK45jobQtSUN1LW6EwbkAf10JCTsVdxr0yDW5MkySqfWhiKjJ7L6oqml3pjBS+d/PUgitQWPncYBWb5KLqkFN0tw5UJMZ0q9fUztwcOZrlq4gEYTyodiFfdttylBWfhhZaejjglyQWwPcCo/CgKvZLEH+7RuHQ1RyIY45bGjz5y3HEJitUrQiyZ1bnYvvWoa6CECPmQ4xp0+xBRtc2bRAk/R79dj6Bi2hV57ZoqVRc5wtDqeWaEcmOHMzrTSo1koAbtpvuev+4rGtTWJ5lACbCmZKVx0jgBJKI1obcmshICNXqoM0jw7ioG2HcIiOmIlux5ID/GoSuRYOTVa5bwFSiR5CJvVDoVgt7KrZBOr8jnl79gjbu3/r/QexLB3WT6N0WYVkd1o219i9E6bwyj/WJWuxeVmLr2cg3uMDPJcE8WuRZyrxHjhvnKYEwmcjnLlBYvOyPQKUHmNcs92fDp+PD4C9pNZtSrV+1PQHcPceQfT/PlmaBts7zgPTai2IPej2hQ4VTBSOpTNEuDBQjXeZ/T5w2OYvoKBXtzafOLQUESPhOuv8iUQNJkKFLn1XMyqH+yO23qLEVcGZI1SMIY6o54wLjw== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PH7PR11MB6522.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(366016)(1800799024)(7416014)(376014)(22082099003)(18002099003)(56012099003)(20046099003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?akhzRlk3NElsWTBCb3UvemVEL25rTnNKWVF5Wkx5ZFBjdDBVOGFVNDU3cENG?= =?utf-8?B?N3daVGh3djFkK0hIM2VpaUkrcEhTK3FvTmF2Y1pyVHEzQlNwSzhxUTg0VzZa?= =?utf-8?B?ckxWR3paVnhaeUlmU1l2ZE9GUWI0bUNvL3VNRzRYS0g4STY5aVkwd1VZem9Z?= =?utf-8?B?YkI5ek9DcVBFQlQrWGFlUE9QZ0RhbnBFVURkVU1EOGNkNjVZbVVRYll1U3Vq?= =?utf-8?B?VWlTekJMVFhUUVMxZEJyc0hmRVFFSEkxR2JrTkZpUUtVc3ZGZEl6a0lQajJ6?= =?utf-8?B?MWVsSUdab3ZFL0d0VUNKOHdmU25BbURLR2N1R2VlK2d1c0IwVXJ4b1gweTd6?= =?utf-8?B?YWhWdHhxV0hRMnR4WG0xLzJIcEtkSTFNWVMzOE05MDN0VWtjS1EyZDBwN0dW?= =?utf-8?B?T292M0ZKa3J2NkZZTUtKQWdCWXdxc1R5MUJrZFhkM0toZ25GanhxblBIOCt4?= =?utf-8?B?cFRNaGRxaFRrN0c5UVdxMXVhMnJRQlBXWTU4UkMxSktMNnlRalBZTHFsQUZB?= =?utf-8?B?STdoMXRiT3h1WEJudEIwdGlROGFvMmdZNlN6cmhiUCs0bzRlR0FvQm5YbDF0?= =?utf-8?B?c1NwcUNGQ3FlYysyM2pheld6TDNTamExRHZPWnVvQXJzSW9EakFtcU5qRjNw?= =?utf-8?B?Z1RvaWd6aXpaN1RzSkRLVU5BNVpFcnVwaHltVDVqOWxyT1J4NjJBQmd6NS9N?= =?utf-8?B?R0puYTlKdUNyT056R3dBb1V6c2IyYkRVZXoyYlhNd2syRVp3OStTN1RHV1Bv?= =?utf-8?B?K2JZZ096Q1B5enRxckp6ZUkyU3F0eS9zUUlRelJLNjI5NnpZS3l6cmJnTDEz?= =?utf-8?B?RkNTWkNXTWZuVHFRMkROUFVxZEZmWWxXWGtQcmVYQUgyMWZ1OXhWUVRJMnJM?= =?utf-8?B?VnhZUXdtY3JLUi9paUtRbFdyOHlHTkc1clplSnJ1TFZQNVdoUENJeEhSU3JK?= =?utf-8?B?NGFWZThQMUdYZVZXZ3lJNlpabXNra3J5U25FcENtNnJ5OWVIa1ZuNi9yWkxO?= =?utf-8?B?MkhkMGhyeHlmZ2VhTUZJTi9vYkZ2UmJmZmdXTzVJQnhpL1JXVWJtcUJRUTNE?= =?utf-8?B?MHQ3NkdaM3hwT0J2clNYbkNoQWROam9TN0k5QlVIenpZQlV5d2RPQkN5VGR6?= =?utf-8?B?R1lSQ1JHT0FUY2J5VllJenV2WVJ3QW8yLzZjN3pTRFdWYVdRU09iVTk1bGdn?= =?utf-8?B?aWdxOFVPUEd3SGJzVW5NTHE5QlMvMHdOK3ZCR3ZvQlRWNkRIZWh1bFArLy80?= =?utf-8?B?VWdVNGxhMVAyTTVYckZVR0JiVnBUeWJ2Q250anFTVG1SVWFPb1VuVTBOQ0U3?= =?utf-8?B?SUtacklld1BCODMyOWVTa3JKVFdEUk5aS2NUWSsreXRKK1RwZkhnZjFLRUFF?= =?utf-8?B?Vyt0aWZUTDdPUG9xck1sY254Q1dEenVteTdPOWJ2SVhSeUNHVFBETmVsVjcz?= =?utf-8?B?MlEvb1ViQjI1SWRqakZaL0dCa0JldmFoM3hBVDF1YVlHQkgvWk1xTjZZeTFE?= =?utf-8?B?a3k1dnUvaWNoWTlIYkhySzl3eEpURGlmSmR0Zm93V284V0FVYnpDeW5tb3Rq?= =?utf-8?B?NHdUY085WnU1K0p1VVJtOUhwK2hJeDNudnNPT2ZGdWI1aUlJbnpESURXZ09a?= =?utf-8?B?YldIQVZOYVVTZCs5Wm5VbW5kSk5xU3dnRlVjM25vK2k1a240UzQrcjB3aG5Q?= =?utf-8?B?SUt4MjcraVpSOW10b085ZnRJaDJPL0d1TzRybHJxT3lCSU9pTy9WZFA1ZzNk?= =?utf-8?B?N081c1FOclJNS2RBbkNFYWFpYXllNjhVNFVFV0xZWCtYMnNkdmJJSjZBQzB1?= =?utf-8?B?OUtzRzV2NGJSL1FJUklucjcwTHJwK296VkZKakVaT1hkMEhaZ05KWkxJbVlj?= =?utf-8?B?c1lLMkJGKzF6cHN6UWF0OVJWNTB6RTRSaDJUcHV4TGpJL0NaYUNMYUw1SlBx?= =?utf-8?B?OFdzazZDMW5aT0oyNzBqK1o4anUyWjF0V1ZSemd1ejZpcysvVG9sVU1hdFZk?= =?utf-8?B?dTN1SVdHaEx2L1o5Rm1yK2RiS3FXc2pmQzFwc242cEJZeXpNKzZadXBvdDk3?= =?utf-8?B?UUtJejNoY3VKTEdJMWhKbnh5MFlzdCtmQXY4dU1FN1F1YnBMTTkxNjNWc1Rk?= =?utf-8?B?MUVCU1ZjUzBkWFlWbjF4QzZmVEN6TkdMQ1EvcjVabXY3VGxhdDlwZzJIcXpZ?= =?utf-8?B?elE3YlFXcWIxak9NWVFTSDM0YzJaTDN5eVBpUWtPbmhMcmprajJPU0ErUGJG?= =?utf-8?B?K3VlUTNxaGhUcE9jQ05yK3p2ZmZwSkx0RWxHZUJaUkxKcDVlaGgxUEpOdm5O?= =?utf-8?B?cGsxMEw1WUpOL2Yvb3RoY0RPbkNyS05xZmRid21jYS9GS2VDb3VHN3lxdzVF?= =?utf-8?Q?oLxRRyZGxhH471oM=3D?= X-Exchange-RoutingPolicyChecked: tyoMonfFzoA6qYtXLfiY4xcB6mjGvY5ZhrtgYfvjkvuWd74ejh0qJTdSDjU6DxJNYMnTb5z1YJMq0X7Z5mCqyQORECke0l8B9SUfCP7mNEGeitUx9LAbgC2PewXF2SC5rdIS8UHi+ix/aCoddAhhDs+hrGcIAqUUgHdRK+hMzod+K1JOxAmEPlNj/OeVSezDtngybN9+2ovHE2BMHRNJ/NmqvR8/6gkRlneOrKu3DIzoOZlcbnZFjm6UoQO3NaRerX0okngM9xmE7Iz0s/sjlWjGW7fr+HvJ5rEEn15d6mbR860UIFG9OC8u5YQFdFn6iSyrRBuot3zmeXOKwR2auA== X-MS-Exchange-CrossTenant-Network-Message-Id: 97b89a97-6393-402a-0c1b-08deaa039a8e X-MS-Exchange-CrossTenant-AuthSource: PH7PR11MB6522.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 May 2026 17:35:58.9889 (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: a5Qt66lo9AJ67bRN23bPrYnTl/Sb1LpmueSk/sboz0dFQ2pjob7pj7QfocPxgU0Uw2PlCIYKQK2ECy1XLPswog== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV0PR11MB9838 X-OriginatorOrg: intel.com X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" T24gTW9uLCBNYXkgMDQsIDIwMjYgYXQgMDU6MTk6NDJQTSArMDIwMCwgVGhvbWFzIEhlbGxzdHLD tm0gd3JvdGU6Cj4gT24gTW9uLCAyMDI2LTA1LTA0IGF0IDA3OjMwIC0wNzAwLCBNYXR0aGV3IEJy b3N0IHdyb3RlOgo+ID4gT24gTW9uLCBNYXkgMDQsIDIwMjYgYXQgMTA6MzU6MjNBTSArMDIwMCwg VGhvbWFzIEhlbGxzdHLDtm0gd3JvdGU6Cj4gPiA+IEhpLCBNYXR0LAo+ID4gPiAKPiA+ID4gT24g U3VuLCAyMDI2LTA1LTAzIGF0IDIxOjI2IC0wNzAwLCBNYXR0aGV3IEJyb3N0IHdyb3RlOgo+ID4g PiA+IHR0bV9wb29sX3NwbGl0X2Zvcl9zd2FwKCkgc3BsaXRzIGhpZ2gtb3JkZXIgcG9vbCBwYWdl cyBpbnRvCj4gPiA+ID4gb3JkZXItMAo+ID4gPiA+IHBhZ2VzIGR1cmluZyBiYWNrdXAgc28gZWFj aCA0SyBwYWdlIGNhbiBiZSByZWxlYXNlZCB0byB0aGUgc3lzdGVtCj4gPiA+ID4gYXMKPiA+ID4g PiBzb29uIGFzIGl0IGhhcyBiZWVuIHdyaXR0ZW4gdG8gc2htZW0uIFdoaWxlIHRoaXMgbWluaW1p emVzIHRoZQo+ID4gPiA+IGFsbG9jYXRvcidzIHdvcmtpbmcgc2V0IGR1cmluZyByZWNsYWltLCBp dCBhY3RpdmVseSBmcmFnbWVudHMKPiA+ID4gPiBtZW1vcnk6Cj4gPiA+ID4gZXZlcnkgVFRNLWJh Y2tlZCBjb21wb3VuZCBwYWdlIHRoYXQgdGhlIHNocmlua2VyIHRvdWNoZXMgaXMKPiA+ID4gPiBz aGF0dGVyZWQKPiA+ID4gPiBpbnRvIG9yZGVyLTAgcGFnZXMsIGV2ZW4gd2hlbiB0aGUgcmVzdCBv ZiB0aGUgc3lzdGVtIHdvdWxkIHByZWZlcgo+ID4gPiA+IHRoYXQKPiA+ID4gPiB0aGUgaGlnaC1v cmRlciBibG9jayBzdGF5IGludGFjdC4gVW5kZXIgc3VzdGFpbmVkIGtzd2FwZCBwcmVzc3VyZQo+ ID4gPiA+IHRoaXMKPiA+ID4gPiBpcyBlbm91Z2ggdG8gZHJpdmUgb3RoZXIgcGFydHMgb2YgTU0g aW50byByZWNvdmVyeSBsb29wcyBmcm9tCj4gPiA+ID4gd2hpY2gKPiA+ID4gPiB0aGV5IGNhbm5v dCBlYXNpbHkgZXNjYXBlLCBiZWNhdXNlIHRoZSBtZW1vcnkgVFRNIGp1c3QgZnJlZWQgaXMKPiA+ ID4gPiBubwo+ID4gPiA+IGxvbmdlciBjb250aWd1b3VzLgo+ID4gPiA+IAo+ID4gPiA+IFN0b3Ag c3BsaXR0aW5nIG9uIHRoZSBiYWNrdXAgcGF0aCBhbmQgYmFjayB1cCBlYWNoIGNvbXBvdW5kCj4g PiA+ID4gYXRvbWljYWxseQo+ID4gPiA+IGF0IGl0cyBuYXRpdmUgb3JkZXIgaW4gdHRtX3Bvb2xf YmFja3VwKCk6Cj4gPiA+ID4gCj4gPiA+ID4gwqAgLSBGb3IgZWFjaCBub24taGFuZGxlIHNsb3Qs IHJlYWQgdGhlIG9yZGVyIGZyb20gdGhlIGhlYWQgcGFnZQo+ID4gPiA+IGFuZAo+ID4gPiA+IMKg wqDCoCBiYWNrIHVwIGFsbCAxPDxvcmRlciBzdWJwYWdlcyB0byBjb25zZWN1dGl2ZSBzaG1lbSBp bmRpY2VzLAo+ID4gPiA+IMKgwqDCoCB3cml0aW5nIHRoZSByZXN1bHRpbmcgaGFuZGxlcyBpbnRv IHR0LT5wYWdlc1tdIGFzIHdlIGdvLgo+ID4gPiA+IMKgIC0gT24gYW55IHBlci1zdWJwYWdlIGJh Y2t1cCBmYWlsdXJlLCBkcm9wIHRoZSBoYW5kbGVzIHdlIGp1c3QKPiA+ID4gPiB3cm90ZQo+ID4g PiA+IMKgwqDCoCBmb3IgdGhpcyBjb21wb3VuZCBhbmQgcmVzdG9yZSB0aGUgb3JpZ2luYWwgcGFn ZSBwb2ludGVycywgc28KPiA+ID4gPiB0aGUKPiA+ID4gPiDCoMKgwqAgY29tcG91bmQgaXMgbGVm dCBmdWxseSBpbnRhY3QgYW5kIG1heSBiZSByZXRyaWVkIGxhdGVyLgo+ID4gPiA+IHNocnVua2Vu Cj4gPiA+ID4gwqDCoMKgIGlzIG9ubHkgaW5jcmVtZW50ZWQgb25jZSB0aGUgd2hvbGUgY29tcG91 bmQgc3VjY2VlZHMuCj4gPiA+ID4gwqAgLSBPbiBzdWNjZXNzLCB0aGUgY29tcG91bmQgaXMgZnJl ZWQgb25jZSBhdCBpdHMgbmF0aXZlIG9yZGVyLgo+ID4gPiA+IE5vCj4gPiA+ID4gwqDCoMKgIHNw bGl0X3BhZ2UoKSwgbm8gcGVyLTRLIHJlZmNvdW50IGp1Z2dsaW5nLCBubyBmcmFnbWVudGF0aW9u Cj4gPiA+ID4gwqDCoMKgIGludHJvZHVjZWQgZnJvbSB0aGlzIHBhdGguCj4gPiA+ID4gwqAgLSBT bG90cyB0aGF0IGFscmVhZHkgaG9sZCBhIGJhY2t1cCBoYW5kbGUgZnJvbSBhIHByZXZpb3VzCj4g PiA+ID4gcGFydGlhbAo+ID4gPiA+IMKgwqDCoCBhdHRlbXB0IGFyZSBza2lwcGVkLiBBIGNvbXBv dW5kIHRoYXQgd291bGQgZXh0ZW5kIHBhc3QgYQo+ID4gPiA+IMKgwqDCoCBmYXVsdC1pbmplY3Rp b24tdHJ1bmNhdGVkIG51bV9wYWdlcyBpcyBza2lwcGVkIHJhdGhlciB0aGFuCj4gPiA+ID4gc3Bs aXQuCj4gPiA+ID4gCj4gPiA+ID4gVGhlIHJlc3RvcmUtc2lkZSBsZWZ0b3Zlci1wYWdlIGJyYW5j aCBpbgo+ID4gPiA+IHR0bV9wb29sX3Jlc3RvcmVfY29tbWl0KCkgaXMKPiA+ID4gPiBsZWZ0IGFz LWlzIGZvciBub3c6IHRoYXQgcGF0aCBjYW4gc3RpbGwgc3BsaXQgYSBwcmV2aW91c2x5LQo+ID4g PiA+IHJldGFpbmVkCj4gPiA+ID4gY29tcG91bmQsIGJ1dCBpbiBwcmFjdGljZSBpdCBpcyB1bnJl YWNoYWJsZSB1bmRlciByZWFsaXN0aWMKPiA+ID4gPiB3b3JrbG9hZHMKPiA+ID4gPiAocGVyIHBy b2ZpbGluZyB3ZSBoYXZlIG5vdCBiZWVuIGFibGUgdG8gdHJpZ2dlciBpdCksIHNvIGl0IGlzIG5v dAo+ID4gPiA+IHdvcnRoIGNvbXBsaWNhdGluZyB0aGUgcmVzdG9yZSBzdGF0ZSBtYWNoaW5lIHRv IGF2b2lkIHRoZSBzcGxpdAo+ID4gPiA+IHRoZXJlLgo+ID4gPiA+IElmIGl0IGV2ZXIgYmVjb21l cyBhIHByb2JsZW0gaW4gcHJhY3RpY2UgaXQgY2FuIGJlIGFkZHJlc3NlZAo+ID4gPiA+IGluZGVw ZW5kZW50bHkuCj4gPiA+ID4gCj4gPiA+ID4gdHRtX3Bvb2xfc3BsaXRfZm9yX3N3YXAoKSBpdHNl bGYgaXMgcmV0YWluZWQgZm9yIHRoZSByZXN0b3JlCj4gPiA+ID4gcGF0aCdzCj4gPiA+ID4gc29s ZSByZW1haW5pbmcgY2FsbGVyLiBUaGUgRE1BLW1hcHBlZCBwcmUtYmFja3VwIHVubWFwIGxvb3As IHRoZQo+ID4gPiA+IHB1cmdlIHBhdGgsIHR0bV9wb29sX2ZyZWVfKiwgYW5kIHR0bV9wb29sX3Vu bWFwX2FuZF9mcmVlKCkKPiA+ID4gPiBhbHJlYWR5Cj4gPiA+ID4gb3BlcmF0ZSBhdCBuYXRpdmUg b3JkZXIgYW5kIGFyZSB1bmNoYW5nZWQuCj4gPiA+IAo+ID4gPiBUaGlzIHNwbGl0IGlzIGludGVu dGlvbmFsIGluIHRoYXQgd2l0aG91dCBpdCwgd2UnZCBuZWVkIHRvIGZpcnN0Cj4gPiA+IGFsbG9j YXRlIDEgPDwgb3JkZXIgcGFnZXMgZnJvbSB0aGUga2VybmVsJ3MgKnJlc2VydmVzKiBpbiBvcmRl ciB0bwo+ID4gPiBsYXRlciBmcmVlIDIgPDwgb3JkZXIgcGFnZXMsIG1ha2luZyB0aGUgc2hyaW5r ZXIgbXVjaCBtb3JlIGxpa2VseQo+ID4gPiB0bwo+ID4gPiBmYWlsIGluIHRydWUgT09NIHNpdHVh dGlvbnMuIChJIGJlbGlldmUgdGhpcyB3YXMgb25lIG9mIHRoZSByZWFzb25zCj4gPiA+IHRoZQo+ ID4gPiBpbml0aWFsIHNocmlua2VyIGF0dGVtcHRzIGZyb20gQU1EIGRpZG4ndCB3b3JrIGFzIGV4 cGVjdGVkKS4KPiA+ID4gCj4gPiAKPiA+IFNvIHdoZXJlIGV4YWN0bHkgaXMgYWxsb2NhdGlvbiBk b25l4oCUc2htZW1fcmVhZF9mb2xpb19nZnAgb3IKPiA+IHNobWVtX3dyaXRlb3V0PyBJIGRpZCBu b3RpY2UgYW5kIGNhbGxlZCBvdXQsIGluIHRoZSBjb21taXQgbWVzc2FnZSwKPiA+IHRoYXQKPiA+ IHRob3NlIGludGVyZmFjZXMgYXJlIGEgYml0IGNvbmZ1c2luZyB3aXRoIHJlc3BlY3QgdG8gd2hl dGhlciB0aGV5Cj4gPiBhY3R1YWxseSB3b3JrIHdpdGggaGlnaGVyLW9yZGVyIGFsbG9jYXRpb25z Lgo+IAo+IFRoZSBpbnRlcmVzdGluZyBvbmUgaXMgaW4gc2htZW1fcmVhZF9mb2xpb19nZnAoKS4g VGhpcyB1c2VkIHRvIGJlIDRLLQo+IHBhZ2Ugb25seSAoYnV0IGk5MTUgaGFkIHNvbWUgdHJpY2tz IHRvIG1ha2UgdGhpcyBhbGxvY2F0ZSAyTSBmb2xpb3MpLgoKCkl0IGxvb2tzIGxpa2UgdG9fZm9s aW8oKSBpbiB0dG1fYmFja3VwX2JhY2t1cF9wYWdlKCkgKHRoZSBvdXRwdXQgZnJvbQpzaG1lbV9y ZWFkX2ZvbGlvX2dmcCgpKSBpcyBhbHdheXMgb3JkZXItMOKAlGF0IGxlYXN0IHdpdGggaG93IEkg aGF2ZSB0aGUKa2VybmVsIGNvbmZpZ3VyZWQuCgpJIHNlZSB3aGF0IHlvdeKAmXJlIHNheWluZyBo ZXJlOiB3ZSBuZWVkIHRvIGFsbG9jYXRlIGhvd2V2ZXIgbWFueSBvcmRlci0wCnBhZ2VzIGFyZSBy ZXF1aXJlZCBpbiBzaG1lbV9yZWFkX2ZvbGlvX2dmcCgpIGJlZm9yZSB3ZSBjYWxsCl9fZnJlZV9w YWdlc19ncHVfYWNjb3VudCgpIG9uIHRoZSBoaWdoZXItb3JkZXIgZm9saW8gd2XigJlyZSBiYWNr aW5nIHVwLgpJbiB0aGUgd29yc3QgY2FzZSAoYWdhaW4sIHdpdGggbXkga2VybmVsIGNvbmZpZ3Vy YXRpb24gb24geDg2KSwgdGhpcyBpcwpvcmRlciAxMCAoNE1CKS4gSSB0aGluayBjZXJ0YWluIEtj b25maWcgb3B0aW9ucyBjYW4gbWFrZSB0aGlzIGxhcmdlciwKYW5kIG9uIHBsYXRmb3JtcyBsaWtl IEFSTSB0aGVzZSBoaWdoZXIgb3JkZXJzIGNhbiByZXByZXNlbnQgaHVnZSBhbW91bnRzCm9mIG1l bW9yeS4KCj4gTXkgdW5kZXJzdGFuZGluZyAodG8gYmUgdmVyaWZpZWQpIGlzIHRoYXQgdGhpcyBy ZWNlbnRseSB3YXMgY2hhbmdlZCB0bwo+IGFsbG93IDJNIGJ5IGRlZmF1bHQsIGFuZCBhbHNvIHRv IGFsbG93IDJNIGZvbGlvIHdyaXRlb3V0LiBXcml0ZW91dAo+IG1vdmVzIHRoZSBmb2xpbyBmcm9t IHRoZSBwYWdlLWNhY2hlIHRvIHRoZSBzd2FwLWNhY2hlIGFuZCB0aGVuIHN0YXJ0cyBhCj4gZnMg d3JpdGVvdXQgb3BlcmF0aW9uLiBQYWdlcyBhcmUgcHV0IGJhY2sgb24gdGhlIExSVSBhbmQgYXJl IGZyZWVkIHdoZW4KPiB3cml0ZW91dCBjb21wbGV0ZXMuCj4gCj4gQXMgSSB1bmRlcnN0YW5kIGl0 LCBzaG1lbV9yZWFkX2ZvbGlvX2dmcCgpIHdpbGwgYWxzbyBwb3RlbnRpYWxseQo+IGFsbG9jYXRl IG1lbW9yeSBmb3IgdGhlIHNobWVtIG9iamVjdCByYWRpeCB0cmVlLgo+IAo+ID4gCj4gPiBBbHNv LCBGV0lXLCB0aGlzIHBhdGNoIGJ5IGl0c2VsZiBzZWVtcyB0byBncmVhdGx5IGhlbHAgd2l0aAo+ ID4gZnJhZ21lbnRhdGlvbiwgYW5kIEkgaGF2ZW7igJl0IHNlZW4gdGhlIE9PTSBraWxsZXIga2lj ayBpbi4gSeKAmXZlIGRvbmUKPiA+IHRoaW5ncyBsaWtlIHJ1bm5pbmcgV2ViR0wgaW4gYSBidW5j aCBvZiBDaHJvbWUgdGFicywgdGhlbiBydW5uaW5nCj4gPiBib25uaWUrKyAod2hpY2ggYmFzaWNh bGx5IHVzZXMgYWxsIG1lbW9yeSksIG9yIHJ1bm5pbmcgSUdUcywgd2hpY2gKPiA+IGFsc28KPiA+ IHVzZSBhbGwgYXZhaWxhYmxlIG1lbW9yeS4gQmFzZWQgb24gdGhhdCwgSeKAmW0gbGVhbmluZyB0 b3dhcmQgdGhpcwo+ID4gcGF0Y2gKPiA+IGFsb25lIHdvcmtpbmcgYXMgZGVzaWduZWQuCj4gCj4g R29vZCB0byBrbm93LiBQZXJoYXBzIGl0IHdvdWxkIGZlZWwgc2FmZXIgaWYgd2UgY29tcGxldGVs eSByZXN0cmljdCB0aGUKPiB4ZSBUVE0gb3JkZXIgdG8gMk0gYW5kIGJlbG93IChpZiB3ZSBoYXZl bid0IGFscmVhZHkpLgo+IAoKV2UgZG9u4oCZdCBkbyB0aGlzIHRvZGF5LCBidXQgdGhhdCBzZWVt cyBsaWtlIGEgcmVhc29uYWJsZSBpZGVhLCBhbHRob3VnaAp0aGUgZGVmYXVsdCBvcmRlci0xMCBv biB4ODYgaXNu4oCZdCByZWFsbHkgYWxsIHRoYXQgYmFkIGVpdGhlci4KCldoYXQgaWYgdHRtX2Jh Y2t1cF9iYWNrdXBfcGFnZSgpIGZhaWxzIHdoaWxlIHdl4oCZcmUgdHJ5aW5nIHRvIGJhY2sgdXAg YQpoaWdoZXItb3JkZXIgcGFnZSAtIFdlIGNvdWxkIHRoZW4gc3BsaXQgdGhlIHBhZ2UsIGZyZWUg dGhlIHBhZ2VzIHVwIHRvIHRoZQpjdXJyZW50IHBvaW50IG9mIGl0ZXJhdGlvbiwgYW5kIHRoZW4g cmV0cnkgdG8gbWFrZSBmb3J3YXJkIHByb2dyZXNzLiBJZgpJIHJlY2FsbCBjb3JyZWN0bHksIGlm IGl0IGZhaWxzIGFnYWluLCB0aGUgc2hyaW5rZXIgZ3JhY2VmdWxseSBoYW5kbGVzCnBhcnRpYWwg YmFja3Vwcy4KCj4gPiAKPiA+ID4gCj4gPiA+IEkgYmVsaWV2ZSB0aGUgc29sdXRpb24gaGVyZSBp cyBpbiB0aGUgdHRtX2JhY2t1cCBsYXllciwgV2Ugc2hvdWxkCj4gPiA+IGludHJvZHVjZSBhIHR0 bV9iYWNrdXBfYmFja3VwX2ZvbGlvIGZ1bmN0aW9uIGFuZCBlaXRoZXIgaW5zZXJ0IHRoZQo+ID4g PiBwYWdlCj4gPiAKPiA+IEkgdGhpbmsgc29tZXRoaW5nIGxpa2UgdHRtX2JhY2t1cF9iYWNrdXBf Zm9saW8oKSBtYWtlcyBzZW5zZSwgYWdhaW4gSQo+ID4gY2FsbGVkIG91dCBpbiBjb21taXQgbWVz c2FnZS4KPiA+IAo+ID4gPiBkaXJlY3RseSBpbnRvIHRoZSBzaG1lbSBvYmplY3QgKHplcm8tY29w eSkgb3IgZXZlbiBkaXJlY3RseSBpbnRvCj4gPiA+IHRoZQo+ID4gPiBzd2FwIGNhY2hlLiBUaGVu IHdlIHNob3VsZCBjb21wbGV0ZWx5IHJlc3RyaWN0IHhlIHBhZ2UgYWxsb2NhdGlvbnMKPiA+ID4g dG8KPiA+ID4gb25seSBhbGxvdyBUSFAgYW5kIFBBR0VfU0laRSAoUG9zc2libHkgNjRLIHBhZ2Vz LCBidXQgdGhleSdkIGVpdGhlcgo+ID4gPiBuZWVkIGEgc3BsaXQgb3IgcGVyaGFwcyB0aGV5IGFy ZSBzbWFsbCBlbm91Z2ggdG8gYmUgYmFja2VkLXVwIHVzaW5nCj4gPiAKPiA+IFllcywgSSBkaWQg cmFpc2Ugc29tZXRoaW5nIGxpa2Ugd2l0aCBDaHJpc3RpYW4gdG9vIFsxXS4gSU1PIHRoZQo+ID4g ZHJpdmVyCj4gPiBzaG91bGQgYmUgYWJsZSBkaWN0YXRlIHRvIFRUTSB0aGUgb3JkZXJzIGl0IGxp a2VseSB0byBhbGxvY2F0ZSBhdC4KPiA+IAo+ID4gWzFdCj4gPiBodHRwczovL3BhdGNod29yay5m cmVlZGVza3RvcC5vcmcvcGF0Y2gvNzE2MzYyLz9zZXJpZXM9MTY0MzM4JnJldj0xCj4gPiAKPiA+ ID4gb25lLWdvIGNvcHksIHNpbWlsYXIgdG8gdGhpcyBwYXRjaCwgYnV0IGluIHRoZSBiYWNrdXAg bGF5ZXIpLiBGV0lXCj4gPiA+IGF0Cj4gPiA+IHRoZSB0aW1lIHRoZSBzaHJpbmtlciB3YXMgcHV0 IHRvZ2V0aGVyLCBBRkFJVSBTSE1FTSBzcGxpdCBsYXJnZQo+ID4gPiBwYWdlcwo+ID4gPiBvbiBz d2FwcGluZyBhbnl3YXksIGJ1dCBzaW5jZSB0aGF0IGFwcGVhcnMgdG8gaGF2ZSBjaGFuZ2VkLCB3 ZSBuZWVkCj4gPiA+IHRvCj4gPiA+IGNhdGNoIHVwLgo+ID4gPiAKPiA+ID4gSW5zZXJ0aW5nIGRp cmVjdGx5IGludG8gdGhlIHN3YXAtY2FjaGUgV0lQIGlzIGhlcmUsIHJlYmFzZWQgb24gYQo+ID4g PiByZWNlbnQKPiA+ID4ga2VybmVsIChUaGlzIGlzIGFuIG9sZCBpZGVhIHRoYXQgaGFzIGFjdHVh bGx5IGJlZW4gb3V0IG9uIFJGQwo+ID4gPiBvbmNlKS4KPiA+ID4gVGhpcyBuZWVkcyBhIGNvcmUg bW0gYnVnZml4IChhbHNvIGluIHRoZSBicmFuY2gpLCBidXQgSSdtIG5vdCBzdXJlCj4gPiA+IHRo ZQo+ID4gPiBzd2FwIGNhY2hlIGlzIHRoZSByaWdodCBwbGFjZSB0byBkbyB0aGlzLCBhdCBsZWFz dCBub3QgaWYgd2UgZG9uJ3QKPiA+ID4gaW1tZWRpYXRlbHkgc2NoZWR1bGUgYSB3cml0ZSB0byBk aXNjLCBpdCBsb29rcyBsaWtlIGN1cnJlbnQgdXNlcnMKPiA+ID4gZG9uJ3QKPiA+ID4gd2FudCB0 byBrZWVwIHBhZ2VzIGluIHN3YXAtY2FjaGUgZm9yIHZlcnkgbG9uZyAocmVsYXRlZCB0byB0aGF0 Cj4gPiA+IGJ1ZykKPiA+ID4gaHR0cHM6Ly9naXRsYWIuZnJlZWRlc2t0b3Aub3JnL3Rob21hc2gv eGUtdmliZS8tL2NvbW1pdHMvdGhwX3N3YXBwaW5nMgo+ID4gPiAKPiA+ID4gSW5zZXJ0aW5nIGRp cmVjdGx5IGludG8gc2htZW0gKEEgZmFpcmx5IHJlY2VudCBpZGVhIHRoYXQgaXMgbW9zdGx5Cj4g PiA+IHVudGVzdGVkKQo+ID4gPiBodHRwczovL2dpdGxhYi5mcmVlZGVza3RvcC5vcmcvdGhvbWFz aC94ZS12aWJlLy0vY29tbWl0cy9pbnNlcnRfc2htZW0/cmVmX3R5cGU9aGVhZHMKPiA+ID4gU2lu Y2UgU0hNRU0gc2NoZWR1bGVzIHdyaXRlb3V0IGltbWVkaWF0ZWx5IHdoZW4gcGFnZXMgYXJlIG1v dmVkIHRvCj4gPiA+IHRoZQo+ID4gPiBzd2FwLWNhY2hlLCBpdCdzIG5vdCBhcyBzdXNjZXB0aWJs ZSB0byB0aGUgYWJvdmUgYnVnLCBzaW5jZSBzd2FwLQo+ID4gPiBjYWNoZQo+ID4gPiBlbnRyaWVz IGFyZSBub3QgdHlwaWNhbGx5IGhlbGQgZm9yIGZvbGlvcyBmb3Igd2hpY2ggd2UgaGF2ZW4ndAo+ ID4gPiBzY2hlZHVsZWQgd3JpdGVvdXQuCj4gPiA+IAo+ID4gCj4gPiBMZXQgbWUgdGFrZSBhIGxv b2sgYXQgdGhlc2UgYnJhbmNoZXMgdG9kYXkuCj4gPiAKPiA+ID4gV2Ugc2hvdWxkIHRyeSB0byBz b2xpY2l0IGZlZWRiYWNrIGZyb20gbW0gcGVvcGxlIG9uIHRoZXNlIHR3bwo+ID4gPiBhcHByb2Fj aGVzLgo+ID4gCj4gPiArMSwgYnV0IEkgdGhpbmsgd2Ugc2hvdWxkIHN0b3AgaGVyZSBpZiB0aGlz IHBhdGNoLCBhc+KAkWlzLCBpcyBPSyB0byBnbwo+ID4gaW7igJRpZGVhbGx5IGFzIGEgZml44oCU c2luY2UsIGJhc2VkIG9uIG15IHRlc3RpbmcsIGl0IHNlZW1zIHRvIGhlbHAKPiA+IHF1aXRlIGEK PiA+IGJpdCBhbmQgY3VycmVudCB1cHN0cmVhbSBzaHJpbmtlciBpcyBiYWRseSBicm9rZW4uCj4g Cj4gV2VsbCBJIHRoaW5rIHRoZSBwcm9ibGVtIHdpdGggdGVzdGluZyBzaHJpbmtpbmcgYmVoYXZp b3IgaXMgdGhhdCB3ZQo+IGhhdmVuJ3QgaGFkIGdvb2QgdGVzdC1jYXNlcywgc28gd2UgZG9uJ3Qg cmVhbGx5IGtub3cgaWYgdGhpcyBjaGFuZ2UKCkkgYWdyZWUgdGhhdCB3ZSBkb27igJl0IGhhdmUg Z3JlYXQgdGVzdCBjYXNlcy4gV2UgY2FuIHRyeSB0byBnZXQgc29tZQpiZXR0ZXIgSUdUcywgYnV0 IEkgcmVhbGx5IHRoaW5rIHdlIG5lZWQgc29tZSBlbmTigJF0b+KAkWVuZCB0ZXN0aW5nIGxpa2UK d2hhdCBJ4oCZdmUgYmVlbiBtYW51YWxseSBkb2luZyAoZS5nLiwgb3BlbmluZyBhIGJ1bmNoIG9m IFdlYkdMIHRhYnMgb24gYQpzeXN0ZW0gd2l0aG91dCBhIGxvdCBvZiBtZW1vcnkgdG8gdHJpZ2dl ciBzaHJpbmtpbmcsIGFuZC9vciBydW5uaW5nCm1lbW9yeeKAkWhlYXZ5IHdvcmtsb2FkcyBvbiB0 aGUgQ0xJIGF0IHRoZSBzYW1lIHRpbWXigJRjb21waWxpbmcgdGhlIGtlcm5lbAp3aXRoIGEgbGFy Z2UgbnVtYmVyIG9mIHRocmVhZHMgaXMgbGlrZWx5IGEgZGVjZW50IG9wdGlvbikuCgo+IHdvdWxk IGJyZWFrIHNvbWV0aGluZyB0aGF0IGN1cnJlbnRseSB3b3Jrcy4gSW4gdGhlIHNobWVtIGRvY3Vt ZW50YXRpb24KPiB0aGVyZSdzIGV2ZW4gc29tZSB3b3JkaW5nIGFib3V0IGNvbmNlcm5zIHRoYXQg dGhlIHNobWVtIHJhZGl4IHRyZWUKPiBhbGxvY2F0aW9ucyBjb3VsZCBhY2N1bXVsYXRlIGFuZCBk cmFpbiB0aGUga2VybmVsIHJlc2VydmVzLsKgCj4gCj4gQWNjb3JkaW5nIHRvIEdvb2dsZSBBSSwg dGhlIGtlcm5lbCByZXNlcnZlcyBhcmUgYXJvdW5kIDJNaUIgdGltZXMgdGhlCj4gbnVtYmVyIG9m IHpvbmVzLCBjb250cm9sbGVkIGJ5IHZtLm1pbl9mcmVlX2tieXRlcy4KPiAKPiBCdXQgSSB0aGlu ayBpZiB3ZSB3b3VsZCBwdXNoIHRoaXMgb3Igc29tZXRoaW5nIHNpbWlsYXIgYnV0IHRoZW4gd2UK PiBzaG91bGQgCj4gCj4gKikgTW92ZSB0aGUgdHRtX2JhY2t1cCBpbnRlcmZhY2UgdG8gYmUgZm9s aW8tYmFzZWQuCj4gKikgUmVzdHJpY3Qgb3JkZXIgdG8gMk0KCkkgY2FuICdSZXN0cmljdCBvcmRl ciB0byAyTScgaW4gdGhpcyBzZXJpZXMgaWYgeW91IHRoaW5rIGl0IGlzIGEgZ29vZAppZGVhLgoK PiAqKSBDcmFmdCBhIHRlc3QtY2FzZSB0aGF0IHRyaWdnZXJzIGEgc2htZW1fcmVhZF9mb2xpb19n ZnAoKSBlcnJvciBpbgo+IHRoZSBiYWNrdXAgcGF0aCBhbmQgdmVyaWZ5IHRoYXQgdGhleSBkbyBi ZWhhdmUgZ3JhY2VmdWxseS4KPiAKCkkgdGhpbmssIGFzIGEgc3RvcC1nYXAgYW5kIGJhY2twb3J0 YWJsZSBmaXgsIHRoaXMgcGF0Y2ggcGx1cyBhIGZhbGxiYWNrCnRvIHNwbGl0dGluZyB3aXRoIGVy cm9yIGluamVjdGlvbiAoSSBoYXZlIGVycm9yIGluamVjdGlvbiBpbiB0aGlzIHNlcmllcwpidXQg SSBoYXZlIHJhbiBhbmQgaW5qZWN0ZWQgZXJyb3JzKSBpcyBhIHJlYXNvbmFibGUgb3B0aW9uLiBM b25nZXIgdGVybSwKeWVzLCBtb3ZpbmcgdHRtX2JhY2t1cCB0byBiZSBmb2xpby1iYXNlZCBtYWtl cyBzZW5zZS4KCj4gQW5kIHRoZW4gYXMgZm9sbG93LXVwczoKPiAKPiBhKSBJbnZlc3RpZ2F0ZSBk aXJlY3Qgc2htZW0gaW5zZXJ0aW9uLgo+IGIpIEFkZHJlc3MgYW55IHJlbWFpbmluZyBmbGF3cyBm cm9tIHBhcnRpYWxseSBiYWNrZWQtdXAgYm9zLgo+IGMpIENncm91cHMgaW50ZWdyYXRpb24sIGZv bGxvd2luZyB1cCBvbiBhaXJsaWVkJ3Mgd29yayBlbnN1cmluZyB0aGF0Cj4gdGhlIGV2aWN0ZWUg aXMgY2hhcmdlZCBmb3IgdGhlIHNobWVtIG1lbW9yeS4KPiAKCkFuZCB0aGVuIGFsc28gKzEgb24g ZXhwbG9yaW5nIHRoZXNlIG9wdGlvbnMuCgpNYXR0Cgo+IAo+IFRoYW5rcywKPiBUaG9tYXMKPiAK PiAKPiAKPiA+IE1hdHQKPiA+IAo+ID4gPiAKPiA+ID4gL1Rob21hcwo+ID4gPiAKPiA+ID4gPiAK PiA+ID4gPiBDYzogQ2hyaXN0aWFuIEtvZW5pZyA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQuY29tPgo+ ID4gPiA+IENjOiBIdWFuZyBSdWkgPHJheS5odWFuZ0BhbWQuY29tPgo+ID4gPiA+IENjOiBNYXR0 aGV3IEF1bGQgPG1hdHRoZXcuYXVsZEBpbnRlbC5jb20+Cj4gPiA+ID4gQ2M6IE1hYXJ0ZW4gTGFu a2hvcnN0IDxtYWFydGVuLmxhbmtob3JzdEBsaW51eC5pbnRlbC5jb20+Cj4gPiA+ID4gQ2M6IE1h eGltZSBSaXBhcmQgPG1yaXBhcmRAa2VybmVsLm9yZz4KPiA+ID4gPiBDYzogVGhvbWFzIFppbW1l cm1hbm4gPHR6aW1tZXJtYW5uQHN1c2UuZGU+Cj4gPiA+ID4gQ2M6IERhdmlkIEFpcmxpZSA8YWly bGllZEBnbWFpbC5jb20+Cj4gPiA+ID4gQ2M6IFNpbW9uYSBWZXR0ZXIgPHNpbW9uYUBmZndsbC5j aD4KPiA+ID4gPiBDYzogZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+ID4gPiA+IENj OiBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCj4gPiA+ID4gQ2M6IHN0YWJsZUB2Z2VyLmtl cm5lbC5vcmcKPiA+ID4gPiBGaXhlczogYjYzZDcxNWI4MDkwICgiZHJtL3R0bS9wb29sLCBkcm0v dHRtL3R0OiBQcm92aWRlIGEgaGVscGVyCj4gPiA+ID4gdG8KPiA+ID4gPiBzaHJpbmsgcGFnZXMi KQo+ID4gPiA+IFN1Z2dlc3RlZC1ieTogVGhvbWFzIEhlbGxzdHLDtm0gPHRob21hcy5oZWxsc3Ry b21AbGludXguaW50ZWwuY29tPgo+ID4gPiA+IEFzc2lzdGVkLWJ5OiBDbGF1ZGU6Y2xhdWRlLW9w dXMtNC42Cj4gPiA+ID4gU2lnbmVkLW9mZi1ieTogTWF0dGhldyBCcm9zdCA8bWF0dGhldy5icm9z dEBpbnRlbC5jb20+Cj4gPiA+ID4gCj4gPiA+ID4gLS0tCj4gPiA+ID4gCj4gPiA+ID4gQSBmb2xs b3ctdXAgc2hvdWxkIGF0dGVtcHQgd3JpdGViYWNrIHRvIHNobWVtIGF0IGZvbGlvIG9yZGVyIGFz Cj4gPiA+ID4gd2VsbCwKPiA+ID4gPiBidXQgdGhlIEFQSSBmb3IgZG9pbmcgc28gaXMgdW5jbGVh ciBhbmQgbWF5IGJlIGluY29tcGxldGUuCj4gPiA+ID4gCj4gPiA+ID4gVGhpcyBwYXRjaCBpcyBy ZWxhdGVkIHRvIHRoZSBwZW5kaW5nIHNlcmllcyBbMV0gYW5kIHNpZ25pZmljYW50bHkKPiA+ID4g PiByZWR1Y2VzIHRoZSBsaWtlbGlob29kIG9mIFhlIGVudGVyaW5nIGEga3N3YXBkIGxvb3AgdW5k ZXIKPiA+ID4gPiBmcmFnbWVudGF0aW9uLgo+ID4gPiA+IFRoZSBrc3dhcGQg4oaSIHNocmlua2Vy IOKGkiBYZSBzaHJpbmtlciDihpIgVFRNIGJhY2t1cCBwYXRoIGlzIHN0aWxsCj4gPiA+ID4gZXhl cmNpc2VkOyBob3dldmVyLCB3aXRoIHRoaXMgY2hhbmdlIHRoZSBiYWNrdXAgcGF0aCBubyBsb25n ZXIKPiA+ID4gPiB3b3JzZW5zCj4gPiA+ID4gZnJhZ21lbnRhdGlvbiwgd2hpY2ggcHJldmlvdXNs eSBhbXBsaWZpZWQgcmVjbGFpbSBwcmVzc3VyZSBhbmQKPiA+ID4gPiByZWluZm9yY2VkIHRoZSBr c3dhcGQgbG9vcC4KPiA+ID4gPiAKPiA+ID4gPiBOb25ldGhlbGVzcywgdGhlIHBhdGhvbG9naWNh bCBjYXNlIHRoYXQgWzFdIGFpbXMgdG8gYWRkcmVzcyBzdGlsbAo+ID4gPiA+IGV4aXN0cwo+ID4g PiA+IGFuZCByZXF1aXJlcyBhIHByb3BlciBzb2x1dGlvbi4gRXZlbiB3aXRoIHRoaXMgcGF0Y2gs IGEga3N3YXBkCj4gPiA+ID4gbG9vcAo+ID4gPiA+IGR1ZQo+ID4gPiA+IHRvIHNldmVyZSBmcmFn bWVudGF0aW9uIGNhbiBzdGlsbCBiZSB0cmlnZ2VyZWQsIGFsdGhvdWdoIGl0IGlzCj4gPiA+ID4g bm93Cj4gPiA+ID4gc3Vic3RhbnRpYWxseSBoYXJkZXIgdG8gcmVwcm9kdWNlLgo+ID4gPiA+IAo+ ID4gPiA+IFsxXSBodHRwczovL3BhdGNod29yay5mcmVlZGVza3RvcC5vcmcvc2VyaWVzLzE2NTMz MC8KPiA+ID4gPiAtLS0KPiA+ID4gPiDCoGRyaXZlcnMvZ3B1L2RybS90dG0vdHRtX3Bvb2wuYyB8 IDcxICsrKysrKysrKysrKysrKysrKysrKysrKysrKy0KPiA+ID4gPiAtLS0tCj4gPiA+ID4gLS0K PiA+ID4gPiDCoDEgZmlsZSBjaGFuZ2VkLCA1NyBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMo LSkKPiA+ID4gPiAKPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1f cG9vbC5jCj4gPiA+ID4gYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9wb29sLmMKPiA+ID4gPiBp bmRleCAyNzhiYmU3YTExYWQuLjVlYWQwYWJhNGJiNyAxMDA2NDQKPiA+ID4gPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vdHRtL3R0bV9wb29sLmMKPiA+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v dHRtL3R0bV9wb29sLmMKPiA+ID4gPiBAQCAtMTAzNiwxMiArMTAzNiwxMSBAQCBsb25nIHR0bV9w b29sX2JhY2t1cChzdHJ1Y3QgdHRtX3Bvb2wKPiA+ID4gPiAqcG9vbCwKPiA+ID4gPiBzdHJ1Y3Qg dHRtX3R0ICp0dCwKPiA+ID4gPiDCoHsKPiA+ID4gPiDCoAlzdHJ1Y3QgZmlsZSAqYmFja3VwID0g dHQtPmJhY2t1cDsKPiA+ID4gPiDCoAlzdHJ1Y3QgcGFnZSAqcGFnZTsKPiA+ID4gPiAtCXVuc2ln bmVkIGxvbmcgaGFuZGxlOwo+ID4gPiA+IMKgCWdmcF90IGFsbG9jX2dmcDsKPiA+ID4gPiDCoAln ZnBfdCBnZnA7Cj4gPiA+ID4gwqAJaW50IHJldCA9IDA7Cj4gPiA+ID4gwqAJcGdvZmZfdCBzaHJ1 bmtlbiA9IDA7Cj4gPiA+ID4gLQlwZ29mZl90IGksIG51bV9wYWdlczsKPiA+ID4gPiArCXBnb2Zm X3QgaSwgbnVtX3BhZ2VzLCBucGFnZXM7Cj4gPiA+ID4gwqAKPiA+ID4gPiDCoAlpZiAoV0FSTl9P Tih0dG1fdHRfaXNfYmFja2VkX3VwKHR0KSkpCj4gPiA+ID4gwqAJCXJldHVybiAtRUlOVkFMOwo+ ID4gPiA+IEBAIC0xMDk3LDI4ICsxMDk2LDcyIEBAIGxvbmcgdHRtX3Bvb2xfYmFja3VwKHN0cnVj dCB0dG1fcG9vbAo+ID4gPiA+ICpwb29sLAo+ID4gPiA+IHN0cnVjdCB0dG1fdHQgKnR0LAo+ID4g PiA+IMKgCWlmIChJU19FTkFCTEVEKENPTkZJR19GQVVMVF9JTkpFQ1RJT04pICYmCj4gPiA+ID4g c2hvdWxkX2ZhaWwoJmJhY2t1cF9mYXVsdF9pbmplY3QsIDEpKQo+ID4gPiA+IMKgCQludW1fcGFn ZXMgPSBESVZfUk9VTkRfVVAobnVtX3BhZ2VzLCAyKTsKPiA+ID4gPiDCoAo+ID4gPiA+IC0JZm9y IChpID0gMDsgaSA8IG51bV9wYWdlczsgKytpKSB7Cj4gPiA+ID4gLQkJczY0IHNoYW5kbGU7Cj4g PiA+ID4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhZ2VzOyBpICs9IG5wYWdlcykgewo+ID4gPiA+ ICsJCXVuc2lnbmVkIGludCBvcmRlcjsKPiA+ID4gPiArCQlwZ29mZl90IGo7Cj4gPiA+ID4gwqAK PiA+ID4gPiArCQlucGFnZXMgPSAxOwo+ID4gPiA+IMKgCQlwYWdlID0gdHQtPnBhZ2VzW2ldOwo+ ID4gPiA+IMKgCQlpZiAodW5saWtlbHkoIXBhZ2UpKQo+ID4gPiA+IMKgCQkJY29udGludWU7Cj4g PiA+ID4gwqAKPiA+ID4gPiAtCQl0dG1fcG9vbF9zcGxpdF9mb3Jfc3dhcChwb29sLCBwYWdlKTsK PiA+ID4gPiArCQkvKiBBbHJlYWR5LWhhbmRsZWQgZW50cnkgZnJvbSBhIHByZXZpb3VzCj4gPiA+ ID4gYXR0ZW1wdC4gKi8KPiA+ID4gPiArCQlpZgo+ID4gPiA+ICh1bmxpa2VseSh0dG1fYmFja3Vw X3BhZ2VfcHRyX2lzX2hhbmRsZShwYWdlKSkpCj4gPiA+ID4gKwkJCWNvbnRpbnVlOwo+ID4gPiA+ IMKgCj4gPiA+ID4gLQkJc2hhbmRsZSA9IHR0bV9iYWNrdXBfYmFja3VwX3BhZ2UoYmFja3VwLCBw YWdlLAo+ID4gPiA+IGZsYWdzLT53cml0ZWJhY2ssIGksCj4gPiA+ID4gLQkJCQkJCSBnZnAsCj4g PiA+ID4gYWxsb2NfZ2ZwKTsKPiA+ID4gPiAtCQlpZiAoc2hhbmRsZSA8IDApIHsKPiA+ID4gPiAt CQkJLyogV2UgYWxsb3cgcGFydGlhbGx5IHNocnVua2VuIHR0cyAqLwo+ID4gPiA+IC0JCQlyZXQg PSBzaGFuZGxlOwo+ID4gPiA+ICsJCW9yZGVyID0gdHRtX3Bvb2xfcGFnZV9vcmRlcihwb29sLCBw YWdlKTsKPiA+ID4gPiArCQlucGFnZXMgPSAxVUwgPDwgb3JkZXI7Cj4gPiA+ID4gKwo+ID4gPiA+ ICsJCS8qCj4gPiA+ID4gKwkJICogQmFjayB1cCB0aGUgY29tcG91bmQgYXRvbWljYWxseSBhdCBp dHMgbmF0aXZlCj4gPiA+ID4gb3JkZXIuIElmCj4gPiA+ID4gKwkJICogZmF1bHQgaW5qZWN0aW9u IHRydW5jYXRlZCBudW1fcGFnZXMgbWlkLQo+ID4gPiA+IGNvbXBvdW5kLAo+ID4gPiA+IHNraXAK PiA+ID4gPiArCQkgKiB0aGUgcGFydGlhbCB0YWlsIHJhdGhlciB0aGFuIHNwbGl0dGluZy4KPiA+ ID4gPiArCQkgKi8KPiA+ID4gPiArCQlpZiAodW5saWtlbHkoaSArIG5wYWdlcyA+IG51bV9wYWdl cykpCj4gPiA+ID4gwqAJCQlicmVhazsKPiA+ID4gPiArCj4gPiA+ID4gKwkJZm9yIChqID0gMDsg aiA8IG5wYWdlczsgKytqKSB7Cj4gPiA+ID4gKwkJCXVuc2lnbmVkIGxvbmcgaGFuZGxlOwo+ID4g PiA+ICsJCQlzNjQgc2hhbmRsZTsKPiA+ID4gPiArCj4gPiA+ID4gKwkJCWlmIChJU19FTkFCTEVE KENPTkZJR19GQVVMVF9JTkpFQ1RJT04pCj4gPiA+ID4gJiYKPiA+ID4gPiArCQkJwqDCoMKgIHNo b3VsZF9mYWlsKCZiYWNrdXBfZmF1bHRfaW5qZWN0LAo+ID4gPiA+IDEpKQo+ID4gPiA+ICsJCQkJ c2hhbmRsZSA9IC0xOwo+ID4gPiA+ICsJCQllbHNlCj4gPiA+ID4gKwkJCQlzaGFuZGxlID0KPiA+ ID4gPiB0dG1fYmFja3VwX2JhY2t1cF9wYWdlKGJhY2t1cCwgcGFnZSArIGosCj4gPiA+ID4gKwkJ CQkJCQkJCj4gPiA+ID4gZmxhZ3MtPndyaXRlYmFjaywKPiA+ID4gPiArCQkJCQkJCQkKPiA+ID4g PiBpICsKPiA+ID4gPiBqLCBnZnAsCj4gPiA+ID4gKwkJCQkJCQkJCj4gPiA+ID4gYWxsb2NfZ2Zw KTsKPiA+ID4gPiArCj4gPiA+ID4gKwkJCWlmICh1bmxpa2VseShzaGFuZGxlIDwgMCkpIHsKPiA+ ID4gPiArCQkJCXBnb2ZmX3QgazsKPiA+ID4gPiArCj4gPiA+ID4gKwkJCQlyZXQgPSBzaGFuZGxl Owo+ID4gPiA+ICsJCQkJLyoKPiA+ID4gPiArCQkJCSAqIFJvbGwgYmFjazogZHJvcCB0aGUgaGFu ZGxlcwo+ID4gPiA+IHdlCj4gPiA+ID4ganVzdCB3cm90ZQo+ID4gPiA+ICsJCQkJICogYW5kIHJl c3RvcmUgdGhlIG9yaWdpbmFsIHBhZ2UKPiA+ID4gPiBwb2ludGVycyBzbwo+ID4gPiA+ICsJCQkJ ICogdGhlIGNvbXBvdW5kIHJlbWFpbnMgaW50YWN0Cj4gPiA+ID4gYW5kCj4gPiA+ID4gbWF5IGJl Cj4gPiA+ID4gKwkJCQkgKiByZXRyaWVkIGxhdGVyLgo+ID4gPiA+ICsJCQkJICovCj4gPiA+ID4g KwkJCQlmb3IgKGsgPSAwOyBrIDwgajsgKytrKSB7Cj4gPiA+ID4gKwkJCQkJaGFuZGxlID0KPiA+ ID4gPiB0dG1fYmFja3VwX3BhZ2VfcHRyX3RvX2hhbmRsZSh0dC0+cGFnZXNbaSArIGtdKTsKPiA+ ID4gPiArCQkJCQl0dG1fYmFja3VwX2Ryb3AoYmFja3VwLAo+ID4gPiA+IGhhbmRsZSk7Cj4gPiA+ ID4gKwkJCQkJdHQtPnBhZ2VzW2kgKyBrXSA9IHBhZ2UKPiA+ID4gPiArIGs7Cj4gPiA+ID4gKwkJ CQl9Cj4gPiA+ID4gKwo+ID4gPiA+ICsJCQkJZ290byBvdXQ7Cj4gPiA+ID4gKwkJCX0KPiA+ID4g PiArCQkJaGFuZGxlID0gc2hhbmRsZTsKPiA+ID4gPiArCQkJdHQtPnBhZ2VzW2kgKyBqXSA9Cj4g PiA+ID4gdHRtX2JhY2t1cF9oYW5kbGVfdG9fcGFnZV9wdHIoc2hhbmRsZSk7Cj4gPiA+ID4gwqAJ CX0KPiA+ID4gPiAtCQloYW5kbGUgPSBzaGFuZGxlOwo+ID4gPiA+IC0JCXR0LT5wYWdlc1tpXSA9 Cj4gPiA+ID4gdHRtX2JhY2t1cF9oYW5kbGVfdG9fcGFnZV9wdHIoaGFuZGxlKTsKPiA+ID4gPiAt CQlfX2ZyZWVfcGFnZXNfZ3B1X2FjY291bnQocGFnZSwgMCwgZmFsc2UpOwo+ID4gPiA+IC0JCXNo cnVua2VuKys7Cj4gPiA+ID4gKwo+ID4gPiA+ICsJCS8qIENvbXBvdW5kIGZ1bGx5IGJhY2tlZCB1 cDsgZnJlZSBhdCBuYXRpdmUKPiA+ID4gPiBvcmRlci4KPiA+ID4gPiAqLwo+ID4gPiA+ICsJCXBh Z2UtPnByaXZhdGUgPSAwOwo+ID4gPiA+ICsJCV9fZnJlZV9wYWdlc19ncHVfYWNjb3VudChwYWdl LCBvcmRlciwgZmFsc2UpOwo+ID4gPiA+ICsJCXNocnVua2VuICs9IG5wYWdlczsKPiA+ID4gPiDC oAl9Cj4gPiA+ID4gwqAKPiA+ID4gPiArb3V0Ogo+ID4gPiA+IMKgCXJldHVybiBzaHJ1bmtlbiA/ IHNocnVua2VuIDogcmV0Owo+ID4gPiA+IMKgfQo+ID4gPiA+IMKgCg==