<?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>106147</bug_id>
          
          <creation_ts>2013-01-04 16:23:37 -0800</creation_ts>
          <short_desc>ResourceHandle::willLoadFromCache is evil</short_desc>
          <delta_ts>2013-01-29 17:30:00 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Page Loading</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>108214</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>abarth</cc>
    
    <cc>beidson</cc>
    
    <cc>danw</cc>
    
    <cc>darin</cc>
    
    <cc>fmalita</cc>
    
    <cc>gustavo</cc>
    
    <cc>japhet</cc>
    
    <cc>joenotcharles</cc>
    
    <cc>mifenton</cc>
    
    <cc>mrobinson</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>rakuco</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yong.li.webkit</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>800722</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-01-04 16:23:37 -0800</bug_when>
    <thetext>One can&apos;t be certain when using ResourceHandle::willLoadFromCache(), because the resource may be pruned as soon as this function returns. We should try to load from cache unconditionally, and retry if that fails.

&lt;rdar://problem/12948053&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>800741</commentid>
    <comment_count>1</comment_count>
      <attachid>181407</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-01-04 16:42:08 -0800</bug_when>
    <thetext>Created attachment 181407
proposed patch

Beyond the usual FrameLoader flakiness, I&apos;m worried about my use of stopAllLoaders() in retryAfterFailedCacheOnlyMainResourceLoad(). It seems to work, but I don&apos;t know which method of canceling the cache-only request would be fully correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>800750</commentid>
    <comment_count>2</comment_count>
      <attachid>181407</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-01-04 16:47:41 -0800</bug_when>
    <thetext>Comment on attachment 181407
proposed patch

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

A somewhat scary change.  Would like an answer to my question and assurance existing layouttests pass.

&gt; Source/WebCore/loader/FrameLoader.cpp:1466
&gt; +    // FIXME: If the resource is a result of form submission and is not cached, the form will be silently resubmitted.
&gt; +    // We should ask the user for confirmation in this case.
&gt;      request.setCachePolicy(ReturnCacheDataElseLoad);

This FIXME is concerning.  Should we even allow this to be a remote possibility?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>800762</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-01-04 17:10:07 -0800</bug_when>
    <thetext>&gt; This FIXME is concerning.  Should we even allow this to be a remote possibility?

This is not a change from existing behavior. Just something that I noticed while working on this patch, and decided to make clear in code.

http tests passed for me locally (I did not run the whole suite).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>800854</commentid>
    <comment_count>4</comment_count>
      <attachid>181407</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-04 21:53:05 -0800</bug_when>
    <thetext>Comment on attachment 181407
proposed patch

Attachment 181407 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/15706610

New failing tests:
http/tests/cache/history-only-cached-subresource-loads-max-age-https.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>800925</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-01-05 09:16:56 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 181407 [details])
&gt; Attachment 181407 [details] did not pass mac-ews (mac):
&gt; Output: http://queues.webkit.org/results/15706610
&gt; 
&gt; New failing tests:
&gt; http/tests/cache/history-only-cached-subresource-loads-max-age-https.html

Guess we need to figure this one out first :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>801346</commentid>
    <comment_count>6</comment_count>
      <attachid>181514</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-01-07 09:47:53 -0800</bug_when>
    <thetext>Created attachment 181514
proposed patch

Indeed.

I&apos;ve been running tests locally with one more fix that I removed as unrelated prior to submitting the patch. Turns out it&apos;s not unrelated!

The additional fix is for non-form case FrameLoader::loadDifferentDocumentItem() - we&apos;ve been explicitly special casing https subresources to not use stale data on b/f navigation. The reason this worked before was that addExtraFieldsToRequest() was resetting cache policy for b/f navigations after policy delegate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>801419</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-01-07 10:42:26 -0800</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/changeset/138962&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818991</commentid>
    <comment_count>8</comment_count>
    <who name="Florin Malita">fmalita</who>
    <bug_when>2013-01-29 08:54:52 -0800</bug_when>
    <thetext>Apparently this caused https://code.google.com/p/chromium/issues/detail?id=172721

Any ideas about what might be going on?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819026</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-01-29 09:48:11 -0800</bug_when>
    <thetext>Chromium used to hack this functionality in a custom way, this patch changed all ports to a cross-platform implementation. Perhaps there are some vestiges of the old hack remaining and breaking things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819044</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-01-29 10:03:35 -0800</bug_when>
    <thetext>kareng@chromium.org rolled this out in http://trac.webkit.org/changeset/141118</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819045</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-01-29 10:04:03 -0800</bug_when>
    <thetext>Oops, my mistake, only on a Chromium branch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819214</commentid>
    <comment_count>12</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-29 12:38:02 -0800</bug_when>
    <thetext>I filed bug 108214 about the regression.  Please either fix the regression or roll out your change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819571</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-01-29 17:30:00 -0800</bug_when>
    <thetext>This is not a fair request.

The chromium port had a long-standing technical debt to the WebKit project due to hacking its implementation in a way that only benefitted their platform at the expense of others. I invested the time to properly implement this in a cross-platform manner. 

This is what chromium developers should have done years ago. The fact that you chose to do an obvious hack instead does not make it others&apos; responsibility to support it.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>181407</attachid>
            <date>2013-01-04 16:42:08 -0800</date>
            <delta_ts>2013-01-07 09:47:53 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>WillLoadFromCache.txt</filename>
            <type>text/plain</type>
            <size>24430</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzODg2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBACisyMDEzLTAxLTA0ICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlSGFuZGxlOjp3
aWxsTG9hZEZyb21DYWNoZSBpcyBldmlsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMDYxNDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBGb3IgYmFjay9mb3J3YXJkIG5hdmlnYXRpb25zIHRvIGEgcGFnZSB0
aGF0J3MgYSByZXN1bHQgb2YgZm9ybSBzdWJtaXNzaW9uLCB3ZSBtYXkKKyAgICAgICAgbmV2ZXIg
c2lsZW50bHkgcmUtc3VibWl0IHRoZSBmb3JtLiBTbywgd2Ugc2hvdyBhIHdhcm5pbmcgZGlhbG9n
IHdoZW4gYWJvdXQgdG8gcmUtc3VibWl0LAorICAgICAgICBidXQgdHJ5IHRvIGxvYWQgZnJvbSBj
YWNoZSBpZiBwb3NzaWJsZS4KKworICAgICAgICBUaGlzIHBhdGNoIGNoYW5nZXMgdGhlIGxvZ2lj
IHNvIHRoYXQgd2UgYWx3YXlzIHRyeSB0byBmZXRjaCBmcm9tIGNhY2hlLCB3aXRob3V0CisgICAg
ICAgIGFueSBwcmVmbGlnaHRpbmcuIElmIGNhY2hlIGxvYWQgZmFpbHMsIHdlIHJlc3RhcnQgdGhl
IGxvYWQgYXMgYSBrbm93biByZS1zdWJtaXQuCisKKyAgICAgICAgTm8gYmVoYXZpb3IgY2hhbmdl
IGV4cGVjdGVkLCBzbyBubyB0ZXN0cy4KKworICAgICAgICAqIGh0bWwvSFRNTEFuY2hvckVsZW1l
bnQuY3BwOiAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OmhhbmRsZUNsaWNrKToKKyAgICAg
ICAgQWRkZWQgYSBGSVhNRS4KKworICAgICAgICAqIGxvYWRlci9Eb2N1bWVudExvYWRlci5jcHA6
IChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6c3RhcnRMb2FkaW5nTWFpblJlc291cmNlKToKKyAg
ICAgICAgQW1lbmRlZCBhIEZJWE1FIHdpdGggc29tZSBpbmZvcm1hdGlvbiBhYm91dCB3aHkgdGhp
cyBjYWxsIG1heSBzdGlsbCBiZSBuZWVkZWQuCisKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2Fk
ZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVMb2FkZXI6OmxvYWRVUkxJbnRvQ2hpbGRGcmFtZSk6IFBhc3MgYW4gZXhwbGljaXQg
YXJndW1lbnQgZm9yIHVuY2hhbmdlZCBjYWNoaW5nIGJlaGF2aW9yLgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVMb2FkZXI6OnJlbG9hZFdpdGhPdmVycmlkZUVuY29kaW5nKTogQWRkZWQgYSBGSVhN
RS4gVGhpcyBmdW5jdGlvbgorICAgICAgICBjYW4gc2lsZW50bHkgcmUtc3VibWl0IGEgZm9ybS4K
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjphZGRFeHRyYUZpZWxkc1RvTWFpblJlc291
cmNlUmVxdWVzdCk6IEFkZGVkIGEgRklYTUUgYWJvdXQKKyAgICAgICAgYW4gaW5jb3JyZWN0IHVz
ZSBvZiBjdXJyZW50IGxvYWQgdHlwZS4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjph
ZGRFeHRyYUZpZWxkc1RvUmVxdWVzdCk6IE1ha2Ugc3VyZSB0aGF0IGEgY29ycmVjdCBjYWNoaW5n
CisgICAgICAgIHBvbGljeSBpcyB1c2VkIGZvciBzdWJyZXNvdXJjZXMgZXZlbiBpZiBtYWluIHJl
c291cmNlIHdhcyBsb2FkZWQgZnJvbSBjYWNoZS4gV2UKKyAgICAgICAgZGlkbid0IG5lZWQgdGhh
dCBiZWZvcmUgYmVjYXVzZSBpbml0aWFsIHJlcXVlc3QgaGFkIHdyb25nIGV4dHJhIGZpZWxkcyBk
dWUgdG8gYSB1c2UKKyAgICAgICAgb2YgbV9sb2FkVHlwZSB3aGVuIGl0IHdhcyBmaXJzdCBjYWxs
ZWQuCisgICAgICAgIFJlbW92ZWQgY29kZSB0byBjaGFuZ2UgY2FjaGluZyBwb2xpY3kgZm9yIGIv
ZiBuYXZpZ2F0aW9ucy4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdAorICAgICAgICBoYXZlIGVub3Vn
aCBjb250ZXh0IHRvIGRlY2lkZSB3aGF0IHRoZSBwb2xpY3kgc2hvdWxkIGJlLgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVMb2FkZXI6OmxvYWREaWZmZXJlbnREb2N1bWVudEl0ZW0pOiBBZGRlZCBh
biBhcmd1bWVudCB0ZWxsaW5nIHRoZQorICAgICAgICBmdW5jdGlvbiB3aGV0aGVyIGl0IHNob3Vs
ZCBhdHRlbXB0IGxvYWRpbmcgZnJvbSBjYWNoZS4gSXQgc2hvdWxkIGRvIHRoYXQgb24gZmlyc3QK
KyAgICAgICAgYXR0ZW1wdCB0byBuYXZpZ2F0ZSB0byBhIGZvcm0gc3VibWlzc2lvbiByZXN1bHQs
IGJ1dCBub3QgaWYgdGhhdCBmYWlsZWQuCisgICAgICAgIFBhc3MgYSBjb3JyZWN0IGxvYWRUeXBl
IC0gbV9sb2FkVHlwZSBpcyBvbmUgZm9yIF9wcmV2aW91c18gbG9hZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lTG9hZGVyOjpsb2FkSXRlbSk6IFBhc3MgYW4gZXhwbGljaXQgYXJndW1lbnQgZm9y
IHVuY2hhbmdlZCBjYWNoaW5nIGJlaGF2aW9yLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2Fk
ZXI6OnJldHJ5QWZ0ZXJGYWlsZWRDYWNoZU9ubHlNYWluUmVzb3VyY2VMb2FkKTogQWRkZWQuCisK
KyAgICAgICAgKiBsb2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcDogKFdlYkNvcmU6Ok1haW5S
ZXNvdXJjZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQpOgorICAgICAgICBSZW1vdmVkIGEgY2hlY2sg
Zm9yIG1fcmVzb3VyY2UgYmVpbmcgbnVsbCwgYmVjYXVzZSB3ZSB3ZXJlIGltbWVkaWF0ZWx5IGRl
ZmVmZXJlbmNpbmcKKyAgICAgICAgaXQgYW55d2F5LgorICAgICAgICBDYWxsIHJldHJ5QWZ0ZXJG
YWlsZWRDYWNoZU9ubHlNYWluUmVzb3VyY2VMb2FkKCkgdG8gbGV0IEZyYW1lTG9hZGVyIHJlc3Rh
cnQgdGhlIG5hdmlnYXRpb24uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNl
SGFuZGxlLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNl
SGFuZGxlQmxhY2tCZXJyeS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9SZXNv
dXJjZUhhbmRsZUNGTmV0LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVt
L1Jlc291cmNlSGFuZGxlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVz
b3VyY2VIYW5kbGVDdXJsLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNv
dXJjZUhhbmRsZU1hYy5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3F0L1Jlc291cmNl
SGFuZGxlUXQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhh
bmRsZVNvdXAuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvd2luL1Jlc291cmNlSGFu
ZGxlV2luLmNwcDoKKyAgICAgICAgUmVtb3ZlZCB3aWxsTG9hZEZyb21DYWNoZSgpIC0gdGhlIG5l
dyBsb2dpYyBpcyBjcm9zcy1wbGF0Zm9ybS4KKwogMjAxMy0wMS0wNCAgSm9zaHVhIEJlbGwgIDxq
c2JlbGxAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGZpeCBBcHBsZSBXaW4g
YnVpbGQgZm9sbG93aW5nIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzEzODgzOApJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAJKHJldmlzaW9u
IDEzODcxMSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MTIsNiArNTEyLDcgQEAgdm9pZCBIVE1MQW5jaG9yRWxlbWVudDo6
aGFuZGxlQ2xpY2soRXZlbgogICAgIGlmIChoYXNBdHRyaWJ1dGUoZG93bmxvYWRBdHRyKSkgewog
ICAgICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChrdXJsKTsKIAorICAgICAgICAvLyBGSVhN
RTogV2h5IGFyZSB3ZSBub3QgY2FsbGluZyBhZGRFeHRyYUZpZWxkc1RvTWFpblJlc291cmNlUmVx
dWVzdCgpIGlmIHRoaXMgY2hlY2sgZmFpbHM/IEl0IHNldHMgbWFueSBpbXBvcnRhbnQgaGVhZGVy
IGZpZWxkcy4KICAgICAgICAgaWYgKCFoYXNSZWwoUmVsYXRpb25Ob1JlZmVycmVyKSkgewogICAg
ICAgICAgICAgU3RyaW5nIHJlZmVycmVyID0gU2VjdXJpdHlQb2xpY3k6OmdlbmVyYXRlUmVmZXJy
ZXJIZWFkZXIoZG9jdW1lbnQoKS0+cmVmZXJyZXJQb2xpY3koKSwga3VybCwgZnJhbWUtPmxvYWRl
cigpLT5vdXRnb2luZ1JlZmVycmVyKCkpOwogICAgICAgICAgICAgaWYgKCFyZWZlcnJlci5pc0Vt
cHR5KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAJKHJl
dmlzaW9uIDEzODcxMSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg4NCw2ICs4ODQsOCBAQCB2b2lkIERvY3VtZW50TG9hZGVy
OjpzdGFydExvYWRpbmdNYWluUmVzCiAKICAgICAvLyBGSVhNRTogSXMgdGhlcmUgYW55IHdheSB0
aGUgZXh0cmEgZmllbGRzIGNvdWxkIGhhdmUgbm90IGJlZW4gYWRkZWQgYnkgbm93PwogICAgIC8v
IElmIG5vdCwgaXQgd291bGQgYmUgZ3JlYXQgdG8gcmVtb3ZlIHRoaXMgbGluZSBvZiBjb2RlLgor
ICAgIC8vIE5vdGUgdGhhdCBjdXJyZW50bHksIHNvbWUgcmVxdWVzdHMgbWF5IGhhdmUgaW5jb3Jy
ZWN0IGV4dHJhIGZpZWxkcyBldmVuIGlmIHRoaXMgZnVuY3Rpb24gaGFzIGJlZW4gY2FsbGVkLAor
ICAgIC8vIGJlY2F1c2Ugd2UgcGFzcyBhIHdyb25nIGxvYWRUeXBlIChzZWUgRklYTUUgaW4gYWRk
RXh0cmFGaWVsZHNUb01haW5SZXNvdXJjZVJlcXVlc3QoKSkuCiAgICAgZnJhbWVMb2FkZXIoKS0+
YWRkRXh0cmFGaWVsZHNUb01haW5SZXNvdXJjZVJlcXVlc3QobV9yZXF1ZXN0KTsKICAgICBtX21h
aW5SZXNvdXJjZUxvYWRlci0+bG9hZChtX3JlcXVlc3QsIG1fc3Vic3RpdHV0ZURhdGEpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDEzODcxMSkK
KysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg1Miw3ICs4NTIsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkVVJMSW50b0NoaWxkRnJh
bWUoCiAgICAgICAgICYmICFtX2ZyYW1lLT5kb2N1bWVudCgpLT5sb2FkRXZlbnRGaW5pc2hlZCgp
KSB7CiAgICAgICAgIEhpc3RvcnlJdGVtKiBjaGlsZEl0ZW0gPSBwYXJlbnRJdGVtLT5jaGlsZEl0
ZW1XaXRoVGFyZ2V0KGNoaWxkRnJhbWUtPnRyZWUoKS0+dW5pcXVlTmFtZSgpKTsKICAgICAgICAg
aWYgKGNoaWxkSXRlbSkgewotICAgICAgICAgICAgY2hpbGRGcmFtZS0+bG9hZGVyKCktPmxvYWRE
aWZmZXJlbnREb2N1bWVudEl0ZW0oY2hpbGRJdGVtLCBsb2FkVHlwZSgpKTsKKyAgICAgICAgICAg
IGNoaWxkRnJhbWUtPmxvYWRlcigpLT5sb2FkRGlmZmVyZW50RG9jdW1lbnRJdGVtKGNoaWxkSXRl
bSwgbG9hZFR5cGUoKSwgTWF5QXR0ZW1wdENhY2hlT25seUxvYWRGb3JGb3JtU3VibWlzc2lvbkl0
ZW0pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMTQ2MSw2ICsx
NDYxLDggQEAgdm9pZCBGcmFtZUxvYWRlcjo6cmVsb2FkV2l0aE92ZXJyaWRlRW5jbwogICAgIGlm
ICghdW5yZWFjaGFibGVVUkwuaXNFbXB0eSgpKQogICAgICAgICByZXF1ZXN0LnNldFVSTCh1bnJl
YWNoYWJsZVVSTCk7CiAKKyAgICAvLyBGSVhNRTogSWYgdGhlIHJlc291cmNlIGlzIGEgcmVzdWx0
IG9mIGZvcm0gc3VibWlzc2lvbiBhbmQgaXMgbm90IGNhY2hlZCwgdGhlIGZvcm0gd2lsbCBiZSBz
aWxlbnRseSByZXN1Ym1pdHRlZC4KKyAgICAvLyBXZSBzaG91bGQgYXNrIHRoZSB1c2VyIGZvciBj
b25maXJtYXRpb24gaW4gdGhpcyBjYXNlLgogICAgIHJlcXVlc3Quc2V0Q2FjaGVQb2xpY3koUmV0
dXJuQ2FjaGVEYXRhRWxzZUxvYWQpOwogCiAgICAgUmVmUHRyPERvY3VtZW50TG9hZGVyPiBsb2Fk
ZXIgPSBtX2NsaWVudC0+Y3JlYXRlRG9jdW1lbnRMb2FkZXIocmVxdWVzdCwgZGVmYXVsdFN1YnN0
aXR1dGVEYXRhRm9yVVJMKHJlcXVlc3QudXJsKCkpKTsKQEAgLTI0MTgsMTMgKzI0MjAsMTUgQEAg
dm9pZCBGcmFtZUxvYWRlcjo6YWRkRXh0cmFGaWVsZHNUb1N1YnJlcwogCiB2b2lkIEZyYW1lTG9h
ZGVyOjphZGRFeHRyYUZpZWxkc1RvTWFpblJlc291cmNlUmVxdWVzdChSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QpCiB7CisgICAgLy8gRklYTUU6IFVzaW5nIG1fbG9hZFR5cGUgc2VlbXMgd3Jvbmcg
Zm9yIHNvbWUgY2FsbGVycy4KKyAgICAvLyBJZiB3ZSBhcmUgb25seSBwcmVwYXJpbmcgdG8gbG9h
ZCB0aGUgbWFpbiByZXNvdXJjZSwgdGhhdCBpcyBwcmV2aW91cyBsb2FkJ3MgbG9hZCB0eXBlIQog
ICAgIGFkZEV4dHJhRmllbGRzVG9SZXF1ZXN0KHJlcXVlc3QsIG1fbG9hZFR5cGUsIHRydWUpOwog
fQogCiB2b2lkIEZyYW1lTG9hZGVyOjphZGRFeHRyYUZpZWxkc1RvUmVxdWVzdChSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsIEZyYW1lTG9hZFR5cGUgbG9hZFR5cGUsIGJvb2wgbWFpblJlc291cmNl
KQogewogICAgIC8vIERvbid0IHNldCB0aGUgY29va2llIHBvbGljeSBVUkwgaWYgaXQncyBhbHJl
YWR5IGJlZW4gc2V0LgotICAgIC8vIEJ1dCBtYWtlIHN1cmUgdG8gc2V0IGl0IG9uIGFsbCByZXF1
ZXN0cywgYXMgaXQgaGFzIHNpZ25pZmljYW5jZSBiZXlvbmQgdGhlIGNvb2tpZSBwb2xpY3kgZm9y
IGFsbCBwcm90b2NvbHMgKDxyZGFyOi8vcHJvYmxlbS82NjE2NjY0PikuCisgICAgLy8gQnV0IG1h
a2Ugc3VyZSB0byBzZXQgaXQgb24gYWxsIHJlcXVlc3RzIHJlZ2FyZGxlc3Mgb2YgcHJvdG9jb2ws
IGFzIGl0IGhhcyBzaWduaWZpY2FuY2UgYmV5b25kIHRoZSBjb29raWUgcG9saWN5ICg8cmRhcjov
L3Byb2JsZW0vNjYxNjY2ND4pLgogICAgIGlmIChyZXF1ZXN0LmZpcnN0UGFydHlGb3JDb29raWVz
KCkuaXNFbXB0eSgpKSB7CiAgICAgICAgIGlmIChtYWluUmVzb3VyY2UgJiYgaXNMb2FkaW5nTWFp
bkZyYW1lKCkpCiAgICAgICAgICAgICByZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKHJl
cXVlc3QudXJsKCkpOwpAQCAtMjQzNywyNiArMjQ0MSwzMSBAQCB2b2lkIEZyYW1lTG9hZGVyOjph
ZGRFeHRyYUZpZWxkc1RvUmVxdWVzCiAgICAgICAgIHJldHVybjsKIAogICAgIGFwcGx5VXNlckFn
ZW50KHJlcXVlc3QpOwotICAgIAotICAgIC8vIElmIHdlIGluaGVyaXQgY2FjaGUgcG9saWN5IGZy
b20gYSBtYWluIHJlc291cmNlLCB3ZSB1c2UgdGhlIERvY3VtZW50TG9hZGVyJ3MgCi0gICAgLy8g
b3JpZ2luYWwgcmVxdWVzdCBjYWNoZSBwb2xpY3kgZm9yIHR3byByZWFzb25zOgotICAgIC8vIDEu
IEZvciBQT1NUIHJlcXVlc3RzLCB3ZSBtdXRhdGUgdGhlIGNhY2hlIHBvbGljeSBmb3IgdGhlIG1h
aW4gcmVzb3VyY2UsCi0gICAgLy8gICAgYnV0IHdlIGRvIG5vdCB3YW50IHRoaXMgdG8gYXBwbHkg
dG8gc3VicmVzb3VyY2VzCi0gICAgLy8gMi4gRGVsZWdhdGVzIHRoYXQgbW9kaWZ5IHRoZSBjYWNo
ZSBwb2xpY3kgdXNpbmcgd2lsbFNlbmRSZXF1ZXN0OiBzaG91bGQKLSAgICAvLyAgICBub3QgYWZm
ZWN0IGFueSBvdGhlciByZXNvdXJjZXMuIFN1Y2ggY2hhbmdlcyBuZWVkIHRvIGJlIGRvbmUKLSAg
ICAvLyAgICBwZXIgcmVxdWVzdC4KKwogICAgIGlmICghbWFpblJlc291cmNlKSB7CiAgICAgICAg
IGlmIChyZXF1ZXN0LmlzQ29uZGl0aW9uYWwoKSkKICAgICAgICAgICAgIHJlcXVlc3Quc2V0Q2Fj
aGVQb2xpY3koUmVsb2FkSWdub3JpbmdDYWNoZURhdGEpOwotICAgICAgICBlbHNlIGlmIChkb2N1
bWVudExvYWRlcigpLT5pc0xvYWRpbmdJbkFQSVNlbnNlKCkpCi0gICAgICAgICAgICByZXF1ZXN0
LnNldENhY2hlUG9saWN5KGRvY3VtZW50TG9hZGVyKCktPm9yaWdpbmFsUmVxdWVzdCgpLmNhY2hl
UG9saWN5KCkpOwotICAgICAgICBlbHNlCisgICAgICAgIGVsc2UgaWYgKGRvY3VtZW50TG9hZGVy
KCktPmlzTG9hZGluZ0luQVBJU2Vuc2UoKSkgeworICAgICAgICAgICAgLy8gSWYgd2UgaW5oZXJp
dCBjYWNoZSBwb2xpY3kgZnJvbSBhIG1haW4gcmVzb3VyY2UsIHdlIHVzZSB0aGUgRG9jdW1lbnRM
b2FkZXIncworICAgICAgICAgICAgLy8gb3JpZ2luYWwgcmVxdWVzdCBjYWNoZSBwb2xpY3kgZm9y
IHR3byByZWFzb25zOgorICAgICAgICAgICAgLy8gMS4gRm9yIFBPU1QgcmVxdWVzdHMsIHdlIG11
dGF0ZSB0aGUgY2FjaGUgcG9saWN5IGZvciB0aGUgbWFpbiByZXNvdXJjZSwKKyAgICAgICAgICAg
IC8vICAgIGJ1dCB3ZSBkbyBub3Qgd2FudCB0aGlzIHRvIGFwcGx5IHRvIHN1YnJlc291cmNlcwor
ICAgICAgICAgICAgLy8gMi4gRGVsZWdhdGVzIHRoYXQgbW9kaWZ5IHRoZSBjYWNoZSBwb2xpY3kg
dXNpbmcgd2lsbFNlbmRSZXF1ZXN0OiBzaG91bGQKKyAgICAgICAgICAgIC8vICAgIG5vdCBhZmZl
Y3QgYW55IG90aGVyIHJlc291cmNlcy4gU3VjaCBjaGFuZ2VzIG5lZWQgdG8gYmUgZG9uZQorICAg
ICAgICAgICAgLy8gICAgcGVyIHJlcXVlc3QuCisgICAgICAgICAgICBSZXNvdXJjZVJlcXVlc3RD
YWNoZVBvbGljeSBtYWluRG9jdW1lbnRPcmlnaW5hbENhY2hlUG9saWN5ID0gZG9jdW1lbnRMb2Fk
ZXIoKS0+b3JpZ2luYWxSZXF1ZXN0KCkuY2FjaGVQb2xpY3koKTsKKyAgICAgICAgICAgIC8vIEJh
Y2stZm9yd2FyZCBuYXZpZ2F0aW9ucyB0cnkgdG8gbG9hZCBtYWluIHJlc291cmNlIGZyb20gY2Fj
aGUgb25seSB0byBhdm9pZCByZS1zdWJtaXR0aW5nIGZvcm0gZGF0YSwgYW5kIHN0YXJ0IG92ZXIg
KHdpdGggYSB3YXJuaW5nIGRpYWxvZykgaWYgdGhhdCBmYWlscy4KKyAgICAgICAgICAgIC8vIFRo
aXMgcG9saWN5IGlzIHNldCBvbiBpbml0aWFsIHJlcXVlc3QgdG9vLCBidXQgc2hvdWxkIG5vdCBi
ZSBpbmhlcml0ZWQuCisgICAgICAgICAgICBSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeSBzdWJy
ZXNvdXJjZUNhY2hlUG9saWN5ID0gKG1haW5Eb2N1bWVudE9yaWdpbmFsQ2FjaGVQb2xpY3kgPT0g
UmV0dXJuQ2FjaGVEYXRhRG9udExvYWQpID8gUmV0dXJuQ2FjaGVEYXRhRWxzZUxvYWQgOiBtYWlu
RG9jdW1lbnRPcmlnaW5hbENhY2hlUG9saWN5OworICAgICAgICAgICAgcmVxdWVzdC5zZXRDYWNo
ZVBvbGljeShzdWJyZXNvdXJjZUNhY2hlUG9saWN5KTsKKyAgICAgICAgfSBlbHNlCiAgICAgICAg
ICAgICByZXF1ZXN0LnNldENhY2hlUG9saWN5KFVzZVByb3RvY29sQ2FjaGVQb2xpY3kpOworCisg
ICAgLy8gRklYTUU6IE90aGVyIEZyYW1lTG9hZGVyIGZ1bmN0aW9ucyBoYXZlIGR1cGxpY2F0ZWQg
Y29kZSBmb3Igc2V0dGluZyBjYWNoZSBwb2xpY3kgb2YgbWFpbiByZXF1ZXN0IHdoZW4gcmVsb2Fk
aW5nLgorICAgIC8vIEl0IHNlZW1zIGJldHRlciB0byBtYW5hZ2UgaXQgZXhwbGljaXRseSB0aGFu
IHRvIGhpZGUgdGhlIGxvZ2ljIGluc2lkZSBhZGRFeHRyYUZpZWxkc1RvUmVxdWVzdCgpLgogICAg
IH0gZWxzZSBpZiAobG9hZFR5cGUgPT0gRnJhbWVMb2FkVHlwZVJlbG9hZCB8fCBsb2FkVHlwZSA9
PSBGcmFtZUxvYWRUeXBlUmVsb2FkRnJvbU9yaWdpbiB8fCByZXF1ZXN0LmlzQ29uZGl0aW9uYWwo
KSkKICAgICAgICAgcmVxdWVzdC5zZXRDYWNoZVBvbGljeShSZWxvYWRJZ25vcmluZ0NhY2hlRGF0
YSk7Ci0gICAgZWxzZSBpZiAoaXNCYWNrRm9yd2FyZExvYWRUeXBlKGxvYWRUeXBlKSAmJiBtX3N0
YXRlTWFjaGluZS5jb21taXR0ZWRGaXJzdFJlYWxEb2N1bWVudExvYWQoKSkKLSAgICAgICAgcmVx
dWVzdC5zZXRDYWNoZVBvbGljeShSZXR1cm5DYWNoZURhdGFFbHNlTG9hZCk7Ci0gICAgICAgIAor
CiAgICAgaWYgKHJlcXVlc3QuY2FjaGVQb2xpY3koKSA9PSBSZWxvYWRJZ25vcmluZ0NhY2hlRGF0
YSkgewogICAgICAgICBpZiAobG9hZFR5cGUgPT0gRnJhbWVMb2FkVHlwZVJlbG9hZCkKICAgICAg
ICAgICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKCJDYWNoZS1Db250cm9sIiwgIm1heC1h
Z2U9MCIpOwpAQCAtMzAzMyw3ICszMDQyLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9hZFNhbWVE
b2N1bWVudEl0ZW0oSAogLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIHJlYWxseSBiZSBz
cGxpdCBpbnRvIGEgY291cGxlIHBpZWNlcywgc29tZSBvZgogLy8gd2hpY2ggc2hvdWxkIGJlIG1l
dGhvZHMgb2YgSGlzdG9yeUNvbnRyb2xsZXIgYW5kIHNvbWUgb2Ygd2hpY2ggc2hvdWxkIGJlCiAv
LyBtZXRob2RzIG9mIEZyYW1lTG9hZGVyLgotdm9pZCBGcmFtZUxvYWRlcjo6bG9hZERpZmZlcmVu
dERvY3VtZW50SXRlbShIaXN0b3J5SXRlbSogaXRlbSwgRnJhbWVMb2FkVHlwZSBsb2FkVHlwZSkK
K3ZvaWQgRnJhbWVMb2FkZXI6OmxvYWREaWZmZXJlbnREb2N1bWVudEl0ZW0oSGlzdG9yeUl0ZW0q
IGl0ZW0sIEZyYW1lTG9hZFR5cGUgbG9hZFR5cGUsIEZvcm1TdWJtaXNzaW9uQ2FjaGVMb2FkUG9s
aWN5IGNhY2hlTG9hZFBvbGljeSkKIHsKICAgICAvLyBSZW1lbWJlciB0aGlzIGl0ZW0gc28gd2Ug
Y2FuIHRyYXZlcnNlIGFueSBjaGlsZCBpdGVtcyBhcyBjaGlsZCBmcmFtZXMgbG9hZAogICAgIGhp
c3RvcnkoKS0+c2V0UHJvdmlzaW9uYWxJdGVtKGl0ZW0pOwpAQCAtMzA2OCw3ICszMDc3LDcgQEAg
dm9pZCBGcmFtZUxvYWRlcjo6bG9hZERpZmZlcmVudERvY3VtZW50SQogCiAgICAgICAgIC8vIE1h
a2Ugc3VyZSB0byBhZGQgZXh0cmEgZmllbGRzIHRvIHRoZSByZXF1ZXN0IGFmdGVyIHRoZSBPcmln
aW4gaGVhZGVyIGlzIGFkZGVkIGZvciB0aGUgRm9ybURhdGEgY2FzZS4KICAgICAgICAgLy8gU2Vl
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjE5NCBmb3IgbW9yZSBk
aXNjdXNzaW9uLgotICAgICAgICBhZGRFeHRyYUZpZWxkc1RvUmVxdWVzdChyZXF1ZXN0LCBtX2xv
YWRUeXBlLCB0cnVlKTsKKyAgICAgICAgYWRkRXh0cmFGaWVsZHNUb1JlcXVlc3QocmVxdWVzdCwg
bG9hZFR5cGUsIHRydWUpOwogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IFNsaWdodCBoYWNr
IHRvIHRlc3QgaWYgdGhlIE5TVVJMIGNhY2hlIGNvbnRhaW5zIHRoZSBwYWdlIHdlJ3JlIGdvaW5n
IHRvLgogICAgICAgICAvLyBXZSB3YW50IHRvIGtub3cgdGhpcyBiZWZvcmUgdGFsa2luZyB0byB0
aGUgcG9saWN5IGRlbGVnYXRlLCBzaW5jZSBpdCBhZmZlY3RzIHdoZXRoZXIgCkBAIC0zMDc4LDEw
ICszMDg3LDExIEBAIHZvaWQgRnJhbWVMb2FkZXI6OmxvYWREaWZmZXJlbnREb2N1bWVudEkKICAg
ICAgICAgLy8gaGF2ZSB0aGUgaXRlbSB2YW5pc2ggd2hlbiB3ZSB0cnkgdG8gdXNlIGl0IGluIHRo
ZSBlbnN1aW5nIG5hdi4gIFRoaXMgc2hvdWxkIGJlCiAgICAgICAgIC8vIGV4dHJlbWVseSByYXJl
LCBidXQgaW4gdGhhdCBjYXNlIHRoZSB1c2VyIHdpbGwgZ2V0IGFuIGVycm9yIG9uIHRoZSBuYXZp
Z2F0aW9uLgogICAgICAgICAKLSAgICAgICAgaWYgKFJlc291cmNlSGFuZGxlOjp3aWxsTG9hZEZy
b21DYWNoZShyZXF1ZXN0LCBtX2ZyYW1lKSkKKyAgICAgICAgaWYgKGNhY2hlTG9hZFBvbGljeSA9
PSBNYXlBdHRlbXB0Q2FjaGVPbmx5TG9hZEZvckZvcm1TdWJtaXNzaW9uSXRlbSkgeworICAgICAg
ICAgICAgcmVxdWVzdC5zZXRDYWNoZVBvbGljeShSZXR1cm5DYWNoZURhdGFEb250TG9hZCk7CiAg
ICAgICAgICAgICBhY3Rpb24gPSBOYXZpZ2F0aW9uQWN0aW9uKHJlcXVlc3QsIGxvYWRUeXBlLCBm
YWxzZSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgcmVxdWVzdC5zZXRDYWNoZVBvbGlj
eShSZWxvYWRJZ25vcmluZ0NhY2hlRGF0YSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICByZXF1ZXN0LnNldENhY2hlUG9saWN5KFJldHVybkNhY2hlRGF0YUVsc2VMb2FkKTsKICAgICAg
ICAgICAgIGFjdGlvbiA9IE5hdmlnYXRpb25BY3Rpb24ocmVxdWVzdCwgTmF2aWdhdGlvblR5cGVG
b3JtUmVzdWJtaXR0ZWQpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKQEAgLTMwOTUsNiArMzEw
NSw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmxvYWREaWZmZXJlbnREb2N1bWVudEkKICAgICAgICAg
ICAgIGNhc2UgRnJhbWVMb2FkVHlwZUluZGV4ZWRCYWNrRm9yd2FyZDoKICAgICAgICAgICAgICAg
ICAvLyBJZiB0aGUgZmlyc3QgbG9hZCB3aXRoaW4gYSBmcmFtZSBpcyBhIG5hdmlnYXRpb24gd2l0
aGluIGEgYmFjay9mb3J3YXJkIGxpc3QgdGhhdCB3YXMgYXR0YWNoZWQgCiAgICAgICAgICAgICAg
ICAgLy8gd2l0aG91dCBhbnkgb2YgdGhlIGl0ZW1zIGJlaW5nIGxvYWRlZCB0aGVuIHdlIHNob3Vs
ZCB1c2UgdGhlIGRlZmF1bHQgY2FjaGluZyBwb2xpY3kgKDxyZGFyOi8vcHJvYmxlbS84MTMxMzU1
PikuCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdoeSBzcGVjaWFsIGNhc2UgaHR0cHMgaGVy
ZT8KICAgICAgICAgICAgICAgICBpZiAobV9zdGF0ZU1hY2hpbmUuY29tbWl0dGVkRmlyc3RSZWFs
RG9jdW1lbnRMb2FkKCkgJiYgIWl0ZW1VUkwucHJvdG9jb2xJcygiaHR0cHMiKSkKICAgICAgICAg
ICAgICAgICAgICAgcmVxdWVzdC5zZXRDYWNoZVBvbGljeShSZXR1cm5DYWNoZURhdGFFbHNlTG9h
ZCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zMTA2LDcgKzMxMTcsNyBAQCB2b2lkIEZy
YW1lTG9hZGVyOjpsb2FkRGlmZmVyZW50RG9jdW1lbnRJCiAgICAgICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KIAotICAgICAgICBhZGRFeHRyYUZpZWxkc1RvUmVx
dWVzdChyZXF1ZXN0LCBtX2xvYWRUeXBlLCB0cnVlKTsKKyAgICAgICAgYWRkRXh0cmFGaWVsZHNU
b1JlcXVlc3QocmVxdWVzdCwgbG9hZFR5cGUsIHRydWUpOwogCiAgICAgICAgIFJlc291cmNlUmVx
dWVzdCByZXF1ZXN0Rm9yT3JpZ2luYWxVUkwocmVxdWVzdCk7CiAgICAgICAgIHJlcXVlc3RGb3JP
cmlnaW5hbFVSTC5zZXRVUkwoaXRlbU9yaWdpbmFsVVJMKTsKQEAgLTMxMjYsNyArMzEzNywyMyBA
QCB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkSXRlbShIaXN0b3J5SXRlbSogCiAgICAgaWYgKHNhbWVE
b2N1bWVudE5hdmlnYXRpb24pCiAgICAgICAgIGxvYWRTYW1lRG9jdW1lbnRJdGVtKGl0ZW0pOwog
ICAgIGVsc2UKLSAgICAgICAgbG9hZERpZmZlcmVudERvY3VtZW50SXRlbShpdGVtLCBsb2FkVHlw
ZSk7CisgICAgICAgIGxvYWREaWZmZXJlbnREb2N1bWVudEl0ZW0oaXRlbSwgbG9hZFR5cGUsIE1h
eUF0dGVtcHRDYWNoZU9ubHlMb2FkRm9yRm9ybVN1Ym1pc3Npb25JdGVtKTsKK30KKwordm9pZCBG
cmFtZUxvYWRlcjo6cmV0cnlBZnRlckZhaWxlZENhY2hlT25seU1haW5SZXNvdXJjZUxvYWQoKQor
eworICAgIEFTU0VSVChtX3N0YXRlID09IEZyYW1lU3RhdGVQcm92aXNpb25hbCk7CisgICAgQVNT
RVJUKCFtX2xvYWRpbmdGcm9tQ2FjaGVkUGFnZSk7CisgICAgLy8gV2Ugb25seSB1c2UgY2FjaGUt
b25seSBsb2FkcyB0byBhdm9pZCByZXN1Ym1pdHRpbmcgZm9ybXMuCisgICAgQVNTRVJUKGlzQmFj
a0ZvcndhcmRMb2FkVHlwZShtX2xvYWRUeXBlKSk7CisgICAgQVNTRVJUKG1faGlzdG9yeS5wcm92
aXNpb25hbEl0ZW0oKS0+Zm9ybURhdGEoKSk7CisgICAgQVNTRVJUKG1faGlzdG9yeS5wcm92aXNp
b25hbEl0ZW0oKSA9PSBtX3JlcXVlc3RlZEhpc3RvcnlJdGVtLmdldCgpKTsKKworICAgIEZyYW1l
TG9hZFR5cGUgbG9hZFR5cGUgPSBtX2xvYWRUeXBlOworICAgIEhpc3RvcnlJdGVtKiBpdGVtID0g
bV9oaXN0b3J5LnByb3Zpc2lvbmFsSXRlbSgpOworCisgICAgc3RvcEFsbExvYWRlcnMoU2hvdWxk
Tm90Q2xlYXJQcm92aXNpb25hbEl0ZW0pOworICAgIGxvYWREaWZmZXJlbnREb2N1bWVudEl0ZW0o
aXRlbSwgbG9hZFR5cGUsIE1heU5vdEF0dGVtcHRDYWNoZU9ubHlMb2FkRm9yRm9ybVN1Ym1pc3Np
b25JdGVtKTsKIH0KIAogUmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlcjo6Y2FuY2VsbGVkRXJyb3Io
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KSBjb25zdApJbmRleDogU291cmNlL1dlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmgJKHJldmlzaW9uIDEzODcxMSkKKysrIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNiArMTIzLDggQEAgcHVi
bGljOgogICAgIHZvaWQgbG9hZEl0ZW0oSGlzdG9yeUl0ZW0qLCBGcmFtZUxvYWRUeXBlKTsKICAg
ICBIaXN0b3J5SXRlbSogcmVxdWVzdGVkSGlzdG9yeUl0ZW0oKSBjb25zdCB7IHJldHVybiBtX3Jl
cXVlc3RlZEhpc3RvcnlJdGVtLmdldCgpOyB9CiAKKyAgICB2b2lkIHJldHJ5QWZ0ZXJGYWlsZWRD
YWNoZU9ubHlNYWluUmVzb3VyY2VMb2FkKCk7CisKICAgICBzdGF0aWMgdm9pZCByZXBvcnRMb2Nh
bExvYWRGYWlsZWQoRnJhbWUqLCBjb25zdCBTdHJpbmcmIHVybCk7CiAKICAgICAvLyBGSVhNRTog
VGhlc2UgYXJlIGFsbCBmdW5jdGlvbnMgd2hpY2ggc3RvcCBsb2Fkcy4gV2UgaGF2ZSB0b28gbWFu
eS4KQEAgLTI4MiwxMiArMjg0LDE3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlcG9ydE1lbW9yeVVz
YWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKIAogcHJpdmF0ZToKKyAgICBlbnVtIEZvcm1T
dWJtaXNzaW9uQ2FjaGVMb2FkUG9saWN5IHsKKyAgICAgICAgTWF5QXR0ZW1wdENhY2hlT25seUxv
YWRGb3JGb3JtU3VibWlzc2lvbkl0ZW0sCisgICAgICAgIE1heU5vdEF0dGVtcHRDYWNoZU9ubHlM
b2FkRm9yRm9ybVN1Ym1pc3Npb25JdGVtCisgICAgfTsKKwogICAgIGJvb2wgYWxsQ2hpbGRyZW5B
cmVDb21wbGV0ZSgpIGNvbnN0OyAvLyBpbW1lZGlhdGUgY2hpbGRyZW4sIG5vdCBhbGwgZGVzY2Vu
ZGFudHMKIAogICAgIHZvaWQgY2hlY2tUaW1lckZpcmVkKFRpbWVyPEZyYW1lTG9hZGVyPiopOwog
ICAgIAogICAgIHZvaWQgbG9hZFNhbWVEb2N1bWVudEl0ZW0oSGlzdG9yeUl0ZW0qKTsKLSAgICB2
b2lkIGxvYWREaWZmZXJlbnREb2N1bWVudEl0ZW0oSGlzdG9yeUl0ZW0qLCBGcmFtZUxvYWRUeXBl
KTsKKyAgICB2b2lkIGxvYWREaWZmZXJlbnREb2N1bWVudEl0ZW0oSGlzdG9yeUl0ZW0qLCBGcmFt
ZUxvYWRUeXBlLCBGb3JtU3VibWlzc2lvbkNhY2hlTG9hZFBvbGljeSk7CiAgICAgCiAgICAgdm9p
ZCBsb2FkUHJvdmlzaW9uYWxJdGVtRnJvbUNhY2hlZFBhZ2UoKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDEzODcxMSkK
KysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NDgsMTEgKzU0OCwxNyBAQCB2b2lkIE1haW5SZXNvdXJjZUxvYWRlcjo6ZGlk
RmluaXNoTG9hZGluCiB2b2lkIE1haW5SZXNvdXJjZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQoQ2Fj
aGVkUmVzb3VyY2UqIHJlc291cmNlKQogewogICAgIEFTU0VSVF9VTlVTRUQocmVzb3VyY2UsIG1f
cmVzb3VyY2UgPT0gcmVzb3VyY2UpOwotICAgIGlmICghbV9yZXNvdXJjZSB8fCAoIW1fcmVzb3Vy
Y2UtPmVycm9yT2NjdXJyZWQoKSAmJiAhbV9yZXNvdXJjZS0+d2FzQ2FuY2VsZWQoKSkpIHsKKyAg
ICBBU1NFUlQobV9yZXNvdXJjZSk7CisgICAgaWYgKCFtX3Jlc291cmNlLT5lcnJvck9jY3VycmVk
KCkgJiYgIW1fcmVzb3VyY2UtPndhc0NhbmNlbGVkKCkpIHsKICAgICAgICAgZGlkRmluaXNoTG9h
ZGluZyhtX3Jlc291cmNlLT5sb2FkRmluaXNoVGltZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAorICAgIGlmIChtX2RvY3VtZW50TG9hZGVyLT5yZXF1ZXN0KCkuY2FjaGVQb2xpY3koKSA9
PSBSZXR1cm5DYWNoZURhdGFEb250TG9hZCAmJiAhbV9yZXNvdXJjZS0+d2FzQ2FuY2VsZWQoKSkg
eworICAgICAgICBmcmFtZUxvYWRlcigpLT5yZXRyeUFmdGVyRmFpbGVkQ2FjaGVPbmx5TWFpblJl
c291cmNlTG9hZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAjaWYgUExBVEZPUk0oTUFD
KSAmJiAhUExBVEZPUk0oSU9TKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49
IDEwODAKICAgICBpZiAobV9maWx0ZXIpIHsKICAgICAgICAgd2tGaWx0ZXJSZWxlYXNlKG1fZmls
dGVyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5k
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlSGFuZGxlLmgJKHJldmlzaW9uIDEzODcxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDcgKzEwNCw2
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gY3JlYXRl
KE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VIYW5k
bGVDbGllbnQqLCBib29sIGRlZmVyc0xvYWRpbmcsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmKTsK
ICAgICBzdGF0aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250
ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHMsIFJlc291cmNl
RXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKTsKIAotICAgIHN0
YXRpYyBib29sIHdpbGxMb2FkRnJvbUNhY2hlKFJlc291cmNlUmVxdWVzdCYsIEZyYW1lKik7CiAg
ICAgc3RhdGljIHZvaWQgY2FjaGVNZXRhZGF0YShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwgY29u
c3QgVmVjdG9yPGNoYXI+Jik7CiAKICAgICB2aXJ0dWFsIH5SZXNvdXJjZUhhbmRsZSgpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlSGFu
ZGxlQmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlSGFuZGxlQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9u
IDEzODcxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9S
ZXNvdXJjZUhhbmRsZUJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsMTIgKzEy
Niw2IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnBhdXNlTG9hZChib29sIHBhdXMKICAgICAgICAg
TmV0d29ya01hbmFnZXI6Omluc3RhbmNlKCktPnBhdXNlTG9hZCh0aGlzLCBwYXVzZSk7CiB9CiAK
LWJvb2wgUmVzb3VyY2VIYW5kbGU6OndpbGxMb2FkRnJvbUNhY2hlKFJlc291cmNlUmVxdWVzdCYs
IEZyYW1lKikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0K
LQogdm9pZCBSZXNvdXJjZUhhbmRsZTo6Y2FuY2VsKCkKIHsKICAgICBOZXR3b3JrTWFuYWdlcjo6
aW5zdGFuY2UoKS0+c3RvcEpvYih0aGlzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcAkocmV2
aXNpb24gMTM4NzExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNv
dXJjZUhhbmRsZUNGTmV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODA4LDIzICs4MDgsNiBAQCBi
b29sIFJlc291cmNlSGFuZGxlOjpsb2Fkc0Jsb2NrZWQoKQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotYm9vbCBSZXNvdXJjZUhhbmRsZTo6d2lsbExvYWRGcm9tQ2FjaGUoUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBGcmFtZSopCi17Ci0gICAgcmVxdWVzdC5zZXRDYWNoZVBvbGljeShSZXR1cm5D
YWNoZURhdGFEb250TG9hZCk7Ci0gICAgCi0gICAgQ0ZVUkxSZXNwb25zZVJlZiBjZlJlc3BvbnNl
ID0gMDsKLSAgICBDRkVycm9yUmVmIGNmRXJyb3IgPSAwOwotICAgIFJldGFpblB0cjxDRkRhdGFS
ZWY+IGRhdGEgPSBhZG9wdENGKENGVVJMQ29ubmVjdGlvblNlbmRTeW5jaHJvbm91c1JlcXVlc3Qo
cmVxdWVzdC5jZlVSTFJlcXVlc3QoKSwgJmNmUmVzcG9uc2UsICZjZkVycm9yLCByZXF1ZXN0LnRp
bWVvdXRJbnRlcnZhbCgpKSk7Ci0gICAgYm9vbCBjYWNoZWQgPSBjZlJlc3BvbnNlICYmICFjZkVy
cm9yOwotCi0gICAgaWYgKGNmRXJyb3IpCi0gICAgICAgIENGUmVsZWFzZShjZkVycm9yKTsKLSAg
ICBpZiAoY2ZSZXNwb25zZSkKLSAgICAgICAgQ0ZSZWxlYXNlKGNmUmVzcG9uc2UpOwotCi0gICAg
cmV0dXJuIGNhY2hlZDsKLX0KLQogI2lmIFBMQVRGT1JNKE1BQykKIHZvaWQgUmVzb3VyY2VIYW5k
bGU6OnNjaGVkdWxlKFNjaGVkdWxlUGFpciogcGFpcikKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vUmVzb3VyY2VIYW5kbGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vUmVzb3VyY2VIYW5k
bGUuY3BwCShyZXZpc2lvbiAxMzg3MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2Nocm9taXVtL1Jlc291cmNlSGFuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc3LDIy
ICsyNzcsNiBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvCiB9CiAK
IC8vIHN0YXRpYwotYm9vbCBSZXNvdXJjZUhhbmRsZTo6d2lsbExvYWRGcm9tQ2FjaGUoUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBGcmFtZSopCi17Ci0gICAgLy8gVGhpcyBtZXRob2QgaXMgdXNl
ZCB0byBkZXRlcm1pbmUgaWYgYSBQT1NUIHJlcXVlc3QgY2FuIGJlIHJlcGVhdGVkIGZyb20KLSAg
ICAvLyBjYWNoZSwgYnV0IHlvdSBjYW5ub3QgcmVhbGx5IGtub3cgdW50aWwgeW91IGFjdHVhbGx5
IHRyeSB0byByZWFkIGZyb20gdGhlCi0gICAgLy8gY2FjaGUuIEV2ZW4gaWYgd2UgY2hlY2tlZCBu
b3csIHNvbWV0aGluZyBlbHNlIGNvdWxkIGNvbWUgYWxvbmcgYW5kIHdpcGUKLSAgICAvLyBvdXQg
dGhlIGNhY2hlIGVudHJ5IGJ5IHRoZSB0aW1lIHdlIGZldGNoIGl0LgotICAgIC8vCi0gICAgLy8g
U28sIHdlIGFsd2F5cyBzYXkgeWVzIGhlcmUsIHRvIHByZXZlbnQgdGhlIEZyYW1lTG9hZGVyIGZy
b20gaW5pdGlhdGluZyBhCi0gICAgLy8gcmVsb2FkLiBUaGVuIGluIEZyYW1lTG9hZGVyQ2xpZW50
SW1wbDo6ZGlzcGF0Y2hXaWxsU2VuZFJlcXVlc3QsIHdlCi0gICAgLy8gZml4LXVwIHRoZSBjYWNo
ZSBwb2xpY3kgb2YgdGhlIHJlcXVlc3QgdG8gZm9yY2UgYSBsb2FkIGZyb20gdGhlIGNhY2hlLgot
ICAgIC8vCi0gICAgQVNTRVJUKHJlcXVlc3QuaHR0cE1ldGhvZCgpID09ICJQT1NUIik7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLS8vIHN0YXRpYwogdm9pZCBSZXNvdXJjZUhhbmRsZTo6Y2FjaGVN
ZXRhZGF0YShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgY29uc3QgVmVjdG9yPGNo
YXI+JiBkYXRhKQogewogICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y2FjaGVNZXRh
ZGF0YShyZXNwb25zZS51cmwoKSwgcmVzcG9uc2UucmVzcG9uc2VUaW1lKCksIGRhdGEuZGF0YSgp
LCBkYXRhLnNpemUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcAkocmV2aXNpb24gMTM4
NzExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFu
ZGxlQ3VybC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NiwxMiArMTY2LDYgQEAgdm9pZCBSZXNv
dXJjZUhhbmRsZTo6cGxhdGZvcm1TZXREZWZlcnNMbwogI2VuZGlmCiB9CiAKLWJvb2wgUmVzb3Vy
Y2VIYW5kbGU6OndpbGxMb2FkRnJvbUNhY2hlKFJlc291cmNlUmVxdWVzdCYsIEZyYW1lKikKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogYm9vbCBSZXNv
dXJjZUhhbmRsZTo6bG9hZHNCbG9ja2VkKCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVz
b3VyY2VIYW5kbGVNYWMubW0JKHJldmlzaW9uIDEzODcxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFuZGxlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0zNTcsMTkgKzM1Nyw2IEBAIGJvb2wgUmVzb3VyY2VIYW5kbGU6OmxvYWRzQmxvY2tlZCgpCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlc291cmNlSGFuZGxlOjp3aWxsTG9hZEZyb21D
YWNoZShSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIEZyYW1lKikKLXsKLSAgICByZXF1ZXN0LnNl
dENhY2hlUG9saWN5KFJldHVybkNhY2hlRGF0YURvbnRMb2FkKTsKLSAgICBOU1VSTFJlc3BvbnNl
ICpuc1VSTFJlc3BvbnNlID0gbmlsOwotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
LQotICAgIFtOU1VSTENvbm5lY3Rpb24gc2VuZFN5bmNocm9ub3VzUmVxdWVzdDpyZXF1ZXN0Lm5z
VVJMUmVxdWVzdCgpIHJldHVybmluZ1Jlc3BvbnNlOiZuc1VSTFJlc3BvbnNlIGVycm9yOm5pbF07
Ci0gICAgCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICAKLSAgICByZXR1cm4g
bnNVUkxSZXNwb25zZTsKLX0KLQogQ0ZTdHJpbmdSZWYgUmVzb3VyY2VIYW5kbGU6OnN5bmNocm9u
b3VzTG9hZFJ1bkxvb3BNb2RlKCkKIHsKICAgICByZXR1cm4gQ0ZTVFIoIldlYkNvcmVTeW5jaHJv
bm91c0xvYWRlclJ1bkxvb3BNb2RlIik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3F0L1Jlc291cmNlSGFuZGxlUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VIYW5kbGVRdC5jcHAJKHJldmlzaW9uIDEz
ODcxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VIYW5k
bGVRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNSwzMCArMTI1LDYgQEAgYm9vbCBSZXNvdXJj
ZUhhbmRsZTo6bG9hZHNCbG9ja2VkKCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVz
b3VyY2VIYW5kbGU6OndpbGxMb2FkRnJvbUNhY2hlKFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwg
RnJhbWUqIGZyYW1lKQotewotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIFFOZXR3b3JrQWNjZXNzTWFuYWdlciogbWFuYWdlciA9IDA7Ci0gICAgUUFic3RyYWN0
TmV0d29ya0NhY2hlKiBjYWNoZSA9IDA7Ci0gICAgaWYgKGZyYW1lLT5sb2FkZXIoKS0+bmV0d29y
a2luZ0NvbnRleHQoKSkgewotICAgICAgICBtYW5hZ2VyID0gZnJhbWUtPmxvYWRlcigpLT5uZXR3
b3JraW5nQ29udGV4dCgpLT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpOwotICAgICAgICBjYWNoZSA9
IG1hbmFnZXItPmNhY2hlKCk7Ci0gICAgfQotCi0gICAgaWYgKCFjYWNoZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgUU5ldHdvcmtDYWNoZU1ldGFEYXRhIGRhdGEgPSBjYWNoZS0+bWV0
YURhdGEocmVxdWVzdC51cmwoKSk7Ci0gICAgaWYgKGRhdGEuaXNWYWxpZCgpKSB7Ci0gICAgICAg
IHJlcXVlc3Quc2V0Q2FjaGVQb2xpY3koUmV0dXJuQ2FjaGVEYXRhRG9udExvYWQpOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHZvaWQgUmVz
b3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlh
bHMgLypzdG9yZWRDcmVkZW50aWFscyovLCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKIHsKICNpZiBFTkFCTEUoQkxP
QikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhh
bmRsZVNvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCShyZXZpc2lvbiAxMzg3MTEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTE3MywxNCArMTE3Myw2IEBAIGJvb2wgUmVzb3VyY2VIYW5kbGU6
OmxvYWRzQmxvY2tlZCgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlc291cmNlSGFu
ZGxlOjp3aWxsTG9hZEZyb21DYWNoZShSZXNvdXJjZVJlcXVlc3QmLCBGcmFtZSopCi17Ci0gICAg
Ly8gTm90IGhhdmluZyB0aGlzIGZ1bmN0aW9uIG1lYW5zIHRoYXQgd2UnbGwgYXNrIHRoZSB1c2Vy
IGFib3V0IHJlLXBvc3RpbmcgYSBmb3JtCi0gICAgLy8gZXZlbiB3aGVuIHdlIGdvIGJhY2sgdG8g
YSBwYWdlIHRoYXQncyBzdGlsbCBpbiB0aGUgY2FjaGUuCi0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJj
ZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHMgLypzdG9yZWRDcmVkZW50aWFscyov
LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3Rv
cjxjaGFyPiYgZGF0YSkKIHsKICNpZiBFTkFCTEUoQkxPQikKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvd2luL1Jlc291cmNlSGFuZGxlV2luLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9SZXNvdXJjZUhhbmRsZVdpbi5j
cHAJKHJldmlzaW9uIDEzODcxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
d2luL1Jlc291cmNlSGFuZGxlV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMxLDEyICs0MzEs
NiBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpzZXRTeW5jaHJvbm91c0ludGVyCiAgICAgZC0+bV9s
b2FkU3luY2hyb25vdXNseSA9IHRydWU7CiB9CiAKLWJvb2wgUmVzb3VyY2VIYW5kbGU6OndpbGxM
b2FkRnJvbUNhY2hlKFJlc291cmNlUmVxdWVzdCYsIEZyYW1lKikKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogdm9pZCBwcmVmZXRjaEROUyhjb25zdCBT
dHJpbmcmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7Cg==
</data>
<flag name="commit-queue"
          id="199048"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>181514</attachid>
            <date>2013-01-07 09:47:53 -0800</date>
            <delta_ts>2013-01-07 10:34:00 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>WillLoadFromCache.txt</filename>
            <type>text/plain</type>
            <size>24670</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzODg2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBACisyMDEzLTAxLTA0ICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlSGFuZGxlOjp3
aWxsTG9hZEZyb21DYWNoZSBpcyBldmlsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMDYxNDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBGb3IgYmFjay9mb3J3YXJkIG5hdmlnYXRpb25zIHRvIGEgcGFnZSB0
aGF0J3MgYSByZXN1bHQgb2YgZm9ybSBzdWJtaXNzaW9uLCB3ZSBtYXkKKyAgICAgICAgbmV2ZXIg
c2lsZW50bHkgcmUtc3VibWl0IHRoZSBmb3JtLiBTbywgd2Ugc2hvdyBhIHdhcm5pbmcgZGlhbG9n
IHdoZW4gYWJvdXQgdG8gcmUtc3VibWl0LAorICAgICAgICBidXQgdHJ5IHRvIGxvYWQgZnJvbSBj
YWNoZSBpZiBwb3NzaWJsZS4KKworICAgICAgICBUaGlzIHBhdGNoIGNoYW5nZXMgdGhlIGxvZ2lj
IHNvIHRoYXQgd2UgYWx3YXlzIHRyeSB0byBmZXRjaCBmcm9tIGNhY2hlLCB3aXRob3V0CisgICAg
ICAgIGFueSBwcmVmbGlnaHRpbmcuIElmIGNhY2hlIGxvYWQgZmFpbHMsIHdlIHJlc3RhcnQgdGhl
IGxvYWQgYXMgYSBrbm93biByZS1zdWJtaXQuCisKKyAgICAgICAgTm8gYmVoYXZpb3IgY2hhbmdl
IGV4cGVjdGVkLCBzbyBubyB0ZXN0cy4KKworICAgICAgICAqIGh0bWwvSFRNTEFuY2hvckVsZW1l
bnQuY3BwOiAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OmhhbmRsZUNsaWNrKToKKyAgICAg
ICAgQWRkZWQgYSBGSVhNRS4KKworICAgICAgICAqIGxvYWRlci9Eb2N1bWVudExvYWRlci5jcHA6
IChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6c3RhcnRMb2FkaW5nTWFpblJlc291cmNlKToKKyAg
ICAgICAgQW1lbmRlZCBhIEZJWE1FIHdpdGggc29tZSBpbmZvcm1hdGlvbiBhYm91dCB3aHkgdGhp
cyBjYWxsIG1heSBzdGlsbCBiZSBuZWVkZWQuCisKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2Fk
ZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVMb2FkZXI6OmxvYWRVUkxJbnRvQ2hpbGRGcmFtZSk6IFBhc3MgYW4gZXhwbGljaXQg
YXJndW1lbnQgZm9yIHVuY2hhbmdlZCBjYWNoaW5nIGJlaGF2aW9yLgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVMb2FkZXI6OnJlbG9hZFdpdGhPdmVycmlkZUVuY29kaW5nKTogQWRkZWQgYSBGSVhN
RS4gVGhpcyBmdW5jdGlvbgorICAgICAgICBjYW4gc2lsZW50bHkgcmUtc3VibWl0IGEgZm9ybS4K
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjphZGRFeHRyYUZpZWxkc1RvTWFpblJlc291
cmNlUmVxdWVzdCk6IEFkZGVkIGEgRklYTUUgYWJvdXQKKyAgICAgICAgYW4gaW5jb3JyZWN0IHVz
ZSBvZiBjdXJyZW50IGxvYWQgdHlwZS4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjph
ZGRFeHRyYUZpZWxkc1RvUmVxdWVzdCk6IE1ha2Ugc3VyZSB0aGF0IGEgY29ycmVjdCBjYWNoaW5n
CisgICAgICAgIHBvbGljeSBpcyB1c2VkIGZvciBzdWJyZXNvdXJjZXMgZXZlbiBpZiBtYWluIHJl
c291cmNlIHdhcyBsb2FkZWQgZnJvbSBjYWNoZS4gV2UKKyAgICAgICAgZGlkbid0IG5lZWQgdGhh
dCBiZWZvcmUgYmVjYXVzZSBpbml0aWFsIHJlcXVlc3QgaGFkIHdyb25nIGV4dHJhIGZpZWxkcyBk
dWUgdG8gYSB1c2UKKyAgICAgICAgb2YgbV9sb2FkVHlwZSB3aGVuIGl0IHdhcyBmaXJzdCBjYWxs
ZWQuCisgICAgICAgIFJlbW92ZWQgY29kZSB0byBjaGFuZ2UgY2FjaGluZyBwb2xpY3kgZm9yIGIv
ZiBuYXZpZ2F0aW9ucy4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdAorICAgICAgICBoYXZlIGVub3Vn
aCBjb250ZXh0IHRvIGRlY2lkZSB3aGF0IHRoZSBwb2xpY3kgc2hvdWxkIGJlLgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVMb2FkZXI6OmxvYWREaWZmZXJlbnREb2N1bWVudEl0ZW0pOiBBZGRlZCBh
biBhcmd1bWVudCB0ZWxsaW5nIHRoZQorICAgICAgICBmdW5jdGlvbiB3aGV0aGVyIGl0IHNob3Vs
ZCBhdHRlbXB0IGxvYWRpbmcgZnJvbSBjYWNoZS4gSXQgc2hvdWxkIGRvIHRoYXQgb24gZmlyc3QK
KyAgICAgICAgYXR0ZW1wdCB0byBuYXZpZ2F0ZSB0byBhIGZvcm0gc3VibWlzc2lvbiByZXN1bHQs
IGJ1dCBub3QgaWYgdGhhdCBmYWlsZWQuCisgICAgICAgIFBhc3MgYSBjb3JyZWN0IGxvYWRUeXBl
IC0gbV9sb2FkVHlwZSBpcyBvbmUgZm9yIF9wcmV2aW91c18gbG9hZC4KKyAgICAgICAgUmVtb3Zl
ZCBhIHNwZWNpYWwgY2FzZSBmb3IgaHR0cHMgLSB3ZSd2ZSBsb25nIHN0b3BwZWQgcHJvaGliaXRp
bmcgY2FjaGluZyBvZiBodHRwcworICAgICAgICByZXNvdXJjZXMsIGFuZCB1c2luZyBhIHJlc291
cmNlIHRoYXQncyBhbHJlYWR5IGNhY2hlZCBzaG91bGQgZGVmaW5pdGVseSBiZSBhbGxvd2VkLgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmxvYWRJdGVtKTogUGFzcyBhbiBleHBsaWNp
dCBhcmd1bWVudCBmb3IgdW5jaGFuZ2VkIGNhY2hpbmcgYmVoYXZpb3IuCisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlcjo6cmV0cnlBZnRlckZhaWxlZENhY2hlT25seU1haW5SZXNvdXJjZUxv
YWQpOiBBZGRlZC4KKworICAgICAgICAqIGxvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwOiAo
V2ViQ29yZTo6TWFpblJlc291cmNlTG9hZGVyOjpub3RpZnlGaW5pc2hlZCk6CisgICAgICAgIFJl
bW92ZWQgYSBjaGVjayBmb3IgbV9yZXNvdXJjZSBiZWluZyBudWxsLCBiZWNhdXNlIHdlIHdlcmUg
aW1tZWRpYXRlbHkgZGVmZWZlcmVuY2luZworICAgICAgICBpdCBhbnl3YXkuCisgICAgICAgIENh
bGwgcmV0cnlBZnRlckZhaWxlZENhY2hlT25seU1haW5SZXNvdXJjZUxvYWQoKSB0byBsZXQgRnJh
bWVMb2FkZXIgcmVzdGFydCB0aGUgbmF2aWdhdGlvbi4KKworICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VIYW5kbGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2JsYWNr
YmVycnkvUmVzb3VyY2VIYW5kbGVCbGFja0JlcnJ5LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvY2hyb21pdW0vUmVzb3VyY2VIYW5kbGUuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvbWFjL1Jlc291cmNlSGFuZGxlTWFjLm1tOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvcXQvUmVzb3VyY2VIYW5kbGVRdC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9z
b3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay93
aW4vUmVzb3VyY2VIYW5kbGVXaW4uY3BwOgorICAgICAgICBSZW1vdmVkIHdpbGxMb2FkRnJvbUNh
Y2hlKCkgLSB0aGUgbmV3IGxvZ2ljIGlzIGNyb3NzLXBsYXRmb3JtLgorCiAyMDEzLTAxLTA0ICBK
b3NodWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
Zml4IEFwcGxlIFdpbiBidWlsZCBmb2xsb3dpbmcgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFu
Z2VzZXQvMTM4ODM4CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50
LmNwcAkocmV2aXNpb24gMTM4NzExKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9y
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxMiw2ICs1MTIsNyBAQCB2b2lkIEhUTUxB
bmNob3JFbGVtZW50OjpoYW5kbGVDbGljayhFdmVuCiAgICAgaWYgKGhhc0F0dHJpYnV0ZShkb3du
bG9hZEF0dHIpKSB7CiAgICAgICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KGt1cmwpOwogCisg
ICAgICAgIC8vIEZJWE1FOiBXaHkgYXJlIHdlIG5vdCBjYWxsaW5nIGFkZEV4dHJhRmllbGRzVG9N
YWluUmVzb3VyY2VSZXF1ZXN0KCkgaWYgdGhpcyBjaGVjayBmYWlscz8gSXQgc2V0cyBtYW55IGlt
cG9ydGFudCBoZWFkZXIgZmllbGRzLgogICAgICAgICBpZiAoIWhhc1JlbChSZWxhdGlvbk5vUmVm
ZXJyZXIpKSB7CiAgICAgICAgICAgICBTdHJpbmcgcmVmZXJyZXIgPSBTZWN1cml0eVBvbGljeTo6
Z2VuZXJhdGVSZWZlcnJlckhlYWRlcihkb2N1bWVudCgpLT5yZWZlcnJlclBvbGljeSgpLCBrdXJs
LCBmcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVmZXJyZXIoKSk7CiAgICAgICAgICAgICBpZiAo
IXJlZmVycmVyLmlzRW1wdHkoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVu
dExvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50
TG9hZGVyLmNwcAkocmV2aXNpb24gMTM4NzExKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0Rv
Y3VtZW50TG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODg0LDYgKzg4NCw4IEBAIHZvaWQg
RG9jdW1lbnRMb2FkZXI6OnN0YXJ0TG9hZGluZ01haW5SZXMKIAogICAgIC8vIEZJWE1FOiBJcyB0
aGVyZSBhbnkgd2F5IHRoZSBleHRyYSBmaWVsZHMgY291bGQgaGF2ZSBub3QgYmVlbiBhZGRlZCBi
eSBub3c/CiAgICAgLy8gSWYgbm90LCBpdCB3b3VsZCBiZSBncmVhdCB0byByZW1vdmUgdGhpcyBs
aW5lIG9mIGNvZGUuCisgICAgLy8gTm90ZSB0aGF0IGN1cnJlbnRseSwgc29tZSByZXF1ZXN0cyBt
YXkgaGF2ZSBpbmNvcnJlY3QgZXh0cmEgZmllbGRzIGV2ZW4gaWYgdGhpcyBmdW5jdGlvbiBoYXMg
YmVlbiBjYWxsZWQsCisgICAgLy8gYmVjYXVzZSB3ZSBwYXNzIGEgd3JvbmcgbG9hZFR5cGUgKHNl
ZSBGSVhNRSBpbiBhZGRFeHRyYUZpZWxkc1RvTWFpblJlc291cmNlUmVxdWVzdCgpKS4KICAgICBm
cmFtZUxvYWRlcigpLT5hZGRFeHRyYUZpZWxkc1RvTWFpblJlc291cmNlUmVxdWVzdChtX3JlcXVl
c3QpOwogICAgIG1fbWFpblJlc291cmNlTG9hZGVyLT5sb2FkKG1fcmVxdWVzdCwgbV9zdWJzdGl0
dXRlRGF0YSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2
aXNpb24gMTM4NzExKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODUyLDcgKzg1Miw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmxvYWRV
UkxJbnRvQ2hpbGRGcmFtZSgKICAgICAgICAgJiYgIW1fZnJhbWUtPmRvY3VtZW50KCktPmxvYWRF
dmVudEZpbmlzaGVkKCkpIHsKICAgICAgICAgSGlzdG9yeUl0ZW0qIGNoaWxkSXRlbSA9IHBhcmVu
dEl0ZW0tPmNoaWxkSXRlbVdpdGhUYXJnZXQoY2hpbGRGcmFtZS0+dHJlZSgpLT51bmlxdWVOYW1l
KCkpOwogICAgICAgICBpZiAoY2hpbGRJdGVtKSB7Ci0gICAgICAgICAgICBjaGlsZEZyYW1lLT5s
b2FkZXIoKS0+bG9hZERpZmZlcmVudERvY3VtZW50SXRlbShjaGlsZEl0ZW0sIGxvYWRUeXBlKCkp
OworICAgICAgICAgICAgY2hpbGRGcmFtZS0+bG9hZGVyKCktPmxvYWREaWZmZXJlbnREb2N1bWVu
dEl0ZW0oY2hpbGRJdGVtLCBsb2FkVHlwZSgpLCBNYXlBdHRlbXB0Q2FjaGVPbmx5TG9hZEZvckZv
cm1TdWJtaXNzaW9uSXRlbSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9
CkBAIC0xNDYxLDYgKzE0NjEsOCBAQCB2b2lkIEZyYW1lTG9hZGVyOjpyZWxvYWRXaXRoT3ZlcnJp
ZGVFbmNvCiAgICAgaWYgKCF1bnJlYWNoYWJsZVVSTC5pc0VtcHR5KCkpCiAgICAgICAgIHJlcXVl
c3Quc2V0VVJMKHVucmVhY2hhYmxlVVJMKTsKIAorICAgIC8vIEZJWE1FOiBJZiB0aGUgcmVzb3Vy
Y2UgaXMgYSByZXN1bHQgb2YgZm9ybSBzdWJtaXNzaW9uIGFuZCBpcyBub3QgY2FjaGVkLCB0aGUg
Zm9ybSB3aWxsIGJlIHNpbGVudGx5IHJlc3VibWl0dGVkLgorICAgIC8vIFdlIHNob3VsZCBhc2sg
dGhlIHVzZXIgZm9yIGNvbmZpcm1hdGlvbiBpbiB0aGlzIGNhc2UuCiAgICAgcmVxdWVzdC5zZXRD
YWNoZVBvbGljeShSZXR1cm5DYWNoZURhdGFFbHNlTG9hZCk7CiAKICAgICBSZWZQdHI8RG9jdW1l
bnRMb2FkZXI+IGxvYWRlciA9IG1fY2xpZW50LT5jcmVhdGVEb2N1bWVudExvYWRlcihyZXF1ZXN0
LCBkZWZhdWx0U3Vic3RpdHV0ZURhdGFGb3JVUkwocmVxdWVzdC51cmwoKSkpOwpAQCAtMjQxOCwx
MyArMjQyMCwxNSBAQCB2b2lkIEZyYW1lTG9hZGVyOjphZGRFeHRyYUZpZWxkc1RvU3VicmVzCiAK
IHZvaWQgRnJhbWVMb2FkZXI6OmFkZEV4dHJhRmllbGRzVG9NYWluUmVzb3VyY2VSZXF1ZXN0KFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKKyAgICAvLyBGSVhNRTogVXNpbmcgbV9sb2FkVHlw
ZSBzZWVtcyB3cm9uZyBmb3Igc29tZSBjYWxsZXJzLgorICAgIC8vIElmIHdlIGFyZSBvbmx5IHBy
ZXBhcmluZyB0byBsb2FkIHRoZSBtYWluIHJlc291cmNlLCB0aGF0IGlzIHByZXZpb3VzIGxvYWQn
cyBsb2FkIHR5cGUhCiAgICAgYWRkRXh0cmFGaWVsZHNUb1JlcXVlc3QocmVxdWVzdCwgbV9sb2Fk
VHlwZSwgdHJ1ZSk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXI6OmFkZEV4dHJhRmllbGRzVG9SZXF1
ZXN0KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgRnJhbWVMb2FkVHlwZSBsb2FkVHlwZSwgYm9v
bCBtYWluUmVzb3VyY2UpCiB7CiAgICAgLy8gRG9uJ3Qgc2V0IHRoZSBjb29raWUgcG9saWN5IFVS
TCBpZiBpdCdzIGFscmVhZHkgYmVlbiBzZXQuCi0gICAgLy8gQnV0IG1ha2Ugc3VyZSB0byBzZXQg
aXQgb24gYWxsIHJlcXVlc3RzLCBhcyBpdCBoYXMgc2lnbmlmaWNhbmNlIGJleW9uZCB0aGUgY29v
a2llIHBvbGljeSBmb3IgYWxsIHByb3RvY29scyAoPHJkYXI6Ly9wcm9ibGVtLzY2MTY2NjQ+KS4K
KyAgICAvLyBCdXQgbWFrZSBzdXJlIHRvIHNldCBpdCBvbiBhbGwgcmVxdWVzdHMgcmVnYXJkbGVz
cyBvZiBwcm90b2NvbCwgYXMgaXQgaGFzIHNpZ25pZmljYW5jZSBiZXlvbmQgdGhlIGNvb2tpZSBw
b2xpY3kgKDxyZGFyOi8vcHJvYmxlbS82NjE2NjY0PikuCiAgICAgaWYgKHJlcXVlc3QuZmlyc3RQ
YXJ0eUZvckNvb2tpZXMoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgaWYgKG1haW5SZXNvdXJjZSAm
JiBpc0xvYWRpbmdNYWluRnJhbWUoKSkKICAgICAgICAgICAgIHJlcXVlc3Quc2V0Rmlyc3RQYXJ0
eUZvckNvb2tpZXMocmVxdWVzdC51cmwoKSk7CkBAIC0yNDM3LDI2ICsyNDQxLDMxIEBAIHZvaWQg
RnJhbWVMb2FkZXI6OmFkZEV4dHJhRmllbGRzVG9SZXF1ZXMKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgYXBwbHlVc2VyQWdlbnQocmVxdWVzdCk7Ci0gICAgCi0gICAgLy8gSWYgd2UgaW5oZXJpdCBj
YWNoZSBwb2xpY3kgZnJvbSBhIG1haW4gcmVzb3VyY2UsIHdlIHVzZSB0aGUgRG9jdW1lbnRMb2Fk
ZXIncyAKLSAgICAvLyBvcmlnaW5hbCByZXF1ZXN0IGNhY2hlIHBvbGljeSBmb3IgdHdvIHJlYXNv
bnM6Ci0gICAgLy8gMS4gRm9yIFBPU1QgcmVxdWVzdHMsIHdlIG11dGF0ZSB0aGUgY2FjaGUgcG9s
aWN5IGZvciB0aGUgbWFpbiByZXNvdXJjZSwKLSAgICAvLyAgICBidXQgd2UgZG8gbm90IHdhbnQg
dGhpcyB0byBhcHBseSB0byBzdWJyZXNvdXJjZXMKLSAgICAvLyAyLiBEZWxlZ2F0ZXMgdGhhdCBt
b2RpZnkgdGhlIGNhY2hlIHBvbGljeSB1c2luZyB3aWxsU2VuZFJlcXVlc3Q6IHNob3VsZAotICAg
IC8vICAgIG5vdCBhZmZlY3QgYW55IG90aGVyIHJlc291cmNlcy4gU3VjaCBjaGFuZ2VzIG5lZWQg
dG8gYmUgZG9uZQotICAgIC8vICAgIHBlciByZXF1ZXN0LgorCiAgICAgaWYgKCFtYWluUmVzb3Vy
Y2UpIHsKICAgICAgICAgaWYgKHJlcXVlc3QuaXNDb25kaXRpb25hbCgpKQogICAgICAgICAgICAg
cmVxdWVzdC5zZXRDYWNoZVBvbGljeShSZWxvYWRJZ25vcmluZ0NhY2hlRGF0YSk7Ci0gICAgICAg
IGVsc2UgaWYgKGRvY3VtZW50TG9hZGVyKCktPmlzTG9hZGluZ0luQVBJU2Vuc2UoKSkKLSAgICAg
ICAgICAgIHJlcXVlc3Quc2V0Q2FjaGVQb2xpY3koZG9jdW1lbnRMb2FkZXIoKS0+b3JpZ2luYWxS
ZXF1ZXN0KCkuY2FjaGVQb2xpY3koKSk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgZWxzZSBpZiAo
ZG9jdW1lbnRMb2FkZXIoKS0+aXNMb2FkaW5nSW5BUElTZW5zZSgpKSB7CisgICAgICAgICAgICAv
LyBJZiB3ZSBpbmhlcml0IGNhY2hlIHBvbGljeSBmcm9tIGEgbWFpbiByZXNvdXJjZSwgd2UgdXNl
IHRoZSBEb2N1bWVudExvYWRlcidzCisgICAgICAgICAgICAvLyBvcmlnaW5hbCByZXF1ZXN0IGNh
Y2hlIHBvbGljeSBmb3IgdHdvIHJlYXNvbnM6CisgICAgICAgICAgICAvLyAxLiBGb3IgUE9TVCBy
ZXF1ZXN0cywgd2UgbXV0YXRlIHRoZSBjYWNoZSBwb2xpY3kgZm9yIHRoZSBtYWluIHJlc291cmNl
LAorICAgICAgICAgICAgLy8gICAgYnV0IHdlIGRvIG5vdCB3YW50IHRoaXMgdG8gYXBwbHkgdG8g
c3VicmVzb3VyY2VzCisgICAgICAgICAgICAvLyAyLiBEZWxlZ2F0ZXMgdGhhdCBtb2RpZnkgdGhl
IGNhY2hlIHBvbGljeSB1c2luZyB3aWxsU2VuZFJlcXVlc3Q6IHNob3VsZAorICAgICAgICAgICAg
Ly8gICAgbm90IGFmZmVjdCBhbnkgb3RoZXIgcmVzb3VyY2VzLiBTdWNoIGNoYW5nZXMgbmVlZCB0
byBiZSBkb25lCisgICAgICAgICAgICAvLyAgICBwZXIgcmVxdWVzdC4KKyAgICAgICAgICAgIFJl
c291cmNlUmVxdWVzdENhY2hlUG9saWN5IG1haW5Eb2N1bWVudE9yaWdpbmFsQ2FjaGVQb2xpY3kg
PSBkb2N1bWVudExvYWRlcigpLT5vcmlnaW5hbFJlcXVlc3QoKS5jYWNoZVBvbGljeSgpOworICAg
ICAgICAgICAgLy8gQmFjay1mb3J3YXJkIG5hdmlnYXRpb25zIHRyeSB0byBsb2FkIG1haW4gcmVz
b3VyY2UgZnJvbSBjYWNoZSBvbmx5IHRvIGF2b2lkIHJlLXN1Ym1pdHRpbmcgZm9ybSBkYXRhLCBh
bmQgc3RhcnQgb3ZlciAod2l0aCBhIHdhcm5pbmcgZGlhbG9nKSBpZiB0aGF0IGZhaWxzLgorICAg
ICAgICAgICAgLy8gVGhpcyBwb2xpY3kgaXMgc2V0IG9uIGluaXRpYWwgcmVxdWVzdCB0b28sIGJ1
dCBzaG91bGQgbm90IGJlIGluaGVyaXRlZC4KKyAgICAgICAgICAgIFJlc291cmNlUmVxdWVzdENh
Y2hlUG9saWN5IHN1YnJlc291cmNlQ2FjaGVQb2xpY3kgPSAobWFpbkRvY3VtZW50T3JpZ2luYWxD
YWNoZVBvbGljeSA9PSBSZXR1cm5DYWNoZURhdGFEb250TG9hZCkgPyBSZXR1cm5DYWNoZURhdGFF
bHNlTG9hZCA6IG1haW5Eb2N1bWVudE9yaWdpbmFsQ2FjaGVQb2xpY3k7CisgICAgICAgICAgICBy
ZXF1ZXN0LnNldENhY2hlUG9saWN5KHN1YnJlc291cmNlQ2FjaGVQb2xpY3kpOworICAgICAgICB9
IGVsc2UKICAgICAgICAgICAgIHJlcXVlc3Quc2V0Q2FjaGVQb2xpY3koVXNlUHJvdG9jb2xDYWNo
ZVBvbGljeSk7CisKKyAgICAvLyBGSVhNRTogT3RoZXIgRnJhbWVMb2FkZXIgZnVuY3Rpb25zIGhh
dmUgZHVwbGljYXRlZCBjb2RlIGZvciBzZXR0aW5nIGNhY2hlIHBvbGljeSBvZiBtYWluIHJlcXVl
c3Qgd2hlbiByZWxvYWRpbmcuCisgICAgLy8gSXQgc2VlbXMgYmV0dGVyIHRvIG1hbmFnZSBpdCBl
eHBsaWNpdGx5IHRoYW4gdG8gaGlkZSB0aGUgbG9naWMgaW5zaWRlIGFkZEV4dHJhRmllbGRzVG9S
ZXF1ZXN0KCkuCiAgICAgfSBlbHNlIGlmIChsb2FkVHlwZSA9PSBGcmFtZUxvYWRUeXBlUmVsb2Fk
IHx8IGxvYWRUeXBlID09IEZyYW1lTG9hZFR5cGVSZWxvYWRGcm9tT3JpZ2luIHx8IHJlcXVlc3Qu
aXNDb25kaXRpb25hbCgpKQogICAgICAgICByZXF1ZXN0LnNldENhY2hlUG9saWN5KFJlbG9hZEln
bm9yaW5nQ2FjaGVEYXRhKTsKLSAgICBlbHNlIGlmIChpc0JhY2tGb3J3YXJkTG9hZFR5cGUobG9h
ZFR5cGUpICYmIG1fc3RhdGVNYWNoaW5lLmNvbW1pdHRlZEZpcnN0UmVhbERvY3VtZW50TG9hZCgp
KQotICAgICAgICByZXF1ZXN0LnNldENhY2hlUG9saWN5KFJldHVybkNhY2hlRGF0YUVsc2VMb2Fk
KTsKLSAgICAgICAgCisKICAgICBpZiAocmVxdWVzdC5jYWNoZVBvbGljeSgpID09IFJlbG9hZEln
bm9yaW5nQ2FjaGVEYXRhKSB7CiAgICAgICAgIGlmIChsb2FkVHlwZSA9PSBGcmFtZUxvYWRUeXBl
UmVsb2FkKQogICAgICAgICAgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoIkNhY2hlLUNv
bnRyb2wiLCAibWF4LWFnZT0wIik7CkBAIC0zMDMzLDcgKzMwNDIsNyBAQCB2b2lkIEZyYW1lTG9h
ZGVyOjpsb2FkU2FtZURvY3VtZW50SXRlbShICiAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBzaG91
bGQgcmVhbGx5IGJlIHNwbGl0IGludG8gYSBjb3VwbGUgcGllY2VzLCBzb21lIG9mCiAvLyB3aGlj
aCBzaG91bGQgYmUgbWV0aG9kcyBvZiBIaXN0b3J5Q29udHJvbGxlciBhbmQgc29tZSBvZiB3aGlj
aCBzaG91bGQgYmUKIC8vIG1ldGhvZHMgb2YgRnJhbWVMb2FkZXIuCi12b2lkIEZyYW1lTG9hZGVy
Ojpsb2FkRGlmZmVyZW50RG9jdW1lbnRJdGVtKEhpc3RvcnlJdGVtKiBpdGVtLCBGcmFtZUxvYWRU
eXBlIGxvYWRUeXBlKQordm9pZCBGcmFtZUxvYWRlcjo6bG9hZERpZmZlcmVudERvY3VtZW50SXRl
bShIaXN0b3J5SXRlbSogaXRlbSwgRnJhbWVMb2FkVHlwZSBsb2FkVHlwZSwgRm9ybVN1Ym1pc3Np
b25DYWNoZUxvYWRQb2xpY3kgY2FjaGVMb2FkUG9saWN5KQogewogICAgIC8vIFJlbWVtYmVyIHRo
aXMgaXRlbSBzbyB3ZSBjYW4gdHJhdmVyc2UgYW55IGNoaWxkIGl0ZW1zIGFzIGNoaWxkIGZyYW1l
cyBsb2FkCiAgICAgaGlzdG9yeSgpLT5zZXRQcm92aXNpb25hbEl0ZW0oaXRlbSk7CkBAIC0zMDY4
LDcgKzMwNzcsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkRGlmZmVyZW50RG9jdW1lbnRJCiAK
ICAgICAgICAgLy8gTWFrZSBzdXJlIHRvIGFkZCBleHRyYSBmaWVsZHMgdG8gdGhlIHJlcXVlc3Qg
YWZ0ZXIgdGhlIE9yaWdpbiBoZWFkZXIgaXMgYWRkZWQgZm9yIHRoZSBGb3JtRGF0YSBjYXNlLgog
ICAgICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
MTk0IGZvciBtb3JlIGRpc2N1c3Npb24uCi0gICAgICAgIGFkZEV4dHJhRmllbGRzVG9SZXF1ZXN0
KHJlcXVlc3QsIG1fbG9hZFR5cGUsIHRydWUpOworICAgICAgICBhZGRFeHRyYUZpZWxkc1RvUmVx
dWVzdChyZXF1ZXN0LCBsb2FkVHlwZSwgdHJ1ZSk7CiAgICAgICAgIAogICAgICAgICAvLyBGSVhN
RTogU2xpZ2h0IGhhY2sgdG8gdGVzdCBpZiB0aGUgTlNVUkwgY2FjaGUgY29udGFpbnMgdGhlIHBh
Z2Ugd2UncmUgZ29pbmcgdG8uCiAgICAgICAgIC8vIFdlIHdhbnQgdG8ga25vdyB0aGlzIGJlZm9y
ZSB0YWxraW5nIHRvIHRoZSBwb2xpY3kgZGVsZWdhdGUsIHNpbmNlIGl0IGFmZmVjdHMgd2hldGhl
ciAKQEAgLTMwNzgsMTAgKzMwODcsMTEgQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9hZERpZmZlcmVu
dERvY3VtZW50SQogICAgICAgICAvLyBoYXZlIHRoZSBpdGVtIHZhbmlzaCB3aGVuIHdlIHRyeSB0
byB1c2UgaXQgaW4gdGhlIGVuc3VpbmcgbmF2LiAgVGhpcyBzaG91bGQgYmUKICAgICAgICAgLy8g
ZXh0cmVtZWx5IHJhcmUsIGJ1dCBpbiB0aGF0IGNhc2UgdGhlIHVzZXIgd2lsbCBnZXQgYW4gZXJy
b3Igb24gdGhlIG5hdmlnYXRpb24uCiAgICAgICAgIAotICAgICAgICBpZiAoUmVzb3VyY2VIYW5k
bGU6OndpbGxMb2FkRnJvbUNhY2hlKHJlcXVlc3QsIG1fZnJhbWUpKQorICAgICAgICBpZiAoY2Fj
aGVMb2FkUG9saWN5ID09IE1heUF0dGVtcHRDYWNoZU9ubHlMb2FkRm9yRm9ybVN1Ym1pc3Npb25J
dGVtKSB7CisgICAgICAgICAgICByZXF1ZXN0LnNldENhY2hlUG9saWN5KFJldHVybkNhY2hlRGF0
YURvbnRMb2FkKTsKICAgICAgICAgICAgIGFjdGlvbiA9IE5hdmlnYXRpb25BY3Rpb24ocmVxdWVz
dCwgbG9hZFR5cGUsIGZhbHNlKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICByZXF1ZXN0
LnNldENhY2hlUG9saWN5KFJlbG9hZElnbm9yaW5nQ2FjaGVEYXRhKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIHJlcXVlc3Quc2V0Q2FjaGVQb2xpY3koUmV0dXJuQ2FjaGVEYXRhRWxz
ZUxvYWQpOwogICAgICAgICAgICAgYWN0aW9uID0gTmF2aWdhdGlvbkFjdGlvbihyZXF1ZXN0LCBO
YXZpZ2F0aW9uVHlwZUZvcm1SZXN1Ym1pdHRlZCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewpA
QCAtMzA5NSw3ICszMTA1LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9hZERpZmZlcmVudERvY3Vt
ZW50SQogICAgICAgICAgICAgY2FzZSBGcmFtZUxvYWRUeXBlSW5kZXhlZEJhY2tGb3J3YXJkOgog
ICAgICAgICAgICAgICAgIC8vIElmIHRoZSBmaXJzdCBsb2FkIHdpdGhpbiBhIGZyYW1lIGlzIGEg
bmF2aWdhdGlvbiB3aXRoaW4gYSBiYWNrL2ZvcndhcmQgbGlzdCB0aGF0IHdhcyBhdHRhY2hlZCAK
ICAgICAgICAgICAgICAgICAvLyB3aXRob3V0IGFueSBvZiB0aGUgaXRlbXMgYmVpbmcgbG9hZGVk
IHRoZW4gd2Ugc2hvdWxkIHVzZSB0aGUgZGVmYXVsdCBjYWNoaW5nIHBvbGljeSAoPHJkYXI6Ly9w
cm9ibGVtLzgxMzEzNTU+KS4KLSAgICAgICAgICAgICAgICBpZiAobV9zdGF0ZU1hY2hpbmUuY29t
bWl0dGVkRmlyc3RSZWFsRG9jdW1lbnRMb2FkKCkgJiYgIWl0ZW1VUkwucHJvdG9jb2xJcygiaHR0
cHMiKSkKKyAgICAgICAgICAgICAgICBpZiAobV9zdGF0ZU1hY2hpbmUuY29tbWl0dGVkRmlyc3RS
ZWFsRG9jdW1lbnRMb2FkKCkpCiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Quc2V0Q2FjaGVQ
b2xpY3koUmV0dXJuQ2FjaGVEYXRhRWxzZUxvYWQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgY2FzZSBGcmFtZUxvYWRUeXBlU3RhbmRhcmQ6CkBAIC0zMTA2LDcgKzMxMTYs
NyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkRGlmZmVyZW50RG9jdW1lbnRJCiAgICAgICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KIAotICAgICAgICBhZGRFeHRy
YUZpZWxkc1RvUmVxdWVzdChyZXF1ZXN0LCBtX2xvYWRUeXBlLCB0cnVlKTsKKyAgICAgICAgYWRk
RXh0cmFGaWVsZHNUb1JlcXVlc3QocmVxdWVzdCwgbG9hZFR5cGUsIHRydWUpOwogCiAgICAgICAg
IFJlc291cmNlUmVxdWVzdCByZXF1ZXN0Rm9yT3JpZ2luYWxVUkwocmVxdWVzdCk7CiAgICAgICAg
IHJlcXVlc3RGb3JPcmlnaW5hbFVSTC5zZXRVUkwoaXRlbU9yaWdpbmFsVVJMKTsKQEAgLTMxMjYs
NyArMzEzNiwyMyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkSXRlbShIaXN0b3J5SXRlbSogCiAg
ICAgaWYgKHNhbWVEb2N1bWVudE5hdmlnYXRpb24pCiAgICAgICAgIGxvYWRTYW1lRG9jdW1lbnRJ
dGVtKGl0ZW0pOwogICAgIGVsc2UKLSAgICAgICAgbG9hZERpZmZlcmVudERvY3VtZW50SXRlbShp
dGVtLCBsb2FkVHlwZSk7CisgICAgICAgIGxvYWREaWZmZXJlbnREb2N1bWVudEl0ZW0oaXRlbSwg
bG9hZFR5cGUsIE1heUF0dGVtcHRDYWNoZU9ubHlMb2FkRm9yRm9ybVN1Ym1pc3Npb25JdGVtKTsK
K30KKwordm9pZCBGcmFtZUxvYWRlcjo6cmV0cnlBZnRlckZhaWxlZENhY2hlT25seU1haW5SZXNv
dXJjZUxvYWQoKQoreworICAgIEFTU0VSVChtX3N0YXRlID09IEZyYW1lU3RhdGVQcm92aXNpb25h
bCk7CisgICAgQVNTRVJUKCFtX2xvYWRpbmdGcm9tQ2FjaGVkUGFnZSk7CisgICAgLy8gV2Ugb25s
eSB1c2UgY2FjaGUtb25seSBsb2FkcyB0byBhdm9pZCByZXN1Ym1pdHRpbmcgZm9ybXMuCisgICAg
QVNTRVJUKGlzQmFja0ZvcndhcmRMb2FkVHlwZShtX2xvYWRUeXBlKSk7CisgICAgQVNTRVJUKG1f
aGlzdG9yeS5wcm92aXNpb25hbEl0ZW0oKS0+Zm9ybURhdGEoKSk7CisgICAgQVNTRVJUKG1faGlz
dG9yeS5wcm92aXNpb25hbEl0ZW0oKSA9PSBtX3JlcXVlc3RlZEhpc3RvcnlJdGVtLmdldCgpKTsK
KworICAgIEZyYW1lTG9hZFR5cGUgbG9hZFR5cGUgPSBtX2xvYWRUeXBlOworICAgIEhpc3RvcnlJ
dGVtKiBpdGVtID0gbV9oaXN0b3J5LnByb3Zpc2lvbmFsSXRlbSgpOworCisgICAgc3RvcEFsbExv
YWRlcnMoU2hvdWxkTm90Q2xlYXJQcm92aXNpb25hbEl0ZW0pOworICAgIGxvYWREaWZmZXJlbnRE
b2N1bWVudEl0ZW0oaXRlbSwgbG9hZFR5cGUsIE1heU5vdEF0dGVtcHRDYWNoZU9ubHlMb2FkRm9y
Rm9ybVN1Ym1pc3Npb25JdGVtKTsKIH0KIAogUmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlcjo6Y2Fu
Y2VsbGVkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KSBjb25zdApJbmRleDog
U291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHJldmlzaW9uIDEzODcxMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNiAr
MTIzLDggQEAgcHVibGljOgogICAgIHZvaWQgbG9hZEl0ZW0oSGlzdG9yeUl0ZW0qLCBGcmFtZUxv
YWRUeXBlKTsKICAgICBIaXN0b3J5SXRlbSogcmVxdWVzdGVkSGlzdG9yeUl0ZW0oKSBjb25zdCB7
IHJldHVybiBtX3JlcXVlc3RlZEhpc3RvcnlJdGVtLmdldCgpOyB9CiAKKyAgICB2b2lkIHJldHJ5
QWZ0ZXJGYWlsZWRDYWNoZU9ubHlNYWluUmVzb3VyY2VMb2FkKCk7CisKICAgICBzdGF0aWMgdm9p
ZCByZXBvcnRMb2NhbExvYWRGYWlsZWQoRnJhbWUqLCBjb25zdCBTdHJpbmcmIHVybCk7CiAKICAg
ICAvLyBGSVhNRTogVGhlc2UgYXJlIGFsbCBmdW5jdGlvbnMgd2hpY2ggc3RvcCBsb2Fkcy4gV2Ug
aGF2ZSB0b28gbWFueS4KQEAgLTI4MiwxMiArMjg0LDE3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJl
cG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKIAogcHJpdmF0ZToKKyAg
ICBlbnVtIEZvcm1TdWJtaXNzaW9uQ2FjaGVMb2FkUG9saWN5IHsKKyAgICAgICAgTWF5QXR0ZW1w
dENhY2hlT25seUxvYWRGb3JGb3JtU3VibWlzc2lvbkl0ZW0sCisgICAgICAgIE1heU5vdEF0dGVt
cHRDYWNoZU9ubHlMb2FkRm9yRm9ybVN1Ym1pc3Npb25JdGVtCisgICAgfTsKKwogICAgIGJvb2wg
YWxsQ2hpbGRyZW5BcmVDb21wbGV0ZSgpIGNvbnN0OyAvLyBpbW1lZGlhdGUgY2hpbGRyZW4sIG5v
dCBhbGwgZGVzY2VuZGFudHMKIAogICAgIHZvaWQgY2hlY2tUaW1lckZpcmVkKFRpbWVyPEZyYW1l
TG9hZGVyPiopOwogICAgIAogICAgIHZvaWQgbG9hZFNhbWVEb2N1bWVudEl0ZW0oSGlzdG9yeUl0
ZW0qKTsKLSAgICB2b2lkIGxvYWREaWZmZXJlbnREb2N1bWVudEl0ZW0oSGlzdG9yeUl0ZW0qLCBG
cmFtZUxvYWRUeXBlKTsKKyAgICB2b2lkIGxvYWREaWZmZXJlbnREb2N1bWVudEl0ZW0oSGlzdG9y
eUl0ZW0qLCBGcmFtZUxvYWRUeXBlLCBGb3JtU3VibWlzc2lvbkNhY2hlTG9hZFBvbGljeSk7CiAg
ICAgCiAgICAgdm9pZCBsb2FkUHJvdmlzaW9uYWxJdGVtRnJvbUNhY2hlZFBhZ2UoKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAJKHJldmlz
aW9uIDEzODcxMSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDgsMTEgKzU0OCwxNyBAQCB2b2lkIE1haW5SZXNvdXJj
ZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluCiB2b2lkIE1haW5SZXNvdXJjZUxvYWRlcjo6bm90aWZ5
RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQogewogICAgIEFTU0VSVF9VTlVTRUQo
cmVzb3VyY2UsIG1fcmVzb3VyY2UgPT0gcmVzb3VyY2UpOwotICAgIGlmICghbV9yZXNvdXJjZSB8
fCAoIW1fcmVzb3VyY2UtPmVycm9yT2NjdXJyZWQoKSAmJiAhbV9yZXNvdXJjZS0+d2FzQ2FuY2Vs
ZWQoKSkpIHsKKyAgICBBU1NFUlQobV9yZXNvdXJjZSk7CisgICAgaWYgKCFtX3Jlc291cmNlLT5l
cnJvck9jY3VycmVkKCkgJiYgIW1fcmVzb3VyY2UtPndhc0NhbmNlbGVkKCkpIHsKICAgICAgICAg
ZGlkRmluaXNoTG9hZGluZyhtX3Jlc291cmNlLT5sb2FkRmluaXNoVGltZSgpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAorICAgIGlmIChtX2RvY3VtZW50TG9hZGVyLT5yZXF1ZXN0KCkuY2Fj
aGVQb2xpY3koKSA9PSBSZXR1cm5DYWNoZURhdGFEb250TG9hZCAmJiAhbV9yZXNvdXJjZS0+d2Fz
Q2FuY2VsZWQoKSkgeworICAgICAgICBmcmFtZUxvYWRlcigpLT5yZXRyeUFmdGVyRmFpbGVkQ2Fj
aGVPbmx5TWFpblJlc291cmNlTG9hZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAjaWYg
UExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlO
X1JFUVVJUkVEID49IDEwODAKICAgICBpZiAobV9maWx0ZXIpIHsKICAgICAgICAgd2tGaWx0ZXJS
ZWxlYXNlKG1fZmlsdGVyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VIYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgJKHJldmlzaW9uIDEzODcxMSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MTA0LDcgKzEwNCw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZXNvdXJjZUhh
bmRsZT4gY3JlYXRlKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jiwg
UmVzb3VyY2VIYW5kbGVDbGllbnQqLCBib29sIGRlZmVyc0xvYWRpbmcsIGJvb2wgc2hvdWxkQ29u
dGVudFNuaWZmKTsKICAgICBzdGF0aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5l
dHdvcmtpbmdDb250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlh
bHMsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRh
KTsKIAotICAgIHN0YXRpYyBib29sIHdpbGxMb2FkRnJvbUNhY2hlKFJlc291cmNlUmVxdWVzdCYs
IEZyYW1lKik7CiAgICAgc3RhdGljIHZvaWQgY2FjaGVNZXRhZGF0YShjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiwgY29uc3QgVmVjdG9yPGNoYXI+Jik7CiAKICAgICB2aXJ0dWFsIH5SZXNvdXJjZUhh
bmRsZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5
L1Jlc291cmNlSGFuZGxlQmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlSGFuZGxlQmxhY2tCZXJyeS5j
cHAJKHJldmlzaW9uIDEzODcxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
YmxhY2tiZXJyeS9SZXNvdXJjZUhhbmRsZUJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjYsMTIgKzEyNiw2IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnBhdXNlTG9hZChib29sIHBh
dXMKICAgICAgICAgTmV0d29ya01hbmFnZXI6Omluc3RhbmNlKCktPnBhdXNlTG9hZCh0aGlzLCBw
YXVzZSk7CiB9CiAKLWJvb2wgUmVzb3VyY2VIYW5kbGU6OndpbGxMb2FkRnJvbUNhY2hlKFJlc291
cmNlUmVxdWVzdCYsIEZyYW1lKikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVy
biBmYWxzZTsKLX0KLQogdm9pZCBSZXNvdXJjZUhhbmRsZTo6Y2FuY2VsKCkKIHsKICAgICBOZXR3
b3JrTWFuYWdlcjo6aW5zdGFuY2UoKS0+c3RvcEpvYih0aGlzKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNG
TmV0LmNwcAkocmV2aXNpb24gMTM4NzExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODA4LDIz
ICs4MDgsNiBAQCBib29sIFJlc291cmNlSGFuZGxlOjpsb2Fkc0Jsb2NrZWQoKQogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotYm9vbCBSZXNvdXJjZUhhbmRsZTo6d2lsbExvYWRGcm9tQ2FjaGUoUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBGcmFtZSopCi17Ci0gICAgcmVxdWVzdC5zZXRDYWNoZVBv
bGljeShSZXR1cm5DYWNoZURhdGFEb250TG9hZCk7Ci0gICAgCi0gICAgQ0ZVUkxSZXNwb25zZVJl
ZiBjZlJlc3BvbnNlID0gMDsKLSAgICBDRkVycm9yUmVmIGNmRXJyb3IgPSAwOwotICAgIFJldGFp
blB0cjxDRkRhdGFSZWY+IGRhdGEgPSBhZG9wdENGKENGVVJMQ29ubmVjdGlvblNlbmRTeW5jaHJv
bm91c1JlcXVlc3QocmVxdWVzdC5jZlVSTFJlcXVlc3QoKSwgJmNmUmVzcG9uc2UsICZjZkVycm9y
LCByZXF1ZXN0LnRpbWVvdXRJbnRlcnZhbCgpKSk7Ci0gICAgYm9vbCBjYWNoZWQgPSBjZlJlc3Bv
bnNlICYmICFjZkVycm9yOwotCi0gICAgaWYgKGNmRXJyb3IpCi0gICAgICAgIENGUmVsZWFzZShj
ZkVycm9yKTsKLSAgICBpZiAoY2ZSZXNwb25zZSkKLSAgICAgICAgQ0ZSZWxlYXNlKGNmUmVzcG9u
c2UpOwotCi0gICAgcmV0dXJuIGNhY2hlZDsKLX0KLQogI2lmIFBMQVRGT1JNKE1BQykKIHZvaWQg
UmVzb3VyY2VIYW5kbGU6OnNjaGVkdWxlKFNjaGVkdWxlUGFpciogcGFpcikKIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vUmVzb3VyY2VIYW5kbGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0v
UmVzb3VyY2VIYW5kbGUuY3BwCShyZXZpc2lvbiAxMzg3MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jlc291cmNlSGFuZGxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjc3LDIyICsyNzcsNiBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VT
eW5jaHJvCiB9CiAKIC8vIHN0YXRpYwotYm9vbCBSZXNvdXJjZUhhbmRsZTo6d2lsbExvYWRGcm9t
Q2FjaGUoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBGcmFtZSopCi17Ci0gICAgLy8gVGhpcyBt
ZXRob2QgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgYSBQT1NUIHJlcXVlc3QgY2FuIGJlIHJlcGVh
dGVkIGZyb20KLSAgICAvLyBjYWNoZSwgYnV0IHlvdSBjYW5ub3QgcmVhbGx5IGtub3cgdW50aWwg
eW91IGFjdHVhbGx5IHRyeSB0byByZWFkIGZyb20gdGhlCi0gICAgLy8gY2FjaGUuIEV2ZW4gaWYg
d2UgY2hlY2tlZCBub3csIHNvbWV0aGluZyBlbHNlIGNvdWxkIGNvbWUgYWxvbmcgYW5kIHdpcGUK
LSAgICAvLyBvdXQgdGhlIGNhY2hlIGVudHJ5IGJ5IHRoZSB0aW1lIHdlIGZldGNoIGl0LgotICAg
IC8vCi0gICAgLy8gU28sIHdlIGFsd2F5cyBzYXkgeWVzIGhlcmUsIHRvIHByZXZlbnQgdGhlIEZy
YW1lTG9hZGVyIGZyb20gaW5pdGlhdGluZyBhCi0gICAgLy8gcmVsb2FkLiBUaGVuIGluIEZyYW1l
TG9hZGVyQ2xpZW50SW1wbDo6ZGlzcGF0Y2hXaWxsU2VuZFJlcXVlc3QsIHdlCi0gICAgLy8gZml4
LXVwIHRoZSBjYWNoZSBwb2xpY3kgb2YgdGhlIHJlcXVlc3QgdG8gZm9yY2UgYSBsb2FkIGZyb20g
dGhlIGNhY2hlLgotICAgIC8vCi0gICAgQVNTRVJUKHJlcXVlc3QuaHR0cE1ldGhvZCgpID09ICJQ
T1NUIik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIHN0YXRpYwogdm9pZCBSZXNvdXJjZUhh
bmRsZTo6Y2FjaGVNZXRhZGF0YShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgY29u
c3QgVmVjdG9yPGNoYXI+JiBkYXRhKQogewogICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQo
KS0+Y2FjaGVNZXRhZGF0YShyZXNwb25zZS51cmwoKSwgcmVzcG9uc2UucmVzcG9uc2VUaW1lKCks
IGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcAko
cmV2aXNpb24gMTM4NzExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L1Jlc291cmNlSGFuZGxlQ3VybC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NiwxMiArMTY2LDYg
QEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1TZXREZWZlcnNMbwogI2VuZGlmCiB9CiAK
LWJvb2wgUmVzb3VyY2VIYW5kbGU6OndpbGxMb2FkRnJvbUNhY2hlKFJlc291cmNlUmVxdWVzdCYs
IEZyYW1lKikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0K
LQogYm9vbCBSZXNvdXJjZUhhbmRsZTo6bG9hZHNCbG9ja2VkKCkKIHsKICAgICBub3RJbXBsZW1l
bnRlZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3Vy
Y2VIYW5kbGVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMubW0JKHJldmlzaW9uIDEzODcxMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFuZGxlTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNTcsMTkgKzM1Nyw2IEBAIGJvb2wgUmVzb3VyY2VIYW5kbGU6OmxvYWRz
QmxvY2tlZCgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlc291cmNlSGFuZGxlOjp3
aWxsTG9hZEZyb21DYWNoZShSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIEZyYW1lKikKLXsKLSAg
ICByZXF1ZXN0LnNldENhY2hlUG9saWN5KFJldHVybkNhY2hlRGF0YURvbnRMb2FkKTsKLSAgICBO
U1VSTFJlc3BvbnNlICpuc1VSTFJlc3BvbnNlID0gbmlsOwotICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKLQotICAgIFtOU1VSTENvbm5lY3Rpb24gc2VuZFN5bmNocm9ub3VzUmVxdWVz
dDpyZXF1ZXN0Lm5zVVJMUmVxdWVzdCgpIHJldHVybmluZ1Jlc3BvbnNlOiZuc1VSTFJlc3BvbnNl
IGVycm9yOm5pbF07Ci0gICAgCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICAK
LSAgICByZXR1cm4gbnNVUkxSZXNwb25zZTsKLX0KLQogQ0ZTdHJpbmdSZWYgUmVzb3VyY2VIYW5k
bGU6OnN5bmNocm9ub3VzTG9hZFJ1bkxvb3BNb2RlKCkKIHsKICAgICByZXR1cm4gQ0ZTVFIoIldl
YkNvcmVTeW5jaHJvbm91c0xvYWRlclJ1bkxvb3BNb2RlIik7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1Jlc291cmNlSGFuZGxlUXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VIYW5kbGVRdC5jcHAJ
KHJldmlzaW9uIDEzODcxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQv
UmVzb3VyY2VIYW5kbGVRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNSwzMCArMTI1LDYgQEAg
Ym9vbCBSZXNvdXJjZUhhbmRsZTo6bG9hZHNCbG9ja2VkKCkKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLWJvb2wgUmVzb3VyY2VIYW5kbGU6OndpbGxMb2FkRnJvbUNhY2hlKFJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCwgRnJhbWUqIGZyYW1lKQotewotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIFFOZXR3b3JrQWNjZXNzTWFuYWdlciogbWFuYWdlciA9IDA7Ci0g
ICAgUUFic3RyYWN0TmV0d29ya0NhY2hlKiBjYWNoZSA9IDA7Ci0gICAgaWYgKGZyYW1lLT5sb2Fk
ZXIoKS0+bmV0d29ya2luZ0NvbnRleHQoKSkgewotICAgICAgICBtYW5hZ2VyID0gZnJhbWUtPmxv
YWRlcigpLT5uZXR3b3JraW5nQ29udGV4dCgpLT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpOwotICAg
ICAgICBjYWNoZSA9IG1hbmFnZXItPmNhY2hlKCk7Ci0gICAgfQotCi0gICAgaWYgKCFjYWNoZSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUU5ldHdvcmtDYWNoZU1ldGFEYXRhIGRhdGEg
PSBjYWNoZS0+bWV0YURhdGEocmVxdWVzdC51cmwoKSk7Ci0gICAgaWYgKGRhdGEuaXNWYWxpZCgp
KSB7Ci0gICAgICAgIHJlcXVlc3Quc2V0Q2FjaGVQb2xpY3koUmV0dXJuQ2FjaGVEYXRhRG9udExv
YWQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29y
a2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3Rv
cmVkQ3JlZGVudGlhbHMgLypzdG9yZWRDcmVkZW50aWFscyovLCBSZXNvdXJjZUVycm9yJiBlcnJv
ciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKIHsKICNp
ZiBFTkFCTEUoQkxPQikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCShyZXZpc2lvbiAxMzg3
MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5k
bGVTb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3MywxNCArMTE3Myw2IEBAIGJvb2wgUmVz
b3VyY2VIYW5kbGU6OmxvYWRzQmxvY2tlZCgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29s
IFJlc291cmNlSGFuZGxlOjp3aWxsTG9hZEZyb21DYWNoZShSZXNvdXJjZVJlcXVlc3QmLCBGcmFt
ZSopCi17Ci0gICAgLy8gTm90IGhhdmluZyB0aGlzIGZ1bmN0aW9uIG1lYW5zIHRoYXQgd2UnbGwg
YXNrIHRoZSB1c2VyIGFib3V0IHJlLXBvc3RpbmcgYSBmb3JtCi0gICAgLy8gZXZlbiB3aGVuIHdl
IGdvIGJhY2sgdG8gYSBwYWdlIHRoYXQncyBzdGlsbCBpbiB0aGUgY2FjaGUuCi0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHZvaWQgUmVzb3VyY2VIYW5kbGU6
OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHMgLypzdG9yZWRD
cmVkZW50aWFscyovLCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVz
cG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKIHsKICNpZiBFTkFCTEUoQkxPQikKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL1Jlc291cmNlSGFuZGxlV2luLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9SZXNvdXJj
ZUhhbmRsZVdpbi5jcHAJKHJldmlzaW9uIDEzODcxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvd2luL1Jlc291cmNlSGFuZGxlV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDMxLDEyICs0MzEsNiBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpzZXRTeW5jaHJvbm91c0ludGVy
CiAgICAgZC0+bV9sb2FkU3luY2hyb25vdXNseSA9IHRydWU7CiB9CiAKLWJvb2wgUmVzb3VyY2VI
YW5kbGU6OndpbGxMb2FkRnJvbUNhY2hlKFJlc291cmNlUmVxdWVzdCYsIEZyYW1lKikKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogdm9pZCBwcmVmZXRj
aEROUyhjb25zdCBTdHJpbmcmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7Cg==
</data>
<flag name="review"
          id="199172"
          type_id="1"
          status="+"
          setter="beidson"
    />
          </attachment>
      

    </bug>

</bugzilla>