<?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>12234</bug_id>
          
          <creation_ts>2007-01-12 14:04:36 -0800</creation_ts>
          <short_desc>Using createContextualFragment to insert a &lt;script&gt; does not cause the script to execute</short_desc>
          <delta_ts>2012-05-23 18:46:52 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://dscoder.com/MessageStyle/testcase.html</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="David Smith">catfish.man</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>hsivonen</cc>
    
    <cc>martingrigorov</cc>
    
    <cc>mitz</cc>
    
    <cc>rniwa</cc>
    
    <cc>tonyg</cc>
    
    <cc>webkit-bugzilla15a</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>35327</commentid>
    <comment_count>0</comment_count>
    <who name="David Smith">catfish.man</who>
    <bug_when>2007-01-12 14:04:36 -0800</bug_when>
    <thetext>The testcase url creates an document fragment from an html string containing a script element, but the script is not actually run. Firefox runs the script as expected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>35322</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-01-12 14:18:09 -0800</bug_when>
    <thetext>A similar case:

document.body.innerHTML+=&quot;&lt;script&gt;alert(&apos;SUCCESS&apos;)&lt;/script&gt;&quot;

May or may not need or may already have a separate bug for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231024</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-26 17:58:30 -0700</bug_when>
    <thetext>This might get fixed by accident as part of bug 39259 when we get to fragment parsing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296151</commentid>
    <comment_count>3</comment_count>
    <who name="Henri Sivonen">hsivonen</who>
    <bug_when>2010-10-19 06:44:50 -0700</bug_when>
    <thetext>Was this bug report motivated by breakage on a real-world site?

Compare with https://bugzilla.mozilla.org/show_bug.cgi?id=599588</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296235</commentid>
    <comment_count>4</comment_count>
    <who name="David Smith">catfish.man</who>
    <bug_when>2010-10-19 09:42:06 -0700</bug_when>
    <thetext>Yes, it was. I worked around it for release though (and then the product was killed shortly afterwards).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296688</commentid>
    <comment_count>5</comment_count>
    <who name="Henri Sivonen">hsivonen</who>
    <bug_when>2010-10-20 00:52:22 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Yes, it was. I worked around it for release though (and then the product was killed shortly afterwards).

What was the use case you had? Note that if WebKit made createContextualFragment create fragments with executable scripts, inserting the fragments to the document wouldn&apos;t guarantee the execution order between external scripts or between external and internal scripts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307813</commentid>
    <comment_count>6</comment_count>
    <who name="Henri Sivonen">hsivonen</who>
    <bug_when>2010-11-11 03:36:18 -0800</bug_when>
    <thetext>FWIW, we explicitly decided to make these executable in Firefox 4.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308229</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-11 15:49:54 -0800</bug_when>
    <thetext>Is this a regression from the HTML5 parser re-write?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308250</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-11 16:22:51 -0800</bug_when>
    <thetext>I talked with Eric about this and it seems like HTML5 spec intentionally prohibits the script elements coming from the fragments to run.

See http://www.whatwg.org/specs/web-apps/current-work/#parsing-main-inhead where it says:

If the parser was originally created for the HTML fragment parsing algorithm, then mark the script element as &quot;already started&quot;. (fragment case)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308381</commentid>
    <comment_count>9</comment_count>
    <who name="Henri Sivonen">hsivonen</who>
    <bug_when>2010-11-11 22:29:26 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; I talked with Eric about this and it seems like HTML5 spec intentionally prohibits the script elements coming from the fragments to run.

Yes, but http://www.w3.org/Bugs/Public/show_bug.cgi?id=11191</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314138</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-27 09:37:53 -0800</bug_when>
    <thetext>I&apos;m concerned about security implication of enabling scripts.  I can&apos;t convince myself that there aren&apos;t any websites that rely on the fact WebKit does not execute scripts coming from createContextualFragment.  

While not running scripts expected to run will break the websites, running scripts not expected to run will create a XSS security vulnerability.

I do understand that a fragment created by createContextualFragment is no different than the fragment created by other means and Firefox folks want WebKit to be compatible with Firefox, however, I would avoid the risk of creating a XSS vulnerability at all cost.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314440</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-11-29 08:45:08 -0800</bug_when>
    <thetext>rniwa, thanks for being sensitive to creating XSS vulnerabilities.  However, in this case, we&apos;re not opening up a new vulnerability.  The attacker can already use other syntactic constructs to execute script, similar to how the attacker can run script via innerHTML even though innerHTML doesn&apos;t execute &lt;script&gt; tags.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314742</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-29 17:05:31 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; rniwa, thanks for being sensitive to creating XSS vulnerabilities.  However, in this case, we&apos;re not opening up a new vulnerability.  The attacker can already use other syntactic constructs to execute script, similar to how the attacker can run script via innerHTML even though innerHTML doesn&apos;t execute &lt;script&gt; tags.

Ok.  Then we probably should fix this bug to be compatible with Firefox.  Special-casing fragment parsing first seemed strange weird but a number of developers pointed out that the fragment created by createContextualFragment is no different from a fragment created by manually assembling nodes.  And because the script element manually inserted into a fragment runs when the fragment is inserted into a document, we should also run the script parsed by createContextualFragment when the fragment is inserted into a document.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>627830</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-18 11:13:00 -0700</bug_when>
    <thetext>Per whatwg discussion, we should fix this bug: http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2011-February/030351.html

Also see the bug 86376.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628535</commentid>
    <comment_count>14</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-19 20:06:03 -0700</bug_when>
    <thetext>Note there appears to be a bug in the spec: http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-May/036088.html

I&apos;m going to post a patch based on my assumption that we should be clearing both parser inserted and already started flags in createContextualFragment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628536</commentid>
    <comment_count>15</comment_count>
      <attachid>142890</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-19 20:06:10 -0700</bug_when>
    <thetext>Created attachment 142890
Fixes the bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628537</commentid>
    <comment_count>16</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-19 20:08:34 -0700</bug_when>
    <thetext>I can separate the enum rename if reviewers wanted but I didn&apos;t feel a need for this simple refactoring other than to boost the number of patches I&apos;m going to commit :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628747</commentid>
    <comment_count>17</comment_count>
      <attachid>142890</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-05-20 21:05:02 -0700</bug_when>
    <thetext>Comment on attachment 142890
Fixes the bug

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

ok

&gt; Source/WebCore/html/parser/HTMLConstructionSite.cpp:340
&gt; +    // For createContextualFragment, the specifications say to mark it parser-inserted and already-started and later unmark them.
&gt; +    // However, we short circuit that logic to avoid the subtree traversal to find script elements since scripts can never see
&gt; +    // those flags or effects thereof

Thanks for adding this comment.  Can we add a link to the spec?  We like to do that in the parser because we track the spec so closely.  (nit: please add a . at the end of the sentence.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628765</commentid>
    <comment_count>18</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-20 22:02:59 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; &gt; Source/WebCore/html/parser/HTMLConstructionSite.cpp:340
&gt; &gt; +    // For createContextualFragment, the specifications say to mark it parser-inserted and already-started and later unmark them.
&gt; &gt; +    // However, we short circuit that logic to avoid the subtree traversal to find script elements since scripts can never see
&gt; &gt; +    // those flags or effects thereof
&gt; 
&gt; Thanks for adding this comment.  Can we add a link to the spec?  We like to do that in the parser because we track the spec so closely.  (nit: please add a . at the end of the sentence.)

Would http://html5.org/specs/dom-parsing.html#dom-range-createcontextualfragment work?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628768</commentid>
    <comment_count>19</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-05-20 22:06:09 -0700</bug_when>
    <thetext>Yeah, perfect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628796</commentid>
    <comment_count>20</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-20 23:10:08 -0700</bug_when>
    <thetext>Committed r117731: &lt;http://trac.webkit.org/changeset/117731&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>632296</commentid>
    <comment_count>21</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-23 18:46:52 -0700</bug_when>
    <thetext>*** Bug 64860 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>142890</attachid>
            <date>2012-05-19 20:06:10 -0700</date>
            <delta_ts>2012-05-20 21:05:02 -0700</delta_ts>
            <desc>Fixes the bug</desc>
            <filename>bug-12234-20120519200928.patch</filename>
            <type>text/plain</type>
            <size>34907</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNzcwNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBACisyMDEyLTA1LTE5ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFVzaW5nIGNyZWF0ZUNvbnRleHR1
YWxGcmFnbWVudCB0byBpbnNlcnQgYSA8c2NyaXB0PiBkb2VzIG5vdCBjYXVzZSB0aGUgc2NyaXB0
IHRvIGV4ZWN1dGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEyMjM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgUmVuYW1lZCBGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQgYW5kIEZyYWdtZW50U2NyaXB0aW5n
Tm90QWxsb3dlZCB0byBEaXNhbGxvd1NjcmlwdGluZ0NvbnRlbnQKKyAgICAgICAgYW5kIEFsbG93
U2NyaXB0aW5nQ29udGVudCBhcyB0aGVzZSB0d28gZmxhZ3MgYXJlIHVzZWQgaW4gY29kZSBmb3Ig
bm9uLWZyYWdtZW50IGNhc2VzIGFuZCB0aGV5CisgICAgICAgIGluZGljYXRlIHdoZXRoZXIgYXR0
cmlidXRlcyBhbmQgZWxlbWVudHMgdGhhdCBjYW4gaW52b2tlIHNjcmlwdGluZyBzaG91bGQgYmUg
cmVtb3ZlZCBvciBub3QuCisKKyAgICAgICAgVG8gZml4IHRoZSBidWcsIGFkZGVkIGEgbmV3IHZh
bHVlIEFsbG93U2NyaXB0aW5nQ29udGVudEFuZERvTm90TWFya0FscmVhZHlTdGFydGVkIHVuc2V0
CisgICAgICAgIGFscmVhZHktc3RhcnRlZCBhbmQgcGFyc2VyLWluc2VydGVkIGZsYWdzIFsxXSBv
biBzY3JpcHQgZWxlbWVudHMgaW4gYWRkaXRpb24gdG8gYWxsb3dpbmcKKyAgICAgICAgc2NyaXB0
aW5nIGNvbnRlbnRzLgorCisgICAgICAgIFdoaWxlIHRoZSBIVE1MNSBzcGVjaWZpY2F0aW9uIGFu
ZCB0aGUgRE9NIFBhcnNpbmcgYW5kIFNlcmlhbGl6YXRpb24gc3BlY2lmaWNhdGlvbiBbMl0gc3Rh
dGUgdGhhdAorICAgICAgICB3ZSBzaG91bGQgc2V0IHRoZXNlIGZsYWdzIGluIHRoZSBwYXJzZXIg
YW5kIGxhdGVyIHVuc2V0IHRoZW0sIGRvaW5nIHNvIHdvdWxkIHJlcXVpcmUgdHJhdmVyc2luZwor
ICAgICAgICB0aGUgcGFyc2VkIGZyYWdtZW50IHRvIGZpbmQgcmVsZXZhbnQgc2NyaXB0IGVsZW1l
bnRzLiBXZSBzaG9ydCBjaXJjdWl0IHRoaXMgbG9naWMgYnkgc2ltcGx5IG5vdAorICAgICAgICBz
ZXR0aW5nIHBhcnNlci1pbnNlcnRlZCBhbmQgYWxyZWFkeS1zdGFydGVkIGZsYWdzIGluIGNyZWF0
ZUNvbnRleHR1YWxGcmFnbWVudC4KKworICAgICAgICBbMV0gaHR0cDovL3d3dy53aGF0d2cub3Jn
L3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2Uvc2NyaXB0aW5nLTEuaHRtbCNh
bHJlYWR5LXN0YXJ0ZWQKKyAgICAgICAgWzJdIGh0dHA6Ly9odG1sNS5vcmcvc3BlY3MvZG9tLXBh
cnNpbmcuaHRtbCNkb20tcmFuZ2UtY3JlYXRlY29udGV4dHVhbGZyYWdtZW50CisKKyAgICAgICAg
VGVzdHM6IGZhc3QvZG9tL1JhbmdlL2NyZWF0ZS1jb250ZXh0dWFsLWZyYWdtZW50LXNjcmlwdC1u
b3QtcmFuLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZG9tL1JhbmdlL2NyZWF0ZS1jb250ZXh0
dWFsLWZyYWdtZW50LXNjcmlwdC11bm1hcmstYWxyZWFkeS1zdGFydGVkLmh0bWwKKworICAgICAg
ICAqIGRvbS9Eb2N1bWVudEZyYWdtZW50Lmg6CisgICAgICAgIChEb2N1bWVudEZyYWdtZW50KToK
KyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpw
YXJzZXJTZXRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldEF0dHJp
YnV0ZU5TKToKKyAgICAgICAgKiBkb20vRWxlbWVudC5oOgorICAgICAgICAoRWxlbWVudCk6Cisg
ICAgICAgICogZG9tL0ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbi5oOgorICAgICAgICAqIGRv
bS9SYW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Y3JlYXRlQ29udGV4dHVhbEZy
YWdtZW50KTogUmVtb3ZlZCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gZnJvbSB0aGUgYXJn
dW1lbnQKKyAgICAgICAgbGlzdCBzaW5jZSBubyBvbmUgdXNlcyBpdC4gQWx3YXlzIHVzZSBBbGxv
d1NjcmlwdGluZ0NvbnRlbnRBbmREb05vdE1hcmtBbHJlYWR5U3RhcnRlZCBpbnN0ZWFkLgorICAg
ICAgICAqIGRvbS9SYW5nZS5oOgorICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmg6CisgICAgICAg
ICogaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRTY3JpcHRFbGVtZW50KTogUGFz
cyBmYWxzZSB0byBib3RoIHBhcnNlckluc2VydGVkIGFuZAorICAgICAgICBhbHJlYWR5U3RhcnRl
ZCB3aGVuIHRoZSBzY3JpcHRpbmcgcGVybWlzc2lvbiBpcyBBbGxvd1NjcmlwdGluZ0NvbnRlbnRB
bmREb05vdE1hcmtBbHJlYWR5U3RhcnRlZC4KKyAgICAgICAgQWxzbyBjYWxsIHBhcnNlclNldEF0
dHJpYnV0ZXMgd2hlbiB0aGUgc2NyaXB0aW5nIHBlcm1pc3Npb24gaXMgZWl0aGVyIEFsbG93U2Ny
aXB0aW5nQ29udGVudCBvcgorICAgICAgICBBbGxvd1NjcmlwdGluZ0NvbnRlbnRBbmREb05vdE1h
cmtBbHJlYWR5U3RhcnRlZC4KKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJz
ZXIuaDoKKyAgICAgICAgKEhUTUxEb2N1bWVudFBhcnNlcik6CisgICAgICAgICogaHRtbC9wYXJz
ZXIvSFRNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRl
cjo6RnJhZ21lbnRQYXJzaW5nQ29udGV4dDo6RnJhZ21lbnRQYXJzaW5nQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcpOgorICAgICAgICAq
IGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oOgorICAgICAgICAoRnJhZ21lbnRQYXJzaW5n
Q29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vYmxhY2tiZXJyeS9QYXN0ZWJvYXJkQmxhY2tC
ZXJyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpkb2N1bWVudEZyYWdtZW50
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YUNocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjphc0ZyYWdtZW50KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9jaHJvbWl1bS9QYXN0ZWJvYXJkQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFz
dGVib2FyZDo6ZG9jdW1lbnRGcmFnbWVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Bhc3Rl
Ym9hcmRHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6ZG9jdW1lbnRGcmFn
bWVudCk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW06CisgICAgICAg
IChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpkb2N1bWVudEZyYWdtZW50KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9xdC9EcmFnRGF0YVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjphc0Zy
YWdtZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9QYXN0ZWJvYXJkUXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6ZG9jdW1lbnRGcmFnbWVudCk6CisgICAgICAgICogcGxh
dGZvcm0vd2luL0NsaXBib2FyZFV0aWxpdGllc1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpm
cmFnbWVudEZyb21DRkhUTUwpOgorICAgICAgICAoV2ViQ29yZTo6ZnJhZ21lbnRGcm9tSFRNTCk6
CisgICAgICAgICogeG1sL1hNTEVycm9ycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVY
SFRNTFBhcnNlckVycm9ySGVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEVycm9yczo6aW5z
ZXJ0RXJyb3JNZXNzYWdlQmxvY2spOgorICAgICAgICAqIHhtbC9wYXJzZXIvTmV3WE1MRG9jdW1l
bnRQYXJzZXIuaDoKKyAgICAgICAgKE5ld1hNTERvY3VtZW50UGFyc2VyKToKKyAgICAgICAgKiB4
bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmg6CisgICAgICAgIChYTUxEb2N1bWVudFBhcnNl
cik6CisgICAgICAgICogeG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKToK
KyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjplbmRFbGVtZW50TnMpOgorICAg
ICAgICAqIHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlRW5kRWxlbWVudCk6CisKIDIwMTItMDUtMTkg
IEVtaWwgQSBFa2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFNpbXBsaWZ5IFJl
bmRlck92ZXJmbG93IGJ5IHVzaW5nIFJlY3RzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnRGcmFnbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dEZyYWdtZW50LmgJKHJldmlzaW9uIDExNzY4NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudEZyYWdtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDggKzMzLDggQEAgY2xhc3MgRG9j
dW1lbnRGcmFnbWVudCA6IHB1YmxpYyBDb250YWluZQogcHVibGljOgogICAgIHN0YXRpYyBQYXNz
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZShEb2N1bWVudCopOwogCi0gICAgdm9pZCBw
YXJzZUhUTUwoY29uc3QgU3RyaW5nJiwgRWxlbWVudCogY29udGV4dEVsZW1lbnQsIEZyYWdtZW50
U2NyaXB0aW5nUGVybWlzc2lvbiA9IEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCk7Ci0gICAgYm9v
bCBwYXJzZVhNTChjb25zdCBTdHJpbmcmLCBFbGVtZW50KiBjb250ZXh0RWxlbWVudCwgRnJhZ21l
bnRTY3JpcHRpbmdQZXJtaXNzaW9uID0gRnJhZ21lbnRTY3JpcHRpbmdBbGxvd2VkKTsKKyAgICB2
b2lkIHBhcnNlSFRNTChjb25zdCBTdHJpbmcmLCBFbGVtZW50KiBjb250ZXh0RWxlbWVudCwgRnJh
Z21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uID0gQWxsb3dTY3JpcHRpbmdDb250ZW50KTsKKyAgICBi
b29sIHBhcnNlWE1MKGNvbnN0IFN0cmluZyYsIEVsZW1lbnQqIGNvbnRleHRFbGVtZW50LCBGcmFn
bWVudFNjcmlwdGluZ1Blcm1pc3Npb24gPSBBbGxvd1NjcmlwdGluZ0NvbnRlbnQpOwogICAgIAog
ICAgIHZpcnR1YWwgYm9vbCBjYW5Db250YWluUmFuZ2VFbmRQb2ludCgpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24gMTE3Njg3KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nzcs
NyArNzc3LDcgQEAgdm9pZCBFbGVtZW50OjpwYXJzZXJTZXRBdHRyaWJ1dGVzKGNvbnN0IAogCiAg
ICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgY3JlYXRlZCBhcyByZXN1bHQgb2YgYSBwYXN0ZSBvciBk
cmFnLW4tZHJvcCBvcGVyYXRpb24KICAgICAvLyB3ZSB3YW50IHRvIHJlbW92ZSBhbGwgdGhlIHNj
cmlwdCBhbmQgZXZlbnQgaGFuZGxlcnMuCi0gICAgaWYgKHNjcmlwdGluZ1Blcm1pc3Npb24gPT0g
RnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2VkKSB7CisgICAgaWYgKHNjcmlwdGluZ1Blcm1pc3Np
b24gPT0gRGlzYWxsb3dTY3JpcHRpbmdDb250ZW50KSB7CiAgICAgICAgIHVuc2lnbmVkIGkgPSAw
OwogICAgICAgICB3aGlsZSAoaSA8IG1fYXR0cmlidXRlRGF0YS0+bGVuZ3RoKCkpIHsKICAgICAg
ICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUgPSBtX2F0dHJpYnV0ZURh
dGEtPm1fYXR0cmlidXRlc1tpXS5uYW1lKCk7CkBAIC0xNDYwLDcgKzE0NjAsNyBAQCB2b2lkIEVs
ZW1lbnQ6OnNldEF0dHJpYnV0ZU5TKGNvbnN0IEF0b21pCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBpZiAoc2NyaXB0aW5nUGVybWlzc2lvbiA9PSBGcmFnbWVudFNjcmlwdGluZ05vdEFs
bG93ZWQgJiYgKGlzRXZlbnRIYW5kbGVyQXR0cmlidXRlKHFOYW1lKSB8fCBpc0F0dHJpYnV0ZVRv
UmVtb3ZlKHFOYW1lLCB2YWx1ZSkpKQorICAgIGlmIChzY3JpcHRpbmdQZXJtaXNzaW9uID09IERp
c2FsbG93U2NyaXB0aW5nQ29udGVudCAmJiAoaXNFdmVudEhhbmRsZXJBdHRyaWJ1dGUocU5hbWUp
IHx8IGlzQXR0cmlidXRlVG9SZW1vdmUocU5hbWUsIHZhbHVlKSkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIHNldEF0dHJpYnV0ZShxTmFtZSwgdmFsdWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5o
CShyZXZpc2lvbiAxMTc2ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDYsNyArMTQ2LDcgQEAgcHVibGljOgogICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgZ2V0QXR0cmlidXRlTlMoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0
cmluZyYgbG9jYWxOYW1lKSBjb25zdDsKIAogICAgIHZvaWQgc2V0QXR0cmlidXRlKGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIHZvaWQgc2V0QXR0cmlidXRlTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3Bh
Y2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgcXVhbGlmaWVkTmFtZSwgY29uc3QgQXRvbWljU3Ry
aW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiA9
IEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCk7CisgICAgdm9pZCBzZXRBdHRyaWJ1dGVOUyhjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgQXRvbWljU3RyaW5nJiBxdWFsaWZp
ZWROYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiwgRnJhZ21l
bnRTY3JpcHRpbmdQZXJtaXNzaW9uID0gQWxsb3dTY3JpcHRpbmdDb250ZW50KTsKIAogICAgIGJv
b2wgaXNJZEF0dHJpYnV0ZU5hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OwogICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgZ2V0SWRBdHRyaWJ1dGUoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9GcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uLmgJKHJldmlzaW9u
IDExNzY4NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9GcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Np
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMzEsOCArMzEsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAvLyBGSVhNRTogVGhpcyBlbnVtIGlzIHBvb3JseSBuYW1lZC4gIEl0IGlzIHVzZWQgdG8gcmVt
b3ZlIHNjcmlwdCBjb250ZW50cyB3aGVuCiAvLyBnZW5lcmF0aW5nIERvY3VtZW50RnJhZ21lbnRz
IGZvciBwYXN0ZSBpbiBwbGF0Zm9ybS8qL1Bhc3RlYm9hcmQuKi4KIGVudW0gRnJhZ21lbnRTY3Jp
cHRpbmdQZXJtaXNzaW9uIHsKLSAgICBGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQsCi0gICAgRnJh
Z21lbnRTY3JpcHRpbmdOb3RBbGxvd2VkLAorICAgIERpc2FsbG93U2NyaXB0aW5nQ29udGVudCwK
KyAgICBBbGxvd1NjcmlwdGluZ0NvbnRlbnQsCisgICAgQWxsb3dTY3JpcHRpbmdDb250ZW50QW5k
RG9Ob3RNYXJrQWxyZWFkeVN0YXJ0ZWQsCiB9OwogCiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL1JhbmdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3Bw
CShyZXZpc2lvbiAxMTc2ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTYyLDcgKzExNjIsNyBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IFJhbmdlOjpjcmVhCiAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKIH0KIAotUGFz
c1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBSYW5nZTo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50
KGNvbnN0IFN0cmluZyYgbWFya3VwLCBFeGNlcHRpb25Db2RlJiBlYywgRnJhZ21lbnRTY3JpcHRp
bmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCitQYXNzUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+IFJhbmdlOjpjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoY29uc3QgU3RyaW5nJiBtYXJr
dXAsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmICghbV9zdGFydC5jb250YWluZXIoKSkg
ewogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwpAQCAtMTE3NSw3ICsxMTc1LDcgQEAg
UGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBSYW5nZTo6Y3JlYQogICAgICAgICByZXR1cm4g
MDsKICAgICB9CiAKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVh
dGVEb2N1bWVudEZyYWdtZW50Rm9yRWxlbWVudChtYXJrdXAsIHRvRWxlbWVudChlbGVtZW50KSwg
c2NyaXB0aW5nUGVybWlzc2lvbik7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdt
ZW50ID0gY3JlYXRlRG9jdW1lbnRGcmFnbWVudEZvckVsZW1lbnQobWFya3VwLCB0b0VsZW1lbnQo
ZWxlbWVudCksIEFsbG93U2NyaXB0aW5nQ29udGVudEFuZERvTm90TWFya0FscmVhZHlTdGFydGVk
KTsKIAogICAgIGlmICghZnJhZ21lbnQpIHsKICAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VS
UjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9SYW5nZS5oCShyZXZpc2lvbiAxMTc2ODcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vUmFuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtODksOCArODksOCBAQCBwdWJsaWM6CiAg
ICAgU3RyaW5nIHRvSFRNTCgpIGNvbnN0OwogICAgIFN0cmluZyB0ZXh0KCkgY29uc3Q7CiAKLSAg
ICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChj
b25zdCBTdHJpbmcmIGh0bWwsIEV4Y2VwdGlvbkNvZGUmLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1p
c3Npb24gPSBGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZURvY3VtZW50RnJhZ21lbnRGb3JFbGVtZW50KGNvbnN0
IFN0cmluZyYgbWFya3VwLCBFbGVtZW50KiwgIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiA9
IEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCk7CisgICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiBjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoY29uc3QgU3RyaW5nJiBodG1sLCBFeGNlcHRp
b25Db2RlJik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRl
RG9jdW1lbnRGcmFnbWVudEZvckVsZW1lbnQoY29uc3QgU3RyaW5nJiBtYXJrdXAsIEVsZW1lbnQq
LCAgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uID0gQWxsb3dTY3JpcHRpbmdDb250ZW50KTsK
IAogICAgIHZvaWQgZGV0YWNoKEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPFJhbmdl
PiBjbG9uZVJhbmdlKEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbWFya3VwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9t
YXJrdXAuaAkocmV2aXNpb24gMTE3Njg3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJr
dXAuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgZW51bSBFQWJzb2x1dGVVUkxzIHsgRG9Ob3RSZXNvbHZlVVJMcywgUmVzb2x2ZUFsbFVS
THMsIFJlc29sdmVOb25Mb2NhbFVSTHMgfTsKIAogICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFn
bWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChSYW5nZSogY29udGV4dCwgY29uc3QgU3RyaW5n
JiB0ZXh0KTsKLSAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50
RnJvbU1hcmt1cChEb2N1bWVudCosIGNvbnN0IFN0cmluZyYgbWFya3VwLCBjb25zdCBTdHJpbmcm
IGJhc2VVUkwsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiA9IEZyYWdtZW50U2NyaXB0aW5n
QWxsb3dlZCk7CisgICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVu
dEZyb21NYXJrdXAoRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmIG1hcmt1cCwgY29uc3QgU3RyaW5n
JiBiYXNlVVJMLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gPSBBbGxvd1NjcmlwdGluZ0Nv
bnRlbnQpOwogICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRG
cm9tTWFya3VwV2l0aENvbnRleHQoRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmIG1hcmt1cCwgdW5z
aWduZWQgZnJhZ21lbnRTdGFydCwgdW5zaWduZWQgZnJhZ21lbnRFbmQsIGNvbnN0IFN0cmluZyYg
YmFzZVVSTCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKTsKICAgICBQYXNzUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbU5vZGVzKERvY3VtZW50KiwgY29uc3Qg
VmVjdG9yPE5vZGUqPiYpOwogICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRl
RnJhZ21lbnRGcm9tU291cmNlKGNvbnN0IFN0cmluZyYsIEVsZW1lbnQqLCBFeGNlcHRpb25Db2Rl
Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0
cnVjdGlvblNpdGUuY3BwCShyZXZpc2lvbiAxMTc2ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw3
ICsxNDUsNyBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpleGVjdXRlUXVldWVkCiBIVE1M
Q29uc3RydWN0aW9uU2l0ZTo6SFRNTENvbnN0cnVjdGlvblNpdGUoRG9jdW1lbnQqIGRvY3VtZW50
LCB1bnNpZ25lZCBtYXhpbXVtRE9NVHJlZURlcHRoKQogICAgIDogbV9kb2N1bWVudChkb2N1bWVu
dCkKICAgICAsIG1fYXR0YWNobWVudFJvb3QoZG9jdW1lbnQpCi0gICAgLCBtX2ZyYWdtZW50U2Ny
aXB0aW5nUGVybWlzc2lvbihGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpCisgICAgLCBtX2ZyYWdt
ZW50U2NyaXB0aW5nUGVybWlzc2lvbihBbGxvd1NjcmlwdGluZ0NvbnRlbnQpCiAgICAgLCBtX2lz
UGFyc2luZ0ZyYWdtZW50KGZhbHNlKQogICAgICwgbV9yZWRpcmVjdEF0dGFjaFRvRm9zdGVyUGFy
ZW50KGZhbHNlKQogICAgICwgbV9tYXhpbXVtRE9NVHJlZURlcHRoKG1heGltdW1ET01UcmVlRGVw
dGgpCkBAIC0zMzUsOCArMzM1LDEzIEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2Vy
dEZvcm1hdHQKIAogdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0U2NyaXB0RWxlbWVu
dChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewotICAgIFJlZlB0cjxIVE1MU2NyaXB0RWxlbWVu
dD4gZWxlbWVudCA9IEhUTUxTY3JpcHRFbGVtZW50OjpjcmVhdGUoc2NyaXB0VGFnLCBjdXJyZW50
Tm9kZSgpLT5kb2N1bWVudCgpLCB0cnVlLCBtX2lzUGFyc2luZ0ZyYWdtZW50KTsKLSAgICBpZiAo
bV9mcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gPT0gRnJhZ21lbnRTY3JpcHRpbmdBbGxvd2Vk
KQorICAgIC8vIEZvciBjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQsIHRoZSBzcGVjaWZpY2F0aW9u
cyBzYXkgdG8gbWFyayBpdCBwYXJzZXItaW5zZXJ0ZWQgYW5kIGFscmVhZHktc3RhcnRlZCBhbmQg
bGF0ZXIgdW5tYXJrIHRoZW0uCisgICAgLy8gSG93ZXZlciwgd2Ugc2hvcnQgY2lyY3VpdCB0aGF0
IGxvZ2ljIHRvIGF2b2lkIHRoZSBzdWJ0cmVlIHRyYXZlcnNhbCB0byBmaW5kIHNjcmlwdCBlbGVt
ZW50cyBzaW5jZSBzY3JpcHRzIGNhbiBuZXZlciBzZWUKKyAgICAvLyB0aG9zZSBmbGFncyBvciBl
ZmZlY3RzIHRoZXJlb2YKKyAgICBjb25zdCBib29sIHBhcnNlckluc2VydGVkID0gbV9mcmFnbWVu
dFNjcmlwdGluZ1Blcm1pc3Npb24gIT0gQWxsb3dTY3JpcHRpbmdDb250ZW50QW5kRG9Ob3RNYXJr
QWxyZWFkeVN0YXJ0ZWQ7CisgICAgY29uc3QgYm9vbCBhbHJlYWR5U3RhcnRlZCA9IG1faXNQYXJz
aW5nRnJhZ21lbnQgJiYgcGFyc2VySW5zZXJ0ZWQ7CisgICAgUmVmUHRyPEhUTUxTY3JpcHRFbGVt
ZW50PiBlbGVtZW50ID0gSFRNTFNjcmlwdEVsZW1lbnQ6OmNyZWF0ZShzY3JpcHRUYWcsIGN1cnJl
bnROb2RlKCktPmRvY3VtZW50KCksIHBhcnNlckluc2VydGVkLCBhbHJlYWR5U3RhcnRlZCk7Cisg
ICAgaWYgKG1fZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uICE9IERpc2FsbG93U2NyaXB0aW5n
Q29udGVudCkKICAgICAgICAgZWxlbWVudC0+cGFyc2VyU2V0QXR0cmlidXRlcyh0b2tlbi5hdHRy
aWJ1dGVzKCksIG1fZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKTsKICAgICBhdHRhY2hMYXRl
cihjdXJyZW50Tm9kZSgpLCBlbGVtZW50KTsKICAgICBtX29wZW5FbGVtZW50cy5wdXNoKGVsZW1l
bnQucmVsZWFzZSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1
bWVudFBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxEb2N1bWVudFBhcnNlci5oCShyZXZpc2lvbiAxMTc2ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyAr
NzAsNyBAQCBwdWJsaWM6CiAgICAgLy8gRXhwb3NlZCBmb3IgSFRNTFBhcnNlclNjaGVkdWxlcgog
ICAgIHZvaWQgcmVzdW1lUGFyc2luZ0FmdGVyWWllbGQoKTsKIAotICAgIHN0YXRpYyB2b2lkIHBh
cnNlRG9jdW1lbnRGcmFnbWVudChjb25zdCBTdHJpbmcmLCBEb2N1bWVudEZyYWdtZW50KiwgRWxl
bWVudCogY29udGV4dEVsZW1lbnQsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiA9IEZyYWdt
ZW50U2NyaXB0aW5nQWxsb3dlZCk7CisgICAgc3RhdGljIHZvaWQgcGFyc2VEb2N1bWVudEZyYWdt
ZW50KGNvbnN0IFN0cmluZyYsIERvY3VtZW50RnJhZ21lbnQqLCBFbGVtZW50KiBjb250ZXh0RWxl
bWVudCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uID0gQWxsb3dTY3JpcHRpbmdDb250ZW50
KTsKICAgICAKICAgICBzdGF0aWMgYm9vbCB1c2VQcmVIVE1MNVBhcnNlclF1aXJrcyhEb2N1bWVu
dCopOwogICAgIHN0YXRpYyB1bnNpZ25lZCBtYXhpbXVtRE9NVHJlZURlcHRoKERvY3VtZW50Kik7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5j
cHAJKHJldmlzaW9uIDExNzY4NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxU
cmVlQnVpbGRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMSw3ICs0MTEsNyBAQCB2b2lkIEhU
TUxUcmVlQnVpbGRlcjo6ZGV0YWNoKCkKIEhUTUxUcmVlQnVpbGRlcjo6RnJhZ21lbnRQYXJzaW5n
Q29udGV4dDo6RnJhZ21lbnRQYXJzaW5nQ29udGV4dCgpCiAgICAgOiBtX2ZyYWdtZW50KDApCiAg
ICAgLCBtX2NvbnRleHRFbGVtZW50KDApCi0gICAgLCBtX3NjcmlwdGluZ1Blcm1pc3Npb24oRnJh
Z21lbnRTY3JpcHRpbmdBbGxvd2VkKQorICAgICwgbV9zY3JpcHRpbmdQZXJtaXNzaW9uKEFsbG93
U2NyaXB0aW5nQ29udGVudCkKIHsKIH0KIApAQCAtMjEzNSw3ICsyMTM1LDcgQEAgdm9pZCBIVE1M
VHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbQogICAgICAgICAgICAgbV9zY3JpcHRUb1By
b2Nlc3MgPSBtX3RyZWUuY3VycmVudEVsZW1lbnQoKTsKICAgICAgICAgICAgIG1fc2NyaXB0VG9Q
cm9jZXNzU3RhcnRQb3NpdGlvbiA9IG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydFBvc2l0aW9uOwog
ICAgICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3AoKTsKLSAgICAgICAgICAgIGlm
IChpc1BhcnNpbmdGcmFnbWVudCgpICYmIG1fZnJhZ21lbnRDb250ZXh0LnNjcmlwdGluZ1Blcm1p
c3Npb24oKSA9PSBGcmFnbWVudFNjcmlwdGluZ05vdEFsbG93ZWQpCisgICAgICAgICAgICBpZiAo
aXNQYXJzaW5nRnJhZ21lbnQoKSAmJiBtX2ZyYWdtZW50Q29udGV4dC5zY3JpcHRpbmdQZXJtaXNz
aW9uKCkgPT0gRGlzYWxsb3dTY3JpcHRpbmdDb250ZW50KQogICAgICAgICAgICAgICAgIG1fc2Ny
aXB0VG9Qcm9jZXNzLT5yZW1vdmVBbGxDaGlsZHJlbigpOwogICAgICAgICAgICAgc2V0SW5zZXJ0
aW9uTW9kZShtX29yaWdpbmFsSW5zZXJ0aW9uTW9kZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oCShyZXZpc2lvbiAxMTc2ODcpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjA2LDggKzIwNiw3IEBAIHByaXZhdGU6CiAgICAgICAgIERvY3VtZW50RnJhZ21lbnQq
IG1fZnJhZ21lbnQ7CiAgICAgICAgIEVsZW1lbnQqIG1fY29udGV4dEVsZW1lbnQ7CiAKLSAgICAg
ICAgLy8gRnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2VkIGNhdXNlcyB0aGUgUGFyc2VyIHRvIHJl
bW92ZSBjaGlsZHJlbgotICAgICAgICAvLyBmcm9tIDxzY3JpcHQ+IHRhZ3MgKHNvIGphdmFzY3Jp
cHQgZG9lc24ndCBzaG93IHVwIGluIHBhc3RlcykuCisgICAgICAgIC8vIERpc2FsbG93U2NyaXB0
aW5nQ29udGVudCBjYXVzZXMgdGhlIFBhcnNlciB0byByZW1vdmUgY2hpbGRyZW4gZnJvbSA8c2Ny
aXB0PiB0YWdzIChzbyBqYXZhc2NyaXB0IGRvZXNuJ3Qgc2hvdyB1cCBpbiBwYXN0ZXMpLgogICAg
ICAgICBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gbV9zY3JpcHRpbmdQZXJtaXNzaW9uOwog
ICAgIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvUGFzdGVi
b2FyZEJsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2JsYWNrYmVycnkvUGFzdGVib2FyZEJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxMTc2ODcpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L1Bhc3RlYm9hcmRCbGFja0JlcnJ5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsNyBAQCBQYXNzUmVmUHRyPERvY3VtZW50
RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6CiAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdt
ZW50OwogICAgIGlmICghaHRtbC5pc0VtcHR5KCkpIHsKICAgICAgICAgU3RyaW5nIHVybCA9IFN0
cmluZzo6ZnJvbVVURjgoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkNsaXBib2FyZDo6cmVhZFVSTCgp
LmNfc3RyKCkpOwotICAgICAgICBpZiAoZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJr
dXAoZnJhbWUtPmRvY3VtZW50KCksIGh0bWwsIHVybCwgRnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxv
d2VkKSkKKyAgICAgICAgaWYgKGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKGZy
YW1lLT5kb2N1bWVudCgpLCBodG1sLCB1cmwsIERpc2FsbG93U2NyaXB0aW5nQ29udGVudCkpCiAg
ICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwogICAgIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1
bS5jcHAJKHJldmlzaW9uIDExNzY4NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL0RyYWdEYXRhQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYsNyArMTQ2LDcg
QEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBEcmFnRGF0YTo6YQogICAgICAgICBTdHJp
bmcgaHRtbDsKICAgICAgICAgS1VSTCBiYXNlVVJMOwogICAgICAgICBtX3BsYXRmb3JtRHJhZ0Rh
dGEtPmh0bWxBbmRCYXNlVVJMKGh0bWwsIGJhc2VVUkwpOwotICAgICAgICBSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZnJhbWUtPmRv
Y3VtZW50KCksIGh0bWwsIGJhc2VVUkwsIEZyYWdtZW50U2NyaXB0aW5nTm90QWxsb3dlZCk7Cisg
ICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50
RnJvbU1hcmt1cChmcmFtZS0+ZG9jdW1lbnQoKSwgaHRtbCwgYmFzZVVSTCwgRGlzYWxsb3dTY3Jp
cHRpbmdDb250ZW50KTsKICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKICAgICB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Bhc3RlYm9hcmRDaHJv
bWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
UGFzdGVib2FyZENocm9taXVtLmNwcAkocmV2aXNpb24gMTE3Njg3KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vUGFzdGVib2FyZENocm9taXVtLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTg0LDcgKzE4NCw3IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUGFzdGVi
b2FyZDoKIAogICAgICAgICBpZiAoIW1hcmt1cC5pc0VtcHR5KCkpIHsKICAgICAgICAgICBSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPQotICAgICAgICAgICAgICBjcmVhdGVGcmFn
bWVudEZyb21NYXJrdXBXaXRoQ29udGV4dChmcmFtZS0+ZG9jdW1lbnQoKSwgbWFya3VwLCBmcmFn
bWVudFN0YXJ0LCBmcmFnbWVudEVuZCwgc3JjVVJMLCBGcmFnbWVudFNjcmlwdGluZ05vdEFsbG93
ZWQpOworICAgICAgICAgICAgICBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXBXaXRoQ29udGV4dChm
cmFtZS0+ZG9jdW1lbnQoKSwgbWFya3VwLCBmcmFnbWVudFN0YXJ0LCBmcmFnbWVudEVuZCwgc3Jj
VVJMLCBEaXNhbGxvd1NjcmlwdGluZ0NvbnRlbnQpOwogICAgICAgICAgIGlmIChmcmFnbWVudCkK
ICAgICAgICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKICAgICAgICAgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcAkocmV2
aXNpb24gMTE3Njg3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRH
dGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsNyArMTcwLDcgQEAgUGFzc1JlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBQYXN0ZWJvYXJkOgogICAgIGNob3NlUGxhaW5UZXh0ID0gZmFsc2U7CiAK
ICAgICBpZiAoZGF0YU9iamVjdC0+aGFzTWFya3VwKCkpIHsKLSAgICAgICAgUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKGZyYW1lLT5k
b2N1bWVudCgpLCBkYXRhT2JqZWN0LT5tYXJrdXAoKSwgIiIsIEZyYWdtZW50U2NyaXB0aW5nTm90
QWxsb3dlZCk7CisgICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNy
ZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChmcmFtZS0+ZG9jdW1lbnQoKSwgZGF0YU9iamVjdC0+bWFy
a3VwKCksICIiLCBEaXNhbGxvd1NjcmlwdGluZ0NvbnRlbnQpOwogICAgICAgICBpZiAoZnJhZ21l
bnQpCiAgICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tCShyZXZpc2lv
biAxMTc2ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5t
bQkod29ya2luZyBjb3B5KQpAQCAtNDU4LDcgKzQ1OCw3IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRG
cmFnbWVudD4gUGFzdGVib2FyZDoKICAgICAgICAgICAgICAgICAgICAgaWYgKERvY3VtZW50TG9h
ZGVyKiBsb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBsb2FkZXItPmFkZEFsbEFyY2hpdmVSZXNvdXJjZXMoY29yZUFyY2hp
dmUuZ2V0KCkpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgZnJh
Z21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZnJhbWUtPmRvY3VtZW50KCksIG1hcmt1
cFN0cmluZywgbWFpblJlc291cmNlLT51cmwoKSwgRnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2Vk
KTsKKyAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJr
dXAoZnJhbWUtPmRvY3VtZW50KCksIG1hcmt1cFN0cmluZywgbWFpblJlc291cmNlLT51cmwoKSwg
RGlzYWxsb3dTY3JpcHRpbmdDb250ZW50KTsKICAgICAgICAgICAgICAgICAgICAgW21hcmt1cFN0
cmluZyByZWxlYXNlXTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKE1JTUVUeXBlUmVnaXN0
cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZShNSU1FVHlwZSkpCiAgICAgICAgICAgICAgICAg
ICAgZnJhZ21lbnQgPSBkb2N1bWVudEZyYWdtZW50V2l0aEltYWdlUmVzb3VyY2UoZnJhbWUsIG1h
aW5SZXNvdXJjZSk7ICAgICAgICAgICAgICAgICAgICAKQEAgLTQ5Nyw3ICs0OTcsNyBAQCBQYXNz
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICAgICAgaWYgKFtIVE1MU3RyaW5nIGxlbmd0aF0gIT0gMCAmJgotICAgICAgICAg
ICAgKGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKGZyYW1lLT5kb2N1bWVudCgp
LCBIVE1MU3RyaW5nLCAiIiwgRnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2VkKSkpCisgICAgICAg
ICAgICAoZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZnJhbWUtPmRvY3VtZW50
KCksIEhUTUxTdHJpbmcsICIiLCBEaXNhbGxvd1NjcmlwdGluZ0NvbnRlbnQpKSkKICAgICAgICAg
ICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9EcmFnRGF0YVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9EcmFnRGF0YVF0LmNwcAkocmV2aXNpb24gMTE3Njg3KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvRHJhZ0RhdGFRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzNyw3ICsxMzcsNyBAQCBTdHJpbmcgRHJhZ0RhdGE6OmFzVVJMKEZyYW1lKiwgRmlsZW5hbWVD
CiBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IERyYWdEYXRhOjphc0ZyYWdtZW50KEZyYW1l
KiBmcmFtZSwgUGFzc1JlZlB0cjxSYW5nZT4sIGJvb2wsIGJvb2wmKSBjb25zdAogewogICAgIGlm
IChtX3BsYXRmb3JtRHJhZ0RhdGEgJiYgbV9wbGF0Zm9ybURyYWdEYXRhLT5oYXNIdG1sKCkpCi0g
ICAgICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZnJhbWUtPmRvY3VtZW50KCks
IG1fcGxhdGZvcm1EcmFnRGF0YS0+aHRtbCgpLCAiIiwgRnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxv
d2VkKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChmcmFtZS0+ZG9j
dW1lbnQoKSwgbV9wbGF0Zm9ybURyYWdEYXRhLT5odG1sKCksICIiLCBEaXNhbGxvd1NjcmlwdGlu
Z0NvbnRlbnQpOwogCiAgICAgcmV0dXJuIDA7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9xdC9QYXN0ZWJvYXJkUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3F0L1Bhc3RlYm9hcmRRdC5jcHAJKHJldmlzaW9uIDExNzY4NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3F0L1Bhc3RlYm9hcmRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
MSw3ICsxMTEsNyBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6CiAg
ICAgaWYgKG1pbWVEYXRhLT5oYXNIdG1sKCkpIHsKICAgICAgICAgUVN0cmluZyBodG1sID0gbWlt
ZURhdGEtPmh0bWwoKTsKICAgICAgICAgaWYgKCFodG1sLmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9t
TWFya3VwKGZyYW1lLT5kb2N1bWVudCgpLCBodG1sLCAiIiwgRnJhZ21lbnRTY3JpcHRpbmdOb3RB
bGxvd2VkKTsKKyAgICAgICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9
IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChmcmFtZS0+ZG9jdW1lbnQoKSwgaHRtbCwgIiIsIERp
c2FsbG93U2NyaXB0aW5nQ29udGVudCk7CiAgICAgICAgICAgICBpZiAoZnJhZ21lbnQpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKICAgICAgICAgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFV0aWxpdGllc1dpbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFV0aWxpdGll
c1dpbi5jcHAJKHJldmlzaW9uIDExNzY4NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9DbGlwYm9hcmRVdGlsaXRpZXNXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDIsNyArNjQy
LDcgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudEZybwogICAgIH0KIAog
ICAgIFN0cmluZyBtYXJrdXAgPSBleHRyYWN0TWFya3VwRnJvbUNGSFRNTChjZmh0bWwpOwotICAg
IHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZG9jLCBtYXJrdXAsIHNyY1VSTCwgRnJh
Z21lbnRTY3JpcHRpbmdOb3RBbGxvd2VkKTsKKyAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9t
TWFya3VwKGRvYywgbWFya3VwLCBzcmNVUkwsIERpc2FsbG93U2NyaXB0aW5nQ29udGVudCk7CiB9
CiAKIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnRGcm9tSFRNTChEb2N1bWVu
dCogZG9jLCBJRGF0YU9iamVjdCogZGF0YSkgCkBAIC02NTksNyArNjU5LDcgQEAgUGFzc1JlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudEZybwogICAgIFN0cmluZyBodG1sID0gZ2V0VGV4
dEhUTUwoZGF0YSk7CiAgICAgU3RyaW5nIHNyY1VSTDsKICAgICBpZiAoIWh0bWwuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKGRvYywgaHRtbCwgc3Jj
VVJMLCBGcmFnbWVudFNjcmlwdGluZ05vdEFsbG93ZWQpOworICAgICAgICByZXR1cm4gY3JlYXRl
RnJhZ21lbnRGcm9tTWFya3VwKGRvYywgaHRtbCwgc3JjVVJMLCBEaXNhbGxvd1NjcmlwdGluZ0Nv
bnRlbnQpOwogCiAgICAgcmV0dXJuIDA7CiB9CkBAIC02NzcsNyArNjc3LDcgQEAgUGFzc1JlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudEZybwogCiAgICAgU3RyaW5nIHNyY1VSTDsKICAg
ICBpZiAoZ2V0RGF0YU1hcEl0ZW0oZGF0YSwgdGV4dGh0bWxGb3JtYXQoKSwgc3RyaW5nRGF0YSkp
Ci0gICAgICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZG9jdW1lbnQsIHN0cmlu
Z0RhdGEsIHNyY1VSTCwgRnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2VkKTsKKyAgICAgICAgcmV0
dXJuIGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChkb2N1bWVudCwgc3RyaW5nRGF0YSwgc3JjVVJM
LCBEaXNhbGxvd1NjcmlwdGluZ0NvbnRlbnQpOwogCiAgICAgcmV0dXJuIDA7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS94bWwvWE1MRXJyb3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS94bWwvWE1MRXJyb3JzLmNwcAkocmV2aXNpb24gMTE3Njg3KQorKysgU291cmNlL1dlYkNv
cmUveG1sL1hNTEVycm9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDcgKzkzLDcgQEAgc3Rh
dGljIGlubGluZSBQYXNzUmVmUHRyPEVsZW1lbnQ+IGNyZWF0ZQogCiAgICAgVmVjdG9yPEF0dHJp
YnV0ZT4gcmVwb3J0QXR0cmlidXRlczsKICAgICByZXBvcnRBdHRyaWJ1dGVzLmFwcGVuZChBdHRy
aWJ1dGUoc3R5bGVBdHRyLCAiZGlzcGxheTogYmxvY2s7IHdoaXRlLXNwYWNlOiBwcmU7IGJvcmRl
cjogMnB4IHNvbGlkICNjNzc7IHBhZGRpbmc6IDAgMWVtIDAgMWVtOyBtYXJnaW46IDFlbTsgYmFj
a2dyb3VuZC1jb2xvcjogI2ZkZDsgY29sb3I6IGJsYWNrIikpOwotICAgIHJlcG9ydEVsZW1lbnQt
PnBhcnNlclNldEF0dHJpYnV0ZXMocmVwb3J0QXR0cmlidXRlcywgRnJhZ21lbnRTY3JpcHRpbmdO
b3RBbGxvd2VkKTsKKyAgICByZXBvcnRFbGVtZW50LT5wYXJzZXJTZXRBdHRyaWJ1dGVzKHJlcG9y
dEF0dHJpYnV0ZXMsIERpc2FsbG93U2NyaXB0aW5nQ29udGVudCk7CiAKICAgICBSZWZQdHI8RWxl
bWVudD4gaDMgPSBkb2MtPmNyZWF0ZUVsZW1lbnQoaDNUYWcsIHRydWUpOwogICAgIHJlcG9ydEVs
ZW1lbnQtPnBhcnNlckFkZENoaWxkKGgzLmdldCgpKTsKQEAgLTEwMiw3ICsxMDIsNyBAQCBzdGF0
aWMgaW5saW5lIFBhc3NSZWZQdHI8RWxlbWVudD4gY3JlYXRlCiAgICAgUmVmUHRyPEVsZW1lbnQ+
IGZpeGVkID0gZG9jLT5jcmVhdGVFbGVtZW50KGRpdlRhZywgdHJ1ZSk7CiAgICAgVmVjdG9yPEF0
dHJpYnV0ZT4gZml4ZWRBdHRyaWJ1dGVzOwogICAgIGZpeGVkQXR0cmlidXRlcy5hcHBlbmQoQXR0
cmlidXRlKHN0eWxlQXR0ciwgImZvbnQtZmFtaWx5Om1vbm9zcGFjZTtmb250LXNpemU6MTJweCIp
KTsKLSAgICBmaXhlZC0+cGFyc2VyU2V0QXR0cmlidXRlcyhmaXhlZEF0dHJpYnV0ZXMsIEZyYWdt
ZW50U2NyaXB0aW5nTm90QWxsb3dlZCk7CisgICAgZml4ZWQtPnBhcnNlclNldEF0dHJpYnV0ZXMo
Zml4ZWRBdHRyaWJ1dGVzLCBEaXNhbGxvd1NjcmlwdGluZ0NvbnRlbnQpOwogICAgIHJlcG9ydEVs
ZW1lbnQtPnBhcnNlckFkZENoaWxkKGZpeGVkLmdldCgpKTsKIAogICAgIGZpeGVkLT5wYXJzZXJB
ZGRDaGlsZChkb2MtPmNyZWF0ZVRleHROb2RlKGVycm9yTWVzc2FnZXMpKTsKQEAgLTE2MSw3ICsx
NjEsNyBAQCB2b2lkIFhNTEVycm9yczo6aW5zZXJ0RXJyb3JNZXNzYWdlQmxvY2soCiAgICAgICAg
IFZlY3RvcjxBdHRyaWJ1dGU+IGF0dHJpYnV0ZXM7CiAgICAgICAgIGF0dHJpYnV0ZXMuYXBwZW5k
KEF0dHJpYnV0ZShzdHlsZUF0dHIsICJ3aGl0ZS1zcGFjZTogbm9ybWFsIikpOwogICAgICAgICBS
ZWZQdHI8RWxlbWVudD4gcGFyYWdyYXBoID0gbV9kb2N1bWVudC0+Y3JlYXRlRWxlbWVudChwVGFn
LCB0cnVlKTsKLSAgICAgICAgcGFyYWdyYXBoLT5wYXJzZXJTZXRBdHRyaWJ1dGVzKGF0dHJpYnV0
ZXMsIEZyYWdtZW50U2NyaXB0aW5nTm90QWxsb3dlZCk7CisgICAgICAgIHBhcmFncmFwaC0+cGFy
c2VyU2V0QXR0cmlidXRlcyhhdHRyaWJ1dGVzLCBEaXNhbGxvd1NjcmlwdGluZ0NvbnRlbnQpOwog
ICAgICAgICBwYXJhZ3JhcGgtPnBhcnNlckFkZENoaWxkKG1fZG9jdW1lbnQtPmNyZWF0ZVRleHRO
b2RlKCJUaGlzIGRvY3VtZW50IHdhcyBjcmVhdGVkIGFzIHRoZSByZXN1bHQgb2YgYW4gWFNMIHRy
YW5zZm9ybWF0aW9uLiBUaGUgbGluZSBhbmQgY29sdW1uIG51bWJlcnMgZ2l2ZW4gYXJlIGZyb20g
dGhlIHRyYW5zZm9ybWVkIHJlc3VsdC4iKSk7CiAgICAgICAgIHJlcG9ydEVsZW1lbnQtPnBhcnNl
ckFkZENoaWxkKHBhcmFncmFwaC5yZWxlYXNlKCkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3htbC9wYXJzZXIvTmV3WE1MRG9jdW1lbnRQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS94bWwvcGFyc2VyL05ld1hNTERvY3VtZW50UGFyc2VyLmgJKHJldmlzaW9uIDEx
NzY4NykKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTmV3WE1MRG9jdW1lbnRQYXJzZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgTmV3WE1MRG9jdW1lbnRQYXJzZXIoZnJhZ21lbnQsIHBhcmVudCwgc2Ny
aXB0aW5nUGVybWlzc2lvbikpOwogICAgIH0KIAotICAgIHN0YXRpYyBib29sIHBhcnNlRG9jdW1l
bnRGcmFnbWVudChjb25zdCBTdHJpbmcmLCBEb2N1bWVudEZyYWdtZW50KiwgRWxlbWVudCogcGFy
ZW50ID0gMCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uID0gRnJhZ21lbnRTY3JpcHRpbmdB
bGxvd2VkKTsKKyAgICBzdGF0aWMgYm9vbCBwYXJzZURvY3VtZW50RnJhZ21lbnQoY29uc3QgU3Ry
aW5nJiwgRG9jdW1lbnRGcmFnbWVudCosIEVsZW1lbnQqIHBhcmVudCA9IDAsIEZyYWdtZW50U2Ny
aXB0aW5nUGVybWlzc2lvbiA9IEFsbG93U2NyaXB0aW5nQ29udGVudCk7CiAKICAgICB2b2lkIHBh
dXNlUGFyc2luZygpIHsgbV9wYXJzZXJQYXVzZWQgPSB0cnVlOyB9CiAgICAgdm9pZCByZXN1bWVQ
YXJzaW5nKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFy
c2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVu
dFBhcnNlci5oCShyZXZpc2lvbiAxMTc2ODcpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2Vy
L1hNTERvY3VtZW50UGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTkyLDcgKzkyLDcgQEAgY2xh
c3MgVGV4dDsKICAgICAgICAgdm9pZCBzZXRJc1hIVE1MRG9jdW1lbnQoYm9vbCBpc1hIVE1MKSB7
IG1faXNYSFRNTERvY3VtZW50ID0gaXNYSFRNTDsgfQogICAgICAgICBib29sIGlzWEhUTUxEb2N1
bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faXNYSFRNTERvY3VtZW50OyB9CiAKLSAgICAgICAgc3Rh
dGljIGJvb2wgcGFyc2VEb2N1bWVudEZyYWdtZW50KGNvbnN0IFN0cmluZyYsIERvY3VtZW50RnJh
Z21lbnQqLCBFbGVtZW50KiBwYXJlbnQgPSAwLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24g
PSBGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpOworICAgICAgICBzdGF0aWMgYm9vbCBwYXJzZURv
Y3VtZW50RnJhZ21lbnQoY29uc3QgU3RyaW5nJiwgRG9jdW1lbnRGcmFnbWVudCosIEVsZW1lbnQq
IHBhcmVudCA9IDAsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiA9IEFsbG93U2NyaXB0aW5n
Q29udGVudCk7CiAKICAgICAgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gdXNlZCB0byBiZSB1
c2VkIGJ5IFdNTC4gQ2FuIHdlIHJlbW92ZSBpdD8KICAgICAgICAgdmlydHVhbCBib29sIHdlbGxG
b3JtZWQoKSBjb25zdCB7IHJldHVybiAhbV9zYXdFcnJvcjsgfQpJbmRleDogU291cmNlL1dlYkNv
cmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAko
cmV2aXNpb24gMTE3Njg3KQorKysgU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVu
dFBhcnNlckxpYnhtbDIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTksNyArNTU5LDcgQEAgWE1M
RG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKERvYwogICAgICwgbV9wZW5kaW5nU2Ny
aXB0KDApCiAgICAgLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24oVGV4dFBvc2l0aW9uOjpiZWxvd1Jh
bmdlUG9zaXRpb24oKSkKICAgICAsIG1fcGFyc2luZ0ZyYWdtZW50KGZhbHNlKQotICAgICwgbV9z
Y3JpcHRpbmdQZXJtaXNzaW9uKEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCkKKyAgICAsIG1fc2Ny
aXB0aW5nUGVybWlzc2lvbihBbGxvd1NjcmlwdGluZ0NvbnRlbnQpCiB7CiB9CiAKQEAgLTg0Myw3
ICs4NDMsNyBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjplbmRFbGVtZW50TnMoKQogICAgIGlm
IChoYWNrQXJvdW5kTGliWE1MRW50aXR5UGFyc2luZ0J1ZygpICYmIGNvbnRleHQoKS0+ZGVwdGgg
PD0gZGVwdGhUcmlnZ2VyaW5nRW50aXR5RXhwYW5zaW9uKCkpCiAgICAgICAgIHNldERlcHRoVHJp
Z2dlcmluZ0VudGl0eUV4cGFuc2lvbigtMSk7CiAKLSAgICBpZiAobV9zY3JpcHRpbmdQZXJtaXNz
aW9uID09IEZyYWdtZW50U2NyaXB0aW5nTm90QWxsb3dlZCAmJiBuLT5pc0VsZW1lbnROb2RlKCkg
JiYgdG9TY3JpcHRFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihuLmdldCgpKSkpIHsKKyAg
ICBpZiAobV9zY3JpcHRpbmdQZXJtaXNzaW9uID09IERpc2FsbG93U2NyaXB0aW5nQ29udGVudCAm
JiBuLT5pc0VsZW1lbnROb2RlKCkgJiYgdG9TY3JpcHRFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1l
bnQqPihuLmdldCgpKSkpIHsKICAgICAgICAgcG9wQ3VycmVudE5vZGUoKTsKICAgICAgICAgRXhj
ZXB0aW9uQ29kZSBlYzsKICAgICAgICAgbi0+cmVtb3ZlKGVjKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclF0LmNwcAkocmV2aXNpb24g
MTE3Njg3KQorKysgU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclF0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBAQCBYTUxEb2N1bWVudFBhcnNlcjo6
WE1MRG9jdW1lbnRQYXJzZXIoRG9jCiAgICAgLCBtX3BlbmRpbmdTY3JpcHQoMCkKICAgICAsIG1f
c2NyaXB0U3RhcnRQb3NpdGlvbihUZXh0UG9zaXRpb246OmJlbG93UmFuZ2VQb3NpdGlvbigpKQog
ICAgICwgbV9wYXJzaW5nRnJhZ21lbnQoZmFsc2UpCi0gICAgLCBtX3NjcmlwdGluZ1Blcm1pc3Np
b24oRnJhZ21lbnRTY3JpcHRpbmdBbGxvd2VkKQorICAgICwgbV9zY3JpcHRpbmdQZXJtaXNzaW9u
KEFsbG93U2NyaXB0aW5nQ29udGVudCkKIHsKICAgICBtX3N0cmVhbS5zZXRFbnRpdHlSZXNvbHZl
cihuZXcgRW50aXR5UmVzb2x2ZXIpOwogfQpAQCAtNDkyLDcgKzQ5Miw3IEBAIHZvaWQgWE1MRG9j
dW1lbnRQYXJzZXI6OnBhcnNlRW5kRWxlbWVudCgKICAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4g
biA9IG1fY3VycmVudE5vZGU7CiAgICAgbi0+ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7CiAKLSAg
ICBpZiAobV9zY3JpcHRpbmdQZXJtaXNzaW9uID09IEZyYWdtZW50U2NyaXB0aW5nTm90QWxsb3dl
ZCAmJiBuLT5pc0VsZW1lbnROb2RlKCkgJiYgdG9TY3JpcHRFbGVtZW50KHN0YXRpY19jYXN0PEVs
ZW1lbnQqPihuLmdldCgpKSkpIHsKKyAgICBpZiAobV9zY3JpcHRpbmdQZXJtaXNzaW9uID09IERp
c2FsbG93U2NyaXB0aW5nQ29udGVudCAmJiBuLT5pc0VsZW1lbnROb2RlKCkgJiYgdG9TY3JpcHRF
bGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihuLmdldCgpKSkpIHsKICAgICAgICAgcG9wQ3Vy
cmVudE5vZGUoKTsKICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKICAgICAgICAgbi0+cmVtb3Zl
KGVjKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNzcwNCkKKysrIFNvdXJjZS9X
ZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEy
LTA1LTE5ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFVzaW5n
IGNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCB0byBpbnNlcnQgYSA8c2NyaXB0PiBkb2VzIG5vdCBj
YXVzZSB0aGUgc2NyaXB0IHRvIGV4ZWN1dGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEyMjM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUmVuYW1lZCBGcmFnbWVudFNjcmlwdGluZ05vdEFsbG93ZWQgdG8g
RGlzYWxsb3dTY3JpcHRpbmdDb250ZW50LgorCisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5t
bToKKyAgICAgICAgKC1bV2ViRnJhbWUgX2RvY3VtZW50RnJhZ21lbnRXaXRoTWFya3VwU3RyaW5n
OmJhc2VVUkxTdHJpbmc6XSk6CisKIDIwMTItMDUtMTkgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBw
bGUuY29tPgogCiAgICAgICAgIEZpeCBidWlsZCBlcnJvcnMgZm91bmQgd2hlbiBkaXNhYmxpbmcg
RU5BQkxFX0RSQUdfU1VQUE9SVApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJG
cmFtZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1l
Lm1tCShyZXZpc2lvbiAxMTc2ODcpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZy
YW1lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03MzYsNyArNzM2LDcgQEAgLSAoRE9NRG9jdW1lbnRG
cmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZQogICAgIGlmICghX3ByaXZhdGUtPmNvcmVGcmFtZSB8
fCAhX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIG5pbDsK
IAotICAgIHJldHVybiBraXQoY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKF9wcml2YXRlLT5jb3Jl
RnJhbWUtPmRvY3VtZW50KCksIG1hcmt1cFN0cmluZywgYmFzZVVSTFN0cmluZywgRnJhZ21lbnRT
Y3JpcHRpbmdOb3RBbGxvd2VkKS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChjcmVhdGVGcmFnbWVu
dEZyb21NYXJrdXAoX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKSwgbWFya3VwU3RyaW5n
LCBiYXNlVVJMU3RyaW5nLCBEaXNhbGxvd1NjcmlwdGluZ0NvbnRlbnQpLmdldCgpKTsKIH0KIAog
LSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZW50V2l0aE5vZGVzQXNQYXJh
Z3JhcGhzOihOU0FycmF5ICopbm9kZXMKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNzcwNCkKKysrIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDEy
LTA1LTE5ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFVzaW5n
IGNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCB0byBpbnNlcnQgYSA8c2NyaXB0PiBkb2VzIG5vdCBj
YXVzZSB0aGUgc2NyaXB0IHRvIGV4ZWN1dGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEyMjM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkZWQgcmVncmVzc2lvbnMgdGVzdHMgdG8gZW5zdXJlIGNyZWF0
ZUNvbnRleHR1YWxGcmFnbWVudCBkb2Vzbid0IGV4ZWN1dGUgc2NyaXB0IGVsZW1lbnRzCisgICAg
ICAgIGltbWVkaWF0ZWx5IGFzIHRoZXkgYXJlIHBhcnNlZCBhbmQgaXQgZG9lc24ndCBtYXJrIHRo
b3NlIHNjcmlwdCBlbGVtZW50cyBhcyBhbHJlYWR5IHN0YXJ0ZWQuCisKKyAgICAgICAgVGhlIGJl
aGF2aW9yIG9mIGlubmVySFRNTCBpcyB0ZXN0ZWQgZWxzZXdoZXJlIGFuZCB0aGlzIHBhdGNoIGRv
ZXMgbm90IGFmZmVjdCBpdHMgYmVoYXZpb3IuCisKKyAgICAgICAgKiBmYXN0L2RvbS9SYW5nZS9j
cmVhdGUtY29udGV4dHVhbC1mcmFnbWVudC1zY3JpcHQtbm90LXJhbi1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvZG9tL1JhbmdlL2NyZWF0ZS1jb250ZXh0dWFsLWZyYWdtZW50
LXNjcmlwdC1ub3QtcmFuLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL1JhbmdlL2Ny
ZWF0ZS1jb250ZXh0dWFsLWZyYWdtZW50LXNjcmlwdC11bm1hcmstYWxyZWFkeS1zdGFydGVkLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vUmFuZ2UvY3JlYXRlLWNvbnRl
eHR1YWwtZnJhZ21lbnQtc2NyaXB0LXVubWFyay1hbHJlYWR5LXN0YXJ0ZWQuaHRtbDogQWRkZWQu
CisKIDIwMTItMDUtMTkgIEpvc2h1YSBCZWxsICA8anNiZWxsQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBJbmRleGVkREIgbGF5b3V0IHRlc3RzIHNob3VsZCBtYWtlIGJldHRlciB1c2Ugb2YgdGVz
dCBsaWJyYXJ5IGZ1bmN0aW9ucwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vUmFuZ2UvY3Jl
YXRlLWNvbnRleHR1YWwtZnJhZ21lbnQtc2NyaXB0LW5vdC1yYW4tZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL1JhbmdlL2NyZWF0ZS1jb250ZXh0dWFsLWZy
YWdtZW50LXNjcmlwdC1ub3QtcmFuLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3QvZG9tL1JhbmdlL2NyZWF0ZS1jb250ZXh0dWFsLWZyYWdtZW50LXNjcmlwdC1u
b3QtcmFuLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitUZXN0cyBj
cmVhdGVDb250ZXh0dWFsRnJhZ21lbnQgZG9lcyBub3QgZXhlY3V0ZSBzY3JpcHRzIGltbWVkaWF0
ZWx5LiBZb3Ugc2hvdWxkIHNlZSBQQVNTIGJlbG93OgorCitQQVNTCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2RvbS9SYW5nZS9jcmVhdGUtY29udGV4dHVhbC1mcmFnbWVudC1zY3JpcHQtbm90LXJh
bi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL1JhbmdlL2NyZWF0ZS1j
b250ZXh0dWFsLWZyYWdtZW50LXNjcmlwdC1ub3QtcmFuLmh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2RvbS9SYW5nZS9jcmVhdGUtY29udGV4dHVhbC1mcmFnbWVudC1zY3Jp
cHQtbm90LXJhbi5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5IEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGJvZHk+Cis8cD5UZXN0cyBjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQg
ZG9lcyBub3QgZXhlY3V0ZSBzY3JpcHRzIGltbWVkaWF0ZWx5LiBZb3Ugc2hvdWxkIHNlZSBQQVNT
IGJlbG93OjwvcD4KKzxkaXYgaWQ9InRlc3QiPjwvZGl2PgorPHNjcmlwdD4KK3ZhciByYW5nZSA9
IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7Cit2YXIgbm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJ0ZXN0Iik7Cit2YXIgY291bnQgPSAwOworcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKG5v
ZGUpOworcmFuZ2UuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KCI8c2NyaXB0PiBjb3VudCsrOyA8
L3NjcmlwdCIgKyAiPiIpOworbm9kZS50ZXh0Q29udGVudCA9ICFjb3VudCA/ICdQQVNTJyA6ICdG
QUlMIC0gZXhwZWN0ZWQgbm8gZXhlY3V0aW9uIGJ1dCBleGVjdXRlZCAnICsgY291bnQgKyAnIHRp
bWVzJzsKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vUmFuZ2UvY3JlYXRlLWNvbnRleHR1YWwtZnJhZ21l
bnQtc2NyaXB0LXVubWFyay1hbHJlYWR5LXN0YXJ0ZWQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL1JhbmdlL2NyZWF0ZS1jb250ZXh0dWFsLWZyYWdtZW50
LXNjcmlwdC11bm1hcmstYWxyZWFkeS1zdGFydGVkLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3QvZG9tL1JhbmdlL2NyZWF0ZS1jb250ZXh0dWFsLWZyYWdtZW50
LXNjcmlwdC11bm1hcmstYWxyZWFkeS1zdGFydGVkLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwzIEBACitUZXN0cyBjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQgZG9lcyBub3Qg
bWFyayBzY3JpcHRzIGVsZW1lbnRzIGl0IHBhcnNlZCBhcyBhbHJlYWR5IHN0YXJ0ZWQuIFlvdSBz
aG91bGQgc2VlIFBBU1MgYmVsb3c6CisKK1BBU1MKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9t
L1JhbmdlL2NyZWF0ZS1jb250ZXh0dWFsLWZyYWdtZW50LXNjcmlwdC11bm1hcmstYWxyZWFkeS1z
dGFydGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vUmFuZ2UvY3Jl
YXRlLWNvbnRleHR1YWwtZnJhZ21lbnQtc2NyaXB0LXVubWFyay1hbHJlYWR5LXN0YXJ0ZWQuaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL1JhbmdlL2NyZWF0ZS1jb250
ZXh0dWFsLWZyYWdtZW50LXNjcmlwdC11bm1hcmstYWxyZWFkeS1zdGFydGVkLmh0bWwJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4K
KzxwPlRlc3RzIGNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCBkb2VzIG5vdCBtYXJrIHNjcmlwdHMg
ZWxlbWVudHMgaXQgcGFyc2VkIGFzIGFscmVhZHkgc3RhcnRlZC4gWW91IHNob3VsZCBzZWUgUEFT
UyBiZWxvdzo8L3A+Cis8ZGl2IGlkPSJ0ZXN0Ij48L2Rpdj4KKzxzY3JpcHQ+Cit2YXIgcmFuZ2Ug
PSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwordmFyIG5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgidGVzdCIpOwordmFyIGNvdW50ID0gMDsKK3JhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhu
b2RlKTsKK25vZGUuYXBwZW5kQ2hpbGQocmFuZ2UuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KCI8
c2NyaXB0PiBjb3VudCsrOyA8L3NjcmlwdCIgKyAiPiIpKTsKK25vZGUudGV4dENvbnRlbnQgPSBj
b3VudCA9PSAxID8gJ1BBU1MnIDogJ0ZBSUwgLSBleHBlY3RlZCBvbmUgZXhlY3V0aW9uIGJ1dCBl
eGVjdXRlZCAnICsgY291bnQgKyAnIHRpbWVzJzsKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKzwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="149315"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>