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.94.2) (envelope-from ) id 1ujnzJ-00CCTm-7g for pgsql-hackers@arkaria.postgresql.org; Wed, 06 Aug 2025 23:56:05 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1ujnzH-001hdI-4r for pgsql-hackers@arkaria.postgresql.org; Wed, 06 Aug 2025 23:56:03 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1ujnzG-001hd3-IN for pgsql-hackers@lists.postgresql.org; Wed, 06 Aug 2025 23:56:02 +0000 Received: from mail-qv1-xf36.google.com ([2607:f8b0:4864:20::f36]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1ujnzC-0019Z2-1c for pgsql-hackers@lists.postgresql.org; Wed, 06 Aug 2025 23:56:01 +0000 Received: by mail-qv1-xf36.google.com with SMTP id 6a1803df08f44-70748a0e13dso4347206d6.1 for ; Wed, 06 Aug 2025 16:55:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1754524555; x=1755129355; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=JztzIB1pCUZ/YA9RPSseHNL6uUXwDERuYqD68tMarIU=; b=NbZ+neRiIPJo+A0RfiB94rQ7w4ZOB94JVgYBEp7s+TDliv+Xc+q9Cv+CsYKT430+5o SyMCvJgrvVBTa71uiNYGVnjiAFNC2g28ddfgzPka4EGCJfqjowL1p4+tAGvMrkBjjoYH j3C7287OTFy0ZZKKlYj/bzUqramh2mVDS5dqzNdYFvUed+JM2GSpJVLo8oed48zjWeAJ RgJwciSG2a3e3tNRanVG+9lcLGVg7x/nMZwVJi3r8PM7aUuFDbI14NvpF0xLBXmXGjvJ rmSDEhxGSiw5GsllYOUDGhfYwgugXvmmKCcKjl3Rik1ma9IVrxie1auroD2Fiu4W3QjZ +K5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754524556; x=1755129356; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=JztzIB1pCUZ/YA9RPSseHNL6uUXwDERuYqD68tMarIU=; b=IfgUqpPJRkjeyKofqzpoHVhghKORshWUL/9fu9P7rPEIwhWSiO+O/0/3C1idfZ71ua 5we72T8rziCmGV60undZ/FZzAaAXDFcOxFnNhcG4m/4uABtA0GZKbMQPAcUouW0Kz5gm doNhC0IgdS4UA3pLeAMITPN4tJ0J8NQ4GltxycToV8hxk80Rq4dybU4d/WwvlaBl4/6k ldymzxgG8c1ZACrbjAur507S5z3J8+utYrElReqIfu4CtYjrgVKWShHulhv+wiS/k7n1 DrTS8Jk+60a/iu4PoDLFyxdD5WNw97xN9HV2FciJkBGdWmibbVOS30JjhKyQohpnxQXZ 6dkQ== X-Gm-Message-State: AOJu0YzTXJ/l8goOiOE5UEfltvMoGOtXf21MXUrxELneigQRcYYTsndq CreKzpL3s7A8T8souKr2v/1QvcFkh0qnSJXIsePAgp1mNh3Q6SbTQbsxsLiEj3P3XXFjpylQkw0 YvSFjJNzKCsJHaq6hlGrEzcHaGGG0UYr2VOHp240euQU/eCkqjCI= X-Gm-Gg: ASbGncsJetrNPxnKyft7SsG0oIOVoeTS8/JGe/kk2zpDvn7wXCOH0jtRG0N3Zj4XMzv E1I0HjwLS9ofAAirg9SLOLEcvGE+B0qOwKJ7iPMUW+NNEtGAgdbsgGRpSn/cn+2ehBcm6gIABDj FEtz2NwB+fP2QCIKX5TSmhiaBrvqWsjadN6UeYCrTJus4bMWjWb+zcb/tEBgdn3RImIOOykzv6V xLQvyA= X-Google-Smtp-Source: AGHT+IFFHIsG1KtK2DjdWyFgrltdBjPnsMBSOIOoZw+5YL0JHW30VtQVQ4LvozK5v9f8xi4x4kA/e+vKJq4FcUmD9cU= X-Received: by 2002:a05:6214:3003:b0:704:8f24:f03d with SMTP id 6a1803df08f44-709795389abmr91565506d6.16.1754524555421; Wed, 06 Aug 2025 16:55:55 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Jacob Champion Date: Wed, 6 Aug 2025 16:55:44 -0700 X-Gm-Features: Ac12FXyLQhpC0KvYxswmf00kJW-RKMR78u6iZ-j7XK_oG4_qX9a6PMcjNJnRLqM Message-ID: Subject: Re: [PATCH] OAuth: fix performance bug with stuck multiplexer events To: Thomas Munro Cc: PostgreSQL Hackers , Daniel Gustafsson , Peter Eisentraut Content-Type: multipart/mixed; boundary="000000000000e06f93063bbb14b3" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000e06f93063bbb14b3 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Aug 6, 2025 at 9:13=E2=80=AFAM Jacob Champion wrote: > Maybe "drain" would no longer be the > verb to use there. I keep describing this as "combing" the queue when I talk about it in person, so v3-0001 renames this new operation to comb_multiplexer(). And the CI (plus the more strenuous TLS tests) confirms that the callback count is still stable with this weaker guarantee, so I've gotten rid of the event-counting code. Now that I'm no longer counting events, I can collapse the changes to register_socket(). I can't revert those changes entirely, because then we regress the case where Curl switches a socket from IN to OUT (this is enforced by the new unit tests). But I'm not sure that the existing comment adequately explained that fix anyway, and I didn't remember to call it out in my initial email, so I've split it out into v3-0002. It's much smaller. The tests (now in 0005) have been adjusted for the new "combing" behavior, and I've added a case to ensure that multiple stale events are swept up by a single call to comb_multiplexer(). Thanks! --Jacob --000000000000e06f93063bbb14b3 Content-Type: text/plain; charset="US-ASCII"; name="since-v2.diff.txt" Content-Disposition: attachment; filename="since-v2.diff.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_me0mg7a00 MTogIDM3OWMxMmI1ZDI2IDwgLTogIC0tLS0tLS0tLS0tIG9hdXRoOiBSZW1vdmUgc3RhbGUgZXZl bnRzIGZyb20gdGhlIGtxdWV1ZSBtdWx0aXBsZXhlcgotOiAgLS0tLS0tLS0tLS0gPiAxOiAgYzVj ZGNjZmUzNzQgb2F1dGg6IFJlbW92ZSBzdGFsZSBldmVudHMgZnJvbSB0aGUga3F1ZXVlIG11bHRp cGxleGVyCi06ICAtLS0tLS0tLS0tLSA+IDI6ICA3NzI1ZTBjMTczYiBvYXV0aDogRW5zdXJlIHVu dXNlZCBzb2NrZXQgcmVnaXN0cmF0aW9ucyBhcmUgcmVtb3ZlZAoyOiAgZjMwMzE3ZDcyNjUgISAz OiAgNmNjZjdhNWQxNTYgb2F1dGg6IFJlbW92ZSBleHBpcmVkIHRpbWVycyBmcm9tIHRoZSBtdWx0 aXBsZXhlcgogICAgQEAgc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3VybC5jOiBw Z19mZV9ydW5fb2F1dGhfZmxvd19pbXBsKFBHY29ubiAqY29ubikKICAgICArCQkJCQkgKiBlZGdl LXRyaWdnZXJlZCkgdGltZW91dHMsIGFuZCBvdXJzIGFyZSBsZXZlbC10cmlnZ2VyZWQKICAgICAr CQkJCQkgKiB2aWEgdGhlIG11eC4KICAgICArCQkJCQkgKgogICAgLSsJCQkJCSAqIFRoaXMgY2Fu J3QgYmUgY29tYmluZWQgd2l0aCB0aGUgZHJhaW5fc29ja2V0X2V2ZW50cygpCiAgICAtKwkJCQkJ ICogY2FsbCBiZWxvdzogd2UgbWlnaHQgYWNjaWRlbnRhbGx5IGNsZWFyIGEgc2hvcnQgdGltZW91 dAogICAgLSsJCQkJCSAqIHRoYXQgd2FzIGJvdGggc2V0IGFuZCBleHBpcmVkIGR1cmluZyB0aGUg Y2FsbCB0bwogICAgKysJCQkJCSAqIFRoaXMgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCB0aGUgY29t Yl9tdWx0aXBsZXhlcigpIGNhbGwKICAgICsrCQkJCQkgKiBiZWxvdzogd2UgbWlnaHQgYWNjaWRl bnRhbGx5IGNsZWFyIGEgc2hvcnQgdGltZW91dCB0aGF0CiAgICArKwkJCQkJICogd2FzIGJvdGgg c2V0IGFuZCBleHBpcmVkIGR1cmluZyB0aGUgY2FsbCB0bwogICAgICsJCQkJCSAqIGRyaXZlX3Jl cXVlc3QoKS4KICAgICArCQkJCQkgKi8KICAgICArCQkJCQlpZiAoIWRyYWluX3RpbWVyX2V2ZW50 cyhhY3R4LCBOVUxMKSkKMzogIGQyNDNkMjg5NjRkICEgNDogIDJiZTk5M2I4ZjA3IG9hdXRoOiBU cmFjayB0b3RhbCBjYWxsIGNvdW50IGR1cmluZyBhIGNsaWVudCBmbG93CiAgICBAQCBNZXRhZGF0 YQogICAgICAjIyBDb21taXQgbWVzc2FnZSAjIwogICAgICAgICBvYXV0aDogVHJhY2sgdG90YWwg Y2FsbCBjb3VudCBkdXJpbmcgYSBjbGllbnQgZmxvdwogICAgIAogICAgLSAgICBUcmFja2luZyBk b3duIHRoZSBidWdzIHRoYXQgbGVkIHRvIHRoZSBhZGRpdGlvbiBvZiBkcmFpbl9zb2NrZXRfZXZl bnRzKCkKICAgICsgICAgVHJhY2tpbmcgZG93biB0aGUgYnVncyB0aGF0IGxlZCB0byB0aGUgYWRk aXRpb24gb2YgY29tYl9tdWx0aXBsZXhlcigpCiAgICAgICAgIGFuZCBkcmFpbl90aW1lcl9ldmVu dHMoKSB3YXMgZGlmZmljdWx0LCBiZWNhdXNlIGFuIGluZWZmaWNpZW50IGZsb3cgaXMKICAgICAg ICAgbm90IHZpc2libHkgZGlmZmVyZW50IGZyb20gb25lIHRoYXQgaXMgd29ya2luZyBwcm9wZXJs eS4gVG8gaGVscAogICAgICAgICBtYWludGFpbmVycyBub3RpY2Ugd2hlbiBzb21ldGhpbmcgaGFz IGdvbmUgd3JvbmcsIHRyYWNrIHRoZSBudW1iZXIgb2YKICAgIEBAIHNyYy9pbnRlcmZhY2VzL2xp YnBxLW9hdXRoL29hdXRoLWN1cmwuYzogc3RydWN0IGFzeW5jX2N0eAogICAgICAJYm9vbAkJdXNl ZF9iYXNpY19hdXRoOwkvKiBkaWQgd2Ugc2VuZCBhIGNsaWVudCBzZWNyZXQ/ICovCiAgICAgIAli b29sCQlkZWJ1Z2dpbmc7CQkvKiBjYW4gd2UgZ2l2ZSB1bnNhZmUgZGV2ZWxvcGVyIGFzc2lzdGFu Y2U/ICovCiAgICAgKwlpbnQJCQlkYmdfbnVtX2NhbGxzOwkvKiAoZGVidWcgbW9kZSkgaG93IG1h bnkgdGltZXMgd2VyZSB3ZSBjYWxsZWQ/ICovCiAgICArIH07CiAgICAgIAogICAgLSAjaWYgZGVm aW5lZChIQVZFX1NZU19FVkVOVF9IKQogICAgLSAJaW50CQkJbmV2ZW50czsJCS8qIGhvdyBtYW55 IGV2ZW50cyBhcmUgd2Ugd2FpdGluZyBvbj8gKi8KICAgICsgLyoKICAgICBAQCBzcmMvaW50ZXJm YWNlcy9saWJwcS1vYXV0aC9vYXV0aC1jdXJsLmM6IFBvc3RncmVzUG9sbGluZ1N0YXR1c1R5cGUK ICAgICAgcGdfZmVfcnVuX29hdXRoX2Zsb3coUEdjb25uICpjb25uKQogICAgICB7CiAgICBAQCBz cmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9vYXV0aC1jdXJsLmM6IHBnX2ZlX3J1bl9vYXV0aF9m bG93KFBHY29ubiAqY29ubikKICAgICAgCXJlc3VsdCA9IHBnX2ZlX3J1bl9vYXV0aF9mbG93X2lt cGwoY29ubik7CiAgICAgIAogICAgICsJLyoKICAgIC0rCSAqIFRvIGFzc2lzdCB3aXRoIGZpbmRp bmcgYnVncyBpbiBkcmFpbl9zb2NrZXRfZXZlbnRzKCkgYW5kCiAgICArKwkgKiBUbyBhc3Npc3Qg d2l0aCBmaW5kaW5nIGJ1Z3MgaW4gY29tYl9tdWx0aXBsZXhlcigpIGFuZAogICAgICsJICogZHJh aW5fdGltZXJfZXZlbnRzKCksIHdoZW4gd2UncmUgaW4gZGVidWcgbW9kZSwgdHJhY2sgdGhlIHRv dGFsIG51bWJlcgogICAgICsJICogb2YgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbiBhbmQgcHJpbnQg dGhhdCBhdCB0aGUgZW5kIG9mIHRoZSBmbG93LgogICAgICsJICoKNDogIGNhNmZkMjM3NjUzICEg NTogIDUwMjU3YmYzMmViIG9hdXRoOiBBZGQgdW5pdCB0ZXN0cyBmb3IgbXVsdGlwbGV4ZXIgaGFu ZGxpbmcKICAgIEBAIHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL3Rlc3Qtb2F1dGgtY3VybC5j IChuZXcpCiAgICAgKwogICAgICsJCS8qCiAgICAgKwkJICogRHJhaW5pbmcgdGhlIHBpcGUgc2hv dWxkIHVuc2V0IHRoZSBtdWx0aXBsZXhlciBhZ2Fpbiwgb25jZSB0aGUgb2xkCiAgICAtKwkJICog ZXZlbnQgaXMgZHJhaW5lZC4KICAgICsrCQkgKiBldmVudCBpcyBjbGVhcmVkLgogICAgICsJCSAq LwogICAgICsJCUFzc2VydChkcmFpbl9waXBlKHJmZCwgMSkpOwogICAgLSsJCUFzc2VydChkcmFp bl9zb2NrZXRfZXZlbnRzKGFjdHgpKTsKICAgICsrCQlBc3NlcnQoY29tYl9tdWx0aXBsZXhlcihh Y3R4KSk7CiAgICAgKwkJbXV4X2lzX25vdF9yZWFkeShhY3R4LT5tdXgsICJ3aGVuIGZkIGlzIGRy YWluZWQiKTsKICAgICArCiAgICAgKwkJLyogVW5kbyBhbnkgdW5pZGlyZWN0aW9uYWwgZW11bGF0 aW9uLiAqLwogICAgQEAgc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvdGVzdC1vYXV0aC1jdXJs LmMgKG5ldykKICAgICArCQkJc3NpemVfdAkJd3JpdHRlbjsKICAgICArCiAgICAgKwkJCS8qCiAg ICAtKwkJCSAqIEZpbGwgdGhlIHBpcGUuIE9uY2UgdGhlIG9sZCB3cml0YWJsZSBldmVudCBpcyBk cmFpbmVkLCB0aGUgbXV4CiAgICArKwkJCSAqIEZpbGwgdGhlIHBpcGUuIE9uY2UgdGhlIG9sZCB3 cml0YWJsZSBldmVudCBpcyBjbGVhcmVkLCB0aGUgbXV4CiAgICAgKwkJCSAqIHNob3VsZCBub3Qg YmUgcmVhZHkuCiAgICAgKwkJCSAqLwogICAgICsJCQlBc3NlcnQoKHdyaXR0ZW4gPSBmaWxsX3Bp cGUod2ZkKSkgPiAwKTsKICAgICArCQkJcHJpbnRmKCIjIHBpcGUgYnVmZmVyIGlzIGZ1bGwgYXQg JXpkIGJ5dGVzXG4iLCB3cml0dGVuKTsKICAgICArCiAgICAtKwkJCUFzc2VydChkcmFpbl9zb2Nr ZXRfZXZlbnRzKGFjdHgpKTsKICAgICsrCQkJQXNzZXJ0KGNvbWJfbXVsdGlwbGV4ZXIoYWN0eCkp OwogICAgICsJCQltdXhfaXNfbm90X3JlYWR5KGFjdHgtPm11eCwgIndoZW4gZmQgYnVmZmVyIGlz IGZ1bGwiKTsKICAgICArCiAgICAgKwkJCS8qIERyYWluIHRoZSBwaXBlIGFnYWluLiAqLwogICAg QEAgc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvdGVzdC1vYXV0aC1jdXJsLmMgKG5ldykKICAg ICArCiAgICAgKwkJLyogTWFrZSBzdXJlIGFuIGV4cGlyZWQgdGltZXIgZG9lc24ndCBpbnRlcmZl cmUgd2l0aCBldmVudCBkcmFpbmluZy4gKi8KICAgICArCQl7CiAgICArKwkJCWJvb2wJCWV4cGly ZWQ7CiAgICArKwogICAgICsJCQkvKiBNYWtlIHRoZSByZmQgYXBwZWFyIHVuaWRpcmVjdGlvbmFs IGlmIG5lY2Vzc2FyeS4gKi8KICAgICArCQkJaWYgKGJpZGlyZWN0aW9uYWwpCiAgICAgKwkJCQlB c3NlcnQoKGJpZGlfcGlwZV9zaXplID0gZmlsbF9waXBlKHJmZCkpID4gMCk7CiAgICBAQCBzcmMv aW50ZXJmYWNlcy9saWJwcS1vYXV0aC90ZXN0LW9hdXRoLWN1cmwuYyAobmV3KQogICAgICsJCQkg KiBEcmFpbmluZyB0aGUgcGlwZSBzaG91bGQgdW5zZXQgdGhlIG11bHRpcGxleGVyIGFnYWluLCBv bmNlIHRoZQogICAgICsJCQkgKiBvbGQgZXZlbnQgaXMgZHJhaW5lZCBhbmQgdGhlIHRpbWVyIGlz IHJlc2V0LgogICAgICsJCQkgKgogICAgLSsJCQkgKiBPcmRlciBtYXR0ZXJzIHRvIGF2b2lkIGZh bHNlIG5lZ2F0aXZlcy4gRmlyc3QgZHJhaW4gdGhlIHNvY2tldCwKICAgIC0rCQkJICogdGhlbiB1 bnNldCB0aGUgdGltZXIuIFdlJ3JlIHRyeWluZyB0byBjYXRjaCB0aGUgY2FzZSB3aGVyZSB0aGUK ICAgIC0rCQkJICogcGVuZGluZyB0aW1lciBleHBpcmF0aW9uIGV2ZW50IHRha2VzIHRoZSBwbGFj ZSBvZiBvbmUgb2YgdGhlCiAgICAtKwkJCSAqIHNvY2tldCBldmVudHMgd2UncmUgYXR0ZW1wdGlu ZyB0byBkcmFpbi4KICAgICsrCQkJICogT3JkZXIgbWF0dGVycywgc2luY2UgY29tYl9tdWx0aXBs ZXhlcigpIGRvZXNuJ3QgaGF2ZSB0byByZW1vdmUKICAgICsrCQkJICogc3RhbGUgZXZlbnRzIHdo ZW4gYWN0aXZlIGV2ZW50cyBleGlzdC4gRm9sbG93IHRoZSBjYWxsIHNlcXVlbmNlCiAgICArKwkJ CSAqIHVzZWQgaW4gdGhlIGNvZGU6IGRyYWluIHRoZSB0aW1lciBleHBpcmF0aW9uLCBkcmFpbiB0 aGUgcGlwZSwKICAgICsrCQkJICogdGhlbiBjbGVhciB0aGUgc3RhbGUgZXZlbnRzLgogICAgICsJ CQkgKi8KICAgICsrCQkJQXNzZXJ0KGRyYWluX3RpbWVyX2V2ZW50cyhhY3R4LCAmZXhwaXJlZCkp OwogICAgICsJCQlBc3NlcnQoZHJhaW5fcGlwZShyZmQsIDEpKTsKICAgIC0rCQkJQXNzZXJ0KGRy YWluX3NvY2tldF9ldmVudHMoYWN0eCkpOwogICAgLSsJCQlBc3NlcnQoc2V0X3RpbWVyKGFjdHgs IC0xKSk7CiAgICArKwkJCUFzc2VydChjb21iX211bHRpcGxleGVyKGFjdHgpKTsKICAgICArCiAg ICArKwkJCWlzKGV4cGlyZWQsIDEsICJkcmFpbl90aW1lcl9ldmVudHMoKSByZXBvcnRzIGV4cGly YXRpb24iKTsKICAgICArCQkJaXModGltZXJfZXhwaXJlZChhY3R4KSwgMCwgInRpbWVyIGlzIG5v IGxvbmdlciBleHBpcmVkIik7CiAgICAgKwkJCW11eF9pc19ub3RfcmVhZHkoYWN0eC0+bXV4LCAi d2hlbiBmZCBpcyBkcmFpbmVkIGFuZCB0aW1lciByZXNldCIpOwogICAgICsKICAgIEBAIHNyYy9p bnRlcmZhY2VzL2xpYnBxLW9hdXRoL3Rlc3Qtb2F1dGgtY3VybC5jIChuZXcpCiAgICAgKwkJCWlm IChiaWRpcmVjdGlvbmFsKQogICAgICsJCQkJQXNzZXJ0KGRyYWluX3BpcGUod2ZkLCBiaWRpX3Bp cGVfc2l6ZSkpOwogICAgICsJCX0KICAgICsrCiAgICArKwkJLyogRW5zdXJlIGNvbWJfbXVsdGlw bGV4ZXIoKSBjYW4gaGFuZGxlIG11bHRpcGxlIHN0YWxlIGV2ZW50cy4gKi8KICAgICsrCQl7CiAg ICArKwkJCWludAkJCXJmZDIsCiAgICArKwkJCQkJCXdmZDI7CiAgICArKwogICAgKysJCQkvKiBD cmVhdGUgYSBzZWNvbmQgbG9jYWwgcGlwZS4gKi8KICAgICsrCQkJQXNzZXJ0KHBpcGUocGlwZWZk KSA9PSAwKTsKICAgICsrCQkJcmZkMiA9IHBpcGVmZFswXTsKICAgICsrCQkJd2ZkMiA9IHBpcGVm ZFsxXTsKICAgICsrCiAgICArKwkJCS8qIE1ha2UgYm90aCByZmRzIGFwcGVhciB1bmlkaXJlY3Rp b25hbCBpZiBuZWNlc3NhcnkuICovCiAgICArKwkJCWlmIChiaWRpcmVjdGlvbmFsKQogICAgKysJ CQl7CiAgICArKwkJCQlBc3NlcnQoKGJpZGlfcGlwZV9zaXplID0gZmlsbF9waXBlKHJmZCkpID4g MCk7CiAgICArKwkJCQlBc3NlcnQoZmlsbF9waXBlKHJmZDIpID09IGJpZGlfcGlwZV9zaXplKTsK ICAgICsrCQkJfQogICAgKysKICAgICsrCQkJLyogUmVnaXN0ZXIgZm9yIHJlYWQgZXZlbnRzIG9u IGJvdGggZmRzLCBhbmQgbWFrZSB0aGVtIHJlYWRhYmxlLiAqLwogICAgKysJCQlBc3NlcnQocmVn aXN0ZXJfc29ja2V0KE5VTEwsIHJmZCwgaW5fZXZlbnQsIGFjdHgsIE5VTEwpID09IDApOwogICAg KysJCQlBc3NlcnQocmVnaXN0ZXJfc29ja2V0KE5VTEwsIHJmZDIsIGluX2V2ZW50LCBhY3R4LCBO VUxMKSA9PSAwKTsKICAgICsrCiAgICArKwkJCUFzc2VydCh3cml0ZSh3ZmQsICJ4IiwgMSkgPT0g MSk7CiAgICArKwkJCUFzc2VydCh3cml0ZSh3ZmQyLCAieCIsIDEpID09IDEpOwogICAgKysKICAg ICsrCQkJbXV4X2lzX3JlYWR5KGFjdHgtPm11eCwgZGVhZGxpbmUsICJ3aGVuIHR3byBmZHMgYXJl IHJlYWRhYmxlIik7CiAgICArKwogICAgKysJCQkvKgogICAgKysJCQkgKiBEcmFpbiBib3RoIGZk cy4gY29tYl9tdWx0aXBsZXhlcigpIHNob3VsZCB0aGVuIGVuc3VyZSB0aGF0IHRoZQogICAgKysJ CQkgKiBtdXggaXMgbm8gbG9uZ2VyIHJlYWRhYmxlLgogICAgKysJCQkgKi8KICAgICsrCQkJQXNz ZXJ0KGRyYWluX3BpcGUocmZkLCAxKSk7CiAgICArKwkJCUFzc2VydChkcmFpbl9waXBlKHJmZDIs IDEpKTsKICAgICsrCQkJQXNzZXJ0KGNvbWJfbXVsdGlwbGV4ZXIoYWN0eCkpOwogICAgKysJCQlt dXhfaXNfbm90X3JlYWR5KGFjdHgtPm11eCwgIndoZW4gdHdvIGZkcyBhcmUgZHJhaW5lZCIpOwog ICAgKysKICAgICsrCQkJLyogU3RvcCBsaXN0ZW5pbmcuICovCiAgICArKwkJCUFzc2VydChyZWdp c3Rlcl9zb2NrZXQoTlVMTCwgcmZkLCBDVVJMX1BPTExfUkVNT1ZFLCBhY3R4LCBOVUxMKSA9PSAw KTsKICAgICsrCQkJQXNzZXJ0KHJlZ2lzdGVyX3NvY2tldChOVUxMLCByZmQyLCBDVVJMX1BPTExf UkVNT1ZFLCBhY3R4LCBOVUxMKSA9PSAwKTsKICAgICsrCiAgICArKwkJCS8qIFVuZG8gYW55IHVu aWRpcmVjdGlvbmFsIGVtdWxhdGlvbi4gKi8KICAgICsrCQkJaWYgKGJpZGlyZWN0aW9uYWwpCiAg ICArKwkJCXsKICAgICsrCQkJCUFzc2VydChkcmFpbl9waXBlKHdmZCwgYmlkaV9waXBlX3NpemUp KTsKICAgICsrCQkJCUFzc2VydChkcmFpbl9waXBlKHdmZDIsIGJpZGlfcGlwZV9zaXplKSk7CiAg ICArKwkJCX0KICAgICsrCiAgICArKwkJCWNsb3NlKHJmZDIpOwogICAgKysJCQljbG9zZSh3ZmQy KTsKICAgICsrCQl9CiAgICAgKwl9CiAgICAgKwogICAgICsJY2xvc2UocmZkKTsK --000000000000e06f93063bbb14b3 Content-Type: application/octet-stream; name="v3-0001-oauth-Remove-stale-events-from-the-kqueue-multipl.patch" Content-Disposition: attachment; filename="v3-0001-oauth-Remove-stale-events-from-the-kqueue-multipl.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_me0mgna41 RnJvbSBjNWNkY2NmZTM3NGZmOWQ0NTIxOWY3MDU1MTE3ODUzMTg4MzNmNmViIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogVHVlLCAxMCBKdW4gMjAyNSAxNjozODo1OSAtMDcwMApTdWJqZWN0 OiBbUEFUQ0ggdjMgMS81XSBvYXV0aDogUmVtb3ZlIHN0YWxlIGV2ZW50cyBmcm9tIHRoZSBrcXVl dWUgbXVsdGlwbGV4ZXIKCklmIGEgc29ja2V0IGlzIGFkZGVkIHRvIHRoZSBrcXVldWUsIGJlY29t ZXMgcmVhZGFibGUvd3JpdGFibGUsIGFuZApzdWJzZXF1ZW50bHkgYmVjb21lcyBub24tcmVhZGFi bGUvd3JpdGFibGUgYWdhaW4sIHRoZSBrcXVldWUgaXRzZWxmIHdpbGwKcmVtYWluIHJlYWRhYmxl IHVudGlsIGVpdGhlciB0aGUgc29ja2V0IHJlZ2lzdHJhdGlvbiBpcyByZW1vdmVkLCBvciB0aGUK c3RhbGUgZXZlbnQgaXMgY2xlYXJlZCB2aWEgYSBjYWxsIHRvIGtldmVudCgpLgoKSW4gbWFueSBz aW1wbGUgY2FzZXMsIEN1cmwgaXRzZWxmIHdpbGwgcmVtb3ZlIHRoZSBzb2NrZXQgcmVnaXN0cmF0 aW9uCnF1aWNrbHksIGJ1dCBpbiByZWFsLXdvcmxkIHVzYWdlLCB0aGlzIGlzIG5vdCBndWFyYW50 ZWVkIHRvIGhhcHBlbi4gVGhlCmtxdWV1ZSBjYW4gdGhlbiByZW1haW4gc3R1Y2sgaW4gYSBwZXJt YW5lbnRseSByZWFkYWJsZSBzdGF0ZSB1bnRpbCB0aGUKcmVxdWVzdCBlbmRzLCB3aGljaCByZXN1 bHRzIGluIHBvaW50bGVzcyB3YWtldXBzIGZvciB0aGUgY2xpZW50IGFuZAp3YXN0ZWQgQ1BVIHRp bWUuCgpJbXBsZW1lbnQgY29tYl9tdWx0aXBsZXhlcigpIHRvIGNhbGwga2V2ZW50KCkgYW5kIHVu c3RpY2sgYW55IHN0YWxlCmV2ZW50cyB0aGF0IHdvdWxkIGNhdXNlIHVubmVjZXNzYXJ5IGNhbGxi YWNrcy4gVGhpcyBpcyBjYWxsZWQgcmlnaHQKYWZ0ZXIgZHJpdmVfcmVxdWVzdCgpLCBiZWZvcmUg d2UgcmV0dXJuIGNvbnRyb2wgdG8gdGhlIGNsaWVudCB0byB3YWl0LgoKU3VnZ2VzdGVkLWJ5OiBU aG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+Ci0tLQogc3JjL2ludGVyZmFjZXMv bGlicHEtb2F1dGgvb2F1dGgtY3VybC5jIHwgNzQgKysrKysrKysrKysrKysrKysrKysrKystLQog MSBmaWxlIGNoYW5nZWQsIDY4IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3VybC5jIGIvc3JjL2ludGVy ZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3VybC5jCmluZGV4IGRiYTlhNjg0ZmE4Li4zMzgwYTE3 NjI4ZSAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3VybC5j CisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLWN1cmwuYwpAQCAtMTM3Niw2 ICsxMzc2LDYwIEBAIHJlZ2lzdGVyX3NvY2tldChDVVJMICpjdXJsLCBjdXJsX3NvY2tldF90IHNv Y2tldCwgaW50IHdoYXQsIHZvaWQgKmN0eCwKICNlbmRpZgogfQogCisvKi0tLS0tLS0KKyAqIElm IHRoZXJlIGlzIG5vIHdvcmsgdG8gZG8gb24gYW55IG9mIHRoZSBkZXNjcmlwdG9ycyBpbiB0aGUg bXVsdGlwbGV4ZXIsIHRoZW4KKyAqIHRoaXMgZnVuY3Rpb24gbXVzdCBlbnN1cmUgdGhhdCB0aGUg bXVsdGlwbGV4ZXIgaXMgbm90IHJlYWRhYmxlLgorICoKKyAqIEFzIGEgbW90aXZhdGluZyBleGFt cGxlLCBjb25zaWRlciB0aGUgZm9sbG93aW5nIHNlcXVlbmNlIG9mIGV2ZW50czoKKyAqIDEuIGxp YmN1cmwgdHJpZXMgdG8gd3JpdGUgZGF0YSB0byB0aGUgc2VuZCBidWZmZXIsIGJ1dCBpdCBmaWxs cyB1cC4KKyAqIDIuIGxpYmN1cmwgcmVnaXN0ZXJzIENVUkxfUE9MTF9PVVQgb24gdGhlIHNvY2tl dCBhbmQgcmV0dXJucyBjb250cm9sIHRvIHRoZQorICogICAgY2xpZW50IHRvIHdhaXQuCisgKiAz LiBUaGUga2VybmVsIHBhcnRpYWxseSBkcmFpbnMgdGhlIHNlbmQgYnVmZmVyLiBUaGUgc29ja2V0 IGJlY29tZXMgd3JpdGFibGUsCisgKiAgICBhbmQgdGhlIGNsaWVudCB3YWtlcyB1cCBhbmQgY2Fs bHMgYmFjayBpbnRvIHRoZSBmbG93LgorICogNC4gbGliY3VybCBjb250aW51ZXMgd3JpdGluZyBk YXRhIHRvIHRoZSBzZW5kIGJ1ZmZlciwgYnV0IGl0IGZpbGxzIHVwIGFnYWluLgorICogICAgVGhl IHNvY2tldCBpcyBubyBsb25nZXIgd3JpdGFibGUuCisgKgorICogQXQgdGhpcyBwb2ludCwgYW4g ZXBvbGwtYmFzZWQgbXV4IG5vIGxvbmdlciBzaWduYWxzIHJlYWRpbmVzcywgc28gbm90aGluZwor ICogZnVydGhlciBuZWVkcyB0byBiZSBkb25lLiBCdXQgYSBrcXVldWUtYmFzZWQgbXV4IHdpbGwg Y29udGludWUgdG8gc2lnbmFsCisgKiAicmVhZHkiIHVudGlsIGVpdGhlciB0aGUgRVZGSUxUX1dS SVRFIHJlZ2lzdHJhdGlvbiBpcyBkcm9wcGVkIGZvciB0aGUgc29ja2V0LAorICogb3IgdGhlIG9s ZCBzb2NrZXQtd3JpdGFibGUgZXZlbnQgaXMgcmVhZCBmcm9tIHRoZSBxdWV1ZS4gU2luY2UgQ3Vy bCBpc24ndAorICogZ3VhcmFudGVlZCB0byBkbyB0aGUgZm9ybWVyLCB3ZSBtdXN0IGRvIHRoZSBs YXR0ZXIgaGVyZS4KKyAqLworc3RhdGljIGJvb2wKK2NvbWJfbXVsdGlwbGV4ZXIoc3RydWN0IGFz eW5jX2N0eCAqYWN0eCkKK3sKKyNpZiBkZWZpbmVkKEhBVkVfU1lTX0VQT0xMX0gpCisJLyogVGhl IGVwb2xsIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QgaG9sZCBvbnRvIHN0YWxlIGV2ZW50cy4gKi8K KwlyZXR1cm4gdHJ1ZTsKKyNlbGlmIGRlZmluZWQoSEFWRV9TWVNfRVZFTlRfSCkKKwlzdHJ1Y3Qg dGltZXNwZWMgdGltZW91dCA9IHswfTsKKwlzdHJ1Y3Qga2V2ZW50IGV2OworCisJLyoKKwkgKiBU cnkgdG8gcmVhZCBhIHNpbmdsZSBwZW5kaW5nIGV2ZW50LiBXZSBjYW4gYWN0dWFsbHkgaWdub3Jl IHRoZSByZXN1bHQ6CisJICogZWl0aGVyIHdlIGZvdW5kIGFuIGV2ZW50IHRvIHByb2Nlc3MsIGlu IHdoaWNoIGNhc2UgdGhlIG11bHRpcGxleGVyIGlzCisJICogY29ycmVjdGx5IHJlYWRhYmxlIGZv ciB0aGF0IGV2ZW50IGF0IG1pbmltdW0sIGFuZCBpdCBkb2Vzbid0IG1hdHRlciBpZgorCSAqIHRo ZXJlIGFyZSBhbnkgc3RhbGUgZXZlbnRzOyBvciB3ZSBkaWRuJ3QgZmluZCBhbnksIGluIHdoaWNo IGNhc2UgdGhlCisJICoga2VybmVsIHdpbGwgaGF2ZSBkaXNjYXJkZWQgYW55IHN0YWxlIGV2ZW50 cyBhcyBpdCB0cmF2ZWxlZCB0byB0aGUgZW5kCisJICogb2YgdGhlIHF1ZXVlLgorCSAqCisJICog Tm90ZSB0aGF0IHRoaXMgZGVwZW5kcyBvbiBvdXIgcmVnaXN0cmF0aW9ucyBiZWluZyBsZXZlbC10 cmlnZ2VyZWQgLS0KKwkgKiBldmVuIHRoZSB0aW1lciwgc28gd2UgdXNlIGEgY2hhaW5lZCBrcXVl dWUgZm9yIHRoYXQgaW5zdGVhZCBvZiBhbgorCSAqIEVWRklMVF9USU1FUiBvbiB0aGUgdG9wLWxl dmVsIG11eC4gSWYgd2UgdXNlZCBlZGdlLXRyaWdnZXJlZCBldmVudHMsCisJICogdGhpcyBjYWxs IHdvdWxkIGltcHJvcGVybHkgZGlzY2FyZCB0aGVtLgorCSAqLworCWlmIChrZXZlbnQoYWN0eC0+ bXV4LCBOVUxMLCAwLCAmZXYsIDEsICZ0aW1lb3V0KSA8IDApCisJeworCQlhY3R4X2Vycm9yKGFj dHgsICJjb3VsZCBub3QgY29tYiBrcXVldWU6ICVtIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisK KwlyZXR1cm4gdHJ1ZTsKKyNlbHNlCisjZXJyb3IgY29tYl9tdWx0aXBsZXhlciBpcyBub3QgaW1w bGVtZW50ZWQgb24gdGhpcyBwbGF0Zm9ybQorI2VuZGlmCit9CisKIC8qCiAgKiBFbmFibGVzIG9y IGRpc2FibGVzIHRoZSB0aW1lciBpbiB0aGUgbXVsdGlwbGV4ZXIgc2V0LiBUaGUgdGltZW91dCB2 YWx1ZSBpcwogICogaW4gbWlsbGlzZWNvbmRzIChuZWdhdGl2ZSB2YWx1ZXMgZGlzYWJsZSB0aGUg dGltZXIpLgpAQCAtMjc1NSwxMyArMjgwOSwyMSBAQCBwZ19mZV9ydW5fb2F1dGhfZmxvd19pbXBs KFBHY29ubiAqY29ubikKIAogCQkJCQlpZiAoc3RhdHVzID09IFBHUkVTX1BPTExJTkdfRkFJTEVE KQogCQkJCQkJZ290byBlcnJvcl9yZXR1cm47Ci0JCQkJCWVsc2UgaWYgKHN0YXR1cyAhPSBQR1JF U19QT0xMSU5HX09LKQotCQkJCQl7Ci0JCQkJCQkvKiBub3QgZG9uZSB5ZXQgKi8KLQkJCQkJCXJl dHVybiBzdGF0dXM7Ci0JCQkJCX0KKwkJCQkJZWxzZSBpZiAoc3RhdHVzID09IFBHUkVTX1BPTExJ TkdfT0spCisJCQkJCQlicmVhazsJLyogZG9uZSEgKi8KIAotCQkJCQlicmVhazsKKwkJCQkJLyoK KwkJCQkJICogVGhpcyByZXF1ZXN0IGlzIHN0aWxsIHJ1bm5pbmcuCisJCQkJCSAqCisJCQkJCSAq IE1ha2Ugc3VyZSB0aGF0IHN0YWxlIGV2ZW50cyBkb24ndCBjYXVzZSB1cyB0byBjb21lIGJhY2sK KwkJCQkJICogZWFybHkuIChDdXJyZW50bHksIHRoaXMgY2FuIG9jY3VyIG9ubHkgd2l0aCBrcXVl dWUuKSBJZgorCQkJCQkgKiB0aGlzIGlzIGZvcmdvdHRlbiwgdGhlIG11bHRpcGxleGVyIGNhbiBn ZXQgc3R1Y2sgaW4gYQorCQkJCQkgKiBzaWduYWxsZWQgc3RhdGUgYW5kIHdlJ2xsIGJ1cm4gQ1BV IGN5Y2xlcyBwb2ludGxlc3NseS4KKwkJCQkJICovCisJCQkJCWlmICghY29tYl9tdWx0aXBsZXhl cihhY3R4KSkKKwkJCQkJCWdvdG8gZXJyb3JfcmV0dXJuOworCisJCQkJCXJldHVybiBzdGF0dXM7 CiAJCQkJfQogCiAJCQljYXNlIE9BVVRIX1NURVBfV0FJVF9JTlRFUlZBTDoKLS0gCjIuMzQuMQoK --000000000000e06f93063bbb14b3 Content-Type: application/octet-stream; name="v3-0002-oauth-Ensure-unused-socket-registrations-are-remo.patch" Content-Disposition: attachment; filename="v3-0002-oauth-Ensure-unused-socket-registrations-are-remo.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_me0mgqiv2 RnJvbSA3NzI1ZTBjMTczYmI0MmMxNTExZTc4MGI5M2Q2MzdhOWI3ODc5MDRlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogV2VkLCA2IEF1ZyAyMDI1IDE1OjE4OjA4IC0wNzAwClN1YmplY3Q6 IFtQQVRDSCB2MyAyLzVdIG9hdXRoOiBFbnN1cmUgdW51c2VkIHNvY2tldCByZWdpc3RyYXRpb25z IGFyZSByZW1vdmVkCgpJZiBDdXJsIG5lZWRzIHRvIHN3aXRjaCB0aGUgZGlyZWN0aW9uIG9mIGEg c29ja2V0J3MgcmVnaXN0cmF0aW9uIChlLmcuCmZyb20gQ1VSTF9QT0xMX0lOIHRvIENVUkxfUE9M TF9PVVQpLCBpdCBleHBlY3RzIHRoZSBvbGQgcmVnaXN0cmF0aW9uIHRvCmJlIGRpc2NhcmRlZC4g Rm9yIGVwb2xsLCB0aGlzIGhhcHBlbmVkIHZpYSBFUE9MTF9DVExfTU9ELCBidXQgZm9yCmtxdWV1 ZSwgdGhlIG9sZCByZWdpc3RyYXRpb24gd291bGQgcmVtYWluIGlmIGl0IHdhcyBub3QgZXhwbGlj aXRseQpyZW1vdmVkIGJ5IEN1cmwuCgpFeHBsaWNpdGx5IHJlbW92ZSB0aGUgb3Bwb3NpdGUtZGly ZWN0aW9uIGV2ZW50IGR1cmluZyByZWdpc3RyYXRpb25zLiAoSWYKdGhhdCBldmVudCBkb2Vzbid0 IGV4aXN0LCB3ZSdsbCBqdXN0IGdldCBhbiBFTk9FTlQsIHdoaWNoIHdpbGwgYmUKaWdub3JlZCBi eSB0aGUgc2FtZSBjb2RlIHRoYXQgaGFuZGxlcyBDVVJMX1BPTExfUkVNT1ZFLikgQSBmZXcKYXNz ZXJ0aW9ucyBhcmUgYWxzbyBhZGRlZCB0byBzdHJlbmd0aGVuIHRoZSByZWxhdGlvbnNoaXAgYmV0 d2VlbiB0aGUKbnVtYmVyIG9mIGV2ZW50cyBhZGRlZCwgdGhlIG51bWJlciBvZiBldmVudHMgcHVs bGVkIG9mZiB0aGUgcXVldWUsIGFuZAp0aGUgbGVuZ3RocyBvZiB0aGUga2V2ZW50IGFycmF5cy4K LS0tCiBzcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9vYXV0aC1jdXJsLmMgfCAyMiArKysrKysr KysrKysrKy0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKSwgOCBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9vYXV0aC1j dXJsLmMgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9vYXV0aC1jdXJsLmMKaW5kZXggMzM4 MGExNzYyOGUuLjdhODdhOTZkMmVkIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS1v YXV0aC9vYXV0aC1jdXJsLmMKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgt Y3VybC5jCkBAIC0xMjkxLDIyICsxMjkxLDMxIEBAIHJlZ2lzdGVyX3NvY2tldChDVVJMICpjdXJs LCBjdXJsX3NvY2tldF90IHNvY2tldCwgaW50IHdoYXQsIHZvaWQgKmN0eCwKIAogCXJldHVybiAw OwogI2VsaWYgZGVmaW5lZChIQVZFX1NZU19FVkVOVF9IKQotCXN0cnVjdCBrZXZlbnQgZXZbMl0g PSB7MH07CisJc3RydWN0IGtldmVudCBldlsyXTsKIAlzdHJ1Y3Qga2V2ZW50IGV2X291dFsyXTsK IAlzdHJ1Y3QgdGltZXNwZWMgdGltZW91dCA9IHswfTsKIAlpbnQJCQluZXYgPSAwOwogCWludAkJ CXJlczsKIAorCS8qCisJICogV2UgZG9uJ3Qga25vdyB3aGljaCBvZiB0aGUgZXZlbnRzIGlzIGN1 cnJlbnRseSByZWdpc3RlcmVkLCBwZXJoYXBzCisJICogYm90aCwgc28gd2UgYWx3YXlzIHRyeSB0 byByZW1vdmUgdW5uZWVkZWQgZXZlbnRzLiBUaGlzIG1lYW5zIHdlIG5lZWQgdG8KKwkgKiB0b2xl cmF0ZSBFTk9FTlQgYmVsb3cuCisJICovCiAJc3dpdGNoICh3aGF0KQogCXsKIAkJY2FzZSBDVVJM X1BPTExfSU46CiAJCQlFVl9TRVQoJmV2W25ldl0sIHNvY2tldCwgRVZGSUxUX1JFQUQsIEVWX0FE RCB8IEVWX1JFQ0VJUFQsIDAsIDAsIDApOwogCQkJbmV2Kys7CisJCQlFVl9TRVQoJmV2W25ldl0s IHNvY2tldCwgRVZGSUxUX1dSSVRFLCBFVl9ERUxFVEUgfCBFVl9SRUNFSVBULCAwLCAwLCAwKTsK KwkJCW5ldisrOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBDVVJMX1BPTExfT1VUOgogCQkJRVZfU0VU KCZldltuZXZdLCBzb2NrZXQsIEVWRklMVF9XUklURSwgRVZfQUREIHwgRVZfUkVDRUlQVCwgMCwg MCwgMCk7CiAJCQluZXYrKzsKKwkJCUVWX1NFVCgmZXZbbmV2XSwgc29ja2V0LCBFVkZJTFRfUkVB RCwgRVZfREVMRVRFIHwgRVZfUkVDRUlQVCwgMCwgMCwgMCk7CisJCQluZXYrKzsKIAkJCWJyZWFr OwogCiAJCWNhc2UgQ1VSTF9QT0xMX0lOT1VUOgpAQCAtMTMxNywxMiArMTMyNiw2IEBAIHJlZ2lz dGVyX3NvY2tldChDVVJMICpjdXJsLCBjdXJsX3NvY2tldF90IHNvY2tldCwgaW50IHdoYXQsIHZv aWQgKmN0eCwKIAkJCWJyZWFrOwogCiAJCWNhc2UgQ1VSTF9QT0xMX1JFTU9WRToKLQotCQkJLyoK LQkJCSAqIFdlIGRvbid0IGtub3cgd2hpY2ggb2YgdGhlc2UgaXMgY3VycmVudGx5IHJlZ2lzdGVy ZWQsIHBlcmhhcHMKLQkJCSAqIGJvdGgsIHNvIHdlIHRyeSB0byByZW1vdmUgYm90aC4gIFRoaXMg bWVhbnMgd2UgbmVlZCB0byB0b2xlcmF0ZQotCQkJICogRU5PRU5UIGJlbG93LgotCQkJICovCiAJ CQlFVl9TRVQoJmV2W25ldl0sIHNvY2tldCwgRVZGSUxUX1JFQUQsIEVWX0RFTEVURSB8IEVWX1JF Q0VJUFQsIDAsIDAsIDApOwogCQkJbmV2Kys7CiAJCQlFVl9TRVQoJmV2W25ldl0sIHNvY2tldCwg RVZGSUxUX1dSSVRFLCBFVl9ERUxFVEUgfCBFVl9SRUNFSVBULCAwLCAwLCAwKTsKQEAgLTEzMzQs NyArMTMzNywxMCBAQCByZWdpc3Rlcl9zb2NrZXQoQ1VSTCAqY3VybCwgY3VybF9zb2NrZXRfdCBz b2NrZXQsIGludCB3aGF0LCB2b2lkICpjdHgsCiAJCQlyZXR1cm4gLTE7CiAJfQogCi0JcmVzID0g a2V2ZW50KGFjdHgtPm11eCwgZXYsIG5ldiwgZXZfb3V0LCBsZW5ndGhvZihldl9vdXQpLCAmdGlt ZW91dCk7CisJQXNzZXJ0KG5ldiA8PSBsZW5ndGhvZihldikpOworCUFzc2VydChuZXYgPD0gbGVu Z3Rob2YoZXZfb3V0KSk7CisKKwlyZXMgPSBrZXZlbnQoYWN0eC0+bXV4LCBldiwgbmV2LCBldl9v dXQsIG5ldiwgJnRpbWVvdXQpOwogCWlmIChyZXMgPCAwKQogCXsKIAkJYWN0eF9lcnJvcihhY3R4 LCAiY291bGQgbm90IG1vZGlmeSBrcXVldWU6ICVtIik7Ci0tIAoyLjM0LjEKCg== --000000000000e06f93063bbb14b3 Content-Type: application/octet-stream; name="v3-0003-oauth-Remove-expired-timers-from-the-multiplexer.patch" Content-Disposition: attachment; filename="v3-0003-oauth-Remove-expired-timers-from-the-multiplexer.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_me0mgt8s3 RnJvbSA2Y2NmN2E1ZDE1Njk3NWY4ZjRiZjI5YTgyY2YzZWYyZjIwZDc2ODUzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogV2VkLCA1IE1hciAyMDI1IDEzOjE2OjQ4IC0wODAwClN1YmplY3Q6 IFtQQVRDSCB2MyAzLzVdIG9hdXRoOiBSZW1vdmUgZXhwaXJlZCB0aW1lcnMgZnJvbSB0aGUgbXVs dGlwbGV4ZXIKCkluIGEgY2FzZSBzaW1pbGFyIHRvIHRoZSBwcmV2aW91cyBjb21taXQsIGFuIGV4 cGlyZWQgdGltZXIgY2FuIHJlbWFpbgpwZXJtYW5lbnRseSByZWFkYWJsZSBpZiBDdXJsIGRvZXMg bm90IHJlbW92ZSB0aGUgdGltZW91dCBpdHNlbGYuIFNpbmNlCnRoYXQgcmVtb3ZhbCBpc24ndCBn dWFyYW50ZWVkIHRvIGhhcHBlbiBpbiByZWFsLXdvcmxkIHNpdHVhdGlvbnMsCmltcGxlbWVudCBk cmFpbl90aW1lcl9ldmVudHMoKSB0byByZXNldCB0aGUgdGltZXIgYmVmb3JlIGNhbGxpbmcgaW50 bwpkcml2ZV9yZXF1ZXN0KCkuCgpNb3ZpbmcgdG8gZHJhaW5fdGltZXJfZXZlbnRzKCkgaGFwcGVu cyB0byBmaXggYSBsb2dpYyBidWcgaW4gdGhlCnByZXZpb3VzIGNhbGxlciBvZiB0aW1lcl9leHBp cmVkKCksIHdoaWNoIHRyZWF0ZWQgYW4gZXJyb3IgY29uZGl0aW9uIGFzCmlmIHRoZSB0aW1lciB3 ZXJlIGV4cGlyZWQgaW5zdGVhZCBvZiBiYWlsaW5nIG91dC4KClRoZSBwcmV2aW91cyBpbXBsZW1l bnRhdGlvbiBvZiB0aW1lcl9leHBpcmVkKCkgZ2F2ZSBkaWZmZXJpbmcgcmVzdWx0cwpmb3IgZXBv bGwgYW5kIGtxdWV1ZSBpZiB0aGUgdGltZXIgd2FzIHJlc2V0LiAoRm9yIGVwb2xsLCBhIHJlc2V0 IHRpbWVyCndhcyBjb25zaWRlcmVkIHRvIGJlIGV4cGlyZWQsIGFuZCBmb3Iga3F1ZXVlIGl0IHdh cyBub3QuKSBUaGlzIGRpZG4ndApwcmV2aW91c2x5IGNhdXNlIHByb2JsZW1zLCBzaW5jZSB0aW1l cl9leHBpcmVkKCkgd2FzIG9ubHkgY2FsbGVkIHdoaWxlCnRoZSB0aW1lciB3YXMga25vd24gdG8g YmUgc2V0LCBidXQgYm90aCBpbXBsZW1lbnRhdGlvbnMgbm93IHVzZSB0aGUKa3F1ZXVlIGxvZ2lj LgotLS0KIHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLWN1cmwuYyB8IDEwOCArKysr KysrKysrKysrKystLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA2OCBpbnNlcnRpb25zKCspLCA0 MCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9v YXV0aC1jdXJsLmMgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9vYXV0aC1jdXJsLmMKaW5k ZXggN2E4N2E5NmQyZWQuLjFjMzU0MTc0MDgzIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9s aWJwcS1vYXV0aC9vYXV0aC1jdXJsLmMKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgv b2F1dGgtY3VybC5jCkBAIC0xNTQzLDQwICsxNTQzLDIwIEBAIHNldF90aW1lcihzdHJ1Y3QgYXN5 bmNfY3R4ICphY3R4LCBsb25nIHRpbWVvdXQpCiAKIC8qCiAgKiBSZXR1cm5zIDEgaWYgdGhlIHRp bWVvdXQgaW4gdGhlIG11bHRpcGxleGVyIHNldCBoYXMgZXhwaXJlZCBzaW5jZSB0aGUgbGFzdAot ICogY2FsbCB0byBzZXRfdGltZXIoKSwgMCBpZiB0aGUgdGltZXIgaXMgc3RpbGwgcnVubmluZywg b3IgLTEgKHdpdGggYW4KLSAqIGFjdHhfZXJyb3IoKSByZXBvcnQpIGlmIHRoZSB0aW1lciBjYW5u b3QgYmUgcXVlcmllZC4KKyAqIGNhbGwgdG8gc2V0X3RpbWVyKCksIDAgaWYgdGhlIHRpbWVyIGlz IGVpdGhlciBzdGlsbCBydW5uaW5nIG9yIGRpc2FybWVkLCBvcgorICogLTEgKHdpdGggYW4gYWN0 eF9lcnJvcigpIHJlcG9ydCkgaWYgdGhlIHRpbWVyIGNhbm5vdCBiZSBxdWVyaWVkLgogICovCiBz dGF0aWMgaW50CiB0aW1lcl9leHBpcmVkKHN0cnVjdCBhc3luY19jdHggKmFjdHgpCiB7Ci0jaWYg ZGVmaW5lZChIQVZFX1NZU19FUE9MTF9IKQotCXN0cnVjdCBpdGltZXJzcGVjIHNwZWMgPSB7MH07 Ci0KLQlpZiAodGltZXJmZF9nZXR0aW1lKGFjdHgtPnRpbWVyZmQsICZzcGVjKSA8IDApCi0Jewot CQlhY3R4X2Vycm9yKGFjdHgsICJnZXR0aW5nIHRpbWVyZmQgdmFsdWU6ICVtIik7Ci0JCXJldHVy biAtMTsKLQl9Ci0KLQkvKgotCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gYXNzdW1lcyB3ZSdyZSB1 c2luZyBzaW5nbGUtc2hvdCB0aW1lcnMuIElmIHlvdQotCSAqIGNoYW5nZSB0byB1c2luZyBpbnRl cnZhbHMsIHlvdSdsbCBuZWVkIHRvIHJlaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24KLQkgKiB0b28s IHBvc3NpYmx5IHdpdGggdGhlIHJlYWQoKSBvciBzZWxlY3QoKSBpbnRlcmZhY2VzIGZvciB0aW1l cmZkLgotCSAqLwotCUFzc2VydChzcGVjLml0X2ludGVydmFsLnR2X3NlYyA9PSAwCi0JCSAgICYm IHNwZWMuaXRfaW50ZXJ2YWwudHZfbnNlYyA9PSAwKTsKLQotCS8qIElmIHRoZSByZW1haW5pbmcg dGltZSB0byBleHBpcmF0aW9uIGlzIHplcm8sIHdlJ3JlIGRvbmUuICovCi0JcmV0dXJuIChzcGVj Lml0X3ZhbHVlLnR2X3NlYyA9PSAwCi0JCQkmJiBzcGVjLml0X3ZhbHVlLnR2X25zZWMgPT0gMCk7 Ci0jZWxpZiBkZWZpbmVkKEhBVkVfU1lTX0VWRU5UX0gpCisjaWYgZGVmaW5lZChIQVZFX1NZU19F UE9MTF9IKSB8fCBkZWZpbmVkKEhBVkVfU1lTX0VWRU5UX0gpCiAJaW50CQkJcmVzOwogCi0JLyog SXMgdGhlIHRpbWVyIHF1ZXVlIHJlYWR5PyAqLworCS8qIElzIHRoZSB0aW1lciByZWFkeT8gKi8K IAlyZXMgPSBQUXNvY2tldFBvbGwoYWN0eC0+dGltZXJmZCwgMSAvKiBmb3JSZWFkICovICwgMCwg MCk7CiAJaWYgKHJlcyA8IDApCiAJewotCQlhY3R4X2Vycm9yKGFjdHgsICJjaGVja2luZyBrcXVl dWUgZm9yIHRpbWVvdXQ6ICVtIik7CisJCWFjdHhfZXJyb3IoYWN0eCwgImNoZWNraW5nIHRpbWVy IGV4cGlyYXRpb246ICVtIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTE2MDgsNiArMTU4OCwz NiBAQCByZWdpc3Rlcl90aW1lcihDVVJMTSAqY3VybG0sIGxvbmcgdGltZW91dCwgdm9pZCAqY3R4 KQogCXJldHVybiAwOwogfQogCisvKgorICogUmVtb3ZlcyBhbnkgZXhwaXJlZC10aW1lciBldmVu dCBmcm9tIHRoZSBtdWx0aXBsZXhlci4gSWYgd2FzX2V4cGlyZWQgaXMgbm90CisgKiBOVUxMLCBp dCB3aWxsIGNvbnRhaW4gd2hldGhlciBvciBub3QgdGhlIHRpbWVyIHdhcyBleHBpcmVkIGF0IHRp bWUgb2YgY2FsbC4KKyAqLworc3RhdGljIGJvb2wKK2RyYWluX3RpbWVyX2V2ZW50cyhzdHJ1Y3Qg YXN5bmNfY3R4ICphY3R4LCBib29sICp3YXNfZXhwaXJlZCkKK3sKKwlpbnQJCQlyZXM7CisKKwly ZXMgPSB0aW1lcl9leHBpcmVkKGFjdHgpOworCWlmIChyZXMgPCAwKQorCQlyZXR1cm4gZmFsc2U7 CisKKwlpZiAocmVzID4gMCkKKwl7CisJCS8qCisJCSAqIFRpbWVyIGlzIGV4cGlyZWQuIFdlIGNv dWxkIGRyYWluIHRoZSBldmVudCBtYW51YWxseSBmcm9tIHRoZQorCQkgKiB0aW1lcmZkLCBidXQg aXQncyBlYXNpZXIgdG8gc2ltcGx5IGRpc2FibGUgaXQ7IHRoYXQga2VlcHMgdGhlCisJCSAqIHBs YXRmb3JtLXNwZWNpZmljIGNvZGUgaW4gc2V0X3RpbWVyKCkuCisJCSAqLworCQlpZiAoIXNldF90 aW1lcihhY3R4LCAtMSkpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKHdhc19leHBpcmVk KQorCQkqd2FzX2V4cGlyZWQgPSAocmVzID4gMCk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwogLyoK ICAqIFByaW50cyBDdXJsIHJlcXVlc3QgZGVidWdnaW5nIGluZm9ybWF0aW9uIHRvIHN0ZGVyci4K ICAqCkBAIC0yODExLDYgKzI4MjEsMjIgQEAgcGdfZmVfcnVuX29hdXRoX2Zsb3dfaW1wbChQR2Nv bm4gKmNvbm4pCiAJCQkJewogCQkJCQlQb3N0Z3Jlc1BvbGxpbmdTdGF0dXNUeXBlIHN0YXR1czsK IAorCQkJCQkvKgorCQkJCQkgKiBDbGVhciBhbnkgZXhwaXJlZCB0aW1lb3V0IGJlZm9yZSBjYWxs aW5nIGJhY2sgaW50bworCQkJCQkgKiBDdXJsLiBDdXJsIGlzIG5vdCBndWFyYW50ZWVkIHRvIGRv IHRoaXMgZm9yIHVzLCBiZWNhdXNlCisJCQkJCSAqIGl0cyBBUEkgZXhwZWN0cyB1cyB0byB1c2Ug c2luZ2xlLXNob3QgKGkuZS4KKwkJCQkJICogZWRnZS10cmlnZ2VyZWQpIHRpbWVvdXRzLCBhbmQg b3VycyBhcmUgbGV2ZWwtdHJpZ2dlcmVkCisJCQkJCSAqIHZpYSB0aGUgbXV4LgorCQkJCQkgKgor CQkJCQkgKiBUaGlzIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggdGhlIGNvbWJfbXVsdGlwbGV4ZXIo KSBjYWxsCisJCQkJCSAqIGJlbG93OiB3ZSBtaWdodCBhY2NpZGVudGFsbHkgY2xlYXIgYSBzaG9y dCB0aW1lb3V0IHRoYXQKKwkJCQkJICogd2FzIGJvdGggc2V0IGFuZCBleHBpcmVkIGR1cmluZyB0 aGUgY2FsbCB0bworCQkJCQkgKiBkcml2ZV9yZXF1ZXN0KCkuCisJCQkJCSAqLworCQkJCQlpZiAo IWRyYWluX3RpbWVyX2V2ZW50cyhhY3R4LCBOVUxMKSkKKwkJCQkJCWdvdG8gZXJyb3JfcmV0dXJu OworCisJCQkJCS8qIE1vdmUgdGhlIHJlcXVlc3QgZm9yd2FyZC4gKi8KIAkJCQkJc3RhdHVzID0g ZHJpdmVfcmVxdWVzdChhY3R4KTsKIAogCQkJCQlpZiAoc3RhdHVzID09IFBHUkVTX1BPTExJTkdf RkFJTEVEKQpAQCAtMjgzMywyNCArMjg1OSwyNiBAQCBwZ19mZV9ydW5fb2F1dGhfZmxvd19pbXBs KFBHY29ubiAqY29ubikKIAkJCQl9CiAKIAkJCWNhc2UgT0FVVEhfU1RFUF9XQUlUX0lOVEVSVkFM OgotCi0JCQkJLyoKLQkJCQkgKiBUaGUgY2xpZW50IGFwcGxpY2F0aW9uIGlzIHN1cHBvc2VkIHRv IHdhaXQgdW50aWwgb3VyIHRpbWVyCi0JCQkJICogZXhwaXJlcyBiZWZvcmUgY2FsbGluZyBQUWNv bm5lY3RQb2xsKCkgYWdhaW4sIGJ1dCB0aGF0Ci0JCQkJICogbWlnaHQgbm90IGhhcHBlbi4gVG8g YXZvaWQgc2VuZGluZyBhIHRva2VuIHJlcXVlc3QgZWFybHksCi0JCQkJICogY2hlY2sgdGhlIHRp bWVyIGJlZm9yZSBjb250aW51aW5nLgotCQkJCSAqLwotCQkJCWlmICghdGltZXJfZXhwaXJlZChh Y3R4KSkKIAkJCQl7Ci0JCQkJCXNldF9jb25uX2FsdHNvY2soY29ubiwgYWN0eC0+dGltZXJmZCk7 Ci0JCQkJCXJldHVybiBQR1JFU19QT0xMSU5HX1JFQURJTkc7Ci0JCQkJfQorCQkJCQlib29sCQll eHBpcmVkOwogCi0JCQkJLyogRGlzYWJsZSB0aGUgZXhwaXJlZCB0aW1lci4gKi8KLQkJCQlpZiAo IXNldF90aW1lcihhY3R4LCAtMSkpCi0JCQkJCWdvdG8gZXJyb3JfcmV0dXJuOworCQkJCQkvKgor CQkJCQkgKiBUaGUgY2xpZW50IGFwcGxpY2F0aW9uIGlzIHN1cHBvc2VkIHRvIHdhaXQgdW50aWwg b3VyCisJCQkJCSAqIHRpbWVyIGV4cGlyZXMgYmVmb3JlIGNhbGxpbmcgUFFjb25uZWN0UG9sbCgp IGFnYWluLCBidXQKKwkJCQkJICogdGhhdCBtaWdodCBub3QgaGFwcGVuLiBUbyBhdm9pZCBzZW5k aW5nIGEgdG9rZW4gcmVxdWVzdAorCQkJCQkgKiBlYXJseSwgY2hlY2sgdGhlIHRpbWVyIGJlZm9y ZSBjb250aW51aW5nLgorCQkJCQkgKi8KKwkJCQkJaWYgKCFkcmFpbl90aW1lcl9ldmVudHMoYWN0 eCwgJmV4cGlyZWQpKQorCQkJCQkJZ290byBlcnJvcl9yZXR1cm47CiAKLQkJCQlicmVhazsKKwkJ CQkJaWYgKCFleHBpcmVkKQorCQkJCQl7CisJCQkJCQlzZXRfY29ubl9hbHRzb2NrKGNvbm4sIGFj dHgtPnRpbWVyZmQpOworCQkJCQkJcmV0dXJuIFBHUkVTX1BPTExJTkdfUkVBRElORzsKKwkJCQkJ fQorCisJCQkJCWJyZWFrOworCQkJCX0KIAkJfQogCiAJCS8qCi0tIAoyLjM0LjEKCg== --000000000000e06f93063bbb14b3 Content-Type: application/octet-stream; name="v3-0004-oauth-Track-total-call-count-during-a-client-flow.patch" Content-Disposition: attachment; filename="v3-0004-oauth-Track-total-call-count-during-a-client-flow.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_me0mgvhj4 RnJvbSAyYmU5OTNiOGYwN2UzYmNiMjU3ZjJiYjhiNTc5MTEzOTg1ZDQyMTRjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogRnJpLCA2IEp1biAyMDI1IDE1OjIyOjQxIC0wNzAwClN1YmplY3Q6 IFtQQVRDSCB2MyA0LzVdIG9hdXRoOiBUcmFjayB0b3RhbCBjYWxsIGNvdW50IGR1cmluZyBhIGNs aWVudCBmbG93CgpUcmFja2luZyBkb3duIHRoZSBidWdzIHRoYXQgbGVkIHRvIHRoZSBhZGRpdGlv biBvZiBjb21iX211bHRpcGxleGVyKCkKYW5kIGRyYWluX3RpbWVyX2V2ZW50cygpIHdhcyBkaWZm aWN1bHQsIGJlY2F1c2UgYW4gaW5lZmZpY2llbnQgZmxvdyBpcwpub3QgdmlzaWJseSBkaWZmZXJl bnQgZnJvbSBvbmUgdGhhdCBpcyB3b3JraW5nIHByb3Blcmx5LiBUbyBoZWxwCm1haW50YWluZXJz IG5vdGljZSB3aGVuIHNvbWV0aGluZyBoYXMgZ29uZSB3cm9uZywgdHJhY2sgdGhlIG51bWJlciBv ZgpjYWxscyBpbnRvIHRoZSBmbG93IGFzIHBhcnQgb2YgZGVidWcgbW9kZSwgYW5kIHByaW50IHRo ZSB0b3RhbCB3aGVuIHRoZQpmbG93IGZpbmlzaGVzLgoKQSBuZXcgdGVzdCBtYWtlcyBzdXJlIHRo ZSB0b3RhbCBjb3VudCBpcyBsZXNzIHRoYW4gMTAwLiAoV2UgZXhwZWN0CnNvbWV0aGluZyBvbiB0 aGUgb3JkZXIgb2YgMTAuKSBUaGlzIGlzbid0IGZvb2xwcm9vZiwgYnV0IGl0IGlzIGFibGUgdG8K Y2F0Y2ggc2V2ZXJhbCByZWdyZXNzaW9ucyBpbiB0aGUgbG9naWMgb2YgdGhlIHByaW9yIHR3byBj b21taXRzLCBhbmQKZnV0dXJlIHdvcmsgdG8gYWRkIFRMUyBzdXBwb3J0IHRvIHRoZSBvYXV0aF92 YWxpZGF0b3IgdGVzdCBzZXJ2ZXIgc2hvdWxkCnN0cmVuZ3RoZW4gaXQgYXMgd2VsbC4KLS0tCiBz cmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9vYXV0aC1jdXJsLmMgICAgICAgfCAyMiArKysrKysr KysrKysrCiAuLi4vbW9kdWxlcy9vYXV0aF92YWxpZGF0b3IvdC8wMDFfc2VydmVyLnBsICAgfCAz MSArKysrKysrKysrKysrKysrKystCiAyIGZpbGVzIGNoYW5nZWQsIDUyIGluc2VydGlvbnMoKyks IDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9v YXV0aC1jdXJsLmMgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9vYXV0aC1jdXJsLmMKaW5k ZXggMWMzNTQxNzQwODMuLjQxY2QzYmY5NjkxIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9s aWJwcS1vYXV0aC9vYXV0aC1jdXJsLmMKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgv b2F1dGgtY3VybC5jCkBAIC0yNzgsNiArMjc4LDcgQEAgc3RydWN0IGFzeW5jX2N0eAogCWJvb2wJ CXVzZXJfcHJvbXB0ZWQ7CS8qIGhhdmUgd2UgYWxyZWFkeSBzZW50IHRoZSBhdXRoeiBwcm9tcHQ/ ICovCiAJYm9vbAkJdXNlZF9iYXNpY19hdXRoOwkvKiBkaWQgd2Ugc2VuZCBhIGNsaWVudCBzZWNy ZXQ/ICovCiAJYm9vbAkJZGVidWdnaW5nOwkJLyogY2FuIHdlIGdpdmUgdW5zYWZlIGRldmVsb3Bl ciBhc3Npc3RhbmNlPyAqLworCWludAkJCWRiZ19udW1fY2FsbHM7CS8qIChkZWJ1ZyBtb2RlKSBo b3cgbWFueSB0aW1lcyB3ZXJlIHdlIGNhbGxlZD8gKi8KIH07CiAKIC8qCkBAIC0zMDI4LDYgKzMw MjksOCBAQCBQb3N0Z3Jlc1BvbGxpbmdTdGF0dXNUeXBlCiBwZ19mZV9ydW5fb2F1dGhfZmxvdyhQ R2Nvbm4gKmNvbm4pCiB7CiAJUG9zdGdyZXNQb2xsaW5nU3RhdHVzVHlwZSByZXN1bHQ7CisJZmVf b2F1dGhfc3RhdGUgKnN0YXRlID0gY29ubl9zYXNsX3N0YXRlKGNvbm4pOworCXN0cnVjdCBhc3lu Y19jdHggKmFjdHg7CiAjaWZuZGVmIFdJTjMyCiAJc2lnc2V0X3QJb3NpZ3NldDsKIAlib29sCQlz aWdwaXBlX3BlbmRpbmc7CkBAIC0zMDU2LDYgKzMwNTksMjUgQEAgcGdfZmVfcnVuX29hdXRoX2Zs b3coUEdjb25uICpjb25uKQogCiAJcmVzdWx0ID0gcGdfZmVfcnVuX29hdXRoX2Zsb3dfaW1wbChj b25uKTsKIAorCS8qCisJICogVG8gYXNzaXN0IHdpdGggZmluZGluZyBidWdzIGluIGNvbWJfbXVs dGlwbGV4ZXIoKSBhbmQKKwkgKiBkcmFpbl90aW1lcl9ldmVudHMoKSwgd2hlbiB3ZSdyZSBpbiBk ZWJ1ZyBtb2RlLCB0cmFjayB0aGUgdG90YWwgbnVtYmVyCisJICogb2YgY2FsbHMgdG8gdGhpcyBm dW5jdGlvbiBhbmQgcHJpbnQgdGhhdCBhdCB0aGUgZW5kIG9mIHRoZSBmbG93LgorCSAqCisJICog QmUgY2FyZWZ1bCB0aGF0IHN0YXRlLT5hc3luY19jdHggY291bGQgYmUgTlVMTCBpZiBlYXJseSBp bml0aWFsaXphdGlvbgorCSAqIGZhaWxzIGR1cmluZyB0aGUgZmlyc3QgY2FsbC4KKwkgKi8KKwlh Y3R4ID0gc3RhdGUtPmFzeW5jX2N0eDsKKwlBc3NlcnQoYWN0eCB8fCByZXN1bHQgPT0gUEdSRVNf UE9MTElOR19GQUlMRUQpOworCisJaWYgKGFjdHggJiYgYWN0eC0+ZGVidWdnaW5nKQorCXsKKwkJ YWN0eC0+ZGJnX251bV9jYWxscysrOworCQlpZiAocmVzdWx0ID09IFBHUkVTX1BPTExJTkdfT0sg fHwgcmVzdWx0ID09IFBHUkVTX1BPTExJTkdfRkFJTEVEKQorCQkJZnByaW50ZihzdGRlcnIsICJb bGlicHFdIHRvdGFsIG51bWJlciBvZiBwb2xsczogJWRcbiIsCisJCQkJCWFjdHgtPmRiZ19udW1f Y2FsbHMpOworCX0KKwogI2lmbmRlZiBXSU4zMgogCWlmIChtYXNrZWQpCiAJewpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3IvdC8wMDFfc2VydmVyLnBsIGIvc3Jj L3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3IvdC8wMDFfc2VydmVyLnBsCmluZGV4IDQxNjcy ZWJkNWM2Li5jMGRhZmI4YmU3NiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92 YWxpZGF0b3IvdC8wMDFfc2VydmVyLnBsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFs aWRhdG9yL3QvMDAxX3NlcnZlci5wbApAQCAtNDE4LDYgKzQxOCwzNSBAQCAkbm9kZS0+Y29ubmVj dF9mYWlscygKIAkgIHFyL2ZhaWxlZCB0byBvYnRhaW4gYWNjZXNzIHRva2VuOiBtdXR1YWwgVExT IHJlcXVpcmVkIGZvciBjbGllbnQgXChpbnZhbGlkX2NsaWVudFwpLwogKTsKIAorIyBDb3VudCB0 aGUgbnVtYmVyIG9mIGNhbGxzIHRvIHRoZSBpbnRlcm5hbCBmbG93IHdoZW4gbXVsdGlwbGUgcmV0 cmllcyBhcmUKKyMgdHJpZ2dlcmVkLiBUaGUgZXhhY3QgbnVtYmVyIGRlcGVuZHMgb24gbWFueSB0 aGluZ3MgLS0gdGhlIFRDUCBzdGFjaywgdGhlCisjIHZlcnNpb24gb2YgQ3VybCBpbiB1c2UsIHJh bmRvbSBjaGFuY2UgLS0gYnV0IGEgcmlkaWN1bG91c2x5IGhpZ2ggbnVtYmVyCisjIHN1Z2dlc3Rz IHNvbWV0aGluZyBpcyB3cm9uZyB3aXRoIG91ciBhYmlsaXR5IHRvIGNsZWFyIG11bHRpcGxleGVy IGV2ZW50cyBhZnRlcgorIyB0aGV5J3JlIG5vIGxvbmdlciBhcHBsaWNhYmxlLgorbXkgKCRyZXQs ICRzdGRvdXQsICRzdGRlcnIpID0gJG5vZGUtPnBzcWwoCisJJ3Bvc3RncmVzJywKKwkiU0VMRUNU ICdjb25uZWN0ZWQgZm9yIGNhbGwgY291bnQnIiwKKwlleHRyYV9wYXJhbXMgPT4gWyctdyddLAor CWNvbm5zdHIgPT4gY29ubnN0cihzdGFnZSA9PiAndG9rZW4nLCByZXRyaWVzID0+IDIpLAorCW9u X2Vycm9yX3N0b3AgPT4gMCk7CisKK2lzKCRyZXQsIDAsICJjYWxsIGNvdW50IGNvbm5lY3Rpb24g c3VjY2VlZHMiKTsKK2xpa2UoCisJJHN0ZGVyciwKKwlxckBWaXNpdCBodHRwczovL2V4YW1wbGVc LmNvbS8gYW5kIGVudGVyIHRoZSBjb2RlOiBwb3N0Z3Jlc3VzZXJALAorCSJjYWxsIGNvdW50OiBz dGRlcnIgbWF0Y2hlcyIpOworCitteSAkY291bnRfcGF0dGVybiA9IHFyL1xbbGlicHFcXSB0b3Rh bCBudW1iZXIgb2YgcG9sbHM6IChcZCspLzsKK2lmIChsaWtlKCRzdGRlcnIsICRjb3VudF9wYXR0 ZXJuLCAiY2FsbCBjb3VudDogY291bnQgaXMgcHJpbnRlZCIpKQoreworCSMgRm9yIHJlZmVyZW5j ZSwgYSB0eXBpY2FsIGZsb3cgd2l0aCB0d28gcmV0cmllcyBtaWdodCB0YWtlIGJldHdlZW4gNS0x NQorCSMgY2FsbHMgdG8gdGhlIGNsaWVudCBpbXBsZW1lbnRhdGlvbi4gQW5kIHdoaWxlIHRoaXMg d2lsbCBwcm9iYWJseSBjb250aW51ZQorCSMgdG8gY2hhbmdlIGFjcm9zcyBPU2VzIGFuZCBDdXJs IHVwZGF0ZXMsIHdlJ3JlIGxpa2VseSBpbiB0cm91YmxlIGlmIHdlIHNlZQorCSMgaHVuZHJlZHMg b3IgdGhvdXNhbmRzIG9mIGNhbGxzLgorCSRzdGRlcnIgPX4gJGNvdW50X3BhdHRlcm47CisJY21w X29rKCQxLCAnPCcsIDEwMCwgImNhbGwgY291bnQgaXMgcmVhc29uYWJseSBzbWFsbCIpOworfQor CiAjIFN0cmVzcyB0ZXN0OiBtYWtlIHN1cmUgb3VyIGJ1aWx0aW4gZmxvdyBvcGVyYXRlcyBjb3Jy ZWN0bHkgZXZlbiBpZiB0aGUgY2xpZW50CiAjIGFwcGxpY2F0aW9uIGlzbid0IHJlc3BlY3Rpbmcg UEdSRVNfUE9MTElOR19SRUFESU5HL1dSSVRJTkcgc2lnbmFscyByZXR1cm5lZAogIyBmcm9tIFBR Y29ubmVjdFBvbGwoKS4KQEAgLTQyOCw3ICs0NTcsNyBAQCBteSBAY21kID0gKAogCWNvbm5zdHIo c3RhZ2UgPT4gJ2FsbCcsIHJldHJpZXMgPT4gMSwgaW50ZXJ2YWwgPT4gMSkpOwogCiBub3RlICJy dW5uaW5nICciIC4gam9pbigiJyAnIiwgQGNtZCkgLiAiJyI7Ci1teSAoJHN0ZG91dCwgJHN0ZGVy cikgPSBydW5fY29tbWFuZChcQGNtZCk7CisoJHN0ZG91dCwgJHN0ZGVycikgPSBydW5fY29tbWFu ZChcQGNtZCk7CiAKIGxpa2UoJHN0ZG91dCwgcXIvY29ubmVjdGlvbiBzdWNjZWVkZWQvLCAic3Ry ZXNzLWFzeW5jOiBzdGRvdXQgbWF0Y2hlcyIpOwogdW5saWtlKAotLSAKMi4zNC4xCgo= --000000000000e06f93063bbb14b3 Content-Type: application/octet-stream; name="v3-0005-oauth-Add-unit-tests-for-multiplexer-handling.patch" Content-Disposition: attachment; filename="v3-0005-oauth-Add-unit-tests-for-multiplexer-handling.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_me0mgy3l5 RnJvbSA1MDI1N2JmMzJlYjJiMDk3MmU1MTM5YWM0YTc5MzY3MzcyYzc3Mzg1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogV2VkLCA1IE1hciAyMDI1IDE1OjA0OjM0IC0wODAwClN1YmplY3Q6 IFtQQVRDSCB2MyA1LzVdIG9hdXRoOiBBZGQgdW5pdCB0ZXN0cyBmb3IgbXVsdGlwbGV4ZXIgaGFu ZGxpbmcKClRvIGJldHRlciByZWNvcmQgdGhlIGludGVybmFsIGJlaGF2aW9ycyBvZiBvYXV0aC1j dXJsLmMsIGFkZCBhIHVuaXQgdGVzdApzdWl0ZSBmb3IgdGhlIHNvY2tldCBhbmQgdGltZXIgaGFu ZGxpbmcgY29kZS4gVGhpcyBpcyBhbGwgYmFzZWQgb24gVEFQCmFuZCBkcml2ZW4gYnkgb3VyIGV4 aXN0aW5nIFRlc3Q6Ok1vcmUgaW5mcmFzdHJ1Y3R1cmUuCi0tLQogc3JjL2ludGVyZmFjZXMvbGli cHEtb2F1dGgvTWFrZWZpbGUgICAgICAgICAgfCAgMTQgKwogc3JjL2ludGVyZmFjZXMvbGlicHEt b2F1dGgvbWVzb24uYnVpbGQgICAgICAgfCAgMzUgKysKIHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9h dXRoL3QvMDAxX29hdXRoLnBsICAgIHwgIDI0ICsKIHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRo L3Rlc3Qtb2F1dGgtY3VybC5jIHwgNTI3ICsrKysrKysrKysrKysrKysrKysKIDQgZmlsZXMgY2hh bmdlZCwgNjAwIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW50ZXJmYWNl cy9saWJwcS1vYXV0aC90LzAwMV9vYXV0aC5wbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbnRl cmZhY2VzL2xpYnBxLW9hdXRoL3Rlc3Qtb2F1dGgtY3VybC5jCgpkaWZmIC0tZ2l0IGEvc3JjL2lu dGVyZmFjZXMvbGlicHEtb2F1dGgvTWFrZWZpbGUgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0 aC9NYWtlZmlsZQppbmRleCA2ODJmMTc0MTNiMy4uZTczNTczNjk0YjkgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL01ha2VmaWxlCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xp YnBxLW9hdXRoL01ha2VmaWxlCkBAIC03OSw1ICs3OSwxOSBAQCB1bmluc3RhbGw6CiAJcm0gLWYg JyQoREVTVERJUikkKGxpYmRpcikvJChzdGxpYiknCiAJcm0gLWYgJyQoREVTVERJUikkKGxpYmRp cikvJChzaGxpYiknCiAKKy5QSE9OWTogYWxsLXRlc3RzCithbGwtdGVzdHM6IG9hdXRoX3Rlc3Rz JChYKQorCitvYXV0aF90ZXN0cyQoWCk6IHRlc3Qtb2F1dGgtY3VybC5vIG9hdXRoLXV0aWxzLm8g JChXSU4zMlJFUykgfCBzdWJtYWtlLWxpYnBncG9ydCBzdWJtYWtlLWxpYnBxCisJJChDQykgJChD RkxBR1MpICReICQoTERGTEFHUykgJChMREZMQUdTX0VYKSAkKFNITElCX0xJTkspIC1vICRACisK K2NoZWNrOiBhbGwtdGVzdHMKKwkkKHByb3ZlX2NoZWNrKQorCitpbnN0YWxsY2hlY2s6IGFsbC10 ZXN0cworCSQocHJvdmVfaW5zdGFsbGNoZWNrKQorCiBjbGVhbiBkaXN0Y2xlYW46IGNsZWFuLWxp YgogCXJtIC1mICQoT0JKUykgJChPQkpTX1NUQVRJQykgJChPQkpTX1NITElCKQorCXJtIC1mIHRl c3Qtb2F1dGgtY3VybC5vIG9hdXRoX3Rlc3RzJChYKQorCXJtIC1yZiB0bXBfY2hlY2sKZGlmZiAt LWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL21lc29uLmJ1aWxkIGIvc3JjL2ludGVy ZmFjZXMvbGlicHEtb2F1dGgvbWVzb24uYnVpbGQKaW5kZXggZGYwNjRjNTlhNDAuLjUwNWUxNjcx Yjg2IDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9tZXNvbi5idWlsZAor KysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9tZXNvbi5idWlsZApAQCAtNDcsMyArNDcs MzggQEAgbGlicHFfb2F1dGhfc28gPSBzaGFyZWRfbW9kdWxlKGxpYnBxX29hdXRoX25hbWUsCiAg IGxpbmtfYXJnczogZXhwb3J0X2ZtdC5mb3JtYXQoZXhwb3J0X2ZpbGUuZnVsbF9wYXRoKCkpLAog ICBrd2FyZ3M6IGRlZmF1bHRfbGliX2FyZ3MsCiApCisKK2xpYnBxX29hdXRoX3Rlc3RfZGVwcyA9 IFtdCisKK29hdXRoX3Rlc3Rfc291cmNlcyA9IGZpbGVzKCd0ZXN0LW9hdXRoLWN1cmwuYycpICsg bGlicHFfb2F1dGhfc29fc291cmNlcworCitpZiBob3N0X3N5c3RlbSA9PSAnd2luZG93cycKKyAg b2F1dGhfdGVzdF9zb3VyY2VzICs9IHJjX2Jpbl9nZW4ucHJvY2Vzcyh3aW4zMnZlcl9yYywgZXh0 cmFfYXJnczogWworICAgICctLU5BTUUnLCAnb2F1dGhfdGVzdHMnLAorICAgICctLUZJTEVERVND JywgJ09BdXRoIHVuaXQgdGVzdCBwcm9ncmFtJyxdKQorZW5kaWYKKworbGlicHFfb2F1dGhfdGVz dF9kZXBzICs9IGV4ZWN1dGFibGUoJ29hdXRoX3Rlc3RzJywKKyAgb2F1dGhfdGVzdF9zb3VyY2Vz LAorICBkZXBlbmRlbmNpZXM6IFtmcm9udGVuZF9zaGxpYl9jb2RlLCBsaWJwcSwgbGlicHFfb2F1 dGhfZGVwc10sCisgIGt3YXJnczogZGVmYXVsdF9iaW5fYXJncyArIHsKKyAgICAnY19hcmdzJzog ZGVmYXVsdF9iaW5fYXJncy5nZXQoJ2NfYXJncycsIFtdKSArIGxpYnBxX29hdXRoX3NvX2NfYXJn cywKKyAgICAnY19wY2gnOiBwY2hfcG9zdGdyZXNfZmVfaCwKKyAgICAnaW5jbHVkZV9kaXJlY3Rv cmllcyc6IFtsaWJwcV9pbmMsIHBvc3RncmVzX2luY10sCisgICAgJ2luc3RhbGwnOiBmYWxzZSwK KyAgfQorKQorCit0ZXN0cHJlcF90YXJnZXRzICs9IGxpYnBxX29hdXRoX3Rlc3RfZGVwcworCit0 ZXN0cyArPSB7CisgICduYW1lJzogJ2xpYnBxLW9hdXRoJywKKyAgJ3NkJzogbWVzb24uY3VycmVu dF9zb3VyY2VfZGlyKCksCisgICdiZCc6IG1lc29uLmN1cnJlbnRfYnVpbGRfZGlyKCksCisgICd0 YXAnOiB7CisgICAgJ3Rlc3RzJzogWworICAgICAgJ3QvMDAxX29hdXRoLnBsJywKKyAgICBdLAor ICAgICdkZXBzJzogbGlicHFfb2F1dGhfdGVzdF9kZXBzLAorICB9LAorfQpkaWZmIC0tZ2l0IGEv c3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvdC8wMDFfb2F1dGgucGwgYi9zcmMvaW50ZXJmYWNl cy9saWJwcS1vYXV0aC90LzAwMV9vYXV0aC5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uZTc2OTg1NmMyYzkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW50ZXJmYWNl cy9saWJwcS1vYXV0aC90LzAwMV9vYXV0aC5wbApAQCAtMCwwICsxLDI0IEBACisjIENvcHlyaWdo dCAoYykgMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKK3VzZSBzdHJp Y3Q7Cit1c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2FsbCc7CisKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0 OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCisjIERlZmVyIGVudGlyZWx5IHRvIHRoZSBvYXV0 aF90ZXN0cyBleGVjdXRhYmxlLiBzdGRvdXQvZXJyIGlzIHJvdXRlZCB0aHJvdWdoCisjIFRlc3Q6 Ok1vcmUgc28gdGhhdCBvdXIgbG9nZ2luZyBpbmZyYXN0cnVjdHVyZSBjYW4gaGFuZGxlIGl0IGNv cnJlY3RseS4gVXNpbmcKKyMgSVBDOjpSdW46Om5ld19jaHVua2VyIHNlZW1zIHRvIGhlbHAgaW50 ZXJsZWF2ZSB0aGUgdHdvIHN0cmVhbXMgYSBsaXR0bGUgYmV0dGVyCisjIHRoYW4gd2l0aG91dC4K KyMKKyMgVE9ETzogcHJvdmUgY2FuIGFsc28gZGVhbCB3aXRoIG5hdGl2ZSBleGVjdXRhYmxlcyBp dHNlbGYsIHdoaWNoIHdlIGNvdWxkCisjIHByb2JhYmx5IG1ha2UgdXNlIG9mIHZpYSBQUk9WRV9U RVNUUyBvbiB0aGUgTWFrZWZpbGUgc2lkZS4gQnV0IHRoZSBNZXNvbiBzZXR1cAorIyBjYWxscyBQ ZXJsIGRpcmVjdGx5LCB3aGljaCB3b3VsZCByZXF1aXJlIG1vcmUgY29kZSB0byB3b3JrIGFyb3Vu ZC4uLiBhbmQKKyMgdGhlcmUncyBzdGlsbCB0aGUgbWF0dGVyIG9mIGxvZ2dpbmcuCitteSAkYnVp bGRlciA9IFRlc3Q6Ok1vcmUtPmJ1aWxkZXI7CitteSAkb3V0ID0gJGJ1aWxkZXItPm91dHB1dDsK K215ICRlcnIgPSAkYnVpbGRlci0+ZmFpbHVyZV9vdXRwdXQ7CisKK0lQQzo6UnVuOjpydW4gWydv YXV0aF90ZXN0cyddLAorICAnPicsIElQQzo6UnVuOjpuZXdfY2h1bmtlciwgc3ViIHsgcHJpbnQg eyRvdXR9ICRfWzBdIH0sCisgICcyPicsIElQQzo6UnVuOjpuZXdfY2h1bmtlciwgc3ViIHsgcHJp bnQgeyRlcnJ9ICRfWzBdIH0KKyAgb3IgZGllICJvYXV0aF90ZXN0cyByZXR1cm5lZCAkPyI7CmRp ZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC90ZXN0LW9hdXRoLWN1cmwuYyBi L3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL3Rlc3Qtb2F1dGgtY3VybC5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44MjYzYWZmMmY0YQotLS0gL2Rldi9udWxsCisr KyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL3Rlc3Qtb2F1dGgtY3VybC5jCkBAIC0wLDAg KzEsNTI3IEBACisvKgorICogdGVzdC1vYXV0aC1jdXJsLmMKKyAqCisgKiBBIHVuaXQgdGVzdCBk cml2ZXIgZm9yIGxpYnBxLW9hdXRoLiBUaGlzICNpbmNsdWRlcyBvYXV0aC1jdXJsLmMsIHdoaWNo IGxldHMKKyAqIHRoZSB0ZXN0cyByZWZlcmVuY2Ugc3RhdGljIGZ1bmN0aW9ucyBhbmQgb3RoZXIg aW50ZXJuYWxzLgorICoKKyAqIFVTRV9BU1NFUlRfQ0hFQ0tJTkcgaXMgcmVxdWlyZWQsIHRvIG1h a2UgaXQgZWFzeSBmb3IgdGVzdHMgdG8gd3JhcAorICogbXVzdC1zdWNjZWVkIGNvZGUgYXMgcGFy dCBvZiB0ZXN0IHNldHVwLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBH bG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqLworCisjaW5jbHVkZSAib2F1dGgtY3VybC5jIgor CisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKworLyoK KyAqIFRBUCBIZWxwZXJzCisgKi8KKworc3RhdGljIGludAludW1fdGVzdHMgPSAwOworCisvKgor ICogUmVwb3J0cyBvay9ub3Qgb2sgdG8gdGhlIFRBUCBzdHJlYW0gb24gc3Rkb3V0LgorICovCisj ZGVmaW5lIG9rKE9LLCBURVNUKSBcCisJb2tfaW1wbChPSywgVEVTVCwgI09LLCBfX0ZJTEVfXywg X19MSU5FX18pCisKK3N0YXRpYyBib29sCitva19pbXBsKGJvb2wgb2ssIGNvbnN0IGNoYXIgKnRl c3QsIGNvbnN0IGNoYXIgKnRlc3RzdHIsIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKQorewor CXByaW50ZigiJXNvayAlZCAtICVzXG4iLCBvayA/ICIiIDogIm5vdCAiLCArK251bV90ZXN0cywg dGVzdCk7CisKKwlpZiAoIW9rKQorCXsKKwkJcHJpbnRmKCIjIGF0ICVzOiVkOlxuIiwgZmlsZSwg bGluZSk7CisJCXByaW50ZigiIyAgIGV4cHJlc3Npb24gaXMgZmFsc2U6ICVzXG4iLCB0ZXN0c3Ry KTsKKwl9CisKKwlyZXR1cm4gb2s7Cit9CisKKy8qCisgKiBMaWtlIG9rKHRoaXMgPT0gdGhhdCks IGJ1dCB3aXRoIG1vcmUgZGlhZ25vc3RpY3Mgb24gZmFpbHVyZS4KKyAqCisgKiBPbmx5IHdvcmtz IG9uIGludHMsIGJ1dCBsdWNraWx5IHRoYXQncyBhbGwgd2UgbmVlZCBoZXJlLiBOb3RlIHRoYXQg dGhlIG11Y2gKKyAqIHNpbXBsZXItbG9va2luZyBtYWNybyBpbXBsZW1lbnRhdGlvbgorICoKKyAq ICAgICBpc19kaWFnKG9rKFRISVMgPT0gVEhBVCwgVEVTVCksIFRISVMsICNUSElTLCBUSEFULCAj VEhBVCkKKyAqCisgKiBzdWZmZXJzIGZyb20gbXVsdGlwbGUgZXZhbHVhdGlvbiBvZiB0aGUgbWFj cm8gYXJndW1lbnRzLi4uCisgKi8KKyNkZWZpbmUgaXMoVEhJUywgVEhBVCwgVEVTVCkgXAorCWRv IHsgXAorCQlpbnQgdGhpc18gPSAoVEhJUyksIFwKKwkJCXRoYXRfID0gKFRIQVQpOyBcCisJCWlz X2RpYWcoIFwKKwkJCW9rX2ltcGwodGhpc18gPT0gdGhhdF8sIFRFU1QsICNUSElTICIgPT0gIiAj VEhBVCwgX19GSUxFX18sIF9fTElORV9fKSwgXAorCQkJdGhpc18sICNUSElTLCB0aGF0XywgI1RI QVQgXAorCQkpOyBcCisJfSB3aGlsZSAoMCkKKworc3RhdGljIGJvb2wKK2lzX2RpYWcoYm9vbCBv aywgaW50IHRoaXMsIGNvbnN0IGNoYXIgKnRoaXNzdHIsIGludCB0aGF0LCBjb25zdCBjaGFyICp0 aGF0c3RyKQoreworCWlmICghb2spCisJCXByaW50ZigiIyAgICVzID0gJWQ7ICVzID0gJWRcbiIs IHRoaXNzdHIsIHRoaXMsIHRoYXRzdHIsIHRoYXQpOworCisJcmV0dXJuIG9rOworfQorCisvKgor ICogVXRpbGl0aWVzCisgKi8KKworLyoKKyAqIENyZWF0ZXMgYSBwYXJ0aWFsbHktaW5pdGlhbGl6 ZWQgYXN5bmNfY3R4IGZvciB0aGUgcHVycG9zZXMgb2YgdGVzdGluZy4gRnJlZQorICogd2l0aCBm cmVlX3Rlc3RfYWN0eCgpLgorICovCitzdGF0aWMgc3RydWN0IGFzeW5jX2N0eCAqCitpbml0X3Rl c3RfYWN0eCh2b2lkKQoreworCXN0cnVjdCBhc3luY19jdHggKmFjdHg7CisKKwlhY3R4ID0gY2Fs bG9jKDEsIHNpemVvZigqYWN0eCkpOworCUFzc2VydChhY3R4KTsKKworCWFjdHgtPm11eCA9IFBH SU5WQUxJRF9TT0NLRVQ7CisJYWN0eC0+dGltZXJmZCA9IC0xOworCWFjdHgtPmRlYnVnZ2luZyA9 IHRydWU7CisKKwlpbml0UFFFeHBCdWZmZXIoJmFjdHgtPmVycmJ1Zik7CisKKwlBc3NlcnQoc2V0 dXBfbXVsdGlwbGV4ZXIoYWN0eCkpOworCisJcmV0dXJuIGFjdHg7Cit9CisKK3N0YXRpYyB2b2lk CitmcmVlX3Rlc3RfYWN0eChzdHJ1Y3QgYXN5bmNfY3R4ICphY3R4KQoreworCXRlcm1QUUV4cEJ1 ZmZlcigmYWN0eC0+ZXJyYnVmKTsKKworCWlmIChhY3R4LT5tdXggIT0gUEdJTlZBTElEX1NPQ0tF VCkKKwkJY2xvc2UoYWN0eC0+bXV4KTsKKwlpZiAoYWN0eC0+dGltZXJmZCA+PSAwKQorCQljbG9z ZShhY3R4LT50aW1lcmZkKTsKKworCWZyZWUoYWN0eCk7Cit9CisKK3N0YXRpYyBjaGFyIGR1bW15 X2J1Zls0ICogMTAyNF07CS8qIGZvciBmaWxsX3BpcGUvZHJhaW5fcGlwZSAqLworCisvKgorICog V3JpdGVzIHRvIHRoZSB3cml0ZSBzaWRlIG9mIGEgcGlwZSB1bnRpbCBpdCB3b24ndCB0YWtlIGFu eSBtb3JlIGRhdGEuIFJldHVybnMKKyAqIHRoZSBhbW91bnQgd3JpdHRlbi4KKyAqLworc3RhdGlj IHNzaXplX3QKK2ZpbGxfcGlwZShpbnQgZmQpCit7CisJaW50CQkJbW9kZTsKKwlzc2l6ZV90CQl3 cml0dGVuID0gMDsKKworCS8qIERvbid0IGJsb2NrLiAqLworCUFzc2VydCgobW9kZSA9IGZjbnRs KGZkLCBGX0dFVEZMKSkgIT0gLTEpOworCUFzc2VydChmY250bChmZCwgRl9TRVRGTCwgbW9kZSB8 IE9fTk9OQkxPQ0spID09IDApOworCisJd2hpbGUgKHRydWUpCisJeworCQlzc2l6ZV90CQl3Owor CisJCXcgPSB3cml0ZShmZCwgZHVtbXlfYnVmLCBzaXplb2YoZHVtbXlfYnVmKSk7CisJCWlmICh3 IDwgMCkKKwkJeworCQkJaWYgKGVycm5vICE9IEVBR0FJTiAmJiBlcnJubyAhPSBFV09VTERCTE9D SykKKwkJCXsKKwkJCQlwZXJyb3IoIndyaXRlIHRvIHBpcGUiKTsKKwkJCQl3cml0dGVuID0gLTE7 CisJCQl9CisJCQlicmVhazsKKwkJfQorCisJCXdyaXR0ZW4gKz0gdzsKKwl9CisKKwkvKiBSZXNl dCB0aGUgZGVzY3JpcHRvciBmbGFncy4gKi8KKwlBc3NlcnQoZmNudGwoZmQsIEZfU0VURkQsIG1v ZGUpID09IDApOworCisJcmV0dXJuIHdyaXR0ZW47Cit9CisKKy8qCisgKiBEcmFpbnMgdGhlIHJl cXVlc3RlZCBhbW91bnQgb2YgZGF0YSBmcm9tIHRoZSByZWFkIHNpZGUgb2YgYSBwaXBlLgorICov CitzdGF0aWMgYm9vbAorZHJhaW5fcGlwZShpbnQgZmQsIHNzaXplX3QgbikKK3sKKwlBc3NlcnQo biA+IDApOworCisJd2hpbGUgKG4pCisJeworCQlzaXplX3QJCXRvX3JlYWQgPSAobiA8PSBzaXpl b2YoZHVtbXlfYnVmKSkgPyBuIDogc2l6ZW9mKGR1bW15X2J1Zik7CisJCXNzaXplX3QJCWRyYWlu ZWQ7CisKKwkJZHJhaW5lZCA9IHJlYWQoZmQsIGR1bW15X2J1ZiwgdG9fcmVhZCk7CisJCWlmIChk cmFpbmVkIDwgMCkKKwkJeworCQkJcGVycm9yKCJyZWFkIGZyb20gcGlwZSIpOworCQkJcmV0dXJu IGZhbHNlOworCQl9CisKKwkJbiAtPSBkcmFpbmVkOworCX0KKworCXJldHVybiB0cnVlOworfQor CisvKgorICogVGVzdHMgd2hldGhlciB0aGUgbXVsdGlwbGV4ZXIgaXMgbWFya2VkIHJlYWR5IGJ5 IHRoZSBkZWFkbGluZS4gVGhpcyBpcyBhCisgKiBtYWNybyBzbyB0aGF0IGZpbGUvbGluZSBpbmZv cm1hdGlvbiBtYWtlcyBzZW5zZSBkdXJpbmcgZmFpbHVyZXMuCisgKgorICogTkI6IG91ciBjdXJy ZW50IG11bHRpcGxleGVyIGltcGxlbWVudGF0aW9ucyAoZXBvbGwva3F1ZXVlKSBhcmUgKnJlYWRh YmxlKgorICogd2hlbiB0aGUgdW5kZXJseWluZyBsaWJjdXJsIHNvY2tldHMgYXJlICp3cml0YWJs ZSouIFRoaXMgYmVoYXZpb3IgaXMgcGlubmVkCisgKiBoZXJlIHRvIHJlY29yZCB0aGF0IGV4cGVj dGF0aW9uOyBQR1JFU19QT0xMSU5HX1JFQURJTkcgaXMgaGFyZGNvZGVkCisgKiB0aHJvdWdob3V0 IHRoZSBmbG93IGFuZCB3b3VsZCBuZWVkIHRvIGJlIGNoYW5nZWQgaWYgYSBuZXcgbXVsdGlwbGV4 ZXIgZG9lcworICogc29tZXRoaW5nIGRpZmZlcmVudC4KKyAqLworI2RlZmluZSBtdXhfaXNfcmVh ZHkoTVVYLCBERUFETElORSwgVEVTVCkgXAorCWRvIHsgXAorCQlpbnQgcmVzXyA9IFBRc29ja2V0 UG9sbChNVVgsIDEsIDAsIERFQURMSU5FKTsgXAorCQlBc3NlcnQocmVzXyAhPSAtMSk7IFwKKwkJ b2socmVzXyA+IDAsICJtdWx0aXBsZXhlciBpcyByZWFkeSAiIFRFU1QpOyBcCisJfSB3aGlsZSAo MCkKKworLyoKKyAqIFRoZSBvcHBvc2l0ZSBvZiBtdXhfaXNfcmVhZHkoKS4KKyAqLworI2RlZmlu ZSBtdXhfaXNfbm90X3JlYWR5KE1VWCwgVEVTVCkgXAorCWRvIHsgXAorCQlpbnQgcmVzXyA9IFBR c29ja2V0UG9sbChNVVgsIDEsIDAsIDApOyBcCisJCUFzc2VydChyZXNfICE9IC0xKTsgXAorCQlp cyhyZXNfLCAwLCAibXVsdGlwbGV4ZXIgaXMgbm90IHJlYWR5ICIgVEVTVCk7IFwKKwl9IHdoaWxl ICgwKQorCisvKgorICogVGVzdCBTdWl0ZXMKKyAqLworCisvKiBQZXItc3VpdGUgdGltZW91dC4g U2V0IHZpYSB0aGUgUEdfVEVTVF9USU1FT1VUX0RFRkFVTFQgZW52dmFyLiAqLworc3RhdGljIHBn X3VzZWNfdGltZV90IHRpbWVvdXRfdXMgPSAxODAgKiAxMDAwICogMTAwMDsKKworc3RhdGljIHZv aWQKK3Rlc3Rfc2V0X3RpbWVyKHZvaWQpCit7CisJc3RydWN0IGFzeW5jX2N0eCAqYWN0eCA9IGlu aXRfdGVzdF9hY3R4KCk7CisJY29uc3QgcGdfdXNlY190aW1lX3QgZGVhZGxpbmUgPSBQUWdldEN1 cnJlbnRUaW1lVVNlYygpICsgdGltZW91dF91czsKKworCXByaW50ZigiIyB0ZXN0X3NldF90aW1l clxuIik7CisKKwkvKiBBIHplcm8tZHVyYXRpb24gdGltZXIgc2hvdWxkIHJlc3VsdCBpbiBhIG5l YXItaW1tZWRpYXRlIHJlYWR5IHNpZ25hbC4gKi8KKwlBc3NlcnQoc2V0X3RpbWVyKGFjdHgsIDAp KTsKKwltdXhfaXNfcmVhZHkoYWN0eC0+bXV4LCBkZWFkbGluZSwgIndoZW4gdGltZXIgZXhwaXJl cyIpOworCWlzKHRpbWVyX2V4cGlyZWQoYWN0eCksIDEsICJ0aW1lcl9leHBpcmVkKCkgcmV0dXJu cyAxIHdoZW4gdGltZXIgZXhwaXJlcyIpOworCisJLyogUmVzZXR0aW5nIHRoZSB0aW1lciBmYXIg aW4gdGhlIGZ1dHVyZSBzaG91bGQgdW5zZXQgdGhlIHJlYWR5IHNpZ25hbC4gKi8KKwlBc3NlcnQo c2V0X3RpbWVyKGFjdHgsIElOVF9NQVgpKTsKKwltdXhfaXNfbm90X3JlYWR5KGFjdHgtPm11eCwg IndoZW4gdGltZXIgaXMgcmVzZXQgdG8gdGhlIGZ1dHVyZSIpOworCWlzKHRpbWVyX2V4cGlyZWQo YWN0eCksIDAsICJ0aW1lcl9leHBpcmVkKCkgcmV0dXJucyAwIHdpdGggdW5leHBpcmVkIHRpbWVy Iik7CisKKwkvKiBTZXR0aW5nIGFub3RoZXIgemVyby1kdXJhdGlvbiB0aW1lciBzaG91bGQgb3Zl cnJpZGUgdGhlIHByZXZpb3VzIG9uZS4gKi8KKwlBc3NlcnQoc2V0X3RpbWVyKGFjdHgsIDApKTsK KwltdXhfaXNfcmVhZHkoYWN0eC0+bXV4LCBkZWFkbGluZSwgIndoZW4gdGltZXIgaXMgcmUtZXhw aXJlZCIpOworCWlzKHRpbWVyX2V4cGlyZWQoYWN0eCksIDEsICJ0aW1lcl9leHBpcmVkKCkgcmV0 dXJucyAxIHdoZW4gdGltZXIgaXMgcmUtZXhwaXJlZCIpOworCisJLyogQW5kIGRpc2FibGluZyB0 aGF0IHRpbWVyIHNob3VsZCBvbmNlIGFnYWluIHVuc2V0IHRoZSByZWFkeSBzaWduYWwuICovCisJ QXNzZXJ0KHNldF90aW1lcihhY3R4LCAtMSkpOworCW11eF9pc19ub3RfcmVhZHkoYWN0eC0+bXV4 LCAid2hlbiB0aW1lciBpcyB1bnNldCIpOworCWlzKHRpbWVyX2V4cGlyZWQoYWN0eCksIDAsICJ0 aW1lcl9leHBpcmVkKCkgcmV0dXJucyAwIHdoZW4gdGltZXIgaXMgdW5zZXQiKTsKKworCXsKKwkJ Ym9vbAkJZXhwaXJlZDsKKworCQkvKiBNYWtlIHN1cmUgZHJhaW5fdGltZXJfZXZlbnRzKCkgZnVu Y3Rpb25zIGNvcnJlY3RseSBhcyB3ZWxsLiAqLworCQlBc3NlcnQoc2V0X3RpbWVyKGFjdHgsIDAp KTsKKwkJbXV4X2lzX3JlYWR5KGFjdHgtPm11eCwgZGVhZGxpbmUsICJ3aGVuIHRpbWVyIGlzIHJl LWV4cGlyZWQgKGRyYWluX3RpbWVyX2V2ZW50cykiKTsKKworCQlBc3NlcnQoZHJhaW5fdGltZXJf ZXZlbnRzKGFjdHgsICZleHBpcmVkKSk7CisJCW11eF9pc19ub3RfcmVhZHkoYWN0eC0+bXV4LCAi d2hlbiB0aW1lciBpcyBkcmFpbmVkIGFmdGVyIGV4cGlyaW5nIik7CisJCWlzKGV4cGlyZWQsIDEs ICJkcmFpbl90aW1lcl9ldmVudHMoKSByZXBvcnRzIGV4cGlyYXRpb24iKTsKKwkJaXModGltZXJf ZXhwaXJlZChhY3R4KSwgMCwgInRpbWVyX2V4cGlyZWQoKSByZXR1cm5zIDAgYWZ0ZXIgdGltZXIg aXMgZHJhaW5lZCIpOworCisJCS8qIEEgc2Vjb25kIGRyYWluIHNob3VsZCBkbyBub3RoaW5nLiAq LworCQlBc3NlcnQoZHJhaW5fdGltZXJfZXZlbnRzKGFjdHgsICZleHBpcmVkKSk7CisJCW11eF9p c19ub3RfcmVhZHkoYWN0eC0+bXV4LCAid2hlbiB0aW1lciBpcyBkcmFpbmVkIGEgc2Vjb25kIHRp bWUiKTsKKwkJaXMoZXhwaXJlZCwgMCwgImRyYWluX3RpbWVyX2V2ZW50cygpIHJlcG9ydHMgbm8g ZXhwaXJhdGlvbiIpOworCQlpcyh0aW1lcl9leHBpcmVkKGFjdHgpLCAwLCAidGltZXJfZXhwaXJl ZCgpIHN0aWxsIHJldHVybnMgMCIpOworCX0KKworCWZyZWVfdGVzdF9hY3R4KGFjdHgpOworfQor CitzdGF0aWMgdm9pZAordGVzdF9yZWdpc3Rlcl9zb2NrZXQodm9pZCkKK3sKKwlzdHJ1Y3QgYXN5 bmNfY3R4ICphY3R4ID0gaW5pdF90ZXN0X2FjdHgoKTsKKwlpbnQJCQlwaXBlZmRbMl07CisJaW50 CQkJcmZkLAorCQkJCXdmZDsKKwlib29sCQliaWRpcmVjdGlvbmFsOworCisJLyogQ3JlYXRlIGEg bG9jYWwgcGlwZSBmb3IgY29tbXVuaWNhdGlvbi4gKi8KKwlBc3NlcnQocGlwZShwaXBlZmQpID09 IDApOworCXJmZCA9IHBpcGVmZFswXTsKKwl3ZmQgPSBwaXBlZmRbMV07CisKKwkvKgorCSAqIFNv bWUgcGxhdGZvcm1zIChGcmVlQlNEKSBpbXBsZW1lbnQgYmlkaXJlY3Rpb25hbCBwaXBlcywgYWZm ZWN0aW5nIHRoZQorCSAqIGJlaGF2aW9yIG9mIHNvbWUgb2YgdGhlc2UgdGVzdHMuIFN0b3JlIHRo YXQga25vd2xlZGdlIGZvciBsYXRlci4KKwkgKi8KKwliaWRpcmVjdGlvbmFsID0gUFFzb2NrZXRQ b2xsKHJmZCAvKiByZWFkICovICwgMCwgMSAvKiB3cml0ZSAqLyAsIDApID4gMDsKKworCS8qCisJ ICogVGhpcyBzdWl0ZSBydW5zIHR3aWNlIC0tIG9uY2UgdXNpbmcgQ1VSTF9QT0xMX0lOL0NVUkxf UE9MTF9PVVQgZm9yCisJICogcmVhZC93cml0ZSBvcGVyYXRpb25zLCByZXNwZWN0aXZlbHksIGFu ZCBvbmNlIHVzaW5nIENVUkxfUE9MTF9JTk9VVCBmb3IKKwkgKiBib3RoIHNpZGVzLgorCSAqLwor CWZvciAoaW50IGlub3V0ID0gMDsgaW5vdXQgPCAyOyBpbm91dCsrKQorCXsKKwkJY29uc3QgaW50 CWluX2V2ZW50ID0gaW5vdXQgPyBDVVJMX1BPTExfSU5PVVQgOiBDVVJMX1BPTExfSU47CisJCWNv bnN0IGludAlvdXRfZXZlbnQgPSBpbm91dCA/IENVUkxfUE9MTF9JTk9VVCA6IENVUkxfUE9MTF9P VVQ7CisJCWNvbnN0IHBnX3VzZWNfdGltZV90IGRlYWRsaW5lID0gUFFnZXRDdXJyZW50VGltZVVT ZWMoKSArIHRpbWVvdXRfdXM7CisJCXNpemVfdAkJYmlkaV9waXBlX3NpemUgPSAwOyAvKiBzaWxl bmNlIGNvbXBpbGVyIHdhcm5pbmdzICovCisKKwkJcHJpbnRmKCIjIHRlc3RfcmVnaXN0ZXJfc29j a2V0ICVzXG4iLCBpbm91dCA/ICIoSU5PVVQpIiA6ICIiKTsKKworCQkvKgorCQkgKiBBdCB0aGUg c3RhcnQgb2YgdGhlIHRlc3QsIHRoZSByZWFkIHNpZGUgc2hvdWxkIGJlIGJsb2NrZWQgYW5kIHRo ZQorCQkgKiB3cml0ZSBzaWRlIHNob3VsZCBiZSBvcGVuLiAoVGhlcmUncyBhIG1pc3Rha2UgYXQg dGhlIGVuZCBvZiB0aGlzCisJCSAqIGxvb3Agb3RoZXJ3aXNlLikKKwkJICovCisJCUFzc2VydChQ UXNvY2tldFBvbGwocmZkLCAxLCAwLCAwKSA9PSAwKTsKKwkJQXNzZXJ0KFBRc29ja2V0UG9sbCh3 ZmQsIDAsIDEsIDApID4gMCk7CisKKwkJLyoKKwkJICogRm9yIGJpZGlyZWN0aW9uYWwgc3lzdGVt cywgZW11bGF0ZSB1bmlkaXJlY3Rpb25hbCBiZWhhdmlvciBoZXJlIGJ5CisJCSAqIGZpbGxpbmcg dXAgdGhlICJyZWFkIHNpZGUiIG9mIHRoZSBwaXBlLgorCQkgKi8KKwkJaWYgKGJpZGlyZWN0aW9u YWwpCisJCQlBc3NlcnQoKGJpZGlfcGlwZV9zaXplID0gZmlsbF9waXBlKHJmZCkpID4gMCk7CisK KwkJLyogTGlzdGVuIG9uIHRoZSByZWFkIHNpZGUuIFRoZSBtdWx0aXBsZXhlciBzaG91bGRuJ3Qg YmUgcmVhZHkgeWV0LiAqLworCQlBc3NlcnQocmVnaXN0ZXJfc29ja2V0KE5VTEwsIHJmZCwgaW5f ZXZlbnQsIGFjdHgsIE5VTEwpID09IDApOworCQltdXhfaXNfbm90X3JlYWR5KGFjdHgtPm11eCwg IndoZW4gZmQgaXMgbm90IHJlYWRhYmxlIik7CisKKwkJLyogV3JpdGluZyB0byB0aGUgcGlwZSBz aG91bGQgcmVzdWx0IGluIGEgcmVhZC1yZWFkeSBtdWx0aXBsZXhlci4gKi8KKwkJQXNzZXJ0KHdy aXRlKHdmZCwgIngiLCAxKSA9PSAxKTsKKwkJbXV4X2lzX3JlYWR5KGFjdHgtPm11eCwgZGVhZGxp bmUsICJ3aGVuIGZkIGlzIHJlYWRhYmxlIik7CisKKwkJLyoKKwkJICogVXBkYXRlIHRoZSByZWdp c3RyYXRpb24gdG8gd2FpdCBvbiB3cml0ZSBldmVudHMgaW5zdGVhZC4gVGhlCisJCSAqIG11bHRp cGxleGVyIHNob3VsZCBiZSB1bnNldC4KKwkJICovCisJCUFzc2VydChyZWdpc3Rlcl9zb2NrZXQo TlVMTCwgcmZkLCBDVVJMX1BPTExfT1VULCBhY3R4LCBOVUxMKSA9PSAwKTsKKwkJbXV4X2lzX25v dF9yZWFkeShhY3R4LT5tdXgsICJ3aGVuIHdhaXRpbmcgZm9yIHdyaXRlcyBvbiByZWFkYWJsZSBm ZCIpOworCisJCS8qIFJlLXJlZ2lzdGVyIGZvciByZWFkIGV2ZW50cy4gKi8KKwkJQXNzZXJ0KHJl Z2lzdGVyX3NvY2tldChOVUxMLCByZmQsIGluX2V2ZW50LCBhY3R4LCBOVUxMKSA9PSAwKTsKKwkJ bXV4X2lzX3JlYWR5KGFjdHgtPm11eCwgZGVhZGxpbmUsICJ3aGVuIHdhaXRpbmcgZm9yIHJlYWRz IGFnYWluIik7CisKKwkJLyogU3RvcCBsaXN0ZW5pbmcuIFRoZSBtdWx0aXBsZXhlciBzaG91bGQg YmUgdW5zZXQuICovCisJCUFzc2VydChyZWdpc3Rlcl9zb2NrZXQoTlVMTCwgcmZkLCBDVVJMX1BP TExfUkVNT1ZFLCBhY3R4LCBOVUxMKSA9PSAwKTsKKwkJbXV4X2lzX25vdF9yZWFkeShhY3R4LT5t dXgsICJ3aGVuIHJlYWRhYmxlIGZkIGlzIHJlbW92ZWQiKTsKKworCQkvKiBMaXN0ZW4gYWdhaW4u ICovCisJCUFzc2VydChyZWdpc3Rlcl9zb2NrZXQoTlVMTCwgcmZkLCBpbl9ldmVudCwgYWN0eCwg TlVMTCkgPT0gMCk7CisJCW11eF9pc19yZWFkeShhY3R4LT5tdXgsIGRlYWRsaW5lLCAid2hlbiBy ZWFkYWJsZSBmZCBpcyByZS1hZGRlZCIpOworCisJCS8qCisJCSAqIERyYWluaW5nIHRoZSBwaXBl IHNob3VsZCB1bnNldCB0aGUgbXVsdGlwbGV4ZXIgYWdhaW4sIG9uY2UgdGhlIG9sZAorCQkgKiBl dmVudCBpcyBjbGVhcmVkLgorCQkgKi8KKwkJQXNzZXJ0KGRyYWluX3BpcGUocmZkLCAxKSk7CisJ CUFzc2VydChjb21iX211bHRpcGxleGVyKGFjdHgpKTsKKwkJbXV4X2lzX25vdF9yZWFkeShhY3R4 LT5tdXgsICJ3aGVuIGZkIGlzIGRyYWluZWQiKTsKKworCQkvKiBVbmRvIGFueSB1bmlkaXJlY3Rp b25hbCBlbXVsYXRpb24uICovCisJCWlmIChiaWRpcmVjdGlvbmFsKQorCQkJQXNzZXJ0KGRyYWlu X3BpcGUod2ZkLCBiaWRpX3BpcGVfc2l6ZSkpOworCisJCS8qIExpc3RlbiBvbiB0aGUgd3JpdGUg c2lkZS4gQW4gZW1wdHkgYnVmZmVyIHNob3VsZCBiZSB3cml0YWJsZS4gKi8KKwkJQXNzZXJ0KHJl Z2lzdGVyX3NvY2tldChOVUxMLCByZmQsIENVUkxfUE9MTF9SRU1PVkUsIGFjdHgsIE5VTEwpID09 IDApOworCQlBc3NlcnQocmVnaXN0ZXJfc29ja2V0KE5VTEwsIHdmZCwgb3V0X2V2ZW50LCBhY3R4 LCBOVUxMKSA9PSAwKTsKKwkJbXV4X2lzX3JlYWR5KGFjdHgtPm11eCwgZGVhZGxpbmUsICJ3aGVu IGZkIGlzIHdyaXRhYmxlIik7CisKKwkJLyogQXMgYWJvdmUsIHdhaXQgb24gcmVhZCBldmVudHMg aW5zdGVhZC4gKi8KKwkJQXNzZXJ0KHJlZ2lzdGVyX3NvY2tldChOVUxMLCB3ZmQsIENVUkxfUE9M TF9JTiwgYWN0eCwgTlVMTCkgPT0gMCk7CisJCW11eF9pc19ub3RfcmVhZHkoYWN0eC0+bXV4LCAi d2hlbiB3YWl0aW5nIGZvciByZWFkcyBvbiB3cml0YWJsZSBmZCIpOworCisJCS8qIFJlLXJlZ2lz dGVyIGZvciB3cml0ZSBldmVudHMuICovCisJCUFzc2VydChyZWdpc3Rlcl9zb2NrZXQoTlVMTCwg d2ZkLCBvdXRfZXZlbnQsIGFjdHgsIE5VTEwpID09IDApOworCQltdXhfaXNfcmVhZHkoYWN0eC0+ bXV4LCBkZWFkbGluZSwgIndoZW4gd2FpdGluZyBmb3Igd3JpdGVzIGFnYWluIik7CisKKwkJewor CQkJc3NpemVfdAkJd3JpdHRlbjsKKworCQkJLyoKKwkJCSAqIEZpbGwgdGhlIHBpcGUuIE9uY2Ug dGhlIG9sZCB3cml0YWJsZSBldmVudCBpcyBjbGVhcmVkLCB0aGUgbXV4CisJCQkgKiBzaG91bGQg bm90IGJlIHJlYWR5LgorCQkJICovCisJCQlBc3NlcnQoKHdyaXR0ZW4gPSBmaWxsX3BpcGUod2Zk KSkgPiAwKTsKKwkJCXByaW50ZigiIyBwaXBlIGJ1ZmZlciBpcyBmdWxsIGF0ICV6ZCBieXRlc1xu Iiwgd3JpdHRlbik7CisKKwkJCUFzc2VydChjb21iX211bHRpcGxleGVyKGFjdHgpKTsKKwkJCW11 eF9pc19ub3RfcmVhZHkoYWN0eC0+bXV4LCAid2hlbiBmZCBidWZmZXIgaXMgZnVsbCIpOworCisJ CQkvKiBEcmFpbiB0aGUgcGlwZSBhZ2Fpbi4gKi8KKwkJCUFzc2VydChkcmFpbl9waXBlKHJmZCwg d3JpdHRlbikpOworCQkJbXV4X2lzX3JlYWR5KGFjdHgtPm11eCwgZGVhZGxpbmUsICJ3aGVuIGZk IGJ1ZmZlciBpcyBkcmFpbmVkIik7CisJCX0KKworCQkvKiBTdG9wIGxpc3RlbmluZy4gKi8KKwkJ QXNzZXJ0KHJlZ2lzdGVyX3NvY2tldChOVUxMLCB3ZmQsIENVUkxfUE9MTF9SRU1PVkUsIGFjdHgs IE5VTEwpID09IDApOworCQltdXhfaXNfbm90X3JlYWR5KGFjdHgtPm11eCwgIndoZW4gZmQgaXMg cmVtb3ZlZCIpOworCisJCS8qIE1ha2Ugc3VyZSBhbiBleHBpcmVkIHRpbWVyIGRvZXNuJ3QgaW50 ZXJmZXJlIHdpdGggZXZlbnQgZHJhaW5pbmcuICovCisJCXsKKwkJCWJvb2wJCWV4cGlyZWQ7CisK KwkJCS8qIE1ha2UgdGhlIHJmZCBhcHBlYXIgdW5pZGlyZWN0aW9uYWwgaWYgbmVjZXNzYXJ5LiAq LworCQkJaWYgKGJpZGlyZWN0aW9uYWwpCisJCQkJQXNzZXJ0KChiaWRpX3BpcGVfc2l6ZSA9IGZp bGxfcGlwZShyZmQpKSA+IDApOworCisJCQkvKiBTZXQgdGhlIHRpbWVyIGFuZCB3YWl0IGZvciBp dCB0byBleHBpcmUuICovCisJCQlBc3NlcnQoc2V0X3RpbWVyKGFjdHgsIDApKTsKKwkJCUFzc2Vy dChQUXNvY2tldFBvbGwoYWN0eC0+dGltZXJmZCwgMSwgMCwgZGVhZGxpbmUpID4gMCk7CisJCQlp cyh0aW1lcl9leHBpcmVkKGFjdHgpLCAxLCAidGltZXIgaXMgZXhwaXJlZCIpOworCisJCQkvKiBS ZWdpc3RlciBmb3IgcmVhZCBldmVudHMgYW5kIG1ha2UgdGhlIGZkIHJlYWRhYmxlLiAqLworCQkJ QXNzZXJ0KHJlZ2lzdGVyX3NvY2tldChOVUxMLCByZmQsIGluX2V2ZW50LCBhY3R4LCBOVUxMKSA9 PSAwKTsKKwkJCUFzc2VydCh3cml0ZSh3ZmQsICJ4IiwgMSkgPT0gMSk7CisJCQltdXhfaXNfcmVh ZHkoYWN0eC0+bXV4LCBkZWFkbGluZSwgIndoZW4gZmQgaXMgcmVhZGFibGUgYW5kIHRpbWVyIGV4 cGlyZWQiKTsKKworCQkJLyoKKwkJCSAqIERyYWluaW5nIHRoZSBwaXBlIHNob3VsZCB1bnNldCB0 aGUgbXVsdGlwbGV4ZXIgYWdhaW4sIG9uY2UgdGhlCisJCQkgKiBvbGQgZXZlbnQgaXMgZHJhaW5l ZCBhbmQgdGhlIHRpbWVyIGlzIHJlc2V0LgorCQkJICoKKwkJCSAqIE9yZGVyIG1hdHRlcnMsIHNp bmNlIGNvbWJfbXVsdGlwbGV4ZXIoKSBkb2Vzbid0IGhhdmUgdG8gcmVtb3ZlCisJCQkgKiBzdGFs ZSBldmVudHMgd2hlbiBhY3RpdmUgZXZlbnRzIGV4aXN0LiBGb2xsb3cgdGhlIGNhbGwgc2VxdWVu Y2UKKwkJCSAqIHVzZWQgaW4gdGhlIGNvZGU6IGRyYWluIHRoZSB0aW1lciBleHBpcmF0aW9uLCBk cmFpbiB0aGUgcGlwZSwKKwkJCSAqIHRoZW4gY2xlYXIgdGhlIHN0YWxlIGV2ZW50cy4KKwkJCSAq LworCQkJQXNzZXJ0KGRyYWluX3RpbWVyX2V2ZW50cyhhY3R4LCAmZXhwaXJlZCkpOworCQkJQXNz ZXJ0KGRyYWluX3BpcGUocmZkLCAxKSk7CisJCQlBc3NlcnQoY29tYl9tdWx0aXBsZXhlcihhY3R4 KSk7CisKKwkJCWlzKGV4cGlyZWQsIDEsICJkcmFpbl90aW1lcl9ldmVudHMoKSByZXBvcnRzIGV4 cGlyYXRpb24iKTsKKwkJCWlzKHRpbWVyX2V4cGlyZWQoYWN0eCksIDAsICJ0aW1lciBpcyBubyBs b25nZXIgZXhwaXJlZCIpOworCQkJbXV4X2lzX25vdF9yZWFkeShhY3R4LT5tdXgsICJ3aGVuIGZk IGlzIGRyYWluZWQgYW5kIHRpbWVyIHJlc2V0Iik7CisKKwkJCS8qIFN0b3AgbGlzdGVuaW5nLiAq LworCQkJQXNzZXJ0KHJlZ2lzdGVyX3NvY2tldChOVUxMLCByZmQsIENVUkxfUE9MTF9SRU1PVkUs IGFjdHgsIE5VTEwpID09IDApOworCisJCQkvKiBVbmRvIGFueSB1bmlkaXJlY3Rpb25hbCBlbXVs YXRpb24uICovCisJCQlpZiAoYmlkaXJlY3Rpb25hbCkKKwkJCQlBc3NlcnQoZHJhaW5fcGlwZSh3 ZmQsIGJpZGlfcGlwZV9zaXplKSk7CisJCX0KKworCQkvKiBFbnN1cmUgY29tYl9tdWx0aXBsZXhl cigpIGNhbiBoYW5kbGUgbXVsdGlwbGUgc3RhbGUgZXZlbnRzLiAqLworCQl7CisJCQlpbnQJCQly ZmQyLAorCQkJCQkJd2ZkMjsKKworCQkJLyogQ3JlYXRlIGEgc2Vjb25kIGxvY2FsIHBpcGUuICov CisJCQlBc3NlcnQocGlwZShwaXBlZmQpID09IDApOworCQkJcmZkMiA9IHBpcGVmZFswXTsKKwkJ CXdmZDIgPSBwaXBlZmRbMV07CisKKwkJCS8qIE1ha2UgYm90aCByZmRzIGFwcGVhciB1bmlkaXJl Y3Rpb25hbCBpZiBuZWNlc3NhcnkuICovCisJCQlpZiAoYmlkaXJlY3Rpb25hbCkKKwkJCXsKKwkJ CQlBc3NlcnQoKGJpZGlfcGlwZV9zaXplID0gZmlsbF9waXBlKHJmZCkpID4gMCk7CisJCQkJQXNz ZXJ0KGZpbGxfcGlwZShyZmQyKSA9PSBiaWRpX3BpcGVfc2l6ZSk7CisJCQl9CisKKwkJCS8qIFJl Z2lzdGVyIGZvciByZWFkIGV2ZW50cyBvbiBib3RoIGZkcywgYW5kIG1ha2UgdGhlbSByZWFkYWJs ZS4gKi8KKwkJCUFzc2VydChyZWdpc3Rlcl9zb2NrZXQoTlVMTCwgcmZkLCBpbl9ldmVudCwgYWN0 eCwgTlVMTCkgPT0gMCk7CisJCQlBc3NlcnQocmVnaXN0ZXJfc29ja2V0KE5VTEwsIHJmZDIsIGlu X2V2ZW50LCBhY3R4LCBOVUxMKSA9PSAwKTsKKworCQkJQXNzZXJ0KHdyaXRlKHdmZCwgIngiLCAx KSA9PSAxKTsKKwkJCUFzc2VydCh3cml0ZSh3ZmQyLCAieCIsIDEpID09IDEpOworCisJCQltdXhf aXNfcmVhZHkoYWN0eC0+bXV4LCBkZWFkbGluZSwgIndoZW4gdHdvIGZkcyBhcmUgcmVhZGFibGUi KTsKKworCQkJLyoKKwkJCSAqIERyYWluIGJvdGggZmRzLiBjb21iX211bHRpcGxleGVyKCkgc2hv dWxkIHRoZW4gZW5zdXJlIHRoYXQgdGhlCisJCQkgKiBtdXggaXMgbm8gbG9uZ2VyIHJlYWRhYmxl LgorCQkJICovCisJCQlBc3NlcnQoZHJhaW5fcGlwZShyZmQsIDEpKTsKKwkJCUFzc2VydChkcmFp bl9waXBlKHJmZDIsIDEpKTsKKwkJCUFzc2VydChjb21iX211bHRpcGxleGVyKGFjdHgpKTsKKwkJ CW11eF9pc19ub3RfcmVhZHkoYWN0eC0+bXV4LCAid2hlbiB0d28gZmRzIGFyZSBkcmFpbmVkIik7 CisKKwkJCS8qIFN0b3AgbGlzdGVuaW5nLiAqLworCQkJQXNzZXJ0KHJlZ2lzdGVyX3NvY2tldChO VUxMLCByZmQsIENVUkxfUE9MTF9SRU1PVkUsIGFjdHgsIE5VTEwpID09IDApOworCQkJQXNzZXJ0 KHJlZ2lzdGVyX3NvY2tldChOVUxMLCByZmQyLCBDVVJMX1BPTExfUkVNT1ZFLCBhY3R4LCBOVUxM KSA9PSAwKTsKKworCQkJLyogVW5kbyBhbnkgdW5pZGlyZWN0aW9uYWwgZW11bGF0aW9uLiAqLwor CQkJaWYgKGJpZGlyZWN0aW9uYWwpCisJCQl7CisJCQkJQXNzZXJ0KGRyYWluX3BpcGUod2ZkLCBi aWRpX3BpcGVfc2l6ZSkpOworCQkJCUFzc2VydChkcmFpbl9waXBlKHdmZDIsIGJpZGlfcGlwZV9z aXplKSk7CisJCQl9CisKKwkJCWNsb3NlKHJmZDIpOworCQkJY2xvc2Uod2ZkMik7CisJCX0KKwl9 CisKKwljbG9zZShyZmQpOworCWNsb3NlKHdmZCk7CisJZnJlZV90ZXN0X2FjdHgoYWN0eCk7Cit9 CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWNvbnN0IGNoYXIgKnRp bWVvdXQ7CisKKwkvKiBHcmFiIHRoZSBkZWZhdWx0IHRpbWVvdXQuICovCisJdGltZW91dCA9IGdl dGVudigiUEdfVEVTVF9USU1FT1VUX0RFRkFVTFQiKTsKKwlpZiAodGltZW91dCkKKwl7CisJCWlu dAkJCXRpbWVvdXRfcyA9IGF0b2kodGltZW91dCk7CisKKwkJaWYgKHRpbWVvdXRfcyA+IDApCisJ CQl0aW1lb3V0X3VzID0gdGltZW91dF9zICogMTAwMCAqIDEwMDA7CisJfQorCisJLyoKKwkgKiBT ZXQgdXAgbGluZSBidWZmZXJpbmcgZm9yIG91ciBvdXRwdXQsIHRvIGxldCBzdGRlcnIgaW50ZXJs ZWF2ZSBpbiB0aGUKKwkgKiBsb2cgZmlsZXMuCisJICovCisJc2V0dmJ1ZihzdGRvdXQsIE5VTEws IFBHX0lPTEJGLCAwKTsKKworCXRlc3Rfc2V0X3RpbWVyKCk7CisJdGVzdF9yZWdpc3Rlcl9zb2Nr ZXQoKTsKKworCXByaW50ZigiMS4uJWRcbiIsIG51bV90ZXN0cyk7CisJcmV0dXJuIDA7Cit9CisK KyNlbHNlCQkJCQkJCS8qICFVU0VfQVNTRVJUX0NIRUNLSU5HICovCisKKy8qCisgKiBTa2lwIHRo ZSB0ZXN0IHN1aXRlIHdoZW4gd2UgZG9uJ3QgaGF2ZSBhc3NlcnRpb25zLgorICovCitpbnQKK21h aW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlwcmludGYoIjEuLjAgIyBza2lwOiBjYXNz ZXJ0IGlzIG5vdCBlbmFibGVkXG4iKTsKKworCXJldHVybiAwOworfQorCisjZW5kaWYJCQkJCQkJ LyogVVNFX0FTU0VSVF9DSEVDS0lORyAqLwotLSAKMi4zNC4xCgo= --000000000000e06f93063bbb14b3--