Received: by 10.223.164.202 with SMTP id h10csp433294wrb; Tue, 7 Nov 2017 08:36:05 -0800 (PST) X-Google-Smtp-Source: ABhQp+TARBk1bgXJ9ScW/ae+kYpKpIhfxU+An2BX8uRyhLhSXiXEee6WsnJu3CUXEDpxUalasFbH X-Received: by 10.84.142.131 with SMTP id 3mr18307070plx.26.1510072565394; Tue, 07 Nov 2017 08:36:05 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1510072565; cv=none; d=google.com; s=arc-20160816; b=l5hp3pwtgr4IUCwJp0i0DbxexMRKQsUFNGVPFunBq2pIbwxnTLK5N/Zabky0Y4KLD0 9gWmDDI5RxLmakPVNdguwEvTnFBvKeTfW29Xqo+V8/nR83y8w8Ly6Y0DrqnP2FkBeQs4 Cxri21dJiOxj2M7dp04lEGxBIod1RX3RqBAfwinJS3yO4Y9TMawJHUg5ztCbfVPuxKYP d4MeyrhcwYEtZta/igqecR9Wwen27UBOfAWukk8JtYb+hZN5R39b9EBUI2M3Js+xSq3+ LOGmvs8jrsNX431/fGcAPApogLwHapHyJjRfw6GpC3Hvx700ar5fO2Gmo+TbQurTn1jr mNcg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:spamdiagnosticmetadata :spamdiagnosticoutput:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from:arc-authentication-results; bh=kiMtZSRiMeOuuu8Hwl0kmWRwvn0zfQLxrLIQxF8eFqk=; b=fsMIrNS+6FFt8gFpBKnZ12ueSxxjVtenChDzWS7G6Wj40uowgE6W+g+0kLoPq7Ut5f OJrSeBKcD9/YxtqUOQ2cxapJEScS4JHppsmB1fxzdACCmVM6AKSHNY0V42GLJ83oCztv 75OGfrSoEUThg3KPVIGfOqy/M1xVeQassjO9zKeS4DeSWOgsUndfmHJz3DwFSgahGAlN XkCi1pVA/2GmIpcUxaRIu+pgCqsVej8eUYXvYxcP6Cqhp8CaU4UkyYLh55VO2+sgZRYv vPPbayOrmkXQi9qc/93hPbStzVz+sTVLKI/xP9pXI6oLXGdFTVbaYjKAAdVg9JEQNc9o LJfQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e7si1568764plk.185.2017.11.07.08.35.52; Tue, 07 Nov 2017 08:36:05 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932387AbdKGCbG (ORCPT + 91 others); Mon, 6 Nov 2017 21:31:06 -0500 Received: from mail-bn3nam01on0107.outbound.protection.outlook.com ([104.47.33.107]:42640 "EHLO NAM01-BN3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754567AbdKGCbE (ORCPT ); Mon, 6 Nov 2017 21:31:04 -0500 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=zi.yan@cs.rutgers.edu; Received: from [192.168.1.153] (108.53.61.194) by CY4PR14MB1654.namprd14.prod.outlook.com (10.171.166.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.197.13; Tue, 7 Nov 2017 02:30:59 +0000 From: "Zi Yan" To: "Andrea Arcangeli" Cc: "huang ying" , "Huang, Ying" , "Naoya Horiguchi" , linux-mm@kvack.org, LKML , "Mike Kravetz" , "Mike Rapoport" , "Kirill A. Shutemov" , "Alexander Viro" Subject: Re: [RFC -mm] mm, userfaultfd, THP: Avoid waiting when PMD under THP migration Date: Mon, 06 Nov 2017 21:30:54 -0500 Message-ID: In-Reply-To: <20171106203527.GB26645@redhat.com> References: <20171103075231.25416-1-ying.huang@intel.com> <20171106203527.GB26645@redhat.com> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=_MailMate_38156A7B-D9D7-4A8F-B960-D3F2C5442256_="; micalg=pgp-sha512; protocol="application/pgp-signature" X-Mailer: MailMate (1.9.7r5425) X-Originating-IP: [108.53.61.194] X-ClientProxiedBy: CY4PR20CA0047.namprd20.prod.outlook.com (10.172.113.161) To CY4PR14MB1654.namprd14.prod.outlook.com (10.171.166.16) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 564f39c5-0050-4eb2-b802-08d5258795c8 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(2017052603199);SRVR:CY4PR14MB1654; X-Microsoft-Exchange-Diagnostics: 1;CY4PR14MB1654;3:Ylp/HrmxjYsB6Ud3hnCj+sEfgCOZWT04E4qyoz+YIbCHMHoPwDM6I6CqbeU+++hW57rlBtw/NLl4c2tzViVuLrhPAXnIoEPo7QVuI93loxKahpslpaJjCdkShR47v4WFM1cPikN2qKhWC3wl59nBU7O+0uP1Rl7eavkzzATFZa9dVUDju7v1LwdmjUdiW7biaAaAoAh82fZHSY9sIX2oOK3UMBZMEkprYuSv8YJnyvwCw/mzVAwxxGZALAIzJqbL;25:qBWwHJLnGgwpr/HWSZfCLUcqlO0Ob+KVwfqQlEled9IOML/cxmBEIsGvMGW3PkhKrPoCXdl//oFyxPOVUlGSgntWNcHZJHn1VNH8j5Xm77jwvhoK/xeD9/B5jLRjYtRC11kusMg+9edHb2W99gbJNX0JvhQrSON2KyDqTn1EyeZjxdB5bXMlXaxWTwd831pjeUKWxY49642kNhOO0JVK0tVTO6QI6a8mdVcyrDHZFoHL3tlIR+/Esuo6DKtp+iWPSy3Y8qcKkAezbWpU7JwJkUIB60nGXjNk119svSevz4eaVdXI3FcloWQIRjZRsH5vQW9F3+A/XNU5ckbLH0IVWQ==;31:i8ylT7OZkqZEAAKmRfektFXzHkHYq2lFjqGNXlzXKZKpep6htvGV2xbJdtfsgQv1PxMmFegJZvxDrkwk/+BoovyyEqMRvEUkutIsrcep5ONIwD96TAdkskrmxN8ekzWUoUP7FSBNHJZd+z1T412D6a6HTQX7SBtWQucBj0QDEZilom9WLEw27LwzMZKbyc26jyo+nWUxn+H/C5Jztwkn6hMKs8u542h7uyS4w+zq/Q4= X-MS-TrafficTypeDiagnostic: CY4PR14MB1654: X-Microsoft-Exchange-Diagnostics: 1;CY4PR14MB1654;20:mQWNi/Dxuj5enUOhfGa0Girh8NHLL9fl6fwy+G18w3obibDehYxdeO8MoeWujrgy7ZOUH9TjsO0LEcthQXxkHA66QCqlodra6/CayaVDJA0CkWBwotyOdjnTS5F/VNVdb1U56Hyc0okeVs6QbRz7RLV0Msa7S+duYyCW15IkuMmscKz5izCgl6QMf8Ln82xAnwQ6Y9ta/aZayxueG5lGeiEJ3idsXzH7x/J6uCclWhcC9NsyNIWbzom7fG8wX2fw/HKAPBislEpvcT68jx4u4f/nIQux7mSomF5MGSn23NCYqUnsw20JOoLTCoGcH0qyaRjdkKVCPMV+AR6jPWKBIyTM0D+WGjL+iCw0I2cJlZDmQNi0VNPNy492lt1pFjEduytPG4acFmymtKTz6dqZwS/uHw2m6/b3Qz6xKbXYtoxo+1nghmm6GRhbjvSCNk0km6n8X25mhsAckEqBAKs3pZGZapdQHgTKvuoxNtlRghcddp5xEA+8qeJ8wVumgq0R;4:VFDx38DDI18JXft23lkaecEv9fIlI6KhIFW391TaSN1Hp0cfXpibwHsXzAp7qhUlUddqwhzvqe5t2ycWsgmRueDa7I/ELPYzWqxblQiMh1ua0f7xdbA76KmS40ekchfH5ZtNCgjJqsNftWmrqElm+A3fXHNYjDsraasyXwAZs8GiMPMRxLvSGLN0fYHn1CT7zJeP/ygRmxwKdezQ5BAnn9zZzk8SDBLiICg4xy+FSUi51zAkNUKVvK5uD0ICSdS2WuOtep6nMXOZlJDEN9OcUw== X-Exchange-Antispam-Report-Test: UriScan:; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(11241501159)(6040450)(2401047)(5005006)(8121501046)(100000703101)(100105400095)(93006095)(93001095)(10201501046)(3231021)(3002001)(6041248)(20161123562025)(20161123564025)(20161123560025)(201703131423075)(201702281528075)(201702281529075)(201703061421075)(201703061406153)(20161123558100)(20161123555025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:CY4PR14MB1654;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:CY4PR14MB1654; X-Forefront-PRVS: 0484063412 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(6049001)(6009001)(39860400002)(346002)(376002)(199003)(24454002)(189002)(53936002)(2906002)(33656002)(83716003)(6486002)(66066001)(5660300001)(90366009)(6246003)(7736002)(3846002)(6116002)(7416002)(77096006)(84326002)(305945005)(81156014)(81166006)(8676002)(568964002)(8936002)(50226002)(53546010)(16526018)(39060400002)(189998001)(4326008)(86362001)(575784001)(97736004)(6666003)(75432002)(478600001)(25786009)(105586002)(93886005)(82746002)(106356001)(229853002)(76176999)(68736007)(50986999)(42882006)(16586007)(2950100002)(88552002)(101416001)(786003)(16576012)(117156002)(54906003)(316002)(5890100001)(6916009)(72826003);DIR:OUT;SFP:1102;SCL:1;SRVR:CY4PR14MB1654;H:[192.168.1.153];FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; Received-SPF: None (protection.outlook.com: cs.rutgers.edu does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtDWTRQUjE0TUIxNjU0OzIzOjJpQmx2ekNlVGgwd1ROZkdheXVSbUd6V3FD?= =?utf-8?B?bjJSN3JDZjNLK1JBU2ViaDlya01HVWxENVA4OXA1d0wvTmJsaDdLUTdnYzl0?= =?utf-8?B?a2FWeE1jQXlVSmZqdkxyT2hlOXNHcHozbDN0UUJ3bDRkTFpkeVNFNmFMeGh4?= =?utf-8?B?SE9KbGZwRVVYbU12TjNFdUluVU1lSUhidkFoa1NNUWhWcTRhaEF1aWk5Y1NG?= =?utf-8?B?RUpvdDFPcTdkRlZndit3UFdvU05DaG9oeHZReXowWDZlLzN2ZE90K2V1bHkz?= =?utf-8?B?UllwTEVoZ0xLaVptZ2tnWmNUaDB4Vm1RaFZoWG1xTEF1eWlPYTMraHlmaWtW?= =?utf-8?B?aEpabnJjdHlsRzRsYjdadk94S1BrOGM3Nkwrd0ZocmdtUVNVNzJmWEFybTg0?= =?utf-8?B?R1ZQbkUxZUFEY1NRdHZadnlBcUI5MUx4Zno3Rk5mV0QrUi85MXUzQmpDdGtl?= =?utf-8?B?T3N0ZW5ZVHJaOHNUdWlpREFBdG9OZm5jZjlUdnhaL3R3RDFaNC9jOUNzQ1pj?= =?utf-8?B?Z3pUSytNSTBtcGtuMGdOYVNHb2s4ZGZ5MHhFZzIrNnZFejd0Yk9oMFdkY2tE?= =?utf-8?B?WmgrQ1p3MnhaRWRaU1NEV3FwLy8vejBiTWdHSWNjRFhzSXB0YTZ0YktFb0sy?= =?utf-8?B?Z0xTaGloVlE4L3JjNVBOdlhJTG5qOEV4aUdzZkM4UEJ1NFVkM1lDdk9qM2Va?= =?utf-8?B?KytzNTZxNE9TZVBueEd5VUptVnBUblpPUnlPcm1JNmg4MVhyc2pZTUpuRmE5?= =?utf-8?B?Y0JSc3dkYTlwOFZRUmJIR3RreHBqZ3JMRk8yOGRielRRU2RKSExVcEJualhF?= =?utf-8?B?SHJBN05WOEhBbGxXTThLSCszWkRvZ0xRL3BsYlRHVFkwOWNrN2tldUpMemU5?= =?utf-8?B?dG1GNk5jYWJ0dHR2WkN0T3BZVlBOZXNvVzZUSVhIY2kwSUZBUjdONmh4OXJw?= =?utf-8?B?cHJoeEx6d24rM3lFS0ZHMC9jVlphWm0rL0d0aWd0K0ltd01aZ0haMDZrK012?= =?utf-8?B?N1kzUTlhMjQ2Z2prVlpYTFo1enE4Ui9LNnhwZVVYRE1qS2V5YWx1SFczMkVw?= =?utf-8?B?MlFlRTMvdmlWTmFNbXM4TFJGakVrWElsb3YzU1czY1diT2svbCtXOE1mUWQr?= =?utf-8?B?ZjRkVFpJcXNyRTAyMDRzdjlmT01aUzNQZ1RmWUhoYWo1MVptZjNIbm12ekFS?= =?utf-8?B?WjVtTmR1SERaWDA2N25xNlNlc2JmMVVsMDgxWDMxaC9RcDluY1N6K2JNbnFO?= =?utf-8?B?K2hJVDE5VktOaVd1N2ZzRTBtaUpJb3FmbXZGaWtqblJzMEQ2TzJyREVFbWZk?= =?utf-8?B?dGZFMVg1WEF0bzdaNy9RUWJjNk1lNlhQSThPZjdEMS9KQWR1S3dZVXlvUElv?= =?utf-8?B?ZUdySUZic3MrU3grb1pOamN1SW1wQUlSaTRTbGptK2xWc2NFbC8vSHd6b280?= =?utf-8?B?S3VBd1BJRkhGZDRmbktQV3ZZcmtIMm4wWlB3Y1FxMDZmZE9BaXdxOXFqQXU5?= =?utf-8?B?am5tMk1VYWJsUUhlTVliZFo1ZkgxdUJkb2d4Njlncngza2p6cEh2dGlZaTBX?= =?utf-8?B?MVJYQ1JRcTR3RHpIS29Va08vZ1JEY2hZancwN2p0K015N1hhOS8zMDNySlVG?= =?utf-8?B?akpmMWQxM0dFcXI3a2NrK1NBYnNXZGcveDkrdVN2UTl5aUJrYXVyZlpSaHQy?= =?utf-8?B?YzlKcjhyRHE3bWdDbEQzcE50cUg4SDNCYzgrSEZaMGtDWkp6VXN3QVZHWjVH?= =?utf-8?B?emorMU1BNDVrbHlaNWdibHV3Sm9TUWVRUyt5YlBiWlduV2hZL1g3dnByaStM?= =?utf-8?B?STNKVlNLYjV2SVhmUDBiaUJLTXFHVTVQbFE2SVoxbkxIOTFrQXpuN1l6NytY?= =?utf-8?B?WUF1RGo0aEVPcno1a3lHN2ZVa1gzYS9tbUgya01YZ1NEUHBkTVltK1ppQVlv?= =?utf-8?Q?qSth4E14PUpoQSc74dQQ95YD/c0cos=3D?= X-Microsoft-Exchange-Diagnostics: 1;CY4PR14MB1654;6:E2TE/P/NsZFL/otR0+PjaBvnBKNxI+yzBeq008Zz6tww1LI7VppThifAOu3nXL1hpToM0nzHJFR8vH+za48oB2MudIiTzYcr1QEyHSpDYewTmdY8BWOSDc0LO0LszKR03eV2NZ1IO1XpH3Ay7ze2oBaiixPj7Ray5tC/IwAuBEXWFWRUnT3JaQYXG40jUvW2CaZuGa3T2Cvp4Z0BvSr6tKNi2597DSwaiNEXF8Zm31HDWtmo6iSPYb4hkz3Cup8TL3Wy786EeHyTISoT38rs8tBUTdp+j/FulUqjH42ny+luQSVKIpT5hPZdp/F5/KjYRB/5oBCoBZFnLBwlhiZtX3Y/vpD33qGrpgyVq8azWqs=;5:WYsfQfhGJ8eMjQnLQIptraqD8W8o7roWq8xK9TS2nhIa+hBxbNjL6eZ02Dqm7nX4k/Gyy3EPqBjsGkF6r6gDPKgoMXOPtiTJGkFnyl6+0lGeofHEGZ3cS/hYkfjPJYz5Fu75kEQ2rTmPRdaqmYgoZp365zgVvFyG8THnR+TXHWc=;24:T6HpdK792IxYq1o7yMtu2QbGFUvp13UUCSRWqY19nRIiX4XZs3n9kyGjI9zNnBAcTzg5q1zL+lOf2S5rH8raJjHVo3diG+Ck5ScEWmw5CQQ=;7:cpDz3FQXSZxpVZbMiNQSQ2HIU0pHzlzW4qjISVvfz1N4+V4wobYe4qhs5WcSKVJQ+CGmFDsY8Re7LHxO/8lN83ttkDECIyE13mEF+1s2xabvu2GNNWVqajpo1aw9RIsrE/tQTZKm4xQQvArK4ZFK0FvbXKDyAxt9/TN/rL/HcWt6n2INbkQ9SBIDHcD0mpdvWXBnSJaPBmuuGodrHqML7Y6yNSXijFYGG1rMGOzDO9R/fl0cAgX9dlHGP3cM7s9+ SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cs.rutgers.edu X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Nov 2017 02:30:59.7397 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 564f39c5-0050-4eb2-b802-08d5258795c8 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b92d2b23-4d35-4470-93ff-69aca6632ffe X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR14MB1654 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This is an OpenPGP/MIME signed message (RFC 3156 and 4880). --=_MailMate_38156A7B-D9D7-4A8F-B960-D3F2C5442256_= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On 6 Nov 2017, at 15:35, Andrea Arcangeli wrote: > On Mon, Nov 06, 2017 at 10:53:48AM -0500, Zi Yan wrote: >> Thanks for clarifying it. We both agree that !pmd_present(), which mea= ns >> PMD migration entry, does not get into userfaultfd_must_wait(), >> then there seems to be no issue with current code yet. >> >> However, the if (!pmd_present(_pmd)) in userfaultfd_must_wait() does n= ot >> match >> the exact condition. How about the patch below? It can catch pmd >> migration entries, >> which are only possible in x86_64 at the moment. >> >> diff --git a/fs/userfaultfd.c b/fs/userfaultfd.c >> index 1c713fd5b3e6..dda25444a6ee 100644 >> --- a/fs/userfaultfd.c >> +++ b/fs/userfaultfd.c >> @@ -294,9 +294,11 @@ static inline bool userfaultfd_must_wait(struct >> userfaultfd_ctx *ctx, >> * pmd_trans_unstable) of the pmd. >> */ >> _pmd =3D READ_ONCE(*pmd); >> - if (!pmd_present(_pmd)) >> + if (pmd_none(_pmd)) >> goto out; >> >> + VM_BUG_ON(thp_migration_supported() && is_pmd_migration_entry(= _pmd)); >> + > > As I wrote in prev email I'm not sure about this invariant to be > correct 100% of the time (plus we'd want a VM_WARN_ON only > here). Specifically, what does prevent try_to_unmap to run on a THP > backed mapping with only the mmap_sem for reading? > Right. I missed the part that the page table lock is released before entering handle_userfault(). The pmd_none() can be mapped elsewhere and migrated, !pmd_present() but not pmd_none() is possible here when THP migration is enabled. > I know what prevents to ever reproduce this in practice though (aside > from the fact the race between the is_swap_pmd() check in the main > page fault and the above check is small) and it's because compaction > won't migrate THP and even the numa faults will not use the migration > entry. So it'd require some more explicit migration numactl while > userfaults are running to ever see an hang in there. > > I think it's a regression since the introduction of THP migration > around commits 84c3fc4e9c563d8fb91cfdf5948da48fe1af34d3 / > 616b8371539a6c487404c3b8fb04078016dab4ba / > 9c670ea37947a82cb6d4df69139f7e46ed71a0ac etc.. before that pmd_none or > !pmd_present used to be equivalent, not the case any longer. Of course > pmd_none would have been better before too. > Right. Ying=E2=80=99s patch is a fix of the regression. Fixes: 84c3fc4e9c563 ("mm: thp: check pmd migration entry in common path"= ) Thanks for pointing all these out. =E2=80=94 Best Regards, Yan Zi --=_MailMate_38156A7B-D9D7-4A8F-B960-D3F2C5442256_= Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename=signature.asc Content-Type: application/pgp-signature; name=signature.asc -----BEGIN PGP SIGNATURE----- Comment: GPGTools - https://gpgtools.org iQFKBAEBCgA0FiEEOXBxLIohamfZUwd5QYsvEZxOpswFAloBGt4WHHppLnlhbkBj cy5ydXRnZXJzLmVkdQAKCRBBiy8RnE6mzBasB/0S76/3qBUPYvT36zi5DsQV0klJ 6rNaitKGr1BBRtXNgYCsg83awMpf9YUS6thgWEQ3XijGq9HCfIYytSgwXnxYAyiI Abb1KIMtsdm93llj4+Bk0Cos4h5CX2sYbTnbTwQi0Bi3ggl2DF2CF2Djs/8YREpi WSCdb2lcCJFAfahTuSRzJi8bGTVjjwr9gYqDVdO62E6zDwI681ySQk1KJSqPf8Ws hZev+rl//yFm/qK1BKVhoGC1UIbu5m5J3BrWHrpvOzS+ajSfcYc21iy0nNrwgdPM jM/xA0l9JysZnFhWHohhZpkQKlkPwcI/4Q2EXgolF9gATeO3vygLI5b4kvLm =oNMz -----END PGP SIGNATURE----- --=_MailMate_38156A7B-D9D7-4A8F-B960-D3F2C5442256_=-- From 1583354941405748237@xxx Mon Nov 06 21:49:01 +0000 2017 X-GM-THRID: 1583030690684131137 X-Gmail-Labels: Inbox,Category Forums,HistoricalUnread