<?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>132402</bug_id>
          
          <creation_ts>2014-04-30 14:21:34 -0700</creation_ts>
          <short_desc>Move Blob.slice() implementation into BlobRegistryImpl</short_desc>
          <delta_ts>2014-04-30 15:53:07 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1005512</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-04-30 14:21:34 -0700</bug_when>
    <thetext>Blob is an API object living in WebProcess that shouldn&apos;t know the details of snapshotting or size computation. That should happen on NetworkProcess side.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005525</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-04-30 14:43:43 -0700</bug_when>
    <thetext>File size tracking is tricky. At the moment, we capture the size in BlobBuilder, and also in Blob.slice(). This is inconsistent - Files that were used in these APIs are snapshotted, but Files that come from drag&amp;drop or file chooser are not.

This makes particularly little sense for BlobBuilder, because it does not need the size.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005529</commentid>
    <comment_count>2</comment_count>
      <attachid>230525</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-04-30 14:49:16 -0700</bug_when>
    <thetext>Created attachment 230525
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005530</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-30 14:50:50 -0700</bug_when>
    <thetext>Attachment 230525 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.h:93:  The parameter name &quot;url&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 16 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>1005531</commentid>
    <comment_count>4</comment_count>
      <attachid>230525</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-04-30 14:52:58 -0700</bug_when>
    <thetext>Comment on attachment 230525
proposed patch

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

&gt; Source/WebCore/fileapi/ThreadableBlobRegistry.cpp:94
&gt;      if (isMainThread())
&gt;          blobRegistry().registerBlobURL(url, std::move(blobData));

I think yo should put an early return here instead of an else block.

&gt; Source/WebCore/fileapi/ThreadableBlobRegistry.cpp:112
&gt;      if (isMainThread())
&gt;          blobRegistry().registerBlobURL(url, srcURL);

Same thing here.

&gt; Source/WebCore/fileapi/ThreadableBlobRegistry.cpp:127
&gt; +    unsigned long long resultSize;
&gt; +    if (isMainThread())
&gt; +        resultSize = blobRegistry().registerBlobURLForSlice(newURL, srcURL, start, end);

Same thing here.

&gt; Source/WebCore/fileapi/ThreadableBlobRegistry.cpp:137
&gt; +        semaphore.wait(DBL_MAX);

Use std::numeric_limits&lt;double&gt;::max() instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005552</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-04-30 15:34:31 -0700</bug_when>
    <thetext>We normally do an early return for the unusual case, but here, it&apos;s the unusual (secondary thread) case that is long.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005556</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-04-30 15:53:07 -0700</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/r168054&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230525</attachid>
            <date>2014-04-30 14:49:16 -0700</date>
            <delta_ts>2014-04-30 14:52:57 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>Slice.txt</filename>
            <type>text/plain</type>
            <size>21958</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2ODA0MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE0LTA0LTMwICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgQmxvYi5zbGljZSgp
IGltcGxlbWVudGF0aW9uIGludG8gQmxvYlJlZ2lzdHJ5SW1wbAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMyNDAyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUGFydCBvciBjZW50cmFsaXppbmcgdGhlIHJl
c3BvbnNpYmlsaXR5IGZvciBmaWxlIHNpemUgdHJhY2tpbmcuCisKKyAgICAgICAgKiBmaWxlYXBp
L0Jsb2IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6QmxvYik6CisgICAgICAgIChXZWJD
b3JlOjpCbG9iOjpzbGljZSk6IERlbGV0ZWQuCisgICAgICAgICogZmlsZWFwaS9CbG9iLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpCbG9iOjpzbGljZSk6CisgICAgICAgICogZmlsZWFwaS9UaHJlYWRh
YmxlQmxvYlJlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZGFibGVCbG9iUmVn
aXN0cnk6OnJlZ2lzdGVyQmxvYlVSTCk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlQmxv
YlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkxGb3JTbGljZSk6CisgICAgICAgIChXZWJDb3JlOjpy
ZWdpc3RlckJsb2JVUkxUYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnJlZ2lzdGVy
QmxvYlVSTEZyb21UYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKiBmaWxlYXBpL1RocmVhZGFibGVC
bG9iUmVnaXN0cnkuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeS5o
OgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpCbG9iUmVnaXN0cnlJbXBsOjphcHBlbmRTdG9yYWdlSXRlbXMpOgorICAg
ICAgICAoV2ViQ29yZTo6QmxvYlJlZ2lzdHJ5SW1wbDo6cmVnaXN0ZXJCbG9iVVJMRm9yU2xpY2Up
OgorICAgICAgICAoV2ViQ29yZTo6QmxvYlJlZ2lzdHJ5SW1wbDo6YmxvYlNpemUpOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5oOgorCiAyMDE0LTA0LTMwICBE
YXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBbTmV3IE11bHRpY29sdW1u
XSBBU1NFUlRzIGluIGZhc3QvZHluYW1pYy9jb250aW51YXRpb24tZGV0YWNoLWNyYXNoLmh0bWwK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmNwcAkocmV2aXNpb24gMTY4MDQzKQorKysgU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9CbG9iLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsMTYg
QEAgQmxvYjo6QmxvYihjb25zdCBVUkwmIHNyY1VSTCwgY29uc3QgU3RyaQogICAgIFRocmVhZGFi
bGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTCgwLCBtX2ludGVybmFsVVJMLCBzcmNVUkwp
OwogfQogCisjaWYgRU5BQkxFKEJMT0IpCitCbG9iOjpCbG9iKGNvbnN0IFVSTCYgc3JjVVJMLCBs
b25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBlbmQsIGNvbnN0IFN0cmluZyYgdHlwZSkKKyAgICA6
IG1fdHlwZShCbG9iOjpub3JtYWxpemVkQ29udGVudFR5cGUodHlwZSkpCit7CisgICAgLy8gQ3Jl
YXRlIGEgbmV3IGludGVybmFsIFVSTCBhbmQgcmVnaXN0ZXIgaXQgd2l0aCB0aGUgc2FtZSBibG9i
IGRhdGEgYXMgdGhlIHNvdXJjZSBVUkwuCisgICAgbV9pbnRlcm5hbFVSTCA9IEJsb2JVUkw6OmNy
ZWF0ZUludGVybmFsVVJMKCk7CisgICAgbV9zaXplID0gVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6
cmVnaXN0ZXJCbG9iVVJMRm9yU2xpY2UobV9pbnRlcm5hbFVSTCwgc3JjVVJMLCBzdGFydCwgZW5k
KTsKK30KKyNlbmRpZgorCiBCbG9iOjp+QmxvYigpCiB7CiAgICAgVGhyZWFkYWJsZUJsb2JSZWdp
c3RyeTo6dW5yZWdpc3RlckJsb2JVUkwobV9pbnRlcm5hbFVSTCk7CkBAIC0xNzAsNTIgKzE4MCw2
IEBAIGJvb2wgQmxvYjo6aXNOb3JtYWxpemVkQ29udGVudFR5cGUoY29uc3QKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotI2lmIEVOQUJMRShCTE9CKQotUGFzc1JlZlB0cjxCbG9iPiBCbG9iOjpzbGlj
ZShsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBlbmQsIGNvbnN0IFN0cmluZyYgY29udGVudFR5
cGUpIGNvbnN0Ci17Ci0gICAgLy8gV2hlbiB3ZSBzbGljZSBhIGZpbGUgZm9yIHRoZSBmaXJzdCB0
aW1lLCB3ZSBvYnRhaW4gYSBzbmFwc2hvdCBvZiB0aGUgZmlsZSBieSBjYXB0dXJpbmcgaXRzIGN1
cnJlbnQgc2l6ZSBhbmQgbW9kaWZpY2F0aW9uIHRpbWUuCi0gICAgLy8gVGhlIG1vZGlmaWNhdGlv
biB0aW1lIHdpbGwgYmUgdXNlZCB0byB2ZXJpZnkgaWYgdGhlIGZpbGUgaGFzIGJlZW4gY2hhbmdl
ZCBvciBub3QsIHdoZW4gdGhlIHVuZGVybHlpbmcgZGF0YSBhcmUgYWNjZXNzZWQuCi0gICAgbG9u
ZyBsb25nIHNpemU7Ci0gICAgZG91YmxlIG1vZGlmaWNhdGlvblRpbWU7Ci0gICAgaWYgKGlzRmls
ZSgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGludm9sdmVzIHN5bmNocm9ub3VzIGZpbGUg
b3BlcmF0aW9uLiBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIG1ha2UgaXQgYXN5bmNocm9u
b3VzLgotICAgICAgICB0b0ZpbGUodGhpcyktPmNhcHR1cmVTbmFwc2hvdChzaXplLCBtb2RpZmlj
YXRpb25UaW1lKTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQobV9zaXplICE9IC0xKTsK
LSAgICAgICAgc2l6ZSA9IG1fc2l6ZTsKLSAgICB9Ci0KLSAgICAvLyBDb252ZXJ0IHRoZSBuZWdh
dGl2ZSB2YWx1ZSB0aGF0IGlzIHVzZWQgdG8gc2VsZWN0IGZyb20gdGhlIGVuZC4KLSAgICBpZiAo
c3RhcnQgPCAwKQotICAgICAgICBzdGFydCA9IHN0YXJ0ICsgc2l6ZTsKLSAgICBpZiAoZW5kIDwg
MCkKLSAgICAgICAgZW5kID0gZW5kICsgc2l6ZTsKLQotICAgIC8vIENsYW1wIHRoZSByYW5nZSBp
ZiBpdCBleGNlZWRzIHRoZSBzaXplIGxpbWl0LgotICAgIGlmIChzdGFydCA8IDApCi0gICAgICAg
IHN0YXJ0ID0gMDsKLSAgICBpZiAoZW5kIDwgMCkKLSAgICAgICAgZW5kID0gMDsKLSAgICBpZiAo
c3RhcnQgPj0gc2l6ZSkgewotICAgICAgICBzdGFydCA9IDA7Ci0gICAgICAgIGVuZCA9IDA7Ci0g
ICAgfSBlbHNlIGlmIChlbmQgPCBzdGFydCkKLSAgICAgICAgZW5kID0gc3RhcnQ7Ci0gICAgZWxz
ZSBpZiAoZW5kID4gc2l6ZSkKLSAgICAgICAgZW5kID0gc2l6ZTsKLQotICAgIGxvbmcgbG9uZyBs
ZW5ndGggPSBlbmQgLSBzdGFydDsKLSAgICBhdXRvIGJsb2JEYXRhID0gc3RkOjptYWtlX3VuaXF1
ZTxCbG9iRGF0YT4oKTsKLSAgICBibG9iRGF0YS0+c2V0Q29udGVudFR5cGUoQmxvYjo6bm9ybWFs
aXplZENvbnRlbnRUeXBlKGNvbnRlbnRUeXBlKSk7Ci0gICAgaWYgKGlzRmlsZSgpKQotICAgICAg
ICBibG9iRGF0YS0+YXBwZW5kRmlsZSh0b0ZpbGUodGhpcyktPnBhdGgoKSwgc3RhcnQsIGxlbmd0
aCwgbW9kaWZpY2F0aW9uVGltZSk7Ci0gICAgZWxzZQotICAgICAgICBibG9iRGF0YS0+YXBwZW5k
QmxvYihtX2ludGVybmFsVVJMLCBzdGFydCwgbGVuZ3RoKTsKLQotICAgIHJldHVybiBCbG9iOjpj
cmVhdGUoc3RkOjptb3ZlKGJsb2JEYXRhKSwgbGVuZ3RoKTsKLX0KLSNlbmRpZgotCiBVUkxSZWdp
c3RyeSYgQmxvYjo6cmVnaXN0cnkoKSBjb25zdAogewogICAgIHJldHVybiBCbG9iVVJMUmVnaXN0
cnk6OnJlZ2lzdHJ5KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuaAkocmV2aXNpb24gMTY4MDQz
KQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmgJKHdvcmtpbmcgY29weSkKQEAgLTgy
LDcgKzgyLDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFVSTFJlZ2lzdHJ5JiByZWdpc3RyeSgp
IGNvbnN0IG92ZXJyaWRlOwogCiAjaWYgRU5BQkxFKEJMT0IpCi0gICAgUGFzc1JlZlB0cjxCbG9i
PiBzbGljZShsb25nIGxvbmcgc3RhcnQgPSAwLCBsb25nIGxvbmcgZW5kID0gc3RkOjpudW1lcmlj
X2xpbWl0czxsb25nIGxvbmc+OjptYXgoKSwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSA9IFN0
cmluZygpKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPEJsb2I+IHNsaWNlKGxvbmcgbG9uZyBzdGFy
dCA9IDAsIGxvbmcgbG9uZyBlbmQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGxvbmcgbG9uZz46Om1h
eCgpLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlID0gU3RyaW5nKCkpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJsb2IobV9pbnRlcm5hbFVSTCwgc3RhcnQsIGVu
ZCwgY29udGVudFR5cGUpKTsKKyAgICB9CiAjZW5kaWYKIAogcHJvdGVjdGVkOgpAQCAtOTIsNiAr
OTUsMTEgQEAgcHJvdGVjdGVkOgogICAgIC8vIEZvciBkZXNlcmlhbGl6YXRpb24uCiAgICAgQmxv
Yihjb25zdCBVUkwmIHNyY1VSTCwgY29uc3QgU3RyaW5nJiB0eXBlLCBsb25nIGxvbmcgc2l6ZSk7
CiAKKyNpZiBFTkFCTEUoQkxPQikKKyAgICAvLyBGb3Igc2xpY2luZy4KKyAgICBCbG9iKGNvbnN0
IFVSTCYgc3JjVVJMLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBlbmQsIGNvbnN0IFN0cmlu
ZyYgY29udGVudFR5cGUpOworI2VuZGlmCisKICAgICAvLyBUaGlzIGlzIGFuIGludGVybmFsIFVS
TCByZWZlcnJpbmcgdG8gdGhlIGJsb2IgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhpcyBvYmplY3Qu
IEl0IHNlcnZlcwogICAgIC8vIGFzIGFuIGlkZW50aWZpZXIgZm9yIHRoaXMgYmxvYi4gVGhlIGlu
dGVybmFsIFVSTCBpcyBuZXZlciB1c2VkIHRvIHNvdXJjZSB0aGUgYmxvYidzIGNvbnRlbnQKICAg
ICAvLyBpbnRvIGFuIEhUTUwgb3IgZm9yIEZpbGVSZWFkJ2luZywgcHVibGljIGJsb2IgVVJMcyBt
dXN0IGJlIHVzZWQgZm9yIHRob3NlIHB1cnBvc2VzLgpJbmRleDogU291cmNlL1dlYkNvcmUvZmls
ZWFwaS9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9maWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwCShyZXZpc2lvbiAxNjgwNDMp
CisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0hhc2guaD4KKyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9CaW5hcnlTZW1hcGhvcmUuaD4KIAogdXNp
bmcgV1RGOjpUaHJlYWRTcGVjaWZpYzsKIApAQCAtODcsMjQgKzg4LDE4IEBAIHN0YXRpYyBUaHJl
YWRTcGVjaWZpYzxCbG9iVXJsT3JpZ2luTWFwPiYKICAgICByZXR1cm4gKm1hcDsKIH0KIAotc3Rh
dGljIHZvaWQgcmVnaXN0ZXJCbG9iVVJMVGFzayh2b2lkKiBjb250ZXh0KQotewotICAgIHN0ZDo6
dW5pcXVlX3B0cjxCbG9iUmVnaXN0cnlDb250ZXh0PiBibG9iUmVnaXN0cnlDb250ZXh0KHN0YXRp
Y19jYXN0PEJsb2JSZWdpc3RyeUNvbnRleHQqPihjb250ZXh0KSk7Ci0gICAgYmxvYlJlZ2lzdHJ5
KCkucmVnaXN0ZXJCbG9iVVJMKGJsb2JSZWdpc3RyeUNvbnRleHQtPnVybCwgc3RkOjptb3ZlKGJs
b2JSZWdpc3RyeUNvbnRleHQtPmJsb2JEYXRhKSk7Ci19Ci0KIHZvaWQgVGhyZWFkYWJsZUJsb2JS
ZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFVSTCYgdXJsLCBzdGQ6OnVuaXF1ZV9wdHI8
QmxvYkRhdGE+IGJsb2JEYXRhKQogewogICAgIGlmIChpc01haW5UaHJlYWQoKSkKICAgICAgICAg
YmxvYlJlZ2lzdHJ5KCkucmVnaXN0ZXJCbG9iVVJMKHVybCwgc3RkOjptb3ZlKGJsb2JEYXRhKSk7
Ci0gICAgZWxzZQotICAgICAgICBjYWxsT25NYWluVGhyZWFkKCZyZWdpc3RlckJsb2JVUkxUYXNr
LCBuZXcgQmxvYlJlZ2lzdHJ5Q29udGV4dCh1cmwsIHN0ZDo6bW92ZShibG9iRGF0YSkpKTsKLX0K
LQotc3RhdGljIHZvaWQgcmVnaXN0ZXJCbG9iVVJMRnJvbVRhc2sodm9pZCogY29udGV4dCkKLXsK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8QmxvYlJlZ2lzdHJ5Q29udGV4dD4gYmxvYlJlZ2lzdHJ5Q29u
dGV4dChzdGF0aWNfY2FzdDxCbG9iUmVnaXN0cnlDb250ZXh0Kj4oY29udGV4dCkpOwotICAgIGJs
b2JSZWdpc3RyeSgpLnJlZ2lzdGVyQmxvYlVSTChibG9iUmVnaXN0cnlDb250ZXh0LT51cmwsIGJs
b2JSZWdpc3RyeUNvbnRleHQtPnNyY1VSTCk7CisgICAgZWxzZSB7CisgICAgICAgIC8vIEJsb2JS
ZWdpc3RyeUNvbnRleHQgcGVyZm9ybXMgYW4gaXNvbGF0ZWQgY29weSBvZiBkYXRhLgorICAgICAg
ICBCbG9iUmVnaXN0cnlDb250ZXh0KiBjb250ZXh0ID0gbmV3IEJsb2JSZWdpc3RyeUNvbnRleHQo
dXJsLCBzdGQ6Om1vdmUoYmxvYkRhdGEpKTsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChbY29u
dGV4dF0geworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEJsb2JSZWdpc3RyeUNvbnRleHQ+
IGJsb2JSZWdpc3RyeUNvbnRleHQoY29udGV4dCk7CisgICAgICAgICAgICBibG9iUmVnaXN0cnko
KS5yZWdpc3RlckJsb2JVUkwoYmxvYlJlZ2lzdHJ5Q29udGV4dC0+dXJsLCBzdGQ6Om1vdmUoYmxv
YlJlZ2lzdHJ5Q29udGV4dC0+YmxvYkRhdGEpKTsKKyAgICAgICAgfSk7CisgICAgfQogfQogCiB2
b2lkIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChTZWN1cml0eU9yaWdp
biogb3JpZ2luLCBjb25zdCBVUkwmIHVybCwgY29uc3QgVVJMJiBzcmNVUkwpCkBAIC0xMTUsOCAr
MTEwLDMzIEBAIHZvaWQgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG8KIAogICAg
IGlmIChpc01haW5UaHJlYWQoKSkKICAgICAgICAgYmxvYlJlZ2lzdHJ5KCkucmVnaXN0ZXJCbG9i
VVJMKHVybCwgc3JjVVJMKTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoJnJl
Z2lzdGVyQmxvYlVSTEZyb21UYXNrLCBuZXcgQmxvYlJlZ2lzdHJ5Q29udGV4dCh1cmwsIHNyY1VS
TCkpOworICAgIGVsc2UgeworICAgICAgICAvLyBCbG9iUmVnaXN0cnlDb250ZXh0IHBlcmZvcm1z
IGFuIGlzb2xhdGVkIGNvcHkgb2YgZGF0YS4KKyAgICAgICAgQmxvYlJlZ2lzdHJ5Q29udGV4dCog
Y29udGV4dCA9IG5ldyBCbG9iUmVnaXN0cnlDb250ZXh0KHVybCwgc3JjVVJMKTsKKyAgICAgICAg
Y2FsbE9uTWFpblRocmVhZChbY29udGV4dF0geworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PEJsb2JSZWdpc3RyeUNvbnRleHQ+IGJsb2JSZWdpc3RyeUNvbnRleHQoY29udGV4dCk7CisgICAg
ICAgICAgICBibG9iUmVnaXN0cnkoKS5yZWdpc3RlckJsb2JVUkwoYmxvYlJlZ2lzdHJ5Q29udGV4
dC0+dXJsLCBibG9iUmVnaXN0cnlDb250ZXh0LT5zcmNVUkwpOworICAgICAgICB9KTsKKyAgICB9
Cit9CisKK3Vuc2lnbmVkIGxvbmcgbG9uZyBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3Rl
ckJsb2JVUkxGb3JTbGljZShjb25zdCBVUkwmIG5ld1VSTCwgY29uc3QgVVJMJiBzcmNVUkwsIGxv
bmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGVuZCkKK3sKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcg
cmVzdWx0U2l6ZTsKKyAgICBpZiAoaXNNYWluVGhyZWFkKCkpCisgICAgICAgIHJlc3VsdFNpemUg
PSBibG9iUmVnaXN0cnkoKS5yZWdpc3RlckJsb2JVUkxGb3JTbGljZShuZXdVUkwsIHNyY1VSTCwg
c3RhcnQsIGVuZCk7CisgICAgZWxzZSB7CisgICAgICAgIC8vIEJsb2JSZWdpc3RyeUNvbnRleHQg
cGVyZm9ybXMgYW4gaXNvbGF0ZWQgY29weSBvZiBkYXRhLgorICAgICAgICBCbG9iUmVnaXN0cnlD
b250ZXh0KiBjb250ZXh0ID0gbmV3IEJsb2JSZWdpc3RyeUNvbnRleHQobmV3VVJMLCBzcmNVUkwp
OworICAgICAgICBCaW5hcnlTZW1hcGhvcmUgc2VtYXBob3JlOworICAgICAgICBjYWxsT25NYWlu
VGhyZWFkKFtjb250ZXh0LCBzdGFydCwgZW5kLCAmc2VtYXBob3JlLCAmcmVzdWx0U2l6ZV0gewor
ICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEJsb2JSZWdpc3RyeUNvbnRleHQ+IGJsb2JSZWdp
c3RyeUNvbnRleHQoY29udGV4dCk7CisgICAgICAgICAgICByZXN1bHRTaXplID0gYmxvYlJlZ2lz
dHJ5KCkucmVnaXN0ZXJCbG9iVVJMRm9yU2xpY2UoYmxvYlJlZ2lzdHJ5Q29udGV4dC0+dXJsLCBi
bG9iUmVnaXN0cnlDb250ZXh0LT5zcmNVUkwsIHN0YXJ0LCBlbmQpOworICAgICAgICAgICAgc2Vt
YXBob3JlLnNpZ25hbCgpOworICAgICAgICB9KTsKKyAgICAgICAgc2VtYXBob3JlLndhaXQoREJM
X01BWCk7CisgICAgfQorICAgIHJldHVybiByZXN1bHRTaXplOwogfQogCiBzdGF0aWMgdm9pZCB1
bnJlZ2lzdGVyQmxvYlVSTFRhc2sodm9pZCogY29udGV4dCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2ZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2ZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5oCShyZXZpc2lvbiAxNjgwNDMp
CisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuaAkod29y
a2luZyBjb3B5KQpAQCAtNDUsNiArNDUsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgcmVn
aXN0ZXJCbG9iVVJMKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgVVJMJiwgY29uc3QgVVJMJiBzcmNV
UkwpOwogICAgIHN0YXRpYyB2b2lkIHVucmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFVSTCYpOwogCisg
ICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyByZWdpc3RlckJsb2JVUkxGb3JTbGljZShjb25z
dCBVUkwmIG5ld1VSTCwgY29uc3QgVVJMJiBzcmNVUkwsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBs
b25nIGVuZCk7CisKICAgICAvLyBSZXR1cm5zIHRoZSBvcmlnaW4gZm9yIHRoZSBnaXZlbiBibG9i
IFVSTC4gVGhpcyBpcyBiZWNhdXNlIHdlIGFyZSBub3QgYWJsZSB0byBlbWJlZCB0aGUgdW5pcXVl
IHNlY3VyaXR5IG9yaWdpbiBvciB0aGUgb3JpZ2luIG9mIGZpbGUgVVJMCiAgICAgLy8gaW4gdGhl
IGJsb2IgVVJMLgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBnZXRDYWNo
ZWRPcmlnaW4oY29uc3QgVVJMJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0Jsb2JSZWdpc3RyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvQmxvYlJlZ2lzdHJ5LmgJKHJldmlzaW9uIDE2ODA0MykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTUx
LDYgKzUxLDkgQEAgcHVibGljOgogICAgIC8vIFJlZ2lzdGVycyBhIG5ldyBibG9iIFVSTCByZWZl
cnJpbmcgdG8gdGhlIGJsb2IgZGF0YSBpZGVudGlmaWVkIGJ5IHRoZSBzcGVjaWZpZWQgc3JjVVJM
LgogICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckJsb2JVUkwoY29uc3QgVVJMJiwgY29uc3QgVVJM
JiBzcmNVUkwpID0gMDsKIAorICAgIC8vIE5lZ2F0aXZlIHN0YXJ0IGFuZCBlbmQgdmFsdWVzIHNl
bGVjdCBmcm9tIHRoZSBlbmQuCisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgcmVnaXN0
ZXJCbG9iVVJMRm9yU2xpY2UoY29uc3QgVVJMJiwgY29uc3QgVVJMJiBzcmNVUkwsIGxvbmcgbG9u
ZyBzdGFydCwgbG9uZyBsb25nIGVuZCkgPSAwOworCiAgICAgdmlydHVhbCB2b2lkIHVucmVnaXN0
ZXJCbG9iVVJMKGNvbnN0IFVSTCYpID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0Jsb2JSZWdp
c3RyeUltcGwoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCShyZXZpc2lv
biAxNjgwNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3Ry
eUltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw4IEBACiAKICNpbmNsdWRlICJC
bG9iUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJCbG9iU3RvcmFnZURhdGEuaCIKKyNpbmNs
dWRlICJGaWxlTWV0YWRhdGEuaCIKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAi
UmVzb3VyY2VFcnJvci5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAi
UmVzb3VyY2VSZXF1ZXN0LmgiCkBAIC05OSw2ICsxMDEsNyBAQCB2b2lkIEJsb2JSZWdpc3RyeUlt
cGw6OmFwcGVuZFN0b3JhZ2VJdGVtCiAgICAgfQogCiAgICAgZm9yICg7IGl0ZXIgIT0gaXRlbXMu
ZW5kKCkgJiYgbGVuZ3RoID4gMDsgKytpdGVyKSB7CisgICAgICAgIEFTU0VSVChpdGVyLT5sZW5n
dGggIT0gQmxvYkRhdGFJdGVtOjp0b0VuZE9mRmlsZSk7CiAgICAgICAgIGxvbmcgbG9uZyBjdXJy
ZW50TGVuZ3RoID0gaXRlci0+bGVuZ3RoIC0gb2Zmc2V0OwogICAgICAgICBsb25nIGxvbmcgbmV3
TGVuZ3RoID0gY3VycmVudExlbmd0aCA+IGxlbmd0aCA/IGxlbmd0aCA6IGN1cnJlbnRMZW5ndGg7
CiAgICAgICAgIGlmIChpdGVyLT50eXBlID09IEJsb2JEYXRhSXRlbTo6RGF0YSkKQEAgLTE1Niw2
ICsxNTksNDMgQEAgdm9pZCBCbG9iUmVnaXN0cnlJbXBsOjpyZWdpc3RlckJsb2JVUkwoYwogICAg
IG1fYmxvYnMuc2V0KHVybC5zdHJpbmcoKSwgc3JjKTsKIH0KIAordW5zaWduZWQgbG9uZyBsb25n
IEJsb2JSZWdpc3RyeUltcGw6OnJlZ2lzdGVyQmxvYlVSTEZvclNsaWNlKGNvbnN0IFVSTCYgdXJs
LCBjb25zdCBVUkwmIHNyY1VSTCwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgZW5kKQorewor
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQmxvYlN0b3JhZ2VEYXRhKiBvcmlnaW5h
bFN0b3JhZ2VEYXRhID0gbV9ibG9icy5nZXQoc3JjVVJMLnN0cmluZygpKTsKKyAgICBpZiAoIW9y
aWdpbmFsU3RvcmFnZURhdGEpCisgICAgICAgIHJldHVybiAwOworCisgICAgdW5zaWduZWQgbG9u
ZyBsb25nIG9yaWdpbmFsU2l6ZSA9IGJsb2JTaXplKHNyY1VSTCk7CisKKyAgICAvLyBDb252ZXJ0
IHRoZSBuZWdhdGl2ZSB2YWx1ZSB0aGF0IGlzIHVzZWQgdG8gc2VsZWN0IGZyb20gdGhlIGVuZC4K
KyAgICBpZiAoc3RhcnQgPCAwKQorICAgICAgICBzdGFydCA9IHN0YXJ0ICsgb3JpZ2luYWxTaXpl
OworICAgIGlmIChlbmQgPCAwKQorICAgICAgICBlbmQgPSBlbmQgKyBvcmlnaW5hbFNpemU7CisK
KyAgICAvLyBDbGFtcCB0aGUgcmFuZ2UgaWYgaXQgZXhjZWVkcyB0aGUgc2l6ZSBsaW1pdC4KKyAg
ICBpZiAoc3RhcnQgPCAwKQorICAgICAgICBzdGFydCA9IDA7CisgICAgaWYgKGVuZCA8IDApCisg
ICAgICAgIGVuZCA9IDA7CisgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4o
c3RhcnQpID49IG9yaWdpbmFsU2l6ZSkgeworICAgICAgICBzdGFydCA9IDA7CisgICAgICAgIGVu
ZCA9IDA7CisgICAgfSBlbHNlIGlmIChlbmQgPCBzdGFydCkKKyAgICAgICAgZW5kID0gc3RhcnQ7
CisgICAgZWxzZSBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihlbmQpID4gb3Jp
Z2luYWxTaXplKQorICAgICAgICBlbmQgPSBvcmlnaW5hbFNpemU7CisKKyAgICB1bnNpZ25lZCBs
b25nIGxvbmcgbmV3TGVuZ3RoID0gZW5kIC0gc3RhcnQ7CisgICAgUmVmUHRyPEJsb2JTdG9yYWdl
RGF0YT4gbmV3U3RvcmFnZURhdGEgPSBCbG9iU3RvcmFnZURhdGE6OmNyZWF0ZShvcmlnaW5hbFN0
b3JhZ2VEYXRhLT5jb250ZW50VHlwZSgpLCBvcmlnaW5hbFN0b3JhZ2VEYXRhLT5jb250ZW50RGlz
cG9zaXRpb24oKSk7CisKKyAgICBhcHBlbmRTdG9yYWdlSXRlbXMobmV3U3RvcmFnZURhdGEuZ2V0
KCksIG9yaWdpbmFsU3RvcmFnZURhdGEtPml0ZW1zKCksIHN0YXJ0LCBuZXdMZW5ndGgpOworCisg
ICAgbV9ibG9icy5zZXQodXJsLnN0cmluZygpLCBuZXdTdG9yYWdlRGF0YS5yZWxlYXNlKCkpOwor
ICAgIHJldHVybiBuZXdMZW5ndGg7Cit9CisKIHZvaWQgQmxvYlJlZ2lzdHJ5SW1wbDo6dW5yZWdp
c3RlckJsb2JVUkwoY29uc3QgVVJMJiB1cmwpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKQEAgLTE2OCw2ICsyMDgsMjkgQEAgQmxvYlN0b3JhZ2VEYXRhKiBCbG9iUmVnaXN0cnlJbXBs
OjpnZXRCbAogICAgIHJldHVybiBtX2Jsb2JzLmdldCh1cmwuc3RyaW5nKCkpOwogfQogCit1bnNp
Z25lZCBsb25nIGxvbmcgQmxvYlJlZ2lzdHJ5SW1wbDo6YmxvYlNpemUoY29uc3QgVVJMJiB1cmwp
Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBCbG9iU3RvcmFnZURhdGEqIHN0
b3JhZ2VEYXRhID0gbV9ibG9icy5nZXQodXJsLnN0cmluZygpKTsKKyAgICBpZiAoIXN0b3JhZ2VE
YXRhKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyByZXN1bHQg
PSAwOworICAgIGZvciAoY29uc3QgQmxvYkRhdGFJdGVtJiBpdGVtIDogc3RvcmFnZURhdGEtPml0
ZW1zKCkpIHsKKyAgICAgICAgaWYgKGl0ZW0ubGVuZ3RoID09IEJsb2JEYXRhSXRlbTo6dG9FbmRP
ZkZpbGUpIHsKKyAgICAgICAgICAgIEZpbGVNZXRhZGF0YSBtZXRhZGF0YTsKKyAgICAgICAgICAg
IGlmICghZ2V0RmlsZU1ldGFkYXRhKGl0ZW0ucGF0aCwgbWV0YWRhdGEpKQorICAgICAgICAgICAg
ICAgIHJldHVybiAwOworCisgICAgICAgICAgICAvLyBGSVhNRTogRmFjdG9yIG91dCBzaXplIGFu
ZCBtb2RpZmljYXRpb24gdHJhY2tpbmcgZm9yIGEgY2xlYW5lciBpbXBsZW1lbnRhdGlvbi4KKyAg
ICAgICAgICAgIGNvbnN0X2Nhc3Q8QmxvYkRhdGFJdGVtJj4oaXRlbSkubGVuZ3RoID0gbWV0YWRh
dGEubGVuZ3RoOworICAgICAgICAgICAgY29uc3RfY2FzdDxCbG9iRGF0YUl0ZW0mPihpdGVtKS5l
eHBlY3RlZE1vZGlmaWNhdGlvblRpbWUgPSBtZXRhZGF0YS5tb2RpZmljYXRpb25UaW1lOworICAg
ICAgICB9CisgICAgICAgIHJlc3VsdCArPSBpdGVtLmxlbmd0aDsKKyAgICB9CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5o
CShyZXZpc2lvbiAxNjgwNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Js
b2JSZWdpc3RyeUltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNTksOSArNTksMTIgQEAgcHJpdmF0
ZToKIAogICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckJsb2JVUkwoY29uc3QgVVJMJiwgc3RkOjp1
bmlxdWVfcHRyPEJsb2JEYXRhPikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVy
QmxvYlVSTChjb25zdCBVUkwmLCBjb25zdCBVUkwmIHNyY1VSTCkgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgcmVnaXN0ZXJCbG9iVVJMRm9yU2xpY2UoY29uc3QgVVJM
JiwgY29uc3QgVVJMJiBzcmNVUkwsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGVuZCkgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFVSTCYpIG92
ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBpc0Jsb2JSZWdpc3RyeUltcGwoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiB0cnVlOyB9CiAKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgYmxvYlNpemUo
Y29uc3QgVVJMJik7CisKICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEJsb2JTdG9yYWdlRGF0
YT4+IG1fYmxvYnM7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjgwNDMpCisrKyBT
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBAQAor
MjAxNC0wNC0zMCAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KKworICAgICAg
ICBNb3ZlIEJsb2Iuc2xpY2UoKSBpbXBsZW1lbnRhdGlvbiBpbnRvIEJsb2JSZWdpc3RyeUltcGwK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMjQwMgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvRmlsZUFQSS9OZXR3b3JrQmxvYlJlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0Jsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMRm9yU2xpY2UpOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL0ZpbGVBUEkvTmV0d29ya0Jsb2JSZWdpc3RyeS5oOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlZ2lzdGVyQmxv
YlVSTEZvclNsaWNlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvRmlsZUFQ
SS9CbG9iUmVnaXN0cnlQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkJsb2JSZWdpc3RyeVBy
b3h5OjpyZWdpc3RlckJsb2JVUkxGb3JTbGljZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9GaWxl
QVBJL0Jsb2JSZWdpc3RyeVByb3h5Lmg6CisKIDIwMTQtMDQtMzAgIEJyaWFuIEouIEJ1cmcgIDxi
dXJnQGNzLndhc2hpbmd0b24uZWR1PgogCiAgICAgICAgIENsZWFuIHVwIHVubmVjZXNzYXJ5IG1l
dGhvZHMgaW4gdGhlIEJhY2tGb3J3YXJkQ2xpZW50IGludGVyZmFjZQpJbmRleDogU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gMTY4MDQzKQorKysgU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNDEsNiArMjQxLDExIEBAIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M6OnJlZ2kKICAgICBOZXR3b3JrQmxvYlJlZ2lzdHJ5OjpzaGFyZWQoKS5yZWdpc3RlckJs
b2JVUkwodGhpcywgdXJsLCBzcmNVUkwpOwogfQogCit2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjpyZWdpc3RlckJsb2JVUkxGb3JTbGljZShjb25zdCBVUkwmIHVybCwgY29uc3Qg
VVJMJiBzcmNVUkwsIGludDY0X3Qgc3RhcnQsIGludDY0X3QgZW5kLCB1aW50NjRfdCYgcmVzdWx0
U2l6ZSkKK3sKKyAgICByZXN1bHRTaXplID0gTmV0d29ya0Jsb2JSZWdpc3RyeTo6c2hhcmVkKCku
cmVnaXN0ZXJCbG9iVVJMRm9yU2xpY2UodGhpcywgdXJsLCBzcmNVUkwsIHN0YXJ0LCBlbmQpOwor
fQorCiB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjp1bnJlZ2lzdGVyQmxvYlVS
TChjb25zdCBVUkwmIHVybCkKIHsKICAgICBOZXR3b3JrQmxvYlJlZ2lzdHJ5OjpzaGFyZWQoKS51
bnJlZ2lzdGVyQmxvYlVSTCh0aGlzLCB1cmwpOwpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5oCShyZXZpc2lvbiAxNjgwNDMpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCw2ICs5
MCw3IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKEJMT0IpCiAgICAgdm9pZCByZWdpc3RlckJsb2JV
UkwoY29uc3QgV2ViQ29yZTo6VVJMJiwgY29uc3QgQmxvYlJlZ2lzdHJhdGlvbkRhdGEmKTsKICAg
ICB2b2lkIHJlZ2lzdGVyQmxvYlVSTEZyb21VUkwoY29uc3QgV2ViQ29yZTo6VVJMJiwgY29uc3Qg
V2ViQ29yZTo6VVJMJiBzcmNVUkwpOworICAgIHZvaWQgcmVnaXN0ZXJCbG9iVVJMRm9yU2xpY2Uo
Y29uc3QgV2ViQ29yZTo6VVJMJiB1cmwsIGNvbnN0IFdlYkNvcmU6OlVSTCYgc3JjVVJMLCBpbnQ2
NF90IHN0YXJ0LCBpbnQ2NF90IGVuZCwgdWludDY0X3QmIHJlc3VsdFNpemUpOwogICAgIHZvaWQg
dW5yZWdpc3RlckJsb2JVUkwoY29uc3QgV2ViQ29yZTo6VVJMJik7CiAjZW5kaWYKIApJbmRleDog
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4JKHJldmlzaW9uIDE2
ODA0MykKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBA
IG1lc3NhZ2VzIC0+IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXMKICNpZiBFTkFCTEUoQkxP
QikKICAgICBSZWdpc3RlckJsb2JVUkwoV2ViQ29yZTo6VVJMIHVybCwgV2ViS2l0OjpCbG9iUmVn
aXN0cmF0aW9uRGF0YSBkYXRhKQogICAgIFJlZ2lzdGVyQmxvYlVSTEZyb21VUkwoV2ViQ29yZTo6
VVJMIHVybCwgV2ViQ29yZTo6VVJMIHNyY1VSTCkKKyAgICBSZWdpc3RlckJsb2JVUkxGb3JTbGlj
ZShXZWJDb3JlOjpVUkwgdXJsLCBXZWJDb3JlOjpVUkwgc3JjVVJMLCBpbnQ2NF90IHN0YXJ0LCBp
bnQ2NF90IGVuZCkgLT4gKHVpbnQ2NF90IHJlc3VsdFNpemUpCiAgICAgVW5yZWdpc3RlckJsb2JV
UkwoV2ViQ29yZTo6VVJMIHVybCkKICNlbmRpZgogfQpJbmRleDogU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvRmlsZUFQSS9OZXR3b3JrQmxvYlJlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9GaWxlQVBJL05ldHdvcmtCbG9iUmVnaXN0
cnkuY3BwCShyZXZpc2lvbiAxNjgwNDMpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9GaWxlQVBJL05ldHdvcmtCbG9iUmVnaXN0cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2
ICs4NCwyMiBAQCB2b2lkIE5ldHdvcmtCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSCiAgICAg
bV9ibG9ic0ZvckNvbm5lY3Rpb24uZmluZChjb25uZWN0aW9uKS0+dmFsdWUuYWRkKHVybCk7CiB9
CiAKK3VpbnQ2NF90IE5ldHdvcmtCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTEZvclNsaWNl
KE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKiBjb25uZWN0aW9uLCBjb25zdCBXZWJDb3Jl
OjpVUkwmIHVybCwgY29uc3QgV2ViQ29yZTo6VVJMJiBzcmNVUkwsIGludDY0X3Qgc3RhcnQsIGlu
dDY0X3QgZW5kKQoreworICAgIHVpbnQ2NF90IHJlc3VsdFNpemUgPSBibG9iUmVnaXN0cnkoKS5y
ZWdpc3RlckJsb2JVUkxGb3JTbGljZSh1cmwsIHNyY1VSTCwgc3RhcnQsIGVuZCk7CisKKyAgICAv
LyBGSVhNRTogT25seSBzdG9yZSBleHRlbnNpb25zIGZvciBmaWxlcyB0aGF0IHRoZSBzbGljZSBh
Y3R1YWxseSBjb250YWlucywgbm90IGZvciBhbGwgdGhlIGZpbGVzIGluIG9yaWdpbmFsIGJsb2Iu
CisgICAgU2FuZGJveEV4dGVuc2lvbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fc2FuZGJveEV4dGVu
c2lvbnMuZmluZChzcmNVUkwuc3RyaW5nKCkpOworICAgIGlmIChpdGVyICE9IG1fc2FuZGJveEV4
dGVuc2lvbnMuZW5kKCkpCisgICAgICAgIG1fc2FuZGJveEV4dGVuc2lvbnMuYWRkKHVybC5zdHJp
bmcoKSwgaXRlci0+dmFsdWUpOworCisgICAgQVNTRVJUKG1fYmxvYnNGb3JDb25uZWN0aW9uLmNv
bnRhaW5zKGNvbm5lY3Rpb24pKTsKKyAgICBBU1NFUlQobV9ibG9ic0ZvckNvbm5lY3Rpb24uZmlu
ZChjb25uZWN0aW9uKS0+dmFsdWUuY29udGFpbnMoc3JjVVJMKSk7CisgICAgbV9ibG9ic0ZvckNv
bm5lY3Rpb24uZmluZChjb25uZWN0aW9uKS0+dmFsdWUuYWRkKHVybCk7CisKKyAgICByZXR1cm4g
cmVzdWx0U2l6ZTsKK30KKwogdm9pZCBOZXR3b3JrQmxvYlJlZ2lzdHJ5Ojp1bnJlZ2lzdGVyQmxv
YlVSTChOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyogY29ubmVjdGlvbiwgY29uc3QgV2Vi
Q29yZTo6VVJMJiB1cmwpCiB7CiAgICAgYmxvYlJlZ2lzdHJ5KCkudW5yZWdpc3RlckJsb2JVUkwo
dXJsKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0ZpbGVBUEkvTmV0d29y
a0Jsb2JSZWdpc3RyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL0ZpbGVBUEkvTmV0d29ya0Jsb2JSZWdpc3RyeS5oCShyZXZpc2lvbiAxNjgwNDMpCisrKyBT
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9GaWxlQVBJL05ldHdvcmtCbG9iUmVnaXN0cnku
aAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJl
Z2lzdGVyQmxvYlVSTChOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyosIGNvbnN0IFdlYkNv
cmU6OlVSTCYsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpCbG9iRGF0YT4sIGNvbnN0IFZlY3Rv
cjxSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4+Jik7CiAgICAgdm9pZCByZWdpc3RlckJsb2JVUkwo
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqLCBjb25zdCBXZWJDb3JlOjpVUkwmLCBjb25z
dCBXZWJDb3JlOjpVUkwmIHNyY1VSTCk7CisgICAgdWludDY0X3QgcmVnaXN0ZXJCbG9iVVJMRm9y
U2xpY2UoTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqLCBjb25zdCBXZWJDb3JlOjpVUkwm
LCBjb25zdCBXZWJDb3JlOjpVUkwmIHNyY1VSTCwgaW50NjRfdCBzdGFydCwgaW50NjRfdCBlbmQp
OwogICAgIHZvaWQgdW5yZWdpc3RlckJsb2JVUkwoTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MqLCBjb25zdCBXZWJDb3JlOjpVUkwmKTsKIAogICAgIHZvaWQgY29ubmVjdGlvblRvV2ViUHJv
Y2Vzc0RpZENsb3NlKE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKik7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0ZpbGVBUEkvQmxvYlJlZ2lzdHJ5UHJveHkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRmlsZUFQSS9CbG9iUmVnaXN0cnlQ
cm94eS5jcHAJKHJldmlzaW9uIDE2ODA0MykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
RmlsZUFQSS9CbG9iUmVnaXN0cnlQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDYgKzYw
LDE2IEBAIHZvaWQgQmxvYlJlZ2lzdHJ5UHJveHk6OnVucmVnaXN0ZXJCbG9iVVIKICAgICBXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpVbnJlZ2lzdGVyQmxvYlVS
TCh1cmwpLCAwKTsKIH0KIAordW5zaWduZWQgbG9uZyBsb25nIEJsb2JSZWdpc3RyeVByb3h5Ojpy
ZWdpc3RlckJsb2JVUkxGb3JTbGljZShjb25zdCBVUkwmIHVybCwgY29uc3QgVVJMJiBzcmNVUkws
IGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGVuZCkKK3sKKyAgICBBU1NFUlQoV2ViUHJvY2Vz
czo6c2hhcmVkKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpOworCisgICAgdW5zaWduZWQgbG9uZyBs
b25nIHJlc3VsdFNpemU7CisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrQ29u
bmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6UmVnaXN0ZXJCbG9iVVJMRm9yU2xpY2UodXJsLCBzcmNVUkwsIHN0
YXJ0LCBlbmQpLCBNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJlZ2lz
dGVyQmxvYlVSTEZvclNsaWNlOjpSZXBseShyZXN1bHRTaXplKSwgMCkpCisgICAgICAgIHJldHVy
biAwOworICAgIHJldHVybiByZXN1bHRTaXplOworfQorCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUo
QkxPQikgJiYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvRmlsZUFQSS9CbG9iUmVnaXN0cnlQcm94eS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvRmlsZUFQSS9CbG9iUmVnaXN0cnlQcm94eS5oCShyZXZpc2lv
biAxNjgwNDMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0ZpbGVBUEkvQmxvYlJlZ2lz
dHJ5UHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJDb3JlOjpVUkwmLCBzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6QmxvYkRhdGE+KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQg
cmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFdlYkNvcmU6OlVSTCYsIGNvbnN0IFdlYkNvcmU6OlVSTCYg
c3JjVVJMKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3RlckJsb2JVUkwoY29u
c3QgV2ViQ29yZTo6VVJMJikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxv
bmcgcmVnaXN0ZXJCbG9iVVJMRm9yU2xpY2UoY29uc3QgV2ViQ29yZTo6VVJMJiwgY29uc3QgV2Vi
Q29yZTo6VVJMJiBzcmNVUkwsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGVuZCkgb3ZlcnJp
ZGU7CiB9OwogCiB9Cg==
</data>
<flag name="review"
          id="254902"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>