<?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>205378</bug_id>
          
          <creation_ts>2019-12-17 23:25:27 -0800</creation_ts>
          <short_desc>TextManipulationController should respect new token orders</short_desc>
          <delta_ts>2019-12-20 18:09:52 -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>HTML Editing</component>
          <version>WebKit 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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>mifenton</cc>
    
    <cc>thorton</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1599700</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-12-17 23:25:27 -0800</bug_when>
    <thetext>TextManipulationController::completeManipulation should use the new order of tokens.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1599701</commentid>
    <comment_count>1</comment_count>
      <attachid>385941</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-12-17 23:26:25 -0800</bug_when>
    <thetext>Created attachment 385941
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600466</commentid>
    <comment_count>2</comment_count>
      <attachid>386138</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-12-19 13:21:29 -0800</bug_when>
    <thetext>Created attachment 386138
WIP2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600650</commentid>
    <comment_count>3</comment_count>
      <attachid>386188</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-12-20 01:16:24 -0800</bug_when>
    <thetext>Created attachment 386188
Implements the new behavior</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600651</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-12-20 01:20:39 -0800</bug_when>
    <thetext>&lt;rdar://problem/56567065&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601033</commentid>
    <comment_count>5</comment_count>
      <attachid>386188</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-12-20 17:19:10 -0800</bug_when>
    <thetext>Comment on attachment 386188
Implements the new behavior

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

&gt; Source/WebCore/editing/TextManipulationController.cpp:279
&gt; +    RefPtr&lt;Node&gt; parent;

I found it confusing that `!parent` means that we should append the child node to a separate insertion position instead, but I can&apos;t really think of an alternative that doesn&apos;t end up making this more complicated :/

Maybe add a comment to clarify this?

&gt; Source/WebCore/editing/TextManipulationController.cpp:369
&gt; +        if (i == currentElementStack.size() &amp;&amp; i == currentAncestors.size()) {
&gt; +            insertions.append(NodeInsertion { currentElementStack.size() ? currentElementStack.last().ptr() : nullptr, contentNode.releaseNonNull() });
&gt; +        } else {

Nit - no braces?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601035</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-12-20 17:20:18 -0800</bug_when>
    <thetext>(In reply to Wenson Hsieh from comment #5)
&gt; Comment on attachment 386188 [details]
&gt; Implements the new behavior
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=386188&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/editing/TextManipulationController.cpp:279
&gt; &gt; +    RefPtr&lt;Node&gt; parent;
&gt; 
&gt; I found it confusing that `!parent` means that we should append the child
&gt; node to a separate insertion position instead, but I can&apos;t really think of
&gt; an alternative that doesn&apos;t end up making this more complicated :/
&gt; 
&gt; Maybe add a comment to clarify this?

Good point. Maybe rename it to parentIfDifferentFromCommonAncestor?

&gt; &gt; Source/WebCore/editing/TextManipulationController.cpp:369
&gt; &gt; +        if (i == currentElementStack.size() &amp;&amp; i == currentAncestors.size()) {
&gt; &gt; +            insertions.append(NodeInsertion { currentElementStack.size() ? currentElementStack.last().ptr() : nullptr, contentNode.releaseNonNull() });
&gt; &gt; +        } else {
&gt; 
&gt; Nit - no braces?

Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601036</commentid>
    <comment_count>7</comment_count>
      <attachid>386188</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-12-20 17:21:05 -0800</bug_when>
    <thetext>Comment on attachment 386188
Implements the new behavior

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

&gt;&gt;&gt; Source/WebCore/editing/TextManipulationController.cpp:279
&gt;&gt;&gt; +    RefPtr&lt;Node&gt; parent;
&gt;&gt; 
&gt;&gt; I found it confusing that `!parent` means that we should append the child node to a separate insertion position instead, but I can&apos;t really think of an alternative that doesn&apos;t end up making this more complicated :/
&gt;&gt; 
&gt;&gt; Maybe add a comment to clarify this?
&gt; 
&gt; Good point. Maybe rename it to parentIfDifferentFromCommonAncestor?

Yeah, I think that&apos;s a clearer name, given the behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601054</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-12-20 18:09:52 -0800</bug_when>
    <thetext>Committed r253860: &lt;https://trac.webkit.org/changeset/253860&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385941</attachid>
            <date>2019-12-17 23:26:25 -0800</date>
            <delta_ts>2019-12-19 13:21:29 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>wip205378.patch</filename>
            <type>text/plain</type>
            <size>10560</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyNTM2NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NyArMzAsMTAgQEAKICNpbmNsdWRlICJFZGl0aW5nLmgiCiAjaW5jbHVkZSAiRWxlbWVudEFuY2Vz
dG9ySXRlcmF0b3IuaCIKICNpbmNsdWRlICJFdmVudExvb3AuaCIKKyNpbmNsdWRlICJOb2RlVHJh
dmVyc2FsLmgiCisjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJTY3JpcHREaXNhbGxvd2Vk
U2NvcGUuaCIKKyNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAj
aW5jbHVkZSAiVmlzaWJsZVVuaXRzLmgiCiAKQEAgLTI0NywyNCArMjUwLDQwIEBACiAgICAgaWYg
KGl0ZW1JdGVyYXRvciA9PSBtX2l0ZW1zLmVuZCgpKQogICAgICAgICByZXR1cm4gTWFuaXB1bGF0
aW9uUmVzdWx0OjpJbnZhbGlkSXRlbTsKIAotICAgIGF1dG8gZGlkUmVwbGFjZSA9IHJlcGxhY2Uo
aXRlbUl0ZXJhdG9yLT52YWx1ZSwgcmVwbGFjZW1lbnRUb2tlbnMpOwotCisgICAgTWFuaXB1bGF0
aW9uSXRlbSBpdGVtOworICAgIHN0ZDo6ZXhjaGFuZ2UoaXRlbSwgaXRlbUl0ZXJhdG9yLT52YWx1
ZSk7CiAgICAgbV9pdGVtcy5yZW1vdmUoaXRlbUl0ZXJhdG9yKTsKIAotICAgIHJldHVybiBkaWRS
ZXBsYWNlOworICAgIHJldHVybiByZXBsYWNlKGl0ZW0sIHJlcGxhY2VtZW50VG9rZW5zKTsKIH0K
IAorc3RydWN0IFRva2VuRXhjaGFuZ2VEYXRhIHsKKyAgICBSZWZQdHI8Tm9kZT4gbm9kZTsKKyAg
ICBib29sIGlzRXhjbHVkZWQ7Cit9OworCiBzdHJ1Y3QgRE9NQ2hhbmdlIHsKICAgICBSZWY8Q2hh
cmFjdGVyRGF0YT4gbm9kZTsKICAgICBTdHJpbmcgbmV3RGF0YTsKIH07CiAKK3N0cnVjdCBSZXBs
YWNlbWVudERhdGEgeworICAgIFJlZjxOb2RlPiBvcmlnaW5hbE5vZGU7CisgICAgU3RyaW5nIG5l
d0RhdGE7Cit9OworCitzdHJ1Y3QgTm9kZUluc2VydGlvbiB7CisgICAgUmVmUHRyPE5vZGU+IHBh
cmVudDsKKyAgICBSZWY8Tm9kZT4gY2hpbGQ7Cit9OworCiBhdXRvIFRleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyOjpyZXBsYWNlKGNvbnN0IE1hbmlwdWxhdGlvbkl0ZW0mIGl0ZW0sIGNvbnN0IFZl
Y3RvcjxNYW5pcHVsYXRpb25Ub2tlbj4mIHJlcGxhY2VtZW50VG9rZW5zKSAtPiBNYW5pcHVsYXRp
b25SZXN1bHQKIHsKICAgICBUZXh0SXRlcmF0b3IgaXRlcmF0b3IgeyBpdGVtLnN0YXJ0LCBpdGVt
LmVuZCB9OwogICAgIHNpemVfdCBjdXJyZW50VG9rZW5JbmRleCA9IDA7Ci0gICAgSGFzaE1hcDxU
b2tlbklkZW50aWZpZXIsIHN0ZDo6cGFpcjxSZWZQdHI8Tm9kZT4sIGNvbnN0IE1hbmlwdWxhdGlv
blRva2VuKj4+IHRva2VuVG9Ob2RlVG9rZW5QYWlyOworICAgIEhhc2hNYXA8VG9rZW5JZGVudGlm
aWVyLCBUb2tlbkV4Y2hhbmdlRGF0YT4gdG9rZW5Ub05vZGVUb2tlblBhaXI7CiAKKyAgICBSZWZQ
dHI8Tm9kZT4gY29tbW9uQW5jZXN0b3I7CiAgICAgd2hpbGUgKCFpdGVyYXRvci5hdEVuZCgpKSB7
CiAgICAgICAgIGF1dG8gc3RyaW5nID0gaXRlcmF0b3IudGV4dCgpLnRvU3RyaW5nKCk7CiAgICAg
ICAgIGlmIChjdXJyZW50VG9rZW5JbmRleCA+PSBpdGVtLnRva2Vucy5zaXplKCkpCkBAIC0yNzIs
MjkgKzI5MSwxMDcgQEAKICAgICAgICAgYXV0byYgY3VycmVudFRva2VuID0gaXRlbS50b2tlbnNb
Y3VycmVudFRva2VuSW5kZXhdOwogICAgICAgICBpZiAoaXRlcmF0b3IudGV4dCgpICE9IGN1cnJl
bnRUb2tlbi5jb250ZW50KQogICAgICAgICAgICAgcmV0dXJuIE1hbmlwdWxhdGlvblJlc3VsdDo6
Q29udGVudENoYW5nZWQ7Ci0gICAgICAgIHRva2VuVG9Ob2RlVG9rZW5QYWlyLnNldChjdXJyZW50
VG9rZW4uaWRlbnRpZmllciwgc3RkOjpwYWlyPFJlZlB0cjxOb2RlPiwgY29uc3QgTWFuaXB1bGF0
aW9uVG9rZW4qPiB7IGl0ZXJhdG9yLm5vZGUoKSwgJmN1cnJlbnRUb2tlbiB9KTsKKworICAgICAg
ICBhdXRvIGN1cnJlbnROb2RlID0gbWFrZVJlZlB0cihpdGVyYXRvci5ub2RlKCkpOworICAgICAg
ICB0b2tlblRvTm9kZVRva2VuUGFpci5zZXQoY3VycmVudFRva2VuLmlkZW50aWZpZXIsIFRva2Vu
RXhjaGFuZ2VEYXRhIHsgY3VycmVudE5vZGUuY29weVJlZigpLCBjdXJyZW50VG9rZW4uaXNFeGNs
dWRlZCB9KTsKKworICAgICAgICBpZiAoY3VycmVudE5vZGUpIHsKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBUYWtlIGNhcmUgb2Ygd2hlbiBjdXJyZW50Tm9kZSBpcyBudWxscHRyLgorICAgICAgICAg
ICAgaWYgKCFjb21tb25BbmNlc3RvcikKKyAgICAgICAgICAgICAgICBjb21tb25BbmNlc3RvciA9
IGN1cnJlbnROb2RlOworICAgICAgICAgICAgZWxzZSBpZiAoIWN1cnJlbnROb2RlLT5pc0Rlc2Nl
bmRhbnRPZihjb21tb25BbmNlc3Rvci5nZXQoKSkpIHsKKyAgICAgICAgICAgICAgICBjb21tb25B
bmNlc3RvciA9IFJhbmdlOjpjb21tb25BbmNlc3RvckNvbnRhaW5lcihjb21tb25BbmNlc3Rvci5n
ZXQoKSwgY3VycmVudE5vZGUuZ2V0KCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChjb21tb25B
bmNlc3Rvcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICBpdGVyYXRvci5h
ZHZhbmNlKCk7CiAgICAgICAgICsrY3VycmVudFRva2VuSW5kZXg7CiAgICAgfQorICAgIEFTU0VS
VChjb21tb25BbmNlc3Rvcik7CiAKICAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHByZXNldmUg
dGhlIG9yZGVyIG9mIHRoZSByZXBsYWNlbWVudCBhdCBhbGwuCi0gICAgVmVjdG9yPERPTUNoYW5n
ZT4gY2hhbmdlczsKKyAgICBWZWN0b3I8UmVwbGFjZW1lbnREYXRhPiByZXBsYWNlbWVudHM7CiAg
ICAgZm9yIChhdXRvJiBuZXdUb2tlbiA6IHJlcGxhY2VtZW50VG9rZW5zKSB7CiAgICAgICAgIGF1
dG8gaXQgPSB0b2tlblRvTm9kZVRva2VuUGFpci5maW5kKG5ld1Rva2VuLmlkZW50aWZpZXIpOwog
ICAgICAgICBpZiAoaXQgPT0gdG9rZW5Ub05vZGVUb2tlblBhaXIuZW5kKCkpCiAgICAgICAgICAg
ICByZXR1cm4gTWFuaXB1bGF0aW9uUmVzdWx0OjpJbnZhbGlkVG9rZW47Ci0gICAgICAgIGF1dG8m
IG9sZFRva2VuID0gKml0LT52YWx1ZS5zZWNvbmQ7Ci0gICAgICAgIGlmIChvbGRUb2tlbi5pc0V4
Y2x1ZGVkKQorCisgICAgICAgIGF1dG8mIGV4Y2hhbmdlRGF0YSA9IGl0LT52YWx1ZTsKKyAgICAg
ICAgaWYgKGV4Y2hhbmdlRGF0YS5pc0V4Y2x1ZGVkKQogICAgICAgICAgICAgcmV0dXJuIE1hbmlw
dWxhdGlvblJlc3VsdDo6RXhjbHVzaW9uVmlvbGF0aW9uOwotICAgICAgICBhdXRvKiBub2RlID0g
aXQtPnZhbHVlLmZpcnN0LmdldCgpOwotICAgICAgICBpZiAoIW5vZGUgfHwgIWlzPENoYXJhY3Rl
ckRhdGE+KCpub2RlKSkKKworICAgICAgICBpZiAoIWV4Y2hhbmdlRGF0YS5ub2RlKQogICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGNoYW5nZXMuYXBwZW5kKHsgZG93bmNhc3Q8Q2hhcmFj
dGVyRGF0YT4oKm5vZGUpLCBuZXdUb2tlbi5jb250ZW50IH0pOworCisgICAgICAgIHJlcGxhY2Vt
ZW50cy5hcHBlbmQoUmVwbGFjZW1lbnREYXRhIHsgZXhjaGFuZ2VEYXRhLm5vZGUgPyAqZXhjaGFu
Z2VEYXRhLm5vZGUgOiAqY29tbW9uQW5jZXN0b3IsIG5ld1Rva2VuLmNvbnRlbnQgfSk7CiAgICAg
fQogCi0gICAgZm9yIChhdXRvJiBjaGFuZ2UgOiBjaGFuZ2VzKQotICAgICAgICBjaGFuZ2Uubm9k
ZS0+c2V0RGF0YShjaGFuZ2UubmV3RGF0YSk7CisgICAgUmVmUHRyPE5vZGU+IG5vZGVBZnRlclN0
YXJ0ID0gaXRlbS5zdGFydC5jb21wdXRlTm9kZUFmdGVyUG9zaXRpb24oKTsKKyAgICBpZiAoIW5v
ZGVBZnRlclN0YXJ0KQorICAgICAgICBub2RlQWZ0ZXJTdGFydCA9IGl0ZW0uc3RhcnQuY29udGFp
bmVyTm9kZSgpOwogCisgICAgUmVmUHRyPE5vZGU+IG5vZGVBZnRlckVuZCA9IGl0ZW0uZW5kLmNv
bXB1dGVOb2RlQWZ0ZXJQb3NpdGlvbigpOworICAgIGlmICghbm9kZUFmdGVyRW5kKQorICAgICAg
ICBub2RlQWZ0ZXJFbmQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbigqaXRl
bS5lbmQuY29udGFpbmVyTm9kZSgpKTsKKworICAgIEhhc2hTZXQ8UmVmPE5vZGU+PiBub2Rlc1Rv
UmVtb3ZlOworICAgIGZvciAoUmVmUHRyPE5vZGU+IGN1cnJlbnROb2RlID0gbm9kZUFmdGVyU3Rh
cnQ7IGN1cnJlbnROb2RlICYmIGN1cnJlbnROb2RlICE9IG5vZGVBZnRlckVuZDsgY3VycmVudE5v
ZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpjdXJyZW50Tm9kZSkpIHsKKyAgICAgICAgaWYgKGNv
bW1vbkFuY2VzdG9yID09IGN1cnJlbnROb2RlKQorICAgICAgICAgICAgY29tbW9uQW5jZXN0b3Ig
PSBjdXJyZW50Tm9kZS0+cGFyZW50Tm9kZSgpOworICAgICAgICBub2Rlc1RvUmVtb3ZlLmFkZCgq
Y3VycmVudE5vZGUpOworICAgIH0KKworICAgIFZlY3RvcjxSZWY8Tm9kZT4+IGN1cnJlbnRFbGVt
ZW50U3RhY2s7CisgICAgSGFzaFNldDxSZWY8Tm9kZT4+IHJldXNlZE9yaWdpbmFsTm9kZXM7Cisg
ICAgVmVjdG9yPE5vZGVJbnNlcnRpb24+IGluc2VydGlvbnM7CisgICAgZm9yIChhdXRvJiByZXBs
YWNlbWVudERhdGEgOiByZXBsYWNlbWVudHMpIHsKKyAgICAgICAgYXV0byYgb3JpZ2luYWxOb2Rl
ID0gcmVwbGFjZW1lbnREYXRhLm9yaWdpbmFsTm9kZS5nZXQoKTsKKyAgICAgICAgUmVmUHRyPENv
bnRhaW5lck5vZGU+IGN1cnJlbnROb2RlID0gaXM8Q29udGFpbmVyTm9kZT4ob3JpZ2luYWxOb2Rl
KSA/ICZkb3duY2FzdDxDb250YWluZXJOb2RlPihvcmlnaW5hbE5vZGUpIDogb3JpZ2luYWxOb2Rl
LnBhcmVudE5vZGUoKTsKKworICAgICAgICBWZWN0b3I8UmVmPE5vZGU+PiBjdXJyZW50QW5jZXN0
b3JzOworICAgICAgICBmb3IgKDsgY3VycmVudE5vZGUgJiYgY3VycmVudE5vZGUgIT0gY29tbW9u
QW5jZXN0b3I7IGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUtPnBhcmVudE5vZGUoKSkKKyAgICAg
ICAgICAgIGN1cnJlbnRBbmNlc3RvcnMuYXBwZW5kKCpjdXJyZW50Tm9kZSk7CisgICAgICAgIGN1
cnJlbnRBbmNlc3RvcnMucmV2ZXJzZSgpOworCisgICAgICAgIHNpemVfdCBpID0wOworICAgICAg
ICB3aGlsZSAoaSA8IGN1cnJlbnRFbGVtZW50U3RhY2suc2l6ZSgpICYmIGkgPCBjdXJyZW50QW5j
ZXN0b3JzLnNpemUoKSAmJiBjdXJyZW50RWxlbWVudFN0YWNrW2ldLnB0cigpID09IGN1cnJlbnRB
bmNlc3RvcnNbaV0ucHRyKCkpCisgICAgICAgICAgICArK2k7CisKKyAgICAgICAgaWYgKGkgPT0g
Y3VycmVudEVsZW1lbnRTdGFjay5zaXplKCkgJiYgaSA9PSBjdXJyZW50QW5jZXN0b3JzLnNpemUo
KSkgeworICAgICAgICAgICAgYXV0byB0ZXh0ID0gVGV4dDo6Y3JlYXRlKGNvbW1vbkFuY2VzdG9y
LT5kb2N1bWVudCgpLCByZXBsYWNlbWVudERhdGEubmV3RGF0YSk7CisgICAgICAgICAgICBpbnNl
cnRpb25zLmFwcGVuZChOb2RlSW5zZXJ0aW9uIHsgY3VycmVudEVsZW1lbnRTdGFjay5zaXplKCkg
PyBjdXJyZW50RWxlbWVudFN0YWNrLmxhc3QoKS5wdHIoKSA6IG51bGxwdHIsIFdURk1vdmUodGV4
dCkgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoaSA8IGN1cnJlbnRFbGVt
ZW50U3RhY2suc2l6ZSgpKQorICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50U3RhY2suc2hy
aW5rKGkpOworICAgICAgICAgICAgZm9yICg7aSA8IGN1cnJlbnRBbmNlc3RvcnMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICBSZWY8Tm9kZT4gY3VycmVudE5vZGUgPSBjdXJyZW50QW5j
ZXN0b3JzW2ldLmNvcHlSZWYoKTsKKyAgICAgICAgICAgICAgICBpZiAoIXJldXNlZE9yaWdpbmFs
Tm9kZXMuYWRkKGN1cnJlbnROb2RlLmNvcHlSZWYoKSkuaXNOZXdFbnRyeSkKKyAgICAgICAgICAg
ICAgICAgICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS0+Y2xvbmVOb2RlSW50ZXJuYWwoY3Vy
cmVudE5vZGUtPmRvY3VtZW50KCksIE5vZGU6OkNsb25pbmdPcGVyYXRpb246Ok9ubHlTZWxmKTsK
KworICAgICAgICAgICAgICAgIGluc2VydGlvbnMuYXBwZW5kKE5vZGVJbnNlcnRpb24geyBjdXJy
ZW50RWxlbWVudFN0YWNrLnNpemUoKSA/IGN1cnJlbnRFbGVtZW50U3RhY2subGFzdCgpLnB0cigp
IDogbnVsbHB0ciwgY3VycmVudE5vZGUuY29weVJlZigpIH0pOworICAgICAgICAgICAgICAgIGN1
cnJlbnRFbGVtZW50U3RhY2suYXBwZW5kKFdURk1vdmUoY3VycmVudE5vZGUpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGF1dG8gdGV4dCA9IFRleHQ6OmNyZWF0ZShjb21tb25BbmNlc3Rv
ci0+ZG9jdW1lbnQoKSwgcmVwbGFjZW1lbnREYXRhLm5ld0RhdGEpOworICAgICAgICAgICAgaW5z
ZXJ0aW9ucy5hcHBlbmQoTm9kZUluc2VydGlvbiB7IGN1cnJlbnRFbGVtZW50U3RhY2suc2l6ZSgp
ID8gY3VycmVudEVsZW1lbnRTdGFjay5sYXN0KCkucHRyKCkgOiBudWxscHRyLCBXVEZNb3ZlKHRl
eHQpIH0pOworICAgICAgICB9CisgICAgfQorCisgICAgUG9zaXRpb24gaW5zZXJ0aW9uUG9pbnQg
PSBpdGVtLnN0YXJ0OworICAgIHdoaWxlIChpbnNlcnRpb25Qb2ludC5jb250YWluZXJOb2RlKCkg
IT0gY29tbW9uQW5jZXN0b3IpCisgICAgICAgIGluc2VydGlvblBvaW50ID0gcG9zaXRpb25JblBh
cmVudEJlZm9yZU5vZGUoaW5zZXJ0aW9uUG9pbnQuY29udGFpbmVyTm9kZSgpKTsKKyAgICBBU1NF
UlQoIWluc2VydGlvblBvaW50LmlzTnVsbCgpKTsKKworICAgIGZvciAoYXV0byYgbm9kZSA6IG5v
ZGVzVG9SZW1vdmUpCisgICAgICAgIG5vZGUtPnJlbW92ZSgpOworCisgICAgZm9yIChhdXRvJiBp
bnNlcnRpb24gOiBpbnNlcnRpb25zKSB7CisgICAgICAgIGlmICghaW5zZXJ0aW9uLnBhcmVudCkK
KyAgICAgICAgICAgIGluc2VydGlvblBvaW50LmNvbnRhaW5lck5vZGUoKS0+aW5zZXJ0QmVmb3Jl
KGluc2VydGlvbi5jaGlsZCwgaW5zZXJ0aW9uUG9pbnQuY29tcHV0ZU5vZGVCZWZvcmVQb3NpdGlv
bigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaW5zZXJ0aW9uLnBhcmVudC0+YXBwZW5k
Q2hpbGQoaW5zZXJ0aW9uLmNoaWxkKTsKKyAgICB9CisKICAgICByZXR1cm4gTWFuaXB1bGF0aW9u
UmVzdWx0OjpTdWNjZXNzOwogfQogCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1RleHRNYW5pcHVsYXRpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0TWFuaXB1bGF0aW9uLm1tCShyZXZpc2lvbiAy
NTM2NjkpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5p
cHVsYXRpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ1MCw2ICs0NTAsNzIgQEAKICAgICByZXR1
cm4gYWRvcHROUyhbW19XS1RleHRNYW5pcHVsYXRpb25JdGVtIGFsbG9jXSBpbml0V2l0aElkZW50
aWZpZXI6aXRlbUlkZW50aWZpZXIgdG9rZW5zOndrVG9rZW5zLmdldCgpXSk7CiB9CiAKK1RFU1Qo
VGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uUmVwbGFjZVNpbXBsZVNp
bmdsZVBhcmFncmFwaCkKK3sKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1RleHRNYW5p
cHVsYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0
TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwg
NDAwLCA0MDApXSk7CisgICAgW3dlYlZpZXcgX3NldFRleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZTpk
ZWxlZ2F0ZS5nZXQoKV07CisKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJp
bmc6QCI8IURPQ1RZUEUgaHRtbD4iCisgICAgICAgICI8aHRtbD48Ym9keT48cD5oZWxsbG8sIHdv
b29ybGQ8L3A+PC9ib2R5PjwvaHRtbD4iXTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2Vi
VmlldyBfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb25maWd1cmF0aW9uOm5pbCBjb21wbGV0
aW9uOl57CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICBhdXRvICppdGVtcyA9IFtkZWxlZ2F0ZSBpdGVtc107
CisgICAgRVhQRUNUX0VRKGl0ZW1zLmNvdW50LCAxVUwpOworICAgIEVYUEVDVF9FUShpdGVtc1sw
XS50b2tlbnMuY291bnQsIDFVTCk7CisgICAgRVhQRUNUX1NUUkVRKCJoZWxsbG8sIHdvb29ybGQi
LCBpdGVtc1swXS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKKworICAgIGRvbmUgPSBm
YWxzZTsKKyAgICBbd2ViVmlldyBfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOihfV0tUZXh0TWFu
aXB1bGF0aW9uSXRlbSAqKWNyZWF0ZUl0ZW0oaXRlbXNbMF0uaWRlbnRpZmllciwgeworICAgICAg
ICB7IGl0ZW1zWzBdLnRva2Vuc1swXS5pZGVudGlmaWVyLCBAImhlbGxvLCB3b3JsZCIgfSwKKyAg
ICB9KS5nZXQoKSBjb21wbGV0aW9uOl4oQk9PTCBzdWNjZXNzKSB7CisgICAgICAgIEVYUEVDVF9U
UlVFKHN1Y2Nlc3MpOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworICAgIEVYUEVDVF9XS19TVFJFUSgiPHA+aGVsbG8s
IHdvcmxkPC9wPiIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1
bWVudC5ib2R5LmlubmVySFRNTCJdKTsKK30KKworVEVTVChUZXh0TWFuaXB1bGF0aW9uLCBDb21w
bGV0ZVRleHRNYW5pcHVsYXRpb25EaXNnYXJkc1Rva2VucykKK3sKKyAgICBhdXRvIGRlbGVnYXRl
ID0gYWRvcHROUyhbW1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAg
IGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZy
YW1lOk5TTWFrZVJlY3QoMCwgMCwgNDAwLCA0MDApXSk7CisgICAgW3dlYlZpZXcgX3NldFRleHRN
YW5pcHVsYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisKKyAgICBbd2ViVmlldyBzeW5j
aHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCI8IURPQ1RZUEUgaHRtbD4iCisgICAgICAgICI8aHRt
bD48Ym9keT48cD5oZWxsbywgPGI+d29ybGQ8L2I+LiA8aT5XZWJLaXQ8L2k+PC9wPjwvYm9keT48
L2h0bWw+Il07CisKKyAgICBkb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcgX3N0YXJ0VGV4dE1h
bmlwdWxhdGlvbnNXaXRoQ29uZmlndXJhdGlvbjpuaWwgY29tcGxldGlvbjpeeworICAgICAgICBk
b25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUp
OworCisgICAgYXV0byAqaXRlbXMgPSBbZGVsZWdhdGUgaXRlbXNdOworICAgIEVYUEVDVF9FUShp
dGVtcy5jb3VudCwgMVVMKTsKKyAgICBFWFBFQ1RfRVEoaXRlbXNbMF0udG9rZW5zLmNvdW50LCA0
VUwpOworICAgIEVYUEVDVF9TVFJFUSgiaGVsbG8sICIsIGl0ZW1zWzBdLnRva2Vuc1swXS5jb250
ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9TVFJFUSgid29ybGQiLCBpdGVtc1swXS50b2tl
bnNbMV0uY29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfU1RSRVEoIi4gIiwgaXRlbXNb
MF0udG9rZW5zWzJdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVRKCJXZWJL
aXQiLCBpdGVtc1swXS50b2tlbnNbM10uY29udGVudC5VVEY4U3RyaW5nKTsKKworICAgIGRvbmUg
PSBmYWxzZTsKKyAgICBbd2ViVmlldyBfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOihfV0tUZXh0
TWFuaXB1bGF0aW9uSXRlbSAqKWNyZWF0ZUl0ZW0oaXRlbXNbMF0uaWRlbnRpZmllciwgeworICAg
ICAgICB7IGl0ZW1zWzBdLnRva2Vuc1swXS5pZGVudGlmaWVyLCBAImhlbGxvLCAiIH0sCisgICAg
ICAgIHsgaXRlbXNbMF0udG9rZW5zWzNdLmlkZW50aWZpZXIsIEAiV2ViS2l0IiB9LAorICAgIH0p
LmdldCgpIGNvbXBsZXRpb246XihCT09MIHN1Y2Nlc3MpIHsKKyAgICAgICAgRVhQRUNUX1RSVUUo
c3VjY2Vzcyk7CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnJ1bigmZG9uZSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCI8cD5oZWxsbywgPGk+
V2ViS2l0PC9pPjwvcD4iLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAi
ZG9jdW1lbnQuYm9keS5pbm5lckhUTUwiXSk7Cit9CisKIFRFU1QoVGV4dE1hbmlwdWxhdGlvbiwg
Q29tcGxldGVUZXh0TWFuaXB1bGF0aW9uUmVwbGFjZVNpbXBsZVBhcmFncmFwaENvbnRlbnQpCiB7
CiAgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUg
YWxsb2NdIGluaXRdKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386138</attachid>
            <date>2019-12-19 13:21:29 -0800</date>
            <delta_ts>2019-12-20 01:16:24 -0800</delta_ts>
            <desc>WIP2</desc>
            <filename>wip205378b.patch</filename>
            <type>text/plain</type>
            <size>16001</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyNTM3NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NyArMzAsMTAgQEAKICNpbmNsdWRlICJFZGl0aW5nLmgiCiAjaW5jbHVkZSAiRWxlbWVudEFuY2Vz
dG9ySXRlcmF0b3IuaCIKICNpbmNsdWRlICJFdmVudExvb3AuaCIKKyNpbmNsdWRlICJOb2RlVHJh
dmVyc2FsLmgiCisjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJTY3JpcHREaXNhbGxvd2Vk
U2NvcGUuaCIKKyNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAj
aW5jbHVkZSAiVmlzaWJsZVVuaXRzLmgiCiAKQEAgLTI0NywyNCArMjUwLDQwIEBACiAgICAgaWYg
KGl0ZW1JdGVyYXRvciA9PSBtX2l0ZW1zLmVuZCgpKQogICAgICAgICByZXR1cm4gTWFuaXB1bGF0
aW9uUmVzdWx0OjpJbnZhbGlkSXRlbTsKIAotICAgIGF1dG8gZGlkUmVwbGFjZSA9IHJlcGxhY2Uo
aXRlbUl0ZXJhdG9yLT52YWx1ZSwgcmVwbGFjZW1lbnRUb2tlbnMpOwotCisgICAgTWFuaXB1bGF0
aW9uSXRlbSBpdGVtOworICAgIHN0ZDo6ZXhjaGFuZ2UoaXRlbSwgaXRlbUl0ZXJhdG9yLT52YWx1
ZSk7CiAgICAgbV9pdGVtcy5yZW1vdmUoaXRlbUl0ZXJhdG9yKTsKIAotICAgIHJldHVybiBkaWRS
ZXBsYWNlOworICAgIHJldHVybiByZXBsYWNlKGl0ZW0sIHJlcGxhY2VtZW50VG9rZW5zKTsKIH0K
IAorc3RydWN0IFRva2VuRXhjaGFuZ2VEYXRhIHsKKyAgICBSZWZQdHI8Tm9kZT4gbm9kZTsKKyAg
ICBib29sIGlzRXhjbHVkZWQ7Cit9OworCiBzdHJ1Y3QgRE9NQ2hhbmdlIHsKICAgICBSZWY8Q2hh
cmFjdGVyRGF0YT4gbm9kZTsKICAgICBTdHJpbmcgbmV3RGF0YTsKIH07CiAKK3N0cnVjdCBSZXBs
YWNlbWVudERhdGEgeworICAgIFJlZjxOb2RlPiBvcmlnaW5hbE5vZGU7CisgICAgU3RyaW5nIG5l
d0RhdGE7Cit9OworCitzdHJ1Y3QgTm9kZUluc2VydGlvbiB7CisgICAgUmVmUHRyPE5vZGU+IHBh
cmVudDsKKyAgICBSZWY8Tm9kZT4gY2hpbGQ7Cit9OworCiBhdXRvIFRleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyOjpyZXBsYWNlKGNvbnN0IE1hbmlwdWxhdGlvbkl0ZW0mIGl0ZW0sIGNvbnN0IFZl
Y3RvcjxNYW5pcHVsYXRpb25Ub2tlbj4mIHJlcGxhY2VtZW50VG9rZW5zKSAtPiBNYW5pcHVsYXRp
b25SZXN1bHQKIHsKICAgICBUZXh0SXRlcmF0b3IgaXRlcmF0b3IgeyBpdGVtLnN0YXJ0LCBpdGVt
LmVuZCB9OwogICAgIHNpemVfdCBjdXJyZW50VG9rZW5JbmRleCA9IDA7Ci0gICAgSGFzaE1hcDxU
b2tlbklkZW50aWZpZXIsIHN0ZDo6cGFpcjxSZWZQdHI8Tm9kZT4sIGNvbnN0IE1hbmlwdWxhdGlv
blRva2VuKj4+IHRva2VuVG9Ob2RlVG9rZW5QYWlyOworICAgIEhhc2hNYXA8VG9rZW5JZGVudGlm
aWVyLCBUb2tlbkV4Y2hhbmdlRGF0YT4gdG9rZW5Ub05vZGVUb2tlblBhaXI7CiAKKyAgICBSZWZQ
dHI8Tm9kZT4gY29tbW9uQW5jZXN0b3I7CiAgICAgd2hpbGUgKCFpdGVyYXRvci5hdEVuZCgpKSB7
CiAgICAgICAgIGF1dG8gc3RyaW5nID0gaXRlcmF0b3IudGV4dCgpLnRvU3RyaW5nKCk7CiAgICAg
ICAgIGlmIChjdXJyZW50VG9rZW5JbmRleCA+PSBpdGVtLnRva2Vucy5zaXplKCkpCkBAIC0yNzIs
MjkgKzI5MSwxMTEgQEAKICAgICAgICAgYXV0byYgY3VycmVudFRva2VuID0gaXRlbS50b2tlbnNb
Y3VycmVudFRva2VuSW5kZXhdOwogICAgICAgICBpZiAoaXRlcmF0b3IudGV4dCgpICE9IGN1cnJl
bnRUb2tlbi5jb250ZW50KQogICAgICAgICAgICAgcmV0dXJuIE1hbmlwdWxhdGlvblJlc3VsdDo6
Q29udGVudENoYW5nZWQ7Ci0gICAgICAgIHRva2VuVG9Ob2RlVG9rZW5QYWlyLnNldChjdXJyZW50
VG9rZW4uaWRlbnRpZmllciwgc3RkOjpwYWlyPFJlZlB0cjxOb2RlPiwgY29uc3QgTWFuaXB1bGF0
aW9uVG9rZW4qPiB7IGl0ZXJhdG9yLm5vZGUoKSwgJmN1cnJlbnRUb2tlbiB9KTsKKworICAgICAg
ICBhdXRvIGN1cnJlbnROb2RlID0gbWFrZVJlZlB0cihpdGVyYXRvci5ub2RlKCkpOworICAgICAg
ICB0b2tlblRvTm9kZVRva2VuUGFpci5zZXQoY3VycmVudFRva2VuLmlkZW50aWZpZXIsIFRva2Vu
RXhjaGFuZ2VEYXRhIHsgY3VycmVudE5vZGUuY29weVJlZigpLCBjdXJyZW50VG9rZW4uaXNFeGNs
dWRlZCB9KTsKKworICAgICAgICBpZiAoY3VycmVudE5vZGUpIHsKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBUYWtlIGNhcmUgb2Ygd2hlbiBjdXJyZW50Tm9kZSBpcyBudWxscHRyLgorICAgICAgICAg
ICAgaWYgKCFjb21tb25BbmNlc3RvcikKKyAgICAgICAgICAgICAgICBjb21tb25BbmNlc3RvciA9
IGN1cnJlbnROb2RlOworICAgICAgICAgICAgZWxzZSBpZiAoIWN1cnJlbnROb2RlLT5pc0Rlc2Nl
bmRhbnRPZihjb21tb25BbmNlc3Rvci5nZXQoKSkpIHsKKyAgICAgICAgICAgICAgICBjb21tb25B
bmNlc3RvciA9IFJhbmdlOjpjb21tb25BbmNlc3RvckNvbnRhaW5lcihjb21tb25BbmNlc3Rvci5n
ZXQoKSwgY3VycmVudE5vZGUuZ2V0KCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChjb21tb25B
bmNlc3Rvcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICBpdGVyYXRvci5h
ZHZhbmNlKCk7CiAgICAgICAgICsrY3VycmVudFRva2VuSW5kZXg7CiAgICAgfQorICAgIEFTU0VS
VChjb21tb25BbmNlc3Rvcik7CiAKICAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHByZXNldmUg
dGhlIG9yZGVyIG9mIHRoZSByZXBsYWNlbWVudCBhdCBhbGwuCi0gICAgVmVjdG9yPERPTUNoYW5n
ZT4gY2hhbmdlczsKKyAgICBWZWN0b3I8UmVwbGFjZW1lbnREYXRhPiByZXBsYWNlbWVudHM7CiAg
ICAgZm9yIChhdXRvJiBuZXdUb2tlbiA6IHJlcGxhY2VtZW50VG9rZW5zKSB7CiAgICAgICAgIGF1
dG8gaXQgPSB0b2tlblRvTm9kZVRva2VuUGFpci5maW5kKG5ld1Rva2VuLmlkZW50aWZpZXIpOwog
ICAgICAgICBpZiAoaXQgPT0gdG9rZW5Ub05vZGVUb2tlblBhaXIuZW5kKCkpCiAgICAgICAgICAg
ICByZXR1cm4gTWFuaXB1bGF0aW9uUmVzdWx0OjpJbnZhbGlkVG9rZW47Ci0gICAgICAgIGF1dG8m
IG9sZFRva2VuID0gKml0LT52YWx1ZS5zZWNvbmQ7Ci0gICAgICAgIGlmIChvbGRUb2tlbi5pc0V4
Y2x1ZGVkKQorCisgICAgICAgIGF1dG8mIGV4Y2hhbmdlRGF0YSA9IGl0LT52YWx1ZTsKKyAgICAg
ICAgaWYgKGV4Y2hhbmdlRGF0YS5pc0V4Y2x1ZGVkKQogICAgICAgICAgICAgcmV0dXJuIE1hbmlw
dWxhdGlvblJlc3VsdDo6RXhjbHVzaW9uVmlvbGF0aW9uOwotICAgICAgICBhdXRvKiBub2RlID0g
aXQtPnZhbHVlLmZpcnN0LmdldCgpOwotICAgICAgICBpZiAoIW5vZGUgfHwgIWlzPENoYXJhY3Rl
ckRhdGE+KCpub2RlKSkKKworICAgICAgICBpZiAoIWV4Y2hhbmdlRGF0YS5ub2RlKQogICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGNoYW5nZXMuYXBwZW5kKHsgZG93bmNhc3Q8Q2hhcmFj
dGVyRGF0YT4oKm5vZGUpLCBuZXdUb2tlbi5jb250ZW50IH0pOworCisgICAgICAgIHJlcGxhY2Vt
ZW50cy5hcHBlbmQoUmVwbGFjZW1lbnREYXRhIHsgZXhjaGFuZ2VEYXRhLm5vZGUgPyAqZXhjaGFu
Z2VEYXRhLm5vZGUgOiAqY29tbW9uQW5jZXN0b3IsIG5ld1Rva2VuLmNvbnRlbnQgfSk7CiAgICAg
fQogCi0gICAgZm9yIChhdXRvJiBjaGFuZ2UgOiBjaGFuZ2VzKQotICAgICAgICBjaGFuZ2Uubm9k
ZS0+c2V0RGF0YShjaGFuZ2UubmV3RGF0YSk7CisgICAgUmVmUHRyPE5vZGU+IG5vZGVBZnRlclN0
YXJ0ID0gaXRlbS5zdGFydC5jb21wdXRlTm9kZUFmdGVyUG9zaXRpb24oKTsKKyAgICBpZiAoIW5v
ZGVBZnRlclN0YXJ0KQorICAgICAgICBub2RlQWZ0ZXJTdGFydCA9IGl0ZW0uc3RhcnQuY29udGFp
bmVyTm9kZSgpOwogCisgICAgUmVmUHRyPE5vZGU+IG5vZGVBZnRlckVuZCA9IGl0ZW0uZW5kLmNv
bXB1dGVOb2RlQWZ0ZXJQb3NpdGlvbigpOworICAgIGlmICghbm9kZUFmdGVyRW5kKQorICAgICAg
ICBub2RlQWZ0ZXJFbmQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbigqaXRl
bS5lbmQuY29udGFpbmVyTm9kZSgpKTsKKworICAgIEhhc2hTZXQ8UmVmPE5vZGU+PiBub2Rlc1Rv
UmVtb3ZlOworICAgIGZvciAoUmVmUHRyPE5vZGU+IGN1cnJlbnROb2RlID0gbm9kZUFmdGVyU3Rh
cnQ7IGN1cnJlbnROb2RlICYmIGN1cnJlbnROb2RlICE9IG5vZGVBZnRlckVuZDsgY3VycmVudE5v
ZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpjdXJyZW50Tm9kZSkpIHsKKyAgICAgICAgaWYgKGNv
bW1vbkFuY2VzdG9yID09IGN1cnJlbnROb2RlKQorICAgICAgICAgICAgY29tbW9uQW5jZXN0b3Ig
PSBjdXJyZW50Tm9kZS0+cGFyZW50Tm9kZSgpOworICAgICAgICBub2Rlc1RvUmVtb3ZlLmFkZCgq
Y3VycmVudE5vZGUpOworICAgIH0KKworICAgIFZlY3RvcjxSZWY8Tm9kZT4+IGN1cnJlbnRFbGVt
ZW50U3RhY2s7CisgICAgSGFzaFNldDxSZWY8Tm9kZT4+IHJldXNlZE9yaWdpbmFsTm9kZXM7Cisg
ICAgVmVjdG9yPE5vZGVJbnNlcnRpb24+IGluc2VydGlvbnM7CisgICAgZm9yIChhdXRvJiByZXBs
YWNlbWVudERhdGEgOiByZXBsYWNlbWVudHMpIHsKKyAgICAgICAgYXV0byYgb3JpZ2luYWxOb2Rl
ID0gcmVwbGFjZW1lbnREYXRhLm9yaWdpbmFsTm9kZS5nZXQoKTsKKyAgICAgICAgUmVmUHRyPENv
bnRhaW5lck5vZGU+IGN1cnJlbnROb2RlID0gaXM8Q29udGFpbmVyTm9kZT4ob3JpZ2luYWxOb2Rl
KSA/ICZkb3duY2FzdDxDb250YWluZXJOb2RlPihvcmlnaW5hbE5vZGUpIDogb3JpZ2luYWxOb2Rl
LnBhcmVudE5vZGUoKTsKKworICAgICAgICBWZWN0b3I8UmVmPE5vZGU+PiBjdXJyZW50QW5jZXN0
b3JzOworICAgICAgICBmb3IgKDsgY3VycmVudE5vZGUgJiYgY3VycmVudE5vZGUgIT0gY29tbW9u
QW5jZXN0b3I7IGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUtPnBhcmVudE5vZGUoKSkKKyAgICAg
ICAgICAgIGN1cnJlbnRBbmNlc3RvcnMuYXBwZW5kKCpjdXJyZW50Tm9kZSk7CisgICAgICAgIGN1
cnJlbnRBbmNlc3RvcnMucmV2ZXJzZSgpOworCisgICAgICAgIHNpemVfdCBpID0wOworICAgICAg
ICB3aGlsZSAoaSA8IGN1cnJlbnRFbGVtZW50U3RhY2suc2l6ZSgpICYmIGkgPCBjdXJyZW50QW5j
ZXN0b3JzLnNpemUoKSAmJiBjdXJyZW50RWxlbWVudFN0YWNrW2ldLnB0cigpID09IGN1cnJlbnRB
bmNlc3RvcnNbaV0ucHRyKCkpCisgICAgICAgICAgICArK2k7CisKKyAgICAgICAgaWYgKGkgPT0g
Y3VycmVudEVsZW1lbnRTdGFjay5zaXplKCkgJiYgaSA9PSBjdXJyZW50QW5jZXN0b3JzLnNpemUo
KSkgeworICAgICAgICAgICAgYXV0byB0ZXh0ID0gVGV4dDo6Y3JlYXRlKGNvbW1vbkFuY2VzdG9y
LT5kb2N1bWVudCgpLCByZXBsYWNlbWVudERhdGEubmV3RGF0YSk7CisgICAgICAgICAgICBpbnNl
cnRpb25zLmFwcGVuZChOb2RlSW5zZXJ0aW9uIHsgY3VycmVudEVsZW1lbnRTdGFjay5zaXplKCkg
PyBjdXJyZW50RWxlbWVudFN0YWNrLmxhc3QoKS5wdHIoKSA6IG51bGxwdHIsIFdURk1vdmUodGV4
dCkgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoaSA8IGN1cnJlbnRFbGVt
ZW50U3RhY2suc2l6ZSgpKQorICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50U3RhY2suc2hy
aW5rKGkpOworICAgICAgICAgICAgZm9yICg7aSA8IGN1cnJlbnRBbmNlc3RvcnMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICBSZWY8Tm9kZT4gY3VycmVudE5vZGUgPSBjdXJyZW50QW5j
ZXN0b3JzW2ldLmNvcHlSZWYoKTsKKyAgICAgICAgICAgICAgICBpZiAoIXJldXNlZE9yaWdpbmFs
Tm9kZXMuYWRkKGN1cnJlbnROb2RlLmNvcHlSZWYoKSkuaXNOZXdFbnRyeSkgeworICAgICAgICAg
ICAgICAgICAgICBhdXRvIGNsb25lZE5vZGUgPSBjdXJyZW50Tm9kZS0+Y2xvbmVOb2RlSW50ZXJu
YWwoY3VycmVudE5vZGUtPmRvY3VtZW50KCksIE5vZGU6OkNsb25pbmdPcGVyYXRpb246Ok9ubHlT
ZWxmKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIGRhdGEgPSBjdXJyZW50Tm9kZS0+
ZXZlbnRUYXJnZXREYXRhKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5ldmVudExp
c3RlbmVyTWFwLmNvcHlFdmVudExpc3RlbmVyc05vdENyZWF0ZWRGcm9tTWFya3VwVG9UYXJnZXQo
Y2xvbmVkTm9kZS5wdHIoKSk7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlID0gV1RG
TW92ZShjbG9uZWROb2RlKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBp
bnNlcnRpb25zLmFwcGVuZChOb2RlSW5zZXJ0aW9uIHsgY3VycmVudEVsZW1lbnRTdGFjay5zaXpl
KCkgPyBjdXJyZW50RWxlbWVudFN0YWNrLmxhc3QoKS5wdHIoKSA6IG51bGxwdHIsIGN1cnJlbnRO
b2RlLmNvcHlSZWYoKSB9KTsKKyAgICAgICAgICAgICAgICBjdXJyZW50RWxlbWVudFN0YWNrLmFw
cGVuZChXVEZNb3ZlKGN1cnJlbnROb2RlKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBh
dXRvIHRleHQgPSBUZXh0OjpjcmVhdGUoY29tbW9uQW5jZXN0b3ItPmRvY3VtZW50KCksIHJlcGxh
Y2VtZW50RGF0YS5uZXdEYXRhKTsKKyAgICAgICAgICAgIGluc2VydGlvbnMuYXBwZW5kKE5vZGVJ
bnNlcnRpb24geyBjdXJyZW50RWxlbWVudFN0YWNrLnNpemUoKSA/IGN1cnJlbnRFbGVtZW50U3Rh
Y2subGFzdCgpLnB0cigpIDogbnVsbHB0ciwgV1RGTW92ZSh0ZXh0KSB9KTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIFBvc2l0aW9uIGluc2VydGlvblBvaW50ID0gaXRlbS5zdGFydDsKKyAgICB3
aGlsZSAoaW5zZXJ0aW9uUG9pbnQuY29udGFpbmVyTm9kZSgpICE9IGNvbW1vbkFuY2VzdG9yKQor
ICAgICAgICBpbnNlcnRpb25Qb2ludCA9IHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKGluc2Vy
dGlvblBvaW50LmNvbnRhaW5lck5vZGUoKSk7CisgICAgQVNTRVJUKCFpbnNlcnRpb25Qb2ludC5p
c051bGwoKSk7CisKKyAgICBmb3IgKGF1dG8mIG5vZGUgOiBub2Rlc1RvUmVtb3ZlKQorICAgICAg
ICBub2RlLT5yZW1vdmUoKTsKKworICAgIGZvciAoYXV0byYgaW5zZXJ0aW9uIDogaW5zZXJ0aW9u
cykgeworICAgICAgICBpZiAoIWluc2VydGlvbi5wYXJlbnQpCisgICAgICAgICAgICBpbnNlcnRp
b25Qb2ludC5jb250YWluZXJOb2RlKCktPmluc2VydEJlZm9yZShpbnNlcnRpb24uY2hpbGQsIGlu
c2VydGlvblBvaW50LmNvbXB1dGVOb2RlQmVmb3JlUG9zaXRpb24oKSk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGluc2VydGlvbi5wYXJlbnQtPmFwcGVuZENoaWxkKGluc2VydGlvbi5jaGls
ZCk7CisgICAgfQorCiAgICAgcmV0dXJuIE1hbmlwdWxhdGlvblJlc3VsdDo6U3VjY2VzczsKIH0K
IApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0TWFuaXB1
bGF0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvVGV4dE1hbmlwdWxhdGlvbi5tbQkocmV2aXNpb24gMjUzNzY2KQorKysgVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0TWFuaXB1bGF0aW9uLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC00NTAsNiArNDUwLDcyIEBACiAgICAgcmV0dXJuIGFkb3B0TlMoW1tfV0tUZXh0
TWFuaXB1bGF0aW9uSXRlbSBhbGxvY10gaW5pdFdpdGhJZGVudGlmaWVyOml0ZW1JZGVudGlmaWVy
IHRva2Vuczp3a1Rva2Vucy5nZXQoKV0pOwogfQogCitURVNUKFRleHRNYW5pcHVsYXRpb24sIENv
bXBsZXRlVGV4dE1hbmlwdWxhdGlvblJlcGxhY2VTaW1wbGVTaW5nbGVQYXJhZ3JhcGgpCit7Cisg
ICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgYWxs
b2NdIGluaXRdKTsKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDQwMCwgNDAwKV0pOworICAgIFt3
ZWJWaWV3IF9zZXRUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisg
ICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPCFET0NUWVBFIGh0bWw+
IgorICAgICAgICAiPGh0bWw+PGJvZHk+PHA+aGVsbGxvLCB3b29vcmxkPC9wPjwvYm9keT48L2h0
bWw+Il07CisKKyAgICBkb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlw
dWxhdGlvbnNXaXRoQ29uZmlndXJhdGlvbjpuaWwgY29tcGxldGlvbjpeeworICAgICAgICBkb25l
ID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwor
CisgICAgYXV0byAqaXRlbXMgPSBbZGVsZWdhdGUgaXRlbXNdOworICAgIEVYUEVDVF9FUShpdGVt
cy5jb3VudCwgMVVMKTsKKyAgICBFWFBFQ1RfRVEoaXRlbXNbMF0udG9rZW5zLmNvdW50LCAxVUwp
OworICAgIEVYUEVDVF9TVFJFUSgiaGVsbGxvLCB3b29vcmxkIiwgaXRlbXNbMF0udG9rZW5zWzBd
LmNvbnRlbnQuVVRGOFN0cmluZyk7CisKKyAgICBkb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcg
X2NvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbjooX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKiljcmVh
dGVJdGVtKGl0ZW1zWzBdLmlkZW50aWZpZXIsIHsKKyAgICAgICAgeyBpdGVtc1swXS50b2tlbnNb
MF0uaWRlbnRpZmllciwgQCJoZWxsbywgd29ybGQiIH0sCisgICAgfSkuZ2V0KCkgY29tcGxldGlv
bjpeKEJPT0wgc3VjY2VzcykgeworICAgICAgICBFWFBFQ1RfVFJVRShzdWNjZXNzKTsKKyAgICAg
ICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZk
b25lKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIjxwPmhlbGxvLCB3b3JsZDwvcD4iLCBbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5pbm5lckhUTUwi
XSk7Cit9CisKK1RFU1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9u
RGlzZ2FyZHNUb2tlbnMpCit7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXh0TWFu
aXB1bGF0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9w
dE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAs
IDQwMCwgNDAwKV0pOworICAgIFt3ZWJWaWV3IF9zZXRUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU6
ZGVsZWdhdGUuZ2V0KCldOworCisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3Ry
aW5nOkAiPCFET0NUWVBFIGh0bWw+IgorICAgICAgICAiPGh0bWw+PGJvZHk+PHA+aGVsbG8sIDxi
PndvcmxkPC9iPi4gPGk+V2ViS2l0PC9pPjwvcD48L2JvZHk+PC9odG1sPiJdOworCisgICAgZG9u
ZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IF9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0aENvbmZp
Z3VyYXRpb246bmlsIGNvbXBsZXRpb246XnsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07
CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIGF1dG8gKml0ZW1z
ID0gW2RlbGVnYXRlIGl0ZW1zXTsKKyAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQsIDFVTCk7Cisg
ICAgRVhQRUNUX0VRKGl0ZW1zWzBdLnRva2Vucy5jb3VudCwgNFVMKTsKKyAgICBFWFBFQ1RfU1RS
RVEoImhlbGxvLCAiLCBpdGVtc1swXS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKKyAg
ICBFWFBFQ1RfU1RSRVEoIndvcmxkIiwgaXRlbXNbMF0udG9rZW5zWzFdLmNvbnRlbnQuVVRGOFN0
cmluZyk7CisgICAgRVhQRUNUX1NUUkVRKCIuICIsIGl0ZW1zWzBdLnRva2Vuc1syXS5jb250ZW50
LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9TVFJFUSgiV2ViS2l0IiwgaXRlbXNbMF0udG9rZW5z
WzNdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisKKyAgICBkb25lID0gZmFsc2U7CisgICAgW3dlYlZp
ZXcgX2NvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbjooX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKilj
cmVhdGVJdGVtKGl0ZW1zWzBdLmlkZW50aWZpZXIsIHsKKyAgICAgICAgeyBpdGVtc1swXS50b2tl
bnNbMF0uaWRlbnRpZmllciwgQCJoZWxsbywgIiB9LAorICAgICAgICB7IGl0ZW1zWzBdLnRva2Vu
c1szXS5pZGVudGlmaWVyLCBAIldlYktpdCIgfSwKKyAgICB9KS5nZXQoKSBjb21wbGV0aW9uOl4o
Qk9PTCBzdWNjZXNzKSB7CisgICAgICAgIEVYUEVDVF9UUlVFKHN1Y2Nlc3MpOworICAgICAgICBk
b25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUp
OworICAgIEVYUEVDVF9XS19TVFJFUSgiPHA+aGVsbG8sIDxpPldlYktpdDwvaT48L3A+IiwgW3dl
YlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmJvZHkuaW5uZXJI
VE1MIl0pOworfQorCiBURVNUKFRleHRNYW5pcHVsYXRpb24sIENvbXBsZXRlVGV4dE1hbmlwdWxh
dGlvblJlcGxhY2VTaW1wbGVQYXJhZ3JhcGhDb250ZW50KQogewogICAgIGF1dG8gZGVsZWdhdGUg
PSBhZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CkBAIC01
MDIsNiArNTY4LDExNCBAQAogICAgICAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0OkAiZG9jdW1lbnQuYm9keS5pbm5lckhUTUwiXSk7CiB9CiAKK1RFU1QoVGV4dE1hbmlw
dWxhdGlvbiwgQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uUmVvcmRlcnNDb250ZW50KQoreworICAg
IGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9j
XSBpbml0XSk7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA0MDAsIDQwMCldKTsKKyAgICBbd2Vi
VmlldyBfc2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAg
IFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjwhRE9DVFlQRSBodG1sPiIK
KyAgICAgICAgIjxodG1sPjxib2R5PjxwPjxhIGhyZWY9XCJodHRwczovL2VuLndpa2lwZWRpYS5v
cmcvd2lraS9DYXRcIj5jYXRzPC9hPiwgPGk+STwvaT4gYXJlPC9wPjwvYm9keT48L2h0bWw+Il07
CisKKyAgICBkb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlwdWxhdGlv
bnNXaXRoQ29uZmlndXJhdGlvbjpuaWwgY29tcGxldGlvbjpeeworICAgICAgICBkb25lID0gdHJ1
ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworCisgICAg
YXV0byAqaXRlbXMgPSBbZGVsZWdhdGUgaXRlbXNdOworICAgIEVYUEVDVF9FUShpdGVtcy5jb3Vu
dCwgMVVMKTsKKyAgICBFWFBFQ1RfRVEoaXRlbXNbMF0udG9rZW5zLmNvdW50LCA0VUwpOworICAg
IEVYUEVDVF9TVFJFUSgiY2F0cyIsIGl0ZW1zWzBdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJp
bmcpOworICAgIEVYUEVDVF9TVFJFUSgiLCAiLCBpdGVtc1swXS50b2tlbnNbMV0uY29udGVudC5V
VEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfU1RSRVEoIkkiLCBpdGVtc1swXS50b2tlbnNbMl0uY29u
dGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfU1RSRVEoIiBhcmUiLCBpdGVtc1swXS50b2tl
bnNbM10uY29udGVudC5VVEY4U3RyaW5nKTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2Vi
VmlldyBfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOihfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAq
KWNyZWF0ZUl0ZW0oaXRlbXNbMF0uaWRlbnRpZmllciwgeworICAgICAgICB7IGl0ZW1zWzBdLnRv
a2Vuc1syXS5pZGVudGlmaWVyLCBAIkkiIH0sCisgICAgICAgIHsgaXRlbXNbMF0udG9rZW5zWzNd
LmlkZW50aWZpZXIsIEAiJ20gYSAiIH0sCisgICAgICAgIHsgaXRlbXNbMF0udG9rZW5zWzBdLmlk
ZW50aWZpZXIsIEAiY2F0IiB9LAorICAgIH0pLmdldCgpIGNvbXBsZXRpb246XihCT09MIHN1Y2Nl
c3MpIHsKKyAgICAgICAgRVhQRUNUX1RSVUUoc3VjY2Vzcyk7CisgICAgICAgIGRvbmUgPSB0cnVl
OworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisgICAgRVhQ
RUNUX1dLX1NUUkVRKCI8cD48aT5JPC9pPidtIGEgPGEgaHJlZj1cImh0dHBzOi8vZW4ud2lraXBl
ZGlhLm9yZy93aWtpL0NhdFwiPmNhdDwvYT48L3A+IiwKKyAgICAgICAgW3dlYlZpZXcgc3RyaW5n
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmJvZHkuaW5uZXJIVE1MIl0pOworfQor
CitURVNUKFRleHRNYW5pcHVsYXRpb24sIENvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbkNhblNwbGl0
Q29udGVudCkKK3sKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1RleHRNYW5pcHVsYXRp
b25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tU
ZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgNDAwLCA0
MDApXSk7CisgICAgW3dlYlZpZXcgX3NldFRleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0
ZS5nZXQoKV07CisKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCI8
IURPQ1RZUEUgaHRtbD4iCisgICAgICAgICI8aHRtbD48Ym9keT48cCBpZD1cInBhcmFncmFwaFwi
PjxiIGNsYXNzPVwiaGVsbG8td29ybGRcIj5oZWxsbyB3b3JsZDwvYj4gV2ViS2l0PC9wPjwvYm9k
eT48L2h0bWw+Il07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpA
InBhcmFncmFwaC5maXJzdENoaWxkLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gd2lu
ZG93LmRpZENsaWNrID0gdHJ1ZSkiXTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmll
dyBfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb25maWd1cmF0aW9uOm5pbCBjb21wbGV0aW9u
Ol57CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0
aWw6OnJ1bigmZG9uZSk7CisKKyAgICBhdXRvICppdGVtcyA9IFtkZWxlZ2F0ZSBpdGVtc107Cisg
ICAgRVhQRUNUX0VRKGl0ZW1zLmNvdW50LCAxVUwpOworICAgIEVYUEVDVF9FUShpdGVtc1swXS50
b2tlbnMuY291bnQsIDJVTCk7CisgICAgRVhQRUNUX1NUUkVRKCJoZWxsbyB3b3JsZCIsIGl0ZW1z
WzBdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9TVFJFUSgiIFdl
YktpdCIsIGl0ZW1zWzBdLnRva2Vuc1sxXS5jb250ZW50LlVURjhTdHJpbmcpOworCisgICAgZG9u
ZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IF9jb21wbGV0ZVRleHRNYW5pcHVsYXRpb246KF9XS1Rl
eHRNYW5pcHVsYXRpb25JdGVtICopY3JlYXRlSXRlbShpdGVtc1swXS5pZGVudGlmaWVyLCB7Cisg
ICAgICAgIHsgaXRlbXNbMF0udG9rZW5zWzBdLmlkZW50aWZpZXIsIEAiaGVsbG8iIH0sCisgICAg
ICAgIHsgaXRlbXNbMF0udG9rZW5zWzFdLmlkZW50aWZpZXIsIEAiIFdlYktpdCAiIH0sCisgICAg
ICAgIHsgaXRlbXNbMF0udG9rZW5zWzBdLmlkZW50aWZpZXIsIEAid29ybGQiIH0sCisgICAgfSku
Z2V0KCkgY29tcGxldGlvbjpeKEJPT0wgc3VjY2VzcykgeworICAgICAgICBFWFBFQ1RfVFJVRShz
dWNjZXNzKTsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQ
STo6VXRpbDo6cnVuKCZkb25lKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIjxwIGlkPVwicGFyYWdy
YXBoXCI+PGIgY2xhc3M9XCJoZWxsby13b3JsZFwiPmhlbGxvPC9iPiBXZWJLaXQgPGIgY2xhc3M9
XCJoZWxsby13b3JsZFwiPndvcmxkPC9iPjwvcD4iLAorICAgICAgICBbd2ViVmlldyBzdHJpbmdC
eUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5pbm5lckhUTUwiXSk7CisgICAg
RVhQRUNUX1RSVUUoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRpZENs
aWNrID0gZmFsc2U7IHBhcmFncmFwaC5maXJzdENoaWxkLmNsaWNrKCk7IGRpZENsaWNrIl0uYm9v
bFZhbHVlKTsKKyAgICBFWFBFQ1RfVFJVRShbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0OkAiZGlkQ2xpY2sgPSBmYWxzZTsgcGFyYWdyYXBoLmxhc3RDaGlsZC5jbGljaygpOyBk
aWRDbGljayJdLmJvb2xWYWx1ZSk7Cit9CisKK1RFU1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxl
dGVUZXh0TWFuaXB1bGF0aW9uQ2FuTWVyZ2VDb250ZW50KQoreworICAgIGF1dG8gZGVsZWdhdGUg
PSBhZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAg
YXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6TlNNYWtlUmVjdCgwLCAwLCA0MDAsIDQwMCldKTsKKyAgICBbd2ViVmlldyBfc2V0VGV4dE1h
bmlwdWxhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIFt3ZWJWaWV3IHN5bmNo
cm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjwhRE9DVFlQRSBodG1sPjxodG1sPjxib2R5PjxwPjxi
PmhlbGxvIDxpPndvcmxkPC9pPiBXZWJLaXQ8L2I+PC9wPjwvYm9keT48L2h0bWw+Il07CisKKyAg
ICBkb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRo
Q29uZmlndXJhdGlvbjpuaWwgY29tcGxldGlvbjpeeworICAgICAgICBkb25lID0gdHJ1ZTsKKyAg
ICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworCisgICAgYXV0byAq
aXRlbXMgPSBbZGVsZWdhdGUgaXRlbXNdOworICAgIEVYUEVDVF9FUShpdGVtcy5jb3VudCwgMVVM
KTsKKyAgICBFWFBFQ1RfRVEoaXRlbXNbMF0udG9rZW5zLmNvdW50LCAzVUwpOworICAgIEVYUEVD
VF9TVFJFUSgiaGVsbG8gIiwgaXRlbXNbMF0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7
CisgICAgRVhQRUNUX1NUUkVRKCJ3b3JsZCIsIGl0ZW1zWzBdLnRva2Vuc1sxXS5jb250ZW50LlVU
RjhTdHJpbmcpOworICAgIEVYUEVDVF9TVFJFUSgiIFdlYktpdCIsIGl0ZW1zWzBdLnRva2Vuc1sy
XS5jb250ZW50LlVURjhTdHJpbmcpOworCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3
IF9jb21wbGV0ZVRleHRNYW5pcHVsYXRpb246KF9XS1RleHRNYW5pcHVsYXRpb25JdGVtICopY3Jl
YXRlSXRlbShpdGVtc1swXS5pZGVudGlmaWVyLCB7CisgICAgICAgIHsgaXRlbXNbMF0udG9rZW5z
WzBdLmlkZW50aWZpZXIsIEAiaGVsbG8gIiB9LAorICAgICAgICB7IGl0ZW1zWzBdLnRva2Vuc1sy
XS5pZGVudGlmaWVyLCBAIndvcmxkIiB9LAorICAgIH0pLmdldCgpIGNvbXBsZXRpb246XihCT09M
IHN1Y2Nlc3MpIHsKKyAgICAgICAgRVhQRUNUX1RSVUUoc3VjY2Vzcyk7CisgICAgICAgIGRvbmUg
PSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7Cisg
ICAgRVhQRUNUX1dLX1NUUkVRKCI8cD48Yj5oZWxsbyB3b3JsZDwvYj48L3A+IiwgW3dlYlZpZXcg
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmJvZHkuaW5uZXJIVE1MIl0p
OworfQorCiBURVNUKFRleHRNYW5pcHVsYXRpb24sIENvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbkZh
aWxXaGVuQ29udGVudElzQ2hhbmdlZCkKIHsKICAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhb
W1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386188</attachid>
            <date>2019-12-20 01:16:24 -0800</date>
            <delta_ts>2019-12-20 17:19:10 -0800</delta_ts>
            <desc>Implements the new behavior</desc>
            <filename>fix205378.patch</filename>
            <type>text/plain</type>
            <size>26936</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxZDQ0NjFiZWE0NC4uN2IyOTYyYzgxMzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNCBAQAorMjAxOS0xMi0yMCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4K
KworICAgICAgICBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlciBzaG91bGQgcmVzcGVjdCBuZXcg
dG9rZW4gb3JkZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMDUzNzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBVcGRhdGVkIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpyZXBsYWNlIHRvIHJlbW92
ZSBhbGwgZXhpc3RpbmcgY29udGVudCBhbmQgaW5zZXJ0IG5ldyB0b2tlbnMgaW4gdGhlIG9yZGVy
IHRoZXkgYXBwZWFyLgorCisgICAgICAgIFRvIGRvIHRoaXMsIHdlIGZpcnN0IGZpbmQgdGhlIGNv
bW1vbiBhbmNlc3RvciBvZiBhbGwgbm9kZXMgaW4gdGhlIHBhcmFncmFwaCBhbmQgdGhlbiByZW1v
dmUgYWxsIG5vZGVzIGluIGJldHdlZW4uCisKKyAgICAgICAgVGhlbiB3ZSdkIGluc2VydCB0aGUg
bm9kZSBpZGVudGlmaWVkIGJ5IHRoZSB0b2tlbiBpZGVudGlmaWVyIGFuZCBhbGwgaXRzIGFuY2Vz
dG9ycyBhdCB3aGVyZSB0aGV5IGFwcGVhci4gSW4gdGhlIGNhc2UKKyAgICAgICAgdGhlIHNhbWUg
dG9rZW4gaXMgdXNlZCBmb3IgdGhlIHNlY29uZCB0aW1lLCB3ZSBjbG9uZSBpdHMgbm9kZS4gRm9y
IGVhY2ggbGVhZiBub2RlLCB3ZSBmaW5kIHRoZSBjbG9zZXN0IGFuY2VzdG9yIHdoaWNoCisgICAg
ICAgIGhhZCBhbHJlYWR5IGJlZW4gaW5zZXJ0ZWQgYnkgdGhlIHByZXZpb3VzIHRva2VuLCBhbmQg
YXBwZW5kIHRoZSBsZWFmIG5vZGUgYWxvbmcgd2l0aCBpdHMgYW5jZXN0b3JzIHRvIGl0LgorCisg
ICAgICAgIEknbSBleHBlY3RpbmcgdG8gbWFrZSBhIGxvdCBvZiByZWZpbmVtZW50cyAmIGZvbGxv
d3VwcyB0byB0aGlzIGFsZ29yaXRobSBpbiB0aGUgZnV0dXJlIGJ1dCB0aGlzIHNlZW1zIHRvIGdl
dCBiYXNpY3MgZG9uZS4KKworICAgICAgICBUZXN0czogVGV4dE1hbmlwdWxhdGlvbi5Db21wbGV0
ZVRleHRNYW5pcHVsYXRpb25SZXBsYWNlU2ltcGxlU2luZ2xlUGFyYWdyYXBoCisgICAgICAgICAg
ICAgICBUZXh0TWFuaXB1bGF0aW9uLkNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbkRpc2dhcmRzVG9r
ZW5zCisgICAgICAgICAgICAgICBUZXh0TWFuaXB1bGF0aW9uLkNvbXBsZXRlVGV4dE1hbmlwdWxh
dGlvblJlb3JkZXJzQ29udGVudAorICAgICAgICAgICAgICAgVGV4dE1hbmlwdWxhdGlvbi5Db21w
bGV0ZVRleHRNYW5pcHVsYXRpb25DYW5TcGxpdENvbnRlbnQKKyAgICAgICAgICAgICAgIFRleHRN
YW5pcHVsYXRpb24uQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uQ2FuTWVyZ2VDb250ZW50CisgICAg
ICAgICAgICAgICBUZXh0TWFuaXB1bGF0aW9uLkNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbkZhaWxX
aGVuQ29udGVudElzUmVtb3ZlZAorICAgICAgICAgICAgICAgVGV4dE1hbmlwdWxhdGlvbi5Db21w
bGV0ZVRleHRNYW5pcHVsYXRpb25GYWlsV2hlbkV4Y2x1ZGVkQ29udGVudEFwcGVhcnNNb3JlVGhh
bk9uY2UKKyAgICAgICAgICAgICAgIFRleHRNYW5pcHVsYXRpb24uQ29tcGxldGVUZXh0TWFuaXB1
bGF0aW9uUHJlc2VydmVzRXhjbHVkZWRDb250ZW50CisKKyAgICAgICAgKiBlZGl0aW5nL1RleHRN
YW5pcHVsYXRpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRNYW5pcHVs
YXRpb25Db250cm9sbGVyOjpkaWRDcmVhdGVSZW5kZXJlckZvckVsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OmNvbXBsZXRlTWFuaXB1bGF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpyZXBsYWNl
KToKKwogMjAxOS0xMi0xOSAgRG91ZyBLZWxseSAgPGRvdWdrQGFwcGxlLmNvbT4KIAogICAgICAg
ICBVcGRhdGUgVHJhY2tCYXNlIHRvIHN0b3JlIG1fbWVkaWFFbGVtZW50IGFzIGEgV2Vha1B0cgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJv
bGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyLmNwcAppbmRleCBlMTdiZGVjMTQ1Yi4uYTQ4OTBmOTJiOGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC0z
MCw3ICszMCwxMSBAQAogI2luY2x1ZGUgIkVkaXRpbmcuaCIKICNpbmNsdWRlICJFbGVtZW50QW5j
ZXN0b3JJdGVyYXRvci5oIgogI2luY2x1ZGUgIkV2ZW50TG9vcC5oIgorI2luY2x1ZGUgIk5vZGVU
cmF2ZXJzYWwuaCIKKyNpbmNsdWRlICJQc2V1ZG9FbGVtZW50LmgiCisjaW5jbHVkZSAiUmFuZ2Uu
aCIKICNpbmNsdWRlICJTY3JpcHREaXNhbGxvd2VkU2NvcGUuaCIKKyNpbmNsdWRlICJUZXh0Lmgi
CiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVVuaXRzLmgiCiAK
QEAgLTE3Niw3ICsxODAsMTIgQEAgdm9pZCBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6ZGlk
Q3JlYXRlUmVuZGVyZXJGb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgaWYgKG1f
bXV0YXRlZEVsZW1lbnRzLmNvbXB1dGVzRW1wdHkoKSkKICAgICAgICAgc2NoZWR1bGVPYnNlcnZh
cnRpb25VcGRhdGUoKTsKLSAgICBtX211dGF0ZWRFbGVtZW50cy5hZGQoZWxlbWVudCk7CisKKyAg
ICBpZiAoaXM8UHNldWRvRWxlbWVudD4oZWxlbWVudCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIGhv
c3QgPSBkb3duY2FzdDxQc2V1ZG9FbGVtZW50PihlbGVtZW50KS5ob3N0RWxlbWVudCgpKQorICAg
ICAgICAgICAgbV9tdXRhdGVkRWxlbWVudHMuYWRkKCpob3N0KTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgbV9tdXRhdGVkRWxlbWVudHMuYWRkKGVsZW1lbnQpOwogfQogCiB1c2luZyBQb3NpdGlvblR1
cGxlID0gc3RkOjp0dXBsZTxSZWZQdHI8Tm9kZT4sIHVuc2lnbmVkLCB1bnNpZ25lZD47CkBAIC0y
NDcsMjQgKzI1Niw0MCBAQCBhdXRvIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpjb21wbGV0
ZU1hbmlwdWxhdGlvbihJdGVtSWRlbnRpZmllciBpdGVtSWRlbnRpZgogICAgIGlmIChpdGVtSXRl
cmF0b3IgPT0gbV9pdGVtcy5lbmQoKSkKICAgICAgICAgcmV0dXJuIE1hbmlwdWxhdGlvblJlc3Vs
dDo6SW52YWxpZEl0ZW07CiAKLSAgICBhdXRvIGRpZFJlcGxhY2UgPSByZXBsYWNlKGl0ZW1JdGVy
YXRvci0+dmFsdWUsIHJlcGxhY2VtZW50VG9rZW5zKTsKLQorICAgIE1hbmlwdWxhdGlvbkl0ZW0g
aXRlbTsKKyAgICBzdGQ6OmV4Y2hhbmdlKGl0ZW0sIGl0ZW1JdGVyYXRvci0+dmFsdWUpOwogICAg
IG1faXRlbXMucmVtb3ZlKGl0ZW1JdGVyYXRvcik7CiAKLSAgICByZXR1cm4gZGlkUmVwbGFjZTsK
KyAgICByZXR1cm4gcmVwbGFjZShpdGVtLCByZXBsYWNlbWVudFRva2Vucyk7CiB9CiAKLXN0cnVj
dCBET01DaGFuZ2UgewotICAgIFJlZjxDaGFyYWN0ZXJEYXRhPiBub2RlOworc3RydWN0IFRva2Vu
RXhjaGFuZ2VEYXRhIHsKKyAgICBSZWZQdHI8Tm9kZT4gbm9kZTsKKyAgICBTdHJpbmcgb3JpZ2lu
YWxDb250ZW50OworICAgIGJvb2wgaXNFeGNsdWRlZCB7IGZhbHNlIH07CisgICAgYm9vbCBpc0Nv
bnN1bWVkIHsgZmFsc2UgfTsKK307CisKK3N0cnVjdCBSZXBsYWNlbWVudERhdGEgeworICAgIFJl
ZjxOb2RlPiBvcmlnaW5hbE5vZGU7CiAgICAgU3RyaW5nIG5ld0RhdGE7CiB9OwogCitzdHJ1Y3Qg
Tm9kZUluc2VydGlvbiB7CisgICAgUmVmUHRyPE5vZGU+IHBhcmVudDsKKyAgICBSZWY8Tm9kZT4g
Y2hpbGQ7Cit9OworCiBhdXRvIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpyZXBsYWNlKGNv
bnN0IE1hbmlwdWxhdGlvbkl0ZW0mIGl0ZW0sIGNvbnN0IFZlY3RvcjxNYW5pcHVsYXRpb25Ub2tl
bj4mIHJlcGxhY2VtZW50VG9rZW5zKSAtPiBNYW5pcHVsYXRpb25SZXN1bHQKIHsKKyAgICBpZiAo
aXRlbS5zdGFydC5pc09ycGhhbigpIHx8IGl0ZW0uZW5kLmlzT3JwaGFuKCkpCisgICAgICAgIHJl
dHVybiBNYW5pcHVsYXRpb25SZXN1bHQ6OkNvbnRlbnRDaGFuZ2VkOworCiAgICAgVGV4dEl0ZXJh
dG9yIGl0ZXJhdG9yIHsgaXRlbS5zdGFydCwgaXRlbS5lbmQgfTsKICAgICBzaXplX3QgY3VycmVu
dFRva2VuSW5kZXggPSAwOwotICAgIEhhc2hNYXA8VG9rZW5JZGVudGlmaWVyLCBzdGQ6OnBhaXI8
UmVmUHRyPE5vZGU+LCBjb25zdCBNYW5pcHVsYXRpb25Ub2tlbio+PiB0b2tlblRvTm9kZVRva2Vu
UGFpcjsKKyAgICBIYXNoTWFwPFRva2VuSWRlbnRpZmllciwgVG9rZW5FeGNoYW5nZURhdGE+IHRv
a2VuRXhjaGFuZ2VNYXA7CiAKKyAgICBSZWZQdHI8Tm9kZT4gY29tbW9uQW5jZXN0b3I7CiAgICAg
d2hpbGUgKCFpdGVyYXRvci5hdEVuZCgpKSB7CiAgICAgICAgIGF1dG8gc3RyaW5nID0gaXRlcmF0
b3IudGV4dCgpLnRvU3RyaW5nKCk7CiAgICAgICAgIGlmIChjdXJyZW50VG9rZW5JbmRleCA+PSBp
dGVtLnRva2Vucy5zaXplKCkpCkBAIC0yNzIsMjggKzI5NywxMDggQEAgYXV0byBUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlcjo6cmVwbGFjZShjb25zdCBNYW5pcHVsYXRpb25JdGVtJiBpdGVtLCBj
b25zdCBWZWMKICAgICAgICAgYXV0byYgY3VycmVudFRva2VuID0gaXRlbS50b2tlbnNbY3VycmVu
dFRva2VuSW5kZXhdOwogICAgICAgICBpZiAoaXRlcmF0b3IudGV4dCgpICE9IGN1cnJlbnRUb2tl
bi5jb250ZW50KQogICAgICAgICAgICAgcmV0dXJuIE1hbmlwdWxhdGlvblJlc3VsdDo6Q29udGVu
dENoYW5nZWQ7Ci0gICAgICAgIHRva2VuVG9Ob2RlVG9rZW5QYWlyLnNldChjdXJyZW50VG9rZW4u
aWRlbnRpZmllciwgc3RkOjpwYWlyPFJlZlB0cjxOb2RlPiwgY29uc3QgTWFuaXB1bGF0aW9uVG9r
ZW4qPiB7IGl0ZXJhdG9yLm5vZGUoKSwgJmN1cnJlbnRUb2tlbiB9KTsKKworICAgICAgICBhdXRv
IGN1cnJlbnROb2RlID0gbWFrZVJlZlB0cihpdGVyYXRvci5ub2RlKCkpOworICAgICAgICB0b2tl
bkV4Y2hhbmdlTWFwLnNldChjdXJyZW50VG9rZW4uaWRlbnRpZmllciwgVG9rZW5FeGNoYW5nZURh
dGEgeyBjdXJyZW50Tm9kZS5jb3B5UmVmKCksIGN1cnJlbnRUb2tlbi5jb250ZW50LCBjdXJyZW50
VG9rZW4uaXNFeGNsdWRlZCB9KTsKKworICAgICAgICBpZiAoY3VycmVudE5vZGUpIHsKKyAgICAg
ICAgICAgIC8vIEZJWE1FOiBUYWtlIGNhcmUgb2Ygd2hlbiBjdXJyZW50Tm9kZSBpcyBudWxscHRy
LgorICAgICAgICAgICAgaWYgKCFjb21tb25BbmNlc3RvcikKKyAgICAgICAgICAgICAgICBjb21t
b25BbmNlc3RvciA9IGN1cnJlbnROb2RlOworICAgICAgICAgICAgZWxzZSBpZiAoIWN1cnJlbnRO
b2RlLT5pc0Rlc2NlbmRhbnRPZihjb21tb25BbmNlc3Rvci5nZXQoKSkpIHsKKyAgICAgICAgICAg
ICAgICBjb21tb25BbmNlc3RvciA9IFJhbmdlOjpjb21tb25BbmNlc3RvckNvbnRhaW5lcihjb21t
b25BbmNlc3Rvci5nZXQoKSwgY3VycmVudE5vZGUuZ2V0KCkpOworICAgICAgICAgICAgICAgIEFT
U0VSVChjb21tb25BbmNlc3Rvcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAg
ICBpdGVyYXRvci5hZHZhbmNlKCk7CiAgICAgICAgICsrY3VycmVudFRva2VuSW5kZXg7CiAgICAg
fQorICAgIEFTU0VSVChjb21tb25BbmNlc3Rvcik7CisKKyAgICBSZWZQdHI8Tm9kZT4gbm9kZUFm
dGVyU3RhcnQgPSBpdGVtLnN0YXJ0LmNvbXB1dGVOb2RlQWZ0ZXJQb3NpdGlvbigpOworICAgIGlm
ICghbm9kZUFmdGVyU3RhcnQpCisgICAgICAgIG5vZGVBZnRlclN0YXJ0ID0gaXRlbS5zdGFydC5j
b250YWluZXJOb2RlKCk7CisKKyAgICBSZWZQdHI8Tm9kZT4gbm9kZUFmdGVyRW5kID0gaXRlbS5l
bmQuY29tcHV0ZU5vZGVBZnRlclBvc2l0aW9uKCk7CisgICAgaWYgKCFub2RlQWZ0ZXJFbmQpCisg
ICAgICAgIG5vZGVBZnRlckVuZCA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVu
KCppdGVtLmVuZC5jb250YWluZXJOb2RlKCkpOworCisgICAgSGFzaFNldDxSZWY8Tm9kZT4+IG5v
ZGVzVG9SZW1vdmU7CisgICAgZm9yIChSZWZQdHI8Tm9kZT4gY3VycmVudE5vZGUgPSBub2RlQWZ0
ZXJTdGFydDsgY3VycmVudE5vZGUgJiYgY3VycmVudE5vZGUgIT0gbm9kZUFmdGVyRW5kOyBjdXJy
ZW50Tm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKmN1cnJlbnROb2RlKSkgeworICAgICAgICBp
ZiAoY29tbW9uQW5jZXN0b3IgPT0gY3VycmVudE5vZGUpCisgICAgICAgICAgICBjb21tb25BbmNl
c3RvciA9IGN1cnJlbnROb2RlLT5wYXJlbnROb2RlKCk7CisgICAgICAgIG5vZGVzVG9SZW1vdmUu
YWRkKCpjdXJyZW50Tm9kZSk7CisgICAgfQogCi0gICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCBw
cmVzZXZlIHRoZSBvcmRlciBvZiB0aGUgcmVwbGFjZW1lbnQgYXQgYWxsLgotICAgIFZlY3RvcjxE
T01DaGFuZ2U+IGNoYW5nZXM7CisgICAgVmVjdG9yPFJlZjxOb2RlPj4gY3VycmVudEVsZW1lbnRT
dGFjazsKKyAgICBIYXNoU2V0PFJlZjxOb2RlPj4gcmV1c2VkT3JpZ2luYWxOb2RlczsKKyAgICBW
ZWN0b3I8Tm9kZUluc2VydGlvbj4gaW5zZXJ0aW9uczsKICAgICBmb3IgKGF1dG8mIG5ld1Rva2Vu
IDogcmVwbGFjZW1lbnRUb2tlbnMpIHsKLSAgICAgICAgYXV0byBpdCA9IHRva2VuVG9Ob2RlVG9r
ZW5QYWlyLmZpbmQobmV3VG9rZW4uaWRlbnRpZmllcik7Ci0gICAgICAgIGlmIChpdCA9PSB0b2tl
blRvTm9kZVRva2VuUGFpci5lbmQoKSkKKyAgICAgICAgYXV0byBpdCA9IHRva2VuRXhjaGFuZ2VN
YXAuZmluZChuZXdUb2tlbi5pZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKGl0ID09IHRva2VuRXhj
aGFuZ2VNYXAuZW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gTWFuaXB1bGF0aW9uUmVzdWx0OjpJ
bnZhbGlkVG9rZW47Ci0gICAgICAgIGF1dG8mIG9sZFRva2VuID0gKml0LT52YWx1ZS5zZWNvbmQ7
Ci0gICAgICAgIGlmIChvbGRUb2tlbi5pc0V4Y2x1ZGVkKQotICAgICAgICAgICAgcmV0dXJuIE1h
bmlwdWxhdGlvblJlc3VsdDo6RXhjbHVzaW9uVmlvbGF0aW9uOwotICAgICAgICBhdXRvKiBub2Rl
ID0gaXQtPnZhbHVlLmZpcnN0LmdldCgpOwotICAgICAgICBpZiAoIW5vZGUgfHwgIWlzPENoYXJh
Y3RlckRhdGE+KCpub2RlKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBjaGFuZ2Vz
LmFwcGVuZCh7IGRvd25jYXN0PENoYXJhY3RlckRhdGE+KCpub2RlKSwgbmV3VG9rZW4uY29udGVu
dCB9KTsKKworICAgICAgICBhdXRvJiBleGNoYW5nZURhdGEgPSBpdC0+dmFsdWU7CisKKyAgICAg
ICAgUmVmUHRyPE5vZGU+IGNvbnRlbnROb2RlOworICAgICAgICBpZiAoZXhjaGFuZ2VEYXRhLmlz
RXhjbHVkZWQpIHsKKyAgICAgICAgICAgIGlmIChleGNoYW5nZURhdGEuaXNDb25zdW1lZCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gTWFuaXB1bGF0aW9uUmVzdWx0OjpFeGNsdXNpb25WaW9sYXRp
b247CisgICAgICAgICAgICBleGNoYW5nZURhdGEuaXNDb25zdW1lZCA9IHRydWU7CisgICAgICAg
ICAgICBpZiAoIW5ld1Rva2VuLmNvbnRlbnQuaXNOdWxsKCkgJiYgbmV3VG9rZW4uY29udGVudCAh
PSBleGNoYW5nZURhdGEub3JpZ2luYWxDb250ZW50KQorICAgICAgICAgICAgICAgIHJldHVybiBN
YW5pcHVsYXRpb25SZXN1bHQ6OkV4Y2x1c2lvblZpb2xhdGlvbjsKKyAgICAgICAgICAgIGNvbnRl
bnROb2RlID0gVGV4dDo6Y3JlYXRlKGNvbW1vbkFuY2VzdG9yLT5kb2N1bWVudCgpLCBleGNoYW5n
ZURhdGEub3JpZ2luYWxDb250ZW50KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBjb250
ZW50Tm9kZSA9IFRleHQ6OmNyZWF0ZShjb21tb25BbmNlc3Rvci0+ZG9jdW1lbnQoKSwgbmV3VG9r
ZW4uY29udGVudCk7CisKKyAgICAgICAgYXV0byYgb3JpZ2luYWxOb2RlID0gZXhjaGFuZ2VEYXRh
Lm5vZGUgPyAqZXhjaGFuZ2VEYXRhLm5vZGUgOiAqY29tbW9uQW5jZXN0b3I7CisgICAgICAgIFJl
ZlB0cjxDb250YWluZXJOb2RlPiBjdXJyZW50Tm9kZSA9IGlzPENvbnRhaW5lck5vZGU+KG9yaWdp
bmFsTm9kZSkgPyAmZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4ob3JpZ2luYWxOb2RlKSA6IG9yaWdp
bmFsTm9kZS5wYXJlbnROb2RlKCk7CisKKyAgICAgICAgVmVjdG9yPFJlZjxOb2RlPj4gY3VycmVu
dEFuY2VzdG9yczsKKyAgICAgICAgZm9yICg7IGN1cnJlbnROb2RlICYmIGN1cnJlbnROb2RlICE9
IGNvbW1vbkFuY2VzdG9yOyBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLT5wYXJlbnROb2RlKCkp
CisgICAgICAgICAgICBjdXJyZW50QW5jZXN0b3JzLmFwcGVuZCgqY3VycmVudE5vZGUpOworICAg
ICAgICBjdXJyZW50QW5jZXN0b3JzLnJldmVyc2UoKTsKKworICAgICAgICBzaXplX3QgaSA9MDsK
KyAgICAgICAgd2hpbGUgKGkgPCBjdXJyZW50RWxlbWVudFN0YWNrLnNpemUoKSAmJiBpIDwgY3Vy
cmVudEFuY2VzdG9ycy5zaXplKCkgJiYgY3VycmVudEVsZW1lbnRTdGFja1tpXS5wdHIoKSA9PSBj
dXJyZW50QW5jZXN0b3JzW2ldLnB0cigpKQorICAgICAgICAgICAgKytpOworCisgICAgICAgIGlm
IChpID09IGN1cnJlbnRFbGVtZW50U3RhY2suc2l6ZSgpICYmIGkgPT0gY3VycmVudEFuY2VzdG9y
cy5zaXplKCkpIHsKKyAgICAgICAgICAgIGluc2VydGlvbnMuYXBwZW5kKE5vZGVJbnNlcnRpb24g
eyBjdXJyZW50RWxlbWVudFN0YWNrLnNpemUoKSA/IGN1cnJlbnRFbGVtZW50U3RhY2subGFzdCgp
LnB0cigpIDogbnVsbHB0ciwgY29udGVudE5vZGUucmVsZWFzZU5vbk51bGwoKSB9KTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChpIDwgY3VycmVudEVsZW1lbnRTdGFjay5zaXpl
KCkpCisgICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnRTdGFjay5zaHJpbmsoaSk7CisgICAg
ICAgICAgICBmb3IgKDtpIDwgY3VycmVudEFuY2VzdG9ycy5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgICAgIFJlZjxOb2RlPiBjdXJyZW50Tm9kZSA9IGN1cnJlbnRBbmNlc3RvcnNbaV0uY29w
eVJlZigpOworICAgICAgICAgICAgICAgIGlmICghcmV1c2VkT3JpZ2luYWxOb2Rlcy5hZGQoY3Vy
cmVudE5vZGUuY29weVJlZigpKS5pc05ld0VudHJ5KSB7CisgICAgICAgICAgICAgICAgICAgIGF1
dG8gY2xvbmVkTm9kZSA9IGN1cnJlbnROb2RlLT5jbG9uZU5vZGVJbnRlcm5hbChjdXJyZW50Tm9k
ZS0+ZG9jdW1lbnQoKSwgTm9kZTo6Q2xvbmluZ09wZXJhdGlvbjo6T25seVNlbGYpOworICAgICAg
ICAgICAgICAgICAgICBpZiAoYXV0byogZGF0YSA9IGN1cnJlbnROb2RlLT5ldmVudFRhcmdldERh
dGEoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPmV2ZW50TGlzdGVuZXJNYXAuY29w
eUV2ZW50TGlzdGVuZXJzTm90Q3JlYXRlZEZyb21NYXJrdXBUb1RhcmdldChjbG9uZWROb2RlLnB0
cigpKTsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudE5vZGUgPSBXVEZNb3ZlKGNsb25lZE5v
ZGUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGluc2VydGlvbnMuYXBw
ZW5kKE5vZGVJbnNlcnRpb24geyBjdXJyZW50RWxlbWVudFN0YWNrLnNpemUoKSA/IGN1cnJlbnRF
bGVtZW50U3RhY2subGFzdCgpLnB0cigpIDogbnVsbHB0ciwgY3VycmVudE5vZGUuY29weVJlZigp
IH0pOworICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50U3RhY2suYXBwZW5kKFdURk1vdmUo
Y3VycmVudE5vZGUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGluc2VydGlvbnMuYXBw
ZW5kKE5vZGVJbnNlcnRpb24geyBjdXJyZW50RWxlbWVudFN0YWNrLnNpemUoKSA/IGN1cnJlbnRF
bGVtZW50U3RhY2subGFzdCgpLnB0cigpIDogbnVsbHB0ciwgY29udGVudE5vZGUucmVsZWFzZU5v
bk51bGwoKSB9KTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIGZvciAoYXV0byYgY2hhbmdlIDog
Y2hhbmdlcykKLSAgICAgICAgY2hhbmdlLm5vZGUtPnNldERhdGEoY2hhbmdlLm5ld0RhdGEpOwor
ICAgIFBvc2l0aW9uIGluc2VydGlvblBvaW50ID0gaXRlbS5zdGFydDsKKyAgICB3aGlsZSAoaW5z
ZXJ0aW9uUG9pbnQuY29udGFpbmVyTm9kZSgpICE9IGNvbW1vbkFuY2VzdG9yKQorICAgICAgICBp
bnNlcnRpb25Qb2ludCA9IHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKGluc2VydGlvblBvaW50
LmNvbnRhaW5lck5vZGUoKSk7CisgICAgQVNTRVJUKCFpbnNlcnRpb25Qb2ludC5pc051bGwoKSk7
CisKKyAgICBmb3IgKGF1dG8mIG5vZGUgOiBub2Rlc1RvUmVtb3ZlKQorICAgICAgICBub2RlLT5y
ZW1vdmUoKTsKKworICAgIGZvciAoYXV0byYgaW5zZXJ0aW9uIDogaW5zZXJ0aW9ucykgeworICAg
ICAgICBpZiAoIWluc2VydGlvbi5wYXJlbnQpCisgICAgICAgICAgICBpbnNlcnRpb25Qb2ludC5j
b250YWluZXJOb2RlKCktPmluc2VydEJlZm9yZShpbnNlcnRpb24uY2hpbGQsIGluc2VydGlvblBv
aW50LmNvbXB1dGVOb2RlQmVmb3JlUG9zaXRpb24oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGluc2VydGlvbi5wYXJlbnQtPmFwcGVuZENoaWxkKGluc2VydGlvbi5jaGlsZCk7CisgICAg
fQogCiAgICAgcmV0dXJuIE1hbmlwdWxhdGlvblJlc3VsdDo6U3VjY2VzczsKIH0KZGlmZiAtLWdp
dCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxNjZlNzBkMGU0OS4u
YmRjZTBmMmQ1NjkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxOS0xMi0yMCAgUnlvc3VrZSBOaXdhICA8cm5pd2FA
d2Via2l0Lm9yZz4KKworICAgICAgICBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlciBzaG91bGQg
cmVzcGVjdCBuZXcgdG9rZW4gb3JkZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDUzNzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGRlZCBhIGJ1bmNoIG9mIHRlc3RzIGZvciBXS1RleHRNYW5pcHVs
YXRpb24uCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRN
YW5pcHVsYXRpb24ubW06CisgICAgICAgIChUZXh0TWFuaXB1bGF0aW9uLkNvbXBsZXRlVGV4dE1h
bmlwdWxhdGlvblJlcGxhY2VTaW1wbGVTaW5nbGVQYXJhZ3JhcGgpOgorICAgICAgICAoVGV4dE1h
bmlwdWxhdGlvbi5Db21wbGV0ZVRleHRNYW5pcHVsYXRpb25EaXNnYXJkc1Rva2Vucyk6CisgICAg
ICAgIChUZXh0TWFuaXB1bGF0aW9uLkNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvblJlb3JkZXJzQ29u
dGVudCk6CisgICAgICAgIChUZXh0TWFuaXB1bGF0aW9uLkNvbXBsZXRlVGV4dE1hbmlwdWxhdGlv
bkNhblNwbGl0Q29udGVudCk6CisgICAgICAgIChUZXh0TWFuaXB1bGF0aW9uLkNvbXBsZXRlVGV4
dE1hbmlwdWxhdGlvbkNhbk1lcmdlQ29udGVudCk6CisgICAgICAgIChUZXh0TWFuaXB1bGF0aW9u
LkNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbkZhaWxXaGVuQ29udGVudElzUmVtb3ZlZCk6CisgICAg
ICAgIChUZXh0TWFuaXB1bGF0aW9uLkNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbkZhaWxXaGVuRXhj
bHVkZWRDb250ZW50QXBwZWFyc01vcmVUaGFuT25jZSk6CisgICAgICAgIChUZXh0TWFuaXB1bGF0
aW9uLkNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvblByZXNlcnZlc0V4Y2x1ZGVkQ29udGVudCk6CisK
IDIwMTktMTItMTkgIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAg
ICAgIFB5dGhvbiAzOiBBZGQgc3VwcG9ydCB0byBydW4td2Via2l0LXRlc3RzCmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVsYXRpb24u
bW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVsYXRp
b24ubW0KaW5kZXggOTRmOWNkZGRjNzcuLjQ2ZjIzMjM3NGUwIDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVsYXRpb24ubW0KKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0TWFuaXB1bGF0aW9uLm1t
CkBAIC00NTAsNiArNDUwLDcyIEBAIHN0YXRpYyBSZXRhaW5QdHI8X1dLVGV4dE1hbmlwdWxhdGlv
bkl0ZW0+IGNyZWF0ZUl0ZW0oTlNTdHJpbmcgKml0ZW1JZGVudGlmaWVyLCBjCiAgICAgcmV0dXJu
IGFkb3B0TlMoW1tfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSBhbGxvY10gaW5pdFdpdGhJZGVudGlm
aWVyOml0ZW1JZGVudGlmaWVyIHRva2Vuczp3a1Rva2Vucy5nZXQoKV0pOwogfQogCitURVNUKFRl
eHRNYW5pcHVsYXRpb24sIENvbXBsZXRlVGV4dE1hbmlwdWxhdGlvblJlcGxhY2VTaW1wbGVTaW5n
bGVQYXJhZ3JhcGgpCit7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXh0TWFuaXB1
bGF0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5T
KFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDQw
MCwgNDAwKV0pOworICAgIFt3ZWJWaWV3IF9zZXRUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU6ZGVs
ZWdhdGUuZ2V0KCldOworCisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5n
OkAiPCFET0NUWVBFIGh0bWw+IgorICAgICAgICAiPGh0bWw+PGJvZHk+PHA+aGVsbGxvLCB3b29v
cmxkPC9wPjwvYm9keT48L2h0bWw+Il07CisKKyAgICBkb25lID0gZmFsc2U7CisgICAgW3dlYlZp
ZXcgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29uZmlndXJhdGlvbjpuaWwgY29tcGxldGlv
bjpeeworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpydW4oJmRvbmUpOworCisgICAgYXV0byAqaXRlbXMgPSBbZGVsZWdhdGUgaXRlbXNdOwor
ICAgIEVYUEVDVF9FUShpdGVtcy5jb3VudCwgMVVMKTsKKyAgICBFWFBFQ1RfRVEoaXRlbXNbMF0u
dG9rZW5zLmNvdW50LCAxVUwpOworICAgIEVYUEVDVF9TVFJFUSgiaGVsbGxvLCB3b29vcmxkIiwg
aXRlbXNbMF0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisKKyAgICBkb25lID0gZmFs
c2U7CisgICAgW3dlYlZpZXcgX2NvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbjooX1dLVGV4dE1hbmlw
dWxhdGlvbkl0ZW0gKiljcmVhdGVJdGVtKGl0ZW1zWzBdLmlkZW50aWZpZXIsIHsKKyAgICAgICAg
eyBpdGVtc1swXS50b2tlbnNbMF0uaWRlbnRpZmllciwgQCJoZWxsbywgd29ybGQiIH0sCisgICAg
fSkuZ2V0KCkgY29tcGxldGlvbjpeKEJPT0wgc3VjY2VzcykgeworICAgICAgICBFWFBFQ1RfVFJV
RShzdWNjZXNzKTsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktp
dEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIjxwPmhlbGxvLCB3
b3JsZDwvcD4iLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1l
bnQuYm9keS5pbm5lckhUTUwiXSk7Cit9CisKK1RFU1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxl
dGVUZXh0TWFuaXB1bGF0aW9uRGlzZ2FyZHNUb2tlbnMpCit7CisgICAgYXV0byBkZWxlZ2F0ZSA9
IGFkb3B0TlMoW1tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBh
dXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpOU01ha2VSZWN0KDAsIDAsIDQwMCwgNDAwKV0pOworICAgIFt3ZWJWaWV3IF9zZXRUZXh0TWFu
aXB1bGF0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAgW3dlYlZpZXcgc3luY2hy
b25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPCFET0NUWVBFIGh0bWw+IgorICAgICAgICAiPGh0bWw+
PGJvZHk+PHA+aGVsbG8sIDxiPndvcmxkPC9iPi4gPGk+V2ViS2l0PC9pPjwvcD48L2JvZHk+PC9o
dG1sPiJdOworCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IF9zdGFydFRleHRNYW5p
cHVsYXRpb25zV2l0aENvbmZpZ3VyYXRpb246bmlsIGNvbXBsZXRpb246XnsKKyAgICAgICAgZG9u
ZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsK
KworICAgIGF1dG8gKml0ZW1zID0gW2RlbGVnYXRlIGl0ZW1zXTsKKyAgICBFWFBFQ1RfRVEoaXRl
bXMuY291bnQsIDFVTCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zWzBdLnRva2Vucy5jb3VudCwgNFVM
KTsKKyAgICBFWFBFQ1RfU1RSRVEoImhlbGxvLCAiLCBpdGVtc1swXS50b2tlbnNbMF0uY29udGVu
dC5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfU1RSRVEoIndvcmxkIiwgaXRlbXNbMF0udG9rZW5z
WzFdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVRKCIuICIsIGl0ZW1zWzBd
LnRva2Vuc1syXS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9TVFJFUSgiV2ViS2l0
IiwgaXRlbXNbMF0udG9rZW5zWzNdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisKKyAgICBkb25lID0g
ZmFsc2U7CisgICAgW3dlYlZpZXcgX2NvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbjooX1dLVGV4dE1h
bmlwdWxhdGlvbkl0ZW0gKiljcmVhdGVJdGVtKGl0ZW1zWzBdLmlkZW50aWZpZXIsIHsKKyAgICAg
ICAgeyBpdGVtc1swXS50b2tlbnNbMF0uaWRlbnRpZmllciwgQCJoZWxsbywgIiB9LAorICAgICAg
ICB7IGl0ZW1zWzBdLnRva2Vuc1szXS5pZGVudGlmaWVyLCBAIldlYktpdCIgfSwKKyAgICB9KS5n
ZXQoKSBjb21wbGV0aW9uOl4oQk9PTCBzdWNjZXNzKSB7CisgICAgICAgIEVYUEVDVF9UUlVFKHN1
Y2Nlc3MpOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJmRvbmUpOworICAgIEVYUEVDVF9XS19TVFJFUSgiPHA+aGVsbG8sIDxpPldl
YktpdDwvaT48L3A+IiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRv
Y3VtZW50LmJvZHkuaW5uZXJIVE1MIl0pOworfQorCiBURVNUKFRleHRNYW5pcHVsYXRpb24sIENv
bXBsZXRlVGV4dE1hbmlwdWxhdGlvblJlcGxhY2VTaW1wbGVQYXJhZ3JhcGhDb250ZW50KQogewog
ICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGFs
bG9jXSBpbml0XSk7CkBAIC01MDIsNiArNTY4LDExNCBAQCBURVNUKFRleHRNYW5pcHVsYXRpb24s
IENvbXBsZXRlVGV4dE1hbmlwdWxhdGlvblJlcGxhY2VTaW1wbGVQYXJhZ3JhcGhDb250ZW50KQog
ICAgICAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQu
Ym9keS5pbm5lckhUTUwiXSk7CiB9CiAKK1RFU1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxldGVU
ZXh0TWFuaXB1bGF0aW9uUmVvcmRlcnNDb250ZW50KQoreworICAgIGF1dG8gZGVsZWdhdGUgPSBh
ZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgYXV0
byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
TlNNYWtlUmVjdCgwLCAwLCA0MDAsIDQwMCldKTsKKyAgICBbd2ViVmlldyBfc2V0VGV4dE1hbmlw
dWxhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIFt3ZWJWaWV3IHN5bmNocm9u
b3VzbHlMb2FkSFRNTFN0cmluZzpAIjwhRE9DVFlQRSBodG1sPiIKKyAgICAgICAgIjxodG1sPjxi
b2R5PjxwPjxhIGhyZWY9XCJodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DYXRcIj5jYXRz
PC9hPiwgPGk+STwvaT4gYXJlPC9wPjwvYm9keT48L2h0bWw+Il07CisKKyAgICBkb25lID0gZmFs
c2U7CisgICAgW3dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29uZmlndXJhdGlv
bjpuaWwgY29tcGxldGlvbjpeeworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBU
ZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworCisgICAgYXV0byAqaXRlbXMgPSBbZGVs
ZWdhdGUgaXRlbXNdOworICAgIEVYUEVDVF9FUShpdGVtcy5jb3VudCwgMVVMKTsKKyAgICBFWFBF
Q1RfRVEoaXRlbXNbMF0udG9rZW5zLmNvdW50LCA0VUwpOworICAgIEVYUEVDVF9TVFJFUSgiY2F0
cyIsIGl0ZW1zWzBdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9T
VFJFUSgiLCAiLCBpdGVtc1swXS50b2tlbnNbMV0uY29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBF
WFBFQ1RfU1RSRVEoIkkiLCBpdGVtc1swXS50b2tlbnNbMl0uY29udGVudC5VVEY4U3RyaW5nKTsK
KyAgICBFWFBFQ1RfU1RSRVEoIiBhcmUiLCBpdGVtc1swXS50b2tlbnNbM10uY29udGVudC5VVEY4
U3RyaW5nKTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBfY29tcGxldGVUZXh0
TWFuaXB1bGF0aW9uOihfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqKWNyZWF0ZUl0ZW0oaXRlbXNb
MF0uaWRlbnRpZmllciwgeworICAgICAgICB7IGl0ZW1zWzBdLnRva2Vuc1syXS5pZGVudGlmaWVy
LCBAIkkiIH0sCisgICAgICAgIHsgaXRlbXNbMF0udG9rZW5zWzNdLmlkZW50aWZpZXIsIEAiJ20g
YSAiIH0sCisgICAgICAgIHsgaXRlbXNbMF0udG9rZW5zWzBdLmlkZW50aWZpZXIsIEAiY2F0IiB9
LAorICAgIH0pLmdldCgpIGNvbXBsZXRpb246XihCT09MIHN1Y2Nlc3MpIHsKKyAgICAgICAgRVhQ
RUNUX1RSVUUoc3VjY2Vzcyk7CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRl
c3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCI8cD48
aT5JPC9pPidtIGEgPGEgaHJlZj1cImh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NhdFwi
PmNhdDwvYT48L3A+IiwKKyAgICAgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNj
cmlwdDpAImRvY3VtZW50LmJvZHkuaW5uZXJIVE1MIl0pOworfQorCitURVNUKFRleHRNYW5pcHVs
YXRpb24sIENvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbkNhblNwbGl0Q29udGVudCkKK3sKKyAgICBh
dXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSBhbGxvY10g
aW5pdF0pOworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgNDAwLCA0MDApXSk7CisgICAgW3dlYlZp
ZXcgX3NldFRleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisKKyAgICBb
d2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCI8IURPQ1RZUEUgaHRtbD4iCisg
ICAgICAgICI8aHRtbD48Ym9keT48cCBpZD1cInBhcmFncmFwaFwiPjxiIGNsYXNzPVwiaGVsbG8t
d29ybGRcIj5oZWxsbyB3b3JsZDwvYj4gV2ViS2l0PC9wPjwvYm9keT48L2h0bWw+Il07CisgICAg
W3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInBhcmFncmFwaC5maXJzdENo
aWxkLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gd2luZG93LmRpZENsaWNrID0gdHJ1
ZSkiXTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBfc3RhcnRUZXh0TWFuaXB1
bGF0aW9uc1dpdGhDb25maWd1cmF0aW9uOm5pbCBjb21wbGV0aW9uOl57CisgICAgICAgIGRvbmUg
PSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisK
KyAgICBhdXRvICppdGVtcyA9IFtkZWxlZ2F0ZSBpdGVtc107CisgICAgRVhQRUNUX0VRKGl0ZW1z
LmNvdW50LCAxVUwpOworICAgIEVYUEVDVF9FUShpdGVtc1swXS50b2tlbnMuY291bnQsIDJVTCk7
CisgICAgRVhQRUNUX1NUUkVRKCJoZWxsbyB3b3JsZCIsIGl0ZW1zWzBdLnRva2Vuc1swXS5jb250
ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9TVFJFUSgiIFdlYktpdCIsIGl0ZW1zWzBdLnRv
a2Vuc1sxXS5jb250ZW50LlVURjhTdHJpbmcpOworCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3
ZWJWaWV3IF9jb21wbGV0ZVRleHRNYW5pcHVsYXRpb246KF9XS1RleHRNYW5pcHVsYXRpb25JdGVt
ICopY3JlYXRlSXRlbShpdGVtc1swXS5pZGVudGlmaWVyLCB7CisgICAgICAgIHsgaXRlbXNbMF0u
dG9rZW5zWzBdLmlkZW50aWZpZXIsIEAiaGVsbG8iIH0sCisgICAgICAgIHsgaXRlbXNbMF0udG9r
ZW5zWzFdLmlkZW50aWZpZXIsIEAiIFdlYktpdCAiIH0sCisgICAgICAgIHsgaXRlbXNbMF0udG9r
ZW5zWzBdLmlkZW50aWZpZXIsIEAid29ybGQiIH0sCisgICAgfSkuZ2V0KCkgY29tcGxldGlvbjpe
KEJPT0wgc3VjY2VzcykgeworICAgICAgICBFWFBFQ1RfVFJVRShzdWNjZXNzKTsKKyAgICAgICAg
ZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25l
KTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIjxwIGlkPVwicGFyYWdyYXBoXCI+PGIgY2xhc3M9XCJo
ZWxsby13b3JsZFwiPmhlbGxvPC9iPiBXZWJLaXQgPGIgY2xhc3M9XCJoZWxsby13b3JsZFwiPndv
cmxkPC9iPjwvcD4iLAorICAgICAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0OkAiZG9jdW1lbnQuYm9keS5pbm5lckhUTUwiXSk7CisgICAgRVhQRUNUX1RSVUUoW3dlYlZp
ZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRpZENsaWNrID0gZmFsc2U7IHBhcmFn
cmFwaC5maXJzdENoaWxkLmNsaWNrKCk7IGRpZENsaWNrIl0uYm9vbFZhbHVlKTsKKyAgICBFWFBF
Q1RfVFJVRShbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZGlkQ2xpY2sg
PSBmYWxzZTsgcGFyYWdyYXBoLmxhc3RDaGlsZC5jbGljaygpOyBkaWRDbGljayJdLmJvb2xWYWx1
ZSk7Cit9CisKK1RFU1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9u
Q2FuTWVyZ2VDb250ZW50KQoreworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGV4dE1h
bmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRv
cHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAw
LCA0MDAsIDQwMCldKTsKKyAgICBbd2ViVmlldyBfc2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRl
OmRlbGVnYXRlLmdldCgpXTsKKworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0
cmluZzpAIjwhRE9DVFlQRSBodG1sPjxodG1sPjxib2R5PjxwPjxiPmhlbGxvIDxpPndvcmxkPC9p
PiBXZWJLaXQ8L2I+PC9wPjwvYm9keT48L2h0bWw+Il07CisKKyAgICBkb25lID0gZmFsc2U7Cisg
ICAgW3dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29uZmlndXJhdGlvbjpuaWwg
Y29tcGxldGlvbjpeeworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworCisgICAgYXV0byAqaXRlbXMgPSBbZGVsZWdhdGUg
aXRlbXNdOworICAgIEVYUEVDVF9FUShpdGVtcy5jb3VudCwgMVVMKTsKKyAgICBFWFBFQ1RfRVEo
aXRlbXNbMF0udG9rZW5zLmNvdW50LCAzVUwpOworICAgIEVYUEVDVF9TVFJFUSgiaGVsbG8gIiwg
aXRlbXNbMF0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVR
KCJ3b3JsZCIsIGl0ZW1zWzBdLnRva2Vuc1sxXS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIEVY
UEVDVF9TVFJFUSgiIFdlYktpdCIsIGl0ZW1zWzBdLnRva2Vuc1syXS5jb250ZW50LlVURjhTdHJp
bmcpOworCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IF9jb21wbGV0ZVRleHRNYW5p
cHVsYXRpb246KF9XS1RleHRNYW5pcHVsYXRpb25JdGVtICopY3JlYXRlSXRlbShpdGVtc1swXS5p
ZGVudGlmaWVyLCB7CisgICAgICAgIHsgaXRlbXNbMF0udG9rZW5zWzBdLmlkZW50aWZpZXIsIEAi
aGVsbG8gIiB9LAorICAgICAgICB7IGl0ZW1zWzBdLnRva2Vuc1syXS5pZGVudGlmaWVyLCBAIndv
cmxkIiB9LAorICAgIH0pLmdldCgpIGNvbXBsZXRpb246XihCT09MIHN1Y2Nlc3MpIHsKKyAgICAg
ICAgRVhQRUNUX1RSVUUoc3VjY2Vzcyk7CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOwor
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisgICAgRVhQRUNUX1dLX1NUUkVR
KCI8cD48Yj5oZWxsbyB3b3JsZDwvYj48L3A+IiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5n
SmF2YVNjcmlwdDpAImRvY3VtZW50LmJvZHkuaW5uZXJIVE1MIl0pOworfQorCiBURVNUKFRleHRN
YW5pcHVsYXRpb24sIENvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbkZhaWxXaGVuQ29udGVudElzQ2hh
bmdlZCkKIHsKICAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1RleHRNYW5pcHVsYXRpb25E
ZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwpAQCAtNTQwLDYgKzcxNCwzOCBAQCBURVNUKFRleHRNYW5p
cHVsYXRpb24sIENvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbkZhaWxXaGVuQ29udGVudElzQ2hhbmdl
ZCkKICAgICAgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3Vt
ZW50LmJvZHkuaW5uZXJIVE1MIl0pOwogfQogCitURVNUKFRleHRNYW5pcHVsYXRpb24sIENvbXBs
ZXRlVGV4dE1hbmlwdWxhdGlvbkZhaWxXaGVuQ29udGVudElzUmVtb3ZlZCkKK3sKKyAgICBhdXRv
IGRlbGVnYXRlID0gYWRvcHROUyhbW1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5p
dF0pOworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBp
bml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgNDAwLCA0MDApXSk7CisgICAgW3dlYlZpZXcg
X3NldFRleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisKKyAgICBbd2Vi
VmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCI8IURPQ1RZUEUgaHRtbD48aHRtbD48
Ym9keT48cD5oZWxsbywgd29ybGQ8L3A+PC9ib2R5PjwvaHRtbD4iXTsKKworICAgIGRvbmUgPSBm
YWxzZTsKKyAgICBbd2ViVmlldyBfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb25maWd1cmF0
aW9uOm5pbCBjb21wbGV0aW9uOl57CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOworICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICBhdXRvICppdGVtcyA9IFtk
ZWxlZ2F0ZSBpdGVtc107CisgICAgRVhQRUNUX0VRKGl0ZW1zLmNvdW50LCAxVUwpOworICAgIEVY
UEVDVF9FUShpdGVtc1swXS50b2tlbnMuY291bnQsIDFVTCk7CisgICAgRVhQRUNUX1NUUkVRKCJo
ZWxsbywgd29ybGQiLCBpdGVtc1swXS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKKwor
ICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5
LmlubmVySFRNTCA9ICduZXcgY29udGVudCciXTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBb
d2ViVmlldyBfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOihfV0tUZXh0TWFuaXB1bGF0aW9uSXRl
bSAqKWNyZWF0ZUl0ZW0oaXRlbXNbMF0uaWRlbnRpZmllciwgeworICAgICAgICB7IGl0ZW1zWzBd
LnRva2Vuc1swXS5pZGVudGlmaWVyLCBAImhleSIgfSwKKyAgICB9KS5nZXQoKSBjb21wbGV0aW9u
Ol4oQk9PTCBzdWNjZXNzKSB7CisgICAgICAgIEVYUEVDVF9GQUxTRShzdWNjZXNzKTsKKyAgICAg
ICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZk
b25lKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIm5ldyBjb250ZW50IiwgW3dlYlZpZXcgc3RyaW5n
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmJvZHkuaW5uZXJIVE1MIl0pOworfQor
CiBURVNUKFRleHRNYW5pcHVsYXRpb24sIENvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbkZhaWxXaGVu
RG9jdW1lbnRIYXNCZWVuTmF2aWdhdGVkQXdheSkKIHsKICAgICBhdXRvIGRlbGVnYXRlID0gYWRv
cHROUyhbW1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwpAQCAtNTkzLDcg
Kzc5OSw3IEBAIFRFU1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9u
RmFpbFdoZW5FeGNsdXNpb25Jc1Zpb2xhdGVkKQogCiAgICAgUmV0YWluUHRyPF9XS1RleHRNYW5p
cHVsYXRpb25Db25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW19XS1RleHRN
YW5pcHVsYXRpb25Db25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgW2NvbmZpZ3VyYXRp
b24gc2V0RXhjbHVzaW9uUnVsZXM6QFsKLSAgICAgICAgW1tbX1dLVGV4dE1hbmlwdWxhdGlvbkV4
Y2x1c2lvblJ1bGUgYWxsb2NdIGluaXRFeGNsdXNpb246KEJPT0wpWUVTIGZvckVsZW1lbnQ6QCJw
Il0gYXV0b3JlbGVhc2VdLAorICAgICAgICBbW1tfV0tUZXh0TWFuaXB1bGF0aW9uRXhjbHVzaW9u
UnVsZSBhbGxvY10gaW5pdEV4Y2x1c2lvbjooQk9PTClZRVMgZm9yRWxlbWVudDpAImVtIl0gYXV0
b3JlbGVhc2VdLAogICAgIF1dOwogCiAgICAgZG9uZSA9IGZhbHNlOwpAQCAtNjEwLDYgKzgxNiw3
IEBAIFRFU1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uRmFpbFdo
ZW5FeGNsdXNpb25Jc1Zpb2xhdGVkKQogCiAgICAgZG9uZSA9IGZhbHNlOwogICAgIFt3ZWJWaWV3
IF9jb21wbGV0ZVRleHRNYW5pcHVsYXRpb246KF9XS1RleHRNYW5pcHVsYXRpb25JdGVtICopY3Jl
YXRlSXRlbShpdGVtc1swXS5pZGVudGlmaWVyLCB7CisgICAgICAgIHsgaXRlbXNbMF0udG9rZW5z
WzBdLmlkZW50aWZpZXIsIEAiSGVsbG8sIiB9LAogICAgICAgICB7IGl0ZW1zWzBdLnRva2Vuc1sx
XS5pZGVudGlmaWVyLCBAIldlYktpdCIgfSwKICAgICB9KS5nZXQoKSBjb21wbGV0aW9uOl4oQk9P
TCBzdWNjZXNzKSB7CiAgICAgICAgIEVYUEVDVF9GQUxTRShzdWNjZXNzKTsKQEAgLTYyMCw2ICs4
MjcsODQgQEAgVEVTVChUZXh0TWFuaXB1bGF0aW9uLCBDb21wbGV0ZVRleHRNYW5pcHVsYXRpb25G
YWlsV2hlbkV4Y2x1c2lvbklzVmlvbGF0ZWQpCiAgICAgRVhQRUNUX1dLX1NUUkVRKCI8cD5oaSwg
PGVtPldlYktpdHRlbjwvZW0+PC9wPiIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFT
Y3JpcHQ6QCJkb2N1bWVudC5ib2R5LmlubmVySFRNTCJdKTsKIH0KIAorVEVTVChUZXh0TWFuaXB1
bGF0aW9uLCBDb21wbGV0ZVRleHRNYW5pcHVsYXRpb25GYWlsV2hlbkV4Y2x1ZGVkQ29udGVudEFw
cGVhcnNNb3JlVGhhbk9uY2UpCit7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXh0
TWFuaXB1bGF0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIHdlYlZpZXcgPSBh
ZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAs
IDAsIDQwMCwgNDAwKV0pOworICAgIFt3ZWJWaWV3IF9zZXRUZXh0TWFuaXB1bGF0aW9uRGVsZWdh
dGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0
UGFnZU5hbWVkOkAic2ltcGxlIl07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2
YVNjcmlwdDpAImRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gJzxwPmhpLCA8ZW0+V2ViS2l0dGVu
PC9lbT48L3A+JyJdOworCisgICAgUmV0YWluUHRyPF9XS1RleHRNYW5pcHVsYXRpb25Db25maWd1
cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW19XS1RleHRNYW5pcHVsYXRpb25Db25m
aWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CisgICAgW2NvbmZpZ3VyYXRpb24gc2V0RXhjbHVzaW9u
UnVsZXM6QFsKKyAgICAgICAgW1tbX1dLVGV4dE1hbmlwdWxhdGlvbkV4Y2x1c2lvblJ1bGUgYWxs
b2NdIGluaXRFeGNsdXNpb246KEJPT0wpWUVTIGZvckVsZW1lbnQ6QCJlbSJdIGF1dG9yZWxlYXNl
XSwKKyAgICBdXTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBfc3RhcnRUZXh0
TWFuaXB1bGF0aW9uc1dpdGhDb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCkgY29tcGxl
dGlvbjpeeworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJmRvbmUpOworCisgICAgYXV0byAqaXRlbXMgPSBbZGVsZWdhdGUgaXRlbXNd
OworICAgIEVYUEVDVF9FUShpdGVtcy5jb3VudCwgMVVMKTsKKyAgICBFWFBFQ1RfRVEoaXRlbXNb
MF0udG9rZW5zLmNvdW50LCAyVUwpOworICAgIEVYUEVDVF9TVFJFUSgiaGksICIsIGl0ZW1zWzBd
LnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9TVFJFUSgiV2ViS2l0
dGVuIiwgaXRlbXNbMF0udG9rZW5zWzFdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisKKyAgICBkb25l
ID0gZmFsc2U7CisgICAgW3dlYlZpZXcgX2NvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbjooX1dLVGV4
dE1hbmlwdWxhdGlvbkl0ZW0gKiljcmVhdGVJdGVtKGl0ZW1zWzBdLmlkZW50aWZpZXIsIHsKKyAg
ICAgICAgeyBpdGVtc1swXS50b2tlbnNbMV0uaWRlbnRpZmllciwgbmlsIH0sCisgICAgICAgIHsg
aXRlbXNbMF0udG9rZW5zWzBdLmlkZW50aWZpZXIsIEAiSGVsbG8sIiB9LAorICAgICAgICB7IGl0
ZW1zWzBdLnRva2Vuc1sxXS5pZGVudGlmaWVyLCBuaWwgfSwKKyAgICB9KS5nZXQoKSBjb21wbGV0
aW9uOl4oQk9PTCBzdWNjZXNzKSB7CisgICAgICAgIEVYUEVDVF9GQUxTRShzdWNjZXNzKTsKKyAg
ICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJmRvbmUpOworICAgIEVYUEVDVF9XS19TVFJFUSgiPHA+aGksIDxlbT5XZWJLaXR0ZW48L2Vt
PjwvcD4iLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQu
Ym9keS5pbm5lckhUTUwiXSk7Cit9CisKK1RFU1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxldGVU
ZXh0TWFuaXB1bGF0aW9uUHJlc2VydmVzRXhjbHVkZWRDb250ZW50KQoreworICAgIGF1dG8gZGVs
ZWdhdGUgPSBhZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7
CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA0MDAsIDQwMCldKTsKKyAgICBbd2ViVmlldyBfc2V0
VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIFt3ZWJWaWV3
IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjwhRE9DVFlQRSBodG1sPjxodG1sPjxib2R5
PjxwPmhpLCA8ZW0+V2ViS2l0dGVuPC9lbT48L3A+PC9ib2R5PjwvaHRtbD4iXTsKKworICAgIFJl
dGFpblB0cjxfV0tUZXh0TWFuaXB1bGF0aW9uQ29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9
IGFkb3B0TlMoW1tfV0tUZXh0TWFuaXB1bGF0aW9uQ29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0p
OworICAgIFtjb25maWd1cmF0aW9uIHNldEV4Y2x1c2lvblJ1bGVzOkBbCisgICAgICAgIFtbW19X
S1RleHRNYW5pcHVsYXRpb25FeGNsdXNpb25SdWxlIGFsbG9jXSBpbml0RXhjbHVzaW9uOihCT09M
KVlFUyBmb3JFbGVtZW50OkAiZW0iXSBhdXRvcmVsZWFzZV0sCisgICAgXV07CisKKyAgICBkb25l
ID0gZmFsc2U7CisgICAgW3dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29uZmln
dXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpIGNvbXBsZXRpb246XnsKKyAgICAgICAgZG9uZSA9
IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKwor
ICAgIGF1dG8gKml0ZW1zID0gW2RlbGVnYXRlIGl0ZW1zXTsKKyAgICBFWFBFQ1RfRVEoaXRlbXMu
Y291bnQsIDFVTCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zWzBdLnRva2Vucy5jb3VudCwgMlVMKTsK
KyAgICBFWFBFQ1RfU1RSRVEoImhpLCAiLCBpdGVtc1swXS50b2tlbnNbMF0uY29udGVudC5VVEY4
U3RyaW5nKTsKKyAgICBFWFBFQ1RfU1RSRVEoIldlYktpdHRlbiIsIGl0ZW1zWzBdLnRva2Vuc1sx
XS5jb250ZW50LlVURjhTdHJpbmcpOworCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3
IF9jb21wbGV0ZVRleHRNYW5pcHVsYXRpb246KF9XS1RleHRNYW5pcHVsYXRpb25JdGVtICopY3Jl
YXRlSXRlbShpdGVtc1swXS5pZGVudGlmaWVyLCB7CisgICAgICAgIHsgaXRlbXNbMF0udG9rZW5z
WzBdLmlkZW50aWZpZXIsIEAiSGVsbG8sICIgfSwKKyAgICAgICAgeyBpdGVtc1swXS50b2tlbnNb
MV0uaWRlbnRpZmllciwgbmlsIH0sCisgICAgfSkuZ2V0KCkgY29tcGxldGlvbjpeKEJPT0wgc3Vj
Y2VzcykgeworICAgICAgICBFWFBFQ1RfVFJVRShzdWNjZXNzKTsKKyAgICAgICAgZG9uZSA9IHRy
dWU7CisgICAgfV07CisKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworICAg
IEVYUEVDVF9XS19TVFJFUSgiPHA+SGVsbG8sIDxlbT5XZWJLaXR0ZW48L2VtPjwvcD4iLCBbd2Vi
VmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5pbm5lckhU
TUwiXSk7Cit9CisKIFRFU1QoVGV4dE1hbmlwdWxhdGlvbiwgVGV4dE1hbmlwdWxhdGlvblRva2Vu
RGVidWdEZXNjcmlwdGlvbikKIHsKICAgICBhdXRvIHRva2VuID0gYWRvcHROUyhbW19XS1RleHRN
YW5pcHVsYXRpb25Ub2tlbiBhbGxvY10gaW5pdF0pOwo=
</data>
<flag name="review"
          id="402091"
          type_id="1"
          status="+"
          setter="wenson_hsieh"
    />
          </attachment>
      

    </bug>

</bugzilla>