Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rS6GN-00BPdv-Uk for pgsql-hackers@arkaria.postgresql.org; Tue, 23 Jan 2024 02:11:45 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1rS6GK-008K6q-Dz for pgsql-hackers@arkaria.postgresql.org; Tue, 23 Jan 2024 02:11:40 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rS6GJ-008K6i-QW for pgsql-hackers@lists.postgresql.org; Tue, 23 Jan 2024 02:11:40 +0000 Received: from esa12.fujitsucc.c3s2.iphmx.com ([216.71.156.125]) by magus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rS6GF-003DZh-VT for pgsql-hackers@lists.postgresql.org; Tue, 23 Jan 2024 02:11:39 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=fujitsu.com; i=@fujitsu.com; q=dns/txt; s=fj1; t=1705975896; x=1737511896; h=from:to:cc:subject:date:message-id:references: in-reply-to:mime-version; bh=pj4eox1YZk2UHk6LI7x9U5aUCV0xAePGjSP+ZZOOfGk=; b=V+AceiE1V3XKqBCgI2X8nfAFycfd6v/05SDi8Xm8sl4GIkJy/JYkHRDE A14U27AtvJTeENNcOdfe3qBWmA2Cu8QMN1aG+9eVlqKicMzNs6B5k8H1u BF+RenG+3SO8FymHVXApDG3Eew0pHWbFgFx0c1nfwaFXbfoHvwQXDTAhf TVUc+PCU+ys7qPETLAephO4lK3RlGpJSyGeo+KJmObfYvS35S341Bahy5 gLuqBNXRcScrcmTNUh/vDvyNdTqrYzGr54Bjwit3+brDtNuW6bA/iKprx JKw+hJ9PLAyKhihUItpn+soGJTJRjPldiAq5Nk+PZ5wQaYvraUpcFufF2 A==; X-IronPort-AV: E=McAfee;i="6600,9927,10961"; a="109136249" X-IronPort-AV: E=Sophos;i="6.05,213,1701097200"; d="scan'208,223";a="109136249" Received: from mail-os0jpn01lp2104.outbound.protection.outlook.com (HELO JPN01-OS0-obe.outbound.protection.outlook.com) ([104.47.23.104]) by ob1.fujitsucc.c3s2.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Jan 2024 11:11:31 +0900 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GHvzyy8KuG/ZKYMs26tilVuSWx2wFxcFyBVlr1vUgfVvKwlK3rb9biXH3qyhMJYCrN4KCklFia6pS7fG0HD03hl7Sl0Q2KDt2N1d0lCPwGatv6PgwrOzeKyiIy8RQ4eWQkmnpbeStXIB6ECxcYG9j9jiox2KJcahnmJb+Zz5LdeeOQTvEbQTmO3PQuQh6DkqVjoNlMvlJJs3+zJ3FcXxqI471j+dw04Hu72JXYE6mh4q+oydIQPDbPUPIYF57QjR/QDnM5535Gd2FSPetdFxGiDrAJtgXEdya8WRbG1LCxXW6C8fYkXDu1fKBSIAZK25Z+pLnkSdtAzYcgQDZUZvsw== 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=Hv6xYa67zmzjcFeHaEmm0ImHKix9YsQDJ0mFSKdQy4U=; b=YW6DiV1hgSq1+NvPRzxGWxDTAMK7j2JifQKwM17vORyXaGqmMMIyaGiQQX0iTj7LVY8+KKwMpuMBWaGipGMxjd4Dt+2FoyF8Q7Gs3ivlJ12/q59AaLc5FckN5SOEZPrjmCzSOJXIHw2KldH7uEEh9QpRklDDu8ctvK+JhOCZUmP3d0iLFvGNn48/FBOkzAlHvvL/xc77AuaLI4Y22noVkiL+JckqSnliQn/Hgn0UqAFLE7qtGMR6Ar5wnleRDG432gCYlIVtiQlBytglra1HoOWvKEFD7e/wvyPv23P1Cv40IlAUeTnf6Hgq5oJkU4xH+YsIsawUYBPvP2qOeqWd7Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=fujitsu.com; dmarc=pass action=none header.from=fujitsu.com; dkim=pass header.d=fujitsu.com; arc=none Received: from TY3PR01MB9889.jpnprd01.prod.outlook.com (2603:1096:400:22b::13) by TYCPR01MB6080.jpnprd01.prod.outlook.com (2603:1096:400:4e::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7228.20; Tue, 23 Jan 2024 02:11:27 +0000 Received: from TY3PR01MB9889.jpnprd01.prod.outlook.com ([fe80::cd87:60f9:f281:5d81]) by TY3PR01MB9889.jpnprd01.prod.outlook.com ([fe80::cd87:60f9:f281:5d81%5]) with mapi id 15.20.7228.020; Tue, 23 Jan 2024 02:11:27 +0000 From: "Hayato Kuroda (Fujitsu)" To: 'Shlok Kyal' , "pgsql-hackers@lists.postgresql.org" CC: vignesh C , Michael Paquier , Peter Eisentraut , Andres Freund , Ashutosh Bapat , Amit Kapila , Euler Taveira Subject: RE: speed up a logical replica setup Thread-Topic: speed up a logical replica setup Thread-Index: AQHYJxwqCwVDEK8rxk6UuFJmWEa5OLBaerWAgBix/4CAACTuAIACleiAgACOjoCAKWVqAIApDNiAgARDvICAAC3UgIAADN4AgABJ6wCAAUerAIAHtdWAgAFvhACAAEZbgIAAWW2AgACrngCAAM0jQIAPei1wgAAshICAARdVEA== Date: Tue, 23 Jan 2024 02:11:26 +0000 Message-ID: References: <5ac50071-f2ed-4ace-a8fd-b892cffd33eb@www.fastmail.com> <4710d895-689a-4ae6-b8e3-344286dbf970@app.fastmail.com> <96e3b739-d63d-4d35-90a3-7869465b7167@eisentraut.org> <2736443c-58e3-42df-8cc4-8c66106e3da5@app.fastmail.com> In-Reply-To: Accept-Language: ja-JP, en-US Content-Language: ja-JP X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: =?utf-8?B?TVNJUF9MYWJlbF9hNzI5NWNjMS1kMjc5LTQyYWMtYWI0ZC0zYjBmNGZlY2Uw?= =?utf-8?B?NTBfRW5hYmxlZD10cnVlOyBNU0lQX0xhYmVsX2E3Mjk1Y2MxLWQyNzktNDJh?= =?utf-8?B?Yy1hYjRkLTNiMGY0ZmVjZTA1MF9TZXREYXRlPTIwMjQtMDEtMjNUMDI6MTE6?= =?utf-8?B?MjVaOyBNU0lQX0xhYmVsX2E3Mjk1Y2MxLWQyNzktNDJhYy1hYjRkLTNiMGY0?= =?utf-8?B?ZmVjZTA1MF9NZXRob2Q9U3RhbmRhcmQ7IE1TSVBfTGFiZWxfYTcyOTVjYzEt?= =?utf-8?B?ZDI3OS00MmFjLWFiNGQtM2IwZjRmZWNlMDUwX05hbWU9RlVKSVRTVS1SRVNU?= =?utf-8?B?UklDVEVE4oCLOyBNU0lQX0xhYmVsX2E3Mjk1Y2MxLWQyNzktNDJhYy1hYjRk?= =?utf-8?B?LTNiMGY0ZmVjZTA1MF9TaXRlSWQ9YTE5ZjEyMWQtODFlMS00ODU4LWE5ZDgt?= =?utf-8?B?NzM2ZTI2N2ZkNGM3OyBNU0lQX0xhYmVsX2E3Mjk1Y2MxLWQyNzktNDJhYy1h?= =?utf-8?B?YjRkLTNiMGY0ZmVjZTA1MF9BY3Rpb25JZD03MTkzNzA4Ny05MjVhLTQ4NjUt?= =?utf-8?B?YWE1Ny00ZjI1OTljMTI1OTA7IE1TSVBfTGFiZWxfYTcyOTVjYzEtZDI3OS00?= =?utf-8?B?MmFjLWFiNGQtM2IwZjRmZWNlMDUwX0NvbnRlbnRCaXRzPTA=?= authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=fujitsu.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: TY3PR01MB9889:EE_|TYCPR01MB6080:EE_ x-ms-office365-filtering-correlation-id: c24f3ac3-1149-4292-88e9-08dc1bb89b29 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: zlx9IIDM9PO3omHqhrPII85tM5iceLp2WWKOxLcgsg/juvE1GqeHIC4tqpWEgzrBSP/kJj0nTnSK2M1pCJtxKsH8LMu3DPE0vK8C2H92qelZ2uwZATBUGYm5aOH5OcHtES/6Ugt2s7LUftkL8oZBnDgIUfYZwijfAJGf5arYdCauSiiX5rhHZm007ZD0JjgG3EiucTkOc/xhslljTQNAACl4aF+zP1aIYbUEdLnmzC7c2VjfWWACyVCccbFqkv58acHmX41VWFHxelMKPC2726ZWgHPi5pvpCSzjJOllfPX49XWn2jVulzeHV2vsPvP8QScrt9Z0hq19GVksKwVse6J4IfiW613RTjk16eYyjh9inFhkuIIkwmLggo20cEw/sdL182DMU1kfekxkInGOeTxXPgofaMLBp0wgCnmSZtJLdMCfshDzxudUwfArgD8YGR5n+/0ynYR2mWwFYnOtkpflwS91G1s1Sed2oXVWHyTDmFKPyir4OP/qvp5wQ0MABzmAfYW9qJ7nKQHmAuWbhLUm2yQUmalYYJFXLKipKrLy0Ifj6GxKGoVms+nEr947dfXNBkDHbGYIE2i20lIAAINfwcWiDc9qR5RhTy1T6yg= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY3PR01MB9889.jpnprd01.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(396003)(346002)(376002)(136003)(39860400002)(366004)(230922051799003)(1590799021)(1800799012)(186009)(64100799003)(451199024)(55016003)(83380400001)(26005)(9686003)(52536014)(5660300002)(558084003)(6506007)(122000001)(71200400001)(7696005)(38100700002)(82960400001)(99936003)(478600001)(76116006)(64756008)(54906003)(66946007)(66446008)(86362001)(66476007)(66556008)(316002)(1580799018)(8936002)(8676002)(4326008)(85182001)(33656002)(38070700009)(2906002)(41300700001)(110136005);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?SFJlVW9sQVUySkQvMzA1eGZJc01FL3M3WERxNVZaL3piNCt6Y1pTZk8yY3Jn?= =?utf-8?B?d0pwZTJWWVhBVE9RSzJlejJQdk52L01OSExnTm9wQlkyREI0bEVia0pyUzVP?= =?utf-8?B?MHN5U01BYXBFd3VHalJibHErZVdFVWc2REhYQkgyai9uTUtiUkcxc1Vid1Rk?= =?utf-8?B?UGFkb1p4NWs1a01mWjdUbmN0ZTMxUFJ5UC9NRmEzZHVwa25MTjVkbHViQlBw?= =?utf-8?B?SVZIaEcxazh0VHBOMnN4TzNZWWdzZS9QK2o0UjU3eE5ldW5McVB3ZU9FQWda?= =?utf-8?B?cUNZd2hELy9OT2xKeGxUNzZ1cGhnaFpIVW1SZCt6YmVORVZ6VUNuRHRKajBx?= =?utf-8?B?WmlFS3A1akpWRWEzclpoRThtMHJsakorQllrdFk1QzZ6TlBnaU1POG8wWldx?= =?utf-8?B?NTEvL29FRThVSHRMN0xSUG5MeC9JbzhIeUs2Y1NaMXFsclY0SWVwUFJaU1h3?= =?utf-8?B?eVJHRXpCSENjRHZjMjVwVWFHb3c1U1dDbFRrYWF3dnNnSFQ2UVlpMThzMHBx?= =?utf-8?B?Wno1N0NkYXdqVExuSmFPbDF0aGRZOW9KY3hLYUhTNSt1eUJtMUQ3VnJHaDdX?= =?utf-8?B?UVpOck41OWY4eGVvMDBBdGlDTnJ6dkVuMzdQOHhhczFkS1l6ek1mMFk1VE4y?= =?utf-8?B?amNmTUZYSisxRjJ2Z3R4WnNlalpya1J0WGdNc1Z4ZUVpaW55UGJjMVpnTkM5?= =?utf-8?B?amFmRjRKTlZCa0FCMnBCZktUTlpmNlhJRGFXdFNFZGVwU29rUXF3eDR4VGIz?= =?utf-8?B?czE5Zjk5NVpXSnJJcjRDUkM4WVI1SVJaRFJoTVlzT2Z1UlREcmpQMTU3SmxP?= =?utf-8?B?V3FGRTdIbkZEc3RkSFBJdVpOU2VSSE5mT1hUSUlXMklxS1NwVUNhYVovaFo1?= =?utf-8?B?dUVvNURTTDBhMDFWZ2orRVhQT3E4NzNlcHBNVFE0Z2p3Q2xpY2lBeFRhMldK?= =?utf-8?B?eTFnbnd1S2ZBWVJxNExYMzBDRkU1OXlFUmp1eEdleVR5OG9MU3hsaVIvMTJV?= =?utf-8?B?ZlMyUzdOejE3SkpYSlN3SWE0Q2JPRFRWcGREeDhiSzFKUjdYTkFmbkhISmhV?= =?utf-8?B?TGl5RHNKcEdFSmdqYjdmdm9zY2NpbGFFdVVYVnBiNGtiWGZ5MkIwOVJxQng5?= =?utf-8?B?NEVLRHIxSXNybmpOSmpHRkluNGhkSjI0M3hYRVpRWFpiOVRtMXJpT2R1V01I?= =?utf-8?B?cnQweXZLdGFObzA3aFBtSEZnaGp5bWNvQ0hOQ1ZnZjd1MTB0MDBFVU9ROEdC?= =?utf-8?B?SmsrV2NVemRoWkozWHJ0b0VDWS9FaWFHYUtHc3RvRk9tbWtYanpidHlxTVJS?= =?utf-8?B?S0NaUmE3VVoxWEhOeGpqTWI4ajRPa05mcCtlc09kbXZsY21OWEhVVzVNRCtp?= =?utf-8?B?S0tBam02eGxVNk9zVkdaL1lHTzE5N0Z0eHZ6Yll5MjdpV1hLWFpRdW0valVa?= =?utf-8?B?YjlhWVBOWUNmSHpETWh2cnZEVzgyZXVROXludit5OFZUVkNhOEZRNkpKWENh?= =?utf-8?B?TFFzUVpGUVRMK1p6VnJCV2NyakFRbzJ5SW0vcjlPZFIzczFtOEtraTRrUSs2?= =?utf-8?B?WWUyaDRsR2FFNG95VmhNc0lCMnR0Z291Ull6QTE0NWtvUThpZ1pjQXM0Z2xZ?= =?utf-8?B?WnVSWjBQdEdQUi80akFNdmVPT09RTlB3cjM5UUhwVHZjaVJ2aGt4Z1A3MEpv?= =?utf-8?B?T3dOV1FrazluK0pHaXhwNkxRblpJNTBwSmJlNXoydjhNQkZYbG1ScWEyS1lm?= =?utf-8?B?eVNxTXBSQVA2aTV4Q3lPSTZ1RjdqZ0llbG9xWEZBTG12dGRNYXJDWWhwdVFu?= =?utf-8?B?Y1lvTHJTYnVBbE0yWkwycFNRL08xZGhtZTlZQXlMRmptNVFhR2EzUTk5VU9z?= =?utf-8?B?VnRWeUZJKy9xVm5oRG1LczR1M0pjSUNUL1htVlVuWU80WVBCRFZvaGJpTC96?= =?utf-8?B?ZXZMSGZGWkREc3gybm9wWkhLbVJNT292ZVdLZmdLSStTaGpvVXdxbWRKc0pk?= =?utf-8?B?c2hjc2hDNXhvS3ZzM05EaXhBd01uYjZKaTZsc2VmYjU0RFVNWFZxMStoWDVl?= =?utf-8?B?N2RUTnVaS3REMlg5cHgzR0VMZkZwL0wvL2kvUkpRbCtNMUhGNU5yeDB2a2k5?= =?utf-8?B?UHF3YXRUYmhJZzZKRFVJbFJwbEdyczlneUZKVkQ1ajJ1WEpsbnBveHoyeTRr?= =?utf-8?B?N2c9PQ==?= Content-Type: multipart/mixed; boundary="_004_TY3PR01MB98890AB22AECA2F503EB7858F5742TY3PR01MB9889jpnp_" MIME-Version: 1.0 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: UoVyYWZ8mgTcHRSx6kVWy4XU4APQYSyWn2QzBIRaXwr0GarCyCeTTg9fCWDqBgbiLUMdRlc9cCTRAERv0On7hYjsYMexIlAXAqTRLfpsBiAt5CbHdM26fjUte4SodeBFZUmaRZRXB1K9O12755GO1b/7qfspTtT0M/DkxcCEB2WbRj+qoIw9XougVMy4KEW7BlTgBSBA6UojBnouQtfoyhdq64NgqL3scJx7zuvhSvdC1amlc7zJPaVexJnjpO2IhQ+6ouYU8auHIPfVnsS2B+NWOafmUtZ4vBm7Dxwr64pmAelNnqsvv76Ov3PTivo89cGOKWqrseWXTut3WmYeTeRh24Jw0E3Hgi0Y0CmUl9ZNEEIyWLSkB9lOe6iyVoIXXw14gwW0JGy6yAPdSZkHL5H8rRPNxR0qYIYJtIF9GooUYgWzLIAc1vQhJVduSJ7b/fAiPiO80APJDptl+cjG3bhC1oU3tmvuNhrIOge9ET4Q8Sv/kBpP+D8n5gOe/Jn+Go3EoS4GsORWu4w66da1/gEAB4g91A8YVMenh0v0TCAZ754X3qhrYPHUoH5PQ6R1StrE7dZ0h/XfycTuTr3yR+bCvlOoMxs2MWItORN2hJHjNJTEqq/MpievHfjWEZuW X-OriginatorOrg: fujitsu.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TY3PR01MB9889.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: c24f3ac3-1149-4292-88e9-08dc1bb89b29 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Jan 2024 02:11:27.0519 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a19f121d-81e1-4858-a9d8-736e267fd4c7 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: PY6he1fIc5gjjyfdOdCak5eqrAGWRqPSbltzrZlJX+YD2zjyRwwWJHiy6MtIf7XCwtDKpVokO+Sx/w0jHnyfBubc7Wc57MuEbB2h7lyXjNE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCPR01MB6080 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_004_TY3PR01MB98890AB22AECA2F503EB7858F5742TY3PR01MB9889jpnp_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 RGVhciBoYWNrZXJzLA0KDQo+IFdlIGZpeGVkIHNvbWUgb2YgdGhlIGNvbW1lbnRzIHBvc3RlZCBp biB0aGUgdGhyZWFkLiBXZSBoYXZlIGNyZWF0ZWQgaXQNCj4gYXMgdG9wLXVwIHBhdGNoIDAwMDIg YW5kIDAwMDMuDQoNCkkgZm91bmQgdGhhdCB0aGUgQ0Zib3QgcmFpc2VkIGFuIEVSUk9SLiBBbHNv LCBpdCBtYXkgbm90IHdvcmsgd2VsbCBpbiBjYXNlDQpvZiBwcm9kdWN0aW9uIGJ1aWxkLg0KUFNB IHRoZSBmaXhlZCBwYXRjaCBzZXQuDQoNCg0KQmVzdCBSZWdhcmRzLA0KSGF5YXRvIEt1cm9kYQ0K RlVKSVRTVSBMSU1JVEVEDQoNCg== --_004_TY3PR01MB98890AB22AECA2F503EB7858F5742TY3PR01MB9889jpnp_ Content-Type: application/octet-stream; name="v7-0001-Creates-a-new-logical-replica-from-a-standby-serv.patch" Content-Description: v7-0001-Creates-a-new-logical-replica-from-a-standby-serv.patch Content-Disposition: attachment; filename="v7-0001-Creates-a-new-logical-replica-from-a-standby-serv.patch"; size=68581; creation-date="Tue, 23 Jan 2024 02:09:25 GMT"; modification-date="Tue, 23 Jan 2024 02:11:26 GMT" Content-Transfer-Encoding: base64 RnJvbSA3NzNiNmQxODc4OTJhN2UwYWVhMGVkZjE1NDdiODZhZDJiMmM4ZTJmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBFdWxlciBUYXZlaXJhIDxldWxlci50YXZlaXJhQGVudGVycHJp c2VkYi5jb20+CkRhdGU6IE1vbiwgNSBKdW4gMjAyMyAxNDozOTo0MCAtMDQwMApTdWJqZWN0OiBb UEFUQ0ggdjcgMS8zXSBDcmVhdGVzIGEgbmV3IGxvZ2ljYWwgcmVwbGljYSBmcm9tIGEgc3RhbmRi eSBzZXJ2ZXIKCkEgbmV3IHRvb2wgY2FsbGVkIHBnX3N1YnNjcmliZXIgY2FuIGNvbnZlcnQgYSBw aHlzaWNhbCByZXBsaWNhIGludG8gYQpsb2dpY2FsIHJlcGxpY2EuIEl0IHJ1bnMgb24gdGhlIHRh cmdldCBzZXJ2ZXIgYW5kIHNob3VsZCBiZSBhYmxlIHRvCmNvbm5lY3QgdG8gdGhlIHNvdXJjZSBz ZXJ2ZXIgKHB1Ymxpc2hlcikgYW5kIHRoZSB0YXJnZXQgc2VydmVyCihzdWJzY3JpYmVyKS4KClRo ZSBjb252ZXJzaW9uIHJlcXVpcmVzIGEgZmV3IHN0ZXBzLiBDaGVjayBpZiB0aGUgdGFyZ2V0IGRh dGEgZGlyZWN0b3J5CmhhcyB0aGUgc2FtZSBzeXN0ZW0gaWRlbnRpZmllciB0aGFuIHRoZSBzb3Vy Y2UgZGF0YSBkaXJlY3RvcnkuIFN0b3AgdGhlCnRhcmdldCBzZXJ2ZXIgaWYgaXQgaXMgcnVubmlu ZyBhcyBhIHN0YW5kYnkgc2VydmVyLiBDcmVhdGUgb25lCnJlcGxpY2F0aW9uIHNsb3QgcGVyIHNw ZWNpZmllZCBkYXRhYmFzZSBvbiB0aGUgc291cmNlIHNlcnZlci4gT25lCmFkZGl0aW9uYWwgcmVw bGljYXRpb24gc2xvdCBpcyBjcmVhdGVkIGF0IHRoZSBlbmQgdG8gZ2V0IHRoZSBjb25zaXN0ZW50 CkxTTiAoVGhpcyBjb25zaXN0ZW50IExTTiB3aWxsIGJlIHVzZWQgYXMgKGEpIGEgc3RvcHBpbmcg cG9pbnQgZm9yIHRoZQpyZWNvdmVyeSBwcm9jZXNzIGFuZCAoYikgYSBzdGFydGluZyBwb2ludCBm b3IgdGhlIHN1YnNjcmlwdGlvbnMpLiBXcml0ZQpyZWNvdmVyeSBwYXJhbWV0ZXJzIGludG8gdGhl IHRhcmdldCBkYXRhIGRpcmVjdG9yeSBhbmQgc3RhcnQgdGhlIHRhcmdldApzZXJ2ZXIgKFdhaXQg dW50aWwgdGhlIHRhcmdldCBzZXJ2ZXIgaXMgcHJvbW90ZWQpLiBDcmVhdGUgb25lCnB1YmxpY2F0 aW9uIChGT1IgQUxMIFRBQkxFUykgcGVyIHNwZWNpZmllZCBkYXRhYmFzZSBvbiB0aGUgc291cmNl CnNlcnZlci4gQ3JlYXRlIG9uZSBzdWJzY3JpcHRpb24gcGVyIHNwZWNpZmllZCBkYXRhYmFzZSBv biB0aGUgdGFyZ2V0CnNlcnZlciAoVXNlIHJlcGxpY2F0aW9uIHNsb3QgYW5kIHB1YmxpY2F0aW9u IGNyZWF0ZWQgaW4gYSBwcmV2aW91cyBzdGVwLgpEb24ndCBlbmFibGUgdGhlIHN1YnNjcmlwdGlv bnMgeWV0KS4gU2V0cyB0aGUgcmVwbGljYXRpb24gcHJvZ3Jlc3MgdG8KdGhlIGNvbnNpc3RlbnQg TFNOIHRoYXQgd2FzIGdvdCBpbiBhIHByZXZpb3VzIHN0ZXAuIEVuYWJsZSB0aGUKc3Vic2NyaXB0 aW9uIGZvciBlYWNoIHNwZWNpZmllZCBkYXRhYmFzZSBvbiB0aGUgdGFyZ2V0IHNlcnZlci4gUmVt b3ZlCnRoZSBhZGRpdGlvbmFsIHJlcGxpY2F0aW9uIHNsb3QgdGhhdCB3YXMgdXNlZCB0byBnZXQg dGhlIGNvbnNpc3RlbnQgTFNOLgpTdG9wIHRoZSB0YXJnZXQgc2VydmVyLiBDaGFuZ2UgdGhlIHN5 c3RlbSBpZGVudGlmaWVyIGZyb20gdGhlIHRhcmdldApzZXJ2ZXIuCgpEZXBlbmRpbmcgb24geW91 ciB3b3JrbG9hZCBhbmQgZGF0YWJhc2Ugc2l6ZSwgY3JlYXRpbmcgYSBsb2dpY2FsIHJlcGxpY2EK Y291bGRuJ3QgYmUgYW4gb3B0aW9uIGR1ZSB0byByZXNvdXJjZSBjb25zdHJhaW50cyAoV0FMIGJh Y2tsb2cgc2hvdWxkIGJlCmF2YWlsYWJsZSB1bnRpbCBhbGwgdGFibGUgZGF0YSBpcyBzeW5jaHJv bml6ZWQpLiBUaGUgaW5pdGlhbCBkYXRhIGNvcHkKYW5kIHRoZSByZXBsaWNhdGlvbiBwcm9ncmVz cyB0ZW5kcyB0byBiZSBmYXN0ZXIgb24gYSBwaHlzaWNhbCByZXBsaWNhLgpUaGUgcHVycG9zZSBv ZiB0aGlzIHRvb2wgaXMgdG8gc3BlZWQgdXAgYSBsb2dpY2FsIHJlcGxpY2Egc2V0dXAuCi0tLQog ZG9jL3NyYy9zZ21sL3JlZi9hbGxmaWxlcy5zZ21sICAgICAgICAgICAgICAgIHwgICAgMSArCiBk b2Mvc3JjL3NnbWwvcmVmL3BnX3N1YnNjcmliZXIuc2dtbCAgICAgICAgICAgfCAgMjg0ICsrKwog ZG9jL3NyYy9zZ21sL3JlZmVyZW5jZS5zZ21sICAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBz cmMvYmluL3BnX2Jhc2ViYWNrdXAvLmdpdGlnbm9yZSAgICAgICAgICAgICAgfCAgICAxICsKIHNy Yy9iaW4vcGdfYmFzZWJhY2t1cC9NYWtlZmlsZSAgICAgICAgICAgICAgICB8ICAgIDggKy0KIHNy Yy9iaW4vcGdfYmFzZWJhY2t1cC9tZXNvbi5idWlsZCAgICAgICAgICAgICB8ICAgMTkgKwogc3Jj L2Jpbi9wZ19iYXNlYmFja3VwL3BnX3N1YnNjcmliZXIuYyAgICAgICAgIHwgMTY1NyArKysrKysr KysrKysrKysrKwogc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3QvMDQwX3BnX3N1YnNjcmliZXIucGwg IHwgICA0NCArCiAuLi4vdC8wNDFfcGdfc3Vic2NyaWJlcl9zdGFuZGJ5LnBsICAgICAgICAgICAg fCAgMTM5ICsrCiA5IGZpbGVzIGNoYW5nZWQsIDIxNTMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlv bigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRvYy9zcmMvc2dtbC9yZWYvcGdfc3Vic2NyaWJlci5z Z21sCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3BnX3N1YnNjcmli ZXIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfYmFzZWJhY2t1cC90LzA0MF9wZ19z dWJzY3JpYmVyLnBsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3Qv MDQxX3BnX3N1YnNjcmliZXJfc3RhbmRieS5wbAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9y ZWYvYWxsZmlsZXMuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvYWxsZmlsZXMuc2dtbAppbmRleCA0 YTQyOTk5YjE4Li4zODYyYzk3NmQ3IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2FsbGZp bGVzLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9hbGxmaWxlcy5zZ21sCkBAIC0yMTQsNiAr MjE0LDcgQEAgQ29tcGxldGUgbGlzdCBvZiB1c2FibGUgc2dtbCBzb3VyY2UgZmlsZXMgaW4gdGhp cyBkaXJlY3RvcnkuCiA8IUVOVElUWSBwZ1Jlc2V0d2FsICAgICAgICAgU1lTVEVNICJwZ19yZXNl dHdhbC5zZ21sIj4KIDwhRU5USVRZIHBnUmVzdG9yZSAgICAgICAgICBTWVNURU0gInBnX3Jlc3Rv cmUuc2dtbCI+CiA8IUVOVElUWSBwZ1Jld2luZCAgICAgICAgICAgU1lTVEVNICJwZ19yZXdpbmQu c2dtbCI+Cis8IUVOVElUWSBwZ1N1YnNjcmliZXIgICAgICAgU1lTVEVNICJwZ19zdWJzY3JpYmVy LnNnbWwiPgogPCFFTlRJVFkgcGdWZXJpZnlCYWNrdXAgICAgIFNZU1RFTSAicGdfdmVyaWZ5YmFj a3VwLnNnbWwiPgogPCFFTlRJVFkgcGd0ZXN0ZnN5bmMgICAgICAgIFNZU1RFTSAicGd0ZXN0ZnN5 bmMuc2dtbCI+CiA8IUVOVElUWSBwZ3Rlc3R0aW1pbmcgICAgICAgU1lTVEVNICJwZ3Rlc3R0aW1p bmcuc2dtbCI+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX3N1YnNjcmliZXIuc2dt bCBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfc3Vic2NyaWJlci5zZ21sCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAuLjU1MzE4NWMzNWYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2Mv c3JjL3NnbWwvcmVmL3BnX3N1YnNjcmliZXIuc2dtbApAQCAtMCwwICsxLDI4NCBAQAorPCEtLQor ZG9jL3NyYy9zZ21sL3JlZi9wZ19zdWJzY3JpYmVyLnNnbWwKK1Bvc3RncmVTUUwgZG9jdW1lbnRh dGlvbgorLS0+CisKKzxyZWZlbnRyeSBpZD0iYXBwLXBnc3Vic2NyaWJlciI+CisgPGluZGV4dGVy bSB6b25lPSJhcHAtcGdzdWJzY3JpYmVyIj4KKyAgPHByaW1hcnk+cGdfc3Vic2NyaWJlcjwvcHJp bWFyeT4KKyA8L2luZGV4dGVybT4KKworIDxyZWZtZXRhPgorICA8cmVmZW50cnl0aXRsZT48YXBw bGljYXRpb24+cGdfc3Vic2NyaWJlcjwvYXBwbGljYXRpb24+PC9yZWZlbnRyeXRpdGxlPgorICA8 bWFudm9sbnVtPjE8L21hbnZvbG51bT4KKyAgPHJlZm1pc2NpbmZvPkFwcGxpY2F0aW9uPC9yZWZt aXNjaW5mbz4KKyA8L3JlZm1ldGE+CisKKyA8cmVmbmFtZWRpdj4KKyAgPHJlZm5hbWU+cGdfc3Vi c2NyaWJlcjwvcmVmbmFtZT4KKyAgPHJlZnB1cnBvc2U+Y3JlYXRlIGEgbmV3IGxvZ2ljYWwgcmVw bGljYSBmcm9tIGEgc3RhbmRieSBzZXJ2ZXI8L3JlZnB1cnBvc2U+CisgPC9yZWZuYW1lZGl2Pgor CisgPHJlZnN5bm9wc2lzZGl2PgorICA8Y21kc3lub3BzaXM+CisgICA8Y29tbWFuZD5wZ19zdWJz Y3JpYmVyPC9jb21tYW5kPgorICAgPGFyZyByZXA9InJlcGVhdCI+PHJlcGxhY2VhYmxlPm9wdGlv bjwvcmVwbGFjZWFibGU+PC9hcmc+CisgIDwvY21kc3lub3BzaXM+CisgPC9yZWZzeW5vcHNpc2Rp dj4KKworIDxyZWZzZWN0MT4KKyAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKyAgPHBhcmE+ CisgICA8YXBwbGljYXRpb24+cGdfc3Vic2NyaWJlcjwvYXBwbGljYXRpb24+IHRha2VzIHRoZSBw dWJsaXNoZXIgYW5kIHN1YnNjcmliZXIKKyAgIGNvbm5lY3Rpb24gc3RyaW5ncywgYSBjbHVzdGVy IGRpcmVjdG9yeSBmcm9tIGEgc3RhbmRieSBzZXJ2ZXIgYW5kIGEgbGlzdCBvZgorICAgZGF0YWJh c2UgbmFtZXMgYW5kIGl0IHNldHMgdXAgYSBuZXcgbG9naWNhbCByZXBsaWNhIHVzaW5nIHRoZSBw aHlzaWNhbAorICAgcmVjb3ZlcnkgcHJvY2Vzcy4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAg VGhlIDxhcHBsaWNhdGlvbj5wZ19zdWJzY3JpYmVyPC9hcHBsaWNhdGlvbj4gc2hvdWxkIGJlIHJ1 biBhdCB0aGUgdGFyZ2V0CisgICBzZXJ2ZXIuIFRoZSBzb3VyY2Ugc2VydmVyIChrbm93biBhcyBw dWJsaXNoZXIgc2VydmVyKSBzaG91bGQgYWNjZXB0IGxvZ2ljYWwKKyAgIHJlcGxpY2F0aW9uIGNv bm5lY3Rpb25zIGZyb20gdGhlIHRhcmdldCBzZXJ2ZXIgKGtub3duIGFzIHN1YnNjcmliZXIgc2Vy dmVyKS4KKyAgIFRoZSB0YXJnZXQgc2VydmVyIHNob3VsZCBhY2NlcHQgbG9jYWwgbG9naWNhbCBy ZXBsaWNhdGlvbiBjb25uZWN0aW9uLgorICA8L3BhcmE+CisgPC9yZWZzZWN0MT4KKworIDxyZWZz ZWN0MT4KKyAgPHRpdGxlPk9wdGlvbnM8L3RpdGxlPgorCisgICA8cGFyYT4KKyAgICA8YXBwbGlj YXRpb24+cGdfc3Vic2NyaWJlcjwvYXBwbGljYXRpb24+IGFjY2VwdHMgdGhlIGZvbGxvd2luZwor ICAgIGNvbW1hbmQtbGluZSBhcmd1bWVudHM6CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICA8 dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4tRCA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+ZGlyZWN0b3J5PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAg ICA8dGVybT48b3B0aW9uPi0tcGdkYXRhPTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5k aXJlY3Rvcnk8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4K KyAgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIHRhcmdldCBkaXJlY3RvcnkgdGhhdCBjb250YWlu cyBhIGNsdXN0ZXIgZGlyZWN0b3J5IGZyb20gYSBzdGFuZGJ5CisgICAgICAgIHNlcnZlci4KKyAg ICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwor ICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4tUCAgPHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPmNvbm5pbmZvPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+ CisgICAgICA8dGVybT48b3B0aW9uPi0tcHVibGlzaGVyLWNvbm5pbmZvPTxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj5jb25uaW5mbzwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgor ICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBUaGUgY29ubmVjdGlvbiBz dHJpbmcgdG8gdGhlIHB1Ymxpc2hlci4gRm9yIGRldGFpbHMgc2VlIDx4cmVmIGxpbmtlbmQ9Imxp YnBxLWNvbm5zdHJpbmciLz4uCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAg ICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxv cHRpb24+LVMgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmNvbm5pbmZvPC9yZXBsYWNl YWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8dGVybT48b3B0aW9uPi0tc3Vic2NyaWJlci1j b25uaW5mbz08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Y29ubmluZm88L3JlcGxhY2Vh YmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAg ICAgICAgVGhlIGNvbm5lY3Rpb24gc3RyaW5nIHRvIHRoZSBzdWJzY3JpYmVyLiBGb3IgZGV0YWls cyBzZWUgPHhyZWYgbGlua2VuZD0ibGlicHEtY29ubnN0cmluZyIvPi4KKyAgICAgICA8L3BhcmE+ CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICA8dmFybGlz dGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4tZCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFt ZXRlciI+ZGJuYW1lPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8dGVybT48 b3B0aW9uPi0tZGF0YWJhc2U9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmRibmFtZTwv cmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxw YXJhPgorICAgICAgICBUaGUgZGF0YWJhc2UgbmFtZSB0byBjcmVhdGUgdGhlIHN1YnNjcmlwdGlv bi4gTXVsdGlwbGUgZGF0YWJhc2VzIGNhbiBiZQorICAgICAgICBzZWxlY3RlZCBieSB3cml0aW5n IG11bHRpcGxlIDxvcHRpb24+LWQ8L29wdGlvbj4gc3dpdGNoZXMuCisgICAgICAgPC9wYXJhPgor ICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgPHZhcmxpc3Rl bnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LW48L29wdGlvbj48L3Rlcm0+CisgICAgICA8dGVy bT48b3B0aW9uPi0tZHJ5LXJ1bjwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAg ICAgICA8cGFyYT4KKyAgICAgICAgRG8gZXZlcnl0aGluZyBleGNlcHQgYWN0dWFsbHkgbW9kaWZ5 aW5nIHRoZSB0YXJnZXQgZGlyZWN0b3J5LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0 ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8 dGVybT48b3B0aW9uPi12PC9vcHRpb24+PC90ZXJtPgorICAgICAgPHRlcm0+PG9wdGlvbj4tLXZl cmJvc2U8L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+Cisg ICAgICAgIEVuYWJsZXMgdmVyYm9zZSBtb2RlLiBUaGlzIHdpbGwgY2F1c2UKKyAgICAgICAgPGFw cGxpY2F0aW9uPnBnX3N1YnNjcmliZXI8L2FwcGxpY2F0aW9uPiB0byBvdXRwdXQgcHJvZ3Jlc3Mg bWVzc2FnZXMKKyAgICAgICAgYW5kIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggc3Rl cC4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRy eT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgT3Ro ZXIgb3B0aW9ucyBhcmUgYWxzbyBhdmFpbGFibGU6CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAg ICA8dmFybGlzdGVudHJ5PgorICAgICAgIDx0ZXJtPjxvcHRpb24+LVY8L29wdGlvbj48L3Rlcm0+ CisgICAgICAgPHRlcm0+PG9wdGlvbj4tLXZlcnNpb248L29wdGlvbj48L3Rlcm0+CisgICAgICAg PGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgIFByaW50IHRoZSA8YXBwbGljYXRpb24+ cGdfc3Vic2NyaWJlcjwvYXBwbGljYXRpb24+IHZlcnNpb24gYW5kIGV4aXQuCisgICAgICAgPC9w YXJhPgorICAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgIDx2 YXJsaXN0ZW50cnk+CisgICAgICAgPHRlcm0+PG9wdGlvbj4tPzwvb3B0aW9uPjwvdGVybT4KKyAg ICAgICA8dGVybT48b3B0aW9uPi0taGVscDwvb3B0aW9uPjwvdGVybT4KKyAgICAgICA8bGlzdGl0 ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgU2hvdyBoZWxwIGFib3V0IDxhcHBsaWNhdGlvbj5w Z19zdWJzY3JpYmVyPC9hcHBsaWNhdGlvbj4gY29tbWFuZAorICAgICAgIGxpbmUgYXJndW1lbnRz LCBhbmQgZXhpdC4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92 YXJsaXN0ZW50cnk+CisKKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgIDwvcGFyYT4KKworIDwvcmVm c2VjdDE+CisKKyA8cmVmc2VjdDE+CisgIDx0aXRsZT5Ob3RlczwvdGl0bGU+CisKKyAgPHBhcmE+ CisgICBUaGUgdHJhbnNmb3JtYXRpb24gcHJvY2VlZHMgaW4gdGhlIGZvbGxvd2luZyBzdGVwczoK KyAgPC9wYXJhPgorCisgIDxwcm9jZWR1cmU+CisgICA8c3RlcD4KKyAgICA8cGFyYT4KKyAgICAg PGFwcGxpY2F0aW9uPnBnX3N1YnNjcmliZXI8L2FwcGxpY2F0aW9uPiBjaGVja3MgaWYgdGhlIGdp dmVuIHRhcmdldCBkYXRhCisgICAgIGRpcmVjdG9yeSBoYXMgdGhlIHNhbWUgc3lzdGVtIGlkZW50 aWZpZXIgdGhhbiB0aGUgc291cmNlIGRhdGEgZGlyZWN0b3J5LgorICAgICBTaW5jZSBpdCB1c2Vz IHRoZSByZWNvdmVyeSBwcm9jZXNzIGFzIG9uZSBvZiB0aGUgc3RlcHMsIGl0IHN0YXJ0cyB0aGUK KyAgICAgdGFyZ2V0IHNlcnZlciBhcyBhIHJlcGxpY2EgZnJvbSB0aGUgc291cmNlIHNlcnZlci4g SWYgdGhlIHN5c3RlbQorICAgICBpZGVudGlmaWVyIGlzIG5vdCB0aGUgc2FtZSwgPGFwcGxpY2F0 aW9uPnBnX3N1YnNjcmliZXI8L2FwcGxpY2F0aW9uPiB3aWxsCisgICAgIHRlcm1pbmF0ZSB3aXRo IGFuIGVycm9yLgorICAgIDwvcGFyYT4KKyAgIDwvc3RlcD4KKworICAgPHN0ZXA+CisgICAgPHBh cmE+CisgICAgIDxhcHBsaWNhdGlvbj5wZ19zdWJzY3JpYmVyPC9hcHBsaWNhdGlvbj4gY2hlY2tz IGlmIHRoZSB0YXJnZXQgZGF0YQorICAgICBkaXJlY3RvcnkgaXMgdXNlZCBieSBhIHN0YW5kYnkg c2VydmVyLiBTdG9wIHRoZSBzdGFuZGJ5IHNlcnZlciBpZiBpdCBpcworICAgICBydW5uaW5nLiBP bmUgb2YgdGhlIG5leHQgc3RlcHMgaXMgdG8gYWRkIHNvbWUgcmVjb3ZlcnkgcGFyYW1ldGVycyB0 aGF0CisgICAgIHJlcXVpcmVzIGEgc2VydmVyIHN0YXJ0LiBUaGlzIHN0ZXAgYXZvaWRzIGFuIGVy cm9yLgorICAgIDwvcGFyYT4KKyAgIDwvc3RlcD4KKworICAgPHN0ZXA+CisgICAgPHBhcmE+Cisg ICAgIDxhcHBsaWNhdGlvbj5wZ19zdWJzY3JpYmVyPC9hcHBsaWNhdGlvbj4gY3JlYXRlcyBvbmUg cmVwbGljYXRpb24gc2xvdCBmb3IKKyAgICAgZWFjaCBzcGVjaWZpZWQgZGF0YWJhc2Ugb24gdGhl IHNvdXJjZSBzZXJ2ZXIuIFRoZSByZXBsaWNhdGlvbiBzbG90IG5hbWUKKyAgICAgY29udGFpbnMg YSA8bGl0ZXJhbD5wZ19zdWJzY3JpYmVyPC9saXRlcmFsPiBwcmVmaXguIFRoZXNlIHJlcGxpY2F0 aW9uCisgICAgIHNsb3RzIHdpbGwgYmUgdXNlZCBieSB0aGUgc3Vic2NyaXB0aW9ucyBpbiBhIGZ1 dHVyZSBzdGVwLiAgQW5vdGhlcgorICAgICByZXBsaWNhdGlvbiBzbG90IGlzIHVzZWQgdG8gZ2V0 IGEgY29uc2lzdGVudCBzdGFydCBsb2NhdGlvbi4gVGhpcworICAgICBjb25zaXN0ZW50IExTTiB3 aWxsIGJlIHVzZWQgYXMgYSBzdG9wcGluZyBwb2ludCBpbiB0aGUgPHhyZWYKKyAgICAgbGlua2Vu ZD0iZ3VjLXJlY292ZXJ5LXRhcmdldC1sc24iLz4gcGFyYW1ldGVyIGFuZCBieSB0aGUKKyAgICAg c3Vic2NyaXB0aW9ucyBhcyBhIHJlcGxpY2F0aW9uIHN0YXJ0aW5nIHBvaW50LiBJdCBndWFyYW50 ZWVzIHRoYXQgbm8KKyAgICAgdHJhbnNhY3Rpb24gd2lsbCBiZSBsb3N0LgorICAgIDwvcGFyYT4K KyAgIDwvc3RlcD4KKworICAgPHN0ZXA+CisgICAgPHBhcmE+CisgICAgIDxhcHBsaWNhdGlvbj5w Z19zdWJzY3JpYmVyPC9hcHBsaWNhdGlvbj4gd3JpdGVzIHJlY292ZXJ5IHBhcmFtZXRlcnMgaW50 bworICAgICB0aGUgdGFyZ2V0IGRhdGEgZGlyZWN0b3J5IGFuZCBzdGFydCB0aGUgdGFyZ2V0IHNl cnZlci4gSXQgc3BlY2lmaWVzIGEgTFNOCisgICAgIChjb25zaXN0ZW50IExTTiB0aGF0IHdhcyBv YnRhaW5lZCBpbiB0aGUgcHJldmlvdXMgc3RlcCkgb2Ygd3JpdGUtYWhlYWQKKyAgICAgbG9nIGxv Y2F0aW9uIHVwIHRvIHdoaWNoIHJlY292ZXJ5IHdpbGwgcHJvY2VlZC4gSXQgYWxzbyBzcGVjaWZp ZXMKKyAgICAgPGxpdGVyYWw+cHJvbW90ZTwvbGl0ZXJhbD4gYXMgdGhlIGFjdGlvbiB0aGF0IHRo ZSBzZXJ2ZXIgc2hvdWxkIHRha2Ugb25jZQorICAgICB0aGUgcmVjb3ZlcnkgdGFyZ2V0IGlzIHJl YWNoZWQuIFRoaXMgc3RlcCBmaW5pc2hlcyBvbmNlIHRoZSBzZXJ2ZXIgZW5kcworICAgICBzdGFu ZGJ5IG1vZGUgYW5kIGlzIGFjY2VwdGluZyByZWFkLXdyaXRlIG9wZXJhdGlvbnMuCisgICAgPC9w YXJhPgorICAgPC9zdGVwPgorCisgICA8c3RlcD4KKyAgICA8cGFyYT4KKyAgICAgTmV4dCwgPGFw cGxpY2F0aW9uPnBnX3N1YnNjcmliZXI8L2FwcGxpY2F0aW9uPiBjcmVhdGVzIG9uZSBwdWJsaWNh dGlvbgorICAgICBmb3IgZWFjaCBzcGVjaWZpZWQgZGF0YWJhc2Ugb24gdGhlIHNvdXJjZSBzZXJ2 ZXIuIEVhY2ggcHVibGljYXRpb24KKyAgICAgcmVwbGljYXRlcyBjaGFuZ2VzIGZvciBhbGwgdGFi bGVzIGluIHRoZSBkYXRhYmFzZS4gVGhlIHB1YmxpY2F0aW9uIG5hbWUKKyAgICAgY29udGFpbnMg YSA8bGl0ZXJhbD5wZ19zdWJzY3JpYmVyPC9saXRlcmFsPiBwcmVmaXguIFRoZXNlIHB1YmxpY2F0 aW9uCisgICAgIHdpbGwgYmUgdXNlZCBieSBhIGNvcnJlc3BvbmRpbmcgc3Vic2NyaXB0aW9uIGlu IGEgbmV4dCBzdGVwLgorICAgIDwvcGFyYT4KKyAgIDwvc3RlcD4KKworICAgPHN0ZXA+CisgICAg PHBhcmE+CisgICAgIDxhcHBsaWNhdGlvbj5wZ19zdWJzY3JpYmVyPC9hcHBsaWNhdGlvbj4gY3Jl YXRlcyBvbmUgc3Vic2NyaXB0aW9uIGZvcgorICAgICBlYWNoIHNwZWNpZmllZCBkYXRhYmFzZSBv biB0aGUgdGFyZ2V0IHNlcnZlci4gRWFjaCBzdWJzY3JpcHRpb24gbmFtZQorICAgICBjb250YWlu cyBhIDxsaXRlcmFsPnBnX3N1YnNjcmliZXI8L2xpdGVyYWw+IHByZWZpeC4gVGhlIHJlcGxpY2F0 aW9uIHNsb3QKKyAgICAgbmFtZSBpcyBpZGVudGljYWwgdG8gdGhlIHN1YnNjcmlwdGlvbiBuYW1l LiBJdCBkb2VzIG5vdCBjb3B5IGV4aXN0aW5nIGRhdGEKKyAgICAgZnJvbSB0aGUgc291cmNlIHNl cnZlci4gSXQgZG9lcyBub3QgY3JlYXRlIGEgcmVwbGljYXRpb24gc2xvdC4gSW5zdGVhZCwgaXQK KyAgICAgdXNlcyB0aGUgcmVwbGljYXRpb24gc2xvdCB0aGF0IHdhcyBjcmVhdGVkIGluIGEgcHJl dmlvdXMgc3RlcC4gVGhlCisgICAgIHN1YnNjcmlwdGlvbiBpcyBjcmVhdGVkIGJ1dCBpdCBpcyBu b3QgZW5hYmxlZCB5ZXQuIFRoZSByZWFzb24gaXMgdGhlCisgICAgIHJlcGxpY2F0aW9uIHByb2dy ZXNzIG11c3QgYmUgc2V0IHRvIHRoZSBjb25zaXN0ZW50IExTTiBidXQgcmVwbGljYXRpb24KKyAg ICAgb3JpZ2luIG5hbWUgY29udGFpbnMgdGhlIHN1YnNjcmlwdGlvbiBvaWQgaW4gaXRzIG5hbWUu IEhlbmNlLCB0aGUKKyAgICAgc3Vic2NyaXB0aW9uIHdpbGwgYmUgZW5hYmxlZCBpbiBhIHNlcGFy YXRlIHN0ZXAuCisgICAgPC9wYXJhPgorICAgPC9zdGVwPgorCisgICA8c3RlcD4KKyAgICA8cGFy YT4KKyAgICAgPGFwcGxpY2F0aW9uPnBnX3N1YnNjcmliZXI8L2FwcGxpY2F0aW9uPiBzZXRzIHRo ZSByZXBsaWNhdGlvbiBwcm9ncmVzcyB0bworICAgICB0aGUgY29uc2lzdGVudCBMU04gdGhhdCB3 YXMgb2J0YWluZWQgaW4gYSBwcmV2aW91cyBzdGVwLiBXaGVuIHRoZSB0YXJnZXQKKyAgICAgc2Vy dmVyIHN0YXJ0ZWQgdGhlIHJlY292ZXJ5IHByb2Nlc3MsIGl0IGNhdWdodCB1cCB0byB0aGUgY29u c2lzdGVudCBMU04uCisgICAgIFRoaXMgaXMgdGhlIGV4YWN0IExTTiB0byBiZSB1c2VkIGFzIGEg aW5pdGlhbCBsb2NhdGlvbiBmb3IgZWFjaAorICAgICBzdWJzY3JpcHRpb24uCisgICAgPC9wYXJh PgorICAgPC9zdGVwPgorCisgICA8c3RlcD4KKyAgICA8cGFyYT4KKyAgICAgRmluYWxseSwgPGFw cGxpY2F0aW9uPnBnX3N1YnNjcmliZXI8L2FwcGxpY2F0aW9uPiBlbmFibGVzIHRoZSBzdWJzY3Jp cHRpb24KKyAgICAgZm9yIGVhY2ggc3BlY2lmaWVkIGRhdGFiYXNlIG9uIHRoZSB0YXJnZXQgc2Vy dmVyLiBUaGUgc3Vic2NyaXB0aW9uIHN0YXJ0cworICAgICBzdHJlYW1pbmcgZnJvbSB0aGUgY29u c2lzdGVudCBMU04uCisgICAgPC9wYXJhPgorICAgPC9zdGVwPgorCisgICA8c3RlcD4KKyAgICA8 cGFyYT4KKyAgICAgPGFwcGxpY2F0aW9uPnBnX3N1YnNjcmliZXI8L2FwcGxpY2F0aW9uPiByZW1v dmVzIHRoZSBhZGRpdGlvbmFsIHJlcGxpY2F0aW9uCisgICAgIHNsb3QgdGhhdCB3YXMgdXNlZCB0 byBnZXQgdGhlIGNvbnNpc3RlbnQgTFNOIG9uIHRoZSBzb3VyY2Ugc2VydmVyLgorICAgIDwvcGFy YT4KKyAgIDwvc3RlcD4KKworICAgPHN0ZXA+CisgICAgPHBhcmE+CisgICAgIDxhcHBsaWNhdGlv bj5wZ19zdWJzY3JpYmVyPC9hcHBsaWNhdGlvbj4gc3RvcHMgdGhlIHRhcmdldCBzZXJ2ZXIgdG8g Y2hhbmdlCisgICAgIGl0cyBzeXN0ZW0gaWRlbnRpZmllci4KKyAgICA8L3BhcmE+CisgICA8L3N0 ZXA+CisgIDwvcHJvY2VkdXJlPgorIDwvcmVmc2VjdDE+CisKKyA8cmVmc2VjdDE+CisgIDx0aXRs ZT5FeGFtcGxlczwvdGl0bGU+CisKKyAgPHBhcmE+CisgICBUbyBjcmVhdGUgYSBsb2dpY2FsIHJl cGxpY2EgZm9yIGRhdGFiYXNlcyA8bGl0ZXJhbD5ocjwvbGl0ZXJhbD4gYW5kCisgICA8bGl0ZXJh bD5maW5hbmNlPC9saXRlcmFsPiBmcm9tIGEgc3RhbmRieSBzZXJ2ZXIgYXQgPGxpdGVyYWw+Zm9v PC9saXRlcmFsPjoKKzxzY3JlZW4+Cis8cHJvbXB0PiQ8L3Byb21wdD4gPHVzZXJpbnB1dD5wZ19z dWJzY3JpYmVyIC1EIC91c3IvbG9jYWwvcGdzcWwvZGF0YSAtUCAiaG9zdD1mb28iIC1TICJob3N0 PWxvY2FsaG9zdCIgLWQgaHIgLWQgZmluYW5jZTwvdXNlcmlucHV0PgorPC9zY3JlZW4+CisgIDwv cGFyYT4KKworIDwvcmVmc2VjdDE+CisKKyA8cmVmc2VjdDE+CisgIDx0aXRsZT5TZWUgQWxzbzwv dGl0bGU+CisKKyAgPHNpbXBsZWxpc3QgdHlwZT0iaW5saW5lIj4KKyAgIDxtZW1iZXI+PHhyZWYg bGlua2VuZD0iYXBwLXBnYmFzZWJhY2t1cCIvPjwvbWVtYmVyPgorICA8L3NpbXBsZWxpc3Q+Cisg PC9yZWZzZWN0MT4KKworPC9yZWZlbnRyeT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWZl cmVuY2Uuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWZlcmVuY2Uuc2dtbAppbmRleCBhYTk0ZjZhZGY2 Li4yNjZmNGU1MTVhIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmZXJlbmNlLnNnbWwKKysr IGIvZG9jL3NyYy9zZ21sL3JlZmVyZW5jZS5zZ21sCkBAIC0yODUsNiArMjg1LDcgQEAKICAgICZw Z0N0bDsKICAgICZwZ1Jlc2V0d2FsOwogICAgJnBnUmV3aW5kOworICAgJnBnU3Vic2NyaWJlcjsK ICAgICZwZ3Rlc3Rmc3luYzsKICAgICZwZ3Rlc3R0aW1pbmc7CiAgICAmcGd1cGdyYWRlOwpkaWZm IC0tZ2l0IGEvc3JjL2Jpbi9wZ19iYXNlYmFja3VwLy5naXRpZ25vcmUgYi9zcmMvYmluL3BnX2Jh c2ViYWNrdXAvLmdpdGlnbm9yZQppbmRleCAyNjA0OGJkYmQ4Li4wZTUzODRhMWQ1IDEwMDY0NAot LS0gYS9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvLmdpdGlnbm9yZQorKysgYi9zcmMvYmluL3BnX2Jh c2ViYWNrdXAvLmdpdGlnbm9yZQpAQCAtMSw1ICsxLDYgQEAKIC9wZ19iYXNlYmFja3VwCiAvcGdf cmVjZWl2ZXdhbAogL3BnX3JlY3Zsb2dpY2FsCisvcGdfc3Vic2NyaWJlcgogCiAvdG1wX2NoZWNr LwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL01ha2VmaWxlIGIvc3JjL2Jpbi9w Z19iYXNlYmFja3VwL01ha2VmaWxlCmluZGV4IGFiZmI2NDQwZWMuLmY2MjgxYjc2NzYgMTAwNjQ0 Ci0tLSBhL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC9NYWtlZmlsZQorKysgYi9zcmMvYmluL3BnX2Jh c2ViYWNrdXAvTWFrZWZpbGUKQEAgLTQ0LDcgKzQ0LDcgQEAgQkJPQkpTID0gXAogCWJic3RyZWFt ZXJfdGFyLm8gXAogCWJic3RyZWFtZXJfenN0ZC5vCiAKLWFsbDogcGdfYmFzZWJhY2t1cCBwZ19y ZWNlaXZld2FsIHBnX3JlY3Zsb2dpY2FsCithbGw6IHBnX2Jhc2ViYWNrdXAgcGdfcmVjZWl2ZXdh bCBwZ19yZWN2bG9naWNhbCBwZ19zdWJzY3JpYmVyCiAKIHBnX2Jhc2ViYWNrdXA6ICQoQkJPQkpT KSAkKE9CSlMpIHwgc3VibWFrZS1saWJwcSBzdWJtYWtlLWxpYnBncG9ydCBzdWJtYWtlLWxpYnBn ZmV1dGlscwogCSQoQ0MpICQoQ0ZMQUdTKSAkKEJCT0JKUykgJChPQkpTKSAkKExERkxBR1MpICQo TERGTEFHU19FWCkgJChMSUJTKSAtbyAkQCQoWCkKQEAgLTU1LDEwICs1NSwxNCBAQCBwZ19yZWNl aXZld2FsOiBwZ19yZWNlaXZld2FsLm8gJChPQkpTKSB8IHN1Ym1ha2UtbGlicHEgc3VibWFrZS1s aWJwZ3BvcnQgc3VibWFrZQogcGdfcmVjdmxvZ2ljYWw6IHBnX3JlY3Zsb2dpY2FsLm8gJChPQkpT KSB8IHN1Ym1ha2UtbGlicHEgc3VibWFrZS1saWJwZ3BvcnQgc3VibWFrZS1saWJwZ2ZldXRpbHMK IAkkKENDKSAkKENGTEFHUykgcGdfcmVjdmxvZ2ljYWwubyAkKE9CSlMpICQoTERGTEFHUykgJChM REZMQUdTX0VYKSAkKExJQlMpIC1vICRAJChYKQogCitwZ19zdWJzY3JpYmVyOiAkKFdJTjMyUkVT KSBwZ19zdWJzY3JpYmVyLm8gfCBzdWJtYWtlLWxpYnBxIHN1Ym1ha2UtbGlicGdwb3J0IHN1Ym1h a2UtbGlicGdmZXV0aWxzCisJJChDQykgJChDRkxBR1MpICReICQoTERGTEFHUykgJChMREZMQUdT X0VYKSAkKExJQlMpIC1vICRAJChYKQorCiBpbnN0YWxsOiBhbGwgaW5zdGFsbGRpcnMKIAkkKElO U1RBTExfUFJPR1JBTSkgcGdfYmFzZWJhY2t1cCQoWCkgJyQoREVTVERJUikkKGJpbmRpcikvcGdf YmFzZWJhY2t1cCQoWCknCiAJJChJTlNUQUxMX1BST0dSQU0pIHBnX3JlY2VpdmV3YWwkKFgpICck KERFU1RESVIpJChiaW5kaXIpL3BnX3JlY2VpdmV3YWwkKFgpJwogCSQoSU5TVEFMTF9QUk9HUkFN KSBwZ19yZWN2bG9naWNhbCQoWCkgJyQoREVTVERJUikkKGJpbmRpcikvcGdfcmVjdmxvZ2ljYWwk KFgpJworCSQoSU5TVEFMTF9QUk9HUkFNKSBwZ19zdWJzY3JpYmVyJChYKSAnJChERVNURElSKSQo YmluZGlyKS9wZ19zdWJzY3JpYmVyJChYKScKIAogaW5zdGFsbGRpcnM6CiAJJChNS0RJUl9QKSAn JChERVNURElSKSQoYmluZGlyKScKQEAgLTY3LDEwICs3MSwxMiBAQCB1bmluc3RhbGw6CiAJcm0g LWYgJyQoREVTVERJUikkKGJpbmRpcikvcGdfYmFzZWJhY2t1cCQoWCknCiAJcm0gLWYgJyQoREVT VERJUikkKGJpbmRpcikvcGdfcmVjZWl2ZXdhbCQoWCknCiAJcm0gLWYgJyQoREVTVERJUikkKGJp bmRpcikvcGdfcmVjdmxvZ2ljYWwkKFgpJworCXJtIC1mICckKERFU1RESVIpJChiaW5kaXIpL3Bn X3N1YnNjcmliZXIkKFgpJwogCiBjbGVhbiBkaXN0Y2xlYW46CiAJcm0gLWYgcGdfYmFzZWJhY2t1 cCQoWCkgcGdfcmVjZWl2ZXdhbCQoWCkgcGdfcmVjdmxvZ2ljYWwkKFgpIFwKIAkJJChCQk9CSlMp IHBnX3JlY2VpdmV3YWwubyBwZ19yZWN2bG9naWNhbC5vIFwKKwkJcGdfc3Vic2NyaWJlciQoWCkg cGdfc3Vic2NyaWJlci5vIFwKIAkJJChPQkpTKQogCXJtIC1yZiB0bXBfY2hlY2sKIApkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL21lc29uLmJ1aWxkIGIvc3JjL2Jpbi9wZ19iYXNl YmFja3VwL21lc29uLmJ1aWxkCmluZGV4IGY3ZTYwZTY2NzAuLmNjZmQ3YmI3YTUgMTAwNjQ0Ci0t LSBhL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC9tZXNvbi5idWlsZAorKysgYi9zcmMvYmluL3BnX2Jh c2ViYWNrdXAvbWVzb24uYnVpbGQKQEAgLTc1LDYgKzc1LDIzIEBAIHBnX3JlY3Zsb2dpY2FsID0g ZXhlY3V0YWJsZSgncGdfcmVjdmxvZ2ljYWwnLAogKQogYmluX3RhcmdldHMgKz0gcGdfcmVjdmxv Z2ljYWwKIAorcGdfc3Vic2NyaWJlcl9zb3VyY2VzID0gZmlsZXMoCisgICdwZ19zdWJzY3JpYmVy LmMnCispCisKK2lmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJworICBwZ19zdWJzY3JpYmVyX3Nv dXJjZXMgKz0gcmNfYmluX2dlbi5wcm9jZXNzKHdpbjMydmVyX3JjLCBleHRyYV9hcmdzOiBbCisJ Jy0tTkFNRScsICdwZ19zdWJzY3JpYmVyJywKKwknLS1GSUxFREVTQycsICdwZ19zdWJzY3JpYmVy IC0gY3JlYXRlIGEgbmV3IGxvZ2ljYWwgcmVwbGljYSBmcm9tIGEgc3RhbmRieSBzZXJ2ZXInLF0p CitlbmRpZgorCitwZ19zdWJzY3JpYmVyID0gZXhlY3V0YWJsZSgncGdfc3Vic2NyaWJlcicsCisg IHBnX3N1YnNjcmliZXJfc291cmNlcywKKyAgZGVwZW5kZW5jaWVzOiBbZnJvbnRlbmRfY29kZSwg bGlicHFdLAorICBrd2FyZ3M6IGRlZmF1bHRfYmluX2FyZ3MsCispCitiaW5fdGFyZ2V0cyArPSBw Z19zdWJzY3JpYmVyCisKIHRlc3RzICs9IHsKICAgJ25hbWUnOiAncGdfYmFzZWJhY2t1cCcsCiAg ICdzZCc6IG1lc29uLmN1cnJlbnRfc291cmNlX2RpcigpLApAQCAtODksNiArMTA2LDggQEAgdGVz dHMgKz0gewogICAgICAgJ3QvMDExX2luX3BsYWNlX3RhYmxlc3BhY2UucGwnLAogICAgICAgJ3Qv MDIwX3BnX3JlY2VpdmV3YWwucGwnLAogICAgICAgJ3QvMDMwX3BnX3JlY3Zsb2dpY2FsLnBsJywK KyAgICAgICd0LzA0MF9wZ19zdWJzY3JpYmVyLnBsJywKKyAgICAgICd0LzA0MV9wZ19zdWJzY3Jp YmVyX3N0YW5kYnkucGwnLAogICAgIF0sCiAgIH0sCiB9CmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X2Jhc2ViYWNrdXAvcGdfc3Vic2NyaWJlci5jIGIvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3BnX3N1 YnNjcmliZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5lOTk4YzI5 ZjllCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3BnX3N1YnNjcmli ZXIuYwpAQCAtMCwwICsxLDE2NTcgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBnX3N1 YnNjcmliZXIuYworICoJICBDcmVhdGUgYSBuZXcgbG9naWNhbCByZXBsaWNhIGZyb20gYSBzdGFu ZGJ5IHNlcnZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJCXNyYy9iaW4vcGdf c3Vic2NyaWJlci9wZ19zdWJzY3JpYmVyLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwor I2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCisKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRl IDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQu aD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ2RlZnMuaCIKKyNp bmNsdWRlICJjYXRhbG9nL3BnX2NvbnRyb2wuaCIKKyNpbmNsdWRlICJjb21tb24vY29ubmVjdC5o IgorI2luY2x1ZGUgImNvbW1vbi9jb250cm9sZGF0YV91dGlscy5oIgorI2luY2x1ZGUgImNvbW1v bi9maWxlX3Blcm0uaCIKKyNpbmNsdWRlICJjb21tb24vZmlsZV91dGlscy5oIgorI2luY2x1ZGUg ImNvbW1vbi9sb2dnaW5nLmgiCisjaW5jbHVkZSAiZmVfdXRpbHMvcmVjb3ZlcnlfZ2VuLmgiCisj aW5jbHVkZSAiZmVfdXRpbHMvc2ltcGxlX2xpc3QuaCIKKyNpbmNsdWRlICJnZXRvcHRfbG9uZy5o IgorI2luY2x1ZGUgInV0aWxzL3BpZGZpbGUuaCIKKworI2RlZmluZQlQR1NfT1VUUFVUX0RJUgki cGdfc3Vic2NyaWJlcl9vdXRwdXQuZCIKKwordHlwZWRlZiBzdHJ1Y3QgTG9naWNhbFJlcEluZm8K K3sKKwlPaWQJCQlvaWQ7CQkJLyogZGF0YWJhc2UgT0lEICovCisJY2hhcgkgICAqZGJuYW1lOwkJ CS8qIGRhdGFiYXNlIG5hbWUgKi8KKwljaGFyCSAgICpwdWJjb25uaW5mbzsJLyogcHVibGljYXRp b24gY29ubmVjdGlvbiBzdHJpbmcgZm9yIGxvZ2ljYWwKKwkJCQkJCQkJICogcmVwbGljYXRpb24g Ki8KKwljaGFyCSAgICpzdWJjb25uaW5mbzsJLyogc3Vic2NyaXB0aW9uIGNvbm5lY3Rpb24gc3Ry aW5nIGZvciBsb2dpY2FsCisJCQkJCQkJCSAqIHJlcGxpY2F0aW9uICovCisJY2hhcgkgICAqcHVi bmFtZTsJCS8qIHB1YmxpY2F0aW9uIG5hbWUgKi8KKwljaGFyCSAgICpzdWJuYW1lOwkJLyogc3Vi c2NyaXB0aW9uIG5hbWUgKGFsc28gcmVwbGljYXRpb24gc2xvdAorCQkJCQkJCQkgKiBuYW1lKSAq LworCisJYm9vbAkJbWFkZV9yZXBsc2xvdDsJLyogcmVwbGljYXRpb24gc2xvdCB3YXMgY3JlYXRl ZCAqLworCWJvb2wJCW1hZGVfcHVibGljYXRpb247CS8qIHB1YmxpY2F0aW9uIHdhcyBjcmVhdGVk ICovCisJYm9vbAkJbWFkZV9zdWJzY3JpcHRpb247CS8qIHN1YnNjcmlwdGlvbiB3YXMgY3JlYXRl ZCAqLworfSBMb2dpY2FsUmVwSW5mbzsKKworc3RhdGljIHZvaWQgY2xlYW51cF9vYmplY3RzX2F0 ZXhpdCh2b2lkKTsKK3N0YXRpYyB2b2lkIHVzYWdlKCk7CitzdGF0aWMgY2hhciAqZ2V0X2Jhc2Vf Y29ubmluZm8oY2hhciAqY29ubmluZm8sIGNoYXIgKmRibmFtZSwKKwkJCQkJCQkgICBjb25zdCBj aGFyICpub2Rlcm9sZSk7CitzdGF0aWMgYm9vbCBnZXRfZXhlY19wYXRoKGNvbnN0IGNoYXIgKnBh dGgpOworc3RhdGljIGJvb2wgY2hlY2tfZGF0YV9kaXJlY3RvcnkoY29uc3QgY2hhciAqZGF0YWRp cik7CitzdGF0aWMgY2hhciAqY29uY2F0X2Nvbm5pbmZvX2RibmFtZShjb25zdCBjaGFyICpjb25u aW5mbywgY29uc3QgY2hhciAqZGJuYW1lKTsKK3N0YXRpYyBMb2dpY2FsUmVwSW5mbyAqc3RvcmVf cHViX3N1Yl9pbmZvKGNvbnN0IGNoYXIgKnB1Yl9iYXNlX2Nvbm5pbmZvLCBjb25zdCBjaGFyICpz dWJfYmFzZV9jb25uaW5mbyk7CitzdGF0aWMgUEdjb25uICpjb25uZWN0X2RhdGFiYXNlKGNvbnN0 IGNoYXIgKmNvbm5pbmZvKTsKK3N0YXRpYyB2b2lkIGRpc2Nvbm5lY3RfZGF0YWJhc2UoUEdjb25u ICpjb25uKTsKK3N0YXRpYyB1aW50NjQgZ2V0X3N5c2lkX2Zyb21fY29ubihjb25zdCBjaGFyICpj b25uaW5mbyk7CitzdGF0aWMgdWludDY0IGdldF9jb250cm9sX2Zyb21fZGF0YWRpcihjb25zdCBj aGFyICpkYXRhZGlyKTsKK3N0YXRpYyB2b2lkIG1vZGlmeV9zeXNpZChjb25zdCBjaGFyICpwZ19y ZXNldHdhbF9wYXRoLCBjb25zdCBjaGFyICpkYXRhZGlyKTsKK3N0YXRpYyBjaGFyICp1c2VfcHJp bWFyeV9zbG90X25hbWUodm9pZCk7CitzdGF0aWMgYm9vbCBjcmVhdGVfYWxsX2xvZ2ljYWxfcmVw bGljYXRpb25fc2xvdHMoTG9naWNhbFJlcEluZm8gKmRiaW5mbyk7CitzdGF0aWMgY2hhciAqY3Jl YXRlX2xvZ2ljYWxfcmVwbGljYXRpb25fc2xvdChQR2Nvbm4gKmNvbm4sIExvZ2ljYWxSZXBJbmZv ICpkYmluZm8sCisJCQkJCQkJCQkJCSBjaGFyICpzbG90X25hbWUpOworc3RhdGljIHZvaWQgZHJv cF9yZXBsaWNhdGlvbl9zbG90KFBHY29ubiAqY29ubiwgTG9naWNhbFJlcEluZm8gKmRiaW5mbywg Y29uc3QgY2hhciAqc2xvdF9uYW1lKTsKK3N0YXRpYyB2b2lkIHBnX2N0bF9zdGF0dXMoY29uc3Qg Y2hhciAqcGdfY3RsX2NtZCwgaW50IHJjLCBpbnQgYWN0aW9uKTsKK3N0YXRpYyB2b2lkIHdhaXRf Zm9yX2VuZF9yZWNvdmVyeShjb25zdCBjaGFyICpjb25uaW5mbyk7CitzdGF0aWMgdm9pZCBjcmVh dGVfcHVibGljYXRpb24oUEdjb25uICpjb25uLCBMb2dpY2FsUmVwSW5mbyAqZGJpbmZvKTsKK3N0 YXRpYyB2b2lkIGRyb3BfcHVibGljYXRpb24oUEdjb25uICpjb25uLCBMb2dpY2FsUmVwSW5mbyAq ZGJpbmZvKTsKK3N0YXRpYyB2b2lkIGNyZWF0ZV9zdWJzY3JpcHRpb24oUEdjb25uICpjb25uLCBM b2dpY2FsUmVwSW5mbyAqZGJpbmZvKTsKK3N0YXRpYyB2b2lkIGRyb3Bfc3Vic2NyaXB0aW9uKFBH Y29ubiAqY29ubiwgTG9naWNhbFJlcEluZm8gKmRiaW5mbyk7CitzdGF0aWMgdm9pZCBzZXRfcmVw bGljYXRpb25fcHJvZ3Jlc3MoUEdjb25uICpjb25uLCBMb2dpY2FsUmVwSW5mbyAqZGJpbmZvLCBj b25zdCBjaGFyICpsc24pOworc3RhdGljIHZvaWQgZW5hYmxlX3N1YnNjcmlwdGlvbihQR2Nvbm4g KmNvbm4sIExvZ2ljYWxSZXBJbmZvICpkYmluZm8pOworCisjZGVmaW5lCVVTRUNfUEVSX1NFQwkx MDAwMDAwCisjZGVmaW5lCVdBSVRfSU5URVJWQUwJMQkJLyogMSBzZWNvbmQgKi8KKworLyogT3B0 aW9ucyAqLworc3RhdGljIGNvbnN0IGNoYXIgKnByb2duYW1lOworCitzdGF0aWMgY2hhciAqc3Vi c2NyaWJlcl9kaXIgPSBOVUxMOworc3RhdGljIGNoYXIgKnB1Yl9jb25uaW5mb19zdHIgPSBOVUxM Oworc3RhdGljIGNoYXIgKnN1Yl9jb25uaW5mb19zdHIgPSBOVUxMOworc3RhdGljIFNpbXBsZVN0 cmluZ0xpc3QgZGF0YWJhc2VfbmFtZXMgPSB7TlVMTCwgTlVMTH07CitzdGF0aWMgY2hhciAqcHJp bWFyeV9zbG90X25hbWUgPSBOVUxMOworc3RhdGljIGJvb2wgZHJ5X3J1biA9IGZhbHNlOworCitz dGF0aWMgYm9vbCBzdWNjZXNzID0gZmFsc2U7CisKK3N0YXRpYyBjaGFyICpwZ19jdGxfcGF0aCA9 IE5VTEw7CitzdGF0aWMgY2hhciAqcGdfcmVzZXR3YWxfcGF0aCA9IE5VTEw7CisKK3N0YXRpYyBM b2dpY2FsUmVwSW5mbyAqZGJpbmZvOworc3RhdGljIGludAludW1fZGJzID0gMDsKKworc3RhdGlj IGNoYXIgdGVtcF9yZXBsc2xvdFtOQU1FREFUQUxFTl0gPSB7MH07CitzdGF0aWMgYm9vbCBtYWRl X3RyYW5zaWVudF9yZXBsc2xvdCA9IGZhbHNlOworCitlbnVtIFdhaXRQTVJlc3VsdAoreworCVBP U1RNQVNURVJfUkVBRFksCisJUE9TVE1BU1RFUl9TVEFOREJZLAorCVBPU1RNQVNURVJfU1RJTExf U1RBUlRJTkcsCisJUE9TVE1BU1RFUl9GQUlMRUQKK307CisKKworLyoKKyAqIENsZWFudXAgb2Jq ZWN0cyB0aGF0IHdlcmUgY3JlYXRlZCBieSBwZ19zdWJzY3JpYmVyIGlmIHRoZXJlIGlzIGFuIGVy cm9yLgorICoKKyAqIFJlcGxpY2F0aW9uIHNsb3RzLCBwdWJsaWNhdGlvbnMgYW5kIHN1YnNjcmlw dGlvbnMgYXJlIGNyZWF0ZWQuIERlcGVuZGluZyBvbgorICogdGhlIHN0ZXAgaXQgZmFpbGVkLCBp dCBzaG91bGQgcmVtb3ZlIHRoZSBhbHJlYWR5IGNyZWF0ZWQgb2JqZWN0cyBpZiBpdCBpcworICog cG9zc2libGUgKHNvbWV0aW1lcyBpdCB3b24ndCB3b3JrIGR1ZSB0byBhIGNvbm5lY3Rpb24gaXNz dWUpLgorICovCitzdGF0aWMgdm9pZAorY2xlYW51cF9vYmplY3RzX2F0ZXhpdCh2b2lkKQorewor CVBHY29ubgkgICAqY29ubjsKKwlpbnQJCQlpOworCisJaWYgKHN1Y2Nlc3MpCisJCXJldHVybjsK KworCWZvciAoaSA9IDA7IGkgPCBudW1fZGJzOyBpKyspCisJeworCQlpZiAoZGJpbmZvW2ldLm1h ZGVfc3Vic2NyaXB0aW9uKQorCQl7CisJCQljb25uID0gY29ubmVjdF9kYXRhYmFzZShkYmluZm9b aV0uc3ViY29ubmluZm8pOworCQkJaWYgKGNvbm4gIT0gTlVMTCkKKwkJCXsKKwkJCQlkcm9wX3N1 YnNjcmlwdGlvbihjb25uLCAmZGJpbmZvW2ldKTsKKwkJCQlkaXNjb25uZWN0X2RhdGFiYXNlKGNv bm4pOworCQkJfQorCQl9CisKKwkJaWYgKGRiaW5mb1tpXS5tYWRlX3B1YmxpY2F0aW9uIHx8IGRi aW5mb1tpXS5tYWRlX3JlcGxzbG90KQorCQl7CisJCQljb25uID0gY29ubmVjdF9kYXRhYmFzZShk YmluZm9baV0ucHViY29ubmluZm8pOworCQkJaWYgKGNvbm4gIT0gTlVMTCkKKwkJCXsKKwkJCQlp ZiAoZGJpbmZvW2ldLm1hZGVfcHVibGljYXRpb24pCisJCQkJCWRyb3BfcHVibGljYXRpb24oY29u biwgJmRiaW5mb1tpXSk7CisJCQkJaWYgKGRiaW5mb1tpXS5tYWRlX3JlcGxzbG90KQorCQkJCQlk cm9wX3JlcGxpY2F0aW9uX3Nsb3QoY29ubiwgJmRiaW5mb1tpXSwgTlVMTCk7CisJCQkJZGlzY29u bmVjdF9kYXRhYmFzZShjb25uKTsKKwkJCX0KKwkJfQorCX0KKworCWlmIChtYWRlX3RyYW5zaWVu dF9yZXBsc2xvdCkKKwl7CisJCWNvbm4gPSBjb25uZWN0X2RhdGFiYXNlKGRiaW5mb1swXS5wdWJj b25uaW5mbyk7CisJCWlmIChjb25uICE9IE5VTEwpCisJCXsKKwkJCWRyb3BfcmVwbGljYXRpb25f c2xvdChjb25uLCAmZGJpbmZvWzBdLCB0ZW1wX3JlcGxzbG90KTsKKwkJCWRpc2Nvbm5lY3RfZGF0 YWJhc2UoY29ubik7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkCit1c2FnZSh2b2lkKQorewor CXByaW50ZihfKCIlcyBjcmVhdGVzIGEgbmV3IGxvZ2ljYWwgcmVwbGljYSBmcm9tIGEgc3RhbmRi eSBzZXJ2ZXIuXG5cbiIpLAorCQkgICBwcm9nbmFtZSk7CisJcHJpbnRmKF8oIlVzYWdlOlxuIikp OworCXByaW50ZihfKCIgICVzIFtPUFRJT05dLi4uXG4iKSwgcHJvZ25hbWUpOworCXByaW50Zihf KCJcbk9wdGlvbnM6XG4iKSk7CisJcHJpbnRmKF8oIiAtRCwgLS1wZ2RhdGE9REFUQURJUiAgICAg ICAgICAgICAgICBsb2NhdGlvbiBmb3IgdGhlIHN1YnNjcmliZXIgZGF0YSBkaXJlY3RvcnlcbiIp KTsKKwlwcmludGYoXygiIC1QLCAtLXB1Ymxpc2hlci1jb25uaW5mbz1DT05OSU5GTyAgIHB1Ymxp c2hlciBjb25uZWN0aW9uIHN0cmluZ1xuIikpOworCXByaW50ZihfKCIgLVMsIC0tc3Vic2NyaWJl ci1jb25uaW5mbz1DT05OSU5GTyAgc3Vic2NyaWJlciBjb25uZWN0aW9uIHN0cmluZ1xuIikpOwor CXByaW50ZihfKCIgLWQsIC0tZGF0YWJhc2U9REJOQU1FICAgICAgICAgICAgICAgZGF0YWJhc2Ug dG8gY3JlYXRlIGEgc3Vic2NyaXB0aW9uXG4iKSk7CisJcHJpbnRmKF8oIiAtbiwgLS1kcnktcnVu ICAgICAgICAgICAgICAgICAgICAgICBzdG9wIGJlZm9yZSBtb2RpZnlpbmcgYW55dGhpbmdcbiIp KTsKKwlwcmludGYoXygiIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgICAgICAgICAgIG91dHB1 dCB2ZXJib3NlIG1lc3NhZ2VzXG4iKSk7CisJcHJpbnRmKF8oIiAtViwgLS12ZXJzaW9uICAgICAg ICAgICAgICAgICAgICAgICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiwgdGhlbiBleGl0XG4i KSk7CisJcHJpbnRmKF8oIiAtPywgLS1oZWxwICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93 IHRoaXMgaGVscCwgdGhlbiBleGl0XG4iKSk7CisJcHJpbnRmKF8oIlxuUmVwb3J0IGJ1Z3MgdG8g PCVzPi5cbiIpLCBQQUNLQUdFX0JVR1JFUE9SVCk7CisJcHJpbnRmKF8oIiVzIGhvbWUgcGFnZTog PCVzPlxuIiksIFBBQ0tBR0VfTkFNRSwgUEFDS0FHRV9VUkwpOworfQorCisvKgorICogVmFsaWRh dGUgYSBjb25uZWN0aW9uIHN0cmluZy4gUmV0dXJucyBhIGJhc2UgY29ubmVjdGlvbiBzdHJpbmcg dGhhdCBpcyBhCisgKiBjb25uZWN0aW9uIHN0cmluZyB3aXRob3V0IGEgZGF0YWJhc2UgbmFtZSBw bHVzIGEgZmFsbGJhY2sgYXBwbGljYXRpb24gbmFtZS4KKyAqIFNpbmNlIHdlIG1pZ2h0IHByb2Nl c3MgbXVsdGlwbGUgZGF0YWJhc2VzLCBlYWNoIGRhdGFiYXNlIG5hbWUgd2lsbCBiZQorICogYXBw ZW5kZWQgdG8gdGhpcyBiYXNlIGNvbm5lY3Rpb24gc3RyaW5nIHRvIHByb3ZpZGUgYSBmaW5hbCBj b25uZWN0aW9uIHN0cmluZy4KKyAqIElmIHRoZSBzZWNvbmQgYXJndW1lbnQgKGRibmFtZSkgaXMg bm90IG51bGwsIHJldHVybnMgZGJuYW1lIGlmIHRoZSBwcm92aWRlZAorICogY29ubmVjdGlvbiBz dHJpbmcgY29udGFpbnMgaXQuIElmIG9wdGlvbiAtLWRhdGFiYXNlIGlzIG5vdCBwcm92aWRlZCwg dXNlcworICogZGJuYW1lIGFzIHRoZSBvbmx5IGRhdGFiYXNlIHRvIHNldHVwIHRoZSBsb2dpY2Fs IHJlcGxpY2EuCisgKiBJdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZnJlZSB0 aGUgcmV0dXJuZWQgY29ubmVjdGlvbiBzdHJpbmcgYW5kCisgKiBkYm5hbWUuCisgKi8KK3N0YXRp YyBjaGFyICoKK2dldF9iYXNlX2Nvbm5pbmZvKGNoYXIgKmNvbm5pbmZvLCBjaGFyICpkYm5hbWUs IGNvbnN0IGNoYXIgKm5vZGVyb2xlKQoreworCVBRRXhwQnVmZmVyIGJ1ZiA9IGNyZWF0ZVBRRXhw QnVmZmVyKCk7CisJUFFjb25uaW5mb09wdGlvbiAqY29ubl9vcHRzID0gTlVMTDsKKwlQUWNvbm5p bmZvT3B0aW9uICpjb25uX29wdDsKKwljaGFyCSAgICplcnJtc2cgPSBOVUxMOworCWNoYXIJICAg KnJldDsKKwlpbnQJCQlpOworCisJcGdfbG9nX2luZm8oInZhbGlkYXRpbmcgY29ubmVjdGlvbiBz dHJpbmcgb24gJXMiLCBub2Rlcm9sZSk7CisKKwljb25uX29wdHMgPSBQUWNvbm5pbmZvUGFyc2Uo Y29ubmluZm8sICZlcnJtc2cpOworCWlmIChjb25uX29wdHMgPT0gTlVMTCkKKwl7CisJCXBnX2xv Z19lcnJvcigiY291bGQgbm90IHBhcnNlIGNvbm5lY3Rpb24gc3RyaW5nOiAlcyIsIGVycm1zZyk7 CisJCXJldHVybiBOVUxMOworCX0KKworCWkgPSAwOworCWZvciAoY29ubl9vcHQgPSBjb25uX29w dHM7IGNvbm5fb3B0LT5rZXl3b3JkICE9IE5VTEw7IGNvbm5fb3B0KyspCisJeworCQlpZiAoc3Ry Y21wKGNvbm5fb3B0LT5rZXl3b3JkLCAiZGJuYW1lIikgPT0gMCAmJiBjb25uX29wdC0+dmFsICE9 IE5VTEwpCisJCXsKKwkJCWlmIChkYm5hbWUpCisJCQkJZGJuYW1lID0gcGdfc3RyZHVwKGNvbm5f b3B0LT52YWwpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoY29ubl9vcHQtPnZhbCAhPSBO VUxMICYmIGNvbm5fb3B0LT52YWxbMF0gIT0gJ1wwJykKKwkJeworCQkJaWYgKGkgPiAwKQorCQkJ CWFwcGVuZFBRRXhwQnVmZmVyQ2hhcihidWYsICcgJyk7CisJCQlhcHBlbmRQUUV4cEJ1ZmZlcihi dWYsICIlcz0lcyIsIGNvbm5fb3B0LT5rZXl3b3JkLCBjb25uX29wdC0+dmFsKTsKKwkJCWkrKzsK KwkJfQorCX0KKworCWlmIChpID4gMCkKKwkJYXBwZW5kUFFFeHBCdWZmZXJDaGFyKGJ1ZiwgJyAn KTsKKwlhcHBlbmRQUUV4cEJ1ZmZlcihidWYsICJmYWxsYmFja19hcHBsaWNhdGlvbl9uYW1lPSVz IiwgcHJvZ25hbWUpOworCisJcmV0ID0gcGdfc3RyZHVwKGJ1Zi0+ZGF0YSk7CisKKwlkZXN0cm95 UFFFeHBCdWZmZXIoYnVmKTsKKwlQUWNvbm5pbmZvRnJlZShjb25uX29wdHMpOworCisJcmV0dXJu IHJldDsKK30KKworLyoKKyAqIEdldCB0aGUgYWJzb2x1dGUgcGF0aCBmcm9tIG90aGVyIFBvc3Rn cmVTUUwgYmluYXJpZXMgKHBnX2N0bCBhbmQKKyAqIHBnX3Jlc2V0d2FsKSB0aGF0IGlzIHVzZWQg YnkgaXQuCisgKi8KK3N0YXRpYyBib29sCitnZXRfZXhlY19wYXRoKGNvbnN0IGNoYXIgKnBhdGgp Cit7CisJaW50CQkJcmM7CisKKwlwZ19jdGxfcGF0aCA9IHBnX21hbGxvYyhNQVhQR1BBVEgpOwor CXJjID0gZmluZF9vdGhlcl9leGVjKHBhdGgsICJwZ19jdGwiLAorCQkJCQkJICJwZ19jdGwgKFBv c3RncmVTUUwpICIgUEdfVkVSU0lPTiAiXG4iLAorCQkJCQkJIHBnX2N0bF9wYXRoKTsKKwlpZiAo cmMgPCAwKQorCXsKKwkJY2hhcgkJZnVsbF9wYXRoW01BWFBHUEFUSF07CisKKwkJaWYgKGZpbmRf bXlfZXhlYyhwYXRoLCBmdWxsX3BhdGgpIDwgMCkKKwkJCXN0cmxjcHkoZnVsbF9wYXRoLCBwcm9n bmFtZSwgc2l6ZW9mKGZ1bGxfcGF0aCkpOworCQlpZiAocmMgPT0gLTEpCisJCQlwZ19sb2dfZXJy b3IoIlRoZSBwcm9ncmFtIFwiJXNcIiBpcyBuZWVkZWQgYnkgJXMgYnV0IHdhcyBub3QgZm91bmQg aW4gdGhlXG4iCisJCQkJCQkgInNhbWUgZGlyZWN0b3J5IGFzIFwiJXNcIi5cbiIKKwkJCQkJCSAi Q2hlY2sgeW91ciBpbnN0YWxsYXRpb24uIiwKKwkJCQkJCSAicGdfY3RsIiwgcHJvZ25hbWUsIGZ1 bGxfcGF0aCk7CisJCWVsc2UKKwkJCXBnX2xvZ19lcnJvcigiVGhlIHByb2dyYW0gXCIlc1wiIHdh cyBmb3VuZCBieSBcIiVzXCJcbiIKKwkJCQkJCSAiYnV0IHdhcyBub3QgdGhlIHNhbWUgdmVyc2lv biBhcyAlcy5cbiIKKwkJCQkJCSAiQ2hlY2sgeW91ciBpbnN0YWxsYXRpb24uIiwKKwkJCQkJCSAi cGdfY3RsIiwgZnVsbF9wYXRoLCBwcm9nbmFtZSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlw Z19sb2dfZGVidWcoInBnX2N0bCBwYXRoIGlzOiAlcyIsIHBnX2N0bF9wYXRoKTsKKworCXBnX3Jl c2V0d2FsX3BhdGggPSBwZ19tYWxsb2MoTUFYUEdQQVRIKTsKKwlyYyA9IGZpbmRfb3RoZXJfZXhl YyhwYXRoLCAicGdfcmVzZXR3YWwiLAorCQkJCQkJICJwZ19yZXNldHdhbCAoUG9zdGdyZVNRTCkg IiBQR19WRVJTSU9OICJcbiIsCisJCQkJCQkgcGdfcmVzZXR3YWxfcGF0aCk7CisJaWYgKHJjIDwg MCkKKwl7CisJCWNoYXIJCWZ1bGxfcGF0aFtNQVhQR1BBVEhdOworCisJCWlmIChmaW5kX215X2V4 ZWMocGF0aCwgZnVsbF9wYXRoKSA8IDApCisJCQlzdHJsY3B5KGZ1bGxfcGF0aCwgcHJvZ25hbWUs IHNpemVvZihmdWxsX3BhdGgpKTsKKwkJaWYgKHJjID09IC0xKQorCQkJcGdfbG9nX2Vycm9yKCJU aGUgcHJvZ3JhbSBcIiVzXCIgaXMgbmVlZGVkIGJ5ICVzIGJ1dCB3YXMgbm90IGZvdW5kIGluIHRo ZVxuIgorCQkJCQkJICJzYW1lIGRpcmVjdG9yeSBhcyBcIiVzXCIuXG4iCisJCQkJCQkgIkNoZWNr IHlvdXIgaW5zdGFsbGF0aW9uLiIsCisJCQkJCQkgInBnX3Jlc2V0d2FsIiwgcHJvZ25hbWUsIGZ1 bGxfcGF0aCk7CisJCWVsc2UKKwkJCXBnX2xvZ19lcnJvcigiVGhlIHByb2dyYW0gXCIlc1wiIHdh cyBmb3VuZCBieSBcIiVzXCJcbiIKKwkJCQkJCSAiYnV0IHdhcyBub3QgdGhlIHNhbWUgdmVyc2lv biBhcyAlcy5cbiIKKwkJCQkJCSAiQ2hlY2sgeW91ciBpbnN0YWxsYXRpb24uIiwKKwkJCQkJCSAi cGdfcmVzZXR3YWwiLCBmdWxsX3BhdGgsIHByb2duYW1lKTsKKwkJcmV0dXJuIGZhbHNlOworCX0K KworCXBnX2xvZ19kZWJ1ZygicGdfcmVzZXR3YWwgcGF0aCBpczogJXMiLCBwZ19yZXNldHdhbF9w YXRoKTsKKworCXJldHVybiB0cnVlOworfQorCisvKgorICogSXMgaXQgYSBjbHVzdGVyIGRpcmVj dG9yeT8gVGhlc2UgYXJlIHByZWxpbWluYXJ5IGNoZWNrcy4gSXQgaXMgZmFyIGZyb20KKyAqIG1h a2luZyBhbiBhY2N1cmF0ZSBjaGVjay4gSWYgaXQgaXMgbm90IGEgY2xvbmUgZnJvbSB0aGUgcHVi bGlzaGVyLCBpdCB3aWxsCisgKiBldmVudHVhbGx5IGZhaWwgaW4gYSBmdXR1cmUgc3RlcC4KKyAq Lworc3RhdGljIGJvb2wKK2NoZWNrX2RhdGFfZGlyZWN0b3J5KGNvbnN0IGNoYXIgKmRhdGFkaXIp Cit7CisJc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKwljaGFyCQl2ZXJzaW9uZmlsZVtNQVhQR1BBVEhd OworCisJcGdfbG9nX2luZm8oImNoZWNraW5nIGlmIGRpcmVjdG9yeSBcIiVzXCIgaXMgYSBjbHVz dGVyIGRhdGEgZGlyZWN0b3J5IiwKKwkJCQlkYXRhZGlyKTsKKworCWlmIChzdGF0KGRhdGFkaXIs ICZzdGF0YnVmKSAhPSAwKQorCXsKKwkJaWYgKGVycm5vID09IEVOT0VOVCkKKwkJCXBnX2xvZ19l cnJvcigiZGF0YSBkaXJlY3RvcnkgXCIlc1wiIGRvZXMgbm90IGV4aXN0IiwgZGF0YWRpcik7CisJ CWVsc2UKKwkJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IGFjY2VzcyBkaXJlY3RvcnkgXCIlc1wi OiAlcyIsIGRhdGFkaXIsIHN0cmVycm9yKGVycm5vKSk7CisKKwkJcmV0dXJuIGZhbHNlOworCX0K KworCXNucHJpbnRmKHZlcnNpb25maWxlLCBNQVhQR1BBVEgsICIlcy9QR19WRVJTSU9OIiwgZGF0 YWRpcik7CisJaWYgKHN0YXQodmVyc2lvbmZpbGUsICZzdGF0YnVmKSAhPSAwICYmIGVycm5vID09 IEVOT0VOVCkKKwl7CisJCXBnX2xvZ19lcnJvcigiZGlyZWN0b3J5IFwiJXNcIiBpcyBub3QgYSBk YXRhYmFzZSBjbHVzdGVyIGRpcmVjdG9yeSIsIGRhdGFkaXIpOworCQlyZXR1cm4gZmFsc2U7CisJ fQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBBcHBlbmQgZGF0YWJhc2UgbmFtZSBpbnRv IGEgYmFzZSBjb25uZWN0aW9uIHN0cmluZy4KKyAqCisgKiBkYm5hbWUgaXMgdGhlIG9ubHkgcGFy YW1ldGVyIHRoYXQgY2hhbmdlcyBzbyBpdCBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGJhc2UKKyAq IGNvbm5lY3Rpb24gc3RyaW5nLiBUaGlzIGZ1bmN0aW9uIGNvbmNhdGVuYXRlcyBkYm5hbWUgdG8g YnVpbGQgYSAicmVhbCIKKyAqIGNvbm5lY3Rpb24gc3RyaW5nLgorICovCitzdGF0aWMgY2hhciAq Citjb25jYXRfY29ubmluZm9fZGJuYW1lKGNvbnN0IGNoYXIgKmNvbm5pbmZvLCBjb25zdCBjaGFy ICpkYm5hbWUpCit7CisJUFFFeHBCdWZmZXIgYnVmID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKwlj aGFyCSAgICpyZXQ7CisKKwlBc3NlcnQoY29ubmluZm8gIT0gTlVMTCk7CisKKwlhcHBlbmRQUUV4 cEJ1ZmZlclN0cihidWYsIGNvbm5pbmZvKTsKKwlhcHBlbmRQUUV4cEJ1ZmZlcihidWYsICIgZGJu YW1lPSVzIiwgZGJuYW1lKTsKKworCXJldCA9IHBnX3N0cmR1cChidWYtPmRhdGEpOworCWRlc3Ry b3lQUUV4cEJ1ZmZlcihidWYpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFN0b3JlIHB1 YmxpY2F0aW9uIGFuZCBzdWJzY3JpcHRpb24gaW5mb3JtYXRpb24uCisgKi8KK3N0YXRpYyBMb2dp Y2FsUmVwSW5mbyAqCitzdG9yZV9wdWJfc3ViX2luZm8oY29uc3QgY2hhciAqcHViX2Jhc2VfY29u bmluZm8sIGNvbnN0IGNoYXIgKnN1Yl9iYXNlX2Nvbm5pbmZvKQoreworCUxvZ2ljYWxSZXBJbmZv ICpkYmluZm87CisJU2ltcGxlU3RyaW5nTGlzdENlbGwgKmNlbGw7CisJaW50CQkJaSA9IDA7CisK KwlkYmluZm8gPSAoTG9naWNhbFJlcEluZm8gKikgcGdfbWFsbG9jKG51bV9kYnMgKiBzaXplb2Yo TG9naWNhbFJlcEluZm8pKTsKKworCWZvciAoY2VsbCA9IGRhdGFiYXNlX25hbWVzLmhlYWQ7IGNl bGw7IGNlbGwgPSBjZWxsLT5uZXh0KQorCXsKKwkJY2hhcgkgICAqY29ubmluZm87CisKKwkJLyog UHVibGlzaGVyLiAqLworCQljb25uaW5mbyA9IGNvbmNhdF9jb25uaW5mb19kYm5hbWUocHViX2Jh c2VfY29ubmluZm8sIGNlbGwtPnZhbCk7CisJCWRiaW5mb1tpXS5wdWJjb25uaW5mbyA9IGNvbm5p bmZvOworCQlkYmluZm9baV0uZGJuYW1lID0gY2VsbC0+dmFsOworCQlkYmluZm9baV0ubWFkZV9y ZXBsc2xvdCA9IGZhbHNlOworCQlkYmluZm9baV0ubWFkZV9wdWJsaWNhdGlvbiA9IGZhbHNlOwor CQlkYmluZm9baV0ubWFkZV9zdWJzY3JpcHRpb24gPSBmYWxzZTsKKwkJLyogb3RoZXIgc3RydWN0 IGZpZWxkcyB3aWxsIGJlIGZpbGxlZCBsYXRlci4gKi8KKworCQkvKiBTdWJzY3JpYmVyLiAqLwor CQljb25uaW5mbyA9IGNvbmNhdF9jb25uaW5mb19kYm5hbWUoc3ViX2Jhc2VfY29ubmluZm8sIGNl bGwtPnZhbCk7CisJCWRiaW5mb1tpXS5zdWJjb25uaW5mbyA9IGNvbm5pbmZvOworCisJCWkrKzsK Kwl9CisKKwlyZXR1cm4gZGJpbmZvOworfQorCitzdGF0aWMgUEdjb25uICoKK2Nvbm5lY3RfZGF0 YWJhc2UoY29uc3QgY2hhciAqY29ubmluZm8pCit7CisJUEdjb25uCSAgICpjb25uOworCVBHcmVz dWx0ICAgKnJlczsKKwljb25zdCBjaGFyICpyY29ubmluZm87CisKKwkvKiBsb2dpY2FsIHJlcGxp Y2F0aW9uIG1vZGUgKi8KKwlyY29ubmluZm8gPSBwc3ByaW50ZigiJXMgcmVwbGljYXRpb249ZGF0 YWJhc2UiLCBjb25uaW5mbyk7CisKKwljb25uID0gUFFjb25uZWN0ZGIocmNvbm5pbmZvKTsKKwlp ZiAoUFFzdGF0dXMoY29ubikgIT0gQ09OTkVDVElPTl9PSykKKwl7CisJCXBnX2xvZ19lcnJvcigi Y29ubmVjdGlvbiB0byBkYXRhYmFzZSBmYWlsZWQ6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikp OworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBzZWN1cmUgc2VhcmNoX3BhdGggKi8KKwlyZXMg PSBQUWV4ZWMoY29ubiwgQUxXQVlTX1NFQ1VSRV9TRUFSQ0hfUEFUSF9TUUwpOworCWlmIChQUXJl c3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX1RVUExFU19PSykKKwl7CisJCXBnX2xvZ19lcnJvcigi Y291bGQgbm90IGNsZWFyIHNlYXJjaF9wYXRoOiAlcyIsIFBRcmVzdWx0RXJyb3JNZXNzYWdlKHJl cykpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJUFFjbGVhcihyZXMpOworCisJcmV0dXJuIGNvbm47 Cit9CisKK3N0YXRpYyB2b2lkCitkaXNjb25uZWN0X2RhdGFiYXNlKFBHY29ubiAqY29ubikKK3sK KwlBc3NlcnQoY29ubiAhPSBOVUxMKTsKKworCVBRZmluaXNoKGNvbm4pOworfQorCisvKgorICog T2J0YWluIHRoZSBzeXN0ZW0gaWRlbnRpZmllciB1c2luZyB0aGUgcHJvdmlkZWQgY29ubmVjdGlv bi4gSXQgd2lsbCBiZSB1c2VkCisgKiB0byBjb21wYXJlIGlmIGEgZGF0YSBkaXJlY3RvcnkgaXMg YSBjbG9uZSBvZiBhbm90aGVyIG9uZS4KKyAqLworc3RhdGljIHVpbnQ2NAorZ2V0X3N5c2lkX2Zy b21fY29ubihjb25zdCBjaGFyICpjb25uaW5mbykKK3sKKwlQR2Nvbm4JICAgKmNvbm47CisJUEdy ZXN1bHQgICAqcmVzOworCXVpbnQ2NAkJc3lzaWQ7CisKKwlwZ19sb2dfaW5mbygiZ2V0dGluZyBz eXN0ZW0gaWRlbnRpZmllciBmcm9tIHB1Ymxpc2hlciIpOworCisJY29ubiA9IGNvbm5lY3RfZGF0 YWJhc2UoY29ubmluZm8pOworCWlmIChjb25uID09IE5VTEwpCisJCWV4aXQoMSk7CisKKwlyZXMg PSBQUWV4ZWMoY29ubiwgIklERU5USUZZX1NZU1RFTSIpOworCWlmIChQUXJlc3VsdFN0YXR1cyhy ZXMpICE9IFBHUkVTX1RVUExFU19PSykKKwl7CisJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IHNl bmQgcmVwbGljYXRpb24gY29tbWFuZCBcIiVzXCI6ICVzIiwKKwkJCQkJICJJREVOVElGWV9TWVNU RU0iLCBQUXJlc3VsdEVycm9yTWVzc2FnZShyZXMpKTsKKwkJUFFjbGVhcihyZXMpOworCQlkaXNj b25uZWN0X2RhdGFiYXNlKGNvbm4pOworCQlleGl0KDEpOworCX0KKwlpZiAoUFFudHVwbGVzKHJl cykgIT0gMSB8fCBQUW5maWVsZHMocmVzKSA8IDMpCisJeworCQlwZ19sb2dfZXJyb3IoImNvdWxk IG5vdCBpZGVudGlmeSBzeXN0ZW06IGdvdCAlZCByb3dzIGFuZCAlZCBmaWVsZHMsIGV4cGVjdGVk ICVkIHJvd3MgYW5kICVkIG9yIG1vcmUgZmllbGRzIiwKKwkJCQkJIFBRbnR1cGxlcyhyZXMpLCBQ UW5maWVsZHMocmVzKSwgMSwgMyk7CisKKwkJUFFjbGVhcihyZXMpOworCQlkaXNjb25uZWN0X2Rh dGFiYXNlKGNvbm4pOworCQlleGl0KDEpOworCX0KKworCXN5c2lkID0gc3RydG91NjQoUFFnZXR2 YWx1ZShyZXMsIDAsIDApLCBOVUxMLCAxMCk7CisKKwlwZ19sb2dfaW5mbygic3lzdGVtIGlkZW50 aWZpZXIgaXMgJWxsdSBvbiBwdWJsaXNoZXIiLCAodW5zaWduZWQgbG9uZyBsb25nKSBzeXNpZCk7 CisKKwlkaXNjb25uZWN0X2RhdGFiYXNlKGNvbm4pOworCisJcmV0dXJuIHN5c2lkOworfQorCisv KgorICogT2J0YWluIHRoZSBzeXN0ZW0gaWRlbnRpZmllciBmcm9tIGNvbnRyb2wgZmlsZS4gSXQg d2lsbCBiZSB1c2VkIHRvIGNvbXBhcmUKKyAqIGlmIGEgZGF0YSBkaXJlY3RvcnkgaXMgYSBjbG9u ZSBvZiBhbm90aGVyIG9uZS4gVGhpcyByb3V0aW5lIGlzIHVzZWQgbG9jYWxseQorICogYW5kIGF2 b2lkcyBhIHJlcGxpY2F0aW9uIGNvbm5lY3Rpb24uCisgKi8KK3N0YXRpYyB1aW50NjQKK2dldF9j b250cm9sX2Zyb21fZGF0YWRpcihjb25zdCBjaGFyICpkYXRhZGlyKQoreworCUNvbnRyb2xGaWxl RGF0YSAqY2Y7CisJYm9vbAkJY3JjX29rOworCXVpbnQ2NAkJc3lzaWQ7CisKKwlwZ19sb2dfaW5m bygiZ2V0dGluZyBzeXN0ZW0gaWRlbnRpZmllciBmcm9tIHN1YnNjcmliZXIiKTsKKworCWNmID0g Z2V0X2NvbnRyb2xmaWxlKGRhdGFkaXIsICZjcmNfb2spOworCWlmICghY3JjX29rKQorCXsKKwkJ cGdfbG9nX2Vycm9yKCJjb250cm9sIGZpbGUgYXBwZWFycyB0byBiZSBjb3JydXB0Iik7CisJCWV4 aXQoMSk7CisJfQorCisJc3lzaWQgPSBjZi0+c3lzdGVtX2lkZW50aWZpZXI7CisKKwlwZ19sb2df aW5mbygic3lzdGVtIGlkZW50aWZpZXIgaXMgJWxsdSBvbiBzdWJzY3JpYmVyIiwgKHVuc2lnbmVk IGxvbmcgbG9uZykgc3lzaWQpOworCisJcGZyZWUoY2YpOworCisJcmV0dXJuIHN5c2lkOworfQor CisvKgorICogTW9kaWZ5IHRoZSBzeXN0ZW0gaWRlbnRpZmllci4gU2luY2UgYSBzdGFuZGJ5IHNl cnZlciBwcmVzZXJ2ZXMgdGhlIHN5c3RlbQorICogaWRlbnRpZmllciwgaXQgbWFrZXMgc2Vuc2Ug dG8gY2hhbmdlIGl0IHRvIGF2b2lkIHNpdHVhdGlvbnMgaW4gd2hpY2ggV0FMCisgKiBmaWxlcyBm cm9tIG9uZSBvZiB0aGUgc3lzdGVtcyBtaWdodCBiZSB1c2VkIGluIHRoZSBvdGhlciBvbmUuCisg Ki8KK3N0YXRpYyB2b2lkCittb2RpZnlfc3lzaWQoY29uc3QgY2hhciAqcGdfcmVzZXR3YWxfcGF0 aCwgY29uc3QgY2hhciAqZGF0YWRpcikKK3sKKwlDb250cm9sRmlsZURhdGEgKmNmOworCWJvb2wJ CWNyY19vazsKKwlzdHJ1Y3QgdGltZXZhbCB0djsKKworCWNoYXIJICAgKmNtZF9zdHI7CisJaW50 CQkJcmM7CisKKwlwZ19sb2dfaW5mbygibW9kaWZ5aW5nIHN5c3RlbSBpZGVudGlmaWVyIGZyb20g c3Vic2NyaWJlciIpOworCisJY2YgPSBnZXRfY29udHJvbGZpbGUoZGF0YWRpciwgJmNyY19vayk7 CisJaWYgKCFjcmNfb2spCisJeworCQlwZ19sb2dfZXJyb3IoImNvbnRyb2wgZmlsZSBhcHBlYXJz IHRvIGJlIGNvcnJ1cHQiKTsKKwkJZXhpdCgxKTsKKwl9CisKKwkvKgorCSAqIFNlbGVjdCBhIG5l dyBzeXN0ZW0gaWRlbnRpZmllci4KKwkgKgorCSAqIFhYWCB0aGlzIGNvZGUgd2FzIGV4dHJhY3Rl ZCBmcm9tIEJvb3RTdHJhcFhMT0coKS4KKwkgKi8KKwlnZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKTsK KwljZi0+c3lzdGVtX2lkZW50aWZpZXIgPSAoKHVpbnQ2NCkgdHYudHZfc2VjKSA8PCAzMjsKKwlj Zi0+c3lzdGVtX2lkZW50aWZpZXIgfD0gKCh1aW50NjQpIHR2LnR2X3VzZWMpIDw8IDEyOworCWNm LT5zeXN0ZW1faWRlbnRpZmllciB8PSBnZXRwaWQoKSAmIDB4RkZGOworCisJaWYgKCFkcnlfcnVu KQorCQl1cGRhdGVfY29udHJvbGZpbGUoZGF0YWRpciwgY2YsIHRydWUpOworCisJcGdfbG9nX2lu Zm8oInN5c3RlbSBpZGVudGlmaWVyIGlzICVsbHUgb24gc3Vic2NyaWJlciIsICh1bnNpZ25lZCBs b25nIGxvbmcpIGNmLT5zeXN0ZW1faWRlbnRpZmllcik7CisKKwlwZ19sb2dfaW5mbygicnVubmlu ZyBwZ19yZXNldHdhbCBvbiB0aGUgc3Vic2NyaWJlciIpOworCisJY21kX3N0ciA9IHBzcHJpbnRm KCJcIiVzXCIgLUQgXCIlc1wiIiwgcGdfcmVzZXR3YWxfcGF0aCwgZGF0YWRpcik7CisKKwlwZ19s b2dfZGVidWcoImNvbW1hbmQgaXM6ICVzIiwgY21kX3N0cik7CisKKwlpZiAoIWRyeV9ydW4pCisJ eworCQlyYyA9IHN5c3RlbShjbWRfc3RyKTsKKwkJaWYgKHJjID09IDApCisJCQlwZ19sb2dfaW5m bygic3Vic2NyaWJlciBzdWNjZXNzZnVsbHkgY2hhbmdlZCB0aGUgc3lzdGVtIGlkZW50aWZpZXIi KTsKKwkJZWxzZQorCQkJcGdfbG9nX2Vycm9yKCJzdWJzY3JpYmVyIGZhaWxlZCB0byBjaGFuZ2Ug c3lzdGVtIGlkZW50aWZpZXI6IGV4aXQgY29kZTogJWQiLCByYyk7CisJfQorCisJcGZyZWUoY2Yp OworfQorCisvKgorICogUmV0dXJuIGEgcGFsbG9jJ2Qgc2xvdCBuYW1lIGlmIHRoZSByZXBsaWNh dGlvbiBpcyB1c2luZyBvbmUuCisgKi8KK3N0YXRpYyBjaGFyICoKK3VzZV9wcmltYXJ5X3Nsb3Rf bmFtZSh2b2lkKQoreworCVBHY29ubgkgICAqY29ubjsKKwlQR3Jlc3VsdCAgICpyZXM7CisJUFFF eHBCdWZmZXIgc3RyID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKwljaGFyCSAgICpzbG90X25hbWU7 CisKKwljb25uID0gY29ubmVjdF9kYXRhYmFzZShkYmluZm9bMF0uc3ViY29ubmluZm8pOworCWlm IChjb25uID09IE5VTEwpCisJCWV4aXQoMSk7CisKKwlyZXMgPSBQUWV4ZWMoY29ubiwgIlNFTEVD VCBzZXR0aW5nIEZST00gcGdfc2V0dGluZ3MgV0hFUkUgbmFtZSA9ICdwcmltYXJ5X3Nsb3RfbmFt ZSciKTsKKwlpZiAoUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19UVVBMRVNfT0spCisJewor CQlwZ19sb2dfZXJyb3IoImNvdWxkIG5vdCBvYnRhaW4gcGFyYW1ldGVyIGluZm9ybWF0aW9uOiAl cyIsIFBRcmVzdWx0RXJyb3JNZXNzYWdlKHJlcykpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkv KgorCSAqIElmIHByaW1hcnlfc2xvdF9uYW1lIGlzIGFuIGVtcHR5IHN0cmluZywgdGhlIGN1cnJl bnQgcmVwbGljYXRpb24KKwkgKiBjb25uZWN0aW9uIGlzIG5vdCB1c2luZyBhIHJlcGxpY2F0aW9u IHNsb3QsIGJhaWwgb3V0LgorCSAqLworCWlmIChzdHJjbXAoUFFnZXR2YWx1ZShyZXMsIDAsIDAp LCAiIikgPT0gMCkKKwl7CisJCVBRY2xlYXIocmVzKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJ c2xvdF9uYW1lID0gcGdfc3RyZHVwKFBRZ2V0dmFsdWUocmVzLCAwLCAwKSk7CisJUFFjbGVhcihy ZXMpOworCisJZGlzY29ubmVjdF9kYXRhYmFzZShjb25uKTsKKworCWNvbm4gPSBjb25uZWN0X2Rh dGFiYXNlKGRiaW5mb1swXS5wdWJjb25uaW5mbyk7CisJaWYgKGNvbm4gPT0gTlVMTCkKKwkJZXhp dCgxKTsKKworCWFwcGVuZFBRRXhwQnVmZmVyKHN0ciwKKwkJCQkJICAiU0VMRUNUIDEgRlJPTSBw Z19yZXBsaWNhdGlvbl9zbG90cyByIElOTkVSIEpPSU4gcGdfc3RhdF9hY3Rpdml0eSBhIE9OIChy LmFjdGl2ZV9waWQgPSBhLnBpZCkgV0hFUkUgc2xvdF9uYW1lID0gJyVzJyIsIHNsb3RfbmFtZSk7 CisKKwlwZ19sb2dfZGVidWcoImNvbW1hbmQgaXM6ICVzIiwgc3RyLT5kYXRhKTsKKworCXJlcyA9 IFBRZXhlYyhjb25uLCBzdHItPmRhdGEpOworCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBH UkVTX1RVUExFU19PSykKKwl7CisJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IG9idGFpbiByZXBs aWNhdGlvbiBzbG90IGluZm9ybWF0aW9uOiAlcyIsIFBRcmVzdWx0RXJyb3JNZXNzYWdlKHJlcykp OworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoUFFudHVwbGVzKHJlcykgIT0gMSkKKwl7CisJ CXBnX2xvZ19lcnJvcigiY291bGQgbm90IG9idGFpbiByZXBsaWNhdGlvbiBzbG90IGluZm9ybWF0 aW9uOiBnb3QgJWQgcm93cywgZXhwZWN0ZWQgJWQgcm93IiwKKwkJCQkJIFBRbnR1cGxlcyhyZXMp LCAxKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJUFFjbGVhcihyZXMpOworCWRpc2Nvbm5lY3Rf ZGF0YWJhc2UoY29ubik7CisKKwlyZXR1cm4gc2xvdF9uYW1lOworfQorCitzdGF0aWMgYm9vbAor Y3JlYXRlX2FsbF9sb2dpY2FsX3JlcGxpY2F0aW9uX3Nsb3RzKExvZ2ljYWxSZXBJbmZvICpkYmlu Zm8pCit7CisJaW50CQkJaTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fZGJzOyBpKyspCisJewor CQlQR2Nvbm4JICAgKmNvbm47CisJCVBHcmVzdWx0ICAgKnJlczsKKwkJY2hhcgkJcmVwbHNsb3Ru YW1lW05BTUVEQVRBTEVOXTsKKworCQljb25uID0gY29ubmVjdF9kYXRhYmFzZShkYmluZm9baV0u cHViY29ubmluZm8pOworCQlpZiAoY29ubiA9PSBOVUxMKQorCQkJZXhpdCgxKTsKKworCQlyZXMg PSBQUWV4ZWMoY29ubiwKKwkJCQkJICJTRUxFQ1Qgb2lkIEZST00gcGdfY2F0YWxvZy5wZ19kYXRh YmFzZSBXSEVSRSBkYXRuYW1lID0gY3VycmVudF9kYXRhYmFzZSgpIik7CisJCWlmIChQUXJlc3Vs dFN0YXR1cyhyZXMpICE9IFBHUkVTX1RVUExFU19PSykKKwkJeworCQkJcGdfbG9nX2Vycm9yKCJj b3VsZCBub3Qgb2J0YWluIGRhdGFiYXNlIE9JRDogJXMiLCBQUXJlc3VsdEVycm9yTWVzc2FnZShy ZXMpKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCWlmIChQUW50dXBsZXMocmVzKSAhPSAx KQorCQl7CisJCQlwZ19sb2dfZXJyb3IoImNvdWxkIG5vdCBvYnRhaW4gZGF0YWJhc2UgT0lEOiBn b3QgJWQgcm93cywgZXhwZWN0ZWQgJWQgcm93cyIsCisJCQkJCQkgUFFudHVwbGVzKHJlcyksIDEp OworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJLyogUmVtZW1iZXIgZGF0YWJhc2UgT0lELiAq LworCQlkYmluZm9baV0ub2lkID0gc3RydG91bChQUWdldHZhbHVlKHJlcywgMCwgMCksIE5VTEws IDEwKTsKKworCQlQUWNsZWFyKHJlcyk7CisKKwkJLyoKKwkJICogQnVpbGQgdGhlIHJlcGxpY2F0 aW9uIHNsb3QgbmFtZS4gVGhlIG5hbWUgbXVzdCBub3QgZXhjZWVkCisJCSAqIE5BTUVEQVRBTEVO IC0gMS4gVGhpcyBjdXJyZW50IHNjaGVtYSB1c2VzIGEgbWF4aW11bSBvZiAzNgorCQkgKiBjaGFy YWN0ZXJzICgxNCArIDEwICsgMSArIDEwICsgJ1wwJykuIFN5c3RlbSBpZGVudGlmaWVyIGlzIGlu Y2x1ZGVkCisJCSAqIHRvIHJlZHVjZSB0aGUgcHJvYmFiaWxpdHkgb2YgY29sbGlzaW9uLiBCeSBk ZWZhdWx0LCBzdWJzY3JpcHRpb24KKwkJICogbmFtZSBpcyB1c2VkIGFzIHJlcGxpY2F0aW9uIHNs b3QgbmFtZS4KKwkJICovCisJCXNucHJpbnRmKHJlcGxzbG90bmFtZSwgc2l6ZW9mKHJlcGxzbG90 bmFtZSksCisJCQkJICJwZ19zdWJzY3JpYmVyXyV1XyVkIiwKKwkJCQkgZGJpbmZvW2ldLm9pZCwK KwkJCQkgKGludCkgZ2V0cGlkKCkpOworCQlkYmluZm9baV0uc3VibmFtZSA9IHBnX3N0cmR1cChy ZXBsc2xvdG5hbWUpOworCisJCS8qIENyZWF0ZSByZXBsaWNhdGlvbiBzbG90IG9uIHB1Ymxpc2hl ci4gKi8KKwkJaWYgKGNyZWF0ZV9sb2dpY2FsX3JlcGxpY2F0aW9uX3Nsb3QoY29ubiwgJmRiaW5m b1tpXSwgcmVwbHNsb3RuYW1lKSAhPSBOVUxMIHx8IGRyeV9ydW4pCisJCQlwZ19sb2dfaW5mbygi Y3JlYXRlIHJlcGxpY2F0aW9uIHNsb3QgXCIlc1wiIG9uIHB1Ymxpc2hlciIsIHJlcGxzbG90bmFt ZSk7CisJCWVsc2UKKwkJCXJldHVybiBmYWxzZTsKKworCQlkaXNjb25uZWN0X2RhdGFiYXNlKGNv bm4pOworCX0KKworCXJldHVybiB0cnVlOworfQorCisvKgorICogQ3JlYXRlIGEgbG9naWNhbCBy ZXBsaWNhdGlvbiBzbG90IGFuZCByZXR1cm5zIGEgY29uc2lzdGVudCBMU04uIFRoZSByZXR1cm5l ZAorICogTFNOIG1pZ2h0IGJlIHVzZWQgdG8gY2F0Y2ggdXAgdGhlIHN1YnNjcmliZXIgdXAgdG8g dGhlIHJlcXVpcmVkIHBvaW50LgorICoKKyAqIENyZWF0ZVJlcGxpY2F0aW9uU2xvdCgpIGlzIG5v dCB1c2VkIGJlY2F1c2UgaXQgZG9lcyBub3QgcHJvdmlkZSB0aGUgb25lLXJvdworICogcmVzdWx0 IHNldCB0aGF0IGNvbnRhaW5zIHRoZSBjb25zaXN0ZW50IExTTi4KKyAqLworc3RhdGljIGNoYXIg KgorY3JlYXRlX2xvZ2ljYWxfcmVwbGljYXRpb25fc2xvdChQR2Nvbm4gKmNvbm4sIExvZ2ljYWxS ZXBJbmZvICpkYmluZm8sCisJCQkJCQkJCWNoYXIgKnNsb3RfbmFtZSkKK3sKKwlQUUV4cEJ1ZmZl ciBzdHIgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCVBHcmVzdWx0ICAgKnJlcyA9IE5VTEw7CisJ Y2hhcgkgICAqbHNuID0gTlVMTDsKKwlib29sCQl0cmFuc2llbnRfcmVwbHNsb3QgPSBmYWxzZTsK KworCUFzc2VydChjb25uICE9IE5VTEwpOworCisJLyoKKwkgKiBJZiBubyBzbG90IG5hbWUgaXMg aW5mb3JtZWQsIGl0IGlzIGEgdHJhbnNpZW50IHJlcGxpY2F0aW9uIHNsb3QgdXNlZAorCSAqIG9u bHkgZm9yIGNhdGNoIHVwIHB1cnBvc2VzLgorCSAqLworCWlmIChzbG90X25hbWVbMF0gPT0gJ1ww JykKKwl7CisJCXNucHJpbnRmKHNsb3RfbmFtZSwgTkFNRURBVEFMRU4sICJwZ19zdWJzY3JpYmVy XyVkX3N0YXJ0cG9pbnQiLAorCQkJCSAoaW50KSBnZXRwaWQoKSk7CisJCXRyYW5zaWVudF9yZXBs c2xvdCA9IHRydWU7CisJfQorCisJcGdfbG9nX2luZm8oImNyZWF0aW5nIHRoZSByZXBsaWNhdGlv biBzbG90IFwiJXNcIiBvbiBkYXRhYmFzZSBcIiVzXCIiLCBzbG90X25hbWUsIGRiaW5mby0+ZGJu YW1lKTsKKworCWFwcGVuZFBRRXhwQnVmZmVyKHN0ciwgIkNSRUFURV9SRVBMSUNBVElPTl9TTE9U IFwiJXNcIiIsIHNsb3RfbmFtZSk7CisJYXBwZW5kUFFFeHBCdWZmZXJTdHIoc3RyLCAiIExPR0lD QUwgXCJwZ291dHB1dFwiIE5PRVhQT1JUX1NOQVBTSE9UIik7CisKKwlwZ19sb2dfZGVidWcoImNv bW1hbmQgaXM6ICVzIiwgc3RyLT5kYXRhKTsKKworCWlmICghZHJ5X3J1bikKKwl7CisJCXJlcyA9 IFBRZXhlYyhjb25uLCBzdHItPmRhdGEpOworCQlpZiAoUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQ R1JFU19UVVBMRVNfT0spCisJCXsKKwkJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IGNyZWF0ZSBy ZXBsaWNhdGlvbiBzbG90IFwiJXNcIiBvbiBkYXRhYmFzZSBcIiVzXCI6ICVzIiwgc2xvdF9uYW1l LCBkYmluZm8tPmRibmFtZSwKKwkJCQkJCSBQUXJlc3VsdEVycm9yTWVzc2FnZShyZXMpKTsKKwkJ CXJldHVybiBsc247CisJCX0KKwl9CisKKwkvKiBmb3IgY2xlYW51cCBwdXJwb3NlcyAqLworCWlm ICh0cmFuc2llbnRfcmVwbHNsb3QpCisJCW1hZGVfdHJhbnNpZW50X3JlcGxzbG90ID0gdHJ1ZTsK KwllbHNlCisJCWRiaW5mby0+bWFkZV9yZXBsc2xvdCA9IHRydWU7CisKKwlpZiAoIWRyeV9ydW4p CisJeworCQlsc24gPSBwZ19zdHJkdXAoUFFnZXR2YWx1ZShyZXMsIDAsIDEpKTsKKwkJUFFjbGVh cihyZXMpOworCX0KKworCWRlc3Ryb3lQUUV4cEJ1ZmZlcihzdHIpOworCisJcmV0dXJuIGxzbjsK K30KKworc3RhdGljIHZvaWQKK2Ryb3BfcmVwbGljYXRpb25fc2xvdChQR2Nvbm4gKmNvbm4sIExv Z2ljYWxSZXBJbmZvICpkYmluZm8sIGNvbnN0IGNoYXIgKnNsb3RfbmFtZSkKK3sKKwlQUUV4cEJ1 ZmZlciBzdHIgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCVBHcmVzdWx0ICAgKnJlczsKKworCUFz c2VydChjb25uICE9IE5VTEwpOworCisJcGdfbG9nX2luZm8oImRyb3BwaW5nIHRoZSByZXBsaWNh dGlvbiBzbG90IFwiJXNcIiBvbiBkYXRhYmFzZSBcIiVzXCIiLCBzbG90X25hbWUsIGRiaW5mby0+ ZGJuYW1lKTsKKworCWFwcGVuZFBRRXhwQnVmZmVyKHN0ciwgIkRST1BfUkVQTElDQVRJT05fU0xP VCBcIiVzXCIiLCBzbG90X25hbWUpOworCisJcGdfbG9nX2RlYnVnKCJjb21tYW5kIGlzOiAlcyIs IHN0ci0+ZGF0YSk7CisKKwlpZiAoIWRyeV9ydW4pCisJeworCQlyZXMgPSBQUWV4ZWMoY29ubiwg c3RyLT5kYXRhKTsKKwkJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09NTUFORF9P SykKKwkJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IGRyb3AgcmVwbGljYXRpb24gc2xvdCBcIiVz XCIgb24gZGF0YWJhc2UgXCIlc1wiOiAlcyIsIHNsb3RfbmFtZSwgZGJpbmZvLT5kYm5hbWUsCisJ CQkJCQkgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCisJCVBRY2xlYXIocmVzKTsKKwl9CisKKwlk ZXN0cm95UFFFeHBCdWZmZXIoc3RyKTsKK30KKworLyoKKyAqIFJlcG9ydHMgYSBzdWl0YWJsZSBt ZXNzYWdlIGlmIHBnX2N0bCBmYWlscy4KKyAqLworc3RhdGljIHZvaWQKK3BnX2N0bF9zdGF0dXMo Y29uc3QgY2hhciAqcGdfY3RsX2NtZCwgaW50IHJjLCBpbnQgYWN0aW9uKQoreworCWlmIChyYyAh PSAwKQorCXsKKwkJaWYgKFdJRkVYSVRFRChyYykpCisJCXsKKwkJCXBnX2xvZ19lcnJvcigicGdf Y3RsIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAlZCIsIFdFWElUU1RBVFVTKHJjKSk7CisJCX0KKwkJ ZWxzZSBpZiAoV0lGU0lHTkFMRUQocmMpKQorCQl7CisjaWYgZGVmaW5lZChXSU4zMikKKwkJCXBn X2xvZ19lcnJvcigicGdfY3RsIHdhcyB0ZXJtaW5hdGVkIGJ5IGV4Y2VwdGlvbiAweCVYIiwgV1RF Uk1TSUcocmMpKTsKKwkJCXBnX2xvZ19lcnJvcl9kZXRhaWwoIlNlZSBDIGluY2x1ZGUgZmlsZSBc Im50c3RhdHVzLmhcIiBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgaGV4YWRlY2ltYWwgdmFsdWUu Iik7CisjZWxzZQorCQkJcGdfbG9nX2Vycm9yKCJwZ19jdGwgd2FzIHRlcm1pbmF0ZWQgYnkgc2ln bmFsICVkOiAlcyIsCisJCQkJCQkgV1RFUk1TSUcocmMpLCBwZ19zdHJzaWduYWwoV1RFUk1TSUco cmMpKSk7CisjZW5kaWYKKwkJfQorCQllbHNlCisJCXsKKwkJCXBnX2xvZ19lcnJvcigicGdfY3Rs IGV4aXRlZCB3aXRoIHVucmVjb2duaXplZCBzdGF0dXMgJWQiLCByYyk7CisJCX0KKworCQlwZ19s b2dfZXJyb3JfZGV0YWlsKCJUaGUgZmFpbGVkIGNvbW1hbmQgd2FzOiAlcyIsIHBnX2N0bF9jbWQp OworCQlleGl0KDEpOworCX0KKworCWlmIChhY3Rpb24pCisJCXBnX2xvZ19pbmZvKCJwb3N0bWFz dGVyIHdhcyBzdGFydGVkIik7CisJZWxzZQorCQlwZ19sb2dfaW5mbygicG9zdG1hc3RlciB3YXMg c3RvcHBlZCIpOworfQorCisvKgorICogUmV0dXJucyBhZnRlciB0aGUgc2VydmVyIGZpbmlzaGVz IHRoZSByZWNvdmVyeSBwcm9jZXNzLgorICovCitzdGF0aWMgdm9pZAord2FpdF9mb3JfZW5kX3Jl Y292ZXJ5KGNvbnN0IGNoYXIgKmNvbm5pbmZvKQoreworCVBHY29ubgkgICAqY29ubjsKKwlQR3Jl c3VsdCAgICpyZXM7CisJaW50CQkJc3RhdHVzID0gUE9TVE1BU1RFUl9TVElMTF9TVEFSVElORzsK KworCXBnX2xvZ19pbmZvKCJ3YWl0aW5nIHRoZSBwb3N0bWFzdGVyIHRvIHJlYWNoIHRoZSBjb25z aXN0ZW50IHN0YXRlIik7CisKKwljb25uID0gY29ubmVjdF9kYXRhYmFzZShjb25uaW5mbyk7CisJ aWYgKGNvbm4gPT0gTlVMTCkKKwkJZXhpdCgxKTsKKworCWZvciAoOzspCisJeworCQlib29sCQlp bl9yZWNvdmVyeTsKKworCQlyZXMgPSBQUWV4ZWMoY29ubiwgIlNFTEVDVCBwZ19jYXRhbG9nLnBn X2lzX2luX3JlY292ZXJ5KCkiKTsKKworCQlpZiAoUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JF U19UVVBMRVNfT0spCisJCXsKKwkJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IG9idGFpbiByZWNv dmVyeSBwcm9ncmVzcyIpOworCQkJZXhpdCgxKTsKKwkJfQorCisJCWlmIChQUW50dXBsZXMocmVz KSAhPSAxKQorCQl7CisJCQlwZ19sb2dfZXJyb3IoInVuZXhwZWN0ZWQgcmVzdWx0IGZyb20gcGdf aXNfaW5fcmVjb3ZlcnkgZnVuY3Rpb24iKTsKKwkJCWV4aXQoMSk7CisJCX0KKworCQlpbl9yZWNv dmVyeSA9IChzdHJjbXAoUFFnZXR2YWx1ZShyZXMsIDAsIDApLCAidCIpID09IDApOworCisJCVBR Y2xlYXIocmVzKTsKKworCQkvKgorCQkgKiBEb2VzIHRoZSByZWNvdmVyeSBwcm9jZXNzIGZpbmlz aD8gSW4gZHJ5IHJ1biBtb2RlLCB0aGVyZSBpcyBubworCQkgKiByZWNvdmVyeSBtb2RlLiBCYWls IG91dCBhcyB0aGUgcmVjb3ZlcnkgcHJvY2VzcyBoYXMgZW5kZWQuCisJCSAqLworCQlpZiAoIWlu X3JlY292ZXJ5IHx8IGRyeV9ydW4pCisJCXsKKwkJCXN0YXR1cyA9IFBPU1RNQVNURVJfUkVBRFk7 CisJCQlicmVhazsKKwkJfQorCisJCS8qIEtlZXAgd2FpdGluZy4gKi8KKwkJcGdfdXNsZWVwKFdB SVRfSU5URVJWQUwgKiBVU0VDX1BFUl9TRUMpOworCX0KKworCWRpc2Nvbm5lY3RfZGF0YWJhc2Uo Y29ubik7CisKKwlpZiAoc3RhdHVzID09IFBPU1RNQVNURVJfU1RJTExfU1RBUlRJTkcpCisJewor CQlwZ19sb2dfZXJyb3IoInNlcnZlciBkaWQgbm90IGVuZCByZWNvdmVyeSIpOworCQlleGl0KDEp OworCX0KKworCXBnX2xvZ19pbmZvKCJwb3N0bWFzdGVyIHJlYWNoZWQgdGhlIGNvbnNpc3RlbnQg c3RhdGUiKTsKK30KKworLyoKKyAqIENyZWF0ZSBhIHB1YmxpY2F0aW9uIHRoYXQgaW5jbHVkZXMg YWxsIHRhYmxlcyBpbiB0aGUgZGF0YWJhc2UuCisgKi8KK3N0YXRpYyB2b2lkCitjcmVhdGVfcHVi bGljYXRpb24oUEdjb25uICpjb25uLCBMb2dpY2FsUmVwSW5mbyAqZGJpbmZvKQoreworCVBRRXhw QnVmZmVyIHN0ciA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisJUEdyZXN1bHQgICAqcmVzOworCisJ QXNzZXJ0KGNvbm4gIT0gTlVMTCk7CisKKwkvKiBDaGVjayBpZiB0aGUgcHVibGljYXRpb24gbmVl ZHMgdG8gYmUgY3JlYXRlZC4gKi8KKwlhcHBlbmRQUUV4cEJ1ZmZlcihzdHIsCisJCQkJCSAgIlNF TEVDVCBwdWJhbGx0YWJsZXMgRlJPTSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uIFdIRVJFIHB1 Ym5hbWUgPSAnJXMnIiwKKwkJCQkJICBkYmluZm8tPnB1Ym5hbWUpOworCXJlcyA9IFBRZXhlYyhj b25uLCBzdHItPmRhdGEpOworCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX1RVUExF U19PSykKKwl7CisJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IG9idGFpbiBwdWJsaWNhdGlvbiBp bmZvcm1hdGlvbjogJXMiLAorCQkJCQkgUFFyZXN1bHRFcnJvck1lc3NhZ2UocmVzKSk7CisJCVBR Y2xlYXIocmVzKTsKKwkJUFFmaW5pc2goY29ubik7CisJCWV4aXQoMSk7CisJfQorCisJaWYgKFBR bnR1cGxlcyhyZXMpID09IDEpCisJeworCQkvKgorCQkgKiBJZiBwdWJsaWNhdGlvbiBuYW1lIGFs cmVhZHkgZXhpc3RzIGFuZCBwdWJhbGx0YWJsZXMgaXMgdHJ1ZSwgbGV0J3MKKwkJICogdXNlIGl0 LiBBIHByZXZpb3VzIHJ1biBvZiBwZ19zdWJzY3JpYmVyIG11c3QgaGF2ZSBjcmVhdGVkIHRoaXMK KwkJICogcHVibGljYXRpb24uIEJhaWwgb3V0LgorCQkgKi8KKwkJaWYgKHN0cmNtcChQUWdldHZh bHVlKHJlcywgMCwgMCksICJ0IikgPT0gMCkKKwkJeworCQkJcGdfbG9nX2luZm8oInB1YmxpY2F0 aW9uIFwiJXNcIiBhbHJlYWR5IGV4aXN0cyIsIGRiaW5mby0+cHVibmFtZSk7CisJCQlyZXR1cm47 CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKgorCQkJICogVW5mb3J0dW5hdGVseSwgaWYgaXQgcmVh Y2hlcyB0aGlzIGNvZGUgcGF0aCwgaXQgd2lsbCBhbHdheXMKKwkJCSAqIGZhaWwgKHVubGVzcyB5 b3UgZGVjaWRlIHRvIGNoYW5nZSB0aGUgZXhpc3RpbmcgcHVibGljYXRpb24KKwkJCSAqIG5hbWUp LiBUaGF0J3MgYmFkIGJ1dCBpdCBpcyB2ZXJ5IHVubGlrZWx5IHRoYXQgdGhlIHVzZXIgd2lsbAor CQkJICogY2hvb3NlIGEgbmFtZSB3aXRoIHBnX3N1YnNjcmliZXJfIHByZWZpeCBmb2xsb3dlZCBi eSB0aGUgZXhhY3QKKwkJCSAqIGRhdGFiYXNlIG9pZCBpbiB3aGljaCBwdWJhbGx0YWJsZXMgaXMg ZmFsc2UuCisJCQkgKi8KKwkJCXBnX2xvZ19lcnJvcigicHVibGljYXRpb24gXCIlc1wiIGRvZXMg bm90IHJlcGxpY2F0ZSBjaGFuZ2VzIGZvciBhbGwgdGFibGVzIiwKKwkJCQkJCSBkYmluZm8tPnB1 Ym5hbWUpOworCQkJcGdfbG9nX2Vycm9yX2hpbnQoIkNvbnNpZGVyIHJlbmFtaW5nIHRoaXMgcHVi bGljYXRpb24uIik7CisJCQlQUWNsZWFyKHJlcyk7CisJCQlQUWZpbmlzaChjb25uKTsKKwkJCWV4 aXQoMSk7CisJCX0KKwl9CisKKwlQUWNsZWFyKHJlcyk7CisJcmVzZXRQUUV4cEJ1ZmZlcihzdHIp OworCisJcGdfbG9nX2luZm8oImNyZWF0aW5nIHB1YmxpY2F0aW9uIFwiJXNcIiBvbiBkYXRhYmFz ZSBcIiVzXCIiLCBkYmluZm8tPnB1Ym5hbWUsIGRiaW5mby0+ZGJuYW1lKTsKKworCWFwcGVuZFBR RXhwQnVmZmVyKHN0ciwgIkNSRUFURSBQVUJMSUNBVElPTiAlcyBGT1IgQUxMIFRBQkxFUyIsIGRi aW5mby0+cHVibmFtZSk7CisKKwlwZ19sb2dfZGVidWcoImNvbW1hbmQgaXM6ICVzIiwgc3RyLT5k YXRhKTsKKworCWlmICghZHJ5X3J1bikKKwl7CisJCXJlcyA9IFBRZXhlYyhjb25uLCBzdHItPmRh dGEpOworCQlpZiAoUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19DT01NQU5EX09LKQorCQl7 CisJCQlwZ19sb2dfZXJyb3IoImNvdWxkIG5vdCBjcmVhdGUgcHVibGljYXRpb24gXCIlc1wiIG9u IGRhdGFiYXNlIFwiJXNcIjogJXMiLAorCQkJCQkJIGRiaW5mby0+cHVibmFtZSwgZGJpbmZvLT5k Ym5hbWUsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwkJCVBRZmluaXNoKGNvbm4pOworCQkJZXhp dCgxKTsKKwkJfQorCX0KKworCS8qIGZvciBjbGVhbnVwIHB1cnBvc2VzICovCisJZGJpbmZvLT5t YWRlX3B1YmxpY2F0aW9uID0gdHJ1ZTsKKworCWlmICghZHJ5X3J1bikKKwkJUFFjbGVhcihyZXMp OworCisJZGVzdHJveVBRRXhwQnVmZmVyKHN0cik7Cit9CisKKy8qCisgKiBSZW1vdmUgcHVibGlj YXRpb24gaWYgaXQgY291bGRuJ3QgZmluaXNoIGFsbCBzdGVwcy4KKyAqLworc3RhdGljIHZvaWQK K2Ryb3BfcHVibGljYXRpb24oUEdjb25uICpjb25uLCBMb2dpY2FsUmVwSW5mbyAqZGJpbmZvKQor eworCVBRRXhwQnVmZmVyIHN0ciA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisJUEdyZXN1bHQgICAq cmVzOworCisJQXNzZXJ0KGNvbm4gIT0gTlVMTCk7CisKKwlwZ19sb2dfaW5mbygiZHJvcHBpbmcg cHVibGljYXRpb24gXCIlc1wiIG9uIGRhdGFiYXNlIFwiJXNcIiIsIGRiaW5mby0+cHVibmFtZSwg ZGJpbmZvLT5kYm5hbWUpOworCisJYXBwZW5kUFFFeHBCdWZmZXIoc3RyLCAiRFJPUCBQVUJMSUNB VElPTiAlcyIsIGRiaW5mby0+cHVibmFtZSk7CisKKwlwZ19sb2dfZGVidWcoImNvbW1hbmQgaXM6 ICVzIiwgc3RyLT5kYXRhKTsKKworCWlmICghZHJ5X3J1bikKKwl7CisJCXJlcyA9IFBRZXhlYyhj b25uLCBzdHItPmRhdGEpOworCQlpZiAoUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19DT01N QU5EX09LKQorCQkJcGdfbG9nX2Vycm9yKCJjb3VsZCBub3QgZHJvcCBwdWJsaWNhdGlvbiBcIiVz XCIgb24gZGF0YWJhc2UgXCIlc1wiOiAlcyIsIGRiaW5mby0+cHVibmFtZSwgZGJpbmZvLT5kYm5h bWUsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKworCQlQUWNsZWFyKHJlcyk7CisJfQorCisJZGVz dHJveVBRRXhwQnVmZmVyKHN0cik7Cit9CisKKy8qCisgKiBDcmVhdGUgYSBzdWJzY3JpcHRpb24g d2l0aCBzb21lIHByZWRlZmluZWQgb3B0aW9ucy4KKyAqCisgKiBBIHJlcGxpY2F0aW9uIHNsb3Qg d2FzIGFscmVhZHkgY3JlYXRlZCBpbiBhIHByZXZpb3VzIHN0ZXAuIExldCdzIHVzZSBpdC4gQnkK KyAqIGRlZmF1bHQsIHRoZSBzdWJzY3JpcHRpb24gbmFtZSBpcyB1c2VkIGFzIHJlcGxpY2F0aW9u IHNsb3QgbmFtZS4gSXQgaXMKKyAqIG5vdCByZXF1aXJlZCB0byBjb3B5IGRhdGEuIFRoZSBzdWJz Y3JpcHRpb24gd2lsbCBiZSBjcmVhdGVkIGJ1dCBpdCB3aWxsIG5vdAorICogYmUgZW5hYmxlZCBu b3cuIFRoYXQncyBiZWNhdXNlIHRoZSByZXBsaWNhdGlvbiBwcm9ncmVzcyBtdXN0IGJlIHNldCBh bmQgdGhlCisgKiByZXBsaWNhdGlvbiBvcmlnaW4gbmFtZSAob25lIG9mIHRoZSBmdW5jdGlvbiBh cmd1bWVudHMpIGNvbnRhaW5zIHRoZQorICogc3Vic2NyaXB0aW9uIE9JRCBpbiBpdHMgbmFtZS4g T25jZSB0aGUgc3Vic2NyaXB0aW9uIGlzIGNyZWF0ZWQsCisgKiBzZXRfcmVwbGljYXRpb25fcHJv Z3Jlc3MoKSBjYW4gb2J0YWluIHRoZSBjaG9zZW4gb3JpZ2luIG5hbWUgYW5kIHNldCB1cCBpdHMK KyAqIGluaXRpYWwgbG9jYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitjcmVhdGVfc3Vic2NyaXB0 aW9uKFBHY29ubiAqY29ubiwgTG9naWNhbFJlcEluZm8gKmRiaW5mbykKK3sKKwlQUUV4cEJ1ZmZl ciBzdHIgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCVBHcmVzdWx0ICAgKnJlczsKKworCUFzc2Vy dChjb25uICE9IE5VTEwpOworCisJcGdfbG9nX2luZm8oImNyZWF0aW5nIHN1YnNjcmlwdGlvbiBc IiVzXCIgb24gZGF0YWJhc2UgXCIlc1wiIiwgZGJpbmZvLT5zdWJuYW1lLCBkYmluZm8tPmRibmFt ZSk7CisKKwlhcHBlbmRQUUV4cEJ1ZmZlcihzdHIsCisJCQkJCSAgIkNSRUFURSBTVUJTQ1JJUFRJ T04gJXMgQ09OTkVDVElPTiAnJXMnIFBVQkxJQ0FUSU9OICVzICIKKwkJCQkJICAiV0lUSCAoY3Jl YXRlX3Nsb3QgPSBmYWxzZSwgY29weV9kYXRhID0gZmFsc2UsIGVuYWJsZWQgPSBmYWxzZSkiLAor CQkJCQkgIGRiaW5mby0+c3VibmFtZSwgZGJpbmZvLT5wdWJjb25uaW5mbywgZGJpbmZvLT5wdWJu YW1lKTsKKworCXBnX2xvZ19kZWJ1ZygiY29tbWFuZCBpczogJXMiLCBzdHItPmRhdGEpOworCisJ aWYgKCFkcnlfcnVuKQorCXsKKwkJcmVzID0gUFFleGVjKGNvbm4sIHN0ci0+ZGF0YSk7CisJCWlm IChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX0NPTU1BTkRfT0spCisJCXsKKwkJCXBnX2xv Z19lcnJvcigiY291bGQgbm90IGNyZWF0ZSBzdWJzY3JpcHRpb24gXCIlc1wiIG9uIGRhdGFiYXNl IFwiJXNcIjogJXMiLAorCQkJCQkJIGRiaW5mby0+c3VibmFtZSwgZGJpbmZvLT5kYm5hbWUsIFBR ZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwkJCVBRZmluaXNoKGNvbm4pOworCQkJZXhpdCgxKTsKKwkJ fQorCX0KKworCS8qIGZvciBjbGVhbnVwIHB1cnBvc2VzICovCisJZGJpbmZvLT5tYWRlX3N1YnNj cmlwdGlvbiA9IHRydWU7CisKKwlpZiAoIWRyeV9ydW4pCisJCVBRY2xlYXIocmVzKTsKKworCWRl c3Ryb3lQUUV4cEJ1ZmZlcihzdHIpOworfQorCisvKgorICogUmVtb3ZlIHN1YnNjcmlwdGlvbiBp ZiBpdCBjb3VsZG4ndCBmaW5pc2ggYWxsIHN0ZXBzLgorICovCitzdGF0aWMgdm9pZAorZHJvcF9z dWJzY3JpcHRpb24oUEdjb25uICpjb25uLCBMb2dpY2FsUmVwSW5mbyAqZGJpbmZvKQoreworCVBR RXhwQnVmZmVyIHN0ciA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisJUEdyZXN1bHQgICAqcmVzOwor CisJQXNzZXJ0KGNvbm4gIT0gTlVMTCk7CisKKwlwZ19sb2dfaW5mbygiZHJvcHBpbmcgc3Vic2Ny aXB0aW9uIFwiJXNcIiBvbiBkYXRhYmFzZSBcIiVzXCIiLCBkYmluZm8tPnN1Ym5hbWUsIGRiaW5m by0+ZGJuYW1lKTsKKworCWFwcGVuZFBRRXhwQnVmZmVyKHN0ciwgIkRST1AgU1VCU0NSSVBUSU9O ICVzIiwgZGJpbmZvLT5zdWJuYW1lKTsKKworCXBnX2xvZ19kZWJ1ZygiY29tbWFuZCBpczogJXMi LCBzdHItPmRhdGEpOworCisJaWYgKCFkcnlfcnVuKQorCXsKKwkJcmVzID0gUFFleGVjKGNvbm4s IHN0ci0+ZGF0YSk7CisJCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX0NPTU1BTkRf T0spCisJCQlwZ19sb2dfZXJyb3IoImNvdWxkIG5vdCBkcm9wIHN1YnNjcmlwdGlvbiBcIiVzXCIg b24gZGF0YWJhc2UgXCIlc1wiOiAlcyIsIGRiaW5mby0+c3VibmFtZSwgZGJpbmZvLT5kYm5hbWUs IFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKworCQlQUWNsZWFyKHJlcyk7CisJfQorCisJZGVzdHJv eVBRRXhwQnVmZmVyKHN0cik7Cit9CisKKy8qCisgKiBTZXRzIHRoZSByZXBsaWNhdGlvbiBwcm9n cmVzcyB0byB0aGUgY29uc2lzdGVudCBMU04uCisgKgorICogVGhlIHN1YnNjcmliZXIgY2F1Z2h0 IHVwIHRvIHRoZSBjb25zaXN0ZW50IExTTiBwcm92aWRlZCBieSB0aGUgdGVtcG9yYXJ5CisgKiBy ZXBsaWNhdGlvbiBzbG90LiBUaGUgZ29hbCBpcyB0byBzZXQgdXAgdGhlIGluaXRpYWwgbG9jYXRp b24gZm9yIHRoZSBsb2dpY2FsCisgKiByZXBsaWNhdGlvbiB0aGF0IGlzIHRoZSBleGFjdCBMU04g dGhhdCB0aGUgc3Vic2NyaWJlciB3YXMgcHJvbW90ZWQuIE9uY2UgdGhlCisgKiBzdWJzY3JpcHRp b24gaXMgZW5hYmxlZCBpdCB3aWxsIHN0YXJ0IHN0cmVhbWluZyBmcm9tIHRoYXQgbG9jYXRpb24g b253YXJkcy4KKyAqIEluIGRyeSBydW4gbW9kZSwgdGhlIHN1YnNjcmlwdGlvbiBPSUQgYW5kIExT TiBhcmUgc2V0IHRvIGludmFsaWQgdmFsdWVzIGZvcgorICogcHJpbnRpbmcgcHVycG9zZXMuCisg Ki8KK3N0YXRpYyB2b2lkCitzZXRfcmVwbGljYXRpb25fcHJvZ3Jlc3MoUEdjb25uICpjb25uLCBM b2dpY2FsUmVwSW5mbyAqZGJpbmZvLCBjb25zdCBjaGFyICpsc24pCit7CisJUFFFeHBCdWZmZXIg c3RyID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKwlQR3Jlc3VsdCAgICpyZXM7CisJT2lkCQkJc3Vi b2lkOworCWNoYXIJCW9yaWdpbm5hbWVbTkFNRURBVEFMRU5dOworCWNoYXIJCWxzbnN0clsxNyAr IDFdOyAvKiBNQVhQR19MU05MRU4gPSAxNyAqLworCisJQXNzZXJ0KGNvbm4gIT0gTlVMTCk7CisK KwlhcHBlbmRQUUV4cEJ1ZmZlcihzdHIsCisJCQkJCSAgIlNFTEVDVCBvaWQgRlJPTSBwZ19jYXRh bG9nLnBnX3N1YnNjcmlwdGlvbiBXSEVSRSBzdWJuYW1lID0gJyVzJyIsIGRiaW5mby0+c3VibmFt ZSk7CisKKwlyZXMgPSBQUWV4ZWMoY29ubiwgc3RyLT5kYXRhKTsKKwlpZiAoUFFyZXN1bHRTdGF0 dXMocmVzKSAhPSBQR1JFU19UVVBMRVNfT0spCisJeworCQlwZ19sb2dfZXJyb3IoImNvdWxkIG5v dCBvYnRhaW4gc3Vic2NyaXB0aW9uIE9JRDogJXMiLAorCQkJCQkgUFFyZXN1bHRFcnJvck1lc3Nh Z2UocmVzKSk7CisJCVBRY2xlYXIocmVzKTsKKwkJUFFmaW5pc2goY29ubik7CisJCWV4aXQoMSk7 CisJfQorCisJaWYgKFBRbnR1cGxlcyhyZXMpICE9IDEgJiYgIWRyeV9ydW4pCisJeworCQlwZ19s b2dfZXJyb3IoImNvdWxkIG5vdCBvYnRhaW4gc3Vic2NyaXB0aW9uIE9JRDogZ290ICVkIHJvd3Ms IGV4cGVjdGVkICVkIHJvd3MiLAorCQkJCQkgUFFudHVwbGVzKHJlcyksIDEpOworCQlQUWNsZWFy KHJlcyk7CisJCVBRZmluaXNoKGNvbm4pOworCQlleGl0KDEpOworCX0KKworCWlmIChkcnlfcnVu KQorCXsKKwkJc3Vib2lkID0gSW52YWxpZE9pZDsKKwkJc25wcmludGYobHNuc3RyLCBzaXplb2Yo bHNuc3RyKSwgIiVYLyVYIiwgTFNOX0ZPUk1BVF9BUkdTKChYTG9nUmVjUHRyKSBJbnZhbGlkWExv Z1JlY1B0cikpOworCX0KKwllbHNlCisJeworCQlzdWJvaWQgPSBzdHJ0b3VsKFBRZ2V0dmFsdWUo cmVzLCAwLCAwKSwgTlVMTCwgMTApOworCQlzbnByaW50Zihsc25zdHIsIHNpemVvZihsc25zdHIp LCAiJXMiLCBsc24pOworCX0KKworCS8qCisJICogVGhlIG9yaWdpbiBuYW1lIGlzIGRlZmluZWQg YXMgcGdfJXUuICV1IGlzIHRoZSBzdWJzY3JpcHRpb24gT0lELiBTZWUKKwkgKiBBcHBseVdvcmtl ck1haW4oKS4KKwkgKi8KKwlzbnByaW50ZihvcmlnaW5uYW1lLCBzaXplb2Yob3JpZ2lubmFtZSks ICJwZ18ldSIsIHN1Ym9pZCk7CisKKwlQUWNsZWFyKHJlcyk7CisKKwlwZ19sb2dfaW5mbygic2V0 dGluZyB0aGUgcmVwbGljYXRpb24gcHJvZ3Jlc3MgKG5vZGUgbmFtZSBcIiVzXCIgOyBMU04gJXMp IG9uIGRhdGFiYXNlIFwiJXNcIiIsCisJCQkJb3JpZ2lubmFtZSwgbHNuc3RyLCBkYmluZm8tPmRi bmFtZSk7CisKKwlyZXNldFBRRXhwQnVmZmVyKHN0cik7CisJYXBwZW5kUFFFeHBCdWZmZXIoc3Ry LAorCQkJCQkgICJTRUxFQ1QgcGdfY2F0YWxvZy5wZ19yZXBsaWNhdGlvbl9vcmlnaW5fYWR2YW5j ZSgnJXMnLCAnJXMnKSIsIG9yaWdpbm5hbWUsIGxzbnN0cik7CisKKwlwZ19sb2dfZGVidWcoImNv bW1hbmQgaXM6ICVzIiwgc3RyLT5kYXRhKTsKKworCWlmICghZHJ5X3J1bikKKwl7CisJCXJlcyA9 IFBRZXhlYyhjb25uLCBzdHItPmRhdGEpOworCQlpZiAoUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQ R1JFU19UVVBMRVNfT0spCisJCXsKKwkJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IHNldCByZXBs aWNhdGlvbiBwcm9ncmVzcyBmb3IgdGhlIHN1YnNjcmlwdGlvbiBcIiVzXCI6ICVzIiwKKwkJCQkJ CSBkYmluZm8tPnN1Ym5hbWUsIFBRcmVzdWx0RXJyb3JNZXNzYWdlKHJlcykpOworCQkJUFFmaW5p c2goY29ubik7CisJCQlleGl0KDEpOworCQl9CisKKwkJUFFjbGVhcihyZXMpOworCX0KKworCWRl c3Ryb3lQUUV4cEJ1ZmZlcihzdHIpOworfQorCisvKgorICogRW5hYmxlcyB0aGUgc3Vic2NyaXB0 aW9uLgorICoKKyAqIFRoZSBzdWJzY3JpcHRpb24gd2FzIGNyZWF0ZWQgaW4gYSBwcmV2aW91cyBz dGVwIGJ1dCBpdCB3YXMgZGlzYWJsZWQuIEFmdGVyCisgKiBhZGp1c3RpbmcgdGhlIGluaXRpYWwg bG9jYXRpb24sIGVuYWJsaW5nIHRoZSBzdWJzY3JpcHRpb24gaXMgdGhlIGxhc3Qgc3RlcAorICog b2YgdGhpcyBzZXR1cC4KKyAqLworc3RhdGljIHZvaWQKK2VuYWJsZV9zdWJzY3JpcHRpb24oUEdj b25uICpjb25uLCBMb2dpY2FsUmVwSW5mbyAqZGJpbmZvKQoreworCVBRRXhwQnVmZmVyIHN0ciA9 IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisJUEdyZXN1bHQgICAqcmVzOworCisJQXNzZXJ0KGNvbm4g IT0gTlVMTCk7CisKKwlwZ19sb2dfaW5mbygiZW5hYmxpbmcgc3Vic2NyaXB0aW9uIFwiJXNcIiBv biBkYXRhYmFzZSBcIiVzXCIiLCBkYmluZm8tPnN1Ym5hbWUsIGRiaW5mby0+ZGJuYW1lKTsKKwor CWFwcGVuZFBRRXhwQnVmZmVyKHN0ciwgIkFMVEVSIFNVQlNDUklQVElPTiAlcyBFTkFCTEUiLCBk YmluZm8tPnN1Ym5hbWUpOworCisJcGdfbG9nX2RlYnVnKCJjb21tYW5kIGlzOiAlcyIsIHN0ci0+ ZGF0YSk7CisKKwlpZiAoIWRyeV9ydW4pCisJeworCQlyZXMgPSBQUWV4ZWMoY29ubiwgc3RyLT5k YXRhKTsKKwkJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09NTUFORF9PSykKKwkJ eworCQkJcGdfbG9nX2Vycm9yKCJjb3VsZCBub3QgZW5hYmxlIHN1YnNjcmlwdGlvbiBcIiVzXCI6 ICVzIiwgZGJpbmZvLT5zdWJuYW1lLAorCQkJCQkJIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwkJ CVBRZmluaXNoKGNvbm4pOworCQkJZXhpdCgxKTsKKwkJfQorCisJCVBRY2xlYXIocmVzKTsKKwl9 CisKKwlkZXN0cm95UFFFeHBCdWZmZXIoc3RyKTsKK30KKworaW50CittYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKK3sKKwlzdGF0aWMgc3RydWN0IG9wdGlvbiBsb25nX29wdGlvbnNbXSA9CisJ eworCQl7ImhlbHAiLCBub19hcmd1bWVudCwgTlVMTCwgJz8nfSwKKwkJeyJ2ZXJzaW9uIiwgbm9f YXJndW1lbnQsIE5VTEwsICdWJ30sCisJCXsicGdkYXRhIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5V TEwsICdEJ30sCisJCXsicHVibGlzaGVyLWNvbm5pbmZvIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5V TEwsICdQJ30sCisJCXsic3Vic2NyaWJlci1jb25uaW5mbyIsIHJlcXVpcmVkX2FyZ3VtZW50LCBO VUxMLCAnUyd9LAorCQl7ImRhdGFiYXNlIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdkJ30s CisJCXsiZHJ5LXJ1biIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnbid9LAorCQl7InZlcmJvc2UiLCBu b19hcmd1bWVudCwgTlVMTCwgJ3YnfSwKKwkJe05VTEwsIDAsIE5VTEwsIDB9CisJfTsKKworCWlu dAkJCWM7CisJaW50CQkJb3B0aW9uX2luZGV4OworCWludAkJCXJjOworCisJY2hhcgkgICAqcGdf Y3RsX2NtZDsKKworCWNoYXIJICAgKmJhc2VfZGlyOworCWNoYXIJICAgKnNlcnZlcl9zdGFydF9s b2c7CisKKwljaGFyCQl0aW1lYnVmWzEyOF07CisJc3RydWN0IHRpbWV2YWwgdGltZTsKKwl0aW1l X3QJCXR0OworCWludAkJCWxlbjsKKworCWNoYXIJICAgKnB1Yl9iYXNlX2Nvbm5pbmZvID0gTlVM TDsKKwljaGFyCSAgICpzdWJfYmFzZV9jb25uaW5mbyA9IE5VTEw7CisJY2hhcgkgICAqZGJuYW1l X2Nvbm5pbmZvID0gTlVMTDsKKworCXVpbnQ2NAkJcHViX3N5c2lkOworCXVpbnQ2NAkJc3ViX3N5 c2lkOworCXN0cnVjdCBzdGF0IHN0YXRidWY7CisKKwlQR2Nvbm4JICAgKmNvbm47CisJY2hhcgkg ICAqY29uc2lzdGVudF9sc247CisKKwlQUUV4cEJ1ZmZlciByZWNvdmVyeWNvbmZjb250ZW50cyA9 IE5VTEw7CisKKwljaGFyCQlwaWRmaWxlW01BWFBHUEFUSF07CisKKwlpbnQJCQlpOworCisJcGdf bG9nZ2luZ19pbml0KGFyZ3ZbMF0pOworCXBnX2xvZ2dpbmdfc2V0X2xldmVsKFBHX0xPR19XQVJO SU5HKTsKKwlwcm9nbmFtZSA9IGdldF9wcm9nbmFtZShhcmd2WzBdKTsKKwlzZXRfcGdsb2NhbGVf cGdzZXJ2aWNlKGFyZ3ZbMF0sIFBHX1RFWFRET01BSU4oInBnX3N1YnNjcmliZXIiKSk7CisKKwlp ZiAoYXJnYyA+IDEpCisJeworCQlpZiAoc3RyY21wKGFyZ3ZbMV0sICItLWhlbHAiKSA9PSAwIHx8 IHN0cmNtcChhcmd2WzFdLCAiLT8iKSA9PSAwKQorCQl7CisJCQl1c2FnZSgpOworCQkJZXhpdCgw KTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoYXJndlsxXSwgIi1WIikgPT0gMAorCQkJCSB8fCBz dHJjbXAoYXJndlsxXSwgIi0tdmVyc2lvbiIpID09IDApCisJCXsKKwkJCXB1dHMoInBnX3N1YnNj cmliZXIgKFBvc3RncmVTUUwpICIgUEdfVkVSU0lPTik7CisJCQlleGl0KDApOworCQl9CisJfQor CisJYXRleGl0KGNsZWFudXBfb2JqZWN0c19hdGV4aXQpOworCisJLyoKKwkgKiBEb24ndCBhbGxv dyBpdCB0byBiZSBydW4gYXMgcm9vdC4gSXQgdXNlcyBwZ19jdGwgd2hpY2ggZG9lcyBub3QgYWxs b3cKKwkgKiBpdCBlaXRoZXIuCisJICovCisjaWZuZGVmIFdJTjMyCisJaWYgKGdldGV1aWQoKSA9 PSAwKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJjYW5ub3QgYmUgZXhlY3V0ZWQgYnkgXCJyb290XCIi KTsKKwkJcGdfbG9nX2Vycm9yX2hpbnQoIllvdSBtdXN0IHJ1biAlcyBhcyB0aGUgUG9zdGdyZVNR TCBzdXBlcnVzZXIuIiwKKwkJCQkJCSAgcHJvZ25hbWUpOworCQlleGl0KDEpOworCX0KKyNlbmRp ZgorCisJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgIkQ6UDpTOmQ6bnYiLAor CQkJCQkJCWxvbmdfb3B0aW9ucywgJm9wdGlvbl9pbmRleCkpICE9IC0xKQorCXsKKwkJc3dpdGNo IChjKQorCQl7CisJCQljYXNlICdEJzoKKwkJCQlzdWJzY3JpYmVyX2RpciA9IHBnX3N0cmR1cChv cHRhcmcpOworCQkJCWJyZWFrOworCQkJY2FzZSAnUCc6CisJCQkJcHViX2Nvbm5pbmZvX3N0ciA9 IHBnX3N0cmR1cChvcHRhcmcpOworCQkJCWJyZWFrOworCQkJY2FzZSAnUyc6CisJCQkJc3ViX2Nv bm5pbmZvX3N0ciA9IHBnX3N0cmR1cChvcHRhcmcpOworCQkJCWJyZWFrOworCQkJY2FzZSAnZCc6 CisJCQkJLyogSWdub3JlIGR1cGxpY2F0ZWQgZGF0YWJhc2UgbmFtZXMuICovCisJCQkJaWYgKCFz aW1wbGVfc3RyaW5nX2xpc3RfbWVtYmVyKCZkYXRhYmFzZV9uYW1lcywgb3B0YXJnKSkKKwkJCQl7 CisJCQkJCXNpbXBsZV9zdHJpbmdfbGlzdF9hcHBlbmQoJmRhdGFiYXNlX25hbWVzLCBvcHRhcmcp OworCQkJCQludW1fZGJzKys7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSAnbic6CisJCQkJ ZHJ5X3J1biA9IHRydWU7CisJCQkJYnJlYWs7CisJCQljYXNlICd2JzoKKwkJCQlwZ19sb2dnaW5n X2luY3JlYXNlX3ZlcmJvc2l0eSgpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQkvKiBn ZXRvcHRfbG9uZyBhbHJlYWR5IGVtaXR0ZWQgYSBjb21wbGFpbnQgKi8KKwkJCQlwZ19sb2dfZXJy b3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25h bWUpOworCQkJCWV4aXQoMSk7CisJCX0KKwl9CisKKwkvKgorCSAqIEFueSBub24tb3B0aW9uIGFy Z3VtZW50cz8KKwkgKi8KKwlpZiAob3B0aW5kIDwgYXJnYykKKwl7CisJCXBnX2xvZ19lcnJvcigi dG9vIG1hbnkgY29tbWFuZC1saW5lIGFyZ3VtZW50cyAoZmlyc3QgaXMgXCIlc1wiKSIsCisJCQkJ CSBhcmd2W29wdGluZF0pOworCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIg Zm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOworCQlleGl0KDEpOworCX0KKworCS8q CisJICogUmVxdWlyZWQgYXJndW1lbnRzCisJICovCisJaWYgKHN1YnNjcmliZXJfZGlyID09IE5V TEwpCisJeworCQlwZ19sb2dfZXJyb3IoIm5vIHN1YnNjcmliZXIgZGF0YSBkaXJlY3Rvcnkgc3Bl Y2lmaWVkIik7CisJCXBnX2xvZ19lcnJvcl9oaW50KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9y ZSBpbmZvcm1hdGlvbi4iLCBwcm9nbmFtZSk7CisJCWV4aXQoMSk7CisJfQorCisJLyoKKwkgKiBQ YXJzZSBjb25uZWN0aW9uIHN0cmluZy4gQnVpbGQgYSBiYXNlIGNvbm5lY3Rpb24gc3RyaW5nIHRo YXQgbWlnaHQgYmUKKwkgKiByZXVzZWQgYnkgbXVsdGlwbGUgZGF0YWJhc2VzLgorCSAqLworCWlm IChwdWJfY29ubmluZm9fc3RyID09IE5VTEwpCisJeworCQkvKgorCQkgKiBUT0RPIHVzZSBwcmlt YXJ5X2Nvbm5pbmZvIChpZiBhdmFpbGFibGUpIGZyb20gc3Vic2NyaWJlciBhbmQKKwkJICogZXh0 cmFjdCBwdWJsaXNoZXIgY29ubmVjdGlvbiBzdHJpbmcuIEFzc3VtZSB0aGF0IHRoZXJlIGFyZQor CQkgKiBpZGVudGljYWwgZW50cmllcyBmb3IgcGh5c2ljYWwgYW5kIGxvZ2ljYWwgcmVwbGljYXRp b24uIElmIHRoZXJlIGlzCisJCSAqIG5vdCwgd2Ugd291bGQgZmFpbCBhbnl3YXkuCisJCSAqLwor CQlwZ19sb2dfZXJyb3IoIm5vIHB1Ymxpc2hlciBjb25uZWN0aW9uIHN0cmluZyBzcGVjaWZpZWQi KTsKKwkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9y bWF0aW9uLiIsIHByb2duYW1lKTsKKwkJZXhpdCgxKTsKKwl9CisJcHViX2Jhc2VfY29ubmluZm8g PSBnZXRfYmFzZV9jb25uaW5mbyhwdWJfY29ubmluZm9fc3RyLCBkYm5hbWVfY29ubmluZm8sCisJ CQkJCQkJCQkJICAicHVibGlzaGVyIik7CisJaWYgKHB1Yl9iYXNlX2Nvbm5pbmZvID09IE5VTEwp CisJCWV4aXQoMSk7CisKKwlpZiAoc3ViX2Nvbm5pbmZvX3N0ciA9PSBOVUxMKQorCXsKKwkJcGdf bG9nX2Vycm9yKCJubyBzdWJzY3JpYmVyIGNvbm5lY3Rpb24gc3RyaW5nIHNwZWNpZmllZCIpOwor CQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRp b24uIiwgcHJvZ25hbWUpOworCQlleGl0KDEpOworCX0KKwlzdWJfYmFzZV9jb25uaW5mbyA9IGdl dF9iYXNlX2Nvbm5pbmZvKHN1Yl9jb25uaW5mb19zdHIsIE5VTEwsICJzdWJzY3JpYmVyIik7CisJ aWYgKHN1Yl9iYXNlX2Nvbm5pbmZvID09IE5VTEwpCisJCWV4aXQoMSk7CisKKwlpZiAoZGF0YWJh c2VfbmFtZXMuaGVhZCA9PSBOVUxMKQorCXsKKwkJcGdfbG9nX2luZm8oIm5vIGRhdGFiYXNlIHdh cyBzcGVjaWZpZWQiKTsKKworCQkvKgorCQkgKiBJZiAtLWRhdGFiYXNlIG9wdGlvbiBpcyBub3Qg cHJvdmlkZWQsIHRyeSB0byBvYnRhaW4gdGhlIGRibmFtZSBmcm9tCisJCSAqIHRoZSBwdWJsaXNo ZXIgY29ubmluZm8uIElmIGRibmFtZSBwYXJhbWV0ZXIgaXMgbm90IGF2YWlsYWJsZSwgZXJyb3IK KwkJICogb3V0LgorCQkgKi8KKwkJaWYgKGRibmFtZV9jb25uaW5mbykKKwkJeworCQkJc2ltcGxl X3N0cmluZ19saXN0X2FwcGVuZCgmZGF0YWJhc2VfbmFtZXMsIGRibmFtZV9jb25uaW5mbyk7CisJ CQludW1fZGJzKys7CisKKwkJCXBnX2xvZ19pbmZvKCJkYXRhYmFzZSBcIiVzXCIgd2FzIGV4dHJh Y3RlZCBmcm9tIHRoZSBwdWJsaXNoZXIgY29ubmVjdGlvbiBzdHJpbmciLAorCQkJCQkJZGJuYW1l X2Nvbm5pbmZvKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBnX2xvZ19lcnJvcigibm8gZGF0YWJh c2UgbmFtZSBzcGVjaWZpZWQiKTsKKwkJCXBnX2xvZ19lcnJvcl9oaW50KCJUcnkgXCIlcyAtLWhl bHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iLCBwcm9nbmFtZSk7CisJCQlleGl0KDEpOworCQl9 CisJfQorCisJLyoKKwkgKiBHZXQgdGhlIGFic29sdXRlIHBhdGggb2YgcGdfY3RsIGFuZCBwZ19y ZXNldHdhbCBvbiB0aGUgc3Vic2NyaWJlci4KKwkgKi8KKwlpZiAoIWdldF9leGVjX3BhdGgoYXJn dlswXSkpCisJCWV4aXQoMSk7CisKKwkvKiBydWRpbWVudGFyeSBjaGVjayBmb3IgYSBkYXRhIGRp cmVjdG9yeS4gKi8KKwlpZiAoIWNoZWNrX2RhdGFfZGlyZWN0b3J5KHN1YnNjcmliZXJfZGlyKSkK KwkJZXhpdCgxKTsKKworCS8qIFN0b3JlIGRhdGFiYXNlIGluZm9ybWF0aW9uIGZvciBwdWJsaXNo ZXIgYW5kIHN1YnNjcmliZXIuICovCisJZGJpbmZvID0gc3RvcmVfcHViX3N1Yl9pbmZvKHB1Yl9i YXNlX2Nvbm5pbmZvLCBzdWJfYmFzZV9jb25uaW5mbyk7CisKKwkvKgorCSAqIENoZWNrIGlmIHRo ZSBzdWJzY3JpYmVyIGRhdGEgZGlyZWN0b3J5IGhhcyB0aGUgc2FtZSBzeXN0ZW0gaWRlbnRpZmll cgorCSAqIHRoYW4gdGhlIHB1Ymxpc2hlciBkYXRhIGRpcmVjdG9yeS4KKwkgKi8KKwlwdWJfc3lz aWQgPSBnZXRfc3lzaWRfZnJvbV9jb25uKGRiaW5mb1swXS5wdWJjb25uaW5mbyk7CisJc3ViX3N5 c2lkID0gZ2V0X2NvbnRyb2xfZnJvbV9kYXRhZGlyKHN1YnNjcmliZXJfZGlyKTsKKwlpZiAocHVi X3N5c2lkICE9IHN1Yl9zeXNpZCkKKwl7CisJCXBnX2xvZ19lcnJvcigic3Vic2NyaWJlciBkYXRh IGRpcmVjdG9yeSBpcyBub3QgYSBjb3B5IG9mIHRoZSBzb3VyY2UgZGF0YWJhc2UgY2x1c3RlciIp OworCQlleGl0KDEpOworCX0KKworCS8qCisJICogQ3JlYXRlIHRoZSBvdXRwdXQgZGlyZWN0b3J5 IHRvIHN0b3JlIGFueSBkYXRhIGdlbmVyYXRlZCBieSB0aGlzIHRvb2wuCisJICovCisJYmFzZV9k aXIgPSAoY2hhciAqKSBwZ19tYWxsb2MwKE1BWFBHUEFUSCk7CisJbGVuID0gc25wcmludGYoYmFz ZV9kaXIsIE1BWFBHUEFUSCwgIiVzLyVzIiwgc3Vic2NyaWJlcl9kaXIsIFBHU19PVVRQVVRfRElS KTsKKwlpZiAobGVuID49IE1BWFBHUEFUSCkKKwl7CisJCXBnX2xvZ19lcnJvcigiZGlyZWN0b3J5 IHBhdGggZm9yIHN1YnNjcmliZXIgaXMgdG9vIGxvbmciKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlp ZiAobWtkaXIoYmFzZV9kaXIsIHBnX2Rpcl9jcmVhdGVfbW9kZSkgPCAwICYmIGVycm5vICE9IEVF WElTVCkKKwl7CisJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIl c1wiOiAlbSIsIGJhc2VfZGlyKTsKKwkJZXhpdCgxKTsKKwl9CisKKwkvKiBzdWJzY3JpYmVyIFBJ RCBmaWxlLiAqLworCXNucHJpbnRmKHBpZGZpbGUsIE1BWFBHUEFUSCwgIiVzL3Bvc3RtYXN0ZXIu cGlkIiwgc3Vic2NyaWJlcl9kaXIpOworCisJLyoKKwkgKiBTdG9wIHRoZSBzdWJzY3JpYmVyIGlm IGl0IGlzIGEgc3RhbmRieSBzZXJ2ZXIuIEJlZm9yZSBleGVjdXRpbmcgdGhlCisJICogdHJhbnNm b3JtYXRpb24gc3RlcHMsIG1ha2Ugc3VyZSB0aGUgc3Vic2NyaWJlciBpcyBub3QgcnVubmluZyBi ZWNhdXNlCisJICogb25lIG9mIHRoZSBzdGVwcyBpcyB0byBtb2RpZnkgc29tZSByZWNvdmVyeSBw YXJhbWV0ZXJzIHRoYXQgcmVxdWlyZSBhCisJICogcmVzdGFydC4KKwkgKi8KKwlpZiAoc3RhdChw aWRmaWxlLCAmc3RhdGJ1ZikgPT0gMCkKKwl7CisJCS8qCisJCSAqIFNpbmNlIHRoZSBzdGFuZGJ5 IHNlcnZlciBpcyBydW5uaW5nLCBjaGVjayBpZiBpdCBpcyB1c2luZyBhbgorCQkgKiBleGlzdGlu ZyByZXBsaWNhdGlvbiBzbG90IGZvciBXQUwgcmV0ZW50aW9uIHB1cnBvc2VzLiBUaGlzCisJCSAq IHJlcGxpY2F0aW9uIHNsb3QgaGFzIG5vIHVzZSBhZnRlciB0aGUgdHJhbnNmb3JtYXRpb24sIGhl bmNlLCBpdAorCQkgKiB3aWxsIGJlIHJlbW92ZWQgYXQgdGhlIGVuZCBvZiB0aGlzIHByb2Nlc3Mu CisJCSAqLworCQlwcmltYXJ5X3Nsb3RfbmFtZSA9IHVzZV9wcmltYXJ5X3Nsb3RfbmFtZSgpOwor CQlpZiAocHJpbWFyeV9zbG90X25hbWUgIT0gTlVMTCkKKwkJCXBnX2xvZ19pbmZvKCJwcmltYXJ5 IGhhcyByZXBsaWNhdGlvbiBzbG90IFwiJXNcIiIsIHByaW1hcnlfc2xvdF9uYW1lKTsKKworCQlw Z19sb2dfaW5mbygic3Vic2NyaWJlciBpcyB1cCBhbmQgcnVubmluZyIpOworCQlwZ19sb2dfaW5m bygic3RvcHBpbmcgdGhlIHNlcnZlciB0byBzdGFydCB0aGUgdHJhbnNmb3JtYXRpb24gc3RlcHMi KTsKKworCQlwZ19jdGxfY21kID0gcHNwcmludGYoIlwiJXNcIiBzdG9wIC1EIFwiJXNcIiAtcyIs IHBnX2N0bF9wYXRoLCBzdWJzY3JpYmVyX2Rpcik7CisJCXJjID0gc3lzdGVtKHBnX2N0bF9jbWQp OworCQlwZ19jdGxfc3RhdHVzKHBnX2N0bF9jbWQsIHJjLCAwKTsKKwl9CisKKwkvKgorCSAqIENy ZWF0ZSBhIHJlcGxpY2F0aW9uIHNsb3QgZm9yIGVhY2ggZGF0YWJhc2Ugb24gdGhlIHB1Ymxpc2hl ci4KKwkgKi8KKwlpZiAoIWNyZWF0ZV9hbGxfbG9naWNhbF9yZXBsaWNhdGlvbl9zbG90cyhkYmlu Zm8pKQorCQlleGl0KDEpOworCisJLyoKKwkgKiBDcmVhdGUgYSBsb2dpY2FsIHJlcGxpY2F0aW9u IHNsb3QgdG8gZ2V0IGEgY29uc2lzdGVudCBMU04uCisJICoKKwkgKiBUaGlzIGNvbnNpc3RlbnQg TFNOIHdpbGwgYmUgdXNlZCBsYXRlciB0byBhZHZhbmNlZCB0aGUgcmVjZW50bHkgY3JlYXRlZAor CSAqIHJlcGxpY2F0aW9uIHNsb3RzLiBXZSBjYW5ub3QgdXNlIHRoZSBsYXN0IGNyZWF0ZWQgcmVw bGljYXRpb24gc2xvdAorCSAqIGJlY2F1c2UgdGhlIGNvbnNpc3RlbnQgTFNOIHNob3VsZCBiZSBv YnRhaW5lZCAqYWZ0ZXIqIHRoZSBiYXNlIGJhY2t1cAorCSAqIGZpbmlzaGVzIChhbmQgdGhlIGJh c2UgYmFja3VwIHNob3VsZCBpbmNsdWRlIHRoZSBsb2dpY2FsIHJlcGxpY2F0aW9uCisJICogc2xv dHMpLgorCSAqCisJICogWFhYIHdlIHNob3VsZCBwcm9iYWJseSB1c2UgdGhlIGxhc3QgY3JlYXRl ZCByZXBsaWNhdGlvbiBzbG90IHRvIGdldCBhCisJICogY29uc2lzdGVudCBMU04gYnV0IGl0IHNo b3VsZCBiZSBjaGFuZ2VkIGFmdGVyIGFkZGluZyBwZ19iYXNlYmFja3VwCisJICogc3VwcG9ydC4K KwkgKgorCSAqIEEgdGVtcG9yYXJ5IHJlcGxpY2F0aW9uIHNsb3QgaXMgbm90IHVzZWQgaGVyZSB0 byBhdm9pZCBrZWVwaW5nIGEKKwkgKiByZXBsaWNhdGlvbiBjb25uZWN0aW9uIG9wZW4gKGRlcGVu ZGluZyB3aGVuIGJhc2UgYmFja3VwIHdhcyB0YWtlbiwgdGhlCisJICogY29ubmVjdGlvbiBzaG91 bGQgYmUgb3BlbiBmb3IgYSBmZXcgaG91cnMpLgorCSAqLworCWNvbm4gPSBjb25uZWN0X2RhdGFi YXNlKGRiaW5mb1swXS5wdWJjb25uaW5mbyk7CisJaWYgKGNvbm4gPT0gTlVMTCkKKwkJZXhpdCgx KTsKKwljb25zaXN0ZW50X2xzbiA9IGNyZWF0ZV9sb2dpY2FsX3JlcGxpY2F0aW9uX3Nsb3QoY29u biwgJmRiaW5mb1swXSwKKwkJCQkJCQkJCQkJCQkgdGVtcF9yZXBsc2xvdCk7CisKKwkvKgorCSAq IFdyaXRlIHJlY292ZXJ5IHBhcmFtZXRlcnMuCisJICoKKwkgKiBEZXNwaXRlIG9mIHRoZSByZWNv dmVyeSBwYXJhbWV0ZXJzIHdpbGwgYmUgd3JpdHRlbiB0byB0aGUgc3Vic2NyaWJlciwKKwkgKiB1 c2UgYSBwdWJsaXNoZXIgY29ubmVjdGlvbiBmb3IgdGhlIGZvbGx3aW5nIHJlY292ZXJ5IGZ1bmN0 aW9ucy4gVGhlCisJICogY29ubmVjdGlvbiBpcyBvbmx5IHVzZWQgdG8gY2hlY2sgdGhlIGN1cnJl bnQgc2VydmVyIHZlcnNpb24gKHBoeXNpY2FsCisJICogcmVwbGljYSwgc2FtZSBzZXJ2ZXIgdmVy c2lvbikuIFRoZSBzdWJzY3JpYmVyIGlzIG5vdCBydW5uaW5nIHlldC4gSW4KKwkgKiBkcnkgcnVu IG1vZGUsIHRoZSByZWNvdmVyeSBwYXJhbWV0ZXJzICp3b24ndCogYmUgd3JpdHRlbi4gQW4gaW52 YWxpZAorCSAqIExTTiBpcyB1c2VkIGZvciBwcmludGluZyBwdXJwb3Nlcy4KKwkgKi8KKwlyZWNv dmVyeWNvbmZjb250ZW50cyA9IEdlbmVyYXRlUmVjb3ZlcnlDb25maWcoY29ubiwgTlVMTCk7CisJ YXBwZW5kUFFFeHBCdWZmZXIocmVjb3Zlcnljb25mY29udGVudHMsICJyZWNvdmVyeV90YXJnZXRf aW5jbHVzaXZlID0gdHJ1ZVxuIik7CisJYXBwZW5kUFFFeHBCdWZmZXIocmVjb3Zlcnljb25mY29u dGVudHMsICJyZWNvdmVyeV90YXJnZXRfYWN0aW9uID0gcHJvbW90ZVxuIik7CisKKwlpZiAoZHJ5 X3J1bikKKwl7CisJCWFwcGVuZFBRRXhwQnVmZmVyKHJlY292ZXJ5Y29uZmNvbnRlbnRzLCAiIyBk cnkgcnVuIG1vZGUiKTsKKwkJYXBwZW5kUFFFeHBCdWZmZXIocmVjb3Zlcnljb25mY29udGVudHMs ICJyZWNvdmVyeV90YXJnZXRfbHNuID0gJyVYLyVYJ1xuIiwKKwkJCQkJCSAgTFNOX0ZPUk1BVF9B UkdTKChYTG9nUmVjUHRyKSBJbnZhbGlkWExvZ1JlY1B0cikpOworCX0KKwllbHNlCisJeworCQlh cHBlbmRQUUV4cEJ1ZmZlcihyZWNvdmVyeWNvbmZjb250ZW50cywgInJlY292ZXJ5X3RhcmdldF9s c24gPSAnJXMnXG4iLAorCQkJCQkJICBjb25zaXN0ZW50X2xzbik7CisJCVdyaXRlUmVjb3ZlcnlD b25maWcoY29ubiwgc3Vic2NyaWJlcl9kaXIsIHJlY292ZXJ5Y29uZmNvbnRlbnRzKTsKKwl9CisJ ZGlzY29ubmVjdF9kYXRhYmFzZShjb25uKTsKKworCXBnX2xvZ19kZWJ1ZygicmVjb3ZlcnkgcGFy YW1ldGVyczpcbiVzIiwgcmVjb3Zlcnljb25mY29udGVudHMtPmRhdGEpOworCisJLyoKKwkgKiBT dGFydCBzdWJzY3JpYmVyIGFuZCB3YWl0IHVudGlsIGFjY2VwdGluZyBjb25uZWN0aW9ucy4KKwkg Ki8KKwlwZ19sb2dfaW5mbygic3RhcnRpbmcgdGhlIHN1YnNjcmliZXIiKTsKKworCS8qIGFwcGVu ZCB0aW1lc3RhbXAgd2l0aCBJU08gODYwMSBmb3JtYXQuICovCisJZ2V0dGltZW9mZGF5KCZ0aW1l LCBOVUxMKTsKKwl0dCA9ICh0aW1lX3QpIHRpbWUudHZfc2VjOworCXN0cmZ0aW1lKHRpbWVidWYs IHNpemVvZih0aW1lYnVmKSwgIiVZJW0lZFQlSCVNJVMiLCBsb2NhbHRpbWUoJnR0KSk7CisJc25w cmludGYodGltZWJ1ZiArIHN0cmxlbih0aW1lYnVmKSwgc2l6ZW9mKHRpbWVidWYpIC0gc3RybGVu KHRpbWVidWYpLAorCQkJICIuJTAzZCIsIChpbnQpICh0aW1lLnR2X3VzZWMgLyAxMDAwKSk7CisK KwlzZXJ2ZXJfc3RhcnRfbG9nID0gKGNoYXIgKikgcGdfbWFsbG9jMChNQVhQR1BBVEgpOworCWxl biA9IHNucHJpbnRmKHNlcnZlcl9zdGFydF9sb2csIE1BWFBHUEFUSCwgIiVzLyVzL3NlcnZlcl9z dGFydF8lcy5sb2ciLCBzdWJzY3JpYmVyX2RpciwgUEdTX09VVFBVVF9ESVIsIHRpbWVidWYpOwor CWlmIChsZW4gPj0gTUFYUEdQQVRIKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJsb2cgZmlsZSBwYXRo IGlzIHRvbyBsb25nIik7CisJCWV4aXQoMSk7CisJfQorCisJcGdfY3RsX2NtZCA9IHBzcHJpbnRm KCJcIiVzXCIgc3RhcnQgLUQgXCIlc1wiIC1zIC1sIFwiJXNcIiIsIHBnX2N0bF9wYXRoLCBzdWJz Y3JpYmVyX2Rpciwgc2VydmVyX3N0YXJ0X2xvZyk7CisJcmMgPSBzeXN0ZW0ocGdfY3RsX2NtZCk7 CisJcGdfY3RsX3N0YXR1cyhwZ19jdGxfY21kLCByYywgMSk7CisKKwkvKgorCSAqIFdhaXRpbmcg dGhlIHN1YnNjcmliZXIgdG8gYmUgcHJvbW90ZWQuCisJICovCisJd2FpdF9mb3JfZW5kX3JlY292 ZXJ5KGRiaW5mb1swXS5zdWJjb25uaW5mbyk7CisKKwkvKgorCSAqIENyZWF0ZSBhIHB1YmxpY2F0 aW9uIGZvciBlYWNoIGRhdGFiYXNlLiBUaGlzIHN0ZXAgc2hvdWxkIGJlIGV4ZWN1dGVkCisJICog YWZ0ZXIgcHJvbW90aW5nIHRoZSBzdWJzY3JpYmVyIHRvIGF2b2lkIHJlcGxpY2F0aW5nIHVubmVj ZXNzYXJ5CisJICogb2JqZWN0cy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2RiczsgaSsr KQorCXsKKwkJY2hhcgkJcHVibmFtZVtOQU1FREFUQUxFTl07CisKKwkJLyogQ29ubmVjdCB0byBw dWJsaXNoZXIuICovCisJCWNvbm4gPSBjb25uZWN0X2RhdGFiYXNlKGRiaW5mb1tpXS5wdWJjb25u aW5mbyk7CisJCWlmIChjb25uID09IE5VTEwpCisJCQlleGl0KDEpOworCisJCS8qCisJCSAqIEJ1 aWxkIHRoZSBwdWJsaWNhdGlvbiBuYW1lLiBUaGUgbmFtZSBtdXN0IG5vdCBleGNlZWQgTkFNRURB VEFMRU4gLQorCQkgKiAxLiBUaGlzIGN1cnJlbnQgc2NoZW1hIHVzZXMgYSBtYXhpbXVtIG9mIDM1 IGNoYXJhY3RlcnMgKDE0ICsgMTAgKworCQkgKiAnXDAnKS4KKwkJICovCisJCXNucHJpbnRmKHB1 Ym5hbWUsIHNpemVvZihwdWJuYW1lKSwgInBnX3N1YnNjcmliZXJfJXUiLCBkYmluZm9baV0ub2lk KTsKKwkJZGJpbmZvW2ldLnB1Ym5hbWUgPSBwZ19zdHJkdXAocHVibmFtZSk7CisKKwkJY3JlYXRl X3B1YmxpY2F0aW9uKGNvbm4sICZkYmluZm9baV0pOworCisJCWRpc2Nvbm5lY3RfZGF0YWJhc2Uo Y29ubik7CisJfQorCisJLyoKKwkgKiBDcmVhdGUgYSBzdWJzY3JpcHRpb24gZm9yIGVhY2ggZGF0 YWJhc2UuCisJICovCisJZm9yIChpID0gMDsgaSA8IG51bV9kYnM7IGkrKykKKwl7CisJCS8qIENv bm5lY3QgdG8gc3Vic2NyaWJlci4gKi8KKwkJY29ubiA9IGNvbm5lY3RfZGF0YWJhc2UoZGJpbmZv W2ldLnN1YmNvbm5pbmZvKTsKKwkJaWYgKGNvbm4gPT0gTlVMTCkKKwkJCWV4aXQoMSk7CisKKwkJ Y3JlYXRlX3N1YnNjcmlwdGlvbihjb25uLCAmZGJpbmZvW2ldKTsKKworCQkvKiBTZXQgdGhlIHJl cGxpY2F0aW9uIHByb2dyZXNzIHRvIHRoZSBjb3JyZWN0IExTTi4gKi8KKwkJc2V0X3JlcGxpY2F0 aW9uX3Byb2dyZXNzKGNvbm4sICZkYmluZm9baV0sIGNvbnNpc3RlbnRfbHNuKTsKKworCQkvKiBF bmFibGUgc3Vic2NyaXB0aW9uLiAqLworCQllbmFibGVfc3Vic2NyaXB0aW9uKGNvbm4sICZkYmlu Zm9baV0pOworCisJCWRpc2Nvbm5lY3RfZGF0YWJhc2UoY29ubik7CisJfQorCisJLyoKKwkgKiBU aGUgdHJhbnNpZW50IHJlcGxpY2F0aW9uIHNsb3QgaXMgbm8gbG9uZ2VyIHJlcXVpcmVkLiBEcm9w IGl0LgorCSAqCisJICogSWYgdGhlIHBoeXNpY2FsIHJlcGxpY2F0aW9uIHNsb3QgZXhpc3RzLCBk cm9wIGl0LgorCSAqCisJICogWFhYIHdlIG1pZ2h0IG5vdCBmYWlsIGhlcmUuIEluc3RlYWQsIHdl IHByb3ZpZGUgYSB3YXJuaW5nIHNvIHRoZSB1c2VyCisJICogZXZlbnR1YWxseSBkcm9wcyB0aGUg cmVwbGljYXRpb24gc2xvdCBsYXRlci4KKwkgKi8KKwljb25uID0gY29ubmVjdF9kYXRhYmFzZShk YmluZm9bMF0ucHViY29ubmluZm8pOworCWlmIChjb25uID09IE5VTEwpCisJeworCQlwZ19sb2df d2FybmluZygiY291bGQgbm90IGRyb3AgdHJhbnNpZW50IHJlcGxpY2F0aW9uIHNsb3QgXCIlc1wi IG9uIHB1Ymxpc2hlciIsIHRlbXBfcmVwbHNsb3QpOworCQlwZ19sb2dfd2FybmluZ19oaW50KCJE cm9wIHRoaXMgcmVwbGljYXRpb24gc2xvdCBzb29uIHRvIGF2b2lkIHJldGVudGlvbiBvZiBXQUwg ZmlsZXMuIik7CisJCWlmIChwcmltYXJ5X3Nsb3RfbmFtZSAhPSBOVUxMKQorCQkJcGdfbG9nX3dh cm5pbmcoImNvdWxkIG5vdCBkcm9wIHJlcGxpY2F0aW9uIHNsb3QgXCIlc1wiIG9uIHByaW1hcnki LCBwcmltYXJ5X3Nsb3RfbmFtZSk7CisJfQorCWVsc2UKKwl7CisJCWRyb3BfcmVwbGljYXRpb25f c2xvdChjb25uLCAmZGJpbmZvWzBdLCB0ZW1wX3JlcGxzbG90KTsKKwkJaWYgKHByaW1hcnlfc2xv dF9uYW1lICE9IE5VTEwpCisJCQlkcm9wX3JlcGxpY2F0aW9uX3Nsb3QoY29ubiwgJmRiaW5mb1sw XSwgcHJpbWFyeV9zbG90X25hbWUpOworCQlkaXNjb25uZWN0X2RhdGFiYXNlKGNvbm4pOworCX0K KworCS8qCisJICogU3RvcCB0aGUgc3Vic2NyaWJlci4KKwkgKi8KKwlwZ19sb2dfaW5mbygic3Rv cHBpbmcgdGhlIHN1YnNjcmliZXIiKTsKKworCXBnX2N0bF9jbWQgPSBwc3ByaW50ZigiXCIlc1wi IHN0b3AgLUQgXCIlc1wiIC1zIiwgcGdfY3RsX3BhdGgsIHN1YnNjcmliZXJfZGlyKTsKKwlyYyA9 IHN5c3RlbShwZ19jdGxfY21kKTsKKwlwZ19jdGxfc3RhdHVzKHBnX2N0bF9jbWQsIHJjLCAwKTsK KworCS8qCisJICogQ2hhbmdlIHN5c3RlbSBpZGVudGlmaWVyLgorCSAqLworCW1vZGlmeV9zeXNp ZChwZ19yZXNldHdhbF9wYXRoLCBzdWJzY3JpYmVyX2Rpcik7CisKKwkvKgorCSAqIFJlbW92ZSBs b2cgZmlsZSBnZW5lcmF0ZWQgYnkgdGhpcyB0b29sLCBpZiBpdCBydW5zIHN1Y2Nlc3NmdWxseS4K KwkgKiBPdGhlcndpc2UsIGZpbGUgaXMga2VwdCB0aGF0IG1heSBwcm92aWRlIHVzZWZ1bCBkZWJ1 Z2dpbmcgaW5mb3JtYXRpb24uCisJICovCisJdW5saW5rKHNlcnZlcl9zdGFydF9sb2cpOworCisJ c3VjY2VzcyA9IHRydWU7CisKKwlwZ19sb2dfaW5mbygiRG9uZSEiKTsKKworCXJldHVybiAwOwor fQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3QvMDQwX3BnX3N1YnNjcmliZXIu cGwgYi9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvdC8wNDBfcGdfc3Vic2NyaWJlci5wbApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi40ZWJmZjc2YjJkCi0tLSAvZGV2L251bGwK KysrIGIvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3QvMDQwX3BnX3N1YnNjcmliZXIucGwKQEAgLTAs MCArMSw0NCBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCisKKyMKKyMgVGVzdCBjaGVja2luZyBvcHRpb25zIG9mIHBnX3N1YnNjcmli ZXIuCisjCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgUG9zdGdyZVNRTDo6VGVz dDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworcHJvZ3JhbV9oZWxwX29rKCdwZ19zdWJzY3Jp YmVyJyk7Citwcm9ncmFtX3ZlcnNpb25fb2soJ3BnX3N1YnNjcmliZXInKTsKK3Byb2dyYW1fb3B0 aW9uc19oYW5kbGluZ19vaygncGdfc3Vic2NyaWJlcicpOworCitteSAkZGF0YWRpciA9IFBvc3Rn cmVTUUw6OlRlc3Q6OlV0aWxzOjp0ZW1wZGlyOworCitjb21tYW5kX2ZhaWxzKFsncGdfc3Vic2Ny aWJlciddLAorCSdubyBzdWJzY3JpYmVyIGRhdGEgZGlyZWN0b3J5IHNwZWNpZmllZCcpOworY29t bWFuZF9mYWlscygKKwlbCisJCSdwZ19zdWJzY3JpYmVyJywKKwkJJy0tcGdkYXRhJywgJGRhdGFk aXIKKwldLAorCSdubyBwdWJsaXNoZXIgY29ubmVjdGlvbiBzdHJpbmcgc3BlY2lmaWVkJyk7Citj b21tYW5kX2ZhaWxzKAorCVsKKwkJJ3BnX3N1YnNjcmliZXInLAorCQknLS1kcnktcnVuJywKKwkJ Jy0tcGdkYXRhJywgJGRhdGFkaXIsCisJCSctLXB1Ymxpc2hlci1jb25uaW5mbycsICdkYm5hbWU9 cG9zdGdyZXMnCisJXSwKKwknbm8gc3Vic2NyaWJlciBjb25uZWN0aW9uIHN0cmluZyBzcGVjaWZp ZWQnKTsKK2NvbW1hbmRfZmFpbHMoCisJWworCQkncGdfc3Vic2NyaWJlcicsCisJCSctLXZlcmJv c2UnLAorCQknLS1wZ2RhdGEnLCAkZGF0YWRpciwKKwkJJy0tcHVibGlzaGVyLWNvbm5pbmZvJywg J2RibmFtZT1wb3N0Z3JlcycsCisJCSctLXN1YnNjcmliZXItY29ubmluZm8nLCAnZGJuYW1lPXBv c3RncmVzJworCV0sCisJJ25vIGRhdGFiYXNlIG5hbWUgc3BlY2lmaWVkJyk7CisKK2RvbmVfdGVz dGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3QvMDQxX3BnX3N1YnNj cmliZXJfc3RhbmRieS5wbCBiL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC90LzA0MV9wZ19zdWJzY3Jp YmVyX3N0YW5kYnkucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZmJj ZDBmYzgyYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC90LzA0MV9w Z19zdWJzY3JpYmVyX3N0YW5kYnkucGwKQEAgLTAsMCArMSwxMzkgQEAKKyMgQ29weXJpZ2h0IChj KSAyMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCisjCisjIFRlc3Qg dXNpbmcgYSBzdGFuZGJ5IHNlcnZlciBhcyB0aGUgc3Vic2NyaWJlci4KKwordXNlIHN0cmljdDsK K3VzZSB3YXJuaW5nczsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3Rn cmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKK215ICRub2RlX3A7CitteSAk bm9kZV9mOworbXkgJG5vZGVfczsKK215ICRyZXN1bHQ7CisKKyMgU2V0IHVwIG5vZGUgUCBhcyBw cmltYXJ5Ciskbm9kZV9wID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdub2RlX3An KTsKKyRub2RlX3AtPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOworJG5vZGVf cC0+c3RhcnQ7CisKKyMgU2V0IHVwIG5vZGUgRiBhcyBhYm91dC10by1mYWlsIG5vZGUKKyMgVGhl IGV4dHJhIG9wdGlvbiBmb3JjZXMgaXQgdG8gaW5pdGlhbGl6ZSBhIG5ldyBjbHVzdGVyIGluc3Rl YWQgb2YgY29weWluZyBhCisjIHByZXZpb3VzbHkgaW5pdGRiJ3MgY2x1c3Rlci4KKyRub2RlX2Yg PSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ25vZGVfZicpOworJG5vZGVfZi0+aW5p dChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJywgZXh0cmEgPT4gWyAnLS1uby1pbnN0cnVj dGlvbnMnIF0pOworJG5vZGVfZi0+c3RhcnQ7CisKKyMgT24gbm9kZSBQCisjIC0gY3JlYXRlIGRh dGFiYXNlcworIyAtIGNyZWF0ZSB0ZXN0IHRhYmxlcworIyAtIGluc2VydCBhIHJvdworJG5vZGVf cC0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsIHEoCisJQ1JFQVRFIERBVEFCQVNFIHBnMTsKKwlD UkVBVEUgREFUQUJBU0UgcGcyOworKSk7Ciskbm9kZV9wLT5zYWZlX3BzcWwoJ3BnMScsICdDUkVB VEUgVEFCTEUgdGJsMSAoYSB0ZXh0KScpOworJG5vZGVfcC0+c2FmZV9wc3FsKCdwZzEnLCAiSU5T RVJUIElOVE8gdGJsMSBWQUxVRVMoJ2ZpcnN0IHJvdycpIik7Ciskbm9kZV9wLT5zYWZlX3BzcWwo J3BnMicsICdDUkVBVEUgVEFCTEUgdGJsMiAoYSB0ZXh0KScpOworCisjIFNldCB1cCBub2RlIFMg YXMgc3RhbmRieSBsaW5raW5nIHRvIG5vZGUgUAorJG5vZGVfcC0+YmFja3VwKCdiYWNrdXBfMScp OworJG5vZGVfcyA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbm9kZV9zJyk7Cisk bm9kZV9zLT5pbml0X2Zyb21fYmFja3VwKCRub2RlX3AsICdiYWNrdXBfMScsIGhhc19zdHJlYW1p bmcgPT4gMSk7Ciskbm9kZV9zLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgJ2xvZ19t aW5fbWVzc2FnZXMgPSBkZWJ1ZzInKTsKKyRub2RlX3MtPnNldF9zdGFuZGJ5X21vZGUoKTsKKyRu b2RlX3MtPnN0YXJ0OworCisjIEluc2VydCBhbm90aGVyIHJvdyBvbiBub2RlIFAgYW5kIHdhaXQg bm9kZSBTIHRvIGNhdGNoIHVwCiskbm9kZV9wLT5zYWZlX3BzcWwoJ3BnMScsICJJTlNFUlQgSU5U TyB0YmwxIFZBTFVFUygnc2Vjb25kIHJvdycpIik7Ciskbm9kZV9wLT53YWl0X2Zvcl9yZXBsYXlf Y2F0Y2h1cCgkbm9kZV9zKTsKKworIyBSdW4gcGdfc3Vic2NyaWJlciBvbiBhYm91dC10by1mYWls IG5vZGUgRgorY29tbWFuZF9mYWlscygKKwlbCisJCSdwZ19zdWJzY3JpYmVyJywgJy0tdmVyYm9z ZScsCisJCSctLXBnZGF0YScsICRub2RlX2YtPmRhdGFfZGlyLAorCQknLS1wdWJsaXNoZXItY29u bmluZm8nLCAkbm9kZV9wLT5jb25uc3RyKCdwZzEnKSwKKwkJJy0tc3Vic2NyaWJlci1jb25uaW5m bycsICRub2RlX2YtPmNvbm5zdHIoJ3BnMScpLAorCQknLS1kYXRhYmFzZScsICdwZzEnLAorCQkn LS1kYXRhYmFzZScsICdwZzInCisJXSwKKwknc3Vic2NyaWJlciBkYXRhIGRpcmVjdG9yeSBpcyBu b3QgYSBjb3B5IG9mIHRoZSBzb3VyY2UgZGF0YWJhc2UgY2x1c3RlcicpOworCisjIGRyeSBydW4g bW9kZSBvbiBub2RlIFMKK2NvbW1hbmRfb2soCisJWworCQkncGdfc3Vic2NyaWJlcicsICctLXZl cmJvc2UnLCAnLS1kcnktcnVuJywKKwkJJy0tcGdkYXRhJywgJG5vZGVfcy0+ZGF0YV9kaXIsCisJ CSctLXB1Ymxpc2hlci1jb25uaW5mbycsICRub2RlX3AtPmNvbm5zdHIoJ3BnMScpLAorCQknLS1z dWJzY3JpYmVyLWNvbm5pbmZvJywgJG5vZGVfcy0+Y29ubnN0cigncGcxJyksCisJCSctLWRhdGFi YXNlJywgJ3BnMScsCisJCSctLWRhdGFiYXNlJywgJ3BnMicKKwldLAorCSdydW4gcGdfc3Vic2Ny aWJlciAtLWRyeS1ydW4gb24gbm9kZSBTJyk7CisKKyMgUElEIHNldHMgdG8gdW5kZWZpbmVkIGJl Y2F1c2Ugc3Vic2NyaWJlciB3YXMgc3RvcHBlZCBiZWhpbmQgdGhlIHNjZW5lcy4KKyMgU3RhcnQg c3Vic2NyaWJlcgorJG5vZGVfcy0+e19waWR9ID0gdW5kZWY7Ciskbm9kZV9zLT5zdGFydDsKKyMg Q2hlY2sgaWYgbm9kZSBTIGlzIHN0aWxsIGEgc3RhbmRieQoraXMoJG5vZGVfcy0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICdTRUxFQ1QgcGdfaXNfaW5fcmVjb3ZlcnkoKScpLAorCSd0JywgJ3N0YW5k YnkgaXMgaW4gcmVjb3ZlcnknKTsKKworIyBSdW4gcGdfc3Vic2NyaWJlciBvbiBub2RlIFMKK2Nv bW1hbmRfb2soCisJWworCQkncGdfc3Vic2NyaWJlcicsICctLXZlcmJvc2UnLAorCQknLS1wZ2Rh dGEnLCAkbm9kZV9zLT5kYXRhX2RpciwKKwkJJy0tcHVibGlzaGVyLWNvbm5pbmZvJywgJG5vZGVf cC0+Y29ubnN0cigncGcxJyksCisJCSctLXN1YnNjcmliZXItY29ubmluZm8nLCAkbm9kZV9zLT5j b25uc3RyKCdwZzEnKSwKKwkJJy0tZGF0YWJhc2UnLCAncGcxJywKKwkJJy0tZGF0YWJhc2UnLCAn cGcyJworCV0sCisJJ3J1biBwZ19zdWJzY3JpYmVyIG9uIG5vZGUgUycpOworCisjIEluc2VydCBy b3dzIG9uIFAKKyRub2RlX3AtPnNhZmVfcHNxbCgncGcxJywgIklOU0VSVCBJTlRPIHRibDEgVkFM VUVTKCd0aGlyZCByb3cnKSIpOworJG5vZGVfcC0+c2FmZV9wc3FsKCdwZzInLCAiSU5TRVJUIElO VE8gdGJsMiBWQUxVRVMoJ3JvdyAxJykiKTsKKworIyBQSUQgc2V0cyB0byB1bmRlZmluZWQgYmVj YXVzZSBzdWJzY3JpYmVyIHdhcyBzdG9wcGVkIGJlaGluZCB0aGUgc2NlbmVzLgorIyBTdGFydCBz dWJzY3JpYmVyCiskbm9kZV9zLT57X3BpZH0gPSB1bmRlZjsKKyRub2RlX3MtPnN0YXJ0OworCisj IEdldCBzdWJzY3JpcHRpb24gbmFtZXMKKyRyZXN1bHQgPSAkbm9kZV9zLT5zYWZlX3BzcWwoCisJ J3Bvc3RncmVzJywgcXEoCisJU0VMRUNUIHN1Ym5hbWUgRlJPTSBwZ19zdWJzY3JpcHRpb24gV0hF UkUgc3VibmFtZSB+ICdecGdfc3Vic2NyaWJlcl8nCispKTsKK215IEBzdWJuYW1lcyA9IHNwbGl0 KCJcbiIsICRyZXN1bHQpOworCisjIFdhaXQgc3Vic2NyaWJlciB0byBjYXRjaCB1cAorJG5vZGVf cy0+d2FpdF9mb3Jfc3Vic2NyaXB0aW9uX3N5bmMoJG5vZGVfcCwgJHN1Ym5hbWVzWzBdKTsKKyRu b2RlX3MtPndhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRub2RlX3AsICRzdWJuYW1lc1sxXSk7 CisKKyMgQ2hlY2sgcmVzdWx0IG9uIGRhdGFiYXNlIHBnMQorJHJlc3VsdCA9ICRub2RlX3MtPnNh ZmVfcHNxbCgncGcxJywgJ1NFTEVDVCAqIEZST00gdGJsMScpOworaXMoICRyZXN1bHQsIHFxKGZp cnN0IHJvdworc2Vjb25kIHJvdwordGhpcmQgcm93KSwKKwknbG9naWNhbCByZXBsaWNhdGlvbiB3 b3JrcyBvbiBkYXRhYmFzZSBwZzEnKTsKKworIyBDaGVjayByZXN1bHQgb24gZGF0YWJhc2UgcGcy CiskcmVzdWx0ID0gJG5vZGVfcy0+c2FmZV9wc3FsKCdwZzInLCAnU0VMRUNUICogRlJPTSB0Ymwy Jyk7CitpcyggJHJlc3VsdCwgcXEocm93IDEpLAorCSdsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtz IG9uIGRhdGFiYXNlIHBnMicpOworCisjIERpZmZlcmVudCBzeXN0ZW0gaWRlbnRpZmllcj8KK215 ICRzeXNpZF9wID0gJG5vZGVfcC0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdTRUxFQ1Qgc3lzdGVt X2lkZW50aWZpZXIgRlJPTSBwZ19jb250cm9sX3N5c3RlbSgpJyk7CitteSAkc3lzaWRfcyA9ICRu b2RlX3MtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnU0VMRUNUIHN5c3RlbV9pZGVudGlmaWVyIEZS T00gcGdfY29udHJvbF9zeXN0ZW0oKScpOworb2soJHN5c2lkX3AgIT0gJHN5c2lkX3MsICdzeXN0 ZW0gaWRlbnRpZmllciB3YXMgY2hhbmdlZCcpOworCisjIGNsZWFuIHVwCiskbm9kZV9wLT50ZWFy ZG93bl9ub2RlOworJG5vZGVfcy0+dGVhcmRvd25fbm9kZTsKKworZG9uZV90ZXN0aW5nKCk7Ci0t IAoyLjQzLjAKCg== --_004_TY3PR01MB98890AB22AECA2F503EB7858F5742TY3PR01MB9889jpnp_ Content-Type: application/octet-stream; name="v7-0002-Address-some-comments-proposed-on-hackers.patch" Content-Description: v7-0002-Address-some-comments-proposed-on-hackers.patch Content-Disposition: attachment; filename="v7-0002-Address-some-comments-proposed-on-hackers.patch"; size=57895; creation-date="Tue, 23 Jan 2024 02:09:24 GMT"; modification-date="Tue, 23 Jan 2024 02:11:26 GMT" Content-Transfer-Encoding: base64 RnJvbSBjZmI3N2Y0YzU5OTQxNzUyN2Y3YmZiY2I3ZThkOTBhNGIwOWI1MTA4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTaGxvayBLeWFsIDxzaGxvay5reWFsLm9zc0BnbWFpbC5jb20+ CkRhdGU6IE1vbiwgMjIgSmFuIDIwMjQgMTI6NDI6MzQgKzA1MzAKU3ViamVjdDogW1BBVENIIHY3 IDIvM10gQWRkcmVzcyBzb21lIGNvbW1lbnRzIHByb3Bvc2VkIG9uIC1oYWNrZXJzCgpUaGUgcGF0 Y2ggaGFzIGZvbGxvd2luZyBjaGFuZ2VzOgoKKiBTb21lIGNvbW1lbnRzIHJlcG9ydGVkIG9uIHRo ZSB0aHJlYWQKKiBBZGQgYSB0aW1lb3V0IG9wdGlvbiBmb3IgdGhlIHJlY292ZXJ5IG9wdGlvbgoq IFJlamVjdCBpZiB0aGUgdGFyZ2V0IHNlcnZlciBpcyBub3QgYSBzdGFuZGJ5CiogUmVqZWN0IHdo ZW4gdGhlIC0tc3Vic2NyaWJlci1jb25uaW5mbyBzcGVjaWZpZXMgbm9uLWxvY2FsIHNlcnZlcgoq IEFkZCAtdSBhbmQgLXAgb3B0aW9ucwoqIENoZWNrIHdhbF9sZXZlbCBhbmQgbWF4X3JlcGxpY2F0 aW9uX3Nsb3QgcGFyYW1ldGVycwotLS0KIGRvYy9zcmMvc2dtbC9yZWYvcGdfc3Vic2NyaWJlci5z Z21sICAgICAgICAgICB8ICAyMSArLQogc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3BnX3N1YnNjcmli ZXIuYyAgICAgICAgIHwgOTExICsrKysrKysrKysrLS0tLS0tLQogc3JjL2Jpbi9wZ19iYXNlYmFj a3VwL3QvMDQwX3BnX3N1YnNjcmliZXIucGwgIHwgICA5ICstCiAuLi4vdC8wNDFfcGdfc3Vic2Ny aWJlcl9zdGFuZGJ5LnBsICAgICAgICAgICAgfCAgIDggKy0KIDQgZmlsZXMgY2hhbmdlZCwgNjAx IGluc2VydGlvbnMoKyksIDM0OCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3Nn bWwvcmVmL3BnX3N1YnNjcmliZXIuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfc3Vic2NyaWJl ci5zZ21sCmluZGV4IDU1MzE4NWMzNWYuLmVhYWJmYzcwNTMgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMv c2dtbC9yZWYvcGdfc3Vic2NyaWJlci5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfc3Vi c2NyaWJlci5zZ21sCkBAIC0xNiwxMiArMTYsMTggQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9u CiAKICA8cmVmbmFtZWRpdj4KICAgPHJlZm5hbWU+cGdfc3Vic2NyaWJlcjwvcmVmbmFtZT4KLSAg PHJlZnB1cnBvc2U+Y3JlYXRlIGEgbmV3IGxvZ2ljYWwgcmVwbGljYSBmcm9tIGEgc3RhbmRieSBz ZXJ2ZXI8L3JlZnB1cnBvc2U+CisgIDxyZWZwdXJwb3NlPkNvbnZlcnQgYSBzdGFuZGJ5IHJlcGxp Y2EgdG8gYSBsb2dpY2FsIHJlcGxpY2E8L3JlZnB1cnBvc2U+CiAgPC9yZWZuYW1lZGl2PgogCiAg PHJlZnN5bm9wc2lzZGl2PgogICA8Y21kc3lub3BzaXM+CiAgICA8Y29tbWFuZD5wZ19zdWJzY3Jp YmVyPC9jb21tYW5kPgorICAgPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi1EPC9vcHRpb24+ PC9hcmc+CisgICA8YXJnIGNob2ljZT0icGxhaW4iPjxyZXBsYWNlYWJsZT5kYXRhZGlyPC9yZXBs YWNlYWJsZT48L2FyZz4KKyAgIDxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tUDwvb3B0aW9u PgorICAgPHJlcGxhY2VhYmxlPnB1Ymxpc2hlci1jb25uaW5mbzwvcmVwbGFjZWFibGU+PC9hcmc+ CisgICA8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LVM8L29wdGlvbj48L2FyZz4KKyAgIDxh cmcgY2hvaWNlPSJwbGFpbiI+PHJlcGxhY2VhYmxlPnN1YnNjcmliZXItY29ubmluZm88L3JlcGxh Y2VhYmxlPjwvYXJnPgogICAgPGFyZyByZXA9InJlcGVhdCI+PHJlcGxhY2VhYmxlPm9wdGlvbjwv cmVwbGFjZWFibGU+PC9hcmc+CiAgIDwvY21kc3lub3BzaXM+CiAgPC9yZWZzeW5vcHNpc2Rpdj4K QEAgLTI5LDE3ICszNSwxOCBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICA8cmVmc2VjdDE+ CiAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CiAgIDxwYXJhPgotICAgPGFwcGxpY2F0aW9u PnBnX3N1YnNjcmliZXI8L2FwcGxpY2F0aW9uPiB0YWtlcyB0aGUgcHVibGlzaGVyIGFuZCBzdWJz Y3JpYmVyCi0gICBjb25uZWN0aW9uIHN0cmluZ3MsIGEgY2x1c3RlciBkaXJlY3RvcnkgZnJvbSBh IHN0YW5kYnkgc2VydmVyIGFuZCBhIGxpc3Qgb2YKLSAgIGRhdGFiYXNlIG5hbWVzIGFuZCBpdCBz ZXRzIHVwIGEgbmV3IGxvZ2ljYWwgcmVwbGljYSB1c2luZyB0aGUgcGh5c2ljYWwKLSAgIHJlY292 ZXJ5IHByb2Nlc3MuCisgICBwZ19zdWJzY3JpYmVyIGNyZWF0ZXMgYSBuZXcgPGxpbmsKKyAgIGxp bmtlbmQ9ImxvZ2ljYWwtcmVwbGljYXRpb24tc3Vic2NyaXB0aW9uIj5zdWJzY3JpYmVyPC9saW5r PiBmcm9tIGEgcGh5c2ljYWwKKyAgIHN0YW5kYnkgc2VydmVyLiBUaGlzIGFsbG93cyB1c2VycyB0 byBxdWlja2x5IHNldCB1cCBsb2dpY2FsIHJlcGxpY2F0aW9uCisgICBzeXN0ZW0uCiAgIDwvcGFy YT4KIAogICA8cGFyYT4KLSAgIFRoZSA8YXBwbGljYXRpb24+cGdfc3Vic2NyaWJlcjwvYXBwbGlj YXRpb24+IHNob3VsZCBiZSBydW4gYXQgdGhlIHRhcmdldAorICAgVGhlIDxhcHBsaWNhdGlvbj5w Z19zdWJzY3JpYmVyPC9hcHBsaWNhdGlvbj4gaGFzIHRvIGJlIHJ1biBhdCB0aGUgdGFyZ2V0CiAg ICBzZXJ2ZXIuIFRoZSBzb3VyY2Ugc2VydmVyIChrbm93biBhcyBwdWJsaXNoZXIgc2VydmVyKSBz aG91bGQgYWNjZXB0IGxvZ2ljYWwKICAgIHJlcGxpY2F0aW9uIGNvbm5lY3Rpb25zIGZyb20gdGhl IHRhcmdldCBzZXJ2ZXIgKGtub3duIGFzIHN1YnNjcmliZXIgc2VydmVyKS4KLSAgIFRoZSB0YXJn ZXQgc2VydmVyIHNob3VsZCBhY2NlcHQgbG9jYWwgbG9naWNhbCByZXBsaWNhdGlvbiBjb25uZWN0 aW9uLgorICAgVGhlIHRhcmdldCBzZXJ2ZXIgc2hvdWxkIGFjY2VwdCBsb2dpY2FsIHJlcGxpY2F0 aW9uIGNvbm5lY3Rpb24gZnJvbQorICAgbG9jYWxob3N0LgogICA8L3BhcmE+CiAgPC9yZWZzZWN0 MT4KIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3BnX3N1YnNjcmliZXIuYyBi L3NyYy9iaW4vcGdfYmFzZWJhY2t1cC9wZ19zdWJzY3JpYmVyLmMKaW5kZXggZTk5OGMyOWY5ZS4u Mzg4MGQxNWVmOSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3BnX3N1YnNjcmli ZXIuYworKysgYi9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvcGdfc3Vic2NyaWJlci5jCkBAIC0xLDEy ICsxLDEyIEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCiAgKiBwZ19zdWJzY3JpYmVyLmMKLSAq CSAgQ3JlYXRlIGEgbmV3IGxvZ2ljYWwgcmVwbGljYSBmcm9tIGEgc3RhbmRieSBzZXJ2ZXIKKyAq CSAgQ29udmVydCBhIHN0YW5kYnkgcmVwbGljYSB0byBhIGxvZ2ljYWwgcmVwbGljYQogICoKICAq IENvcHlyaWdodCAoQykgMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK ICAqCiAgKiBJREVOVElGSUNBVElPTgotICoJCXNyYy9iaW4vcGdfc3Vic2NyaWJlci9wZ19zdWJz Y3JpYmVyLmMKKyAqCQlzcmMvYmluL3BnX2Jhc2ViYWNrdXAvcGdfc3Vic2NyaWJlci5jCiAgKgog ICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KQEAgLTMyLDgxICszMiwxMjIgQEAKIAogI2RlZmluZQlQ R1NfT1VUUFVUX0RJUgkicGdfc3Vic2NyaWJlcl9vdXRwdXQuZCIKIAotdHlwZWRlZiBzdHJ1Y3Qg TG9naWNhbFJlcEluZm8KK3R5cGVkZWYgc3RydWN0IExvZ2ljYWxSZXBQZXJkYkluZm8KIHsKLQlP aWQJCQlvaWQ7CQkJLyogZGF0YWJhc2UgT0lEICovCi0JY2hhcgkgICAqZGJuYW1lOwkJCS8qIGRh dGFiYXNlIG5hbWUgKi8KLQljaGFyCSAgICpwdWJjb25uaW5mbzsJLyogcHVibGljYXRpb24gY29u bmVjdGlvbiBzdHJpbmcgZm9yIGxvZ2ljYWwKLQkJCQkJCQkJICogcmVwbGljYXRpb24gKi8KLQlj aGFyCSAgICpzdWJjb25uaW5mbzsJLyogc3Vic2NyaXB0aW9uIGNvbm5lY3Rpb24gc3RyaW5nIGZv ciBsb2dpY2FsCi0JCQkJCQkJCSAqIHJlcGxpY2F0aW9uICovCi0JY2hhcgkgICAqcHVibmFtZTsJ CS8qIHB1YmxpY2F0aW9uIG5hbWUgKi8KLQljaGFyCSAgICpzdWJuYW1lOwkJLyogc3Vic2NyaXB0 aW9uIG5hbWUgKGFsc28gcmVwbGljYXRpb24gc2xvdAotCQkJCQkJCQkgKiBuYW1lKSAqLwotCi0J Ym9vbAkJbWFkZV9yZXBsc2xvdDsJLyogcmVwbGljYXRpb24gc2xvdCB3YXMgY3JlYXRlZCAqLwot CWJvb2wJCW1hZGVfcHVibGljYXRpb247CS8qIHB1YmxpY2F0aW9uIHdhcyBjcmVhdGVkICovCi0J Ym9vbAkJbWFkZV9zdWJzY3JpcHRpb247CS8qIHN1YnNjcmlwdGlvbiB3YXMgY3JlYXRlZCAqLwot fSBMb2dpY2FsUmVwSW5mbzsKKwlPaWQJCW9pZDsKKwljaGFyICAgKmRibmFtZTsKKwlib29sCW1h ZGVfcmVwbHNsb3Q7CS8qIHJlcGxpY2F0aW9uIHNsb3Qgd2FzIGNyZWF0ZWQgKi8KKwlib29sCW1h ZGVfcHVibGljYXRpb247CS8qIHB1YmxpY2F0aW9uIHdhcyBjcmVhdGVkICovCisJYm9vbAltYWRl X3N1YnNjcmlwdGlvbjsJLyogc3Vic2NyaXB0aW9uIHdhcyBjcmVhdGVkICovCit9IExvZ2ljYWxS ZXBQZXJkYkluZm87CisKK3R5cGVkZWYgc3RydWN0Cit7CisJTG9naWNhbFJlcFBlcmRiSW5mbwkg ICAqcGVyZGI7CQkJLyogYXJyYXkgb2YgZGIgaW5mb3MgKi8KKwlpbnQJCQkJCQluZGJzOwkJCS8q IG51bWJlciBvZiBkYiBpbmZvcyAqLworfSBMb2dpY2FsUmVwUGVyZGJJbmZvQXJyOworCit0eXBl ZGVmIHN0cnVjdCBQcmltYXJ5SW5mbworeworCWNoYXIgICAqYmFzZV9jb25uaW5mbzsKKwl1aW50 NjQJc3lzaWQ7Cit9IFByaW1hcnlJbmZvOworCit0eXBlZGVmIHN0cnVjdCBTdGFuZGJ5SW5mbwor eworCWNoYXIgICAqYmFzZV9jb25uaW5mbzsKKwljaGFyICAgKmJpbmRpcjsKKwljaGFyICAgKnBn ZGF0YTsKKwljaGFyICAgKnByaW1hcnlfc2xvdF9uYW1lOworCXVpbnQ2NAlzeXNpZDsKK30gU3Rh bmRieUluZm87CiAKIHN0YXRpYyB2b2lkIGNsZWFudXBfb2JqZWN0c19hdGV4aXQodm9pZCk7CiBz dGF0aWMgdm9pZCB1c2FnZSgpOwotc3RhdGljIGNoYXIgKmdldF9iYXNlX2Nvbm5pbmZvKGNoYXIg KmNvbm5pbmZvLCBjaGFyICpkYm5hbWUsCi0JCQkJCQkJICAgY29uc3QgY2hhciAqbm9kZXJvbGUp Owotc3RhdGljIGJvb2wgZ2V0X2V4ZWNfcGF0aChjb25zdCBjaGFyICpwYXRoKTsKK3N0YXRpYyBj aGFyICpnZXRfYmFzZV9jb25uaW5mbyhjaGFyICpjb25uaW5mbywgY2hhciAqZGJuYW1lKTsKK3N0 YXRpYyBib29sIGdldF9leGVjX2Jhc2VfcGF0aChjb25zdCBjaGFyICpwYXRoKTsKIHN0YXRpYyBi b29sIGNoZWNrX2RhdGFfZGlyZWN0b3J5KGNvbnN0IGNoYXIgKmRhdGFkaXIpOworc3RhdGljIHZv aWQgc3RvcmVfZGJfbmFtZXMoTG9naWNhbFJlcFBlcmRiSW5mbyAqKnBlcmRiLCBpbnQgbmRicyk7 CitzdGF0aWMgdm9pZCBnZXRfc3lzaWRfZm9yX3ByaW1hcnkoUHJpbWFyeUluZm8gKnByaW1hcnks IGNoYXIgKmRibmFtZSk7CitzdGF0aWMgdm9pZCBnZXRfY29udHJvbF9mb3Jfc3RhbmRieShTdGFu ZGJ5SW5mbyAqc3RhbmRieSk7CiBzdGF0aWMgY2hhciAqY29uY2F0X2Nvbm5pbmZvX2RibmFtZShj b25zdCBjaGFyICpjb25uaW5mbywgY29uc3QgY2hhciAqZGJuYW1lKTsKLXN0YXRpYyBMb2dpY2Fs UmVwSW5mbyAqc3RvcmVfcHViX3N1Yl9pbmZvKGNvbnN0IGNoYXIgKnB1Yl9iYXNlX2Nvbm5pbmZv LCBjb25zdCBjaGFyICpzdWJfYmFzZV9jb25uaW5mbyk7Ci1zdGF0aWMgUEdjb25uICpjb25uZWN0 X2RhdGFiYXNlKGNvbnN0IGNoYXIgKmNvbm5pbmZvKTsKK3N0YXRpYyBQR2Nvbm4gKmNvbm5lY3Rf ZGF0YWJhc2UoY29uc3QgY2hhciAqYmFzZV9jb25uaW5mbywgY29uc3QgY2hhcipkYm5hbWUpOwog c3RhdGljIHZvaWQgZGlzY29ubmVjdF9kYXRhYmFzZShQR2Nvbm4gKmNvbm4pOwotc3RhdGljIHVp bnQ2NCBnZXRfc3lzaWRfZnJvbV9jb25uKGNvbnN0IGNoYXIgKmNvbm5pbmZvKTsKLXN0YXRpYyB1 aW50NjQgZ2V0X2NvbnRyb2xfZnJvbV9kYXRhZGlyKGNvbnN0IGNoYXIgKmRhdGFkaXIpOwotc3Rh dGljIHZvaWQgbW9kaWZ5X3N5c2lkKGNvbnN0IGNoYXIgKnBnX3Jlc2V0d2FsX3BhdGgsIGNvbnN0 IGNoYXIgKmRhdGFkaXIpOwotc3RhdGljIGNoYXIgKnVzZV9wcmltYXJ5X3Nsb3RfbmFtZSh2b2lk KTsKLXN0YXRpYyBib29sIGNyZWF0ZV9hbGxfbG9naWNhbF9yZXBsaWNhdGlvbl9zbG90cyhMb2dp Y2FsUmVwSW5mbyAqZGJpbmZvKTsKLXN0YXRpYyBjaGFyICpjcmVhdGVfbG9naWNhbF9yZXBsaWNh dGlvbl9zbG90KFBHY29ubiAqY29ubiwgTG9naWNhbFJlcEluZm8gKmRiaW5mbywKLQkJCQkJCQkJ CQkJIGNoYXIgKnNsb3RfbmFtZSk7Ci1zdGF0aWMgdm9pZCBkcm9wX3JlcGxpY2F0aW9uX3Nsb3Qo UEdjb25uICpjb25uLCBMb2dpY2FsUmVwSW5mbyAqZGJpbmZvLCBjb25zdCBjaGFyICpzbG90X25h bWUpOworc3RhdGljIGNoYXIgKnVzZV9wcmltYXJ5X3Nsb3RfbmFtZShQcmltYXJ5SW5mbyAqcHJp bWFyeSwgU3RhbmRieUluZm8gKnN0YW5kYnksCisJCQkJCQkJCSAgIExvZ2ljYWxSZXBQZXJkYklu Zm8gKnBlcmRiKTsKK3N0YXRpYyBib29sIGNyZWF0ZV9hbGxfbG9naWNhbF9yZXBsaWNhdGlvbl9z bG90cyhQcmltYXJ5SW5mbyAqcHJpbWFyeSwKKwkJCQkJCQkJCQkJCSBMb2dpY2FsUmVwUGVyZGJJ bmZvQXJyICpkYmFycik7CitzdGF0aWMgY2hhciAqY3JlYXRlX2xvZ2ljYWxfcmVwbGljYXRpb25f c2xvdChQR2Nvbm4gKmNvbm4sIGJvb2wgdGVtcG9yYXJ5LAorCQkJCQkJCQkJCQkgTG9naWNhbFJl cFBlcmRiSW5mbyAqcGVyZGIpOworc3RhdGljIHZvaWQgbW9kaWZ5X3N5c2lkKGNvbnN0IGNoYXIg KmJpbmRpciwgY29uc3QgY2hhciAqZGF0YWRpcik7CitzdGF0aWMgdm9pZCBkcm9wX3JlcGxpY2F0 aW9uX3Nsb3QoUEdjb25uICpjb25uLCBMb2dpY2FsUmVwUGVyZGJJbmZvICpwZXJkYiwKKwkJCQkJ CQkJICBjb25zdCBjaGFyICpzbG90X25hbWUpOwogc3RhdGljIHZvaWQgcGdfY3RsX3N0YXR1cyhj b25zdCBjaGFyICpwZ19jdGxfY21kLCBpbnQgcmMsIGludCBhY3Rpb24pOwotc3RhdGljIHZvaWQg d2FpdF9mb3JfZW5kX3JlY292ZXJ5KGNvbnN0IGNoYXIgKmNvbm5pbmZvKTsKLXN0YXRpYyB2b2lk IGNyZWF0ZV9wdWJsaWNhdGlvbihQR2Nvbm4gKmNvbm4sIExvZ2ljYWxSZXBJbmZvICpkYmluZm8p Owotc3RhdGljIHZvaWQgZHJvcF9wdWJsaWNhdGlvbihQR2Nvbm4gKmNvbm4sIExvZ2ljYWxSZXBJ bmZvICpkYmluZm8pOwotc3RhdGljIHZvaWQgY3JlYXRlX3N1YnNjcmlwdGlvbihQR2Nvbm4gKmNv bm4sIExvZ2ljYWxSZXBJbmZvICpkYmluZm8pOwotc3RhdGljIHZvaWQgZHJvcF9zdWJzY3JpcHRp b24oUEdjb25uICpjb25uLCBMb2dpY2FsUmVwSW5mbyAqZGJpbmZvKTsKLXN0YXRpYyB2b2lkIHNl dF9yZXBsaWNhdGlvbl9wcm9ncmVzcyhQR2Nvbm4gKmNvbm4sIExvZ2ljYWxSZXBJbmZvICpkYmlu Zm8sIGNvbnN0IGNoYXIgKmxzbik7Ci1zdGF0aWMgdm9pZCBlbmFibGVfc3Vic2NyaXB0aW9uKFBH Y29ubiAqY29ubiwgTG9naWNhbFJlcEluZm8gKmRiaW5mbyk7CitzdGF0aWMgdm9pZCB3YWl0X2Zv cl9lbmRfcmVjb3ZlcnkoY29uc3QgY2hhciAqYmFzZV9jb25uaW5mbywKKwkJCQkJCQkJICBjb25z dCBjaGFyICpkYm5hbWUpOworc3RhdGljIHZvaWQgY3JlYXRlX3B1YmxpY2F0aW9uKFBHY29ubiAq Y29ubiwgUHJpbWFyeUluZm8gKnByaW1hcnksCisJCQkJCQkJICAgTG9naWNhbFJlcFBlcmRiSW5m byAqcGVyZGIpOworc3RhdGljIHZvaWQgZHJvcF9wdWJsaWNhdGlvbihQR2Nvbm4gKmNvbm4sIExv Z2ljYWxSZXBQZXJkYkluZm8gKnBlcmRiKTsKK3N0YXRpYyB2b2lkIGNyZWF0ZV9zdWJzY3JpcHRp b24oUEdjb25uICpjb25uLCBTdGFuZGJ5SW5mbyAqc3RhbmRieSwKKwkJCQkJCQkJY2hhciAqYmFz ZV9jb25uaW5mbywKKwkJCQkJCQkJTG9naWNhbFJlcFBlcmRiSW5mbyAqcGVyZGIpOworc3RhdGlj IHZvaWQgZHJvcF9zdWJzY3JpcHRpb24oUEdjb25uICpjb25uLCBMb2dpY2FsUmVwUGVyZGJJbmZv ICpwZXJkYik7CitzdGF0aWMgdm9pZCBzZXRfcmVwbGljYXRpb25fcHJvZ3Jlc3MoUEdjb25uICpj b25uLCBMb2dpY2FsUmVwUGVyZGJJbmZvICpwZXJkYiwgY29uc3QgY2hhciAqbHNuKTsKK3N0YXRp YyB2b2lkIGVuYWJsZV9zdWJzY3JpcHRpb24oUEdjb25uICpjb25uLCBMb2dpY2FsUmVwUGVyZGJJ bmZvICpwZXJkYik7CitzdGF0aWMgdm9pZCBzdGFydF9zdGFuZGJ5X3NlcnZlcihTdGFuZGJ5SW5m byAqc3RhbmRieSwgdW5zaWduZWQgc2hvcnQgc3VicG9ydCwKKwkJCQkJCQkJIGNoYXIgKnNlcnZl cl9zdGFydF9sb2cpOworc3RhdGljIGNoYXIgKmNvbnN0cnVjdF9zdWJfY29ubmluZm8oY2hhciAq dXNlcm5hbWUsIHVuc2lnbmVkIHNob3J0IHN1YnBvcnQpOwogCiAjZGVmaW5lCVVTRUNfUEVSX1NF QwkxMDAwMDAwCi0jZGVmaW5lCVdBSVRfSU5URVJWQUwJMQkJLyogMSBzZWNvbmQgKi8KKyNkZWZp bmUgREVGQVVMVF9XQUlUCTYwCisjZGVmaW5lIFdBSVRTX1BFUl9TRUMJMTAgICAgICAgICAgICAg IC8qIHNob3VsZCBkaXZpZGUgVVNFQ19QRVJfU0VDIGV2ZW5seSAqLworI2RlZmluZSBERUZfUEdT UE9SVAkJNTAxMTEKIAogLyogT3B0aW9ucyAqLwotc3RhdGljIGNvbnN0IGNoYXIgKnByb2duYW1l OwotCi1zdGF0aWMgY2hhciAqc3Vic2NyaWJlcl9kaXIgPSBOVUxMOwogc3RhdGljIGNoYXIgKnB1 Yl9jb25uaW5mb19zdHIgPSBOVUxMOwotc3RhdGljIGNoYXIgKnN1Yl9jb25uaW5mb19zdHIgPSBO VUxMOwogc3RhdGljIFNpbXBsZVN0cmluZ0xpc3QgZGF0YWJhc2VfbmFtZXMgPSB7TlVMTCwgTlVM TH07Ci1zdGF0aWMgY2hhciAqcHJpbWFyeV9zbG90X25hbWUgPSBOVUxMOworc3RhdGljIGludAl3 YWl0X3NlY29uZHMgPSBERUZBVUxUX1dBSVQ7CitzdGF0aWMgYm9vbCByZXRhaW4gPSBmYWxzZTsK IHN0YXRpYyBib29sIGRyeV9ydW4gPSBmYWxzZTsKIAogc3RhdGljIGJvb2wgc3VjY2VzcyA9IGZh bHNlOworc3RhdGljIGNvbnN0IGNoYXIgKnByb2duYW1lOworc3RhdGljIExvZ2ljYWxSZXBQZXJk YkluZm9BcnIgZGJhcnI7CitzdGF0aWMgUHJpbWFyeUluZm8gcHJpbWFyeTsKK3N0YXRpYyBTdGFu ZGJ5SW5mbyBzdGFuZGJ5OwogCi1zdGF0aWMgY2hhciAqcGdfY3RsX3BhdGggPSBOVUxMOwotc3Rh dGljIGNoYXIgKnBnX3Jlc2V0d2FsX3BhdGggPSBOVUxMOworZW51bSBQR1NXYWl0UE1SZXN1bHQK K3sKKwlQR1NfUE9TVE1BU1RFUl9SRUFEWSwKKwlQR1NfUE9TVE1BU1RFUl9TVEFOREJZLAorCVBH U19QT1NUTUFTVEVSX1NUSUxMX1NUQVJUSU5HLAorCVBHU19QT1NUTUFTVEVSX0ZBSUxFRAorfTsK IAotc3RhdGljIExvZ2ljYWxSZXBJbmZvICpkYmluZm87Ci1zdGF0aWMgaW50CW51bV9kYnMgPSAw OwogCi1zdGF0aWMgY2hhciB0ZW1wX3JlcGxzbG90W05BTUVEQVRBTEVOXSA9IHswfTsKLXN0YXRp YyBib29sIG1hZGVfdHJhbnNpZW50X3JlcGxzbG90ID0gZmFsc2U7CisvKgorICogQnVpbGQgdGhl IHJlcGxpY2F0aW9uIHNsb3QgYW5kIHN1YnNjcmlwdGlvbiBuYW1lLiBUaGUgbmFtZSBtdXN0IG5v dCBleGNlZWQKKyAqIE5BTUVEQVRBTEVOIC0gMS4gVGhpcyBjdXJyZW50IHNjaGVtYSB1c2VzIGEg bWF4aW11bSBvZiAzNiBjaGFyYWN0ZXJzCisgKiAoMTQgKyAxMCArIDEgKyAxMCArICdcMCcpLiBT eXN0ZW0gaWRlbnRpZmllciBpcyBpbmNsdWRlZCB0byByZWR1Y2UgdGhlCisgKiBwcm9iYWJpbGl0 eSBvZiBjb2xsaXNpb24uIEJ5IGRlZmF1bHQsIHN1YnNjcmlwdGlvbiBuYW1lIGlzIHVzZWQgYXMK KyAqIHJlcGxpY2F0aW9uIHNsb3QgbmFtZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitnZXRf c3Vic2NyaXB0aW9uX25hbWUoT2lkIG9pZCwgaW50IHBpZCwgY2hhciAqc3VibmFtZSwgU2l6ZSBz enN1YikKK3sKKwlzbnByaW50ZihzdWJuYW1lLCBzenN1YiwgInBnX3N1YnNjcmliZXJfJXVfJWQi LCBvaWQsIHBpZCk7Cit9CiAKLWVudW0gV2FpdFBNUmVzdWx0CisvKgorICogQnVpbGQgdGhlIHB1 YmxpY2F0aW9uIG5hbWUuIFRoZSBuYW1lIG11c3Qgbm90IGV4Y2VlZCBOQU1FREFUQUxFTiAtCisg KiAxLiBUaGlzIGN1cnJlbnQgc2NoZW1hIHVzZXMgYSBtYXhpbXVtIG9mIDM1IGNoYXJhY3RlcnMg KDE0ICsgMTAgKworICogJ1wwJykuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2V0X3B1Ymxp Y2F0aW9uX25hbWUoT2lkIG9pZCwgY2hhciAqcHVibmFtZSwgU2l6ZSBzenB1YikKIHsKLQlQT1NU TUFTVEVSX1JFQURZLAotCVBPU1RNQVNURVJfU1RBTkRCWSwKLQlQT1NUTUFTVEVSX1NUSUxMX1NU QVJUSU5HLAotCVBPU1RNQVNURVJfRkFJTEVECi19OworCXNucHJpbnRmKHB1Ym5hbWUsIHN6cHVi LCAicGdfc3Vic2NyaWJlcl8ldSIsIG9pZCk7Cit9CiAKIAogLyoKQEAgLTEyNSw0MSArMTY2LDM5 IEBAIGNsZWFudXBfb2JqZWN0c19hdGV4aXQodm9pZCkKIAlpZiAoc3VjY2VzcykKIAkJcmV0dXJu OwogCi0JZm9yIChpID0gMDsgaSA8IG51bV9kYnM7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgZGJh cnIubmRiczsgaSsrKQogCXsKLQkJaWYgKGRiaW5mb1tpXS5tYWRlX3N1YnNjcmlwdGlvbikKKwkJ TG9naWNhbFJlcFBlcmRiSW5mbyAqcGVyZGIgPSAmZGJhcnIucGVyZGJbaV07CisKKwkJaWYgKHBl cmRiLT5tYWRlX3N1YnNjcmlwdGlvbikKIAkJewotCQkJY29ubiA9IGNvbm5lY3RfZGF0YWJhc2Uo ZGJpbmZvW2ldLnN1YmNvbm5pbmZvKTsKKwkJCWNvbm4gPSBjb25uZWN0X2RhdGFiYXNlKHN0YW5k YnkuYmFzZV9jb25uaW5mbywgcGVyZGItPmRibmFtZSk7CiAJCQlpZiAoY29ubiAhPSBOVUxMKQog CQkJewotCQkJCWRyb3Bfc3Vic2NyaXB0aW9uKGNvbm4sICZkYmluZm9baV0pOworCQkJCWRyb3Bf c3Vic2NyaXB0aW9uKGNvbm4sIHBlcmRiKTsKIAkJCQlkaXNjb25uZWN0X2RhdGFiYXNlKGNvbm4p OwogCQkJfQogCQl9CiAKLQkJaWYgKGRiaW5mb1tpXS5tYWRlX3B1YmxpY2F0aW9uIHx8IGRiaW5m b1tpXS5tYWRlX3JlcGxzbG90KQorCQlpZiAocGVyZGItPm1hZGVfcHVibGljYXRpb24gfHwgcGVy ZGItPm1hZGVfcmVwbHNsb3QpCiAJCXsKLQkJCWNvbm4gPSBjb25uZWN0X2RhdGFiYXNlKGRiaW5m b1tpXS5wdWJjb25uaW5mbyk7CisJCQljb25uID0gY29ubmVjdF9kYXRhYmFzZShwcmltYXJ5LmJh c2VfY29ubmluZm8sIHBlcmRiLT5kYm5hbWUpOwogCQkJaWYgKGNvbm4gIT0gTlVMTCkKIAkJCXsK LQkJCQlpZiAoZGJpbmZvW2ldLm1hZGVfcHVibGljYXRpb24pCi0JCQkJCWRyb3BfcHVibGljYXRp b24oY29ubiwgJmRiaW5mb1tpXSk7Ci0JCQkJaWYgKGRiaW5mb1tpXS5tYWRlX3JlcGxzbG90KQot CQkJCQlkcm9wX3JlcGxpY2F0aW9uX3Nsb3QoY29ubiwgJmRiaW5mb1tpXSwgTlVMTCk7CisJCQkJ aWYgKHBlcmRiLT5tYWRlX3B1YmxpY2F0aW9uKQorCQkJCQlkcm9wX3B1YmxpY2F0aW9uKGNvbm4s IHBlcmRiKTsKKwkJCQlpZiAocGVyZGItPm1hZGVfcmVwbHNsb3QpCisJCQkJeworCQkJCQljaGFy IHJlcGxzbG90bmFtZVtOQU1FREFUQUxFTl07CisKKwkJCQkJZ2V0X3N1YnNjcmlwdGlvbl9uYW1l KHBlcmRiLT5vaWQsIChpbnQpIGdldHBpZCgpLAorCQkJCQkJCQkJCSAgcmVwbHNsb3RuYW1lLCBO QU1FREFUQUxFTik7CisJCQkJCWRyb3BfcmVwbGljYXRpb25fc2xvdChjb25uLCBwZXJkYiwgcmVw bHNsb3RuYW1lKTsKKwkJCQl9CiAJCQkJZGlzY29ubmVjdF9kYXRhYmFzZShjb25uKTsKIAkJCX0K IAkJfQogCX0KLQotCWlmIChtYWRlX3RyYW5zaWVudF9yZXBsc2xvdCkKLQl7Ci0JCWNvbm4gPSBj b25uZWN0X2RhdGFiYXNlKGRiaW5mb1swXS5wdWJjb25uaW5mbyk7Ci0JCWlmIChjb25uICE9IE5V TEwpCi0JCXsKLQkJCWRyb3BfcmVwbGljYXRpb25fc2xvdChjb25uLCAmZGJpbmZvWzBdLCB0ZW1w X3JlcGxzbG90KTsKLQkJCWRpc2Nvbm5lY3RfZGF0YWJhc2UoY29ubik7Ci0JCX0KLQl9CiB9CiAK IHN0YXRpYyB2b2lkCkBAIC0xODQsMTcgKzIyMywxNiBAQCB1c2FnZSh2b2lkKQogCiAvKgogICog VmFsaWRhdGUgYSBjb25uZWN0aW9uIHN0cmluZy4gUmV0dXJucyBhIGJhc2UgY29ubmVjdGlvbiBz dHJpbmcgdGhhdCBpcyBhCi0gKiBjb25uZWN0aW9uIHN0cmluZyB3aXRob3V0IGEgZGF0YWJhc2Ug bmFtZSBwbHVzIGEgZmFsbGJhY2sgYXBwbGljYXRpb24gbmFtZS4KLSAqIFNpbmNlIHdlIG1pZ2h0 IHByb2Nlc3MgbXVsdGlwbGUgZGF0YWJhc2VzLCBlYWNoIGRhdGFiYXNlIG5hbWUgd2lsbCBiZQot ICogYXBwZW5kZWQgdG8gdGhpcyBiYXNlIGNvbm5lY3Rpb24gc3RyaW5nIHRvIHByb3ZpZGUgYSBm aW5hbCBjb25uZWN0aW9uIHN0cmluZy4KLSAqIElmIHRoZSBzZWNvbmQgYXJndW1lbnQgKGRibmFt ZSkgaXMgbm90IG51bGwsIHJldHVybnMgZGJuYW1lIGlmIHRoZSBwcm92aWRlZAotICogY29ubmVj dGlvbiBzdHJpbmcgY29udGFpbnMgaXQuIElmIG9wdGlvbiAtLWRhdGFiYXNlIGlzIG5vdCBwcm92 aWRlZCwgdXNlcwotICogZGJuYW1lIGFzIHRoZSBvbmx5IGRhdGFiYXNlIHRvIHNldHVwIHRoZSBs b2dpY2FsIHJlcGxpY2EuCi0gKiBJdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8g ZnJlZSB0aGUgcmV0dXJuZWQgY29ubmVjdGlvbiBzdHJpbmcgYW5kCi0gKiBkYm5hbWUuCisgKiBj b25uZWN0aW9uIHN0cmluZyB3aXRob3V0IGEgZGF0YWJhc2UgbmFtZS4gU2luY2Ugd2UgbWlnaHQg cHJvY2VzcyBtdWx0aXBsZQorICogZGF0YWJhc2VzLCBlYWNoIGRhdGFiYXNlIG5hbWUgd2lsbCBi ZSBhcHBlbmRlZCB0byB0aGlzIGJhc2UgY29ubmVjdGlvbgorICogc3RyaW5nIHRvIHByb3ZpZGUg YSBmaW5hbCBjb25uZWN0aW9uIHN0cmluZy4gSWYgdGhlIHNlY29uZCBhcmd1bWVudCAoZGJuYW1l KQorICogaXMgbm90IG51bGwsIHJldHVybnMgZGJuYW1lIGlmIHRoZSBwcm92aWRlZCBjb25uZWN0 aW9uIHN0cmluZyBjb250YWlucyBpdC4KKyAqIElmIG9wdGlvbiAtLWRhdGFiYXNlIGlzIG5vdCBw cm92aWRlZCwgdXNlcyBkYm5hbWUgYXMgdGhlIG9ubHkgZGF0YWJhc2UgdG8KKyAqIHNldHVwIHRo ZSBsb2dpY2FsIHJlcGxpY2EuIEl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBm cmVlIHRoZQorICogcmV0dXJuZWQgY29ubmVjdGlvbiBzdHJpbmcgYW5kIGRibmFtZS4KICAqLwog c3RhdGljIGNoYXIgKgotZ2V0X2Jhc2VfY29ubmluZm8oY2hhciAqY29ubmluZm8sIGNoYXIgKmRi bmFtZSwgY29uc3QgY2hhciAqbm9kZXJvbGUpCitnZXRfYmFzZV9jb25uaW5mbyhjaGFyICpjb25u aW5mbywgY2hhciAqZGJuYW1lKQogewogCVBRRXhwQnVmZmVyIGJ1ZiA9IGNyZWF0ZVBRRXhwQnVm ZmVyKCk7CiAJUFFjb25uaW5mb09wdGlvbiAqY29ubl9vcHRzID0gTlVMTDsKQEAgLTIwMyw3ICsy NDEsNyBAQCBnZXRfYmFzZV9jb25uaW5mbyhjaGFyICpjb25uaW5mbywgY2hhciAqZGJuYW1lLCBj b25zdCBjaGFyICpub2Rlcm9sZSkKIAljaGFyCSAgICpyZXQ7CiAJaW50CQkJaTsKIAotCXBnX2xv Z19pbmZvKCJ2YWxpZGF0aW5nIGNvbm5lY3Rpb24gc3RyaW5nIG9uICVzIiwgbm9kZXJvbGUpOwor CXBnX2xvZ19pbmZvKCJ2YWxpZGF0aW5nIGNvbm5lY3Rpb24gc3RyaW5nIG9uIHB1Ymxpc2hlciIp OwogCiAJY29ubl9vcHRzID0gUFFjb25uaW5mb1BhcnNlKGNvbm5pbmZvLCAmZXJybXNnKTsKIAlp ZiAoY29ubl9vcHRzID09IE5VTEwpCkBAIC0yMzEsMTAgKzI2OSw2IEBAIGdldF9iYXNlX2Nvbm5p bmZvKGNoYXIgKmNvbm5pbmZvLCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKm5vZGVyb2xlKQog CQl9CiAJfQogCi0JaWYgKGkgPiAwKQotCQlhcHBlbmRQUUV4cEJ1ZmZlckNoYXIoYnVmLCAnICcp OwotCWFwcGVuZFBRRXhwQnVmZmVyKGJ1ZiwgImZhbGxiYWNrX2FwcGxpY2F0aW9uX25hbWU9JXMi LCBwcm9nbmFtZSk7Ci0KIAlyZXQgPSBwZ19zdHJkdXAoYnVmLT5kYXRhKTsKIAogCWRlc3Ryb3lQ UUV4cEJ1ZmZlcihidWYpOwpAQCAtMjQ0LDE1ICsyNzgsMTYgQEAgZ2V0X2Jhc2VfY29ubmluZm8o Y2hhciAqY29ubmluZm8sIGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqbm9kZXJvbGUpCiB9CiAK IC8qCi0gKiBHZXQgdGhlIGFic29sdXRlIHBhdGggZnJvbSBvdGhlciBQb3N0Z3JlU1FMIGJpbmFy aWVzIChwZ19jdGwgYW5kCi0gKiBwZ19yZXNldHdhbCkgdGhhdCBpcyB1c2VkIGJ5IGl0LgorICog R2V0IHRoZSBhYnNvbHV0ZSBiaW5hcnkgcGF0aCBmcm9tIGFub3RoZXIgUG9zdGdyZVNRTCBiaW5h cnkgKHBnX2N0bCkgYW5kIHNldAorICogdG8gU3RhbmRieUluZm8uCiAgKi8KIHN0YXRpYyBib29s Ci1nZXRfZXhlY19wYXRoKGNvbnN0IGNoYXIgKnBhdGgpCitnZXRfZXhlY19iYXNlX3BhdGgoY29u c3QgY2hhciAqcGF0aCkKIHsKIAlpbnQJCQlyYzsKKwljaGFyCQlwZ19jdGxfcGF0aFtNQVhQR1BB VEhdOworCWNoYXIJICAgKnA7CiAKLQlwZ19jdGxfcGF0aCA9IHBnX21hbGxvYyhNQVhQR1BBVEgp OwogCXJjID0gZmluZF9vdGhlcl9leGVjKHBhdGgsICJwZ19jdGwiLAogCQkJCQkJICJwZ19jdGwg KFBvc3RncmVTUUwpICIgUEdfVkVSU0lPTiAiXG4iLAogCQkJCQkJIHBnX2N0bF9wYXRoKTsKQEAg LTI3NywzMCArMzEyLDEyIEBAIGdldF9leGVjX3BhdGgoY29uc3QgY2hhciAqcGF0aCkKIAogCXBn X2xvZ19kZWJ1ZygicGdfY3RsIHBhdGggaXM6ICVzIiwgcGdfY3RsX3BhdGgpOwogCi0JcGdfcmVz ZXR3YWxfcGF0aCA9IHBnX21hbGxvYyhNQVhQR1BBVEgpOwotCXJjID0gZmluZF9vdGhlcl9leGVj KHBhdGgsICJwZ19yZXNldHdhbCIsCi0JCQkJCQkgInBnX3Jlc2V0d2FsIChQb3N0Z3JlU1FMKSAi IFBHX1ZFUlNJT04gIlxuIiwKLQkJCQkJCSBwZ19yZXNldHdhbF9wYXRoKTsKLQlpZiAocmMgPCAw KQotCXsKLQkJY2hhcgkJZnVsbF9wYXRoW01BWFBHUEFUSF07Ci0KLQkJaWYgKGZpbmRfbXlfZXhl YyhwYXRoLCBmdWxsX3BhdGgpIDwgMCkKLQkJCXN0cmxjcHkoZnVsbF9wYXRoLCBwcm9nbmFtZSwg c2l6ZW9mKGZ1bGxfcGF0aCkpOwotCQlpZiAocmMgPT0gLTEpCi0JCQlwZ19sb2dfZXJyb3IoIlRo ZSBwcm9ncmFtIFwiJXNcIiBpcyBuZWVkZWQgYnkgJXMgYnV0IHdhcyBub3QgZm91bmQgaW4gdGhl XG4iCi0JCQkJCQkgInNhbWUgZGlyZWN0b3J5IGFzIFwiJXNcIi5cbiIKLQkJCQkJCSAiQ2hlY2sg eW91ciBpbnN0YWxsYXRpb24uIiwKLQkJCQkJCSAicGdfcmVzZXR3YWwiLCBwcm9nbmFtZSwgZnVs bF9wYXRoKTsKLQkJZWxzZQotCQkJcGdfbG9nX2Vycm9yKCJUaGUgcHJvZ3JhbSBcIiVzXCIgd2Fz IGZvdW5kIGJ5IFwiJXNcIlxuIgotCQkJCQkJICJidXQgd2FzIG5vdCB0aGUgc2FtZSB2ZXJzaW9u IGFzICVzLlxuIgotCQkJCQkJICJDaGVjayB5b3VyIGluc3RhbGxhdGlvbi4iLAotCQkJCQkJICJw Z19yZXNldHdhbCIsIGZ1bGxfcGF0aCwgcHJvZ25hbWUpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQor CS8qIEV4dHJhY3QgdGhlIGRpcmVjdG9yeSBwYXJ0IGZyb20gdGhlIHBhdGggKi8KKwlwID0gc3Ry cmNocihwZ19jdGxfcGF0aCwgJ3AnKTsKKwlBc3NlcnQocCk7CiAKLQlwZ19sb2dfZGVidWcoInBn X3Jlc2V0d2FsIHBhdGggaXM6ICVzIiwgcGdfcmVzZXR3YWxfcGF0aCk7CisJKnAgPSAnXDAnOwor CXN0YW5kYnkuYmluZGlyID0gcGdfc3RyZHVwKHBnX2N0bF9wYXRoKTsKIAogCXJldHVybiB0cnVl OwogfQpAQCAtMzY0LDQ5ICszODEsMzYgQEAgY29uY2F0X2Nvbm5pbmZvX2RibmFtZShjb25zdCBj aGFyICpjb25uaW5mbywgY29uc3QgY2hhciAqZGJuYW1lKQogfQogCiAvKgotICogU3RvcmUgcHVi bGljYXRpb24gYW5kIHN1YnNjcmlwdGlvbiBpbmZvcm1hdGlvbi4KKyAqIEluaXRpYWxpemUgcGVy LWRiIHN0cnVjdHVyZSBhbmQgc3RvcmUgdGhlIG5hbWUgb2YgZGF0YWJhc2VzCiAgKi8KLXN0YXRp YyBMb2dpY2FsUmVwSW5mbyAqCi1zdG9yZV9wdWJfc3ViX2luZm8oY29uc3QgY2hhciAqcHViX2Jh c2VfY29ubmluZm8sIGNvbnN0IGNoYXIgKnN1Yl9iYXNlX2Nvbm5pbmZvKQorc3RhdGljIHZvaWQK K3N0b3JlX2RiX25hbWVzKExvZ2ljYWxSZXBQZXJkYkluZm8gKipwZXJkYiwgaW50IG5kYnMpCiB7 Ci0JTG9naWNhbFJlcEluZm8gKmRiaW5mbzsKIAlTaW1wbGVTdHJpbmdMaXN0Q2VsbCAqY2VsbDsK IAlpbnQJCQlpID0gMDsKIAotCWRiaW5mbyA9IChMb2dpY2FsUmVwSW5mbyAqKSBwZ19tYWxsb2Mo bnVtX2RicyAqIHNpemVvZihMb2dpY2FsUmVwSW5mbykpOworCSpwZXJkYiA9IChMb2dpY2FsUmVw UGVyZGJJbmZvICopIHBnX21hbGxvYzAoc2l6ZW9mKExvZ2ljYWxSZXBQZXJkYkluZm8pICoKKwkJ CQkJCQkJCQkJICAgbmRicyk7CiAKIAlmb3IgKGNlbGwgPSBkYXRhYmFzZV9uYW1lcy5oZWFkOyBj ZWxsOyBjZWxsID0gY2VsbC0+bmV4dCkKIAl7Ci0JCWNoYXIJICAgKmNvbm5pbmZvOwotCi0JCS8q IFB1Ymxpc2hlci4gKi8KLQkJY29ubmluZm8gPSBjb25jYXRfY29ubmluZm9fZGJuYW1lKHB1Yl9i YXNlX2Nvbm5pbmZvLCBjZWxsLT52YWwpOwotCQlkYmluZm9baV0ucHViY29ubmluZm8gPSBjb25u aW5mbzsKLQkJZGJpbmZvW2ldLmRibmFtZSA9IGNlbGwtPnZhbDsKLQkJZGJpbmZvW2ldLm1hZGVf cmVwbHNsb3QgPSBmYWxzZTsKLQkJZGJpbmZvW2ldLm1hZGVfcHVibGljYXRpb24gPSBmYWxzZTsK LQkJZGJpbmZvW2ldLm1hZGVfc3Vic2NyaXB0aW9uID0gZmFsc2U7Ci0JCS8qIG90aGVyIHN0cnVj dCBmaWVsZHMgd2lsbCBiZSBmaWxsZWQgbGF0ZXIuICovCi0KLQkJLyogU3Vic2NyaWJlci4gKi8K LQkJY29ubmluZm8gPSBjb25jYXRfY29ubmluZm9fZGJuYW1lKHN1Yl9iYXNlX2Nvbm5pbmZvLCBj ZWxsLT52YWwpOwotCQlkYmluZm9baV0uc3ViY29ubmluZm8gPSBjb25uaW5mbzsKLQorCQkoKnBl cmRiKVtpXS5kYm5hbWUgPSBwZ19zdHJkdXAoY2VsbC0+dmFsKTsKIAkJaSsrOwogCX0KLQotCXJl dHVybiBkYmluZm87CiB9CiAKIHN0YXRpYyBQR2Nvbm4gKgotY29ubmVjdF9kYXRhYmFzZShjb25z dCBjaGFyICpjb25uaW5mbykKK2Nvbm5lY3RfZGF0YWJhc2UoY29uc3QgY2hhciAqYmFzZV9jb25u aW5mbywgY29uc3QgY2hhcipkYm5hbWUpCiB7CiAJUEdjb25uCSAgICpjb25uOwogCVBHcmVzdWx0 ICAgKnJlczsKLQljb25zdCBjaGFyICpyY29ubmluZm87CisKKwljaGFyCSAgICpyY29ubmluZm87 CisJY2hhcgkgICAqY29uY2F0X2Nvbm5pbmZvID0gY29uY2F0X2Nvbm5pbmZvX2RibmFtZShiYXNl X2Nvbm5pbmZvLAorCQkJCQkJCQkJCQkJCQkgZGJuYW1lKTsKIAogCS8qIGxvZ2ljYWwgcmVwbGlj YXRpb24gbW9kZSAqLwotCXJjb25uaW5mbyA9IHBzcHJpbnRmKCIlcyByZXBsaWNhdGlvbj1kYXRh YmFzZSIsIGNvbm5pbmZvKTsKKwlyY29ubmluZm8gPSBwc3ByaW50ZigiJXMgcmVwbGljYXRpb249 ZGF0YWJhc2UiLCBjb25jYXRfY29ubmluZm8pOwogCiAJY29ubiA9IFBRY29ubmVjdGRiKHJjb25u aW5mbyk7CiAJaWYgKFBRc3RhdHVzKGNvbm4pICE9IENPTk5FQ1RJT05fT0spCkBAIC00MjQsNiAr NDI4LDkgQEAgY29ubmVjdF9kYXRhYmFzZShjb25zdCBjaGFyICpjb25uaW5mbykKIAl9CiAJUFFj bGVhcihyZXMpOwogCisJcGZyZWUocmNvbm5pbmZvKTsKKwlwZnJlZShjb25jYXRfY29ubmluZm8p OworCiAJcmV0dXJuIGNvbm47CiB9CiAKQEAgLTQzNiwxOSArNDQzLDE4IEBAIGRpc2Nvbm5lY3Rf ZGF0YWJhc2UoUEdjb25uICpjb25uKQogfQogCiAvKgotICogT2J0YWluIHRoZSBzeXN0ZW0gaWRl bnRpZmllciB1c2luZyB0aGUgcHJvdmlkZWQgY29ubmVjdGlvbi4gSXQgd2lsbCBiZSB1c2VkCi0g KiB0byBjb21wYXJlIGlmIGEgZGF0YSBkaXJlY3RvcnkgaXMgYSBjbG9uZSBvZiBhbm90aGVyIG9u ZS4KKyAqIE9idGFpbiB0aGUgc3lzdGVtIGlkZW50aWZpZXIgZnJvbSB0aGUgcHJpbWFyeSBzZXJ2 ZXIuIEl0IHdpbGwgYmUgdXNlZCB0bworICogY29tcGFyZSBpZiBhIGRhdGEgZGlyZWN0b3J5IGlz IGEgY2xvbmUgb2YgYW5vdGhlciBvbmUuCiAgKi8KLXN0YXRpYyB1aW50NjQKLWdldF9zeXNpZF9m cm9tX2Nvbm4oY29uc3QgY2hhciAqY29ubmluZm8pCitzdGF0aWMgdm9pZAorZ2V0X3N5c2lkX2Zv cl9wcmltYXJ5KFByaW1hcnlJbmZvICpwcmltYXJ5LCBjaGFyICpkYm5hbWUpCiB7CiAJUEdjb25u CSAgICpjb25uOwogCVBHcmVzdWx0ICAgKnJlczsKLQl1aW50NjQJCXN5c2lkOwogCiAJcGdfbG9n X2luZm8oImdldHRpbmcgc3lzdGVtIGlkZW50aWZpZXIgZnJvbSBwdWJsaXNoZXIiKTsKIAotCWNv bm4gPSBjb25uZWN0X2RhdGFiYXNlKGNvbm5pbmZvKTsKKwljb25uID0gY29ubmVjdF9kYXRhYmFz ZShwcmltYXJ5LT5iYXNlX2Nvbm5pbmZvLCBkYm5hbWUpOwogCWlmIChjb25uID09IE5VTEwpCiAJ CWV4aXQoMSk7CiAKQEAgLTQ3MSw0MyArNDc3LDM5IEBAIGdldF9zeXNpZF9mcm9tX2Nvbm4oY29u c3QgY2hhciAqY29ubmluZm8pCiAJCWV4aXQoMSk7CiAJfQogCi0Jc3lzaWQgPSBzdHJ0b3U2NChQ UWdldHZhbHVlKHJlcywgMCwgMCksIE5VTEwsIDEwKTsKKwlwcmltYXJ5LT5zeXNpZCA9IHN0cnRv dTY0KFBRZ2V0dmFsdWUocmVzLCAwLCAwKSwgTlVMTCwgMTApOwogCi0JcGdfbG9nX2luZm8oInN5 c3RlbSBpZGVudGlmaWVyIGlzICVsbHUgb24gcHVibGlzaGVyIiwgKHVuc2lnbmVkIGxvbmcgbG9u Zykgc3lzaWQpOworCXBnX2xvZ19pbmZvKCJzeXN0ZW0gaWRlbnRpZmllciBpcyAlbGx1IG9uIHB1 Ymxpc2hlciIsCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgcHJpbWFyeS0+c3lzaWQpOwogCiAJ ZGlzY29ubmVjdF9kYXRhYmFzZShjb25uKTsKLQotCXJldHVybiBzeXNpZDsKIH0KIAogLyoKLSAq IE9idGFpbiB0aGUgc3lzdGVtIGlkZW50aWZpZXIgZnJvbSBjb250cm9sIGZpbGUuIEl0IHdpbGwg YmUgdXNlZCB0byBjb21wYXJlCi0gKiBpZiBhIGRhdGEgZGlyZWN0b3J5IGlzIGEgY2xvbmUgb2Yg YW5vdGhlciBvbmUuIFRoaXMgcm91dGluZSBpcyB1c2VkIGxvY2FsbHkKLSAqIGFuZCBhdm9pZHMg YSByZXBsaWNhdGlvbiBjb25uZWN0aW9uLgorICogT2J0YWluIHRoZSBzeXN0ZW0gaWRlbnRpZmll ciBmcm9tIGEgc3RhbmRieSBzZXJ2ZXIuIEl0IHdpbGwgYmUgdXNlZCB0bworICogY29tcGFyZSBp ZiBhIGRhdGEgZGlyZWN0b3J5IGlzIGEgY2xvbmUgb2YgYW5vdGhlciBvbmUuIFRoaXMgcm91dGlu ZSBpcyB1c2VkCisgKiBsb2NhbGx5IGFuZCBhdm9pZHMgYSByZXBsaWNhdGlvbiBjb25uZWN0aW9u LgogICovCi1zdGF0aWMgdWludDY0Ci1nZXRfY29udHJvbF9mcm9tX2RhdGFkaXIoY29uc3QgY2hh ciAqZGF0YWRpcikKK3N0YXRpYyB2b2lkCitnZXRfY29udHJvbF9mb3Jfc3RhbmRieShTdGFuZGJ5 SW5mbyAqc3RhbmRieSkKIHsKIAlDb250cm9sRmlsZURhdGEgKmNmOwogCWJvb2wJCWNyY19vazsK LQl1aW50NjQJCXN5c2lkOwogCiAJcGdfbG9nX2luZm8oImdldHRpbmcgc3lzdGVtIGlkZW50aWZp ZXIgZnJvbSBzdWJzY3JpYmVyIik7CiAKLQljZiA9IGdldF9jb250cm9sZmlsZShkYXRhZGlyLCAm Y3JjX29rKTsKKwljZiA9IGdldF9jb250cm9sZmlsZShzdGFuZGJ5LT5wZ2RhdGEsICZjcmNfb2sp OwogCWlmICghY3JjX29rKQogCXsKIAkJcGdfbG9nX2Vycm9yKCJjb250cm9sIGZpbGUgYXBwZWFy cyB0byBiZSBjb3JydXB0Iik7CiAJCWV4aXQoMSk7CiAJfQogCi0Jc3lzaWQgPSBjZi0+c3lzdGVt X2lkZW50aWZpZXI7CisJc3RhbmRieS0+c3lzaWQgPSBjZi0+c3lzdGVtX2lkZW50aWZpZXI7CiAK LQlwZ19sb2dfaW5mbygic3lzdGVtIGlkZW50aWZpZXIgaXMgJWxsdSBvbiBzdWJzY3JpYmVyIiwg KHVuc2lnbmVkIGxvbmcgbG9uZykgc3lzaWQpOworCXBnX2xvZ19pbmZvKCJzeXN0ZW0gaWRlbnRp ZmllciBpcyAlbGx1IG9uIHN1YnNjcmliZXIiLCAodW5zaWduZWQgbG9uZyBsb25nKSBzdGFuZGJ5 LT5zeXNpZCk7CiAKIAlwZnJlZShjZik7Ci0KLQlyZXR1cm4gc3lzaWQ7CiB9CiAKIC8qCkBAIC01 MTYsNyArNTE4LDcgQEAgZ2V0X2NvbnRyb2xfZnJvbV9kYXRhZGlyKGNvbnN0IGNoYXIgKmRhdGFk aXIpCiAgKiBmaWxlcyBmcm9tIG9uZSBvZiB0aGUgc3lzdGVtcyBtaWdodCBiZSB1c2VkIGluIHRo ZSBvdGhlciBvbmUuCiAgKi8KIHN0YXRpYyB2b2lkCi1tb2RpZnlfc3lzaWQoY29uc3QgY2hhciAq cGdfcmVzZXR3YWxfcGF0aCwgY29uc3QgY2hhciAqZGF0YWRpcikKK21vZGlmeV9zeXNpZChjb25z dCBjaGFyICpiaW5kaXIsIGNvbnN0IGNoYXIgKmRhdGFkaXIpCiB7CiAJQ29udHJvbEZpbGVEYXRh ICpjZjsKIAlib29sCQljcmNfb2s7CkBAIC01NTEsNyArNTUzLDcgQEAgbW9kaWZ5X3N5c2lkKGNv bnN0IGNoYXIgKnBnX3Jlc2V0d2FsX3BhdGgsIGNvbnN0IGNoYXIgKmRhdGFkaXIpCiAKIAlwZ19s b2dfaW5mbygicnVubmluZyBwZ19yZXNldHdhbCBvbiB0aGUgc3Vic2NyaWJlciIpOwogCi0JY21k X3N0ciA9IHBzcHJpbnRmKCJcIiVzXCIgLUQgXCIlc1wiIiwgcGdfcmVzZXR3YWxfcGF0aCwgZGF0 YWRpcik7CisJY21kX3N0ciA9IHBzcHJpbnRmKCJcIiVzL3BnX3Jlc2V0d2FsXCIgLUQgXCIlc1wi IiwgYmluZGlyLCBkYXRhZGlyKTsKIAogCXBnX2xvZ19kZWJ1ZygiY29tbWFuZCBpczogJXMiLCBj bWRfc3RyKTsKIApAQCAtNTcxLDE0ICs1NzMsMTUgQEAgbW9kaWZ5X3N5c2lkKGNvbnN0IGNoYXIg KnBnX3Jlc2V0d2FsX3BhdGgsIGNvbnN0IGNoYXIgKmRhdGFkaXIpCiAgKiBSZXR1cm4gYSBwYWxs b2MnZCBzbG90IG5hbWUgaWYgdGhlIHJlcGxpY2F0aW9uIGlzIHVzaW5nIG9uZS4KICAqLwogc3Rh dGljIGNoYXIgKgotdXNlX3ByaW1hcnlfc2xvdF9uYW1lKHZvaWQpCit1c2VfcHJpbWFyeV9zbG90 X25hbWUoUHJpbWFyeUluZm8gKnByaW1hcnksIFN0YW5kYnlJbmZvICpzdGFuZGJ5LAorCQkJCQkg IExvZ2ljYWxSZXBQZXJkYkluZm8gKnBlcmRiKQogewogCVBHY29ubgkgICAqY29ubjsKIAlQR3Jl c3VsdCAgICpyZXM7CiAJUFFFeHBCdWZmZXIgc3RyID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAlj aGFyCSAgICpzbG90X25hbWU7CiAKLQljb25uID0gY29ubmVjdF9kYXRhYmFzZShkYmluZm9bMF0u c3ViY29ubmluZm8pOworCWNvbm4gPSBjb25uZWN0X2RhdGFiYXNlKHN0YW5kYnktPmJhc2VfY29u bmluZm8sIHBlcmRiLT5kYm5hbWUpOwogCWlmIChjb25uID09IE5VTEwpCiAJCWV4aXQoMSk7CiAK QEAgLTYwNCw3ICs2MDcsNyBAQCB1c2VfcHJpbWFyeV9zbG90X25hbWUodm9pZCkKIAogCWRpc2Nv bm5lY3RfZGF0YWJhc2UoY29ubik7CiAKLQljb25uID0gY29ubmVjdF9kYXRhYmFzZShkYmluZm9b MF0ucHViY29ubmluZm8pOworCWNvbm4gPSBjb25uZWN0X2RhdGFiYXNlKHByaW1hcnktPmJhc2Vf Y29ubmluZm8sIHBlcmRiLT5kYm5hbWUpOwogCWlmIChjb25uID09IE5VTEwpCiAJCWV4aXQoMSk7 CiAKQEAgLTYzNCwxNyArNjM3LDE5IEBAIHVzZV9wcmltYXJ5X3Nsb3RfbmFtZSh2b2lkKQogfQog CiBzdGF0aWMgYm9vbAotY3JlYXRlX2FsbF9sb2dpY2FsX3JlcGxpY2F0aW9uX3Nsb3RzKExvZ2lj YWxSZXBJbmZvICpkYmluZm8pCitjcmVhdGVfYWxsX2xvZ2ljYWxfcmVwbGljYXRpb25fc2xvdHMo UHJpbWFyeUluZm8gKnByaW1hcnksCisJCQkJCQkJCQkgTG9naWNhbFJlcFBlcmRiSW5mb0FyciAq ZGJhcnIpCiB7CiAJaW50CQkJaTsKIAotCWZvciAoaSA9IDA7IGkgPCBudW1fZGJzOyBpKyspCisJ Zm9yIChpID0gMDsgaSA8IGRiYXJyLT5uZGJzOyBpKyspCiAJewogCQlQR2Nvbm4JICAgKmNvbm47 CiAJCVBHcmVzdWx0ICAgKnJlczsKIAkJY2hhcgkJcmVwbHNsb3RuYW1lW05BTUVEQVRBTEVOXTsK KwkJTG9naWNhbFJlcFBlcmRiSW5mbyAqcGVyZGIgPSAmZGJhcnItPnBlcmRiW2ldOwogCi0JCWNv bm4gPSBjb25uZWN0X2RhdGFiYXNlKGRiaW5mb1tpXS5wdWJjb25uaW5mbyk7CisJCWNvbm4gPSBj b25uZWN0X2RhdGFiYXNlKHByaW1hcnktPmJhc2VfY29ubmluZm8sIHBlcmRiLT5kYm5hbWUpOwog CQlpZiAoY29ubiA9PSBOVUxMKQogCQkJZXhpdCgxKTsKIApAQCAtNjY0LDI3ICs2NjksMTQgQEAg Y3JlYXRlX2FsbF9sb2dpY2FsX3JlcGxpY2F0aW9uX3Nsb3RzKExvZ2ljYWxSZXBJbmZvICpkYmlu Zm8pCiAJCX0KIAogCQkvKiBSZW1lbWJlciBkYXRhYmFzZSBPSUQuICovCi0JCWRiaW5mb1tpXS5v aWQgPSBzdHJ0b3VsKFBRZ2V0dmFsdWUocmVzLCAwLCAwKSwgTlVMTCwgMTApOworCQlwZXJkYi0+ b2lkID0gc3RydG91bChQUWdldHZhbHVlKHJlcywgMCwgMCksIE5VTEwsIDEwKTsKIAogCQlQUWNs ZWFyKHJlcyk7CiAKLQkJLyoKLQkJICogQnVpbGQgdGhlIHJlcGxpY2F0aW9uIHNsb3QgbmFtZS4g VGhlIG5hbWUgbXVzdCBub3QgZXhjZWVkCi0JCSAqIE5BTUVEQVRBTEVOIC0gMS4gVGhpcyBjdXJy ZW50IHNjaGVtYSB1c2VzIGEgbWF4aW11bSBvZiAzNgotCQkgKiBjaGFyYWN0ZXJzICgxNCArIDEw ICsgMSArIDEwICsgJ1wwJykuIFN5c3RlbSBpZGVudGlmaWVyIGlzIGluY2x1ZGVkCi0JCSAqIHRv IHJlZHVjZSB0aGUgcHJvYmFiaWxpdHkgb2YgY29sbGlzaW9uLiBCeSBkZWZhdWx0LCBzdWJzY3Jp cHRpb24KLQkJICogbmFtZSBpcyB1c2VkIGFzIHJlcGxpY2F0aW9uIHNsb3QgbmFtZS4KLQkJICov Ci0JCXNucHJpbnRmKHJlcGxzbG90bmFtZSwgc2l6ZW9mKHJlcGxzbG90bmFtZSksCi0JCQkJICJw Z19zdWJzY3JpYmVyXyV1XyVkIiwKLQkJCQkgZGJpbmZvW2ldLm9pZCwKLQkJCQkgKGludCkgZ2V0 cGlkKCkpOwotCQlkYmluZm9baV0uc3VibmFtZSA9IHBnX3N0cmR1cChyZXBsc2xvdG5hbWUpOwor CQlnZXRfc3Vic2NyaXB0aW9uX25hbWUocGVyZGItPm9pZCwgKGludCkgZ2V0cGlkKCksIHJlcGxz bG90bmFtZSwgTkFNRURBVEFMRU4pOwogCiAJCS8qIENyZWF0ZSByZXBsaWNhdGlvbiBzbG90IG9u IHB1Ymxpc2hlci4gKi8KLQkJaWYgKGNyZWF0ZV9sb2dpY2FsX3JlcGxpY2F0aW9uX3Nsb3QoY29u biwgJmRiaW5mb1tpXSwgcmVwbHNsb3RuYW1lKSAhPSBOVUxMIHx8IGRyeV9ydW4pCi0JCQlwZ19s b2dfaW5mbygiY3JlYXRlIHJlcGxpY2F0aW9uIHNsb3QgXCIlc1wiIG9uIHB1Ymxpc2hlciIsIHJl cGxzbG90bmFtZSk7Ci0JCWVsc2UKKwkJaWYgKGNyZWF0ZV9sb2dpY2FsX3JlcGxpY2F0aW9uX3Ns b3QoY29ubiwgZmFsc2UsIHBlcmRiKSA9PSBOVUxMICYmICFkcnlfcnVuKQogCQkJcmV0dXJuIGZh bHNlOwogCiAJCWRpc2Nvbm5lY3RfZGF0YWJhc2UoY29ubik7CkBAIC03MDEsMzAgKzY5MywzNiBA QCBjcmVhdGVfYWxsX2xvZ2ljYWxfcmVwbGljYXRpb25fc2xvdHMoTG9naWNhbFJlcEluZm8gKmRi aW5mbykKICAqIHJlc3VsdCBzZXQgdGhhdCBjb250YWlucyB0aGUgY29uc2lzdGVudCBMU04uCiAg Ki8KIHN0YXRpYyBjaGFyICoKLWNyZWF0ZV9sb2dpY2FsX3JlcGxpY2F0aW9uX3Nsb3QoUEdjb25u ICpjb25uLCBMb2dpY2FsUmVwSW5mbyAqZGJpbmZvLAotCQkJCQkJCQljaGFyICpzbG90X25hbWUp CitjcmVhdGVfbG9naWNhbF9yZXBsaWNhdGlvbl9zbG90KFBHY29ubiAqY29ubiwgYm9vbCB0ZW1w b3JhcnksCisJCQkJCQkJCUxvZ2ljYWxSZXBQZXJkYkluZm8gKnBlcmRiKQogewogCVBRRXhwQnVm ZmVyIHN0ciA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CiAJUEdyZXN1bHQgICAqcmVzID0gTlVMTDsK IAljaGFyCSAgICpsc24gPSBOVUxMOwotCWJvb2wJCXRyYW5zaWVudF9yZXBsc2xvdCA9IGZhbHNl OworCWNoYXIJCXNsb3RfbmFtZVtOQU1FREFUQUxFTl07CiAKIAlBc3NlcnQoY29ubiAhPSBOVUxM KTsKIAogCS8qCi0JICogSWYgbm8gc2xvdCBuYW1lIGlzIGluZm9ybWVkLCBpdCBpcyBhIHRyYW5z aWVudCByZXBsaWNhdGlvbiBzbG90IHVzZWQKLQkgKiBvbmx5IGZvciBjYXRjaCB1cCBwdXJwb3Nl cy4KKwkgKiBDb25zdHJ1Y3QgYSBuYW1lIG9mIGxvZ2ljYWwgcmVwbGljYXRpb24gc2xvdC4gVGhl IGZvcm1hdHRpbmcgaXMKKwkgKiBkaWZmZXJlbnQgZGVwZW5kcyBvbiBpdHMgcGVyc2lzdGVuY3ku CisJICoKKwkgKiBGb3IgcGVyc2lzdGVudCBzbG90czogdGhlIG5hbWUgbXVzdCBiZSBzYW1lIGFz IHRoZSBzdWJzY3JpcHRpb24uCisJICogRm9yIHRlbXBvcmFyeSBzbG90czogT0lEIGlzIG5vdCBu ZWVkZWQsIGJ1dCBhbm90aGVyIHN0cmluZyBpcyBhZGRlZC4KIAkgKi8KLQlpZiAoc2xvdF9uYW1l WzBdID09ICdcMCcpCi0JeworCWlmICghdGVtcG9yYXJ5KQorCQlnZXRfc3Vic2NyaXB0aW9uX25h bWUocGVyZGItPm9pZCwgKGludCkgZ2V0cGlkKCksIHNsb3RfbmFtZSwgTkFNRURBVEFMRU4pOwor CWVsc2UKIAkJc25wcmludGYoc2xvdF9uYW1lLCBOQU1FREFUQUxFTiwgInBnX3N1YnNjcmliZXJf JWRfc3RhcnRwb2ludCIsCiAJCQkJIChpbnQpIGdldHBpZCgpKTsKLQkJdHJhbnNpZW50X3JlcGxz bG90ID0gdHJ1ZTsKLQl9CiAKLQlwZ19sb2dfaW5mbygiY3JlYXRpbmcgdGhlIHJlcGxpY2F0aW9u IHNsb3QgXCIlc1wiIG9uIGRhdGFiYXNlIFwiJXNcIiIsIHNsb3RfbmFtZSwgZGJpbmZvLT5kYm5h bWUpOworCXBnX2xvZ19pbmZvKCJjcmVhdGluZyB0aGUgcmVwbGljYXRpb24gc2xvdCBcIiVzXCIg b24gZGF0YWJhc2UgXCIlc1wiIiwgc2xvdF9uYW1lLCBwZXJkYi0+ZGJuYW1lKTsKIAogCWFwcGVu ZFBRRXhwQnVmZmVyKHN0ciwgIkNSRUFURV9SRVBMSUNBVElPTl9TTE9UIFwiJXNcIiIsIHNsb3Rf bmFtZSk7CisKKwlpZih0ZW1wb3JhcnkpCisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHN0ciwgIiBU RU1QT1JBUlkiKTsKKwogCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHN0ciwgIiBMT0dJQ0FMIFwicGdv dXRwdXRcIiBOT0VYUE9SVF9TTkFQU0hPVCIpOwogCiAJcGdfbG9nX2RlYnVnKCJjb21tYW5kIGlz OiAlcyIsIHN0ci0+ZGF0YSk7CkBAIC03MzQsMTcgKzczMiwxNCBAQCBjcmVhdGVfbG9naWNhbF9y ZXBsaWNhdGlvbl9zbG90KFBHY29ubiAqY29ubiwgTG9naWNhbFJlcEluZm8gKmRiaW5mbywKIAkJ cmVzID0gUFFleGVjKGNvbm4sIHN0ci0+ZGF0YSk7CiAJCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMp ICE9IFBHUkVTX1RVUExFU19PSykKIAkJewotCQkJcGdfbG9nX2Vycm9yKCJjb3VsZCBub3QgY3Jl YXRlIHJlcGxpY2F0aW9uIHNsb3QgXCIlc1wiIG9uIGRhdGFiYXNlIFwiJXNcIjogJXMiLCBzbG90 X25hbWUsIGRiaW5mby0+ZGJuYW1lLAotCQkJCQkJIFBRcmVzdWx0RXJyb3JNZXNzYWdlKHJlcykp OworCQkJcGdfbG9nX2Vycm9yKCJjb3VsZCBub3QgY3JlYXRlIHJlcGxpY2F0aW9uIHNsb3QgXCIl c1wiIG9uIGRhdGFiYXNlIFwiJXNcIjogJXMiLAorCQkJCQkJIHNsb3RfbmFtZSwgcGVyZGItPmRi bmFtZSwgUFFyZXN1bHRFcnJvck1lc3NhZ2UocmVzKSk7CiAJCQlyZXR1cm4gbHNuOwogCQl9CiAJ fQogCiAJLyogZm9yIGNsZWFudXAgcHVycG9zZXMgKi8KLQlpZiAodHJhbnNpZW50X3JlcGxzbG90 KQotCQltYWRlX3RyYW5zaWVudF9yZXBsc2xvdCA9IHRydWU7Ci0JZWxzZQotCQlkYmluZm8tPm1h ZGVfcmVwbHNsb3QgPSB0cnVlOworCXBlcmRiLT5tYWRlX3JlcGxzbG90ID0gdHJ1ZTsKIAogCWlm ICghZHJ5X3J1bikKIAl7CkBAIC03NTgsMTQgKzc1MywxNSBAQCBjcmVhdGVfbG9naWNhbF9yZXBs aWNhdGlvbl9zbG90KFBHY29ubiAqY29ubiwgTG9naWNhbFJlcEluZm8gKmRiaW5mbywKIH0KIAog c3RhdGljIHZvaWQKLWRyb3BfcmVwbGljYXRpb25fc2xvdChQR2Nvbm4gKmNvbm4sIExvZ2ljYWxS ZXBJbmZvICpkYmluZm8sIGNvbnN0IGNoYXIgKnNsb3RfbmFtZSkKK2Ryb3BfcmVwbGljYXRpb25f c2xvdChQR2Nvbm4gKmNvbm4sIExvZ2ljYWxSZXBQZXJkYkluZm8gKnBlcmRiLAorCQkJCQkgIGNv bnN0IGNoYXIgKnNsb3RfbmFtZSkKIHsKIAlQUUV4cEJ1ZmZlciBzdHIgPSBjcmVhdGVQUUV4cEJ1 ZmZlcigpOwogCVBHcmVzdWx0ICAgKnJlczsKIAogCUFzc2VydChjb25uICE9IE5VTEwpOwogCi0J cGdfbG9nX2luZm8oImRyb3BwaW5nIHRoZSByZXBsaWNhdGlvbiBzbG90IFwiJXNcIiBvbiBkYXRh YmFzZSBcIiVzXCIiLCBzbG90X25hbWUsIGRiaW5mby0+ZGJuYW1lKTsKKwlwZ19sb2dfaW5mbygi ZHJvcHBpbmcgdGhlIHJlcGxpY2F0aW9uIHNsb3QgXCIlc1wiIG9uIGRhdGFiYXNlIFwiJXNcIiIs IHNsb3RfbmFtZSwgcGVyZGItPmRibmFtZSk7CiAKIAlhcHBlbmRQUUV4cEJ1ZmZlcihzdHIsICJE Uk9QX1JFUExJQ0FUSU9OX1NMT1QgXCIlc1wiIiwgc2xvdF9uYW1lKTsKIApAQCAtNzc1LDcgKzc3 MSw3IEBAIGRyb3BfcmVwbGljYXRpb25fc2xvdChQR2Nvbm4gKmNvbm4sIExvZ2ljYWxSZXBJbmZv ICpkYmluZm8sIGNvbnN0IGNoYXIgKnNsb3RfbmFtCiAJewogCQlyZXMgPSBQUWV4ZWMoY29ubiwg c3RyLT5kYXRhKTsKIAkJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09NTUFORF9P SykKLQkJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IGRyb3AgcmVwbGljYXRpb24gc2xvdCBcIiVz XCIgb24gZGF0YWJhc2UgXCIlc1wiOiAlcyIsIHNsb3RfbmFtZSwgZGJpbmZvLT5kYm5hbWUsCisJ CQlwZ19sb2dfZXJyb3IoImNvdWxkIG5vdCBkcm9wIHJlcGxpY2F0aW9uIHNsb3QgXCIlc1wiIG9u IGRhdGFiYXNlIFwiJXNcIjogJXMiLCBzbG90X25hbWUsIHBlcmRiLT5kYm5hbWUsCiAJCQkJCQkg UFFlcnJvck1lc3NhZ2UoY29ubikpOwogCiAJCVBRY2xlYXIocmVzKTsKQEAgLTgyNSwxOSArODIx LDIyIEBAIHBnX2N0bF9zdGF0dXMoY29uc3QgY2hhciAqcGdfY3RsX2NtZCwgaW50IHJjLCBpbnQg YWN0aW9uKQogICogUmV0dXJucyBhZnRlciB0aGUgc2VydmVyIGZpbmlzaGVzIHRoZSByZWNvdmVy eSBwcm9jZXNzLgogICovCiBzdGF0aWMgdm9pZAotd2FpdF9mb3JfZW5kX3JlY292ZXJ5KGNvbnN0 IGNoYXIgKmNvbm5pbmZvKQord2FpdF9mb3JfZW5kX3JlY292ZXJ5KGNvbnN0IGNoYXIgKmJhc2Vf Y29ubmluZm8sIGNvbnN0IGNoYXIgKmRibmFtZSkKIHsKIAlQR2Nvbm4JICAgKmNvbm47CiAJUEdy ZXN1bHQgICAqcmVzOwotCWludAkJCXN0YXR1cyA9IFBPU1RNQVNURVJfU1RJTExfU1RBUlRJTkc7 CisJaW50CQkJc3RhdHVzID0gUEdTX1BPU1RNQVNURVJfU1RJTExfU1RBUlRJTkc7CisJaW50CQkJ Y250OworCWludAkJCXJjOworCWNoYXIJICAgKnBnX2N0bF9jbWQ7CiAKIAlwZ19sb2dfaW5mbygi d2FpdGluZyB0aGUgcG9zdG1hc3RlciB0byByZWFjaCB0aGUgY29uc2lzdGVudCBzdGF0ZSIpOwog Ci0JY29ubiA9IGNvbm5lY3RfZGF0YWJhc2UoY29ubmluZm8pOworCWNvbm4gPSBjb25uZWN0X2Rh dGFiYXNlKGJhc2VfY29ubmluZm8sIGRibmFtZSk7CiAJaWYgKGNvbm4gPT0gTlVMTCkKIAkJZXhp dCgxKTsKIAotCWZvciAoOzspCisJZm9yIChjbnQgPSAwOyBjbnQgPCB3YWl0X3NlY29uZHMgKiBX QUlUU19QRVJfU0VDOyBjbnQrKykKIAl7CiAJCWJvb2wJCWluX3JlY292ZXJ5OwogCkBAIC04NjUs MTcgKzg2NCwzMiBAQCB3YWl0X2Zvcl9lbmRfcmVjb3ZlcnkoY29uc3QgY2hhciAqY29ubmluZm8p CiAJCSAqLwogCQlpZiAoIWluX3JlY292ZXJ5IHx8IGRyeV9ydW4pCiAJCXsKLQkJCXN0YXR1cyA9 IFBPU1RNQVNURVJfUkVBRFk7CisJCQlzdGF0dXMgPSBQR1NfUE9TVE1BU1RFUl9SRUFEWTsKIAkJ CWJyZWFrOwogCQl9CiAKIAkJLyogS2VlcCB3YWl0aW5nLiAqLwotCQlwZ191c2xlZXAoV0FJVF9J TlRFUlZBTCAqIFVTRUNfUEVSX1NFQyk7CisJCXBnX3VzbGVlcChVU0VDX1BFUl9TRUMgLyBXQUlU U19QRVJfU0VDKTsKIAl9CiAKIAlkaXNjb25uZWN0X2RhdGFiYXNlKGNvbm4pOwogCi0JaWYgKHN0 YXR1cyA9PSBQT1NUTUFTVEVSX1NUSUxMX1NUQVJUSU5HKQorCS8qCisJICogSWYgdGltZW91dCBp cyByZWFjaGVkIGV4aXQgdGhlIHBnX3N1YnNjcmliZXIgYW5kIHN0b3AgdGhlIHN0YW5kYnkgbm9k ZS4KKwkgKi8KKwlpZiAoY250ID49IHdhaXRfc2Vjb25kcyAqIFdBSVRTX1BFUl9TRUMpCisJewor CQlwZ19sb2dfZXJyb3IoInJlY292ZXJ5IHRpbWVkIG91dCIpOworCisJCXBnX2N0bF9jbWQgPSBw c3ByaW50ZigiXCIlcy9wZ19jdGxcIiBzdG9wIC1EIFwiJXNcIiAtcyIsCisJCQkJCQkJICBzdGFu ZGJ5LmJpbmRpciwgc3RhbmRieS5wZ2RhdGEpOworCQlyYyA9IHN5c3RlbShwZ19jdGxfY21kKTsK KwkJcGdfY3RsX3N0YXR1cyhwZ19jdGxfY21kLCByYywgMCk7CisKKwkJZXhpdCgxKTsKKwl9CisK KwlpZiAoc3RhdHVzID09IFBHU19QT1NUTUFTVEVSX1NUSUxMX1NUQVJUSU5HKQogCXsKIAkJcGdf bG9nX2Vycm9yKCJzZXJ2ZXIgZGlkIG5vdCBlbmQgcmVjb3ZlcnkiKTsKIAkJZXhpdCgxKTsKQEAg LTg4OCwxNyArOTAyLDIxIEBAIHdhaXRfZm9yX2VuZF9yZWNvdmVyeShjb25zdCBjaGFyICpjb25u aW5mbykKICAqIENyZWF0ZSBhIHB1YmxpY2F0aW9uIHRoYXQgaW5jbHVkZXMgYWxsIHRhYmxlcyBp biB0aGUgZGF0YWJhc2UuCiAgKi8KIHN0YXRpYyB2b2lkCi1jcmVhdGVfcHVibGljYXRpb24oUEdj b25uICpjb25uLCBMb2dpY2FsUmVwSW5mbyAqZGJpbmZvKQorY3JlYXRlX3B1YmxpY2F0aW9uKFBH Y29ubiAqY29ubiwgUHJpbWFyeUluZm8gKnByaW1hcnksCisJCQkJICAgTG9naWNhbFJlcFBlcmRi SW5mbyAqcGVyZGIpCiB7CiAJUFFFeHBCdWZmZXIgc3RyID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsK IAlQR3Jlc3VsdCAgICpyZXM7CisJY2hhcgkJcHVibmFtZVtOQU1FREFUQUxFTl07CiAKIAlBc3Nl cnQoY29ubiAhPSBOVUxMKTsKIAorCWdldF9wdWJsaWNhdGlvbl9uYW1lKHBlcmRiLT5vaWQsIHB1 Ym5hbWUsIE5BTUVEQVRBTEVOKTsKKwogCS8qIENoZWNrIGlmIHRoZSBwdWJsaWNhdGlvbiBuZWVk cyB0byBiZSBjcmVhdGVkLiAqLwogCWFwcGVuZFBRRXhwQnVmZmVyKHN0ciwKIAkJCQkJICAiU0VM RUNUIHB1YmFsbHRhYmxlcyBGUk9NIHBnX2NhdGFsb2cucGdfcHVibGljYXRpb24gV0hFUkUgcHVi bmFtZSA9ICclcyciLAotCQkJCQkgIGRiaW5mby0+cHVibmFtZSk7CisJCQkJCSAgcHVibmFtZSk7 CiAJcmVzID0gUFFleGVjKGNvbm4sIHN0ci0+ZGF0YSk7CiAJaWYgKFBRcmVzdWx0U3RhdHVzKHJl cykgIT0gUEdSRVNfVFVQTEVTX09LKQogCXsKQEAgLTkxOCw3ICs5MzYsNyBAQCBjcmVhdGVfcHVi bGljYXRpb24oUEdjb25uICpjb25uLCBMb2dpY2FsUmVwSW5mbyAqZGJpbmZvKQogCQkgKi8KIAkJ aWYgKHN0cmNtcChQUWdldHZhbHVlKHJlcywgMCwgMCksICJ0IikgPT0gMCkKIAkJewotCQkJcGdf bG9nX2luZm8oInB1YmxpY2F0aW9uIFwiJXNcIiBhbHJlYWR5IGV4aXN0cyIsIGRiaW5mby0+cHVi bmFtZSk7CisJCQlwZ19sb2dfaW5mbygicHVibGljYXRpb24gXCIlc1wiIGFscmVhZHkgZXhpc3Rz IiwgcHVibmFtZSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJZWxzZQpAQCAtOTMxLDcgKzk0OSw3IEBA IGNyZWF0ZV9wdWJsaWNhdGlvbihQR2Nvbm4gKmNvbm4sIExvZ2ljYWxSZXBJbmZvICpkYmluZm8p CiAJCQkgKiBkYXRhYmFzZSBvaWQgaW4gd2hpY2ggcHViYWxsdGFibGVzIGlzIGZhbHNlLgogCQkJ ICovCiAJCQlwZ19sb2dfZXJyb3IoInB1YmxpY2F0aW9uIFwiJXNcIiBkb2VzIG5vdCByZXBsaWNh dGUgY2hhbmdlcyBmb3IgYWxsIHRhYmxlcyIsCi0JCQkJCQkgZGJpbmZvLT5wdWJuYW1lKTsKKwkJ CQkJCSBwdWJuYW1lKTsKIAkJCXBnX2xvZ19lcnJvcl9oaW50KCJDb25zaWRlciByZW5hbWluZyB0 aGlzIHB1YmxpY2F0aW9uLiIpOwogCQkJUFFjbGVhcihyZXMpOwogCQkJUFFmaW5pc2goY29ubik7 CkBAIC05NDIsOSArOTYwLDkgQEAgY3JlYXRlX3B1YmxpY2F0aW9uKFBHY29ubiAqY29ubiwgTG9n aWNhbFJlcEluZm8gKmRiaW5mbykKIAlQUWNsZWFyKHJlcyk7CiAJcmVzZXRQUUV4cEJ1ZmZlcihz dHIpOwogCi0JcGdfbG9nX2luZm8oImNyZWF0aW5nIHB1YmxpY2F0aW9uIFwiJXNcIiBvbiBkYXRh YmFzZSBcIiVzXCIiLCBkYmluZm8tPnB1Ym5hbWUsIGRiaW5mby0+ZGJuYW1lKTsKKwlwZ19sb2df aW5mbygiY3JlYXRpbmcgcHVibGljYXRpb24gXCIlc1wiIG9uIGRhdGFiYXNlIFwiJXNcIiIsIHB1 Ym5hbWUsIHBlcmRiLT5kYm5hbWUpOwogCi0JYXBwZW5kUFFFeHBCdWZmZXIoc3RyLCAiQ1JFQVRF IFBVQkxJQ0FUSU9OICVzIEZPUiBBTEwgVEFCTEVTIiwgZGJpbmZvLT5wdWJuYW1lKTsKKwlhcHBl bmRQUUV4cEJ1ZmZlcihzdHIsICJDUkVBVEUgUFVCTElDQVRJT04gJXMgRk9SIEFMTCBUQUJMRVMi LCBwdWJuYW1lKTsKIAogCXBnX2xvZ19kZWJ1ZygiY29tbWFuZCBpczogJXMiLCBzdHItPmRhdGEp OwogCkBAIC05NTQsMTQgKzk3MiwxNCBAQCBjcmVhdGVfcHVibGljYXRpb24oUEdjb25uICpjb25u LCBMb2dpY2FsUmVwSW5mbyAqZGJpbmZvKQogCQlpZiAoUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQ R1JFU19DT01NQU5EX09LKQogCQl7CiAJCQlwZ19sb2dfZXJyb3IoImNvdWxkIG5vdCBjcmVhdGUg cHVibGljYXRpb24gXCIlc1wiIG9uIGRhdGFiYXNlIFwiJXNcIjogJXMiLAotCQkJCQkJIGRiaW5m by0+cHVibmFtZSwgZGJpbmZvLT5kYm5hbWUsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwkJCQkJ CSBwdWJuYW1lLCBwZXJkYi0+ZGJuYW1lLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CiAJCQlQUWZp bmlzaChjb25uKTsKIAkJCWV4aXQoMSk7CiAJCX0KIAl9CiAKIAkvKiBmb3IgY2xlYW51cCBwdXJw b3NlcyAqLwotCWRiaW5mby0+bWFkZV9wdWJsaWNhdGlvbiA9IHRydWU7CisJcGVyZGItPm1hZGVf cHVibGljYXRpb24gPSB0cnVlOwogCiAJaWYgKCFkcnlfcnVuKQogCQlQUWNsZWFyKHJlcyk7CkBA IC05NzMsMTYgKzk5MSwxOSBAQCBjcmVhdGVfcHVibGljYXRpb24oUEdjb25uICpjb25uLCBMb2dp Y2FsUmVwSW5mbyAqZGJpbmZvKQogICogUmVtb3ZlIHB1YmxpY2F0aW9uIGlmIGl0IGNvdWxkbid0 IGZpbmlzaCBhbGwgc3RlcHMuCiAgKi8KIHN0YXRpYyB2b2lkCi1kcm9wX3B1YmxpY2F0aW9uKFBH Y29ubiAqY29ubiwgTG9naWNhbFJlcEluZm8gKmRiaW5mbykKK2Ryb3BfcHVibGljYXRpb24oUEdj b25uICpjb25uLCBMb2dpY2FsUmVwUGVyZGJJbmZvICpwZXJkYikKIHsKIAlQUUV4cEJ1ZmZlciBz dHIgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwogCVBHcmVzdWx0ICAgKnJlczsKKwljaGFyCQlwdWJu YW1lW05BTUVEQVRBTEVOXTsKIAogCUFzc2VydChjb25uICE9IE5VTEwpOwogCi0JcGdfbG9nX2lu Zm8oImRyb3BwaW5nIHB1YmxpY2F0aW9uIFwiJXNcIiBvbiBkYXRhYmFzZSBcIiVzXCIiLCBkYmlu Zm8tPnB1Ym5hbWUsIGRiaW5mby0+ZGJuYW1lKTsKKwlnZXRfcHVibGljYXRpb25fbmFtZShwZXJk Yi0+b2lkLCBwdWJuYW1lLCBOQU1FREFUQUxFTik7CiAKLQlhcHBlbmRQUUV4cEJ1ZmZlcihzdHIs ICJEUk9QIFBVQkxJQ0FUSU9OICVzIiwgZGJpbmZvLT5wdWJuYW1lKTsKKwlwZ19sb2dfaW5mbygi ZHJvcHBpbmcgcHVibGljYXRpb24gXCIlc1wiIG9uIGRhdGFiYXNlIFwiJXNcIiIsIHB1Ym5hbWUs IHBlcmRiLT5kYm5hbWUpOworCisJYXBwZW5kUFFFeHBCdWZmZXIoc3RyLCAiRFJPUCBQVUJMSUNB VElPTiAlcyIsIHB1Ym5hbWUpOwogCiAJcGdfbG9nX2RlYnVnKCJjb21tYW5kIGlzOiAlcyIsIHN0 ci0+ZGF0YSk7CiAKQEAgLTk5MCw3ICsxMDExLDcgQEAgZHJvcF9wdWJsaWNhdGlvbihQR2Nvbm4g KmNvbm4sIExvZ2ljYWxSZXBJbmZvICpkYmluZm8pCiAJewogCQlyZXMgPSBQUWV4ZWMoY29ubiwg c3RyLT5kYXRhKTsKIAkJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09NTUFORF9P SykKLQkJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IGRyb3AgcHVibGljYXRpb24gXCIlc1wiIG9u IGRhdGFiYXNlIFwiJXNcIjogJXMiLCBkYmluZm8tPnB1Ym5hbWUsIGRiaW5mby0+ZGJuYW1lLCBQ UWVycm9yTWVzc2FnZShjb25uKSk7CisJCQlwZ19sb2dfZXJyb3IoImNvdWxkIG5vdCBkcm9wIHB1 YmxpY2F0aW9uIFwiJXNcIiBvbiBkYXRhYmFzZSBcIiVzXCI6ICVzIiwgcHVibmFtZSwgcGVyZGIt PmRibmFtZSwgUFFlcnJvck1lc3NhZ2UoY29ubikpOwogCiAJCVBRY2xlYXIocmVzKTsKIAl9CkBA IC0xMDExLDE5ICsxMDMyLDI3IEBAIGRyb3BfcHVibGljYXRpb24oUEdjb25uICpjb25uLCBMb2dp Y2FsUmVwSW5mbyAqZGJpbmZvKQogICogaW5pdGlhbCBsb2NhdGlvbi4KICAqLwogc3RhdGljIHZv aWQKLWNyZWF0ZV9zdWJzY3JpcHRpb24oUEdjb25uICpjb25uLCBMb2dpY2FsUmVwSW5mbyAqZGJp bmZvKQorY3JlYXRlX3N1YnNjcmlwdGlvbihQR2Nvbm4gKmNvbm4sIFN0YW5kYnlJbmZvICpzdGFu ZGJ5LCBjaGFyICpiYXNlX2Nvbm5pbmZvLAorCQkJCQlMb2dpY2FsUmVwUGVyZGJJbmZvICpwZXJk YikKIHsKIAlQUUV4cEJ1ZmZlciBzdHIgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwogCVBHcmVzdWx0 ICAgKnJlczsKKwljaGFyCQlzdWJuYW1lW05BTUVEQVRBTEVOXTsKKwljaGFyCQlwdWJuYW1lW05B TUVEQVRBTEVOXTsKIAogCUFzc2VydChjb25uICE9IE5VTEwpOwogCi0JcGdfbG9nX2luZm8oImNy ZWF0aW5nIHN1YnNjcmlwdGlvbiBcIiVzXCIgb24gZGF0YWJhc2UgXCIlc1wiIiwgZGJpbmZvLT5z dWJuYW1lLCBkYmluZm8tPmRibmFtZSk7CisKKwlnZXRfc3Vic2NyaXB0aW9uX25hbWUocGVyZGIt Pm9pZCwgKGludCkgZ2V0cGlkKCksIHN1Ym5hbWUsIE5BTUVEQVRBTEVOKTsKKwlnZXRfcHVibGlj YXRpb25fbmFtZShwZXJkYi0+b2lkLCBwdWJuYW1lLCBOQU1FREFUQUxFTik7CisKKwlwZ19sb2df aW5mbygiY3JlYXRpbmcgc3Vic2NyaXB0aW9uIFwiJXNcIiBvbiBkYXRhYmFzZSBcIiVzXCIiLCBz dWJuYW1lLAorCQkJCXBlcmRiLT5kYm5hbWUpOwogCiAJYXBwZW5kUFFFeHBCdWZmZXIoc3RyLAog CQkJCQkgICJDUkVBVEUgU1VCU0NSSVBUSU9OICVzIENPTk5FQ1RJT04gJyVzJyBQVUJMSUNBVElP TiAlcyAiCiAJCQkJCSAgIldJVEggKGNyZWF0ZV9zbG90ID0gZmFsc2UsIGNvcHlfZGF0YSA9IGZh bHNlLCBlbmFibGVkID0gZmFsc2UpIiwKLQkJCQkJICBkYmluZm8tPnN1Ym5hbWUsIGRiaW5mby0+ cHViY29ubmluZm8sIGRiaW5mby0+cHVibmFtZSk7CisJCQkJCSAgc3VibmFtZSwgY29uY2F0X2Nv bm5pbmZvX2RibmFtZShiYXNlX2Nvbm5pbmZvLCBwZXJkYi0+ZGJuYW1lKSwgcHVibmFtZSk7CiAK IAlwZ19sb2dfZGVidWcoImNvbW1hbmQgaXM6ICVzIiwgc3RyLT5kYXRhKTsKIApAQCAtMTAzMywx NCArMTA2MiwxNCBAQCBjcmVhdGVfc3Vic2NyaXB0aW9uKFBHY29ubiAqY29ubiwgTG9naWNhbFJl cEluZm8gKmRiaW5mbykKIAkJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09NTUFO RF9PSykKIAkJewogCQkJcGdfbG9nX2Vycm9yKCJjb3VsZCBub3QgY3JlYXRlIHN1YnNjcmlwdGlv biBcIiVzXCIgb24gZGF0YWJhc2UgXCIlc1wiOiAlcyIsCi0JCQkJCQkgZGJpbmZvLT5zdWJuYW1l LCBkYmluZm8tPmRibmFtZSwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCQkJCQkJIHN1Ym5hbWUs IHBlcmRiLT5kYm5hbWUsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKIAkJCVBRZmluaXNoKGNvbm4p OwogCQkJZXhpdCgxKTsKIAkJfQogCX0KIAogCS8qIGZvciBjbGVhbnVwIHB1cnBvc2VzICovCi0J ZGJpbmZvLT5tYWRlX3N1YnNjcmlwdGlvbiA9IHRydWU7CisJcGVyZGItPm1hZGVfc3Vic2NyaXB0 aW9uID0gdHJ1ZTsKIAogCWlmICghZHJ5X3J1bikKIAkJUFFjbGVhcihyZXMpOwpAQCAtMTA1Miwx NiArMTA4MSwxOSBAQCBjcmVhdGVfc3Vic2NyaXB0aW9uKFBHY29ubiAqY29ubiwgTG9naWNhbFJl cEluZm8gKmRiaW5mbykKICAqIFJlbW92ZSBzdWJzY3JpcHRpb24gaWYgaXQgY291bGRuJ3QgZmlu aXNoIGFsbCBzdGVwcy4KICAqLwogc3RhdGljIHZvaWQKLWRyb3Bfc3Vic2NyaXB0aW9uKFBHY29u biAqY29ubiwgTG9naWNhbFJlcEluZm8gKmRiaW5mbykKK2Ryb3Bfc3Vic2NyaXB0aW9uKFBHY29u biAqY29ubiwgTG9naWNhbFJlcFBlcmRiSW5mbyAqcGVyZGIpCiB7CiAJUFFFeHBCdWZmZXIgc3Ry ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAlQR3Jlc3VsdCAgICpyZXM7CisJY2hhcgkJc3VibmFt ZVtOQU1FREFUQUxFTl07CiAKIAlBc3NlcnQoY29ubiAhPSBOVUxMKTsKIAotCXBnX2xvZ19pbmZv KCJkcm9wcGluZyBzdWJzY3JpcHRpb24gXCIlc1wiIG9uIGRhdGFiYXNlIFwiJXNcIiIsIGRiaW5m by0+c3VibmFtZSwgZGJpbmZvLT5kYm5hbWUpOworCWdldF9zdWJzY3JpcHRpb25fbmFtZShwZXJk Yi0+b2lkLCAoaW50KSBnZXRwaWQoKSwgc3VibmFtZSwgTkFNRURBVEFMRU4pOworCisJcGdfbG9n X2luZm8oImRyb3BwaW5nIHN1YnNjcmlwdGlvbiBcIiVzXCIgb24gZGF0YWJhc2UgXCIlc1wiIiwg c3VibmFtZSwgcGVyZGItPmRibmFtZSk7CiAKLQlhcHBlbmRQUUV4cEJ1ZmZlcihzdHIsICJEUk9Q IFNVQlNDUklQVElPTiAlcyIsIGRiaW5mby0+c3VibmFtZSk7CisJYXBwZW5kUFFFeHBCdWZmZXIo c3RyLCAiRFJPUCBTVUJTQ1JJUFRJT04gJXMiLCBzdWJuYW1lKTsKIAogCXBnX2xvZ19kZWJ1Zygi Y29tbWFuZCBpczogJXMiLCBzdHItPmRhdGEpOwogCkBAIC0xMDY5LDcgKzExMDEsNyBAQCBkcm9w X3N1YnNjcmlwdGlvbihQR2Nvbm4gKmNvbm4sIExvZ2ljYWxSZXBJbmZvICpkYmluZm8pCiAJewog CQlyZXMgPSBQUWV4ZWMoY29ubiwgc3RyLT5kYXRhKTsKIAkJaWYgKFBRcmVzdWx0U3RhdHVzKHJl cykgIT0gUEdSRVNfQ09NTUFORF9PSykKLQkJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IGRyb3Ag c3Vic2NyaXB0aW9uIFwiJXNcIiBvbiBkYXRhYmFzZSBcIiVzXCI6ICVzIiwgZGJpbmZvLT5zdWJu YW1lLCBkYmluZm8tPmRibmFtZSwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCQkJcGdfbG9nX2Vy cm9yKCJjb3VsZCBub3QgZHJvcCBzdWJzY3JpcHRpb24gXCIlc1wiIG9uIGRhdGFiYXNlIFwiJXNc IjogJXMiLCBzdWJuYW1lLCBwZXJkYi0+ZGJuYW1lLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CiAK IAkJUFFjbGVhcihyZXMpOwogCX0KQEAgLTEwODgsMTggKzExMjAsMjEgQEAgZHJvcF9zdWJzY3Jp cHRpb24oUEdjb25uICpjb25uLCBMb2dpY2FsUmVwSW5mbyAqZGJpbmZvKQogICogcHJpbnRpbmcg cHVycG9zZXMuCiAgKi8KIHN0YXRpYyB2b2lkCi1zZXRfcmVwbGljYXRpb25fcHJvZ3Jlc3MoUEdj b25uICpjb25uLCBMb2dpY2FsUmVwSW5mbyAqZGJpbmZvLCBjb25zdCBjaGFyICpsc24pCitzZXRf cmVwbGljYXRpb25fcHJvZ3Jlc3MoUEdjb25uICpjb25uLCBMb2dpY2FsUmVwUGVyZGJJbmZvICpw ZXJkYiwgY29uc3QgY2hhciAqbHNuKQogewogCVBRRXhwQnVmZmVyIHN0ciA9IGNyZWF0ZVBRRXhw QnVmZmVyKCk7CiAJUEdyZXN1bHQgICAqcmVzOwogCU9pZAkJCXN1Ym9pZDsKIAljaGFyCQlvcmln aW5uYW1lW05BTUVEQVRBTEVOXTsKIAljaGFyCQlsc25zdHJbMTcgKyAxXTsgLyogTUFYUEdfTFNO TEVOID0gMTcgKi8KKwljaGFyCQlzdWJuYW1lW05BTUVEQVRBTEVOXTsKIAogCUFzc2VydChjb25u ICE9IE5VTEwpOwogCisJZ2V0X3N1YnNjcmlwdGlvbl9uYW1lKHBlcmRiLT5vaWQsIChpbnQpIGdl dHBpZCgpLCBzdWJuYW1lLCBOQU1FREFUQUxFTik7CisKIAlhcHBlbmRQUUV4cEJ1ZmZlcihzdHIs Ci0JCQkJCSAgIlNFTEVDVCBvaWQgRlJPTSBwZ19jYXRhbG9nLnBnX3N1YnNjcmlwdGlvbiBXSEVS RSBzdWJuYW1lID0gJyVzJyIsIGRiaW5mby0+c3VibmFtZSk7CisJCQkJCSAgIlNFTEVDVCBvaWQg RlJPTSBwZ19jYXRhbG9nLnBnX3N1YnNjcmlwdGlvbiBXSEVSRSBzdWJuYW1lID0gJyVzJyIsIHN1 Ym5hbWUpOwogCiAJcmVzID0gUFFleGVjKGNvbm4sIHN0ci0+ZGF0YSk7CiAJaWYgKFBRcmVzdWx0 U3RhdHVzKHJlcykgIT0gUEdSRVNfVFVQTEVTX09LKQpAQCAtMTE0MCw3ICsxMTc1LDcgQEAgc2V0 X3JlcGxpY2F0aW9uX3Byb2dyZXNzKFBHY29ubiAqY29ubiwgTG9naWNhbFJlcEluZm8gKmRiaW5m bywgY29uc3QgY2hhciAqbHNuKQogCVBRY2xlYXIocmVzKTsKIAogCXBnX2xvZ19pbmZvKCJzZXR0 aW5nIHRoZSByZXBsaWNhdGlvbiBwcm9ncmVzcyAobm9kZSBuYW1lIFwiJXNcIiA7IExTTiAlcykg b24gZGF0YWJhc2UgXCIlc1wiIiwKLQkJCQlvcmlnaW5uYW1lLCBsc25zdHIsIGRiaW5mby0+ZGJu YW1lKTsKKwkJCQlvcmlnaW5uYW1lLCBsc25zdHIsIHBlcmRiLT5kYm5hbWUpOwogCiAJcmVzZXRQ UUV4cEJ1ZmZlcihzdHIpOwogCWFwcGVuZFBRRXhwQnVmZmVyKHN0ciwKQEAgLTExNTQsNyArMTE4 OSw3IEBAIHNldF9yZXBsaWNhdGlvbl9wcm9ncmVzcyhQR2Nvbm4gKmNvbm4sIExvZ2ljYWxSZXBJ bmZvICpkYmluZm8sIGNvbnN0IGNoYXIgKmxzbikKIAkJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykg IT0gUEdSRVNfVFVQTEVTX09LKQogCQl7CiAJCQlwZ19sb2dfZXJyb3IoImNvdWxkIG5vdCBzZXQg cmVwbGljYXRpb24gcHJvZ3Jlc3MgZm9yIHRoZSBzdWJzY3JpcHRpb24gXCIlc1wiOiAlcyIsCi0J CQkJCQkgZGJpbmZvLT5zdWJuYW1lLCBQUXJlc3VsdEVycm9yTWVzc2FnZShyZXMpKTsKKwkJCQkJ CSBzdWJuYW1lLCBQUXJlc3VsdEVycm9yTWVzc2FnZShyZXMpKTsKIAkJCVBRZmluaXNoKGNvbm4p OwogCQkJZXhpdCgxKTsKIAkJfQpAQCAtMTE3MywxNiArMTIwOCwyMCBAQCBzZXRfcmVwbGljYXRp b25fcHJvZ3Jlc3MoUEdjb25uICpjb25uLCBMb2dpY2FsUmVwSW5mbyAqZGJpbmZvLCBjb25zdCBj aGFyICpsc24pCiAgKiBvZiB0aGlzIHNldHVwLgogICovCiBzdGF0aWMgdm9pZAotZW5hYmxlX3N1 YnNjcmlwdGlvbihQR2Nvbm4gKmNvbm4sIExvZ2ljYWxSZXBJbmZvICpkYmluZm8pCitlbmFibGVf c3Vic2NyaXB0aW9uKFBHY29ubiAqY29ubiwgTG9naWNhbFJlcFBlcmRiSW5mbyAqcGVyZGIpCiB7 CiAJUFFFeHBCdWZmZXIgc3RyID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAlQR3Jlc3VsdCAgICpy ZXM7CisJY2hhcgkJc3VibmFtZVtOQU1FREFUQUxFTl07CiAKIAlBc3NlcnQoY29ubiAhPSBOVUxM KTsKIAotCXBnX2xvZ19pbmZvKCJlbmFibGluZyBzdWJzY3JpcHRpb24gXCIlc1wiIG9uIGRhdGFi YXNlIFwiJXNcIiIsIGRiaW5mby0+c3VibmFtZSwgZGJpbmZvLT5kYm5hbWUpOworCWdldF9zdWJz Y3JpcHRpb25fbmFtZShwZXJkYi0+b2lkLCAoaW50KSBnZXRwaWQoKSwgc3VibmFtZSwgTkFNRURB VEFMRU4pOworCisJcGdfbG9nX2luZm8oImVuYWJsaW5nIHN1YnNjcmlwdGlvbiBcIiVzXCIgb24g ZGF0YWJhc2UgXCIlc1wiIiwgc3VibmFtZSwKKwkJCQlwZXJkYi0+ZGJuYW1lKTsKIAotCWFwcGVu ZFBRRXhwQnVmZmVyKHN0ciwgIkFMVEVSIFNVQlNDUklQVElPTiAlcyBFTkFCTEUiLCBkYmluZm8t PnN1Ym5hbWUpOworCWFwcGVuZFBRRXhwQnVmZmVyKHN0ciwgIkFMVEVSIFNVQlNDUklQVElPTiAl cyBFTkFCTEUiLCBzdWJuYW1lKTsKIAogCXBnX2xvZ19kZWJ1ZygiY29tbWFuZCBpczogJXMiLCBz dHItPmRhdGEpOwogCkBAIC0xMTkxLDcgKzEyMzAsNyBAQCBlbmFibGVfc3Vic2NyaXB0aW9uKFBH Y29ubiAqY29ubiwgTG9naWNhbFJlcEluZm8gKmRiaW5mbykKIAkJcmVzID0gUFFleGVjKGNvbm4s IHN0ci0+ZGF0YSk7CiAJCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX0NPTU1BTkRf T0spCiAJCXsKLQkJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IGVuYWJsZSBzdWJzY3JpcHRpb24g XCIlc1wiOiAlcyIsIGRiaW5mby0+c3VibmFtZSwKKwkJCXBnX2xvZ19lcnJvcigiY291bGQgbm90 IGVuYWJsZSBzdWJzY3JpcHRpb24gXCIlc1wiOiAlcyIsIHN1Ym5hbWUsCiAJCQkJCQkgUFFlcnJv ck1lc3NhZ2UoY29ubikpOwogCQkJUFFmaW5pc2goY29ubik7CiAJCQlleGl0KDEpOwpAQCAtMTIw Myw2ICsxMjQyLDYxIEBAIGVuYWJsZV9zdWJzY3JpcHRpb24oUEdjb25uICpjb25uLCBMb2dpY2Fs UmVwSW5mbyAqZGJpbmZvKQogCWRlc3Ryb3lQUUV4cEJ1ZmZlcihzdHIpOwogfQogCitzdGF0aWMg dm9pZAorc3RhcnRfc3RhbmRieV9zZXJ2ZXIoU3RhbmRieUluZm8gKnN0YW5kYnksIHVuc2lnbmVk IHNob3J0IHN1YnBvcnQsCisJCQkJCSBjaGFyICpzZXJ2ZXJfc3RhcnRfbG9nKQoreworCWNoYXIJ CXRpbWVidWZbMTI4XTsKKwlzdHJ1Y3QgdGltZXZhbCB0aW1lOworCXRpbWVfdAkJdHQ7CisJaW50 CQkJbGVuOworCWludAkJCXJjOworCWNoYXIJICAgKnBnX2N0bF9jbWQ7CisKKwlpZiAoc2VydmVy X3N0YXJ0X2xvZ1swXSA9PSAnXDAnKQorCXsKKwkJLyogYXBwZW5kIHRpbWVzdGFtcCB3aXRoIElT TyA4NjAxIGZvcm1hdC4gKi8KKwkJZ2V0dGltZW9mZGF5KCZ0aW1lLCBOVUxMKTsKKwkJdHQgPSAo dGltZV90KSB0aW1lLnR2X3NlYzsKKwkJc3RyZnRpbWUodGltZWJ1Ziwgc2l6ZW9mKHRpbWVidWYp LCAiJVklbSVkVCVIJU0lUyIsIGxvY2FsdGltZSgmdHQpKTsKKwkJc25wcmludGYodGltZWJ1ZiAr IHN0cmxlbih0aW1lYnVmKSwgc2l6ZW9mKHRpbWVidWYpIC0gc3RybGVuKHRpbWVidWYpLAorCQkJ CSAiLiUwM2QiLCAoaW50KSAodGltZS50dl91c2VjIC8gMTAwMCkpOworCisJCWxlbiA9IHNucHJp bnRmKHNlcnZlcl9zdGFydF9sb2csIE1BWFBHUEFUSCwKKwkJCQkJICAgIiVzLyVzL3NlcnZlcl9z dGFydF8lcy5sb2ciLCBzdGFuZGJ5LT5wZ2RhdGEsCisJCQkJCSAgIFBHU19PVVRQVVRfRElSLCB0 aW1lYnVmKTsKKwkJaWYgKGxlbiA+PSBNQVhQR1BBVEgpCisJCXsKKwkJCXBnX2xvZ19lcnJvcigi bG9nIGZpbGUgcGF0aCBpcyB0b28gbG9uZyIpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKwlwZ19j dGxfY21kID0gcHNwcmludGYoIlwiJXMvcGdfY3RsXCIgc3RhcnQgLUQgXCIlc1wiIC1zIC1vIFwi LXAgJWRcIiAtbCBcIiVzXCIiLAorCQkJCQkJICBzdGFuZGJ5LT5iaW5kaXIsCisJCQkJCQkgIHN0 YW5kYnktPnBnZGF0YSwgc3VicG9ydCwgc2VydmVyX3N0YXJ0X2xvZyk7CisJcmMgPSBzeXN0ZW0o cGdfY3RsX2NtZCk7CisJcGdfY3RsX3N0YXR1cyhwZ19jdGxfY21kLCByYywgMSk7Cit9CisKK3N0 YXRpYyBjaGFyICoKK2NvbnN0cnVjdF9zdWJfY29ubmluZm8oY2hhciAqdXNlcm5hbWUsIHVuc2ln bmVkIHNob3J0IHN1YnBvcnQpCit7CisJUFFFeHBCdWZmZXIgYnVmID0gY3JlYXRlUFFFeHBCdWZm ZXIoKTsKKwljaGFyCSAgICpyZXQ7CisKKwlpZiAodXNlcm5hbWUpCisJCWFwcGVuZFBRRXhwQnVm ZmVyKGJ1ZiwgInVzZXI9JXMgIiwgdXNlcm5hbWUpOworCisJYXBwZW5kUFFFeHBCdWZmZXIoYnVm LCAicG9ydD0lZCBmYWxsYmFja19hcHBsaWNhdGlvbl9uYW1lPSVzIiwKKwkJCQkJICBzdWJwb3J0 LCBwcm9nbmFtZSk7CisKKwlyZXQgPSBwZ19zdHJkdXAoYnVmLT5kYXRhKTsKKworCWRlc3Ryb3lQ UUV4cEJ1ZmZlcihidWYpOworCisJcmV0dXJuIHJldDsKK30KKwogaW50CiBtYWluKGludCBhcmdj LCBjaGFyICoqYXJndikKIHsKQEAgLTEyMTQsNiArMTMwOCwxMCBAQCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKIAkJeyJwdWJsaXNoZXItY29ubmluZm8iLCByZXF1aXJlZF9hcmd1bWVudCwg TlVMTCwgJ1AnfSwKIAkJeyJzdWJzY3JpYmVyLWNvbm5pbmZvIiwgcmVxdWlyZWRfYXJndW1lbnQs IE5VTEwsICdTJ30sCiAJCXsiZGF0YWJhc2UiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ2Qn fSwKKwkJeyJ0aW1lb3V0IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICd0J30sCisJCXsidXNl cm5hbWUiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ3UnfSwKKwkJeyJwb3J0IiwgcmVxdWly ZWRfYXJndW1lbnQsIE5VTEwsICdwJ30sCisJCXsicmV0YWluIiwgbm9fYXJndW1lbnQsIE5VTEws ICdyJ30sCiAJCXsiZHJ5LXJ1biIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnbid9LAogCQl7InZlcmJv c2UiLCBub19hcmd1bWVudCwgTlVMTCwgJ3YnfSwKIAkJe05VTEwsIDAsIE5VTEwsIDB9CkBAIC0x MjI1LDIwICsxMzIzLDE1IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCiAJY2hhcgkg ICAqcGdfY3RsX2NtZDsKIAotCWNoYXIJICAgKmJhc2VfZGlyOwotCWNoYXIJICAgKnNlcnZlcl9z dGFydF9sb2c7Ci0KLQljaGFyCQl0aW1lYnVmWzEyOF07Ci0Jc3RydWN0IHRpbWV2YWwgdGltZTsK LQl0aW1lX3QJCXR0OworCWNoYXIJCWJhc2VfZGlyW01BWFBHUEFUSF07CisJY2hhcgkJc2VydmVy X3N0YXJ0X2xvZ1tNQVhQR1BBVEhdID0gezB9OwogCWludAkJCWxlbjsKIAotCWNoYXIJICAgKnB1 Yl9iYXNlX2Nvbm5pbmZvID0gTlVMTDsKLQljaGFyCSAgICpzdWJfYmFzZV9jb25uaW5mbyA9IE5V TEw7CiAJY2hhcgkgICAqZGJuYW1lX2Nvbm5pbmZvID0gTlVMTDsKIAotCXVpbnQ2NAkJcHViX3N5 c2lkOwotCXVpbnQ2NAkJc3ViX3N5c2lkOworCXVuc2lnbmVkIHNob3J0IHN1YnBvcnQgPSBERUZf UEdTUE9SVDsKKwljaGFyCSAgICp1c2VybmFtZSA9IE5VTEw7CisKIAlzdHJ1Y3Qgc3RhdCBzdGF0 YnVmOwogCiAJUEdjb25uCSAgICpjb25uOwpAQCAtMTI1MCw2ICsxMzQzLDEzIEBAIG1haW4oaW50 IGFyZ2MsIGNoYXIgKiphcmd2KQogCiAJaW50CQkJaTsKIAorCVBHcmVzdWx0ICAgKnJlczsKKwor CWNoYXIJICAgKndhbF9sZXZlbDsKKwlpbnQJCQltYXhfcmVwbGljYXRpb25fc2xvdHM7CisJaW50 CQkJbnNsb3RzX29sZDsKKwlpbnQJCQluc2xvdHNfbmV3OworCiAJcGdfbG9nZ2luZ19pbml0KGFy Z3ZbMF0pOwogCXBnX2xvZ2dpbmdfc2V0X2xldmVsKFBHX0xPR19XQVJOSU5HKTsKIAlwcm9nbmFt ZSA9IGdldF9wcm9nbmFtZShhcmd2WzBdKTsKQEAgLTEyODYsMjggKzEzODYsNDAgQEAgbWFpbihp bnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJfQogI2VuZGlmCiAKLQl3aGlsZSAoKGMgPSBnZXRvcHRf bG9uZyhhcmdjLCBhcmd2LCAiRDpQOlM6ZDpudiIsCisJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmco YXJnYywgYXJndiwgIkQ6UDpTOmQ6dDp1OnA6cm52IiwKIAkJCQkJCQlsb25nX29wdGlvbnMsICZv cHRpb25faW5kZXgpKSAhPSAtMSkKIAl7CiAJCXN3aXRjaCAoYykKIAkJewogCQkJY2FzZSAnRCc6 Ci0JCQkJc3Vic2NyaWJlcl9kaXIgPSBwZ19zdHJkdXAob3B0YXJnKTsKKwkJCQlzdGFuZGJ5LnBn ZGF0YSA9IHBnX3N0cmR1cChvcHRhcmcpOworCQkJCWNhbm9uaWNhbGl6ZV9wYXRoKHN0YW5kYnku cGdkYXRhKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgJ1AnOgogCQkJCXB1Yl9jb25uaW5mb19zdHIg PSBwZ19zdHJkdXAob3B0YXJnKTsKIAkJCQlicmVhazsKLQkJCWNhc2UgJ1MnOgotCQkJCXN1Yl9j b25uaW5mb19zdHIgPSBwZ19zdHJkdXAob3B0YXJnKTsKLQkJCQlicmVhazsKIAkJCWNhc2UgJ2Qn OgogCQkJCS8qIElnbm9yZSBkdXBsaWNhdGVkIGRhdGFiYXNlIG5hbWVzLiAqLwogCQkJCWlmICgh c2ltcGxlX3N0cmluZ19saXN0X21lbWJlcigmZGF0YWJhc2VfbmFtZXMsIG9wdGFyZykpCiAJCQkJ ewogCQkJCQlzaW1wbGVfc3RyaW5nX2xpc3RfYXBwZW5kKCZkYXRhYmFzZV9uYW1lcywgb3B0YXJn KTsKLQkJCQkJbnVtX2RicysrOworCQkJCQlkYmFyci5uZGJzKys7CiAJCQkJfQogCQkJCWJyZWFr OworCQkJY2FzZSAndCc6CisJCQkJd2FpdF9zZWNvbmRzID0gYXRvaShvcHRhcmcpOworCQkJCWJy ZWFrOworCQkJY2FzZSAndSc6CisJCQkJcGZyZWUodXNlcm5hbWUpOworCQkJCXVzZXJuYW1lID0g cGdfc3RyZHVwKG9wdGFyZyk7CisJCQkJYnJlYWs7CisJCQljYXNlICdwJzoKKwkJCQlpZiAoKHN1 YnBvcnQgPSBhdG9pKG9wdGFyZykpIDw9IDApCisJCQkJCXBnX2ZhdGFsKCJpbnZhbGlkIG9sZCBw b3J0IG51bWJlciIpOworCQkJCWJyZWFrOworCQkJY2FzZSAncic6CisJCQkJcmV0YWluID0gdHJ1 ZTsKKwkJCQlicmVhazsKIAkJCWNhc2UgJ24nOgogCQkJCWRyeV9ydW4gPSB0cnVlOwogCQkJCWJy ZWFrOwpAQCAtMTMzNSw3ICsxNDQ3LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJ LyoKIAkgKiBSZXF1aXJlZCBhcmd1bWVudHMKIAkgKi8KLQlpZiAoc3Vic2NyaWJlcl9kaXIgPT0g TlVMTCkKKwlpZiAoc3RhbmRieS5wZ2RhdGEgPT0gTlVMTCkKIAl7CiAJCXBnX2xvZ19lcnJvcigi bm8gc3Vic2NyaWJlciBkYXRhIGRpcmVjdG9yeSBzcGVjaWZpZWQiKTsKIAkJcGdfbG9nX2Vycm9y X2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1l KTsKQEAgLTEzNTgsMjEgKzE0NzAsMTQgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJ CXBnX2xvZ19lcnJvcl9oaW50KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlv bi4iLCBwcm9nbmFtZSk7CiAJCWV4aXQoMSk7CiAJfQotCXB1Yl9iYXNlX2Nvbm5pbmZvID0gZ2V0 X2Jhc2VfY29ubmluZm8ocHViX2Nvbm5pbmZvX3N0ciwgZGJuYW1lX2Nvbm5pbmZvLAotCQkJCQkJ CQkJCSAgInB1Ymxpc2hlciIpOwotCWlmIChwdWJfYmFzZV9jb25uaW5mbyA9PSBOVUxMKQotCQll eGl0KDEpOwogCi0JaWYgKHN1Yl9jb25uaW5mb19zdHIgPT0gTlVMTCkKLQl7Ci0JCXBnX2xvZ19l cnJvcigibm8gc3Vic2NyaWJlciBjb25uZWN0aW9uIHN0cmluZyBzcGVjaWZpZWQiKTsKLQkJcGdf bG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIs IHByb2duYW1lKTsKLQkJZXhpdCgxKTsKLQl9Ci0Jc3ViX2Jhc2VfY29ubmluZm8gPSBnZXRfYmFz ZV9jb25uaW5mbyhzdWJfY29ubmluZm9fc3RyLCBOVUxMLCAic3Vic2NyaWJlciIpOwotCWlmIChz dWJfYmFzZV9jb25uaW5mbyA9PSBOVUxMKQorCXByaW1hcnkuYmFzZV9jb25uaW5mbyA9IGdldF9i YXNlX2Nvbm5pbmZvKHB1Yl9jb25uaW5mb19zdHIsCisJCQkJCQkJCQkJCSAgZGJuYW1lX2Nvbm5p bmZvKTsKKwlpZiAocHJpbWFyeS5iYXNlX2Nvbm5pbmZvID09IE5VTEwpCiAJCWV4aXQoMSk7CiAK KwlzdGFuZGJ5LmJhc2VfY29ubmluZm8gPSBjb25zdHJ1Y3Rfc3ViX2Nvbm5pbmZvKHVzZXJuYW1l LCBzdWJwb3J0KTsKKwogCWlmIChkYXRhYmFzZV9uYW1lcy5oZWFkID09IE5VTEwpCiAJewogCQlw Z19sb2dfaW5mbygibm8gZGF0YWJhc2Ugd2FzIHNwZWNpZmllZCIpOwpAQCAtMTM4NSw3ICsxNDkw LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCWlmIChkYm5hbWVfY29ubmluZm8p CiAJCXsKIAkJCXNpbXBsZV9zdHJpbmdfbGlzdF9hcHBlbmQoJmRhdGFiYXNlX25hbWVzLCBkYm5h bWVfY29ubmluZm8pOwotCQkJbnVtX2RicysrOworCQkJZGJhcnIubmRicysrOwogCiAJCQlwZ19s b2dfaW5mbygiZGF0YWJhc2UgXCIlc1wiIHdhcyBleHRyYWN0ZWQgZnJvbSB0aGUgcHVibGlzaGVy IGNvbm5lY3Rpb24gc3RyaW5nIiwKIAkJCQkJCWRibmFtZV9jb25uaW5mbyk7CkBAIC0xMzk5LDI1 ICsxNTA0LDI1IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCX0KIAogCS8qCi0JICog R2V0IHRoZSBhYnNvbHV0ZSBwYXRoIG9mIHBnX2N0bCBhbmQgcGdfcmVzZXR3YWwgb24gdGhlIHN1 YnNjcmliZXIuCisJICogR2V0IHRoZSBhYnNvbHV0ZSBwYXRoIG9mIGJpbmFyaWVzIG9uIHRoZSBz dWJzY3JpYmVyLgogCSAqLwotCWlmICghZ2V0X2V4ZWNfcGF0aChhcmd2WzBdKSkKKwlpZiAoIWdl dF9leGVjX2Jhc2VfcGF0aChhcmd2WzBdKSkKIAkJZXhpdCgxKTsKIAogCS8qIHJ1ZGltZW50YXJ5 IGNoZWNrIGZvciBhIGRhdGEgZGlyZWN0b3J5LiAqLwotCWlmICghY2hlY2tfZGF0YV9kaXJlY3Rv cnkoc3Vic2NyaWJlcl9kaXIpKQorCWlmICghY2hlY2tfZGF0YV9kaXJlY3Rvcnkoc3RhbmRieS5w Z2RhdGEpKQogCQlleGl0KDEpOwogCi0JLyogU3RvcmUgZGF0YWJhc2UgaW5mb3JtYXRpb24gZm9y IHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlci4gKi8KLQlkYmluZm8gPSBzdG9yZV9wdWJfc3ViX2lu Zm8ocHViX2Jhc2VfY29ubmluZm8sIHN1Yl9iYXNlX2Nvbm5pbmZvKTsKKwkvKiBTdG9yZSBkYXRh YmFzZSBpbmZvcm1hdGlvbiB0byBkYmFyciAqLworCXN0b3JlX2RiX25hbWVzKCZkYmFyci5wZXJk YiwgZGJhcnIubmRicyk7CiAKIAkvKgogCSAqIENoZWNrIGlmIHRoZSBzdWJzY3JpYmVyIGRhdGEg ZGlyZWN0b3J5IGhhcyB0aGUgc2FtZSBzeXN0ZW0gaWRlbnRpZmllcgogCSAqIHRoYW4gdGhlIHB1 Ymxpc2hlciBkYXRhIGRpcmVjdG9yeS4KIAkgKi8KLQlwdWJfc3lzaWQgPSBnZXRfc3lzaWRfZnJv bV9jb25uKGRiaW5mb1swXS5wdWJjb25uaW5mbyk7Ci0Jc3ViX3N5c2lkID0gZ2V0X2NvbnRyb2xf ZnJvbV9kYXRhZGlyKHN1YnNjcmliZXJfZGlyKTsKLQlpZiAocHViX3N5c2lkICE9IHN1Yl9zeXNp ZCkKKwlnZXRfc3lzaWRfZm9yX3ByaW1hcnkoJnByaW1hcnksIGRiYXJyLnBlcmRiWzBdLmRibmFt ZSk7CisJZ2V0X2NvbnRyb2xfZm9yX3N0YW5kYnkoJnN0YW5kYnkpOworCWlmIChwcmltYXJ5LnN5 c2lkICE9IHN0YW5kYnkuc3lzaWQpCiAJewogCQlwZ19sb2dfZXJyb3IoInN1YnNjcmliZXIgZGF0 YSBkaXJlY3RvcnkgaXMgbm90IGEgY29weSBvZiB0aGUgc291cmNlIGRhdGFiYXNlIGNsdXN0ZXIi KTsKIAkJZXhpdCgxKTsKQEAgLTE0MjYsOCArMTUzMSw4IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQogCS8qCiAJICogQ3JlYXRlIHRoZSBvdXRwdXQgZGlyZWN0b3J5IHRvIHN0b3JlIGFu eSBkYXRhIGdlbmVyYXRlZCBieSB0aGlzIHRvb2wuCiAJICovCi0JYmFzZV9kaXIgPSAoY2hhciAq KSBwZ19tYWxsb2MwKE1BWFBHUEFUSCk7Ci0JbGVuID0gc25wcmludGYoYmFzZV9kaXIsIE1BWFBH UEFUSCwgIiVzLyVzIiwgc3Vic2NyaWJlcl9kaXIsIFBHU19PVVRQVVRfRElSKTsKKwlsZW4gPSBz bnByaW50ZihiYXNlX2RpciwgTUFYUEdQQVRILCAiJXMvJXMiLAorCQkJCSAgIHN0YW5kYnkucGdk YXRhLCBQR1NfT1VUUFVUX0RJUik7CiAJaWYgKGxlbiA+PSBNQVhQR1BBVEgpCiAJewogCQlwZ19s b2dfZXJyb3IoImRpcmVjdG9yeSBwYXRoIGZvciBzdWJzY3JpYmVyIGlzIHRvbyBsb25nIik7CkBA IC0xNDQxLDcgKzE1NDYsMTUzIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCX0KIAog CS8qIHN1YnNjcmliZXIgUElEIGZpbGUuICovCi0Jc25wcmludGYocGlkZmlsZSwgTUFYUEdQQVRI LCAiJXMvcG9zdG1hc3Rlci5waWQiLCBzdWJzY3JpYmVyX2Rpcik7CisJc25wcmludGYocGlkZmls ZSwgTUFYUEdQQVRILCAiJXMvcG9zdG1hc3Rlci5waWQiLAorCQkJICBzdGFuZGJ5LnBnZGF0YSk7 CisKKwkvKiBTdGFydCB0aGUgc3RhbmRieSBzZXJ2ZXIgYW55d2F5ICovCisJc3RhcnRfc3RhbmRi eV9zZXJ2ZXIoJnN0YW5kYnksIHN1YnBvcnQsIHNlcnZlcl9zdGFydF9sb2cpOworCisJLyoKKwkg KiBDaGVjayB3YWxfbGV2ZWwgaW4gcHVibGlzaGVyIGFuZCB0aGUgbWF4X3JlcGxpY2F0aW9uX3Ns b3RzIG9mIHB1Ymxpc2hlcgorCSAqLworCWNvbm4gPSBjb25uZWN0X2RhdGFiYXNlKHByaW1hcnku YmFzZV9jb25uaW5mbywgZGJhcnIucGVyZGJbMF0uZGJuYW1lKTsKKwlpZiAoY29ubiA9PSBOVUxM KQorCQlleGl0KDEpOworCisJcmVzID0gUFFleGVjKGNvbm4sICJTRUxFQ1QgY291bnQoKikgZnJv bSBwZ19yZXBsaWNhdGlvbl9zbG90czsiKTsKKworCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9 IFBHUkVTX1RVUExFU19PSykKKwl7CisJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IG9idGFpbiBu dW1iZXIgb2YgcmVwbGljYXRpb24gc2xvdHMiKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlpZiAoUFFu dHVwbGVzKHJlcykgIT0gMSkKKwl7CisJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IGRldGVybWlu ZSBwYXJhbWV0ZXIgc2V0dGluZ3Mgb24gcHVibGlzaGVyIik7CisJCWV4aXQoMSk7CisJfQorCisJ bnNsb3RzX29sZCA9IGF0b2koUFFnZXR2YWx1ZShyZXMsIDAsIDApKTsKKwlQUWNsZWFyKHJlcyk7 CisKKwlyZXMgPSBQUWV4ZWMoY29ubiwgIlNFTEVDVCBzZXR0aW5nIEZST00gcGdfc2V0dGluZ3Mg IgorCQkJCSAiV0hFUkUgbmFtZSBJTiAoJ3dhbF9sZXZlbCcsICdtYXhfcmVwbGljYXRpb25fc2xv dHMnKSAiCisJCQkJICJPUkRFUiBCWSBuYW1lIERFU0M7Iik7CisKKwlpZiAoUFFyZXN1bHRTdGF0 dXMocmVzKSAhPSBQR1JFU19UVVBMRVNfT0spCisJeworCQlwZ19sb2dfZXJyb3IoImNvdWxkIG5v dCBvYnRhaW4gZ3VjIHBhcmFtZXRlcnMgb24gcHVibGlzaGVyIik7CisJCWV4aXQoMSk7CisJfQor CisJaWYgKFBRbnR1cGxlcyhyZXMpICE9IDIpCisJeworCQlwZ19sb2dfZXJyb3IoImNvdWxkIG5v dCBkZXRlcm1pbmUgcGFyYW1ldGVyIHNldHRpbmdzIG9uIHB1Ymxpc2hlciIpOworCQlleGl0KDEp OworCX0KKworCXdhbF9sZXZlbCA9IFBRZ2V0dmFsdWUocmVzLCAwLCAwKTsKKworCWlmIChzdHJj bXAod2FsX2xldmVsLCAibG9naWNhbCIpICE9IDApCisJeworCQlwZ19sb2dfZXJyb3IoIndhbF9s ZXZlbCBtdXN0IGJlIFwibG9naWNhbFwiLCBidXQgaXMgc2V0IHRvIFwiJXNcIiIsIHdhbF9sZXZl bCk7CisJCWV4aXQoMSk7CisJfQorCisJbWF4X3JlcGxpY2F0aW9uX3Nsb3RzID0gYXRvaShQUWdl dHZhbHVlKHJlcywgMSwgMCkpOworCW5zbG90c19uZXcgPSBuc2xvdHNfb2xkICsgZGJhcnIubmRi cyArIDE7CisKKwlpZiAobnNsb3RzX25ldyA+IG1heF9yZXBsaWNhdGlvbl9zbG90cykKKwl7CisJ CXBnX2xvZ19lcnJvcigibWF4X3JlcGxpY2F0aW9uX3Nsb3RzICglZCkgbXVzdCBiZSBncmVhdGVy IHRoYW4gb3IgZXF1YWwgdG8gIgorCQkJCQkgInRoZSBudW1iZXIgb2YgcmVwbGljYXRpb24gc2xv dHMgcmVxdWlyZWQgKCVkKSIsIG1heF9yZXBsaWNhdGlvbl9zbG90cywgbnNsb3RzX25ldyk7CisJ CWV4aXQoMSk7CisJfQorCisJUFFjbGVhcihyZXMpOworCWRpc2Nvbm5lY3RfZGF0YWJhc2UoY29u bik7CisKKwljb25uID0gY29ubmVjdF9kYXRhYmFzZShzdGFuZGJ5LmJhc2VfY29ubmluZm8sIGRi YXJyLnBlcmRiWzBdLmRibmFtZSk7CisJaWYgKGNvbm4gPT0gTlVMTCkKKwkJZXhpdCgxKTsKKwor CS8qCisJICogQ2hlY2sgdGhlIG1heF9yZXBsaWNhdGlvbl9zbG90cyBpbiBzdWJzY3JpYmVyCisJ ICovCisJcmVzID0gUFFleGVjKGNvbm4sICJTRUxFQ1QgY291bnQoKikgZnJvbSBwZ19yZXBsaWNh dGlvbl9zbG90czsiKTsKKworCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX1RVUExF U19PSykKKwl7CisJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IG9idGFpbiBudW1iZXIgb2YgcmVw bGljYXRpb24gc2xvdHMgb24gc3Vic2NyaWJlciIpOworCQlleGl0KDEpOworCX0KKworCWlmIChQ UW50dXBsZXMocmVzKSAhPSAxKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJjb3VsZCBub3QgZGV0ZXJt aW5lIHBhcmFtZXRlciBzZXR0aW5ncyBvbiBzdWJzY3JpYmVyIik7CisJCWV4aXQoMSk7CisJfQor CisJbnNsb3RzX29sZCA9IGF0b2koUFFnZXR2YWx1ZShyZXMsIDAsIDApKTsKKwlQUWNsZWFyKHJl cyk7CisKKwlyZXMgPSBQUWV4ZWMoY29ubiwgIlNFTEVDVCBzZXR0aW5nIEZST00gcGdfc2V0dGlu Z3MgIgorCQkJCSAiV0hFUkUgbmFtZSA9ICdtYXhfcmVwbGljYXRpb25fc2xvdHMnOyIpOworCisJ aWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfVFVQTEVTX09LKQorCXsKKwkJcGdfbG9n X2Vycm9yKCJjb3VsZCBub3Qgb2J0YWluIGd1YyBwYXJhbWV0ZXJzIik7CisJCWV4aXQoMSk7CisJ fQorCisJaWYgKFBRbnR1cGxlcyhyZXMpICE9IDEpCisJeworCQlwZ19sb2dfZXJyb3IoImNvdWxk IG5vdCBkZXRlcm1pbmUgcGFyYW1ldGVyIHNldHRpbmdzIG9uIHB1Ymxpc2hlciIpOworCQlleGl0 KDEpOworCX0KKworCW1heF9yZXBsaWNhdGlvbl9zbG90cyA9IGF0b2koUFFnZXR2YWx1ZShyZXMs IDAsIDApKTsKKwluc2xvdHNfbmV3ID0gbnNsb3RzX29sZCArIGRiYXJyLm5kYnM7CisKKwlpZiAo bnNsb3RzX25ldyA+IG1heF9yZXBsaWNhdGlvbl9zbG90cykKKwl7CisJCXBnX2xvZ19lcnJvcigi bWF4X3JlcGxpY2F0aW9uX3Nsb3RzICglZCkgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwg dG8gIgorCQkJCQkgInRoZSBudW1iZXIgb2YgcmVwbGljYXRpb24gc2xvdHMgcmVxdWlyZWQgKCVk KSIsIG1heF9yZXBsaWNhdGlvbl9zbG90cywgbnNsb3RzX25ldyk7CisJCWV4aXQoMSk7CisJfQor CisJUFFjbGVhcihyZXMpOworCisJLyoKKwkgKiBFeGl0IHRoZSBwZ19zdWJzY3JpYmVyIGlmIHRo ZSBub2RlIGlzIG5vdCBhIHN0YW5kYnkgc2VydmVyLgorCSAqLworCXJlcyA9IFBRZXhlYyhjb25u LCAiU0VMRUNUIHBnX2NhdGFsb2cucGdfaXNfaW5fcmVjb3ZlcnkoKSIpOworCisJaWYgKFBRcmVz dWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfVFVQTEVTX09LKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJj b3VsZCBub3Qgb2J0YWluIHJlY292ZXJ5IHByb2dyZXNzIik7CisJCWV4aXQoMSk7CisJfQorCisJ aWYgKFBRbnR1cGxlcyhyZXMpICE9IDEpCisJeworCQlwZ19sb2dfZXJyb3IoInVuZXhwZWN0ZWQg cmVzdWx0IGZyb20gcGdfaXNfaW5fcmVjb3ZlcnkgZnVuY3Rpb24iKTsKKwkJZXhpdCgxKTsKKwl9 CisKKwkvKiBDaGVjayBpZiB0aGUgc2VydmVyIGlzIGluIHJlY292ZXJ5ICovCisJaWYgKHN0cmNt cChQUWdldHZhbHVlKHJlcywgMCwgMCksICJ0IikgIT0gMCkKKwl7CisJCXBnX2xvZ19lcnJvcigi cGdfc3Vic2NyaWJlciBpcyBzdXBwb3J0ZWQgb25seSBvbiBzdGFuZGJ5IHNlcnZlciIpOworCQll eGl0KDEpOworCX0KKworCVBRY2xlYXIocmVzKTsKKwlkaXNjb25uZWN0X2RhdGFiYXNlKGNvbm4p OworCisJLyogc3Vic2NyaWJlciBQSUQgZmlsZS4gKi8KKwlzbnByaW50ZihwaWRmaWxlLCBNQVhQ R1BBVEgsICIlcy9wb3N0bWFzdGVyLnBpZCIsIHN0YW5kYnkucGdkYXRhKTsKIAogCS8qCiAJICog U3RvcCB0aGUgc3Vic2NyaWJlciBpZiBpdCBpcyBhIHN0YW5kYnkgc2VydmVyLiBCZWZvcmUgZXhl Y3V0aW5nIHRoZQpAQCAtMTQ1NywxNCArMTcwOCwxOCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoq YXJndikKIAkJICogcmVwbGljYXRpb24gc2xvdCBoYXMgbm8gdXNlIGFmdGVyIHRoZSB0cmFuc2Zv cm1hdGlvbiwgaGVuY2UsIGl0CiAJCSAqIHdpbGwgYmUgcmVtb3ZlZCBhdCB0aGUgZW5kIG9mIHRo aXMgcHJvY2Vzcy4KIAkJICovCi0JCXByaW1hcnlfc2xvdF9uYW1lID0gdXNlX3ByaW1hcnlfc2xv dF9uYW1lKCk7Ci0JCWlmIChwcmltYXJ5X3Nsb3RfbmFtZSAhPSBOVUxMKQotCQkJcGdfbG9nX2lu Zm8oInByaW1hcnkgaGFzIHJlcGxpY2F0aW9uIHNsb3QgXCIlc1wiIiwgcHJpbWFyeV9zbG90X25h bWUpOworCQlzdGFuZGJ5LnByaW1hcnlfc2xvdF9uYW1lID0gdXNlX3ByaW1hcnlfc2xvdF9uYW1l KCZwcmltYXJ5LAorCQkJCQkJCQkJCQkJCQkgICAmc3RhbmRieSwKKwkJCQkJCQkJCQkJCQkJICAg JmRiYXJyLnBlcmRiWzBdKTsKKwkJaWYgKHN0YW5kYnkucHJpbWFyeV9zbG90X25hbWUgIT0gTlVM TCkKKwkJCXBnX2xvZ19pbmZvKCJwcmltYXJ5IGhhcyByZXBsaWNhdGlvbiBzbG90IFwiJXNcIiIs CisJCQkJCQlzdGFuZGJ5LnByaW1hcnlfc2xvdF9uYW1lKTsKIAogCQlwZ19sb2dfaW5mbygic3Vi c2NyaWJlciBpcyB1cCBhbmQgcnVubmluZyIpOwogCQlwZ19sb2dfaW5mbygic3RvcHBpbmcgdGhl IHNlcnZlciB0byBzdGFydCB0aGUgdHJhbnNmb3JtYXRpb24gc3RlcHMiKTsKIAotCQlwZ19jdGxf Y21kID0gcHNwcmludGYoIlwiJXNcIiBzdG9wIC1EIFwiJXNcIiAtcyIsIHBnX2N0bF9wYXRoLCBz dWJzY3JpYmVyX2Rpcik7CisJCXBnX2N0bF9jbWQgPSBwc3ByaW50ZigiXCIlcy9wZ19jdGxcIiBz dG9wIC1EIFwiJXNcIiAtcyIsCisJCQkJCQkJICBzdGFuZGJ5LmJpbmRpciwgc3RhbmRieS5wZ2Rh dGEpOwogCQlyYyA9IHN5c3RlbShwZ19jdGxfY21kKTsKIAkJcGdfY3RsX3N0YXR1cyhwZ19jdGxf Y21kLCByYywgMCk7CiAJfQpAQCAtMTQ3Miw3ICsxNzI3LDcgQEAgbWFpbihpbnQgYXJnYywgY2hh ciAqKmFyZ3YpCiAJLyoKIAkgKiBDcmVhdGUgYSByZXBsaWNhdGlvbiBzbG90IGZvciBlYWNoIGRh dGFiYXNlIG9uIHRoZSBwdWJsaXNoZXIuCiAJICovCi0JaWYgKCFjcmVhdGVfYWxsX2xvZ2ljYWxf cmVwbGljYXRpb25fc2xvdHMoZGJpbmZvKSkKKwlpZiAoIWNyZWF0ZV9hbGxfbG9naWNhbF9yZXBs aWNhdGlvbl9zbG90cygmcHJpbWFyeSwgJmRiYXJyKSkKIAkJZXhpdCgxKTsKIAogCS8qCkBAIC0x NDkyLDExICsxNzQ3LDExIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCSAqIHJlcGxp Y2F0aW9uIGNvbm5lY3Rpb24gb3BlbiAoZGVwZW5kaW5nIHdoZW4gYmFzZSBiYWNrdXAgd2FzIHRh a2VuLCB0aGUKIAkgKiBjb25uZWN0aW9uIHNob3VsZCBiZSBvcGVuIGZvciBhIGZldyBob3Vycyku CiAJICovCi0JY29ubiA9IGNvbm5lY3RfZGF0YWJhc2UoZGJpbmZvWzBdLnB1YmNvbm5pbmZvKTsK Kwljb25uID0gY29ubmVjdF9kYXRhYmFzZShwcmltYXJ5LmJhc2VfY29ubmluZm8sIGRiYXJyLnBl cmRiWzBdLmRibmFtZSk7CiAJaWYgKGNvbm4gPT0gTlVMTCkKIAkJZXhpdCgxKTsKLQljb25zaXN0 ZW50X2xzbiA9IGNyZWF0ZV9sb2dpY2FsX3JlcGxpY2F0aW9uX3Nsb3QoY29ubiwgJmRiaW5mb1sw XSwKLQkJCQkJCQkJCQkJCQkgdGVtcF9yZXBsc2xvdCk7CisJY29uc2lzdGVudF9sc24gPSBjcmVh dGVfbG9naWNhbF9yZXBsaWNhdGlvbl9zbG90KGNvbm4sIHRydWUsCisJCQkJCQkJCQkJCQkJICZk YmFyci5wZXJkYlswXSk7CiAKIAkvKgogCSAqIFdyaXRlIHJlY292ZXJ5IHBhcmFtZXRlcnMuCkBA IC0xNTIyLDcgKzE3NzcsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAl7CiAJCWFw cGVuZFBRRXhwQnVmZmVyKHJlY292ZXJ5Y29uZmNvbnRlbnRzLCAicmVjb3ZlcnlfdGFyZ2V0X2xz biA9ICclcydcbiIsCiAJCQkJCQkgIGNvbnNpc3RlbnRfbHNuKTsKLQkJV3JpdGVSZWNvdmVyeUNv bmZpZyhjb25uLCBzdWJzY3JpYmVyX2RpciwgcmVjb3Zlcnljb25mY29udGVudHMpOworCQlXcml0 ZVJlY292ZXJ5Q29uZmlnKGNvbm4sIHN0YW5kYnkucGdkYXRhLCByZWNvdmVyeWNvbmZjb250ZW50 cyk7CiAJfQogCWRpc2Nvbm5lY3RfZGF0YWJhc2UoY29ubik7CiAKQEAgLTE1MzIsNTQgKzE3ODcs MjkgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJICogU3RhcnQgc3Vic2NyaWJlciBh bmQgd2FpdCB1bnRpbCBhY2NlcHRpbmcgY29ubmVjdGlvbnMuCiAJICovCiAJcGdfbG9nX2luZm8o InN0YXJ0aW5nIHRoZSBzdWJzY3JpYmVyIik7Ci0KLQkvKiBhcHBlbmQgdGltZXN0YW1wIHdpdGgg SVNPIDg2MDEgZm9ybWF0LiAqLwotCWdldHRpbWVvZmRheSgmdGltZSwgTlVMTCk7Ci0JdHQgPSAo dGltZV90KSB0aW1lLnR2X3NlYzsKLQlzdHJmdGltZSh0aW1lYnVmLCBzaXplb2YodGltZWJ1Ziks ICIlWSVtJWRUJUglTSVTIiwgbG9jYWx0aW1lKCZ0dCkpOwotCXNucHJpbnRmKHRpbWVidWYgKyBz dHJsZW4odGltZWJ1ZiksIHNpemVvZih0aW1lYnVmKSAtIHN0cmxlbih0aW1lYnVmKSwKLQkJCSAi LiUwM2QiLCAoaW50KSAodGltZS50dl91c2VjIC8gMTAwMCkpOwotCi0Jc2VydmVyX3N0YXJ0X2xv ZyA9IChjaGFyICopIHBnX21hbGxvYzAoTUFYUEdQQVRIKTsKLQlsZW4gPSBzbnByaW50ZihzZXJ2 ZXJfc3RhcnRfbG9nLCBNQVhQR1BBVEgsICIlcy8lcy9zZXJ2ZXJfc3RhcnRfJXMubG9nIiwgc3Vi c2NyaWJlcl9kaXIsIFBHU19PVVRQVVRfRElSLCB0aW1lYnVmKTsKLQlpZiAobGVuID49IE1BWFBH UEFUSCkKLQl7Ci0JCXBnX2xvZ19lcnJvcigibG9nIGZpbGUgcGF0aCBpcyB0b28gbG9uZyIpOwot CQlleGl0KDEpOwotCX0KLQotCXBnX2N0bF9jbWQgPSBwc3ByaW50ZigiXCIlc1wiIHN0YXJ0IC1E IFwiJXNcIiAtcyAtbCBcIiVzXCIiLCBwZ19jdGxfcGF0aCwgc3Vic2NyaWJlcl9kaXIsIHNlcnZl cl9zdGFydF9sb2cpOwotCXJjID0gc3lzdGVtKHBnX2N0bF9jbWQpOwotCXBnX2N0bF9zdGF0dXMo cGdfY3RsX2NtZCwgcmMsIDEpOworCXN0YXJ0X3N0YW5kYnlfc2VydmVyKCZzdGFuZGJ5LCBzdWJw b3J0LCBzZXJ2ZXJfc3RhcnRfbG9nKTsKIAogCS8qCiAJICogV2FpdGluZyB0aGUgc3Vic2NyaWJl ciB0byBiZSBwcm9tb3RlZC4KIAkgKi8KLQl3YWl0X2Zvcl9lbmRfcmVjb3ZlcnkoZGJpbmZvWzBd LnN1YmNvbm5pbmZvKTsKKwl3YWl0X2Zvcl9lbmRfcmVjb3Zlcnkoc3RhbmRieS5iYXNlX2Nvbm5p bmZvLCBkYmFyci5wZXJkYlswXS5kYm5hbWUpOwogCiAJLyoKIAkgKiBDcmVhdGUgYSBwdWJsaWNh dGlvbiBmb3IgZWFjaCBkYXRhYmFzZS4gVGhpcyBzdGVwIHNob3VsZCBiZSBleGVjdXRlZAogCSAq IGFmdGVyIHByb21vdGluZyB0aGUgc3Vic2NyaWJlciB0byBhdm9pZCByZXBsaWNhdGluZyB1bm5l Y2Vzc2FyeQogCSAqIG9iamVjdHMuCiAJICovCi0JZm9yIChpID0gMDsgaSA8IG51bV9kYnM7IGkr KykKKwlmb3IgKGkgPSAwOyBpIDwgZGJhcnIubmRiczsgaSsrKQogCXsKLQkJY2hhcgkJcHVibmFt ZVtOQU1FREFUQUxFTl07CisJCUxvZ2ljYWxSZXBQZXJkYkluZm8gKnBlcmRiID0gJmRiYXJyLnBl cmRiW2ldOwogCiAJCS8qIENvbm5lY3QgdG8gcHVibGlzaGVyLiAqLwotCQljb25uID0gY29ubmVj dF9kYXRhYmFzZShkYmluZm9baV0ucHViY29ubmluZm8pOworCQljb25uID0gY29ubmVjdF9kYXRh YmFzZShwcmltYXJ5LmJhc2VfY29ubmluZm8sIHBlcmRiLT5kYm5hbWUpOwogCQlpZiAoY29ubiA9 PSBOVUxMKQogCQkJZXhpdCgxKTsKIAotCQkvKgotCQkgKiBCdWlsZCB0aGUgcHVibGljYXRpb24g bmFtZS4gVGhlIG5hbWUgbXVzdCBub3QgZXhjZWVkIE5BTUVEQVRBTEVOIC0KLQkJICogMS4gVGhp cyBjdXJyZW50IHNjaGVtYSB1c2VzIGEgbWF4aW11bSBvZiAzNSBjaGFyYWN0ZXJzICgxNCArIDEw ICsKLQkJICogJ1wwJykuCi0JCSAqLwotCQlzbnByaW50ZihwdWJuYW1lLCBzaXplb2YocHVibmFt ZSksICJwZ19zdWJzY3JpYmVyXyV1IiwgZGJpbmZvW2ldLm9pZCk7Ci0JCWRiaW5mb1tpXS5wdWJu YW1lID0gcGdfc3RyZHVwKHB1Ym5hbWUpOwotCi0JCWNyZWF0ZV9wdWJsaWNhdGlvbihjb25uLCAm ZGJpbmZvW2ldKTsKKwkJLyogQWxzbyBjcmVhdGUgYSBwdWJsaWNhdGlvbiAqLworCQljcmVhdGVf cHVibGljYXRpb24oY29ubiwgJnByaW1hcnksIHBlcmRiKTsKIAogCQlkaXNjb25uZWN0X2RhdGFi YXNlKGNvbm4pOwogCX0KQEAgLTE1ODcsMjAgKzE4MTcsMjUgQEAgbWFpbihpbnQgYXJnYywgY2hh ciAqKmFyZ3YpCiAJLyoKIAkgKiBDcmVhdGUgYSBzdWJzY3JpcHRpb24gZm9yIGVhY2ggZGF0YWJh c2UuCiAJICovCi0JZm9yIChpID0gMDsgaSA8IG51bV9kYnM7IGkrKykKKwlmb3IgKGkgPSAwOyBp IDwgZGJhcnIubmRiczsgaSsrKQogCXsKKwkJTG9naWNhbFJlcFBlcmRiSW5mbyAqcGVyZGIgPSAm ZGJhcnIucGVyZGJbaV07CisKIAkJLyogQ29ubmVjdCB0byBzdWJzY3JpYmVyLiAqLwotCQljb25u ID0gY29ubmVjdF9kYXRhYmFzZShkYmluZm9baV0uc3ViY29ubmluZm8pOworCQljb25uID0gY29u bmVjdF9kYXRhYmFzZShzdGFuZGJ5LmJhc2VfY29ubmluZm8sIHBlcmRiLT5kYm5hbWUpOworCiAJ CWlmIChjb25uID09IE5VTEwpCiAJCQlleGl0KDEpOwogCi0JCWNyZWF0ZV9zdWJzY3JpcHRpb24o Y29ubiwgJmRiaW5mb1tpXSk7CisJCWNyZWF0ZV9zdWJzY3JpcHRpb24oY29ubiwgJnN0YW5kYnks IHByaW1hcnkuYmFzZV9jb25uaW5mbywgcGVyZGIpOwogCiAJCS8qIFNldCB0aGUgcmVwbGljYXRp b24gcHJvZ3Jlc3MgdG8gdGhlIGNvcnJlY3QgTFNOLiAqLwotCQlzZXRfcmVwbGljYXRpb25fcHJv Z3Jlc3MoY29ubiwgJmRiaW5mb1tpXSwgY29uc2lzdGVudF9sc24pOworCQlzZXRfcmVwbGljYXRp b25fcHJvZ3Jlc3MoY29ubiwgcGVyZGIsIGNvbnNpc3RlbnRfbHNuKTsKIAogCQkvKiBFbmFibGUg c3Vic2NyaXB0aW9uLiAqLwotCQllbmFibGVfc3Vic2NyaXB0aW9uKGNvbm4sICZkYmluZm9baV0p OworCQllbmFibGVfc3Vic2NyaXB0aW9uKGNvbm4sIHBlcmRiKTsKKworCQlkcm9wX3B1YmxpY2F0 aW9uKGNvbm4sIHBlcmRiKTsKIAogCQlkaXNjb25uZWN0X2RhdGFiYXNlKGNvbm4pOwogCX0KQEAg LTE2MTMsMTkgKzE4NDgsMjEgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJICogWFhY IHdlIG1pZ2h0IG5vdCBmYWlsIGhlcmUuIEluc3RlYWQsIHdlIHByb3ZpZGUgYSB3YXJuaW5nIHNv IHRoZSB1c2VyCiAJICogZXZlbnR1YWxseSBkcm9wcyB0aGUgcmVwbGljYXRpb24gc2xvdCBsYXRl ci4KIAkgKi8KLQljb25uID0gY29ubmVjdF9kYXRhYmFzZShkYmluZm9bMF0ucHViY29ubmluZm8p OworCWNvbm4gPSBjb25uZWN0X2RhdGFiYXNlKHByaW1hcnkuYmFzZV9jb25uaW5mbywgZGJhcnIu cGVyZGJbMF0uZGJuYW1lKTsKIAlpZiAoY29ubiA9PSBOVUxMKQogCXsKLQkJcGdfbG9nX3dhcm5p bmcoImNvdWxkIG5vdCBkcm9wIHRyYW5zaWVudCByZXBsaWNhdGlvbiBzbG90IFwiJXNcIiBvbiBw dWJsaXNoZXIiLCB0ZW1wX3JlcGxzbG90KTsKLQkJcGdfbG9nX3dhcm5pbmdfaGludCgiRHJvcCB0 aGlzIHJlcGxpY2F0aW9uIHNsb3Qgc29vbiB0byBhdm9pZCByZXRlbnRpb24gb2YgV0FMIGZpbGVz LiIpOworCQljaGFyICpwcmltYXJ5X3Nsb3RfbmFtZSA9IHN0YW5kYnkucHJpbWFyeV9zbG90X25h bWU7CisKIAkJaWYgKHByaW1hcnlfc2xvdF9uYW1lICE9IE5VTEwpCiAJCQlwZ19sb2dfd2Fybmlu ZygiY291bGQgbm90IGRyb3AgcmVwbGljYXRpb24gc2xvdCBcIiVzXCIgb24gcHJpbWFyeSIsIHBy aW1hcnlfc2xvdF9uYW1lKTsKIAl9CiAJZWxzZQogCXsKLQkJZHJvcF9yZXBsaWNhdGlvbl9zbG90 KGNvbm4sICZkYmluZm9bMF0sIHRlbXBfcmVwbHNsb3QpOworCQlMb2dpY2FsUmVwUGVyZGJJbmZv ICpwZXJkYiA9ICZkYmFyci5wZXJkYlswXTsKKwkJY2hhciAqcHJpbWFyeV9zbG90X25hbWUgPSBz dGFuZGJ5LnByaW1hcnlfc2xvdF9uYW1lOworCiAJCWlmIChwcmltYXJ5X3Nsb3RfbmFtZSAhPSBO VUxMKQotCQkJZHJvcF9yZXBsaWNhdGlvbl9zbG90KGNvbm4sICZkYmluZm9bMF0sIHByaW1hcnlf c2xvdF9uYW1lKTsKKwkJCWRyb3BfcmVwbGljYXRpb25fc2xvdChjb25uLCBwZXJkYiwgcHJpbWFy eV9zbG90X25hbWUpOwogCQlkaXNjb25uZWN0X2RhdGFiYXNlKGNvbm4pOwogCX0KIApAQCAtMTYz NCwyMCArMTg3MSwyMiBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkgKi8KIAlwZ19s b2dfaW5mbygic3RvcHBpbmcgdGhlIHN1YnNjcmliZXIiKTsKIAotCXBnX2N0bF9jbWQgPSBwc3By aW50ZigiXCIlc1wiIHN0b3AgLUQgXCIlc1wiIC1zIiwgcGdfY3RsX3BhdGgsIHN1YnNjcmliZXJf ZGlyKTsKKwlwZ19jdGxfY21kID0gcHNwcmludGYoIlwiJXMvcGdfY3RsXCIgc3RvcCAtRCBcIiVz XCIgLXMiLAorCQkJCQkJICBzdGFuZGJ5LmJpbmRpciwgc3RhbmRieS5wZ2RhdGEpOwogCXJjID0g c3lzdGVtKHBnX2N0bF9jbWQpOwogCXBnX2N0bF9zdGF0dXMocGdfY3RsX2NtZCwgcmMsIDApOwog CiAJLyoKIAkgKiBDaGFuZ2Ugc3lzdGVtIGlkZW50aWZpZXIuCiAJICovCi0JbW9kaWZ5X3N5c2lk KHBnX3Jlc2V0d2FsX3BhdGgsIHN1YnNjcmliZXJfZGlyKTsKKwltb2RpZnlfc3lzaWQoc3RhbmRi eS5iaW5kaXIsIHN0YW5kYnkucGdkYXRhKTsKIAogCS8qCiAJICogUmVtb3ZlIGxvZyBmaWxlIGdl bmVyYXRlZCBieSB0aGlzIHRvb2wsIGlmIGl0IHJ1bnMgc3VjY2Vzc2Z1bGx5LgogCSAqIE90aGVy d2lzZSwgZmlsZSBpcyBrZXB0IHRoYXQgbWF5IHByb3ZpZGUgdXNlZnVsIGRlYnVnZ2luZyBpbmZv cm1hdGlvbi4KIAkgKi8KLQl1bmxpbmsoc2VydmVyX3N0YXJ0X2xvZyk7CisJaWYgKCFyZXRhaW4p CisJCXVubGluayhzZXJ2ZXJfc3RhcnRfbG9nKTsKIAogCXN1Y2Nlc3MgPSB0cnVlOwogCmRpZmYg LS1naXQgYS9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvdC8wNDBfcGdfc3Vic2NyaWJlci5wbCBiL3Ny Yy9iaW4vcGdfYmFzZWJhY2t1cC90LzA0MF9wZ19zdWJzY3JpYmVyLnBsCmluZGV4IDRlYmZmNzZi MmQuLjk5MTViOGNiM2MgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC90LzA0MF9w Z19zdWJzY3JpYmVyLnBsCisrKyBiL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC90LzA0MF9wZ19zdWJz Y3JpYmVyLnBsCkBAIC0zNyw4ICszNywxMyBAQCBjb21tYW5kX2ZhaWxzKAogCQknLS12ZXJib3Nl JywKIAkJJy0tcGdkYXRhJywgJGRhdGFkaXIsCiAJCSctLXB1Ymxpc2hlci1jb25uaW5mbycsICdk Ym5hbWU9cG9zdGdyZXMnLAotCQknLS1zdWJzY3JpYmVyLWNvbm5pbmZvJywgJ2RibmFtZT1wb3N0 Z3JlcycKIAldLAogCSdubyBkYXRhYmFzZSBuYW1lIHNwZWNpZmllZCcpOwotCitjb21tYW5kX2Zh aWxzKAorCVsKKwkJJ3BnX3N1YnNjcmliZXInLCAnLS12ZXJib3NlJywKKwkJJy0tcGdkYXRhJywg JGRhdGFkaXIsCisJCSctLXB1Ymxpc2hlci1jb25uaW5mbycsICdkYm5hbWU9cG9zdGdyZXMnLAor CV0sCisJJ3N1YnNjcmliZXIgY29ubmVjdGlvbiBzdHJpbmcgc3BlY25maWVkIG5vbi1sb2NhbCBz ZXJ2ZXInKTsKIGRvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19iYXNlYmFj a3VwL3QvMDQxX3BnX3N1YnNjcmliZXJfc3RhbmRieS5wbCBiL3NyYy9iaW4vcGdfYmFzZWJhY2t1 cC90LzA0MV9wZ19zdWJzY3JpYmVyX3N0YW5kYnkucGwKaW5kZXggZmJjZDBmYzgyYi4uNGUyNjYw NzYxMSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3QvMDQxX3BnX3N1YnNjcmli ZXJfc3RhbmRieS5wbAorKysgYi9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvdC8wNDFfcGdfc3Vic2Ny aWJlcl9zdGFuZGJ5LnBsCkBAIC01MSwyNSArNTEsMjcgQEAgJG5vZGVfcy0+c3RhcnQ7CiAkbm9k ZV9wLT5zYWZlX3BzcWwoJ3BnMScsICJJTlNFUlQgSU5UTyB0YmwxIFZBTFVFUygnc2Vjb25kIHJv dycpIik7CiAkbm9kZV9wLT53YWl0X2Zvcl9yZXBsYXlfY2F0Y2h1cCgkbm9kZV9zKTsKIAorJG5v ZGVfZi0+c3RvcDsKKwogIyBSdW4gcGdfc3Vic2NyaWJlciBvbiBhYm91dC10by1mYWlsIG5vZGUg RgogY29tbWFuZF9mYWlscygKIAlbCiAJCSdwZ19zdWJzY3JpYmVyJywgJy0tdmVyYm9zZScsCiAJ CSctLXBnZGF0YScsICRub2RlX2YtPmRhdGFfZGlyLAogCQknLS1wdWJsaXNoZXItY29ubmluZm8n LCAkbm9kZV9wLT5jb25uc3RyKCdwZzEnKSwKLQkJJy0tc3Vic2NyaWJlci1jb25uaW5mbycsICRu b2RlX2YtPmNvbm5zdHIoJ3BnMScpLAogCQknLS1kYXRhYmFzZScsICdwZzEnLAogCQknLS1kYXRh YmFzZScsICdwZzInCiAJXSwKIAknc3Vic2NyaWJlciBkYXRhIGRpcmVjdG9yeSBpcyBub3QgYSBj b3B5IG9mIHRoZSBzb3VyY2UgZGF0YWJhc2UgY2x1c3RlcicpOwogCiskbm9kZV9zLT5zdG9wOwor CiAjIGRyeSBydW4gbW9kZSBvbiBub2RlIFMKIGNvbW1hbmRfb2soCiAJWwogCQkncGdfc3Vic2Ny aWJlcicsICctLXZlcmJvc2UnLCAnLS1kcnktcnVuJywKIAkJJy0tcGdkYXRhJywgJG5vZGVfcy0+ ZGF0YV9kaXIsCiAJCSctLXB1Ymxpc2hlci1jb25uaW5mbycsICRub2RlX3AtPmNvbm5zdHIoJ3Bn MScpLAotCQknLS1zdWJzY3JpYmVyLWNvbm5pbmZvJywgJG5vZGVfcy0+Y29ubnN0cigncGcxJyks CiAJCSctLWRhdGFiYXNlJywgJ3BnMScsCiAJCSctLWRhdGFiYXNlJywgJ3BnMicKIAldLApAQCAt ODIsNiArODQsNyBAQCAkbm9kZV9zLT5zdGFydDsKICMgQ2hlY2sgaWYgbm9kZSBTIGlzIHN0aWxs IGEgc3RhbmRieQogaXMoJG5vZGVfcy0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdTRUxFQ1QgcGdf aXNfaW5fcmVjb3ZlcnkoKScpLAogCSd0JywgJ3N0YW5kYnkgaXMgaW4gcmVjb3ZlcnknKTsKKyRu b2RlX3MtPnN0b3A7CiAKICMgUnVuIHBnX3N1YnNjcmliZXIgb24gbm9kZSBTCiBjb21tYW5kX29r KApAQCAtODksNyArOTIsNiBAQCBjb21tYW5kX29rKAogCQkncGdfc3Vic2NyaWJlcicsICctLXZl cmJvc2UnLAogCQknLS1wZ2RhdGEnLCAkbm9kZV9zLT5kYXRhX2RpciwKIAkJJy0tcHVibGlzaGVy LWNvbm5pbmZvJywgJG5vZGVfcC0+Y29ubnN0cigncGcxJyksCi0JCSctLXN1YnNjcmliZXItY29u bmluZm8nLCAkbm9kZV9zLT5jb25uc3RyKCdwZzEnKSwKIAkJJy0tZGF0YWJhc2UnLCAncGcxJywK IAkJJy0tZGF0YWJhc2UnLCAncGcyJwogCV0sCi0tIAoyLjQzLjAKCg== --_004_TY3PR01MB98890AB22AECA2F503EB7858F5742TY3PR01MB9889jpnp_ Content-Type: application/octet-stream; name="v7-0003-Fix-publication-does-not-exist-error.patch" Content-Description: v7-0003-Fix-publication-does-not-exist-error.patch Content-Disposition: attachment; filename="v7-0003-Fix-publication-does-not-exist-error.patch"; size=1598; creation-date="Tue, 23 Jan 2024 02:09:24 GMT"; modification-date="Tue, 23 Jan 2024 02:11:26 GMT" Content-Transfer-Encoding: base64 RnJvbSBmZTFjNTdiOTc0YTIyMjhiNWFiMjM0OWIzMWRlMTZkMDRkYjI0YWFjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTaGxvayBLeWFsIDxzaGxvay5reWFsLm9zc0BnbWFpbC5jb20+ CkRhdGU6IE1vbiwgMjIgSmFuIDIwMjQgMTI6MzY6MjAgKzA1MzAKU3ViamVjdDogW1BBVENIIHY3 IDMvM10gRml4IHB1YmxpY2F0aW9uIGRvZXMgbm90IGV4aXN0IGVycm9yLgoKRml4IHB1YmxpY2F0 aW9uIGRvZXMgbm90IGV4aXN0IGVycm9yLgotLS0KIHNyYy9iaW4vcGdfYmFzZWJhY2t1cC9wZ19z dWJzY3JpYmVyLmMgfCAyMyArKystLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQs IDMgaW5zZXJ0aW9ucygrKSwgMjAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z19iYXNlYmFja3VwL3BnX3N1YnNjcmliZXIuYyBiL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC9wZ19z dWJzY3JpYmVyLmMKaW5kZXggMzg4MGQxNWVmOS4uMzU1NzM4YzIwYyAxMDA2NDQKLS0tIGEvc3Jj L2Jpbi9wZ19iYXNlYmFja3VwL3BnX3N1YnNjcmliZXIuYworKysgYi9zcmMvYmluL3BnX2Jhc2Vi YWNrdXAvcGdfc3Vic2NyaWJlci5jCkBAIC02NzksNiArNjc5LDkgQEAgY3JlYXRlX2FsbF9sb2dp Y2FsX3JlcGxpY2F0aW9uX3Nsb3RzKFByaW1hcnlJbmZvICpwcmltYXJ5LAogCQlpZiAoY3JlYXRl X2xvZ2ljYWxfcmVwbGljYXRpb25fc2xvdChjb25uLCBmYWxzZSwgcGVyZGIpID09IE5VTEwgJiYg IWRyeV9ydW4pCiAJCQlyZXR1cm4gZmFsc2U7CiAKKwkJLyogQWxzbyBjcmVhdGUgYSBwdWJsaWNh dGlvbiAqLworCQljcmVhdGVfcHVibGljYXRpb24oY29ubiwgcHJpbWFyeSwgcGVyZGIpOworCiAJ CWRpc2Nvbm5lY3RfZGF0YWJhc2UoY29ubik7CiAJfQogCkBAIC0xNzk0LDI2ICsxNzk3LDYgQEAg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJICovCiAJd2FpdF9mb3JfZW5kX3JlY292ZXJ5 KHN0YW5kYnkuYmFzZV9jb25uaW5mbywgZGJhcnIucGVyZGJbMF0uZGJuYW1lKTsKIAotCS8qCi0J ICogQ3JlYXRlIGEgcHVibGljYXRpb24gZm9yIGVhY2ggZGF0YWJhc2UuIFRoaXMgc3RlcCBzaG91 bGQgYmUgZXhlY3V0ZWQKLQkgKiBhZnRlciBwcm9tb3RpbmcgdGhlIHN1YnNjcmliZXIgdG8gYXZv aWQgcmVwbGljYXRpbmcgdW5uZWNlc3NhcnkKLQkgKiBvYmplY3RzLgotCSAqLwotCWZvciAoaSA9 IDA7IGkgPCBkYmFyci5uZGJzOyBpKyspCi0JewotCQlMb2dpY2FsUmVwUGVyZGJJbmZvICpwZXJk YiA9ICZkYmFyci5wZXJkYltpXTsKLQotCQkvKiBDb25uZWN0IHRvIHB1Ymxpc2hlci4gKi8KLQkJ Y29ubiA9IGNvbm5lY3RfZGF0YWJhc2UocHJpbWFyeS5iYXNlX2Nvbm5pbmZvLCBwZXJkYi0+ZGJu YW1lKTsKLQkJaWYgKGNvbm4gPT0gTlVMTCkKLQkJCWV4aXQoMSk7Ci0KLQkJLyogQWxzbyBjcmVh dGUgYSBwdWJsaWNhdGlvbiAqLwotCQljcmVhdGVfcHVibGljYXRpb24oY29ubiwgJnByaW1hcnks IHBlcmRiKTsKLQotCQlkaXNjb25uZWN0X2RhdGFiYXNlKGNvbm4pOwotCX0KLQogCS8qCiAJICog Q3JlYXRlIGEgc3Vic2NyaXB0aW9uIGZvciBlYWNoIGRhdGFiYXNlLgogCSAqLwotLSAKMi40My4w Cgo= --_004_TY3PR01MB98890AB22AECA2F503EB7858F5742TY3PR01MB9889jpnp_--