<?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>112387</bug_id>
          
          <creation_ts>2013-03-14 16:06:31 -0700</creation_ts>
          <short_desc>NetworkProcess should send vm_copied, mmap&apos;ed memory to WebProcesses when a resource is already in the disk cache</short_desc>
          <delta_ts>2013-03-18 21:18:24 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>buildbot</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>ggaren</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>855537</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-03-14 16:06:31 -0700</bug_when>
    <thetext>NetworkProcess should send vm_copied, mmap&apos;ed memory to WebProcesses when a resource is already in the disk cache

In radar as &lt;rdar://problem/13414153&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855541</commentid>
    <comment_count>1</comment_count>
      <attachid>193197</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-03-14 16:13:49 -0700</bug_when>
    <thetext>Created attachment 193197
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855542</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-14 16:16:59 -0700</bug_when>
    <thetext>Attachment 193197 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceRequest.h&apos;, u&apos;Source/WebCore/platform/network/mac/ResourceRequestMac.mm&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp&apos;, u&apos;Source/WebKit2/NetworkProcess/NetworkResourceLoader.h&apos;, u&apos;Source/WebKit2/NetworkProcess/mac/NetworkProcessMac.mm&apos;, u&apos;Source/WebKit2/NetworkProcess/mac/NetworkResourceLoaderMac.mm&apos;, u&apos;Source/WebKit2/Platform/SharedMemory.h&apos;, u&apos;Source/WebKit2/Platform/mac/SharedMemoryMac.cpp&apos;, u&apos;Source/WebKit2/Shared/ShareableResource.h&apos;, u&apos;Source/WebKit2/WebKit2.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp&apos;, u&apos;Source/WebKit2/WebProcess/mac/WebProcessMac.mm&apos;]&quot; exit_code: 1
Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp:119:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp:120:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp:121:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp:122:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp:123:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp:124:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp:126:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebKit2/Platform/SharedMemory.h:87:  The parameter name &quot;size_t&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 8 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855548</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-03-14 16:24:52 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Attachment 193197 [details] did not pass style-queue:

&gt; Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp:119:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]

Fixed this

&gt; Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp:120:  Use 0 instead of NULL.  [readability/null] [5]
&gt; Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp:121:  Use 0 instead of NULL.  [readability/null] [5]
&gt; Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp:122:  Use 0 instead of NULL.  [readability/null] [5]
&gt; Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp:123:  Use 0 instead of NULL.  [readability/null] [5]
&gt; Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp:124:  Use 0 instead of NULL.  [readability/null] [5]
&gt; Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp:126:  Use 0 instead of NULL.  [readability/null] [5]

That&apos;s preferred CF-style.  Without strong objections I&apos;ll leave it.

&gt; Source/WebKit2/Platform/SharedMemory.h:87:  The parameter name &quot;size_t&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]

Boneheaded mistake.  Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855601</commentid>
    <comment_count>4</comment_count>
      <attachid>193197</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-03-14 17:38:49 -0700</bug_when>
    <thetext>Comment on attachment 193197
Patch v1

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

I only had a brief look at the patch. Would be helpful to talk it thorough in person (mostly for my education).

&gt; Source/WebKit2/NetworkProcess/mac/NetworkProcessMac.mm:45
&gt; +#import &lt;CFNetwork/CFURLCache.h&gt;

Nope.

&gt; Source/WebKit2/NetworkProcess/mac/NetworkResourceLoaderMac.mm:32
&gt; +#include &lt;CFNetwork/CFURLCache.h&gt;

Nope.

&gt; Source/WebKit2/NetworkProcess/mac/NetworkResourceLoaderMac.mm:50
&gt; +    // We have to ask the WebCore::ResourceRequest for its CFURLRequest on the main thread because
&gt; +    // of AtomicString thread safety issues.
&gt; +    __block CFURLRequestRef cfRequest = 0;
&gt; +    dispatch_sync(dispatch_get_main_queue(), ^{
&gt; +        cfRequest = request().cfURLRequest(DoNotUpdateHTTPBody);
&gt; +    });

I don&apos; think that this is needed. CFURLRequest is going to be in ResourceRequest already, so this is just a plain getter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855614</commentid>
    <comment_count>5</comment_count>
      <attachid>193197</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-03-14 17:58:51 -0700</bug_when>
    <thetext>Comment on attachment 193197
Patch v1

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

r=me

&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.h:87
&gt; +    static size_t fileBackedResourceThreshold();

Might be nice to call this &quot;minimum&quot; or &quot;minimumSize&quot; instead of &quot;threshold&quot;.

&gt; Source/WebKit2/NetworkProcess/mac/NetworkResourceLoaderMac.mm:65
&gt; +    // We only care about the vm_copy optimization for resources that should be file backed.

This should really be a FIXME about using an API instead of a guess in future.

&gt; Source/WebKit2/WebProcess/mac/WebProcessMac.mm:-119
&gt; -        [nsurlCache setDiskCapacity:0];

This is no longer necessary / correct. The WebProcess no longer shares the disk cache with the network process, so it is appropriate for the WebProcess to have a zero-sized disk cache, to save SQL memory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855625</commentid>
    <comment_count>6</comment_count>
      <attachid>193197</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-03-14 18:29:57 -0700</bug_when>
    <thetext>Comment on attachment 193197
Patch v1

Attachment 193197 did not pass mac-ews (mac):
Output: http://webkit-commit-queue.appspot.com/results/17112224</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855633</commentid>
    <comment_count>7</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-03-14 19:03:56 -0700</bug_when>
    <thetext>/Volumes/Data/EWS/WebKit/Source/WebKit2/NetworkProcess/mac/NetworkResourceLoaderMac.mm:32:10: fatal error: &apos;CFNetwork/CFURLCache.h&apos; file not found
#include &lt;CFNetwork/CFURLCache.h&gt;
         ^

Looks like ap is the smart one in this crowd.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855645</commentid>
    <comment_count>8</comment_count>
      <attachid>193197</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-03-14 19:19:34 -0700</bug_when>
    <thetext>Comment on attachment 193197
Patch v1

Attachment 193197 did not pass mac-ews (mac):
Output: http://webkit-commit-queue.appspot.com/results/17132166</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855650</commentid>
    <comment_count>9</comment_count>
      <attachid>193197</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-03-14 19:40:18 -0700</bug_when>
    <thetext>Comment on attachment 193197
Patch v1

Attachment 193197 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-commit-queue.appspot.com/results/17126469</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855661</commentid>
    <comment_count>10</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-03-14 20:11:44 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 193197 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=193197&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/mac/NetworkResourceLoaderMac.mm:50
&gt; &gt; +    // We have to ask the WebCore::ResourceRequest for its CFURLRequest on the main thread because
&gt; &gt; +    // of AtomicString thread safety issues.
&gt; &gt; +    __block CFURLRequestRef cfRequest = 0;
&gt; &gt; +    dispatch_sync(dispatch_get_main_queue(), ^{
&gt; &gt; +        cfRequest = request().cfURLRequest(DoNotUpdateHTTPBody);
&gt; &gt; +    });
&gt; 
&gt; I don&apos; think that this is needed. CFURLRequest is going to be in ResourceRequest already, so this is just a plain getter.

Unfortunately I found in testing that getting the cfURLRequest() creates atomic strings on the background loader thread, even though the ResourceRequest is already wrapping an NSURLRequest.

I could add a different mode to ResourceRequest to just fetch the CFURLRequest that exists without &quot;updating platform object&quot; to bypass this, if you think it&apos;d be better.  That would open up the possibility that other people start using that accessor when what *THEY* really want is the traditional accessor that does the platform updating.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855662</commentid>
    <comment_count>11</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-03-14 20:12:50 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; /Volumes/Data/EWS/WebKit/Source/WebKit2/NetworkProcess/mac/NetworkResourceLoaderMac.mm:32:10: fatal error: &apos;CFNetwork/CFURLCache.h&apos; file not found
&gt; #include &lt;CFNetwork/CFURLCache.h&gt;
&gt;          ^
&gt; 
&gt; Looks like ap is the smart one in this crowd.

YUP.

I probably won&apos;t get to fixing that up tonight, but will do over the weekend.

I like your naming suggestion, too.

Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855711</commentid>
    <comment_count>12</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-03-14 22:51:02 -0700</bug_when>
    <thetext>&gt; Unfortunately I found in testing that getting the cfURLRequest() creates atomic strings on the background loader thread, even though the ResourceRequest is already wrapping an NSURLRequest.

I&apos;d like to understand the mechanics of this.

It is not necessarily wrong to create AtomicStrings on a non-main thread. It&apos;s using them on multiple threads that it wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855898</commentid>
    <comment_count>13</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-03-15 04:42:56 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; &gt; Unfortunately I found in testing that getting the cfURLRequest() creates atomic strings on the background loader thread, even though the ResourceRequest is already wrapping an NSURLRequest.
&gt; 
&gt; I&apos;d like to understand the mechanics of this.
&gt; 
&gt; It is not necessarily wrong to create AtomicStrings on a non-main thread. It&apos;s using them on multiple threads that it wrong.

Pretty straight forward:
0 - Be on a background loading thread
1 - Call ResourceHandle::cfURLRequest()
2 - updatePlatformRequest() creates some static atomic strings
3 - Later the load finishes and the thread is destroyed.
4 - WTFThreadData is destroyed which...
5 - Destroys the AtomicStringTable which...
6 - setIsAtomic(false) on each atomic string...
7 - ... Even the static ones....
8 -  ASSERT(!isStatic());

Thread 3 Crashed:
0   com.apple.JavaScriptCore      	0x00000001091938a1 WTF::StringImpl::setIsAtomic(bool) + 97 (StringImpl.h:523)
1   com.apple.JavaScriptCore      	0x0000000109197de9 WTF::AtomicStringTable::destroy(WTF::AtomicStringTable*) + 105 (AtomicString.cpp:103)
2   com.apple.JavaScriptCore      	0x00000001091ea470 WTF::WTFThreadData::~WTFThreadData() + 48 (WTFThreadData.cpp:54)
3   com.apple.JavaScriptCore      	0x00000001091ea435 WTF::WTFThreadData::~WTFThreadData() + 21 (WTFThreadData.cpp:56)
4   com.apple.JavaScriptCore      	0x0000000108cadb87 WTF::ThreadSpecific&lt;WTF::WTFThreadData&gt;::destroy(void*) + 55 (ThreadSpecific.h:231)

Now, we could definitely also solve this by adding a new getExistingCFURLRequestOrNull() accessor instead of doing the thread hopping.  After half a night&apos;s sleep, I think with a scary enough name like that people wouldn&apos;t ever feel inclined to use it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>856011</commentid>
    <comment_count>14</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-03-15 08:42:38 -0700</bug_when>
    <thetext>&gt; 1 - Call ResourceHandle::cfURLRequest()
&gt; 2 - updatePlatformRequest() creates some static atomic strings

Why does it do this? We are handling a response, so request&apos;s platform data should have already been created. It should not be needing an update.

I do not think that adding thread hopping per function calls is the right way forward. We either need to make the work ResourceHandle does thread safe, or at least to minimize thread hopping by doing it once, immediately on receiving a delegate call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857190</commentid>
    <comment_count>15</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-03-18 09:23:25 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; &gt; 1 - Call ResourceHandle::cfURLRequest()
&gt; &gt; 2 - updatePlatformRequest() creates some static atomic strings
&gt; 
&gt; Why does it do this? We are handling a response, so request&apos;s platform data should have already been created. It should not be needing an update.
&gt; 
&gt; I do not think that adding thread hopping per function calls is the right way forward. We either need to make the work ResourceHandle does thread safe, or at least to minimize thread hopping by doing it once, immediately on receiving a delegate call.

Needing this was a cross between something boneheaded I was doing before asking for the cfurlresponse.  It&apos;s being removed before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857209</commentid>
    <comment_count>16</comment_count>
      <attachid>193583</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-03-18 09:44:55 -0700</bug_when>
    <thetext>Created attachment 193583
Patch for landing (EWS check)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857212</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-18 09:47:22 -0700</bug_when>
    <thetext>Attachment 193583 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceRequest.h&apos;, u&apos;Source/WebCore/platform/network/mac/ResourceRequestMac.mm&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp&apos;, u&apos;Source/WebKit2/NetworkProcess/NetworkResourceLoader.h&apos;, u&apos;Source/WebKit2/NetworkProcess/mac/NetworkProcessMac.mm&apos;, u&apos;Source/WebKit2/NetworkProcess/mac/NetworkResourceLoaderMac.mm&apos;, u&apos;Source/WebKit2/Platform/SharedMemory.h&apos;, u&apos;Source/WebKit2/Platform/mac/SharedMemoryMac.cpp&apos;, u&apos;Source/WebKit2/Shared/ShareableResource.h&apos;, u&apos;Source/WebKit2/WebKit2.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp&apos;]&quot; exit_code: 1
Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp:120:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp:121:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp:122:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp:123:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp:124:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp:126:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 6 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857327</commentid>
    <comment_count>18</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-03-18 11:07:45 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/146088</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857909</commentid>
    <comment_count>19</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2013-03-18 21:18:24 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; http://trac.webkit.org/changeset/146088

iOS build fix in r146177:  http://trac.webkit.org/r146177</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193197</attachid>
            <date>2013-03-14 16:13:49 -0700</date>
            <delta_ts>2013-03-18 09:44:55 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>25046</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjYjk1MmJhLi5jNWNkZWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAg
QEAKKzIwMTMtMDMtMTQgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIE5ldHdvcmtQcm9jZXNzIHNob3VsZCBzZW5kIHZtX2NvcGllZCwgbW1hcCdlZCBtZW1vcnkg
dG8gV2ViUHJvY2Vzc2VzIHdoZW4gYSAKKyAgICAgICAgcmVzb3VyY2UgaXMgYWxyZWFkeSBpbiB0
aGUgZGlzayBjYWNoZS4KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNDE0MTUzPiBhbmQgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjM4NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoTm8gY2hh
bmdlIGluIGJlaGF2aW9yKS4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorCisgICAgICAg
IEFkZCBhIENGVVJMUmVxdWVzdFJlZiBhY2Nlc3NvciBldmVuIGluIHRoZSBtYWMgTlNVUkwtYmFz
ZWQgbG9hZGVyOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0
Lmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0TWFjLm1t
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0OjpjZlVSTFJlcXVlc3QpOgorCiAy
MDEzLTAzLTE0ICBEYXZpZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBJbmRleGVkREI6IEhpc3RvZ3JhbSBsZXZlbGRiIG9wZW4gZXJyb3JzLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4
cC5pbgppbmRleCA1MjdkMzk1Li44MjIzNDY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgpAQCAtMTMz
OSw2ICsxMzM5LDcgQEAgX19aTks3V2ViQ29yZTE1UHJvdGVjdGlvblNwYWNlNGhvc3RFdgogX19a
Tks3V2ViQ29yZTE1UHJvdGVjdGlvblNwYWNlNHBvcnRFdgogX19aTks3V2ViQ29yZTE1UHJvdGVj
dGlvblNwYWNlNXJlYWxtRXYKIF9fWk5LN1dlYkNvcmUxNVByb3RlY3Rpb25TcGFjZTdpc1Byb3h5
RXYKK19fWk5LN1dlYkNvcmUxNVJlc291cmNlUmVxdWVzdDEyY2ZVUkxSZXF1ZXN0RU5TXzIwSFRU
UEJvZHlVcGRhdGVQb2xpY3lFCiBfX1pOSzdXZWJDb3JlMTVSZXNvdXJjZVJlcXVlc3QxMm5zVVJM
UmVxdWVzdEVOU18yMEhUVFBCb2R5VXBkYXRlUG9saWN5RQogX19aTks3V2ViQ29yZTE1VmlzaWJs
ZVBvc2l0aW9uMTRjaGFyYWN0ZXJBZnRlckV2CiBfX1pOSzdXZWJDb3JlMTVWaXNpYmxlUG9zaXRp
b24xNGxvY2FsQ2FyZXRSZWN0RVJQTlNfMTJSZW5kZXJPYmplY3RFCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3QuaAppbmRleCAzNGVk
MmYyLi42MzQ5Y2U4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2NmL1Jlc291cmNlUmVxdWVzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY2YvUmVzb3VyY2VSZXF1ZXN0LmgKQEAgLTI4LDE1ICsyOCwxMiBAQAogI2RlZmluZSBSZXNv
dXJjZVJlcXVlc3RfaAogCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0QmFzZS5oIgotCiAjaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2lmIFVTRShDRk5FVFdPUkspCi10eXBlZGVmIGNvbnN0
IHN0cnVjdCBfQ0ZVUkxSZXF1ZXN0KiBDRlVSTFJlcXVlc3RSZWY7Ci0jZW5kaWYKIAogT0JKQ19D
TEFTUyBOU1VSTFJlcXVlc3Q7CiAKICNpZiBQTEFURk9STShNQUMpIHx8IFVTRShDRk5FVFdPUksp
Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCBfQ0ZVUkxSZXF1ZXN0KiBDRlVSTFJlcXVlc3RSZWY7CiB0
eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NGVVJMU3RvcmFnZVNlc3Npb24qIENGVVJMU3RvcmFnZVNl
c3Npb25SZWY7CiAjZW5kaWYKIApAQCAtNzksOCArNzYsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgICAgICB1cGRhdGVOU1VSTFJlcXVlc3QoKTsKICNlbmRpZgogICAgICAgICB9Ci0K
LSAgICAgICAgQ0ZVUkxSZXF1ZXN0UmVmIGNmVVJMUmVxdWVzdChIVFRQQm9keVVwZGF0ZVBvbGlj
eSkgY29uc3Q7CiAjZWxzZQogICAgICAgICBSZXNvdXJjZVJlcXVlc3QoTlNVUkxSZXF1ZXN0ICpu
c1JlcXVlc3QpCiAgICAgICAgICAgICA6IFJlc291cmNlUmVxdWVzdEJhc2UoKQpAQCAtMTAzLDYg
Kzk4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAKICNpZiBQTEFURk9STShNQUMp
IHx8IFVTRShDRk5FVFdPUkspCisgICAgICAgIENGVVJMUmVxdWVzdFJlZiBjZlVSTFJlcXVlc3Qo
SFRUUEJvZHlVcGRhdGVQb2xpY3kpIGNvbnN0OwogICAgICAgICB2b2lkIHNldFN0b3JhZ2VTZXNz
aW9uKENGVVJMU3RvcmFnZVNlc3Npb25SZWYpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVxdWVzdE1hYy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVxdWVzdE1hYy5tbQpp
bmRleCBhMjljYTBlLi4zOTVjMmNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL21hYy9SZXNvdXJjZVJlcXVlc3RNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0TWFjLm1tCkBAIC01NSw2ICs1NSwx
MSBAQCBOU1VSTFJlcXVlc3QgKlJlc291cmNlUmVxdWVzdDo6bnNVUkxSZXF1ZXN0KEhUVFBCb2R5
VXBkYXRlUG9saWN5IGJvZHlQb2xpY3kpIGNvbgogICAgIHJldHVybiBbW21fbnNSZXF1ZXN0Lmdl
dCgpIHJldGFpbl0gYXV0b3JlbGVhc2VdOwogfQogCitDRlVSTFJlcXVlc3RSZWYgUmVzb3VyY2VS
ZXF1ZXN0OjpjZlVSTFJlcXVlc3QoSFRUUEJvZHlVcGRhdGVQb2xpY3kgYm9keVBvbGljeSkgY29u
c3QKK3sKKyAgICByZXR1cm4gW25zVVJMUmVxdWVzdChib2R5UG9saWN5KSBfQ0ZVUkxSZXF1ZXN0
XTsKK30KKwogI2lmIFVTRShDRk5FVFdPUkspCiAKIFJlc291cmNlUmVxdWVzdDo6UmVzb3VyY2VS
ZXF1ZXN0KE5TVVJMUmVxdWVzdCAqbnNSZXF1ZXN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDIyMTQwZTkuLmE5
YzZlNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NyBAQAorMjAxMy0wMy0xNCAgQnJhZHkgRWlk
c29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgTmV0d29ya1Byb2Nlc3Mgc2hvdWxk
IHNlbmQgdm1fY29waWVkLCBtbWFwJ2VkIG1lbW9yeSB0byBXZWJQcm9jZXNzZXMgd2hlbiBhIAor
ICAgICAgICByZXNvdXJjZSBpcyBhbHJlYWR5IGluIHRoZSBkaXNrIGNhY2hlLgorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMTM0MTQxNTM+IGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTEyMzg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnNlbmRBYm9ydGluZ09uRmFp
bHVyZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2
ZVJlc3BvbnNlKTogQWZ0ZXIgbm90aWZ5aW5nIGFib3V0IHRoZSByZXNwb25zZSwKKyAgICAgICAg
ICBjYWxsIHBsYXRmb3JtRGlkUmVjZWl2ZVJlc3BvbnNlLgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oOgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
bWFjL05ldHdvcmtSZXNvdXJjZUxvYWRlck1hYy5tbTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6cGxhdGZvcm1EaWRSZWNlaXZlUmVzcG9uc2UpOiBBdHRl
bXB0IHRvIHB1bGwgYSBmaWxlc3lzdGVtCisgICAgICAgICAgbW1hcCdlZCBidWZmZXIgZnJvbSB0
aGUgQ0ZOZXR3b3JrIGNhY2hlIGFuZCAtIGlmIGl0IGV4aXN0cyAtIGFib3J0IHRoZSB0cmFkaXRp
b25hbCBsb2FkCisgICAgICAgICAgYW5kIHNlbmQgdGhhdCB0byB0aGUgV2ViUHJvY2VzcyBpbnN0
ZWFkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmZpbGVCYWNrZWRS
ZXNvdXJjZVRocmVzaG9sZCk6IEZvciBub3csIHVzZSB0aGUgVk0gcGFnZSBzaXplLgorCisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtQcm9jZXNzTWFjLm1tOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3Mp
OiBTZXQgdGhlIHRocmVzaG9sZCBmb3Igd2hhdAorICAgICAgICAgIHNob3VsZCBiZSBiYWNrZWQg
YnkgYSBmaWxlIG9uIGRpc2sgaW5zdGVhZCBvZiBzdG9yZWQgaW4gdGhlIGRhdGFiYXNlLgorCisg
ICAgICAgIENoYW5nZSBTaGFyZWRNZW1vcnkgdG8gZG8gYSB2bV9jb3B5IGlmIGEgcHJldmlvdXNs
eSBleGlzdGluZyBidWZmZXIgaXMgYmVpbmcgcGFzc2VkIGluOgorICAgICAgICAqIFBsYXRmb3Jt
L1NoYXJlZE1lbW9yeS5oOgorICAgICAgICAqIFBsYXRmb3JtL21hYy9TaGFyZWRNZW1vcnlNYWMu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OlNoYXJlZE1lbW9yeTo6Y3JlYXRlV2l0aFZNQ29weSk6CisKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViS2l0Ojpz
aGFyZWFibGVSZXNvdXJjZURlYWxsb2NhdGUpOgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVTaGFy
ZWFibGVSZXNvdXJjZURlYWxsb2NhdG9yKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VM
b2FkZXI6OmRpZFJlY2VpdmVSZXNvdXJjZSk6IENyZWF0ZSBhIHNwZWNpYWwgQ0ZEYXRhUmVmIHdo
b3NlIGJ1ZmZlciBpcworICAgICAgICAgIGJhY2tlZCBieSBhIFNoYXJlYWJsZVJlc291cmNlIHRv
IHNlbmQgdG8gdGhlIFJlc291cmNlTG9hZGVyIGluIG9uZSBjaHVuay4KKworICAgICAgICAqIFdl
YlByb2Nlc3MvbWFjL1dlYlByb2Nlc3NNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3M6OnBsYXRmb3JtU2V0Q2FjaGVNb2RlbCk6IERvbid0IGRpc2FibGUgdGhlIGdsb2JhbCwgc2hh
cmVkIGRpc2sKKyAgICAgICAgICBjYWNoZSBhcyB0aGF0IGFsc28gYWZmZWN0ZWQgdGhlIE5ldHdv
cmtQcm9jZXNzLgorCisgICAgICAgICogU2hhcmVkL1NoYXJlYWJsZVJlc291cmNlLmg6IEZpeCBz
b21lIGNvbW1lbnRzLgorCisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorCiAyMDEzLTAzLTE0ICBBYmhpc2hlayBBcnlhICA8aW5mZXJub0BjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmVwbGFjZSBzdGF0aWNfY2FzdHMgd2l0aCB0byogaGVscGVyIGZ1bmN0aW9u
cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNv
dXJjZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVz
b3VyY2VMb2FkZXIuY3BwCmluZGV4IGVhYjJlOWUuLmZiZTlhZTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcApA
QCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIk5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJz
LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8uaCIKICNpbmNsdWRlICJSZW1v
dGVOZXR3b3JraW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIlNoYXJlYWJsZVJlc291cmNlLmgiCiAj
aW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJz
LmgiCiAjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkZXJNZXNzYWdlcy5oIgpAQCAtMTY3LDEwICsx
NjgsMTIgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3NEaWRDbG9zZSgpCiAgICAgY2xlYW51cCgpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBVPiB2
b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2VuZEFib3J0aW5nT25GYWlsdXJlKGNvbnN0IFUm
IG1lc3NhZ2UpCit0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBib29sIE5ldHdvcmtSZXNvdXJjZUxvYWRl
cjo6c2VuZEFib3J0aW5nT25GYWlsdXJlKGNvbnN0IFUmIG1lc3NhZ2UpCiB7Ci0gICAgaWYgKCFz
ZW5kKG1lc3NhZ2UpKQorICAgIGJvb2wgcmVzdWx0ID0gc2VuZChtZXNzYWdlKTsKKyAgICBpZiAo
IXJlc3VsdCkKICAgICAgICAgYWJvcnRJblByb2dyZXNzTG9hZCgpOworICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFU+IGJvb2wgTmV0d29ya1Jlc291cmNlTG9hZGVy
OjpzZW5kU3luY0Fib3J0aW5nT25GYWlsdXJlKGNvbnN0IFUmIG1lc3NhZ2UsIGNvbnN0IHR5cGVu
YW1lIFU6OlJlcGx5JiByZXBseSkKQEAgLTE5Niw3ICsxOTksMTEgQEAgdm9pZCBOZXR3b3JrUmVz
b3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJl
c291cmNlUmUKICAgICAvLyBGSVhNRSAoTmV0d29ya1Byb2Nlc3MpOiBDYWNoZSB0aGUgcmVzcG9u
c2UuCiAgICAgaWYgKEZvcm1EYXRhKiBmb3JtRGF0YSA9IHJlcXVlc3QoKS5odHRwQm9keSgpKQog
ICAgICAgICBmb3JtRGF0YS0+cmVtb3ZlR2VuZXJhdGVkRmlsZXNJZk5lZWRlZCgpOwotICAgIHNl
bmRBYm9ydGluZ09uRmFpbHVyZShNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OkRpZFJlY2Vp
dmVSZXNwb25zZVdpdGhDZXJ0aWZpY2F0ZUluZm8ocmVzcG9uc2UsIFBsYXRmb3JtQ2VydGlmaWNh
dGVJbmZvKHJlc3BvbnNlKSkpOworCisgICAgaWYgKCFzZW5kQWJvcnRpbmdPbkZhaWx1cmUoTWVz
c2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRSZWNlaXZlUmVzcG9uc2VXaXRoQ2VydGlmaWNh
dGVJbmZvKHJlc3BvbnNlLCBQbGF0Zm9ybUNlcnRpZmljYXRlSW5mbyhyZXNwb25zZSkpKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgcGxhdGZvcm1EaWRSZWNlaXZlUmVzcG9uc2UocmVzcG9uc2Up
OwogfQogCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEoUmVzb3Vy
Y2VIYW5kbGUqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoLCBpbnQgZW5jb2RlZERhdGFM
ZW5ndGgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UmVzb3VyY2VMb2FkZXIuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtS
ZXNvdXJjZUxvYWRlci5oCmluZGV4IDY1OTBiMGEuLjIwZDRlMzEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCkBAIC04
NCw2ICs4NCw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKQorICAgIHN0
YXRpYyBzaXplX3QgZmlsZUJhY2tlZFJlc291cmNlVGhyZXNob2xkKCk7CiAjaWYgVVNFKENGTkVU
V09SSykKICAgICB2aXJ0dWFsIENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYgd2lsbENhY2hlUmVzcG9u
c2UoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBDRkNhY2hlZFVSTFJlc3BvbnNlUmVmKSBPVkVS
UklERTsKICNlbHNlCkBAIC05OCwxMyArOTksMTUgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNjaGVk
dWxlQ2xlYW51cE9uTWFpblRocmVhZCgpOwogICAgIHN0YXRpYyB2b2lkIHBlcmZvcm1DbGVhbnVw
cyh2b2lkKik7CiAgICAgdm9pZCBjbGVhbnVwKCk7CisgICAgCisgICAgdm9pZCBwbGF0Zm9ybURp
ZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7CiAKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiB2b2lkIHNlbmRBYm9ydGluZ09uRmFpbHVyZShjb25zdCBV
JiBtZXNzYWdlKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBib29sIHNlbmRBYm9ydGluZ09u
RmFpbHVyZShjb25zdCBVJiBtZXNzYWdlKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBib29s
IHNlbmRTeW5jQWJvcnRpbmdPbkZhaWx1cmUoY29uc3QgVSYgbWVzc2FnZSwgY29uc3QgdHlwZW5h
bWUgVTo6UmVwbHkmIHJlcGx5KTsKICAgICB2b2lkIGFib3J0SW5Qcm9ncmVzc0xvYWQoKTsKIAog
ICAgIFJlZlB0cjxSZW1vdGVOZXR3b3JraW5nQ29udGV4dD4gbV9uZXR3b3JraW5nQ29udGV4dDsK
LSAgICBSZWZQdHI8V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU+IG1faGFuZGxlOyAgICAKKyAgICBS
ZWZQdHI8V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU+IG1faGFuZGxlOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9t
YWMvTmV0d29ya1Byb2Nlc3NNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9t
YWMvTmV0d29ya1Byb2Nlc3NNYWMubW0KaW5kZXggODhlODlhOC4uZTljNzg4NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtQcm9jZXNzTWFjLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrUHJvY2Vzc01h
Yy5tbQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCiAKICNp
bXBvcnQgIk5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCisjaW1wb3J0ICJOZXR3
b3JrUmVzb3VyY2VMb2FkZXIuaCIKICNpbXBvcnQgIlBsYXRmb3JtQ2VydGlmaWNhdGVJbmZvLmgi
CiAjaW1wb3J0ICJTYW5kYm94RXh0ZW5zaW9uLmgiCiAjaW1wb3J0ICJTYW5kYm94SW5pdGlhbGl6
YXRpb25QYXJhbWV0ZXJzLmgiCkBAIC00MSwxMSArNDIsMTYgQEAKICNpbXBvcnQgPG1hY2gvbWFj
aF9lcnJvci5oPgogI2ltcG9ydCA8c3lzZXhpdHMuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorI2ltcG9ydCA8Q0ZOZXR3b3JrL0NGVVJMQ2FjaGUuaD4KIAogI2lmIFVTRShTRUNV
UklUWV9GUkFNRVdPUkspCiAjaW1wb3J0ICJTZWNJdGVtU2hpbS5oIgogI2VuZGlmCiAKKyNpZiBf
X01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKK2V4dGVybiAiQyIgdm9pZCBf
Q0ZVUkxDYWNoZVNldE1pblNpemVGb3JWTUNhY2hlZFJlc291cmNlKENGVVJMQ2FjaGVSZWYsIENG
SW5kZXgpOworI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBAaW50ZXJmYWNl
IE5TVVJMUmVxdWVzdCAoRGV0YWlscykgCkBAIC0xMjAsNiArMTI2LDE0IEBAIHZvaWQgTmV0d29y
a1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKGNvbnN0IE5ldHdvcmtQ
cm9jZXNzQ3JlYXRpCiAgICAgaWYgKCFwYXJhbWV0ZXJzLmh0dHBQcm94eS5pc051bGwoKSB8fCAh
cGFyYW1ldGVycy5odHRwc1Byb3h5LmlzTnVsbCgpKQogICAgICAgICBvdmVycmlkZVN5c3RlbVBy
b3hpZXMocGFyYW1ldGVycy5odHRwUHJveHksIHBhcmFtZXRlcnMuaHR0cHNQcm94eSk7CiAjZW5k
aWYKKworI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAorICAgIFJl
dGFpblB0cjxDRlVSTENhY2hlUmVmPiBjYWNoZSA9IGFkb3B0Q0YoQ0ZVUkxDYWNoZUNvcHlTaGFy
ZWRVUkxDYWNoZSgpKTsKKyAgICBpZiAoIWNhY2hlKQorICAgICAgICByZXR1cm47CisKKyAgICBf
Q0ZVUkxDYWNoZVNldE1pblNpemVGb3JWTUNhY2hlZFJlc291cmNlKGNhY2hlLmdldCgpLCBOZXR3
b3JrUmVzb3VyY2VMb2FkZXI6OmZpbGVCYWNrZWRSZXNvdXJjZVRocmVzaG9sZCgpKTsKKyNlbmRp
ZgogfQogCiBzdGF0aWMgdWludDY0X3QgbWVtb3J5U2l6ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya1Jlc291cmNlTG9hZGVyTWFjLm1tIGIv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtSZXNvdXJjZUxvYWRlck1h
Yy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2M5M2Q3Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtSZXNv
dXJjZUxvYWRlck1hYy5tbQpAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAi
Y29uZmlnLmgiCisjaW1wb3J0ICJOZXR3b3JrUmVzb3VyY2VMb2FkZXIuaCIKKworI2luY2x1ZGUg
IlNoYXJlYWJsZVJlc291cmNlLmgiCisjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCisjaW5jbHVk
ZSAiV2ViUmVzb3VyY2VMb2FkZXJNZXNzYWdlcy5oIgorI2luY2x1ZGUgPENGTmV0d29yay9DRlVS
TENhY2hlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0
IHsKKwordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnBsYXRmb3JtRGlkUmVjZWl2ZVJlc3Bv
bnNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKQoreworICAgIC8vIENoZWNrIHRo
ZSBjYWNoZSB0byBzZWUgaWYgd2UgY2FuIHZtX2NvcHkgYSBmaWxlc3lzdGVtLWJhY2tlZCByZXNv
dXJjZSBidWZmZXIuICAgCisgICAgUmV0YWluUHRyPENGVVJMQ2FjaGVSZWY+IGNhY2hlID0gYWRv
cHRDRihDRlVSTENhY2hlQ29weVNoYXJlZFVSTENhY2hlKCkpOworICAgIGlmICghY2FjaGUpCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIGhhdmUgdG8gYXNrIHRoZSBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QgZm9yIGl0cyBDRlVSTFJlcXVlc3Qgb24gdGhlIG1haW4gdGhyZWFkIGJlY2F1
c2UKKyAgICAvLyBvZiBBdG9taWNTdHJpbmcgdGhyZWFkIHNhZmV0eSBpc3N1ZXMuCisgICAgX19i
bG9jayBDRlVSTFJlcXVlc3RSZWYgY2ZSZXF1ZXN0ID0gMDsKKyAgICBkaXNwYXRjaF9zeW5jKGRp
c3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIGNmUmVxdWVzdCA9IHJlcXVlc3Qo
KS5jZlVSTFJlcXVlc3QoRG9Ob3RVcGRhdGVIVFRQQm9keSk7CisgICAgfSk7CisgICAgICAgIAor
ICAgIFJldGFpblB0cjxDRkNhY2hlZFVSTFJlc3BvbnNlUmVmPiBjYWNoZWRSZXNwb25zZSA9IGFk
b3B0Q0YoQ0ZVUkxDYWNoZUNvcHlSZXNwb25zZUZvclJlcXVlc3QoY2FjaGUuZ2V0KCksIGNmUmVx
dWVzdCkpOworICAgIGlmICghY2FjaGVkUmVzcG9uc2UpCisgICAgICAgIHJldHVybjsKKworICAg
IFJldGFpblB0cjxDRkFycmF5UmVmPiBhcnJheSA9IGFkb3B0Q0YoQ0ZDYWNoZWRVUkxSZXNwb25z
ZUNvcHlSZWNlaXZlckRhdGFBcnJheShjYWNoZWRSZXNwb25zZS5nZXQoKSkpOworICAgIGlmICgh
YXJyYXkgfHwgQ0ZBcnJheUdldENvdW50KGFycmF5LmdldCgpKSAhPSAxKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgQ0ZUeXBlUmVmIHZhbHVlID0gQ0ZBcnJheUdldFZhbHVlQXRJbmRleChh
cnJheS5nZXQoKSwgMCk7CisgICAgaWYgKENGR2V0VHlwZUlEKHZhbHVlKSAhPSBDRkRhdGFHZXRU
eXBlSUQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIENGRGF0YVJlZiBkYXRhID0gc3RhdGljX2Nh
c3Q8Q0ZEYXRhUmVmPih2YWx1ZSk7CisKKyAgICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgdGhlIHZt
X2NvcHkgb3B0aW1pemF0aW9uIGZvciByZXNvdXJjZXMgdGhhdCBzaG91bGQgYmUgZmlsZSBiYWNr
ZWQuCisgICAgaWYgKENGRGF0YUdldExlbmd0aChkYXRhKSA8IChDRkluZGV4KWZpbGVCYWNrZWRS
ZXNvdXJjZVRocmVzaG9sZCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgUmVmUHRyPFNo
YXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5OjpjcmVhdGVXaXRoVk1Db3B5
KCh2b2lkKilDRkRhdGFHZXRCeXRlUHRyKGRhdGEpLCBDRkRhdGFHZXRMZW5ndGgoZGF0YSkpOwor
ICAgIGlmICghc2hhcmVkTWVtb3J5KSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNy
ZWF0ZSBWTUNvcGllZCBzaGFyZWQgbWVtb3J5IGZvciBjYWNoZWQgcmVzb3VyY2UuICBXZSdsbCBs
ZXQgaXQgbG9hZCBub3JtYWxseS4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAKKyAgICBz
aXplX3Qgc2l6ZSA9IHNoYXJlZE1lbW9yeS0+c2l6ZSgpOworICAgIFJlZlB0cjxTaGFyZWFibGVS
ZXNvdXJjZT4gcmVzb3VyY2UgPSBTaGFyZWFibGVSZXNvdXJjZTo6Y3JlYXRlKHNoYXJlZE1lbW9y
eS5yZWxlYXNlKCksIDAsIHNpemUpOworICAgIFNoYXJlYWJsZVJlc291cmNlOjpIYW5kbGUgaGFu
ZGxlOworICAgIGlmICghcmVzb3VyY2UtPmNyZWF0ZUhhbmRsZShoYW5kbGUpKSB7CisgICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBTaGFyZWFibGVSZXNvdXJjZSBoYW5kbGUgdG8g
c2VuZCB0byB0aGUgV2ViUHJvY2VzcyBmb3IgcmVzb3VyY2UuICBXZSdsbCBsZXQgaXQgbG9hZCBu
b3JtYWxseS4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFNpbmNlIHdlJ3Jl
IGRlbGl2ZXJpbmcgdGhpcyByZXNvdXJjZSBieSBvdXJzZWx2ZXMgYWxsIGF0IG9uY2UsIHdlJ2xs
IGFib3J0IHRoZSByZXNvdXJjZSBoYW5kbGUgc2luY2Ugd2UgZG9uJ3QgbmVlZCBhbnltb3JlIGNh
bGxiYWNrcyBmcm9tIENGTmV0d29yay4KKyAgICBhYm9ydEluUHJvZ3Jlc3NMb2FkKCk7CisgICAg
CisgICAgc2VuZChNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OkRpZFJlY2VpdmVSZXNvdXJj
ZShoYW5kbGUsIGN1cnJlbnRUaW1lKCkpKTsKK30KKworc2l6ZV90IE5ldHdvcmtSZXNvdXJjZUxv
YWRlcjo6ZmlsZUJhY2tlZFJlc291cmNlVGhyZXNob2xkKCkKK3sKKyAgICByZXR1cm4gU2hhcmVk
TWVtb3J5OjpzeXN0ZW1QYWdlU2l6ZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oIGIvU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgKaW5kZXggYTY3ZGU4ZC4uZGRjYTJmNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgKKysrIGIv
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgKQEAgLTgxLDcgKzgxLDExIEBA
IHB1YmxpYzoKIAogICAgIC8vIENyZWF0ZSBhIHNoYXJlZCBtZW1vcnkgb2JqZWN0IGZyb20gdGhl
IGdpdmVuIGhhbmRsZSBhbmQgdGhlIHJlcXVlc3RlZCBwcm90ZWN0aW9uLiBXaWxsIHJldHVybiAw
IG9uIGZhaWx1cmUuCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkTWVtb3J5PiBjcmVhdGUo
Y29uc3QgSGFuZGxlJiwgUHJvdGVjdGlvbik7Ci0gICAgCisKKyAgICAvLyBDcmVhdGUgYSBzaGFy
ZWQgbWVtb3J5IG9iamVjdCB3aXRoIHRoZSBnaXZlbiBzaXplIGJ5IHZtX2NvcHknaW5nIHRoZSBn
aXZlbiBidWZmZXIuCisgICAgLy8gV2lsbCByZXR1cm4gMCBvbiBmYWlsdXJlLgorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4gY3JlYXRlV2l0aFZNQ29weSh2b2lkKiwgc2l6ZV90
IHNpemVfdCk7CisKICNpZiBPUyhXSU5ET1dTKQogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJl
ZE1lbW9yeT4gYWRvcHQoSEFORExFLCBzaXplX3QsIFByb3RlY3Rpb24pOwogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9tYWMvU2hhcmVkTWVtb3J5TWFjLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL21hYy9TaGFyZWRNZW1vcnlNYWMuY3BwCmluZGV4IGRj
MjlkNjEuLjFhNDcwMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL21hYy9T
aGFyZWRNZW1vcnlNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL21hYy9TaGFy
ZWRNZW1vcnlNYWMuY3BwCkBAIC05Miw2ICs5MiwxMSBAQCBzdGF0aWMgaW5saW5lIG1hY2hfdm1f
YWRkcmVzc190IHRvVk1BZGRyZXNzKHZvaWQqIHBvaW50ZXIpCiAgICAgCiBQYXNzUmVmUHRyPFNo
YXJlZE1lbW9yeT4gU2hhcmVkTWVtb3J5OjpjcmVhdGUoc2l6ZV90IHNpemUpCiB7CisgICAgcmV0
dXJuIFNoYXJlZE1lbW9yeTo6Y3JlYXRlV2l0aFZNQ29weSgwLCBzaXplKTsKK30KKworUGFzc1Jl
ZlB0cjxTaGFyZWRNZW1vcnk+IFNoYXJlZE1lbW9yeTo6Y3JlYXRlV2l0aFZNQ29weSh2b2lkKiBk
YXRhLCBzaXplX3Qgc2l6ZSkKK3sKICAgICBBU1NFUlQoc2l6ZSk7CiAKICAgICBtYWNoX3ZtX2Fk
ZHJlc3NfdCBhZGRyZXNzOwpAQCAtMTAwLDYgKzEwNSwxNSBAQCBQYXNzUmVmUHRyPFNoYXJlZE1l
bW9yeT4gU2hhcmVkTWVtb3J5OjpjcmVhdGUoc2l6ZV90IHNpemUpCiAgICAgICAgIExPR19FUlJP
UigiRmFpbGVkIHRvIGFsbG9jYXRlIG1hY2hfdm1fYWxsb2NhdGUgc2hhcmVkIG1lbW9yeSAoJXp1
IGJ5dGVzKS4gJXMgKCV4KSIsIHNpemUsIG1hY2hfZXJyb3Jfc3RyaW5nKGtyKSwga3IpOyAKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQorICAgIAorICAgIGlmIChkYXRhKSB7CisgICAgICAgIGty
ID0gbWFjaF92bV9jb3B5KG1hY2hfdGFza19zZWxmKCksIHRvVk1BZGRyZXNzKGRhdGEpLCByb3Vu
ZF9wYWdlKHNpemUpLCBhZGRyZXNzKTsKKyAgICAgICAgaWYgKGtyICE9IEtFUk5fU1VDQ0VTUykg
eworICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gdm1fY29weSBpbiB0byBzaGFyZWQg
bWVtb3J5ICglenUgYnl0ZXMpLiAlcyAoJXgpIiwgc2l6ZSwgbWFjaF9lcnJvcl9zdHJpbmcoa3Ip
LCBrcik7IAorICAgICAgICAgICAgbWFjaF92bV9kZWFsbG9jYXRlKG1hY2hfdGFza19zZWxmKCks
IGFkZHJlc3MsIHJvdW5kX3BhZ2Uoc2l6ZSkpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIH0KKyAgICB9CiAKICAgICAvLyBDcmVhdGUgYSBNYWNoIHBvcnQgdGhhdCByZXByZXNlbnRz
IHRoZSBzaGFyZWQgbWVtb3J5LgogICAgIG1hY2hfcG9ydF90IHBvcnQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlUmVzb3VyY2UuaCBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9TaGFyZWFibGVSZXNvdXJjZS5oCmluZGV4IGI3YzM1YmYuLjZlNWMwYzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVSZXNvdXJjZS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVSZXNvdXJjZS5oCkBAIC01NiwxMCArNTYsMTAg
QEAgcHVibGljOgogICAgICAgICB1bnNpZ25lZCBtX3NpemU7CiAgICAgfTsKIAotICAgIC8vIENy
ZWF0ZSBhIHNoYXJlYWJsZSBiaXRtYXAgdGhhdCB1c2VzIG1hbGxvY2VkIG1lbW9yeS4KKyAgICAv
LyBDcmVhdGUgYSBzaGFyZWFibGUgcmVzb3VyY2UgdGhhdCB1c2VzIG1hbGxvY2VkIG1lbW9yeS4K
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWFibGVSZXNvdXJjZT4gY3JlYXRlKFBhc3NSZWZQ
dHI8U2hhcmVkTWVtb3J5PiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBzaXplKTsKIAotICAg
IC8vIENyZWF0ZSBhIHNoYXJlYWJsZSBiaXRtYXAgZnJvbSBhIGhhbmRsZS4KKyAgICAvLyBDcmVh
dGUgYSBzaGFyZWFibGUgcmVzb3VyY2UgZnJvbSBhIGhhbmRsZS4KICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTaGFyZWFibGVSZXNvdXJjZT4gY3JlYXRlKGNvbnN0IEhhbmRsZSYpOwogCiAgICAgLy8g
Q3JlYXRlIGEgaGFuZGxlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDg3OTAwOTkuLmVmMzNiNjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTU0MSw2ICs1NDEs
NyBAQAogCQk1MUQxMzA1ODEzODJGMTA1MDAzNTFFREQgLyogV2ViUHJvY2Vzc1Byb3h5TWFjLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFEMTMwNTcx
MzgyRjEwNTAwMzUxRUREIC8qIFdlYlByb2Nlc3NQcm94eU1hYy5tbSAqLzsgfTsKIAkJNTFERDlG
MjgxNjM2N0RBMjAwMTU3OEU5IC8qIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2Fn
ZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxREQ5RjI2MTYzNjdEQTIwMDE1NzhFOSAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CiAJCTUxREQ5RjI5MTYzNjdEQTIwMDE1NzhF
OSAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUREOUYyNzE2MzY3REEyMDAxNTc4
RTkgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oICovOyB9OworCQk1
MUUzQjY3RjE2RjI2NkIzMDA5OTY4REMgLyogTmV0d29ya1Jlc291cmNlTG9hZGVyTWFjLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFFM0I2N0UxNkYy
NjZCMzAwOTk2OERDIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRlck1hYy5tbSAqLzsgfTsKIAkJNTFF
RkMxQ0YxNTI0RTYyNTAwQzlBOTM4IC8qIFdLQnVuZGxlRE9NV2luZG93RXh0ZW5zaW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUZBMkQ1NDE1MjEx
MTg2MDBDMUJBMEIgLyogV0tCdW5kbGVET01XaW5kb3dFeHRlbnNpb24uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MUYwNjBFMDE2NTQzMTdGMDBG
MzI4MUIgLyogV2ViUmVzb3VyY2VMb2FkZXJNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGMDYwREUxNjU0MzE3NTAwRjMyODFCIC8qIFdl
YlJlc291cmNlTG9hZGVyTWVzc2FnZXMuaCAqLzsgfTsKIAkJNTFGMDYwRTExNjU0MzE4NTAwRjMy
ODFCIC8qIFdlYlJlc291cmNlTG9hZGVyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjA2MEREMTY1NDMxNzUwMEYzMjgx
QiAvKiBXZWJSZXNvdXJjZUxvYWRlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CkBAIC0xOTQ4
LDYgKzE5NDksNyBAQAogCQk1MUQxMzA1NzEzODJGMTA1MDAzNTFFREQgLyogV2ViUHJvY2Vzc1By
b3h5TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViUHJv
Y2Vzc1Byb3h5TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUREOUYyNjE2
MzY3REEyMDAxNTc4RTkgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlUmVj
ZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MUREOUYyNzE2MzY3REEyMDAxNTc4RTkgLyogTmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTUxRTNCNjdFMTZGMjY2QjMwMDk5NjhEQyAvKiBOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBO
ZXR3b3JrUmVzb3VyY2VMb2FkZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUxRjA2MEREMTY1NDMxNzUwMEYzMjgxQiAvKiBXZWJSZXNvdXJjZUxvYWRlck1lc3NhZ2VSZWNl
aXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJSZXNvdXJjZUxvYWRlck1lc3NhZ2VSZWNl
aXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRjA2MERFMTY1NDMxNzUw
MEYzMjgxQiAvKiBXZWJSZXNvdXJjZUxvYWRlck1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdl
YlJlc291cmNlTG9hZGVyTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTFGQTJENTQxNTIxMTE4NjAwQzFCQTBCIC8qIFdLQnVuZGxlRE9NV2luZG93RXh0ZW5zaW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQnVuZGxlRE9NV2luZG93RXh0ZW5z
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNTEyLDYgKzM1MTQsNyBAQAog
CQkJCUUxN0FFMkMxMTZCOUMxMzkwMDFDNDJGMSAvKiBjb20uYXBwbGUuV2ViS2l0Lk5ldHdvcmtQ
cm9jZXNzLnNiLmluICovLAogCQkJCTUxQThBNjE1MTYyN0YzRjkwMDBEOTBFOSAvKiBOZXR3b3Jr
UHJvY2Vzc01hYy5tbSAqLywKIAkJCQk1MTJDMDY4RjE2MzkwRTY5MDBBQkI5MTEgLyogTmV0d29y
a1Jlc291cmNlTG9hZFNjaGVkdWxlck1hYy5tbSAqLywKKwkJCQk1MUUzQjY3RTE2RjI2NkIzMDA5
OTY4REMgLyogTmV0d29ya1Jlc291cmNlTG9hZGVyTWFjLm1tICovLAogCQkJCUUxQjc4NDcwMTYz
RjI0NjkwMDA3QjY5MiAvKiBSZW1vdGVOZXR3b3JraW5nQ29udGV4dC5oICovLAogCQkJCUUxQjc4
NDcyMTYzRjI1M0UwMDA3QjY5MiAvKiBSZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbSAqLywKIAkJ
CSk7CkBAIC02MzQxLDYgKzYzNDQsNyBAQAogCQkJCTFBRDI1RTk1MTY3QUIwODEwMEVBOUJDRCAv
KiBEb3dubG9hZFByb3h5TWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBQjdENjE5MTI4OEI5
RDkwMENGRDA4QyAvKiBEb3dubG9hZFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUJDODQ1MkE3MTE2MkM4MDkwMENBQjlCNSAvKiBEcmF3aW5nQXJlYS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk1MUUzQjY3RjE2RjI2NkIzMDA5OTY4REMgLyogTmV0d29ya1Jlc291
cmNlTG9hZGVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE2NDIxRjcxMkRDRkJBQjAwQ0FB
RTJDIC8qIERyYXdpbmdBcmVhSW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTY0MjI5OTEy
REQwMjkyMDBDQUFFMkMgLyogRHJhd2luZ0FyZWFNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQkMyNjUyMTYxMTgyNjA4MTAwMjQzRTEyIC8qIERyYXdpbmdBcmVhUHJveHku
Y3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZGVyLmNwcAppbmRleCAwZWM4ZTE4Li44NzgxM2I1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VM
b2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNv
dXJjZUxvYWRlci5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJXZWJDb3JlQXJndW1l
bnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJFcnJvcnMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNz
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUJ1ZmZlci5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvUmVzb3VyY2VFcnJvci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkZXIuaD4K
IApAQCAtMTA2LDE4ICsxMDcsNDYgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRlcjo6ZGlkRmFpbFJl
c291cmNlTG9hZChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKICAgICBtX2NvcmVMb2FkZXIt
PmRpZEZhaWwoZXJyb3IpOwogfQogCitzdGF0aWMgdm9pZCBzaGFyZWFibGVSZXNvdXJjZURlYWxs
b2NhdGUodm9pZCAqcHRyLCB2b2lkICppbmZvKQoreworICAgIFNoYXJlYWJsZVJlc291cmNlKiBy
ZXNvdXJjZSA9IHN0YXRpY19jYXN0PFNoYXJlYWJsZVJlc291cmNlKj4oaW5mbyk7CisgICAgcmVz
b3VyY2UtPmRlcmVmKCk7Cit9CisgICAgCitzdGF0aWMgQ0ZBbGxvY2F0b3JSZWYgY3JlYXRlU2hh
cmVhYmxlUmVzb3VyY2VEZWFsbG9jYXRvcihQYXNzUmVmUHRyPFNoYXJlYWJsZVJlc291cmNlPiBy
ZXNvdXJjZSkKK3sKKyAgICBDRkFsbG9jYXRvckNvbnRleHQgY29udGV4dCA9IHsgMCwKKyAgICAg
ICAgICAgIHJlc291cmNlLmxlYWtSZWYoKSwKKyAgICAgICAgICAgIE5VTEwsIC8vIHJldGFpbgor
ICAgICAgICAgICAgTlVMTCwgLy8gcmVsZWFzZQorICAgICAgICAgICAgTlVMTCwgLy8gY29weURl
c2NyaXB0aW9uCisgICAgICAgICAgICBOVUxMLCAvLyBhbGxvY2F0ZQorICAgICAgICAgICAgTlVM
TCwgLy8gcmVhbGxvY2F0ZQorICAgICAgICAgICAgc2hhcmVhYmxlUmVzb3VyY2VEZWFsbG9jYXRl
LAorICAgICAgICAgICAgTlVMTCwKKyAgICB9OworCisgICAgcmV0dXJuIENGQWxsb2NhdG9yQ3Jl
YXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsICZjb250ZXh0KTsKK30KKwogdm9pZCBXZWJSZXNvdXJj
ZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc291cmNlKGNvbnN0IFNoYXJlYWJsZVJlc291cmNlOjpIYW5k
bGUmIGhhbmRsZSwgZG91YmxlIGZpbmlzaFRpbWUpCiB7CiAgICAgTE9HKE5ldHdvcmssICIoV2Vi
UHJvY2VzcykgV2ViUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNvdXJjZSBmb3IgJyVzJyIs
IG1fY29yZUxvYWRlci0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKICAgICBSZWZQ
dHI8U2hhcmVhYmxlUmVzb3VyY2U+IHJlc291cmNlID0gU2hhcmVhYmxlUmVzb3VyY2U6OmNyZWF0
ZShoYW5kbGUpOworICAgIGlmICghcmVzb3VyY2UpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFi
bGVkIHRvIHJlY3JlYXRlIHRoZSBTaGFyZWFibGVSZXNvdXJjZSBzZW50IGZyb20gdGhlIG5ldHdv
cmsgcHJvY2Vzcy4iKTsKKyAgICAgICAgbV9jb3JlTG9hZGVyLT5kaWRGYWlsKGludGVybmFsRXJy
b3IobV9jb3JlTG9hZGVyLT5yZXF1ZXN0KCkudXJsKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KIAogICAgIC8vIE9ubHkgc2VuZCBkYXRhIHRvIHRoZSBkaWRSZWNlaXZlRGF0YSBjYWxsYmFj
ayBpZiBpdCBleGlzdHMuCi0gICAgaWYgKCFyZXNvdXJjZS0+c2l6ZSgpKSB7Ci0gICAgICAgIC8v
IEZJWE1FIChOZXR3b3JrUHJvY2Vzcyk6IEdpdmUgUmVzb3VyY2VMb2FkZXIgdGhlIGFiaWxpdHkg
dG8gdGFrZSBSZXNvdXJjZUJ1ZmZlciBhcmd1bWVudHMuCi0gICAgICAgIC8vIFRoYXQgd2lsbCBh
bGxvdyB1cyB0byBwYXNzIGl0IGFsb25nIHRvIENhY2hlZFJlc291cmNlcyBhbmQgYWxsb3cgdGhl
bSB0byBoYW5nIG9uIHRvIHRoZSBzaGFyZWQgbWVtb3J5IGJlaGluZCB0aGUgc2NlbmVzLgotICAg
ICAgICAvLyBGSVhNRSAoTmV0d29ya1Byb2Nlc3MpOiBQYXNzIGFsb25nIHRoZSBjb3JyZWN0IHZh
bHVlIGZvciBlbmNvZGVkRGF0YUxlbmd0aC4KLSAgICAgICAgbV9jb3JlTG9hZGVyLT5kaWRSZWNl
aXZlRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihyZXNvdXJjZS0+ZGF0YSgpKSwg
cmVzb3VyY2UtPnNpemUoKSwgLTEgLyogZW5jb2RlZERhdGFMZW5ndGggKi8gLCBEYXRhUGF5bG9h
ZFdob2xlUmVzb3VyY2UpOworICAgIGlmIChyZXNvdXJjZS0+c2l6ZSgpKSB7CisgICAgICAgIFJl
dGFpblB0cjxDRkFsbG9jYXRvclJlZj4gZGVhbGxvY2F0b3IoQWRvcHRDRiwgY3JlYXRlU2hhcmVh
YmxlUmVzb3VyY2VEZWFsbG9jYXRvcihyZXNvdXJjZSkpOworICAgICAgICBSZXRhaW5QdHI8Q0ZE
YXRhUmVmPiBkYXRhKEFkb3B0Q0YsIENGRGF0YUNyZWF0ZVdpdGhCeXRlc05vQ29weShrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4ocmVzb3VyY2UtPmRh
dGEoKSksIHN0YXRpY19jYXN0PENGSW5kZXg+KHJlc291cmNlLT5zaXplKCkpLCBkZWFsbG9jYXRv
ci5nZXQoKSkpOworCisgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IFNoYXJl
ZEJ1ZmZlcjo6d3JhcENGRGF0YShkYXRhLmdldCgpKTsKKyAgICAgICAgbV9jb3JlTG9hZGVyLT5k
aWRSZWNlaXZlQnVmZmVyKGJ1ZmZlci5nZXQoKSwgYnVmZmVyLT5zaXplKCksIERhdGFQYXlsb2Fk
V2hvbGVSZXNvdXJjZSk7CiAgICAgfQogCiAgICAgbV9jb3JlTG9hZGVyLT5kaWRGaW5pc2hMb2Fk
aW5nKGZpbmlzaFRpbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9t
YWMvV2ViUHJvY2Vzc01hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvbWFjL1dlYlBy
b2Nlc3NNYWMubW0KaW5kZXggZDJmZDIwNS4uODJmODQ0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9tYWMvV2ViUHJvY2Vzc01hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL21hYy9XZWJQcm9jZXNzTWFjLm1tCkBAIC0xMTYsNyArMTE2LDYgQEAgdm9p
ZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybVNldENhY2hlTW9kZWwoQ2FjaGVNb2RlbCBjYWNoZU1vZGVs
KQogICAgIC8vIGFzIGNhbGxpbmcgW05TVVJMQ2FjaGUgc2hhcmVkVVJMQ2FjaGVdIGluaXRpYWxp
emVzIHRoZSBjYWNoZSwgd2hpY2ggd2Ugd291bGQgcmF0aGVyIG5vdCBkby4KICAgICBpZiAobV91
c2VzTmV0d29ya1Byb2Nlc3MpIHsKICAgICAgICAgW25zdXJsQ2FjaGUgc2V0TWVtb3J5Q2FwYWNp
dHk6MF07Ci0gICAgICAgIFtuc3VybENhY2hlIHNldERpc2tDYXBhY2l0eTowXTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICNlbmRpZgo=
</data>
<flag name="review"
          id="214650"
          type_id="1"
          status="+"
          setter="ggaren"
    />
    <flag name="commit-queue"
          id="214676"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193583</attachid>
            <date>2013-03-18 09:44:55 -0700</date>
            <delta_ts>2013-03-18 09:44:55 -0700</delta_ts>
            <desc>Patch for landing (EWS check)</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>24501</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjYjk1MmJhLi5kNTNlNTM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAg
QEAKKzIwMTMtMDMtMTggIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIE5ldHdvcmtQcm9jZXNzIHNob3VsZCBzZW5kIHZtX2NvcGllZCwgbW1hcCdlZCBtZW1vcnkg
dG8gV2ViUHJvY2Vzc2VzIHdoZW4gYSAKKyAgICAgICAgcmVzb3VyY2UgaXMgYWxyZWFkeSBpbiB0
aGUgZGlzayBjYWNoZS4KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNDE0MTUzPiBhbmQgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjM4NworCisgICAgICAgIFJl
dmlld2VkIGJ5IEdlb2ZmIEdhcmVuLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoTm8gY2hhbmdl
IGluIGJlaGF2aW9yKS4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorCisgICAgICAgIEFk
ZCBhIENGVVJMUmVxdWVzdFJlZiBhY2Nlc3NvciBldmVuIGluIHRoZSBtYWMgTlNVUkwtYmFzZWQg
bG9hZGVyOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Lmg6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0TWFjLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0OjpjZlVSTFJlcXVlc3QpOgorCiAyMDEz
LTAzLTE0ICBEYXZpZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBJ
bmRleGVkREI6IEhpc3RvZ3JhbSBsZXZlbGRiIG9wZW4gZXJyb3JzLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5p
bgppbmRleCA1MjdkMzk1Li44MjIzNDY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgpAQCAtMTMzOSw2
ICsxMzM5LDcgQEAgX19aTks3V2ViQ29yZTE1UHJvdGVjdGlvblNwYWNlNGhvc3RFdgogX19aTks3
V2ViQ29yZTE1UHJvdGVjdGlvblNwYWNlNHBvcnRFdgogX19aTks3V2ViQ29yZTE1UHJvdGVjdGlv
blNwYWNlNXJlYWxtRXYKIF9fWk5LN1dlYkNvcmUxNVByb3RlY3Rpb25TcGFjZTdpc1Byb3h5RXYK
K19fWk5LN1dlYkNvcmUxNVJlc291cmNlUmVxdWVzdDEyY2ZVUkxSZXF1ZXN0RU5TXzIwSFRUUEJv
ZHlVcGRhdGVQb2xpY3lFCiBfX1pOSzdXZWJDb3JlMTVSZXNvdXJjZVJlcXVlc3QxMm5zVVJMUmVx
dWVzdEVOU18yMEhUVFBCb2R5VXBkYXRlUG9saWN5RQogX19aTks3V2ViQ29yZTE1VmlzaWJsZVBv
c2l0aW9uMTRjaGFyYWN0ZXJBZnRlckV2CiBfX1pOSzdXZWJDb3JlMTVWaXNpYmxlUG9zaXRpb24x
NGxvY2FsQ2FyZXRSZWN0RVJQTlNfMTJSZW5kZXJPYmplY3RFCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3QuaAppbmRleCAzNGVkMmYy
Li42MzQ5Y2U4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nm
L1Jlc291cmNlUmVxdWVzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y2YvUmVzb3VyY2VSZXF1ZXN0LmgKQEAgLTI4LDE1ICsyOCwxMiBAQAogI2RlZmluZSBSZXNvdXJj
ZVJlcXVlc3RfaAogCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0QmFzZS5oIgotCiAjaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgotI2lmIFVTRShDRk5FVFdPUkspCi10eXBlZGVmIGNvbnN0IHN0
cnVjdCBfQ0ZVUkxSZXF1ZXN0KiBDRlVSTFJlcXVlc3RSZWY7Ci0jZW5kaWYKIAogT0JKQ19DTEFT
UyBOU1VSTFJlcXVlc3Q7CiAKICNpZiBQTEFURk9STShNQUMpIHx8IFVTRShDRk5FVFdPUkspCit0
eXBlZGVmIGNvbnN0IHN0cnVjdCBfQ0ZVUkxSZXF1ZXN0KiBDRlVSTFJlcXVlc3RSZWY7CiB0eXBl
ZGVmIGNvbnN0IHN0cnVjdCBfX0NGVVJMU3RvcmFnZVNlc3Npb24qIENGVVJMU3RvcmFnZVNlc3Np
b25SZWY7CiAjZW5kaWYKIApAQCAtNzksOCArNzYsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgICAgICB1cGRhdGVOU1VSTFJlcXVlc3QoKTsKICNlbmRpZgogICAgICAgICB9Ci0KLSAg
ICAgICAgQ0ZVUkxSZXF1ZXN0UmVmIGNmVVJMUmVxdWVzdChIVFRQQm9keVVwZGF0ZVBvbGljeSkg
Y29uc3Q7CiAjZWxzZQogICAgICAgICBSZXNvdXJjZVJlcXVlc3QoTlNVUkxSZXF1ZXN0ICpuc1Jl
cXVlc3QpCiAgICAgICAgICAgICA6IFJlc291cmNlUmVxdWVzdEJhc2UoKQpAQCAtMTAzLDYgKzk4
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAKICNpZiBQTEFURk9STShNQUMpIHx8
IFVTRShDRk5FVFdPUkspCisgICAgICAgIENGVVJMUmVxdWVzdFJlZiBjZlVSTFJlcXVlc3QoSFRU
UEJvZHlVcGRhdGVQb2xpY3kpIGNvbnN0OwogICAgICAgICB2b2lkIHNldFN0b3JhZ2VTZXNzaW9u
KENGVVJMU3RvcmFnZVNlc3Npb25SZWYpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVxdWVzdE1hYy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVxdWVzdE1hYy5tbQppbmRl
eCBhMjljYTBlLi4zOTVjMmNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL21hYy9SZXNvdXJjZVJlcXVlc3RNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0TWFjLm1tCkBAIC01NSw2ICs1NSwxMSBA
QCBOU1VSTFJlcXVlc3QgKlJlc291cmNlUmVxdWVzdDo6bnNVUkxSZXF1ZXN0KEhUVFBCb2R5VXBk
YXRlUG9saWN5IGJvZHlQb2xpY3kpIGNvbgogICAgIHJldHVybiBbW21fbnNSZXF1ZXN0LmdldCgp
IHJldGFpbl0gYXV0b3JlbGVhc2VdOwogfQogCitDRlVSTFJlcXVlc3RSZWYgUmVzb3VyY2VSZXF1
ZXN0OjpjZlVSTFJlcXVlc3QoSFRUUEJvZHlVcGRhdGVQb2xpY3kgYm9keVBvbGljeSkgY29uc3QK
K3sKKyAgICByZXR1cm4gW25zVVJMUmVxdWVzdChib2R5UG9saWN5KSBfQ0ZVUkxSZXF1ZXN0XTsK
K30KKwogI2lmIFVTRShDRk5FVFdPUkspCiAKIFJlc291cmNlUmVxdWVzdDo6UmVzb3VyY2VSZXF1
ZXN0KE5TVVJMUmVxdWVzdCAqbnNSZXF1ZXN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDIyMTQwZTkuLjBlNzg4
ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MyBAQAorMjAxMy0wMy0xOCAgQnJhZHkgRWlkc29u
ICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgTmV0d29ya1Byb2Nlc3Mgc2hvdWxkIHNl
bmQgdm1fY29waWVkLCBtbWFwJ2VkIG1lbW9yeSB0byBXZWJQcm9jZXNzZXMgd2hlbiBhIAorICAg
ICAgICByZXNvdXJjZSBpcyBhbHJlYWR5IGluIHRoZSBkaXNrIGNhY2hlLgorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vMTM0MTQxNTM+IGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTEyMzg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmYgR2FyZW4uCisKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnNlbmRBYm9ydGluZ09uRmFpbHVyZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3Bv
bnNlKTogQWZ0ZXIgbm90aWZ5aW5nIGFib3V0IHRoZSByZXNwb25zZSwKKyAgICAgICAgICBjYWxs
IHBsYXRmb3JtRGlkUmVjZWl2ZVJlc3BvbnNlLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05l
dHdvcmtSZXNvdXJjZUxvYWRlci5oOgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvbWFjL05l
dHdvcmtSZXNvdXJjZUxvYWRlck1hYy5tbTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtSZXNvdXJjZUxvYWRlcjo6cGxhdGZvcm1EaWRSZWNlaXZlUmVzcG9uc2UpOiBBdHRlbXB0IHRv
IHB1bGwgYSBmaWxlc3lzdGVtCisgICAgICAgICAgbW1hcCdlZCBidWZmZXIgZnJvbSB0aGUgQ0ZO
ZXR3b3JrIGNhY2hlIGFuZCAtIGlmIGl0IGV4aXN0cyAtIGFib3J0IHRoZSB0cmFkaXRpb25hbCBs
b2FkCisgICAgICAgICAgYW5kIHNlbmQgdGhhdCB0byB0aGUgV2ViUHJvY2VzcyBpbnN0ZWFkLgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OiBmaWxlQmFja2VkUmVzb3Vy
Y2VNaW5pbXVtU2l6ZSk6IEZvciBub3csIHVzZSB0aGUgVk0gcGFnZSBzaXplLgorCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtQcm9jZXNzTWFjLm1tOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOiBT
ZXQgdGhlIHRocmVzaG9sZCBmb3Igd2hhdAorICAgICAgICAgIHNob3VsZCBiZSBiYWNrZWQgYnkg
YSBmaWxlIG9uIGRpc2sgaW5zdGVhZCBvZiBzdG9yZWQgaW4gdGhlIGRhdGFiYXNlLgorCisgICAg
ICAgIENoYW5nZSBTaGFyZWRNZW1vcnkgdG8gZG8gYSB2bV9jb3B5IGlmIGEgcHJldmlvdXNseSBl
eGlzdGluZyBidWZmZXIgaXMgYmVpbmcgcGFzc2VkIGluOgorICAgICAgICAqIFBsYXRmb3JtL1No
YXJlZE1lbW9yeS5oOgorICAgICAgICAqIFBsYXRmb3JtL21hYy9TaGFyZWRNZW1vcnlNYWMuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJL
aXQ6OlNoYXJlZE1lbW9yeTo6Y3JlYXRlV2l0aFZNQ29weSk6CisKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpzaGFy
ZWFibGVSZXNvdXJjZURlYWxsb2NhdGUpOgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVTaGFyZWFi
bGVSZXNvdXJjZURlYWxsb2NhdG9yKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2Fk
ZXI6OmRpZFJlY2VpdmVSZXNvdXJjZSk6IENyZWF0ZSBhIHNwZWNpYWwgQ0ZEYXRhUmVmIHdob3Nl
IGJ1ZmZlciBpcworICAgICAgICAgIGJhY2tlZCBieSBhIFNoYXJlYWJsZVJlc291cmNlIHRvIHNl
bmQgdG8gdGhlIFJlc291cmNlTG9hZGVyIGluIG9uZSBjaHVuay4KKworICAgICAgICAqIFNoYXJl
ZC9TaGFyZWFibGVSZXNvdXJjZS5oOiBGaXggc29tZSBjb21tZW50cy4KKworICAgICAgICAqIFdl
YktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxMy0wMy0xNCAgQWJoaXNoZWsg
QXJ5YSAgPGluZmVybm9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJlcGxhY2Ugc3RhdGljX2Nh
c3RzIHdpdGggdG8qIGhlbHBlciBmdW5jdGlvbnMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAppbmRleCBlYWIyZTll
Li5mYmU5YWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUmVzb3VyY2VMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJO
ZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ2VydGlm
aWNhdGVJbmZvLmgiCiAjaW5jbHVkZSAiUmVtb3RlTmV0d29ya2luZ0NvbnRleHQuaCIKKyNpbmNs
dWRlICJTaGFyZWFibGVSZXNvdXJjZS5oIgogI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgogI2lu
Y2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldlYlJlc291cmNlTG9h
ZGVyTWVzc2FnZXMuaCIKQEAgLTE2NywxMCArMTY4LDEyIEBAIHZvaWQgTmV0d29ya1Jlc291cmNl
TG9hZGVyOjpjb25uZWN0aW9uVG9XZWJQcm9jZXNzRGlkQ2xvc2UoKQogICAgIGNsZWFudXAoKTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVT4gdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnNl
bmRBYm9ydGluZ09uRmFpbHVyZShjb25zdCBVJiBtZXNzYWdlKQordGVtcGxhdGU8dHlwZW5hbWUg
VT4gYm9vbCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnNlbmRBYm9ydGluZ09uRmFpbHVyZShjb25z
dCBVJiBtZXNzYWdlKQogewotICAgIGlmICghc2VuZChtZXNzYWdlKSkKKyAgICBib29sIHJlc3Vs
dCA9IHNlbmQobWVzc2FnZSk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIGFib3J0SW5Qcm9n
cmVzc0xvYWQoKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PiBib29sIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2VuZFN5bmNBYm9ydGluZ09uRmFpbHVyZShj
b25zdCBVJiBtZXNzYWdlLCBjb25zdCB0eXBlbmFtZSBVOjpSZXBseSYgcmVwbHkpCkBAIC0xOTYs
NyArMTk5LDExIEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9u
c2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlCiAgICAgLy8gRklYTUUgKE5ldHdv
cmtQcm9jZXNzKTogQ2FjaGUgdGhlIHJlc3BvbnNlLgogICAgIGlmIChGb3JtRGF0YSogZm9ybURh
dGEgPSByZXF1ZXN0KCkuaHR0cEJvZHkoKSkKICAgICAgICAgZm9ybURhdGEtPnJlbW92ZUdlbmVy
YXRlZEZpbGVzSWZOZWVkZWQoKTsKLSAgICBzZW5kQWJvcnRpbmdPbkZhaWx1cmUoTWVzc2FnZXM6
OldlYlJlc291cmNlTG9hZGVyOjpEaWRSZWNlaXZlUmVzcG9uc2VXaXRoQ2VydGlmaWNhdGVJbmZv
KHJlc3BvbnNlLCBQbGF0Zm9ybUNlcnRpZmljYXRlSW5mbyhyZXNwb25zZSkpKTsKKworICAgIGlm
ICghc2VuZEFib3J0aW5nT25GYWlsdXJlKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6RGlk
UmVjZWl2ZVJlc3BvbnNlV2l0aENlcnRpZmljYXRlSW5mbyhyZXNwb25zZSwgUGxhdGZvcm1DZXJ0
aWZpY2F0ZUluZm8ocmVzcG9uc2UpKSkpCisgICAgICAgIHJldHVybjsKKworICAgIHBsYXRmb3Jt
RGlkUmVjZWl2ZVJlc3BvbnNlKHJlc3BvbnNlKTsKIH0KIAogdm9pZCBOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OmRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciogZGF0YSwg
aW50IGxlbmd0aCwgaW50IGVuY29kZWREYXRhTGVuZ3RoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaAppbmRleCA2NTkwYjBh
Li5hM2Y1M2IxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUmVzb3VyY2VMb2FkZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUmVzb3VyY2VMb2FkZXIuaApAQCAtODQsNiArODQsNyBAQCBwdWJsaWM6CiAjZW5kaWYK
IAogI2lmIFBMQVRGT1JNKE1BQykKKyAgICBzdGF0aWMgc2l6ZV90IGZpbGVCYWNrZWRSZXNvdXJj
ZU1pbmltdW1TaXplKCk7CiAjaWYgVVNFKENGTkVUV09SSykKICAgICB2aXJ0dWFsIENGQ2FjaGVk
VVJMUmVzcG9uc2VSZWYgd2lsbENhY2hlUmVzcG9uc2UoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUq
LCBDRkNhY2hlZFVSTFJlc3BvbnNlUmVmKSBPVkVSUklERTsKICNlbHNlCkBAIC05OCwxMyArOTks
MTUgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNjaGVkdWxlQ2xlYW51cE9uTWFpblRocmVhZCgpOwog
ICAgIHN0YXRpYyB2b2lkIHBlcmZvcm1DbGVhbnVwcyh2b2lkKik7CiAgICAgdm9pZCBjbGVhbnVw
KCk7CisgICAgCisgICAgdm9pZCBwbGF0Zm9ybURpZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiB2b2lk
IHNlbmRBYm9ydGluZ09uRmFpbHVyZShjb25zdCBVJiBtZXNzYWdlKTsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBVPiBib29sIHNlbmRBYm9ydGluZ09uRmFpbHVyZShjb25zdCBVJiBtZXNzYWdlKTsK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBib29sIHNlbmRTeW5jQWJvcnRpbmdPbkZhaWx1cmUo
Y29uc3QgVSYgbWVzc2FnZSwgY29uc3QgdHlwZW5hbWUgVTo6UmVwbHkmIHJlcGx5KTsKICAgICB2
b2lkIGFib3J0SW5Qcm9ncmVzc0xvYWQoKTsKIAogICAgIFJlZlB0cjxSZW1vdGVOZXR3b3JraW5n
Q29udGV4dD4gbV9uZXR3b3JraW5nQ29udGV4dDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmVzb3Vy
Y2VIYW5kbGU+IG1faGFuZGxlOyAgICAKKyAgICBSZWZQdHI8V2ViQ29yZTo6UmVzb3VyY2VIYW5k
bGU+IG1faGFuZGxlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya1Byb2Nlc3NNYWMubW0gYi9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya1Byb2Nlc3NNYWMubW0KaW5k
ZXggODhlODlhOC4uOWQxOWM3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvbWFjL05ldHdvcmtQcm9jZXNzTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL21hYy9OZXR3b3JrUHJvY2Vzc01hYy5tbQpAQCAtMjksNiArMjksNyBAQAogI2lm
IEVOQUJMRShORVRXT1JLX1BST0NFU1MpCiAKICNpbXBvcnQgIk5ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzLmgiCisjaW1wb3J0ICJOZXR3b3JrUmVzb3VyY2VMb2FkZXIuaCIKICNpbXBv
cnQgIlBsYXRmb3JtQ2VydGlmaWNhdGVJbmZvLmgiCiAjaW1wb3J0ICJTYW5kYm94RXh0ZW5zaW9u
LmgiCiAjaW1wb3J0ICJTYW5kYm94SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzLmgiCkBAIC00Niw2
ICs0NywxMiBAQAogI2ltcG9ydCAiU2VjSXRlbVNoaW0uaCIKICNlbmRpZgogCisjaWYgX19NQUNf
T1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCit0eXBlZGVmIHN0cnVjdCBfQ0ZVUkxD
YWNoZSogQ0ZVUkxDYWNoZVJlZjsKK2V4dGVybiAiQyIgQ0ZVUkxDYWNoZVJlZiBDRlVSTENhY2hl
Q29weVNoYXJlZFVSTENhY2hlKCk7CitleHRlcm4gIkMiIHZvaWQgX0NGVVJMQ2FjaGVTZXRNaW5T
aXplRm9yVk1DYWNoZWRSZXNvdXJjZShDRlVSTENhY2hlUmVmLCBDRkluZGV4KTsKKyNlbmRpZgor
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogQGludGVyZmFjZSBOU1VSTFJlcXVlc3QgKERl
dGFpbHMpIApAQCAtMTIwLDYgKzEyNywxNCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9y
bUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyhjb25zdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aQogICAg
IGlmICghcGFyYW1ldGVycy5odHRwUHJveHkuaXNOdWxsKCkgfHwgIXBhcmFtZXRlcnMuaHR0cHNQ
cm94eS5pc051bGwoKSkKICAgICAgICAgb3ZlcnJpZGVTeXN0ZW1Qcm94aWVzKHBhcmFtZXRlcnMu
aHR0cFByb3h5LCBwYXJhbWV0ZXJzLmh0dHBzUHJveHkpOwogI2VuZGlmCisKKyNpZiBfX01BQ19P
U19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKKyAgICBSZXRhaW5QdHI8Q0ZVUkxDYWNo
ZVJlZj4gY2FjaGUgPSBhZG9wdENGKENGVVJMQ2FjaGVDb3B5U2hhcmVkVVJMQ2FjaGUoKSk7Cisg
ICAgaWYgKCFjYWNoZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgX0NGVVJMQ2FjaGVTZXRNaW5T
aXplRm9yVk1DYWNoZWRSZXNvdXJjZShjYWNoZS5nZXQoKSwgTmV0d29ya1Jlc291cmNlTG9hZGVy
OjpmaWxlQmFja2VkUmVzb3VyY2VNaW5pbXVtU2l6ZSgpKTsKKyNlbmRpZgogfQogCiBzdGF0aWMg
dWludDY0X3QgbWVtb3J5U2l6ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9tYWMvTmV0d29ya1Jlc291cmNlTG9hZGVyTWFjLm1tIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtSZXNvdXJjZUxvYWRlck1hYy5tbQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmZlOTM3Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtSZXNvdXJjZUxvYWRlck1hYy5t
bQpAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2lt
cG9ydCAiTmV0d29ya1Jlc291cmNlTG9hZGVyLmgiCisKKyNpbmNsdWRlICJTaGFyZWFibGVSZXNv
dXJjZS5oIgorI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgorI2luY2x1ZGUgIldlYlJlc291cmNl
TG9hZGVyTWVzc2FnZXMuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKyNpZiBfX01B
Q19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKK3R5cGVkZWYgc3RydWN0IF9DRlVS
TENhY2hlKiBDRlVSTENhY2hlUmVmOwordHlwZWRlZiBzdHJ1Y3QgX0NGQ2FjaGVkVVJMUmVzcG9u
c2UqIENGQ2FjaGVkVVJMUmVzcG9uc2VSZWY7CitleHRlcm4gIkMiIENGVVJMQ2FjaGVSZWYgQ0ZV
UkxDYWNoZUNvcHlTaGFyZWRVUkxDYWNoZSgpOworZXh0ZXJuICJDIiBDRkNhY2hlZFVSTFJlc3Bv
bnNlUmVmIENGVVJMQ2FjaGVDb3B5UmVzcG9uc2VGb3JSZXF1ZXN0KENGVVJMQ2FjaGVSZWYsIENG
VVJMUmVxdWVzdFJlZik7CitleHRlcm4gIkMiIENGQXJyYXlSZWYgQ0ZDYWNoZWRVUkxSZXNwb25z
ZUNvcHlSZWNlaXZlckRhdGFBcnJheShDRkNhY2hlZFVSTFJlc3BvbnNlUmVmKTsKKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnBsYXRm
b3JtRGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKQor
eworI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDkwCisgICAgcmV0dXJu
OworI2VuZGlmCisKKyAgICAvLyBDaGVjayB0aGUgY2FjaGUgdG8gc2VlIGlmIHdlIGNhbiB2bV9j
b3B5IGEgZmlsZXN5c3RlbS1iYWNrZWQgcmVzb3VyY2UgYnVmZmVyLiAgIAorICAgIFJldGFpblB0
cjxDRlVSTENhY2hlUmVmPiBjYWNoZSA9IGFkb3B0Q0YoQ0ZVUkxDYWNoZUNvcHlTaGFyZWRVUkxD
YWNoZSgpKTsKKyAgICBpZiAoIWNhY2hlKQorICAgICAgICByZXR1cm47CisKKyAgICBDRlVSTFJl
cXVlc3RSZWYgY2ZSZXF1ZXN0ID0gcmVxdWVzdCgpLmNmVVJMUmVxdWVzdChEb05vdFVwZGF0ZUhU
VFBCb2R5KTsKKyAgICBSZXRhaW5QdHI8Q0ZDYWNoZWRVUkxSZXNwb25zZVJlZj4gY2FjaGVkUmVz
cG9uc2UgPSBhZG9wdENGKENGVVJMQ2FjaGVDb3B5UmVzcG9uc2VGb3JSZXF1ZXN0KGNhY2hlLmdl
dCgpLCBjZlJlcXVlc3QpKTsKKyAgICBpZiAoIWNhY2hlZFJlc3BvbnNlKQorICAgICAgICByZXR1
cm47CisKKyAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gYXJyYXkgPSBhZG9wdENGKENGQ2FjaGVk
VVJMUmVzcG9uc2VDb3B5UmVjZWl2ZXJEYXRhQXJyYXkoY2FjaGVkUmVzcG9uc2UuZ2V0KCkpKTsK
KyAgICBpZiAoIWFycmF5IHx8IENGQXJyYXlHZXRDb3VudChhcnJheS5nZXQoKSkgIT0gMSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIENGVHlwZVJlZiB2YWx1ZSA9IENGQXJyYXlHZXRWYWx1
ZUF0SW5kZXgoYXJyYXkuZ2V0KCksIDApOworICAgIGlmIChDRkdldFR5cGVJRCh2YWx1ZSkgIT0g
Q0ZEYXRhR2V0VHlwZUlEKCkpCisgICAgICAgIHJldHVybjsKKyAgICBDRkRhdGFSZWYgZGF0YSA9
IHN0YXRpY19jYXN0PENGRGF0YVJlZj4odmFsdWUpOworCisgICAgLy8gV2Ugb25seSBjYXJlIGFi
b3V0IHRoZSB2bV9jb3B5IG9wdGltaXphdGlvbiBmb3IgcmVzb3VyY2VzIHRoYXQgc2hvdWxkIGJl
IGZpbGUgYmFja2VkLgorICAgIC8vIEZJWE1FOiBJZiB0aGVyZSB3ZXJlIGFuIEFQSSBhdmFpbGFi
bGUgdG8gZ3VhcmFudGVlIHRoYXQgYSBidWZmZXIgd2FzIGZpbGUgYmFja2VkLCB3ZSBzaG91bGQg
dXNlIGl0IGhlcmUuCisgICAgaWYgKENGRGF0YUdldExlbmd0aChkYXRhKSA8IChDRkluZGV4KWZp
bGVCYWNrZWRSZXNvdXJjZU1pbmltdW1TaXplKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnkgPSBTaGFyZWRNZW1vcnk6OmNyZWF0
ZVdpdGhWTUNvcHkoKHZvaWQqKUNGRGF0YUdldEJ5dGVQdHIoZGF0YSksIENGRGF0YUdldExlbmd0
aChkYXRhKSk7CisgICAgaWYgKCFzaGFyZWRNZW1vcnkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJG
YWlsZWQgdG8gY3JlYXRlIFZNQ29waWVkIHNoYXJlZCBtZW1vcnkgZm9yIGNhY2hlZCByZXNvdXJj
ZS4gIFdlJ2xsIGxldCBpdCBsb2FkIG5vcm1hbGx5LiIpOworICAgICAgICByZXR1cm47CisgICAg
fQorIAorICAgIHNpemVfdCBzaXplID0gc2hhcmVkTWVtb3J5LT5zaXplKCk7CisgICAgUmVmUHRy
PFNoYXJlYWJsZVJlc291cmNlPiByZXNvdXJjZSA9IFNoYXJlYWJsZVJlc291cmNlOjpjcmVhdGUo
c2hhcmVkTWVtb3J5LnJlbGVhc2UoKSwgMCwgc2l6ZSk7CisgICAgU2hhcmVhYmxlUmVzb3VyY2U6
OkhhbmRsZSBoYW5kbGU7CisgICAgaWYgKCFyZXNvdXJjZS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSkp
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIFNoYXJlYWJsZVJlc291cmNl
IGhhbmRsZSB0byBzZW5kIHRvIHRoZSBXZWJQcm9jZXNzIGZvciByZXNvdXJjZS4gIFdlJ2xsIGxl
dCBpdCBsb2FkIG5vcm1hbGx5LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8g
U2luY2Ugd2UncmUgZGVsaXZlcmluZyB0aGlzIHJlc291cmNlIGJ5IG91cnNlbHZlcyBhbGwgYXQg
b25jZSwgd2UnbGwgYWJvcnQgdGhlIHJlc291cmNlIGhhbmRsZSBzaW5jZSB3ZSBkb24ndCBuZWVk
IGFueW1vcmUgY2FsbGJhY2tzIGZyb20gQ0ZOZXR3b3JrLgorICAgIGFib3J0SW5Qcm9ncmVzc0xv
YWQoKTsKKyAgICAKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6RGlkUmVj
ZWl2ZVJlc291cmNlKGhhbmRsZSwgY3VycmVudFRpbWUoKSkpOworfQorCitzaXplX3QgTmV0d29y
a1Jlc291cmNlTG9hZGVyOjpmaWxlQmFja2VkUmVzb3VyY2VNaW5pbXVtU2l6ZSgpCit7CisgICAg
cmV0dXJuIFNoYXJlZE1lbW9yeTo6c3lzdGVtUGFnZVNpemUoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9TaGFyZWRNZW1v
cnkuaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oCmluZGV4IGE2N2Rl
OGQuLjdlNTdkNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1l
bW9yeS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oCkBAIC04
MSw3ICs4MSwxMSBAQCBwdWJsaWM6CiAKICAgICAvLyBDcmVhdGUgYSBzaGFyZWQgbWVtb3J5IG9i
amVjdCBmcm9tIHRoZSBnaXZlbiBoYW5kbGUgYW5kIHRoZSByZXF1ZXN0ZWQgcHJvdGVjdGlvbi4g
V2lsbCByZXR1cm4gMCBvbiBmYWlsdXJlLgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZE1l
bW9yeT4gY3JlYXRlKGNvbnN0IEhhbmRsZSYsIFByb3RlY3Rpb24pOwotICAgIAorCisgICAgLy8g
Q3JlYXRlIGEgc2hhcmVkIG1lbW9yeSBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gc2l6ZSBieSB2bV9j
b3B5J2luZyB0aGUgZ2l2ZW4gYnVmZmVyLgorICAgIC8vIFdpbGwgcmV0dXJuIDAgb24gZmFpbHVy
ZS4KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+IGNyZWF0ZVdpdGhWTUNvcHko
dm9pZCosIHNpemVfdCk7CisKICNpZiBPUyhXSU5ET1dTKQogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFNoYXJlZE1lbW9yeT4gYWRvcHQoSEFORExFLCBzaXplX3QsIFByb3RlY3Rpb24pOwogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9tYWMvU2hhcmVkTWVtb3J5TWFj
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL21hYy9TaGFyZWRNZW1vcnlNYWMuY3BwCmlu
ZGV4IGRjMjlkNjEuLjFhNDcwMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L21hYy9TaGFyZWRNZW1vcnlNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL21h
Yy9TaGFyZWRNZW1vcnlNYWMuY3BwCkBAIC05Miw2ICs5MiwxMSBAQCBzdGF0aWMgaW5saW5lIG1h
Y2hfdm1fYWRkcmVzc190IHRvVk1BZGRyZXNzKHZvaWQqIHBvaW50ZXIpCiAgICAgCiBQYXNzUmVm
UHRyPFNoYXJlZE1lbW9yeT4gU2hhcmVkTWVtb3J5OjpjcmVhdGUoc2l6ZV90IHNpemUpCiB7Cisg
ICAgcmV0dXJuIFNoYXJlZE1lbW9yeTo6Y3JlYXRlV2l0aFZNQ29weSgwLCBzaXplKTsKK30KKwor
UGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+IFNoYXJlZE1lbW9yeTo6Y3JlYXRlV2l0aFZNQ29weSh2
b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKICAgICBBU1NFUlQoc2l6ZSk7CiAKICAgICBtYWNo
X3ZtX2FkZHJlc3NfdCBhZGRyZXNzOwpAQCAtMTAwLDYgKzEwNSwxNSBAQCBQYXNzUmVmUHRyPFNo
YXJlZE1lbW9yeT4gU2hhcmVkTWVtb3J5OjpjcmVhdGUoc2l6ZV90IHNpemUpCiAgICAgICAgIExP
R19FUlJPUigiRmFpbGVkIHRvIGFsbG9jYXRlIG1hY2hfdm1fYWxsb2NhdGUgc2hhcmVkIG1lbW9y
eSAoJXp1IGJ5dGVzKS4gJXMgKCV4KSIsIHNpemUsIG1hY2hfZXJyb3Jfc3RyaW5nKGtyKSwga3Ip
OyAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorICAgIAorICAgIGlmIChkYXRhKSB7CisgICAg
ICAgIGtyID0gbWFjaF92bV9jb3B5KG1hY2hfdGFza19zZWxmKCksIHRvVk1BZGRyZXNzKGRhdGEp
LCByb3VuZF9wYWdlKHNpemUpLCBhZGRyZXNzKTsKKyAgICAgICAgaWYgKGtyICE9IEtFUk5fU1VD
Q0VTUykgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gdm1fY29weSBpbiB0byBz
aGFyZWQgbWVtb3J5ICglenUgYnl0ZXMpLiAlcyAoJXgpIiwgc2l6ZSwgbWFjaF9lcnJvcl9zdHJp
bmcoa3IpLCBrcik7IAorICAgICAgICAgICAgbWFjaF92bV9kZWFsbG9jYXRlKG1hY2hfdGFza19z
ZWxmKCksIGFkZHJlc3MsIHJvdW5kX3BhZ2Uoc2l6ZSkpOworICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIH0KKyAgICB9CiAKICAgICAvLyBDcmVhdGUgYSBNYWNoIHBvcnQgdGhhdCByZXBy
ZXNlbnRzIHRoZSBzaGFyZWQgbWVtb3J5LgogICAgIG1hY2hfcG9ydF90IHBvcnQ7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlUmVzb3VyY2UuaCBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVSZXNvdXJjZS5oCmluZGV4IGI3YzM1YmYuLjZlNWMwYzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVSZXNvdXJjZS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVSZXNvdXJjZS5oCkBAIC01NiwxMCAr
NTYsMTAgQEAgcHVibGljOgogICAgICAgICB1bnNpZ25lZCBtX3NpemU7CiAgICAgfTsKIAotICAg
IC8vIENyZWF0ZSBhIHNoYXJlYWJsZSBiaXRtYXAgdGhhdCB1c2VzIG1hbGxvY2VkIG1lbW9yeS4K
KyAgICAvLyBDcmVhdGUgYSBzaGFyZWFibGUgcmVzb3VyY2UgdGhhdCB1c2VzIG1hbGxvY2VkIG1l
bW9yeS4KICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWFibGVSZXNvdXJjZT4gY3JlYXRlKFBh
c3NSZWZQdHI8U2hhcmVkTWVtb3J5PiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBzaXplKTsK
IAotICAgIC8vIENyZWF0ZSBhIHNoYXJlYWJsZSBiaXRtYXAgZnJvbSBhIGhhbmRsZS4KKyAgICAv
LyBDcmVhdGUgYSBzaGFyZWFibGUgcmVzb3VyY2UgZnJvbSBhIGhhbmRsZS4KICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTaGFyZWFibGVSZXNvdXJjZT4gY3JlYXRlKGNvbnN0IEhhbmRsZSYpOwogCiAg
ICAgLy8gQ3JlYXRlIGEgaGFuZGxlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0
Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDg3OTAwOTkuLmVmMzNiNjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTU0MSw2
ICs1NDEsNyBAQAogCQk1MUQxMzA1ODEzODJGMTA1MDAzNTFFREQgLyogV2ViUHJvY2Vzc1Byb3h5
TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFE
MTMwNTcxMzgyRjEwNTAwMzUxRUREIC8qIFdlYlByb2Nlc3NQcm94eU1hYy5tbSAqLzsgfTsKIAkJ
NTFERDlGMjgxNjM2N0RBMjAwMTU3OEU5IC8qIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxREQ5RjI2MTYzNjdEQTIwMDE1NzhFOSAvKiBOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CiAJCTUxREQ5RjI5MTYzNjdEQTIw
MDE1NzhFOSAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUREOUYyNzE2MzY3REEy
MDAxNTc4RTkgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oICovOyB9
OworCQk1MUUzQjY3RjE2RjI2NkIzMDA5OTY4REMgLyogTmV0d29ya1Jlc291cmNlTG9hZGVyTWFj
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFFM0I2
N0UxNkYyNjZCMzAwOTk2OERDIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRlck1hYy5tbSAqLzsgfTsK
IAkJNTFFRkMxQ0YxNTI0RTYyNTAwQzlBOTM4IC8qIFdLQnVuZGxlRE9NV2luZG93RXh0ZW5zaW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUZBMkQ1
NDE1MjExMTg2MDBDMUJBMEIgLyogV0tCdW5kbGVET01XaW5kb3dFeHRlbnNpb24uaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MUYwNjBFMDE2NTQz
MTdGMDBGMzI4MUIgLyogV2ViUmVzb3VyY2VMb2FkZXJNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGMDYwREUxNjU0MzE3NTAwRjMyODFC
IC8qIFdlYlJlc291cmNlTG9hZGVyTWVzc2FnZXMuaCAqLzsgfTsKIAkJNTFGMDYwRTExNjU0MzE4
NTAwRjMyODFCIC8qIFdlYlJlc291cmNlTG9hZGVyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjA2MEREMTY1NDMxNzUw
MEYzMjgxQiAvKiBXZWJSZXNvdXJjZUxvYWRlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CkBA
IC0xOTQ4LDYgKzE5NDksNyBAQAogCQk1MUQxMzA1NzEzODJGMTA1MDAzNTFFREQgLyogV2ViUHJv
Y2Vzc1Byb3h5TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V2ViUHJvY2Vzc1Byb3h5TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MURE
OUYyNjE2MzY3REEyMDAxNTc4RTkgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNz
YWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MUREOUYyNzE2MzY3REEyMDAxNTc4RTkgLyogTmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxRTNCNjdFMTZGMjY2QjMwMDk5NjhEQyAvKiBOZXR3b3Jr
UmVzb3VyY2VMb2FkZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBOZXR3b3JrUmVzb3VyY2VMb2FkZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxRjA2MEREMTY1NDMxNzUwMEYzMjgxQiAvKiBXZWJSZXNvdXJjZUxvYWRlck1lc3Nh
Z2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJSZXNvdXJjZUxvYWRlck1lc3Nh
Z2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRjA2MERFMTY1
NDMxNzUwMEYzMjgxQiAvKiBXZWJSZXNvdXJjZUxvYWRlck1lc3NhZ2VzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYlJlc291cmNlTG9hZGVyTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTFGQTJENTQxNTIxMTE4NjAwQzFCQTBCIC8qIFdLQnVuZGxlRE9NV2luZG93RXh0ZW5z
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQnVuZGxlRE9NV2luZG93
RXh0ZW5zaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNTEyLDYgKzM1MTQs
NyBAQAogCQkJCUUxN0FFMkMxMTZCOUMxMzkwMDFDNDJGMSAvKiBjb20uYXBwbGUuV2ViS2l0Lk5l
dHdvcmtQcm9jZXNzLnNiLmluICovLAogCQkJCTUxQThBNjE1MTYyN0YzRjkwMDBEOTBFOSAvKiBO
ZXR3b3JrUHJvY2Vzc01hYy5tbSAqLywKIAkJCQk1MTJDMDY4RjE2MzkwRTY5MDBBQkI5MTEgLyog
TmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlck1hYy5tbSAqLywKKwkJCQk1MUUzQjY3RTE2RjI2
NkIzMDA5OTY4REMgLyogTmV0d29ya1Jlc291cmNlTG9hZGVyTWFjLm1tICovLAogCQkJCUUxQjc4
NDcwMTYzRjI0NjkwMDA3QjY5MiAvKiBSZW1vdGVOZXR3b3JraW5nQ29udGV4dC5oICovLAogCQkJ
CUUxQjc4NDcyMTYzRjI1M0UwMDA3QjY5MiAvKiBSZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbSAq
LywKIAkJCSk7CkBAIC02MzQxLDYgKzYzNDQsNyBAQAogCQkJCTFBRDI1RTk1MTY3QUIwODEwMEVB
OUJDRCAvKiBEb3dubG9hZFByb3h5TWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBQjdENjE5
MTI4OEI5RDkwMENGRDA4QyAvKiBEb3dubG9hZFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUJDODQ1MkE3MTE2MkM4MDkwMENBQjlCNSAvKiBEcmF3aW5nQXJlYS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk1MUUzQjY3RjE2RjI2NkIzMDA5OTY4REMgLyogTmV0d29y
a1Jlc291cmNlTG9hZGVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE2NDIxRjcxMkRDRkJB
QjAwQ0FBRTJDIC8qIERyYXdpbmdBcmVhSW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTY0
MjI5OTEyREQwMjkyMDBDQUFFMkMgLyogRHJhd2luZ0FyZWFNZXNzYWdlUmVjZWl2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkMyNjUyMTYxMTgyNjA4MTAwMjQzRTEyIC8qIERyYXdpbmdBcmVh
UHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZGVyLmNwcAppbmRleCAwZWM4ZTE4Li5lZWMy
YTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVz
b3VyY2VMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9X
ZWJSZXNvdXJjZUxvYWRlci5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJXZWJDb3Jl
QXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJFcnJvcnMuaCIKICNpbmNsdWRlICJXZWJQ
cm9jZXNzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUJ1ZmZlci5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2Fk
ZXIuaD4KIApAQCAtMTA2LDE4ICsxMDcsNDYgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRlcjo6ZGlk
RmFpbFJlc291cmNlTG9hZChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKICAgICBtX2NvcmVM
b2FkZXItPmRpZEZhaWwoZXJyb3IpOwogfQogCitzdGF0aWMgdm9pZCBzaGFyZWFibGVSZXNvdXJj
ZURlYWxsb2NhdGUodm9pZCAqcHRyLCB2b2lkICppbmZvKQoreworICAgIFNoYXJlYWJsZVJlc291
cmNlKiByZXNvdXJjZSA9IHN0YXRpY19jYXN0PFNoYXJlYWJsZVJlc291cmNlKj4oaW5mbyk7Cisg
ICAgcmVzb3VyY2UtPmRlcmVmKCk7Cit9CisgICAgCitzdGF0aWMgQ0ZBbGxvY2F0b3JSZWYgY3Jl
YXRlU2hhcmVhYmxlUmVzb3VyY2VEZWFsbG9jYXRvcihQYXNzUmVmUHRyPFNoYXJlYWJsZVJlc291
cmNlPiByZXNvdXJjZSkKK3sKKyAgICBDRkFsbG9jYXRvckNvbnRleHQgY29udGV4dCA9IHsgMCwK
KyAgICAgICAgcmVzb3VyY2UubGVha1JlZigpLAorICAgICAgICBOVUxMLCAvLyByZXRhaW4KKyAg
ICAgICAgTlVMTCwgLy8gcmVsZWFzZQorICAgICAgICBOVUxMLCAvLyBjb3B5RGVzY3JpcHRpb24K
KyAgICAgICAgTlVMTCwgLy8gYWxsb2NhdGUKKyAgICAgICAgTlVMTCwgLy8gcmVhbGxvY2F0ZQor
ICAgICAgICBzaGFyZWFibGVSZXNvdXJjZURlYWxsb2NhdGUsCisgICAgICAgIE5VTEwsCisgICAg
fTsKKworICAgIHJldHVybiBDRkFsbG9jYXRvckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAm
Y29udGV4dCk7Cit9CisKIHZvaWQgV2ViUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNvdXJj
ZShjb25zdCBTaGFyZWFibGVSZXNvdXJjZTo6SGFuZGxlJiBoYW5kbGUsIGRvdWJsZSBmaW5pc2hU
aW1lKQogewogICAgIExPRyhOZXR3b3JrLCAiKFdlYlByb2Nlc3MpIFdlYlJlc291cmNlTG9hZGVy
OjpkaWRSZWNlaXZlUmVzb3VyY2UgZm9yICclcyciLCBtX2NvcmVMb2FkZXItPnVybCgpLnN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgUmVmUHRyPFNoYXJlYWJsZVJlc291cmNlPiByZXNv
dXJjZSA9IFNoYXJlYWJsZVJlc291cmNlOjpjcmVhdGUoaGFuZGxlKTsKKyAgICBpZiAoIXJlc291
cmNlKSB7CisgICAgICAgIExPR19FUlJPUigiVW5hYmxlZCB0byByZWNyZWF0ZSB0aGUgU2hhcmVh
YmxlUmVzb3VyY2Ugc2VudCBmcm9tIHRoZSBuZXR3b3JrIHByb2Nlc3MuIik7CisgICAgICAgIG1f
Y29yZUxvYWRlci0+ZGlkRmFpbChpbnRlcm5hbEVycm9yKG1fY29yZUxvYWRlci0+cmVxdWVzdCgp
LnVybCgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICAvLyBPbmx5IHNlbmQgZGF0
YSB0byB0aGUgZGlkUmVjZWl2ZURhdGEgY2FsbGJhY2sgaWYgaXQgZXhpc3RzLgotICAgIGlmICgh
cmVzb3VyY2UtPnNpemUoKSkgewotICAgICAgICAvLyBGSVhNRSAoTmV0d29ya1Byb2Nlc3MpOiBH
aXZlIFJlc291cmNlTG9hZGVyIHRoZSBhYmlsaXR5IHRvIHRha2UgUmVzb3VyY2VCdWZmZXIgYXJn
dW1lbnRzLgotICAgICAgICAvLyBUaGF0IHdpbGwgYWxsb3cgdXMgdG8gcGFzcyBpdCBhbG9uZyB0
byBDYWNoZWRSZXNvdXJjZXMgYW5kIGFsbG93IHRoZW0gdG8gaGFuZyBvbiB0byB0aGUgc2hhcmVk
IG1lbW9yeSBiZWhpbmQgdGhlIHNjZW5lcy4KLSAgICAgICAgLy8gRklYTUUgKE5ldHdvcmtQcm9j
ZXNzKTogUGFzcyBhbG9uZyB0aGUgY29ycmVjdCB2YWx1ZSBmb3IgZW5jb2RlZERhdGFMZW5ndGgu
Ci0gICAgICAgIG1fY29yZUxvYWRlci0+ZGlkUmVjZWl2ZURhdGEocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBjaGFyKj4ocmVzb3VyY2UtPmRhdGEoKSksIHJlc291cmNlLT5zaXplKCksIC0xIC8qIGVu
Y29kZWREYXRhTGVuZ3RoICovICwgRGF0YVBheWxvYWRXaG9sZVJlc291cmNlKTsKKyAgICBpZiAo
cmVzb3VyY2UtPnNpemUoKSkgeworICAgICAgICBSZXRhaW5QdHI8Q0ZBbGxvY2F0b3JSZWY+IGRl
YWxsb2NhdG9yKEFkb3B0Q0YsIGNyZWF0ZVNoYXJlYWJsZVJlc291cmNlRGVhbGxvY2F0b3IocmVz
b3VyY2UpKTsKKyAgICAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YShBZG9wdENGLCBDRkRh
dGFDcmVhdGVXaXRoQnl0ZXNOb0NvcHkoa0NGQWxsb2NhdG9yRGVmYXVsdCwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBVSW50OCo+KHJlc291cmNlLT5kYXRhKCkpLCBzdGF0aWNfY2FzdDxDRkluZGV4
PihyZXNvdXJjZS0+c2l6ZSgpKSwgZGVhbGxvY2F0b3IuZ2V0KCkpKTsKKworICAgICAgICBSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBTaGFyZWRCdWZmZXI6OndyYXBDRkRhdGEoZGF0YS5n
ZXQoKSk7CisgICAgICAgIG1fY29yZUxvYWRlci0+ZGlkUmVjZWl2ZUJ1ZmZlcihidWZmZXIuZ2V0
KCksIGJ1ZmZlci0+c2l6ZSgpLCBEYXRhUGF5bG9hZFdob2xlUmVzb3VyY2UpOwogICAgIH0KIAog
ICAgIG1fY29yZUxvYWRlci0+ZGlkRmluaXNoTG9hZGluZyhmaW5pc2hUaW1lKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>