From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2041.outbound.protection.outlook.com [40.107.92.41]) by sourceware.org (Postfix) with ESMTPS id 1897B386EC59 for ; Wed, 19 Aug 2020 15:25:15 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 1897B386EC59 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=amd.com Authentication-Results: sourceware.org; spf=none smtp.mailfrom=AlokKumar.Sharma@amd.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=c/v5vkyZI8Ff6E3vGLQ/GHUdblfTs05Ey2HVlaHitWkZwDpgnmPajt7G9RrVJskdQnO9SCvqN0kGa8eAjrbWv+LSgCTmUyPNTfSY/12dm9yihWNjp2UtgYPPn3ahNykM7hoi/naIMhRRhKbALO/i6hd8IrVYwre3+QqC4GGgUZ1rey+iWEQD9FzKir/DR58+di7g9UsXLkxsNRF/AByxnCB4ovun2sDh+4or49BcnbetUbSdXwg/q+XG4ed3JYbBPx0h868vUY3Rf46V/gRZRPZHcMiAZLDm1wwYH48ifIooErZBCSXMScD8WyE4KoZvXDkQ3lkSfEfUbRUKnanTvQ== 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-SenderADCheck; bh=BKaGFoGkvLlGmmNi5vWNndMJ+p0k+oMdLfhPZw8FXrs=; b=Ow3bYwqJOL574XVtd3/556qqz24viaqUMdzFokUgnWrRpDhVDtOap+Z9qGcYPrfXmA4FcUEm9VN2D8EK+puCKhOBH7yx7EI/RmB7ioxnZLOKDQ5CbCxLJEszFWuXmwzmLaTlrvoIjjbpBoqOybN3mnSgYwkBi2zn/W3cbSweeQfENfoRq7R3fknausDUdZoxC7uFy3LF5Kyu9dMqtPjVfkV77RT9a3tgZvqHI9bhXci9pC9QtyEL+XbkjUZLtxeLN5jcy58sN2P5979neEkBWKevS66pTDpBWWqR40mAACU+EIiSqoC+GPnLBvhtP24QVjAkb17bhJtJcHwOAXQmAA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=BKaGFoGkvLlGmmNi5vWNndMJ+p0k+oMdLfhPZw8FXrs=; b=0ZIhgsjAls3aIqyxKxuM33XqIrcS4ong72lRyeb7yr0WJkIOY3lTCozpf5QYoBgoKLyNnHffrKLlrURChDB709tOFQ5eF1dw779YamBJYmJGVs4ZWTCNKetcnCDmgogVnUcPv04/MKxnfcNlO1aWCv8VdS9zrw+7+GkwrsmDVnc= Received: from DM5PR12MB1644.namprd12.prod.outlook.com (2603:10b6:4:f::17) by DM6PR12MB4218.namprd12.prod.outlook.com (2603:10b6:5:21b::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3283.18; Wed, 19 Aug 2020 15:25:10 +0000 Received: from DM5PR12MB1644.namprd12.prod.outlook.com ([fe80::75a2:2c3a:92d3:7324]) by DM5PR12MB1644.namprd12.prod.outlook.com ([fe80::75a2:2c3a:92d3:7324%12]) with mapi id 15.20.3283.028; Wed, 19 Aug 2020 15:25:10 +0000 From: "Sharma, Alok Kumar" To: Andrew Burgess CC: Tom Tromey , "gdb-patches@sourceware.org" , "George, Jini Susan" , "Achra, Nitika" Subject: RE: [PATCH] Fix for incorrect breakpoint set in case of flang compiled binary Thread-Topic: [PATCH] Fix for incorrect breakpoint set in case of flang compiled binary Thread-Index: AdZ0qFa5g9X1JOhZT2iGdRxV4w0gXAAog3iAAAR+/EAAM2nhgAAEgXIA Date: Wed, 19 Aug 2020 15:25:10 +0000 Message-ID: References: <20200818102903.GL853475@embecosm.com> <20200819130955.GN853475@embecosm.com> In-Reply-To: <20200819130955.GN853475@embecosm.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: MSIP_Label_f2ed062d-8486-4f50-a4f1-3cce0dd00d64_Enabled=true; MSIP_Label_f2ed062d-8486-4f50-a4f1-3cce0dd00d64_SetDate=2020-08-19T15:19:33Z; MSIP_Label_f2ed062d-8486-4f50-a4f1-3cce0dd00d64_Method=Privileged; MSIP_Label_f2ed062d-8486-4f50-a4f1-3cce0dd00d64_Name=Non-Business; MSIP_Label_f2ed062d-8486-4f50-a4f1-3cce0dd00d64_SiteId=3dd8961f-e488-4e60-8e11-a82d994e183d; MSIP_Label_f2ed062d-8486-4f50-a4f1-3cce0dd00d64_ActionId=fdf4650c-e971-4f8c-8fa0-00001561c26e; MSIP_Label_f2ed062d-8486-4f50-a4f1-3cce0dd00d64_ContentBits=0 msip_label_f2ed062d-8486-4f50-a4f1-3cce0dd00d64_enabled: true msip_label_f2ed062d-8486-4f50-a4f1-3cce0dd00d64_setdate: 2020-08-19T15:25:06Z msip_label_f2ed062d-8486-4f50-a4f1-3cce0dd00d64_method: Privileged msip_label_f2ed062d-8486-4f50-a4f1-3cce0dd00d64_name: Non-Business msip_label_f2ed062d-8486-4f50-a4f1-3cce0dd00d64_siteid: 3dd8961f-e488-4e60-8e11-a82d994e183d msip_label_f2ed062d-8486-4f50-a4f1-3cce0dd00d64_actionid: 11e55349-75c9-4f94-8a23-00007beb8d94 msip_label_f2ed062d-8486-4f50-a4f1-3cce0dd00d64_contentbits: 0 authentication-results: embecosm.com; dkim=none (message not signed) header.d=none;embecosm.com; dmarc=none action=none header.from=amd.com; x-originating-ip: [103.139.56.83] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: dfe182ab-cac9-4dc5-0fe6-08d844540fc7 x-ms-traffictypediagnostic: DM6PR12MB4218: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: VCJ/C34NkT24bBFQjAhKPZv6BMiPrLzIz9p27sWejV+65pwkpArusKHU/48eXTxZij+0yiMWJALSZtQGmENKuo848Ot85aeU1eoYswiEnpgN5hiKXOBDtBRTyHcA133fUIVAlfcDcPImAkmcfRG69Gd7wFJGCLAvEDnphWeVvtSnIgXuT19/TRPGYKNwtgexXj+racs+vjOOMR8TKoSlY61R4d6mfLBzzlYxYyWhKgiaoRO2wBrKsF32KLD+eZuCsAL8RVnKAvBlzBvAwUY9HNbq71sqeOC18HT+K0cOeUU8dHVy5lKDitjaC6DU5LLWx4lAZ/4rXdAn6oUFjxFKpg== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM5PR12MB1644.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(396003)(366004)(376002)(136003)(346002)(39860400002)(66446008)(7696005)(66476007)(64756008)(8676002)(66616009)(186003)(66946007)(55016002)(76116006)(5660300002)(8936002)(316002)(6916009)(2906002)(86362001)(478600001)(53546011)(6506007)(71200400001)(9686003)(26005)(66556008)(33656002)(83380400001)(4326008)(52536014)(99936003)(54906003); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata: fA+vNbp+mhh40E7ucfwIoyYQtV9CoxhnK2H1BlMDqp/9wwWNeteow3oMsVQGL96EUalM6AB3EOP6XA9ArlFuX4t0Y4D9le4F7NcQUdTwh9tHVp2Zbqt2E1Xx0FBUDJTtgC+9cTZa1WF9vIaSQgLims+5VLl/GYTf/nCu9yResFU5I9OxO8sNIraDn/m9Y0pM9Frp7bETxp2uwqWQgfu9V282bc89vicBxIFKNtckojjJpn1+f0MU25ud4hVdx/bsdRcnVxDglZYelIDQHlVM+l7GVzDUeagl9BQRF+hL4au/rWf4/lqxN+hQxxaLo4oNvoPT+XTuRcoQbk9Wz5jei49KrbCV3RlvAWXZgcXsDbsXdlSQSp19GP/XaQIEEUDk5tFeR153hyUuIJq47UMorOtV0VRloHJ8+D6dQLu8tp/rZvOVExl5wucV3sHY3jhtcWD2pKKWKWCoeZQehj4vNttalQ3YuGrSgJWgbnGitblIh8Vr5a+6b4Ejjx1oWbgDMfJqbyelUgevmtvlRLh5rdmroP6vTrcCUj1hyMXDOkZnTkknKRUO/gionOypmhVbkDDiyMzHDRquA7g4sVkEHBPbmsD2b7zhErJEU9lisd0islRivUVoV3tcGkV7Tx0mngajZ/ZjCUkecQ4iS3XZAw== Content-Type: multipart/mixed; boundary="_002_DM5PR12MB16445A31582ADF522A8D19419E5D0DM5PR12MB1644namp_" MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM5PR12MB1644.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: dfe182ab-cac9-4dc5-0fe6-08d844540fc7 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Aug 2020 15:25:10.3821 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: WCTFf0iSiVqVzIdMzYB2JTj2fafcqN/Qf3+vr1vaM+SpBBTT5YVaGqgKIjZ5NyYhZ/XCHO45jwSLSjMYxdn4jA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4218 X-Spam-Status: No, score=-5.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FORGED_SPF_HELO, GIT_PATCH_0, KAM_ASCII_DIVIDERS, RCVD_IN_ABUSEAT, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, RCVD_IN_SBL_CSS, SPF_HELO_PASS, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 19 Aug 2020 15:25:17 -0000 --_002_DM5PR12MB16445A31582ADF522A8D19419E5D0DM5PR12MB1644namp_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Thanks Andrew. Please find the updated patch. I shall be committing this. gdb/ChangeLog * amd64-tdep.c (amd64_skip_prologue): Using symbol table to find the end of prologue for flang compiled binaries. * arm-tdep.c (arm_skip_prologue): Likewise. * i386-tdep.c (i386_skip_prologue): Likewise. * producer.c (producer_is_llvm): New function. (producer_parsing_tests): Added new tests for clang/flang. * producer.h (producer_is_llvm): New declaration. gdb/testsuite/ChangeLog * gdb.fortran/vla-type.exp: Skip commands not required for the Flang compiled binaries after prologue fix. Regards, Alok -----Original Message----- From: Andrew Burgess =20 Sent: Wednesday, August 19, 2020 6:40 PM To: Sharma, Alok Kumar Cc: Tom Tromey ; gdb-patches@sourceware.org; George, Jini S= usan ; Achra, Nitika Subject: Re: [PATCH] Fix for incorrect breakpoint set in case of flang comp= iled binary [CAUTION: External Email] * Sharma, Alok Kumar [2020-08-18 12:53:10 +0000]= : > Thanks Tom and Andrew for your comments. Hopefully addressed in the attac= hed updated patch. > > Please find my below answers for your queries. > > > We have the files producer.{c,h} that wrap up tests just like this one.= If feels like we should add a new test to those files that matches all cl= ang backend based compilers, then make use of this new test throughout. > > I'd keep the name of the test fairly generic, the important thing here = is the backend technology right, not the frontend language? So if I added = a new language with a clang backend I'd likely run into the same issues. > Thanks for your suggestion. I have updated the patch for same. > > > Space before "(". > Though the code is moved, I have taken care of the comment in general. > > > Does it really start with a space? That seems weird. > Agreed but it has space at the start. > > >> +# break main for Flang compiler already breaks here > > Do you know why? > Line number 46 is the place where breakpoint to main is hit for Flang com= piled binary and that looks Okey. > Below is the snippet from gdb.fortran/ > ------------------------------------------ > 16 program vla_struct > 17 type :: one > 18 integer, allocatable :: ivla (:, :, :) > 19 end type one > 20 type :: two > 21 integer, allocatable :: ivla1 (:, :, :) > 22 integer, allocatable :: ivla2 (:, :) > 23 end type two > 24 type :: three > 25 integer :: ivar > 26 integer, allocatable :: ivla (:) > 27 end type three > 28 type :: four > 29 integer, allocatable :: ivla (:) > 30 integer :: ivar > 31 end type four > 32 type :: five > 33 type(one) :: tone > 34 end type five > 35 > 36 type(one), target :: onev > 37 type(two) :: twov > 38 type(three) :: threev > 39 type(four) :: fourv > 40 type(five) :: fivev > 41 type(five) :: fivearr (2) > 42 type(five), allocatable :: fivedynarr (:) > 43 logical :: l > 44 integer :: i, j > 45 > 46 allocate (onev%ivla (11,22,33)) ! before-allocated > 47 l =3D allocated(onev%ivla) > 48 > ------------------------------------------ > > gdb/ChangeLog > > * amd64-tdep.c (amd64_skip_prologue): Using symbol table > to find the end of prologue for flang compiled binaries. > * arm-tdep.c (arm_skip_prologue): Likewise. > * i386-tdep.c (i386_skip_prologue): Likewise. > * producer.c (producer_is_llvm): New function. > (producer_parsing_tests): Added new tests for clang/flang. > * producer.h (producer_is_llvm): New declaration. > > gdb/testsuite/ChangeLog > > * gdb.fortran/vla-type.exp: Skip commands not required for > the Flang compiled binaries after prologue fix. This looks good to me with two minor nits fixed. > diff --git a/gdb/amd64-tdep.c b/gdb/amd64-tdep.c index=20 > 768fe63bdd..59f7c9f885 100644 > --- a/gdb/amd64-tdep.c > +++ b/gdb/amd64-tdep.c > @@ -2547,12 +2547,13 @@ amd64_skip_prologue (struct gdbarch *gdbarch, COR= E_ADDR start_pc) > =3D skip_prologue_using_sal (gdbarch, func_addr); > struct compunit_symtab *cust =3D find_pc_compunit_symtab=20 > (func_addr); > > - /* Clang always emits a line note before the prologue and another > - one after. We trust clang to emit usable line notes. */ > + /* LLVM backend (Clang/Flang) always emits a line note before the > + prologue and another one after. We trust clang to emit usable > + line notes. */ > if (post_prologue_pc > && (cust !=3D NULL > && COMPUNIT_PRODUCER (cust) !=3D NULL > - && startswith (COMPUNIT_PRODUCER (cust), "clang "))) > + && producer_is_llvm (COMPUNIT_PRODUCER (cust)))) > return std::max (start_pc, post_prologue_pc); > } > > diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c index=20 > 9cedcc8575..074eedb480 100644 > --- a/gdb/arm-tdep.c > +++ b/gdb/arm-tdep.c > @@ -60,6 +60,8 @@ > #include "record-full.h" > #include > > +#include "producer.h" > + > #if GDB_SELF_TEST > #include "gdbsupport/selftest.h" > #endif > @@ -1351,7 +1353,7 @@ arm_skip_prologue (struct gdbarch *gdbarch, CORE_AD= DR pc) > && (cust =3D=3D NULL > || COMPUNIT_PRODUCER (cust) =3D=3D NULL > || startswith (COMPUNIT_PRODUCER (cust), "GNU ") > - || startswith (COMPUNIT_PRODUCER (cust), "clang "))) > + || producer_is_llvm (COMPUNIT_PRODUCER (cust)))) > return post_prologue_pc; > > if (post_prologue_pc !=3D 0) > diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c index=20 > 9b905c1996..d9fa2b9264 100644 > --- a/gdb/i386-tdep.c > +++ b/gdb/i386-tdep.c > @@ -65,6 +65,7 @@ > #include > #include > #include > +#include "producer.h" > > /* Register names. */ > > @@ -1847,12 +1848,13 @@ i386_skip_prologue (struct gdbarch *gdbarch, CORE= _ADDR start_pc) > =3D skip_prologue_using_sal (gdbarch, func_addr); > struct compunit_symtab *cust =3D find_pc_compunit_symtab=20 > (func_addr); > > - /* Clang always emits a line note before the prologue and another > - one after. We trust clang to emit usable line notes. */ > + /* LLVM backend (Clang/Flang) always emits a line note before the > + prologue and another one after. We trust clang to emit usable > + line notes. */ > if (post_prologue_pc > && (cust !=3D NULL > && COMPUNIT_PRODUCER (cust) !=3D NULL > - && startswith (COMPUNIT_PRODUCER (cust), "clang "))) > + && producer_is_llvm (COMPUNIT_PRODUCER (cust)))) > return std::max (start_pc, post_prologue_pc); > } > > diff --git a/gdb/producer.c b/gdb/producer.c index=20 > 735a928f33..fe89e7d536 100644 > --- a/gdb/producer.c > +++ b/gdb/producer.c > @@ -125,6 +125,18 @@ producer_is_icc (const char *producer, int *major, i= nt *minor) > return false; > } > > +/* See producer.h. */ > + > +bool > +producer_is_llvm (const char *producer) { > + if (producer =3D=3D NULL || !(startswith (producer, "clang ") > + || startswith (producer, " F90 Flang "))) > + return false; > + > + return true; I'm really not a fan of 'if (condition) return condition' type code, I'd ra= ther see just: return !(producer =3D=3D NULL || !(startswith (producer, "clang ") || startswith (producer, " F90 Flang "))); > +} > + > #if defined GDB_SELF_TEST > namespace selftests { > namespace producer { > @@ -203,6 +215,22 @@ Version 18.0 Beta"; > SELF_CHECK (producer_is_gcc (gnu_exp, &major, &minor) > && major =3D=3D 5 && minor =3D=3D 0); > } > + > + { > + static const char clang_llvm_exp[] =3D "clang version 12.0.0 (CLANG:= bld#8)"; > + int major =3D 0, minor =3D 0; > + SELF_CHECK (!producer_is_icc (clang_llvm_exp, NULL, NULL)); > + SELF_CHECK (!producer_is_gcc (clang_llvm_exp, &major, &minor)); > + SELF_CHECK (producer_is_llvm (clang_llvm_exp)); } > + > + { > + static const char flang_llvm_exp[] =3D " F90 Flang - 1.5 2017-05-01"= ; > + int major =3D 0, minor =3D 0; > + SELF_CHECK (!producer_is_icc (flang_llvm_exp, NULL, NULL)); > + SELF_CHECK (!producer_is_gcc (flang_llvm_exp, &major, &minor)); > + SELF_CHECK (producer_is_llvm (flang_llvm_exp)); } > } > } > } > diff --git a/gdb/producer.h b/gdb/producer.h index=20 > d8974d3814..e9bc309b0c 100644 > --- a/gdb/producer.h > +++ b/gdb/producer.h > @@ -52,4 +52,8 @@ extern int producer_is_gcc (const char *producer, int *= major, int *minor); > running on Intel(R) 64, Version 18.0 Beta ....". */ extern=20 > bool producer_is_icc (const char *producer, int *major, int *minor); > > +/* Returns true if the given PRODUCER string is LLVM (clang/flang) or > + false otherwise.*/ Two whitespace after the final '.' here. Thanks, Andrew > +extern bool producer_is_llvm (const char *producer); > + > #endif > diff --git a/gdb/testsuite/gdb.fortran/vla-type.exp=20 > b/gdb/testsuite/gdb.fortran/vla-type.exp > index 925c583edc..e2b8d71b4c 100755 > --- a/gdb/testsuite/gdb.fortran/vla-type.exp > +++ b/gdb/testsuite/gdb.fortran/vla-type.exp > @@ -33,8 +33,12 @@ set int [fortran_int4] > > # Check if not allocated VLA in type does not break # the debugger=20 > when accessing it. > -gdb_breakpoint [gdb_get_line_number "before-allocated"]=20 > -gdb_continue_to_breakpoint "before-allocated" > +# break main for Flang compiler already breaks here if=20 > +![test_compiler_info "clang-*"] { > + gdb_breakpoint [gdb_get_line_number "before-allocated"] > + gdb_continue_to_breakpoint "before-allocated" > +} > + > gdb_test "print twov" " =3D \\\( ivla1 =3D , ivla2 =3D \\\)" \ > "print twov before allocated" > gdb_test "print twov%ivla1" " =3D " \ > -- > 2.17.1 --_002_DM5PR12MB16445A31582ADF522A8D19419E5D0DM5PR12MB1644namp_ Content-Type: application/octet-stream; name="0001-Fix-for-incorrect-breakpoint-set-in-case-of-flang-co.patch" Content-Description: 0001-Fix-for-incorrect-breakpoint-set-in-case-of-flang-co.patch Content-Disposition: attachment; filename="0001-Fix-for-incorrect-breakpoint-set-in-case-of-flang-co.patch"; size=8165; creation-date="Mon, 17 Aug 2020 15:07:36 GMT"; modification-date="Wed, 19 Aug 2020 15:15:01 GMT" Content-Transfer-Encoding: base64 RnJvbSBhOWJlNWI5ZjIzMjJiMTdhNzQ1NTQ4MjhlYTM3YzM5YzZlNTQ0MjY1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbG9rIEt1bWFyIFNoYXJtYSA8QWxva0t1bWFyLlNoYXJtYUBh bWQuY29tPgpEYXRlOiBNb24sIDE3IEF1ZyAyMDIwIDE3OjA0OjExICswNTMwClN1YmplY3Q6IFtQ QVRDSF0gRml4IGZvciBpbmNvcnJlY3QgYnJlYWtwb2ludCBzZXQgaW4gY2FzZSBvZiBmbGFuZyBj b21waWxlZAogYmluYXJ5CgogIEN1cnJlbnRseSwgR0RCIGlzIG5vdCBhYmxlIHRvIHNldCBhIGJy ZWFrcG9pbnQgYXQgc3VicHJvZ3JhbSBwb3N0CnByb2xvZ3VlIGZvciBmbGFuZyBnZW5lcmF0ZWQg YmluYXJpZXMuIFRoaXMgaXMgZHVlIHRvIGNsYW5nIGhhdmluZwp0d28gbGluZSBub3RlcyBvbmUg YmVmb3JlIGFuZCBhbm90aGVyIGFmdGVyIHRoZSBwcm9sb2d1ZS4KICBOb3cgdGhlIGVuZCBvZiBw cm9sb2d1ZSBpcyBkZXRlcm1pbmVkIHVzaW5nIHN5bWJvbCB0YWJsZSwgd2hpY2ggd2FzCnRoZSB3 YXkgZm9yIGNsYW5nIGdlbmVyYXRlZCBiaW5hcmllcyBhbHJlYWR5LiBTaW5jZSBjbGFuZyBhbmQg ZmxhbmcKYm90aCBzaGFyZSBzYW1lIGJhY2stZW5kIGl0IGlzIHRydWUgZm9yIGZsYW5nIGFzIHdl bGwuCgpnZGIvQ2hhbmdlTG9nCgogICAgICAqIGFtZDY0LXRkZXAuYyAoYW1kNjRfc2tpcF9wcm9s b2d1ZSk6IFVzaW5nIHN5bWJvbCB0YWJsZQogICAgICB0byBmaW5kIHRoZSBlbmQgb2YgcHJvbG9n dWUgZm9yIGZsYW5nIGNvbXBpbGVkIGJpbmFyaWVzLgogICAgICAqIGFybS10ZGVwLmMgKGFybV9z a2lwX3Byb2xvZ3VlKTogTGlrZXdpc2UuCiAgICAgICogaTM4Ni10ZGVwLmMgKGkzODZfc2tpcF9w cm9sb2d1ZSk6IExpa2V3aXNlLgogICAgICAqIHByb2R1Y2VyLmMgKHByb2R1Y2VyX2lzX2xsdm0p OiBOZXcgZnVuY3Rpb24uCiAgICAgIChwcm9kdWNlcl9wYXJzaW5nX3Rlc3RzKTogQWRkZWQgbmV3 IHRlc3RzIGZvciBjbGFuZy9mbGFuZy4KICAgICAgKiBwcm9kdWNlci5oIChwcm9kdWNlcl9pc19s bHZtKTogTmV3IGRlY2xhcmF0aW9uLgoKZ2RiL3Rlc3RzdWl0ZS9DaGFuZ2VMb2cKCiAgICAgICog Z2RiLmZvcnRyYW4vdmxhLXR5cGUuZXhwOiBTa2lwIGNvbW1hbmRzIG5vdCByZXF1aXJlZCBmb3IK ICAgICAgdGhlIEZsYW5nIGNvbXBpbGVkIGJpbmFyaWVzIGFmdGVyIHByb2xvZ3VlIGZpeC4KCkNo YW5nZS1JZDogSTU2MDlmOTc5MzE1ZWZmYzIxM2ZlZWI2ZGRlNmEwMWEwMjRlMGM0ODcKLS0tCiBn ZGIvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwICsrKysrKysrKysKIGdk Yi9hbWQ2NC10ZGVwLmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDcgKysrKy0tLQogZ2RiL2Fy bS10ZGVwLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNCArKystCiBnZGIvaTM4Ni10ZGVw LmMgICAgICAgICAgICAgICAgICAgICAgICB8ICA4ICsrKysrLS0tCiBnZGIvcHJvZHVjZXIuYyAg ICAgICAgICAgICAgICAgICAgICAgICB8IDI1ICsrKysrKysrKysrKysrKysrKysrKysrKysKIGdk Yi9wcm9kdWNlci5oICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQgKysrKwogZ2RiL3Rlc3Rz dWl0ZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgfCAgNSArKysrKwogZ2RiL3Rlc3RzdWl0ZS9n ZGIuZm9ydHJhbi92bGEtdHlwZS5leHAgfCAgOCArKysrKystLQogOCBmaWxlcyBjaGFuZ2VkLCA2 MiBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2dkYi9DaGFuZ2VM b2cgYi9nZGIvQ2hhbmdlTG9nCmluZGV4IGNkOTUwMjg3ZWMuLmFlZTI1Nzg3YjAgMTAwNjQ0Ci0t LSBhL2dkYi9DaGFuZ2VMb2cKKysrIGIvZ2RiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisy MDIwLTA4LTE5ICBBbG9rIEt1bWFyIFNoYXJtYSAgPEFsb2tLdW1hci5TaGFybWFAYW1kLmNvbT4K KworCSogYW1kNjQtdGRlcC5jIChhbWQ2NF9za2lwX3Byb2xvZ3VlKTogVXNpbmcgc3ltYm9sIHRh YmxlCisJdG8gZmluZCB0aGUgZW5kIG9mIHByb2xvZ3VlIGZvciBmbGFuZyBjb21waWxlZCBiaW5h cmllcy4KKwkqIGFybS10ZGVwLmMgKGFybV9za2lwX3Byb2xvZ3VlKTogTGlrZXdpc2UuCisJKiBp Mzg2LXRkZXAuYyAoaTM4Nl9za2lwX3Byb2xvZ3VlKTogTGlrZXdpc2UuCisJKiBwcm9kdWNlci5j IChwcm9kdWNlcl9pc19sbHZtKTogTmV3IGZ1bmN0aW9uLgorCShwcm9kdWNlcl9wYXJzaW5nX3Rl c3RzKTogQWRkZWQgbmV3IHRlc3RzIGZvciBjbGFuZy9mbGFuZy4KKwkqIHByb2R1Y2VyLmggKHBy b2R1Y2VyX2lzX2xsdm0pOiBOZXcgZGVjbGFyYXRpb24uCisKIDIwMjAtMDgtMTggIFNpbW9uIE1h cmNoaSAgPHNpbW9uLm1hcmNoaUBlZmZpY2lvcy5jb20+CiAKIAkqIGxpbnV4LW5hdC5jIChsaW51 eF9uYXRfZGVidWdfcHJpbnRmKTogTmV3IGZ1bmN0aW9uLgpkaWZmIC0tZ2l0IGEvZ2RiL2FtZDY0 LXRkZXAuYyBiL2dkYi9hbWQ2NC10ZGVwLmMKaW5kZXggNzY4ZmU2M2JkZC4uNTlmN2M5Zjg4NSAx MDA2NDQKLS0tIGEvZ2RiL2FtZDY0LXRkZXAuYworKysgYi9nZGIvYW1kNjQtdGRlcC5jCkBAIC0y NTQ3LDEyICsyNTQ3LDEzIEBAIGFtZDY0X3NraXBfcHJvbG9ndWUgKHN0cnVjdCBnZGJhcmNoICpn ZGJhcmNoLCBDT1JFX0FERFIgc3RhcnRfcGMpCiAJPSBza2lwX3Byb2xvZ3VlX3VzaW5nX3NhbCAo Z2RiYXJjaCwgZnVuY19hZGRyKTsKICAgICAgIHN0cnVjdCBjb21wdW5pdF9zeW10YWIgKmN1c3Qg PSBmaW5kX3BjX2NvbXB1bml0X3N5bXRhYiAoZnVuY19hZGRyKTsKIAotICAgICAgLyogQ2xhbmcg YWx3YXlzIGVtaXRzIGEgbGluZSBub3RlIGJlZm9yZSB0aGUgcHJvbG9ndWUgYW5kIGFub3RoZXIK LQkgb25lIGFmdGVyLiAgV2UgdHJ1c3QgY2xhbmcgdG8gZW1pdCB1c2FibGUgbGluZSBub3Rlcy4g ICovCisgICAgICAvKiBMTFZNIGJhY2tlbmQgKENsYW5nL0ZsYW5nKSBhbHdheXMgZW1pdHMgYSBs aW5lIG5vdGUgYmVmb3JlIHRoZQorICAgICAgICAgcHJvbG9ndWUgYW5kIGFub3RoZXIgb25lIGFm dGVyLiAgV2UgdHJ1c3QgY2xhbmcgdG8gZW1pdCB1c2FibGUKKyAgICAgICAgIGxpbmUgbm90ZXMu ICAqLwogICAgICAgaWYgKHBvc3RfcHJvbG9ndWVfcGMKIAkgICYmIChjdXN0ICE9IE5VTEwKIAkg ICAgICAmJiBDT01QVU5JVF9QUk9EVUNFUiAoY3VzdCkgIT0gTlVMTAotCSAgICAgICYmIHN0YXJ0 c3dpdGggKENPTVBVTklUX1BST0RVQ0VSIChjdXN0KSwgImNsYW5nICIpKSkKKwkgICAgICAmJiBw cm9kdWNlcl9pc19sbHZtIChDT01QVU5JVF9QUk9EVUNFUiAoY3VzdCkpKSkKICAgICAgICAgcmV0 dXJuIHN0ZDo6bWF4IChzdGFydF9wYywgcG9zdF9wcm9sb2d1ZV9wYyk7CiAgICAgfQogCmRpZmYg LS1naXQgYS9nZGIvYXJtLXRkZXAuYyBiL2dkYi9hcm0tdGRlcC5jCmluZGV4IDljZWRjYzg1NzUu LjA3NGVlZGI0ODAgMTAwNjQ0Ci0tLSBhL2dkYi9hcm0tdGRlcC5jCisrKyBiL2dkYi9hcm0tdGRl cC5jCkBAIC02MCw2ICs2MCw4IEBACiAjaW5jbHVkZSAicmVjb3JkLWZ1bGwuaCIKICNpbmNsdWRl IDxhbGdvcml0aG0+CiAKKyNpbmNsdWRlICJwcm9kdWNlci5oIgorCiAjaWYgR0RCX1NFTEZfVEVT VAogI2luY2x1ZGUgImdkYnN1cHBvcnQvc2VsZnRlc3QuaCIKICNlbmRpZgpAQCAtMTM1MSw3ICsx MzUzLDcgQEAgYXJtX3NraXBfcHJvbG9ndWUgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBDT1JF X0FERFIgcGMpCiAJICAmJiAoY3VzdCA9PSBOVUxMCiAJICAgICAgfHwgQ09NUFVOSVRfUFJPRFVD RVIgKGN1c3QpID09IE5VTEwKIAkgICAgICB8fCBzdGFydHN3aXRoIChDT01QVU5JVF9QUk9EVUNF UiAoY3VzdCksICJHTlUgIikKLQkgICAgICB8fCBzdGFydHN3aXRoIChDT01QVU5JVF9QUk9EVUNF UiAoY3VzdCksICJjbGFuZyAiKSkpCisJICAgICAgfHwgcHJvZHVjZXJfaXNfbGx2bSAoQ09NUFVO SVRfUFJPRFVDRVIgKGN1c3QpKSkpCiAJcmV0dXJuIHBvc3RfcHJvbG9ndWVfcGM7CiAKICAgICAg IGlmIChwb3N0X3Byb2xvZ3VlX3BjICE9IDApCmRpZmYgLS1naXQgYS9nZGIvaTM4Ni10ZGVwLmMg Yi9nZGIvaTM4Ni10ZGVwLmMKaW5kZXggOWI5MDVjMTk5Ni4uZDlmYTJiOTI2NCAxMDA2NDQKLS0t IGEvZ2RiL2kzODYtdGRlcC5jCisrKyBiL2dkYi9pMzg2LXRkZXAuYwpAQCAtNjUsNiArNjUsNyBA QAogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHVu b3JkZXJlZF9zZXQ+CisjaW5jbHVkZSAicHJvZHVjZXIuaCIKIAogLyogUmVnaXN0ZXIgbmFtZXMu ICAqLwogCkBAIC0xODQ3LDEyICsxODQ4LDEzIEBAIGkzODZfc2tpcF9wcm9sb2d1ZSAoc3RydWN0 IGdkYmFyY2ggKmdkYmFyY2gsIENPUkVfQUREUiBzdGFydF9wYykKIAk9IHNraXBfcHJvbG9ndWVf dXNpbmdfc2FsIChnZGJhcmNoLCBmdW5jX2FkZHIpOwogICAgICAgc3RydWN0IGNvbXB1bml0X3N5 bXRhYiAqY3VzdCA9IGZpbmRfcGNfY29tcHVuaXRfc3ltdGFiIChmdW5jX2FkZHIpOwogCi0gICAg ICAvKiBDbGFuZyBhbHdheXMgZW1pdHMgYSBsaW5lIG5vdGUgYmVmb3JlIHRoZSBwcm9sb2d1ZSBh bmQgYW5vdGhlcgotCSBvbmUgYWZ0ZXIuICBXZSB0cnVzdCBjbGFuZyB0byBlbWl0IHVzYWJsZSBs aW5lIG5vdGVzLiAgKi8KKyAgICAgIC8qIExMVk0gYmFja2VuZCAoQ2xhbmcvRmxhbmcpIGFsd2F5 cyBlbWl0cyBhIGxpbmUgbm90ZSBiZWZvcmUgdGhlCisgICAgICAgICBwcm9sb2d1ZSBhbmQgYW5v dGhlciBvbmUgYWZ0ZXIuICBXZSB0cnVzdCBjbGFuZyB0byBlbWl0IHVzYWJsZQorICAgICAgICAg bGluZSBub3Rlcy4gICovCiAgICAgICBpZiAocG9zdF9wcm9sb2d1ZV9wYwogCSAgJiYgKGN1c3Qg IT0gTlVMTAogCSAgICAgICYmIENPTVBVTklUX1BST0RVQ0VSIChjdXN0KSAhPSBOVUxMCi0JICAg ICAgJiYgc3RhcnRzd2l0aCAoQ09NUFVOSVRfUFJPRFVDRVIgKGN1c3QpLCAiY2xhbmcgIikpKQor CSAgICAgICYmIHByb2R1Y2VyX2lzX2xsdm0gKENPTVBVTklUX1BST0RVQ0VSIChjdXN0KSkpKQog ICAgICAgICByZXR1cm4gc3RkOjptYXggKHN0YXJ0X3BjLCBwb3N0X3Byb2xvZ3VlX3BjKTsKICAg ICB9CiAgCmRpZmYgLS1naXQgYS9nZGIvcHJvZHVjZXIuYyBiL2dkYi9wcm9kdWNlci5jCmluZGV4 IDczNWE5MjhmMzMuLmQyNWQ5M2ZjY2UgMTAwNjQ0Ci0tLSBhL2dkYi9wcm9kdWNlci5jCisrKyBi L2dkYi9wcm9kdWNlci5jCkBAIC0xMjUsNiArMTI1LDE1IEBAIHByb2R1Y2VyX2lzX2ljYyAoY29u c3QgY2hhciAqcHJvZHVjZXIsIGludCAqbWFqb3IsIGludCAqbWlub3IpCiAgIHJldHVybiBmYWxz ZTsKIH0KIAorLyogU2VlIHByb2R1Y2VyLmguICAqLworCitib29sCitwcm9kdWNlcl9pc19sbHZt IChjb25zdCBjaGFyICpwcm9kdWNlcikKK3sKKyAgcmV0dXJuICgocHJvZHVjZXIgIT0gTlVMTCkg JiYgKHN0YXJ0c3dpdGggKHByb2R1Y2VyLCAiY2xhbmcgIikKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHx8IHN0YXJ0c3dpdGggKHByb2R1Y2VyLCAiIEY5MCBGbGFuZyAiKSkpOwor fQorCiAjaWYgZGVmaW5lZCBHREJfU0VMRl9URVNUCiBuYW1lc3BhY2Ugc2VsZnRlc3RzIHsKIG5h bWVzcGFjZSBwcm9kdWNlciB7CkBAIC0yMDMsNiArMjEyLDIyIEBAIFZlcnNpb24gMTguMCBCZXRh IjsKICAgICBTRUxGX0NIRUNLIChwcm9kdWNlcl9pc19nY2MgKGdudV9leHAsICZtYWpvciwgJm1p bm9yKQogCQkmJiBtYWpvciA9PSA1ICYmIG1pbm9yID09IDApOwogICB9CisKKyAgeworICAgIHN0 YXRpYyBjb25zdCBjaGFyIGNsYW5nX2xsdm1fZXhwW10gPSAiY2xhbmcgdmVyc2lvbiAxMi4wLjAg KENMQU5HOiBibGQjOCkiOworICAgIGludCBtYWpvciA9IDAsIG1pbm9yID0gMDsKKyAgICBTRUxG X0NIRUNLICghcHJvZHVjZXJfaXNfaWNjIChjbGFuZ19sbHZtX2V4cCwgTlVMTCwgTlVMTCkpOwor ICAgIFNFTEZfQ0hFQ0sgKCFwcm9kdWNlcl9pc19nY2MgKGNsYW5nX2xsdm1fZXhwLCAmbWFqb3Is ICZtaW5vcikpOworICAgIFNFTEZfQ0hFQ0sgKHByb2R1Y2VyX2lzX2xsdm0gKGNsYW5nX2xsdm1f ZXhwKSk7CisgIH0KKworICB7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgZmxhbmdfbGx2bV9leHBb XSA9ICIgRjkwIEZsYW5nIC0gMS41IDIwMTctMDUtMDEiOworICAgIGludCBtYWpvciA9IDAsIG1p bm9yID0gMDsKKyAgICBTRUxGX0NIRUNLICghcHJvZHVjZXJfaXNfaWNjIChmbGFuZ19sbHZtX2V4 cCwgTlVMTCwgTlVMTCkpOworICAgIFNFTEZfQ0hFQ0sgKCFwcm9kdWNlcl9pc19nY2MgKGZsYW5n X2xsdm1fZXhwLCAmbWFqb3IsICZtaW5vcikpOworICAgIFNFTEZfQ0hFQ0sgKHByb2R1Y2VyX2lz X2xsdm0gKGZsYW5nX2xsdm1fZXhwKSk7CisgIH0KIH0KIH0KIH0KZGlmZiAtLWdpdCBhL2dkYi9w cm9kdWNlci5oIGIvZ2RiL3Byb2R1Y2VyLmgKaW5kZXggZDg5NzRkMzgxNC4uZTliYzMwOWIwYyAx MDA2NDQKLS0tIGEvZ2RiL3Byb2R1Y2VyLmgKKysrIGIvZ2RiL3Byb2R1Y2VyLmgKQEAgLTUyLDQg KzUyLDggQEAgZXh0ZXJuIGludCBwcm9kdWNlcl9pc19nY2MgKGNvbnN0IGNoYXIgKnByb2R1Y2Vy LCBpbnQgKm1ham9yLCBpbnQgKm1pbm9yKTsKICAgICAgICBydW5uaW5nIG9uIEludGVsKFIpIDY0 LCBWZXJzaW9uIDE4LjAgQmV0YSAuLi4uIi4gICovCiBleHRlcm4gYm9vbCBwcm9kdWNlcl9pc19p Y2MgKGNvbnN0IGNoYXIgKnByb2R1Y2VyLCBpbnQgKm1ham9yLCBpbnQgKm1pbm9yKTsKIAorLyog UmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBQUk9EVUNFUiBzdHJpbmcgaXMgTExWTSAoY2xhbmcv ZmxhbmcpIG9yCisgICBmYWxzZSBvdGhlcndpc2UuKi8KK2V4dGVybiBib29sIHByb2R1Y2VyX2lz X2xsdm0gKGNvbnN0IGNoYXIgKnByb2R1Y2VyKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9nZGIv dGVzdHN1aXRlL0NoYW5nZUxvZyBiL2dkYi90ZXN0c3VpdGUvQ2hhbmdlTG9nCmluZGV4IDdjNjI0 NTg5ZGUuLjBlNGY2YTVjZTkgMTAwNjQ0Ci0tLSBhL2dkYi90ZXN0c3VpdGUvQ2hhbmdlTG9nCisr KyBiL2dkYi90ZXN0c3VpdGUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOCBAQAorMjAyMC0wOC0xOSAg QWxvayBLdW1hciBTaGFybWEgIDxBbG9rS3VtYXIuU2hhcm1hQGFtZC5jb20+CisKKwkqIGdkYi5m b3J0cmFuL3ZsYS10eXBlLmV4cDogU2tpcCBjb21tYW5kcyBub3QgcmVxdWlyZWQgZm9yCisJdGhl IEZsYW5nIGNvbXBpbGVkIGJpbmFyaWVzIGFmdGVyIHByb2xvZ3VlIGZpeC4KKwogMjAyMC0wOC0x NyAgVG9tIGRlIFZyaWVzICA8dGRldnJpZXNAc3VzZS5kZT4KIAkgICAgVG9tIFRyb21leSAgPHRy b21leUBhZGFjb3JlLmNvbT4KIApkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuZm9ydHJh bi92bGEtdHlwZS5leHAgYi9nZGIvdGVzdHN1aXRlL2dkYi5mb3J0cmFuL3ZsYS10eXBlLmV4cApp bmRleCA5MjVjNTgzZWRjLi5lMmI4ZDcxYjRjIDEwMDc1NQotLS0gYS9nZGIvdGVzdHN1aXRlL2dk Yi5mb3J0cmFuL3ZsYS10eXBlLmV4cAorKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5mb3J0cmFuL3Zs YS10eXBlLmV4cApAQCAtMzMsOCArMzMsMTIgQEAgc2V0IGludCBbZm9ydHJhbl9pbnQ0XQogCiAj IENoZWNrIGlmIG5vdCBhbGxvY2F0ZWQgVkxBIGluIHR5cGUgZG9lcyBub3QgYnJlYWsKICMgdGhl IGRlYnVnZ2VyIHdoZW4gYWNjZXNzaW5nIGl0LgotZ2RiX2JyZWFrcG9pbnQgW2dkYl9nZXRfbGlu ZV9udW1iZXIgImJlZm9yZS1hbGxvY2F0ZWQiXQotZ2RiX2NvbnRpbnVlX3RvX2JyZWFrcG9pbnQg ImJlZm9yZS1hbGxvY2F0ZWQiCisjIGJyZWFrIG1haW4gZm9yIEZsYW5nIGNvbXBpbGVyIGFscmVh ZHkgYnJlYWtzIGhlcmUKK2lmICFbdGVzdF9jb21waWxlcl9pbmZvICJjbGFuZy0qIl0geworICAg IGdkYl9icmVha3BvaW50IFtnZGJfZ2V0X2xpbmVfbnVtYmVyICJiZWZvcmUtYWxsb2NhdGVkIl0K KyAgICBnZGJfY29udGludWVfdG9fYnJlYWtwb2ludCAiYmVmb3JlLWFsbG9jYXRlZCIKK30KKwog Z2RiX3Rlc3QgInByaW50IHR3b3YiICIgPSBcXFwoIGl2bGExID0gPG5vdCBhbGxvY2F0ZWQ+LCBp dmxhMiA9IDxub3QgYWxsb2NhdGVkPiBcXFwpIiBcCiAgICJwcmludCB0d292IGJlZm9yZSBhbGxv Y2F0ZWQiCiBnZGJfdGVzdCAicHJpbnQgdHdvdiVpdmxhMSIgIiA9IDxub3QgYWxsb2NhdGVkPiIg XAotLSAKMi4xNy4xCgo= --_002_DM5PR12MB16445A31582ADF522A8D19419E5D0DM5PR12MB1644namp_--