From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from APC01-SG2-obe.outbound.protection.outlook.com (mail-sgaapc01on2050.outbound.protection.outlook.com [40.107.215.50]) by sourceware.org (Postfix) with ESMTPS id 4277C3858D28 for ; Mon, 7 Aug 2023 13:58:38 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 4277C3858D28 Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=siemens.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=siemens.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Q2NUqH4aB2zZT3SgpTxrs6z89uo/bgSFZnLQuH0wE773of44x8io83zNZzb2xh529AMQpRTJeERLNYTqXbvxuiEa2pV6xJ5qlu0uDpTSdEN2Vgyl//JxkJVSq9tyACpAYZjXug9gN64B5GXq+mlr5CroZ4KNn6WKLWYZTMs3ZZ1UIS9If8ggy5DNSZwBcZv6FtjISIX2e3t1TYoRUsRDEaxocEUdga73EzhO0VRPmcg6NWCGcvAsxCfwnxoCOv/4kbuwQhWIzYuzbWj5caR6/2dFx1e8uS//QEX+wlswYrzs6MBDziXsGO4lnumKnFsMpA99mzKAY/pUUxSGJarMWA== 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=B5S9YkwaztrvC+NPB1/+x4ZaFlsyqAGO/68YX8g9ggQ=; b=cKd3Pnr1/00c4Xag99EAbDuvt6hRNmjncFDz8Kw4kodL+ncydEBnqY2Fhn0IeDqvh2UQH0GE00AA619qYLwgQ9c5rgBAu5DJirGHIibNND7j+viFudeOIldK5E1VbE2PqdvNgQanlaSRS8o3CHfDVdkWa9vYmaeQvjkLdK/sE5kfKmiXl7MSJ17sHlEEOffoZ5GkyzrK8uIdg5JG+1uZl+h2pgb1qlYCWlTspafhGhfWbsFwkEEPXnNEvjlOck8dwKDwEmWJYk2NJcUbJdLszinb60YFeWSyiNUJaO4E8Di/DXnFLCsinXsTz0AVU8g5qLzx5ouGFyg+LyiBeoUuLw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=siemens.com; dmarc=pass action=none header.from=siemens.com; dkim=pass header.d=siemens.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=siemens.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=B5S9YkwaztrvC+NPB1/+x4ZaFlsyqAGO/68YX8g9ggQ=; b=lF1nziFQ4Uvdr3deliGEVCVDu3QbxKy1cuZMV7KYHoNlfcr/p6VCjFCgg7iOxVSqLHP4spY3rYGe8Uk81GKb5xAe+Gyff0Yb7NgdE8ftWkcaSeAUZq7wRbavYDZGp05nurSUSpETLmvkceiqPek7VuatX6NNsOd9X34f8Emma2VXwBoP12cSFJEHyOPYzUB/d1ZYvgFEpVjHYXSavZfFaxu7KbU0XXazK3KWeW90hq/HqfqrHJ/JKutnkpscxQhf2sjEF6qHzvfe0lAWLqcRsSVBO9OeTT4jR1GuR2KjhoyWKMfPhq9mjQ0iqaSoo1WDg7qn7Zdq+nTYj32MSv8mEA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=siemens.com; Received: from SG2PR06MB5430.apcprd06.prod.outlook.com (2603:1096:4:1ba::14) by KL1PR0601MB4049.apcprd06.prod.outlook.com (2603:1096:820:22::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6652.26; Mon, 7 Aug 2023 13:58:32 +0000 Received: from SG2PR06MB5430.apcprd06.prod.outlook.com ([fe80::e720:fef7:1199:a273]) by SG2PR06MB5430.apcprd06.prod.outlook.com ([fe80::e720:fef7:1199:a273%7]) with mapi id 15.20.6652.022; Mon, 7 Aug 2023 13:58:32 +0000 Content-Type: multipart/mixed; boundary="------------zx7P28bx3js3YBDFQ757ciaI" Message-ID: Date: Mon, 7 Aug 2023 21:58:27 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.13.0 Subject: [PATCH, OpenACC 2.7, v2] readonly modifier support in front-ends To: Tobias Burnus , Thomas Schwinge , Chung-Lin Tang Cc: gcc-patches@gcc.gnu.org, Catherine Moore References: <87lefaaesb.fsf@euler.schwinge.homeip.net> Content-Language: en-US From: Chung-Lin Tang In-Reply-To: X-ClientProxiedBy: TYCP301CA0028.JPNP301.PROD.OUTLOOK.COM (2603:1096:400:381::11) To SG2PR06MB5430.apcprd06.prod.outlook.com (2603:1096:4:1ba::14) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SG2PR06MB5430:EE_|KL1PR0601MB4049:EE_ X-MS-Office365-Filtering-Correlation-Id: 778f2ac1-650c-454b-6eda-08db974e6267 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: KDYiBb2Rx3+fwJxuS2l5gf2u5HUKm4ib0cGR9Kqw82HbLdhK5UNVbrupTgQtD5k2p3+3ZjPyMNgEO30AVyKf6p/vNvys5ZmD+Umm/V51f+U8PuVJyGwN6+g0IVPEXcvmzntimVZzyWDgX2RzKrMzQLm/53JqvoFNN0Iu5pPXVTXjAIB1gjQXOSTX/Fc4t3mXDhse1pOaw1rHlWuy5hErSwd8Rfoe12FWC4sLDkalcMObfCujBxtXge+LAuCqEt5pcF0lJeQ+OnyXYhLuM8YmyP9Qumzd3gYSb1Ioe4Qt1vsoufjUIqmn6YhzkM8YT/CsuqP6EHEx3YQS0MRYZYlXNzj6UbdFTuurIC2vbFdqESB+geJLvlkOdSDq2a7PnLSVrBa0TqYPJpaFGrxhYq8zviGDbL54to1+SFXB4gGEzdaRLOG3ItfzZg3xIyGnOT8iYz2yedsjf9Sx89OHo7p4yfgeyFm3fjje9l9Z3hdMoSgrqpAdenHwq4V8o9scyW7KHXbsmCrkDXGvWwPBnu4sLeMN9EFLREMGvHxiSKnQ8+fhpJUe/gUfqXOyjBdnCD5V93f34+I0ARJcha+vVibj6me/bXe97uBmfYerJrPK6/RbsSz4Uiu939L+XQJI+RSGwcNZtSuo5DAlm3pJ4PQuKw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SG2PR06MB5430.apcprd06.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(376002)(366004)(346002)(396003)(136003)(39860400002)(451199021)(186006)(1800799003)(83380400001)(84970400001)(31686004)(2616005)(110136005)(4326008)(38100700002)(2906002)(5660300002)(316002)(235185007)(8676002)(8936002)(66946007)(66556008)(66476007)(6512007)(86362001)(478600001)(31696002)(82960400001)(6666004)(33964004)(6486002)(41300700001)(36756003)(6506007)(26005)(53546011)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ck1hSGtyUVZNaWU1REgyUUNDNFhOYTZ4NmpWdHRERHV5SUZCRkVmZHlMRVJU?= =?utf-8?B?TGFRMUcrWHphUGp3V3IyNTIyZmlNUUk1UmZyczJtczlGMThkNVgrbnBnczJv?= =?utf-8?B?WmFIV0Y4aEQ0bUk5U1dielphQThoK1VDL2RQQmdPYnkyYXJ6NGFNeHhRUVNY?= =?utf-8?B?Y0xvRFZ2Y2trWkhwSWNSRTcyS0FVNUFsaFpXTW83SXlQZWdzRDZwa1M5a0FG?= =?utf-8?B?N2hMYVM1UWlwdXI1ZW8xM3hIZzFoeU9iVnh1UTRwSDh3UnZDQk05d2dSdzRE?= =?utf-8?B?bUpPckQza2EwSm1kSlMxRnhRTTZ6a2MyOHo1NFdTZk8vN1lIVFRFRHZXckhk?= =?utf-8?B?K056QU5INEY4WEFvNjZ4L3UzTjNIK0dTb0xRVWkzSkRPL012Mjl1YlNYRHN2?= =?utf-8?B?MFlDRTkzR2ptWSs4K1NQMG81NlFCdGl3RnlEY2o0dStudXMrTFh3cWl6QVZB?= =?utf-8?B?N1NrSVpUQ0tjbTgvNlMybG0zMGpkOCtuSXdMYTJBS3NjanJmOGtoalRPRTU0?= =?utf-8?B?K2E1RG5ySDMrUlhKWDhyQVZGUTQxUFJzMjl6eENHNVFwSmlBT3ZhNFFNUytu?= =?utf-8?B?SWZvU0lHbFlWT0xVSkhRcTJ5UmF1QmhDZTBmK1Q0K0lOZm02SzhmWDRPM0Ur?= =?utf-8?B?elRWb3Y1UUprdThvTDFqR09yUEllTTB4dkdkdE02MWQvSWFLZnNrTFFjaXFw?= =?utf-8?B?WW5xUkU0R3psM0tzWXlhWDlQajFCQ1BtR3ZHWldJcHhyMU9nSzA3ekVqTklC?= =?utf-8?B?bmlIZXBLRHdCSUdrbURYSVB3V25RMlJGcUM0R3hXWjVmTVRhOGNvc2cxNitS?= =?utf-8?B?cTNkSmVHMUdSaUJPcTVTdlVvMGxNMFJnTXNjQlkxWVZMT1NhUnNEZVRZODdI?= =?utf-8?B?WG5LMVNZcU40cnR0WFJIZUE0MGNXdmUxeHNnTDIwMDVUQkpoV2JWT3hSLzBC?= =?utf-8?B?WVpRQm9VMjhRQ2N2bWNPaVpkbURRaUpjUGJ4amM4UlZmK2d1QVRVYlNDSDBU?= =?utf-8?B?YUI3TEF6QjFwM00vaE8vM2pJMkc5U1JUSVRNdGRGZWlQNnNNYWljTUxZSlJE?= =?utf-8?B?aU93T1hVWjh5SW02cksvY1ZaKy9TcGR6cjVyKy80N1htbGczbTVYOFhQR2My?= =?utf-8?B?MXNOajBueURlQ05uaUdqRnZqb0xPUTJ0VHl4bk1WZ053bzlzRTl1aVFyWUFJ?= =?utf-8?B?R0YzR0EwSzdWQjZycllRSmxPN3gxYjdMWGovRW5WbTIzQndlRk9lUytNWG1s?= =?utf-8?B?eDROYlliWjAybzhZM2ZpSUdlWjNlYXlJZHJoZ0Y2U2EweEU0Z2VmMTlISS91?= =?utf-8?B?YkR4S3V2Z2ZPYU9Kak1mYjNYeVk1am8rVThJRlg2Z29uek1PV1VETG8xaUJn?= =?utf-8?B?OUV6ZXZCSW5lTWJ4Rmh4b3pSVUZxZzVIRGsxU1Q5bGlzR1hJQ2Y0REpwQzd0?= =?utf-8?B?MmFXK3VHckNTbWlWZlk2b1BVWmZIcEV3ZDF0d1dnYW53ejJra3IzaGVsMG5s?= =?utf-8?B?eXkrVjBTeEJxVmpvazd4NmVscW11YmFIWkkvNWdlUUFnOXlJc2E0RDdMeXZN?= =?utf-8?B?Wkp2NmxjcXZEOEpWNVluUktBSjB2VHR2ejk4MEFjSktreUV4RnRIcktucVRO?= =?utf-8?B?cDM5U3dqckJERFRXRXhxQnIzZWh5UVlHZHNjOXAyRXUxTFZqTDMyQlRpaDRs?= =?utf-8?B?RkxLeGIzVnI0aEViR1Z2YUthbUNUc0k2MTdKblJnNG1RZjMwd0YxM2VDVitN?= =?utf-8?B?S3VncmhZMStDWHBhNEE2aXYya0poRVhZMmNOMktxcGxOUDZzbEw0RmtjOFhl?= =?utf-8?B?VHNZYlZ0WXNKVnNlZWUzQmMyMzZKdzVYSlIybmxWaWdidTFvUDJwOXR2RVk0?= =?utf-8?B?Szh0Tm9qQktyK1ZsRmdPR0F2MkpoQXlMZnlZZXBJdjY1NnlURUZOb01WZVJl?= =?utf-8?B?Q3JHcGdXOGVtSThjektaZEl2YjRjVm5wQlhkL2VVQlNCSCtRdXRPRGRnckIv?= =?utf-8?B?SVM2Uk1QM3U0NUhEb1k5L0FJeFNLQkpJeWpwOThsQmM3ZURPcGRUYXJodDJs?= =?utf-8?B?THJLdGxsa21qZmgweEJQZWszb1p6bUxBcjMwK2M4dWEwYXVESXhtY0tzZmV1?= =?utf-8?B?YTlzTytBOWxydmJoQ1RUZzE1RFAwTndSQW1kTVZrcWE1eDVBZ3ZwVzJUTG9t?= =?utf-8?B?UVE9PQ==?= X-OriginatorOrg: siemens.com X-MS-Exchange-CrossTenant-Network-Message-Id: 778f2ac1-650c-454b-6eda-08db974e6267 X-MS-Exchange-CrossTenant-AuthSource: SG2PR06MB5430.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Aug 2023 13:58:32.0142 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 38ae3bcd-9579-4fd4-adda-b42e1495d55a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: bTsno343FzOcWU5uvB2SG4yiaDEq9lyc6F2fGw6LxIqAhB3tqrXJR7sEnVHM0ywOMrt7lzPL3q26jOJXSmLvEpzn5dcpQGCi4mw/faLfw+U= X-MS-Exchange-Transport-CrossTenantHeadersStamped: KL1PR0601MB4049 X-Spam-Status: No, score=-10.1 required=5.0 tests=BAYES_00,DKIMWL_WL_MED,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FORGED_SPF_HELO,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --------------zx7P28bx3js3YBDFQ757ciaI Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Hi Thomas, Tobias, here's the updated v2 of the readonly modifier front-end patch. On 2023/7/20 11:08 PM, Tobias Burnus wrote: >>> +++ b/gcc/c/c-parser.cc >>> @@ -14059,7 +14059,8 @@ c_parser_omp_variable_list (c_parser *parser, >>> >>> static tree >>> c_parser_omp_var_list_parens (c_parser *parser, enum omp_clause_code kind, >>> - tree list, bool allow_deref = false) >>> + tree list, bool allow_deref = false, >>> + bool *readonly = NULL) >>> ... >> Instead of doing this in 'c_parser_omp_var_list_parens', I think it's >> clearer to have this special 'readonly :' parsing logic in the two places >> where it's used. > I concur. The same issue also occurred for OpenMP's > c_parser_omp_clause_to, and c_parser_omp_clause_from and the 'present' > modifier. For it, I created a combined function but the main reason for > that is that OpenMP also permits more modifiers (like 'iterators'), > which would cause more duplication of code ('iterator' is not yet > supported). > > For something as simple to parse as this modifier, I would just do it at > the two places – as Thomas suggested. Okay, I've changed the C/C++ parser parts to have the parsing logic directly added. >>> +++ b/gcc/fortran/gfortran.h >>> @@ -1360,7 +1360,11 @@ typedef struct gfc_omp_namelist >>> { >>> gfc_omp_reduction_op reduction_op; >>> gfc_omp_depend_doacross_op depend_doacross_op; >>> - gfc_omp_map_op map_op; >>> + struct >>> + { >>> + ENUM_BITFIELD (gfc_omp_map_op) map_op:8; >>> + bool readonly; >>> + }; >>> gfc_expr *align; >>> struct >>> { >> [...] Thus, the above looks good to me. > I concur but I wonder whether it would be cleaner to name the struct; > this makes it also more obvious what belongs together in the union. > > Namely, naming the struct 'map' and then changing the 45 users from > 'u.map_op' to 'u.map.op' and the new 'u.readonly' to 'u.map.readonly'. – > this seems to be cleaner. I've adjusted 'u.map' to be a named struct now, and updated the references. >> + if (gfc_match ("readonly :") == MATCH_YES) >> I note this one does not have a space after ':' in 'gfc_match', but the >> one above in 'gfc_match_omp_clauses' does. I don't know off-hand if that >> makes a difference in parsing -- probably not, as all of >> 'gcc/fortran/openmp.cc' generally doesn't seem to be very consistent >> about these two variants? > It *does* make a difference. And for obvious reasons. You don't want to permit: > > !$acc kernels asnyccopy(a) > > but require at least one space (or comma) between "async" and "copy".. > (In fixed form Fortran, it would be fine - as would be "!$acc k e nelsasy nc co p y(a)".) > > A " " matches zero or more whitespaces, but with gfc_match_space you can find out > whether there was whitespace or not. Okay, made sure both are 'gfc_match ("readonly : ")'. Thanks for catching that, didn't realize that space was significant. >>> +++ b/gcc/tree.h >>> @@ -1813,6 +1813,14 @@ class auto_suppress_location_wrappers >>> #define OMP_CLAUSE_MAP_DECL_MAKE_ADDRESSABLE(NODE) \ >>> (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_MAP)->base.addressable_flag) >>> >>> +/* Nonzero if OpenACC 'readonly' modifier set, used for 'copyin'. */ >>> +#define OMP_CLAUSE_MAP_READONLY(NODE) \ >>> + TREE_READONLY (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_MAP)) >>> + >>> +/* Same as above, for use in OpenACC cache directives. */ >>> +#define OMP_CLAUSE__CACHE__READONLY(NODE) \ >>> + TREE_READONLY (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE__CACHE_)) >> I'm not sure if these special accessor functions are actually useful, or >> we should just directly use 'TREE_READONLY' instead? We're only using >> them in contexts where it's clear that the 'OMP_CLAUSE_SUBCODE_CHECK' is >> satisfied, for example. > I find directly using TREE_READONLY confusing. FWIW, I've changed to use TREE_NOTHROW instead, if it can give a better sense of safety :P I think there's a misunderstanding here anyways: we are not relying on a DECL marked TREE_READONLY here. We merely need the OMP_CLAUSE_MAP to be marked as OMP_CLAUSE_MAP_READONLY == 1. The other points-to patch then (also in front-ends) take the OMP_CLAUSE_MAP_READONLY to mark the clauses of "base-pointers of array-sections" as OMP_CLAUSE_MAP_POINTS_TO_READONLY, and later this gradually gets relayed to alias oracle routines in tree-ssa-alias.cc Re-tested this v2 patch on powerpc64le-linux/nvptx. Okay for trunk? Thanks, Chung-Lin 2023-08-07 Chung-Lin Tang gcc/c/ChangeLog: * c-parser.cc (c_parser_oacc_data_clause): Add parsing support for 'readonly' modifier, set OMP_CLAUSE_MAP_READONLY if readonly modifier found, update comments. (c_parser_oacc_cache): Add parsing support for 'readonly' modifier, set OMP_CLAUSE__CACHE__READONLY if readonly modifier found, update comments. gcc/cp/ChangeLog: * parser.cc (cp_parser_oacc_data_clause): Add parsing support for 'readonly' modifier, set OMP_CLAUSE_MAP_READONLY if readonly modifier found, update comments. (cp_parser_oacc_cache): Add parsing support for 'readonly' modifier, set OMP_CLAUSE__CACHE__READONLY if readonly modifier found, update comments. gcc/fortran/ChangeLog: * dump-parse-tree.cc (show_omp_namelist): Print "readonly," for OMP_LIST_MAP and OMP_LIST_CACHE if n->u.map.readonly is set. Adjust 'n->u.map_op' to 'n->u.map.op'. * gfortran.h (typedef struct gfc_omp_namelist): Adjust map_op as 'ENUM_BITFIELD (gfc_omp_map_op) op:8', add 'bool readonly' field, change to named struct field 'map'. * openmp.cc (gfc_match_omp_map_clause): Add 'bool readonly = false' parameter, set n->u.map.readonly field. Adjust 'n->u.map_op' to 'n->u.map.op'. (gfc_match_omp_clause_reduction): Adjust 'n->u.map_op' to 'n->u.map.op'. (gfc_match_omp_clauses): Add readonly modifier parsing for OpenACC copyin clause, adjust call to gfc_match_omp_map_clause. Adjust 'n->u.map_op' to 'n->u.map.op'. (gfc_match_oacc_declare): Adjust 'n->u.map_op' to 'n->u.map.op'. (gfc_match_oacc_cache): Add readonly modifier parsing for OpenACC cache directive. (resolve_omp_clauses): Adjust 'n->u.map_op' to 'n->u.map.op'. * trans-decl.cc (add_clause): Adjust 'n->u.map_op' to 'n->u.map.op'. (finish_oacc_declare): Likewise. * trans-openmp.cc (gfc_trans_omp_clauses): Set OMP_CLAUSE_MAP_READONLY, OMP_CLAUSE__CACHE__READONLY to 1 when readonly is set. Adjust 'n->u.map_op' to 'n->u.map.op'. (gfc_add_clause_implicitly): Adjust 'n->u.map_op' to 'n->u.map.op'. gcc/ChangeLog: * tree-pretty-print.cc (dump_omp_clause): Add support for printing OMP_CLAUSE_MAP_READONLY and OMP_CLAUSE__CACHE__READONLY. * tree.h (OMP_CLAUSE_MAP_READONLY): New macro. (OMP_CLAUSE__CACHE__READONLY): New macro. gcc/testsuite/ChangeLog: * c-c++-common/goacc/readonly-1.c: New test. * gfortran.dg/goacc/readonly-1.f90: New test. --------------zx7P28bx3js3YBDFQ757ciaI Content-Type: text/plain; charset=UTF-8; name="readonly-fe-v2.patch" Content-Disposition: attachment; filename="readonly-fe-v2.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9jL2MtcGFyc2VyLmNjIGIvZ2NjL2MvYy1wYXJzZXIuY2MKaW5kZXgg MjRhNmViNmU0NTkuLjU3NzlmNDk5YWUxIDEwMDY0NAotLS0gYS9nY2MvYy9jLXBhcnNlci5jYwor KysgYi9nY2MvYy9jLXBhcnNlci5jYwpAQCAtMTQwODQsNyArMTQwODQsMTEgQEAgY19wYXJzZXJf b21wX3Zhcl9saXN0X3BhcmVucyAoY19wYXJzZXIgKnBhcnNlciwgZW51bSBvbXBfY2xhdXNlX2Nv ZGUga2luZCwKICAgIE9wZW5BQ0MgMi42OgogICAgbm9fY3JlYXRlICggdmFyaWFibGUtbGlzdCAp CiAgICBhdHRhY2ggKCB2YXJpYWJsZS1saXN0ICkKLSAgIGRldGFjaCAoIHZhcmlhYmxlLWxpc3Qg KSAqLworICAgZGV0YWNoICggdmFyaWFibGUtbGlzdCApCisKKyAgIE9wZW5BQ0MgMi43OgorICAg Y29weWluIChyZWFkb25seSA6IHZhcmlhYmxlLWxpc3QgKQorICovCiAKIHN0YXRpYyB0cmVlCiBj X3BhcnNlcl9vYWNjX2RhdGFfY2xhdXNlIChjX3BhcnNlciAqcGFyc2VyLCBwcmFnbWFfb21wX2Ns YXVzZSBjX2tpbmQsCkBAIC0xNDEzNSwxMSArMTQxMzksMzYgQEAgY19wYXJzZXJfb2FjY19kYXRh X2NsYXVzZSAoY19wYXJzZXIgKnBhcnNlciwgcHJhZ21hX29tcF9jbGF1c2UgY19raW5kLAogICAg IGRlZmF1bHQ6CiAgICAgICBnY2NfdW5yZWFjaGFibGUgKCk7CiAgICAgfQotICB0cmVlIG5sLCBj OwotICBubCA9IGNfcGFyc2VyX29tcF92YXJfbGlzdF9wYXJlbnMgKHBhcnNlciwgT01QX0NMQVVT RV9NQVAsIGxpc3QsIHRydWUpOwogCi0gIGZvciAoYyA9IG5sOyBjICE9IGxpc3Q7IGMgPSBPTVBf Q0xBVVNFX0NIQUlOIChjKSkKLSAgICBPTVBfQ0xBVVNFX1NFVF9NQVBfS0lORCAoYywga2luZCk7 CisgIHRyZWUgbmwgPSBsaXN0OworICBib29sIHJlYWRvbmx5ID0gZmFsc2U7CisgIG1hdGNoaW5n X3BhcmVucyBwYXJlbnM7CisgIGlmIChwYXJlbnMucmVxdWlyZV9vcGVuIChwYXJzZXIpKQorICAg IHsKKyAgICAgIC8qIFR1cm4gb24gcmVhZG9ubHkgbW9kaWZpZXIgcGFyc2luZyBmb3IgY29weWlu IGNsYXVzZS4gICovCisgICAgICBpZiAoY19raW5kID09IFBSQUdNQV9PQUNDX0NMQVVTRV9DT1BZ SU4pCisJeworCSAgY190b2tlbiAqdG9rZW4gPSBjX3BhcnNlcl9wZWVrX3Rva2VuIChwYXJzZXIp OworCSAgaWYgKHRva2VuLT50eXBlID09IENQUF9OQU1FCisJICAgICAgJiYgIXN0cmNtcCAoSURF TlRJRklFUl9QT0lOVEVSICh0b2tlbi0+dmFsdWUpLCAicmVhZG9ubHkiKQorCSAgICAgICYmIGNf cGFyc2VyX3BlZWtfMm5kX3Rva2VuIChwYXJzZXIpLT50eXBlID09IENQUF9DT0xPTikKKwkgICAg eworCSAgICAgIGNfcGFyc2VyX2NvbnN1bWVfdG9rZW4gKHBhcnNlcik7CisJICAgICAgY19wYXJz ZXJfY29uc3VtZV90b2tlbiAocGFyc2VyKTsKKwkgICAgICByZWFkb25seSA9IHRydWU7CisJICAg IH0KKwl9CisgICAgICBsb2NhdGlvbl90IGxvYyA9IGNfcGFyc2VyX3BlZWtfdG9rZW4gKHBhcnNl ciktPmxvY2F0aW9uOworICAgICAgbmwgPSBjX3BhcnNlcl9vbXBfdmFyaWFibGVfbGlzdCAocGFy c2VyLCBsb2MsIE9NUF9DTEFVU0VfTUFQLCBsaXN0LCB0cnVlKTsKKyAgICAgIHBhcmVucy5za2lw X3VudGlsX2ZvdW5kX2Nsb3NlIChwYXJzZXIpOworICAgIH0KKworICBmb3IgKHRyZWUgYyA9IG5s OyBjICE9IGxpc3Q7IGMgPSBPTVBfQ0xBVVNFX0NIQUlOIChjKSkKKyAgICB7CisgICAgICBPTVBf Q0xBVVNFX1NFVF9NQVBfS0lORCAoYywga2luZCk7CisgICAgICBpZiAocmVhZG9ubHkpCisJT01Q X0NMQVVTRV9NQVBfUkVBRE9OTFkgKGMpID0gMTsKKyAgICB9CiAKICAgcmV0dXJuIG5sOwogfQpA QCAtMTgxNjEsMTUgKzE4MTkwLDQwIEBAIGNfcGFyc2VyX29tcF9zdHJ1Y3R1cmVkX2Jsb2NrIChj X3BhcnNlciAqcGFyc2VyLCBib29sICppZl9wKQogLyogT3BlbkFDQyAyLjA6CiAgICAjIHByYWdt YSBhY2MgY2FjaGUgKHZhcmlhYmxlLWxpc3QpIG5ldy1saW5lCiAKKyAgIE9wZW5BQ0MgMi43Ogor ICAgIyBwcmFnbWEgYWNjIGNhY2hlIChyZWFkb25seTogdmFyaWFibGUtbGlzdCkgbmV3LWxpbmUK KwogICAgTE9DIGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUgI3ByYWdtYSB0b2tlbi4KICovCiAKIHN0 YXRpYyB0cmVlCiBjX3BhcnNlcl9vYWNjX2NhY2hlIChsb2NhdGlvbl90IGxvYywgY19wYXJzZXIg KnBhcnNlcikKIHsKLSAgdHJlZSBzdG10LCBjbGF1c2VzOworICB0cmVlIHN0bXQsIGNsYXVzZXMg PSBOVUxMX1RSRUU7CisgIGJvb2wgcmVhZG9ubHkgPSBmYWxzZTsKKyAgbWF0Y2hpbmdfcGFyZW5z IHBhcmVuczsKKworICBpZiAocGFyZW5zLnJlcXVpcmVfb3BlbiAocGFyc2VyKSkKKyAgICB7Cisg ICAgICBjX3Rva2VuICp0b2tlbiA9IGNfcGFyc2VyX3BlZWtfdG9rZW4gKHBhcnNlcik7CisgICAg ICBpZiAodG9rZW4tPnR5cGUgPT0gQ1BQX05BTUUKKwkgICYmICFzdHJjbXAgKElERU5USUZJRVJf UE9JTlRFUiAodG9rZW4tPnZhbHVlKSwgInJlYWRvbmx5IikKKwkgICYmIGNfcGFyc2VyX3BlZWtf Mm5kX3Rva2VuIChwYXJzZXIpLT50eXBlID09IENQUF9DT0xPTikKKwl7CisJICBjX3BhcnNlcl9j b25zdW1lX3Rva2VuIChwYXJzZXIpOworCSAgY19wYXJzZXJfY29uc3VtZV90b2tlbiAocGFyc2Vy KTsKKwkgIHJlYWRvbmx5ID0gdHJ1ZTsKKwl9CisgICAgICBsb2NhdGlvbl90IGxvYyA9IGNfcGFy c2VyX3BlZWtfdG9rZW4gKHBhcnNlciktPmxvY2F0aW9uOworICAgICAgY2xhdXNlcyA9IGNfcGFy c2VyX29tcF92YXJpYWJsZV9saXN0IChwYXJzZXIsIGxvYywgT01QX0NMQVVTRV9fQ0FDSEVfLAor CQkJCQkgICAgTlVMTF9UUkVFKTsKKyAgICAgIHBhcmVucy5za2lwX3VudGlsX2ZvdW5kX2Nsb3Nl IChwYXJzZXIpOworICAgIH0KKworICBpZiAocmVhZG9ubHkpCisgICAgZm9yICh0cmVlIGMgPSBj bGF1c2VzOyBjOyBjID0gT01QX0NMQVVTRV9DSEFJTiAoYykpCisgICAgICBPTVBfQ0xBVVNFX19D QUNIRV9fUkVBRE9OTFkgKGMpID0gMTsKIAotICBjbGF1c2VzID0gY19wYXJzZXJfb21wX3Zhcl9s aXN0X3BhcmVucyAocGFyc2VyLCBPTVBfQ0xBVVNFX19DQUNIRV8sIE5VTEwpOwogICBjbGF1c2Vz ID0gY19maW5pc2hfb21wX2NsYXVzZXMgKGNsYXVzZXMsIENfT1JUX0FDQyk7CiAKICAgY19wYXJz ZXJfc2tpcF90b19wcmFnbWFfZW9sIChwYXJzZXIpOwpkaWZmIC0tZ2l0IGEvZ2NjL2NwL3BhcnNl ci5jYyBiL2djYy9jcC9wYXJzZXIuY2MKaW5kZXggZDdlZjViMzRkNDIuLmFjOGE2NTY4NzRhIDEw MDY0NAotLS0gYS9nY2MvY3AvcGFyc2VyLmNjCisrKyBiL2djYy9jcC9wYXJzZXIuY2MKQEAgLTM3 NzUwLDcgKzM3NzUwLDExIEBAIGNwX3BhcnNlcl9vbXBfdmFyX2xpc3QgKGNwX3BhcnNlciAqcGFy c2VyLCBlbnVtIG9tcF9jbGF1c2VfY29kZSBraW5kLCB0cmVlIGxpc3QsCiAgICBPcGVuQUNDIDIu NjoKICAgIG5vX2NyZWF0ZSAoIHZhcmlhYmxlLWxpc3QgKQogICAgYXR0YWNoICggdmFyaWFibGUt bGlzdCApCi0gICBkZXRhY2ggKCB2YXJpYWJsZS1saXN0ICkgKi8KKyAgIGRldGFjaCAoIHZhcmlh YmxlLWxpc3QgKQorCisgICBPcGVuQUNDIDIuNzoKKyAgIGNvcHlpbiAocmVhZG9ubHkgOiB2YXJp YWJsZS1saXN0ICkKKyAqLwogCiBzdGF0aWMgdHJlZQogY3BfcGFyc2VyX29hY2NfZGF0YV9jbGF1 c2UgKGNwX3BhcnNlciAqcGFyc2VyLCBwcmFnbWFfb21wX2NsYXVzZSBjX2tpbmQsCkBAIC0zNzgw MSwxMSArMzc4MDUsMzMgQEAgY3BfcGFyc2VyX29hY2NfZGF0YV9jbGF1c2UgKGNwX3BhcnNlciAq cGFyc2VyLCBwcmFnbWFfb21wX2NsYXVzZSBjX2tpbmQsCiAgICAgZGVmYXVsdDoKICAgICAgIGdj Y191bnJlYWNoYWJsZSAoKTsKICAgICB9Ci0gIHRyZWUgbmwsIGM7Ci0gIG5sID0gY3BfcGFyc2Vy X29tcF92YXJfbGlzdCAocGFyc2VyLCBPTVBfQ0xBVVNFX01BUCwgbGlzdCwgdHJ1ZSk7CisgIHRy ZWUgbmwgPSBsaXN0OworICBib29sIHJlYWRvbmx5ID0gZmFsc2U7CisgIGlmIChjcF9wYXJzZXJf cmVxdWlyZSAocGFyc2VyLCBDUFBfT1BFTl9QQVJFTiwgUlRfT1BFTl9QQVJFTikpCisgICAgewor ICAgICAgLyogVHVybiBvbiByZWFkb25seSBtb2RpZmllciBwYXJzaW5nIGZvciBjb3B5aW4gY2xh dXNlLiAgKi8KKyAgICAgIGlmIChjX2tpbmQgPT0gUFJBR01BX09BQ0NfQ0xBVVNFX0NPUFlJTikK Kwl7CisJICBjcF90b2tlbiAqdG9rZW4gPSBjcF9sZXhlcl9wZWVrX3Rva2VuIChwYXJzZXItPmxl eGVyKTsKKwkgIGlmICh0b2tlbi0+dHlwZSA9PSBDUFBfTkFNRQorCSAgICAgICYmICFzdHJjbXAg KElERU5USUZJRVJfUE9JTlRFUiAodG9rZW4tPnUudmFsdWUpLCAicmVhZG9ubHkiKQorCSAgICAg ICYmIGNwX2xleGVyX3BlZWtfbnRoX3Rva2VuIChwYXJzZXItPmxleGVyLCAyKS0+dHlwZSA9PSBD UFBfQ09MT04pCisJICAgIHsKKwkgICAgICBjcF9sZXhlcl9jb25zdW1lX3Rva2VuIChwYXJzZXIt PmxleGVyKTsKKwkgICAgICBjcF9sZXhlcl9jb25zdW1lX3Rva2VuIChwYXJzZXItPmxleGVyKTsK KwkgICAgICByZWFkb25seSA9IHRydWU7CisJICAgIH0KKwl9CisgICAgICBubCA9IGNwX3BhcnNl cl9vbXBfdmFyX2xpc3Rfbm9fb3BlbiAocGFyc2VyLCBPTVBfQ0xBVVNFX01BUCwgbGlzdCwgTlVM TCwKKwkJCQkJICAgdHJ1ZSk7CisgICAgfQogCi0gIGZvciAoYyA9IG5sOyBjICE9IGxpc3Q7IGMg PSBPTVBfQ0xBVVNFX0NIQUlOIChjKSkKLSAgICBPTVBfQ0xBVVNFX1NFVF9NQVBfS0lORCAoYywg a2luZCk7CisgIGZvciAodHJlZSBjID0gbmw7IGMgIT0gbGlzdDsgYyA9IE9NUF9DTEFVU0VfQ0hB SU4gKGMpKQorICAgIHsKKyAgICAgIE9NUF9DTEFVU0VfU0VUX01BUF9LSU5EIChjLCBraW5kKTsK KyAgICAgIGlmIChyZWFkb25seSkKKwlPTVBfQ0xBVVNFX01BUF9SRUFET05MWSAoYykgPSAxOwor ICAgIH0KIAogICByZXR1cm4gbmw7CiB9CkBAIC00NTgyNSw2ICs0NTg1MSw5IEBAIGNwX3BhcnNl cl9vbXBfdGFyZ2V0IChjcF9wYXJzZXIgKnBhcnNlciwgY3BfdG9rZW4gKnByYWdtYV90b2ssCiAK IC8qIE9wZW5BQ0MgMi4wOgogICAgIyBwcmFnbWEgYWNjIGNhY2hlICh2YXJpYWJsZS1saXN0KSBu ZXctbGluZQorCisgICBPcGVuQUNDIDIuNzoKKyAgICMgcHJhZ21hIGFjYyBjYWNoZSAocmVhZG9u bHk6IHZhcmlhYmxlLWxpc3QpIG5ldy1saW5lCiAqLwogCiBzdGF0aWMgdHJlZQpAQCAtNDU4MzQs OSArNDU4NjMsMjggQEAgY3BfcGFyc2VyX29hY2NfY2FjaGUgKGNwX3BhcnNlciAqcGFyc2VyLCBj cF90b2tlbiAqcHJhZ21hX3RvaykKICAgICAgY2xhdXNlcy4gICovCiAgIGF1dG9fc3VwcHJlc3Nf bG9jYXRpb25fd3JhcHBlcnMgc2VudGluZWw7CiAKLSAgdHJlZSBzdG10LCBjbGF1c2VzOworICB0 cmVlIHN0bXQsIGNsYXVzZXMgPSBOVUxMX1RSRUU7CisgIGJvb2wgcmVhZG9ubHkgPSBmYWxzZTsK KworICBpZiAoY3BfcGFyc2VyX3JlcXVpcmUgKHBhcnNlciwgQ1BQX09QRU5fUEFSRU4sIFJUX09Q RU5fUEFSRU4pKQorICAgIHsKKyAgICAgIGNwX3Rva2VuICp0b2tlbiA9IGNwX2xleGVyX3BlZWtf dG9rZW4gKHBhcnNlci0+bGV4ZXIpOworICAgICAgaWYgKHRva2VuLT50eXBlID09IENQUF9OQU1F CisJICAmJiAhc3RyY21wIChJREVOVElGSUVSX1BPSU5URVIgKHRva2VuLT51LnZhbHVlKSwgInJl YWRvbmx5IikKKwkgICYmIGNwX2xleGVyX3BlZWtfbnRoX3Rva2VuIChwYXJzZXItPmxleGVyLCAy KS0+dHlwZSA9PSBDUFBfQ09MT04pCisJeworCSAgY3BfbGV4ZXJfY29uc3VtZV90b2tlbiAocGFy c2VyLT5sZXhlcik7CisJICBjcF9sZXhlcl9jb25zdW1lX3Rva2VuIChwYXJzZXItPmxleGVyKTsK KwkgIHJlYWRvbmx5ID0gdHJ1ZTsKKwl9CisgICAgICBjbGF1c2VzID0gY3BfcGFyc2VyX29tcF92 YXJfbGlzdF9ub19vcGVuIChwYXJzZXIsIE9NUF9DTEFVU0VfX0NBQ0hFXywKKwkJCQkJCU5VTEws IE5VTEwpOworICAgIH0KKworICBpZiAocmVhZG9ubHkpCisgICAgZm9yICh0cmVlIGMgPSBjbGF1 c2VzOyBjOyBjID0gT01QX0NMQVVTRV9DSEFJTiAoYykpCisgICAgICBPTVBfQ0xBVVNFX19DQUNI RV9fUkVBRE9OTFkgKGMpID0gMTsKIAotICBjbGF1c2VzID0gY3BfcGFyc2VyX29tcF92YXJfbGlz dCAocGFyc2VyLCBPTVBfQ0xBVVNFX19DQUNIRV8sIE5VTExfVFJFRSk7CiAgIGNsYXVzZXMgPSBm aW5pc2hfb21wX2NsYXVzZXMgKGNsYXVzZXMsIENfT1JUX0FDQyk7CiAKICAgY3BfcGFyc2VyX3Jl cXVpcmVfcHJhZ21hX2VvbCAocGFyc2VyLCBjcF9sZXhlcl9wZWVrX3Rva2VuIChwYXJzZXItPmxl eGVyKSk7CmRpZmYgLS1naXQgYS9nY2MvZm9ydHJhbi9kdW1wLXBhcnNlLXRyZWUuY2MgYi9nY2Mv Zm9ydHJhbi9kdW1wLXBhcnNlLXRyZWUuY2MKaW5kZXggNjgxMjJlM2U2ZmQuLjBlODg4ZmFmZTdi IDEwMDY0NAotLS0gYS9nY2MvZm9ydHJhbi9kdW1wLXBhcnNlLXRyZWUuY2MKKysrIGIvZ2NjL2Zv cnRyYW4vZHVtcC1wYXJzZS10cmVlLmNjCkBAIC0xMzk4LDYgKzEzOTgsOSBAQCBzaG93X29tcF9u YW1lbGlzdCAoaW50IGxpc3RfdHlwZSwgZ2ZjX29tcF9uYW1lbGlzdCAqbikKIAkgICAgZnB1dHMg KCIpIEFMTE9DQVRFKCIsIGR1bXBmaWxlKTsKIAkgIGNvbnRpbnVlOwogCX0KKyAgICAgIGlmICgo bGlzdF90eXBlID09IE9NUF9MSVNUX01BUCB8fCBsaXN0X3R5cGUgPT0gT01QX0xJU1RfQ0FDSEUp CisJICAmJiBuLT51Lm1hcC5yZWFkb25seSkKKwlmcHV0cyAoInJlYWRvbmx5LCIsIGR1bXBmaWxl KTsKICAgICAgIGlmIChsaXN0X3R5cGUgPT0gT01QX0xJU1RfUkVEVUNUSU9OKQogCXN3aXRjaCAo bi0+dS5yZWR1Y3Rpb25fb3ApCiAJICB7CkBAIC0xNDY1LDcgKzE0NjgsNyBAQCBzaG93X29tcF9u YW1lbGlzdCAoaW50IGxpc3RfdHlwZSwgZ2ZjX29tcF9uYW1lbGlzdCAqbikKIAkgIGRlZmF1bHQ6 IGJyZWFrOwogCSAgfQogICAgICAgZWxzZSBpZiAobGlzdF90eXBlID09IE9NUF9MSVNUX01BUCkK LQlzd2l0Y2ggKG4tPnUubWFwX29wKQorCXN3aXRjaCAobi0+dS5tYXAub3ApCiAJICB7CiAJICBj YXNlIE9NUF9NQVBfQUxMT0M6IGZwdXRzICgiYWxsb2M6IiwgZHVtcGZpbGUpOyBicmVhazsKIAkg IGNhc2UgT01QX01BUF9UTzogZnB1dHMgKCJ0bzoiLCBkdW1wZmlsZSk7IGJyZWFrOwpkaWZmIC0t Z2l0IGEvZ2NjL2ZvcnRyYW4vZ2ZvcnRyYW4uaCBiL2djYy9mb3J0cmFuL2dmb3J0cmFuLmgKaW5k ZXggOWEwMGU2ZGVhNmYuLmE4NjY3YTZlNmQzIDEwMDY0NAotLS0gYS9nY2MvZm9ydHJhbi9nZm9y dHJhbi5oCisrKyBiL2djYy9mb3J0cmFuL2dmb3J0cmFuLmgKQEAgLTEzNjAsNyArMTM2MCwxMSBA QCB0eXBlZGVmIHN0cnVjdCBnZmNfb21wX25hbWVsaXN0CiAgICAgewogICAgICAgZ2ZjX29tcF9y ZWR1Y3Rpb25fb3AgcmVkdWN0aW9uX29wOwogICAgICAgZ2ZjX29tcF9kZXBlbmRfZG9hY3Jvc3Nf b3AgZGVwZW5kX2RvYWNyb3NzX29wOwotICAgICAgZ2ZjX29tcF9tYXBfb3AgbWFwX29wOworICAg ICAgc3RydWN0CisgICAgICAgIHsKKwkgIEVOVU1fQklURklFTEQgKGdmY19vbXBfbWFwX29wKSBv cDo4OworCSAgYm9vbCByZWFkb25seTsKKyAgICAgICAgfSBtYXA7CiAgICAgICBnZmNfZXhwciAq YWxpZ247CiAgICAgICBzdHJ1Y3QKIAl7CmRpZmYgLS1naXQgYS9nY2MvZm9ydHJhbi9vcGVubXAu Y2MgYi9nY2MvZm9ydHJhbi9vcGVubXAuY2MKaW5kZXggMjk1MmNkMzAwYWMuLmFmNzY5ZDllZmJk IDEwMDY0NAotLS0gYS9nY2MvZm9ydHJhbi9vcGVubXAuY2MKKysrIGIvZ2NjL2ZvcnRyYW4vb3Bl bm1wLmNjCkBAIC0xMTk3LDcgKzExOTcsNyBAQCBvbXBfaW52X21hc2s6Om9tcF9pbnZfbWFzayAo Y29uc3Qgb21wX21hc2sgJm0pIDogb21wX21hc2sgKG0pCiAKIHN0YXRpYyBib29sCiBnZmNfbWF0 Y2hfb21wX21hcF9jbGF1c2UgKGdmY19vbXBfbmFtZWxpc3QgKipsaXN0LCBnZmNfb21wX21hcF9v cCBtYXBfb3AsCi0JCQkgIGJvb2wgYWxsb3dfY29tbW9uLCBib29sIGFsbG93X2Rlcml2ZWQpCisJ CQkgIGJvb2wgYWxsb3dfY29tbW9uLCBib29sIGFsbG93X2Rlcml2ZWQsIGJvb2wgcmVhZG9ubHkg PSBmYWxzZSkKIHsKICAgZ2ZjX29tcF9uYW1lbGlzdCAqKmhlYWQgPSBOVUxMOwogICBpZiAoZ2Zj X21hdGNoX29tcF92YXJpYWJsZV9saXN0ICgiIiwgbGlzdCwgYWxsb3dfY29tbW9uLCBOVUxMLCAm aGVhZCwgdHJ1ZSwKQEAgLTEyMDYsNyArMTIwNiwxMCBAQCBnZmNfbWF0Y2hfb21wX21hcF9jbGF1 c2UgKGdmY19vbXBfbmFtZWxpc3QgKipsaXN0LCBnZmNfb21wX21hcF9vcCBtYXBfb3AsCiAgICAg ewogICAgICAgZ2ZjX29tcF9uYW1lbGlzdCAqbjsKICAgICAgIGZvciAobiA9ICpoZWFkOyBuOyBu ID0gbi0+bmV4dCkKLQluLT51Lm1hcF9vcCA9IG1hcF9vcDsKKwl7CisJICBuLT51Lm1hcC5vcCA9 IG1hcF9vcDsKKwkgIG4tPnUubWFwLnJlYWRvbmx5ID0gcmVhZG9ubHk7CisJfQogICAgICAgcmV0 dXJuIHRydWU7CiAgICAgfQogCkBAIC0xNTIwLDcgKzE1MjMsNyBAQCBnZmNfbWF0Y2hfb21wX2Ns YXVzZV9yZWR1Y3Rpb24gKGNoYXIgcGMsIGdmY19vbXBfY2xhdXNlcyAqYywgYm9vbCBvcGVuYWNj LAogCSAgICBnZmNfb21wX25hbWVsaXN0ICpwID0gZ2ZjX2dldF9vbXBfbmFtZWxpc3QgKCksICoq dGw7CiAJICAgIHAtPnN5bSA9IG4tPnN5bTsKIAkgICAgcC0+d2hlcmUgPSBwLT53aGVyZTsKLQkg ICAgcC0+dS5tYXBfb3AgPSBPTVBfTUFQX0FMV0FZU19UT0ZST007CisJICAgIHAtPnUubWFwLm9w ID0gT01QX01BUF9BTFdBWVNfVE9GUk9NOwogCiAJICAgIHRsID0gJmMtPmxpc3RzW09NUF9MSVNU X01BUF07CiAJICAgIHdoaWxlICgqdGwpCkBAIC0yMTgwLDExICsyMTgzLDE2IEBAIGdmY19tYXRj aF9vbXBfY2xhdXNlcyAoZ2ZjX29tcF9jbGF1c2VzICoqY3AsIGNvbnN0IG9tcF9tYXNrIG1hc2ss CiAJICAgIHsKIAkgICAgICBpZiAob3BlbmFjYykKIAkJewotCQkgIGlmIChnZmNfbWF0Y2ggKCJj b3B5aW4gKCAiKSA9PSBNQVRDSF9ZRVMKLQkJICAgICAgJiYgZ2ZjX21hdGNoX29tcF9tYXBfY2xh dXNlICgmYy0+bGlzdHNbT01QX0xJU1RfTUFQXSwKLQkJCQkJCSAgIE9NUF9NQVBfVE8sIHRydWUs Ci0JCQkJCQkgICBhbGxvd19kZXJpdmVkKSkKLQkJICAgIGNvbnRpbnVlOworCQkgIGlmIChnZmNf bWF0Y2ggKCJjb3B5aW4gKCAiKSA9PSBNQVRDSF9ZRVMpCisJCSAgICB7CisJCSAgICAgIGJvb2wg cmVhZG9ubHkgPSBmYWxzZTsKKwkJICAgICAgaWYgKGdmY19tYXRjaCAoInJlYWRvbmx5IDogIikg PT0gTUFUQ0hfWUVTKQorCQkJcmVhZG9ubHkgPSB0cnVlOworCQkgICAgICBpZiAoZ2ZjX21hdGNo X29tcF9tYXBfY2xhdXNlICgmYy0+bGlzdHNbT01QX0xJU1RfTUFQXSwKKwkJCQkJCSAgICBPTVBf TUFQX1RPLCB0cnVlLAorCQkJCQkJICAgIGFsbG93X2Rlcml2ZWQsIHJlYWRvbmx5KSkKKwkJCWNv bnRpbnVlOworCQkgICAgfQogCQl9CiAJICAgICAgZWxzZSBpZiAoZ2ZjX21hdGNoX29tcF92YXJp YWJsZV9saXN0ICgiY29weWluICgiLAogCQkJCQkJICAgICZjLT5saXN0c1tPTVBfTElTVF9DT1BZ SU5dLApAQCAtMzEwMSw3ICszMTA5LDcgQEAgZ2ZjX21hdGNoX29tcF9jbGF1c2VzIChnZmNfb21w X2NsYXVzZXMgKipjcCwgY29uc3Qgb21wX21hc2sgbWFzaywKIAkJewogCQkgIGdmY19vbXBfbmFt ZWxpc3QgKm47CiAJCSAgZm9yIChuID0gKmhlYWQ7IG47IG4gPSBuLT5uZXh0KQotCQkgICAgbi0+ dS5tYXBfb3AgPSBtYXBfb3A7CisJCSAgICBuLT51Lm1hcC5vcCA9IG1hcF9vcDsKIAkJICBjb250 aW51ZTsKIAkJfQogCSAgICAgIGdmY19jdXJyZW50X2xvY3VzID0gb2xkX2xvYzsKQEAgLTM5NDIs NyArMzk1MCw3IEBAIGdmY19tYXRjaF9vYWNjX2RlY2xhcmUgKHZvaWQpCiAgICAgICBpZiAoZ2Zj X2N1cnJlbnRfbnMtPnByb2NfbmFtZQogCSAgJiYgZ2ZjX2N1cnJlbnRfbnMtPnByb2NfbmFtZS0+ YXR0ci5mbGF2b3IgPT0gRkxfTU9EVUxFKQogCXsKLQkgIGlmIChuLT51Lm1hcF9vcCAhPSBPTVBf TUFQX0FMTE9DICYmIG4tPnUubWFwX29wICE9IE9NUF9NQVBfVE8pCisJICBpZiAobi0+dS5tYXAu b3AgIT0gT01QX01BUF9BTExPQyAmJiBuLT51Lm1hcC5vcCAhPSBPTVBfTUFQX1RPKQogCSAgICB7 CiAJICAgICAgZ2ZjX2Vycm9yICgiSW52YWxpZCBjbGF1c2UgaW4gbW9kdWxlIHdpdGggISRBQ0Mg REVDTEFSRSBhdCAlTCIsCiAJCQkgJndoZXJlKTsKQEAgLTM5NzYsNyArMzk4NCw3IEBAIGdmY19t YXRjaF9vYWNjX2RlY2xhcmUgKHZvaWQpCiAJICByZXR1cm4gTUFUQ0hfRVJST1I7CiAJfQogCi0g ICAgICBzd2l0Y2ggKG4tPnUubWFwX29wKQorICAgICAgc3dpdGNoIChuLT51Lm1hcC5vcCkKIAl7 CiAJICBjYXNlIE9NUF9NQVBfRk9SQ0VfQUxMT0M6CiAJICBjYXNlIE9NUF9NQVBfQUxMT0M6CkBA IC00MDkxLDIwICs0MDk5LDM1IEBAIGdmY19tYXRjaF9vYWNjX3dhaXQgKHZvaWQpCiBtYXRjaAog Z2ZjX21hdGNoX29hY2NfY2FjaGUgKHZvaWQpCiB7CisgIGJvb2wgcmVhZG9ubHkgPSBmYWxzZTsK ICAgZ2ZjX29tcF9jbGF1c2VzICpjID0gZ2ZjX2dldF9vbXBfY2xhdXNlcyAoKTsKICAgLyogVGhl IE9wZW5BQ0MgY2FjaGUgZGlyZWN0aXZlIGV4cGxpY2l0bHkgb25seSBhbGxvd3MgImFycmF5IGVs ZW1lbnRzIG9yCiAgICAgIHN1YmFycmF5cyIsIHdoaWNoIHdlJ3JlIGN1cnJlbnRseSBub3QgY2hl Y2tpbmcgaGVyZS4gIEVpdGhlciBjaGVjayB0aGlzCiAgICAgIGFmdGVyIHRoZSBjYWxsIG9mIGdm Y19tYXRjaF9vbXBfdmFyaWFibGVfbGlzdCwgb3IgYWRkIHNvbWV0aGluZyBsaWtlIGEKICAgICAg b25seV9zZWN0aW9ucyB2YXJpYW50IG5leHQgdG8gaXRzIGFsbG93X3NlY3Rpb25zIHBhcmFtZXRl ci4gICovCi0gIG1hdGNoIG0gPSBnZmNfbWF0Y2hfb21wX3ZhcmlhYmxlX2xpc3QgKCIgKCIsCi0J CQkJCSAmYy0+bGlzdHNbT01QX0xJU1RfQ0FDSEVdLCB0cnVlLAotCQkJCQkgTlVMTCwgTlVMTCwg dHJ1ZSk7CisgIG1hdGNoIG0gPSBnZmNfbWF0Y2ggKCIgKCAiKTsKICAgaWYgKG0gIT0gTUFUQ0hf WUVTKQogICAgIHsKICAgICAgIGdmY19mcmVlX29tcF9jbGF1c2VzKGMpOwogICAgICAgcmV0dXJu IG07CiAgICAgfQogCisgIGlmIChnZmNfbWF0Y2ggKCJyZWFkb25seSA6ICIpID09IE1BVENIX1lF UykKKyAgICByZWFkb25seSA9IHRydWU7CisKKyAgZ2ZjX29tcF9uYW1lbGlzdCAqKmhlYWQgPSBO VUxMOworICBtID0gZ2ZjX21hdGNoX29tcF92YXJpYWJsZV9saXN0ICgiIiwgJmMtPmxpc3RzW09N UF9MSVNUX0NBQ0hFXSwgdHJ1ZSwKKwkJCQkgICBOVUxMLCAmaGVhZCwgdHJ1ZSk7CisgIGlmICht ICE9IE1BVENIX1lFUykKKyAgICB7CisgICAgICBnZmNfZnJlZV9vbXBfY2xhdXNlcyhjKTsKKyAg ICAgIHJldHVybiBtOworICAgIH0KKworICBpZiAocmVhZG9ubHkpCisgICAgZm9yIChnZmNfb21w X25hbWVsaXN0ICpuID0gKmhlYWQ7IG47IG4gPSBuLT5uZXh0KQorICAgICAgbi0+dS5tYXAucmVh ZG9ubHkgPSB0cnVlOworCiAgIGlmIChnZmNfY3VycmVudF9zdGF0ZSgpICE9IENPTVBfRE8gCiAg ICAgICAmJiBnZmNfY3VycmVudF9zdGF0ZSgpICE9IENPTVBfRE9fQ09OQ1VSUkVOVCkKICAgICB7 CkBAIC04MTQyLDggKzgxNjUsOCBAQCByZXNvbHZlX29tcF9jbGF1c2VzIChnZmNfY29kZSAqY29k ZSwgZ2ZjX29tcF9jbGF1c2VzICpvbXBfY2xhdXNlcywKIAkJICB9CiAJCWlmIChvcGVuYWNjCiAJ CSAgICAmJiBsaXN0ID09IE9NUF9MSVNUX01BUAotCQkgICAgJiYgKG4tPnUubWFwX29wID09IE9N UF9NQVBfQVRUQUNICi0JCQl8fCBuLT51Lm1hcF9vcCA9PSBPTVBfTUFQX0RFVEFDSCkpCisJCSAg ICAmJiAobi0+dS5tYXAub3AgPT0gT01QX01BUF9BVFRBQ0gKKwkJCXx8IG4tPnUubWFwLm9wID09 IE9NUF9NQVBfREVUQUNIKSkKIAkJICB7CiAJCSAgICBzeW1ib2xfYXR0cmlidXRlIGF0dHI7CiAJ CSAgICBpZiAobi0+ZXhwcikKQEAgLTgxNTMsNyArODE3Niw3IEBAIHJlc29sdmVfb21wX2NsYXVz ZXMgKGdmY19jb2RlICpjb2RlLCBnZmNfb21wX2NsYXVzZXMgKm9tcF9jbGF1c2VzLAogCQkgICAg aWYgKCFhdHRyLnBvaW50ZXIgJiYgIWF0dHIuYWxsb2NhdGFibGUpCiAJCSAgICAgIGdmY19lcnJv ciAoIiVxcyBjbGF1c2UgYXJndW1lbnQgbXVzdCBiZSBBTExPQ0FUQUJMRSBvciAiCiAJCQkJICJh IFBPSU5URVIgYXQgJUwiLAotCQkJCSAobi0+dS5tYXBfb3AgPT0gT01QX01BUF9BVFRBQ0gpID8g ImF0dGFjaCIKKwkJCQkgKG4tPnUubWFwLm9wID09IE9NUF9NQVBfQVRUQUNIKSA/ICJhdHRhY2gi CiAJCQkJIDogImRldGFjaCIsICZuLT53aGVyZSk7CiAJCSAgfQogCQlpZiAobGFzdHJlZgpAQCAt ODIyNCw3ICs4MjQ3LDcgQEAgcmVzb2x2ZV9vbXBfY2xhdXNlcyAoZ2ZjX2NvZGUgKmNvZGUsIGdm Y19vbXBfY2xhdXNlcyAqb21wX2NsYXVzZXMsCiAJCWVsc2UgaWYgKG9wZW5hY2MpCiAJCSAgewog CQkgICAgaWYgKGxpc3QgPT0gT01QX0xJU1RfTUFQCi0JCQkmJiBuLT51Lm1hcF9vcCA9PSBPTVBf TUFQX0ZPUkNFX0RFVklDRVBUUikKKwkJCSYmIG4tPnUubWFwLm9wID09IE9NUF9NQVBfRk9SQ0Vf REVWSUNFUFRSKQogCQkgICAgICByZXNvbHZlX29hY2NfZGV2aWNlcHRyX2NsYXVzZSAobi0+c3lt LCBuLT53aGVyZSwgbmFtZSk7CiAJCSAgICBlbHNlCiAJCSAgICAgIHJlc29sdmVfb2FjY19kYXRh X2NsYXVzZXMgKG4tPnN5bSwgbi0+d2hlcmUsIG5hbWUpOwpAQCAtODI0Niw3ICs4MjY5LDcgQEAg cmVzb2x2ZV9vbXBfY2xhdXNlcyAoZ2ZjX2NvZGUgKmNvZGUsIGdmY19vbXBfY2xhdXNlcyAqb21w X2NsYXVzZXMsCiAJCSAgICB7CiAJCSAgICBjYXNlIEVYRUNfT01QX1RBUkdFVDoKIAkJICAgIGNh c2UgRVhFQ19PTVBfVEFSR0VUX0RBVEE6Ci0JCSAgICAgIHN3aXRjaCAobi0+dS5tYXBfb3ApCisJ CSAgICAgIHN3aXRjaCAobi0+dS5tYXAub3ApCiAJCQl7CiAJCQljYXNlIE9NUF9NQVBfVE86CiAJ CQljYXNlIE9NUF9NQVBfQUxXQVlTX1RPOgpAQCAtODI3Myw3ICs4Mjk2LDcgQEAgcmVzb2x2ZV9v bXBfY2xhdXNlcyAoZ2ZjX2NvZGUgKmNvZGUsIGdmY19vbXBfY2xhdXNlcyAqb21wX2NsYXVzZXMs CiAJCQl9CiAJCSAgICAgIGJyZWFrOwogCQkgICAgY2FzZSBFWEVDX09NUF9UQVJHRVRfRU5URVJf REFUQToKLQkJICAgICAgc3dpdGNoIChuLT51Lm1hcF9vcCkKKwkJICAgICAgc3dpdGNoIChuLT51 Lm1hcC5vcCkKIAkJCXsKIAkJCWNhc2UgT01QX01BUF9UTzoKIAkJCWNhc2UgT01QX01BUF9BTFdB WVNfVE86CkBAIC04MjgzLDE2ICs4MzA2LDE2IEBAIHJlc29sdmVfb21wX2NsYXVzZXMgKGdmY19j b2RlICpjb2RlLCBnZmNfb21wX2NsYXVzZXMgKm9tcF9jbGF1c2VzLAogCQkJY2FzZSBPTVBfTUFQ X1BSRVNFTlRfQUxMT0M6CiAJCQkgIGJyZWFrOwogCQkJY2FzZSBPTVBfTUFQX1RPRlJPTToKLQkJ CSAgbi0+dS5tYXBfb3AgPSBPTVBfTUFQX1RPOworCQkJICBuLT51Lm1hcC5vcCA9IE9NUF9NQVBf VE87CiAJCQkgIGJyZWFrOwogCQkJY2FzZSBPTVBfTUFQX0FMV0FZU19UT0ZST006Ci0JCQkgIG4t PnUubWFwX29wID0gT01QX01BUF9BTFdBWVNfVE87CisJCQkgIG4tPnUubWFwLm9wID0gT01QX01B UF9BTFdBWVNfVE87CiAJCQkgIGJyZWFrOwogCQkJY2FzZSBPTVBfTUFQX1BSRVNFTlRfVE9GUk9N OgotCQkJICBuLT51Lm1hcF9vcCA9IE9NUF9NQVBfUFJFU0VOVF9UTzsKKwkJCSAgbi0+dS5tYXAu b3AgPSBPTVBfTUFQX1BSRVNFTlRfVE87CiAJCQkgIGJyZWFrOwogCQkJY2FzZSBPTVBfTUFQX0FM V0FZU19QUkVTRU5UX1RPRlJPTToKLQkJCSAgbi0+dS5tYXBfb3AgPSBPTVBfTUFQX0FMV0FZU19Q UkVTRU5UX1RPOworCQkJICBuLT51Lm1hcC5vcCA9IE9NUF9NQVBfQUxXQVlTX1BSRVNFTlRfVE87 CiAJCQkgIGJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCSAgZ2ZjX2Vycm9yICgiVEFSR0VUIEVOVEVS IERBVEEgd2l0aCBtYXAtdHlwZSBvdGhlciAiCkBAIC04MzAyLDcgKzgzMjUsNyBAQCByZXNvbHZl X29tcF9jbGF1c2VzIChnZmNfY29kZSAqY29kZSwgZ2ZjX29tcF9jbGF1c2VzICpvbXBfY2xhdXNl cywKIAkJCX0KIAkJICAgICAgYnJlYWs7CiAJCSAgICBjYXNlIEVYRUNfT01QX1RBUkdFVF9FWElU X0RBVEE6Ci0JCSAgICAgIHN3aXRjaCAobi0+dS5tYXBfb3ApCisJCSAgICAgIHN3aXRjaCAobi0+ dS5tYXAub3ApCiAJCQl7CiAJCQljYXNlIE9NUF9NQVBfRlJPTToKIAkJCWNhc2UgT01QX01BUF9B TFdBWVNfRlJPTToKQEAgLTgzMTIsMTYgKzgzMzUsMTYgQEAgcmVzb2x2ZV9vbXBfY2xhdXNlcyAo Z2ZjX2NvZGUgKmNvZGUsIGdmY19vbXBfY2xhdXNlcyAqb21wX2NsYXVzZXMsCiAJCQljYXNlIE9N UF9NQVBfREVMRVRFOgogCQkJICBicmVhazsKIAkJCWNhc2UgT01QX01BUF9UT0ZST006Ci0JCQkg IG4tPnUubWFwX29wID0gT01QX01BUF9GUk9NOworCQkJICBuLT51Lm1hcC5vcCA9IE9NUF9NQVBf RlJPTTsKIAkJCSAgYnJlYWs7CiAJCQljYXNlIE9NUF9NQVBfQUxXQVlTX1RPRlJPTToKLQkJCSAg bi0+dS5tYXBfb3AgPSBPTVBfTUFQX0FMV0FZU19GUk9NOworCQkJICBuLT51Lm1hcC5vcCA9IE9N UF9NQVBfQUxXQVlTX0ZST007CiAJCQkgIGJyZWFrOwogCQkJY2FzZSBPTVBfTUFQX1BSRVNFTlRf VE9GUk9NOgotCQkJICBuLT51Lm1hcF9vcCA9IE9NUF9NQVBfUFJFU0VOVF9GUk9NOworCQkJICBu LT51Lm1hcC5vcCA9IE9NUF9NQVBfUFJFU0VOVF9GUk9NOwogCQkJICBicmVhazsKIAkJCWNhc2Ug T01QX01BUF9BTFdBWVNfUFJFU0VOVF9UT0ZST006Ci0JCQkgIG4tPnUubWFwX29wID0gT01QX01B UF9BTFdBWVNfUFJFU0VOVF9GUk9NOworCQkJICBuLT51Lm1hcC5vcCA9IE9NUF9NQVBfQUxXQVlT X1BSRVNFTlRfRlJPTTsKIAkJCSAgYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJICBnZmNfZXJyb3Ig KCJUQVJHRVQgRVhJVCBEQVRBIHdpdGggbWFwLXR5cGUgb3RoZXIgIgpkaWZmIC0tZ2l0IGEvZ2Nj L2ZvcnRyYW4vdHJhbnMtZGVjbC5jYyBiL2djYy9mb3J0cmFuL3RyYW5zLWRlY2wuY2MKaW5kZXgg YjBmZDI1ZTkyYTMuLjFmZjFkZGEwMjZhIDEwMDY0NAotLS0gYS9nY2MvZm9ydHJhbi90cmFucy1k ZWNsLmNjCisrKyBiL2djYy9mb3J0cmFuL3RyYW5zLWRlY2wuY2MKQEAgLTY2MTQsNyArNjYxNCw3 IEBAIGFkZF9jbGF1c2UgKGdmY19zeW1ib2wgKnN5bSwgZ2ZjX29tcF9tYXBfb3AgbWFwX29wKQog CiAgIG4gPSBnZmNfZ2V0X29tcF9uYW1lbGlzdCAoKTsKICAgbi0+c3ltID0gc3ltOwotICBuLT51 Lm1hcF9vcCA9IG1hcF9vcDsKKyAgbi0+dS5tYXAub3AgPSBtYXBfb3A7CiAKICAgaWYgKCFtb2R1 bGVfb2FjY19jbGF1c2VzKQogICAgIG1vZHVsZV9vYWNjX2NsYXVzZXMgPSBnZmNfZ2V0X29tcF9j bGF1c2VzICgpOwpAQCAtNjcxNiwxMCArNjcxNiwxMCBAQCBmaW5pc2hfb2FjY19kZWNsYXJlIChn ZmNfbmFtZXNwYWNlICpucywgZ2ZjX3N5bWJvbCAqc3ltLCBib29sIGJsb2NrKQogCiAgIGZvciAo biA9IG9tcF9jbGF1c2VzLT5saXN0c1tPTVBfTElTVF9NQVBdOyBuOyBuID0gbi0+bmV4dCkKICAg ICB7Ci0gICAgICBzd2l0Y2ggKG4tPnUubWFwX29wKQorICAgICAgc3dpdGNoIChuLT51Lm1hcC5v cCkKIAl7CiAJICBjYXNlIE9NUF9NQVBfREVWSUNFX1JFU0lERU5UOgotCSAgICBuLT51Lm1hcF9v cCA9IE9NUF9NQVBfRk9SQ0VfQUxMT0M7CisJICAgIG4tPnUubWFwLm9wID0gT01QX01BUF9GT1JD RV9BTExPQzsKIAkgICAgYnJlYWs7CiAKIAkgIGRlZmF1bHQ6CmRpZmYgLS1naXQgYS9nY2MvZm9y dHJhbi90cmFucy1vcGVubXAuY2MgYi9nY2MvZm9ydHJhbi90cmFucy1vcGVubXAuY2MKaW5kZXgg Y2Y3NDFjZWJmOTEuLmE0NjI4ZTQ2MGJkIDEwMDY0NAotLS0gYS9nY2MvZm9ydHJhbi90cmFucy1v cGVubXAuY2MKKysrIGIvZ2NjL2ZvcnRyYW4vdHJhbnMtb3Blbm1wLmNjCkBAIC0zMDY3LDcgKzMw NjcsMTAgQEAgZ2ZjX3RyYW5zX29tcF9jbGF1c2VzIChzdG10YmxvY2tfdCAqYmxvY2ssIGdmY19v bXBfY2xhdXNlcyAqY2xhdXNlcywKIAkJICAgICAgfHwgKG4tPmV4cHIgJiYgZ2ZjX2V4cHJfYXR0 ciAobi0+ZXhwcikucG9pbnRlcikpKQogCQlhbHdheXNfbW9kaWZpZXIgPSB0cnVlOwogCi0JICAg ICAgc3dpdGNoIChuLT51Lm1hcF9vcCkKKwkgICAgICBpZiAobi0+dS5tYXAucmVhZG9ubHkpCisJ CU9NUF9DTEFVU0VfTUFQX1JFQURPTkxZIChub2RlKSA9IDE7CisKKwkgICAgICBzd2l0Y2ggKG4t PnUubWFwLm9wKQogCQl7CiAJCWNhc2UgT01QX01BUF9BTExPQzoKIAkJICBPTVBfQ0xBVVNFX1NF VF9NQVBfS0lORCAobm9kZSwgR09NUF9NQVBfQUxMT0MpOwpAQCAtMzE5NCw4ICszMTk3LDggQEAg Z2ZjX3RyYW5zX29tcF9jbGF1c2VzIChzdG10YmxvY2tfdCAqYmxvY2ssIGdmY19vbXBfY2xhdXNl cyAqY2xhdXNlcywKIAkJICAgICAgJiYgbi0+c3ltLT5hdHRyLm9tcF9kZWNsYXJlX3RhcmdldAog CQkgICAgICAmJiAoYWx3YXlzX21vZGlmaWVyIHx8IG4tPnN5bS0+YXR0ci5wb2ludGVyKQogCQkg ICAgICAmJiBvcCAhPSBFWEVDX09NUF9UQVJHRVRfRVhJVF9EQVRBCi0JCSAgICAgICYmIG4tPnUu bWFwX29wICE9IE9NUF9NQVBfREVMRVRFCi0JCSAgICAgICYmIG4tPnUubWFwX29wICE9IE9NUF9N QVBfUkVMRUFTRSkKKwkJICAgICAgJiYgbi0+dS5tYXAub3AgIT0gT01QX01BUF9ERUxFVEUKKwkJ ICAgICAgJiYgbi0+dS5tYXAub3AgIT0gT01QX01BUF9SRUxFQVNFKQogCQkgICAgewogCQkgICAg ICBnY2NfYXNzZXJ0IChuLT5zeW0tPnRzLnUuY2wtPmJhY2tlbmRfZGVjbCk7CiAJCSAgICAgIG5v ZGU1ID0gYnVpbGRfb21wX2NsYXVzZSAoaW5wdXRfbG9jYXRpb24sIE9NUF9DTEFVU0VfTUFQKTsK QEAgLTMyNjEsNyArMzI2NCw3IEBAIGdmY190cmFuc19vbXBfY2xhdXNlcyAoc3RtdGJsb2NrX3Qg KmJsb2NrLCBnZmNfb21wX2NsYXVzZXMgKmNsYXVzZXMsCiAJCQl7CiAJCQkgIGVudW0gZ29tcF9t YXBfa2luZCBnbWsgPSBHT01QX01BUF9QT0lOVEVSOwogCQkJICBpZiAob3AgPT0gRVhFQ19PTVBf VEFSR0VUX0VYSVRfREFUQQotCQkJICAgICAgJiYgbi0+dS5tYXBfb3AgPT0gT01QX01BUF9ERUxF VEUpCisJCQkgICAgICAmJiBuLT51Lm1hcC5vcCA9PSBPTVBfTUFQX0RFTEVURSkKIAkJCSAgICBn bWsgPSBHT01QX01BUF9ERUxFVEU7CiAJCQkgIGVsc2UgaWYgKG9wID09IEVYRUNfT01QX1RBUkdF VF9FWElUX0RBVEEpCiAJCQkgICAgZ21rID0gR09NUF9NQVBfUkVMRUFTRTsKQEAgLTMyODQsNyAr MzI4Nyw3IEBAIGdmY190cmFuc19vbXBfY2xhdXNlcyAoc3RtdGJsb2NrX3QgKmJsb2NrLCBnZmNf b21wX2NsYXVzZXMgKmNsYXVzZXMsCiAJCQl7CiAJCQkgIGVudW0gZ29tcF9tYXBfa2luZCBnbWs7 CiAJCQkgIGlmIChvcCA9PSBFWEVDX09NUF9UQVJHRVRfRVhJVF9EQVRBCi0JCQkgICAgICAmJiBu LT51Lm1hcF9vcCA9PSBPTVBfTUFQX0RFTEVURSkKKwkJCSAgICAgICYmIG4tPnUubWFwLm9wID09 IE9NUF9NQVBfREVMRVRFKQogCQkJICAgIGdtayA9IEdPTVBfTUFQX0RFTEVURTsKIAkJCSAgZWxz ZSBpZiAob3AgPT0gRVhFQ19PTVBfVEFSR0VUX0VYSVRfREFUQSkKIAkJCSAgICBnbWsgPSBHT01Q X01BUF9SRUxFQVNFOwpAQCAtMzMxNiwxOCArMzMxOSwxOCBAQCBnZmNfdHJhbnNfb21wX2NsYXVz ZXMgKHN0bXRibG9ja190ICpibG9jaywgZ2ZjX29tcF9jbGF1c2VzICpjbGF1c2VzLAogCQkgICAg ICBub2RlMiA9IGJ1aWxkX29tcF9jbGF1c2UgKGlucHV0X2xvY2F0aW9uLCBPTVBfQ0xBVVNFX01B UCk7CiAJCSAgICAgIE9NUF9DTEFVU0VfREVDTCAobm9kZTIpID0gZGVjbDsKIAkJICAgICAgT01Q X0NMQVVTRV9TSVpFIChub2RlMikgPSBUWVBFX1NJWkVfVU5JVCAodHlwZSk7Ci0JCSAgICAgIGlm IChuLT51Lm1hcF9vcCA9PSBPTVBfTUFQX0RFTEVURSkKKwkJICAgICAgaWYgKG4tPnUubWFwLm9w ID09IE9NUF9NQVBfREVMRVRFKQogCQkJbWFwX2tpbmQgPSBHT01QX01BUF9ERUxFVEU7CiAJCSAg ICAgIGVsc2UgaWYgKG9wID09IEVYRUNfT01QX1RBUkdFVF9FWElUX0RBVEEKLQkJCSAgICAgICB8 fCBuLT51Lm1hcF9vcCA9PSBPTVBfTUFQX1JFTEVBU0UpCisJCQkgICAgICAgfHwgbi0+dS5tYXAu b3AgPT0gT01QX01BUF9SRUxFQVNFKQogCQkJbWFwX2tpbmQgPSBHT01QX01BUF9SRUxFQVNFOwog CQkgICAgICBlbHNlCiAJCQltYXBfa2luZCA9IEdPTVBfTUFQX1RPX1BTRVQ7CiAJCSAgICAgIE9N UF9DTEFVU0VfU0VUX01BUF9LSU5EIChub2RlMiwgbWFwX2tpbmQpOwogCiAJCSAgICAgIGlmIChv cCAhPSBFWEVDX09NUF9UQVJHRVRfRVhJVF9EQVRBCi0JCQkgICYmIG4tPnUubWFwX29wICE9IE9N UF9NQVBfREVMRVRFCi0JCQkgICYmIG4tPnUubWFwX29wICE9IE9NUF9NQVBfUkVMRUFTRSkKKwkJ CSAgJiYgbi0+dS5tYXAub3AgIT0gT01QX01BUF9ERUxFVEUKKwkJCSAgJiYgbi0+dS5tYXAub3Ag IT0gT01QX01BUF9SRUxFQVNFKQogCQkJewogCQkJICBub2RlMyA9IGJ1aWxkX29tcF9jbGF1c2Ug KGlucHV0X2xvY2F0aW9uLAogCQkJCQkJICAgIE9NUF9DTEFVU0VfTUFQKTsKQEAgLTMzNDUsNyAr MzM0OCw3IEBAIGdmY190cmFuc19vbXBfY2xhdXNlcyAoc3RtdGJsb2NrX3QgKmJsb2NrLCBnZmNf b21wX2NsYXVzZXMgKmNsYXVzZXMsCiAJCQkgICAgICA9IGdmY19jb252X2Rlc2NyaXB0b3JfZGF0 YV9nZXQgKGRlY2wpOwogCQkJICBPTVBfQ0xBVVNFX1NJWkUgKG5vZGUzKSA9IHNpemVfaW50ICgw KTsKIAotCQkJICBpZiAobi0+dS5tYXBfb3AgPT0gT01QX01BUF9BVFRBQ0gpCisJCQkgIGlmIChu LT51Lm1hcC5vcCA9PSBPTVBfTUFQX0FUVEFDSCkKIAkJCSAgICB7CiAJCQkgICAgICAvKiBTdGFu ZGFsb25lIGF0dGFjaCBjbGF1c2VzIHVzZWQgd2l0aCBhcnJheXMgd2l0aAogCQkJCSBkZXNjcmlw dG9ycyBtdXN0IGNvcHkgdGhlIGRlc2NyaXB0b3IgdG8gdGhlCkBAIC0zMzYxLDcgKzMzNjQsNyBA QCBnZmNfdHJhbnNfb21wX2NsYXVzZXMgKHN0bXRibG9ja190ICpibG9jaywgZ2ZjX29tcF9jbGF1 c2VzICpjbGF1c2VzLAogCQkJICAgICAgbm9kZTMgPSBOVUxMOwogCQkJICAgICAgZ290byBmaW5h bGl6ZV9tYXBfY2xhdXNlOwogCQkJICAgIH0KLQkJCSAgZWxzZSBpZiAobi0+dS5tYXBfb3AgPT0g T01QX01BUF9ERVRBQ0gpCisJCQkgIGVsc2UgaWYgKG4tPnUubWFwLm9wID09IE9NUF9NQVBfREVU QUNIKQogCQkJICAgIHsKIAkJCSAgICAgIE9NUF9DTEFVU0VfU0VUX01BUF9LSU5EIChub2RlMywg R09NUF9NQVBfREVUQUNIKTsKIAkJCSAgICAgIC8qIFNpbWlsYXJseSB0byBhYm92ZSwgd2UgZG9u J3Qgd2FudCB0byB1bm1hcCBQVFIKQEAgLTM1NTMsOCArMzU1Niw4IEBAIGdmY190cmFuc19vbXBf Y2xhdXNlcyAoc3RtdGJsb2NrX3QgKmJsb2NrLCBnZmNfb21wX2NsYXVzZXMgKmNsYXVzZXMsCiAJ CQkgdG8gcGVyZm9ybSBhIHNpbmdsZSBhdHRhY2gvZGV0YWNoIG9wZXJhdGlvbiwgb2YgdGhlCiAJ CQkgcG9pbnRlciBpdHNlbGYsIG5vdCBvZiB0aGUgcG9pbnRlZC10byBvYmplY3QuICAqLwogCQkg ICAgICBpZiAob3BlbmFjYwotCQkJICAmJiAobi0+dS5tYXBfb3AgPT0gT01QX01BUF9BVFRBQ0gK LQkJCSAgICAgIHx8IG4tPnUubWFwX29wID09IE9NUF9NQVBfREVUQUNIKSkKKwkJCSAgJiYgKG4t PnUubWFwLm9wID09IE9NUF9NQVBfQVRUQUNICisJCQkgICAgICB8fCBuLT51Lm1hcC5vcCA9PSBP TVBfTUFQX0RFVEFDSCkpCiAJCQl7CiAJCQkgIE9NUF9DTEFVU0VfREVDTCAobm9kZSkKIAkJCSAg ICA9IGJ1aWxkX2ZvbGRfYWRkcl9leHByIChPTVBfQ0xBVVNFX0RFQ0wgKG5vZGUpKTsKQEAgLTM1 ODUsNyArMzU4OCw3IEBAIGdmY190cmFuc19vbXBfY2xhdXNlcyAoc3RtdGJsb2NrX3QgKmJsb2Nr LCBnZmNfb21wX2NsYXVzZXMgKmNsYXVzZXMsCiAJCQkJCSAgIGZvbGRfY29udmVydCAoc2l6ZV90 eXBlX25vZGUsCiAJCQkJCSAgICAgICBzZS5zdHJpbmdfbGVuZ3RoKSwKIAkJCQkJICAgVFlQRV9T SVpFX1VOSVQgKHRtcCkpOwotCQkJICBpZiAobi0+dS5tYXBfb3AgPT0gT01QX01BUF9ERUxFVEUp CisJCQkgIGlmIChuLT51Lm1hcC5vcCA9PSBPTVBfTUFQX0RFTEVURSkKIAkJCSAgICBraW5kID0g R09NUF9NQVBfREVMRVRFOwogCQkJICBlbHNlIGlmIChvcCA9PSBFWEVDX09NUF9UQVJHRVRfRVhJ VF9EQVRBKQogCQkJICAgIGtpbmQgPSBHT01QX01BUF9SRUxFQVNFOwpAQCAtMzY0Miw4ICszNjQ1 LDggQEAgZ2ZjX3RyYW5zX29tcF9jbGF1c2VzIChzdG10YmxvY2tfdCAqYmxvY2ssIGdmY19vbXBf Y2xhdXNlcyAqY2xhdXNlcywKIAkJCSAgICAgdG8gcGVyZm9ybSBhIHNpbmdsZSBhdHRhY2gvZGV0 YWNoIG9wZXJhdGlvbiwgb2YgdGhlCiAJCQkgICAgIHBvaW50ZXIgaXRzZWxmLCBub3Qgb2YgdGhl IHBvaW50ZWQtdG8gb2JqZWN0LiAgKi8KIAkJCSAgaWYgKG9wZW5hY2MKLQkJCSAgICAgICYmIChu LT51Lm1hcF9vcCA9PSBPTVBfTUFQX0FUVEFDSAotCQkJCSAgfHwgbi0+dS5tYXBfb3AgPT0gT01Q X01BUF9ERVRBQ0gpKQorCQkJICAgICAgJiYgKG4tPnUubWFwLm9wID09IE9NUF9NQVBfQVRUQUNI CisJCQkJICB8fCBuLT51Lm1hcC5vcCA9PSBPTVBfTUFQX0RFVEFDSCkpCiAJCQkgICAgewogCQkJ ICAgICAgT01QX0NMQVVTRV9ERUNMIChub2RlKQogCQkJCT0gYnVpbGRfZm9sZF9hZGRyX2V4cHIg KGlubmVyKTsKQEAgLTM2ODksOCArMzY5Miw4IEBAIGdmY190cmFuc19vbXBfY2xhdXNlcyAoc3Rt dGJsb2NrX3QgKmJsb2NrLCBnZmNfb21wX2NsYXVzZXMgKmNsYXVzZXMsCiAJCSAgICB7CiAJCSAg ICAgIC8qIEJhcmUgYXR0YWNoIGFuZCBkZXRhY2ggY2xhdXNlcyBkb24ndCB3YW50IGFueQogCQkJ IGFkZGl0aW9uYWwgbm9kZXMuICAqLwotCQkgICAgICBpZiAoKG4tPnUubWFwX29wID09IE9NUF9N QVBfQVRUQUNICi0JCQkgICB8fCBuLT51Lm1hcF9vcCA9PSBPTVBfTUFQX0RFVEFDSCkKKwkJICAg ICAgaWYgKChuLT51Lm1hcC5vcCA9PSBPTVBfTUFQX0FUVEFDSAorCQkJICAgfHwgbi0+dS5tYXAu b3AgPT0gT01QX01BUF9ERVRBQ0gpCiAJCQkgICYmIChQT0lOVEVSX1RZUEVfUCAoVFJFRV9UWVBF IChpbm5lcikpCiAJCQkgICAgICB8fCBHRkNfREVTQ1JJUFRPUl9UWVBFX1AgKFRSRUVfVFlQRSAo aW5uZXIpKSkpCiAJCQl7CkBAIC0zNzI0LDggKzM3MjcsOCBAQCBnZmNfdHJhbnNfb21wX2NsYXVz ZXMgKHN0bXRibG9ja190ICpibG9jaywgZ2ZjX29tcF9jbGF1c2VzICpjbGF1c2VzLAogCQkJICAg IG1hcF9raW5kID0gKChHT01QX01BUF9BTFdBWVNfUCAobWFwX2tpbmQpCiAJCQkJCSB8fCBnZmNf ZXhwcl9hdHRyIChuLT5leHByKS5wb2ludGVyKQogCQkJCQk/IEdPTVBfTUFQX0FMV0FZU19UTyA6 IEdPTVBfTUFQX1RPKTsKLQkJCSAgZWxzZSBpZiAobi0+dS5tYXBfb3AgPT0gT01QX01BUF9SRUxF QVNFCi0JCQkJICAgfHwgbi0+dS5tYXBfb3AgPT0gT01QX01BUF9ERUxFVEUpCisJCQkgIGVsc2Ug aWYgKG4tPnUubWFwLm9wID09IE9NUF9NQVBfUkVMRUFTRQorCQkJCSAgIHx8IG4tPnUubWFwLm9w ID09IE9NUF9NQVBfREVMRVRFKQogCQkJICAgIDsKIAkJCSAgZWxzZSBpZiAob3AgPT0gRVhFQ19P TVBfVEFSR0VUX0VYSVRfREFUQSkKIAkJCSAgICBtYXBfa2luZCA9IEdPTVBfTUFQX1JFTEVBU0U7 CkBAIC0zOTIwLDYgKzM5MjMsOCBAQCBnZmNfdHJhbnNfb21wX2NsYXVzZXMgKHN0bXRibG9ja190 ICpibG9jaywgZ2ZjX29tcF9jbGF1c2VzICpjbGF1c2VzLAogCQl9CiAJICAgICAgaWYgKG4tPnUu cHJlc2VudF9tb2RpZmllcikKIAkJT01QX0NMQVVTRV9NT1RJT05fUFJFU0VOVCAobm9kZSkgPSAx OworCSAgICAgIGlmIChsaXN0ID09IE9NUF9MSVNUX0NBQ0hFICYmIG4tPnUubWFwLnJlYWRvbmx5 KQorCQlPTVBfQ0xBVVNFX19DQUNIRV9fUkVBRE9OTFkgKG5vZGUpID0gMTsKIAkgICAgICBvbXBf Y2xhdXNlcyA9IGdmY190cmFuc19hZGRfY2xhdXNlIChub2RlLCBvbXBfY2xhdXNlcyk7CiAJICAg IH0KIAkgIGJyZWFrOwpAQCAtNjMzMyw3ICs2MzM4LDcgQEAgZ2ZjX2FkZF9jbGF1c2VfaW1wbGlj aXRseSAoZ2ZjX29tcF9jbGF1c2VzICpjbGF1c2VzX291dCwKIAkgIG4yLT53aGVyZSA9IG4tPndo ZXJlOwogCSAgbjItPnN5bSA9IG4tPnN5bTsKIAkgIGlmIChpc190YXJnZXQpCi0JICAgIG4yLT51 Lm1hcF9vcCA9IE9NUF9NQVBfVE9GUk9NOworCSAgICBuMi0+dS5tYXAub3AgPSBPTVBfTUFQX1RP RlJPTTsKIAkgIGlmICh0YWlsKQogCSAgICB7CiAJICAgICAgdGFpbC0+bmV4dCA9IG4yOwpkaWZm IC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vZ29hY2MvcmVhZG9ubHktMS5jIGIv Z2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vZ29hY2MvcmVhZG9ubHktMS5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xNzFmOTZjMDhkYgotLS0gL2Rldi9udWxsCisr KyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2dvYWNjL3JlYWRvbmx5LTEuYwpAQCAtMCww ICsxLDI3IEBACisvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLWZkdW1wLXRyZWUtb3JpZ2lu YWwiIH0gKi8KKworc3RydWN0IFMKK3sKKyAgaW50ICpwdHI7CisgIGZsb2F0IGY7Cit9OworCisK K2ludCBtYWluICh2b2lkKQoreworICBpbnQgeFszMl07CisgIHN0cnVjdCBTIHMgPSB7eCwgMH07 CisKKyAgI3ByYWdtYSBhY2MgcGFyYWxsZWwgY29weWluKHJlYWRvbmx5OiB4WzozMl0sIHMucHRy WzoxNl0pCisgIHsKKyAgICAjcHJhZ21hIGFjYyBjYWNoZSAocmVhZG9ubHk6IHhbOjMyXSkKKyAg fQorICByZXR1cm4gMDsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVz ICIoP24pI3ByYWdtYSBhY2MgcGFyYWxsZWwgbWFwXFwocmVhZG9ubHksdG86XFwqcy5wdHIgXFxc W2xlbjogNjRcXFxdXFwpIC4rIG1hcFxcKHJlYWRvbmx5LHRvOnhcXFxbMFxcXF0gXFxcW2xlbjog MTI4XFxcXVxcKSIgMSAib3JpZ2luYWwiIHsgdGFyZ2V0IHsgYyB9IH0gfSB9ICovCisvKiB7IGRn LWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIig/bikjcHJhZ21hIGFjYyBwYXJhbGxlbCBt YXBcXChyZWFkb25seSx0bzpcXCpOT05fTFZBTFVFX0VYUFIgPHMucHRyPiBcXFxbbGVuOiA2NFxc XF1cXCkgLisgbWFwXFwocmVhZG9ubHksdG86eFxcXFswXFxcXSBcXFxbbGVuOiAxMjhcXFxdXFwp IiAxICJvcmlnaW5hbCIgeyB0YXJnZXQgeyBjKysgfSB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7 IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIoP24pI3ByYWdtYSBhY2MgY2FjaGUgXFwocmVhZG9ubHk6 eFxcXFswXFxcXSBcXFxbbGVuOiAxMjhcXFxdXFwpOyQiIDEgIm9yaWdpbmFsIiB9IH0gKi8KKwor CisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29hY2MvcmVhZG9ubHkt MS5mOTAgYi9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2dvYWNjL3JlYWRvbmx5LTEuZjkwCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wNjlmZWMwYTBkNQotLS0gL2Rl di9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29hY2MvcmVhZG9ubHktMS5m OTAKQEAgLTAsMCArMSwyOCBAQAorISB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLWZkdW1wLXRy ZWUtb3JpZ2luYWwiIH0KKworc3Vicm91dGluZSBmb28gKGEsIG4pCisgIGludGVnZXIgOjogbiwg YSg6KQorICBpbnRlZ2VyIDo6IGksIGIobikKKyAgISRhY2MgcGFyYWxsZWwgY29weWluKHJlYWRv bmx5OiBhKDopLCBiKDpuKSkKKyAgZG8gaSA9IDEsMzIKKyAgICAgISRhY2MgY2FjaGUgKHJlYWRv bmx5OiBhKDopLCBiKDpuKSkKKyAgZW5kZG8KKyAgISRhY2MgZW5kIHBhcmFsbGVsCitlbmQgc3Vi cm91dGluZSBmb28KKworcHJvZ3JhbSBtYWluCisgIGludGVnZXIgOjogaSwgbiA9IDMyLCBhKDMy KQorICBpbnRlZ2VyIDo6IGIoMzIpCisgICEkYWNjIHBhcmFsbGVsIGNvcHlpbihyZWFkb25seTog YSg6MzIpLCBiKDpuKSkKKyAgZG8gaSA9IDEsMzIKKyAgICAgISRhY2MgY2FjaGUgKHJlYWRvbmx5 OiBhKDopLCBiKDpuKSkKKyAgZW5kZG8KKyAgISRhY2MgZW5kIHBhcmFsbGVsCitlbmQgcHJvZ3Jh bSBtYWluCisKKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIoP24pI3ByYWdt YSBhY2MgcGFyYWxsZWwgbWFwXFwocmVhZG9ubHksdG86XFwqXFwoaW50ZWdlclxcKGtpbmQ9NFxc KVxcXFswOlxcXF0gXFwqXFwpIHBhcm0uKmRhdGEgXFxcW2xlbjogLitcXFxdXFwpIC4rIG1hcFxc KHJlYWRvbmx5LHRvOlxcKlxcKGludGVnZXJcXChraW5kPTRcXClcXFxbMDpcXFxdIFxcKlxcKSBw YXJtLipkYXRhIFxcXFtsZW46IC4rXFxcXVxcKSIgMSAib3JpZ2luYWwiIH0gfQorISB7IGRnLWZp bmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIig/bikjcHJhZ21hIGFjYyBwYXJhbGxlbCBtYXBc XChyZWFkb25seSx0bzphXFxcW1xcKFxcKGludGVnZXJcXChraW5kPThcXClcXCkgcGFybS4qZGF0 YSAtIFxcKGludGVnZXJcXChraW5kPThcXClcXCkgJmFcXCkgLyA0XFxcXSBcXFxbbGVuOiAuK1xc XF1cXCkgLisgbWFwXFwocmVhZG9ubHksdG86YlxcXFtcXChcXChpbnRlZ2VyXFwoa2luZD04XFwp XFwpIHBhcm0uKmRhdGEgLSBcXChpbnRlZ2VyXFwoa2luZD04XFwpXFwpICZiXFwpIC8gNFxcXF0g XFxcW2xlbjogLitcXFxdXFwpIiAxICJvcmlnaW5hbCIgfSB9CishIHsgZGctZmluYWwgeyBzY2Fu LXRyZWUtZHVtcC10aW1lcyAiKD9uKSNwcmFnbWEgYWNjIGNhY2hlIFxcKHJlYWRvbmx5OlxcKlxc KGludGVnZXJcXChraW5kPTRcXClcXFxbMDpcXFxdIFxcKlxcKSBwYXJtLipkYXRhIFxcXFtsZW46 IC4rXFxcXVxcKSBcXChyZWFkb25seTpcXCpcXChpbnRlZ2VyXFwoa2luZD00XFwpXFxcWzA6XFxc XSBcXCpcXCkgcGFybS4qZGF0YSBcXFxbbGVuOiAuK1xcXF1cXCk7IiAyICJvcmlnaW5hbCIgfSB9 CisKKworCmRpZmYgLS1naXQgYS9nY2MvdHJlZS1wcmV0dHktcHJpbnQuY2MgYi9nY2MvdHJlZS1w cmV0dHktcHJpbnQuY2MKaW5kZXggMjVkMTkxYjEwZmQuLjk2MDRjM2VlY2M1IDEwMDY0NAotLS0g YS9nY2MvdHJlZS1wcmV0dHktcHJpbnQuY2MKKysrIGIvZ2NjL3RyZWUtcHJldHR5LXByaW50LmNj CkBAIC05MDUsNiArOTA1LDggQEAgZHVtcF9vbXBfY2xhdXNlIChwcmV0dHlfcHJpbnRlciAqcHAs IHRyZWUgY2xhdXNlLCBpbnQgc3BjLCBkdW1wX2ZsYWdzX3QgZmxhZ3MpCiAKICAgICBjYXNlIE9N UF9DTEFVU0VfTUFQOgogICAgICAgcHBfc3RyaW5nIChwcCwgIm1hcCgiKTsKKyAgICAgIGlmIChP TVBfQ0xBVVNFX01BUF9SRUFET05MWSAoY2xhdXNlKSkKKwlwcF9zdHJpbmcgKHBwLCAicmVhZG9u bHksIik7CiAgICAgICBzd2l0Y2ggKE9NUF9DTEFVU0VfTUFQX0tJTkQgKGNsYXVzZSkpCiAJewog CWNhc2UgR09NUF9NQVBfQUxMT0M6CkBAIC0xMDc1LDYgKzEwNzcsOCBAQCBkdW1wX29tcF9jbGF1 c2UgKHByZXR0eV9wcmludGVyICpwcCwgdHJlZSBjbGF1c2UsIGludCBzcGMsIGR1bXBfZmxhZ3Nf dCBmbGFncykKIAogICAgIGNhc2UgT01QX0NMQVVTRV9fQ0FDSEVfOgogICAgICAgcHBfc3RyaW5n IChwcCwgIigiKTsKKyAgICAgIGlmIChPTVBfQ0xBVVNFX19DQUNIRV9fUkVBRE9OTFkgKGNsYXVz ZSkpCisJcHBfc3RyaW5nIChwcCwgInJlYWRvbmx5OiIpOwogICAgICAgZHVtcF9nZW5lcmljX25v ZGUgKHBwLCBPTVBfQ0xBVVNFX0RFQ0wgKGNsYXVzZSksCiAJCQkgc3BjLCBmbGFncywgZmFsc2Up OwogICAgICAgZ290byBwcmludF9jbGF1c2Vfc2l6ZTsKZGlmZiAtLWdpdCBhL2djYy90cmVlLmgg Yi9nY2MvdHJlZS5oCmluZGV4IDRjMDQyNDVlMmIxLi4xMzAxNDkxNTg3ZiAxMDA2NDQKLS0tIGEv Z2NjL3RyZWUuaAorKysgYi9nY2MvdHJlZS5oCkBAIC0xODExLDYgKzE4MTEsMTQgQEAgY2xhc3Mg YXV0b19zdXBwcmVzc19sb2NhdGlvbl93cmFwcGVycwogI2RlZmluZSBPTVBfQ0xBVVNFX01BUF9E RUNMX01BS0VfQUREUkVTU0FCTEUoTk9ERSkgXAogICAoT01QX0NMQVVTRV9TVUJDT0RFX0NIRUNL IChOT0RFLCBPTVBfQ0xBVVNFX01BUCktPmJhc2UuYWRkcmVzc2FibGVfZmxhZykKIAorLyogTm9u emVybyBpZiBPcGVuQUNDICdyZWFkb25seScgbW9kaWZpZXIgc2V0LCB1c2VkIGZvciAnY29weWlu Jy4gICovCisjZGVmaW5lIE9NUF9DTEFVU0VfTUFQX1JFQURPTkxZKE5PREUpIFwKKyAgVFJFRV9O T1RIUk9XIChPTVBfQ0xBVVNFX1NVQkNPREVfQ0hFQ0sgKE5PREUsIE9NUF9DTEFVU0VfTUFQKSkK KworLyogU2FtZSBhcyBhYm92ZSwgZm9yIHVzZSBpbiBPcGVuQUNDIGNhY2hlIGRpcmVjdGl2ZXMu ICAqLworI2RlZmluZSBPTVBfQ0xBVVNFX19DQUNIRV9fUkVBRE9OTFkoTk9ERSkgXAorICBUUkVF X05PVEhST1cgKE9NUF9DTEFVU0VfU1VCQ09ERV9DSEVDSyAoTk9ERSwgT01QX0NMQVVTRV9fQ0FD SEVfKSkKKwogLyogVHJ1ZSBvbiBhbiBPTVBfQ0xBVVNFX1VTRV9ERVZJQ0VfUFRSIHdpdGggYW4g T3BlbkFDQyAnaWZfcHJlc2VudCcKICAgIGNsYXVzZS4gICovCiAjZGVmaW5lIE9NUF9DTEFVU0Vf VVNFX0RFVklDRV9QVFJfSUZfUFJFU0VOVChOT0RFKSBcCg== --------------zx7P28bx3js3YBDFQ757ciaI--