<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>90117</bug_id>
          
          <creation_ts>2012-06-27 17:47:47 -0700</creation_ts>
          <short_desc>[chromium] Split WebScrollbar into WebPluginScrollbar and WebScrollbar</short_desc>
          <delta_ts>2012-06-28 16:28:11 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>90196</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adrienne Walker">enne</reporter>
          <assigned_to name="Adrienne Walker">enne</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>659016</commentid>
    <comment_count>0</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-06-27 17:47:47 -0700</bug_when>
    <thetext>[chromium] Split WebScrollbar into WebPluginScrollbar and WebScrollbar</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659028</commentid>
    <comment_count>1</comment_count>
      <attachid>149835</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-06-27 17:57:27 -0700</bug_when>
    <thetext>Created attachment 149835
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659034</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-27 18:00:27 -0700</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659083</commentid>
    <comment_count>3</comment_count>
      <attachid>149835</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-27 19:00:34 -0700</bug_when>
    <thetext>Comment on attachment 149835
Patch

R=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659099</commentid>
    <comment_count>4</comment_count>
      <attachid>149835</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-27 19:23:32 -0700</bug_when>
    <thetext>Comment on attachment 149835
Patch

Attachment 149835 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13102871</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659639</commentid>
    <comment_count>5</comment_count>
      <attachid>149977</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-06-28 11:18:48 -0700</bug_when>
    <thetext>Created attachment 149977
Take 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659641</commentid>
    <comment_count>6</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-06-28 11:19:08 -0700</bug_when>
    <thetext>diff --git a/Source/WebKit/chromium/WebKit.gyp b/Source/WebKit/chromium/WebKit.gyp
index 12cf8a8..8eb0985 100644
--- a/Source/WebKit/chromium/WebKit.gyp
+++ b/Source/WebKit/chromium/WebKit.gyp
@@ -76,7 +76,7 @@
                 &apos;&lt;(chromium_src_dir)/v8/tools/gyp/v8.gyp:v8&apos;,
             ],
             &apos;export_dependent_settings&apos;: [
-                &apos;../../Platform/Platform.gyp/Platform.gyp:webkit_platform&apos;,
+                &apos;../../WebCore/WebCore.gyp/WebCore.gyp:webcore&apos;,
                 &apos;&lt;(chromium_src_dir)/skia/skia.gyp:skia&apos;,
                 &apos;&lt;(chromium_src_dir)/third_party/icu/icu.gyp:icuuc&apos;,
                 &apos;&lt;(chromium_src_dir)/third_party/npapi/npapi.gyp:npapi&apos;,</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659643</commentid>
    <comment_count>7</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-06-28 11:24:30 -0700</bug_when>
    <thetext>Alternatively, I think I could add Platform as a dependency on webkit_glue if you think that&apos;d be better?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659647</commentid>
    <comment_count>8</comment_count>
      <attachid>149977</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-28 11:27:52 -0700</bug_when>
    <thetext>Comment on attachment 149977
Take 2

View in context: https://bugs.webkit.org/attachment.cgi?id=149977&amp;action=review

&gt; Source/WebKit/chromium/WebKit.gyp:79
&gt; +                &apos;../../WebCore/WebCore.gyp/WebCore.gyp:webcore&apos;,

So folks who depend on WebKit.gyp:webkit see all of WebCore&apos;s dependent settings?  Is that so they can pick up the Platform include path?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659651</commentid>
    <comment_count>9</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-06-28 11:30:53 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 149977 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=149977&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/chromium/WebKit.gyp:79
&gt; &gt; +                &apos;../../WebCore/WebCore.gyp/WebCore.gyp:webcore&apos;,
&gt; 
&gt; So folks who depend on WebKit.gyp:webkit see all of WebCore&apos;s dependent settings?  Is that so they can pick up the Platform include path?

Yeah.  Maybe Platform isn&apos;t exporting its include path properly? Since webkit_glue depends on WebKit and WebKit (in patch 1) was exporting Platform&apos;s dependent settings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659718</commentid>
    <comment_count>10</comment_count>
      <attachid>149989</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-06-28 12:54:58 -0700</bug_when>
    <thetext>Created attachment 149989
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659721</commentid>
    <comment_count>11</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-06-28 12:56:39 -0700</bug_when>
    <thetext>Back to patch 1.  I had some local build errors, but I think something was stale.  Once DEPS rolls in 90196, things should be ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659941</commentid>
    <comment_count>12</comment_count>
      <attachid>149989</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-28 16:28:03 -0700</bug_when>
    <thetext>Comment on attachment 149989
Patch

Clearing flags on attachment: 149989

Committed r121486: &lt;http://trac.webkit.org/changeset/121486&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659942</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-28 16:28:11 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149835</attachid>
            <date>2012-06-27 17:57:27 -0700</date>
            <delta_ts>2012-06-28 11:18:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90117-20120627175727.patch</filename>
            <type>text/plain</type>
            <size>56146</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxMzQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCA0YzJkY2Q0MGY5MjBj
MzRjYmJlYTY3ZGI3NDI3YzVhYWNlMDliYzAwLi43MzYzNmVmMTkzNWQ2NzE3NmYwMDQ5OGUzNTI4
Y2Y3ZTlkZTcxN2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0wNi0yNyAg
QWRyaWVubmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29tPgorCisgICAgICAgIFtjaHJvbWl1bV0g
U3BsaXQgV2ViU2Nyb2xsYmFyIGludG8gV2ViUGx1Z2luU2Nyb2xsYmFyIGFuZCBXZWJTY3JvbGxi
YXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwMTE3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBX
ZWJTY3JvbGxiYXIgZnJvbSBjbGllbnQgQVBJIHRvIFBsYXRmb3JtLgorCisgICAgICAgICogUGxh
dGZvcm0uZ3lwaToKKyAgICAgICAgKiBjaHJvbWl1bS9wdWJsaWMvV2ViU2Nyb2xsYmFyLmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBsdWdpblNjcm9sbGJh
ckNsaWVudC5oLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlNjcm9sbGJhcik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhcjo6fldlYlNjcm9sbGJhcik6CisKIDIwMTItMDYt
MjYgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hy
b21pdW1dIFJlbW92ZSBXZWJWaWV3OjpncmFwaGljc0NvbnRleHQzRCBnZXR0ZXIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpp
bmRleCAyYTZiNGNkODNjNTE4MDM4OTgzMGMwZGQwNmYxMjQyZGU5ZmFkMGEzLi5mZjE1NTFiM2M2
MTgzNTY2M2FlNGYzYTkyYjE0ZTM5M2NkNGNjMWQxIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTItMDYtMjcgIEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KKworICAg
ICAgICBbY2hyb21pdW1dIFNwbGl0IFdlYlNjcm9sbGJhciBpbnRvIFdlYlBsdWdpblNjcm9sbGJh
ciBhbmQgV2ViU2Nyb2xsYmFyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD05MDExNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE1ha2UgV2ViQ29yZSBhbHNvIGRlcGVuZCBvbiBQbGF0Zm9ybS4KKworICAgICAg
ICAqIFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOgorCiAyMDEyLTA2LTI3ICBTaGlueWEgS2F3YW5h
a2EgIDxzaGlueWFrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBIVE1MU3R5bGVFbGVtZW50Ojpy
ZW1vdmVkRnJvbSBzZWVtcyBpbmNvcnJlY3QuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IGExNDZkODlkZGMxYzJiOTUzNGY2ZjI5NTg2M2JlYmIzOGExMjNmNTguLjE5ZDUxNzMxOTQzYWYw
MDg0NDQyNzcxNTk5NDBjOGQ2ZTVhM2Y4ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsODEgQEAKKzIwMTItMDYtMjcgIEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xl
LmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIFNwbGl0IFdlYlNjcm9sbGJhciBpbnRvIFdlYlBs
dWdpblNjcm9sbGJhciBhbmQgV2ViU2Nyb2xsYmFyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDExNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIENvbnZlcnQgV2ViU2Nyb2xsYmFyL1dlYlNjcm9sbGJhckNs
aWVudC9XZWJTY3JvbGxiYXJJbXBsIHRvIGJlCisgICAgICAgIFdlYlBsdWdpblNjcm9sbGJhciwg
V2ViUGx1Z2luU2Nyb2xsYmFyQ2xpZW50LCBhbmQKKyAgICAgICAgV2ViUGx1Z2luU2Nyb2xsYmFy
SW1wbC4gTW9kaWZ5IFNjcm9sbGJhckdyb3VwCisgICAgICAgIHRvIHVzZSB0aGlzIGluc3RlYWQu
CisKKyAgICAgICAgV2ViU2Nyb2xsYmFyIGlzIG5vdyB0aGUgYmFzZSBpbnRlcmZhY2UgZm9yIGEg
cHJlLWV4aXN0aW5nIHNjcm9sbGJhcgorICAgICAgICB0aGF0IGlzIGFjY2Vzc2VkIGluIGEgY29u
c3QgbWFubmVyLiBJdCBhbHNvIHByb3ZpZGVzIGFsbCBvZiB0aGUgY29tbW9uCisgICAgICAgIFdl
YktpdCBTY3JvbGxUeXBlcy5oIGVudW1zLiBXZWJQbHVnaW5TY3JvbGxiYXIgaXMgbm93IGEgc2Ny
b2xsYmFyIHRoYXQKKyAgICAgICAgaGFzIGJlZW4gZXh0ZXJuYWxseSBjcmVhdGVkIGFuZCBpcyBl
eHRlcm5hbGx5IG1vZGlmaWVkIGluIHRlcm1zIG9mIGl0cworICAgICAgICBwb3NpdGlvbiwgaW52
YWxpZGF0aW9uLCBhbmQgcGFpbnRpbmcuCisKKyAgICAgICAgVGhpcyBpcyBhIHByZS1yZWZhY3Rv
cmluZyBmb3IgYWRkaW5nIFdlYiB2ZXJzaW9ucyBvZiBTY3JvbGxiYXJUaGVtZQorICAgICAgICBp
bnRvIHRoZSBQbGF0Zm9ybSBkaXJlY3Rvcnkgd2hpY2ggd2lsbCBvcGVyYXRlIG9uIFdlYlNjcm9s
bGJhciwgYnV0CisgICAgICAgIHRoYXQgZG9uJ3QgbmVlZCBhbGwgb2Ygd2hhdCBXZWJQbHVnaW5T
Y3JvbGxiYXIgcHJvdmlkZXMuCisKKyAgICAgICAgQXMgV2ViU2Nyb2xsYmFyIGlzIG1vdmVkIHRv
IFBsYXRmb3JtLCBXZWJLaXQuZ3lwIG5vdyBtdXN0IGRlcGVuZCBvbgorICAgICAgICBQbGF0Zm9y
bSBhcyB3ZWxsLgorCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvV2Vi
UGx1Z2luU2Nyb2xsYmFyLmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViUGx1Z2lu
U2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luU2Nyb2xsYmFyOjp+V2ViUGx1
Z2luU2Nyb2xsYmFyKToKKyAgICAgICAgKiBwdWJsaWMvV2ViUGx1Z2luU2Nyb2xsYmFyQ2xpZW50
Lmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViUGx1Z2luU2Nyb2xsYmFyQ2xpZW50
KToKKyAgICAgICAgKiBwdWJsaWMvV2ViU2Nyb2xsYmFyLmg6IFJlbW92ZWQuCisgICAgICAgICog
cHVibGljL1dlYlNjcm9sbGJhckNsaWVudC5oOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9Bc3Nl
cnRNYXRjaGluZ0VudW1zLmNwcDoKKyAgICAgICAgKiBzcmMvU2Nyb2xsYmFyR3JvdXAuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpTY3JvbGxiYXJHcm91cDo6c2Nyb2xsYmFyQ3JlYXRlZCk6CisgICAg
ICAgIChXZWJLaXQ6OlNjcm9sbGJhckdyb3VwOjpzY3JvbGxiYXJEZXN0cm95ZWQpOgorICAgICAg
ICAoV2ViS2l0OjpTY3JvbGxiYXJHcm91cDo6c2Nyb2xsU2l6ZSk6CisgICAgICAgIChXZWJLaXQ6
OlNjcm9sbGJhckdyb3VwOjpzY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlNjcm9s
bGJhckdyb3VwOjpjb250ZW50c1NpemUpOgorICAgICAgICAqIHNyYy9TY3JvbGxiYXJHcm91cC5o
OgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFNjcm9sbGJhckdyb3VwKToKKyAgICAgICAg
KiBzcmMvV2ViUGx1Z2luU2Nyb2xsYmFySW1wbC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmNwcC4KKyAgICAgICAgKFdlYktpdCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdpblNjcm9sbGJhcjo6Y3JlYXRlRm9yUGx1Z2luKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luU2Nyb2xsYmFyOjpkZWZhdWx0VGhpY2tuZXNzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luU2Nyb2xsYmFySW1wbDo6V2ViUGx1Z2luU2Nyb2xs
YmFySW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdpblNjcm9sbGJhckltcGw6On5XZWJQ
bHVnaW5TY3JvbGxiYXJJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luU2Nyb2xsYmFy
SW1wbDo6c2V0U2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luU2Nyb2xs
YmFySW1wbDo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
bHVnaW5TY3JvbGxiYXJJbXBsOjpnZXRUaWNrbWFya3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
bHVnaW5TY3JvbGxiYXJJbXBsOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5TY3JvbGxiYXJJbXBsOjpzY3JvbGxiYXJTdHls
ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5TY3JvbGxiYXJJbXBsOjppc092
ZXJsYXkpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5TY3JvbGxiYXJJbXBsOjp2YWx1ZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdpblNjcm9sbGJhckltcGw6OnNldExvY2F0aW9uKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luU2Nyb2xsYmFySW1wbDo6c2V0VmFsdWUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQbHVnaW5TY3JvbGxiYXJJbXBsOjpzZXREb2N1bWVudFNpemUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5TY3JvbGxiYXJJbXBsOjpzY3JvbGwpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQbHVnaW5TY3JvbGxiYXJJbXBsOjpwYWludCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBsdWdpblNjcm9sbGJhckltcGw6OmhhbmRsZUlucHV0RXZlbnQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQbHVnaW5TY3JvbGxiYXJJbXBsOjpvbk1vdXNlRG93bik6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBsdWdpblNjcm9sbGJhckltcGw6Om9uTW91c2VVcCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBsdWdpblNjcm9sbGJhckltcGw6Om9uTW91c2VNb3ZlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGx1Z2luU2Nyb2xsYmFySW1wbDo6b25Nb3VzZUxlYXZlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGx1Z2luU2Nyb2xsYmFySW1wbDo6b25Nb3VzZVdoZWVsKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGx1Z2luU2Nyb2xsYmFySW1wbDo6b25LZXlEb3duKToKKyAgICAgICAgKiBzcmMvV2Vi
UGx1Z2luU2Nyb2xsYmFySW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlBsdWdpblNjcm9sbGJhckltcGwpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQbHVnaW5TY3JvbGxiYXJJbXBsOjpzY3JvbGxPZmZzZXQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQbHVnaW5TY3JvbGxiYXJJbXBsOjpzY3JvbGxiYXIpOgorICAgICAgICAqIHNy
Yy9XZWJTY3JvbGxiYXJJbXBsLmg6IFJlbW92ZWQuCisKIDIwMTItMDYtMjcgIFJvYmVydCBLcm9l
Z2VyICA8cmprcm9lZ2VAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gb3V0LW9m
LW9yZGVyIGFzc2VydCBpbiBXZWJWaWV3SW1wbCBzZXREZXZpY2VTY2FsZUZhY3RvcgpkaWZmIC0t
Z2l0IGEvU291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cGkgYi9Tb3VyY2UvUGxhdGZvcm0vUGxh
dGZvcm0uZ3lwaQppbmRleCA3NWFkOTcyZmJmODI3ODk1OTgwMTc0MmVhNDdlOWUzYjA3ODFhMzI1
Li43ZDU2NGY3NGJkNDE1MDA1ZDVlYmJlNjM2Y2NkODk4MzZiNzQwZWIzIDEwMDY0NAotLS0gYS9T
b3VyY2UvUGxhdGZvcm0vUGxhdGZvcm0uZ3lwaQorKysgYi9Tb3VyY2UvUGxhdGZvcm0vUGxhdGZv
cm0uZ3lwaQpAQCAtOTUsNiArOTUsNyBAQAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9X
ZWJSZWN0LmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJSZWZlcnJlclBvbGlj
eS5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViUmVuZGVyaW5nU3RhdHMuaCcs
CisgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYlNjcm9sbGJhci5oJywKICAgICAgICAg
ICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViU2Vzc2lvbkRlc2NyaXB0aW9uRGVzY3JpcHRvci5oJywK
ICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViU2l6ZS5oJywKICAgICAgICAgICAgICdj
aHJvbWl1bS9wdWJsaWMvV2ViU29ja2V0U3RyZWFtRXJyb3IuaCcsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlNjcm9sbGJhci5oIGIvU291cmNlL1BsYXRm
b3JtL2Nocm9taXVtL3B1YmxpYy9XZWJTY3JvbGxiYXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44Nzk1NTY1NTJk
MWEzMTZkNGQyZDU5N2Q2NmM1ZWIwNTBkOTllMGYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJTY3JvbGxiYXIuaApAQCAtMCwwICsxLDYwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlNjcm9sbGJhcl9oCisjZGVmaW5lIFdlYlNjcm9s
bGJhcl9oCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJTY3JvbGxiYXIgeworcHVi
bGljOgorICAgIGVudW0gT3JpZW50YXRpb24geworICAgICAgICBIb3Jpem9udGFsLAorICAgICAg
ICBWZXJ0aWNhbAorICAgIH07CisKKyAgICBlbnVtIFNjcm9sbERpcmVjdGlvbiB7CisgICAgICAg
IFNjcm9sbEJhY2t3YXJkLAorICAgICAgICBTY3JvbGxGb3J3YXJkCisgICAgfTsKKworICAgIGVu
dW0gU2Nyb2xsR3JhbnVsYXJpdHkgeworICAgICAgICBTY3JvbGxCeUxpbmUsCisgICAgICAgIFNj
cm9sbEJ5UGFnZSwKKyAgICAgICAgU2Nyb2xsQnlEb2N1bWVudCwKKyAgICAgICAgU2Nyb2xsQnlQ
aXhlbAorICAgIH07CisKKyAgICB2aXJ0dWFsIH5XZWJTY3JvbGxiYXIoKSB7IH0KKworICAgIC8v
IFJldHVybiB0cnVlIGlmIHRoaXMgaXMgYW4gb3ZlcmxheSBzY3JvbGxiYXIuCisgICAgdmlydHVh
bCBib29sIGlzT3ZlcmxheSgpIGNvbnN0ID0gMDsKKworICAgIC8vIEdldHMgdGhlIGN1cnJlbnQg
dmFsdWUgKGkuZS4gcG9zaXRpb24gaW5zaWRlIHRoZSByZWdpb24pLgorICAgIHZpcnR1YWwgaW50
IHZhbHVlKCkgY29uc3QgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAppbmRleCBjZmNhNzcxNGU1OWM0
MjkwNDMxNjRlN2YwOGUwM2NlZGM0NjAxZTcyLi5lYjFkNjY0OTBkYzI2ZjY1NzNmNjgzMmE1M2Y4
MzExNTAwOWFiMzUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJD
b3JlLmd5cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cApAQCAt
MjAxMCw2ICsyMDEwLDcgQEAKICAgICAgICAgJ3dlYmNvcmVfcmVuZGVyaW5nJywKICAgICAgICAg
IyBFeHBvcnRlZC4KICAgICAgICAgJ3dlYmNvcmVfYmluZGluZ3MnLAorICAgICAgICAnLi4vLi4v
UGxhdGZvcm0vUGxhdGZvcm0uZ3lwL1BsYXRmb3JtLmd5cDp3ZWJraXRfcGxhdGZvcm0nLAogICAg
ICAgICAnLi4vLi4vV1RGL1dURi5neXAvV1RGLmd5cDp3dGYnLAogICAgICAgICAnPChjaHJvbWl1
bV9zcmNfZGlyKS9idWlsZC90ZW1wX2d5cC9nb29nbGV1cmwuZ3lwOmdvb2dsZXVybCcsCiAgICAg
ICAgICc8KGNocm9taXVtX3NyY19kaXIpL3NraWEvc2tpYS5neXA6c2tpYScsCkBAIC0yMDE5LDYg
KzIwMjAsNyBAQAogICAgICAgXSwKICAgICAgICdleHBvcnRfZGVwZW5kZW50X3NldHRpbmdzJzog
WwogICAgICAgICAnd2ViY29yZV9iaW5kaW5ncycsCisgICAgICAgICcuLi8uLi9QbGF0Zm9ybS9Q
bGF0Zm9ybS5neXAvUGxhdGZvcm0uZ3lwOndlYmtpdF9wbGF0Zm9ybScsCiAgICAgICAgICcuLi8u
Li9XVEYvV1RGLmd5cC9XVEYuZ3lwOnd0ZicsCiAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIp
L2J1aWxkL3RlbXBfZ3lwL2dvb2dsZXVybC5neXA6Z29vZ2xldXJsJywKICAgICAgICAgJzwoY2hy
b21pdW1fc3JjX2Rpcikvc2tpYS9za2lhLmd5cDpza2lhJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cAppbmRleCBkNzVmNWI3MDk1ZmJkMWUxNzE0MTM2OWNiMWZhMGFkOWYyOTJiMjRhLi4xMmNm
OGE4ZGM4OWY0ZDc2OGI0ZmNmNWViNjQzY2FlNmQyZDg5NjZmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwCkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgICAgICAndmFyaWFibGVzJzogeyAn
ZW5hYmxlX3dleGl0X3RpbWVfZGVzdHJ1Y3RvcnMnOiAxLCB9LAogICAgICAgICAgICAgJ2RlcGVu
ZGVuY2llcyc6IFsKICAgICAgICAgICAgICAgICAnLi4vLi4vV2ViQ29yZS9XZWJDb3JlLmd5cC9X
ZWJDb3JlLmd5cDp3ZWJjb3JlJywKLSAgICAgICAgICAgICAgICAnLi4vLi4vUGxhdGZvcm0vUGxh
dGZvcm0uZ3lwL1BsYXRmb3JtLmd5cDp3ZWJraXRfcGxhdGZvcm0nLCAjIGFjdHVhbGx5IFdlYkNv
cmUgc2hvdWxkIGRlcGVuZCBvbiB0aGlzCisgICAgICAgICAgICAgICAgJy4uLy4uL1BsYXRmb3Jt
L1BsYXRmb3JtLmd5cC9QbGF0Zm9ybS5neXA6d2Via2l0X3BsYXRmb3JtJywKICAgICAgICAgICAg
ICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS9za2lhL3NraWEuZ3lwOnNraWEnLAogICAgICAgICAg
ICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3RoaXJkX3BhcnR5L2ljdS9pY3UuZ3lwOmljdXVj
JywKICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90aGlyZF9wYXJ0eS9ucGFw
aS9ucGFwaS5neXA6bnBhcGknLApAQCAtNzYsNiArNzYsNyBAQAogICAgICAgICAgICAgICAgICc8
KGNocm9taXVtX3NyY19kaXIpL3Y4L3Rvb2xzL2d5cC92OC5neXA6djgnLAogICAgICAgICAgICAg
XSwKICAgICAgICAgICAgICdleHBvcnRfZGVwZW5kZW50X3NldHRpbmdzJzogWworICAgICAgICAg
ICAgICAgICcuLi8uLi9QbGF0Zm9ybS9QbGF0Zm9ybS5neXAvUGxhdGZvcm0uZ3lwOndlYmtpdF9w
bGF0Zm9ybScsCiAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2Rpcikvc2tpYS9za2lh
Lmd5cDpza2lhJywKICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90aGlyZF9w
YXJ0eS9pY3UvaWN1Lmd5cDppY3V1YycsCiAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3Jj
X2RpcikvdGhpcmRfcGFydHkvbnBhcGkvbnBhcGkuZ3lwOm5wYXBpJywKQEAgLTIzOCw4ICsyMzks
NiBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU2NyZWVuSW5mby5oJywKICAgICAgICAg
ICAgICAgICAncHVibGljL1dlYlNjcmlwdENvbnRyb2xsZXIuaCcsCiAgICAgICAgICAgICAgICAg
J3B1YmxpYy9XZWJTY3JpcHRTb3VyY2UuaCcsCi0gICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJT
Y3JvbGxiYXIuaCcsCi0gICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTY3JvbGxiYXJDbGllbnQu
aCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuaCcsCiAg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTZWN1cml0eU9yaWdpbi5oJywKICAgICAgICAgICAg
ICAgICAncHVibGljL1dlYlNlY3VyaXR5UG9saWN5LmgnLApAQCAtNjE1LDYgKzYxNCw4IEBACiAg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJQbHVnaW5MaXN0QnVpbGRlckltcGwuaCcsCiAgICAgICAg
ICAgICAgICAgJ3NyYy9XZWJQbHVnaW5Mb2FkT2JzZXJ2ZXIuY3BwJywKICAgICAgICAgICAgICAg
ICAnc3JjL1dlYlBsdWdpbkxvYWRPYnNlcnZlci5oJywKKyAgICAgICAgICAgICAgICAnc3JjL1dl
YlBsdWdpblNjcm9sbGJhckltcGwuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYlBsdWdp
blNjcm9sbGJhckltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJQb3B1cE1lbnVJbXBs
LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJQb3B1cE1lbnVJbXBsLmgnLAogICAgICAg
ICAgICAgICAgICdzcmMvV2ViUmFuZ2UuY3BwJywKQEAgLTYyNCw4ICs2MjUsNiBAQAogICAgICAg
ICAgICAgICAgICdzcmMvV2ViU2NvcGVkVXNlckdlc3R1cmUuY3BwJywKICAgICAgICAgICAgICAg
ICAnc3JjL1dlYlNjcmlwdENvbnRyb2xsZXIuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dl
YlNjcm9sbGFibGVMYXllci5jcHAnLAotICAgICAgICAgICAgICAgICdzcmMvV2ViU2Nyb2xsYmFy
SW1wbC5jcHAnLAotICAgICAgICAgICAgICAgICdzcmMvV2ViU2Nyb2xsYmFySW1wbC5oJywKICAg
ICAgICAgICAgICAgICAnc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5jcHAnLAogICAgICAgICAg
ICAgICAgICdzcmMvV2ViU2VjdXJpdHlPcmlnaW4uY3BwJywKICAgICAgICAgICAgICAgICAnc3Jj
L1dlYlNlY3VyaXR5UG9saWN5LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJQbHVnaW5TY3JvbGxiYXIuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYlBsdWdpblNjcm9sbGJhci5oCmluZGV4IDMwNmYwOThhYTk2NmY0NTEwMTk4Zjk1
NDdlMzM2MjczMGY0ZWY5MmEuLjM2NGVlMGRmYmU4YzA2ZDM2ZjFhOWVmY2E0YjA4ZWM2Zjk0ZmM0
ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBsdWdpblNj
cm9sbGJhci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBsdWdpblNj
cm9sbGJhci5oCkBAIC0yNSwxMSArMjUsNTEgQEAKICNpZm5kZWYgV2ViUGx1Z2luU2Nyb2xsYmFy
X2gKICNkZWZpbmUgV2ViUGx1Z2luU2Nyb2xsYmFyX2gKIAotI2luY2x1ZGUgIldlYlNjcm9sbGJh
ci5oIgorI2luY2x1ZGUgPHB1YmxpYy9XZWJDYW52YXMuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2Vi
U2Nyb2xsYmFyLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi10eXBlZGVmIFdlYlNjcm9sbGJh
ciBXZWJQbHVnaW5TY3JvbGxiYXI7CitjbGFzcyBXZWJJbnB1dEV2ZW50OworY2xhc3MgV2ViUGx1
Z2luQ29udGFpbmVyOworY2xhc3MgV2ViUGx1Z2luU2Nyb2xsYmFyQ2xpZW50Oworc3RydWN0IFdl
YlJlY3Q7CisKK2NsYXNzIFdlYlBsdWdpblNjcm9sbGJhciA6IHB1YmxpYyBXZWJTY3JvbGxiYXIg
eworcHVibGljOgorICAgIC8vIENyZWF0ZXMgYSBXZWJQbHVnaW5TY3JvbGxiYXIgZm9yIHVzZSBi
eSBhIHBsdWdpbi4gVGhlIHBsdWdpbiBjb250YWluZXIgYW5kCisgICAgLy8gY2xpZW50IGFyZSBn
dWFyYW50ZWVkIHRvIG91dGxpdmUgdGhpcyBvYmplY3QuCisgICAgV0VCS0lUX0VYUE9SVCBzdGF0
aWMgV2ViUGx1Z2luU2Nyb2xsYmFyKiBjcmVhdGVGb3JQbHVnaW4oV2ViU2Nyb2xsYmFyOjpPcmll
bnRhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXZWJQbHVnaW5Db250YWluZXIqLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlBsdWdpblNjcm9sbGJh
ckNsaWVudCopOworCisgICAgdmlydHVhbCB+V2ViUGx1Z2luU2Nyb2xsYmFyKCkgeyB9CisKKyAg
ICAvLyBHZXRzIHRoZSB0aGlja25lc3Mgb2YgdGhlIHNjcm9sbGJhciBpbiBwaXhlbHMuCisgICAg
V0VCS0lUX0VYUE9SVCBzdGF0aWMgaW50IGRlZmF1bHRUaGlja25lc3MoKTsKKworICAgIC8vIFNl
dHMgdGhlIHJlY3RhbmdsZSBvZiB0aGUgc2Nyb2xsYmFyLgorICAgIHZpcnR1YWwgdm9pZCBzZXRM
b2NhdGlvbihjb25zdCBXZWJSZWN0JikgPSAwOworCisgICAgLy8gU2V0cyB0aGUgc2l6ZSBvZiB0
aGUgc2Nyb2xsYWJsZSByZWdpb24gaW4gcGl4ZWxzLCBpLmUuIGlmIGEgZG9jdW1lbnQgaXMKKyAg
ICAvLyA4MDB4MTAwMDAgcGl4ZWxzIGFuZCB0aGUgdmlld3BvcnQgaXMgMTAwMHgxMDAwIHBpeGVs
cywgdGhlbiBzZXRMb2NhdGlvbgorICAgIC8vIGZvciB0aGUgdmVydGljYWwgc2Nyb2xsYmFyIHdv
dWxkIGhhdmUgcGFzc2VkIGluIGEgcmVjdGFuZ2xlIGxpa2U6CisgICAgLy8gICAgICAgICAgICAo
ODAwIC0gZGVmYXVsdFRoaWNrbmVzcygpLCAwKSAoZGVmYXVsdFRoaWNrbmVzcygpIHggMTAwMDAp
CisgICAgLy8gYW5kIHNldERvY3VtZW50U2l6ZSgxMDAwMCkKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
RG9jdW1lbnRTaXplKGludCkgPSAwOworCisgICAgLy8gU2V0cyB0aGUgY3VycmVudCB2YWx1ZS4K
KyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUoaW50IHBvc2l0aW9uKSA9IDA7CisKKyAgICAvLyBT
Y3JvbGwgYmFjayBvciBmb3J3YXJkIHdpdGggdGhlIGdpdmVuIGdyYW51bGFyaXR5LgorICAgIHZp
cnR1YWwgdm9pZCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxv
YXQgbXVsdGlwbGllcikgPSAwOworCisgICAgLy8gUGFpbnQgdGhlIGdpdmVuIHJlY3RhbmdsZS4K
KyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoV2ViQ2FudmFzKiwgY29uc3QgV2ViUmVjdCYpID0gMDsK
KworICAgIC8vIFJldHVybnMgdHJ1ZSBpZmYgdGhlIGdpdmVuIGV2ZW50IHdhcyB1c2VkLgorICAg
IHZpcnR1YWwgYm9vbCBoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmKSA9IDA7
Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViUGx1Z2luU2Nyb2xsYmFyQ2xpZW50LmggYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQbHVnaW5TY3JvbGxiYXJDbGllbnQuaAppbmRleCAzNmY4
ZTQ5Yzg0OGE2MjA0NWMyYWIyNTUyZGVmNzE3ODZlNDgzZTZhLi5iYzVhMTI0ZjQzN2U1Yjk5YzUx
OWJhYWE0N2ZkOWFjYjYwNzg2NmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJQbHVnaW5TY3JvbGxiYXJDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJQbHVnaW5TY3JvbGxiYXJDbGllbnQuaApAQCAtMjUsMTIgKzI1LDE5
IEBACiAjaWZuZGVmIFdlYlBsdWdpblNjcm9sbGJhckNsaWVudF9oCiAjZGVmaW5lIFdlYlBsdWdp
blNjcm9sbGJhckNsaWVudF9oCiAKLSNpbmNsdWRlICJXZWJQbHVnaW5TY3JvbGxiYXIuaCIKLSNp
bmNsdWRlICJXZWJTY3JvbGxiYXJDbGllbnQuaCIKLQogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXR5
cGVkZWYgV2ViU2Nyb2xsYmFyQ2xpZW50IFdlYlBsdWdpblNjcm9sbGJhckNsaWVudDsKK2NsYXNz
IFdlYlBsdWdpblNjcm9sbGJhcjsKK3N0cnVjdCBXZWJSZWN0OwordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+IGNsYXNzIFdlYlZlY3RvcjsKKworY2xhc3MgV2ViUGx1Z2luU2Nyb2xsYmFyQ2xpZW50IHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFdlYlBsdWdpblNjcm9sbGJh
ciopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb3ZlcmxheUNoYW5nZWQoV2ViUGx1Z2luU2Nyb2xs
YmFyKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChXZWJQ
bHVnaW5TY3JvbGxiYXIqLCBjb25zdCBXZWJSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBn
ZXRUaWNrbWFya3MoV2ViUGx1Z2luU2Nyb2xsYmFyKiwgV2ViVmVjdG9yPFdlYlJlY3Q+KikgY29u
c3QgPSAwOworfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNjcm9sbGJhci5oIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViU2Nyb2xsYmFyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGVjYWM4NmEwMTM3NzY3YWE4ZjQ3NGM2MDZkMzYxYWVkMTFkZjliMWEuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViU2Nyb2xsYmFyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0g
KiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgV2ViU2Nyb2xsYmFyX2gKLSNkZWZpbmUgV2ViU2Nyb2xsYmFyX2gKLQotI2luY2x1ZGUg
InBsYXRmb3JtL1dlYkNhbnZhcy5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dlYkNvbW1vbi5oIgot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViSW5wdXRFdmVudDsKLWNsYXNzIFdlYlBs
dWdpbkNvbnRhaW5lcjsKLWNsYXNzIFdlYlNjcm9sbGJhckNsaWVudDsKLXN0cnVjdCBXZWJSZWN0
OwotCi1jbGFzcyBXZWJTY3JvbGxiYXIgewotcHVibGljOgotICAgIGVudW0gT3JpZW50YXRpb24g
ewotICAgICAgICBIb3Jpem9udGFsLAotICAgICAgICBWZXJ0aWNhbAotICAgIH07Ci0KLSAgICBl
bnVtIFNjcm9sbERpcmVjdGlvbiB7Ci0gICAgICAgIFNjcm9sbEJhY2t3YXJkLAotICAgICAgICBT
Y3JvbGxGb3J3YXJkCi0gICAgfTsKLQotICAgIGVudW0gU2Nyb2xsR3JhbnVsYXJpdHkgewotICAg
ICAgICBTY3JvbGxCeUxpbmUsCi0gICAgICAgIFNjcm9sbEJ5UGFnZSwKLSAgICAgICAgU2Nyb2xs
QnlEb2N1bWVudCwKLSAgICAgICAgU2Nyb2xsQnlQaXhlbAotICAgIH07Ci0KLSAgICAvLyBDcmVh
dGVzIGEgV2ViU2Nyb2xsYmFyIGZvciB1c2UgYnkgYSBwbHVnaW4uIFRoZSBwbHVnaW4gY29udGFp
bmVyIGFuZAotICAgIC8vIGNsaWVudCBhcmUgZ3VhcmFudGVlZCB0byBvdXRsaXZlIHRoaXMgb2Jq
ZWN0LgotICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIFdlYlNjcm9sbGJhciogY3JlYXRlRm9yUGx1
Z2luKE9yaWVudGF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdlYlBsdWdpbkNvbnRhaW5lciosCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViU2Nyb2xsYmFyQ2xpZW50Kik7
Ci0KLSAgICB2aXJ0dWFsIH5XZWJTY3JvbGxiYXIoKSB7fQotCi0gICAgLy8gR2V0cyB0aGUgdGhp
Y2tuZXNzIG9mIHRoZSBzY3JvbGxiYXIgaW4gcGl4ZWxzLgotICAgIFdFQktJVF9FWFBPUlQgc3Rh
dGljIGludCBkZWZhdWx0VGhpY2tuZXNzKCk7Ci0KLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGlz
IGlzIGFuIG92ZXJsYXkgc2Nyb2xsYmFyLgotICAgIHZpcnR1YWwgYm9vbCBpc092ZXJsYXkoKSBj
b25zdCA9IDA7Ci0KLSAgICAvLyBTZXRzIHRoZSByZWN0YW5nbGUgb2YgdGhlIHNjcm9sbGJhci4K
LSAgICB2aXJ0dWFsIHZvaWQgc2V0TG9jYXRpb24oY29uc3QgV2ViUmVjdCYpID0gMDsKLQotICAg
IC8vIEdldHMgdGhlIGN1cnJlbnQgdmFsdWUgKGkuZS4gcG9zaXRpb24gaW5zaWRlIHRoZSByZWdp
b24pLgotICAgIHZpcnR1YWwgaW50IHZhbHVlKCkgY29uc3QgPSAwOwotCi0gICAgLy8gU2V0cyB0
aGUgY3VycmVudCB2YWx1ZS4KLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUoaW50IHBvc2l0aW9u
KSA9IDA7Ci0KLSAgICAvLyBTZXRzIHRoZSBzaXplIG9mIHRoZSBzY3JvbGxhYmxlIHJlZ2lvbiBp
biBwaXhlbHMuICBpLmUuIGlmIGEgZG9jdW1lbnQgaXMKLSAgICAvLyA4MDB4MTAwMDAgcGl4ZWxz
IGFuZCB0aGUgdmlld3BvcnQgaXMgMTAwMHgxMDAwIHBpeGVscywgdGhlbiBzZXRMb2NhdGlvbgot
ICAgIC8vIGZvciB0aGUgdmVydGljYWwgc2Nyb2xsYmFyIHdvdWxkIGhhdmUgcGFzc2VkIGluIGEg
cmVjdGFuZ2xlIGxpa2U6Ci0gICAgLy8gICAgICAgICAgICAoODAwIC0gZGVmYXVsdFRoaWNrbmVz
cygpLCAwKSAoZGVmYXVsdFRoaWNrbmVzcygpIHggMTAwMDApCi0gICAgLy8gYW5kIHNldERvY3Vt
ZW50U2l6ZSgxMDAwMCkKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RG9jdW1lbnRTaXplKGludCBzaXpl
KSA9IDA7Ci0KLSAgICAvLyBTY3JvbGwgYmFjayBvciBmb3J3YXJkIHdpdGggdGhlIGdpdmVuIGdy
YW51bGFyaXR5LgotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3Jv
bGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikgPSAwOwotCi0gICAgLy8gUGFpbnQgdGhl
IGdpdmVuIHJlY3RhbmdsZS4KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoV2ViQ2FudmFzKiwgY29u
c3QgV2ViUmVjdCYpID0gMDsKLQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZmYgdGhlIGdpdmVuIGV2
ZW50IHdhcyB1c2VkLgotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdl
YklucHV0RXZlbnQmKSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTY3JvbGxiYXJD
bGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNjcm9sbGJhckNsaWVu
dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTliMjliNDczOTU4OWJjMmViZDM5
NmNmNGZiNWRmM2ZlYjc3NTE1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNjcm9sbGJhckNsaWVu
dC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgV2ViU2Nyb2xsYmFyQ2xp
ZW50X2gKLSNkZWZpbmUgV2ViU2Nyb2xsYmFyQ2xpZW50X2gKLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLWNsYXNzIFdlYlNjcm9sbGJhcjsKLXN0cnVjdCBXZWJSZWN0OwotdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+IGNsYXNzIFdlYlZlY3RvcjsKLQotY2xhc3MgV2ViU2Nyb2xsYmFyQ2xpZW50IHsKLXB1
YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFdlYlNjcm9sbGJhciopID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgb3ZlcmxheUNoYW5nZWQoV2ViU2Nyb2xsYmFyKikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChXZWJTY3JvbGxiYXIqLCBjb25z
dCBXZWJSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBnZXRUaWNrbWFya3MoV2ViU2Nyb2xs
YmFyKiwgV2ViVmVjdG9yPFdlYlJlY3Q+KikgY29uc3QgPSAwOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9B
c3NlcnRNYXRjaGluZ0VudW1zLmNwcAppbmRleCA0MDMwODhiYzkxZWUwN2I1Yjc0NmJhMDE5NmRh
Y2FiMjZkYWJkM2UyLi4wZjg0NDJhNzY5NzU3NDkzNzhjZGM3MGViYjMwOGFhYWI0NGYzMjJkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1z
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1z
LmNwcApAQCAtOTMsNyArOTMsNiBAQAogI2luY2x1ZGUgIldlYk1lZGlhUGxheWVyQ2xpZW50Lmgi
CiAjaW5jbHVkZSAiV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyLmgiCiAjaW5jbHVkZSAiV2ViUGFn
ZVZpc2liaWxpdHlTdGF0ZS5oIgotI2luY2x1ZGUgIldlYlNjcm9sbGJhci5oIgogI2luY2x1ZGUg
IldlYlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiV2ViU3BlZWNoUmVjb2duaXplckNsaWVudC5oIgog
I2luY2x1ZGUgIldlYlN0b3JhZ2VRdW90YUVycm9yLmgiCkBAIC0xMTEsNiArMTEwLDcgQEAKICNp
bmNsdWRlIDxwdWJsaWMvV2ViRmlsZVN5c3RlbS5oPgogI2luY2x1ZGUgPHB1YmxpYy9XZWJGaWx0
ZXJPcGVyYXRpb24uaD4KICNpbmNsdWRlIDxwdWJsaWMvV2ViUmVmZXJyZXJQb2xpY3kuaD4KKyNp
bmNsdWRlIDxwdWJsaWMvV2ViU2Nyb2xsYmFyLmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYlVSTFJl
c3BvbnNlLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdJbXBsLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9T
Y3JvbGxiYXJHcm91cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9TY3JvbGxiYXJH
cm91cC5jcHAKaW5kZXggMTlmZGJhZGU0MDA0NWIxZTVlOGM0MTFjZmIzYjQ4YzM4YzE5NGEzNy4u
MGU2NzZjYjVmNWI2Y2IzZTBiMTdhMjQwNjVhMWRhMjVhZDc2ZjdkNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU2Nyb2xsYmFyR3JvdXAuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1Njcm9sbGJhckdyb3VwLmNwcApAQCAtMjksOCArMjksOCBAQAog
I2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgogI2luY2x1ZGUg
IlNjcm9sbGJhclRoZW1lLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViUmVjdC5oIgotI2luY2x1
ZGUgIldlYlNjcm9sbGJhckltcGwuaCIKKyNpbmNsdWRlICJXZWJQbHVnaW5TY3JvbGxiYXJJbXBs
LmgiCisjaW5jbHVkZSA8cHVibGljL1dlYlJlY3QuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKQEAgLTUwLDcgKzUwLDcgQEAgU2Nyb2xsYmFyR3JvdXA6On5TY3JvbGxiYXJHcm91cCgp
CiAgICAgQVNTRVJUKCFtX3ZlcnRpY2FsU2Nyb2xsYmFyKTsKIH0KIAotdm9pZCBTY3JvbGxiYXJH
cm91cDo6c2Nyb2xsYmFyQ3JlYXRlZChXZWJTY3JvbGxiYXJJbXBsKiBzY3JvbGxiYXIpCit2b2lk
IFNjcm9sbGJhckdyb3VwOjpzY3JvbGxiYXJDcmVhdGVkKFdlYlBsdWdpblNjcm9sbGJhckltcGwq
IHNjcm9sbGJhcikKIHsKICAgICBib29sIGhhZFNjcm9sbGJhcnMgPSBtX2hvcml6b250YWxTY3Jv
bGxiYXIgfHwgbV92ZXJ0aWNhbFNjcm9sbGJhcjsKICAgICBpZiAoc2Nyb2xsYmFyLT5zY3JvbGxi
YXIoKS0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7CkBAIC02OSw3ICs2
OSw3IEBAIHZvaWQgU2Nyb2xsYmFyR3JvdXA6OnNjcm9sbGJhckNyZWF0ZWQoV2ViU2Nyb2xsYmFy
SW1wbCogc2Nyb2xsYmFyKQogICAgIH0KIH0KIAotdm9pZCBTY3JvbGxiYXJHcm91cDo6c2Nyb2xs
YmFyRGVzdHJveWVkKFdlYlNjcm9sbGJhckltcGwqIHNjcm9sbGJhcikKK3ZvaWQgU2Nyb2xsYmFy
R3JvdXA6OnNjcm9sbGJhckRlc3Ryb3llZChXZWJQbHVnaW5TY3JvbGxiYXJJbXBsKiBzY3JvbGxi
YXIpCiB7CiAgICAgaWYgKHNjcm9sbGJhciA9PSBtX2hvcml6b250YWxTY3JvbGxiYXIpIHsKICAg
ICAgICAgd2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyLT5zY3JvbGxiYXIo
KSk7CkBAIC05Myw3ICs5Myw3IEBAIHZvaWQgU2Nyb2xsYmFyR3JvdXA6OnNldExhc3RNb3VzZVBv
c2l0aW9uKGNvbnN0IEludFBvaW50JiBwb2ludCkKIAogaW50IFNjcm9sbGJhckdyb3VwOjpzY3Jv
bGxTaXplKFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdAog
ewotICAgIFdlYlNjcm9sbGJhckltcGwqIHdlYlNjcm9sbGJhciA9IG9yaWVudGF0aW9uID09IEhv
cml6b250YWxTY3JvbGxiYXIgPyBtX2hvcml6b250YWxTY3JvbGxiYXIgOiBtX3ZlcnRpY2FsU2Ny
b2xsYmFyOworICAgIFdlYlBsdWdpblNjcm9sbGJhckltcGwqIHdlYlNjcm9sbGJhciA9IG9yaWVu
dGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBtX2hvcml6b250YWxTY3JvbGxiYXIgOiBt
X3ZlcnRpY2FsU2Nyb2xsYmFyOwogICAgIGlmICghd2ViU2Nyb2xsYmFyKQogICAgICAgICByZXR1
cm4gMDsKICAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9IHdlYlNjcm9sbGJhci0+c2Nyb2xsYmFy
KCk7CkBAIC0xMDIsNyArMTAyLDcgQEAgaW50IFNjcm9sbGJhckdyb3VwOjpzY3JvbGxTaXplKFdl
YkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdAogCiBpbnQgU2Ny
b2xsYmFyR3JvdXA6OnNjcm9sbFBvc2l0aW9uKFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAog
ewotICAgIFdlYlNjcm9sbGJhckltcGwqIHdlYlNjcm9sbGJhciA9IHNjcm9sbGJhci0+b3JpZW50
YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gbV9ob3Jpem9udGFsU2Nyb2xsYmFyIDog
bV92ZXJ0aWNhbFNjcm9sbGJhcjsKKyAgICBXZWJQbHVnaW5TY3JvbGxiYXJJbXBsKiB3ZWJTY3Jv
bGxiYXIgPSBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/
IG1faG9yaXpvbnRhbFNjcm9sbGJhciA6IG1fdmVydGljYWxTY3JvbGxiYXI7CiAgICAgaWYgKCF3
ZWJTY3JvbGxiYXIpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiB3ZWJTY3JvbGxiYXIt
PnNjcm9sbE9mZnNldCgpOwpAQCAtMjI1LDE0ICsyMjUsMTQgQEAgSW50U2l6ZSBTY3JvbGxiYXJH
cm91cDo6Y29udGVudHNTaXplKCkgY29uc3QKICAgICBlbHNlIGlmIChtX3ZlcnRpY2FsU2Nyb2xs
YmFyKSB7CiAgICAgICAgIHNpemUuc2V0V2lkdGgobV92ZXJ0aWNhbFNjcm9sbGJhci0+c2Nyb2xs
YmFyKCktPngoKSk7CiAgICAgICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zY3JvbGxiYXIo
KS0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpCi0gICAgICAgICAgICBzaXplLmV4cGFuZChXZWJTY3Jv
bGxiYXI6OmRlZmF1bHRUaGlja25lc3MoKSwgMCk7CisgICAgICAgICAgICBzaXplLmV4cGFuZChX
ZWJQbHVnaW5TY3JvbGxiYXI6OmRlZmF1bHRUaGlja25lc3MoKSwgMCk7CiAgICAgfQogICAgIGlm
IChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQogICAgICAgICBzaXplLnNldEhlaWdodChtX3ZlcnRpY2Fs
U2Nyb2xsYmFyLT5zY3JvbGxiYXIoKS0+dG90YWxTaXplKCkpOwogICAgIGVsc2UgaWYgKG1faG9y
aXpvbnRhbFNjcm9sbGJhcikgewogICAgICAgICBzaXplLnNldEhlaWdodChtX2hvcml6b250YWxT
Y3JvbGxiYXItPnNjcm9sbGJhcigpLT55KCkpOwogICAgICAgICBpZiAobV9ob3Jpem9udGFsU2Ny
b2xsYmFyLT5zY3JvbGxiYXIoKS0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpCi0gICAgICAgICAgICBz
aXplLmV4cGFuZCgwLCBXZWJTY3JvbGxiYXI6OmRlZmF1bHRUaGlja25lc3MoKSk7CisgICAgICAg
ICAgICBzaXplLmV4cGFuZCgwLCBXZWJQbHVnaW5TY3JvbGxiYXI6OmRlZmF1bHRUaGlja25lc3Mo
KSk7CiAgICAgfQogICAgIHJldHVybiBzaXplOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvU2Nyb2xsYmFyR3JvdXAuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1Njcm9sbGJhckdyb3VwLmgKaW5kZXggYWViNDQwNTJmNzIxMmYwMTA3MjdhODBjODE5MmMw
NDVkYzQ1ZDg2ZS4uYTA0NzljMjA2MjdkN2JmMTQ1MTQ0ODkxOTJkNzNkNTE2ODM4ZGZiNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU2Nyb2xsYmFyR3JvdXAuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9TY3JvbGxiYXJHcm91cC5oCkBAIC0zNiwxNSAr
MzYsMTUgQEAgY2xhc3MgRnJhbWVWaWV3OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3Mg
V2ViU2Nyb2xsYmFySW1wbDsKK2NsYXNzIFdlYlBsdWdpblNjcm9sbGJhckltcGw7CiAKIGNsYXNz
IFNjcm9sbGJhckdyb3VwIDogcHVibGljIFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhIHsKIHB1Ymxp
YzoKICAgICBTY3JvbGxiYXJHcm91cChXZWJDb3JlOjpGcmFtZVZpZXcqLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiBmcmFtZVJlY3QpOwogICAgIH5TY3JvbGxiYXJHcm91cCgpOwogCi0gICAgdm9p
ZCBzY3JvbGxiYXJDcmVhdGVkKFdlYlNjcm9sbGJhckltcGwqKTsKLSAgICB2b2lkIHNjcm9sbGJh
ckRlc3Ryb3llZChXZWJTY3JvbGxiYXJJbXBsKik7CisgICAgdm9pZCBzY3JvbGxiYXJDcmVhdGVk
KFdlYlBsdWdpblNjcm9sbGJhckltcGwqKTsKKyAgICB2b2lkIHNjcm9sbGJhckRlc3Ryb3llZChX
ZWJQbHVnaW5TY3JvbGxiYXJJbXBsKik7CiAgICAgdm9pZCBzZXRMYXN0TW91c2VQb3NpdGlvbihj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwogICAgIHZvaWQgc2V0RnJhbWVSZWN0KGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKTsKIApAQCAtNzksOCArNzksOCBAQCBwcml2YXRlOgogICAgIFdlYkNv
cmU6OkZyYW1lVmlldyogbV9mcmFtZVZpZXc7CiAgICAgV2ViQ29yZTo6SW50UG9pbnQgbV9sYXN0
TW91c2VQb3NpdGlvbjsKICAgICBXZWJDb3JlOjpJbnRSZWN0IG1fZnJhbWVSZWN0OwotICAgIFdl
YlNjcm9sbGJhckltcGwqIG1faG9yaXpvbnRhbFNjcm9sbGJhcjsKLSAgICBXZWJTY3JvbGxiYXJJ
bXBsKiBtX3ZlcnRpY2FsU2Nyb2xsYmFyOworICAgIFdlYlBsdWdpblNjcm9sbGJhckltcGwqIG1f
aG9yaXpvbnRhbFNjcm9sbGJhcjsKKyAgICBXZWJQbHVnaW5TY3JvbGxiYXJJbXBsKiBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5TY3JvbGxiYXJJbXBsLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBsdWdpblNjcm9sbGJhckltcGwuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmIwZjYzYTdlNGEwZDYxMzE0YmE1MmI4ZjI2OGE0ZTY0NDkzNWQ4MGEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5TY3JvbGxiYXJJ
bXBsLmNwcApAQCAtMCwwICsxLDI4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYlBsdWdpblNjcm9sbGJhckltcGwuaCIKKworI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIktleWJvYXJkQ29kZXMuaCIKKyNpbmNsdWRlICJT
Y3JvbGxBbmltYXRvci5oIgorI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCisjaW5jbHVkZSAiU2Ny
b2xsYmFyLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyR3JvdXAuaCIKKyNpbmNsdWRlICJTY3JvbGxi
YXJUaGVtZS5oIgorI2luY2x1ZGUgIldlYklucHV0RXZlbnQuaCIKKyNpbmNsdWRlICJXZWJJbnB1
dEV2ZW50Q29udmVyc2lvbi5oIgorI2luY2x1ZGUgIldlYlBsdWdpbkNvbnRhaW5lckltcGwuaCIK
KyNpbmNsdWRlICJXZWJQbHVnaW5TY3JvbGxiYXJDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJWaWV3
SW1wbC5oIgorI2luY2x1ZGUgInBhaW50aW5nL0dyYXBoaWNzQ29udGV4dEJ1aWxkZXIuaCIKKyNp
bmNsdWRlIDxwdWJsaWMvV2ViQ2FudmFzLmg+CisjaW5jbHVkZSA8cHVibGljL1dlYlJlY3QuaD4K
KyNpbmNsdWRlIDxwdWJsaWMvV2ViVmVjdG9yLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7Cit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYlBsdWdp
blNjcm9sbGJhciogV2ViUGx1Z2luU2Nyb2xsYmFyOjpjcmVhdGVGb3JQbHVnaW4oT3JpZW50YXRp
b24gb3JpZW50YXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdlYlBsdWdpbkNvbnRhaW5lciogcGx1Z2luQ29udGFpbmVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJQ
bHVnaW5TY3JvbGxiYXJDbGllbnQqIGNsaWVudCkKK3sKKyAgICBXZWJQbHVnaW5Db250YWluZXJJ
bXBsKiBwbHVnaW4gPSBzdGF0aWNfY2FzdDxXZWJQbHVnaW5Db250YWluZXJJbXBsKj4ocGx1Z2lu
Q29udGFpbmVyKTsKKyAgICByZXR1cm4gbmV3IFdlYlBsdWdpblNjcm9sbGJhckltcGwob3JpZW50
YXRpb24sIHBsdWdpbi0+c2Nyb2xsYmFyR3JvdXAoKSwgY2xpZW50KTsKK30KKworaW50IFdlYlBs
dWdpblNjcm9sbGJhcjo6ZGVmYXVsdFRoaWNrbmVzcygpCit7CisgICAgcmV0dXJuIFNjcm9sbGJh
clRoZW1lOjp0aGVtZSgpLT5zY3JvbGxiYXJUaGlja25lc3MoKTsKK30KKworV2ViUGx1Z2luU2Ny
b2xsYmFySW1wbDo6V2ViUGx1Z2luU2Nyb2xsYmFySW1wbChPcmllbnRhdGlvbiBvcmllbnRhdGlv
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Nyb2xsYmFyR3JvdXAqIGdy
b3VwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJQbHVnaW5TY3JvbGxi
YXJDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fZ3JvdXAoZ3JvdXApCisgICAgLCBtX2NsaWVudChj
bGllbnQpCisgICAgLCBtX3Njcm9sbE9mZnNldCgwKQoreworICAgIG1fc2Nyb2xsYmFyID0gU2Ny
b2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIoCisgICAgICAgIHN0YXRpY19jYXN0PFNjcm9s
bGFibGVBcmVhKj4obV9ncm91cCksCisgICAgICAgIHN0YXRpY19jYXN0PFNjcm9sbGJhck9yaWVu
dGF0aW9uPihvcmllbnRhdGlvbiksCisgICAgICAgIFJlZ3VsYXJTY3JvbGxiYXIpOworICAgIG1f
Z3JvdXAtPnNjcm9sbGJhckNyZWF0ZWQodGhpcyk7Cit9CisKK1dlYlBsdWdpblNjcm9sbGJhcklt
cGw6On5XZWJQbHVnaW5TY3JvbGxiYXJJbXBsKCkKK3sKKyAgICBtX2dyb3VwLT5zY3JvbGxiYXJE
ZXN0cm95ZWQodGhpcyk7Cit9CisKK3ZvaWQgV2ViUGx1Z2luU2Nyb2xsYmFySW1wbDo6c2V0U2Ny
b2xsT2Zmc2V0KGludCBzY3JvbGxPZmZzZXQpCit7CisgICAgbV9zY3JvbGxPZmZzZXQgPSBzY3Jv
bGxPZmZzZXQ7CisgICAgbV9jbGllbnQtPnZhbHVlQ2hhbmdlZCh0aGlzKTsKK30KKwordm9pZCBX
ZWJQbHVnaW5TY3JvbGxiYXJJbXBsOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChjb25zdCBJbnRS
ZWN0JiByZWN0KQoreworICAgIFdlYlJlY3Qgd2VicmVjdChyZWN0KTsKKyAgICB3ZWJyZWN0Lngg
Kz0gbV9zY3JvbGxiYXItPngoKTsKKyAgICB3ZWJyZWN0LnkgKz0gbV9zY3JvbGxiYXItPnkoKTsK
KyAgICBtX2NsaWVudC0+aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QodGhpcywgd2VicmVjdCk7Cit9
CisKK3ZvaWQgV2ViUGx1Z2luU2Nyb2xsYmFySW1wbDo6Z2V0VGlja21hcmtzKFZlY3RvcjxJbnRS
ZWN0PiYgdGlja21hcmtzKSBjb25zdAoreworICAgIFdlYlZlY3RvcjxXZWJSZWN0PiB0aWNrczsK
KyAgICBtX2NsaWVudC0+Z2V0VGlja21hcmtzKGNvbnN0X2Nhc3Q8V2ViUGx1Z2luU2Nyb2xsYmFy
SW1wbCo+KHRoaXMpLCAmdGlja3MpOworICAgIHRpY2ttYXJrcy5yZXNpemUodGlja3Muc2l6ZSgp
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpY2tzLnNpemUoKTsgKytpKQorICAgICAg
ICB0aWNrbWFya3NbaV0gPSB0aWNrc1tpXTsKK30KKworSW50UG9pbnQgV2ViUGx1Z2luU2Nyb2xs
YmFySW1wbDo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IEludFBv
aW50JiBwYXJlbnRQb2ludCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCBvZmZzZXQocGFyZW50UG9p
bnQueCgpIC0gbV9zY3JvbGxiYXItPngoKSwgcGFyZW50UG9pbnQueSgpIC0gbV9zY3JvbGxiYXIt
PnkoKSk7CisgICAgcmV0dXJuIG1fc2Nyb2xsYmFyLT5XaWRnZXQ6OmNvbnZlcnRGcm9tQ29udGFp
bmluZ1ZpZXcob2Zmc2V0KTsKK30KKwordm9pZCBXZWJQbHVnaW5TY3JvbGxiYXJJbXBsOjpzY3Jv
bGxiYXJTdHlsZUNoYW5nZWQoKQoreworICAgIG1fY2xpZW50LT5vdmVybGF5Q2hhbmdlZCh0aGlz
KTsKK30KKworYm9vbCBXZWJQbHVnaW5TY3JvbGxiYXJJbXBsOjppc092ZXJsYXkoKSBjb25zdAor
eworICAgIHJldHVybiBtX3Njcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCk7Cit9CisKK2lu
dCBXZWJQbHVnaW5TY3JvbGxiYXJJbXBsOjp2YWx1ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
c2Nyb2xsT2Zmc2V0OworfQorCit2b2lkIFdlYlBsdWdpblNjcm9sbGJhckltcGw6OnNldExvY2F0
aW9uKGNvbnN0IFdlYlJlY3QmIHJlY3QpCit7CisgICAgSW50UmVjdCBvbGRSZWN0ID0gbV9zY3Jv
bGxiYXItPmZyYW1lUmVjdCgpOworICAgIG1fc2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3QocmVjdCk7
CisgICAgaWYgKFdlYlJlY3Qob2xkUmVjdCkgIT0gcmVjdCkKKyAgICAgIG1fc2Nyb2xsYmFyLT5p
bnZhbGlkYXRlKCk7CisKKyAgICBpbnQgbGVuZ3RoID0gbV9zY3JvbGxiYXItPm9yaWVudGF0aW9u
KCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IG1fc2Nyb2xsYmFyLT53aWR0aCgpIDogbV9zY3Jv
bGxiYXItPmhlaWdodCgpOworICAgIGludCBwYWdlU3RlcCA9IG1heChtYXgoc3RhdGljX2Nhc3Q8
aW50PihzdGF0aWNfY2FzdDxmbG9hdD4obGVuZ3RoKSAqIFNjcm9sbGJhcjo6bWluRnJhY3Rpb25U
b1N0ZXBXaGVuUGFnaW5nKCkpLCBsZW5ndGggLSBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVu
UGFnZXMoKSksIDEpOworICAgIG1fc2Nyb2xsYmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVs
c1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKKyAgICBtX3Njcm9sbGJhci0+c2V0RW5hYmxlZCht
X3Njcm9sbGJhci0+dG90YWxTaXplKCkgPiBsZW5ndGgpOworICAgIG1fc2Nyb2xsYmFyLT5zZXRQ
cm9wb3J0aW9uKGxlbmd0aCwgbV9zY3JvbGxiYXItPnRvdGFsU2l6ZSgpKTsKK30KKwordm9pZCBX
ZWJQbHVnaW5TY3JvbGxiYXJJbXBsOjpzZXRWYWx1ZShpbnQgcG9zaXRpb24pCit7CisgICAgbV9n
cm91cC0+c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKG1fc2Nyb2xsYmFyLT5vcmllbnRh
dGlvbigpLCBzdGF0aWNfY2FzdDxmbG9hdD4ocG9zaXRpb24pKTsKK30KKwordm9pZCBXZWJQbHVn
aW5TY3JvbGxiYXJJbXBsOjpzZXREb2N1bWVudFNpemUoaW50IHNpemUpCit7CisgICAgaW50IGxl
bmd0aCA9IG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIg
PyBtX3Njcm9sbGJhci0+d2lkdGgoKSA6IG1fc2Nyb2xsYmFyLT5oZWlnaHQoKTsKKyAgICBtX3Nj
cm9sbGJhci0+c2V0RW5hYmxlZChzaXplID4gbGVuZ3RoKTsKKyAgICBtX3Njcm9sbGJhci0+c2V0
UHJvcG9ydGlvbihsZW5ndGgsIHNpemUpOworfQorCit2b2lkIFdlYlBsdWdpblNjcm9sbGJhcklt
cGw6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBn
cmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikKK3sKKyAgICBXZWJDb3JlOjpTY3JvbGxEaXJl
Y3Rpb24gZGlyOworICAgIGJvb2wgaG9yaXpvbnRhbCA9IG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlv
bigpID09IEhvcml6b250YWxTY3JvbGxiYXI7CisgICAgaWYgKGRpcmVjdGlvbiA9PSBTY3JvbGxG
b3J3YXJkKQorICAgICAgICBkaXIgPSBob3Jpem9udGFsID8gU2Nyb2xsUmlnaHQgOiBTY3JvbGxE
b3duOworICAgIGVsc2UKKyAgICAgICAgZGlyID0gaG9yaXpvbnRhbCA/IFNjcm9sbExlZnQgOiBT
Y3JvbGxVcDsKKworICAgIG1fZ3JvdXAtPnNjcm9sbChkaXIsIHN0YXRpY19jYXN0PFdlYkNvcmU6
OlNjcm9sbEdyYW51bGFyaXR5PihncmFudWxhcml0eSksIG11bHRpcGxpZXIpOworfQorCit2b2lk
IFdlYlBsdWdpblNjcm9sbGJhckltcGw6OnBhaW50KFdlYkNhbnZhcyogY2FudmFzLCBjb25zdCBX
ZWJSZWN0JiByZWN0KQoreworICAgIG1fc2Nyb2xsYmFyLT5wYWludCgmR3JhcGhpY3NDb250ZXh0
QnVpbGRlcihjYW52YXMpLmNvbnRleHQoKSwgcmVjdCk7Cit9CisKK2Jvb2wgV2ViUGx1Z2luU2Ny
b2xsYmFySW1wbDo6aGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCkK
K3sKKyAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHsKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6Ok1v
dXNlRG93bjoKKyAgICAgICAgcmV0dXJuIG9uTW91c2VEb3duKGV2ZW50KTsKKyAgICBjYXNlIFdl
YklucHV0RXZlbnQ6Ok1vdXNlVXA6CisgICAgICAgIHJldHVybiBvbk1vdXNlVXAoZXZlbnQpOwor
ICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6TW91c2VNb3ZlOgorICAgICAgICByZXR1cm4gb25Nb3Vz
ZU1vdmUoZXZlbnQpOworICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6TW91c2VMZWF2ZToKKyAgICAg
ICAgcmV0dXJuIG9uTW91c2VMZWF2ZShldmVudCk7CisgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpN
b3VzZVdoZWVsOgorICAgICAgICByZXR1cm4gb25Nb3VzZVdoZWVsKGV2ZW50KTsKKyAgICBjYXNl
IFdlYklucHV0RXZlbnQ6OktleURvd246CisgICAgICAgIHJldHVybiBvbktleURvd24oZXZlbnQp
OworICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6VW5kZWZpbmVkOgorICAgIGNhc2UgV2ViSW5wdXRF
dmVudDo6TW91c2VFbnRlcjoKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6OlJhd0tleURvd246Cisg
ICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpLZXlVcDoKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6OkNo
YXI6CisgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpUb3VjaFN0YXJ0OgorICAgIGNhc2UgV2ViSW5w
dXRFdmVudDo6VG91Y2hNb3ZlOgorICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6VG91Y2hFbmQ6Cisg
ICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpUb3VjaENhbmNlbDoKKyAgICBkZWZhdWx0OgorICAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBXZWJQbHVnaW5T
Y3JvbGxiYXJJbXBsOjpvbk1vdXNlRG93bihjb25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCkKK3sK
KyAgICBXZWJNb3VzZUV2ZW50IG1vdXNlZG93biA9ICpzdGF0aWNfY2FzdDxjb25zdCBXZWJNb3Vz
ZUV2ZW50Kj4oJmV2ZW50KTsKKyAgICBpZiAoIW1fc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS5jb250
YWlucyhtb3VzZWRvd24ueCwgbW91c2Vkb3duLnkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBtb3VzZWRvd24ueCAtPSBtX3Njcm9sbGJhci0+eCgpOworICAgIG1vdXNlZG93bi55IC09
IG1fc2Nyb2xsYmFyLT55KCk7CisgICAgbV9zY3JvbGxiYXItPm1vdXNlRG93bihQbGF0Zm9ybU1v
dXNlRXZlbnRCdWlsZGVyKG1fc2Nyb2xsYmFyLmdldCgpLCBtb3VzZWRvd24pKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJQbHVnaW5TY3JvbGxiYXJJbXBsOjpvbk1vdXNlVXAoY29u
c3QgV2ViSW5wdXRFdmVudCYgZXZlbnQpCit7CisgICAgV2ViTW91c2VFdmVudCBtb3VzZXVwID0g
KnN0YXRpY19jYXN0PGNvbnN0IFdlYk1vdXNlRXZlbnQqPigmZXZlbnQpOworICAgIGlmIChtX3Nj
cm9sbGJhci0+cHJlc3NlZFBhcnQoKSA9PSBOb1BhcnQpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHJldHVybiBtX3Njcm9sbGJhci0+bW91c2VVcChQbGF0Zm9ybU1vdXNlRXZlbnRCdWls
ZGVyKG1fc2Nyb2xsYmFyLmdldCgpLCBtb3VzZXVwKSk7Cit9CisKK2Jvb2wgV2ViUGx1Z2luU2Ny
b2xsYmFySW1wbDo6b25Nb3VzZU1vdmUoY29uc3QgV2ViSW5wdXRFdmVudCYgZXZlbnQpCit7Cisg
ICAgV2ViTW91c2VFdmVudCBtb3VzZW1vdmUgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgV2ViTW91c2VF
dmVudCo+KCZldmVudCk7CisgICAgaWYgKG1fc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS5jb250YWlu
cyhtb3VzZW1vdmUueCwgbW91c2Vtb3ZlLnkpCisgICAgICAgIHx8IG1fc2Nyb2xsYmFyLT5wcmVz
c2VkUGFydCgpICE9IE5vUGFydCkgeworICAgICAgICBtb3VzZW1vdmUueCAtPSBtX3Njcm9sbGJh
ci0+eCgpOworICAgICAgICBtb3VzZW1vdmUueSAtPSBtX3Njcm9sbGJhci0+eSgpOworICAgICAg
ICByZXR1cm4gbV9zY3JvbGxiYXItPm1vdXNlTW92ZWQoUGxhdGZvcm1Nb3VzZUV2ZW50QnVpbGRl
cihtX3Njcm9sbGJhci5nZXQoKSwgbW91c2Vtb3ZlKSk7CisgICAgfQorCisgICAgaWYgKG1fc2Ny
b2xsYmFyLT5ob3ZlcmVkUGFydCgpICE9IE5vUGFydCAmJiAhbV9zY3JvbGxiYXItPmlzT3Zlcmxh
eVNjcm9sbGJhcigpKQorICAgICAgICBtX3Njcm9sbGJhci0+bW91c2VFeGl0ZWQoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgV2ViUGx1Z2luU2Nyb2xsYmFySW1wbDo6b25Nb3VzZUxl
YXZlKGNvbnN0IFdlYklucHV0RXZlbnQmIGV2ZW50KQoreworICAgIGlmIChtX3Njcm9sbGJhci0+
aG92ZXJlZFBhcnQoKSAhPSBOb1BhcnQpCisgICAgICAgIG1fc2Nyb2xsYmFyLT5tb3VzZUV4aXRl
ZCgpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFdlYlBsdWdpblNjcm9sbGJhcklt
cGw6Om9uTW91c2VXaGVlbChjb25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCkKK3sKKyAgICBXZWJN
b3VzZVdoZWVsRXZlbnQgbW91c2V3aGVlbCA9ICpzdGF0aWNfY2FzdDxjb25zdCBXZWJNb3VzZVdo
ZWVsRXZlbnQqPigmZXZlbnQpOworICAgIFBsYXRmb3JtV2hlZWxFdmVudEJ1aWxkZXIgcGxhdGZv
cm1FdmVudChtX3Njcm9sbGJhci5nZXQoKSwgbW91c2V3aGVlbCk7CisgICAgcmV0dXJuIG1fZ3Jv
dXAtPmhhbmRsZVdoZWVsRXZlbnQocGxhdGZvcm1FdmVudCk7Cit9CisKK2Jvb2wgV2ViUGx1Z2lu
U2Nyb2xsYmFySW1wbDo6b25LZXlEb3duKGNvbnN0IFdlYklucHV0RXZlbnQmIGV2ZW50KQorewor
ICAgIFdlYktleWJvYXJkRXZlbnQga2V5Ym9hcmQgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgV2ViS2V5
Ym9hcmRFdmVudCo+KCZldmVudCk7CisgICAgaW50IGtleUNvZGU7CisgICAgLy8gV2UgaGF2ZSB0
byBkdXBsaWNhdGUgdGhpcyBsb2dpYyBmcm9tIFdlYlZpZXdJbXBsIGJlY2F1c2UgdGhlcmUgaXQg
dXNlcworICAgIC8vIENoYXIgYW5kIFJhd0tleURvd24gZXZlbnRzLCB3aGljaCBkb24ndCBleGlz
dCBhdCB0aGlzIHBvaW50LgorICAgIGlmIChrZXlib2FyZC53aW5kb3dzS2V5Q29kZSA9PSBWS0VZ
X1NQQUNFKQorICAgICAgICBrZXlDb2RlID0gKChrZXlib2FyZC5tb2RpZmllcnMgJiBXZWJJbnB1
dEV2ZW50OjpTaGlmdEtleSkgPyBWS0VZX1BSSU9SIDogVktFWV9ORVhUKTsKKyAgICBlbHNlIHsK
KyAgICAgICAgaWYgKGtleWJvYXJkLm1vZGlmaWVycyA9PSBXZWJJbnB1dEV2ZW50OjpDb250cm9s
S2V5KSB7CisgICAgICAgICAgICAvLyBNYXRjaCBGRiBiZWhhdmlvciBpbiB0aGUgc2Vuc2UgdGhh
dCBDdHJsK2hvbWUvZW5kIGFyZSB0aGUgb25seSBDdHJsCisgICAgICAgICAgICAvLyBrZXkgY29t
YmluYXRpb25zIHdoaWNoIGFmZmVjdCBzY3JvbGxpbmcuIFNhZmFyaSBpcyBidWdneSBpbiB0aGUK
KyAgICAgICAgICAgIC8vIHNlbnNlIHRoYXQgaXQgc2Nyb2xscyB0aGUgcGFnZSBmb3IgYWxsIEN0
cmwrc2Nyb2xsaW5nIGtleQorICAgICAgICAgICAgLy8gY29tYmluYXRpb25zLiBGb3IgZS5nLiBD
dHJsK3BndXAvcGdkbi91cC9kb3duLCBldGMuCisgICAgICAgICAgICBzd2l0Y2ggKGtleWJvYXJk
LndpbmRvd3NLZXlDb2RlKSB7CisgICAgICAgICAgICBjYXNlIFZLRVlfSE9NRToKKyAgICAgICAg
ICAgIGNhc2UgVktFWV9FTkQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChrZXlib2FyZC5pc1N5c3RlbUtleSB8fCAoa2V5Ym9hcmQu
bW9kaWZpZXJzICYgV2ViSW5wdXRFdmVudDo6U2hpZnRLZXkpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgIGtleUNvZGUgPSBrZXlib2FyZC53aW5kb3dzS2V5Q29kZTsKKyAg
ICB9CisgICAgV2ViQ29yZTo6U2Nyb2xsRGlyZWN0aW9uIHNjcm9sbERpcmVjdGlvbjsKKyAgICBX
ZWJDb3JlOjpTY3JvbGxHcmFudWxhcml0eSBzY3JvbGxHcmFudWxhcml0eTsKKyAgICBpZiAoV2Vi
Vmlld0ltcGw6Om1hcEtleUNvZGVGb3JTY3JvbGwoa2V5Q29kZSwgJnNjcm9sbERpcmVjdGlvbiwg
JnNjcm9sbEdyYW51bGFyaXR5KSkgeworICAgICAgICAvLyBXaWxsIHJldHVybiBmYWxzZSBpZiBz
Y3JvbGwgZGlyZWN0aW9uIHdhc24ndCBjb21wYXRpYmxlIHdpdGggdGhpcyBzY3JvbGxiYXIuCisg
ICAgICAgIHJldHVybiBtX2dyb3VwLT5zY3JvbGwoc2Nyb2xsRGlyZWN0aW9uLCBzY3JvbGxHcmFu
dWxhcml0eSk7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5T
Y3JvbGxiYXJJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5TY3Jv
bGxiYXJJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjQyY2I4MmZkOTViM2ZlOGYyNjZmZDJkZDcxZjE1MmUx
NzAyNTQzOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlBsdWdpblNjcm9sbGJhckltcGwuaApAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFdlYlBsdWdpblNjcm9sbGJhckltcGxfaAorI2RlZmluZSBXZWJQbHVnaW5TY3JvbGxi
YXJJbXBsX2gKKworI2luY2x1ZGUgIldlYlBsdWdpblNjcm9sbGJhci5oIgorCisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworY2xhc3MgSW50UG9pbnQ7CitjbGFzcyBJbnRSZWN0OworY2xhc3MgU2Nyb2xsYmFyOwor
fQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgU2Nyb2xsYmFyR3JvdXA7CisKK2NsYXNz
IFdlYlBsdWdpblNjcm9sbGJhckltcGwgOiBwdWJsaWMgV2ViUGx1Z2luU2Nyb2xsYmFyIHsKK3B1
YmxpYzoKKyAgICBXZWJQbHVnaW5TY3JvbGxiYXJJbXBsKE9yaWVudGF0aW9uLAorICAgICAgICAg
ICAgICAgICAgICAgU2Nyb2xsYmFyR3JvdXAqLAorICAgICAgICAgICAgICAgICAgICAgV2ViUGx1
Z2luU2Nyb2xsYmFyQ2xpZW50Kik7CisgICAgfldlYlBsdWdpblNjcm9sbGJhckltcGwoKTsKKwor
ICAgIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGludCk7CisgICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xs
YmFyUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCBnZXRUaWNrbWFya3Mo
VmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+JikgY29uc3Q7CisgICAgV2ViQ29yZTo6SW50UG9pbnQg
Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFdlYkNvcmU6OkludFBv
aW50JiBwYXJlbnRQb2ludCkgY29uc3Q7CisgICAgdm9pZCBzY3JvbGxiYXJTdHlsZUNoYW5nZWQo
KTsKKworICAgIGludCBzY3JvbGxPZmZzZXQoKSB7IHJldHVybiBtX3Njcm9sbE9mZnNldDsgfQor
ICAgIFdlYkNvcmU6OlNjcm9sbGJhciogc2Nyb2xsYmFyKCkgeyByZXR1cm4gbV9zY3JvbGxiYXIu
Z2V0KCk7IH0KKworICAgIC8vIFdlYktpdDo6V2ViU2Nyb2xsYmFyIG1ldGhvZHMKKyAgICB2aXJ0
dWFsIGJvb2wgaXNPdmVybGF5KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgdmFsdWUoKSBjb25z
dDsKKworICAgIC8vIFdlYktpdDo6V2ViUGx1Z2luU2Nyb2xsYmFyIG1ldGhvZHMKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0TG9jYXRpb24oY29uc3QgV2ViUmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRWYWx1ZShpbnQgcG9zaXRpb24pOworICAgIHZpcnR1YWwgdm9pZCBzZXREb2N1bWVudFNpemUo
aW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3Jh
bnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJD
YW52YXMqLCBjb25zdCBXZWJSZWN0Jik7CisgICAgdmlydHVhbCBib29sIGhhbmRsZUlucHV0RXZl
bnQoY29uc3QgV2ViSW5wdXRFdmVudCYpOworCitwcml2YXRlOgorICAgIGJvb2wgb25Nb3VzZURv
d24oY29uc3QgV2ViSW5wdXRFdmVudCYpOworICAgIGJvb2wgb25Nb3VzZVVwKGNvbnN0IFdlYklu
cHV0RXZlbnQmKTsKKyAgICBib29sIG9uTW91c2VNb3ZlKGNvbnN0IFdlYklucHV0RXZlbnQmKTsK
KyAgICBib29sIG9uTW91c2VMZWF2ZShjb25zdCBXZWJJbnB1dEV2ZW50Jik7CisgICAgYm9vbCBv
bk1vdXNlV2hlZWwoY29uc3QgV2ViSW5wdXRFdmVudCYpOworICAgIGJvb2wgb25LZXlEb3duKGNv
bnN0IFdlYklucHV0RXZlbnQmKTsKKworICAgIFNjcm9sbGJhckdyb3VwKiBtX2dyb3VwOworICAg
IFdlYlBsdWdpblNjcm9sbGJhckNsaWVudCogbV9jbGllbnQ7CisKKyAgICBpbnQgbV9zY3JvbGxP
ZmZzZXQ7CisgICAgUmVmUHRyPFdlYkNvcmU6OlNjcm9sbGJhcj4gbV9zY3JvbGxiYXI7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlNjcm9sbGJhckltcGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA3YTNlYTkwZDY2YzNmNjQ5MTUwNzgyM2UyN2NmZjYzZjNlM2JlNDA0Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlNjcm9sbGJhckltcGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjkzICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViU2Nyb2xsYmFySW1wbC5oIgotCi0j
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiS2V5Ym9hcmRDb2Rlcy5oIgot
I2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCi0jaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKLSNp
bmNsdWRlICJTY3JvbGxiYXIuaCIKLSNpbmNsdWRlICJTY3JvbGxiYXJHcm91cC5oIgotI2luY2x1
ZGUgIlNjcm9sbGJhclRoZW1lLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViQ2FudmFzLmgiCi0j
aW5jbHVkZSAiV2ViSW5wdXRFdmVudC5oIgotI2luY2x1ZGUgIldlYklucHV0RXZlbnRDb252ZXJz
aW9uLmgiCi0jaW5jbHVkZSAiV2ViUGx1Z2luQ29udGFpbmVySW1wbC5oIgotI2luY2x1ZGUgInBs
YXRmb3JtL1dlYlJlY3QuaCIKLSNpbmNsdWRlICJXZWJTY3JvbGxiYXJDbGllbnQuaCIKLSNpbmNs
dWRlICJwbGF0Zm9ybS9XZWJWZWN0b3IuaCIKLSNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgotI2lu
Y2x1ZGUgInBhaW50aW5nL0dyYXBoaWNzQ29udGV4dEJ1aWxkZXIuaCIKLQotdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotV2ViU2Nyb2xsYmFyKiBXZWJTY3JvbGxiYXI6OmNyZWF0ZUZvclBsdWdpbihPcmllbnRhdGlv
biBvcmllbnRhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV2ViUGx1Z2luQ29udGFpbmVyKiBwbHVnaW5Db250YWluZXIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlNjcm9sbGJhckNsaWVudCogY2xpZW50KQot
ewotICAgIFdlYlBsdWdpbkNvbnRhaW5lckltcGwqIHBsdWdpbiA9IHN0YXRpY19jYXN0PFdlYlBs
dWdpbkNvbnRhaW5lckltcGwqPihwbHVnaW5Db250YWluZXIpOwotICAgIHJldHVybiBuZXcgV2Vi
U2Nyb2xsYmFySW1wbChvcmllbnRhdGlvbiwgcGx1Z2luLT5zY3JvbGxiYXJHcm91cCgpLCBjbGll
bnQpOwotfQotCi1pbnQgV2ViU2Nyb2xsYmFyOjpkZWZhdWx0VGhpY2tuZXNzKCkKLXsKLSAgICBy
ZXR1cm4gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCktPnNjcm9sbGJhclRoaWNrbmVzcygpOwotfQot
Ci1XZWJTY3JvbGxiYXJJbXBsOjpXZWJTY3JvbGxiYXJJbXBsKE9yaWVudGF0aW9uIG9yaWVudGF0
aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY3JvbGxiYXJHcm91cCog
Z3JvdXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlNjcm9sbGJhckNs
aWVudCogY2xpZW50KQotICAgIDogbV9ncm91cChncm91cCkKLSAgICAsIG1fY2xpZW50KGNsaWVu
dCkKLSAgICAsIG1fc2Nyb2xsT2Zmc2V0KDApCi17Ci0gICAgbV9zY3JvbGxiYXIgPSBTY3JvbGxi
YXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcigKLSAgICAgICAgc3RhdGljX2Nhc3Q8U2Nyb2xsYWJs
ZUFyZWEqPihtX2dyb3VwKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8U2Nyb2xsYmFyT3JpZW50YXRp
b24+KG9yaWVudGF0aW9uKSwKLSAgICAgICAgUmVndWxhclNjcm9sbGJhcik7Ci0gICAgbV9ncm91
cC0+c2Nyb2xsYmFyQ3JlYXRlZCh0aGlzKTsKLX0KLQotV2ViU2Nyb2xsYmFySW1wbDo6fldlYlNj
cm9sbGJhckltcGwoKQotewotICAgIG1fZ3JvdXAtPnNjcm9sbGJhckRlc3Ryb3llZCh0aGlzKTsK
LX0KLQotdm9pZCBXZWJTY3JvbGxiYXJJbXBsOjpzZXRTY3JvbGxPZmZzZXQoaW50IHNjcm9sbE9m
ZnNldCkKLXsKLSAgICBtX3Njcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldDsKLSAgICBtX2NsaWVu
dC0+dmFsdWVDaGFuZ2VkKHRoaXMpOwotfQotCi12b2lkIFdlYlNjcm9sbGJhckltcGw6OmludmFs
aWRhdGVTY3JvbGxiYXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgV2ViUmVjdCB3
ZWJyZWN0KHJlY3QpOwotICAgIHdlYnJlY3QueCArPSBtX3Njcm9sbGJhci0+eCgpOwotICAgIHdl
YnJlY3QueSArPSBtX3Njcm9sbGJhci0+eSgpOwotICAgIG1fY2xpZW50LT5pbnZhbGlkYXRlU2Ny
b2xsYmFyUmVjdCh0aGlzLCB3ZWJyZWN0KTsKLX0KLQotdm9pZCBXZWJTY3JvbGxiYXJJbXBsOjpn
ZXRUaWNrbWFya3MoVmVjdG9yPEludFJlY3Q+JiB0aWNrbWFya3MpIGNvbnN0Ci17Ci0gICAgV2Vi
VmVjdG9yPFdlYlJlY3Q+IHRpY2tzOwotICAgIG1fY2xpZW50LT5nZXRUaWNrbWFya3MoY29uc3Rf
Y2FzdDxXZWJTY3JvbGxiYXJJbXBsKj4odGhpcyksICZ0aWNrcyk7Ci0gICAgdGlja21hcmtzLnJl
c2l6ZSh0aWNrcy5zaXplKCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGlja3Muc2l6
ZSgpOyArK2kpCi0gICAgICAgIHRpY2ttYXJrc1tpXSA9IHRpY2tzW2ldOwotfQotCi1JbnRQb2lu
dCBXZWJTY3JvbGxiYXJJbXBsOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIo
Y29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAotewotICAgIEludFBvaW50IG9mZnNl
dChwYXJlbnRQb2ludC54KCkgLSBtX3Njcm9sbGJhci0+eCgpLCBwYXJlbnRQb2ludC55KCkgLSBt
X3Njcm9sbGJhci0+eSgpKTsKLSAgICByZXR1cm4gbV9zY3JvbGxiYXItPldpZGdldDo6Y29udmVy
dEZyb21Db250YWluaW5nVmlldyhvZmZzZXQpOwotfQotCi12b2lkIFdlYlNjcm9sbGJhckltcGw6
OnNjcm9sbGJhclN0eWxlQ2hhbmdlZCgpCi17Ci0gICAgbV9jbGllbnQtPm92ZXJsYXlDaGFuZ2Vk
KHRoaXMpOwotfQotCi1ib29sIFdlYlNjcm9sbGJhckltcGw6OmlzT3ZlcmxheSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fc2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKTsKLX0KLQotdm9p
ZCBXZWJTY3JvbGxiYXJJbXBsOjpzZXRMb2NhdGlvbihjb25zdCBXZWJSZWN0JiByZWN0KQotewot
ICAgIEludFJlY3Qgb2xkUmVjdCA9IG1fc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKTsKLSAgICBtX3Nj
cm9sbGJhci0+c2V0RnJhbWVSZWN0KHJlY3QpOwotICAgIGlmIChXZWJSZWN0KG9sZFJlY3QpICE9
IHJlY3QpCi0gICAgICBtX3Njcm9sbGJhci0+aW52YWxpZGF0ZSgpOwotCi0gICAgaW50IGxlbmd0
aCA9IG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBt
X3Njcm9sbGJhci0+d2lkdGgoKSA6IG1fc2Nyb2xsYmFyLT5oZWlnaHQoKTsKLSAgICBpbnQgcGFn
ZVN0ZXAgPSBtYXgobWF4KHN0YXRpY19jYXN0PGludD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KGxlbmd0
aCkgKiBTY3JvbGxiYXI6Om1pbkZyYWN0aW9uVG9TdGVwV2hlblBhZ2luZygpKSwgbGVuZ3RoIC0g
U2Nyb2xsYmFyOjptYXhPdmVybGFwQmV0d2VlblBhZ2VzKCkpLCAxKTsKLSAgICBtX3Njcm9sbGJh
ci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7Ci0g
ICAgbV9zY3JvbGxiYXItPnNldEVuYWJsZWQobV9zY3JvbGxiYXItPnRvdGFsU2l6ZSgpID4gbGVu
Z3RoKTsKLSAgICBtX3Njcm9sbGJhci0+c2V0UHJvcG9ydGlvbihsZW5ndGgsIG1fc2Nyb2xsYmFy
LT50b3RhbFNpemUoKSk7Ci19Ci0KLWludCBXZWJTY3JvbGxiYXJJbXBsOjp2YWx1ZSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fc2Nyb2xsT2Zmc2V0OwotfQotCi12b2lkIFdlYlNjcm9sbGJhcklt
cGw6OnNldFZhbHVlKGludCBwb3NpdGlvbikKLXsKLSAgICBtX2dyb3VwLT5zY3JvbGxUb09mZnNl
dFdpdGhvdXRBbmltYXRpb24obV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCksIHN0YXRpY19jYXN0
PGZsb2F0Pihwb3NpdGlvbikpOwotfQotCi12b2lkIFdlYlNjcm9sbGJhckltcGw6OnNldERvY3Vt
ZW50U2l6ZShpbnQgc2l6ZSkKLXsKLSAgICBpbnQgbGVuZ3RoID0gbV9zY3JvbGxiYXItPm9yaWVu
dGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IG1fc2Nyb2xsYmFyLT53aWR0aCgpIDog
bV9zY3JvbGxiYXItPmhlaWdodCgpOwotICAgIG1fc2Nyb2xsYmFyLT5zZXRFbmFibGVkKHNpemUg
PiBsZW5ndGgpOwotICAgIG1fc2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9uKGxlbmd0aCwgc2l6ZSk7
Ci19Ci0KLXZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJl
Y3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyKQot
ewotICAgIFdlYkNvcmU6OlNjcm9sbERpcmVjdGlvbiBkaXI7Ci0gICAgYm9vbCBob3Jpem9udGFs
ID0gbV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcjsKLSAg
ICBpZiAoZGlyZWN0aW9uID09IFNjcm9sbEZvcndhcmQpCi0gICAgICAgIGRpciA9IGhvcml6b250
YWwgPyBTY3JvbGxSaWdodCA6IFNjcm9sbERvd247Ci0gICAgZWxzZQotICAgICAgICBkaXIgPSBo
b3Jpem9udGFsID8gU2Nyb2xsTGVmdCA6IFNjcm9sbFVwOwotCi0gICAgbV9ncm91cC0+c2Nyb2xs
KGRpciwgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6U2Nyb2xsR3JhbnVsYXJpdHk+KGdyYW51bGFyaXR5
KSwgbXVsdGlwbGllcik7Ci19Ci0KLXZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6cGFpbnQoV2ViQ2Fu
dmFzKiBjYW52YXMsIGNvbnN0IFdlYlJlY3QmIHJlY3QpCi17Ci0gICAgbV9zY3JvbGxiYXItPnBh
aW50KCZHcmFwaGljc0NvbnRleHRCdWlsZGVyKGNhbnZhcykuY29udGV4dCgpLCByZWN0KTsKLX0K
LQotYm9vbCBXZWJTY3JvbGxiYXJJbXBsOjpoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0
RXZlbnQmIGV2ZW50KQotewotICAgIHN3aXRjaCAoZXZlbnQudHlwZSkgewotICAgIGNhc2UgV2Vi
SW5wdXRFdmVudDo6TW91c2VEb3duOgotICAgICAgICByZXR1cm4gb25Nb3VzZURvd24oZXZlbnQp
OwotICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6TW91c2VVcDoKLSAgICAgICAgcmV0dXJuIG9uTW91
c2VVcChldmVudCk7Ci0gICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpNb3VzZU1vdmU6Ci0gICAgICAg
IHJldHVybiBvbk1vdXNlTW92ZShldmVudCk7Ci0gICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpNb3Vz
ZUxlYXZlOgotICAgICAgICByZXR1cm4gb25Nb3VzZUxlYXZlKGV2ZW50KTsKLSAgICBjYXNlIFdl
YklucHV0RXZlbnQ6Ok1vdXNlV2hlZWw6Ci0gICAgICAgIHJldHVybiBvbk1vdXNlV2hlZWwoZXZl
bnQpOwotICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6S2V5RG93bjoKLSAgICAgICAgcmV0dXJuIG9u
S2V5RG93bihldmVudCk7Ci0gICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpVbmRlZmluZWQ6Ci0gICAg
Y2FzZSBXZWJJbnB1dEV2ZW50OjpNb3VzZUVudGVyOgotICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6
UmF3S2V5RG93bjoKLSAgICBjYXNlIFdlYklucHV0RXZlbnQ6OktleVVwOgotICAgIGNhc2UgV2Vi
SW5wdXRFdmVudDo6Q2hhcjoKLSAgICBjYXNlIFdlYklucHV0RXZlbnQ6OlRvdWNoU3RhcnQ6Ci0g
ICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpUb3VjaE1vdmU6Ci0gICAgY2FzZSBXZWJJbnB1dEV2ZW50
OjpUb3VjaEVuZDoKLSAgICBjYXNlIFdlYklucHV0RXZlbnQ6OlRvdWNoQ2FuY2VsOgotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1i
b29sIFdlYlNjcm9sbGJhckltcGw6Om9uTW91c2VEb3duKGNvbnN0IFdlYklucHV0RXZlbnQmIGV2
ZW50KQotewotICAgIFdlYk1vdXNlRXZlbnQgbW91c2Vkb3duID0gKnN0YXRpY19jYXN0PGNvbnN0
IFdlYk1vdXNlRXZlbnQqPigmZXZlbnQpOwotICAgIGlmICghbV9zY3JvbGxiYXItPmZyYW1lUmVj
dCgpLmNvbnRhaW5zKG1vdXNlZG93bi54LCBtb3VzZWRvd24ueSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIG1vdXNlZG93bi54IC09IG1fc2Nyb2xsYmFyLT54KCk7Ci0gICAgbW91c2Vk
b3duLnkgLT0gbV9zY3JvbGxiYXItPnkoKTsKLSAgICBtX3Njcm9sbGJhci0+bW91c2VEb3duKFBs
YXRmb3JtTW91c2VFdmVudEJ1aWxkZXIobV9zY3JvbGxiYXIuZ2V0KCksIG1vdXNlZG93bikpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYlNjcm9sbGJhckltcGw6Om9uTW91c2VVcChj
b25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCkKLXsKLSAgICBXZWJNb3VzZUV2ZW50IG1vdXNldXAg
PSAqc3RhdGljX2Nhc3Q8Y29uc3QgV2ViTW91c2VFdmVudCo+KCZldmVudCk7Ci0gICAgaWYgKG1f
c2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpID09IE5vUGFydCkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgcmV0dXJuIG1fc2Nyb2xsYmFyLT5tb3VzZVVwKFBsYXRmb3JtTW91c2VFdmVudEJ1
aWxkZXIobV9zY3JvbGxiYXIuZ2V0KCksIG1vdXNldXApKTsKLX0KLQotYm9vbCBXZWJTY3JvbGxi
YXJJbXBsOjpvbk1vdXNlTW92ZShjb25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCkKLXsKLSAgICBX
ZWJNb3VzZUV2ZW50IG1vdXNlbW92ZSA9ICpzdGF0aWNfY2FzdDxjb25zdCBXZWJNb3VzZUV2ZW50
Kj4oJmV2ZW50KTsKLSAgICBpZiAobV9zY3JvbGxiYXItPmZyYW1lUmVjdCgpLmNvbnRhaW5zKG1v
dXNlbW92ZS54LCBtb3VzZW1vdmUueSkKLSAgICAgICAgfHwgbV9zY3JvbGxiYXItPnByZXNzZWRQ
YXJ0KCkgIT0gTm9QYXJ0KSB7Ci0gICAgICAgIG1vdXNlbW92ZS54IC09IG1fc2Nyb2xsYmFyLT54
KCk7Ci0gICAgICAgIG1vdXNlbW92ZS55IC09IG1fc2Nyb2xsYmFyLT55KCk7Ci0gICAgICAgIHJl
dHVybiBtX3Njcm9sbGJhci0+bW91c2VNb3ZlZChQbGF0Zm9ybU1vdXNlRXZlbnRCdWlsZGVyKG1f
c2Nyb2xsYmFyLmdldCgpLCBtb3VzZW1vdmUpKTsKLSAgICB9Ci0KLSAgICBpZiAobV9zY3JvbGxi
YXItPmhvdmVyZWRQYXJ0KCkgIT0gTm9QYXJ0ICYmICFtX3Njcm9sbGJhci0+aXNPdmVybGF5U2Ny
b2xsYmFyKCkpCi0gICAgICAgIG1fc2Nyb2xsYmFyLT5tb3VzZUV4aXRlZCgpOwotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotYm9vbCBXZWJTY3JvbGxiYXJJbXBsOjpvbk1vdXNlTGVhdmUoY29uc3Qg
V2ViSW5wdXRFdmVudCYgZXZlbnQpCi17Ci0gICAgaWYgKG1fc2Nyb2xsYmFyLT5ob3ZlcmVkUGFy
dCgpICE9IE5vUGFydCkKLSAgICAgICAgbV9zY3JvbGxiYXItPm1vdXNlRXhpdGVkKCk7Ci0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgV2ViU2Nyb2xsYmFySW1wbDo6b25Nb3VzZVdoZWVs
KGNvbnN0IFdlYklucHV0RXZlbnQmIGV2ZW50KQotewotICAgIFdlYk1vdXNlV2hlZWxFdmVudCBt
b3VzZXdoZWVsID0gKnN0YXRpY19jYXN0PGNvbnN0IFdlYk1vdXNlV2hlZWxFdmVudCo+KCZldmVu
dCk7Ci0gICAgUGxhdGZvcm1XaGVlbEV2ZW50QnVpbGRlciBwbGF0Zm9ybUV2ZW50KG1fc2Nyb2xs
YmFyLmdldCgpLCBtb3VzZXdoZWVsKTsKLSAgICByZXR1cm4gbV9ncm91cC0+aGFuZGxlV2hlZWxF
dmVudChwbGF0Zm9ybUV2ZW50KTsKLX0KLQotYm9vbCBXZWJTY3JvbGxiYXJJbXBsOjpvbktleURv
d24oY29uc3QgV2ViSW5wdXRFdmVudCYgZXZlbnQpCi17Ci0gICAgV2ViS2V5Ym9hcmRFdmVudCBr
ZXlib2FyZCA9ICpzdGF0aWNfY2FzdDxjb25zdCBXZWJLZXlib2FyZEV2ZW50Kj4oJmV2ZW50KTsK
LSAgICBpbnQga2V5Q29kZTsKLSAgICAvLyBXZSBoYXZlIHRvIGR1cGxpY2F0ZSB0aGlzIGxvZ2lj
IGZyb20gV2ViVmlld0ltcGwgYmVjYXVzZSB0aGVyZSBpdCB1c2VzCi0gICAgLy8gQ2hhciBhbmQg
UmF3S2V5RG93biBldmVudHMsIHdoaWNoIGRvbid0IGV4aXN0IGF0IHRoaXMgcG9pbnQuCi0gICAg
aWYgKGtleWJvYXJkLndpbmRvd3NLZXlDb2RlID09IFZLRVlfU1BBQ0UpCi0gICAgICAgIGtleUNv
ZGUgPSAoKGtleWJvYXJkLm1vZGlmaWVycyAmIFdlYklucHV0RXZlbnQ6OlNoaWZ0S2V5KSA/IFZL
RVlfUFJJT1IgOiBWS0VZX05FWFQpOwotICAgIGVsc2UgewotICAgICAgICBpZiAoa2V5Ym9hcmQu
bW9kaWZpZXJzID09IFdlYklucHV0RXZlbnQ6OkNvbnRyb2xLZXkpIHsKLSAgICAgICAgICAgIC8v
IE1hdGNoIEZGIGJlaGF2aW9yIGluIHRoZSBzZW5zZSB0aGF0IEN0cmwraG9tZS9lbmQgYXJlIHRo
ZSBvbmx5IEN0cmwKLSAgICAgICAgICAgIC8vIGtleSBjb21iaW5hdGlvbnMgd2hpY2ggYWZmZWN0
IHNjcm9sbGluZy4gU2FmYXJpIGlzIGJ1Z2d5IGluIHRoZQotICAgICAgICAgICAgLy8gc2Vuc2Ug
dGhhdCBpdCBzY3JvbGxzIHRoZSBwYWdlIGZvciBhbGwgQ3RybCtzY3JvbGxpbmcga2V5Ci0gICAg
ICAgICAgICAvLyBjb21iaW5hdGlvbnMuIEZvciBlLmcuIEN0cmwrcGd1cC9wZ2RuL3VwL2Rvd24s
IGV0Yy4KLSAgICAgICAgICAgIHN3aXRjaCAoa2V5Ym9hcmQud2luZG93c0tleUNvZGUpIHsKLSAg
ICAgICAgICAgIGNhc2UgVktFWV9IT01FOgotICAgICAgICAgICAgY2FzZSBWS0VZX0VORDoKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KGtleWJvYXJkLmlzU3lzdGVtS2V5IHx8IChrZXlib2FyZC5tb2RpZmllcnMgJiBXZWJJbnB1dEV2
ZW50OjpTaGlmdEtleSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAga2V5
Q29kZSA9IGtleWJvYXJkLndpbmRvd3NLZXlDb2RlOwotICAgIH0KLSAgICBXZWJDb3JlOjpTY3Jv
bGxEaXJlY3Rpb24gc2Nyb2xsRGlyZWN0aW9uOwotICAgIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFy
aXR5IHNjcm9sbEdyYW51bGFyaXR5OwotICAgIGlmIChXZWJWaWV3SW1wbDo6bWFwS2V5Q29kZUZv
clNjcm9sbChrZXlDb2RlLCAmc2Nyb2xsRGlyZWN0aW9uLCAmc2Nyb2xsR3JhbnVsYXJpdHkpKSB7
Ci0gICAgICAgIC8vIFdpbGwgcmV0dXJuIGZhbHNlIGlmIHNjcm9sbCBkaXJlY3Rpb24gd2Fzbid0
IGNvbXBhdGlibGUgd2l0aCB0aGlzIHNjcm9sbGJhci4KLSAgICAgICAgcmV0dXJuIG1fZ3JvdXAt
PnNjcm9sbChzY3JvbGxEaXJlY3Rpb24sIHNjcm9sbEdyYW51bGFyaXR5KTsKLSAgICB9Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNjcm9sbGJhckltcGwuaCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlNjcm9sbGJhckltcGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNjQ0NDQzYzFjN2VmMzBlNTQ1YTBjMjU3OTdhZDE4ZGZhNDI2ZTVmNC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBXZWJTY3JvbGxiYXJJbXBsX2gKLSNkZWZpbmUgV2ViU2Nyb2xsYmFySW1wbF9o
Ci0KLSNpbmNsdWRlICJXZWJTY3JvbGxiYXIuaCIKLQotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
LSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIElu
dFBvaW50OwotY2xhc3MgSW50UmVjdDsKLWNsYXNzIFNjcm9sbGJhcjsKLX0KLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLWNsYXNzIFNjcm9sbGJhckdyb3VwOwotCi1jbGFzcyBXZWJTY3JvbGxiYXJJ
bXBsIDogcHVibGljIFdlYlNjcm9sbGJhciB7Ci1wdWJsaWM6Ci0gICAgV2ViU2Nyb2xsYmFySW1w
bChPcmllbnRhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgIFNjcm9sbGJhckdyb3VwKiwgICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgIFdlYlNjcm9sbGJhckNsaWVu
dCopOwotICAgIH5XZWJTY3JvbGxiYXJJbXBsKCk7Ci0KLSAgICB2b2lkIHNldFNjcm9sbE9mZnNl
dChpbnQpOwotICAgIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpOwotICAgIHZvaWQgZ2V0VGlja21hcmtzKFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0
PiYpIGNvbnN0OwotICAgIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1Zp
ZXdUb1Njcm9sbGJhcihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0
OwotICAgIHZvaWQgc2Nyb2xsYmFyU3R5bGVDaGFuZ2VkKCk7Ci0KLSAgICBpbnQgc2Nyb2xsT2Zm
c2V0KCkgeyByZXR1cm4gbV9zY3JvbGxPZmZzZXQ7IH0KLSAgICBXZWJDb3JlOjpTY3JvbGxiYXIq
IHNjcm9sbGJhcigpIHsgcmV0dXJuIG1fc2Nyb2xsYmFyLmdldCgpOyB9Ci0KLSAgICAvLyBXZWJL
aXQ6OldlYlNjcm9sbGJhciBtZXRob2RzCi0gICAgdmlydHVhbCBib29sIGlzT3ZlcmxheSgpIGNv
bnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRMb2NhdGlvbihjb25zdCBXZWJSZWN0Jik7Ci0gICAg
dmlydHVhbCBpbnQgdmFsdWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUoaW50
IHBvc2l0aW9uKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RG9jdW1lbnRTaXplKGludCBzaXplKTsK
LSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJp
dHksIGZsb2F0IG11bHRpcGxpZXIpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJDYW52YXMq
LCBjb25zdCBXZWJSZWN0Jik7Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZUlucHV0RXZlbnQoY29u
c3QgV2ViSW5wdXRFdmVudCYpOwotCi1wcml2YXRlOgotICAgIGJvb2wgb25Nb3VzZURvd24oY29u
c3QgV2ViSW5wdXRFdmVudCYgZXZlbnQpOwotICAgIGJvb2wgb25Nb3VzZVVwKGNvbnN0IFdlYklu
cHV0RXZlbnQmIGV2ZW50KTsKLSAgICBib29sIG9uTW91c2VNb3ZlKGNvbnN0IFdlYklucHV0RXZl
bnQmIGV2ZW50KTsKLSAgICBib29sIG9uTW91c2VMZWF2ZShjb25zdCBXZWJJbnB1dEV2ZW50JiBl
dmVudCk7Ci0gICAgYm9vbCBvbk1vdXNlV2hlZWwoY29uc3QgV2ViSW5wdXRFdmVudCYgZXZlbnQp
OwotICAgIGJvb2wgb25LZXlEb3duKGNvbnN0IFdlYklucHV0RXZlbnQmIGV2ZW50KTsKLQotICAg
IFNjcm9sbGJhckdyb3VwKiBtX2dyb3VwOwotICAgIFdlYlNjcm9sbGJhckNsaWVudCogbV9jbGll
bnQ7Ci0KLSAgICBpbnQgbV9zY3JvbGxPZmZzZXQ7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlNjcm9s
bGJhcj4gbV9zY3JvbGxiYXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlm
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149977</attachid>
            <date>2012-06-28 11:18:48 -0700</date>
            <delta_ts>2012-06-28 12:54:53 -0700</delta_ts>
            <desc>Take 2</desc>
            <filename>bug-90117-20120628111848.patch</filename>
            <type>text/plain</type>
            <size>56216</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxMzQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCA0YzJkY2Q0MGY5MjBj
MzRjYmJlYTY3ZGI3NDI3YzVhYWNlMDliYzAwLi4wZGFkNjJiZTAyNWRkMTE5ZjM3ZTM2MmM2OGE2
Zjg3MzA3Y2M2MzRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0wNi0yOCAg
QWRyaWVubmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29tPgorCisgICAgICAgIFtjaHJvbWl1bV0g
U3BsaXQgV2ViU2Nyb2xsYmFyIGludG8gV2ViUGx1Z2luU2Nyb2xsYmFyIGFuZCBXZWJTY3JvbGxi
YXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwMTE3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBX
ZWJTY3JvbGxiYXIgZnJvbSBjbGllbnQgQVBJIHRvIFBsYXRmb3JtLgorCisgICAgICAgICogUGxh
dGZvcm0uZ3lwaToKKyAgICAgICAgKiBjaHJvbWl1bS9wdWJsaWMvV2ViU2Nyb2xsYmFyLmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBsdWdpblNjcm9sbGJh
ckNsaWVudC5oLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlNjcm9sbGJhcik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhcjo6fldlYlNjcm9sbGJhcik6CisKIDIwMTItMDYt
MjYgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hy
b21pdW1dIFJlbW92ZSBXZWJWaWV3OjpncmFwaGljc0NvbnRleHQzRCBnZXR0ZXIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpp
bmRleCAyYTZiNGNkODNjNTE4MDM4OTgzMGMwZGQwNmYxMjQyZGU5ZmFkMGEzLi5mZDY4YzVhZTU5
YTYyODZlMmI3OTRiZDU1YzBjNGMyMDNjNGIxMDIxIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTItMDYtMjggIEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KKworICAg
ICAgICBbY2hyb21pdW1dIFNwbGl0IFdlYlNjcm9sbGJhciBpbnRvIFdlYlBsdWdpblNjcm9sbGJh
ciBhbmQgV2ViU2Nyb2xsYmFyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD05MDExNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE1ha2UgV2ViQ29yZSBhbHNvIGRlcGVuZCBvbiBQbGF0Zm9ybS4KKworICAgICAg
ICAqIFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOgorCiAyMDEyLTA2LTI3ICBTaGlueWEgS2F3YW5h
a2EgIDxzaGlueWFrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBIVE1MU3R5bGVFbGVtZW50Ojpy
ZW1vdmVkRnJvbSBzZWVtcyBpbmNvcnJlY3QuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IGExNDZkODlkZGMxYzJiOTUzNGY2ZjI5NTg2M2JlYmIzOGExMjNmNTguLmVmOTY5NGE1YWQyMzk5
MmIwZDc3M2VkOGYwNzg2NjUwMWJkMTZkODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsODIgQEAKKzIwMTItMDYtMjggIEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xl
LmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIFNwbGl0IFdlYlNjcm9sbGJhciBpbnRvIFdlYlBs
dWdpblNjcm9sbGJhciBhbmQgV2ViU2Nyb2xsYmFyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDExNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIENvbnZlcnQgV2ViU2Nyb2xsYmFyL1dlYlNjcm9sbGJhckNs
aWVudC9XZWJTY3JvbGxiYXJJbXBsIHRvIGJlCisgICAgICAgIFdlYlBsdWdpblNjcm9sbGJhciwg
V2ViUGx1Z2luU2Nyb2xsYmFyQ2xpZW50LCBhbmQKKyAgICAgICAgV2ViUGx1Z2luU2Nyb2xsYmFy
SW1wbC4gTW9kaWZ5IFNjcm9sbGJhckdyb3VwCisgICAgICAgIHRvIHVzZSB0aGlzIGluc3RlYWQu
CisKKyAgICAgICAgV2ViU2Nyb2xsYmFyIGlzIG5vdyB0aGUgYmFzZSBpbnRlcmZhY2UgZm9yIGEg
cHJlLWV4aXN0aW5nIHNjcm9sbGJhcgorICAgICAgICB0aGF0IGlzIGFjY2Vzc2VkIGluIGEgY29u
c3QgbWFubmVyLiBJdCBhbHNvIHByb3ZpZGVzIGFsbCBvZiB0aGUgY29tbW9uCisgICAgICAgIFdl
YktpdCBTY3JvbGxUeXBlcy5oIGVudW1zLiBXZWJQbHVnaW5TY3JvbGxiYXIgaXMgbm93IGEgc2Ny
b2xsYmFyIHRoYXQKKyAgICAgICAgaGFzIGJlZW4gZXh0ZXJuYWxseSBjcmVhdGVkIGFuZCBpcyBl
eHRlcm5hbGx5IG1vZGlmaWVkIGluIHRlcm1zIG9mIGl0cworICAgICAgICBwb3NpdGlvbiwgaW52
YWxpZGF0aW9uLCBhbmQgcGFpbnRpbmcuCisKKyAgICAgICAgVGhpcyBpcyBhIHByZS1yZWZhY3Rv
cmluZyBmb3IgYWRkaW5nIFdlYiB2ZXJzaW9ucyBvZiBTY3JvbGxiYXJUaGVtZQorICAgICAgICBp
bnRvIHRoZSBQbGF0Zm9ybSBkaXJlY3Rvcnkgd2hpY2ggd2lsbCBvcGVyYXRlIG9uIFdlYlNjcm9s
bGJhciwgYnV0CisgICAgICAgIHRoYXQgZG9uJ3QgbmVlZCBhbGwgb2Ygd2hhdCBXZWJQbHVnaW5T
Y3JvbGxiYXIgcHJvdmlkZXMuCisKKyAgICAgICAgQXMgV2ViU2Nyb2xsYmFyIGlzIG1vdmVkIHRv
IFBsYXRmb3JtLCBXZWJLaXQuZ3lwIG5vdyBkZXBlbmRzIG9uCisgICAgICAgIFBsYXRmb3JtLmd5
cCB0cmFuc2l0aXZlbHkgdGhyb3VnaCBXZWJDb3JlLmd5cCBzbyB0aGF0IGl0IGNhbiBnZXQgYWxs
CisgICAgICAgIHRoZSByaWdodCBpbmNsdWRlIHBhdGhzLgorCisgICAgICAgICogV2ViS2l0Lmd5
cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViUGx1Z2luU2Nyb2xsYmFyLmg6CisgICAgICAgIChXZWJL
aXQpOgorICAgICAgICAoV2ViUGx1Z2luU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGx1Z2luU2Nyb2xsYmFyOjp+V2ViUGx1Z2luU2Nyb2xsYmFyKToKKyAgICAgICAgKiBwdWJsaWMv
V2ViUGx1Z2luU2Nyb2xsYmFyQ2xpZW50Lmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAo
V2ViUGx1Z2luU2Nyb2xsYmFyQ2xpZW50KToKKyAgICAgICAgKiBwdWJsaWMvV2ViU2Nyb2xsYmFy
Lmg6IFJlbW92ZWQuCisgICAgICAgICogcHVibGljL1dlYlNjcm9sbGJhckNsaWVudC5oOiBSZW1v
dmVkLgorICAgICAgICAqIHNyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNwcDoKKyAgICAgICAgKiBz
cmMvU2Nyb2xsYmFyR3JvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxiYXJHcm91cDo6
c2Nyb2xsYmFyQ3JlYXRlZCk6CisgICAgICAgIChXZWJLaXQ6OlNjcm9sbGJhckdyb3VwOjpzY3Jv
bGxiYXJEZXN0cm95ZWQpOgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxiYXJHcm91cDo6c2Nyb2xs
U2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OlNjcm9sbGJhckdyb3VwOjpzY3JvbGxQb3NpdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OlNjcm9sbGJhckdyb3VwOjpjb250ZW50c1NpemUpOgorICAgICAg
ICAqIHNyYy9TY3JvbGxiYXJHcm91cC5oOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFNj
cm9sbGJhckdyb3VwKToKKyAgICAgICAgKiBzcmMvV2ViUGx1Z2luU2Nyb2xsYmFySW1wbC5jcHA6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBs
LmNwcC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdpblNjcm9s
bGJhcjo6Y3JlYXRlRm9yUGx1Z2luKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luU2Nyb2xs
YmFyOjpkZWZhdWx0VGhpY2tuZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luU2Nyb2xs
YmFySW1wbDo6V2ViUGx1Z2luU2Nyb2xsYmFySW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBs
dWdpblNjcm9sbGJhckltcGw6On5XZWJQbHVnaW5TY3JvbGxiYXJJbXBsKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGx1Z2luU2Nyb2xsYmFySW1wbDo6c2V0U2Nyb2xsT2Zmc2V0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGx1Z2luU2Nyb2xsYmFySW1wbDo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3Qp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5TY3JvbGxiYXJJbXBsOjpnZXRUaWNrbWFya3Mp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5TY3JvbGxiYXJJbXBsOjpjb252ZXJ0RnJvbUNv
bnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5TY3Jv
bGxiYXJJbXBsOjpzY3JvbGxiYXJTdHlsZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
bHVnaW5TY3JvbGxiYXJJbXBsOjppc092ZXJsYXkpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVn
aW5TY3JvbGxiYXJJbXBsOjp2YWx1ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdpblNjcm9s
bGJhckltcGw6OnNldExvY2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luU2Nyb2xs
YmFySW1wbDo6c2V0VmFsdWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5TY3JvbGxiYXJJ
bXBsOjpzZXREb2N1bWVudFNpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5TY3JvbGxi
YXJJbXBsOjpzY3JvbGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5TY3JvbGxiYXJJbXBs
OjpwYWludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdpblNjcm9sbGJhckltcGw6OmhhbmRs
ZUlucHV0RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5TY3JvbGxiYXJJbXBsOjpv
bk1vdXNlRG93bik6CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdpblNjcm9sbGJhckltcGw6Om9u
TW91c2VVcCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdpblNjcm9sbGJhckltcGw6Om9uTW91
c2VNb3ZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luU2Nyb2xsYmFySW1wbDo6b25Nb3Vz
ZUxlYXZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luU2Nyb2xsYmFySW1wbDo6b25Nb3Vz
ZVdoZWVsKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luU2Nyb2xsYmFySW1wbDo6b25LZXlE
b3duKToKKyAgICAgICAgKiBzcmMvV2ViUGx1Z2luU2Nyb2xsYmFySW1wbC5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlBsdWdpblNj
cm9sbGJhckltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5TY3JvbGxiYXJJbXBsOjpz
Y3JvbGxPZmZzZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5TY3JvbGxiYXJJbXBsOjpz
Y3JvbGxiYXIpOgorICAgICAgICAqIHNyYy9XZWJTY3JvbGxiYXJJbXBsLmg6IFJlbW92ZWQuCisK
IDIwMTItMDYtMjcgIFJvYmVydCBLcm9lZ2VyICA8cmprcm9lZ2VAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFtjaHJvbWl1bV0gb3V0LW9mLW9yZGVyIGFzc2VydCBpbiBXZWJWaWV3SW1wbCBzZXRE
ZXZpY2VTY2FsZUZhY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5
cGkgYi9Tb3VyY2UvUGxhdGZvcm0vUGxhdGZvcm0uZ3lwaQppbmRleCA3NWFkOTcyZmJmODI3ODk1
OTgwMTc0MmVhNDdlOWUzYjA3ODFhMzI1Li43ZDU2NGY3NGJkNDE1MDA1ZDVlYmJlNjM2Y2NkODk4
MzZiNzQwZWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vUGxhdGZvcm0uZ3lwaQorKysg
Yi9Tb3VyY2UvUGxhdGZvcm0vUGxhdGZvcm0uZ3lwaQpAQCAtOTUsNiArOTUsNyBAQAogICAgICAg
ICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJSZWN0LmgnLAogICAgICAgICAgICAgJ2Nocm9taXVt
L3B1YmxpYy9XZWJSZWZlcnJlclBvbGljeS5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJs
aWMvV2ViUmVuZGVyaW5nU3RhdHMuaCcsCisgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dl
YlNjcm9sbGJhci5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViU2Vzc2lvbkRl
c2NyaXB0aW9uRGVzY3JpcHRvci5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2Vi
U2l6ZS5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViU29ja2V0U3RyZWFtRXJy
b3IuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlNj
cm9sbGJhci5oIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJTY3JvbGxiYXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi44Nzk1NTY1NTJkMWEzMTZkNGQyZDU5N2Q2NmM1ZWIwNTBkOTllMGYxCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJTY3Jv
bGxiYXIuaApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlNjcm9s
bGJhcl9oCisjZGVmaW5lIFdlYlNjcm9sbGJhcl9oCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
bGFzcyBXZWJTY3JvbGxiYXIgeworcHVibGljOgorICAgIGVudW0gT3JpZW50YXRpb24geworICAg
ICAgICBIb3Jpem9udGFsLAorICAgICAgICBWZXJ0aWNhbAorICAgIH07CisKKyAgICBlbnVtIFNj
cm9sbERpcmVjdGlvbiB7CisgICAgICAgIFNjcm9sbEJhY2t3YXJkLAorICAgICAgICBTY3JvbGxG
b3J3YXJkCisgICAgfTsKKworICAgIGVudW0gU2Nyb2xsR3JhbnVsYXJpdHkgeworICAgICAgICBT
Y3JvbGxCeUxpbmUsCisgICAgICAgIFNjcm9sbEJ5UGFnZSwKKyAgICAgICAgU2Nyb2xsQnlEb2N1
bWVudCwKKyAgICAgICAgU2Nyb2xsQnlQaXhlbAorICAgIH07CisKKyAgICB2aXJ0dWFsIH5XZWJT
Y3JvbGxiYXIoKSB7IH0KKworICAgIC8vIFJldHVybiB0cnVlIGlmIHRoaXMgaXMgYW4gb3Zlcmxh
eSBzY3JvbGxiYXIuCisgICAgdmlydHVhbCBib29sIGlzT3ZlcmxheSgpIGNvbnN0ID0gMDsKKwor
ICAgIC8vIEdldHMgdGhlIGN1cnJlbnQgdmFsdWUgKGkuZS4gcG9zaXRpb24gaW5zaWRlIHRoZSBy
ZWdpb24pLgorICAgIHZpcnR1YWwgaW50IHZhbHVlKCkgY29uc3QgPSAwOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXAvV2ViQ29yZS5neXAgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3Jl
Lmd5cAppbmRleCBjZmNhNzcxNGU1OWM0MjkwNDMxNjRlN2YwOGUwM2NlZGM0NjAxZTcyLi5lYjFk
NjY0OTBkYzI2ZjY1NzNmNjgzMmE1M2Y4MzExNTAwOWFiMzUxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cC9XZWJDb3JlLmd5cApAQCAtMjAxMCw2ICsyMDEwLDcgQEAKICAgICAgICAgJ3dlYmNv
cmVfcmVuZGVyaW5nJywKICAgICAgICAgIyBFeHBvcnRlZC4KICAgICAgICAgJ3dlYmNvcmVfYmlu
ZGluZ3MnLAorICAgICAgICAnLi4vLi4vUGxhdGZvcm0vUGxhdGZvcm0uZ3lwL1BsYXRmb3JtLmd5
cDp3ZWJraXRfcGxhdGZvcm0nLAogICAgICAgICAnLi4vLi4vV1RGL1dURi5neXAvV1RGLmd5cDp3
dGYnLAogICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS9idWlsZC90ZW1wX2d5cC9nb29nbGV1
cmwuZ3lwOmdvb2dsZXVybCcsCiAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3NraWEvc2tp
YS5neXA6c2tpYScsCkBAIC0yMDE5LDYgKzIwMjAsNyBAQAogICAgICAgXSwKICAgICAgICdleHBv
cnRfZGVwZW5kZW50X3NldHRpbmdzJzogWwogICAgICAgICAnd2ViY29yZV9iaW5kaW5ncycsCisg
ICAgICAgICcuLi8uLi9QbGF0Zm9ybS9QbGF0Zm9ybS5neXAvUGxhdGZvcm0uZ3lwOndlYmtpdF9w
bGF0Zm9ybScsCiAgICAgICAgICcuLi8uLi9XVEYvV1RGLmd5cC9XVEYuZ3lwOnd0ZicsCiAgICAg
ICAgICc8KGNocm9taXVtX3NyY19kaXIpL2J1aWxkL3RlbXBfZ3lwL2dvb2dsZXVybC5neXA6Z29v
Z2xldXJsJywKICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2Rpcikvc2tpYS9za2lhLmd5cDpza2lh
JywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCBkNzVmNWI3MDk1ZmJkMWUxNzE0MTM2
OWNiMWZhMGFkOWYyOTJiMjRhLi44ZWIwOTg1ZDM1NWNmYmU0ZGNmMjFkMDVjZGE4NTM5ZTZiZDkx
NmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC02OCw3ICs2OCw3IEBACiAgICAg
ICAgICAgICAndmFyaWFibGVzJzogeyAnZW5hYmxlX3dleGl0X3RpbWVfZGVzdHJ1Y3RvcnMnOiAx
LCB9LAogICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKICAgICAgICAgICAgICAgICAnLi4v
Li4vV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDp3ZWJjb3JlJywKLSAgICAgICAgICAg
ICAgICAnLi4vLi4vUGxhdGZvcm0vUGxhdGZvcm0uZ3lwL1BsYXRmb3JtLmd5cDp3ZWJraXRfcGxh
dGZvcm0nLCAjIGFjdHVhbGx5IFdlYkNvcmUgc2hvdWxkIGRlcGVuZCBvbiB0aGlzCisgICAgICAg
ICAgICAgICAgJy4uLy4uL1BsYXRmb3JtL1BsYXRmb3JtLmd5cC9QbGF0Zm9ybS5neXA6d2Via2l0
X3BsYXRmb3JtJywKICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS9za2lhL3Nr
aWEuZ3lwOnNraWEnLAogICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3RoaXJk
X3BhcnR5L2ljdS9pY3UuZ3lwOmljdXVjJywKICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9z
cmNfZGlyKS90aGlyZF9wYXJ0eS9ucGFwaS9ucGFwaS5neXA6bnBhcGknLApAQCAtNzYsNiArNzYs
NyBAQAogICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3Y4L3Rvb2xzL2d5cC92
OC5neXA6djgnLAogICAgICAgICAgICAgXSwKICAgICAgICAgICAgICdleHBvcnRfZGVwZW5kZW50
X3NldHRpbmdzJzogWworICAgICAgICAgICAgICAgICcuLi8uLi9XZWJDb3JlL1dlYkNvcmUuZ3lw
L1dlYkNvcmUuZ3lwOndlYmNvcmUnLAogICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19k
aXIpL3NraWEvc2tpYS5neXA6c2tpYScsCiAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3Jj
X2RpcikvdGhpcmRfcGFydHkvaWN1L2ljdS5neXA6aWN1dWMnLAogICAgICAgICAgICAgICAgICc8
KGNocm9taXVtX3NyY19kaXIpL3RoaXJkX3BhcnR5L25wYXBpL25wYXBpLmd5cDpucGFwaScsCkBA
IC0yMzgsOCArMjM5LDYgQEAKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlNjcmVlbkluZm8u
aCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTY3JpcHRDb250cm9sbGVyLmgnLAogICAg
ICAgICAgICAgICAgICdwdWJsaWMvV2ViU2NyaXB0U291cmNlLmgnLAotICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViU2Nyb2xsYmFyLmgnLAotICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU2Ny
b2xsYmFyQ2xpZW50LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU2VhcmNoYWJsZUZv
cm1EYXRhLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU2VjdXJpdHlPcmlnaW4uaCcs
CiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTZWN1cml0eVBvbGljeS5oJywKQEAgLTYxNSw2
ICs2MTQsOCBAQAogICAgICAgICAgICAgICAgICdzcmMvV2ViUGx1Z2luTGlzdEJ1aWxkZXJJbXBs
LmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViUGx1Z2luTG9hZE9ic2VydmVyLmNwcCcsCiAg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJQbHVnaW5Mb2FkT2JzZXJ2ZXIuaCcsCisgICAgICAgICAg
ICAgICAgJ3NyYy9XZWJQbHVnaW5TY3JvbGxiYXJJbXBsLmNwcCcsCisgICAgICAgICAgICAgICAg
J3NyYy9XZWJQbHVnaW5TY3JvbGxiYXJJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2Vi
UG9wdXBNZW51SW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViUG9wdXBNZW51SW1w
bC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlJhbmdlLmNwcCcsCkBAIC02MjQsOCArNjI1
LDYgQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYlNjb3BlZFVzZXJHZXN0dXJlLmNwcCcsCiAg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJTY3JpcHRDb250cm9sbGVyLmNwcCcsCiAgICAgICAgICAg
ICAgICAgJ3NyYy9XZWJTY3JvbGxhYmxlTGF5ZXIuY3BwJywKLSAgICAgICAgICAgICAgICAnc3Jj
L1dlYlNjcm9sbGJhckltcGwuY3BwJywKLSAgICAgICAgICAgICAgICAnc3JjL1dlYlNjcm9sbGJh
ckltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3Bw
JywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlNlY3VyaXR5T3JpZ2luLmNwcCcsCiAgICAgICAg
ICAgICAgICAgJ3NyYy9XZWJTZWN1cml0eVBvbGljeS5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGx1Z2luU2Nyb2xsYmFyLmggYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQbHVnaW5TY3JvbGxiYXIuaAppbmRleCAzMDZmMDk4YWE5
NjZmNDUxMDE5OGY5NTQ3ZTMzNjI3MzBmNGVmOTJhLi4zNjRlZTBkZmJlOGMwNmQzNmYxYTllZmNh
NGIwOGVjNmY5NGZjNGVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJQbHVnaW5TY3JvbGxiYXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJQbHVnaW5TY3JvbGxiYXIuaApAQCAtMjUsMTEgKzI1LDUxIEBACiAjaWZuZGVmIFdlYlBs
dWdpblNjcm9sbGJhcl9oCiAjZGVmaW5lIFdlYlBsdWdpblNjcm9sbGJhcl9oCiAKLSNpbmNsdWRl
ICJXZWJTY3JvbGxiYXIuaCIKKyNpbmNsdWRlIDxwdWJsaWMvV2ViQ2FudmFzLmg+CisjaW5jbHVk
ZSA8cHVibGljL1dlYlNjcm9sbGJhci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotdHlwZWRl
ZiBXZWJTY3JvbGxiYXIgV2ViUGx1Z2luU2Nyb2xsYmFyOworY2xhc3MgV2ViSW5wdXRFdmVudDsK
K2NsYXNzIFdlYlBsdWdpbkNvbnRhaW5lcjsKK2NsYXNzIFdlYlBsdWdpblNjcm9sbGJhckNsaWVu
dDsKK3N0cnVjdCBXZWJSZWN0OworCitjbGFzcyBXZWJQbHVnaW5TY3JvbGxiYXIgOiBwdWJsaWMg
V2ViU2Nyb2xsYmFyIHsKK3B1YmxpYzoKKyAgICAvLyBDcmVhdGVzIGEgV2ViUGx1Z2luU2Nyb2xs
YmFyIGZvciB1c2UgYnkgYSBwbHVnaW4uIFRoZSBwbHVnaW4gY29udGFpbmVyIGFuZAorICAgIC8v
IGNsaWVudCBhcmUgZ3VhcmFudGVlZCB0byBvdXRsaXZlIHRoaXMgb2JqZWN0LgorICAgIFdFQktJ
VF9FWFBPUlQgc3RhdGljIFdlYlBsdWdpblNjcm9sbGJhciogY3JlYXRlRm9yUGx1Z2luKFdlYlNj
cm9sbGJhcjo6T3JpZW50YXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViUGx1Z2luQ29udGFpbmVyKiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJQ
bHVnaW5TY3JvbGxiYXJDbGllbnQqKTsKKworICAgIHZpcnR1YWwgfldlYlBsdWdpblNjcm9sbGJh
cigpIHsgfQorCisgICAgLy8gR2V0cyB0aGUgdGhpY2tuZXNzIG9mIHRoZSBzY3JvbGxiYXIgaW4g
cGl4ZWxzLgorICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIGludCBkZWZhdWx0VGhpY2tuZXNzKCk7
CisKKyAgICAvLyBTZXRzIHRoZSByZWN0YW5nbGUgb2YgdGhlIHNjcm9sbGJhci4KKyAgICB2aXJ0
dWFsIHZvaWQgc2V0TG9jYXRpb24oY29uc3QgV2ViUmVjdCYpID0gMDsKKworICAgIC8vIFNldHMg
dGhlIHNpemUgb2YgdGhlIHNjcm9sbGFibGUgcmVnaW9uIGluIHBpeGVscywgaS5lLiBpZiBhIGRv
Y3VtZW50IGlzCisgICAgLy8gODAweDEwMDAwIHBpeGVscyBhbmQgdGhlIHZpZXdwb3J0IGlzIDEw
MDB4MTAwMCBwaXhlbHMsIHRoZW4gc2V0TG9jYXRpb24KKyAgICAvLyBmb3IgdGhlIHZlcnRpY2Fs
IHNjcm9sbGJhciB3b3VsZCBoYXZlIHBhc3NlZCBpbiBhIHJlY3RhbmdsZSBsaWtlOgorICAgIC8v
ICAgICAgICAgICAgKDgwMCAtIGRlZmF1bHRUaGlja25lc3MoKSwgMCkgKGRlZmF1bHRUaGlja25l
c3MoKSB4IDEwMDAwKQorICAgIC8vIGFuZCBzZXREb2N1bWVudFNpemUoMTAwMDApCisgICAgdmly
dHVhbCB2b2lkIHNldERvY3VtZW50U2l6ZShpbnQpID0gMDsKKworICAgIC8vIFNldHMgdGhlIGN1
cnJlbnQgdmFsdWUuCisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlKGludCBwb3NpdGlvbikgPSAw
OworCisgICAgLy8gU2Nyb2xsIGJhY2sgb3IgZm9yd2FyZCB3aXRoIHRoZSBnaXZlbiBncmFudWxh
cml0eS4KKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3Jh
bnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIpID0gMDsKKworICAgIC8vIFBhaW50IHRoZSBnaXZl
biByZWN0YW5nbGUuCisgICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYkNhbnZhcyosIGNvbnN0IFdl
YlJlY3QmKSA9IDA7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWZmIHRoZSBnaXZlbiBldmVudCB3
YXMgdXNlZC4KKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1
dEV2ZW50JikgPSAwOworfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBsdWdpblNjcm9sbGJhckNsaWVudC5o
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGx1Z2luU2Nyb2xsYmFyQ2xpZW50
LmgKaW5kZXggMzZmOGU0OWM4NDhhNjIwNDVjMmFiMjU1MmRlZjcxNzg2ZTQ4M2U2YS4uYmM1YTEy
NGY0MzdlNWI5OWM1MTliYWFhNDdmZDlhY2I2MDc4NjZjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGx1Z2luU2Nyb2xsYmFyQ2xpZW50LmgKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGx1Z2luU2Nyb2xsYmFyQ2xpZW50LmgKQEAg
LTI1LDEyICsyNSwxOSBAQAogI2lmbmRlZiBXZWJQbHVnaW5TY3JvbGxiYXJDbGllbnRfaAogI2Rl
ZmluZSBXZWJQbHVnaW5TY3JvbGxiYXJDbGllbnRfaAogCi0jaW5jbHVkZSAiV2ViUGx1Z2luU2Ny
b2xsYmFyLmgiCi0jaW5jbHVkZSAiV2ViU2Nyb2xsYmFyQ2xpZW50LmgiCi0KIG5hbWVzcGFjZSBX
ZWJLaXQgewogCi10eXBlZGVmIFdlYlNjcm9sbGJhckNsaWVudCBXZWJQbHVnaW5TY3JvbGxiYXJD
bGllbnQ7CitjbGFzcyBXZWJQbHVnaW5TY3JvbGxiYXI7CitzdHJ1Y3QgV2ViUmVjdDsKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBXZWJWZWN0b3I7CisKK2NsYXNzIFdlYlBsdWdpblNjcm9s
bGJhckNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChXZWJQ
bHVnaW5TY3JvbGxiYXIqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG92ZXJsYXlDaGFuZ2VkKFdl
YlBsdWdpblNjcm9sbGJhciopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9s
bGJhclJlY3QoV2ViUGx1Z2luU2Nyb2xsYmFyKiwgY29uc3QgV2ViUmVjdCYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZ2V0VGlja21hcmtzKFdlYlBsdWdpblNjcm9sbGJhciosIFdlYlZlY3RvcjxX
ZWJSZWN0PiopIGNvbnN0ID0gMDsKK307CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTY3JvbGxiYXIuaCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNjcm9sbGJhci5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBlY2FjODZhMDEzNzc2N2FhOGY0NzRjNjA2ZDM2MWFlZDExZGY5YjFh
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNjcm9sbGJhci5oCisrKyAvZGV2L251bGwKQEAgLTEs
MTA1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1l
dDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIFdlYlNjcm9sbGJhcl9oCi0jZGVmaW5lIFdlYlNjcm9sbGJhcl9o
Ci0KLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJDYW52YXMuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9X
ZWJDb21tb24uaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYklucHV0RXZlbnQ7
Ci1jbGFzcyBXZWJQbHVnaW5Db250YWluZXI7Ci1jbGFzcyBXZWJTY3JvbGxiYXJDbGllbnQ7Ci1z
dHJ1Y3QgV2ViUmVjdDsKLQotY2xhc3MgV2ViU2Nyb2xsYmFyIHsKLXB1YmxpYzoKLSAgICBlbnVt
IE9yaWVudGF0aW9uIHsKLSAgICAgICAgSG9yaXpvbnRhbCwKLSAgICAgICAgVmVydGljYWwKLSAg
ICB9OwotCi0gICAgZW51bSBTY3JvbGxEaXJlY3Rpb24gewotICAgICAgICBTY3JvbGxCYWNrd2Fy
ZCwKLSAgICAgICAgU2Nyb2xsRm9yd2FyZAotICAgIH07Ci0KLSAgICBlbnVtIFNjcm9sbEdyYW51
bGFyaXR5IHsKLSAgICAgICAgU2Nyb2xsQnlMaW5lLAotICAgICAgICBTY3JvbGxCeVBhZ2UsCi0g
ICAgICAgIFNjcm9sbEJ5RG9jdW1lbnQsCi0gICAgICAgIFNjcm9sbEJ5UGl4ZWwKLSAgICB9Owot
Ci0gICAgLy8gQ3JlYXRlcyBhIFdlYlNjcm9sbGJhciBmb3IgdXNlIGJ5IGEgcGx1Z2luLiBUaGUg
cGx1Z2luIGNvbnRhaW5lciBhbmQKLSAgICAvLyBjbGllbnQgYXJlIGd1YXJhbnRlZWQgdG8gb3V0
bGl2ZSB0aGlzIG9iamVjdC4KLSAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBXZWJTY3JvbGxiYXIq
IGNyZWF0ZUZvclBsdWdpbihPcmllbnRhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJQbHVnaW5Db250YWluZXIqLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlNjcm9s
bGJhckNsaWVudCopOwotCi0gICAgdmlydHVhbCB+V2ViU2Nyb2xsYmFyKCkge30KLQotICAgIC8v
IEdldHMgdGhlIHRoaWNrbmVzcyBvZiB0aGUgc2Nyb2xsYmFyIGluIHBpeGVscy4KLSAgICBXRUJL
SVRfRVhQT1JUIHN0YXRpYyBpbnQgZGVmYXVsdFRoaWNrbmVzcygpOwotCi0gICAgLy8gUmV0dXJu
IHRydWUgaWYgdGhpcyBpcyBhbiBvdmVybGF5IHNjcm9sbGJhci4KLSAgICB2aXJ0dWFsIGJvb2wg
aXNPdmVybGF5KCkgY29uc3QgPSAwOwotCi0gICAgLy8gU2V0cyB0aGUgcmVjdGFuZ2xlIG9mIHRo
ZSBzY3JvbGxiYXIuCi0gICAgdmlydHVhbCB2b2lkIHNldExvY2F0aW9uKGNvbnN0IFdlYlJlY3Qm
KSA9IDA7Ci0KLSAgICAvLyBHZXRzIHRoZSBjdXJyZW50IHZhbHVlIChpLmUuIHBvc2l0aW9uIGlu
c2lkZSB0aGUgcmVnaW9uKS4KLSAgICB2aXJ0dWFsIGludCB2YWx1ZSgpIGNvbnN0ID0gMDsKLQot
ICAgIC8vIFNldHMgdGhlIGN1cnJlbnQgdmFsdWUuCi0gICAgdmlydHVhbCB2b2lkIHNldFZhbHVl
KGludCBwb3NpdGlvbikgPSAwOwotCi0gICAgLy8gU2V0cyB0aGUgc2l6ZSBvZiB0aGUgc2Nyb2xs
YWJsZSByZWdpb24gaW4gcGl4ZWxzLiAgaS5lLiBpZiBhIGRvY3VtZW50IGlzCi0gICAgLy8gODAw
eDEwMDAwIHBpeGVscyBhbmQgdGhlIHZpZXdwb3J0IGlzIDEwMDB4MTAwMCBwaXhlbHMsIHRoZW4g
c2V0TG9jYXRpb24KLSAgICAvLyBmb3IgdGhlIHZlcnRpY2FsIHNjcm9sbGJhciB3b3VsZCBoYXZl
IHBhc3NlZCBpbiBhIHJlY3RhbmdsZSBsaWtlOgotICAgIC8vICAgICAgICAgICAgKDgwMCAtIGRl
ZmF1bHRUaGlja25lc3MoKSwgMCkgKGRlZmF1bHRUaGlja25lc3MoKSB4IDEwMDAwKQotICAgIC8v
IGFuZCBzZXREb2N1bWVudFNpemUoMTAwMDApCi0gICAgdmlydHVhbCB2b2lkIHNldERvY3VtZW50
U2l6ZShpbnQgc2l6ZSkgPSAwOwotCi0gICAgLy8gU2Nyb2xsIGJhY2sgb3IgZm9yd2FyZCB3aXRo
IHRoZSBnaXZlbiBncmFudWxhcml0eS4KLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsKFNjcm9sbERp
cmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIpID0gMDsKLQotICAg
IC8vIFBhaW50IHRoZSBnaXZlbiByZWN0YW5nbGUuCi0gICAgdmlydHVhbCB2b2lkIHBhaW50KFdl
YkNhbnZhcyosIGNvbnN0IFdlYlJlY3QmKSA9IDA7Ci0KLSAgICAvLyBSZXR1cm5zIHRydWUgaWZm
IHRoZSBnaXZlbiBldmVudCB3YXMgdXNlZC4KLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlSW5wdXRF
dmVudChjb25zdCBXZWJJbnB1dEV2ZW50JikgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViU2Nyb2xsYmFyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJT
Y3JvbGxiYXJDbGllbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE5YjI5YjQ3
Mzk1ODliYzJlYmQzOTZjZjRmYjVkZjNmZWI3NzUxNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJT
Y3JvbGxiYXJDbGllbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJp
YnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdl
YlNjcm9sbGJhckNsaWVudF9oCi0jZGVmaW5lIFdlYlNjcm9sbGJhckNsaWVudF9oCi0KLW5hbWVz
cGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJTY3JvbGxiYXI7Ci1zdHJ1Y3QgV2ViUmVjdDsKLXRl
bXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBXZWJWZWN0b3I7Ci0KLWNsYXNzIFdlYlNjcm9sbGJh
ckNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChXZWJTY3Jv
bGxiYXIqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG92ZXJsYXlDaGFuZ2VkKFdlYlNjcm9sbGJh
ciopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoV2ViU2Ny
b2xsYmFyKiwgY29uc3QgV2ViUmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0VGlja21h
cmtzKFdlYlNjcm9sbGJhciosIFdlYlZlY3RvcjxXZWJSZWN0PiopIGNvbnN0ID0gMDsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0Fzc2VydE1hdGNoaW5nRW51bXMuY3BwIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHAKaW5kZXggNDAzMDg4YmM5MWVlMDdi
NWI3NDZiYTAxOTZkYWNhYjI2ZGFiZDNlMi4uMGY4NDQyYTc2OTc1NzQ5Mzc4Y2RjNzBlYmIzMDhh
YWFiNDRmMzIyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0
TWF0Y2hpbmdFbnVtcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0
TWF0Y2hpbmdFbnVtcy5jcHAKQEAgLTkzLDcgKzkzLDYgQEAKICNpbmNsdWRlICJXZWJNZWRpYVBs
YXllckNsaWVudC5oIgogI2luY2x1ZGUgIldlYk5vdGlmaWNhdGlvblByZXNlbnRlci5oIgogI2lu
Y2x1ZGUgIldlYlBhZ2VWaXNpYmlsaXR5U3RhdGUuaCIKLSNpbmNsdWRlICJXZWJTY3JvbGxiYXIu
aCIKICNpbmNsdWRlICJXZWJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIldlYlNwZWVjaFJlY29nbml6
ZXJDbGllbnQuaCIKICNpbmNsdWRlICJXZWJTdG9yYWdlUXVvdGFFcnJvci5oIgpAQCAtMTExLDYg
KzExMCw3IEBACiAjaW5jbHVkZSA8cHVibGljL1dlYkZpbGVTeXN0ZW0uaD4KICNpbmNsdWRlIDxw
dWJsaWMvV2ViRmlsdGVyT3BlcmF0aW9uLmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYlJlZmVycmVy
UG9saWN5Lmg+CisjaW5jbHVkZSA8cHVibGljL1dlYlNjcm9sbGJhci5oPgogI2luY2x1ZGUgPHB1
YmxpYy9XZWJVUkxSZXNwb25zZS5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvU2Nyb2xsYmFyR3JvdXAuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvU2Nyb2xsYmFyR3JvdXAuY3BwCmluZGV4IDE5ZmRiYWRlNDAwNDViMWU1ZThjNDExY2ZiM2I0
OGMzOGMxOTRhMzcuLjBlNjc2Y2I1ZjViNmNiM2UwYjE3YTI0MDY1YTFkYTI1YWQ3NmY3ZDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1Njcm9sbGJhckdyb3VwLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9TY3JvbGxiYXJHcm91cC5jcHAKQEAgLTI5
LDggKzI5LDggQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJTY3JvbGxiYXIu
aCIKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dlYlJl
Y3QuaCIKLSNpbmNsdWRlICJXZWJTY3JvbGxiYXJJbXBsLmgiCisjaW5jbHVkZSAiV2ViUGx1Z2lu
U2Nyb2xsYmFySW1wbC5oIgorI2luY2x1ZGUgPHB1YmxpYy9XZWJSZWN0Lmg+CiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCkBAIC01MCw3ICs1MCw3IEBAIFNjcm9sbGJhckdyb3VwOjp+U2Ny
b2xsYmFyR3JvdXAoKQogICAgIEFTU0VSVCghbV92ZXJ0aWNhbFNjcm9sbGJhcik7CiB9CiAKLXZv
aWQgU2Nyb2xsYmFyR3JvdXA6OnNjcm9sbGJhckNyZWF0ZWQoV2ViU2Nyb2xsYmFySW1wbCogc2Ny
b2xsYmFyKQordm9pZCBTY3JvbGxiYXJHcm91cDo6c2Nyb2xsYmFyQ3JlYXRlZChXZWJQbHVnaW5T
Y3JvbGxiYXJJbXBsKiBzY3JvbGxiYXIpCiB7CiAgICAgYm9vbCBoYWRTY3JvbGxiYXJzID0gbV9o
b3Jpem9udGFsU2Nyb2xsYmFyIHx8IG1fdmVydGljYWxTY3JvbGxiYXI7CiAgICAgaWYgKHNjcm9s
bGJhci0+c2Nyb2xsYmFyKCktPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikg
ewpAQCAtNjksNyArNjksNyBAQCB2b2lkIFNjcm9sbGJhckdyb3VwOjpzY3JvbGxiYXJDcmVhdGVk
KFdlYlNjcm9sbGJhckltcGwqIHNjcm9sbGJhcikKICAgICB9CiB9CiAKLXZvaWQgU2Nyb2xsYmFy
R3JvdXA6OnNjcm9sbGJhckRlc3Ryb3llZChXZWJTY3JvbGxiYXJJbXBsKiBzY3JvbGxiYXIpCit2
b2lkIFNjcm9sbGJhckdyb3VwOjpzY3JvbGxiYXJEZXN0cm95ZWQoV2ViUGx1Z2luU2Nyb2xsYmFy
SW1wbCogc2Nyb2xsYmFyKQogewogICAgIGlmIChzY3JvbGxiYXIgPT0gbV9ob3Jpem9udGFsU2Ny
b2xsYmFyKSB7CiAgICAgICAgIHdpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKHNjcm9sbGJh
ci0+c2Nyb2xsYmFyKCkpOwpAQCAtOTMsNyArOTMsNyBAQCB2b2lkIFNjcm9sbGJhckdyb3VwOjpz
ZXRMYXN0TW91c2VQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgcG9pbnQpCiAKIGludCBTY3JvbGxi
YXJHcm91cDo6c2Nyb2xsU2l6ZShXZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRh
dGlvbikgY29uc3QKIHsKLSAgICBXZWJTY3JvbGxiYXJJbXBsKiB3ZWJTY3JvbGxiYXIgPSBvcmll
bnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gbV9ob3Jpem9udGFsU2Nyb2xsYmFyIDog
bV92ZXJ0aWNhbFNjcm9sbGJhcjsKKyAgICBXZWJQbHVnaW5TY3JvbGxiYXJJbXBsKiB3ZWJTY3Jv
bGxiYXIgPSBvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gbV9ob3Jpem9udGFs
U2Nyb2xsYmFyIDogbV92ZXJ0aWNhbFNjcm9sbGJhcjsKICAgICBpZiAoIXdlYlNjcm9sbGJhcikK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSB3ZWJTY3JvbGxi
YXItPnNjcm9sbGJhcigpOwpAQCAtMTAyLDcgKzEwMiw3IEBAIGludCBTY3JvbGxiYXJHcm91cDo6
c2Nyb2xsU2l6ZShXZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29u
c3QKIAogaW50IFNjcm9sbGJhckdyb3VwOjpzY3JvbGxQb3NpdGlvbihTY3JvbGxiYXIqIHNjcm9s
bGJhcikgY29uc3QKIHsKLSAgICBXZWJTY3JvbGxiYXJJbXBsKiB3ZWJTY3JvbGxiYXIgPSBzY3Jv
bGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IG1faG9yaXpvbnRh
bFNjcm9sbGJhciA6IG1fdmVydGljYWxTY3JvbGxiYXI7CisgICAgV2ViUGx1Z2luU2Nyb2xsYmFy
SW1wbCogd2ViU2Nyb2xsYmFyID0gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250
YWxTY3JvbGxiYXIgPyBtX2hvcml6b250YWxTY3JvbGxiYXIgOiBtX3ZlcnRpY2FsU2Nyb2xsYmFy
OwogICAgIGlmICghd2ViU2Nyb2xsYmFyKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4g
d2ViU2Nyb2xsYmFyLT5zY3JvbGxPZmZzZXQoKTsKQEAgLTIyNSwxNCArMjI1LDE0IEBAIEludFNp
emUgU2Nyb2xsYmFyR3JvdXA6OmNvbnRlbnRzU2l6ZSgpIGNvbnN0CiAgICAgZWxzZSBpZiAobV92
ZXJ0aWNhbFNjcm9sbGJhcikgewogICAgICAgICBzaXplLnNldFdpZHRoKG1fdmVydGljYWxTY3Jv
bGxiYXItPnNjcm9sbGJhcigpLT54KCkpOwogICAgICAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJh
ci0+c2Nyb2xsYmFyKCktPmlzT3ZlcmxheVNjcm9sbGJhcigpKQotICAgICAgICAgICAgc2l6ZS5l
eHBhbmQoV2ViU2Nyb2xsYmFyOjpkZWZhdWx0VGhpY2tuZXNzKCksIDApOworICAgICAgICAgICAg
c2l6ZS5leHBhbmQoV2ViUGx1Z2luU2Nyb2xsYmFyOjpkZWZhdWx0VGhpY2tuZXNzKCksIDApOwog
ICAgIH0KICAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikKICAgICAgICAgc2l6ZS5zZXRIZWln
aHQobV92ZXJ0aWNhbFNjcm9sbGJhci0+c2Nyb2xsYmFyKCktPnRvdGFsU2l6ZSgpKTsKICAgICBl
bHNlIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpIHsKICAgICAgICAgc2l6ZS5zZXRIZWlnaHQo
bV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zY3JvbGxiYXIoKS0+eSgpKTsKICAgICAgICAgaWYgKG1f
aG9yaXpvbnRhbFNjcm9sbGJhci0+c2Nyb2xsYmFyKCktPmlzT3ZlcmxheVNjcm9sbGJhcigpKQot
ICAgICAgICAgICAgc2l6ZS5leHBhbmQoMCwgV2ViU2Nyb2xsYmFyOjpkZWZhdWx0VGhpY2tuZXNz
KCkpOworICAgICAgICAgICAgc2l6ZS5leHBhbmQoMCwgV2ViUGx1Z2luU2Nyb2xsYmFyOjpkZWZh
dWx0VGhpY2tuZXNzKCkpOwogICAgIH0KICAgICByZXR1cm4gc2l6ZTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1Njcm9sbGJhckdyb3VwLmggYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9TY3JvbGxiYXJHcm91cC5oCmluZGV4IGFlYjQ0MDUyZjcyMTJmMDEw
NzI3YTgwYzgxOTJjMDQ1ZGM0NWQ4NmUuLmEwNDc5YzIwNjI3ZDdiZjE0NTE0NDg5MTkyZDczZDUx
NjgzOGRmYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1Njcm9sbGJh
ckdyb3VwLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU2Nyb2xsYmFyR3JvdXAu
aApAQCAtMzYsMTUgKzM2LDE1IEBAIGNsYXNzIEZyYW1lVmlldzsKIAogbmFtZXNwYWNlIFdlYktp
dCB7CiAKLWNsYXNzIFdlYlNjcm9sbGJhckltcGw7CitjbGFzcyBXZWJQbHVnaW5TY3JvbGxiYXJJ
bXBsOwogCiBjbGFzcyBTY3JvbGxiYXJHcm91cCA6IHB1YmxpYyBXZWJDb3JlOjpTY3JvbGxhYmxl
QXJlYSB7CiBwdWJsaWM6CiAgICAgU2Nyb2xsYmFyR3JvdXAoV2ViQ29yZTo6RnJhbWVWaWV3Kiwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZnJhbWVSZWN0KTsKICAgICB+U2Nyb2xsYmFyR3JvdXAo
KTsKIAotICAgIHZvaWQgc2Nyb2xsYmFyQ3JlYXRlZChXZWJTY3JvbGxiYXJJbXBsKik7Ci0gICAg
dm9pZCBzY3JvbGxiYXJEZXN0cm95ZWQoV2ViU2Nyb2xsYmFySW1wbCopOworICAgIHZvaWQgc2Ny
b2xsYmFyQ3JlYXRlZChXZWJQbHVnaW5TY3JvbGxiYXJJbXBsKik7CisgICAgdm9pZCBzY3JvbGxi
YXJEZXN0cm95ZWQoV2ViUGx1Z2luU2Nyb2xsYmFySW1wbCopOwogICAgIHZvaWQgc2V0TGFzdE1v
dXNlUG9zaXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKICAgICB2b2lkIHNldEZyYW1l
UmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAKQEAgLTc5LDggKzc5LDggQEAgcHJpdmF0
ZToKICAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIG1fZnJhbWVWaWV3OwogICAgIFdlYkNvcmU6Oklu
dFBvaW50IG1fbGFzdE1vdXNlUG9zaXRpb247CiAgICAgV2ViQ29yZTo6SW50UmVjdCBtX2ZyYW1l
UmVjdDsKLSAgICBXZWJTY3JvbGxiYXJJbXBsKiBtX2hvcml6b250YWxTY3JvbGxiYXI7Ci0gICAg
V2ViU2Nyb2xsYmFySW1wbCogbV92ZXJ0aWNhbFNjcm9sbGJhcjsKKyAgICBXZWJQbHVnaW5TY3Jv
bGxiYXJJbXBsKiBtX2hvcml6b250YWxTY3JvbGxiYXI7CisgICAgV2ViUGx1Z2luU2Nyb2xsYmFy
SW1wbCogbV92ZXJ0aWNhbFNjcm9sbGJhcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGx1Z2luU2Nyb2xsYmFy
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5TY3JvbGxiYXJJ
bXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iMGY2M2E3ZTRhMGQ2MTMxNGJhNTJiOGYyNjhhNGU2NDQ5MzVk
ODBhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGx1
Z2luU2Nyb2xsYmFySW1wbC5jcHAKQEAgLTAsMCArMSwyODcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJQbHVnaW5TY3JvbGxiYXJJbXBsLmgiCisK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJLZXlib2FyZENvZGVzLmgi
CisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKKyNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgor
I2luY2x1ZGUgIlNjcm9sbGJhci5oIgorI2luY2x1ZGUgIlNjcm9sbGJhckdyb3VwLmgiCisjaW5j
bHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKKyNpbmNsdWRlICJXZWJJbnB1dEV2ZW50LmgiCisjaW5j
bHVkZSAiV2ViSW5wdXRFdmVudENvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJXZWJQbHVnaW5Db250
YWluZXJJbXBsLmgiCisjaW5jbHVkZSAiV2ViUGx1Z2luU2Nyb2xsYmFyQ2xpZW50LmgiCisjaW5j
bHVkZSAiV2ViVmlld0ltcGwuaCIKKyNpbmNsdWRlICJwYWludGluZy9HcmFwaGljc0NvbnRleHRC
dWlsZGVyLmgiCisjaW5jbHVkZSA8cHVibGljL1dlYkNhbnZhcy5oPgorI2luY2x1ZGUgPHB1Ymxp
Yy9XZWJSZWN0Lmg+CisjaW5jbHVkZSA8cHVibGljL1dlYlZlY3Rvci5oPgorCit1c2luZyBuYW1l
c3BhY2Ugc3RkOwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitXZWJQbHVnaW5TY3JvbGxiYXIqIFdlYlBsdWdpblNjcm9sbGJhcjo6Y3JlYXRlRm9yUGx1
Z2luKE9yaWVudGF0aW9uIG9yaWVudGF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJQbHVnaW5Db250YWluZXIqIHBsdWdpbkNv
bnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgV2ViUGx1Z2luU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQpCit7CisgICAgV2ViUGx1
Z2luQ29udGFpbmVySW1wbCogcGx1Z2luID0gc3RhdGljX2Nhc3Q8V2ViUGx1Z2luQ29udGFpbmVy
SW1wbCo+KHBsdWdpbkNvbnRhaW5lcik7CisgICAgcmV0dXJuIG5ldyBXZWJQbHVnaW5TY3JvbGxi
YXJJbXBsKG9yaWVudGF0aW9uLCBwbHVnaW4tPnNjcm9sbGJhckdyb3VwKCksIGNsaWVudCk7Cit9
CisKK2ludCBXZWJQbHVnaW5TY3JvbGxiYXI6OmRlZmF1bHRUaGlja25lc3MoKQoreworICAgIHJl
dHVybiBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS0+c2Nyb2xsYmFyVGhpY2tuZXNzKCk7Cit9CisK
K1dlYlBsdWdpblNjcm9sbGJhckltcGw6OldlYlBsdWdpblNjcm9sbGJhckltcGwoT3JpZW50YXRp
b24gb3JpZW50YXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjcm9s
bGJhckdyb3VwKiBncm91cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2Vi
UGx1Z2luU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX2dyb3VwKGdyb3VwKQorICAg
ICwgbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9zY3JvbGxPZmZzZXQoMCkKK3sKKyAgICBtX3Nj
cm9sbGJhciA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKAorICAgICAgICBzdGF0
aWNfY2FzdDxTY3JvbGxhYmxlQXJlYSo+KG1fZ3JvdXApLAorICAgICAgICBzdGF0aWNfY2FzdDxT
Y3JvbGxiYXJPcmllbnRhdGlvbj4ob3JpZW50YXRpb24pLAorICAgICAgICBSZWd1bGFyU2Nyb2xs
YmFyKTsKKyAgICBtX2dyb3VwLT5zY3JvbGxiYXJDcmVhdGVkKHRoaXMpOworfQorCitXZWJQbHVn
aW5TY3JvbGxiYXJJbXBsOjp+V2ViUGx1Z2luU2Nyb2xsYmFySW1wbCgpCit7CisgICAgbV9ncm91
cC0+c2Nyb2xsYmFyRGVzdHJveWVkKHRoaXMpOworfQorCit2b2lkIFdlYlBsdWdpblNjcm9sbGJh
ckltcGw6OnNldFNjcm9sbE9mZnNldChpbnQgc2Nyb2xsT2Zmc2V0KQoreworICAgIG1fc2Nyb2xs
T2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0OworICAgIG1fY2xpZW50LT52YWx1ZUNoYW5nZWQodGhpcyk7
Cit9CisKK3ZvaWQgV2ViUGx1Z2luU2Nyb2xsYmFySW1wbDo6aW52YWxpZGF0ZVNjcm9sbGJhclJl
Y3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBXZWJSZWN0IHdlYnJlY3QocmVjdCk7Cisg
ICAgd2VicmVjdC54ICs9IG1fc2Nyb2xsYmFyLT54KCk7CisgICAgd2VicmVjdC55ICs9IG1fc2Ny
b2xsYmFyLT55KCk7CisgICAgbV9jbGllbnQtPmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KHRoaXMs
IHdlYnJlY3QpOworfQorCit2b2lkIFdlYlBsdWdpblNjcm9sbGJhckltcGw6OmdldFRpY2ttYXJr
cyhWZWN0b3I8SW50UmVjdD4mIHRpY2ttYXJrcykgY29uc3QKK3sKKyAgICBXZWJWZWN0b3I8V2Vi
UmVjdD4gdGlja3M7CisgICAgbV9jbGllbnQtPmdldFRpY2ttYXJrcyhjb25zdF9jYXN0PFdlYlBs
dWdpblNjcm9sbGJhckltcGwqPih0aGlzKSwgJnRpY2tzKTsKKyAgICB0aWNrbWFya3MucmVzaXpl
KHRpY2tzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0aWNrcy5zaXplKCk7
ICsraSkKKyAgICAgICAgdGlja21hcmtzW2ldID0gdGlja3NbaV07Cit9CisKK0ludFBvaW50IFdl
YlBsdWdpblNjcm9sbGJhckltcGw6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJh
cihjb25zdCBJbnRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0Cit7CisgICAgSW50UG9pbnQgb2Zm
c2V0KHBhcmVudFBvaW50LngoKSAtIG1fc2Nyb2xsYmFyLT54KCksIHBhcmVudFBvaW50LnkoKSAt
IG1fc2Nyb2xsYmFyLT55KCkpOworICAgIHJldHVybiBtX3Njcm9sbGJhci0+V2lkZ2V0Ojpjb252
ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KG9mZnNldCk7Cit9CisKK3ZvaWQgV2ViUGx1Z2luU2Nyb2xs
YmFySW1wbDo6c2Nyb2xsYmFyU3R5bGVDaGFuZ2VkKCkKK3sKKyAgICBtX2NsaWVudC0+b3Zlcmxh
eUNoYW5nZWQodGhpcyk7Cit9CisKK2Jvb2wgV2ViUGx1Z2luU2Nyb2xsYmFySW1wbDo6aXNPdmVy
bGF5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJh
cigpOworfQorCitpbnQgV2ViUGx1Z2luU2Nyb2xsYmFySW1wbDo6dmFsdWUoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3Njcm9sbE9mZnNldDsKK30KKwordm9pZCBXZWJQbHVnaW5TY3JvbGxiYXJJ
bXBsOjpzZXRMb2NhdGlvbihjb25zdCBXZWJSZWN0JiByZWN0KQoreworICAgIEludFJlY3Qgb2xk
UmVjdCA9IG1fc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKTsKKyAgICBtX3Njcm9sbGJhci0+c2V0RnJh
bWVSZWN0KHJlY3QpOworICAgIGlmIChXZWJSZWN0KG9sZFJlY3QpICE9IHJlY3QpCisgICAgICBt
X3Njcm9sbGJhci0+aW52YWxpZGF0ZSgpOworCisgICAgaW50IGxlbmd0aCA9IG1fc2Nyb2xsYmFy
LT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBtX3Njcm9sbGJhci0+d2lk
dGgoKSA6IG1fc2Nyb2xsYmFyLT5oZWlnaHQoKTsKKyAgICBpbnQgcGFnZVN0ZXAgPSBtYXgobWF4
KHN0YXRpY19jYXN0PGludD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KGxlbmd0aCkgKiBTY3JvbGxiYXI6
Om1pbkZyYWN0aW9uVG9TdGVwV2hlblBhZ2luZygpKSwgbGVuZ3RoIC0gU2Nyb2xsYmFyOjptYXhP
dmVybGFwQmV0d2VlblBhZ2VzKCkpLCAxKTsKKyAgICBtX3Njcm9sbGJhci0+c2V0U3RlcHMoU2Ny
b2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7CisgICAgbV9zY3JvbGxiYXIt
PnNldEVuYWJsZWQobV9zY3JvbGxiYXItPnRvdGFsU2l6ZSgpID4gbGVuZ3RoKTsKKyAgICBtX3Nj
cm9sbGJhci0+c2V0UHJvcG9ydGlvbihsZW5ndGgsIG1fc2Nyb2xsYmFyLT50b3RhbFNpemUoKSk7
Cit9CisKK3ZvaWQgV2ViUGx1Z2luU2Nyb2xsYmFySW1wbDo6c2V0VmFsdWUoaW50IHBvc2l0aW9u
KQoreworICAgIG1fZ3JvdXAtPnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihtX3Njcm9s
bGJhci0+b3JpZW50YXRpb24oKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBvc2l0aW9uKSk7Cit9CisK
K3ZvaWQgV2ViUGx1Z2luU2Nyb2xsYmFySW1wbDo6c2V0RG9jdW1lbnRTaXplKGludCBzaXplKQor
eworICAgIGludCBsZW5ndGggPSBtX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9u
dGFsU2Nyb2xsYmFyID8gbV9zY3JvbGxiYXItPndpZHRoKCkgOiBtX3Njcm9sbGJhci0+aGVpZ2h0
KCk7CisgICAgbV9zY3JvbGxiYXItPnNldEVuYWJsZWQoc2l6ZSA+IGxlbmd0aCk7CisgICAgbV9z
Y3JvbGxiYXItPnNldFByb3BvcnRpb24obGVuZ3RoLCBzaXplKTsKK30KKwordm9pZCBXZWJQbHVn
aW5TY3JvbGxiYXJJbXBsOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xs
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIpCit7CisgICAgV2ViQ29y
ZTo6U2Nyb2xsRGlyZWN0aW9uIGRpcjsKKyAgICBib29sIGhvcml6b250YWwgPSBtX3Njcm9sbGJh
ci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyOworICAgIGlmIChkaXJlY3Rp
b24gPT0gU2Nyb2xsRm9yd2FyZCkKKyAgICAgICAgZGlyID0gaG9yaXpvbnRhbCA/IFNjcm9sbFJp
Z2h0IDogU2Nyb2xsRG93bjsKKyAgICBlbHNlCisgICAgICAgIGRpciA9IGhvcml6b250YWwgPyBT
Y3JvbGxMZWZ0IDogU2Nyb2xsVXA7CisKKyAgICBtX2dyb3VwLT5zY3JvbGwoZGlyLCBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpTY3JvbGxHcmFudWxhcml0eT4oZ3JhbnVsYXJpdHkpLCBtdWx0aXBsaWVy
KTsKK30KKwordm9pZCBXZWJQbHVnaW5TY3JvbGxiYXJJbXBsOjpwYWludChXZWJDYW52YXMqIGNh
bnZhcywgY29uc3QgV2ViUmVjdCYgcmVjdCkKK3sKKyAgICBtX3Njcm9sbGJhci0+cGFpbnQoJkdy
YXBoaWNzQ29udGV4dEJ1aWxkZXIoY2FudmFzKS5jb250ZXh0KCksIHJlY3QpOworfQorCitib29s
IFdlYlBsdWdpblNjcm9sbGJhckltcGw6OmhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2ViSW5wdXRF
dmVudCYgZXZlbnQpCit7CisgICAgc3dpdGNoIChldmVudC50eXBlKSB7CisgICAgY2FzZSBXZWJJ
bnB1dEV2ZW50OjpNb3VzZURvd246CisgICAgICAgIHJldHVybiBvbk1vdXNlRG93bihldmVudCk7
CisgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpNb3VzZVVwOgorICAgICAgICByZXR1cm4gb25Nb3Vz
ZVVwKGV2ZW50KTsKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6Ok1vdXNlTW92ZToKKyAgICAgICAg
cmV0dXJuIG9uTW91c2VNb3ZlKGV2ZW50KTsKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6Ok1vdXNl
TGVhdmU6CisgICAgICAgIHJldHVybiBvbk1vdXNlTGVhdmUoZXZlbnQpOworICAgIGNhc2UgV2Vi
SW5wdXRFdmVudDo6TW91c2VXaGVlbDoKKyAgICAgICAgcmV0dXJuIG9uTW91c2VXaGVlbChldmVu
dCk7CisgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpLZXlEb3duOgorICAgICAgICByZXR1cm4gb25L
ZXlEb3duKGV2ZW50KTsKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6OlVuZGVmaW5lZDoKKyAgICBj
YXNlIFdlYklucHV0RXZlbnQ6Ok1vdXNlRW50ZXI6CisgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpS
YXdLZXlEb3duOgorICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6S2V5VXA6CisgICAgY2FzZSBXZWJJ
bnB1dEV2ZW50OjpDaGFyOgorICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6VG91Y2hTdGFydDoKKyAg
ICBjYXNlIFdlYklucHV0RXZlbnQ6OlRvdWNoTW92ZToKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6
OlRvdWNoRW5kOgorICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6VG91Y2hDYW5jZWw6CisgICAgZGVm
YXVsdDoKKyAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgV2ViUGx1Z2luU2Nyb2xsYmFySW1wbDo6b25Nb3VzZURvd24oY29uc3QgV2ViSW5wdXRFdmVu
dCYgZXZlbnQpCit7CisgICAgV2ViTW91c2VFdmVudCBtb3VzZWRvd24gPSAqc3RhdGljX2Nhc3Q8
Y29uc3QgV2ViTW91c2VFdmVudCo+KCZldmVudCk7CisgICAgaWYgKCFtX3Njcm9sbGJhci0+ZnJh
bWVSZWN0KCkuY29udGFpbnMobW91c2Vkb3duLngsIG1vdXNlZG93bi55KSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgbW91c2Vkb3duLnggLT0gbV9zY3JvbGxiYXItPngoKTsKKyAgICBt
b3VzZWRvd24ueSAtPSBtX3Njcm9sbGJhci0+eSgpOworICAgIG1fc2Nyb2xsYmFyLT5tb3VzZURv
d24oUGxhdGZvcm1Nb3VzZUV2ZW50QnVpbGRlcihtX3Njcm9sbGJhci5nZXQoKSwgbW91c2Vkb3du
KSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViUGx1Z2luU2Nyb2xsYmFySW1wbDo6
b25Nb3VzZVVwKGNvbnN0IFdlYklucHV0RXZlbnQmIGV2ZW50KQoreworICAgIFdlYk1vdXNlRXZl
bnQgbW91c2V1cCA9ICpzdGF0aWNfY2FzdDxjb25zdCBXZWJNb3VzZUV2ZW50Kj4oJmV2ZW50KTsK
KyAgICBpZiAobV9zY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgPT0gTm9QYXJ0KQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbV9zY3JvbGxiYXItPm1vdXNlVXAoUGxhdGZvcm1N
b3VzZUV2ZW50QnVpbGRlcihtX3Njcm9sbGJhci5nZXQoKSwgbW91c2V1cCkpOworfQorCitib29s
IFdlYlBsdWdpblNjcm9sbGJhckltcGw6Om9uTW91c2VNb3ZlKGNvbnN0IFdlYklucHV0RXZlbnQm
IGV2ZW50KQoreworICAgIFdlYk1vdXNlRXZlbnQgbW91c2Vtb3ZlID0gKnN0YXRpY19jYXN0PGNv
bnN0IFdlYk1vdXNlRXZlbnQqPigmZXZlbnQpOworICAgIGlmIChtX3Njcm9sbGJhci0+ZnJhbWVS
ZWN0KCkuY29udGFpbnMobW91c2Vtb3ZlLngsIG1vdXNlbW92ZS55KQorICAgICAgICB8fCBtX3Nj
cm9sbGJhci0+cHJlc3NlZFBhcnQoKSAhPSBOb1BhcnQpIHsKKyAgICAgICAgbW91c2Vtb3ZlLngg
LT0gbV9zY3JvbGxiYXItPngoKTsKKyAgICAgICAgbW91c2Vtb3ZlLnkgLT0gbV9zY3JvbGxiYXIt
PnkoKTsKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYmFyLT5tb3VzZU1vdmVkKFBsYXRmb3JtTW91
c2VFdmVudEJ1aWxkZXIobV9zY3JvbGxiYXIuZ2V0KCksIG1vdXNlbW92ZSkpOworICAgIH0KKwor
ICAgIGlmIChtX3Njcm9sbGJhci0+aG92ZXJlZFBhcnQoKSAhPSBOb1BhcnQgJiYgIW1fc2Nyb2xs
YmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkKKyAgICAgICAgbV9zY3JvbGxiYXItPm1vdXNlRXhp
dGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFdlYlBsdWdpblNjcm9sbGJhcklt
cGw6Om9uTW91c2VMZWF2ZShjb25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCkKK3sKKyAgICBpZiAo
bV9zY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgIT0gTm9QYXJ0KQorICAgICAgICBtX3Njcm9sbGJh
ci0+bW91c2VFeGl0ZWQoKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBXZWJQbHVn
aW5TY3JvbGxiYXJJbXBsOjpvbk1vdXNlV2hlZWwoY29uc3QgV2ViSW5wdXRFdmVudCYgZXZlbnQp
Cit7CisgICAgV2ViTW91c2VXaGVlbEV2ZW50IG1vdXNld2hlZWwgPSAqc3RhdGljX2Nhc3Q8Y29u
c3QgV2ViTW91c2VXaGVlbEV2ZW50Kj4oJmV2ZW50KTsKKyAgICBQbGF0Zm9ybVdoZWVsRXZlbnRC
dWlsZGVyIHBsYXRmb3JtRXZlbnQobV9zY3JvbGxiYXIuZ2V0KCksIG1vdXNld2hlZWwpOworICAg
IHJldHVybiBtX2dyb3VwLT5oYW5kbGVXaGVlbEV2ZW50KHBsYXRmb3JtRXZlbnQpOworfQorCiti
b29sIFdlYlBsdWdpblNjcm9sbGJhckltcGw6Om9uS2V5RG93bihjb25zdCBXZWJJbnB1dEV2ZW50
JiBldmVudCkKK3sKKyAgICBXZWJLZXlib2FyZEV2ZW50IGtleWJvYXJkID0gKnN0YXRpY19jYXN0
PGNvbnN0IFdlYktleWJvYXJkRXZlbnQqPigmZXZlbnQpOworICAgIGludCBrZXlDb2RlOworICAg
IC8vIFdlIGhhdmUgdG8gZHVwbGljYXRlIHRoaXMgbG9naWMgZnJvbSBXZWJWaWV3SW1wbCBiZWNh
dXNlIHRoZXJlIGl0IHVzZXMKKyAgICAvLyBDaGFyIGFuZCBSYXdLZXlEb3duIGV2ZW50cywgd2hp
Y2ggZG9uJ3QgZXhpc3QgYXQgdGhpcyBwb2ludC4KKyAgICBpZiAoa2V5Ym9hcmQud2luZG93c0tl
eUNvZGUgPT0gVktFWV9TUEFDRSkKKyAgICAgICAga2V5Q29kZSA9ICgoa2V5Ym9hcmQubW9kaWZp
ZXJzICYgV2ViSW5wdXRFdmVudDo6U2hpZnRLZXkpID8gVktFWV9QUklPUiA6IFZLRVlfTkVYVCk7
CisgICAgZWxzZSB7CisgICAgICAgIGlmIChrZXlib2FyZC5tb2RpZmllcnMgPT0gV2ViSW5wdXRF
dmVudDo6Q29udHJvbEtleSkgeworICAgICAgICAgICAgLy8gTWF0Y2ggRkYgYmVoYXZpb3IgaW4g
dGhlIHNlbnNlIHRoYXQgQ3RybCtob21lL2VuZCBhcmUgdGhlIG9ubHkgQ3RybAorICAgICAgICAg
ICAgLy8ga2V5IGNvbWJpbmF0aW9ucyB3aGljaCBhZmZlY3Qgc2Nyb2xsaW5nLiBTYWZhcmkgaXMg
YnVnZ3kgaW4gdGhlCisgICAgICAgICAgICAvLyBzZW5zZSB0aGF0IGl0IHNjcm9sbHMgdGhlIHBh
Z2UgZm9yIGFsbCBDdHJsK3Njcm9sbGluZyBrZXkKKyAgICAgICAgICAgIC8vIGNvbWJpbmF0aW9u
cy4gRm9yIGUuZy4gQ3RybCtwZ3VwL3BnZG4vdXAvZG93biwgZXRjLgorICAgICAgICAgICAgc3dp
dGNoIChrZXlib2FyZC53aW5kb3dzS2V5Q29kZSkgeworICAgICAgICAgICAgY2FzZSBWS0VZX0hP
TUU6CisgICAgICAgICAgICBjYXNlIFZLRVlfRU5EOgorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoa2V5Ym9hcmQuaXNTeXN0ZW1LZXkg
fHwgKGtleWJvYXJkLm1vZGlmaWVycyAmIFdlYklucHV0RXZlbnQ6OlNoaWZ0S2V5KSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBrZXlDb2RlID0ga2V5Ym9hcmQud2luZG93
c0tleUNvZGU7CisgICAgfQorICAgIFdlYkNvcmU6OlNjcm9sbERpcmVjdGlvbiBzY3JvbGxEaXJl
Y3Rpb247CisgICAgV2ViQ29yZTo6U2Nyb2xsR3JhbnVsYXJpdHkgc2Nyb2xsR3JhbnVsYXJpdHk7
CisgICAgaWYgKFdlYlZpZXdJbXBsOjptYXBLZXlDb2RlRm9yU2Nyb2xsKGtleUNvZGUsICZzY3Jv
bGxEaXJlY3Rpb24sICZzY3JvbGxHcmFudWxhcml0eSkpIHsKKyAgICAgICAgLy8gV2lsbCByZXR1
cm4gZmFsc2UgaWYgc2Nyb2xsIGRpcmVjdGlvbiB3YXNuJ3QgY29tcGF0aWJsZSB3aXRoIHRoaXMg
c2Nyb2xsYmFyLgorICAgICAgICByZXR1cm4gbV9ncm91cC0+c2Nyb2xsKHNjcm9sbERpcmVjdGlv
biwgc2Nyb2xsR3JhbnVsYXJpdHkpOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViUGx1Z2luU2Nyb2xsYmFySW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViUGx1Z2luU2Nyb2xsYmFySW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI0MmNiODJmZDk1YjNmZThmMjY2
ZmQyZGQ3MWYxNTJlMTcwMjU0MzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJQbHVnaW5TY3JvbGxiYXJJbXBsLmgKQEAgLTAsMCArMSw4OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBXZWJQbHVnaW5TY3JvbGxiYXJJbXBsX2gKKyNkZWZpbmUgV2Vi
UGx1Z2luU2Nyb2xsYmFySW1wbF9oCisKKyNpbmNsdWRlICJXZWJQbHVnaW5TY3JvbGxiYXIuaCIK
KworI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEludFBvaW50OworY2xhc3MgSW50UmVjdDsKK2NsYXNz
IFNjcm9sbGJhcjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFNjcm9sbGJhckdy
b3VwOworCitjbGFzcyBXZWJQbHVnaW5TY3JvbGxiYXJJbXBsIDogcHVibGljIFdlYlBsdWdpblNj
cm9sbGJhciB7CitwdWJsaWM6CisgICAgV2ViUGx1Z2luU2Nyb2xsYmFySW1wbChPcmllbnRhdGlv
biwKKyAgICAgICAgICAgICAgICAgICAgIFNjcm9sbGJhckdyb3VwKiwKKyAgICAgICAgICAgICAg
ICAgICAgIFdlYlBsdWdpblNjcm9sbGJhckNsaWVudCopOworICAgIH5XZWJQbHVnaW5TY3JvbGxi
YXJJbXBsKCk7CisKKyAgICB2b2lkIHNldFNjcm9sbE9mZnNldChpbnQpOworICAgIHZvaWQgaW52
YWxpZGF0ZVNjcm9sbGJhclJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQg
Z2V0VGlja21hcmtzKFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiYpIGNvbnN0OworICAgIFdlYkNv
cmU6OkludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0OworICAgIHZvaWQgc2Nyb2xsYmFy
U3R5bGVDaGFuZ2VkKCk7CisKKyAgICBpbnQgc2Nyb2xsT2Zmc2V0KCkgeyByZXR1cm4gbV9zY3Jv
bGxPZmZzZXQ7IH0KKyAgICBXZWJDb3JlOjpTY3JvbGxiYXIqIHNjcm9sbGJhcigpIHsgcmV0dXJu
IG1fc2Nyb2xsYmFyLmdldCgpOyB9CisKKyAgICAvLyBXZWJLaXQ6OldlYlNjcm9sbGJhciBtZXRo
b2RzCisgICAgdmlydHVhbCBib29sIGlzT3ZlcmxheSgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50
IHZhbHVlKCkgY29uc3Q7CisKKyAgICAvLyBXZWJLaXQ6OldlYlBsdWdpblNjcm9sbGJhciBtZXRo
b2RzCisgICAgdmlydHVhbCB2b2lkIHNldExvY2F0aW9uKGNvbnN0IFdlYlJlY3QmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0VmFsdWUoaW50IHBvc2l0aW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
RG9jdW1lbnRTaXplKGludCk7CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbChTY3JvbGxEaXJlY3Rp
b24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcGFpbnQoV2ViQ2FudmFzKiwgY29uc3QgV2ViUmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBo
YW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmKTsKKworcHJpdmF0ZToKKyAgICBi
b29sIG9uTW91c2VEb3duKGNvbnN0IFdlYklucHV0RXZlbnQmKTsKKyAgICBib29sIG9uTW91c2VV
cChjb25zdCBXZWJJbnB1dEV2ZW50Jik7CisgICAgYm9vbCBvbk1vdXNlTW92ZShjb25zdCBXZWJJ
bnB1dEV2ZW50Jik7CisgICAgYm9vbCBvbk1vdXNlTGVhdmUoY29uc3QgV2ViSW5wdXRFdmVudCYp
OworICAgIGJvb2wgb25Nb3VzZVdoZWVsKGNvbnN0IFdlYklucHV0RXZlbnQmKTsKKyAgICBib29s
IG9uS2V5RG93bihjb25zdCBXZWJJbnB1dEV2ZW50Jik7CisKKyAgICBTY3JvbGxiYXJHcm91cCog
bV9ncm91cDsKKyAgICBXZWJQbHVnaW5TY3JvbGxiYXJDbGllbnQqIG1fY2xpZW50OworCisgICAg
aW50IG1fc2Nyb2xsT2Zmc2V0OworICAgIFJlZlB0cjxXZWJDb3JlOjpTY3JvbGxiYXI+IG1fc2Ny
b2xsYmFyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Nyb2xsYmFySW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggN2EzZWE5MGQ2NmMzZjY0OTE1MDc4MjNlMjdjZmY2M2YzZTNiZTQw
NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDI5MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0g
KiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0g
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYlNjcm9sbGJh
ckltcGwuaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIktleWJv
YXJkQ29kZXMuaCIKLSNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgotI2luY2x1ZGUgIlNjcm9s
bFR5cGVzLmgiCi0jaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCi0jaW5jbHVkZSAiU2Nyb2xsYmFyR3Jv
dXAuaCIKLSNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dl
YkNhbnZhcy5oIgotI2luY2x1ZGUgIldlYklucHV0RXZlbnQuaCIKLSNpbmNsdWRlICJXZWJJbnB1
dEV2ZW50Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgIldlYlBsdWdpbkNvbnRhaW5lckltcGwuaCIK
LSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJSZWN0LmgiCi0jaW5jbHVkZSAiV2ViU2Nyb2xsYmFyQ2xp
ZW50LmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViVmVjdG9yLmgiCi0jaW5jbHVkZSAiV2ViVmll
d0ltcGwuaCIKLSNpbmNsdWRlICJwYWludGluZy9HcmFwaGljc0NvbnRleHRCdWlsZGVyLmgiCi0K
LXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLVdlYlNjcm9sbGJhciogV2ViU2Nyb2xsYmFyOjpjcmVhdGVGb3JQbHVn
aW4oT3JpZW50YXRpb24gb3JpZW50YXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdlYlBsdWdpbkNvbnRhaW5lciogcGx1Z2luQ29udGFpbmVyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJTY3JvbGxiYXJDbGll
bnQqIGNsaWVudCkKLXsKLSAgICBXZWJQbHVnaW5Db250YWluZXJJbXBsKiBwbHVnaW4gPSBzdGF0
aWNfY2FzdDxXZWJQbHVnaW5Db250YWluZXJJbXBsKj4ocGx1Z2luQ29udGFpbmVyKTsKLSAgICBy
ZXR1cm4gbmV3IFdlYlNjcm9sbGJhckltcGwob3JpZW50YXRpb24sIHBsdWdpbi0+c2Nyb2xsYmFy
R3JvdXAoKSwgY2xpZW50KTsKLX0KLQotaW50IFdlYlNjcm9sbGJhcjo6ZGVmYXVsdFRoaWNrbmVz
cygpCi17Ci0gICAgcmV0dXJuIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLT5zY3JvbGxiYXJUaGlj
a25lc3MoKTsKLX0KLQotV2ViU2Nyb2xsYmFySW1wbDo6V2ViU2Nyb2xsYmFySW1wbChPcmllbnRh
dGlvbiBvcmllbnRhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Ny
b2xsYmFyR3JvdXAqIGdyb3VwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
ZWJTY3JvbGxiYXJDbGllbnQqIGNsaWVudCkKLSAgICA6IG1fZ3JvdXAoZ3JvdXApCi0gICAgLCBt
X2NsaWVudChjbGllbnQpCi0gICAgLCBtX3Njcm9sbE9mZnNldCgwKQotewotICAgIG1fc2Nyb2xs
YmFyID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIoCi0gICAgICAgIHN0YXRpY19j
YXN0PFNjcm9sbGFibGVBcmVhKj4obV9ncm91cCksCi0gICAgICAgIHN0YXRpY19jYXN0PFNjcm9s
bGJhck9yaWVudGF0aW9uPihvcmllbnRhdGlvbiksCi0gICAgICAgIFJlZ3VsYXJTY3JvbGxiYXIp
OwotICAgIG1fZ3JvdXAtPnNjcm9sbGJhckNyZWF0ZWQodGhpcyk7Ci19Ci0KLVdlYlNjcm9sbGJh
ckltcGw6On5XZWJTY3JvbGxiYXJJbXBsKCkKLXsKLSAgICBtX2dyb3VwLT5zY3JvbGxiYXJEZXN0
cm95ZWQodGhpcyk7Ci19Ci0KLXZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6c2V0U2Nyb2xsT2Zmc2V0
KGludCBzY3JvbGxPZmZzZXQpCi17Ci0gICAgbV9zY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQ7
Ci0gICAgbV9jbGllbnQtPnZhbHVlQ2hhbmdlZCh0aGlzKTsKLX0KLQotdm9pZCBXZWJTY3JvbGxi
YXJJbXBsOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQotewot
ICAgIFdlYlJlY3Qgd2VicmVjdChyZWN0KTsKLSAgICB3ZWJyZWN0LnggKz0gbV9zY3JvbGxiYXIt
PngoKTsKLSAgICB3ZWJyZWN0LnkgKz0gbV9zY3JvbGxiYXItPnkoKTsKLSAgICBtX2NsaWVudC0+
aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QodGhpcywgd2VicmVjdCk7Ci19Ci0KLXZvaWQgV2ViU2Ny
b2xsYmFySW1wbDo6Z2V0VGlja21hcmtzKFZlY3RvcjxJbnRSZWN0PiYgdGlja21hcmtzKSBjb25z
dAotewotICAgIFdlYlZlY3RvcjxXZWJSZWN0PiB0aWNrczsKLSAgICBtX2NsaWVudC0+Z2V0VGlj
a21hcmtzKGNvbnN0X2Nhc3Q8V2ViU2Nyb2xsYmFySW1wbCo+KHRoaXMpLCAmdGlja3MpOwotICAg
IHRpY2ttYXJrcy5yZXNpemUodGlja3Muc2l6ZSgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHRpY2tzLnNpemUoKTsgKytpKQotICAgICAgICB0aWNrbWFya3NbaV0gPSB0aWNrc1tpXTsK
LX0KLQotSW50UG9pbnQgV2ViU2Nyb2xsYmFySW1wbDo6Y29udmVydEZyb21Db250YWluaW5nVmll
d1RvU2Nyb2xsYmFyKGNvbnN0IEludFBvaW50JiBwYXJlbnRQb2ludCkgY29uc3QKLXsKLSAgICBJ
bnRQb2ludCBvZmZzZXQocGFyZW50UG9pbnQueCgpIC0gbV9zY3JvbGxiYXItPngoKSwgcGFyZW50
UG9pbnQueSgpIC0gbV9zY3JvbGxiYXItPnkoKSk7Ci0gICAgcmV0dXJuIG1fc2Nyb2xsYmFyLT5X
aWRnZXQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcob2Zmc2V0KTsKLX0KLQotdm9pZCBXZWJT
Y3JvbGxiYXJJbXBsOjpzY3JvbGxiYXJTdHlsZUNoYW5nZWQoKQotewotICAgIG1fY2xpZW50LT5v
dmVybGF5Q2hhbmdlZCh0aGlzKTsKLX0KLQotYm9vbCBXZWJTY3JvbGxiYXJJbXBsOjppc092ZXJs
YXkoKSBjb25zdAotewotICAgIHJldHVybiBtX3Njcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFy
KCk7Ci19Ci0KLXZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6c2V0TG9jYXRpb24oY29uc3QgV2ViUmVj
dCYgcmVjdCkKLXsKLSAgICBJbnRSZWN0IG9sZFJlY3QgPSBtX3Njcm9sbGJhci0+ZnJhbWVSZWN0
KCk7Ci0gICAgbV9zY3JvbGxiYXItPnNldEZyYW1lUmVjdChyZWN0KTsKLSAgICBpZiAoV2ViUmVj
dChvbGRSZWN0KSAhPSByZWN0KQotICAgICAgbV9zY3JvbGxiYXItPmludmFsaWRhdGUoKTsKLQot
ICAgIGludCBsZW5ndGggPSBtX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFs
U2Nyb2xsYmFyID8gbV9zY3JvbGxiYXItPndpZHRoKCkgOiBtX3Njcm9sbGJhci0+aGVpZ2h0KCk7
Ci0gICAgaW50IHBhZ2VTdGVwID0gbWF4KG1heChzdGF0aWNfY2FzdDxpbnQ+KHN0YXRpY19jYXN0
PGZsb2F0PihsZW5ndGgpICogU2Nyb2xsYmFyOjptaW5GcmFjdGlvblRvU3RlcFdoZW5QYWdpbmco
KSksIGxlbmd0aCAtIFNjcm9sbGJhcjo6bWF4T3ZlcmxhcEJldHdlZW5QYWdlcygpKSwgMSk7Ci0g
ICAgbV9zY3JvbGxiYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwg
cGFnZVN0ZXApOwotICAgIG1fc2Nyb2xsYmFyLT5zZXRFbmFibGVkKG1fc2Nyb2xsYmFyLT50b3Rh
bFNpemUoKSA+IGxlbmd0aCk7Ci0gICAgbV9zY3JvbGxiYXItPnNldFByb3BvcnRpb24obGVuZ3Ro
LCBtX3Njcm9sbGJhci0+dG90YWxTaXplKCkpOwotfQotCi1pbnQgV2ViU2Nyb2xsYmFySW1wbDo6
dmFsdWUoKSBjb25zdAotewotICAgIHJldHVybiBtX3Njcm9sbE9mZnNldDsKLX0KLQotdm9pZCBX
ZWJTY3JvbGxiYXJJbXBsOjpzZXRWYWx1ZShpbnQgcG9zaXRpb24pCi17Ci0gICAgbV9ncm91cC0+
c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigp
LCBzdGF0aWNfY2FzdDxmbG9hdD4ocG9zaXRpb24pKTsKLX0KLQotdm9pZCBXZWJTY3JvbGxiYXJJ
bXBsOjpzZXREb2N1bWVudFNpemUoaW50IHNpemUpCi17Ci0gICAgaW50IGxlbmd0aCA9IG1fc2Ny
b2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBtX3Njcm9sbGJh
ci0+d2lkdGgoKSA6IG1fc2Nyb2xsYmFyLT5oZWlnaHQoKTsKLSAgICBtX3Njcm9sbGJhci0+c2V0
RW5hYmxlZChzaXplID4gbGVuZ3RoKTsKLSAgICBtX3Njcm9sbGJhci0+c2V0UHJvcG9ydGlvbihs
ZW5ndGgsIHNpemUpOwotfQotCi12b2lkIFdlYlNjcm9sbGJhckltcGw6OnNjcm9sbChTY3JvbGxE
aXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQg
bXVsdGlwbGllcikKLXsKLSAgICBXZWJDb3JlOjpTY3JvbGxEaXJlY3Rpb24gZGlyOwotICAgIGJv
b2wgaG9yaXpvbnRhbCA9IG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxT
Y3JvbGxiYXI7Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBTY3JvbGxGb3J3YXJkKQotICAgICAgICBk
aXIgPSBob3Jpem9udGFsID8gU2Nyb2xsUmlnaHQgOiBTY3JvbGxEb3duOwotICAgIGVsc2UKLSAg
ICAgICAgZGlyID0gaG9yaXpvbnRhbCA/IFNjcm9sbExlZnQgOiBTY3JvbGxVcDsKLQotICAgIG1f
Z3JvdXAtPnNjcm9sbChkaXIsIHN0YXRpY19jYXN0PFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5
PihncmFudWxhcml0eSksIG11bHRpcGxpZXIpOwotfQotCi12b2lkIFdlYlNjcm9sbGJhckltcGw6
OnBhaW50KFdlYkNhbnZhcyogY2FudmFzLCBjb25zdCBXZWJSZWN0JiByZWN0KQotewotICAgIG1f
c2Nyb2xsYmFyLT5wYWludCgmR3JhcGhpY3NDb250ZXh0QnVpbGRlcihjYW52YXMpLmNvbnRleHQo
KSwgcmVjdCk7Ci19Ci0KLWJvb2wgV2ViU2Nyb2xsYmFySW1wbDo6aGFuZGxlSW5wdXRFdmVudChj
b25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCkKLXsKLSAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHsK
LSAgICBjYXNlIFdlYklucHV0RXZlbnQ6Ok1vdXNlRG93bjoKLSAgICAgICAgcmV0dXJuIG9uTW91
c2VEb3duKGV2ZW50KTsKLSAgICBjYXNlIFdlYklucHV0RXZlbnQ6Ok1vdXNlVXA6Ci0gICAgICAg
IHJldHVybiBvbk1vdXNlVXAoZXZlbnQpOwotICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6TW91c2VN
b3ZlOgotICAgICAgICByZXR1cm4gb25Nb3VzZU1vdmUoZXZlbnQpOwotICAgIGNhc2UgV2ViSW5w
dXRFdmVudDo6TW91c2VMZWF2ZToKLSAgICAgICAgcmV0dXJuIG9uTW91c2VMZWF2ZShldmVudCk7
Ci0gICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpNb3VzZVdoZWVsOgotICAgICAgICByZXR1cm4gb25N
b3VzZVdoZWVsKGV2ZW50KTsKLSAgICBjYXNlIFdlYklucHV0RXZlbnQ6OktleURvd246Ci0gICAg
ICAgIHJldHVybiBvbktleURvd24oZXZlbnQpOwotICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6VW5k
ZWZpbmVkOgotICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6TW91c2VFbnRlcjoKLSAgICBjYXNlIFdl
YklucHV0RXZlbnQ6OlJhd0tleURvd246Ci0gICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpLZXlVcDoK
LSAgICBjYXNlIFdlYklucHV0RXZlbnQ6OkNoYXI6Ci0gICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpU
b3VjaFN0YXJ0OgotICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6VG91Y2hNb3ZlOgotICAgIGNhc2Ug
V2ViSW5wdXRFdmVudDo6VG91Y2hFbmQ6Ci0gICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpUb3VjaENh
bmNlbDoKLSAgICBkZWZhdWx0OgotICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotYm9vbCBXZWJTY3JvbGxiYXJJbXBsOjpvbk1vdXNlRG93bihjb25zdCBXZWJJ
bnB1dEV2ZW50JiBldmVudCkKLXsKLSAgICBXZWJNb3VzZUV2ZW50IG1vdXNlZG93biA9ICpzdGF0
aWNfY2FzdDxjb25zdCBXZWJNb3VzZUV2ZW50Kj4oJmV2ZW50KTsKLSAgICBpZiAoIW1fc2Nyb2xs
YmFyLT5mcmFtZVJlY3QoKS5jb250YWlucyhtb3VzZWRvd24ueCwgbW91c2Vkb3duLnkpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtb3VzZWRvd24ueCAtPSBtX3Njcm9sbGJhci0+eCgp
OwotICAgIG1vdXNlZG93bi55IC09IG1fc2Nyb2xsYmFyLT55KCk7Ci0gICAgbV9zY3JvbGxiYXIt
Pm1vdXNlRG93bihQbGF0Zm9ybU1vdXNlRXZlbnRCdWlsZGVyKG1fc2Nyb2xsYmFyLmdldCgpLCBt
b3VzZWRvd24pKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJTY3JvbGxiYXJJbXBs
Ojpvbk1vdXNlVXAoY29uc3QgV2ViSW5wdXRFdmVudCYgZXZlbnQpCi17Ci0gICAgV2ViTW91c2VF
dmVudCBtb3VzZXVwID0gKnN0YXRpY19jYXN0PGNvbnN0IFdlYk1vdXNlRXZlbnQqPigmZXZlbnQp
OwotICAgIGlmIChtX3Njcm9sbGJhci0+cHJlc3NlZFBhcnQoKSA9PSBOb1BhcnQpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBtX3Njcm9sbGJhci0+bW91c2VVcChQbGF0Zm9y
bU1vdXNlRXZlbnRCdWlsZGVyKG1fc2Nyb2xsYmFyLmdldCgpLCBtb3VzZXVwKSk7Ci19Ci0KLWJv
b2wgV2ViU2Nyb2xsYmFySW1wbDo6b25Nb3VzZU1vdmUoY29uc3QgV2ViSW5wdXRFdmVudCYgZXZl
bnQpCi17Ci0gICAgV2ViTW91c2VFdmVudCBtb3VzZW1vdmUgPSAqc3RhdGljX2Nhc3Q8Y29uc3Qg
V2ViTW91c2VFdmVudCo+KCZldmVudCk7Ci0gICAgaWYgKG1fc2Nyb2xsYmFyLT5mcmFtZVJlY3Qo
KS5jb250YWlucyhtb3VzZW1vdmUueCwgbW91c2Vtb3ZlLnkpCi0gICAgICAgIHx8IG1fc2Nyb2xs
YmFyLT5wcmVzc2VkUGFydCgpICE9IE5vUGFydCkgewotICAgICAgICBtb3VzZW1vdmUueCAtPSBt
X3Njcm9sbGJhci0+eCgpOwotICAgICAgICBtb3VzZW1vdmUueSAtPSBtX3Njcm9sbGJhci0+eSgp
OwotICAgICAgICByZXR1cm4gbV9zY3JvbGxiYXItPm1vdXNlTW92ZWQoUGxhdGZvcm1Nb3VzZUV2
ZW50QnVpbGRlcihtX3Njcm9sbGJhci5nZXQoKSwgbW91c2Vtb3ZlKSk7Ci0gICAgfQotCi0gICAg
aWYgKG1fc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpICE9IE5vUGFydCAmJiAhbV9zY3JvbGxiYXIt
PmlzT3ZlcmxheVNjcm9sbGJhcigpKQotICAgICAgICBtX3Njcm9sbGJhci0+bW91c2VFeGl0ZWQo
KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgV2ViU2Nyb2xsYmFySW1wbDo6b25Nb3Vz
ZUxlYXZlKGNvbnN0IFdlYklucHV0RXZlbnQmIGV2ZW50KQotewotICAgIGlmIChtX3Njcm9sbGJh
ci0+aG92ZXJlZFBhcnQoKSAhPSBOb1BhcnQpCi0gICAgICAgIG1fc2Nyb2xsYmFyLT5tb3VzZUV4
aXRlZCgpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFdlYlNjcm9sbGJhckltcGw6
Om9uTW91c2VXaGVlbChjb25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCkKLXsKLSAgICBXZWJNb3Vz
ZVdoZWVsRXZlbnQgbW91c2V3aGVlbCA9ICpzdGF0aWNfY2FzdDxjb25zdCBXZWJNb3VzZVdoZWVs
RXZlbnQqPigmZXZlbnQpOwotICAgIFBsYXRmb3JtV2hlZWxFdmVudEJ1aWxkZXIgcGxhdGZvcm1F
dmVudChtX3Njcm9sbGJhci5nZXQoKSwgbW91c2V3aGVlbCk7Ci0gICAgcmV0dXJuIG1fZ3JvdXAt
PmhhbmRsZVdoZWVsRXZlbnQocGxhdGZvcm1FdmVudCk7Ci19Ci0KLWJvb2wgV2ViU2Nyb2xsYmFy
SW1wbDo6b25LZXlEb3duKGNvbnN0IFdlYklucHV0RXZlbnQmIGV2ZW50KQotewotICAgIFdlYktl
eWJvYXJkRXZlbnQga2V5Ym9hcmQgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgV2ViS2V5Ym9hcmRFdmVu
dCo+KCZldmVudCk7Ci0gICAgaW50IGtleUNvZGU7Ci0gICAgLy8gV2UgaGF2ZSB0byBkdXBsaWNh
dGUgdGhpcyBsb2dpYyBmcm9tIFdlYlZpZXdJbXBsIGJlY2F1c2UgdGhlcmUgaXQgdXNlcwotICAg
IC8vIENoYXIgYW5kIFJhd0tleURvd24gZXZlbnRzLCB3aGljaCBkb24ndCBleGlzdCBhdCB0aGlz
IHBvaW50LgotICAgIGlmIChrZXlib2FyZC53aW5kb3dzS2V5Q29kZSA9PSBWS0VZX1NQQUNFKQot
ICAgICAgICBrZXlDb2RlID0gKChrZXlib2FyZC5tb2RpZmllcnMgJiBXZWJJbnB1dEV2ZW50OjpT
aGlmdEtleSkgPyBWS0VZX1BSSU9SIDogVktFWV9ORVhUKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
aWYgKGtleWJvYXJkLm1vZGlmaWVycyA9PSBXZWJJbnB1dEV2ZW50OjpDb250cm9sS2V5KSB7Ci0g
ICAgICAgICAgICAvLyBNYXRjaCBGRiBiZWhhdmlvciBpbiB0aGUgc2Vuc2UgdGhhdCBDdHJsK2hv
bWUvZW5kIGFyZSB0aGUgb25seSBDdHJsCi0gICAgICAgICAgICAvLyBrZXkgY29tYmluYXRpb25z
IHdoaWNoIGFmZmVjdCBzY3JvbGxpbmcuIFNhZmFyaSBpcyBidWdneSBpbiB0aGUKLSAgICAgICAg
ICAgIC8vIHNlbnNlIHRoYXQgaXQgc2Nyb2xscyB0aGUgcGFnZSBmb3IgYWxsIEN0cmwrc2Nyb2xs
aW5nIGtleQotICAgICAgICAgICAgLy8gY29tYmluYXRpb25zLiBGb3IgZS5nLiBDdHJsK3BndXAv
cGdkbi91cC9kb3duLCBldGMuCi0gICAgICAgICAgICBzd2l0Y2ggKGtleWJvYXJkLndpbmRvd3NL
ZXlDb2RlKSB7Ci0gICAgICAgICAgICBjYXNlIFZLRVlfSE9NRToKLSAgICAgICAgICAgIGNhc2Ug
VktFWV9FTkQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChrZXlib2FyZC5pc1N5c3RlbUtleSB8fCAoa2V5Ym9hcmQubW9kaWZpZXJz
ICYgV2ViSW5wdXRFdmVudDo6U2hpZnRLZXkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgICAgIGtleUNvZGUgPSBrZXlib2FyZC53aW5kb3dzS2V5Q29kZTsKLSAgICB9Ci0gICAg
V2ViQ29yZTo6U2Nyb2xsRGlyZWN0aW9uIHNjcm9sbERpcmVjdGlvbjsKLSAgICBXZWJDb3JlOjpT
Y3JvbGxHcmFudWxhcml0eSBzY3JvbGxHcmFudWxhcml0eTsKLSAgICBpZiAoV2ViVmlld0ltcGw6
Om1hcEtleUNvZGVGb3JTY3JvbGwoa2V5Q29kZSwgJnNjcm9sbERpcmVjdGlvbiwgJnNjcm9sbEdy
YW51bGFyaXR5KSkgewotICAgICAgICAvLyBXaWxsIHJldHVybiBmYWxzZSBpZiBzY3JvbGwgZGly
ZWN0aW9uIHdhc24ndCBjb21wYXRpYmxlIHdpdGggdGhpcyBzY3JvbGxiYXIuCi0gICAgICAgIHJl
dHVybiBtX2dyb3VwLT5zY3JvbGwoc2Nyb2xsRGlyZWN0aW9uLCBzY3JvbGxHcmFudWxhcml0eSk7
Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmgg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0NDQ0M2MxYzdlZjMwZTU0NWEwYzI1Nzk3YWQxOGRmYTQy
NmU1ZjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Nyb2xsYmFySW1wbC5oCisrKyAvZGV2L251bGwK
QEAgLTEsOTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
ICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgV2ViU2Nyb2xsYmFySW1wbF9oCi0jZGVmaW5lIFdlYlNj
cm9sbGJhckltcGxfaAotCi0jaW5jbHVkZSAiV2ViU2Nyb2xsYmFyLmgiCi0KLSNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci1jbGFzcyBJbnRQb2ludDsKLWNsYXNzIEludFJlY3Q7Ci1jbGFzcyBTY3JvbGxiYXI7Ci19
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBTY3JvbGxiYXJHcm91cDsKLQotY2xhc3Mg
V2ViU2Nyb2xsYmFySW1wbCA6IHB1YmxpYyBXZWJTY3JvbGxiYXIgewotcHVibGljOgotICAgIFdl
YlNjcm9sbGJhckltcGwoT3JpZW50YXRpb24sCi0gICAgICAgICAgICAgICAgICAgICBTY3JvbGxi
YXJHcm91cCosICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICBXZWJT
Y3JvbGxiYXJDbGllbnQqKTsKLSAgICB+V2ViU2Nyb2xsYmFySW1wbCgpOwotCi0gICAgdm9pZCBz
ZXRTY3JvbGxPZmZzZXQoaW50KTsKLSAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLSAgICB2b2lkIGdldFRpY2ttYXJrcyhWZWN0b3I8V2Vi
Q29yZTo6SW50UmVjdD4mKSBjb25zdDsKLSAgICBXZWJDb3JlOjpJbnRQb2ludCBjb252ZXJ0RnJv
bUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBhcmVu
dFBvaW50KSBjb25zdDsKLSAgICB2b2lkIHNjcm9sbGJhclN0eWxlQ2hhbmdlZCgpOwotCi0gICAg
aW50IHNjcm9sbE9mZnNldCgpIHsgcmV0dXJuIG1fc2Nyb2xsT2Zmc2V0OyB9Ci0gICAgV2ViQ29y
ZTo6U2Nyb2xsYmFyKiBzY3JvbGxiYXIoKSB7IHJldHVybiBtX3Njcm9sbGJhci5nZXQoKTsgfQot
Ci0gICAgLy8gV2ViS2l0OjpXZWJTY3JvbGxiYXIgbWV0aG9kcwotICAgIHZpcnR1YWwgYm9vbCBp
c092ZXJsYXkoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TG9jYXRpb24oY29uc3QgV2Vi
UmVjdCYpOwotICAgIHZpcnR1YWwgaW50IHZhbHVlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lk
IHNldFZhbHVlKGludCBwb3NpdGlvbik7Ci0gICAgdmlydHVhbCB2b2lkIHNldERvY3VtZW50U2l6
ZShpbnQgc2l6ZSk7Ci0gICAgdmlydHVhbCB2b2lkIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNj
cm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFp
bnQoV2ViQ2FudmFzKiwgY29uc3QgV2ViUmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVJ
bnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmKTsKLQotcHJpdmF0ZToKLSAgICBib29sIG9u
TW91c2VEb3duKGNvbnN0IFdlYklucHV0RXZlbnQmIGV2ZW50KTsKLSAgICBib29sIG9uTW91c2VV
cChjb25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCk7Ci0gICAgYm9vbCBvbk1vdXNlTW92ZShjb25z
dCBXZWJJbnB1dEV2ZW50JiBldmVudCk7Ci0gICAgYm9vbCBvbk1vdXNlTGVhdmUoY29uc3QgV2Vi
SW5wdXRFdmVudCYgZXZlbnQpOwotICAgIGJvb2wgb25Nb3VzZVdoZWVsKGNvbnN0IFdlYklucHV0
RXZlbnQmIGV2ZW50KTsKLSAgICBib29sIG9uS2V5RG93bihjb25zdCBXZWJJbnB1dEV2ZW50JiBl
dmVudCk7Ci0KLSAgICBTY3JvbGxiYXJHcm91cCogbV9ncm91cDsKLSAgICBXZWJTY3JvbGxiYXJD
bGllbnQqIG1fY2xpZW50OwotCi0gICAgaW50IG1fc2Nyb2xsT2Zmc2V0OwotICAgIFJlZlB0cjxX
ZWJDb3JlOjpTY3JvbGxiYXI+IG1fc2Nyb2xsYmFyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0Ci0KLSNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149989</attachid>
            <date>2012-06-28 12:54:58 -0700</date>
            <delta_ts>2012-06-28 16:28:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90117-20120628125458.patch</filename>
            <type>text/plain</type>
            <size>56146</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxMzQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCA0YzJkY2Q0MGY5MjBj
MzRjYmJlYTY3ZGI3NDI3YzVhYWNlMDliYzAwLi44MmU5ZDRiOGI5MTlmYWYyM2JlOWE2MWExOTAx
ZWNlYWJlN2QzZDk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0wNi0yOCAg
QWRyaWVubmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29tPgorCisgICAgICAgIFtjaHJvbWl1bV0g
U3BsaXQgV2ViU2Nyb2xsYmFyIGludG8gV2ViUGx1Z2luU2Nyb2xsYmFyIGFuZCBXZWJTY3JvbGxi
YXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwMTE3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgSmFtZXMgUm9iaW5zb24uCisKKyAgICAgICAgTW92ZSBX
ZWJTY3JvbGxiYXIgZnJvbSBjbGllbnQgQVBJIHRvIFBsYXRmb3JtLgorCisgICAgICAgICogUGxh
dGZvcm0uZ3lwaToKKyAgICAgICAgKiBjaHJvbWl1bS9wdWJsaWMvV2ViU2Nyb2xsYmFyLmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBsdWdpblNjcm9sbGJh
ckNsaWVudC5oLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlNjcm9sbGJhcik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhcjo6fldlYlNjcm9sbGJhcik6CisKIDIwMTItMDYt
MjYgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hy
b21pdW1dIFJlbW92ZSBXZWJWaWV3OjpncmFwaGljc0NvbnRleHQzRCBnZXR0ZXIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpp
bmRleCAyYTZiNGNkODNjNTE4MDM4OTgzMGMwZGQwNmYxMjQyZGU5ZmFkMGEzLi4zMGNiNTIyYWMz
YWUwY2ZlOTliYWQ0ZTI4MWE4M2U3ZDFlY2MyZGFiIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTItMDYtMjggIEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KKworICAg
ICAgICBbY2hyb21pdW1dIFNwbGl0IFdlYlNjcm9sbGJhciBpbnRvIFdlYlBsdWdpblNjcm9sbGJh
ciBhbmQgV2ViU2Nyb2xsYmFyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD05MDExNworCisgICAgICAgIFJldmlld2VkIGJ5IEphbWVzIFJvYmluc29uLgor
CisgICAgICAgIE1ha2UgV2ViQ29yZSBhbHNvIGRlcGVuZCBvbiBQbGF0Zm9ybS4KKworICAgICAg
ICAqIFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOgorCiAyMDEyLTA2LTI3ICBTaGlueWEgS2F3YW5h
a2EgIDxzaGlueWFrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBIVE1MU3R5bGVFbGVtZW50Ojpy
ZW1vdmVkRnJvbSBzZWVtcyBpbmNvcnJlY3QuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IGExNDZkODlkZGMxYzJiOTUzNGY2ZjI5NTg2M2JlYmIzOGExMjNmNTguLmMyZmJkMjhhYzRhNzc4
YjA5YmQxOTkxOGIzMjVlNjJkOGRjMjM5ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsODEgQEAKKzIwMTItMDYtMjggIEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xl
LmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIFNwbGl0IFdlYlNjcm9sbGJhciBpbnRvIFdlYlBs
dWdpblNjcm9sbGJhciBhbmQgV2ViU2Nyb2xsYmFyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDExNworCisgICAgICAgIFJldmlld2VkIGJ5IEphbWVz
IFJvYmluc29uLgorCisgICAgICAgIENvbnZlcnQgV2ViU2Nyb2xsYmFyL1dlYlNjcm9sbGJhckNs
aWVudC9XZWJTY3JvbGxiYXJJbXBsIHRvIGJlCisgICAgICAgIFdlYlBsdWdpblNjcm9sbGJhciwg
V2ViUGx1Z2luU2Nyb2xsYmFyQ2xpZW50LCBhbmQKKyAgICAgICAgV2ViUGx1Z2luU2Nyb2xsYmFy
SW1wbC4gTW9kaWZ5IFNjcm9sbGJhckdyb3VwCisgICAgICAgIHRvIHVzZSB0aGlzIGluc3RlYWQu
CisKKyAgICAgICAgV2ViU2Nyb2xsYmFyIGlzIG5vdyB0aGUgYmFzZSBpbnRlcmZhY2UgZm9yIGEg
cHJlLWV4aXN0aW5nIHNjcm9sbGJhcgorICAgICAgICB0aGF0IGlzIGFjY2Vzc2VkIGluIGEgY29u
c3QgbWFubmVyLiBJdCBhbHNvIHByb3ZpZGVzIGFsbCBvZiB0aGUgY29tbW9uCisgICAgICAgIFdl
YktpdCBTY3JvbGxUeXBlcy5oIGVudW1zLiBXZWJQbHVnaW5TY3JvbGxiYXIgaXMgbm93IGEgc2Ny
b2xsYmFyIHRoYXQKKyAgICAgICAgaGFzIGJlZW4gZXh0ZXJuYWxseSBjcmVhdGVkIGFuZCBpcyBl
eHRlcm5hbGx5IG1vZGlmaWVkIGluIHRlcm1zIG9mIGl0cworICAgICAgICBwb3NpdGlvbiwgaW52
YWxpZGF0aW9uLCBhbmQgcGFpbnRpbmcuCisKKyAgICAgICAgVGhpcyBpcyBhIHByZS1yZWZhY3Rv
cmluZyBmb3IgYWRkaW5nIFdlYiB2ZXJzaW9ucyBvZiBTY3JvbGxiYXJUaGVtZQorICAgICAgICBp
bnRvIHRoZSBQbGF0Zm9ybSBkaXJlY3Rvcnkgd2hpY2ggd2lsbCBvcGVyYXRlIG9uIFdlYlNjcm9s
bGJhciwgYnV0CisgICAgICAgIHRoYXQgZG9uJ3QgbmVlZCBhbGwgb2Ygd2hhdCBXZWJQbHVnaW5T
Y3JvbGxiYXIgcHJvdmlkZXMuCisKKyAgICAgICAgQXMgV2ViU2Nyb2xsYmFyIGlzIG1vdmVkIHRv
IFBsYXRmb3JtLCBXZWJLaXQuZ3lwIG5vdyBtdXN0IGRlcGVuZCBvbgorICAgICAgICBQbGF0Zm9y
bSBhcyB3ZWxsLgorCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvV2Vi
UGx1Z2luU2Nyb2xsYmFyLmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViUGx1Z2lu
U2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luU2Nyb2xsYmFyOjp+V2ViUGx1
Z2luU2Nyb2xsYmFyKToKKyAgICAgICAgKiBwdWJsaWMvV2ViUGx1Z2luU2Nyb2xsYmFyQ2xpZW50
Lmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViUGx1Z2luU2Nyb2xsYmFyQ2xpZW50
KToKKyAgICAgICAgKiBwdWJsaWMvV2ViU2Nyb2xsYmFyLmg6IFJlbW92ZWQuCisgICAgICAgICog
cHVibGljL1dlYlNjcm9sbGJhckNsaWVudC5oOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9Bc3Nl
cnRNYXRjaGluZ0VudW1zLmNwcDoKKyAgICAgICAgKiBzcmMvU2Nyb2xsYmFyR3JvdXAuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpTY3JvbGxiYXJHcm91cDo6c2Nyb2xsYmFyQ3JlYXRlZCk6CisgICAg
ICAgIChXZWJLaXQ6OlNjcm9sbGJhckdyb3VwOjpzY3JvbGxiYXJEZXN0cm95ZWQpOgorICAgICAg
ICAoV2ViS2l0OjpTY3JvbGxiYXJHcm91cDo6c2Nyb2xsU2l6ZSk6CisgICAgICAgIChXZWJLaXQ6
OlNjcm9sbGJhckdyb3VwOjpzY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlNjcm9s
bGJhckdyb3VwOjpjb250ZW50c1NpemUpOgorICAgICAgICAqIHNyYy9TY3JvbGxiYXJHcm91cC5o
OgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFNjcm9sbGJhckdyb3VwKToKKyAgICAgICAg
KiBzcmMvV2ViUGx1Z2luU2Nyb2xsYmFySW1wbC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmNwcC4KKyAgICAgICAgKFdlYktpdCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdpblNjcm9sbGJhcjo6Y3JlYXRlRm9yUGx1Z2luKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luU2Nyb2xsYmFyOjpkZWZhdWx0VGhpY2tuZXNzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luU2Nyb2xsYmFySW1wbDo6V2ViUGx1Z2luU2Nyb2xs
YmFySW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdpblNjcm9sbGJhckltcGw6On5XZWJQ
bHVnaW5TY3JvbGxiYXJJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luU2Nyb2xsYmFy
SW1wbDo6c2V0U2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luU2Nyb2xs
YmFySW1wbDo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
bHVnaW5TY3JvbGxiYXJJbXBsOjpnZXRUaWNrbWFya3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
bHVnaW5TY3JvbGxiYXJJbXBsOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5TY3JvbGxiYXJJbXBsOjpzY3JvbGxiYXJTdHls
ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5TY3JvbGxiYXJJbXBsOjppc092
ZXJsYXkpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5TY3JvbGxiYXJJbXBsOjp2YWx1ZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdpblNjcm9sbGJhckltcGw6OnNldExvY2F0aW9uKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luU2Nyb2xsYmFySW1wbDo6c2V0VmFsdWUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQbHVnaW5TY3JvbGxiYXJJbXBsOjpzZXREb2N1bWVudFNpemUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5TY3JvbGxiYXJJbXBsOjpzY3JvbGwpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQbHVnaW5TY3JvbGxiYXJJbXBsOjpwYWludCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBsdWdpblNjcm9sbGJhckltcGw6OmhhbmRsZUlucHV0RXZlbnQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQbHVnaW5TY3JvbGxiYXJJbXBsOjpvbk1vdXNlRG93bik6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBsdWdpblNjcm9sbGJhckltcGw6Om9uTW91c2VVcCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBsdWdpblNjcm9sbGJhckltcGw6Om9uTW91c2VNb3ZlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGx1Z2luU2Nyb2xsYmFySW1wbDo6b25Nb3VzZUxlYXZlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGx1Z2luU2Nyb2xsYmFySW1wbDo6b25Nb3VzZVdoZWVsKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGx1Z2luU2Nyb2xsYmFySW1wbDo6b25LZXlEb3duKToKKyAgICAgICAgKiBzcmMvV2Vi
UGx1Z2luU2Nyb2xsYmFySW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlBsdWdpblNjcm9sbGJhckltcGwpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQbHVnaW5TY3JvbGxiYXJJbXBsOjpzY3JvbGxPZmZzZXQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQbHVnaW5TY3JvbGxiYXJJbXBsOjpzY3JvbGxiYXIpOgorICAgICAgICAqIHNy
Yy9XZWJTY3JvbGxiYXJJbXBsLmg6IFJlbW92ZWQuCisKIDIwMTItMDYtMjcgIFJvYmVydCBLcm9l
Z2VyICA8cmprcm9lZ2VAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gb3V0LW9m
LW9yZGVyIGFzc2VydCBpbiBXZWJWaWV3SW1wbCBzZXREZXZpY2VTY2FsZUZhY3RvcgpkaWZmIC0t
Z2l0IGEvU291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cGkgYi9Tb3VyY2UvUGxhdGZvcm0vUGxh
dGZvcm0uZ3lwaQppbmRleCA3NWFkOTcyZmJmODI3ODk1OTgwMTc0MmVhNDdlOWUzYjA3ODFhMzI1
Li43ZDU2NGY3NGJkNDE1MDA1ZDVlYmJlNjM2Y2NkODk4MzZiNzQwZWIzIDEwMDY0NAotLS0gYS9T
b3VyY2UvUGxhdGZvcm0vUGxhdGZvcm0uZ3lwaQorKysgYi9Tb3VyY2UvUGxhdGZvcm0vUGxhdGZv
cm0uZ3lwaQpAQCAtOTUsNiArOTUsNyBAQAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9X
ZWJSZWN0LmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJSZWZlcnJlclBvbGlj
eS5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViUmVuZGVyaW5nU3RhdHMuaCcs
CisgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYlNjcm9sbGJhci5oJywKICAgICAgICAg
ICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViU2Vzc2lvbkRlc2NyaXB0aW9uRGVzY3JpcHRvci5oJywK
ICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViU2l6ZS5oJywKICAgICAgICAgICAgICdj
aHJvbWl1bS9wdWJsaWMvV2ViU29ja2V0U3RyZWFtRXJyb3IuaCcsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlNjcm9sbGJhci5oIGIvU291cmNlL1BsYXRm
b3JtL2Nocm9taXVtL3B1YmxpYy9XZWJTY3JvbGxiYXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44Nzk1NTY1NTJk
MWEzMTZkNGQyZDU5N2Q2NmM1ZWIwNTBkOTllMGYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJTY3JvbGxiYXIuaApAQCAtMCwwICsxLDYwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlNjcm9sbGJhcl9oCisjZGVmaW5lIFdlYlNjcm9s
bGJhcl9oCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJTY3JvbGxiYXIgeworcHVi
bGljOgorICAgIGVudW0gT3JpZW50YXRpb24geworICAgICAgICBIb3Jpem9udGFsLAorICAgICAg
ICBWZXJ0aWNhbAorICAgIH07CisKKyAgICBlbnVtIFNjcm9sbERpcmVjdGlvbiB7CisgICAgICAg
IFNjcm9sbEJhY2t3YXJkLAorICAgICAgICBTY3JvbGxGb3J3YXJkCisgICAgfTsKKworICAgIGVu
dW0gU2Nyb2xsR3JhbnVsYXJpdHkgeworICAgICAgICBTY3JvbGxCeUxpbmUsCisgICAgICAgIFNj
cm9sbEJ5UGFnZSwKKyAgICAgICAgU2Nyb2xsQnlEb2N1bWVudCwKKyAgICAgICAgU2Nyb2xsQnlQ
aXhlbAorICAgIH07CisKKyAgICB2aXJ0dWFsIH5XZWJTY3JvbGxiYXIoKSB7IH0KKworICAgIC8v
IFJldHVybiB0cnVlIGlmIHRoaXMgaXMgYW4gb3ZlcmxheSBzY3JvbGxiYXIuCisgICAgdmlydHVh
bCBib29sIGlzT3ZlcmxheSgpIGNvbnN0ID0gMDsKKworICAgIC8vIEdldHMgdGhlIGN1cnJlbnQg
dmFsdWUgKGkuZS4gcG9zaXRpb24gaW5zaWRlIHRoZSByZWdpb24pLgorICAgIHZpcnR1YWwgaW50
IHZhbHVlKCkgY29uc3QgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAppbmRleCBjZmNhNzcxNGU1OWM0
MjkwNDMxNjRlN2YwOGUwM2NlZGM0NjAxZTcyLi5lYjFkNjY0OTBkYzI2ZjY1NzNmNjgzMmE1M2Y4
MzExNTAwOWFiMzUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJD
b3JlLmd5cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cApAQCAt
MjAxMCw2ICsyMDEwLDcgQEAKICAgICAgICAgJ3dlYmNvcmVfcmVuZGVyaW5nJywKICAgICAgICAg
IyBFeHBvcnRlZC4KICAgICAgICAgJ3dlYmNvcmVfYmluZGluZ3MnLAorICAgICAgICAnLi4vLi4v
UGxhdGZvcm0vUGxhdGZvcm0uZ3lwL1BsYXRmb3JtLmd5cDp3ZWJraXRfcGxhdGZvcm0nLAogICAg
ICAgICAnLi4vLi4vV1RGL1dURi5neXAvV1RGLmd5cDp3dGYnLAogICAgICAgICAnPChjaHJvbWl1
bV9zcmNfZGlyKS9idWlsZC90ZW1wX2d5cC9nb29nbGV1cmwuZ3lwOmdvb2dsZXVybCcsCiAgICAg
ICAgICc8KGNocm9taXVtX3NyY19kaXIpL3NraWEvc2tpYS5neXA6c2tpYScsCkBAIC0yMDE5LDYg
KzIwMjAsNyBAQAogICAgICAgXSwKICAgICAgICdleHBvcnRfZGVwZW5kZW50X3NldHRpbmdzJzog
WwogICAgICAgICAnd2ViY29yZV9iaW5kaW5ncycsCisgICAgICAgICcuLi8uLi9QbGF0Zm9ybS9Q
bGF0Zm9ybS5neXAvUGxhdGZvcm0uZ3lwOndlYmtpdF9wbGF0Zm9ybScsCiAgICAgICAgICcuLi8u
Li9XVEYvV1RGLmd5cC9XVEYuZ3lwOnd0ZicsCiAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIp
L2J1aWxkL3RlbXBfZ3lwL2dvb2dsZXVybC5neXA6Z29vZ2xldXJsJywKICAgICAgICAgJzwoY2hy
b21pdW1fc3JjX2Rpcikvc2tpYS9za2lhLmd5cDpza2lhJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cAppbmRleCBkNzVmNWI3MDk1ZmJkMWUxNzE0MTM2OWNiMWZhMGFkOWYyOTJiMjRhLi4xMmNm
OGE4ZGM4OWY0ZDc2OGI0ZmNmNWViNjQzY2FlNmQyZDg5NjZmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwCkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgICAgICAndmFyaWFibGVzJzogeyAn
ZW5hYmxlX3dleGl0X3RpbWVfZGVzdHJ1Y3RvcnMnOiAxLCB9LAogICAgICAgICAgICAgJ2RlcGVu
ZGVuY2llcyc6IFsKICAgICAgICAgICAgICAgICAnLi4vLi4vV2ViQ29yZS9XZWJDb3JlLmd5cC9X
ZWJDb3JlLmd5cDp3ZWJjb3JlJywKLSAgICAgICAgICAgICAgICAnLi4vLi4vUGxhdGZvcm0vUGxh
dGZvcm0uZ3lwL1BsYXRmb3JtLmd5cDp3ZWJraXRfcGxhdGZvcm0nLCAjIGFjdHVhbGx5IFdlYkNv
cmUgc2hvdWxkIGRlcGVuZCBvbiB0aGlzCisgICAgICAgICAgICAgICAgJy4uLy4uL1BsYXRmb3Jt
L1BsYXRmb3JtLmd5cC9QbGF0Zm9ybS5neXA6d2Via2l0X3BsYXRmb3JtJywKICAgICAgICAgICAg
ICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS9za2lhL3NraWEuZ3lwOnNraWEnLAogICAgICAgICAg
ICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3RoaXJkX3BhcnR5L2ljdS9pY3UuZ3lwOmljdXVj
JywKICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90aGlyZF9wYXJ0eS9ucGFw
aS9ucGFwaS5neXA6bnBhcGknLApAQCAtNzYsNiArNzYsNyBAQAogICAgICAgICAgICAgICAgICc8
KGNocm9taXVtX3NyY19kaXIpL3Y4L3Rvb2xzL2d5cC92OC5neXA6djgnLAogICAgICAgICAgICAg
XSwKICAgICAgICAgICAgICdleHBvcnRfZGVwZW5kZW50X3NldHRpbmdzJzogWworICAgICAgICAg
ICAgICAgICcuLi8uLi9QbGF0Zm9ybS9QbGF0Zm9ybS5neXAvUGxhdGZvcm0uZ3lwOndlYmtpdF9w
bGF0Zm9ybScsCiAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2Rpcikvc2tpYS9za2lh
Lmd5cDpza2lhJywKICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90aGlyZF9w
YXJ0eS9pY3UvaWN1Lmd5cDppY3V1YycsCiAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3Jj
X2RpcikvdGhpcmRfcGFydHkvbnBhcGkvbnBhcGkuZ3lwOm5wYXBpJywKQEAgLTIzOCw4ICsyMzks
NiBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU2NyZWVuSW5mby5oJywKICAgICAgICAg
ICAgICAgICAncHVibGljL1dlYlNjcmlwdENvbnRyb2xsZXIuaCcsCiAgICAgICAgICAgICAgICAg
J3B1YmxpYy9XZWJTY3JpcHRTb3VyY2UuaCcsCi0gICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJT
Y3JvbGxiYXIuaCcsCi0gICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTY3JvbGxiYXJDbGllbnQu
aCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuaCcsCiAg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTZWN1cml0eU9yaWdpbi5oJywKICAgICAgICAgICAg
ICAgICAncHVibGljL1dlYlNlY3VyaXR5UG9saWN5LmgnLApAQCAtNjE1LDYgKzYxNCw4IEBACiAg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJQbHVnaW5MaXN0QnVpbGRlckltcGwuaCcsCiAgICAgICAg
ICAgICAgICAgJ3NyYy9XZWJQbHVnaW5Mb2FkT2JzZXJ2ZXIuY3BwJywKICAgICAgICAgICAgICAg
ICAnc3JjL1dlYlBsdWdpbkxvYWRPYnNlcnZlci5oJywKKyAgICAgICAgICAgICAgICAnc3JjL1dl
YlBsdWdpblNjcm9sbGJhckltcGwuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYlBsdWdp
blNjcm9sbGJhckltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJQb3B1cE1lbnVJbXBs
LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJQb3B1cE1lbnVJbXBsLmgnLAogICAgICAg
ICAgICAgICAgICdzcmMvV2ViUmFuZ2UuY3BwJywKQEAgLTYyNCw4ICs2MjUsNiBAQAogICAgICAg
ICAgICAgICAgICdzcmMvV2ViU2NvcGVkVXNlckdlc3R1cmUuY3BwJywKICAgICAgICAgICAgICAg
ICAnc3JjL1dlYlNjcmlwdENvbnRyb2xsZXIuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dl
YlNjcm9sbGFibGVMYXllci5jcHAnLAotICAgICAgICAgICAgICAgICdzcmMvV2ViU2Nyb2xsYmFy
SW1wbC5jcHAnLAotICAgICAgICAgICAgICAgICdzcmMvV2ViU2Nyb2xsYmFySW1wbC5oJywKICAg
ICAgICAgICAgICAgICAnc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5jcHAnLAogICAgICAgICAg
ICAgICAgICdzcmMvV2ViU2VjdXJpdHlPcmlnaW4uY3BwJywKICAgICAgICAgICAgICAgICAnc3Jj
L1dlYlNlY3VyaXR5UG9saWN5LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJQbHVnaW5TY3JvbGxiYXIuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYlBsdWdpblNjcm9sbGJhci5oCmluZGV4IDMwNmYwOThhYTk2NmY0NTEwMTk4Zjk1
NDdlMzM2MjczMGY0ZWY5MmEuLjM2NGVlMGRmYmU4YzA2ZDM2ZjFhOWVmY2E0YjA4ZWM2Zjk0ZmM0
ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBsdWdpblNj
cm9sbGJhci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBsdWdpblNj
cm9sbGJhci5oCkBAIC0yNSwxMSArMjUsNTEgQEAKICNpZm5kZWYgV2ViUGx1Z2luU2Nyb2xsYmFy
X2gKICNkZWZpbmUgV2ViUGx1Z2luU2Nyb2xsYmFyX2gKIAotI2luY2x1ZGUgIldlYlNjcm9sbGJh
ci5oIgorI2luY2x1ZGUgPHB1YmxpYy9XZWJDYW52YXMuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2Vi
U2Nyb2xsYmFyLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi10eXBlZGVmIFdlYlNjcm9sbGJh
ciBXZWJQbHVnaW5TY3JvbGxiYXI7CitjbGFzcyBXZWJJbnB1dEV2ZW50OworY2xhc3MgV2ViUGx1
Z2luQ29udGFpbmVyOworY2xhc3MgV2ViUGx1Z2luU2Nyb2xsYmFyQ2xpZW50Oworc3RydWN0IFdl
YlJlY3Q7CisKK2NsYXNzIFdlYlBsdWdpblNjcm9sbGJhciA6IHB1YmxpYyBXZWJTY3JvbGxiYXIg
eworcHVibGljOgorICAgIC8vIENyZWF0ZXMgYSBXZWJQbHVnaW5TY3JvbGxiYXIgZm9yIHVzZSBi
eSBhIHBsdWdpbi4gVGhlIHBsdWdpbiBjb250YWluZXIgYW5kCisgICAgLy8gY2xpZW50IGFyZSBn
dWFyYW50ZWVkIHRvIG91dGxpdmUgdGhpcyBvYmplY3QuCisgICAgV0VCS0lUX0VYUE9SVCBzdGF0
aWMgV2ViUGx1Z2luU2Nyb2xsYmFyKiBjcmVhdGVGb3JQbHVnaW4oV2ViU2Nyb2xsYmFyOjpPcmll
bnRhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXZWJQbHVnaW5Db250YWluZXIqLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlBsdWdpblNjcm9sbGJh
ckNsaWVudCopOworCisgICAgdmlydHVhbCB+V2ViUGx1Z2luU2Nyb2xsYmFyKCkgeyB9CisKKyAg
ICAvLyBHZXRzIHRoZSB0aGlja25lc3Mgb2YgdGhlIHNjcm9sbGJhciBpbiBwaXhlbHMuCisgICAg
V0VCS0lUX0VYUE9SVCBzdGF0aWMgaW50IGRlZmF1bHRUaGlja25lc3MoKTsKKworICAgIC8vIFNl
dHMgdGhlIHJlY3RhbmdsZSBvZiB0aGUgc2Nyb2xsYmFyLgorICAgIHZpcnR1YWwgdm9pZCBzZXRM
b2NhdGlvbihjb25zdCBXZWJSZWN0JikgPSAwOworCisgICAgLy8gU2V0cyB0aGUgc2l6ZSBvZiB0
aGUgc2Nyb2xsYWJsZSByZWdpb24gaW4gcGl4ZWxzLCBpLmUuIGlmIGEgZG9jdW1lbnQgaXMKKyAg
ICAvLyA4MDB4MTAwMDAgcGl4ZWxzIGFuZCB0aGUgdmlld3BvcnQgaXMgMTAwMHgxMDAwIHBpeGVs
cywgdGhlbiBzZXRMb2NhdGlvbgorICAgIC8vIGZvciB0aGUgdmVydGljYWwgc2Nyb2xsYmFyIHdv
dWxkIGhhdmUgcGFzc2VkIGluIGEgcmVjdGFuZ2xlIGxpa2U6CisgICAgLy8gICAgICAgICAgICAo
ODAwIC0gZGVmYXVsdFRoaWNrbmVzcygpLCAwKSAoZGVmYXVsdFRoaWNrbmVzcygpIHggMTAwMDAp
CisgICAgLy8gYW5kIHNldERvY3VtZW50U2l6ZSgxMDAwMCkKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
RG9jdW1lbnRTaXplKGludCkgPSAwOworCisgICAgLy8gU2V0cyB0aGUgY3VycmVudCB2YWx1ZS4K
KyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUoaW50IHBvc2l0aW9uKSA9IDA7CisKKyAgICAvLyBT
Y3JvbGwgYmFjayBvciBmb3J3YXJkIHdpdGggdGhlIGdpdmVuIGdyYW51bGFyaXR5LgorICAgIHZp
cnR1YWwgdm9pZCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxv
YXQgbXVsdGlwbGllcikgPSAwOworCisgICAgLy8gUGFpbnQgdGhlIGdpdmVuIHJlY3RhbmdsZS4K
KyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoV2ViQ2FudmFzKiwgY29uc3QgV2ViUmVjdCYpID0gMDsK
KworICAgIC8vIFJldHVybnMgdHJ1ZSBpZmYgdGhlIGdpdmVuIGV2ZW50IHdhcyB1c2VkLgorICAg
IHZpcnR1YWwgYm9vbCBoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmKSA9IDA7
Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViUGx1Z2luU2Nyb2xsYmFyQ2xpZW50LmggYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQbHVnaW5TY3JvbGxiYXJDbGllbnQuaAppbmRleCAzNmY4
ZTQ5Yzg0OGE2MjA0NWMyYWIyNTUyZGVmNzE3ODZlNDgzZTZhLi5iYzVhMTI0ZjQzN2U1Yjk5YzUx
OWJhYWE0N2ZkOWFjYjYwNzg2NmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJQbHVnaW5TY3JvbGxiYXJDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJQbHVnaW5TY3JvbGxiYXJDbGllbnQuaApAQCAtMjUsMTIgKzI1LDE5
IEBACiAjaWZuZGVmIFdlYlBsdWdpblNjcm9sbGJhckNsaWVudF9oCiAjZGVmaW5lIFdlYlBsdWdp
blNjcm9sbGJhckNsaWVudF9oCiAKLSNpbmNsdWRlICJXZWJQbHVnaW5TY3JvbGxiYXIuaCIKLSNp
bmNsdWRlICJXZWJTY3JvbGxiYXJDbGllbnQuaCIKLQogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXR5
cGVkZWYgV2ViU2Nyb2xsYmFyQ2xpZW50IFdlYlBsdWdpblNjcm9sbGJhckNsaWVudDsKK2NsYXNz
IFdlYlBsdWdpblNjcm9sbGJhcjsKK3N0cnVjdCBXZWJSZWN0OwordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+IGNsYXNzIFdlYlZlY3RvcjsKKworY2xhc3MgV2ViUGx1Z2luU2Nyb2xsYmFyQ2xpZW50IHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFdlYlBsdWdpblNjcm9sbGJh
ciopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb3ZlcmxheUNoYW5nZWQoV2ViUGx1Z2luU2Nyb2xs
YmFyKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChXZWJQ
bHVnaW5TY3JvbGxiYXIqLCBjb25zdCBXZWJSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBn
ZXRUaWNrbWFya3MoV2ViUGx1Z2luU2Nyb2xsYmFyKiwgV2ViVmVjdG9yPFdlYlJlY3Q+KikgY29u
c3QgPSAwOworfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNjcm9sbGJhci5oIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViU2Nyb2xsYmFyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGVjYWM4NmEwMTM3NzY3YWE4ZjQ3NGM2MDZkMzYxYWVkMTFkZjliMWEuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViU2Nyb2xsYmFyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0g
KiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgV2ViU2Nyb2xsYmFyX2gKLSNkZWZpbmUgV2ViU2Nyb2xsYmFyX2gKLQotI2luY2x1ZGUg
InBsYXRmb3JtL1dlYkNhbnZhcy5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dlYkNvbW1vbi5oIgot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViSW5wdXRFdmVudDsKLWNsYXNzIFdlYlBs
dWdpbkNvbnRhaW5lcjsKLWNsYXNzIFdlYlNjcm9sbGJhckNsaWVudDsKLXN0cnVjdCBXZWJSZWN0
OwotCi1jbGFzcyBXZWJTY3JvbGxiYXIgewotcHVibGljOgotICAgIGVudW0gT3JpZW50YXRpb24g
ewotICAgICAgICBIb3Jpem9udGFsLAotICAgICAgICBWZXJ0aWNhbAotICAgIH07Ci0KLSAgICBl
bnVtIFNjcm9sbERpcmVjdGlvbiB7Ci0gICAgICAgIFNjcm9sbEJhY2t3YXJkLAotICAgICAgICBT
Y3JvbGxGb3J3YXJkCi0gICAgfTsKLQotICAgIGVudW0gU2Nyb2xsR3JhbnVsYXJpdHkgewotICAg
ICAgICBTY3JvbGxCeUxpbmUsCi0gICAgICAgIFNjcm9sbEJ5UGFnZSwKLSAgICAgICAgU2Nyb2xs
QnlEb2N1bWVudCwKLSAgICAgICAgU2Nyb2xsQnlQaXhlbAotICAgIH07Ci0KLSAgICAvLyBDcmVh
dGVzIGEgV2ViU2Nyb2xsYmFyIGZvciB1c2UgYnkgYSBwbHVnaW4uIFRoZSBwbHVnaW4gY29udGFp
bmVyIGFuZAotICAgIC8vIGNsaWVudCBhcmUgZ3VhcmFudGVlZCB0byBvdXRsaXZlIHRoaXMgb2Jq
ZWN0LgotICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIFdlYlNjcm9sbGJhciogY3JlYXRlRm9yUGx1
Z2luKE9yaWVudGF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdlYlBsdWdpbkNvbnRhaW5lciosCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViU2Nyb2xsYmFyQ2xpZW50Kik7
Ci0KLSAgICB2aXJ0dWFsIH5XZWJTY3JvbGxiYXIoKSB7fQotCi0gICAgLy8gR2V0cyB0aGUgdGhp
Y2tuZXNzIG9mIHRoZSBzY3JvbGxiYXIgaW4gcGl4ZWxzLgotICAgIFdFQktJVF9FWFBPUlQgc3Rh
dGljIGludCBkZWZhdWx0VGhpY2tuZXNzKCk7Ci0KLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGlz
IGlzIGFuIG92ZXJsYXkgc2Nyb2xsYmFyLgotICAgIHZpcnR1YWwgYm9vbCBpc092ZXJsYXkoKSBj
b25zdCA9IDA7Ci0KLSAgICAvLyBTZXRzIHRoZSByZWN0YW5nbGUgb2YgdGhlIHNjcm9sbGJhci4K
LSAgICB2aXJ0dWFsIHZvaWQgc2V0TG9jYXRpb24oY29uc3QgV2ViUmVjdCYpID0gMDsKLQotICAg
IC8vIEdldHMgdGhlIGN1cnJlbnQgdmFsdWUgKGkuZS4gcG9zaXRpb24gaW5zaWRlIHRoZSByZWdp
b24pLgotICAgIHZpcnR1YWwgaW50IHZhbHVlKCkgY29uc3QgPSAwOwotCi0gICAgLy8gU2V0cyB0
aGUgY3VycmVudCB2YWx1ZS4KLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUoaW50IHBvc2l0aW9u
KSA9IDA7Ci0KLSAgICAvLyBTZXRzIHRoZSBzaXplIG9mIHRoZSBzY3JvbGxhYmxlIHJlZ2lvbiBp
biBwaXhlbHMuICBpLmUuIGlmIGEgZG9jdW1lbnQgaXMKLSAgICAvLyA4MDB4MTAwMDAgcGl4ZWxz
IGFuZCB0aGUgdmlld3BvcnQgaXMgMTAwMHgxMDAwIHBpeGVscywgdGhlbiBzZXRMb2NhdGlvbgot
ICAgIC8vIGZvciB0aGUgdmVydGljYWwgc2Nyb2xsYmFyIHdvdWxkIGhhdmUgcGFzc2VkIGluIGEg
cmVjdGFuZ2xlIGxpa2U6Ci0gICAgLy8gICAgICAgICAgICAoODAwIC0gZGVmYXVsdFRoaWNrbmVz
cygpLCAwKSAoZGVmYXVsdFRoaWNrbmVzcygpIHggMTAwMDApCi0gICAgLy8gYW5kIHNldERvY3Vt
ZW50U2l6ZSgxMDAwMCkKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RG9jdW1lbnRTaXplKGludCBzaXpl
KSA9IDA7Ci0KLSAgICAvLyBTY3JvbGwgYmFjayBvciBmb3J3YXJkIHdpdGggdGhlIGdpdmVuIGdy
YW51bGFyaXR5LgotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3Jv
bGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikgPSAwOwotCi0gICAgLy8gUGFpbnQgdGhl
IGdpdmVuIHJlY3RhbmdsZS4KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoV2ViQ2FudmFzKiwgY29u
c3QgV2ViUmVjdCYpID0gMDsKLQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZmYgdGhlIGdpdmVuIGV2
ZW50IHdhcyB1c2VkLgotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdl
YklucHV0RXZlbnQmKSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTY3JvbGxiYXJD
bGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNjcm9sbGJhckNsaWVu
dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTliMjliNDczOTU4OWJjMmViZDM5
NmNmNGZiNWRmM2ZlYjc3NTE1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNjcm9sbGJhckNsaWVu
dC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgV2ViU2Nyb2xsYmFyQ2xp
ZW50X2gKLSNkZWZpbmUgV2ViU2Nyb2xsYmFyQ2xpZW50X2gKLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLWNsYXNzIFdlYlNjcm9sbGJhcjsKLXN0cnVjdCBXZWJSZWN0OwotdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+IGNsYXNzIFdlYlZlY3RvcjsKLQotY2xhc3MgV2ViU2Nyb2xsYmFyQ2xpZW50IHsKLXB1
YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFdlYlNjcm9sbGJhciopID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgb3ZlcmxheUNoYW5nZWQoV2ViU2Nyb2xsYmFyKikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChXZWJTY3JvbGxiYXIqLCBjb25z
dCBXZWJSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBnZXRUaWNrbWFya3MoV2ViU2Nyb2xs
YmFyKiwgV2ViVmVjdG9yPFdlYlJlY3Q+KikgY29uc3QgPSAwOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9B
c3NlcnRNYXRjaGluZ0VudW1zLmNwcAppbmRleCA0MDMwODhiYzkxZWUwN2I1Yjc0NmJhMDE5NmRh
Y2FiMjZkYWJkM2UyLi4wZjg0NDJhNzY5NzU3NDkzNzhjZGM3MGViYjMwOGFhYWI0NGYzMjJkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1z
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1z
LmNwcApAQCAtOTMsNyArOTMsNiBAQAogI2luY2x1ZGUgIldlYk1lZGlhUGxheWVyQ2xpZW50Lmgi
CiAjaW5jbHVkZSAiV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyLmgiCiAjaW5jbHVkZSAiV2ViUGFn
ZVZpc2liaWxpdHlTdGF0ZS5oIgotI2luY2x1ZGUgIldlYlNjcm9sbGJhci5oIgogI2luY2x1ZGUg
IldlYlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiV2ViU3BlZWNoUmVjb2duaXplckNsaWVudC5oIgog
I2luY2x1ZGUgIldlYlN0b3JhZ2VRdW90YUVycm9yLmgiCkBAIC0xMTEsNiArMTEwLDcgQEAKICNp
bmNsdWRlIDxwdWJsaWMvV2ViRmlsZVN5c3RlbS5oPgogI2luY2x1ZGUgPHB1YmxpYy9XZWJGaWx0
ZXJPcGVyYXRpb24uaD4KICNpbmNsdWRlIDxwdWJsaWMvV2ViUmVmZXJyZXJQb2xpY3kuaD4KKyNp
bmNsdWRlIDxwdWJsaWMvV2ViU2Nyb2xsYmFyLmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYlVSTFJl
c3BvbnNlLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdJbXBsLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9T
Y3JvbGxiYXJHcm91cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9TY3JvbGxiYXJH
cm91cC5jcHAKaW5kZXggMTlmZGJhZGU0MDA0NWIxZTVlOGM0MTFjZmIzYjQ4YzM4YzE5NGEzNy4u
MGU2NzZjYjVmNWI2Y2IzZTBiMTdhMjQwNjVhMWRhMjVhZDc2ZjdkNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU2Nyb2xsYmFyR3JvdXAuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1Njcm9sbGJhckdyb3VwLmNwcApAQCAtMjksOCArMjksOCBAQAog
I2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgogI2luY2x1ZGUg
IlNjcm9sbGJhclRoZW1lLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViUmVjdC5oIgotI2luY2x1
ZGUgIldlYlNjcm9sbGJhckltcGwuaCIKKyNpbmNsdWRlICJXZWJQbHVnaW5TY3JvbGxiYXJJbXBs
LmgiCisjaW5jbHVkZSA8cHVibGljL1dlYlJlY3QuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKQEAgLTUwLDcgKzUwLDcgQEAgU2Nyb2xsYmFyR3JvdXA6On5TY3JvbGxiYXJHcm91cCgp
CiAgICAgQVNTRVJUKCFtX3ZlcnRpY2FsU2Nyb2xsYmFyKTsKIH0KIAotdm9pZCBTY3JvbGxiYXJH
cm91cDo6c2Nyb2xsYmFyQ3JlYXRlZChXZWJTY3JvbGxiYXJJbXBsKiBzY3JvbGxiYXIpCit2b2lk
IFNjcm9sbGJhckdyb3VwOjpzY3JvbGxiYXJDcmVhdGVkKFdlYlBsdWdpblNjcm9sbGJhckltcGwq
IHNjcm9sbGJhcikKIHsKICAgICBib29sIGhhZFNjcm9sbGJhcnMgPSBtX2hvcml6b250YWxTY3Jv
bGxiYXIgfHwgbV92ZXJ0aWNhbFNjcm9sbGJhcjsKICAgICBpZiAoc2Nyb2xsYmFyLT5zY3JvbGxi
YXIoKS0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7CkBAIC02OSw3ICs2
OSw3IEBAIHZvaWQgU2Nyb2xsYmFyR3JvdXA6OnNjcm9sbGJhckNyZWF0ZWQoV2ViU2Nyb2xsYmFy
SW1wbCogc2Nyb2xsYmFyKQogICAgIH0KIH0KIAotdm9pZCBTY3JvbGxiYXJHcm91cDo6c2Nyb2xs
YmFyRGVzdHJveWVkKFdlYlNjcm9sbGJhckltcGwqIHNjcm9sbGJhcikKK3ZvaWQgU2Nyb2xsYmFy
R3JvdXA6OnNjcm9sbGJhckRlc3Ryb3llZChXZWJQbHVnaW5TY3JvbGxiYXJJbXBsKiBzY3JvbGxi
YXIpCiB7CiAgICAgaWYgKHNjcm9sbGJhciA9PSBtX2hvcml6b250YWxTY3JvbGxiYXIpIHsKICAg
ICAgICAgd2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyLT5zY3JvbGxiYXIo
KSk7CkBAIC05Myw3ICs5Myw3IEBAIHZvaWQgU2Nyb2xsYmFyR3JvdXA6OnNldExhc3RNb3VzZVBv
c2l0aW9uKGNvbnN0IEludFBvaW50JiBwb2ludCkKIAogaW50IFNjcm9sbGJhckdyb3VwOjpzY3Jv
bGxTaXplKFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdAog
ewotICAgIFdlYlNjcm9sbGJhckltcGwqIHdlYlNjcm9sbGJhciA9IG9yaWVudGF0aW9uID09IEhv
cml6b250YWxTY3JvbGxiYXIgPyBtX2hvcml6b250YWxTY3JvbGxiYXIgOiBtX3ZlcnRpY2FsU2Ny
b2xsYmFyOworICAgIFdlYlBsdWdpblNjcm9sbGJhckltcGwqIHdlYlNjcm9sbGJhciA9IG9yaWVu
dGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBtX2hvcml6b250YWxTY3JvbGxiYXIgOiBt
X3ZlcnRpY2FsU2Nyb2xsYmFyOwogICAgIGlmICghd2ViU2Nyb2xsYmFyKQogICAgICAgICByZXR1
cm4gMDsKICAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9IHdlYlNjcm9sbGJhci0+c2Nyb2xsYmFy
KCk7CkBAIC0xMDIsNyArMTAyLDcgQEAgaW50IFNjcm9sbGJhckdyb3VwOjpzY3JvbGxTaXplKFdl
YkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdAogCiBpbnQgU2Ny
b2xsYmFyR3JvdXA6OnNjcm9sbFBvc2l0aW9uKFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAog
ewotICAgIFdlYlNjcm9sbGJhckltcGwqIHdlYlNjcm9sbGJhciA9IHNjcm9sbGJhci0+b3JpZW50
YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gbV9ob3Jpem9udGFsU2Nyb2xsYmFyIDog
bV92ZXJ0aWNhbFNjcm9sbGJhcjsKKyAgICBXZWJQbHVnaW5TY3JvbGxiYXJJbXBsKiB3ZWJTY3Jv
bGxiYXIgPSBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/
IG1faG9yaXpvbnRhbFNjcm9sbGJhciA6IG1fdmVydGljYWxTY3JvbGxiYXI7CiAgICAgaWYgKCF3
ZWJTY3JvbGxiYXIpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiB3ZWJTY3JvbGxiYXIt
PnNjcm9sbE9mZnNldCgpOwpAQCAtMjI1LDE0ICsyMjUsMTQgQEAgSW50U2l6ZSBTY3JvbGxiYXJH
cm91cDo6Y29udGVudHNTaXplKCkgY29uc3QKICAgICBlbHNlIGlmIChtX3ZlcnRpY2FsU2Nyb2xs
YmFyKSB7CiAgICAgICAgIHNpemUuc2V0V2lkdGgobV92ZXJ0aWNhbFNjcm9sbGJhci0+c2Nyb2xs
YmFyKCktPngoKSk7CiAgICAgICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zY3JvbGxiYXIo
KS0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpCi0gICAgICAgICAgICBzaXplLmV4cGFuZChXZWJTY3Jv
bGxiYXI6OmRlZmF1bHRUaGlja25lc3MoKSwgMCk7CisgICAgICAgICAgICBzaXplLmV4cGFuZChX
ZWJQbHVnaW5TY3JvbGxiYXI6OmRlZmF1bHRUaGlja25lc3MoKSwgMCk7CiAgICAgfQogICAgIGlm
IChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQogICAgICAgICBzaXplLnNldEhlaWdodChtX3ZlcnRpY2Fs
U2Nyb2xsYmFyLT5zY3JvbGxiYXIoKS0+dG90YWxTaXplKCkpOwogICAgIGVsc2UgaWYgKG1faG9y
aXpvbnRhbFNjcm9sbGJhcikgewogICAgICAgICBzaXplLnNldEhlaWdodChtX2hvcml6b250YWxT
Y3JvbGxiYXItPnNjcm9sbGJhcigpLT55KCkpOwogICAgICAgICBpZiAobV9ob3Jpem9udGFsU2Ny
b2xsYmFyLT5zY3JvbGxiYXIoKS0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpCi0gICAgICAgICAgICBz
aXplLmV4cGFuZCgwLCBXZWJTY3JvbGxiYXI6OmRlZmF1bHRUaGlja25lc3MoKSk7CisgICAgICAg
ICAgICBzaXplLmV4cGFuZCgwLCBXZWJQbHVnaW5TY3JvbGxiYXI6OmRlZmF1bHRUaGlja25lc3Mo
KSk7CiAgICAgfQogICAgIHJldHVybiBzaXplOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvU2Nyb2xsYmFyR3JvdXAuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1Njcm9sbGJhckdyb3VwLmgKaW5kZXggYWViNDQwNTJmNzIxMmYwMTA3MjdhODBjODE5MmMw
NDVkYzQ1ZDg2ZS4uYTA0NzljMjA2MjdkN2JmMTQ1MTQ0ODkxOTJkNzNkNTE2ODM4ZGZiNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU2Nyb2xsYmFyR3JvdXAuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9TY3JvbGxiYXJHcm91cC5oCkBAIC0zNiwxNSAr
MzYsMTUgQEAgY2xhc3MgRnJhbWVWaWV3OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3Mg
V2ViU2Nyb2xsYmFySW1wbDsKK2NsYXNzIFdlYlBsdWdpblNjcm9sbGJhckltcGw7CiAKIGNsYXNz
IFNjcm9sbGJhckdyb3VwIDogcHVibGljIFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhIHsKIHB1Ymxp
YzoKICAgICBTY3JvbGxiYXJHcm91cChXZWJDb3JlOjpGcmFtZVZpZXcqLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiBmcmFtZVJlY3QpOwogICAgIH5TY3JvbGxiYXJHcm91cCgpOwogCi0gICAgdm9p
ZCBzY3JvbGxiYXJDcmVhdGVkKFdlYlNjcm9sbGJhckltcGwqKTsKLSAgICB2b2lkIHNjcm9sbGJh
ckRlc3Ryb3llZChXZWJTY3JvbGxiYXJJbXBsKik7CisgICAgdm9pZCBzY3JvbGxiYXJDcmVhdGVk
KFdlYlBsdWdpblNjcm9sbGJhckltcGwqKTsKKyAgICB2b2lkIHNjcm9sbGJhckRlc3Ryb3llZChX
ZWJQbHVnaW5TY3JvbGxiYXJJbXBsKik7CiAgICAgdm9pZCBzZXRMYXN0TW91c2VQb3NpdGlvbihj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwogICAgIHZvaWQgc2V0RnJhbWVSZWN0KGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKTsKIApAQCAtNzksOCArNzksOCBAQCBwcml2YXRlOgogICAgIFdlYkNv
cmU6OkZyYW1lVmlldyogbV9mcmFtZVZpZXc7CiAgICAgV2ViQ29yZTo6SW50UG9pbnQgbV9sYXN0
TW91c2VQb3NpdGlvbjsKICAgICBXZWJDb3JlOjpJbnRSZWN0IG1fZnJhbWVSZWN0OwotICAgIFdl
YlNjcm9sbGJhckltcGwqIG1faG9yaXpvbnRhbFNjcm9sbGJhcjsKLSAgICBXZWJTY3JvbGxiYXJJ
bXBsKiBtX3ZlcnRpY2FsU2Nyb2xsYmFyOworICAgIFdlYlBsdWdpblNjcm9sbGJhckltcGwqIG1f
aG9yaXpvbnRhbFNjcm9sbGJhcjsKKyAgICBXZWJQbHVnaW5TY3JvbGxiYXJJbXBsKiBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5TY3JvbGxiYXJJbXBsLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBsdWdpblNjcm9sbGJhckltcGwuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmIwZjYzYTdlNGEwZDYxMzE0YmE1MmI4ZjI2OGE0ZTY0NDkzNWQ4MGEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5TY3JvbGxiYXJJ
bXBsLmNwcApAQCAtMCwwICsxLDI4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYlBsdWdpblNjcm9sbGJhckltcGwuaCIKKworI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIktleWJvYXJkQ29kZXMuaCIKKyNpbmNsdWRlICJT
Y3JvbGxBbmltYXRvci5oIgorI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCisjaW5jbHVkZSAiU2Ny
b2xsYmFyLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyR3JvdXAuaCIKKyNpbmNsdWRlICJTY3JvbGxi
YXJUaGVtZS5oIgorI2luY2x1ZGUgIldlYklucHV0RXZlbnQuaCIKKyNpbmNsdWRlICJXZWJJbnB1
dEV2ZW50Q29udmVyc2lvbi5oIgorI2luY2x1ZGUgIldlYlBsdWdpbkNvbnRhaW5lckltcGwuaCIK
KyNpbmNsdWRlICJXZWJQbHVnaW5TY3JvbGxiYXJDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJWaWV3
SW1wbC5oIgorI2luY2x1ZGUgInBhaW50aW5nL0dyYXBoaWNzQ29udGV4dEJ1aWxkZXIuaCIKKyNp
bmNsdWRlIDxwdWJsaWMvV2ViQ2FudmFzLmg+CisjaW5jbHVkZSA8cHVibGljL1dlYlJlY3QuaD4K
KyNpbmNsdWRlIDxwdWJsaWMvV2ViVmVjdG9yLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7Cit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYlBsdWdp
blNjcm9sbGJhciogV2ViUGx1Z2luU2Nyb2xsYmFyOjpjcmVhdGVGb3JQbHVnaW4oT3JpZW50YXRp
b24gb3JpZW50YXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdlYlBsdWdpbkNvbnRhaW5lciogcGx1Z2luQ29udGFpbmVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJQ
bHVnaW5TY3JvbGxiYXJDbGllbnQqIGNsaWVudCkKK3sKKyAgICBXZWJQbHVnaW5Db250YWluZXJJ
bXBsKiBwbHVnaW4gPSBzdGF0aWNfY2FzdDxXZWJQbHVnaW5Db250YWluZXJJbXBsKj4ocGx1Z2lu
Q29udGFpbmVyKTsKKyAgICByZXR1cm4gbmV3IFdlYlBsdWdpblNjcm9sbGJhckltcGwob3JpZW50
YXRpb24sIHBsdWdpbi0+c2Nyb2xsYmFyR3JvdXAoKSwgY2xpZW50KTsKK30KKworaW50IFdlYlBs
dWdpblNjcm9sbGJhcjo6ZGVmYXVsdFRoaWNrbmVzcygpCit7CisgICAgcmV0dXJuIFNjcm9sbGJh
clRoZW1lOjp0aGVtZSgpLT5zY3JvbGxiYXJUaGlja25lc3MoKTsKK30KKworV2ViUGx1Z2luU2Ny
b2xsYmFySW1wbDo6V2ViUGx1Z2luU2Nyb2xsYmFySW1wbChPcmllbnRhdGlvbiBvcmllbnRhdGlv
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Nyb2xsYmFyR3JvdXAqIGdy
b3VwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJQbHVnaW5TY3JvbGxi
YXJDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fZ3JvdXAoZ3JvdXApCisgICAgLCBtX2NsaWVudChj
bGllbnQpCisgICAgLCBtX3Njcm9sbE9mZnNldCgwKQoreworICAgIG1fc2Nyb2xsYmFyID0gU2Ny
b2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIoCisgICAgICAgIHN0YXRpY19jYXN0PFNjcm9s
bGFibGVBcmVhKj4obV9ncm91cCksCisgICAgICAgIHN0YXRpY19jYXN0PFNjcm9sbGJhck9yaWVu
dGF0aW9uPihvcmllbnRhdGlvbiksCisgICAgICAgIFJlZ3VsYXJTY3JvbGxiYXIpOworICAgIG1f
Z3JvdXAtPnNjcm9sbGJhckNyZWF0ZWQodGhpcyk7Cit9CisKK1dlYlBsdWdpblNjcm9sbGJhcklt
cGw6On5XZWJQbHVnaW5TY3JvbGxiYXJJbXBsKCkKK3sKKyAgICBtX2dyb3VwLT5zY3JvbGxiYXJE
ZXN0cm95ZWQodGhpcyk7Cit9CisKK3ZvaWQgV2ViUGx1Z2luU2Nyb2xsYmFySW1wbDo6c2V0U2Ny
b2xsT2Zmc2V0KGludCBzY3JvbGxPZmZzZXQpCit7CisgICAgbV9zY3JvbGxPZmZzZXQgPSBzY3Jv
bGxPZmZzZXQ7CisgICAgbV9jbGllbnQtPnZhbHVlQ2hhbmdlZCh0aGlzKTsKK30KKwordm9pZCBX
ZWJQbHVnaW5TY3JvbGxiYXJJbXBsOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChjb25zdCBJbnRS
ZWN0JiByZWN0KQoreworICAgIFdlYlJlY3Qgd2VicmVjdChyZWN0KTsKKyAgICB3ZWJyZWN0Lngg
Kz0gbV9zY3JvbGxiYXItPngoKTsKKyAgICB3ZWJyZWN0LnkgKz0gbV9zY3JvbGxiYXItPnkoKTsK
KyAgICBtX2NsaWVudC0+aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QodGhpcywgd2VicmVjdCk7Cit9
CisKK3ZvaWQgV2ViUGx1Z2luU2Nyb2xsYmFySW1wbDo6Z2V0VGlja21hcmtzKFZlY3RvcjxJbnRS
ZWN0PiYgdGlja21hcmtzKSBjb25zdAoreworICAgIFdlYlZlY3RvcjxXZWJSZWN0PiB0aWNrczsK
KyAgICBtX2NsaWVudC0+Z2V0VGlja21hcmtzKGNvbnN0X2Nhc3Q8V2ViUGx1Z2luU2Nyb2xsYmFy
SW1wbCo+KHRoaXMpLCAmdGlja3MpOworICAgIHRpY2ttYXJrcy5yZXNpemUodGlja3Muc2l6ZSgp
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpY2tzLnNpemUoKTsgKytpKQorICAgICAg
ICB0aWNrbWFya3NbaV0gPSB0aWNrc1tpXTsKK30KKworSW50UG9pbnQgV2ViUGx1Z2luU2Nyb2xs
YmFySW1wbDo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IEludFBv
aW50JiBwYXJlbnRQb2ludCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCBvZmZzZXQocGFyZW50UG9p
bnQueCgpIC0gbV9zY3JvbGxiYXItPngoKSwgcGFyZW50UG9pbnQueSgpIC0gbV9zY3JvbGxiYXIt
PnkoKSk7CisgICAgcmV0dXJuIG1fc2Nyb2xsYmFyLT5XaWRnZXQ6OmNvbnZlcnRGcm9tQ29udGFp
bmluZ1ZpZXcob2Zmc2V0KTsKK30KKwordm9pZCBXZWJQbHVnaW5TY3JvbGxiYXJJbXBsOjpzY3Jv
bGxiYXJTdHlsZUNoYW5nZWQoKQoreworICAgIG1fY2xpZW50LT5vdmVybGF5Q2hhbmdlZCh0aGlz
KTsKK30KKworYm9vbCBXZWJQbHVnaW5TY3JvbGxiYXJJbXBsOjppc092ZXJsYXkoKSBjb25zdAor
eworICAgIHJldHVybiBtX3Njcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCk7Cit9CisKK2lu
dCBXZWJQbHVnaW5TY3JvbGxiYXJJbXBsOjp2YWx1ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
c2Nyb2xsT2Zmc2V0OworfQorCit2b2lkIFdlYlBsdWdpblNjcm9sbGJhckltcGw6OnNldExvY2F0
aW9uKGNvbnN0IFdlYlJlY3QmIHJlY3QpCit7CisgICAgSW50UmVjdCBvbGRSZWN0ID0gbV9zY3Jv
bGxiYXItPmZyYW1lUmVjdCgpOworICAgIG1fc2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3QocmVjdCk7
CisgICAgaWYgKFdlYlJlY3Qob2xkUmVjdCkgIT0gcmVjdCkKKyAgICAgIG1fc2Nyb2xsYmFyLT5p
bnZhbGlkYXRlKCk7CisKKyAgICBpbnQgbGVuZ3RoID0gbV9zY3JvbGxiYXItPm9yaWVudGF0aW9u
KCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IG1fc2Nyb2xsYmFyLT53aWR0aCgpIDogbV9zY3Jv
bGxiYXItPmhlaWdodCgpOworICAgIGludCBwYWdlU3RlcCA9IG1heChtYXgoc3RhdGljX2Nhc3Q8
aW50PihzdGF0aWNfY2FzdDxmbG9hdD4obGVuZ3RoKSAqIFNjcm9sbGJhcjo6bWluRnJhY3Rpb25U
b1N0ZXBXaGVuUGFnaW5nKCkpLCBsZW5ndGggLSBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVu
UGFnZXMoKSksIDEpOworICAgIG1fc2Nyb2xsYmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVs
c1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKKyAgICBtX3Njcm9sbGJhci0+c2V0RW5hYmxlZCht
X3Njcm9sbGJhci0+dG90YWxTaXplKCkgPiBsZW5ndGgpOworICAgIG1fc2Nyb2xsYmFyLT5zZXRQ
cm9wb3J0aW9uKGxlbmd0aCwgbV9zY3JvbGxiYXItPnRvdGFsU2l6ZSgpKTsKK30KKwordm9pZCBX
ZWJQbHVnaW5TY3JvbGxiYXJJbXBsOjpzZXRWYWx1ZShpbnQgcG9zaXRpb24pCit7CisgICAgbV9n
cm91cC0+c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKG1fc2Nyb2xsYmFyLT5vcmllbnRh
dGlvbigpLCBzdGF0aWNfY2FzdDxmbG9hdD4ocG9zaXRpb24pKTsKK30KKwordm9pZCBXZWJQbHVn
aW5TY3JvbGxiYXJJbXBsOjpzZXREb2N1bWVudFNpemUoaW50IHNpemUpCit7CisgICAgaW50IGxl
bmd0aCA9IG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIg
PyBtX3Njcm9sbGJhci0+d2lkdGgoKSA6IG1fc2Nyb2xsYmFyLT5oZWlnaHQoKTsKKyAgICBtX3Nj
cm9sbGJhci0+c2V0RW5hYmxlZChzaXplID4gbGVuZ3RoKTsKKyAgICBtX3Njcm9sbGJhci0+c2V0
UHJvcG9ydGlvbihsZW5ndGgsIHNpemUpOworfQorCit2b2lkIFdlYlBsdWdpblNjcm9sbGJhcklt
cGw6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBn
cmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikKK3sKKyAgICBXZWJDb3JlOjpTY3JvbGxEaXJl
Y3Rpb24gZGlyOworICAgIGJvb2wgaG9yaXpvbnRhbCA9IG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlv
bigpID09IEhvcml6b250YWxTY3JvbGxiYXI7CisgICAgaWYgKGRpcmVjdGlvbiA9PSBTY3JvbGxG
b3J3YXJkKQorICAgICAgICBkaXIgPSBob3Jpem9udGFsID8gU2Nyb2xsUmlnaHQgOiBTY3JvbGxE
b3duOworICAgIGVsc2UKKyAgICAgICAgZGlyID0gaG9yaXpvbnRhbCA/IFNjcm9sbExlZnQgOiBT
Y3JvbGxVcDsKKworICAgIG1fZ3JvdXAtPnNjcm9sbChkaXIsIHN0YXRpY19jYXN0PFdlYkNvcmU6
OlNjcm9sbEdyYW51bGFyaXR5PihncmFudWxhcml0eSksIG11bHRpcGxpZXIpOworfQorCit2b2lk
IFdlYlBsdWdpblNjcm9sbGJhckltcGw6OnBhaW50KFdlYkNhbnZhcyogY2FudmFzLCBjb25zdCBX
ZWJSZWN0JiByZWN0KQoreworICAgIG1fc2Nyb2xsYmFyLT5wYWludCgmR3JhcGhpY3NDb250ZXh0
QnVpbGRlcihjYW52YXMpLmNvbnRleHQoKSwgcmVjdCk7Cit9CisKK2Jvb2wgV2ViUGx1Z2luU2Ny
b2xsYmFySW1wbDo6aGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCkK
K3sKKyAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHsKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6Ok1v
dXNlRG93bjoKKyAgICAgICAgcmV0dXJuIG9uTW91c2VEb3duKGV2ZW50KTsKKyAgICBjYXNlIFdl
YklucHV0RXZlbnQ6Ok1vdXNlVXA6CisgICAgICAgIHJldHVybiBvbk1vdXNlVXAoZXZlbnQpOwor
ICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6TW91c2VNb3ZlOgorICAgICAgICByZXR1cm4gb25Nb3Vz
ZU1vdmUoZXZlbnQpOworICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6TW91c2VMZWF2ZToKKyAgICAg
ICAgcmV0dXJuIG9uTW91c2VMZWF2ZShldmVudCk7CisgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpN
b3VzZVdoZWVsOgorICAgICAgICByZXR1cm4gb25Nb3VzZVdoZWVsKGV2ZW50KTsKKyAgICBjYXNl
IFdlYklucHV0RXZlbnQ6OktleURvd246CisgICAgICAgIHJldHVybiBvbktleURvd24oZXZlbnQp
OworICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6VW5kZWZpbmVkOgorICAgIGNhc2UgV2ViSW5wdXRF
dmVudDo6TW91c2VFbnRlcjoKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6OlJhd0tleURvd246Cisg
ICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpLZXlVcDoKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6OkNo
YXI6CisgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpUb3VjaFN0YXJ0OgorICAgIGNhc2UgV2ViSW5w
dXRFdmVudDo6VG91Y2hNb3ZlOgorICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6VG91Y2hFbmQ6Cisg
ICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpUb3VjaENhbmNlbDoKKyAgICBkZWZhdWx0OgorICAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBXZWJQbHVnaW5T
Y3JvbGxiYXJJbXBsOjpvbk1vdXNlRG93bihjb25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCkKK3sK
KyAgICBXZWJNb3VzZUV2ZW50IG1vdXNlZG93biA9ICpzdGF0aWNfY2FzdDxjb25zdCBXZWJNb3Vz
ZUV2ZW50Kj4oJmV2ZW50KTsKKyAgICBpZiAoIW1fc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS5jb250
YWlucyhtb3VzZWRvd24ueCwgbW91c2Vkb3duLnkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBtb3VzZWRvd24ueCAtPSBtX3Njcm9sbGJhci0+eCgpOworICAgIG1vdXNlZG93bi55IC09
IG1fc2Nyb2xsYmFyLT55KCk7CisgICAgbV9zY3JvbGxiYXItPm1vdXNlRG93bihQbGF0Zm9ybU1v
dXNlRXZlbnRCdWlsZGVyKG1fc2Nyb2xsYmFyLmdldCgpLCBtb3VzZWRvd24pKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJQbHVnaW5TY3JvbGxiYXJJbXBsOjpvbk1vdXNlVXAoY29u
c3QgV2ViSW5wdXRFdmVudCYgZXZlbnQpCit7CisgICAgV2ViTW91c2VFdmVudCBtb3VzZXVwID0g
KnN0YXRpY19jYXN0PGNvbnN0IFdlYk1vdXNlRXZlbnQqPigmZXZlbnQpOworICAgIGlmIChtX3Nj
cm9sbGJhci0+cHJlc3NlZFBhcnQoKSA9PSBOb1BhcnQpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHJldHVybiBtX3Njcm9sbGJhci0+bW91c2VVcChQbGF0Zm9ybU1vdXNlRXZlbnRCdWls
ZGVyKG1fc2Nyb2xsYmFyLmdldCgpLCBtb3VzZXVwKSk7Cit9CisKK2Jvb2wgV2ViUGx1Z2luU2Ny
b2xsYmFySW1wbDo6b25Nb3VzZU1vdmUoY29uc3QgV2ViSW5wdXRFdmVudCYgZXZlbnQpCit7Cisg
ICAgV2ViTW91c2VFdmVudCBtb3VzZW1vdmUgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgV2ViTW91c2VF
dmVudCo+KCZldmVudCk7CisgICAgaWYgKG1fc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS5jb250YWlu
cyhtb3VzZW1vdmUueCwgbW91c2Vtb3ZlLnkpCisgICAgICAgIHx8IG1fc2Nyb2xsYmFyLT5wcmVz
c2VkUGFydCgpICE9IE5vUGFydCkgeworICAgICAgICBtb3VzZW1vdmUueCAtPSBtX3Njcm9sbGJh
ci0+eCgpOworICAgICAgICBtb3VzZW1vdmUueSAtPSBtX3Njcm9sbGJhci0+eSgpOworICAgICAg
ICByZXR1cm4gbV9zY3JvbGxiYXItPm1vdXNlTW92ZWQoUGxhdGZvcm1Nb3VzZUV2ZW50QnVpbGRl
cihtX3Njcm9sbGJhci5nZXQoKSwgbW91c2Vtb3ZlKSk7CisgICAgfQorCisgICAgaWYgKG1fc2Ny
b2xsYmFyLT5ob3ZlcmVkUGFydCgpICE9IE5vUGFydCAmJiAhbV9zY3JvbGxiYXItPmlzT3Zlcmxh
eVNjcm9sbGJhcigpKQorICAgICAgICBtX3Njcm9sbGJhci0+bW91c2VFeGl0ZWQoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgV2ViUGx1Z2luU2Nyb2xsYmFySW1wbDo6b25Nb3VzZUxl
YXZlKGNvbnN0IFdlYklucHV0RXZlbnQmIGV2ZW50KQoreworICAgIGlmIChtX3Njcm9sbGJhci0+
aG92ZXJlZFBhcnQoKSAhPSBOb1BhcnQpCisgICAgICAgIG1fc2Nyb2xsYmFyLT5tb3VzZUV4aXRl
ZCgpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFdlYlBsdWdpblNjcm9sbGJhcklt
cGw6Om9uTW91c2VXaGVlbChjb25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCkKK3sKKyAgICBXZWJN
b3VzZVdoZWVsRXZlbnQgbW91c2V3aGVlbCA9ICpzdGF0aWNfY2FzdDxjb25zdCBXZWJNb3VzZVdo
ZWVsRXZlbnQqPigmZXZlbnQpOworICAgIFBsYXRmb3JtV2hlZWxFdmVudEJ1aWxkZXIgcGxhdGZv
cm1FdmVudChtX3Njcm9sbGJhci5nZXQoKSwgbW91c2V3aGVlbCk7CisgICAgcmV0dXJuIG1fZ3Jv
dXAtPmhhbmRsZVdoZWVsRXZlbnQocGxhdGZvcm1FdmVudCk7Cit9CisKK2Jvb2wgV2ViUGx1Z2lu
U2Nyb2xsYmFySW1wbDo6b25LZXlEb3duKGNvbnN0IFdlYklucHV0RXZlbnQmIGV2ZW50KQorewor
ICAgIFdlYktleWJvYXJkRXZlbnQga2V5Ym9hcmQgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgV2ViS2V5
Ym9hcmRFdmVudCo+KCZldmVudCk7CisgICAgaW50IGtleUNvZGU7CisgICAgLy8gV2UgaGF2ZSB0
byBkdXBsaWNhdGUgdGhpcyBsb2dpYyBmcm9tIFdlYlZpZXdJbXBsIGJlY2F1c2UgdGhlcmUgaXQg
dXNlcworICAgIC8vIENoYXIgYW5kIFJhd0tleURvd24gZXZlbnRzLCB3aGljaCBkb24ndCBleGlz
dCBhdCB0aGlzIHBvaW50LgorICAgIGlmIChrZXlib2FyZC53aW5kb3dzS2V5Q29kZSA9PSBWS0VZ
X1NQQUNFKQorICAgICAgICBrZXlDb2RlID0gKChrZXlib2FyZC5tb2RpZmllcnMgJiBXZWJJbnB1
dEV2ZW50OjpTaGlmdEtleSkgPyBWS0VZX1BSSU9SIDogVktFWV9ORVhUKTsKKyAgICBlbHNlIHsK
KyAgICAgICAgaWYgKGtleWJvYXJkLm1vZGlmaWVycyA9PSBXZWJJbnB1dEV2ZW50OjpDb250cm9s
S2V5KSB7CisgICAgICAgICAgICAvLyBNYXRjaCBGRiBiZWhhdmlvciBpbiB0aGUgc2Vuc2UgdGhh
dCBDdHJsK2hvbWUvZW5kIGFyZSB0aGUgb25seSBDdHJsCisgICAgICAgICAgICAvLyBrZXkgY29t
YmluYXRpb25zIHdoaWNoIGFmZmVjdCBzY3JvbGxpbmcuIFNhZmFyaSBpcyBidWdneSBpbiB0aGUK
KyAgICAgICAgICAgIC8vIHNlbnNlIHRoYXQgaXQgc2Nyb2xscyB0aGUgcGFnZSBmb3IgYWxsIEN0
cmwrc2Nyb2xsaW5nIGtleQorICAgICAgICAgICAgLy8gY29tYmluYXRpb25zLiBGb3IgZS5nLiBD
dHJsK3BndXAvcGdkbi91cC9kb3duLCBldGMuCisgICAgICAgICAgICBzd2l0Y2ggKGtleWJvYXJk
LndpbmRvd3NLZXlDb2RlKSB7CisgICAgICAgICAgICBjYXNlIFZLRVlfSE9NRToKKyAgICAgICAg
ICAgIGNhc2UgVktFWV9FTkQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChrZXlib2FyZC5pc1N5c3RlbUtleSB8fCAoa2V5Ym9hcmQu
bW9kaWZpZXJzICYgV2ViSW5wdXRFdmVudDo6U2hpZnRLZXkpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgIGtleUNvZGUgPSBrZXlib2FyZC53aW5kb3dzS2V5Q29kZTsKKyAg
ICB9CisgICAgV2ViQ29yZTo6U2Nyb2xsRGlyZWN0aW9uIHNjcm9sbERpcmVjdGlvbjsKKyAgICBX
ZWJDb3JlOjpTY3JvbGxHcmFudWxhcml0eSBzY3JvbGxHcmFudWxhcml0eTsKKyAgICBpZiAoV2Vi
Vmlld0ltcGw6Om1hcEtleUNvZGVGb3JTY3JvbGwoa2V5Q29kZSwgJnNjcm9sbERpcmVjdGlvbiwg
JnNjcm9sbEdyYW51bGFyaXR5KSkgeworICAgICAgICAvLyBXaWxsIHJldHVybiBmYWxzZSBpZiBz
Y3JvbGwgZGlyZWN0aW9uIHdhc24ndCBjb21wYXRpYmxlIHdpdGggdGhpcyBzY3JvbGxiYXIuCisg
ICAgICAgIHJldHVybiBtX2dyb3VwLT5zY3JvbGwoc2Nyb2xsRGlyZWN0aW9uLCBzY3JvbGxHcmFu
dWxhcml0eSk7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5T
Y3JvbGxiYXJJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5TY3Jv
bGxiYXJJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjQyY2I4MmZkOTViM2ZlOGYyNjZmZDJkZDcxZjE1MmUx
NzAyNTQzOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlBsdWdpblNjcm9sbGJhckltcGwuaApAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFdlYlBsdWdpblNjcm9sbGJhckltcGxfaAorI2RlZmluZSBXZWJQbHVnaW5TY3JvbGxi
YXJJbXBsX2gKKworI2luY2x1ZGUgIldlYlBsdWdpblNjcm9sbGJhci5oIgorCisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworY2xhc3MgSW50UG9pbnQ7CitjbGFzcyBJbnRSZWN0OworY2xhc3MgU2Nyb2xsYmFyOwor
fQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgU2Nyb2xsYmFyR3JvdXA7CisKK2NsYXNz
IFdlYlBsdWdpblNjcm9sbGJhckltcGwgOiBwdWJsaWMgV2ViUGx1Z2luU2Nyb2xsYmFyIHsKK3B1
YmxpYzoKKyAgICBXZWJQbHVnaW5TY3JvbGxiYXJJbXBsKE9yaWVudGF0aW9uLAorICAgICAgICAg
ICAgICAgICAgICAgU2Nyb2xsYmFyR3JvdXAqLAorICAgICAgICAgICAgICAgICAgICAgV2ViUGx1
Z2luU2Nyb2xsYmFyQ2xpZW50Kik7CisgICAgfldlYlBsdWdpblNjcm9sbGJhckltcGwoKTsKKwor
ICAgIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGludCk7CisgICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xs
YmFyUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCBnZXRUaWNrbWFya3Mo
VmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+JikgY29uc3Q7CisgICAgV2ViQ29yZTo6SW50UG9pbnQg
Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFdlYkNvcmU6OkludFBv
aW50JiBwYXJlbnRQb2ludCkgY29uc3Q7CisgICAgdm9pZCBzY3JvbGxiYXJTdHlsZUNoYW5nZWQo
KTsKKworICAgIGludCBzY3JvbGxPZmZzZXQoKSB7IHJldHVybiBtX3Njcm9sbE9mZnNldDsgfQor
ICAgIFdlYkNvcmU6OlNjcm9sbGJhciogc2Nyb2xsYmFyKCkgeyByZXR1cm4gbV9zY3JvbGxiYXIu
Z2V0KCk7IH0KKworICAgIC8vIFdlYktpdDo6V2ViU2Nyb2xsYmFyIG1ldGhvZHMKKyAgICB2aXJ0
dWFsIGJvb2wgaXNPdmVybGF5KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgdmFsdWUoKSBjb25z
dDsKKworICAgIC8vIFdlYktpdDo6V2ViUGx1Z2luU2Nyb2xsYmFyIG1ldGhvZHMKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0TG9jYXRpb24oY29uc3QgV2ViUmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRWYWx1ZShpbnQgcG9zaXRpb24pOworICAgIHZpcnR1YWwgdm9pZCBzZXREb2N1bWVudFNpemUo
aW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3Jh
bnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJD
YW52YXMqLCBjb25zdCBXZWJSZWN0Jik7CisgICAgdmlydHVhbCBib29sIGhhbmRsZUlucHV0RXZl
bnQoY29uc3QgV2ViSW5wdXRFdmVudCYpOworCitwcml2YXRlOgorICAgIGJvb2wgb25Nb3VzZURv
d24oY29uc3QgV2ViSW5wdXRFdmVudCYpOworICAgIGJvb2wgb25Nb3VzZVVwKGNvbnN0IFdlYklu
cHV0RXZlbnQmKTsKKyAgICBib29sIG9uTW91c2VNb3ZlKGNvbnN0IFdlYklucHV0RXZlbnQmKTsK
KyAgICBib29sIG9uTW91c2VMZWF2ZShjb25zdCBXZWJJbnB1dEV2ZW50Jik7CisgICAgYm9vbCBv
bk1vdXNlV2hlZWwoY29uc3QgV2ViSW5wdXRFdmVudCYpOworICAgIGJvb2wgb25LZXlEb3duKGNv
bnN0IFdlYklucHV0RXZlbnQmKTsKKworICAgIFNjcm9sbGJhckdyb3VwKiBtX2dyb3VwOworICAg
IFdlYlBsdWdpblNjcm9sbGJhckNsaWVudCogbV9jbGllbnQ7CisKKyAgICBpbnQgbV9zY3JvbGxP
ZmZzZXQ7CisgICAgUmVmUHRyPFdlYkNvcmU6OlNjcm9sbGJhcj4gbV9zY3JvbGxiYXI7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlNjcm9sbGJhckltcGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA3YTNlYTkwZDY2YzNmNjQ5MTUwNzgyM2UyN2NmZjYzZjNlM2JlNDA0Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlNjcm9sbGJhckltcGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjkzICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViU2Nyb2xsYmFySW1wbC5oIgotCi0j
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiS2V5Ym9hcmRDb2Rlcy5oIgot
I2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCi0jaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKLSNp
bmNsdWRlICJTY3JvbGxiYXIuaCIKLSNpbmNsdWRlICJTY3JvbGxiYXJHcm91cC5oIgotI2luY2x1
ZGUgIlNjcm9sbGJhclRoZW1lLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViQ2FudmFzLmgiCi0j
aW5jbHVkZSAiV2ViSW5wdXRFdmVudC5oIgotI2luY2x1ZGUgIldlYklucHV0RXZlbnRDb252ZXJz
aW9uLmgiCi0jaW5jbHVkZSAiV2ViUGx1Z2luQ29udGFpbmVySW1wbC5oIgotI2luY2x1ZGUgInBs
YXRmb3JtL1dlYlJlY3QuaCIKLSNpbmNsdWRlICJXZWJTY3JvbGxiYXJDbGllbnQuaCIKLSNpbmNs
dWRlICJwbGF0Zm9ybS9XZWJWZWN0b3IuaCIKLSNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgotI2lu
Y2x1ZGUgInBhaW50aW5nL0dyYXBoaWNzQ29udGV4dEJ1aWxkZXIuaCIKLQotdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotV2ViU2Nyb2xsYmFyKiBXZWJTY3JvbGxiYXI6OmNyZWF0ZUZvclBsdWdpbihPcmllbnRhdGlv
biBvcmllbnRhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV2ViUGx1Z2luQ29udGFpbmVyKiBwbHVnaW5Db250YWluZXIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlNjcm9sbGJhckNsaWVudCogY2xpZW50KQot
ewotICAgIFdlYlBsdWdpbkNvbnRhaW5lckltcGwqIHBsdWdpbiA9IHN0YXRpY19jYXN0PFdlYlBs
dWdpbkNvbnRhaW5lckltcGwqPihwbHVnaW5Db250YWluZXIpOwotICAgIHJldHVybiBuZXcgV2Vi
U2Nyb2xsYmFySW1wbChvcmllbnRhdGlvbiwgcGx1Z2luLT5zY3JvbGxiYXJHcm91cCgpLCBjbGll
bnQpOwotfQotCi1pbnQgV2ViU2Nyb2xsYmFyOjpkZWZhdWx0VGhpY2tuZXNzKCkKLXsKLSAgICBy
ZXR1cm4gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCktPnNjcm9sbGJhclRoaWNrbmVzcygpOwotfQot
Ci1XZWJTY3JvbGxiYXJJbXBsOjpXZWJTY3JvbGxiYXJJbXBsKE9yaWVudGF0aW9uIG9yaWVudGF0
aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY3JvbGxiYXJHcm91cCog
Z3JvdXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlNjcm9sbGJhckNs
aWVudCogY2xpZW50KQotICAgIDogbV9ncm91cChncm91cCkKLSAgICAsIG1fY2xpZW50KGNsaWVu
dCkKLSAgICAsIG1fc2Nyb2xsT2Zmc2V0KDApCi17Ci0gICAgbV9zY3JvbGxiYXIgPSBTY3JvbGxi
YXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcigKLSAgICAgICAgc3RhdGljX2Nhc3Q8U2Nyb2xsYWJs
ZUFyZWEqPihtX2dyb3VwKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8U2Nyb2xsYmFyT3JpZW50YXRp
b24+KG9yaWVudGF0aW9uKSwKLSAgICAgICAgUmVndWxhclNjcm9sbGJhcik7Ci0gICAgbV9ncm91
cC0+c2Nyb2xsYmFyQ3JlYXRlZCh0aGlzKTsKLX0KLQotV2ViU2Nyb2xsYmFySW1wbDo6fldlYlNj
cm9sbGJhckltcGwoKQotewotICAgIG1fZ3JvdXAtPnNjcm9sbGJhckRlc3Ryb3llZCh0aGlzKTsK
LX0KLQotdm9pZCBXZWJTY3JvbGxiYXJJbXBsOjpzZXRTY3JvbGxPZmZzZXQoaW50IHNjcm9sbE9m
ZnNldCkKLXsKLSAgICBtX3Njcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldDsKLSAgICBtX2NsaWVu
dC0+dmFsdWVDaGFuZ2VkKHRoaXMpOwotfQotCi12b2lkIFdlYlNjcm9sbGJhckltcGw6OmludmFs
aWRhdGVTY3JvbGxiYXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgV2ViUmVjdCB3
ZWJyZWN0KHJlY3QpOwotICAgIHdlYnJlY3QueCArPSBtX3Njcm9sbGJhci0+eCgpOwotICAgIHdl
YnJlY3QueSArPSBtX3Njcm9sbGJhci0+eSgpOwotICAgIG1fY2xpZW50LT5pbnZhbGlkYXRlU2Ny
b2xsYmFyUmVjdCh0aGlzLCB3ZWJyZWN0KTsKLX0KLQotdm9pZCBXZWJTY3JvbGxiYXJJbXBsOjpn
ZXRUaWNrbWFya3MoVmVjdG9yPEludFJlY3Q+JiB0aWNrbWFya3MpIGNvbnN0Ci17Ci0gICAgV2Vi
VmVjdG9yPFdlYlJlY3Q+IHRpY2tzOwotICAgIG1fY2xpZW50LT5nZXRUaWNrbWFya3MoY29uc3Rf
Y2FzdDxXZWJTY3JvbGxiYXJJbXBsKj4odGhpcyksICZ0aWNrcyk7Ci0gICAgdGlja21hcmtzLnJl
c2l6ZSh0aWNrcy5zaXplKCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGlja3Muc2l6
ZSgpOyArK2kpCi0gICAgICAgIHRpY2ttYXJrc1tpXSA9IHRpY2tzW2ldOwotfQotCi1JbnRQb2lu
dCBXZWJTY3JvbGxiYXJJbXBsOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIo
Y29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAotewotICAgIEludFBvaW50IG9mZnNl
dChwYXJlbnRQb2ludC54KCkgLSBtX3Njcm9sbGJhci0+eCgpLCBwYXJlbnRQb2ludC55KCkgLSBt
X3Njcm9sbGJhci0+eSgpKTsKLSAgICByZXR1cm4gbV9zY3JvbGxiYXItPldpZGdldDo6Y29udmVy
dEZyb21Db250YWluaW5nVmlldyhvZmZzZXQpOwotfQotCi12b2lkIFdlYlNjcm9sbGJhckltcGw6
OnNjcm9sbGJhclN0eWxlQ2hhbmdlZCgpCi17Ci0gICAgbV9jbGllbnQtPm92ZXJsYXlDaGFuZ2Vk
KHRoaXMpOwotfQotCi1ib29sIFdlYlNjcm9sbGJhckltcGw6OmlzT3ZlcmxheSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fc2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKTsKLX0KLQotdm9p
ZCBXZWJTY3JvbGxiYXJJbXBsOjpzZXRMb2NhdGlvbihjb25zdCBXZWJSZWN0JiByZWN0KQotewot
ICAgIEludFJlY3Qgb2xkUmVjdCA9IG1fc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKTsKLSAgICBtX3Nj
cm9sbGJhci0+c2V0RnJhbWVSZWN0KHJlY3QpOwotICAgIGlmIChXZWJSZWN0KG9sZFJlY3QpICE9
IHJlY3QpCi0gICAgICBtX3Njcm9sbGJhci0+aW52YWxpZGF0ZSgpOwotCi0gICAgaW50IGxlbmd0
aCA9IG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBt
X3Njcm9sbGJhci0+d2lkdGgoKSA6IG1fc2Nyb2xsYmFyLT5oZWlnaHQoKTsKLSAgICBpbnQgcGFn
ZVN0ZXAgPSBtYXgobWF4KHN0YXRpY19jYXN0PGludD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KGxlbmd0
aCkgKiBTY3JvbGxiYXI6Om1pbkZyYWN0aW9uVG9TdGVwV2hlblBhZ2luZygpKSwgbGVuZ3RoIC0g
U2Nyb2xsYmFyOjptYXhPdmVybGFwQmV0d2VlblBhZ2VzKCkpLCAxKTsKLSAgICBtX3Njcm9sbGJh
ci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7Ci0g
ICAgbV9zY3JvbGxiYXItPnNldEVuYWJsZWQobV9zY3JvbGxiYXItPnRvdGFsU2l6ZSgpID4gbGVu
Z3RoKTsKLSAgICBtX3Njcm9sbGJhci0+c2V0UHJvcG9ydGlvbihsZW5ndGgsIG1fc2Nyb2xsYmFy
LT50b3RhbFNpemUoKSk7Ci19Ci0KLWludCBXZWJTY3JvbGxiYXJJbXBsOjp2YWx1ZSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fc2Nyb2xsT2Zmc2V0OwotfQotCi12b2lkIFdlYlNjcm9sbGJhcklt
cGw6OnNldFZhbHVlKGludCBwb3NpdGlvbikKLXsKLSAgICBtX2dyb3VwLT5zY3JvbGxUb09mZnNl
dFdpdGhvdXRBbmltYXRpb24obV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCksIHN0YXRpY19jYXN0
PGZsb2F0Pihwb3NpdGlvbikpOwotfQotCi12b2lkIFdlYlNjcm9sbGJhckltcGw6OnNldERvY3Vt
ZW50U2l6ZShpbnQgc2l6ZSkKLXsKLSAgICBpbnQgbGVuZ3RoID0gbV9zY3JvbGxiYXItPm9yaWVu
dGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IG1fc2Nyb2xsYmFyLT53aWR0aCgpIDog
bV9zY3JvbGxiYXItPmhlaWdodCgpOwotICAgIG1fc2Nyb2xsYmFyLT5zZXRFbmFibGVkKHNpemUg
PiBsZW5ndGgpOwotICAgIG1fc2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9uKGxlbmd0aCwgc2l6ZSk7
Ci19Ci0KLXZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJl
Y3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyKQot
ewotICAgIFdlYkNvcmU6OlNjcm9sbERpcmVjdGlvbiBkaXI7Ci0gICAgYm9vbCBob3Jpem9udGFs
ID0gbV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcjsKLSAg
ICBpZiAoZGlyZWN0aW9uID09IFNjcm9sbEZvcndhcmQpCi0gICAgICAgIGRpciA9IGhvcml6b250
YWwgPyBTY3JvbGxSaWdodCA6IFNjcm9sbERvd247Ci0gICAgZWxzZQotICAgICAgICBkaXIgPSBo
b3Jpem9udGFsID8gU2Nyb2xsTGVmdCA6IFNjcm9sbFVwOwotCi0gICAgbV9ncm91cC0+c2Nyb2xs
KGRpciwgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6U2Nyb2xsR3JhbnVsYXJpdHk+KGdyYW51bGFyaXR5
KSwgbXVsdGlwbGllcik7Ci19Ci0KLXZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6cGFpbnQoV2ViQ2Fu
dmFzKiBjYW52YXMsIGNvbnN0IFdlYlJlY3QmIHJlY3QpCi17Ci0gICAgbV9zY3JvbGxiYXItPnBh
aW50KCZHcmFwaGljc0NvbnRleHRCdWlsZGVyKGNhbnZhcykuY29udGV4dCgpLCByZWN0KTsKLX0K
LQotYm9vbCBXZWJTY3JvbGxiYXJJbXBsOjpoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0
RXZlbnQmIGV2ZW50KQotewotICAgIHN3aXRjaCAoZXZlbnQudHlwZSkgewotICAgIGNhc2UgV2Vi
SW5wdXRFdmVudDo6TW91c2VEb3duOgotICAgICAgICByZXR1cm4gb25Nb3VzZURvd24oZXZlbnQp
OwotICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6TW91c2VVcDoKLSAgICAgICAgcmV0dXJuIG9uTW91
c2VVcChldmVudCk7Ci0gICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpNb3VzZU1vdmU6Ci0gICAgICAg
IHJldHVybiBvbk1vdXNlTW92ZShldmVudCk7Ci0gICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpNb3Vz
ZUxlYXZlOgotICAgICAgICByZXR1cm4gb25Nb3VzZUxlYXZlKGV2ZW50KTsKLSAgICBjYXNlIFdl
YklucHV0RXZlbnQ6Ok1vdXNlV2hlZWw6Ci0gICAgICAgIHJldHVybiBvbk1vdXNlV2hlZWwoZXZl
bnQpOwotICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6S2V5RG93bjoKLSAgICAgICAgcmV0dXJuIG9u
S2V5RG93bihldmVudCk7Ci0gICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpVbmRlZmluZWQ6Ci0gICAg
Y2FzZSBXZWJJbnB1dEV2ZW50OjpNb3VzZUVudGVyOgotICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6
UmF3S2V5RG93bjoKLSAgICBjYXNlIFdlYklucHV0RXZlbnQ6OktleVVwOgotICAgIGNhc2UgV2Vi
SW5wdXRFdmVudDo6Q2hhcjoKLSAgICBjYXNlIFdlYklucHV0RXZlbnQ6OlRvdWNoU3RhcnQ6Ci0g
ICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpUb3VjaE1vdmU6Ci0gICAgY2FzZSBXZWJJbnB1dEV2ZW50
OjpUb3VjaEVuZDoKLSAgICBjYXNlIFdlYklucHV0RXZlbnQ6OlRvdWNoQ2FuY2VsOgotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1i
b29sIFdlYlNjcm9sbGJhckltcGw6Om9uTW91c2VEb3duKGNvbnN0IFdlYklucHV0RXZlbnQmIGV2
ZW50KQotewotICAgIFdlYk1vdXNlRXZlbnQgbW91c2Vkb3duID0gKnN0YXRpY19jYXN0PGNvbnN0
IFdlYk1vdXNlRXZlbnQqPigmZXZlbnQpOwotICAgIGlmICghbV9zY3JvbGxiYXItPmZyYW1lUmVj
dCgpLmNvbnRhaW5zKG1vdXNlZG93bi54LCBtb3VzZWRvd24ueSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIG1vdXNlZG93bi54IC09IG1fc2Nyb2xsYmFyLT54KCk7Ci0gICAgbW91c2Vk
b3duLnkgLT0gbV9zY3JvbGxiYXItPnkoKTsKLSAgICBtX3Njcm9sbGJhci0+bW91c2VEb3duKFBs
YXRmb3JtTW91c2VFdmVudEJ1aWxkZXIobV9zY3JvbGxiYXIuZ2V0KCksIG1vdXNlZG93bikpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYlNjcm9sbGJhckltcGw6Om9uTW91c2VVcChj
b25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCkKLXsKLSAgICBXZWJNb3VzZUV2ZW50IG1vdXNldXAg
PSAqc3RhdGljX2Nhc3Q8Y29uc3QgV2ViTW91c2VFdmVudCo+KCZldmVudCk7Ci0gICAgaWYgKG1f
c2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpID09IE5vUGFydCkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgcmV0dXJuIG1fc2Nyb2xsYmFyLT5tb3VzZVVwKFBsYXRmb3JtTW91c2VFdmVudEJ1
aWxkZXIobV9zY3JvbGxiYXIuZ2V0KCksIG1vdXNldXApKTsKLX0KLQotYm9vbCBXZWJTY3JvbGxi
YXJJbXBsOjpvbk1vdXNlTW92ZShjb25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCkKLXsKLSAgICBX
ZWJNb3VzZUV2ZW50IG1vdXNlbW92ZSA9ICpzdGF0aWNfY2FzdDxjb25zdCBXZWJNb3VzZUV2ZW50
Kj4oJmV2ZW50KTsKLSAgICBpZiAobV9zY3JvbGxiYXItPmZyYW1lUmVjdCgpLmNvbnRhaW5zKG1v
dXNlbW92ZS54LCBtb3VzZW1vdmUueSkKLSAgICAgICAgfHwgbV9zY3JvbGxiYXItPnByZXNzZWRQ
YXJ0KCkgIT0gTm9QYXJ0KSB7Ci0gICAgICAgIG1vdXNlbW92ZS54IC09IG1fc2Nyb2xsYmFyLT54
KCk7Ci0gICAgICAgIG1vdXNlbW92ZS55IC09IG1fc2Nyb2xsYmFyLT55KCk7Ci0gICAgICAgIHJl
dHVybiBtX3Njcm9sbGJhci0+bW91c2VNb3ZlZChQbGF0Zm9ybU1vdXNlRXZlbnRCdWlsZGVyKG1f
c2Nyb2xsYmFyLmdldCgpLCBtb3VzZW1vdmUpKTsKLSAgICB9Ci0KLSAgICBpZiAobV9zY3JvbGxi
YXItPmhvdmVyZWRQYXJ0KCkgIT0gTm9QYXJ0ICYmICFtX3Njcm9sbGJhci0+aXNPdmVybGF5U2Ny
b2xsYmFyKCkpCi0gICAgICAgIG1fc2Nyb2xsYmFyLT5tb3VzZUV4aXRlZCgpOwotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotYm9vbCBXZWJTY3JvbGxiYXJJbXBsOjpvbk1vdXNlTGVhdmUoY29uc3Qg
V2ViSW5wdXRFdmVudCYgZXZlbnQpCi17Ci0gICAgaWYgKG1fc2Nyb2xsYmFyLT5ob3ZlcmVkUGFy
dCgpICE9IE5vUGFydCkKLSAgICAgICAgbV9zY3JvbGxiYXItPm1vdXNlRXhpdGVkKCk7Ci0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgV2ViU2Nyb2xsYmFySW1wbDo6b25Nb3VzZVdoZWVs
KGNvbnN0IFdlYklucHV0RXZlbnQmIGV2ZW50KQotewotICAgIFdlYk1vdXNlV2hlZWxFdmVudCBt
b3VzZXdoZWVsID0gKnN0YXRpY19jYXN0PGNvbnN0IFdlYk1vdXNlV2hlZWxFdmVudCo+KCZldmVu
dCk7Ci0gICAgUGxhdGZvcm1XaGVlbEV2ZW50QnVpbGRlciBwbGF0Zm9ybUV2ZW50KG1fc2Nyb2xs
YmFyLmdldCgpLCBtb3VzZXdoZWVsKTsKLSAgICByZXR1cm4gbV9ncm91cC0+aGFuZGxlV2hlZWxF
dmVudChwbGF0Zm9ybUV2ZW50KTsKLX0KLQotYm9vbCBXZWJTY3JvbGxiYXJJbXBsOjpvbktleURv
d24oY29uc3QgV2ViSW5wdXRFdmVudCYgZXZlbnQpCi17Ci0gICAgV2ViS2V5Ym9hcmRFdmVudCBr
ZXlib2FyZCA9ICpzdGF0aWNfY2FzdDxjb25zdCBXZWJLZXlib2FyZEV2ZW50Kj4oJmV2ZW50KTsK
LSAgICBpbnQga2V5Q29kZTsKLSAgICAvLyBXZSBoYXZlIHRvIGR1cGxpY2F0ZSB0aGlzIGxvZ2lj
IGZyb20gV2ViVmlld0ltcGwgYmVjYXVzZSB0aGVyZSBpdCB1c2VzCi0gICAgLy8gQ2hhciBhbmQg
UmF3S2V5RG93biBldmVudHMsIHdoaWNoIGRvbid0IGV4aXN0IGF0IHRoaXMgcG9pbnQuCi0gICAg
aWYgKGtleWJvYXJkLndpbmRvd3NLZXlDb2RlID09IFZLRVlfU1BBQ0UpCi0gICAgICAgIGtleUNv
ZGUgPSAoKGtleWJvYXJkLm1vZGlmaWVycyAmIFdlYklucHV0RXZlbnQ6OlNoaWZ0S2V5KSA/IFZL
RVlfUFJJT1IgOiBWS0VZX05FWFQpOwotICAgIGVsc2UgewotICAgICAgICBpZiAoa2V5Ym9hcmQu
bW9kaWZpZXJzID09IFdlYklucHV0RXZlbnQ6OkNvbnRyb2xLZXkpIHsKLSAgICAgICAgICAgIC8v
IE1hdGNoIEZGIGJlaGF2aW9yIGluIHRoZSBzZW5zZSB0aGF0IEN0cmwraG9tZS9lbmQgYXJlIHRo
ZSBvbmx5IEN0cmwKLSAgICAgICAgICAgIC8vIGtleSBjb21iaW5hdGlvbnMgd2hpY2ggYWZmZWN0
IHNjcm9sbGluZy4gU2FmYXJpIGlzIGJ1Z2d5IGluIHRoZQotICAgICAgICAgICAgLy8gc2Vuc2Ug
dGhhdCBpdCBzY3JvbGxzIHRoZSBwYWdlIGZvciBhbGwgQ3RybCtzY3JvbGxpbmcga2V5Ci0gICAg
ICAgICAgICAvLyBjb21iaW5hdGlvbnMuIEZvciBlLmcuIEN0cmwrcGd1cC9wZ2RuL3VwL2Rvd24s
IGV0Yy4KLSAgICAgICAgICAgIHN3aXRjaCAoa2V5Ym9hcmQud2luZG93c0tleUNvZGUpIHsKLSAg
ICAgICAgICAgIGNhc2UgVktFWV9IT01FOgotICAgICAgICAgICAgY2FzZSBWS0VZX0VORDoKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KGtleWJvYXJkLmlzU3lzdGVtS2V5IHx8IChrZXlib2FyZC5tb2RpZmllcnMgJiBXZWJJbnB1dEV2
ZW50OjpTaGlmdEtleSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAga2V5
Q29kZSA9IGtleWJvYXJkLndpbmRvd3NLZXlDb2RlOwotICAgIH0KLSAgICBXZWJDb3JlOjpTY3Jv
bGxEaXJlY3Rpb24gc2Nyb2xsRGlyZWN0aW9uOwotICAgIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFy
aXR5IHNjcm9sbEdyYW51bGFyaXR5OwotICAgIGlmIChXZWJWaWV3SW1wbDo6bWFwS2V5Q29kZUZv
clNjcm9sbChrZXlDb2RlLCAmc2Nyb2xsRGlyZWN0aW9uLCAmc2Nyb2xsR3JhbnVsYXJpdHkpKSB7
Ci0gICAgICAgIC8vIFdpbGwgcmV0dXJuIGZhbHNlIGlmIHNjcm9sbCBkaXJlY3Rpb24gd2Fzbid0
IGNvbXBhdGlibGUgd2l0aCB0aGlzIHNjcm9sbGJhci4KLSAgICAgICAgcmV0dXJuIG1fZ3JvdXAt
PnNjcm9sbChzY3JvbGxEaXJlY3Rpb24sIHNjcm9sbEdyYW51bGFyaXR5KTsKLSAgICB9Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNjcm9sbGJhckltcGwuaCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlNjcm9sbGJhckltcGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNjQ0NDQzYzFjN2VmMzBlNTQ1YTBjMjU3OTdhZDE4ZGZhNDI2ZTVmNC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBXZWJTY3JvbGxiYXJJbXBsX2gKLSNkZWZpbmUgV2ViU2Nyb2xsYmFySW1wbF9o
Ci0KLSNpbmNsdWRlICJXZWJTY3JvbGxiYXIuaCIKLQotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
LSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIElu
dFBvaW50OwotY2xhc3MgSW50UmVjdDsKLWNsYXNzIFNjcm9sbGJhcjsKLX0KLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLWNsYXNzIFNjcm9sbGJhckdyb3VwOwotCi1jbGFzcyBXZWJTY3JvbGxiYXJJ
bXBsIDogcHVibGljIFdlYlNjcm9sbGJhciB7Ci1wdWJsaWM6Ci0gICAgV2ViU2Nyb2xsYmFySW1w
bChPcmllbnRhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgIFNjcm9sbGJhckdyb3VwKiwgICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgIFdlYlNjcm9sbGJhckNsaWVu
dCopOwotICAgIH5XZWJTY3JvbGxiYXJJbXBsKCk7Ci0KLSAgICB2b2lkIHNldFNjcm9sbE9mZnNl
dChpbnQpOwotICAgIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpOwotICAgIHZvaWQgZ2V0VGlja21hcmtzKFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0
PiYpIGNvbnN0OwotICAgIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1Zp
ZXdUb1Njcm9sbGJhcihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0
OwotICAgIHZvaWQgc2Nyb2xsYmFyU3R5bGVDaGFuZ2VkKCk7Ci0KLSAgICBpbnQgc2Nyb2xsT2Zm
c2V0KCkgeyByZXR1cm4gbV9zY3JvbGxPZmZzZXQ7IH0KLSAgICBXZWJDb3JlOjpTY3JvbGxiYXIq
IHNjcm9sbGJhcigpIHsgcmV0dXJuIG1fc2Nyb2xsYmFyLmdldCgpOyB9Ci0KLSAgICAvLyBXZWJL
aXQ6OldlYlNjcm9sbGJhciBtZXRob2RzCi0gICAgdmlydHVhbCBib29sIGlzT3ZlcmxheSgpIGNv
bnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRMb2NhdGlvbihjb25zdCBXZWJSZWN0Jik7Ci0gICAg
dmlydHVhbCBpbnQgdmFsdWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUoaW50
IHBvc2l0aW9uKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RG9jdW1lbnRTaXplKGludCBzaXplKTsK
LSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJp
dHksIGZsb2F0IG11bHRpcGxpZXIpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJDYW52YXMq
LCBjb25zdCBXZWJSZWN0Jik7Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZUlucHV0RXZlbnQoY29u
c3QgV2ViSW5wdXRFdmVudCYpOwotCi1wcml2YXRlOgotICAgIGJvb2wgb25Nb3VzZURvd24oY29u
c3QgV2ViSW5wdXRFdmVudCYgZXZlbnQpOwotICAgIGJvb2wgb25Nb3VzZVVwKGNvbnN0IFdlYklu
cHV0RXZlbnQmIGV2ZW50KTsKLSAgICBib29sIG9uTW91c2VNb3ZlKGNvbnN0IFdlYklucHV0RXZl
bnQmIGV2ZW50KTsKLSAgICBib29sIG9uTW91c2VMZWF2ZShjb25zdCBXZWJJbnB1dEV2ZW50JiBl
dmVudCk7Ci0gICAgYm9vbCBvbk1vdXNlV2hlZWwoY29uc3QgV2ViSW5wdXRFdmVudCYgZXZlbnQp
OwotICAgIGJvb2wgb25LZXlEb3duKGNvbnN0IFdlYklucHV0RXZlbnQmIGV2ZW50KTsKLQotICAg
IFNjcm9sbGJhckdyb3VwKiBtX2dyb3VwOwotICAgIFdlYlNjcm9sbGJhckNsaWVudCogbV9jbGll
bnQ7Ci0KLSAgICBpbnQgbV9zY3JvbGxPZmZzZXQ7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlNjcm9s
bGJhcj4gbV9zY3JvbGxiYXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlm
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>