<?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>47734</bug_id>
          
          <creation_ts>2010-10-15 12:54:59 -0700</creation_ts>
          <short_desc>Move MarkupAccumulator from markup.cpp to its own file</short_desc>
          <delta_ts>2011-02-06 22:14:39 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>eric</cc>
    
    <cc>rniwa</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>294870</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-15 12:54:59 -0700</bug_when>
    <thetext>Move MarkupAccumulator from markup.cpp to its own file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294880</commentid>
    <comment_count>1</comment_count>
      <attachid>70890</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-15 13:06:57 -0700</bug_when>
    <thetext>Created attachment 70890
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294903</commentid>
    <comment_count>2</comment_count>
      <attachid>70890</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-15 13:48:52 -0700</bug_when>
    <thetext>Comment on attachment 70890
Patch

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

If you&apos;re just moving code, rs=me.

&gt; WebCore/editing/EditingAllInOne.cpp:51
&gt; +#include &lt;MarkupAccumulator.cpp&gt;

Huh?  Why are these all &lt;&gt;.  That makes no sense to me.  They shoudl be &quot;&quot;.  Obviously another patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294906</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-15 13:49:45 -0700</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=70890&amp;action=review

Thanks for doing this!

&gt; WebCore/WebCore.xcodeproj/project.pbxproj:-21138
&gt; -			developmentRegion = English;

You should revert this change.

&gt; WebCore/editing/MarkupAccumulator.cpp:2
&gt; + * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.

Maybe add Google as well since we&apos;ve done considerable work cleaning the code up?

&gt; WebCore/editing/markup.h:61
&gt; +
&gt; +    // FIXME: Should this be better encapulated somewhere?
&gt; +    bool elementCannotHaveEndTag(const Node*);

I think you can move this into MarkupAccumulator once you make the serializeNodes a member function of MarkupAccumulator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294925</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-15 14:34:38 -0700</bug_when>
    <thetext>&gt; &gt; WebCore/editing/MarkupAccumulator.cpp:2
&gt; &gt; + * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
&gt; 
&gt; Maybe add Google as well since we&apos;ve done considerable work cleaning the code up?

I didn&apos;t change the copyright since this patch doesn&apos;t do anything that impacts the copyright on the file.  Feel free to change it in a future patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294926</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-15 14:35:06 -0700</bug_when>
    <thetext>Committed r69880: &lt;http://trac.webkit.org/changeset/69880&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346467</commentid>
    <comment_count>6</comment_count>
      <attachid>70890</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-02-06 22:14:39 -0800</bug_when>
    <thetext>Comment on attachment 70890
Patch

Cleared review &amp; cq flags so that this patch won&apos;t appear on the review queue.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70890</attachid>
            <date>2010-10-15 13:06:57 -0700</date>
            <delta_ts>2011-02-06 22:14:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-47734-20101015130656.patch</filename>
            <type>text/plain</type>
            <size>49657</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQW5kcm9pZC5tayBiL1dlYkNvcmUvQW5kcm9pZC5tawppbmRl
eCBmMTRkMGUxM2QyODRiODViOGNjNmY5ZjMyYTQ2MTRkYTMwYWYyMDg5Li44Y2NjYzk2NjQzZmQ3
YTlkOGY1ZmEzY2E3YmMxNTZlYThiZGUyZjE3IDEwMDY0NAotLS0gYS9XZWJDb3JlL0FuZHJvaWQu
bWsKKysrIGIvV2ViQ29yZS9BbmRyb2lkLm1rCkBAIC0yMjAsNiArMjIwLDcgQEAgTE9DQUxfU1JD
X0ZJTEVTIDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhT
ZXBhcmF0b3JDb21tYW5kLmNwcCBcCiAJZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAgXAog
CWVkaXRpbmcvSm9pblRleHROb2Rlc0NvbW1hbmQuY3BwIFwKKwllZGl0aW5nL01hcmt1cEFjY3Vt
dWxhdG9yLmNwcCBcCiAJZWRpdGluZy9NZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZC5jcHAg
XAogCWVkaXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcCBcCiAJZWRpdGluZy9Nb3Zl
U2VsZWN0aW9uQ29tbWFuZC5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dCBiL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggOTZhNjM0ZDQxMjEwMmNlODBiOGYyNzk0
MzljNmQ2MjRiMTY4ZWRjYi4uMmUxYmFjNzRmOThhMWM1NTZkNzViYjU1YTQ2MDhkZDFkNDFlNDI2
MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CkBAIC05MDQsNiArOTA0LDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGVk
aXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAKICAgICBlZGl0aW5nL0lu
c2VydFRleHRDb21tYW5kLmNwcAogICAgIGVkaXRpbmcvSm9pblRleHROb2Rlc0NvbW1hbmQuY3Bw
CisgICAgZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAKICAgICBlZGl0aW5nL01lcmdlSWRl
bnRpY2FsRWxlbWVudHNDb21tYW5kLmNwcAogICAgIGVkaXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlz
dExldmVsLmNwcAogICAgIGVkaXRpbmcvTW92ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDdhMzgwZmU0
Y2Q4ZWIyNWFiMzBmOWRkMzRjNjQwZWZhMmE1MDMyNDYuLjhjYWU3NDM5YjM3NjI2MzIwNzUwNmQx
MGVmN2I3NDQwMDNkZDM0ZmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTAtMTAtMTUgIEFkYW0gQmFydGgg
IDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBNb3ZlIE1hcmt1cEFjY3VtdWxhdG9yIGZyb20gbWFya3VwLmNwcCB0byBp
dHMgb3duIGZpbGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQ3NzM0CisKKyAgICAgICAgVGhpcyBwYXRjaCBtb3ZlcyB0aGUgTWFya3VwQWNjdW11bGF0
b3IgY2xhc3MgaW50byBpdHMgb3duIGZpbGUuCisgICAgICAgIFRoZXJlJ3MgYSBsb3Qgb2YgY2xl
YW4gdXAgbGVmdCB0byBkbywgYnV0IHRoaXMgcGF0Y2ggaXMgYSBzdGVwIGluIHRoZQorICAgICAg
ICByaWdodCBkaXJlY3Rpb24uCisKKyAgICAgICAgTm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAg
ICAgICogQW5kcm9pZC5tazoKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29y
ZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGVkaXRpbmcv
bWFya3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVsZW1lbnRDYW5ub3RIYXZlRW5kVGFnKToK
KyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5oOgorICAgICAgICAqIGVkaXRpbmcvTWFya3VwQWNj
dW11bGF0b3IuaDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5j
cHA6IEFkZGVkLgorCiAyMDEwLTEwLTEzICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IGM0ZWIx
YzI5MmRlMTlkZDY0MmE3YTI0YTIxYmMyMTZhOWVmYmIwMzIuLjdiOGMxNjEwNzdmYTI4ZTU4MmIx
Yjk4ZjIyMmU3NGY3NjE0YzZlODEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0K
KysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTMxNCw2ICsxMzE0LDggQEAgd2ViY29y
ZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2VkaXRpbmcvSm9pblRleHROb2Rlc0NvbW1hbmQuaCBc
CiAJV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAgXAogCVdlYkNvcmUvZWRpdGluZy9tYXJrdXAu
aCBcCisJV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcCBcCisJV2ViQ29yZS9l
ZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmggXAogCVdlYkNvcmUvZWRpdGluZy9NZXJnZUlkZW50
aWNhbEVsZW1lbnRzQ29tbWFuZC5jcHAgXAogCVdlYkNvcmUvZWRpdGluZy9NZXJnZUlkZW50aWNh
bEVsZW1lbnRzQ29tbWFuZC5oIFwKIAlXZWJDb3JlL2VkaXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlz
dExldmVsLmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUv
V2ViQ29yZS5neXBpCmluZGV4IDdkM2NiMjcyY2VkNmIzZThjNWYyZjYyNzZjODRmNmQ5ZjkwMzgw
OGEuLjhkNzAyODMwMTk4ZDZiNGEyZWIyYmM4NTE4ZDViZTZmZGY4YTMzYWEgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0xMzk2
LDYgKzEzOTYsOCBAQAogICAgICAgICAgICAgJ2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuaCcs
CiAgICAgICAgICAgICAnZWRpdGluZy9Kb2luVGV4dE5vZGVzQ29tbWFuZC5jcHAnLAogICAgICAg
ICAgICAgJ2VkaXRpbmcvSm9pblRleHROb2Rlc0NvbW1hbmQuaCcsCisgICAgICAgICAgICAnZWRp
dGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAnLAorICAgICAgICAgICAgJ2VkaXRpbmcvTWFya3Vw
QWNjdW11bGF0b3IuaCcsCiAgICAgICAgICAgICAnZWRpdGluZy9NZXJnZUlkZW50aWNhbEVsZW1l
bnRzQ29tbWFuZC5jcHAnLAogICAgICAgICAgICAgJ2VkaXRpbmcvTWVyZ2VJZGVudGljYWxFbGVt
ZW50c0NvbW1hbmQuaCcsCiAgICAgICAgICAgICAnZWRpdGluZy9Nb2RpZnlTZWxlY3Rpb25MaXN0
TGV2ZWwuY3BwJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dl
YkNvcmUucHJvCmluZGV4IGQ0NzkxODA2M2U3YzIwZWVkZjhlMDVmOWEzYzkxMGVkOWI3NDQ1ODku
LmZhNzM0NTA2OTNiMTA2ZTY4Mzk5ZmM4YjBhYmU0NzFjZDBkNDM0MmQgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtNzk1LDYgKzc5
NSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGVkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwIFwK
ICAgICBlZGl0aW5nL0pvaW5UZXh0Tm9kZXNDb21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9tYXJr
dXAuY3BwIFwKKyAgICBlZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcCBcCiAgICAgZWRpdGlu
Zy9NZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZC5jcHAgXAogICAgIGVkaXRpbmcvTW9kaWZ5
U2VsZWN0aW9uTGlzdExldmVsLmNwcCBcCiAgICAgZWRpdGluZy9Nb3ZlU2VsZWN0aW9uQ29tbWFu
ZC5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
aiBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggMDc3MTA3Mjk3
YTUwMDczMTU4ZWI3M2ZmN2RkYmM0OGRhN2E3Njg1Ni4uZWMyMGFmZjUyMzRiMTI4Yjc5MWZjZmJi
ODI2YjlhZGM4MDNhNjY1ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBA
IC00NjY1NSw2ICs0NjY1NSw2MiBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXE1hcmt1cEFjY3VtdWxhdG9yLmNwcCINCisJCQkJ
Pg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJ
CQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJ
CU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0
aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIi
DQorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCisJCQkJCT4NCisJCQkJCTxUb29sDQor
CQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZp
Z3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWdfSW50
ZXJuYWx8V2luMzIiDQorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCisJCQkJCT4NCisJ
CQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCS8+DQorCQkJ
CTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFt
ZT0iRGVidWdfQ2Fpcm98V2luMzIiDQorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCisJ
CQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJ
CS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0K
KwkJCQkJTmFtZT0iUmVsZWFzZV9DYWlyb3xXaW4zMiINCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxk
PSJ0cnVlIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJU
b29sIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25m
aWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIiDQorCQkJCQlFeGNsdWRlZEZy
b21CdWlsZD0idHJ1ZSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9G
aWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xNYXJrdXBBY2N1
bXVsYXRvci5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZl
UGF0aD0iLi5cZWRpdGluZ1xNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZC5jcHAiDQogCQkJ
CT4NCiAJCQkJPEZpbGVDb25maWd1cmF0aW9uDQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCA2NWFhZDdkMGQxMjFmMmE2NjRmOTZkNjUwNTUyNzA5NTQ2NDc0
N2QwLi5jMzIzYzk0NTgyYTY1MzU5NmRkYTYyZTNlZTQ0MDFjYWUzZWNlMWFhIDEwMDY0NAotLS0g
YS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjg2MSw2ICsyODYxLDggQEAK
IAkJOTcyMDVBQjgxMjM5MjkxMDAwQjE3MzgwIC8qIE1lZGlhRG9jdW1lbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MjA1QUI0MTIzOTI5MTAwMEIx
NzM4MCAvKiBNZWRpYURvY3VtZW50LmggKi87IH07CiAJCTk3MjA1QUJCMTIzOTI5MjcwMEIxNzM4
MCAvKiBQbHVnaW5Eb2N1bWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5NzIwNUFCOTEyMzkyOTI3MDBCMTczODAgLyogUGx1Z2luRG9jdW1lbnQu
Y3BwICovOyB9OwogCQk5NzIwNUFCQzEyMzkyOTI3MDBCMTczODAgLyogUGx1Z2luRG9jdW1lbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MjA1QUJB
MTIzOTI5MjcwMEIxNzM4MCAvKiBQbHVnaW5Eb2N1bWVudC5oICovOyB9OworCQk5NzI4QzMxMzEy
NjhFNDM5MDA0MUU4OUIgLyogTWFya3VwQWNjdW11bGF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcyOEMzMTExMjY4RTQzOTAwNDFFODlCIC8q
IE1hcmt1cEFjY3VtdWxhdG9yLmNwcCAqLzsgfTsKKwkJOTcyOEMzMTQxMjY4RTQzOTAwNDFFODlC
IC8qIE1hcmt1cEFjY3VtdWxhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5NzI4QzMxMjEyNjhFNDM5MDA0MUU4OUIgLyogTWFya3VwQWNjdW11bGF0
b3IuaCAqLzsgfTsKIAkJOTczODg5QTAxMTZFQTlEQzAwQURGMzEzIC8qIERvY3VtZW50V3JpdGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3Mzg4
OTlFMTE2RUE5REMwMEFERjMxMyAvKiBEb2N1bWVudFdyaXRlci5jcHAgKi87IH07CiAJCTk3Mzg4
OUExMTE2RUE5REMwMEFERjMxMyAvKiBEb2N1bWVudFdyaXRlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTczODg5OUYxMTZFQTlEQzAwQURGMzEzIC8q
IERvY3VtZW50V3JpdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJOTczRTMyNTYxMDg4M0I3QzAwNUJDNDkzIC8qIFJlc291cmNlTG9hZE5vdGlm
aWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3
M0UzMjU0MTA4ODNCN0MwMDVCQzQ5MyAvKiBSZXNvdXJjZUxvYWROb3RpZmllci5jcHAgKi87IH07
CkBAIC04ODk2LDYgKzg4OTgsOCBAQAogCQk5NzIwNUFCNDEyMzkyOTEwMDBCMTczODAgLyogTWVk
aWFEb2N1bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYURvY3Vt
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MjA1QUI5MTIzOTI5MjcwMEIx
NzM4MCAvKiBQbHVnaW5Eb2N1bWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBQbHVnaW5Eb2N1bWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTk3MjA1QUJBMTIzOTI5MjcwMEIxNzM4MCAvKiBQbHVnaW5Eb2N1bWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQbHVnaW5Eb2N1bWVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk5NzI4QzMxMTEyNjhFNDM5MDA0MUU4OUIgLyogTWFya3VwQWNjdW11bGF0
b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFya3VwQWNjdW11
bGF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzI4QzMxMjEyNjhFNDM5
MDA0MUU4OUIgLyogTWFya3VwQWNjdW11bGF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTWFya3VwQWNjdW11bGF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTczODg5OUUxMTZFQTlEQzAwQURGMzEzIC8qIERvY3VtZW50V3JpdGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERvY3VtZW50V3JpdGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTczODg5OUYxMTZFQTlEQzAwQURGMzEzIC8qIERvY3Vt
ZW50V3JpdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERvY3VtZW50V3Jp
dGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3M0UzMjU0MTA4ODNCN0MwMDVC
QzQ5MyAvKiBSZXNvdXJjZUxvYWROb3RpZmllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBSZXNvdXJjZUxvYWROb3RpZmllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xNDQwNiw2ICsxNDQxMCw4IEBACiAJCQkJOTMzMDlEQTUwOTlFNjQ5MTAw
NTZFNTgxIC8qIEpvaW5UZXh0Tm9kZXNDb21tYW5kLmggKi8sCiAJCQkJOTMzMDlEQTgwOTlFNjQ5
MTAwNTZFNTgxIC8qIG1hcmt1cC5jcHAgKi8sCiAJCQkJOTMzMDlEQTkwOTlFNjQ5MTAwNTZFNTgx
IC8qIG1hcmt1cC5oICovLAorCQkJCTk3MjhDMzExMTI2OEU0MzkwMDQxRTg5QiAvKiBNYXJrdXBB
Y2N1bXVsYXRvci5jcHAgKi8sCisJCQkJOTcyOEMzMTIxMjY4RTQzOTAwNDFFODlCIC8qIE1hcmt1
cEFjY3VtdWxhdG9yLmggKi8sCiAJCQkJOTMzMDlEQUEwOTlFNjQ5MTAwNTZFNTgxIC8qIE1lcmdl
SWRlbnRpY2FsRWxlbWVudHNDb21tYW5kLmNwcCAqLywKIAkJCQk5MzMwOURBQjA5OUU2NDkxMDA1
NkU1ODEgLyogTWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQuaCAqLywKIAkJCQlDNkQ3NEFF
MzA5QUEyOTBBMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcCAqLywKQEAg
LTIxMDc2LDYgKzIxMDgyLDcgQEAKIAkJCQlFMUJFNTEyRTBDRjZDNTEyMDAyRUE5NTkgLyogWFNM
VFVuaWNvZGVTb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0RENEQ4NzBGREY0RDZFMDBFQ0Y5
QTQgLyogWFNTQXVkaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEZBM0I5MEIxMjVDRDEyMjAw
MzAwQkFEIC8qIEluc3BlY3RvclN0YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQk5NzI4QzMxNDEy
NjhFNDM5MDA0MUU4OUIgLyogTWFya3VwQWNjdW11bGF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAt
MjExMzUsNyArMjExNDIsNiBAQAogCQkJaXNhID0gUEJYUHJvamVjdDsKIAkJCWJ1aWxkQ29uZmln
dXJhdGlvbkxpc3QgPSAxNDlDMjg0MzA4OTAyQjExMDA4QTlFRkMgLyogQnVpbGQgY29uZmlndXJh
dGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJXZWJDb3JlIiAqLzsKIAkJCWNvbXBhdGliaWxpdHlW
ZXJzaW9uID0gIlhjb2RlIDIuNCI7Ci0JCQlkZXZlbG9wbWVudFJlZ2lvbiA9IEVuZ2xpc2g7CiAJ
CQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMTsKIAkJCWtub3duUmVnaW9ucyA9ICgKIAkJCQlF
bmdsaXNoLApAQCAtMjM2MjQsNiArMjM2MzAsNyBAQAogCQkJCUUxQkU1MTJEMENGNkM1MTIwMDJF
QTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdERDREODYw
RkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1ZGl0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNEZB
M0I5MEExMjVDRDEyMjAwMzAwQkFEIC8qIEluc3BlY3RvclN0YXRlLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTk3MjhDMzEzMTI2OEU0MzkwMDQxRTg5QiAvKiBNYXJrdXBBY2N1bXVsYXRvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nQWxsSW5P
bmUuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdBbGxJbk9uZS5jcHAKaW5kZXggZDhiNTA0
ZTIzMWJhMDM1M2FhYzQ0NjFjMzQwOTI0OTI5Y2Y5NDk4OC4uYmE0ODRiZTAyZTdkZWE1ODI2OTA4
YjMwZjJlNTQ2YThlNWQ4NWQ3NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdB
bGxJbk9uZS5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdBbGxJbk9uZS5jcHAKQEAg
LTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlIDxJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5k
LmNwcD4KICNpbmNsdWRlIDxJbnNlcnRUZXh0Q29tbWFuZC5jcHA+CiAjaW5jbHVkZSA8Sm9pblRl
eHROb2Rlc0NvbW1hbmQuY3BwPgorI2luY2x1ZGUgPE1hcmt1cEFjY3VtdWxhdG9yLmNwcD4KICNp
bmNsdWRlIDxNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZC5jcHA+CiAjaW5jbHVkZSA8TW9k
aWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcD4KICNpbmNsdWRlIDxNb3ZlU2VsZWN0aW9uQ29tbWFu
ZC5jcHA+CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3Bw
IGIvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYTZl
NWNmM2RhZWZhZDk1MmQ2MjZjMWRkNmY4MTQ3YWFjYzVkM2I3Ci0tLSAvZGV2L251bGwKKysrIGIv
V2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcApAQCAtMCwwICsxLDQyNSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJNYXJrdXBBY2N1bXVsYXRvci5oIgorCisjaW5jbHVkZSAiQ0RBVEFTZWN0
aW9uLmgiCisjaW5jbHVkZSAiQ2hhcmFjdGVyTmFtZXMuaCIKKyNpbmNsdWRlICJDb21tZW50Lmgi
CisjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50VHlwZS5o
IgorI2luY2x1ZGUgIkVkaXRvci5oIgorI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlByb2Nlc3NpbmdJ
bnN0cnVjdGlvbi5oIgorI2luY2x1ZGUgIlhNTE5TTmFtZXMuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCit2b2lkIGFwcGVuZENoYXJhY3Rl
cnNSZXBsYWNpbmdFbnRpdGllcyhWZWN0b3I8VUNoYXI+JiBvdXQsIGNvbnN0IFVDaGFyKiBjb250
ZW50LCBzaXplX3QgbGVuZ3RoLCBFbnRpdHlNYXNrIGVudGl0eU1hc2spCit7CisgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGFtcFJlZmVyZW5jZSwgKCImYW1wOyIpKTsKKyAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgbHRSZWZlcmVuY2UsICgiJmx0OyIp
KTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgZ3RSZWZlcmVuY2UsICgi
Jmd0OyIpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgcXVvdFJlZmVy
ZW5jZSwgKCImcXVvdDsiKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcs
IG5ic3BSZWZlcmVuY2UsICgiJm5ic3A7IikpOworCisgICAgc3RhdGljIGNvbnN0IEVudGl0eURl
c2NyaXB0aW9uIGVudGl0eU1hcHNbXSA9IHsKKyAgICAgICAgeyAnJicsIGFtcFJlZmVyZW5jZSwg
RW50aXR5QW1wIH0sCisgICAgICAgIHsgJzwnLCBsdFJlZmVyZW5jZSwgRW50aXR5THQgfSwKKyAg
ICAgICAgeyAnPicsIGd0UmVmZXJlbmNlLCBFbnRpdHlHdCB9LAorICAgICAgICB7ICciJywgcXVv
dFJlZmVyZW5jZSwgRW50aXR5UXVvdCB9LAorICAgICAgICB7IG5vQnJlYWtTcGFjZSwgbmJzcFJl
ZmVyZW5jZSwgRW50aXR5TmJzcCB9LAorICAgIH07CisKKyAgICBzaXplX3QgcG9zaXRpb25BZnRl
ckxhc3RFbnRpdHkgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgZm9yIChzaXplX3QgbSA9IDA7IG0gPCBzaXplb2YoZW50aXR5TWFwcykgLyBz
aXplb2YoRW50aXR5RGVzY3JpcHRpb24pOyBtKyspIHsKKyAgICAgICAgICAgIGlmIChjb250ZW50
W2ldID09IGVudGl0eU1hcHNbbV0uZW50aXR5ICYmIGVudGl0eU1hcHNbbV0ubWFzayAmIGVudGl0
eU1hc2spIHsKKyAgICAgICAgICAgICAgICBvdXQuYXBwZW5kKGNvbnRlbnQgKyBwb3NpdGlvbkFm
dGVyTGFzdEVudGl0eSwgaSAtIHBvc2l0aW9uQWZ0ZXJMYXN0RW50aXR5KTsKKyAgICAgICAgICAg
ICAgICBhcHBlbmQob3V0LCBlbnRpdHlNYXBzW21dLnJlZmVyZW5jZSk7CisgICAgICAgICAgICAg
ICAgcG9zaXRpb25BZnRlckxhc3RFbnRpdHkgPSBpICsgMTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBvdXQuYXBwZW5kKGNvbnRl
bnQgKyBwb3NpdGlvbkFmdGVyTGFzdEVudGl0eSwgbGVuZ3RoIC0gcG9zaXRpb25BZnRlckxhc3RF
bnRpdHkpOworfQorCitNYXJrdXBBY2N1bXVsYXRvcjo6TWFya3VwQWNjdW11bGF0b3IoVmVjdG9y
PE5vZGUqPiogbm9kZXMsIEVBYnNvbHV0ZVVSTHMgc2hvdWxkUmVzb2x2ZVVSTHMsIGNvbnN0IFJh
bmdlKiByYW5nZSkKKyAgICA6IG1fbm9kZXMobm9kZXMpCisgICAgLCBtX3JhbmdlKHJhbmdlKQor
ICAgICwgbV9zaG91bGRSZXNvbHZlVVJMcyhzaG91bGRSZXNvbHZlVVJMcykKK3sKK30KKworTWFy
a3VwQWNjdW11bGF0b3I6On5NYXJrdXBBY2N1bXVsYXRvcigpCit7Cit9CisKK3ZvaWQgTWFya3Vw
QWNjdW11bGF0b3I6OmFwcGVuZFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBt
X3N1Y2NlZWRpbmdNYXJrdXAuYXBwZW5kKHN0cmluZyk7Cit9CisKK3ZvaWQgTWFya3VwQWNjdW11
bGF0b3I6OmFwcGVuZFN0YXJ0VGFnKE5vZGUqIG5vZGUsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMp
Cit7CisgICAgVmVjdG9yPFVDaGFyPiBtYXJrdXA7CisgICAgYXBwZW5kU3RhcnRNYXJrdXAobWFy
a3VwLCBub2RlLCBuYW1lc3BhY2VzKTsKKyAgICBtX3N1Y2NlZWRpbmdNYXJrdXAuYXBwZW5kKFN0
cmluZzo6YWRvcHQobWFya3VwKSk7CisgICAgaWYgKG1fbm9kZXMpCisgICAgICAgIG1fbm9kZXMt
PmFwcGVuZChub2RlKTsKK30KKwordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRW5kVGFn
KE5vZGUqIG5vZGUpCit7CisgICAgVmVjdG9yPFVDaGFyPiBtYXJrdXA7CisgICAgYXBwZW5kRW5k
TWFya3VwKG1hcmt1cCwgbm9kZSk7CisgICAgbV9zdWNjZWVkaW5nTWFya3VwLmFwcGVuZChTdHJp
bmc6OmFkb3B0KG1hcmt1cCkpOworfQorCisvLyBGSVhNRTogVGhpcyBpcyBhIHZlcnkgaW5lZmZp
Y2llbnQgd2F5IG9mIGFjY3VtdWxhdGluZyB0aGUgbWFya3VwLgorLy8gV2UncmUgY29udmVydGlu
ZyByZXN1bHRzIG9mIGFwcGVuZFN0YXJ0TWFya3VwIGFuZCBhcHBlbmRFbmRNYXJrdXAgZnJvbSBW
ZWN0b3I8VUNoYXI+IHRvIFN0cmluZworLy8gYW5kIHRoZW4gYmFjayB0byBWZWN0b3I8VUNoYXI+
IGFuZCBhZ2FpbiB0byBTdHJpbmcgaGVyZS4KK1N0cmluZyBNYXJrdXBBY2N1bXVsYXRvcjo6dGFr
ZVJlc3VsdHMoKQoreworICAgIHNpemVfdCBsZW5ndGggPSAwOworCisgICAgc2l6ZV90IHBvc3RD
b3VudCA9IG1fc3VjY2VlZGluZ01hcmt1cC5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBwb3N0Q291bnQ7ICsraSkKKyAgICAgICAgbGVuZ3RoICs9IG1fc3VjY2VlZGluZ01hcmt1
cFtpXS5sZW5ndGgoKTsKKworICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0OworICAgIHJlc3VsdC5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHBvc3RDb3VudDsgKytpKQorICAgICAgICBhcHBlbmQocmVzdWx0LCBtX3N1Y2NlZWRpbmdN
YXJrdXBbaV0pOworCisgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0KTsKK30KKwordm9p
ZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQXR0cmlidXRlVmFsdWUoVmVjdG9yPFVDaGFyPiYg
cmVzdWx0LCBjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZSwgYm9vbCBkb2N1bWVudElzSFRNTCkKK3sK
KyAgICBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMocmVzdWx0LCBhdHRyaWJ1dGUu
Y2hhcmFjdGVycygpLCBhdHRyaWJ1dGUubGVuZ3RoKCksCisgICAgICAgIGRvY3VtZW50SXNIVE1M
ID8gRW50aXR5TWFza0luSFRNTEF0dHJpYnV0ZVZhbHVlIDogRW50aXR5TWFza0luQXR0cmlidXRl
VmFsdWUpOworfQorCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRRdW90ZWRVUkxBdHRy
aWJ1dGVWYWx1ZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5n
KQoreworICAgIFVDaGFyIHF1b3RlQ2hhciA9ICdcIic7CisgICAgU3RyaW5nIHN0cmlwcGVkVVJM
U3RyaW5nID0gdXJsU3RyaW5nLnN0cmlwV2hpdGVTcGFjZSgpOworICAgIGlmIChwcm90b2NvbElz
SmF2YVNjcmlwdChzdHJpcHBlZFVSTFN0cmluZykpIHsKKyAgICAgICAgLy8gbWluaW1hbCBlc2Nh
cGluZyBmb3IgamF2YXNjcmlwdCB1cmxzCisgICAgICAgIGlmIChzdHJpcHBlZFVSTFN0cmluZy5j
b250YWlucygnIicpKSB7CisgICAgICAgICAgICBpZiAoc3RyaXBwZWRVUkxTdHJpbmcuY29udGFp
bnMoJ1wnJykpCisgICAgICAgICAgICAgICAgc3RyaXBwZWRVUkxTdHJpbmcucmVwbGFjZSgnXCIn
LCAiJnF1b3Q7Iik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcXVvdGVDaGFy
ID0gJ1wnJzsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQuYXBwZW5kKHF1b3RlQ2hhcik7Cisg
ICAgICAgIGFwcGVuZChyZXN1bHQsIHN0cmlwcGVkVVJMU3RyaW5nKTsKKyAgICAgICAgcmVzdWx0
LmFwcGVuZChxdW90ZUNoYXIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklY
TUU6IFRoaXMgZG9lcyBub3QgZnVsbHkgbWF0Y2ggb3RoZXIgYnJvd3NlcnMuIEZpcmVmb3ggcGVy
Y2VudC1lc2NhcGVzIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIGZvciBpbm5lckhUTUwuCisgICAgcmVz
dWx0LmFwcGVuZChxdW90ZUNoYXIpOworICAgIGFwcGVuZEF0dHJpYnV0ZVZhbHVlKHJlc3VsdCwg
dXJsU3RyaW5nLCBmYWxzZSk7CisgICAgcmVzdWx0LmFwcGVuZChxdW90ZUNoYXIpOworfQorCit2
b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmROb2RlVmFsdWUoVmVjdG9yPFVDaGFyPiYgb3V0
LCBjb25zdCBOb2RlKiBub2RlLCBjb25zdCBSYW5nZSogcmFuZ2UsIEVudGl0eU1hc2sgZW50aXR5
TWFzaykKK3sKKyAgICBTdHJpbmcgc3RyID0gbm9kZS0+bm9kZVZhbHVlKCk7CisgICAgY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMgPSBzdHIuY2hhcmFjdGVycygpOworICAgIHNpemVfdCBsZW5ndGgg
PSBzdHIubGVuZ3RoKCk7CisKKyAgICBpZiAocmFuZ2UpIHsKKyAgICAgICAgRXhjZXB0aW9uQ29k
ZSBlYzsKKyAgICAgICAgaWYgKG5vZGUgPT0gcmFuZ2UtPmVuZENvbnRhaW5lcihlYykpCisgICAg
ICAgICAgICBsZW5ndGggPSByYW5nZS0+ZW5kT2Zmc2V0KGVjKTsKKyAgICAgICAgaWYgKG5vZGUg
PT0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKSkgeworICAgICAgICAgICAgc2l6ZV90IHN0YXJ0
ID0gcmFuZ2UtPnN0YXJ0T2Zmc2V0KGVjKTsKKyAgICAgICAgICAgIGNoYXJhY3RlcnMgKz0gc3Rh
cnQ7CisgICAgICAgICAgICBsZW5ndGggLT0gc3RhcnQ7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMob3V0LCBjaGFyYWN0ZXJzLCBsZW5n
dGgsIGVudGl0eU1hc2spOworfQorCitib29sIE1hcmt1cEFjY3VtdWxhdG9yOjpzaG91bGRBZGRO
YW1lc3BhY2VFbGVtZW50KGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgLy8gRG9uJ3Qg
YWRkIG5hbWVzcGFjZSBhdHRyaWJ1dGUgaWYgaXQgaXMgYWxyZWFkeSBkZWZpbmVkIGZvciB0aGlz
IGVsZW0uCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXggPSBlbGVtZW50LT5wcmVmaXgo
KTsKKyAgICBBdG9taWNTdHJpbmcgYXR0ciA9ICFwcmVmaXguaXNFbXB0eSgpID8gInhtbG5zOiIg
KyBwcmVmaXggOiAieG1sbnMiOworICAgIHJldHVybiAhZWxlbWVudC0+aGFzQXR0cmlidXRlKGF0
dHIpOworfQorCitib29sIE1hcmt1cEFjY3VtdWxhdG9yOjpzaG91bGRBZGROYW1lc3BhY2VBdHRy
aWJ1dGUoY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUsIE5hbWVzcGFjZXMmIG5hbWVzcGFjZXMp
Cit7CisgICAgbmFtZXNwYWNlcy5jaGVja0NvbnNpc3RlbmN5KCk7CisKKyAgICAvLyBEb24ndCBh
ZGQgbmFtZXNwYWNlIGF0dHJpYnV0ZXMgdHdpY2UKKyAgICBpZiAoYXR0cmlidXRlLm5hbWUoKSA9
PSBYTUxOU05hbWVzOjp4bWxuc0F0dHIpIHsKKyAgICAgICAgbmFtZXNwYWNlcy5zZXQoZW1wdHlB
dG9tLmltcGwoKSwgYXR0cmlidXRlLnZhbHVlKCkuaW1wbCgpKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICAKKyAgICBRdWFsaWZpZWROYW1lIHhtbG5zUHJlZml4QXR0cih4bWxu
c0F0b20sIGF0dHJpYnV0ZS5sb2NhbE5hbWUoKSwgWE1MTlNOYW1lczo6eG1sbnNOYW1lc3BhY2VV
UkkpOworICAgIGlmIChhdHRyaWJ1dGUubmFtZSgpID09IHhtbG5zUHJlZml4QXR0cikgeworICAg
ICAgICBuYW1lc3BhY2VzLnNldChhdHRyaWJ1dGUubG9jYWxOYW1lKCkuaW1wbCgpLCBhdHRyaWJ1
dGUudmFsdWUoKS5pbXBsKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmROYW1l
c3BhY2UoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwg
Y29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIE5hbWVzcGFjZXMmIG5hbWVzcGFjZXMp
Cit7CisgICAgbmFtZXNwYWNlcy5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgaWYgKG5hbWVzcGFj
ZVVSSS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgLy8gVXNlIGVt
cHR5QXRvbXMncyBpbXBsKCkgZm9yIGJvdGggbnVsbCBhbmQgZW1wdHkgc3RyaW5ncyBzaW5jZSB0
aGUgSGFzaE1hcCBjYW4ndCBoYW5kbGUgMCBhcyBhIGtleQorICAgIEF0b21pY1N0cmluZ0ltcGwq
IHByZSA9IHByZWZpeC5pc0VtcHR5KCkgPyBlbXB0eUF0b20uaW1wbCgpIDogcHJlZml4LmltcGwo
KTsKKyAgICBBdG9taWNTdHJpbmdJbXBsKiBmb3VuZE5TID0gbmFtZXNwYWNlcy5nZXQocHJlKTsK
KyAgICBpZiAoZm91bmROUyAhPSBuYW1lc3BhY2VVUkkuaW1wbCgpKSB7CisgICAgICAgIG5hbWVz
cGFjZXMuc2V0KHByZSwgbmFtZXNwYWNlVVJJLmltcGwoKSk7CisgICAgICAgIHJlc3VsdC5hcHBl
bmQoJyAnKTsKKyAgICAgICAgYXBwZW5kKHJlc3VsdCwgeG1sbnNBdG9tLnN0cmluZygpKTsKKyAg
ICAgICAgaWYgKCFwcmVmaXguaXNFbXB0eSgpKSB7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KCc6Jyk7CisgICAgICAgICAgICBhcHBlbmQocmVzdWx0LCBwcmVmaXgpOworICAgICAgICB9CisK
KyAgICAgICAgcmVzdWx0LmFwcGVuZCgnPScpOworICAgICAgICByZXN1bHQuYXBwZW5kKCciJyk7
CisgICAgICAgIGFwcGVuZEF0dHJpYnV0ZVZhbHVlKHJlc3VsdCwgbmFtZXNwYWNlVVJJLCBmYWxz
ZSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoJyInKTsKKyAgICB9Cit9CisKK0VudGl0eU1hc2sg
TWFya3VwQWNjdW11bGF0b3I6OmVudGl0eU1hc2tGb3JUZXh0KFRleHQqIHRleHQpIGNvbnN0Cit7
CisgICAgY29uc3QgUXVhbGlmaWVkTmFtZSogcGFyZW50TmFtZSA9IDA7CisgICAgaWYgKHRleHQt
PnBhcmVudEVsZW1lbnQoKSkKKyAgICAgICAgcGFyZW50TmFtZSA9ICZzdGF0aWNfY2FzdDxFbGVt
ZW50Kj4odGV4dC0+cGFyZW50RWxlbWVudCgpKS0+dGFnUU5hbWUoKTsKKyAgICAKKyAgICBpZiAo
cGFyZW50TmFtZSAmJiAoKnBhcmVudE5hbWUgPT0gc2NyaXB0VGFnIHx8ICpwYXJlbnROYW1lID09
IHN0eWxlVGFnIHx8ICpwYXJlbnROYW1lID09IHhtcFRhZykpCisgICAgICAgIHJldHVybiBFbnRp
dHlNYXNrSW5DREFUQTsKKworICAgIHJldHVybiB0ZXh0LT5kb2N1bWVudCgpLT5pc0hUTUxEb2N1
bWVudCgpID8gRW50aXR5TWFza0luSFRNTFBDREFUQSA6IEVudGl0eU1hc2tJblBDREFUQTsKK30K
Kwordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dChWZWN0b3I8VUNoYXI+JiBvdXQs
IFRleHQqIHRleHQpCit7CisgICAgYXBwZW5kTm9kZVZhbHVlKG91dCwgdGV4dCwgbV9yYW5nZSwg
ZW50aXR5TWFza0ZvclRleHQodGV4dCkpOworfQorCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjph
cHBlbmRDb21tZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgU3RyaW5nJiBjb21tZW50KQor
eworICAgIC8vIEZJWE1FOiBDb21tZW50IGNvbnRlbnQgaXMgbm90IGVzY2FwZWQsIGJ1dCBYTUxT
ZXJpYWxpemVyIChhbmQgcG9zc2libHkgb3RoZXIgY2FsbGVycykgc2hvdWxkIHJhaXNlIGFuIGV4
Y2VwdGlvbiBpZiBpdCBpbmNsdWRlcyAiLS0+Ii4KKyAgICBhcHBlbmQob3V0LCAiPCEtLSIpOwor
ICAgIGFwcGVuZChvdXQsIGNvbW1lbnQpOworICAgIGFwcGVuZChvdXQsICItLT4iKTsKK30KKwor
dm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRG9jdW1lbnRUeXBlKFZlY3RvcjxVQ2hhcj4m
IHJlc3VsdCwgY29uc3QgRG9jdW1lbnRUeXBlKiBuKQoreworICAgIGlmIChuLT5uYW1lKCkuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhcHBlbmQocmVzdWx0LCAiPCFET0NUWVBF
ICIpOworICAgIGFwcGVuZChyZXN1bHQsIG4tPm5hbWUoKSk7CisgICAgaWYgKCFuLT5wdWJsaWNJ
ZCgpLmlzRW1wdHkoKSkgeworICAgICAgICBhcHBlbmQocmVzdWx0LCAiIFBVQkxJQyBcIiIpOwor
ICAgICAgICBhcHBlbmQocmVzdWx0LCBuLT5wdWJsaWNJZCgpKTsKKyAgICAgICAgYXBwZW5kKHJl
c3VsdCwgIlwiIik7CisgICAgICAgIGlmICghbi0+c3lzdGVtSWQoKS5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgIGFwcGVuZChyZXN1bHQsICIgXCIiKTsKKyAgICAgICAgICAgIGFwcGVuZChyZXN1
bHQsIG4tPnN5c3RlbUlkKCkpOworICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwgIlwiIik7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCFuLT5zeXN0ZW1JZCgpLmlzRW1wdHkoKSkgeworICAg
ICAgICBhcHBlbmQocmVzdWx0LCAiIFNZU1RFTSBcIiIpOworICAgICAgICBhcHBlbmQocmVzdWx0
LCBuLT5zeXN0ZW1JZCgpKTsKKyAgICAgICAgYXBwZW5kKHJlc3VsdCwgIlwiIik7CisgICAgfQor
ICAgIGlmICghbi0+aW50ZXJuYWxTdWJzZXQoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgYXBwZW5k
KHJlc3VsdCwgIiBbIik7CisgICAgICAgIGFwcGVuZChyZXN1bHQsIG4tPmludGVybmFsU3Vic2V0
KCkpOworICAgICAgICBhcHBlbmQocmVzdWx0LCAiXSIpOworICAgIH0KKyAgICBhcHBlbmQocmVz
dWx0LCAiPiIpOworfQorCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRQcm9jZXNzaW5n
SW5zdHJ1Y3Rpb24oVmVjdG9yPFVDaGFyPiYgb3V0LCBjb25zdCBTdHJpbmcmIHRhcmdldCwgY29u
c3QgU3RyaW5nJiBkYXRhKQoreworICAgIC8vIEZJWE1FOiBQSSBkYXRhIGlzIG5vdCBlc2NhcGVk
LCBidXQgWE1MU2VyaWFsaXplciAoYW5kIHBvc3NpYmx5IG90aGVyIGNhbGxlcnMpIHRoaXMgc2hv
dWxkIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBpdCBpbmNsdWRlcyAiPz4iLgorICAgIGFwcGVuZChv
dXQsICI8PyIpOworICAgIGFwcGVuZChvdXQsIHRhcmdldCk7CisgICAgYXBwZW5kKG91dCwgIiAi
KTsKKyAgICBhcHBlbmQob3V0LCBkYXRhKTsKKyAgICBhcHBlbmQob3V0LCAiPz4iKTsKK30KKwor
dm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChWZWN0b3I8VUNoYXI+JiBvdXQs
IEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCit7CisgICAgYXBwZW5k
T3BlblRhZyhvdXQsIGVsZW1lbnQsIG5hbWVzcGFjZXMpOworCisgICAgTmFtZWROb2RlTWFwKiBh
dHRyaWJ1dGVzID0gZWxlbWVudC0+YXR0cmlidXRlcygpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9
IGF0dHJpYnV0ZXMtPmxlbmd0aCgpOworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspCisgICAgICAgIGFwcGVuZEF0dHJpYnV0ZShvdXQsIGVsZW1lbnQsICphdHRy
aWJ1dGVzLT5hdHRyaWJ1dGVJdGVtKGkpLCBuYW1lc3BhY2VzKTsKKworICAgIGFwcGVuZENsb3Nl
VGFnKG91dCwgZWxlbWVudCk7Cit9CisKK3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZE9w
ZW5UYWcoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKiBu
YW1lc3BhY2VzKQoreworICAgIG91dC5hcHBlbmQoJzwnKTsKKyAgICBhcHBlbmQob3V0LCBlbGVt
ZW50LT5ub2RlTmFtZVByZXNlcnZpbmdDYXNlKCkpOworICAgIGlmICghZWxlbWVudC0+ZG9jdW1l
bnQoKS0+aXNIVE1MRG9jdW1lbnQoKSAmJiBuYW1lc3BhY2VzICYmIHNob3VsZEFkZE5hbWVzcGFj
ZUVsZW1lbnQoZWxlbWVudCkpCisgICAgICAgIGFwcGVuZE5hbWVzcGFjZShvdXQsIGVsZW1lbnQt
PnByZWZpeCgpLCBlbGVtZW50LT5uYW1lc3BhY2VVUkkoKSwgKm5hbWVzcGFjZXMpOyAgICAKK30K
Kwordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ2xvc2VUYWcoVmVjdG9yPFVDaGFyPiYg
b3V0LCBFbGVtZW50KiBlbGVtZW50KQoreworICAgIGlmIChzaG91bGRTZWxmQ2xvc2UoZWxlbWVu
dCkpIHsKKyAgICAgICAgaWYgKGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkKKyAgICAgICAgICAg
IG91dC5hcHBlbmQoJyAnKTsgLy8gWEhUTUwgMS4wIDwtPiBIVE1MIGNvbXBhdGliaWxpdHkuCisg
ICAgICAgIG91dC5hcHBlbmQoJy8nKTsKKyAgICB9CisgICAgb3V0LmFwcGVuZCgnPicpOworfQor
Cit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRBdHRyaWJ1dGUoVmVjdG9yPFVDaGFyPiYg
b3V0LCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSwgTmFtZXNw
YWNlcyogbmFtZXNwYWNlcykKK3sKKyAgICBib29sIGRvY3VtZW50SXNIVE1MID0gZWxlbWVudC0+
ZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKTsKKworICAgIG91dC5hcHBlbmQoJyAnKTsKKwor
ICAgIGlmIChkb2N1bWVudElzSFRNTCkKKyAgICAgICAgYXBwZW5kKG91dCwgYXR0cmlidXRlLm5h
bWUoKS5sb2NhbE5hbWUoKSk7CisgICAgZWxzZQorICAgICAgICBhcHBlbmQob3V0LCBhdHRyaWJ1
dGUubmFtZSgpLnRvU3RyaW5nKCkpOworCisgICAgb3V0LmFwcGVuZCgnPScpOworCisgICAgaWYg
KGVsZW1lbnQtPmlzVVJMQXR0cmlidXRlKGNvbnN0X2Nhc3Q8QXR0cmlidXRlKj4oJmF0dHJpYnV0
ZSkpKSB7CisgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gY29tcGxldGUgZmlsZTovLy8gVVJM
cyBiZWNhdXNlIGl0IG1heSBjb250YWluIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbgorICAgICAgICAv
LyBhYm91dCB0aGUgdXNlcidzIHN5c3RlbS4KKyAgICAgICAgaWYgKHNob3VsZFJlc29sdmVVUkxz
KCkgJiYgIWVsZW1lbnQtPmRvY3VtZW50KCktPnVybCgpLmlzTG9jYWxGaWxlKCkpCisgICAgICAg
ICAgICBhcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShvdXQsIGVsZW1lbnQtPmRvY3VtZW50
KCktPmNvbXBsZXRlVVJMKGF0dHJpYnV0ZS52YWx1ZSgpKS5zdHJpbmcoKSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGFwcGVuZFF1b3RlZFVSTEF0dHJpYnV0ZVZhbHVlKG91dCwgYXR0cmli
dXRlLnZhbHVlKCkpOyAKKyAgICB9IGVsc2UgeworICAgICAgICBvdXQuYXBwZW5kKCdcIicpOwor
ICAgICAgICBhcHBlbmRBdHRyaWJ1dGVWYWx1ZShvdXQsIGF0dHJpYnV0ZS52YWx1ZSgpLCBkb2N1
bWVudElzSFRNTCk7CisgICAgICAgIG91dC5hcHBlbmQoJ1wiJyk7CisgICAgfQorCisgICAgaWYg
KCFkb2N1bWVudElzSFRNTCAmJiBuYW1lc3BhY2VzICYmIHNob3VsZEFkZE5hbWVzcGFjZUF0dHJp
YnV0ZShhdHRyaWJ1dGUsICpuYW1lc3BhY2VzKSkKKyAgICAgICAgYXBwZW5kTmFtZXNwYWNlKG91
dCwgYXR0cmlidXRlLnByZWZpeCgpLCBhdHRyaWJ1dGUubmFtZXNwYWNlVVJJKCksICpuYW1lc3Bh
Y2VzKTsKK30KKwordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ0RBVEFTZWN0aW9uKFZl
Y3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgU3RyaW5nJiBzZWN0aW9uKQoreworICAgIC8vIEZJWE1F
OiBDREFUQSBjb250ZW50IGlzIG5vdCBlc2NhcGVkLCBidXQgWE1MU2VyaWFsaXplciAoYW5kIHBv
c3NpYmx5IG90aGVyIGNhbGxlcnMpIHNob3VsZCByYWlzZSBhbiBleGNlcHRpb24gaWYgaXQgaW5j
bHVkZXMgIl1dPiIuCisgICAgYXBwZW5kKG91dCwgIjwhW0NEQVRBWyIpOworICAgIGFwcGVuZChv
dXQsIHNlY3Rpb24pOworICAgIGFwcGVuZChvdXQsICJdXT4iKTsKK30KKwordm9pZCBNYXJrdXBB
Y2N1bXVsYXRvcjo6YXBwZW5kU3RhcnRNYXJrdXAoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25z
dCBOb2RlKiBub2RlLCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQoreworICAgIGlmIChuYW1lc3Bh
Y2VzKQorICAgICAgICBuYW1lc3BhY2VzLT5jaGVja0NvbnNpc3RlbmN5KCk7CisKKyAgICBzd2l0
Y2ggKG5vZGUtPm5vZGVUeXBlKCkpIHsKKyAgICBjYXNlIE5vZGU6OlRFWFRfTk9ERToKKyAgICAg
ICAgYXBwZW5kVGV4dChyZXN1bHQsIHN0YXRpY19jYXN0PFRleHQqPihjb25zdF9jYXN0PE5vZGUq
Pihub2RlKSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5vZGU6OkNPTU1FTlRfTk9ERToK
KyAgICAgICAgYXBwZW5kQ29tbWVudChyZXN1bHQsIHN0YXRpY19jYXN0PGNvbnN0IENvbW1lbnQq
Pihub2RlKS0+ZGF0YSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOb2RlOjpET0NVTUVO
VF9OT0RFOgorICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfRlJBR01FTlRfTk9ERToKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9UWVBFX05PREU6CisgICAgICAgIGFwcGVu
ZERvY3VtZW50VHlwZShyZXN1bHQsIHN0YXRpY19jYXN0PGNvbnN0IERvY3VtZW50VHlwZSo+KG5v
ZGUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOb2RlOjpQUk9DRVNTSU5HX0lOU1RSVUNU
SU9OX05PREU6CisgICAgICAgIGFwcGVuZFByb2Nlc3NpbmdJbnN0cnVjdGlvbihyZXN1bHQsIHN0
YXRpY19jYXN0PGNvbnN0IFByb2Nlc3NpbmdJbnN0cnVjdGlvbio+KG5vZGUpLT50YXJnZXQoKSwg
c3RhdGljX2Nhc3Q8Y29uc3QgUHJvY2Vzc2luZ0luc3RydWN0aW9uKj4obm9kZSktPmRhdGEoKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTm9kZTo6RUxFTUVOVF9OT0RFOgorICAgICAgICBh
cHBlbmRFbGVtZW50KHJlc3VsdCwgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGNvbnN0X2Nhc3Q8Tm9k
ZSo+KG5vZGUpKSwgbmFtZXNwYWNlcyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTm9kZTo6
Q0RBVEFfU0VDVElPTl9OT0RFOgorICAgICAgICBhcHBlbmRDREFUQVNlY3Rpb24ocmVzdWx0LCBz
dGF0aWNfY2FzdDxjb25zdCBDREFUQVNlY3Rpb24qPihub2RlKS0+ZGF0YSgpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBOb2RlOjpBVFRSSUJVVEVfTk9ERToKKyAgICBjYXNlIE5vZGU6OkVO
VElUWV9OT0RFOgorICAgIGNhc2UgTm9kZTo6RU5USVRZX1JFRkVSRU5DRV9OT0RFOgorICAgIGNh
c2UgTm9kZTo6Tk9UQVRJT05fTk9ERToKKyAgICBjYXNlIE5vZGU6OlhQQVRIX05BTUVTUEFDRV9O
T0RFOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorfQorCisvLyBSdWxlcyBvZiBzZWxmLWNsb3N1cmUKKy8vIDEuIE5vIGVsZW1lbnRzIGluIEhU
TUwgZG9jdW1lbnRzIHVzZSB0aGUgc2VsZi1jbG9zaW5nIHN5bnRheC4KKy8vIDIuIEVsZW1lbnRz
IHcvIGNoaWxkcmVuIG5ldmVyIHNlbGYtY2xvc2UgYmVjYXVzZSB0aGV5IHVzZSBhIHNlcGFyYXRl
IGVuZCB0YWcuCisvLyAzLiBIVE1MIGVsZW1lbnRzIHdoaWNoIGRvIG5vdCBoYXZlIGEgImZvcmJp
ZGRlbiIgZW5kIHRhZyB3aWxsIGNsb3NlIHdpdGggYSBzZXBhcmF0ZSBlbmQgdGFnLgorLy8gNC4g
T3RoZXIgZWxlbWVudHMgc2VsZi1jbG9zZS4KK2Jvb2wgTWFya3VwQWNjdW11bGF0b3I6OnNob3Vs
ZFNlbGZDbG9zZShjb25zdCBOb2RlKiBub2RlKQoreworICAgIGlmIChub2RlLT5kb2N1bWVudCgp
LT5pc0hUTUxEb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG5vZGUt
Pmhhc0NoaWxkTm9kZXMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChub2RlLT5p
c0hUTUxFbGVtZW50KCkgJiYgIWVsZW1lbnRDYW5ub3RIYXZlRW5kVGFnKG5vZGUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTWFya3VwQWNjdW11
bGF0b3I6OmFwcGVuZEVuZE1hcmt1cChWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IE5vZGUq
IG5vZGUpCit7CisgICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkgfHwgc2hvdWxkU2VsZkNs
b3NlKG5vZGUpIHx8ICghbm9kZS0+aGFzQ2hpbGROb2RlcygpICYmIGVsZW1lbnRDYW5ub3RIYXZl
RW5kVGFnKG5vZGUpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVzdWx0LmFwcGVuZCgnPCcp
OworICAgIHJlc3VsdC5hcHBlbmQoJy8nKTsKKyAgICBhcHBlbmQocmVzdWx0LCBzdGF0aWNfY2Fz
dDxjb25zdCBFbGVtZW50Kj4obm9kZSktPm5vZGVOYW1lUHJlc2VydmluZ0Nhc2UoKSk7CisgICAg
cmVzdWx0LmFwcGVuZCgnPicpOworfQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcv
TWFya3VwQWNjdW11bGF0b3IuaCBiL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjM3NDEyNTk3NmRlYTBiZDg5YTllOTUyNDI1NzljMDAyNTQ5Nzk3OTYKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaApAQCAt
MCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgTWFya3VwQWNjdW11bGF0b3JfaAorI2RlZmluZSBNYXJrdXBBY2N1bXVsYXRvcl9oCisK
KyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIm1hcmt1cC5oIgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEF0dHJpYnV0ZTsKK2NsYXNzIERvY3VtZW50VHlwZTsKK2NsYXNz
IEVsZW1lbnQ7CitjbGFzcyBOb2RlOworY2xhc3MgUmFuZ2U7CisKK3R5cGVkZWYgSGFzaE1hcDxB
dG9taWNTdHJpbmdJbXBsKiwgQXRvbWljU3RyaW5nSW1wbCo+IE5hbWVzcGFjZXM7CisKK2VudW0g
RW50aXR5TWFzayB7CisgICAgRW50aXR5QW1wID0gMHgwMDAxLAorICAgIEVudGl0eUx0ID0gMHgw
MDAyLAorICAgIEVudGl0eUd0ID0gMHgwMDA0LAorICAgIEVudGl0eVF1b3QgPSAweDAwMDgsCisg
ICAgRW50aXR5TmJzcCA9IDB4MDAxMCwKKworICAgIC8vIE5vbi1icmVha2luZyBzcGFjZSBuZWVk
cyB0byBiZSBlc2NhcGVkIGluIGlubmVySFRNTCBmb3IgY29tcGF0aWJpbGl0eSByZWFzb24uIFNl
ZSBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8zMjg3OQorICAgIC8vIEhvd2V2ZXIs
IHdlIGNhbm5vdCBkbyB0aGlzIGluIGEgWE1MIGRvY3VtZW50IGJlY2F1c2UgaXQgZG9lcyBub3Qg
aGF2ZSB0aGUgZW50aXR5IHJlZmVyZW5jZSBkZWZpbmVkIChTZWUgdGhlIGJ1ZyAxOTIxNSkuCisg
ICAgRW50aXR5TWFza0luQ0RBVEEgPSAwLAorICAgIEVudGl0eU1hc2tJblBDREFUQSA9IEVudGl0
eUFtcCB8IEVudGl0eUx0IHwgRW50aXR5R3QsCisgICAgRW50aXR5TWFza0luSFRNTFBDREFUQSA9
IEVudGl0eU1hc2tJblBDREFUQSB8IEVudGl0eU5ic3AsCisgICAgRW50aXR5TWFza0luQXR0cmli
dXRlVmFsdWUgPSBFbnRpdHlBbXAgfCBFbnRpdHlMdCB8IEVudGl0eUd0IHwgRW50aXR5UXVvdCwK
KyAgICBFbnRpdHlNYXNrSW5IVE1MQXR0cmlidXRlVmFsdWUgPSBFbnRpdHlNYXNrSW5BdHRyaWJ1
dGVWYWx1ZSB8IEVudGl0eU5ic3AsCit9OworCitzdHJ1Y3QgRW50aXR5RGVzY3JpcHRpb24gewor
ICAgIFVDaGFyIGVudGl0eTsKKyAgICBjb25zdCBTdHJpbmcmIHJlZmVyZW5jZTsKKyAgICBFbnRp
dHlNYXNrIG1hc2s7Cit9OworCisvLyBGSVhNRTogTm9uY29weWFibGU/CitjbGFzcyBNYXJrdXBB
Y2N1bXVsYXRvciB7CitwdWJsaWM6CisgICAgTWFya3VwQWNjdW11bGF0b3IoVmVjdG9yPE5vZGUq
Piogbm9kZXMsIEVBYnNvbHV0ZVVSTHMgc2hvdWxkUmVzb2x2ZVVSTHMsIGNvbnN0IFJhbmdlKiBy
YW5nZSA9IDApOworICAgIHZpcnR1YWwgfk1hcmt1cEFjY3VtdWxhdG9yKCk7CisKKyAgICB2b2lk
IGFwcGVuZFN0cmluZyhjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGFwcGVuZFN0YXJ0VGFnKE5v
ZGUqLCBOYW1lc3BhY2VzKiA9IDApOworICAgIHZvaWQgYXBwZW5kRW5kVGFnKE5vZGUqKTsKKyAg
ICB2aXJ0dWFsIFN0cmluZyB0YWtlUmVzdWx0cygpOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBh
cHBlbmRBdHRyaWJ1dGVWYWx1ZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IFN0cmluZyYg
YXR0cmlidXRlLCBib29sIGRvY3VtZW50SXNIVE1MKTsKKyAgICB2b2lkIGFwcGVuZFF1b3RlZFVS
TEF0dHJpYnV0ZVZhbHVlKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgU3RyaW5nJiB1cmxT
dHJpbmcpOworICAgIHZvaWQgYXBwZW5kTm9kZVZhbHVlKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29u
c3QgTm9kZSosIGNvbnN0IFJhbmdlKiwgRW50aXR5TWFzayk7CisgICAgYm9vbCBzaG91bGRBZGRO
YW1lc3BhY2VFbGVtZW50KGNvbnN0IEVsZW1lbnQqKTsKKyAgICBib29sIHNob3VsZEFkZE5hbWVz
cGFjZUF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUmLCBOYW1lc3BhY2VzJik7CisgICAgdm9pZCBh
cHBlbmROYW1lc3BhY2UoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBBdG9taWNTdHJpbmcm
IHByZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIE5hbWVzcGFjZXMmKTsK
KyAgICBFbnRpdHlNYXNrIGVudGl0eU1hc2tGb3JUZXh0KFRleHQqIHRleHQpIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCBhcHBlbmRUZXh0KFZlY3RvcjxVQ2hhcj4mIG91dCwgVGV4dCopOworICAg
IHZvaWQgYXBwZW5kQ29tbWVudChWZWN0b3I8VUNoYXI+JiBvdXQsIGNvbnN0IFN0cmluZyYgY29t
bWVudCk7CisgICAgdm9pZCBhcHBlbmREb2N1bWVudFR5cGUoVmVjdG9yPFVDaGFyPiYgcmVzdWx0
LCBjb25zdCBEb2N1bWVudFR5cGUqKTsKKyAgICB2b2lkIGFwcGVuZFByb2Nlc3NpbmdJbnN0cnVj
dGlvbihWZWN0b3I8VUNoYXI+JiBvdXQsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJp
bmcmIGRhdGEpOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbGVtZW50KFZlY3RvcjxVQ2hhcj4m
IG91dCwgRWxlbWVudCosIE5hbWVzcGFjZXMqKTsKKyAgICB2b2lkIGFwcGVuZE9wZW5UYWcoVmVj
dG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKik7CisgICAgdm9p
ZCBhcHBlbmRDbG9zZVRhZyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQpOwor
ICAgIHZvaWQgYXBwZW5kQXR0cmlidXRlKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxl
bWVudCwgY29uc3QgQXR0cmlidXRlJiwgTmFtZXNwYWNlcyopOworICAgIHZvaWQgYXBwZW5kQ0RB
VEFTZWN0aW9uKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgU3RyaW5nJiBzZWN0aW9uKTsKKyAg
ICB2b2lkIGFwcGVuZFN0YXJ0TWFya3VwKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgTm9k
ZSosIE5hbWVzcGFjZXMqKTsKKyAgICBib29sIHNob3VsZFNlbGZDbG9zZShjb25zdCBOb2RlKik7
CisgICAgdm9pZCBhcHBlbmRFbmRNYXJrdXAoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBO
b2RlKik7CisKKyAgICBib29sIHNob3VsZFJlc29sdmVVUkxzKCkgeyByZXR1cm4gbV9zaG91bGRS
ZXNvbHZlVVJMcyA9PSBBYnNvbHV0ZVVSTHM7IH0KKworICAgIFZlY3RvcjxOb2RlKj4qIGNvbnN0
IG1fbm9kZXM7CisgICAgY29uc3QgUmFuZ2UqIGNvbnN0IG1fcmFuZ2U7CisgICAgVmVjdG9yPFN0
cmluZz4gbV9zdWNjZWVkaW5nTWFya3VwOworCitwcml2YXRlOgorICAgIGNvbnN0IGJvb2wgbV9z
aG91bGRSZXNvbHZlVVJMczsKK307CisKKy8vIEZJWE1FOiBUaGlzIG1ldGhvZCBzaG91bGQgYmUg
aW50ZWdyYXRlZCB3aXRoIE1hcmt1cEFjY3VtdWxhdG9yLgordm9pZCBhcHBlbmRDaGFyYWN0ZXJz
UmVwbGFjaW5nRW50aXRpZXMoVmVjdG9yPFVDaGFyPiYgb3V0LCBjb25zdCBVQ2hhciogY29udGVu
dCwgc2l6ZV90IGxlbmd0aCwgRW50aXR5TWFzayBlbnRpdHlNYXNrKTsKKworfQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwIGIvV2ViQ29yZS9lZGl0aW5n
L21hcmt1cC5jcHAKaW5kZXggODI0OTliZmEzOTBhMDQyZmQwNDU2MjI1OWU2OThkZjgwMDRlMTk1
NC4uOGY3YjhhNTE5YTBiYmRmNzUzZTJiOTQ1ZTgwNTIxMWQzZmU1NDI5NyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5j
cHAKQEAgLTUyLDYgKzUyLDcgQEAKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVk
ZSAiS1VSTC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJNYXJrdXBBY2N1bXVs
YXRvci5oIgogI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgogI2luY2x1ZGUgIlJh
bmdlLmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCkBAIC05MSw0MTkgKzkyLDggQEAgcHJp
dmF0ZToKICAgICBRdWFsaWZpZWROYW1lIG1fbmFtZTsKICAgICBTdHJpbmcgbV92YWx1ZTsKIH07
Ci0gICAgCi1lbnVtIEVudGl0eU1hc2sgewotICAgIEVudGl0eUFtcCA9IDB4MDAwMSwKLSAgICBF
bnRpdHlMdCA9IDB4MDAwMiwKLSAgICBFbnRpdHlHdCA9IDB4MDAwNCwKLSAgICBFbnRpdHlRdW90
ID0gMHgwMDA4LAotICAgIEVudGl0eU5ic3AgPSAweDAwMTAsCi0KLSAgICAvLyBOb24tYnJlYWtp
bmcgc3BhY2UgbmVlZHMgdG8gYmUgZXNjYXBlZCBpbiBpbm5lckhUTUwgZm9yIGNvbXBhdGliaWxp
dHkgcmVhc29uLiBTZWUgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMzI4NzkKLSAg
ICAvLyBIb3dldmVyLCB3ZSBjYW5ub3QgZG8gdGhpcyBpbiBhIFhNTCBkb2N1bWVudCBiZWNhdXNl
IGl0IGRvZXMgbm90IGhhdmUgdGhlIGVudGl0eSByZWZlcmVuY2UgZGVmaW5lZCAoU2VlIHRoZSBi
dWcgMTkyMTUpLgotICAgIEVudGl0eU1hc2tJbkNEQVRBID0gMCwKLSAgICBFbnRpdHlNYXNrSW5Q
Q0RBVEEgPSBFbnRpdHlBbXAgfCBFbnRpdHlMdCB8IEVudGl0eUd0LAotICAgIEVudGl0eU1hc2tJ
bkhUTUxQQ0RBVEEgPSBFbnRpdHlNYXNrSW5QQ0RBVEEgfCBFbnRpdHlOYnNwLAotICAgIEVudGl0
eU1hc2tJbkF0dHJpYnV0ZVZhbHVlID0gRW50aXR5QW1wIHwgRW50aXR5THQgfCBFbnRpdHlHdCB8
IEVudGl0eVF1b3QsCi0gICAgRW50aXR5TWFza0luSFRNTEF0dHJpYnV0ZVZhbHVlID0gRW50aXR5
TWFza0luQXR0cmlidXRlVmFsdWUgfCBFbnRpdHlOYnNwLAotfTsKLQotc3RydWN0IEVudGl0eURl
c2NyaXB0aW9uIHsKLSAgICBVQ2hhciBlbnRpdHk7Ci0gICAgY29uc3QgU3RyaW5nJiByZWZlcmVu
Y2U7Ci0gICAgRW50aXR5TWFzayBtYXNrOwotfTsKLQotc3RhdGljIHZvaWQgYXBwZW5kQ2hhcmFj
dGVyc1JlcGxhY2luZ0VudGl0aWVzKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgVUNoYXIqIGNv
bnRlbnQsIHNpemVfdCBsZW5ndGgsIEVudGl0eU1hc2sgZW50aXR5TWFzaykKLXsKLSAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgYW1wUmVmZXJlbmNlLCAoIiZhbXA7IikpOwot
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBsdFJlZmVyZW5jZSwgKCImbHQ7
IikpOwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBndFJlZmVyZW5jZSwg
KCImZ3Q7IikpOwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBxdW90UmVm
ZXJlbmNlLCAoIiZxdW90OyIpKTsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmlu
ZywgbmJzcFJlZmVyZW5jZSwgKCImbmJzcDsiKSk7Ci0KLSAgICBzdGF0aWMgY29uc3QgRW50aXR5
RGVzY3JpcHRpb24gZW50aXR5TWFwc1tdID0gewotICAgICAgICB7ICcmJywgYW1wUmVmZXJlbmNl
LCBFbnRpdHlBbXAgfSwKLSAgICAgICAgeyAnPCcsIGx0UmVmZXJlbmNlLCBFbnRpdHlMdCB9LAot
ICAgICAgICB7ICc+JywgZ3RSZWZlcmVuY2UsIEVudGl0eUd0IH0sCi0gICAgICAgIHsgJyInLCBx
dW90UmVmZXJlbmNlLCBFbnRpdHlRdW90IH0sCi0gICAgICAgIHsgbm9CcmVha1NwYWNlLCBuYnNw
UmVmZXJlbmNlLCBFbnRpdHlOYnNwIH0sCi0gICAgfTsKLQotICAgIHNpemVfdCBwb3NpdGlvbkFm
dGVyTGFzdEVudGl0eSA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7IGkr
KykgewotICAgICAgICBmb3IgKHNpemVfdCBtID0gMDsgbSA8IHNpemVvZihlbnRpdHlNYXBzKSAv
IHNpemVvZihFbnRpdHlEZXNjcmlwdGlvbik7IG0rKykgewotICAgICAgICAgICAgaWYgKGNvbnRl
bnRbaV0gPT0gZW50aXR5TWFwc1ttXS5lbnRpdHkgJiYgZW50aXR5TWFwc1ttXS5tYXNrICYgZW50
aXR5TWFzaykgewotICAgICAgICAgICAgICAgIG91dC5hcHBlbmQoY29udGVudCArIHBvc2l0aW9u
QWZ0ZXJMYXN0RW50aXR5LCBpIC0gcG9zaXRpb25BZnRlckxhc3RFbnRpdHkpOwotICAgICAgICAg
ICAgICAgIGFwcGVuZChvdXQsIGVudGl0eU1hcHNbbV0ucmVmZXJlbmNlKTsKLSAgICAgICAgICAg
ICAgICBwb3NpdGlvbkFmdGVyTGFzdEVudGl0eSA9IGkgKyAxOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIG91dC5hcHBlbmQoY29u
dGVudCArIHBvc2l0aW9uQWZ0ZXJMYXN0RW50aXR5LCBsZW5ndGggLSBwb3NpdGlvbkFmdGVyTGFz
dEVudGl0eSk7Ci19Ci0KLXR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgQXRvbWlj
U3RyaW5nSW1wbCo+IE5hbWVzcGFjZXM7Ci0KLWNsYXNzIE1hcmt1cEFjY3VtdWxhdG9yIHsKLXB1
YmxpYzoKLSAgICBNYXJrdXBBY2N1bXVsYXRvcihWZWN0b3I8Tm9kZSo+KiBub2RlcywgRUFic29s
dXRlVVJMcyBzaG91bGRSZXNvbHZlVVJMcywgY29uc3QgUmFuZ2UqIHJhbmdlID0gMCkKLSAgICAg
ICAgOiBtX25vZGVzKG5vZGVzKQotICAgICAgICAsIG1fcmFuZ2UocmFuZ2UpCi0gICAgICAgICwg
bV9zaG91bGRSZXNvbHZlVVJMcyhzaG91bGRSZXNvbHZlVVJMcykKLSAgICB7Ci0gICAgfQotICAg
IHZpcnR1YWwgfk1hcmt1cEFjY3VtdWxhdG9yKCkge30KLSAgICB2b2lkIGFwcGVuZFN0cmluZyhj
b25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIGFwcGVuZFN0YXJ0VGFnKE5vZGUqLCBOYW1lc3BhY2Vz
KiA9IDApOwotICAgIHZvaWQgYXBwZW5kRW5kVGFnKE5vZGUqKTsKLSAgICB2aXJ0dWFsIFN0cmlu
ZyB0YWtlUmVzdWx0cygpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCBhcHBlbmRBdHRyaWJ1dGVW
YWx1ZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IFN0cmluZyYgYXR0cmlidXRlLCBib29s
IGRvY3VtZW50SXNIVE1MKTsKLSAgICB2b2lkIGFwcGVuZFF1b3RlZFVSTEF0dHJpYnV0ZVZhbHVl
KFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpOwotICAgIHZv
aWQgYXBwZW5kTm9kZVZhbHVlKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgTm9kZSosIGNvbnN0
IFJhbmdlKiwgRW50aXR5TWFzayk7Ci0gICAgYm9vbCBzaG91bGRBZGROYW1lc3BhY2VFbGVtZW50
KGNvbnN0IEVsZW1lbnQqKTsKLSAgICBib29sIHNob3VsZEFkZE5hbWVzcGFjZUF0dHJpYnV0ZShj
b25zdCBBdHRyaWJ1dGUmLCBOYW1lc3BhY2VzJik7Ci0gICAgdm9pZCBhcHBlbmROYW1lc3BhY2Uo
VmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3Qg
QXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIE5hbWVzcGFjZXMmKTsKLSAgICBFbnRpdHlNYXNr
IGVudGl0eU1hc2tGb3JUZXh0KFRleHQqIHRleHQpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBh
cHBlbmRUZXh0KFZlY3RvcjxVQ2hhcj4mIG91dCwgVGV4dCopOwotICAgIHZvaWQgYXBwZW5kQ29t
bWVudChWZWN0b3I8VUNoYXI+JiBvdXQsIGNvbnN0IFN0cmluZyYgY29tbWVudCk7Ci0gICAgdm9p
ZCBhcHBlbmREb2N1bWVudFR5cGUoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBEb2N1bWVu
dFR5cGUqKTsKLSAgICB2b2lkIGFwcGVuZFByb2Nlc3NpbmdJbnN0cnVjdGlvbihWZWN0b3I8VUNo
YXI+JiBvdXQsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJpbmcmIGRhdGEpOwotICAg
IHZpcnR1YWwgdm9pZCBhcHBlbmRFbGVtZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCos
IE5hbWVzcGFjZXMqKTsKLSAgICB2b2lkIGFwcGVuZE9wZW5UYWcoVmVjdG9yPFVDaGFyPiYgb3V0
LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKik7Ci0gICAgdm9pZCBhcHBlbmRDbG9zZVRh
ZyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQpOwotICAgIHZvaWQgYXBwZW5k
QXR0cmlidXRlKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgQXR0
cmlidXRlJiwgTmFtZXNwYWNlcyopOwotICAgIHZvaWQgYXBwZW5kQ0RBVEFTZWN0aW9uKFZlY3Rv
cjxVQ2hhcj4mIG91dCwgY29uc3QgU3RyaW5nJiBzZWN0aW9uKTsKLSAgICB2b2lkIGFwcGVuZFN0
YXJ0TWFya3VwKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgTm9kZSosIE5hbWVzcGFjZXMq
KTsKLSAgICBib29sIHNob3VsZFNlbGZDbG9zZShjb25zdCBOb2RlKik7Ci0gICAgdm9pZCBhcHBl
bmRFbmRNYXJrdXAoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBOb2RlKik7Ci0KLSAgICBi
b29sIHNob3VsZFJlc29sdmVVUkxzKCkgeyByZXR1cm4gbV9zaG91bGRSZXNvbHZlVVJMcyA9PSBB
YnNvbHV0ZVVSTHM7IH0KLQotICAgIFZlY3RvcjxOb2RlKj4qIGNvbnN0IG1fbm9kZXM7Ci0gICAg
Y29uc3QgUmFuZ2UqIGNvbnN0IG1fcmFuZ2U7Ci0gICAgVmVjdG9yPFN0cmluZz4gbV9zdWNjZWVk
aW5nTWFya3VwOwotCi1wcml2YXRlOgotICAgIGNvbnN0IGJvb2wgbV9zaG91bGRSZXNvbHZlVVJM
czsKLX07Ci0KLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0cmluZyhjb25zdCBTdHJp
bmcmIHN0cmluZykKLXsKLSAgICBtX3N1Y2NlZWRpbmdNYXJrdXAuYXBwZW5kKHN0cmluZyk7Ci19
Ci0KLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0YXJ0VGFnKE5vZGUqIG5vZGUsIE5h
bWVzcGFjZXMqIG5hbWVzcGFjZXMpCi17Ci0gICAgVmVjdG9yPFVDaGFyPiBtYXJrdXA7Ci0gICAg
YXBwZW5kU3RhcnRNYXJrdXAobWFya3VwLCBub2RlLCBuYW1lc3BhY2VzKTsKLSAgICBtX3N1Y2Nl
ZWRpbmdNYXJrdXAuYXBwZW5kKFN0cmluZzo6YWRvcHQobWFya3VwKSk7Ci0gICAgaWYgKG1fbm9k
ZXMpCi0gICAgICAgIG1fbm9kZXMtPmFwcGVuZChub2RlKTsKLX0KLQotdm9pZCBNYXJrdXBBY2N1
bXVsYXRvcjo6YXBwZW5kRW5kVGFnKE5vZGUqIG5vZGUpCi17Ci0gICAgVmVjdG9yPFVDaGFyPiBt
YXJrdXA7Ci0gICAgYXBwZW5kRW5kTWFya3VwKG1hcmt1cCwgbm9kZSk7Ci0gICAgbV9zdWNjZWVk
aW5nTWFya3VwLmFwcGVuZChTdHJpbmc6OmFkb3B0KG1hcmt1cCkpOwotfQotCi0vLyBGSVhNRTog
VGhpcyBpcyBhIHZlcnkgaW5lZmZpY2llbnQgd2F5IG9mIGFjY3VtdWxhdGluZyB0aGUgbWFya3Vw
LgotLy8gV2UncmUgY29udmVydGluZyByZXN1bHRzIG9mIGFwcGVuZFN0YXJ0TWFya3VwIGFuZCBh
cHBlbmRFbmRNYXJrdXAgZnJvbSBWZWN0b3I8VUNoYXI+IHRvIFN0cmluZwotLy8gYW5kIHRoZW4g
YmFjayB0byBWZWN0b3I8VUNoYXI+IGFuZCBhZ2FpbiB0byBTdHJpbmcgaGVyZS4KLVN0cmluZyBN
YXJrdXBBY2N1bXVsYXRvcjo6dGFrZVJlc3VsdHMoKQotewotICAgIHNpemVfdCBsZW5ndGggPSAw
OwotCi0gICAgc2l6ZV90IHBvc3RDb3VudCA9IG1fc3VjY2VlZGluZ01hcmt1cC5zaXplKCk7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwb3N0Q291bnQ7ICsraSkKLSAgICAgICAgbGVuZ3Ro
ICs9IG1fc3VjY2VlZGluZ01hcmt1cFtpXS5sZW5ndGgoKTsKLQotICAgIFZlY3RvcjxVQ2hhcj4g
cmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7Ci0KLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBvc3RDb3VudDsgKytpKQotICAgICAgICBhcHBlbmQo
cmVzdWx0LCBtX3N1Y2NlZWRpbmdNYXJrdXBbaV0pOwotCi0gICAgcmV0dXJuIFN0cmluZzo6YWRv
cHQocmVzdWx0KTsKLX0KLQotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQXR0cmlidXRl
VmFsdWUoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZSwgYm9v
bCBkb2N1bWVudElzSFRNTCkKLXsKLSAgICBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRp
ZXMocmVzdWx0LCBhdHRyaWJ1dGUuY2hhcmFjdGVycygpLCBhdHRyaWJ1dGUubGVuZ3RoKCksCi0g
ICAgICAgIGRvY3VtZW50SXNIVE1MID8gRW50aXR5TWFza0luSFRNTEF0dHJpYnV0ZVZhbHVlIDog
RW50aXR5TWFza0luQXR0cmlidXRlVmFsdWUpOwotfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9y
OjphcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNv
bnN0IFN0cmluZyYgdXJsU3RyaW5nKQotewotICAgIFVDaGFyIHF1b3RlQ2hhciA9ICdcIic7Ci0g
ICAgU3RyaW5nIHN0cmlwcGVkVVJMU3RyaW5nID0gdXJsU3RyaW5nLnN0cmlwV2hpdGVTcGFjZSgp
OwotICAgIGlmIChwcm90b2NvbElzSmF2YVNjcmlwdChzdHJpcHBlZFVSTFN0cmluZykpIHsKLSAg
ICAgICAgLy8gbWluaW1hbCBlc2NhcGluZyBmb3IgamF2YXNjcmlwdCB1cmxzCi0gICAgICAgIGlm
IChzdHJpcHBlZFVSTFN0cmluZy5jb250YWlucygnIicpKSB7Ci0gICAgICAgICAgICBpZiAoc3Ry
aXBwZWRVUkxTdHJpbmcuY29udGFpbnMoJ1wnJykpCi0gICAgICAgICAgICAgICAgc3RyaXBwZWRV
UkxTdHJpbmcucmVwbGFjZSgnXCInLCAiJnF1b3Q7Iik7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgcXVvdGVDaGFyID0gJ1wnJzsKLSAgICAgICAgfQotICAgICAgICByZXN1bHQu
YXBwZW5kKHF1b3RlQ2hhcik7Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsIHN0cmlwcGVkVVJMU3Ry
aW5nKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChxdW90ZUNoYXIpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFRoaXMgZG9lcyBub3QgZnVsbHkgbWF0Y2ggb3RoZXIg
YnJvd3NlcnMuIEZpcmVmb3ggcGVyY2VudC1lc2NhcGVzIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIGZv
ciBpbm5lckhUTUwuCi0gICAgcmVzdWx0LmFwcGVuZChxdW90ZUNoYXIpOwotICAgIGFwcGVuZEF0
dHJpYnV0ZVZhbHVlKHJlc3VsdCwgdXJsU3RyaW5nLCBmYWxzZSk7Ci0gICAgcmVzdWx0LmFwcGVu
ZChxdW90ZUNoYXIpOwotfQotCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmROb2RlVmFs
dWUoVmVjdG9yPFVDaGFyPiYgb3V0LCBjb25zdCBOb2RlKiBub2RlLCBjb25zdCBSYW5nZSogcmFu
Z2UsIEVudGl0eU1hc2sgZW50aXR5TWFzaykKLXsKLSAgICBTdHJpbmcgc3RyID0gbm9kZS0+bm9k
ZVZhbHVlKCk7Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBzdHIuY2hhcmFjdGVycygp
OwotICAgIHNpemVfdCBsZW5ndGggPSBzdHIubGVuZ3RoKCk7Ci0KLSAgICBpZiAocmFuZ2UpIHsK
LSAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICAgICAgaWYgKG5vZGUgPT0gcmFuZ2UtPmVu
ZENvbnRhaW5lcihlYykpCi0gICAgICAgICAgICBsZW5ndGggPSByYW5nZS0+ZW5kT2Zmc2V0KGVj
KTsKLSAgICAgICAgaWYgKG5vZGUgPT0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKSkgewotICAg
ICAgICAgICAgc2l6ZV90IHN0YXJ0ID0gcmFuZ2UtPnN0YXJ0T2Zmc2V0KGVjKTsKLSAgICAgICAg
ICAgIGNoYXJhY3RlcnMgKz0gc3RhcnQ7Ci0gICAgICAgICAgICBsZW5ndGggLT0gc3RhcnQ7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMo
b3V0LCBjaGFyYWN0ZXJzLCBsZW5ndGgsIGVudGl0eU1hc2spOwotfQotCi1ib29sIE1hcmt1cEFj
Y3VtdWxhdG9yOjpzaG91bGRBZGROYW1lc3BhY2VFbGVtZW50KGNvbnN0IEVsZW1lbnQqIGVsZW1l
bnQpCi17Ci0gICAgLy8gRG9uJ3QgYWRkIG5hbWVzcGFjZSBhdHRyaWJ1dGUgaWYgaXQgaXMgYWxy
ZWFkeSBkZWZpbmVkIGZvciB0aGlzIGVsZW0uCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVm
aXggPSBlbGVtZW50LT5wcmVmaXgoKTsKLSAgICBBdG9taWNTdHJpbmcgYXR0ciA9ICFwcmVmaXgu
aXNFbXB0eSgpID8gInhtbG5zOiIgKyBwcmVmaXggOiAieG1sbnMiOwotICAgIHJldHVybiAhZWxl
bWVudC0+aGFzQXR0cmlidXRlKGF0dHIpOwotfQotCi1ib29sIE1hcmt1cEFjY3VtdWxhdG9yOjpz
aG91bGRBZGROYW1lc3BhY2VBdHRyaWJ1dGUoY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUsIE5h
bWVzcGFjZXMmIG5hbWVzcGFjZXMpCi17Ci0gICAgbmFtZXNwYWNlcy5jaGVja0NvbnNpc3RlbmN5
KCk7Ci0KLSAgICAvLyBEb24ndCBhZGQgbmFtZXNwYWNlIGF0dHJpYnV0ZXMgdHdpY2UKLSAgICBp
ZiAoYXR0cmlidXRlLm5hbWUoKSA9PSBYTUxOU05hbWVzOjp4bWxuc0F0dHIpIHsKLSAgICAgICAg
bmFtZXNwYWNlcy5zZXQoZW1wdHlBdG9tLmltcGwoKSwgYXR0cmlidXRlLnZhbHVlKCkuaW1wbCgp
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBRdWFsaWZpZWROYW1l
IHhtbG5zUHJlZml4QXR0cih4bWxuc0F0b20sIGF0dHJpYnV0ZS5sb2NhbE5hbWUoKSwgWE1MTlNO
YW1lczo6eG1sbnNOYW1lc3BhY2VVUkkpOwotICAgIGlmIChhdHRyaWJ1dGUubmFtZSgpID09IHht
bG5zUHJlZml4QXR0cikgewotICAgICAgICBuYW1lc3BhY2VzLnNldChhdHRyaWJ1dGUubG9jYWxO
YW1lKCkuaW1wbCgpLCBhdHRyaWJ1dGUudmFsdWUoKS5pbXBsKCkpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIE1hcmt1cEFj
Y3VtdWxhdG9yOjphcHBlbmROYW1lc3BhY2UoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBB
dG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIE5h
bWVzcGFjZXMmIG5hbWVzcGFjZXMpCi17Ci0gICAgbmFtZXNwYWNlcy5jaGVja0NvbnNpc3RlbmN5
KCk7Ci0gICAgaWYgKG5hbWVzcGFjZVVSSS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICAgICAgCi0gICAgLy8gVXNlIGVtcHR5QXRvbXMncyBpbXBsKCkgZm9yIGJvdGggbnVsbCBhbmQg
ZW1wdHkgc3RyaW5ncyBzaW5jZSB0aGUgSGFzaE1hcCBjYW4ndCBoYW5kbGUgMCBhcyBhIGtleQot
ICAgIEF0b21pY1N0cmluZ0ltcGwqIHByZSA9IHByZWZpeC5pc0VtcHR5KCkgPyBlbXB0eUF0b20u
aW1wbCgpIDogcHJlZml4LmltcGwoKTsKLSAgICBBdG9taWNTdHJpbmdJbXBsKiBmb3VuZE5TID0g
bmFtZXNwYWNlcy5nZXQocHJlKTsKLSAgICBpZiAoZm91bmROUyAhPSBuYW1lc3BhY2VVUkkuaW1w
bCgpKSB7Ci0gICAgICAgIG5hbWVzcGFjZXMuc2V0KHByZSwgbmFtZXNwYWNlVVJJLmltcGwoKSk7
Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwgeG1s
bnNBdG9tLnN0cmluZygpKTsKLSAgICAgICAgaWYgKCFwcmVmaXguaXNFbXB0eSgpKSB7Ci0gICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKCc6Jyk7Ci0gICAgICAgICAgICBhcHBlbmQocmVzdWx0LCBw
cmVmaXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVzdWx0LmFwcGVuZCgnPScpOwotICAgICAg
ICByZXN1bHQuYXBwZW5kKCciJyk7Ci0gICAgICAgIGFwcGVuZEF0dHJpYnV0ZVZhbHVlKHJlc3Vs
dCwgbmFtZXNwYWNlVVJJLCBmYWxzZSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoJyInKTsKLSAg
ICB9Ci19Ci0KLUVudGl0eU1hc2sgTWFya3VwQWNjdW11bGF0b3I6OmVudGl0eU1hc2tGb3JUZXh0
KFRleHQqIHRleHQpIGNvbnN0Ci17Ci0gICAgY29uc3QgUXVhbGlmaWVkTmFtZSogcGFyZW50TmFt
ZSA9IDA7Ci0gICAgaWYgKHRleHQtPnBhcmVudEVsZW1lbnQoKSkKLSAgICAgICAgcGFyZW50TmFt
ZSA9ICZzdGF0aWNfY2FzdDxFbGVtZW50Kj4odGV4dC0+cGFyZW50RWxlbWVudCgpKS0+dGFnUU5h
bWUoKTsKLSAgICAKLSAgICBpZiAocGFyZW50TmFtZSAmJiAoKnBhcmVudE5hbWUgPT0gc2NyaXB0
VGFnIHx8ICpwYXJlbnROYW1lID09IHN0eWxlVGFnIHx8ICpwYXJlbnROYW1lID09IHhtcFRhZykp
Ci0gICAgICAgIHJldHVybiBFbnRpdHlNYXNrSW5DREFUQTsKLQotICAgIHJldHVybiB0ZXh0LT5k
b2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpID8gRW50aXR5TWFza0luSFRNTFBDREFUQSA6IEVu
dGl0eU1hc2tJblBDREFUQTsKLX0KLQotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4
dChWZWN0b3I8VUNoYXI+JiBvdXQsIFRleHQqIHRleHQpCi17Ci0gICAgYXBwZW5kTm9kZVZhbHVl
KG91dCwgdGV4dCwgbV9yYW5nZSwgZW50aXR5TWFza0ZvclRleHQodGV4dCkpOwotfQotCi12b2lk
IE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDb21tZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwgY29u
c3QgU3RyaW5nJiBjb21tZW50KQotewotICAgIC8vIEZJWE1FOiBDb21tZW50IGNvbnRlbnQgaXMg
bm90IGVzY2FwZWQsIGJ1dCBYTUxTZXJpYWxpemVyIChhbmQgcG9zc2libHkgb3RoZXIgY2FsbGVy
cykgc2hvdWxkIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBpdCBpbmNsdWRlcyAiLS0+Ii4KLSAgICBh
cHBlbmQob3V0LCAiPCEtLSIpOwotICAgIGFwcGVuZChvdXQsIGNvbW1lbnQpOwotICAgIGFwcGVu
ZChvdXQsICItLT4iKTsKLX0KLQotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRG9jdW1l
bnRUeXBlKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgRG9jdW1lbnRUeXBlKiBuKQotewot
ICAgIGlmIChuLT5uYW1lKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhcHBl
bmQocmVzdWx0LCAiPCFET0NUWVBFICIpOwotICAgIGFwcGVuZChyZXN1bHQsIG4tPm5hbWUoKSk7
Ci0gICAgaWYgKCFuLT5wdWJsaWNJZCgpLmlzRW1wdHkoKSkgewotICAgICAgICBhcHBlbmQocmVz
dWx0LCAiIFBVQkxJQyBcIiIpOwotICAgICAgICBhcHBlbmQocmVzdWx0LCBuLT5wdWJsaWNJZCgp
KTsKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwgIlwiIik7Ci0gICAgICAgIGlmICghbi0+c3lzdGVt
SWQoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsICIgXCIiKTsKLSAg
ICAgICAgICAgIGFwcGVuZChyZXN1bHQsIG4tPnN5c3RlbUlkKCkpOwotICAgICAgICAgICAgYXBw
ZW5kKHJlc3VsdCwgIlwiIik7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKCFuLT5zeXN0ZW1J
ZCgpLmlzRW1wdHkoKSkgewotICAgICAgICBhcHBlbmQocmVzdWx0LCAiIFNZU1RFTSBcIiIpOwot
ICAgICAgICBhcHBlbmQocmVzdWx0LCBuLT5zeXN0ZW1JZCgpKTsKLSAgICAgICAgYXBwZW5kKHJl
c3VsdCwgIlwiIik7Ci0gICAgfQotICAgIGlmICghbi0+aW50ZXJuYWxTdWJzZXQoKS5pc0VtcHR5
KCkpIHsKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwgIiBbIik7Ci0gICAgICAgIGFwcGVuZChyZXN1
bHQsIG4tPmludGVybmFsU3Vic2V0KCkpOwotICAgICAgICBhcHBlbmQocmVzdWx0LCAiXSIpOwot
ICAgIH0KLSAgICBhcHBlbmQocmVzdWx0LCAiPiIpOwotfQotCi12b2lkIE1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oVmVjdG9yPFVDaGFyPiYgb3V0LCBjb25z
dCBTdHJpbmcmIHRhcmdldCwgY29uc3QgU3RyaW5nJiBkYXRhKQotewotICAgIC8vIEZJWE1FOiBQ
SSBkYXRhIGlzIG5vdCBlc2NhcGVkLCBidXQgWE1MU2VyaWFsaXplciAoYW5kIHBvc3NpYmx5IG90
aGVyIGNhbGxlcnMpIHRoaXMgc2hvdWxkIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBpdCBpbmNsdWRl
cyAiPz4iLgotICAgIGFwcGVuZChvdXQsICI8PyIpOwotICAgIGFwcGVuZChvdXQsIHRhcmdldCk7
Ci0gICAgYXBwZW5kKG91dCwgIiAiKTsKLSAgICBhcHBlbmQob3V0LCBkYXRhKTsKLSAgICBhcHBl
bmQob3V0LCAiPz4iKTsKLX0KLQotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVu
dChWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVz
cGFjZXMpCi17Ci0gICAgYXBwZW5kT3BlblRhZyhvdXQsIGVsZW1lbnQsIG5hbWVzcGFjZXMpOwot
Ci0gICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0gZWxlbWVudC0+YXR0cmlidXRlcygpOwot
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IGF0dHJpYnV0ZXMtPmxlbmd0aCgpOwotICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCi0gICAgICAgIGFwcGVuZEF0dHJpYnV0
ZShvdXQsIGVsZW1lbnQsICphdHRyaWJ1dGVzLT5hdHRyaWJ1dGVJdGVtKGkpLCBuYW1lc3BhY2Vz
KTsKLQotICAgIGFwcGVuZENsb3NlVGFnKG91dCwgZWxlbWVudCk7Ci19Ci0KLXZvaWQgTWFya3Vw
QWNjdW11bGF0b3I6OmFwcGVuZE9wZW5UYWcoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBl
bGVtZW50LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQotewotICAgIG91dC5hcHBlbmQoJzwnKTsK
LSAgICBhcHBlbmQob3V0LCBlbGVtZW50LT5ub2RlTmFtZVByZXNlcnZpbmdDYXNlKCkpOwotICAg
IGlmICghZWxlbWVudC0+ZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSAmJiBuYW1lc3BhY2Vz
ICYmIHNob3VsZEFkZE5hbWVzcGFjZUVsZW1lbnQoZWxlbWVudCkpCi0gICAgICAgIGFwcGVuZE5h
bWVzcGFjZShvdXQsIGVsZW1lbnQtPnByZWZpeCgpLCBlbGVtZW50LT5uYW1lc3BhY2VVUkkoKSwg
Km5hbWVzcGFjZXMpOyAgICAKLX0KLQotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ2xv
c2VUYWcoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50KQotewotICAgIGlmIChz
aG91bGRTZWxmQ2xvc2UoZWxlbWVudCkpIHsKLSAgICAgICAgaWYgKGVsZW1lbnQtPmlzSFRNTEVs
ZW1lbnQoKSkKLSAgICAgICAgICAgIG91dC5hcHBlbmQoJyAnKTsgLy8gWEhUTUwgMS4wIDwtPiBI
VE1MIGNvbXBhdGliaWxpdHkuCi0gICAgICAgIG91dC5hcHBlbmQoJy8nKTsKLSAgICB9Ci0gICAg
b3V0LmFwcGVuZCgnPicpOwotfQotCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRBdHRy
aWJ1dGUoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBBdHRyaWJ1
dGUmIGF0dHJpYnV0ZSwgTmFtZXNwYWNlcyogbmFtZXNwYWNlcykKLXsKLSAgICBib29sIGRvY3Vt
ZW50SXNIVE1MID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKTsKLQotICAg
IG91dC5hcHBlbmQoJyAnKTsKLQotICAgIGlmIChkb2N1bWVudElzSFRNTCkKLSAgICAgICAgYXBw
ZW5kKG91dCwgYXR0cmlidXRlLm5hbWUoKS5sb2NhbE5hbWUoKSk7Ci0gICAgZWxzZQotICAgICAg
ICBhcHBlbmQob3V0LCBhdHRyaWJ1dGUubmFtZSgpLnRvU3RyaW5nKCkpOwotCi0gICAgb3V0LmFw
cGVuZCgnPScpOwotCi0gICAgaWYgKGVsZW1lbnQtPmlzVVJMQXR0cmlidXRlKGNvbnN0X2Nhc3Q8
QXR0cmlidXRlKj4oJmF0dHJpYnV0ZSkpKSB7Ci0gICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8g
Y29tcGxldGUgZmlsZTovLy8gVVJMcyBiZWNhdXNlIGl0IG1heSBjb250YWluIHNlbnNpdGl2ZSBp
bmZvcm1hdGlvbgotICAgICAgICAvLyBhYm91dCB0aGUgdXNlcidzIHN5c3RlbS4KLSAgICAgICAg
aWYgKHNob3VsZFJlc29sdmVVUkxzKCkgJiYgIWVsZW1lbnQtPmRvY3VtZW50KCktPnVybCgpLmlz
TG9jYWxGaWxlKCkpCi0gICAgICAgICAgICBhcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShv
dXQsIGVsZW1lbnQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGF0dHJpYnV0ZS52YWx1ZSgpKS5z
dHJpbmcoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFwcGVuZFF1b3RlZFVSTEF0dHJp
YnV0ZVZhbHVlKG91dCwgYXR0cmlidXRlLnZhbHVlKCkpOyAKLSAgICB9IGVsc2UgewotICAgICAg
ICBvdXQuYXBwZW5kKCdcIicpOwotICAgICAgICBhcHBlbmRBdHRyaWJ1dGVWYWx1ZShvdXQsIGF0
dHJpYnV0ZS52YWx1ZSgpLCBkb2N1bWVudElzSFRNTCk7Ci0gICAgICAgIG91dC5hcHBlbmQoJ1wi
Jyk7Ci0gICAgfQotCi0gICAgaWYgKCFkb2N1bWVudElzSFRNTCAmJiBuYW1lc3BhY2VzICYmIHNo
b3VsZEFkZE5hbWVzcGFjZUF0dHJpYnV0ZShhdHRyaWJ1dGUsICpuYW1lc3BhY2VzKSkKLSAgICAg
ICAgYXBwZW5kTmFtZXNwYWNlKG91dCwgYXR0cmlidXRlLnByZWZpeCgpLCBhdHRyaWJ1dGUubmFt
ZXNwYWNlVVJJKCksICpuYW1lc3BhY2VzKTsKLX0KLQotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6
YXBwZW5kQ0RBVEFTZWN0aW9uKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgU3RyaW5nJiBzZWN0
aW9uKQotewotICAgIC8vIEZJWE1FOiBDREFUQSBjb250ZW50IGlzIG5vdCBlc2NhcGVkLCBidXQg
WE1MU2VyaWFsaXplciAoYW5kIHBvc3NpYmx5IG90aGVyIGNhbGxlcnMpIHNob3VsZCByYWlzZSBh
biBleGNlcHRpb24gaWYgaXQgaW5jbHVkZXMgIl1dPiIuCi0gICAgYXBwZW5kKG91dCwgIjwhW0NE
QVRBWyIpOwotICAgIGFwcGVuZChvdXQsIHNlY3Rpb24pOwotICAgIGFwcGVuZChvdXQsICJdXT4i
KTsKLX0KLQotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3RhcnRNYXJrdXAoVmVjdG9y
PFVDaGFyPiYgcmVzdWx0LCBjb25zdCBOb2RlKiBub2RlLCBOYW1lc3BhY2VzKiBuYW1lc3BhY2Vz
KQotewotICAgIGlmIChuYW1lc3BhY2VzKQotICAgICAgICBuYW1lc3BhY2VzLT5jaGVja0NvbnNp
c3RlbmN5KCk7Ci0KLSAgICBzd2l0Y2ggKG5vZGUtPm5vZGVUeXBlKCkpIHsKLSAgICBjYXNlIE5v
ZGU6OlRFWFRfTk9ERToKLSAgICAgICAgYXBwZW5kVGV4dChyZXN1bHQsIHN0YXRpY19jYXN0PFRl
eHQqPihjb25zdF9jYXN0PE5vZGUqPihub2RlKSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IE5vZGU6OkNPTU1FTlRfTk9ERToKLSAgICAgICAgYXBwZW5kQ29tbWVudChyZXN1bHQsIHN0YXRp
Y19jYXN0PGNvbnN0IENvbW1lbnQqPihub2RlKS0+ZGF0YSgpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBOb2RlOjpET0NVTUVOVF9OT0RFOgotICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfRlJB
R01FTlRfTk9ERToKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOb2RlOjpET0NVTUVOVF9UWVBF
X05PREU6Ci0gICAgICAgIGFwcGVuZERvY3VtZW50VHlwZShyZXN1bHQsIHN0YXRpY19jYXN0PGNv
bnN0IERvY3VtZW50VHlwZSo+KG5vZGUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOb2Rl
OjpQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREU6Ci0gICAgICAgIGFwcGVuZFByb2Nlc3NpbmdJ
bnN0cnVjdGlvbihyZXN1bHQsIHN0YXRpY19jYXN0PGNvbnN0IFByb2Nlc3NpbmdJbnN0cnVjdGlv
bio+KG5vZGUpLT50YXJnZXQoKSwgc3RhdGljX2Nhc3Q8Y29uc3QgUHJvY2Vzc2luZ0luc3RydWN0
aW9uKj4obm9kZSktPmRhdGEoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTm9kZTo6RUxF
TUVOVF9OT0RFOgotICAgICAgICBhcHBlbmRFbGVtZW50KHJlc3VsdCwgc3RhdGljX2Nhc3Q8RWxl
bWVudCo+KGNvbnN0X2Nhc3Q8Tm9kZSo+KG5vZGUpKSwgbmFtZXNwYWNlcyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFOgotICAgICAgICBhcHBlbmRD
REFUQVNlY3Rpb24ocmVzdWx0LCBzdGF0aWNfY2FzdDxjb25zdCBDREFUQVNlY3Rpb24qPihub2Rl
KS0+ZGF0YSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOb2RlOjpBVFRSSUJVVEVfTk9E
RToKLSAgICBjYXNlIE5vZGU6OkVOVElUWV9OT0RFOgotICAgIGNhc2UgTm9kZTo6RU5USVRZX1JF
RkVSRU5DRV9OT0RFOgotICAgIGNhc2UgTm9kZTo6Tk9UQVRJT05fTk9ERToKLSAgICBjYXNlIE5v
ZGU6OlhQQVRIX05BTUVTUEFDRV9OT0RFOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgZWxlbWVudENh
bm5vdEhhdmVFbmRUYWcoY29uc3QgTm9kZSAqbm9kZSkKK2Jvb2wgZWxlbWVudENhbm5vdEhhdmVF
bmRUYWcoY29uc3QgTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUtPmlzSFRNTEVsZW1lbnQo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTE1LDMzICsxMDUsNiBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgZWxlbWVudENhbm5vdEhhdmVFbmRUYWcoY29uc3QgTm9kZSAqbm9kZSkKICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1lbnQqPihub2RlKS0+aWVGb3JiaWRzSW5z
ZXJ0SFRNTCgpOwogfQogCi0vLyBSdWxlcyBvZiBzZWxmLWNsb3N1cmUKLS8vIDEuIE5vIGVsZW1l
bnRzIGluIEhUTUwgZG9jdW1lbnRzIHVzZSB0aGUgc2VsZi1jbG9zaW5nIHN5bnRheC4KLS8vIDIu
IEVsZW1lbnRzIHcvIGNoaWxkcmVuIG5ldmVyIHNlbGYtY2xvc2UgYmVjYXVzZSB0aGV5IHVzZSBh
IHNlcGFyYXRlIGVuZCB0YWcuCi0vLyAzLiBIVE1MIGVsZW1lbnRzIHdoaWNoIGRvIG5vdCBoYXZl
IGEgImZvcmJpZGRlbiIgZW5kIHRhZyB3aWxsIGNsb3NlIHdpdGggYSBzZXBhcmF0ZSBlbmQgdGFn
LgotLy8gNC4gT3RoZXIgZWxlbWVudHMgc2VsZi1jbG9zZS4KLWJvb2wgTWFya3VwQWNjdW11bGF0
b3I6OnNob3VsZFNlbGZDbG9zZShjb25zdCBOb2RlKiBub2RlKQotewotICAgIGlmIChub2RlLT5k
b2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKG5vZGUtPmhhc0NoaWxkTm9kZXMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlm
IChub2RlLT5pc0hUTUxFbGVtZW50KCkgJiYgIWVsZW1lbnRDYW5ub3RIYXZlRW5kVGFnKG5vZGUp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgTWFy
a3VwQWNjdW11bGF0b3I6OmFwcGVuZEVuZE1hcmt1cChWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNv
bnN0IE5vZGUqIG5vZGUpCi17Ci0gICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkgfHwgc2hv
dWxkU2VsZkNsb3NlKG5vZGUpIHx8ICghbm9kZS0+aGFzQ2hpbGROb2RlcygpICYmIGVsZW1lbnRD
YW5ub3RIYXZlRW5kVGFnKG5vZGUpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcmVzdWx0LmFw
cGVuZCgnPCcpOwotICAgIHJlc3VsdC5hcHBlbmQoJy8nKTsKLSAgICBhcHBlbmQocmVzdWx0LCBz
dGF0aWNfY2FzdDxjb25zdCBFbGVtZW50Kj4obm9kZSktPm5vZGVOYW1lUHJlc2VydmluZ0Nhc2Uo
KSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgnPicpOwotfQotCiBzdGF0aWMgdm9pZCBjb21wbGV0ZVVS
THMoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBiYXNlVVJMKQogewogICAgIFZlY3RvcjxBdHRy
aWJ1dGVDaGFuZ2U+IGNoYW5nZXM7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvbWFya3Vw
LmggYi9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmgKaW5kZXggZGJmOGI4MDMwZTNmODFlZGUyNjJj
YTAyODI0NzIyNjBiMDNhOGQ3MS4uZmM4ZTQzMTA2ZWFiNzhhMTc0YzBmOWIyMmI2ZjVlZjc1YTk4
ZjY3YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5oCisrKyBiL1dlYkNvcmUv
ZWRpdGluZy9tYXJrdXAuaApAQCAtNTYsNiArNTYsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgU3RyaW5nIGNyZWF0ZUZ1bGxNYXJrdXAoY29uc3QgUmFuZ2UqKTsKIAogICAgIFN0cmluZyB1
cmxUb01hcmt1cChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiB0aXRsZSk7CisKKyAgICAvLyBG
SVhNRTogU2hvdWxkIHRoaXMgYmUgYmV0dGVyIGVuY2FwdWxhdGVkIHNvbWV3aGVyZT8KKyAgICBi
b29sIGVsZW1lbnRDYW5ub3RIYXZlRW5kVGFnKGNvbnN0IE5vZGUqKTsKIH0KIAogI2VuZGlmIC8v
IG1hcmt1cF9oCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>