<?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>70698</bug_id>
          
          <creation_ts>2011-10-23 10:32:25 -0700</creation_ts>
          <short_desc>Removed SharedUChar and tightened language around its previous uses</short_desc>
          <delta_ts>2011-10-24 21:19:47 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>abarth</cc>
    
    <cc>andersca</cc>
    
    <cc>barraclough</cc>
    
    <cc>dglazkov</cc>
    
    <cc>japhet</cc>
    
    <cc>levin</cc>
    
    <cc>levin+threading</cc>
    
    <cc>macpherson</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>489036</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-10-23 10:32:25 -0700</bug_when>
    <thetext>Removed some String misfeatures</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489038</commentid>
    <comment_count>1</comment_count>
      <attachid>112118</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-10-23 10:50:00 -0700</bug_when>
    <thetext>Created attachment 112118
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489045</commentid>
    <comment_count>2</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-10-23 12:02:20 -0700</bug_when>
    <thetext>This patch does a bunch of unrelated things and would be easier to review if you split it up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489062</commentid>
    <comment_count>3</comment_count>
      <attachid>112118</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-10-23 13:06:14 -0700</bug_when>
    <thetext>Comment on attachment 112118
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:17
&gt; +        a threading solution by pure inertia.)

Actually this is incorrect on several levels:

1. There is evidence of a speed up: http://trac.webkit.org/changeset/44325 for sharing across JSC and WebCore but maybe you meant across threads. I don&apos;t remember if I did that measurement. It was meant for the xml case when the buffer is shared across threads and that buffer may be huge.

2. It shouldn&apos;t be happening for small strings (unless someone broke that), but it was specifically tuned to pick a sweet spot for the length at which to copy.

3. The whole point of this feature was due to workers. I had to make UString (ScriptString) shareable across threads. I can&apos;t remember why I added the other feature to share string between WebCore and JavaScriptCore but that was a side thing.

Frankly there is something that is slightly broken in this feature due to what someone else did, but it is fixable -- however removing it will not fix things.

So in short please don&apos;t do this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489063</commentid>
    <comment_count>4</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-10-23 13:07:44 -0700</bug_when>
    <thetext>PS It would be nice to include the original author of the code if you&apos;re considering removing it so that you can get the background since you looked at the svn history of it that should have hopefully been apparent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489064</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-10-23 13:48:27 -0700</bug_when>
    <thetext>&gt; PS It would be nice to include the original author of the code if you&apos;re considering removing it so that you can get the background since you looked at the svn history of it that should have hopefully been apparent.

I apologize for the oversight -- it looked to me like a bot had auto-CC&apos;d you when I posted the patch, but perhaps I read that wrong.

&gt; Frankly there is something that is slightly broken in this feature due to what someone else did, but it is fixable -- however removing it will not fix things.

I&apos;m more than happy to fix StringImpl&apos;s SharedBuffer, or replace it with a solution external to StringImpl, if there&apos;s a clear definition of a goal and how to measure it. My instinct to remove it came from seeing that it had some issues, and then seeing that its original reason for being had disappeared. (See below.)

&gt; 1. There is evidence of a speed up: http://trac.webkit.org/changeset/44325 for sharing across JSC and WebCore

This is what I meant when I said, &quot;By my reading, this feature originated as a way to share strings between JavaScriptCore and WebCore, and then morphed into a threading solution by pure inertia.&quot;

There was a measurable benefit, recorded in svn, to sharing strings between JavaScriptCore and WebCore. But SharedBuffer doesn&apos;t do that anymore. (JavaScriptCore just uses StringImpl directly now, and when I&apos;m done refactoring, they will both use something even more efficient called &quot;Characters&quot; or &quot;PassString&quot;.) 

I couldn&apos;t find any evidence in svn history that the change to use SharedBuffer to move data across threads was a speedup. (Note that all other classes in WebCore and WebKit, when moving data across threads or processes, just copy the data.)

&gt; It was meant for the xml case when the buffer is shared across threads and that buffer may be huge.

What is &quot;the xml case&quot;? I don&apos;t see any mention of it in r44325 or its associated bug.

&gt; 3. The whole point of this feature was due to workers. I had to make UString (ScriptString) shareable across threads. 

I don&apos;t see any use of SharedBuffer in workers in TOT. Rather, all worker communication seems to happen via SerializedScriptValue, which owns its own Vector&lt;unsigned char&gt;. Is there still a place where SharedBuffer is the main way to send data to/from a worker?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489086</commentid>
    <comment_count>6</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-10-23 17:56:22 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; PS It would be nice to include the original author of the code if you&apos;re considering removing it so that you can get the background since you looked at the svn history of it that should have hopefully been apparent.
&gt; 
&gt; I apologize for the oversight

No worries.

&gt;  -- it looked to me like a bot had auto-CC&apos;d you 

Luckly :)


&gt; I&apos;m more than happy to fix StringImpl&apos;s SharedBuffer, or replace it with a solution external to StringImpl, if there&apos;s a clear definition of a goal and how to measure it. My instinct to remove it came from seeing that it had some issues, and then seeing that its original reason for being had disappeared. (See below.)
&gt; 
&gt; &gt; 1. There is evidence of a speed up: http://trac.webkit.org/changeset/44325 for sharing across JSC and WebCore
&gt; 
&gt; This is what I meant when I said, &quot;By my reading, this feature originated as a way to share strings between JavaScriptCore and WebCore, and then morphed into a threading solution by pure inertia.&quot;

Well that was just my way of staging the changes because the overall change was involved. 

&gt; 
&gt; There was a measurable benefit, recorded in svn, to sharing strings between JavaScriptCore and WebCore. But SharedBuffer doesn&apos;t do that anymore. (JavaScriptCore just uses StringImpl directly now, and when I&apos;m done refactoring, they will both use something even more efficient called &quot;Characters&quot; or &quot;PassString&quot;.) 

Oh that&apos;s excellent. I didn&apos;t realize this was the start of something bigger and you&apos;re just removing this to make way for something better!


&gt; 
&gt; &gt; 3. The whole point of this feature was due to workers. I had to make UString (ScriptString) shareable across threads. 
&gt; 
&gt; I don&apos;t see any use of SharedBuffer in workers in TOT. Rather, all worker communication seems to happen via SerializedScriptValue, which owns its own Vector&lt;unsigned char&gt;. Is there still a place where SharedBuffer is the main way to send data to/from a worker?

Source/WebCore/platform/CrossThreadCopier.cpp is the place that nearly all threaded messaging happens (including data to and from a worker) so that was where this would be used.

However it was broken due to another perf fix (which did the 1 allocation instead of 2 if you know what I&apos;m referring to) and I haven&apos;t had a chance to go back and fix this :( but this removal will make it not possible.

&gt; What is &quot;the xml case&quot;? I don&apos;t see any mention of it in r44325 or its associated bug.

It is here: https://bugs.webkit.org/show_bug.cgi?id=30095, but it looks like this has all changed now the two calls don&apos;t appear to hop threads anyway which is great.

So after pushing at this a bit more, while it is still available and used for x-cross string transfer, the main use cases are gone and it has been broken for a while now anyway, so I don&apos;t object to removing it.

(Part of my initial reaction was seeing a lot of my hard work that I thought did have some benefits called misfeatures. Maybe they were. At the time I thought they had a lot of value but regardless I agree that they have outlived their usefulness. Thanks for baring with me.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489089</commentid>
    <comment_count>7</comment_count>
      <attachid>112118</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-10-23 18:04:55 -0700</bug_when>
    <thetext>Comment on attachment 112118
Patch

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

Please delete http://trac.webkit.org/browser/trunk/Source/JavaScriptCore/wtf/CrossThreadRefCounted.h as well since this was the only thing that used it. Hurray! (I really disliked that class.)

And remove the changes that you&apos;re doing in the other patch.


You could make the change log more factual and spare my feelings now by just making the title &quot;Remove BufferShared.&quot; and really it isn&apos;t needed anymore I think it sufficient but whatever you want for the description.

&gt; Source/JavaScriptCore/wtf/text/StringImpl.h:307
&gt; +    PassRefPtr&lt;StringImpl&gt; isolatedCopy() const;

I like the name isolatedCopy. Thanks. (I struggled with naming here and failed and still have an open bug on the naming which you are fixing.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489091</commentid>
    <comment_count>8</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-10-23 18:05:49 -0700</bug_when>
    <thetext>*** Bug 31020 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489626</commentid>
    <comment_count>9</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-10-24 14:05:01 -0700</bug_when>
    <thetext>&gt; &gt; (JavaScriptCore just uses StringImpl directly now, and when I&apos;m done refactoring, they will both use something even more efficient called &quot;Characters&quot; or &quot;PassString&quot;.) 
&gt;
&gt; Oh that&apos;s excellent. I didn&apos;t realize this was the start of something bigger and you&apos;re just removing this to make way for something better!

To give a little more context here: For cases when we get a string from a library or from GC memory, we should be able to use just a character pointer and length to pass the string through most WebCore code without first copying it into a StringImpl. That&apos;s what Characters/PassString will be for. When WebCore needs to take ownership, that&apos;s when it will copy into a StringImpl.

&gt; (Part of my initial reaction was seeing a lot of my hard work that I thought did have some benefits called misfeatures. Maybe they were. At the time I thought they had a lot of value but regardless I agree that they have outlived their usefulness. Thanks for baring with me.)

Sorry, I shouldn&apos;t have said &quot;misfeature&quot;. It was once an essential feature! It&apos;s just that over time the essential parts migrated into other classes.

&gt; I like the name isolatedCopy. Thanks. (I struggled with naming here and failed and still have an open bug on the naming which you are fixing.)

Thanks.

I was thinking about this, and I think there are two interesting ways we could optimize passing large strings across threads, if need be:

(1) &quot;PassRefPtr&lt;StringImpl&gt; StringImpl::isolatedRelease(PassRefPtr&lt;StringImpl&gt;)&quot;. If the underlying StringImpl&apos;s refcount were exactly 1, this would steal ownership of the StringImpl and move it across threads without copying. (If the refcount were greater than 1, it would either silently copy or ASSERT -- I can&apos;t decide which.) I believe that most code that wants to pass a large string buffer between threads probably deals in newly constructed strings, and can arrange to perform an isolatedRelease().

(2) Characters/PassString. If a &quot;caller&quot; thread wants to pass a string to a &quot;callee&quot; thread, as long as the &quot;callee&quot; thread doesn&apos;t need to take ownership of the string, the &quot;caller&quot; can just pass a Characters/PassString object without copying, and then arrange to deref the string once the &quot;callee&quot; thread &quot;returns&quot;.

For example, if StringImpl were still the main representation for worker messages, judicious use of PassRefPtr&lt;StringImpl&gt; + StringImpl::isolatedRelease could probably get worker messages to be zero-copy.

I don&apos;t have a good sense of which code in WebCore could benefit from this sort of thing, but I&apos;m hoping that you might.

Anyway, I&apos;ll post an updated patch with your suggestions included.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489635</commentid>
    <comment_count>10</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-10-24 14:16:57 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; To give a little more context here: For cases when we get a string from a library or from GC memory, we should be able to use just a character pointer and length to pass the string through most WebCore code without first copying it into a StringImpl. That&apos;s what Characters/PassString will be for. When WebCore needs to take ownership, that&apos;s when it will copy into a StringImpl.

Very nice.

&gt; I was thinking about this, and I think there are two interesting ways we could optimize passing large strings across threads, if need be:
&gt; 
&gt; (1) &quot;PassRefPtr&lt;StringImpl&gt; StringImpl::isolatedRelease(PassRefPtr&lt;StringImpl&gt;)&quot;. If the underlying StringImpl&apos;s refcount were exactly 1, this would steal ownership of the StringImpl and move it across threads without copying. (If the refcount were greater than 1, it would either silently copy or ASSERT -- I can&apos;t decide which.) I believe that most code that wants to pass a large string buffer between threads probably deals in newly constructed strings, and can arrange to perform an isolatedRelease().
&gt; 
&gt; Anyway, I&apos;ll post an updated patch with your suggestions included.

Sounds reasonable. The two main use cases are now gone but if anything comes up, I&apos;ll make sure to use one of these.

I also need to think about how to encourage #1 to be a natural thing for people to do when message passing -- so we can avoid unnecessary work.

The big thing is deleting CrossThreadRefCounted.h which is confusing and shouldn&apos;t be used by anyone now. Hurray!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489711</commentid>
    <comment_count>11</comment_count>
      <attachid>112263</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-10-24 15:43:59 -0700</bug_when>
    <thetext>Created attachment 112263
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489732</commentid>
    <comment_count>12</comment_count>
      <attachid>112263</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-24 16:00:33 -0700</bug_when>
    <thetext>Comment on attachment 112263
Patch

Attachment 112263 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/10199980</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489743</commentid>
    <comment_count>13</comment_count>
      <attachid>112263</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-24 16:03:14 -0700</bug_when>
    <thetext>Comment on attachment 112263
Patch

Attachment 112263 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10208073</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489747</commentid>
    <comment_count>14</comment_count>
      <attachid>112269</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-10-24 16:06:03 -0700</bug_when>
    <thetext>Created attachment 112269
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489756</commentid>
    <comment_count>15</comment_count>
      <attachid>112269</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-10-24 16:16:02 -0700</bug_when>
    <thetext>Comment on attachment 112269
Patch

I think this will break the Win build because it has its own list of exports at Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def

but I don&apos;t see references to these functions in there. Some thing to watch when you check in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489790</commentid>
    <comment_count>16</comment_count>
      <attachid>112269</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-24 17:06:15 -0700</bug_when>
    <thetext>Comment on attachment 112269
Patch

Attachment 112269 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10203953</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489799</commentid>
    <comment_count>17</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-10-24 17:16:19 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 112269 [details])
&gt; Attachment 112269 [details] did not pass chromium-ews (chromium-xvfb):
&gt; Output: http://queues.webkit.org/results/10203953

I&apos;m guessing that Source/WebCore/bindings/v8/JavaScriptCallFrame.h needs a 

  #include &lt;wtf/RefCounted.h&gt; 

added to it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489866</commentid>
    <comment_count>18</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-10-24 20:53:17 -0700</bug_when>
    <thetext>Committed r98316: &lt;http://trac.webkit.org/changeset/98316&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489871</commentid>
    <comment_count>19</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-24 21:19:47 -0700</bug_when>
    <thetext>This patch broke Windows &amp; Chromium builds:
http://build.webkit.org/builders/Windows%20Release%20%28Build%29/builds/22552/steps/compile-webkit/logs/stdio
http://build.webkit.org/builders/Chromium%20Linux%20Release/builds/40093/steps/compile-webkit/logs/stdio</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112118</attachid>
            <date>2011-10-23 10:50:00 -0700</date>
            <delta_ts>2011-10-24 15:43:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70698-20111023104959.patch</filename>
            <type>text/plain</type>
            <size>69289</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTgyMDEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzkgQEAK
KzIwMTEtMTAtMjMgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZW1vdmVkIHNvbWUgU3RyaW5nIG1pc2ZlYXR1cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDY5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgLSBSZW1vdmVkIGNyZWF0ZVN0cmlwcGlu
Z051bGxDaGFyYWN0ZXJzIGJlY2F1c2UgaXQgd2FzIHVudXNlZCBhbmQgYnVnZ3kKKyAgICAgICAg
KGl0IHdvdWxkIG1pc3MgdGhlIGNhc2Ugb2YgYW4gaW50LWFsaWduZWQgTlVMTCBmb2xsb3dlZCBi
eSBhIG5vbi1OVUxMKS4KKworICAgICAgICAtIFJlbW92ZWQgQnVmZmVyU2hhcmVkIG93bmVyc2hp
cCBiZWNhdXNlIEkgY291bGRuJ3QgZmluZCBhbnkgZXZpZGVuY2UgaW4KKyAgICAgICAgc3ZuIGhp
c3RvcnkgdGhhdCBpdCdzIGEgc3BlZWR1cCwgYW5kIGl0J3MgZGVmaW5pdGVseSBhIHNsb3dkb3du
IGluIHRoZQorICAgICAgICBjb21tb24gY2FzZSBvZiBtb3Zpbmcgc21hbGwgc3RyaW5ncyBhY3Jv
c3MgdGhyZWFkcywgZHVlIHRvIGV4dHJhIG1hbGxvYworICAgICAgICB0cmFmZmljIGFuZCBhdG9t
aWMgcmVmY291bnQgb3BlcmF0aW9ucy4gRWl0aGVyIHdheSwgaXQgZGlkbid0IHNlZW0gd29ydGgK
KyAgICAgICAgdGhlIGFkZGVkIGNvbXBsZXhpdHkuIChCeSBteSByZWFkaW5nLCB0aGlzIGZlYXR1
cmUgb3JpZ2luYXRlZCBhcyBhIHdheSB0bworICAgICAgICBzaGFyZSBzdHJpbmdzIGJldHdlZW4g
SmF2YVNjcmlwdENvcmUgYW5kIFdlYkNvcmUsIGFuZCB0aGVuIG1vcnBoZWQgaW50bworICAgICAg
ICBhIHRocmVhZGluZyBzb2x1dGlvbiBieSBwdXJlIGluZXJ0aWEuKQorCisgICAgICAgIC0gUmVu
YW1lZCAidGhyZWFkU2FmZUNvcHkiIGFuZCAiY3Jvc3NUaHJlYWRDb3B5IiB0byAiaXNvbGF0ZWRD
b3B5IiBiZWNhdXNlCisgICAgICAgIHRoZSBmb3JtZXIgbmFtZXMgZ2F2ZSB0aGUgZGFuZ2Vyb3Vz
IG1pc2ltcHJlc3Npb24gdGhhdCB0aGUgcmVzdWx0aW5nIG9iamVjdAorICAgICAgICB3YXMgdGhy
ZWFkLXNhZmUsIHdoaWNoIGlzIG5vdCB0cnVlLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
ZXhwOiBFeHBvcnQhCisKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsLmNwcDoKKyAgICAg
ICAgKFdURjo6U3RyaW5nSW1wbDo6flN0cmluZ0ltcGwpOiBSZW1vdmVkIHRoZSBzdHVmZiBtZW50
aW9uZWQgYWJvdmUuCisKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsLmg6CisgICAgICAg
IChXVEY6OlN0cmluZ0ltcGw6Omxlbmd0aCk6IERpdHRvLgorCisgICAgICAgIChXVEY6OlN0cmlu
Z0ltcGw6Omlzb2xhdGVkQ29weSk6IElubGluZWQgdGhpcywgc2luY2UgaXQncyBub3cgdHJpdmlh
bC4KKworICAgICAgICAqIHd0Zi90ZXh0L1dURlN0cmluZy5jcHA6CisgICAgICAgIChXVEY6OlN0
cmluZzo6aXNvbGF0ZWRDb3B5KToKKyAgICAgICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcuaDogVXBk
YXRlZCBmb3IgU3RyaW5nSW1wbCBjaGFuZ2VzLgorCiAyMDExLTEwLTIzICBHZW9mZnJleSBHYXJl
biAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgVHJ5IHRvIGZpeCB0aGUgU0wgYnVpbGQu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9u
IDk4MjAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkod29y
a2luZyBjb3B5KQpAQCAtMzYzLDcgKzM2Myw2IEBAIF9fWk4zSlNDZ3RFUktOU183VVN0cmluZ0VT
Ml8KIF9fWk4zSlNDbHRFUktOU183VVN0cmluZ0VTMl8KIF9fWk4zV1RGMTBTdHJpbmdJbXBsMTFy
ZXZlcnNlRmluZEVQUzBfagogX19aTjNXVEYxMFN0cmluZ0ltcGwxMXJldmVyc2VGaW5kRXRqCi1f
X1pOM1dURjEwU3RyaW5nSW1wbDEyc2hhcmVkQnVmZmVyRXYKIF9fWk4zV1RGMTBTdHJpbmdJbXBs
MTZmaW5kSWdub3JpbmdDYXNlRVBLY2oKIF9fWk4zV1RGMTBTdHJpbmdJbXBsMTZmaW5kSWdub3Jp
bmdDYXNlRVBTMF9qCiBfX1pOM1dURjEwU3RyaW5nSW1wbDE4c2ltcGxpZnlXaGl0ZVNwYWNlRXYK
QEAgLTM3Miw3ICszNzEsNiBAQCBfX1pOM1dURjEwU3RyaW5nSW1wbDE5Y3JlYXRlVW5pbml0aWFs
aXplCiBfX1pOM1dURjEwU3RyaW5nSW1wbDIyY29udGFpbnNPbmx5V2hpdGVzcGFjZUV2CiBfX1pO
M1dURjEwU3RyaW5nSW1wbDIzZGVmYXVsdFdyaXRpbmdEaXJlY3Rpb25FUGIKIF9fWk4zV1RGMTBT
dHJpbmdJbXBsMjNyZXZlcnNlRmluZElnbm9yaW5nQ2FzZUVQUzBfagotX19aTjNXVEYxMFN0cmlu
Z0ltcGwzN2NyZWF0ZVN0cmlwcGluZ051bGxDaGFyYWN0ZXJzU2xvd0Nhc2VFUEt0agogX19aTjNX
VEYxMFN0cmluZ0ltcGw0ZmlsbEV0CiBfX1pOM1dURjEwU3RyaW5nSW1wbDRmaW5kRVBGYnRFagog
X19aTjNXVEYxMFN0cmluZ0ltcGw0ZmluZEVQS2NqCkBAIC01OTgsMTMgKzU5NiwxMiBAQCBfX1pO
SzNXVEYxM0RlY2ltYWxOdW1iZXIxOXRvU3RyaW5nRXhwb25lCiBfX1pOSzNXVEYxM0RlY2ltYWxO
dW1iZXIyOGJ1ZmZlckxlbmd0aEZvclN0cmluZ0RlY2ltYWxFdgogX19aTkszV1RGMTNEZWNpbWFs
TnVtYmVyMzJidWZmZXJMZW5ndGhGb3JTdHJpbmdFeHBvbmVudGlhbEV2CiBfX1pOSzNXVEY2U3Ry
aW5nMTF0b0ludFN0cmljdEVQYmkKK19fWk5LM1dURjZTdHJpbmcxMmlzb2xhdGVkQ29weUV2CiBf
X1pOSzNXVEY2U3RyaW5nMTJ0b1VJbnRTdHJpY3RFUGJpCiBfX1pOSzNXVEY2U3RyaW5nMTN0b0lu
dDY0U3RyaWN0RVBiaQotX19aTkszV1RGNlN0cmluZzE0dGhyZWFkc2FmZUNvcHlFdgogX19aTksz
V1RGNlN0cmluZzE1c3RyaXBXaGl0ZVNwYWNlRVBGYnRFCiBfX1pOSzNXVEY2U3RyaW5nMTVzdHJp
cFdoaXRlU3BhY2VFdgogX19aTkszV1RGNlN0cmluZzE2cmVtb3ZlQ2hhcmFjdGVyc0VQRmJ0RQot
X19aTkszV1RGNlN0cmluZzE3Y3Jvc3NUaHJlYWRTdHJpbmdFdgogX19aTkszV1RGNlN0cmluZzE4
c2ltcGxpZnlXaGl0ZVNwYWNlRVBGYnRFCiBfX1pOSzNXVEY2U3RyaW5nMThzaW1wbGlmeVdoaXRl
U3BhY2VFdgogX19aTkszV1RGNlN0cmluZzE5Y2hhcmFjdGVyU3RhcnRpbmdBdEVqCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCShyZXZpc2lv
biA5ODIwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJbXBsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTUsMjAgKzU1LDE3IEBAIFN0cmluZ0ltcGw6On5TdHJpbmdJ
bXBsKCkKICNlbmRpZgogCiAgICAgQnVmZmVyT3duZXJzaGlwIG93bmVyc2hpcCA9IGJ1ZmZlck93
bmVyc2hpcCgpOwotICAgIGlmIChvd25lcnNoaXAgIT0gQnVmZmVySW50ZXJuYWwpIHsKLSAgICAg
ICAgaWYgKG93bmVyc2hpcCA9PSBCdWZmZXJPd25lZCkgewotICAgICAgICAgICAgQVNTRVJUKCFt
X3NoYXJlZEJ1ZmZlcik7Ci0gICAgICAgICAgICBBU1NFUlQobV9kYXRhKTsKLSAgICAgICAgICAg
IGZhc3RGcmVlKGNvbnN0X2Nhc3Q8VUNoYXIqPihtX2RhdGEpKTsKLSAgICAgICAgfSBlbHNlIGlm
IChvd25lcnNoaXAgPT0gQnVmZmVyU3Vic3RyaW5nKSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9z
dWJzdHJpbmdCdWZmZXIpOwotICAgICAgICAgICAgbV9zdWJzdHJpbmdCdWZmZXItPmRlcmVmKCk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQob3duZXJzaGlwID09IEJ1ZmZl
clNoYXJlZCk7Ci0gICAgICAgICAgICBBU1NFUlQobV9zaGFyZWRCdWZmZXIpOwotICAgICAgICAg
ICAgbV9zaGFyZWRCdWZmZXItPmRlcmVmKCk7Ci0gICAgICAgIH0KKyAgICBpZiAob3duZXJzaGlw
ID09IEJ1ZmZlckludGVybmFsKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG93bmVyc2hpcCA9
PSBCdWZmZXJPd25lZCkgeworICAgICAgICBBU1NFUlQobV9kYXRhKTsKKyAgICAgICAgZmFzdEZy
ZWUoY29uc3RfY2FzdDxVQ2hhcio+KG1fZGF0YSkpOworICAgICAgICByZXR1cm47CiAgICAgfQor
CisgICAgQVNTRVJUKG93bmVyc2hpcCA9PSBCdWZmZXJTdWJzdHJpbmcpOworICAgIEFTU0VSVCht
X3N1YnN0cmluZ0J1ZmZlcik7CisgICAgbV9zdWJzdHJpbmdCdWZmZXItPmRlcmVmKCk7CiB9CiAK
IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZCh1
bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiYgZGF0YSkKQEAgLTE0NSwzNyArMTQyLDYgQEAgUGFzc1Jl
ZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdAogICAgIHJldHVybiBjcmVhdGUoc3Ry
aW5nLCBsZW5ndGgpOwogfQogCi1QYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNy
ZWF0ZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBQYXNzUmVmUHRy
PFNoYXJlZFVDaGFyPiBzaGFyZWRCdWZmZXIpCi17Ci0gICAgQVNTRVJUKGNoYXJhY3RlcnMpOwot
ICAgIEFTU0VSVChtaW5MZW5ndGhUb1NoYXJlICYmIGxlbmd0aCA+PSBtaW5MZW5ndGhUb1NoYXJl
KTsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0cmluZ0ltcGwoY2hhcmFjdGVycywgbGVuZ3Ro
LCBzaGFyZWRCdWZmZXIpKTsKLX0KLQotU2hhcmVkVUNoYXIqIFN0cmluZ0ltcGw6OnNoYXJlZEJ1
ZmZlcigpCi17Ci0gICAgaWYgKG1fbGVuZ3RoIDwgbWluTGVuZ3RoVG9TaGFyZSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgLy8gQWxsIHN0YXRpYyBzdHJpbmdzIGFyZSBzbWFsbGVyIHRoYXQgdGhl
IG1pbmltaW0gbGVuZ3RoIHRvIHNoYXJlLgotICAgIEFTU0VSVCghaXNTdGF0aWMoKSk7Ci0KLSAg
ICBCdWZmZXJPd25lcnNoaXAgb3duZXJzaGlwID0gYnVmZmVyT3duZXJzaGlwKCk7Ci0KLSAgICBp
ZiAob3duZXJzaGlwID09IEJ1ZmZlckludGVybmFsKQotICAgICAgICByZXR1cm4gMDsKLSAgICBp
ZiAob3duZXJzaGlwID09IEJ1ZmZlclN1YnN0cmluZykKLSAgICAgICAgcmV0dXJuIG1fc3Vic3Ry
aW5nQnVmZmVyLT5zaGFyZWRCdWZmZXIoKTsKLSAgICBpZiAob3duZXJzaGlwID09IEJ1ZmZlck93
bmVkKSB7Ci0gICAgICAgIEFTU0VSVCghbV9zaGFyZWRCdWZmZXIpOwotICAgICAgICBtX3NoYXJl
ZEJ1ZmZlciA9IFNoYXJlZFVDaGFyOjpjcmVhdGUobmV3IFNoYXJhYmxlVUNoYXIobV9kYXRhKSku
bGVha1JlZigpOwotICAgICAgICBtX2hhc2hBbmRGbGFncyA9IChtX2hhc2hBbmRGbGFncyAmIH5z
X2hhc2hNYXNrQnVmZmVyT3duZXJzaGlwKSB8IEJ1ZmZlclNoYXJlZDsKLSAgICB9Ci0KLSAgICBB
U1NFUlQoYnVmZmVyT3duZXJzaGlwKCkgPT0gQnVmZmVyU2hhcmVkKTsKLSAgICBBU1NFUlQobV9z
aGFyZWRCdWZmZXIpOwotICAgIHJldHVybiBtX3NoYXJlZEJ1ZmZlcjsKLX0KLQogYm9vbCBTdHJp
bmdJbXBsOjpjb250YWluc09ubHlXaGl0ZXNwYWNlKCkKIHsKICAgICAvLyBGSVhNRTogVGhlIGRl
ZmluaXRpb24gb2Ygd2hpdGVzcGFjZSBoZXJlIGluY2x1ZGVzIGEgbnVtYmVyIG9mIGNoYXJhY3Rl
cnMKQEAgLTExMjIsMjAgKzEwODgsNiBAQCBXVEY6OlVuaWNvZGU6OkRpcmVjdGlvbiBTdHJpbmdJ
bXBsOjpkZWZhCiAgICAgcmV0dXJuIFdURjo6VW5pY29kZTo6TGVmdFRvUmlnaHQ7CiB9CiAKLS8v
IFRoaXMgaXMgYSBob3QgZnVuY3Rpb24gYmVjYXVzZSBpdCdzIHVzZWQgd2hlbiBwYXJzaW5nIEhU
TUwuCi1QYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNyZWF0ZVN0cmlwcGluZ051
bGxDaGFyYWN0ZXJzU2xvd0Nhc2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxl
bmd0aCkKLXsKLSAgICBTdHJpbmdCdWZmZXIgc3RyaXBwZWRDb3B5KGxlbmd0aCk7Ci0gICAgdW5z
aWduZWQgc3RyaXBwZWRMZW5ndGggPSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykgewotICAgICAgICBpZiAoaW50IGMgPSBjaGFyYWN0ZXJzW2ldKQotICAgICAg
ICAgICAgc3RyaXBwZWRDb3B5W3N0cmlwcGVkTGVuZ3RoKytdID0gYzsKLSAgICB9Ci0gICAgQVNT
RVJUKHN0cmlwcGVkTGVuZ3RoIDwgbGVuZ3RoKTsgIC8vIE9ubHkgdGFrZSB0aGUgc2xvdyBjYXNl
IHdoZW4gc3RyaXBwaW5nLgotICAgIHN0cmlwcGVkQ29weS5zaHJpbmsoc3RyaXBwZWRMZW5ndGgp
OwotICAgIHJldHVybiBhZG9wdChzdHJpcHBlZENvcHkpOwotfQotCiBQYXNzUmVmUHRyPFN0cmlu
Z0ltcGw+IFN0cmluZ0ltcGw6OmFkb3B0KFN0cmluZ0J1ZmZlciYgYnVmZmVyKQogewogICAgIHVu
c2lnbmVkIGxlbmd0aCA9IGJ1ZmZlci5sZW5ndGgoKTsKQEAgLTExNjAsMTggKzExMTIsNCBAQCBQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNyZWF0CiAgICAgcmV0dXJuIHRlcm1p
bmF0ZWRTdHJpbmcucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmlu
Z0ltcGw6OnRocmVhZHNhZmVDb3B5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gY3JlYXRlKG1fZGF0
YSwgbV9sZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNy
b3NzVGhyZWFkU3RyaW5nKCkKLXsKLSAgICBpZiAoU2hhcmVkVUNoYXIqIHNoYXJlZEJ1ZmZlciA9
IHRoaXMtPnNoYXJlZEJ1ZmZlcigpKQotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0cmlu
Z0ltcGwobV9kYXRhLCBtX2xlbmd0aCwgc2hhcmVkQnVmZmVyLT5jcm9zc1RocmVhZENvcHkoKSkp
OwotCi0gICAgLy8gSWYgbm8gc2hhcmVkIGJ1ZmZlciBpcyBhdmFpbGFibGUsIGNyZWF0ZSBhIGNv
cHkuCi0gICAgcmV0dXJuIHRocmVhZHNhZmVDb3B5KCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdU
RgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nSW1wbC5oCShy
ZXZpc2lvbiA5ODIwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJ
bXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDggKzU3LDYgQEAgc3RydWN0IFVDaGFyQnVmZmVy
VHJhbnNsYXRvcjsKIAogZW51bSBUZXh0Q2FzZVNlbnNpdGl2aXR5IHsgVGV4dENhc2VTZW5zaXRp
dmUsIFRleHRDYXNlSW5zZW5zaXRpdmUgfTsKIAotdHlwZWRlZiBPd25GYXN0TWFsbG9jUHRyPGNv
bnN0IFVDaGFyPiBTaGFyYWJsZVVDaGFyOwotdHlwZWRlZiBDcm9zc1RocmVhZFJlZkNvdW50ZWQ8
U2hhcmFibGVVQ2hhcj4gU2hhcmVkVUNoYXI7CiB0eXBlZGVmIGJvb2wgKCpDaGFyYWN0ZXJNYXRj
aEZ1bmN0aW9uUHRyKShVQ2hhcik7CiB0eXBlZGVmIGJvb2wgKCpJc1doaXRlU3BhY2VGdW5jdGlv
blB0cikoVUNoYXIpOwogCkBAIC03Nyw3ICs3NSw2IEBAIHByaXZhdGU6CiAgICAgICAgIEJ1ZmZl
ckludGVybmFsLAogICAgICAgICBCdWZmZXJPd25lZCwKICAgICAgICAgQnVmZmVyU3Vic3RyaW5n
LAotICAgICAgICBCdWZmZXJTaGFyZWQsCiAgICAgfTsKIAogICAgIC8vIFVzZWQgdG8gY29uc3Ry
dWN0IHN0YXRpYyBzdHJpbmdzLCB3aGljaCBoYXZlIGFuIHNwZWNpYWwgcmVmQ291bnQgdGhhdCBj
YW4gbmV2ZXIgaGl0IHplcm8uCkBAIC0xMzQsMjUgKzEzMSwxMiBAQCBwcml2YXRlOgogICAgICAg
ICBBU1NFUlQobV9zdWJzdHJpbmdCdWZmZXItPmJ1ZmZlck93bmVyc2hpcCgpICE9IEJ1ZmZlclN1
YnN0cmluZyk7CiAgICAgfQogCi0gICAgLy8gVXNlZCB0byBjb25zdHJ1Y3QgbmV3IHN0cmluZ3Mg
c2hhcmluZyBhbiBleGlzdGluZyBTaGFyZWRVQ2hhciAoQnVmZmVyU2hhcmVkKQotICAgIFN0cmlu
Z0ltcGwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgUGFzc1JlZlB0
cjxTaGFyZWRVQ2hhcj4gc2hhcmVkQnVmZmVyKQotICAgICAgICA6IG1fcmVmQ291bnQoc19yZWZD
b3VudEluY3JlbWVudCkKLSAgICAgICAgLCBtX2xlbmd0aChsZW5ndGgpCi0gICAgICAgICwgbV9k
YXRhKGNoYXJhY3RlcnMpCi0gICAgICAgICwgbV9zaGFyZWRCdWZmZXIoc2hhcmVkQnVmZmVyLmxl
YWtSZWYoKSkKLSAgICAgICAgLCBtX2hhc2hBbmRGbGFncyhCdWZmZXJTaGFyZWQpCi0gICAgewot
ICAgICAgICBBU1NFUlQobV9kYXRhKTsKLSAgICAgICAgQVNTRVJUKG1fbGVuZ3RoKTsKLSAgICB9
Ci0KIHB1YmxpYzoKICAgICB+U3RyaW5nSW1wbCgpOwogCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gY3JlYXRlKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBjcmVhdGUoY29uc3QgY2hhciosIHVuc2lnbmVk
IGxlbmd0aCk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gY3JlYXRlKGNvbnN0
IGNoYXIqKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBjcmVhdGUoY29uc3Qg
VUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgsIFBhc3NSZWZQdHI8U2hhcmVkVUNoYXI+IHNoYXJlZEJ1
ZmZlcik7CiAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBj
cmVhdGUoUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiByZXAsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKQogICAgIHsKICAgICAgICAgQVNTRVJUKHJlcCk7CkBAIC0xOTMsNyArMTc3LDYg
QEAgcHVibGljOgogCiAgICAgc3RhdGljIHVuc2lnbmVkIGRhdGFPZmZzZXQoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoU3RyaW5nSW1wbCwgbV9kYXRhKTsgfQogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFN0cmluZ0ltcGw+IGNyZWF0ZVdpdGhUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIoY29uc3Qg
U3RyaW5nSW1wbCYpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGNyZWF0ZVN0
cmlwcGluZ051bGxDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKIAog
ICAgIHRlbXBsYXRlPHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiBhZG9wdChWZWN0b3I8VUNoYXIsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9y
KQpAQCAtMjA5LDcgKzE5Miw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJp
bmdJbXBsPiBhZG9wdChTdHJpbmdCdWZmZXImKTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9Ci0gICAgU2hhcmVkVUNoYXIqIHNoYXJlZEJ1ZmZlcigp
OwogICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9
CiAKICAgICBzaXplX3QgY29zdCgpCkBAIC0zMTksMTIgKzMwMSwxMCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBtZW1jcHkoZGVzdGluYXRpb24sIHNvdXJjZSwgbnVtQ2hhcmFjdGVycyAqIHNpemVv
ZihVQ2hhcikpOwogICAgIH0KIAotICAgIC8vIFJldHVybnMgYSBTdHJpbmdJbXBsIHN1aXRhYmxl
IGZvciB1c2Ugb24gYW5vdGhlciB0aHJlYWQuCi0gICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBj
cm9zc1RocmVhZFN0cmluZygpOwotICAgIC8vIE1ha2VzIGEgZGVlcCBjb3B5LiBIZWxwZnVsIG9u
bHkgaWYgeW91IG5lZWQgdG8gdXNlIGEgU3RyaW5nIG9uIGFub3RoZXIgdGhyZWFkCi0gICAgLy8g
KHVzZSBjcm9zc1RocmVhZFN0cmluZyBpZiB0aGUgbWV0aG9kIGNhbGwgZG9lc24ndCBuZWVkIHRv
IGJlIHRocmVhZHNhZmUpLgotICAgIC8vIFNpbmNlIFN0cmluZ0ltcGwgb2JqZWN0cyBhcmUgaW1t
dXRhYmxlLCB0aGVyZSdzIG5vIG90aGVyIHJlYXNvbiB0byBtYWtlIGEgY29weS4KLSAgICBQYXNz
UmVmUHRyPFN0cmluZ0ltcGw+IHRocmVhZHNhZmVDb3B5KCkgY29uc3Q7CisgICAgLy8gU29tZSBz
dHJpbmcgZmVhdHVyZXMsIGxpa2UgcmVmY291bnRpbmcgYW5kIHRoZSBhdG9taWNpdHkgZmxhZywg
YXJlIG5vdAorICAgIC8vIHRocmVhZC1zYWZlLiBXZSBhY2hpZXZlIHRocmVhZCBzYWZldHkgYnkg
aXNvbGF0aW9uLCBnaXZpbmcgZWFjaCB0aHJlYWQKKyAgICAvLyBpdHMgb3duIGNvcHkgb2YgdGhl
IHN0cmluZy4KKyAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGlzb2xhdGVkQ29weSgpIGNvbnN0
OwogCiAgICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBzdWJzdHJpbmcodW5zaWduZWQgcG9zLCB1
bnNpZ25lZCBsZW4gPSBVSU5UX01BWCk7CiAKQEAgLTM5Myw4ICszNzMsNiBAQCBwcml2YXRlOgog
ICAgIC8vIFRoaXMgbnVtYmVyIG11c3QgYmUgYXQgbGVhc3QgMiB0byBhdm9pZCBzaGFyaW5nIGVt
cHR5LCBudWxsIGFzIHdlbGwgYXMgMSBjaGFyYWN0ZXIgc3RyaW5ncyBmcm9tIFNtYWxsU3RyaW5n
cy4KICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19jb3B5Q2hhcnNJbmxpbmVDdXRPZmYgPSAy
MDsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGNyZWF0ZVN0cmlwcGluZ051
bGxDaGFyYWN0ZXJzU2xvd0Nhc2UoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOwotICAg
IAogICAgIEJ1ZmZlck93bmVyc2hpcCBidWZmZXJPd25lcnNoaXAoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxCdWZmZXJPd25lcnNoaXA+KG1faGFzaEFuZEZsYWdzICYgc19oYXNoTWFza0J1
ZmZlck93bmVyc2hpcCk7IH0KICAgICBib29sIGlzU3RhdGljKCkgY29uc3QgeyByZXR1cm4gbV9y
ZWZDb3VudCAmIHNfcmVmQ291bnRGbGFnSXNTdGF0aWNTdHJpbmc7IH0KICAgICB0ZW1wbGF0ZSA8
Y2xhc3MgVUNoYXJQcmVkaWNhdGU+IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gc3RyaXBNYXRjaGVk
Q2hhcmFjdGVycyhVQ2hhclByZWRpY2F0ZSk7CkBAIC00MjEsNyArMzk5LDYgQEAgcHJpdmF0ZToK
ICAgICB1bmlvbiB7CiAgICAgICAgIHZvaWQqIG1fYnVmZmVyOwogICAgICAgICBTdHJpbmdJbXBs
KiBtX3N1YnN0cmluZ0J1ZmZlcjsKLSAgICAgICAgU2hhcmVkVUNoYXIqIG1fc2hhcmVkQnVmZmVy
OwogICAgIH07CiAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX2hhc2hBbmRGbGFnczsKIH07CkBAIC00
NTgsMjcgKzQzNSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1NwYWNlT3JOZXdsaW5lKFVDaGEK
ICAgICByZXR1cm4gYyA8PSAweDdGID8gV1RGOjppc0FTQ0lJU3BhY2UoYykgOiBXVEY6OlVuaWNv
ZGU6OmRpcmVjdGlvbihjKSA9PSBXVEY6OlVuaWNvZGU6OldoaXRlU3BhY2VOZXV0cmFsOwogfQog
Ci0vLyBUaGlzIGlzIGEgaG90IGZ1bmN0aW9uIGJlY2F1c2UgaXQncyB1c2VkIHdoZW4gcGFyc2lu
ZyBIVE1MLgotaW5saW5lIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRl
U3RyaXBwaW5nTnVsbENoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVk
IGxlbmd0aCkKK2lubGluZSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6Omlzb2xh
dGVkQ29weSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGNoYXJhY3RlcnMpOwotICAgIEFTU0VSVChs
ZW5ndGgpOwotCi0gICAgLy8gT3B0aW1pemUgZm9yIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGFyZSBu
byBOdWxsIGNoYXJhY3RlcnMgYnkgcXVpY2tseQotICAgIC8vIHNlYXJjaGluZyBmb3IgbnVsbHMs
IGFuZCB0aGVuIHVzaW5nIFN0cmluZ0ltcGw6OmNyZWF0ZSwgd2hpY2ggd2lsbAotICAgIC8vIG1l
bWNweSB0aGUgd2hvbGUgYnVmZmVyLiAgVGhpcyBpcyBmYXN0ZXIgdGhhbiBhc3NpZ25pbmcgY2hh
cmFjdGVyIGJ5Ci0gICAgLy8gY2hhcmFjdGVyIGR1cmluZyB0aGUgbG9vcC4gCi0KLSAgICAvLyBG
YXN0IGNhc2UuCi0gICAgaW50IGZvdW5kTnVsbCA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgIWZvdW5kTnVsbCAmJiBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgaW50IGMgPSBjaGFy
YWN0ZXJzW2ldOyAvLyBtb3JlIGVmZmljaWVudCB0aGFuIHVzaW5nIFVDaGFyIGhlcmUgKGF0IGxl
YXN0IG9uIEludGVsIE1hYyBPUykKLSAgICAgICAgZm91bmROdWxsIHw9ICFjOwotICAgIH0KLSAg
ICBpZiAoIWZvdW5kTnVsbCkKLSAgICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNyZWF0ZShjaGFy
YWN0ZXJzLCBsZW5ndGgpOwotCi0gICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNyZWF0ZVN0cmlwcGlu
Z051bGxDaGFyYWN0ZXJzU2xvd0Nhc2UoY2hhcmFjdGVycywgbGVuZ3RoKTsKKyAgICByZXR1cm4g
Y3JlYXRlKG1fZGF0YSwgbV9sZW5ndGgpOwogfQogCiBzdHJ1Y3QgU3RyaW5nSGFzaDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCShyZXZpc2lv
biA5ODIwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9XVEZTdHJpbmcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NzgsMTggKzU3OCwxMSBAQCBmbG9hdCBTdHJpbmc6OnRvRmxv
YXQoYm9vbCogb2ssIGJvb2wqIGRpCiAgICAgcmV0dXJuIG1faW1wbC0+dG9GbG9hdChvaywgZGlk
UmVhZE51bWJlcik7CiB9CiAKLVN0cmluZyBTdHJpbmc6OnRocmVhZHNhZmVDb3B5KCkgY29uc3QK
K1N0cmluZyBTdHJpbmc6Omlzb2xhdGVkQ29weSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ltcGwp
CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gbV9pbXBsLT50aHJlYWRzYWZl
Q29weSgpOwotfQotCi1TdHJpbmcgU3RyaW5nOjpjcm9zc1RocmVhZFN0cmluZygpIGNvbnN0Ci17
Ci0gICAgaWYgKCFtX2ltcGwpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4g
bV9pbXBsLT5jcm9zc1RocmVhZFN0cmluZygpOworICAgIHJldHVybiBtX2ltcGwtPmlzb2xhdGVk
Q29weSgpOwogfQogCiB2b2lkIFN0cmluZzo6c3BsaXQoY29uc3QgU3RyaW5nJiBzZXBhcmF0b3Is
IGJvb2wgYWxsb3dFbXB0eUVudHJpZXMsIFZlY3RvcjxTdHJpbmc+JiByZXN1bHQpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvV1RGU3RyaW5nLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1dURlN0cmluZy5oCShyZXZpc2lv
biA5ODIwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9XVEZTdHJpbmcuaAko
d29ya2luZyBjb3B5KQpAQCAtMjY0LDEzICsyNjQsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIHBl
cmNlbnRhZ2UoaW50JiBwZXJjZW50YWdlKSBjb25zdDsKIAotICAgIC8vIFJldHVybnMgYSBTdHJp
bmdJbXBsIHN1aXRhYmxlIGZvciB1c2Ugb24gYW5vdGhlciB0aHJlYWQuCi0gICAgV1RGX0VYUE9S
VF9QUklWQVRFIFN0cmluZyBjcm9zc1RocmVhZFN0cmluZygpIGNvbnN0OwotICAgIC8vIE1ha2Vz
IGEgZGVlcCBjb3B5LiBIZWxwZnVsIG9ubHkgaWYgeW91IG5lZWQgdG8gdXNlIGEgU3RyaW5nIG9u
IGFub3RoZXIgdGhyZWFkCi0gICAgLy8gKHVzZSBjcm9zc1RocmVhZFN0cmluZyBpZiB0aGUgbWV0
aG9kIGNhbGwgZG9lc24ndCBuZWVkIHRvIGJlIHRocmVhZHNhZmUpLgotICAgIC8vIFNpbmNlIHRo
ZSB1bmRlcmx5aW5nIFN0cmluZ0ltcGwgb2JqZWN0cyBhcmUgaW1tdXRhYmxlLCB0aGVyZSdzIG5v
IG90aGVyIHJlYXNvbgotICAgIC8vIHRvIGV2ZXIgcHJlZmVyIGNvcHkoKSBvdmVyIHBsYWluIG9s
ZCBhc3NpZ25tZW50LgotICAgIFdURl9FWFBPUlRfUFJJVkFURSBTdHJpbmcgdGhyZWFkc2FmZUNv
cHkoKSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIGlzb2xhdGVkQ29weSgp
IGNvbnN0OwogCiAgICAgLy8gUHJldmVudCBTdHJpbmdzIGZyb20gYmVpbmcgaW1wbGljaXRseSBj
b252ZXJ0YWJsZSB0byBib29sIGFzIGl0IHdpbGwgYmUgYW1iaWd1b3VzIG9uIGFueSBwbGF0Zm9y
bSB0aGF0CiAgICAgLy8gYWxsb3dzIGltcGxpY2l0IGNvbnZlcnNpb24gdG8gYW5vdGhlciBwb2lu
dGVyIHR5cGUgKGUuZy4sIE1hYyBhbGxvd3MgaW1wbGljaXQgY29udmVyc2lvbiB0byBOU1N0cmlu
ZyopLgpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTgyMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMjggQEAKKzIwMTEtMTAtMjMgIEdl
b2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmVkIHNvbWUg
U3RyaW5nIG1pc2ZlYXR1cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03MDY5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIC0gUmVuYW1lZCAidGhyZWFkU2FmZUNvcHkiIGFuZCAiY3Jvc3NUaHJlYWRDb3B5
IiB0byAiaXNvbGF0ZWRDb3B5IiBiZWNhdXNlCisgICAgICAgIHRoZSBmb3JtZXIgbmFtZXMgZ2F2
ZSB0aGUgZGFuZ2Vyb3VzIG1pc2ltcHJlc3Npb24gdGhhdCB0aGUgcmVzdWx0aW5nIG9iamVjdAor
ICAgICAgICB3YXMgdGhyZWFkLXNhZmUsIHdoaWNoIGlzIG5vdCB0cnVlLgorCisgICAgICAgICog
V2ViQ29yZS5leHAuaW46CisgICAgICAgICogYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6cmVsZWFz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OlNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSk6CisgICAgICAgICogZmlsZWFwaS9Mb2NhbEZpbGVTeXN0ZW0uaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxvY2FsRmlsZVN5c3RlbTo6U3lzdGVtQmFzZVBhdGg6Om9wZXJhdG9yIFN0
cmluZyk6CisgICAgICAgICogbG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6
TWFpblRocmVhZEJyaWRnZSk6CisgICAgICAgICogbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okljb25EYXRhYmFzZTo6b3Blbik6CisgICAgICAgIChXZWJD
b3JlOjpJY29uRGF0YWJhc2U6OnN5bmNocm9ub3VzSWNvbkZvclBhZ2VVUkwpOgorICAgICAgICAo
V2ViQ29yZTo6SWNvbkRhdGFiYXNlOjpzeW5jaHJvbm91c0ljb25VUkxGb3JQYWdlVVJMKToKKyAg
ICAgICAgKFdlYkNvcmU6Okljb25EYXRhYmFzZTo6cmV0YWluSWNvbkZvclBhZ2VVUkwpOgorICAg
ICAgICAoV2ViQ29yZTo6SWNvbkRhdGFiYXNlOjpyZWxlYXNlSWNvbkZvclBhZ2VVUkwpOgorICAg
ICAgICAoV2ViQ29yZTo6SWNvbkRhdGFiYXNlOjpzZXRJY29uRGF0YUZvckljb25VUkwpOgorICAg
ICAgICAoV2ViQ29yZTo6SWNvbkRhdGFiYXNlOjpzZXRJY29uVVJMRm9yUGFnZVVSTCk6CisgICAg
ICAgIChXZWJDb3JlOjpJY29uRGF0YWJhc2U6OmRhdGFiYXNlUGF0aCk6CisgICAgICAgIChXZWJD
b3JlOjpJY29uRGF0YWJhc2U6OmRlZmF1bHREYXRhYmFzZUZpbGVuYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkltcG9ydGVkSWNvblVSTEZvclBhZ2VVUkxXb3JrSXRlbTo6SW1wb3J0ZWRJY29uVVJM
Rm9yUGFnZVVSTFdvcmtJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkltcG9ydGVkSWNvbkRhdGFG
b3JQYWdlVVJMV29ya0l0ZW06OkltcG9ydGVkSWNvbkRhdGFGb3JQYWdlVVJMV29ya0l0ZW0pOgor
ICAgICAgICAqIHBhZ2UvQ29vcmRpbmF0ZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5h
dGVzOjppc29sYXRlZENvcHkpOgorICAgICAgICAqIHBhZ2UvR2VvcG9zaXRpb24uaDoKKyAgICAg
ICAgKFdlYkNvcmU6Okdlb3Bvc2l0aW9uOjppc29sYXRlZENvcHkpOgorICAgICAgICAqIHBhZ2Uv
U2VjdXJpdHlPcmlnaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OlNl
Y3VyaXR5T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjppc29sYXRl
ZENvcHkpOgorICAgICAgICAqIHBhZ2UvU2VjdXJpdHlPcmlnaW4uaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9Dcm9zc1RocmVhZENvcGllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjo6OmNvcHkpOgor
ICAgICAgICAqIHBsYXRmb3JtL0tVUkwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6Y29w
eSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9CbG9iRGF0YS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpCbG9iRGF0YUl0ZW06OmRldGFjaEZyb21DdXJyZW50VGhyZWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OkJsb2JEYXRhOjpkZXRhY2hGcm9tQ3VycmVudFRocmVhZCk6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
VFBIZWFkZXJNYXA6OmNvcHlEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlRXJyb3JCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlRXJyb3JCYXNlOjpj
b3B5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6Y29weURhdGEpOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OmNvcHlEYXRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9zcWwvU1FMVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMVmFsdWU6OlNR
TFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFZhbHVlOjpzdHJpbmcpOgorICAgICAgICAq
IHN0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVH
dWlkVmVyc2lvbk1hcCk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpBYnN0
cmFjdERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OnBlcmZv
cm1PcGVuQW5kVmVyaWZ5KToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OnN0
cmluZ0lkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6ZGlz
cGxheU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6ZmlsZU5hbWUp
OgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6c2V0RXhwZWN0ZWRWZXJzaW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OmdldENhY2hlZFZlcnNpb24p
OgorICAgICAgICAqIHN0b3JhZ2UvQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q2hhbmdlVmVyc2lvbldyYXBwZXI6OkNoYW5nZVZlcnNpb25XcmFwcGVyKToKKyAg
ICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
OjpEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6dGFibGVOYW1lcyk6Cisg
ICAgICAgICogc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RGF0YWJhc2VUcmFja2VyOjpzZXREYXRhYmFzZURpcmVjdG9yeVBhdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0YWJhc2VUcmFja2VyOjpkYXRhYmFzZURpcmVjdG9yeVBhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyRGF0YWJhc2VQYXRoKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6Y2FuRXN0YWJsaXNoRGF0YWJhc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpvcmlnaW5QYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlVHJhY2tlcjo6ZnVsbFBhdGhGb3JEYXRhYmFzZSk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZVRyYWNrZXI6OnBvcHVsYXRlT3JpZ2lucyk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhYmFzZVRyYWNrZXI6OmRhdGFiYXNlTmFtZXNGb3JPcmlnaW4pOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0YWJhc2VUcmFja2VyOjphZGRPcGVuRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YWJhc2VUcmFja2VyOjpzZXRRdW90YSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZVRyYWNrZXI6OnJlY29yZENyZWF0aW5nRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
YWJhc2VUcmFja2VyOjpyZWNvcmREZWxldGluZ0RhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFiYXNlVHJhY2tlcjo6cmVjb3JkRGVsZXRpbmdPcmlnaW4pOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YWJhc2VUcmFja2VyOjpzY2hlZHVsZU5vdGlmeURhdGFiYXNlQ2hhbmdlZCk6CisgICAg
ICAgICogc3RvcmFnZS9PcmlnaW5RdW90YU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
T3JpZ2luUXVvdGFNYW5hZ2VyOjp0cmFja09yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpPcmln
aW5RdW90YU1hbmFnZXI6OmFkZERhdGFiYXNlKToKKyAgICAgICAgKiBzdG9yYWdlL1NRTEVycm9y
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTUUxFcnJvcjo6bWVzc2FnZSk6CisgICAgICAgIChXZWJD
b3JlOjpTUUxFcnJvcjo6U1FMRXJyb3IpOgorICAgICAgICAqIHN0b3JhZ2UvU1FMU3RhdGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFN0YXRlbWVudDo6U1FMU3RhdGVtZW50KToKKyAg
ICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlQXJlYVN5bmM6OlN0b3JhZ2VBcmVhU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlQXJlYVN5bmM6OnN5bmNUaW1lckZpcmVkKToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VN
YXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU1hcDo6aW1wb3J0SXRlbSk6CisgICAg
ICAgICogc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6U3RvcmFnZU5hbWVzcGFjZUltcGwpOgorICAgICAgICAq
IHN0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3Jh
Z2VTeW5jTWFuYWdlcjo6U3RvcmFnZVN5bmNNYW5hZ2VyKToKKyAgICAgICAgKiBzdG9yYWdlL1N0
b3JhZ2VUcmFja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpTdG9y
YWdlVHJhY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c3luY0ltcG9y
dE9yaWdpbklkZW50aWZpZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpz
eW5jRmlsZVN5c3RlbUFuZFRyYWNrZXJEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlVHJhY2tlcjo6c2V0T3JpZ2luRGV0YWlscyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdl
VHJhY2tlcjo6d2lsbERlbGV0ZUFsbE9yaWdpbnMpOgorICAgICAgICAqIHdvcmtlcnMvRGVmYXVs
dFNoYXJlZFdvcmtlclJlcG9zaXRvcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkV29y
a2VyUHJveHk6OnVybCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRXb3JrZXJQcm94eTo6bmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRXb3JrZXJQcm94eTo6U2hhcmVkV29ya2VyUHJv
eHkpOgorICAgICAgICAoV2ViQ29yZTo6RGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6Omdl
dFByb3h5KToKKyAgICAgICAgKiB3b3JrZXJzL1NoYXJlZFdvcmtlclRocmVhZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTaGFyZWRXb3JrZXJUaHJlYWQ6OlNoYXJlZFdvcmtlclRocmVhZCk6Cisg
ICAgICAgICogd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJFeGNlcHRpb25UYXNrOjpXb3JrZXJFeGNlcHRpb25UYXNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlBvc3RNZXNzYWdlVG9QYWdlSW5zcGVjdG9yVGFzazo6UG9zdE1lc3NhZ2VUb1Bh
Z2VJbnNwZWN0b3JUYXNrKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlclJ1bkxvb3AuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyUnVuTG9vcDo6cG9zdFRhc2tGb3JNb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OldvcmtlclJ1bkxvb3A6OlRhc2s6OlRhc2spOgorICAgICAgICAqIHdvcmtl
cnMvV29ya2VyVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZFN0YXJ0
dXBEYXRhOjpXb3JrZXJUaHJlYWRTdGFydHVwRGF0YSk6CisKIDIwMTEtMTAtMjIgIEdlb2ZmcmV5
IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBTZXBhcmF0ZWQgc3RyaW5nIGxp
ZmV0aW1lIGJpdHMgZnJvbSBjaGFyYWN0ZXIgYnVmZmVyIHN0YXRlIGJpdHMKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZXhwLmluCShyZXZpc2lvbiA5ODIwMSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0zODAsNyArMzgwLDcgQEAgX19aTjdXZWJDb3JlMTRT
Y3JvbGxhYmxlQXJlYTZzY3JvbGxFTlNfMQogX19aTjdXZWJDb3JlMTRTY3JvbGxhYmxlQXJlYUMy
RXYKIF9fWk43V2ViQ29yZTE0U2Nyb2xsYWJsZUFyZWFEMkV2CiBfX1pON1dlYkNvcmUxNFNjcm9s
bGJhclRoZW1lNXRoZW1lRXYKLV9fWk43V2ViQ29yZTE0U2VjdXJpdHlPcmlnaW4xNHRocmVhZHNh
ZmVDb3B5RXYKK19fWk43V2ViQ29yZTE0U2VjdXJpdHlPcmlnaW4xMmlzb2xhdGVkQ29weUV2CiBf
X1pON1dlYkNvcmUxNFNlY3VyaXR5T3JpZ2luMTZjcmVhdGVGcm9tU3RyaW5nRVJLTjNXVEY2U3Ry
aW5nRQogX19aTjdXZWJDb3JlMTRTZWN1cml0eU9yaWdpbjE4c2V0TG9jYWxMb2FkUG9saWN5RU5T
MF8xNUxvY2FsTG9hZFBvbGljeUUKIF9fWk43V2ViQ29yZTE0U2VjdXJpdHlPcmlnaW4xOHNob3Vs
ZEhpZGVSZWZlcnJlckVSS05TXzRLVVJMRVJLTjNXVEY2U3RyaW5nRQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCShy
ZXZpc2lvbiA5ODIwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NTYsNyArMTk1Niw3IEBAIFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZSogU2VyaWFsaXplZFNjcmlwdFYKIFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnJlbGVhc2UoKQogewogICAgIFJl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHJlc3VsdCA9IGFkb3B0UmVmKG5ldyBTZXJpYWxp
emVkU2NyaXB0VmFsdWUobV9kYXRhKSk7Ci0gICAgbV9kYXRhID0gU3RyaW5nKCkuY3Jvc3NUaHJl
YWRTdHJpbmcoKTsKKyAgICBtX2RhdGEgPSBTdHJpbmcoKTsKICAgICByZXR1cm4gcmVzdWx0LnJl
bGVhc2UoKTsKIH0KIApAQCAtMTk5NSw3ICsxOTk1LDcgQEAgU2VyaWFsaXplZFNjcmlwdFZhbHVl
OjpTZXJpYWxpemVkU2NyaXB0VgogICAgICAgICBkaWRUaHJvdyA9IHRydWU7CiAgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIFNlcmlhbGl6ZXI6OlN1Y2Nlc3M6Ci0gICAgICAgIG1fZGF0YSA9IFN0
cmluZyhTdHJpbmdJbXBsOjphZG9wdCh3cml0ZXIuZGF0YSgpKSkuY3Jvc3NUaHJlYWRTdHJpbmco
KTsKKyAgICAgICAgbV9kYXRhID0gU3RyaW5nKFN0cmluZ0ltcGw6OmFkb3B0KHdyaXRlci5kYXRh
KCkpKS5pc29sYXRlZENvcHkoKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgU2VyaWFsaXpl
cjo6SlNFeGNlcHRpb246CiAgICAgICAgIC8vIFdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSBiZWNh
dXNlIHRoaXMgY2FzZSB3YXMgaGFuZGxlZCBhYm92ZS4KQEAgLTIwMDYsNyArMjAwNiw3IEBAIFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFYKIAogU2VyaWFsaXplZFNjcmlw
dFZhbHVlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUoY29uc3QgU3RyaW5nJiB3aXJlRGF0YSkKIHsK
LSAgICBtX2RhdGEgPSB3aXJlRGF0YS5jcm9zc1RocmVhZFN0cmluZygpOworICAgIG1fZGF0YSA9
IHdpcmVEYXRhLmlzb2xhdGVkQ29weSgpOwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShNZXNzYWdlUG9ydEFycmF5KiBtZXNzYWdl
UG9ydHMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0xvY2FsRmlsZVN5c3RlbS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTG9jYWxGaWxlU3lzdGVtLmgJKHJl
dmlzaW9uIDk4MjAxKQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Mb2NhbEZpbGVTeXN0ZW0u
aAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCBwcml2YXRlOgogICAgICAgICBleHBs
aWNpdCBTeXN0ZW1CYXNlUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpIDogbV92YWx1ZShwYXRoKSB7
IH0KICAgICAgICAgb3BlcmF0b3IgU3RyaW5nKCkgY29uc3QKICAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIG1fdmFsdWUudGhyZWFkc2FmZUNvcHkoKTsKKyAgICAgICAgICAgIHJldHVybiBt
X3ZhbHVlLmlzb2xhdGVkQ29weSgpOwogICAgICAgICB9CiAgICAgcHJpdmF0ZToKICAgICAgICAg
U3RyaW5nIG1fdmFsdWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvV29ya2VyVGhyZWFk
YWJsZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1dvcmtl
clRocmVhZGFibGVMb2FkZXIuY3BwCShyZXZpc2lvbiA5ODIwMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIs
NyArOTIsNyBAQCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlv
bnMmIG9wdGlvbnMsIGNvbnN0IFN0cmluZyYgb3V0Z29pbmdSZWZlcnJlcikKICAgICA6IG1fd29y
a2VyQ2xpZW50V3JhcHBlcih3b3JrZXJDbGllbnRXcmFwcGVyKQogICAgICwgbV9sb2FkZXJQcm94
eShsb2FkZXJQcm94eSkKLSAgICAsIG1fdGFza01vZGUodGFza01vZGUuY3Jvc3NUaHJlYWRTdHJp
bmcoKSkKKyAgICAsIG1fdGFza01vZGUodGFza01vZGUuaXNvbGF0ZWRDb3B5KCkpCiB7CiAgICAg
QVNTRVJUKG1fd29ya2VyQ2xpZW50V3JhcHBlci5nZXQoKSk7CiAgICAgbV9sb2FkZXJQcm94eS5w
b3N0VGFza1RvTG9hZGVyKApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRh
dGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29u
RGF0YWJhc2UuY3BwCShyZXZpc2lvbiA5ODIwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9p
Y29uL0ljb25EYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOCw3ICsxMjgsNyBAQCBi
b29sIEljb25EYXRhYmFzZTo6b3Blbihjb25zdCBTdHJpbmcmIGRpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKLSAgICBtX2RhdGFiYXNlRGlyZWN0b3J5ID0gZGlyZWN0b3J5LmNyb3Nz
VGhyZWFkU3RyaW5nKCk7CisgICAgbV9kYXRhYmFzZURpcmVjdG9yeSA9IGRpcmVjdG9yeS5pc29s
YXRlZENvcHkoKTsKIAogICAgIC8vIEZvcm11bGF0ZSB0aGUgZnVsbCBwYXRoIGZvciB0aGUgZGF0
YWJhc2UgZmlsZQogICAgIG1fY29tcGxldGVEYXRhYmFzZVBhdGggPSBwYXRoQnlBcHBlbmRpbmdD
b21wb25lbnQobV9kYXRhYmFzZURpcmVjdG9yeSwgZmlsZW5hbWUpOwpAQCAtMjI3LDcgKzIyNyw3
IEBAIEltYWdlKiBJY29uRGF0YWJhc2U6OnN5bmNocm9ub3VzSWNvbkZvclAKICAgICAKICAgICBQ
YWdlVVJMUmVjb3JkKiBwYWdlUmVjb3JkID0gbV9wYWdlVVJMVG9SZWNvcmRNYXAuZ2V0KHBhZ2VV
UkxPcmlnaW5hbCk7CiAgICAgaWYgKCFwYWdlUmVjb3JkKSB7Ci0gICAgICAgIHBhZ2VVUkxDb3B5
ID0gcGFnZVVSTE9yaWdpbmFsLmNyb3NzVGhyZWFkU3RyaW5nKCk7CisgICAgICAgIHBhZ2VVUkxD
b3B5ID0gcGFnZVVSTE9yaWdpbmFsLmlzb2xhdGVkQ29weSgpOwogICAgICAgICBwYWdlUmVjb3Jk
ID0gZ2V0T3JDcmVhdGVQYWdlVVJMUmVjb3JkKHBhZ2VVUkxDb3B5KTsKICAgICB9CiAgICAgCkBA
IC0yNjMsNyArMjYzLDcgQEAgSW1hZ2UqIEljb25EYXRhYmFzZTo6c3luY2hyb25vdXNJY29uRm9y
UAogICAgIC8vIG1hcmsgaXQgdG8gYmUgcmVhZCBieSB0aGUgYmFja2dyb3VuZCB0aHJlYWQKICAg
ICBpZiAoaWNvblJlY29yZC0+aW1hZ2VEYXRhU3RhdHVzKCkgPT0gSW1hZ2VEYXRhU3RhdHVzVW5r
bm93bikgewogICAgICAgICBpZiAocGFnZVVSTENvcHkuaXNOdWxsKCkpCi0gICAgICAgICAgICBw
YWdlVVJMQ29weSA9IHBhZ2VVUkxPcmlnaW5hbC5jcm9zc1RocmVhZFN0cmluZygpOworICAgICAg
ICAgICAgcGFnZVVSTENvcHkgPSBwYWdlVVJMT3JpZ2luYWwuaXNvbGF0ZWRDb3B5KCk7CiAgICAg
CiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3BlbmRpbmdSZWFkaW5nTG9jayk7CiAgICAg
ICAgIG1fcGFnZVVSTHNJbnRlcmVzdGVkSW5JY29ucy5hZGQocGFnZVVSTENvcHkpOwpAQCAtMzEy
LDcgKzMxMiw3IEBAIFN0cmluZyBJY29uRGF0YWJhc2U6OnN5bmNocm9ub3VzSWNvblVSTEYKICAg
ICAKICAgICBQYWdlVVJMUmVjb3JkKiBwYWdlUmVjb3JkID0gbV9wYWdlVVJMVG9SZWNvcmRNYXAu
Z2V0KHBhZ2VVUkxPcmlnaW5hbCk7CiAgICAgaWYgKCFwYWdlUmVjb3JkKQotICAgICAgICBwYWdl
UmVjb3JkID0gZ2V0T3JDcmVhdGVQYWdlVVJMUmVjb3JkKHBhZ2VVUkxPcmlnaW5hbC5jcm9zc1Ro
cmVhZFN0cmluZygpKTsKKyAgICAgICAgcGFnZVJlY29yZCA9IGdldE9yQ3JlYXRlUGFnZVVSTFJl
Y29yZChwYWdlVVJMT3JpZ2luYWwuaXNvbGF0ZWRDb3B5KCkpOwogICAgIAogICAgIC8vIElmIHBh
Z2VSZWNvcmQgaXMgTlVMTCwgb25lIG9mIHR3byB0aGluZ3MgaXMgdHJ1ZSAtCiAgICAgLy8gMSAt
IFRoZSBpbml0aWFsIHVybCBpbXBvcnQgaXMgaW5jb21wbGV0ZSBhbmQgdGhpcyBwYWdlVVJMIGhh
cyBhbHJlYWR5IGJlZW4gbWFya2VkIHRvIGJlIG5vdGlmaWVkIG9uY2UgaXQgaXMgY29tcGxldGUg
aWYgYW4gaWNvblVSTCBleGlzdHMKQEAgLTMyMSw3ICszMjEsNyBAQCBTdHJpbmcgSWNvbkRhdGFi
YXNlOjpzeW5jaHJvbm91c0ljb25VUkxGCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICAK
ICAgICAvLyBQb3NzaWJsZSB0aGUgcGFnZVJlY29yZCBpcyBhcm91bmQgYmVjYXVzZSBpdCdzIGEg
cmV0YWluZWQgcGFnZVVSTCB3aXRoIG5vIGljb25VUkwsIHNvIHdlIGhhdmUgdG8gY2hlY2sKLSAg
ICByZXR1cm4gcGFnZVJlY29yZC0+aWNvblJlY29yZCgpID8gcGFnZVJlY29yZC0+aWNvblJlY29y
ZCgpLT5pY29uVVJMKCkudGhyZWFkc2FmZUNvcHkoKSA6IFN0cmluZygpOworICAgIHJldHVybiBw
YWdlUmVjb3JkLT5pY29uUmVjb3JkKCkgPyBwYWdlUmVjb3JkLT5pY29uUmVjb3JkKCktPmljb25V
UkwoKS5pc29sYXRlZENvcHkoKSA6IFN0cmluZygpOwogfQogCiAjaWZkZWYgQ0FOX1RIRU1FX1VS
TF9JQ09OCkBAIC00MDYsNyArNDA2LDcgQEAgdm9pZCBJY29uRGF0YWJhc2U6OnJldGFpbkljb25G
b3JQYWdlVVJMKAogICAgIFN0cmluZyBwYWdlVVJMOwogICAgIAogICAgIGlmICghcmVjb3JkKSB7
Ci0gICAgICAgIHBhZ2VVUkwgPSBwYWdlVVJMT3JpZ2luYWwuY3Jvc3NUaHJlYWRTdHJpbmcoKTsK
KyAgICAgICAgcGFnZVVSTCA9IHBhZ2VVUkxPcmlnaW5hbC5pc29sYXRlZENvcHkoKTsKIAogICAg
ICAgICByZWNvcmQgPSBuZXcgUGFnZVVSTFJlY29yZChwYWdlVVJMKTsKICAgICAgICAgbV9wYWdl
VVJMVG9SZWNvcmRNYXAuc2V0KHBhZ2VVUkwsIHJlY29yZCk7CkBAIC00MTQsNyArNDE0LDcgQEAg
dm9pZCBJY29uRGF0YWJhc2U6OnJldGFpbkljb25Gb3JQYWdlVVJMKAogICAgIAogICAgIGlmICgh
cmVjb3JkLT5yZXRhaW4oKSkgewogICAgICAgICBpZiAocGFnZVVSTC5pc051bGwoKSkKLSAgICAg
ICAgICAgIHBhZ2VVUkwgPSBwYWdlVVJMT3JpZ2luYWwuY3Jvc3NUaHJlYWRTdHJpbmcoKTsKKyAg
ICAgICAgICAgIHBhZ2VVUkwgPSBwYWdlVVJMT3JpZ2luYWwuaXNvbGF0ZWRDb3B5KCk7CiAKICAg
ICAgICAgLy8gVGhpcyBwYWdlIGp1c3QgaGFkIGl0cyByZXRhaW4gY291bnQgYnVtcGVkIGZyb20g
MCB0byAxIC0gUmVjb3JkIHRoYXQgZmFjdAogICAgICAgICBtX3JldGFpbmVkUGFnZVVSTHMuYWRk
KHBhZ2VVUkwpOwpAQCAtNDg5LDcgKzQ4OSw3IEBAIHZvaWQgSWNvbkRhdGFiYXNlOjpyZWxlYXNl
SWNvbkZvclBhZ2VVUkwKICAgICAvLyBNYXJrIHN0dWZmIGZvciBkZWxldGlvbiBmcm9tIHRoZSBk
YXRhYmFzZSBvbmx5IGlmIHdlJ3JlIG5vdCBpbiBwcml2YXRlIGJyb3dzaW5nCiAgICAgaWYgKCFt
X3ByaXZhdGVCcm93c2luZ0VuYWJsZWQpIHsKICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1f
cGVuZGluZ1N5bmNMb2NrKTsKLSAgICAgICAgbV9wYWdlVVJMc1BlbmRpbmdTeW5jLnNldChwYWdl
VVJMT3JpZ2luYWwuY3Jvc3NUaHJlYWRTdHJpbmcoKSwgcGFnZVJlY29yZC0+c25hcHNob3QodHJ1
ZSkpOworICAgICAgICBtX3BhZ2VVUkxzUGVuZGluZ1N5bmMuc2V0KHBhZ2VVUkxPcmlnaW5hbC5p
c29sYXRlZENvcHkoKSwgcGFnZVJlY29yZC0+c25hcHNob3QodHJ1ZSkpOwogICAgIAogICAgICAg
ICAvLyBJZiB0aGlzIHBhZ2UgaXMgdGhlIGxhc3QgcGFnZSB0byByZWZlciB0byBhIHBhcnRpY3Vs
YXIgSWNvblJlY29yZCwgdGhhdCBJY29uUmVjb3JkIG5lZWRzIHRvCiAgICAgICAgIC8vIGJlIG1h
cmtlZCBmb3IgZGVsZXRpb24KQEAgLTUxNSw3ICs1MTUsNyBAQCB2b2lkIEljb25EYXRhYmFzZTo6
c2V0SWNvbkRhdGFGb3JJY29uVVJMCiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSA9IGRh
dGFPcmlnaW5hbCA/IGRhdGFPcmlnaW5hbC0+Y29weSgpIDogUGFzc1JlZlB0cjxTaGFyZWRCdWZm
ZXI+KDApOwogICAgIGlmIChkYXRhKQogICAgICAgICBkYXRhLT5zZXRNdXRleEZvclZlcmlmaWVy
KG1fdXJsQW5kSWNvbkxvY2spOwotICAgIFN0cmluZyBpY29uVVJMID0gaWNvblVSTE9yaWdpbmFs
LmNyb3NzVGhyZWFkU3RyaW5nKCk7CisgICAgU3RyaW5nIGljb25VUkwgPSBpY29uVVJMT3JpZ2lu
YWwuaXNvbGF0ZWRDb3B5KCk7CiAgICAgCiAgICAgVmVjdG9yPFN0cmluZz4gcGFnZVVSTHM7CiAg
ICAgewpAQCAtNTkyLDggKzU5Miw4IEBAIHZvaWQgSWNvbkRhdGFiYXNlOjpzZXRJY29uVVJMRm9y
UGFnZVVSTCgKICAgICAgICAgaWYgKHBhZ2VSZWNvcmQgJiYgcGFnZVJlY29yZC0+aWNvblJlY29y
ZCgpICYmIHBhZ2VSZWNvcmQtPmljb25SZWNvcmQoKS0+aWNvblVSTCgpID09IGljb25VUkxPcmln
aW5hbCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAotICAgICAgICBwYWdlVVJM
ID0gcGFnZVVSTE9yaWdpbmFsLmNyb3NzVGhyZWFkU3RyaW5nKCk7Ci0gICAgICAgIGljb25VUkwg
PSBpY29uVVJMT3JpZ2luYWwuY3Jvc3NUaHJlYWRTdHJpbmcoKTsKKyAgICAgICAgcGFnZVVSTCA9
IHBhZ2VVUkxPcmlnaW5hbC5pc29sYXRlZENvcHkoKTsKKyAgICAgICAgaWNvblVSTCA9IGljb25V
UkxPcmlnaW5hbC5pc29sYXRlZENvcHkoKTsKIAogICAgICAgICBpZiAoIXBhZ2VSZWNvcmQpIHsK
ICAgICAgICAgICAgIHBhZ2VSZWNvcmQgPSBuZXcgUGFnZVVSTFJlY29yZChwYWdlVVJMKTsKQEAg
LTg1OSwxMyArODU5LDEzIEBAIGJvb2wgSWNvbkRhdGFiYXNlOjppc09wZW4oKSBjb25zdAogU3Ry
aW5nIEljb25EYXRhYmFzZTo6ZGF0YWJhc2VQYXRoKCkgY29uc3QKIHsKICAgICBNdXRleExvY2tl
ciBsb2NrZXIobV9zeW5jTG9jayk7Ci0gICAgcmV0dXJuIG1fY29tcGxldGVEYXRhYmFzZVBhdGgu
dGhyZWFkc2FmZUNvcHkoKTsKKyAgICByZXR1cm4gbV9jb21wbGV0ZURhdGFiYXNlUGF0aC5pc29s
YXRlZENvcHkoKTsKIH0KIAogU3RyaW5nIEljb25EYXRhYmFzZTo6ZGVmYXVsdERhdGFiYXNlRmls
ZW5hbWUoKQogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBkZWZhdWx0RGF0YWJh
c2VGaWxlbmFtZSwgKCJXZWJwYWdlSWNvbnMuZGIiKSk7Ci0gICAgcmV0dXJuIGRlZmF1bHREYXRh
YmFzZUZpbGVuYW1lLnRocmVhZHNhZmVDb3B5KCk7CisgICAgcmV0dXJuIGRlZmF1bHREYXRhYmFz
ZUZpbGVuYW1lLmlzb2xhdGVkQ29weSgpOwogfQogCiAvLyBVbmxpa2UgZ2V0T3JDcmVhdGVQYWdl
VVJMUmVjb3JkKCksIGdldE9yQ3JlYXRlSWNvblJlY29yZCgpIGRvZXMgbm90IG1hcmsgdGhlIGlj
b24gYXMgImludGVyZXN0ZWQgaW4gaW1wb3J0IgpAQCAtMjE0Niw3ICsyMTQ2LDcgQEAgY2xhc3Mg
SW1wb3J0ZWRJY29uVVJMRm9yUGFnZVVSTFdvcmtJdGVtIAogcHVibGljOgogICAgIEltcG9ydGVk
SWNvblVSTEZvclBhZ2VVUkxXb3JrSXRlbShJY29uRGF0YWJhc2VDbGllbnQqIGNsaWVudCwgY29u
c3QgU3RyaW5nJiBwYWdlVVJMKQogICAgICAgICA6IENsaWVudFdvcmtJdGVtKGNsaWVudCkKLSAg
ICAgICAgLCBtX3BhZ2VVUkwobmV3IFN0cmluZyhwYWdlVVJMLnRocmVhZHNhZmVDb3B5KCkpKQor
ICAgICAgICAsIG1fcGFnZVVSTChuZXcgU3RyaW5nKHBhZ2VVUkwuaXNvbGF0ZWRDb3B5KCkpKQog
ICAgIHsgfQogICAgIAogICAgIHZpcnR1YWwgfkltcG9ydGVkSWNvblVSTEZvclBhZ2VVUkxXb3Jr
SXRlbSgpCkBAIC0yMTY5LDcgKzIxNjksNyBAQCBjbGFzcyBJbXBvcnRlZEljb25EYXRhRm9yUGFn
ZVVSTFdvcmtJdGVtCiBwdWJsaWM6CiAgICAgSW1wb3J0ZWRJY29uRGF0YUZvclBhZ2VVUkxXb3Jr
SXRlbShJY29uRGF0YWJhc2VDbGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiBwYWdlVVJMKQog
ICAgICAgICA6IENsaWVudFdvcmtJdGVtKGNsaWVudCkKLSAgICAgICAgLCBtX3BhZ2VVUkwobmV3
IFN0cmluZyhwYWdlVVJMLnRocmVhZHNhZmVDb3B5KCkpKQorICAgICAgICAsIG1fcGFnZVVSTChu
ZXcgU3RyaW5nKHBhZ2VVUkwuaXNvbGF0ZWRDb3B5KCkpKQogICAgIHsgfQogICAgIAogICAgIHZp
cnR1YWwgfkltcG9ydGVkSWNvbkRhdGFGb3JQYWdlVVJMV29ya0l0ZW0oKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9Db29yZGluYXRlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ29vcmRpbmF0ZXMuaAkocmV2aXNpb24gOTgyMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL0Nvb3JkaW5hdGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgY2xhc3Mg
Q29vcmRpbmF0ZXMgOiBwdWJsaWMgUmVmQ291bnRlZDxDbwogcHVibGljOgogICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPENvb3JkaW5hdGVzPiBjcmVhdGUoZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9u
Z2l0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgZG91YmxlIGFj
Y3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNj
dXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRl
c1NwZWVkLCBkb3VibGUgc3BlZWQpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb29yZGluYXRlcyhs
YXRpdHVkZSwgbG9uZ2l0dWRlLCBwcm92aWRlc0FsdGl0dWRlLCBhbHRpdHVkZSwgYWNjdXJhY3ks
IHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgYWx0aXR1ZGVBY2N1cmFjeSwgcHJvdmlkZXNIZWFk
aW5nLCBoZWFkaW5nLCBwcm92aWRlc1NwZWVkLCBzcGVlZCkpOyB9CiAKLSAgICBQYXNzUmVmUHRy
PENvb3JkaW5hdGVzPiB0aHJlYWRTYWZlQ29weSgpIGNvbnN0CisgICAgUGFzc1JlZlB0cjxDb29y
ZGluYXRlcz4gaXNvbGF0ZWRDb3B5KCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBDb29y
ZGluYXRlczo6Y3JlYXRlKG1fbGF0aXR1ZGUsIG1fbG9uZ2l0dWRlLCBtX2NhblByb3ZpZGVBbHRp
dHVkZSwgbV9hbHRpdHVkZSwgbV9hY2N1cmFjeSwgbV9jYW5Qcm92aWRlQWx0aXR1ZGVBY2N1cmFj
eSwgbV9hbHRpdHVkZUFjY3VyYWN5LCBtX2NhblByb3ZpZGVIZWFkaW5nLCBtX2hlYWRpbmcsIG1f
Y2FuUHJvdmlkZVNwZWVkLCBtX3NwZWVkKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL0dlb3Bvc2l0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9HZW9w
b3NpdGlvbi5oCShyZXZpc2lvbiA5ODIwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvR2VvcG9z
aXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDAsOSArNDAsOSBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgR2VvcG9zaXRpb24oY29vcmRpbmF0ZXMsIHRpbWVzdGFtcCkp
OwogICAgIH0KIAotICAgIFBhc3NSZWZQdHI8R2VvcG9zaXRpb24+IHRocmVhZFNhZmVDb3B5KCkg
Y29uc3QKKyAgICBQYXNzUmVmUHRyPEdlb3Bvc2l0aW9uPiBpc29sYXRlZENvcHkoKSBjb25zdAog
ICAgIHsKLSAgICAgICAgcmV0dXJuIEdlb3Bvc2l0aW9uOjpjcmVhdGUobV9jb29yZGluYXRlcy0+
dGhyZWFkU2FmZUNvcHkoKSwgbV90aW1lc3RhbXApOworICAgICAgICByZXR1cm4gR2VvcG9zaXRp
b246OmNyZWF0ZShtX2Nvb3JkaW5hdGVzLT5pc29sYXRlZENvcHkoKSwgbV90aW1lc3RhbXApOwog
ICAgIH0KIAogICAgIERPTVRpbWVTdGFtcCB0aW1lc3RhbXAoKSBjb25zdCB7IHJldHVybiBtX3Rp
bWVzdGFtcDsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAJKHJl
dmlzaW9uIDk4MjAxKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEzMiwxMSArMTMyLDExIEBAIFNlY3VyaXR5T3JpZ2luOjpTZWN1
cml0eU9yaWdpbihjb25zdCBLVVIKIAogU2VjdXJpdHlPcmlnaW46OlNlY3VyaXR5T3JpZ2luKGNv
bnN0IFNlY3VyaXR5T3JpZ2luKiBvdGhlcikKICAgICA6IG1fc2FuZGJveEZsYWdzKG90aGVyLT5t
X3NhbmRib3hGbGFncykKLSAgICAsIG1fcHJvdG9jb2wob3RoZXItPm1fcHJvdG9jb2wudGhyZWFk
c2FmZUNvcHkoKSkKLSAgICAsIG1faG9zdChvdGhlci0+bV9ob3N0LnRocmVhZHNhZmVDb3B5KCkp
Ci0gICAgLCBtX2VuY29kZWRIb3N0KG90aGVyLT5tX2VuY29kZWRIb3N0LnRocmVhZHNhZmVDb3B5
KCkpCi0gICAgLCBtX2RvbWFpbihvdGhlci0+bV9kb21haW4udGhyZWFkc2FmZUNvcHkoKSkKLSAg
ICAsIG1fZmlsZVBhdGgob3RoZXItPm1fZmlsZVBhdGgudGhyZWFkc2FmZUNvcHkoKSkKKyAgICAs
IG1fcHJvdG9jb2wob3RoZXItPm1fcHJvdG9jb2wuaXNvbGF0ZWRDb3B5KCkpCisgICAgLCBtX2hv
c3Qob3RoZXItPm1faG9zdC5pc29sYXRlZENvcHkoKSkKKyAgICAsIG1fZW5jb2RlZEhvc3Qob3Ro
ZXItPm1fZW5jb2RlZEhvc3QuaXNvbGF0ZWRDb3B5KCkpCisgICAgLCBtX2RvbWFpbihvdGhlci0+
bV9kb21haW4uaXNvbGF0ZWRDb3B5KCkpCisgICAgLCBtX2ZpbGVQYXRoKG90aGVyLT5tX2ZpbGVQ
YXRoLmlzb2xhdGVkQ29weSgpKQogICAgICwgbV9wb3J0KG90aGVyLT5tX3BvcnQpCiAgICAgLCBt
X2lzVW5pcXVlKG90aGVyLT5tX2lzVW5pcXVlKQogICAgICwgbV91bml2ZXJzYWxBY2Nlc3Mob3Ro
ZXItPm1fdW5pdmVyc2FsQWNjZXNzKQpAQCAtMTY0LDcgKzE2NCw3IEBAIFBhc3NSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+IFNlY3VyaXR5T3JpZ2kKICAgICByZXR1cm4gY3JlYXRlKEtVUkwoKSk7CiB9
CiAKLVBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IFNlY3VyaXR5T3JpZ2luOjp0aHJlYWRzYWZl
Q29weSgpCitQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBTZWN1cml0eU9yaWdpbjo6aXNvbGF0
ZWRDb3B5KCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNlY3VyaXR5T3JpZ2luKHRoaXMp
KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmgJKHJldmlzaW9uIDk4
MjAxKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKIAogICAgIC8vIENyZWF0ZSBhIGRlZXAgY29w
eSBvZiB0aGlzIFNlY3VyaXR5T3JpZ2luLiBUaGlzIG1ldGhvZCBpcyB1c2VmdWwKICAgICAvLyB3
aGVuIG1hcnNoYWxsaW5nIGEgU2VjdXJpdHlPcmlnaW4gdG8gYW5vdGhlciB0aHJlYWQuCi0gICAg
UGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gdGhyZWFkc2FmZUNvcHkoKTsKKyAgICBQYXNzUmVm
UHRyPFNlY3VyaXR5T3JpZ2luPiBpc29sYXRlZENvcHkoKTsKIAogICAgIC8vIFNldCB0aGUgZG9t
YWluIHByb3BlcnR5IG9mIHRoaXMgc2VjdXJpdHkgb3JpZ2luIHRvIG5ld0RvbWFpbi4gVGhpcwog
ICAgIC8vIGZ1bmN0aW9uIGRvZXMgbm90IGNoZWNrIHdoZXRoZXIgbmV3RG9tYWluIGlzIGEgc3Vm
Zml4IG9mIHRoZSBjdXJyZW50CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1Ro
cmVhZENvcGllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3Jv
c3NUaHJlYWRDb3BpZXIuY3BwCShyZXZpc2lvbiA5ODIwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAs
NyBAQCBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIGZhbHNlLCBLVVJMCiAKIENyb3NzVGhy
ZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIFN0cmluZz46OlR5cGUgQ3Jvc3NUaHJlYWRDb3Bp
ZXJCYXNlPGZhbHNlLCBmYWxzZSwgU3RyaW5nPjo6Y29weShjb25zdCBTdHJpbmcmIHN0cikKIHsK
LSAgICByZXR1cm4gc3RyLmNyb3NzVGhyZWFkU3RyaW5nKCk7CisgICAgcmV0dXJuIHN0ci5pc29s
YXRlZENvcHkoKTsKIH0KIAogQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBmYWxzZSwgUmVz
b3VyY2VFcnJvcj46OlR5cGUgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBmYWxzZSwgUmVz
b3VyY2VFcnJvcj46OmNvcHkoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9LVVJMLmNwcAkocmV2aXNpb24gOTgyMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9LVVJMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYxLDcgKzU2MSw3IEBAIHZvaWQg
S1VSTDo6aW5pdChjb25zdCBLVVJMJiBiYXNlLCBjb25zdCAKIEtVUkwgS1VSTDo6Y29weSgpIGNv
bnN0CiB7CiAgICAgS1VSTCByZXN1bHQgPSAqdGhpczsKLSAgICByZXN1bHQubV9zdHJpbmcgPSBy
ZXN1bHQubV9zdHJpbmcuY3Jvc3NUaHJlYWRTdHJpbmcoKTsKKyAgICByZXN1bHQubV9zdHJpbmcg
PSByZXN1bHQubV9zdHJpbmcuaXNvbGF0ZWRDb3B5KCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iRGF0YS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iRGF0YS5jcHAJ
KHJldmlzaW9uIDk4MjAxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9i
RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgdm9pZCBSYXdEYXRhOjpk
ZXRhY2hGcm9tQ3VycmVudFRocmVhZCgpCiB2b2lkIEJsb2JEYXRhSXRlbTo6ZGV0YWNoRnJvbUN1
cnJlbnRUaHJlYWQoKQogewogICAgIGRhdGEtPmRldGFjaEZyb21DdXJyZW50VGhyZWFkKCk7Ci0g
ICAgcGF0aCA9IHBhdGguY3Jvc3NUaHJlYWRTdHJpbmcoKTsKKyAgICBwYXRoID0gcGF0aC5pc29s
YXRlZENvcHkoKTsKICAgICB1cmwgPSB1cmwuY29weSgpOwogfQogCkBAIC02NCw4ICs2NCw4IEBA
IFBhc3NPd25QdHI8QmxvYkRhdGE+IEJsb2JEYXRhOjpjcmVhdGUoKQogCiB2b2lkIEJsb2JEYXRh
OjpkZXRhY2hGcm9tQ3VycmVudFRocmVhZCgpCiB7Ci0gICAgbV9jb250ZW50VHlwZSA9IG1fY29u
dGVudFR5cGUuY3Jvc3NUaHJlYWRTdHJpbmcoKTsKLSAgICBtX2NvbnRlbnREaXNwb3NpdGlvbiA9
IG1fY29udGVudERpc3Bvc2l0aW9uLmNyb3NzVGhyZWFkU3RyaW5nKCk7CisgICAgbV9jb250ZW50
VHlwZSA9IG1fY29udGVudFR5cGUuaXNvbGF0ZWRDb3B5KCk7CisgICAgbV9jb250ZW50RGlzcG9z
aXRpb24gPSBtX2NvbnRlbnREaXNwb3NpdGlvbi5pc29sYXRlZENvcHkoKTsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1faXRlbXMuc2l6ZSgpOyArK2kpCiAgICAgICAgIG1faXRlbXMuYXQo
aSkuZGV0YWNoRnJvbUN1cnJlbnRUaHJlYWQoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvSFRUUEhlYWRlck1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmNwcAkocmV2aXNpb24gOTgyMDEp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJNYXAuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRIVFRQ
SGVhZGVyTWFwRGF0YT4KIAogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZF9p
dCA9IGVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBi
ZWdpbigpOyBpdCAhPSBlbmRfaXQ7ICsraXQpIHsKLSAgICAgICAgZGF0YS0+YXBwZW5kKG1ha2Vf
cGFpcihpdC0+Zmlyc3Quc3RyaW5nKCkuY3Jvc3NUaHJlYWRTdHJpbmcoKSwgaXQtPnNlY29uZC5j
cm9zc1RocmVhZFN0cmluZygpKSk7CisgICAgICAgIGRhdGEtPmFwcGVuZChtYWtlX3BhaXIoaXQt
PmZpcnN0LnN0cmluZygpLmlzb2xhdGVkQ29weSgpLCBpdC0+c2Vjb25kLmlzb2xhdGVkQ29weSgp
KSk7CiAgICAgfQogICAgIHJldHVybiBkYXRhLnJlbGVhc2UoKTsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VFcnJvckJhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VFcnJvckJhc2UuY3Bw
CShyZXZpc2lvbiA5ODIwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVz
b3VyY2VFcnJvckJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMCArMzYsMTAgQEAgUmVz
b3VyY2VFcnJvciBSZXNvdXJjZUVycm9yQmFzZTo6Y29weSgpIAogICAgIGxhenlJbml0KCk7CiAK
ICAgICBSZXNvdXJjZUVycm9yIGVycm9yQ29weTsKLSAgICBlcnJvckNvcHkubV9kb21haW4gPSBt
X2RvbWFpbi5jcm9zc1RocmVhZFN0cmluZygpOworICAgIGVycm9yQ29weS5tX2RvbWFpbiA9IG1f
ZG9tYWluLmlzb2xhdGVkQ29weSgpOwogICAgIGVycm9yQ29weS5tX2Vycm9yQ29kZSA9IG1fZXJy
b3JDb2RlOwotICAgIGVycm9yQ29weS5tX2ZhaWxpbmdVUkwgPSBtX2ZhaWxpbmdVUkwuY3Jvc3NU
aHJlYWRTdHJpbmcoKTsKLSAgICBlcnJvckNvcHkubV9sb2NhbGl6ZWREZXNjcmlwdGlvbiA9IG1f
bG9jYWxpemVkRGVzY3JpcHRpb24uY3Jvc3NUaHJlYWRTdHJpbmcoKTsKKyAgICBlcnJvckNvcHku
bV9mYWlsaW5nVVJMID0gbV9mYWlsaW5nVVJMLmlzb2xhdGVkQ29weSgpOworICAgIGVycm9yQ29w
eS5tX2xvY2FsaXplZERlc2NyaXB0aW9uID0gbV9sb2NhbGl6ZWREZXNjcmlwdGlvbi5pc29sYXRl
ZENvcHkoKTsKICAgICBlcnJvckNvcHkubV9pc051bGwgPSBtX2lzTnVsbDsKICAgICBlcnJvckNv
cHkubV9pc0NhbmNlbGxhdGlvbiA9IG1faXNDYW5jZWxsYXRpb247CiAgICAgcGxhdGZvcm1Db3B5
KGVycm9yQ29weSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlUmVxdWVzdEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAJKHJldmlzaW9uIDk4MjAxKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCBQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3Vy
Y2VSZXF1ZXN0RGF0CiAgICAgZGF0YS0+bV9jYWNoZVBvbGljeSA9IGNhY2hlUG9saWN5KCk7CiAg
ICAgZGF0YS0+bV90aW1lb3V0SW50ZXJ2YWwgPSB0aW1lb3V0SW50ZXJ2YWwoKTsKICAgICBkYXRh
LT5tX2ZpcnN0UGFydHlGb3JDb29raWVzID0gZmlyc3RQYXJ0eUZvckNvb2tpZXMoKS5jb3B5KCk7
Ci0gICAgZGF0YS0+bV9odHRwTWV0aG9kID0gaHR0cE1ldGhvZCgpLmNyb3NzVGhyZWFkU3RyaW5n
KCk7CisgICAgZGF0YS0+bV9odHRwTWV0aG9kID0gaHR0cE1ldGhvZCgpLmlzb2xhdGVkQ29weSgp
OwogICAgIGRhdGEtPm1faHR0cEhlYWRlcnMgPSBodHRwSGVhZGVyRmllbGRzKCkuY29weURhdGEo
KTsKICAgICBkYXRhLT5tX3ByaW9yaXR5ID0gcHJpb3JpdHkoKTsKIApAQCAtOTMsNyArOTMsNyBA
QCBQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0CiAgICAgZGF0YS0+bV9y
ZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KG1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNr
QXJyYXkuc2l6ZSgpKTsKICAgICBzaXplX3QgZW5jb2RpbmdBcnJheVNpemUgPSBtX3Jlc3BvbnNl
Q29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5LnNpemUoKTsKICAgICBmb3Ig
KHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgZW5jb2RpbmdBcnJheVNpemU7ICsraW5kZXgpIHsK
LSAgICAgICAgZGF0YS0+bV9yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJh
Y2tBcnJheS5hcHBlbmQobV9yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJh
Y2tBcnJheVtpbmRleF0uY3Jvc3NUaHJlYWRTdHJpbmcoKSk7CisgICAgICAgIGRhdGEtPm1fcmVz
cG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkuYXBwZW5kKG1fcmVz
cG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXlbaW5kZXhdLmlzb2xh
dGVkQ29weSgpKTsKICAgICB9CiAjZW5kaWYKICAgICBpZiAobV9odHRwQm9keSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNw
b25zZUJhc2UuY3BwCShyZXZpc2lvbiA5ODIwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAs
MTIgKzEyMCwxMiBAQCBQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhCiB7
CiAgICAgT3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGE+IGRhdGEgPSBhZG9w
dFB0cihuZXcgQ3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YSk7CiAgICAgZGF0YS0+bV91
cmwgPSB1cmwoKS5jb3B5KCk7Ci0gICAgZGF0YS0+bV9taW1lVHlwZSA9IG1pbWVUeXBlKCkuY3Jv
c3NUaHJlYWRTdHJpbmcoKTsKKyAgICBkYXRhLT5tX21pbWVUeXBlID0gbWltZVR5cGUoKS5pc29s
YXRlZENvcHkoKTsKICAgICBkYXRhLT5tX2V4cGVjdGVkQ29udGVudExlbmd0aCA9IGV4cGVjdGVk
Q29udGVudExlbmd0aCgpOwotICAgIGRhdGEtPm1fdGV4dEVuY29kaW5nTmFtZSA9IHRleHRFbmNv
ZGluZ05hbWUoKS5jcm9zc1RocmVhZFN0cmluZygpOwotICAgIGRhdGEtPm1fc3VnZ2VzdGVkRmls
ZW5hbWUgPSBzdWdnZXN0ZWRGaWxlbmFtZSgpLmNyb3NzVGhyZWFkU3RyaW5nKCk7CisgICAgZGF0
YS0+bV90ZXh0RW5jb2RpbmdOYW1lID0gdGV4dEVuY29kaW5nTmFtZSgpLmlzb2xhdGVkQ29weSgp
OworICAgIGRhdGEtPm1fc3VnZ2VzdGVkRmlsZW5hbWUgPSBzdWdnZXN0ZWRGaWxlbmFtZSgpLmlz
b2xhdGVkQ29weSgpOwogICAgIGRhdGEtPm1faHR0cFN0YXR1c0NvZGUgPSBodHRwU3RhdHVzQ29k
ZSgpOwotICAgIGRhdGEtPm1faHR0cFN0YXR1c1RleHQgPSBodHRwU3RhdHVzVGV4dCgpLmNyb3Nz
VGhyZWFkU3RyaW5nKCk7CisgICAgZGF0YS0+bV9odHRwU3RhdHVzVGV4dCA9IGh0dHBTdGF0dXNU
ZXh0KCkuaXNvbGF0ZWRDb3B5KCk7CiAgICAgZGF0YS0+bV9odHRwSGVhZGVycyA9IGh0dHBIZWFk
ZXJGaWVsZHMoKS5jb3B5RGF0YSgpOwogICAgIGRhdGEtPm1fbGFzdE1vZGlmaWVkRGF0ZSA9IGxh
c3RNb2RpZmllZERhdGUoKTsKICAgICBpZiAobV9yZXNvdXJjZUxvYWRUaW1pbmcpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxWYWx1ZS5jcHAJKHJldmlzaW9uIDk4MjAxKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTFZhbHVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBTUUxWYWx1ZTo6U1FMVmFs
dWUoY29uc3QgU1FMVmFsdWUmIHZhbCkKICAgICA6IG1fdHlwZSh2YWwubV90eXBlKQogICAgICwg
bV9udW1iZXIodmFsLm1fbnVtYmVyKQotICAgICwgbV9zdHJpbmcodmFsLm1fc3RyaW5nLnRocmVh
ZHNhZmVDb3B5KCkpCisgICAgLCBtX3N0cmluZyh2YWwubV9zdHJpbmcuaXNvbGF0ZWRDb3B5KCkp
CiB7CiB9CiAKQEAgLTQzLDcgKzQzLDcgQEAgU3RyaW5nIFNRTFZhbHVlOjpzdHJpbmcoKSBjb25z
dAogICAgIEFTU0VSVChtX3R5cGUgPT0gU3RyaW5nVmFsdWUpOwogCiAgICAgLy8gTXVzdCByZXR1
cm4gYSBjb3B5IHNpbmNlIHJlZi1zaGFyZWQgU3RyaW5ncyBhcmUgbm90IHRocmVhZCBzYWZlCi0g
ICAgcmV0dXJuIG1fc3RyaW5nLnRocmVhZHNhZmVDb3B5KCk7CisgICAgcmV0dXJuIG1fc3RyaW5n
Lmlzb2xhdGVkQ29weSgpOwogfQogCiBkb3VibGUgU1FMVmFsdWU6Om51bWJlcigpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5jcHAJKHJldmlz
aW9uIDk4MjAxKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDcgKzEyNSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB1
cGRhdGVHdWlkVmVyc2lvbk1hcCgKICAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHF1aXRlLWF3a3dh
cmQgcmVzdHJpY3Rpb24gdG8gaGF2ZSB0byBwcm9ncmFtIHdpdGguCiAKICAgICAvLyBNYXAgbnVs
bCBzdHJpbmcgdG8gZW1wdHkgc3RyaW5nIChzZWUgY29tbWVudCBhYm92ZSkuCi0gICAgZ3VpZFRv
VmVyc2lvbk1hcCgpLnNldChndWlkLCBuZXdWZXJzaW9uLmlzRW1wdHkoKSA/IFN0cmluZygpIDog
bmV3VmVyc2lvbi50aHJlYWRzYWZlQ29weSgpKTsKKyAgICBndWlkVG9WZXJzaW9uTWFwKCkuc2V0
KGd1aWQsIG5ld1ZlcnNpb24uaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBuZXdWZXJzaW9uLmlzb2xh
dGVkQ29weSgpKTsKIH0KIAogdHlwZWRlZiBIYXNoTWFwPGludCwgSGFzaFNldDxBYnN0cmFjdERh
dGFiYXNlKj4qPiBHdWlkRGF0YWJhc2VNYXA7CkBAIC0xNzcsOSArMTc3LDkgQEAgY29uc3QgY2hh
ciogQWJzdHJhY3REYXRhYmFzZTo6ZGF0YWJhc2VJbgogQWJzdHJhY3REYXRhYmFzZTo6QWJzdHJh
Y3REYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25n
IGVzdGltYXRlZFNpemUpCiAgICAgOiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoY29udGV4dCkK
LSAgICAsIG1fbmFtZShuYW1lLmNyb3NzVGhyZWFkU3RyaW5nKCkpCi0gICAgLCBtX2V4cGVjdGVk
VmVyc2lvbihleHBlY3RlZFZlcnNpb24uY3Jvc3NUaHJlYWRTdHJpbmcoKSkKLSAgICAsIG1fZGlz
cGxheU5hbWUoZGlzcGxheU5hbWUuY3Jvc3NUaHJlYWRTdHJpbmcoKSkKKyAgICAsIG1fbmFtZShu
YW1lLmlzb2xhdGVkQ29weSgpKQorICAgICwgbV9leHBlY3RlZFZlcnNpb24oZXhwZWN0ZWRWZXJz
aW9uLmlzb2xhdGVkQ29weSgpKQorICAgICwgbV9kaXNwbGF5TmFtZShkaXNwbGF5TmFtZS5pc29s
YXRlZENvcHkoKSkKICAgICAsIG1fZXN0aW1hdGVkU2l6ZShlc3RpbWF0ZWRTaXplKQogICAgICwg
bV9ndWlkKDApCiAgICAgLCBtX29wZW5lZChmYWxzZSkKQEAgLTI2NCw3ICsyNjQsNyBAQCBib29s
IEFic3RyYWN0RGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyCiAgICAgICAgIEd1aWRWZXJzaW9u
TWFwOjppdGVyYXRvciBlbnRyeSA9IGd1aWRUb1ZlcnNpb25NYXAoKS5maW5kKG1fZ3VpZCk7CiAg
ICAgICAgIGlmIChlbnRyeSAhPSBndWlkVG9WZXJzaW9uTWFwKCkuZW5kKCkpIHsKICAgICAgICAg
ICAgIC8vIE1hcCBudWxsIHN0cmluZyB0byBlbXB0eSBzdHJpbmcgKHNlZSB1cGRhdGVHdWlkVmVy
c2lvbk1hcCgpKS4KLSAgICAgICAgICAgIGN1cnJlbnRWZXJzaW9uID0gZW50cnktPnNlY29uZC5p
c051bGwoKSA/IFN0cmluZygiIikgOiBlbnRyeS0+c2Vjb25kLnRocmVhZHNhZmVDb3B5KCk7Cisg
ICAgICAgICAgICBjdXJyZW50VmVyc2lvbiA9IGVudHJ5LT5zZWNvbmQuaXNOdWxsKCkgPyBTdHJp
bmcoIiIpIDogZW50cnktPnNlY29uZC5pc29sYXRlZENvcHkoKTsKICAgICAgICAgICAgIExPRyhT
dG9yYWdlQVBJLCAiQ3VycmVudCBjYWNoZWQgdmVyc2lvbiBmb3IgZ3VpZCAlaSBpcyAlcyIsIG1f
Z3VpZCwgY3VycmVudFZlcnNpb24uYXNjaWkoKS5kYXRhKCkpOwogCiAjaWYgUExBVEZPUk0oQ0hS
T01JVU0pCkBAIC0zNzEsMTMgKzM3MSwxMyBAQCBTZWN1cml0eU9yaWdpbiogQWJzdHJhY3REYXRh
YmFzZTo6c2VjdXJpCiBTdHJpbmcgQWJzdHJhY3REYXRhYmFzZTo6c3RyaW5nSWRlbnRpZmllcigp
IGNvbnN0CiB7CiAgICAgLy8gUmV0dXJuIGEgZGVlcCBjb3B5IGZvciByZWYgY291bnRpbmcgdGhy
ZWFkIHNhZmV0eQotICAgIHJldHVybiBtX25hbWUudGhyZWFkc2FmZUNvcHkoKTsKKyAgICByZXR1
cm4gbV9uYW1lLmlzb2xhdGVkQ29weSgpOwogfQogCiBTdHJpbmcgQWJzdHJhY3REYXRhYmFzZTo6
ZGlzcGxheU5hbWUoKSBjb25zdAogewogICAgIC8vIFJldHVybiBhIGRlZXAgY29weSBmb3IgcmVm
IGNvdW50aW5nIHRocmVhZCBzYWZldHkKLSAgICByZXR1cm4gbV9kaXNwbGF5TmFtZS50aHJlYWRz
YWZlQ29weSgpOworICAgIHJldHVybiBtX2Rpc3BsYXlOYW1lLmlzb2xhdGVkQ29weSgpOwogfQog
CiB1bnNpZ25lZCBsb25nIEFic3RyYWN0RGF0YWJhc2U6OmVzdGltYXRlZFNpemUoKSBjb25zdApA
QCAtMzg4LDcgKzM4OCw3IEBAIHVuc2lnbmVkIGxvbmcgQWJzdHJhY3REYXRhYmFzZTo6ZXN0aW1h
dGUKIFN0cmluZyBBYnN0cmFjdERhdGFiYXNlOjpmaWxlTmFtZSgpIGNvbnN0CiB7CiAgICAgLy8g
UmV0dXJuIGEgZGVlcCBjb3B5IGZvciByZWYgY291bnRpbmcgdGhyZWFkIHNhZmV0eQotICAgIHJl
dHVybiBtX2ZpbGVuYW1lLnRocmVhZHNhZmVDb3B5KCk7CisgICAgcmV0dXJuIG1fZmlsZW5hbWUu
aXNvbGF0ZWRDb3B5KCk7CiB9CiAKIGJvb2wgQWJzdHJhY3REYXRhYmFzZTo6Z2V0VmVyc2lvbkZy
b21EYXRhYmFzZShTdHJpbmcmIHZlcnNpb24sIGJvb2wgc2hvdWxkQ2FjaGVWZXJzaW9uKQpAQCAt
NDMxLDEzICs0MzEsMTMgQEAgYm9vbCBBYnN0cmFjdERhdGFiYXNlOjpzZXRWZXJzaW9uSW5EYXRh
YgogCiB2b2lkIEFic3RyYWN0RGF0YWJhc2U6OnNldEV4cGVjdGVkVmVyc2lvbihjb25zdCBTdHJp
bmcmIHZlcnNpb24pCiB7Ci0gICAgbV9leHBlY3RlZFZlcnNpb24gPSB2ZXJzaW9uLnRocmVhZHNh
ZmVDb3B5KCk7CisgICAgbV9leHBlY3RlZFZlcnNpb24gPSB2ZXJzaW9uLmlzb2xhdGVkQ29weSgp
OwogfQogCiBTdHJpbmcgQWJzdHJhY3REYXRhYmFzZTo6Z2V0Q2FjaGVkVmVyc2lvbigpIGNvbnN0
CiB7CiAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsKLSAgICByZXR1cm4gZ3Vp
ZFRvVmVyc2lvbk1hcCgpLmdldChtX2d1aWQpLnRocmVhZHNhZmVDb3B5KCk7CisgICAgcmV0dXJu
IGd1aWRUb1ZlcnNpb25NYXAoKS5nZXQobV9ndWlkKS5pc29sYXRlZENvcHkoKTsKIH0KIAogdm9p
ZCBBYnN0cmFjdERhdGFiYXNlOjpzZXRDYWNoZWRWZXJzaW9uKGNvbnN0IFN0cmluZyYgYWN0dWFs
VmVyc2lvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvQ2hhbmdlVmVyc2lvbldyYXBw
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvQ2hhbmdlVmVyc2lv
bldyYXBwZXIuY3BwCShyZXZpc2lvbiA5ODIwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
Q2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw4ICszOCw4IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENoYW5nZVZlcnNpb25XcmFwcGVyOjpDaGFuZ2VWZXJz
aW9uV3JhcHBlcihjb25zdCBTdHJpbmcmIG9sZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgbmV3VmVy
c2lvbikKLSAgICA6IG1fb2xkVmVyc2lvbihvbGRWZXJzaW9uLmNyb3NzVGhyZWFkU3RyaW5nKCkp
Ci0gICAgLCBtX25ld1ZlcnNpb24obmV3VmVyc2lvbi5jcm9zc1RocmVhZFN0cmluZygpKQorICAg
IDogbV9vbGRWZXJzaW9uKG9sZFZlcnNpb24uaXNvbGF0ZWRDb3B5KCkpCisgICAgLCBtX25ld1Zl
cnNpb24obmV3VmVyc2lvbi5pc29sYXRlZENvcHkoKSkKIHsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDk4MjAxKQorKysgU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9EYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw3ICsxMjQsNyBAQCBE
YXRhYmFzZTo6RGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4CiAgICAgLCBtX2lzVHJhbnNh
Y3Rpb25RdWV1ZUVuYWJsZWQodHJ1ZSkKICAgICAsIG1fZGVsZXRlZChmYWxzZSkKIHsKLSAgICBt
X2RhdGFiYXNlVGhyZWFkU2VjdXJpdHlPcmlnaW4gPSBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9y
aWdpbi0+dGhyZWFkc2FmZUNvcHkoKTsKKyAgICBtX2RhdGFiYXNlVGhyZWFkU2VjdXJpdHlPcmln
aW4gPSBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbi0+aXNvbGF0ZWRDb3B5KCk7CiAKICAg
ICBTY3JpcHRDb250cm9sbGVyOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CiAgICAgQVNTRVJUKG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGF0YWJhc2VUaHJlYWQoKSk7CkBAIC0zODgsNyArMzg4
LDcgQEAgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvciogRGF0YWJhc2U6OnRyYQogCiBWZWN0b3I8
U3RyaW5nPiBEYXRhYmFzZTo6dGFibGVOYW1lcygpCiB7Ci0gICAgLy8gRklYTUU6IE5vdCB1c2lu
ZyB0aHJlYWRzYWZlQ29weSBvbiB0aGVzZSBzdHJpbmdzIGxvb2tzIG9rIHNpbmNlIHRocmVhZHMg
dGFrZSBzdHJpY3QgdHVybnMKKyAgICAvLyBGSVhNRTogTm90IHVzaW5nIGlzb2xhdGVkQ29weSBv
biB0aGVzZSBzdHJpbmdzIGxvb2tzIG9rIHNpbmNlIHRocmVhZHMgdGFrZSBzdHJpY3QgdHVybnMK
ICAgICAvLyBpbiBkZWFsaW5nIHdpdGggdGhlbS4gSG93ZXZlciwgaWYgdGhlIGNvZGUgY2hhbmdl
cywgdGhpcyBtYXkgbm90IGJlIHRydWUgYW55bW9yZS4KICAgICBWZWN0b3I8U3RyaW5nPiByZXN1
bHQ7CiAgICAgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyIHN5bmNocm9uaXplcjsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5jcHAJKHJldmlzaW9uIDk4MjAx
KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05MiwxNyArOTIsMTcgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnNldERhdGFi
YXNlRGlyZWN0bwogewogICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3Vh
cmQpOwogICAgIEFTU0VSVCghbV9kYXRhYmFzZS5pc09wZW4oKSk7Ci0gICAgbV9kYXRhYmFzZURp
cmVjdG9yeVBhdGggPSBwYXRoLnRocmVhZHNhZmVDb3B5KCk7CisgICAgbV9kYXRhYmFzZURpcmVj
dG9yeVBhdGggPSBwYXRoLmlzb2xhdGVkQ29weSgpOwogfQogCiBTdHJpbmcgRGF0YWJhc2VUcmFj
a2VyOjpkYXRhYmFzZURpcmVjdG9yeVBhdGgoKSBjb25zdAogewotICAgIHJldHVybiBtX2RhdGFi
YXNlRGlyZWN0b3J5UGF0aC50aHJlYWRzYWZlQ29weSgpOworICAgIHJldHVybiBtX2RhdGFiYXNl
RGlyZWN0b3J5UGF0aC5pc29sYXRlZENvcHkoKTsKIH0KIAogU3RyaW5nIERhdGFiYXNlVHJhY2tl
cjo6dHJhY2tlckRhdGFiYXNlUGF0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFNRTGl0ZUZpbGVT
eXN0ZW06OmFwcGVuZERhdGFiYXNlRmlsZU5hbWVUb1BhdGgobV9kYXRhYmFzZURpcmVjdG9yeVBh
dGgudGhyZWFkc2FmZUNvcHkoKSwgIkRhdGFiYXNlcy5kYiIpOworICAgIHJldHVybiBTUUxpdGVG
aWxlU3lzdGVtOjphcHBlbmREYXRhYmFzZUZpbGVOYW1lVG9QYXRoKG1fZGF0YWJhc2VEaXJlY3Rv
cnlQYXRoLmlzb2xhdGVkQ29weSgpLCAiRGF0YWJhc2VzLmRiIik7CiB9CiAKIHZvaWQgRGF0YWJh
c2VUcmFja2VyOjpvcGVuVHJhY2tlckRhdGFiYXNlKGJvb2wgY3JlYXRlSWZEb2VzTm90RXhpc3Qp
CkBAIC0xNzEsNyArMTcxLDcgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmNhbkVzdGFibGlzaERh
dGFiYQogICAgICAgICAvLyBHaXZlIHRoZSBjaHJvbWUgY2xpZW50IGEgY2hhbmNlIHRvIGluY3Jl
YXNlIHRoZSBxdW90YS4KICAgICAgICAgLy8gVGVtcG9yYXJpbHkgbWFrZSB0aGUgZGV0YWlscyBv
ZiB0aGUgcHJvcG9zZWQgZGF0YWJhc2UgYXZhaWxhYmxlLCBzbyB0aGUgY2xpZW50IGNhbiBnZXQg
YXQgdGhlbS4KICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZWFsbHkganVzdCBwYXNzIHRo
ZSBkZXRhaWxzIGludG8gdGhpcyBjYWxsLCByYXRoZXIgdGhhbiB1c2luZyBtX3Byb3Bvc2VkRGF0
YWJhc2VzLgotICAgICAgICBkZXRhaWxzID0gUHJvcG9zZWREYXRhYmFzZShvcmlnaW4tPnRocmVh
ZHNhZmVDb3B5KCksIERhdGFiYXNlRGV0YWlscyhuYW1lLnRocmVhZHNhZmVDb3B5KCksIGRpc3Bs
YXlOYW1lLnRocmVhZHNhZmVDb3B5KCksIGVzdGltYXRlZFNpemUsIDApKTsKKyAgICAgICAgZGV0
YWlscyA9IFByb3Bvc2VkRGF0YWJhc2Uob3JpZ2luLT5pc29sYXRlZENvcHkoKSwgRGF0YWJhc2VE
ZXRhaWxzKG5hbWUuaXNvbGF0ZWRDb3B5KCksIGRpc3BsYXlOYW1lLmlzb2xhdGVkQ29weSgpLCBl
c3RpbWF0ZWRTaXplLCAwKSk7CiAgICAgICAgIG1fcHJvcG9zZWREYXRhYmFzZXMuYWRkKCZkZXRh
aWxzKTsKICAgICB9CiAgICAgLy8gRHJvcCBhbGwgbG9ja3MgYmVmb3JlIGNhbGxpbmcgb3V0OyB3
ZSBkb24ndCBrbm93IHdoYXQgdGhleSdsbCBkby4KQEAgLTI2Nyw3ICsyNjcsNyBAQCB2b2lkIERh
dGFiYXNlVHJhY2tlcjo6aW50ZXJydXB0QWxsRGF0YWJhCiAKIFN0cmluZyBEYXRhYmFzZVRyYWNr
ZXI6Om9yaWdpblBhdGgoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikgY29uc3QKIHsKLSAgICByZXR1
cm4gU1FMaXRlRmlsZVN5c3RlbTo6YXBwZW5kRGF0YWJhc2VGaWxlTmFtZVRvUGF0aChtX2RhdGFi
YXNlRGlyZWN0b3J5UGF0aC50aHJlYWRzYWZlQ29weSgpLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRp
ZmllcigpKTsKKyAgICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6YXBwZW5kRGF0YWJhc2VGaWxl
TmFtZVRvUGF0aChtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aC5pc29sYXRlZENvcHkoKSwgb3JpZ2lu
LT5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CiB9CiAKIFN0cmluZyBEYXRhYmFzZVRyYWNrZXI6OmZ1
bGxQYXRoRm9yRGF0YWJhc2VOb0xvY2soU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBib29sIGNyZWF0ZUlmTm90RXhpc3RzKQpAQCAtMzI4LDcgKzMyOCw3IEBAIFN0
cmluZyBEYXRhYmFzZVRyYWNrZXI6OmZ1bGxQYXRoRm9yRGF0YWIKICAgICBNdXRleExvY2tlciBs
b2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKICAgICBMb2NrZXI8T3JpZ2luUXVvdGFNYW5h
Z2VyPiBxdW90YU1hbmFnZXJMb2NrZXIob3JpZ2luUXVvdGFNYW5hZ2VyKCkpOwogCi0gICAgcmV0
dXJuIGZ1bGxQYXRoRm9yRGF0YWJhc2VOb0xvY2sob3JpZ2luLCBuYW1lLCBjcmVhdGVJZk5vdEV4
aXN0cykudGhyZWFkc2FmZUNvcHkoKTsKKyAgICByZXR1cm4gZnVsbFBhdGhGb3JEYXRhYmFzZU5v
TG9jayhvcmlnaW4sIG5hbWUsIGNyZWF0ZUlmTm90RXhpc3RzKS5pc29sYXRlZENvcHkoKTsKIH0K
IAogdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnBvcHVsYXRlT3JpZ2lucygpCkBAIC0zNTMsNyArMzUz
LDcgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnBvcHVsYXRlT3JpZ2lucygpCiAgICAgaW50IHJl
c3VsdDsKICAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNRTFJlc3Vs
dFJvdykgewogICAgICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbiA9IFNlY3VyaXR5
T3JpZ2luOjpjcmVhdGVGcm9tRGF0YWJhc2VJZGVudGlmaWVyKHN0YXRlbWVudC5nZXRDb2x1bW5U
ZXh0KDApKTsKLSAgICAgICAgbV9xdW90YU1hcC0+c2V0KG9yaWdpbi5nZXQoKS0+dGhyZWFkc2Fm
ZUNvcHkoKSwgc3RhdGVtZW50LmdldENvbHVtbkludDY0KDEpKTsKKyAgICAgICAgbV9xdW90YU1h
cC0+c2V0KG9yaWdpbi5nZXQoKS0+aXNvbGF0ZWRDb3B5KCksIHN0YXRlbWVudC5nZXRDb2x1bW5J
bnQ2NCgxKSk7CiAgICAgfQogCiAgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lKQpAQCAt
NDAzLDcgKzQwMyw3IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpkYXRhYmFzZU5hbWVzRm9yT3IK
ICAgICB9CiAKICAgICBmb3IgKFZlY3RvcjxTdHJpbmc+OjppdGVyYXRvciBpdGVyID0gdGVtcC5i
ZWdpbigpOyBpdGVyICE9IHRlbXAuZW5kKCk7ICsraXRlcikKLSAgICAgICAgcmVzdWx0VmVjdG9y
LmFwcGVuZChpdGVyLT50aHJlYWRzYWZlQ29weSgpKTsKKyAgICAgICAgcmVzdWx0VmVjdG9yLmFw
cGVuZChpdGVyLT5pc29sYXRlZENvcHkoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTUy
MywxMyArNTIzLDEzIEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjphZGRPcGVuRGF0YWJhc2UoQWIK
ICAgICAgICAgRGF0YWJhc2VOYW1lTWFwKiBuYW1lTWFwID0gbV9vcGVuRGF0YWJhc2VNYXAtPmdl
dChkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKSk7CiAgICAgICAgIGlmICghbmFtZU1hcCkgewog
ICAgICAgICAgICAgbmFtZU1hcCA9IG5ldyBEYXRhYmFzZU5hbWVNYXA7Ci0gICAgICAgICAgICBt
X29wZW5EYXRhYmFzZU1hcC0+c2V0KGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigpLT50aHJlYWRz
YWZlQ29weSgpLCBuYW1lTWFwKTsKKyAgICAgICAgICAgIG1fb3BlbkRhdGFiYXNlTWFwLT5zZXQo
ZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCktPmlzb2xhdGVkQ29weSgpLCBuYW1lTWFwKTsKICAg
ICAgICAgfQogCiAgICAgICAgIERhdGFiYXNlU2V0KiBkYXRhYmFzZVNldCA9IG5hbWVNYXAtPmdl
dChuYW1lKTsKICAgICAgICAgaWYgKCFkYXRhYmFzZVNldCkgewogICAgICAgICAgICAgZGF0YWJh
c2VTZXQgPSBuZXcgRGF0YWJhc2VTZXQ7Ci0gICAgICAgICAgICBuYW1lTWFwLT5zZXQobmFtZS50
aHJlYWRzYWZlQ29weSgpLCBkYXRhYmFzZVNldCk7CisgICAgICAgICAgICBuYW1lTWFwLT5zZXQo
bmFtZS5pc29sYXRlZENvcHkoKSwgZGF0YWJhc2VTZXQpOwogICAgICAgICB9CiAKICAgICAgICAg
ZGF0YWJhc2VTZXQtPmFkZChkYXRhYmFzZSk7CkBAIC02OTUsNyArNjk1LDcgQEAgdm9pZCBEYXRh
YmFzZVRyYWNrZXI6OnNldFF1b3RhKFNlY3VyaXR5TwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBJ
cyBpdCByZWFsbHkgT0sgdG8gdXBkYXRlIHRoZSBxdW90YSBpbiBtZW1vcnkgaWYgd2UgZmFpbGVk
IHRvIHVwZGF0ZSBpdCBvbiBkaXNrPwotICAgIG1fcXVvdGFNYXAtPnNldChvcmlnaW4tPnRocmVh
ZHNhZmVDb3B5KCksIHF1b3RhKTsKKyAgICBtX3F1b3RhTWFwLT5zZXQob3JpZ2luLT5pc29sYXRl
ZENvcHkoKSwgcXVvdGEpOwogCiAgICAgaWYgKG1fY2xpZW50KQogICAgICAgICBtX2NsaWVudC0+
ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4ob3JpZ2luKTsKQEAgLTg0MiwxMCArODQyLDEwIEBAIHZv
aWQgRGF0YWJhc2VUcmFja2VyOjpyZWNvcmRDcmVhdGluZ0RhdGEKICAgICBOYW1lQ291bnRNYXAq
IG5hbWVNYXAgPSBtX2JlaW5nQ3JlYXRlZC5nZXQob3JpZ2luKTsKICAgICBpZiAoIW5hbWVNYXAp
IHsKICAgICAgICAgbmFtZU1hcCA9IG5ldyBOYW1lQ291bnRNYXAoKTsKLSAgICAgICAgbV9iZWlu
Z0NyZWF0ZWQuc2V0KG9yaWdpbi0+dGhyZWFkc2FmZUNvcHkoKSwgbmFtZU1hcCk7CisgICAgICAg
IG1fYmVpbmdDcmVhdGVkLnNldChvcmlnaW4tPmlzb2xhdGVkQ29weSgpLCBuYW1lTWFwKTsKICAg
ICB9CiAgICAgbG9uZyBjb3VudCA9IG5hbWVNYXAtPmdldChuYW1lKTsKLSAgICBuYW1lTWFwLT5z
ZXQobmFtZS50aHJlYWRzYWZlQ29weSgpLCBjb3VudCArIDEpOworICAgIG5hbWVNYXAtPnNldChu
YW1lLmlzb2xhdGVkQ29weSgpLCBjb3VudCArIDEpOwogfQogCiB2b2lkIERhdGFiYXNlVHJhY2tl
cjo6ZG9uZUNyZWF0aW5nRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4gKm9yaWdpbiwgY29uc3QgU3Ry
aW5nJiBuYW1lKQpAQCAtODg3LDEwICs4ODcsMTAgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnJl
Y29yZERlbGV0aW5nRGF0YQogICAgIE5hbWVTZXQqIG5hbWVTZXQgPSBtX2JlaW5nRGVsZXRlZC5n
ZXQob3JpZ2luKTsKICAgICBpZiAoIW5hbWVTZXQpIHsKICAgICAgICAgbmFtZVNldCA9IG5ldyBO
YW1lU2V0KCk7Ci0gICAgICAgIG1fYmVpbmdEZWxldGVkLnNldChvcmlnaW4tPnRocmVhZHNhZmVD
b3B5KCksIG5hbWVTZXQpOworICAgICAgICBtX2JlaW5nRGVsZXRlZC5zZXQob3JpZ2luLT5pc29s
YXRlZENvcHkoKSwgbmFtZVNldCk7CiAgICAgfQogICAgIEFTU0VSVCghbmFtZVNldC0+Y29udGFp
bnMobmFtZSkpOwotICAgIG5hbWVTZXQtPmFkZChuYW1lLnRocmVhZHNhZmVDb3B5KCkpOworICAg
IG5hbWVTZXQtPmFkZChuYW1lLmlzb2xhdGVkQ29weSgpKTsKIH0KIAogdm9pZCBEYXRhYmFzZVRy
YWNrZXI6OmRvbmVEZWxldGluZ0RhdGFiYXNlKFNlY3VyaXR5T3JpZ2luICpvcmlnaW4sIGNvbnN0
IFN0cmluZyYgbmFtZSkKQEAgLTkzMiw3ICs5MzIsNyBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6
cmVjb3JkRGVsZXRpbmdPcmlnCiB7CiAgICAgQVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9j
aygpKTsKICAgICBBU1NFUlQoIWRlbGV0aW5nT3JpZ2luKG9yaWdpbikpOwotICAgIG1fb3JpZ2lu
c0JlaW5nRGVsZXRlZC5hZGQob3JpZ2luLT50aHJlYWRzYWZlQ29weSgpKTsKKyAgICBtX29yaWdp
bnNCZWluZ0RlbGV0ZWQuYWRkKG9yaWdpbi0+aXNvbGF0ZWRDb3B5KCkpOwogfQogCiB2b2lkIERh
dGFiYXNlVHJhY2tlcjo6ZG9uZURlbGV0aW5nT3JpZ2luKFNlY3VyaXR5T3JpZ2luICpvcmlnaW4p
CkBAIC0xMDY1LDcgKzEwNjUsNyBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6c2NoZWR1bGVOb3Rp
ZnlEYXRhCiB7CiAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG5vdGlmaWNhdGlvbk11dGV4KCkpOwog
Ci0gICAgbm90aWZpY2F0aW9uUXVldWUoKS5hcHBlbmQocGFpcjxSZWZQdHI8U2VjdXJpdHlPcmln
aW4+LCBTdHJpbmc+KG9yaWdpbi0+dGhyZWFkc2FmZUNvcHkoKSwgbmFtZS5jcm9zc1RocmVhZFN0
cmluZygpKSk7CisgICAgbm90aWZpY2F0aW9uUXVldWUoKS5hcHBlbmQocGFpcjxSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+LCBTdHJpbmc+KG9yaWdpbi0+aXNvbGF0ZWRDb3B5KCksIG5hbWUuaXNvbGF0
ZWRDb3B5KCkpKTsKICAgICBzY2hlZHVsZUZvck5vdGlmaWNhdGlvbigpOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL09yaWdpblF1b3RhTWFuYWdlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9PcmlnaW5RdW90YU1hbmFnZXIuY3BwCShyZXZpc2lv
biA5ODIwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCB2b2lkIE9yaWdpblF1b3RhTWFuYWdl
cjo6dHJhY2tPcmlnaW4oUGFzCiAgICAgQVNTRVJUKG1fdXNhZ2VSZWNvcmRHdWFyZExvY2tlZCk7
CiAgICAgQVNTRVJUKCFtX3VzYWdlTWFwLmNvbnRhaW5zKG9yaWdpbi5nZXQoKSkpOwogCi0gICAg
bV91c2FnZU1hcC5zZXQob3JpZ2luLT50aHJlYWRzYWZlQ29weSgpLCBuZXcgT3JpZ2luVXNhZ2VS
ZWNvcmQpOworICAgIG1fdXNhZ2VNYXAuc2V0KG9yaWdpbi0+aXNvbGF0ZWRDb3B5KCksIG5ldyBP
cmlnaW5Vc2FnZVJlY29yZCk7CiB9CiAKIGJvb2wgT3JpZ2luUXVvdGFNYW5hZ2VyOjp0cmFja3NP
cmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikgY29uc3QKQEAgLTkxLDcgKzkxLDcgQEAgdm9p
ZCBPcmlnaW5RdW90YU1hbmFnZXI6OmFkZERhdGFiYXNlKFNlYwogICAgIE9yaWdpblVzYWdlUmVj
b3JkKiB1c2FnZVJlY29yZCA9IG1fdXNhZ2VNYXAuZ2V0KG9yaWdpbik7CiAgICAgQVNTRVJUKHVz
YWdlUmVjb3JkKTsKIAotICAgIHVzYWdlUmVjb3JkLT5hZGREYXRhYmFzZShkYXRhYmFzZUlkZW50
aWZpZXIudGhyZWFkc2FmZUNvcHkoKSwgZnVsbFBhdGgudGhyZWFkc2FmZUNvcHkoKSk7CisgICAg
dXNhZ2VSZWNvcmQtPmFkZERhdGFiYXNlKGRhdGFiYXNlSWRlbnRpZmllci5pc29sYXRlZENvcHko
KSwgZnVsbFBhdGguaXNvbGF0ZWRDb3B5KCkpOwogfQogCiB2b2lkIE9yaWdpblF1b3RhTWFuYWdl
cjo6cmVtb3ZlRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBk
YXRhYmFzZUlkZW50aWZpZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTEVycm9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxFcnJvci5oCShyZXZp
c2lvbiA5ODIwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMRXJyb3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
U1FMRXJyb3I+IGNyZWF0ZSh1bnNpZ25lZCBjb2RlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIHsg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTUUxFcnJvcihjb2RlLCBtZXNzYWdlKSk7IH0KIAogICAgIHVu
c2lnbmVkIGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGU7IH0KLSAgICBTdHJpbmcgbWVzc2Fn
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVzc2FnZS50aHJlYWRzYWZlQ29weSgpOyB9CisgICAgU3Ry
aW5nIG1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX21lc3NhZ2UuaXNvbGF0ZWRDb3B5KCk7IH0K
IAogICAgIGVudW0gU1FMRXJyb3JDb2RlIHsKICAgICAgICAgVU5LTk9XTl9FUlIgPSAwLApAQCAt
NTUsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAgfTsKIAogcHJpdmF0ZToKLSAgICBTUUxFcnJvcih1
bnNpZ25lZCBjb2RlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIDogbV9jb2RlKGNvZGUpLCBtX21l
c3NhZ2UobWVzc2FnZS50aHJlYWRzYWZlQ29weSgpKSB7IH0KKyAgICBTUUxFcnJvcih1bnNpZ25l
ZCBjb2RlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIDogbV9jb2RlKGNvZGUpLCBtX21lc3NhZ2Uo
bWVzc2FnZS5pc29sYXRlZENvcHkoKSkgeyB9CiAgICAgdW5zaWduZWQgbV9jb2RlOwogICAgIFN0
cmluZyBtX21lc3NhZ2U7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxTdGF0
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVt
ZW50LmNwcAkocmV2aXNpb24gOTgyMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFN0
YXRlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgUGFzc1JlZlB0cjxT
UUxTdGF0ZW1lbnQ+IFNRTFN0YXRlbWVudDo6YwogfQogCiBTUUxTdGF0ZW1lbnQ6OlNRTFN0YXRl
bWVudChEYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBjb25zdCBW
ZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJh
Y2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IGVycm9y
Q2FsbGJhY2ssIGludCBwZXJtaXNzaW9ucykKLSAgICA6IG1fc3RhdGVtZW50KHN0YXRlbWVudC5j
cm9zc1RocmVhZFN0cmluZygpKQorICAgIDogbV9zdGF0ZW1lbnQoc3RhdGVtZW50Lmlzb2xhdGVk
Q29weSgpKQogICAgICwgbV9hcmd1bWVudHMoYXJndW1lbnRzKQogICAgICwgbV9zdGF0ZW1lbnRD
YWxsYmFja1dyYXBwZXIoY2FsbGJhY2ssIGRhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkpCiAgICAgLCBtX3N0YXRlbWVudEVycm9yQ2FsbGJhY2tXcmFwcGVyKGVycm9yQ2FsbGJhY2ss
IGRhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCShyZXZpc2lvbiA5ODIwMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTYsNyArNTYsNyBAQCBpbmxpbmUgU3RvcmFnZUFyZWFTeW5jOjpTdG9yYWdlQXJlYVN5bmMoCiAg
ICAgLCBtX2ZpbmFsU3luY1NjaGVkdWxlZChmYWxzZSkKICAgICAsIG1fc3RvcmFnZUFyZWEoc3Rv
cmFnZUFyZWEpCiAgICAgLCBtX3N5bmNNYW5hZ2VyKHN0b3JhZ2VTeW5jTWFuYWdlcikKLSAgICAs
IG1fZGF0YWJhc2VJZGVudGlmaWVyKGRhdGFiYXNlSWRlbnRpZmllci5jcm9zc1RocmVhZFN0cmlu
ZygpKQorICAgICwgbV9kYXRhYmFzZUlkZW50aWZpZXIoZGF0YWJhc2VJZGVudGlmaWVyLmlzb2xh
dGVkQ29weSgpKQogICAgICwgbV9jbGVhckl0ZW1zV2hpbGVTeW5jaW5nKGZhbHNlKQogICAgICwg
bV9zeW5jU2NoZWR1bGVkKGZhbHNlKQogICAgICwgbV9zeW5jSW5Qcm9ncmVzcyhmYWxzZSkKQEAg
LTE4OCw3ICsxODgsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6c3luY1RpbWVyRmlyZWQoVGlt
CiAgICAgICAgICAgICAgICAgcGFydGlhbFN5bmMgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9pdGVtc1BlbmRpbmdTeW5jLnNldChj
aGFuZ2VkX2l0LT5maXJzdC5jcm9zc1RocmVhZFN0cmluZygpLCBjaGFuZ2VkX2l0LT5zZWNvbmQu
Y3Jvc3NUaHJlYWRTdHJpbmcoKSk7CisgICAgICAgICAgICBtX2l0ZW1zUGVuZGluZ1N5bmMuc2V0
KGNoYW5nZWRfaXQtPmZpcnN0Lmlzb2xhdGVkQ29weSgpLCBjaGFuZ2VkX2l0LT5zZWNvbmQuaXNv
bGF0ZWRDb3B5KCkpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHBhcnRpYWxTeW5jKSB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5jcHAJKHJldmlzaW9uIDk4MjAxKQor
KysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTcxLDcgKzE3MSw3IEBAIHZvaWQgU3RvcmFnZU1hcDo6aW1wb3J0SXRlbShjb25zdCBTdHJp
bmcKIHsKICAgICAvLyBCZSBzdXJlIHRvIGNvcHkgdGhlIGtleXMvdmFsdWVzIGFzIGl0ZW1zIGlt
cG9ydGVkIG9uIGEgYmFja2dyb3VuZCB0aHJlYWQgYXJlIGRlc3RpbmVkCiAgICAgLy8gdG8gY3Jv
c3MgYSB0aHJlYWQgYm91bmRhcnkKLSAgICBwYWlyPEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpp
dGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gbV9tYXAuYWRkKGtleS50aHJlYWRzYWZlQ29weSgpLCB2
YWx1ZS50aHJlYWRzYWZlQ29weSgpKTsKKyAgICBwYWlyPEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
OjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gbV9tYXAuYWRkKGtleS5pc29sYXRlZENvcHkoKSwg
dmFsdWUuaXNvbGF0ZWRDb3B5KCkpOwogICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQu
c2Vjb25kKTsgIC8vIFRydWUgaWYgdGhlIGtleSBkaWRuJ3QgZXhpc3QgcHJldmlvdXNseS4KIAog
ICAgIEFTU0VSVChtX2N1cnJlbnRMZW5ndGggKyBrZXkubGVuZ3RoKCkgPj0gbV9jdXJyZW50TGVu
Z3RoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFj
ZUltcGwuY3BwCShyZXZpc2lvbiA5ODIwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZU5hbWVzcGFjZUltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIFBh
c3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gU3RvcmFnZU5hbWUKIAogU3RvcmFnZU5hbWVzcGFj
ZUltcGw6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsKFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlLCBjb25z
dCBTdHJpbmcmIHBhdGgsIHVuc2lnbmVkIHF1b3RhKQogICAgIDogbV9zdG9yYWdlVHlwZShzdG9y
YWdlVHlwZSkKLSAgICAsIG1fcGF0aChwYXRoLmNyb3NzVGhyZWFkU3RyaW5nKCkpCisgICAgLCBt
X3BhdGgocGF0aC5pc29sYXRlZENvcHkoKSkKICAgICAsIG1fc3luY01hbmFnZXIoMCkKICAgICAs
IG1fcXVvdGEocXVvdGEpCiAgICAgLCBtX2lzU2h1dGRvd24oZmFsc2UpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuY3BwCShyZXZpc2lvbiA5ODIw
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdl
cj4gU3RvcmFnZVN5CiAKIFN0b3JhZ2VTeW5jTWFuYWdlcjo6U3RvcmFnZVN5bmNNYW5hZ2VyKGNv
bnN0IFN0cmluZyYgcGF0aCkKICAgICA6IG1fdGhyZWFkKExvY2FsU3RvcmFnZVRocmVhZDo6Y3Jl
YXRlKCkpCi0gICAgLCBtX3BhdGgocGF0aC5jcm9zc1RocmVhZFN0cmluZygpKQorICAgICwgbV9w
YXRoKHBhdGguaXNvbGF0ZWRDb3B5KCkpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
ICAgICBBU1NFUlQoIW1fcGF0aC5pc0VtcHR5KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9TdG9yYWdlVHJhY2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9TdG9yYWdlVHJhY2tlci5jcHAJKHJldmlzaW9uIDk4MjAxKQorKysgU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1
LDcgQEAgU3RvcmFnZVRyYWNrZXImIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKAogfQogCiBTdG9y
YWdlVHJhY2tlcjo6U3RvcmFnZVRyYWNrZXIoY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0aCkKLSAg
ICA6IG1fc3RvcmFnZURpcmVjdG9yeVBhdGgoc3RvcmFnZVBhdGgudGhyZWFkc2FmZUNvcHkoKSkK
KyAgICA6IG1fc3RvcmFnZURpcmVjdG9yeVBhdGgoc3RvcmFnZVBhdGguaXNvbGF0ZWRDb3B5KCkp
CiAgICAgLCBtX2NsaWVudCgwKQogICAgICwgbV90aHJlYWQoTG9jYWxTdG9yYWdlVGhyZWFkOjpj
cmVhdGUoKSkKICAgICAsIG1faXNBY3RpdmUoZmFsc2UpCkBAIC0xNjcsNyArMTY3LDcgQEAgdm9p
ZCBTdG9yYWdlVHJhY2tlcjo6c3luY0ltcG9ydE9yaWdpbklkZQogICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tPcmlnaW5zKG1fb3JpZ2luU2V0R3VhcmQpOwog
ICAgICAgICAgICAgICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FM
UmVzdWx0Um93KQotICAgICAgICAgICAgICAgICAgICBtX29yaWdpblNldC5hZGQoc3RhdGVtZW50
LmdldENvbHVtblRleHQoMCkudGhyZWFkc2FmZUNvcHkoKSk7CisgICAgICAgICAgICAgICAgICAg
IG1fb3JpZ2luU2V0LmFkZChzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKS5pc29sYXRlZENvcHko
KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChyZXN1bHQg
IT0gU1FMUmVzdWx0RG9uZSkgewpAQCAtMjE0LDcgKzIxNCw3IEBAIHZvaWQgU3RvcmFnZVRyYWNr
ZXI6OnN5bmNGaWxlU3lzdGVtQW5kVHIKICAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX29yaWdp
blNldEd1YXJkKTsKICAgICAgICAgT3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX29y
aWdpblNldC5lbmQoKTsKICAgICAgICAgZm9yIChPcmlnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9vcmlnaW5TZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgb3Jp
Z2luU2V0Q29weS5hZGQoKCppdCkudGhyZWFkc2FmZUNvcHkoKSk7CisgICAgICAgICAgICBvcmln
aW5TZXRDb3B5LmFkZCgoKml0KS5pc29sYXRlZENvcHkoKSk7CiAgICAgfQogICAgIAogICAgIC8v
IEFkZCBtaXNzaW5nIFN0b3JhZ2VUcmFja2VyIHJlY29yZHMuCkBAIC0yMzYsNyArMjM2LDcgQEAg
dm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY0ZpbGVTeXN0ZW1BbmRUcgogICAgIE9yaWdpblNldDo6
Y29uc3RfaXRlcmF0b3Igc2V0RW5kID0gb3JpZ2luU2V0Q29weS5lbmQoKTsKICAgICBmb3IgKE9y
aWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBvcmlnaW5TZXRDb3B5LmJlZ2luKCk7IGl0ICE9
IHNldEVuZDsgKytpdCkgewogICAgICAgICBpZiAoIWZvdW5kT3JpZ2lucy5jb250YWlucygqaXQp
KSB7Ci0gICAgICAgICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gb3JpZ2luSWRlbnRpZmllciA9ICgq
aXQpLnRocmVhZHNhZmVDb3B5KCkuaW1wbCgpOworICAgICAgICAgICAgUmVmUHRyPFN0cmluZ0lt
cGw+IG9yaWdpbklkZW50aWZpZXIgPSAoKml0KS5pc29sYXRlZENvcHkoKS5pbXBsKCk7CiAgICAg
ICAgICAgICBjYWxsT25NYWluVGhyZWFkKGRlbGV0ZU9yaWdpbk9uTWFpblRocmVhZCwgb3JpZ2lu
SWRlbnRpZmllci5yZWxlYXNlKCkubGVha1JlZigpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI1
Niw3ICsyNTYsNyBAQCB2b2lkIFN0b3JhZ2VUcmFja2VyOjpzZXRPcmlnaW5EZXRhaWxzKGNvCiAg
ICAgICAgIG1fb3JpZ2luU2V0LmFkZChvcmlnaW5JZGVudGlmaWVyKTsKICAgICB9CiAKLSAgICBP
d25QdHI8TG9jYWxTdG9yYWdlVGFzaz4gdGFzayA9IExvY2FsU3RvcmFnZVRhc2s6OmNyZWF0ZVNl
dE9yaWdpbkRldGFpbHMob3JpZ2luSWRlbnRpZmllci50aHJlYWRzYWZlQ29weSgpLCBkYXRhYmFz
ZUZpbGUpOworICAgIE93blB0cjxMb2NhbFN0b3JhZ2VUYXNrPiB0YXNrID0gTG9jYWxTdG9yYWdl
VGFzazo6Y3JlYXRlU2V0T3JpZ2luRGV0YWlscyhvcmlnaW5JZGVudGlmaWVyLmlzb2xhdGVkQ29w
eSgpLCBkYXRhYmFzZUZpbGUpOwogCiAgICAgaWYgKGlzTWFpblRocmVhZCgpKSB7CiAgICAgICAg
IEFTU0VSVChtX3RocmVhZCk7CkBAIC01MDIsNyArNTAyLDcgQEAgdm9pZCBTdG9yYWdlVHJhY2tl
cjo6d2lsbERlbGV0ZUFsbE9yaWdpbgogCiAgICAgT3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX29yaWdpblNldC5lbmQoKTsKICAgICBmb3IgKE9yaWdpblNldDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX29yaWdpblNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIG1f
b3JpZ2luc0JlaW5nRGVsZXRlZC5hZGQoKCppdCkudGhyZWFkc2FmZUNvcHkoKSk7CisgICAgICAg
IG1fb3JpZ2luc0JlaW5nRGVsZXRlZC5hZGQoKCppdCkuaXNvbGF0ZWRDb3B5KCkpOwogfQogCiB2
b2lkIFN0b3JhZ2VUcmFja2VyOjp3aWxsRGVsZXRlT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2lu
SWRlbnRpZmllcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvRGVmYXVsdFNoYXJlZFdv
cmtlclJlcG9zaXRvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
RGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnkuY3BwCShyZXZpc2lvbiA5ODIwMSkKKysrIFNv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvRGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02OCwxMCArNjgsMTAgQEAgcHVibGljOgogICAgIEtVUkwgdXJsKCkg
Y29uc3QKICAgICB7CiAgICAgICAgIC8vIERvbid0IHVzZSBtX3VybC5jb3B5KCkgYmVjYXVzZSBp
dCBpc24ndCBhIHRocmVhZHNhZmUgbWV0aG9kLgotICAgICAgICByZXR1cm4gS1VSTChQYXJzZWRV
UkxTdHJpbmcsIG1fdXJsLnN0cmluZygpLnRocmVhZHNhZmVDb3B5KCkpOworICAgICAgICByZXR1
cm4gS1VSTChQYXJzZWRVUkxTdHJpbmcsIG1fdXJsLnN0cmluZygpLmlzb2xhdGVkQ29weSgpKTsK
ICAgICB9CiAKLSAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZS50aHJlYWRz
YWZlQ29weSgpOyB9CisgICAgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWUuaXNv
bGF0ZWRDb3B5KCk7IH0KICAgICBib29sIG1hdGNoZXMoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNz
UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4sIGNvbnN0IEtVUkwmIHVybFRvTWF0Y2gpIGNv
bnN0OwogCiAgICAgLy8gV29ya2VyTG9hZGVyUHJveHkKQEAgLTExMyw3ICsxMTMsNyBAQCBwcml2
YXRlOgogCiBTaGFyZWRXb3JrZXJQcm94eTo6U2hhcmVkV29ya2VyUHJveHkoY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBLVVJMJiB1cmwsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdp
bikKICAgICA6IG1fY2xvc2luZyhmYWxzZSkKLSAgICAsIG1fbmFtZShuYW1lLmNyb3NzVGhyZWFk
U3RyaW5nKCkpCisgICAgLCBtX25hbWUobmFtZS5pc29sYXRlZENvcHkoKSkKICAgICAsIG1fdXJs
KHVybC5jb3B5KCkpCiAgICAgLCBtX29yaWdpbihvcmlnaW4pCiB7CkBAIC00MjEsNyArNDIxLDcg
QEAgUGFzc1JlZlB0cjxTaGFyZWRXb3JrZXJQcm94eT4gRGVmYXVsdFNoYQogICAgIC8vIExvb2sg
Zm9yIGFuIGV4aXN0aW5nIHdvcmtlciwgYW5kIGNyZWF0ZSBvbmUgaWYgaXQgZG9lc24ndCBleGlz
dC4KICAgICAvLyBJdGVtcyBpbiB0aGUgY2FjaGUgYXJlIGZyZWVkIG9uIGFub3RoZXIgdGhyZWFk
LCBzbyBkbyBhIHRocmVhZHNhZmUgY29weSBvZiB0aGUgVVJMIGJlZm9yZSBjcmVhdGluZyB0aGUg
b3JpZ2luLAogICAgIC8vIHRvIG1ha2Ugc3VyZSBubyByZWZlcmVuY2VzIHRvIGV4dGVybmFsIHN0
cmluZ3MgbGluZ2VyLgotICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luID0gU2VjdXJp
dHlPcmlnaW46OmNyZWF0ZShLVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsLnN0cmluZygpLnRocmVh
ZHNhZmVDb3B5KCkpKTsKKyAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbiA9IFNlY3Vy
aXR5T3JpZ2luOjpjcmVhdGUoS1VSTChQYXJzZWRVUkxTdHJpbmcsIHVybC5zdHJpbmcoKS5pc29s
YXRlZENvcHkoKSkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Byb3hpZXMuc2l6
ZSgpOyBpKyspIHsKICAgICAgICAgaWYgKCFtX3Byb3hpZXNbaV0tPmlzQ2xvc2luZygpICYmIG1f
cHJveGllc1tpXS0+bWF0Y2hlcyhuYW1lLCBvcmlnaW4sIHVybCkpCiAgICAgICAgICAgICByZXR1
cm4gbV9wcm94aWVzW2ldOwpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9TaGFyZWRXb3Jr
ZXJUaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvU2hhcmVk
V29ya2VyVGhyZWFkLmNwcAkocmV2aXNpb24gOTgyMDEpCisrKyBTb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL1NoYXJlZFdvcmtlclRocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcg
QEAgUGFzc1JlZlB0cjxTaGFyZWRXb3JrZXJUaHJlYWQ+IFNoYXJlZFdvcgogCiBTaGFyZWRXb3Jr
ZXJUaHJlYWQ6OlNoYXJlZFdvcmtlclRocmVhZChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEtV
UkwmIHVybCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgc291cmNlQ29k
ZSwgV29ya2VyTG9hZGVyUHJveHkmIHdvcmtlckxvYWRlclByb3h5LCBXb3JrZXJSZXBvcnRpbmdQ
cm94eSYgd29ya2VyUmVwb3J0aW5nUHJveHksIFdvcmtlclRocmVhZFN0YXJ0TW9kZSBzdGFydE1v
ZGUpCiAgICAgOiBXb3JrZXJUaHJlYWQodXJsLCB1c2VyQWdlbnQsIHNvdXJjZUNvZGUsIHdvcmtl
ckxvYWRlclByb3h5LCB3b3JrZXJSZXBvcnRpbmdQcm94eSwgc3RhcnRNb2RlKQotICAgICwgbV9u
YW1lKG5hbWUuY3Jvc3NUaHJlYWRTdHJpbmcoKSkKKyAgICAsIG1fbmFtZShuYW1lLmlzb2xhdGVk
Q29weSgpKQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlck1lc3Nh
Z2luZ1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtl
ck1lc3NhZ2luZ1Byb3h5LmNwcAkocmV2aXNpb24gOTgyMDEpCisrKyBTb3VyY2UvV2ViQ29yZS93
b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDkg
KzExOCw5IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBXb3JrZXJFeGNlcHRpb25UYXNrKGNv
bnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBz
b3VyY2VVUkwsIFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtZXNzYWdpbmdQcm94eSkKLSAgICAgICAg
OiBtX2Vycm9yTWVzc2FnZShlcnJvck1lc3NhZ2UuY3Jvc3NUaHJlYWRTdHJpbmcoKSkKKyAgICAg
ICAgOiBtX2Vycm9yTWVzc2FnZShlcnJvck1lc3NhZ2UuaXNvbGF0ZWRDb3B5KCkpCiAgICAgICAg
ICwgbV9saW5lTnVtYmVyKGxpbmVOdW1iZXIpCi0gICAgICAgICwgbV9zb3VyY2VVUkwoc291cmNl
VVJMLmNyb3NzVGhyZWFkU3RyaW5nKCkpCisgICAgICAgICwgbV9zb3VyY2VVUkwoc291cmNlVVJM
Lmlzb2xhdGVkQ29weSgpKQogICAgICAgICAsIG1fbWVzc2FnaW5nUHJveHkobWVzc2FnaW5nUHJv
eHkpCiAgICAgewogICAgIH0KQEAgLTIyMiw3ICsyMjIsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIFBvc3RNZXNzYWdlVG9QYWdlSW5zcGVjdG9yVGFzayhXb3JrZXJNZXNzYWdpbmdQcm94eSog
bWVzc2FnaW5nUHJveHksIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKICAgICAgICAgOiBtX21lc3Nh
Z2luZ1Byb3h5KG1lc3NhZ2luZ1Byb3h5KQotICAgICAgICAsIG1fbWVzc2FnZShtZXNzYWdlLmNy
b3NzVGhyZWFkU3RyaW5nKCkpCisgICAgICAgICwgbV9tZXNzYWdlKG1lc3NhZ2UuaXNvbGF0ZWRD
b3B5KCkpCiAgICAgewogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJSdW5Mb29wLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtl
clJ1bkxvb3AuY3BwCShyZXZpc2lvbiA5ODIwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyUnVuTG9vcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NSw3ICsxODUsNyBAQCB2b2lk
IFdvcmtlclJ1bkxvb3A6OnBvc3RUYXNrKFBhc3NPd25QdHI8CiAKIHZvaWQgV29ya2VyUnVuTG9v
cDo6cG9zdFRhc2tGb3JNb2RlKFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFz
az4gdGFzaywgY29uc3QgU3RyaW5nJiBtb2RlKQogewotICAgIG1fbWVzc2FnZVF1ZXVlLmFwcGVu
ZChUYXNrOjpjcmVhdGUodGFzaywgbW9kZS5jcm9zc1RocmVhZFN0cmluZygpKSk7CisgICAgbV9t
ZXNzYWdlUXVldWUuYXBwZW5kKFRhc2s6OmNyZWF0ZSh0YXNrLCBtb2RlLmlzb2xhdGVkQ29weSgp
KSk7CiB9CiAKIFBhc3NPd25QdHI8V29ya2VyUnVuTG9vcDo6VGFzaz4gV29ya2VyUnVuTG9vcDo6
VGFzazo6Y3JlYXRlKFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFz
aywgY29uc3QgU3RyaW5nJiBtb2RlKQpAQCAtMjAyLDcgKzIwMiw3IEBAIHZvaWQgV29ya2VyUnVu
TG9vcDo6VGFzazo6cGVyZm9ybVRhc2soU2MKIAogV29ya2VyUnVuTG9vcDo6VGFzazo6VGFzayhQ
YXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ssIGNvbnN0IFN0cmlu
ZyYgbW9kZSkKICAgICA6IG1fdGFzayh0YXNrKQotICAgICwgbV9tb2RlKG1vZGUuY3Jvc3NUaHJl
YWRTdHJpbmcoKSkKKyAgICAsIG1fbW9kZShtb2RlLmlzb2xhdGVkQ29weSgpKQogewogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwCShyZXZpc2lvbiA5ODIw
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODAsOCArODAsOCBAQCBwcml2YXRlOgogCiBXb3JrZXJUaHJlYWRTdGFydHVwRGF0
YTo6V29ya2VyVGhyZWFkU3RhcnR1cERhdGEoY29uc3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBT
dHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBXb3JrZXJUaHJlYWRT
dGFydE1vZGUgc3RhcnRNb2RlKQogICAgIDogbV9zY3JpcHRVUkwoc2NyaXB0VVJMLmNvcHkoKSkK
LSAgICAsIG1fdXNlckFnZW50KHVzZXJBZ2VudC5jcm9zc1RocmVhZFN0cmluZygpKQotICAgICwg
bV9zb3VyY2VDb2RlKHNvdXJjZUNvZGUuY3Jvc3NUaHJlYWRTdHJpbmcoKSkKKyAgICAsIG1fdXNl
ckFnZW50KHVzZXJBZ2VudC5pc29sYXRlZENvcHkoKSkKKyAgICAsIG1fc291cmNlQ29kZShzb3Vy
Y2VDb2RlLmlzb2xhdGVkQ29weSgpKQogICAgICwgbV9zdGFydE1vZGUoc3RhcnRNb2RlKQogewog
fQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk4MjAxKQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NyBAQAorMjAxMS0xMC0yMyAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisg
ICAgICAgIFJlbW92ZWQgc29tZSBTdHJpbmcgbWlzZmVhdHVyZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwNjk4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBSZW5hbWVkICJ0aHJlYWRTYWZlQ29weSIg
YW5kICJjcm9zc1RocmVhZENvcHkiIHRvICJpc29sYXRlZENvcHkiIGJlY2F1c2UKKyAgICAgICAg
dGhlIGZvcm1lciBuYW1lcyBnYXZlIHRoZSBkYW5nZXJvdXMgbWlzaW1wcmVzc2lvbiB0aGF0IHRo
ZSByZXN1bHRpbmcgb2JqZWN0CisgICAgICAgIHdhcyB0aHJlYWQtc2FmZSwgd2hpY2ggaXMgbm90
IHRydWUuCisKKworICAgICAgICAqIHNyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdl
LmNwcDoKKwogMjAxMS0xMC0yMSAgTmF0IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgW2Nocm9taXVtXSBNYWtlIHNldFZpc2liaWxpdHkgZXh0ZW5zaW9uLSBhbmQgdGhyZWFk
LWNvcnJlY3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0
ZW1DYWxsYmFja3NCcmlkZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuY3BwCShyZXZpc2lvbiA5ODIw
MSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFj
a3NCcmlkZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBAIHRlbXBsYXRlPD4g
c3RydWN0IENyb3NzVGhyZWFkQ29waWVyQmFzZTwKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBlbnRyaWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IGVu
dHJpZXNbaV0ubmFtZTsKICAgICAgICAgICAgIG5ld0VudHJpZXNbaV0uaXNEaXJlY3RvcnkgPSBl
bnRyaWVzW2ldLmlzRGlyZWN0b3J5OwotICAgICAgICAgICAgbmV3RW50cmllc1tpXS5uYW1lID0g
bmFtZS5jcm9zc1RocmVhZFN0cmluZygpOworICAgICAgICAgICAgbmV3RW50cmllc1tpXS5uYW1l
ID0gbmFtZS5pc29sYXRlZENvcHkoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbmV3RW50
cmllczsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA5ODIwMSkKKysrIFNv
dXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBA
CisyMDExLTEwLTIzICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmVtb3ZlZCBzb21lIFN0cmluZyBtaXNmZWF0dXJlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA2OTgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIFJlbmFtZWQgInRocmVhZFNhZmVDb3B5IiBhbmQg
ImNyb3NzVGhyZWFkQ29weSIgdG8gImlzb2xhdGVkQ29weSIgYmVjYXVzZQorICAgICAgICB0aGUg
Zm9ybWVyIG5hbWVzIGdhdmUgdGhlIGRhbmdlcm91cyBtaXNpbXByZXNzaW9uIHRoYXQgdGhlIHJl
c3VsdGluZyBvYmplY3QKKyAgICAgICAgd2FzIHRocmVhZC1zYWZlLCB3aGljaCBpcyBub3QgdHJ1
ZS4KKworICAgICAgICAqIFN0b3JhZ2UvV2ViRGF0YWJhc2VUcmFja2VyQ2xpZW50Lm1tOgorICAg
ICAgICAoRGlkTW9kaWZ5T3JpZ2luRGF0YTo6ZGlzcGF0Y2hUb01haW5UaHJlYWQpOgorCiAyMDEx
LTEwLTIwICBJYW4gSGVuZGVyc29uICA8aWFuaEBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwNTQxCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L21hYy9TdG9yYWdlL1dlYkRhdGFiYXNlVHJhY2tlckNsaWVudC5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYkRhdGFiYXNlVHJhY2tlckNsaWVudC5tbQko
cmV2aXNpb24gOTgyMDEpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYkRhdGFiYXNl
VHJhY2tlckNsaWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBjbGFzcyBE
aWRNb2RpZnlPcmlnaW5EYXRhIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaFRv
TWFpblRocmVhZChXZWJEYXRhYmFzZVRyYWNrZXJDbGllbnQqIGNsaWVudCwgU2VjdXJpdHlPcmln
aW4qIG9yaWdpbikKICAgICB7Ci0gICAgICAgIERpZE1vZGlmeU9yaWdpbkRhdGEqIGNvbnRleHQg
PSBuZXcgRGlkTW9kaWZ5T3JpZ2luRGF0YShjbGllbnQsIG9yaWdpbi0+dGhyZWFkc2FmZUNvcHko
KSk7CisgICAgICAgIERpZE1vZGlmeU9yaWdpbkRhdGEqIGNvbnRleHQgPSBuZXcgRGlkTW9kaWZ5
T3JpZ2luRGF0YShjbGllbnQsIG9yaWdpbi0+aXNvbGF0ZWRDb3B5KCkpOwogICAgICAgICBjYWxs
T25NYWluVGhyZWFkKCZEaWRNb2RpZnlPcmlnaW5EYXRhOjpkaXNwYXRjaERpZE1vZGlmeU9yaWdp
bk9uTWFpblRocmVhZCwgY29udGV4dCk7CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112263</attachid>
            <date>2011-10-24 15:43:59 -0700</date>
            <delta_ts>2011-10-24 16:05:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70698-20111024154358.patch</filename>
            <type>text/plain</type>
            <size>94511</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTgyODkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTQgQEAK
KzIwMTEtMTAtMjQgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZW1vdmVkIFNoYXJlZFVDaGFyIGFuZCB0aWdodGVuZWQgbGFuZ3VhZ2UgYXJvdW5kIGl0cyBw
cmV2aW91cyB1c2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03MDY5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIC0gUmVtb3ZlZCBTaGFyZWRVQ2hhciBiZWNhdXNlIG1vc3Qgb2YgaXRzIGZ1bmN0aW9uYWxp
dHkgaGFzIG1vdmVkIGludG8KKyAgICAgICAgb3RoZXIgYWJzdHJhY3Rpb24gbGF5ZXJzLCBhbmQg
d2Ugd2FudCByZW1haW5pbmcgY2xpZW50cyB0byBjaG9vc2UgdGhlaXIKKyAgICAgICAgYWJzdHJh
Y3Rpb25zIGV4cGxpY2l0bHkgaW5zdGVhZCBvZiByZWx5aW5nIG9uIFN0cmluZ0ltcGwgdG8gcHJv
dmlkZSB0aGlzCisgICAgICAgIGJlaGF2aW9yIGltcGxpY2l0bHksIHNpbmNlIHdlIHRoaW5rIHRo
ZXkgY2FuIHNvbWV0aW1lcyBtYWtlIG1vcmUgZWZmaWNpZW50CisgICAgICAgIGNob2ljZXMuCisK
KyAgICAgICAgLSBSZW5hbWVkICJ0aHJlYWRTYWZlQ29weSIgYW5kICJjcm9zc1RocmVhZENvcHki
IHRvICJpc29sYXRlZENvcHkiIGJlY2F1c2UKKyAgICAgICAgdGhlIGZvcm1lciBuYW1lcyBjb3Vs
ZCBnaXZlIHRoZSBpbXByZXNzaW9uIHRoYXQgdGhlIHJlc3VsdGluZyBvYmplY3Qgd2FzCisgICAg
ICAgIHRocmVhZC1zYWZlLCBidXQgYWN0dWFsbHkgaXQncyBqdXN0IGFuIGlzb2xhdGVkIGNvcHks
IHdoaWNoIGlzIG5vdAorICAgICAgICB0aHJlYWQtc2FmZSBieSBpdHNlbGYsIGJ1dCBjYW4gYmUg
dXNlZCB0byBpbXBsZW1lbnQgYSB0aHJlYWQtc2FmZQorICAgICAgICBhbGdvcml0aG0gdGhyb3Vn
aCBpc29sYXRpb24uCisKKyAgICAgICAgKiB3dGYvQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmg6IFJl
bW92ZWQuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5leHA6IEV4cG9ydCEKKworICAgICAg
ICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp+
U3RyaW5nSW1wbCk6IFJlbW92ZWQgdGhlIHN0dWZmIG1lbnRpb25lZCBhYm92ZS4KKworICAgICAg
ICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuaDoKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6bGVu
Z3RoKTogRGl0dG8uCisKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6aXNvbGF0ZWRDb3B5KTog
SW5saW5lZCB0aGlzLCBzaW5jZSBpdCdzIG5vdyB0cml2aWFsLgorCisgICAgICAgICogd3RmL3Rl
eHQvV1RGU3RyaW5nLmNwcDoKKyAgICAgICAgKFdURjo6U3RyaW5nOjppc29sYXRlZENvcHkpOgor
ICAgICAgICAqIHd0Zi90ZXh0L1dURlN0cmluZy5oOiBVcGRhdGVkIGZvciBTdHJpbmdJbXBsIGNo
YW5nZXMuCisKKyAgICAgICAgKiBBUEkvT3BhcXVlSlNTdHJpbmcuaDoKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmV4cDoKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS5neXBpOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLm9yZGVyOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvajoKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0
Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvT3duRmFzdE1hbGxvY1B0ci5oOgorICAg
ICAgICAqIHd0Zi9SZWZDb3VudGVkLmg6CisgICAgICAgICogd3RmL1NpemVMaW1pdHMuY3BwOgor
ICAgICAgICAqIHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oOgorICAgICAgICAqIHd0Zi93dGYu
cHJpOgorICAgICAgICAqIHlhcnIvWWFyclBhdHRlcm4uaDogVXBkYXRlZCB0aGVzZSBmaWxlcyB0
byBhY2NvbW9kYXRlIHJlbW92YWwgb2YKKyAgICAgICAgQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmgu
CisKIDIwMTEtMTAtMjQgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4K
IAogICAgICAgICBGaXhpbmcgV2luZG93cyBidWlsZApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDk4Mjg5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTQ5MCw3ICs0
OTAsNiBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL0J5dGVBcnJheS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NoZWNrZWRB
cml0aG1ldGljLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ29tcGlsZXIuaCBcCi0J
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Dcm9zc1RocmVhZFJlZkNvdW50ZWQuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5jcHAg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1i
ZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DdXJyZW50VGltZS5jcHAgXApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCShyZXZpc2lvbiA5ODI4
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM2Myw3ICszNjMsNiBAQCBfX1pOM0pTQ2d0RVJLTlNfN1VTdHJpbmdFUzJfCiBf
X1pOM0pTQ2x0RVJLTlNfN1VTdHJpbmdFUzJfCiBfX1pOM1dURjEwU3RyaW5nSW1wbDExcmV2ZXJz
ZUZpbmRFUFMwX2oKIF9fWk4zV1RGMTBTdHJpbmdJbXBsMTFyZXZlcnNlRmluZEV0agotX19aTjNX
VEYxMFN0cmluZ0ltcGwxMnNoYXJlZEJ1ZmZlckV2CiBfX1pOM1dURjEwU3RyaW5nSW1wbDE2Zmlu
ZElnbm9yaW5nQ2FzZUVQS2NqCiBfX1pOM1dURjEwU3RyaW5nSW1wbDE2ZmluZElnbm9yaW5nQ2Fz
ZUVQUzBfagogX19aTjNXVEYxMFN0cmluZ0ltcGwxOHNpbXBsaWZ5V2hpdGVTcGFjZUV2CkBAIC01
OTcsMTMgKzU5NiwxMiBAQCBfX1pOSzNXVEYxM0RlY2ltYWxOdW1iZXIxOXRvU3RyaW5nRXhwb25l
CiBfX1pOSzNXVEYxM0RlY2ltYWxOdW1iZXIyOGJ1ZmZlckxlbmd0aEZvclN0cmluZ0RlY2ltYWxF
dgogX19aTkszV1RGMTNEZWNpbWFsTnVtYmVyMzJidWZmZXJMZW5ndGhGb3JTdHJpbmdFeHBvbmVu
dGlhbEV2CiBfX1pOSzNXVEY2U3RyaW5nMTF0b0ludFN0cmljdEVQYmkKK19fWk5LM1dURjZTdHJp
bmcxMmlzb2xhdGVkQ29weUV2CiBfX1pOSzNXVEY2U3RyaW5nMTJ0b1VJbnRTdHJpY3RFUGJpCiBf
X1pOSzNXVEY2U3RyaW5nMTN0b0ludDY0U3RyaWN0RVBiaQotX19aTkszV1RGNlN0cmluZzE0dGhy
ZWFkc2FmZUNvcHlFdgogX19aTkszV1RGNlN0cmluZzE1c3RyaXBXaGl0ZVNwYWNlRVBGYnRFCiBf
X1pOSzNXVEY2U3RyaW5nMTVzdHJpcFdoaXRlU3BhY2VFdgogX19aTkszV1RGNlN0cmluZzE2cmVt
b3ZlQ2hhcmFjdGVyc0VQRmJ0RQotX19aTkszV1RGNlN0cmluZzE3Y3Jvc3NUaHJlYWRTdHJpbmdF
dgogX19aTkszV1RGNlN0cmluZzE4c2ltcGxpZnlXaGl0ZVNwYWNlRVBGYnRFCiBfX1pOSzNXVEY2
U3RyaW5nMThzaW1wbGlmeVdoaXRlU3BhY2VFdgogX19aTkszV1RGNlN0cmluZzE5Y2hhcmFjdGVy
U3RhcnRpbmdBdEVqCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
Z3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
Z3lwaQkocmV2aXNpb24gOTgyODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDcgKzE0NCw2IEBACiAgICAgICAgICAg
ICAnd3RmL0NoZWNrZWRBcml0aG1ldGljLmgnLAogICAgICAgICAgICAgJ3d0Zi9Db21waWxlci5o
JywKICAgICAgICAgICAgICd3dGYvQ29tcGxleC5oJywKLSAgICAgICAgICAgICd3dGYvQ3Jvc3NU
aHJlYWRSZWZDb3VudGVkLmgnLAogICAgICAgICAgICAgJ3d0Zi9DcnlwdG9ncmFwaGljYWxseVJh
bmRvbU51bWJlci5oJywKICAgICAgICAgICAgICd3dGYvQ3VycmVudFRpbWUuaCcsCiAgICAgICAg
ICAgICAnd3RmL0RhdGVNYXRoLmgnLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLm9yZGVyCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS5vcmRlcgkocmV2aXNpb24gOTgyODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUub3JkZXIJKHdvcmtpbmcgY29weSkKQEAgLTU1LDggKzU1LDYgQEAg
X19aTjNXVEY3Q1N0cmluZzExbXV0YWJsZURhdGFFdgogX19aTjNXVEY3Q1N0cmluZzE4Y29weUJ1
ZmZlcklmTmVlZGVkRXYKIF9fWk4zV1RGNU11dGV4NGxvY2tFdgogX19aTjNXVEY1TXV0ZXg2dW5s
b2NrRXYKLV9fWk5LM1dURjZTdHJpbmcxN2Nyb3NzVGhyZWFkU3RyaW5nRXYKLV9fWk4zV1RGMTBT
dHJpbmdJbXBsMTdjcm9zc1RocmVhZFN0cmluZ0V2CiBfX1pOM1dURjEwU3RyaW5nSW1wbDEyc2hh
cmVkQnVmZmVyRXYKIF9fWk4zV1RGMTBTdHJpbmdJbXBsOGVuZHNXaXRoRVBTMF9iCiBfX1pOM1dU
RjEyY3JlYXRlVGhyZWFkRVBGUHZTMF9FUzBfUEtjCkBAIC0yMjA4LDcgKzIyMDYsNiBAQCBfX1pO
M0pTQzExSlNCeXRlQXJyYXkxOGdldE93blByb3BlcnR5U2xvCiBfX1pOM1dURjIwZXF1YWxJZ25v
cmluZ051bGxpdHlFUE5TXzEwU3RyaW5nSW1wbEVTMV8KIF9jdGlfb3BfZ2V0X2J5X2lkX2FycmF5
X2ZhaWwKIF9fWk4zSlNDMTdQcmVmaXhCcmFja2V0Tm9kZTEyZW1pdEJ5dGVjb2RlRVJOU18xN0J5
dGVjb2RlR2VuZXJhdG9yRVBOU18xMFJlZ2lzdGVySURFCi1fX1pOM1dURjIxQ3Jvc3NUaHJlYWRS
ZWZDb3VudGVkSU5TXzE2T3duRmFzdE1hbGxvY1B0cklLdEVFRTVkZXJlZkV2CiBfX1pOM0pTQzEy
SlNHbG9iYWxEYXRhMTBDbGllbnREYXRhRDJFdgogX19aTjNKU0M4RGVidWdnZXJEMkV2CiBfX1pO
M1dURjE0VGhyZWFkU3BlY2lmaWNJTlNfMTNXVEZUaHJlYWREYXRhRUU3ZGVzdHJveUVQdgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PcGFxdWVKU1N0cmluZy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT3BhcXVlSlNTdHJpbmcuaAkocmV2aXNpb24g
OTgyODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09wYXF1ZUpTU3RyaW5nLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgT3BhcXVlSlNTdHJpbmdfaAog
I2RlZmluZSBPcGFxdWVKU1N0cmluZ19oCiAKKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNv
dW50ZWQuaD4KICNpbmNsdWRlIDxydW50aW1lL1VTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9X
VEYudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2oJKHJldmlzaW9uIDk4Mjg5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtNjgxLDEwICs2ODEsNiBAQAogCQkJPgogCQk8L0ZpbGU+CiAJCTxGaWxlCi0J
CQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCIKLQkJCT4K
LQkJPC9GaWxlPgotCQk8RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcQ3J5cHRvZ3Jh
cGhpY2FsbHlSYW5kb21OdW1iZXIuY3BwIgogCQkJPgogCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gOTgyODkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtNDYsNyArNDYsNiBAQAogCQkwQjMzMEMyNzBGMzhDNjIzMDA2OTJERTMgLyogVHlw
ZVRyYWl0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwQjMzMEMyNjBGMzhDNjIzMDA2OTJERTMgLyogVHlwZVRyYWl0cy5jcHAgKi87IH07CiAJCTBC
NEQ3RTYzMEYzMTlBQzgwMEFEN0U1OCAvKiBUeXBlVHJhaXRzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQjREN0U2MjBGMzE5QUM4MDBBRDdFNTggLyog
VHlwZVRyYWl0cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBCQUM5NEEwMTMzODcyODQwMENGMTM1QiAvKiBUaHJlYWRSZXN0cmljdGlvblZlcmlm
aWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQkFD
OTQ5RTEzMzg3Mjg0MDBDRjEzNUIgLyogVGhyZWFkUmVzdHJpY3Rpb25WZXJpZmllci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBCREZGQUUwMEZD
NjE5MjkwMEQ2OUVGNCAvKiBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBCREZGQUQ0MEZDNjE3MTAwMEQ2OUVGNCAv
KiBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwQkRGRkFFMTBGQzYxOTMxMDBENjlFRjQgLyogT3duRmFzdE1h
bGxvY1B0ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEJERkZBRDEwRkM2MTZFQzAwRDY5RUY0IC8qIE93bkZhc3RNYWxsb2NQdHIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwQkYyOEEyOTExQTMzREMz
MDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwQkYyOEEyODExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5j
cHAgKi87IH07CiAJCTBGMTZENzI2MTQyQzM5QzAwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNkQ3MjQxNDJD
MzlBMjAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5jcHAgKi87IH07CkBAIC04MDgsNyArODA3LDYgQEAK
IAkJMEI0RDdFNjIwRjMxOUFDODAwQUQ3RTU4IC8qIFR5cGVUcmFpdHMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZVRyYWl0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwQkFDOTQ5RTEzMzg3Mjg0MDBDRjEzNUIgLyogVGhyZWFkUmVzdHJpY3Rpb25WZXJp
Zmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRSZXN0cmljdGlv
blZlcmlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBCREZGQUQxMEZDNjE2
RUMwMEQ2OUVGNCAvKiBPd25GYXN0TWFsbG9jUHRyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE93bkZhc3RNYWxsb2NQdHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMEJERkZBRDQwRkM2MTcxMDAwRDY5RUY0IC8qIENyb3NzVGhyZWFkUmVmQ291bnRlZC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEJGMjhBMjgxMUEzM0RDMzAwNjM4Rjg0IC8q
IFNpemVMaW1pdHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2l6
ZUxpbWl0cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTZENzI0MTQyQzM5
QTIwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQml0VmVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYy
NDJEQTUxM0YzQjFCQjAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTg3Nyw3ICsxODc1LDYgQEAKIAkJCQlBN0JDMEM4
MTE0MDYwOEIwMDBCMUJCNzEgLyogQ2hlY2tlZEFyaXRobWV0aWMuaCAqLywKIAkJCQlCQzY2QkFF
MjEzRjQ5MjhGMDBDMjNGQUUgLyogQ29tcGlsZXIuaCAqLywKIAkJCQlGREExNUMxNjEyQjAzMDI4
MDAzQTU4M0EgLyogQ29tcGxleC5oICovLAotCQkJCTBCREZGQUQ0MEZDNjE3MTAwMEQ2OUVGNCAv
KiBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCAqLywKIAkJCQk5Nzk0MUE3QzEzMDJBMDk4MDA0QTM0
NDcgLyogQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuY3BwICovLAogCQkJCTk3OTQxQTdE
MTMwMkEwOTgwMDRBMzQ0NyAvKiBDcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oICovLAog
CQkJCTE4MEI5QUVGMEYxNkM1NjkwMDlCREJDNSAvKiBDdXJyZW50VGltZS5jcHAgKi8sCkBAIC0y
NTUxLDcgKzI1NDgsNiBAQAogCQkJCUJDMThDM0Y1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBjb25maWcu
aCBpbiBIZWFkZXJzICovLAogCQkJCTE0NDgzNkU3MTMyREE3QkUwMDVCRTc4NSAvKiBDb25zZXJ2
YXRpdmVSb290cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRjYwRTE2RjVDRDAwQjM0NDYw
IC8qIENvbnN0cnVjdERhdGEuaCBpbiBIZWFkZXJzICovLAotCQkJCTBCREZGQUUwMEZDNjE5Mjkw
MEQ2OUVGNCAvKiBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3
OTQxQTdGMTMwMkEwOTgwMDRBMzQ0NyAvKiBDcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODY1NjU3NDMxMTVCRTNEQTAwMjkxRjQwIC8qIENTdHJpbmcu
aCBpbiBIZWFkZXJzICovLAogCQkJCTE4MEI5QjA4MEYxNkQ5NEYwMDlCREJDNSAvKiBDdXJyZW50
VGltZS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NN
YWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ01h
a2VMaXN0cy50eHQJKHJldmlzaW9uIDk4Mjg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTIsNyArMTIsNiBAQCBTRVQoV1RG
X0hFQURFUlMKICAgICBCeXRlQXJyYXkuaAogICAgIENvbXBpbGVyLmgKICAgICBDb21wbGV4LmgK
LSAgICBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaAogICAgIENyeXB0b2dyYXBoaWNhbGx5UmFuZG9t
TnVtYmVyLmgKICAgICBDdXJyZW50VGltZS5oCiAgICAgRGF0ZU1hdGguaApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9Dcm9zc1RocmVhZFJlZkNvdW50ZWQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0Nyb3NzVGhyZWFkUmVmQ291bnRlZC5oCShyZXZp
c2lvbiA5ODI4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ3Jvc3NUaHJlYWRSZWZD
b3VudGVkLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4K
LSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDcm9zc1RocmVh
ZFJlZkNvdW50ZWRfaAotI2RlZmluZSBDcm9zc1RocmVhZFJlZkNvdW50ZWRfaAotCi0jaW5jbHVk
ZSAiUGFzc1JlZlB0ci5oIgotI2luY2x1ZGUgIlJlZkNvdW50ZWQuaCIKLSNpbmNsdWRlICJUaHJl
YWRpbmcuaCIKLQotbmFtZXNwYWNlIFdURiB7Ci0KLSAgICAvLyBVc2VkIHRvIGFsbG93aW5nIHNo
YXJpbmcgZGF0YSBhY3Jvc3MgY2xhc3NlcyBhbmQgdGhyZWFkcyAobGlrZSBUaHJlYWRTYWZlUmVm
Q291bnRlZCkuCi0gICAgLy8KLSAgICAvLyBXaHkgbm90IGp1c3QgdXNlIFRocmVhZFNhZmVSZWZD
b3VudGVkPwotICAgIC8vIFRocmVhZFNhZmVSZWZDb3VudGVkIGNhbiBoYXZlIGEgc2lnbmlmaWNh
bnQgcGVyZiBpbXBhY3Qgd2hlbiB1c2VkIGluIGxvdyBsZXZlbCBjbGFzc2VzCi0gICAgLy8gKGxp
a2UgVVN0cmluZykgdGhhdCBnZXQgcmVmL2RlcmVmJ2VkIGEgbG90LiBUaGlzIGNsYXNzIGhhcyB0
aGUgYmVuZWZpdCBvZiBkb2luZyBmYXN0IHJlZgotICAgIC8vIGNvdW50cyBsaWtlIFJlZlB0ciB3
aGVuZXZlciBwb3NzaWJsZSwgYnV0IGl0IGhhcyB0aGUgZG93bnNpZGUgdGhhdCB5b3UgbmVlZCB0
byBjb3B5IGl0Ci0gICAgLy8gdG8gdXNlIGl0IG9uIGFub3RoZXIgdGhyZWFkLgotICAgIC8vCi0g
ICAgLy8gSXMgdGhpcyBjbGFzcyB0aHJlYWRzYWZlPwotICAgIC8vIFdoaWxlIGVhY2ggaW5zdGFu
Y2Ugb2YgdGhlIGNsYXNzIGlzIG5vdCB0aHJlYWRzYWZlLCB0aGUgY29waWVkIGluc3RhbmNlIGlz
IHRocmVhZHNhZmUKLSAgICAvLyB3aXRoIHJlc3BlY3QgdG8gdGhlIG9yaWdpbmFsIGFuZCBhbnkg
b3RoZXIgY29waWVzLiAgVGhlIHVuZGVybHlpbmcgbV9kYXRhIGlzIGpvaW50bHkKLSAgICAvLyBv
d25lZCBieSB0aGUgb3JpZ2luYWwgaW5zdGFuY2UgYW5kIGFsbCBjb3BpZXMuCi0gICAgdGVtcGxh
dGU8Y2xhc3MgVD4KLSAgICBjbGFzcyBDcm9zc1RocmVhZFJlZkNvdW50ZWQgewotICAgICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShDcm9zc1RocmVhZFJlZkNvdW50ZWQpOwotICAgIHB1YmxpYzoK
LSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q3Jvc3NUaHJlYWRSZWZDb3VudGVkPFQ+ID4gY3Jl
YXRlKFQqIGRhdGEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
Q3Jvc3NUaHJlYWRSZWZDb3VudGVkPFQ+KGRhdGEsIDApKTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIFVzZWQgdG8gbWFrZSBhbiBpbnN0YW5jZSB0aGF0IGNhbiBiZSB1c2VkIG9uIGFub3RoZXIg
dGhyZWFkLgotICAgICAgICBQYXNzUmVmUHRyPENyb3NzVGhyZWFkUmVmQ291bnRlZDxUPiA+IGNy
b3NzVGhyZWFkQ29weSgpOwotCi0gICAgICAgIHZvaWQgcmVmKCk7Ci0gICAgICAgIHZvaWQgZGVy
ZWYoKTsKLSAgICAgICAgVCogcmVsZWFzZSgpOwotCi0gICAgICAgIGJvb2wgaXNTaGFyZWQoKSBj
b25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gIW1fcmVmQ291bnRlci5oYXNPbmVS
ZWYoKSB8fCAobV90aHJlYWRTYWZlUmVmQ291bnRlciAmJiAhbV90aHJlYWRTYWZlUmVmQ291bnRl
ci0+aGFzT25lUmVmKCkpOwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBDcm9z
c1RocmVhZFJlZkNvdW50ZWQoVCogZGF0YSwgVGhyZWFkU2FmZVJlZkNvdW50ZWRCYXNlKiB0aHJl
YWRlZENvdW50ZXIpCi0gICAgICAgICAgICA6IG1fdGhyZWFkU2FmZVJlZkNvdW50ZXIodGhyZWFk
ZWRDb3VudGVyKQotICAgICAgICAgICAgLCBtX2RhdGEoZGF0YSkKLSNpZm5kZWYgTkRFQlVHCi0g
ICAgICAgICAgICAsIG1fdGhyZWFkSWQoMCkKLSNlbmRpZgotICAgICAgICB7Ci0gICAgICAgICAg
ICAvLyBXZSB1c2UgUmVmQ291bnRlZEJhc2UgaW4gYW4gdW51c3VhbCB3YXkgaGVyZSwgc28gZ2V0
IHJpZCBvZiB0aGUgcmVxdWlyZW1lbnQKLSAgICAgICAgICAgIC8vIHRoYXQgYWRvcHRSZWYgYmUg
Y2FsbGVkIG9uIGl0LgotICAgICAgICAgICAgbV9yZWZDb3VudGVyLnJlbGF4QWRvcHRpb25SZXF1
aXJlbWVudCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgfkNyb3NzVGhyZWFkUmVmQ291bnRlZCgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghbV90aHJlYWRTYWZlUmVmQ291bnRlcikKLSAg
ICAgICAgICAgICAgICBkZWxldGUgbV9kYXRhOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCB0
aHJlYWRTYWZlRGVyZWYoKTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgYm9vbCBpc093bmVk
QnlDdXJyZW50VGhyZWFkKCkgY29uc3QgeyByZXR1cm4gIW1fdGhyZWFkSWQgfHwgbV90aHJlYWRJ
ZCA9PSBjdXJyZW50VGhyZWFkKCk7IH0KLSNlbmRpZgotCi0gICAgICAgIFJlZkNvdW50ZWRCYXNl
IG1fcmVmQ291bnRlcjsKLSAgICAgICAgVGhyZWFkU2FmZVJlZkNvdW50ZWRCYXNlKiBtX3RocmVh
ZFNhZmVSZWZDb3VudGVyOwotICAgICAgICBUKiBtX2RhdGE7Ci0jaWZuZGVmIE5ERUJVRwotICAg
ICAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSWQ7Ci0jZW5kaWYKLSAgICB9OwotCi0gICAg
dGVtcGxhdGU8Y2xhc3MgVD4KLSAgICB2b2lkIENyb3NzVGhyZWFkUmVmQ291bnRlZDxUPjo6cmVm
KCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc093bmVkQnlDdXJyZW50VGhyZWFkKCkpOwotICAg
ICAgICBtX3JlZkNvdW50ZXIucmVmKCk7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICAvLyBTdG9y
ZSB0aGUgdGhyZWFkSWQgYXMgc29vbiBhcyB0aGUgcmVmIGNvdW50IGdldHMgdG8gMi4KLSAgICAg
ICAgLy8gVGhlIGNsYXNzIGdldHMgY3JlYXRlZCB3aXRoIGEgcmVmIGNvdW50IG9mIDEgYW5kIHRo
ZW4gcGFzc2VkCi0gICAgICAgIC8vIHRvIGFub3RoZXIgdGhyZWFkIHdoZXJlIHRvIHJlZiBjb3Vu
dCBnZXQgaW5jcmVhc2VkLiAgVGhpcwotICAgICAgICAvLyBpcyBhIGhldXJpc3RpYyBidXQgaXQg
c2VlbXMgdG8gYWx3YXlzIHdvcmsgYW5kIGhhcyBoZWxwZWQKLSAgICAgICAgLy8gZmluZCBzb21l
IGJ1Z3MuCi0gICAgICAgIGlmICghbV90aHJlYWRJZCAmJiBtX3JlZkNvdW50ZXIucmVmQ291bnQo
KSA9PSAyKQotICAgICAgICAgICAgbV90aHJlYWRJZCA9IGN1cnJlbnRUaHJlYWQoKTsKLSNlbmRp
ZgotICAgIH0KLQotICAgIHRlbXBsYXRlPGNsYXNzIFQ+Ci0gICAgdm9pZCBDcm9zc1RocmVhZFJl
ZkNvdW50ZWQ8VD46OmRlcmVmKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc093bmVkQnlDdXJy
ZW50VGhyZWFkKCkpOwotICAgICAgICBpZiAobV9yZWZDb3VudGVyLmRlcmVmQmFzZSgpKSB7Ci0g
ICAgICAgICAgICB0aHJlYWRTYWZlRGVyZWYoKTsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzOwot
ICAgICAgICB9IGVsc2UgewotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgICAgIC8vIENsZWFyIHRo
ZSB0aHJlYWRJZCB3aGVuIHRoZSByZWYgZ29lcyB0byAxIGJlY2F1c2UgaXQKLSAgICAgICAgICAg
IC8vIGlzIHNhZmUgdG8gYmUgcGFzc2VkIHRvIGFub3RoZXIgdGhyZWFkIGF0IHRoaXMgcG9pbnQu
Ci0gICAgICAgICAgICBpZiAobV90aHJlYWRJZCAmJiBtX3JlZkNvdW50ZXIucmVmQ291bnQoKSA9
PSAxKQotICAgICAgICAgICAgICAgIG1fdGhyZWFkSWQgPSAwOwotI2VuZGlmCi0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBUPgotICAgIFQqIENyb3NzVGhyZWFkUmVmQ291
bnRlZDxUPjo6cmVsZWFzZSgpCi0gICAgewotICAgICAgICBBU1NFUlQoIWlzU2hhcmVkKCkpOwot
Ci0gICAgICAgIFQqIGRhdGEgPSBtX2RhdGE7Ci0gICAgICAgIG1fZGF0YSA9IDA7Ci0gICAgICAg
IHJldHVybiBkYXRhOwotICAgIH0KLQotICAgIHRlbXBsYXRlPGNsYXNzIFQ+Ci0gICAgUGFzc1Jl
ZlB0cjxDcm9zc1RocmVhZFJlZkNvdW50ZWQ8VD4gPiBDcm9zc1RocmVhZFJlZkNvdW50ZWQ8VD46
OmNyb3NzVGhyZWFkQ29weSgpCi0gICAgewotICAgICAgICBBU1NFUlQoaXNPd25lZEJ5Q3VycmVu
dFRocmVhZCgpKTsKLSAgICAgICAgaWYgKG1fdGhyZWFkU2FmZVJlZkNvdW50ZXIpCi0gICAgICAg
ICAgICBtX3RocmVhZFNhZmVSZWZDb3VudGVyLT5yZWYoKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgbV90aHJlYWRTYWZlUmVmQ291bnRlciA9IG5ldyBUaHJlYWRTYWZlUmVmQ291bnRlZEJh
c2UoMik7Ci0KLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDcm9zc1RocmVhZFJlZkNvdW50
ZWQ8VD4obV9kYXRhLCBtX3RocmVhZFNhZmVSZWZDb3VudGVyKSk7Ci0gICAgfQotCi0KLSAgICB0
ZW1wbGF0ZTxjbGFzcyBUPgotICAgIHZvaWQgQ3Jvc3NUaHJlYWRSZWZDb3VudGVkPFQ+Ojp0aHJl
YWRTYWZlRGVyZWYoKQotICAgIHsKLSAgICAgICAgaWYgKG1fdGhyZWFkU2FmZVJlZkNvdW50ZXIg
JiYgbV90aHJlYWRTYWZlUmVmQ291bnRlci0+ZGVyZWZCYXNlKCkpIHsKLSAgICAgICAgICAgIGRl
bGV0ZSBtX3RocmVhZFNhZmVSZWZDb3VudGVyOwotICAgICAgICAgICAgbV90aHJlYWRTYWZlUmVm
Q291bnRlciA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci19IC8vIG5hbWVzcGFjZSBXVEYKLQotdXNp
bmcgV1RGOjpDcm9zc1RocmVhZFJlZkNvdW50ZWQ7Ci0KLSNlbmRpZiAvLyBDcm9zc1RocmVhZFJl
ZkNvdW50ZWRfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Pd25GYXN0TWFsbG9j
UHRyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Pd25GYXN0TWFs
bG9jUHRyLmgJKHJldmlzaW9uIDk4Mjg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9P
d25GYXN0TWFsbG9jUHRyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKICNkZWZp
bmUgT3duRmFzdE1hbGxvY1B0cl9oCiAKICNpbmNsdWRlICJGYXN0TWFsbG9jLmgiCisjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL1JlZkNvdW50ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL1JlZkNvdW50ZWQuaAkocmV2aXNpb24gOTgyODkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL1JlZkNvdW50ZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDcg
KzE0OSw2IEBAIHByb3RlY3RlZDoKICNlbmRpZgogCiBwcml2YXRlOgotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGZyaWVuZCBjbGFzcyBDcm9zc1RocmVhZFJlZkNvdW50ZWQ7CiAKICNpZm5kZWYg
TkRFQlVHCiAgICAgZnJpZW5kIHZvaWQgYWRvcHRlZChSZWZDb3VudGVkQmFzZSopOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9TaXplTGltaXRzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1NpemVMaW1pdHMuY3BwCShyZXZpc2lvbiA5ODI4OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvU2l6ZUxpbWl0cy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKIAogI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0Nyb3NzVGhyZWFkUmVmQ291bnRlZC5oPgog
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L1RocmVhZFNhZmVSZWZDb3VudGVkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oCShyZXZpc2lvbiA5ODI4OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaAkod29ya2luZyBjb3B5
KQpAQCAtMTI0LDcgKzEyNCw2IEBAIHByb3RlY3RlZDoKIAogcHJpdmF0ZToKICAgICB0ZW1wbGF0
ZTxjbGFzcyBUPgotICAgIGZyaWVuZCBjbGFzcyBDcm9zc1RocmVhZFJlZkNvdW50ZWQ7CiAKICAg
ICBpbnQgbV9yZWZDb3VudDsKICNpZiAhVVNFKExPQ0tGUkVFX1RIUkVBRFNBRkVSRUZDT1VOVEVE
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi93dGYucHJpCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvd3RmLnByaQkocmV2aXNpb24gOTgyODkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3d0Zi5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTE0LDcg
KzE0LDYgQEAgSEVBREVSUyArPSBcCiAgICAgd3RmL0J5dGVBcnJheS5oIFwKICAgICB3dGYvQ2hl
Y2tlZEFyaXRobWV0aWMuaCBcCiAgICAgd3RmL0NvbXBpbGVyLmggXAotICAgIHd0Zi9Dcm9zc1Ro
cmVhZFJlZkNvdW50ZWQuaCBcCiAgICAgd3RmL0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVy
LmggXAogICAgIHd0Zi9DdXJyZW50VGltZS5oIFwKICAgICB3dGYvRGF0ZU1hdGguaCBcCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCShyZXZp
c2lvbiA5ODI4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJbXBs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsMjAgKzU1LDE3IEBAIFN0cmluZ0ltcGw6On5TdHJp
bmdJbXBsKCkKICNlbmRpZgogCiAgICAgQnVmZmVyT3duZXJzaGlwIG93bmVyc2hpcCA9IGJ1ZmZl
ck93bmVyc2hpcCgpOwotICAgIGlmIChvd25lcnNoaXAgIT0gQnVmZmVySW50ZXJuYWwpIHsKLSAg
ICAgICAgaWYgKG93bmVyc2hpcCA9PSBCdWZmZXJPd25lZCkgewotICAgICAgICAgICAgQVNTRVJU
KCFtX3NoYXJlZEJ1ZmZlcik7Ci0gICAgICAgICAgICBBU1NFUlQobV9kYXRhKTsKLSAgICAgICAg
ICAgIGZhc3RGcmVlKGNvbnN0X2Nhc3Q8VUNoYXIqPihtX2RhdGEpKTsKLSAgICAgICAgfSBlbHNl
IGlmIChvd25lcnNoaXAgPT0gQnVmZmVyU3Vic3RyaW5nKSB7Ci0gICAgICAgICAgICBBU1NFUlQo
bV9zdWJzdHJpbmdCdWZmZXIpOwotICAgICAgICAgICAgbV9zdWJzdHJpbmdCdWZmZXItPmRlcmVm
KCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQob3duZXJzaGlwID09IEJ1
ZmZlclNoYXJlZCk7Ci0gICAgICAgICAgICBBU1NFUlQobV9zaGFyZWRCdWZmZXIpOwotICAgICAg
ICAgICAgbV9zaGFyZWRCdWZmZXItPmRlcmVmKCk7Ci0gICAgICAgIH0KKyAgICBpZiAob3duZXJz
aGlwID09IEJ1ZmZlckludGVybmFsKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG93bmVyc2hp
cCA9PSBCdWZmZXJPd25lZCkgeworICAgICAgICBBU1NFUlQobV9kYXRhKTsKKyAgICAgICAgZmFz
dEZyZWUoY29uc3RfY2FzdDxVQ2hhcio+KG1fZGF0YSkpOworICAgICAgICByZXR1cm47CiAgICAg
fQorCisgICAgQVNTRVJUKG93bmVyc2hpcCA9PSBCdWZmZXJTdWJzdHJpbmcpOworICAgIEFTU0VS
VChtX3N1YnN0cmluZ0J1ZmZlcik7CisgICAgbV9zdWJzdHJpbmdCdWZmZXItPmRlcmVmKCk7CiB9
CiAKIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXpl
ZCh1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiYgZGF0YSkKQEAgLTE0NSwzNyArMTQyLDYgQEAgUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdAogICAgIHJldHVybiBjcmVhdGUo
c3RyaW5nLCBsZW5ndGgpOwogfQogCi1QYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6
OmNyZWF0ZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBQYXNzUmVm
UHRyPFNoYXJlZFVDaGFyPiBzaGFyZWRCdWZmZXIpCi17Ci0gICAgQVNTRVJUKGNoYXJhY3RlcnMp
OwotICAgIEFTU0VSVChtaW5MZW5ndGhUb1NoYXJlICYmIGxlbmd0aCA+PSBtaW5MZW5ndGhUb1No
YXJlKTsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0cmluZ0ltcGwoY2hhcmFjdGVycywgbGVu
Z3RoLCBzaGFyZWRCdWZmZXIpKTsKLX0KLQotU2hhcmVkVUNoYXIqIFN0cmluZ0ltcGw6OnNoYXJl
ZEJ1ZmZlcigpCi17Ci0gICAgaWYgKG1fbGVuZ3RoIDwgbWluTGVuZ3RoVG9TaGFyZSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgLy8gQWxsIHN0YXRpYyBzdHJpbmdzIGFyZSBzbWFsbGVyIHRoYXQg
dGhlIG1pbmltaW0gbGVuZ3RoIHRvIHNoYXJlLgotICAgIEFTU0VSVCghaXNTdGF0aWMoKSk7Ci0K
LSAgICBCdWZmZXJPd25lcnNoaXAgb3duZXJzaGlwID0gYnVmZmVyT3duZXJzaGlwKCk7Ci0KLSAg
ICBpZiAob3duZXJzaGlwID09IEJ1ZmZlckludGVybmFsKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICBpZiAob3duZXJzaGlwID09IEJ1ZmZlclN1YnN0cmluZykKLSAgICAgICAgcmV0dXJuIG1fc3Vi
c3RyaW5nQnVmZmVyLT5zaGFyZWRCdWZmZXIoKTsKLSAgICBpZiAob3duZXJzaGlwID09IEJ1ZmZl
ck93bmVkKSB7Ci0gICAgICAgIEFTU0VSVCghbV9zaGFyZWRCdWZmZXIpOwotICAgICAgICBtX3No
YXJlZEJ1ZmZlciA9IFNoYXJlZFVDaGFyOjpjcmVhdGUobmV3IFNoYXJhYmxlVUNoYXIobV9kYXRh
KSkubGVha1JlZigpOwotICAgICAgICBtX2hhc2hBbmRGbGFncyA9IChtX2hhc2hBbmRGbGFncyAm
IH5zX2hhc2hNYXNrQnVmZmVyT3duZXJzaGlwKSB8IEJ1ZmZlclNoYXJlZDsKLSAgICB9Ci0KLSAg
ICBBU1NFUlQoYnVmZmVyT3duZXJzaGlwKCkgPT0gQnVmZmVyU2hhcmVkKTsKLSAgICBBU1NFUlQo
bV9zaGFyZWRCdWZmZXIpOwotICAgIHJldHVybiBtX3NoYXJlZEJ1ZmZlcjsKLX0KLQogYm9vbCBT
dHJpbmdJbXBsOjpjb250YWluc09ubHlXaGl0ZXNwYWNlKCkKIHsKICAgICAvLyBGSVhNRTogVGhl
IGRlZmluaXRpb24gb2Ygd2hpdGVzcGFjZSBoZXJlIGluY2x1ZGVzIGEgbnVtYmVyIG9mIGNoYXJh
Y3RlcnMKQEAgLTExNDYsMTggKzExMTIsNCBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmlu
Z0ltcGw6OmNyZWF0CiAgICAgcmV0dXJuIHRlcm1pbmF0ZWRTdHJpbmcucmVsZWFzZSgpOwogfQog
Ci1QYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnRocmVhZHNhZmVDb3B5KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gY3JlYXRlKG1fZGF0YSwgbV9sZW5ndGgpOwotfQotCi1QYXNzUmVm
UHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNyb3NzVGhyZWFkU3RyaW5nKCkKLXsKLSAgICBp
ZiAoU2hhcmVkVUNoYXIqIHNoYXJlZEJ1ZmZlciA9IHRoaXMtPnNoYXJlZEJ1ZmZlcigpKQotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0cmluZ0ltcGwobV9kYXRhLCBtX2xlbmd0aCwgc2hh
cmVkQnVmZmVyLT5jcm9zc1RocmVhZENvcHkoKSkpOwotCi0gICAgLy8gSWYgbm8gc2hhcmVkIGJ1
ZmZlciBpcyBhdmFpbGFibGUsIGNyZWF0ZSBhIGNvcHkuCi0gICAgcmV0dXJuIHRocmVhZHNhZmVD
b3B5KCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL3RleHQvU3RyaW5nSW1wbC5oCShyZXZpc2lvbiA5ODI4OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1
LDcgKzI1LDYgQEAKIAogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNU
eXBlLmg+Ci0jaW5jbHVkZSA8d3RmL0Nyb3NzVGhyZWFkUmVmQ291bnRlZC5oPgogI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL093bkZhc3RNYWxsb2NQdHIuaD4KICNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CkBAIC01Nyw4ICs1Niw2IEBAIHN0cnVjdCBVQ2hhckJ1
ZmZlclRyYW5zbGF0b3I7CiAKIGVudW0gVGV4dENhc2VTZW5zaXRpdml0eSB7IFRleHRDYXNlU2Vu
c2l0aXZlLCBUZXh0Q2FzZUluc2Vuc2l0aXZlIH07CiAKLXR5cGVkZWYgT3duRmFzdE1hbGxvY1B0
cjxjb25zdCBVQ2hhcj4gU2hhcmFibGVVQ2hhcjsKLXR5cGVkZWYgQ3Jvc3NUaHJlYWRSZWZDb3Vu
dGVkPFNoYXJhYmxlVUNoYXI+IFNoYXJlZFVDaGFyOwogdHlwZWRlZiBib29sICgqQ2hhcmFjdGVy
TWF0Y2hGdW5jdGlvblB0cikoVUNoYXIpOwogdHlwZWRlZiBib29sICgqSXNXaGl0ZVNwYWNlRnVu
Y3Rpb25QdHIpKFVDaGFyKTsKIApAQCAtNzcsNyArNzQsNiBAQCBwcml2YXRlOgogICAgICAgICBC
dWZmZXJJbnRlcm5hbCwKICAgICAgICAgQnVmZmVyT3duZWQsCiAgICAgICAgIEJ1ZmZlclN1YnN0
cmluZywKLSAgICAgICAgQnVmZmVyU2hhcmVkLAogICAgIH07CiAKICAgICAvLyBVc2VkIHRvIGNv
bnN0cnVjdCBzdGF0aWMgc3RyaW5ncywgd2hpY2ggaGF2ZSBhbiBzcGVjaWFsIHJlZkNvdW50IHRo
YXQgY2FuIG5ldmVyIGhpdCB6ZXJvLgpAQCAtMTM0LDI1ICsxMzAsMTIgQEAgcHJpdmF0ZToKICAg
ICAgICAgQVNTRVJUKG1fc3Vic3RyaW5nQnVmZmVyLT5idWZmZXJPd25lcnNoaXAoKSAhPSBCdWZm
ZXJTdWJzdHJpbmcpOwogICAgIH0KIAotICAgIC8vIFVzZWQgdG8gY29uc3RydWN0IG5ldyBzdHJp
bmdzIHNoYXJpbmcgYW4gZXhpc3RpbmcgU2hhcmVkVUNoYXIgKEJ1ZmZlclNoYXJlZCkKLSAgICBT
dHJpbmdJbXBsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFBhc3NS
ZWZQdHI8U2hhcmVkVUNoYXI+IHNoYXJlZEJ1ZmZlcikKLSAgICAgICAgOiBtX3JlZkNvdW50KHNf
cmVmQ291bnRJbmNyZW1lbnQpCi0gICAgICAgICwgbV9sZW5ndGgobGVuZ3RoKQotICAgICAgICAs
IG1fZGF0YShjaGFyYWN0ZXJzKQotICAgICAgICAsIG1fc2hhcmVkQnVmZmVyKHNoYXJlZEJ1ZmZl
ci5sZWFrUmVmKCkpCi0gICAgICAgICwgbV9oYXNoQW5kRmxhZ3MoQnVmZmVyU2hhcmVkKQotICAg
IHsKLSAgICAgICAgQVNTRVJUKG1fZGF0YSk7Ci0gICAgICAgIEFTU0VSVChtX2xlbmd0aCk7Ci0g
ICAgfQotCiBwdWJsaWM6CiAgICAgflN0cmluZ0ltcGwoKTsKIAogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFN0cmluZ0ltcGw+IGNyZWF0ZShjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gY3JlYXRlKGNvbnN0IGNoYXIqLCB1bnNp
Z25lZCBsZW5ndGgpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGNyZWF0ZShj
b25zdCBjaGFyKik7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gY3JlYXRlKGNv
bnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoLCBQYXNzUmVmUHRyPFNoYXJlZFVDaGFyPiBzaGFy
ZWRCdWZmZXIpOwogICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIFBhc3NSZWZQdHI8U3RyaW5nSW1w
bD4gY3JlYXRlKFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gcmVwLCB1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCkKICAgICB7CiAgICAgICAgIEFTU0VSVChyZXApOwpAQCAtMjA4LDcgKzE5
MSw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZG9wdChT
dHJpbmdCdWZmZXImKTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
bGVuZ3RoOyB9Ci0gICAgU2hhcmVkVUNoYXIqIHNoYXJlZEJ1ZmZlcigpOwogICAgIGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CiAKICAgICBzaXplX3Qg
Y29zdCgpCkBAIC0zMTgsMTIgKzMwMCwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtZW1jcHko
ZGVzdGluYXRpb24sIHNvdXJjZSwgbnVtQ2hhcmFjdGVycyAqIHNpemVvZihVQ2hhcikpOwogICAg
IH0KIAotICAgIC8vIFJldHVybnMgYSBTdHJpbmdJbXBsIHN1aXRhYmxlIGZvciB1c2Ugb24gYW5v
dGhlciB0aHJlYWQuCi0gICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBjcm9zc1RocmVhZFN0cmlu
ZygpOwotICAgIC8vIE1ha2VzIGEgZGVlcCBjb3B5LiBIZWxwZnVsIG9ubHkgaWYgeW91IG5lZWQg
dG8gdXNlIGEgU3RyaW5nIG9uIGFub3RoZXIgdGhyZWFkCi0gICAgLy8gKHVzZSBjcm9zc1RocmVh
ZFN0cmluZyBpZiB0aGUgbWV0aG9kIGNhbGwgZG9lc24ndCBuZWVkIHRvIGJlIHRocmVhZHNhZmUp
LgotICAgIC8vIFNpbmNlIFN0cmluZ0ltcGwgb2JqZWN0cyBhcmUgaW1tdXRhYmxlLCB0aGVyZSdz
IG5vIG90aGVyIHJlYXNvbiB0byBtYWtlIGEgY29weS4KLSAgICBQYXNzUmVmUHRyPFN0cmluZ0lt
cGw+IHRocmVhZHNhZmVDb3B5KCkgY29uc3Q7CisgICAgLy8gU29tZSBzdHJpbmcgZmVhdHVyZXMs
IGxpa2UgcmVmY291bnRpbmcgYW5kIHRoZSBhdG9taWNpdHkgZmxhZywgYXJlIG5vdAorICAgIC8v
IHRocmVhZC1zYWZlLiBXZSBhY2hpZXZlIHRocmVhZCBzYWZldHkgYnkgaXNvbGF0aW9uLCBnaXZp
bmcgZWFjaCB0aHJlYWQKKyAgICAvLyBpdHMgb3duIGNvcHkgb2YgdGhlIHN0cmluZy4KKyAgICBQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IGlzb2xhdGVkQ29weSgpIGNvbnN0OwogCiAgICAgUGFzc1Jl
ZlB0cjxTdHJpbmdJbXBsPiBzdWJzdHJpbmcodW5zaWduZWQgcG9zLCB1bnNpZ25lZCBsZW4gPSBV
SU5UX01BWCk7CiAKQEAgLTQxOCw3ICszOTgsNiBAQCBwcml2YXRlOgogICAgIHVuaW9uIHsKICAg
ICAgICAgdm9pZCogbV9idWZmZXI7CiAgICAgICAgIFN0cmluZ0ltcGwqIG1fc3Vic3RyaW5nQnVm
ZmVyOwotICAgICAgICBTaGFyZWRVQ2hhciogbV9zaGFyZWRCdWZmZXI7CiAgICAgfTsKICAgICBt
dXRhYmxlIHVuc2lnbmVkIG1faGFzaEFuZEZsYWdzOwogfTsKQEAgLTQ1NSw2ICs0MzQsMTEgQEAg
c3RhdGljIGlubGluZSBib29sIGlzU3BhY2VPck5ld2xpbmUoVUNoYQogICAgIHJldHVybiBjIDw9
IDB4N0YgPyBXVEY6OmlzQVNDSUlTcGFjZShjKSA6IFdURjo6VW5pY29kZTo6ZGlyZWN0aW9uKGMp
ID09IFdURjo6VW5pY29kZTo6V2hpdGVTcGFjZU5ldXRyYWw7CiB9CiAKK2lubGluZSBQYXNzUmVm
UHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6Omlzb2xhdGVkQ29weSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGNyZWF0ZShtX2RhdGEsIG1fbGVuZ3RoKTsKK30KKwogc3RydWN0IFN0cmluZ0hhc2g7
CiAKIC8vIFN0cmluZ0hhc2ggaXMgdGhlIGRlZmF1bHQgaGFzaCBmb3IgU3RyaW5nSW1wbCogYW5k
IFJlZlB0cjxTdHJpbmdJbXBsPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0
L1dURlN0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90
ZXh0L1dURlN0cmluZy5jcHAJKHJldmlzaW9uIDk4Mjg5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3OCwxOCArNTc4
LDExIEBAIGZsb2F0IFN0cmluZzo6dG9GbG9hdChib29sKiBvaywgYm9vbCogZGkKICAgICByZXR1
cm4gbV9pbXBsLT50b0Zsb2F0KG9rLCBkaWRSZWFkTnVtYmVyKTsKIH0KIAotU3RyaW5nIFN0cmlu
Zzo6dGhyZWFkc2FmZUNvcHkoKSBjb25zdAorU3RyaW5nIFN0cmluZzo6aXNvbGF0ZWRDb3B5KCkg
Y29uc3QKIHsKICAgICBpZiAoIW1faW1wbCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAg
IHJldHVybiBtX2ltcGwtPnRocmVhZHNhZmVDb3B5KCk7Ci19Ci0KLVN0cmluZyBTdHJpbmc6OmNy
b3NzVGhyZWFkU3RyaW5nKCkgY29uc3QKLXsKLSAgICBpZiAoIW1faW1wbCkKLSAgICAgICAgcmV0
dXJuIFN0cmluZygpOwotICAgIHJldHVybiBtX2ltcGwtPmNyb3NzVGhyZWFkU3RyaW5nKCk7Cisg
ICAgcmV0dXJuIG1faW1wbC0+aXNvbGF0ZWRDb3B5KCk7CiB9CiAKIHZvaWQgU3RyaW5nOjpzcGxp
dChjb25zdCBTdHJpbmcmIHNlcGFyYXRvciwgYm9vbCBhbGxvd0VtcHR5RW50cmllcywgVmVjdG9y
PFN0cmluZz4mIHJlc3VsdCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
dGV4dC9XVEZTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L3RleHQvV1RGU3RyaW5nLmgJKHJldmlzaW9uIDk4Mjg5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi90ZXh0L1dURlN0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjQsMTMgKzI2NCw3
IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgcGVyY2VudGFnZShpbnQmIHBlcmNlbnRhZ2UpIGNvbnN0
OwogCi0gICAgLy8gUmV0dXJucyBhIFN0cmluZ0ltcGwgc3VpdGFibGUgZm9yIHVzZSBvbiBhbm90
aGVyIHRocmVhZC4KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIGNyb3NzVGhyZWFkU3Ry
aW5nKCkgY29uc3Q7Ci0gICAgLy8gTWFrZXMgYSBkZWVwIGNvcHkuIEhlbHBmdWwgb25seSBpZiB5
b3UgbmVlZCB0byB1c2UgYSBTdHJpbmcgb24gYW5vdGhlciB0aHJlYWQKLSAgICAvLyAodXNlIGNy
b3NzVGhyZWFkU3RyaW5nIGlmIHRoZSBtZXRob2QgY2FsbCBkb2Vzbid0IG5lZWQgdG8gYmUgdGhy
ZWFkc2FmZSkuCi0gICAgLy8gU2luY2UgdGhlIHVuZGVybHlpbmcgU3RyaW5nSW1wbCBvYmplY3Rz
IGFyZSBpbW11dGFibGUsIHRoZXJlJ3Mgbm8gb3RoZXIgcmVhc29uCi0gICAgLy8gdG8gZXZlciBw
cmVmZXIgY29weSgpIG92ZXIgcGxhaW4gb2xkIGFzc2lnbm1lbnQuCi0gICAgV1RGX0VYUE9SVF9Q
UklWQVRFIFN0cmluZyB0aHJlYWRzYWZlQ29weSgpIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBTdHJpbmcgaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiAKICAgICAvLyBQcmV2ZW50IFN0cmlu
Z3MgZnJvbSBiZWluZyBpbXBsaWNpdGx5IGNvbnZlcnRhYmxlIHRvIGJvb2wgYXMgaXQgd2lsbCBi
ZSBhbWJpZ3VvdXMgb24gYW55IHBsYXRmb3JtIHRoYXQKICAgICAvLyBhbGxvd3MgaW1wbGljaXQg
Y29udmVyc2lvbiB0byBhbm90aGVyIHBvaW50ZXIgdHlwZSAoZS5nLiwgTWFjIGFsbG93cyBpbXBs
aWNpdCBjb252ZXJzaW9uIHRvIE5TU3RyaW5nKikuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUveWFyci9ZYXJyUGF0dGVybi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS95YXJyL1lhcnJQYXR0ZXJuLmgJKHJldmlzaW9uIDk4Mjg5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3lhcnIvWWFyclBhdHRlcm4uaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBA
QAogCiAjaW5jbHVkZSA8cnVudGltZS9VU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRB
cml0aG1ldGljLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdEdsdWUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL0Nyb3NzVGhyZWFkUmVmQ291
bnRlZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9Gb3J3YXJkaW5nSGVh
ZGVycy93dGYvQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmgJKHJldmlzaW9uIDk4Mjg5KQorKysgU291
cmNlL0phdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9Dcm9zc1RocmVhZFJlZkNv
dW50ZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMSArMCwwIEBACi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA5
ODI4OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE1NiBAQAorMjAxMS0xMC0yNCAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJlbW92ZWQgU2hhcmVkVUNoYXIgYW5kIHRpZ2h0ZW5lZCBsYW5ndWFnZSBh
cm91bmQgaXRzIHByZXZpb3VzIHVzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTcwNjk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgLSBSZW5hbWVkICJ0aHJlYWRTYWZlQ29weSIgYW5kICJjcm9zc1RocmVh
ZENvcHkiIHRvICJpc29sYXRlZENvcHkiIGJlY2F1c2UKKyAgICAgICAgdGhlIGZvcm1lciBuYW1l
cyBnYXZlIHRoZSBkYW5nZXJvdXMgbWlzaW1wcmVzc2lvbiB0aGF0IHRoZSByZXN1bHRpbmcgb2Jq
ZWN0CisgICAgICAgIHdhcyB0aHJlYWQtc2FmZSwgd2hpY2ggaXMgbm90IHRydWUuCisgICAgICAg
IAorICAgICAgICAtIFVwZGF0ZWQgYSBidW5jaCBvZiBmaWxlcyBmb3IgaGVhZGVyIGRlcGVuZGVu
Y3kgY2hhbmdlcywgbm93IHRoYXQKKyAgICAgICAgQ3Jvc3NUaHJlYWRSZWZDb3VudGVkIGlzIGdv
bmUuCisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93dGYvQ3Jvc3NUaHJlYWRSZWZDb3Vu
dGVkLmg6IFJlbW92ZWQuCisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisgICAgICAgICogYmlu
ZGluZ3MvanMvU2NyaXB0SGVhcFNuYXBzaG90Lmg6CisgICAgICAgICogYmluZGluZ3MvdjgvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6cmVsZWFzZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFs
dWU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU1Byb3BlcnR5U291
cmNlRGF0YS5oOgorICAgICAgICAqIGNzcy9DU1NWYWx1ZS5oOgorICAgICAgICAqIGNzcy9TdHls
ZU1lZGlhLmg6CisgICAgICAgICogY3NzL1dlYktpdENTU01hdHJpeC5oOgorICAgICAgICAqIGRv
bS9RdWFsaWZpZWROYW1lLmg6CisgICAgICAgICogZmlsZWFwaS9Mb2NhbEZpbGVTeXN0ZW0uaDoK
KyAgICAgICAgKFdlYkNvcmU6OkxvY2FsRmlsZVN5c3RlbTo6U3lzdGVtQmFzZVBhdGg6Om9wZXJh
dG9yIFN0cmluZyk6CisgICAgICAgICogaGlzdG9yeS9DYWNoZWRGcmFtZS5oOgorICAgICAgICAq
IGhpc3RvcnkvQ2FjaGVkUGFnZS5oOgorICAgICAgICAqIGhpc3RvcnkvSGlzdG9yeUl0ZW0uaDoK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNTdHlsZS5oOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50Lmg6CisgICAgICAgICogbG9hZGVyL0Zvcm1TdGF0ZS5o
OgorICAgICAgICAqIGxvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmg6CisgICAgICAgICogbG9h
ZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2Vy
VGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6TWFpblRocmVhZEJyaWRnZSk6Cisg
ICAgICAgICogbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okljb25EYXRhYmFzZTo6b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpJY29uRGF0YWJhc2U6OnN5
bmNocm9ub3VzSWNvbkZvclBhZ2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6SWNvbkRhdGFiYXNl
OjpzeW5jaHJvbm91c0ljb25VUkxGb3JQYWdlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6Okljb25E
YXRhYmFzZTo6cmV0YWluSWNvbkZvclBhZ2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6SWNvbkRh
dGFiYXNlOjpyZWxlYXNlSWNvbkZvclBhZ2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6SWNvbkRh
dGFiYXNlOjpzZXRJY29uRGF0YUZvckljb25VUkwpOgorICAgICAgICAoV2ViQ29yZTo6SWNvbkRh
dGFiYXNlOjpzZXRJY29uVVJMRm9yUGFnZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpJY29uRGF0
YWJhc2U6OmRhdGFiYXNlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpJY29uRGF0YWJhc2U6OmRl
ZmF1bHREYXRhYmFzZUZpbGVuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkltcG9ydGVkSWNvblVS
TEZvclBhZ2VVUkxXb3JrSXRlbTo6SW1wb3J0ZWRJY29uVVJMRm9yUGFnZVVSTFdvcmtJdGVtKToK
KyAgICAgICAgKFdlYkNvcmU6OkltcG9ydGVkSWNvbkRhdGFGb3JQYWdlVVJMV29ya0l0ZW06Oklt
cG9ydGVkSWNvbkRhdGFGb3JQYWdlVVJMV29ya0l0ZW0pOgorICAgICAgICAqIHBhZ2UvQ29udGVu
dFNlY3VyaXR5UG9saWN5Lmg6CisgICAgICAgICogcGFnZS9Db29yZGluYXRlcy5oOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZXM6Omlzb2xhdGVkQ29weSk6CisgICAgICAgICogcGFnZS9H
ZW9wb3NpdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6R2VvcG9zaXRpb246Omlzb2xhdGVkQ29w
eSk6CisgICAgICAgICogcGFnZS9TZWN1cml0eU9yaWdpbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTZWN1cml0eU9yaWdpbjo6U2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6U2Vj
dXJpdHlPcmlnaW46Omlzb2xhdGVkQ29weSk6CisgICAgICAgICogcGFnZS9TZWN1cml0eU9yaWdp
bi5oOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjo6OmNv
cHkpOgorICAgICAgICAqIHBsYXRmb3JtL0ZpbGVDaG9vc2VyLmg6CisgICAgICAgICogcGxhdGZv
cm0vS1VSTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpjb3B5KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9jZi9TY2hlZHVsZVBhaXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Js
b2JEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JEYXRhSXRlbTo6ZGV0YWNoRnJvbUN1
cnJlbnRUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYkRhdGE6OmRldGFjaEZyb21DdXJy
ZW50VGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJNYXAuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRUUEhlYWRlck1hcDo6Y29weURhdGEpOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvTUlNRUhlYWRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VFcnJvckJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VFcnJv
ckJhc2U6OmNvcHkpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VMb2FkSW5m
by5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpjb3B5RGF0YSk6CisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6Y29weURhdGEpOgorICAgICAgICAqIHBs
YXRmb3JtL3NxbC9TUUxWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxWYWx1ZTo6U1FM
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVmFsdWU6OnN0cmluZyk6CisgICAgICAgICog
cmVuZGVyaW5nL3N0eWxlL1F1b3Rlc0RhdGEuaDoKKyAgICAgICAgKiBzdG9yYWdlL0Fic3RyYWN0
RGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlR3VpZFZlcnNpb25NYXApOgor
ICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6QWJzdHJhY3REYXRhYmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeSk6
CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpzdHJpbmdJZGVudGlmaWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OmRpc3BsYXlOYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OmZpbGVOYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkFic3RyYWN0RGF0YWJhc2U6OnNldEV4cGVjdGVkVmVyc2lvbik6CisgICAgICAgIChXZWJD
b3JlOjpBYnN0cmFjdERhdGFiYXNlOjpnZXRDYWNoZWRWZXJzaW9uKToKKyAgICAgICAgKiBzdG9y
YWdlL0NoYW5nZVZlcnNpb25XcmFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNoYW5nZVZl
cnNpb25XcmFwcGVyOjpDaGFuZ2VWZXJzaW9uV3JhcHBlcik6CisgICAgICAgICogc3RvcmFnZS9E
YXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6RGF0YWJhc2UpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OnRhYmxlTmFtZXMpOgorICAgICAgICAqIHN0b3JhZ2Uv
RGF0YWJhc2VEZXRhaWxzLmg6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpzZXREYXRhYmFzZURpcmVjdG9y
eVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpkYXRhYmFzZURpcmVj
dG9yeVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyRGF0
YWJhc2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6Y2FuRXN0YWJs
aXNoRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpvcmlnaW5Q
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6ZnVsbFBhdGhGb3JEYXRh
YmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnBvcHVsYXRlT3JpZ2lu
cyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRhdGFiYXNlTmFtZXNGb3JP
cmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjphZGRPcGVuRGF0YWJh
c2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpzZXRRdW90YSk6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnJlY29yZENyZWF0aW5nRGF0YWJhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpyZWNvcmREZWxldGluZ0RhdGFiYXNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6cmVjb3JkRGVsZXRpbmdPcmln
aW4pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpzY2hlZHVsZU5vdGlmeURh
dGFiYXNlQ2hhbmdlZCk6CisgICAgICAgICogc3RvcmFnZS9PcmlnaW5RdW90YU1hbmFnZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6T3JpZ2luUXVvdGFNYW5hZ2VyOjp0cmFja09yaWdpbik6Cisg
ICAgICAgIChXZWJDb3JlOjpPcmlnaW5RdW90YU1hbmFnZXI6OmFkZERhdGFiYXNlKToKKyAgICAg
ICAgKiBzdG9yYWdlL1NRTEVycm9yLmg6CisgICAgICAgIChXZWJDb3JlOjpTUUxFcnJvcjo6bWVz
c2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxFcnJvcjo6U1FMRXJyb3IpOgorICAgICAgICAq
IHN0b3JhZ2UvU1FMUmVzdWx0U2V0Um93TGlzdC5oOgorICAgICAgICAqIHN0b3JhZ2UvU1FMU3Rh
dGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFN0YXRlbWVudDo6U1FMU3RhdGVtZW50
KToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTdG9yYWdlQXJlYVN5bmM6OlN0b3JhZ2VBcmVhU3luYyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdG9yYWdlQXJlYVN5bmM6OnN5bmNUaW1lckZpcmVkKToKKyAgICAgICAgKiBzdG9yYWdlL1N0
b3JhZ2VBcmVhU3luYy5oOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZU1hcC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlTWFwOjppbXBvcnRJdGVtKToKKyAgICAgICAgKiBzdG9yYWdl
L1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1l
c3BhY2VJbXBsOjpTdG9yYWdlTmFtZXNwYWNlSW1wbCk6CisgICAgICAgICogc3RvcmFnZS9TdG9y
YWdlU3luY01hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVN5bmNNYW5hZ2Vy
OjpTdG9yYWdlU3luY01hbmFnZXIpOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZVRyYWNrZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OlN0b3JhZ2VUcmFja2VyKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpzeW5jSW1wb3J0T3JpZ2luSWRlbnRp
ZmllcnMpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OnN5bmNGaWxlU3lzdGVt
QW5kVHJhY2tlckRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpz
ZXRPcmlnaW5EZXRhaWxzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjp3aWxs
RGVsZXRlQWxsT3JpZ2lucyk6CisgICAgICAgICogc3ZnL1NWR1BhdGhTZWcuaDoKKyAgICAgICAg
KiB3b3JrZXJzL0RlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXJlZFdvcmtlclByb3h5Ojp1cmwpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVk
V29ya2VyUHJveHk6Om5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkV29ya2VyUHJveHk6
OlNoYXJlZFdvcmtlclByb3h5KToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmF1bHRTaGFyZWRXb3Jr
ZXJSZXBvc2l0b3J5OjpnZXRQcm94eSk6CisgICAgICAgICogd29ya2Vycy9TaGFyZWRXb3JrZXJU
aHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkV29ya2VyVGhyZWFkOjpTaGFyZWRX
b3JrZXJUaHJlYWQpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHkuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyRXhjZXB0aW9uVGFzazo6V29ya2VyRXhjZXB0aW9u
VGFzayk6CisgICAgICAgIChXZWJDb3JlOjpQb3N0TWVzc2FnZVRvUGFnZUluc3BlY3RvclRhc2s6
OlBvc3RNZXNzYWdlVG9QYWdlSW5zcGVjdG9yVGFzayk6CisgICAgICAgICogd29ya2Vycy9Xb3Jr
ZXJSdW5Mb29wLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclJ1bkxvb3A6OnBvc3RUYXNr
Rm9yTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJSdW5Mb29wOjpUYXNrOjpUYXNrKToK
KyAgICAgICAgKiB3b3JrZXJzL1dvcmtlclRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
b3JrZXJUaHJlYWRTdGFydHVwRGF0YTo6V29ya2VyVGhyZWFkU3RhcnR1cERhdGEpOgorCiAyMDEx
LTEwLTI0ICBKb3NodWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5i
cmVhayBiaW5kaW5nIGdlbmVyYXRpb24gdGVzdHMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShy
ZXZpc2lvbiA5ODI4OSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5n
IGNvcHkpCkBAIC0zODAsNyArMzgwLDcgQEAgX19aTjdXZWJDb3JlMTRTY3JvbGxhYmxlQXJlYTZz
Y3JvbGxFTlNfMQogX19aTjdXZWJDb3JlMTRTY3JvbGxhYmxlQXJlYUMyRXYKIF9fWk43V2ViQ29y
ZTE0U2Nyb2xsYWJsZUFyZWFEMkV2CiBfX1pON1dlYkNvcmUxNFNjcm9sbGJhclRoZW1lNXRoZW1l
RXYKLV9fWk43V2ViQ29yZTE0U2VjdXJpdHlPcmlnaW4xNHRocmVhZHNhZmVDb3B5RXYKK19fWk43
V2ViQ29yZTE0U2VjdXJpdHlPcmlnaW4xMmlzb2xhdGVkQ29weUV2CiBfX1pON1dlYkNvcmUxNFNl
Y3VyaXR5T3JpZ2luMTZjcmVhdGVGcm9tU3RyaW5nRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJD
b3JlMTRTZWN1cml0eU9yaWdpbjE4c2V0TG9jYWxMb2FkUG9saWN5RU5TMF8xNUxvY2FsTG9hZFBv
bGljeUUKIF9fWk43V2ViQ29yZTE0U2VjdXJpdHlPcmlnaW4xOHNob3VsZEhpZGVSZWZlcnJlckVS
S05TXzRLVVJMRVJLTjNXVEY2U3RyaW5nRQpJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGlu
Z0hlYWRlcnMvd3RmL0Nyb3NzVGhyZWFkUmVmQ291bnRlZC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9Dcm9zc1RocmVhZFJlZkNvdW50ZWQuaAko
cmV2aXNpb24gOTgyODkpCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYv
Q3Jvc3NUaHJlYWRSZWZDb3VudGVkLmgJKHdvcmtpbmcgY29weSkKQEAgLTEgKzAsMCBAQAotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Nyb3NzVGhyZWFkUmVmQ291bnRlZC5oPgpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0SGVhcFNuYXBzaG90LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0SGVhcFNuYXBzaG90LmgJKHJldmlz
aW9uIDk4Mjg5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0SGVhcFNuYXBz
aG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNkZWZpbmUgU2NyaXB0SGVh
cFNuYXBzaG90X2gKIAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHJl
dmlzaW9uIDk4Mjg5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk1Niw3ICsxOTU2LDcgQEAgU2VyaWFs
aXplZFNjcmlwdFZhbHVlKiBTZXJpYWxpemVkU2NyaXB0VgogUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6cmVsZWFzZSgpCiB7CiAgICAgUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcmVzdWx0ID0gYWRvcHRSZWYobmV3IFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZShtX2RhdGEpKTsKLSAgICBtX2RhdGEgPSBTdHJpbmcoKS5jcm9zc1RocmVh
ZFN0cmluZygpOworICAgIG1fZGF0YSA9IFN0cmluZygpOwogICAgIHJldHVybiByZXN1bHQucmVs
ZWFzZSgpOwogfQogCkBAIC0xOTk1LDcgKzE5OTUsNyBAQCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OlNlcmlhbGl6ZWRTY3JpcHRWCiAgICAgICAgIGRpZFRocm93ID0gdHJ1ZTsKICAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgU2VyaWFsaXplcjo6U3VjY2VzczoKLSAgICAgICAgbV9kYXRhID0gU3Ry
aW5nKFN0cmluZ0ltcGw6OmFkb3B0KHdyaXRlci5kYXRhKCkpKS5jcm9zc1RocmVhZFN0cmluZygp
OworICAgICAgICBtX2RhdGEgPSBTdHJpbmcoU3RyaW5nSW1wbDo6YWRvcHQod3JpdGVyLmRhdGEo
KSkpLmlzb2xhdGVkQ29weSgpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBTZXJpYWxpemVy
OjpKU0V4Y2VwdGlvbjoKICAgICAgICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlIGJlY2F1
c2UgdGhpcyBjYXNlIHdhcyBoYW5kbGVkIGFib3ZlLgpAQCAtMjAwNiw3ICsyMDA2LDcgQEAgU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpTZXJpYWxpemVkU2NyaXB0VgogCiBTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShjb25zdCBTdHJpbmcmIHdpcmVEYXRhKQogewot
ICAgIG1fZGF0YSA9IHdpcmVEYXRhLmNyb3NzVGhyZWFkU3RyaW5nKCk7CisgICAgbV9kYXRhID0g
d2lyZURhdGEuaXNvbGF0ZWRDb3B5KCk7CiB9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplKE1lc3NhZ2VQb3J0QXJyYXkqIG1lc3NhZ2VQ
b3J0cykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmgJ
KHJldmlzaW9uIDk4Mjg5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5U291cmNl
RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8dXRpbGl0
eT4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZS5oCShyZXZpc2lvbiA5ODI4
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Myw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJLVVJMSGFzaC5oIgogI2luY2x1ZGUgPHd0Zi9MaXN0
SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVNZWRpYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZU1lZGlh
LmgJKHJldmlzaW9uIDk4Mjg5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlTWVkaWEuaAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2RlZmluZSBTdHlsZU1lZGlhX2gKIAog
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0
Q1NTTWF0cml4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU01h
dHJpeC5oCShyZXZpc2lvbiA5ODI4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NN
YXRyaXguaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlRyYW5z
Zm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9RdWFsaWZpZWROYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L1F1YWxpZmllZE5hbWUuaAkocmV2aXNpb24gOTgyODkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
UXVhbGlmaWVkTmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjZGVmaW5l
IFF1YWxpZmllZE5hbWVfaAogCiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0xvY2Fs
RmlsZVN5c3RlbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTG9jYWxG
aWxlU3lzdGVtLmgJKHJldmlzaW9uIDk4Mjg5KQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9M
b2NhbEZpbGVTeXN0ZW0uaAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCBwcml2YXRl
OgogICAgICAgICBleHBsaWNpdCBTeXN0ZW1CYXNlUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpIDog
bV92YWx1ZShwYXRoKSB7IH0KICAgICAgICAgb3BlcmF0b3IgU3RyaW5nKCkgY29uc3QKICAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUudGhyZWFkc2FmZUNvcHkoKTsKKyAgICAg
ICAgICAgIHJldHVybiBtX3ZhbHVlLmlzb2xhdGVkQ29weSgpOwogICAgICAgICB9CiAgICAgcHJp
dmF0ZToKICAgICAgICAgU3RyaW5nIG1fdmFsdWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9oaXN0
b3J5L0NhY2hlZEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaGlzdG9yeS9D
YWNoZWRGcmFtZS5oCShyZXZpc2lvbiA5ODI4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2hpc3Rvcnkv
Q2FjaGVkRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUg
IktVUkwuaCIKICNpbmNsdWRlICJTY3JpcHRDYWNoZWRGcmFtZURhdGEuaCIKICNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9oaXN0b3J5L0NhY2hlZFBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9oaXN0
b3J5L0NhY2hlZFBhZ2UuaAkocmV2aXNpb24gOTgyODkpCisrKyBTb3VyY2UvV2ViQ29yZS9oaXN0
b3J5L0NhY2hlZFBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmlu
ZSBDYWNoZWRQYWdlX2gKIAogI2luY2x1ZGUgIkNhY2hlZEZyYW1lLmgiCisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIApJbmRleDogU291cmNl
L1dlYkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uaAkocmV2aXNpb24gOTgyODkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcg
QEAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAK
ICNpZiBQTEFURk9STShNQUMpCiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmgJKHJldmlzaW9uIDk4Mjg5KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oCShyZXZpc2lvbiA5ODI4
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgogCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1Ip
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRm9ybVN0YXRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvbG9hZGVyL0Zvcm1TdGF0ZS5oCShyZXZpc2lvbiA5ODI4OSkKKysrIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9Gb3JtU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiAr
MzAsNyBAQAogI2RlZmluZSBGb3JtU3RhdGVfaAogCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuaAkocmV2
aXNpb24gOTgyODkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAjZGVmaW5lIFRleHRSZXNvdXJj
ZURlY29kZXJfaAogCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCisjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvbG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIuY3BwCShyZXZpc2lvbiA5ODI4
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTIsNyArOTIsNyBAQCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpN
YWluVGhyZWFkQnJpZGdlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3Qg
VGhyZWFkYWJsZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0IFN0cmluZyYgb3V0Z29pbmdS
ZWZlcnJlcikKICAgICA6IG1fd29ya2VyQ2xpZW50V3JhcHBlcih3b3JrZXJDbGllbnRXcmFwcGVy
KQogICAgICwgbV9sb2FkZXJQcm94eShsb2FkZXJQcm94eSkKLSAgICAsIG1fdGFza01vZGUodGFz
a01vZGUuY3Jvc3NUaHJlYWRTdHJpbmcoKSkKKyAgICAsIG1fdGFza01vZGUodGFza01vZGUuaXNv
bGF0ZWRDb3B5KCkpCiB7CiAgICAgQVNTRVJUKG1fd29ya2VyQ2xpZW50V3JhcHBlci5nZXQoKSk7
CiAgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza1RvTG9hZGVyKApJbmRleDogU291cmNlL1dlYkNv
cmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCShyZXZpc2lvbiA5ODI4OSkKKysrIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyOCw3ICsxMjgsNyBAQCBib29sIEljb25EYXRhYmFzZTo6b3Blbihjb25zdCBTdHJpbmcm
IGRpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBtX2RhdGFiYXNlRGlyZWN0
b3J5ID0gZGlyZWN0b3J5LmNyb3NzVGhyZWFkU3RyaW5nKCk7CisgICAgbV9kYXRhYmFzZURpcmVj
dG9yeSA9IGRpcmVjdG9yeS5pc29sYXRlZENvcHkoKTsKIAogICAgIC8vIEZvcm11bGF0ZSB0aGUg
ZnVsbCBwYXRoIGZvciB0aGUgZGF0YWJhc2UgZmlsZQogICAgIG1fY29tcGxldGVEYXRhYmFzZVBh
dGggPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9kYXRhYmFzZURpcmVjdG9yeSwgZmlsZW5h
bWUpOwpAQCAtMjI3LDcgKzIyNyw3IEBAIEltYWdlKiBJY29uRGF0YWJhc2U6OnN5bmNocm9ub3Vz
SWNvbkZvclAKICAgICAKICAgICBQYWdlVVJMUmVjb3JkKiBwYWdlUmVjb3JkID0gbV9wYWdlVVJM
VG9SZWNvcmRNYXAuZ2V0KHBhZ2VVUkxPcmlnaW5hbCk7CiAgICAgaWYgKCFwYWdlUmVjb3JkKSB7
Ci0gICAgICAgIHBhZ2VVUkxDb3B5ID0gcGFnZVVSTE9yaWdpbmFsLmNyb3NzVGhyZWFkU3RyaW5n
KCk7CisgICAgICAgIHBhZ2VVUkxDb3B5ID0gcGFnZVVSTE9yaWdpbmFsLmlzb2xhdGVkQ29weSgp
OwogICAgICAgICBwYWdlUmVjb3JkID0gZ2V0T3JDcmVhdGVQYWdlVVJMUmVjb3JkKHBhZ2VVUkxD
b3B5KTsKICAgICB9CiAgICAgCkBAIC0yNjMsNyArMjYzLDcgQEAgSW1hZ2UqIEljb25EYXRhYmFz
ZTo6c3luY2hyb25vdXNJY29uRm9yUAogICAgIC8vIG1hcmsgaXQgdG8gYmUgcmVhZCBieSB0aGUg
YmFja2dyb3VuZCB0aHJlYWQKICAgICBpZiAoaWNvblJlY29yZC0+aW1hZ2VEYXRhU3RhdHVzKCkg
PT0gSW1hZ2VEYXRhU3RhdHVzVW5rbm93bikgewogICAgICAgICBpZiAocGFnZVVSTENvcHkuaXNO
dWxsKCkpCi0gICAgICAgICAgICBwYWdlVVJMQ29weSA9IHBhZ2VVUkxPcmlnaW5hbC5jcm9zc1Ro
cmVhZFN0cmluZygpOworICAgICAgICAgICAgcGFnZVVSTENvcHkgPSBwYWdlVVJMT3JpZ2luYWwu
aXNvbGF0ZWRDb3B5KCk7CiAgICAgCiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3BlbmRp
bmdSZWFkaW5nTG9jayk7CiAgICAgICAgIG1fcGFnZVVSTHNJbnRlcmVzdGVkSW5JY29ucy5hZGQo
cGFnZVVSTENvcHkpOwpAQCAtMzEyLDcgKzMxMiw3IEBAIFN0cmluZyBJY29uRGF0YWJhc2U6OnN5
bmNocm9ub3VzSWNvblVSTEYKICAgICAKICAgICBQYWdlVVJMUmVjb3JkKiBwYWdlUmVjb3JkID0g
bV9wYWdlVVJMVG9SZWNvcmRNYXAuZ2V0KHBhZ2VVUkxPcmlnaW5hbCk7CiAgICAgaWYgKCFwYWdl
UmVjb3JkKQotICAgICAgICBwYWdlUmVjb3JkID0gZ2V0T3JDcmVhdGVQYWdlVVJMUmVjb3JkKHBh
Z2VVUkxPcmlnaW5hbC5jcm9zc1RocmVhZFN0cmluZygpKTsKKyAgICAgICAgcGFnZVJlY29yZCA9
IGdldE9yQ3JlYXRlUGFnZVVSTFJlY29yZChwYWdlVVJMT3JpZ2luYWwuaXNvbGF0ZWRDb3B5KCkp
OwogICAgIAogICAgIC8vIElmIHBhZ2VSZWNvcmQgaXMgTlVMTCwgb25lIG9mIHR3byB0aGluZ3Mg
aXMgdHJ1ZSAtCiAgICAgLy8gMSAtIFRoZSBpbml0aWFsIHVybCBpbXBvcnQgaXMgaW5jb21wbGV0
ZSBhbmQgdGhpcyBwYWdlVVJMIGhhcyBhbHJlYWR5IGJlZW4gbWFya2VkIHRvIGJlIG5vdGlmaWVk
IG9uY2UgaXQgaXMgY29tcGxldGUgaWYgYW4gaWNvblVSTCBleGlzdHMKQEAgLTMyMSw3ICszMjEs
NyBAQCBTdHJpbmcgSWNvbkRhdGFiYXNlOjpzeW5jaHJvbm91c0ljb25VUkxGCiAgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKICAgICAKICAgICAvLyBQb3NzaWJsZSB0aGUgcGFnZVJlY29yZCBpcyBh
cm91bmQgYmVjYXVzZSBpdCdzIGEgcmV0YWluZWQgcGFnZVVSTCB3aXRoIG5vIGljb25VUkwsIHNv
IHdlIGhhdmUgdG8gY2hlY2sKLSAgICByZXR1cm4gcGFnZVJlY29yZC0+aWNvblJlY29yZCgpID8g
cGFnZVJlY29yZC0+aWNvblJlY29yZCgpLT5pY29uVVJMKCkudGhyZWFkc2FmZUNvcHkoKSA6IFN0
cmluZygpOworICAgIHJldHVybiBwYWdlUmVjb3JkLT5pY29uUmVjb3JkKCkgPyBwYWdlUmVjb3Jk
LT5pY29uUmVjb3JkKCktPmljb25VUkwoKS5pc29sYXRlZENvcHkoKSA6IFN0cmluZygpOwogfQog
CiAjaWZkZWYgQ0FOX1RIRU1FX1VSTF9JQ09OCkBAIC00MDYsNyArNDA2LDcgQEAgdm9pZCBJY29u
RGF0YWJhc2U6OnJldGFpbkljb25Gb3JQYWdlVVJMKAogICAgIFN0cmluZyBwYWdlVVJMOwogICAg
IAogICAgIGlmICghcmVjb3JkKSB7Ci0gICAgICAgIHBhZ2VVUkwgPSBwYWdlVVJMT3JpZ2luYWwu
Y3Jvc3NUaHJlYWRTdHJpbmcoKTsKKyAgICAgICAgcGFnZVVSTCA9IHBhZ2VVUkxPcmlnaW5hbC5p
c29sYXRlZENvcHkoKTsKIAogICAgICAgICByZWNvcmQgPSBuZXcgUGFnZVVSTFJlY29yZChwYWdl
VVJMKTsKICAgICAgICAgbV9wYWdlVVJMVG9SZWNvcmRNYXAuc2V0KHBhZ2VVUkwsIHJlY29yZCk7
CkBAIC00MTQsNyArNDE0LDcgQEAgdm9pZCBJY29uRGF0YWJhc2U6OnJldGFpbkljb25Gb3JQYWdl
VVJMKAogICAgIAogICAgIGlmICghcmVjb3JkLT5yZXRhaW4oKSkgewogICAgICAgICBpZiAocGFn
ZVVSTC5pc051bGwoKSkKLSAgICAgICAgICAgIHBhZ2VVUkwgPSBwYWdlVVJMT3JpZ2luYWwuY3Jv
c3NUaHJlYWRTdHJpbmcoKTsKKyAgICAgICAgICAgIHBhZ2VVUkwgPSBwYWdlVVJMT3JpZ2luYWwu
aXNvbGF0ZWRDb3B5KCk7CiAKICAgICAgICAgLy8gVGhpcyBwYWdlIGp1c3QgaGFkIGl0cyByZXRh
aW4gY291bnQgYnVtcGVkIGZyb20gMCB0byAxIC0gUmVjb3JkIHRoYXQgZmFjdAogICAgICAgICBt
X3JldGFpbmVkUGFnZVVSTHMuYWRkKHBhZ2VVUkwpOwpAQCAtNDg5LDcgKzQ4OSw3IEBAIHZvaWQg
SWNvbkRhdGFiYXNlOjpyZWxlYXNlSWNvbkZvclBhZ2VVUkwKICAgICAvLyBNYXJrIHN0dWZmIGZv
ciBkZWxldGlvbiBmcm9tIHRoZSBkYXRhYmFzZSBvbmx5IGlmIHdlJ3JlIG5vdCBpbiBwcml2YXRl
IGJyb3dzaW5nCiAgICAgaWYgKCFtX3ByaXZhdGVCcm93c2luZ0VuYWJsZWQpIHsKICAgICAgICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKG1fcGVuZGluZ1N5bmNMb2NrKTsKLSAgICAgICAgbV9wYWdlVVJM
c1BlbmRpbmdTeW5jLnNldChwYWdlVVJMT3JpZ2luYWwuY3Jvc3NUaHJlYWRTdHJpbmcoKSwgcGFn
ZVJlY29yZC0+c25hcHNob3QodHJ1ZSkpOworICAgICAgICBtX3BhZ2VVUkxzUGVuZGluZ1N5bmMu
c2V0KHBhZ2VVUkxPcmlnaW5hbC5pc29sYXRlZENvcHkoKSwgcGFnZVJlY29yZC0+c25hcHNob3Qo
dHJ1ZSkpOwogICAgIAogICAgICAgICAvLyBJZiB0aGlzIHBhZ2UgaXMgdGhlIGxhc3QgcGFnZSB0
byByZWZlciB0byBhIHBhcnRpY3VsYXIgSWNvblJlY29yZCwgdGhhdCBJY29uUmVjb3JkIG5lZWRz
IHRvCiAgICAgICAgIC8vIGJlIG1hcmtlZCBmb3IgZGVsZXRpb24KQEAgLTUxNSw3ICs1MTUsNyBA
QCB2b2lkIEljb25EYXRhYmFzZTo6c2V0SWNvbkRhdGFGb3JJY29uVVJMCiAgICAgUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gZGF0YSA9IGRhdGFPcmlnaW5hbCA/IGRhdGFPcmlnaW5hbC0+Y29weSgpIDog
UGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+KDApOwogICAgIGlmIChkYXRhKQogICAgICAgICBkYXRh
LT5zZXRNdXRleEZvclZlcmlmaWVyKG1fdXJsQW5kSWNvbkxvY2spOwotICAgIFN0cmluZyBpY29u
VVJMID0gaWNvblVSTE9yaWdpbmFsLmNyb3NzVGhyZWFkU3RyaW5nKCk7CisgICAgU3RyaW5nIGlj
b25VUkwgPSBpY29uVVJMT3JpZ2luYWwuaXNvbGF0ZWRDb3B5KCk7CiAgICAgCiAgICAgVmVjdG9y
PFN0cmluZz4gcGFnZVVSTHM7CiAgICAgewpAQCAtNTkyLDggKzU5Miw4IEBAIHZvaWQgSWNvbkRh
dGFiYXNlOjpzZXRJY29uVVJMRm9yUGFnZVVSTCgKICAgICAgICAgaWYgKHBhZ2VSZWNvcmQgJiYg
cGFnZVJlY29yZC0+aWNvblJlY29yZCgpICYmIHBhZ2VSZWNvcmQtPmljb25SZWNvcmQoKS0+aWNv
blVSTCgpID09IGljb25VUkxPcmlnaW5hbCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIAotICAgICAgICBwYWdlVVJMID0gcGFnZVVSTE9yaWdpbmFsLmNyb3NzVGhyZWFkU3RyaW5n
KCk7Ci0gICAgICAgIGljb25VUkwgPSBpY29uVVJMT3JpZ2luYWwuY3Jvc3NUaHJlYWRTdHJpbmco
KTsKKyAgICAgICAgcGFnZVVSTCA9IHBhZ2VVUkxPcmlnaW5hbC5pc29sYXRlZENvcHkoKTsKKyAg
ICAgICAgaWNvblVSTCA9IGljb25VUkxPcmlnaW5hbC5pc29sYXRlZENvcHkoKTsKIAogICAgICAg
ICBpZiAoIXBhZ2VSZWNvcmQpIHsKICAgICAgICAgICAgIHBhZ2VSZWNvcmQgPSBuZXcgUGFnZVVS
TFJlY29yZChwYWdlVVJMKTsKQEAgLTg1OSwxMyArODU5LDEzIEBAIGJvb2wgSWNvbkRhdGFiYXNl
Ojppc09wZW4oKSBjb25zdAogU3RyaW5nIEljb25EYXRhYmFzZTo6ZGF0YWJhc2VQYXRoKCkgY29u
c3QKIHsKICAgICBNdXRleExvY2tlciBsb2NrZXIobV9zeW5jTG9jayk7Ci0gICAgcmV0dXJuIG1f
Y29tcGxldGVEYXRhYmFzZVBhdGgudGhyZWFkc2FmZUNvcHkoKTsKKyAgICByZXR1cm4gbV9jb21w
bGV0ZURhdGFiYXNlUGF0aC5pc29sYXRlZENvcHkoKTsKIH0KIAogU3RyaW5nIEljb25EYXRhYmFz
ZTo6ZGVmYXVsdERhdGFiYXNlRmlsZW5hbWUoKQogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwo
U3RyaW5nLCBkZWZhdWx0RGF0YWJhc2VGaWxlbmFtZSwgKCJXZWJwYWdlSWNvbnMuZGIiKSk7Ci0g
ICAgcmV0dXJuIGRlZmF1bHREYXRhYmFzZUZpbGVuYW1lLnRocmVhZHNhZmVDb3B5KCk7CisgICAg
cmV0dXJuIGRlZmF1bHREYXRhYmFzZUZpbGVuYW1lLmlzb2xhdGVkQ29weSgpOwogfQogCiAvLyBV
bmxpa2UgZ2V0T3JDcmVhdGVQYWdlVVJMUmVjb3JkKCksIGdldE9yQ3JlYXRlSWNvblJlY29yZCgp
IGRvZXMgbm90IG1hcmsgdGhlIGljb24gYXMgImludGVyZXN0ZWQgaW4gaW1wb3J0IgpAQCAtMjE0
Niw3ICsyMTQ2LDcgQEAgY2xhc3MgSW1wb3J0ZWRJY29uVVJMRm9yUGFnZVVSTFdvcmtJdGVtIAog
cHVibGljOgogICAgIEltcG9ydGVkSWNvblVSTEZvclBhZ2VVUkxXb3JrSXRlbShJY29uRGF0YWJh
c2VDbGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiBwYWdlVVJMKQogICAgICAgICA6IENsaWVu
dFdvcmtJdGVtKGNsaWVudCkKLSAgICAgICAgLCBtX3BhZ2VVUkwobmV3IFN0cmluZyhwYWdlVVJM
LnRocmVhZHNhZmVDb3B5KCkpKQorICAgICAgICAsIG1fcGFnZVVSTChuZXcgU3RyaW5nKHBhZ2VV
UkwuaXNvbGF0ZWRDb3B5KCkpKQogICAgIHsgfQogICAgIAogICAgIHZpcnR1YWwgfkltcG9ydGVk
SWNvblVSTEZvclBhZ2VVUkxXb3JrSXRlbSgpCkBAIC0yMTY5LDcgKzIxNjksNyBAQCBjbGFzcyBJ
bXBvcnRlZEljb25EYXRhRm9yUGFnZVVSTFdvcmtJdGVtCiBwdWJsaWM6CiAgICAgSW1wb3J0ZWRJ
Y29uRGF0YUZvclBhZ2VVUkxXb3JrSXRlbShJY29uRGF0YWJhc2VDbGllbnQqIGNsaWVudCwgY29u
c3QgU3RyaW5nJiBwYWdlVVJMKQogICAgICAgICA6IENsaWVudFdvcmtJdGVtKGNsaWVudCkKLSAg
ICAgICAgLCBtX3BhZ2VVUkwobmV3IFN0cmluZyhwYWdlVVJMLnRocmVhZHNhZmVDb3B5KCkpKQor
ICAgICAgICAsIG1fcGFnZVVSTChuZXcgU3RyaW5nKHBhZ2VVUkwuaXNvbGF0ZWRDb3B5KCkpKQog
ICAgIHsgfQogICAgIAogICAgIHZpcnR1YWwgfkltcG9ydGVkSWNvbkRhdGFGb3JQYWdlVVJMV29y
a0l0ZW0oKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZW50U2VjdXJpdHlQb2xpY3ku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRlbnRTZWN1cml0eVBvbGlj
eS5oCShyZXZpc2lvbiA5ODI4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGVudFNlY3Vy
aXR5UG9saWN5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgQ29u
dGVudFNlY3VyaXR5UG9saWN5X2gKICNkZWZpbmUgQ29udGVudFNlY3VyaXR5UG9saWN5X2gKIAor
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L0Nvb3JkaW5hdGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Db29yZGlu
YXRlcy5oCShyZXZpc2lvbiA5ODI4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ29vcmRpbmF0
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBjbGFzcyBDb29yZGluYXRlcyA6
IHB1YmxpYyBSZWZDb3VudGVkPENvCiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29v
cmRpbmF0ZXM+IGNyZWF0ZShkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGJvb2wg
cHJvdmlkZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wg
cHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBw
cm92aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJs
ZSBzcGVlZCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVzKGxhdGl0dWRlLCBsb25n
aXR1ZGUsIHByb3ZpZGVzQWx0aXR1ZGUsIGFsdGl0dWRlLCBhY2N1cmFjeSwgcHJvdmlkZXNBbHRp
dHVkZUFjY3VyYWN5LCBhbHRpdHVkZUFjY3VyYWN5LCBwcm92aWRlc0hlYWRpbmcsIGhlYWRpbmcs
IHByb3ZpZGVzU3BlZWQsIHNwZWVkKSk7IH0KIAotICAgIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZXM+
IHRocmVhZFNhZmVDb3B5KCkgY29uc3QKKyAgICBQYXNzUmVmUHRyPENvb3JkaW5hdGVzPiBpc29s
YXRlZENvcHkoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIENvb3JkaW5hdGVzOjpjcmVh
dGUobV9sYXRpdHVkZSwgbV9sb25naXR1ZGUsIG1fY2FuUHJvdmlkZUFsdGl0dWRlLCBtX2FsdGl0
dWRlLCBtX2FjY3VyYWN5LCBtX2NhblByb3ZpZGVBbHRpdHVkZUFjY3VyYWN5LCBtX2FsdGl0dWRl
QWNjdXJhY3ksIG1fY2FuUHJvdmlkZUhlYWRpbmcsIG1faGVhZGluZywgbV9jYW5Qcm92aWRlU3Bl
ZWQsIG1fc3BlZWQpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvR2VvcG9zaXRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0dlb3Bvc2l0aW9uLmgJKHJl
dmlzaW9uIDk4Mjg5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9HZW9wb3NpdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MCw5ICs0MCw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBHZW9wb3NpdGlvbihjb29yZGluYXRlcywgdGltZXN0YW1wKSk7CiAgICAgfQogCi0g
ICAgUGFzc1JlZlB0cjxHZW9wb3NpdGlvbj4gdGhyZWFkU2FmZUNvcHkoKSBjb25zdAorICAgIFBh
c3NSZWZQdHI8R2VvcG9zaXRpb24+IGlzb2xhdGVkQ29weSgpIGNvbnN0CiAgICAgewotICAgICAg
ICByZXR1cm4gR2VvcG9zaXRpb246OmNyZWF0ZShtX2Nvb3JkaW5hdGVzLT50aHJlYWRTYWZlQ29w
eSgpLCBtX3RpbWVzdGFtcCk7CisgICAgICAgIHJldHVybiBHZW9wb3NpdGlvbjo6Y3JlYXRlKG1f
Y29vcmRpbmF0ZXMtPmlzb2xhdGVkQ29weSgpLCBtX3RpbWVzdGFtcCk7CiAgICAgfQogCiAgICAg
RE9NVGltZVN0YW1wIHRpbWVzdGFtcCgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZXN0YW1wOyB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAkocmV2aXNpb24gOTgyODkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTMyLDExICsxMzIsMTEgQEAgU2VjdXJpdHlPcmlnaW46OlNlY3VyaXR5T3JpZ2luKGNv
bnN0IEtVUgogCiBTZWN1cml0eU9yaWdpbjo6U2VjdXJpdHlPcmlnaW4oY29uc3QgU2VjdXJpdHlP
cmlnaW4qIG90aGVyKQogICAgIDogbV9zYW5kYm94RmxhZ3Mob3RoZXItPm1fc2FuZGJveEZsYWdz
KQotICAgICwgbV9wcm90b2NvbChvdGhlci0+bV9wcm90b2NvbC50aHJlYWRzYWZlQ29weSgpKQot
ICAgICwgbV9ob3N0KG90aGVyLT5tX2hvc3QudGhyZWFkc2FmZUNvcHkoKSkKLSAgICAsIG1fZW5j
b2RlZEhvc3Qob3RoZXItPm1fZW5jb2RlZEhvc3QudGhyZWFkc2FmZUNvcHkoKSkKLSAgICAsIG1f
ZG9tYWluKG90aGVyLT5tX2RvbWFpbi50aHJlYWRzYWZlQ29weSgpKQotICAgICwgbV9maWxlUGF0
aChvdGhlci0+bV9maWxlUGF0aC50aHJlYWRzYWZlQ29weSgpKQorICAgICwgbV9wcm90b2NvbChv
dGhlci0+bV9wcm90b2NvbC5pc29sYXRlZENvcHkoKSkKKyAgICAsIG1faG9zdChvdGhlci0+bV9o
b3N0Lmlzb2xhdGVkQ29weSgpKQorICAgICwgbV9lbmNvZGVkSG9zdChvdGhlci0+bV9lbmNvZGVk
SG9zdC5pc29sYXRlZENvcHkoKSkKKyAgICAsIG1fZG9tYWluKG90aGVyLT5tX2RvbWFpbi5pc29s
YXRlZENvcHkoKSkKKyAgICAsIG1fZmlsZVBhdGgob3RoZXItPm1fZmlsZVBhdGguaXNvbGF0ZWRD
b3B5KCkpCiAgICAgLCBtX3BvcnQob3RoZXItPm1fcG9ydCkKICAgICAsIG1faXNVbmlxdWUob3Ro
ZXItPm1faXNVbmlxdWUpCiAgICAgLCBtX3VuaXZlcnNhbEFjY2VzcyhvdGhlci0+bV91bml2ZXJz
YWxBY2Nlc3MpCkBAIC0xNjQsNyArMTY0LDcgQEAgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4g
U2VjdXJpdHlPcmlnaQogICAgIHJldHVybiBjcmVhdGUoS1VSTCgpKTsKIH0KIAotUGFzc1JlZlB0
cjxTZWN1cml0eU9yaWdpbj4gU2VjdXJpdHlPcmlnaW46OnRocmVhZHNhZmVDb3B5KCkKK1Bhc3NS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+IFNlY3VyaXR5T3JpZ2luOjppc29sYXRlZENvcHkoKQogewog
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2VjdXJpdHlPcmlnaW4odGhpcykpOwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uaAkocmV2aXNpb24gOTgyODkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcg
KzQ4LDcgQEAgcHVibGljOgogCiAgICAgLy8gQ3JlYXRlIGEgZGVlcCBjb3B5IG9mIHRoaXMgU2Vj
dXJpdHlPcmlnaW4uIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bAogICAgIC8vIHdoZW4gbWFyc2hhbGxp
bmcgYSBTZWN1cml0eU9yaWdpbiB0byBhbm90aGVyIHRocmVhZC4KLSAgICBQYXNzUmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPiB0aHJlYWRzYWZlQ29weSgpOworICAgIFBhc3NSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+IGlzb2xhdGVkQ29weSgpOwogCiAgICAgLy8gU2V0IHRoZSBkb21haW4gcHJvcGVydHkg
b2YgdGhpcyBzZWN1cml0eSBvcmlnaW4gdG8gbmV3RG9tYWluLiBUaGlzCiAgICAgLy8gZnVuY3Rp
b24gZG9lcyBub3QgY2hlY2sgd2hldGhlciBuZXdEb21haW4gaXMgYSBzdWZmaXggb2YgdGhlIGN1
cnJlbnQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25C
YXNlLmgJKHJldmlzaW9uIDk4Mjg5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
QW5pbWF0aW9uQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVk
ZSAiUmVuZGVyU3R5bGVDb25zdGFudHMuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNwcAkocmV2
aXNpb24gOTgyODkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGll
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgQ3Jvc3NUaHJlYWRDb3BpZXJC
YXNlPGZhbHNlLCBmYWxzZSwgS1VSTAogCiBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIGZh
bHNlLCBTdHJpbmc+OjpUeXBlIENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIFN0
cmluZz46OmNvcHkoY29uc3QgU3RyaW5nJiBzdHIpCiB7Ci0gICAgcmV0dXJuIHN0ci5jcm9zc1Ro
cmVhZFN0cmluZygpOworICAgIHJldHVybiBzdHIuaXNvbGF0ZWRDb3B5KCk7CiB9CiAKIENyb3Nz
VGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIFJlc291cmNlRXJyb3I+OjpUeXBlIENyb3Nz
VGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIFJlc291cmNlRXJyb3I+Ojpjb3B5KGNvbnN0
IFJlc291cmNlRXJyb3ImIGVycm9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmls
ZUNob29zZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hv
b3Nlci5oCShyZXZpc2lvbiA5ODI4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVD
aG9vc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNkZWZpbmUgRmlsZUNo
b29zZXJfaAogCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAJKHJldmlzaW9uIDk4Mjg5KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2MSw3ICs1
NjEsNyBAQCB2b2lkIEtVUkw6OmluaXQoY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgCiBLVVJMIEtV
Ukw6OmNvcHkoKSBjb25zdAogewogICAgIEtVUkwgcmVzdWx0ID0gKnRoaXM7Ci0gICAgcmVzdWx0
Lm1fc3RyaW5nID0gcmVzdWx0Lm1fc3RyaW5nLmNyb3NzVGhyZWFkU3RyaW5nKCk7CisgICAgcmVz
dWx0Lm1fc3RyaW5nID0gcmVzdWx0Lm1fc3RyaW5nLmlzb2xhdGVkQ29weSgpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL1NjaGVkdWxl
UGFpci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL1NjaGVkdWxl
UGFpci5oCShyZXZpc2lvbiA5ODI4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL1Nj
aGVkdWxlUGFpci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKICNpZiBQTEFU
Rk9STShNQUMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JEYXRh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JE
YXRhLmNwcAkocmV2aXNpb24gOTgyODkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0Jsb2JEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCB2b2lkIFJh
d0RhdGE6OmRldGFjaEZyb21DdXJyZW50VGhyZWFkKCkKIHZvaWQgQmxvYkRhdGFJdGVtOjpkZXRh
Y2hGcm9tQ3VycmVudFRocmVhZCgpCiB7CiAgICAgZGF0YS0+ZGV0YWNoRnJvbUN1cnJlbnRUaHJl
YWQoKTsKLSAgICBwYXRoID0gcGF0aC5jcm9zc1RocmVhZFN0cmluZygpOworICAgIHBhdGggPSBw
YXRoLmlzb2xhdGVkQ29weSgpOwogICAgIHVybCA9IHVybC5jb3B5KCk7CiB9CiAKQEAgLTY0LDgg
KzY0LDggQEAgUGFzc093blB0cjxCbG9iRGF0YT4gQmxvYkRhdGE6OmNyZWF0ZSgpCiAKIHZvaWQg
QmxvYkRhdGE6OmRldGFjaEZyb21DdXJyZW50VGhyZWFkKCkKIHsKLSAgICBtX2NvbnRlbnRUeXBl
ID0gbV9jb250ZW50VHlwZS5jcm9zc1RocmVhZFN0cmluZygpOwotICAgIG1fY29udGVudERpc3Bv
c2l0aW9uID0gbV9jb250ZW50RGlzcG9zaXRpb24uY3Jvc3NUaHJlYWRTdHJpbmcoKTsKKyAgICBt
X2NvbnRlbnRUeXBlID0gbV9jb250ZW50VHlwZS5pc29sYXRlZENvcHkoKTsKKyAgICBtX2NvbnRl
bnREaXNwb3NpdGlvbiA9IG1fY29udGVudERpc3Bvc2l0aW9uLmlzb2xhdGVkQ29weSgpOwogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pdGVtcy5zaXplKCk7ICsraSkKICAgICAgICAgbV9p
dGVtcy5hdChpKS5kZXRhY2hGcm9tQ3VycmVudFRocmVhZCgpOwogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJNYXAuY3BwCShyZXZpc2lv
biA5ODI4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUEhlYWRlck1h
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgUGFzc093blB0cjxDcm9zc1Ro
cmVhZEhUVFBIZWFkZXJNYXBEYXRhPgogCiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kX2l0ID0gZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IGJlZ2luKCk7IGl0ICE9IGVuZF9pdDsgKytpdCkgewotICAgICAgICBkYXRhLT5hcHBl
bmQobWFrZV9wYWlyKGl0LT5maXJzdC5zdHJpbmcoKS5jcm9zc1RocmVhZFN0cmluZygpLCBpdC0+
c2Vjb25kLmNyb3NzVGhyZWFkU3RyaW5nKCkpKTsKKyAgICAgICAgZGF0YS0+YXBwZW5kKG1ha2Vf
cGFpcihpdC0+Zmlyc3Quc3RyaW5nKCkuaXNvbGF0ZWRDb3B5KCksIGl0LT5zZWNvbmQuaXNvbGF0
ZWRDb3B5KCkpKTsKICAgICB9CiAgICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9NSU1FSGVhZGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9NSU1FSGVhZGVyLmgJKHJldmlzaW9u
IDk4Mjg5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9NSU1FSGVhZGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNkZWZpbmUgTUlNRUhlYWRlcl9oCiAK
ICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlRXJyb3JCYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlRXJyb3JCYXNlLmNwcAkocmV2aXNpb24gOTgyODkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlRXJyb3JCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYs
MTAgKzM2LDEwIEBAIFJlc291cmNlRXJyb3IgUmVzb3VyY2VFcnJvckJhc2U6OmNvcHkoKSAKICAg
ICBsYXp5SW5pdCgpOwogCiAgICAgUmVzb3VyY2VFcnJvciBlcnJvckNvcHk7Ci0gICAgZXJyb3JD
b3B5Lm1fZG9tYWluID0gbV9kb21haW4uY3Jvc3NUaHJlYWRTdHJpbmcoKTsKKyAgICBlcnJvckNv
cHkubV9kb21haW4gPSBtX2RvbWFpbi5pc29sYXRlZENvcHkoKTsKICAgICBlcnJvckNvcHkubV9l
cnJvckNvZGUgPSBtX2Vycm9yQ29kZTsKLSAgICBlcnJvckNvcHkubV9mYWlsaW5nVVJMID0gbV9m
YWlsaW5nVVJMLmNyb3NzVGhyZWFkU3RyaW5nKCk7Ci0gICAgZXJyb3JDb3B5Lm1fbG9jYWxpemVk
RGVzY3JpcHRpb24gPSBtX2xvY2FsaXplZERlc2NyaXB0aW9uLmNyb3NzVGhyZWFkU3RyaW5nKCk7
CisgICAgZXJyb3JDb3B5Lm1fZmFpbGluZ1VSTCA9IG1fZmFpbGluZ1VSTC5pc29sYXRlZENvcHko
KTsKKyAgICBlcnJvckNvcHkubV9sb2NhbGl6ZWREZXNjcmlwdGlvbiA9IG1fbG9jYWxpemVkRGVz
Y3JpcHRpb24uaXNvbGF0ZWRDb3B5KCk7CiAgICAgZXJyb3JDb3B5Lm1faXNOdWxsID0gbV9pc051
bGw7CiAgICAgZXJyb3JDb3B5Lm1faXNDYW5jZWxsYXRpb24gPSBtX2lzQ2FuY2VsbGF0aW9uOwog
ICAgIHBsYXRmb3JtQ29weShlcnJvckNvcHkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZUxvYWRJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUxvYWRJbmZvLmgJKHJldmlzaW9uIDk4Mjg5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUxvYWRJbmZvLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNkZWZpbmUgUmVzb3VyY2VMb2FkSW5mb19o
CiAKICNpbmNsdWRlICJIVFRQSGVhZGVyTWFwLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAJKHJldmlzaW9u
IDk4Mjg5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVl
c3RCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCBQYXNzT3duUHRyPENy
b3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0CiAgICAgZGF0YS0+bV9jYWNoZVBvbGljeSA9IGNh
Y2hlUG9saWN5KCk7CiAgICAgZGF0YS0+bV90aW1lb3V0SW50ZXJ2YWwgPSB0aW1lb3V0SW50ZXJ2
YWwoKTsKICAgICBkYXRhLT5tX2ZpcnN0UGFydHlGb3JDb29raWVzID0gZmlyc3RQYXJ0eUZvckNv
b2tpZXMoKS5jb3B5KCk7Ci0gICAgZGF0YS0+bV9odHRwTWV0aG9kID0gaHR0cE1ldGhvZCgpLmNy
b3NzVGhyZWFkU3RyaW5nKCk7CisgICAgZGF0YS0+bV9odHRwTWV0aG9kID0gaHR0cE1ldGhvZCgp
Lmlzb2xhdGVkQ29weSgpOwogICAgIGRhdGEtPm1faHR0cEhlYWRlcnMgPSBodHRwSGVhZGVyRmll
bGRzKCkuY29weURhdGEoKTsKICAgICBkYXRhLT5tX3ByaW9yaXR5ID0gcHJpb3JpdHkoKTsKIApA
QCAtOTMsNyArOTMsNyBAQCBQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0
CiAgICAgZGF0YS0+bV9yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tB
cnJheS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25F
bmNvZGluZ0ZhbGxiYWNrQXJyYXkuc2l6ZSgpKTsKICAgICBzaXplX3QgZW5jb2RpbmdBcnJheVNp
emUgPSBtX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5LnNp
emUoKTsKICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgZW5jb2RpbmdBcnJheVNp
emU7ICsraW5kZXgpIHsKLSAgICAgICAgZGF0YS0+bV9yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlv
bkVuY29kaW5nRmFsbGJhY2tBcnJheS5hcHBlbmQobV9yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlv
bkVuY29kaW5nRmFsbGJhY2tBcnJheVtpbmRleF0uY3Jvc3NUaHJlYWRTdHJpbmcoKSk7CisgICAg
ICAgIGRhdGEtPm1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJy
YXkuYXBwZW5kKG1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJy
YXlbaW5kZXhdLmlzb2xhdGVkQ29weSgpKTsKICAgICB9CiAjZW5kaWYKICAgICBpZiAobV9odHRw
Qm9keSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNw
b25zZUJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwCShyZXZpc2lvbiA5ODI4OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjAsMTIgKzEyMCwxMiBAQCBQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3Vy
Y2VSZXNwb25zZURhCiB7CiAgICAgT3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURh
dGE+IGRhdGEgPSBhZG9wdFB0cihuZXcgQ3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YSk7
CiAgICAgZGF0YS0+bV91cmwgPSB1cmwoKS5jb3B5KCk7Ci0gICAgZGF0YS0+bV9taW1lVHlwZSA9
IG1pbWVUeXBlKCkuY3Jvc3NUaHJlYWRTdHJpbmcoKTsKKyAgICBkYXRhLT5tX21pbWVUeXBlID0g
bWltZVR5cGUoKS5pc29sYXRlZENvcHkoKTsKICAgICBkYXRhLT5tX2V4cGVjdGVkQ29udGVudExl
bmd0aCA9IGV4cGVjdGVkQ29udGVudExlbmd0aCgpOwotICAgIGRhdGEtPm1fdGV4dEVuY29kaW5n
TmFtZSA9IHRleHRFbmNvZGluZ05hbWUoKS5jcm9zc1RocmVhZFN0cmluZygpOwotICAgIGRhdGEt
Pm1fc3VnZ2VzdGVkRmlsZW5hbWUgPSBzdWdnZXN0ZWRGaWxlbmFtZSgpLmNyb3NzVGhyZWFkU3Ry
aW5nKCk7CisgICAgZGF0YS0+bV90ZXh0RW5jb2RpbmdOYW1lID0gdGV4dEVuY29kaW5nTmFtZSgp
Lmlzb2xhdGVkQ29weSgpOworICAgIGRhdGEtPm1fc3VnZ2VzdGVkRmlsZW5hbWUgPSBzdWdnZXN0
ZWRGaWxlbmFtZSgpLmlzb2xhdGVkQ29weSgpOwogICAgIGRhdGEtPm1faHR0cFN0YXR1c0NvZGUg
PSBodHRwU3RhdHVzQ29kZSgpOwotICAgIGRhdGEtPm1faHR0cFN0YXR1c1RleHQgPSBodHRwU3Rh
dHVzVGV4dCgpLmNyb3NzVGhyZWFkU3RyaW5nKCk7CisgICAgZGF0YS0+bV9odHRwU3RhdHVzVGV4
dCA9IGh0dHBTdGF0dXNUZXh0KCkuaXNvbGF0ZWRDb3B5KCk7CiAgICAgZGF0YS0+bV9odHRwSGVh
ZGVycyA9IGh0dHBIZWFkZXJGaWVsZHMoKS5jb3B5RGF0YSgpOwogICAgIGRhdGEtPm1fbGFzdE1v
ZGlmaWVkRGF0ZSA9IGxhc3RNb2RpZmllZERhdGUoKTsKICAgICBpZiAobV9yZXNvdXJjZUxvYWRU
aW1pbmcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMVmFsdWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxWYWx1ZS5jcHAJKHJl
dmlzaW9uIDk4Mjg5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTFZhbHVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBT
UUxWYWx1ZTo6U1FMVmFsdWUoY29uc3QgU1FMVmFsdWUmIHZhbCkKICAgICA6IG1fdHlwZSh2YWwu
bV90eXBlKQogICAgICwgbV9udW1iZXIodmFsLm1fbnVtYmVyKQotICAgICwgbV9zdHJpbmcodmFs
Lm1fc3RyaW5nLnRocmVhZHNhZmVDb3B5KCkpCisgICAgLCBtX3N0cmluZyh2YWwubV9zdHJpbmcu
aXNvbGF0ZWRDb3B5KCkpCiB7CiB9CiAKQEAgLTQzLDcgKzQzLDcgQEAgU3RyaW5nIFNRTFZhbHVl
OjpzdHJpbmcoKSBjb25zdAogICAgIEFTU0VSVChtX3R5cGUgPT0gU3RyaW5nVmFsdWUpOwogCiAg
ICAgLy8gTXVzdCByZXR1cm4gYSBjb3B5IHNpbmNlIHJlZi1zaGFyZWQgU3RyaW5ncyBhcmUgbm90
IHRocmVhZCBzYWZlCi0gICAgcmV0dXJuIG1fc3RyaW5nLnRocmVhZHNhZmVDb3B5KCk7CisgICAg
cmV0dXJuIG1fc3RyaW5nLmlzb2xhdGVkQ29weSgpOwogfQogCiBkb3VibGUgU1FMVmFsdWU6Om51
bWJlcigpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUXVvdGVz
RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9RdW90
ZXNEYXRhLmgJKHJldmlzaW9uIDk4Mjg5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1F1b3Rlc0RhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBAQAogI2lmbmRl
ZiBRdW90ZXNEYXRhX2gKICNkZWZpbmUgUXVvdGVzRGF0YV9oCiAKKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFi
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0
YWJhc2UuY3BwCShyZXZpc2lvbiA5ODI4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvQWJz
dHJhY3REYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNSw3ICsxMjUsNyBAQCBzdGF0
aWMgaW5saW5lIHZvaWQgdXBkYXRlR3VpZFZlcnNpb25NYXAoCiAgICAgLy8gRklYTUU6IFRoaXMg
aXMgYSBxdWl0ZS1hd2t3YXJkIHJlc3RyaWN0aW9uIHRvIGhhdmUgdG8gcHJvZ3JhbSB3aXRoLgog
CiAgICAgLy8gTWFwIG51bGwgc3RyaW5nIHRvIGVtcHR5IHN0cmluZyAoc2VlIGNvbW1lbnQgYWJv
dmUpLgotICAgIGd1aWRUb1ZlcnNpb25NYXAoKS5zZXQoZ3VpZCwgbmV3VmVyc2lvbi5pc0VtcHR5
KCkgPyBTdHJpbmcoKSA6IG5ld1ZlcnNpb24udGhyZWFkc2FmZUNvcHkoKSk7CisgICAgZ3VpZFRv
VmVyc2lvbk1hcCgpLnNldChndWlkLCBuZXdWZXJzaW9uLmlzRW1wdHkoKSA/IFN0cmluZygpIDog
bmV3VmVyc2lvbi5pc29sYXRlZENvcHkoKSk7CiB9CiAKIHR5cGVkZWYgSGFzaE1hcDxpbnQsIEhh
c2hTZXQ8QWJzdHJhY3REYXRhYmFzZSo+Kj4gR3VpZERhdGFiYXNlTWFwOwpAQCAtMTc3LDkgKzE3
Nyw5IEBAIGNvbnN0IGNoYXIqIEFic3RyYWN0RGF0YWJhc2U6OmRhdGFiYXNlSW4KIEFic3RyYWN0
RGF0YWJhc2U6OkFic3RyYWN0RGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFt
ZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQogICAgIDogbV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0KGNvbnRleHQpCi0gICAgLCBtX25hbWUobmFtZS5jcm9zc1RocmVhZFN0cmluZygpKQot
ICAgICwgbV9leHBlY3RlZFZlcnNpb24oZXhwZWN0ZWRWZXJzaW9uLmNyb3NzVGhyZWFkU3RyaW5n
KCkpCi0gICAgLCBtX2Rpc3BsYXlOYW1lKGRpc3BsYXlOYW1lLmNyb3NzVGhyZWFkU3RyaW5nKCkp
CisgICAgLCBtX25hbWUobmFtZS5pc29sYXRlZENvcHkoKSkKKyAgICAsIG1fZXhwZWN0ZWRWZXJz
aW9uKGV4cGVjdGVkVmVyc2lvbi5pc29sYXRlZENvcHkoKSkKKyAgICAsIG1fZGlzcGxheU5hbWUo
ZGlzcGxheU5hbWUuaXNvbGF0ZWRDb3B5KCkpCiAgICAgLCBtX2VzdGltYXRlZFNpemUoZXN0aW1h
dGVkU2l6ZSkKICAgICAsIG1fZ3VpZCgwKQogICAgICwgbV9vcGVuZWQoZmFsc2UpCkBAIC0yNjQs
NyArMjY0LDcgQEAgYm9vbCBBYnN0cmFjdERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcgogICAg
ICAgICBHdWlkVmVyc2lvbk1hcDo6aXRlcmF0b3IgZW50cnkgPSBndWlkVG9WZXJzaW9uTWFwKCku
ZmluZChtX2d1aWQpOwogICAgICAgICBpZiAoZW50cnkgIT0gZ3VpZFRvVmVyc2lvbk1hcCgpLmVu
ZCgpKSB7CiAgICAgICAgICAgICAvLyBNYXAgbnVsbCBzdHJpbmcgdG8gZW1wdHkgc3RyaW5nIChz
ZWUgdXBkYXRlR3VpZFZlcnNpb25NYXAoKSkuCi0gICAgICAgICAgICBjdXJyZW50VmVyc2lvbiA9
IGVudHJ5LT5zZWNvbmQuaXNOdWxsKCkgPyBTdHJpbmcoIiIpIDogZW50cnktPnNlY29uZC50aHJl
YWRzYWZlQ29weSgpOworICAgICAgICAgICAgY3VycmVudFZlcnNpb24gPSBlbnRyeS0+c2Vjb25k
LmlzTnVsbCgpID8gU3RyaW5nKCIiKSA6IGVudHJ5LT5zZWNvbmQuaXNvbGF0ZWRDb3B5KCk7CiAg
ICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkN1cnJlbnQgY2FjaGVkIHZlcnNpb24gZm9yIGd1
aWQgJWkgaXMgJXMiLCBtX2d1aWQsIGN1cnJlbnRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpKTsKIAog
I2lmIFBMQVRGT1JNKENIUk9NSVVNKQpAQCAtMzcxLDEzICszNzEsMTMgQEAgU2VjdXJpdHlPcmln
aW4qIEFic3RyYWN0RGF0YWJhc2U6OnNlY3VyaQogU3RyaW5nIEFic3RyYWN0RGF0YWJhc2U6OnN0
cmluZ0lkZW50aWZpZXIoKSBjb25zdAogewogICAgIC8vIFJldHVybiBhIGRlZXAgY29weSBmb3Ig
cmVmIGNvdW50aW5nIHRocmVhZCBzYWZldHkKLSAgICByZXR1cm4gbV9uYW1lLnRocmVhZHNhZmVD
b3B5KCk7CisgICAgcmV0dXJuIG1fbmFtZS5pc29sYXRlZENvcHkoKTsKIH0KIAogU3RyaW5nIEFi
c3RyYWN0RGF0YWJhc2U6OmRpc3BsYXlOYW1lKCkgY29uc3QKIHsKICAgICAvLyBSZXR1cm4gYSBk
ZWVwIGNvcHkgZm9yIHJlZiBjb3VudGluZyB0aHJlYWQgc2FmZXR5Ci0gICAgcmV0dXJuIG1fZGlz
cGxheU5hbWUudGhyZWFkc2FmZUNvcHkoKTsKKyAgICByZXR1cm4gbV9kaXNwbGF5TmFtZS5pc29s
YXRlZENvcHkoKTsKIH0KIAogdW5zaWduZWQgbG9uZyBBYnN0cmFjdERhdGFiYXNlOjplc3RpbWF0
ZWRTaXplKCkgY29uc3QKQEAgLTM4OCw3ICszODgsNyBAQCB1bnNpZ25lZCBsb25nIEFic3RyYWN0
RGF0YWJhc2U6OmVzdGltYXRlCiBTdHJpbmcgQWJzdHJhY3REYXRhYmFzZTo6ZmlsZU5hbWUoKSBj
b25zdAogewogICAgIC8vIFJldHVybiBhIGRlZXAgY29weSBmb3IgcmVmIGNvdW50aW5nIHRocmVh
ZCBzYWZldHkKLSAgICByZXR1cm4gbV9maWxlbmFtZS50aHJlYWRzYWZlQ29weSgpOworICAgIHJl
dHVybiBtX2ZpbGVuYW1lLmlzb2xhdGVkQ29weSgpOwogfQogCiBib29sIEFic3RyYWN0RGF0YWJh
c2U6OmdldFZlcnNpb25Gcm9tRGF0YWJhc2UoU3RyaW5nJiB2ZXJzaW9uLCBib29sIHNob3VsZENh
Y2hlVmVyc2lvbikKQEAgLTQzMSwxMyArNDMxLDEzIEBAIGJvb2wgQWJzdHJhY3REYXRhYmFzZTo6
c2V0VmVyc2lvbkluRGF0YWIKIAogdm9pZCBBYnN0cmFjdERhdGFiYXNlOjpzZXRFeHBlY3RlZFZl
cnNpb24oY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQogewotICAgIG1fZXhwZWN0ZWRWZXJzaW9uID0g
dmVyc2lvbi50aHJlYWRzYWZlQ29weSgpOworICAgIG1fZXhwZWN0ZWRWZXJzaW9uID0gdmVyc2lv
bi5pc29sYXRlZENvcHkoKTsKIH0KIAogU3RyaW5nIEFic3RyYWN0RGF0YWJhc2U6OmdldENhY2hl
ZFZlcnNpb24oKSBjb25zdAogewogICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7
Ci0gICAgcmV0dXJuIGd1aWRUb1ZlcnNpb25NYXAoKS5nZXQobV9ndWlkKS50aHJlYWRzYWZlQ29w
eSgpOworICAgIHJldHVybiBndWlkVG9WZXJzaW9uTWFwKCkuZ2V0KG1fZ3VpZCkuaXNvbGF0ZWRD
b3B5KCk7CiB9CiAKIHZvaWQgQWJzdHJhY3REYXRhYmFzZTo6c2V0Q2FjaGVkVmVyc2lvbihjb25z
dCBTdHJpbmcmIGFjdHVhbFZlcnNpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0No
YW5nZVZlcnNpb25XcmFwcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0NoYW5nZVZlcnNpb25XcmFwcGVyLmNwcAkocmV2aXNpb24gOTgyODkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0NoYW5nZVZlcnNpb25XcmFwcGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzgsOCArMzgsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDaGFuZ2VWZXJzaW9uV3Jh
cHBlcjo6Q2hhbmdlVmVyc2lvbldyYXBwZXIoY29uc3QgU3RyaW5nJiBvbGRWZXJzaW9uLCBjb25z
dCBTdHJpbmcmIG5ld1ZlcnNpb24pCi0gICAgOiBtX29sZFZlcnNpb24ob2xkVmVyc2lvbi5jcm9z
c1RocmVhZFN0cmluZygpKQotICAgICwgbV9uZXdWZXJzaW9uKG5ld1ZlcnNpb24uY3Jvc3NUaHJl
YWRTdHJpbmcoKSkKKyAgICA6IG1fb2xkVmVyc2lvbihvbGRWZXJzaW9uLmlzb2xhdGVkQ29weSgp
KQorICAgICwgbV9uZXdWZXJzaW9uKG5ld1ZlcnNpb24uaXNvbGF0ZWRDb3B5KCkpCiB7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCShyZXZpc2lvbiA5ODI4OSkKKysr
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjQsNyArMTI0LDcgQEAgRGF0YWJhc2U6OkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleAog
ICAgICwgbV9pc1RyYW5zYWN0aW9uUXVldWVFbmFibGVkKHRydWUpCiAgICAgLCBtX2RlbGV0ZWQo
ZmFsc2UpCiB7Ci0gICAgbV9kYXRhYmFzZVRocmVhZFNlY3VyaXR5T3JpZ2luID0gbV9jb250ZXh0
VGhyZWFkU2VjdXJpdHlPcmlnaW4tPnRocmVhZHNhZmVDb3B5KCk7CisgICAgbV9kYXRhYmFzZVRo
cmVhZFNlY3VyaXR5T3JpZ2luID0gbV9jb250ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW4tPmlzb2xh
dGVkQ29weSgpOwogCiAgICAgU2NyaXB0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZVRocmVhZGluZygp
OwogICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCkp
OwpAQCAtMzg4LDcgKzM4OCw3IEBAIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IqIERhdGFiYXNl
Ojp0cmEKIAogVmVjdG9yPFN0cmluZz4gRGF0YWJhc2U6OnRhYmxlTmFtZXMoKQogewotICAgIC8v
IEZJWE1FOiBOb3QgdXNpbmcgdGhyZWFkc2FmZUNvcHkgb24gdGhlc2Ugc3RyaW5ncyBsb29rcyBv
ayBzaW5jZSB0aHJlYWRzIHRha2Ugc3RyaWN0IHR1cm5zCisgICAgLy8gRklYTUU6IE5vdCB1c2lu
ZyBpc29sYXRlZENvcHkgb24gdGhlc2Ugc3RyaW5ncyBsb29rcyBvayBzaW5jZSB0aHJlYWRzIHRh
a2Ugc3RyaWN0IHR1cm5zCiAgICAgLy8gaW4gZGVhbGluZyB3aXRoIHRoZW0uIEhvd2V2ZXIsIGlm
IHRoZSBjb2RlIGNoYW5nZXMsIHRoaXMgbWF5IG5vdCBiZSB0cnVlIGFueW1vcmUuCiAgICAgVmVj
dG9yPFN0cmluZz4gcmVzdWx0OwogICAgIERhdGFiYXNlVGFza1N5bmNocm9uaXplciBzeW5jaHJv
bml6ZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlRGV0YWlscy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VEZXRhaWxzLmgJKHJl
dmlzaW9uIDk4Mjg5KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZURldGFpbHMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2lmIEVOQUJMRShTUUxfREFUQUJB
U0UpCiAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRp
bmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0RhdGFiYXNlVHJhY2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwCShyZXZpc2lvbiA5ODI4OSkKKysrIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsMTcg
KzkyLDE3IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpzZXREYXRhYmFzZURpcmVjdG8KIHsKICAg
ICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKICAgICBBU1NFUlQo
IW1fZGF0YWJhc2UuaXNPcGVuKCkpOwotICAgIG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoID0gcGF0
aC50aHJlYWRzYWZlQ29weSgpOworICAgIG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoID0gcGF0aC5p
c29sYXRlZENvcHkoKTsKIH0KIAogU3RyaW5nIERhdGFiYXNlVHJhY2tlcjo6ZGF0YWJhc2VEaXJl
Y3RvcnlQYXRoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9kYXRhYmFzZURpcmVjdG9yeVBhdGgu
dGhyZWFkc2FmZUNvcHkoKTsKKyAgICByZXR1cm4gbV9kYXRhYmFzZURpcmVjdG9yeVBhdGguaXNv
bGF0ZWRDb3B5KCk7CiB9CiAKIFN0cmluZyBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXJEYXRhYmFz
ZVBhdGgoKSBjb25zdAogewotICAgIHJldHVybiBTUUxpdGVGaWxlU3lzdGVtOjphcHBlbmREYXRh
YmFzZUZpbGVOYW1lVG9QYXRoKG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoLnRocmVhZHNhZmVDb3B5
KCksICJEYXRhYmFzZXMuZGIiKTsKKyAgICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6YXBwZW5k
RGF0YWJhc2VGaWxlTmFtZVRvUGF0aChtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aC5pc29sYXRlZENv
cHkoKSwgIkRhdGFiYXNlcy5kYiIpOwogfQogCiB2b2lkIERhdGFiYXNlVHJhY2tlcjo6b3BlblRy
YWNrZXJEYXRhYmFzZShib29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0KQpAQCAtMTcxLDcgKzE3MSw3
IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpjYW5Fc3RhYmxpc2hEYXRhYmEKICAgICAgICAgLy8g
R2l2ZSB0aGUgY2hyb21lIGNsaWVudCBhIGNoYW5jZSB0byBpbmNyZWFzZSB0aGUgcXVvdGEuCiAg
ICAgICAgIC8vIFRlbXBvcmFyaWx5IG1ha2UgdGhlIGRldGFpbHMgb2YgdGhlIHByb3Bvc2VkIGRh
dGFiYXNlIGF2YWlsYWJsZSwgc28gdGhlIGNsaWVudCBjYW4gZ2V0IGF0IHRoZW0uCiAgICAgICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgcmVhbGx5IGp1c3QgcGFzcyB0aGUgZGV0YWlscyBpbnRvIHRo
aXMgY2FsbCwgcmF0aGVyIHRoYW4gdXNpbmcgbV9wcm9wb3NlZERhdGFiYXNlcy4KLSAgICAgICAg
ZGV0YWlscyA9IFByb3Bvc2VkRGF0YWJhc2Uob3JpZ2luLT50aHJlYWRzYWZlQ29weSgpLCBEYXRh
YmFzZURldGFpbHMobmFtZS50aHJlYWRzYWZlQ29weSgpLCBkaXNwbGF5TmFtZS50aHJlYWRzYWZl
Q29weSgpLCBlc3RpbWF0ZWRTaXplLCAwKSk7CisgICAgICAgIGRldGFpbHMgPSBQcm9wb3NlZERh
dGFiYXNlKG9yaWdpbi0+aXNvbGF0ZWRDb3B5KCksIERhdGFiYXNlRGV0YWlscyhuYW1lLmlzb2xh
dGVkQ29weSgpLCBkaXNwbGF5TmFtZS5pc29sYXRlZENvcHkoKSwgZXN0aW1hdGVkU2l6ZSwgMCkp
OwogICAgICAgICBtX3Byb3Bvc2VkRGF0YWJhc2VzLmFkZCgmZGV0YWlscyk7CiAgICAgfQogICAg
IC8vIERyb3AgYWxsIGxvY2tzIGJlZm9yZSBjYWxsaW5nIG91dDsgd2UgZG9uJ3Qga25vdyB3aGF0
IHRoZXknbGwgZG8uCkBAIC0yNjcsNyArMjY3LDcgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6Omlu
dGVycnVwdEFsbERhdGFiYQogCiBTdHJpbmcgRGF0YWJhc2VUcmFja2VyOjpvcmlnaW5QYXRoKFNl
Y3VyaXR5T3JpZ2luKiBvcmlnaW4pIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0
ZW06OmFwcGVuZERhdGFiYXNlRmlsZU5hbWVUb1BhdGgobV9kYXRhYmFzZURpcmVjdG9yeVBhdGgu
dGhyZWFkc2FmZUNvcHkoKSwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgcmV0
dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNlRmlsZU5hbWVUb1BhdGgobV9kYXRh
YmFzZURpcmVjdG9yeVBhdGguaXNvbGF0ZWRDb3B5KCksIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlm
aWVyKCkpOwogfQogCiBTdHJpbmcgRGF0YWJhc2VUcmFja2VyOjpmdWxsUGF0aEZvckRhdGFiYXNl
Tm9Mb2NrKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBj
cmVhdGVJZk5vdEV4aXN0cykKQEAgLTMyOCw3ICszMjgsNyBAQCBTdHJpbmcgRGF0YWJhc2VUcmFj
a2VyOjpmdWxsUGF0aEZvckRhdGFiCiAgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0
YWJhc2VHdWFyZCk7CiAgICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdlcj4gcXVvdGFNYW5hZ2Vy
TG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsKIAotICAgIHJldHVybiBmdWxsUGF0aEZvckRh
dGFiYXNlTm9Mb2NrKG9yaWdpbiwgbmFtZSwgY3JlYXRlSWZOb3RFeGlzdHMpLnRocmVhZHNhZmVD
b3B5KCk7CisgICAgcmV0dXJuIGZ1bGxQYXRoRm9yRGF0YWJhc2VOb0xvY2sob3JpZ2luLCBuYW1l
LCBjcmVhdGVJZk5vdEV4aXN0cykuaXNvbGF0ZWRDb3B5KCk7CiB9CiAKIHZvaWQgRGF0YWJhc2VU
cmFja2VyOjpwb3B1bGF0ZU9yaWdpbnMoKQpAQCAtMzUzLDcgKzM1Myw3IEBAIHZvaWQgRGF0YWJh
c2VUcmFja2VyOjpwb3B1bGF0ZU9yaWdpbnMoKQogICAgIGludCByZXN1bHQ7CiAgICAgd2hpbGUg
KChyZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpKSA9PSBTUUxSZXN1bHRSb3cpIHsKICAgICAgICAg
UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJv
bURhdGFiYXNlSWRlbnRpZmllcihzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSk7Ci0gICAgICAg
IG1fcXVvdGFNYXAtPnNldChvcmlnaW4uZ2V0KCktPnRocmVhZHNhZmVDb3B5KCksIHN0YXRlbWVu
dC5nZXRDb2x1bW5JbnQ2NCgxKSk7CisgICAgICAgIG1fcXVvdGFNYXAtPnNldChvcmlnaW4uZ2V0
KCktPmlzb2xhdGVkQ29weSgpLCBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMSkpOwogICAgIH0K
IAogICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkKQEAgLTQwMyw3ICs0MDMsNyBAQCBi
b29sIERhdGFiYXNlVHJhY2tlcjo6ZGF0YWJhc2VOYW1lc0Zvck9yCiAgICAgfQogCiAgICAgZm9y
IChWZWN0b3I8U3RyaW5nPjo6aXRlcmF0b3IgaXRlciA9IHRlbXAuYmVnaW4oKTsgaXRlciAhPSB0
ZW1wLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgIHJlc3VsdFZlY3Rvci5hcHBlbmQoaXRlci0+dGhy
ZWFkc2FmZUNvcHkoKSk7CisgICAgICAgIHJlc3VsdFZlY3Rvci5hcHBlbmQoaXRlci0+aXNvbGF0
ZWRDb3B5KCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC01MjMsMTMgKzUyMywxMyBAQCB2
b2lkIERhdGFiYXNlVHJhY2tlcjo6YWRkT3BlbkRhdGFiYXNlKEFiCiAgICAgICAgIERhdGFiYXNl
TmFtZU1hcCogbmFtZU1hcCA9IG1fb3BlbkRhdGFiYXNlTWFwLT5nZXQoZGF0YWJhc2UtPnNlY3Vy
aXR5T3JpZ2luKCkpOwogICAgICAgICBpZiAoIW5hbWVNYXApIHsKICAgICAgICAgICAgIG5hbWVN
YXAgPSBuZXcgRGF0YWJhc2VOYW1lTWFwOwotICAgICAgICAgICAgbV9vcGVuRGF0YWJhc2VNYXAt
PnNldChkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKS0+dGhyZWFkc2FmZUNvcHkoKSwgbmFtZU1h
cCk7CisgICAgICAgICAgICBtX29wZW5EYXRhYmFzZU1hcC0+c2V0KGRhdGFiYXNlLT5zZWN1cml0
eU9yaWdpbigpLT5pc29sYXRlZENvcHkoKSwgbmFtZU1hcCk7CiAgICAgICAgIH0KIAogICAgICAg
ICBEYXRhYmFzZVNldCogZGF0YWJhc2VTZXQgPSBuYW1lTWFwLT5nZXQobmFtZSk7CiAgICAgICAg
IGlmICghZGF0YWJhc2VTZXQpIHsKICAgICAgICAgICAgIGRhdGFiYXNlU2V0ID0gbmV3IERhdGFi
YXNlU2V0OwotICAgICAgICAgICAgbmFtZU1hcC0+c2V0KG5hbWUudGhyZWFkc2FmZUNvcHkoKSwg
ZGF0YWJhc2VTZXQpOworICAgICAgICAgICAgbmFtZU1hcC0+c2V0KG5hbWUuaXNvbGF0ZWRDb3B5
KCksIGRhdGFiYXNlU2V0KTsKICAgICAgICAgfQogCiAgICAgICAgIGRhdGFiYXNlU2V0LT5hZGQo
ZGF0YWJhc2UpOwpAQCAtNjk1LDcgKzY5NSw3IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpzZXRR
dW90YShTZWN1cml0eU8KICAgICB9CiAKICAgICAvLyBGSVhNRTogSXMgaXQgcmVhbGx5IE9LIHRv
IHVwZGF0ZSB0aGUgcXVvdGEgaW4gbWVtb3J5IGlmIHdlIGZhaWxlZCB0byB1cGRhdGUgaXQgb24g
ZGlzaz8KLSAgICBtX3F1b3RhTWFwLT5zZXQob3JpZ2luLT50aHJlYWRzYWZlQ29weSgpLCBxdW90
YSk7CisgICAgbV9xdW90YU1hcC0+c2V0KG9yaWdpbi0+aXNvbGF0ZWRDb3B5KCksIHF1b3RhKTsK
IAogICAgIGlmIChtX2NsaWVudCkKICAgICAgICAgbV9jbGllbnQtPmRpc3BhdGNoRGlkTW9kaWZ5
T3JpZ2luKG9yaWdpbik7CkBAIC04NDIsMTAgKzg0MiwxMCBAQCB2b2lkIERhdGFiYXNlVHJhY2tl
cjo6cmVjb3JkQ3JlYXRpbmdEYXRhCiAgICAgTmFtZUNvdW50TWFwKiBuYW1lTWFwID0gbV9iZWlu
Z0NyZWF0ZWQuZ2V0KG9yaWdpbik7CiAgICAgaWYgKCFuYW1lTWFwKSB7CiAgICAgICAgIG5hbWVN
YXAgPSBuZXcgTmFtZUNvdW50TWFwKCk7Ci0gICAgICAgIG1fYmVpbmdDcmVhdGVkLnNldChvcmln
aW4tPnRocmVhZHNhZmVDb3B5KCksIG5hbWVNYXApOworICAgICAgICBtX2JlaW5nQ3JlYXRlZC5z
ZXQob3JpZ2luLT5pc29sYXRlZENvcHkoKSwgbmFtZU1hcCk7CiAgICAgfQogICAgIGxvbmcgY291
bnQgPSBuYW1lTWFwLT5nZXQobmFtZSk7Ci0gICAgbmFtZU1hcC0+c2V0KG5hbWUudGhyZWFkc2Fm
ZUNvcHkoKSwgY291bnQgKyAxKTsKKyAgICBuYW1lTWFwLT5zZXQobmFtZS5pc29sYXRlZENvcHko
KSwgY291bnQgKyAxKTsKIH0KIAogdm9pZCBEYXRhYmFzZVRyYWNrZXI6OmRvbmVDcmVhdGluZ0Rh
dGFiYXNlKFNlY3VyaXR5T3JpZ2luICpvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSkKQEAgLTg4
NywxMCArODg3LDEwIEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpyZWNvcmREZWxldGluZ0RhdGEK
ICAgICBOYW1lU2V0KiBuYW1lU2V0ID0gbV9iZWluZ0RlbGV0ZWQuZ2V0KG9yaWdpbik7CiAgICAg
aWYgKCFuYW1lU2V0KSB7CiAgICAgICAgIG5hbWVTZXQgPSBuZXcgTmFtZVNldCgpOwotICAgICAg
ICBtX2JlaW5nRGVsZXRlZC5zZXQob3JpZ2luLT50aHJlYWRzYWZlQ29weSgpLCBuYW1lU2V0KTsK
KyAgICAgICAgbV9iZWluZ0RlbGV0ZWQuc2V0KG9yaWdpbi0+aXNvbGF0ZWRDb3B5KCksIG5hbWVT
ZXQpOwogICAgIH0KICAgICBBU1NFUlQoIW5hbWVTZXQtPmNvbnRhaW5zKG5hbWUpKTsKLSAgICBu
YW1lU2V0LT5hZGQobmFtZS50aHJlYWRzYWZlQ29weSgpKTsKKyAgICBuYW1lU2V0LT5hZGQobmFt
ZS5pc29sYXRlZENvcHkoKSk7CiB9CiAKIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpkb25lRGVsZXRp
bmdEYXRhYmFzZShTZWN1cml0eU9yaWdpbiAqb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUpCkBA
IC05MzIsNyArOTMyLDcgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnJlY29yZERlbGV0aW5nT3Jp
ZwogewogICAgIEFTU0VSVCghbV9kYXRhYmFzZUd1YXJkLnRyeUxvY2soKSk7CiAgICAgQVNTRVJU
KCFkZWxldGluZ09yaWdpbihvcmlnaW4pKTsKLSAgICBtX29yaWdpbnNCZWluZ0RlbGV0ZWQuYWRk
KG9yaWdpbi0+dGhyZWFkc2FmZUNvcHkoKSk7CisgICAgbV9vcmlnaW5zQmVpbmdEZWxldGVkLmFk
ZChvcmlnaW4tPmlzb2xhdGVkQ29weSgpKTsKIH0KIAogdm9pZCBEYXRhYmFzZVRyYWNrZXI6OmRv
bmVEZWxldGluZ09yaWdpbihTZWN1cml0eU9yaWdpbiAqb3JpZ2luKQpAQCAtMTA2NSw3ICsxMDY1
LDcgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnNjaGVkdWxlTm90aWZ5RGF0YQogewogICAgIE11
dGV4TG9ja2VyIGxvY2tlcihub3RpZmljYXRpb25NdXRleCgpKTsKIAotICAgIG5vdGlmaWNhdGlv
blF1ZXVlKCkuYXBwZW5kKHBhaXI8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgU3RyaW5nPihvcmln
aW4tPnRocmVhZHNhZmVDb3B5KCksIG5hbWUuY3Jvc3NUaHJlYWRTdHJpbmcoKSkpOworICAgIG5v
dGlmaWNhdGlvblF1ZXVlKCkuYXBwZW5kKHBhaXI8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgU3Ry
aW5nPihvcmlnaW4tPmlzb2xhdGVkQ29weSgpLCBuYW1lLmlzb2xhdGVkQ29weSgpKSk7CiAgICAg
c2NoZWR1bGVGb3JOb3RpZmljYXRpb24oKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9PcmlnaW5RdW90YU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmNwcAkocmV2aXNpb24gOTgyODkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL09yaWdpblF1b3RhTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc1LDcgKzc1LDcgQEAgdm9pZCBPcmlnaW5RdW90YU1hbmFnZXI6OnRyYWNrT3JpZ2luKFBh
cwogICAgIEFTU0VSVChtX3VzYWdlUmVjb3JkR3VhcmRMb2NrZWQpOwogICAgIEFTU0VSVCghbV91
c2FnZU1hcC5jb250YWlucyhvcmlnaW4uZ2V0KCkpKTsKIAotICAgIG1fdXNhZ2VNYXAuc2V0KG9y
aWdpbi0+dGhyZWFkc2FmZUNvcHkoKSwgbmV3IE9yaWdpblVzYWdlUmVjb3JkKTsKKyAgICBtX3Vz
YWdlTWFwLnNldChvcmlnaW4tPmlzb2xhdGVkQ29weSgpLCBuZXcgT3JpZ2luVXNhZ2VSZWNvcmQp
OwogfQogCiBib29sIE9yaWdpblF1b3RhTWFuYWdlcjo6dHJhY2tzT3JpZ2luKFNlY3VyaXR5T3Jp
Z2luKiBvcmlnaW4pIGNvbnN0CkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgT3JpZ2luUXVvdGFNYW5h
Z2VyOjphZGREYXRhYmFzZShTZWMKICAgICBPcmlnaW5Vc2FnZVJlY29yZCogdXNhZ2VSZWNvcmQg
PSBtX3VzYWdlTWFwLmdldChvcmlnaW4pOwogICAgIEFTU0VSVCh1c2FnZVJlY29yZCk7CiAKLSAg
ICB1c2FnZVJlY29yZC0+YWRkRGF0YWJhc2UoZGF0YWJhc2VJZGVudGlmaWVyLnRocmVhZHNhZmVD
b3B5KCksIGZ1bGxQYXRoLnRocmVhZHNhZmVDb3B5KCkpOworICAgIHVzYWdlUmVjb3JkLT5hZGRE
YXRhYmFzZShkYXRhYmFzZUlkZW50aWZpZXIuaXNvbGF0ZWRDb3B5KCksIGZ1bGxQYXRoLmlzb2xh
dGVkQ29weSgpKTsKIH0KIAogdm9pZCBPcmlnaW5RdW90YU1hbmFnZXI6OnJlbW92ZURhdGFiYXNl
KFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZGVudGlmaWVy
KQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxFcnJvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMRXJyb3IuaAkocmV2aXNpb24gOTgyODkpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTEVycm9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcg
KzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNRTEVycm9yPiBjcmVhdGUo
dW5zaWduZWQgY29kZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKSB7IHJldHVybiBhZG9wdFJlZihu
ZXcgU1FMRXJyb3IoY29kZSwgbWVzc2FnZSkpOyB9CiAKICAgICB1bnNpZ25lZCBjb2RlKCkgY29u
c3QgeyByZXR1cm4gbV9jb2RlOyB9Ci0gICAgU3RyaW5nIG1lc3NhZ2UoKSBjb25zdCB7IHJldHVy
biBtX21lc3NhZ2UudGhyZWFkc2FmZUNvcHkoKTsgfQorICAgIFN0cmluZyBtZXNzYWdlKCkgY29u
c3QgeyByZXR1cm4gbV9tZXNzYWdlLmlzb2xhdGVkQ29weSgpOyB9CiAKICAgICBlbnVtIFNRTEVy
cm9yQ29kZSB7CiAgICAgICAgIFVOS05PV05fRVJSID0gMCwKQEAgLTU1LDcgKzU1LDcgQEAgcHVi
bGljOgogICAgIH07CiAKIHByaXZhdGU6Ci0gICAgU1FMRXJyb3IodW5zaWduZWQgY29kZSwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlKSA6IG1fY29kZShjb2RlKSwgbV9tZXNzYWdlKG1lc3NhZ2UudGhy
ZWFkc2FmZUNvcHkoKSkgeyB9CisgICAgU1FMRXJyb3IodW5zaWduZWQgY29kZSwgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKSA6IG1fY29kZShjb2RlKSwgbV9tZXNzYWdlKG1lc3NhZ2UuaXNvbGF0ZWRD
b3B5KCkpIHsgfQogICAgIHVuc2lnbmVkIG1fY29kZTsKICAgICBTdHJpbmcgbV9tZXNzYWdlOwog
fTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0Um93TGlzdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0Um93TGlzdC5o
CShyZXZpc2lvbiA5ODI4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0
Um93TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaWYgRU5BQkxFKFNR
TF9EQVRBQkFTRSkKIAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlICJTUUxWYWx1ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3BwCShyZXZpc2lv
biA5ODI4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudD4gU1FM
U3RhdGVtZW50OjpjCiB9CiAKIFNRTFN0YXRlbWVudDo6U1FMU3RhdGVtZW50KERhdGFiYXNlKiBk
YXRhYmFzZSwgY29uc3QgU3RyaW5nJiBzdGF0ZW1lbnQsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4m
IGFyZ3VtZW50cywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4gY2FsbGJhY2ssIFBh
c3NSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgaW50IHBl
cm1pc3Npb25zKQotICAgIDogbV9zdGF0ZW1lbnQoc3RhdGVtZW50LmNyb3NzVGhyZWFkU3RyaW5n
KCkpCisgICAgOiBtX3N0YXRlbWVudChzdGF0ZW1lbnQuaXNvbGF0ZWRDb3B5KCkpCiAgICAgLCBt
X2FyZ3VtZW50cyhhcmd1bWVudHMpCiAgICAgLCBtX3N0YXRlbWVudENhbGxiYWNrV3JhcHBlcihj
YWxsYmFjaywgZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKICAgICAsIG1fc3Rh
dGVtZW50RXJyb3JDYWxsYmFja1dyYXBwZXIoZXJyb3JDYWxsYmFjaywgZGF0YWJhc2UtPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFn
ZUFyZWFTeW5jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3Jh
Z2VBcmVhU3luYy5jcHAJKHJldmlzaW9uIDk4Mjg5KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9TdG9yYWdlQXJlYVN5bmMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIGlu
bGluZSBTdG9yYWdlQXJlYVN5bmM6OlN0b3JhZ2VBcmVhU3luYygKICAgICAsIG1fZmluYWxTeW5j
U2NoZWR1bGVkKGZhbHNlKQogICAgICwgbV9zdG9yYWdlQXJlYShzdG9yYWdlQXJlYSkKICAgICAs
IG1fc3luY01hbmFnZXIoc3RvcmFnZVN5bmNNYW5hZ2VyKQotICAgICwgbV9kYXRhYmFzZUlkZW50
aWZpZXIoZGF0YWJhc2VJZGVudGlmaWVyLmNyb3NzVGhyZWFkU3RyaW5nKCkpCisgICAgLCBtX2Rh
dGFiYXNlSWRlbnRpZmllcihkYXRhYmFzZUlkZW50aWZpZXIuaXNvbGF0ZWRDb3B5KCkpCiAgICAg
LCBtX2NsZWFySXRlbXNXaGlsZVN5bmNpbmcoZmFsc2UpCiAgICAgLCBtX3N5bmNTY2hlZHVsZWQo
ZmFsc2UpCiAgICAgLCBtX3N5bmNJblByb2dyZXNzKGZhbHNlKQpAQCAtMTg4LDcgKzE4OCw3IEBA
IHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpzeW5jVGltZXJGaXJlZChUaW0KICAgICAgICAgICAgICAg
ICBwYXJ0aWFsU3luYyA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBtX2l0ZW1zUGVuZGluZ1N5bmMuc2V0KGNoYW5nZWRfaXQtPmZpcnN0
LmNyb3NzVGhyZWFkU3RyaW5nKCksIGNoYW5nZWRfaXQtPnNlY29uZC5jcm9zc1RocmVhZFN0cmlu
ZygpKTsKKyAgICAgICAgICAgIG1faXRlbXNQZW5kaW5nU3luYy5zZXQoY2hhbmdlZF9pdC0+Zmly
c3QuaXNvbGF0ZWRDb3B5KCksIGNoYW5nZWRfaXQtPnNlY29uZC5pc29sYXRlZENvcHkoKSk7CiAg
ICAgICAgIH0KIAogICAgICAgICBpZiAocGFydGlhbFN5bmMpIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuaAkocmV2aXNpb24gOTgyODkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2
ICsyOSw3IEBACiAjaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2UuaCIKICNpbmNsdWRlICJUaW1lci5o
IgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmNwcAkocmV2aXNpb24gOTgyODkp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzEsNyArMTcxLDcgQEAgdm9pZCBTdG9yYWdlTWFwOjppbXBvcnRJdGVtKGNvbnN0IFN0
cmluZwogewogICAgIC8vIEJlIHN1cmUgdG8gY29weSB0aGUga2V5cy92YWx1ZXMgYXMgaXRlbXMg
aW1wb3J0ZWQgb24gYSBiYWNrZ3JvdW5kIHRocmVhZCBhcmUgZGVzdGluZWQKICAgICAvLyB0byBj
cm9zcyBhIHRocmVhZCBib3VuZGFyeQotICAgIHBhaXI8SGFzaE1hcDxTdHJpbmcsIFN0cmluZz46
Oml0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBtX21hcC5hZGQoa2V5LnRocmVhZHNhZmVDb3B5KCks
IHZhbHVlLnRocmVhZHNhZmVDb3B5KCkpOworICAgIHBhaXI8SGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz46Oml0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBtX21hcC5hZGQoa2V5Lmlzb2xhdGVkQ29weSgp
LCB2YWx1ZS5pc29sYXRlZENvcHkoKSk7CiAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3Vs
dC5zZWNvbmQpOyAgLy8gVHJ1ZSBpZiB0aGUga2V5IGRpZG4ndCBleGlzdCBwcmV2aW91c2x5Lgog
CiAgICAgQVNTRVJUKG1fY3VycmVudExlbmd0aCArIGtleS5sZW5ndGgoKSA+PSBtX2N1cnJlbnRM
ZW5ndGgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1w
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNw
YWNlSW1wbC5jcHAJKHJldmlzaW9uIDk4Mjg5KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAg
UGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBTdG9yYWdlTmFtZQogCiBTdG9yYWdlTmFtZXNw
YWNlSW1wbDo6U3RvcmFnZU5hbWVzcGFjZUltcGwoU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUsIGNv
bnN0IFN0cmluZyYgcGF0aCwgdW5zaWduZWQgcXVvdGEpCiAgICAgOiBtX3N0b3JhZ2VUeXBlKHN0
b3JhZ2VUeXBlKQotICAgICwgbV9wYXRoKHBhdGguY3Jvc3NUaHJlYWRTdHJpbmcoKSkKKyAgICAs
IG1fcGF0aChwYXRoLmlzb2xhdGVkQ29weSgpKQogICAgICwgbV9zeW5jTWFuYWdlcigwKQogICAg
ICwgbV9xdW90YShxdW90YSkKICAgICAsIG1faXNTaHV0ZG93bihmYWxzZSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAJKHJldmlzaW9uIDk4
Mjg5KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5h
Z2VyPiBTdG9yYWdlU3kKIAogU3RvcmFnZVN5bmNNYW5hZ2VyOjpTdG9yYWdlU3luY01hbmFnZXIo
Y29uc3QgU3RyaW5nJiBwYXRoKQogICAgIDogbV90aHJlYWQoTG9jYWxTdG9yYWdlVGhyZWFkOjpj
cmVhdGUoKSkKLSAgICAsIG1fcGF0aChwYXRoLmNyb3NzVGhyZWFkU3RyaW5nKCkpCisgICAgLCBt
X3BhdGgocGF0aC5pc29sYXRlZENvcHkoKSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogICAgIEFTU0VSVCghbV9wYXRoLmlzRW1wdHkoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcAkocmV2aXNpb24gOTgyODkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyAr
ODUsNyBAQCBTdG9yYWdlVHJhY2tlciYgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoCiB9CiAKIFN0
b3JhZ2VUcmFja2VyOjpTdG9yYWdlVHJhY2tlcihjb25zdCBTdHJpbmcmIHN0b3JhZ2VQYXRoKQot
ICAgIDogbV9zdG9yYWdlRGlyZWN0b3J5UGF0aChzdG9yYWdlUGF0aC50aHJlYWRzYWZlQ29weSgp
KQorICAgIDogbV9zdG9yYWdlRGlyZWN0b3J5UGF0aChzdG9yYWdlUGF0aC5pc29sYXRlZENvcHko
KSkKICAgICAsIG1fY2xpZW50KDApCiAgICAgLCBtX3RocmVhZChMb2NhbFN0b3JhZ2VUaHJlYWQ6
OmNyZWF0ZSgpKQogICAgICwgbV9pc0FjdGl2ZShmYWxzZSkKQEAgLTE2Nyw3ICsxNjcsNyBAQCB2
b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jSW1wb3J0T3JpZ2luSWRlCiAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja09yaWdpbnMobV9vcmlnaW5TZXRHdWFyZCk7
CiAgICAgICAgICAgICAgICAgd2hpbGUgKChyZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpKSA9PSBT
UUxSZXN1bHRSb3cpCi0gICAgICAgICAgICAgICAgICAgIG1fb3JpZ2luU2V0LmFkZChzdGF0ZW1l
bnQuZ2V0Q29sdW1uVGV4dCgwKS50aHJlYWRzYWZlQ29weSgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9vcmlnaW5TZXQuYWRkKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApLmlzb2xhdGVkQ29w
eSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHJlc3Vs
dCAhPSBTUUxSZXN1bHREb25lKSB7CkBAIC0yMTQsNyArMjE0LDcgQEAgdm9pZCBTdG9yYWdlVHJh
Y2tlcjo6c3luY0ZpbGVTeXN0ZW1BbmRUcgogICAgICAgICBNdXRleExvY2tlciBsb2NrKG1fb3Jp
Z2luU2V0R3VhcmQpOwogICAgICAgICBPcmlnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1f
b3JpZ2luU2V0LmVuZCgpOwogICAgICAgICBmb3IgKE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX29yaWdpblNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBv
cmlnaW5TZXRDb3B5LmFkZCgoKml0KS50aHJlYWRzYWZlQ29weSgpKTsKKyAgICAgICAgICAgIG9y
aWdpblNldENvcHkuYWRkKCgqaXQpLmlzb2xhdGVkQ29weSgpKTsKICAgICB9CiAgICAgCiAgICAg
Ly8gQWRkIG1pc3NpbmcgU3RvcmFnZVRyYWNrZXIgcmVjb3Jkcy4KQEAgLTIzNiw3ICsyMzYsNyBA
QCB2b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jRmlsZVN5c3RlbUFuZFRyCiAgICAgT3JpZ2luU2V0
Ojpjb25zdF9pdGVyYXRvciBzZXRFbmQgPSBvcmlnaW5TZXRDb3B5LmVuZCgpOwogICAgIGZvciAo
T3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG9yaWdpblNldENvcHkuYmVnaW4oKTsgaXQg
IT0gc2V0RW5kOyArK2l0KSB7CiAgICAgICAgIGlmICghZm91bmRPcmlnaW5zLmNvbnRhaW5zKCpp
dCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBvcmlnaW5JZGVudGlmaWVyID0g
KCppdCkudGhyZWFkc2FmZUNvcHkoKS5pbXBsKCk7CisgICAgICAgICAgICBSZWZQdHI8U3RyaW5n
SW1wbD4gb3JpZ2luSWRlbnRpZmllciA9ICgqaXQpLmlzb2xhdGVkQ29weSgpLmltcGwoKTsKICAg
ICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoZGVsZXRlT3JpZ2luT25NYWluVGhyZWFkLCBvcmln
aW5JZGVudGlmaWVyLnJlbGVhc2UoKS5sZWFrUmVmKCkpOwogICAgICAgICB9CiAgICAgfQpAQCAt
MjU2LDcgKzI1Niw3IEBAIHZvaWQgU3RvcmFnZVRyYWNrZXI6OnNldE9yaWdpbkRldGFpbHMoY28K
ICAgICAgICAgbV9vcmlnaW5TZXQuYWRkKG9yaWdpbklkZW50aWZpZXIpOwogICAgIH0KIAotICAg
IE93blB0cjxMb2NhbFN0b3JhZ2VUYXNrPiB0YXNrID0gTG9jYWxTdG9yYWdlVGFzazo6Y3JlYXRl
U2V0T3JpZ2luRGV0YWlscyhvcmlnaW5JZGVudGlmaWVyLnRocmVhZHNhZmVDb3B5KCksIGRhdGFi
YXNlRmlsZSk7CisgICAgT3duUHRyPExvY2FsU3RvcmFnZVRhc2s+IHRhc2sgPSBMb2NhbFN0b3Jh
Z2VUYXNrOjpjcmVhdGVTZXRPcmlnaW5EZXRhaWxzKG9yaWdpbklkZW50aWZpZXIuaXNvbGF0ZWRD
b3B5KCksIGRhdGFiYXNlRmlsZSk7CiAKICAgICBpZiAoaXNNYWluVGhyZWFkKCkpIHsKICAgICAg
ICAgQVNTRVJUKG1fdGhyZWFkKTsKQEAgLTUwMiw3ICs1MDIsNyBAQCB2b2lkIFN0b3JhZ2VUcmFj
a2VyOjp3aWxsRGVsZXRlQWxsT3JpZ2luCiAKICAgICBPcmlnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1fb3JpZ2luU2V0LmVuZCgpOwogICAgIGZvciAoT3JpZ2luU2V0Ojpjb25zdF9pdGVy
YXRvciBpdCA9IG1fb3JpZ2luU2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
bV9vcmlnaW5zQmVpbmdEZWxldGVkLmFkZCgoKml0KS50aHJlYWRzYWZlQ29weSgpKTsKKyAgICAg
ICAgbV9vcmlnaW5zQmVpbmdEZWxldGVkLmFkZCgoKml0KS5pc29sYXRlZENvcHkoKSk7CiB9CiAK
IHZvaWQgU3RvcmFnZVRyYWNrZXI6OndpbGxEZWxldGVPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmln
aW5JZGVudGlmaWVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTZWcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZy5oCShyZXZpc2lvbiA5ODI4
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU2VnLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIyLDYgKzIyLDcgQEAKICNkZWZpbmUgU1ZHUGF0aFNlZ19oCiAKICNpZiBFTkFCTEUoU1ZHKQor
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
RGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvRGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnkuY3BwCShyZXZpc2lv
biA5ODI4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvRGVmYXVsdFNoYXJlZFdvcmtlclJl
cG9zaXRvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxMCArNjgsMTAgQEAgcHVibGljOgog
ICAgIEtVUkwgdXJsKCkgY29uc3QKICAgICB7CiAgICAgICAgIC8vIERvbid0IHVzZSBtX3VybC5j
b3B5KCkgYmVjYXVzZSBpdCBpc24ndCBhIHRocmVhZHNhZmUgbWV0aG9kLgotICAgICAgICByZXR1
cm4gS1VSTChQYXJzZWRVUkxTdHJpbmcsIG1fdXJsLnN0cmluZygpLnRocmVhZHNhZmVDb3B5KCkp
OworICAgICAgICByZXR1cm4gS1VSTChQYXJzZWRVUkxTdHJpbmcsIG1fdXJsLnN0cmluZygpLmlz
b2xhdGVkQ29weSgpKTsKICAgICB9CiAKLSAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbmFtZS50aHJlYWRzYWZlQ29weSgpOyB9CisgICAgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJl
dHVybiBtX25hbWUuaXNvbGF0ZWRDb3B5KCk7IH0KICAgICBib29sIG1hdGNoZXMoY29uc3QgU3Ry
aW5nJiBuYW1lLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4sIGNvbnN0IEtVUkwm
IHVybFRvTWF0Y2gpIGNvbnN0OwogCiAgICAgLy8gV29ya2VyTG9hZGVyUHJveHkKQEAgLTExMyw3
ICsxMTMsNyBAQCBwcml2YXRlOgogCiBTaGFyZWRXb3JrZXJQcm94eTo6U2hhcmVkV29ya2VyUHJv
eHkoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBLVVJMJiB1cmwsIFBhc3NSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+IG9yaWdpbikKICAgICA6IG1fY2xvc2luZyhmYWxzZSkKLSAgICAsIG1fbmFtZShu
YW1lLmNyb3NzVGhyZWFkU3RyaW5nKCkpCisgICAgLCBtX25hbWUobmFtZS5pc29sYXRlZENvcHko
KSkKICAgICAsIG1fdXJsKHVybC5jb3B5KCkpCiAgICAgLCBtX29yaWdpbihvcmlnaW4pCiB7CkBA
IC00MjEsNyArNDIxLDcgQEAgUGFzc1JlZlB0cjxTaGFyZWRXb3JrZXJQcm94eT4gRGVmYXVsdFNo
YQogICAgIC8vIExvb2sgZm9yIGFuIGV4aXN0aW5nIHdvcmtlciwgYW5kIGNyZWF0ZSBvbmUgaWYg
aXQgZG9lc24ndCBleGlzdC4KICAgICAvLyBJdGVtcyBpbiB0aGUgY2FjaGUgYXJlIGZyZWVkIG9u
IGFub3RoZXIgdGhyZWFkLCBzbyBkbyBhIHRocmVhZHNhZmUgY29weSBvZiB0aGUgVVJMIGJlZm9y
ZSBjcmVhdGluZyB0aGUgb3JpZ2luLAogICAgIC8vIHRvIG1ha2Ugc3VyZSBubyByZWZlcmVuY2Vz
IHRvIGV4dGVybmFsIHN0cmluZ3MgbGluZ2VyLgotICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4g
b3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShLVVJMKFBhcnNlZFVSTFN0cmluZywgdXJs
LnN0cmluZygpLnRocmVhZHNhZmVDb3B5KCkpKTsKKyAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
IG9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUoS1VSTChQYXJzZWRVUkxTdHJpbmcsIHVy
bC5zdHJpbmcoKS5pc29sYXRlZENvcHkoKSkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX3Byb3hpZXMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgaWYgKCFtX3Byb3hpZXNbaV0tPmlz
Q2xvc2luZygpICYmIG1fcHJveGllc1tpXS0+bWF0Y2hlcyhuYW1lLCBvcmlnaW4sIHVybCkpCiAg
ICAgICAgICAgICByZXR1cm4gbV9wcm94aWVzW2ldOwpJbmRleDogU291cmNlL1dlYkNvcmUvd29y
a2Vycy9TaGFyZWRXb3JrZXJUaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvU2hhcmVkV29ya2VyVGhyZWFkLmNwcAkocmV2aXNpb24gOTgyODkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL1NoYXJlZFdvcmtlclRocmVhZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ1LDcgKzQ1LDcgQEAgUGFzc1JlZlB0cjxTaGFyZWRXb3JrZXJUaHJlYWQ+IFNoYXJlZFdv
cgogCiBTaGFyZWRXb3JrZXJUaHJlYWQ6OlNoYXJlZFdvcmtlclRocmVhZChjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0
cmluZyYgc291cmNlQ29kZSwgV29ya2VyTG9hZGVyUHJveHkmIHdvcmtlckxvYWRlclByb3h5LCBX
b3JrZXJSZXBvcnRpbmdQcm94eSYgd29ya2VyUmVwb3J0aW5nUHJveHksIFdvcmtlclRocmVhZFN0
YXJ0TW9kZSBzdGFydE1vZGUpCiAgICAgOiBXb3JrZXJUaHJlYWQodXJsLCB1c2VyQWdlbnQsIHNv
dXJjZUNvZGUsIHdvcmtlckxvYWRlclByb3h5LCB3b3JrZXJSZXBvcnRpbmdQcm94eSwgc3RhcnRN
b2RlKQotICAgICwgbV9uYW1lKG5hbWUuY3Jvc3NUaHJlYWRTdHJpbmcoKSkKKyAgICAsIG1fbmFt
ZShuYW1lLmlzb2xhdGVkQ29weSgpKQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcAkocmV2aXNpb24gOTgyODkpCisrKyBT
b3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE4LDkgKzExOCw5IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBXb3JrZXJF
eGNlcHRpb25UYXNrKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQgbGluZU51bWJlciwg
Y29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtZXNzYWdpbmdQ
cm94eSkKLSAgICAgICAgOiBtX2Vycm9yTWVzc2FnZShlcnJvck1lc3NhZ2UuY3Jvc3NUaHJlYWRT
dHJpbmcoKSkKKyAgICAgICAgOiBtX2Vycm9yTWVzc2FnZShlcnJvck1lc3NhZ2UuaXNvbGF0ZWRD
b3B5KCkpCiAgICAgICAgICwgbV9saW5lTnVtYmVyKGxpbmVOdW1iZXIpCi0gICAgICAgICwgbV9z
b3VyY2VVUkwoc291cmNlVVJMLmNyb3NzVGhyZWFkU3RyaW5nKCkpCisgICAgICAgICwgbV9zb3Vy
Y2VVUkwoc291cmNlVVJMLmlzb2xhdGVkQ29weSgpKQogICAgICAgICAsIG1fbWVzc2FnaW5nUHJv
eHkobWVzc2FnaW5nUHJveHkpCiAgICAgewogICAgIH0KQEAgLTIyMiw3ICsyMjIsNyBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIFBvc3RNZXNzYWdlVG9QYWdlSW5zcGVjdG9yVGFzayhXb3JrZXJN
ZXNzYWdpbmdQcm94eSogbWVzc2FnaW5nUHJveHksIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKICAg
ICAgICAgOiBtX21lc3NhZ2luZ1Byb3h5KG1lc3NhZ2luZ1Byb3h5KQotICAgICAgICAsIG1fbWVz
c2FnZShtZXNzYWdlLmNyb3NzVGhyZWFkU3RyaW5nKCkpCisgICAgICAgICwgbV9tZXNzYWdlKG1l
c3NhZ2UuaXNvbGF0ZWRDb3B5KCkpCiAgICAgewogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXJSdW5Mb29wLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlclJ1bkxvb3AuY3BwCShyZXZpc2lvbiA5ODI4OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyUnVuTG9vcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NSw3
ICsxODUsNyBAQCB2b2lkIFdvcmtlclJ1bkxvb3A6OnBvc3RUYXNrKFBhc3NPd25QdHI8CiAKIHZv
aWQgV29ya2VyUnVuTG9vcDo6cG9zdFRhc2tGb3JNb2RlKFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6VGFzaz4gdGFzaywgY29uc3QgU3RyaW5nJiBtb2RlKQogewotICAgIG1fbWVz
c2FnZVF1ZXVlLmFwcGVuZChUYXNrOjpjcmVhdGUodGFzaywgbW9kZS5jcm9zc1RocmVhZFN0cmlu
ZygpKSk7CisgICAgbV9tZXNzYWdlUXVldWUuYXBwZW5kKFRhc2s6OmNyZWF0ZSh0YXNrLCBtb2Rl
Lmlzb2xhdGVkQ29weSgpKSk7CiB9CiAKIFBhc3NPd25QdHI8V29ya2VyUnVuTG9vcDo6VGFzaz4g
V29ya2VyUnVuTG9vcDo6VGFzazo6Y3JlYXRlKFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDo6VGFzaz4gdGFzaywgY29uc3QgU3RyaW5nJiBtb2RlKQpAQCAtMjAyLDcgKzIwMiw3IEBA
IHZvaWQgV29ya2VyUnVuTG9vcDo6VGFzazo6cGVyZm9ybVRhc2soU2MKIAogV29ya2VyUnVuTG9v
cDo6VGFzazo6VGFzayhQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRh
c2ssIGNvbnN0IFN0cmluZyYgbW9kZSkKICAgICA6IG1fdGFzayh0YXNrKQotICAgICwgbV9tb2Rl
KG1vZGUuY3Jvc3NUaHJlYWRTdHJpbmcoKSkKKyAgICAsIG1fbW9kZShtb2RlLmlzb2xhdGVkQ29w
eSgpKQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3Bw
CShyZXZpc2lvbiA5ODI4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFk
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsOCArODAsOCBAQCBwcml2YXRlOgogCiBXb3JrZXJU
aHJlYWRTdGFydHVwRGF0YTo6V29ya2VyVGhyZWFkU3RhcnR1cERhdGEoY29uc3QgS1VSTCYgc2Ny
aXB0VVJMLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2Rl
LCBXb3JrZXJUaHJlYWRTdGFydE1vZGUgc3RhcnRNb2RlKQogICAgIDogbV9zY3JpcHRVUkwoc2Ny
aXB0VVJMLmNvcHkoKSkKLSAgICAsIG1fdXNlckFnZW50KHVzZXJBZ2VudC5jcm9zc1RocmVhZFN0
cmluZygpKQotICAgICwgbV9zb3VyY2VDb2RlKHNvdXJjZUNvZGUuY3Jvc3NUaHJlYWRTdHJpbmco
KSkKKyAgICAsIG1fdXNlckFnZW50KHVzZXJBZ2VudC5pc29sYXRlZENvcHkoKSkKKyAgICAsIG1f
c291cmNlQ29kZShzb3VyY2VDb2RlLmlzb2xhdGVkQ29weSgpKQogICAgICwgbV9zdGFydE1vZGUo
c3RhcnRNb2RlKQogewogfQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9u
IDk4Mjg5KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMS0xMC0yNCAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZWQgU2hhcmVkVUNoYXIgYW5kIHRpZ2h0ZW5lZCBs
YW5ndWFnZSBhcm91bmQgaXRzIHByZXZpb3VzIHVzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwNjk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgLSBSZW5hbWVkICJ0aHJlYWRTYWZlQ29weSIgYW5kICJj
cm9zc1RocmVhZENvcHkiIHRvICJpc29sYXRlZENvcHkiIGJlY2F1c2UKKyAgICAgICAgdGhlIGZv
cm1lciBuYW1lcyBnYXZlIHRoZSBkYW5nZXJvdXMgbWlzaW1wcmVzc2lvbiB0aGF0IHRoZSByZXN1
bHRpbmcgb2JqZWN0CisgICAgICAgIHdhcyB0aHJlYWQtc2FmZSwgd2hpY2ggaXMgbm90IHRydWUu
CisKKworICAgICAgICAqIHNyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmNwcDoK
KwogMjAxMS0xMC0yNCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+
CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjk4MjY2LgpJbmRleDogU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3Rl
bUNhbGxiYWNrc0JyaWRnZS5jcHAJKHJldmlzaW9uIDk4Mjg5KQorKysgU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc0LDcgKzc0LDcgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRDb3Bp
ZXJCYXNlPAogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGVudHJpZXMuc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gZW50cmllc1tpXS5uYW1lOwogICAgICAg
ICAgICAgbmV3RW50cmllc1tpXS5pc0RpcmVjdG9yeSA9IGVudHJpZXNbaV0uaXNEaXJlY3Rvcnk7
Ci0gICAgICAgICAgICBuZXdFbnRyaWVzW2ldLm5hbWUgPSBuYW1lLmNyb3NzVGhyZWFkU3RyaW5n
KCk7CisgICAgICAgICAgICBuZXdFbnRyaWVzW2ldLm5hbWUgPSBuYW1lLmlzb2xhdGVkQ29weSgp
OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBuZXdFbnRyaWVzOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21h
Yy9DaGFuZ2VMb2cJKHJldmlzaW9uIDk4Mjg5KQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMTAtMjQgIEdlb2ZmcmV5
IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmVkIFNoYXJlZFVDaGFy
IGFuZCB0aWdodGVuZWQgbGFuZ3VhZ2UgYXJvdW5kIGl0cyBwcmV2aW91cyB1c2VzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDY5OAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gUmVuYW1lZCAidGhyZWFk
U2FmZUNvcHkiIGFuZCAiY3Jvc3NUaHJlYWRDb3B5IiB0byAiaXNvbGF0ZWRDb3B5IiBiZWNhdXNl
CisgICAgICAgIHRoZSBmb3JtZXIgbmFtZXMgZ2F2ZSB0aGUgZGFuZ2Vyb3VzIG1pc2ltcHJlc3Np
b24gdGhhdCB0aGUgcmVzdWx0aW5nIG9iamVjdAorICAgICAgICB3YXMgdGhyZWFkLXNhZmUsIHdo
aWNoIGlzIG5vdCB0cnVlLgorCisgICAgICAgICogU3RvcmFnZS9XZWJEYXRhYmFzZVRyYWNrZXJD
bGllbnQubW06CisgICAgICAgIChEaWRNb2RpZnlPcmlnaW5EYXRhOjpkaXNwYXRjaFRvTWFpblRo
cmVhZCk6CisKIDIwMTEtMTAtMjQgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+
CiAKICAgICAgICAgV2ViS2l0IGRvZXNuJ3QgYnVpbGQgd2l0aCByZWNlbnQgY2hhbmdlcyB0byBs
aWJkaXNwYXRjaApJbmRleDogU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJEYXRhYmFzZVRy
YWNrZXJDbGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9X
ZWJEYXRhYmFzZVRyYWNrZXJDbGllbnQubW0JKHJldmlzaW9uIDk4Mjg5KQorKysgU291cmNlL1dl
YktpdC9tYWMvU3RvcmFnZS9XZWJEYXRhYmFzZVRyYWNrZXJDbGllbnQubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTU3LDcgKzU3LDcgQEAgY2xhc3MgRGlkTW9kaWZ5T3JpZ2luRGF0YSB7CiBwdWJsaWM6
CiAgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hUb01haW5UaHJlYWQoV2ViRGF0YWJhc2VUcmFja2Vy
Q2xpZW50KiBjbGllbnQsIFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCiAgICAgewotICAgICAgICBE
aWRNb2RpZnlPcmlnaW5EYXRhKiBjb250ZXh0ID0gbmV3IERpZE1vZGlmeU9yaWdpbkRhdGEoY2xp
ZW50LCBvcmlnaW4tPnRocmVhZHNhZmVDb3B5KCkpOworICAgICAgICBEaWRNb2RpZnlPcmlnaW5E
YXRhKiBjb250ZXh0ID0gbmV3IERpZE1vZGlmeU9yaWdpbkRhdGEoY2xpZW50LCBvcmlnaW4tPmlz
b2xhdGVkQ29weSgpKTsKICAgICAgICAgY2FsbE9uTWFpblRocmVhZCgmRGlkTW9kaWZ5T3JpZ2lu
RGF0YTo6ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW5Pbk1haW5UaHJlYWQsIGNvbnRleHQpOwogICAg
IH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112269</attachid>
            <date>2011-10-24 16:06:03 -0700</date>
            <delta_ts>2011-10-24 17:06:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70698-20111024160603.patch</filename>
            <type>text/plain</type>
            <size>94546</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTgyODkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTQgQEAK
KzIwMTEtMTAtMjQgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZW1vdmVkIFNoYXJlZFVDaGFyIGFuZCB0aWdodGVuZWQgbGFuZ3VhZ2UgYXJvdW5kIGl0cyBw
cmV2aW91cyB1c2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03MDY5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIC0gUmVtb3ZlZCBTaGFyZWRVQ2hhciBiZWNhdXNlIG1vc3Qgb2YgaXRzIGZ1bmN0aW9uYWxp
dHkgaGFzIG1vdmVkIGludG8KKyAgICAgICAgb3RoZXIgYWJzdHJhY3Rpb24gbGF5ZXJzLCBhbmQg
d2Ugd2FudCByZW1haW5pbmcgY2xpZW50cyB0byBjaG9vc2UgdGhlaXIKKyAgICAgICAgYWJzdHJh
Y3Rpb25zIGV4cGxpY2l0bHkgaW5zdGVhZCBvZiByZWx5aW5nIG9uIFN0cmluZ0ltcGwgdG8gcHJv
dmlkZSB0aGlzCisgICAgICAgIGJlaGF2aW9yIGltcGxpY2l0bHksIHNpbmNlIHdlIHRoaW5rIHRo
ZXkgY2FuIHNvbWV0aW1lcyBtYWtlIG1vcmUgZWZmaWNpZW50CisgICAgICAgIGNob2ljZXMuCisK
KyAgICAgICAgLSBSZW5hbWVkICJ0aHJlYWRTYWZlQ29weSIgYW5kICJjcm9zc1RocmVhZENvcHki
IHRvICJpc29sYXRlZENvcHkiIGJlY2F1c2UKKyAgICAgICAgdGhlIGZvcm1lciBuYW1lcyBjb3Vs
ZCBnaXZlIHRoZSBpbXByZXNzaW9uIHRoYXQgdGhlIHJlc3VsdGluZyBvYmplY3Qgd2FzCisgICAg
ICAgIHRocmVhZC1zYWZlLCBidXQgYWN0dWFsbHkgaXQncyBqdXN0IGFuIGlzb2xhdGVkIGNvcHks
IHdoaWNoIGlzIG5vdAorICAgICAgICB0aHJlYWQtc2FmZSBieSBpdHNlbGYsIGJ1dCBjYW4gYmUg
dXNlZCB0byBpbXBsZW1lbnQgYSB0aHJlYWQtc2FmZQorICAgICAgICBhbGdvcml0aG0gdGhyb3Vn
aCBpc29sYXRpb24uCisKKyAgICAgICAgKiB3dGYvQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmg6IFJl
bW92ZWQuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5leHA6IEV4cG9ydCEKKworICAgICAg
ICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp+
U3RyaW5nSW1wbCk6IFJlbW92ZWQgdGhlIHN0dWZmIG1lbnRpb25lZCBhYm92ZS4KKworICAgICAg
ICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuaDoKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6bGVu
Z3RoKTogRGl0dG8uCisKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6aXNvbGF0ZWRDb3B5KTog
SW5saW5lZCB0aGlzLCBzaW5jZSBpdCdzIG5vdyB0cml2aWFsLgorCisgICAgICAgICogd3RmL3Rl
eHQvV1RGU3RyaW5nLmNwcDoKKyAgICAgICAgKFdURjo6U3RyaW5nOjppc29sYXRlZENvcHkpOgor
ICAgICAgICAqIHd0Zi90ZXh0L1dURlN0cmluZy5oOiBVcGRhdGVkIGZvciBTdHJpbmdJbXBsIGNo
YW5nZXMuCisKKyAgICAgICAgKiBBUEkvT3BhcXVlSlNTdHJpbmcuaDoKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmV4cDoKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS5neXBpOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLm9yZGVyOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvajoKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0
Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvT3duRmFzdE1hbGxvY1B0ci5oOgorICAg
ICAgICAqIHd0Zi9SZWZDb3VudGVkLmg6CisgICAgICAgICogd3RmL1NpemVMaW1pdHMuY3BwOgor
ICAgICAgICAqIHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oOgorICAgICAgICAqIHd0Zi93dGYu
cHJpOgorICAgICAgICAqIHlhcnIvWWFyclBhdHRlcm4uaDogVXBkYXRlZCB0aGVzZSBmaWxlcyB0
byBhY2NvbW9kYXRlIHJlbW92YWwgb2YKKyAgICAgICAgQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmgu
CisKIDIwMTEtMTAtMjQgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4K
IAogICAgICAgICBGaXhpbmcgV2luZG93cyBidWlsZApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDk4Mjg5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTQ5MCw3ICs0
OTAsNiBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL0J5dGVBcnJheS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NoZWNrZWRB
cml0aG1ldGljLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ29tcGlsZXIuaCBcCi0J
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Dcm9zc1RocmVhZFJlZkNvdW50ZWQuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5jcHAg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1i
ZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DdXJyZW50VGltZS5jcHAgXApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCShyZXZpc2lvbiA5ODI4
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM2Myw3ICszNjMsNiBAQCBfX1pOM0pTQ2d0RVJLTlNfN1VTdHJpbmdFUzJfCiBf
X1pOM0pTQ2x0RVJLTlNfN1VTdHJpbmdFUzJfCiBfX1pOM1dURjEwU3RyaW5nSW1wbDExcmV2ZXJz
ZUZpbmRFUFMwX2oKIF9fWk4zV1RGMTBTdHJpbmdJbXBsMTFyZXZlcnNlRmluZEV0agotX19aTjNX
VEYxMFN0cmluZ0ltcGwxMnNoYXJlZEJ1ZmZlckV2CiBfX1pOM1dURjEwU3RyaW5nSW1wbDE2Zmlu
ZElnbm9yaW5nQ2FzZUVQS2NqCiBfX1pOM1dURjEwU3RyaW5nSW1wbDE2ZmluZElnbm9yaW5nQ2Fz
ZUVQUzBfagogX19aTjNXVEYxMFN0cmluZ0ltcGwxOHNpbXBsaWZ5V2hpdGVTcGFjZUV2CkBAIC01
OTcsMTMgKzU5NiwxMiBAQCBfX1pOSzNXVEYxM0RlY2ltYWxOdW1iZXIxOXRvU3RyaW5nRXhwb25l
CiBfX1pOSzNXVEYxM0RlY2ltYWxOdW1iZXIyOGJ1ZmZlckxlbmd0aEZvclN0cmluZ0RlY2ltYWxF
dgogX19aTkszV1RGMTNEZWNpbWFsTnVtYmVyMzJidWZmZXJMZW5ndGhGb3JTdHJpbmdFeHBvbmVu
dGlhbEV2CiBfX1pOSzNXVEY2U3RyaW5nMTF0b0ludFN0cmljdEVQYmkKK19fWk5LM1dURjZTdHJp
bmcxMmlzb2xhdGVkQ29weUV2CiBfX1pOSzNXVEY2U3RyaW5nMTJ0b1VJbnRTdHJpY3RFUGJpCiBf
X1pOSzNXVEY2U3RyaW5nMTN0b0ludDY0U3RyaWN0RVBiaQotX19aTkszV1RGNlN0cmluZzE0dGhy
ZWFkc2FmZUNvcHlFdgogX19aTkszV1RGNlN0cmluZzE1c3RyaXBXaGl0ZVNwYWNlRVBGYnRFCiBf
X1pOSzNXVEY2U3RyaW5nMTVzdHJpcFdoaXRlU3BhY2VFdgogX19aTkszV1RGNlN0cmluZzE2cmVt
b3ZlQ2hhcmFjdGVyc0VQRmJ0RQotX19aTkszV1RGNlN0cmluZzE3Y3Jvc3NUaHJlYWRTdHJpbmdF
dgogX19aTkszV1RGNlN0cmluZzE4c2ltcGxpZnlXaGl0ZVNwYWNlRVBGYnRFCiBfX1pOSzNXVEY2
U3RyaW5nMThzaW1wbGlmeVdoaXRlU3BhY2VFdgogX19aTkszV1RGNlN0cmluZzE5Y2hhcmFjdGVy
U3RhcnRpbmdBdEVqCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
Z3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
Z3lwaQkocmV2aXNpb24gOTgyODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDcgKzE0NCw2IEBACiAgICAgICAgICAg
ICAnd3RmL0NoZWNrZWRBcml0aG1ldGljLmgnLAogICAgICAgICAgICAgJ3d0Zi9Db21waWxlci5o
JywKICAgICAgICAgICAgICd3dGYvQ29tcGxleC5oJywKLSAgICAgICAgICAgICd3dGYvQ3Jvc3NU
aHJlYWRSZWZDb3VudGVkLmgnLAogICAgICAgICAgICAgJ3d0Zi9DcnlwdG9ncmFwaGljYWxseVJh
bmRvbU51bWJlci5oJywKICAgICAgICAgICAgICd3dGYvQ3VycmVudFRpbWUuaCcsCiAgICAgICAg
ICAgICAnd3RmL0RhdGVNYXRoLmgnLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLm9yZGVyCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS5vcmRlcgkocmV2aXNpb24gOTgyODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUub3JkZXIJKHdvcmtpbmcgY29weSkKQEAgLTU1LDggKzU1LDYgQEAg
X19aTjNXVEY3Q1N0cmluZzExbXV0YWJsZURhdGFFdgogX19aTjNXVEY3Q1N0cmluZzE4Y29weUJ1
ZmZlcklmTmVlZGVkRXYKIF9fWk4zV1RGNU11dGV4NGxvY2tFdgogX19aTjNXVEY1TXV0ZXg2dW5s
b2NrRXYKLV9fWk5LM1dURjZTdHJpbmcxN2Nyb3NzVGhyZWFkU3RyaW5nRXYKLV9fWk4zV1RGMTBT
dHJpbmdJbXBsMTdjcm9zc1RocmVhZFN0cmluZ0V2CiBfX1pOM1dURjEwU3RyaW5nSW1wbDEyc2hh
cmVkQnVmZmVyRXYKIF9fWk4zV1RGMTBTdHJpbmdJbXBsOGVuZHNXaXRoRVBTMF9iCiBfX1pOM1dU
RjEyY3JlYXRlVGhyZWFkRVBGUHZTMF9FUzBfUEtjCkBAIC0yMjA4LDcgKzIyMDYsNiBAQCBfX1pO
M0pTQzExSlNCeXRlQXJyYXkxOGdldE93blByb3BlcnR5U2xvCiBfX1pOM1dURjIwZXF1YWxJZ25v
cmluZ051bGxpdHlFUE5TXzEwU3RyaW5nSW1wbEVTMV8KIF9jdGlfb3BfZ2V0X2J5X2lkX2FycmF5
X2ZhaWwKIF9fWk4zSlNDMTdQcmVmaXhCcmFja2V0Tm9kZTEyZW1pdEJ5dGVjb2RlRVJOU18xN0J5
dGVjb2RlR2VuZXJhdG9yRVBOU18xMFJlZ2lzdGVySURFCi1fX1pOM1dURjIxQ3Jvc3NUaHJlYWRS
ZWZDb3VudGVkSU5TXzE2T3duRmFzdE1hbGxvY1B0cklLdEVFRTVkZXJlZkV2CiBfX1pOM0pTQzEy
SlNHbG9iYWxEYXRhMTBDbGllbnREYXRhRDJFdgogX19aTjNKU0M4RGVidWdnZXJEMkV2CiBfX1pO
M1dURjE0VGhyZWFkU3BlY2lmaWNJTlNfMTNXVEZUaHJlYWREYXRhRUU3ZGVzdHJveUVQdgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PcGFxdWVKU1N0cmluZy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT3BhcXVlSlNTdHJpbmcuaAkocmV2aXNpb24g
OTgyODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09wYXF1ZUpTU3RyaW5nLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgT3BhcXVlSlNTdHJpbmdfaAog
I2RlZmluZSBPcGFxdWVKU1N0cmluZ19oCiAKKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNv
dW50ZWQuaD4KICNpbmNsdWRlIDxydW50aW1lL1VTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9X
VEYudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2oJKHJldmlzaW9uIDk4Mjg5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtNjgxLDEwICs2ODEsNiBAQAogCQkJPgogCQk8L0ZpbGU+CiAJCTxGaWxlCi0J
CQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCIKLQkJCT4K
LQkJPC9GaWxlPgotCQk8RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcQ3J5cHRvZ3Jh
cGhpY2FsbHlSYW5kb21OdW1iZXIuY3BwIgogCQkJPgogCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gOTgyODkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtNDYsNyArNDYsNiBAQAogCQkwQjMzMEMyNzBGMzhDNjIzMDA2OTJERTMgLyogVHlw
ZVRyYWl0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwQjMzMEMyNjBGMzhDNjIzMDA2OTJERTMgLyogVHlwZVRyYWl0cy5jcHAgKi87IH07CiAJCTBC
NEQ3RTYzMEYzMTlBQzgwMEFEN0U1OCAvKiBUeXBlVHJhaXRzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQjREN0U2MjBGMzE5QUM4MDBBRDdFNTggLyog
VHlwZVRyYWl0cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBCQUM5NEEwMTMzODcyODQwMENGMTM1QiAvKiBUaHJlYWRSZXN0cmljdGlvblZlcmlm
aWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQkFD
OTQ5RTEzMzg3Mjg0MDBDRjEzNUIgLyogVGhyZWFkUmVzdHJpY3Rpb25WZXJpZmllci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBCREZGQUUwMEZD
NjE5MjkwMEQ2OUVGNCAvKiBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBCREZGQUQ0MEZDNjE3MTAwMEQ2OUVGNCAv
KiBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwQkRGRkFFMTBGQzYxOTMxMDBENjlFRjQgLyogT3duRmFzdE1h
bGxvY1B0ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEJERkZBRDEwRkM2MTZFQzAwRDY5RUY0IC8qIE93bkZhc3RNYWxsb2NQdHIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwQkYyOEEyOTExQTMzREMz
MDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwQkYyOEEyODExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5j
cHAgKi87IH07CiAJCTBGMTZENzI2MTQyQzM5QzAwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNkQ3MjQxNDJD
MzlBMjAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5jcHAgKi87IH07CkBAIC04MDgsNyArODA3LDYgQEAK
IAkJMEI0RDdFNjIwRjMxOUFDODAwQUQ3RTU4IC8qIFR5cGVUcmFpdHMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZVRyYWl0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwQkFDOTQ5RTEzMzg3Mjg0MDBDRjEzNUIgLyogVGhyZWFkUmVzdHJpY3Rpb25WZXJp
Zmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRSZXN0cmljdGlv
blZlcmlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBCREZGQUQxMEZDNjE2
RUMwMEQ2OUVGNCAvKiBPd25GYXN0TWFsbG9jUHRyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE93bkZhc3RNYWxsb2NQdHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMEJERkZBRDQwRkM2MTcxMDAwRDY5RUY0IC8qIENyb3NzVGhyZWFkUmVmQ291bnRlZC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEJGMjhBMjgxMUEzM0RDMzAwNjM4Rjg0IC8q
IFNpemVMaW1pdHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2l6
ZUxpbWl0cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTZENzI0MTQyQzM5
QTIwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQml0VmVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYy
NDJEQTUxM0YzQjFCQjAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTg3Nyw3ICsxODc1LDYgQEAKIAkJCQlBN0JDMEM4
MTE0MDYwOEIwMDBCMUJCNzEgLyogQ2hlY2tlZEFyaXRobWV0aWMuaCAqLywKIAkJCQlCQzY2QkFF
MjEzRjQ5MjhGMDBDMjNGQUUgLyogQ29tcGlsZXIuaCAqLywKIAkJCQlGREExNUMxNjEyQjAzMDI4
MDAzQTU4M0EgLyogQ29tcGxleC5oICovLAotCQkJCTBCREZGQUQ0MEZDNjE3MTAwMEQ2OUVGNCAv
KiBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCAqLywKIAkJCQk5Nzk0MUE3QzEzMDJBMDk4MDA0QTM0
NDcgLyogQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuY3BwICovLAogCQkJCTk3OTQxQTdE
MTMwMkEwOTgwMDRBMzQ0NyAvKiBDcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oICovLAog
CQkJCTE4MEI5QUVGMEYxNkM1NjkwMDlCREJDNSAvKiBDdXJyZW50VGltZS5jcHAgKi8sCkBAIC0y
NTUxLDcgKzI1NDgsNiBAQAogCQkJCUJDMThDM0Y1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBjb25maWcu
aCBpbiBIZWFkZXJzICovLAogCQkJCTE0NDgzNkU3MTMyREE3QkUwMDVCRTc4NSAvKiBDb25zZXJ2
YXRpdmVSb290cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRjYwRTE2RjVDRDAwQjM0NDYw
IC8qIENvbnN0cnVjdERhdGEuaCBpbiBIZWFkZXJzICovLAotCQkJCTBCREZGQUUwMEZDNjE5Mjkw
MEQ2OUVGNCAvKiBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3
OTQxQTdGMTMwMkEwOTgwMDRBMzQ0NyAvKiBDcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODY1NjU3NDMxMTVCRTNEQTAwMjkxRjQwIC8qIENTdHJpbmcu
aCBpbiBIZWFkZXJzICovLAogCQkJCTE4MEI5QjA4MEYxNkQ5NEYwMDlCREJDNSAvKiBDdXJyZW50
VGltZS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NN
YWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ01h
a2VMaXN0cy50eHQJKHJldmlzaW9uIDk4Mjg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTIsNyArMTIsNiBAQCBTRVQoV1RG
X0hFQURFUlMKICAgICBCeXRlQXJyYXkuaAogICAgIENvbXBpbGVyLmgKICAgICBDb21wbGV4LmgK
LSAgICBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaAogICAgIENyeXB0b2dyYXBoaWNhbGx5UmFuZG9t
TnVtYmVyLmgKICAgICBDdXJyZW50VGltZS5oCiAgICAgRGF0ZU1hdGguaApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9Dcm9zc1RocmVhZFJlZkNvdW50ZWQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0Nyb3NzVGhyZWFkUmVmQ291bnRlZC5oCShyZXZp
c2lvbiA5ODI4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ3Jvc3NUaHJlYWRSZWZD
b3VudGVkLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4K
LSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDcm9zc1RocmVh
ZFJlZkNvdW50ZWRfaAotI2RlZmluZSBDcm9zc1RocmVhZFJlZkNvdW50ZWRfaAotCi0jaW5jbHVk
ZSAiUGFzc1JlZlB0ci5oIgotI2luY2x1ZGUgIlJlZkNvdW50ZWQuaCIKLSNpbmNsdWRlICJUaHJl
YWRpbmcuaCIKLQotbmFtZXNwYWNlIFdURiB7Ci0KLSAgICAvLyBVc2VkIHRvIGFsbG93aW5nIHNo
YXJpbmcgZGF0YSBhY3Jvc3MgY2xhc3NlcyBhbmQgdGhyZWFkcyAobGlrZSBUaHJlYWRTYWZlUmVm
Q291bnRlZCkuCi0gICAgLy8KLSAgICAvLyBXaHkgbm90IGp1c3QgdXNlIFRocmVhZFNhZmVSZWZD
b3VudGVkPwotICAgIC8vIFRocmVhZFNhZmVSZWZDb3VudGVkIGNhbiBoYXZlIGEgc2lnbmlmaWNh
bnQgcGVyZiBpbXBhY3Qgd2hlbiB1c2VkIGluIGxvdyBsZXZlbCBjbGFzc2VzCi0gICAgLy8gKGxp
a2UgVVN0cmluZykgdGhhdCBnZXQgcmVmL2RlcmVmJ2VkIGEgbG90LiBUaGlzIGNsYXNzIGhhcyB0
aGUgYmVuZWZpdCBvZiBkb2luZyBmYXN0IHJlZgotICAgIC8vIGNvdW50cyBsaWtlIFJlZlB0ciB3
aGVuZXZlciBwb3NzaWJsZSwgYnV0IGl0IGhhcyB0aGUgZG93bnNpZGUgdGhhdCB5b3UgbmVlZCB0
byBjb3B5IGl0Ci0gICAgLy8gdG8gdXNlIGl0IG9uIGFub3RoZXIgdGhyZWFkLgotICAgIC8vCi0g
ICAgLy8gSXMgdGhpcyBjbGFzcyB0aHJlYWRzYWZlPwotICAgIC8vIFdoaWxlIGVhY2ggaW5zdGFu
Y2Ugb2YgdGhlIGNsYXNzIGlzIG5vdCB0aHJlYWRzYWZlLCB0aGUgY29waWVkIGluc3RhbmNlIGlz
IHRocmVhZHNhZmUKLSAgICAvLyB3aXRoIHJlc3BlY3QgdG8gdGhlIG9yaWdpbmFsIGFuZCBhbnkg
b3RoZXIgY29waWVzLiAgVGhlIHVuZGVybHlpbmcgbV9kYXRhIGlzIGpvaW50bHkKLSAgICAvLyBv
d25lZCBieSB0aGUgb3JpZ2luYWwgaW5zdGFuY2UgYW5kIGFsbCBjb3BpZXMuCi0gICAgdGVtcGxh
dGU8Y2xhc3MgVD4KLSAgICBjbGFzcyBDcm9zc1RocmVhZFJlZkNvdW50ZWQgewotICAgICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShDcm9zc1RocmVhZFJlZkNvdW50ZWQpOwotICAgIHB1YmxpYzoK
LSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q3Jvc3NUaHJlYWRSZWZDb3VudGVkPFQ+ID4gY3Jl
YXRlKFQqIGRhdGEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
Q3Jvc3NUaHJlYWRSZWZDb3VudGVkPFQ+KGRhdGEsIDApKTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIFVzZWQgdG8gbWFrZSBhbiBpbnN0YW5jZSB0aGF0IGNhbiBiZSB1c2VkIG9uIGFub3RoZXIg
dGhyZWFkLgotICAgICAgICBQYXNzUmVmUHRyPENyb3NzVGhyZWFkUmVmQ291bnRlZDxUPiA+IGNy
b3NzVGhyZWFkQ29weSgpOwotCi0gICAgICAgIHZvaWQgcmVmKCk7Ci0gICAgICAgIHZvaWQgZGVy
ZWYoKTsKLSAgICAgICAgVCogcmVsZWFzZSgpOwotCi0gICAgICAgIGJvb2wgaXNTaGFyZWQoKSBj
b25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gIW1fcmVmQ291bnRlci5oYXNPbmVS
ZWYoKSB8fCAobV90aHJlYWRTYWZlUmVmQ291bnRlciAmJiAhbV90aHJlYWRTYWZlUmVmQ291bnRl
ci0+aGFzT25lUmVmKCkpOwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBDcm9z
c1RocmVhZFJlZkNvdW50ZWQoVCogZGF0YSwgVGhyZWFkU2FmZVJlZkNvdW50ZWRCYXNlKiB0aHJl
YWRlZENvdW50ZXIpCi0gICAgICAgICAgICA6IG1fdGhyZWFkU2FmZVJlZkNvdW50ZXIodGhyZWFk
ZWRDb3VudGVyKQotICAgICAgICAgICAgLCBtX2RhdGEoZGF0YSkKLSNpZm5kZWYgTkRFQlVHCi0g
ICAgICAgICAgICAsIG1fdGhyZWFkSWQoMCkKLSNlbmRpZgotICAgICAgICB7Ci0gICAgICAgICAg
ICAvLyBXZSB1c2UgUmVmQ291bnRlZEJhc2UgaW4gYW4gdW51c3VhbCB3YXkgaGVyZSwgc28gZ2V0
IHJpZCBvZiB0aGUgcmVxdWlyZW1lbnQKLSAgICAgICAgICAgIC8vIHRoYXQgYWRvcHRSZWYgYmUg
Y2FsbGVkIG9uIGl0LgotICAgICAgICAgICAgbV9yZWZDb3VudGVyLnJlbGF4QWRvcHRpb25SZXF1
aXJlbWVudCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgfkNyb3NzVGhyZWFkUmVmQ291bnRlZCgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghbV90aHJlYWRTYWZlUmVmQ291bnRlcikKLSAg
ICAgICAgICAgICAgICBkZWxldGUgbV9kYXRhOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCB0
aHJlYWRTYWZlRGVyZWYoKTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgYm9vbCBpc093bmVk
QnlDdXJyZW50VGhyZWFkKCkgY29uc3QgeyByZXR1cm4gIW1fdGhyZWFkSWQgfHwgbV90aHJlYWRJ
ZCA9PSBjdXJyZW50VGhyZWFkKCk7IH0KLSNlbmRpZgotCi0gICAgICAgIFJlZkNvdW50ZWRCYXNl
IG1fcmVmQ291bnRlcjsKLSAgICAgICAgVGhyZWFkU2FmZVJlZkNvdW50ZWRCYXNlKiBtX3RocmVh
ZFNhZmVSZWZDb3VudGVyOwotICAgICAgICBUKiBtX2RhdGE7Ci0jaWZuZGVmIE5ERUJVRwotICAg
ICAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSWQ7Ci0jZW5kaWYKLSAgICB9OwotCi0gICAg
dGVtcGxhdGU8Y2xhc3MgVD4KLSAgICB2b2lkIENyb3NzVGhyZWFkUmVmQ291bnRlZDxUPjo6cmVm
KCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc093bmVkQnlDdXJyZW50VGhyZWFkKCkpOwotICAg
ICAgICBtX3JlZkNvdW50ZXIucmVmKCk7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICAvLyBTdG9y
ZSB0aGUgdGhyZWFkSWQgYXMgc29vbiBhcyB0aGUgcmVmIGNvdW50IGdldHMgdG8gMi4KLSAgICAg
ICAgLy8gVGhlIGNsYXNzIGdldHMgY3JlYXRlZCB3aXRoIGEgcmVmIGNvdW50IG9mIDEgYW5kIHRo
ZW4gcGFzc2VkCi0gICAgICAgIC8vIHRvIGFub3RoZXIgdGhyZWFkIHdoZXJlIHRvIHJlZiBjb3Vu
dCBnZXQgaW5jcmVhc2VkLiAgVGhpcwotICAgICAgICAvLyBpcyBhIGhldXJpc3RpYyBidXQgaXQg
c2VlbXMgdG8gYWx3YXlzIHdvcmsgYW5kIGhhcyBoZWxwZWQKLSAgICAgICAgLy8gZmluZCBzb21l
IGJ1Z3MuCi0gICAgICAgIGlmICghbV90aHJlYWRJZCAmJiBtX3JlZkNvdW50ZXIucmVmQ291bnQo
KSA9PSAyKQotICAgICAgICAgICAgbV90aHJlYWRJZCA9IGN1cnJlbnRUaHJlYWQoKTsKLSNlbmRp
ZgotICAgIH0KLQotICAgIHRlbXBsYXRlPGNsYXNzIFQ+Ci0gICAgdm9pZCBDcm9zc1RocmVhZFJl
ZkNvdW50ZWQ8VD46OmRlcmVmKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc093bmVkQnlDdXJy
ZW50VGhyZWFkKCkpOwotICAgICAgICBpZiAobV9yZWZDb3VudGVyLmRlcmVmQmFzZSgpKSB7Ci0g
ICAgICAgICAgICB0aHJlYWRTYWZlRGVyZWYoKTsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzOwot
ICAgICAgICB9IGVsc2UgewotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgICAgIC8vIENsZWFyIHRo
ZSB0aHJlYWRJZCB3aGVuIHRoZSByZWYgZ29lcyB0byAxIGJlY2F1c2UgaXQKLSAgICAgICAgICAg
IC8vIGlzIHNhZmUgdG8gYmUgcGFzc2VkIHRvIGFub3RoZXIgdGhyZWFkIGF0IHRoaXMgcG9pbnQu
Ci0gICAgICAgICAgICBpZiAobV90aHJlYWRJZCAmJiBtX3JlZkNvdW50ZXIucmVmQ291bnQoKSA9
PSAxKQotICAgICAgICAgICAgICAgIG1fdGhyZWFkSWQgPSAwOwotI2VuZGlmCi0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBUPgotICAgIFQqIENyb3NzVGhyZWFkUmVmQ291
bnRlZDxUPjo6cmVsZWFzZSgpCi0gICAgewotICAgICAgICBBU1NFUlQoIWlzU2hhcmVkKCkpOwot
Ci0gICAgICAgIFQqIGRhdGEgPSBtX2RhdGE7Ci0gICAgICAgIG1fZGF0YSA9IDA7Ci0gICAgICAg
IHJldHVybiBkYXRhOwotICAgIH0KLQotICAgIHRlbXBsYXRlPGNsYXNzIFQ+Ci0gICAgUGFzc1Jl
ZlB0cjxDcm9zc1RocmVhZFJlZkNvdW50ZWQ8VD4gPiBDcm9zc1RocmVhZFJlZkNvdW50ZWQ8VD46
OmNyb3NzVGhyZWFkQ29weSgpCi0gICAgewotICAgICAgICBBU1NFUlQoaXNPd25lZEJ5Q3VycmVu
dFRocmVhZCgpKTsKLSAgICAgICAgaWYgKG1fdGhyZWFkU2FmZVJlZkNvdW50ZXIpCi0gICAgICAg
ICAgICBtX3RocmVhZFNhZmVSZWZDb3VudGVyLT5yZWYoKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgbV90aHJlYWRTYWZlUmVmQ291bnRlciA9IG5ldyBUaHJlYWRTYWZlUmVmQ291bnRlZEJh
c2UoMik7Ci0KLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDcm9zc1RocmVhZFJlZkNvdW50
ZWQ8VD4obV9kYXRhLCBtX3RocmVhZFNhZmVSZWZDb3VudGVyKSk7Ci0gICAgfQotCi0KLSAgICB0
ZW1wbGF0ZTxjbGFzcyBUPgotICAgIHZvaWQgQ3Jvc3NUaHJlYWRSZWZDb3VudGVkPFQ+Ojp0aHJl
YWRTYWZlRGVyZWYoKQotICAgIHsKLSAgICAgICAgaWYgKG1fdGhyZWFkU2FmZVJlZkNvdW50ZXIg
JiYgbV90aHJlYWRTYWZlUmVmQ291bnRlci0+ZGVyZWZCYXNlKCkpIHsKLSAgICAgICAgICAgIGRl
bGV0ZSBtX3RocmVhZFNhZmVSZWZDb3VudGVyOwotICAgICAgICAgICAgbV90aHJlYWRTYWZlUmVm
Q291bnRlciA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci19IC8vIG5hbWVzcGFjZSBXVEYKLQotdXNp
bmcgV1RGOjpDcm9zc1RocmVhZFJlZkNvdW50ZWQ7Ci0KLSNlbmRpZiAvLyBDcm9zc1RocmVhZFJl
ZkNvdW50ZWRfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Pd25GYXN0TWFsbG9j
UHRyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Pd25GYXN0TWFs
bG9jUHRyLmgJKHJldmlzaW9uIDk4Mjg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9P
d25GYXN0TWFsbG9jUHRyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKICNkZWZp
bmUgT3duRmFzdE1hbGxvY1B0cl9oCiAKICNpbmNsdWRlICJGYXN0TWFsbG9jLmgiCisjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL1JlZkNvdW50ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL1JlZkNvdW50ZWQuaAkocmV2aXNpb24gOTgyODkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL1JlZkNvdW50ZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDcg
KzE0OSw2IEBAIHByb3RlY3RlZDoKICNlbmRpZgogCiBwcml2YXRlOgotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGZyaWVuZCBjbGFzcyBDcm9zc1RocmVhZFJlZkNvdW50ZWQ7CiAKICNpZm5kZWYg
TkRFQlVHCiAgICAgZnJpZW5kIHZvaWQgYWRvcHRlZChSZWZDb3VudGVkQmFzZSopOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9TaXplTGltaXRzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1NpemVMaW1pdHMuY3BwCShyZXZpc2lvbiA5ODI4OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvU2l6ZUxpbWl0cy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKIAogI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0Nyb3NzVGhyZWFkUmVmQ291bnRlZC5oPgog
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L1RocmVhZFNhZmVSZWZDb3VudGVkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oCShyZXZpc2lvbiA5ODI4OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaAkod29ya2luZyBjb3B5
KQpAQCAtMTIzLDkgKzEyMyw2IEBAIHByb3RlY3RlZDoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAg
dGVtcGxhdGU8Y2xhc3MgVD4KLSAgICBmcmllbmQgY2xhc3MgQ3Jvc3NUaHJlYWRSZWZDb3VudGVk
OwotCiAgICAgaW50IG1fcmVmQ291bnQ7CiAjaWYgIVVTRShMT0NLRlJFRV9USFJFQURTQUZFUkVG
Q09VTlRFRCkKICAgICBtdXRhYmxlIE11dGV4IG1fbXV0ZXg7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL3d0Zi5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi93dGYucHJpCShyZXZpc2lvbiA5ODI4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvd3RmLnByaQkod29ya2luZyBjb3B5KQpAQCAtMTQsNyArMTQsNiBAQCBIRUFERVJTICs9IFwK
ICAgICB3dGYvQnl0ZUFycmF5LmggXAogICAgIHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oIFwKICAg
ICB3dGYvQ29tcGlsZXIuaCBcCi0gICAgd3RmL0Nyb3NzVGhyZWFkUmVmQ291bnRlZC5oIFwKICAg
ICB3dGYvQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuaCBcCiAgICAgd3RmL0N1cnJlbnRU
aW1lLmggXAogICAgIHd0Zi9EYXRlTWF0aC5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAJKHJldmlzaW9uIDk4Mjg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NSwyMCArNTUsMTcgQEAgU3RyaW5nSW1wbDo6flN0cmluZ0ltcGwoKQogI2VuZGlmCiAKICAg
ICBCdWZmZXJPd25lcnNoaXAgb3duZXJzaGlwID0gYnVmZmVyT3duZXJzaGlwKCk7Ci0gICAgaWYg
KG93bmVyc2hpcCAhPSBCdWZmZXJJbnRlcm5hbCkgewotICAgICAgICBpZiAob3duZXJzaGlwID09
IEJ1ZmZlck93bmVkKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIW1fc2hhcmVkQnVmZmVyKTsKLSAg
ICAgICAgICAgIEFTU0VSVChtX2RhdGEpOwotICAgICAgICAgICAgZmFzdEZyZWUoY29uc3RfY2Fz
dDxVQ2hhcio+KG1fZGF0YSkpOwotICAgICAgICB9IGVsc2UgaWYgKG93bmVyc2hpcCA9PSBCdWZm
ZXJTdWJzdHJpbmcpIHsKLSAgICAgICAgICAgIEFTU0VSVChtX3N1YnN0cmluZ0J1ZmZlcik7Ci0g
ICAgICAgICAgICBtX3N1YnN0cmluZ0J1ZmZlci0+ZGVyZWYoKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIEFTU0VSVChvd25lcnNoaXAgPT0gQnVmZmVyU2hhcmVkKTsKLSAgICAgICAg
ICAgIEFTU0VSVChtX3NoYXJlZEJ1ZmZlcik7Ci0gICAgICAgICAgICBtX3NoYXJlZEJ1ZmZlci0+
ZGVyZWYoKTsKLSAgICAgICAgfQorICAgIGlmIChvd25lcnNoaXAgPT0gQnVmZmVySW50ZXJuYWwp
CisgICAgICAgIHJldHVybjsKKyAgICBpZiAob3duZXJzaGlwID09IEJ1ZmZlck93bmVkKSB7Cisg
ICAgICAgIEFTU0VSVChtX2RhdGEpOworICAgICAgICBmYXN0RnJlZShjb25zdF9jYXN0PFVDaGFy
Kj4obV9kYXRhKSk7CisgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBBU1NFUlQob3duZXJz
aGlwID09IEJ1ZmZlclN1YnN0cmluZyk7CisgICAgQVNTRVJUKG1fc3Vic3RyaW5nQnVmZmVyKTsK
KyAgICBtX3N1YnN0cmluZ0J1ZmZlci0+ZGVyZWYoKTsKIH0KIAogUGFzc1JlZlB0cjxTdHJpbmdJ
bXBsPiBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCwgVUNo
YXIqJiBkYXRhKQpAQCAtMTQ1LDM3ICsxNDIsNiBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0
cmluZ0ltcGw6OmNyZWF0CiAgICAgcmV0dXJuIGNyZWF0ZShzdHJpbmcsIGxlbmd0aCk7CiB9CiAK
LVBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlKGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFBhc3NSZWZQdHI8U2hhcmVkVUNoYXI+IHNoYXJl
ZEJ1ZmZlcikKLXsKLSAgICBBU1NFUlQoY2hhcmFjdGVycyk7Ci0gICAgQVNTRVJUKG1pbkxlbmd0
aFRvU2hhcmUgJiYgbGVuZ3RoID49IG1pbkxlbmd0aFRvU2hhcmUpOwotICAgIHJldHVybiBhZG9w
dFJlZihuZXcgU3RyaW5nSW1wbChjaGFyYWN0ZXJzLCBsZW5ndGgsIHNoYXJlZEJ1ZmZlcikpOwot
fQotCi1TaGFyZWRVQ2hhciogU3RyaW5nSW1wbDo6c2hhcmVkQnVmZmVyKCkKLXsKLSAgICBpZiAo
bV9sZW5ndGggPCBtaW5MZW5ndGhUb1NoYXJlKQotICAgICAgICByZXR1cm4gMDsKLSAgICAvLyBB
bGwgc3RhdGljIHN0cmluZ3MgYXJlIHNtYWxsZXIgdGhhdCB0aGUgbWluaW1pbSBsZW5ndGggdG8g
c2hhcmUuCi0gICAgQVNTRVJUKCFpc1N0YXRpYygpKTsKLQotICAgIEJ1ZmZlck93bmVyc2hpcCBv
d25lcnNoaXAgPSBidWZmZXJPd25lcnNoaXAoKTsKLQotICAgIGlmIChvd25lcnNoaXAgPT0gQnVm
ZmVySW50ZXJuYWwpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChvd25lcnNoaXAgPT0gQnVm
ZmVyU3Vic3RyaW5nKQotICAgICAgICByZXR1cm4gbV9zdWJzdHJpbmdCdWZmZXItPnNoYXJlZEJ1
ZmZlcigpOwotICAgIGlmIChvd25lcnNoaXAgPT0gQnVmZmVyT3duZWQpIHsKLSAgICAgICAgQVNT
RVJUKCFtX3NoYXJlZEJ1ZmZlcik7Ci0gICAgICAgIG1fc2hhcmVkQnVmZmVyID0gU2hhcmVkVUNo
YXI6OmNyZWF0ZShuZXcgU2hhcmFibGVVQ2hhcihtX2RhdGEpKS5sZWFrUmVmKCk7Ci0gICAgICAg
IG1faGFzaEFuZEZsYWdzID0gKG1faGFzaEFuZEZsYWdzICYgfnNfaGFzaE1hc2tCdWZmZXJPd25l
cnNoaXApIHwgQnVmZmVyU2hhcmVkOwotICAgIH0KLQotICAgIEFTU0VSVChidWZmZXJPd25lcnNo
aXAoKSA9PSBCdWZmZXJTaGFyZWQpOwotICAgIEFTU0VSVChtX3NoYXJlZEJ1ZmZlcik7Ci0gICAg
cmV0dXJuIG1fc2hhcmVkQnVmZmVyOwotfQotCiBib29sIFN0cmluZ0ltcGw6OmNvbnRhaW5zT25s
eVdoaXRlc3BhY2UoKQogewogICAgIC8vIEZJWE1FOiBUaGUgZGVmaW5pdGlvbiBvZiB3aGl0ZXNw
YWNlIGhlcmUgaW5jbHVkZXMgYSBudW1iZXIgb2YgY2hhcmFjdGVycwpAQCAtMTE0NiwxOCArMTEx
Miw0IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXQKICAgICByZXR1
cm4gdGVybWluYXRlZFN0cmluZy5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8U3RyaW5nSW1w
bD4gU3RyaW5nSW1wbDo6dGhyZWFkc2FmZUNvcHkoKSBjb25zdAotewotICAgIHJldHVybiBjcmVh
dGUobV9kYXRhLCBtX2xlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5n
SW1wbDo6Y3Jvc3NUaHJlYWRTdHJpbmcoKQotewotICAgIGlmIChTaGFyZWRVQ2hhciogc2hhcmVk
QnVmZmVyID0gdGhpcy0+c2hhcmVkQnVmZmVyKCkpCi0gICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgU3RyaW5nSW1wbChtX2RhdGEsIG1fbGVuZ3RoLCBzaGFyZWRCdWZmZXItPmNyb3NzVGhyZWFk
Q29weSgpKSk7Ci0KLSAgICAvLyBJZiBubyBzaGFyZWQgYnVmZmVyIGlzIGF2YWlsYWJsZSwgY3Jl
YXRlIGEgY29weS4KLSAgICByZXR1cm4gdGhyZWFkc2FmZUNvcHkoKTsKLX0KLQogfSAvLyBuYW1l
c3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nSW1w
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJ
bXBsLmgJKHJldmlzaW9uIDk4Mjg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0
L1N0cmluZ0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNiBAQAogCiAjaW5jbHVk
ZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KLSNpbmNsdWRlIDx3dGYv
Q3Jvc3NUaHJlYWRSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNs
dWRlIDx3dGYvT3duRmFzdE1hbGxvY1B0ci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KQEAgLTU3LDggKzU2LDYgQEAgc3RydWN0IFVDaGFyQnVmZmVyVHJhbnNsYXRvcjsKIAogZW51
bSBUZXh0Q2FzZVNlbnNpdGl2aXR5IHsgVGV4dENhc2VTZW5zaXRpdmUsIFRleHRDYXNlSW5zZW5z
aXRpdmUgfTsKIAotdHlwZWRlZiBPd25GYXN0TWFsbG9jUHRyPGNvbnN0IFVDaGFyPiBTaGFyYWJs
ZVVDaGFyOwotdHlwZWRlZiBDcm9zc1RocmVhZFJlZkNvdW50ZWQ8U2hhcmFibGVVQ2hhcj4gU2hh
cmVkVUNoYXI7CiB0eXBlZGVmIGJvb2wgKCpDaGFyYWN0ZXJNYXRjaEZ1bmN0aW9uUHRyKShVQ2hh
cik7CiB0eXBlZGVmIGJvb2wgKCpJc1doaXRlU3BhY2VGdW5jdGlvblB0cikoVUNoYXIpOwogCkBA
IC03Nyw3ICs3NCw2IEBAIHByaXZhdGU6CiAgICAgICAgIEJ1ZmZlckludGVybmFsLAogICAgICAg
ICBCdWZmZXJPd25lZCwKICAgICAgICAgQnVmZmVyU3Vic3RyaW5nLAotICAgICAgICBCdWZmZXJT
aGFyZWQsCiAgICAgfTsKIAogICAgIC8vIFVzZWQgdG8gY29uc3RydWN0IHN0YXRpYyBzdHJpbmdz
LCB3aGljaCBoYXZlIGFuIHNwZWNpYWwgcmVmQ291bnQgdGhhdCBjYW4gbmV2ZXIgaGl0IHplcm8u
CkBAIC0xMzQsMjUgKzEzMCwxMiBAQCBwcml2YXRlOgogICAgICAgICBBU1NFUlQobV9zdWJzdHJp
bmdCdWZmZXItPmJ1ZmZlck93bmVyc2hpcCgpICE9IEJ1ZmZlclN1YnN0cmluZyk7CiAgICAgfQog
Ci0gICAgLy8gVXNlZCB0byBjb25zdHJ1Y3QgbmV3IHN0cmluZ3Mgc2hhcmluZyBhbiBleGlzdGlu
ZyBTaGFyZWRVQ2hhciAoQnVmZmVyU2hhcmVkKQotICAgIFN0cmluZ0ltcGwoY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgUGFzc1JlZlB0cjxTaGFyZWRVQ2hhcj4gc2hh
cmVkQnVmZmVyKQotICAgICAgICA6IG1fcmVmQ291bnQoc19yZWZDb3VudEluY3JlbWVudCkKLSAg
ICAgICAgLCBtX2xlbmd0aChsZW5ndGgpCi0gICAgICAgICwgbV9kYXRhKGNoYXJhY3RlcnMpCi0g
ICAgICAgICwgbV9zaGFyZWRCdWZmZXIoc2hhcmVkQnVmZmVyLmxlYWtSZWYoKSkKLSAgICAgICAg
LCBtX2hhc2hBbmRGbGFncyhCdWZmZXJTaGFyZWQpCi0gICAgewotICAgICAgICBBU1NFUlQobV9k
YXRhKTsKLSAgICAgICAgQVNTRVJUKG1fbGVuZ3RoKTsKLSAgICB9Ci0KIHB1YmxpYzoKICAgICB+
U3RyaW5nSW1wbCgpOwogCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gY3JlYXRl
KGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxT
dHJpbmdJbXBsPiBjcmVhdGUoY29uc3QgY2hhciosIHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gY3JlYXRlKGNvbnN0IGNoYXIqKTsKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBjcmVhdGUoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBs
ZW5ndGgsIFBhc3NSZWZQdHI8U2hhcmVkVUNoYXI+IHNoYXJlZEJ1ZmZlcik7CiAgICAgc3RhdGlj
IEFMV0FZU19JTkxJTkUgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBjcmVhdGUoUGFzc1JlZlB0cjxT
dHJpbmdJbXBsPiByZXAsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKHJlcCk7CkBAIC0yMDgsNyArMTkxLDYgQEAgcHVibGljOgogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkb3B0KFN0cmluZ0J1ZmZlciYpOwogCiAgICAg
dW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KLSAgICBTaGFyZWRV
Q2hhciogc2hhcmVkQnVmZmVyKCk7CiAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMoKSBjb25z
dCB7IHJldHVybiBtX2RhdGE7IH0KIAogICAgIHNpemVfdCBjb3N0KCkKQEAgLTMxOCwxMiArMzAw
LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1lbWNweShkZXN0aW5hdGlvbiwgc291cmNlLCBu
dW1DaGFyYWN0ZXJzICogc2l6ZW9mKFVDaGFyKSk7CiAgICAgfQogCi0gICAgLy8gUmV0dXJucyBh
IFN0cmluZ0ltcGwgc3VpdGFibGUgZm9yIHVzZSBvbiBhbm90aGVyIHRocmVhZC4KLSAgICBQYXNz
UmVmUHRyPFN0cmluZ0ltcGw+IGNyb3NzVGhyZWFkU3RyaW5nKCk7Ci0gICAgLy8gTWFrZXMgYSBk
ZWVwIGNvcHkuIEhlbHBmdWwgb25seSBpZiB5b3UgbmVlZCB0byB1c2UgYSBTdHJpbmcgb24gYW5v
dGhlciB0aHJlYWQKLSAgICAvLyAodXNlIGNyb3NzVGhyZWFkU3RyaW5nIGlmIHRoZSBtZXRob2Qg
Y2FsbCBkb2Vzbid0IG5lZWQgdG8gYmUgdGhyZWFkc2FmZSkuCi0gICAgLy8gU2luY2UgU3RyaW5n
SW1wbCBvYmplY3RzIGFyZSBpbW11dGFibGUsIHRoZXJlJ3Mgbm8gb3RoZXIgcmVhc29uIHRvIG1h
a2UgYSBjb3B5LgotICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gdGhyZWFkc2FmZUNvcHkoKSBj
b25zdDsKKyAgICAvLyBTb21lIHN0cmluZyBmZWF0dXJlcywgbGlrZSByZWZjb3VudGluZyBhbmQg
dGhlIGF0b21pY2l0eSBmbGFnLCBhcmUgbm90CisgICAgLy8gdGhyZWFkLXNhZmUuIFdlIGFjaGll
dmUgdGhyZWFkIHNhZmV0eSBieSBpc29sYXRpb24sIGdpdmluZyBlYWNoIHRocmVhZAorICAgIC8v
IGl0cyBvd24gY29weSBvZiB0aGUgc3RyaW5nLgorICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4g
aXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiAKICAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHN1YnN0
cmluZyh1bnNpZ25lZCBwb3MsIHVuc2lnbmVkIGxlbiA9IFVJTlRfTUFYKTsKIApAQCAtNDE4LDcg
KzM5OCw2IEBAIHByaXZhdGU6CiAgICAgdW5pb24gewogICAgICAgICB2b2lkKiBtX2J1ZmZlcjsK
ICAgICAgICAgU3RyaW5nSW1wbCogbV9zdWJzdHJpbmdCdWZmZXI7Ci0gICAgICAgIFNoYXJlZFVD
aGFyKiBtX3NoYXJlZEJ1ZmZlcjsKICAgICB9OwogICAgIG11dGFibGUgdW5zaWduZWQgbV9oYXNo
QW5kRmxhZ3M7CiB9OwpAQCAtNDU1LDYgKzQzNCwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNT
cGFjZU9yTmV3bGluZShVQ2hhCiAgICAgcmV0dXJuIGMgPD0gMHg3RiA/IFdURjo6aXNBU0NJSVNw
YWNlKGMpIDogV1RGOjpVbmljb2RlOjpkaXJlY3Rpb24oYykgPT0gV1RGOjpVbmljb2RlOjpXaGl0
ZVNwYWNlTmV1dHJhbDsKIH0KIAoraW5saW5lIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5n
SW1wbDo6aXNvbGF0ZWRDb3B5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY3JlYXRlKG1fZGF0YSwg
bV9sZW5ndGgpOworfQorCiBzdHJ1Y3QgU3RyaW5nSGFzaDsKIAogLy8gU3RyaW5nSGFzaCBpcyB0
aGUgZGVmYXVsdCBoYXNoIGZvciBTdHJpbmdJbXBsKiBhbmQgUmVmUHRyPFN0cmluZ0ltcGw+Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAkocmV2
aXNpb24gOTgyODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvV1RGU3RyaW5n
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTc4LDE4ICs1NzgsMTEgQEAgZmxvYXQgU3RyaW5nOjp0
b0Zsb2F0KGJvb2wqIG9rLCBib29sKiBkaQogICAgIHJldHVybiBtX2ltcGwtPnRvRmxvYXQob2ss
IGRpZFJlYWROdW1iZXIpOwogfQogCi1TdHJpbmcgU3RyaW5nOjp0aHJlYWRzYWZlQ29weSgpIGNv
bnN0CitTdHJpbmcgU3RyaW5nOjppc29sYXRlZENvcHkoKSBjb25zdAogewogICAgIGlmICghbV9p
bXBsKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIG1faW1wbC0+dGhyZWFk
c2FmZUNvcHkoKTsKLX0KLQotU3RyaW5nIFN0cmluZzo6Y3Jvc3NUaHJlYWRTdHJpbmcoKSBjb25z
dAotewotICAgIGlmICghbV9pbXBsKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0
dXJuIG1faW1wbC0+Y3Jvc3NUaHJlYWRTdHJpbmcoKTsKKyAgICByZXR1cm4gbV9pbXBsLT5pc29s
YXRlZENvcHkoKTsKIH0KIAogdm9pZCBTdHJpbmc6OnNwbGl0KGNvbnN0IFN0cmluZyYgc2VwYXJh
dG9yLCBib29sIGFsbG93RW1wdHlFbnRyaWVzLCBWZWN0b3I8U3RyaW5nPiYgcmVzdWx0KSBjb25z
dApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1dURlN0cmluZy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9XVEZTdHJpbmcuaAkocmV2
aXNpb24gOTgyODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvV1RGU3RyaW5n
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2NCwxMyArMjY0LDcgQEAgcHVibGljOgogCiAgICAgYm9v
bCBwZXJjZW50YWdlKGludCYgcGVyY2VudGFnZSkgY29uc3Q7CiAKLSAgICAvLyBSZXR1cm5zIGEg
U3RyaW5nSW1wbCBzdWl0YWJsZSBmb3IgdXNlIG9uIGFub3RoZXIgdGhyZWFkLgotICAgIFdURl9F
WFBPUlRfUFJJVkFURSBTdHJpbmcgY3Jvc3NUaHJlYWRTdHJpbmcoKSBjb25zdDsKLSAgICAvLyBN
YWtlcyBhIGRlZXAgY29weS4gSGVscGZ1bCBvbmx5IGlmIHlvdSBuZWVkIHRvIHVzZSBhIFN0cmlu
ZyBvbiBhbm90aGVyIHRocmVhZAotICAgIC8vICh1c2UgY3Jvc3NUaHJlYWRTdHJpbmcgaWYgdGhl
IG1ldGhvZCBjYWxsIGRvZXNuJ3QgbmVlZCB0byBiZSB0aHJlYWRzYWZlKS4KLSAgICAvLyBTaW5j
ZSB0aGUgdW5kZXJseWluZyBTdHJpbmdJbXBsIG9iamVjdHMgYXJlIGltbXV0YWJsZSwgdGhlcmUn
cyBubyBvdGhlciByZWFzb24KLSAgICAvLyB0byBldmVyIHByZWZlciBjb3B5KCkgb3ZlciBwbGFp
biBvbGQgYXNzaWdubWVudC4KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIHRocmVhZHNh
ZmVDb3B5KCkgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyBpc29sYXRlZENv
cHkoKSBjb25zdDsKIAogICAgIC8vIFByZXZlbnQgU3RyaW5ncyBmcm9tIGJlaW5nIGltcGxpY2l0
bHkgY29udmVydGFibGUgdG8gYm9vbCBhcyBpdCB3aWxsIGJlIGFtYmlndW91cyBvbiBhbnkgcGxh
dGZvcm0gdGhhdAogICAgIC8vIGFsbG93cyBpbXBsaWNpdCBjb252ZXJzaW9uIHRvIGFub3RoZXIg
cG9pbnRlciB0eXBlIChlLmcuLCBNYWMgYWxsb3dzIGltcGxpY2l0IGNvbnZlcnNpb24gdG8gTlNT
dHJpbmcqKS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJQYXR0ZXJuLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyclBhdHRlcm4uaAko
cmV2aXNpb24gOTgyODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyUGF0dGVy
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlIDxydW50aW1l
L1VTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3
dGYvdW5pY29kZS9Vbmljb2RlLmg+CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9Gb3J3
YXJkaW5nSGVhZGVycy93dGYvQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9Dcm9zc1RocmVhZFJl
ZkNvdW50ZWQuaAkocmV2aXNpb24gOTgyODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvRm9y
d2FyZGluZ0hlYWRlcnMvd3RmL0Nyb3NzVGhyZWFkUmVmQ291bnRlZC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xICswLDAgQEAKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Dcm9zc1RocmVhZFJlZkNv
dW50ZWQuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk4Mjg5KQorKysgU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTU2IEBACisyMDExLTEwLTI0
ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlZCBT
aGFyZWRVQ2hhciBhbmQgdGlnaHRlbmVkIGxhbmd1YWdlIGFyb3VuZCBpdHMgcHJldmlvdXMgdXNl
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA2OTgK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIFJlbmFt
ZWQgInRocmVhZFNhZmVDb3B5IiBhbmQgImNyb3NzVGhyZWFkQ29weSIgdG8gImlzb2xhdGVkQ29w
eSIgYmVjYXVzZQorICAgICAgICB0aGUgZm9ybWVyIG5hbWVzIGdhdmUgdGhlIGRhbmdlcm91cyBt
aXNpbXByZXNzaW9uIHRoYXQgdGhlIHJlc3VsdGluZyBvYmplY3QKKyAgICAgICAgd2FzIHRocmVh
ZC1zYWZlLCB3aGljaCBpcyBub3QgdHJ1ZS4KKyAgICAgICAgCisgICAgICAgIC0gVXBkYXRlZCBh
IGJ1bmNoIG9mIGZpbGVzIGZvciBoZWFkZXIgZGVwZW5kZW5jeSBjaGFuZ2VzLCBub3cgdGhhdAor
ICAgICAgICBDcm9zc1RocmVhZFJlZkNvdW50ZWQgaXMgZ29uZS4KKworICAgICAgICAqIEZvcndh
cmRpbmdIZWFkZXJzL3d0Zi9Dcm9zc1RocmVhZFJlZkNvdW50ZWQuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRIZWFwU25h
cHNob3QuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpyZWxlYXNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFZh
bHVlKToKKyAgICAgICAgKiBjc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmg6CisgICAgICAgICog
Y3NzL0NTU1ZhbHVlLmg6CisgICAgICAgICogY3NzL1N0eWxlTWVkaWEuaDoKKyAgICAgICAgKiBj
c3MvV2ViS2l0Q1NTTWF0cml4Lmg6CisgICAgICAgICogZG9tL1F1YWxpZmllZE5hbWUuaDoKKyAg
ICAgICAgKiBmaWxlYXBpL0xvY2FsRmlsZVN5c3RlbS5oOgorICAgICAgICAoV2ViQ29yZTo6TG9j
YWxGaWxlU3lzdGVtOjpTeXN0ZW1CYXNlUGF0aDo6b3BlcmF0b3IgU3RyaW5nKToKKyAgICAgICAg
KiBoaXN0b3J5L0NhY2hlZEZyYW1lLmg6CisgICAgICAgICogaGlzdG9yeS9DYWNoZWRQYWdlLmg6
CisgICAgICAgICogaGlzdG9yeS9IaXN0b3J5SXRlbS5oOgorICAgICAgICAqIGh0bWwvY2FudmFz
L0NhbnZhc1N0eWxlLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdl
bnQuaDoKKyAgICAgICAgKiBsb2FkZXIvRm9ybVN0YXRlLmg6CisgICAgICAgICogbG9hZGVyL1Rl
eHRSZXNvdXJjZURlY29kZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxv
YWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWlu
VGhyZWFkQnJpZGdlOjpNYWluVGhyZWFkQnJpZGdlKToKKyAgICAgICAgKiBsb2FkZXIvaWNvbi9J
Y29uRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SWNvbkRhdGFiYXNlOjpvcGVuKToK
KyAgICAgICAgKFdlYkNvcmU6Okljb25EYXRhYmFzZTo6c3luY2hyb25vdXNJY29uRm9yUGFnZVVS
TCk6CisgICAgICAgIChXZWJDb3JlOjpJY29uRGF0YWJhc2U6OnN5bmNocm9ub3VzSWNvblVSTEZv
clBhZ2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6SWNvbkRhdGFiYXNlOjpyZXRhaW5JY29uRm9y
UGFnZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpJY29uRGF0YWJhc2U6OnJlbGVhc2VJY29uRm9y
UGFnZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpJY29uRGF0YWJhc2U6OnNldEljb25EYXRhRm9y
SWNvblVSTCk6CisgICAgICAgIChXZWJDb3JlOjpJY29uRGF0YWJhc2U6OnNldEljb25VUkxGb3JQ
YWdlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6Okljb25EYXRhYmFzZTo6ZGF0YWJhc2VQYXRoKToK
KyAgICAgICAgKFdlYkNvcmU6Okljb25EYXRhYmFzZTo6ZGVmYXVsdERhdGFiYXNlRmlsZW5hbWUp
OgorICAgICAgICAoV2ViQ29yZTo6SW1wb3J0ZWRJY29uVVJMRm9yUGFnZVVSTFdvcmtJdGVtOjpJ
bXBvcnRlZEljb25VUkxGb3JQYWdlVVJMV29ya0l0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SW1w
b3J0ZWRJY29uRGF0YUZvclBhZ2VVUkxXb3JrSXRlbTo6SW1wb3J0ZWRJY29uRGF0YUZvclBhZ2VV
UkxXb3JrSXRlbSk6CisgICAgICAgICogcGFnZS9Db250ZW50U2VjdXJpdHlQb2xpY3kuaDoKKyAg
ICAgICAgKiBwYWdlL0Nvb3JkaW5hdGVzLmg6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
czo6aXNvbGF0ZWRDb3B5KToKKyAgICAgICAgKiBwYWdlL0dlb3Bvc2l0aW9uLmg6CisgICAgICAg
IChXZWJDb3JlOjpHZW9wb3NpdGlvbjo6aXNvbGF0ZWRDb3B5KToKKyAgICAgICAgKiBwYWdlL1Nl
Y3VyaXR5T3JpZ2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpTZWN1
cml0eU9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpTZWN1cml0eU9yaWdpbjo6aXNvbGF0ZWRD
b3B5KToKKyAgICAgICAgKiBwYWdlL1NlY3VyaXR5T3JpZ2luLmg6CisgICAgICAgICogcGFnZS9h
bmltYXRpb24vQW5pbWF0aW9uQmFzZS5oOgorICAgICAgICAqIHBsYXRmb3JtL0Nyb3NzVGhyZWFk
Q29waWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ojo6Y29weSk6CisgICAgICAgICogcGxhdGZv
cm0vRmlsZUNob29zZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9LVVJMLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OktVUkw6OmNvcHkpOgorICAgICAgICAqIHBsYXRmb3JtL2NmL1NjaGVkdWxlUGFp
ci5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGEuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QmxvYkRhdGFJdGVtOjpkZXRhY2hGcm9tQ3VycmVudFRocmVhZCk6CisgICAgICAg
IChXZWJDb3JlOjpCbG9iRGF0YTo6ZGV0YWNoRnJvbUN1cnJlbnRUaHJlYWQpOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvSFRUUEhlYWRlck1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VFRQSGVhZGVyTWFwOjpjb3B5RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9NSU1F
SGVhZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUVycm9yQmFzZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUVycm9yQmFzZTo6Y29weSk6CisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUxvYWRJbmZvLmg6CisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdEJhc2U6OmNvcHlEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlUmVzcG9uc2VCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2VCYXNlOjpjb3B5RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTFZhbHVlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFZhbHVlOjpTUUxWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTUUxWYWx1ZTo6c3RyaW5nKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUXVvdGVz
RGF0YS5oOgorICAgICAgICAqIHN0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjp1cGRhdGVHdWlkVmVyc2lvbk1hcCk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0
cmFjdERhdGFiYXNlOjpBYnN0cmFjdERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3Ry
YWN0RGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KToKKyAgICAgICAgKFdlYkNvcmU6OkFi
c3RyYWN0RGF0YWJhc2U6OnN0cmluZ0lkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6QWJz
dHJhY3REYXRhYmFzZTo6ZGlzcGxheU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3RE
YXRhYmFzZTo6ZmlsZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6
c2V0RXhwZWN0ZWRWZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6
OmdldENhY2hlZFZlcnNpb24pOgorICAgICAgICAqIHN0b3JhZ2UvQ2hhbmdlVmVyc2lvbldyYXBw
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hhbmdlVmVyc2lvbldyYXBwZXI6OkNoYW5nZVZl
cnNpb25XcmFwcGVyKToKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlOjpEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZTo6dGFibGVOYW1lcyk6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZURldGFpbHMuaDoKKyAg
ICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZVRyYWNrZXI6OnNldERhdGFiYXNlRGlyZWN0b3J5UGF0aCk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRhdGFiYXNlRGlyZWN0b3J5UGF0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXJEYXRhYmFzZVBhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpjYW5Fc3RhYmxpc2hEYXRhYmFzZSk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6Om9yaWdpblBhdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YWJhc2VUcmFja2VyOjpmdWxsUGF0aEZvckRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlVHJhY2tlcjo6cG9wdWxhdGVPcmlnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFiYXNlVHJhY2tlcjo6ZGF0YWJhc2VOYW1lc0Zvck9yaWdpbik6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZVRyYWNrZXI6OmFkZE9wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhYmFzZVRyYWNrZXI6OnNldFF1b3RhKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
VHJhY2tlcjo6cmVjb3JkQ3JlYXRpbmdEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZVRyYWNrZXI6OnJlY29yZERlbGV0aW5nRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0YWJhc2VUcmFja2VyOjpyZWNvcmREZWxldGluZ09yaWdpbik6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhYmFzZVRyYWNrZXI6OnNjaGVkdWxlTm90aWZ5RGF0YWJhc2VDaGFuZ2VkKToKKyAgICAg
ICAgKiBzdG9yYWdlL09yaWdpblF1b3RhTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpP
cmlnaW5RdW90YU1hbmFnZXI6OnRyYWNrT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6Ok9yaWdp
blF1b3RhTWFuYWdlcjo6YWRkRGF0YWJhc2UpOgorICAgICAgICAqIHN0b3JhZ2UvU1FMRXJyb3Iu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTEVycm9yOjptZXNzYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNRTEVycm9yOjpTUUxFcnJvcik6CisgICAgICAgICogc3RvcmFnZS9TUUxSZXN1bHRTZXRS
b3dMaXN0Lmg6CisgICAgICAgICogc3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1FMU3RhdGVtZW50OjpTUUxTdGF0ZW1lbnQpOgorICAgICAgICAqIHN0b3JhZ2Uv
U3RvcmFnZUFyZWFTeW5jLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhU3luYzo6
U3RvcmFnZUFyZWFTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhU3luYzo6c3lu
Y1RpbWVyRmlyZWQpOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmg6CisgICAg
ICAgICogc3RvcmFnZS9TdG9yYWdlTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VN
YXA6OmltcG9ydEl0ZW0pOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OlN0b3JhZ2VOYW1l
c3BhY2VJbXBsKToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlU3luY01hbmFnZXI6OlN0b3JhZ2VTeW5jTWFuYWdlcik6
CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTdG9yYWdlVHJhY2tlcjo6U3RvcmFnZVRyYWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3Rv
cmFnZVRyYWNrZXI6OnN5bmNJbXBvcnRPcmlnaW5JZGVudGlmaWVycyk6CisgICAgICAgIChXZWJD
b3JlOjpTdG9yYWdlVHJhY2tlcjo6c3luY0ZpbGVTeXN0ZW1BbmRUcmFja2VyRGF0YWJhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OnNldE9yaWdpbkRldGFpbHMpOgorICAg
ICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OndpbGxEZWxldGVBbGxPcmlnaW5zKToKKyAg
ICAgICAgKiBzdmcvU1ZHUGF0aFNlZy5oOgorICAgICAgICAqIHdvcmtlcnMvRGVmYXVsdFNoYXJl
ZFdvcmtlclJlcG9zaXRvcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkV29ya2VyUHJv
eHk6OnVybCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRXb3JrZXJQcm94eTo6bmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRXb3JrZXJQcm94eTo6U2hhcmVkV29ya2VyUHJveHkpOgor
ICAgICAgICAoV2ViQ29yZTo6RGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6OmdldFByb3h5
KToKKyAgICAgICAgKiB3b3JrZXJzL1NoYXJlZFdvcmtlclRocmVhZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTaGFyZWRXb3JrZXJUaHJlYWQ6OlNoYXJlZFdvcmtlclRocmVhZCk6CisgICAgICAg
ICogd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
b3JrZXJFeGNlcHRpb25UYXNrOjpXb3JrZXJFeGNlcHRpb25UYXNrKToKKyAgICAgICAgKFdlYkNv
cmU6OlBvc3RNZXNzYWdlVG9QYWdlSW5zcGVjdG9yVGFzazo6UG9zdE1lc3NhZ2VUb1BhZ2VJbnNw
ZWN0b3JUYXNrKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlclJ1bkxvb3AuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2VyUnVuTG9vcDo6cG9zdFRhc2tGb3JNb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OldvcmtlclJ1bkxvb3A6OlRhc2s6OlRhc2spOgorICAgICAgICAqIHdvcmtlcnMvV29y
a2VyVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZFN0YXJ0dXBEYXRh
OjpXb3JrZXJUaHJlYWRTdGFydHVwRGF0YSk6CisKIDIwMTEtMTAtMjQgIEpvc2h1YSBCZWxsICA8
anNiZWxsQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbmJyZWFrIGJpbmRpbmcgZ2VuZXJhdGlv
biB0ZXN0cwpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDk4Mjg5KQorKysgU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTM4MCw3ICszODAs
NyBAQCBfX1pON1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhNnNjcm9sbEVOU18xCiBfX1pON1dlYkNv
cmUxNFNjcm9sbGFibGVBcmVhQzJFdgogX19aTjdXZWJDb3JlMTRTY3JvbGxhYmxlQXJlYUQyRXYK
IF9fWk43V2ViQ29yZTE0U2Nyb2xsYmFyVGhlbWU1dGhlbWVFdgotX19aTjdXZWJDb3JlMTRTZWN1
cml0eU9yaWdpbjE0dGhyZWFkc2FmZUNvcHlFdgorX19aTjdXZWJDb3JlMTRTZWN1cml0eU9yaWdp
bjEyaXNvbGF0ZWRDb3B5RXYKIF9fWk43V2ViQ29yZTE0U2VjdXJpdHlPcmlnaW4xNmNyZWF0ZUZy
b21TdHJpbmdFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUxNFNlY3VyaXR5T3JpZ2luMThz
ZXRMb2NhbExvYWRQb2xpY3lFTlMwXzE1TG9jYWxMb2FkUG9saWN5RQogX19aTjdXZWJDb3JlMTRT
ZWN1cml0eU9yaWdpbjE4c2hvdWxkSGlkZVJlZmVycmVyRVJLTlNfNEtVUkxFUktOM1dURjZTdHJp
bmdFCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvQ3Jvc3NUaHJl
YWRSZWZDb3VudGVkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hl
YWRlcnMvd3RmL0Nyb3NzVGhyZWFkUmVmQ291bnRlZC5oCShyZXZpc2lvbiA5ODI4OSkKKysrIFNv
dXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9Dcm9zc1RocmVhZFJlZkNvdW50ZWQu
aAkod29ya2luZyBjb3B5KQpAQCAtMSArMCwwIEBACi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
Q3Jvc3NUaHJlYWRSZWZDb3VudGVkLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRIZWFwU25hcHNob3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRIZWFwU25hcHNob3QuaAkocmV2aXNpb24gOTgyODkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRIZWFwU25hcHNob3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNiArMzIsNyBAQAogI2RlZmluZSBTY3JpcHRIZWFwU25hcHNob3RfaAogCiAjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gOTgyODkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTU2LDcgKzE5NTYsNyBAQCBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIFNlcmlh
bGl6ZWRTY3JpcHRWCiBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpyZWxlYXNlKCkKIHsKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiByZXN1bHQgPSBhZG9wdFJlZihuZXcgU2VyaWFsaXplZFNjcmlwdFZhbHVlKG1fZGF0YSkp
OwotICAgIG1fZGF0YSA9IFN0cmluZygpLmNyb3NzVGhyZWFkU3RyaW5nKCk7CisgICAgbV9kYXRh
ID0gU3RyaW5nKCk7CiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKQEAgLTE5OTUs
NyArMTk5NSw3IEBAIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFYKICAg
ICAgICAgZGlkVGhyb3cgPSB0cnVlOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBTZXJpYWxp
emVyOjpTdWNjZXNzOgotICAgICAgICBtX2RhdGEgPSBTdHJpbmcoU3RyaW5nSW1wbDo6YWRvcHQo
d3JpdGVyLmRhdGEoKSkpLmNyb3NzVGhyZWFkU3RyaW5nKCk7CisgICAgICAgIG1fZGF0YSA9IFN0
cmluZyhTdHJpbmdJbXBsOjphZG9wdCh3cml0ZXIuZGF0YSgpKSkuaXNvbGF0ZWRDb3B5KCk7CiAg
ICAgICAgIHJldHVybjsKICAgICBjYXNlIFNlcmlhbGl6ZXI6OkpTRXhjZXB0aW9uOgogICAgICAg
ICAvLyBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgYmVjYXVzZSB0aGlzIGNhc2Ugd2FzIGhhbmRs
ZWQgYWJvdmUuCkBAIC0yMDA2LDcgKzIwMDYsNyBAQCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OlNl
cmlhbGl6ZWRTY3JpcHRWCiAKIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlw
dFZhbHVlKGNvbnN0IFN0cmluZyYgd2lyZURhdGEpCiB7Ci0gICAgbV9kYXRhID0gd2lyZURhdGEu
Y3Jvc3NUaHJlYWRTdHJpbmcoKTsKKyAgICBtX2RhdGEgPSB3aXJlRGF0YS5pc29sYXRlZENvcHko
KTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVz
ZXJpYWxpemUoTWVzc2FnZVBvcnRBcnJheSogbWVzc2FnZVBvcnRzKQpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL0NTU1Byb3BlcnR5U291cmNlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuaAkocmV2aXNpb24gOTgyODkpCisrKyBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0NTU1ZhbHVlLmgJKHJldmlzaW9uIDk4Mjg5KQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1
ZGUgIktVUkxIYXNoLmgiCiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZU1lZGlhLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlTWVkaWEuaAkocmV2aXNpb24gOTgyODkpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVNZWRpYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2
ICsyOCw3IEBACiAjZGVmaW5lIFN0eWxlTWVkaWFfaAogCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NNYXRyaXguaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTTWF0cml4LmgJKHJldmlzaW9uIDk4Mjg5
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU01hdHJpeC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1F1YWxpZmllZE5hbWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUXVhbGlmaWVkTmFtZS5oCShyZXZp
c2lvbiA5ODI4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9RdWFsaWZpZWROYW1lLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNkZWZpbmUgUXVhbGlmaWVkTmFtZV9oCiAKICNp
bmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTG9jYWxGaWxlU3lzdGVtLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Mb2NhbEZpbGVTeXN0ZW0uaAkocmV2aXNpb24g
OTgyODkpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0xvY2FsRmlsZVN5c3RlbS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGV4cGxpY2l0IFN5
c3RlbUJhc2VQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkgOiBtX3ZhbHVlKHBhdGgpIHsgfQogICAg
ICAgICBvcGVyYXRvciBTdHJpbmcoKSBjb25zdAogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gbV92YWx1ZS50aHJlYWRzYWZlQ29weSgpOworICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUu
aXNvbGF0ZWRDb3B5KCk7CiAgICAgICAgIH0KICAgICBwcml2YXRlOgogICAgICAgICBTdHJpbmcg
bV92YWx1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZEZyYW1lLmgJKHJldmlzaW9u
IDk4Mjg5KQorKysgU291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRGcmFtZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlNj
cmlwdENhY2hlZEZyYW1lRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkUGFnZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkUGFnZS5oCShyZXZp
c2lvbiA5ODI4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkUGFnZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIENhY2hlZFBhZ2VfaAogCiAjaW5j
bHVkZSAiQ2FjaGVkRnJhbWUuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0hpc3Rv
cnlJdGVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRl
bS5oCShyZXZpc2lvbiA5ODI4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2hpc3RvcnkvSGlzdG9yeUl0
ZW0uaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogI2lmIFBMQVRGT1JNKE1BQykKICNp
bXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1N0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzU3R5bGUuaAkocmV2aXNpb24gOTgyODkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5j
bHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVz
b3VyY2VBZ2VudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JSZXNvdXJjZUFnZW50LmgJKHJldmlzaW9uIDk4Mjg5KQorKysgU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzUs
NiArMzUsNyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAKICNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Gb3JtU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Rm9ybVN0YXRlLmgJKHJldmlzaW9uIDk4Mjg5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zv
cm1TdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjZGVmaW5lIEZvcm1T
dGF0ZV9oCiAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
bG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5oCShyZXZpc2lvbiA5ODI4OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI0LDYgKzI0LDcgQEAKICNkZWZpbmUgVGV4dFJlc291cmNlRGVjb2Rlcl9oCiAKICNpbmNsdWRl
ICJUZXh0RW5jb2RpbmcuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Xb3JrZXJUaHJlYWRh
YmxlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvV29ya2Vy
VGhyZWFkYWJsZUxvYWRlci5jcHAJKHJldmlzaW9uIDk4Mjg5KQorKysgU291cmNlL1dlYkNvcmUv
bG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miw3
ICs5Miw3IEBAIFdvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2UKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9u
cyYgb3B0aW9ucywgY29uc3QgU3RyaW5nJiBvdXRnb2luZ1JlZmVycmVyKQogICAgIDogbV93b3Jr
ZXJDbGllbnRXcmFwcGVyKHdvcmtlckNsaWVudFdyYXBwZXIpCiAgICAgLCBtX2xvYWRlclByb3h5
KGxvYWRlclByb3h5KQotICAgICwgbV90YXNrTW9kZSh0YXNrTW9kZS5jcm9zc1RocmVhZFN0cmlu
ZygpKQorICAgICwgbV90YXNrTW9kZSh0YXNrTW9kZS5pc29sYXRlZENvcHkoKSkKIHsKICAgICBB
U1NFUlQobV93b3JrZXJDbGllbnRXcmFwcGVyLmdldCgpKTsKICAgICBtX2xvYWRlclByb3h5LnBv
c3RUYXNrVG9Mb2FkZXIoCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0
YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25E
YXRhYmFzZS5jcHAJKHJldmlzaW9uIDk4Mjg5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2lj
b24vSWNvbkRhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw3IEBAIGJv
b2wgSWNvbkRhdGFiYXNlOjpvcGVuKGNvbnN0IFN0cmluZyYgZGkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAotICAgIG1fZGF0YWJhc2VEaXJlY3RvcnkgPSBkaXJlY3RvcnkuY3Jvc3NU
aHJlYWRTdHJpbmcoKTsKKyAgICBtX2RhdGFiYXNlRGlyZWN0b3J5ID0gZGlyZWN0b3J5Lmlzb2xh
dGVkQ29weSgpOwogCiAgICAgLy8gRm9ybXVsYXRlIHRoZSBmdWxsIHBhdGggZm9yIHRoZSBkYXRh
YmFzZSBmaWxlCiAgICAgbV9jb21wbGV0ZURhdGFiYXNlUGF0aCA9IHBhdGhCeUFwcGVuZGluZ0Nv
bXBvbmVudChtX2RhdGFiYXNlRGlyZWN0b3J5LCBmaWxlbmFtZSk7CkBAIC0yMjcsNyArMjI3LDcg
QEAgSW1hZ2UqIEljb25EYXRhYmFzZTo6c3luY2hyb25vdXNJY29uRm9yUAogICAgIAogICAgIFBh
Z2VVUkxSZWNvcmQqIHBhZ2VSZWNvcmQgPSBtX3BhZ2VVUkxUb1JlY29yZE1hcC5nZXQocGFnZVVS
TE9yaWdpbmFsKTsKICAgICBpZiAoIXBhZ2VSZWNvcmQpIHsKLSAgICAgICAgcGFnZVVSTENvcHkg
PSBwYWdlVVJMT3JpZ2luYWwuY3Jvc3NUaHJlYWRTdHJpbmcoKTsKKyAgICAgICAgcGFnZVVSTENv
cHkgPSBwYWdlVVJMT3JpZ2luYWwuaXNvbGF0ZWRDb3B5KCk7CiAgICAgICAgIHBhZ2VSZWNvcmQg
PSBnZXRPckNyZWF0ZVBhZ2VVUkxSZWNvcmQocGFnZVVSTENvcHkpOwogICAgIH0KICAgICAKQEAg
LTI2Myw3ICsyNjMsNyBAQCBJbWFnZSogSWNvbkRhdGFiYXNlOjpzeW5jaHJvbm91c0ljb25Gb3JQ
CiAgICAgLy8gbWFyayBpdCB0byBiZSByZWFkIGJ5IHRoZSBiYWNrZ3JvdW5kIHRocmVhZAogICAg
IGlmIChpY29uUmVjb3JkLT5pbWFnZURhdGFTdGF0dXMoKSA9PSBJbWFnZURhdGFTdGF0dXNVbmtu
b3duKSB7CiAgICAgICAgIGlmIChwYWdlVVJMQ29weS5pc051bGwoKSkKLSAgICAgICAgICAgIHBh
Z2VVUkxDb3B5ID0gcGFnZVVSTE9yaWdpbmFsLmNyb3NzVGhyZWFkU3RyaW5nKCk7CisgICAgICAg
ICAgICBwYWdlVVJMQ29weSA9IHBhZ2VVUkxPcmlnaW5hbC5pc29sYXRlZENvcHkoKTsKICAgICAK
ICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fcGVuZGluZ1JlYWRpbmdMb2NrKTsKICAgICAg
ICAgbV9wYWdlVVJMc0ludGVyZXN0ZWRJbkljb25zLmFkZChwYWdlVVJMQ29weSk7CkBAIC0zMTIs
NyArMzEyLDcgQEAgU3RyaW5nIEljb25EYXRhYmFzZTo6c3luY2hyb25vdXNJY29uVVJMRgogICAg
IAogICAgIFBhZ2VVUkxSZWNvcmQqIHBhZ2VSZWNvcmQgPSBtX3BhZ2VVUkxUb1JlY29yZE1hcC5n
ZXQocGFnZVVSTE9yaWdpbmFsKTsKICAgICBpZiAoIXBhZ2VSZWNvcmQpCi0gICAgICAgIHBhZ2VS
ZWNvcmQgPSBnZXRPckNyZWF0ZVBhZ2VVUkxSZWNvcmQocGFnZVVSTE9yaWdpbmFsLmNyb3NzVGhy
ZWFkU3RyaW5nKCkpOworICAgICAgICBwYWdlUmVjb3JkID0gZ2V0T3JDcmVhdGVQYWdlVVJMUmVj
b3JkKHBhZ2VVUkxPcmlnaW5hbC5pc29sYXRlZENvcHkoKSk7CiAgICAgCiAgICAgLy8gSWYgcGFn
ZVJlY29yZCBpcyBOVUxMLCBvbmUgb2YgdHdvIHRoaW5ncyBpcyB0cnVlIC0KICAgICAvLyAxIC0g
VGhlIGluaXRpYWwgdXJsIGltcG9ydCBpcyBpbmNvbXBsZXRlIGFuZCB0aGlzIHBhZ2VVUkwgaGFz
IGFscmVhZHkgYmVlbiBtYXJrZWQgdG8gYmUgbm90aWZpZWQgb25jZSBpdCBpcyBjb21wbGV0ZSBp
ZiBhbiBpY29uVVJMIGV4aXN0cwpAQCAtMzIxLDcgKzMyMSw3IEBAIFN0cmluZyBJY29uRGF0YWJh
c2U6OnN5bmNocm9ub3VzSWNvblVSTEYKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIAog
ICAgIC8vIFBvc3NpYmxlIHRoZSBwYWdlUmVjb3JkIGlzIGFyb3VuZCBiZWNhdXNlIGl0J3MgYSBy
ZXRhaW5lZCBwYWdlVVJMIHdpdGggbm8gaWNvblVSTCwgc28gd2UgaGF2ZSB0byBjaGVjawotICAg
IHJldHVybiBwYWdlUmVjb3JkLT5pY29uUmVjb3JkKCkgPyBwYWdlUmVjb3JkLT5pY29uUmVjb3Jk
KCktPmljb25VUkwoKS50aHJlYWRzYWZlQ29weSgpIDogU3RyaW5nKCk7CisgICAgcmV0dXJuIHBh
Z2VSZWNvcmQtPmljb25SZWNvcmQoKSA/IHBhZ2VSZWNvcmQtPmljb25SZWNvcmQoKS0+aWNvblVS
TCgpLmlzb2xhdGVkQ29weSgpIDogU3RyaW5nKCk7CiB9CiAKICNpZmRlZiBDQU5fVEhFTUVfVVJM
X0lDT04KQEAgLTQwNiw3ICs0MDYsNyBAQCB2b2lkIEljb25EYXRhYmFzZTo6cmV0YWluSWNvbkZv
clBhZ2VVUkwoCiAgICAgU3RyaW5nIHBhZ2VVUkw7CiAgICAgCiAgICAgaWYgKCFyZWNvcmQpIHsK
LSAgICAgICAgcGFnZVVSTCA9IHBhZ2VVUkxPcmlnaW5hbC5jcm9zc1RocmVhZFN0cmluZygpOwor
ICAgICAgICBwYWdlVVJMID0gcGFnZVVSTE9yaWdpbmFsLmlzb2xhdGVkQ29weSgpOwogCiAgICAg
ICAgIHJlY29yZCA9IG5ldyBQYWdlVVJMUmVjb3JkKHBhZ2VVUkwpOwogICAgICAgICBtX3BhZ2VV
UkxUb1JlY29yZE1hcC5zZXQocGFnZVVSTCwgcmVjb3JkKTsKQEAgLTQxNCw3ICs0MTQsNyBAQCB2
b2lkIEljb25EYXRhYmFzZTo6cmV0YWluSWNvbkZvclBhZ2VVUkwoCiAgICAgCiAgICAgaWYgKCFy
ZWNvcmQtPnJldGFpbigpKSB7CiAgICAgICAgIGlmIChwYWdlVVJMLmlzTnVsbCgpKQotICAgICAg
ICAgICAgcGFnZVVSTCA9IHBhZ2VVUkxPcmlnaW5hbC5jcm9zc1RocmVhZFN0cmluZygpOworICAg
ICAgICAgICAgcGFnZVVSTCA9IHBhZ2VVUkxPcmlnaW5hbC5pc29sYXRlZENvcHkoKTsKIAogICAg
ICAgICAvLyBUaGlzIHBhZ2UganVzdCBoYWQgaXRzIHJldGFpbiBjb3VudCBidW1wZWQgZnJvbSAw
IHRvIDEgLSBSZWNvcmQgdGhhdCBmYWN0CiAgICAgICAgIG1fcmV0YWluZWRQYWdlVVJMcy5hZGQo
cGFnZVVSTCk7CkBAIC00ODksNyArNDg5LDcgQEAgdm9pZCBJY29uRGF0YWJhc2U6OnJlbGVhc2VJ
Y29uRm9yUGFnZVVSTAogICAgIC8vIE1hcmsgc3R1ZmYgZm9yIGRlbGV0aW9uIGZyb20gdGhlIGRh
dGFiYXNlIG9ubHkgaWYgd2UncmUgbm90IGluIHByaXZhdGUgYnJvd3NpbmcKICAgICBpZiAoIW1f
cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCkgewogICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9w
ZW5kaW5nU3luY0xvY2spOwotICAgICAgICBtX3BhZ2VVUkxzUGVuZGluZ1N5bmMuc2V0KHBhZ2VV
UkxPcmlnaW5hbC5jcm9zc1RocmVhZFN0cmluZygpLCBwYWdlUmVjb3JkLT5zbmFwc2hvdCh0cnVl
KSk7CisgICAgICAgIG1fcGFnZVVSTHNQZW5kaW5nU3luYy5zZXQocGFnZVVSTE9yaWdpbmFsLmlz
b2xhdGVkQ29weSgpLCBwYWdlUmVjb3JkLT5zbmFwc2hvdCh0cnVlKSk7CiAgICAgCiAgICAgICAg
IC8vIElmIHRoaXMgcGFnZSBpcyB0aGUgbGFzdCBwYWdlIHRvIHJlZmVyIHRvIGEgcGFydGljdWxh
ciBJY29uUmVjb3JkLCB0aGF0IEljb25SZWNvcmQgbmVlZHMgdG8KICAgICAgICAgLy8gYmUgbWFy
a2VkIGZvciBkZWxldGlvbgpAQCAtNTE1LDcgKzUxNSw3IEBAIHZvaWQgSWNvbkRhdGFiYXNlOjpz
ZXRJY29uRGF0YUZvckljb25VUkwKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhID0gZGF0
YU9yaWdpbmFsID8gZGF0YU9yaWdpbmFsLT5jb3B5KCkgOiBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4oMCk7CiAgICAgaWYgKGRhdGEpCiAgICAgICAgIGRhdGEtPnNldE11dGV4Rm9yVmVyaWZpZXIo
bV91cmxBbmRJY29uTG9jayk7Ci0gICAgU3RyaW5nIGljb25VUkwgPSBpY29uVVJMT3JpZ2luYWwu
Y3Jvc3NUaHJlYWRTdHJpbmcoKTsKKyAgICBTdHJpbmcgaWNvblVSTCA9IGljb25VUkxPcmlnaW5h
bC5pc29sYXRlZENvcHkoKTsKICAgICAKICAgICBWZWN0b3I8U3RyaW5nPiBwYWdlVVJMczsKICAg
ICB7CkBAIC01OTIsOCArNTkyLDggQEAgdm9pZCBJY29uRGF0YWJhc2U6OnNldEljb25VUkxGb3JQ
YWdlVVJMKAogICAgICAgICBpZiAocGFnZVJlY29yZCAmJiBwYWdlUmVjb3JkLT5pY29uUmVjb3Jk
KCkgJiYgcGFnZVJlY29yZC0+aWNvblJlY29yZCgpLT5pY29uVVJMKCkgPT0gaWNvblVSTE9yaWdp
bmFsKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgIHBhZ2VVUkwg
PSBwYWdlVVJMT3JpZ2luYWwuY3Jvc3NUaHJlYWRTdHJpbmcoKTsKLSAgICAgICAgaWNvblVSTCA9
IGljb25VUkxPcmlnaW5hbC5jcm9zc1RocmVhZFN0cmluZygpOworICAgICAgICBwYWdlVVJMID0g
cGFnZVVSTE9yaWdpbmFsLmlzb2xhdGVkQ29weSgpOworICAgICAgICBpY29uVVJMID0gaWNvblVS
TE9yaWdpbmFsLmlzb2xhdGVkQ29weSgpOwogCiAgICAgICAgIGlmICghcGFnZVJlY29yZCkgewog
ICAgICAgICAgICAgcGFnZVJlY29yZCA9IG5ldyBQYWdlVVJMUmVjb3JkKHBhZ2VVUkwpOwpAQCAt
ODU5LDEzICs4NTksMTMgQEAgYm9vbCBJY29uRGF0YWJhc2U6OmlzT3BlbigpIGNvbnN0CiBTdHJp
bmcgSWNvbkRhdGFiYXNlOjpkYXRhYmFzZVBhdGgoKSBjb25zdAogewogICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihtX3N5bmNMb2NrKTsKLSAgICByZXR1cm4gbV9jb21wbGV0ZURhdGFiYXNlUGF0aC50
aHJlYWRzYWZlQ29weSgpOworICAgIHJldHVybiBtX2NvbXBsZXRlRGF0YWJhc2VQYXRoLmlzb2xh
dGVkQ29weSgpOwogfQogCiBTdHJpbmcgSWNvbkRhdGFiYXNlOjpkZWZhdWx0RGF0YWJhc2VGaWxl
bmFtZSgpCiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGRlZmF1bHREYXRhYmFz
ZUZpbGVuYW1lLCAoIldlYnBhZ2VJY29ucy5kYiIpKTsKLSAgICByZXR1cm4gZGVmYXVsdERhdGFi
YXNlRmlsZW5hbWUudGhyZWFkc2FmZUNvcHkoKTsKKyAgICByZXR1cm4gZGVmYXVsdERhdGFiYXNl
RmlsZW5hbWUuaXNvbGF0ZWRDb3B5KCk7CiB9CiAKIC8vIFVubGlrZSBnZXRPckNyZWF0ZVBhZ2VV
UkxSZWNvcmQoKSwgZ2V0T3JDcmVhdGVJY29uUmVjb3JkKCkgZG9lcyBub3QgbWFyayB0aGUgaWNv
biBhcyAiaW50ZXJlc3RlZCBpbiBpbXBvcnQiCkBAIC0yMTQ2LDcgKzIxNDYsNyBAQCBjbGFzcyBJ
bXBvcnRlZEljb25VUkxGb3JQYWdlVVJMV29ya0l0ZW0gCiBwdWJsaWM6CiAgICAgSW1wb3J0ZWRJ
Y29uVVJMRm9yUGFnZVVSTFdvcmtJdGVtKEljb25EYXRhYmFzZUNsaWVudCogY2xpZW50LCBjb25z
dCBTdHJpbmcmIHBhZ2VVUkwpCiAgICAgICAgIDogQ2xpZW50V29ya0l0ZW0oY2xpZW50KQotICAg
ICAgICAsIG1fcGFnZVVSTChuZXcgU3RyaW5nKHBhZ2VVUkwudGhyZWFkc2FmZUNvcHkoKSkpCisg
ICAgICAgICwgbV9wYWdlVVJMKG5ldyBTdHJpbmcocGFnZVVSTC5pc29sYXRlZENvcHkoKSkpCiAg
ICAgeyB9CiAgICAgCiAgICAgdmlydHVhbCB+SW1wb3J0ZWRJY29uVVJMRm9yUGFnZVVSTFdvcmtJ
dGVtKCkKQEAgLTIxNjksNyArMjE2OSw3IEBAIGNsYXNzIEltcG9ydGVkSWNvbkRhdGFGb3JQYWdl
VVJMV29ya0l0ZW0KIHB1YmxpYzoKICAgICBJbXBvcnRlZEljb25EYXRhRm9yUGFnZVVSTFdvcmtJ
dGVtKEljb25EYXRhYmFzZUNsaWVudCogY2xpZW50LCBjb25zdCBTdHJpbmcmIHBhZ2VVUkwpCiAg
ICAgICAgIDogQ2xpZW50V29ya0l0ZW0oY2xpZW50KQotICAgICAgICAsIG1fcGFnZVVSTChuZXcg
U3RyaW5nKHBhZ2VVUkwudGhyZWFkc2FmZUNvcHkoKSkpCisgICAgICAgICwgbV9wYWdlVVJMKG5l
dyBTdHJpbmcocGFnZVVSTC5pc29sYXRlZENvcHkoKSkpCiAgICAgeyB9CiAgICAgCiAgICAgdmly
dHVhbCB+SW1wb3J0ZWRJY29uRGF0YUZvclBhZ2VVUkxXb3JrSXRlbSgpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0NvbnRlbnRTZWN1cml0eVBvbGljeS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvQ29udGVudFNlY3VyaXR5UG9saWN5LmgJKHJldmlzaW9uIDk4Mjg5KQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZW50U2VjdXJpdHlQb2xpY3kuaAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBDb250ZW50U2VjdXJpdHlQb2xpY3lfaAog
I2RlZmluZSBDb250ZW50U2VjdXJpdHlQb2xpY3lfaAogCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ29vcmRpbmF0ZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0Nvb3JkaW5hdGVzLmgJKHJldmlzaW9uIDk4Mjg5
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Db29yZGluYXRlcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw3ICszNiw3IEBAIGNsYXNzIENvb3JkaW5hdGVzIDogcHVibGljIFJlZkNvdW50ZWQ8Q28K
IHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29yZGluYXRlcz4gY3JlYXRlKGRvdWJs
ZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3Vi
bGUgYWx0aXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJh
Y3ksIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91Ymxl
IGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkKSB7IHJldHVybiBhZG9w
dFJlZihuZXcgQ29vcmRpbmF0ZXMobGF0aXR1ZGUsIGxvbmdpdHVkZSwgcHJvdmlkZXNBbHRpdHVk
ZSwgYWx0aXR1ZGUsIGFjY3VyYWN5LCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGFsdGl0dWRl
QWNjdXJhY3ksIHByb3ZpZGVzSGVhZGluZywgaGVhZGluZywgcHJvdmlkZXNTcGVlZCwgc3BlZWQp
KTsgfQogCi0gICAgUGFzc1JlZlB0cjxDb29yZGluYXRlcz4gdGhyZWFkU2FmZUNvcHkoKSBjb25z
dAorICAgIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZXM+IGlzb2xhdGVkQ29weSgpIGNvbnN0CiAgICAg
ewogICAgICAgICByZXR1cm4gQ29vcmRpbmF0ZXM6OmNyZWF0ZShtX2xhdGl0dWRlLCBtX2xvbmdp
dHVkZSwgbV9jYW5Qcm92aWRlQWx0aXR1ZGUsIG1fYWx0aXR1ZGUsIG1fYWNjdXJhY3ksIG1fY2Fu
UHJvdmlkZUFsdGl0dWRlQWNjdXJhY3ksIG1fYWx0aXR1ZGVBY2N1cmFjeSwgbV9jYW5Qcm92aWRl
SGVhZGluZywgbV9oZWFkaW5nLCBtX2NhblByb3ZpZGVTcGVlZCwgbV9zcGVlZCk7CiAgICAgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9HZW9wb3NpdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvR2VvcG9zaXRpb24uaAkocmV2aXNpb24gOTgyODkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0dlb3Bvc2l0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDkgKzQw
LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdlb3Bvc2l0aW9uKGNv
b3JkaW5hdGVzLCB0aW1lc3RhbXApKTsKICAgICB9CiAKLSAgICBQYXNzUmVmUHRyPEdlb3Bvc2l0
aW9uPiB0aHJlYWRTYWZlQ29weSgpIGNvbnN0CisgICAgUGFzc1JlZlB0cjxHZW9wb3NpdGlvbj4g
aXNvbGF0ZWRDb3B5KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBHZW9wb3NpdGlvbjo6
Y3JlYXRlKG1fY29vcmRpbmF0ZXMtPnRocmVhZFNhZmVDb3B5KCksIG1fdGltZXN0YW1wKTsKKyAg
ICAgICAgcmV0dXJuIEdlb3Bvc2l0aW9uOjpjcmVhdGUobV9jb29yZGluYXRlcy0+aXNvbGF0ZWRD
b3B5KCksIG1fdGltZXN0YW1wKTsKICAgICB9CiAKICAgICBET01UaW1lU3RhbXAgdGltZXN0YW1w
KCkgY29uc3QgeyByZXR1cm4gbV90aW1lc3RhbXA7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvU2VjdXJpdHlPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
U2VjdXJpdHlPcmlnaW4uY3BwCShyZXZpc2lvbiA5ODI4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvU2VjdXJpdHlPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsMTEgKzEzMiwxMSBA
QCBTZWN1cml0eU9yaWdpbjo6U2VjdXJpdHlPcmlnaW4oY29uc3QgS1VSCiAKIFNlY3VyaXR5T3Jp
Z2luOjpTZWN1cml0eU9yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpbiogb3RoZXIpCiAgICAgOiBt
X3NhbmRib3hGbGFncyhvdGhlci0+bV9zYW5kYm94RmxhZ3MpCi0gICAgLCBtX3Byb3RvY29sKG90
aGVyLT5tX3Byb3RvY29sLnRocmVhZHNhZmVDb3B5KCkpCi0gICAgLCBtX2hvc3Qob3RoZXItPm1f
aG9zdC50aHJlYWRzYWZlQ29weSgpKQotICAgICwgbV9lbmNvZGVkSG9zdChvdGhlci0+bV9lbmNv
ZGVkSG9zdC50aHJlYWRzYWZlQ29weSgpKQotICAgICwgbV9kb21haW4ob3RoZXItPm1fZG9tYWlu
LnRocmVhZHNhZmVDb3B5KCkpCi0gICAgLCBtX2ZpbGVQYXRoKG90aGVyLT5tX2ZpbGVQYXRoLnRo
cmVhZHNhZmVDb3B5KCkpCisgICAgLCBtX3Byb3RvY29sKG90aGVyLT5tX3Byb3RvY29sLmlzb2xh
dGVkQ29weSgpKQorICAgICwgbV9ob3N0KG90aGVyLT5tX2hvc3QuaXNvbGF0ZWRDb3B5KCkpCisg
ICAgLCBtX2VuY29kZWRIb3N0KG90aGVyLT5tX2VuY29kZWRIb3N0Lmlzb2xhdGVkQ29weSgpKQor
ICAgICwgbV9kb21haW4ob3RoZXItPm1fZG9tYWluLmlzb2xhdGVkQ29weSgpKQorICAgICwgbV9m
aWxlUGF0aChvdGhlci0+bV9maWxlUGF0aC5pc29sYXRlZENvcHkoKSkKICAgICAsIG1fcG9ydChv
dGhlci0+bV9wb3J0KQogICAgICwgbV9pc1VuaXF1ZShvdGhlci0+bV9pc1VuaXF1ZSkKICAgICAs
IG1fdW5pdmVyc2FsQWNjZXNzKG90aGVyLT5tX3VuaXZlcnNhbEFjY2VzcykKQEAgLTE2NCw3ICsx
NjQsNyBAQCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBTZWN1cml0eU9yaWdpCiAgICAgcmV0
dXJuIGNyZWF0ZShLVVJMKCkpOwogfQogCi1QYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBTZWN1
cml0eU9yaWdpbjo6dGhyZWFkc2FmZUNvcHkoKQorUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4g
U2VjdXJpdHlPcmlnaW46Omlzb2xhdGVkQ29weSgpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBTZWN1cml0eU9yaWdpbih0aGlzKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1Nl
Y3VyaXR5T3JpZ2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0
eU9yaWdpbi5oCShyZXZpc2lvbiA5ODI4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJp
dHlPcmlnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAKICAg
ICAvLyBDcmVhdGUgYSBkZWVwIGNvcHkgb2YgdGhpcyBTZWN1cml0eU9yaWdpbi4gVGhpcyBtZXRo
b2QgaXMgdXNlZnVsCiAgICAgLy8gd2hlbiBtYXJzaGFsbGluZyBhIFNlY3VyaXR5T3JpZ2luIHRv
IGFub3RoZXIgdGhyZWFkLgotICAgIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHRocmVhZHNh
ZmVDb3B5KCk7CisgICAgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gaXNvbGF0ZWRDb3B5KCk7
CiAKICAgICAvLyBTZXQgdGhlIGRvbWFpbiBwcm9wZXJ0eSBvZiB0aGlzIHNlY3VyaXR5IG9yaWdp
biB0byBuZXdEb21haW4uIFRoaXMKICAgICAvLyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayB3aGV0
aGVyIG5ld0RvbWFpbiBpcyBhIHN1ZmZpeCBvZiB0aGUgY3VycmVudApJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuaAkocmV2aXNpb24gOTgyODkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50
cy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0
cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9Dcm9zc1RocmVhZENvcGllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwCShyZXZpc2lvbiA5ODI4OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTAsNyArNTAsNyBAQCBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIGZhbHNlLCBLVVJM
CiAKIENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIFN0cmluZz46OlR5cGUgQ3Jv
c3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBmYWxzZSwgU3RyaW5nPjo6Y29weShjb25zdCBTdHJp
bmcmIHN0cikKIHsKLSAgICByZXR1cm4gc3RyLmNyb3NzVGhyZWFkU3RyaW5nKCk7CisgICAgcmV0
dXJuIHN0ci5pc29sYXRlZENvcHkoKTsKIH0KIAogQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNl
LCBmYWxzZSwgUmVzb3VyY2VFcnJvcj46OlR5cGUgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNl
LCBmYWxzZSwgUmVzb3VyY2VFcnJvcj46OmNvcHkoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3Ip
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmgJKHJldmlzaW9uIDk4Mjg5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZUNob29zZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMzEsNiArMzEsNyBAQAogI2RlZmluZSBGaWxlQ2hvb3Nlcl9oCiAKICNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9LVVJMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9LVVJMLmNwcAkocmV2aXNpb24gOTgyODkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9L
VVJMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYxLDcgKzU2MSw3IEBAIHZvaWQgS1VSTDo6aW5p
dChjb25zdCBLVVJMJiBiYXNlLCBjb25zdCAKIEtVUkwgS1VSTDo6Y29weSgpIGNvbnN0CiB7CiAg
ICAgS1VSTCByZXN1bHQgPSAqdGhpczsKLSAgICByZXN1bHQubV9zdHJpbmcgPSByZXN1bHQubV9z
dHJpbmcuY3Jvc3NUaHJlYWRTdHJpbmcoKTsKKyAgICByZXN1bHQubV9zdHJpbmcgPSByZXN1bHQu
bV9zdHJpbmcuaXNvbGF0ZWRDb3B5KCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvU2NoZWR1bGVQYWlyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvU2NoZWR1bGVQYWlyLmgJKHJldmlzaW9uIDk4Mjg5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvU2NoZWR1bGVQYWlyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAogI2lmIFBMQVRGT1JNKE1BQykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGEuY3BwCShyZXZpc2lvbiA5ODI4
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIHZvaWQgUmF3RGF0YTo6ZGV0YWNoRnJvbUN1cnJl
bnRUaHJlYWQoKQogdm9pZCBCbG9iRGF0YUl0ZW06OmRldGFjaEZyb21DdXJyZW50VGhyZWFkKCkK
IHsKICAgICBkYXRhLT5kZXRhY2hGcm9tQ3VycmVudFRocmVhZCgpOwotICAgIHBhdGggPSBwYXRo
LmNyb3NzVGhyZWFkU3RyaW5nKCk7CisgICAgcGF0aCA9IHBhdGguaXNvbGF0ZWRDb3B5KCk7CiAg
ICAgdXJsID0gdXJsLmNvcHkoKTsKIH0KIApAQCAtNjQsOCArNjQsOCBAQCBQYXNzT3duUHRyPEJs
b2JEYXRhPiBCbG9iRGF0YTo6Y3JlYXRlKCkKIAogdm9pZCBCbG9iRGF0YTo6ZGV0YWNoRnJvbUN1
cnJlbnRUaHJlYWQoKQogewotICAgIG1fY29udGVudFR5cGUgPSBtX2NvbnRlbnRUeXBlLmNyb3Nz
VGhyZWFkU3RyaW5nKCk7Ci0gICAgbV9jb250ZW50RGlzcG9zaXRpb24gPSBtX2NvbnRlbnREaXNw
b3NpdGlvbi5jcm9zc1RocmVhZFN0cmluZygpOworICAgIG1fY29udGVudFR5cGUgPSBtX2NvbnRl
bnRUeXBlLmlzb2xhdGVkQ29weSgpOworICAgIG1fY29udGVudERpc3Bvc2l0aW9uID0gbV9jb250
ZW50RGlzcG9zaXRpb24uaXNvbGF0ZWRDb3B5KCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX2l0ZW1zLnNpemUoKTsgKytpKQogICAgICAgICBtX2l0ZW1zLmF0KGkpLmRldGFjaEZyb21D
dXJyZW50VGhyZWFkKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0hUVFBIZWFkZXJNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvSFRUUEhlYWRlck1hcC5jcHAJKHJldmlzaW9uIDk4Mjg5KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTIsNyArNTIsNyBAQCBQYXNzT3duUHRyPENyb3NzVGhyZWFkSFRUUEhlYWRlck1hcERhdGE+
CiAKICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmRfaXQgPSBlbmQoKTsKICAg
ICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYmVnaW4oKTsgaXQgIT0g
ZW5kX2l0OyArK2l0KSB7Ci0gICAgICAgIGRhdGEtPmFwcGVuZChtYWtlX3BhaXIoaXQtPmZpcnN0
LnN0cmluZygpLmNyb3NzVGhyZWFkU3RyaW5nKCksIGl0LT5zZWNvbmQuY3Jvc3NUaHJlYWRTdHJp
bmcoKSkpOworICAgICAgICBkYXRhLT5hcHBlbmQobWFrZV9wYWlyKGl0LT5maXJzdC5zdHJpbmco
KS5pc29sYXRlZENvcHkoKSwgaXQtPnNlY29uZC5pc29sYXRlZENvcHkoKSkpOwogICAgIH0KICAg
ICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL01JTUVIZWFkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL01JTUVIZWFkZXIuaAkocmV2aXNpb24gOTgyODkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL01JTUVIZWFkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIs
NiArMzIsNyBAQAogI2RlZmluZSBNSU1FSGVhZGVyX2gKIAogI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VFcnJvckJhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VFcnJvckJhc2UuY3BwCShyZXZp
c2lvbiA5ODI4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VF
cnJvckJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMCArMzYsMTAgQEAgUmVzb3VyY2VF
cnJvciBSZXNvdXJjZUVycm9yQmFzZTo6Y29weSgpIAogICAgIGxhenlJbml0KCk7CiAKICAgICBS
ZXNvdXJjZUVycm9yIGVycm9yQ29weTsKLSAgICBlcnJvckNvcHkubV9kb21haW4gPSBtX2RvbWFp
bi5jcm9zc1RocmVhZFN0cmluZygpOworICAgIGVycm9yQ29weS5tX2RvbWFpbiA9IG1fZG9tYWlu
Lmlzb2xhdGVkQ29weSgpOwogICAgIGVycm9yQ29weS5tX2Vycm9yQ29kZSA9IG1fZXJyb3JDb2Rl
OwotICAgIGVycm9yQ29weS5tX2ZhaWxpbmdVUkwgPSBtX2ZhaWxpbmdVUkwuY3Jvc3NUaHJlYWRT
dHJpbmcoKTsKLSAgICBlcnJvckNvcHkubV9sb2NhbGl6ZWREZXNjcmlwdGlvbiA9IG1fbG9jYWxp
emVkRGVzY3JpcHRpb24uY3Jvc3NUaHJlYWRTdHJpbmcoKTsKKyAgICBlcnJvckNvcHkubV9mYWls
aW5nVVJMID0gbV9mYWlsaW5nVVJMLmlzb2xhdGVkQ29weSgpOworICAgIGVycm9yQ29weS5tX2xv
Y2FsaXplZERlc2NyaXB0aW9uID0gbV9sb2NhbGl6ZWREZXNjcmlwdGlvbi5pc29sYXRlZENvcHko
KTsKICAgICBlcnJvckNvcHkubV9pc051bGwgPSBtX2lzTnVsbDsKICAgICBlcnJvckNvcHkubV9p
c0NhbmNlbGxhdGlvbiA9IG1faXNDYW5jZWxsYXRpb247CiAgICAgcGxhdGZvcm1Db3B5KGVycm9y
Q29weSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlTG9h
ZEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jl
c291cmNlTG9hZEluZm8uaAkocmV2aXNpb24gOTgyODkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlTG9hZEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiAr
MjgsNyBAQAogI2RlZmluZSBSZXNvdXJjZUxvYWRJbmZvX2gKIAogI2luY2x1ZGUgIkhUVFBIZWFk
ZXJNYXAuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1
ZXN0QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAkocmV2aXNpb24gOTgyODkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04NSw3ICs4NSw3IEBAIFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVl
c3REYXQKICAgICBkYXRhLT5tX2NhY2hlUG9saWN5ID0gY2FjaGVQb2xpY3koKTsKICAgICBkYXRh
LT5tX3RpbWVvdXRJbnRlcnZhbCA9IHRpbWVvdXRJbnRlcnZhbCgpOwogICAgIGRhdGEtPm1fZmly
c3RQYXJ0eUZvckNvb2tpZXMgPSBmaXJzdFBhcnR5Rm9yQ29va2llcygpLmNvcHkoKTsKLSAgICBk
YXRhLT5tX2h0dHBNZXRob2QgPSBodHRwTWV0aG9kKCkuY3Jvc3NUaHJlYWRTdHJpbmcoKTsKKyAg
ICBkYXRhLT5tX2h0dHBNZXRob2QgPSBodHRwTWV0aG9kKCkuaXNvbGF0ZWRDb3B5KCk7CiAgICAg
ZGF0YS0+bV9odHRwSGVhZGVycyA9IGh0dHBIZWFkZXJGaWVsZHMoKS5jb3B5RGF0YSgpOwogICAg
IGRhdGEtPm1fcHJpb3JpdHkgPSBwcmlvcml0eSgpOwogCkBAIC05Myw3ICs5Myw3IEBAIFBhc3NP
d25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXQKICAgICBkYXRhLT5tX3Jlc3BvbnNl
Q29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5LnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkobV9yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5z
aXplKCkpOwogICAgIHNpemVfdCBlbmNvZGluZ0FycmF5U2l6ZSA9IG1fcmVzcG9uc2VDb250ZW50
RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90
IGluZGV4ID0gMDsgaW5kZXggPCBlbmNvZGluZ0FycmF5U2l6ZTsgKytpbmRleCkgewotICAgICAg
ICBkYXRhLT5tX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5
LmFwcGVuZChtX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5
W2luZGV4XS5jcm9zc1RocmVhZFN0cmluZygpKTsKKyAgICAgICAgZGF0YS0+bV9yZXNwb25zZUNv
bnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5hcHBlbmQobV9yZXNwb25zZUNv
bnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheVtpbmRleF0uaXNvbGF0ZWRDb3B5
KCkpOwogICAgIH0KICNlbmRpZgogICAgIGlmIChtX2h0dHBCb2R5KQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFz
ZS5jcHAJKHJldmlzaW9uIDk4Mjg5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMCwxMiArMTIw
LDEyIEBAIFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGEKIHsKICAgICBP
d25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YT4gZGF0YSA9IGFkb3B0UHRyKG5l
dyBDcm9zc1RocmVhZFJlc291cmNlUmVzcG9uc2VEYXRhKTsKICAgICBkYXRhLT5tX3VybCA9IHVy
bCgpLmNvcHkoKTsKLSAgICBkYXRhLT5tX21pbWVUeXBlID0gbWltZVR5cGUoKS5jcm9zc1RocmVh
ZFN0cmluZygpOworICAgIGRhdGEtPm1fbWltZVR5cGUgPSBtaW1lVHlwZSgpLmlzb2xhdGVkQ29w
eSgpOwogICAgIGRhdGEtPm1fZXhwZWN0ZWRDb250ZW50TGVuZ3RoID0gZXhwZWN0ZWRDb250ZW50
TGVuZ3RoKCk7Ci0gICAgZGF0YS0+bV90ZXh0RW5jb2RpbmdOYW1lID0gdGV4dEVuY29kaW5nTmFt
ZSgpLmNyb3NzVGhyZWFkU3RyaW5nKCk7Ci0gICAgZGF0YS0+bV9zdWdnZXN0ZWRGaWxlbmFtZSA9
IHN1Z2dlc3RlZEZpbGVuYW1lKCkuY3Jvc3NUaHJlYWRTdHJpbmcoKTsKKyAgICBkYXRhLT5tX3Rl
eHRFbmNvZGluZ05hbWUgPSB0ZXh0RW5jb2RpbmdOYW1lKCkuaXNvbGF0ZWRDb3B5KCk7CisgICAg
ZGF0YS0+bV9zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3RlZEZpbGVuYW1lKCkuaXNvbGF0ZWRD
b3B5KCk7CiAgICAgZGF0YS0+bV9odHRwU3RhdHVzQ29kZSA9IGh0dHBTdGF0dXNDb2RlKCk7Ci0g
ICAgZGF0YS0+bV9odHRwU3RhdHVzVGV4dCA9IGh0dHBTdGF0dXNUZXh0KCkuY3Jvc3NUaHJlYWRT
dHJpbmcoKTsKKyAgICBkYXRhLT5tX2h0dHBTdGF0dXNUZXh0ID0gaHR0cFN0YXR1c1RleHQoKS5p
c29sYXRlZENvcHkoKTsKICAgICBkYXRhLT5tX2h0dHBIZWFkZXJzID0gaHR0cEhlYWRlckZpZWxk
cygpLmNvcHlEYXRhKCk7CiAgICAgZGF0YS0+bV9sYXN0TW9kaWZpZWREYXRlID0gbGFzdE1vZGlm
aWVkRGF0ZSgpOwogICAgIGlmIChtX3Jlc291cmNlTG9hZFRpbWluZykKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vc3FsL1NRTFZhbHVlLmNwcAkocmV2aXNpb24gOTgyODkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw3ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIFNRTFZhbHVlOjpTUUxWYWx1ZShjb25z
dCBTUUxWYWx1ZSYgdmFsKQogICAgIDogbV90eXBlKHZhbC5tX3R5cGUpCiAgICAgLCBtX251bWJl
cih2YWwubV9udW1iZXIpCi0gICAgLCBtX3N0cmluZyh2YWwubV9zdHJpbmcudGhyZWFkc2FmZUNv
cHkoKSkKKyAgICAsIG1fc3RyaW5nKHZhbC5tX3N0cmluZy5pc29sYXRlZENvcHkoKSkKIHsKIH0K
IApAQCAtNDMsNyArNDMsNyBAQCBTdHJpbmcgU1FMVmFsdWU6OnN0cmluZygpIGNvbnN0CiAgICAg
QVNTRVJUKG1fdHlwZSA9PSBTdHJpbmdWYWx1ZSk7CiAKICAgICAvLyBNdXN0IHJldHVybiBhIGNv
cHkgc2luY2UgcmVmLXNoYXJlZCBTdHJpbmdzIGFyZSBub3QgdGhyZWFkIHNhZmUKLSAgICByZXR1
cm4gbV9zdHJpbmcudGhyZWFkc2FmZUNvcHkoKTsKKyAgICByZXR1cm4gbV9zdHJpbmcuaXNvbGF0
ZWRDb3B5KCk7CiB9CiAKIGRvdWJsZSBTUUxWYWx1ZTo6bnVtYmVyKCkgY29uc3QKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9RdW90ZXNEYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1F1b3Rlc0RhdGEuaAkocmV2aXNpb24gOTgy
ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUXVvdGVzRGF0YS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAjaWZuZGVmIFF1b3Rlc0RhdGFfaAogI2RlZmlu
ZSBRdW90ZXNEYXRhX2gKIAorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5jcHAJKHJldmlzaW9uIDk4
Mjg5KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTI1LDcgKzEyNSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVH
dWlkVmVyc2lvbk1hcCgKICAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHF1aXRlLWF3a3dhcmQgcmVz
dHJpY3Rpb24gdG8gaGF2ZSB0byBwcm9ncmFtIHdpdGguCiAKICAgICAvLyBNYXAgbnVsbCBzdHJp
bmcgdG8gZW1wdHkgc3RyaW5nIChzZWUgY29tbWVudCBhYm92ZSkuCi0gICAgZ3VpZFRvVmVyc2lv
bk1hcCgpLnNldChndWlkLCBuZXdWZXJzaW9uLmlzRW1wdHkoKSA/IFN0cmluZygpIDogbmV3VmVy
c2lvbi50aHJlYWRzYWZlQ29weSgpKTsKKyAgICBndWlkVG9WZXJzaW9uTWFwKCkuc2V0KGd1aWQs
IG5ld1ZlcnNpb24uaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBuZXdWZXJzaW9uLmlzb2xhdGVkQ29w
eSgpKTsKIH0KIAogdHlwZWRlZiBIYXNoTWFwPGludCwgSGFzaFNldDxBYnN0cmFjdERhdGFiYXNl
Kj4qPiBHdWlkRGF0YWJhc2VNYXA7CkBAIC0xNzcsOSArMTc3LDkgQEAgY29uc3QgY2hhciogQWJz
dHJhY3REYXRhYmFzZTo6ZGF0YWJhc2VJbgogQWJzdHJhY3REYXRhYmFzZTo6QWJzdHJhY3REYXRh
YmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGlt
YXRlZFNpemUpCiAgICAgOiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoY29udGV4dCkKLSAgICAs
IG1fbmFtZShuYW1lLmNyb3NzVGhyZWFkU3RyaW5nKCkpCi0gICAgLCBtX2V4cGVjdGVkVmVyc2lv
bihleHBlY3RlZFZlcnNpb24uY3Jvc3NUaHJlYWRTdHJpbmcoKSkKLSAgICAsIG1fZGlzcGxheU5h
bWUoZGlzcGxheU5hbWUuY3Jvc3NUaHJlYWRTdHJpbmcoKSkKKyAgICAsIG1fbmFtZShuYW1lLmlz
b2xhdGVkQ29weSgpKQorICAgICwgbV9leHBlY3RlZFZlcnNpb24oZXhwZWN0ZWRWZXJzaW9uLmlz
b2xhdGVkQ29weSgpKQorICAgICwgbV9kaXNwbGF5TmFtZShkaXNwbGF5TmFtZS5pc29sYXRlZENv
cHkoKSkKICAgICAsIG1fZXN0aW1hdGVkU2l6ZShlc3RpbWF0ZWRTaXplKQogICAgICwgbV9ndWlk
KDApCiAgICAgLCBtX29wZW5lZChmYWxzZSkKQEAgLTI2NCw3ICsyNjQsNyBAQCBib29sIEFic3Ry
YWN0RGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyCiAgICAgICAgIEd1aWRWZXJzaW9uTWFwOjpp
dGVyYXRvciBlbnRyeSA9IGd1aWRUb1ZlcnNpb25NYXAoKS5maW5kKG1fZ3VpZCk7CiAgICAgICAg
IGlmIChlbnRyeSAhPSBndWlkVG9WZXJzaW9uTWFwKCkuZW5kKCkpIHsKICAgICAgICAgICAgIC8v
IE1hcCBudWxsIHN0cmluZyB0byBlbXB0eSBzdHJpbmcgKHNlZSB1cGRhdGVHdWlkVmVyc2lvbk1h
cCgpKS4KLSAgICAgICAgICAgIGN1cnJlbnRWZXJzaW9uID0gZW50cnktPnNlY29uZC5pc051bGwo
KSA/IFN0cmluZygiIikgOiBlbnRyeS0+c2Vjb25kLnRocmVhZHNhZmVDb3B5KCk7CisgICAgICAg
ICAgICBjdXJyZW50VmVyc2lvbiA9IGVudHJ5LT5zZWNvbmQuaXNOdWxsKCkgPyBTdHJpbmcoIiIp
IDogZW50cnktPnNlY29uZC5pc29sYXRlZENvcHkoKTsKICAgICAgICAgICAgIExPRyhTdG9yYWdl
QVBJLCAiQ3VycmVudCBjYWNoZWQgdmVyc2lvbiBmb3IgZ3VpZCAlaSBpcyAlcyIsIG1fZ3VpZCwg
Y3VycmVudFZlcnNpb24uYXNjaWkoKS5kYXRhKCkpOwogCiAjaWYgUExBVEZPUk0oQ0hST01JVU0p
CkBAIC0zNzEsMTMgKzM3MSwxMyBAQCBTZWN1cml0eU9yaWdpbiogQWJzdHJhY3REYXRhYmFzZTo6
c2VjdXJpCiBTdHJpbmcgQWJzdHJhY3REYXRhYmFzZTo6c3RyaW5nSWRlbnRpZmllcigpIGNvbnN0
CiB7CiAgICAgLy8gUmV0dXJuIGEgZGVlcCBjb3B5IGZvciByZWYgY291bnRpbmcgdGhyZWFkIHNh
ZmV0eQotICAgIHJldHVybiBtX25hbWUudGhyZWFkc2FmZUNvcHkoKTsKKyAgICByZXR1cm4gbV9u
YW1lLmlzb2xhdGVkQ29weSgpOwogfQogCiBTdHJpbmcgQWJzdHJhY3REYXRhYmFzZTo6ZGlzcGxh
eU5hbWUoKSBjb25zdAogewogICAgIC8vIFJldHVybiBhIGRlZXAgY29weSBmb3IgcmVmIGNvdW50
aW5nIHRocmVhZCBzYWZldHkKLSAgICByZXR1cm4gbV9kaXNwbGF5TmFtZS50aHJlYWRzYWZlQ29w
eSgpOworICAgIHJldHVybiBtX2Rpc3BsYXlOYW1lLmlzb2xhdGVkQ29weSgpOwogfQogCiB1bnNp
Z25lZCBsb25nIEFic3RyYWN0RGF0YWJhc2U6OmVzdGltYXRlZFNpemUoKSBjb25zdApAQCAtMzg4
LDcgKzM4OCw3IEBAIHVuc2lnbmVkIGxvbmcgQWJzdHJhY3REYXRhYmFzZTo6ZXN0aW1hdGUKIFN0
cmluZyBBYnN0cmFjdERhdGFiYXNlOjpmaWxlTmFtZSgpIGNvbnN0CiB7CiAgICAgLy8gUmV0dXJu
IGEgZGVlcCBjb3B5IGZvciByZWYgY291bnRpbmcgdGhyZWFkIHNhZmV0eQotICAgIHJldHVybiBt
X2ZpbGVuYW1lLnRocmVhZHNhZmVDb3B5KCk7CisgICAgcmV0dXJuIG1fZmlsZW5hbWUuaXNvbGF0
ZWRDb3B5KCk7CiB9CiAKIGJvb2wgQWJzdHJhY3REYXRhYmFzZTo6Z2V0VmVyc2lvbkZyb21EYXRh
YmFzZShTdHJpbmcmIHZlcnNpb24sIGJvb2wgc2hvdWxkQ2FjaGVWZXJzaW9uKQpAQCAtNDMxLDEz
ICs0MzEsMTMgQEAgYm9vbCBBYnN0cmFjdERhdGFiYXNlOjpzZXRWZXJzaW9uSW5EYXRhYgogCiB2
b2lkIEFic3RyYWN0RGF0YWJhc2U6OnNldEV4cGVjdGVkVmVyc2lvbihjb25zdCBTdHJpbmcmIHZl
cnNpb24pCiB7Ci0gICAgbV9leHBlY3RlZFZlcnNpb24gPSB2ZXJzaW9uLnRocmVhZHNhZmVDb3B5
KCk7CisgICAgbV9leHBlY3RlZFZlcnNpb24gPSB2ZXJzaW9uLmlzb2xhdGVkQ29weSgpOwogfQog
CiBTdHJpbmcgQWJzdHJhY3REYXRhYmFzZTo6Z2V0Q2FjaGVkVmVyc2lvbigpIGNvbnN0CiB7CiAg
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsKLSAgICByZXR1cm4gZ3VpZFRvVmVy
c2lvbk1hcCgpLmdldChtX2d1aWQpLnRocmVhZHNhZmVDb3B5KCk7CisgICAgcmV0dXJuIGd1aWRU
b1ZlcnNpb25NYXAoKS5nZXQobV9ndWlkKS5pc29sYXRlZENvcHkoKTsKIH0KIAogdm9pZCBBYnN0
cmFjdERhdGFiYXNlOjpzZXRDYWNoZWRWZXJzaW9uKGNvbnN0IFN0cmluZyYgYWN0dWFsVmVyc2lv
bikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvQ2hhbmdlVmVyc2lvbldyYXBw
ZXIuY3BwCShyZXZpc2lvbiA5ODI4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvQ2hhbmdl
VmVyc2lvbldyYXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw4ICszOCw4IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIENoYW5nZVZlcnNpb25XcmFwcGVyOjpDaGFuZ2VWZXJzaW9uV3Jh
cHBlcihjb25zdCBTdHJpbmcmIG9sZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgbmV3VmVyc2lvbikK
LSAgICA6IG1fb2xkVmVyc2lvbihvbGRWZXJzaW9uLmNyb3NzVGhyZWFkU3RyaW5nKCkpCi0gICAg
LCBtX25ld1ZlcnNpb24obmV3VmVyc2lvbi5jcm9zc1RocmVhZFN0cmluZygpKQorICAgIDogbV9v
bGRWZXJzaW9uKG9sZFZlcnNpb24uaXNvbGF0ZWRDb3B5KCkpCisgICAgLCBtX25ld1ZlcnNpb24o
bmV3VmVyc2lvbi5pc29sYXRlZENvcHkoKSkKIHsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9EYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDk4Mjg5KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9EYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw3ICsxMjQsNyBAQCBEYXRhYmFz
ZTo6RGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4CiAgICAgLCBtX2lzVHJhbnNhY3Rpb25R
dWV1ZUVuYWJsZWQodHJ1ZSkKICAgICAsIG1fZGVsZXRlZChmYWxzZSkKIHsKLSAgICBtX2RhdGFi
YXNlVGhyZWFkU2VjdXJpdHlPcmlnaW4gPSBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbi0+
dGhyZWFkc2FmZUNvcHkoKTsKKyAgICBtX2RhdGFiYXNlVGhyZWFkU2VjdXJpdHlPcmlnaW4gPSBt
X2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbi0+aXNvbGF0ZWRDb3B5KCk7CiAKICAgICBTY3Jp
cHRDb250cm9sbGVyOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CiAgICAgQVNTRVJUKG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC0+ZGF0YWJhc2VUaHJlYWQoKSk7CkBAIC0zODgsNyArMzg4LDcgQEAg
U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvciogRGF0YWJhc2U6OnRyYQogCiBWZWN0b3I8U3RyaW5n
PiBEYXRhYmFzZTo6dGFibGVOYW1lcygpCiB7Ci0gICAgLy8gRklYTUU6IE5vdCB1c2luZyB0aHJl
YWRzYWZlQ29weSBvbiB0aGVzZSBzdHJpbmdzIGxvb2tzIG9rIHNpbmNlIHRocmVhZHMgdGFrZSBz
dHJpY3QgdHVybnMKKyAgICAvLyBGSVhNRTogTm90IHVzaW5nIGlzb2xhdGVkQ29weSBvbiB0aGVz
ZSBzdHJpbmdzIGxvb2tzIG9rIHNpbmNlIHRocmVhZHMgdGFrZSBzdHJpY3QgdHVybnMKICAgICAv
LyBpbiBkZWFsaW5nIHdpdGggdGhlbS4gSG93ZXZlciwgaWYgdGhlIGNvZGUgY2hhbmdlcywgdGhp
cyBtYXkgbm90IGJlIHRydWUgYW55bW9yZS4KICAgICBWZWN0b3I8U3RyaW5nPiByZXN1bHQ7CiAg
ICAgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyIHN5bmNocm9uaXplcjsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VEZXRhaWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9EYXRhYmFzZURldGFpbHMuaAkocmV2aXNpb24gOTgyODkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlRGV0YWlscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw2ICszMiw3IEBACiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKIAogI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5j
cHAJKHJldmlzaW9uIDk4Mjg5KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRy
YWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MiwxNyArOTIsMTcgQEAgdm9pZCBEYXRhYmFz
ZVRyYWNrZXI6OnNldERhdGFiYXNlRGlyZWN0bwogewogICAgIE11dGV4TG9ja2VyIGxvY2tEYXRh
YmFzZShtX2RhdGFiYXNlR3VhcmQpOwogICAgIEFTU0VSVCghbV9kYXRhYmFzZS5pc09wZW4oKSk7
Ci0gICAgbV9kYXRhYmFzZURpcmVjdG9yeVBhdGggPSBwYXRoLnRocmVhZHNhZmVDb3B5KCk7Cisg
ICAgbV9kYXRhYmFzZURpcmVjdG9yeVBhdGggPSBwYXRoLmlzb2xhdGVkQ29weSgpOwogfQogCiBT
dHJpbmcgRGF0YWJhc2VUcmFja2VyOjpkYXRhYmFzZURpcmVjdG9yeVBhdGgoKSBjb25zdAogewot
ICAgIHJldHVybiBtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aC50aHJlYWRzYWZlQ29weSgpOworICAg
IHJldHVybiBtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aC5pc29sYXRlZENvcHkoKTsKIH0KIAogU3Ry
aW5nIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlckRhdGFiYXNlUGF0aCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNlRmlsZU5hbWVUb1BhdGgobV9k
YXRhYmFzZURpcmVjdG9yeVBhdGgudGhyZWFkc2FmZUNvcHkoKSwgIkRhdGFiYXNlcy5kYiIpOwor
ICAgIHJldHVybiBTUUxpdGVGaWxlU3lzdGVtOjphcHBlbmREYXRhYmFzZUZpbGVOYW1lVG9QYXRo
KG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoLmlzb2xhdGVkQ29weSgpLCAiRGF0YWJhc2VzLmRiIik7
CiB9CiAKIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpvcGVuVHJhY2tlckRhdGFiYXNlKGJvb2wgY3Jl
YXRlSWZEb2VzTm90RXhpc3QpCkBAIC0xNzEsNyArMTcxLDcgQEAgYm9vbCBEYXRhYmFzZVRyYWNr
ZXI6OmNhbkVzdGFibGlzaERhdGFiYQogICAgICAgICAvLyBHaXZlIHRoZSBjaHJvbWUgY2xpZW50
IGEgY2hhbmNlIHRvIGluY3JlYXNlIHRoZSBxdW90YS4KICAgICAgICAgLy8gVGVtcG9yYXJpbHkg
bWFrZSB0aGUgZGV0YWlscyBvZiB0aGUgcHJvcG9zZWQgZGF0YWJhc2UgYXZhaWxhYmxlLCBzbyB0
aGUgY2xpZW50IGNhbiBnZXQgYXQgdGhlbS4KICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBy
ZWFsbHkganVzdCBwYXNzIHRoZSBkZXRhaWxzIGludG8gdGhpcyBjYWxsLCByYXRoZXIgdGhhbiB1
c2luZyBtX3Byb3Bvc2VkRGF0YWJhc2VzLgotICAgICAgICBkZXRhaWxzID0gUHJvcG9zZWREYXRh
YmFzZShvcmlnaW4tPnRocmVhZHNhZmVDb3B5KCksIERhdGFiYXNlRGV0YWlscyhuYW1lLnRocmVh
ZHNhZmVDb3B5KCksIGRpc3BsYXlOYW1lLnRocmVhZHNhZmVDb3B5KCksIGVzdGltYXRlZFNpemUs
IDApKTsKKyAgICAgICAgZGV0YWlscyA9IFByb3Bvc2VkRGF0YWJhc2Uob3JpZ2luLT5pc29sYXRl
ZENvcHkoKSwgRGF0YWJhc2VEZXRhaWxzKG5hbWUuaXNvbGF0ZWRDb3B5KCksIGRpc3BsYXlOYW1l
Lmlzb2xhdGVkQ29weSgpLCBlc3RpbWF0ZWRTaXplLCAwKSk7CiAgICAgICAgIG1fcHJvcG9zZWRE
YXRhYmFzZXMuYWRkKCZkZXRhaWxzKTsKICAgICB9CiAgICAgLy8gRHJvcCBhbGwgbG9ja3MgYmVm
b3JlIGNhbGxpbmcgb3V0OyB3ZSBkb24ndCBrbm93IHdoYXQgdGhleSdsbCBkby4KQEAgLTI2Nyw3
ICsyNjcsNyBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6aW50ZXJydXB0QWxsRGF0YWJhCiAKIFN0
cmluZyBEYXRhYmFzZVRyYWNrZXI6Om9yaWdpblBhdGgoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikg
Y29uc3QKIHsKLSAgICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6YXBwZW5kRGF0YWJhc2VGaWxl
TmFtZVRvUGF0aChtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aC50aHJlYWRzYWZlQ29weSgpLCBvcmln
aW4tPmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6
YXBwZW5kRGF0YWJhc2VGaWxlTmFtZVRvUGF0aChtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aC5pc29s
YXRlZENvcHkoKSwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CiB9CiAKIFN0cmluZyBE
YXRhYmFzZVRyYWNrZXI6OmZ1bGxQYXRoRm9yRGF0YWJhc2VOb0xvY2soU2VjdXJpdHlPcmlnaW4q
IG9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIGNyZWF0ZUlmTm90RXhpc3RzKQpAQCAt
MzI4LDcgKzMyOCw3IEBAIFN0cmluZyBEYXRhYmFzZVRyYWNrZXI6OmZ1bGxQYXRoRm9yRGF0YWIK
ICAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKICAgICBMb2Nr
ZXI8T3JpZ2luUXVvdGFNYW5hZ2VyPiBxdW90YU1hbmFnZXJMb2NrZXIob3JpZ2luUXVvdGFNYW5h
Z2VyKCkpOwogCi0gICAgcmV0dXJuIGZ1bGxQYXRoRm9yRGF0YWJhc2VOb0xvY2sob3JpZ2luLCBu
YW1lLCBjcmVhdGVJZk5vdEV4aXN0cykudGhyZWFkc2FmZUNvcHkoKTsKKyAgICByZXR1cm4gZnVs
bFBhdGhGb3JEYXRhYmFzZU5vTG9jayhvcmlnaW4sIG5hbWUsIGNyZWF0ZUlmTm90RXhpc3RzKS5p
c29sYXRlZENvcHkoKTsKIH0KIAogdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnBvcHVsYXRlT3JpZ2lu
cygpCkBAIC0zNTMsNyArMzUzLDcgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnBvcHVsYXRlT3Jp
Z2lucygpCiAgICAgaW50IHJlc3VsdDsKICAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5z
dGVwKCkpID09IFNRTFJlc3VsdFJvdykgewogICAgICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
IG9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tRGF0YWJhc2VJZGVudGlmaWVyKHN0
YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKTsKLSAgICAgICAgbV9xdW90YU1hcC0+c2V0KG9yaWdp
bi5nZXQoKS0+dGhyZWFkc2FmZUNvcHkoKSwgc3RhdGVtZW50LmdldENvbHVtbkludDY0KDEpKTsK
KyAgICAgICAgbV9xdW90YU1hcC0+c2V0KG9yaWdpbi5nZXQoKS0+aXNvbGF0ZWRDb3B5KCksIHN0
YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgxKSk7CiAgICAgfQogCiAgICAgaWYgKHJlc3VsdCAhPSBT
UUxSZXN1bHREb25lKQpAQCAtNDAzLDcgKzQwMyw3IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpk
YXRhYmFzZU5hbWVzRm9yT3IKICAgICB9CiAKICAgICBmb3IgKFZlY3RvcjxTdHJpbmc+OjppdGVy
YXRvciBpdGVyID0gdGVtcC5iZWdpbigpOyBpdGVyICE9IHRlbXAuZW5kKCk7ICsraXRlcikKLSAg
ICAgICAgcmVzdWx0VmVjdG9yLmFwcGVuZChpdGVyLT50aHJlYWRzYWZlQ29weSgpKTsKKyAgICAg
ICAgcmVzdWx0VmVjdG9yLmFwcGVuZChpdGVyLT5pc29sYXRlZENvcHkoKSk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKQEAgLTUyMywxMyArNTIzLDEzIEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjph
ZGRPcGVuRGF0YWJhc2UoQWIKICAgICAgICAgRGF0YWJhc2VOYW1lTWFwKiBuYW1lTWFwID0gbV9v
cGVuRGF0YWJhc2VNYXAtPmdldChkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKSk7CiAgICAgICAg
IGlmICghbmFtZU1hcCkgewogICAgICAgICAgICAgbmFtZU1hcCA9IG5ldyBEYXRhYmFzZU5hbWVN
YXA7Ci0gICAgICAgICAgICBtX29wZW5EYXRhYmFzZU1hcC0+c2V0KGRhdGFiYXNlLT5zZWN1cml0
eU9yaWdpbigpLT50aHJlYWRzYWZlQ29weSgpLCBuYW1lTWFwKTsKKyAgICAgICAgICAgIG1fb3Bl
bkRhdGFiYXNlTWFwLT5zZXQoZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCktPmlzb2xhdGVkQ29w
eSgpLCBuYW1lTWFwKTsKICAgICAgICAgfQogCiAgICAgICAgIERhdGFiYXNlU2V0KiBkYXRhYmFz
ZVNldCA9IG5hbWVNYXAtPmdldChuYW1lKTsKICAgICAgICAgaWYgKCFkYXRhYmFzZVNldCkgewog
ICAgICAgICAgICAgZGF0YWJhc2VTZXQgPSBuZXcgRGF0YWJhc2VTZXQ7Ci0gICAgICAgICAgICBu
YW1lTWFwLT5zZXQobmFtZS50aHJlYWRzYWZlQ29weSgpLCBkYXRhYmFzZVNldCk7CisgICAgICAg
ICAgICBuYW1lTWFwLT5zZXQobmFtZS5pc29sYXRlZENvcHkoKSwgZGF0YWJhc2VTZXQpOwogICAg
ICAgICB9CiAKICAgICAgICAgZGF0YWJhc2VTZXQtPmFkZChkYXRhYmFzZSk7CkBAIC02OTUsNyAr
Njk1LDcgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnNldFF1b3RhKFNlY3VyaXR5TwogICAgIH0K
IAogICAgIC8vIEZJWE1FOiBJcyBpdCByZWFsbHkgT0sgdG8gdXBkYXRlIHRoZSBxdW90YSBpbiBt
ZW1vcnkgaWYgd2UgZmFpbGVkIHRvIHVwZGF0ZSBpdCBvbiBkaXNrPwotICAgIG1fcXVvdGFNYXAt
PnNldChvcmlnaW4tPnRocmVhZHNhZmVDb3B5KCksIHF1b3RhKTsKKyAgICBtX3F1b3RhTWFwLT5z
ZXQob3JpZ2luLT5pc29sYXRlZENvcHkoKSwgcXVvdGEpOwogCiAgICAgaWYgKG1fY2xpZW50KQog
ICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4ob3JpZ2luKTsKQEAgLTg0
MiwxMCArODQyLDEwIEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpyZWNvcmRDcmVhdGluZ0RhdGEK
ICAgICBOYW1lQ291bnRNYXAqIG5hbWVNYXAgPSBtX2JlaW5nQ3JlYXRlZC5nZXQob3JpZ2luKTsK
ICAgICBpZiAoIW5hbWVNYXApIHsKICAgICAgICAgbmFtZU1hcCA9IG5ldyBOYW1lQ291bnRNYXAo
KTsKLSAgICAgICAgbV9iZWluZ0NyZWF0ZWQuc2V0KG9yaWdpbi0+dGhyZWFkc2FmZUNvcHkoKSwg
bmFtZU1hcCk7CisgICAgICAgIG1fYmVpbmdDcmVhdGVkLnNldChvcmlnaW4tPmlzb2xhdGVkQ29w
eSgpLCBuYW1lTWFwKTsKICAgICB9CiAgICAgbG9uZyBjb3VudCA9IG5hbWVNYXAtPmdldChuYW1l
KTsKLSAgICBuYW1lTWFwLT5zZXQobmFtZS50aHJlYWRzYWZlQ29weSgpLCBjb3VudCArIDEpOwor
ICAgIG5hbWVNYXAtPnNldChuYW1lLmlzb2xhdGVkQ29weSgpLCBjb3VudCArIDEpOwogfQogCiB2
b2lkIERhdGFiYXNlVHJhY2tlcjo6ZG9uZUNyZWF0aW5nRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4g
Km9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lKQpAQCAtODg3LDEwICs4ODcsMTAgQEAgdm9pZCBE
YXRhYmFzZVRyYWNrZXI6OnJlY29yZERlbGV0aW5nRGF0YQogICAgIE5hbWVTZXQqIG5hbWVTZXQg
PSBtX2JlaW5nRGVsZXRlZC5nZXQob3JpZ2luKTsKICAgICBpZiAoIW5hbWVTZXQpIHsKICAgICAg
ICAgbmFtZVNldCA9IG5ldyBOYW1lU2V0KCk7Ci0gICAgICAgIG1fYmVpbmdEZWxldGVkLnNldChv
cmlnaW4tPnRocmVhZHNhZmVDb3B5KCksIG5hbWVTZXQpOworICAgICAgICBtX2JlaW5nRGVsZXRl
ZC5zZXQob3JpZ2luLT5pc29sYXRlZENvcHkoKSwgbmFtZVNldCk7CiAgICAgfQogICAgIEFTU0VS
VCghbmFtZVNldC0+Y29udGFpbnMobmFtZSkpOwotICAgIG5hbWVTZXQtPmFkZChuYW1lLnRocmVh
ZHNhZmVDb3B5KCkpOworICAgIG5hbWVTZXQtPmFkZChuYW1lLmlzb2xhdGVkQ29weSgpKTsKIH0K
IAogdm9pZCBEYXRhYmFzZVRyYWNrZXI6OmRvbmVEZWxldGluZ0RhdGFiYXNlKFNlY3VyaXR5T3Jp
Z2luICpvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSkKQEAgLTkzMiw3ICs5MzIsNyBAQCB2b2lk
IERhdGFiYXNlVHJhY2tlcjo6cmVjb3JkRGVsZXRpbmdPcmlnCiB7CiAgICAgQVNTRVJUKCFtX2Rh
dGFiYXNlR3VhcmQudHJ5TG9jaygpKTsKICAgICBBU1NFUlQoIWRlbGV0aW5nT3JpZ2luKG9yaWdp
bikpOwotICAgIG1fb3JpZ2luc0JlaW5nRGVsZXRlZC5hZGQob3JpZ2luLT50aHJlYWRzYWZlQ29w
eSgpKTsKKyAgICBtX29yaWdpbnNCZWluZ0RlbGV0ZWQuYWRkKG9yaWdpbi0+aXNvbGF0ZWRDb3B5
KCkpOwogfQogCiB2b2lkIERhdGFiYXNlVHJhY2tlcjo6ZG9uZURlbGV0aW5nT3JpZ2luKFNlY3Vy
aXR5T3JpZ2luICpvcmlnaW4pCkBAIC0xMDY1LDcgKzEwNjUsNyBAQCB2b2lkIERhdGFiYXNlVHJh
Y2tlcjo6c2NoZWR1bGVOb3RpZnlEYXRhCiB7CiAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG5vdGlm
aWNhdGlvbk11dGV4KCkpOwogCi0gICAgbm90aWZpY2F0aW9uUXVldWUoKS5hcHBlbmQocGFpcjxS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBTdHJpbmc+KG9yaWdpbi0+dGhyZWFkc2FmZUNvcHkoKSwg
bmFtZS5jcm9zc1RocmVhZFN0cmluZygpKSk7CisgICAgbm90aWZpY2F0aW9uUXVldWUoKS5hcHBl
bmQocGFpcjxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBTdHJpbmc+KG9yaWdpbi0+aXNvbGF0ZWRD
b3B5KCksIG5hbWUuaXNvbGF0ZWRDb3B5KCkpKTsKICAgICBzY2hlZHVsZUZvck5vdGlmaWNhdGlv
bigpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL09yaWdpblF1b3RhTWFuYWdl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9PcmlnaW5RdW90YU1h
bmFnZXIuY3BwCShyZXZpc2lvbiA5ODI4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvT3Jp
Z2luUXVvdGFNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCB2b2lk
IE9yaWdpblF1b3RhTWFuYWdlcjo6dHJhY2tPcmlnaW4oUGFzCiAgICAgQVNTRVJUKG1fdXNhZ2VS
ZWNvcmRHdWFyZExvY2tlZCk7CiAgICAgQVNTRVJUKCFtX3VzYWdlTWFwLmNvbnRhaW5zKG9yaWdp
bi5nZXQoKSkpOwogCi0gICAgbV91c2FnZU1hcC5zZXQob3JpZ2luLT50aHJlYWRzYWZlQ29weSgp
LCBuZXcgT3JpZ2luVXNhZ2VSZWNvcmQpOworICAgIG1fdXNhZ2VNYXAuc2V0KG9yaWdpbi0+aXNv
bGF0ZWRDb3B5KCksIG5ldyBPcmlnaW5Vc2FnZVJlY29yZCk7CiB9CiAKIGJvb2wgT3JpZ2luUXVv
dGFNYW5hZ2VyOjp0cmFja3NPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikgY29uc3QKQEAg
LTkxLDcgKzkxLDcgQEAgdm9pZCBPcmlnaW5RdW90YU1hbmFnZXI6OmFkZERhdGFiYXNlKFNlYwog
ICAgIE9yaWdpblVzYWdlUmVjb3JkKiB1c2FnZVJlY29yZCA9IG1fdXNhZ2VNYXAuZ2V0KG9yaWdp
bik7CiAgICAgQVNTRVJUKHVzYWdlUmVjb3JkKTsKIAotICAgIHVzYWdlUmVjb3JkLT5hZGREYXRh
YmFzZShkYXRhYmFzZUlkZW50aWZpZXIudGhyZWFkc2FmZUNvcHkoKSwgZnVsbFBhdGgudGhyZWFk
c2FmZUNvcHkoKSk7CisgICAgdXNhZ2VSZWNvcmQtPmFkZERhdGFiYXNlKGRhdGFiYXNlSWRlbnRp
Zmllci5pc29sYXRlZENvcHkoKSwgZnVsbFBhdGguaXNvbGF0ZWRDb3B5KCkpOwogfQogCiB2b2lk
IE9yaWdpblF1b3RhTWFuYWdlcjo6cmVtb3ZlRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4qIG9yaWdp
biwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUlkZW50aWZpZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1NRTEVycm9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9TUUxFcnJvci5oCShyZXZpc2lvbiA5ODI4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
U1FMRXJyb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8U1FMRXJyb3I+IGNyZWF0ZSh1bnNpZ25lZCBjb2RlLCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTUUxFcnJvcihjb2RlLCBtZXNz
YWdlKSk7IH0KIAogICAgIHVuc2lnbmVkIGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGU7IH0K
LSAgICBTdHJpbmcgbWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVzc2FnZS50aHJlYWRzYWZl
Q29weSgpOyB9CisgICAgU3RyaW5nIG1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX21lc3NhZ2Uu
aXNvbGF0ZWRDb3B5KCk7IH0KIAogICAgIGVudW0gU1FMRXJyb3JDb2RlIHsKICAgICAgICAgVU5L
Tk9XTl9FUlIgPSAwLApAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAgfTsKIAogcHJpdmF0
ZToKLSAgICBTUUxFcnJvcih1bnNpZ25lZCBjb2RlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIDog
bV9jb2RlKGNvZGUpLCBtX21lc3NhZ2UobWVzc2FnZS50aHJlYWRzYWZlQ29weSgpKSB7IH0KKyAg
ICBTUUxFcnJvcih1bnNpZ25lZCBjb2RlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIDogbV9jb2Rl
KGNvZGUpLCBtX21lc3NhZ2UobWVzc2FnZS5pc29sYXRlZENvcHkoKSkgeyB9CiAgICAgdW5zaWdu
ZWQgbV9jb2RlOwogICAgIFN0cmluZyBtX21lc3NhZ2U7CiB9OwpJbmRleDogU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TUUxSZXN1bHRTZXRSb3dMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9TUUxSZXN1bHRTZXRSb3dMaXN0LmgJKHJldmlzaW9uIDk4Mjg5KQorKysg
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxSZXN1bHRTZXRSb3dMaXN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogCiAjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1
ZGUgIlNRTFZhbHVlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1NRTFN0YXRlbWVudC5jcHAJKHJldmlzaW9uIDk4Mjg5KQorKysgU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0
OSw3IEBAIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50PiBTUUxTdGF0ZW1lbnQ6OmMKIH0KIAogU1FM
U3RhdGVtZW50OjpTUUxTdGF0ZW1lbnQoRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBTdHJpbmcm
IHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1lbnRzLCBQYXNzUmVmUHRy
PFNRTFN0YXRlbWVudENhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRF
cnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBpbnQgcGVybWlzc2lvbnMpCi0gICAgOiBtX3N0
YXRlbWVudChzdGF0ZW1lbnQuY3Jvc3NUaHJlYWRTdHJpbmcoKSkKKyAgICA6IG1fc3RhdGVtZW50
KHN0YXRlbWVudC5pc29sYXRlZENvcHkoKSkKICAgICAsIG1fYXJndW1lbnRzKGFyZ3VtZW50cykK
ICAgICAsIG1fc3RhdGVtZW50Q2FsbGJhY2tXcmFwcGVyKGNhbGxiYWNrLCBkYXRhYmFzZS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpKQogICAgICwgbV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNrV3Jh
cHBlcihlcnJvckNhbGxiYWNrLCBkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcAkocmV2aXNp
b24gOTgyODkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgaW5saW5lIFN0b3JhZ2VBcmVhU3luYzo6
U3RvcmFnZUFyZWFTeW5jKAogICAgICwgbV9maW5hbFN5bmNTY2hlZHVsZWQoZmFsc2UpCiAgICAg
LCBtX3N0b3JhZ2VBcmVhKHN0b3JhZ2VBcmVhKQogICAgICwgbV9zeW5jTWFuYWdlcihzdG9yYWdl
U3luY01hbmFnZXIpCi0gICAgLCBtX2RhdGFiYXNlSWRlbnRpZmllcihkYXRhYmFzZUlkZW50aWZp
ZXIuY3Jvc3NUaHJlYWRTdHJpbmcoKSkKKyAgICAsIG1fZGF0YWJhc2VJZGVudGlmaWVyKGRhdGFi
YXNlSWRlbnRpZmllci5pc29sYXRlZENvcHkoKSkKICAgICAsIG1fY2xlYXJJdGVtc1doaWxlU3lu
Y2luZyhmYWxzZSkKICAgICAsIG1fc3luY1NjaGVkdWxlZChmYWxzZSkKICAgICAsIG1fc3luY0lu
UHJvZ3Jlc3MoZmFsc2UpCkBAIC0xODgsNyArMTg4LDcgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6
OnN5bmNUaW1lckZpcmVkKFRpbQogICAgICAgICAgICAgICAgIHBhcnRpYWxTeW5jID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1faXRl
bXNQZW5kaW5nU3luYy5zZXQoY2hhbmdlZF9pdC0+Zmlyc3QuY3Jvc3NUaHJlYWRTdHJpbmcoKSwg
Y2hhbmdlZF9pdC0+c2Vjb25kLmNyb3NzVGhyZWFkU3RyaW5nKCkpOworICAgICAgICAgICAgbV9p
dGVtc1BlbmRpbmdTeW5jLnNldChjaGFuZ2VkX2l0LT5maXJzdC5pc29sYXRlZENvcHkoKSwgY2hh
bmdlZF9pdC0+c2Vjb25kLmlzb2xhdGVkQ29weSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlm
IChwYXJ0aWFsU3luYykgewpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJl
YVN5bmMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVh
U3luYy5oCShyZXZpc2lvbiA5ODI4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFn
ZUFyZWFTeW5jLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJT
UUxpdGVEYXRhYmFzZS5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0hhc2guaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2VNYXAuY3BwCShyZXZpc2lvbiA5ODI4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MSw3ICsxNzEsNyBAQCB2
b2lkIFN0b3JhZ2VNYXA6OmltcG9ydEl0ZW0oY29uc3QgU3RyaW5nCiB7CiAgICAgLy8gQmUgc3Vy
ZSB0byBjb3B5IHRoZSBrZXlzL3ZhbHVlcyBhcyBpdGVtcyBpbXBvcnRlZCBvbiBhIGJhY2tncm91
bmQgdGhyZWFkIGFyZSBkZXN0aW5lZAogICAgIC8vIHRvIGNyb3NzIGEgdGhyZWFkIGJvdW5kYXJ5
Ci0gICAgcGFpcjxIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6aXRlcmF0b3IsIGJvb2w+IHJlc3Vs
dCA9IG1fbWFwLmFkZChrZXkudGhyZWFkc2FmZUNvcHkoKSwgdmFsdWUudGhyZWFkc2FmZUNvcHko
KSk7CisgICAgcGFpcjxIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6aXRlcmF0b3IsIGJvb2w+IHJl
c3VsdCA9IG1fbWFwLmFkZChrZXkuaXNvbGF0ZWRDb3B5KCksIHZhbHVlLmlzb2xhdGVkQ29weSgp
KTsKICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LnNlY29uZCk7ICAvLyBUcnVlIGlm
IHRoZSBrZXkgZGlkbid0IGV4aXN0IHByZXZpb3VzbHkuCiAKICAgICBBU1NFUlQobV9jdXJyZW50
TGVuZ3RoICsga2V5Lmxlbmd0aCgpID49IG1fY3VycmVudExlbmd0aCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAkocmV2aXNpb24g
OTgyODkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBQYXNzUmVmUHRyPFN0b3JhZ2VOYW1l
c3BhY2U+IFN0b3JhZ2VOYW1lCiAKIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpTdG9yYWdlTmFtZXNw
YWNlSW1wbChTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSwgY29uc3QgU3RyaW5nJiBwYXRoLCB1bnNp
Z25lZCBxdW90YSkKICAgICA6IG1fc3RvcmFnZVR5cGUoc3RvcmFnZVR5cGUpCi0gICAgLCBtX3Bh
dGgocGF0aC5jcm9zc1RocmVhZFN0cmluZygpKQorICAgICwgbV9wYXRoKHBhdGguaXNvbGF0ZWRD
b3B5KCkpCiAgICAgLCBtX3N5bmNNYW5hZ2VyKDApCiAgICAgLCBtX3F1b3RhKHF1b3RhKQogICAg
ICwgbV9pc1NodXRkb3duKGZhbHNlKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9y
YWdlU3luY01hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZVN5bmNNYW5hZ2VyLmNwcAkocmV2aXNpb24gOTgyODkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcg
KzQ4LDcgQEAgUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IFN0b3JhZ2VTeQogCiBTdG9y
YWdlU3luY01hbmFnZXI6OlN0b3JhZ2VTeW5jTWFuYWdlcihjb25zdCBTdHJpbmcmIHBhdGgpCiAg
ICAgOiBtX3RocmVhZChMb2NhbFN0b3JhZ2VUaHJlYWQ6OmNyZWF0ZSgpKQotICAgICwgbV9wYXRo
KHBhdGguY3Jvc3NUaHJlYWRTdHJpbmcoKSkKKyAgICAsIG1fcGF0aChwYXRoLmlzb2xhdGVkQ29w
eSgpKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKCFtX3BhdGgu
aXNFbXB0eSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIu
Y3BwCShyZXZpc2lvbiA5ODI4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRy
YWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBAIFN0b3JhZ2VUcmFja2Vy
JiBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigKIH0KIAogU3RvcmFnZVRyYWNrZXI6OlN0b3JhZ2VU
cmFja2VyKGNvbnN0IFN0cmluZyYgc3RvcmFnZVBhdGgpCi0gICAgOiBtX3N0b3JhZ2VEaXJlY3Rv
cnlQYXRoKHN0b3JhZ2VQYXRoLnRocmVhZHNhZmVDb3B5KCkpCisgICAgOiBtX3N0b3JhZ2VEaXJl
Y3RvcnlQYXRoKHN0b3JhZ2VQYXRoLmlzb2xhdGVkQ29weSgpKQogICAgICwgbV9jbGllbnQoMCkK
ICAgICAsIG1fdGhyZWFkKExvY2FsU3RvcmFnZVRocmVhZDo6Y3JlYXRlKCkpCiAgICAgLCBtX2lz
QWN0aXZlKGZhbHNlKQpAQCAtMTY3LDcgKzE2Nyw3IEBAIHZvaWQgU3RvcmFnZVRyYWNrZXI6OnN5
bmNJbXBvcnRPcmlnaW5JZGUKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBNdXRleExv
Y2tlciBsb2NrT3JpZ2lucyhtX29yaWdpblNldEd1YXJkKTsKICAgICAgICAgICAgICAgICB3aGls
ZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNRTFJlc3VsdFJvdykKLSAgICAgICAg
ICAgICAgICAgICAgbV9vcmlnaW5TZXQuYWRkKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApLnRo
cmVhZHNhZmVDb3B5KCkpOworICAgICAgICAgICAgICAgICAgICBtX29yaWdpblNldC5hZGQoc3Rh
dGVtZW50LmdldENvbHVtblRleHQoMCkuaXNvbGF0ZWRDb3B5KCkpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdERvbmUpIHsK
QEAgLTIxNCw3ICsyMTQsNyBAQCB2b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jRmlsZVN5c3RlbUFu
ZFRyCiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9vcmlnaW5TZXRHdWFyZCk7CiAgICAgICAg
IE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9vcmlnaW5TZXQuZW5kKCk7CiAgICAg
ICAgIGZvciAoT3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fb3JpZ2luU2V0LmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIG9yaWdpblNldENvcHkuYWRkKCgqaXQp
LnRocmVhZHNhZmVDb3B5KCkpOworICAgICAgICAgICAgb3JpZ2luU2V0Q29weS5hZGQoKCppdCku
aXNvbGF0ZWRDb3B5KCkpOwogICAgIH0KICAgICAKICAgICAvLyBBZGQgbWlzc2luZyBTdG9yYWdl
VHJhY2tlciByZWNvcmRzLgpAQCAtMjM2LDcgKzIzNiw3IEBAIHZvaWQgU3RvcmFnZVRyYWNrZXI6
OnN5bmNGaWxlU3lzdGVtQW5kVHIKICAgICBPcmlnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIHNldEVu
ZCA9IG9yaWdpblNldENvcHkuZW5kKCk7CiAgICAgZm9yIChPcmlnaW5TZXQ6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gb3JpZ2luU2V0Q29weS5iZWdpbigpOyBpdCAhPSBzZXRFbmQ7ICsraXQpIHsKICAg
ICAgICAgaWYgKCFmb3VuZE9yaWdpbnMuY29udGFpbnMoKml0KSkgewotICAgICAgICAgICAgUmVm
UHRyPFN0cmluZ0ltcGw+IG9yaWdpbklkZW50aWZpZXIgPSAoKml0KS50aHJlYWRzYWZlQ29weSgp
LmltcGwoKTsKKyAgICAgICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBvcmlnaW5JZGVudGlmaWVy
ID0gKCppdCkuaXNvbGF0ZWRDb3B5KCkuaW1wbCgpOwogICAgICAgICAgICAgY2FsbE9uTWFpblRo
cmVhZChkZWxldGVPcmlnaW5Pbk1haW5UaHJlYWQsIG9yaWdpbklkZW50aWZpZXIucmVsZWFzZSgp
LmxlYWtSZWYoKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yNTYsNyArMjU2LDcgQEAgdm9pZCBT
dG9yYWdlVHJhY2tlcjo6c2V0T3JpZ2luRGV0YWlscyhjbwogICAgICAgICBtX29yaWdpblNldC5h
ZGQob3JpZ2luSWRlbnRpZmllcik7CiAgICAgfQogCi0gICAgT3duUHRyPExvY2FsU3RvcmFnZVRh
c2s+IHRhc2sgPSBMb2NhbFN0b3JhZ2VUYXNrOjpjcmVhdGVTZXRPcmlnaW5EZXRhaWxzKG9yaWdp
bklkZW50aWZpZXIudGhyZWFkc2FmZUNvcHkoKSwgZGF0YWJhc2VGaWxlKTsKKyAgICBPd25QdHI8
TG9jYWxTdG9yYWdlVGFzaz4gdGFzayA9IExvY2FsU3RvcmFnZVRhc2s6OmNyZWF0ZVNldE9yaWdp
bkRldGFpbHMob3JpZ2luSWRlbnRpZmllci5pc29sYXRlZENvcHkoKSwgZGF0YWJhc2VGaWxlKTsK
IAogICAgIGlmIChpc01haW5UaHJlYWQoKSkgewogICAgICAgICBBU1NFUlQobV90aHJlYWQpOwpA
QCAtNTAyLDcgKzUwMiw3IEBAIHZvaWQgU3RvcmFnZVRyYWNrZXI6OndpbGxEZWxldGVBbGxPcmln
aW4KIAogICAgIE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9vcmlnaW5TZXQuZW5k
KCk7CiAgICAgZm9yIChPcmlnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9vcmlnaW5TZXQu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBtX29yaWdpbnNCZWluZ0RlbGV0ZWQu
YWRkKCgqaXQpLnRocmVhZHNhZmVDb3B5KCkpOworICAgICAgICBtX29yaWdpbnNCZWluZ0RlbGV0
ZWQuYWRkKCgqaXQpLmlzb2xhdGVkQ29weSgpKTsKIH0KIAogdm9pZCBTdG9yYWdlVHJhY2tlcjo6
d2lsbERlbGV0ZU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdQYXRoU2VnLmgJKHJldmlzaW9uIDk4Mjg5KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BhdGhTZWcuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2RlZmlu
ZSBTVkdQYXRoU2VnX2gKIAogI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9EZWZhdWx0U2hhcmVkV29ya2VyUmVw
b3NpdG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9EZWZhdWx0
U2hhcmVkV29ya2VyUmVwb3NpdG9yeS5jcHAJKHJldmlzaW9uIDk4Mjg5KQorKysgU291cmNlL1dl
YkNvcmUvd29ya2Vycy9EZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY4LDEwICs2OCwxMCBAQCBwdWJsaWM6CiAgICAgS1VSTCB1cmwoKSBjb25zdAog
ICAgIHsKICAgICAgICAgLy8gRG9uJ3QgdXNlIG1fdXJsLmNvcHkoKSBiZWNhdXNlIGl0IGlzbid0
IGEgdGhyZWFkc2FmZSBtZXRob2QuCi0gICAgICAgIHJldHVybiBLVVJMKFBhcnNlZFVSTFN0cmlu
ZywgbV91cmwuc3RyaW5nKCkudGhyZWFkc2FmZUNvcHkoKSk7CisgICAgICAgIHJldHVybiBLVVJM
KFBhcnNlZFVSTFN0cmluZywgbV91cmwuc3RyaW5nKCkuaXNvbGF0ZWRDb3B5KCkpOwogICAgIH0K
IAotICAgIFN0cmluZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lLnRocmVhZHNhZmVDb3B5
KCk7IH0KKyAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZS5pc29sYXRlZENv
cHkoKTsgfQogICAgIGJvb2wgbWF0Y2hlcyhjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+IG9yaWdpbiwgY29uc3QgS1VSTCYgdXJsVG9NYXRjaCkgY29uc3Q7CiAK
ICAgICAvLyBXb3JrZXJMb2FkZXJQcm94eQpAQCAtMTEzLDcgKzExMyw3IEBAIHByaXZhdGU6CiAK
IFNoYXJlZFdvcmtlclByb3h5OjpTaGFyZWRXb3JrZXJQcm94eShjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IEtVUkwmIHVybCwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luKQogICAg
IDogbV9jbG9zaW5nKGZhbHNlKQotICAgICwgbV9uYW1lKG5hbWUuY3Jvc3NUaHJlYWRTdHJpbmco
KSkKKyAgICAsIG1fbmFtZShuYW1lLmlzb2xhdGVkQ29weSgpKQogICAgICwgbV91cmwodXJsLmNv
cHkoKSkKICAgICAsIG1fb3JpZ2luKG9yaWdpbikKIHsKQEAgLTQyMSw3ICs0MjEsNyBAQCBQYXNz
UmVmUHRyPFNoYXJlZFdvcmtlclByb3h5PiBEZWZhdWx0U2hhCiAgICAgLy8gTG9vayBmb3IgYW4g
ZXhpc3Rpbmcgd29ya2VyLCBhbmQgY3JlYXRlIG9uZSBpZiBpdCBkb2Vzbid0IGV4aXN0LgogICAg
IC8vIEl0ZW1zIGluIHRoZSBjYWNoZSBhcmUgZnJlZWQgb24gYW5vdGhlciB0aHJlYWQsIHNvIGRv
IGEgdGhyZWFkc2FmZSBjb3B5IG9mIHRoZSBVUkwgYmVmb3JlIGNyZWF0aW5nIHRoZSBvcmlnaW4s
CiAgICAgLy8gdG8gbWFrZSBzdXJlIG5vIHJlZmVyZW5jZXMgdG8gZXh0ZXJuYWwgc3RyaW5ncyBs
aW5nZXIuCi0gICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4gPSBTZWN1cml0eU9yaWdp
bjo6Y3JlYXRlKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwuc3RyaW5nKCkudGhyZWFkc2FmZUNv
cHkoKSkpOworICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luID0gU2VjdXJpdHlPcmln
aW46OmNyZWF0ZShLVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsLnN0cmluZygpLmlzb2xhdGVkQ29w
eSgpKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJveGllcy5zaXplKCk7IGkr
KykgewogICAgICAgICBpZiAoIW1fcHJveGllc1tpXS0+aXNDbG9zaW5nKCkgJiYgbV9wcm94aWVz
W2ldLT5tYXRjaGVzKG5hbWUsIG9yaWdpbiwgdXJsKSkKICAgICAgICAgICAgIHJldHVybiBtX3By
b3hpZXNbaV07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1NoYXJlZFdvcmtlclRocmVh
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9TaGFyZWRXb3JrZXJU
aHJlYWQuY3BwCShyZXZpc2lvbiA5ODI4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvU2hh
cmVkV29ya2VyVGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBQYXNz
UmVmUHRyPFNoYXJlZFdvcmtlclRocmVhZD4gU2hhcmVkV29yCiAKIFNoYXJlZFdvcmtlclRocmVh
ZDo6U2hhcmVkV29ya2VyVGhyZWFkKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBXb3Jr
ZXJMb2FkZXJQcm94eSYgd29ya2VyTG9hZGVyUHJveHksIFdvcmtlclJlcG9ydGluZ1Byb3h5JiB3
b3JrZXJSZXBvcnRpbmdQcm94eSwgV29ya2VyVGhyZWFkU3RhcnRNb2RlIHN0YXJ0TW9kZSkKICAg
ICA6IFdvcmtlclRocmVhZCh1cmwsIHVzZXJBZ2VudCwgc291cmNlQ29kZSwgd29ya2VyTG9hZGVy
UHJveHksIHdvcmtlclJlcG9ydGluZ1Byb3h5LCBzdGFydE1vZGUpCi0gICAgLCBtX25hbWUobmFt
ZS5jcm9zc1RocmVhZFN0cmluZygpKQorICAgICwgbV9uYW1lKG5hbWUuaXNvbGF0ZWRDb3B5KCkp
CiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJv
eHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTWVzc2Fn
aW5nUHJveHkuY3BwCShyZXZpc2lvbiA5ODI4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyTWVzc2FnaW5nUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOSArMTE4LDkg
QEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIFdvcmtlckV4Y2VwdGlvblRhc2soY29uc3QgU3Ry
aW5nJiBlcnJvck1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVS
TCwgV29ya2VyTWVzc2FnaW5nUHJveHkqIG1lc3NhZ2luZ1Byb3h5KQotICAgICAgICA6IG1fZXJy
b3JNZXNzYWdlKGVycm9yTWVzc2FnZS5jcm9zc1RocmVhZFN0cmluZygpKQorICAgICAgICA6IG1f
ZXJyb3JNZXNzYWdlKGVycm9yTWVzc2FnZS5pc29sYXRlZENvcHkoKSkKICAgICAgICAgLCBtX2xp
bmVOdW1iZXIobGluZU51bWJlcikKLSAgICAgICAgLCBtX3NvdXJjZVVSTChzb3VyY2VVUkwuY3Jv
c3NUaHJlYWRTdHJpbmcoKSkKKyAgICAgICAgLCBtX3NvdXJjZVVSTChzb3VyY2VVUkwuaXNvbGF0
ZWRDb3B5KCkpCiAgICAgICAgICwgbV9tZXNzYWdpbmdQcm94eShtZXNzYWdpbmdQcm94eSkKICAg
ICB7CiAgICAgfQpAQCAtMjIyLDcgKzIyMiw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgUG9z
dE1lc3NhZ2VUb1BhZ2VJbnNwZWN0b3JUYXNrKFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtZXNzYWdp
bmdQcm94eSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogICAgICAgICA6IG1fbWVzc2FnaW5nUHJv
eHkobWVzc2FnaW5nUHJveHkpCi0gICAgICAgICwgbV9tZXNzYWdlKG1lc3NhZ2UuY3Jvc3NUaHJl
YWRTdHJpbmcoKSkKKyAgICAgICAgLCBtX21lc3NhZ2UobWVzc2FnZS5pc29sYXRlZENvcHkoKSkK
ICAgICB7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclJ1bkxv
b3AuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyUnVuTG9v
cC5jcHAJKHJldmlzaW9uIDk4Mjg5KQorKysgU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJS
dW5Mb29wLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDcgKzE4NSw3IEBAIHZvaWQgV29ya2Vy
UnVuTG9vcDo6cG9zdFRhc2soUGFzc093blB0cjwKIAogdm9pZCBXb3JrZXJSdW5Mb29wOjpwb3N0
VGFza0Zvck1vZGUoUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNr
LCBjb25zdCBTdHJpbmcmIG1vZGUpCiB7Ci0gICAgbV9tZXNzYWdlUXVldWUuYXBwZW5kKFRhc2s6
OmNyZWF0ZSh0YXNrLCBtb2RlLmNyb3NzVGhyZWFkU3RyaW5nKCkpKTsKKyAgICBtX21lc3NhZ2VR
dWV1ZS5hcHBlbmQoVGFzazo6Y3JlYXRlKHRhc2ssIG1vZGUuaXNvbGF0ZWRDb3B5KCkpKTsKIH0K
IAogUGFzc093blB0cjxXb3JrZXJSdW5Mb29wOjpUYXNrPiBXb3JrZXJSdW5Mb29wOjpUYXNrOjpj
cmVhdGUoUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrLCBjb25z
dCBTdHJpbmcmIG1vZGUpCkBAIC0yMDIsNyArMjAyLDcgQEAgdm9pZCBXb3JrZXJSdW5Mb29wOjpU
YXNrOjpwZXJmb3JtVGFzayhTYwogCiBXb3JrZXJSdW5Mb29wOjpUYXNrOjpUYXNrKFBhc3NPd25Q
dHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaywgY29uc3QgU3RyaW5nJiBtb2Rl
KQogICAgIDogbV90YXNrKHRhc2spCi0gICAgLCBtX21vZGUobW9kZS5jcm9zc1RocmVhZFN0cmlu
ZygpKQorICAgICwgbV9tb2RlKG1vZGUuaXNvbGF0ZWRDb3B5KCkpCiB7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAJKHJldmlzaW9uIDk4Mjg5KQorKysg
U291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04MCw4ICs4MCw4IEBAIHByaXZhdGU6CiAKIFdvcmtlclRocmVhZFN0YXJ0dXBEYXRhOjpXb3Jr
ZXJUaHJlYWRTdGFydHVwRGF0YShjb25zdCBLVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0cmluZyYg
dXNlckFnZW50LCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUsIFdvcmtlclRocmVhZFN0YXJ0TW9k
ZSBzdGFydE1vZGUpCiAgICAgOiBtX3NjcmlwdFVSTChzY3JpcHRVUkwuY29weSgpKQotICAgICwg
bV91c2VyQWdlbnQodXNlckFnZW50LmNyb3NzVGhyZWFkU3RyaW5nKCkpCi0gICAgLCBtX3NvdXJj
ZUNvZGUoc291cmNlQ29kZS5jcm9zc1RocmVhZFN0cmluZygpKQorICAgICwgbV91c2VyQWdlbnQo
dXNlckFnZW50Lmlzb2xhdGVkQ29weSgpKQorICAgICwgbV9zb3VyY2VDb2RlKHNvdXJjZUNvZGUu
aXNvbGF0ZWRDb3B5KCkpCiAgICAgLCBtX3N0YXJ0TW9kZShzdGFydE1vZGUpCiB7CiB9CkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gOTgyODkpCisrKyBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisy
MDExLTEwLTI0ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAg
UmVtb3ZlZCBTaGFyZWRVQ2hhciBhbmQgdGlnaHRlbmVkIGxhbmd1YWdlIGFyb3VuZCBpdHMgcHJl
dmlvdXMgdXNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzA2OTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAtIFJlbmFtZWQgInRocmVhZFNhZmVDb3B5IiBhbmQgImNyb3NzVGhyZWFkQ29weSIgdG8gImlz
b2xhdGVkQ29weSIgYmVjYXVzZQorICAgICAgICB0aGUgZm9ybWVyIG5hbWVzIGdhdmUgdGhlIGRh
bmdlcm91cyBtaXNpbXByZXNzaW9uIHRoYXQgdGhlIHJlc3VsdGluZyBvYmplY3QKKyAgICAgICAg
d2FzIHRocmVhZC1zYWZlLCB3aGljaCBpcyBub3QgdHJ1ZS4KKworCisgICAgICAgICogc3JjL1dv
cmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuY3BwOgorCiAyMDExLTEwLTI0ICBTaGVyaWZm
IEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCByb2xsaW5nIG91dCByOTgyNjYuCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
b3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmNwcAko
cmV2aXNpb24gOTgyODkpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxl
U3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsNyBA
QCB0ZW1wbGF0ZTw+IHN0cnVjdCBDcm9zc1RocmVhZENvcGllckJhc2U8CiAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgZW50cmllcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgU3Ry
aW5nIG5hbWUgPSBlbnRyaWVzW2ldLm5hbWU7CiAgICAgICAgICAgICBuZXdFbnRyaWVzW2ldLmlz
RGlyZWN0b3J5ID0gZW50cmllc1tpXS5pc0RpcmVjdG9yeTsKLSAgICAgICAgICAgIG5ld0VudHJp
ZXNbaV0ubmFtZSA9IG5hbWUuY3Jvc3NUaHJlYWRTdHJpbmcoKTsKKyAgICAgICAgICAgIG5ld0Vu
dHJpZXNbaV0ubmFtZSA9IG5hbWUuaXNvbGF0ZWRDb3B5KCk7CiAgICAgICAgIH0KICAgICAgICAg
cmV0dXJuIG5ld0VudHJpZXM7CiAgICAgfQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24g
OTgyODkpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNyBAQAorMjAxMS0xMC0yNCAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJlbW92ZWQgU2hhcmVkVUNoYXIgYW5kIHRpZ2h0ZW5lZCBsYW5ndWFn
ZSBhcm91bmQgaXRzIHByZXZpb3VzIHVzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTcwNjk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgLSBSZW5hbWVkICJ0aHJlYWRTYWZlQ29weSIgYW5kICJjcm9zc1Ro
cmVhZENvcHkiIHRvICJpc29sYXRlZENvcHkiIGJlY2F1c2UKKyAgICAgICAgdGhlIGZvcm1lciBu
YW1lcyBnYXZlIHRoZSBkYW5nZXJvdXMgbWlzaW1wcmVzc2lvbiB0aGF0IHRoZSByZXN1bHRpbmcg
b2JqZWN0CisgICAgICAgIHdhcyB0aHJlYWQtc2FmZSwgd2hpY2ggaXMgbm90IHRydWUuCisKKyAg
ICAgICAgKiBTdG9yYWdlL1dlYkRhdGFiYXNlVHJhY2tlckNsaWVudC5tbToKKyAgICAgICAgKERp
ZE1vZGlmeU9yaWdpbkRhdGE6OmRpc3BhdGNoVG9NYWluVGhyZWFkKToKKwogMjAxMS0xMC0yNCAg
TWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWJLaXQgZG9l
c24ndCBidWlsZCB3aXRoIHJlY2VudCBjaGFuZ2VzIHRvIGxpYmRpc3BhdGNoCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYkRhdGFiYXNlVHJhY2tlckNsaWVudC5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYkRhdGFiYXNlVHJhY2tlckNsaWVu
dC5tbQkocmV2aXNpb24gOTgyODkpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYkRh
dGFiYXNlVHJhY2tlckNsaWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBj
bGFzcyBEaWRNb2RpZnlPcmlnaW5EYXRhIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkaXNw
YXRjaFRvTWFpblRocmVhZChXZWJEYXRhYmFzZVRyYWNrZXJDbGllbnQqIGNsaWVudCwgU2VjdXJp
dHlPcmlnaW4qIG9yaWdpbikKICAgICB7Ci0gICAgICAgIERpZE1vZGlmeU9yaWdpbkRhdGEqIGNv
bnRleHQgPSBuZXcgRGlkTW9kaWZ5T3JpZ2luRGF0YShjbGllbnQsIG9yaWdpbi0+dGhyZWFkc2Fm
ZUNvcHkoKSk7CisgICAgICAgIERpZE1vZGlmeU9yaWdpbkRhdGEqIGNvbnRleHQgPSBuZXcgRGlk
TW9kaWZ5T3JpZ2luRGF0YShjbGllbnQsIG9yaWdpbi0+aXNvbGF0ZWRDb3B5KCkpOwogICAgICAg
ICBjYWxsT25NYWluVGhyZWFkKCZEaWRNb2RpZnlPcmlnaW5EYXRhOjpkaXNwYXRjaERpZE1vZGlm
eU9yaWdpbk9uTWFpblRocmVhZCwgY29udGV4dCk7CiAgICAgfQogCg==
</data>
<flag name="review"
          id="110319"
          type_id="1"
          status="+"
          setter="levin"
    />
    <flag name="commit-queue"
          id="110329"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>