Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1voDvf-00GsNE-2R for pgsql-hackers@arkaria.postgresql.org; Fri, 06 Feb 2026 04:58:52 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1voDve-0023wC-2l for pgsql-hackers@arkaria.postgresql.org; Fri, 06 Feb 2026 04:58:50 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1voDve-0023w4-0w for pgsql-hackers@lists.postgresql.org; Fri, 06 Feb 2026 04:58:50 +0000 Received: from mail-ua1-x933.google.com ([2607:f8b0:4864:20::933]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1voDvb-00000000mzD-0bjY for pgsql-hackers@lists.postgresql.org; Fri, 06 Feb 2026 04:58:49 +0000 Received: by mail-ua1-x933.google.com with SMTP id a1e0cc1a2514c-948a0867527so199467241.1 for ; Thu, 05 Feb 2026 20:58:46 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1770353926; cv=none; d=google.com; s=arc-20240605; b=ad/63jKDObKEMZJBBoYRhM0bEu0Q7CdZZyfsC7KLuHb1SJyrlGeE1+kNlj5JQ+Mv97 pOeZkOkLvY0wwxLgp0SW/WSmgd2ilq45kfUcVMIARPhS97uBYZg4G6d0Ex1PCp1/TDr0 xcQCSZEiakZaoGj70uZWDZ/OcV4PEylS6/OdzWtbwFby1L61doe+Afr7NOvsZ1LbRen2 9JIZwp77cl+7w7wVcrNHtCZlk9X18bKFxjyr9mramXHYmRh1C/R0qTfkaKaNrE+5AVfg ZGXY09tRmPkvX8AvQzBAx1Rp7ju23YivTXTZkxje54uyI/8OXlpmU1/X73Jvvi5SeGxY NyOw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=TvpSrXXd3ygdJN4KARqFC7gEFs3qrnlxovE00k+D7aQ=; fh=tvS4T4+oR2J2hxK5aNJGfORVVBBvqUJPnvm76ijROZw=; b=Z4jr1Udqh5z8kdBUN8gdB93GKCuLR5j7PVxNB03COoKdvv0Yzw9KaysL9eiflgYrtn /q1c31i0EZbjGWcI3iQ9aVaUZziQCAaeCWzAS3f/9Hk7FZHFelv0q8Dg0gG4Ev2wfmrg Ap8LTUa7N2+W+G4h+2QE63pEDMQSTmNoAmfXFHFneo/NeLIO3ZaZIUX913c3DDjL5C5Z TaMB93P5ZWoIhaPdi04h2+cBAFMjh90YWgrwgo41flK8N/Uubk6RQcoRcVg1goRvnrzB kfKEZUe8r79kFhM3NiHBFGYo1HZeBfkTvUiMMqd+q99si2T9yNd+1sW+3ocVaiCDy+ef RXfA==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770353926; x=1770958726; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=TvpSrXXd3ygdJN4KARqFC7gEFs3qrnlxovE00k+D7aQ=; b=HFREcnrwIjw4xwWgQuW2Gd+wl5uc5n6ZXPYxxbm/GHZOywlmpFf1Fli/vhZuCTJxWy cd7Ya/U2dVlkaW1oIe+2rlSq4ObFGCv2MOcJdkihopa1HT5x2ORe9rLuCgkUAj3Ptzb5 oEMj3rZoa+agg+vniUgbcNlp1PdOwilw6AfmNLhEcGD1MaiyBv0ovCJW8PgdqW4B2gaM zkSA8DT0NZZ92SZi/OkXddefl7qkKD+o+AzJ9XS5/fMKAh07dmL3495R41uV3JkZQZB3 j5c15VJ8NbTnkOIab+xIwNkwtjXSpGxYDGwwUsu7GmpP8P740uYephR6VusOktXxR/x4 NIqQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770353926; x=1770958726; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=TvpSrXXd3ygdJN4KARqFC7gEFs3qrnlxovE00k+D7aQ=; b=QeOT7F13Vr8MrL9G4ELb3eavI3OM5VpttI/QKBLgLUhcgLzg0O5WDFCtfL2B9SgQ5b 8ayNyuLZh05KYFdB+vQfviusKCQRTPSuP5LtHV6bVR4BIU2pR6KXUllCnQGHkdp2de3x sneyyEE7nYMe8TAlcQ4ayT15Udd/8TvYQitkgA1e0fXCImLCQPJgNGK8Xivn9VFN4NiE 2YXBnpdkT/BKw6iqZjogc36FK/wK800tm/cV1zTdVWBatX6oAr2PAMCFHRJmfeTg7WQI F0ij6Gsv26P7v2WX5DzCj/hLqQ9n8FQ0UktkHtWPK2S0gYwjaS6ZfMYrk3uwVfF/BvPW rU+Q== X-Gm-Message-State: AOJu0Yw74alc2KBZF23nIjVzZDwT4mqv24aHxY1aaF+WhFltFjtd2U8n q/1YxHtkuZcJ8Z8gTjrXQQohlLTWMz1ZGctac5Ee7is9jAUnHXSFzxFAHVLEGViFUD3tlUK8MZW 2TK1R8tJhMJp+P9KBwvpIvUP1vNpp+eE= X-Gm-Gg: AZuq6aJFF5WCrT8ayGR16oMMNHH2Xq74zrH8YYerAw4I7ClRgxdtQayUYvm8JxjXViN rHJnYP6qHiBBJupOnsc1sOqf7KArtVNP/TZFPOixoeKYECAx1q1izAA1sVIw/g1e5ubReu+vDEK PDxkWAFaT9ZE9BP7iKtwCft03+RRhoWkUuIO7VXZeprw77Aju9oXVuG9yjxqdnJ7B73tRZ6xTLh eIqmioG61vNr44Ng5pHAcuyJOZj+7S1l+m1fhuska7ZAiUtVxMIrgaACj4RmKfiaelZf1J7wEaT 1erX6hmVAf2NoodJCiOe3rUBCCheRqtgcDuDDOa6vfzDXG/wHMcXjUE9h+IdfiZVNwxaxIeFR71 vo2r6JSus1CCHKnnWKUGgZ6UoCKVxmCUI0B/OtyExn4vHsPDfStdAFj1W1sSVfhQwDzhMotzwCG CK1WpxY4x2xQ== X-Received: by 2002:a05:6102:b10:b0:5ef:2548:76b9 with SMTP id ada2fe7eead31-5fae8a70f69mr391158137.10.1770353926059; Thu, 05 Feb 2026 20:58:46 -0800 (PST) MIME-Version: 1.0 References: <202601311716.jeczqdjsmh57@alvherre.pgsql> In-Reply-To: From: jian he Date: Fri, 6 Feb 2026 12:58:09 +0800 X-Gm-Features: AZwV_QjzlFCydAZ9wWbtI17lZJd0uQ1D86BxlMGPPxEnic4SuiyTIKZf5lfU-xU Message-ID: Subject: Re: using index to speedup add not null constraints to a table To: =?UTF-8?Q?=C3=81lvaro_Herrera?= Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000e3dc9b064a20a47d" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000e3dc9b064a20a47d Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Feb 4, 2026 at 8:52=E2=80=AFPM jian he wrote: > > hi. > > v11 is attached. > Mainly fixes regress test failures. I have tested locally on https://cirrus-ci.com/build/5064590561640448 this time, the attachment should have no regress test failure. -- jian https://www.enterprisedb.com/ --000000000000e3dc9b064a20a47d Content-Type: text/x-patch; charset="US-ASCII"; name="v12-0001-using-indexscan-to-speedup-add-not-null-constraints.patch" Content-Disposition: attachment; filename="v12-0001-using-indexscan-to-speedup-add-not-null-constraints.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlaez0gf0 RnJvbSA3MzYzYWNmMjcxMzViMGNhYWQwNDcwM2FmMjdlNWJhZTc1ZmRjYmU3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IEZyaSwgNiBGZWIgMjAyNiAxMTowNTozMCArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjEy IDEvMV0gdXNpbmcgaW5kZXhzY2FuIHRvIHNwZWVkdXAgYWRkIG5vdCBudWxsIGNvbnN0cmFpbnRz CgpUaGlzIHBhdGNoIHRyaWVzIHRvIHVzZSBpbmRleF9iZWdpbnNjYW4oKSAvIGluZGV4X2dldG5l eHQoKSAvIGluZGV4X2VuZHNjYW4oKQptZW50aW9uZWQgaW4gWzFdIHRvIHNwZWVkdXAgYWRkaW5n IG5vdC1udWxsIGNvbnN0cmFpbnRzIHRvIHRoZSBleGlzdGluZyB0YWJsZS4KClRoZSBtYWluIGxv Z2ljIGhhcHBlbnMgaW4gcGhhc2UzIEFUUmV3cml0ZVRhYmxlCjEuIGNvbGxlY3QgYWxsIG5vdC1u dWxsIGNvbnN0cmFpbnRzLgoyLiBGb3IgZWFjaCBub3QtbnVsbCBjb25zdHJhaW50LCBjaGVjayB3 aGV0aGVyIHRoZXJlIGlzIGEgY29ycmVzcG9uZGluZyBpbmRleAphdmFpbGFibGUgZm9yIHZhbGlk YXRpb24uIElmIG5vdCwgdGhlbiBjYW5ub3QgdXNlIGluZGV4c2NhbiBtZWNoYW5pc20gdG8gdmVy aWZ5IG5vdC1udWxsCmNvbnN0cmFpbnRzLgozLiBJZiBhbnkgb2YgdGhlIGZvbGxvd2luZyBjb25k aXRpb25zIGFyZSB0cnVlCiAgKiB0YWJsZSBzY2FuIG9yIHJld3JpdGUgaXMgcmVxdWlyZWQsCiAg KiB0YWJsZSB3YXNuJ3QgbG9ja2VkIHdpdGggYEFjY2Vzc0V4Y2x1c2l2ZUxvY2tgCiAgKiB0aGUg Tk9UIE5VTEwgY29uc3RyYWludCBhcHBsaWVzIHRvIGEgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1u CiB0aGVuIGluZGV4IHNjYW4gY2Fubm90IGJlIHVzZWQgZm9yIGZhc3QgdmFsaWRhdGlvbi4KSWYg YWxsIGNvbmRpdGlvbnMgYXJlIHNhdGlzZmllZCwgYXR0ZW1wdCB0byB1c2UgaW5kZXhzY2FuIHRv IHZlcmlmeSB3aGV0aGVyIHRoZQpjb2x1bW4gY29udGFpbnMgYW55IE5VTEwgdmFsdWVzLgoKY29u Y3VycmVuY3kgY29uY2VybjoKQUxURVIgVEFCTEUgU0VUIE5PVCBOVUxMIHdpbGwgdGFrZSBhbiBB Q0NFU1MgRVhDTFVTSVZFIGxvY2ssIHNvIHRoZXJlIGlzIGxlc3MKdmFyaWFudCBvZiByYWNpbmcg aXNzdWUgY2FuIG9jY3VyPyAgdG8gcHJvdmUgYWNjdXJhdGUsIEkgd3JvdGUgc29tZSBpc29sYXRp b24KdGVzdHMuIHNlZVsyXQoKcmVmZXJlbmNlczoKWzFdIGh0dHBzOi8vcG9zdGdyLmVzL20vQ0El MkJUZ21vYTVOS3o4aUdXXzl2N3d6JTNELSUyQnpRRnUlM0RFNFNab2FUYVUxem5MYUVYUllwLVEl NDBtYWlsLmdtYWlsLmNvbQpbMl0gaHR0cHM6Ly9wb3N0Z3IuZXMvbS85MDAwNTZEMS0zMkRGLTQ5 MjctODI1MS0zRTBDMERDNDA3RkQlNDBhbmFyYXplbC5kZQoKZGlzY3Vzc2lvbjogaHR0cHM6Ly9w b3N0Z3IuZXMvbS9DQUNKdWZ4RmlXPTRrMWlzPUYxSj1yLUN4MVJ1QnlYUVBVcldCMzMxVTQ3clNu R3oraHdAbWFpbC5nbWFpbC5jb20KY29tbWl0ZmVzdCBlbnRyeTogaHR0cHM6Ly9jb21taXRmZXN0 LnBvc3RncmVzcWwub3JnL3BhdGNoLzU0NDQKLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy90YWJs ZWNtZHMuYyAgICAgICAgICB8IDI4NSArKysrKysrKysrKysrKysrKysrKystCiBzcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL2NvbnN0cmFpbnRzLm91dCB8ICA2NSArKysrKwogc3JjL3Rlc3QvcmVn cmVzcy9zcWwvY29uc3RyYWludHMuc3FsICAgICAgfCAgNDggKysrKwogMyBmaWxlcyBjaGFuZ2Vk LCAzOTIgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21k cy5jCmluZGV4IGY5NzZjMGU1YzdlLi40OWRiYzY5MGU5MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvdGFibGVjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVj bWRzLmMKQEAgLTIxMCwxNiArMjEwLDE5IEBAIHR5cGVkZWYgc3RydWN0IEFsdGVyZWRUYWJsZUlu Zm8KIAlMaXN0CSAgICpjaGFuZ2VkU3RhdGlzdGljc0RlZnM7CS8qIHN0cmluZyBkZWZpbml0aW9u cyBvZiBzYW1lICovCiB9IEFsdGVyZWRUYWJsZUluZm87CiAKLS8qIFN0cnVjdCBkZXNjcmliaW5n IG9uZSBuZXcgY29uc3RyYWludCB0byBjaGVjayBpbiBQaGFzZSAzIHNjYW4gKi8KLS8qIE5vdGU6 IG5ldyBub3QtbnVsbCBjb25zdHJhaW50cyBhcmUgaGFuZGxlZCBlbHNld2hlcmUgKi8KKy8qCisg KiBTdHJ1Y3QgZGVzY3JpYmluZyBvbmUgbmV3IGNvbnN0cmFpbnQgdG8gY2hlY2sgaW4gUGhhc2Ug MyBzY2FuLiBOb3RlOiBuZXcKKyAqIG5vdC1udWxsIGNvbnN0cmFpbnRzIGFyZSBoYW5kbGVkIGhl cmUgdG9vLgorKi8KIHR5cGVkZWYgc3RydWN0IE5ld0NvbnN0cmFpbnQKIHsKIAljaGFyCSAgICpu YW1lOwkJCS8qIENvbnN0cmFpbnQgbmFtZSwgb3IgTlVMTCBpZiBub25lICovCi0JQ29uc3RyVHlw ZQljb250eXBlOwkJLyogQ0hFQ0sgb3IgRk9SRUlHTiAqLworCUNvbnN0clR5cGUJY29udHlwZTsJ CS8qIENIRUNLIG9yIEZPUkVJR04gb3IgTk9UIE5VTEwgKi8KIAlPaWQJCQlyZWZyZWxpZDsJCS8q IFBLIHJlbCwgaWYgRk9SRUlHTiAqLwogCU9pZAkJCXJlZmluZGlkOwkJLyogT0lEIG9mIFBLJ3Mg aW5kZXgsIGlmIEZPUkVJR04gKi8KIAlib29sCQljb253aXRocGVyaW9kOwkvKiBXaGV0aGVyIHRo ZSBuZXcgRk9SRUlHTiBLRVkgdXNlcyBQRVJJT0QgKi8KIAlPaWQJCQljb25pZDsJCQkvKiBPSUQg b2YgcGdfY29uc3RyYWludCBlbnRyeSwgaWYgRk9SRUlHTiAqLworCWludAkJCWF0dG51bTsJCQkv KiBOT1QgTlVMTCBjb25zdHJhaW50IGF0dHJpYnV0ZSBudW1iZXIgKi8KIAlOb2RlCSAgICpxdWFs OwkJCS8qIENoZWNrIGV4cHIgb3IgQ09OU1RSX0ZPUkVJR04gQ29uc3RyYWludCAqLwogCUV4cHJT dGF0ZSAgKnF1YWxzdGF0ZTsJCS8qIEV4ZWN1dGlvbiBzdGF0ZSBmb3IgQ0hFQ0sgZXhwciAqLwog fSBOZXdDb25zdHJhaW50OwpAQCAtNzQ1LDYgKzc0OCw3IEBAIHN0YXRpYyB2b2lkIEFURXhlY01l cmdlUGFydGl0aW9ucyhMaXN0ICoqd3F1ZXVlLCBBbHRlcmVkVGFibGVJbmZvICp0YWIsIFJlbGF0 aW9uCiBzdGF0aWMgdm9pZCBBVEV4ZWNTcGxpdFBhcnRpdGlvbihMaXN0ICoqd3F1ZXVlLCBBbHRl cmVkVGFibGVJbmZvICp0YWIsCiAJCQkJCQkJCSBSZWxhdGlvbiByZWwsIFBhcnRpdGlvbkNtZCAq Y21kLAogCQkJCQkJCQkgQWx0ZXJUYWJsZVV0aWxpdHlDb250ZXh0ICpjb250ZXh0KTsKK3N0YXRp YyBib29sIGluZGV4X2NoZWNrX25vdG51bGwoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKm5vdG51 bGxfYXR0bnVtcyk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCQlEZWZpbmVSZWxhdGlvbgpAQCAtNjIxNyw2 ICs2MjIxLDkgQEAgQVRSZXdyaXRlVGFibGUoQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLCBPaWQgT0lE TmV3SGVhcCkKIAkJCQluZWVkc2NhbiA9IHRydWU7CiAJCQkJY29uLT5xdWFsc3RhdGUgPSBFeGVj UHJlcGFyZUV4cHIoKEV4cHIgKikgZXhwYW5kX2dlbmVyYXRlZF9jb2x1bW5zX2luX2V4cHIoY29u LT5xdWFsLCBvbGRyZWwsIDEpLCBlc3RhdGUpOwogCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJf Tk9UTlVMTDoKKwkJCQkvKiBOb3RoaW5nIHRvIGRvIGhlcmUgKi8KKwkJCQlicmVhazsKIAkJCWNh c2UgQ09OU1RSX0ZPUkVJR046CiAJCQkJLyogTm90aGluZyB0byBkbyBoZXJlICovCiAJCQkJYnJl YWs7CkBAIC02MjcwLDEwICs2Mjc3LDc4IEBAIEFUUmV3cml0ZVRhYmxlKEFsdGVyZWRUYWJsZUlu Zm8gKnRhYiwgT2lkIE9JRE5ld0hlYXApCiAJCQkJCQkJCQkJCQkJCXdob2xlYXR0LT5hdHRudW0p OwogCQkJfQogCQl9Ci0JCWlmIChub3RudWxsX2F0dHJzIHx8IG5vdG51bGxfdmlydHVhbF9hdHRy cykKLQkJCW5lZWRzY2FuID0gdHJ1ZTsKIAl9CiAKKwkvKgorCSAqIFRoZSBjb25kaXRpb25zIGZv ciB1c2luZyBpbmRleHNjYW4gbWVjaGFuaXNtIGZhc3QgdmVyaWZ5aW5nIG5vdC1udWxsCisJICog Y29uc3RyYWludHMgYXJlIHF1aXRlIHN0cmljdC4gQWxsIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucyBtdXN0IGJlCisJICogbWV0LgorCSAqCisJICogMS4gQWx0ZXJlZFRhYmxlSW5mby0+dmVy aWZ5X25ld19ub3RudWxsIGlzIHRydWUuCisJICoKKwkgKiAyLiBJZiB0YWJsZSBzY2FuIChmb3Ig b3RoZXIgcmVhc29uLCBsaWtlIGNoZWNrIGNvbnN0cmFpbnQgdmVyaWZpY2F0aW9uKQorCSAqIG9y IHRhYmxlIHJld3JpdGUgaXMgZXhwZWN0ZWQgbGF0ZXIsIHVzaW5nIGluZGV4c2NhbiBpcyBqdXN0 IHdhc3RlcworCSAqIGN5Y2xlcy4KKwkgKgorCSAqIDMuIEluZGV4ZXMgY2Fubm90IGJlIGNyZWF0 ZWQgb24gdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucywgc28gZmFzdAorCSAqIGNoZWNraW5nIG5v dC1udWxsIGNvbnN0cmFpbnRzIGlzIG5vdCBhcHBsaWNhYmxlIHRvIHRoZW0uCisJICoKKwkgKiA0 LiBUaGlzIGFwcGxpZXMgdG8gcGxhaW4gcmVsYXRpb25zIG9ubHkuCisJICoKKwkgKiA1LiBUbyBw cmV2ZW50IHBvc3NpYmxlIGNvbmN1cnJlbmN5IGlzc3VlcywgdGhlIHRhYmxlIG11c3QgYWxyZWFk eSBiZQorCSAqIGxvY2tlZCB3aXRoIGFuIEFjY2Vzc0V4Y2x1c2l2ZUxvY2ssIHdoaWNoIGlzIHRo ZSBsb2NrIG9idGFpbmVkIGR1cmluZworCSAqIEFMVEVSIFRBQkxFIFNFVCBOT1QgTlVMTC4KKwkg Ki8KKwlpZiAoIW5lZWRzY2FuICYmCisJCW5ld3JlbCA9PSBOVUxMICYmCisJCXRhYi0+dmVyaWZ5 X25ld19ub3RudWxsICYmCisJCW5vdG51bGxfdmlydHVhbF9hdHRycyA9PSBOSUwgJiYKKwkJb2xk cmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9SRUxBVElPTiAmJgorCQlDaGVja1JlbGF0 aW9uTG9ja2VkQnlNZShvbGRyZWwsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2ssIGZhbHNlKSkKKwl7CisJ CUxpc3QJICAgKm5vdG51bGxfYXR0bnVtcyA9IE5JTDsKKworCQlBc3NlcnQoIXRhYi0+cmV3cml0 ZSk7CisKKwkJZm9yZWFjaChsLCB0YWItPmNvbnN0cmFpbnRzKQorCQl7CisJCQlGb3JtX3BnX2F0 dHJpYnV0ZSBhdHRyOworCQkJTmV3Q29uc3RyYWludCAqY29uID0gbGZpcnN0KGwpOworCisJCQkv KgorCQkJICogVGhpcyBtYXkgYmUgYSBGT1JFSUdOIEtFWSAoZXZlbiBpZiBub3QgYSBDSEVDSyBj b25zdHJhaW50KSwKKwkJCSAqIHRoZXJlZm9yZSB3ZSBjYW5ub3QganVzdCByYWlzZSBlcnJvciBm b3Igbm9uLU5PVC1OVUxMCisJCQkgKiBjb25zdHJhaW50LgorCQkJICovCisJCQlpZiAoY29uLT5j b250eXBlICE9IENPTlNUUl9OT1ROVUxMKQorCQkJCWNvbnRpbnVlOworCisJCQlhdHRyID0gVHVw bGVEZXNjQXR0cihuZXdUdXBEZXNjLCBjb24tPmF0dG51bSAtIDEpOworCisJCQlpZiAoYXR0ci0+ YXR0aXNkcm9wcGVkKQorCQkJCWNvbnRpbnVlOworCisJCQlBc3NlcnQoYXR0ci0+YXR0bm90bnVs bCk7CisJCQlBc3NlcnQoYXR0ci0+YXR0bnVtID09IGNvbi0+YXR0bnVtKTsKKwkJCUFzc2VydChh dHRyLT5hdHRnZW5lcmF0ZWQgIT0gQVRUUklCVVRFX0dFTkVSQVRFRF9WSVJUVUFMKTsKKworCQkJ bm90bnVsbF9hdHRudW1zID0gbGlzdF9hcHBlbmRfdW5pcXVlX2ludChub3RudWxsX2F0dG51bXMs CisJCQkJCQkJCQkJCQkJIGF0dHItPmF0dG51bSk7CisJCX0KKworCQlpZiAobm90bnVsbF9hdHRu dW1zICE9IE5JTCkKKwkJeworCQkJaWYgKGluZGV4X2NoZWNrX25vdG51bGwob2xkcmVsLCBub3Ru dWxsX2F0dG51bXMpKQorCQkJCWVyZXBvcnQoREVCVUcxLAorCQkJCQkJZXJybXNnX2ludGVybmFs KCJhbGwgbmV3IG5vdC1udWxsIGNvbnN0cmFpbnRzIG9uIHJlbGF0aW9uIFwiJXNcIiBoYXZlIGJl ZW4gdmFsaWRhdGVkIGJ5IHVzaW5nIGluZGV4IHNjYW4iLAorCQkJCQkJCQkJCVJlbGF0aW9uR2V0 UmVsYXRpb25OYW1lKG9sZHJlbCkpKTsKKwkJCWVsc2UKKwkJCQluZWVkc2NhbiA9IHRydWU7CisJ CX0KKwl9CisJZWxzZSBpZiAobm90bnVsbF9hdHRycyB8fCBub3RudWxsX3ZpcnR1YWxfYXR0cnMp CisJCW5lZWRzY2FuID0gdHJ1ZTsKKwogCWlmIChuZXdyZWwgfHwgbmVlZHNjYW4pCiAJewogCQlF eHByQ29udGV4dCAqZWNvbnRleHQ7CkBAIC03OTQ5LDYgKzgwMjQsNyBAQCBBVEV4ZWNTZXROb3RO dWxsKExpc3QgKip3cXVldWUsIFJlbGF0aW9uIHJlbCwgY2hhciAqY29uTmFtZSwgY2hhciAqY29s TmFtZSwKIAlDb29rZWRDb25zdHJhaW50ICpjY29uOwogCUxpc3QJICAgKmNvb2tlZDsKIAlib29s CQlpc19ub19pbmhlcml0ID0gZmFsc2U7CisJQWx0ZXJlZFRhYmxlSW5mbyAqdGFiID0gQVRHZXRR dWV1ZUVudHJ5KHdxdWV1ZSwgcmVsKTs7CiAKIAkvKiBHdWFyZCBhZ2FpbnN0IHN0YWNrIG92ZXJm bG93IGR1ZSB0byBvdmVybHkgZGVlcCBpbmhlcml0YW5jZSB0cmVlLiAqLwogCWNoZWNrX3N0YWNr X2RlcHRoKCk7CkBAIC04MDc3LDYgKzgxNTMsMjUgQEAgQVRFeGVjU2V0Tm90TnVsbChMaXN0ICoq d3F1ZXVlLCBSZWxhdGlvbiByZWwsIGNoYXIgKmNvbk5hbWUsIGNoYXIgKmNvbE5hbWUsCiAJY29v a2VkID0gQWRkUmVsYXRpb25OZXdDb25zdHJhaW50cyhyZWwsIE5JTCwgbGlzdF9tYWtlMShjb25z dHJhaW50KSwKIAkJCQkJCQkJCSAgIGZhbHNlLCAhcmVjdXJzaW5nLCBmYWxzZSwgTlVMTCk7CiAJ Y2NvbiA9IGxpbml0aWFsKGNvb2tlZCk7CisKKwlBc3NlcnQoY2Nvbi0+Y29udHlwZSA9PSBDT05T VFJfTk9UTlVMTCk7CisKKwkvKgorCSAqIFdlIG1heSB1c2luZyBpbmRleHNjYW4gbWVjaGFuaXNt IHRvIHZlcnRpZnkgdGhpcyBub3QtbnVsbCBjb25zdHJhaW50IGluCisJICogUGhhc2UzLiAgQWRk IHRoaXMgdG8tYmUtdmFsaWRhdGVkIG5vdC1udWxsIGNvbnN0cmFpbnQgdG8gUGhhc2UgMydzCisJ ICogcXVldWUuCisJICovCisJaWYgKCFjY29uLT5za2lwX3ZhbGlkYXRpb24pCisJeworCQlOZXdD b25zdHJhaW50ICpuZXdjb24gPSBwYWxsb2MwX29iamVjdChOZXdDb25zdHJhaW50KTsKKworCQlu ZXdjb24tPm5hbWUgPSBjY29uLT5uYW1lOworCQluZXdjb24tPmNvbnR5cGUgPSBDT05TVFJfTk9U TlVMTDsKKwkJbmV3Y29uLT5hdHRudW0gPSBjY29uLT5hdHRudW07CisKKwkJdGFiLT5jb25zdHJh aW50cyA9IGxhcHBlbmQodGFiLT5jb25zdHJhaW50cywgbmV3Y29uKTsKKwl9CisKIAlPYmplY3RB ZGRyZXNzU2V0KGFkZHJlc3MsIENvbnN0cmFpbnRSZWxhdGlvbklkLCBjY29uLT5jb25vaWQpOwog CiAJSW52b2tlT2JqZWN0UG9zdEFsdGVySG9vayhSZWxhdGlvblJlbGF0aW9uSWQsCkBAIC05OTgz LDEzICsxMDA3OCwxNSBAQCBBVEFkZENoZWNrTk5Db25zdHJhaW50KExpc3QgKip3cXVldWUsIEFs dGVyZWRUYWJsZUluZm8gKnRhYiwgUmVsYXRpb24gcmVsLAogCXsKIAkJQ29va2VkQ29uc3RyYWlu dCAqY2NvbiA9IChDb29rZWRDb25zdHJhaW50ICopIGxmaXJzdChsY29uKTsKIAotCQlpZiAoIWNj b24tPnNraXBfdmFsaWRhdGlvbiAmJiBjY29uLT5jb250eXBlICE9IENPTlNUUl9OT1ROVUxMKQor CQlpZiAoIWNjb24tPnNraXBfdmFsaWRhdGlvbikKIAkJewogCQkJTmV3Q29uc3RyYWludCAqbmV3 Y29uOwogCiAJCQluZXdjb24gPSBwYWxsb2MwX29iamVjdChOZXdDb25zdHJhaW50KTsKIAkJCW5l d2Nvbi0+bmFtZSA9IGNjb24tPm5hbWU7CiAJCQluZXdjb24tPmNvbnR5cGUgPSBjY29uLT5jb250 eXBlOworCQkJaWYgKGNjb24tPmNvbnR5cGUgPT0gQ09OU1RSX05PVE5VTEwpCisJCQkJbmV3Y29u LT5hdHRudW0gPSBjY29uLT5hdHRudW07CiAJCQluZXdjb24tPnF1YWwgPSBjY29uLT5leHByOwog CiAJCQl0YWItPmNvbnN0cmFpbnRzID0gbGFwcGVuZCh0YWItPmNvbnN0cmFpbnRzLCBuZXdjb24p OwpAQCAtMTMyNTgsNiArMTMzNTUsNyBAQCBRdWV1ZU5OQ29uc3RyYWludFZhbGlkYXRpb24oTGlz dCAqKndxdWV1ZSwgUmVsYXRpb24gY29ucmVsLCBSZWxhdGlvbiByZWwsCiAJTGlzdAkgICAqY2hp bGRyZW4gPSBOSUw7CiAJQXR0ck51bWJlcglhdHRudW07CiAJY2hhcgkgICAqY29sbmFtZTsKKwlO ZXdDb25zdHJhaW50ICpuZXdjb247CiAKIAljb24gPSAoRm9ybV9wZ19jb25zdHJhaW50KSBHRVRT VFJVQ1QoY29udHVwbGUpOwogCUFzc2VydChjb24tPmNvbnR5cGUgPT0gQ09OU1RSQUlOVF9OT1RO VUxMKTsKQEAgLTEzMzIxLDcgKzEzNDE5LDE5IEBAIFF1ZXVlTk5Db25zdHJhaW50VmFsaWRhdGlv bihMaXN0ICoqd3F1ZXVlLCBSZWxhdGlvbiBjb25yZWwsIFJlbGF0aW9uIHJlbCwKIAkvKiBTZXQg YXR0bm90bnVsbCBhcHByb3ByaWF0ZWx5IHdpdGhvdXQgcXVldWVpbmcgYW5vdGhlciB2YWxpZGF0 aW9uICovCiAJc2V0X2F0dG5vdG51bGwoTlVMTCwgcmVsLCBhdHRudW0sIHRydWUsIGZhbHNlKTsK IAorCS8qCisJICogUXVldWUgdmFsaWRhdGlvbiBmb3IgcGhhc2UgMy4gQUxURVIgVEFCTEUgU0VU IE5PVCBOVUxMIGFkZHMgYSBOT1QgTlVMTAorCSAqIGNvbnN0cmFpbnQgdG8gQWx0ZXJlZFRhYmxl SW5mby0+Y29uc3RyYWludHMsIGZvciBjb25zaXN0ZW5jeSwgZG8gdGhlCisJICogc2FtZSBoZXJl LgorCSAqLworCW5ld2NvbiA9IHBhbGxvYzBfb2JqZWN0KE5ld0NvbnN0cmFpbnQpOworCW5ld2Nv bi0+bmFtZSA9IGNvbG5hbWU7CisJbmV3Y29uLT5jb250eXBlID0gQ09OU1RSX05PVE5VTEw7CisJ bmV3Y29uLT5hdHRudW0gPSBhdHRudW07CisKKwkvKiBGaW5kIG9yIGNyZWF0ZSB3b3JrIHF1ZXVl IGVudHJ5IGZvciB0aGlzIHRhYmxlICovCiAJdGFiID0gQVRHZXRRdWV1ZUVudHJ5KHdxdWV1ZSwg cmVsKTsKKwl0YWItPmNvbnN0cmFpbnRzID0gbGFwcGVuZCh0YWItPmNvbnN0cmFpbnRzLCBuZXdj b24pOwogCXRhYi0+dmVyaWZ5X25ld19ub3RudWxsID0gdHJ1ZTsKIAogCS8qCkBAIC0yMzM0MCwz ICsyMzQ1MCwxNjYgQEAgQVRFeGVjU3BsaXRQYXJ0aXRpb24oTGlzdCAqKndxdWV1ZSwgQWx0ZXJl ZFRhYmxlSW5mbyAqdGFiLCBSZWxhdGlvbiByZWwsCiAJLyogUmVzdG9yZSB0aGUgdXNlcmlkIGFu ZCBzZWN1cml0eSBjb250ZXh0LiAqLwogCVNldFVzZXJJZEFuZFNlY0NvbnRleHQoc2F2ZV91c2Vy aWQsIHNhdmVfc2VjX2NvbnRleHQpOwogfQorCisvKgorICogbm90bnVsbF9hdHRudW1zOiBsaXN0 IG9mIGF0dHJpYnV0ZSBudW1iZXJzIGZvciBhbGwgbmV3bHkgYWRkZWQgTk9UIE5VTEwKKyAqIGNv bnN0cmFpbnRzLgorICoKKyAqIEZvciBlYWNoIE5PVCBOVUxMIGF0dHJpYnV0ZSwgZmlyc3QgY2hl Y2sgd2hldGhlciB0aGUgcmVsYXRpb24gaGFzIGEgc3VpdGFibGUKKyAqIGluZGV4IHRvIGZldGNo IHRoYXQgYXR0cmlidXRlIGNvbnRlbnQuIElmIHNvLCB1c2luZyBpbmRleHNjYW4gdG8gdmVyaWZ5 IHRoYXQKKyAqIGF0dHJpYnV0ZSBjb250YWlucyBubyBOVUxMIHZhbHVlcy4KKyAqCisgKiBSZXR1 cm5pbmcgdHJ1ZSBpbmRpY2F0ZXMgdGhhdCBhbGwgbmV3IE5PVCBOVUxMIGNvbnN0cmFpbnRzIGhh dmUgYmVlbgorICogdmFsaWRhdGVkIGFuZCB0aGF0IG5vIGFkZGl0aW9uYWwgdGFibGUgc2NhbiBp cyByZXF1aXJlZC4KKyAqLworc3RhdGljIGJvb2wKK2luZGV4X2NoZWNrX25vdG51bGwoUmVsYXRp b24gcmVsYXRpb24sIExpc3QgKm5vdG51bGxfYXR0bnVtcykKK3sKKwlTeXNTY2FuRGVzYyBpbmRz Y2FuOworCVNjYW5LZXlEYXRhIHNrZXk7CisJSGVhcFR1cGxlCWh0dXA7CisJTGlzdAkgICAqaWR4 cyA9IE5JTDsKKwlMaXN0CSAgICphdHRudW1zID0gTklMOworCWJvb2wJCWFsbF9ub3RfbnVsbCA9 IHRydWU7CisJTGlzdENlbGwgICAqbGMsCisJCQkgICAqbGMyOworCisJUmVsYXRpb24JcGdfaW5k ZXggPSB0YWJsZV9vcGVuKEluZGV4UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCS8q IFByZXBhcmUgdG8gc2NhbiBwZ19pbmRleCBmb3IgZW50cmllcyBoYXZpbmcgaW5kcmVsaWQgPSB0 aGlzIHJlbCAqLworCVNjYW5LZXlJbml0KCZza2V5LAorCQkJCUFudW1fcGdfaW5kZXhfaW5kcmVs aWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLAorCQkJCUZfT0lERVEsCisJCQkJT2JqZWN0 SWRHZXREYXR1bShSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKSkpOworCisJaW5kc2NhbiA9IHN5 c3RhYmxlX2JlZ2luc2NhbihwZ19pbmRleCwgSW5kZXhJbmRyZWxpZEluZGV4SWQsIHRydWUsCisJ CQkJCQkJCSBOVUxMLCAxLCAmc2tleSk7CisKKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZChodHVw ID0gc3lzdGFibGVfZ2V0bmV4dChpbmRzY2FuKSkpCisJeworCQlGb3JtX3BnX2F0dHJpYnV0ZSBh dHRyOworCQlSZWxhdGlvbglpbmRleF9yZWw7CisKKwkJRm9ybV9wZ19pbmRleCBpbmRleCA9IChG b3JtX3BnX2luZGV4KSBHRVRTVFJVQ1QoaHR1cCk7CisKKwkJLyoKKwkJICogV2Ugb25seSB1c2Ug bm9uLWRlZmVycmVkLCB2YWxpZCwgYW5kIGFsaXZlIGJ0cmVlIGluZGV4IHRvIHZlcnRpZnkKKwkJ ICogbm90LW51bGwgY29uc3RyYWludHMKKwkJICovCisJCWlmICghaW5kZXgtPmluZGltbWVkaWF0 ZSB8fCAhaW5kZXgtPmluZGlzdmFsaWQgfHwgIWluZGV4LT5pbmRpc2xpdmUpCisJCQljb250aW51 ZTsKKworCQkvKiBjYW5ub3QgdXNlIGV4cHJlc3Npb24gaW5kZXggb3IgcGFydGlhbCBpbmRleCB0 b28gKi8KKwkJaWYgKCFoZWFwX2F0dGlzbnVsbChodHVwLCBBbnVtX3BnX2luZGV4X2luZGV4cHJz LCBOVUxMKSB8fAorCQkJIWhlYXBfYXR0aXNudWxsKGh0dXAsIEFudW1fcGdfaW5kZXhfaW5kcHJl ZCwgTlVMTCkpCisJCQljb250aW51ZTsKKworCQlpbmRleF9yZWwgPSBpbmRleF9vcGVuKGluZGV4 LT5pbmRleHJlbGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJCWlmIChpbmRleF9yZWwtPnJkX3Jl bC0+cmVsYW0gIT0gQlRSRUVfQU1fT0lEKQorCQl7CisJCQlpbmRleF9jbG9zZShpbmRleF9yZWws IEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJYXR0ciA9IFR1cGxl RGVzY0F0dHIoUmVsYXRpb25HZXREZXNjcihyZWxhdGlvbiksIChpbmRleC0+aW5ka2V5LnZhbHVl c1swXSAtIDEpKTsKKworCQlpZiAobGlzdF9tZW1iZXJfaW50KG5vdG51bGxfYXR0bnVtcywgYXR0 ci0+YXR0bnVtKSAmJgorCQkJIWxpc3RfbWVtYmVyX2ludChhdHRudW1zLCBhdHRyLT5hdHRudW0p KQorCQl7CisJCQlhdHRudW1zID0gbGFwcGVuZF9pbnQoYXR0bnVtcywgYXR0ci0+YXR0bnVtKTsK KwkJCWlkeHMgPSBsYXBwZW5kX29pZChpZHhzLCBpbmRleC0+aW5kZXhyZWxpZCk7CisJCX0KKwor CQlpbmRleF9jbG9zZShpbmRleF9yZWwsIE5vTG9jayk7CisJfQorCXN5c3RhYmxlX2VuZHNjYW4o aW5kc2Nhbik7CisJdGFibGVfY2xvc2UocGdfaW5kZXgsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkv KgorCSAqIEVhY2ggTk9UIE5VTEwgY29uc3RyYWludCByZXF1aXJlcyBhIHN1aXRhYmxlIGluZGV4 IGZvciB2ZXJpZmljYXRpb24uIElmCisJICogbm8gc3VjaCBpbmRleCBleGlzdHMsIGZhbGwgYmFj ayB0byBhIHJlZ3VsYXIgdGFibGUgc2NhbiB0byB2ZXJpZnkgdGhlCisJICogY29uc3RyYWludHMu CisJICovCisJaWYgKGF0dG51bXMgPT0gTklMIHx8CisJCWxpc3RfbGVuZ3RoKG5vdG51bGxfYXR0 bnVtcykgIT0gbGlzdF9sZW5ndGgoYXR0bnVtcykpCisJCXJldHVybiBmYWxzZTsKKworCWZvcmVh Y2hfaW50KGF0dG5vLCBub3RudWxsX2F0dG51bXMpCisJeworCQlpZiAoIWxpc3RfbWVtYmVyX2lu dChhdHRudW1zLCBhdHRubykpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJZm9yYm90aChsYywg YXR0bnVtcywgbGMyLCBpZHhzKQorCXsKKwkJU25hcHNob3REYXRhIERpcnR5U25hcHNob3Q7CisJ CUluZGV4U2NhbkRlc2MgaW5kZXhfc2NhbjsKKwkJU2NhbktleURhdGEgc2NhbmtleXNbSU5ERVhf TUFYX0tFWVNdOworCQlBdHRyTnVtYmVyCXNrX2F0dG5vID0gLTE7CisJCUF0dHJOdW1iZXIJYXR0 bm8gPSBsZmlyc3RfaW50KGxjKTsKKwkJT2lkCQkJaW5kZXhvaWQgPSBsZmlyc3Rfb2lkKGxjMik7 CisKKwkJUmVsYXRpb24JaWR4cmVsID0gaW5kZXhfb3BlbihpbmRleG9pZCwgTm9Mb2NrKTsKKwkJ SW5kZXhJbmZvICAqaW5kZXhJbmZvID0gQnVpbGRJbmRleEluZm8oaWR4cmVsKTsKKwkJaW50CQkJ aW5kbmtleWF0dHMgPSBJbmRleFJlbGF0aW9uR2V0TnVtYmVyT2ZLZXlBdHRyaWJ1dGVzKGlkeHJl bCk7CisKKwkJVHVwbGVUYWJsZVNsb3QgKmV4aXN0aW5nX3Nsb3QgPSB0YWJsZV9zbG90X2NyZWF0 ZShyZWxhdGlvbiwgTlVMTCk7CisKKwkJLyoKKwkJICogU2VhcmNoIHRoZSB0dXBsZXMgdGhhdCBh cmUgaW4gdGhlIGluZGV4IGZvciBhbnkgdmlvbGF0aW9ucywKKwkJICogaW5jbHVkaW5nIHR1cGxl cyB0aGF0IGFyZW4ndCB2aXNpYmxlIHlldC4KKwkJICovCisJCUluaXREaXJ0eVNuYXBzaG90KERp cnR5U25hcHNob3QpOworCisJCWlmIChpbmRleEluZm8tPmlpX0luZGV4QXR0ck51bWJlcnNbMF0g PT0gYXR0bm8pCisJCQlza19hdHRubyA9IDE7CisJCWVsc2UKKwkJCWVsb2coRVJST1IsICJjYWNo ZSBsb29rdXAgZmFpbGVkIGZvciBhdHRyaWJ1dGUgbnVtYmVyICVkIG9uIGluZGV4ICV1IiwKKwkJ CQkgaW5kZXhvaWQsIGF0dG5vKTsKKworCQlmb3IgKGludCBpID0gMDsgaSA8IGluZG5rZXlhdHRz OyBpKyspCisJCXsKKwkJCS8qIHNldCB1cCBhbiBJUyBOVUxMIHNjYW4ga2V5IHNvIHRoYXQgd2Ug aWdub3JlIG5vdCBudWxscyAqLworCQkJU2NhbktleUVudHJ5SW5pdGlhbGl6ZSgmc2NhbmtleXNb aV0sCisJCQkJCQkJCSAgIFNLX0lTTlVMTCB8IFNLX1NFQVJDSE5VTEwsCisJCQkJCQkJCSAgIHNr X2F0dG5vLAkvKiBpbmRleCBjb2wgdG8gc2NhbiAqLworCQkJCQkJCQkgICBJbnZhbGlkU3RyYXRl Z3ksIC8qIG5vIHN0cmF0ZWd5ICovCisJCQkJCQkJCSAgIEludmFsaWRPaWQsCS8qIG5vIHN0cmF0 ZWd5IHN1YnR5cGUgKi8KKwkJCQkJCQkJICAgSW52YWxpZE9pZCwJLyogbm8gY29sbGF0aW9uICov CisJCQkJCQkJCSAgIEludmFsaWRPaWQsCS8qIG5vIHJlZyBwcm9jIGZvciB0aGlzICovCisJCQkJ CQkJCSAgIChEYXR1bSkgMCk7CS8qIGNvbnN0YW50ICovCisJCX0KKworCQlpbmRleF9zY2FuID0g aW5kZXhfYmVnaW5zY2FuKHJlbGF0aW9uLAorCQkJCQkJCQkJIGlkeHJlbCwKKwkJCQkJCQkJCSAm RGlydHlTbmFwc2hvdCwKKwkJCQkJCQkJCSBOVUxMLAorCQkJCQkJCQkJIGluZG5rZXlhdHRzLAor CQkJCQkJCQkJIDApOworCQlpbmRleF9yZXNjYW4oaW5kZXhfc2Nhbiwgc2NhbmtleXMsIGluZG5r ZXlhdHRzLCBOVUxMLCAwKTsKKworCQl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90KGluZGV4X3Nj YW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBleGlzdGluZ19zbG90KSkKKwkJeworCQkJLyoKKwkJ CSAqIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgZm91bmQgdGhhdCBzb21lIGF0dHJpYnV0ZSB2YWx1 ZSBpcyBOVUxMLgorCQkJICogYnRyZWUgaW5kZXhlcyBhcmUgbmV2ZXIgbG9zc3ksIHdlIGRvbid0 IG5lZWQgcmVjaGVjayB0aGUKKwkJCSAqIGNvbmRpdGlvbi4KKwkJCSAqLworCQkJYWxsX25vdF9u dWxsID0gZmFsc2U7CisJCQlicmVhazsKKwkJfQorCisJCWluZGV4X2VuZHNjYW4oaW5kZXhfc2Nh bik7CisJCWluZGV4X2Nsb3NlKGlkeHJlbCwgTm9Mb2NrKTsKKwkJRXhlY0Ryb3BTaW5nbGVUdXBs ZVRhYmxlU2xvdChleGlzdGluZ19zbG90KTsKKworCQkvKiBleGl0IGVhcmxpZXIgKi8KKwkJaWYg KCFhbGxfbm90X251bGwpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9 CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvbnN0cmFpbnRzLm91dCBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29uc3RyYWludHMub3V0CmluZGV4IGViYzg5MmEy YTQyLi5mYzZmNTQ1NzM3MCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9j b25zdHJhaW50cy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb25zdHJhaW50 cy5vdXQKQEAgLTE3MTcsMyArMTcxNyw2OCBAQCBDT01NRU5UIE9OIENPTlNUUkFJTlQgaW52X2Nr IE9OIERPTUFJTiBjb25zdHJhaW50X2NvbW1lbnRzX2RvbSBJUyAnY29tbWVudCBvbiBpbgogQ1JF QVRFIFRBQkxFIHJlZ3Jlc3Nfbm90bnVsbDEgKGEgaW50ZWdlcik7CiBDUkVBVEUgVEFCTEUgcmVn cmVzc19ub3RudWxsMiAoKSBJTkhFUklUUyAocmVncmVzc19ub3RudWxsMSk7CiBBTFRFUiBUQUJM RSBPTkxZIHJlZ3Jlc3Nfbm90bnVsbDIgQUxURVIgQ09MVU1OIGEgU0VUIE5PVCBOVUxMOworQ1JF QVRFIFRBQkxFIHRwX25vdG51bGwgKGEgaW50LCBiIGludCwgYyBpbnQsIGQgaW50LCBmMSBpbnQg ZGVmYXVsdCAxMCwgZjIgaW50IGRlZmF1bHQgMTEpIFBBUlRJVElPTiBCWSByYW5nZShhKTsKK0NS RUFURSBUQUJMRSB0cF9ub3RudWxsXzEgcGFydGl0aW9uIG9mIHRwX25vdG51bGwgZm9yIHZhbHVl cyBGUk9NICggMSApIHRvICgxMCk7CitDUkVBVEUgVEFCTEUgdHBfbm90bnVsbF8yIHBhcnRpdGlv biBvZiB0cF9ub3RudWxsIGZvciB2YWx1ZXMgRlJPTSAoIDEwICkgdG8gKDIxKTsKK0NSRUFURSBJ TkRFWCB0cF9ub3RudWxsX2lkeF9iIE9OIHRwX25vdG51bGwoYik7CitDUkVBVEUgSU5ERVggdHBf bm90bnVsbF9pZHhfYyBPTiB0cF9ub3RudWxsKGMpOworQ1JFQVRFIElOREVYIHRwX25vdG51bGxf aWR4X2QgT04gdHBfbm90bnVsbChkKTsKK0NSRUFURSBJTkRFWCB0cF9ub3RudWxsX2lkeF9kX2lu Y2x1ZGUgT04gdHBfbm90bnVsbChkKSBpbmNsdWRlKGYxKTsKK0NSRUFURSBJTkRFWCB0cF9ub3Ru dWxsX2lkeF9mMiBPTiB0cF9ub3RudWxsIFVTSU5HIGhhc2ggKGYyIGludDRfb3BzKTsKK0lOU0VS VCBJTlRPIHRwX25vdG51bGwgU0VMRUNUIGcsIGcgKyAxMCwgZyArIDE1LCBnICsgcmFuZG9tKG1p bj0+MTo6aW50LCBtYXg9PjEwOjppbnQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDgsMTkpIGc7CitT RVQgbG9nX3N0YXRlbWVudCB0byBOT05FOworU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgVE8gJ2Rl YnVnMSc7CistLWRlYnVnIG1lc3NhZ2Ugc2hvdWxkIGNvbnRhaW4gImhhdmUgYmVlbiB2YWxpZGF0 ZWQgYnkgdXNpbmcgaW5kZXggc2NhbiIKK0FMVEVSIFRBQkxFIHRwX25vdG51bGwgQUxURVIgQ09M VU1OIGIgU0VUIE5PVCBOVUxMOworREVCVUc6ICBhbGwgbmV3IG5vdC1udWxsIGNvbnN0cmFpbnRz IG9uIHJlbGF0aW9uICJ0cF9ub3RudWxsXzEiIGhhdmUgYmVlbiB2YWxpZGF0ZWQgYnkgdXNpbmcg aW5kZXggc2NhbgorREVCVUc6ICBhbGwgbmV3IG5vdC1udWxsIGNvbnN0cmFpbnRzIG9uIHJlbGF0 aW9uICJ0cF9ub3RudWxsXzIiIGhhdmUgYmVlbiB2YWxpZGF0ZWQgYnkgdXNpbmcgaW5kZXggc2Nh bgorQUxURVIgVEFCTEUgdHBfbm90bnVsbCBBTFRFUiBDT0xVTU4gYiBEUk9QIE5PVCBOVUxMOwor LS1kZWJ1ZyBtZXNzYWdlIHNob3VsZCBjb250YWluICJoYXZlIGJlZW4gdmFsaWRhdGVkIGJ5IHVz aW5nIGluZGV4IHNjYW4iCitBTFRFUiBUQUJMRSB0cF9ub3RudWxsXzEgQUxURVIgQ09MVU1OIGIg U0VUIE5PVCBOVUxMOworREVCVUc6ICBhbGwgbmV3IG5vdC1udWxsIGNvbnN0cmFpbnRzIG9uIHJl bGF0aW9uICJ0cF9ub3RudWxsXzEiIGhhdmUgYmVlbiB2YWxpZGF0ZWQgYnkgdXNpbmcgaW5kZXgg c2NhbgorLS1kZWJ1ZyBtZXNzYWdlIHNob3VsZCBjb250YWluICJoYXZlIGJlZW4gdmFsaWRhdGVk IGJ5IHVzaW5nIGluZGV4IHNjYW4iCitBTFRFUiBUQUJMRSB0cF9ub3RudWxsXzIgQUxURVIgQ09M VU1OIGIgU0VUIE5PVCBOVUxMOworREVCVUc6ICBhbGwgbmV3IG5vdC1udWxsIGNvbnN0cmFpbnRz IG9uIHJlbGF0aW9uICJ0cF9ub3RudWxsXzIiIGhhdmUgYmVlbiB2YWxpZGF0ZWQgYnkgdXNpbmcg aW5kZXggc2NhbgorQUxURVIgVEFCTEUgdHBfbm90bnVsbF8yIEFERCBDT05TVFJBSU5UIG5uX2Qg Tk9UIE5VTEwgZCBOT1QgVkFMSUQ7CistLWRlYnVnIG1lc3NhZ2Ugc2hvdWxkIG5vdCBjb250YWlu ICJoYXZlIGJlZW4gdmFsaWRhdGVkIGJ5IHVzaW5nIGluZGV4IHNjYW4iCitBTFRFUiBUQUJMRSB0 cF9ub3RudWxsXzIgVkFMSURBVEUgQ09OU1RSQUlOVCBubl9kOworREVCVUc6ICB2ZXJpZnlpbmcg dGFibGUgInRwX25vdG51bGxfMiIKKy0tZGVidWcgbWVzc2FnZSBzaG91bGQgbm90IGNvbnRhaW4g ImhhdmUgYmVlbiB2YWxpZGF0ZWQgYnkgdXNpbmcgaW5kZXggc2NhbiIKK0FMVEVSIFRBQkxFIHRw X25vdG51bGwgQUREIENPTlNUUkFJTlQgbm5mMSBOT1QgTlVMTCBmMTsKK0RFQlVHOiAgdmVyaWZ5 aW5nIHRhYmxlICJ0cF9ub3RudWxsXzEiCitERUJVRzogIHZlcmlmeWluZyB0YWJsZSAidHBfbm90 bnVsbF8yIgorLS1kZWJ1ZyBtZXNzYWdlIHNob3VsZCBub3QgY29udGFpbiAiaGF2ZSBiZWVuIHZh bGlkYXRlZCBieSB1c2luZyBpbmRleCBzY2FuIgorQUxURVIgVEFCTEUgdHBfbm90bnVsbCBBREQg Q09OU1RSQUlOVCBubmYyIE5PVCBOVUxMIGYyOworREVCVUc6ICB2ZXJpZnlpbmcgdGFibGUgInRw X25vdG51bGxfMSIKK0RFQlVHOiAgdmVyaWZ5aW5nIHRhYmxlICJ0cF9ub3RudWxsXzIiCistLWRl YnVnIG1lc3NhZ2Ugc2hvdWxkIG5vdCBjb250YWluICJoYXZlIGJlZW4gdmFsaWRhdGVkIGJ5IHVz aW5nIGluZGV4IHNjYW4iCitBTFRFUiBUQUJMRSB0cF9ub3RudWxsIEFMVEVSIENPTFVNTiBhIFNF VCBOT1QgTlVMTCwgQUREIENPTlNUUkFJTlQgY19ubiBOT1QgTlVMTCBjOworREVCVUc6ICB2ZXJp ZnlpbmcgdGFibGUgInRwX25vdG51bGxfMSIKK0RFQlVHOiAgdmVyaWZ5aW5nIHRhYmxlICJ0cF9u b3RudWxsXzIiCistLWRlYnVnIG1lc3NhZ2Ugc2hvdWxkIGNvbnRhaW4gImhhdmUgYmVlbiB2YWxp ZGF0ZWQgYnkgdXNpbmcgaW5kZXggc2NhbiIKK0FMVEVSIFRBQkxFIHRwX25vdG51bGwgQUxURVIg Q09MVU1OIGQgU0VUIE5PVCBOVUxMLCBBREQgQ09OU1RSQUlOVCBjX25uIE5PVCBOVUxMIGMsIEFM VEVSIENPTFVNTiBiIFNFVCBOT1QgTlVMTDsKK0RFQlVHOiAgYWxsIG5ldyBub3QtbnVsbCBjb25z dHJhaW50cyBvbiByZWxhdGlvbiAidHBfbm90bnVsbF8xIiBoYXZlIGJlZW4gdmFsaWRhdGVkIGJ5 IHVzaW5nIGluZGV4IHNjYW4KK0FMVEVSIFRBQkxFIHRwX25vdG51bGwgQUxURVIgQ09MVU1OIGIg RFJPUCBOT1QgTlVMTDsKKy0tZGVidWcgbWVzc2FnZSBzaG91bGQgbm90IGNvbnRhaW4gImhhdmUg YmVlbiB2YWxpZGF0ZWQgYnkgdXNpbmcgaW5kZXggc2NhbiIKK0FMVEVSIFRBQkxFIHRwX25vdG51 bGwgQUxURVIgQ09MVU1OIGIgU0VUIE5PVCBOVUxMLCBBTFRFUiBDT0xVTU4gYiBTRVQgREFUQSBU WVBFIEJJR0lOVDsKK0RFQlVHOiAgcmV3cml0aW5nIHRhYmxlICJ0cF9ub3RudWxsXzEiCitERUJV RzogIGJ1aWxkaW5nIGluZGV4ICJ0cF9ub3RudWxsXzFfY19pZHgiIG9uIHRhYmxlICJ0cF9ub3Ru dWxsXzEiIHNlcmlhbGx5CitERUJVRzogIGluZGV4ICJ0cF9ub3RudWxsXzFfY19pZHgiIGNhbiBz YWZlbHkgdXNlIGRlZHVwbGljYXRpb24KK0RFQlVHOiAgYnVpbGRpbmcgaW5kZXggInRwX25vdG51 bGxfMV9kX2lkeCIgb24gdGFibGUgInRwX25vdG51bGxfMSIgc2VyaWFsbHkKK0RFQlVHOiAgaW5k ZXggInRwX25vdG51bGxfMV9kX2lkeCIgY2FuIHNhZmVseSB1c2UgZGVkdXBsaWNhdGlvbgorREVC VUc6ICBidWlsZGluZyBpbmRleCAidHBfbm90bnVsbF8xX2RfZjFfaWR4IiBvbiB0YWJsZSAidHBf bm90bnVsbF8xIiBzZXJpYWxseQorREVCVUc6ICBidWlsZGluZyBpbmRleCAidHBfbm90bnVsbF8x X2YyX2lkeCIgb24gdGFibGUgInRwX25vdG51bGxfMSIgc2VyaWFsbHkKK0RFQlVHOiAgYnVpbGRp bmcgaW5kZXggInRwX25vdG51bGxfMV9iX2lkeCIgb24gdGFibGUgInRwX25vdG51bGxfMSIgc2Vy aWFsbHkKK0RFQlVHOiAgaW5kZXggInRwX25vdG51bGxfMV9iX2lkeCIgY2FuIHNhZmVseSB1c2Ug ZGVkdXBsaWNhdGlvbgorREVCVUc6ICByZXdyaXRpbmcgdGFibGUgInRwX25vdG51bGxfMiIKK0RF QlVHOiAgYnVpbGRpbmcgaW5kZXggInRwX25vdG51bGxfMl9jX2lkeCIgb24gdGFibGUgInRwX25v dG51bGxfMiIgc2VyaWFsbHkKK0RFQlVHOiAgaW5kZXggInRwX25vdG51bGxfMl9jX2lkeCIgY2Fu IHNhZmVseSB1c2UgZGVkdXBsaWNhdGlvbgorREVCVUc6ICBidWlsZGluZyBpbmRleCAidHBfbm90 bnVsbF8yX2RfaWR4IiBvbiB0YWJsZSAidHBfbm90bnVsbF8yIiBzZXJpYWxseQorREVCVUc6ICBp bmRleCAidHBfbm90bnVsbF8yX2RfaWR4IiBjYW4gc2FmZWx5IHVzZSBkZWR1cGxpY2F0aW9uCitE RUJVRzogIGJ1aWxkaW5nIGluZGV4ICJ0cF9ub3RudWxsXzJfZF9mMV9pZHgiIG9uIHRhYmxlICJ0 cF9ub3RudWxsXzIiIHNlcmlhbGx5CitERUJVRzogIGJ1aWxkaW5nIGluZGV4ICJ0cF9ub3RudWxs XzJfZjJfaWR4IiBvbiB0YWJsZSAidHBfbm90bnVsbF8yIiBzZXJpYWxseQorREVCVUc6ICBidWls ZGluZyBpbmRleCAidHBfbm90bnVsbF8yX2JfaWR4IiBvbiB0YWJsZSAidHBfbm90bnVsbF8yIiBz ZXJpYWxseQorREVCVUc6ICBpbmRleCAidHBfbm90bnVsbF8yX2JfaWR4IiBjYW4gc2FmZWx5IHVz ZSBkZWR1cGxpY2F0aW9uCitSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOworUkVTRVQgbG9nX3N0 YXRlbWVudDsKK0RST1AgVEFCTEUgdHBfbm90bnVsbDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL2NvbnN0cmFpbnRzLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvbnN0cmFp bnRzLnNxbAppbmRleCAxZTk5ODk2OThiNi4uM2U2YzhhMTEyMGEgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL2NvbnN0cmFpbnRzLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9jb25zdHJhaW50cy5zcWwKQEAgLTEwNTksMyArMTA1OSw1MSBAQCBDT01NRU5UIE9OIENPTlNU UkFJTlQgaW52X2NrIE9OIERPTUFJTiBjb25zdHJhaW50X2NvbW1lbnRzX2RvbSBJUyAnY29tbWVu dCBvbiBpbgogQ1JFQVRFIFRBQkxFIHJlZ3Jlc3Nfbm90bnVsbDEgKGEgaW50ZWdlcik7CiBDUkVB VEUgVEFCTEUgcmVncmVzc19ub3RudWxsMiAoKSBJTkhFUklUUyAocmVncmVzc19ub3RudWxsMSk7 CiBBTFRFUiBUQUJMRSBPTkxZIHJlZ3Jlc3Nfbm90bnVsbDIgQUxURVIgQ09MVU1OIGEgU0VUIE5P VCBOVUxMOworCitDUkVBVEUgVEFCTEUgdHBfbm90bnVsbCAoYSBpbnQsIGIgaW50LCBjIGludCwg ZCBpbnQsIGYxIGludCBkZWZhdWx0IDEwLCBmMiBpbnQgZGVmYXVsdCAxMSkgUEFSVElUSU9OIEJZ IHJhbmdlKGEpOworQ1JFQVRFIFRBQkxFIHRwX25vdG51bGxfMSBwYXJ0aXRpb24gb2YgdHBfbm90 bnVsbCBmb3IgdmFsdWVzIEZST00gKCAxICkgdG8gKDEwKTsKK0NSRUFURSBUQUJMRSB0cF9ub3Ru dWxsXzIgcGFydGl0aW9uIG9mIHRwX25vdG51bGwgZm9yIHZhbHVlcyBGUk9NICggMTAgKSB0byAo MjEpOworQ1JFQVRFIElOREVYIHRwX25vdG51bGxfaWR4X2IgT04gdHBfbm90bnVsbChiKTsKK0NS RUFURSBJTkRFWCB0cF9ub3RudWxsX2lkeF9jIE9OIHRwX25vdG51bGwoYyk7CitDUkVBVEUgSU5E RVggdHBfbm90bnVsbF9pZHhfZCBPTiB0cF9ub3RudWxsKGQpOworQ1JFQVRFIElOREVYIHRwX25v dG51bGxfaWR4X2RfaW5jbHVkZSBPTiB0cF9ub3RudWxsKGQpIGluY2x1ZGUoZjEpOworQ1JFQVRF IElOREVYIHRwX25vdG51bGxfaWR4X2YyIE9OIHRwX25vdG51bGwgVVNJTkcgaGFzaCAoZjIgaW50 NF9vcHMpOworSU5TRVJUIElOVE8gdHBfbm90bnVsbCBTRUxFQ1QgZywgZyArIDEwLCBnICsgMTUs IGcgKyByYW5kb20obWluPT4xOjppbnQsIG1heD0+MTA6OmludCkgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoOCwxOSkgZzsKKworU0VUIGxvZ19zdGF0ZW1lbnQgdG8gTk9ORTsKK1NFVCBjbGllbnRfbWlu X21lc3NhZ2VzIFRPICdkZWJ1ZzEnOworCistLWRlYnVnIG1lc3NhZ2Ugc2hvdWxkIGNvbnRhaW4g ImhhdmUgYmVlbiB2YWxpZGF0ZWQgYnkgdXNpbmcgaW5kZXggc2NhbiIKK0FMVEVSIFRBQkxFIHRw X25vdG51bGwgQUxURVIgQ09MVU1OIGIgU0VUIE5PVCBOVUxMOworQUxURVIgVEFCTEUgdHBfbm90 bnVsbCBBTFRFUiBDT0xVTU4gYiBEUk9QIE5PVCBOVUxMOworCistLWRlYnVnIG1lc3NhZ2Ugc2hv dWxkIGNvbnRhaW4gImhhdmUgYmVlbiB2YWxpZGF0ZWQgYnkgdXNpbmcgaW5kZXggc2NhbiIKK0FM VEVSIFRBQkxFIHRwX25vdG51bGxfMSBBTFRFUiBDT0xVTU4gYiBTRVQgTk9UIE5VTEw7CisKKy0t ZGVidWcgbWVzc2FnZSBzaG91bGQgY29udGFpbiAiaGF2ZSBiZWVuIHZhbGlkYXRlZCBieSB1c2lu ZyBpbmRleCBzY2FuIgorQUxURVIgVEFCTEUgdHBfbm90bnVsbF8yIEFMVEVSIENPTFVNTiBiIFNF VCBOT1QgTlVMTDsKKworQUxURVIgVEFCTEUgdHBfbm90bnVsbF8yIEFERCBDT05TVFJBSU5UIG5u X2QgTk9UIE5VTEwgZCBOT1QgVkFMSUQ7CistLWRlYnVnIG1lc3NhZ2Ugc2hvdWxkIG5vdCBjb250 YWluICJoYXZlIGJlZW4gdmFsaWRhdGVkIGJ5IHVzaW5nIGluZGV4IHNjYW4iCitBTFRFUiBUQUJM RSB0cF9ub3RudWxsXzIgVkFMSURBVEUgQ09OU1RSQUlOVCBubl9kOworCistLWRlYnVnIG1lc3Nh Z2Ugc2hvdWxkIG5vdCBjb250YWluICJoYXZlIGJlZW4gdmFsaWRhdGVkIGJ5IHVzaW5nIGluZGV4 IHNjYW4iCitBTFRFUiBUQUJMRSB0cF9ub3RudWxsIEFERCBDT05TVFJBSU5UIG5uZjEgTk9UIE5V TEwgZjE7CisKKy0tZGVidWcgbWVzc2FnZSBzaG91bGQgbm90IGNvbnRhaW4gImhhdmUgYmVlbiB2 YWxpZGF0ZWQgYnkgdXNpbmcgaW5kZXggc2NhbiIKK0FMVEVSIFRBQkxFIHRwX25vdG51bGwgQURE IENPTlNUUkFJTlQgbm5mMiBOT1QgTlVMTCBmMjsKKworLS1kZWJ1ZyBtZXNzYWdlIHNob3VsZCBu b3QgY29udGFpbiAiaGF2ZSBiZWVuIHZhbGlkYXRlZCBieSB1c2luZyBpbmRleCBzY2FuIgorQUxU RVIgVEFCTEUgdHBfbm90bnVsbCBBTFRFUiBDT0xVTU4gYSBTRVQgTk9UIE5VTEwsIEFERCBDT05T VFJBSU5UIGNfbm4gTk9UIE5VTEwgYzsKKworLS1kZWJ1ZyBtZXNzYWdlIHNob3VsZCBjb250YWlu ICJoYXZlIGJlZW4gdmFsaWRhdGVkIGJ5IHVzaW5nIGluZGV4IHNjYW4iCitBTFRFUiBUQUJMRSB0 cF9ub3RudWxsIEFMVEVSIENPTFVNTiBkIFNFVCBOT1QgTlVMTCwgQUREIENPTlNUUkFJTlQgY19u biBOT1QgTlVMTCBjLCBBTFRFUiBDT0xVTU4gYiBTRVQgTk9UIE5VTEw7CisKK0FMVEVSIFRBQkxF IHRwX25vdG51bGwgQUxURVIgQ09MVU1OIGIgRFJPUCBOT1QgTlVMTDsKKy0tZGVidWcgbWVzc2Fn ZSBzaG91bGQgbm90IGNvbnRhaW4gImhhdmUgYmVlbiB2YWxpZGF0ZWQgYnkgdXNpbmcgaW5kZXgg c2NhbiIKK0FMVEVSIFRBQkxFIHRwX25vdG51bGwgQUxURVIgQ09MVU1OIGIgU0VUIE5PVCBOVUxM LCBBTFRFUiBDT0xVTU4gYiBTRVQgREFUQSBUWVBFIEJJR0lOVDsKKworUkVTRVQgY2xpZW50X21p bl9tZXNzYWdlczsKK1JFU0VUIGxvZ19zdGF0ZW1lbnQ7CisKK0RST1AgVEFCTEUgdHBfbm90bnVs bDsKLS0gCjIuMzQuMQoK --000000000000e3dc9b064a20a47d--