<?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>51527</bug_id>
          
          <creation_ts>2010-12-23 01:40:50 -0800</creation_ts>
          <short_desc>Move V8 to WebCore&apos;s implementation of showModalDialog</short_desc>
          <delta_ts>2010-12-24 01:58:36 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>antonm</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>325988</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-12-23 01:40:50 -0800</bug_when>
    <thetext>Move V8 to WebCore&apos;s implementation of showModalDialog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325989</commentid>
    <comment_count>1</comment_count>
      <attachid>77316</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-12-23 01:44:12 -0800</bug_when>
    <thetext>Created attachment 77316
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326083</commentid>
    <comment_count>2</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-12-23 08:22:20 -0800</bug_when>
    <thetext>LGTM

&gt; WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp:401
&gt; +    if (m_dialogArguments.IsEmpty())

apparently m_dialogArguments can never be empty.  Maybe just ASSERT it here?

&gt; WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp:412
&gt; +    v8::Handle&lt;v8::Value&gt; returnValue = m_dialogContext-&gt;Global()-&gt;Get(v8::String::New(&quot;returnValue&quot;));

technically one doesn&apos;t need to turn empty handle into undefined here, but that might be just safer.   My only concern is it could hide some exception, but I don&apos;t think you&apos;ve introduced it here.

&gt; WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp:430
&gt; +    DOMWindow* activeWindow = state-&gt;activeWindow();

minor cosmetic nit: maybe nuke local variable (activeWindow) and use the expression directly (state-&gt;activeWindow())?

Same for firstWindow.

Feel free to ignore

(In reply to comment #1)
&gt; Created an attachment (id=77316) [details]
&gt; Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326118</commentid>
    <comment_count>3</comment_count>
      <attachid>77316</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-23 09:45:23 -0800</bug_when>
    <thetext>Comment on attachment 77316
Patch

Clearing flags on attachment: 77316

Committed r74563: &lt;http://trac.webkit.org/changeset/74563&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326119</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-23 09:45:32 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326120</commentid>
    <comment_count>5</comment_count>
      <attachid>77316</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-23 09:46:44 -0800</bug_when>
    <thetext>Comment on attachment 77316
Patch

Rejecting attachment 77316 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=eseidel-cq-sf&apos;, &apos;apply-attachment&apos;, &apos;--no-update&apos;, &apos;--non-interactive&apos;, 77316]&quot; exit_code: 2
Last 500 characters of output:
ng file WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp
Hunk #1 FAILED at 378.
Hunk #2 FAILED at 451.
2 out of 2 hunks FAILED -- saving rejects to file WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp.rej
patching file WebCore/bindings/v8/specialization/V8BindingDOMWindow.h
Hunk #1 FAILED at 31.
1 out of 1 hunk FAILED -- saving rejects to file WebCore/bindings/v8/specialization/V8BindingDOMWindow.h.rej

Failed to run &quot;[u&apos;/Projects/CommitQueue/Tools/Scripts/svn-apply&apos;, u&apos;--force&apos;]&quot; exit_code: 1

Full output: http://queues.webkit.org/results/7239128</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326168</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-12-23 11:16:31 -0800</bug_when>
    <thetext>&gt; &gt; WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp:401
&gt; &gt; +    if (m_dialogArguments.IsEmpty())
&gt; 
&gt; apparently m_dialogArguments can never be empty.  Maybe just ASSERT it here?

The old code had this test.  I&apos;ll write a follow-up patch that removes it.

&gt; &gt; WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp:412
&gt; &gt; +    v8::Handle&lt;v8::Value&gt; returnValue = m_dialogContext-&gt;Global()-&gt;Get(v8::String::New(&quot;returnValue&quot;));
&gt; 
&gt; technically one doesn&apos;t need to turn empty handle into undefined here, but that might be just safer.   My only concern is it could hide some exception, but I don&apos;t think you&apos;ve introduced it here.

Yeah, the old code did that, and I thought that was unnecessary.  Is undefined different than an empty handle?

&gt; &gt; WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp:430
&gt; &gt; +    DOMWindow* activeWindow = state-&gt;activeWindow();
&gt; 
&gt; minor cosmetic nit: maybe nuke local variable (activeWindow) and use the expression directly (state-&gt;activeWindow())?
&gt; 
&gt; Same for firstWindow.

I&apos;d like to keep this code this way to match the JSC code as close as possible, although I agree it&apos;s kind of silly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326172</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-12-23 11:17:45 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; I&apos;d like to keep this code this way to match the JSC code as close as possible, although I agree it&apos;s kind of silly.

We can change/refine both if practical now.

I’d also like to look over the “generic bindings” machinery to see if there is more we can remove.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326174</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-12-23 11:22:28 -0800</bug_when>
    <thetext>&gt; &gt; I&apos;d like to keep this code this way to match the JSC code as close as possible, although I agree it&apos;s kind of silly.
&gt; 
&gt; We can change/refine both if practical now.

Ok.  I&apos;ll post a cleanup patch for both.

&gt; I’d also like to look over the “generic bindings” machinery to see if there is more we can remove.

The next area I would look at is Location.  The main thing to move into WebCore is shouldAllowNavigation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326518</commentid>
    <comment_count>9</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-12-24 01:58:36 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; &gt; WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp:412
&gt; &gt; &gt; +    v8::Handle&lt;v8::Value&gt; returnValue = m_dialogContext-&gt;Global()-&gt;Get(v8::String::New(&quot;returnValue&quot;));
&gt; &gt; 
&gt; &gt; technically one doesn&apos;t need to turn empty handle into undefined here, but that might be just safer.   My only concern is it could hide some exception, but I don&apos;t think you&apos;ve introduced it here.
&gt; 
&gt; Yeah, the old code did that, and I thought that was unnecessary.  Is undefined different than an empty handle?

They are different, but when coming back to v8 from C++ callback, empty handle gets converted to undefined.  But as you moved this code into different method, it might be more robust to do this check anyway.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77316</attachid>
            <date>2010-12-23 01:44:12 -0800</date>
            <delta_ts>2010-12-23 09:46:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51527-20101223014411.patch</filename>
            <type>text/plain</type>
            <size>22090</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NDU0NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMTAtMTItMjMgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3Zl
IFY4IHRvIFdlYkNvcmUncyBpbXBsZW1lbnRhdGlvbiBvZiBzaG93TW9kYWxEaWFsb2cKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxNTI3CisKKyAgICAg
ICAgVGhpcyBjb2RlIGlzIGJhc2ljYWxseSB2ZXJiYXRpbSB0cmFuc2xhdGlvbiBmcm9tIHRoZSBK
YXZhU2NyaXB0Q29yZQorICAgICAgICBiaW5kaW5ncy4gIFRoZSBvbmx5IGludGVudGlvbmFsIGRp
ZmZlcmVuY2UgaXMgaW4gdGhlIHdvcmxkIHNlbGVjdGlvbgorICAgICAgICBmb3IgdGhlIGRpYWxv
ZydzIGZyYW1lLiAgSSBzdXNwZWN0IEphdmFTY3JpcHRDb3JlJ3MgYmluZGluZ3MgaGF2ZSBhCisg
ICAgICAgIHN1YnRsZSBidWcgdGhlcmUuCisKKyAgICAgICAgSW4gdGhpcyBwYXRjaCwgSSBhbHNv
IHJlbW92ZSBhIGJ1bmNoIG9mIG5vdy11bm5lZWRlZCBjb2RlIGluIHRoZQorICAgICAgICBnZW5l
cmljIGJpbmRpbmdzLgorCisgICAgICAgICogYmluZGluZ3MvZ2VuZXJpYy9CaW5kaW5nRE9NV2lu
ZG93Lmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RGlhbG9nSGFuZGxlcjo6ZGlhbG9nQ3JlYXRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRVcERpYWxvZyk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9N
V2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpYWxvZ0hhbmRsZXI6OkRpYWxv
Z0hhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlhbG9nSGFuZGxlcjo6ZGlhbG9nQ3JlYXRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpEaWFsb2dIYW5kbGVyOjpyZXR1cm5WYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRVcERpYWxvZyk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRv
dzo6c2hvd01vZGFsRGlhbG9nQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5k
b3c6Om9wZW5DYWxsYmFjayk6CisgICAgICAgICogYmluZGluZ3Mvdjgvc3BlY2lhbGl6YXRpb24v
VjhCaW5kaW5nRE9NV2luZG93Lmg6CisKIDIwMTAtMTItMjMgIE5vZWwgR29yZG9uICA8bm9lbC5n
b3Jkb25AZ21haWwuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvQmluZGluZ0RPTVdpbmRvdy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9CaW5kaW5nRE9NV2luZG93LmgJKHJldmlzaW9u
IDc0NTQyKQorKysgV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0JpbmRpbmdET01XaW5kb3cuaAko
d29ya2luZyBjb3B5KQpAQCAtMzEsMjM4ICszMSw5IEBACiAjaWZuZGVmIEJpbmRpbmdET01XaW5k
b3dfaAogI2RlZmluZSBCaW5kaW5nRE9NV2luZG93X2gKIAotI2luY2x1ZGUgIkRPTVdpbmRvdy5o
IgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgotI2lu
Y2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAi
R2VuZXJpY0JpbmRpbmcuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1T
Y3JlZW4uaCIKLSNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiU2VjdXJp
dHlPcmlnaW4uaCIKLSNpbmNsdWRlICJXaW5kb3dGZWF0dXJlcy5oIgotCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXRlbXBsYXRlIDxjbGFzcyBCaW5kaW5nPgotY2xhc3MgQmluZGluZ0RPTVdpbmRv
dyB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBCaW5kaW5nOjpWYWx1ZSBCaW5kaW5n
VmFsdWU7Ci0KLSAgICBzdGF0aWMgRnJhbWUqIGNyZWF0ZVdpbmRvdyhTdGF0ZTxCaW5kaW5nPios
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJhbWUqIGNhbGxpbmdGcmFtZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFtZSogZW50ZXJlZEZyYW1lLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEZyYW1lKiBvcGVuZXJGcmFtZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHVybCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGZyYW1lTmFtZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBXaW5kb3dGZWF0dXJlcyYgd2luZG93RmVhdHVyZXMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQmluZGluZ1ZhbHVlIGRpYWxvZ0FyZ3MpOwotCi0g
ICAgc3RhdGljIFdlYkNvcmU6OkRPTVdpbmRvdyogb3BlbihTdGF0ZTxCaW5kaW5nPiosCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpET01XaW5kb3cqIHBhcmVu
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdXJs
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBmcmFt
ZU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXaW5kb3dG
ZWF0dXJlcyYgcmF3RmVhdHVyZXMpOwotCi1wcml2YXRlOgotICAgIC8vIEhvcml6b250YWwgYW5k
IHZlcnRpY2FsIG9mZnNldCwgZnJvbSB0aGUgcGFyZW50IGNvbnRlbnQgYXJlYSwKLSAgICAvLyBh
cm91bmQgbmV3bHkgb3BlbmVkIHBvcHVwcyB0aGF0IGRvbid0IHNwZWNpZnkgYSBsb2NhdGlvbi4K
LSAgICBzdGF0aWMgY29uc3QgaW50IHBvcHVwVGlsZVBpeGVscyA9IDEwOwotfTsKLQotLy8gSW1w
bGVtZW50YXRpb25zIG9mIHRlbXBsYXRlZCBtZXRob2RzIG11c3QgYmUgaW4gdGhpcyBmaWxlLgot
Ci10ZW1wbGF0ZSA8Y2xhc3MgQmluZGluZz4KLUZyYW1lKiBCaW5kaW5nRE9NV2luZG93PEJpbmRp
bmc+OjpjcmVhdGVXaW5kb3coU3RhdGU8QmluZGluZz4qIHN0YXRlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFtZSogY2FsbGluZ0ZyYW1lLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFtZSogZW50ZXJl
ZEZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG
cmFtZSogb3BlbmVyRnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFN0cmluZyYgdXJsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGZyYW1lTmFtZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2luZG93RmVhdHVyZXMm
IHdpbmRvd0ZlYXR1cmVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBCaW5kaW5nVmFsdWUgZGlhbG9nQXJncykKLXsKLSAgICBBU1NFUlQoY2FsbGluZ0Zy
YW1lKTsKLSAgICBBU1NFUlQoZW50ZXJlZEZyYW1lKTsKLQotICAgIFJlc291cmNlUmVxdWVzdCBy
ZXF1ZXN0OwotCi0gICAgLy8gRm9yIHdoYXRldmVyIHJlYXNvbiwgRmlyZWZveCB1c2VzIHRoZSBl
bnRlcmVkIGZyYW1lIHRvIGRldGVybWluZQotICAgIC8vIHRoZSBvdXRnb2luZ1JlZmVycmVyLiAg
V2UgcmVwbGljYXRlIHRoYXQgYmVoYXZpb3IgaGVyZS4KLSAgICBTdHJpbmcgcmVmZXJyZXIgPSBl
bnRlcmVkRnJhbWUtPmxvYWRlcigpLT5vdXRnb2luZ1JlZmVycmVyKCk7Ci0gICAgcmVxdWVzdC5z
ZXRIVFRQUmVmZXJyZXIocmVmZXJyZXIpOwotICAgIEZyYW1lTG9hZGVyOjphZGRIVFRQT3JpZ2lu
SWZOZWVkZWQocmVxdWVzdCwgZW50ZXJlZEZyYW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdPcmlnaW4o
KSk7Ci0gICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZVJlcXVlc3QoY2FsbGluZ0ZyYW1lLT5kb2N1
bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCByZXF1ZXN0LCBmcmFtZU5hbWUpOwotCi0gICAgLy8g
RklYTUU6IEl0J3MgbXVjaCBiZXR0ZXIgZm9yIGNsaWVudCBBUEkgaWYgYSBuZXcgd2luZG93IHN0
YXJ0cyB3aXRoIGEgVVJMLAotICAgIC8vIGhlcmUgd2hlcmUgd2Uga25vdyB3aGF0IFVSTCB3ZSBh
cmUgZ29pbmcgdG8gb3Blbi4gVW5mb3J0dW5hdGVseSwgdGhpcwotICAgIC8vIGNvZGUgcGFzc2Vz
IHRoZSBlbXB0eSBzdHJpbmcgZm9yIHRoZSBVUkwsIGJ1dCB0aGVyZSdzIGEgcmVhc29uIGZvciB0
aGF0LgotICAgIC8vIEJlZm9yZSBsb2FkaW5nIHdlIGhhdmUgdG8gc2V0IHVwIHRoZSBvcGVuZXIs
IG9wZW5lZEJ5RE9NLAotICAgIC8vIGFuZCBkaWFsb2dBcmd1bWVudHMgdmFsdWVzLiBBbHNvLCB0
byBkZWNpZGUgd2hldGhlciB0byB1c2UgdGhlIFVSTAotICAgIC8vIHdlIGN1cnJlbnRseSBkbyBh
biBhbGxvd3NBY2Nlc3NGcm9tIGNhbGwgdXNpbmcgdGhlIHdpbmRvdyB3ZSBjcmVhdGUsCi0gICAg
Ly8gd2hpY2ggY2FuJ3QgYmUgZG9uZSBiZWZvcmUgY3JlYXRpbmcgaXQuIFdlJ2QgaGF2ZSB0byBy
ZXNvbHZlIGFsbCB0aG9zZQotICAgIC8vIGlzc3VlcyB0byBwYXNzIHRoZSBVUkwgaW5zdGVhZCBv
ZiAiIi4KLQotICAgIGJvb2wgY3JlYXRlZDsKLSAgICAvLyBXZSBwYXNzIHRoZSBvcGVuZXIgZnJh
bWUgZm9yIHRoZSBsb29rdXBGcmFtZSBpbiBjYXNlIHRoZSBhY3RpdmUgZnJhbWUgaXMgZGlmZmVy
ZW50IGZyb20KLSAgICAvLyB0aGUgb3BlbmVyIGZyYW1lLCBhbmQgdGhlIG5hbWUgcmVmZXJlbmNl
cyBhIGZyYW1lIHJlbGF0aXZlIHRvIHRoZSBvcGVuZXIgZnJhbWUuCi0gICAgRnJhbWUqIG5ld0Zy
YW1lID0gV2ViQ29yZTo6Y3JlYXRlV2luZG93KGNhbGxpbmdGcmFtZSwgb3BlbmVyRnJhbWUsIGZy
YW1lUmVxdWVzdCwgd2luZG93RmVhdHVyZXMsIGNyZWF0ZWQpOwotICAgIGlmICghbmV3RnJhbWUp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgbmV3RnJhbWUtPmxvYWRlcigpLT5zZXRPcGVuZXIo
b3BlbmVyRnJhbWUpOwotICAgIG5ld0ZyYW1lLT5wYWdlKCktPnNldE9wZW5lZEJ5RE9NKCk7Ci0K
LSAgICBCaW5kaW5nOjpET01XaW5kb3c6OnN0b3JlRGlhbG9nQXJncyhzdGF0ZSwgbmV3RnJhbWUs
IGRpYWxvZ0FyZ3MpOwotCi0gICAgaWYgKCFwcm90b2NvbElzSmF2YVNjcmlwdCh1cmwpIHx8IEJp
bmRpbmdTZWN1cml0eTxCaW5kaW5nPjo6Y2FuQWNjZXNzRnJhbWUoc3RhdGUsIG5ld0ZyYW1lLCB0
cnVlKSkgewotICAgICAgICBLVVJMIGNvbXBsZXRlZFVybCA9IHVybC5pc0VtcHR5KCkgPyBLVVJM
KFBhcnNlZFVSTFN0cmluZywgIiIpIDogY29tcGxldGVVUkwoc3RhdGUsIHVybCk7Ci0gICAgICAg
IGlmIChjcmVhdGVkKSB7Ci0gICAgICAgICAgICBuZXdGcmFtZS0+bG9hZGVyKCktPmNoYW5nZUxv
Y2F0aW9uKGNhbGxpbmdGcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSwKLSAgICAg
ICAgICAgICAgICBjb21wbGV0ZWRVcmwsIHJlZmVycmVyLCBmYWxzZSwgZmFsc2UpOwotICAgICAg
ICB9IGVsc2UgaWYgKCF1cmwuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBuZXdGcmFtZS0+bmF2
aWdhdGlvblNjaGVkdWxlcigpLT5zY2hlZHVsZUxvY2F0aW9uQ2hhbmdlKGNhbGxpbmdGcmFtZS0+
ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSwKLSAgICAgICAgICAgICAgICBjb21wbGV0ZWRV
cmwuc3RyaW5nKCksIHJlZmVycmVyLCBmYWxzZSwgZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgcmV0dXJuIG5ld0ZyYW1lOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBCaW5kaW5nPgotV2Vi
Q29yZTo6RE9NV2luZG93KiBCaW5kaW5nRE9NV2luZG93PEJpbmRpbmc+OjpvcGVuKFN0YXRlPEJp
bmRpbmc+KiBzdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXZWJDb3JlOjpET01XaW5kb3cqIHBhcmVudCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHVybFN0cmlu
ZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBTdHJpbmcmIGZyYW1lTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBXaW5kb3dGZWF0dXJlcyYgcmF3RmVhdHVyZXMpCi17
Ci0gICAgRnJhbWUqIGZyYW1lID0gcGFyZW50LT5mcmFtZSgpOwotCi0gICAgaWYgKCFCaW5kaW5n
U2VjdXJpdHk8QmluZGluZz46OmNhbkFjY2Vzc0ZyYW1lKHN0YXRlLCBmcmFtZSwgdHJ1ZSkpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgRnJhbWUqIGZpcnN0RnJhbWUgPSBzdGF0ZS0+Zmlyc3RG
cmFtZSgpOwotICAgIGlmICghZmlyc3RGcmFtZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBG
cmFtZSogYWN0aXZlRnJhbWUgPSBzdGF0ZS0+YWN0aXZlRnJhbWUoKTsKLSAgICAvLyBXZSBtYXkg
bm90IGhhdmUgYSBjYWxsaW5nIGNvbnRleHQgaWYgd2UgYXJlIGludm9rZWQgYnkgYSBwbHVnaW4K
LSAgICAvLyB2aWEgTlBBUEkuCi0gICAgaWYgKCFhY3RpdmVGcmFtZSkKLSAgICAgICAgYWN0aXZl
RnJhbWUgPSBmaXJzdEZyYW1lOwotCi0gICAgUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7Ci0g
ICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIEJlY2F1c2UgRnJhbWVU
cmVlOjpmaW5kKCkgcmV0dXJucyB0cnVlIGZvciBlbXB0eSBzdHJpbmdzLCB3ZSBtdXN0IGNoZWNr
Ci0gICAgLy8gZm9yIGVtcHR5IGZyYW1lbmFtZXMuIE90aGVyd2lzZSwgaWxsZWdpdGltYXRlIHdp
bmRvdy5vcGVuKCkgY2FsbHMgd2l0aAotICAgIC8vIG5vIG5hbWUgd2lsbCBwYXNzIHJpZ2h0IHRo
cm91Z2ggdGhlIHBvcHVwIGJsb2NrZXIuCi0gICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk8QmluZGlu
Zz46OmFsbG93UG9wVXAoc3RhdGUpCi0gICAgICAgICYmIChmcmFtZU5hbWUuaXNFbXB0eSgpIHx8
ICFmcmFtZS0+dHJlZSgpLT5maW5kKGZyYW1lTmFtZSkpKSB7Ci0gICAgICAgIHJldHVybiAwOwot
ICAgIH0KLQotICAgIC8vIEdldCB0aGUgdGFyZ2V0IGZyYW1lIGZvciB0aGUgc3BlY2lhbCBjYXNl
cyBvZiBfdG9wIGFuZCBfcGFyZW50LgotICAgIC8vIEluIHRob3NlIGNhc2VzLCB3ZSBjYW4gc2No
ZWR1bGUgYSBsb2NhdGlvbiBjaGFuZ2UgcmlnaHQgbm93IGFuZAotICAgIC8vIHJldHVybiBlYXJs
eS4KLSAgICBib29sIHRvcE9yUGFyZW50ID0gZmFsc2U7Ci0gICAgaWYgKGZyYW1lTmFtZSA9PSAi
X3RvcCIpIHsKLSAgICAgICAgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50b3AoKTsKLSAgICAgICAg
dG9wT3JQYXJlbnQgPSB0cnVlOwotICAgIH0gZWxzZSBpZiAoZnJhbWVOYW1lID09ICJfcGFyZW50
IikgewotICAgICAgICBpZiAoRnJhbWUqIHBhcmVudCA9IGZyYW1lLT50cmVlKCktPnBhcmVudCgp
KQotICAgICAgICAgICAgZnJhbWUgPSBwYXJlbnQ7Ci0gICAgICAgIHRvcE9yUGFyZW50ID0gdHJ1
ZTsKLSAgICB9Ci0gICAgaWYgKHRvcE9yUGFyZW50KSB7Ci0gICAgICAgIGlmICghQmluZGluZ1Nl
Y3VyaXR5PEJpbmRpbmc+OjpzaG91bGRBbGxvd05hdmlnYXRpb24oc3RhdGUsIGZyYW1lKSkKLSAg
ICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIFN0cmluZyBjb21wbGV0ZWRVcmw7Ci0gICAg
ICAgIGlmICghdXJsU3RyaW5nLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbXBsZXRlZFVybCA9
IGNvbXBsZXRlVVJMKHN0YXRlLCB1cmxTdHJpbmcpOwotCi0gICAgICAgIGlmICghY29tcGxldGVk
VXJsLmlzRW1wdHkoKQotICAgICAgICAgICAgJiYgKCFwcm90b2NvbElzSmF2YVNjcmlwdChjb21w
bGV0ZWRVcmwpCi0gICAgICAgICAgICAgICAgfHwgQmluZGluZ1NlY3VyaXR5PEJpbmRpbmc+Ojpj
YW5BY2Nlc3NGcmFtZShzdGF0ZSwgZnJhbWUsIHRydWUpKSkgewotICAgICAgICAgICAgLy8gRm9y
IHdoYXRldmVyIHJlYXNvbiwgRmlyZWZveCB1c2VzIHRoZSBmaXJzdCBmcmFtZSB0byBkZXRlcm1p
bmUKLSAgICAgICAgICAgIC8vIHRoZSBvdXRnb2luZ1JlZmVycmVyLiAgV2UgcmVwbGljYXRlIHRo
YXQgYmVoYXZpb3IgaGVyZS4KLSAgICAgICAgICAgIFN0cmluZyByZWZlcnJlciA9IGZpcnN0RnJh
bWUtPmxvYWRlcigpLT5vdXRnb2luZ1JlZmVycmVyKCk7Ci0KLSAgICAgICAgICAgIGZyYW1lLT5u
YXZpZ2F0aW9uU2NoZWR1bGVyKCktPnNjaGVkdWxlTG9jYXRpb25DaGFuZ2UoYWN0aXZlRnJhbWUt
PmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCksCi0gICAgICAgICAgICAgICAgY29tcGxldGVk
VXJsLCByZWZlcnJlciwgZmFsc2UsIGZhbHNlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
ZnJhbWUtPmRvbVdpbmRvdygpOwotICAgIH0KLQotICAgIC8vIEluIHRoZSBjYXNlIG9mIGEgbmFt
ZWQgZnJhbWUgb3IgYSBuZXcgd2luZG93LCB3ZSdsbCB1c2UgdGhlCi0gICAgLy8gY3JlYXRlV2lu
ZG93KCkgaGVscGVyLgotCi0gICAgLy8gV29yayB3aXRoIGEgY29weSBvZiB0aGUgcGFyc2VkIHZh
bHVlcyBzbyB3ZSBjYW4gcmVzdG9yZSB0aGUKLSAgICAvLyB2YWx1ZXMgd2UgbWF5IG5vdCB3YW50
IHRvIG92ZXJ3cml0ZSBhZnRlciB3ZSBkbyB0aGUgbXVsdGlwbGUKLSAgICAvLyBtb25pdG9yIGZp
eGVzLgotICAgIFdpbmRvd0ZlYXR1cmVzIHdpbmRvd0ZlYXR1cmVzKHJhd0ZlYXR1cmVzKTsKLSAg
ICBGbG9hdFJlY3Qgc2NyZWVuUmVjdCA9IHNjcmVlbkF2YWlsYWJsZVJlY3QocGFnZS0+bWFpbkZy
YW1lKCktPnZpZXcoKSk7Ci0KLSAgICAvLyBTZXQgZGVmYXVsdCBzaXplIGFuZCBsb2NhdGlvbiBu
ZWFyIHBhcmVudCB3aW5kb3cgaWYgbm9uZSB3ZXJlIHNwZWNpZmllZC4KLSAgICAvLyBUaGVzZSBt
YXkgYmUgZnVydGhlciBtb2RpZmllZCBieSBhZGp1c3RXaW5kb3dSZWN0LCBiZWxvdy4KLSAgICBp
ZiAoIXdpbmRvd0ZlYXR1cmVzLnhTZXQpIHsKLSAgICAgICAgd2luZG93RmVhdHVyZXMueCA9IHBh
cmVudC0+c2NyZWVuWCgpIC0gc2NyZWVuUmVjdC54KCkgKyBwb3B1cFRpbGVQaXhlbHM7Ci0gICAg
ICAgIHdpbmRvd0ZlYXR1cmVzLnhTZXQgPSB0cnVlOwotICAgIH0KLSAgICBpZiAoIXdpbmRvd0Zl
YXR1cmVzLnlTZXQpIHsKLSAgICAgICAgd2luZG93RmVhdHVyZXMueSA9IHBhcmVudC0+c2NyZWVu
WSgpIC0gc2NyZWVuUmVjdC55KCkgKyBwb3B1cFRpbGVQaXhlbHM7Ci0gICAgICAgIHdpbmRvd0Zl
YXR1cmVzLnlTZXQgPSB0cnVlOwotICAgIH0KLSAgICBpZiAoIXdpbmRvd0ZlYXR1cmVzLndpZHRo
U2V0KSB7Ci0gICAgICAgIHdpbmRvd0ZlYXR1cmVzLndpZHRoID0gcGFyZW50LT5pbm5lcldpZHRo
KCk7Ci0gICAgICAgIHdpbmRvd0ZlYXR1cmVzLndpZHRoU2V0ID0gdHJ1ZTsKLSAgICB9Ci0gICAg
aWYgKCF3aW5kb3dGZWF0dXJlcy5oZWlnaHRTZXQpIHsKLSAgICAgICAgd2luZG93RmVhdHVyZXMu
aGVpZ2h0ID0gcGFyZW50LT5pbm5lckhlaWdodCgpOwotICAgICAgICB3aW5kb3dGZWF0dXJlcy5o
ZWlnaHRTZXQgPSB0cnVlOwotICAgIH0KLQotICAgIEZsb2F0UmVjdCB3aW5kb3dSZWN0KHdpbmRv
d0ZlYXR1cmVzLngsIHdpbmRvd0ZlYXR1cmVzLnksIHdpbmRvd0ZlYXR1cmVzLndpZHRoLCB3aW5k
b3dGZWF0dXJlcy5oZWlnaHQpOwotCi0gICAgLy8gVGhlIG5ldyB3aW5kb3cncyBsb2NhdGlvbiBp
cyByZWxhdGl2ZSB0byBpdHMgY3VycmVudCBzY3JlZW4sIHNvIHNoaWZ0Ci0gICAgLy8gaXQgaW4g
Y2FzZSBpdCdzIG9uIGEgc2Vjb25kYXJ5IG1vbml0b3IuIFNlZSBodHRwOi8vYi92aWV3SXNzdWU/
aWQ9OTY3OTA1LgotICAgIHdpbmRvd1JlY3QubW92ZShzY3JlZW5SZWN0LngoKSwgc2NyZWVuUmVj
dC55KCkpOwotICAgIFdlYkNvcmU6OkRPTVdpbmRvdzo6YWRqdXN0V2luZG93UmVjdChzY3JlZW5S
ZWN0LCB3aW5kb3dSZWN0LCB3aW5kb3dSZWN0KTsKLQotICAgIHdpbmRvd0ZlYXR1cmVzLnggPSB3
aW5kb3dSZWN0LngoKTsKLSAgICB3aW5kb3dGZWF0dXJlcy55ID0gd2luZG93UmVjdC55KCk7Ci0g
ICAgd2luZG93RmVhdHVyZXMuaGVpZ2h0ID0gd2luZG93UmVjdC5oZWlnaHQoKTsKLSAgICB3aW5k
b3dGZWF0dXJlcy53aWR0aCA9IHdpbmRvd1JlY3Qud2lkdGgoKTsKLQotICAgIC8vIElmIGVpdGhl
ciBvZiB0aGUgb3JpZ2luIGNvb3JkaW5hdGVzIG9yIGRpbWVuc2lvbnMgd2VyZW4ndCBzZXQKLSAg
ICAvLyBpbiB0aGUgb3JpZ2luYWwgc3RyaW5nLCBtYWtlIHN1cmUgdGhleSBhcmVuJ3Qgc2V0IG5v
dy4KLSAgICBpZiAoIXJhd0ZlYXR1cmVzLnhTZXQpIHsKLSAgICAgICAgd2luZG93RmVhdHVyZXMu
eCA9IDA7Ci0gICAgICAgIHdpbmRvd0ZlYXR1cmVzLnhTZXQgPSBmYWxzZTsKLSAgICB9Ci0gICAg
aWYgKCFyYXdGZWF0dXJlcy55U2V0KSB7Ci0gICAgICAgIHdpbmRvd0ZlYXR1cmVzLnkgPSAwOwot
ICAgICAgICB3aW5kb3dGZWF0dXJlcy55U2V0ID0gZmFsc2U7Ci0gICAgfQotICAgIGlmICghcmF3
RmVhdHVyZXMud2lkdGhTZXQpIHsKLSAgICAgIHdpbmRvd0ZlYXR1cmVzLndpZHRoID0gMDsKLSAg
ICAgIHdpbmRvd0ZlYXR1cmVzLndpZHRoU2V0ID0gZmFsc2U7Ci0gICAgfQotICAgIGlmICghcmF3
RmVhdHVyZXMuaGVpZ2h0U2V0KSB7Ci0gICAgICB3aW5kb3dGZWF0dXJlcy5oZWlnaHQgPSAwOwot
ICAgICAgd2luZG93RmVhdHVyZXMuaGVpZ2h0U2V0ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgZnJh
bWUgPSBjcmVhdGVXaW5kb3coc3RhdGUsIGFjdGl2ZUZyYW1lLCBmaXJzdEZyYW1lLCBmcmFtZSwg
dXJsU3RyaW5nLCBmcmFtZU5hbWUsIHdpbmRvd0ZlYXR1cmVzLCBCaW5kaW5nOjplbXB0eVNjcmlw
dFZhbHVlKCkpOwotCi0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBy
ZXR1cm4gZnJhbWUtPmRvbVdpbmRvdygpOwotfQorLy8gRklYTUU6IFJlbW92ZSB0aGlzIGZpbGUu
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlzaW9uIDc0NTQyKQorKysgV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwNiw2ICs3MDYs
OCBAQCBwcml2YXRlOgogCiBpbmxpbmUgdm9pZCBEaWFsb2dIYW5kbGVyOjpkaWFsb2dDcmVhdGVk
KERPTVdpbmRvdyogZGlhbG9nKQogeworICAgIC8vIEZJWE1FOiBUaGlzIGxvb2tzIGxpa2UgYSBs
ZWFrIGJldHdlZW4gdGhlIG5vcm1hbCB3b3JsZCBhbmQgYW4gaXNvbGF0ZWQKKyAgICAvLyAgICAg
ICAgd29ybGQgaWYgZGlhbG9nQXJndW1lbnRzIGNvbWVzIGZyb20gYW4gaXNvbGF0ZWQgd29ybGQu
CiAgICAgbV9nbG9iYWxPYmplY3QgPSB0b0pTRE9NV2luZG93KGRpYWxvZy0+ZnJhbWUoKSwgbm9y
bWFsV29ybGQobV9leGVjLT5nbG9iYWxEYXRhKCkpKTsKICAgICBpZiAoSlNWYWx1ZSBkaWFsb2dB
cmd1bWVudHMgPSBtX2V4ZWMtPmFyZ3VtZW50KDEpKQogICAgICAgICBtX2dsb2JhbE9iamVjdC0+
cHV0RGlyZWN0KElkZW50aWZpZXIobV9leGVjLCAiZGlhbG9nQXJndW1lbnRzIiksIGRpYWxvZ0Fy
Z3VtZW50cyk7CkBAIC03MjIsOSArNzI0LDkgQEAgaW5saW5lIEpTVmFsdWUgRGlhbG9nSGFuZGxl
cjo6cmV0dXJuVmFsdQogICAgIHJldHVybiBzbG90LmdldFZhbHVlKG1fZXhlYywgaWRlbnRpZmll
cik7CiB9CiAKLXN0YXRpYyB2b2lkIHNldFVwRGlhbG9nKERPTVdpbmRvdyogZGlhbG9nLCB2b2lk
KiBjb250ZXh0KQorc3RhdGljIHZvaWQgc2V0VXBEaWFsb2coRE9NV2luZG93KiBkaWFsb2csIHZv
aWQqIGhhbmRsZXIpCiB7Ci0gICAgc3RhdGljX2Nhc3Q8RGlhbG9nSGFuZGxlcio+KGNvbnRleHQp
LT5kaWFsb2dDcmVhdGVkKGRpYWxvZyk7CisgICAgc3RhdGljX2Nhc3Q8RGlhbG9nSGFuZGxlcio+
KGhhbmRsZXIpLT5kaWFsb2dDcmVhdGVkKGRpYWxvZyk7CiB9CiAKIEpTVmFsdWUgSlNET01XaW5k
b3c6OnNob3dNb2RhbERpYWxvZyhFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiA3NDU0
MikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzc4LDEzNCArMzc4LDY5IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBWOERPTVdpbmRvdzo6Y2FwdHUKICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogfQogCi1z
dGF0aWMgYm9vbCBjYW5TaG93TW9kYWxEaWFsb2dOb3coY29uc3QgRnJhbWUqIGZyYW1lKQotewot
ICAgIC8vIEEgZnJhbWUgY2FuIG91dCBsaXZlIGl0cyBwYWdlLiBTZWUgYnVnIDEyMTk2MTMuCi0g
ICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIHJldHVybiBmcmFtZS0+cGFnZSgpLT5jaHJvbWUoKS0+Y2FuUnVuTW9kYWxOb3coKTsKLX0K
K2NsYXNzIERpYWxvZ0hhbmRsZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IERpYWxvZ0hhbmRs
ZXIodjg6OkhhbmRsZTx2ODo6VmFsdWU+IGRpYWxvZ0FyZ3VtZW50cykKKyAgICAgICAgOiBtX2Rp
YWxvZ0FyZ3VtZW50cyhkaWFsb2dBcmd1bWVudHMpCisgICAgeworICAgIH0KIAotc3RhdGljIEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcnNlTW9kYWxEaWFsb2dGZWF0dXJlcyhjb25zdCBTdHJp
bmcmIGZlYXR1cmVzQXJnKQotewotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcDsKKyAg
ICB2b2lkIGRpYWxvZ0NyZWF0ZWQoRE9NV2luZG93Kik7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHJldHVyblZhbHVlKCkgY29uc3Q7CiAKLSAgICBWZWN0b3I8U3RyaW5nPiBmZWF0dXJlczsK
LSAgICBmZWF0dXJlc0FyZy5zcGxpdCgnOycsIGZlYXR1cmVzKTsKLSAgICBWZWN0b3I8U3RyaW5n
Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZmVhdHVyZXMuZW5kKCk7Ci0gICAgZm9yIChWZWN0b3I8
U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBmZWF0dXJlcy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgU3RyaW5nIGZlYXR1cmVTdHJpbmcgPSAqaXQ7Ci0gICAgICAgIGlu
dCBwb3MgPSBmZWF0dXJlU3RyaW5nLmZpbmQoJz0nKTsKLSAgICAgICAgaW50IGNvbG9uUG9zID0g
ZmVhdHVyZVN0cmluZy5maW5kKCc6Jyk7Ci0gICAgICAgIGlmIChwb3MgPj0gMCAmJiBjb2xvblBv
cyA+PSAwKQotICAgICAgICAgICAgY29udGludWU7ICAvLyBpZ25vcmUgYW55IHN0cmluZ3MgdGhh
dCBoYXZlIGJvdGggPSBhbmQgOgotICAgICAgICBpZiAocG9zIDwgMCkKLSAgICAgICAgICAgIHBv
cyA9IGNvbG9uUG9zOwotICAgICAgICBpZiAocG9zIDwgMCkgewotICAgICAgICAgICAgLy8gbnVs
bCBzdHJpbmcgZm9yIHZhbHVlIG1lYW5zIGtleSB3aXRob3V0IHZhbHVlCi0gICAgICAgICAgICBt
YXAuc2V0KGZlYXR1cmVTdHJpbmcuc3RyaXBXaGl0ZVNwYWNlKCkubG93ZXIoKSwgU3RyaW5nKCkp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgU3RyaW5nIGtleSA9IGZlYXR1cmVTdHJp
bmcubGVmdChwb3MpLnN0cmlwV2hpdGVTcGFjZSgpLmxvd2VyKCk7Ci0gICAgICAgICAgICBTdHJp
bmcgdmFsID0gZmVhdHVyZVN0cmluZy5zdWJzdHJpbmcocG9zICsgMSkuc3RyaXBXaGl0ZVNwYWNl
KCkubG93ZXIoKTsKLSAgICAgICAgICAgIGludCBzcGFjZVBvcyA9IHZhbC5maW5kKCcgJyk7Ci0g
ICAgICAgICAgICBpZiAoc3BhY2VQb3MgIT0gLTEpCi0gICAgICAgICAgICAgICAgdmFsID0gdmFs
LmxlZnQoc3BhY2VQb3MpOwotICAgICAgICAgICAgbWFwLnNldChrZXksIHZhbCk7Ci0gICAgICAg
IH0KLSAgICB9Citwcml2YXRlOgorICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtX2RpYWxvZ0Fy
Z3VtZW50czsKKyAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBtX2RpYWxvZ0NvbnRleHQ7Cit9
OwogCi0gICAgcmV0dXJuIG1hcDsKK2lubGluZSB2b2lkIERpYWxvZ0hhbmRsZXI6OmRpYWxvZ0Ny
ZWF0ZWQoRE9NV2luZG93KiBkaWFsb2dGcmFtZSkKK3sKKyAgICBtX2RpYWxvZ0NvbnRleHQgPSBW
OFByb3h5Ojpjb250ZXh0KGRpYWxvZ0ZyYW1lLT5mcmFtZSgpKTsKKyAgICBpZiAobV9kaWFsb2dD
b250ZXh0LklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX2RpYWxvZ0FyZ3Vt
ZW50cy5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICB2ODo6Q29udGV4dDo6U2NvcGUg
c2NvcGUobV9kaWFsb2dDb250ZXh0KTsKKyAgICBtX2RpYWxvZ0NvbnRleHQtPkdsb2JhbCgpLT5T
ZXQodjg6OlN0cmluZzo6TmV3KCJkaWFsb2dBcmd1bWVudHMiKSwgbV9kaWFsb2dBcmd1bWVudHMp
OwogfQogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01XaW5kb3c6OnNob3dNb2RhbERpYWxv
Z0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCitpbmxpbmUgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IERpYWxvZ0hhbmRsZXI6OnJldHVyblZhbHVlKCkgY29uc3QKIHsKLSAgICBJTkNf
U1RBVFMoIkRPTS5ET01XaW5kb3cuc2hvd01vZGFsRGlhbG9nKCkiKTsKLQotICAgIFN0cmluZyB1
cmwgPSB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbE9yVW5kZWZpbmVkQ2hlY2soYXJnc1swXSk7Ci0g
ICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gZGlhbG9nQXJncyA9IGFyZ3NbMV07Ci0gICAgU3RyaW5n
IGZlYXR1cmVBcmdzID0gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxPclVuZGVmaW5lZENoZWNrKGFy
Z3NbMl0pOwotCi0gICAgRE9NV2luZG93KiB3aW5kb3cgPSBWOERPTVdpbmRvdzo6dG9OYXRpdmUo
YXJncy5Ib2xkZXIoKSk7Ci0gICAgRnJhbWUqIGZyYW1lID0gd2luZG93LT5mcmFtZSgpOwotCi0g
ICAgaWYgKCFWOEJpbmRpbmdTZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhCaW5kaW5nU3RhdGU6
Ok9ubHkoKSwgZnJhbWUsIHRydWUpKQorICAgIGlmIChtX2RpYWxvZ0NvbnRleHQuSXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotCi0gICAgRnJhbWUqIGNhbGxpbmdG
cmFtZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JDYWxsaW5nQ29udGV4dCgpOwotICAgIGlm
ICghY2FsbGluZ0ZyYW1lKQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotCi0gICAg
RnJhbWUqIGVudGVyZWRGcmFtZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JFbnRlcmVkQ29u
dGV4dCgpOwotICAgIGlmICghZW50ZXJlZEZyYW1lKQotICAgICAgICByZXR1cm4gdjg6OlVuZGVm
aW5lZCgpOwotCi0gICAgaWYgKCFjYW5TaG93TW9kYWxEaWFsb2dOb3coZnJhbWUpIHx8ICFWOEJp
bmRpbmdTZWN1cml0eTo6YWxsb3dQb3BVcChWOEJpbmRpbmdTdGF0ZTo6T25seSgpKSkKKyAgICB2
ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUobV9kaWFsb2dDb250ZXh0KTsKKyAgICB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gcmV0dXJuVmFsdWUgPSBtX2RpYWxvZ0NvbnRleHQtPkdsb2JhbCgpLT5HZXQo
djg6OlN0cmluZzo6TmV3KCJyZXR1cm5WYWx1ZSIpKTsKKyAgICBpZiAocmV0dXJuVmFsdWUuSXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIHJldHVybiByZXR1
cm5WYWx1ZTsKK30KIAotICAgIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGZlYXR1cmVz
ID0gcGFyc2VNb2RhbERpYWxvZ0ZlYXR1cmVzKGZlYXR1cmVBcmdzKTsKLQotICAgIGNvbnN0IGJv
b2wgdHJ1c3RlZCA9IGZhbHNlOworc3RhdGljIHZvaWQgc2V0VXBEaWFsb2coRE9NV2luZG93KiBk
aWFsb2csIHZvaWQqIGhhbmRsZXIpCit7CisgICAgc3RhdGljX2Nhc3Q8RGlhbG9nSGFuZGxlcio+
KGhhbmRsZXIpLT5kaWFsb2dDcmVhdGVkKGRpYWxvZyk7Cit9CiAKLSAgICBGbG9hdFJlY3Qgc2Ny
ZWVuUmVjdCA9IHNjcmVlbkF2YWlsYWJsZVJlY3QoZnJhbWUtPnZpZXcoKSk7Cit2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gVjhET01XaW5kb3c6OnNob3dNb2RhbERpYWxvZ0NhbGxiYWNrKGNvbnN0IHY4
OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgSU5DX1NUQVRTKCJET00uRE9NV2luZG93LnNob3dN
b2RhbERpYWxvZygpIik7CisgICAgRE9NV2luZG93KiBpbXBsID0gVjhET01XaW5kb3c6OnRvTmF0
aXZlKGFyZ3MuSG9sZGVyKCkpOwogCi0gICAgV2luZG93RmVhdHVyZXMgd2luZG93RmVhdHVyZXM7
Ci0gICAgLy8gZGVmYXVsdCBoZXJlIGNhbWUgZnJvbSBmcmFtZSBzaXplIG9mIGRpYWxvZyBpbiBN
YWNJRS4KLSAgICB3aW5kb3dGZWF0dXJlcy53aWR0aCA9IFdpbmRvd0ZlYXR1cmVzOjpmbG9hdEZl
YXR1cmUoZmVhdHVyZXMsICJkaWFsb2d3aWR0aCIsIDEwMCwgc2NyZWVuUmVjdC53aWR0aCgpLCA2
MjApOwotICAgIHdpbmRvd0ZlYXR1cmVzLndpZHRoU2V0ID0gdHJ1ZTsKLSAgICAvLyBkZWZhdWx0
IGhlcmUgY2FtZSBmcm9tIGZyYW1lIHNpemUgb2YgZGlhbG9nIGluIE1hY0lFLgotICAgIHdpbmRv
d0ZlYXR1cmVzLmhlaWdodCA9IFdpbmRvd0ZlYXR1cmVzOjpmbG9hdEZlYXR1cmUoZmVhdHVyZXMs
ICJkaWFsb2doZWlnaHQiLCAxMDAsIHNjcmVlblJlY3QuaGVpZ2h0KCksIDQ1MCk7Ci0gICAgd2lu
ZG93RmVhdHVyZXMuaGVpZ2h0U2V0ID0gdHJ1ZTsKLQotICAgIHdpbmRvd0ZlYXR1cmVzLnggPSBX
aW5kb3dGZWF0dXJlczo6ZmxvYXRGZWF0dXJlKGZlYXR1cmVzLCAiZGlhbG9nbGVmdCIsIHNjcmVl
blJlY3QueCgpLCBzY3JlZW5SZWN0LnJpZ2h0KCkgLSB3aW5kb3dGZWF0dXJlcy53aWR0aCwgLTEp
OwotICAgIHdpbmRvd0ZlYXR1cmVzLnhTZXQgPSB3aW5kb3dGZWF0dXJlcy54ID4gMDsKLSAgICB3
aW5kb3dGZWF0dXJlcy55ID0gV2luZG93RmVhdHVyZXM6OmZsb2F0RmVhdHVyZShmZWF0dXJlcywg
ImRpYWxvZ3RvcCIsIHNjcmVlblJlY3QueSgpLCBzY3JlZW5SZWN0LmJvdHRvbSgpIC0gd2luZG93
RmVhdHVyZXMuaGVpZ2h0LCAtMSk7Ci0gICAgd2luZG93RmVhdHVyZXMueVNldCA9IHdpbmRvd0Zl
YXR1cmVzLnkgPiAwOwotCi0gICAgaWYgKFdpbmRvd0ZlYXR1cmVzOjpib29sRmVhdHVyZShmZWF0
dXJlcywgImNlbnRlciIsIHRydWUpKSB7Ci0gICAgICAgIGlmICghd2luZG93RmVhdHVyZXMueFNl
dCkgewotICAgICAgICAgICAgd2luZG93RmVhdHVyZXMueCA9IHNjcmVlblJlY3QueCgpICsgKHNj
cmVlblJlY3Qud2lkdGgoKSAtIHdpbmRvd0ZlYXR1cmVzLndpZHRoKSAvIDI7Ci0gICAgICAgICAg
ICB3aW5kb3dGZWF0dXJlcy54U2V0ID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXdp
bmRvd0ZlYXR1cmVzLnlTZXQpIHsKLSAgICAgICAgICAgIHdpbmRvd0ZlYXR1cmVzLnkgPSBzY3Jl
ZW5SZWN0LnkoKSArIChzY3JlZW5SZWN0LmhlaWdodCgpIC0gd2luZG93RmVhdHVyZXMuaGVpZ2h0
KSAvIDI7Ci0gICAgICAgICAgICB3aW5kb3dGZWF0dXJlcy55U2V0ID0gdHJ1ZTsKLSAgICAgICAg
fQotICAgIH0KKyAgICBWOEJpbmRpbmdTdGF0ZSogc3RhdGUgPSBWOEJpbmRpbmdTdGF0ZTo6T25s
eSgpOwogCi0gICAgd2luZG93RmVhdHVyZXMuZGlhbG9nID0gdHJ1ZTsKLSAgICB3aW5kb3dGZWF0
dXJlcy5yZXNpemFibGUgPSBXaW5kb3dGZWF0dXJlczo6Ym9vbEZlYXR1cmUoZmVhdHVyZXMsICJy
ZXNpemFibGUiKTsKLSAgICB3aW5kb3dGZWF0dXJlcy5zY3JvbGxiYXJzVmlzaWJsZSA9IFdpbmRv
d0ZlYXR1cmVzOjpib29sRmVhdHVyZShmZWF0dXJlcywgInNjcm9sbCIsIHRydWUpOwotICAgIHdp
bmRvd0ZlYXR1cmVzLnN0YXR1c0JhclZpc2libGUgPSBXaW5kb3dGZWF0dXJlczo6Ym9vbEZlYXR1
cmUoZmVhdHVyZXMsICJzdGF0dXMiLCAhdHJ1c3RlZCk7Ci0gICAgd2luZG93RmVhdHVyZXMubWVu
dUJhclZpc2libGUgPSBmYWxzZTsKLSAgICB3aW5kb3dGZWF0dXJlcy50b29sQmFyVmlzaWJsZSA9
IGZhbHNlOwotICAgIHdpbmRvd0ZlYXR1cmVzLmxvY2F0aW9uQmFyVmlzaWJsZSA9IGZhbHNlOwot
ICAgIHdpbmRvd0ZlYXR1cmVzLmZ1bGxzY3JlZW4gPSBmYWxzZTsKKyAgICBET01XaW5kb3cqIGFj
dGl2ZVdpbmRvdyA9IHN0YXRlLT5hY3RpdmVXaW5kb3coKTsKKyAgICBET01XaW5kb3cqIGZpcnN0
V2luZG93ID0gc3RhdGUtPmZpcnN0V2luZG93KCk7CiAKLSAgICBGcmFtZSogZGlhbG9nRnJhbWUg
PSBWOEJpbmRpbmdET01XaW5kb3c6OmNyZWF0ZVdpbmRvdyhWOEJpbmRpbmdTdGF0ZTo6T25seSgp
LCBjYWxsaW5nRnJhbWUsIGVudGVyZWRGcmFtZSwgZnJhbWUsIHVybCwgIiIsIHdpbmRvd0ZlYXR1
cmVzLCBkaWFsb2dBcmdzKTsKLSAgICBpZiAoIWRpYWxvZ0ZyYW1lKQotICAgICAgICByZXR1cm4g
djg6OlVuZGVmaW5lZCgpOworICAgIC8vIEZJWE1FOiBIYW5kbGUgZXhjZXB0aW9ucyBwcm9wZXJs
eS4KKyAgICBTdHJpbmcgdXJsU3RyaW5nID0gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxPclVuZGVm
aW5lZENoZWNrKGFyZ3NbMF0pOworICAgIFN0cmluZyBkaWFsb2dGZWF0dXJlc1N0cmluZyA9IHRv
V2ViQ29yZVN0cmluZ1dpdGhOdWxsT3JVbmRlZmluZWRDaGVjayhhcmdzWzJdKTsKIAotICAgIC8v
IEhvbGQgb24gdG8gdGhlIGNvbnRleHQgb2YgdGhlIGRpYWxvZyB3aW5kb3cgbG9uZyBlbm91Z2gg
dG8gcmV0cmlldmUgdGhlCi0gICAgLy8gdmFsdWUgb2YgdGhlIHJldHVybiB2YWx1ZSBwcm9wZXJ0
eS4KLSAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBWOFByb3h5Ojpjb250ZXh0
KGRpYWxvZ0ZyYW1lKTsKLQotICAgIC8vIFJ1biB0aGUgZGlhbG9nLgotICAgIGRpYWxvZ0ZyYW1l
LT5wYWdlKCktPmNocm9tZSgpLT5ydW5Nb2RhbCgpOwotCi0gICAgLy8gRXh0cmFjdCB0aGUgcmV0
dXJuIHZhbHVlIHByb3BlcnR5IGZyb20gdGhlIGRpYWxvZyB3aW5kb3cuCi0gICAgdjg6OkxvY2Fs
PHY4OjpWYWx1ZT4gcmV0dXJuVmFsdWU7Ci0gICAgaWYgKCFjb250ZXh0LklzRW1wdHkoKSkgewot
ICAgICAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUoY29udGV4dCk7Ci0gICAgICAgIHJldHVy
blZhbHVlID0gY29udGV4dC0+R2xvYmFsKCktPkdldCh2ODo6U3RyaW5nOjpOZXcoInJldHVyblZh
bHVlIikpOwotICAgIH0KKyAgICBEaWFsb2dIYW5kbGVyIGhhbmRsZXIoYXJnc1sxXSk7CiAKLSAg
ICBpZiAoIXJldHVyblZhbHVlLklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHJldHVyblZhbHVl
OworICAgIGltcGwtPnNob3dNb2RhbERpYWxvZyh1cmxTdHJpbmcsIGRpYWxvZ0ZlYXR1cmVzU3Ry
aW5nLCBhY3RpdmVXaW5kb3csIGZpcnN0V2luZG93LCBzZXRVcERpYWxvZywgJmhhbmRsZXIpOwog
Ci0gICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICByZXR1cm4gaGFuZGxlci5yZXR1cm5W
YWx1ZSgpOwogfQogCi0KIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdpbmRvdzo6b3BlbkNh
bGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00u
RE9NV2luZG93Lm9wZW4oKSIpOwpAQCAtNTE2LDkgKzQ1MSwxMCBAQCB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhET01XaW5kb3c6Om9wZW5DCiAgICAgRE9NV2luZG93KiBhY3RpdmVXaW5kb3cgPSBz
dGF0ZS0+YWN0aXZlV2luZG93KCk7CiAgICAgRE9NV2luZG93KiBmaXJzdFdpbmRvdyA9IHN0YXRl
LT5maXJzdFdpbmRvdygpOwogCi0gICAgRVhDRVBUSU9OX0JMT0NLKFN0cmluZywgdXJsU3RyaW5n
LCB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbE9yVW5kZWZpbmVkQ2hlY2soYXJnc1swXSkpOwotICAg
IEVYQ0VQVElPTl9CTE9DSyhBdG9taWNTdHJpbmcsIGZyYW1lTmFtZSwgKGFyZ3NbMV0tPklzVW5k
ZWZpbmVkKCkgfHwgYXJnc1sxXS0+SXNOdWxsKCkpID8gIl9ibGFuayIgOiBBdG9taWNTdHJpbmco
dG9XZWJDb3JlU3RyaW5nKGFyZ3NbMV0pKSk7Ci0gICAgRVhDRVBUSU9OX0JMT0NLKFN0cmluZywg
d2luZG93RmVhdHVyZXNTdHJpbmcsIHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsT3JVbmRlZmluZWRD
aGVjayhhcmdzWzJdKSk7CisgICAgLy8gRklYTUU6IEhhbmRsZSBleGNlcHRpb25zIHByb3Blcmx5
LgorICAgIFN0cmluZyB1cmxTdHJpbmcgPSB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbE9yVW5kZWZp
bmVkQ2hlY2soYXJnc1swXSk7CisgICAgQXRvbWljU3RyaW5nIGZyYW1lTmFtZSA9IChhcmdzWzFd
LT5Jc1VuZGVmaW5lZCgpIHx8IGFyZ3NbMV0tPklzTnVsbCgpKSA/ICJfYmxhbmsiIDogQXRvbWlj
U3RyaW5nKHRvV2ViQ29yZVN0cmluZyhhcmdzWzFdKSk7CisgICAgU3RyaW5nIHdpbmRvd0ZlYXR1
cmVzU3RyaW5nID0gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxPclVuZGVmaW5lZENoZWNrKGFyZ3Nb
Ml0pOwogCiAgICAgUmVmUHRyPERPTVdpbmRvdz4gb3BlbmVkV2luZG93ID0gaW1wbC0+b3Blbih1
cmxTdHJpbmcsIGZyYW1lTmFtZSwgd2luZG93RmVhdHVyZXNTdHJpbmcsIGFjdGl2ZVdpbmRvdywg
Zmlyc3RXaW5kb3cpOwogICAgIGlmICghb3BlbmVkV2luZG93KQpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy92OC9zcGVjaWFsaXphdGlvbi9WOEJpbmRpbmdET01XaW5kb3cuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL3Y4L3NwZWNpYWxpemF0aW9uL1Y4QmluZGluZ0RPTVdpbmRvdy5o
CShyZXZpc2lvbiA3NDU0MikKKysrIFdlYkNvcmUvYmluZGluZ3Mvdjgvc3BlY2lhbGl6YXRpb24v
VjhCaW5kaW5nRE9NV2luZG93LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDI4ICszMSw5IEBACiAj
aWZuZGVmIFY4QmluZGluZ0RPTVdpbmRvd19oCiAjZGVmaW5lIFY4QmluZGluZ0RPTVdpbmRvd19o
CiAKLSNpbmNsdWRlICJCaW5kaW5nRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiR2VuZXJpY0JpbmRp
bmcuaCIKLSNpbmNsdWRlICJWOFByb3h5LmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xh
c3MgVjhCaW5kaW5nOwotCi1jbGFzcyBWOEJpbmRpbmdET01XaW5kb3cgOiBwdWJsaWMgQmluZGlu
Z0RPTVdpbmRvdzxWOEJpbmRpbmc+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBzdG9yZURp
YWxvZ0FyZ3MoU3RhdGU8VjhCaW5kaW5nPiosIEZyYW1lKiBuZXdGcmFtZSwgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IGRpYWxvZ0FyZ3MpCi0gICAgewotICAgICAgICAvLyBTZXQgZGlhbG9nIGFyZ3Vt
ZW50cyBvbiB0aGUgZ2xvYmFsIG9iamVjdCBvZiB0aGUgbmV3IGZyYW1lLgotICAgICAgICBpZiAo
IWRpYWxvZ0FyZ3MuSXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICB2ODo6TG9jYWw8djg6OkNvbnRl
eHQ+IGNvbnRleHQgPSBWOFByb3h5Ojpjb250ZXh0KG5ld0ZyYW1lKTsKLSAgICAgICAgICAgIGlm
ICghY29udGV4dC5Jc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICB2ODo6Q29udGV4dDo6U2Nv
cGUgc2NvcGUoY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+R2xvYmFsKCktPlNl
dCh2ODo6U3RyaW5nOjpOZXcoImRpYWxvZ0FyZ3VtZW50cyIpLCBkaWFsb2dBcmdzKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX07CisvLyBGSVhNRTogUmVtb3ZlIHRoaXMgZmls
ZS4KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCg==
</data>
<flag name="commit-queue"
          id="68438"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>