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 1wA3Ka-0021H9-2J for pgsql-hackers@arkaria.postgresql.org; Tue, 07 Apr 2026 10:06:49 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wA3KZ-00GYnB-0b for pgsql-hackers@arkaria.postgresql.org; Tue, 07 Apr 2026 10:06:47 +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 1wA3KY-00GYn2-1B for pgsql-hackers@lists.postgresql.org; Tue, 07 Apr 2026 10:06:47 +0000 Received: from mail-wm1-x331.google.com ([2a00:1450:4864:20::331]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wA3KS-000000010pr-3h6m for pgsql-hackers@postgresql.org; Tue, 07 Apr 2026 10:06:45 +0000 Received: by mail-wm1-x331.google.com with SMTP id 5b1f17b1804b1-488afb0427eso20889495e9.1 for ; Tue, 07 Apr 2026 03:06:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775556398; cv=none; d=google.com; s=arc-20240605; b=WaSPcq1xH6AI01DS3rmm0fj4UPXfH3OK62xivuqHnzducKaVy6G5qjfRCYp5Nb8azi ejrU52Mz2Nr5V7uKfu16sw0KlKwVmuA1YxVM4Fk0EdZBrLztEcg7uNJrbXhieus/BCQq i8FiuO+jT4wP0oByXg7/T1Yw+DEKYK41jzvwTqgWDPMtJAkSoMAM3MYji+GOt0r3u/WL cLRpByn/dsT0iQky9vdyk9grmEsyEmF/fJmJdcnHFIvE4hshKBUVxZXmn9v09BuLyYqv CNkyr8B8/YKhKIHLNkNWzn6ZKBSzbFhgt1CFotS0Zj3oKi4MWA1rPsCysQU2TI42R6BT 9X0Q== 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=13/HAwk5kSnl3yqeVfsVX/RwY5u7IkD9FCwXtMkOXQc=; fh=4t0yJbbtSjVvmwJkZR/mn//GsOP9BL1fC37PctSKMhY=; b=DwVynJimFvh66ZthHQSrB3upTFmJ4lTobe531CEwDky3EV+5dY8x4vCboqu5akbbKT /2vl5+918rMr4TIF9CVOHz4UInVco7glDcaL5uJNyZjw38A7TE9D2EKV2UANCeIqM3yA MmLv5WbsWSTAYd3+5yKAWpIL1aSAFPyWsdWLit+mD6UCYDF9m2CuOTj3XeJ3QsDs90OG jHEY7UR+2ZZUpa97ulRnT9AOkI9L9iHZdwRCIZI+U/TCl1YxqIYR8qysDD+qf/uqd95V tx2VkN37DCIY4rRqLSCQi0bs9y2A+r1neJmbntFiYjjPUo1dziKOGbyZ1gMWQgJLZTwk GB8w==; darn=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=20251104; t=1775556398; x=1776161198; darn=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=13/HAwk5kSnl3yqeVfsVX/RwY5u7IkD9FCwXtMkOXQc=; b=II2oi4XjjKql7SDaPdidyOy3lqM2HykDlQOAb4fZlNu9toV2+erRE5Tgnm2sAIMsUO dsHzeRA7yFqPd1wm8yhgGMOf2ROWqaRg5540z6L4FKOA83J83kMiW6oO4r/XkcVbIIX6 Ns7hQG3zvWjXctBBFUzqRHHDGKoTnH7nvTqDF0M0bh3HrasG0XeV9uCX+0bm9CaJouHt NJtHP+1a/2c/ZjH+le9SjfYOfQSbSeDNYbkjINPxae82Fo0le5kdPG4KW8XrO3B3rr2B zupCnmfv903dQdNoAr3YPuCwNYlDxfZ0T5EkJLu37W2pDdsda6MS7oC/lZtzcsHDl9Ge MD3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775556398; x=1776161198; 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=13/HAwk5kSnl3yqeVfsVX/RwY5u7IkD9FCwXtMkOXQc=; b=eRfpX4ScjgvKvQyye33p83ZGQjdCU/3MYaKFJ1Bt9LvPNs1+iTajEDEuBYFBrzzt5G FAxTtnzTghEJW3MrZEGiEuzcNSnc4jJsSGwqfF3Qtaj4gLG8R/BTzTeSRcRjP48l3hQO RRv4E+BYuEe9F758mZeu2GGai0viw3k8RoXvF4e7j3U9Wllpxlf6+kpQG3S5ub72zz7c jVVL2r6AQxnf2R9ZEMSwLh2obeWcf8JuP+zXrW3AlBgIaxnbvQARpMU5GsdFuDriCR2s T9BLy+C7Hqr0l6U9OTwcKANNMhSGDBMGj+hk+ZqRqDgjySMt8F6CV4LIS772LnKEZVh3 Xl+A== X-Forwarded-Encrypted: i=1; AJvYcCUwPnVx4obDfzc7Q/vp0MsOZz6CCOxU2kHXOquHPCTBowlCwR0ckhTpR23OV3DBq7La51cz8k47QfT/oOaZ@postgresql.org X-Gm-Message-State: AOJu0YyR1FwzK3gpO0uXpz1dMIAknouJzQLZV1Uo6ifCx60+1bjs0TCm bLk98YZYD1qIX0o6sXXZJV8vy+q69xrbjMi/TktaOmKxi6B9qkBbZ0Ae/HczzaP9Pcgsk8ItBFI 28YGaWp2WexhGXKIGd+fV7RSqs8hteSQ= X-Gm-Gg: AeBDieuQ1JkAsknlwEu5zUJMryBIbbFnihFzqBC7o70NlCPMGJ4nlxeiOIk25HSoUUP yIfdrV7rdtrw4Stbo1WQUg4+ULa5ZScaD2Kq1qvXpwxWtAAXx3tSXBf1yMnaNhDOu8DLAT2t0AT ZW0ogSW7OJYIIffNBK/3fCQw5GhTv9eYZchAQuwaolrTsb/AyUt/EoaM6T85CbXTIK/ZjnJE1wJ PG6LLOW2oZ8X1ZHoMcCGXPdc7KM6asn6NI/5jNPkf1hINhbz0TnkHHJniCgfvbxXZC4BBpBeFFw S2TgDOCZudAApDJp8Ln8wxuqMYfIg+PHqvONX1MFoDMY4H313qxAFCdmAKePYQ== X-Received: by 2002:a05:600c:83cd:b0:488:bd79:94d8 with SMTP id 5b1f17b1804b1-488bd7997demr33337475e9.18.1775556398049; Tue, 07 Apr 2026 03:06:38 -0700 (PDT) MIME-Version: 1.0 References: <791c3f18-f4de-4d84-ac6b-c7ccc074dd38@iki.fi> <9d919bd9-94dd-4bda-8ccf-ebced4178c53@iki.fi> <7d3ba240-9350-4dfc-bbe1-be6584aee236@iki.fi> <1c3a07a7-158d-4800-927c-2641c73277d8@iki.fi> <6d4383eb-4aaa-47ae-bda8-ee40dc60ad84@iki.fi> In-Reply-To: From: Ashutosh Bapat Date: Tue, 7 Apr 2026 15:36:25 +0530 X-Gm-Features: AQROBzB6exJLe7Vc6x-VL5ZeY2OWKsxxe_gi3x3RydKo0kCf5RGMBBopnr06UQo Message-ID: Subject: Re: Better shared data structure management and resizable shared data structures To: Heikki Linnakangas Cc: Matthias van de Meent , Robert Haas , Andres Freund , pgsql-hackers , chaturvedipalak1911@gmail.com Content-Type: multipart/mixed; boundary="000000000000628762064edbf064" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000628762064edbf064 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Apr 6, 2026 at 7:23=E2=80=AFPM Ashutosh Bapat wrote: > > I have kept these two patches separate from the main patch so that I > can remove them if others feel they are not worth including in the > feature. Here are patches rebased on the latest HEAD. No conflicts just rebase. Here are differences from the previous patchset. o. There are two patches in this patchset now. a. 0001 which supports resizable shared memory and is equivalent to 0001 + 0002 + 0004 + 0005 from the previous patchset. b. 0002 which is 0006 from the previous patchset and adds support for protecting resizable shared memory structures. 0003, which added diagnostics to investigate CFBot failure, from the previous patchset is not required anymore since all tests pass with CFBot. o. I have merged 0002 into 0001 from the previous patchset since with that patch all platforms are green on CFBot. The resizable shared memory test now uses /proc/self/smaps instead of /proc/self/status to find the amount of memory allocated in the main shared memory segment of PostgreSQL. o. Merged 0004, which supported minimum_size, into 0001. Minimum_size would be useful to protect against accidental shrinkage of the resizable structures. It will help additional support for minimum sizes of GUCs like shared_buffers. It also makes it easy and intuitive to distinguish between fixed-size and resizable structures, and will be useful to find the minimum size of the shared memory segment. o. Merged 0005, which allows ABI compatibility between the binaries which support resizable shared memory and those which don't, into 0001. Apart from ABI compatibility, the code has lesser #ifdef blocks and thus easier to read and maintain. I didn't find it useful to keep 0004 and 0005 separate since they were interdependent and made review complicated and have higher chances of being acceptable. o. 0006 is still separate since I am not sure whether the functionality is absolutely needed at this time. In an offlist discussion, Andres mentioned that it is not strictly needed. The subsystem that uses the resizable shared memory can implement their own protection if required and integrate it in the subsystems specific synchronization. But Matthias thinks different. The API to add protection is platform dependent, so it's better to abstract it via shmem.c. If we decide to accept this patch, we should merge it into 0001 before committing. Also did some more cleanups and changed the name of the GUC have_resizable_shmem to have_resizable_shared_memory since shmem is an internal phrase. I am looking at merging the resizable_shmem module into test_shmem module n= ext. --=20 Best Wishes, Ashutosh Bapat --000000000000628762064edbf064 Content-Type: text/x-patch; charset="US-ASCII"; name="v20260407-0002-Add-support-to-protect-unused-resizable_sh.patch" Content-Disposition: attachment; filename="v20260407-0002-Add-support-to-protect-unused-resizable_sh.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnogenou0 RnJvbSA5MzUxNTc2MWMzMGY4NDEyNWIyZTExNTg4NmJlNzNlYjgzMGQ1N2RjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBc2h1dG9zaCBCYXBhdCA8YXNodXRvc2guYmFwYXQub3NzQGdt YWlsLmNvbT4KRGF0ZTogTW9uLCA2IEFwciAyMDI2IDE5OjAwOjE0ICswNTMwClN1YmplY3Q6IFtQ QVRDSCB2MjAyNjA0MDcgMi8yXSBBZGQgc3VwcG9ydCB0byBwcm90ZWN0IHVudXNlZCByZXNpemFi bGVfc2htZW0KIHN0cnVjdHVyZQoKQWRkIEFQSXMgdG8gbWFrZSB0aGUgcG9ydGlvbiBvZiByZXNp emFibGVfc2htZW0gc3RydWN0dXJlIGJleW9uZCBpdHMgY3VycmVudApzaXplIGluYWNjZXNzaWJs ZS4KCkF1dGhvcjogQXNodXRvc2ggQmFwYXQgPGFzaHV0b3NoLmJhcGF0Lm9zc0BnbWFpbC5jb20+ ClN1Z2dlc3RlZC1ieTogTWF0dGhpYXMgdmFuIGRlIE1lZW50IDxib2VrZXd1cm0rcG9zdGdyZXNA Z21haWwuY29tPgotLS0KIGRvYy9zcmMvc2dtbC94ZnVuYy5zZ21sICAgICAgICAgICAgICAgICAg ICAgICB8ICA0ICstCiBzcmMvYmFja2VuZC9wb3J0L3N5c3Zfc2htZW0uYyAgICAgICAgICAgICAg ICAgfCA1NSArKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvcG9ydC93aW4zMl9zaG1lbS5j ICAgICAgICAgICAgICAgIHwgIDggKysrCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5j ICAgICAgICAgICAgICAgfCA2MCArKysrKysrKysrKysrKysrKysrCiBzcmMvaW5jbHVkZS9zdG9y YWdlL3BnX3NobWVtLmggICAgICAgICAgICAgICAgfCAgMSArCiBzcmMvaW5jbHVkZS9zdG9yYWdl L3NobWVtLmggICAgICAgICAgICAgICAgICAgfCAgMSArCiAuLi4vbW9kdWxlcy9yZXNpemFibGVf c2htZW0vcmVzaXphYmxlX3NobWVtLmMgfCA1MSArKysrKysrKysrKysrKysrCiA3IGZpbGVzIGNo YW5nZWQsIDE3OSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvZG9j L3NyYy9zZ21sL3hmdW5jLnNnbWwgYi9kb2Mvc3JjL3NnbWwveGZ1bmMuc2dtbAppbmRleCAyMmY5 NTNkYjlkNy4uMDRiMzEyZmNmOTQgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC94ZnVuYy5zZ21s CisrKyBiL2RvYy9zcmMvc2dtbC94ZnVuYy5zZ21sCkBAIC0zNzgwLDcgKzM3ODAsOSBAQCBteV9z aG1lbV9pbml0KHZvaWQgKmFyZykKICAgICBhZGRpdGlvbmFsIHN5bmNocm9uaXphdGlvbiBiZXR3 ZWVuIHRoZSByZXNpemluZyBwcm9jZXNzIGFuZCB0aGUgcHJvY2Vzc2VzCiAgICAgdXNpbmcgdGhl IHNoYXJlZCBzdHJ1Y3R1cmUuIEFsc28gaXQgbmVlZHMgdG8gaW1wbGVtZW50IGFkZGl0aW9uYWwg cHJvdGVjdGlvbgogICAgIHRvIHByZXZlbnQgYWNjZXNzIHRvIHRoZSBwYXJ0IG9mIHRoZSBhZGRy ZXNzIHNwYWNlIGJleW9uZCB0aGUgc2l6ZSBvZiB0aGUKLSAgICBzdHJ1Y3R1cmUgd2hlbiByZXNp emluZyBpdC4KKyAgICBzdHJ1Y3R1cmUgd2hlbiByZXNpemluZyBpdC4gPGZ1bmN0aW9uPlNobWVt UHJvdGVjdFN0cnVjdDwvZnVuY3Rpb24+IGNhbiBiZQorICAgIGNhbGxlZCBmcm9tIGV2ZXJ5IGJh Y2tlbmQgdGhhdCBtYXkgYWNjZXNzIHRoZSByZXNpemFibGUgc3RydWN0dXJlIGZvciB0aGUKKyAg ICBzYW1lLgogICAgIDwvcGFyYT4KIAogICAgIDxwYXJhPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvcG9ydC9zeXN2X3NobWVtLmMgYi9zcmMvYmFja2VuZC9wb3J0L3N5c3Zfc2htZW0uYwppbmRl eCBiYjJhODE0MTdjNi4uMTRiNmZhN2Y3ZTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BvcnQv c3lzdl9zaG1lbS5jCisrKyBiL3NyYy9iYWNrZW5kL3BvcnQvc3lzdl9zaG1lbS5jCkBAIC0xMDY1 LDggKzEwNjUsNjMgQEAgUEdTaGFyZWRNZW1vcnlFbnN1cmVBbGxvY2F0ZWQodm9pZCAqYWRkciwg U2l6ZSBzaXplKQogCUFzc2VydChhZGRyID09ICh2b2lkICopIFRZUEVBTElHTihHZXRPU1BhZ2VT aXplKCksIGFkZHIpKTsKIAlBc3NlcnQoc2l6ZSA9PSBUWVBFQUxJR04oR2V0T1NQYWdlU2l6ZSgp LCBzaXplKSk7CiAKKwkvKgorCSAqIEVuc3VyZSB0aGF0IE1BRFZfUE9QVUxBVEVfV1JJVEUgY2Fu IGluaXRpYWxpemUgdGhlIG5ld2x5IGFsbG9jYXRlZAorCSAqIHBhZ2VzLgorCSAqLworCWlmICht cHJvdGVjdChhZGRyLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKSAhPSAwKQorCQllcmVw b3J0KEVSUk9SLAorCQkJCShlcnJtc2coImNvdWxkIG5vdCBwcm90ZWN0IHNoYXJlZCBtZW1vcnk6 ICVtIikpKTsKKwogCWlmIChtYWR2aXNlKGFkZHIsIHNpemUsIE1BRFZfUE9QVUxBVEVfV1JJVEUp ID09IC0xKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJtc2coImNvdWxkIG5vdCBhbGxvY2F0 ZSBzaGFyZWQgbWVtb3J5OiAlbSIpKSk7CiAjZW5kaWYKIH0KKworLyoKKyAqIFNldCBtZW1vcnkg cHJvdGVjdGlvbiBvbiB0aGUgZ2l2ZW4gcmVnaW9uIG9mIHNoYXJlZCBtZW1vcnkuCisgKgorICog TWFrZXMgW3J3X3N0YXJ0LCByd19lbmQpIHJlYWRhYmxlIGFuZCB3cml0YWJsZSwgYW5kIFtyd19l bmQsIHByb3RfZW5kKQorICogaW5hY2Nlc3NpYmxlLgorICoKKyAqIEFsbCBhZGRyZXNzZXMgYXJl IGV4cGVjdGVkIHRvIGJlIHBhZ2UgYWxpZ25lZC4KKyAqCisgKiBPbmx5IHN1cHBvcnRlZCBvbiBw bGF0Zm9ybXMgdGhhdCBzdXBwb3J0IHJlc2l6YWJsZSBzaGFyZWQgbWVtb3J5LgorICovCit2b2lk CitQR1NoYXJlZE1lbW9yeVByb3RlY3Qodm9pZCAqcndfc3RhcnQsIHZvaWQgKnJ3X2VuZCwgdm9p ZCAqcHJvdF9lbmQpCit7CisjaWZuZGVmIEhBVkVfUkVTSVpBQkxFX1NITUVNCisJZXJlcG9ydChF UlJPUiwKKwkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCSBl cnJtc2coInJlc2l6YWJsZSBzaGFyZWQgbWVtb3J5IGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBw bGF0Zm9ybSIpKSk7CisjZWxzZQorCisJaWYgKCFBbm9ueW1vdXNTaG1lbSkKKwkJZXJlcG9ydChF UlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJ IGVycm1zZygib25seSBhbm9ueW1vdXMgc2hhcmVkIG1lbW9yeSBjYW4gYmUgcHJvdGVjdGVkIGF0 IHJ1bnRpbWUiKSkpOworCisJQXNzZXJ0KHJ3X3N0YXJ0ID09ICh2b2lkICopIFRZUEVBTElHTihH ZXRPU1BhZ2VTaXplKCksIHJ3X3N0YXJ0KSk7CisJQXNzZXJ0KHJ3X2VuZCA9PSAodm9pZCAqKSBU WVBFQUxJR04oR2V0T1NQYWdlU2l6ZSgpLCByd19lbmQpKTsKKwlBc3NlcnQocHJvdF9lbmQgPT0g KHZvaWQgKikgVFlQRUFMSUdOKEdldE9TUGFnZVNpemUoKSwgcHJvdF9lbmQpKTsKKwlBc3NlcnQo cndfZW5kID49IHJ3X3N0YXJ0KTsKKworCWlmIChyd19lbmQgPiByd19zdGFydCkKKwl7CisJCWlm IChtcHJvdGVjdChyd19zdGFydCwgKGNoYXIgKikgcndfZW5kIC0gKGNoYXIgKikgcndfc3RhcnQs CisJCQkJCSBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKSAhPSAwKQorCQkJZXJlcG9ydChFUlJPUiwK KwkJCQkJKGVycm1zZygiY291bGQgbm90IHByb3RlY3Qgc2hhcmVkIG1lbW9yeTogJW0iKSkpOwor CX0KKworCWlmIChwcm90X2VuZCA+IHJ3X2VuZCkKKwl7CisJCWlmIChtcHJvdGVjdChyd19lbmQs IChjaGFyICopIHByb3RfZW5kIC0gKGNoYXIgKikgcndfZW5kLAorCQkJCQkgUFJPVF9OT05FKSAh PSAwKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycm1zZygiY291bGQgbm90IHByb3RlY3Qg c2hhcmVkIG1lbW9yeTogJW0iKSkpOworCX0KKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvcG9ydC93aW4zMl9zaG1lbS5jIGIvc3JjL2JhY2tlbmQvcG9ydC93aW4zMl9zaG1lbS5j CmluZGV4IGMxZjMwNjY1ZTY2Li5iNTM5NmU0YTVlOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv cG9ydC93aW4zMl9zaG1lbS5jCisrKyBiL3NyYy9iYWNrZW5kL3BvcnQvd2luMzJfc2htZW0uYwpA QCAtNjkzLDMgKzY5MywxMSBAQCBQR1NoYXJlZE1lbW9yeUVuc3VyZUFsbG9jYXRlZCh2b2lkICph ZGRyLCBTaXplIHNpemUpCiAJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRF RCksCiAJCQkgZXJybXNnKCJyZXNpemFibGUgc2hhcmVkIG1lbW9yeSBpcyBub3Qgc3VwcG9ydGVk IG9uIHRoaXMgcGxhdGZvcm0iKSkpOwogfQorCit2b2lkCitQR1NoYXJlZE1lbW9yeVByb3RlY3Qo dm9pZCAqcndfc3RhcnQsIHZvaWQgKnJ3X2VuZCwgdm9pZCAqcHJvdF9lbmQpCit7CisJZXJlcG9y dChFUlJPUiwKKwkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJ CSBlcnJtc2coInJlc2l6YWJsZSBzaGFyZWQgbWVtb3J5IGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhp cyBwbGF0Zm9ybSIpKSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9z aG1lbS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2htZW0uYwppbmRleCA4ZjAwNjk2Nzc5 MC4uNjE4MDhjN2E4ZTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVt LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2htZW0uYwpAQCAtODc1LDYgKzg3NSw2 NiBAQCBTaG1lbVJlc2l6ZVN0cnVjdChjb25zdCBjaGFyICpuYW1lLCBTaXplIG5ld19zaXplKQog I2VuZGlmCiB9CiAKKy8qCisgKiBTaG1lbVByb3RlY3RTdHJ1Y3QoKSAtLS0gcHJvdGVjdCB0aGUg dW51c2VkIHBvcnRpb24gb2YgYSByZXNpemFibGUgc3RydWN0dXJlLgorICoKKyAqIE1ha2VzIHRo ZSByZWdpb24gYmV5b25kIHRoZSBjdXJyZW50IHNpemUgdXAgdG8gbWF4aW11bV9zaXplIGluYWNj ZXNzaWJsZSwgYW5kCisgKiBlbnN1cmVzIHRoZSByZWdpb24gdXAgdG8gdGhlIGN1cnJlbnQgc2l6 ZSBpcyByZWFkYWJsZSBhbmQgd3JpdGFibGUuIERlcGVuZGluZworICogdXBvbiB0aGUgcGxhdGZv cm0sIHRoZSBwcm90ZWN0aW9uIGhvbm91cnMgdGhlIHBhZ2UgYm91bmRhcmllcy4gU28gaXQgbWF5 IGJlCisgKiBtb3JlIHBlcm1pc3NpYmxlIHRoYW4gc3RyaWN0bHkgbmVlZGVkLgorICoKKyAqIE9u bHkgd29ya3MgZm9yIHJlc2l6YWJsZSBzdHJ1Y3R1cmVzLiAgU2hvdWxkIGJlIGNhbGxlZCBpbiBl dmVyeSBiYWNrZW5kIHRoYXQKKyAqIG1heSBhY2Nlc3MgdGhlIHJlc2l6YWJsZSBzdHJ1Y3R1cmUg d2hpbGUgcmVzaXppbmcgaXQuCisgKi8KK3ZvaWQKK1NobWVtUHJvdGVjdFN0cnVjdChjb25zdCBj aGFyICpuYW1lKQoreworI2lmbmRlZiBIQVZFX1JFU0laQUJMRV9TSE1FTQorCWVyZXBvcnQoRVJS T1IsCisJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkgZXJy bXNnKCJyZXNpemFibGUgc2hhcmVkIG1lbW9yeSBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxh dGZvcm0iKSkpOworI2Vsc2UKKwlTaG1lbUluZGV4RW50ICpyZXN1bHQ7CisJYm9vbAkJZm91bmQ7 CisJU2l6ZQkJcGFnZV9zaXplID0gR2V0T1NQYWdlU2l6ZSgpOworCWNoYXIJICAgKnJ3X3N0YXJ0 OworCWNoYXIJICAgKnJ3X2VuZDsKKwljaGFyCSAgICpwcm90X2VuZDsKKworCUxXTG9ja0FjcXVp cmUoU2htZW1JbmRleExvY2ssIExXX1NIQVJFRCk7CisJcmVzdWx0ID0gKFNobWVtSW5kZXhFbnQg KikgaGFzaF9zZWFyY2goU2htZW1JbmRleCwgbmFtZSwgSEFTSF9GSU5ELCAmZm91bmQpOworCWlm ICghZm91bmQpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1Rf Tk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJIGVycm1zZygic2htZW0gc3RydWN0IFwi JXNcIiBpcyBub3QgaW5pdGlhbGl6ZWQiLCBuYW1lKSkpOworCisJaWYgKHJlc3VsdC0+bWluaW11 bV9zaXplID09IHJlc3VsdC0+bWF4aW11bV9zaXplKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShl cnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCSBl cnJtc2coInNoYXJlZCBtZW1vcnkgc3RydWN0IFwiJXNcIiBpcyBub3QgcmVzaXphYmxlIiwgbmFt ZSkpKTsKKworCS8qIFJlc2l6YWJsZSBzdHJ1Y3R1cmVzIGFyZSBvbmx5IHN1cHBvcnRlZCB3aXRo IG1tYXAtYmFzZWQgc2hhcmVkIG1lbW9yeS4gKi8KKwlBc3NlcnQoc2hhcmVkX21lbW9yeV90eXBl ID09IFNITUVNX1RZUEVfTU1BUCk7CisKKwkvKiBNYWtlIGF0IGxlYXN0IFtsb2NhdGlvbiwgbG9j YXRpb24rc2l6ZSkgcmVhZGFibGUgYW5kIHdyaXRhYmxlICovCisJcndfc3RhcnQgPSAoY2hhciAq KSBUWVBFQUxJR05fRE9XTihwYWdlX3NpemUsIHJlc3VsdC0+bG9jYXRpb24pOworCXJ3X2VuZCA9 IChjaGFyICopIFRZUEVBTElHTihwYWdlX3NpemUsCisJCQkJCQkJCShjaGFyICopIHJlc3VsdC0+ bG9jYXRpb24gKyByZXN1bHQtPnNpemUpOworCisJLyoKKwkgKiBNYWtlIHJlbWFpbmluZyBwb3J0 aW9uIGluYWNjZXNzaWJsZSB3aGlsZSBtYWtpbmcgc3VyZSB0aGF0IHRoZSBwb3J0aW9uCisJICog YWZ0ZXIgbWF4aW11bV9zaXplIGlzIG5vdCBhZmZlY3RlZCBzaW5jZSBpdCBtYXkgYmUgdXNlZCBi eSBvdGhlcgorCSAqIHN0cnVjdHVyZXMuCisJICovCisJcHJvdF9lbmQgPSAoY2hhciAqKSBUWVBF QUxJR05fRE9XTihwYWdlX3NpemUsCisJCQkJCQkJCQkgICAoY2hhciAqKSByZXN1bHQtPmxvY2F0 aW9uICsgcmVzdWx0LT5tYXhpbXVtX3NpemUpOworCisJTFdMb2NrUmVsZWFzZShTaG1lbUluZGV4 TG9jayk7CisKKwlQR1NoYXJlZE1lbW9yeVByb3RlY3Qocndfc3RhcnQsIHJ3X2VuZCwgcHJvdF9l bmQpOworI2VuZGlmCit9CisKIC8qCiAgKglJbml0U2htZW1BbGxvY2F0b3IoKSAtLS0gc2V0IHVw IGJhc2ljIHBvaW50ZXJzIHRvIHNoYXJlZCBtZW1vcnkuCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9wZ19zaG1lbS5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wZ19zaG1lbS5o CmluZGV4IGYwZWZiZjJhZWMxLi41MTY1YjgxNWNjMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv c3RvcmFnZS9wZ19zaG1lbS5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcGdfc2htZW0uaApA QCAtOTEsNiArOTEsNyBAQCBleHRlcm4gYm9vbCBQR1NoYXJlZE1lbW9yeUlzSW5Vc2UodW5zaWdu ZWQgbG9uZyBpZDEsIHVuc2lnbmVkIGxvbmcgaWQyKTsKIGV4dGVybiB2b2lkIFBHU2hhcmVkTWVt b3J5RGV0YWNoKHZvaWQpOwogZXh0ZXJuIHZvaWQgUEdTaGFyZWRNZW1vcnlFbnN1cmVGcmVlZCh2 b2lkICphZGRyLCBTaXplIHNpemUpOwogZXh0ZXJuIHZvaWQgUEdTaGFyZWRNZW1vcnlFbnN1cmVB bGxvY2F0ZWQodm9pZCAqYWRkciwgU2l6ZSBzaXplKTsKK2V4dGVybiB2b2lkIFBHU2hhcmVkTWVt b3J5UHJvdGVjdCh2b2lkICpyd19zdGFydCwgdm9pZCAqcndfZW5kLCB2b2lkICpwcm90X2VuZCk7 CiBleHRlcm4gdm9pZCBHZXRIdWdlUGFnZVNpemUoU2l6ZSAqaHVnZXBhZ2VzaXplLCBpbnQgKm1t YXBfZmxhZ3MpOwogZXh0ZXJuIFNpemUgR2V0T1NQYWdlU2l6ZSh2b2lkKTsKIApkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9zaG1lbS5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9zaG1l bS5oCmluZGV4IDBlNmQ1YTYzZjI4Li5mOGRkYjBkZDdjMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvc3RvcmFnZS9zaG1lbS5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc2htZW0uaApAQCAt MTg1LDYgKzE4NSw3IEBAIHR5cGVkZWYgc3RydWN0IFNobWVtQ2FsbGJhY2tzCiBleHRlcm4gdm9p ZCBSZWdpc3RlclNobWVtQ2FsbGJhY2tzKGNvbnN0IFNobWVtQ2FsbGJhY2tzICpjYWxsYmFja3Mp OwogZXh0ZXJuIGJvb2wgU2htZW1BZGRySXNWYWxpZChjb25zdCB2b2lkICphZGRyKTsKIGV4dGVy biB2b2lkIFNobWVtUmVzaXplU3RydWN0KGNvbnN0IGNoYXIgKm5hbWUsIFNpemUgbmV3X3NpemUp OworZXh0ZXJuIHZvaWQgU2htZW1Qcm90ZWN0U3RydWN0KGNvbnN0IGNoYXIgKm5hbWUpOwogCiAv KgogICogVGhlc2UgbWFjcm9zIHByb3ZpZGUgc3ludGFjdGljIHN1Z2FyIGZvciBjYWxsaW5nIHRo ZSB1bmRlcmx5aW5nIGZ1bmN0aW9ucwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9yZXNp emFibGVfc2htZW0vcmVzaXphYmxlX3NobWVtLmMgYi9zcmMvdGVzdC9tb2R1bGVzL3Jlc2l6YWJs ZV9zaG1lbS9yZXNpemFibGVfc2htZW0uYwppbmRleCA2ZmQ5ZTAyZjdiMy4uMjcyN2E2NzhjNTcg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvcmVzaXphYmxlX3NobWVtL3Jlc2l6YWJsZV9z aG1lbS5jCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvcmVzaXphYmxlX3NobWVtL3Jlc2l6YWJsZV9z aG1lbS5jCkBAIC01NiwxMCArNTYsMTIgQEAgc3RhdGljIGJvb2wgdXNlX3Vua25vd25fc2l6ZSA9 IGZhbHNlOwogCiBzdGF0aWMgdm9pZCByZXNpemFibGVfc2htZW1fcmVxdWVzdCh2b2lkICphcmcp Owogc3RhdGljIHZvaWQgcmVzaXphYmxlX3NobWVtX3NobWVtX2luaXQodm9pZCAqYXJnKTsKK3N0 YXRpYyB2b2lkIHJlc2l6YWJsZV9zaG1lbV9zaG1lbV9hdHRhY2godm9pZCAqYXJnKTsKIAogc3Rh dGljIFNobWVtQ2FsbGJhY2tzIHNobWVtX2NhbGxiYWNrcyA9IHsKIAkucmVxdWVzdF9mbiA9IHJl c2l6YWJsZV9zaG1lbV9yZXF1ZXN0LAogCS5pbml0X2ZuID0gcmVzaXphYmxlX3NobWVtX3NobWVt X2luaXQsCisJLmF0dGFjaF9mbiA9IHJlc2l6YWJsZV9zaG1lbV9zaG1lbV9hdHRhY2gsCiB9Owog CiAvKiBTUUwtY2FsbGFibGUgZnVuY3Rpb25zICovCkBAIC0xNzIsMTAgKzE3NCwzMiBAQCByZXNp emFibGVfc2htZW1fc2htZW1faW5pdCh2b2lkICphcmcpCiAJICovCiAJQXNzZXJ0KHJlc2l6YWJs ZV9zaG1lbSAhPSBOVUxMKTsKIAorI2lmZGVmIEhBVkVfUkVTSVpBQkxFX1NITUVNCisJLyogUHJv dGVjdCB0aGUgc2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmUgaW4gdGhpcyBiYWNrZW5kLiAqLworCVNo bWVtUHJvdGVjdFN0cnVjdCgicmVzaXphYmxlX3NobWVtIik7CisjZW5kaWYKKwogCXJlc2l6YWJs ZV9zaG1lbS0+bnVtX2VudHJpZXMgPSB0ZXN0X2luaXRpYWxfZW50cmllczsKIAltZW1zZXQocmVz aXphYmxlX3NobWVtLT5kYXRhLCAwLCBtdWxfc2l6ZSh0ZXN0X2luaXRpYWxfZW50cmllcywgVEVT VF9FTlRSWV9TSVpFKSk7CiB9CiAKKy8qCisgKiBQcm90ZWN0IHRoZSBzaGFyZWQgbWVtb3J5IHN0 cnVjdHVyZSBtZW1vcnkgYWZ0ZXIgYXR0YWNoaW5nLgorICovCitzdGF0aWMgdm9pZAorcmVzaXph YmxlX3NobWVtX3NobWVtX2F0dGFjaCh2b2lkICphcmcpCit7CisJLyoKKwkgKiBTaGFyZWQgbWVt b3J5IHN0cnVjdHVyZSBzaG91bGQgaGF2ZSBiZWVuIGFscmVhZHkgYWxsb2NhdGVkLiBJbml0aWFs aXplCisJICogaXQuCisJICovCisJQXNzZXJ0KHJlc2l6YWJsZV9zaG1lbSAhPSBOVUxMKTsKKwor I2lmZGVmIEhBVkVfUkVTSVpBQkxFX1NITUVNCisJU2htZW1Qcm90ZWN0U3RydWN0KCJyZXNpemFi bGVfc2htZW0iKTsKKyNlbmRpZgorfQorCiAvKgogICogUmVzaXplIHRoZSBzaGFyZWQgbWVtb3J5 IHN0cnVjdHVyZSB0byBhY2NvbW1vZGF0ZSB0aGUgc3BlY2lmaWVkIG51bWJlciBvZgogICogZW50 cmllcy4KQEAgLTE5OCw2ICsyMjIsNyBAQCByZXNpemFibGVfc2htZW1fcmVzaXplKFBHX0ZVTkNU SU9OX0FSR1MpCiAJbmV3X3NpemUgPSBhZGRfc2l6ZShvZmZzZXRvZihUZXN0UmVzaXphYmxlU2ht ZW1TdHJ1Y3QsIGRhdGEpLAogCQkJCQkJbXVsX3NpemUobmV3X2VudHJpZXMsIFRFU1RfRU5UUllf U0laRSkpOwogCVNobWVtUmVzaXplU3RydWN0KCJyZXNpemFibGVfc2htZW0iLCBuZXdfc2l6ZSk7 CisJU2htZW1Qcm90ZWN0U3RydWN0KCJyZXNpemFibGVfc2htZW0iKTsKIAlyZXNpemFibGVfc2ht ZW0tPm51bV9lbnRyaWVzID0gbmV3X2VudHJpZXM7CiAKIAlQR19SRVRVUk5fVk9JRCgpOwpAQCAt MjE3LDYgKzI0MiwxOSBAQCByZXNpemFibGVfc2htZW1fd3JpdGUoUEdfRlVOQ1RJT05fQVJHUykK IAkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwK IAkJCQkgZXJybXNnKCJyZXNpemFibGVfc2htZW0gaXMgbm90IGluaXRpYWxpemVkIikpKTsKIAor I2lmZGVmIEhBVkVfUkVTSVpBQkxFX1NITUVNCisKKwkvKgorCSAqIElkZWFsbHkgdGhlIHN0cnVj dHVyZSBzaG91bGQgYmUgcHJvdGVjdGVkIHRocm91Z2ggYSBzeW5jaHJvbml6YXRpb24KKwkgKiBj eWNsZSBhY3Jvc3MgYWxsIHRoZSBiYWNrZW5kcyB0aGF0IG1heSBhY2Nlc3MgdGhlIHN0cnVjdHVy ZS4gQnV0IHdlCisJICogZG9uJ3QgaW1wbGVtZW50IGFueSBzdWNoIHN5bmNocm9uaXphdGlvbiBp biB0aGlzIHRlc3QgbW9kdWxlIHRvIGtlZXAgaXQKKwkgKiBzaW1wbGUuIEdpdmVuIHRoYXQgUHJv Y1NpZ25hbEJhcnJpZXIgbWVjaGFuaXNtIGlzIG5vdCBleHRlbnNpYmxlLCB3ZQorCSAqIG1heSBu b3QgYmUgYWJsZSB0byBkbyB0aGF0IGFzIHdlbGwgaGVyZS4gSGVuY2UgYWRkIHByb3RlY3QganVz dCBiZWZvcmUKKwkgKiBhY2Nlc3NpbmcgdGhlIHN0cnVjdHVyZS4KKwkgKi8KKwlTaG1lbVByb3Rl Y3RTdHJ1Y3QoInJlc2l6YWJsZV9zaG1lbSIpOworI2VuZGlmCisKIAkvKiBXcml0ZSB0aGUgdmFs dWUgdG8gYWxsIGN1cnJlbnQgZW50cmllcyAqLwogCWZvciAoaSA9IDA7IGkgPCByZXNpemFibGVf c2htZW0tPm51bV9lbnRyaWVzOyBpKyspCiAJCXJlc2l6YWJsZV9zaG1lbS0+ZGF0YVtpXSA9IGVu dHJ5X3ZhbHVlOwpAQCAtMjQ1LDYgKzI4MywxOSBAQCByZXNpemFibGVfc2htZW1fcmVhZChQR19G VU5DVElPTl9BUkdTKQogCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFM VUUpLAogCQkJCSBlcnJtc2coImVudHJ5X2NvdW50ICVkIGlzIG91dCBvZiByYW5nZSAoMC4uJWQp IiwgZW50cnlfY291bnQsIHJlc2l6YWJsZV9zaG1lbS0+bnVtX2VudHJpZXMpKSk7CiAKKyNpZmRl ZiBIQVZFX1JFU0laQUJMRV9TSE1FTQorCisJLyoKKwkgKiBJZGVhbGx5IHRoZSBzdHJ1Y3R1cmUg c2hvdWxkIGJlIHByb3RlY3RlZCB0aHJvdWdoIGEgc3luY2hyb25pemF0aW9uCisJICogY3ljbGUg YWNyb3NzIGFsbCB0aGUgYmFja2VuZHMgdGhhdCBtYXkgYWNjZXNzIHRoZSBzdHJ1Y3R1cmUuIEJ1 dCB3ZQorCSAqIGRvbid0IGltcGxlbWVudCBhbnkgc3VjaCBzeW5jaHJvbml6YXRpb24gaW4gdGhp cyB0ZXN0IG1vZHVsZSB0byBrZWVwIGl0CisJICogc2ltcGxlLiBHaXZlbiB0aGF0IFByb2NTaWdu YWxCYXJyaWVyIG1lY2hhbmlzbSBpcyBub3QgZXh0ZW5zaWJsZSwgd2UKKwkgKiBtYXkgbm90IGJl IGFibGUgdG8gZG8gdGhhdCBhcyB3ZWxsIGhlcmUuIEhlbmNlIGFkZCBwcm90ZWN0IGp1c3QgYmVm b3JlCisJICogYWNjZXNzaW5nIHRoZSBzdHJ1Y3R1cmUuCisJICovCisJU2htZW1Qcm90ZWN0U3Ry dWN0KCJyZXNpemFibGVfc2htZW0iKTsKKyNlbmRpZgorCiAJZm9yIChpID0gMDsgaSA8IGVudHJ5 X2NvdW50OyBpKyspCiAJewogCQlpZiAocmVzaXphYmxlX3NobWVtLT5kYXRhW2ldICE9IGVudHJ5 X3ZhbHVlKQotLSAKMi4zNC4xCgo= --000000000000628762064edbf064 Content-Type: text/x-patch; charset="US-ASCII"; name="v20260407-0001-resizable-shared-memory-structures.patch" Content-Disposition: attachment; filename="v20260407-0001-resizable-shared-memory-structures.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnogenoz1 RnJvbSAzNjhkYjNiZGNlN2YwODc5NWVhMTI3MWVkMDI4NjAzNjY2MzNiNjZlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBc2h1dG9zaCBCYXBhdCA8YXNodXRvc2guYmFwYXQub3NzQGdt YWlsLmNvbT4KRGF0ZTogVHVlLCAxNyBGZWIgMjAyNiAxNjo1MToyMCArMDUzMApTdWJqZWN0OiBb UEFUQ0ggdjIwMjYwNDA3IDEvMl0gcmVzaXphYmxlIHNoYXJlZCBtZW1vcnkgc3RydWN0dXJlcwoK UmVzaXphYmxlIHNoYXJlZCBtZW1vcnkgc3RydWN0dXJlcyBjYW4gYmUgYWxsb2NhdGVkIGJ5IHNw ZWNpZnlpbmcgYSBuZXcKbWVtYmVyIFNobWVtU3RydWN0T3B0czo6bWF4aW11bV9zaXplLiBBdCB0 aGUgc3RhcnR1cCBvciB3aGVuIHRoZQpzdHJ1Y3R1cmUgaXMgY3JlYXRlZCwgd2UgcmVzZXJ2ZSBh ZGRyZXNzIHNwYWNlIHdvcnRoIG1heGltdW1fc2l6ZSBpbiB0aGUKc2hhcmVkIG1lbW9yeSBzZWdt ZW50LiBJdCBpcyBleHBlY3RlZCB0aGF0IHRoZSBzdWJzeXN0ZW0gd2hpY2ggY3JlYXRlcwp0aGUg c3RydWN0dXJlIHdvdWxkIGluaXRpYWxpemUgb25seSB0aGUgaW5pdGlhbCBzaXplIHdvcnRoIG9m IG1lbW9yeQp3aGVuIGNyZWF0aW5nIGl0LiBJbiBhbiBtbWFwJ2VkIG1lbW9yeSwgdGhpcyBzaG91 bGQgYWxsb2NhdGUgbWVtb3J5CndvcnRoIHRoZSBpbml0aWFsIHNpemUuIEl0IHNob3VsZCBub3Qg YWxsb2NhdGUgbWF4aW11bV9zaXplIHdvcnRoIG9mCm1lbW9yeSBpbml0aWFsbHkuIEFzIHRoZSBz dHJ1Y3R1cmUgaXMgcmVzaXplZCB1c2luZyBTaG1lbVJlc2l6ZVN0cnVjdCgpCm1lbW9yeSBpcyBm cmVlZCBvciBhbGxvY2F0ZWQgaW4gY2h1bmtzIG9mIG1lbW9yeSBwYWdlcyB3aGVuIHNocmlua2lu ZwphbmQgZXhwYW5kaW5nIHRoZSBzdHJ1Y3R1cmUgcmVzcGVjdGl2ZWx5LgoKUmVzaXphYmxlIHNo YXJlZCBtZW1vcnkgZmVhdHVyZSBkZXBlbmRzIHVwb24gZXhpc3RlbmNlIG9mIGZ1bmN0aW9uCm1h ZHZpc2UoKSBhbmQgY29uc3RhbnRzIE1BRFZfUkVNT1ZFIGFuZCBNQURWX1dSSVRFX1BPUFVMQVRF LgoKT24gdGhlIHBsYXRmb3JtcyB3aGljaCBkbyBub3QgaGF2ZSB0aGVzZSwgd2UgZGlzYWJsZSB0 aGlzIGZlYXR1cmUgYXQKY29tcGlsZSB0aW1lLiBUaGUgY29tbWl0IGludHJvZHVjZXMgYSBjb21w aWxlIHRpbWUgZmxhZwpIQVZFX1JFU0laQUJMRV9TSE1FTSB3aGljaCBpcyBkZWZpbmVkIGlmIE1B RFZfUkVNT1ZFIGFuZApNQURWX1dSSVRFX1BPUFVMQVRFIGV4aXN0LiBXZSBkb24ndCBjaGVjayBl eGlzdGVuY2Ugb2YgbWFkdmlzZQpzZXBhcmF0ZWx5LCBzaW5jZSBleGlzdGVuY2Ugb2YgdGhlIGNv bnN0YW50cyBpbXBsaWVzIGV4aXN0ZW5jZSBvZiB0aGUKZnVuY3Rpb24uCgpIQVZFX1JFU0laQUJM RV9TSE1FTSBpcyBub3QgZGVmaW5lZCBpbiBFWEVDX0JBQ0tFTkQgYnVpbGRzIHNpbmNlIHRoYXQn cwpsYXJnZWx5IHVzZWQgZm9yIFdpbmRvd3Mgd2hlcmUgdGhlIEFQSXMgdG8gZnJlZSBhbmQgYWxs b2NhdGUgbWVtb3J5IGZyb20KYW5kIHRvIGEgZ2l2ZW4gYWRkcmVzcyBzcGFjZSBhcmUgbm90IGtu b3duIHRvIHRoZSBhdXRob3IgcmlnaHQgbm93LgpHaXZlbiB0aGF0IFBvc3RncmVTUUwgaXMgdXNl ZCB3aWRlbHkgb24gTGludXgsIHByb3ZpZGluZyB0aGlzIGZlYXR1cmUgb24KTGludXggY292ZXJz IGJlbmVmaXRzIG1vc3Qgb2YgaXRzIHVzZXJzLiBPbmNlIHdlIGZpZ3VyZSBvdXQgdGhlIHJlcXVp cmVkCldpbmRvd3MgQVBJcywgd2Ugd2lsbCBzdXBwb3J0IHRoaXMgZmVhdHVyZSBvbiBXaW5kb3dz IGFzIHdlbGwuCgpUaGUgZmVhdHVyZSBpcyBhbHNvIG5vdCBhdmFpbGFibGUgd2hlbiBTeXMtViBz aGFyZWQgbWVtb3J5IGlzIHVzZWQgZXZlbgpvbiBMaW51eCBzaW5jZSB3ZSBkbyBub3Qga25vdyB3 aGV0aGVyIHJlcXVpcmVkIFN5cy1WIEFQSXMgZXhpc3Q7IG1vc3RseQp0aGV5IGRvbid0LiBTaW5j ZSB0aGF0IGNvbWJpbmF0aW9uIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBkZXZlbG9wbWVudCBhbmQK dGVzdGluZywgbm90IHN1cHBvcnRpbmcgdGhlIGZlYXR1cmUgdGhlcmUgaXNuJ3QgZ29pbmcgdG8g aW1wYWN0ClBvc3RncmVTUUwgdXNlcnMuCgpVc2luZyBIQVZFX1JFU0laQUJMRV9TSE1FTSB3ZSBk aXNhYmxlIGNvbXBpbGluZyB0aGUgY29kZSByZWxhdGVkIHRvCnJlc2l6YWJsZSBzaGFyZWQgbWVt b3J5IHN0cnVjdHVyZXMgb24gdGhlIHBsYXRmb3JtcyB3aGljaCBkbyBub3Qgc3VwcG9ydAp0aGUg ZmVhdHVyZS4gQnV0IHdlIGFsc28gaGF2ZSBydW4gdGltZSBjaGVja3MgdG8gZGlzYWJsZSB0aGlz IGZlYXR1cmUKd2hlbiBTeXMtViBzaGFyZWQgbWVtb3J5IGlzIHVzZWQuIEluIG9yZGVyIHRvIGtu b3cgd2hldGhlciBhIGdpdmVuCmluc3RhbmNlIG9mIHJ1bm5pbmcgc2VydmVyIHN1cHBvcnRzIHJl c2l6YWJsZSBzdHJ1Y3R1cmVzLCB3ZSBoYXZlCmludHJvZHVjZWQgR1VDIGhhdmVfcmVzaXphYmxl X3NobWVtLgoKQXV0aG9yOiBBc2h1dG9zaCBCYXBhdCA8YXNodXRvc2guYmFwYXQub3NzQGdtYWls LmNvbT4KUmV2aWV3ZWQtYnk6IE1hdHRoaWFzIHZhbiBkZSBNZWVudCA8Ym9la2V3dXJtK3Bvc3Rn cmVzQGdtYWlsLmNvbT4KLS0tCiBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAgIDQgKwogZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sICAgICAgICAgICAgICAg ICAgICAgIHwgIDE1ICsKIGRvYy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbCAgICAgICAgICAg ICAgICB8ICA0MiArKy0KIGRvYy9zcmMvc2dtbC94ZnVuYy5zZ21sICAgICAgICAgICAgICAgICAg ICAgICB8ICA1NCArKysKIG1lc29uLmJ1aWxkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAxNiArCiBzcmMvYmFja2VuZC9wb3J0L3N5c3Zfc2htZW0uYyAgICAgICAgICAgICAg ICAgfCAgNzkgKysrKysKIHNyYy9iYWNrZW5kL3BvcnQvd2luMzJfc2htZW0uYyAgICAgICAgICAg ICAgICB8ICA0NSArKysKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYyAgICAgICAgICAg ICAgICB8ICAxMSArCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5jICAgICAgICAgICAg ICAgfCAzMTggKysrKysrKysrKysrKysrKy0tCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19w YXJhbWV0ZXJzLmRhdCAgICAgfCAgIDcgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFi bGVzLmMgICAgICAgICAgIHwgICA3ICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQg ICAgICAgICAgICAgICB8ICAgNCArLQogc3JjL2luY2x1ZGUvcGdfY29uZmlnLmguaW4gICAgICAg ICAgICAgICAgICAgIHwgICA4ICsKIHNyYy9pbmNsdWRlL3BnX2NvbmZpZ19tYW51YWwuaCAgICAg ICAgICAgICAgICB8ICAgOSArCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3BnX3NobWVtLmggICAgICAg ICAgICAgICAgfCAgIDMgKwogc3JjL2luY2x1ZGUvc3RvcmFnZS9zaG1lbS5oICAgICAgICAgICAg ICAgICAgIHwgIDE3ICsKIHNyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUgICAgICAgICAgICAgICAg ICAgICB8ICAgMSArCiBzcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkICAgICAgICAgICAgICAg ICAgfCAgIDEgKwogc3JjL3Rlc3QvbW9kdWxlcy9yZXNpemFibGVfc2htZW0vTWFrZWZpbGUgICAg IHwgIDI1ICsrCiBzcmMvdGVzdC9tb2R1bGVzL3Jlc2l6YWJsZV9zaG1lbS9tZXNvbi5idWlsZCAg fCAgMzYgKysKIC4uLi9yZXNpemFibGVfc2htZW0vcmVzaXphYmxlX3NobWVtLS0xLjAuc3FsICB8 ICAzOSArKysKIC4uLi9tb2R1bGVzL3Jlc2l6YWJsZV9zaG1lbS9yZXNpemFibGVfc2htZW0uYyB8 IDMxNyArKysrKysrKysrKysrKysrKwogLi4uL3Jlc2l6YWJsZV9zaG1lbS9yZXNpemFibGVfc2ht ZW0uY29udHJvbCAgIHwgICA0ICsKIC4uLi9yZXNpemFibGVfc2htZW0vdC8wMDFfcmVzaXphYmxl X3NobWVtLnBsICB8IDI0MSArKysrKysrKysrKysrCiAuLi4vdGVzdF9zaG1lbS90LzAwMV9sYXRl X3NobWVtX2FsbG9jLnBsICAgICAgfCAgMzEgKysKIC4uLi9tb2R1bGVzL3Rlc3Rfc2htZW0vdGVz dF9zaG1lbS0tMS4wLnNxbCAgICB8ICAgNCArCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2htZW0v dGVzdF9zaG1lbS5jICAgICAgfCAgMTQgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxl cy5vdXQgICAgICAgICAgIHwgICA3ICstCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dCAgICAgICAgICAgICAgfCAgIDEgKwogMjkgZmlsZXMgY2hhbmdlZCwgMTMyMyBpbnNlcnRpb25z KCspLCAzNyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVz L3Jlc2l6YWJsZV9zaG1lbS9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21v ZHVsZXMvcmVzaXphYmxlX3NobWVtL21lc29uLmJ1aWxkCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Jj L3Rlc3QvbW9kdWxlcy9yZXNpemFibGVfc2htZW0vcmVzaXphYmxlX3NobWVtLS0xLjAuc3FsCiBj cmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy9yZXNpemFibGVfc2htZW0vcmVzaXph YmxlX3NobWVtLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Jlc2l6YWJs ZV9zaG1lbS9yZXNpemFibGVfc2htZW0uY29udHJvbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90 ZXN0L21vZHVsZXMvcmVzaXphYmxlX3NobWVtL3QvMDAxX3Jlc2l6YWJsZV9zaG1lbS5wbAoKZGlm ZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCBmZjVkZDY0NDY4ZS4u N2FjZDg0NGNjYjIgMTAwNjQ0Ci0tLSBhL2NvbmZpZ3VyZS5hYworKysgYi9jb25maWd1cmUuYWMK QEAgLTE4OTUsNiArMTg5NSwxMCBAQCBBQ19DSEVDS19ERUNMUyhbbWVtc2V0X3NdLCBbXSwgW10s IFsjZGVmaW5lIF9fU1REQ19XQU5UX0xJQl9FWFQxX18gMQogIyBUaGlzIGlzIHByb2JhYmx5IG9u bHkgcHJlc2VudCBvbiBtYWNPUywgYnV0IG1heSBhcyB3ZWxsIGNoZWNrIGFsd2F5cwogQUNfQ0hF Q0tfREVDTFMoRl9GVUxMRlNZTkMsIFtdLCBbXSwgWyNpbmNsdWRlIDxmY250bC5oPl0pCiAKKyMg TGludXgtc3BlY2lmaWMgbWFkdmlzZSBjb25zdGFudHMgbmVlZGVkIGZvciByZXNpemFibGUgc2hh cmVkIG1lbW9yeS4gU2VlIHNpbWlsYXIgY2hlY2tzIGluIG1lc29uLmJ1aWxkIGZvciBleHBsYW5h dGlvbiBvZiB3aHkgdGhlc2UgY2hlY2tzIGFyZSBoZXJlLgorQUNfQ0hFQ0tfREVDTFMoW01BRFZf UE9QVUxBVEVfV1JJVEVdLCBbXSwgW10sIFsjaW5jbHVkZSA8c3lzL21tYW4uaD5dKQorQUNfQ0hF Q0tfREVDTFMoW01BRFZfUkVNT1ZFXSwgW10sIFtdLCBbI2luY2x1ZGUgPHN5cy9tbWFuLmg+XSkK KwogQUNfUkVQTEFDRV9GVU5DUyhtNF9ub3JtYWxpemUoWwogCWV4cGxpY2l0X2J6ZXJvCiAJZ2V0 b3B0CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgYi9kb2Mvc3JjL3NnbWwv Y29uZmlnLnNnbWwKaW5kZXggMzMyNGQyZDNjNDkuLjlmNjMwYjFhMDc0IDEwMDY0NAotLS0gYS9k b2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCkBA IC0xMjEzOCw2ICsxMjEzOCwyMSBAQCBkeW5hbWljX2xpYnJhcnlfcGF0aCA9ICcvdXNyL2xvY2Fs L2xpYi9wb3N0Z3Jlc3FsOiRsaWJkaXInCiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxp c3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtaGF2ZS1yZXNpemFibGUtc2hh cmVkLW1lbW9yeSIgeHJlZmxhYmVsPSJoYXZlX3Jlc2l6YWJsZV9zaGFyZWRfbWVtb3J5Ij4KKyAg ICAgIDx0ZXJtPjx2YXJuYW1lPmhhdmVfcmVzaXphYmxlX3NoYXJlZF9tZW1vcnk8L3Zhcm5hbWU+ ICg8dHlwZT5ib29sZWFuPC90eXBlPikKKyAgICAgIDxpbmRleHRlcm0+CisgICAgICAgPHByaW1h cnk+PHZhcm5hbWU+aGF2ZV9yZXNpemFibGVfc2hhcmVkX21lbW9yeTwvdmFybmFtZT4gY29uZmln dXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgICA8L2luZGV4dGVybT4KKyAgICAgIDwv dGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgUmVwb3J0cyB3 aGV0aGVyIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gaGFzIGJlZW4gYnVp bHQKKyAgICAgICAgd2l0aCA8bGl0ZXJhbD5IQVZFX1JFU0laQUJMRV9TSE1FTTwvbGl0ZXJhbD4g ZW5hYmxlZCBhbmQgc3VwcG9ydHMKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ieGZ1bmMtc2hhcmVk LWFkZGluLXJlc2l6YWJsZSI+UmVzaXphYmxlIHNoYXJlZCBtZW1vcnkgc3RydWN0dXJlczwvbGlu az4uCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50 cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLWh1Z2UtcGFnZXMtc3RhdHVzIiB4cmVm bGFiZWw9Imh1Z2VfcGFnZXNfc3RhdHVzIj4KICAgICAgIDx0ZXJtPjx2YXJuYW1lPmh1Z2VfcGFn ZXNfc3RhdHVzPC92YXJuYW1lPiAoPHR5cGU+ZW51bTwvdHlwZT4pCiAgICAgICA8aW5kZXh0ZXJt PgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3N5c3RlbS12aWV3cy5zZ21sIGIvZG9jL3NyYy9z Z21sL3N5c3RlbS12aWV3cy5zZ21sCmluZGV4IDJlYmVjNjkyOGQ1Li45YmJiZmRiMzdjNSAxMDA2 NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3N5c3RlbS12aWV3cy5zZ21sCisrKyBiL2RvYy9zcmMvc2dt bC9zeXN0ZW0tdmlld3Muc2dtbApAQCAtNDI0Myw4ICs0MjQzLDQ2IEBAIFNFTEVDVCAqIEZST00g cGdfbG9ja3MgcGwgTEVGVCBKT0lOIHBnX3ByZXBhcmVkX3hhY3RzIHBweAogICAgICAgIFNpemUg b2YgdGhlIGFsbG9jYXRpb24gaW4gYnl0ZXMgaW5jbHVkaW5nIHBhZGRpbmcuIEZvciBhbm9ueW1v dXMKICAgICAgICBhbGxvY2F0aW9ucywgbm8gaW5mb3JtYXRpb24gYWJvdXQgcGFkZGluZyBpcyBh dmFpbGFibGUsIHNvIHRoZQogICAgICAgIDxsaXRlcmFsPnNpemU8L2xpdGVyYWw+IGFuZCA8bGl0 ZXJhbD5hbGxvY2F0ZWRfc2l6ZTwvbGl0ZXJhbD4gY29sdW1ucwotICAgICAgIHdpbGwgYWx3YXlz IGJlIGVxdWFsLiBQYWRkaW5nIGlzIG5vdCBtZWFuaW5nZnVsIGZvciBmcmVlIG1lbW9yeSwgc28K LSAgICAgICB0aGUgY29sdW1ucyB3aWxsIGJlIGVxdWFsIGluIHRoYXQgY2FzZSBhbHNvLgorICAg ICAgIHdpbGwgYWx3YXlzIGJlIGVxdWFsLiBQYWRkaW5nIGlzIG5vdCBtZWFuaW5nZnVsIGZvciBm cmVlIG1lbW9yeSwgc28gdGhlCisgICAgICAgY29sdW1ucyB3aWxsIGJlIGVxdWFsIGluIHRoYXQg Y2FzZSBhbHNvLiBGb3IgcmVzaXphYmxlIGFsbG9jYXRpb25zIHdoaWNoCisgICAgICAgbWF5IHNw YW4gbXVsdGlwbGUgbWVtb3J5IHBhZ2VzLCB0aGUgcGFkZGluZyBpbmNsdWRlcyB0aGUgcGFkZGlu ZyBkdWUgdG8KKyAgICAgICBwYWdlIGFsaWdubWVudC4KKyAgICAgIDwvcGFyYT48L2VudHJ5Pgor ICAgICA8L3Jvdz4KKworICAgICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFi bGVfZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAgICAgICA8c3RydWN0 ZmllbGQ+bWluaW11bV9zaXplPC9zdHJ1Y3RmaWVsZD4gPHR5cGU+aW50ODwvdHlwZT4KKyAgICAg IDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgIE1pbmltdW0gc2l6ZSBpbiBieXRlcyB0aGF0 IHRoZSByZXNpemFibGUgYWxsb2NhdGlvbiBjYW4gc2hyaW5rIHRvLiBFcXVhbHMKKyAgICAgICA8 c3RydWN0ZmllbGQ+c2l6ZTwvc3RydWN0ZmllbGQ+Rm9yIGZpeGVkLXNpemUgYWxsb2NhdGlvbnMs IGFub255bW91cworICAgICAgIGFsbG9jYXRpb25zLCBhbmQgZnJlZSBtZW1vcnkuCisgICAgICA8 L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CisKKyAgICAgPHJvdz4KKyAgICAgIDxlbnRyeSBy b2xlPSJjYXRhbG9nX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5pdGlvbiI+ CisgICAgICAgPHN0cnVjdGZpZWxkPm1heGltdW1fc2l6ZTwvc3RydWN0ZmllbGQ+IDx0eXBlPmlu dDg8L3R5cGU+CisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICBNYXhpbXVtIHNp emUgaW4gYnl0ZXMgdGhhdCB0aGUgcmVzaXphYmxlIGFsbG9jYXRpb24gY2FuIGdyb3cgdG8uIEVx dWFscworICAgICAgIDxzdHJ1Y3RmaWVsZD5zaXplPC9zdHJ1Y3RmaWVsZD4gRm9yIGZpeGVkLXNp emUgYWxsb2NhdGlvbnMsIGFub255bW91cworICAgICAgIGFsbG9jYXRpb25zLCBhbmQgZnJlZSBt ZW1vcnkuCisgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CisKKyAgICAgPHJvdz4K KyAgICAgIDxlbnRyeSByb2xlPSJjYXRhbG9nX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJjb2x1 bW5fZGVmaW5pdGlvbiI+CisgICAgICAgPHN0cnVjdGZpZWxkPnJlc2VydmVkX3NwYWNlPC9zdHJ1 Y3RmaWVsZD4gPHR5cGU+aW50ODwvdHlwZT4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgor ICAgICAgIEFkZHJlc3Mgc3BhY2UgcmVzZXJ2ZWQgZm9yIHRoZSBhbGxvY2F0aW9uIGluIGJ5dGVz LiBGb3IgcmVzaXphYmxlCisgICAgICAgc3RydWN0dXJlcywgdGhpcyBpcyB0aGUgdG90YWwgYWRk cmVzcyBzcGFjZSByZXNlcnZlZCB0byBhY2NvbW1vZGF0ZQorICAgICAgIGdyb3d0aCB1cCB0byA8 c3RydWN0ZmllbGQ+bWF4aW11bV9zaXplPC9zdHJ1Y3RmaWVsZD4sIGFuZCBpcyBncmVhdGVyCisg ICAgICAgdGhhbiBvciBlcXVhbCB0byA8c3RydWN0ZmllbGQ+YWxsb2NhdGVkX3NpemU8L3N0cnVj dGZpZWxkPi4gRm9yCisgICAgICAgZml4ZWQtc2l6ZSBhbGxvY2F0aW9ucywgYW5vbnltb3VzIGFs bG9jYXRpb25zLCBhbmQgZnJlZSBtZW1vcnkgdGhpcworICAgICAgIGlzIHNhbWUgYXMgPHN0cnVj dGZpZWxkPmFsbG9jYXRlZF9zaXplPC9zdHJ1Y3RmaWVsZD4uCiAgICAgICA8L3BhcmE+PC9lbnRy eT4KICAgICAgPC9yb3c+CiAgICAgPC90Ym9keT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC94 ZnVuYy5zZ21sIGIvZG9jL3NyYy9zZ21sL3hmdW5jLnNnbWwKaW5kZXggNzg5Y2FjOWZjYWIuLjIy Zjk1M2RiOWQ3IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwveGZ1bmMuc2dtbAorKysgYi9kb2Mv c3JjL3NnbWwveGZ1bmMuc2dtbApAQCAtMzc0NCw2ICszNzQ0LDYwIEBAIG15X3NobWVtX2luaXQo dm9pZCAqYXJnKQogICAgICA8L3BhcmE+CiAgICAgPC9zZWN0Mz4KIAorICAgIDxzZWN0MyBpZD0i eGZ1bmMtc2hhcmVkLWFkZGluLXJlc2l6YWJsZSI+CisgICAgIDx0aXRsZT5SZXNpemFibGUgc2hh cmVkIG1lbW9yeSBzdHJ1Y3R1cmVzPC90aXRsZT4KKworICAgICA8cGFyYT4KKyAgICAgQSByZXNp emFibGUgbWVtb3J5IHN0cnVjdHVyZSBjYW4gYmUgcmVxdWVzdGVkIHVzaW5nCisgICAgIDxmdW5j dGlvbj5TaG1lbVJlcXVlc3RTdHJ1Y3QoKTwvZnVuY3Rpb24+IGJ5IHBhc3NpbmcKKyAgICAgPHBh cmFtZXRlcj5tYXhpbXVtX3NpemU8L3BhcmFtZXRlcj4gYWxvbmcgd2l0aAorICAgICA8cGFyYW1l dGVyPnNpemU8L3BhcmFtZXRlcj4uIDxwYXJhbWV0ZXI+bWF4aW11bV9zaXplPC9wYXJhbWV0ZXI+ IGlzCisgICAgIG1heGltdW0gc2l6ZSB1cHRvIHdoaWNoIHRoZSBzdHJ1Y3R1cmUgY2FuIGdyb3cg d2hlcmUgYXMKKyAgICAgPHBhcmFtZXRlcj5zaXplPC9wYXJhbWV0ZXI+IGlzIHRoZSBpbml0aWFs IHNpemUgb2YgdGhlIHN0cnVjdHVyZS4KKyAgICAgT3B0aW9uYWxseSwgPHBhcmFtZXRlcj5taW5p bXVtX3NpemU8L3BhcmFtZXRlcj4gY2FuIGJlIHNldCB0byB0aGUgbWluaW11bQorICAgICBzaXpl IHRoYXQgdGhlIHN0cnVjdHVyZSBjYW4gc2hyaW5rIHRvLiAgV2hpbGUKKyAgICAgY29udGlndW91 cyBhZGRyZXNzIHNwYWNlIHdvcnRoIDxwYXJhbWV0ZXI+bWF4aW11bV9zaXplPC9wYXJhbWV0ZXI+ IGlzCisgICAgIGFsbG9jYXRlZCB0byB0aGUgc3RydWN0dXJlLCBvbmx5IG1lbW9yeSB3b3J0aCA8 cGFyYW1ldGVyPnNpemU8L3BhcmFtZXRlcj4KKyAgICAgYnl0ZXMgaXMgYWxsb2NhdGVkIGluaXRp YWxseS4gVGhlIDxmdW5jdGlvbj5pbml0X2ZuPC9mdW5jdGlvbj4gc2hvdWxkIG9ubHkKKyAgICAg aW5pdGlhbGl6ZSB0aGUgPHBhcmFtZXRlcj5zaXplPC9wYXJhbWV0ZXI+IGFtb3VudCBvZiBtZW1v cnkuIFRoZSBhY3R1YWwKKyAgICAgbWVtb3J5IGFsbG9jYXRlZCB0byB0aGlzIHN0cnVjdHVyZSBh dCBhbnkgcG9pbnQgaW4gdGltZSBpcyBnaXZlbiBieSA8bGluaworICAgICBsaW5rZW5kPSJ2aWV3 LXBnLXNobWVtLWFsbG9jYXRpb25zIj48c3RydWN0bmFtZT5wZ19zaG1lbV9hbGxvY2F0aW9uczwv c3RydWN0bmFtZT4uPHN0cnVjdGZpZWxkPmFsbG9jYXRlZF9zaXplPC9zdHJ1Y3RmaWVsZD48L2xp bms+CisgICAgIGFuZCB0aGUgYWRkcmVzcyBzcGFjZSByZXNlcnZlZCBmb3IgdGhpcyBzdHJ1Y3R1 cmUgaXMgZ2l2ZW4gYnkgPGxpbmsKKyAgICAgbGlua2VuZD0idmlldy1wZy1zaG1lbS1hbGxvY2F0 aW9ucyI+PHN0cnVjdG5hbWU+cGdfc2htZW1fYWxsb2NhdGlvbnM8L3N0cnVjdG5hbWU+LjxzdHJ1 Y3RmaWVsZD5yZXNlcnZlZF9zcGFjZTwvc3RydWN0ZmllbGQ+PC9saW5rPi4KKyAgICAgPC9wYXJh PgorCisgICAgPHBhcmE+CisgICAgVGhlIHN0cnVjdHVyZSBjYW4gYmUgcmVzaXplZCB1c2luZyA8 ZnVuY3Rpb24+U2htZW1SZXNpemVTdHJ1Y3QoKTwvZnVuY3Rpb24+CisgICAgYnkgcGFzc2luZyBp dCB0aGUgc3RydWN0dXJlJ3MgPHBhcmFtZXRlcj5uYW1lPC9wYXJhbWV0ZXI+IGFuZCB0aGUgbmV3 IHNpemUKKyAgICB3aGljaCBjYW4gYmUgYW55d2hlcmUgYmV0d2VlbiA8cGFyYW1ldGVyPm1pbmlt dW1fc2l6ZTwvcGFyYW1ldGVyPiBhbmQKKyAgICA8cGFyYW1ldGVyPm1heGltdW1fc2l6ZTwvcGFy YW1ldGVyPi4gSWYgdGhlIG5ldyBzaXplIGlzIHNtYWxsZXIgdGhhbiB0aGUKKyAgICBjdXJyZW50 IHNpemUgb2YgdGhlIHN0cnVjdHVyZSwgdGhlIG1lbW9yeSBiZXR3ZWVuIHRoZSBuZXcgc2l6ZSBh bmQgY3VycmVudAorICAgIHNpemUgaXMgZnJlZWQgd2hpbGUga2VlcGluZyB0aGUgY29udGVudHMg b2YgdGhlIG1lbW9yeSB1cHRvIG5ldyBzaXplIGludGFjdC4KKyAgICBJZiB0aGUgbmV3IHNpemUg aXMgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IHNpemUsIG1lbW9yeSBpcyBhbGxvY2F0ZWQgdXB0 bworICAgIG5ldyBzaXplIHdoaWxlIGtlZXBpbmcgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgdGhl IHN0cnVjdHVyZSBpbnRhY3QuIFRoZQorICAgIHN0YXJ0aW5nIGFkZHJlc3Mgb2YgdGhlIHN0cnVj dHVyZSBkb2VzIG5vdCBjaGFuZ2UgYmVjYXVzZSBvZiByZXNpemluZworICAgIG9wZXJhdGlvbi4g VGhlIHN5YnN5c3RlbSB1c2luZyB0aGlzIGZlYXR1cmUgbmVlZHMgdG8gdGFrZSBjYXJlIG9mIHRo ZQorICAgIGFkZGl0aW9uYWwgc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGhlIHJlc2l6aW5nIHBy b2Nlc3MgYW5kIHRoZSBwcm9jZXNzZXMKKyAgICB1c2luZyB0aGUgc2hhcmVkIHN0cnVjdHVyZS4g QWxzbyBpdCBuZWVkcyB0byBpbXBsZW1lbnQgYWRkaXRpb25hbCBwcm90ZWN0aW9uCisgICAgdG8g cHJldmVudCBhY2Nlc3MgdG8gdGhlIHBhcnQgb2YgdGhlIGFkZHJlc3Mgc3BhY2UgYmV5b25kIHRo ZSBzaXplIG9mIHRoZQorICAgIHN0cnVjdHVyZSB3aGVuIHJlc2l6aW5nIGl0LgorICAgIDwvcGFy YT4KKworICAgIDxwYXJhPgorICAgIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyBhdmFpbGFibGUgb25s eSBvbiB0aGUgcGxhdGZvcm1zIHdoaWNoIHByb3ZpZGUgdGhlIEFQSXMKKyAgICBuZWNlc3Nhcnkg dG8gcmVzZXJ2ZSBjb250aWd1b3VzIGFkZHJlc3Mgc3BhY2UgYW5kIHRvIGFsbG9jYXRlIG9yIGZy ZWUgbWVtb3J5CisgICAgaW4gdGhhdCBhZGRyZXNzIHNwYWNlIG9uIGRlbWFuZC4gTWFjcm8gPHN5 bWJvbD5IQVZFX1JFU0laQUJMRV9TSE1FTTwvc3ltYm9sPgorICAgIGlzIGRlZmluZWQgb24gc3Vj aCBwbGF0Zm9ybXMuIEl0IGNhbiBiZSB1c2VkIHRvIGd1YXJkIGNvZGUgcmVsYXRlZCB0bworICAg IHJlc2l6aW5nIGEgc2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmUuIFRoZSBmdW5jdGlvbmFsaXR5IGlz IGF2YWlsYWJsZSBvbiB3aXRoCisgICAgbW1hcCdlZCBtZW1vcnksIHNvIHN1YnN5c3RlbXMgd2hp Y2ggdXNlIHJlc2l6YWJsZSBzdHJ1Y3R1cmVzIG1heSBoYXZlIHRvCisgICAgYWRkdGlvbmFsbHkg ZGlzYWJsZSByZXNpemFibGUgbWVtb3J5IHVzYWdlIHdoZW4KKyAgICA8c3ltYm9sPnNoYXJlZF9t ZW1vcnlfdHlwZTwvc3ltYm9sPiBpcyBub3QgPHN5bWJvbD5TSE1FTV9UWVBFX01NQVA8L3N5bWJv bD4uCisgICAgQSBHVUMgPHhyZWYgbGlua2VuZD0iZ3VjLWhhdmUtcmVzaXphYmxlLXNoYXJlZC1t ZW1vcnkiLz4gaXMgc2V0IHRvCisgICAgPGxpdGVyYWw+b248L2xpdGVyYWw+IHdoZW4gdGhpcyBm dW5jdGlvbmFsaXR5IGlzIGF2YWlsYWJsZSBpbiBhIHJ1bm5pbmcKKyAgICBzZXJ2ZXIsIDxsaXRl cmFsPm9mZjwvbGl0ZXJhbD4gb3RoZXJ3aXNlLgorICAgIDwvcGFyYT4KKyAgICA8L3NlY3QzPgor CiAgICAgPHNlY3QzIGlkPSJ4ZnVuYy1zaGFyZWQtYWRkaW4tZHluYW1pYyI+CiAgICAgIDx0aXRs ZT5BbGxvY2F0aW5nIER5bmFtaWMgU2hhcmVkIE1lbW9yeSBBZnRlciBTdGFydHVwPC90aXRsZT4K IApkaWZmIC0tZ2l0IGEvbWVzb24uYnVpbGQgYi9tZXNvbi5idWlsZAppbmRleCA0M2Q1ZmZjMzBi MS4uNzkwODQ1NzYyZTEgMTAwNjQ0Ci0tLSBhL21lc29uLmJ1aWxkCisrKyBiL21lc29uLmJ1aWxk CkBAIC0yOTA0LDYgKzI5MDQsMjIgQEAgZGVjbF9jaGVja3MgPSBbCiAgIFsndGltaW5nc2FmZV9i Y21wJywgICdzdHJpbmcuaCddLAogXQogCisjIExpbnV4LXNwZWNpZmljIG1hZHZpc2UgY29uc3Rh bnRzIG5lZWRlZCBmb3IgcmVzaXphYmxlIHNoYXJlZCBtZW1vcnkuCisjIFVzdWFsbHkgd2UgdXNl IEFDX0NIRUNLX0RFQ0xTIHRvIGNoZWNrIGZvciBmdW5jdGlvbiBkZWNsYXJhdGlvbnMsIGJ1dCBp biB0aGlzCisjIGNhc2Ugd2UgYXJlIHVzaW5nIGl0IHRvIGRldGVjdCBleGlzdGVuY2Ugb2YgY29u c3RhbnRzLiBUaGVzZSBjb25zdGFudHMgYXJlCisjIHVzZWQgdG8gZGVmaW5lIEhBVkVfUkVTSVpB QkxFX1NITUVNIHdoaWNoIGlzIHVzZWQgaW4gc3RvcmFnZS9wZ19zaG1lbS5oIGFzCisjIHdlbGwg YXMgc3RvcmFnZS9zaG1lbS5oLiBUaGUgZmlyc3QgYWJzdHJhY3RzIHRoZSBBUElzIHRvIGFsbG9j YXRlIHNoYXJlZAorIyBtZW1vcnkgc2VnbWVudHMgZnJvbSB0aGUgb3BlcmF0aW5nIHN5c3RlbSB3 aGVyZWFzIHRoZSBzZWNvbmQgYWJzdHJhY3RzIEFQSXMgdG8KKyMgYWxsb2NhdGUgc2hhcmVkIG1l bW9yeSB0byB2YXJpb3VzIHN1YnN5c3RlbXMuIFNpbmNlIHRoZXkgYXJlIHJlbGF0ZWQgYnV0Cisj IG9ydGhvZ29uYWwgdG8gZWFjaCBvdGhlciwgaW5jbHVkaW5nIGFueSBvbmUgb2YgdGhlbSBpbiB0 aGUgb3RoZXIgZmlsZSBkb2Vzbid0CisjIG1ha2Ugc2Vuc2UuIHBnX2NvbmZpZ19tYW51YWwuaCBp cyB0aGUgb25seSBwbGFjZSB3aGVyZSBIQVZFX1JFU0laQUJMRV9TSE1FTQorIyBjYW4gYmUgZGVm aW5lZCBhbmQgbWFkZSBhdmFpbGFibGUgdG8gYm90aCB3aXRob3V0IGluY2x1ZGluZyBzeXMvbW1h bi5oLiBCdXQKKyMgZm9yIHRoYXQgd2UgbmVlZCBjb25zdGFudHMgdGhhdCBpbmRpY2F0ZSB0aGUg ZXhpc3RlbmNlIG9mIGZvbGxvd2luZyBkZWZpbmVzLgorZGVjbF9jaGVja3MgKz0gWworICBbJ01B RFZfUE9QVUxBVEVfV1JJVEUnLCAnc3lzL21tYW4uaCddLAorICBbJ01BRFZfUkVNT1ZFJywgJ3N5 cy9tbWFuLmgnXSwKK10KKwogIyBOZWVkIHRvIGNoZWNrIGZvciBmdW5jdGlvbiBkZWNsYXJhdGlv bnMgZm9yIHRoZXNlIGZ1bmN0aW9ucywgYmVjYXVzZQogIyBjaGVja2luZyBmb3IgbGlicmFyeSBz eW1ib2xzIHdvdWxkbid0IGhhbmRsZSBkZXBsb3ltZW50IHRhcmdldAogIyByZXN0cmljdGlvbnMg b24gbWFjT1MKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BvcnQvc3lzdl9zaG1lbS5jIGIvc3Jj L2JhY2tlbmQvcG9ydC9zeXN2X3NobWVtLmMKaW5kZXggMmUzODg2Y2Y5ZmUuLmJiMmE4MTQxN2M2 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3J0L3N5c3Zfc2htZW0uYworKysgYi9zcmMvYmFj a2VuZC9wb3J0L3N5c3Zfc2htZW0uYwpAQCAtNTg5LDYgKzU4OSwyNyBAQCBjaGVja19odWdlX3Bh Z2Vfc2l6ZShpbnQgKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLCBHdWNTb3VyY2Ugc291cmNlKQogCXJl dHVybiB0cnVlOwogfQogCisvKgorICogR2V0IHRoZSBwYWdlIHNpemUgYmVpbmcgdXNlZCBieSB0 aGUgc2hhcmVkIG1lbW9yeS4KKyAqCisgKiBUaGUgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBv bmx5IGFmdGVyIHRoZSBzaGFyZWQgbWVtb3J5IGhhcyBiZWVuIHNldHVwLgorICovCitTaXplCitH ZXRPU1BhZ2VTaXplKHZvaWQpCit7CisJU2l6ZQkJb3NfcGFnZV9zaXplOworCisJQXNzZXJ0KGh1 Z2VfcGFnZXNfc3RhdHVzICE9IEhVR0VfUEFHRVNfVU5LTk9XTik7CisKKwlvc19wYWdlX3NpemUg PSBzeXNjb25mKF9TQ19QQUdFU0laRSk7CisKKwkvKiBJZiBodWdlIHBhZ2VzIGFyZSBhY3R1YWxs eSBpbiB1c2UsIHVzZSBodWdlIHBhZ2Ugc2l6ZSAqLworCWlmIChodWdlX3BhZ2VzX3N0YXR1cyA9 PSBIVUdFX1BBR0VTX09OKQorCQlHZXRIdWdlUGFnZVNpemUoJm9zX3BhZ2Vfc2l6ZSwgTlVMTCk7 CisKKwlyZXR1cm4gb3NfcGFnZV9zaXplOworfQorCiAvKgogICogQ3JlYXRlcyBhbiBhbm9ueW1v dXMgbW1hcCgpZWQgc2hhcmVkIG1lbW9yeSBzZWdtZW50LgogICoKQEAgLTk5MSwzICsxMDEyLDYx IEBAIFBHU2hhcmVkTWVtb3J5RGV0YWNoKHZvaWQpCiAJCUFub255bW91c1NobWVtID0gTlVMTDsK IAl9CiB9CisKKy8qCisgKiBNYWtlIHN1cmUgdGhhdCB0aGUgbWVtb3J5IG9mIGdpdmVuIHNpemUg ZnJvbSB0aGUgZ2l2ZW4gYWRkcmVzcyBpcyByZWxlYXNlZC4KKyAqCisgKiBUaGUgYWRkcmVzcyBh bmQgc2l6ZSBhcmUgZXhwZWN0ZWQgdG8gYmUgcGFnZSBhbGlnbmVkLgorICoKKyAqIE9ubHkgc3Vw cG9ydGVkIG9uIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgYW5vbnltb3VzIHNoYXJlZCBtZW1vcnku CisgKi8KK3ZvaWQKK1BHU2hhcmVkTWVtb3J5RW5zdXJlRnJlZWQodm9pZCAqYWRkciwgU2l6ZSBz aXplKQoreworI2lmbmRlZiBIQVZFX1JFU0laQUJMRV9TSE1FTQorCWVyZXBvcnQoRVJST1IsCisJ CQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkgZXJybXNnKCJy ZXNpemFibGUgc2hhcmVkIG1lbW9yeSBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0i KSkpOworI2Vsc2UKKwlpZiAoIUFub255bW91c1NobWVtKQorCQllcmVwb3J0KEVSUk9SLAorCQkJ CShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkgZXJybXNnKCJv bmx5IGFub255bW91cyBzaGFyZWQgbWVtb3J5IGNhbiBiZSBmcmVlZCIpKSk7CisKKwlBc3NlcnQo YWRkciA9PSAodm9pZCAqKSBUWVBFQUxJR04oR2V0T1NQYWdlU2l6ZSgpLCBhZGRyKSk7CisJQXNz ZXJ0KHNpemUgPT0gVFlQRUFMSUdOKEdldE9TUGFnZVNpemUoKSwgc2l6ZSkpOworCisJaWYgKG1h ZHZpc2UoYWRkciwgc2l6ZSwgTUFEVl9SRU1PVkUpID09IC0xKQorCQllcmVwb3J0KEVSUk9SLAor CQkJCShlcnJtc2coImNvdWxkIG5vdCBmcmVlIHNoYXJlZCBtZW1vcnk6ICVtIikpKTsKKyNlbmRp ZgorfQorCisvKgorICogTWFrZSBzdXJlIHRoYXQgdGhlIG1lbW9yeSBvZiBnaXZlbiBzaXplIGZy b20gdGhlIGdpdmVuIGFkZHJlc3MgaXMgYWxsb2NhdGVkLgorICoKKyAqIFRoZSBhZGRyZXNzIGFu ZCBzaXplIGFyZSBleHBlY3RlZCB0byBiZSBwYWdlIGFsaWduZWQuCisgKgorICogT25seSBzdXBw b3J0ZWQgb24gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCBhbm9ueW1vdXMgc2hhcmVkIG1lbW9yeS4K KyAqLwordm9pZAorUEdTaGFyZWRNZW1vcnlFbnN1cmVBbGxvY2F0ZWQodm9pZCAqYWRkciwgU2l6 ZSBzaXplKQoreworI2lmbmRlZiBIQVZFX1JFU0laQUJMRV9TSE1FTQorCWVyZXBvcnQoRVJST1Is CisJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkgZXJybXNn KCJyZXNpemFibGUgc2hhcmVkIG1lbW9yeSBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZv cm0iKSkpOworI2Vsc2UKKwlpZiAoIUFub255bW91c1NobWVtKQorCQllcmVwb3J0KEVSUk9SLAor CQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkgZXJybXNn KCJvbmx5IGFub255bW91cyBzaGFyZWQgbWVtb3J5IGNhbiBiZSBhbGxvY2F0ZWQgYXQgcnVudGlt ZSIpKSk7CisKKwlBc3NlcnQoYWRkciA9PSAodm9pZCAqKSBUWVBFQUxJR04oR2V0T1NQYWdlU2l6 ZSgpLCBhZGRyKSk7CisJQXNzZXJ0KHNpemUgPT0gVFlQRUFMSUdOKEdldE9TUGFnZVNpemUoKSwg c2l6ZSkpOworCisJaWYgKG1hZHZpc2UoYWRkciwgc2l6ZSwgTUFEVl9QT1BVTEFURV9XUklURSkg PT0gLTEpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycm1zZygiY291bGQgbm90IGFsbG9jYXRl IHNoYXJlZCBtZW1vcnk6ICVtIikpKTsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvcG9ydC93aW4zMl9zaG1lbS5jIGIvc3JjL2JhY2tlbmQvcG9ydC93aW4zMl9zaG1lbS5jCmlu ZGV4IDc5NGU0ZmNiMmFkLi5jMWYzMDY2NWU2NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9y dC93aW4zMl9zaG1lbS5jCisrKyBiL3NyYy9iYWNrZW5kL3BvcnQvd2luMzJfc2htZW0uYwpAQCAt NjQ4LDMgKzY0OCw0OCBAQCBjaGVja19odWdlX3BhZ2Vfc2l6ZShpbnQgKm5ld3ZhbCwgdm9pZCAq KmV4dHJhLCBHdWNTb3VyY2Ugc291cmNlKQogCX0KIAlyZXR1cm4gdHJ1ZTsKIH0KKworLyoKKyAq IEdldCB0aGUgcGFnZSBzaXplIHVzZWQgYnkgdGhlIHNoYXJlZCBtZW1vcnkuCisgKgorICogVGhl IGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlciB0aGUgc2hhcmVkIG1lbW9yeSBo YXMgYmVlbiBzZXR1cC4KKyAqLworU2l6ZQorR2V0T1NQYWdlU2l6ZSh2b2lkKQoreworCVNZU1RF TV9JTkZPIHN5c2luZm87CisJU2l6ZQkJb3NfcGFnZV9zaXplOworCisJQXNzZXJ0KGh1Z2VfcGFn ZXNfc3RhdHVzICE9IEhVR0VfUEFHRVNfVU5LTk9XTik7CisKKwlHZXRTeXN0ZW1JbmZvKCZzeXNp bmZvKTsKKwlvc19wYWdlX3NpemUgPSBzeXNpbmZvLmR3UGFnZVNpemU7CisKKwkvKiBJZiBodWdl IHBhZ2VzIGFyZSBhY3R1YWxseSBpbiB1c2UsIHVzZSBodWdlIHBhZ2Ugc2l6ZSAqLworCWlmICho dWdlX3BhZ2VzX3N0YXR1cyA9PSBIVUdFX1BBR0VTX09OKQorCQlHZXRIdWdlUGFnZVNpemUoJm9z X3BhZ2Vfc2l6ZSwgTlVMTCk7CisKKwlyZXR1cm4gb3NfcGFnZV9zaXplOworfQorCisvKgorICog UEdTaGFyZWRNZW1vcnlFbnN1cmVGcmVlZCAvIFBHU2hhcmVkTWVtb3J5RW5zdXJlQWxsb2NhdGVk CisgKgorICogTm90IHN1cHBvcnRlZCBvbiBXaW5kb3dzLiAgVGhlc2UgYXJlIG9ubHkgbWVhbmlu Z2Z1bCBvbiBwbGF0Zm9ybXMgd2l0aAorICogcmVzaXphYmxlIHNoYXJlZCBtZW1vcnkgKG1tYXAg KyBtYWR2aXNlKS4KKyAqLwordm9pZAorUEdTaGFyZWRNZW1vcnlFbnN1cmVGcmVlZCh2b2lkICph ZGRyLCBTaXplIHNpemUpCit7CisJZXJlcG9ydChFUlJPUiwKKwkJCShlcnJjb2RlKEVSUkNPREVf RkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCSBlcnJtc2coInJlc2l6YWJsZSBzaGFyZWQgbWVt b3J5IGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSIpKSk7Cit9CisKK3ZvaWQKK1BH U2hhcmVkTWVtb3J5RW5zdXJlQWxsb2NhdGVkKHZvaWQgKmFkZHIsIFNpemUgc2l6ZSkKK3sKKwll cmVwb3J0KEVSUk9SLAorCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQp LAorCQkJIGVycm1zZygicmVzaXphYmxlIHNoYXJlZCBtZW1vcnkgaXMgbm90IHN1cHBvcnRlZCBv biB0aGlzIHBsYXRmb3JtIikpKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv aXBjL2lwY2kuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYwppbmRleCBiZjZiODFl NjIxYi4uNGM2ZWNlNTk4YjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lw Y2kuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMKQEAgLTE5Miw2ICsxOTIs MTcgQEAgSW5pdGlhbGl6ZVNobWVtR1VDcyh2b2lkKQogCVNpemUJCXNpemVfYjsKIAlTaXplCQlz aXplX21iOwogCVNpemUJCWhwX3NpemU7CisJYm9vbAkJaGF2ZV9yZXNpemFibGVfc2htZW07CisK KwkvKiBEb2VzIHRoaXMgc2VydmVyIHN1cHBvcnQgcmVzaXphYmxlIHNoYXJlZCBtZW1vcnk/ICov CisjaWZkZWYgSEFWRV9SRVNJWkFCTEVfU0hNRU0KKwloYXZlX3Jlc2l6YWJsZV9zaG1lbSA9IChz aGFyZWRfbWVtb3J5X3R5cGUgPT0gU0hNRU1fVFlQRV9NTUFQKTsKKyNlbHNlCisJaGF2ZV9yZXNp emFibGVfc2htZW0gPSBmYWxzZTsKKyNlbmRpZgorCVNldENvbmZpZ09wdGlvbigiaGF2ZV9yZXNp emFibGVfc2hhcmVkX21lbW9yeSIsCisJCQkJCWhhdmVfcmVzaXphYmxlX3NobWVtID8gIm9uIiA6 ICJvZmYiLAorCQkJCQlQR0NfSU5URVJOQUwsIFBHQ19TX0RZTkFNSUNfREVGQVVMVCk7CiAKIAkv KgogCSAqIENhbGN1bGF0ZSB0aGUgc2hhcmVkIG1lbW9yeSBzaXplIGFuZCByb3VuZCB1cCB0byB0 aGUgbmVhcmVzdCBtZWdhYnl0ZS4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBj L3NobWVtLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5jCmluZGV4IDFlYmZmZTVh MzJhLi44ZjAwNjk2Nzc5MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2ht ZW0uYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5jCkBAIC0xOSwxMSArMTks MTEgQEAKICAqIG1ldGhvZHMpLiAgVGhlIHJvdXRpbmVzIGluIHRoaXMgZmlsZSBhcmUgdXNlZCBm b3IgYWxsb2NhdGluZyBhbmQKICAqIGJpbmRpbmcgdG8gc2hhcmVkIG1lbW9yeSBkYXRhIHN0cnVj dHVyZXMuCiAgKgotICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgZmFjaWxpdGllcyB0byBhbGxvY2F0 ZSBmaXhlZC1zaXplIHN0cnVjdHVyZXMgaW4gc2hhcmVkCi0gKiBtZW1vcnksIGZvciB0aGluZ3Mg bGlrZSB2YXJpYWJsZXMgc2hhcmVkIGJldHdlZW4gYWxsIGJhY2tlbmQgcHJvY2Vzc2VzLgotICog RWFjaCBzdWNoIHN0cnVjdHVyZSBoYXMgYSBzdHJpbmcgbmFtZSB0byBpZGVudGlmeSBpdCwgc3Bl Y2lmaWVkIHdoZW4gaXQgaXMKLSAqIHJlcXVlc3RlZC4gIHNobWVtX2hhc2guYyBwcm92aWRlcyBh IHNoYXJlZCBoYXNoIHRhYmxlIGltcGxlbWVudGF0aW9uIG9uIHRvcAotICogb2YgdGhhdC4KKyAq IFRoaXMgbW9kdWxlIHByb3ZpZGVzIGZhY2lsaXRpZXMgdG8gYWxsb2NhdGUgZml4ZWQtc2l6ZSBh cyB3ZWxsIGFzIHJlc2l6YWJsZQorICogc3RydWN0dXJlcyBpbiBzaGFyZWQgbWVtb3J5LCBmb3Ig dGhpbmdzIGxpa2UgdmFyaWFibGVzIHNoYXJlZCBiZXR3ZWVuIGFsbAorICogYmFja2VuZCBwcm9j ZXNzZXMuIEVhY2ggc3VjaCBzdHJ1Y3R1cmUgaGFzIGEgc3RyaW5nIG5hbWUgdG8gaWRlbnRpZnkg aXQsCisgKiBzcGVjaWZpZWQgd2hlbiBpdCBpcyByZXF1ZXN0ZWQuICBzaG1lbV9oYXNoLmMgcHJv dmlkZXMgYSBzaGFyZWQgaGFzaCB0YWJsZQorICogaW1wbGVtZW50YXRpb24gb24gdG9wIG9mIGZp eGVkLXNpemUgc3RydWN0dXJlcy4KICAqCiAgKiBTaGFyZWQgbWVtb3J5IGFyZWFzIHNob3VsZCB1 c3VhbGx5IG5vdCBiZSBhbGxvY2F0ZWQgYWZ0ZXIgcG9zdG1hc3RlcgogICogc3RhcnR1cCwgYWx0 aG91Z2ggd2UgZG8gYWxsb3cgc21hbGwgYWxsb2NhdGlvbnMgbGF0ZXIgZm9yIHRoZSBiZW5lZml0 IG9mCkBAIC0xMDIsNiArMTAyLDI0IEBACiAgKiAoKm9wdGlvbnMtPnB0ciksIGFuZCBjYWxscyB0 aGUgYXR0YWNoX2ZuIGNhbGxiYWNrLCBpZiBhbnksIGZvciBhZGRpdGlvbmFsCiAgKiBwZXItYmFj a2VuZCBzZXR1cC4KICAqCisgKiBSZXNpemFibGUgc2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmVzCisg KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogSW4gb3JkZXIgdG8g YWxsb2NhdGUgcmVzaXphYmxlIHNoYXJlZCBtZW1vcnkgc3RydWN0dXJlcywgc2V0CisgKiBTaG1l bVJlcXVlc3RTdHJ1Y3RPcHRzOjptYXhpbXVtX3NpemUgdG8gdGhlIG1heGltdW0gc2l6ZSB0aGF0 IHRoZSBzdHJ1Y3R1cmUKKyAqIGNhbiBncm93IHRvLiAgVGhlIGFkZHJlc3Mgc3BhY2UgZm9yIHRo ZSBtYXhpbXVtIHNpemUgd2lsbCBiZSByZXNlcnZlZCBhdAorICogc3RhcnR1cCwgYnV0IG1lbW9y eSBpcyBhbGxvY2F0ZWQgb3IgZnJlZWQgYXMgdGhlIHN0cnVjdHVyZSBncm93cyBvciBzaHJpbmtz CisgKiByZXNwZWN0aXZlbHkuIFNobWVtUmVxdWVzdFN0cnVjdE9wdHM6OnNpemUgc2hvdWxkIGJl IHNldCB0byB0aGUgaW5pdGlhbCBzaXplCisgKiBvZiB0aGUgc3RydWN0dXJlLCB3aGljaCBpcyB0 aGUgYW1vdW50IG9mIG1lbW9yeSBhbGxvY2F0ZWQgYXQgdGhlIHN0YXJ0dXAuCisgKiBPcHRpb25h bGx5LCBTaG1lbVJlcXVlc3RTdHJ1Y3RPcHRzOjptaW5pbXVtX3NpemUgY2FuIGJlIHNldCB0byB0 aGUgbWluaW11bQorICogc2l6ZSB0aGF0IHRoZSBzdHJ1Y3R1cmUgY2FuIHNocmluayB0by4gQWZ0 ZXIgc3RhcnR1cCwgdGhlIHN0cnVjdHVyZSBjYW4gYmUKKyAqIHJlc2l6ZWQgYnkgY2FsbGluZyBT aG1lbVJlc2l6ZVN0cnVjdCgpIGJ5IHBhc3NpbmcgaXQgdGhlIFNobWVtU3RydWN0RGVzYyBmb3IK KyAqIHRoZSBzdHJ1Y3R1cmUgYW5kIHRoZSBuZXcgc2l6ZS4gU2htZW1SZXNpemVTdHJ1Y3QoKSBl bmZvcmNlcyB0aGF0IHRoZSBuZXcKKyAqIHNpemUgaXMgd2l0aGluIFttaW5pbXVtX3NpemUsIG1h eGltdW1fc2l6ZV0uCisgKgorICogV2hpbGUgcmVzaXphYmxlIHN0cnVjdHVyZXMgY2FuIGJlIGNy ZWF0ZWQgYWZ0ZXIgdGhlIHN0YXJ0dXAsIHRoZSBtZW1vcnkKKyAqIGF2YWlsYWJsZSBmb3IgdGhl bSBpcyBxdWl0ZSBsaW1pdGVkLgorICoKICAqIExlZ2FjeSBTaG1lbUluaXRTdHJ1Y3QoKS9TaG1l bUluaXRIYXNoKCkgZnVuY3Rpb25zCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogICoKQEAgLTE2Nyw2ICsxODUsMTYgQEAgdHlwZWRlZiBzdHJ1 Y3QKIAlTaG1lbVJlcXVlc3RLaW5kIGtpbmQ7CiB9IFNobWVtUmVxdWVzdDsKIAorLyoKKyAqIEEg Y29udmVuaWVudCBtYWNybyB0byBnZXQgdGhlIHNwYWNlIHJlcXVpcmVkIGZvciBhIHNobWVtIHJl cXVlc3QgY29uc2lzdGVudGx5LgorICogQSByZXNpemFibGUgc3RydWN0dXJlLCByZXF1ZXN0ZWQg Ynkgbm9uLXplcm8gbWF4aW11bV9zaXplLCByZXF1aXJlcyBzcGFjZSBmb3IKKyAqIGl0cyBtYXhp bXVtIHNpemUuIFBsZWFzZSBub3RlIHRoYXQgb24gdGhlIHBsYXRmb3JtcyB0aGF0IGRvIG5vdCBz dXBwb3J0CisgKiByZXNpemFibGUgc2htZW0sIHRoZSBtYXhpbXVtX3NpemUgaXMgZW5zdXJlZCB0 byBiZSAwIGkuZS4gYWxsIHRoZSBzdHJ1Y3R1cmVzCisgKiBhcmUgdHJlYXRlZCBhcyBmaXhlZC1z aXplIHN0cnVjdHVyZXMuCisgKi8KKyNkZWZpbmUgU0hNRU1fUkVRVUVTVF9TUEFDRV9TSVpFKHJl cXVlc3QpIFwKKwkoKHJlcXVlc3QpLT5vcHRpb25zLT5tYXhpbXVtX3NpemUgPiAwID8gKHJlcXVl c3QpLT5vcHRpb25zLT5tYXhpbXVtX3NpemUgOiAocmVxdWVzdCktPm9wdGlvbnMtPnNpemUpCisK IHN0YXRpYyBMaXN0ICpwZW5kaW5nX3NobWVtX3JlcXVlc3RzOwogCiAvKgpAQCAtMjY5LDYgKzI5 NywxMCBAQCB0eXBlZGVmIHN0cnVjdAogCXZvaWQJICAgKmxvY2F0aW9uOwkJLyogbG9jYXRpb24g aW4gc2hhcmVkIG1lbSAqLwogCVNpemUJCXNpemU7CQkJLyogIyBieXRlcyByZXF1ZXN0ZWQgZm9y IHRoZSBzdHJ1Y3R1cmUgKi8KIAlTaXplCQlhbGxvY2F0ZWRfc2l6ZTsgLyogIyBieXRlcyBhY3R1 YWxseSBhbGxvY2F0ZWQgKi8KKwlTaXplCQltaW5pbXVtX3NpemU7CS8qIHRoZSBtaW5pbXVtIHNp emUgdGhlIHN0cnVjdHVyZSBjYW4gc2hyaW5rCisJCQkJCQkJCSAqIHRvICovCisJU2l6ZQkJbWF4 aW11bV9zaXplOwkvKiB0aGUgbWF4aW11bSBzaXplIHRoZSBzdHJ1Y3R1cmUgY2FuIGdyb3cgdG8g Ki8KKwlTaXplCQlyZXNlcnZlZF9zcGFjZTsgLyogdGhlIHRvdGFsIGFkZHJlc3Mgc3BhY2UgcmVz ZXJ2ZWQgKi8KIH0gU2htZW1JbmRleEVudDsKIAogLyogVG8gZ2V0IHJlbGlhYmxlIHJlc3VsdHMg Zm9yIE5VTUEgaW5xdWlyeSB3ZSBuZWVkIHRvICJ0b3VjaCBwYWdlcyIgb25jZSAqLwpAQCAtMjc3 LDYgKzMwOSw3IEBAIHN0YXRpYyBib29sIGZpcnN0TnVtYVRvdWNoID0gdHJ1ZTsKIHN0YXRpYyB2 b2lkIENhbGxTaG1lbUNhbGxiYWNrc0FmdGVyU3RhcnR1cChjb25zdCBTaG1lbUNhbGxiYWNrcyAq Y2FsbGJhY2tzKTsKIHN0YXRpYyB2b2lkIEluaXRTaG1lbUluZGV4RW50cnkoU2htZW1SZXF1ZXN0 ICpyZXF1ZXN0KTsKIHN0YXRpYyBib29sIEF0dGFjaFNobWVtSW5kZXhFbnRyeShTaG1lbVJlcXVl c3QgKnJlcXVlc3QsIGJvb2wgbWlzc2luZ19vayk7CitzdGF0aWMgU2l6ZSBFc3RpbWF0ZUFsbG9j YXRlZFNpemUoU2htZW1JbmRleEVudCAqZW50cnkpOwogCiBEYXR1bQkJcGdfbnVtYV9hdmFpbGFi bGUoUEdfRlVOQ1RJT05fQVJHUyk7CiAKQEAgLTM0MiwxMSArMzc1LDI1IEBAIFNobWVtUmVxdWVz dEludGVybmFsKFNobWVtU3RydWN0T3B0cyAqb3B0aW9ucywgU2htZW1SZXF1ZXN0S2luZCBraW5k KQogCWlmIChvcHRpb25zLT5uYW1lID09IE5VTEwpCiAJCWVsb2coRVJST1IsICJzaGFyZWQgbWVt b3J5IHJlcXVlc3QgaXMgbWlzc2luZyAnbmFtZScgb3B0aW9uIik7CiAKKyNpZm5kZWYgSEFWRV9S RVNJWkFCTEVfU0hNRU0KKwlpZiAob3B0aW9ucy0+bWF4aW11bV9zaXplID4gMCkKKwkJZWxvZyhF UlJPUiwgInJlc2l6YWJsZSBzaGFyZWQgbWVtb3J5IGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBw bGF0Zm9ybSIpOworI2Vsc2UKKwlpZiAob3B0aW9ucy0+bWF4aW11bV9zaXplID4gMCAmJiBzaGFy ZWRfbWVtb3J5X3R5cGUgIT0gU0hNRU1fVFlQRV9NTUFQKQorCQllbG9nKEVSUk9SLCAicmVzaXph YmxlIHNoYXJlZCBtZW1vcnkgcmVxdWlyZXMgc2hhcmVkX21lbW9yeV90eXBlID0gbW1hcCIpOwor I2VuZGlmCisKIAlpZiAoSXNVbmRlclBvc3RtYXN0ZXIpCiAJewogCQlpZiAob3B0aW9ucy0+c2l6 ZSA8PSAwICYmIG9wdGlvbnMtPnNpemUgIT0gU0hNRU1fQVRUQUNIX1VOS05PV05fU0laRSkKIAkJ CWVsb2coRVJST1IsICJpbnZhbGlkIHNpemUgJXpkIGZvciBzaGFyZWQgbWVtb3J5IHJlcXVlc3Qg Zm9yIFwiJXNcIiIsCiAJCQkJIG9wdGlvbnMtPnNpemUsIG9wdGlvbnMtPm5hbWUpOworCQlpZiAo b3B0aW9ucy0+bWluaW11bV9zaXplIDwgMCAmJiBvcHRpb25zLT5taW5pbXVtX3NpemUgIT0gU0hN RU1fQVRUQUNIX1VOS05PV05fU0laRSkKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIG1pbmltdW1f c2l6ZSAlemQgZm9yIHNoYXJlZCBtZW1vcnkgcmVxdWVzdCBmb3IgXCIlc1wiIiwKKwkJCQkgb3B0 aW9ucy0+bWluaW11bV9zaXplLCBvcHRpb25zLT5uYW1lKTsKKwkJaWYgKG9wdGlvbnMtPm1heGlt dW1fc2l6ZSA8IDAgJiYgb3B0aW9ucy0+bWF4aW11bV9zaXplICE9IFNITUVNX0FUVEFDSF9VTktO T1dOX1NJWkUpCisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBtYXhpbXVtX3NpemUgJXpkIGZvciBz aGFyZWQgbWVtb3J5IHJlcXVlc3QgZm9yIFwiJXNcIiIsCisJCQkJIG9wdGlvbnMtPm1heGltdW1f c2l6ZSwgb3B0aW9ucy0+bmFtZSk7CiAJfQogCWVsc2UKIAl7CkBAIC0zNTUsMTIgKzQwMiwzNiBA QCBTaG1lbVJlcXVlc3RJbnRlcm5hbChTaG1lbVN0cnVjdE9wdHMgKm9wdGlvbnMsIFNobWVtUmVx dWVzdEtpbmQga2luZCkKIAkJaWYgKG9wdGlvbnMtPnNpemUgPD0gMCkKIAkJCWVsb2coRVJST1Is ICJpbnZhbGlkIHNpemUgJXpkIGZvciBzaGFyZWQgbWVtb3J5IHJlcXVlc3QgZm9yIFwiJXNcIiIs CiAJCQkJIG9wdGlvbnMtPnNpemUsIG9wdGlvbnMtPm5hbWUpOworCQlpZiAob3B0aW9ucy0+bWlu aW11bV9zaXplID09IFNITUVNX0FUVEFDSF9VTktOT1dOX1NJWkUpCisJCQllbG9nKEVSUk9SLCAi U0hNRU1fQVRUQUNIX1VOS05PV05fU0laRSBjYW5ub3QgYmUgdXNlZCBkdXJpbmcgc3RhcnR1cCIp OworCQlpZiAob3B0aW9ucy0+bWluaW11bV9zaXplIDwgMCkKKwkJCWVsb2coRVJST1IsICJpbnZh bGlkIG1pbmltdW1fc2l6ZSAlemQgZm9yIHNoYXJlZCBtZW1vcnkgcmVxdWVzdCBmb3IgXCIlc1wi IiwKKwkJCQkgb3B0aW9ucy0+bWluaW11bV9zaXplLCBvcHRpb25zLT5uYW1lKTsKKwkJaWYgKG9w dGlvbnMtPm1heGltdW1fc2l6ZSA9PSBTSE1FTV9BVFRBQ0hfVU5LTk9XTl9TSVpFKQorCQkJZWxv ZyhFUlJPUiwgIlNITUVNX0FUVEFDSF9VTktOT1dOX1NJWkUgY2Fubm90IGJlIHVzZWQgZHVyaW5n IHN0YXJ0dXAiKTsKKwkJaWYgKG9wdGlvbnMtPm1heGltdW1fc2l6ZSA8IDApCisJCQllbG9nKEVS Uk9SLCAiaW52YWxpZCBtYXhpbXVtX3NpemUgJXpkIGZvciBzaGFyZWQgbWVtb3J5IHJlcXVlc3Qg Zm9yIFwiJXNcIiIsCisJCQkJIG9wdGlvbnMtPm1heGltdW1fc2l6ZSwgb3B0aW9ucy0+bmFtZSk7 CiAJfQogCiAJaWYgKG9wdGlvbnMtPmFsaWdubWVudCAhPSAwICYmIHBnX25leHRwb3dlcjJfc2l6 ZV90KG9wdGlvbnMtPmFsaWdubWVudCkgIT0gb3B0aW9ucy0+YWxpZ25tZW50KQogCQllbG9nKEVS Uk9SLCAiaW52YWxpZCBhbGlnbm1lbnQgJXp1IGZvciBzaGFyZWQgbWVtb3J5IHJlcXVlc3QgZm9y IFwiJXNcIiIsCiAJCQkgb3B0aW9ucy0+YWxpZ25tZW50LCBvcHRpb25zLT5uYW1lKTsKIAorCWlm IChvcHRpb25zLT5taW5pbXVtX3NpemUgPiAwICYmIG9wdGlvbnMtPnNpemUgIT0gU0hNRU1fQVRU QUNIX1VOS05PV05fU0laRSAmJgorCQlvcHRpb25zLT5taW5pbXVtX3NpemUgPiBvcHRpb25zLT5z aXplKQorCQllbG9nKEVSUk9SLCAicmVzaXphYmxlIHNoYXJlZCBtZW1vcnkgc3RydWN0dXJlIFwi JXNcIiBzaG91bGQgaGF2ZSBtaW5pbXVtIHNpemUgKCV6ZCkgbGVzcyB0aGFuIG9yIGVxdWFsIHRv IHNpemUgKCV6ZCkiLAorCQkJIG9wdGlvbnMtPm5hbWUsIG9wdGlvbnMtPm1pbmltdW1fc2l6ZSwg b3B0aW9ucy0+c2l6ZSk7CisKKwlpZiAob3B0aW9ucy0+bWF4aW11bV9zaXplID4gMCAmJiBvcHRp b25zLT5zaXplID4gb3B0aW9ucy0+bWF4aW11bV9zaXplKQorCQllbG9nKEVSUk9SLCAicmVzaXph YmxlIHNoYXJlZCBtZW1vcnkgc3RydWN0dXJlIFwiJXNcIiBzaG91bGQgaGF2ZSBtYXhpbXVtIHNp emUgKCV6ZCkgZ3JlYXRlciB0aGFuIHNpemUgKCV6ZCkiLAorCQkJIG9wdGlvbnMtPm5hbWUsIG9w dGlvbnMtPm1heGltdW1fc2l6ZSwgb3B0aW9ucy0+c2l6ZSk7CisKKwlpZiAob3B0aW9ucy0+bWlu aW11bV9zaXplID4gMCAmJiBvcHRpb25zLT5tYXhpbXVtX3NpemUgPiAwICYmCisJCW9wdGlvbnMt Pm1pbmltdW1fc2l6ZSA+IG9wdGlvbnMtPm1heGltdW1fc2l6ZSkKKwkJZWxvZyhFUlJPUiwgInJl c2l6YWJsZSBzaGFyZWQgbWVtb3J5IHN0cnVjdHVyZSBcIiVzXCIgc2hvdWxkIGhhdmUgbWluaW11 bSBzaXplICglemQpIGxlc3MgdGhhbiBvciBlcXVhbCB0byBtYXhpbXVtIHNpemUgKCV6ZCkiLAor CQkJIG9wdGlvbnMtPm5hbWUsIG9wdGlvbnMtPm1pbmltdW1fc2l6ZSwgb3B0aW9ucy0+bWF4aW11 bV9zaXplKTsKKwogCS8qIENoZWNrIHRoYXQgd2UncmUgaW4gdGhlIHJpZ2h0IHN0YXRlICovCiAJ aWYgKHNobWVtX3JlcXVlc3Rfc3RhdGUgIT0gU1JTX1JFUVVFU1RJTkcpCiAJCWVsb2coRVJST1Is ICJTaG1lbVJlcXVlc3RTdHJ1Y3QgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gYSBzaG1lbV9yZXF1 ZXN0IGNhbGxiYWNrIik7CkBAIC0zODIsOCArNDUzLDggQEAgU2htZW1SZXF1ZXN0SW50ZXJuYWwo U2htZW1TdHJ1Y3RPcHRzICpvcHRpb25zLCBTaG1lbVJlcXVlc3RLaW5kIGtpbmQpCiB9CiAKIC8q Ci0gKglTaG1lbUdldFJlcXVlc3RlZFNpemUoKSAtLS0gZXN0aW1hdGUgdGhlIHRvdGFsIHNpemUg b2YgYWxsIHJlZ2lzdGVyZWQgc2hhcmVkCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG1lbW9yeSBzdHJ1Y3R1cmVzLgorICogU2htZW1HZXRSZXF1ZXN0ZWRTaXplKCkgLS0tIGVzdGlt YXRlIHRoZSB0b3RhbCBzaXplIG9mIGFsbCByZWdpc3RlcmVkIHNoYXJlZAorICogbWVtb3J5IHN0 cnVjdHVyZXMuCiAgKgogICogVGhpcyBpcyBjYWxsZWQgYXQgcG9zdG1hc3RlciBzdGFydHVwLCBi ZWZvcmUgdGhlIHNoYXJlZCBtZW1vcnkgc2VnbWVudCBoYXMKICAqIGJlZW4gY3JlYXRlZC4KQEAg LTQwOCw3ICs0NzksNyBAQCBTaG1lbUdldFJlcXVlc3RlZFNpemUodm9pZCkKIAkJCWFsaWdubWVu dCA9IFBHX0NBQ0hFX0xJTkVfU0laRTsKIAkJc2l6ZSA9IFRZUEVBTElHTihhbGlnbm1lbnQsIHNp emUpOwogCi0JCXNpemUgPSBhZGRfc2l6ZShzaXplLCByZXF1ZXN0LT5vcHRpb25zLT5zaXplKTsK KwkJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFNITUVNX1JFUVVFU1RfU1BBQ0VfU0laRShyZXF1ZXN0 KSk7CiAJfQogCiAJcmV0dXJuIHNpemU7CkBAIC01MTUsNiArNTg2LDcgQEAgSW5pdFNobWVtSW5k ZXhFbnRyeShTaG1lbVJlcXVlc3QgKnJlcXVlc3QpCiAJU2htZW1JbmRleEVudCAqaW5kZXhfZW50 cnk7CiAJYm9vbAkJZm91bmQ7CiAJc2l6ZV90CQlhbGxvY2F0ZWRfc2l6ZTsKKwlzaXplX3QJCXJl cXVlc3RlZF9zaXplOwogCXZvaWQJICAgKnN0cnVjdFB0cjsKIAogCS8qIGxvb2sgaXQgdXAgaW4g dGhlIHNobWVtIGluZGV4ICovCkBAIC01MzIsMTAgKzYwNCwxOCBAQCBJbml0U2htZW1JbmRleEVu dHJ5KFNobWVtUmVxdWVzdCAqcmVxdWVzdCkKIAl9CiAKIAkvKgotCSAqIFdlIGluc2VydGVkIHRo ZSBlbnRyeSB0byB0aGUgc2hhcmVkIG1lbW9yeSBpbmRleC4gIEFsbG9jYXRlIHJlcXVlc3RlZAot CSAqIGFtb3VudCBvZiBzaGFyZWQgbWVtb3J5IGZvciBpdCwgYW5kIGluaXRpYWxpemUgdGhlIGlu ZGV4IGVudHJ5LgorCSAqIFdlIGluc2VydGVkIHRoZSBlbnRyeSB0byB0aGUgc2hhcmVkIG1lbW9y eSBpbmRleC4gQWxsb2NhdGUgcmVxdWVzdGVkCisJICogYW1vdW50IG9mIGFkZHJlc3Mgc3BhY2Ug aW4gdGhlIHNoYXJlZCBtZW1vcnkgc2VnbWVudCBmb3IgaXQsIGFuZCBkbworCSAqIGJhc2ljIGlu aXRpYWxpemlvbi4gVGhlIG1lbW9yeSBnZXRzIGFsbG9jYXRlZCBkdXJpbmcgaW5pdGlhbGl6YXRp b24gYXMKKwkgKiB0aGUgY29ycmVzcG9uZGluZyBtZW1vcnkgcGFnZXMgYXJlIHdyaXR0ZW4gdG8u ICBBbGxvY2F0ZSBlbm91Z2ggc3BhY2UKKwkgKiBmb3IgYSByZXNpemFibGUgc3RydWN0dXJlIHRv IGdyb3cgdG8gaXRzIG1heGltdW0gc2l6ZS4gSXQgaXMgZXhwZWN0ZWQKKwkgKiB0aGF0IHRoZSBp bml0aWFsaXphdGlvbiBjYWxsYmFjayB3aWxsIHVzZSBvbmx5IGFzIG11Y2ggbWVtb3J5IGFzIHRo ZQorCSAqIGluaXRpYWwgc2l6ZSBvZiB0aGUgcmVzaXphYmxlIHN0cnVjdHVyZS4gKFdlbGwsIGlm IGl0IGRvZXNuJ3QsIG1vcmUKKwkgKiBtZW1vcnkgd2lsbCBiZSBhbGxvY2F0ZWQgaW5pdGlhbGx5 IHRoYW4gZXhwZWN0ZWQsIG5vIGZ1cnRoZXIgaGFybSBpcworCSAqIGRvbmUuKQogCSAqLwotCXN0 cnVjdFB0ciA9IFNobWVtQWxsb2NSYXcocmVxdWVzdC0+b3B0aW9ucy0+c2l6ZSwKKwlyZXF1ZXN0 ZWRfc2l6ZSA9IFNITUVNX1JFUVVFU1RfU1BBQ0VfU0laRShyZXF1ZXN0KTsKKwlzdHJ1Y3RQdHIg PSBTaG1lbUFsbG9jUmF3KHJlcXVlc3RlZF9zaXplLAogCQkJCQkJCSAgcmVxdWVzdC0+b3B0aW9u cy0+YWxpZ25tZW50LAogCQkJCQkJCSAgJmFsbG9jYXRlZF9zaXplKTsKIAlpZiAoc3RydWN0UHRy ID09IE5VTEwpCkBAIC01NDQsMTMgKzYyNCwyNyBAQCBJbml0U2htZW1JbmRleEVudHJ5KFNobWVt UmVxdWVzdCAqcmVxdWVzdCkKIAkJaGFzaF9zZWFyY2goU2htZW1JbmRleCwgbmFtZSwgSEFTSF9S RU1PVkUsIE5VTEwpOwogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfT1VU X09GX01FTU9SWSksCi0JCQkJIGVycm1zZygibm90IGVub3VnaCBzaGFyZWQgbWVtb3J5IGZvciBk YXRhIHN0cnVjdHVyZSIKKwkJCQkgZXJybXNnKCJub3QgZW5vdWdoIHNoYXJlZCBtZW1vcnkgc3Bh Y2UgZm9yIGRhdGEgc3RydWN0dXJlIgogCQkJCQkJIiBcIiVzXCIgKCV6dSBieXRlcyByZXF1ZXN0 ZWQpIiwKLQkJCQkJCW5hbWUsIHJlcXVlc3QtPm9wdGlvbnMtPnNpemUpKSk7CisJCQkJCQluYW1l LCByZXF1ZXN0ZWRfc2l6ZSkpKTsKIAl9CiAJaW5kZXhfZW50cnktPnNpemUgPSByZXF1ZXN0LT5v cHRpb25zLT5zaXplOwogCWluZGV4X2VudHJ5LT5hbGxvY2F0ZWRfc2l6ZSA9IGFsbG9jYXRlZF9z aXplOwogCWluZGV4X2VudHJ5LT5sb2NhdGlvbiA9IHN0cnVjdFB0cjsKKwlpbmRleF9lbnRyeS0+ cmVzZXJ2ZWRfc3BhY2UgPSBhbGxvY2F0ZWRfc2l6ZTsKKwlpZiAocmVxdWVzdC0+b3B0aW9ucy0+ bWF4aW11bV9zaXplID4gMCkKKwl7CisJCWluZGV4X2VudHJ5LT5taW5pbXVtX3NpemUgPSByZXF1 ZXN0LT5vcHRpb25zLT5taW5pbXVtX3NpemU7CisJCWluZGV4X2VudHJ5LT5tYXhpbXVtX3NpemUg PSByZXF1ZXN0LT5vcHRpb25zLT5tYXhpbXVtX3NpemU7CisKKwkJLyogQWRqdXN0IGFsbG9jYXRl ZCBzaXplIG9mIGEgcmVzaXphYmxlIHN0cnVjdHVyZS4gKi8KKwkJaW5kZXhfZW50cnktPmFsbG9j YXRlZF9zaXplID0gRXN0aW1hdGVBbGxvY2F0ZWRTaXplKGluZGV4X2VudHJ5KTsKKwl9CisJZWxz ZQorCXsKKwkJaW5kZXhfZW50cnktPm1pbmltdW1fc2l6ZSA9IHJlcXVlc3QtPm9wdGlvbnMtPnNp emU7CisJCWluZGV4X2VudHJ5LT5tYXhpbXVtX3NpemUgPSByZXF1ZXN0LT5vcHRpb25zLT5zaXpl OworCX0KIAogCS8qIEluaXRpYWxpemUgZGVwZW5kaW5nIG9uIHRoZSBraW5kIG9mIHNobWVtIGFy ZWEgaXQgaXMgKi8KIAlzd2l0Y2ggKHJlcXVlc3QtPmtpbmQpCkBAIC01OTUsNyArNjg5LDcgQEAg QXR0YWNoU2htZW1JbmRleEVudHJ5KFNobWVtUmVxdWVzdCAqcmVxdWVzdCwgYm9vbCBtaXNzaW5n X29rKQogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JLyogQ2hlY2sgdGhhdCB0aGUgc2l6ZSBpbiB0 aGUgaW5kZXggbWF0Y2hlcyB0aGUgcmVxdWVzdCAqLworCS8qIENoZWNrIHRoYXQgdGhlIHNpemVz IGluIHRoZSBpbmRleCBtYXRjaCB0aGUgcmVxdWVzdC4gKi8KIAlpZiAoaW5kZXhfZW50cnktPnNp emUgIT0gcmVxdWVzdC0+b3B0aW9ucy0+c2l6ZSAmJgogCQlyZXF1ZXN0LT5vcHRpb25zLT5zaXpl ICE9IFNITUVNX0FUVEFDSF9VTktOT1dOX1NJWkUpCiAJewpAQCAtNjA1LDYgKzY5OSw0MCBAQCBB dHRhY2hTaG1lbUluZGV4RW50cnkoU2htZW1SZXF1ZXN0ICpyZXF1ZXN0LCBib29sIG1pc3Npbmdf b2spCiAJCQkJCQluYW1lLCBpbmRleF9lbnRyeS0+c2l6ZSwgcmVxdWVzdC0+b3B0aW9ucy0+c2l6 ZSkpKTsKIAl9CiAKKwkvKgorCSAqIEZvciByZXNpemFibGUgc3RydWN0dXJlcywgYWxzbyBjaGVj ayB0aGF0IG1pbmltdW1fc2l6ZSBhbmQgbWF4aW11bV9zaXplCisJICogbWF0Y2guIEZvciBmaXhl ZC1zaXplIHN0cnVjdHVyZXMsIHRoZXNlIGFyZSBkZXJpdmVkIChzZXQgdG8gc2l6ZSkgaW4KKwkg KiB0aGUgaW5kZXggZW50cnkgYW5kIG5vdCBtZWFuaW5nZnVsIGluIHRoZSByZXF1ZXN0LgorCSAq LworCWlmIChyZXF1ZXN0LT5vcHRpb25zLT5tYXhpbXVtX3NpemUgIT0gMCkKKwl7CisJCWlmIChp bmRleF9lbnRyeS0+bWluaW11bV9zaXplICE9IHJlcXVlc3QtPm9wdGlvbnMtPm1pbmltdW1fc2l6 ZSAmJgorCQkJcmVxdWVzdC0+b3B0aW9ucy0+bWluaW11bV9zaXplICE9IFNITUVNX0FUVEFDSF9V TktOT1dOX1NJWkUpCisJCXsKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJtc2coInNoYXJl ZCBtZW1vcnkgc3RydWN0IFwiJXNcIiB3YXMgY3JlYXRlZCB3aXRoIgorCQkJCQkJCSIgZGlmZmVy ZW50IG1pbmltdW1fc2l6ZTogZXhpc3RpbmcgJXp1LCByZXF1ZXN0ZWQgJXp1IiwKKwkJCQkJCQlu YW1lLCBpbmRleF9lbnRyeS0+bWluaW11bV9zaXplLAorCQkJCQkJCXJlcXVlc3QtPm9wdGlvbnMt Pm1pbmltdW1fc2l6ZSkpKTsKKwkJfQorCisJCWlmIChpbmRleF9lbnRyeS0+bWF4aW11bV9zaXpl ICE9IHJlcXVlc3QtPm9wdGlvbnMtPm1heGltdW1fc2l6ZSAmJgorCQkJcmVxdWVzdC0+b3B0aW9u cy0+bWF4aW11bV9zaXplICE9IFNITUVNX0FUVEFDSF9VTktOT1dOX1NJWkUpCisJCXsKKwkJCWVy ZXBvcnQoRVJST1IsCisJCQkJCShlcnJtc2coInNoYXJlZCBtZW1vcnkgc3RydWN0IFwiJXNcIiB3 YXMgY3JlYXRlZCB3aXRoIgorCQkJCQkJCSIgZGlmZmVyZW50IG1heGltdW1fc2l6ZTogZXhpc3Rp bmcgJXp1LCByZXF1ZXN0ZWQgJXp1IiwKKwkJCQkJCQluYW1lLCBpbmRleF9lbnRyeS0+bWF4aW11 bV9zaXplLAorCQkJCQkJCXJlcXVlc3QtPm9wdGlvbnMtPm1heGltdW1fc2l6ZSkpKTsKKwkJfQor CX0KKwllbHNlCisJeworCQlpZiAoaW5kZXhfZW50cnktPm1pbmltdW1fc2l6ZSAhPSBpbmRleF9l bnRyeS0+bWF4aW11bV9zaXplKQorCQkJZWxvZyhFUlJPUiwgInNoYXJlZCBtZW1vcnkgc3RydWN0 IFwiJXNcIiB3YXMgY3JlYXRlZCBhcyByZXNpemFibGUsIGJ1dCByZXF1ZXN0ZWQgYXMgZml4ZWQt c2l6ZSIsCisJCQkJIG5hbWUpOworCX0KKwogCS8qCiAJICogUmUtZXN0YWJsaXNoIHRoZSBjYWxs ZXIncyBwb2ludGVyIHZhcmlhYmxlLCBvciBkbyBvdGhlciBhY3Rpb25zIHRvCiAJICogYXR0YWNo IGRlcGVuZGluZyBvbiB0aGUga2luZCBvZiBzaG1lbSBhcmVhIGl0IGlzLgpAQCAtNjI2LDYgKzc1 NCwxMjcgQEAgQXR0YWNoU2htZW1JbmRleEVudHJ5KFNobWVtUmVxdWVzdCAqcmVxdWVzdCwgYm9v bCBtaXNzaW5nX29rKQogCXJldHVybiB0cnVlOwogfQogCisvKgorICogRXN0aW1hdGUgdGhlIGFj dHVhbCBtZW1vcnkgYWxsb2NhdGVkIGZvciBhIHJlc2l6YWJsZSBzdHJ1Y3R1cmUuCisgKgorICog Li4uIGJhc2VkIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIG1lbW9yeSBpcyBhbGxvY2F0ZWQg aW4gcGFnZXMuCisgKgorICogVGhlIG1lbW9yeSBwYWdlcyBjb3ZlcmVkIGJ5IHRoZSBjdXJyZW50 IHNpemUgb2YgYSByZXNpemFibGUgc3RydWN0dXJlIGFyZQorICogZnVsbHkgYWxsb2NhdGVkIHdo ZW4gdGhlIGN1cnJlbnRseSBhbGxvY2F0ZWQgcGFydCBvZiB0aGUgc3RydWN0dXJlIGlzIHdyaXR0 ZW4KKyAqIHRvLiBUaGUgbWVtb3J5IHBhZ2Ugd2hlcmUgdGhlIG1heGltYWwgc3RydWN0dXJlIGVu ZHMgYWxzbyBob3N0cyB0aGUgbmV4dAorICogc3RydWN0dXJlLCB1bmxlc3MgdGhlIG1heGltYWwg c3RydWN0dXJlIGVuZHMgb24gYSBwYWdlIGJvdW5kYXJ5LiBIZW5jZSB0aGF0CisgKiBwYWdlIGlz IGFsbG9jYXRlZCB3aGVuIHRoZSBuZXh0IHN0cnVjdHVyZSBpcyB3cml0dGVuIHRvLiBUaGUgbWVt b3J5IHBhZ2VzCisgKiBiZXR3ZWVuIHRoZSBwYWdlIHdoZXJlIHRoZSBjdXJyZW50IHN0cnVjdHVy ZSBlbmRzIGFuZCB0aGUgcGFnZSB3aGVyZSB0aGUgbmV4dAorICogc3RydWN0dXJlIHN0YXJ0cyBy ZW1haW4gdW5hbGxvY2F0ZWQuIFRodXMgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIGEKKyAqIHJl c2l6YWJsZSBzdHJ1Y3R1cmUgY2FuIGJlIGVzdGltYXRlZCBhcyB0aGUgdG90YWwgYWRkcmVzcyBz cGFjZSByZXNlcnZlZCBmb3IKKyAqIHRoZSBzdHJ1Y3R1cmUgbWludXMgdGhlIHVuYWxsb2NhdGVk IG1lbW9yeSBwYWdlcyBiZXR3ZWVuIHRoZSBjdXJyZW50IGVuZCBhbmQKKyAqIHRoZSBuZXh0IHN0 cnVjdHVyZS4KKyAqLworc3RhdGljIFNpemUKK0VzdGltYXRlQWxsb2NhdGVkU2l6ZShTaG1lbUlu ZGV4RW50ICplbnRyeSkKK3sKKwlTaXplCQlwYWdlX3NpemUgPSBHZXRPU1BhZ2VTaXplKCk7CisJ Y2hhcgkgICAqYWxpZ25fZW5kID0gKGNoYXIgKikgVFlQRUFMSUdOKHBhZ2Vfc2l6ZSwgKGNoYXIg KikgZW50cnktPmxvY2F0aW9uICsgZW50cnktPnNpemUpOworCWNoYXIJICAgKmZsb29yX21heF9l bmQgPSAoY2hhciAqKSBUWVBFQUxJR05fRE9XTihwYWdlX3NpemUsIChjaGFyICopIGVudHJ5LT5s b2NhdGlvbiArIGVudHJ5LT5tYXhpbXVtX3NpemUpOworCisJQXNzZXJ0KGVudHJ5LT5tYXhpbXVt X3NpemUgPj0gZW50cnktPnNpemUpOworCUFzc2VydChlbnRyeS0+cmVzZXJ2ZWRfc3BhY2UgPj0g ZW50cnktPm1heGltdW1fc2l6ZSk7CisKKwlpZiAoYWxpZ25fZW5kIDwgZmxvb3JfbWF4X2VuZCkK KwkJcmV0dXJuIGVudHJ5LT5yZXNlcnZlZF9zcGFjZSAtIChmbG9vcl9tYXhfZW5kIC0gYWxpZ25f ZW5kKTsKKworCXJldHVybiBlbnRyeS0+cmVzZXJ2ZWRfc3BhY2U7Cit9CisKKy8qCisgKiBTaG1l bVJlc2l6ZVN0cnVjdCgpIC0tLSByZXNpemUgYSByZXNpemFibGUgc2hhcmVkIG1lbW9yeSBzdHJ1 Y3R1cmUuCisgKgorICogVGhlIG5ldyBzaXplIG11c3QgYmUgd2l0aGluIFttaW5pbXVtX3NpemUs IG1heGltdW1fc2l6ZV0uICBJZiB0aGUgc3RydWN0dXJlCisgKiBpcyBiZWluZyBzaHJ1bmssIHRo ZSBtZW1vcnkgcGFnZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIG5lZWRlZCBhcmUgZnJlZWQuIElmCisg KiB0aGUgc3RydWN0dXJlIGlzIGJlaW5nIGV4cGFuZGVkLCB0aGUgbWVtb3J5IHBhZ2VzIHRoYXQg YXJlIG5lZWRlZCBmb3IgdGhlCisgKiBuZXcgc2l6ZSBhcmUgYWxsb2NhdGVkLiBTZWUgRXN0aW1h dGVBbGxvY2F0ZWRTaXplKCkgZm9yIGV4cGxhbmF0aW9uIG9mIHdoaWNoCisgKiBwYWdlcyBhcmUg YWxsb2NhdGVkIGZvciBhIHJlc2l6YWJsZSBzdHJ1Y3R1cmUuCisgKi8KK3ZvaWQKK1NobWVtUmVz aXplU3RydWN0KGNvbnN0IGNoYXIgKm5hbWUsIFNpemUgbmV3X3NpemUpCit7CisjaWZuZGVmIEhB VkVfUkVTSVpBQkxFX1NITUVNCisJZXJlcG9ydChFUlJPUiwKKwkJCShlcnJjb2RlKEVSUkNPREVf RkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCSBlcnJtc2coInJlc2l6YWJsZSBzaGFyZWQgbWVt b3J5IGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSIpKSk7CisjZWxzZQorCVNobWVt SW5kZXhFbnQgKnJlc3VsdDsKKwlib29sCQlmb3VuZDsKKwlTaXplCQlwYWdlX3NpemUgPSBHZXRP U1BhZ2VTaXplKCk7CisJY2hhcgkgICAqbmV3X2VuZDsKKworCUFzc2VydChuZXdfc2l6ZSA+IDAp OworCisJLyoKKwkgKiBSZXNpemFibGUgc2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmVzIGFyZSBvbmx5 IHN1cHBvcnRlZCB3aXRoIG1tYXAnZWQKKwkgKiBtZW1vcnkuCisJICovCisJQXNzZXJ0KHNoYXJl ZF9tZW1vcnlfdHlwZSA9PSBTSE1FTV9UWVBFX01NQVApOworCisJLyogbG9vayBpdCB1cCBpbiB0 aGUgc2htZW0gaW5kZXggKi8KKwlMV0xvY2tBY3F1aXJlKFNobWVtSW5kZXhMb2NrLCBMV19FWENM VVNJVkUpOworCXJlc3VsdCA9IChTaG1lbUluZGV4RW50ICopIGhhc2hfc2VhcmNoKFNobWVtSW5k ZXgsIG5hbWUsIEhBU0hfRklORCwgJmZvdW5kKTsKKwlpZiAoIWZvdW5kKQorCQllcmVwb3J0KEVS Uk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RB VEUpLAorCQkJCSBlcnJtc2coInNobWVtIHN0cnVjdCBcIiVzXCIgaXMgbm90IGluaXRpYWxpemVk IiwgbmFtZSkpKTsKKworCUFzc2VydChyZXN1bHQpOworCisJaWYgKHJlc3VsdC0+bWluaW11bV9z aXplID09IHJlc3VsdC0+bWF4aW11bV9zaXplKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJj b2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCSBlcnJt c2coInNoYXJlZCBtZW1vcnkgc3RydWN0IFwiJXNcIiBpcyBub3QgcmVzaXphYmxlIiwgbmFtZSkp KTsKKworCWlmIChuZXdfc2l6ZSA8IHJlc3VsdC0+bWluaW11bV9zaXplKQorCQllcmVwb3J0KEVS Uk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5TVUZGSUNJRU5UX1JFU09VUkNFUyksCisJCQkJ IGVycm1zZygiY2Fubm90IHNocmluayBzaGFyZWQgbWVtb3J5IHN0cnVjdHVyZSBcIiVzXCIgYmVs b3cgbWluaW11bSBzaXplIgorCQkJCQkJIiAocmVxdWVzdGVkICV6dSBieXRlcywgbWluaW11bSAl enUgYnl0ZXMpIiwKKwkJCQkJCW5hbWUsIG5ld19zaXplLCByZXN1bHQtPm1pbmltdW1fc2l6ZSkp KTsKKworCWlmIChyZXN1bHQtPm1heGltdW1fc2l6ZSA8IG5ld19zaXplKQorCQllcmVwb3J0KEVS Uk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5TVUZGSUNJRU5UX1JFU09VUkNFUyksCisJCQkJ IGVycm1zZygibm90IGVub3VnaCBhZGRyZXNzIHNwYWNlIGlzIHJlc2VydmVkIGZvciByZXNpemlu ZyBzdHJ1Y3R1cmUgXCIlc1wiIgorCQkJCQkJIihyZXF1aXJlZCAlenUgYnl0ZXMsIHJlc2VydmVk ICV6dSBieXRlcykiLAorCQkJCQkJbmFtZSwgbmV3X3NpemUsIHJlc3VsdC0+bWF4aW11bV9zaXpl KSkpOworCisJLyoKKwkgKiBXaGVuIHNocmlua2luZyB0aGUgbWVtb3J5IGZyb20gdGhlIHBhZ2Ug YWxpZ25lZCBuZXcgZW5kIHRvIHRoZSBzdGFydCBvZgorCSAqIHRoZSBwYWdlIGNvbnRhaW5pbmcg ZW5kIG9mIHRoZSByZXNlcnZlZCBzcGFjZSBpcyBub3QgcmVxdWlyZWQuIFdoZXJlYXMKKwkgKiB3 aGVuIGV4cGFuZGluZyB0aGUgbWVtb3J5IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYWdlIGNvbnRh aW5pbmcgdGhlCisJICogc3RhcnQgb2YgdGhlIHN0cnVjdHVyZSB0byB0aGUgcGFnZSBhbGlnbmVk IG5ldyBlbmQgaXMgcmVxdWlyZWQuCisJICovCisJbmV3X2VuZCA9IChjaGFyICopIFRZUEVBTElH TihwYWdlX3NpemUsIChjaGFyICopIHJlc3VsdC0+bG9jYXRpb24gKyBuZXdfc2l6ZSk7CisJaWYg KG5ld19zaXplIDwgcmVzdWx0LT5zaXplKQorCXsKKwkJY2hhcgkgICAqbWF4X2VuZCA9IChjaGFy ICopIFRZUEVBTElHTl9ET1dOKHBhZ2Vfc2l6ZSwgKGNoYXIgKikgcmVzdWx0LT5sb2NhdGlvbiAr IHJlc3VsdC0+bWF4aW11bV9zaXplKTsKKworCQlpZiAobWF4X2VuZCA+IG5ld19lbmQpCisJCQlQ R1NoYXJlZE1lbW9yeUVuc3VyZUZyZWVkKG5ld19lbmQsIG1heF9lbmQgLSBuZXdfZW5kKTsKKwl9 CisJZWxzZSBpZiAobmV3X3NpemUgPiByZXN1bHQtPnNpemUpCisJeworCQljaGFyCSAgICpzdHJ1 Y3Rfc3RhcnQgPSAoY2hhciAqKSBUWVBFQUxJR05fRE9XTihwYWdlX3NpemUsIChjaGFyICopIHJl c3VsdC0+bG9jYXRpb24pOworCisJCWlmIChuZXdfZW5kID4gc3RydWN0X3N0YXJ0KQorCQkJUEdT aGFyZWRNZW1vcnlFbnN1cmVBbGxvY2F0ZWQoc3RydWN0X3N0YXJ0LCBuZXdfZW5kIC0gc3RydWN0 X3N0YXJ0KTsKKwl9CisKKwkvKiBVcGRhdGUgc2htZW0gaW5kZXggZW50cnkuICovCisJcmVzdWx0 LT5zaXplID0gbmV3X3NpemU7CisJcmVzdWx0LT5hbGxvY2F0ZWRfc2l6ZSA9IEVzdGltYXRlQWxs b2NhdGVkU2l6ZShyZXN1bHQpOworCisJTFdMb2NrUmVsZWFzZShTaG1lbUluZGV4TG9jayk7Cisj ZW5kaWYKK30KKwogLyoKICAqCUluaXRTaG1lbUFsbG9jYXRvcigpIC0tLSBzZXQgdXAgYmFzaWMg cG9pbnRlcnMgdG8gc2hhcmVkIG1lbW9yeS4KICAqCkBAIC03MzIsNiArOTgxLDExIEBAIEluaXRT aG1lbUFsbG9jYXRvcihQR1NobWVtSGVhZGVyICpzZWdoZHIpCiAJCUFzc2VydCghZm91bmQpOwog CQlyZXN1bHQtPnNpemUgPSBTaG1lbUFsbG9jYXRvci0+aW5kZXhfc2l6ZTsKIAkJcmVzdWx0LT5h bGxvY2F0ZWRfc2l6ZSA9IFNobWVtQWxsb2NhdG9yLT5pbmRleF9zaXplOworI2lmZGVmIEhBVkVf UkVTSVpBQkxFX1NITUVNCisJCXJlc3VsdC0+bWluaW11bV9zaXplID0gcmVzdWx0LT5zaXplOwor CQlyZXN1bHQtPm1heGltdW1fc2l6ZSA9IHJlc3VsdC0+c2l6ZTsKKwkJcmVzdWx0LT5yZXNlcnZl ZF9zcGFjZSA9IHJlc3VsdC0+YWxsb2NhdGVkX3NpemU7CisjZW5kaWYKIAkJcmVzdWx0LT5sb2Nh dGlvbiA9IFNobWVtQWxsb2NhdG9yLT5pbmRleDsKIAl9CiB9CkBAIC0xMDc1LDcgKzEzMjksNyBA QCBtdWxfc2l6ZShTaXplIHMxLCBTaXplIHMyKQogRGF0dW0KIHBnX2dldF9zaG1lbV9hbGxvY2F0 aW9ucyhQR19GVU5DVElPTl9BUkdTKQogewotI2RlZmluZSBQR19HRVRfU0hNRU1fU0laRVNfQ09M UyA0CisjZGVmaW5lIFBHX0dFVF9TSE1FTV9TSVpFU19DT0xTIDcKIAlSZXR1cm5TZXRJbmZvICpy c2luZm8gPSAoUmV0dXJuU2V0SW5mbyAqKSBmY2luZm8tPnJlc3VsdGluZm87CiAJSEFTSF9TRVFf U1RBVFVTIGhzdGF0OwogCVNobWVtSW5kZXhFbnQgKmVudDsKQEAgLTEwOTcsNyArMTM1MSwxNyBA QCBwZ19nZXRfc2htZW1fYWxsb2NhdGlvbnMoUEdfRlVOQ1RJT05fQVJHUykKIAkJdmFsdWVzWzFd ID0gSW50NjRHZXREYXR1bSgoY2hhciAqKSBlbnQtPmxvY2F0aW9uIC0gKGNoYXIgKikgU2htZW1T ZWdIZHIpOwogCQl2YWx1ZXNbMl0gPSBJbnQ2NEdldERhdHVtKGVudC0+c2l6ZSk7CiAJCXZhbHVl c1szXSA9IEludDY0R2V0RGF0dW0oZW50LT5hbGxvY2F0ZWRfc2l6ZSk7Ci0JCW5hbWVkX2FsbG9j YXRlZCArPSBlbnQtPmFsbG9jYXRlZF9zaXplOworCQl2YWx1ZXNbNF0gPSBJbnQ2NEdldERhdHVt KGVudC0+bWluaW11bV9zaXplKTsKKwkJdmFsdWVzWzVdID0gSW50NjRHZXREYXR1bShlbnQtPm1h eGltdW1fc2l6ZSk7CisJCXZhbHVlc1s2XSA9IEludDY0R2V0RGF0dW0oZW50LT5yZXNlcnZlZF9z cGFjZSk7CisKKwkJLyoKKwkJICogS2VlcCB0cmFjayBvZiB0aGUgdG90YWwgcmVzZXJ2ZWQgc3Bh Y2UgZm9yIG5hbWVkIHNobWVtIGFyZWFzLCB0byBiZQorCQkgKiBhYmxlIHRvIGNhbGN1bGF0ZSB0 aGUgYW1vdW50IG9mIHNoYXJlZCBtZW1vcnkgYWxsb2NhdGVkIGZvcgorCQkgKiBhbm9ueW1vdXMg YXJlYXMgYW5kIHRoZSBhbW91bnQgb2YgZnJlZSBzaGFyZWQgbWVtb3J5IGF0IHRoZSBlbmQgb2YK KwkJICogdGhlIHNlZ21lbnQuCisJCSAqLworCQluYW1lZF9hbGxvY2F0ZWQgKz0gZW50LT5yZXNl cnZlZF9zcGFjZTsKIAogCQl0dXBsZXN0b3JlX3B1dHZhbHVlcyhyc2luZm8tPnNldFJlc3VsdCwg cnNpbmZvLT5zZXREZXNjLAogCQkJCQkJCSB2YWx1ZXMsIG51bGxzKTsKQEAgLTExMDgsNiArMTM3 Miw5IEBAIHBnX2dldF9zaG1lbV9hbGxvY2F0aW9ucyhQR19GVU5DVElPTl9BUkdTKQogCW51bGxz WzFdID0gdHJ1ZTsKIAl2YWx1ZXNbMl0gPSBJbnQ2NEdldERhdHVtKFNobWVtQWxsb2NhdG9yLT5m cmVlX29mZnNldCAtIG5hbWVkX2FsbG9jYXRlZCk7CiAJdmFsdWVzWzNdID0gdmFsdWVzWzJdOwor CXZhbHVlc1s0XSA9IHZhbHVlc1syXTsKKwl2YWx1ZXNbNV0gPSB2YWx1ZXNbMl07CisJdmFsdWVz WzZdID0gdmFsdWVzWzJdOwogCXR1cGxlc3RvcmVfcHV0dmFsdWVzKHJzaW5mby0+c2V0UmVzdWx0 LCByc2luZm8tPnNldERlc2MsIHZhbHVlcywgbnVsbHMpOwogCiAJLyogb3V0cHV0IGFzLW9mLXll dCB1bnVzZWQgc2hhcmVkIG1lbW9yeSAqLwpAQCAtMTExNiw2ICsxMzgzLDkgQEAgcGdfZ2V0X3No bWVtX2FsbG9jYXRpb25zKFBHX0ZVTkNUSU9OX0FSR1MpCiAJbnVsbHNbMV0gPSBmYWxzZTsKIAl2 YWx1ZXNbMl0gPSBJbnQ2NEdldERhdHVtKFNobWVtU2VnSGRyLT50b3RhbHNpemUgLSBTaG1lbUFs bG9jYXRvci0+ZnJlZV9vZmZzZXQpOwogCXZhbHVlc1szXSA9IHZhbHVlc1syXTsKKwl2YWx1ZXNb NF0gPSB2YWx1ZXNbMl07CisJdmFsdWVzWzVdID0gdmFsdWVzWzJdOworCXZhbHVlc1s2XSA9IHZh bHVlc1syXTsKIAl0dXBsZXN0b3JlX3B1dHZhbHVlcyhyc2luZm8tPnNldFJlc3VsdCwgcnNpbmZv LT5zZXREZXNjLCB2YWx1ZXMsIG51bGxzKTsKIAogCUxXTG9ja1JlbGVhc2UoU2htZW1JbmRleExv Y2spOwpAQCAtMTMwMywyMyArMTU3Myw5IEBAIHBnX2dldF9zaG1lbV9hbGxvY2F0aW9uc19udW1h KFBHX0ZVTkNUSU9OX0FSR1MpCiBTaXplCiBwZ19nZXRfc2htZW1fcGFnZXNpemUodm9pZCkKIHsK LQlTaXplCQlvc19wYWdlX3NpemU7Ci0jaWZkZWYgV0lOMzIKLQlTWVNURU1fSU5GTyBzeXNpbmZv OwotCi0JR2V0U3lzdGVtSW5mbygmc3lzaW5mbyk7Ci0Jb3NfcGFnZV9zaXplID0gc3lzaW5mby5k d1BhZ2VTaXplOwotI2Vsc2UKLQlvc19wYWdlX3NpemUgPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7 Ci0jZW5kaWYKLQogCUFzc2VydChJc1VuZGVyUG9zdG1hc3Rlcik7Ci0JQXNzZXJ0KGh1Z2VfcGFn ZXNfc3RhdHVzICE9IEhVR0VfUEFHRVNfVU5LTk9XTik7Ci0KLQlpZiAoaHVnZV9wYWdlc19zdGF0 dXMgPT0gSFVHRV9QQUdFU19PTikKLQkJR2V0SHVnZVBhZ2VTaXplKCZvc19wYWdlX3NpemUsIE5V TEwpOwogCi0JcmV0dXJuIG9zX3BhZ2Vfc2l6ZTsKKwlyZXR1cm4gR2V0T1NQYWdlU2l6ZSgpOwog fQogCiBEYXR1bQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1l dGVycy5kYXQgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAppbmRl eCBmY2I2YWI4MDU4My4uMjJiN2U0NjFkM2EgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3Vj X3BhcmFtZXRlcnMuZGF0CkBAIC0xMjE5LDYgKzEyMTksMTMgQEAKICAgbWF4ID0+ICcxMDAwLjAn LAogfSwKIAoreyBuYW1lID0+ICdoYXZlX3Jlc2l6YWJsZV9zaGFyZWRfbWVtb3J5JywgdHlwZSA9 PiAnYm9vbCcsIGNvbnRleHQgPT4gJ1BHQ19JTlRFUk5BTCcsIGdyb3VwID0+ICdQUkVTRVRfT1BU SU9OUycsCisgIHNob3J0X2Rlc2MgPT4gJ1Nob3dzIHdoZXRoZXIgdGhlIHJ1bm5pbmcgc2VydmVy IHN1cHBvcnRzIHJlc2l6YWJsZSBzaGFyZWQgbWVtb3J5LicsCisgIGZsYWdzID0+ICdHVUNfTk9U X0lOX1NBTVBMRSB8IEdVQ19ESVNBTExPV19JTl9GSUxFJywKKyAgdmFyaWFibGUgPT4gJ2hhdmVf cmVzaXphYmxlX3NoYXJlZF9tZW1vcnlfZW5hYmxlZCcsCisgIGJvb3RfdmFsID0+ICdIQVZFX1JF U0laQUJMRV9TSEFSRURfTUVNT1JZX0VOQUJMRUQnLAorfSwKKwogeyBuYW1lID0+ICdoYmFfZmls ZScsIHR5cGUgPT4gJ3N0cmluZycsIGNvbnRleHQgPT4gJ1BHQ19QT1NUTUFTVEVSJywgZ3JvdXAg PT4gJ0ZJTEVfTE9DQVRJT05TJywKICAgc2hvcnRfZGVzYyA9PiAnU2V0cyB0aGUgc2VydmVyXCdz ICJoYmEiIGNvbmZpZ3VyYXRpb24gZmlsZS4nLAogICBmbGFncyA9PiAnR1VDX1NVUEVSVVNFUl9P TkxZJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jIGIv c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKaW5kZXggZDljYTEzYmFmZjkuLjky NGY5NWE0YTcwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMu YworKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwpAQCAtNjUzLDYgKzY1 MywxMyBAQCBzdGF0aWMgYm9vbCBhc3NlcnRfZW5hYmxlZCA9IERFRkFVTFRfQVNTRVJUX0VOQUJM RUQ7CiAjZW5kaWYKIHN0YXRpYyBib29sIGV4ZWNfYmFja2VuZF9lbmFibGVkID0gRVhFQ19CQUNL RU5EX0VOQUJMRUQ7CiAKKyNpZmRlZiBIQVZFX1JFU0laQUJMRV9TSE1FTQorI2RlZmluZSBIQVZF X1JFU0laQUJMRV9TSEFSRURfTUVNT1JZX0VOQUJMRUQgdHJ1ZQorI2Vsc2UKKyNkZWZpbmUgSEFW RV9SRVNJWkFCTEVfU0hBUkVEX01FTU9SWV9FTkFCTEVEIGZhbHNlCisjZW5kaWYKK3N0YXRpYyBi b29sIGhhdmVfcmVzaXphYmxlX3NoYXJlZF9tZW1vcnlfZW5hYmxlZCA9IEhBVkVfUkVTSVpBQkxF X1NIQVJFRF9NRU1PUllfRU5BQkxFRDsKKwogc3RhdGljIGNoYXIgKnJlY292ZXJ5X3RhcmdldF90 aW1lbGluZV9zdHJpbmc7CiBzdGF0aWMgY2hhciAqcmVjb3ZlcnlfdGFyZ2V0X3N0cmluZzsKIHN0 YXRpYyBjaGFyICpyZWNvdmVyeV90YXJnZXRfeGlkX3N0cmluZzsKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2Mu ZGF0CmluZGV4IDk5ZmE5YTZlZGUyLi4zYTYyMjUyNWRmYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2Mu ZGF0CkBAIC04NzA5LDggKzg3MDksOCBAQAogeyBvaWQgPT4gJzUwNTInLCBkZXNjciA9PiAnYWxs b2NhdGlvbnMgZnJvbSB0aGUgbWFpbiBzaGFyZWQgbWVtb3J5IHNlZ21lbnQnLAogICBwcm9uYW1l ID0+ICdwZ19nZXRfc2htZW1fYWxsb2NhdGlvbnMnLCBwcm9yb3dzID0+ICc1MCcsIHByb3JldHNl dCA9PiAndCcsCiAgIHByb3ZvbGF0aWxlID0+ICd2JywgcHJvcmV0dHlwZSA9PiAncmVjb3JkJywg cHJvYXJndHlwZXMgPT4gJycsCi0gIHByb2FsbGFyZ3R5cGVzID0+ICd7dGV4dCxpbnQ4LGludDgs aW50OH0nLCBwcm9hcmdtb2RlcyA9PiAne28sbyxvLG99JywKLSAgcHJvYXJnbmFtZXMgPT4gJ3tu YW1lLG9mZixzaXplLGFsbG9jYXRlZF9zaXplfScsCisgIHByb2FsbGFyZ3R5cGVzID0+ICd7dGV4 dCxpbnQ4LGludDgsaW50OCxpbnQ4LGludDgsaW50OH0nLCBwcm9hcmdtb2RlcyA9PiAne28sbyxv LG8sbyxvLG99JywKKyAgcHJvYXJnbmFtZXMgPT4gJ3tuYW1lLG9mZixzaXplLGFsbG9jYXRlZF9z aXplLG1pbmltdW1fc2l6ZSxtYXhpbXVtX3NpemUscmVzZXJ2ZWRfc3BhY2V9JywKICAgcHJvc3Jj ID0+ICdwZ19nZXRfc2htZW1fYWxsb2NhdGlvbnMnLAogICBwcm9hY2wgPT4gJ3tQT1NUR1JFUz1Y LHBnX3JlYWRfYWxsX3N0YXRzPVh9JyB9LAogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wZ19j b25maWcuaC5pbiBiL3NyYy9pbmNsdWRlL3BnX2NvbmZpZy5oLmluCmluZGV4IDlmNmQ1MTIzNDdl Li44ZjJhNTllYzNhOCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcGdfY29uZmlnLmguaW4KKysr IGIvc3JjL2luY2x1ZGUvcGdfY29uZmlnLmguaW4KQEAgLTg1LDYgKzg1LDE0IEBACiAgICBkb24n dC4gKi8KICN1bmRlZiBIQVZFX0RFQ0xfRl9GVUxMRlNZTkMKIAorLyogRGVmaW5lIHRvIDEgaWYg eW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBNQURWX1BPUFVMQVRFX1dSSVRFJywgYW5kIHRv IDAKKyAgIGlmIHlvdSBkb24ndC4gKi8KKyN1bmRlZiBIQVZFX0RFQ0xfTUFEVl9QT1BVTEFURV9X UklURQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYE1B RFZfUkVNT1ZFJywgYW5kIHRvIDAgaWYgeW91CisgICBkb24ndC4gKi8KKyN1bmRlZiBIQVZFX0RF Q0xfTUFEVl9SRU1PVkUKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0 aW9uIG9mIGBtZW1zZXRfcycsIGFuZCB0byAwIGlmIHlvdQogICAgZG9uJ3QuICovCiAjdW5kZWYg SEFWRV9ERUNMX01FTVNFVF9TCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wZ19jb25maWdfbWFu dWFsLmggYi9zcmMvaW5jbHVkZS9wZ19jb25maWdfbWFudWFsLmgKaW5kZXggNTIxYjQ5Yjg4ODgu LmIwOWQ2YzkxMzI0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wZ19jb25maWdfbWFudWFsLmgK KysrIGIvc3JjL2luY2x1ZGUvcGdfY29uZmlnX21hbnVhbC5oCkBAIC0xMzEsNiArMTMxLDE1IEBA CiAjZGVmaW5lIEVYRUNfQkFDS0VORAogI2VuZGlmCiAKKy8qCisgKiBIQVZFX1JFU0laQUJMRV9T SE1FTSBpbmRpY2F0ZXMgd2hldGhlciByZXNpemFibGUgc2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmVz IGFyZQorICogc3VwcG9ydGVkLiBUaGUgaW1wbGVtZW50YXRpb24gcmVxdWlyZXMgTGludXgtc3Bl Y2lmaWMgbWFkdmlzZSBjb25zdGFudHMKKyAqIChNQURWX1JFTU9WRSBhbmQgTUFEVl9QT1BVTEFU RV9XUklURSkuCisgKi8KKyNpZiBIQVZFX0RFQ0xfTUFEVl9SRU1PVkUgJiYgSEFWRV9ERUNMX01B RFZfUE9QVUxBVEVfV1JJVEUgJiYgIWRlZmluZWQoRVhFQ19CQUNLRU5EKQorI2RlZmluZSBIQVZF X1JFU0laQUJMRV9TSE1FTQorI2VuZGlmCisKIC8qCiAgKiBVU0VfUE9TSVhfRkFEVklTRSBjb250 cm9scyB3aGV0aGVyIFBvc3RncmVzIHdpbGwgYXR0ZW1wdCB0byB1c2UgdGhlCiAgKiBwb3NpeF9m YWR2aXNlKCkga2VybmVsIGNhbGwuICBVc3VhbGx5IHRoZSBhdXRvbWF0aWMgY29uZmlndXJlIHRl c3RzIGFyZQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wZ19zaG1lbS5oIGIvc3Jj L2luY2x1ZGUvc3RvcmFnZS9wZ19zaG1lbS5oCmluZGV4IDEwYzdiMDY1ODYxLi5mMGVmYmYyYWVj MSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wZ19zaG1lbS5oCisrKyBiL3NyYy9p bmNsdWRlL3N0b3JhZ2UvcGdfc2htZW0uaApAQCAtODksNiArODksOSBAQCBleHRlcm4gUEdTaG1l bUhlYWRlciAqUEdTaGFyZWRNZW1vcnlDcmVhdGUoU2l6ZSBzaXplLAogCQkJCQkJCQkJCSAgIFBH U2htZW1IZWFkZXIgKipzaGltKTsKIGV4dGVybiBib29sIFBHU2hhcmVkTWVtb3J5SXNJblVzZSh1 bnNpZ25lZCBsb25nIGlkMSwgdW5zaWduZWQgbG9uZyBpZDIpOwogZXh0ZXJuIHZvaWQgUEdTaGFy ZWRNZW1vcnlEZXRhY2godm9pZCk7CitleHRlcm4gdm9pZCBQR1NoYXJlZE1lbW9yeUVuc3VyZUZy ZWVkKHZvaWQgKmFkZHIsIFNpemUgc2l6ZSk7CitleHRlcm4gdm9pZCBQR1NoYXJlZE1lbW9yeUVu c3VyZUFsbG9jYXRlZCh2b2lkICphZGRyLCBTaXplIHNpemUpOwogZXh0ZXJuIHZvaWQgR2V0SHVn ZVBhZ2VTaXplKFNpemUgKmh1Z2VwYWdlc2l6ZSwgaW50ICptbWFwX2ZsYWdzKTsKK2V4dGVybiBT aXplIEdldE9TUGFnZVNpemUodm9pZCk7CiAKICNlbmRpZgkJCQkJCQkvKiBQR19TSE1FTV9IICov CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3NobWVtLmggYi9zcmMvaW5jbHVkZS9z dG9yYWdlL3NobWVtLmgKaW5kZXggYWY3ZmU4OTNiYzQuLjBlNmQ1YTYzZjI4IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9zdG9yYWdlL3NobWVtLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9z aG1lbS5oCkBAIC01Nyw2ICs1NywyMiBAQCB0eXBlZGVmIHN0cnVjdCBTaG1lbVN0cnVjdE9wdHMK IAkgKi8KIAlzaXplX3QJCWFsaWdubWVudDsKIAorCS8qCisJICogTWluaW11bSBzaXplIHRoaXMg c3RydWN0dXJlIGNhbiBzaHJpbmsgdG8uIFNob3VsZCBiZSBzZXQgdG8gMCBmb3IKKwkgKiBmaXhl ZC1zaXplIHN0cnVjdHVyZXMuCisJICovCisJc3NpemVfdAkJbWluaW11bV9zaXplOworCisJLyoK KwkgKiBNYXhpbXVtIHNpemUgdGhpcyBzdHJ1Y3R1cmUgY2FuIGdyb3cgdXB0byBpbiBmdXR1cmUu IFRoZSBtZW1vcnkgaXMgbm90CisJICogYWxsb2NhdGVkIHJpZ2h0IGF3YXkgYnV0IHRoZSBjb3Jy ZXNwb25kaW5nIGFkZHJlc3Mgc3BhY2UgaXMgcmVzZXJ2ZWQgc28KKwkgKiB0aGF0IG1lbW9yeSBj YW4gYmUgbWFwcGVkIHRvIGl0IHdoZW4gdGhlIHN0cnVjdHVyZSBncm93cy4gVHlwaWNhbGx5CisJ ICogc2hvdWxkIGJlIHVzZWQgZm9yIGxhcmdlIHJlc2l6YWJsZSBzdHJ1Y3R1cmVzIHdoaWNoIG5l ZWQgc2V2ZXJhbCBwYWdlcworCSAqIHdvcnRoIG9mIGNvbnRpZ3VvdXMgbWVtb3J5LiBTaG91bGQg YmUgc2V0IHRvIDAgZm9yIGZpeGVkLXNpemUKKwkgKiBzdHJ1Y3R1cmVzLgorCSAqLworCXNzaXpl X3QJCW1heGltdW1fc2l6ZTsKKwogCS8qCiAJICogV2hlbiB0aGUgc2htZW0gYXJlYSBpcyBpbml0 aWFsaXplZCBvciBhdHRhY2hlZCB0bywgcG9pbnRlciB0byBpdCBpcwogCSAqIHN0b3JlZCBpbiAq cHRyLiAgSXQgdXN1YWxseSBwb2ludHMgdG8gYSBnbG9iYWwgdmFyaWFibGUsIHVzZWQgdG8gYWNj ZXNzCkBAIC0xNjgsNiArMTg0LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgU2htZW1DYWxsYmFja3MKIAog ZXh0ZXJuIHZvaWQgUmVnaXN0ZXJTaG1lbUNhbGxiYWNrcyhjb25zdCBTaG1lbUNhbGxiYWNrcyAq Y2FsbGJhY2tzKTsKIGV4dGVybiBib29sIFNobWVtQWRkcklzVmFsaWQoY29uc3Qgdm9pZCAqYWRk cik7CitleHRlcm4gdm9pZCBTaG1lbVJlc2l6ZVN0cnVjdChjb25zdCBjaGFyICpuYW1lLCBTaXpl IG5ld19zaXplKTsKIAogLyoKICAqIFRoZXNlIG1hY3JvcyBwcm92aWRlIHN5bnRhY3RpYyBzdWdh ciBmb3IgY2FsbGluZyB0aGUgdW5kZXJseWluZyBmdW5jdGlvbnMKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L21vZHVsZXMvTWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCmluZGV4IDBh NzRhYjVjODZmLi5mYTI5ZjQ4NjM1NCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9NYWtl ZmlsZQorKysgYi9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCkBAIC0xNCw2ICsxNCw3IEBAIFNV QkRJUlMgPSBcCiAJCSAgbGlicHFfcGlwZWxpbmUgXAogCQkgIG9hdXRoX3ZhbGlkYXRvciBcCiAJ CSAgcGxzYW1wbGUgXAorCQkgIHJlc2l6YWJsZV9zaG1lbSBcCiAJCSAgc3BnaXN0X25hbWVfb3Bz IFwKIAkJICB0ZXN0X2FpbyBcCiAJCSAgdGVzdF9hdXRvdmFjdXVtIFwKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxk CmluZGV4IDRiY2E0MmJiMzcwLi5kNjljMzdkM2Q2YSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9k dWxlcy9tZXNvbi5idWlsZAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkCkBAIC0x Myw2ICsxMyw3IEBAIHN1YmRpcignbGlicHFfcGlwZWxpbmUnKQogc3ViZGlyKCduYnRyZWUnKQog c3ViZGlyKCdvYXV0aF92YWxpZGF0b3InKQogc3ViZGlyKCdwbHNhbXBsZScpCitzdWJkaXIoJ3Jl c2l6YWJsZV9zaG1lbScpCiBzdWJkaXIoJ3NwZ2lzdF9uYW1lX29wcycpCiBzdWJkaXIoJ3NzbF9w YXNzcGhyYXNlX2NhbGxiYWNrJykKIHN1YmRpcigndGVzdF9haW8nKQpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvbW9kdWxlcy9yZXNpemFibGVfc2htZW0vTWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVz L3Jlc2l6YWJsZV9zaG1lbS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uODZiZjE3YmVmNGEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVz L3Jlc2l6YWJsZV9zaG1lbS9NYWtlZmlsZQpAQCAtMCwwICsxLDI1IEBACisjIHNyYy90ZXN0L21v ZHVsZXMvcmVzaXphYmxlX3NobWVtL01ha2VmaWxlCisKK1BHRklMRURFU0MgPSAicmVzaXphYmxl X3NobWVtIC0gdGVzdCBtb2R1bGUgZm9yIHJlc2l6YWJsZSBzaGFyZWQgbWVtb3J5IgorCitNT0RV TEVTID0gcmVzaXphYmxlX3NobWVtCisKK0VYVEVOU0lPTiA9IHJlc2l6YWJsZV9zaG1lbQorREFU QSA9IHJlc2l6YWJsZV9zaG1lbS0tMS4wLnNxbAorCitUQVBfVEVTVFMgPSAxCisKKyMgVGhpcyB0 ZXN0IHJlcXVpcmVzIGxpYnJhcnkgdG8gYmUgbG9hZGVkIGF0IHRoZSBzZXJ2ZXIgc3RhcnQsIHNv IGRpc2FibGUKKyMgaW5zdGFsbGNoZWNrCitOT19JTlNUQUxMQ0hFQ0sgPSAxCisKK2lmZGVmIFVT RV9QR1hTCitQR19DT05GSUcgPSBwZ19jb25maWcKK1BHWFMgOj0gJChzaGVsbCAkKFBHX0NPTkZJ RykgLS1wZ3hzKQoraW5jbHVkZSAkKFBHWFMpCitlbHNlCitzdWJkaXIgPSBzcmMvdGVzdC9tb2R1 bGVzL3Jlc2l6YWJsZV9zaG1lbQordG9wX2J1aWxkZGlyID0gLi4vLi4vLi4vLi4KK2luY2x1ZGUg JCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKK2luY2x1ZGUgJCh0b3Bfc3JjZGly KS9jb250cmliL2NvbnRyaWItZ2xvYmFsLm1rCitlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv bW9kdWxlcy9yZXNpemFibGVfc2htZW0vbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9tb2R1bGVzL3Jl c2l6YWJsZV9zaG1lbS9tZXNvbi5idWlsZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uNDkzYmJiYzk1YzMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVz L3Jlc2l6YWJsZV9zaG1lbS9tZXNvbi5idWlsZApAQCAtMCwwICsxLDM2IEBACisjIHNyYy90ZXN0 L21vZHVsZXMvcmVzaXphYmxlX3NobWVtL21lc29uLmJ1aWxkCisKK3Jlc2l6YWJsZV9zaG1lbV9z b3VyY2VzID0gZmlsZXMoCisgICdyZXNpemFibGVfc2htZW0uYycsCispCisKK2lmIGhvc3Rfc3lz dGVtID09ICd3aW5kb3dzJworICByZXNpemFibGVfc2htZW1fc291cmNlcyArPSByY19saWJfZ2Vu LnByb2Nlc3Mod2luMzJ2ZXJfcmMsIGV4dHJhX2FyZ3M6IFsKKyAgICAnLS1OQU1FJywgJ3Jlc2l6 YWJsZV9zaG1lbScsCisgICAgJy0tRklMRURFU0MnLCAncmVzaXphYmxlX3NobWVtIC0gdGVzdCBt b2R1bGUgZm9yIHJlc2l6YWJsZSBzaGFyZWQgbWVtb3J5JyxdKQorZW5kaWYKKworcmVzaXphYmxl X3NobWVtID0gc2hhcmVkX21vZHVsZSgncmVzaXphYmxlX3NobWVtJywKKyAgcmVzaXphYmxlX3No bWVtX3NvdXJjZXMsCisgIGt3YXJnczogcGdfdGVzdF9tb2RfYXJncywKKykKK3Rlc3RfaW5zdGFs bF9saWJzICs9IHJlc2l6YWJsZV9zaG1lbQorCit0ZXN0X2luc3RhbGxfZGF0YSArPSBmaWxlcygK KyAgJ3Jlc2l6YWJsZV9zaG1lbS5jb250cm9sJywKKyAgJ3Jlc2l6YWJsZV9zaG1lbS0tMS4wLnNx bCcsCispCisKK3Rlc3RzICs9IHsKKyAgJ25hbWUnOiAncmVzaXphYmxlX3NobWVtJywKKyAgJ3Nk JzogbWVzb24uY3VycmVudF9zb3VyY2VfZGlyKCksCisgICdiZCc6IG1lc29uLmN1cnJlbnRfYnVp bGRfZGlyKCksCisgICd0YXAnOiB7CisgICAgJ3Rlc3RzJzogWworICAgICAgJ3QvMDAxX3Jlc2l6 YWJsZV9zaG1lbS5wbCcsCisgICAgXSwKKyAgICAjIFRoaXMgdGVzdCByZXF1aXJlcyBsaWJyYXJ5 IHRvIGJlIGxvYWRlZCBhdCB0aGUgc2VydmVyIHN0YXJ0LCBzbyBkaXNhYmxlCisgICAgIyBpbnN0 YWxsY2hlY2sKKyAgICAncnVubmluZ2NoZWNrJzogZmFsc2UsCisgIH0sCit9CmRpZmYgLS1naXQg YS9zcmMvdGVzdC9tb2R1bGVzL3Jlc2l6YWJsZV9zaG1lbS9yZXNpemFibGVfc2htZW0tLTEuMC5z cWwgYi9zcmMvdGVzdC9tb2R1bGVzL3Jlc2l6YWJsZV9zaG1lbS9yZXNpemFibGVfc2htZW0tLTEu MC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmI0YjA3MzM2ZGMz Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9yZXNpemFibGVfc2htZW0vcmVz aXphYmxlX3NobWVtLS0xLjAuc3FsCkBAIC0wLDAgKzEsMzkgQEAKKy8qIHNyYy90ZXN0L21vZHVs ZXMvcmVzaXphYmxlX3NobWVtL3Jlc2l6YWJsZV9zaG1lbS0tMS4wLnNxbCAqLworCistLSBjb21w bGFpbiBpZiBzY3JpcHQgaXMgc291cmNlZCBpbiBwc3FsLCByYXRoZXIgdGhhbiB2aWEgQ1JFQVRF IEVYVEVOU0lPTgorXGVjaG8gVXNlICJDUkVBVEUgRVhURU5TSU9OIHJlc2l6YWJsZV9zaG1lbSIg dG8gbG9hZCB0aGlzIGZpbGUuIFxxdWl0CisKKy0tIEZ1bmN0aW9uIHRvIHJlc2l6ZSB0aGUgdGVz dCBzdHJ1Y3R1cmUgaW4gdGhlIHNoYXJlZCBtZW1vcnkKK0NSRUFURSBGVU5DVElPTiByZXNpemFi bGVfc2htZW1fcmVzaXplKG5ld19lbnRyaWVzIGludGVnZXIpCitSRVRVUk5TIHZvaWQKK0FTICdN T0RVTEVfUEFUSE5BTUUnCitMQU5HVUFHRSBDIFNUUklDVDsKKworLS0gRnVuY3Rpb24gdG8gd3Jp dGUgZGF0YSB0byBhbGwgZW50cmllcyBpbiB0aGUgdGVzdCBzdHJ1Y3R1cmUgaW4gc2hhcmVkIG1l bW9yeQorLS0gV3JpdGluZyBhbGwgdGhlIGVudHJpZXMgbWFrZXMgc3VyZSB0aGF0IHRoZSBtZW1v cnkgaXMgYWN0dWFsbHkgYWxsb2NhdGVkIGFuZAorLS0gbWFwcGVkIHRvIHRoZSBwcm9jZXNzLCBz byB0aGF0IHdlIGNhbiBsYXRlciBtZWFzdXJlIHRoZSBtZW1vcnkgdXNhZ2UuCitDUkVBVEUgRlVO Q1RJT04gcmVzaXphYmxlX3NobWVtX3dyaXRlKGVudHJ5X3ZhbHVlIGludGVnZXIpCitSRVRVUk5T IHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUnCitMQU5HVUFHRSBDIFNUUklDVDsKKworLS0gRnVu Y3Rpb24gdG8gdmVyaWZ5IHRoYXQgc3BlY2lmaWVkIG51bWJlciBvZiBpbml0aWFsIGVudHJpZXMg aGF2ZSBleHBlY3RlZCB2YWx1ZS4KKy0tIFJlYWRpbmcgYWxsIHRoZSBlbnRyaWVzIG1ha2VzIHN1 cmUgdGhhdCB0aGUgbWVtb3J5IGlzIGFjdHVhbGx5IG1hcHBlZCB0byB0aGUKKy0tIHByb2Nlc3Ms IHNvIHRoYXQgd2UgY2FuIGxhdGVyIG1lYXN1cmUgdGhlIG1lbW9yeSB1c2FnZS4KK0NSRUFURSBG VU5DVElPTiByZXNpemFibGVfc2htZW1fcmVhZChlbnRyeV9jb3VudCBpbnRlZ2VyLCBlbnRyeV92 YWx1ZSBpbnRlZ2VyKQorUkVUVVJOUyBib29sZWFuCitBUyAnTU9EVUxFX1BBVEhOQU1FJworTEFO R1VBR0UgQyBTVFJJQ1Q7CisKKy0tIEZ1bmN0aW9uIHRvIHJlcG9ydCBtZW1vcnkgbWFwcGVkIGFn YWluc3QgdGhlIG1haW4gc2hhcmVkIG1lbW9yeSBzZWdtZW50IGluCistLSB0aGUgYmFja2VuZCB3 aGVyZSB0aGlzIGZ1bmN0aW9uIHJ1bnMuCitDUkVBVEUgRlVOQ1RJT04gcmVzaXphYmxlX3NobWVt X3VzYWdlKCkKK1JFVFVSTlMgYmlnaW50CitBUyAnTU9EVUxFX1BBVEhOQU1FJworTEFOR1VBR0Ug QyBTVFJJQ1Q7CisKKy0tIEZ1bmN0aW9uIHRvIGdldCB0aGUgc2hhcmVkIG1lbW9yeSBwYWdlIHNp emUKK0NSRUFURSBGVU5DVElPTiByZXNpemFibGVfc2htZW1fcGFnZXNpemUoKQorUkVUVVJOUyBp bnRlZ2VyCitBUyAnTU9EVUxFX1BBVEhOQU1FJworTEFOR1VBR0UgQyBTVFJJQ1Q7CmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Jlc2l6YWJsZV9zaG1lbS9yZXNpemFibGVfc2htZW0uYyBi L3NyYy90ZXN0L21vZHVsZXMvcmVzaXphYmxlX3NobWVtL3Jlc2l6YWJsZV9zaG1lbS5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42ZmQ5ZTAyZjdiMwotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvcmVzaXphYmxlX3NobWVtL3Jlc2l6YWJsZV9zaG1l bS5jCkBAIC0wLDAgKzEsMzE3IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcmVzaXph YmxlX3NobWVtLmMKKyAqCQlUZXN0IG1vZHVsZSBmb3IgUG9zdGdyZVNRTCdzIHJlc2l6YWJsZSBz aGFyZWQgbWVtb3J5IGZ1bmN0aW9uYWxpdHkKKyAqCisgKiBUaGlzIG1vZHVsZSBkZW1vbnN0cmF0 ZXMgYW5kIHRlc3RzIHRoZSByZXNpemFibGUgc2hhcmVkIG1lbW9yeSBBUEkKKyAqIHByb3ZpZGVk IGJ5IHNobWVtLmMvc2htZW0uaC4KKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNs dWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkaW8u aD4KKworI2luY2x1ZGUgImNvbW1hbmRzL2V4dGVuc2lvbi5oIgorI2luY2x1ZGUgImZtZ3IuaCIK KyNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgiCisjaW5j bHVkZSAic3RvcmFnZS9zcGluLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNs dWRlICJ1dGlscy9ndWMuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorCitQR19NT0RV TEVfTUFHSUM7CisKKy8qIERlZmF1bHQgdmFsdWVzIGZvciB0aGUgR1VDcyBjb250cm9sbGluZyBz dHJ1Y3R1cmUgc2l6ZSAqLworI2RlZmluZSBURVNUX0lOSVRJQUxfRU5UUklFU19ERUZBVUxUCQko MjUgKiAxMDI0ICogMTAyNCkJLyogfjEwME1CICovCisjZGVmaW5lIFRFU1RfTUFYX0VOVFJJRVNf REVGQVVMVAkJCSgxMDAgKiAxMDI0ICogMTAyNCkgLyogfjQwME1CICovCisKKyNkZWZpbmUgVEVT VF9FTlRSWV9TSVpFCQkJc2l6ZW9mKGludDMyKQkvKiBTaXplIG9mIGVhY2ggZW50cnkgKi8KKwor LyoKKyAqIFJlc2l6YWJsZSB0ZXN0IGRhdGEgc3RydWN0dXJlIHN0b3JlZCBpbiBzaGFyZWQgbWVt b3J5LgorICoKKyAqIFRoZSB0ZXN0IHBlcmZvcm1zIHJlc2l6aW5nLCByZWFkcyBvciB3cml0ZXMs IG9ubHkgb25lIGF0IGEgdGltZSBhbmQgbmV2ZXIKKyAqIGNvbmN1cnJlbnRseS4gSGVuY2UsIHRo ZXJlIGlzIG5vIG5lZWQgZm9yIGxvY2tzIGluIHRoZSB0ZXN0IHN0cnVjdHVyZS4KKyAqLwordHlw ZWRlZiBzdHJ1Y3QgVGVzdFJlc2l6YWJsZVNobWVtU3RydWN0Cit7CisJLyogTWV0YWRhdGEgKi8K KwlpbnQzMgkJbnVtX2VudHJpZXM7CS8qIE51bWJlciBvZiBlbnRyaWVzIHRoYXQgY2FuIGZpdCAq LworCisJLyogRGF0YSBhcmVhIC0gdmFyaWFibGUgc2l6ZSAqLworCWludDMyCQlkYXRhW0ZMRVhJ QkxFX0FSUkFZX01FTUJFUl07Cit9IFRlc3RSZXNpemFibGVTaG1lbVN0cnVjdDsKKworc3RhdGlj IFRlc3RSZXNpemFibGVTaG1lbVN0cnVjdCAqcmVzaXphYmxlX3NobWVtID0gTlVMTDsKKworLyog R1VDIHZhcmlhYmxlcyBjb250cm9sbGluZyB0aGUgc2l6ZSBvZiB0aGUgdGVzdCBzdHJ1Y3R1cmUg Ki8KK3N0YXRpYyBpbnQJdGVzdF9pbml0aWFsX2VudHJpZXM7CitzdGF0aWMgaW50CXRlc3RfbWF4 X2VudHJpZXM7CisKKy8qIFdoZXRoZXIgdG8gdXNlIFNITUVNX0FUVEFDSF9VTktOT1dOX1NJWkUg d2hlbiBhdHRhY2hpbmcgdG8gdGhlIHNoYXJlZCBtZW1vcnkgKi8KK3N0YXRpYyBib29sIHVzZV91 bmtub3duX3NpemUgPSBmYWxzZTsKKworc3RhdGljIHZvaWQgcmVzaXphYmxlX3NobWVtX3JlcXVl c3Qodm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIHJlc2l6YWJsZV9zaG1lbV9zaG1lbV9pbml0KHZv aWQgKmFyZyk7CisKK3N0YXRpYyBTaG1lbUNhbGxiYWNrcyBzaG1lbV9jYWxsYmFja3MgPSB7CisJ LnJlcXVlc3RfZm4gPSByZXNpemFibGVfc2htZW1fcmVxdWVzdCwKKwkuaW5pdF9mbiA9IHJlc2l6 YWJsZV9zaG1lbV9zaG1lbV9pbml0LAorfTsKKworLyogU1FMLWNhbGxhYmxlIGZ1bmN0aW9ucyAq LworUEdfRlVOQ1RJT05fSU5GT19WMShyZXNpemFibGVfc2htZW1fcmVzaXplKTsKK1BHX0ZVTkNU SU9OX0lORk9fVjEocmVzaXphYmxlX3NobWVtX3dyaXRlKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEo cmVzaXphYmxlX3NobWVtX3JlYWQpOworUEdfRlVOQ1RJT05fSU5GT19WMShyZXNpemFibGVfc2ht ZW1fdXNhZ2UpOworUEdfRlVOQ1RJT05fSU5GT19WMShyZXNpemFibGVfc2htZW1fcGFnZXNpemUp OworCisvKgorICogTW9kdWxlIGxvYWQgY2FsbGJhY2sKKyAqLwordm9pZAorX1BHX2luaXQodm9p ZCkKK3sKKwlpbnQJCQlndWNfY29udGV4dDsKKworCS8qCisJICogVXNlIFBHQ19QT1NUTUFTVEVS IHdoZW4gbG9hZGVkIGF0IHN0YXJ0dXAgc28gdGhlIHZhbHVlcyBhcmUgZml4ZWQgb25jZQorCSAq IHRoZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgaXMgY3JlYXRlZC4gIFdoZW4gbG9hZGVkIGFmdGVy IHN0YXJ0dXAKKwkgKiBQR0NfUE9TVE1BU1RFUiBpcyBub3QgYWxsb3dlZCwgc28gd2UgdXNlIFBH Q19TSUdIVVAgaW5zdGVhZC4gIEFsdGhvdWdoCisJICogd2UgZG8gbm90IGludGVuZCB0byBjaGFu Z2UgdGhlc2UgdmFsdWVzIGF0IGNvbmZpZyByZWxvYWQsIFBHQ19TSUdIVVAgaXMKKwkgKiB0aGUg bGVhc3QgcGVybWlzc2l2ZSBjb250ZXh0IHRoYXQgYWxsb3dzIGRlZmluaW5nIHRoZSBHVUMgYWZ0 ZXIgc3RhcnR1cAorCSAqIGFuZCBzdGlsbCBwcmV2ZW50cyBpdCBmcm9tIGJlaW5nIGNoYW5nZWQg dmlhIFNFVC4KKwkgKi8KKwlpZiAocHJvY2Vzc19zaGFyZWRfcHJlbG9hZF9saWJyYXJpZXNfaW5f cHJvZ3Jlc3MpCisJCWd1Y19jb250ZXh0ID0gUEdDX1BPU1RNQVNURVI7CisJZWxzZQorCXsKKwkJ Z3VjX2NvbnRleHQgPSBQR0NfU0lHSFVQOworCQlzaG1lbV9jYWxsYmFja3MuZmxhZ3MgPSBTSE1F TV9DQUxMQkFDS1NfQUxMT1dfQUZURVJfU1RBUlRVUDsKKwl9CisKKwlEZWZpbmVDdXN0b21JbnRW YXJpYWJsZSgicmVzaXphYmxlX3NobWVtLmluaXRpYWxfZW50cmllcyIsCisJCQkJCQkJIkluaXRp YWwgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHRlc3Qgc3RydWN0dXJlLiIsCisJCQkJCQkJTlVM TCwKKwkJCQkJCQkmdGVzdF9pbml0aWFsX2VudHJpZXMsCisJCQkJCQkJVEVTVF9JTklUSUFMX0VO VFJJRVNfREVGQVVMVCwKKwkJCQkJCQkxLAorCQkJCQkJCUlOVF9NQVgsCisJCQkJCQkJZ3VjX2Nv bnRleHQsCisJCQkJCQkJMCwKKwkJCQkJCQlOVUxMLCBOVUxMLCBOVUxMKTsKKworCURlZmluZUN1 c3RvbUludFZhcmlhYmxlKCJyZXNpemFibGVfc2htZW0ubWF4X2VudHJpZXMiLAorCQkJCQkJCSJN YXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSB0ZXN0IHN0cnVjdHVyZS4iLAorCQkJCQkJ CU5VTEwsCisJCQkJCQkJJnRlc3RfbWF4X2VudHJpZXMsCisJCQkJCQkJVEVTVF9NQVhfRU5UUklF U19ERUZBVUxULAorCQkJCQkJCTEsCisJCQkJCQkJSU5UX01BWCwKKwkJCQkJCQlndWNfY29udGV4 dCwKKwkJCQkJCQkwLAorCQkJCQkJCU5VTEwsIE5VTEwsIE5VTEwpOworCisJLyoKKwkgKiBXaGVu IGxvYWRlZCBhZnRlciBzdGFydHVwIGJ5IGEgYmFja2VuZCB0aGF0IGlzIG5vdCBjcmVhdGluZyB0 aGUKKwkgKiBleHRlbnNpb24sIHRoZSBzaGFyZWQgbWVtb3J5IG1pZ2h0IGhhdmUgYmVlbiByZXNp emVkIHRvIGEgc2l6ZSBvdGhlcgorCSAqIHRoYW4gdGhlIGluaXRpYWwgc2l6ZS4gVXNlIFNITUVN X0FUVEFDSF9VTktOT1dOX1NJWkUgdG8gYXR0YWNoIHdpdGhvdXQKKwkgKiBrbm93aW5nIHRoZSBl eGFjdCBzaXplLgorCSAqLworCWlmICghcHJvY2Vzc19zaGFyZWRfcHJlbG9hZF9saWJyYXJpZXNf aW5fcHJvZ3Jlc3MgJiYgIWNyZWF0aW5nX2V4dGVuc2lvbikKKwkJdXNlX3Vua25vd25fc2l6ZSA9 IHRydWU7CisKKwlSZWdpc3RlclNobWVtQ2FsbGJhY2tzKCZzaG1lbV9jYWxsYmFja3MpOworfQor CisvKgorICogUmVxdWVzdCBzaGFyZWQgbWVtb3J5IHJlc291cmNlcworICovCitzdGF0aWMgdm9p ZAorcmVzaXphYmxlX3NobWVtX3JlcXVlc3Qodm9pZCAqYXJnKQoreworCVNpemUJCWluaXRpYWxf c2l6ZSA9IGFkZF9zaXplKG9mZnNldG9mKFRlc3RSZXNpemFibGVTaG1lbVN0cnVjdCwgZGF0YSks CisJCQkJCQkJCQkJbXVsX3NpemUodGVzdF9pbml0aWFsX2VudHJpZXMsIFRFU1RfRU5UUllfU0la RSkpOworCisvKgorICogQ3JlYXRlIHJlc2l6YWJsZSBzdHJ1Y3R1cmUgb24gdGhlIHBsYXRmb3Jt cyB3aGljaCBzdXBwb3J0IGl0LiBPdGhlcndpc2UgY3JlYXRlCisgKiBhcyBhIGZpeGVkLXNpemUg c3RydWN0dXJlLiBPdGhlciB3YXkgd291bGQgYmUgdG8gY29uZGl0aW9uYWxseSBpbmNsdWRlCisg KiAubWF4aW11bV9zaXplIGluIHRoZSBjYWxsIHRvIFNobWVtUmVxdWVzdFN0cnVjdCgpLgorICov CisjaWZkZWYgSEFWRV9SRVNJWkFCTEVfU0hNRU0KKwlTaXplCQltYXhfc2l6ZSA9IGFkZF9zaXpl KG9mZnNldG9mKFRlc3RSZXNpemFibGVTaG1lbVN0cnVjdCwgZGF0YSksCisJCQkJCQkJCQltdWxf c2l6ZSh0ZXN0X21heF9lbnRyaWVzLCBURVNUX0VOVFJZX1NJWkUpKTsKKwlTaXplCQltaW5fc2l6 ZSA9IG9mZnNldG9mKFRlc3RSZXNpemFibGVTaG1lbVN0cnVjdCwgZGF0YSk7CisKKyNlbHNlCisJ U2l6ZQkJbWF4X3NpemUgPSAwOworCVNpemUJCW1pbl9zaXplID0gMDsKKyNlbmRpZgorCisJLyog UmVnaXN0ZXIgb3VyIHJlc2l6YWJsZSBzaGFyZWQgbWVtb3J5IHN0cnVjdHVyZSAqLworCVNobWVt UmVxdWVzdFN0cnVjdCgubmFtZSA9ICJyZXNpemFibGVfc2htZW0iLAorCQkJCQkgICAuc2l6ZSA9 IHVzZV91bmtub3duX3NpemUgPyBTSE1FTV9BVFRBQ0hfVU5LTk9XTl9TSVpFIDogaW5pdGlhbF9z aXplLAorCQkJCQkgICAubWluaW11bV9zaXplID0gbWluX3NpemUsCisJCQkJCSAgIC5tYXhpbXVt X3NpemUgPSBtYXhfc2l6ZSwKKwkJCQkJICAgLnB0ciA9ICh2b2lkICoqKSAmcmVzaXphYmxlX3No bWVtLAorCQkpOworfQorCisvKgorICogSW5pdGlhbGl6ZSBzaGFyZWQgbWVtb3J5IHN0cnVjdHVy ZQorICovCitzdGF0aWMgdm9pZAorcmVzaXphYmxlX3NobWVtX3NobWVtX2luaXQodm9pZCAqYXJn KQoreworCS8qCisJICogU2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmUgc2hvdWxkIGhhdmUgYmVlbiBh bHJlYWR5IGFsbG9jYXRlZC4gSW5pdGlhbGl6ZQorCSAqIGl0LgorCSAqLworCUFzc2VydChyZXNp emFibGVfc2htZW0gIT0gTlVMTCk7CisKKwlyZXNpemFibGVfc2htZW0tPm51bV9lbnRyaWVzID0g dGVzdF9pbml0aWFsX2VudHJpZXM7CisJbWVtc2V0KHJlc2l6YWJsZV9zaG1lbS0+ZGF0YSwgMCwg bXVsX3NpemUodGVzdF9pbml0aWFsX2VudHJpZXMsIFRFU1RfRU5UUllfU0laRSkpOworfQorCisv KgorICogUmVzaXplIHRoZSBzaGFyZWQgbWVtb3J5IHN0cnVjdHVyZSB0byBhY2NvbW1vZGF0ZSB0 aGUgc3BlY2lmaWVkIG51bWJlciBvZgorICogZW50cmllcy4KKyAqCisgKiBPbiB0aGUgcGxhZm9y bXMgd2hpY2ggZG8gbm90IHN1cHBvcnQgcmVzaXphYmxlIHNoYXJlZCBtZW1vcnksCisgKiBTaG1l bVJlc2l6ZVN0cnVjdCgpIHdpbGwgcmFpc2UgYW4gZXJyb3IsIHNvIHRoaXMgZnVuY3Rpb24gd2ls bCBmYWlsIGlmIHRoZQorICogY2FsbGVyIHRyaWVzIHRvIHJlc2l6ZSB0aGUgc3RydWN0dXJlLgor ICovCitEYXR1bQorcmVzaXphYmxlX3NobWVtX3Jlc2l6ZShQR19GVU5DVElPTl9BUkdTKQorewor CWludDMyCQluZXdfZW50cmllcyA9IFBHX0dFVEFSR19JTlQzMigwKTsKKwlTaXplCQluZXdfc2l6 ZTsKKworCWlmICghcmVzaXphYmxlX3NobWVtKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJj b2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCSBlcnJt c2coInJlc2l6YWJsZV9zaG1lbSBpcyBub3QgaW5pdGlhbGl6ZWQiKSkpOworCisJbmV3X3NpemUg PSBhZGRfc2l6ZShvZmZzZXRvZihUZXN0UmVzaXphYmxlU2htZW1TdHJ1Y3QsIGRhdGEpLAorCQkJ CQkJbXVsX3NpemUobmV3X2VudHJpZXMsIFRFU1RfRU5UUllfU0laRSkpOworCVNobWVtUmVzaXpl U3RydWN0KCJyZXNpemFibGVfc2htZW0iLCBuZXdfc2l6ZSk7CisJcmVzaXphYmxlX3NobWVtLT5u dW1fZW50cmllcyA9IG5ld19lbnRyaWVzOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KKworLyoK KyAqIFdyaXRlIHRoZSBnaXZlbiBpbnRlZ2VyIHZhbHVlIHRvIGFsbCBlbnRyaWVzIGluIHRoZSBk YXRhIGFycmF5LgorICovCitEYXR1bQorcmVzaXphYmxlX3NobWVtX3dyaXRlKFBHX0ZVTkNUSU9O X0FSR1MpCit7CisJaW50MzIJCWVudHJ5X3ZhbHVlID0gUEdfR0VUQVJHX0lOVDMyKDApOworCWlu dDMyCQlpOworCisJaWYgKCFyZXNpemFibGVfc2htZW0pCisJCWVyZXBvcnQoRVJST1IsCisJCQkJ KGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJ IGVycm1zZygicmVzaXphYmxlX3NobWVtIGlzIG5vdCBpbml0aWFsaXplZCIpKSk7CisKKwkvKiBX cml0ZSB0aGUgdmFsdWUgdG8gYWxsIGN1cnJlbnQgZW50cmllcyAqLworCWZvciAoaSA9IDA7IGkg PCByZXNpemFibGVfc2htZW0tPm51bV9lbnRyaWVzOyBpKyspCisJCXJlc2l6YWJsZV9zaG1lbS0+ ZGF0YVtpXSA9IGVudHJ5X3ZhbHVlOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KKworLyoKKyAq IENoZWNrIHdoZXRoZXIgdGhlIGZpcnN0ICdlbnRyeV9jb3VudCcgZW50cmllcyBhbGwgaGF2ZSB0 aGUgZXhwZWN0ZWQgJ2VudHJ5X3ZhbHVlJy4KKyAqIFJldHVybnMgdHJ1ZSBpZiBhbGwgbWF0Y2gs IGZhbHNlIG90aGVyd2lzZS4KKyAqLworRGF0dW0KK3Jlc2l6YWJsZV9zaG1lbV9yZWFkKFBHX0ZV TkNUSU9OX0FSR1MpCit7CisJaW50MzIJCWVudHJ5X2NvdW50ID0gUEdfR0VUQVJHX0lOVDMyKDAp OworCWludDMyCQllbnRyeV92YWx1ZSA9IFBHX0dFVEFSR19JTlQzMigxKTsKKwlpbnQzMgkJaTsK KworCWlmIChyZXNpemFibGVfc2htZW0gPT0gTlVMTCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQko ZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkg ZXJybXNnKCJyZXNpemFibGVfc2htZW0gaXMgbm90IGluaXRpYWxpemVkIikpKTsKKworCWlmIChl bnRyeV9jb3VudCA8IDAgfHwgZW50cnlfY291bnQgPiByZXNpemFibGVfc2htZW0tPm51bV9lbnRy aWVzKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJB TUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coImVudHJ5X2NvdW50ICVkIGlzIG91dCBvZiByYW5n ZSAoMC4uJWQpIiwgZW50cnlfY291bnQsIHJlc2l6YWJsZV9zaG1lbS0+bnVtX2VudHJpZXMpKSk7 CisKKwlmb3IgKGkgPSAwOyBpIDwgZW50cnlfY291bnQ7IGkrKykKKwl7CisJCWlmIChyZXNpemFi bGVfc2htZW0tPmRhdGFbaV0gIT0gZW50cnlfdmFsdWUpCisJCQlQR19SRVRVUk5fQk9PTChmYWxz ZSk7CisJfQorCisJUEdfUkVUVVJOX0JPT0wodHJ1ZSk7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhl IG1lbW9yeSBtYXBwZWQgYWdhaW5zdCB0aGUgbWFpbiBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgaW4g dGhpcworICogYmFja2VuZC4KKyAqCisgKiBUaGUgVk1BIGNvbnRhaW5pbmcgb3VyIHJlc2l6YWJs ZV9zaG1lbSBwb2ludGVyIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBtYWluCisgKiBtZW1vcnkg c2VnbWVudC4gIFJTUyArIFN3YXAgKGluIGJ5dGVzKSBmb3IgdGhhdCBWTVMgZnJvbSAgL3Byb2Mv c2VsZi9zbWFwcyBpcworICogcmV0dXJuZWQuCisgKi8KK0RhdHVtCityZXNpemFibGVfc2htZW1f dXNhZ2UoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlGSUxFCSAgICpmOworCWNoYXIJCWxpbmVbMjU2 XTsKKwlpbnQ2NAkJcnNzX2tiID0gLTE7CisJaW50NjQJCXN3YXBfa2IgPSAtMTsKKwl1aW50cHRy X3QJdGFyZ2V0ID0gKHVpbnRwdHJfdCkgcmVzaXphYmxlX3NobWVtOworCWJvb2wJCWluX3Rhcmdl dF92bWEgPSBmYWxzZTsKKwlzaXplX3QJCXJlc3VsdDsKKworCWYgPSBmb3BlbigiL3Byb2Mvc2Vs Zi9zbWFwcyIsICJyIik7CisJaWYgKGYgPT0gTlVMTCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQko ZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3Qgb3BlbiAv cHJvYy9zZWxmL3NtYXBzOiAlbSIpKSk7CisKKwl3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxp bmUpLCBmKSAhPSBOVUxMKQorCXsKKwkJdW5zaWduZWQgbG9uZyBzdGFydDsKKwkJdW5zaWduZWQg bG9uZyBlbmQ7CisKKwkJaWYgKHNzY2FuZihsaW5lLCAiJWx4LSVseCIsICZzdGFydCwgJmVuZCkg PT0gMikKKwkJeworCQkJaW5fdGFyZ2V0X3ZtYSA9ICh0YXJnZXQgPj0gc3RhcnQgJiYgdGFyZ2V0 IDwgZW5kKTsKKwkJfQorCQllbHNlIGlmIChpbl90YXJnZXRfdm1hKQorCQl7CisJCQlpZiAocnNz X2tiID09IC0xKQorCQkJCXNzY2FuZihsaW5lLCAiUnNzOiAlbGQga0IiLCAmcnNzX2tiKTsKKwkJ CWlmIChzd2FwX2tiID09IC0xKQorCQkJCXNzY2FuZihsaW5lLCAiU3dhcDogJWxkIGtCIiwgJnN3 YXBfa2IpOworCQkJaWYgKHJzc19rYiA+PSAwICYmIHN3YXBfa2IgPj0gMCkKKwkJCQlicmVhazsK KwkJfQorCX0KKworCWZjbG9zZShmKTsKKworCXJlc3VsdCA9IHJzc19rYiA+PSAwID8gbXVsX3Np emUocnNzX2tiLCAxMDI0KSA6IDA7CisJcmVzdWx0ID0gYWRkX3NpemUocmVzdWx0LCBzd2FwX2ti ID49IDAgPyBtdWxfc2l6ZShzd2FwX2tiLCAxMDI0KSA6IDApOworCisJUEdfUkVUVVJOX0lOVDY0 KHJlc3VsdCk7Cit9CisKKy8qCisgKiByZXNpemFibGVfc2htZW1fcGFnZXNpemUoKSAtIEdldCB0 aGUgc2hhcmVkIG1lbW9yeSBwYWdlIHNpemUKKyAqLworRGF0dW0KK3Jlc2l6YWJsZV9zaG1lbV9w YWdlc2l6ZShQR19GVU5DVElPTl9BUkdTKQoreworCVBHX1JFVFVSTl9JTlQzMihwZ19nZXRfc2ht ZW1fcGFnZXNpemUoKSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Jlc2l6YWJs ZV9zaG1lbS9yZXNpemFibGVfc2htZW0uY29udHJvbCBiL3NyYy90ZXN0L21vZHVsZXMvcmVzaXph YmxlX3NobWVtL3Jlc2l6YWJsZV9zaG1lbS5jb250cm9sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi44MDMxMzAzZmUwZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0 L21vZHVsZXMvcmVzaXphYmxlX3NobWVtL3Jlc2l6YWJsZV9zaG1lbS5jb250cm9sCkBAIC0wLDAg KzEsNCBAQAorIyByZXNpemFibGVfc2htZW0gZXh0ZW5zaW9uIHRlc3QgbW9kdWxlCitjb21tZW50 ID0gJ3Rlc3QgbW9kdWxlIGZvciB0ZXN0aW5nIHJlc2l6YWJsZSBzaGFyZWQgbWVtb3J5IHN0cnVj dHVyZSBmdW5jdGlvbmFsaXR5JworZGVmYXVsdF92ZXJzaW9uID0gJzEuMCcKK21vZHVsZV9wYXRo bmFtZSA9ICckbGliZGlyL3Jlc2l6YWJsZV9zaG1lbScKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21v ZHVsZXMvcmVzaXphYmxlX3NobWVtL3QvMDAxX3Jlc2l6YWJsZV9zaG1lbS5wbCBiL3NyYy90ZXN0 L21vZHVsZXMvcmVzaXphYmxlX3NobWVtL3QvMDAxX3Jlc2l6YWJsZV9zaG1lbS5wbApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMjRiZWE5MWE0MDEKLS0tIC9kZXYvbnVs bAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Jlc2l6YWJsZV9zaG1lbS90LzAwMV9yZXNpemFibGVf c2htZW0ucGwKQEAgLTAsMCArMSwyNDEgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDI1LTIwMjYsIFBv c3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2Fy bmluZ3MgRkFUQUwgPT4gJ2FsbCc7CisKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwor dXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKKyMgVGVzdCBy ZXNpemFibGUgc2hhcmVkIG1lbW9yeSBmdW5jdGlvbmFsaXR5LCBib3RoIHdoZW4gbG9hZGVkIGF0 IHN0YXJ0dXAgdmlhCisjIHNoYXJlZF9wcmVsb2FkX2xpYnJhcmllcyBhbmQgd2hlbiBsb2FkZWQg YWZ0ZXIgc3RhcnR1cCAobGF0ZSBhbGxvY2F0aW9uKS4KKworIyBWZXJpZnkgdGhhdCBSc3NTaG1l bSBkb2VzIG5vdCBleGNlZWQgdGhlIHRvdGFsIGFsbG9jYXRlZCBzaGFyZWQgbWVtb3J5LgorIyBB bGxvY2F0ZWQgc2hhcmVkIG1lbW9yeSBzaG91bGQgYmUgbW9zdGx5IHRoZSBtZW1vcnkgYWxsb2Nh dGVkIHRvIHRoZQorIyByZXNpemFibGVfc2htZW0gc3RydWN0dXJlLiBBbnkgbGFyZ2UgaW5jcmVh c2UgaW4gZXhwZWN0ZWQgUnNzU2htZW0gc2hvdWxkCisjIHJlZmxlY3QgdGhlIHVuZXhwZWN0ZWQg aW5jcmVhc2UgaW4gbWVtb3J5IGFsbG9jYXRlZCB0byB0aGUgcmVzaXphYmxlX3NobWVtCisjIHN0 cnVjdHVyZS4KK3N1YiBjaGVja19zaG1lbV91c2FnZQoreworCW15ICgkc2Vzc2lvbiwgJGxhYmVs LCAkbm9kZSkgPSBAXzsKKworCW15ICRyc3Nfc2htZW0gPSAkc2Vzc2lvbi0+cXVlcnlfc2FmZSgn U0VMRUNUIHJlc2l6YWJsZV9zaG1lbV91c2FnZSgpOycsCisJCQkJCQkJCQkJIHZlcmJvc2UgPT4g MCk7CisJbXkgJHRvdGFsX2FsbG9jID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkJ CQkJCQkJICAgIlNFTEVDVCBzdW0oYWxsb2NhdGVkX3NpemUpIEZST00gcGdfc2htZW1fYWxsb2Nh dGlvbnM7Iik7CisKKwlub3RlICIkbGFiZWw6IFJzc1NobWVtPSRyc3Nfc2htZW0sIHN1bShhbGxv Y2F0ZWRfc2l6ZSk9JHRvdGFsX2FsbG9jIjsKKwlvaygkcnNzX3NobWVtIDw9ICR0b3RhbF9hbGxv YywgIiRsYWJlbDogUnNzU2htZW0gZG9lcyBub3QgZXhjZWVkIHRvdGFsIGFsbG9jYXRlZCBzaXpl Iik7Cit9CisKKyMgVGVzdCBhIHJlc2l6ZSBvcGVyYXRpb246IHJlc2l6ZSwgdmVyaWZ5IG9sZCBk YXRhLCB3cml0ZSBuZXcgZGF0YSwgdmVyaWZ5CisjIG5ldyBkYXRhLCBhbmQgY2hlY2sgc2htZW0g dXNhZ2UuICBSZXR1cm5zIHVwZGF0ZWQgKCRudW1fZW50cmllcywgJHZhbHVlKS4KK3N1YiB0ZXN0 X3Jlc2l6ZQoreworCW15ICgkbm9kZSwgJHByZWZpeCwgJG9sZF9udW1fZW50cmllcywgJG9sZF92 YWx1ZSwgJG5ld19udW1fZW50cmllcywgJG5ld192YWx1ZSwgJGxhYmVsKSA9IEBfOworCisJJGxh YmVsID0gIiRwcmVmaXg6ICRsYWJlbCI7CisKKwlteSAkc2Vzc2lvbjEgPSAkbm9kZS0+YmFja2dy b3VuZF9wc3FsKCdwb3N0Z3JlcycpOworCW15ICRzZXNzaW9uMiA9ICRub2RlLT5iYWNrZ3JvdW5k X3BzcWwoJ3Bvc3RncmVzJyk7CisKKwkkc2Vzc2lvbjEtPnF1ZXJ5X3NhZmUoIlNFTEVDVCByZXNp emFibGVfc2htZW1fcmVzaXplKCRuZXdfbnVtX2VudHJpZXMpOyIsCisJCQkJCQkgIHZlcmJvc2Ug PT4gMCk7CisKKwkjIE9sZCBkYXRhIHNob3VsZCBzdGlsbCBiZSBpbnRhY3QgaW4gdGhlIChwb3Nz aWJseSBzbWFsbGVyKSBhcmVhCisJbXkgJHJlYWRhYmxlX2VudHJpZXMgPSAoJG5ld19udW1fZW50 cmllcyA8ICRvbGRfbnVtX2VudHJpZXMpID8gJG5ld19udW1fZW50cmllcyA6ICRvbGRfbnVtX2Vu dHJpZXM7CisJaXMoJHNlc3Npb24xLT5xdWVyeV9zYWZlKCJTRUxFQ1QgcmVzaXphYmxlX3NobWVt X3JlYWQoJHJlYWRhYmxlX2VudHJpZXMsICRvbGRfdmFsdWUpOyIsCisJCQkJCQkJIHZlcmJvc2Ug PT4gMCksCisJICAgJ3QnLCAib2xkIGRhdGEgcmVhZGFibGUgYWZ0ZXIgJGxhYmVsIik7CisKKwkk c2Vzc2lvbjItPnF1ZXJ5X3NhZmUoIlNFTEVDVCByZXNpemFibGVfc2htZW1fd3JpdGUoJG5ld192 YWx1ZSk7IiwKKwkJCQkJCSAgdmVyYm9zZSA9PiAwKTsKKwlpcygkc2Vzc2lvbjEtPnF1ZXJ5X3Nh ZmUoIlNFTEVDVCByZXNpemFibGVfc2htZW1fcmVhZCgkbmV3X251bV9lbnRyaWVzLCAkbmV3X3Zh bHVlKTsiLAorCQkJCQkJCSB2ZXJib3NlID0+IDApLAorCSAgICd0JywgIm5ldyBkYXRhIHJlYWRh YmxlIGFmdGVyICRsYWJlbCIpOworCisJY2hlY2tfc2htZW1fdXNhZ2UoJHNlc3Npb24xLCAiJGxh YmVsIChzZXNzaW9uIDEpIiwgJG5vZGUpOworCWNoZWNrX3NobWVtX3VzYWdlKCRzZXNzaW9uMiwg IiRsYWJlbCAoc2Vzc2lvbiAyKSIsICRub2RlKTsKKworCSRzZXNzaW9uMS0+cXVpdDsKKwkkc2Vz c2lvbjItPnF1aXQ7CisKKwlyZXR1cm4gKCRuZXdfbnVtX2VudHJpZXMsICRuZXdfdmFsdWUpOwor fQorCisjIFJ1biB0aGUgZnVsbCBzdWl0ZSBvZiByZXNpemFibGUgc2hhcmVkIG1lbW9yeSB0ZXN0 cyBvbiB0aGUgZ2l2ZW4gbm9kZS4KK3N1YiBydW5fcmVzaXphYmxlX3Rlc3RzCit7CisJbXkgKCRu b2RlLCAkaW5pdGlhbF9lbnRyaWVzLCAkbWF4X2VudHJpZXMsICRwcmVmaXgpID0gQF87CisKKwlt eSAkaGF2ZV9yZXNpemFibGVfc2htZW0gPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdT SE9XIGhhdmVfcmVzaXphYmxlX3NoYXJlZF9tZW1vcnk7JykgZXEgJ29uJzsKKworCW15ICRudW1f ZW50cmllcyA9ICRpbml0aWFsX2VudHJpZXM7CisKKwkjIEJhc2ljIHJlYWQvd3JpdGUgc2hvdWxk IHdvcmsgb24gYWxsIHBsYXRmb3JtcworCW15ICR2YWx1ZSA9IDEwMDsKKwkkbm9kZS0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcmVzaXphYmxlX3NobWVtX3dyaXRlKCR2YWx1ZSk7Iik7 CisJaXMoJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHJlc2l6YWJsZV9zaG1l bV9yZWFkKCRudW1fZW50cmllcywgJHZhbHVlKTsiKSwKKwkgICAndCcsICIkcHJlZml4OiBkYXRh IHJlYWQgYWZ0ZXIgd3JpdGUgc3VjY2Vzc2Z1bCIpOworCisJaWYgKCRoYXZlX3Jlc2l6YWJsZV9z aG1lbSkKKwl7CisJCSMgSW5pdGlhbCBzdHJ1Y3R1cmUgc3RhdGUKKwkJbXkgJHNlc3Npb24xID0g JG5vZGUtPmJhY2tncm91bmRfcHNxbCgncG9zdGdyZXMnKTsKKwkJbXkgJHNlc3Npb24yID0gJG5v ZGUtPmJhY2tncm91bmRfcHNxbCgncG9zdGdyZXMnKTsKKworCQkkdmFsdWUgPSAxMDA7CisJCSMg V3JpdGUgYW5kIHJlYWQgdGhlIGluaXRpYWwgc2V0IG9mIGVudHJpZXMuCisJCSRzZXNzaW9uMS0+ cXVlcnlfc2FmZSgiU0VMRUNUIHJlc2l6YWJsZV9zaG1lbV93cml0ZSgkdmFsdWUpOyIsIHZlcmJv c2UgPT4gMCk7CisJCWlzKCRzZXNzaW9uMi0+cXVlcnlfc2FmZSgiU0VMRUNUIHJlc2l6YWJsZV9z aG1lbV9yZWFkKCRudW1fZW50cmllcywgJHZhbHVlKTsiLAorCQkJCQkJCQkgdmVyYm9zZSA9PiAw KSwKKwkJICAgJ3QnLCAiJHByZWZpeDogZGF0YSByZWFkIGFmdGVyIHdyaXRlIHN1Y2Nlc3NmdWwi KTsKKwkJY2hlY2tfc2htZW1fdXNhZ2UoJHNlc3Npb24xLCAiJHByZWZpeDogaW5pdGlhbCB3cml0 ZSAoc2Vzc2lvbiAxKSIsICRub2RlKTsKKwkJY2hlY2tfc2htZW1fdXNhZ2UoJHNlc3Npb24yLCAi JHByZWZpeDogaW5pdGlhbCB3cml0ZSAoc2Vzc2lvbiAyKSIsICRub2RlKTsKKwkJJHNlc3Npb24x LT5xdWl0OworCQkkc2Vzc2lvbjItPnF1aXQ7CisKKwkJIyBWZXJpZnkgbm8gb3RoZXIgc3RydWN0 dXJlIGlzIHJlc2l6YWJsZQorCQlpcygkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxF Q1QgY291bnQoKikgRlJPTSBwZ19zaG1lbV9hbGxvY2F0aW9ucyBXSEVSRSBuYW1lIDw+ICdyZXNp emFibGVfc2htZW0nIEFORCBtYXhpbXVtX3NpemUgPD4gbWluaW11bV9zaXplOyIpLAorCQkJCQkJ CScwJywgIiRwcmVmaXg6IG5vIG90aGVyIHJlc2l6YWJsZSBzdHJ1Y3R1cmVzIik7CisKKwkJIyBS ZXNpemUgdG8gbWF4aW11bQorCQkoJG51bV9lbnRyaWVzLCAkdmFsdWUpID0gdGVzdF9yZXNpemUo JG5vZGUsICRwcmVmaXgsICRudW1fZW50cmllcywgJHZhbHVlLAorCQkJCQkJCQkJCQkgJG1heF9l bnRyaWVzLCA1MDAsICdyZXNpemUgdG8gbWF4aW11bScpOworCisJCSMgU2hyaW5rIHRvIDc1JSBv ZiBtYXgKKwkJbXkgJHNocmlua19lbnRyaWVzID0gaW50KCRtYXhfZW50cmllcyAqIDMgLyA0KTsK KwkJKCRudW1fZW50cmllcywgJHZhbHVlKSA9IHRlc3RfcmVzaXplKCRub2RlLCAkcHJlZml4LCAk bnVtX2VudHJpZXMsICR2YWx1ZSwKKwkJCQkJCQkJCQkJICRzaHJpbmtfZW50cmllcywgOTk5LCAn c2hyaW5raW5nJyk7CisKKwkJIyBSZXNpemUgdG8gdGhlIHNhbWUgc2l6ZSAobm8tb3ApCisJCSgk bnVtX2VudHJpZXMsICR2YWx1ZSkgPSB0ZXN0X3Jlc2l6ZSgkbm9kZSwgJHByZWZpeCwgJG51bV9l bnRyaWVzLCAkdmFsdWUsCisJCQkJCQkJCQkJCSAkbnVtX2VudHJpZXMsIDE5OTksICduby1vcCBy ZXNpemUnKTsKKworCQkjIFRlc3QgcmVzaXplIGZhaWx1cmUgKGF0dGVtcHQgdG8gcmVzaXplIGJl eW9uZCBtYXggLSBzaG91bGQgZmFpbCkKKwkJbXkgKCRyZXQsICRzdGRvdXQsICRzdGRlcnIpID0K KwkJCSRub2RlLT5wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcmVzaXphYmxlX3NobWVtX3Jlc2l6 ZSgiIC4gKCRtYXhfZW50cmllcyAqIDIpIC4gIik7Iik7CisJCW9rKCRyZXQgIT0gMCB8fCAkc3Rk ZXJyID1+IC9FUlJPUi8sICIkcHJlZml4OiBSZXNpemUgYmV5b25kIG1heGltdW0gZmFpbHMiKTsK Kwl9CisJZWxzZQorCXsKKwkJIyBPbiB1bnN1cHBvcnRlZCBwbGF0Zm9ybXMsIHJlc2l6aW5nIHNo b3VsZCBmYWlsIHdpdGggYSBjbGVhciBlcnJvcgorCQlteSAoJHJldCwgJHN0ZG91dCwgJHN0ZGVy cikgPQorCQkJJG5vZGUtPnBzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCByZXNpemFibGVfc2htZW1f cmVzaXplKCRudW1fZW50cmllcyk7Iik7CisJCW9rKCRyZXQgIT0gMCwgIiRwcmVmaXg6IHJlc2l6 ZSBmYWlscyBvbiB1bnN1cHBvcnRlZCBwbGF0Zm9ybSIpOworCQlsaWtlKCRzdGRlcnIsIHFyL25v dCBzdXBwb3J0ZWQvLCAiJHByZWZpeDogcmVzaXplIGVycm9yIG1lbnRpb25zIG5vdCBzdXBwb3J0 ZWQiKTsKKwl9Cit9CisKKyMjIyBTZXQgdXAgYSB0ZXN0IG5vZGUuCisjCisjQ29uZmlndXJlIG1p bmltYWwgc2hhcmVkIG1lbW9yeSBzbyB0aGF0IHRoZSByZXNpemFibGVfc2htZW0gc3RydWN0dXJl IGRvbWluYXRlcworI2FuZCBhbnkgdW5leHBlY3RlZCBpbmNyZWFzZSBpcyBlYXN5IHRvIGRldGVj dC4KKyMKKyMgQWxzbyBkaXNhYmxlIGh1Z2UgcGFnZXMgc28gdGhhdCBSc3NTaG1lbSBhbmQgYWxs b2NhdGVkX3NpemUgYXJlIGNvbXBhcmFibGUuCisjIFRoZSBsYXR0ZXIgaXMgYWxyZWFkeSBhbGln bmVkIHRvIHRoZSBkZWZhdWx0IHBhZ2Ugc2l6ZS4KKyMjIworbXkgJG5vZGUgPSBQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3Jlc2l6YWJsZV9zaG1lbScpOworJG5vZGUtPmluaXQ7CisK KyRub2RlLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgJ2h1Z2VfcGFnZXMgPSBvZmYn KTsKKyRub2RlLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgJ3NoYXJlZF9idWZmZXJz ID0gMTI4a0InKTsKKyRub2RlLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgJ21heF9j b25uZWN0aW9ucyA9IDUnKTsKKyRub2RlLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywg J21heF93b3JrZXJfcHJvY2Vzc2VzID0gMCcpOworJG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jl c3FsLmNvbmYnLCAnbWF4X3dhbF9zZW5kZXJzID0gMCcpOworJG5vZGUtPmFwcGVuZF9jb25mKCdw b3N0Z3Jlc3FsLmNvbmYnLCAnbWF4X3ByZXBhcmVkX3RyYW5zYWN0aW9ucyA9IDAnKTsKKyRub2Rl LT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgJ21heF9sb2Nrc19wZXJfdHJhbnNhY3Rp b24gPSAxMCcpOworJG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAnbWF4X3By ZWRfbG9ja3NfcGVyX3RyYW5zYWN0aW9uID0gMTAnKTsKKyRub2RlLT5hcHBlbmRfY29uZigncG9z dGdyZXNxbC5jb25mJywgJ3dhbF9idWZmZXJzID0gMzJrQicpOworCisjIyMKKyMgVGVzdCAxOiBT dGFydHVwIGFsbG9jYXRpb24gdmlhIHNoYXJlZF9wcmVsb2FkX2xpYnJhcmllcworIyMjCitteSAk c3RhcnR1cF9pbml0aWFsID0gMjUgKiAxMDI0ICogMTAyNDsKK215ICRzdGFydHVwX21heCA9IDEw MCAqIDEwMjQgKiAxMDI0OworCiskbm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZics ICdzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXMgPSByZXNpemFibGVfc2htZW0nKTsKKyRub2RlLT5h cHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgInJlc2l6YWJsZV9zaG1lbS5pbml0aWFsX2Vu dHJpZXMgPSAkc3RhcnR1cF9pbml0aWFsIik7Ciskbm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVz cWwuY29uZicsICJyZXNpemFibGVfc2htZW0ubWF4X2VudHJpZXMgPSAkc3RhcnR1cF9tYXgiKTsK KyRub2RlLT5zdGFydDsKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0NSRUFURSBFWFRF TlNJT04gcmVzaXphYmxlX3NobWVtOycpOworcnVuX3Jlc2l6YWJsZV90ZXN0cygkbm9kZSwgJHN0 YXJ0dXBfaW5pdGlhbCwgJHN0YXJ0dXBfbWF4LCAnc3RhcnR1cCcpOworCisjIyMKKyMgVGVzdCAy OiBMYXRlIGFsbG9jYXRpb24gKGxvYWRlZCBhZnRlciBzdGFydHVwLCBub3QgaW4gc2hhcmVkX3By ZWxvYWRfbGlicmFyaWVzKS4KKyMgVXNlIG11Y2ggc21hbGxlciBzaXplcyBzaW5jZSBvbmx5IH4x MDBLQiBvZiBzaGFyZWQgbWVtb3J5IGlzIGF2YWlsYWJsZSBmb3IKKyMgc3RydWN0dXJlcyBhbGxv Y2F0ZWQgYWZ0ZXIgc3RhcnR1cC4KKyMjIworbXkgJGxhdGVfaW5pdGlhbCA9IDUgKiAxMDI0Owor bXkgJGxhdGVfbWF4ID0gMTIgKiAxMDI0OworCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs IHFxeworCUFMVEVSIFNZU1RFTSBSRVNFVCBzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXM7CisJQUxU RVIgU1lTVEVNIFNFVCByZXNpemFibGVfc2htZW0uaW5pdGlhbF9lbnRyaWVzID0gJGxhdGVfaW5p dGlhbDsKKwlBTFRFUiBTWVNURU0gU0VUIHJlc2l6YWJsZV9zaG1lbS5tYXhfZW50cmllcyA9ICRs YXRlX21heDsKK30pOworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnRFJPUCBFWFRFTlNJ T04gcmVzaXphYmxlX3NobWVtOycpOworJG5vZGUtPnJlc3RhcnQ7CisKKyRub2RlLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgJ0NSRUFURSBFWFRFTlNJT04gcmVzaXphYmxlX3NobWVtOycpOworcnVu X3Jlc2l6YWJsZV90ZXN0cygkbm9kZSwgJGxhdGVfaW5pdGlhbCwgJGxhdGVfbWF4LCAnbGF0ZScp OworCisjIyMKKyMgVGVzdCBzeXN2IHNoYXJlZCBtZW1vcnkgZG9lcyBub3Qgc3VwcG9ydCByZXNp emFibGUgc2htZW0uICBPbmx5IHJlbGV2YW50IG9uCisjIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQg cmVzaXphYmxlIHNobWVtIChIQVZFX1JFU0laQUJMRV9TSE1FTSksIHNpbmNlIHRoZQorIyBtb2R1 bGUgb25seSBzZXRzIG1heGltdW1fc2l6ZSBpbiB0aGF0IGNhc2UuCisjIyMKK215ICRyZXNpemFi bGVfc2htZW1fYmluYXJ5ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnU0hPVyBoYXZl X3Jlc2l6YWJsZV9zaGFyZWRfbWVtb3J5OycpIGVxICdvbic7CitpZiAoJHJlc2l6YWJsZV9zaG1l bV9iaW5hcnkpCit7CisJIyMjCisJIyBUZXN0IDM6IFZlcmlmeSB0aGF0IENSRUFURSBFWFRFTlNJ T04gZmFpbHMgd2l0aCBzeXN2IHNoYXJlZCBtZW1vcnkKKwkjIHdoZW4gbG9hZGVkIGFmdGVyIHN0 YXJ0dXAgKG5vdCBpbiBzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXMpLgorCSMjIworCSRub2RlLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0RST1AgRVhURU5TSU9OIHJlc2l6YWJsZV9zaG1lbTsnKTsK KworCSMgUmVtb3ZlIHNldHRpbmdzIHRoYXQgd291bGQgY2F1c2UgdGhlIGxpYnJhcnkgdG8gYXV0 by1sb2FkIGF0IHN0YXJ0dXA6CisJIyBzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXMgYW5kIG1vZHVs ZS1wcmVmaXhlZCBHVUNzLiAgQUxURVIgU1lTVEVNIFJFU0VUCisJIyBvbmx5IGFmZmVjdHMgcG9z dGdyZXNxbC5hdXRvLmNvbmYsIHNvIHdlIG11c3QgdXNlIGFkanVzdF9jb25mIHRvIHJlbW92ZQor CSMgZnJvbSBwb3N0Z3Jlc3FsLmNvbmYuCisJJG5vZGUtPmFkanVzdF9jb25mKCdwb3N0Z3Jlc3Fs LmNvbmYnLCAnc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzJywgdW5kZWYpOworCSRub2RlLT5hZGp1 c3RfY29uZigncG9zdGdyZXNxbC5jb25mJywgJ3Jlc2l6YWJsZV9zaG1lbS5pbml0aWFsX2VudHJp ZXMnLCB1bmRlZik7CisJJG5vZGUtPmFkanVzdF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAncmVz aXphYmxlX3NobWVtLm1heF9lbnRyaWVzJywgdW5kZWYpOworCSRub2RlLT5hZGp1c3RfY29uZign cG9zdGdyZXNxbC5hdXRvLmNvbmYnLCAnc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzJywgdW5kZWYp OworCSRub2RlLT5hZGp1c3RfY29uZigncG9zdGdyZXNxbC5hdXRvLmNvbmYnLCAncmVzaXphYmxl X3NobWVtLmluaXRpYWxfZW50cmllcycsIHVuZGVmKTsKKwkkbm9kZS0+YWRqdXN0X2NvbmYoJ3Bv c3RncmVzcWwuYXV0by5jb25mJywgJ3Jlc2l6YWJsZV9zaG1lbS5tYXhfZW50cmllcycsIHVuZGVm KTsKKwkkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxeworCQlBTFRFUiBTWVNURU0gU0VU IHNoYXJlZF9tZW1vcnlfdHlwZSA9ICdzeXN2JzsKKwl9KTsKKworCSRub2RlLT5yZXN0YXJ0Owor CisJaXMoJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnU0hPVyBoYXZlX3Jlc2l6YWJsZV9z aGFyZWRfbWVtb3J5JyksICdvZmYnLAorCQkJCQkJJ2hhdmVfcmVzaXphYmxlX3NoYXJlZF9tZW1v cnkgaXMgb2ZmIHdpdGggc3lzdicpOworCisJbXkgKCRyZXQsICRzdGRvdXQsICRzdGRlcnIpID0K KwkJJG5vZGUtPnBzcWwoJ3Bvc3RncmVzJywgJ0NSRUFURSBFWFRFTlNJT04gcmVzaXphYmxlX3No bWVtOycpOworCW9rKCRyZXQgIT0gMCwgJ0NSRUFURSBFWFRFTlNJT04gZmFpbHMgd2l0aCByZXNp emFibGUgc2htZW0gb24gc3lzdicpOworCWxpa2UoJHN0ZGVyciwgcXIvcmVzaXphYmxlIHNoYXJl ZCBtZW1vcnkgcmVxdWlyZXMgc2hhcmVkX21lbW9yeV90eXBlID0gbW1hcC8sCisJCSdDUkVBVEUg RVhURU5TSU9OIGVycm9yIG1lbnRpb25zIHNoYXJlZF9tZW1vcnlfdHlwZSA9IG1tYXAgcmVxdWly ZW1lbnQnKTsKKworCSMjIworCSMgVGVzdCA0OiBWZXJpZnkgdGhhdCByZXNpemFibGUgc3RydWN0 dXJlcyBhcmUgYWxzbyByZWplY3RlZCB3aXRoIHN5c3YKKwkjIHNoYXJlZCBtZW1vcnkgd2hlbiBs b2FkZWQgYXQgc3RhcnR1cCB2aWEgc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzLgorCSMjIworCSRu b2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXF7CisJCUFMVEVSIFNZU1RFTSBTRVQgc2hhcmVk X3ByZWxvYWRfbGlicmFyaWVzID0gJ3Jlc2l6YWJsZV9zaG1lbSc7CisJCUFMVEVSIFNZU1RFTSBT RVQgcmVzaXphYmxlX3NobWVtLmluaXRpYWxfZW50cmllcyA9ICRzdGFydHVwX2luaXRpYWw7CisJ CUFMVEVSIFNZU1RFTSBTRVQgcmVzaXphYmxlX3NobWVtLm1heF9lbnRyaWVzID0gJHN0YXJ0dXBf bWF4OworCX0pOworCSRub2RlLT5zdG9wOworCisJb2soISRub2RlLT5zdGFydChmYWlsX29rID0+ IDEpLAorCQknc2VydmVyIGZhaWxzIHRvIHN0YXJ0IHdpdGggcmVzaXphYmxlIHNobWVtIG9uIHN5 c3YnKTsKKworCW15ICRsb2cgPSBzbHVycF9maWxlKCRub2RlLT5sb2dmaWxlKTsKKwlsaWtlKCRs b2csIHFyL3Jlc2l6YWJsZSBzaGFyZWQgbWVtb3J5IHJlcXVpcmVzIHNoYXJlZF9tZW1vcnlfdHlw ZSA9IG1tYXAvLAorCQknbG9nIG1lbnRpb25zIHNoYXJlZF9tZW1vcnlfdHlwZSA9IG1tYXAgcmVx dWlyZW1lbnQnKTsKK30KKworZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9t b2R1bGVzL3Rlc3Rfc2htZW0vdC8wMDFfbGF0ZV9zaG1lbV9hbGxvYy5wbCBiL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9zaG1lbS90LzAwMV9sYXRlX3NobWVtX2FsbG9jLnBsCmluZGV4IGMxNTRmNTc2 ODJhLi45MmE4ZjNiNDg3MyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NobWVt L3QvMDAxX2xhdGVfc2htZW1fYWxsb2MucGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3No bWVtL3QvMDAxX2xhdGVfc2htZW1fYWxsb2MucGwKQEAgLTQ1LDUgKzQ1LDM2IEBAIGVsc2UKICAg IG9rKCRhdHRhY2hfY291bnQxID09IDAgJiYgJGF0dGFjaF9jb3VudDIgPT0gMCwgImF0dGFjaCBj YWxsYmFjayBpcyBub3QgY2FsbGVkIHdoZW4gbG9hZGVkIHZpYSBzaGFyZWRfcHJlbG9hZF9saWJy YXJpZXMiKTsKIH0KIAorIyMjCisjIFRlc3QgdGhhdCBhIGZpeGVkLXNpemUgc2hhcmVkIG1lbW9y eSBzdHJ1Y3R1cmUgY2Fubm90IGJlIHJlc2l6ZWQuCisjIE9ubHkgcmVsZXZhbnQgb24gcGxhdGZv cm1zIHRoYXQgc3VwcG9ydCByZXNpemFibGUgc2htZW0uCisjIyMKK215ICRoYXZlX3Jlc2l6YWJs ZV9zaG1lbSA9CisgICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ1NIT1cgaGF2ZV9yZXNp emFibGVfc2hhcmVkX21lbW9yeTsnKSBlcSAnb24nOworCitpZiAoJGhhdmVfcmVzaXphYmxlX3No bWVtKQoreworICAgIyBUcnkgZXhwYW5kaW5nIHRoZSBmaXhlZC1zaXplIHN0cnVjdHVyZQorICAg bXkgKCRyZXQsICRzdGRvdXQsICRzdGRlcnIpID0KKyAgICAgJG5vZGUtPnBzcWwoInBvc3RncmVz IiwgIlNFTEVDVCB0ZXN0X3NobWVtX3Jlc2l6ZV9maXhlZCgxMDAwKTsiKTsKKyAgIGlzbnQoJHJl dCwgMCwgImV4cGFuZGluZyBhIGZpeGVkLXNpemUgc3RydWN0dXJlIGZhaWxzIik7CisgICBsaWtl KCRzdGRlcnIsIHFyL2lzIG5vdCByZXNpemFibGUvLCAiZXhwYW5kIGVycm9yIG1lc3NhZ2UgbWVu dGlvbnMgbm90IHJlc2l6YWJsZSIpOworCisgICAjIFRyeSBzaHJpbmtpbmcgdGhlIGZpeGVkLXNp emUgc3RydWN0dXJlCisgICAoJHJldCwgJHN0ZG91dCwgJHN0ZGVycikgPQorICAgICAkbm9kZS0+ cHNxbCgicG9zdGdyZXMiLCAiU0VMRUNUIHRlc3Rfc2htZW1fcmVzaXplX2ZpeGVkKDEpOyIpOwor ICAgaXNudCgkcmV0LCAwLCAic2hyaW5raW5nIGEgZml4ZWQtc2l6ZSBzdHJ1Y3R1cmUgZmFpbHMi KTsKKyAgIGxpa2UoJHN0ZGVyciwgcXIvaXMgbm90IHJlc2l6YWJsZS8sICJzaHJpbmsgZXJyb3Ig bWVzc2FnZSBtZW50aW9ucyBub3QgcmVzaXphYmxlIik7Cit9CisKKyMjIworIyBUZXN0IHRoYXQg bWluaW11bV9zaXplIGFuZCBtYXhpbXVtX3NpemUgZXF1YWwgc2l6ZSBmb3IgYSBmaXhlZC1zaXpl IHN0cnVjdHVyZQorIyBpbiBwZ19zaG1lbV9hbGxvY2F0aW9ucy4KKyMjIworaXMoJG5vZGUtPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorICAgIlNFTEVDVCBtaW5pbXVtX3NpemUgPSBzaXplIEFORCBt YXhpbXVtX3NpemUgPSBzaXplIEZST00gcGdfc2htZW1fYWxsb2NhdGlvbnMgV0hFUkUgbmFtZSA9 ICd0ZXN0X3NobWVtIGFyZWEnOyIpLAorICAgJ3QnLCAiZml4ZWQtc2l6ZSBzdHJ1Y3R1cmUgaGFz IG1pbmltdW1fc2l6ZSA9IG1heGltdW1fc2l6ZSA9IHNpemUiKTsKKwogJG5vZGUtPnN0b3A7CisK IGRvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NobWVt L3Rlc3Rfc2htZW0tLTEuMC5zcWwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2htZW0vdGVzdF9z aG1lbS0tMS4wLnNxbAppbmRleCAyZDAxZmQ5MjU2Yy4uZTE2OWQwZDc3MzMgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zaG1lbS90ZXN0X3NobWVtLS0xLjAuc3FsCisrKyBiL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9zaG1lbS90ZXN0X3NobWVtLS0xLjAuc3FsCkBAIC03LDMgKzcs NyBAQAogQ1JFQVRFIEZVTkNUSU9OIGdldF90ZXN0X3NobWVtX2F0dGFjaF9jb3VudCgpCiBSRVRV Uk5TIHBnX2NhdGFsb2cuaW50NCBTVFJJQ1QKIEFTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdF IEM7CisKK0NSRUFURSBGVU5DVElPTiB0ZXN0X3NobWVtX3Jlc2l6ZV9maXhlZChwZ19jYXRhbG9n LmludDQpCitSRVRVUk5TIHBnX2NhdGFsb2cudm9pZCBTVFJJQ1QKK0FTICdNT0RVTEVfUEFUSE5B TUUnIExBTkdVQUdFIEM7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2htZW0v dGVzdF9zaG1lbS5jIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NobWVtL3Rlc3Rfc2htZW0uYwpp bmRleCA5YmQ0MDEyYjQzNS4uMGRkNDY5ODkxZWUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9zaG1lbS90ZXN0X3NobWVtLmMKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3No bWVtL3Rlc3Rfc2htZW0uYwpAQCAtOTksMyArOTksMTcgQEAgZ2V0X3Rlc3Rfc2htZW1fYXR0YWNo X2NvdW50KFBHX0ZVTkNUSU9OX0FSR1MpCiAJCWVsb2coRVJST1IsICJzaG1lbSBhcmVhIG5vdCB5 ZXQgaW5pdGlhbGl6ZWQiKTsKIAlQR19SRVRVUk5fSU5UMzIoVGVzdFNobWVtLT5hdHRhY2hfY291 bnQpOwogfQorCisvKgorICogQXR0ZW1wdCB0byByZXNpemUgdGhlIGZpeGVkLXNpemUgc2hhcmVk IG1lbW9yeSBzdHJ1Y3R1cmUuICBUaGlzIHNob3VsZAorICogZmFpbCBiZWNhdXNlIHRoZSBzdHJ1 Y3R1cmUgd2FzIG5vdCBhbGxvY2F0ZWQgd2l0aCBhIG1heGltdW1fc2l6ZS4KKyAqLworUEdfRlVO Q1RJT05fSU5GT19WMSh0ZXN0X3NobWVtX3Jlc2l6ZV9maXhlZCk7CitEYXR1bQordGVzdF9zaG1l bV9yZXNpemVfZml4ZWQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlpbnQzMgkJbmV3X3NpemUgPSBQ R19HRVRBUkdfSU5UMzIoMCk7CisKKwlTaG1lbVJlc2l6ZVN0cnVjdCgidGVzdF9zaG1lbSBhcmVh IiwgbmV3X3NpemUpOworCVBHX1JFVFVSTl9WT0lEKCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv cnVsZXMub3V0CmluZGV4IGE2NWE1YmYwYzRmLi5hODgyZDc5OTEzMyAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9ydWxlcy5vdXQKQEAgLTE3NzAsOCArMTc3MCwxMSBAQCBwZ19zaGFkb3d8IFNFTEVD VCBwZ19hdXRoaWQucm9sbmFtZSBBUyB1c2VuYW1lLAogcGdfc2htZW1fYWxsb2NhdGlvbnN8IFNF TEVDVCBuYW1lLAogICAgIG9mZiwKICAgICBzaXplLAotICAgIGFsbG9jYXRlZF9zaXplCi0gICBG Uk9NIHBnX2dldF9zaG1lbV9hbGxvY2F0aW9ucygpIHBnX2dldF9zaG1lbV9hbGxvY2F0aW9ucyhu YW1lLCBvZmYsIHNpemUsIGFsbG9jYXRlZF9zaXplKTsKKyAgICBhbGxvY2F0ZWRfc2l6ZSwKKyAg ICBtaW5pbXVtX3NpemUsCisgICAgbWF4aW11bV9zaXplLAorICAgIHJlc2VydmVkX3NwYWNlCisg ICBGUk9NIHBnX2dldF9zaG1lbV9hbGxvY2F0aW9ucygpIHBnX2dldF9zaG1lbV9hbGxvY2F0aW9u cyhuYW1lLCBvZmYsIHNpemUsIGFsbG9jYXRlZF9zaXplLCBtaW5pbXVtX3NpemUsIG1heGltdW1f c2l6ZSwgcmVzZXJ2ZWRfc3BhY2UpOwogcGdfc2htZW1fYWxsb2NhdGlvbnNfbnVtYXwgU0VMRUNU IG5hbWUsCiAgICAgbnVtYV9ub2RlLAogICAgIHNpemUKZGlmZiAtLWdpdCBhL3NyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QK aW5kZXggOWU2YTM5ZjU2MDguLmM1YTg0YTJhZTE3IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dApAQCAtMzE1Myw2ICszMTUzLDcgQEAgVGVzdERTTVJlZ2lzdHJ5SGFzaEVudHJ5CiBUZXN0RFNN UmVnaXN0cnlTdHJ1Y3QKIFRlc3REZWNvZGluZ0RhdGEKIFRlc3REZWNvZGluZ1R4bkRhdGEKK1Rl c3RSZXNpemFibGVTaG1lbVN0cnVjdAogVGVzdFNobWVtRGF0YQogVGVzdFNwZWMKIFRlc3RWYWx1 ZVR5cGUKCmJhc2UtY29tbWl0OiBiNmNjZDMwZDhmZjY0MjJhZDBmNzljZTJmYzgwMWYyNDM3ZDkw NjY0Ci0tIAoyLjM0LjEKCg== --000000000000628762064edbf064--