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 1sq8Xy-007CCC-5I for pgsql-hackers@arkaria.postgresql.org; Mon, 16 Sep 2024 10:01:31 +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 1sq8Xx-00F2Hp-DO for pgsql-hackers@arkaria.postgresql.org; Mon, 16 Sep 2024 10:01:29 +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 1sq8Xw-00F2Hf-Uq for pgsql-hackers@lists.postgresql.org; Mon, 16 Sep 2024 10:01:29 +0000 Received: from mail-lj1-x231.google.com ([2a00:1450:4864:20::231]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1sq8Xs-001Sq8-PK for pgsql-hackers@lists.postgresql.org; Mon, 16 Sep 2024 10:01:28 +0000 Received: by mail-lj1-x231.google.com with SMTP id 38308e7fff4ca-2f75f116d11so30884351fa.1 for ; Mon, 16 Sep 2024 03:01:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1726480885; x=1727085685; 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=wiVEHs03hXHTg2srll9QNW03y4hJ7KEzDhYmKWxmUZQ=; b=Wogwr/6khEkHIAwSq2+MjL+iinCwY9xcF6h87CV2d8GeWWiNon491JKEbnt7/JElCd siKGN1elTdfcxU6HCMWYlZTM5gTP+LHhQcUYLgDzXtsB2Z/AuFLrCpxD7yWFvLz7BMnu f8NkmqhQjUg5TYW3PdnPCCSPSH7/PIwRAeS5y/Gwc7jAoOLrFxNgEZ9wbQPQzy6ghpFy WQEHrXTaGequvYWIlErXN1ooEGbllJ/pMg4WvS6ThH+G3ZR6Q28V1bmYtvUoz1j+zwZb oms01F5FAd6QJulGE3M0L3FaK4VHGqxl3ZcMqls8oW3fkT1p/NdjAkoSaCO+V6XNVELr 9hxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1726480885; x=1727085685; 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=wiVEHs03hXHTg2srll9QNW03y4hJ7KEzDhYmKWxmUZQ=; b=GEsiYN/CdhKytL/TkdQGzMvWX4ck5cU+4P+zg3oIweEUD8hNreSXfQb11BecgIguxR Mx8U7sjRPD8wLC+5Q0qv0dH4wMezl4z8nuBXadEVEmPsw5/AY4nQjFDPgSSYBcrc8Yoy 6Vjk/Wd6zGLp39rrKTR3XKaY7vcIDYHXGgzG1UThgAfBv9+YDbtaRJ6y632u+yFbQDTc lKWLnHzw+vImuK2QlclocP9A4Q9AshBvbUgdhn++CpL2XWxJ0o7b+QJIPknOoZKID5el CkcLTucrp5QfrXP2b307YGGjvkI6ZeDHFTeMDU1EZWTc2mF4hIE1LgryJQyuuZIOwkO2 hDWA== X-Forwarded-Encrypted: i=1; AJvYcCWDvCrgZqmF55TAQ+uXoduYMipcCt4tzpjTuswbh0kh54pnVOq6f68YB3zHFaFaCjy/lxRfj517GtTZhOJF@lists.postgresql.org X-Gm-Message-State: AOJu0YzB8q6dfOqEblbwZG+MDj9gIKHTxL6mC8FWgcTPT4s/9HllBf8p azneSHZihsblixFHVMaFnCm7fDhHRcmn4xipbnME039raPg+fXpWdjOxoo0mzGMgLY3q4qAdMUz OT+ZmF08x7smdX9lEUbVGlqjuFKWZxA== X-Google-Smtp-Source: AGHT+IElfZyu9JtDmvFv4Lx4ZkDzrgO8tlFWTknmfC7HIvfwLeIQlryHTLmtjQ3rVphBIfVew2OtA9eO6se1oa+kspg= X-Received: by 2002:a2e:510a:0:b0:2f7:7216:d7ca with SMTP id 38308e7fff4ca-2f7919fca44mr41216561fa.13.1726480884492; Mon, 16 Sep 2024 03:01:24 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Bharath Rupireddy Date: Mon, 16 Sep 2024 15:31:11 +0530 Message-ID: Subject: Re: Introduce XID age and inactive timeout based replication slot invalidation To: Peter Smith Cc: Amit Kapila , Ajin Cherian , Bertrand Drouvot , shveta malik , Masahiko Sawada , Nathan Bossart , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000d5160a062239a73e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000d5160a062239a73e Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, Thanks for reviewing. On Mon, Sep 9, 2024 at 1:11=E2=80=AFPM Peter Smith = wrote: > > 1. > + Note that the inactive timeout invalidation mechanism is not > + applicable for slots on the standby server that are being synced > + from primary server (i.e., standby slots having > > nit - /from primary server/from the primary server/ +1 > 2. ReplicationSlotAcquire > > + errmsg("can no longer get changes from replication slot \"%s\"", > + NameStr(s->data.name)), > + errdetail("This slot has been invalidated because it was inactive > for longer than the amount of time specified by \"%s\".", > + "replication_slot_inactive_timeout."))); > > nit - "replication_slot_inactive_timeout." - should be no period > inside that GUC name literal Typo. Fixed. > 3. ReportSlotInvalidation > > I didn't understand why there was a hint for: > "You might need to increase \"%s\".", "max_slot_wal_keep_size" > > Why aren't these similar cases consistent? It looks misleading and not very useful. What happens if the removed WAL (that's needed for the slot) is put back into pg_wal somehow (by manually copying from archive or by some tool/script)? Can the slot invalidated due to wal_removed start sending WAL to its clients? > But you don't have an equivalent hint for timeout invalidation: > "You might need to increase \"%s\".", "replication_slot_inactive_timeout" I removed this per review comments upthread. > 4. RestoreSlotFromDisk > > + /* Use the same inactive_since time for all the slots. */ > + if (now =3D=3D 0) > + now =3D GetCurrentTimestamp(); > + > > Is the deferred assignment really necessary? Why not just > unconditionally assign the 'now' just before the for-loop? Or even at > the declaration? e.g. The 'replication_slot_inactive_timeout' is > measured in seconds so I don't think 'inactive_since' being wrong by a > millisecond here will make any difference. Moved it before the for-loop. > 5. ReplicationSlotSetInactiveSince > > +/* > + * Set slot's inactive_since property unless it was previously invalidat= ed due > + * to inactive timeout. > + */ > +static inline void > +ReplicationSlotSetInactiveSince(ReplicationSlot *s, TimestampTz *now, > + bool acquire_lock) > +{ > + if (acquire_lock) > + SpinLockAcquire(&s->mutex); > + > + if (s->data.invalidated !=3D RS_INVAL_INACTIVE_TIMEOUT) > + s->inactive_since =3D *now; > + > + if (acquire_lock) > + SpinLockRelease(&s->mutex); > +} > > Is the logic correct? What if the slot was already invalid due to some > reason other than RS_INVAL_INACTIVE_TIMEOUT? Is an Assert needed? Hm. Since invalidated slots can't be acquired and made active, not modifying inactive_since irrespective of invalidation reason looks good to me. Please find the attached v46 patch having changes for the above review comments and your test review comments and Shveta's review comments. -- Bharath Rupireddy PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com --000000000000d5160a062239a73e Content-Type: application/octet-stream; name="v46-0001-Introduce-inactive_timeout-based-replication-slo.patch" Content-Disposition: attachment; filename="v46-0001-Introduce-inactive_timeout-based-replication-slo.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m14tqflg0 RnJvbSAzNjBhNDFiZTZiYTNiOGU2YmExN2IyNmQ3YmU3YjdhNjNjNTZiNDg1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IE1vbiwgMTYgU2VwIDIwMjQgMDk6MzQ6MzMgKzAw MDAKU3ViamVjdDogW1BBVENIIHY0Nl0gSW50cm9kdWNlIGluYWN0aXZlX3RpbWVvdXQgYmFzZWQg cmVwbGljYXRpb24gc2xvdAogaW52YWxpZGF0aW9uCgpUaWxsIG5vdywgcG9zdGdyZXMgaGFzIHRo ZSBhYmlsaXR5IHRvIGludmFsaWRhdGUgaW5hY3RpdmUKcmVwbGljYXRpb24gc2xvdHMgYmFzZWQg b24gdGhlIGFtb3VudCBvZiBXQUwgKHNldCB2aWEKbWF4X3Nsb3Rfd2FsX2tlZXBfc2l6ZSBHVUMp IHRoYXQgd2lsbCBiZSBuZWVkZWQgZm9yIHRoZSBzbG90cyBpbgpjYXNlIHRoZXkgYmVjb21lIGFj dGl2ZS4gSG93ZXZlciwgY2hvb3NpbmcgYSBkZWZhdWx0IHZhbHVlIGZvcgp0aGlzIEdVQyBpcyBh IGJpdCB0cmlja3kuIEJlY2F1c2UgdGhlIGFtb3VudCBvZiBXQUwgYSBkYXRhYmFzZQpnZW5lcmF0 ZXMsIGFuZCB0aGUgYWxsb2NhdGVkIHN0b3JhZ2UgZm9yIGluc3RhbmNlIHdpbGwgdmFyeQpncmVh dGx5IGluIHByb2R1Y3Rpb24sIG1ha2luZyBpdCBkaWZmaWN1bHQgdG8gcGluIGRvd24gYQpvbmUt c2l6ZS1maXRzLWFsbCB2YWx1ZS4KCkl0IGlzIG9mdGVuIGVhc3kgZm9yIHVzZXJzIHRvIHNldCBh IHRpbWVvdXQgb2Ygc2F5IDEgb3IgMiBvciBuCmRheXMsIGFmdGVyIHdoaWNoIGFsbCB0aGUgaW5h Y3RpdmUgc2xvdHMgZ2V0IGludmFsaWRhdGVkLiBUaGlzCmNvbW1pdCBpbnRyb2R1Y2VzIGEgR1VD IG5hbWVkIHJlcGxpY2F0aW9uX3Nsb3RfaW5hY3RpdmVfdGltZW91dC4KV2hlbiBzZXQsIHBvc3Rn cmVzIGludmFsaWRhdGVzIHNsb3RzIChkdXJpbmcgbm9uLXNodXRkb3duCmNoZWNrcG9pbnRzKSB0 aGF0IGFyZSBpbmFjdGl2ZSBmb3IgbG9uZ2VyIHRoYW4gdGhpcyBhbW91bnQgb2YKdGltZS4KCk5v dGUgdGhhdCB0aGUgaW5hY3RpdmUgdGltZW91dCBpbnZhbGlkYXRpb24gbWVjaGFuaXNtIGlzIG5v dAphcHBsaWNhYmxlIGZvciBzbG90cyBvbiB0aGUgc3RhbmRieSBzZXJ2ZXIgdGhhdCBhcmUgYmVp bmcgc3luY2VkCmZyb20gdGhlIHByaW1hcnkgc2VydmVyIChpLmUuLCBzdGFuZGJ5IHNsb3RzIGhh dmluZyAnc3luY2VkJyBmaWVsZAondHJ1ZScpLiBTeW5jZWQgc2xvdHMgYXJlIGFsd2F5cyBjb25z aWRlcmVkIHRvIGJlIGluYWN0aXZlIGJlY2F1c2UKdGhleSBkb24ndCBwZXJmb3JtIGxvZ2ljYWwg ZGVjb2RpbmcgdG8gcHJvZHVjZSBjaGFuZ2VzLgoKQXV0aG9yOiBCaGFyYXRoIFJ1cGlyZWRkeQpS ZXZpZXdlZC1ieTogQmVydHJhbmQgRHJvdXZvdCwgQW1pdCBLYXBpbGEKUmV2aWV3ZWQtYnk6IEFq aW4gQ2hlcmlhbiwgU2h2ZXRhIE1hbGlrLCBQZXRlciBTbWl0aApEaXNjdXNzaW9uOiBodHRwczov L3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL0NBTGoyQUNXNGFVZS1fdUZRT2pkV0NFTi14 WG9MR2htdlJGbkw4U053X1RaNW5KZSthd0BtYWlsLmdtYWlsLmNvbQpEaXNjdXNzaW9uOiBodHRw czovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL0NBJTJCVGdtb1pUYmFhRWpTWlVHMUZM MG16eEFkTjNxbVhrc08zTzlfUFpoRXVYVGtWblJRJTQwbWFpbC5nbWFpbC5jb20KRGlzY3Vzc2lv bjogaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC8yMDI0MDMyNjA4NDEuNWpj djdpaG5pY2N5JTQwYWx2aGVycmUucGdzcWwKLS0tCiBkb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwg ICAgICAgICAgICAgICAgICAgICAgfCAgMzUgKysrCiBkb2Mvc3JjL3NnbWwvc3lzdGVtLXZpZXdz LnNnbWwgICAgICAgICAgICAgICAgfCAgIDcgKwogLi4uL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9n aWNhbGZ1bmNzLmMgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3Nsb3RzeW5jLmMgICAgfCAgMTcgKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3Qu YyAgICAgICAgICAgICAgICB8IDE2NiArKysrKysrKystLQogc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vc2xvdGZ1bmNzLmMgICAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlv bi93YWxzZW5kZXIuYyAgICAgICAgICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9w Z191cGdyYWRlX3N1cHBvcnQuYyAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9n dWNfdGFibGVzLmMgICAgICAgICAgIHwgIDEyICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9z dGdyZXNxbC5jb25mLnNhbXBsZSB8ICAgMSArCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9zbG90 LmggICAgICAgICAgICAgICAgfCAgMjUgKy0KIHNyYy90ZXN0L3JlY292ZXJ5L21lc29uLmJ1aWxk ICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9yZWNvdmVyeS90LzA1MF9pbnZhbGlk YXRlX3Nsb3RzLnBsICAgfCAyNjYgKysrKysrKysrKysrKysrKysrCiAxMyBmaWxlcyBjaGFuZ2Vk LCA1MDUgaW5zZXJ0aW9ucygrKSwgMzUgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL3Rlc3QvcmVjb3ZlcnkvdC8wNTBfaW52YWxpZGF0ZV9zbG90cy5wbAoKZGlmZiAtLWdpdCBh L2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbCBiL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAppbmRl eCAwYWVjMTFmNDQzLi5iY2U3ZWNkYzg2IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvY29uZmln LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCkBAIC00NTU2LDYgKzQ1NTYsNDEg QEAgcmVzdG9yZV9jb21tYW5kID0gJ2NvcHkgIkM6XFxzZXJ2ZXJcXGFyY2hpdmVkaXJcXCVmIiAi JXAiJyAgIyBXaW5kb3dzCiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4K IAorICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtcmVwbGljYXRpb24tc2xvdC1pbmFjdGl2ZS10 aW1lb3V0IiB4cmVmbGFiZWw9InJlcGxpY2F0aW9uX3Nsb3RfaW5hY3RpdmVfdGltZW91dCI+Cisg ICAgICA8dGVybT48dmFybmFtZT5yZXBsaWNhdGlvbl9zbG90X2luYWN0aXZlX3RpbWVvdXQ8L3Zh cm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90eXBlPikKKyAgICAgIDxpbmRleHRlcm0+CisgICAgICAg PHByaW1hcnk+PHZhcm5hbWU+cmVwbGljYXRpb25fc2xvdF9pbmFjdGl2ZV90aW1lb3V0PC92YXJu YW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgIDwvaW5kZXh0ZXJt PgorICAgICAgPC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAg ICBJbnZhbGlkYXRlIHJlcGxpY2F0aW9uIHNsb3RzIHRoYXQgYXJlIGluYWN0aXZlIGZvciBsb25n ZXIgdGhhbiB0aGlzCisgICAgICAgIGFtb3VudCBvZiB0aW1lLiBJZiB0aGlzIHZhbHVlIGlzIHNw ZWNpZmllZCB3aXRob3V0IHVuaXRzLAorICAgICAgICBpdCBpcyB0YWtlbiBhcyBzZWNvbmRzLiBB IHZhbHVlIG9mIHplcm8gKHdoaWNoIGlzIGRlZmF1bHQpIGRpc2FibGVzCisgICAgICAgIHRoZSBp bmFjdGl2ZSB0aW1lb3V0IGludmFsaWRhdGlvbiBtZWNoYW5pc20uIFRoaXMgcGFyYW1ldGVyIGNh biBvbmx5CisgICAgICAgIGJlIHNldCBpbiB0aGUgPGZpbGVuYW1lPnBvc3RncmVzcWwuY29uZjwv ZmlsZW5hbWU+IGZpbGUgb3Igb24gdGhlCisgICAgICAgIHNlcnZlciBjb21tYW5kIGxpbmUuCisg ICAgICAgPC9wYXJhPgorCisgICAgICAgPHBhcmE+CisgICAgICAgIFNsb3QgaW52YWxpZGF0aW9u IGR1ZSB0byBpbmFjdGl2ZSB0aW1lb3V0IG9jY3VycyBkdXJpbmcgY2hlY2twb2ludC4KKyAgICAg ICAgVGhlIGR1cmF0aW9uIG9mIHNsb3QgaW5hY3Rpdml0eSBpcyBjYWxjdWxhdGVkIHVzaW5nIHRo ZSBzbG90J3MKKyAgICAgICAgPGxpbmsgbGlua2VuZD0idmlldy1wZy1yZXBsaWNhdGlvbi1zbG90 cyI+cGdfcmVwbGljYXRpb25fc2xvdHM8L2xpbms+LjxzdHJ1Y3RmaWVsZD5pbmFjdGl2ZV9zaW5j ZTwvc3RydWN0ZmllbGQ+CisgICAgICAgIHZhbHVlLgorICAgICAgIDwvcGFyYT4KKworICAgICAg IDxwYXJhPgorICAgICAgICBOb3RlIHRoYXQgdGhlIGluYWN0aXZlIHRpbWVvdXQgaW52YWxpZGF0 aW9uIG1lY2hhbmlzbSBpcyBub3QKKyAgICAgICAgYXBwbGljYWJsZSBmb3Igc2xvdHMgb24gdGhl IHN0YW5kYnkgc2VydmVyIHRoYXQgYXJlIGJlaW5nIHN5bmNlZAorICAgICAgICBmcm9tIHRoZSBw cmltYXJ5IHNlcnZlciAoaS5lLiwgc3RhbmRieSBzbG90cyBoYXZpbmcKKyAgICAgICAgPGxpbmsg bGlua2VuZD0idmlldy1wZy1yZXBsaWNhdGlvbi1zbG90cyI+cGdfcmVwbGljYXRpb25fc2xvdHM8 L2xpbms+LjxzdHJ1Y3RmaWVsZD5zeW5jZWQ8L3N0cnVjdGZpZWxkPgorICAgICAgICB2YWx1ZSA8 bGl0ZXJhbD50cnVlPC9saXRlcmFsPikuCisgICAgICAgIFN5bmNlZCBzbG90cyBhcmUgYWx3YXlz IGNvbnNpZGVyZWQgdG8gYmUgaW5hY3RpdmUgYmVjYXVzZSB0aGV5IGRvbid0CisgICAgICAgIHBl cmZvcm0gbG9naWNhbCBkZWNvZGluZyB0byBwcm9kdWNlIGNoYW5nZXMuCisgICAgICAgPC9wYXJh PgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxp c3RlbnRyeSBpZD0iZ3VjLXRyYWNrLWNvbW1pdC10aW1lc3RhbXAiIHhyZWZsYWJlbD0idHJhY2tf Y29tbWl0X3RpbWVzdGFtcCI+CiAgICAgICA8dGVybT48dmFybmFtZT50cmFja19jb21taXRfdGlt ZXN0YW1wPC92YXJuYW1lPiAoPHR5cGU+Ym9vbGVhbjwvdHlwZT4pCiAgICAgICA8aW5kZXh0ZXJt PgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3N5c3RlbS12aWV3cy5zZ21sIGIvZG9jL3NyYy9z Z21sL3N5c3RlbS12aWV3cy5zZ21sCmluZGV4IDYzNGE0YzBmYWIuLjU2MzM0MjllZWYgMTAwNjQ0 Ci0tLSBhL2RvYy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwv c3lzdGVtLXZpZXdzLnNnbWwKQEAgLTI2MTgsNiArMjYxOCwxMyBAQCBTRUxFQ1QgKiBGUk9NIHBn X2xvY2tzIHBsIExFRlQgSk9JTiBwZ19wcmVwYXJlZF94YWN0cyBwcHgKICAgICAgICAgICBwZXJm b3JtIGxvZ2ljYWwgZGVjb2RpbmcuICBJdCBpcyBzZXQgb25seSBmb3IgbG9naWNhbCBzbG90cy4K ICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVt PgorICAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGxpdGVyYWw+aW5hY3RpdmVfdGltZW91dDwv bGl0ZXJhbD4gbWVhbnMgdGhhdCB0aGUgc2xvdCBoYXMgYmVlbgorICAgICAgICAgIGluYWN0aXZl IGZvciBsb25nZXIgdGhhbiB0aGUgYW1vdW50IG9mIHRpbWUgc3BlY2lmaWVkIGJ5IHRoZQorICAg ICAgICAgIDx4cmVmIGxpbmtlbmQ9Imd1Yy1yZXBsaWNhdGlvbi1zbG90LWluYWN0aXZlLXRpbWVv dXQiLz4gcGFyYW1ldGVyLgorICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgog ICAgICAgIDwvaXRlbWl6ZWRsaXN0PgogICAgICAgPC9wYXJhPjwvZW50cnk+CiAgICAgIDwvcm93 PgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsZnVu Y3MuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbGZ1bmNzLmMKaW5k ZXggYjRkZDVjY2U3NS4uNTZmYzFhNDVhOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9sb2dpY2FsZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL2xvZ2ljYWxmdW5jcy5jCkBAIC0xOTcsNyArMTk3LDcgQEAgcGdfbG9naWNhbF9z bG90X2dldF9jaGFuZ2VzX2d1dHMoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIGJvb2wgY29uZmly bSwgYm9vbCBiaW4KIAllbHNlCiAJCWVuZF9vZl93YWwgPSBHZXRYTG9nUmVwbGF5UmVjUHRyKE5V TEwpOwogCi0JUmVwbGljYXRpb25TbG90QWNxdWlyZShOYW1lU3RyKCpuYW1lKSwgdHJ1ZSk7CisJ UmVwbGljYXRpb25TbG90QWNxdWlyZShOYW1lU3RyKCpuYW1lKSwgdHJ1ZSwgdHJ1ZSk7CiAKIAlQ R19UUlkoKTsKIAl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L3Nsb3RzeW5jLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Nsb3RzeW5jLmMK aW5kZXggZjk2NDllZWMxYS4uZDVlYTc1MDY1YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9zbG90c3luYy5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvc2xvdHN5bmMuYwpAQCAtNDQ4LDcgKzQ0OCw3IEBAIGRyb3BfbG9jYWxfb2Jzb2xl dGVfc2xvdHMoTGlzdCAqcmVtb3RlX3Nsb3RfbGlzdCkKIAogCQkJaWYgKHN5bmNlZF9zbG90KQog CQkJewotCQkJCVJlcGxpY2F0aW9uU2xvdEFjcXVpcmUoTmFtZVN0cihsb2NhbF9zbG90LT5kYXRh Lm5hbWUpLCB0cnVlKTsKKwkJCQlSZXBsaWNhdGlvblNsb3RBY3F1aXJlKE5hbWVTdHIobG9jYWxf c2xvdC0+ZGF0YS5uYW1lKSwgdHJ1ZSwgZmFsc2UpOwogCQkJCVJlcGxpY2F0aW9uU2xvdERyb3BB Y3F1aXJlZCgpOwogCQkJfQogCkBAIC02NjcsNyArNjY3LDcgQEAgc3luY2hyb25pemVfb25lX3Ns b3QoUmVtb3RlU2xvdCAqcmVtb3RlX3Nsb3QsIE9pZCByZW1vdGVfZGJpZCkKIAkJICogcHJlLWNo ZWNrIHRvIGVuc3VyZSB0aGF0IGF0IGxlYXN0IG9uZSBvZiB0aGUgc2xvdCBwcm9wZXJ0aWVzIGlz CiAJCSAqIGNoYW5nZWQgYmVmb3JlIGFjcXVpcmluZyB0aGUgc2xvdC4KIAkJICovCi0JCVJlcGxp Y2F0aW9uU2xvdEFjcXVpcmUocmVtb3RlX3Nsb3QtPm5hbWUsIHRydWUpOworCQlSZXBsaWNhdGlv blNsb3RBY3F1aXJlKHJlbW90ZV9zbG90LT5uYW1lLCB0cnVlLCBmYWxzZSk7CiAKIAkJQXNzZXJ0 KHNsb3QgPT0gTXlSZXBsaWNhdGlvblNsb3QpOwogCkBAIC0xNTEwLDcgKzE1MTAsNyBAQCBSZXBs U2xvdFN5bmNXb3JrZXJNYWluKGNoYXIgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0 YV9sZW4pCiBzdGF0aWMgdm9pZAogdXBkYXRlX3N5bmNlZF9zbG90c19pbmFjdGl2ZV9zaW5jZSh2 b2lkKQogewotCVRpbWVzdGFtcFR6IG5vdyA9IDA7CisJVGltZXN0YW1wVHogbm93OwogCiAJLyoK IAkgKiBXZSBuZWVkIHRvIHVwZGF0ZSBpbmFjdGl2ZV9zaW5jZSBvbmx5IHdoZW4gd2UgYXJlIHBy b21vdGluZyBzdGFuZGJ5IHRvCkBAIC0xNTI1LDYgKzE1MjUsOSBAQCB1cGRhdGVfc3luY2VkX3Ns b3RzX2luYWN0aXZlX3NpbmNlKHZvaWQpCiAJLyogVGhlIHNsb3Qgc3luYyB3b3JrZXIgb3IgU1FM IGZ1bmN0aW9uIG11c3RuJ3QgYmUgcnVubmluZyBieSBub3cgKi8KIAlBc3NlcnQoKFNsb3RTeW5j Q3R4LT5waWQgPT0gSW52YWxpZFBpZCkgJiYgIVNsb3RTeW5jQ3R4LT5zeW5jaW5nKTsKIAorCS8q IFVzZSBzYW1lIGluYWN0aXZlX3NpbmNlIHRpbWUgZm9yIGFsbCBzbG90cyAqLworCW5vdyA9IEdl dEN1cnJlbnRUaW1lc3RhbXAoKTsKKwogCUxXTG9ja0FjcXVpcmUoUmVwbGljYXRpb25TbG90Q29u dHJvbExvY2ssIExXX1NIQVJFRCk7CiAKIAlmb3IgKGludCBpID0gMDsgaSA8IG1heF9yZXBsaWNh dGlvbl9zbG90czsgaSsrKQpAQCAtMTUzOSwxMyArMTU0Miw3IEBAIHVwZGF0ZV9zeW5jZWRfc2xv dHNfaW5hY3RpdmVfc2luY2Uodm9pZCkKIAkJCS8qIFRoZSBzbG90IG11c3Qgbm90IGJlIGFjcXVp cmVkIGJ5IGFueSBwcm9jZXNzICovCiAJCQlBc3NlcnQocy0+YWN0aXZlX3BpZCA9PSAwKTsKIAot CQkJLyogVXNlIHRoZSBzYW1lIGluYWN0aXZlX3NpbmNlIHRpbWUgZm9yIGFsbCB0aGUgc2xvdHMu ICovCi0JCQlpZiAobm93ID09IDApCi0JCQkJbm93ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOwot Ci0JCQlTcGluTG9ja0FjcXVpcmUoJnMtPm11dGV4KTsKLQkJCXMtPmluYWN0aXZlX3NpbmNlID0g bm93OwotCQkJU3BpbkxvY2tSZWxlYXNlKCZzLT5tdXRleCk7CisJCQlSZXBsaWNhdGlvblNsb3RT ZXRJbmFjdGl2ZVNpbmNlKHMsICZub3csIHRydWUpOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zbG90LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9z bG90LmMKaW5kZXggNjgyODEwMGNmMS4uODUxMTIwZTZkMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vc2xvdC5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3Qu YwpAQCAtMTA3LDEwICsxMDcsMTEgQEAgY29uc3QgY2hhciAqY29uc3QgU2xvdEludmFsaWRhdGlv bkNhdXNlc1tdID0gewogCVtSU19JTlZBTF9XQUxfUkVNT1ZFRF0gPSAid2FsX3JlbW92ZWQiLAog CVtSU19JTlZBTF9IT1JJWk9OXSA9ICJyb3dzX3JlbW92ZWQiLAogCVtSU19JTlZBTF9XQUxfTEVW RUxdID0gIndhbF9sZXZlbF9pbnN1ZmZpY2llbnQiLAorCVtSU19JTlZBTF9JTkFDVElWRV9USU1F T1VUXSA9ICJpbmFjdGl2ZV90aW1lb3V0IiwKIH07CiAKIC8qIE1heGltdW0gbnVtYmVyIG9mIGlu dmFsaWRhdGlvbiBjYXVzZXMgKi8KLSNkZWZpbmUJUlNfSU5WQUxfTUFYX0NBVVNFUyBSU19JTlZB TF9XQUxfTEVWRUwKKyNkZWZpbmUJUlNfSU5WQUxfTUFYX0NBVVNFUyBSU19JTlZBTF9JTkFDVElW RV9USU1FT1VUCiAKIFN0YXRpY0Fzc2VydERlY2wobGVuZ3Rob2YoU2xvdEludmFsaWRhdGlvbkNh dXNlcykgPT0gKFJTX0lOVkFMX01BWF9DQVVTRVMgKyAxKSwKIAkJCQkgImFycmF5IGxlbmd0aCBt aXNtYXRjaCIpOwpAQCAtMTQwLDYgKzE0MSw3IEBAIFJlcGxpY2F0aW9uU2xvdCAqTXlSZXBsaWNh dGlvblNsb3QgPSBOVUxMOwogLyogR1VDIHZhcmlhYmxlcyAqLwogaW50CQkJbWF4X3JlcGxpY2F0 aW9uX3Nsb3RzID0gMTA7IC8qIHRoZSBtYXhpbXVtIG51bWJlciBvZiByZXBsaWNhdGlvbgogCQkJ CQkJCQkJCSAqIHNsb3RzICovCitpbnQJCQlyZXBsaWNhdGlvbl9zbG90X2luYWN0aXZlX3RpbWVv dXQgPSAwOwogCiAvKgogICogVGhpcyBHVUMgbGlzdHMgc3RyZWFtaW5nIHJlcGxpY2F0aW9uIHN0 YW5kYnkgc2VydmVyIHNsb3QgbmFtZXMgdGhhdApAQCAtNTM1LDkgKzUzNywxMiBAQCBSZXBsaWNh dGlvblNsb3ROYW1lKGludCBpbmRleCwgTmFtZSBuYW1lKQogICoKICAqIEFuIGVycm9yIGlzIHJh aXNlZCBpZiBub3dhaXQgaXMgdHJ1ZSBhbmQgdGhlIHNsb3QgaXMgY3VycmVudGx5IGluIHVzZS4g SWYKICAqIG5vd2FpdCBpcyBmYWxzZSwgd2Ugc2xlZXAgdW50aWwgdGhlIHNsb3QgaXMgcmVsZWFz ZWQgYnkgdGhlIG93bmluZyBwcm9jZXNzLgorICoKKyAqIEFuIGVycm9yIGlzIHJhaXNlZCBpZiBl cnJvcl9pZl9pbnZhbGlkIGlzIHRydWUgYW5kIHRoZSBzbG90IGhhcyBiZWVuCisgKiBpbnZhbGlk YXRlZCBwcmV2aW91c2x5LgogICovCiB2b2lkCi1SZXBsaWNhdGlvblNsb3RBY3F1aXJlKGNvbnN0 IGNoYXIgKm5hbWUsIGJvb2wgbm93YWl0KQorUmVwbGljYXRpb25TbG90QWNxdWlyZShjb25zdCBj aGFyICpuYW1lLCBib29sIG5vd2FpdCwgYm9vbCBlcnJvcl9pZl9pbnZhbGlkKQogewogCVJlcGxp Y2F0aW9uU2xvdCAqczsKIAlpbnQJCQlhY3RpdmVfcGlkOwpAQCAtNjE1LDYgKzYyMCwyMiBAQCBy ZXRyeToKIAkvKiBXZSBtYWRlIHRoaXMgc2xvdCBhY3RpdmUsIHNvIGl0J3Mgb3VycyBub3cuICov CiAJTXlSZXBsaWNhdGlvblNsb3QgPSBzOwogCisJLyoKKwkgKiBBbiBlcnJvciBpcyByYWlzZWQg aWYgZXJyb3JfaWZfaW52YWxpZCBpcyB0cnVlIGFuZCB0aGUgc2xvdCBoYXMgYmVlbgorCSAqIHBy ZXZpb3VzbHkgaW52YWxpZGF0ZWQgZHVlIHRvIGluYWN0aXZlIHRpbWVvdXQuCisJICovCisJaWYg KGVycm9yX2lmX2ludmFsaWQgJiYKKwkJcy0+ZGF0YS5pbnZhbGlkYXRlZCA9PSBSU19JTlZBTF9J TkFDVElWRV9USU1FT1VUKQorCXsKKwkJQXNzZXJ0KHMtPmluYWN0aXZlX3NpbmNlID4gMCk7CisJ CWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJF UVVJU0lURV9TVEFURSksCisJCQkJIGVycm1zZygiY2FuIG5vIGxvbmdlciBnZXQgY2hhbmdlcyBm cm9tIHJlcGxpY2F0aW9uIHNsb3QgXCIlc1wiIiwKKwkJCQkJCU5hbWVTdHIocy0+ZGF0YS5uYW1l KSksCisJCQkJIGVycmRldGFpbCgiVGhpcyBzbG90IGhhcyBiZWVuIGludmFsaWRhdGVkIGJlY2F1 c2UgaXQgd2FzIGluYWN0aXZlIGZvciBsb25nZXIgdGhhbiB0aGUgYW1vdW50IG9mIHRpbWUgc3Bl Y2lmaWVkIGJ5IFwiJXNcIi4iLAorCQkJCQkJICAgInJlcGxpY2F0aW9uX3Nsb3RfaW5hY3RpdmVf dGltZW91dCIpKSk7CisJfQorCiAJLyoKIAkgKiBUaGUgY2FsbCB0byBwZ3N0YXRfYWNxdWlyZV9y ZXBsc2xvdCgpIHByb3RlY3RzIGFnYWluc3Qgc3RhdHMgZm9yIGEKIAkgKiBkaWZmZXJlbnQgc2xv dCwgZnJvbSBiZWZvcmUgYSByZXN0YXJ0IG9yIHN1Y2gsIGJlaW5nIHByZXNlbnQgZHVyaW5nCkBA IC03MDMsMTYgKzcyNCwxMiBAQCBSZXBsaWNhdGlvblNsb3RSZWxlYXNlKHZvaWQpCiAJCSAqLwog CQlTcGluTG9ja0FjcXVpcmUoJnNsb3QtPm11dGV4KTsKIAkJc2xvdC0+YWN0aXZlX3BpZCA9IDA7 Ci0JCXNsb3QtPmluYWN0aXZlX3NpbmNlID0gbm93OworCQlSZXBsaWNhdGlvblNsb3RTZXRJbmFj dGl2ZVNpbmNlKHNsb3QsICZub3csIGZhbHNlKTsKIAkJU3BpbkxvY2tSZWxlYXNlKCZzbG90LT5t dXRleCk7CiAJCUNvbmRpdGlvblZhcmlhYmxlQnJvYWRjYXN0KCZzbG90LT5hY3RpdmVfY3YpOwog CX0KIAllbHNlCi0JewotCQlTcGluTG9ja0FjcXVpcmUoJnNsb3QtPm11dGV4KTsKLQkJc2xvdC0+ aW5hY3RpdmVfc2luY2UgPSBub3c7Ci0JCVNwaW5Mb2NrUmVsZWFzZSgmc2xvdC0+bXV0ZXgpOwot CX0KKwkJUmVwbGljYXRpb25TbG90U2V0SW5hY3RpdmVTaW5jZShzbG90LCAmbm93LCB0cnVlKTsK IAogCU15UmVwbGljYXRpb25TbG90ID0gTlVMTDsKIApAQCAtNzg1LDcgKzgwMiw3IEBAIFJlcGxp Y2F0aW9uU2xvdERyb3AoY29uc3QgY2hhciAqbmFtZSwgYm9vbCBub3dhaXQpCiB7CiAJQXNzZXJ0 KE15UmVwbGljYXRpb25TbG90ID09IE5VTEwpOwogCi0JUmVwbGljYXRpb25TbG90QWNxdWlyZShu YW1lLCBub3dhaXQpOworCVJlcGxpY2F0aW9uU2xvdEFjcXVpcmUobmFtZSwgbm93YWl0LCBmYWxz ZSk7CiAKIAkvKgogCSAqIERvIG5vdCBhbGxvdyB1c2VycyB0byBkcm9wIHRoZSBzbG90cyB3aGlj aCBhcmUgY3VycmVudGx5IGJlaW5nIHN5bmNlZApAQCAtODEyLDcgKzgyOSw3IEBAIFJlcGxpY2F0 aW9uU2xvdEFsdGVyKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGJvb2wgKmZhaWxvdmVyLAogCUFz c2VydChNeVJlcGxpY2F0aW9uU2xvdCA9PSBOVUxMKTsKIAlBc3NlcnQoZmFpbG92ZXIgfHwgdHdv X3BoYXNlKTsKIAotCVJlcGxpY2F0aW9uU2xvdEFjcXVpcmUobmFtZSwgZmFsc2UpOworCVJlcGxp Y2F0aW9uU2xvdEFjcXVpcmUobmFtZSwgZmFsc2UsIGZhbHNlKTsKIAogCWlmIChTbG90SXNQaHlz aWNhbChNeVJlcGxpY2F0aW9uU2xvdCkpCiAJCWVyZXBvcnQoRVJST1IsCkBAIC0xNTA4LDcgKzE1 MjUsOCBAQCBSZXBvcnRTbG90SW52YWxpZGF0aW9uKFJlcGxpY2F0aW9uU2xvdEludmFsaWRhdGlv bkNhdXNlIGNhdXNlLAogCQkJCQkgICBOYW1lRGF0YSBzbG90bmFtZSwKIAkJCQkJICAgWExvZ1Jl Y1B0ciByZXN0YXJ0X2xzbiwKIAkJCQkJICAgWExvZ1JlY1B0ciBvbGRlc3RMU04sCi0JCQkJCSAg IFRyYW5zYWN0aW9uSWQgc25hcHNob3RDb25mbGljdEhvcml6b24pCisJCQkJCSAgIFRyYW5zYWN0 aW9uSWQgc25hcHNob3RDb25mbGljdEhvcml6b24sCisJCQkJCSAgIFRpbWVzdGFtcFR6IGluYWN0 aXZlX3NpbmNlKQogewogCVN0cmluZ0luZm9EYXRhIGVycl9kZXRhaWw7CiAJYm9vbAkJaGludCA9 IGZhbHNlOwpAQCAtMTUzOCw2ICsxNTU2LDE1IEBAIFJlcG9ydFNsb3RJbnZhbGlkYXRpb24oUmVw bGljYXRpb25TbG90SW52YWxpZGF0aW9uQ2F1c2UgY2F1c2UsCiAJCWNhc2UgUlNfSU5WQUxfV0FM X0xFVkVMOgogCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZXJyX2RldGFpbCwgXygiTG9naWNh bCBkZWNvZGluZyBvbiBzdGFuZGJ5IHJlcXVpcmVzIFwid2FsX2xldmVsXCIgPj0gXCJsb2dpY2Fs XCIgb24gdGhlIHByaW1hcnkgc2VydmVyLiIpKTsKIAkJCWJyZWFrOworCisJCWNhc2UgUlNfSU5W QUxfSU5BQ1RJVkVfVElNRU9VVDoKKwkJCUFzc2VydChpbmFjdGl2ZV9zaW5jZSA+IDApOworCQkJ YXBwZW5kU3RyaW5nSW5mbygmZXJyX2RldGFpbCwKKwkJCQkJCQkgXygiVGhlIHNsb3QgaGFzIGJl ZW4gaW5hY3RpdmUgc2luY2UgJXMgZm9yIGxvbmdlciB0aGFuIHRoZSBhbW91bnQgb2YgdGltZSBz cGVjaWZpZWQgYnkgXCIlc1wiLiIpLAorCQkJCQkJCSB0aW1lc3RhbXB0el90b19zdHIoaW5hY3Rp dmVfc2luY2UpLAorCQkJCQkJCSAicmVwbGljYXRpb25fc2xvdF9pbmFjdGl2ZV90aW1lb3V0Iik7 CisJCQlicmVhazsKKwogCQljYXNlIFJTX0lOVkFMX05PTkU6CiAJCQlwZ191bnJlYWNoYWJsZSgp OwogCX0KQEAgLTE1NTQsNiArMTU4MSwzMSBAQCBSZXBvcnRTbG90SW52YWxpZGF0aW9uKFJlcGxp Y2F0aW9uU2xvdEludmFsaWRhdGlvbkNhdXNlIGNhdXNlLAogCXBmcmVlKGVycl9kZXRhaWwuZGF0 YSk7CiB9CiAKKy8qCisgKiBJcyB0aGlzIHJlcGxpY2F0aW9uIHNsb3QgYWxsb3dlZCBmb3IgaW5h Y3RpdmUgdGltZW91dCBpbnZhbGlkYXRpb24gY2hlY2s/CisgKgorICogSW5hY3RpdmUgdGltZW91 dCBpbnZhbGlkYXRpb24gaXMgYWxsb3dlZCBvbmx5IHdoZW46CisgKgorICogMS4gSW5hY3RpdmUg dGltZW91dCBpcyBzZXQKKyAqIDIuIFNsb3QgaXMgaW5hY3RpdmUKKyAqIDMuIFNlcnZlciBpcyBu b3QgaW4gcmVjb3ZlcnkKKyAqIDQuIFNsb3QgaXMgbm90IGJlaW5nIHN5bmNlZCBmcm9tIHRoZSBw cmltYXJ5CisgKgorICogTm90ZSB0aGF0IHRoZSBpbmFjdGl2ZSB0aW1lb3V0IGludmFsaWRhdGlv biBtZWNoYW5pc20gaXMgbm90CisgKiBhcHBsaWNhYmxlIGZvciBzbG90cyBvbiB0aGUgc3RhbmRi eSBzZXJ2ZXIgdGhhdCBhcmUgYmVpbmcgc3luY2VkCisgKiBmcm9tIHRoZSBwcmltYXJ5IHNlcnZl ciAoaS5lLiwgc3RhbmRieSBzbG90cyBoYXZpbmcgJ3N5bmNlZCcgZmllbGQgJ3RydWUnKS4KKyAq IFN5bmNlZCBzbG90cyBhcmUgYWx3YXlzIGNvbnNpZGVyZWQgdG8gYmUgaW5hY3RpdmUgYmVjYXVz ZSB0aGV5IGRvbid0CisgKiBwZXJmb3JtIGxvZ2ljYWwgZGVjb2RpbmcgdG8gcHJvZHVjZSBjaGFu Z2VzLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wKK1Nsb3RJbmFjdGl2ZVRpbWVvdXRDaGVja0Fs bG93ZWQoUmVwbGljYXRpb25TbG90ICpzKQoreworCXJldHVybiAocmVwbGljYXRpb25fc2xvdF9p bmFjdGl2ZV90aW1lb3V0ID4gMCAmJgorCQkJcy0+aW5hY3RpdmVfc2luY2UgPiAwICYmCisJCQkh UmVjb3ZlcnlJblByb2dyZXNzKCkgJiYKKwkJCSFzLT5kYXRhLnN5bmNlZCk7Cit9CisKIC8qCiAg KiBIZWxwZXIgZm9yIEludmFsaWRhdGVPYnNvbGV0ZVJlcGxpY2F0aW9uU2xvdHMKICAqCkBAIC0x NTgxLDYgKzE2MzMsNyBAQCBJbnZhbGlkYXRlUG9zc2libHlPYnNvbGV0ZVNsb3QoUmVwbGljYXRp b25TbG90SW52YWxpZGF0aW9uQ2F1c2UgY2F1c2UsCiAJVHJhbnNhY3Rpb25JZCBpbml0aWFsX2Nh dGFsb2dfZWZmZWN0aXZlX3htaW4gPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKIAlYTG9nUmVjUHRy CWluaXRpYWxfcmVzdGFydF9sc24gPSBJbnZhbGlkWExvZ1JlY1B0cjsKIAlSZXBsaWNhdGlvblNs b3RJbnZhbGlkYXRpb25DYXVzZSBpbnZhbGlkYXRpb25fY2F1c2VfcHJldiBQR19VU0VEX0ZPUl9B U1NFUlRTX09OTFkgPSBSU19JTlZBTF9OT05FOworCVRpbWVzdGFtcFR6IGluYWN0aXZlX3NpbmNl ID0gMDsKIAogCWZvciAoOzspCiAJewpAQCAtMTU4OCw2ICsxNjQxLDcgQEAgSW52YWxpZGF0ZVBv c3NpYmx5T2Jzb2xldGVTbG90KFJlcGxpY2F0aW9uU2xvdEludmFsaWRhdGlvbkNhdXNlIGNhdXNl LAogCQlOYW1lRGF0YQlzbG90bmFtZTsKIAkJaW50CQkJYWN0aXZlX3BpZCA9IDA7CiAJCVJlcGxp Y2F0aW9uU2xvdEludmFsaWRhdGlvbkNhdXNlIGludmFsaWRhdGlvbl9jYXVzZSA9IFJTX0lOVkFM X05PTkU7CisJCVRpbWVzdGFtcFR6IG5vdyA9IDA7CiAKIAkJQXNzZXJ0KExXTG9ja0hlbGRCeU1l SW5Nb2RlKFJlcGxpY2F0aW9uU2xvdENvbnRyb2xMb2NrLCBMV19TSEFSRUQpKTsKIApAQCAtMTU5 OCw2ICsxNjUyLDE2IEBAIEludmFsaWRhdGVQb3NzaWJseU9ic29sZXRlU2xvdChSZXBsaWNhdGlv blNsb3RJbnZhbGlkYXRpb25DYXVzZSBjYXVzZSwKIAkJCWJyZWFrOwogCQl9CiAKKwkJaWYgKGNh dXNlID09IFJTX0lOVkFMX0lOQUNUSVZFX1RJTUVPVVQgJiYKKwkJCVNsb3RJbmFjdGl2ZVRpbWVv dXRDaGVja0FsbG93ZWQocykpCisJCXsKKwkJCS8qCisJCQkgKiBXZSBnZXQgdGhlIGN1cnJlbnQg dGltZSBiZWZvcmVoYW5kIHRvIGF2b2lkIHN5c3RlbSBjYWxsIHdoaWxlCisJCQkgKiBob2xkaW5n IHRoZSBzcGlubG9jay4KKwkJCSAqLworCQkJbm93ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOwor CQl9CisKIAkJLyoKIAkJICogQ2hlY2sgaWYgdGhlIHNsb3QgbmVlZHMgdG8gYmUgaW52YWxpZGF0 ZWQuIElmIGl0IG5lZWRzIHRvIGJlCiAJCSAqIGludmFsaWRhdGVkLCBhbmQgaXMgbm90IGN1cnJl bnRseSBhY3F1aXJlZCwgYWNxdWlyZSBpdCBhbmQgbWFyayBpdApAQCAtMTY1MSw2ICsxNzE1LDI4 IEBAIEludmFsaWRhdGVQb3NzaWJseU9ic29sZXRlU2xvdChSZXBsaWNhdGlvblNsb3RJbnZhbGlk YXRpb25DYXVzZSBjYXVzZSwKIAkJCQkJaWYgKFNsb3RJc0xvZ2ljYWwocykpCiAJCQkJCQlpbnZh bGlkYXRpb25fY2F1c2UgPSBjYXVzZTsKIAkJCQkJYnJlYWs7CisJCQkJY2FzZSBSU19JTlZBTF9J TkFDVElWRV9USU1FT1VUOgorCisJCQkJCWlmICghU2xvdEluYWN0aXZlVGltZW91dENoZWNrQWxs b3dlZChzKSkKKwkJCQkJCWJyZWFrOworCisJCQkJCS8qCisJCQkJCSAqIENoZWNrIGlmIHRoZSBz bG90IG5lZWRzIHRvIGJlIGludmFsaWRhdGVkIGR1ZSB0bworCQkJCQkgKiByZXBsaWNhdGlvbl9z bG90X2luYWN0aXZlX3RpbWVvdXQgR1VDLgorCQkJCQkgKi8KKwkJCQkJaWYgKFRpbWVzdGFtcERp ZmZlcmVuY2VFeGNlZWRzKHMtPmluYWN0aXZlX3NpbmNlLCBub3csCisJCQkJCQkJCQkJCQkgICBy ZXBsaWNhdGlvbl9zbG90X2luYWN0aXZlX3RpbWVvdXQgKiAxMDAwKSkKKwkJCQkJeworCQkJCQkJ aW52YWxpZGF0aW9uX2NhdXNlID0gY2F1c2U7CisJCQkJCQlpbmFjdGl2ZV9zaW5jZSA9IHMtPmlu YWN0aXZlX3NpbmNlOworCisJCQkJCQkvKgorCQkJCQkJICogSW52YWxpZGF0aW9uIGR1ZSB0byBp bmFjdGl2ZSB0aW1lb3V0IGltcGxpZXMgdGhhdAorCQkJCQkJICogbm8gb25lIGlzIHVzaW5nIHRo ZSBzbG90LgorCQkJCQkJICovCisJCQkJCQlBc3NlcnQocy0+YWN0aXZlX3BpZCA9PSAwKTsKKwkJ CQkJfQorCQkJCQlicmVhazsKIAkJCQljYXNlIFJTX0lOVkFMX05PTkU6CiAJCQkJCXBnX3VucmVh Y2hhYmxlKCk7CiAJCQl9CkBAIC0xNjc2LDExICsxNzYyLDEzIEBAIEludmFsaWRhdGVQb3NzaWJs eU9ic29sZXRlU2xvdChSZXBsaWNhdGlvblNsb3RJbnZhbGlkYXRpb25DYXVzZSBjYXVzZSwKIAkJ YWN0aXZlX3BpZCA9IHMtPmFjdGl2ZV9waWQ7CiAKIAkJLyoKLQkJICogSWYgdGhlIHNsb3QgY2Fu IGJlIGFjcXVpcmVkLCBkbyBzbyBhbmQgbWFyayBpdCBpbnZhbGlkYXRlZAotCQkgKiBpbW1lZGlh dGVseS4gIE90aGVyd2lzZSB3ZSdsbCBzaWduYWwgdGhlIG93bmluZyBwcm9jZXNzLCBiZWxvdywg YW5kCi0JCSAqIHJldHJ5LgorCQkgKiBJZiB0aGUgc2xvdCBjYW4gYmUgYWNxdWlyZWQsIGRvIHNv IGFuZCBtYXJrIGl0IGFzIGludmFsaWRhdGVkLiBJZgorCQkgKiB0aGUgc2xvdCBpcyBhbHJlYWR5 IG91cnMsIG1hcmsgaXQgYXMgaW52YWxpZGF0ZWQuIE90aGVyd2lzZSwgd2UnbGwKKwkJICogc2ln bmFsIHRoZSBvd25pbmcgcHJvY2VzcyBiZWxvdyBhbmQgcmV0cnkuCiAJCSAqLwotCQlpZiAoYWN0 aXZlX3BpZCA9PSAwKQorCQlpZiAoYWN0aXZlX3BpZCA9PSAwIHx8CisJCQkoTXlSZXBsaWNhdGlv blNsb3QgPT0gcyAmJgorCQkJIGFjdGl2ZV9waWQgPT0gTXlQcm9jUGlkKSkKIAkJewogCQkJTXlS ZXBsaWNhdGlvblNsb3QgPSBzOwogCQkJcy0+YWN0aXZlX3BpZCA9IE15UHJvY1BpZDsKQEAgLTE3 MzUsNyArMTgyMyw4IEBAIEludmFsaWRhdGVQb3NzaWJseU9ic29sZXRlU2xvdChSZXBsaWNhdGlv blNsb3RJbnZhbGlkYXRpb25DYXVzZSBjYXVzZSwKIAkJCXsKIAkJCQlSZXBvcnRTbG90SW52YWxp ZGF0aW9uKGludmFsaWRhdGlvbl9jYXVzZSwgdHJ1ZSwgYWN0aXZlX3BpZCwKIAkJCQkJCQkJCSAg IHNsb3RuYW1lLCByZXN0YXJ0X2xzbiwKLQkJCQkJCQkJCSAgIG9sZGVzdExTTiwgc25hcHNob3RD b25mbGljdEhvcml6b24pOworCQkJCQkJCQkJICAgb2xkZXN0TFNOLCBzbmFwc2hvdENvbmZsaWN0 SG9yaXpvbiwKKwkJCQkJCQkJCSAgIGluYWN0aXZlX3NpbmNlKTsKIAogCQkJCWlmIChNeUJhY2tl bmRUeXBlID09IEJfU1RBUlRVUCkKIAkJCQkJKHZvaWQpIFNlbmRQcm9jU2lnbmFsKGFjdGl2ZV9w aWQsCkBAIC0xNzgxLDcgKzE4NzAsOCBAQCBJbnZhbGlkYXRlUG9zc2libHlPYnNvbGV0ZVNsb3Qo UmVwbGljYXRpb25TbG90SW52YWxpZGF0aW9uQ2F1c2UgY2F1c2UsCiAKIAkJCVJlcG9ydFNsb3RJ bnZhbGlkYXRpb24oaW52YWxpZGF0aW9uX2NhdXNlLCBmYWxzZSwgYWN0aXZlX3BpZCwKIAkJCQkJ CQkJICAgc2xvdG5hbWUsIHJlc3RhcnRfbHNuLAotCQkJCQkJCQkgICBvbGRlc3RMU04sIHNuYXBz aG90Q29uZmxpY3RIb3Jpem9uKTsKKwkJCQkJCQkJICAgb2xkZXN0TFNOLCBzbmFwc2hvdENvbmZs aWN0SG9yaXpvbiwKKwkJCQkJCQkJICAgaW5hY3RpdmVfc2luY2UpOwogCiAJCQkvKiBkb25lIHdp dGggdGhpcyBzbG90IGZvciBub3cgKi8KIAkJCWJyZWFrOwpAQCAtMTgwNCw2ICsxODk0LDcgQEAg SW52YWxpZGF0ZVBvc3NpYmx5T2Jzb2xldGVTbG90KFJlcGxpY2F0aW9uU2xvdEludmFsaWRhdGlv bkNhdXNlIGNhdXNlLAogICogLSBSU19JTlZBTF9IT1JJWk9OOiByZXF1aXJlcyBhIHNuYXBzaG90 IDw9IHRoZSBnaXZlbiBob3Jpem9uIGluIHRoZSBnaXZlbgogICogICBkYjsgZGJvaWQgbWF5IGJl IEludmFsaWRPaWQgZm9yIHNoYXJlZCByZWxhdGlvbnMKICAqIC0gUlNfSU5WQUxfV0FMX0xFVkVM OiBpcyBsb2dpY2FsCisgKiAtIFJTX0lOVkFMX0lOQUNUSVZFX1RJTUVPVVQ6IGluYWN0aXZlIHRp bWVvdXQgb2NjdXJzCiAgKgogICogTkIgLSB0aGlzIHJ1bnMgYXMgcGFydCBvZiBjaGVja3BvaW50 LCBzbyBhdm9pZCByYWlzaW5nIGVycm9ycyBpZiBwb3NzaWJsZS4KICAqLwpAQCAtMTg1Niw3ICsx OTQ3LDggQEAgcmVzdGFydDoKIH0KIAogLyoKLSAqIEZsdXNoIGFsbCByZXBsaWNhdGlvbiBzbG90 cyB0byBkaXNrLgorICogRmx1c2ggYWxsIHJlcGxpY2F0aW9uIHNsb3RzIHRvIGRpc2suIEFsc28s IGludmFsaWRhdGUgb2Jzb2xldGUgc2xvdHMgZHVyaW5nCisgKiBub24tc2h1dGRvd24gY2hlY2tw b2ludC4KICAqCiAgKiBJdCBpcyBjb252ZW5pZW50IHRvIGZsdXNoIGRpcnR5IHJlcGxpY2F0aW9u IHNsb3RzIGF0IHRoZSB0aW1lIG9mIGNoZWNrcG9pbnQuCiAgKiBBZGRpdGlvbmFsbHksIGluIGNh c2Ugb2YgYSBzaHV0ZG93biBjaGVja3BvaW50LCB3ZSBhbHNvIGlkZW50aWZ5IHRoZSBzbG90cwpA QCAtMTkxNCw2ICsyMDA2LDM4IEBAIENoZWNrUG9pbnRSZXBsaWNhdGlvblNsb3RzKGJvb2wgaXNf c2h1dGRvd24pCiAJCVNhdmVTbG90VG9QYXRoKHMsIHBhdGgsIExPRyk7CiAJfQogCUxXTG9ja1Jl bGVhc2UoUmVwbGljYXRpb25TbG90QWxsb2NhdGlvbkxvY2spOworCisJaWYgKCFpc19zaHV0ZG93 bikKKwl7CisJCWVsb2coREVCVUcxLCAicGVyZm9ybWluZyByZXBsaWNhdGlvbiBzbG90IGludmFs aWRhdGlvbiBjaGVja3MiKTsKKworCQkvKgorCQkgKiBOQjogV2Ugd2lsbCBtYWtlIGFub3RoZXIg cGFzcyBvdmVyIHJlcGxpY2F0aW9uIHNsb3RzIGZvcgorCQkgKiBpbnZhbGlkYXRpb24gY2hlY2tz IHRvIGtlZXAgdGhlIGNvZGUgc2ltcGxlLiBUZXN0aW5nIHNob3dzIHRoYXQKKwkJICogdGhlcmUg aXMgbm8gbm90aWNlYWJsZSBvdmVyaGVhZCAod2hlbiBjb21wYXJlZCB3aXRoIHdhbF9yZW1vdmVk CisJCSAqIGludmFsaWRhdGlvbikgZXZlbiBpZiB3ZSB3ZXJlIHRvIGRvIGluYWN0aXZlX3RpbWVv dXQgaW52YWxpZGF0aW9uCisJCSAqIG9mIHRob3VzYW5kcyBvZiByZXBsaWNhdGlvbiBzbG90cyBo ZXJlLiBJZiBpdCBpcyBldmVyIHByb3ZlbiB0aGF0CisJCSAqIHRoaXMgYXNzdW1wdGlvbiBpcyB3 cm9uZywgd2Ugd2lsbCBoYXZlIHRvIHBlcmZvcm0gdGhlIGludmFsaWRhdGlvbgorCQkgKiBjaGVj a3MgaW4gdGhlIGFib3ZlIGZvciBsb29wIHdpdGggdGhlIGZvbGxvd2luZyBjaGFuZ2VzOgorCQkg KgorCQkgKiAtIEFjcXVpcmUgQ29udHJvbExvY2sgbG9jayBvbmNlIGJlZm9yZSB0aGUgbG9vcC4K KwkJICoKKwkJICogLSBDYWxsIEludmFsaWRhdGVQb3NzaWJseU9ic29sZXRlU2xvdCBmb3IgZWFj aCBzbG90LgorCQkgKgorCQkgKiAtIEhhbmRsZSB0aGUgY2FzZXMgaW4gd2hpY2ggQ29udHJvbExv Y2sgZ2V0cyByZWxlYXNlZCBqdXN0IGxpa2UKKwkJICogSW52YWxpZGF0ZU9ic29sZXRlUmVwbGlj YXRpb25TbG90cyBkb2VzLgorCQkgKgorCQkgKiAtIEF2b2lkIHNhdmluZyBzbG90IGluZm8gdG8g ZGlzayB0d28gdGltZXMgZm9yIGVhY2ggaW52YWxpZGF0ZWQKKwkJICogc2xvdC4KKwkJICoKKwkJ ICogWFhYOiBTaG91bGQgd2UgbW92ZSBpbmFjdGl2ZV90aW1lb3V0IGludmFsaWRhdGlvbiBjaGVj ayBjbG9zZXIgdG8KKwkJICogd2FsX3JlbW92ZWQgaW4gQ3JlYXRlQ2hlY2tQb2ludCBhbmQgQ3Jl YXRlUmVzdGFydFBvaW50PworCQkgKi8KKwkJSW52YWxpZGF0ZU9ic29sZXRlUmVwbGljYXRpb25T bG90cyhSU19JTlZBTF9JTkFDVElWRV9USU1FT1VULAorCQkJCQkJCQkJCSAgIDAsCisJCQkJCQkJ CQkJICAgSW52YWxpZE9pZCwKKwkJCQkJCQkJCQkgICBJbnZhbGlkVHJhbnNhY3Rpb25JZCk7CisJ fQogfQogCiAvKgpAQCAtMjIwOCw2ICsyMzMyLDcgQEAgUmVzdG9yZVNsb3RGcm9tRGlzayhjb25z dCBjaGFyICpuYW1lKQogCWJvb2wJCXJlc3RvcmVkID0gZmFsc2U7CiAJaW50CQkJcmVhZEJ5dGVz OwogCXBnX2NyYzMyYwljaGVja3N1bTsKKwlUaW1lc3RhbXBUeiBub3c7CiAKIAkvKiBubyBuZWVk IHRvIGxvY2sgaGVyZSwgbm8gY29uY3VycmVudCBhY2Nlc3MgYWxsb3dlZCB5ZXQgKi8KIApAQCAt MjM2OCw2ICsyNDkzLDkgQEAgUmVzdG9yZVNsb3RGcm9tRGlzayhjb25zdCBjaGFyICpuYW1lKQog CQkJCQkJTmFtZVN0cihjcC5zbG90ZGF0YS5uYW1lKSksCiAJCQkJIGVycmhpbnQoIkNoYW5nZSBc IndhbF9sZXZlbFwiIHRvIGJlIFwicmVwbGljYVwiIG9yIGhpZ2hlci4iKSkpOwogCisJLyogVXNl IHNhbWUgaW5hY3RpdmVfc2luY2UgdGltZSBmb3IgYWxsIHNsb3RzICovCisJbm93ID0gR2V0Q3Vy cmVudFRpbWVzdGFtcCgpOworCiAJLyogbm90aGluZyBjYW4gYmUgYWN0aXZlIHlldCwgZG9uJ3Qg bG9jayBhbnl0aGluZyAqLwogCWZvciAoaSA9IDA7IGkgPCBtYXhfcmVwbGljYXRpb25fc2xvdHM7 IGkrKykKIAl7CkBAIC0yNDAwLDcgKzI1MjgsNyBAQCBSZXN0b3JlU2xvdEZyb21EaXNrKGNvbnN0 IGNoYXIgKm5hbWUpCiAJCSAqIHNsb3QgZnJvbSB0aGUgZGlzayBpbnRvIG1lbW9yeS4gV2hvZXZl ciBhY3F1aXJlcyB0aGUgc2xvdCBpLmUuCiAJCSAqIG1ha2VzIHRoZSBzbG90IGFjdGl2ZSB3aWxs IHJlc2V0IGl0LgogCQkgKi8KLQkJc2xvdC0+aW5hY3RpdmVfc2luY2UgPSBHZXRDdXJyZW50VGlt ZXN0YW1wKCk7CisJCVJlcGxpY2F0aW9uU2xvdFNldEluYWN0aXZlU2luY2Uoc2xvdCwgJm5vdywg ZmFsc2UpOwogCiAJCXJlc3RvcmVkID0gdHJ1ZTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9zbG90ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L3Nsb3RmdW5jcy5jCmluZGV4IGM3YmZiYjE1ZTAuLmIxYjdiMDc1YmQgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3RmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL3Nsb3RmdW5jcy5jCkBAIC01NDAsNyArNTQwLDcgQEAgcGdfcmVwbGljYXRpb25fc2xv dF9hZHZhbmNlKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCW1vdmV0byA9IE1pbihtb3ZldG8sIEdldFhM b2dSZXBsYXlSZWNQdHIoTlVMTCkpOwogCiAJLyogQWNxdWlyZSB0aGUgc2xvdCBzbyB3ZSAib3du IiBpdCAqLwotCVJlcGxpY2F0aW9uU2xvdEFjcXVpcmUoTmFtZVN0cigqc2xvdG5hbWUpLCB0cnVl KTsKKwlSZXBsaWNhdGlvblNsb3RBY3F1aXJlKE5hbWVTdHIoKnNsb3RuYW1lKSwgdHJ1ZSwgdHJ1 ZSk7CiAKIAkvKiBBIHNsb3Qgd2hvc2UgcmVzdGFydF9sc24gaGFzIG5ldmVyIGJlZW4gcmVzZXJ2 ZWQgY2Fubm90IGJlIGFkdmFuY2VkICovCiAJaWYgKFhMb2dSZWNQdHJJc0ludmFsaWQoTXlSZXBs aWNhdGlvblNsb3QtPmRhdGEucmVzdGFydF9sc24pKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vd2Fsc2VuZGVyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxzZW5k ZXIuYwppbmRleCBjNWYxMDA5ZjM3Li42MWEwZTM4NzE1IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi93YWxzZW5kZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93 YWxzZW5kZXIuYwpAQCAtODQ0LDcgKzg0NCw3IEBAIFN0YXJ0UmVwbGljYXRpb24oU3RhcnRSZXBs aWNhdGlvbkNtZCAqY21kKQogCiAJaWYgKGNtZC0+c2xvdG5hbWUpCiAJewotCQlSZXBsaWNhdGlv blNsb3RBY3F1aXJlKGNtZC0+c2xvdG5hbWUsIHRydWUpOworCQlSZXBsaWNhdGlvblNsb3RBY3F1 aXJlKGNtZC0+c2xvdG5hbWUsIHRydWUsIHRydWUpOwogCQlpZiAoU2xvdElzTG9naWNhbChNeVJl cGxpY2F0aW9uU2xvdCkpCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RF X09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKQEAgLTE0NjIsNyArMTQ2Miw3IEBA IFN0YXJ0TG9naWNhbFJlcGxpY2F0aW9uKFN0YXJ0UmVwbGljYXRpb25DbWQgKmNtZCkKIAogCUFz c2VydCghTXlSZXBsaWNhdGlvblNsb3QpOwogCi0JUmVwbGljYXRpb25TbG90QWNxdWlyZShjbWQt PnNsb3RuYW1lLCB0cnVlKTsKKwlSZXBsaWNhdGlvblNsb3RBY3F1aXJlKGNtZC0+c2xvdG5hbWUs IHRydWUsIHRydWUpOwogCiAJLyoKIAkgKiBGb3JjZSBhIGRpc2Nvbm5lY3QsIHNvIHRoYXQgdGhl IGRlY29kaW5nIGNvZGUgZG9lc24ndCBuZWVkIHRvIGNhcmUKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9wZ191cGdyYWRlX3N1cHBvcnQuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9wZ191cGdyYWRlX3N1cHBvcnQuYwppbmRleCBjNTRiMDhmZTE4Li44Mjk1NmQ1OGQzIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfdXBncmFkZV9zdXBwb3J0LmMKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX3VwZ3JhZGVfc3VwcG9ydC5jCkBAIC0yOTksNyArMjk5 LDcgQEAgYmluYXJ5X3VwZ3JhZGVfbG9naWNhbF9zbG90X2hhc19jYXVnaHRfdXAoUEdfRlVOQ1RJ T05fQVJHUykKIAlzbG90X25hbWUgPSBQR19HRVRBUkdfTkFNRSgwKTsKIAogCS8qIEFjcXVpcmUg dGhlIGdpdmVuIHNsb3QgKi8KLQlSZXBsaWNhdGlvblNsb3RBY3F1aXJlKE5hbWVTdHIoKnNsb3Rf bmFtZSksIHRydWUpOworCVJlcGxpY2F0aW9uU2xvdEFjcXVpcmUoTmFtZVN0cigqc2xvdF9uYW1l KSwgdHJ1ZSwgZmFsc2UpOwogCiAJQXNzZXJ0KFNsb3RJc0xvZ2ljYWwoTXlSZXBsaWNhdGlvblNs b3QpKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMg Yi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwppbmRleCA2ODYzMDlkYjU4Li41 ZTI3Y2QzMjcwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMu YworKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwpAQCAtMzAyOCw2ICsz MDI4LDE4IEBAIHN0cnVjdCBjb25maWdfaW50IENvbmZpZ3VyZU5hbWVzSW50W10gPQogCQlOVUxM LCBOVUxMLCBOVUxMCiAJfSwKIAorCXsKKwkJeyJyZXBsaWNhdGlvbl9zbG90X2luYWN0aXZlX3Rp bWVvdXQiLCBQR0NfU0lHSFVQLCBSRVBMSUNBVElPTl9TRU5ESU5HLAorCQkJZ2V0dGV4dF9ub29w KCJTZXRzIHRoZSBhbW91bnQgb2YgdGltZSBhIHJlcGxpY2F0aW9uIHNsb3QgY2FuIHJlbWFpbiBp bmFjdGl2ZSBiZWZvcmUgIgorCQkJCQkJICJpdCB3aWxsIGJlIGludmFsaWRhdGVkLiIpLAorCQkJ TlVMTCwKKwkJCUdVQ19VTklUX1MKKwkJfSwKKwkJJnJlcGxpY2F0aW9uX3Nsb3RfaW5hY3RpdmVf dGltZW91dCwKKwkJMCwgMCwgSU5UX01BWCwKKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKIAl7 CiAJCXsiY29tbWl0X2RlbGF5IiwgUEdDX1NVU0VULCBXQUxfU0VUVElOR1MsCiAJCQlnZXR0ZXh0 X25vb3AoIlNldHMgdGhlIGRlbGF5IGluIG1pY3Jvc2Vjb25kcyBiZXR3ZWVuIHRyYW5zYWN0aW9u IGNvbW1pdCBhbmQgIgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jl c3FsLmNvbmYuc2FtcGxlIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYu c2FtcGxlCmluZGV4IDY2N2UwZGM0MGEuLmRlY2EzYTRhZWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQorKysgYi9zcmMvYmFja2VuZC91 dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKQEAgLTMzNSw2ICszMzUsNyBAQAogI3dh bF9zZW5kZXJfdGltZW91dCA9IDYwcwkjIGluIG1pbGxpc2Vjb25kczsgMCBkaXNhYmxlcwogI3Ry YWNrX2NvbW1pdF90aW1lc3RhbXAgPSBvZmYJIyBjb2xsZWN0IHRpbWVzdGFtcCBvZiB0cmFuc2Fj dGlvbiBjb21taXQKIAkJCQkjIChjaGFuZ2UgcmVxdWlyZXMgcmVzdGFydCkKKyNyZXBsaWNhdGlv bl9zbG90X2luYWN0aXZlX3RpbWVvdXQgPSAwCSMgaW4gc2Vjb25kczsgMCBkaXNhYmxlcwogCiAj IC0gUHJpbWFyeSBTZXJ2ZXIgLQogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9zbG90LmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9zbG90LmgKaW5kZXggNDU1ODJjZjlk OC4uOGZmZDA2ZGQ5ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc2xvdC5o CisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Nsb3QuaApAQCAtNTYsNiArNTYsOCBAQCB0 eXBlZGVmIGVudW0gUmVwbGljYXRpb25TbG90SW52YWxpZGF0aW9uQ2F1c2UKIAlSU19JTlZBTF9I T1JJWk9OLAogCS8qIHdhbF9sZXZlbCBpbnN1ZmZpY2llbnQgZm9yIHNsb3QgKi8KIAlSU19JTlZB TF9XQUxfTEVWRUwsCisJLyogaW5hY3RpdmUgc2xvdCB0aW1lb3V0IGhhcyBvY2N1cnJlZCAqLwor CVJTX0lOVkFMX0lOQUNUSVZFX1RJTUVPVVQsCiB9IFJlcGxpY2F0aW9uU2xvdEludmFsaWRhdGlv bkNhdXNlOwogCiBleHRlcm4gUEdETExJTVBPUlQgY29uc3QgY2hhciAqY29uc3QgU2xvdEludmFs aWRhdGlvbkNhdXNlc1tdOwpAQCAtMjI0LDYgKzIyNiwyNSBAQCB0eXBlZGVmIHN0cnVjdCBSZXBs aWNhdGlvblNsb3RDdGxEYXRhCiAJUmVwbGljYXRpb25TbG90IHJlcGxpY2F0aW9uX3Nsb3RzWzFd OwogfSBSZXBsaWNhdGlvblNsb3RDdGxEYXRhOwogCisvKgorICogU2V0IHNsb3QncyBpbmFjdGl2 ZV9zaW5jZSBwcm9wZXJ0eSB1bmxlc3MgaXQgd2FzIHByZXZpb3VzbHkgaW52YWxpZGF0ZWQuCisg Ki8KK3N0YXRpYyBpbmxpbmUgdm9pZAorUmVwbGljYXRpb25TbG90U2V0SW5hY3RpdmVTaW5jZShS ZXBsaWNhdGlvblNsb3QgKnMsIFRpbWVzdGFtcFR6ICpub3csCisJCQkJCQkJCWJvb2wgYWNxdWly ZV9sb2NrKQoreworCWlmIChzLT5kYXRhLmludmFsaWRhdGVkICE9IFJTX0lOVkFMX05PTkUpCisJ CXJldHVybjsKKworCWlmIChhY3F1aXJlX2xvY2spCisJCVNwaW5Mb2NrQWNxdWlyZSgmcy0+bXV0 ZXgpOworCisJcy0+aW5hY3RpdmVfc2luY2UgPSAqbm93OworCisJaWYgKGFjcXVpcmVfbG9jaykK KwkJU3BpbkxvY2tSZWxlYXNlKCZzLT5tdXRleCk7Cit9CisKIC8qCiAgKiBQb2ludGVycyB0byBz aGFyZWQgbWVtb3J5CiAgKi8KQEAgLTIzMyw2ICsyNTQsNyBAQCBleHRlcm4gUEdETExJTVBPUlQg UmVwbGljYXRpb25TbG90ICpNeVJlcGxpY2F0aW9uU2xvdDsKIC8qIEdVQ3MgKi8KIGV4dGVybiBQ R0RMTElNUE9SVCBpbnQgbWF4X3JlcGxpY2F0aW9uX3Nsb3RzOwogZXh0ZXJuIFBHRExMSU1QT1JU IGNoYXIgKnN5bmNocm9uaXplZF9zdGFuZGJ5X3Nsb3RzOworZXh0ZXJuIFBHRExMSU1QT1JUIGlu dCByZXBsaWNhdGlvbl9zbG90X2luYWN0aXZlX3RpbWVvdXQ7CiAKIC8qIHNobWVtIGluaXRpYWxp emF0aW9uIGZ1bmN0aW9ucyAqLwogZXh0ZXJuIFNpemUgUmVwbGljYXRpb25TbG90c1NobWVtU2l6 ZSh2b2lkKTsKQEAgLTI0OSw3ICsyNzEsOCBAQCBleHRlcm4gdm9pZCBSZXBsaWNhdGlvblNsb3RE cm9wQWNxdWlyZWQodm9pZCk7CiBleHRlcm4gdm9pZCBSZXBsaWNhdGlvblNsb3RBbHRlcihjb25z dCBjaGFyICpuYW1lLCBjb25zdCBib29sICpmYWlsb3ZlciwKIAkJCQkJCQkJIGNvbnN0IGJvb2wg KnR3b19waGFzZSk7CiAKLWV4dGVybiB2b2lkIFJlcGxpY2F0aW9uU2xvdEFjcXVpcmUoY29uc3Qg Y2hhciAqbmFtZSwgYm9vbCBub3dhaXQpOworZXh0ZXJuIHZvaWQgUmVwbGljYXRpb25TbG90QWNx dWlyZShjb25zdCBjaGFyICpuYW1lLCBib29sIG5vd2FpdCwKKwkJCQkJCQkJICAgYm9vbCBlcnJv cl9pZl9pbnZhbGlkKTsKIGV4dGVybiB2b2lkIFJlcGxpY2F0aW9uU2xvdFJlbGVhc2Uodm9pZCk7 CiBleHRlcm4gdm9pZCBSZXBsaWNhdGlvblNsb3RDbGVhbnVwKGJvb2wgc3luY2VkX29ubHkpOwog ZXh0ZXJuIHZvaWQgUmVwbGljYXRpb25TbG90U2F2ZSh2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlY292ZXJ5L21lc29uLmJ1aWxkIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvbWVzb24uYnVpbGQK aW5kZXggNzEyOTI0YzJmYS4uYzQ1YTUxMDZmNCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVjb3Zl cnkvbWVzb24uYnVpbGQKKysrIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvbWVzb24uYnVpbGQKQEAgLTUy LDYgKzUyLDcgQEAgdGVzdHMgKz0gewogICAgICAgJ3QvMDQxX2NoZWNrcG9pbnRfYXRfcHJvbW90 ZS5wbCcsCiAgICAgICAndC8wNDJfbG93X2xldmVsX2JhY2t1cC5wbCcsCiAgICAgICAndC8wNDNf d2FsX3JlcGxheV93YWl0LnBsJywKKyAgICAgICd0LzA1MF9pbnZhbGlkYXRlX3Nsb3RzLnBsJywK ICAgICBdLAogICB9LAogfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wNTBfaW52 YWxpZGF0ZV9zbG90cy5wbCBiL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDUwX2ludmFsaWRhdGVfc2xv dHMucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYzUzYjViM2RiZgot LS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDUwX2ludmFsaWRhdGVfc2xv dHMucGwKQEAgLTAsMCArMSwyNjYgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDI0LCBQb3N0Z3JlU1FM IEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCisjIFRlc3QgZm9yIHJlcGxpY2F0aW9uIHNsb3Rz IGludmFsaWRhdGlvbgordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5ncyBGQVRBTCA9PiAnYWxsJzsK KwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNs dXN0ZXI7Cit1c2UgVGVzdDo6TW9yZTsKK3VzZSBUaW1lOjpIaVJlcyBxdyh1c2xlZXApOworCisj ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CisjIFRlc3RjYXNlIHN0YXJ0CisjCisjIFRlc3QgaW52YWxp ZGF0aW9uIG9mIHN0cmVhbWluZyBzdGFuZGJ5IHNsb3QgYW5kIGxvZ2ljYWwgZmFpbG92ZXIgc2xv dCBvbiB0aGUKKyMgcHJpbWFyeSBkdWUgdG8gaW5hY3RpdmUgdGltZW91dC4gQWxzbywgdGVzdCBs b2dpY2FsIGZhaWxvdmVyIHNsb3Qgc3luY2VkIHRvCisjIHRoZSBzdGFuZGJ5IGZyb20gdGhlIHBy aW1hcnkgZG9lc24ndCBnZXQgaW52YWxpZGF0ZWQgb24gaXRzIG93biwgYnV0IGdldHMgdGhlCisj IGludmFsaWRhdGVkIHN0YXRlIGZyb20gdGhlIHByaW1hcnkuCisKKyMgSW5pdGlhbGl6ZSBwcmlt YXJ5CitteSAkcHJpbWFyeSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHJpbWFy eScpOworJHByaW1hcnktPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOworCisj IEF2b2lkIHVucHJlZGljdGFiaWxpdHkKKyRwcmltYXJ5LT5hcHBlbmRfY29uZigKKwkncG9zdGdy ZXNxbC5jb25mJywgcXF7CitjaGVja3BvaW50X3RpbWVvdXQgPSAxaAorYXV0b3ZhY3V1bSA9IG9m ZgorfSk7CiskcHJpbWFyeS0+c3RhcnQ7CisKKyMgVGFrZSBiYWNrdXAKK215ICRiYWNrdXBfbmFt ZSA9ICdteV9iYWNrdXAnOworJHByaW1hcnktPmJhY2t1cCgkYmFja3VwX25hbWUpOworCisjIENy ZWF0ZSBzdGFuZGJ5CitteSAkc3RhbmRieTEgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5u ZXcoJ3N0YW5kYnkxJyk7Ciskc3RhbmRieTEtPmluaXRfZnJvbV9iYWNrdXAoJHByaW1hcnksICRi YWNrdXBfbmFtZSwgaGFzX3N0cmVhbWluZyA9PiAxKTsKKworbXkgJGNvbm5zdHIgPSAkcHJpbWFy eS0+Y29ubnN0cjsKKyRzdGFuZGJ5MS0+YXBwZW5kX2NvbmYoCisJJ3Bvc3RncmVzcWwuY29uZics IHFxKAoraG90X3N0YW5kYnlfZmVlZGJhY2sgPSBvbgorcHJpbWFyeV9zbG90X25hbWUgPSAnc2Jf c2xvdDEnCitwcmltYXJ5X2Nvbm5pbmZvID0gJyRjb25uc3RyIGRibmFtZT1wb3N0Z3JlcycKKykp OworCisjIENyZWF0ZSBzeW5jIHNsb3Qgb24gdGhlIHByaW1hcnkKKyRwcmltYXJ5LT5wc3FsKCdw b3N0Z3JlcycsCisJcXtTRUxFQ1QgcGdfY3JlYXRlX2xvZ2ljYWxfcmVwbGljYXRpb25fc2xvdCgn c3luY19zbG90MScsICd0ZXN0X2RlY29kaW5nJywgZmFsc2UsIGZhbHNlLCB0cnVlKTt9CispOwor CisjIENyZWF0ZSBzdGFuZGJ5IHNsb3Qgb24gdGhlIHByaW1hcnkKKyRwcmltYXJ5LT5zYWZlX3Bz cWwoCisJJ3Bvc3RncmVzJywgcXFbCisgICAgU0VMRUNUIHBnX2NyZWF0ZV9waHlzaWNhbF9yZXBs aWNhdGlvbl9zbG90KHNsb3RfbmFtZSA6PSAnc2Jfc2xvdDEnLCBpbW1lZGlhdGVseV9yZXNlcnZl IDo9IHRydWUpOworXSk7CisKKyRzdGFuZGJ5MS0+c3RhcnQ7CisKKyMgV2FpdCB1bnRpbCB0aGUg c3RhbmRieSBoYXMgcmVwbGF5ZWQgZW5vdWdoIGRhdGEKKyRwcmltYXJ5LT53YWl0X2Zvcl9jYXRj aHVwKCRzdGFuZGJ5MSk7CisKK215ICRsb2dzdGFydCA9IC1zICRzdGFuZGJ5MS0+bG9nZmlsZTsK KworIyBTZXQgdGltZW91dCBHVUMgb24gdGhlIHN0YW5kYnkgdG8gdmVyaWZ5IHRoYXQgdGhlIG5l eHQgY2hlY2twb2ludCB3aWxsIG5vdAorIyBpbnZhbGlkYXRlIHN5bmNlZCBzbG90cy4KK215ICRp bmFjdGl2ZV90aW1lb3V0ID0gMTsKKyRzdGFuZGJ5MS0+c2FmZV9wc3FsKAorCSdwb3N0Z3Jlcycs IHFxWworICAgIEFMVEVSIFNZU1RFTSBTRVQgcmVwbGljYXRpb25fc2xvdF9pbmFjdGl2ZV90aW1l b3V0IFRPICcke2luYWN0aXZlX3RpbWVvdXR9cyc7CitdKTsKKyRzdGFuZGJ5MS0+cmVsb2FkOwor CisjIFN5bmMgdGhlIHByaW1hcnkgc2xvdHMgdG8gdGhlIHN0YW5kYnkKKyRzdGFuZGJ5MS0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcGdfc3luY19yZXBsaWNhdGlvbl9zbG90cygpOyIp OworCisjIENvbmZpcm0gdGhhdCB0aGUgbG9naWNhbCBmYWlsb3ZlciBzbG90IGlzIGNyZWF0ZWQg b24gdGhlIHN0YW5kYnkKK2lzKCAkc3RhbmRieTEtPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywK KwkJcXtTRUxFQ1QgY291bnQoKikgPSAxIEZST00gcGdfcmVwbGljYXRpb25fc2xvdHMKKwkJICBX SEVSRSBzbG90X25hbWUgPSAnc3luY19zbG90MScgQU5EIHN5bmNlZAorCQkJQU5EIE5PVCB0ZW1w b3JhcnkKKwkJCUFORCBpbnZhbGlkYXRpb25fcmVhc29uIElTIE5VTEw7fQorCSksCisJInQiLAor CSdsb2dpY2FsIHNsb3Qgc3luY19zbG90MSBpcyBzeW5jZWQgdG8gc3RhbmRieScpOworCisjIEdp dmUgZW5vdWdoIHRpbWUKK3NsZWVwKCRpbmFjdGl2ZV90aW1lb3V0KzEpOworCisjIERlc3BpdGUg aW5hY3RpdmUgdGltZW91dCBiZWluZyBzZXQsIHRoZSBzeW5jZWQgc2xvdCB3b24ndCBnZXQgaW52 YWxpZGF0ZWQgb24KKyMgaXRzIG93biBvbiB0aGUgc3RhbmRieS4gU28sIHdlIG11c3Qgbm90IHNl ZSBpbnZhbGlkYXRpb24gbWVzc2FnZSBpbiBzZXJ2ZXIKKyMgbG9nLgorJHN0YW5kYnkxLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkNIRUNLUE9JTlQiKTsKK29rKCAhJHN0YW5kYnkxLT5sb2dfY29u dGFpbnMoCisJCSJpbnZhbGlkYXRpbmcgb2Jzb2xldGUgcmVwbGljYXRpb24gc2xvdCBcInN5bmNf c2xvdDFcIiIsCisJCSRsb2dzdGFydCksCisJJ2NoZWNrIHRoYXQgc3luY2VkIHNsb3Qgc3luY19z bG90MSBoYXMgbm90IGJlZW4gaW52YWxpZGF0ZWQgb24gc3RhbmRieScKKyk7CisKKyRsb2dzdGFy dCA9IC1zICRwcmltYXJ5LT5sb2dmaWxlOworCisjIFNldCB0aW1lb3V0IEdVQyBzbyB0aGF0IHRo ZSBuZXh0IGNoZWNrcG9pbnQgd2lsbCBpbnZhbGlkYXRlIGluYWN0aXZlIHNsb3RzCiskcHJpbWFy eS0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsIHFxWworICAgIEFMVEVSIFNZU1RFTSBTRVQgcmVw bGljYXRpb25fc2xvdF9pbmFjdGl2ZV90aW1lb3V0IFRPICcke2luYWN0aXZlX3RpbWVvdXR9cyc7 CitdKTsKKyRwcmltYXJ5LT5yZWxvYWQ7CisKKyMgV2FpdCBmb3IgbG9naWNhbCBmYWlsb3ZlciBz bG90IHRvIGJlY29tZSBpbmFjdGl2ZSBvbiB0aGUgcHJpbWFyeS4gTm90ZSB0aGF0CisjIG5vYm9k eSBoYXMgYWNxdWlyZWQgdGhlIHNsb3QgeWV0LCBzbyBpdCBtdXN0IGdldCBpbnZhbGlkYXRlZCBk dWUgdG8KKyMgaW5hY3RpdmUgdGltZW91dC4KK3dhaXRfZm9yX3Nsb3RfaW52YWxpZGF0aW9uKCRw cmltYXJ5LCAnc3luY19zbG90MScsICRsb2dzdGFydCwKKwkkaW5hY3RpdmVfdGltZW91dCk7CisK KyMgUmUtc3luYyB0aGUgcHJpbWFyeSBzbG90cyB0byB0aGUgc3RhbmRieS4gTm90ZSB0aGF0IHRo ZSBwcmltYXJ5IHNsb3Qgd2FzCisjIGFscmVhZHkgaW52YWxpZGF0ZWQgKGFib3ZlKSBkdWUgdG8g aW5hY3RpdmUgdGltZW91dC4gVGhlIHN0YW5kYnkgbXVzdCBqdXN0CisjIHN5bmMgdGhlIGludmFs aWRhdGVkIHN0YXRlLgorJHN0YW5kYnkxLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBw Z19zeW5jX3JlcGxpY2F0aW9uX3Nsb3RzKCk7Iik7Ciskc3RhbmRieTEtPnBvbGxfcXVlcnlfdW50 aWwoCisJJ3Bvc3RncmVzJywgcXFbCisJU0VMRUNUIENPVU5UKHNsb3RfbmFtZSkgPSAxIEZST00g cGdfcmVwbGljYXRpb25fc2xvdHMKKwkJV0hFUkUgc2xvdF9uYW1lID0gJ3N5bmNfc2xvdDEnIEFO RAorCQlpbnZhbGlkYXRpb25fcmVhc29uID0gJ2luYWN0aXZlX3RpbWVvdXQnOworXSkKKyAgb3Ig ZGllCisgICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3Igc3luY19zbG90MSBpbnZhbGlkYXRp b24gdG8gYmUgc3luY2VkIG9uIHN0YW5kYnkiOworCisjIE1ha2UgdGhlIHN0YW5kYnkgc2xvdCBv biB0aGUgcHJpbWFyeSBpbmFjdGl2ZSBhbmQgY2hlY2sgZm9yIGludmFsaWRhdGlvbgorJHN0YW5k YnkxLT5zdG9wOword2FpdF9mb3Jfc2xvdF9pbnZhbGlkYXRpb24oJHByaW1hcnksICdzYl9zbG90 MScsICRsb2dzdGFydCwKKwkkaW5hY3RpdmVfdGltZW91dCk7CisKKyMgVGVzdGNhc2UgZW5kCisj ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVGVzdGNh c2Ugc3RhcnQKKyMgSW52YWxpZGF0ZSBsb2dpY2FsIHN1YnNjcmliZXIgc2xvdCBkdWUgdG8gaW5h Y3RpdmUgdGltZW91dC4KKworbXkgJHB1Ymxpc2hlciA9ICRwcmltYXJ5OworCisjIFByZXBhcmUg Zm9yIHRlc3QKKyRwdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxcVsKKyAgICBB TFRFUiBTWVNURU0gU0VUIHJlcGxpY2F0aW9uX3Nsb3RfaW5hY3RpdmVfdGltZW91dCBUTyAnMCc7 CitdKTsKKyRwdWJsaXNoZXItPnJlbG9hZDsKKworIyBDcmVhdGUgc3Vic2NyaWJlcgorbXkgJHN1 YnNjcmliZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3N1YicpOworJHN1YnNj cmliZXItPmluaXQ7Ciskc3Vic2NyaWJlci0+c3RhcnQ7CisKKyMgQ3JlYXRlIHRhYmxlcworJHB1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdGVzdF90YmwgKGlk IGludCkiKTsKKyRzdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJM RSB0ZXN0X3RibCAoaWQgaW50KSIpOworCisjIEluc2VydCBzb21lIGRhdGEKKyRwdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB0ZXN0X3RibCBWQUxVRVMgKGdl bmVyYXRlX3NlcmllcygxLCA1KSk7Iik7CisKKyMgU2V0dXAgbG9naWNhbCByZXBsaWNhdGlvbgor bXkgJHB1Ymxpc2hlcl9jb25uc3RyID0gJHB1Ymxpc2hlci0+Y29ubnN0ciAuICcgZGJuYW1lPXBv c3RncmVzJzsKKyRwdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFBVQkxJ Q0FUSU9OIHB1YiBGT1IgQUxMIFRBQkxFUyIpOworJHB1Ymxpc2hlci0+c2FmZV9wc3FsKAorCSdw b3N0Z3JlcycsIHFxWworICAgIFNFTEVDVCBwZ19jcmVhdGVfbG9naWNhbF9yZXBsaWNhdGlvbl9z bG90KHNsb3RfbmFtZSA6PSAnbHN1YjFfc2xvdCcsIHBsdWdpbiA6PSAncGdvdXRwdXQnKTsKK10p OworCiskc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBTVUJTQ1JJ UFRJT04gc3ViIENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0cicgUFVCTElDQVRJT04gcHVi IFdJVEggKHNsb3RfbmFtZSA9ICdsc3ViMV9zbG90JywgY3JlYXRlX3Nsb3QgPSBmYWxzZSkiCisp OworJHN1YnNjcmliZXItPndhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRwdWJsaXNoZXIsICdz dWInKTsKK215ICRyZXN1bHQgPQorICAkc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3RibCIpOworaXMoJHJlc3VsdCwgcXEoNSksICJj aGVjayBpbml0aWFsIGNvcHkgd2FzIGRvbmUiKTsKKworIyBTZXQgdGltZW91dCBHVUMgc28gdGhh dCB0aGUgbmV4dCBjaGVja3BvaW50IHdpbGwgaW52YWxpZGF0ZSBpbmFjdGl2ZSBzbG90cworJHB1 Ymxpc2hlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsIHFxWworICAgIEFMVEVSIFNZU1RFTSBT RVQgcmVwbGljYXRpb25fc2xvdF9pbmFjdGl2ZV90aW1lb3V0IFRPICcgJHtpbmFjdGl2ZV90aW1l b3V0fXMnOworXSk7CiskcHVibGlzaGVyLT5yZWxvYWQ7CisKKyRsb2dzdGFydCA9IC1zICRwdWJs aXNoZXItPmxvZ2ZpbGU7CisKKyMgTWFrZSBzdWJzY3JpYmVyIHNsb3Qgb24gcHVibGlzaGVyIGlu YWN0aXZlIGFuZCBjaGVjayBmb3IgaW52YWxpZGF0aW9uCiskc3Vic2NyaWJlci0+c3RvcDsKK3dh aXRfZm9yX3Nsb3RfaW52YWxpZGF0aW9uKCRwdWJsaXNoZXIsICdsc3ViMV9zbG90JywgJGxvZ3N0 YXJ0LAorCSRpbmFjdGl2ZV90aW1lb3V0KTsKKworIyBUZXN0Y2FzZSBlbmQKKyMgPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KKworIyBXYWl0IGZvciBzbG90IHRvIGZpcnN0IGJlY29tZSBpbmFjdGl2ZSBh bmQgdGhlbiBnZXQgaW52YWxpZGF0ZWQKK3N1YiB3YWl0X2Zvcl9zbG90X2ludmFsaWRhdGlvbgor eworCW15ICgkbm9kZSwgJHNsb3QsICRvZmZzZXQsICRpbmFjdGl2ZV90aW1lb3V0KSA9IEBfOwor CW15ICRub2RlX25hbWUgPSAkbm9kZS0+bmFtZTsKKworCSMgV2FpdCBmb3Igc2xvdCB0byBiZWNv bWUgaW5hY3RpdmUKKwkkbm9kZS0+cG9sbF9xdWVyeV91bnRpbCgKKwkJJ3Bvc3RncmVzJywgcXFb CisJCVNFTEVDVCBDT1VOVChzbG90X25hbWUpID0gMSBGUk9NIHBnX3JlcGxpY2F0aW9uX3Nsb3Rz CisJCQlXSEVSRSBzbG90X25hbWUgPSAnJHNsb3QnIEFORCBhY3RpdmUgPSAnZicgQU5ECisJCQkJ ICBpbmFjdGl2ZV9zaW5jZSBJUyBOT1QgTlVMTDsKKwldKQorCSAgb3IgZGllCisJICAiVGltZWQg b3V0IHdoaWxlIHdhaXRpbmcgZm9yIHNsb3QgJHNsb3QgdG8gYmVjb21lIGluYWN0aXZlIG9uIG5v ZGUgJG5vZGVfbmFtZSI7CisKKwl0cmlnZ2VyX3Nsb3RfaW52YWxpZGF0aW9uKCRub2RlLCAkc2xv dCwgJG9mZnNldCwgJGluYWN0aXZlX3RpbWVvdXQpOworCisJIyBDaGVjayB0aGF0IGFuIGludmFs aWRhdGVkIHNsb3QgY2Fubm90IGJlIGFjcXVpcmVkCisJbXkgKCRyZXN1bHQsICRzdGRvdXQsICRz dGRlcnIpOworCSgkcmVzdWx0LCAkc3Rkb3V0LCAkc3RkZXJyKSA9ICRub2RlLT5wc3FsKAorCQkn cG9zdGdyZXMnLCBxcVsKKwkJCVNFTEVDVCBwZ19yZXBsaWNhdGlvbl9zbG90X2FkdmFuY2UoJyRz bG90JywgJzAvMScpOworCV0pOworCW9rKCAkc3RkZXJyID1+CisJCSAgL2NhbiBubyBsb25nZXIg Z2V0IGNoYW5nZXMgZnJvbSByZXBsaWNhdGlvbiBzbG90ICIkc2xvdCIvLAorCQkiZGV0ZWN0ZWQg ZXJyb3IgdXBvbiB0cnlpbmcgdG8gYWNxdWlyZSBpbnZhbGlkYXRlZCBzbG90ICRzbG90IG9uIG5v ZGUgJG5vZGVfbmFtZSIKKwkgICkKKwkgIG9yIGRpZQorCSAgImNvdWxkIG5vdCBkZXRlY3QgZXJy b3IgdXBvbiB0cnlpbmcgdG8gYWNxdWlyZSBpbnZhbGlkYXRlZCBzbG90ICRzbG90IG9uIG5vZGUg JG5vZGVfbmFtZSI7Cit9CisKKyMgVHJpZ2dlciBzbG90IGludmFsaWRhdGlvbiBhbmQgY29uZmly bSBpdCBpbiB0aGUgc2VydmVyIGxvZworc3ViIHRyaWdnZXJfc2xvdF9pbnZhbGlkYXRpb24KK3sK KwlteSAoJG5vZGUsICRzbG90LCAkb2Zmc2V0LCAkaW5hY3RpdmVfdGltZW91dCkgPSBAXzsKKwlt eSAkbm9kZV9uYW1lID0gJG5vZGUtPm5hbWU7CisJbXkgJGludmFsaWRhdGVkID0gMDsKKworCSMg R2l2ZSBlbm91Z2ggdGltZSB0byBhdm9pZCBtdWx0aXBsZSBjaGVja3BvaW50cworCXNsZWVwKCRp bmFjdGl2ZV90aW1lb3V0ICsgMSk7CisKKwlmb3IgKG15ICRpID0gMDsgJGkgPCAxMCAqICRQb3N0 Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGltZW91dF9kZWZhdWx0OyAkaSsrKQorCXsKKwkJJG5vZGUt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ0hFQ0tQT0lOVCIpOworCQlpZiAoJG5vZGUtPmxvZ19j b250YWlucygKKwkJCQkiaW52YWxpZGF0aW5nIG9ic29sZXRlIHJlcGxpY2F0aW9uIHNsb3QgXCIk c2xvdFwiIiwKKwkJCQkkb2Zmc2V0KSkKKwkJeworCQkJJGludmFsaWRhdGVkID0gMTsKKwkJCWxh c3Q7CisJCX0KKwkJdXNsZWVwKDEwMF8wMDApOworCX0KKwlvaygkaW52YWxpZGF0ZWQsCisJCSJj aGVjayB0aGF0IHNsb3QgJHNsb3QgaW52YWxpZGF0aW9uIGhhcyBiZWVuIGxvZ2dlZCBvbiBub2Rl ICRub2RlX25hbWUiCisJKTsKKworCSMgQ2hlY2sgdGhhdCB0aGUgaW52YWxpZGF0aW9uIHJlYXNv biBpcyAnaW5hY3RpdmVfdGltZW91dCcKKwkkbm9kZS0+cG9sbF9xdWVyeV91bnRpbCgKKwkJJ3Bv c3RncmVzJywgcXFbCisJCVNFTEVDVCBDT1VOVChzbG90X25hbWUpID0gMSBGUk9NIHBnX3JlcGxp Y2F0aW9uX3Nsb3RzCisJCQlXSEVSRSBzbG90X25hbWUgPSAnJHNsb3QnIEFORAorCQkJaW52YWxp ZGF0aW9uX3JlYXNvbiA9ICdpbmFjdGl2ZV90aW1lb3V0JzsKKwldKQorCSAgb3IgZGllCisJICAi VGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIGludmFsaWRhdGlvbiByZWFzb24gb2Ygc2xvdCAk c2xvdCB0byBiZSBzZXQgb24gbm9kZSAkbm9kZV9uYW1lIjsKK30KKworZG9uZV90ZXN0aW5nKCk7 Ci0tIAoyLjQzLjAKCg== --000000000000d5160a062239a73e--